{"version":3,"file":"js/vendors-db26ae6f9804793a4485.js","mappings":"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ACA,iBACA,SACA,OACA,WACA,aACA,OACA,cACA,WACA,WACA,WACA,SACA,WAEA,aACAhC,SAAQgC,IACRurI,EAAWvrI,GAAQ,IAAIysO,EACrBzsO,EA/JY,GAiKZ,EACAA,EAAK6hB,cACL,MACA,GACA,EACD,IAKH,CACE,UAGA,WACA,QACA,YAKA7jB,SAAQgC,IACRurI,EAAWvrI,GAAQ,IAAIysO,EACrBzsO,EAxLY,GA0LZ,EACAA,EACA,MACA,GACA,EACD,IAKH,CACE,UACA,YAKAhC,SAAQgC,IACRurI,EAAWvrI,GAAQ,IAAIysO,EACrBzsO,EAvMuB,GAyMvB,EACAA,EACA,MACA,GACA,EACD,IAIH,CACE,OACA,OACA,OACA,QAKAhC,SAAQgC,IACRurI,EAAWvrI,GAAQ,IAAIysO,EACrBzsO,EArNqB,GAuNrB,EACAA,EACA,MACA,GACA,EACD,IAIH,CAAC,UAAW,SAAShC,SAAQgC,IAC3BurI,EAAWvrI,GAAQ,IAAIysO,EACrBzsO,EAtOY,GAwOZ,EACAA,EAAK6hB,cACL,MACA,GACA,EACD,IAGH,MAAM6qN,EAAW,iBACXhvG,EAAah6F,GAASA,EAAM,GAAGhlC,cAOrC,CACE,gBACA,qBACA,cACA,iBACA,aACA,YACA,YACA,sBACA,8BACA,gBACA,kBACA,oBACA,oBACA,eACA,YACA,cACA,gBACA,cACA,YACA,mBACA,eACA,aACA,eACA,cACA,aACA,+BACA,6BACA,cACA,iBACA,kBACA,iBACA,iBACA,aACA,aACA,eACA,oBACA,qBACA,cACA,WACA,iBACA,mBACA,kBACA,aACA,eACA,yBACA,0BACA,mBACA,oBACA,iBACA,kBACA,oBACA,iBACA,eACA,cACA,kBACA,iBACA,qBACA,sBACA,eACA,gBACA,eACA,eACA,YACA,gBACA,iBACA,gBACA,aACA,gBACA,gBACA,eACA,eACA,cACA,YAKAV,SAAQi2F,IACR,MAAMj0F,EAAOi0F,EAAc3yF,QAAQorO,EAAUhvG,GAC7C6N,EAAWvrI,GAAQ,IAAIysO,EACrBzsO,EA9VW,GAgWX,EACAi0F,EACA,MACA,GACA,EACD,IAIH,CACE,gBACA,gBACA,aACA,aACA,cACA,cAKAj2F,SAAQi2F,IACR,MAAMj0F,EAAOi0F,EAAc3yF,QAAQorO,EAAUhvG,GAC7C6N,EAAWvrI,GAAQ,IAAIysO,EACrBzsO,EAvXW,GAyXX,EACAi0F,EACA,gCACA,GACA,EACD,IAIH,CACE,WACA,WACA,aAKAj2F,SAAQi2F,IACR,MAAMj0F,EAAOi0F,EAAc3yF,QAAQorO,EAAUhvG,GAC7C6N,EAAWvrI,GAAQ,IAAIysO,EACrBzsO,EA7YW,GA+YX,EACAi0F,EACA,wCACA,GACA,EACD,IAMH,CAAC,WAAY,eAAej2F,SAAQi2F,IAClCs3C,EAAWt3C,GAAiB,IAAIw4I,EAC9Bx4I,EA5ZW,GA8ZX,EACAA,EAAcpyE,cACd,MACA,GACA,EACD,IAMH0pH,EAAoB,UAAI,IAAIkhG,EAC1B,YA1aa,GA4ab,EACA,aACA,gCACA,GACA,GAGF,CAAC,MAAO,OAAQ,SAAU,cAAczuO,SAAQi2F,IAC9Cs3C,EAAWt3C,GAAiB,IAAIw4I,EAC9Bx4I,EArbW,GAubX,EACAA,EAAcpyE,cACd,MACA,GACA,EACD,IAIH,MAAM,UACJ8qN,EAAS,KACTC,EACA14I,sBAAuB24I,GACrB,EAAQ,OAeNx4I,EACJ5vE,OAAOrvB,UAAUolB,KAAKsB,KAEpB,IAAI2I,OAAO,+OAMTyvE,EAAwB/+F,OAAOiC,KACnCy1O,GACA7vL,QAAO,CAACu0C,EAAau7I,KACrB,MAAMv4I,EAAWs4I,EAA+BC,GAQhD,OAPIv4I,IAAaq4I,EACfr7I,EAAYu7I,GAAgBA,EACnBv4I,IAAao4I,EACtBp7I,EAAYu7I,EAAajrN,eAAiBirN,EAE1Cv7I,EAAYu7I,GAAgBv4I,EAEvBhD,CAAW,GACjB,CAAC,GAEJ96E,EAAQi+E,QA/dQ,EAgehBj+E,EAAQs2N,kBArekB,EAse1Bt2N,EAAQu2N,QAvdQ,EAwdhBv2N,EAAQk+E,mBA5dmB,EA6d3Bl+E,EAAQw2N,iBArdiB,EAsdzBx2N,EAAQy2N,SAnfS,EAofjBz2N,EAAQ02N,OAhfO,EAiff12N,EAAQg+E,gBAtdR,SAAyBz0F,GACvB,OAAOurI,EAAWh3I,eAAeyL,GAAQurI,EAAWvrI,GAAQ,IAC9D,EAqdAyW,EAAQ49E,kBAAoBA,EAC5B59E,EAAQy9E,sBAAwBA,uBCrgBhCz9E,EAAQm2N,KADG,EAKXn2N,EAAQk2N,UADQ,EAGhBl2N,EAAQy9E,sBAAwB,CAC9B6hF,OAAQ,EACRq3D,cAAe,EACf,iBAAkB,gBAClBC,UAAW,EACX/6L,OAAQ,EACRg7L,gBAAiB,EACjBpvO,IAAK,EACLuyH,GAAI,EACJowB,MAAO,EACP0sF,eAAgB,EAChBC,aAAc,EACdC,YAAa,EACb5jB,UAAW,EACX8S,SAAU,EACV+Q,SAAU,EACV1hF,QAAS,EACT2hF,YAAa,EACbC,YAAa,EACbC,UAAW,EACXC,QAAS,EACT5mO,QAAS,EACTxP,SAAU,EACVq2O,KAAM,EACNxL,MAAO,YACPyL,QAAS,EACTh2O,UAAW,EACXi2O,KAAM,EACNC,QAAS,EACTz3M,QAAS,EACTokL,gBAAiB,EACjBszB,YAAa,EACbrR,SAAU,EACVsR,aAAc,EACdC,OAAQ,EACRC,YAAa,EACb34I,wBAAyB,EACzB3wF,KAAM,EACN4+C,SAAU,EACVjD,QAAS,EACTyoJ,eAAgB,EAChBzwL,aAAc,EACd++G,MAAO,EACPosC,IAAK,EACL1pK,SAAU,EACVm0O,wBAAyB,EACzBC,sBAAuB,EACvBC,SAAU,EACVC,UAAW,EACXC,QAAS,EACTC,aAAc,EACdpgM,IAAK,UACL6hL,KAAM,EACNwe,WAAY,EACZC,WAAY,EACZC,YAAa,EACbC,eAAgB,EAChBC,WAAY,EACZC,YAAa,EACb98F,QAAS,EACT55I,OAAQ,EACR22O,OAAQ,EACRjkM,KAAM,EACNxqC,KAAM,EACN0uO,SAAU,EACVhoO,QAAS,EACTioO,UAAW,EACX,aAAc,YACdh0O,KAAM,EACN4L,GAAI,EACJyvB,UAAW,EACX44M,UAAW,EACXC,UAAW,EACX94I,GAAI,EACJ+4I,OAAQ,EACRC,SAAU,EACVryO,QAAS,EACTsyO,UAAW,EACXC,SAAU,EACVC,UAAW,EACXC,QAAS,EACTtkO,KAAM,EACNpO,MAAO,EACP2yO,KAAM,EACN16J,KAAM,EACNi5D,KAAM,EACN0hG,IAAK,EACLC,SAAU,EACVC,YAAa,EACbC,aAAc,EACdn4N,IAAK,EACL9Y,UAAW,EACXkxO,MAAO,EACPC,WAAY,EACZ91N,OAAQ,EACRxC,IAAK,EACLu4N,UAAW,EACX3mB,SAAU,EACVkT,MAAO,EACP58N,KAAM,EACNswO,SAAU,EACV7U,MAAO,EACP8U,WAAY,EACZ7/M,KAAM,EACN8/M,QAAS,EACTxyL,QAAS,EACTpiD,YAAa,EACb60O,YAAa,EACbC,OAAQ,EACRC,QAAS,EACTC,QAAS,EACTC,WAAY,EACZC,SAAU,EACVC,eAAgB,EAChBpwO,IAAK,EACL07C,SAAU,EACVwwI,SAAU,EACVmkD,KAAM,EACN/wO,KAAM,EACNgxO,QAAS,EACTC,QAAS,EACTnR,MAAO,EACPoR,OAAQ,EACRC,UAAW,EACXC,SAAU,EACVnrO,SAAU,EACV0qJ,MAAO,EACPrzJ,KAAM,EACN+zO,MAAO,EACPC,KAAM,EACNC,WAAY,EACZvzO,IAAK,EACLwzO,OAAQ,EACRC,QAAS,EACTC,OAAQ,EACRr7M,MAAO,EACP+Z,KAAM,EACNp4C,MAAO,EACP25O,QAAS,EACT7xO,SAAU,EACVD,OAAQ,EACR5E,MAAO,EACP9B,KAAM,EACNy4O,OAAQ,EACRr8O,MAAO,EACP+C,MAAO,EACPu5O,MAAO,EACPx6I,KAAM,EACNy6I,MAAO,EACPC,aAAc,EACd,gBAAiB,eACjBC,WAAY,EACZC,SAAU,EACVC,kBAAmB,EACnB,qBAAsB,oBACtBC,aAAc,EACdC,WAAY,EACZC,UAAW,EACXC,WAAY,EACZ,cAAe,aACfC,OAAQ,EACRv+I,cAAe,EACfw+I,cAAe,EACfC,YAAa,EACbC,QAAS,EACTC,cAAe,EACfC,cAAe,EACf,iBAAkB,gBAClBC,YAAa,EACbC,KAAM,EACNC,MAAO,EACPC,KAAM,EACN57F,GAAI,EACJ67F,SAAU,EACVC,UAAW,EACX,aAAc,YACdC,KAAM,EACNC,SAAU,EACV,YAAa,WACbC,cAAe,EACflwO,SAAU,EACV,YAAa,WACb+2M,MAAO,EACPo5B,mBAAoB,EACpB,sBAAuB,qBACvBC,0BAA2B,EAC3B,8BAA+B,4BAC/BC,aAAc,EACd,gBAAiB,eACjBC,eAAgB,EAChB,kBAAmB,iBACnBC,kBAAmB,EACnBC,iBAAkB,EAClB9kE,OAAQ,EACR5sK,GAAI,EACJC,GAAI,EACJjM,EAAG,EACH29O,SAAU,EACVC,WAAY,EACZC,QAAS,EACTC,gBAAiB,EACjBC,UAAW,EACXviO,QAAS,EACTwiO,QAAS,EACTC,iBAAkB,EAClB,oBAAqB,mBACrBC,IAAK,EACLC,GAAI,EACJC,GAAI,EACJC,SAAU,EACVC,UAAW,EACXC,iBAAkB,EAClB,oBAAqB,mBACrBl+M,IAAK,EACLm+M,SAAU,EACVC,0BAA2B,EAC3Bn7O,KAAM,EACNuX,YAAa,EACb,eAAgB,cAChB5N,SAAU,EACV,YAAa,WACbic,OAAQ,EACRw1N,UAAW,EACXC,YAAa,EACb7nC,aAAc,EACd,gBAAiB,eACjB8nC,WAAY,EACZ,cAAe,aACfC,UAAW,EACXhqJ,WAAY,EACZ,cAAe,aACfd,SAAU,EACV,YAAa,WACb+qJ,eAAgB,EAChB,mBAAoB,iBACpBC,YAAa,EACb,eAAgB,cAChBz9O,UAAW,EACX,aAAc,YACd09O,YAAa,EACb,eAAgB,cAChBhrJ,WAAY,EACZ,cAAe,aACfvjC,OAAQ,EACRj4C,KAAM,EACNymO,GAAI,EACJC,GAAI,EACJC,GAAI,EACJC,GAAI,EACJC,UAAW,EACX,aAAc,YACdC,2BAA4B,EAC5B,+BAAgC,6BAChCC,yBAA0B,EAC1B,6BAA8B,2BAC9BC,SAAU,EACVC,kBAAmB,EACnBC,cAAe,EACfC,QAAS,EACTC,UAAW,EACX,cAAe,YACfC,aAAc,EACd,iBAAkB,eAClBC,YAAa,EACbC,eAAgB,EAChB,kBAAmB,iBACnBC,IAAK,EACLC,GAAI,EACJC,OAAQ,EACRC,UAAW,EACXx5J,GAAI,EACJtI,GAAI,EACJ+hK,GAAI,EACJC,GAAI,EACJn9N,EAAG,EACHo9N,aAAc,EACdC,iBAAkB,EAClBC,QAAS,EACTC,UAAW,EACXC,WAAY,EACZC,SAAU,EACVC,aAAc,EACd3sJ,cAAe,EACf,iBAAkB,gBAClB4sJ,cAAe,EACf,iBAAkB,gBAClBC,kBAAmB,EACnBC,MAAO,EACPC,UAAW,EACX,aAAc,YACdC,aAAc,EACdC,UAAW,EACX,aAAc,YACdC,YAAa,EACb,eAAgB,cAChBC,YAAa,EACbC,YAAa,EACbC,KAAM,EACNC,iBAAkB,EAClBC,UAAW,EACXC,aAAc,EACdpvO,KAAM,EACNqvO,WAAY,EACZ1uM,OAAQ,EACRwjK,QAAS,EACTmrC,SAAU,EACVniO,MAAO,EACPoiO,OAAQ,EACRlkN,YAAa,EACb8lB,OAAQ,EACRunK,SAAU,EACV82B,iBAAkB,EAClB,oBAAqB,mBACrBC,kBAAmB,EACnB,qBAAsB,oBACtBC,WAAY,EACZ,cAAe,aACfC,QAAS,EACT,WAAY,UACZC,WAAY,EACZC,oBAAqB,EACrBC,iBAAkB,EAClBC,aAAc,EACdC,cAAe,EACf,iBAAkB,gBAClBC,OAAQ,EACRC,UAAW,EACXC,UAAW,EACXC,UAAW,EACXh7L,OAAQ,EACRi7L,cAAe,EACfC,oBAAqB,EACrBC,eAAgB,EAChB5jM,SAAU,EACVr/C,EAAG,EACHkjP,OAAQ,EACRC,KAAM,EACNC,KAAM,EACNC,gBAAiB,EACjB,mBAAoB,kBACpBC,YAAa,EACbC,UAAW,EACXC,mBAAoB,EACpBC,iBAAkB,EAClBC,SAAU,EACVC,QAAS,EACTvgP,OAAQ,EACR8kF,QAAS,EACT07J,OAAQ,EACRC,GAAI,EACJC,GAAI,EACJppD,MAAO,EACPqpD,SAAU,EACVn9J,KAAM,EACNo9J,eAAgB,EAChB,kBAAmB,iBACnBC,MAAO,EACPC,QAAS,EACTC,iBAAkB,EAClBC,iBAAkB,EAClBC,MAAO,EACPC,aAAc,EACdC,YAAa,EACbC,aAAc,EACdC,MAAO,EACPC,MAAO,EACPC,YAAa,EACbC,UAAW,EACX,aAAc,YACdxtC,YAAa,EACb,eAAgB,cAChBytC,sBAAuB,EACvB,yBAA0B,wBAC1BC,uBAAwB,EACxB,0BAA2B,yBAC3B15K,OAAQ,EACR1nE,OAAQ,EACR2zM,gBAAiB,EACjB,mBAAoB,kBACpBC,iBAAkB,EAClB,oBAAqB,mBACrBzwM,cAAe,EACf,iBAAkB,gBAClBC,eAAgB,EAChB,kBAAmB,iBACnBywM,iBAAkB,EAClB,oBAAqB,mBACrB3wM,YAAa,EACb,eAAgB,cAChB4wM,cAAe,EACf,iBAAkB,gBAClButC,+BAAgC,EAChC1iP,yBAA0B,EAC1B2iP,aAAc,EACdrnN,eAAgB,EAChBsnN,YAAa,EACbC,QAAS,EACTC,QAAS,EACTC,WAAY,EACZ,cAAe,aACfzwJ,eAAgB,EAChB,kBAAmB,iBACnBjrF,WAAY,EACZ27O,cAAe,EACf,iBAAkB,gBAClB3iN,GAAI,EACJg9D,UAAW,EACX4lJ,OAAQ,EACRC,GAAI,EACJC,GAAI,EACJC,kBAAmB,EACnB,qBAAsB,oBACtBC,mBAAoB,EACpB,sBAAuB,qBACvBC,QAAS,EACTC,YAAa,EACb,eAAgB,cAChBC,aAAc,EACd,gBAAiB,eACjBC,WAAY,EACZ,eAAgB,aAChBC,aAAc,EACdC,YAAa,EACb,eAAgB,cAChB/6K,OAAQ,EACRg7K,aAAc,EACd,gBAAiB,eACjBztN,QAAS,EACT0tN,SAAU,EACV,aAAc,WACdC,YAAa,EACb,gBAAiB,cACjBC,YAAa,EACb,gBAAiB,cACjBC,SAAU,EACV,YAAa,WACbC,aAAc,EACd,gBAAiB,eACjBphP,QAAS,EACTqhP,WAAY,EACZC,WAAY,EACZC,cAAe,EACf,iBAAkB,gBAClBC,MAAO,EACPC,OAAQ,EACR7xJ,YAAa,EACb,eAAgB,cAChB8xJ,YAAa,EACb,eAAgB,cAChBC,GAAI,EACJC,GAAI,EACJtlO,EAAG,EACHulO,iBAAkB,EAClBC,QAAS,EACT,WAAY,UACZC,aAAc,EACd,gBAAiB,eACjBC,aAAc,EACd,gBAAiB,eACjBv1C,UAAW,EACX,aAAc,YACdw1C,UAAW,EACX,aAAc,YACdC,UAAW,EACX,aAAc,YACdC,WAAY,EACZ,cAAe,aACfC,UAAW,EACX,aAAc,YACdC,QAAS,EACT,WAAY,UACZC,QAAS,EACT,WAAY,UACZriP,MAAO,EACP,YAAa,WACbsiP,WAAY,EACZ,cAAe,aACfC,SAAU,EACVC,GAAI,EACJC,GAAI,EACJlxM,EAAG,EACHmxM,iBAAkB,EAClBpwM,EAAG,EACHqwM,WAAY,uCCzedxoP,OAAOg5C,eAAe13B,EAAS,aAAc,CAC3CjhB,OAAO,IAGT,IAAIylB,EAAW9lB,OAAO+lB,QAAU,SAAUpb,GAAU,IAAK,IAAInL,EAAI,EAAGA,EAAIomB,UAAUnmB,OAAQD,IAAK,CAAE,IAAI8Q,EAASsV,UAAUpmB,GAAI,IAAK,IAAIW,KAAOmQ,EAActQ,OAAOC,UAAUb,eAAegB,KAAKkQ,EAAQnQ,KAAQwK,EAAOxK,GAAOmQ,EAAOnQ,GAAU,CAAE,OAAOwK,CAAQ,EAI3PuuJ,EAAcD,EAFD,EAAQ,QAIrBF,EAAS,EAAQ,OAEjBC,EAAUC,EAAuBF,GAErC,SAASE,EAAuB72I,GAAO,OAAOA,GAAOA,EAAIk9D,WAAal9D,EAAM,CAAEopC,QAASppC,EAAO,CAI9F,IAAI24E,EAAY,CACd0tJ,QAASvvF,EAAY1tG,QAAQ6wG,UAAU,CAACnD,EAAY1tG,QAAQoB,OAAQssG,EAAY1tG,QAAQsgB,SAASywF,WACjGmsF,IAAKxvF,EAAY1tG,QAAQsgB,OAAOywF,WAChCosF,QAASzvF,EAAY1tG,QAAQ6wG,UAAU,CAACnD,EAAY1tG,QAAQoB,OAAQssG,EAAY1tG,QAAQsgB,SAASywF,WACjGqsF,IAAK1vF,EAAY1tG,QAAQsgB,OAAOywF,WAChCn0J,KAAM8wJ,EAAY1tG,QAAQgB,OAAO+vG,WACjCx2J,MAAOmzJ,EAAY1tG,QAAQsgB,OAC3B+8K,YAAa3vF,EAAY1tG,QAAQgB,OAAO+vG,WACxC12J,MAAOqzJ,EAAY1tG,QAAQsgB,QAGzB4uB,EAAe,CACjB30F,WAAO8Y,EACPhZ,MAAO,8BAGLijP,GAAY,EAAI/vF,EAAOgwF,aAAY,SAAUn7N,EAAMtnB,GACrD,IAAImiP,EAAU76N,EAAK66N,QACfC,EAAM96N,EAAK86N,IACXE,EAAMh7N,EAAKg7N,IACXD,EAAU/6N,EAAK+6N,QACfvgP,EAAOwlB,EAAKxlB,KACZrC,EAAQ6nB,EAAK7nB,MACb8iP,EAAcj7N,EAAKi7N,YACnB1lP,EA1BN,SAAkCif,EAAKngB,GAAQ,IAAI0I,EAAS,CAAC,EAAG,IAAK,IAAInL,KAAK4iB,EAAWngB,EAAKZ,QAAQ7B,IAAM,GAAkBQ,OAAOC,UAAUb,eAAegB,KAAKgiB,EAAK5iB,KAAcmL,EAAOnL,GAAK4iB,EAAI5iB,IAAM,OAAOmL,CAAQ,CA0B7M20J,CAAyB1xI,EAAM,CAAC,UAAW,MAAO,MAAO,UAAW,OAAQ,QAAS,gBAEjG,OAAOorI,EAAQxtG,QAAQ1pD,cACrB,MACAgkB,EAAS,CAAC,EAAG3iB,EAAO,CAAEE,OAAQ+E,EAAM9B,IAAKA,EAAKV,QAAS,OAASijP,EAAc,IAAMA,EAAazlP,MAAOgF,IACxGrC,EAAQizJ,EAAQxtG,QAAQ1pD,cACtB,QACA,KACAiE,GACE,KACJizJ,EAAQxtG,QAAQ1pD,cAAc,OAAQ,CAAEf,EAAG2nP,EAAKrkP,KAAMokP,IACtDzvF,EAAQxtG,QAAQ1pD,cAAc,OAAQ,CAAEf,EAAG6nP,EAAKvkP,KAAMskP,IAE1D,IAEAG,EAAU52O,YAAc,YACxB42O,EAAU/tJ,UAAYA,EACtB+tJ,EAAUpuJ,aAAeA,EAEzBp5E,EAAA,QAAkBwnO,qCCxDlB,IAAIhjO,EAAW9lB,OAAO+lB,QAAU,SAAUpb,GAAU,IAAK,IAAInL,EAAI,EAAGA,EAAIomB,UAAUnmB,OAAQD,IAAK,CAAE,IAAI8Q,EAASsV,UAAUpmB,GAAI,IAAK,IAAIW,KAAOmQ,EAActQ,OAAOC,UAAUb,eAAegB,KAAKkQ,EAAQnQ,KAAQwK,EAAOxK,GAAOmQ,EAAOnQ,GAAU,CAAE,OAAOwK,CAAQ,EAI3Pq+O,EAAW/vF,EAFD,EAAQ,QAMlBgwF,EAAsBhwF,EAFD,EAAQ,QAM7BC,EAAcD,EAFD,EAAQ,QAIrBF,EAAS,EAAQ,OAEjBC,EAAUC,EAAuBF,GAIjCmwF,EAAcjwF,EAFD,EAAQ,QAIzB,SAASA,EAAuB72I,GAAO,OAAOA,GAAOA,EAAIk9D,WAAal9D,EAAM,CAAEopC,QAASppC,EAAO,CAK9F,IAAI24E,EAAY,CACd0tJ,QAASvvF,EAAY1tG,QAAQ6wG,UAAU,CAACnD,EAAY1tG,QAAQoB,OAAQssG,EAAY1tG,QAAQsgB,SACxF68K,QAASzvF,EAAY1tG,QAAQ6wG,UAAU,CAACnD,EAAY1tG,QAAQoB,OAAQssG,EAAY1tG,QAAQsgB,SACxFq9K,MAAOjwF,EAAY1tG,QAAQsgB,OAC3B1jE,KAAM8wJ,EAAY1tG,QAAQgB,OAC1BnsD,MAAO64J,EAAY1tG,QAAQsgB,OAAOywF,YAUhC8zB,GAAS,EAAIt3B,EAAOgwF,aAAY,SAAUn7N,EAAMtnB,GAClD,IAAImiP,EAAU76N,EAAK66N,QACfE,EAAU/6N,EAAK+6N,QACfQ,EAAQv7N,EAAKu7N,MACb/gP,EAAOwlB,EAAKxlB,KACZ/H,EAAQutB,EAAKvtB,MACb8C,EAxBN,SAAkCif,EAAKngB,GAAQ,IAAI0I,EAAS,CAAC,EAAG,IAAK,IAAInL,KAAK4iB,EAAWngB,EAAKZ,QAAQ7B,IAAM,GAAkBQ,OAAOC,UAAUb,eAAegB,KAAKgiB,EAAK5iB,KAAcmL,EAAOnL,GAAK4iB,EAAI5iB,IAAM,OAAOmL,CAAQ,CAwB7M20J,CAAyB1xI,EAAM,CAAC,UAAW,UAAW,QAAS,OAAQ,UAG/Ew7N,EAAS,IAAIJ,EAASx9L,SAAS,EAAGy9L,EAAoBz9L,QAAQ29L,IAClEC,EAAOx4D,QAAQvwL,GACf+oP,EAAOl4D,OACP,IAAIm4D,EAAQD,EAAO54D,QACnB,OAAOx3B,EAAQxtG,QAAQ1pD,cAAconP,EAAY19L,QAAS1lC,EAAS,CAAC,EAAG3iB,EAAO,CAC5EslP,QAASA,EACTC,IAAKW,EAAMtlP,KAAI,SAAUgtL,EAAKu4D,GAC5B,OAAOv4D,EAAIhtL,KAAI,SAAUwlP,EAAMC,GAC7B,OAAQD,EAAiE,GAA1D,KAAOC,EAAY,IAAMF,EAAW,mBACrD,IAAGzkO,KAAK,IACV,IAAGA,KAAK,KACR8jO,QAASA,EACTC,IAAKS,EAAMtlP,KAAI,SAAUgtL,EAAKu4D,GAC5B,OAAOv4D,EAAIhtL,KAAI,SAAUwlP,EAAMC,GAC7B,OAAOD,EAAO,KAAOC,EAAY,IAAMF,EAAW,oBAAsB,EAC1E,IAAGzkO,KAAK,IACV,IAAGA,KAAK,KACRve,IAAKA,EACL8B,KAAMA,EACNygP,YAAaQ,EAAM5pP,SAEvB,IAGA4wL,EAAOn+K,YAAc,SACrBm+K,EAAOt1F,UAAYA,EACnBs1F,EAAO31F,aA1CY,CACjB+tJ,QAAS,UACTE,QAAS,UACTQ,MAAO,IACP/gP,KAAM,KAwCRkZ,EAAQ,GAAU+uK,oLCjFlB,IAAIh2C,EAJJ,SAA0BjsG,GACxBA,GACF,EAIO,MAEMq7M,EAAW,IAAMpvG,iBCR9B,MAAMqvG,EAAaxwM,OAAOG,IAAI,uBACxBswM,EAA2B,qBAAfpnM,WAA6BA,WAE/C,CAAC,EAED,SAAS/pB,IACP,IAAIoxN,EAEJ,IAAK,gBAAqB,MAAO,CAAC,EAClC,MAAMC,EAAkD,OAApCD,EAAiBD,EAAGD,IAAuBE,EAAiBD,EAAGD,GAAc,IAAI9yM,IACrG,IAAIkzM,EAAcD,EAAW96N,IAAI,iBAYjC,OAVK+6N,IACHA,EAAc,gBAAoB,MAMlCD,EAAWnzM,IAAI,gBAAqBozM,IAG/BA,CACT,CAEO,MAAMC,EAAiCvxN,IChBvC,SAASwxN,EAAuBjlO,EAAUglO,GAC/C,OAAO,WAOL,OANqB,IAAAz5B,YAAWvrM,EAOlC,CACF,CAkBO,MAAM,EAA+B,SAAAilO,IAAwB,gCClCpE,IAAIC,EAAmC,WAAc,OAC9C,MAIDC,EAAc,CAACtpP,EAAGu3B,IAAMv3B,IAAMu3B,EAmI7B,MAAMgyN,EAA2B,SA1HjC,SAA4BplO,EAAUglO,GAC3C,MAAMK,EAAkBrlO,IAAYglO,EAAoB,EAAyBC,EAAuBjlO,GACxG,OAAO,SAAqByvH,EAAU61G,EAAsB,CAAC,GAC3D,MAAM,WACJC,EAAaJ,EAAW,eACxBK,EAA0B,UAC1BC,GACiC,oBAAxBH,EAAqC,CAC9CC,WAAYD,GACVA,EAgBJ,MAAM,MACJnlE,EAAK,aACLnE,EAAY,eACZ0pE,EACAF,eAAgBG,EAChBF,UAAWG,GACTP,IAEEQ,IADW,IAAAvkP,SAAO,IACA,IAAAoL,aAAY,CAClC,CAAC+iI,EAAS3pI,MAAM0jB,GAuDd,OAtDiBimH,EAASjmH,EAuD5B,GAEAimH,EAAS3pI,MAAO,CAAC2pI,EAAUk2G,EAAsBH,KAC7CM,EAAgBZ,EAAiClpE,EAAa+pE,aAAc5lE,EAAM/jI,SAAUspM,GAAkBvlE,EAAM/jI,SAAUypM,EAAiBN,GAErJ,OADA,IAAA15B,eAAci6B,GACPA,CACT,CACF,CAyBwC,GAAoB,KC5I7C,SAAS/kO,IAetB,OAdAA,EAAW9lB,OAAO+lB,QAAU,SAAUpb,GACpC,IAAK,IAAInL,EAAI,EAAGA,EAAIomB,UAAUnmB,OAAQD,IAAK,CACzC,IAAI8Q,EAASsV,UAAUpmB,GAEvB,IAAK,IAAIW,KAAOmQ,EACVtQ,OAAOC,UAAUb,eAAegB,KAAKkQ,EAAQnQ,KAC/CwK,EAAOxK,GAAOmQ,EAAOnQ,GAG3B,CAEA,OAAOwK,CACT,EAEOmb,EAASE,MAAMC,KAAML,UAC9B,CChBe,SAAS+9K,EAA8BrzL,EAAQmzL,GAC5D,GAAc,MAAVnzL,EAAgB,MAAO,CAAC,EAC5B,IAEInQ,EAAKX,EAFLmL,EAAS,CAAC,EACV+4L,EAAa1jM,OAAOiC,KAAKqO,GAG7B,IAAK9Q,EAAI,EAAGA,EAAIkkM,EAAWjkM,OAAQD,IACjCW,EAAMujM,EAAWlkM,GACbikM,EAASpiM,QAAQlB,IAAQ,IAC7BwK,EAAOxK,GAAOmQ,EAAOnQ,IAGvB,OAAOwK,CACT,mCCZA,MAAMogP,EAAY,CAAC,sBAAuB,yBAA0B,kBAE7D,SAASC,EAA8BC,EAAiBC,EAAoBC,EAAYjqM,GAAU,eACvGkqM,EAAc,iBACdC,EAAgB,mBAChBC,IAEA,IACI/8N,EACAg9N,EACAC,EACAC,EACAC,EALAC,GAAoB,EAuCxB,SAASC,EAAsB1pD,EAAW2pD,GACxC,MAAMC,GAAgBT,EAAiBQ,EAAcN,GAC/CQ,GAAgBX,EAAelpD,EAAW3zK,EAAOs9N,EAAcN,GAGrE,OAFAh9N,EAAQ2zK,EACRqpD,EAAWM,EACPC,GAAgBC,GA1BpBP,EAAaP,EAAgB18N,EAAOg9N,GAChCL,EAAmBc,oBAAmBP,EAAgBP,EAAmBhqM,EAAUqqM,IACvFG,EAAcP,EAAWK,EAAYC,EAAeF,GAC7CG,GAwBHI,GApBAb,EAAgBe,oBAAmBR,EAAaP,EAAgB18N,EAAOg9N,IACvEL,EAAmBc,oBAAmBP,EAAgBP,EAAmBhqM,EAAUqqM,IACvFG,EAAcP,EAAWK,EAAYC,EAAeF,GAC7CG,GAkBHK,EAfN,WACE,MAAME,EAAiBhB,EAAgB18N,EAAOg9N,GACxCW,GAAqBZ,EAAmBW,EAAgBT,GAG9D,OAFAA,EAAaS,EACTC,IAAmBR,EAAcP,EAAWK,EAAYC,EAAeF,IACpEG,CACT,CAS2BS,GAClBT,CACT,CAEA,OAAO,SAAgCxpD,EAAW2pD,GAChD,OAAOF,EAAoBC,EAAsB1pD,EAAW2pD,IA3C5Dt9N,EA2C4F2zK,EA1C5FqpD,EA0CuGM,EAzCvGL,EAAaP,EAAgB18N,EAAOg9N,GACpCE,EAAgBP,EAAmBhqM,EAAUqqM,GAC7CG,EAAcP,EAAWK,EAAYC,EAAeF,GACpDI,GAAoB,EACbD,EAsCT,CACF,CC5DO,SAASU,EAKhBC,GACE,OAAO,SAA8BnrM,GACnC,MAAM8gF,EAAWqqH,EAAYnrM,GAE7B,SAASorM,IACP,OAAOtqH,CACT,CAGA,OADAsqH,EAAiBN,mBAAoB,EAC9BM,CACT,CACF,CASO,SAASC,EAAqBC,GACnC,OAAOA,EAAWR,kBAAoBrjO,QAAQ6jO,EAAWR,mBAA2C,IAAtBQ,EAAW/sP,MAC3F,CAaO,SAASgtP,EAAmBD,EAAYx9I,GAC7C,OAAO,SAA2B9tD,GAAU,YAC1ChvC,IAEA,MAAMuiC,EAAQ,SAAyBi4M,EAAiBnB,GACtD,OAAO92M,EAAMu3M,kBAAoBv3M,EAAM+3M,WAAWE,EAAiBnB,GAAY92M,EAAM+3M,WAAWE,OAAiB7tO,EACnH,EAoBA,OAjBA41B,EAAMu3M,mBAAoB,EAE1Bv3M,EAAM+3M,WAAa,SAAgCE,EAAiBnB,GAClE92M,EAAM+3M,WAAaA,EACnB/3M,EAAMu3M,kBAAoBO,EAAqBC,GAC/C,IAAIrpP,EAAQsxC,EAAMi4M,EAAiBnB,GASnC,MAPqB,oBAAVpoP,IACTsxC,EAAM+3M,WAAarpP,EACnBsxC,EAAMu3M,kBAAoBO,EAAqBppP,GAC/CA,EAAQsxC,EAAMi4M,EAAiBnB,IAI1BpoP,CACT,EAEOsxC,CACT,CACF,CCrEO,SAASk4M,EAAwBjtP,EAAKmL,GAC3C,MAAO,CAACq2C,EAAU16C,KAChB,MAAM,IAAImjB,MAAM,gCAAgCjqB,SAAWmL,wCAA2CrE,EAAQomP,wBAAwB,CAE1I,CCDO,SAASC,EAAkBrB,EAAYC,EAAeF,GAE3D,OAAOzlO,EAAS,CAAC,EAAGylO,EAAUC,EAAYC,EAC5C,CCkEA,MAAMqB,EAAgB,CACpB,MAAAxoO,GAAU,EAEVyK,IAAK,IAAM,IAEN,SAASg+N,EAAmB7nE,EAAO8nE,GACxC,IAAIxwF,EACAgZ,EAAYs3E,EAEZG,EAAsB,EAEtBC,GAAiB,EAoBrB,SAASC,IACHpsE,EAAaqsE,eACfrsE,EAAaqsE,eAEjB,CAMA,SAASC,IACPJ,IAEKzwF,IACHA,EAAcwwF,EAAYA,EAAUlC,aAAaqC,GAAuBjoE,EAAMvwI,UAAUw4M,GACxF33E,EAlHN,WACE,MAAMn7B,EAAQovG,IACd,IAAI1iM,EAAQ,KACRyjF,EAAO,KACX,MAAO,CACL,KAAAz8G,GACEg5B,EAAQ,KACRyjF,EAAO,IACT,EAEA,MAAAlmH,GACE+1H,GAAM,KACJ,IAAI5zG,EAAWsgB,EAEf,KAAOtgB,GACLA,EAAS2H,WACT3H,EAAWA,EAASzS,IACtB,GAEJ,EAEA,GAAAjF,GACE,IAAIymJ,EAAY,GACZ/uI,EAAWsgB,EAEf,KAAOtgB,GACL+uI,EAAUl0K,KAAKmlC,GACfA,EAAWA,EAASzS,KAGtB,OAAOwhJ,CACT,EAEA,SAAA7gI,CAAUvG,GACR,IAAIk/M,GAAe,EACf7mN,EAAW+jG,EAAO,CACpBp8F,WACApa,KAAM,KACNyM,KAAM+pG,GASR,OANI/jG,EAAShG,KACXgG,EAAShG,KAAKzM,KAAOyS,EAErBsgB,EAAQtgB,EAGH,WACA6mN,GAA0B,OAAVvmM,IACrBumM,GAAe,EAEX7mN,EAASzS,KACXyS,EAASzS,KAAKyM,KAAOgG,EAAShG,KAE9B+pG,EAAO/jG,EAAShG,KAGdgG,EAAShG,KACXgG,EAAShG,KAAKzM,KAAOyS,EAASzS,KAE9B+yB,EAAQtgB,EAASzS,KAErB,CACF,EAGJ,CAgDkBu5N,GAEhB,CAEA,SAASC,IACPP,IAEIzwF,GAAuC,IAAxBywF,IACjBzwF,IACAA,OAAc39I,EACd22J,EAAUznJ,QACVynJ,EAAYs3E,EAEhB,CAgBA,MAAM/rE,EAAe,CACnB+pE,aA/DF,SAAsBrkN,GACpB4mN,IACA,MAAMI,EAAkBj4E,EAAU7gI,UAAUlO,GAE5C,IAAIinN,GAAU,EACd,MAAO,KACAA,IACHA,GAAU,EACVD,IACAD,IACF,CAEJ,EAoDEG,iBAlDF,WACEn4E,EAAUlxJ,QACZ,EAiDE6oO,sBACAG,aA1CF,WACE,OAAOJ,CACT,EAyCEG,aAnBF,WACOH,IACHA,GAAiB,EACjBG,IAEJ,EAeEG,eAbF,WACMN,IACFA,GAAiB,EACjBM,IAEJ,EASEI,aAAc,IAAMp4E,GAEtB,OAAOuL,CACT,CCnJO,MACM8sE,IADiC,qBAAXnpP,QAAqD,qBAApBA,OAAO/D,UAAqE,qBAAlC+D,OAAO/D,SAASmB,eACzE,kBAAwB,YCX7E,SAASw/F,EAAGp/E,EAAGk1B,GACb,OAAIl1B,IAAMk1B,EACK,IAANl1B,GAAiB,IAANk1B,GAAW,EAAIl1B,IAAM,EAAIk1B,EAEpCl1B,IAAMA,GAAKk1B,IAAMA,CAE5B,CAEe,SAAS02M,EAAaC,EAAMC,GACzC,GAAI1sJ,EAAGysJ,EAAMC,GAAO,OAAO,EAE3B,GAAoB,kBAATD,GAA8B,OAATA,GAAiC,kBAATC,GAA8B,OAATA,EAC3E,OAAO,EAGT,MAAMC,EAAQjuP,OAAOiC,KAAK8rP,GACpBG,EAAQluP,OAAOiC,KAAK+rP,GAC1B,GAAIC,EAAMxuP,SAAWyuP,EAAMzuP,OAAQ,OAAO,EAE1C,IAAK,IAAID,EAAI,EAAGA,EAAIyuP,EAAMxuP,OAAQD,IAChC,IAAKQ,OAAOC,UAAUb,eAAegB,KAAK4tP,EAAMC,EAAMzuP,MAAQ8hG,EAAGysJ,EAAKE,EAAMzuP,IAAKwuP,EAAKC,EAAMzuP,KAC1F,OAAO,EAIX,OAAO,CACT,wBCxBA,MAAM,EAAY,CAAC,0BAgBnB,IAAI,EAAuB,IACpB,MAKD2uP,EAAwB,CAAC,KAAM,MAoBrC,SAASC,EAAoBC,EAAkBC,EAAgBC,EAAmBC,EAClFC,EAA2Bd,GAEzBU,EAAiB5pP,QAAU+pP,EAC3BD,EAAkB9pP,SAAU,EAExBgqP,EAA0BhqP,UAC5BgqP,EAA0BhqP,QAAU,KACpCkpP,IAEJ,CAmFA,SAASe,EAAY9tP,EAAGu3B,GACtB,OAAOv3B,IAAMu3B,CACf,CA8QA,MAlPA,SAAiB8yN,EAAiBC,EAAoBC,GAAY,KAGhEwD,EAAI,eACJvD,EAAiBsD,EAAW,iBAC5BrD,EAAmByC,EAAY,mBAC/BxC,EAAqBwC,EAAY,oBACjCc,EAAsBd,EAAY,WAElC/E,GAAa,EAAK,QAElBhkO,EAAUglO,GACR,CAAC,GAQH,MAAM8E,EAAU9pO,EACV+pO,EC1LD,SAAgC7D,GACrC,OAAQA,EAAkF,oBAApBA,EACtEwB,EAAmBxB,GAAsC0B,EAAwB1B,EAAiB,mBADxEmB,GAAuB,KAAM,CAAG,IAE5D,CDuL8B2C,CAAuB9D,GAC7C+D,EE1LD,SAAmC9D,GACxC,OAAOA,GAAoD,kBAAvBA,EAAkCkB,GAAuBlrM,GCJhF,SAA4B+tM,EAAgB/tM,GACzD,MAAMguM,EAAsB,CAAC,EAE7B,IAAK,MAAM/uP,KAAO8uP,EAAgB,CAChC,MAAMjyM,EAAgBiyM,EAAe9uP,GAER,oBAAlB68C,IACTkyM,EAAoB/uP,GAAO,IAAIb,IAAS4hD,EAASlE,KAAiB19C,IAEtE,CAEA,OAAO4vP,CACT,CDPEC,CAAmBjE,EAAoBhqM,KAAcgqM,EAEjB,oBAAvBA,EACbuB,EAAmBvB,GAA4CyB,EAAwBzB,EAAoB,sBAHjCkB,GAAuBlrM,IAAY,CAC3GA,cAGJ,CFoLiCkuM,CAA0BlE,GACnDmE,EJjKD,SAA2BlE,GAChC,OAAQA,EAA6D,oBAAfA,EAvBjD,SAA4BA,GACjC,OAAO,SAA6BjqM,GAAU,YAC5ChvC,EAAW,oBACX08O,IAEA,IACIlD,EADA4D,GAAa,EAEjB,OAAO,SAAyB9D,EAAYC,EAAeF,GACzD,MAAMgE,EAAkBpE,EAAWK,EAAYC,EAAeF,GAU9D,OARI+D,EACGV,EAAoBW,EAAiB7D,KAAcA,EAAc6D,IAEtED,GAAa,EACb5D,EAAc6D,GAIT7D,CACT,CACF,CACF,CAEoF8D,CAAmBrE,GAAcwB,EAAwBxB,EAAY,cAAlI,IAAM0B,CAC7B,CI+JyB4C,CAAkBtE,GACnCuE,EAA2B/mO,QAAQsiO,GAuNzC,OArNwB0E,IAKtB,MAAM/C,EAAuB+C,EAAiBz9O,aAAey9O,EAAiB9kP,MAAQ,YAChFqH,EAAc,WAAW06O,KACzBgD,EAAyB,CAC7BF,2BACAx9O,cACA06O,uBACA+C,mBAEAb,sBAEAE,yBACAK,iBACAjE,iBACAE,qBACAD,mBACAuD,uBAGF,SAASiB,EAAgB1sP,GACvB,MAAO2sP,EAAcC,EAAwBvB,GAAgB,WAAc,KAIzE,MAAM,uBACJuB,GACE5sP,EACEqrP,EAAe7qD,EAA8BxgM,EAAO,GAE1D,MAAO,CAACA,EAAM4hB,QAASgrO,EAAwBvB,EAAa,GAC3D,CAACrrP,IACE6sP,EAAe,WAAc,IAG1BF,GAAgBA,EAAaG,WACpC,IAAAtZ,mBAAgC,gBAAoBmZ,EAAaG,SAAU,OAASH,EAAejB,GAClG,CAACiB,EAAcjB,IAEZqB,EAAe,aAAiBF,GAIhCG,EAAwBxnO,QAAQxlB,EAAM+hL,QAAUv8J,QAAQxlB,EAAM+hL,MAAM/jI,WAAax4B,QAAQxlB,EAAM+hL,MAAMhkI,UACrGkvM,EAA0BznO,QAAQunO,IAAiBvnO,QAAQunO,EAAahrE,OAO9E,MAAMA,EAAQirE,EAAwBhtP,EAAM+hL,MAAQgrE,EAAahrE,MAC3DulE,EAAiB2F,EAA0BF,EAAazF,eAAiBvlE,EAAM/jI,SAC/EkvM,EAAqB,WAAc,IPvLhC,SAAmCnvM,EAAUtzB,GAC1D,IAAI,oBACFkhO,EAAmB,uBACnBE,EAAsB,eACtBK,GACEzhO,EACApnB,EAAUm9L,EAA8B/1K,EAAMm9N,GAUlD,OAAOC,EARiB8D,EAAoB5tM,EAAU16C,GAC3BwoP,EAAuB9tM,EAAU16C,GACzC6oP,EAAenuM,EAAU16C,GAM0C06C,EAAU16C,EAClG,COyKe,CAAuB0+K,EAAMhkI,SAAU0uM,IAC7C,CAAC1qE,KACGnE,EAAc4sE,GAAoB,WAAc,KACrD,IAAK+B,EAA0B,OAAOvB,EAGtC,MAAMptE,EAAegsE,EAAmB7nE,EAAOirE,OAAwBtxO,EAAYqxO,EAAanvE,cAK1F4sE,EAAmB5sE,EAAa4sE,iBAAiBhnO,KAAKo6J,GAC5D,MAAO,CAACA,EAAc4sE,EAAiB,GACtC,CAACzoE,EAAOirE,EAAuBD,IAG5BI,EAAyB,WAAc,IACvCH,EAIKD,EAKFpqO,EAAS,CAAC,EAAGoqO,EAAc,CAChCnvE,kBAED,CAACovE,EAAuBD,EAAcnvE,IAEnCutE,EAAiB,WACjBD,EAAmB,SAAaG,GAChCC,EAA4B,WAC5BF,EAAoB,UAAa,GAEjC9/B,GADuB,UAAa,GACxB,UAAa,IACzB8hC,EAAkC,WACxC1C,GAA0B,KACxBp/B,EAAUhqN,SAAU,EACb,KACLgqN,EAAUhqN,SAAU,CAAK,IAE1B,IACH,MAAM+rP,EAA2B,WAAc,IAC5B,IAOX/B,EAA0BhqP,SAAW+pP,IAAiBH,EAAiB5pP,QAClEgqP,EAA0BhqP,QAO5B4rP,EAAmBnrE,EAAM/jI,WAAYqtM,IAI7C,CAACtpE,EAAOspE,IAILiC,EAAoB,WAAc,IACpBC,GACX3vE,EAxQf,SAA0B2uE,EAA0BxqE,EAAOnE,EAAcsvE,EAAoBhC,EAAkBC,EAAgBC,EAAmB9/B,EAAWggC,EAA2Bd,EACxLgD,GAEE,IAAKjB,EAA0B,MAAO,OAEtC,IAAIkB,GAAiB,EACjBC,EAAkB,KAEtB,MAAMC,EAAkB,KACtB,GAAIF,IAAmBniC,EAAUhqN,QAG/B,OAIF,MAAMssP,EAAmB7rE,EAAM/jI,WAC/B,IAAI8yL,EAAetqO,EAEnB,IAGEsqO,EAAgBoc,EAAmBU,EAAkB1C,EAAiB5pP,QACxE,CAAE,MAAOlE,GACPoJ,EAAQpJ,EACRswP,EAAkBtwP,CACpB,CAEKoJ,IACHknP,EAAkB,MAIhB5c,IAAkBqa,EAAe7pP,QAC9B8pP,EAAkB9pP,SACrBkpP,KAOFW,EAAe7pP,QAAUwvO,EACzBwa,EAA0BhqP,QAAUwvO,EACpCsa,EAAkB9pP,SAAU,EAG5BksP,IACF,EAyBF,OArBA5vE,EAAaqsE,cAAgB0D,EAC7B/vE,EAAassE,eAGbyD,IAE2B,KAKzB,GAJAF,GAAiB,EACjB7vE,EAAaysE,iBACbzsE,EAAaqsE,cAAgB,KAEzByD,EAMF,MAAMA,CACR,CAIJ,CAkMiBG,CAAiBtB,EAA0BxqE,EAAOnE,EACzDsvE,EAAoBhC,EAAkBC,EAAgBC,EAAmB9/B,EAAWggC,EAA2Bd,EAAkB+C,GAJxH,QAQV,CAAC3vE,IApSV,IAA2CkwE,EAAYC,EAAY3uE,EAsS7D,IAAI4uE,EAtSiCF,EAqSH7C,EArSe8C,EAqSM,CAAC7C,EAAkBC,EAAgBC,EAAmBC,EAAcC,EAA2Bd,GApS1JE,GAA0B,IAAMoD,KAAcC,IAAa3uE,GAuSvD,IACE4uE,EAAmB,EACnBV,EAEAD,EAA0B/F,EAAiB,IAAM4F,EAAmB5F,IAAkB+D,GAAgBgC,EACxG,CAAE,MAAOtkO,GAMP,MALIqkO,EAAgC9rP,UAElCynB,EAAIpd,SAAW,4DAA4DyhP,EAAgC9rP,QAAQ8kB,aAG/G2C,CACR,CAEA2hO,GAA0B,KACxB0C,EAAgC9rP,aAAUoa,EAC1C4vO,EAA0BhqP,aAAUoa,EACpCyvO,EAAe7pP,QAAU0sP,CAAgB,IAI3C,MAAMC,EAA2B,WAAc,IAI3C,gBAAoBzB,EAAkB7pO,EAAS,CAAC,EAAGqrO,EAAkB,CACnE7qP,IAAKypP,MAGR,CAACA,EAAwBJ,EAAkBwB,IAe9C,OAZsB,WAAc,IAC9BzB,EAIkB,gBAAoBM,EAAaqB,SAAU,CAC7DhxP,MAAOiwP,GACNc,GAGEA,GACN,CAACpB,EAAcoB,EAA0Bd,GAE9C,CAEA,MAGMgB,EAHW,OAAWzB,GAO5B,GAHAyB,EAAQ3B,iBAAmBA,EAC3B2B,EAAQp/O,YAAc29O,EAAgB39O,YAAcA,EAEhD62O,EAAY,CACd,MAOMwI,EAPa,cAAiB,SAA2BpuP,EAAOmD,GAEpE,OAAoB,gBAAoBgrP,EAASxrO,EAAS,CAAC,EAAG3iB,EAAO,CACnE4sP,uBAAwBzpP,IAE5B,IAKA,OAFAirP,EAAUr/O,YAAcA,EACxBq/O,EAAU5B,iBAAmBA,EACtB,IAAa4B,EAAW5B,EACjC,CAEA,OAAO,IAAa2B,EAAS3B,EAAiB,CAIlD,EIxWA,MA1CA,UAAkB,MAChBzqE,EAAK,QACLngK,EAAO,SACPxiB,EAAQ,YACRivP,EAAW,eACXjH,EAAiB,OAAM,UACvBC,EAAY,SAEZ,MAAM0F,EAAe,WAAc,KACjC,MAAMnvE,EAAegsE,EAAmB7nE,GACxC,MAAO,CACLA,QACAnE,eACA0pE,eAAgB+G,EAAc,IAAMA,OAAc3yO,EAClD0rO,iBACAC,YACD,GACA,CAACtlE,EAAOssE,EAAajH,EAAgBC,IAClCiH,EAAgB,WAAc,IAAMvsE,EAAM/jI,YAAY,CAAC+jI,IAC7D2oE,GAA0B,KACxB,MAAM,aACJ9sE,GACEmvE,EAQJ,OAPAnvE,EAAaqsE,cAAgBrsE,EAAa4sE,iBAC1C5sE,EAAassE,eAEToE,IAAkBvsE,EAAM/jI,YAC1B4/H,EAAa4sE,mBAGR,KACL5sE,EAAaysE,iBACbzsE,EAAaqsE,mBAAgBvuO,CAAS,CACvC,GACA,CAACqxO,EAAcuB,IAClB,MAAM5C,EAAU9pO,GAAWglO,EAE3B,OAAoB,gBAAoB8E,EAAQwC,SAAU,CACxDhxP,MAAO6vP,GACN3tP,EACL,ECpCO,SAASmvP,EAAgB3sO,EAAUglO,GACxC,MAAMK,EACNrlO,IAAYglO,EAAoB,EAChCC,EAAuBjlO,GACvB,OAAO,WACL,MAAM,MACJmgK,GACEklE,IAEJ,OAAOllE,CACT,CACF,CAiBO,MAAM,EAAwB,SAAAwsE,IAAiB,KCG/C,MAAMC,EAA2B,SA/BjC,SAA4B5sO,EAAUglO,GAC3C,MAAM6H,EACN7sO,IAAYglO,EAAoB,EAAkB2H,EAAgB3sO,GAClE,OAAO,WAGL,OAFc6sO,IAED1wM,QACf,CACF,CAuBwC,GAAoB,KhBnCvBv/B,MHEbkwO,EGFalwO,EiBIf,EAAAsoO,iCjBHpBA,EAAmCtoO,EUaJA,KAC/B,EAAuBA,CAAE,EOV3BmwO,CAAkB,EAAA9gC,sBpBHM6gC,EoBMf,0BpBN2Bx3G,EAAQw3G,sEqBPrC,MAAME,EAAiB,KAC5B,MAAM,IAAIpoO,MAAM,wBAAwB,wCCQ+ZvoB,EAAxb+2B,EAAE+gB,OAAOG,IAAI,iBAAiB93C,EAAE23C,OAAOG,IAAI,gBAAgBt4C,EAAEm4C,OAAOG,IAAI,kBAAkB94C,EAAE24C,OAAOG,IAAI,qBAAqBr2B,EAAEk2B,OAAOG,IAAI,kBAAkBxM,EAAEqM,OAAOG,IAAI,kBAAkB1zC,EAAEuzC,OAAOG,IAAI,iBAAiBp1B,EAAEi1B,OAAOG,IAAI,wBAAwBtC,EAAEmC,OAAOG,IAAI,qBAAqB9R,EAAE2R,OAAOG,IAAI,kBAAkB54C,EAAEy4C,OAAOG,IAAI,uBAAuB9zB,EAAE2zB,OAAOG,IAAI,cAAcxC,EAAEqC,OAAOG,IAAI,cAAc74C,EAAE04C,OAAOG,IAAI,mBACtb,SAASnxB,EAAEtnB,GAAG,GAAG,kBAAkBA,GAAG,OAAOA,EAAE,CAAC,IAAIF,EAAEE,EAAE4yM,SAAS,OAAO9yM,GAAG,KAAKy3B,EAAE,OAAOv3B,EAAEA,EAAEqD,MAAQ,KAAKlD,EAAE,KAAKiiB,EAAE,KAAKziB,EAAE,KAAKgnC,EAAE,KAAK9mC,EAAE,OAAOG,EAAE,QAAQ,OAAOA,EAAEA,GAAGA,EAAE4yM,UAAY,KAAKvvL,EAAE,KAAKte,EAAE,KAAKoxC,EAAE,KAAKF,EAAE,KAAKtxB,EAAE,KAAKsnB,EAAE,OAAOjsC,EAAE,QAAQ,OAAOF,GAAG,KAAKa,EAAE,OAAOb,EAAE,CAAC,CADkMU,EAAE83C,OAAOG,IAAI,0BAE1W/3B,EAAQq1N,kBAAkB,SAAS/1O,GAAG,OAAOsnB,EAAEtnB,KAAK+E,CAAC,sCCRjK0b,EAAOC,QAAU,EAAjB,yCCDFthB,OAAOg5C,eAAe13B,EAAS,aAAc,CAC3CjhB,OAAO,IAETihB,EAAA,aAAkB,EAUlBA,EAAA,QARe,SAAkBmzE,EAAUu9J,EAAQx6F,GACjD,IAAIy6F,EAA+B,IAAbx9J,EAAiBA,EAAWA,EAAWu9J,EAI7D,MAFqB,eACI,KAFE,eAATx6F,EAAwB,CAACy6F,EAAiB,EAAG,GAAK,CAAC,EAAGA,EAAiB,IAE9CptO,KAAK,KAAO,IAEzD,sCCXA7kB,OAAOg5C,eAAe13B,EAAS,aAAc,CAC3CjhB,OAAO,IAETihB,EAAQ4wO,qBAAuB5wO,EAAQ6wO,wBAA0B7wO,EAAQ8wO,2BAA6B9wO,EAAQ+wO,2BAAwB,EAEtI,IAMgCjwO,EAN5B22I,EAAS,EAAQ,OAEjBu5F,GAI4BlwO,EAJW,EAAQ,SAIEA,EAAIk9D,WAAal9D,EAAM,CAAEopC,QAASppC,GAFnFmwO,EAAS,EAAQ,OAIrB,SAASh5M,EAAQqT,EAAQgpI,GAAkB,IAAI3zL,EAAOjC,OAAOiC,KAAK2qD,GAAS,GAAI5sD,OAAOw5C,sBAAuB,CAAE,IAAIg/G,EAAUx4J,OAAOw5C,sBAAsBoT,GAAagpI,IAAgBp9B,EAAUA,EAAQvuI,QAAO,SAAU4rK,GAAO,OAAO71L,OAAOo4C,yBAAyBwU,EAAQipI,GAAK1+I,UAAY,KAAIl1C,EAAKX,KAAK0kB,MAAM/jB,EAAMu2J,EAAU,CAAE,OAAOv2J,CAAM,CAEpV,SAASuwP,EAAc7nP,GAAU,IAAK,IAAInL,EAAI,EAAGA,EAAIomB,UAAUnmB,OAAQD,IAAK,CAAE,IAAI8Q,EAAyB,MAAhBsV,UAAUpmB,GAAaomB,UAAUpmB,GAAK,CAAC,EAAOA,EAAI,EAAK+5C,EAAQv5C,OAAOsQ,IAAS,GAAMzH,SAAQ,SAAU1I,GAAO41L,EAAgBprL,EAAQxK,EAAKmQ,EAAOnQ,GAAO,IAAeH,OAAO05C,0BAA6B15C,OAAOu7C,iBAAiB5wC,EAAQ3K,OAAO05C,0BAA0BppC,IAAmBipC,EAAQv5C,OAAOsQ,IAASzH,SAAQ,SAAU1I,GAAOH,OAAOg5C,eAAeruC,EAAQxK,EAAKH,OAAOo4C,yBAAyB9nC,EAAQnQ,GAAO,GAAM,CAAE,OAAOwK,CAAQ,CAErhB,SAASorL,EAAgB3zK,EAAKjiB,EAAKE,GAAiK,OAApJF,KAAOiiB,EAAOpiB,OAAOg5C,eAAe52B,EAAKjiB,EAAK,CAAEE,MAAOA,EAAO82C,YAAY,EAAMD,cAAc,EAAMD,UAAU,IAAkB70B,EAAIjiB,GAAOE,EAAgB+hB,CAAK,CA4DhNd,EAAQ+wO,sBArDoB,SAA+BlvP,EAAOorB,GAChE,IAAIkkO,EAAe,CAAC,EAChBC,EAAenkO,EAAMmkO,aACrBC,EAAeD,EACfE,EAAe75F,EAAO4D,SAAStiJ,MAAMlX,EAAMZ,UAAY,EAG3D,GAFsBY,EAAM0vP,eAAiBH,EAAe,GAAKA,EAAeE,GAa9E,OAVID,EAAe,EACbxvP,EAAM2vP,YAAc3vP,EAAM4vP,uBAAwC,eAAf5vP,EAAMq0J,KAC3Di7F,EAAaO,eAAgB,EAAIT,EAAOU,eAAeL,EAAe,GAAKzvP,EAAM4vP,uBAAyB,IAAM5vP,EAAM4vP,uBAAyB,EAAG5vP,EAAMq0J,MAExJi7F,EAAaO,eAAgB,EAAIT,EAAOU,aAAmC,MAApBL,EAAe,GAAUzvP,EAAMq0J,MAE/Em7F,EAAeC,IACxBH,EAAaO,eAAgB,EAAIT,EAAOU,aAAa,EAAG9vP,EAAMq0J,OAGzDi7F,EAGT,IAAIS,GAAkB,EAAIX,EAAOnqB,aAAasqB,EAAcvvP,GAExDgwP,GAAgB,EAAIb,EAAc9mM,SAAS0nM,EAAiB,IAAK/vP,EAAMq0J,MACvE47F,EAAiBjwP,EAAMiwP,eAAiB,KAkB5C,OAjBAX,EAAaO,cAAgB,CAC3BK,gBAAiBF,EACjBG,YAAaH,EACbI,WAAYJ,EACZ/yJ,UAAW+yJ,GAGR5kO,EAAMilO,UACTf,EAAaO,cAAgBR,EAAcA,EAAc,CAAC,EAAGC,EAAaO,eAAgB,CAAC,EAAG,CAC5FS,yBAA0BL,EAC1BM,sBAAuBN,EACvBO,oBAAqBP,EACrBQ,mBAAoBR,EACpBS,qBAAsBT,KAInBX,CACT,EAwEAnxO,EAAQ8wO,2BA5DyB,SAAoC/tM,EAAOlhD,EAAOorB,EAAOua,GACxF,IAAI2pN,EAAe,CAAC,EAChBqB,EAA8B,eAAf3wP,EAAMq0J,KAErBu8F,EAAiBh7F,EAAO4D,SAAStiJ,MAAMlX,EAAMZ,UAG7C2wP,GAAkB,EAAIX,EAAOnqB,aAAa75M,EAAMmkO,aAAcvvP,GAC9D6wP,EAAe7wP,EAAM0vP,cAAe,EAAIN,EAAOnqB,aAAa2rB,EAAiB,EAAG5wP,GAAS,KAAM,EAAIovP,EAAOnqB,aAAa2rB,EAAiB,EAAG5wP,GAC3I8wP,EAAYH,EAAezvM,EAAMniC,EAAImiC,EAAMjN,EAC3C88M,EAAeD,EAJE,IAMjBf,GAAsCe,EAAY,IACpDC,EAAe,GAIbhB,IAAoBc,GAAgBC,EAAY,IAClDC,EAAe,GAGjB,IAAIz/J,EAAWy+J,EAAkB,KAAO3kO,EAAM++D,SAAW4mK,GACrDC,EAAWv+N,KAAK+2B,IAAIsnM,GAAa9wP,EAAMixP,qBA6B3C,OA3BIjxP,EAAM0vP,cAAgBsB,IAGG,IAAvB5lO,EAAMmkO,cAAsBj+J,GAAY,IAC1CA,GAA6B,IAAjBs/J,EACHxlO,EAAMmkO,eAAiBqB,EAAiB,GAAKt/J,EAA6B,KAAjBs/J,IAClEt/J,GAA6B,IAAjBs/J,MAIX5wP,EAAMkxP,0CAA4CF,GAAY5lO,EAAM+lO,wBAClE/lO,EAAM+lO,sBACTxrN,EAAS,CACPwrN,sBAAsB,IAI1B7B,EAAaO,eAAgB,EAAIT,EAAOU,aAAax+J,EAAUtxF,EAAMq0J,OAInE28F,IAAa5lO,EAAMgmO,aACrBzrN,EAAS,CACPyrN,aAAa,IAIV9B,CACT,EAwBAnxO,EAAQ6wO,wBAdsB,SAAiChvP,EAAOorB,GACpE,IAAI2kO,GAAkB,EAAIX,EAAOnqB,aAAa75M,EAAMmkO,aAAcvvP,GAElE,MAAO,CACL6vP,eAFkB,EAAIT,EAAOU,aAAaC,EAAiB/vP,EAAMq0J,MAIrE,EAkDAl2I,EAAQ4wO,qBAxCmB,SAA8B/uP,EAAOorB,GAC9D,IAAI6kO,EAAiBjwP,EAAMiwP,eAAiB,KACxCoB,EAA2B,cAC3BC,EAAa,CACfhgK,SAAU,WACVl4E,QAAS,QACTo7L,QAAS,EACT+8C,UAAW,OACXn9C,QAAS,EACT9vM,IAAK,EACL6W,MAAO,EACP5D,KAAM,EACN2D,OAAQ,EACRm2O,yBAA0BA,EAC1BG,2BAA4BH,EAC5BI,4BAA6BJ,EAC7BK,+BAAgCL,EAChCM,0BAA2BN,GAa7B,OAVKjmO,EAAMilO,UACTiB,EAAajC,EAAcA,EAAc,CAAC,EAAGiC,GAAa,CAAC,EAAG,CAC5DhB,yBAA0BL,EAC1BM,sBAAuBN,EACvBO,oBAAqBP,EACrBQ,mBAAoBR,EACpBS,qBAAsBT,KAInB,CACLqB,WAAYA,EACZM,cAAevC,EAAcA,EAAc,CAAC,EAAGiC,GAAa,CAAC,EAAG,CAC9Dl9C,QAAS,EACT9iH,SAAU,aAEZugK,UAAWxC,EAAc,CAAC,EAAGiC,GAEjC,sCCnMAz0P,OAAOg5C,eAAe13B,EAAS,aAAc,CAC3CjhB,OAAO,IAETihB,EAAA,aAAkB,EAElB,IAAIy3I,EAoBJ,SAAiC32I,GAAO,GAAIA,GAAOA,EAAIk9D,WAAc,OAAOl9D,EAAO,GAAY,OAARA,GAAiC,WAAjBs2I,EAAQt2I,IAAoC,oBAARA,EAAsB,MAAO,CAAEopC,QAASppC,GAAS,IAAIi2G,EAAQ48H,IAA4B,GAAI58H,GAASA,EAAM5hF,IAAIr0B,GAAQ,OAAOi2G,EAAMtpG,IAAI3M,GAAQ,IAAI8yO,EAAS,CAAC,EAAOC,EAAwBn1P,OAAOg5C,gBAAkBh5C,OAAOo4C,yBAA0B,IAAK,IAAIj4C,KAAOiiB,EAAO,GAAIpiB,OAAOC,UAAUb,eAAegB,KAAKgiB,EAAKjiB,GAAM,CAAE,IAAIk/E,EAAO81K,EAAwBn1P,OAAOo4C,yBAAyBh2B,EAAKjiB,GAAO,KAAUk/E,IAASA,EAAKtwD,KAAOswD,EAAK3oC,KAAQ12C,OAAOg5C,eAAek8M,EAAQ/0P,EAAKk/E,GAAgB61K,EAAO/0P,GAAOiiB,EAAIjiB,EAAQ,CAAI+0P,EAAO1pM,QAAUppC,EAASi2G,GAASA,EAAM3hF,IAAIt0B,EAAK8yO,GAAW,OAAOA,CAAQ,CApB3tBE,CAAwB,EAAQ,QAEzCC,EAAkBp8F,EAAuB,EAAQ,QAEjDq8F,EAAcr8F,EAAuB,EAAQ,QAE7Cs8F,EAAUt8F,EAAuB,EAAQ,QAEzCu8F,EAAYv8F,EAAuB,EAAQ,QAE3Cw8F,EAAUx8F,EAAuB,EAAQ,MAEzCs5F,EAAS,EAAQ,OAEjBmD,EAAc,EAAQ,OAE1B,SAASz8F,EAAuB72I,GAAO,OAAOA,GAAOA,EAAIk9D,WAAal9D,EAAM,CAAEopC,QAASppC,EAAO,CAE9F,SAAS6yO,IAA6B,GAAuB,oBAAZ/hJ,QAAwB,OAAO,KAAM,IAAImlB,EAAQ,IAAInlB,QAA6F,OAAlF+hJ,EAA2B,WAAsC,OAAO58H,CAAO,EAAUA,CAAO,CAIjN,SAASqgC,EAAQt2I,GAAmV,OAAtOs2I,EAArD,oBAAXx/G,QAAoD,kBAApBA,OAAOI,SAAmC,SAAiBl3B,GAAO,cAAcA,CAAK,EAAsB,SAAiBA,GAAO,OAAOA,GAAyB,oBAAX82B,QAAyB92B,EAAI0lB,cAAgBoR,QAAU92B,IAAQ82B,OAAOj5C,UAAY,gBAAkBmiB,CAAK,EAAYs2I,EAAQt2I,EAAM,CAEzX,SAAS0D,IAA2Q,OAA9PA,EAAW9lB,OAAO+lB,QAAU,SAAUpb,GAAU,IAAK,IAAInL,EAAI,EAAGA,EAAIomB,UAAUnmB,OAAQD,IAAK,CAAE,IAAI8Q,EAASsV,UAAUpmB,GAAI,IAAK,IAAIW,KAAOmQ,EAActQ,OAAOC,UAAUb,eAAegB,KAAKkQ,EAAQnQ,KAAQwK,EAAOxK,GAAOmQ,EAAOnQ,GAAU,CAAE,OAAOwK,CAAQ,EAAUmb,EAASE,MAAMC,KAAML,UAAY,CAE5T,SAAS2zB,EAAQqT,EAAQgpI,GAAkB,IAAI3zL,EAAOjC,OAAOiC,KAAK2qD,GAAS,GAAI5sD,OAAOw5C,sBAAuB,CAAE,IAAIg/G,EAAUx4J,OAAOw5C,sBAAsBoT,GAAagpI,IAAgBp9B,EAAUA,EAAQvuI,QAAO,SAAU4rK,GAAO,OAAO71L,OAAOo4C,yBAAyBwU,EAAQipI,GAAK1+I,UAAY,KAAIl1C,EAAKX,KAAK0kB,MAAM/jB,EAAMu2J,EAAU,CAAE,OAAOv2J,CAAM,CAEpV,SAASuwP,EAAc7nP,GAAU,IAAK,IAAInL,EAAI,EAAGA,EAAIomB,UAAUnmB,OAAQD,IAAK,CAAE,IAAI8Q,EAAyB,MAAhBsV,UAAUpmB,GAAaomB,UAAUpmB,GAAK,CAAC,EAAOA,EAAI,EAAK+5C,EAAQv5C,OAAOsQ,IAAS,GAAMzH,SAAQ,SAAU1I,GAAO41L,EAAgBprL,EAAQxK,EAAKmQ,EAAOnQ,GAAO,IAAeH,OAAO05C,0BAA6B15C,OAAOu7C,iBAAiB5wC,EAAQ3K,OAAO05C,0BAA0BppC,IAAmBipC,EAAQv5C,OAAOsQ,IAASzH,SAAQ,SAAU1I,GAAOH,OAAOg5C,eAAeruC,EAAQxK,EAAKH,OAAOo4C,yBAAyB9nC,EAAQnQ,GAAO,GAAM,CAAE,OAAOwK,CAAQ,CAIrhB,SAASqrL,EAAkBrrL,EAAQxH,GAAS,IAAK,IAAI3D,EAAI,EAAGA,EAAI2D,EAAM1D,OAAQD,IAAK,CAAE,IAAIy8F,EAAa94F,EAAM3D,GAAIy8F,EAAW9kD,WAAa8kD,EAAW9kD,aAAc,EAAO8kD,EAAW/kD,cAAe,EAAU,UAAW+kD,IAAYA,EAAWhlD,UAAW,GAAMj3C,OAAOg5C,eAAeruC,EAAQsxF,EAAW97F,IAAK87F,EAAa,CAAE,CAM5T,SAASl0D,EAAgBrgC,EAAG6d,GAA+G,OAA1GwiB,EAAkB/nC,OAAOgoC,gBAAkB,SAAyBtgC,EAAG6d,GAAsB,OAAjB7d,EAAEugC,UAAY1iB,EAAU7d,CAAG,EAAUqgC,EAAgBrgC,EAAG6d,EAAI,CAEzK,SAAS2wK,EAAaC,GAAW,IAAIC,EAMrC,WAAuC,GAAuB,qBAAZh9I,UAA4BA,QAAQi9I,UAAW,OAAO,EAAO,GAAIj9I,QAAQi9I,UAAUC,KAAM,OAAO,EAAO,GAAqB,oBAAV39I,MAAsB,OAAO,EAAM,IAAiF,OAA3ExpC,KAAKlP,UAAUF,SAASK,KAAKg5C,QAAQi9I,UAAUlnL,KAAM,IAAI,WAAa,MAAY,CAAM,CAAE,MAAO5O,GAAK,OAAO,CAAO,CAAE,CANlQg2L,GAA6B,OAAO,WAAkC,IAAsCzyL,EAAlC0yL,EAAQP,EAAgBE,GAAkB,GAAIC,EAA2B,CAAE,IAAIK,EAAYR,EAAgBhwK,MAAM6hB,YAAahkC,EAASs1C,QAAQi9I,UAAUG,EAAO5wK,UAAW6wK,EAAY,MAAS3yL,EAAS0yL,EAAMxwK,MAAMC,KAAML,WAAc,OAEpX,SAAoCqP,EAAM70B,GAAQ,GAAIA,IAA2B,WAAlBs4J,EAAQt4J,IAAsC,oBAATA,GAAwB,OAAOA,EAAQ,OAAOqnC,EAAuBxS,EAAO,CAF2MwkI,CAA2BxzI,KAAMniB,EAAS,CAAG,CAIxa,SAAS2jC,EAAuBxS,GAAQ,QAAa,IAATA,EAAmB,MAAM,IAAIyS,eAAe,6DAAgE,OAAOzS,CAAM,CAIrK,SAASghK,EAAgBvuL,GAAwJ,OAAnJuuL,EAAkBj2L,OAAOgoC,eAAiBhoC,OAAOo2C,eAAiB,SAAyB1uC,GAAK,OAAOA,EAAEugC,WAAajoC,OAAOo2C,eAAe1uC,EAAI,EAAUuuL,EAAgBvuL,EAAI,CAE5M,SAASquL,EAAgB3zK,EAAKjiB,EAAKE,GAAiK,OAApJF,KAAOiiB,EAAOpiB,OAAOg5C,eAAe52B,EAAKjiB,EAAK,CAAEE,MAAOA,EAAO82C,YAAY,EAAMD,cAAc,EAAMD,UAAU,IAAkB70B,EAAIjiB,GAAOE,EAAgB+hB,CAAK,CAEhN,IAAIuzO,EAAwB,SAAUhtN,IAhBtC,SAAmBf,EAAUC,GAAc,GAA0B,oBAAfA,GAA4C,OAAfA,EAAuB,MAAM,IAAI1f,UAAU,sDAAyDyf,EAAS3nC,UAAYD,OAAO6yB,OAAOgV,GAAcA,EAAW5nC,UAAW,CAAE6nC,YAAa,CAAEznC,MAAOunC,EAAUqP,UAAU,EAAMC,cAAc,KAAerP,GAAYE,EAAgBH,EAAUC,EAAa,CAiB9XmyH,CAAU27F,EAAUhtN,GAEpB,IArBoBiwH,EAAaC,EAAYC,EAqBzCz7G,EAAS64I,EAAay/D,GAG1B,SAASA,EAASxyP,GAChB,IAAIk0B,GA7BR,SAAyBuxH,EAAUgQ,GAAe,KAAMhQ,aAAoBgQ,GAAgB,MAAM,IAAIzwI,UAAU,oCAAwC,CA+BpJqxI,CAAgBvzI,KAAM0vO,GAItB5/D,EAAgBtuJ,EAFhBpQ,EAAQgmB,EAAOj9C,KAAK6lB,KAAM9iB,IAEqB,iBAAa,GAE5D4yL,EAAgBtuJ,EAAuBpQ,GAAQ,0BAAsB,GAErE0+J,EAAgBtuJ,EAAuBpQ,GAAQ,eAAW,GAE1D0+J,EAAgBtuJ,EAAuBpQ,GAAQ,gBAAY,GAE3D0+J,EAAgBtuJ,EAAuBpQ,GAAQ,aAAS,GAExD0+J,EAAgBtuJ,EAAuBpQ,GAAQ,wBAAoB,GAEnE0+J,EAAgBtuJ,EAAuBpQ,GAAQ,gBAAgB,SAAUgtD,GACvEhtD,EAAMu+N,UAAYvxK,CACpB,IAEA0xG,EAAgBtuJ,EAAuBpQ,GAAQ,yBAAyB,SAAUgtD,GAChFhtD,EAAMw+N,mBAAqBxxK,CAC7B,IAEA0xG,EAAgBtuJ,EAAuBpQ,GAAQ,cAAc,SAAUgtD,GACrEhtD,EAAMy+N,QAAUzxK,CAClB,IAEA0xG,EAAgBtuJ,EAAuBpQ,GAAQ,eAAe,SAAUgtD,EAAM18E,GACvE0vB,EAAM0+N,WACT1+N,EAAM0+N,SAAW,IAGnB1+N,EAAM0+N,SAASpuP,GAAS08E,CAC1B,IAEA0xG,EAAgBtuJ,EAAuBpQ,GAAQ,YAAY,WACrD0hI,EAAO4D,SAAStiJ,MAAMgd,EAAMl0B,MAAMZ,WAAa,IAInD80B,EAAM2+N,gBAED3+N,EAAMl0B,MAAMqkO,WAIjBnwM,EAAM4+N,MAAQ1hO,YAAW,WACvB8C,EAAM4qH,WACR,GAAG5qH,EAAMl0B,MAAMy2D,WACjB,IAEAm8H,EAAgBtuJ,EAAuBpQ,GAAQ,iBAAiB,WAC1DA,EAAM4+N,OAAO1+J,aAAalgE,EAAM4+N,MACtC,IAEAlgE,EAAgBtuJ,EAAuBpQ,GAAQ,iBAAiB,WAC9DA,EAAM2+N,gBAEN3+N,EAAMmwM,UACR,IAEAzxC,EAAgBtuJ,EAAuBpQ,GAAQ,eAAe,WAC5DA,EAAMyR,SAAS,CACbotN,gBAAgB,GACf7+N,EAAM2+N,cACX,IAEAjgE,EAAgBtuJ,EAAuBpQ,GAAQ,gBAAgB,WAC7DA,EAAMyR,SAAS,CACbotN,gBAAgB,GACf7+N,EAAMmwM,SACX,IAEAzxC,EAAgBtuJ,EAAuBpQ,GAAQ,4BAA4B,WACzE,QAAKA,EAAMw+N,uBAIP,EAAIL,EAAUhqM,WAAWuoJ,gBAAkB18K,EAAMw+N,qBAAsBx+N,EAAMw+N,mBAAmB7jN,UAAS,EAAIwjN,EAAUhqM,WAAWuoJ,eAKxI,IAEAhe,EAAgBtuJ,EAAuBpQ,GAAQ,wBAAwB,SAAU92B,GAC/E,GAAK82B,EAAM8+N,2BAAX,CAIA,IACIrC,EAAwB,eADjBz8N,EAAMl0B,MAAMq0J,KASnB4+F,EAAUtC,EAHD,GAHF,IAKGA,EAJA,GACD,MAMGvzP,EAAE+8L,QAChBjmK,EAAM4qH,YACGm0G,IAAY71P,EAAE+8L,SACvBjmK,EAAMg/N,WAhBR,CAkBF,IAEAtgE,EAAgBtuJ,EAAuBpQ,GAAQ,eAAe,WAC5D,GAAKA,EAAM9I,MAAMinN,aAAgBn+M,EAAM0+N,UAAsC,IAA1B1+N,EAAM0+N,SAASt2P,OAAlE,CAIA,IAAIq0P,EAAoC,eAArBz8N,EAAMl0B,MAAMq0J,KAC3B8+F,EAAYj/N,EAAM0+N,SAAS,GAE/B,GAAKO,EAAL,CAIA,IAAIhpK,EAAWwmK,EAAewC,EAAU17O,YAAc07O,EAAU33N,aAEhEtH,EAAMyR,SAAS,CACbwkD,SAAUA,IAGRj2D,EAAMu+N,WACRv+N,EAAMu+N,UAAUW,aATlB,CAPA,CAkBF,IAEAxgE,EAAgBtuJ,EAAuBpQ,GAAQ,iBAAiB,WAC9DA,EAAMyR,SAAS,CACb0tN,UAAU,IAGZn/N,EAAMk/N,aACR,IAEAxgE,EAAgBtuJ,EAAuBpQ,GAAQ,mBAAmB,SAAU1vB,EAAOqI,GAC7B,IAAhD+oJ,EAAO4D,SAAStiJ,MAAMgd,EAAMl0B,MAAMZ,YAIlC80B,EAAM9I,MAAMgmO,YACdl9N,EAAMyR,SAAS,CACbyrN,aAAa,KAMjBl9N,EAAMl0B,MAAMszP,YAAY9uP,EAAOqI,GAE3BrI,IAAU0vB,EAAM9I,MAAMmkO,cACxBr7N,EAAMyR,SAAS,CACb4pN,aAAc/qP,KAGpB,IAEAouL,EAAgBtuJ,EAAuBpQ,GAAQ,kBAAkB,SAAU1vB,EAAOqI,GAC5E+oJ,EAAO4D,SAAStiJ,MAAMgd,EAAMl0B,MAAMZ,WAAa,GAInD80B,EAAMl0B,MAAM6G,SAASrC,EAAOqI,EAC9B,IAEA+lL,EAAgBtuJ,EAAuBpQ,GAAQ,oBAAoB,SAAU1vB,EAAOqI,GAClFqnB,EAAMl0B,MAAMuzP,aAAa/uP,EAAOqI,GAEhCqnB,EAAMs7J,OAAOhrL,EACf,IAEAouL,EAAgBtuJ,EAAuBpQ,GAAQ,gBAAgB,SAAU5sB,GACvE4sB,EAAMyR,SAAS,CACb0qN,SAAS,IAGXn8N,EAAMl0B,MAAMgmO,aAAa1+N,EAC3B,IAEAsrL,EAAgBtuJ,EAAuBpQ,GAAQ,cAAc,SAAU5sB,GACrE4sB,EAAMyR,SAAS,CACb0qN,SAAS,EACTe,aAAa,EACbD,sBAAsB,IAGxBj9N,EAAMl0B,MAAMqmO,WAAW/+N,GAEvB4sB,EAAM2+N,gBAEF3+N,EAAM9I,MAAMi5M,UACdnwM,EAAMmwM,UAEV,IAEAzxC,EAAgBtuJ,EAAuBpQ,GAAQ,eAAe,SAAUgtB,EAAO55C,GAC7E4sB,EAAMl0B,MAAMmmO,YAAY7+N,GAExB,IAAIksP,EAA2Bt/N,EAAMl0B,MAAMyzP,sBAAsBvyM,EAAOhtB,EAAMl0B,MAAOk0B,EAAM9I,MAAO8I,EAAMyR,SAASniB,KAAK8gB,EAAuBpQ,KAM7I,OAJAA,EAAMyR,SAAS0pN,EAAc,CAAC,EAAGmE,MAIxB32P,OAAOiC,KAAK00P,GAA0Bl3P,MACjD,IAEAs2L,EAAgBtuJ,EAAuBpQ,GAAQ,aAAa,WAC1D,IAAIw/N,EAAYjxO,UAAUnmB,OAAS,QAAsBof,IAAjB+G,UAAU,GAAmBA,UAAU,GAAK,EAEpFyR,EAAMs7J,OAAOt7J,EAAM9I,MAAMmkO,cAAqC,kBAAdmE,EAAyBA,EAAY,GACvF,IAEA9gE,EAAgBtuJ,EAAuBpQ,GAAQ,aAAa,WAC1D,IAAIw/N,EAAYjxO,UAAUnmB,OAAS,QAAsBof,IAAjB+G,UAAU,GAAmBA,UAAU,GAAK,EAEpFyR,EAAMs7J,OAAOt7J,EAAM9I,MAAMmkO,cAAqC,kBAAdmE,EAAyBA,EAAY,GACvF,IAEA9gE,EAAgBtuJ,EAAuBpQ,GAAQ,UAAU,SAAUo9D,GACjE,GAAwB,kBAAbA,EAAX,CAIA,IAAIm+J,EAAe75F,EAAO4D,SAAStiJ,MAAMgd,EAAMl0B,MAAMZ,UAAY,EAE7DkyF,EAAW,IACbA,EAAWp9D,EAAMl0B,MAAM0vP,aAAeD,EAAe,GAGnDn+J,EAAWm+J,IACbn+J,EAAWp9D,EAAMl0B,MAAM0vP,aAAe,EAAID,GAG5Cv7N,EAAMy/N,WAAW,CAEfpE,aAAcj+J,IAKZp9D,EAAM9I,MAAMi5M,WAA2C,IAA/BnwM,EAAM9I,MAAM2nO,gBACtC7+N,EAAM0/N,eApBR,CAsBF,IAEAhhE,EAAgBtuJ,EAAuBpQ,GAAQ,eAAe,WAC5DA,EAAM4qH,UAAU,EAClB,IAEA8zC,EAAgBtuJ,EAAuBpQ,GAAQ,eAAe,WAC5DA,EAAMg/N,UAAU,EAClB,IAEAtgE,EAAgBtuJ,EAAuBpQ,GAAQ,kBAAkB,WAC/DA,EAAM4qH,UAAU,GAEZ5qH,EAAMl0B,MAAM6zP,cACd3/N,EAAMyR,SAAS,CACbyrN,aAAa,GAGnB,IAEAx+D,EAAgBtuJ,EAAuBpQ,GAAQ,oBAAoB,WACjEA,EAAMg/N,UAAU,GAEZh/N,EAAMl0B,MAAM6zP,cACd3/N,EAAMyR,SAAS,CACbyrN,aAAa,GAGnB,IAEAx+D,EAAgBtuJ,EAAuBpQ,GAAQ,cAAc,SAAU4/N,GACrE,OAAO,SAAU12P,IACV,EAAIgyP,EAAO2E,iBAAiB32P,IAAgB,UAAVA,EAAEJ,KACvCk3B,EAAMs7J,OAAOskE,EAEjB,CACF,IAEAlhE,EAAgBtuJ,EAAuBpQ,GAAQ,cAAc,SAAU9I,GAErE8I,EAAMyR,SAAS0pN,EAAc,CAC3BG,aAAct7N,EAAM9I,MAAMmkO,cACzBnkO,IAAQ,WAET8I,EAAMyR,SAASzR,EAAM8/N,iBAAiB9/N,EAAMl0B,MAAOk0B,EAAM9I,OAC3D,IAEA8I,EAAM+/N,eAAe7oO,EAAMmkO,aAAc35F,EAAO4D,SAAS/1B,QAAQvvG,EAAMl0B,MAAMZ,UAAUgsB,EAAMmkO,cAC/F,IAEA38D,EAAgBtuJ,EAAuBpQ,GAAQ,mBAAmB,WAChE,IAAIq7N,EAAer7N,EAAMl0B,MAAMuvP,aAC3B1iP,EAAOqnB,EAAM0+N,UAAY1+N,EAAM0+N,SAASrD,GAE5C,OADa1iP,GAAQA,EAAK7O,qBAAqB,QAAU,IAC3C,EAChB,IAEA40L,EAAgBtuJ,EAAuBpQ,GAAQ,yBAAyB,SAAUo9D,GAChF,IAAIzkF,EAAOqnB,EAAM0+N,UAAY1+N,EAAM0+N,SAASthK,GAE5C,GAAIp9D,EAAM9I,MAAMioO,UAAYxmP,GAAQA,EAAKzN,SAAS9C,OAAQ,CACxD,IAAI43P,EAAcrnP,EAAKzN,SAAS,GAAGpB,qBAAqB,QAAU,GAElE,GAAIk2P,EAAY53P,OAAS,EAAG,CAC1B,IAAIonO,EAAQwwB,EAAY,GAExB,IAAKxwB,EAAM1xL,SAAU,CAQnB0xL,EAAMvhO,iBAAiB,QANL,SAASgyP,IACzBjgO,EAAMkgO,cAEN1wB,EAAMthO,oBAAoB,OAAQ+xP,EACpC,GAGF,CACF,CAGA,IACIj0P,GADcg0P,EAAY,IAAMrnP,EAAKzN,SAAS,IACzBo8B,aACzB,OAAOt7B,EAAS,EAAIA,EAAS,IAC/B,CAEA,OAAO,IACT,IAEA,IAAIm0P,EAAY,CACdhiB,aAAa,EACbmd,aAAcxvP,EAAMuvP,aACpBA,aAAcvvP,EAAMuvP,aACpB8D,UAAU,EACVN,gBAAgB,EAChB1uB,SAAUrkO,EAAMqkO,SAChBgsB,SAAS,EACTc,sBAAsB,EACtBC,aAAa,EACbjnK,SAAU,EACV0lK,cAAe,CAAC,EAChByB,WAAY,CAAC,EACbM,cAAe,CAAC,EAChBC,UAAW,CAAC,GAId,OAFA39N,EAAM8/N,iBAAqD,oBAA3Bh0P,EAAMg0P,kBAAmCh0P,EAAMg0P,kBAA+C,SAA3Bh0P,EAAMg0P,kBAA+BzB,EAAYxD,sBAAwBwD,EAAYrD,sBACxLh7N,EAAM9I,MAAQikO,EAAcA,EAAc,CAAC,EAAGgF,GAAYngO,EAAM8/N,iBAAiBh0P,EAAOq0P,IACjFngO,CACT,CAoTA,OAlrBoBuhI,EAgYP+8F,GAhYoB98F,EAgYV,CAAC,CACtB14J,IAAK,oBACLE,MAAO,WACA4lB,KAAK9iB,MAAMZ,UAIhB0jB,KAAKwxO,eACP,GACC,CACDt3P,IAAK,qBACLE,MAAO,SAA4B65J,EAAWn2H,GACvCm2H,EAAU33J,WAAY0jB,KAAK9iB,MAAMZ,UAAa0jB,KAAKsI,MAAMinN,aAC5DvvN,KAAKwxO,iBAGFv9F,EAAUw6D,WAAazuM,KAAK9iB,MAAMuxN,WACrCzuM,KAAKyxO,aAGH3zN,EAAUyvN,UAAYvtO,KAAKsI,MAAMilO,SAEnCvtO,KAAK6iB,SAAS0pN,EAAc,CAAC,EAAGvsO,KAAK9iB,MAAMw0P,mBAAmB1xO,KAAK9iB,MAAO8iB,KAAKsI,SAG7E2rI,EAAUw4F,eAAiBzsO,KAAK9iB,MAAMuvP,cAAgBx4F,EAAU44F,aAAe7sO,KAAK9iB,MAAM2vP,aAC5F7sO,KAAKswO,cACLtwO,KAAK0sK,OAAO1sK,KAAK9iB,MAAMuvP,eAGrBx4F,EAAUstE,WAAavhN,KAAK9iB,MAAMqkO,WAChCvhN,KAAK9iB,MAAMqkO,SACbvhN,KAAK2xO,gBAEL3xO,KAAK4xO,kBAGP5xO,KAAK6iB,SAAS,CACZ0+L,SAAUvhN,KAAK9iB,MAAMqkO,WAG3B,GACC,CACDrnO,IAAK,uBACLE,MAAO,WACL4lB,KAAK6xO,iBACP,GACC,CACD33P,IAAK,gBACLE,MAAO,WACL,IAAI+5B,EAASnU,KAEbA,KAAK8xO,aAED9xO,KAAKsI,MAAMi5M,UAAYzuE,EAAO4D,SAAStiJ,MAAM4L,KAAK9iB,MAAMZ,UAAY,GACtE0jB,KAAK2xO,gBAGH3xO,KAAK9iB,MAAMuxN,WACbzuM,KAAKyxO,aAGPzxO,KAAK6iB,SAAS,CACZ0sM,aAAa,IACZ,WACD,IAAIwiB,EAAe59N,EAAO69N,kBAEtBD,IAAiBA,EAAa7iN,SAEhC6iN,EAAa1yP,iBAAiB,OAAQ80B,EAAO89N,eAE7C99N,EAAO89N,eAEX,GACF,GACC,CACD/3P,IAAK,kBACLE,MAAO,WACD4lB,KAAKsI,MAAMinN,cACbvvN,KAAKkyO,eACLlyO,KAAK4xO,kBAET,GACC,CACD13P,IAAK,gBACLE,MAAO,WACL4lB,KAAKuhN,WACL,IAAI4wB,EAAkBnyO,KAAK4vO,mBAEvB5vO,KAAK9iB,MAAMk1P,aAAeD,IAC5BA,EAAgB9yP,iBAAiB,aAAc2gB,KAAKoyO,aACpDD,EAAgB9yP,iBAAiB,aAAc2gB,KAAKqyO,cAExD,GACC,CACDn4P,IAAK,kBACLE,MAAO,WACL4lB,KAAK+vO,gBACL,IAAIoC,EAAkBnyO,KAAK4vO,mBAEvB5vO,KAAK9iB,MAAMk1P,aAAeD,IAC5BA,EAAgB7yP,oBAAoB,aAAc0gB,KAAKoyO,aACvDD,EAAgB7yP,oBAAoB,aAAc0gB,KAAKqyO,cAE3D,GACC,CACDn4P,IAAK,aACLE,MAAO,YAGL,EAAIo1P,EAAQjqM,WAAWlmD,iBAAiB,SAAU2gB,KAAKswO,cAEvD,EAAId,EAAQjqM,WAAWlmD,iBAAiB,mBAAoB2gB,KAAKswO,aAE7DtwO,KAAK9iB,MAAMo1P,oBACb,EAAI/C,EAAUhqM,WAAWlmD,iBAAiB,UAAW2gB,KAAKuyO,qBAE9D,GACC,CACDr4P,IAAK,eACLE,MAAO,YAEL,EAAIo1P,EAAQjqM,WAAWjmD,oBAAoB,SAAU0gB,KAAKswO,cAC1D,EAAId,EAAQjqM,WAAWjmD,oBAAoB,mBAAoB0gB,KAAKswO,aACpE,IAAIyB,EAAe/xO,KAAKgyO,kBAEpBD,GACFA,EAAazyP,oBAAoB,OAAQ0gB,KAAKiyO,eAG5CjyO,KAAK9iB,MAAMo1P,oBACb,EAAI/C,EAAUhqM,WAAWjmD,oBAAoB,UAAW0gB,KAAKuyO,qBAEjE,GACC,CACDr4P,IAAK,aACLE,MAAO,WACL,IAAIo4P,EAEkD,QAArDA,EAAwBxyO,KAAK4vO,0BAA0D,IAA1B4C,GAA4CA,EAAsBp+D,OAClI,GACC,CACDl6L,IAAK,cACLE,MAAO,SAAqBq4P,GAC1B,IAAIl+F,EAASv0I,KAEb,OAAKA,KAAK9iB,MAAMZ,SAITw2J,EAAO4D,SAAS54J,IAAIkiB,KAAK9iB,MAAMZ,UAAU,SAAUyN,EAAMrI,GAC9D,IAAIgxP,EAAahxP,IAAU6yJ,EAAOjsI,MAAMmkO,aACpCkG,EAAajxP,IAAU6yJ,EAAOjsI,MAAMokO,aACpC7vP,EAAQ61P,GAAcn+F,EAAOjsI,MAAMwmO,eAAiB6D,GAAcp+F,EAAOjsI,MAAMymO,WAAax6F,EAAOjsI,MAAMkmO,YAAc,CAAC,EAExHj6F,EAAOr3J,MAAM2vP,YAAoC,eAAtBt4F,EAAOr3J,MAAMq0J,OAC1C10J,EAAQ0vP,EAAcA,EAAc,CAAC,EAAG1vP,GAAQ,CAAC,EAAG,CAClD+1P,SAAUr+F,EAAOr3J,MAAM4vP,sBAAwB,OAI/Cv4F,EAAOjsI,MAAMilO,SAAWh5F,EAAOjsI,MAAM+lO,uBACvCxxP,EAAQ0vP,EAAcA,EAAc,CAAC,EAAG1vP,GAAQ,CAAC,EAAG,CAClDsgP,cAAe,UAInB,IAAI0V,EAAa,CACfxyP,IAAK,SAAa/F,GAChB,OAAOi6J,EAAOu+F,YAAYx4P,EAAGoH,EAC/B,EACAxH,IAAK,UAAYwH,GAAS+wP,EAAU,QAAU,IAC9C71P,UAAWyyP,EAAY9pM,QAAQwtM,MAAK,EAAMrxP,IAAU6yJ,EAAOjsI,MAAMmkO,aAAc/qP,IAAU6yJ,EAAOjsI,MAAMokO,cACtGxsP,QAASq0J,EAAOy+F,gBAAgBtyO,KAAK6zI,EAAQ7yJ,EAAOqI,GACpDlN,MAAOA,GAET,OAAoBi2J,EAAOvtG,QAAQ1pD,cAAc,KAAMg3P,EAAYt+F,EAAOr3J,MAAM+1P,WAAWlpP,EAAM,CAC/F2oP,WAAYhxP,IAAU6yJ,EAAOjsI,MAAMmkO,aACnCkG,WAAYjxP,IAAU6yJ,EAAOjsI,MAAMokO,eAEvC,IAjCS,EAkCX,GACC,CACDxyP,IAAK,iBACLE,MAAO,WACL,IAAIu6J,EAAS30I,KAETwzK,EAAcxzK,KAAK9iB,MACnBg2P,EAAiB1/D,EAAY0/D,eAC7B7rP,EAASmsL,EAAYnsL,OACrB8rP,EAAkB3/D,EAAY2/D,gBAC9B72P,EAAWk3L,EAAYl3L,SAE3B,OAAK42P,EAIepgG,EAAOvtG,QAAQ1pD,cAAc,KAAM,CACrDe,UAAW,gBACVk2J,EAAO4D,SAAS54J,IAAIxB,GAAU,SAAUgvC,EAAG5pC,GAC5C,OAAOyxP,GAAmBA,EAAgBx+F,EAAOy+F,WAAW1xP,GAAQA,IAAUizJ,EAAOrsI,MAAMmkO,aAAc/qP,EAAO2F,EAAO0C,KACzH,KAPS,IAQX,GACC,CACD7P,IAAK,eACLE,MAAO,WACL,OAAK4lB,KAAK9iB,MAAMm2P,WAIIvgG,EAAOvtG,QAAQ1pD,cAAc,IAAK,CACpDe,UAAW,mBACVojB,KAAK9iB,MAAMo2P,gBAAgBtzO,KAAKsI,MAAMmkO,aAAe,EAAG35F,EAAO4D,SAAStiJ,MAAM4L,KAAK9iB,MAAMZ,YALnF,IAMX,GACC,CACDpC,IAAK,eACLE,MAAO,WACL,OAAK4lB,KAAK9iB,MAAMq2P,YAAevzO,KAAK9iB,MAAMZ,UAA2D,IAA/Cw2J,EAAO4D,SAAStiJ,MAAM4L,KAAK9iB,MAAMZ,UAInEw2J,EAAOvtG,QAAQ1pD,cAAcyzP,EAAQ/pM,QAAS,CAChEllD,IAAK2f,KAAKwzO,aACVC,aAAczzO,KAAK0zO,iBACnBjH,aAAczsO,KAAKsI,MAAMmkO,aACzBU,eAAgBntO,KAAK9iB,MAAMiwP,eAC3BwG,WAAY3zO,KAAK9iB,MAAMy2P,WACvBtsP,OAAQ2Y,KAAK9iB,MAAMmK,OACnB0pP,aAAc/wO,KAAK9iB,MAAM6zP,cACxB/wO,KAAK9iB,MAAM02P,aAAa5zO,KAAK9iB,MAAMZ,WAX7B,IAYX,GACC,CACDpC,IAAK,SACLE,MAAO,WACL,IAAI26J,EAAS/0I,KAEb,IAAKA,KAAK9iB,MAAMZ,UAA2D,IAA/Cw2J,EAAO4D,SAAStiJ,MAAM4L,KAAK9iB,MAAMZ,UAC3D,OAAO,KAGT,IAAIu3P,EAAc7zO,KAAK9iB,MAAM42P,WAAahhG,EAAO4D,SAAStiJ,MAAM4L,KAAK9iB,MAAMZ,UAAY,EACnFuxP,EAAmC,eAApB7tO,KAAK9iB,MAAMq0J,KAC1BwiG,EAAgB/zO,KAAK9iB,MAAM82P,YAAclhG,EAAO4D,SAAStiJ,MAAM4L,KAAK9iB,MAAMZ,UAAY,EAEtF23P,EAAUF,IAAkB/zO,KAAKsI,MAAMmkO,aAAe,GAAKzsO,KAAK9iB,MAAM0vP,gBAAiB,EAEvFsH,EAAUH,IAAkB/zO,KAAKsI,MAAMmkO,aAAe35F,EAAO4D,SAAStiJ,MAAM4L,KAAK9iB,MAAMZ,UAAY,GAAK0jB,KAAK9iB,MAAM0vP,gBAAiB,EACpIuH,EAAan0O,KAAKo0O,aAAY,GAC9BC,EAAaF,EAAWlvO,QACxBqvO,EAAYH,EAAW9vO,MACvBkwO,EAAc,CAChB33P,UAAWyyP,EAAY9pM,QAAQivM,QAAO,EAAMx0O,KAAKsI,MAAMilO,SACvDlqB,YAAarjN,KAAKqjN,YAClBH,aAAcljN,KAAKkjN,aACnBK,WAAYvjN,KAAKujN,WACjB1mO,MAAOmjB,KAAKsI,MAAMykO,cAClBvpB,UAAWxjN,KAAK9iB,MAAMixP,sBAEpBsG,EAAkB,CAAC,EAEvB,GAAI5G,GAIF,GAHA0G,EAAY9wB,YAAczjN,KAAK00O,eAC/BH,EAAY7wB,aAAe1jN,KAAK20O,iBAE5B30O,KAAK9iB,MAAM03P,cAAe,CAC5B,IAAIC,EAAa70O,KAAK80O,sBAAsB90O,KAAKsI,MAAMmkO,cAEvDgI,EAAgBr3P,OAASy3P,GAAc,MACzC,OAEAN,EAAY5wB,UAAyC,YAA7B3jN,KAAK9iB,MAAM63P,cAA8B/0O,KAAK20O,iBAAmB30O,KAAK00O,eAC9FH,EAAY3wB,YAA2C,YAA7B5jN,KAAK9iB,MAAM63P,cAA8B/0O,KAAK00O,eAAiB10O,KAAK20O,iBAC9FJ,EAAY13P,MAAQ0vP,EAAcA,EAAc,CAAC,EAAGgI,EAAY13P,OAAQ,CAAC,EAAG,CAC1EO,OAAQ4iB,KAAKsI,MAAM++D,WAErBotK,EAAgBr3P,OAAS4iB,KAAKsI,MAAM++D,SAGtC,OAAoByrE,EAAOvtG,QAAQ1pD,cAAc,MAAO,CACtD,aAAcmkB,KAAK9iB,MAAM83P,UACzBp4P,UAAWyyP,EAAY9pM,QAAQ0vM,KAAKj1O,KAAK9iB,MAAMN,WAC/CyD,IAAK2f,KAAKk1O,sBACVvwP,SAAUqb,KAAK9iB,MAAMo1P,kBAAoB,OAAI15O,GAC/Bk6I,EAAOvtG,QAAQ1pD,cAAc,MAAO,CAClDe,UAAWyyP,EAAY9pM,QAAQ4vM,UAAS,GACxCt4P,MAAO,CACLM,MAAO6iB,KAAK9iB,MAAMC,QAEnB6iB,KAAKo1O,iBAAkBp1O,KAAK9iB,MAAMm4P,gBAAgBr1O,KAAKs1O,YAAarB,EAASj0O,KAAK9iB,MAAMmK,OAAOkuP,WAAyBziG,EAAOvtG,QAAQ1pD,cAAc,MAAO,CAC7Je,UAAWyyP,EAAY9pM,QAAQiwM,SAAQ,EAAMx1O,KAAK9iB,MAAMq0J,MACxD10J,MAAO43P,GACNZ,EAA2B/gG,EAAOvtG,QAAQ1pD,cAAcuzP,EAAgB7pM,QAAS1lC,EAAS,CAC3F8c,QAAS,KACTknM,SAAU7jN,KAAKy1O,YACdlB,EAAa,CACdzxB,iBAAkB9iN,KAAK9iB,MAAM6zP,eAC3B/wO,KAAK9iB,MAAM0vP,cAAgB0H,EAAWt0O,KAAKo0O,cAAep0O,KAAK9iB,MAAM0vP,cAAgByH,GAA2BvhG,EAAOvtG,QAAQ1pD,cAAc,KAAM,CACrJe,UAAWyyP,EAAY9pM,QAAQivM,QAAO,EAAMx0O,KAAKsI,MAAMilO,SACvDltP,IAAK,SAAa+9E,GAChB,OAAO22E,EAAO0gG,WAAWr3K,EAC3B,EACAvhF,MAAOmjB,KAAKsI,MAAMykO,eAAiB,CAAC,GACnC/sO,KAAK9iB,MAAM0vP,cAAgB0H,EAAWt0O,KAAKo0O,cAAep0O,KAAK9iB,MAAM0vP,cAAgByH,IAAcr0O,KAAK9iB,MAAMw4P,gBAAgB11O,KAAK21O,YAAazB,EAASl0O,KAAK9iB,MAAMmK,OAAOuuP,YAAa51O,KAAK61O,gBAAiB71O,KAAK4zO,eACxN,MA/qB0E7jE,EAAkBp9B,EAAY34J,UAAW44J,GAAiBC,GAAak9B,EAAkBp9B,EAAaE,GAkrB3K68F,CACT,CAjqB4B,CAiqB1B58F,EAAOvtG,QAAQpiB,WAEjB9nB,EAAA,QAAkBq0O,EAElB5/D,EAAgB4/D,EAAU,cAAe,YAEzC5/D,EAAgB4/D,EAAU,eAAgB,CACxCsF,eAAWp8O,EACX24I,KAAM,aACNu7F,sBAAuB,GACvBn5L,SAAU,IACVtsD,OAAQ,CACNkuP,UAAW,wBACXK,WAAY,oBACZ7rP,KAAM,cAERymP,YAAalE,EAAOv7N,KACpB0/N,aAAcnE,EAAOv7N,KACrBhtB,SAAUuoP,EAAOv7N,KACjBmyM,aAAc,WAAyB,EACvCK,WAAY,WAAuB,EACnCF,YAAa,WACX,OAAO,CACT,EACA+qB,0CAA0C,EAC1CiH,gBAAiB,SAAyBS,EAAgB7B,EAASlyP,GACjE,OAAoB+wJ,EAAOvtG,QAAQ1pD,cAAc,SAAU,CACzDmC,KAAM,SACN,aAAc+D,EACdnF,UAAWyyP,EAAY9pM,QAAQwwM,YAAY9B,GAC3C/zP,QAAS41P,GAEb,EACAJ,gBAAiB,SAAyBI,EAAgB5B,EAASnyP,GACjE,OAAoB+wJ,EAAOvtG,QAAQ1pD,cAAc,SAAU,CACzDmC,KAAM,SACN,aAAc+D,EACdnF,UAAWyyP,EAAY9pM,QAAQywM,YAAY9B,GAC3Ch0P,QAAS41P,GAEb,EACA3C,gBAAiB,SAAyB2C,EAAgBpD,EAAYhxP,EAAOK,GAC3E,OAAoB+wJ,EAAOvtG,QAAQ1pD,cAAc,KAAM,CACrDe,UAAWyyP,EAAY9pM,QAAQ0wM,IAAIvD,GACnCxyP,QAAS41P,EACT9xP,UAAW8xP,EACX17P,MAAOsH,EACPxH,IAAKwH,EACLk0O,KAAM,SACNjxO,SAAU,EACV,aAAc,GAAGoX,OAAOha,EAAO,KAAKga,OAAOra,EAAQ,IAEvD,EACAuxP,WAAY,SAAoBlpP,GAC9B,OAAOA,CACT,EACA6pP,aAAc,SAAsBt3P,GAClC,IAAI45P,EAASpjG,EAAO4D,SAAS54J,IAAIxB,GAAU,SAAUyN,GACnD,IAAI6F,EAAM7F,EAQV,GANkB,QAAdA,EAAK/L,OACP4R,EAAMkjJ,EAAO4D,SAAS/1B,QAAQ52H,EAAK7M,MAAMZ,UAAU4pB,MAAK,SAAU5pB,GAChE,MAAyB,QAAlBA,EAAS0B,IAClB,KAGG4R,EAIL,OAAOA,CACT,IAEA,OAEc,IAFVsmP,EAAOlyO,QAAO,SAAU48M,GAC1B,OAAOA,CACT,IAAGpnO,QACD4mB,QAAQsN,KAAK,iTACN,IAGFwoO,CACT,EACA5C,gBAAiBhH,EAAO6J,uBACxB1J,aAAc,EACduH,YAAY,EACZd,gBAAgB,EAChBG,YAAY,EACZE,YAAY,EACZnB,aAAa,EACbjE,qBAAsB,EACtB2F,WAAW,EACX3G,eAAgB,IAChB4H,cAAe,WACf53P,MAAO,OACP+zP,iBAAkB,QAClBP,sBAAuBlB,EAAYtD,2BACnCuF,mBAAoBjC,EAAYvD,iFC1zBlCnyP,OAAOg5C,eAAe13B,EAAS,aAAc,CAC3CjhB,OAAO,IAETihB,EAAQ2xO,YAAc3xO,EAAQ8mN,YAAc9mN,EAAQ41O,gBAAkB51O,EAAQ86O,uBAAyB96O,EAAQ0V,UAAO,EAEtH,IAIgC5U,EAJ5B22I,EAAS,EAAQ,OAEjBu5F,GAE4BlwO,EAFW,EAAQ,SAEEA,EAAIk9D,WAAal9D,EAAM,CAAEopC,QAASppC,GAIvFd,EAAQ0V,KAFG,WAAiB,EAQ5B1V,EAAQ86O,uBAJqB,SAAgC33P,EAAS8L,GACpE,MAAO,GAAGyR,OAAOvd,EAAS,QAAQud,OAAOzR,EAC3C,EAaA+Q,EAAQ41O,gBATc,SAAyB32P,GAC7C,QAAOA,GAAIA,EAAEnB,eAAe,MAC9B,EA2CAkiB,EAAQ8mN,YAlCU,SAAqBzgO,EAAOxE,GAM5C,GALIA,EAAM0vP,gBAENlrP,EAGU,IAAVA,EACF,OAAO,EAGT,IAAIosP,EAAiBh7F,EAAO4D,SAAStiJ,MAAMlX,EAAMZ,UAEjD,GAAIY,EAAM2vP,YAA6B,eAAf3vP,EAAMq0J,KAAuB,CACnD,IAAI07F,GAAmBvrP,EAAQxE,EAAM4vP,sBACjCH,EAAemB,EAAiB,EAQpC,OANIpsP,IAAUA,IAAUirP,GAAgBzvP,EAAM0vP,cAC5CK,IAAoB,IAAM/vP,EAAM4vP,uBAAyB,EAChDprP,IAAUirP,IACnBM,GAAmB,IAAM/vP,EAAM4vP,uBAG1BG,CACT,CAEA,OAAgB,KAARvrP,CACV,EAmBA2Z,EAAQ2xO,YATU,SAAqBx+J,EAAU+iE,GAC/C,IAAI10J,EAAQ,CAAC,EAKb,MAJA,CAAC,kBAAmB,eAAgB,cAAe,aAAc,YAAa,eAAe+F,SAAQ,SAAU4Z,GAE7G3f,EAAM2f,IAAQ,EAAI6vO,EAAc9mM,SAASipC,EAAU,IAAK+iE,EAC1D,IACO10J,CACT,sCC3EA9C,OAAOg5C,eAAe13B,EAAS,aAAc,CAC3CjhB,OAAO,IAETihB,EAAA,aAAkB,EAElB,IAAIy3I,EAgBJ,SAAiC32I,GAAO,GAAIA,GAAOA,EAAIk9D,WAAc,OAAOl9D,EAAO,GAAY,OAARA,GAAiC,WAAjBs2I,EAAQt2I,IAAoC,oBAARA,EAAsB,MAAO,CAAEopC,QAASppC,GAAS,IAAIi2G,EAAQ48H,IAA4B,GAAI58H,GAASA,EAAM5hF,IAAIr0B,GAAQ,OAAOi2G,EAAMtpG,IAAI3M,GAAQ,IAAI8yO,EAAS,CAAC,EAAOC,EAAwBn1P,OAAOg5C,gBAAkBh5C,OAAOo4C,yBAA0B,IAAK,IAAIj4C,KAAOiiB,EAAO,GAAIpiB,OAAOC,UAAUb,eAAegB,KAAKgiB,EAAKjiB,GAAM,CAAE,IAAIk/E,EAAO81K,EAAwBn1P,OAAOo4C,yBAAyBh2B,EAAKjiB,GAAO,KAAUk/E,IAASA,EAAKtwD,KAAOswD,EAAK3oC,KAAQ12C,OAAOg5C,eAAek8M,EAAQ/0P,EAAKk/E,GAAgB61K,EAAO/0P,GAAOiiB,EAAIjiB,EAAQ,CAAI+0P,EAAO1pM,QAAUppC,EAASi2G,GAASA,EAAM3hF,IAAIt0B,EAAK8yO,GAAW,OAAOA,CAAQ,CAhB3tBE,CAAwB,EAAQ,QAEzCE,EAAcr8F,EAAuB,EAAQ,QAE7CojG,EAAc,EAAQ,OAEtB/J,EAAgBr5F,EAAuB,EAAQ,QAE/Co8F,EAAkBp8F,EAAuB,EAAQ,QAEjDw8F,EAAUx8F,EAAuB,EAAQ,MAE7C,SAASA,EAAuB72I,GAAO,OAAOA,GAAOA,EAAIk9D,WAAal9D,EAAM,CAAEopC,QAASppC,EAAO,CAE9F,SAAS6yO,IAA6B,GAAuB,oBAAZ/hJ,QAAwB,OAAO,KAAM,IAAImlB,EAAQ,IAAInlB,QAA6F,OAAlF+hJ,EAA2B,WAAsC,OAAO58H,CAAO,EAAUA,CAAO,CAIjN,SAASqgC,EAAQt2I,GAAmV,OAAtOs2I,EAArD,oBAAXx/G,QAAoD,kBAApBA,OAAOI,SAAmC,SAAiBl3B,GAAO,cAAcA,CAAK,EAAsB,SAAiBA,GAAO,OAAOA,GAAyB,oBAAX82B,QAAyB92B,EAAI0lB,cAAgBoR,QAAU92B,IAAQ82B,OAAOj5C,UAAY,gBAAkBmiB,CAAK,EAAYs2I,EAAQt2I,EAAM,CAEzX,SAAS0D,IAA2Q,OAA9PA,EAAW9lB,OAAO+lB,QAAU,SAAUpb,GAAU,IAAK,IAAInL,EAAI,EAAGA,EAAIomB,UAAUnmB,OAAQD,IAAK,CAAE,IAAI8Q,EAASsV,UAAUpmB,GAAI,IAAK,IAAIW,KAAOmQ,EAActQ,OAAOC,UAAUb,eAAegB,KAAKkQ,EAAQnQ,KAAQwK,EAAOxK,GAAOmQ,EAAOnQ,GAAU,CAAE,OAAOwK,CAAQ,EAAUmb,EAASE,MAAMC,KAAML,UAAY,CAI5T,SAASowK,EAAkBrrL,EAAQxH,GAAS,IAAK,IAAI3D,EAAI,EAAGA,EAAI2D,EAAM1D,OAAQD,IAAK,CAAE,IAAIy8F,EAAa94F,EAAM3D,GAAIy8F,EAAW9kD,WAAa8kD,EAAW9kD,aAAc,EAAO8kD,EAAW/kD,cAAe,EAAU,UAAW+kD,IAAYA,EAAWhlD,UAAW,GAAMj3C,OAAOg5C,eAAeruC,EAAQsxF,EAAW97F,IAAK87F,EAAa,CAAE,CAM5T,SAASl0D,EAAgBrgC,EAAG6d,GAA+G,OAA1GwiB,EAAkB/nC,OAAOgoC,gBAAkB,SAAyBtgC,EAAG6d,GAAsB,OAAjB7d,EAAEugC,UAAY1iB,EAAU7d,CAAG,EAAUqgC,EAAgBrgC,EAAG6d,EAAI,CAEzK,SAAS2wK,EAAaC,GAAW,IAAIC,EAMrC,WAAuC,GAAuB,qBAAZh9I,UAA4BA,QAAQi9I,UAAW,OAAO,EAAO,GAAIj9I,QAAQi9I,UAAUC,KAAM,OAAO,EAAO,GAAqB,oBAAV39I,MAAsB,OAAO,EAAM,IAAiF,OAA3ExpC,KAAKlP,UAAUF,SAASK,KAAKg5C,QAAQi9I,UAAUlnL,KAAM,IAAI,WAAa,MAAY,CAAM,CAAE,MAAO5O,GAAK,OAAO,CAAO,CAAE,CANlQg2L,GAA6B,OAAO,WAAkC,IAAsCzyL,EAAlC0yL,EAAQP,EAAgBE,GAAkB,GAAIC,EAA2B,CAAE,IAAIK,EAAYR,EAAgBhwK,MAAM6hB,YAAahkC,EAASs1C,QAAQi9I,UAAUG,EAAO5wK,UAAW6wK,EAAY,MAAS3yL,EAAS0yL,EAAMxwK,MAAMC,KAAML,WAAc,OAEpX,SAAoCqP,EAAM70B,GAAQ,GAAIA,IAA2B,WAAlBs4J,EAAQt4J,IAAsC,oBAATA,GAAwB,OAAOA,EAAQ,OAAOqnC,EAAuBxS,EAAO,CAF2MwkI,CAA2BxzI,KAAMniB,EAAS,CAAG,CAIxa,SAAS2jC,EAAuBxS,GAAQ,QAAa,IAATA,EAAmB,MAAM,IAAIyS,eAAe,6DAAgE,OAAOzS,CAAM,CAIrK,SAASghK,EAAgBvuL,GAAwJ,OAAnJuuL,EAAkBj2L,OAAOgoC,eAAiBhoC,OAAOo2C,eAAiB,SAAyB1uC,GAAK,OAAOA,EAAEugC,WAAajoC,OAAOo2C,eAAe1uC,EAAI,EAAUuuL,EAAgBvuL,EAAI,CAE5M,SAASquL,EAAgB3zK,EAAKjiB,EAAKE,GAAiK,OAApJF,KAAOiiB,EAAOpiB,OAAOg5C,eAAe52B,EAAKjiB,EAAK,CAAEE,MAAOA,EAAO82C,YAAY,EAAMD,cAAc,EAAMD,UAAU,IAAkB70B,EAAIjiB,GAAOE,EAAgB+hB,CAAK,CAEhN,IAIIk6O,EAAsB,SAAU/iG,IApBpC,SAAmB3xH,EAAUC,GAAc,GAA0B,oBAAfA,GAA4C,OAAfA,EAAuB,MAAM,IAAI1f,UAAU,sDAAyDyf,EAAS3nC,UAAYD,OAAO6yB,OAAOgV,GAAcA,EAAW5nC,UAAW,CAAE6nC,YAAa,CAAEznC,MAAOunC,EAAUqP,UAAU,EAAMC,cAAc,KAAerP,GAAYE,EAAgBH,EAAUC,EAAa,CAqB9XmyH,CAAUsiG,EAAQ/iG,GAElB,IAzBoBX,EAAaC,EAAYC,EAyBzCz7G,EAAS64I,EAAaomE,GAE1B,SAASA,EAAO9gG,GACd,IAAInkI,EAyIJ,OAzKJ,SAAyBuxH,EAAUgQ,GAAe,KAAMhQ,aAAoBgQ,GAAgB,MAAM,IAAIzwI,UAAU,oCAAwC,CAkCpJqxI,CAAgBvzI,KAAMq2O,GAItBvmE,EAAgBtuJ,EAFhBpQ,EAAQgmB,EAAOj9C,KAAK6lB,KAAMu1I,IAEqB,uBAAmB,GAElEu6B,EAAgBtuJ,EAAuBpQ,GAAQ,oBAAgB,GAE/D0+J,EAAgBtuJ,EAAuBpQ,GAAQ,iBAAa,GAE5D0+J,EAAgBtuJ,EAAuBpQ,GAAQ,sBAAsB,SAAUgtD,GAC7EhtD,EAAMklO,gBAAkBl4K,CAC1B,IAEA0xG,EAAgBtuJ,EAAuBpQ,GAAQ,mBAAmB,SAAUgtD,GAC1EhtD,EAAMmlO,aAAen4K,CACvB,IAEA0xG,EAAgBtuJ,EAAuBpQ,GAAQ,gBAAgB,SAAUgtD,EAAM18E,GACxE0vB,EAAMu+N,YACTv+N,EAAMu+N,UAAY,IAGpBv+N,EAAMu+N,UAAUjuP,GAAS08E,CAC3B,IAEA0xG,EAAgBtuJ,EAAuBpQ,GAAQ,eAAe,WAC5D,GAAKA,EAAMl0B,MAAMZ,UAAa80B,EAAMklO,iBAAoBllO,EAAMu+N,UAA9D,CAIA,IAAIrlP,EAAQwoJ,EAAO4D,SAAStiJ,MAAMgd,EAAMl0B,MAAMZ,UAE1Ck6P,EAAcplO,EAAMklO,gBAAgB3hP,YACpC0yE,EAAWj2D,EAAMl0B,MAAMy2P,WAAaviO,EAAMl0B,MAAMy2P,YAAa,EAAIyC,EAAYK,YAAYrlO,EAAMu+N,UAAU,IACzG+G,EAAe/mO,KAAKq2B,MAAMwwM,EAAcnvK,GACxC2sK,EAAa0C,EAAepsP,EAC5BqiP,EAAeqH,EAAa1pP,EAAQosP,EAAe,EAEvDtlO,EAAMyR,UAAS,SAAU8zN,EAAQz5P,GAC/B,MAAO,CACLmqF,SAAUA,EACVqvK,aAAcA,EACdrG,UAAW2D,EAAa5iO,EAAMwlO,aAAa15P,EAAMuvP,cAAgB,EACjEE,aAAcA,EACdqH,WAAYA,EAEhB,GAlBA,CAmBF,IAEAlkE,EAAgBtuJ,EAAuBpQ,GAAQ,mBAAmB,SAAU1vB,EAAOqI,EAAMzP,GACvF,IA/DgB,SAAyBA,GAC7C,OAAOA,EAAEnB,eAAe,MAC1B,CA6DW83P,CAAgB32P,IAAgB,UAAVA,EAAEJ,IAAiB,CAC5C,IAAIqzI,EAAUn8G,EAAMl0B,MAAMu2P,aAEH,oBAAZlmH,GACTA,EAAQ7rI,EAAOqI,EAEnB,CACF,IAEA+lL,EAAgBtuJ,EAAuBpQ,GAAQ,gBAAgB,WAC7DA,EAAMyR,SAAS,CACb0qN,SAAS,GAEb,IAEAz9D,EAAgBtuJ,EAAuBpQ,GAAQ,cAAc,WAC3DA,EAAMyR,SAAS,CACb0qN,SAAS,GAEb,IAEAz9D,EAAgBtuJ,EAAuBpQ,GAAQ,eAAe,SAAUgtB,GACtE,IAAIszG,EAAStzG,EAAMniC,EAEnB,IAAKmV,EAAM9I,MAAM++D,WAAaj2D,EAAMklO,kBAAoBllO,EAAM9I,MAAMouO,aAClE,OAAO,EAGT,IAEI5I,EAAiBh7F,EAAO4D,SAAStiJ,MAAMgd,EAAMl0B,MAAMZ,UAEnD2wP,GAA4C,IAAxB77N,EAAM9I,MAAM+nO,UAAmBj/N,EAAM9I,MAAMouO,aAJhD,IAQfzJ,GAAoCv7F,EAAS,IAC/CA,EAAS,GAIPu7F,IAPmC,KADpBt9N,KAAKhT,IAAImxO,EAAiB18N,EAAM9I,MAAMouO,aAAc,GAC1BtlO,EAAM9I,MAAMouO,cAObhlG,EAAS,IACnDA,EAAS,GAGX,IACIljE,EAAWy+J,EAAkB,KADf77N,EAAMklO,gBAAgB3hP,YACc+8I,GAQtD,OANItgI,EAAMmlO,cACR,CAAC,kBAAmB,eAAgB,cAAe,aAAc,YAAa,eAAe3zP,SAAQ,SAAU4Z,GAC7G4U,EAAMmlO,aAAa15P,MAAM2f,IAAQ,EAAI6vO,EAAc9mM,SAASipC,EAAU,IAAKp9D,EAAMl0B,MAAMq0J,KACzF,KAGK,CACT,IAEAu+B,EAAgBtuJ,EAAuBpQ,GAAQ,cAAc,SAAUw/N,GACrEx/N,EAAMs7J,OAAOt7J,EAAM9I,MAAM+nO,WAAkC,kBAAdO,EAAyBA,EAAY,GACpF,IAEA9gE,EAAgBtuJ,EAAuBpQ,GAAQ,aAAa,SAAUw/N,GACpEx/N,EAAMs7J,OAAOt7J,EAAM9I,MAAM+nO,WAAkC,kBAAdO,EAAyBA,EAAY,GACpF,IAEA9gE,EAAgBtuJ,EAAuBpQ,GAAQ,UAAU,SAAUo9D,GAIjEA,GAFAA,EAAWA,EAAW,EAAI,EAAIA,IAEPp9D,EAAM9I,MAAMqkO,aAAev7N,EAAM9I,MAAMqkO,aAAen+J,EAE7Ep9D,EAAMyR,SAAS,CACbwtN,UAAW7hK,GAEf,IAEAp9D,EAAM9I,MAAQ,CACZmkO,aAAcl3F,EAAOk3F,aACrBc,SAAS,EACTyG,YAAY,EACZ3D,UAAW,EACXqG,aAAc,EACd/J,aAAc,GAETv7N,CACT,CAwKA,OA9UoBuhI,EAwKP0jG,GAxKoBzjG,EAwKZ,CAAC,CACpB14J,IAAK,oBACLE,MAAO,WACL4lB,KAAK62O,aACP,GACC,CACD38P,IAAK,qBACLE,MAAO,SAA4B65J,GAC7Bj0I,KAAK9iB,MAAMuvP,eAAiBzsO,KAAKsI,MAAMmkO,cACzCzsO,KAAK6iB,SAAS,CACZ4pN,aAAczsO,KAAK9iB,MAAMuvP,aACzB4D,UAAWrwO,KAAK42O,aAAa52O,KAAK9iB,MAAMuvP,gBAIxCzsO,KAAK9iB,MAAMZ,WAAa23J,EAAU33J,UAMtC0jB,KAAKswO,aACP,GACC,CACDp2P,IAAK,uBACLE,MAAO,WACL4lB,KAAK82O,eACP,GACC,CACD58P,IAAK,cACLE,MAAO,YAGL,EAAIo1P,EAAQjqM,WAAWlmD,iBAAiB,SAAU2gB,KAAKswO,cAEvD,EAAId,EAAQjqM,WAAWlmD,iBAAiB,mBAAoB2gB,KAAKswO,aAGjEtwO,KAAKswO,aACP,GACC,CACDp2P,IAAK,gBACLE,MAAO,YAEL,EAAIo1P,EAAQjqM,WAAWjmD,oBAAoB,SAAU0gB,KAAKswO,cAC1D,EAAId,EAAQjqM,WAAWjmD,oBAAoB,mBAAoB0gB,KAAKswO,YACtE,GACC,CACDp2P,IAAK,eACLE,MAAO,SAAsBqyP,GAC3B,IAAI4D,EAAY5D,EAchB,OAZIA,GAAgBzsO,KAAKsI,MAAMqkO,eAC7B0D,EAAYrwO,KAAKsI,MAAMqkO,cAGrBF,EAAezsO,KAAKsI,MAAM+nO,UAAYrwO,KAAKsI,MAAMouO,eACnDrG,EAAYrwO,KAAKsI,MAAM+nO,WAGrB5D,EAAezsO,KAAKsI,MAAM+nO,YAC5BA,EAAY5D,GAGP4D,CACT,GACC,CACDn2P,IAAK,cACLE,MAAO,WACL,IAAI+5B,EAASnU,KAEb,OAAOA,KAAK9iB,MAAMZ,SAASwB,KAAI,SAAU8R,EAAKlO,GAC5C,IAAIq1P,EAAY1H,EAAY9pM,QAAQwtM,MAAK,EAAOrxP,IAAUyyB,EAAO7L,MAAMmkO,cAEnEuK,EAAa,CACf98P,IAAKwH,EACLrB,IAAK,SAAa/F,GAChB,OAAO65B,EAAOq/N,aAAal5P,EAAGoH,EAChC,EACA9E,UAAWm6P,EACX72P,QAASi0B,EAAO6+N,gBAAgBtyO,KAAKyT,EAAQzyB,EAAOyyB,EAAOj3B,MAAMZ,SAASoF,IAC1EsC,UAAWmwB,EAAO6+N,gBAAgBtyO,KAAKyT,EAAQzyB,EAAOyyB,EAAOj3B,MAAMZ,SAASoF,IAC5E,aAAc,GAAGqa,OAAOoY,EAAOj3B,MAAMmK,OAAO0C,KAAM,KAAKgS,OAAOra,EAAQ,GACtE7E,MAAO,CACLM,MAAOg3B,EAAOj3B,MAAMy2P,aAGxB,OAAoB7gG,EAAOvtG,QAAQ1pD,cAAc,KAAMgkB,EAAS,CAAC,EAAGm3O,EAAY,CAC9EphB,KAAM,SACNjxO,SAAU,IACRiL,EACN,GACF,GACC,CACD1V,IAAK,SACLE,MAAO,WACL,IAAIm6J,EAASv0I,KAEb,IAAKA,KAAK9iB,MAAMZ,SACd,OAAO,KAGT,IAMI26P,EANApD,EAAc/gG,EAAO4D,SAAStiJ,MAAM4L,KAAK9iB,MAAMZ,UAAY,EAE3D23P,EAAUj0O,KAAKsI,MAAM0rO,YAAch0O,KAAKsI,MAAM+nO,UAAY,EAE1D6D,EAAUl0O,KAAKsI,MAAM0rO,YAAch0O,KAAKsI,MAAM+nO,UAAYrwO,KAAKsI,MAAMqkO,aAGrEM,GAAmBjtO,KAAKsI,MAAM+nO,WAAarwO,KAAKsI,MAAM++D,UAAY,GAClE6lK,GAAgB,EAAIb,EAAc9mM,SAAS0nM,EAAiB,KAAMjtO,KAAK9iB,MAAMq0J,MAC7E47F,EAAiBntO,KAAK9iB,MAAMiwP,eAAiB,KAejD,OAdA8J,EAAiB,CACf7J,gBAAiBF,EACjBgK,aAAchK,EACdiK,YAAajK,EACbI,WAAYJ,EACZ/yJ,UAAW+yJ,EACXG,YAAaH,EACbM,yBAA0BL,EAC1BM,sBAAuBN,EACvBiK,qBAAsBjK,EACtBO,oBAAqBP,EACrBQ,mBAAoBR,EACpBS,qBAAsBT,GAEJr6F,EAAOvtG,QAAQ1pD,cAAc,MAAO,CACtDe,UAAWyyP,EAAY9pM,QAAQ4vM,UAAS,IAC1BriG,EAAOvtG,QAAQ1pD,cAAc,MAAO,CAClDe,UAAWyyP,EAAY9pM,QAAQiwM,SAAQ,GACvCn1P,IAAK2f,KAAKq3O,oBACIvkG,EAAOvtG,QAAQ1pD,cAAc,SAAU,CACrDmC,KAAM,SACNpB,UAAWyyP,EAAY9pM,QAAQwwM,YAAY9B,GAC3C/zP,QAAS,WACP,OAAOq0J,EAAO+iG,YAChB,EACA,aAAct3O,KAAK9iB,MAAMmK,OAAOkuP,YAC9B1B,EAA2B/gG,EAAOvtG,QAAQ1pD,cAAcuzP,EAAgB7pM,QAAS,CACnF5oB,QAAS,KACT//B,UAAWyyP,EAAY9pM,QAAQivM,QAAO,EAAOx0O,KAAKsI,MAAMilO,SACxD9pB,YAAazjN,KAAKu3O,UAClB7zB,aAAc1jN,KAAKs3O,WACnBj0B,YAAarjN,KAAKqjN,YAClBH,aAAcljN,KAAKkjN,aACnBK,WAAYvjN,KAAKujN,WACjB1mO,MAAOo6P,EACPpzB,SAAU7jN,KAAKw3O,gBACf10B,iBAAkB9iN,KAAK9iB,MAAM6zP,cAC5B/wO,KAAKo0O,eAA8BthG,EAAOvtG,QAAQ1pD,cAAc,KAAM,CACvEe,UAAWyyP,EAAY9pM,QAAQivM,QAAO,EAAOx0O,KAAKsI,MAAMilO,SACxDltP,IAAK,SAAa+9E,GAChB,OAAOm2E,EAAOijG,gBAAgBp5K,EAChC,EACAvhF,MAAOo6P,GACNj3O,KAAKo0O,eAA6BthG,EAAOvtG,QAAQ1pD,cAAc,SAAU,CAC1EmC,KAAM,SACNpB,UAAWyyP,EAAY9pM,QAAQywM,YAAY9B,GAC3Ch0P,QAAS,WACP,OAAOq0J,EAAOgjG,WAChB,EACA,aAAcv3O,KAAK9iB,MAAMmK,OAAOuuP,cAEpC,MA3U0E7lE,EAAkBp9B,EAAY34J,UAAW44J,GAAiBC,GAAak9B,EAAkBp9B,EAAaE,GA8U3KwjG,CACT,CAzT0B,CAyTxBvjG,EAAO3vH,WAET9nB,EAAA,QAAkBg7O,EAElBvmE,EAAgBumE,EAAQ,cAAe,UAEvCvmE,EAAgBumE,EAAQ,eAAgB,CACtC9kG,KAAM,aACNlqJ,OAAQ,CACNkuP,UAAW,wBACXK,WAAY,oBACZ7rP,KAAM,cAER0iP,aAAc,EACdkH,WAAY,GACZxG,eAAgB,0CC7XlBpzP,OAAOg5C,eAAe13B,EAAS,aAAc,CAC3CjhB,OAAO,IAETihB,EAAA,aAAkB,EAElB,IAEgCc,EAF5Bs7O,GAE4Bt7O,EAFS,EAAQ,SAEIA,EAAIk9D,WAAal9D,EAAM,CAAEopC,QAASppC,GAIvF,IAAIu7O,EAAW,CACbzC,KAAM,SAAc0C,GAClB,OAAO,EAAIF,EAAYlyM,SAJ3B,SAAyBppC,EAAKjiB,EAAKE,GAAiK,OAApJF,KAAOiiB,EAAOpiB,OAAOg5C,eAAe52B,EAAKjiB,EAAK,CAAEE,MAAOA,EAAO82C,YAAY,EAAMD,cAAc,EAAMD,UAAU,IAAkB70B,EAAIjiB,GAAOE,EAAgB+hB,CAAK,CAI5K2zK,CAAgB,CAC9C,iBAAiB,GAChB6nE,GAAmB,KAAMA,GAC9B,EACAxC,SAAU,SAAkByC,GAC1B,OAAO,EAAIH,EAAYlyM,SAAS,CAC9BsyM,UAAU,EACV,kBAAmBD,GAEvB,EACApC,QAAS,SAAiBoC,EAAUrmG,GAClC,OAAO,EAAIkmG,EAAYlyM,SAAS,CAC9B,kBAAmBqyM,EACnB,iBAAkBA,EAClB,kBAA4B,eAATrmG,EACnB,gBAA0B,eAATA,GAErB,EACAijG,OAAQ,SAAgBoD,EAAUE,GAChC,OAAO,EAAIL,EAAYlyM,SAAS,CAC9BwyM,QAASH,EACT7lE,OAAQ6lE,EACRI,UAAWF,GAEf,EACA/E,KAAM,SAAc6E,EAAU9sP,EAAUwsJ,GACtC,OAAO,EAAImgG,EAAYlyM,SAAS,CAC9B0yM,OAAQL,EACRM,MAAON,EACP9sP,SAAUA,EACVwsJ,SAAUA,GAEd,EACAy+F,WAAY,SAAoB/2P,GAC9B,OAAO,EAAIy4P,EAAYlyM,SAAS,CAC9B,8BAA8B,EAC9B,mBAAoBvmD,GAExB,EACAg3P,WAAY,SAAoBh3P,GAC9B,OAAO,EAAIy4P,EAAYlyM,SAAS,CAC9B,8BAA8B,EAC9B,mBAAoBvmD,GAExB,EACAi3P,IAAK,SAAanrP,GAChB,OAAO,EAAI2sP,EAAYlyM,SAAS,CAC9B4yM,KAAK,EACLrtP,SAAUA,GAEd,GAEFuQ,EAAA,QAAkBq8O,oCCjElB39P,OAAOg5C,eAAe13B,EAAS,aAAc,CAC3CjhB,OAAO,IAETihB,EAAQo7O,gBAAa,EASrBp7O,EAAQo7O,WAPS,SAAoBjjP,GACnC,IAAIrW,EAAQqW,EAAGK,YACXhX,EAAQ6B,iBAAiB8U,GAE7B,OADArW,GAAS0f,SAAShgB,EAAM6W,YAAcmJ,SAAShgB,EAAMu7P,YAEvD,sCCPAr+P,OAAOg5C,eAAe13B,EAAS,KAA/B,CACE61B,YAAY,EACZpoB,IAAK,WACH,OAAOuvO,EAAU9yM,OACnB,IAeF,IAAI8yM,EAAYrlG,EAAuB,EAAQ,QAE3CslG,EAAS,EAAQ,OAEjBhJ,EAAUt8F,EAAuB,EAAQ,QAE7C,SAASA,EAAuB72I,GAAO,OAAOA,GAAOA,EAAIk9D,WAAal9D,EAAM,CAAEopC,QAASppC,EAAO,oCC5B9FpiB,OAAOg5C,eAAe13B,EAAS,aAAc,CAC3CjhB,OAAO,IAETihB,EAAA,aAAkB,EAMlBA,EAAA,QAJe,WACb,OAAO3gB,QACT,kCCPAX,OAAOg5C,eAAe13B,EAAS,aAAc,CAC3CjhB,OAAO,IAETihB,EAAA,aAAkB,EAMlBA,EAAA,QAJe,WACb,OAAO5c,MACT,uBCTA,OAOC,WACA,aAEA,IAAIvF,EAAS,CAAC,EAAEC,eAEhB,SAASC,IAGR,IAFA,IAAIE,EAAU,GAELC,EAAI,EAAGA,EAAIomB,UAAUnmB,OAAQD,IAAK,CAC1C,IAAIE,EAAMkmB,UAAUpmB,GACpB,GAAKE,EAAL,CAEA,IAAI4rD,SAAiB5rD,EAErB,GAAgB,WAAZ4rD,GAAoC,WAAZA,EAC3B/rD,EAAQ+B,KAAK5B,QACP,GAAIG,MAAMC,QAAQJ,IACxB,GAAIA,EAAID,OAAQ,CACf,IAAI8rD,EAAQlsD,EAAW2mB,MAAM,KAAMtmB,GAC/B6rD,GACHhsD,EAAQ+B,KAAKiqD,EAEf,OACM,GAAgB,WAAZD,EACV,GAAI5rD,EAAIK,WAAaC,OAAOC,UAAUF,SACrC,IAAK,IAAII,KAAOT,EACXP,EAAOiB,KAAKV,EAAKS,IAAQT,EAAIS,IAChCZ,EAAQ+B,KAAKnB,QAIfZ,EAAQ+B,KAAK5B,EAAIK,WArBD,CAwBnB,CAEA,OAAOR,EAAQslB,KAAK,IACrB,CAEqCxD,EAAOC,SAC3CjiB,EAAWmsD,QAAUnsD,EACrBgiB,EAAOC,QAAUjiB,QAKhB,KAFwB,EAAF,WACtB,OAAOA,CACP,UAFoB,OAEpB,YAIH,CAlDA,qJCP0L,MAAawB,GAAE,mBAAE,MAAMrB,EAAE,IAAIQ,OAAO+lB,OAAO,CAAC,GAAE,gBAAEllB,IAAI0kB,EAAE,oBAAoBnkB,EAAE,CAACZ,EAAED,IAAIA,EAAE0D,OAAOshB,EAAEhlB,EAAEq6B,QAAQp6B,EAAQ+mC,EAAE,4CAAkC,OAAG,YAAE,WAAO,MAAMhnC,EAAE,SAASC,EAAED,GAAG,IAAIE,EAAE,CAAC,EAAE,IAAI,IAAIC,KAAKF,EAAER,OAAOC,UAAUb,eAAegB,KAAKI,EAAEE,IAAIH,EAAEc,QAAQX,GAAG,IAAID,EAAEC,GAAGF,EAAEE,IAAI,GAAG,MAAMF,GAAG,mBAAmBR,OAAOw5C,sBAAsB,CAAC,IAAI9xC,EAAE,EAAE,IAAIhH,EAAEV,OAAOw5C,sBAAsBh5C,GAAGkH,EAAEhH,EAAEjB,OAAOiI,IAAInH,EAAEc,QAAQX,EAAEgH,IAAI,GAAG1H,OAAOC,UAAUqiB,qBAAqBliB,KAAKI,EAAEE,EAAEgH,MAAMjH,EAAEC,EAAEgH,IAAIlH,EAAEE,EAAEgH,IAAI,CAAC,OAAOjH,CAAC,CAAxU,CAA0UD,EAAE,CAAC,UAAU42C,EAAE91C,KAAKf,EAAC,EAAGoF,EAAEnF,GAAG42C,EAAE6H,MAAM1+C,IAAI,OAAOE,EAAED,EAAEE,EAAEH,EAAEgnC,EAAEoe,OAAOnlD,GAAGC,EAAED,KAAKE,EAAEF,KAAK,IAAIC,EAAEC,CAAE,IAAGsiB,EAAE,EAAEzgB,SAAS/B,EAAEg+P,kBAAkBj+P,GAAE,MAAO,MAAMgB,EAAE/B,IAAG,cAAE,MAAM+nC,GAAE,WAAK6P,EAAEp0B,IAAG,gBAAE5hB,EAAE,MAAM8mB,EAAE,CAACu2O,aAAarnN,EAAEsnN,gBAAgBl+P,IAAIwiB,EAAE,CAAC/e,KAAKshB,EAAEqV,QAAQp6B,GAAE,GAAyM,OAAO,gBAAE,KAAvM,OAAO+mC,GAAGA,IAAIhmC,GAAGhB,IAAI,MAAMgB,OAAE,EAAOA,EAAEo7B,YAAY4K,EAAE5K,YAAY,CAACn8B,IAAI,IAAID,EAAE,OAAOooB,QAAQ,QAAQpoB,EAAEC,EAAE+tB,aAAQ,IAAShuB,OAAE,EAAOA,EAAEo+P,oBAAqB,EAAvF,CAAyFp3N,IAAI5hC,EAAE4hC,GAAGrf,EAAEw2O,gBAAgBn9P,GAAGk2C,EAAElQ,IAAwB/nC,EAAE+nC,EAAG,GAAE,CAACA,KAAI,SAAE1mC,EAAEwwP,SAASrxP,OAAO+lB,OAAO,CAAC1lB,MAAM6nB,GAAG,CAAC3lB,SAAS/B,IAAG,EAAG,SAAS0nB,EAAE1nB,GAAG,OAAOD,IAAI,MAAME,EAAEjB,IAAI,OAAO,SAAEgB,EAAER,OAAO+lB,OAAO,CAAC,EAAExlB,EAAE,CAACk+P,aAAah+P,IAAG,CAAE,uJCgBzwC,SAASqlB,IAYP,OAXAA,EAAW9lB,OAAO+lB,OAAS/lB,OAAO+lB,OAAOY,OAAS,SAAUhc,GAC1D,IAAK,IAAInL,EAAI,EAAGA,EAAIomB,UAAUnmB,OAAQD,IAAK,CACzC,IAAI8Q,EAASsV,UAAUpmB,GACvB,IAAK,IAAIW,KAAOmQ,EACVtQ,OAAOC,UAAUb,eAAegB,KAAKkQ,EAAQnQ,KAC/CwK,EAAOxK,GAAOmQ,EAAOnQ,GAG3B,CACA,OAAOwK,CACT,EACOmb,EAASE,MAAMC,KAAML,UAC9B,CACA,SAAS+9K,EAA8BrzL,EAAQmzL,GAC7C,GAAc,MAAVnzL,EAAgB,MAAO,CAAC,EAC5B,IAEInQ,EAAKX,EAFLmL,EAAS,CAAC,EACV+4L,EAAa1jM,OAAOiC,KAAKqO,GAE7B,IAAK9Q,EAAI,EAAGA,EAAIkkM,EAAWjkM,OAAQD,IACjCW,EAAMujM,EAAWlkM,GACbikM,EAASpiM,QAAQlB,IAAQ,IAC7BwK,EAAOxK,GAAOmQ,EAAOnQ,IAEvB,OAAOwK,CACT,CA0F8B,IAAImsC,IAAI,CAAC,oCAAqC,sBAAuB,eA8EnG,MAAMi0M,EAAY,gIAA8H,KAwFvF,IAAIn0M,IA6B7D,MACMgoN,GAAsB,iBAAsB,iBAE5B,iBAAmB,UA2PzC,SAASC,EAAclgM,GACrB,IAAI,SACFvZ,EAAQ,SACR7iD,EAAQ,OACRu8P,EAAM,OACNp6P,GACEi6D,EACAogM,EAAa,WACS,MAAtBA,EAAWt6P,UACbs6P,EAAWt6P,SAAU,QAAqB,CACxCC,SACAs/C,UAAU,KAGd,IAAIzgB,EAAUw7N,EAAWt6P,SACpB8pB,EAAOywO,GAAgB,WAAe,CACzC7hN,OAAQ5Z,EAAQ4Z,OAChBh3B,SAAUod,EAAQpd,YAEhB,mBACF84O,GACEH,GAAU,CAAC,EACXh2N,EAAW,eAAkB+mM,IAC/BovB,GAAsBL,EAAsBA,GAAoB,IAAMI,EAAanvB,KAAamvB,EAAanvB,EAAS,GACrH,CAACmvB,EAAcC,IAElB,OADA,mBAAsB,IAAM17N,EAAQkhB,OAAO3b,IAAW,CAACvF,EAASuF,IAC5C,gBAAoB,KAAQ,CAC9Csc,SAAUA,EACV7iD,SAAUA,EACV4jB,SAAUoI,EAAMpI,SAChB+4O,eAAgB3wO,EAAM4uB,OACtB/nB,UAAWmO,GAEf,CA0EA,MAAMiM,EAA8B,qBAAX9qC,QAAqD,qBAApBA,OAAO/D,UAAqE,qBAAlC+D,OAAO/D,SAASmB,cAC9Gq9P,EAAqB,gCAIrBC,EAAoB,uBAAiB,SAAqBpgM,EAAO14D,GACrE,IAgBI+4P,GAhBA,QACAl5P,EAAO,SACPm5P,EAAQ,eACRC,EAAc,QACdpzP,EAAO,MACPoiB,EAAK,OACL5jB,EAAM,GACNy4B,EAAE,mBACFo8N,EAAkB,wBAClBC,GACEzgM,EACJr8D,EAAOghM,EAA8B3kI,EAAO+rL,IAC1C,SACF3lM,GACE,aAAiB,MAGjBs6M,GAAa,EACjB,GAAkB,kBAAPt8N,GAAmB+7N,EAAmB95O,KAAK+d,KAEpDi8N,EAAej8N,EAEXoM,GACF,IACE,IAAImwN,EAAa,IAAIn7M,IAAI9/C,OAAOyhB,SAAS5a,MACrCq0P,EAAYx8N,EAAGojB,WAAW,MAAQ,IAAIhC,IAAIm7M,EAAW/jO,SAAWwH,GAAM,IAAIohB,IAAIphB,GAC9Ez3B,GAAO,QAAci0P,EAAUjjO,SAAUyoB,GACzCw6M,EAAUr7M,SAAWo7M,EAAWp7M,QAAkB,MAAR54C,EAE5Cy3B,EAAKz3B,EAAOi0P,EAAUj8N,OAASi8N,EAAUh8N,KAEzC87N,GAAa,CAEjB,CAAE,MAAOn/P,GAGT,CAIJ,IAAIgL,GAAO,QAAQ63B,EAAI,CACrBk8N,aAEEO,EAkNN,SAA6Bz8N,EAAImwM,GAC/B,IAAI,OACF5oO,EACAwB,QAAS2zP,EAAW,MACpBvxO,EAAK,mBACLixO,EAAkB,SAClBF,EAAQ,wBACRG,QACY,IAAVlsB,EAAmB,CAAC,EAAIA,EACxBwsB,GAAW,UACX55O,GAAW,UACXxa,GAAO,QAAgBy3B,EAAI,CAC7Bk8N,aAEF,OAAO,eAAkB70P,IACvB,GAr4BJ,SAAgCA,EAAOE,GACrC,OAAwB,IAAjBF,EAAM82M,UAEZ52M,GAAqB,UAAXA,KANb,SAAyBF,GACvB,SAAUA,EAAMytI,SAAWztI,EAAM22M,QAAU32M,EAAM0tI,SAAW1tI,EAAM02M,SACpE,CAMG6+C,CAAgBv1P,EAEnB,CA83BQw1P,CAAuBx1P,EAAOE,GAAS,CACzCF,EAAM2oI,iBAGN,IAAIjnI,OAA0B0S,IAAhBihP,EAA4BA,GAAc,QAAW35O,MAAc,QAAWxa,GAC5Fo0P,EAAS38N,EAAI,CACXj3B,UACAoiB,QACAixO,qBACAF,WACAG,2BAEJ,IACC,CAACt5O,EAAU45O,EAAUp0P,EAAMm0P,EAAavxO,EAAO5jB,EAAQy4B,EAAIo8N,EAAoBF,EAAUG,GAC9F,CA/OwBS,CAAoB98N,EAAI,CAC5Cj3B,UACAoiB,QACA5jB,SACA60P,qBACAF,WACAG,4BAQF,OAGE,gBAAoB,IAAK35O,EAAS,CAAC,EAAGnjB,EAAM,CAC1C4I,KAAM8zP,GAAgB9zP,EACtBpF,QAASu5P,GAAcH,EAAiBp5P,EAX5C,SAAqBsE,GACftE,GAASA,EAAQsE,GAChBA,EAAMq1M,kBACT+/C,EAAgBp1P,EAEpB,EAOInE,IAAKA,EACLqE,OAAQA,IAGd,IAAE,KAwJF,IAAIw1P,EAQAC,GAPJ,SAAWD,GACTA,EAAqC,qBAAI,uBACzCA,EAA0B,UAAI,YAC9BA,EAAiC,iBAAI,mBACrCA,EAA2B,WAAI,aAC/BA,EAAuC,uBAAI,wBAC5C,EAND,CAMGA,IAAmBA,EAAiB,CAAC,IAExC,SAAWC,GACTA,EAAgC,WAAI,aACpCA,EAAiC,YAAI,cACrCA,EAA0C,qBAAI,sBAC/C,CAJD,CAIGA,IAAwBA,EAAsB,CAAC,iUC/4BlD,SAASt6O,IAYP,OAXAA,EAAW9lB,OAAO+lB,OAAS/lB,OAAO+lB,OAAOY,OAAS,SAAUhc,GAC1D,IAAK,IAAInL,EAAI,EAAGA,EAAIomB,UAAUnmB,OAAQD,IAAK,CACzC,IAAI8Q,EAASsV,UAAUpmB,GACvB,IAAK,IAAIW,KAAOmQ,EACVtQ,OAAOC,UAAUb,eAAegB,KAAKkQ,EAAQnQ,KAC/CwK,EAAOxK,GAAOmQ,EAAOnQ,GAG3B,CACA,OAAOwK,CACT,EACOmb,EAASE,MAAMC,KAAML,UAC9B,CAIA,MAAMy6O,EAAiC,gBAAoB,MAI3D,MAAMC,EAAsC,gBAAoB,MAmBhE,MAAMC,EAAiC,gBAAoB,MAI3D,MAAMC,EAA+B,gBAAoB,MAIzD,MAAMC,EAA4B,gBAAoB,CACpDC,OAAQ,KACRtiP,QAAS,GACTuiP,aAAa,IAKf,MAAMC,EAAiC,gBAAoB,MAW3D,SAASC,EAAQz9N,EAAImwM,GACnB,IAAI,SACF+rB,QACY,IAAV/rB,EAAmB,CAAC,EAAIA,EAC3ButB,MAEuE,SAAiB,GACzF,IAAI,SACF17M,EAAQ,UACRhwB,GACE,aAAiBmrO,IACjB,KACF38N,EAAI,SACJjH,EAAQ,OACRgH,GACEo9N,EAAgB39N,EAAI,CACtBk8N,aAEE0B,EAAiBrkO,EASrB,MAHiB,MAAbyoB,IACF47M,EAA8B,MAAbrkO,EAAmByoB,GAAW,QAAU,CAACA,EAAUzoB,KAE/DvH,EAAUyuB,WAAW,CAC1BlnB,SAAUqkO,EACVr9N,SACAC,QAEJ,CAOA,SAASk9N,IACP,OAA4C,MAArC,aAAiBN,EAC1B,CAYA,SAASS,IAIP,OAHCH,MAE2E,SAAiB,GACtF,aAAiBN,GAAiBr6O,QAC3C,CAmBA,SAAS+6O,EAASr4M,GACfi4M,MAEwE,SAAiB,GAC1F,IAAI,SACFnkO,GACEskO,IACJ,OAAO,WAAc,KAAM,QAAUp4M,EAASlsB,IAAW,CAACA,EAAUksB,GACtE,CASA,SAASglM,EAA0B95N,GAClB,aAAiBwsO,GAAmBY,QAKjD,kBAAsBptO,EAE1B,CAQA,SAASqtO,IACP,IAAI,YACFT,GACE,aAAiBF,GAGrB,OAAOE,EAomBT,WACE,IAAI,OACFU,GACEC,EAAqBnB,EAAeoB,mBACpCzvP,EAAK0vP,EAAkBpB,EAAoBmB,mBAC3CE,EAAY,UAAa,GAqB7B,OApBA5T,GAA0B,KACxB4T,EAAUh9P,SAAU,CAAI,IAEX,eAAkB,SAAU2+B,EAAI58B,QAC7B,IAAZA,IACFA,EAAU,CAAC,GAMRi7P,EAAUh9P,UACG,kBAAP2+B,EACTi+N,EAAOtB,SAAS38N,GAEhBi+N,EAAOtB,SAAS38N,EAAItd,EAAS,CAC3B47O,YAAa5vP,GACZtL,IAEP,GAAG,CAAC66P,EAAQvvP,GAEd,CA/nBuB6vP,GAEvB,WACGb,MAE2E,SAAiB,GAC7F,IAAIc,EAAoB,aAAiBvB,IACrC,SACFj7M,EAAQ,UACRhwB,GACE,aAAiBmrO,IACjB,QACFniP,GACE,aAAiBqiP,IAEnB9jO,SAAUwtB,GACR82M,IACAY,EAAqBp2O,KAAKC,WAAU,QAA2BtN,IAC/DqjP,EAAY,UAAa,GA8B7B,OA7BA5T,GAA0B,KACxB4T,EAAUh9P,SAAU,CAAI,IAEX,eAAkB,SAAU2+B,EAAI58B,GAQ7C,QAPgB,IAAZA,IACFA,EAAU,CAAC,IAMRi7P,EAAUh9P,QAAS,OACxB,GAAkB,kBAAP2+B,EAET,YADAhO,EAAU2vB,GAAG3hB,GAGf,IAAIz3B,GAAO,QAAUy3B,EAAI3X,KAAKrC,MAAMy4O,GAAqB13M,EAAuC,SAArB3jD,EAAQ84P,UAQ1D,MAArBsC,GAA0C,MAAbx8M,IAC/Bz5C,EAAKgxB,SAA6B,MAAlBhxB,EAAKgxB,SAAmByoB,GAAW,QAAU,CAACA,EAAUz5C,EAAKgxB,aAE5En2B,EAAQ2F,QAAUipB,EAAUjpB,QAAUipB,EAAU9zB,MAAMqK,EAAMnF,EAAQ+nB,MAAO/nB,EAChF,GAAG,CAAC4+C,EAAUhwB,EAAWysO,EAAoB13M,EAAkBy3M,GAEjE,CAjD6CE,EAC7C,CAkFA,SAASC,IACP,IAAI,QACF3jP,GACE,aAAiBqiP,GACjBuB,EAAa5jP,EAAQA,EAAQ3e,OAAS,GAC1C,OAAOuiQ,EAAaA,EAAWlvN,OAAS,CAAC,CAC3C,CAOA,SAASiuN,EAAgB39N,EAAI6+N,GAC3B,IAAI,SACF3C,QACa,IAAX2C,EAAoB,CAAC,EAAIA,GACzB,QACF7jP,GACE,aAAiBqiP,IAEnB9jO,SAAUwtB,GACR82M,IACAY,EAAqBp2O,KAAKC,WAAU,QAA2BtN,IACnE,OAAO,WAAc,KAAM,QAAUglB,EAAI3X,KAAKrC,MAAMy4O,GAAqB13M,EAA+B,SAAbm1M,IAAsB,CAACl8N,EAAIy+N,EAAoB13M,EAAkBm1M,GAC9J,CAeA,SAAS4C,EAAch9M,EAAQC,EAAag9M,GACzCrB,MAEyE,SAAiB,GAC3F,IAAI,UACF1rO,GACE,aAAiBmrO,IAEnBniP,QAASgkP,GACP,aAAiB3B,GACjBuB,EAAaI,EAAcA,EAAc3iQ,OAAS,GAClD4iQ,EAAeL,EAAaA,EAAWlvN,OAAS,CAAC,EAEjDwvN,GADiBN,GAAaA,EAAWrlO,SACpBqlO,EAAaA,EAAW55M,aAAe,KAC9C45M,GAAcA,EAAW37M,MAyB3C,IACIlgC,EADAo8O,EAAsBtB,IAE1B,GAAI97M,EAAa,CACf,IAAIq9M,EACJ,IAAIC,EAA2C,kBAAhBt9M,GAA2B,QAAUA,GAAeA,EAC1D,MAAvBm9M,IAAuF,OAAvDE,EAAwBC,EAAkB9lO,eAAoB,EAAS6lO,EAAsBh8M,WAAW87M,MAAwc,SAAiB,GACnmBn8O,EAAWs8O,CACb,MACEt8O,EAAWo8O,EAEb,IAAI5lO,EAAWxW,EAASwW,UAAY,IAChCurB,EAA2C,MAAvBo6M,EAA6B3lO,EAAWA,EAASnzB,MAAM84P,EAAmB7iQ,SAAW,IACzG2e,GAAU,QAAY8mC,EAAQ,CAChCvoB,SAAUurB,IAMZ,IAAIw6M,EAAkBC,EAAevkP,GAAWA,EAAQra,KAAIylB,GAASxpB,OAAO+lB,OAAO,CAAC,EAAGyD,EAAO,CAC5FspB,OAAQ9yC,OAAO+lB,OAAO,CAAC,EAAGs8O,EAAc74O,EAAMspB,QAC9CnW,UAAU,QAAU,CAAC2lO,EAErBltO,EAAUsvB,eAAiBtvB,EAAUsvB,eAAel7B,EAAMmT,UAAUA,SAAWnT,EAAMmT,WACrFyrB,aAAqC,MAAvB5+B,EAAM4+B,aAAuBk6M,GAAqB,QAAU,CAACA,EAE3EltO,EAAUsvB,eAAiBtvB,EAAUsvB,eAAel7B,EAAM4+B,cAAczrB,SAAWnT,EAAM4+B,mBACtFg6M,EAAeD,GAKpB,OAAIh9M,GAAeu9M,EACG,gBAAoBlC,EAAgBnP,SAAU,CAChEhxP,MAAO,CACL8lB,SAAUL,EAAS,CACjB6W,SAAU,IACVgH,OAAQ,GACRC,KAAM,GACNrV,MAAO,KACPpuB,IAAK,WACJgmB,GACH+4O,eAAgB,KAAOj7M,MAExBy+M,GAEEA,CACT,CACA,SAASE,IACP,IAAIj5P,EA6SN,WACE,IAAIk5P,EACJ,IAAIl5P,EAAQ,aAAiBi3P,GACzBryO,EAAQu0O,EAAmB1C,EAAoB2C,eAC/CC,EAAUxB,EAAkBpB,EAAoB2C,eAIpD,GAAIp5P,EACF,OAAOA,EAIT,OAAyC,OAAjCk5P,EAAgBt0O,EAAMsC,aAAkB,EAASgyO,EAAcG,EACzE,CA3TcC,GACRn0P,GAAU,QAAqBnF,GAASA,EAAMT,OAAS,IAAMS,EAAMN,WAAaM,aAAiBggB,MAAQhgB,EAAMmF,QAAU2c,KAAKC,UAAU/hB,GACxI4f,EAAQ5f,aAAiBggB,MAAQhgB,EAAM4f,MAAQ,KAC/C25O,EAAY,yBACZC,EAAY,CACd96F,QAAS,SACT+6F,gBAAiBF,GAenB,OAAoB,gBAAoB,WAAgB,KAAmB,gBAAoB,KAAM,KAAM,iCAA+C,gBAAoB,KAAM,CAClLpgQ,MAAO,CACLT,UAAW,WAEZyM,GAAUya,EAAqB,gBAAoB,MAAO,CAC3DzmB,MAAOqgQ,GACN55O,GAAS,KAfE,KAgBhB,CACA,MAAM85O,EAAmC,gBAAoBT,EAAuB,MACpF,MAAMU,UAA4B,YAChC,WAAAx7N,CAAY3kC,GACVkpC,MAAMlpC,GACN8iB,KAAKsI,MAAQ,CACXpI,SAAUhjB,EAAMgjB,SAChBo9O,aAAcpgQ,EAAMogQ,aACpB55P,MAAOxG,EAAMwG,MAEjB,CACA,+BAAOixF,CAAyBjxF,GAC9B,MAAO,CACLA,MAAOA,EAEX,CACA,+BAAOkxF,CAAyB13F,EAAOorB,GASrC,OAAIA,EAAMpI,WAAahjB,EAAMgjB,UAAmC,SAAvBoI,EAAMg1O,cAAkD,SAAvBpgQ,EAAMogQ,aACvE,CACL55P,MAAOxG,EAAMwG,MACbwc,SAAUhjB,EAAMgjB,SAChBo9O,aAAcpgQ,EAAMogQ,cAQjB,CACL55P,MAAOxG,EAAMwG,OAAS4kB,EAAM5kB,MAC5Bwc,SAAUoI,EAAMpI,SAChBo9O,aAAcpgQ,EAAMogQ,cAAgBh1O,EAAMg1O,aAE9C,CACA,iBAAAx6N,CAAkBp/B,EAAO65P,GACvBn9O,QAAQ1c,MAAM,wDAAyDA,EAAO65P,EAChF,CACA,MAAAv6N,GACE,OAAOhjB,KAAKsI,MAAM5kB,MAAqB,gBAAoB82P,EAAapP,SAAU,CAChFhxP,MAAO4lB,KAAK9iB,MAAMsgQ,cACJ,gBAAoB7C,EAAkBvP,SAAU,CAC9DhxP,MAAO4lB,KAAKsI,MAAM5kB,MAClBpH,SAAU0jB,KAAK9iB,MAAM6vB,aACjB/M,KAAK9iB,MAAMZ,QACnB,EAEF,SAASmhQ,EAAc91O,GACrB,IAAI,aACF61O,EAAY,MACZj6O,EAAK,SACLjnB,GACEqrB,EACAg0O,EAAoB,aAAiBvB,GAOzC,OAHIuB,GAAqBA,EAAkBT,QAAUS,EAAkB+B,gBAAkBn6O,EAAM68B,MAAMu9M,cAAgBp6O,EAAM68B,MAAM/d,iBAC/Hs5N,EAAkB+B,cAAcE,2BAA6Br6O,EAAM68B,MAAMv0C,IAEvD,gBAAoB2uP,EAAapP,SAAU,CAC7DhxP,MAAOojQ,GACNlhQ,EACL,CACA,SAASogQ,EAAevkP,EAASgkP,EAAeD,GAC9C,IAAI2B,EAOJ,QANsB,IAAlB1B,IACFA,EAAgB,SAEM,IAApBD,IACFA,EAAkB,MAEL,MAAX/jP,EAAiB,CACnB,IAAI2lP,EACJ,GAA4C,OAAvCA,EAAmB5B,KAA4B4B,EAAiBlzO,OAKnE,OAAO,KAFPzS,EAAU+jP,EAAgB/jP,OAI9B,CACA,IAAIskP,EAAkBtkP,EAGlByS,EAAkD,OAAxCizO,EAAoB3B,QAA2B,EAAS2B,EAAkBjzO,OACxF,GAAc,MAAVA,EAAgB,CAClB,IAAImzO,EAAatB,EAAgBp2L,WAAU/kC,GAAKA,EAAE8e,MAAMv0C,KAAiB,MAAV+e,OAAiB,EAASA,EAAO0W,EAAE8e,MAAMv0C,OACtGkyP,GAAc,IAAoK,SAAiB,GACrMtB,EAAkBA,EAAgBl5P,MAAM,EAAGosB,KAAKjT,IAAI+/O,EAAgBjjQ,OAAQukQ,EAAa,GAC3F,CACA,OAAOtB,EAAgBn3H,aAAY,CAACm1H,EAAQl3O,EAAO7hB,KACjD,IAAIgC,EAAQ6f,EAAM68B,MAAMv0C,GAAe,MAAV+e,OAAiB,EAASA,EAAOrH,EAAM68B,MAAMv0C,IAAM,KAE5E8xP,EAAe,KACfzB,IACFyB,EAAep6O,EAAM68B,MAAMu9M,cAAgBP,GAE7C,IAAIjlP,EAAUgkP,EAAcpgP,OAAO0gP,EAAgBl5P,MAAM,EAAG7B,EAAQ,IAChEs8P,EAAc,KAChB,IAAI1hQ,EAgBJ,OAdEA,EADEoH,EACSi6P,EACFp6O,EAAM68B,MAAMjd,UAOG,gBAAoB5f,EAAM68B,MAAMjd,UAAW,MAC1D5f,EAAM68B,MAAM49B,QACVz6D,EAAM68B,MAAM49B,QAEZy8K,EAEO,gBAAoBgD,EAAe,CACrDl6O,MAAOA,EACPi6O,aAAc,CACZ/C,SACAtiP,UACAuiP,YAAgC,MAAnBwB,GAEf5/P,SAAUA,GACV,EAKJ,OAAO4/P,IAAoB34O,EAAM68B,MAAM/d,eAAiB9e,EAAM68B,MAAMu9M,cAA0B,IAAVj8P,GAA4B,gBAAoB27P,EAAqB,CACvJn9O,SAAUg8O,EAAgBh8O,SAC1Bo9O,aAAcpB,EAAgBoB,aAC9BvwO,UAAW4wO,EACXj6P,MAAOA,EACPpH,SAAU0hQ,IACVR,aAAc,CACZ/C,OAAQ,KACRtiP,UACAuiP,aAAa,KAEZsD,GAAa,GACjB,KACL,CACA,IAAI9D,EAA8B,SAAUA,GAI1C,OAHAA,EAA2B,WAAI,aAC/BA,EAA+B,eAAI,iBACnCA,EAAkC,kBAAI,cAC/BA,CACT,CALkC,CAKhCA,GAAkB,CAAC,GACjBC,EAAmC,SAAUA,GAW/C,OAVAA,EAAgC,WAAI,aACpCA,EAAmC,cAAI,gBACvCA,EAAmC,cAAI,gBACvCA,EAAmC,cAAI,gBACvCA,EAAmC,cAAI,gBACvCA,EAAwC,mBAAI,qBAC5CA,EAAgC,WAAI,aACpCA,EAAoC,eAAI,iBACxCA,EAAuC,kBAAI,cAC3CA,EAAgC,WAAI,aAC7BA,CACT,CAZuC,CAYrCA,GAAuB,CAAC,GAI1B,SAASkB,EAAqB4C,GAC5B,IAAI/4K,EAAM,aAAiBk1K,GAE3B,OADCl1K,IAA6G,SAAiB,GACxHA,CACT,CACA,SAAS23K,EAAmBoB,GAC1B,IAAI31O,EAAQ,aAAiB+xO,GAE7B,OADC/xO,IAA+G,SAAiB,GAC1HA,CACT,CAQA,SAASizO,EAAkB0C,GACzB,IAAI79M,EARN,SAAyB69M,GACvB,IAAI79M,EAAQ,aAAiBo6M,GAE7B,OADCp6M,IAA+G,SAAiB,GAC1HA,CACT,CAIc89M,GACRC,EAAY/9M,EAAMjoC,QAAQioC,EAAMjoC,QAAQ3e,OAAS,GAErD,OADC2kQ,EAAU/9M,MAAMv0C,KAA8I,SAAiB,GACzKsyP,EAAU/9M,MAAMv0C,EACzB,EA4O4B,iBAAsB,gBA0KlD,SAASuyP,EAAM7oG,IACkM,SAAiB,EAClO,CAUA,SAAS8oG,EAAOxlM,GACd,IACE1Z,SAAUm/M,EAAe,IAAG,SAC5BhiQ,EAAW,KACX4jB,SAAUq+O,EAAY,eACtBtF,EAAiB,KAAOj7M,IAAG,UAC3B7uB,EACA+rO,OAAQsD,GAAa,GACnB3lM,EACFgiM,MAAwM,SAAiB,GAI3N,IAAI17M,EAAWm/M,EAAap4P,QAAQ,OAAQ,KACxCu4P,EAAoB,WAAc,KAAM,CAC1Ct/M,WACAhwB,YACA+rO,OAAQsD,KACN,CAACr/M,EAAUhwB,EAAWqvO,IACE,kBAAjBD,IACTA,GAAe,QAAUA,IAE3B,IAAI,SACF7nO,EAAW,IAAG,OACdgH,EAAS,GAAE,KACXC,EAAO,GAAE,MACTrV,EAAQ,KAAI,IACZpuB,EAAM,WACJqkQ,EACAG,EAAkB,WAAc,KAClC,IAAIC,GAAmB,QAAcjoO,EAAUyoB,GAC/C,OAAwB,MAApBw/M,EACK,KAEF,CACLz+O,SAAU,CACRwW,SAAUioO,EACVjhO,SACAC,OACArV,QACApuB,OAEF++P,iBACD,GACA,CAAC95M,EAAUzoB,EAAUgH,EAAQC,EAAMrV,EAAOpuB,EAAK++P,IAElD,OAAuB,MAAnByF,EACK,KAEW,gBAAoBpE,EAAkBlP,SAAU,CAClEhxP,MAAOqkQ,GACO,gBAAoBlE,EAAgBnP,SAAU,CAC5D9uP,SAAUA,EACVlC,MAAOskQ,IAEX,CAOA,SAASE,EAAO9lM,GACd,IAAI,SACFx8D,EAAQ,SACR4jB,GACE44C,EACJ,OAhyBOmjM,EAgyBU4C,EAAyBviQ,GAAW4jB,EACvD,CAsB4B,IAAIif,SAAQ,SACP,YAgHjC,SAAS0/N,EAAyBviQ,EAAU4jD,QACvB,IAAfA,IACFA,EAAa,IAEf,IAAIjB,EAAS,GAoCb,OAnCA,WAAer8C,QAAQtG,GAAU,CAAC0hF,EAASt8E,KACzC,IAAmB,iBAAqBs8E,GAGtC,OAEF,IAAI8gL,EAAW,IAAI5+M,EAAYx+C,GAC/B,GAAIs8E,EAAQhgF,OAAS,WAGnB,YADAihD,EAAO5jD,KAAK0kB,MAAMk/B,EAAQ4/M,EAAyB7gL,EAAQ9gF,MAAMZ,SAAUwiQ,IAG3E9gL,EAAQhgF,OAASogQ,IAAmQ,SAAiB,GACpSpgL,EAAQ9gF,MAAMwE,OAAUs8E,EAAQ9gF,MAAMZ,WAA0H,SAAiB,GACpL,IAAI8jD,EAAQ,CACVv0C,GAAImyE,EAAQ9gF,MAAM2O,IAAMizP,EAASlgP,KAAK,KACtC0hC,cAAe09B,EAAQ9gF,MAAMojD,cAC7B09B,QAASA,EAAQ9gF,MAAM8gF,QACvB76C,UAAW66C,EAAQ9gF,MAAMimC,UACzBzhC,MAAOs8E,EAAQ9gF,MAAMwE,MACrBgE,KAAMs4E,EAAQ9gF,MAAMwI,KACpBq5P,OAAQ/gL,EAAQ9gF,MAAM6hQ,OACtB7nN,OAAQ8mC,EAAQ9gF,MAAMg6C,OACtBymN,aAAc3/K,EAAQ9gF,MAAMygQ,aAC5Bt7N,cAAe27C,EAAQ9gF,MAAMmlC,cAC7B28N,iBAAiD,MAA/BhhL,EAAQ9gF,MAAMmlC,eAAuD,MAA9B27C,EAAQ9gF,MAAMygQ,aACvEsB,iBAAkBjhL,EAAQ9gF,MAAM+hQ,iBAChCC,OAAQlhL,EAAQ9gF,MAAMgiQ,OACtB98N,KAAM47C,EAAQ9gF,MAAMklC,MAElB47C,EAAQ9gF,MAAMZ,WAChB8jD,EAAM9jD,SAAWuiQ,EAAyB7gL,EAAQ9gF,MAAMZ,SAAUwiQ,IAEpE7/M,EAAO5jD,KAAK+kD,EAAM,IAEbnB,CACT,sCCzwCA,IAF0Bs9I,EAEtBp6J,EAAQ,EAAQ,OAChBq6J,GAHsBD,EAGWp6J,IAHwB,kBAAPo6J,GAAoB,YAAaA,EAAMA,EAAY,QAAIA,EAK7G,SAASzM,EAAgB3zK,EAAKjiB,EAAKE,GAYjC,OAXIF,KAAOiiB,EACTpiB,OAAOg5C,eAAe52B,EAAKjiB,EAAK,CAC9BE,MAAOA,EACP82C,YAAY,EACZD,cAAc,EACdD,UAAU,IAGZ70B,EAAIjiB,GAAOE,EAGN+hB,CACT,CAQA,IAAI2xI,IAAiC,qBAAXrvJ,SAA0BA,OAAO/D,WAAY+D,OAAO/D,SAASmB,eAgGvFuf,EAAOC,QA/FP,SAAwB8jP,EAAoBC,EAA2BnyB,GACrE,GAAkC,oBAAvBkyB,EACT,MAAM,IAAIz7O,MAAM,iDAGlB,GAAyC,oBAA9B07O,EACT,MAAM,IAAI17O,MAAM,wDAGlB,GAAgC,qBAArBupN,GAAgE,oBAArBA,EACpD,MAAM,IAAIvpN,MAAM,mEAOlB,OAAO,SAAcgmO,GACnB,GAAgC,oBAArBA,EACT,MAAM,IAAIhmO,MAAM,sDAGlB,IACI4E,EADA+2O,EAAmB,GAGvB,SAASC,IACPh3O,EAAQ62O,EAAmBE,EAAiBvhQ,KAAI,SAAU6kJ,GACxD,OAAOA,EAASzlJ,KAClB,KAEIqiQ,EAAWzxG,UACbsxG,EAA0B92O,GACjB2kN,IACT3kN,EAAQ2kN,EAAiB3kN,GAE7B,CAEA,IAAIi3O,EAEJ,SAAU9oE,GA9Cd,IAAwB90J,EAAUC,EAiD5B,SAAS29N,IACP,OAAO9oE,EAAe12K,MAAMC,KAAML,YAAcK,IAClD,CAnD4B4hB,EA+CD60J,GA/CT90J,EA+CH49N,GA9CVvlQ,UAAYD,OAAO6yB,OAAOgV,EAAW5nC,WAC9C2nC,EAAS3nC,UAAU6nC,YAAcF,EACjCA,EAASK,UAAYJ,EAoDjB29N,EAAWxwB,KAAO,WAChB,OAAOzmN,CACT,EAEAi3O,EAAWvwB,OAAS,WAClB,GAAIuwB,EAAWzxG,UACb,MAAM,IAAIpqI,MAAM,oFAGlB,IAAI87O,EAAgBl3O,EAGpB,OAFAA,OAAQ1P,EACRymP,EAAmB,GACZG,CACT,EAEA,IAAIz0O,EAASw0O,EAAWvlQ,UAqBxB,OAnBA+wB,EAAOo+L,0BAA4B,WACjCk2C,EAAiBhkQ,KAAK2kB,MACtBs/O,GACF,EAEAv0O,EAAOqhM,mBAAqB,WAC1BkzC,GACF,EAEAv0O,EAAOilM,qBAAuB,WAC5B,IAAItuN,EAAQ29P,EAAiBjkQ,QAAQ4kB,MACrCq/O,EAAiBn/J,OAAOx+F,EAAO,GAC/B49P,GACF,EAEAv0O,EAAOiY,OAAS,WACd,OAAOw5J,EAAe3gM,cAAc6tP,EAAkB1pO,KAAK9iB,MAC7D,EAEOqiQ,CACT,CA9CA,CA8CEp9N,EAAMm6J,eAMR,OAJAxM,EAAgByvE,EAAY,cAAe,cA1E7C,SAAwB7V,GACtB,OAAOA,EAAiBz9O,aAAey9O,EAAiB9kP,MAAQ,WAClE,CAwE6D66P,CAAe/V,GAAoB,KAE9F55D,EAAgByvE,EAAY,YAAazxG,GAElCyxG,CACT,CACF,yBC1HA,IAAiDr+O,IASxC,SAASw+O,GAClB,OAAgB,SAAUn1E,GAEhB,IAAIo1E,EAAmB,CAAC,EAGxB,SAAS,EAAoBC,GAG5B,GAAGD,EAAiBC,GACnB,OAAOD,EAAiBC,GAAUvkP,QAGnC,IAAID,EAASukP,EAAiBC,GAAY,CACzCrmQ,EAAGqmQ,EACH9uN,GAAG,EACHz1B,QAAS,CAAC,GAUX,OANAkvK,EAAQq1E,GAAUzlQ,KAAKihB,EAAOC,QAASD,EAAQA,EAAOC,QAAS,GAG/DD,EAAO01B,GAAI,EAGJ11B,EAAOC,OACf,CAyDA,OArDA,EAAoBimB,EAAIipJ,EAGxB,EAAoBjvL,EAAIqkQ,EAGxB,EAAoB7kQ,EAAI,SAASugB,EAASzW,EAAMi7P,GAC3C,EAAoBp+P,EAAE4Z,EAASzW,IAClC7K,OAAOg5C,eAAe13B,EAASzW,EAAM,CAAEssC,YAAY,EAAMpoB,IAAK+2O,GAEhE,EAGA,EAAoBplQ,EAAI,SAAS4gB,GACX,qBAAX43B,QAA0BA,OAAOu9D,aAC1Cz2G,OAAOg5C,eAAe13B,EAAS43B,OAAOu9D,YAAa,CAAEp2G,MAAO,WAE7DL,OAAOg5C,eAAe13B,EAAS,aAAc,CAAEjhB,OAAO,GACvD,EAOA,EAAoBG,EAAI,SAASH,EAAO+S,GAEvC,GADU,EAAPA,IAAU/S,EAAQ,EAAoBA,IAC/B,EAAP+S,EAAU,OAAO/S,EACpB,GAAW,EAAP+S,GAA8B,kBAAV/S,GAAsBA,GAASA,EAAMi/E,WAAY,OAAOj/E,EAChF,IAAI26H,EAAKh7H,OAAO6yB,OAAO,MAGvB,GAFA,EAAoBnyB,EAAEs6H,GACtBh7H,OAAOg5C,eAAegiF,EAAI,UAAW,CAAE7jF,YAAY,EAAM92C,MAAOA,IACtD,EAAP+S,GAA4B,iBAAT/S,EAAmB,IAAI,IAAIF,KAAOE,EAAO,EAAoBU,EAAEi6H,EAAI76H,EAAK,SAASA,GAAO,OAAOE,EAAMF,EAAM,EAAEwmB,KAAK,KAAMxmB,IAC9I,OAAO66H,CACR,EAGA,EAAoBv6H,EAAI,SAAS4gB,GAChC,IAAIykP,EAASzkP,GAAUA,EAAOi+D,WAC7B,WAAwB,OAAOj+D,EAAgB,OAAG,EAClD,WAA8B,OAAOA,CAAQ,EAE9C,OADA,EAAoBtgB,EAAE+kQ,EAAQ,IAAKA,GAC5BA,CACR,EAGA,EAAoBp+P,EAAI,SAASklD,EAAQ7M,GAAY,OAAO//C,OAAOC,UAAUb,eAAegB,KAAKwsD,EAAQ7M,EAAW,EAGpH,EAAoBx6B,EAAI,GAIjB,EAAoB,EAAoB1kB,EAAI,yBACnD,CApFM,CAsFN,CAEJ,yBAKA,SAAUwgB,EAAQ,EAAqB,GAE7C,aACA,EAAoB3gB,EAAE,GACD,IAGbk5C,EAHiBmsN,EAAqC,EAAiC,SAE3FrrN,GACId,EAAgB,SAAU74C,EAAGo3B,GAI7B,OAHAyhB,EAAgB55C,OAAOgoC,gBAClB,CAAEC,UAAW,cAAgBpoC,OAAS,SAAUkB,EAAGo3B,GAAKp3B,EAAEknC,UAAY9P,CAAG,GAC1E,SAAUp3B,EAAGo3B,GAAK,IAAK,IAAI5S,KAAK4S,EAAOA,EAAE/4B,eAAemmB,KAAIxkB,EAAEwkB,GAAK4S,EAAE5S,GAAI,EACtEq0B,EAAc74C,EAAGo3B,EAC5B,EACO,SAAUp3B,EAAGo3B,GAEhB,SAASwiB,IAAO10B,KAAK6hB,YAAc/mC,CAAG,CADtC64C,EAAc74C,EAAGo3B,GAEjBp3B,EAAEd,UAAkB,OAANk4B,EAAan4B,OAAO6yB,OAAOsF,IAAMwiB,EAAG16C,UAAYk4B,EAAEl4B,UAAW,IAAI06C,EACnF,GAEAmqC,EAAgD,WAShD,OARAA,EAAW9kF,OAAO+lB,QAAU,SAASvlB,GACjC,IAAK,IAAIK,EAAGrB,EAAI,EAAGiB,EAAImlB,UAAUnmB,OAAQD,EAAIiB,EAAGjB,IAE5C,IAAK,IAAI+lB,KADT1kB,EAAI+kB,UAAUpmB,GACOQ,OAAOC,UAAUb,eAAegB,KAAKS,EAAG0kB,KACzD/kB,EAAE+kB,GAAK1kB,EAAE0kB,IAEjB,OAAO/kB,CACX,EACOskF,EAAS9+D,MAAMC,KAAML,UAChC,EACIogP,EAA4C,SAAUnlQ,EAAGN,GACzD,IAAIC,EAAI,CAAC,EACT,IAAK,IAAI+kB,KAAK1kB,EAAOb,OAAOC,UAAUb,eAAegB,KAAKS,EAAG0kB,IAAMhlB,EAAEc,QAAQkkB,GAAK,IAC9E/kB,EAAE+kB,GAAK1kB,EAAE0kB,IACb,GAAS,MAAL1kB,GAAqD,oBAAjCb,OAAOw5C,sBACtB,KAAIh6C,EAAI,EAAb,IAAgB+lB,EAAIvlB,OAAOw5C,sBAAsB34C,GAAIrB,EAAI+lB,EAAE9lB,OAAQD,IAC3De,EAAEc,QAAQkkB,EAAE/lB,IAAM,GAAKQ,OAAOC,UAAUqiB,qBAAqBliB,KAAKS,EAAG0kB,EAAE/lB,MACvEgB,EAAE+kB,EAAE/lB,IAAMqB,EAAE0kB,EAAE/lB,IAF4B,CAItD,OAAOgB,CACX,EAiCA,SAASylQ,IACL,SAAU7wO,UAAU0zD,eAAgB1zD,UAAU0zD,aAAao9K,aAC/D,CA/B0B,qBAAXxhQ,cAIoBma,IAA3BuW,UAAU0zD,eACV1zD,UAAU0zD,aAAe,CAAC,QAKcjqE,IAAxCuW,UAAU0zD,aAAao9K,eACvB9wO,UAAU0zD,aAAao9K,aAAe,SAAUC,GAE5C,IAAID,EAAe9wO,UAAU8wO,cACzB9wO,UAAUgxO,oBACVhxO,UAAUixO,iBACVjxO,UAAUkxO,eAGd,OAAKJ,EAIE,IAAI9gO,SAAQ,SAAUC,EAASC,GAClC4gO,EAAa9lQ,KAAKg1B,UAAW+wO,EAAa9gO,EAASC,EACvD,IALWF,QAAQE,OAAO,IAAI3b,MAAM,mDAMxC,IAMR,IAAI48O,EAAwB,SAAUlpN,GAElC,SAASkpN,EAAOpjQ,GACZ,IAAIk0B,EAAQgmB,EAAOj9C,KAAK6lB,KAAM9iB,IAAU8iB,KAQxC,OAPAoR,EAAM6zD,OAAS,KACf7zD,EAAM8zD,IAAM,KACZ9zD,EAAMmvO,mBAAqB,EAC3BnvO,EAAMovO,WAAY,EAClBpvO,EAAM9I,MAAQ,CACVm4O,cAAc,GAEXrvO,CACX,CA6OA,OAxPAqjB,EAAU6rN,EAAQlpN,GAYlBkpN,EAAOtmQ,UAAUqvN,kBAAoB,WACjC,IAAe/gM,EAANtI,KAAiBsI,MAAOprB,EAAxB8iB,KAAmC9iB,MAC5C8iB,KAAKwgP,WAAY,EACZR,KAIA13O,EAAMm4O,cACPzgP,KAAK0gP,mBAELxjQ,EAAMZ,UAAqC,mBAAlBY,EAAMZ,UAC/B8jB,QAAQsN,KAAK,gCAPbxwB,EAAMyjQ,iBAAiB,6BAS/B,EACAL,EAAOtmQ,UAAUoyN,mBAAqB,SAAU3wB,GAC5C,IAAIv+L,EAAQ8iB,KAAK9iB,MACjB,GAAK8iQ,IAAL,CAIA,IAAIY,EAA0Bp7O,KAAKC,UAAUg2K,EAAUolE,oBACnDr7O,KAAKC,UAAUvoB,EAAM2jQ,kBACrBC,EAA0Bt7O,KAAKC,UAAUg2K,EAAUslE,oBACnDv7O,KAAKC,UAAUvoB,EAAM6jQ,kBACrBC,EAA4BvlE,EAAUwlE,qBAAuB/jQ,EAAM+jQ,mBACnEC,EAA6BzlE,EAAU0lE,sBAAwBjkQ,EAAMikQ,qBACrEL,GACAE,GACAE,KACAlhP,KAAKilE,OAAS,KACdjlE,KAAKklE,IAAM,OAEX07K,GAA2BE,KAC3B9gP,KAAKohP,iBACLphP,KAAK0gP,mBAfT,MAFIxjQ,EAAMyjQ,iBAAiB,6BAmB/B,EACAL,EAAOtmQ,UAAUg2N,qBAAuB,WACpChwM,KAAKwgP,WAAY,EACjBxgP,KAAKohP,gBACT,EACAd,EAAOe,gBAAkB,SAAUvtG,GAC3BA,IACIA,EAAOwtG,gBAAkBxtG,EAAOytG,gBAChCztG,EAAOwtG,iBAAiBxjQ,KAAI,SAAUuzI,GAClCyiB,EAAO0tG,YAAYnwH,GACnBA,EAAMzrF,MACV,IACAkuG,EAAOytG,iBAAiBzjQ,KAAI,SAAUuzI,GAClCyiB,EAAO0tG,YAAYnwH,GACnBA,EAAMzrF,MACV,KAGAkuG,EAAOluG,OAGnB,EACA06M,EAAOtmQ,UAAUonQ,eAAiB,WAC9B,IAAI94O,EAAQtI,KAAKsI,MACbA,EAAMm4O,eACNH,EAAOe,gBAAgBrhP,KAAK8zI,QACxBxrI,EAAMzlB,KACNpE,OAAO8/C,IAAIkjN,gBAAgBn5O,EAAMzlB,KAG7C,EACAy9P,EAAOtmQ,UAAU0nQ,cAAgB,SAAUC,GACvC,IAAer5O,EAANtI,KAAiBsI,MAAOprB,EAAxB8iB,KAAmC9iB,MAC5C,IAAKorB,EAAMm4O,aACP,OAAO,KACX,IAAIx7K,EAASjlE,KAAK4hP,UAAUD,GAC5B,OAAQ18K,GACJA,EAAOe,UAAU9oF,EAAM2kQ,iBAAkB3kQ,EAAM4kQ,kBACvD,EACAxB,EAAOtmQ,UAAU4nQ,UAAY,SAAUD,GACnC,IAAer5O,EAANtI,KAAiBsI,MAAOprB,EAAxB8iB,KAAmC9iB,MAC5C,IAAK8iB,KAAK0gN,MACN,OAAO,KAEX,IAAKp4M,EAAMm4O,eAAiBzgP,KAAK0gN,MAAM/D,YACnC,OAAO,KACX,IAAK38M,KAAKklE,IAAK,CACX,IAAI68K,EAAc/hP,KAAK0gN,MAAMhE,WACzBslC,EAAehiP,KAAK0gN,MAAM/D,YAC9B,IAAK38M,KAAK9iB,MAAM+kQ,0BAA2B,CACvC,IAAIpyD,EAAckyD,EAAcC,EAEhCA,GADAD,EAAc7kQ,EAAM+jQ,oBAAsBjhP,KAAK0gN,MAAM/rN,aACxBk7L,EACzB3yM,EAAMikQ,qBACNa,EAAe9kQ,EAAMikQ,sBAErBY,GADAC,EAAe9kQ,EAAMikQ,qBACQtxD,EAErC,CACA7vL,KAAKilE,OAASvqF,SAASmB,cAAc,UACrCmkB,KAAKilE,OAAO9nF,OAAkC,OAAzBwkQ,QAA0D,IAAzBA,OAAkC,EAASA,EAAqBxkQ,QAAU4kQ,EAChI/hP,KAAKilE,OAAO7nF,QAAmC,OAAzBukQ,QAA0D,IAAzBA,OAAkC,EAASA,EAAqBvkQ,SAAW4kQ,EAClIhiP,KAAKklE,IAAMllE,KAAKilE,OAAO1yD,WAAW,KACtC,CACA,IAAe2yD,EAANllE,KAAeklE,IAAKD,EAApBjlE,KAAgCilE,OAkBzC,OAjBIC,GAAOD,IAEPA,EAAO9nF,OAAkC,OAAzBwkQ,QAA0D,IAAzBA,OAAkC,EAASA,EAAqBxkQ,QAAU8nF,EAAO9nF,MAClI8nF,EAAO7nF,QAAmC,OAAzBukQ,QAA0D,IAAzBA,OAAkC,EAASA,EAAqBvkQ,SAAW6nF,EAAO7nF,OAEhIF,EAAMglQ,WACNh9K,EAAIi9K,UAAUl9K,EAAO9nF,MAAO,GAC5B+nF,EAAIiwG,OAAO,EAAG,IAElBjwG,EAAIk9K,sBAAwBllQ,EAAMmlQ,eAClCn9K,EAAIo9K,UAAUtiP,KAAK0gN,MAAO,EAAG,GAA6B,OAAzBihC,QAA0D,IAAzBA,OAAkC,EAASA,EAAqBxkQ,QAAU8nF,EAAO9nF,OAAiC,OAAzBwkQ,QAA0D,IAAzBA,OAAkC,EAASA,EAAqBvkQ,SAAW6nF,EAAO7nF,QAE1QF,EAAMglQ,WACNh9K,EAAIiwG,OAAO,EAAG,GACdjwG,EAAIi9K,WAAWl9K,EAAO9nF,MAAO,KAG9B8nF,CACX,EACAq7K,EAAOtmQ,UAAU0mQ,iBAAmB,WAChC,IAAItvO,EAAQpR,KACR9iB,EAAQ8iB,KAAK9iB,MACbqlQ,EAAiB,SAAU1B,EAAkBE,GAC7C,IAAIb,EAAc,CACdx/B,MAAmC,qBAArBqgC,GAAmCA,GAEjD7jQ,EAAMykF,QACNu+K,EAAYv+K,MACoB,qBAArBk/K,GAAmCA,GAElDzvO,EAAMmvO,qBACN,IAAIiC,EAAuBpxO,EAAMmvO,mBACjCpxO,UAAU0zD,aACLo9K,aAAaC,GACb7xO,MAAK,SAAUylI,GACZ1iI,EAAMovO,WAAagC,IAAyBpxO,EAAMmvO,mBAClDD,EAAOe,gBAAgBvtG,GAGvB1iI,EAAMqxO,gBAAgB,KAAM3uG,EAEpC,IACK1rH,OAAM,SAAU9tC,GACjB82B,EAAMqxO,gBAAgBnoQ,EAC1B,GACJ,EACA,GAAI,iBAAkB60B,UAClBozO,EAAerlQ,EAAM2jQ,iBAAkB3jQ,EAAM6jQ,sBAE5C,CACD,IAAI2B,EAAmB,SAAU72P,GAAM,MAAO,CAAG62C,SAAU,CAAC,CAAEigN,SAAU92P,IAAU,EAC9E+2P,EAAyB,SAAUC,GACnC,IAAIlxK,EAAWkxK,EAAWlxK,SAC1B,MAAwB,kBAAbA,EACAA,EAEP/3F,MAAMC,QAAQ83F,IAAaA,EAASn4F,OAAS,EACtCm4F,EAAS,GAEI,kBAAbA,GAAyBA,EAASmxK,MAClCnxK,EAASmxK,MAEb,IACX,EAEAC,iBAAiBC,YAAW,SAAUC,GAClC,IAAIC,EAAc,KACdC,EAAc,KAClBF,EAAQrgQ,SAAQ,SAAUyH,GACF,UAAhBA,EAAO8F,KACP+yP,EAAc74P,EAAOwB,GAEA,UAAhBxB,EAAO8F,OACZgzP,EAAc94P,EAAOwB,GAE7B,IACA,IAAIu3P,EAAgBR,EAAuB1lQ,EAAM2jQ,kBAC7CuC,IACAF,EAAcE,GAElB,IAAIC,EAAgBT,EAAuB1lQ,EAAM6jQ,kBAC7CsC,IACAF,EAAcE,GAElBd,EAAeG,EAAiBQ,GAAcR,EAAiBS,GACnE,GACJ,CACJ,EACA7C,EAAOtmQ,UAAUyoQ,gBAAkB,SAAUx8O,EAAK6tI,GAC9C,IAAI52J,EAAQ8iB,KAAK9iB,MACjB,GAAI+oB,IAAQ6tI,EAGR,OAFA9zI,KAAK6iB,SAAS,CAAE49N,cAAc,SAC9BvjQ,EAAMyjQ,iBAAiB16O,GAG3BjG,KAAK8zI,OAASA,EACd,IACQ9zI,KAAK0gN,QACL1gN,KAAK0gN,MAAM4iC,UAAYxvG,GAE3B9zI,KAAK6iB,SAAS,CAAE49N,cAAc,GAClC,CACA,MAAO/8P,GACHsc,KAAK6iB,SAAS,CACV49N,cAAc,EACd59P,IAAKpE,OAAO8/C,IAAIglN,gBAAgBzvG,IAExC,CACA52J,EAAMsmQ,YAAY1vG,EACtB,EACAwsG,EAAOtmQ,UAAUgpC,OAAS,WACtB,IAAI5R,EAAQpR,KACGsI,EAANtI,KAAiBsI,MAAOprB,EAAxB8iB,KAAmC9iB,MACxCykF,EAAQzkF,EAAMykF,MAAoEwxJ,GAAjCj2O,EAAM+kQ,0BAAqD/kQ,EAAMi2O,yBAA0Z+uB,GAAnXhlQ,EAAMsmQ,YAAgCtmQ,EAAMyjQ,iBAAqCzjQ,EAAM2kQ,iBAAsC3kQ,EAAM4kQ,kBAAwC5kQ,EAAM+jQ,mBAA0C/jQ,EAAMikQ,oBAAwCjkQ,EAAM2jQ,iBAAqC3jQ,EAAM6jQ,iBAAmC7jQ,EAAMmlQ,eAA2BnlQ,EAAMglQ,UAAUz6N,EAAKvqC,EAAML,MAAOA,OAAe,IAAP4qC,EAAgB,CAAC,EAAIA,EAAInrC,EAAWY,EAAMZ,SAAUI,EAAOqjQ,EAAO7iQ,EAAO,CAAC,QAAS,4BAA6B,0BAA2B,cAAe,mBAAoB,mBAAoB,oBAAqB,qBAAsB,sBAAuB,mBAAoB,mBAAoB,iBAAkB,WAAY,QAAS,aACp5BumQ,EAAavB,EAAWrjL,EAASA,EAAS,CAAC,EAAGhiF,GAAQ,CAAEs9F,WAAYt9F,EAAMs9F,WAAa,IAAM,gBAAmBt9F,EAChH6mQ,EAAgB,CAChBhC,cAAe1hP,KAAK0hP,cAAchhP,KAAKV,OAE3C,OAAQ8/O,EAAkD,cAAEA,EAA6C,SAAG,KACxGA,EAAkD,cAAE,QAASjhL,EAAS,CAAE0iJ,UAAU,EAAM4R,wBAAyBA,EAAyBtwO,IAAKylB,EAAMzlB,IAAK2+N,OAAQ7/I,EAAO0zJ,aAAa,EAAMh1O,IAAK,SAAUA,GACnM+wB,EAAMsvM,MAAQrgO,CAClB,EAAGxD,MAAO4mQ,GAAc/mQ,IAC5BJ,GAAYA,EAASonQ,GAC7B,EACApD,EAAO7rK,aAAe,CAClB9S,OAAO,EACPwxJ,yBAAyB,EACzB8uB,2BAA2B,EAC3BI,gBAAgB,EAChBH,UAAU,EACVsB,YAAa,WAAgC,EAC7C7C,iBAAkB,WAAgC,EAClDkB,iBAAkB,aAClBC,kBAAmB,KAEhBxB,CACX,CA1P2B,CA0PzBR,EAA8C,WACnB,EAA6B,QAAI,CAGvD,EAED,MAKA,SAAU1kP,EAAQC,GAExBD,EAAOC,QAAUqkP,CAEV,IAEc,OACrB,EA7bEtkP,EAAOC,QAAU6F,EAAQ,EAAQ,4CCOtB,IAAInE,EAAE,EAAQ,OAASiB,EAAEi1B,OAAOG,IAAI,iBAAiBtC,EAAEmC,OAAOG,IAAI,kBAAkB9R,EAAEvnC,OAAOC,UAAUb,eAAeqB,EAAEuiB,EAAEsvL,mDAAmD+e,kBAAkB9rM,EAAE,CAACplB,KAAI,EAAGmG,KAAI,EAAGsjQ,QAAO,EAAGC,UAAS,GAChP,SAAShzN,EAAEt1C,EAAEX,EAAEisC,GAAG,IAAI1U,EAAEp3B,EAAE,CAAC,EAAER,EAAE,KAAKoF,EAAE,KAAiF,IAAIwyB,UAAhF,IAAS0U,IAAItsC,EAAE,GAAGssC,QAAG,IAASjsC,EAAET,MAAMI,EAAE,GAAGK,EAAET,UAAK,IAASS,EAAE0F,MAAMX,EAAE/E,EAAE0F,KAAc1F,EAAE2mC,EAAEnnC,KAAKQ,EAAEu3B,KAAK5S,EAAEnmB,eAAe+4B,KAAKp3B,EAAEo3B,GAAGv3B,EAAEu3B,IAAI,GAAG52B,GAAGA,EAAEm5F,aAAa,IAAIviE,KAAKv3B,EAAEW,EAAEm5F,kBAAe,IAAS35F,EAAEo3B,KAAKp3B,EAAEo3B,GAAGv3B,EAAEu3B,IAAI,MAAM,CAACq7K,SAASvvL,EAAEhgB,KAAK1C,EAAEpB,IAAII,EAAE+F,IAAIX,EAAExC,MAAMpC,EAAEwuN,OAAO9uN,EAAEgE,QAAQ,CAAC6c,EAAQ60N,SAASp/L,EAAEz1B,EAAQwoP,IAAIjzN,EAAEv1B,EAAQyoP,KAAKlzN,oCCD7V,IAAIE,EAAEmC,OAAOG,IAAI,iBAAiB54C,EAAEy4C,OAAOG,IAAI,gBAAgB9zB,EAAE2zB,OAAOG,IAAI,kBAAkBxC,EAAEqC,OAAOG,IAAI,qBAAqB34C,EAAEw4C,OAAOG,IAAI,kBAAkB74C,EAAE04C,OAAOG,IAAI,kBAAkBj4C,EAAE83C,OAAOG,IAAI,iBAAiBnxB,EAAEgxB,OAAOG,IAAI,qBAAqB5zC,EAAEyzC,OAAOG,IAAI,kBAAkBn3B,EAAEg3B,OAAOG,IAAI,cAAcjC,EAAE8B,OAAOG,IAAI,cAAclB,EAAEe,OAAOI,SACzW,IAAIH,EAAE,CAACs1K,UAAU,WAAW,OAAM,CAAE,EAAEI,mBAAmB,WAAW,EAAED,oBAAoB,WAAW,EAAED,gBAAgB,WAAW,GAAGn2K,EAAEx4C,OAAO+lB,OAAOmyB,EAAE,CAAC,EAAE,SAASG,EAAEz3C,EAAEu3B,EAAE53B,GAAG0lB,KAAK9iB,MAAMvC,EAAEqlB,KAAKlB,QAAQoT,EAAElS,KAAKuoM,KAAKt2K,EAAEjyB,KAAK+oM,QAAQzuN,GAAG44C,CAAC,CACwI,SAASb,IAAI,CAAyB,SAASW,EAAEr4C,EAAEu3B,EAAE53B,GAAG0lB,KAAK9iB,MAAMvC,EAAEqlB,KAAKlB,QAAQoT,EAAElS,KAAKuoM,KAAKt2K,EAAEjyB,KAAK+oM,QAAQzuN,GAAG44C,CAAC,CADxPd,EAAEp4C,UAAUs6N,iBAAiB,CAAC,EACpQliL,EAAEp4C,UAAU6oC,SAAS,SAASloC,EAAEu3B,GAAG,GAAG,kBAAkBv3B,GAAG,oBAAoBA,GAAG,MAAMA,EAAE,MAAM+oB,MAAM,yHAAyH1D,KAAK+oM,QAAQL,gBAAgB1oM,KAAKrlB,EAAEu3B,EAAE,WAAW,EAAEkgB,EAAEp4C,UAAUs3P,YAAY,SAAS32P,GAAGqlB,KAAK+oM,QAAQH,mBAAmB5oM,KAAKrlB,EAAE,cAAc,EAAgB03C,EAAEr4C,UAAUo4C,EAAEp4C,UAAsF,IAAI43C,EAAEoB,EAAEh5C,UAAU,IAAIq4C,EACrfT,EAAE/P,YAAYmR,EAAET,EAAEX,EAAEQ,EAAEp4C,WAAW43C,EAAEk3K,sBAAqB,EAAG,IAAIh3K,EAAEl4C,MAAMC,QAAQg5C,EAAE94C,OAAOC,UAAUb,eAAe25C,EAAE,CAACt0C,QAAQ,MAAM8xC,EAAE,CAACp2C,KAAI,EAAGmG,KAAI,EAAGsjQ,QAAO,EAAGC,UAAS,GACtK,SAASjyN,EAAEh3C,EAAEu3B,EAAE53B,GAAG,IAAIQ,EAAEQ,EAAE,CAAC,EAAE0iB,EAAE,KAAKte,EAAE,KAAK,GAAG,MAAMwyB,EAAE,IAAIp3B,UAAK,IAASo3B,EAAE7xB,MAAMX,EAAEwyB,EAAE7xB,UAAK,IAAS6xB,EAAEh4B,MAAM8jB,EAAE,GAAGkU,EAAEh4B,KAAKg4B,EAAE2gB,EAAE14C,KAAK+3B,EAAEp3B,KAAKw1C,EAAEn3C,eAAe2B,KAAKQ,EAAER,GAAGo3B,EAAEp3B,IAAI,IAAI8rC,EAAEjnB,UAAUnmB,OAAO,EAAE,GAAG,IAAIotC,EAAEtrC,EAAEgB,SAAShC,OAAO,GAAG,EAAEssC,EAAE,CAAC,IAAI,IAAI7pB,EAAEnjB,MAAMgtC,GAAGtF,EAAE,EAAEA,EAAEsF,EAAEtF,IAAIvkB,EAAEukB,GAAG3hB,UAAU2hB,EAAE,GAAGhmC,EAAEgB,SAASygB,CAAC,CAAC,GAAGpiB,GAAGA,EAAE85F,aAAa,IAAI35F,KAAK8rC,EAAEjsC,EAAE85F,kBAAe,IAASn5F,EAAER,KAAKQ,EAAER,GAAG8rC,EAAE9rC,IAAI,MAAM,CAACyyM,SAASz8J,EAAE9yC,KAAKrD,EAAET,IAAI8jB,EAAE3d,IAAIX,EAAExC,MAAM5B,EAAEguN,OAAOx2K,EAAEt0C,QAAQ,CAChV,SAASgzC,EAAE72C,GAAG,MAAM,kBAAkBA,GAAG,OAAOA,GAAGA,EAAE4yM,WAAWz8J,CAAC,CAAoG,IAAIY,EAAE,OAAO,SAASxB,EAAEv1C,EAAEu3B,GAAG,MAAM,kBAAkBv3B,GAAG,OAAOA,GAAG,MAAMA,EAAET,IAA7K,SAAgBS,GAAG,IAAIu3B,EAAE,CAAC,IAAI,KAAK,IAAI,MAAM,MAAM,IAAIv3B,EAAEuL,QAAQ,SAAQ,SAASvL,GAAG,OAAOu3B,EAAEv3B,EAAE,GAAE,CAA+Eg7H,CAAO,GAAGh7H,EAAET,KAAKg4B,EAAEp4B,SAAS,GAAG,CAC/W,SAASk4C,EAAEr3C,EAAEu3B,EAAE53B,EAAEQ,EAAEQ,GAAG,IAAI0iB,SAASrjB,EAAK,cAAcqjB,GAAG,YAAYA,IAAErjB,EAAE,MAAK,IAAI+E,GAAE,EAAG,GAAG,OAAO/E,EAAE+E,GAAE,OAAQ,OAAOse,GAAG,IAAK,SAAS,IAAK,SAASte,GAAE,EAAG,MAAM,IAAK,SAAS,OAAO/E,EAAE4yM,UAAU,KAAKz8J,EAAE,KAAKt2C,EAAEkF,GAAE,GAAI,GAAGA,EAAE,OAAWpE,EAAEA,EAANoE,EAAE/E,GAASA,EAAE,KAAKG,EAAE,IAAIo1C,EAAExwC,EAAE,GAAG5E,EAAEg3C,EAAEx2C,IAAIhB,EAAE,GAAG,MAAMK,IAAIL,EAAEK,EAAEuL,QAAQwrC,EAAE,OAAO,KAAKM,EAAE12C,EAAE42B,EAAE53B,EAAE,IAAG,SAASK,GAAG,OAAOA,CAAC,KAAI,MAAMW,IAAIk2C,EAAEl2C,KAAKA,EADnW,SAAWX,EAAEu3B,GAAG,MAAM,CAACq7K,SAASz8J,EAAE9yC,KAAKrD,EAAEqD,KAAK9D,IAAIg4B,EAAE7xB,IAAI1F,EAAE0F,IAAInD,MAAMvC,EAAEuC,MAAMosN,OAAO3uN,EAAE2uN,OAAO,CACyQv3K,CAAEz2C,EAAEhB,IAAIgB,EAAEpB,KAAKwF,GAAGA,EAAExF,MAAMoB,EAAEpB,IAAI,IAAI,GAAGoB,EAAEpB,KAAKgM,QAAQwrC,EAAE,OAAO,KAAK/2C,IAAIu3B,EAAE72B,KAAKC,IAAI,EAAyB,GAAvBoE,EAAE,EAAE5E,EAAE,KAAKA,EAAE,IAAIA,EAAE,IAAOg3C,EAAEn3C,GAAG,IAAI,IAAIisC,EAAE,EAAEA,EAAEjsC,EAAEnB,OAAOotC,IAAI,CAC/e,IAAI7pB,EAAEjiB,EAAEo1C,EADwelyB,EACrfrjB,EAAEisC,GAAeA,GAAGlnC,GAAGsyC,EAAEh0B,EAAEkU,EAAE53B,EAAEyiB,EAAEzhB,EAAE,MAAM,GAAGyhB,EAPsU,SAAWpiB,GAAG,OAAG,OAAOA,GAAG,kBAAkBA,EAAS,KAAsC,oBAAjCA,EAAEu3C,GAAGv3C,EAAEu3C,IAAIv3C,EAAE,eAA0CA,EAAE,IAAI,CAO5bk3C,CAAEl3C,GAAG,oBAAoBoiB,EAAE,IAAIpiB,EAAEoiB,EAAE5iB,KAAKQ,GAAGisC,EAAE,IAAI5oB,EAAErjB,EAAEozB,QAAQinB,MAA6Bt1C,GAAGsyC,EAA1Bh0B,EAAEA,EAAE5jB,MAA0B83B,EAAE53B,EAAtByiB,EAAEjiB,EAAEo1C,EAAElyB,EAAE4oB,KAAkBtrC,QAAQ,GAAG,WAAW0iB,EAAE,MAAMkU,EAAErP,OAAOloB,GAAG+oB,MAAM,mDAAmD,oBAAoBwO,EAAE,qBAAqBn4B,OAAOiC,KAAKrB,GAAGikB,KAAK,MAAM,IAAIsT,GAAG,6EAA6E,OAAOxyB,CAAC,CACzZ,SAAS+xC,EAAE92C,EAAEu3B,EAAE53B,GAAG,GAAG,MAAMK,EAAE,OAAOA,EAAE,IAAIG,EAAE,GAAGQ,EAAE,EAAmD,OAAjD02C,EAAEr3C,EAAEG,EAAE,GAAG,IAAG,SAASH,GAAG,OAAOu3B,EAAE/3B,KAAKG,EAAEK,EAAEW,IAAI,IAAUR,CAAC,CAAC,SAASw3C,EAAE33C,GAAG,IAAI,IAAIA,EAAEopQ,QAAQ,CAAC,IAAI7xO,EAAEv3B,EAAEqpQ,SAAQ9xO,EAAEA,KAAM7D,MAAK,SAAS6D,GAAM,IAAIv3B,EAAEopQ,UAAU,IAAIppQ,EAAEopQ,UAAQppQ,EAAEopQ,QAAQ,EAAEppQ,EAAEqpQ,QAAQ9xO,EAAC,IAAE,SAASA,GAAM,IAAIv3B,EAAEopQ,UAAU,IAAIppQ,EAAEopQ,UAAQppQ,EAAEopQ,QAAQ,EAAEppQ,EAAEqpQ,QAAQ9xO,EAAC,KAAI,IAAIv3B,EAAEopQ,UAAUppQ,EAAEopQ,QAAQ,EAAEppQ,EAAEqpQ,QAAQ9xO,EAAE,CAAC,GAAG,IAAIv3B,EAAEopQ,QAAQ,OAAOppQ,EAAEqpQ,QAAQz+M,QAAQ,MAAM5qD,EAAEqpQ,OAAQ,CAC5Z,IAAIzyN,EAAE,CAAC/yC,QAAQ,MAAMq8G,EAAE,CAAC4gE,WAAW,MAAM1tI,EAAE,CAAC27K,uBAAuBn4K,EAAEknK,wBAAwB59F,EAAEuwG,kBAAkBt4K,GAAGz3B,EAAQq7I,SAAS,CAAC54J,IAAI2zC,EAAE7uC,QAAQ,SAASjI,EAAEu3B,EAAE53B,GAAGm3C,EAAE92C,GAAE,WAAWu3B,EAAEnS,MAAMC,KAAKL,UAAU,GAAErlB,EAAE,EAAE8Z,MAAM,SAASzZ,GAAG,IAAIu3B,EAAE,EAAuB,OAArBuf,EAAE92C,GAAE,WAAWu3B,GAAG,IAAUA,CAAC,EAAEyuG,QAAQ,SAAShmI,GAAG,OAAO82C,EAAE92C,GAAE,SAASA,GAAG,OAAOA,CAAC,KAAI,EAAE,EAAEg8J,KAAK,SAASh8J,GAAG,IAAI62C,EAAE72C,GAAG,MAAM+oB,MAAM,yEAAyE,OAAO/oB,CAAC,GAAG0gB,EAAQ8nB,UAAUiP,EAAE/2B,EAAQ60N,SAAS5wN,EACnejE,EAAQg1N,SAAS51O,EAAE4gB,EAAQihL,cAActpJ,EAAE33B,EAAQi1N,WAAW1/L,EAAEv1B,EAAQk1N,SAAS/wO,EAAE6b,EAAQgxL,mDAAmDt+J,EAC9I1yB,EAAQu+E,aAAa,SAASj/F,EAAEu3B,EAAE53B,GAAG,GAAG,OAAOK,QAAG,IAASA,EAAE,MAAM+oB,MAAM,iFAAiF/oB,EAAE,KAAK,IAAIG,EAAEy3C,EAAE,CAAC,EAAE53C,EAAEuC,OAAO5B,EAAEX,EAAET,IAAI8jB,EAAErjB,EAAE0F,IAAIX,EAAE/E,EAAE2uN,OAAO,GAAG,MAAMp3L,EAAE,CAAoE,QAAnE,IAASA,EAAE7xB,MAAM2d,EAAEkU,EAAE7xB,IAAIX,EAAEozC,EAAEt0C,cAAS,IAAS0zB,EAAEh4B,MAAMoB,EAAE,GAAG42B,EAAEh4B,KAAQS,EAAEqD,MAAMrD,EAAEqD,KAAKy2F,aAAa,IAAI7tD,EAAEjsC,EAAEqD,KAAKy2F,aAAa,IAAI13E,KAAKmV,EAAE2gB,EAAE14C,KAAK+3B,EAAEnV,KAAKuzB,EAAEn3C,eAAe4jB,KAAKjiB,EAAEiiB,QAAG,IAASmV,EAAEnV,SAAI,IAAS6pB,EAAEA,EAAE7pB,GAAGmV,EAAEnV,GAAG,CAAC,IAAIA,EAAE4C,UAAUnmB,OAAO,EAAE,GAAG,IAAIujB,EAAEjiB,EAAEwB,SAAShC,OAAO,GAAG,EAAEyiB,EAAE,CAAC6pB,EAAEhtC,MAAMmjB,GACrf,IAAI,IAAIukB,EAAE,EAAEA,EAAEvkB,EAAEukB,IAAIsF,EAAEtF,GAAG3hB,UAAU2hB,EAAE,GAAGxmC,EAAEwB,SAASsqC,CAAC,CAAC,MAAM,CAAC2mK,SAASz8J,EAAE9yC,KAAKrD,EAAEqD,KAAK9D,IAAIoB,EAAE+E,IAAI2d,EAAE9gB,MAAMpC,EAAEwuN,OAAO5pN,EAAE,EAAE2b,EAAQ4oP,cAAc,SAAStpQ,GAAqK,OAAlKA,EAAE,CAAC4yM,SAASpyM,EAAE6rN,cAAcrsN,EAAEupQ,eAAevpQ,EAAEwpQ,aAAa,EAAE/Y,SAAS,KAAKpB,SAAS,KAAKoa,cAAc,KAAKC,YAAY,OAAQjZ,SAAS,CAAC79C,SAAShzM,EAAEw3B,SAASp3B,GAAUA,EAAEqvP,SAASrvP,CAAC,EAAE0gB,EAAQxf,cAAc81C,EAAEt2B,EAAQipP,cAAc,SAAS3pQ,GAAG,IAAIu3B,EAAEyf,EAAEjxB,KAAK,KAAK/lB,GAAY,OAATu3B,EAAEl0B,KAAKrD,EAASu3B,CAAC,EAAE7W,EAAQkpP,UAAU,WAAW,MAAM,CAAC/lQ,QAAQ,KAAK,EAC9d6c,EAAQynO,WAAW,SAASnoP,GAAG,MAAM,CAAC4yM,SAAStrL,EAAE+gB,OAAOroC,EAAE,EAAE0gB,EAAQw+E,eAAeroD,EAAEn2B,EAAQ+mB,KAAK,SAASznC,GAAG,MAAM,CAAC4yM,SAASp8J,EAAE6iI,SAAS,CAAC+vF,SAAS,EAAEC,QAAQrpQ,GAAGogJ,MAAMzoG,EAAE,EAAEj3B,EAAQ8nC,KAAK,SAASxoD,EAAEu3B,GAAG,MAAM,CAACq7K,SAAStxL,EAAEje,KAAKrD,EAAEu6F,aAAQ,IAAShjE,EAAE,KAAKA,EAAE,EAAE7W,EAAQmpP,gBAAgB,SAAS7pQ,GAAG,IAAIu3B,EAAE2oF,EAAE4gE,WAAW5gE,EAAE4gE,WAAW,CAAC,EAAE,IAAI9gL,GAAG,CAAC,QAAQkgH,EAAE4gE,WAAWvpJ,CAAC,CAAC,EAAE7W,EAAQopP,aAAa,WAAW,MAAM/gP,MAAM,2DAA4D,EAC1crI,EAAQ7P,YAAY,SAAS7Q,EAAEu3B,GAAG,OAAOqf,EAAE/yC,QAAQgN,YAAY7Q,EAAEu3B,EAAE,EAAE7W,EAAQgvM,WAAW,SAAS1vN,GAAG,OAAO42C,EAAE/yC,QAAQ6rN,WAAW1vN,EAAE,EAAE0gB,EAAQsvM,cAAc,WAAW,EAAEtvM,EAAQuvM,iBAAiB,SAASjwN,GAAG,OAAO42C,EAAE/yC,QAAQosN,iBAAiBjwN,EAAE,EAAE0gB,EAAQna,UAAU,SAASvG,EAAEu3B,GAAG,OAAOqf,EAAE/yC,QAAQ0C,UAAUvG,EAAEu3B,EAAE,EAAE7W,EAAQ2vM,MAAM,WAAW,OAAOz5K,EAAE/yC,QAAQwsN,OAAO,EAAE3vM,EAAQivM,oBAAoB,SAAS3vN,EAAEu3B,EAAE53B,GAAG,OAAOi3C,EAAE/yC,QAAQ8rN,oBAAoB3vN,EAAEu3B,EAAE53B,EAAE,EAC7b+gB,EAAQkvM,mBAAmB,SAAS5vN,EAAEu3B,GAAG,OAAOqf,EAAE/yC,QAAQ+rN,mBAAmB5vN,EAAEu3B,EAAE,EAAE7W,EAAQmvM,gBAAgB,SAAS7vN,EAAEu3B,GAAG,OAAOqf,EAAE/yC,QAAQgsN,gBAAgB7vN,EAAEu3B,EAAE,EAAE7W,EAAQovM,QAAQ,SAAS9vN,EAAEu3B,GAAG,OAAOqf,EAAE/yC,QAAQisN,QAAQ9vN,EAAEu3B,EAAE,EAAE7W,EAAQqvM,WAAW,SAAS/vN,EAAEu3B,EAAE53B,GAAG,OAAOi3C,EAAE/yC,QAAQksN,WAAW/vN,EAAEu3B,EAAE53B,EAAE,EAAE+gB,EAAQjb,OAAO,SAASzF,GAAG,OAAO42C,EAAE/yC,QAAQ4B,OAAOzF,EAAE,EAAE0gB,EAAQ5d,SAAS,SAAS9C,GAAG,OAAO42C,EAAE/yC,QAAQf,SAAS9C,EAAE,EAAE0gB,EAAQ0vM,qBAAqB,SAASpwN,EAAEu3B,EAAE53B,GAAG,OAAOi3C,EAAE/yC,QAAQusN,qBAAqBpwN,EAAEu3B,EAAE53B,EAAE,EAC/e+gB,EAAQwvM,cAAc,WAAW,OAAOt5K,EAAE/yC,QAAQqsN,eAAe,EAAExvM,EAAQ4X,QAAQ,6CCtBjF7X,EAAOC,QAAU,EAAjB,2CCAAD,EAAOC,QAAU,EAAjB,+BCHkL,SAAS/gB,GAAG,aAAa,SAASC,EAAED,EAAEC,GAAGD,EAAEoqQ,OAAOnqQ,EAAED,EAAEN,UAAUD,OAAO6yB,OAAOryB,EAAEP,UAAU,CAAC6nC,YAAY,CAACznC,MAAME,EAAE42C,YAAW,EAAGF,UAAS,EAAGC,cAAa,IAAK,CAAC,SAASx2C,EAAEH,EAAEC,GAAGR,OAAOg5C,eAAe/yB,KAAK,OAAO,CAAC5lB,MAAME,EAAE42C,YAAW,IAAK32C,GAAGA,EAAEf,QAAQO,OAAOg5C,eAAe/yB,KAAK,OAAO,CAAC5lB,MAAMG,EAAE22C,YAAW,GAAI,CAAC,SAAS12C,EAAEF,EAAEC,EAAEE,GAAGD,EAAEkqQ,OAAOvqQ,KAAK6lB,KAAK,IAAI1lB,GAAGP,OAAOg5C,eAAe/yB,KAAK,MAAM,CAAC5lB,MAAMG,EAAE22C,YAAW,IAAKn3C,OAAOg5C,eAAe/yB,KAAK,MAAM,CAAC5lB,MAAMK,EAAEy2C,YAAW,GAAI,CAAC,SAASzvC,EAAEnH,EAAEC,GAAGkH,EAAEijQ,OAAOvqQ,KAAK6lB,KAAK,IAAI1lB,GAAGP,OAAOg5C,eAAe/yB,KAAK,MAAM,CAAC5lB,MAAMG,EAAE22C,YAAW,GAAI,CAAC,SAAS33C,EAAEe,EAAEC,GAAGhB,EAAEmrQ,OAAOvqQ,KAAK6lB,KAAK,IAAI1lB,GAAGP,OAAOg5C,eAAe/yB,KAAK,MAAM,CAAC5lB,MAAMG,EAAE22C,YAAW,GAAI,CAAC,SAASv2C,EAAEL,EAAEC,EAAEE,GAAGE,EAAE+pQ,OAAOvqQ,KAAK6lB,KAAK,IAAI1lB,GAAGP,OAAOg5C,eAAe/yB,KAAK,QAAQ,CAAC5lB,MAAMG,EAAE22C,YAAW,IAAKn3C,OAAOg5C,eAAe/yB,KAAK,OAAO,CAAC5lB,MAAMK,EAAEy2C,YAAW,GAAI,CAAC,SAASn0B,EAAEziB,EAAEC,EAAEE,GAAG,IAAID,EAAEF,EAAEiJ,OAAO9I,GAAGF,GAAG,GAAGD,EAAEd,QAAQ,OAAOc,EAAEd,OAAOe,EAAE,EAAED,EAAEd,OAAOe,EAAEA,EAAED,EAAEe,KAAK0kB,MAAMzlB,EAAEE,GAAGF,CAAC,CAAC,SAASa,EAAEb,GAAG,IAAIC,EAAE,oBAAoBD,EAAE,YAAYy3C,EAAEz3C,GAAG,MAAM,WAAWC,EAAEA,EAAED,IAAIq1B,KAAK,OAAO,OAAOr1B,EAAE,OAAOV,MAAMC,QAAQS,GAAG,QAAQ,kBAAkBP,OAAOC,UAAUF,SAASK,KAAKG,GAAG,OAAO,mBAAmBA,EAAER,UAAU,UAAUslB,KAAK9kB,EAAER,YAAY,SAAS,QAAQ,CAAC,SAASg3C,EAAEx2C,EAAEC,EAAEE,EAAEa,EAAEV,EAAEE,EAAEwkB,GAAWA,EAAEA,GAAG,GAAG,IAAIsnB,GAApBhsC,EAAEA,GAAG,IAAmB2I,MAAM,GAAG,GAAG,oBAAoBzI,EAAE,CAAC,GAAGQ,EAAE,CAAC,GAAG,mBAAmBA,GAAGA,EAAEsrC,EAAE9rC,GAAG,OAAO,GAAG,YAAY,oBAAoBQ,EAAE,YAAYy2C,EAAEz2C,IAAI,CAAC,GAAGA,EAAEqpQ,WAAWrpQ,EAAEqpQ,UAAU/9N,EAAE9rC,GAAG,OAAO,GAAGQ,EAAEspQ,UAAU,CAAC,IAAIllQ,EAAEpE,EAAEspQ,UAAUh+N,EAAE9rC,EAAER,EAAEC,GAAGmF,IAAIpF,EAAEoF,EAAE,GAAGnF,EAAEmF,EAAE,GAAG,CAAC,CAAC,CAACknC,EAAEvrC,KAAKP,EAAE,CAAC,WAAWK,EAAEb,IAAI,WAAWa,EAAEZ,KAAKD,EAAEA,EAAER,WAAWS,EAAEA,EAAET,YAAY,IAAIq3C,EAAE,oBAAoB72C,EAAE,YAAYy3C,EAAEz3C,GAAG2nB,EAAE,oBAAoB1nB,EAAE,YAAYw3C,EAAEx3C,GAAG23B,EAAE,cAAcif,GAAG7xB,GAAGA,EAAEA,EAAE9lB,OAAO,GAAGqrQ,KAAKvlP,EAAEA,EAAE9lB,OAAO,GAAGqrQ,IAAI1rQ,eAAe2B,GAAGwmC,EAAE,cAAcrf,GAAG3C,GAAGA,EAAEA,EAAE9lB,OAAO,GAAGsrQ,KAAKxlP,EAAEA,EAAE9lB,OAAO,GAAGsrQ,IAAI3rQ,eAAe2B,GAAG,IAAIo3B,GAAGoP,EAAE7mC,EAAE,IAAIgH,EAAEmlC,EAAErsC,SAAS,IAAI+mC,GAAGpP,EAAEz3B,EAAE,IAAIlB,EAAEqtC,EAAEtsC,SAAS,GAAGa,EAAEb,KAAKa,EAAEZ,GAAGE,EAAE,IAAID,EAAEosC,EAAEtsC,EAAEC,SAAS,GAAG,SAASY,EAAEb,IAAIA,EAAEC,IAAI,EAAEE,EAAE,IAAID,EAAEosC,EAAEtsC,EAAEC,SAAS,GAAG,WAAW42C,GAAG,OAAO72C,GAAG,OAAOC,EAAE,GAAG+kB,EAAE0E,QAAO,SAASzpB,GAAG,OAAOA,EAAEsqQ,MAAMvqQ,CAAC,IAAGd,OAAOc,IAAIC,GAAGE,EAAE,IAAID,EAAEosC,EAAEtsC,EAAEC,QAAQ,CAAC,GAAG+kB,EAAEjkB,KAAK,CAACwpQ,IAAIvqQ,EAAEwqQ,IAAIvqQ,IAAIX,MAAMC,QAAQS,GAAG,CAAC,IAAIkF,EAAW,IAATlF,EAAEd,OAAWgG,EAAE,EAAEA,EAAElF,EAAEd,OAAOgG,IAAIA,GAAGjF,EAAEf,OAAOiB,EAAE,IAAIE,EAAEisC,EAAEpnC,EAAE,IAAIjG,OAAE,EAAOe,EAAEkF,MAAMsxC,EAAEx2C,EAAEkF,GAAGjF,EAAEiF,GAAG/E,EAAEa,EAAEsrC,EAAEpnC,EAAE8f,GAAG,KAAK9f,EAAEjF,EAAEf,QAAQiB,EAAE,IAAIE,EAAEisC,EAAEpnC,EAAE,IAAIiC,OAAE,EAAOlH,EAAEiF,OAAO,KAAK,CAAC,IAAIyc,EAAEliB,OAAOiC,KAAK1B,GAAGm3C,EAAE13C,OAAOiC,KAAKzB,GAAG0hB,EAAErZ,SAAQ,SAASpI,EAAEiH,GAAG,IAAIlI,EAAEk4C,EAAEr2C,QAAQZ,GAAGjB,GAAG,GAAGu3C,EAAEx2C,EAAEE,GAAGD,EAAEC,GAAGC,EAAEa,EAAEsrC,EAAEpsC,EAAE8kB,GAAGmyB,EAAE10B,EAAE00B,EAAEl4C,IAAIu3C,EAAEx2C,EAAEE,QAAG,EAAOC,EAAEa,EAAEsrC,EAAEpsC,EAAE8kB,EAAE,IAAGmyB,EAAE7uC,SAAQ,SAAStI,GAAGw2C,OAAE,EAAOv2C,EAAED,GAAGG,EAAEa,EAAEsrC,EAAEtsC,EAAEglB,EAAE,GAAE,CAACA,EAAE9lB,OAAO8lB,EAAE9lB,OAAO,CAAC,MAAMc,IAAIC,IAAI,WAAW42C,GAAG7vB,MAAMhnB,IAAIgnB,MAAM/mB,IAAIE,EAAE,IAAID,EAAEosC,EAAEtsC,EAAEC,IAAI,CAAC,SAASe,EAAEhB,EAAEC,EAAEE,EAAED,GAAG,OAAOA,EAAEA,GAAG,GAAGs2C,EAAEx2C,EAAEC,GAAE,SAASD,GAAGA,GAAGE,EAAEa,KAAKf,EAAE,GAAEG,GAAGD,EAAEhB,OAAOgB,OAAE,CAAM,CAAC,SAASI,EAAEN,EAAEC,EAAEE,GAAG,GAAGA,EAAEiL,MAAMjL,EAAEiL,KAAKlM,OAAO,CAAC,IAAIgB,EAAEiH,EAAEnH,EAAEC,GAAGhB,EAAEkB,EAAEiL,KAAKlM,OAAO,EAAE,IAAIgB,EAAE,EAAEA,EAAEjB,EAAEiB,IAAIiH,EAAEA,EAAEhH,EAAEiL,KAAKlL,IAAI,OAAOC,EAAE0V,MAAM,IAAI,IAAIvV,EAAE6G,EAAEhH,EAAEiL,KAAKlL,IAAIC,EAAEiH,MAAMjH,EAAEsP,MAAM,MAAM,IAAI,WAAWtI,EAAEhH,EAAEiL,KAAKlL,IAAI,MAAM,IAAI,IAAI,IAAI,IAAIiH,EAAEhH,EAAEiL,KAAKlL,IAAIC,EAAEqqQ,IAAI,MAAM,OAAOrqQ,EAAE0V,MAAM,IAAI,IAAIvV,EAAEN,EAAEC,GAAGE,EAAEiH,MAAMjH,EAAEsP,MAAM,MAAM,IAAI,IAAIzP,EAAEyiB,EAAEziB,EAAEC,GAAG,MAAM,IAAI,IAAI,IAAI,IAAID,EAAEC,GAAGE,EAAEqqQ,IAAI,OAAOxqQ,CAAC,CAAC,SAASQ,EAAER,EAAEC,EAAEE,GAAG,GAAGH,GAAGC,GAAGE,GAAGA,EAAE0V,KAAK,CAAC,IAAI,IAAI3V,EAAEF,EAAEmH,GAAG,EAAElI,EAAEkB,EAAEiL,KAAKjL,EAAEiL,KAAKlM,OAAO,EAAE,IAAIiI,EAAElI,GAAG,oBAAoBiB,EAAEC,EAAEiL,KAAKjE,MAAMjH,EAAEC,EAAEiL,KAAKjE,IAAI,iBAAiBhH,EAAEiL,KAAKjE,GAAG,GAAG,CAAC,GAAGjH,EAAEA,EAAEC,EAAEiL,KAAKjE,IAAI,OAAOhH,EAAE0V,MAAM,IAAI,IAAIvV,EAAEH,EAAEiL,KAAKlL,EAAEC,EAAEiL,KAAKjE,IAAIjH,EAAEC,EAAEiH,MAAMjH,EAAEsP,MAAM,MAAM,IAAI,WAAWvP,EAAEC,EAAEiL,KAAKjE,IAAI,MAAM,IAAI,IAAI,IAAI,IAAIjH,EAAEC,EAAEiL,KAAKjE,IAAIhH,EAAEqqQ,IAAI,CAAC,CAAC,SAASxlP,EAAEhlB,EAAEC,EAAEE,GAAG,GAAGA,EAAEiL,MAAMjL,EAAEiL,KAAKlM,OAAO,CAAC,IAAIgB,EAAEiH,EAAEnH,EAAEC,GAAGhB,EAAEkB,EAAEiL,KAAKlM,OAAO,EAAE,IAAIgB,EAAE,EAAEA,EAAEjB,EAAEiB,IAAIiH,EAAEA,EAAEhH,EAAEiL,KAAKlL,IAAI,OAAOC,EAAE0V,MAAM,IAAI,IAAImP,EAAE7d,EAAEhH,EAAEiL,KAAKlL,IAAIC,EAAEiH,MAAMjH,EAAEsP,MAAM,MAAM,IAAI,IAA6B,IAAI,IAAItI,EAAEhH,EAAEiL,KAAKlL,IAAIC,EAAEoqQ,IAAI,MAAM,IAAI,WAAWpjQ,EAAEhH,EAAEiL,KAAKlL,IAAI,MAAM,OAAOC,EAAE0V,MAAM,IAAI,IAAImP,EAAEhlB,EAAEC,GAAGE,EAAEiH,MAAMjH,EAAEsP,MAAM,MAAM,IAAI,IAAqB,IAAI,IAAIzP,EAAEC,GAAGE,EAAEoqQ,IAAI,MAAM,IAAI,IAAIvqQ,EAAEyiB,EAAEziB,EAAEC,GAAG,OAAOD,CAAC,CAAC,SAASssC,EAAEtsC,EAAEC,EAAEE,GAAG,GAAGH,GAAGC,GAAGE,GAAGA,EAAE0V,KAAK,CAAC,IAAI3V,EAAEiH,EAAElI,EAAEe,EAAE,IAAImH,EAAEhH,EAAEiL,KAAKlM,OAAO,EAAEgB,EAAE,EAAEA,EAAEiH,EAAEjH,IAAI,oBAAoBjB,EAAEkB,EAAEiL,KAAKlL,MAAMjB,EAAEkB,EAAEiL,KAAKlL,IAAI,CAAC,GAAGjB,EAAEA,EAAEkB,EAAEiL,KAAKlL,IAAI,OAAOC,EAAE0V,MAAM,IAAI,IAAImP,EAAE/lB,EAAEkB,EAAEiL,KAAKlL,IAAIC,EAAEiH,MAAMjH,EAAEsP,MAAM,MAAM,IAAI,IAA6B,IAAI,IAAIxQ,EAAEkB,EAAEiL,KAAKlL,IAAIC,EAAEoqQ,IAAI,MAAM,IAAI,WAAWtrQ,EAAEkB,EAAEiL,KAAKlL,IAAI,CAAC,CAAC,SAASkF,EAAEpF,EAAEC,EAAEE,GAAMH,GAAGC,GAA6Cu2C,EAAEx2C,EAAEC,GAAxC,SAASC,GAAGC,IAAIA,EAAEH,EAAEC,EAAEC,IAAIM,EAAER,EAAEC,EAAEC,EAAE,GAAW,CAAC,SAAS22C,EAAE72C,GAAG,MAAM,UAAU+3C,EAAE/3C,GAAGykN,MAAM,qBAAqB,CAAC,SAAS98L,EAAE3nB,GAAG,IAAIC,EAAED,EAAE6V,KAAK1V,EAAEH,EAAEoL,KAAKlL,EAAEF,EAAEuqQ,IAAIpjQ,EAAEnH,EAAEwqQ,IAAIvrQ,EAAEe,EAAEoH,MAAM/G,EAAEL,EAAEyP,KAAK,OAAOxP,GAAG,IAAI,IAAI,MAAM,CAACE,EAAEmkB,KAAK,KAAKpkB,EAAE,SAAIiH,GAAG,IAAI,IAAI,MAAM,CAAChH,EAAEmkB,KAAK,KAAKnd,GAAG,IAAI,IAAI,MAAM,CAAChH,EAAEmkB,KAAK,MAAM,IAAI,IAAI,MAAM,CAACnkB,EAAEmkB,KAAK,KAAK,IAAIrlB,EAAE,IAAIoB,GAAG,QAAQ,MAAM,GAAG,CAAC,SAASu3B,EAAE53B,EAAEC,EAAEE,EAAED,GAAG,IAAIiH,EAAEnG,EAAEhB,EAAEC,GAAG,IAAIC,EAAEC,EAAEsqQ,eAAe,QAAQtqQ,EAAE+tJ,MAAM,OAAO,CAAC,MAAMluJ,GAAGG,EAAE+lB,IAAI,OAAO,CAAC/e,EAAEA,EAAEmB,SAAQ,SAAStI,GAAG,IAAIC,EAAED,EAAE6V,KAAK3V,EAAEynB,EAAE3nB,GAAGG,EAAE+lB,IAAIT,MAAMtlB,EAAE,CAAC,MAAM43C,EAAE93C,GAAG0J,KAAKktC,EAAE52C,IAAIwhB,OAAO21B,EAAEl3C,IAAI,IAAGC,EAAE+lB,IAAI,qCAAiB,IAAI/lB,EAAEuqQ,UAAU,CAAC,MAAM1qQ,GAAGG,EAAE+lB,IAAI,sCAAkB,CAAC,CAAC,SAAS8gB,EAAEhnC,EAAEC,EAAEE,EAAED,GAAG,OAAO,oBAAoBF,EAAE,YAAYy3C,EAAEz3C,IAAI,IAAI,SAAS,MAAM,mBAAmBA,EAAEE,GAAGF,EAAEE,GAAGulB,MAAMzlB,EAAEo3C,EAAEj3C,IAAIH,EAAEE,GAAG,IAAI,WAAW,OAAOF,EAAEC,GAAG,QAAQ,OAAOD,EAAE,CAAC,SAASkF,EAAElF,GAAG,IAAIC,EAAED,EAAEumB,UAAUpmB,EAAEH,EAAEoQ,SAAS,OAAO,SAASpQ,EAAEE,EAAEiH,GAAG,IAAIlI,EAAE,CAAC,UAAU,OAAOA,EAAE8B,KAAK,KAAKwnB,OAAOvoB,EAAE0D,OAAOzD,GAAGhB,EAAE8B,KAAK,OAAOb,GAAGC,GAAGlB,EAAE8B,KAAK,SAASoG,EAAE4zB,QAAQ,GAAG,QAAQ97B,EAAEqlB,KAAK,IAAI,CAAC,CAAC,SAAS3C,EAAE3hB,EAAEC,GAAG,IAAIE,EAAEF,EAAE0kB,OAAOzkB,EAAED,EAAE0qQ,kBAAkBxjQ,EAAElH,EAAE2qQ,eAAe3rQ,OAAE,IAASkI,EAAEjC,EAAEjF,GAAGkH,EAAE9G,EAAEJ,EAAE4qQ,UAAUpoP,EAAExiB,EAAE6qQ,OAAOjqQ,EAAEZ,EAAE2oP,MAAMpyM,EAAEv2C,EAAEgvD,KAAKjuD,EAAE,oBAAoBf,EAAE2qQ,eAAe5qQ,EAAEsI,SAAQ,SAASnB,EAAE7G,GAAG,IAAIE,EAAE2G,EAAE4jQ,QAAQ/lP,EAAE7d,EAAE6jQ,YAAY1+N,EAAEnlC,EAAEy1C,OAAOx3C,EAAE+B,EAAEq8B,UAAUqT,EAAE1vC,EAAEiC,MAAMue,EAAExgB,EAAE8jQ,KAAK/lQ,EAAEiC,EAAEw6L,UAAUhgL,EAAE3hB,EAAEM,EAAE,GAAGqhB,IAAIzc,EAAEyc,EAAE6hB,UAAU7b,EAAEhG,EAAEopP,QAAQvqQ,GAAG,IAAI22C,EAAEj3C,EAAEosC,GAAG5oB,EAAE,mBAAmBrjB,EAAEA,GAAE,WAAW,OAAO6E,CAAC,GAAEonC,EAAEnlC,GAAG9G,EAAEgoB,EAAEsvB,EAAE3yB,GAAG8yB,EAAEr1B,EAAEjd,MAAM,UAAUid,EAAEjd,MAAM2xC,GAAG,IAAI,GAAGI,EAAE,CAAC,sCAAsCA,EAAEx2C,KAAK+2C,GAAG73C,EAAEsmB,WAAWgxB,EAAEx2C,KAAK,sCAAsCd,EAAEmQ,UAAUmnC,EAAEx2C,KAAK,sCAAsC,IAAIm2C,EAAEj4C,EAAEk4C,EAAE9uB,EAAEV,GAAG,IAAIjE,EAAEjB,EAAEjd,OAAOxE,EAAEb,EAAEsqQ,eAAehlP,MAAMtlB,EAAE,CAAC,MAAM+2C,GAAGz1B,OAAO81B,IAAIp3C,EAAEsqQ,eAAevzN,GAAGz0B,EAAEjd,OAAOxE,EAAEb,EAAE+tJ,MAAMzoI,MAAMtlB,EAAE,CAAC,MAAM+2C,GAAGz1B,OAAO81B,IAAIp3C,EAAE+tJ,MAAMh3G,EAAE,CAAC,MAAMl3C,GAAGG,EAAE+lB,IAAIgxB,EAAE,CAAC,IAAIO,EAAEzQ,EAAEnmC,EAAEs2C,EAAE,CAAC/xC,GAAG,aAAagyC,EAAEpQ,EAAEnmC,EAAEs2C,EAAE,CAACA,GAAG,UAAUc,EAAEjR,EAAEnmC,EAAEs2C,EAAE,CAACN,EAAEzxC,GAAG,SAAS2yC,EAAE/Q,EAAEnmC,EAAEs2C,EAAE,CAACjyC,GAAG,aAAa,GAAGuyC,EAAE,GAAGh1B,EAAE+gB,UAAU,CAAC,IAAIwS,EAAE,UAAUvzB,EAAE+gB,UAAUp+B,GAAG,sBAAsBjF,EAAEs3C,GAAG,gBAAgBzB,EAAE5wC,EAAE,MAAMjF,EAAEs3C,GAAG,aAAaryC,GAAG,GAAGgyC,EAAE,GAAG30B,EAAEm6B,OAAO,CAAC,IAAI5E,EAAE,UAAUv1B,EAAEm6B,OAAOzF,GAAG,sBAAsBh3C,EAAEi3C,GAAG,gBAAgBY,EAAEb,EAAE,MAAMh3C,EAAEi3C,GAAG,aAAaD,GAAG,GAAGN,GAAGoB,EAAE,GAAGx1B,EAAErZ,MAAM,CAAC,IAAIiuC,EAAE,UAAU50B,EAAErZ,MAAMytC,EAAEzxC,GAAG,uBAAuBjF,EAAE83C,GAAG,gBAAgBZ,EAAER,EAAE,MAAM12C,EAAE83C,GAAG,aAAapB,GAAG,GAAGkB,EAAE,GAAGt1B,EAAEk/K,UAAU,CAAC,IAAI3wJ,EAAE,UAAUvuB,EAAEk/K,UAAUz8L,GAAG,sBAAsB/E,EAAE43C,GAAG,gBAAgB/G,EAAE9rC,EAAE,MAAM/E,EAAE43C,GAAG,aAAa7yC,GAAGsxC,GAAG5e,EAAExyB,EAAEF,EAAE/E,EAAEujB,GAAG,IAAIvjB,EAAEuqQ,UAAU,CAAC,MAAM1qQ,GAAGG,EAAE+lB,IAAI,oCAAgB,CAAC,GAAE,CAAC,SAASixB,IAAI,IAAIn3C,EAAEqlB,UAAUnmB,OAAO,QAAG,IAASmmB,UAAU,GAAGA,UAAU,GAAG,CAAC,EAAEplB,EAAER,OAAO+lB,OAAO,CAAC,EAAEwwB,EAAEh2C,GAAGG,EAAEF,EAAE0kB,OAAOzkB,EAAED,EAAEirQ,iBAAiB/jQ,EAAElH,EAAEkrQ,iBAAiBlsQ,EAAEgB,EAAE6rE,UAAUzrE,EAAEJ,EAAEmrQ,UAAU3oP,EAAExiB,EAAEorQ,cAAc,GAAG,oBAAoBlrQ,EAAE,OAAO,WAAW,OAAO,SAASH,GAAG,OAAO,SAASC,GAAG,OAAOD,EAAEC,EAAE,CAAC,CAAC,EAAE,GAAGD,EAAE4gD,UAAU5gD,EAAE2gD,SAAS,OAAO76B,QAAQ1c,MAAM,+eAA+e,WAAW,OAAO,SAASpJ,GAAG,OAAO,SAASC,GAAG,OAAOD,EAAEC,EAAE,CAAC,CAAC,EAAE,IAAIY,EAAE,GAAG,OAAO,SAASb,GAAG,IAAIG,EAAEH,EAAE4gD,SAAS,OAAO,SAAS5gD,GAAG,OAAO,SAASw2C,GAAG,GAAG,mBAAmBv3C,IAAIA,EAAEkB,EAAEq2C,GAAG,OAAOx2C,EAAEw2C,GAAG,IAAIx1C,EAAE,CAAC,EAAEH,EAAEE,KAAKC,GAAGA,EAAE+pQ,QAAQ7zN,EAAEvoC,MAAM3N,EAAEgqQ,YAAY,IAAIp8P,KAAK5N,EAAEwiC,UAAUtjC,EAAEC,KAAKa,EAAE47C,OAAOpG,EAAE,IAAIl2C,OAAE,EAAO,GAAGD,EAAE,IAAIC,EAAEN,EAAEw2C,EAAE,CAAC,MAAMx2C,GAAGgB,EAAEoI,MAAMjC,EAAEnH,EAAE,MAAMM,EAAEN,EAAEw2C,GAAGx1C,EAAEiqQ,KAAK/zN,EAAEvoC,MAAM3N,EAAE+pQ,QAAQ/pQ,EAAE2gM,UAAUzhM,EAAEC,KAAK,IAAIK,EAAEP,EAAEgvD,MAAM,mBAAmBxsC,EAAEA,EAAEtiB,EAAEq2C,GAAGv2C,EAAEgvD,KAAK,GAAGttC,EAAE9gB,EAAEpB,OAAO+lB,OAAO,CAAC,EAAEvlB,EAAE,CAACgvD,KAAKzuD,KAAKK,EAAE3B,OAAO,EAAE8B,EAAEoI,MAAM,MAAMpI,EAAEoI,MAAM,OAAO9I,CAAC,CAAC,CAAC,CAAC,CAAC,IAAIojB,EAAE2E,EAAEyvB,EAAE,SAAS93C,EAAEC,GAAG,OAAO,IAAIX,MAAMW,EAAE,GAAGqkB,KAAKtkB,EAAE,EAAEu3C,EAAE,SAASv3C,EAAEC,GAAG,OAAO63C,EAAE,IAAI73C,EAAED,EAAER,WAAWN,QAAQc,CAAC,EAAE23C,EAAE,SAAS33C,GAAG,OAAOu3C,EAAEv3C,EAAE8O,WAAW,GAAG,IAAIyoC,EAAEv3C,EAAEgP,aAAa,GAAG,IAAIuoC,EAAEv3C,EAAEyuD,aAAa,GAAG,IAAIlX,EAAEv3C,EAAE0uD,kBAAkB,EAAE,EAAExX,EAAE,oBAAoBu5F,aAAa,OAAOA,aAAa,mBAAmBA,YAAY9hI,IAAI8hI,YAAY7hI,KAAK6oC,EAAE,mBAAmBkB,QAAQ,iBAAiBA,OAAOI,SAAS,SAAS/4C,GAAG,cAAcA,CAAC,EAAE,SAASA,GAAG,OAAOA,GAAG,mBAAmB24C,QAAQ34C,EAAEunC,cAAcoR,QAAQ34C,IAAI24C,OAAOj5C,UAAU,gBAAgBM,CAAC,EAAEo3C,EAAE,SAASp3C,GAAG,GAAGV,MAAMC,QAAQS,GAAG,CAAC,IAAI,IAAIC,EAAE,EAAEE,EAAEb,MAAMU,EAAEd,QAAQe,EAAED,EAAEd,OAAOe,IAAIE,EAAEF,GAAGD,EAAEC,GAAG,OAAOE,CAAC,CAAC,OAAOb,MAAM0Z,KAAKhZ,EAAE,EAAEi4C,EAAE,GAAGv0B,EAAE,YAAY,oBAAoB,EAAA4oB,EAAO,YAAYmL,EAAE,EAAAnL,KAAU,EAAAA,EAAO,EAAAA,EAAO,oBAAoBnoC,OAAOA,OAAO,CAAC,GAAEkkB,EAAE3E,EAAE4nP,WAAYrzN,EAAEl3C,MAAK,WAAW,oBAAoBsnB,GAAG3E,EAAE4nP,WAAWtqQ,IAAI0iB,EAAE4nP,SAASjjP,EAAEA,OAAE,EAAO,IAAGpoB,EAAEC,EAAEC,GAAGF,EAAEkH,EAAEhH,GAAGF,EAAEhB,EAAEkB,GAAGF,EAAEI,EAAEF,GAAGV,OAAOu7C,iBAAiBh6C,EAAE,CAACiuD,KAAK,CAACnvD,MAAMkB,EAAE41C,YAAW,GAAI20N,eAAe,CAACzrQ,MAAM02C,EAAEI,YAAW,GAAI40N,UAAU,CAAC1rQ,MAAMsF,EAAEwxC,YAAW,GAAI60N,YAAY,CAAC3rQ,MAAMU,EAAEo2C,YAAW,GAAI80N,aAAa,CAAC5rQ,MAAMwsC,EAAEsK,YAAW,GAAI+0N,WAAW,CAAC7rQ,MAAM,WAAW,MAAM,oBAAoBuoB,CAAC,EAAEuuB,YAAW,GAAIi0F,WAAW,CAAC/qI,MAAM,WAAW,OAAOm4C,IAAIA,EAAE3vC,SAAQ,SAAStI,GAAGA,GAAG,IAAGi4C,EAAE,MAAMj3C,CAAC,EAAE41C,YAAW,KAAM,IAAImB,EAAE,CAACD,EAAE,CAAC2sK,MAAM,UAAU96M,KAAK,YAAY8tC,EAAE,CAACgtK,MAAM,UAAU96M,KAAK,UAAUguC,EAAE,CAAC8sK,MAAM,UAAU96M,KAAK,YAAY4tC,EAAE,CAACktK,MAAM,UAAU96M,KAAK,WAAWqsC,EAAE,CAAC4yM,MAAM,MAAMjkO,OAAOmB,QAAQslP,WAAU,EAAGP,eAAU,EAAO/+L,eAAU,EAAO17D,UAAS,EAAGmW,WAAU,EAAG2kP,iBAAiB,SAASlrQ,GAAG,OAAOA,CAAC,EAAE2qQ,kBAAkB,SAAS3qQ,GAAG,OAAOA,CAAC,EAAEmrQ,iBAAiB,SAASnrQ,GAAG,OAAOA,CAAC,EAAE8qQ,OAAO,CAACtlQ,MAAM,WAAW,MAAM,SAAS,EAAEg+B,UAAU,WAAW,MAAM,SAAS,EAAEoZ,OAAO,WAAW,MAAM,SAAS,EAAE+kJ,UAAU,WAAW,MAAM,SAAS,EAAEv4L,MAAM,WAAW,MAAM,SAAS,GAAG6lD,MAAK,EAAGo8M,mBAAc,EAAOO,iBAAY,GAAQ5zN,EAAE,WAAW,IAAIh4C,EAAEqlB,UAAUnmB,OAAO,QAAG,IAASmmB,UAAU,GAAGA,UAAU,GAAG,CAAC,EAAEplB,EAAED,EAAE2gD,SAASxgD,EAAEH,EAAE4gD,SAAS,MAAM,mBAAmB3gD,GAAG,mBAAmBE,EAAEg3C,IAAI,CAACwJ,SAAS1gD,EAAE2gD,SAASzgD,SAAS2lB,QAAQ1c,MAAM,+SAA+S,EAAEpJ,EAAEk5H,SAASljF,EAAEh2C,EAAE6rQ,aAAa10N,EAAEn3C,EAAE2kB,OAAOqzB,EAAEh4C,EAAEirD,QAAQjT,EAAEv4C,OAAOg5C,eAAez4C,EAAE,aAAa,CAACF,OAAM,GAAI,CAAzsUG,CAAE8gB,qCCGtE,SAAS+qP,EAAsBruN,GAqB7B,OAlBiB,SAAoBpwB,GACnC,IAAIszB,EAAWtzB,EAAKszB,SAChBC,EAAWvzB,EAAKuzB,SACpB,OAAO,SAAUntB,GACf,OAAO,SAAUmpB,GAGf,MAAsB,oBAAXA,EAEFA,EAAO+D,EAAUC,EAAUnD,GAI7BhqB,EAAKmpB,EACd,CACF,CACF,CAGF,CAEA,IAAIM,EAAQ4uN,IAGZ5uN,EAAMM,kBAAoBsuN,EAC1B,0CC/Be,SAASt2E,EAAgB3zK,EAAKjiB,EAAKE,GAYhD,OAXIF,KAAOiiB,EACTpiB,OAAOg5C,eAAe52B,EAAKjiB,EAAK,CAC9BE,MAAOA,EACP82C,YAAY,EACZD,cAAc,EACdD,UAAU,IAGZ70B,EAAIjiB,GAAOE,EAGN+hB,CACT,CCXA,SAASm3B,EAAQqT,EAAQgpI,GACvB,IAAI3zL,EAAOjC,OAAOiC,KAAK2qD,GAEvB,GAAI5sD,OAAOw5C,sBAAuB,CAChC,IAAIg/G,EAAUx4J,OAAOw5C,sBAAsBoT,GAEvCgpI,IACFp9B,EAAUA,EAAQvuI,QAAO,SAAU4rK,GACjC,OAAO71L,OAAOo4C,yBAAyBwU,EAAQipI,GAAK1+I,UACtD,KAGFl1C,EAAKX,KAAK0kB,MAAM/jB,EAAMu2J,EACxB,CAEA,OAAOv2J,CACT,CAEe,SAAS6zL,EAAenrL,GACrC,IAAK,IAAInL,EAAI,EAAGA,EAAIomB,UAAUnmB,OAAQD,IAAK,CACzC,IAAI8Q,EAAyB,MAAhBsV,UAAUpmB,GAAaomB,UAAUpmB,GAAK,CAAC,EAEhDA,EAAI,EACN+5C,EAAQv5C,OAAOsQ,IAAS,GAAMzH,SAAQ,SAAU1I,GAC9C,EAAewK,EAAQxK,EAAKmQ,EAAOnQ,GACrC,IACSH,OAAO05C,0BAChB15C,OAAOu7C,iBAAiB5wC,EAAQ3K,OAAO05C,0BAA0BppC,IAEjEipC,EAAQv5C,OAAOsQ,IAASzH,SAAQ,SAAU1I,GACxCH,OAAOg5C,eAAeruC,EAAQxK,EAAKH,OAAOo4C,yBAAyB9nC,EAAQnQ,GAC7E,GAEJ,CAEA,OAAOwK,CACT,CC7BA,SAAS2hQ,EAAuBj6O,GAC9B,MAAO,yBAA2BA,EAAO,4CAA8CA,EAAhF,iFACT,0GAGA,IAAIk6O,EACuB,oBAAXrzN,QAAyBA,OAAOszN,YAAc,eAS1DC,EAAe,WACjB,OAAO72O,KAAKG,SAASh2B,SAAS,IAAI0B,UAAU,GAAGuoB,MAAM,IAAInF,KAAK,IAChE,EAEI6nP,EAAc,CAChBC,KAAM,eAAiBF,IACvBG,QAAS,kBAAoBH,IAC7BI,qBAAsB,WACpB,MAAO,+BAAiCJ,GAC1C,GAOF,SAAS9vN,EAAcv6B,GACrB,GAAmB,kBAARA,GAA4B,OAARA,EAAc,OAAO,EAGpD,IAFA,IAAIw6B,EAAQx6B,EAE4B,OAAjCpiB,OAAOo2C,eAAewG,IAC3BA,EAAQ58C,OAAOo2C,eAAewG,GAGhC,OAAO58C,OAAOo2C,eAAeh0B,KAASw6B,CACxC,CAuFA,SAASkwN,EAAYvuN,EAASM,EAAgBkuN,GAC5C,IAAI38M,EAEJ,GAA8B,oBAAnBvR,GAAqD,oBAAbkuN,GAA+C,oBAAbA,GAAmD,oBAAjBnnP,UAAU,GAC/H,MAAM,IAAI+D,MAA8C2iP,EAAuB,IAQjF,GAL8B,oBAAnBztN,GAAqD,qBAAbkuN,IACjDA,EAAWluN,EACXA,OAAiBhgC,GAGK,qBAAbkuP,EAA0B,CACnC,GAAwB,oBAAbA,EACT,MAAM,IAAIpjP,MAA8C2iP,EAAuB,IAGjF,OAAOS,EAASD,EAATC,CAAsBxuN,EAASM,EACxC,CAEA,GAAuB,oBAAZN,EACT,MAAM,IAAI50B,MAA8C2iP,EAAuB,IAGjF,IAAIU,EAAiBzuN,EACjB0jI,EAAepjI,EACfouN,EAAmB,GACnBC,EAAgBD,EAChBE,GAAgB,EASpB,SAASC,IACHF,IAAkBD,IACpBC,EAAgBD,EAAiBzjQ,QAErC,CAQA,SAAS23C,IACP,GAAIgsN,EACF,MAAM,IAAIxjP,MAA8C2iP,EAAuB,IAGjF,OAAOrqF,CACT,CA0BA,SAASttI,EAAUlO,GACjB,GAAwB,oBAAbA,EACT,MAAM,IAAI9c,MAA8C2iP,EAAuB,IAGjF,GAAIa,EACF,MAAM,IAAIxjP,MAA8C2iP,EAAuB,IAGjF,IAAIhf,GAAe,EAGnB,OAFA8f,IACAF,EAAc5rQ,KAAKmlC,GACZ,WACL,GAAK6mN,EAAL,CAIA,GAAI6f,EACF,MAAM,IAAIxjP,MAA8C2iP,EAAuB,IAGjFhf,GAAe,EACf8f,IACA,IAAIzlQ,EAAQulQ,EAAc7rQ,QAAQolC,GAClCymO,EAAc/mK,OAAOx+F,EAAO,GAC5BslQ,EAAmB,IAVnB,CAWF,CACF,CA4BA,SAAS/rN,EAAS/D,GAChB,IAAKR,EAAcQ,GACjB,MAAM,IAAIxzB,MAA8C2iP,EAAuB,IAGjF,GAA2B,qBAAhBnvN,EAAOl5C,KAChB,MAAM,IAAI0lB,MAA8C2iP,EAAuB,IAGjF,GAAIa,EACF,MAAM,IAAIxjP,MAA8C2iP,EAAuB,IAGjF,IACEa,GAAgB,EAChBlrF,EAAe+qF,EAAe/qF,EAAc9kI,EAC9C,CAAE,QACAgwN,GAAgB,CAClB,CAIA,IAFA,IAAI33F,EAAYy3F,EAAmBC,EAE1B1tQ,EAAI,EAAGA,EAAIg2K,EAAU/1K,OAAQD,IAAK,EAEzCinC,EADe+uI,EAAUh2K,KAE3B,CAEA,OAAO29C,CACT,CA4EA,OAHA+D,EAAS,CACPj9C,KAAMyoQ,EAAYC,QAEbv8M,EAAQ,CACblP,SAAUA,EACVvM,UAAWA,EACXwM,SAAUA,EACVksN,eAnEF,SAAwBC,GACtB,GAA2B,oBAAhBA,EACT,MAAM,IAAI3jP,MAA8C2iP,EAAuB,KAGjFU,EAAiBM,EAKjBpsN,EAAS,CACPj9C,KAAMyoQ,EAAYE,SAEtB,IAuDSL,GA9CT,WACE,IAAI3+O,EAEA2/O,EAAiB54N,EACrB,OAAO/mB,EAAO,CASZ+mB,UAAW,SAAmBO,GAC5B,GAAwB,kBAAbA,GAAsC,OAAbA,EAClC,MAAM,IAAIvrB,MAA8C2iP,EAAuB,KAGjF,SAASkB,IACHt4N,EAASlhB,MACXkhB,EAASlhB,KAAKmtB,IAElB,CAIA,OAFAqsN,IAEO,CACLhxG,YAFgB+wG,EAAeC,GAInC,IACMjB,GAAgB,WACtB,OAAOtmP,IACT,EAAG2H,CACL,EAaqCwiC,CACvC,CAsHA,SAASq9M,EAAgBC,GAIvB,IAHA,IAAIC,EAAc3tQ,OAAOiC,KAAKyrQ,GAC1BE,EAAgB,CAAC,EAEZpuQ,EAAI,EAAGA,EAAImuQ,EAAYluQ,OAAQD,IAAK,CAC3C,IAAIW,EAAMwtQ,EAAYnuQ,GAElB,EAMyB,oBAAlBkuQ,EAASvtQ,KAClBytQ,EAAcztQ,GAAOutQ,EAASvtQ,GAElC,CAEA,IASI0tQ,EATAC,EAAmB9tQ,OAAOiC,KAAK2rQ,GAWnC,KAjEF,SAA4BF,GAC1B1tQ,OAAOiC,KAAKyrQ,GAAU7kQ,SAAQ,SAAU1I,GACtC,IAAIo+C,EAAUmvN,EAASvtQ,GAKvB,GAA4B,qBAJTo+C,OAAQ1/B,EAAW,CACpC5a,KAAMyoQ,EAAYC,OAIlB,MAAM,IAAIhjP,MAA8C2iP,EAAuB,KAGjF,GAEO,qBAFI/tN,OAAQ1/B,EAAW,CAC5B5a,KAAMyoQ,EAAYG,yBAElB,MAAM,IAAIljP,MAA8C2iP,EAAuB,IAEnF,GACF,CAiDIyB,CAAmBH,EACrB,CAAE,MAAOrtQ,GACPstQ,EAAsBttQ,CACxB,CAEA,OAAO,SAAqBguB,EAAO4uB,GAKjC,QAJc,IAAV5uB,IACFA,EAAQ,CAAC,GAGPs/O,EACF,MAAMA,EAcR,IAX2C,IAQvCG,GAAa,EACb9rE,EAAY,CAAC,EAERpmJ,EAAK,EAAGA,EAAKgyN,EAAiBruQ,OAAQq8C,IAAM,CACnD,IAAInc,EAAOmuO,EAAiBhyN,GACxByC,EAAUqvN,EAAcjuO,GACxBsuO,EAAsB1/O,EAAMoR,GAC5BuuO,EAAkB3vN,EAAQ0vN,EAAqB9wN,GAEnD,GAA+B,qBAApB+wN,EAAiC,CACzB/wN,GAAUA,EAAOl5C,KAClC,MAAM,IAAI0lB,MAA8C2iP,EAAuB,IACjF,CAEApqE,EAAUviK,GAAQuuO,EAClBF,EAAaA,GAAcE,IAAoBD,CACjD,CAGA,OADAD,EAAaA,GAAcF,EAAiBruQ,SAAWO,OAAOiC,KAAKssB,GAAO9uB,QACtDyiM,EAAY3zK,CAClC,CACF,CA8DA,SAAS4/O,IACP,IAAK,IAAIzuO,EAAO9Z,UAAUnmB,OAAQ2uQ,EAAQ,IAAIvuQ,MAAM6/B,GAAOC,EAAO,EAAGA,EAAOD,EAAMC,IAChFyuO,EAAMzuO,GAAQ/Z,UAAU+Z,GAG1B,OAAqB,IAAjByuO,EAAM3uQ,OACD,SAAUC,GACf,OAAOA,CACT,EAGmB,IAAjB0uQ,EAAM3uQ,OACD2uQ,EAAM,GAGRA,EAAMvmN,QAAO,SAAUjnD,EAAGu3B,GAC/B,OAAO,WACL,OAAOv3B,EAAEu3B,EAAEnS,WAAM,EAAQJ,WAC3B,CACF,GACF,CAmBA,SAASyoP,IACP,IAAK,IAAI3uO,EAAO9Z,UAAUnmB,OAAQ6uQ,EAAc,IAAIzuQ,MAAM6/B,GAAOC,EAAO,EAAGA,EAAOD,EAAMC,IACtF2uO,EAAY3uO,GAAQ/Z,UAAU+Z,GAGhC,OAAO,SAAUmtO,GACf,OAAO,WACL,IAAI5nF,EAAQ4nF,EAAY9mP,WAAM,EAAQJ,WAElC2oP,EAAY,WACd,MAAM,IAAI5kP,MAA8C2iP,EAAuB,IACjF,EAEIkC,EAAgB,CAClBrtN,SAAU+jI,EAAM/jI,SAChBD,SAAU,WACR,OAAOqtN,EAAUvoP,WAAM,EAAQJ,UACjC,GAEEwzG,EAAQk1I,EAAYvqQ,KAAI,SAAU06C,GACpC,OAAOA,EAAW+vN,EACpB,IAEA,OADAD,EAAYJ,EAAQnoP,WAAM,EAAQozG,EAAtB+0I,CAA6BjpF,EAAMhkI,UACxC,EAAc,EAAc,CAAC,EAAGgkI,GAAQ,CAAC,EAAG,CACjDhkI,SAAUqtN,GAEd,CACF,CACF,oCCrrBa,SAASvrP,EAAEpiB,EAAEu3B,GAAG,IAAI52B,EAAEX,EAAEnB,OAAOmB,EAAEU,KAAK62B,GAAGv3B,EAAE,KAAK,EAAEW,GAAG,CAAC,IAAIR,EAAEQ,EAAE,IAAI,EAAEhB,EAAEK,EAAEG,GAAG,KAAG,EAAE8rC,EAAEtsC,EAAE43B,IAA0B,MAAMv3B,EAA7BA,EAAEG,GAAGo3B,EAAEv3B,EAAEW,GAAGhB,EAAEgB,EAAER,CAAc,CAAC,CAAC,SAAS4E,EAAE/E,GAAG,OAAO,IAAIA,EAAEnB,OAAO,KAAKmB,EAAE,EAAE,CAAC,SAASqjB,EAAErjB,GAAG,GAAG,IAAIA,EAAEnB,OAAO,OAAO,KAAK,IAAI04B,EAAEv3B,EAAE,GAAGW,EAAEX,EAAE0pB,MAAM,GAAG/oB,IAAI42B,EAAE,CAACv3B,EAAE,GAAGW,EAAEX,EAAE,IAAI,IAAIG,EAAE,EAAER,EAAEK,EAAEnB,OAAOgG,EAAElF,IAAI,EAAEQ,EAAE0E,GAAG,CAAC,IAAI8hC,EAAE,GAAGxmC,EAAE,GAAG,EAAEy3C,EAAE53C,EAAE2mC,GAAG9mC,EAAE8mC,EAAE,EAAErlB,EAAEthB,EAAEH,GAAG,GAAG,EAAEosC,EAAE2L,EAAEj3C,GAAGd,EAAEF,GAAG,EAAEssC,EAAE3qB,EAAEs2B,IAAI53C,EAAEG,GAAGmhB,EAAEthB,EAAEH,GAAGc,EAAER,EAAEN,IAAIG,EAAEG,GAAGy3C,EAAE53C,EAAE2mC,GAAGhmC,EAAER,EAAEwmC,OAAQ,MAAG9mC,EAAEF,GAAG,EAAEssC,EAAE3qB,EAAE3gB,IAA0B,MAAMX,EAA7BA,EAAEG,GAAGmhB,EAAEthB,EAAEH,GAAGc,EAAER,EAAEN,CAAaG,CAAC,CAAC,CAAC,OAAOu3B,CAAC,CAC3c,SAAS0U,EAAEjsC,EAAEu3B,GAAG,IAAI52B,EAAEX,EAAE6tQ,UAAUt2O,EAAEs2O,UAAU,OAAO,IAAIltQ,EAAEA,EAAEX,EAAEkR,GAAGqmB,EAAErmB,EAAE,CAAC,GAAG,kBAAkBk/H,aAAa,oBAAoBA,YAAY9hI,IAAI,CAAC,IAAI6nC,EAAEi6F,YAAY1vH,EAAQi6L,aAAa,WAAW,OAAOxkK,EAAE7nC,KAAK,CAAC,KAAK,CAAC,IAAIqW,EAAEpW,KAAK0nC,EAAEtxB,EAAErW,MAAMoS,EAAQi6L,aAAa,WAAW,OAAOh2L,EAAErW,MAAM2nC,CAAC,CAAC,CAAC,IAAIn2C,EAAE,GAAGF,EAAE,GAAGY,EAAE,EAAE8mB,EAAE,KAAKkvB,EAAE,EAAEe,GAAE,EAAGL,GAAE,EAAGqB,GAAE,EAAGjB,EAAE,oBAAoB3jB,WAAWA,WAAW,KAAK8jB,EAAE,oBAAoBk/C,aAAaA,aAAa,KAAKj/C,EAAE,qBAAqBo2N,aAAaA,aAAa,KACnT,SAASz1N,EAAEr4C,GAAG,IAAI,IAAIu3B,EAAExyB,EAAEnF,GAAG,OAAO23B,GAAG,CAAC,GAAG,OAAOA,EAAEiW,SAASnqB,EAAEzjB,OAAQ,MAAG23B,EAAE+hC,WAAWt5D,GAAgD,MAA9CqjB,EAAEzjB,GAAG23B,EAAEs2O,UAAUt2O,EAAEw2O,eAAe3rP,EAAEtiB,EAAEy3B,EAAa,CAACA,EAAExyB,EAAEnF,EAAE,CAAC,CAAC,SAASq3C,EAAEj3C,GAAa,GAAVu4C,GAAE,EAAGF,EAAEr4C,IAAOk3C,EAAE,GAAG,OAAOnyC,EAAEjF,GAAGo3C,GAAE,EAAGC,EAAEe,OAAO,CAAC,IAAI3gB,EAAExyB,EAAEnF,GAAG,OAAO23B,GAAG4gB,EAAElB,EAAE1f,EAAE+hC,UAAUt5D,EAAE,CAAC,CACra,SAASk4C,EAAEl4C,EAAEu3B,GAAG2f,GAAE,EAAGqB,IAAIA,GAAE,EAAGd,EAAE9B,GAAGA,GAAG,GAAG4B,GAAE,EAAG,IAAI52C,EAAE61C,EAAE,IAAS,IAAL6B,EAAE9gB,GAAOjQ,EAAEviB,EAAEjF,GAAG,OAAOwnB,MAAMA,EAAEymP,eAAex2O,IAAIv3B,IAAIg3C,MAAM,CAAC,IAAI72C,EAAEmnB,EAAEkmB,SAAS,GAAG,oBAAoBrtC,EAAE,CAACmnB,EAAEkmB,SAAS,KAAKgJ,EAAElvB,EAAE0mP,cAAc,IAAIruQ,EAAEQ,EAAEmnB,EAAEymP,gBAAgBx2O,GAAGA,EAAE7W,EAAQi6L,eAAe,oBAAoBh7M,EAAE2nB,EAAEkmB,SAAS7tC,EAAE2nB,IAAIviB,EAAEjF,IAAIujB,EAAEvjB,GAAGu4C,EAAE9gB,EAAE,MAAMlU,EAAEvjB,GAAGwnB,EAAEviB,EAAEjF,EAAE,CAAC,GAAG,OAAOwnB,EAAE,IAAIziB,GAAE,MAAO,CAAC,IAAI8hC,EAAE5hC,EAAEnF,GAAG,OAAO+mC,GAAGwR,EAAElB,EAAEtQ,EAAE2yB,UAAU/hC,GAAG1yB,GAAE,CAAE,CAAC,OAAOA,CAAC,CAAC,QAAQyiB,EAAE,KAAKkvB,EAAE71C,EAAE42C,GAAE,CAAE,CAAC,CAD1a,qBAAqB/iB,gBAAW,IAASA,UAAUy5O,iBAAY,IAASz5O,UAAUy5O,WAAWC,gBAAgB15O,UAAUy5O,WAAWC,eAAenoP,KAAKyO,UAAUy5O,YAC2Q,IACzPn3N,EAD6PM,GAAE,EAAGP,EAAE,KAAKlB,GAAG,EAAEoB,EAAE,EAAExB,GAAG,EACvc,SAASyB,IAAI,QAAOt2B,EAAQi6L,eAAeplK,EAAEwB,EAAO,CAAC,SAASM,IAAI,GAAG,OAAOR,EAAE,CAAC,IAAI72C,EAAE0gB,EAAQi6L,eAAeplK,EAAEv1C,EAAE,IAAIu3B,GAAE,EAAG,IAAIA,EAAEsf,GAAE,EAAG72C,EAAE,CAAC,QAAQu3B,EAAEuf,KAAKM,GAAE,EAAGP,EAAE,KAAK,CAAC,MAAMO,GAAE,CAAE,CAAO,GAAG,oBAAoBM,EAAEZ,EAAE,WAAWY,EAAEL,EAAE,OAAO,GAAG,qBAAqB82N,eAAe,CAAC,IAAIx2N,EAAE,IAAIw2N,eAAev3N,EAAEe,EAAEy2N,MAAMz2N,EAAE02N,MAAMxgG,UAAUx2H,EAAEP,EAAE,WAAWF,EAAEy2H,YAAY,KAAK,CAAC,MAAMv2H,EAAE,WAAWQ,EAAED,EAAE,EAAE,EAAE,SAASF,EAAEn3C,GAAG62C,EAAE72C,EAAEo3C,IAAIA,GAAE,EAAGN,IAAI,CAAC,SAASqB,EAAEn4C,EAAEu3B,GAAGoe,EAAE2B,GAAE,WAAWt3C,EAAE0gB,EAAQi6L,eAAe,GAAEpjL,EAAE,CAC5d7W,EAAQy6L,sBAAsB,EAAEz6L,EAAQo6L,2BAA2B,EAAEp6L,EAAQw6L,qBAAqB,EAAEx6L,EAAQu6L,wBAAwB,EAAEv6L,EAAQ4tP,mBAAmB,KAAK5tP,EAAQq6L,8BAA8B,EAAEr6L,EAAQ85L,wBAAwB,SAASx6M,GAAGA,EAAEwtC,SAAS,IAAI,EAAE9sB,EAAQ6tP,2BAA2B,WAAWr3N,GAAGK,IAAIL,GAAE,EAAGC,EAAEe,GAAG,EAC1Ux3B,EAAQ8tP,wBAAwB,SAASxuQ,GAAG,EAAEA,GAAG,IAAIA,EAAEylB,QAAQ1c,MAAM,mHAAmHguC,EAAE,EAAE/2C,EAAEg1B,KAAKq2B,MAAM,IAAIrrD,GAAG,CAAC,EAAE0gB,EAAQm6L,iCAAiC,WAAW,OAAOrkK,CAAC,EAAE91B,EAAQ+tP,8BAA8B,WAAW,OAAO1pQ,EAAEjF,EAAE,EAAE4gB,EAAQguP,cAAc,SAAS1uQ,GAAG,OAAOw2C,GAAG,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,IAAIjf,EAAE,EAAE,MAAM,QAAQA,EAAEif,EAAE,IAAI71C,EAAE61C,EAAEA,EAAEjf,EAAE,IAAI,OAAOv3B,GAAG,CAAC,QAAQw2C,EAAE71C,CAAC,CAAC,EAAE+f,EAAQiuP,wBAAwB,WAAW,EAC9fjuP,EAAQg6L,sBAAsB,WAAW,EAAEh6L,EAAQkuP,yBAAyB,SAAS5uQ,EAAEu3B,GAAG,OAAOv3B,GAAG,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,QAAQA,EAAE,EAAE,IAAIW,EAAE61C,EAAEA,EAAEx2C,EAAE,IAAI,OAAOu3B,GAAG,CAAC,QAAQif,EAAE71C,CAAC,CAAC,EAChM+f,EAAQ65L,0BAA0B,SAASv6M,EAAEu3B,EAAE52B,GAAG,IAAIR,EAAEugB,EAAQi6L,eAA8F,OAA/E,kBAAkBh6M,GAAG,OAAOA,EAAaA,EAAE,kBAAZA,EAAEA,EAAEihI,QAA6B,EAAEjhI,EAAER,EAAEQ,EAAER,EAAGQ,EAAER,EAASH,GAAG,KAAK,EAAE,IAAIL,GAAG,EAAE,MAAM,KAAK,EAAEA,EAAE,IAAI,MAAM,KAAK,EAAEA,EAAE,WAAW,MAAM,KAAK,EAAEA,EAAE,IAAI,MAAM,QAAQA,EAAE,IAAmN,OAAzMK,EAAE,CAACkR,GAAG1Q,IAAIgtC,SAASjW,EAAEy2O,cAAchuQ,EAAEs5D,UAAU34D,EAAEotQ,eAAvDpuQ,EAAEgB,EAAEhB,EAAoEkuQ,WAAW,GAAGltQ,EAAER,GAAGH,EAAE6tQ,UAAUltQ,EAAEyhB,EAAExiB,EAAEI,GAAG,OAAO+E,EAAEjF,IAAIE,IAAI+E,EAAEnF,KAAK24C,GAAGd,EAAE9B,GAAGA,GAAG,GAAG4C,GAAE,EAAGJ,EAAElB,EAAEt2C,EAAER,MAAMH,EAAE6tQ,UAAUluQ,EAAEyiB,EAAEtiB,EAAEE,GAAGk3C,GAAGK,IAAIL,GAAE,EAAGC,EAAEe,KAAYl4C,CAAC,EACne0gB,EAAQ+5L,qBAAqBzjK,EAAEt2B,EAAQmuP,sBAAsB,SAAS7uQ,GAAG,IAAIu3B,EAAEif,EAAE,OAAO,WAAW,IAAI71C,EAAE61C,EAAEA,EAAEjf,EAAE,IAAI,OAAOv3B,EAAEolB,MAAMC,KAAKL,UAAU,CAAC,QAAQwxB,EAAE71C,CAAC,CAAC,CAAC,sCCf7J8f,EAAOC,QAAU,EAAjB,6BCHF,QAMiBwlE,IAIH,WACZ,IAWI4oL,EACAC,EAZA1vO,EAAMt/B,SACN8oI,EAAOxpG,EAAI9+B,qBAAqB,QAAQ,GAExC6hB,GAAI,EACJ1hB,EAAO,OACP66B,EAAa,aACbD,EAAqB,qBACrB+jD,EAAO,CAAC,EACR46D,EAAM,CAAC,EACPrY,EAAQ,CAAC,EACTzhG,EAAU,CAAC,EAIf,SAAS4kB,EAAM6/D,EAAI7jG,GACjB,IAAK,IAAIniB,EAAI,EAAGopB,EAAI48F,EAAG/lH,OAAQD,EAAIopB,IAAKppB,EAAG,IAAKmiB,EAAG6jG,EAAGhmH,IAAK,OAAOwjB,EAClE,OAAO,CACT,CACA,SAAS2lE,EAAK68B,EAAI7jG,GAChBgkC,EAAM6/D,GAAI,SAAU/rG,GAElB,OADAkI,EAAGlI,GACI,CACT,GACF,CAEA,SAASm2P,EAAQrjP,EAAOsjP,EAAUC,GAChCvjP,EAAQA,EAAMjrB,GAAQirB,EAAQ,CAACA,GAC/B,IAAIwjP,EAAiBF,GAAYA,EAASzvQ,KACtC66C,EAAO80N,EAAiBF,EAAWC,EACnCh+P,EAAKi+P,EAAiBxjP,EAAM1H,KAAK,IAAMgrP,EACvCx0H,EAAQ9uH,EAAM9sB,OAClB,SAASuwQ,EAAOhgQ,GACd,OAAOA,EAAK5P,KAAO4P,IAASiwE,EAAKjwE,EACnC,CACA,SAASo+B,IACP,OAAOitG,EAGL,IAAK,IAAI40H,KAFThwL,EAAKnuE,GAAM,EACXmpC,GAAQA,IACSunF,EACf78E,EAAMsqN,EAAKjmP,MAAM,KAAMgmP,KAAYrnL,EAAK65C,EAAMytI,GAAOD,KAAYxtI,EAAMytI,GAAQ,GAGrF,CAmBA,OAlBA17O,YAAW,WACTo0D,EAAKp8D,GAAO,SAAS7pB,EAAQiJ,EAAMukQ,GACjC,OAAa,OAATvkQ,EAAsByiC,KAErB8hO,GAAU,eAAe7qP,KAAK1Z,KAAS+jQ,IAC1C/jQ,GAAiC,IAAzBA,EAAKtK,QAAQ,OAAiBquQ,EAAa/jQ,EAAO,MAAQ+jQ,EAAa/jQ,GAG7Eo1B,EAAQp1B,IACNmG,IAAI+oI,EAAI/oI,GAAM,GACO,GAAjBivB,EAAQp1B,GAAcyiC,IAAa7Z,YAAW,WAAc7xB,EAAQiJ,GAAM,EAAM,GAAG,KAG7Fo1B,EAAQp1B,GAAQ,EACZmG,IAAI+oI,EAAI/oI,GAAM,QAClB+gB,EAAOlnB,EAAMyiC,IACf,GACF,GAAG,GACIwhO,CACT,CAEA,SAAS/8O,EAAOlnB,EAAMgW,GACpB,IAAsCooN,EAAlCtwN,EAAKwmB,EAAIn+B,cAAc,UAC3B2X,EAAG2hB,OAAS3hB,EAAG4hB,QAAU5hB,EAAGyiB,GAAsB,WAC3CziB,EAAG0iB,KAAiB,WAAW9W,KAAK5L,EAAG0iB,KAAkB4tM,IAC9DtwN,EAAG2hB,OAAS3hB,EAAGyiB,GAAsB,KACrC6tM,EAAS,EACThpM,EAAQp1B,GAAQ,EAChBgW,IACF,EACAlI,EAAGiyI,MAAQ,EACXjyI,EAAG3Q,IAAM6mQ,EAAUhkQ,IAA+B,IAAvBA,EAAKtK,QAAQ,KAAc,IAAM,KAAOsuQ,EAAUhkQ,EAC7E89H,EAAKkiB,aAAalyI,EAAIgwH,EAAKksE,UAC7B,CAmCA,OAjCAi6D,EAAQ7gP,IAAM8D,EAEd+8O,EAAQrvP,MAAQ,SAAUwgB,EAASjvB,EAAImpC,IACpC,SAAS7M,EAASvtC,GACjBA,EAAIkgC,EAAQ7V,QACX6V,EAAQthC,OAAgCmwQ,EAAQ/uQ,EAAGutC,GAAlCwhO,EAAQ/uQ,EAAGiR,EAAImpC,EACnC,CAHA,EAIF,EAEA20N,EAAQjkQ,KAAO,SAAU4Z,GACvBmqP,EAAanqP,CACf,EACAqqP,EAAQD,QAAU,SAAUjoP,GAC1BioP,EAAUjoP,CACZ,EACAkoP,EAAQO,MAAQ,SAAU//C,EAAM+/C,EAAOj1O,GACrCk1L,EAAOA,EAAK9uN,GAAQ8uN,EAAO,CAACA,GAC5B,IAIuBjwN,EAJnBiwQ,EAAU,GASd,OARCznL,EAAKynI,GAAM,SAAUigD,GACpBpwL,EAAKowL,IAAQD,EAAQ9uQ,GAAM+uQ,EAC7B,KAAM1qN,EAAMyqK,GAAM,SAAUigD,GAAM,OAAOpwL,EAAKowL,EAAI,IAChDF,KAAqBhwQ,EAIrBiwN,EAAKvrM,KAAK,KAHV29G,EAAMriI,GAAOqiI,EAAMriI,IAAQ,GAC3BqiI,EAAMriI,GAAKmB,GAAM6uQ,GACjBj1O,GAAOA,EAAIk1O,IAENR,CACT,EAEAA,EAAQ30N,KAAO,SAAU40N,GACvBD,EAAQ,CAAC,MAAOC,EAClB,EAEOD,CACT,EApHsCvuP,EAAOC,QAASD,EAAOC,QAAUwlE,SACA,2BAAjB,KAAiB,yDCRvE,MAAMwpL,EAAMp3N,OAAO,cAEnB,MAAMq3N,EACJ,cAAWD,GACT,OAAOA,CACT,CAEA,WAAAxoO,CAAa0oO,EAAMhqQ,GAGjB,GAFAA,EAAU0kK,EAAa1kK,GAEnBgqQ,aAAgBD,EAAY,CAC9B,GAAIC,EAAKC,UAAYjqQ,EAAQiqQ,MAC3B,OAAOD,EAEPA,EAAOA,EAAKnwQ,KAEhB,CAEAmwQ,EAAOA,EAAKx3K,OAAOhvE,MAAM,OAAOnF,KAAK,KACrCyB,EAAM,aAAckqP,EAAMhqQ,GAC1Byf,KAAKzf,QAAUA,EACfyf,KAAKwqP,QAAUjqQ,EAAQiqQ,MACvBxqP,KAAKmD,MAAMonP,GAEPvqP,KAAKyqP,SAAWJ,EAClBrqP,KAAK5lB,MAAQ,GAEb4lB,KAAK5lB,MAAQ4lB,KAAKy8N,SAAWz8N,KAAKyqP,OAAOx3O,QAG3C5S,EAAM,OAAQL,KAChB,CAEA,KAAAmD,CAAOonP,GACL,MAAM9vQ,EAAIulB,KAAKzf,QAAQiqQ,MAAQ5mL,EAAGrpF,EAAEmwQ,iBAAmB9mL,EAAGrpF,EAAEowQ,YACtDrpO,EAAIipO,EAAKhnP,MAAM9oB,GAErB,IAAK6mC,EACH,MAAM,IAAIpf,UAAU,uBAAuBqoP,KAG7CvqP,KAAKy8N,cAAoB7jO,IAAT0oB,EAAE,GAAmBA,EAAE,GAAK,GACtB,MAAlBthB,KAAKy8N,WACPz8N,KAAKy8N,SAAW,IAIbn7M,EAAE,GAGLthB,KAAKyqP,OAAS,IAAIG,EAAOtpO,EAAE,GAAIthB,KAAKzf,QAAQiqQ,OAF5CxqP,KAAKyqP,OAASJ,CAIlB,CAEA,QAAAvwQ,GACE,OAAOkmB,KAAK5lB,KACd,CAEA,IAAAglB,CAAM6T,GAGJ,GAFA5S,EAAM,kBAAmB4S,EAASjT,KAAKzf,QAAQiqQ,OAE3CxqP,KAAKyqP,SAAWJ,GAAOp3O,IAAYo3O,EACrC,OAAO,EAGT,GAAuB,kBAAZp3O,EACT,IACEA,EAAU,IAAI23O,EAAO33O,EAASjT,KAAKzf,QACrC,CAAE,MAAOsrB,GACP,OAAO,CACT,CAGF,OAAOg/O,EAAI53O,EAASjT,KAAKy8N,SAAUz8N,KAAKyqP,OAAQzqP,KAAKzf,QACvD,CAEA,UAAAuqQ,CAAYP,EAAMhqQ,GAChB,KAAMgqQ,aAAgBD,GACpB,MAAM,IAAIpoP,UAAU,4BAGtB,MAAsB,KAAlBlC,KAAKy8N,SACY,KAAfz8N,KAAK5lB,OAGF,IAAI2wQ,EAAMR,EAAKnwQ,MAAOmG,GAAS6e,KAAKY,KAAK5lB,OACrB,KAAlBmwQ,EAAK9tB,SACK,KAAf8tB,EAAKnwQ,OAGF,IAAI2wQ,EAAM/qP,KAAK5lB,MAAOmG,GAAS6e,KAAKmrP,EAAKE,WAGlDlqQ,EAAU0kK,EAAa1kK,IAGXyqQ,mBACM,aAAfhrP,KAAK5lB,OAAuC,aAAfmwQ,EAAKnwQ,YAGhCmG,EAAQyqQ,oBACVhrP,KAAK5lB,MAAMmmD,WAAW,WAAagqN,EAAKnwQ,MAAMmmD,WAAW,iBAKxDvgC,KAAKy8N,SAASl8L,WAAW,OAAQgqN,EAAK9tB,SAASl8L,WAAW,WAI1DvgC,KAAKy8N,SAASl8L,WAAW,OAAQgqN,EAAK9tB,SAASl8L,WAAW,UAK3DvgC,KAAKyqP,OAAOx3O,UAAYs3O,EAAKE,OAAOx3O,UACrCjT,KAAKy8N,SAASxiP,SAAS,OAAQswQ,EAAK9tB,SAASxiP,SAAS,WAIpD4wQ,EAAI7qP,KAAKyqP,OAAQ,IAAKF,EAAKE,OAAQlqQ,IACrCyf,KAAKy8N,SAASl8L,WAAW,MAAQgqN,EAAK9tB,SAASl8L,WAAW,UAIxDsqN,EAAI7qP,KAAKyqP,OAAQ,IAAKF,EAAKE,OAAQlqQ,IACrCyf,KAAKy8N,SAASl8L,WAAW,MAAQgqN,EAAK9tB,SAASl8L,WAAW,UAI9D,EAGFnlC,EAAOC,QAAUivP,EAEjB,MAAMrlG,EAAe,EAAQ,QACrBgmG,OAAQrnL,EAAE,EAAErpF,GAAM,EAAQ,OAC5BswQ,EAAM,EAAQ,MACdxqP,EAAQ,EAAQ,OAChBuqP,EAAS,EAAQ,OACjBG,EAAQ,EAAQ,8BC5ItB,MAAMG,EAAmB,OAGzB,MAAMH,EACJ,WAAAlpO,CAAa69F,EAAOn/H,GAGlB,GAFAA,EAAU0kK,EAAa1kK,GAEnBm/H,aAAiBqrI,EACnB,OACErrI,EAAM8qI,UAAYjqQ,EAAQiqQ,OAC1B9qI,EAAMsrI,sBAAwBzqQ,EAAQyqQ,kBAE/BtrI,EAEA,IAAIqrI,EAAMrrI,EAAMyrI,IAAK5qQ,GAIhC,GAAIm/H,aAAiB4qI,EAKnB,OAHAtqP,KAAKmrP,IAAMzrI,EAAMtlI,MACjB4lB,KAAKywB,IAAM,CAAC,CAACivF,IACb1/G,KAAKorP,eAAYxyP,EACVoH,KAsBT,GAnBAA,KAAKzf,QAAUA,EACfyf,KAAKwqP,QAAUjqQ,EAAQiqQ,MACvBxqP,KAAKgrP,oBAAsBzqQ,EAAQyqQ,kBAKnChrP,KAAKmrP,IAAMzrI,EAAM3sC,OAAO7sF,QAAQglQ,EAAkB,KAGlDlrP,KAAKywB,IAAMzwB,KAAKmrP,IACbpnP,MAAM,MAENjmB,KAAIrD,GAAKulB,KAAKqrP,WAAW5wQ,EAAEs4F,UAI3B/uE,QAAO1oB,GAAKA,EAAE9B,UAEZwmB,KAAKywB,IAAIj3C,OACZ,MAAM,IAAI0oB,UAAU,yBAAyBlC,KAAKmrP,OAIpD,GAAInrP,KAAKywB,IAAIj3C,OAAS,EAAG,CAEvB,MAAMsnD,EAAQ9gC,KAAKywB,IAAI,GAEvB,GADAzwB,KAAKywB,IAAMzwB,KAAKywB,IAAIzsB,QAAO1oB,IAAMgwQ,EAAUhwQ,EAAE,MACrB,IAApB0kB,KAAKywB,IAAIj3C,OACXwmB,KAAKywB,IAAM,CAACqQ,QACP,GAAI9gC,KAAKywB,IAAIj3C,OAAS,EAE3B,IAAK,MAAM8B,KAAK0kB,KAAKywB,IACnB,GAAiB,IAAbn1C,EAAE9B,QAAgB+xQ,EAAMjwQ,EAAE,IAAK,CACjC0kB,KAAKywB,IAAM,CAACn1C,GACZ,KACF,CAGN,CAEA0kB,KAAKorP,eAAYxyP,CACnB,CAEA,SAAI8mH,GACF,QAAuB9mH,IAAnBoH,KAAKorP,UAAyB,CAChCprP,KAAKorP,UAAY,GACjB,IAAK,IAAI7xQ,EAAI,EAAGA,EAAIymB,KAAKywB,IAAIj3C,OAAQD,IAAK,CACpCA,EAAI,IACNymB,KAAKorP,WAAa,MAEpB,MAAMI,EAAQxrP,KAAKywB,IAAIl3C,GACvB,IAAK,IAAIykB,EAAI,EAAGA,EAAIwtP,EAAMhyQ,OAAQwkB,IAC5BA,EAAI,IACNgC,KAAKorP,WAAa,KAEpBprP,KAAKorP,WAAaI,EAAMxtP,GAAGlkB,WAAWi5F,MAE1C,CACF,CACA,OAAO/yE,KAAKorP,SACd,CAEA,MAAA7/M,GACE,OAAOvrC,KAAK0/G,KACd,CAEA,QAAA5lI,GACE,OAAOkmB,KAAK0/G,KACd,CAEA,UAAA2rI,CAAY3rI,GAGV,MAGM+rI,IAFHzrP,KAAKzf,QAAQyqQ,mBAAqBU,IAClC1rP,KAAKzf,QAAQiqQ,OAASmB,IACE,IAAMjsI,EAC3BksI,EAASx5I,EAAMtpG,IAAI2iP,GACzB,GAAIG,EACF,OAAOA,EAGT,MAAMpB,EAAQxqP,KAAKzf,QAAQiqQ,MAErB7qJ,EAAK6qJ,EAAQ5mL,EAAGrpF,EAAEsxQ,kBAAoBjoL,EAAGrpF,EAAEuxQ,aACjDpsI,EAAQA,EAAMx5H,QAAQy5G,EAAIosJ,EAAc/rP,KAAKzf,QAAQyqQ,oBACrD3qP,EAAM,iBAAkBq/G,GAGxBA,EAAQA,EAAMx5H,QAAQ09E,EAAGrpF,EAAEyxQ,gBAAiBC,GAC5C5rP,EAAM,kBAAmBq/G,GAGzBA,EAAQA,EAAMx5H,QAAQ09E,EAAGrpF,EAAE2xQ,WAAYC,GACvC9rP,EAAM,aAAcq/G,GAGpBA,EAAQA,EAAMx5H,QAAQ09E,EAAGrpF,EAAE6xQ,WAAYC,GACvChsP,EAAM,aAAcq/G,GAKpB,IAAI4sI,EAAY5sI,EACb37G,MAAM,KACNjmB,KAAIysQ,GAAQgC,EAAgBhC,EAAMvqP,KAAKzf,WACvCqe,KAAK,KACLmF,MAAM,OAENjmB,KAAIysQ,GAAQiC,EAAYjC,EAAMvqP,KAAKzf,WAElCiqQ,IAEF8B,EAAYA,EAAUtoP,QAAOumP,IAC3BlqP,EAAM,uBAAwBkqP,EAAMvqP,KAAKzf,WAChCgqQ,EAAKhnP,MAAMqgE,EAAGrpF,EAAEmwQ,sBAG7BrqP,EAAM,aAAcisP,GAKpB,MAAMG,EAAW,IAAI97N,IACf+7N,EAAcJ,EAAUxuQ,KAAIysQ,GAAQ,IAAID,EAAWC,EAAMvqP,KAAKzf,WACpE,IAAK,MAAMgqQ,KAAQmC,EAAa,CAC9B,GAAIpB,EAAUf,GACZ,MAAO,CAACA,GAEVkC,EAASh8N,IAAI85N,EAAKnwQ,MAAOmwQ,EAC3B,CACIkC,EAAStqQ,KAAO,GAAKsqQ,EAASj8N,IAAI,KACpCi8N,EAASr7N,OAAO,IAGlB,MAAMvzC,EAAS,IAAI4uQ,EAAS/mM,UAE5B,OADA0sD,EAAM3hF,IAAIg7N,EAAS5tQ,GACZA,CACT,CAEA,UAAAitQ,CAAYprI,EAAOn/H,GACjB,KAAMm/H,aAAiBqrI,GACrB,MAAM,IAAI7oP,UAAU,uBAGtB,OAAOlC,KAAKywB,IAAIuI,MAAM2zN,GAElBC,EAAcD,EAAiBpsQ,IAC/Bm/H,EAAMjvF,IAAIuI,MAAM6zN,GAEZD,EAAcC,EAAkBtsQ,IAChCosQ,EAAgBjtN,OAAOotN,GACdD,EAAiBntN,OAAOqtN,GACtBD,EAAehC,WAAWiC,EAAiBxsQ,UAOhE,CAGA,IAAA6e,CAAM6T,GACJ,IAAKA,EACH,OAAO,EAGT,GAAuB,kBAAZA,EACT,IACEA,EAAU,IAAI23O,EAAO33O,EAASjT,KAAKzf,QACrC,CAAE,MAAOsrB,GACP,OAAO,CACT,CAGF,IAAK,IAAItyB,EAAI,EAAGA,EAAIymB,KAAKywB,IAAIj3C,OAAQD,IACnC,GAAIyzQ,EAAQhtP,KAAKywB,IAAIl3C,GAAI05B,EAASjT,KAAKzf,SACrC,OAAO,EAGX,OAAO,CACT,EAGF6a,EAAOC,QAAU0vP,EAEjB,MACM34I,EAAQ,IADF,EAAQ,QAGd6yC,EAAe,EAAQ,OACvBqlG,EAAa,EAAQ,OACrBjqP,EAAQ,EAAQ,OAChBuqP,EAAS,EAAQ,QAErBK,OAAQrnL,EAAE,EACVrpF,EAAC,sBACD0xQ,EAAqB,iBACrBE,EAAgB,iBAChBE,GACE,EAAQ,QACN,wBAAEX,EAAuB,WAAEC,GAAe,EAAQ,OAElDL,EAAYhwQ,GAAiB,aAAZA,EAAElB,MACnBmxQ,EAAQjwQ,GAAiB,KAAZA,EAAElB,MAIfwyQ,EAAgB,CAACF,EAAansQ,KAClC,IAAI1C,GAAS,EACb,MAAMovQ,EAAuBP,EAAYnpQ,QACzC,IAAI2pQ,EAAiBD,EAAqB5oP,MAE1C,KAAOxmB,GAAUovQ,EAAqBzzQ,QACpCqE,EAASovQ,EAAqBvtN,OAAOytN,GAC5BD,EAAepC,WAAWqC,EAAiB5sQ,KAGpD2sQ,EAAiBD,EAAqB5oP,MAGxC,OAAOxmB,GAMH0uQ,EAAkB,CAAChC,EAAMhqQ,KAC7B8f,EAAM,OAAQkqP,EAAMhqQ,GACpBgqQ,EAAO6C,EAAc7C,EAAMhqQ,GAC3B8f,EAAM,QAASkqP,GACfA,EAAO8C,EAAc9C,EAAMhqQ,GAC3B8f,EAAM,SAAUkqP,GAChBA,EAAO+C,EAAe/C,EAAMhqQ,GAC5B8f,EAAM,SAAUkqP,GAChBA,EAAOgD,EAAahD,EAAMhqQ,GAC1B8f,EAAM,QAASkqP,GACRA,GAGHiD,EAAM3hQ,IAAOA,GAA2B,MAArBA,EAAG4a,eAAgC,MAAP5a,EAS/CwhQ,EAAgB,CAAC9C,EAAMhqQ,IACpBgqQ,EACJx3K,OACAhvE,MAAM,OACNjmB,KAAKxC,GAAMmyQ,EAAanyQ,EAAGiF,KAC3Bqe,KAAK,KAGJ6uP,EAAe,CAAClD,EAAMhqQ,KAC1B,MAAM9F,EAAI8F,EAAQiqQ,MAAQ5mL,EAAGrpF,EAAEmzQ,YAAc9pL,EAAGrpF,EAAEozQ,OAClD,OAAOpD,EAAKrkQ,QAAQzL,GAAG,CAAC6wC,EAAGqG,EAAGrQ,EAAGhiB,EAAGsgG,KAElC,IAAIxxF,EAoBJ,OArBA/N,EAAM,QAASkqP,EAAMj/N,EAAGqG,EAAGrQ,EAAGhiB,EAAGsgG,GAG7B4tJ,EAAI77N,GACNvjB,EAAM,GACGo/O,EAAIlsO,GACblT,EAAM,KAAKujB,WAAWA,EAAI,UACjB67N,EAAIluP,GAEb8O,EAAM,KAAKujB,KAAKrQ,QAAQqQ,MAAMrQ,EAAI,QACzBs+E,GACTv/F,EAAM,kBAAmBu/F,GACzBxxF,EAAM,KAAKujB,KAAKrQ,KAAKhiB,KAAKsgG,MACrBjuE,MAAMrQ,EAAI,SAGflT,EAAM,KAAKujB,KAAKrQ,KAAKhiB,MAChBqyB,MAAMrQ,EAAI,QAGjBjhB,EAAM,eAAgB+N,GACfA,IACR,EAWGg/O,EAAgB,CAAC7C,EAAMhqQ,IACpBgqQ,EACJx3K,OACAhvE,MAAM,OACNjmB,KAAKxC,GAAMsyQ,EAAatyQ,EAAGiF,KAC3Bqe,KAAK,KAGJgvP,EAAe,CAACrD,EAAMhqQ,KAC1B8f,EAAM,QAASkqP,EAAMhqQ,GACrB,MAAM9F,EAAI8F,EAAQiqQ,MAAQ5mL,EAAGrpF,EAAEszQ,YAAcjqL,EAAGrpF,EAAEuzQ,OAC5C57N,EAAI3xC,EAAQyqQ,kBAAoB,KAAO,GAC7C,OAAOT,EAAKrkQ,QAAQzL,GAAG,CAAC6wC,EAAGqG,EAAGrQ,EAAGhiB,EAAGsgG,KAElC,IAAIxxF,EA2CJ,OA5CA/N,EAAM,QAASkqP,EAAMj/N,EAAGqG,EAAGrQ,EAAGhiB,EAAGsgG,GAG7B4tJ,EAAI77N,GACNvjB,EAAM,GACGo/O,EAAIlsO,GACblT,EAAM,KAAKujB,QAAQO,OAAOP,EAAI,UACrB67N,EAAIluP,GAEX8O,EADQ,MAANujB,EACI,KAAKA,KAAKrQ,MAAM4Q,MAAMP,MAAMrQ,EAAI,QAEhC,KAAKqQ,KAAKrQ,MAAM4Q,OAAOP,EAAI,UAE1BiuE,GACTv/F,EAAM,kBAAmBu/F,GAGrBxxF,EAFM,MAANujB,EACQ,MAANrQ,EACI,KAAKqQ,KAAKrQ,KAAKhiB,KAAKsgG,MACrBjuE,KAAKrQ,MAAMhiB,EAAI,MAEd,KAAKqyB,KAAKrQ,KAAKhiB,KAAKsgG,MACrBjuE,MAAMrQ,EAAI,QAGX,KAAKqQ,KAAKrQ,KAAKhiB,KAAKsgG,OACpBjuE,EAAI,YAGZtxB,EAAM,SAGF+N,EAFM,MAANujB,EACQ,MAANrQ,EACI,KAAKqQ,KAAKrQ,KAAKhiB,IAClB4yB,MAAMP,KAAKrQ,MAAMhiB,EAAI,MAElB,KAAKqyB,KAAKrQ,KAAKhiB,IAClB4yB,MAAMP,MAAMrQ,EAAI,QAGf,KAAKqQ,KAAKrQ,KAAKhiB,OACfqyB,EAAI,WAIdtxB,EAAM,eAAgB+N,GACfA,IACR,EAGGk/O,EAAiB,CAAC/C,EAAMhqQ,KAC5B8f,EAAM,iBAAkBkqP,EAAMhqQ,GACvBgqQ,EACJxmP,MAAM,OACNjmB,KAAKxC,GAAMyyQ,EAAczyQ,EAAGiF,KAC5Bqe,KAAK,MAGJmvP,EAAgB,CAACxD,EAAMhqQ,KAC3BgqQ,EAAOA,EAAKx3K,OACZ,MAAMt4F,EAAI8F,EAAQiqQ,MAAQ5mL,EAAGrpF,EAAEyzQ,aAAepqL,EAAGrpF,EAAE0zQ,QACnD,OAAO1D,EAAKrkQ,QAAQzL,GAAG,CAAC2zB,EAAK8/O,EAAMv8N,EAAGrQ,EAAGhiB,EAAGsgG,KAC1Cv/F,EAAM,SAAUkqP,EAAMn8O,EAAK8/O,EAAMv8N,EAAGrQ,EAAGhiB,EAAGsgG,GAC1C,MAAMuuJ,EAAKX,EAAI77N,GACTy8N,EAAKD,GAAMX,EAAIlsO,GACf+sO,EAAKD,GAAMZ,EAAIluP,GACfgvP,EAAOD,EA+Db,MA7Da,MAATH,GAAgBI,IAClBJ,EAAO,IAKTtuJ,EAAKr/G,EAAQyqQ,kBAAoB,KAAO,GAEpCmD,EAGA//O,EAFW,MAAT8/O,GAAyB,MAATA,EAEZ,WAGA,IAECA,GAAQI,GAGbF,IACF9sO,EAAI,GAENhiB,EAAI,EAES,MAAT4uP,GAGFA,EAAO,KACHE,GACFz8N,GAAKA,EAAI,EACTrQ,EAAI,EACJhiB,EAAI,IAEJgiB,GAAKA,EAAI,EACThiB,EAAI,IAEY,OAAT4uP,IAGTA,EAAO,IACHE,EACFz8N,GAAKA,EAAI,EAETrQ,GAAKA,EAAI,GAIA,MAAT4sO,IACFtuJ,EAAK,MAGPxxF,EAAM,GAAG8/O,EAAOv8N,KAAKrQ,KAAKhiB,IAAIsgG,KACrBwuJ,EACThgP,EAAM,KAAKujB,QAAQiuE,OAAQjuE,EAAI,UACtB08N,IACTjgP,EAAM,KAAKujB,KAAKrQ,MAAMs+E,MACjBjuE,MAAMrQ,EAAI,SAGjBjhB,EAAM,gBAAiB+N,GAEhBA,IACR,EAKGm/O,EAAe,CAAChD,EAAMhqQ,KAC1B8f,EAAM,eAAgBkqP,EAAMhqQ,GAErBgqQ,EACJx3K,OACA7sF,QAAQ09E,EAAGrpF,EAAEg0Q,MAAO,KAGnB/B,EAAc,CAACjC,EAAMhqQ,KACzB8f,EAAM,cAAekqP,EAAMhqQ,GACpBgqQ,EACJx3K,OACA7sF,QAAQ09E,EAAGrjF,EAAQyqQ,kBAAoBzwQ,EAAEi0Q,QAAUj0Q,EAAEk0Q,MAAO,KAS3D1C,EAAgB2C,GAAS,CAACC,EAC9Br7P,EAAMs7P,EAAIC,EAAIj0I,EAAIk0I,EAAKngE,EACvBxxK,EAAI4xO,EAAIC,EAAIz0I,EAAI00I,IA2BT,GAzBL37P,EADEk6P,EAAIoB,GACC,GACEpB,EAAIqB,GACN,KAAKD,QAASF,EAAQ,KAAO,KAC3BlB,EAAI5yI,GACN,KAAKg0I,KAAMC,MAAOH,EAAQ,KAAO,KAC/BI,EACF,KAAKx7P,IAEL,KAAKA,IAAOo7P,EAAQ,KAAO,QAIlCvxO,EADEqwO,EAAIuB,GACD,GACIvB,EAAIwB,GACR,KAAKD,EAAK,UACNvB,EAAIjzI,GACR,IAAIw0I,MAAOC,EAAK,QACZC,EACJ,KAAKF,KAAMC,KAAMz0I,KAAM00I,IACnBP,EACJ,IAAIK,KAAMC,MAAOz0I,EAAK,MAEtB,KAAKp9F,MAGW41D,OAGnBi6K,EAAU,CAACv8N,EAAKxd,EAAS1yB,KAC7B,IAAK,IAAIhH,EAAI,EAAGA,EAAIk3C,EAAIj3C,OAAQD,IAC9B,IAAKk3C,EAAIl3C,GAAG6lB,KAAK6T,GACf,OAAO,EAIX,GAAIA,EAAQi8O,WAAW11Q,SAAW+G,EAAQyqQ,kBAAmB,CAM3D,IAAK,IAAIzxQ,EAAI,EAAGA,EAAIk3C,EAAIj3C,OAAQD,IAE9B,GADA8mB,EAAMowB,EAAIl3C,GAAGkxQ,QACTh6N,EAAIl3C,GAAGkxQ,SAAWH,EAAWD,KAI7B55N,EAAIl3C,GAAGkxQ,OAAOyE,WAAW11Q,OAAS,EAAG,CACvC,MAAM21Q,EAAU1+N,EAAIl3C,GAAGkxQ,OACvB,GAAI0E,EAAQ/rE,QAAUnwK,EAAQmwK,OAC1B+rE,EAAQC,QAAUn8O,EAAQm8O,OAC1BD,EAAQE,QAAUp8O,EAAQo8O,MAC5B,OAAO,CAEX,CAIF,OAAO,CACT,CAEA,OAAO,0BCxiBT,MAAMhvP,EAAQ,EAAQ,QAChB,WAAEivP,EAAU,iBAAEC,GAAqB,EAAQ,QACzCtE,OAAQrnL,EAAE,EAAErpF,GAAM,EAAQ,OAE5B0qK,EAAe,EAAQ,QACvB,mBAAEuqG,GAAuB,EAAQ,OACvC,MAAM5E,EACJ,WAAA/oO,CAAa5O,EAAS1yB,GAGpB,GAFAA,EAAU0kK,EAAa1kK,GAEnB0yB,aAAmB23O,EAAQ,CAC7B,GAAI33O,EAAQu3O,UAAYjqQ,EAAQiqQ,OAC5Bv3O,EAAQ+3O,sBAAwBzqQ,EAAQyqQ,kBAC1C,OAAO/3O,EAEPA,EAAUA,EAAQA,OAEtB,MAAO,GAAuB,kBAAZA,EAChB,MAAM,IAAI/Q,UAAU,uDAAuD+Q,OAG7E,GAAIA,EAAQz5B,OAAS81Q,EACnB,MAAM,IAAIptP,UACR,0BAA0BotP,gBAI9BjvP,EAAM,SAAU4S,EAAS1yB,GACzByf,KAAKzf,QAAUA,EACfyf,KAAKwqP,QAAUjqQ,EAAQiqQ,MAGvBxqP,KAAKgrP,oBAAsBzqQ,EAAQyqQ,kBAEnC,MAAM1pO,EAAIrO,EAAQ8/D,OAAOxvE,MAAMhjB,EAAQiqQ,MAAQ5mL,EAAGrpF,EAAEk1Q,OAAS7rL,EAAGrpF,EAAEm1Q,OAElE,IAAKpuO,EACH,MAAM,IAAIpf,UAAU,oBAAoB+Q,KAU1C,GAPAjT,KAAKmrP,IAAMl4O,EAGXjT,KAAKojL,OAAS9hK,EAAE,GAChBthB,KAAKovP,OAAS9tO,EAAE,GAChBthB,KAAKqvP,OAAS/tO,EAAE,GAEZthB,KAAKojL,MAAQmsE,GAAoBvvP,KAAKojL,MAAQ,EAChD,MAAM,IAAIlhL,UAAU,yBAGtB,GAAIlC,KAAKovP,MAAQG,GAAoBvvP,KAAKovP,MAAQ,EAChD,MAAM,IAAIltP,UAAU,yBAGtB,GAAIlC,KAAKqvP,MAAQE,GAAoBvvP,KAAKqvP,MAAQ,EAChD,MAAM,IAAIntP,UAAU,yBAIjBof,EAAE,GAGLthB,KAAKkvP,WAAa5tO,EAAE,GAAGvd,MAAM,KAAKjmB,KAAK+N,IACrC,GAAI,WAAWuT,KAAKvT,GAAK,CACvB,MAAMgjB,GAAOhjB,EACb,GAAIgjB,GAAO,GAAKA,EAAM0gP,EACpB,OAAO1gP,CAEX,CACA,OAAOhjB,KATTmU,KAAKkvP,WAAa,GAapBlvP,KAAK2vP,MAAQruO,EAAE,GAAKA,EAAE,GAAGvd,MAAM,KAAO,GACtC/D,KAAKurC,QACP,CAEA,MAAAA,GAKE,OAJAvrC,KAAKiT,QAAU,GAAGjT,KAAKojL,SAASpjL,KAAKovP,SAASpvP,KAAKqvP,QAC/CrvP,KAAKkvP,WAAW11Q,SAClBwmB,KAAKiT,SAAW,IAAIjT,KAAKkvP,WAAWtwP,KAAK,QAEpCoB,KAAKiT,OACd,CAEA,QAAAn5B,GACE,OAAOkmB,KAAKiT,OACd,CAEA,OAAAiiE,CAASpuB,GAEP,GADAzmD,EAAM,iBAAkBL,KAAKiT,QAASjT,KAAKzf,QAASumE,KAC9CA,aAAiB8jM,GAAS,CAC9B,GAAqB,kBAAV9jM,GAAsBA,IAAU9mD,KAAKiT,QAC9C,OAAO,EAET6zC,EAAQ,IAAI8jM,EAAO9jM,EAAO9mD,KAAKzf,QACjC,CAEA,OAAIumE,EAAM7zC,UAAYjT,KAAKiT,QAClB,EAGFjT,KAAK4vP,YAAY9oM,IAAU9mD,KAAK6vP,WAAW/oM,EACpD,CAEA,WAAA8oM,CAAa9oM,GAKX,OAJMA,aAAiB8jM,IACrB9jM,EAAQ,IAAI8jM,EAAO9jM,EAAO9mD,KAAKzf,UAI/BivQ,EAAmBxvP,KAAKojL,MAAOt8H,EAAMs8H,QACrCosE,EAAmBxvP,KAAKovP,MAAOtoM,EAAMsoM,QACrCI,EAAmBxvP,KAAKqvP,MAAOvoM,EAAMuoM,MAEzC,CAEA,UAAAQ,CAAY/oM,GAMV,GALMA,aAAiB8jM,IACrB9jM,EAAQ,IAAI8jM,EAAO9jM,EAAO9mD,KAAKzf,UAI7Byf,KAAKkvP,WAAW11Q,SAAWstE,EAAMooM,WAAW11Q,OAC9C,OAAQ,EACH,IAAKwmB,KAAKkvP,WAAW11Q,QAAUstE,EAAMooM,WAAW11Q,OACrD,OAAO,EACF,IAAKwmB,KAAKkvP,WAAW11Q,SAAWstE,EAAMooM,WAAW11Q,OACtD,OAAO,EAGT,IAAID,EAAI,EACR,EAAG,CACD,MAAMoB,EAAIqlB,KAAKkvP,WAAW31Q,GACpB24B,EAAI40C,EAAMooM,WAAW31Q,GAE3B,GADA8mB,EAAM,qBAAsB9mB,EAAGoB,EAAGu3B,QACxBtZ,IAANje,QAAyBie,IAANsZ,EACrB,OAAO,EACF,QAAUtZ,IAANsZ,EACT,OAAO,EACF,QAAUtZ,IAANje,EACT,OAAQ,EACH,GAAIA,IAAMu3B,EAGf,OAAOs9O,EAAmB70Q,EAAGu3B,EAEjC,SAAW34B,EACb,CAEA,YAAAu2Q,CAAchpM,GACNA,aAAiB8jM,IACrB9jM,EAAQ,IAAI8jM,EAAO9jM,EAAO9mD,KAAKzf,UAGjC,IAAIhH,EAAI,EACR,EAAG,CACD,MAAMoB,EAAIqlB,KAAK2vP,MAAMp2Q,GACf24B,EAAI40C,EAAM6oM,MAAMp2Q,GAEtB,GADA8mB,EAAM,gBAAiB9mB,EAAGoB,EAAGu3B,QACnBtZ,IAANje,QAAyBie,IAANsZ,EACrB,OAAO,EACF,QAAUtZ,IAANsZ,EACT,OAAO,EACF,QAAUtZ,IAANje,EACT,OAAQ,EACH,GAAIA,IAAMu3B,EAGf,OAAOs9O,EAAmB70Q,EAAGu3B,EAEjC,SAAW34B,EACb,CAIA,GAAAyzL,CAAK+iF,EAAS9rG,EAAY+rG,GACxB,OAAQD,GACN,IAAK,WACH/vP,KAAKkvP,WAAW11Q,OAAS,EACzBwmB,KAAKqvP,MAAQ,EACbrvP,KAAKovP,MAAQ,EACbpvP,KAAKojL,QACLpjL,KAAKgtK,IAAI,MAAO/oB,EAAY+rG,GAC5B,MACF,IAAK,WACHhwP,KAAKkvP,WAAW11Q,OAAS,EACzBwmB,KAAKqvP,MAAQ,EACbrvP,KAAKovP,QACLpvP,KAAKgtK,IAAI,MAAO/oB,EAAY+rG,GAC5B,MACF,IAAK,WAIHhwP,KAAKkvP,WAAW11Q,OAAS,EACzBwmB,KAAKgtK,IAAI,QAAS/oB,EAAY+rG,GAC9BhwP,KAAKgtK,IAAI,MAAO/oB,EAAY+rG,GAC5B,MAGF,IAAK,aAC4B,IAA3BhwP,KAAKkvP,WAAW11Q,QAClBwmB,KAAKgtK,IAAI,QAAS/oB,EAAY+rG,GAEhChwP,KAAKgtK,IAAI,MAAO/oB,EAAY+rG,GAC5B,MAEF,IAAK,QAMc,IAAfhwP,KAAKovP,OACU,IAAfpvP,KAAKqvP,OACsB,IAA3BrvP,KAAKkvP,WAAW11Q,QAEhBwmB,KAAKojL,QAEPpjL,KAAKovP,MAAQ,EACbpvP,KAAKqvP,MAAQ,EACbrvP,KAAKkvP,WAAa,GAClB,MACF,IAAK,QAKgB,IAAflvP,KAAKqvP,OAA0C,IAA3BrvP,KAAKkvP,WAAW11Q,QACtCwmB,KAAKovP,QAEPpvP,KAAKqvP,MAAQ,EACbrvP,KAAKkvP,WAAa,GAClB,MACF,IAAK,QAK4B,IAA3BlvP,KAAKkvP,WAAW11Q,QAClBwmB,KAAKqvP,QAEPrvP,KAAKkvP,WAAa,GAClB,MAGF,IAAK,MAAO,CACV,MAAMz/O,EAAO7M,OAAOotP,GAAkB,EAAI,EAE1C,IAAK/rG,IAAiC,IAAnB+rG,EACjB,MAAM,IAAItsP,MAAM,mDAGlB,GAA+B,IAA3B1D,KAAKkvP,WAAW11Q,OAClBwmB,KAAKkvP,WAAa,CAACz/O,OACd,CACL,IAAIl2B,EAAIymB,KAAKkvP,WAAW11Q,OACxB,OAASD,GAAK,GACsB,kBAAvBymB,KAAKkvP,WAAW31Q,KACzBymB,KAAKkvP,WAAW31Q,KAChBA,GAAK,GAGT,IAAW,IAAPA,EAAU,CAEZ,GAAI0qK,IAAejkJ,KAAKkvP,WAAWtwP,KAAK,OAA2B,IAAnBoxP,EAC9C,MAAM,IAAItsP,MAAM,yDAElB1D,KAAKkvP,WAAW7zQ,KAAKo0B,EACvB,CACF,CACA,GAAIw0I,EAAY,CAGd,IAAIirG,EAAa,CAACjrG,EAAYx0I,IACP,IAAnBugP,IACFd,EAAa,CAACjrG,IAE2C,IAAvDurG,EAAmBxvP,KAAKkvP,WAAW,GAAIjrG,GACrC3iJ,MAAMtB,KAAKkvP,WAAW,MACxBlvP,KAAKkvP,WAAaA,GAGpBlvP,KAAKkvP,WAAaA,CAEtB,CACA,KACF,CACA,QACE,MAAM,IAAIxrP,MAAM,+BAA+BqsP,KAMnD,OAJA/vP,KAAKmrP,IAAMnrP,KAAKurC,SACZvrC,KAAK2vP,MAAMn2Q,SACbwmB,KAAKmrP,KAAO,IAAInrP,KAAK2vP,MAAM/wP,KAAK,QAE3BoB,IACT,EAGF5E,EAAOC,QAAUuvP,yBC7SjB,MAAMznP,EAAQ,EAAQ,OAKtB/H,EAAOC,QAJO,CAAC4X,EAAS1yB,KACtB,MAAM3F,EAAIuoB,EAAM8P,EAAQ8/D,OAAO7sF,QAAQ,SAAU,IAAK3F,GACtD,OAAO3F,EAAIA,EAAEq4B,QAAU,4BCHzB,MAAM86E,EAAK,EAAQ,OACbkiK,EAAM,EAAQ,OACd9yJ,EAAK,EAAQ,OACbmmB,EAAM,EAAQ,OACdzmB,EAAK,EAAQ,OACb4nB,EAAM,EAAQ,OA8CpBrpH,EAAOC,QA5CK,CAAC1gB,EAAG25C,EAAIpiB,EAAGs4O,KACrB,OAAQl2N,GACN,IAAK,MAOH,MANiB,kBAAN35C,IACTA,EAAIA,EAAEs4B,SAES,kBAANf,IACTA,EAAIA,EAAEe,SAEDt4B,IAAMu3B,EAEf,IAAK,MAOH,MANiB,kBAANv3B,IACTA,EAAIA,EAAEs4B,SAES,kBAANf,IACTA,EAAIA,EAAEe,SAEDt4B,IAAMu3B,EAEf,IAAK,GACL,IAAK,IACL,IAAK,KACH,OAAO67E,EAAGpzG,EAAGu3B,EAAGs4O,GAElB,IAAK,KACH,OAAOyF,EAAIt1Q,EAAGu3B,EAAGs4O,GAEnB,IAAK,IACH,OAAOrtJ,EAAGxiH,EAAGu3B,EAAGs4O,GAElB,IAAK,KACH,OAAOlnI,EAAI3oI,EAAGu3B,EAAGs4O,GAEnB,IAAK,IACH,OAAO3tJ,EAAGliH,EAAGu3B,EAAGs4O,GAElB,IAAK,KACH,OAAO/lI,EAAI9pI,EAAGu3B,EAAGs4O,GAEnB,QACE,MAAM,IAAItoP,UAAU,qBAAqBoyB,KAC7C,yBCjDF,MAAMs2N,EAAS,EAAQ,OACjBznP,EAAQ,EAAQ,QACd8nP,OAAQrnL,EAAE,EAAErpF,GAAM,EAAQ,OAyDlC6gB,EAAOC,QAvDQ,CAAC4X,EAAS1yB,KACvB,GAAI0yB,aAAmB23O,EACrB,OAAO33O,EAOT,GAJuB,kBAAZA,IACTA,EAAUpQ,OAAOoQ,IAGI,kBAAZA,EACT,OAAO,KAKT,IAAI1P,EAAQ,KACZ,IAHAhjB,EAAUA,GAAW,CAAC,GAGT2vQ,IAEN,CAUL,MAAMC,EAAiB5vQ,EAAQyqQ,kBAAoBpnL,EAAGrpF,EAAE61Q,eAAiBxsL,EAAGrpF,EAAE81Q,WAC9E,IAAItiP,EACJ,MAAQA,EAAOoiP,EAAersP,KAAKmP,OAC7B1P,GAASA,EAAM7hB,MAAQ6hB,EAAM,GAAG/pB,SAAWy5B,EAAQz5B,SAElD+pB,GACCwK,EAAKrsB,MAAQqsB,EAAK,GAAGv0B,SAAW+pB,EAAM7hB,MAAQ6hB,EAAM,GAAG/pB,SAC3D+pB,EAAQwK,GAEVoiP,EAAe3xK,UAAYzwE,EAAKrsB,MAAQqsB,EAAK,GAAGv0B,OAASu0B,EAAK,GAAGv0B,OAGnE22Q,EAAe3xK,WAAa,CAC9B,MAxBEj7E,EAAQ0P,EAAQ1P,MAAMhjB,EAAQyqQ,kBAAoBpnL,EAAGrpF,EAAE+1Q,YAAc1sL,EAAGrpF,EAAEg2Q,SA0B5E,GAAc,OAAVhtP,EACF,OAAO,KAGT,MAAM6/K,EAAQ7/K,EAAM,GACd6rP,EAAQ7rP,EAAM,IAAM,IACpB8rP,EAAQ9rP,EAAM,IAAM,IACpB2rP,EAAa3uQ,EAAQyqQ,mBAAqBznP,EAAM,GAAK,IAAIA,EAAM,KAAO,GACtEosP,EAAQpvQ,EAAQyqQ,mBAAqBznP,EAAM,GAAK,IAAIA,EAAM,KAAO,GAEvE,OAAOJ,EAAM,GAAGigL,KAASgsE,KAASC,IAAQH,IAAaS,IAASpvQ,EAAO,yBCzDzE,MAAMqqQ,EAAS,EAAQ,OAMvBxvP,EAAOC,QALc,CAAC1gB,EAAGu3B,EAAGs4O,KAC1B,MAAMgG,EAAW,IAAI5F,EAAOjwQ,EAAG6vQ,GACzBiG,EAAW,IAAI7F,EAAO14O,EAAGs4O,GAC/B,OAAOgG,EAASt7K,QAAQu7K,IAAaD,EAASV,aAAaW,EAAQ,yBCJrE,MAAMv7K,EAAU,EAAQ,OAExB95E,EAAOC,QADc,CAAC1gB,EAAGu3B,IAAMgjE,EAAQv6F,EAAGu3B,GAAG,0BCD7C,MAAM04O,EAAS,EAAQ,OAIvBxvP,EAAOC,QAHS,CAAC1gB,EAAGu3B,EAAGs4O,IACrB,IAAII,EAAOjwQ,EAAG6vQ,GAAOt1K,QAAQ,IAAI01K,EAAO14O,EAAGs4O,2BCF7C,MAAMrnP,EAAQ,EAAQ,OAgEtB/H,EAAOC,QA9DM,CAACq1P,EAAUC,KACtB,MAAMC,EAAKztP,EAAMutP,EAAU,MAAM,GAC3BG,EAAK1tP,EAAMwtP,EAAU,MAAM,GAC3Br2M,EAAas2M,EAAG17K,QAAQ27K,GAE9B,GAAmB,IAAfv2M,EACF,OAAO,KAGT,MAAMw2M,EAAWx2M,EAAa,EACxBy2M,EAAcD,EAAWF,EAAKC,EAC9BG,EAAaF,EAAWD,EAAKD,EAC7BK,IAAeF,EAAY7B,WAAW11Q,OAG5C,KAFoBw3Q,EAAW9B,WAAW11Q,SAExBy3Q,EAQhB,OAAKD,EAAW3B,OAAU2B,EAAW5B,MAMjC2B,EAAY1B,MAEP,QAGL0B,EAAY3B,MAEP,QAIF,QAhBE,QAoBX,MAAM7sN,EAAS0uN,EAAa,MAAQ,GAEpC,OAAIL,EAAGxtE,QAAUytE,EAAGztE,MACX7gJ,EAAS,QAGdquN,EAAGxB,QAAUyB,EAAGzB,MACX7sN,EAAS,QAGdquN,EAAGvB,QAAUwB,EAAGxB,MACX9sN,EAAS,QAIX,qCC7DT,MAAM2yC,EAAU,EAAQ,OAExB95E,EAAOC,QADI,CAAC1gB,EAAGu3B,EAAGs4O,IAAmC,IAAzBt1K,EAAQv6F,EAAGu3B,EAAGs4O,0BCD1C,MAAMt1K,EAAU,EAAQ,OAExB95E,EAAOC,QADI,CAAC1gB,EAAGu3B,EAAGs4O,IAAUt1K,EAAQv6F,EAAGu3B,EAAGs4O,GAAS,yBCDnD,MAAMt1K,EAAU,EAAQ,OAExB95E,EAAOC,QADK,CAAC1gB,EAAGu3B,EAAGs4O,IAAUt1K,EAAQv6F,EAAGu3B,EAAGs4O,IAAU,yBCDrD,MAAMI,EAAS,EAAQ,OAkBvBxvP,EAAOC,QAhBK,CAAC4X,EAAS88O,EAASxvQ,EAAS0jK,EAAY+rG,KACzB,kBAAd,IACTA,EAAiB/rG,EACjBA,EAAa1jK,EACbA,OAAUqY,GAGZ,IACE,OAAO,IAAIgyP,EACT33O,aAAmB23O,EAAS33O,EAAQA,QAAUA,EAC9C1yB,GACAysL,IAAI+iF,EAAS9rG,EAAY+rG,GAAgB/8O,OAC7C,CAAE,MAAOpH,GACP,OAAO,IACT,0BChBF,MAAMqpE,EAAU,EAAQ,OAExB95E,EAAOC,QADI,CAAC1gB,EAAGu3B,EAAGs4O,IAAUt1K,EAAQv6F,EAAGu3B,EAAGs4O,GAAS,yBCDnD,MAAMt1K,EAAU,EAAQ,OAExB95E,EAAOC,QADK,CAAC1gB,EAAGu3B,EAAGs4O,IAAUt1K,EAAQv6F,EAAGu3B,EAAGs4O,IAAU,yBCDrD,MAAMI,EAAS,EAAQ,OAEvBxvP,EAAOC,QADO,CAAC1gB,EAAG6vQ,IAAU,IAAII,EAAOjwQ,EAAG6vQ,GAAOpnE,6BCDjD,MAAMwnE,EAAS,EAAQ,OAEvBxvP,EAAOC,QADO,CAAC1gB,EAAG6vQ,IAAU,IAAII,EAAOjwQ,EAAG6vQ,GAAO4E,6BCDjD,MAAMl6K,EAAU,EAAQ,OAExB95E,EAAOC,QADK,CAAC1gB,EAAGu3B,EAAGs4O,IAAmC,IAAzBt1K,EAAQv6F,EAAGu3B,EAAGs4O,0BCD3C,MAAMI,EAAS,EAAQ,OAevBxvP,EAAOC,QAdO,CAAC4X,EAAS1yB,EAAS2wQ,GAAc,KAC7C,GAAIj+O,aAAmB23O,EACrB,OAAO33O,EAET,IACE,OAAO,IAAI23O,EAAO33O,EAAS1yB,EAC7B,CAAE,MAAOsrB,GACP,IAAKqlP,EACH,OAAO,KAET,MAAMrlP,CACR,0BCZF,MAAM++O,EAAS,EAAQ,OAEvBxvP,EAAOC,QADO,CAAC1gB,EAAG6vQ,IAAU,IAAII,EAAOjwQ,EAAG6vQ,GAAO6E,6BCDjD,MAAMlsP,EAAQ,EAAQ,OAKtB/H,EAAOC,QAJY,CAAC4X,EAAS1yB,KAC3B,MAAM4wQ,EAAShuP,EAAM8P,EAAS1yB,GAC9B,OAAQ4wQ,GAAUA,EAAOjC,WAAW11Q,OAAU23Q,EAAOjC,WAAa,6BCHpE,MAAMh6K,EAAU,EAAQ,OAExB95E,EAAOC,QADU,CAAC1gB,EAAGu3B,EAAGs4O,IAAUt1K,EAAQhjE,EAAGv3B,EAAG6vQ,0BCDhD,MAAMsF,EAAe,EAAQ,OAE7B10P,EAAOC,QADO,CAAC2+D,EAAMwwL,IAAUxwL,EAAKz6B,MAAK,CAAC5kD,EAAGu3B,IAAM49O,EAAa59O,EAAGv3B,EAAG6vQ,4BCDtE,MAAMO,EAAQ,EAAQ,OAStB3vP,EAAOC,QARW,CAAC4X,EAASysG,EAAOn/H,KACjC,IACEm/H,EAAQ,IAAIqrI,EAAMrrI,EAAOn/H,EAC3B,CAAE,MAAOsrB,GACP,OAAO,CACT,CACA,OAAO6zG,EAAMtgH,KAAK6T,EAAO,yBCP3B,MAAM68O,EAAe,EAAQ,OAE7B10P,EAAOC,QADM,CAAC2+D,EAAMwwL,IAAUxwL,EAAKz6B,MAAK,CAAC5kD,EAAGu3B,IAAM49O,EAAan1Q,EAAGu3B,EAAGs4O,4BCDrE,MAAMrnP,EAAQ,EAAQ,OAKtB/H,EAAOC,QAJO,CAAC4X,EAAS1yB,KACtB,MAAM0hB,EAAIkB,EAAM8P,EAAS1yB,GACzB,OAAO0hB,EAAIA,EAAEgR,QAAU,6BCFzB,MAAMm+O,EAAa,EAAQ,OACrBC,EAAY,EAAQ,OACpBzG,EAAS,EAAQ,OACjB0G,EAAc,EAAQ,OACtBnuP,EAAQ,EAAQ,OAChBouP,EAAQ,EAAQ,OAChBC,EAAQ,EAAQ,OAChBxkF,EAAM,EAAQ,OACdzjI,EAAO,EAAQ,OACf65I,EAAQ,EAAQ,OAChBgsE,EAAQ,EAAQ,OAChBC,EAAQ,EAAQ,OAChBH,EAAa,EAAQ,OACrBh6K,EAAU,EAAQ,OAClBu8K,EAAW,EAAQ,OACnBC,EAAe,EAAQ,OACvB5B,EAAe,EAAQ,OACvBvwN,EAAO,EAAQ,OACfoyN,EAAQ,EAAQ,OAChBx0J,EAAK,EAAQ,OACbN,EAAK,EAAQ,OACb9O,EAAK,EAAQ,OACbkiK,EAAM,EAAQ,OACd3sI,EAAM,EAAQ,OACdmB,EAAM,EAAQ,OACdomI,EAAM,EAAQ,MACd+G,EAAS,EAAQ,OACjBtH,EAAa,EAAQ,OACrBS,EAAQ,EAAQ,OAChB8G,EAAY,EAAQ,OACpBC,EAAgB,EAAQ,OACxBC,EAAgB,EAAQ,OACxBC,EAAgB,EAAQ,OACxBC,EAAa,EAAQ,OACrBC,EAAa,EAAQ,OACrBC,EAAU,EAAQ,MAClBC,EAAM,EAAQ,OACdC,EAAM,EAAQ,OACdvH,EAAa,EAAQ,OACrBwH,EAAgB,EAAQ,OACxBC,EAAS,EAAQ,OACvBn3P,EAAOC,QAAU,CACf8H,QACAouP,QACAC,QACAxkF,MACAzjI,OACA65I,QACAgsE,QACAC,QACAH,aACAh6K,UACAu8K,WACAC,eACA5B,eACAvwN,OACAoyN,QACAx0J,KACAN,KACA9O,KACAkiK,MACA3sI,MACAmB,MACAomI,MACA+G,SACAtH,aACAS,QACA8G,YACAC,gBACAC,gBACAC,gBACAC,aACAC,aACAC,UACAC,MACAC,MACAvH,aACAwH,gBACAC,SACA3H,SACAhnL,GAAIwtL,EAAWxtL,GACf/gF,IAAKuuQ,EAAWvuQ,IAChBshB,OAAQitP,EAAW72Q,EACnBi4Q,oBAAqBnB,EAAUmB,oBAC/BC,cAAepB,EAAUoB,cACzBjD,mBAAoB8B,EAAY9B,mBAChCkD,oBAAqBpB,EAAYoB,wCCrFnC,MAGMnD,EAAmB3sP,OAAO2sP,kBACL,iBAmB3Bn0P,EAAOC,QAAU,CACfi0P,WAtBiB,IAuBjBqD,0BAlBgC,GAmBhCC,sBAf4BtD,IAgB5BC,mBACAkD,cAfoB,CACpB,QACA,WACA,QACA,WACA,QACA,WACA,cASAD,oBA7B0B,QA8B1B9G,wBAAyB,EACzBC,WAAY,sBCjCd,MAAMtrP,EACe,kBAAZ2mB,SACPA,QAAQjY,KACRiY,QAAQjY,IAAI8jP,YACZ,cAAczzP,KAAK4nB,QAAQjY,IAAI8jP,YAC7B,IAAIx5Q,IAAS+mB,QAAQ1c,MAAM,YAAarK,GACxC,OAEJ+hB,EAAOC,QAAUgF,qBCRjB,MAAMwgD,EAAU,WACV2uM,EAAqB,CAAC70Q,EAAGu3B,KAC7B,MAAM4gP,EAAOjyM,EAAQzhD,KAAKzkB,GACpBo4Q,EAAOlyM,EAAQzhD,KAAK8S,GAO1B,OALI4gP,GAAQC,IACVp4Q,GAAKA,EACLu3B,GAAKA,GAGAv3B,IAAMu3B,EAAI,EACZ4gP,IAASC,GAAS,EAClBA,IAASD,EAAQ,EAClBn4Q,EAAIu3B,GAAK,EACT,GAKN9W,EAAOC,QAAU,CACfm0P,qBACAkD,oBAJ0B,CAAC/3Q,EAAGu3B,IAAMs9O,EAAmBt9O,EAAGv3B,uBCsB5DygB,EAAOC,QAvCP,MACE,WAAAwmB,GACE7hB,KAAKrD,IAAM,IACXqD,KAAKliB,IAAM,IAAI6yC,GACjB,CAEA,GAAA7nB,CAAK5uB,GACH,MAAME,EAAQ4lB,KAAKliB,IAAIgrB,IAAI5uB,GAC3B,YAAc0e,IAAVxe,OACF,GAGA4lB,KAAKliB,IAAIszC,OAAOl3C,GAChB8lB,KAAKliB,IAAI2yC,IAAIv2C,EAAKE,GACXA,EAEX,CAEA,OAAQF,GACN,OAAO8lB,KAAKliB,IAAIszC,OAAOl3C,EACzB,CAEA,GAAAu2C,CAAKv2C,EAAKE,GAGR,IAFgB4lB,KAAKoxB,OAAOl3C,SAEF0e,IAAVxe,EAAqB,CAEnC,GAAI4lB,KAAKliB,IAAIqE,MAAQ6d,KAAKrD,IAAK,CAC7B,MAAMq2P,EAAWhzP,KAAKliB,IAAI9B,OAAO+xB,OAAO3zB,MACxC4lB,KAAKoxB,OAAO4hO,EACd,CAEAhzP,KAAKliB,IAAI2yC,IAAIv2C,EAAKE,EACpB,CAEA,OAAO4lB,IACT,sBCnCF,MAAMizP,EAAcl5Q,OAAOwf,OAAO,CAAEixP,OAAO,IACrC0I,EAAYn5Q,OAAOwf,OAAO,CAAE,GAYlC6B,EAAOC,QAXc9a,GACdA,EAIkB,kBAAZA,EACF0yQ,EAGF1yQ,EAPE2yQ,yBCLX,MAAM,0BACJP,EAAyB,sBACzBC,EAAqB,WACrBtD,GACE,EAAQ,OACNjvP,EAAQ,EAAQ,OAIhBujE,GAHNvoE,EAAUD,EAAOC,QAAU,CAAC,GAGTuoE,GAAK,GAClBqnL,EAAS5vP,EAAQ4vP,OAAS,GAC1BpoQ,EAAMwY,EAAQxY,IAAM,GACpBtI,EAAI8gB,EAAQ9gB,EAAI,CAAC,EACvB,IAAIy3C,EAAI,EAER,MAAMmhO,EAAmB,eAQnBC,EAAwB,CAC5B,CAAC,MAAO,GACR,CAAC,MAAO9D,GACR,CAAC6D,EAAkBP,IAYfS,EAAc,CAACzuQ,EAAMxK,EAAOk5Q,KAChC,MAAMC,EAVc,CAACn5Q,IACrB,IAAK,MAAOkuC,EAAO3rB,KAAQy2P,EACzBh5Q,EAAQA,EACL2pB,MAAM,GAAGukB,MAAU1pB,KAAK,GAAG0pB,OAAW3rB,MACtCoH,MAAM,GAAGukB,MAAU1pB,KAAK,GAAG0pB,OAAW3rB,MAE3C,OAAOviB,GAIMo5Q,CAAcp5Q,GACrBsH,EAAQswC,IACd3xB,EAAMzb,EAAMlD,EAAOtH,GACnBG,EAAEqK,GAAQlD,EACVmB,EAAInB,GAAStH,EACbwpF,EAAGliF,GAAS,IAAI2nB,OAAOjvB,EAAOk5Q,EAAW,SAAM16P,GAC/CqyP,EAAOvpQ,GAAS,IAAI2nB,OAAOkqP,EAAMD,EAAW,SAAM16P,EAAS,EAS7Dy6P,EAAY,oBAAqB,eACjCA,EAAY,yBAA0B,QAMtCA,EAAY,uBAAwB,gBAAgBF,MAKpDE,EAAY,cAAe,IAAIxwQ,EAAItI,EAAEk5Q,0BACd5wQ,EAAItI,EAAEk5Q,0BACN5wQ,EAAItI,EAAEk5Q,uBAE7BJ,EAAY,mBAAoB,IAAIxwQ,EAAItI,EAAEm5Q,+BACd7wQ,EAAItI,EAAEm5Q,+BACN7wQ,EAAItI,EAAEm5Q,4BAKlCL,EAAY,uBAAwB,MAAMxwQ,EAAItI,EAAEk5Q,sBAC5C5wQ,EAAItI,EAAEo5Q,0BAEVN,EAAY,4BAA6B,MAAMxwQ,EAAItI,EAAEm5Q,2BACjD7wQ,EAAItI,EAAEo5Q,0BAMVN,EAAY,aAAc,QAAQxwQ,EAAItI,EAAEq5Q,8BAC/B/wQ,EAAItI,EAAEq5Q,6BAEfP,EAAY,kBAAmB,SAASxwQ,EAAItI,EAAEs5Q,mCACrChxQ,EAAItI,EAAEs5Q,kCAKfR,EAAY,kBAAmB,GAAGF,MAMlCE,EAAY,QAAS,UAAUxwQ,EAAItI,EAAEu5Q,yBAC5BjxQ,EAAItI,EAAEu5Q,wBAWfT,EAAY,YAAa,KAAKxwQ,EAAItI,EAAEw5Q,eACjClxQ,EAAItI,EAAEy5Q,eACPnxQ,EAAItI,EAAE05Q,WAERZ,EAAY,OAAQ,IAAIxwQ,EAAItI,EAAE25Q,eAK9Bb,EAAY,aAAc,WAAWxwQ,EAAItI,EAAE45Q,oBACxCtxQ,EAAItI,EAAE65Q,oBACPvxQ,EAAItI,EAAE05Q,WAERZ,EAAY,QAAS,IAAIxwQ,EAAItI,EAAE85Q,gBAE/BhB,EAAY,OAAQ,gBAKpBA,EAAY,wBAAyB,GAAGxwQ,EAAItI,EAAEm5Q,mCAC9CL,EAAY,mBAAoB,GAAGxwQ,EAAItI,EAAEk5Q,8BAEzCJ,EAAY,cAAe,YAAYxwQ,EAAItI,EAAE+5Q,4BAChBzxQ,EAAItI,EAAE+5Q,4BACNzxQ,EAAItI,EAAE+5Q,wBACVzxQ,EAAItI,EAAEy5Q,gBACVnxQ,EAAItI,EAAE05Q,eAG3BZ,EAAY,mBAAoB,YAAYxwQ,EAAItI,EAAEg6Q,iCAChB1xQ,EAAItI,EAAEg6Q,iCACN1xQ,EAAItI,EAAEg6Q,6BACV1xQ,EAAItI,EAAE65Q,qBACVvxQ,EAAItI,EAAE05Q,eAGhCZ,EAAY,SAAU,IAAIxwQ,EAAItI,EAAEi6Q,YAAY3xQ,EAAItI,EAAEk6Q,iBAClDpB,EAAY,cAAe,IAAIxwQ,EAAItI,EAAEi6Q,YAAY3xQ,EAAItI,EAAEm6Q,sBAIvDrB,EAAY,cAAe,oBACDV,mBACIA,qBACAA,SAC9BU,EAAY,SAAU,GAAGxwQ,EAAItI,EAAEo6Q,4BAC/BtB,EAAY,aAAcxwQ,EAAItI,EAAEo6Q,aAClB,MAAM9xQ,EAAItI,EAAEy5Q,gBACZ,MAAMnxQ,EAAItI,EAAE05Q,wBAE1BZ,EAAY,YAAaxwQ,EAAItI,EAAEg2Q,SAAS,GACxC8C,EAAY,gBAAiBxwQ,EAAItI,EAAE+1Q,aAAa,GAIhD+C,EAAY,YAAa,WAEzBA,EAAY,YAAa,SAASxwQ,EAAItI,EAAEq6Q,kBAAkB,GAC1Dv5P,EAAQ8wP,iBAAmB,MAE3BkH,EAAY,QAAS,IAAIxwQ,EAAItI,EAAEq6Q,aAAa/xQ,EAAItI,EAAEk6Q,iBAClDpB,EAAY,aAAc,IAAIxwQ,EAAItI,EAAEq6Q,aAAa/xQ,EAAItI,EAAEm6Q,sBAIvDrB,EAAY,YAAa,WAEzBA,EAAY,YAAa,SAASxwQ,EAAItI,EAAEs6Q,kBAAkB,GAC1Dx5P,EAAQgxP,iBAAmB,MAE3BgH,EAAY,QAAS,IAAIxwQ,EAAItI,EAAEs6Q,aAAahyQ,EAAItI,EAAEk6Q,iBAClDpB,EAAY,aAAc,IAAIxwQ,EAAItI,EAAEs6Q,aAAahyQ,EAAItI,EAAEm6Q,sBAGvDrB,EAAY,kBAAmB,IAAIxwQ,EAAItI,EAAEi6Q,aAAa3xQ,EAAItI,EAAE85Q,oBAC5DhB,EAAY,aAAc,IAAIxwQ,EAAItI,EAAEi6Q,aAAa3xQ,EAAItI,EAAE25Q,mBAIvDb,EAAY,iBAAkB,SAASxwQ,EAAItI,EAAEi6Q,aACrC3xQ,EAAItI,EAAE85Q,eAAexxQ,EAAItI,EAAEk6Q,iBAAiB,GACpDp5P,EAAQ4wP,sBAAwB,SAMhCoH,EAAY,cAAe,SAASxwQ,EAAItI,EAAEk6Q,0BAEnB5xQ,EAAItI,EAAEk6Q,sBAG7BpB,EAAY,mBAAoB,SAASxwQ,EAAItI,EAAEm6Q,+BAEnB7xQ,EAAItI,EAAEm6Q,2BAIlCrB,EAAY,OAAQ,mBAEpBA,EAAY,OAAQ,6BACpBA,EAAY,UAAW,sDCvNvB,MAAMlB,EAAU,EAAQ,MAExB/2P,EAAOC,QADK,CAAC4X,EAASysG,EAAOn/H,IAAY4xQ,EAAQl/O,EAASysG,EAAO,IAAKn/H,0BCFtE,MAAMwqQ,EAAQ,EAAQ,OAMtB3vP,EAAOC,QALY,CAACgrC,EAAIyuN,EAAIv0Q,KAC1B8lD,EAAK,IAAI0kN,EAAM1kN,EAAI9lD,GACnBu0Q,EAAK,IAAI/J,EAAM+J,EAAIv0Q,GACZ8lD,EAAGykN,WAAWgK,EAAIv0Q,2BCJ3B,MAAM4xQ,EAAU,EAAQ,MAGxB/2P,EAAOC,QADK,CAAC4X,EAASysG,EAAOn/H,IAAY4xQ,EAAQl/O,EAASysG,EAAO,IAAKn/H,0BCFtE,MAAMqqQ,EAAS,EAAQ,OACjBG,EAAQ,EAAQ,OAuBtB3vP,EAAOC,QArBe,CAAC05P,EAAUr1I,EAAOn/H,KACtC,IAAIoc,EAAM,KACNq4P,EAAQ,KACRC,EAAW,KACf,IACEA,EAAW,IAAIlK,EAAMrrI,EAAOn/H,EAC9B,CAAE,MAAOsrB,GACP,OAAO,IACT,CAWA,OAVAkpP,EAASnyQ,SAASqf,IACZgzP,EAAS71P,KAAK6C,KAEXtF,IAA6B,IAAtBq4P,EAAM9/K,QAAQjzE,KAExBtF,EAAMsF,EACN+yP,EAAQ,IAAIpK,EAAOjuP,EAAKpc,IAE5B,IAEKoc,0BCtBT,MAAMiuP,EAAS,EAAQ,OACjBG,EAAQ,EAAQ,OAsBtB3vP,EAAOC,QArBe,CAAC05P,EAAUr1I,EAAOn/H,KACtC,IAAImc,EAAM,KACNw4P,EAAQ,KACRD,EAAW,KACf,IACEA,EAAW,IAAIlK,EAAMrrI,EAAOn/H,EAC9B,CAAE,MAAOsrB,GACP,OAAO,IACT,CAWA,OAVAkpP,EAASnyQ,SAASqf,IACZgzP,EAAS71P,KAAK6C,KAEXvF,GAA4B,IAArBw4P,EAAMhgL,QAAQjzE,KAExBvF,EAAMuF,EACNizP,EAAQ,IAAItK,EAAOluP,EAAKnc,IAE5B,IAEKmc,0BCrBT,MAAMkuP,EAAS,EAAQ,OACjBG,EAAQ,EAAQ,OAChB5tJ,EAAK,EAAQ,OA0DnB/hG,EAAOC,QAxDY,CAACqkH,EAAO8qI,KACzB9qI,EAAQ,IAAIqrI,EAAMrrI,EAAO8qI,GAEzB,IAAI2K,EAAS,IAAIvK,EAAO,SACxB,GAAIlrI,EAAMtgH,KAAK+1P,GACb,OAAOA,EAIT,GADAA,EAAS,IAAIvK,EAAO,WAChBlrI,EAAMtgH,KAAK+1P,GACb,OAAOA,EAGTA,EAAS,KACT,IAAK,IAAI57Q,EAAI,EAAGA,EAAImmI,EAAMjvF,IAAIj3C,SAAUD,EAAG,CACzC,MAAMmzQ,EAAchtI,EAAMjvF,IAAIl3C,GAE9B,IAAI67Q,EAAS,KACb1I,EAAY9pQ,SAASyyQ,IAEnB,MAAMC,EAAU,IAAI1K,EAAOyK,EAAW5K,OAAOx3O,SAC7C,OAAQoiP,EAAW54B,UACjB,IAAK,IAC+B,IAA9B64B,EAAQpG,WAAW11Q,OACrB87Q,EAAQjG,QAERiG,EAAQpG,WAAW7zQ,KAAK,GAE1Bi6Q,EAAQnK,IAAMmK,EAAQ/pN,SAExB,IAAK,GACL,IAAK,KACE6pN,IAAUj4J,EAAGm4J,EAASF,KACzBA,EAASE,GAEX,MACF,IAAK,IACL,IAAK,KAEH,MAEF,QACE,MAAM,IAAI5xP,MAAM,yBAAyB2xP,EAAW54B,YACxD,KAEE24B,GAAYD,IAAUh4J,EAAGg4J,EAAQC,KACnCD,EAASC,EAEb,CAEA,OAAID,GAAUz1I,EAAMtgH,KAAK+1P,GAChBA,EAGF,4BC1DT,MAAMvK,EAAS,EAAQ,OACjBN,EAAa,EAAQ,QACrB,IAAED,GAAQC,EACVS,EAAQ,EAAQ,OAChB8G,EAAY,EAAQ,OACpB10J,EAAK,EAAQ,OACbN,EAAK,EAAQ,OACb4nB,EAAM,EAAQ,OACdnB,EAAM,EAAQ,OAuEpBloH,EAAOC,QArES,CAAC4X,EAASysG,EAAO61I,EAAMh1Q,KAIrC,IAAIi1Q,EAAMC,EAAOC,EAAMnL,EAAMoL,EAC7B,OAJA1iP,EAAU,IAAI23O,EAAO33O,EAAS1yB,GAC9Bm/H,EAAQ,IAAIqrI,EAAMrrI,EAAOn/H,GAGjBg1Q,GACN,IAAK,IACHC,EAAOr4J,EACPs4J,EAAQhxI,EACRixI,EAAO74J,EACP0tJ,EAAO,IACPoL,EAAQ,KACR,MACF,IAAK,IACHH,EAAO34J,EACP44J,EAAQnyI,EACRoyI,EAAOv4J,EACPotJ,EAAO,IACPoL,EAAQ,KACR,MACF,QACE,MAAM,IAAIzzP,UAAU,yCAIxB,GAAI2vP,EAAU5+O,EAASysG,EAAOn/H,GAC5B,OAAO,EAMT,IAAK,IAAIhH,EAAI,EAAGA,EAAImmI,EAAMjvF,IAAIj3C,SAAUD,EAAG,CACzC,MAAMmzQ,EAAchtI,EAAMjvF,IAAIl3C,GAE9B,IAAIu2C,EAAO,KACP6kM,EAAM,KAiBV,GAfA+3B,EAAY9pQ,SAASyyQ,IACfA,EAAW5K,SAAWJ,IACxBgL,EAAa,IAAI/K,EAAW,YAE9Bx6N,EAAOA,GAAQulO,EACf1gC,EAAMA,GAAO0gC,EACTG,EAAKH,EAAW5K,OAAQ36N,EAAK26N,OAAQlqQ,GACvCuvC,EAAOulO,EACEK,EAAKL,EAAW5K,OAAQ91B,EAAI81B,OAAQlqQ,KAC7Co0O,EAAM0gC,EACR,IAKEvlO,EAAK2sM,WAAa8tB,GAAQz6N,EAAK2sM,WAAak5B,EAC9C,OAAO,EAKT,KAAMhhC,EAAI8H,UAAY9H,EAAI8H,WAAa8tB,IACnCkL,EAAMxiP,EAAS0hN,EAAI81B,QACrB,OAAO,EACF,GAAI91B,EAAI8H,WAAak5B,GAASD,EAAKziP,EAAS0hN,EAAI81B,QACrD,OAAO,CAEX,CACA,OAAO,0BCzET,MAAMoH,EAAY,EAAQ,OACpB38K,EAAU,EAAQ,OACxB95E,EAAOC,QAAU,CAAC05P,EAAUr1I,EAAOn/H,KACjC,MAAMkwC,EAAM,GACZ,IAAIqQ,EAAQ,KACRtmB,EAAO,KACX,MAAMvY,EAAI8yP,EAASx1N,MAAK,CAAC5kD,EAAGu3B,IAAMgjE,EAAQv6F,EAAGu3B,EAAG3xB,KAChD,IAAK,MAAM0yB,KAAWhR,EAAG,CACN4vP,EAAU5+O,EAASysG,EAAOn/H,IAEzCi6B,EAAOvH,EACF6tB,IACHA,EAAQ7tB,KAGNuH,GACFiW,EAAIp1C,KAAK,CAACylD,EAAOtmB,IAEnBA,EAAO,KACPsmB,EAAQ,KAEZ,CACIA,GACFrQ,EAAIp1C,KAAK,CAACylD,EAAO,OAGnB,MAAM80N,EAAS,GACf,IAAK,MAAOl5P,EAAKC,KAAQ8zB,EACnB/zB,IAAQC,EACVi5P,EAAOv6Q,KAAKqhB,GACFC,GAAOD,IAAQuF,EAAE,GAEjBtF,EAEDD,IAAQuF,EAAE,GACnB2zP,EAAOv6Q,KAAK,KAAKshB,KAEjBi5P,EAAOv6Q,KAAK,GAAGqhB,OAASC,KAJxBi5P,EAAOv6Q,KAAK,KAAKqhB,KAFjBk5P,EAAOv6Q,KAAK,KAShB,MAAMw6Q,EAAaD,EAAOh3P,KAAK,QACzB4a,EAAgC,kBAAdkmG,EAAMyrI,IAAmBzrI,EAAMyrI,IAAMtoP,OAAO68G,GACpE,OAAOm2I,EAAWr8Q,OAASggC,EAAShgC,OAASq8Q,EAAan2I,0BC7C5D,MAAMqrI,EAAQ,EAAQ,OAChBT,EAAa,EAAQ,QACrB,IAAED,GAAQC,EACVuH,EAAY,EAAQ,OACpB38K,EAAU,EAAQ,OAkElB4gL,EAA+B,CAAC,IAAIxL,EAAW,cAC/CyL,EAAiB,CAAC,IAAIzL,EAAW,YAEjC0L,EAAe,CAACrtO,EAAKy0C,EAAK78E,KAC9B,GAAIooC,IAAQy0C,EACV,OAAO,EAGT,GAAmB,IAAfz0C,EAAInvC,QAAgBmvC,EAAI,GAAG8hO,SAAWJ,EAAK,CAC7C,GAAmB,IAAfjtL,EAAI5jF,QAAgB4jF,EAAI,GAAGqtL,SAAWJ,EACxC,OAAO,EAEP1hO,EADSpoC,EAAQyqQ,kBACX8K,EAEAC,CAEV,CAEA,GAAmB,IAAf34L,EAAI5jF,QAAgB4jF,EAAI,GAAGqtL,SAAWJ,EAAK,CAC7C,GAAI9pQ,EAAQyqQ,kBACV,OAAO,EAEP5tL,EAAM24L,CAEV,CAEA,MAAME,EAAQ,IAAIplO,IAClB,IAAIssE,EAAIN,EAeJq5J,EA6BAC,EAAQC,EACRC,EAAUC,EA5Cd,IAAK,MAAMh7Q,KAAKqtC,EACK,MAAfrtC,EAAEmhP,UAAmC,OAAfnhP,EAAEmhP,SAC1Bt/H,EAAKo5J,EAASp5J,EAAI7hH,EAAGiF,GACG,MAAfjF,EAAEmhP,UAAmC,OAAfnhP,EAAEmhP,SACjC5/H,EAAK25J,EAAQ35J,EAAIvhH,EAAGiF,GAEpB01Q,EAAM9uP,IAAI7rB,EAAEmvQ,QAIhB,GAAIwL,EAAM9zQ,KAAO,EACf,OAAO,KAIT,GAAIg7G,GAAMN,EAAI,CAEZ,GADAq5J,EAAWhhL,EAAQioB,EAAGstJ,OAAQ5tJ,EAAG4tJ,OAAQlqQ,GACrC21Q,EAAW,EACb,OAAO,KACF,GAAiB,IAAbA,IAAmC,OAAhB/4J,EAAGs/H,UAAqC,OAAhB5/H,EAAG4/H,UACvD,OAAO,IAEX,CAGA,IAAK,MAAM1uI,KAAMkoK,EAAO,CACtB,GAAI94J,IAAO00J,EAAU9jK,EAAIlrF,OAAOs6F,GAAK58G,GACnC,OAAO,KAGT,GAAIs8G,IAAOg1J,EAAU9jK,EAAIlrF,OAAOg6F,GAAKt8G,GACnC,OAAO,KAGT,IAAK,MAAMjF,KAAK8hF,EACd,IAAKy0L,EAAU9jK,EAAIlrF,OAAOvnB,GAAIiF,GAC5B,OAAO,EAIX,OAAO,CACT,CAMA,IAAIk2Q,KAAe55J,GAChBt8G,EAAQyqQ,oBACTnuJ,EAAG4tJ,OAAOyE,WAAW11Q,SAASqjH,EAAG4tJ,OAC/BiM,KAAev5J,GAChB58G,EAAQyqQ,oBACT7tJ,EAAGstJ,OAAOyE,WAAW11Q,SAAS2jH,EAAGstJ,OAE/BgM,GAAmD,IAAnCA,EAAavH,WAAW11Q,QACxB,MAAhBqjH,EAAG4/H,UAAmD,IAA/Bg6B,EAAavH,WAAW,KACjDuH,GAAe,GAGjB,IAAK,MAAMn7Q,KAAK8hF,EAAK,CAGnB,GAFAk5L,EAAWA,GAA2B,MAAfh7Q,EAAEmhP,UAAmC,OAAfnhP,EAAEmhP,SAC/C45B,EAAWA,GAA2B,MAAf/6Q,EAAEmhP,UAAmC,OAAfnhP,EAAEmhP,SAC3Ct/H,EASF,GARIu5J,GACEp7Q,EAAEmvQ,OAAOyE,YAAc5zQ,EAAEmvQ,OAAOyE,WAAW11Q,QAC3C8B,EAAEmvQ,OAAOrnE,QAAUszE,EAAatzE,OAChC9nM,EAAEmvQ,OAAO2E,QAAUsH,EAAatH,OAChC9zQ,EAAEmvQ,OAAO4E,QAAUqH,EAAarH,QAClCqH,GAAe,GAGA,MAAfp7Q,EAAEmhP,UAAmC,OAAfnhP,EAAEmhP,UAE1B,GADA05B,EAASI,EAASp5J,EAAI7hH,EAAGiF,GACrB41Q,IAAW76Q,GAAK66Q,IAAWh5J,EAC7B,OAAO,OAEJ,GAAoB,OAAhBA,EAAGs/H,WAAsBo1B,EAAU10J,EAAGstJ,OAAQ5nP,OAAOvnB,GAAIiF,GAClE,OAAO,EAGX,GAAIs8G,EASF,GARI45J,GACEn7Q,EAAEmvQ,OAAOyE,YAAc5zQ,EAAEmvQ,OAAOyE,WAAW11Q,QAC3C8B,EAAEmvQ,OAAOrnE,QAAUqzE,EAAarzE,OAChC9nM,EAAEmvQ,OAAO2E,QAAUqH,EAAarH,OAChC9zQ,EAAEmvQ,OAAO4E,QAAUoH,EAAapH,QAClCoH,GAAe,GAGA,MAAfn7Q,EAAEmhP,UAAmC,OAAfnhP,EAAEmhP,UAE1B,GADA25B,EAAQI,EAAQ35J,EAAIvhH,EAAGiF,GACnB61Q,IAAU96Q,GAAK86Q,IAAUv5J,EAC3B,OAAO,OAEJ,GAAoB,OAAhBA,EAAG4/H,WAAsBo1B,EAAUh1J,EAAG4tJ,OAAQ5nP,OAAOvnB,GAAIiF,GAClE,OAAO,EAGX,IAAKjF,EAAEmhP,WAAa5/H,GAAMM,IAAoB,IAAb+4J,EAC/B,OAAO,CAEX,CAKA,QAAI/4J,GAAMk5J,IAAax5J,GAAmB,IAAbq5J,OAIzBr5J,GAAMy5J,IAAan5J,GAAmB,IAAb+4J,MAOzBQ,IAAgBD,GAIb,EAIHF,EAAW,CAAC57Q,EAAGu3B,EAAG3xB,KACtB,IAAK5F,EACH,OAAOu3B,EAET,MAAMq4O,EAAOr1K,EAAQv6F,EAAE8vQ,OAAQv4O,EAAEu4O,OAAQlqQ,GACzC,OAAOgqQ,EAAO,EAAI5vQ,EACd4vQ,EAAO,GACQ,MAAfr4O,EAAEuqN,UAAmC,OAAf9hP,EAAE8hP,SADbvqN,EAEXv3B,GAIA67Q,EAAU,CAAC77Q,EAAGu3B,EAAG3xB,KACrB,IAAK5F,EACH,OAAOu3B,EAET,MAAMq4O,EAAOr1K,EAAQv6F,EAAE8vQ,OAAQv4O,EAAEu4O,OAAQlqQ,GACzC,OAAOgqQ,EAAO,EAAI5vQ,EACd4vQ,EAAO,GACQ,MAAfr4O,EAAEuqN,UAAmC,OAAf9hP,EAAE8hP,SADbvqN,EAEXv3B,GAGNygB,EAAOC,QA5MQ,CAACstB,EAAKy0C,EAAK78E,EAAU,CAAC,KACnC,GAAIooC,IAAQy0C,EACV,OAAO,EAGTz0C,EAAM,IAAIoiO,EAAMpiO,EAAKpoC,GACrB68E,EAAM,IAAI2tL,EAAM3tL,EAAK78E,GACrB,IAAIo2Q,GAAa,EAEjBC,EAAO,IAAK,MAAMC,KAAaluO,EAAI8H,IAAK,CACtC,IAAK,MAAMqmO,KAAa15L,EAAI3sC,IAAK,CAC/B,MAAMsmO,EAAQf,EAAaa,EAAWC,EAAWv2Q,GAEjD,GADAo2Q,EAAaA,GAAwB,OAAVI,EACvBA,EACF,SAASH,CAEb,CAKA,GAAID,EACF,OAAO,CAEX,CACA,OAAO,0BCnET,MAAM5L,EAAQ,EAAQ,OAOtB3vP,EAAOC,QAJe,CAACqkH,EAAOn/H,IAC5B,IAAIwqQ,EAAMrrI,EAAOn/H,GAASkwC,IACvB3yC,KAAIysQ,GAAQA,EAAKzsQ,KAAIxC,GAAKA,EAAElB,QAAOwkB,KAAK,KAAKm0E,OAAOhvE,MAAM,8BCL/D,MAAMgnP,EAAQ,EAAQ,OAUtB3vP,EAAOC,QATY,CAACqkH,EAAOn/H,KACzB,IAGE,OAAO,IAAIwqQ,EAAMrrI,EAAOn/H,GAASm/H,OAAS,GAC5C,CAAE,MAAO7zG,GACP,OAAO,IACT,uCCPF,IAGImrP,GAHmBh3P,MAAQA,KAAKg0E,iBAAoB,SAAUxa,GAC9D,OAAQA,GAAOA,EAAIH,WAAcG,EAAM,CAAE,QAAWA,EACxD,GACwC,EAAQ,OAC5C4d,EAAc,EAAQ,OAI1B,SAAS6/K,EAAUp6Q,EAAO0D,GACtB,IAAIqkC,EAAS,CAAC,EACd,OAAK/nC,GAA0B,kBAAVA,IAGrB,EAAIm6Q,EAAkBzxN,SAAS1oD,GAAO,SAAUi9C,EAAU1/C,GAElD0/C,GAAY1/C,IACZwqC,GAAO,EAAIwyD,EAAY+Q,WAAWruD,EAAUv5C,IAAYnG,EAEhE,IACOwqC,GARIA,CASf,CACAqyO,EAAU1xN,QAAU0xN,EACpB77P,EAAOC,QAAU47P,oCCtBjBl9Q,OAAOg5C,eAAe13B,EAAS,aAAc,CAAEjhB,OAAO,IACtDihB,EAAQ8sF,eAAY,EACpB,IAAI+uK,EAAwB,oBACxBC,EAAe,YACfC,EAAkB,UAClBC,EAAsB,6BACtBC,EAAyB,UAYzBh1I,EAAa,SAAU/+G,EAAOk8E,GAC9B,OAAOA,EAAUn8F,aACrB,EAIIi0Q,EAAa,SAAUh0P,EAAOg/B,GAAU,MAAO,GAAGxmC,OAAOwmC,EAAQ,IAAM,EAoB3ElnC,EAAQ8sF,UAhBQ,SAAUruD,EAAUv5C,GAEhC,YADgB,IAAZA,IAAsBA,EAAU,CAAC,GAnBrB,SAAUu5C,GAC1B,OAAQA,GACJs9N,EAAgBh4P,KAAK06B,IACrBo9N,EAAsB93P,KAAK06B,EACnC,CAgBQ09N,CAAc19N,GACPA,GAEXA,EAAWA,EAASrzB,eAGhBqzB,EAFAv5C,EAAQg7F,YAEGzhD,EAAS5zC,QAAQoxQ,EAAwBC,GAIzCz9N,EAAS5zC,QAAQmxQ,EAAqBE,IAErCrxQ,QAAQixQ,EAAc70I,GAC1C,qCC3CA,IAAItuC,EAAmBh0E,MAAQA,KAAKg0E,iBAAoB,SAAUxa,GAC9D,OAAQA,GAAOA,EAAIH,WAAcG,EAAM,CAAE,QAAWA,EACxD,EACAz/E,OAAOg5C,eAAe13B,EAAS,aAAc,CAAEjhB,OAAO,IACtD,IAAI85F,EAAwBF,EAAgB,EAAQ,QAqCpD34E,EAAA,QAtBA,SAAuBxe,EAAOw2C,GAC1B,IAAI4gD,EAAc,KAClB,IAAKp3F,GAA0B,kBAAVA,EACjB,OAAOo3F,EAEX,IAAIF,GAAe,EAAIG,EAAsB3uC,SAAS1oD,GAClDs3F,EAAkC,oBAAb9gD,EAczB,OAbA0gD,EAAanxF,SAAQ,SAAUgxF,GAC3B,GAAyB,gBAArBA,EAAY51F,KAAhB,CAGA,IAAI87C,EAAW85C,EAAY95C,SAAU1/C,EAAQw5F,EAAYx5F,MACrD+5F,EACA9gD,EAASyG,EAAU1/C,EAAOw5F,GAErBx5F,KACL65F,EAAcA,GAAe,CAAC,GAClBn6C,GAAY1/C,EAP5B,CASJ,IACO65F,CACX,u2BCzBA,IAAItgD,EAAgB,SAAS74C,EAAGo3B,GAI5B,OAHAyhB,EAAgB55C,OAAOgoC,gBAClB,CAAEC,UAAW,cAAgBpoC,OAAS,SAAUkB,EAAGo3B,GAAKp3B,EAAEknC,UAAY9P,CAAG,GAC1E,SAAUp3B,EAAGo3B,GAAK,IAAK,IAAI5S,KAAK4S,EAAOn4B,OAAOC,UAAUb,eAAegB,KAAK+3B,EAAG5S,KAAIxkB,EAAEwkB,GAAK4S,EAAE5S,GAAI,EAC7Fq0B,EAAc74C,EAAGo3B,EAC5B,EAEO,SAASuiB,EAAU35C,EAAGo3B,GACzB,GAAiB,oBAANA,GAA0B,OAANA,EAC3B,MAAM,IAAIhQ,UAAU,uBAAyBW,OAAOqP,GAAK,iCAE7D,SAASwiB,IAAO10B,KAAK6hB,YAAc/mC,CAAG,CADtC64C,EAAc74C,EAAGo3B,GAEjBp3B,EAAEd,UAAkB,OAANk4B,EAAan4B,OAAO6yB,OAAOsF,IAAMwiB,EAAG16C,UAAYk4B,EAAEl4B,UAAW,IAAI06C,EACnF,CAEO,IAAImqC,EAAW,WAQlB,OAPAA,EAAW9kF,OAAO+lB,QAAU,SAAkBvlB,GAC1C,IAAK,IAAIK,EAAGrB,EAAI,EAAGiB,EAAImlB,UAAUnmB,OAAQD,EAAIiB,EAAGjB,IAE5C,IAAK,IAAI+lB,KADT1kB,EAAI+kB,UAAUpmB,GACOQ,OAAOC,UAAUb,eAAegB,KAAKS,EAAG0kB,KAAI/kB,EAAE+kB,GAAK1kB,EAAE0kB,IAE9E,OAAO/kB,CACX,EACOskF,EAAS9+D,MAAMC,KAAML,UAChC,EAEO,SAASogP,EAAOnlQ,EAAGN,GACtB,IAAIC,EAAI,CAAC,EACT,IAAK,IAAI+kB,KAAK1kB,EAAOb,OAAOC,UAAUb,eAAegB,KAAKS,EAAG0kB,IAAMhlB,EAAEc,QAAQkkB,GAAK,IAC9E/kB,EAAE+kB,GAAK1kB,EAAE0kB,IACb,GAAS,MAAL1kB,GAAqD,oBAAjCb,OAAOw5C,sBACtB,KAAIh6C,EAAI,EAAb,IAAgB+lB,EAAIvlB,OAAOw5C,sBAAsB34C,GAAIrB,EAAI+lB,EAAE9lB,OAAQD,IAC3De,EAAEc,QAAQkkB,EAAE/lB,IAAM,GAAKQ,OAAOC,UAAUqiB,qBAAqBliB,KAAKS,EAAG0kB,EAAE/lB,MACvEgB,EAAE+kB,EAAE/lB,IAAMqB,EAAE0kB,EAAE/lB,IAF4B,CAItD,OAAOgB,CACX,CAEO,SAASk9Q,EAAWC,EAAYhzQ,EAAQxK,EAAKk/E,GAChD,IAA2Ht+E,EAAvHQ,EAAIqkB,UAAUnmB,OAAQiB,EAAIa,EAAI,EAAIoJ,EAAkB,OAAT00E,EAAgBA,EAAOr/E,OAAOo4C,yBAAyBztC,EAAQxK,GAAOk/E,EACrH,GAAuB,kBAAZjmC,SAAoD,oBAArBA,QAAQwkO,SAAyBl9Q,EAAI04C,QAAQwkO,SAASD,EAAYhzQ,EAAQxK,EAAKk/E,QACpH,IAAK,IAAI7/E,EAAIm+Q,EAAWl+Q,OAAS,EAAGD,GAAK,EAAGA,KAASuB,EAAI48Q,EAAWn+Q,MAAIkB,GAAKa,EAAI,EAAIR,EAAEL,GAAKa,EAAI,EAAIR,EAAE4J,EAAQxK,EAAKO,GAAKK,EAAE4J,EAAQxK,KAASO,GAChJ,OAAOa,EAAI,GAAKb,GAAKV,OAAOg5C,eAAeruC,EAAQxK,EAAKO,GAAIA,CAChE,CAEO,SAASm9Q,EAAQC,EAAYC,GAChC,OAAO,SAAUpzQ,EAAQxK,GAAO49Q,EAAUpzQ,EAAQxK,EAAK29Q,EAAa,CACxE,CAEO,SAASE,EAAWC,EAAaC,GACpC,GAAuB,kBAAZ9kO,SAAoD,oBAArBA,QAAQn0B,SAAyB,OAAOm0B,QAAQn0B,SAASg5P,EAAaC,EACpH,CAEO,SAASC,EAAUtjO,EAAS3V,EAAYyS,EAAGyE,GAE9C,OAAO,IAAKzE,IAAMA,EAAIvS,WAAU,SAAUC,EAASC,GAC/C,SAAS+W,EAAUh8C,GAAS,IAAM66C,EAAKkB,EAAUpoB,KAAK3zB,GAAS,CAAE,MAAOE,GAAK+kC,EAAO/kC,EAAI,CAAE,CAC1F,SAAS+7C,EAASj8C,GAAS,IAAM66C,EAAKkB,EAAiB,MAAE/7C,GAAS,CAAE,MAAOE,GAAK+kC,EAAO/kC,EAAI,CAAE,CAC7F,SAAS26C,EAAKp3C,GAJlB,IAAezD,EAIayD,EAAOm3C,KAAO5V,EAAQvhC,EAAOzD,QAJ1CA,EAIyDyD,EAAOzD,MAJhDA,aAAiBs3C,EAAIt3C,EAAQ,IAAIs3C,GAAE,SAAUtS,GAAWA,EAAQhlC,EAAQ,KAIjBi0B,KAAK+nB,EAAWC,EAAW,CAC7GpB,GAAMkB,EAAYA,EAAUp2B,MAAM60B,EAAS3V,GAAc,KAAKlR,OAClE,GACJ,CAEO,SAAS4mB,EAAYC,EAAS/7B,GACjC,IAAsGkE,EAAGo0B,EAAG52C,EAAGqsC,EAA3G0E,EAAI,CAAEvpC,MAAO,EAAG8yC,KAAM,WAAa,GAAW,EAAPt6C,EAAE,GAAQ,MAAMA,EAAE,GAAI,OAAOA,EAAE,EAAI,EAAGu6C,KAAM,GAAIC,IAAK,IAChG,OAAOnO,EAAI,CAAE7Y,KAAMN,EAAK,GAAI,MAASA,EAAK,GAAI,OAAUA,EAAK,IAAwB,oBAAXwlB,SAA0BrM,EAAEqM,OAAOI,UAAY,WAAa,OAAOrzB,IAAM,GAAI4mB,EACvJ,SAASnZ,EAAKjzB,GAAK,OAAO,SAAUynB,GAAK,OACzC,SAAcqyB,GACV,GAAIv3B,EAAG,MAAM,IAAImF,UAAU,mCAC3B,KAAOopB,OACH,GAAIvuB,EAAI,EAAGo0B,IAAM52C,EAAY,EAAR+5C,EAAG,GAASnD,EAAU,OAAImD,EAAG,GAAKnD,EAAS,SAAO52C,EAAI42C,EAAU,SAAM52C,EAAEJ,KAAKg3C,GAAI,GAAKA,EAAEpjB,SAAWxzB,EAAIA,EAAEJ,KAAKg3C,EAAGmD,EAAG,KAAKU,KAAM,OAAOz6C,EAE3J,OADI42C,EAAI,EAAG52C,IAAG+5C,EAAK,CAAS,EAARA,EAAG,GAAQ/5C,EAAEH,QACzBk6C,EAAG,IACP,KAAK,EAAG,KAAK,EAAG/5C,EAAI+5C,EAAI,MACxB,KAAK,EAAc,OAAXhJ,EAAEvpC,QAAgB,CAAE3H,MAAOk6C,EAAG,GAAIU,MAAM,GAChD,KAAK,EAAG1J,EAAEvpC,QAASovC,EAAImD,EAAG,GAAIA,EAAK,CAAC,GAAI,SACxC,KAAK,EAAGA,EAAKhJ,EAAEyJ,IAAI1wB,MAAOinB,EAAEwJ,KAAKzwB,MAAO,SACxC,QACI,KAAkB9pB,GAAZA,EAAI+wC,EAAEwJ,MAAYt7C,OAAS,GAAKe,EAAEA,EAAEf,OAAS,MAAkB,IAAV86C,EAAG,IAAsB,IAAVA,EAAG,IAAW,CAAEhJ,EAAI,EAAG,QAAU,CAC3G,GAAc,IAAVgJ,EAAG,MAAc/5C,GAAM+5C,EAAG,GAAK/5C,EAAE,IAAM+5C,EAAG,GAAK/5C,EAAE,IAAM,CAAE+wC,EAAEvpC,MAAQuyC,EAAG,GAAI,KAAO,CACrF,GAAc,IAAVA,EAAG,IAAYhJ,EAAEvpC,MAAQxH,EAAE,GAAI,CAAE+wC,EAAEvpC,MAAQxH,EAAE,GAAIA,EAAI+5C,EAAI,KAAO,CACpE,GAAI/5C,GAAK+wC,EAAEvpC,MAAQxH,EAAE,GAAI,CAAE+wC,EAAEvpC,MAAQxH,EAAE,GAAI+wC,EAAEyJ,IAAI15C,KAAKi5C,GAAK,KAAO,CAC9D/5C,EAAE,IAAI+wC,EAAEyJ,IAAI1wB,MAChBinB,EAAEwJ,KAAKzwB,MAAO,SAEtBiwB,EAAKz7B,EAAK1e,KAAKy6C,EAAStJ,EAC5B,CAAE,MAAOhxC,GAAKg6C,EAAK,CAAC,EAAGh6C,GAAI62C,EAAI,CAAG,CAAE,QAAUp0B,EAAIxiB,EAAI,CAAG,CACzD,GAAY,EAAR+5C,EAAG,GAAQ,MAAMA,EAAG,GAAI,MAAO,CAAEl6C,MAAOk6C,EAAG,GAAKA,EAAG,QAAK,EAAQU,MAAM,EAC9E,CAtBgDC,CAAK,CAACz6C,EAAGynB,GAAK,CAAG,CAuBrE,CAEO,IAAIi3D,EAAkBn/E,OAAO6yB,OAAS,SAAUnrB,EAAG6/B,EAAGtjB,EAAGm7D,QACjDvgE,IAAPugE,IAAkBA,EAAKn7D,GAC3BjkB,OAAOg5C,eAAetxC,EAAG03E,EAAI,CAAEjoC,YAAY,EAAMpoB,IAAK,WAAa,OAAOwY,EAAEtjB,EAAI,GACnF,EAAI,SAAUvc,EAAG6/B,EAAGtjB,EAAGm7D,QACTvgE,IAAPugE,IAAkBA,EAAKn7D,GAC3Bvc,EAAE03E,GAAM73C,EAAEtjB,EACb,EAEM,SAASy7D,EAAan4C,EAAG7/B,GAC5B,IAAK,IAAI6d,KAAKgiB,EAAa,YAANhiB,GAAoBvlB,OAAOC,UAAUb,eAAegB,KAAKsH,EAAG6d,IAAI45D,EAAgBz3E,EAAG6/B,EAAGhiB,EAC/G,CAEO,SAAS64P,EAAS12Q,GACrB,IAAI7G,EAAsB,oBAAXq4C,QAAyBA,OAAOI,SAAU/R,EAAI1mC,GAAK6G,EAAE7G,GAAIrB,EAAI,EAC5E,GAAI+nC,EAAG,OAAOA,EAAEnnC,KAAKsH,GACrB,GAAIA,GAAyB,kBAAbA,EAAEjI,OAAqB,MAAO,CAC1Cu0B,KAAM,WAEF,OADItsB,GAAKlI,GAAKkI,EAAEjI,SAAQiI,OAAI,GACrB,CAAErH,MAAOqH,GAAKA,EAAElI,KAAMy7C,MAAOvzC,EACxC,GAEJ,MAAM,IAAIygB,UAAUtnB,EAAI,0BAA4B,kCACxD,CAEO,SAASw9Q,EAAO32Q,EAAGjH,GACtB,IAAI8mC,EAAsB,oBAAX2R,QAAyBxxC,EAAEwxC,OAAOI,UACjD,IAAK/R,EAAG,OAAO7/B,EACf,IAAmBhH,EAAYH,EAA3Bf,EAAI+nC,EAAEnnC,KAAKsH,GAAO89G,EAAK,GAC3B,IACI,WAAc,IAAN/kH,GAAgBA,KAAM,MAAQC,EAAIlB,EAAEw0B,QAAQinB,MAAMuqE,EAAGlkH,KAAKZ,EAAEL,MACxE,CACA,MAAOsJ,GAASpJ,EAAI,CAAEoJ,MAAOA,EAAS,CACtC,QACI,IACQjJ,IAAMA,EAAEu6C,OAAS1T,EAAI/nC,EAAU,SAAI+nC,EAAEnnC,KAAKZ,EAClD,CACA,QAAU,GAAIe,EAAG,MAAMA,EAAEoJ,KAAO,CACpC,CACA,OAAO67G,CACX,CAGO,SAAS84J,IACZ,IAAK,IAAI94J,EAAK,GAAIhmH,EAAI,EAAGA,EAAIomB,UAAUnmB,OAAQD,IAC3CgmH,EAAKA,EAAGxjG,OAAOq8P,EAAOz4P,UAAUpmB,KACpC,OAAOgmH,CACX,CAGO,SAAS+4J,IACZ,IAAK,IAAI19Q,EAAI,EAAGrB,EAAI,EAAG47C,EAAKx1B,UAAUnmB,OAAQD,EAAI47C,EAAI57C,IAAKqB,GAAK+kB,UAAUpmB,GAAGC,OACxE,IAAIiB,EAAIb,MAAMgB,GAAIojB,EAAI,EAA3B,IAA8BzkB,EAAI,EAAGA,EAAI47C,EAAI57C,IACzC,IAAK,IAAIoB,EAAIglB,UAAUpmB,GAAIopB,EAAI,EAAG+vG,EAAK/3H,EAAEnB,OAAQmpB,EAAI+vG,EAAI/vG,IAAK3E,IAC1DvjB,EAAEujB,GAAKrjB,EAAEgoB,GACjB,OAAOloB,CACX,CAEO,SAASy6C,EAAc/X,EAAI7pB,EAAMilQ,GACpC,GAAIA,GAA6B,IAArB54P,UAAUnmB,OAAc,IAAK,IAA4B+lH,EAAxBhmH,EAAI,EAAGu3C,EAAIx9B,EAAK9Z,OAAYD,EAAIu3C,EAAGv3C,KACxEgmH,GAAQhmH,KAAK+Z,IACRisG,IAAIA,EAAK3lH,MAAMI,UAAUuJ,MAAMpJ,KAAKmZ,EAAM,EAAG/Z,IAClDgmH,EAAGhmH,GAAK+Z,EAAK/Z,IAGrB,OAAO4jC,EAAGphB,OAAOwjG,GAAMjsG,EAC3B,CAEO,SAASklQ,EAAQv2P,GACpB,OAAOjC,gBAAgBw4P,GAAWx4P,KAAKiC,EAAIA,EAAGjC,MAAQ,IAAIw4P,EAAQv2P,EACtE,CAEO,SAASw2P,EAAiB7jO,EAAS3V,EAAYkX,GAClD,IAAKlD,OAAOylO,cAAe,MAAM,IAAIx2P,UAAU,wCAC/C,IAAoD3oB,EAAhDqtC,EAAIuP,EAAUp2B,MAAM60B,EAAS3V,GAAc,IAAQ2R,EAAI,GAC3D,OAAOr3C,EAAI,CAAC,EAAGk0B,EAAK,QAASA,EAAK,SAAUA,EAAK,UAAWl0B,EAAE05C,OAAOylO,eAAiB,WAAc,OAAO14P,IAAM,EAAGzmB,EACpH,SAASk0B,EAAKjzB,GAASosC,EAAEpsC,KAAIjB,EAAEiB,GAAK,SAAUynB,GAAK,OAAO,IAAIkd,SAAQ,SAAUxkC,EAAGu3B,GAAK0e,EAAEv1C,KAAK,CAACb,EAAGynB,EAAGtnB,EAAGu3B,IAAM,GAAKymP,EAAOn+Q,EAAGynB,EAAI,GAAI,EAAG,CACzI,SAAS02P,EAAOn+Q,EAAGynB,GAAK,KACVxnB,EADqBmsC,EAAEpsC,GAAGynB,IACnB7nB,iBAAiBo+Q,EAAUr5O,QAAQC,QAAQ3kC,EAAEL,MAAM6nB,GAAGoM,KAAKuqP,EAASv5O,GAAUw5O,EAAOjoO,EAAE,GAAG,GAAIn2C,EADtE,CAAE,MAAOH,GAAKu+Q,EAAOjoO,EAAE,GAAG,GAAIt2C,EAAI,CAC/E,IAAcG,CADmE,CAEjF,SAASm+Q,EAAQx+Q,GAASu+Q,EAAO,OAAQv+Q,EAAQ,CACjD,SAASilC,EAAOjlC,GAASu+Q,EAAO,QAASv+Q,EAAQ,CACjD,SAASy+Q,EAAO97P,EAAGkF,GAASlF,EAAEkF,GAAI2uB,EAAE3rB,QAAS2rB,EAAEp3C,QAAQm/Q,EAAO/nO,EAAE,GAAG,GAAIA,EAAE,GAAG,GAAK,CACrF,CAEO,SAASkoO,EAAiBr3Q,GAC7B,IAAIlI,EAAG+lB,EACP,OAAO/lB,EAAI,CAAC,EAAGk0B,EAAK,QAASA,EAAK,SAAS,SAAUnzB,GAAK,MAAMA,CAAG,IAAImzB,EAAK,UAAWl0B,EAAE05C,OAAOI,UAAY,WAAc,OAAOrzB,IAAM,EAAGzmB,EAC1I,SAASk0B,EAAKjzB,EAAGuiB,GAAKxjB,EAAEiB,GAAKiH,EAAEjH,GAAK,SAAUynB,GAAK,OAAQ3C,GAAKA,GAAK,CAAEllB,MAAOo+Q,EAAQ/2Q,EAAEjH,GAAGynB,IAAK+yB,KAAY,WAANx6C,GAAmBuiB,EAAIA,EAAEkF,GAAKA,CAAG,EAAIlF,CAAG,CAClJ,CAEO,SAASg8P,EAAct3Q,GAC1B,IAAKwxC,OAAOylO,cAAe,MAAM,IAAIx2P,UAAU,wCAC/C,IAAiC3oB,EAA7B+nC,EAAI7/B,EAAEwxC,OAAOylO,eACjB,OAAOp3O,EAAIA,EAAEnnC,KAAKsH,IAAMA,EAAqC02Q,EAAS12Q,GAA2BlI,EAAI,CAAC,EAAGk0B,EAAK,QAASA,EAAK,SAAUA,EAAK,UAAWl0B,EAAE05C,OAAOylO,eAAiB,WAAc,OAAO14P,IAAM,EAAGzmB,GAC9M,SAASk0B,EAAKjzB,GAAKjB,EAAEiB,GAAKiH,EAAEjH,IAAM,SAAUynB,GAAK,OAAO,IAAIkd,SAAQ,SAAUC,EAASC,IACvF,SAAgBD,EAASC,EAAQvkC,EAAGmnB,GAAKkd,QAAQC,QAAQnd,GAAGoM,MAAK,SAASpM,GAAKmd,EAAQ,CAAEhlC,MAAO6nB,EAAG+yB,KAAMl6C,GAAM,GAAGukC,EAAS,EADbw5O,CAAOz5O,EAASC,GAA7Bpd,EAAIxgB,EAAEjH,GAAGynB,IAA8B+yB,KAAM/yB,EAAE7nB,MAAQ,GAAI,CAAG,CAEnK,CAEO,SAAS4+Q,EAAqBC,EAAQ9N,GAEzC,OADIpxQ,OAAOg5C,eAAkBh5C,OAAOg5C,eAAekmO,EAAQ,MAAO,CAAE7+Q,MAAO+wQ,IAAiB8N,EAAO9N,IAAMA,EAClG8N,CACX,CAEA,IAAI3/L,EAAqBv/E,OAAO6yB,OAAS,SAAUnrB,EAAGwgB,GAClDloB,OAAOg5C,eAAetxC,EAAG,UAAW,CAAEyvC,YAAY,EAAM92C,MAAO6nB,GAClE,EAAI,SAASxgB,EAAGwgB,GACbxgB,EAAW,QAAIwgB,CACnB,EAEO,SAASs3D,EAAaC,GACzB,GAAIA,GAAOA,EAAIH,WAAY,OAAOG,EAClC,IAAI37E,EAAS,CAAC,EACd,GAAW,MAAP27E,EAAa,IAAK,IAAIx7D,KAAKw7D,EAAe,YAANx7D,GAAmBjkB,OAAOC,UAAUb,eAAegB,KAAKq/E,EAAKx7D,IAAIk7D,EAAgBr7E,EAAQ27E,EAAKx7D,GAEtI,OADAs7D,EAAmBz7E,EAAQ27E,GACpB37E,CACX,CAEO,SAASm2F,EAAgBxa,GAC5B,OAAQA,GAAOA,EAAIH,WAAcG,EAAM,CAAEj0B,QAASi0B,EACtD,CAEO,SAAS0/L,EAAuBC,EAAU7wP,EAAOnY,EAAM4M,GAC1D,GAAa,MAAT5M,IAAiB4M,EAAG,MAAM,IAAImF,UAAU,iDAC5C,GAAqB,oBAAVoG,EAAuB6wP,IAAa7wP,IAAUvL,GAAKuL,EAAMkoB,IAAI2oO,GAAW,MAAM,IAAIj3P,UAAU,4EACvG,MAAgB,MAAT/R,EAAe4M,EAAa,MAAT5M,EAAe4M,EAAE5iB,KAAKg/Q,GAAYp8P,EAAIA,EAAE3iB,MAAQkuB,EAAMQ,IAAIqwP,EACxF,CAEO,SAASC,EAAuBD,EAAU7wP,EAAOluB,EAAO+V,EAAM4M,GACjE,GAAa,MAAT5M,EAAc,MAAM,IAAI+R,UAAU,kCACtC,GAAa,MAAT/R,IAAiB4M,EAAG,MAAM,IAAImF,UAAU,iDAC5C,GAAqB,oBAAVoG,EAAuB6wP,IAAa7wP,IAAUvL,GAAKuL,EAAMkoB,IAAI2oO,GAAW,MAAM,IAAIj3P,UAAU,2EACvG,MAAiB,MAAT/R,EAAe4M,EAAE5iB,KAAKg/Q,EAAU/+Q,GAAS2iB,EAAIA,EAAE3iB,MAAQA,EAAQkuB,EAAMmoB,IAAI0oO,EAAU/+Q,GAASA,CACxG,yBC9OA,OAUA,SAAWqE,EAAQma,GAEf,aAOA,IAGI2tL,EAAc,WACdC,EAAc,YACdC,EAAc,SACdC,EAAc,SACdC,EAAc,QACdC,EAAc,QACdC,EAAc,OACdC,EAAc,OACdl8G,EAAc,SACdC,EAAc,UACdk8G,EAAc,eACdC,EAAc,UACdC,EAAc,SACdC,EAAc,SACdC,EAAc,UACdC,EAAc,WACdC,EAAc,WAGdC,EAAU,SACVC,EAAU,QACVC,EAAU,OACVC,EAAa,aACbC,EAAU,UACVC,EAAU,SAEVC,EAAU,UACVC,EAAU,SACVC,EAAU,SACVC,EAAU,KACVC,EAAY,YACZC,EAAY,WACZC,EAAU,QACVC,EAAU,UACVC,EAAU,QACVC,EAAU,OACVC,EAAU,SACVC,EAAU,QACVC,EAAc,WACdC,EAAc,cACd1J,EAAU,SAiBV2J,EAAY,SAAUjtL,GAElB,IADA,IAAIktL,EAAQ,CAAC,EACJpvM,EAAE,EAAGA,EAAEkiB,EAAIjiB,OAAQD,IACxBovM,EAAMltL,EAAIliB,GAAG+J,eAAiBmY,EAAIliB,GAEtC,OAAOovM,CACX,EACAn4J,EAAM,SAAUo4J,EAAMC,GAClB,cAAcD,IAASlC,IAAuD,IAA5CoC,EAASD,GAAMztM,QAAQ0tM,EAASF,GACtE,EACAE,EAAW,SAAUrnL,GACjB,OAAOA,EAAIgF,aACf,EAIAssE,EAAO,SAAUtxE,EAAK5F,GAClB,UAAU,IAAU6qL,EAEhB,OADAjlL,EAAMA,EAAIvb,QAAQ,SA7EZ,WA8EO,IAAUsgM,EAAa/kL,EAAMA,EAAIjmB,UAAU,EA3DhD,IA6DpB,EAMIutM,EAAY,SAAU9+J,EAAI++J,GAKtB,IAHA,IAAWrmL,EAAG3E,EAAGsB,EAAGsxB,EAAGz4B,EAASoL,EAA5BhqB,EAAI,EAGDA,EAAIyvM,EAAOxvM,SAAW2e,GAAS,CAElC,IAAI06D,EAAQm2H,EAAOzvM,GACf2D,EAAQ8rM,EAAOzvM,EAAI,GAIvB,IAHAopB,EAAI3E,EAAI,EAGD2E,EAAIkwD,EAAMr5E,SAAW2e,GAEnB06D,EAAMlwD,IAGX,GAFAxK,EAAU06D,EAAMlwD,KAAKmB,KAAKmmB,GAGtB,IAAK3qB,EAAI,EAAGA,EAAIpiB,EAAM1D,OAAQ8lB,IAC1BiE,EAAQpL,IAAU6F,UAClB4yB,EAAI1zC,EAAMoiB,MAEOmnL,GAAY71J,EAAEp3C,OAAS,EACnB,IAAbo3C,EAAEp3C,cACSo3C,EAAE,IAAM21J,EAEfvmL,KAAK4wB,EAAE,IAAMA,EAAE,GAAGz2C,KAAK6lB,KAAMuD,GAG7BvD,KAAK4wB,EAAE,IAAMA,EAAE,GAEC,IAAbA,EAAEp3C,cAEEo3C,EAAE,KAAO21J,GAAe31J,EAAE,GAAG9sB,MAAQ8sB,EAAE,GAAGxxB,KAKjDY,KAAK4wB,EAAE,IAAMrtB,EAAQA,EAAMrd,QAAQ0qC,EAAE,GAAIA,EAAE,IAAMh4B,EAHjDoH,KAAK4wB,EAAE,IAAMrtB,EAAQqtB,EAAE,GAAGz2C,KAAK6lB,KAAMuD,EAAOqtB,EAAE,IAAMh4B,EAKpC,IAAbg4B,EAAEp3C,SACLwmB,KAAK4wB,EAAE,IAAMrtB,EAAQqtB,EAAE,GAAGz2C,KAAK6lB,KAAMuD,EAAMrd,QAAQ0qC,EAAE,GAAIA,EAAE,KAAOh4B,GAG1EoH,KAAK4wB,GAAKrtB,GAAgB3K,EAK1Crf,GAAK,CACT,CACJ,EAEA0vM,EAAY,SAAUxnL,EAAK3jB,GAEvB,IAAK,IAAIvE,KAAKuE,EAEV,UAAWA,EAAIvE,KAAOktM,GAAY3oM,EAAIvE,GAAGC,OAAS,GAC9C,IAAK,IAAImpB,EAAI,EAAGA,EAAI7kB,EAAIvE,GAAGC,OAAQmpB,IAC/B,GAAI6tB,EAAI1yC,EAAIvE,GAAGopB,GAAIlB,GACf,MAjJN,MAiJcloB,EAAiBqf,EAAYrf,OAG1C,GAAIi3C,EAAI1yC,EAAIvE,GAAIkoB,GACnB,MArJE,MAqJMloB,EAAiBqf,EAAYrf,EAG7C,OAAOkoB,CACf,EAiBIynL,EAAoB,CAChB,GAAc,OACd,UAAc,SACd,SAAc,QACd,IAAc,SACd,GAAc,CAAC,SAAU,UACzB,MAAc,SACd,EAAc,SACd,EAAc,SACd,IAAc,SACd,GAAc,CAAC,SAAU,WACzB,GAAc,OAOlBK,EAAU,CAEVz/J,QAAU,CAAC,CAEP,gCACG,CAAC+gD,EAAS,CAACg8G,EAAM,WAAY,CAChC,+BACG,CAACh8G,EAAS,CAACg8G,EAAM,SAAU,CAG9B,4BACA,mDACA,2CACG,CAACA,EAAMh8G,GAAU,CACpB,yBACG,CAACA,EAAS,CAACg8G,EAAMqB,EAAM,UAAW,CACrC,qBACG,CAACr9G,EAAS,CAACg8G,EAAMqB,IAAS,CAG7B,0DACG,CAACr9G,EAAS,CAACg8G,EAAM,UAAW,CAC/B,uBACA,8DAEA,uDACA,2BAGA,+LAEA,kCACA,uBACG,CAACA,EAAMh8G,GAAU,CACpB,qDACG,CAACA,EAAS,CAACg8G,EAAM,KAAKa,IAAW,CACpC,+BACA,+BACA,8BACG,CAAC78G,EAAS,CAACg8G,EAAM,WAAY,CAChC,yBACG,CAACh8G,EAAS,CAACg8G,EAAM,cAAe,CACnC,+CACG,CAACh8G,EAAS,CAACg8G,EAAM,OAAQ,CAC5B,oCACG,CAACh8G,EAAS,CAACg8G,EAAM,WAAY,CAChC,yBACG,CAACh8G,EAAS,CAACg8G,EAAM,gBAAgBa,IAAW,CAC/C,2BACG,CAAC,CAACb,EAAM,OAAQ,aAAaa,GAAU78G,GAAU,CACpD,uBACG,CAACA,EAAS,CAACg8G,EAAMe,EAAQ,WAAY,CACxC,qBACG,CAAC/8G,EAAS,CAACg8G,EAAMqB,EAAM,WAAY,CACtC,0BACG,CAACr9G,EAAS,CAACg8G,EAAM,YAAa,CACjC,sBACG,CAACh8G,EAAS,CAACg8G,EAAM,YAAa,CACjC,qBACG,CAACh8G,EAAS,CAACg8G,EAAMqB,EAAM,WAAY,CACtC,2BACG,CAACr9G,EAAS,CAACg8G,EAAM,QAAQa,IAAW,CACvC,sBACG,CAAC78G,EAAS,CAACg8G,EAAMe,IAAW,CAC/B,iCACG,CAAC,CAACf,EAAM,OAASa,IAAW,CAC/B,oDACG,CAAC,CAACb,EAAM,OAAQ,MAAQa,GAAU78G,GAAU,CAC/C,8BACG,CAACA,EAAS,CAACg8G,EAAMsB,EAAU,cAAe,CAC7C,+BACG,CAAC,CAACtB,EAAM,KAAM,KAAMh8G,GAAU,CACjC,0BACG,CAACA,EAAS,CAACg8G,EAAM,mBAAoB,CACxC,4BACG,CAAC,CAACA,EAAM,gBAAiBh8G,GAAU,CACtC,gCACA,iDACA,8CACG,CAACg8G,EAAMh8G,GAAU,CACpB,eACA,sBACG,CAACg8G,GAAO,CAGX,+DACG,CAAC,CAACA,EAAM2B,GAAW39G,GAAU,CAChC,uBACA,uCACA,kCACA,4BACA,4BACA,6BACA,iDACG,CAACg8G,EAAMh8G,GAAU,CACpB,gCACG,CAACA,EAAS,CAACg8G,EAAM,QAAS,CAC7B,8CACG,CAACh8G,EAAS,CAACg8G,EAAM,WAAY,CAEhC,oCACG,CAACh8G,EAAS,CAACg8G,EAAMc,EAAO,cAAe,CAE1C,+BACG,CAAC,CAACd,EAAMc,EAAO,YAAa98G,GAAU,CAEzC,2DACG,CAACA,EAAS,CAACg8G,EAAM,WAAWa,IAAW,CAE1C,+DACG,CAACb,EAAMh8G,GAAU,CAEpB,gDACG,CAACA,EAAS,CAACg8G,EAAM,kBAAmB,CACvC,sDACG,CAACh8G,EAASg8G,GAAO,CACpB,gDACG,CAACA,EAAM,CAACh8G,EAASo+G,EAjJT,CACX,MAAU,KACV,IAAU,KACV,IAAU,KACV,MAAU,OACV,QAAU,OACV,QAAU,OACV,QAAU,OACV,IAAU,OAyIqC,CAE/C,8BACG,CAACpC,EAAMh8G,GAAU,CAGpB,wCACG,CAAC,CAACg8G,EAAM,YAAah8G,GAAU,CAClC,uCACG,CAACA,EAAS,CAACg8G,EAAMe,EAAQ,aAAc,CAC1C,6BACA,cACA,mGAEA,+FAEA,wBACA,2CAGA,wHAEA,uBACA,sBACG,CAACf,EAAMh8G,GAAU,CAEpB,wBACG,CAACg8G,EAAM,CAACh8G,EAAS,eAAgB,MAGxC+xG,IAAM,CAAC,CAEH,iDACG,CAAC,CAACmK,EAAc,UAAW,CAE9B,gBACG,CAAC,CAACA,EAAc+B,IAAY,CAE/B,0BACG,CAAC,CAAC/B,EAAc,SAAU,CAE7B,oCACG,CAAC,CAACA,EAAc,UAAW,CAE9B,mCACG,CAAC,CAACA,EAAc,UAAW,CAG9B,8BACG,CAAC,CAACA,EAAc,QAAS,CAE5B,0CACG,CAAC,CAACA,EAAc,OAtWT,GAsWwB+B,IAAY,CAE9C,kBACG,CAAC,CAAC/B,EAAc,UAAW,CAE9B,2HAEG,CAAC,CAACA,EAAc+B,KAGvB3+K,OAAS,CAAC,CAON,mFACG,CAACy8K,EAAO,CAACh8G,EAAQu9G,GAAU,CAACrB,EAAMI,IAAU,CAC/C,yDACA,uBACA,iBACG,CAACN,EAAO,CAACh8G,EAAQu9G,GAAU,CAACrB,EAAMG,IAAU,CAG/C,4CACG,CAACL,EAAO,CAACh8G,EAAQ28G,GAAQ,CAACT,EAAMG,IAAU,CAC7C,6BACA,oCACA,kCACG,CAACL,EAAO,CAACh8G,EAAQ28G,GAAQ,CAACT,EAAMI,IAAU,CAC7C,iBACG,CAACN,EAAO,CAACh8G,EAAQ28G,IAAS,CAG7B,iCACG,CAACX,EAAO,CAACh8G,EAAQw9G,GAAQ,CAACtB,EAAMG,IAAU,CAG7C,+DACG,CAACL,EAAO,CAACh8G,EAAQk9G,GAAS,CAAChB,EAAMI,IAAU,CAC9C,kCACA,sEACG,CAACN,EAAO,CAACh8G,EAAQk9G,GAAS,CAAChB,EAAMG,IAAU,CAG9C,kDACA,yBACA,uCACA,iDACA,4DACA,yGACG,CAAC,CAACL,EAAO,KAAM,KAAM,CAACh8G,EAAQ09G,GAAS,CAACxB,EAAMG,IAAU,CAC3D,+CACA,8CACE,CAAC,CAACL,EAAO,KAAM,KAAM,CAACh8G,EAAQ09G,GAAS,CAACxB,EAAMI,IAAU,CAG1D,sBACA,mEACG,CAACN,EAAO,CAACh8G,EAAQ,QAAS,CAACk8G,EAAMG,IAAU,CAG9C,yBACA,oCACG,CAACL,EAAO,CAACh8G,EAAQ,QAAS,CAACk8G,EAAMG,IAAU,CAG9C,mCACG,CAACL,EAAO,CAACh8G,EAAQ,UAAW,CAACk8G,EAAMG,IAAU,CAGhD,iFACA,4BACA,sDACG,CAACL,EAAO,CAACh8G,EAAQq9G,GAAW,CAACnB,EAAMG,IAAU,CAChD,qCACG,CAACL,EAAO,CAACh8G,EAAQq9G,GAAW,CAACnB,EAAMI,IAAU,CAGhD,iEACG,CAACN,EAAO,CAACh8G,EAAQm9G,GAAK,CAACjB,EAAMI,IAAU,CAC1C,sDACA,oDACA,wBACG,CAACN,EAAO,CAACh8G,EAAQm9G,GAAK,CAACjB,EAAMG,IAAU,CAG1C,oBACA,qEACG,CAACL,EAAO,CAACh8G,EAAQ,UAAW,CAACk8G,EAAMI,IAAU,CAGhD,qCACA,0BACG,CAAC,CAACN,EAAO,KAAM,KAAM,CAACh8G,EAAQ,SAAU,CAACk8G,EAAMG,IAAU,CAG5D,gBACG,CAACL,EAAO,CAACh8G,EAAQi9G,GAAS,CAACf,EAAMI,IAAU,CAC9C,6CACG,CAACN,EAAO,CAACh8G,EAAQi9G,GAAS,CAACf,EAAMG,IAAU,CAG9C,0GACG,CAACL,EAAO,CAACh8G,EAAQy9G,GAAO,CAACvB,EAAMG,IAAU,CAC5C,oBACA,iCACG,CAAC,CAACL,EAAO,iBAAkB,CAACh8G,EAAQy9G,GAAO,CAACvB,EAAMI,IAAU,CAG/D,sCACA,0CACG,CAACN,EAAO,CAACh8G,EAAQ,WAAY,CAACk8G,EAAMG,IAAU,CAGjD,eACA,uCACA,gCACG,CAACL,EAAO,CAACh8G,EAAQ08G,GAAS,CAACR,EAAMI,IAAU,CAC9C,iDACG,CAAC,CAACN,EAAO,QAAS,iBAAkB,CAACh8G,EAAQ08G,GAAS,CAACR,EAAMG,IAAU,CAG1E,gCACG,CAACL,EAAOh8G,EAAQ,CAACk8G,EAAMI,IAAU,CACpC,gCACA,kBACG,CAACN,EAAO,CAACh8G,EAAQ68G,GAAa,CAACX,EAAMG,IAAU,CAGlD,qFACG,CAACL,EAAO,CAACh8G,EAAQ48G,GAAO,CAACV,EAAMI,IAAU,CAC5C,iDACG,CAACN,EAAO,CAACh8G,EAAQ48G,GAAO,CAACV,EAAMG,IAAU,CAG5C,cACG,CAACL,EAAO,CAACh8G,EAAQ,OAAQ,CAACk8G,EAAMI,IAAU,CAC7C,2CAGA,oCACA,iFACG,CAACt8G,EAAQ,CAACg8G,EAAO,KAAM,KAAM,CAACE,EAAMG,IAAU,CAGjD,uCACG,CAACL,EAAO,CAACh8G,EAAQ,QAAS,CAACk8G,EAAMI,IAAU,CAG9C,8BACA,qBACG,CAACN,EAAO,CAACh8G,EAAQ,SAAU,CAACk8G,EAAMG,IAAU,CAG/C,kDACG,CAACL,EAAO,CAACh8G,EAAQ,WAAY,CAACk8G,EAAMG,IAAU,CAGjD,gHAEA,mBACA,iBACA,8BACA,0BACA,WACA,yBACG,CAACr8G,EAAQg8G,EAAO,CAACE,EAAMG,IAAU,CAEpC,2BACA,wBACA,uCACA,uBACA,4BACA,iCACA,kCACA,8BACA,gCACA,mCACG,CAACr8G,EAAQg8G,EAAO,CAACE,EAAMI,IAAU,CAEpC,kBACG,CAACN,EAAO,CAACh8G,EAAQo9G,GAAY,CAAClB,EAAMI,IAAU,CACjD,qCACG,CAACN,EAAO,CAACh8G,EAAQ,aAAc,CAACk8G,EAAMG,IAAU,CACnD,aACG,CAACL,EAAO,CAACh8G,EAAQ,QAAS,CAACk8G,EAAMG,IAAU,CAC9C,gBACG,CAACL,EAAO,CAACh8G,EAAQ,WAAY,CAACk8G,EAAMG,IAAU,CACjD,iBACG,CAACL,EAAO,CAACh8G,EAAQ,OAAQ,CAACk8G,EAAMI,IAAU,CAC7C,0BACG,CAACN,EAAO,CAACh8G,EAAQ,QAAS,CAACk8G,EAAMI,IAAU,CAC9C,wBACG,CAACN,EAAO,CAACh8G,EAAQ,WAAY,CAACk8G,EAAMI,IAAU,CACjD,+CACG,CAACN,EAAO,CAACh8G,EAAQ,kBAAmB,CAACk8G,EAAMI,IAAU,CACxD,qBACG,CAACN,EAAO,CAACh8G,EAAQ,YAAa,CAACk8G,EAAMI,IAAU,CAClD,cACG,CAACN,EAAO,CAACh8G,EAAQ,OAAQ,CAACk8G,EAAMI,IAAU,CAC7C,mBACG,CAACN,EAAO,CAACh8G,EAAQ,OAAQ,CAACk8G,EAAMG,IAAU,CAC7C,wBACG,CAACL,EAAO,CAACh8G,EAAQ,SAAU,CAACk8G,EAAMG,IAAU,CAC/C,mBACG,CAACL,EAAO,CAACh8G,EAAQ,SAAU,CAACk8G,EAAMI,IAAU,CAC/C,wBACG,CAACN,EAAO,CAACh8G,EAAQ,QAAS,CAACk8G,EAAMI,IAAU,CAC9C,mBACA,sCACG,CAAC,CAACt8G,EAAQ,gBAAiBg8G,EAAO,CAACE,EAAMI,IAAU,CACtD,sBACG,CAACN,EAAO,CAACh8G,EAAQ,YAAa,CAACk8G,EAAMI,IAAU,CAClD,8BACG,CAACN,EAAO,CAACh8G,EAAQ,YAAa,CAACk8G,EAAMI,IAAU,CAClD,oDACG,CAAC,CAACt8G,EAAQ,SAAUg8G,EAAO,CAACE,EAAMG,IAAU,CAC/C,2BACG,CAAC,CAACr8G,EAAQ,SAAUg8G,EAAO,CAACE,EAAMG,IAAU,CAC/C,cACG,CAACL,EAAO,CAACh8G,EAAQ,aAAc,CAACk8G,EAAMG,IAAU,CACnD,uCACG,CAACL,EAAO,CAACh8G,EAAQ,WAAY,CAACk8G,EAAMI,IAAU,CACjD,wBACG,CAACN,EAAO,CAACh8G,EAAQ,aAAc,CAACk8G,EAAMI,IAAU,CACnD,kBACG,CAACN,EAAO,CAACh8G,EAAQ,SAAU,CAACk8G,EAAMI,IAAU,CAC/C,qBACG,CAACN,EAAO,CAACh8G,EAAQ,UAAW,CAACk8G,EAAMI,IAAU,CAChD,mBACG,CAACt8G,EAAQg8G,EAAO,CAACE,EAAMG,IAAU,CACpC,sBACG,CAAC,CAACL,EAAO,MAAO,KAAM,CAACh8G,EAAQo9G,GAAY,CAAClB,EAAMG,IAAU,CAC/D,yDACG,CAACL,EAAO,CAACh8G,EAAQ29G,GAAQ,CAACzB,EAAMI,IAAU,CAC7C,yCACG,CAACN,EAAO,CAACh8G,EAAQ29G,GAAQ,CAACzB,EAAMG,IAAU,CAM7C,wBACG,CAACr8G,EAAQ,CAACk8G,EAAMK,IAAW,CAC9B,uBACG,CAAC,CAACP,EAAO,IAAK,WAAY,CAACh8G,EAAQu9G,GAAU,CAACrB,EAAMK,IAAW,CAClE,8DACG,CAAC,CAACv8G,EAAQm9G,GAAK,CAACjB,EAAMK,IAAW,CACpC,gBACG,CAACv8G,EAAQ,CAACg8G,EAAOW,EAAM,OAAQ,CAACT,EAAMK,IAAW,CACpD,UACG,CAAC,CAACP,EAAOe,EAAO,QAAS,CAAC/8G,EAAQi9G,GAAS,CAACf,EAAMK,IAAW,CAChE,6BACG,CAACP,EAAO,CAACh8G,EAAQ08G,GAAS,CAACR,EAAMK,IAAW,CAC/C,uBACA,uBACG,CAACP,EAAO,CAACh8G,EAAQw9G,GAAQ,CAACtB,EAAMK,IAAU,CAC7C,4BACG,CAACP,EAAO,CAACh8G,EAAQy9G,GAAO,CAACvB,EAAMK,IAAW,CAC7C,qBACG,CAACP,EAAO,CAACh8G,EAAQ09G,GAAS,CAACxB,EAAMK,IAAW,CAC/C,6BACG,CAACv8G,EAAQg8G,EAAO,CAACE,EAAMK,IAAW,CACrC,0CACA,6DACG,CAAC,CAACv8G,EAAQmI,GAAO,CAAC6zG,EAAO7zG,GAAO,CAAC+zG,EAAMK,IAAW,CACrD,mDACG,CAAC,CAACL,EAAMK,IAAW,CAMtB,UACA,8BACG,CAACv8G,EAAQg8G,EAAO,CAACE,EAAME,IAAW,CACrC,0BACG,CAACJ,EAAO,CAACh8G,EAAQ,UAAW,CAACk8G,EAAME,IAAW,CACjD,mCACG,CAACJ,EAAO,CAACh8G,EAAQy9G,GAAO,CAACvB,EAAME,IAAW,CAC7C,sCACG,CAACJ,EAAO,CAACh8G,EAAQo9G,GAAY,CAAClB,EAAME,IAAW,CAMlD,kBACG,CAACp8G,EAAQg8G,EAAO,CAACE,EAAMM,IAAY,CACtC,wCACG,CAACR,EAAO,CAACh8G,EAAQ28G,GAAQ,CAACT,EAAMM,IAAY,CAC/C,wBACG,CAACR,EAAO,CAACh8G,EAAQi9G,GAAS,CAACf,EAAMM,IAAY,CAChD,6BACG,CAACR,EAAO,CAACh8G,EAAQ29G,GAAQ,CAACzB,EAAMM,IAAY,CAC/C,sBACG,CAACR,EAAO,CAACh8G,EAAQ49G,GAAW,CAAC1B,EAAMM,IAAY,CAMlD,wCACG,CAACx8G,EAAQ,CAACk8G,EAAMO,IAAY,CAC/B,cACG,CAACT,EAAO,CAACh8G,EAAQ08G,GAAS,CAACR,EAAMO,IAAY,CAMhD,kEACG,CAACT,EAAO,CAACE,EAAMG,IAAU,CAC5B,+DACG,CAACL,EAAO,CAACE,EAAMI,IAAU,CAC5B,gDACG,CAAC,CAACJ,EAAMI,IAAU,CACrB,kEACG,CAAC,CAACJ,EAAMG,IAAU,CACrB,kCACG,CAACL,EAAO,CAACh8G,EAAQ,aAGxB6yF,OAAS,CAAC,CAEN,8BACG,CAAC5yF,EAAS,CAACg8G,EAAM2C,aAAe,CAEnC,6CACG,CAAC3+G,EAAS,CAACg8G,EAAM,UAAW,CAE/B,uBACA,sEACA,0BACA,yCACA,8BACA,eACG,CAACA,EAAMh8G,GAAU,CAEpB,iCACG,CAACA,EAASg8G,IAGjB96G,GAAK,CAAC,CAGF,mCACG,CAAC86G,EAAMh8G,GAAU,CACpB,yDACG,CAACg8G,EAAM,CAACh8G,EAASo+G,EAAWC,IAAqB,CACpD,0BACA,2CACA,wCACG,CAAC,CAACr+G,EAASo+G,EAAWC,GAAoB,CAACrC,EAAM,YAAa,CAGjE,sDACA,4CACA,wBACG,CAAC,CAACh8G,EAAS,KAAM,KAAM,CAACg8G,EAAM,QAAS,CAC1C,0BACA,yCACG,CAAC,CAACA,EAAM9H,GAAS,CAACl0G,EAAS,KAAM,MAAO,CAG3C,kDACG,CAACA,EAASg8G,GAAO,CACpB,+EACA,8BACA,+BACA,kBACG,CAACA,EAAMh8G,GAAU,CACpB,cACG,CAACA,EAAS,CAACg8G,EAAMY,IAAc,CAClC,6DACG,CAAC58G,EAAS,CAACg8G,EAAM,YAAa,CACjC,mFACG,CAACh8G,EAAS,CAACg8G,EAAMe,EAAQ,QAAS,CACrC,kBACA,wCACG,CAAC/8G,EAAS,CAACg8G,EAAM,UAAW,CAC/B,wCACG,CAACh8G,EAAS,CAACg8G,EAAM,YAAa,CAGjC,qBACG,CAACh8G,EAAS,CAACg8G,EAAMc,EAAO,SAAU,CACrC,oCACG,CAAC,CAACd,EAAM4B,GAAc59G,GAAS,CAGlC,qBACA,iBACA,2BAGA,mDACA,2BAGA,wCACA,yBACA,4BACA,8SAEA,2BACA,oBACA,6EACA,kBACG,CAACg8G,EAAMh8G,GAAU,CACpB,yBACG,CAAC,CAACg8G,EAAM,WAAYh8G,GAAU,CACjC,sCACA,kCACA,mEACA,sBACG,CAACg8G,EAAMh8G,KAQd4xG,EAAW,SAAUxyJ,EAAIw/J,GAOzB,UALWx/J,IAAOw8J,IACdgD,EAAax/J,EACbA,EAAKrxB,KAGHoH,gBAAgBy8K,GAClB,OAAO,IAAIA,EAASxyJ,EAAIw/J,GAAYC,YAGxC,IAAIC,SAAqBlrM,IAAW+nM,GAAc/nM,EAAO0wB,UAAa1wB,EAAO0wB,UAAYvW,EACrFgxL,EAAM3/J,IAAQ0/J,GAAcA,EAAWr6K,UAAaq6K,EAAWr6K,UA5xBrD,IA6xBVu6K,EAASF,GAAcA,EAAWG,cAAiBH,EAAWG,cAAgBlxL,EAC9EmxL,EAAUN,EA9uBL,SAAUF,EAASE,GACxB,IAAIO,EAAgB,CAAC,EACrB,IAAK,IAAIzwM,KAAKgwM,EACNE,EAAWlwM,IAAMkwM,EAAWlwM,GAAGC,OAAS,IAAM,EAC9CwwM,EAAczwM,GAAKkwM,EAAWlwM,GAAGwiB,OAAOwtL,EAAQhwM,IAEhDywM,EAAczwM,GAAKgwM,EAAQhwM,GAGnC,OAAOywM,CACX,CAouB2BxpH,CAAO+oH,EAASE,GAAcF,EACrDU,EAAaN,GAAcA,EAAWr6K,WAAas6K,EAyEvD,OAvEA5pL,KAAK28K,WAAa,WACd,IA1tBiB1pK,EA0tBbi3K,EAAW,CAAC,EAShB,OARAA,EAASrD,GAAQjuL,EACjBsxL,EAASr/G,GAAWjyE,EACpBmwL,EAAU5uM,KAAK+vM,EAAUN,EAAKG,EAAQjgK,SACtCogK,EAASvD,UA9tBQ1zK,EA8tBUi3K,EAASr/G,MA7tBT67G,EAAWzzK,EAAQ/sB,QAAQ,WAzE5C,IAyE+D6d,MAAM,KAAK,GAAKnL,EA+tBrFqxL,GAAcN,GAAcA,EAAWQ,cAAgBR,EAAWQ,MAAMC,SAAW7D,IACnF2D,EAASrD,GAAQ,SAEdqD,CACX,EACAlqL,KAAK68K,OAAS,WACV,IAAIwN,EAAO,CAAC,EAGZ,OAFAA,EAAKtD,GAAgBnuL,EACrBmwL,EAAU5uM,KAAKkwM,EAAMT,EAAKG,EAAQnN,KAC3ByN,CACX,EACArqL,KAAK88K,UAAY,WACb,IAAIwN,EAAU,CAAC,EAaf,OAZAA,EAAQ1/G,GAAUhyE,EAClB0xL,EAAQ1D,GAAShuL,EACjB0xL,EAAQxD,GAAQluL,EAChBmwL,EAAU5uM,KAAKmwM,EAASV,EAAKG,EAAQ5/K,QACjC8/K,IAAeK,EAAQxD,IAAS+C,GAASA,EAAMx5C,SAC/Ci6C,EAAQxD,GAAQG,GAGhBgD,GAAgC,aAAlBK,EAAQ1D,IAAyB+C,UAAqBA,EAAWY,aAAe/D,GAAcmD,EAAW9kH,gBAAkB8kH,EAAW9kH,eAAiB,IACrKylH,EAAQ1D,GAAS,OACjB0D,EAAQxD,GAAQI,GAEboD,CACX,EACAtqL,KAAK+8K,UAAY,WACb,IAAIvf,EAAU,CAAC,EAIf,OAHAA,EAAQqpB,GAAQjuL,EAChB4kK,EAAQ3yF,GAAWjyE,EACnBmwL,EAAU5uM,KAAKqjL,EAASosB,EAAKG,EAAQtsB,QAC9BD,CACX,EACAx9J,KAAKg9K,MAAQ,WACT,IAAIwN,EAAM,CAAC,EASX,OARAA,EAAI3D,GAAQjuL,EACZ4xL,EAAI3/G,GAAWjyE,EACfmwL,EAAU5uM,KAAKqwM,EAAKZ,EAAKG,EAAQh+G,IAC7Bk+G,IAAeO,EAAI3D,IAASgD,GAA2B,WAAlBA,EAAMtlH,WAC3CimH,EAAI3D,GAAQgD,EAAMtlH,SACGr+E,QAAQ,aAAcuiM,GACtBviM,QAAQ,SAAU64L,IAEpCyL,CACX,EACAxqL,KAAK0pL,UAAY,WACb,MAAO,CACHz/J,GAAUjqB,KAAKqpB,QACfS,QAAU9pB,KAAK28K,aACflf,OAAUz9J,KAAK+8K,YACfhxG,GAAU/rE,KAAKg9K,QACf7yK,OAAUnK,KAAK88K,YACfF,IAAU58K,KAAK68K,SAEvB,EACA78K,KAAKqpB,MAAQ,WACT,OAAOugK,CACX,EACA5pL,KAAKm9K,MAAQ,SAAUlzJ,GAEnB,OADA2/J,SAAc3/J,IAAOy8J,GAAYz8J,EAAGzwC,OAj1BxB,IAi1BkDu5F,EAAK9oD,EAj1BvD,KAi1B4EA,EACjFjqB,IACX,EACAA,KAAKm9K,MAAMyM,GACJ5pL,IACX,EAEAy8K,EAAS5xG,QA52BS,SA62BlB4xG,EAASiL,QAAWgB,EAAU,CAAC7B,EAAMh8G,EAAS87G,IAC9ClK,EAASgO,IAAM/B,EAAU,CAAC3B,IAC1BtK,EAASiO,OAAShC,EAAU,CAAC9B,EAAOh8G,EAAQk8G,EAAME,EAASC,EAAQE,EAASD,EAAQE,EAAUC,IAC9F5K,EAASkO,OAASlO,EAASmO,GAAKlC,EAAU,CAAC7B,EAAMh8G,WAOvC,IAAc27G,GAEgBprL,EAAOC,UACvCA,EAAUD,EAAOC,QAAUohL,GAE/BphL,EAAQohL,SAAWA,GAGiB,QAChC,aACI,OAAOA,CACV,2CACah+L,IAAW+nM,IAEzB/nM,EAAOg+L,SAAWA,GAS1B,IAAIloJ,SAAW91C,IAAW+nM,IAAe/nM,EAAOosM,QAAUpsM,EAAOqsM,OACjE,GAAIv2J,IAAMA,EAAEtK,GAAI,CACZ,IAAIsnC,GAAS,IAAIkrH,EACjBloJ,EAAEtK,GAAKsnC,GAAOm4H,YACdn1J,EAAEtK,GAAGnhB,IAAM,WACP,OAAOyoD,GAAOloC,OAClB,EACAkL,EAAEtK,GAAGwG,IAAM,SAAUxG,GACjBsnC,GAAO4rH,MAAMlzJ,GACb,IAAIpsC,EAAS0zE,GAAOm4H,YACpB,IAAK,IAAIltL,KAAQ3e,EACb02C,EAAEtK,GAAGztB,GAAQ3e,EAAO2e,EAE5B,CACJ,CAEH,CAv6BD,CAu6BqB,kBAAX/d,OAAsBA,OAASuhB,yFC15BlC,SAASq5P,EAAWj/Q,EAAOmG,EAAU,CAAC,GACzC,MAAM+4Q,EAaV,SAA4Bl/Q,GAExB,GAAIA,GAAsB,MAAbA,EAAM,IAA2B,MAAbA,EAAM,GACnC,OAAOA,EAAM00B,OAAO,GAExB,OAAO10B,CACX,CAnBuBm/Q,CAAmBn/Q,GACtC,IAAKmG,EAAQi5Q,WACT,IACI,OAAOh0P,KAAKrC,MAAMm2P,EACtB,CACA,MAAOh/Q,GAEP,CAIJ,OAAOF,CACX,CCnCA,MCCe,MACX,WAAAynC,CAAY43O,EAASC,EAAoB,CAAC,GACtC15P,KAAK25P,gBAAkB,GACvB35P,KAAK45P,qBAAsB,EAC3B55P,KAAKguB,OAAS,KACV,IAAKhuB,KAAK45P,oBACN,OAEJ,MAAMC,EAAkB75P,KAAKy5P,QAC7Bz5P,KAAKy5P,QAAUtyO,EAAA,EAAazsC,SAASysC,QACrCnnB,KAAK85P,cAAcD,EAAgB,EAEvC,MAAME,EAAiC,qBAAbr/Q,SAA2B,GAAKA,SAASysC,OACnEnnB,KAAKy5P,QFHN,SAAsBA,GACzB,MAAuB,kBAAZA,EACAtyO,EAAA,EAAasyO,GAEI,kBAAZA,GAAoC,OAAZA,EAC7BA,EAGA,CAAC,CAEhB,CEPuBO,CAAaP,GAAWM,GACvC/5P,KAAK05P,kBAAoBA,EACzB15P,KAAK45P,oBFdkB,kBAAbl/Q,UAAoD,kBAApBA,SAASysC,MEevD,CACA,WAAA8yO,CAAYptO,GACR,IAAK,IAAItzC,EAAI,EAAGA,EAAIymB,KAAK25P,gBAAgBngR,SAAUD,EAC/CymB,KAAK25P,gBAAgBpgR,GAAGszC,EAEhC,CACA,aAAAitO,CAAcI,GACI,IAAIrpO,IAAI92C,OAAOiC,KAAKk+Q,GAAYn+P,OAAOhiB,OAAOiC,KAAKgkB,KAAKy5P,WAChE72Q,SAASgC,IACPs1Q,EAAWt1Q,KAAUob,KAAKy5P,QAAQ70Q,IAClCob,KAAKi6P,YAAY,CACbr1Q,OACAxK,MAAOi/Q,EAAWa,EAAWt1Q,KAErC,GAER,CACA,aAAAu1Q,GACIn6P,KAAKo6P,gBAAkBnvH,YAAYjrI,KAAKguB,OAAQ,IACpD,CACA,YAAAqsO,GACQr6P,KAAKo6P,iBACLjvH,cAAcnrI,KAAKo6P,gBAE3B,CACA,GAAAtxP,CAAIlkB,EAAMrE,EAAU,CAAC,GAIjB,OAHKA,EAAQ+5Q,aACTt6P,KAAKguB,SAEFqrO,EAAWr5P,KAAKy5P,QAAQ70Q,GAAOrE,EAC1C,CACA,MAAAg6Q,CAAOh6Q,EAAU,CAAC,GACTA,EAAQ+5Q,aACTt6P,KAAKguB,SAET,MAAMnwC,EAAS,CAAC,EAChB,IAAK,IAAI+G,KAAQob,KAAKy5P,QAClB57Q,EAAO+G,GAAQy0Q,EAAWr5P,KAAKy5P,QAAQ70Q,GAAOrE,GAElD,OAAO1C,CACX,CACA,GAAA4yC,CAAI7rC,EAAMxK,EAAOmG,GAETA,EADAA,EACUxG,OAAO+lB,OAAO/lB,OAAO+lB,OAAO,CAAC,EAAGE,KAAK05P,mBAAoBn5Q,GAGzDyf,KAAK05P,kBAEnB,MAAMc,EAA+B,kBAAVpgR,EAAqBA,EAAQorB,KAAKC,UAAUrrB,GACvE4lB,KAAKy5P,QAAU1/Q,OAAO+lB,OAAO/lB,OAAO+lB,OAAO,CAAC,EAAGE,KAAKy5P,SAAU,CAAE,CAAC70Q,GAAO41Q,IACpEx6P,KAAK45P,sBACLl/Q,SAASysC,OAASA,EAAA,EAAiBviC,EAAM41Q,EAAaj6Q,IAE1Dyf,KAAKi6P,YAAY,CAAEr1Q,OAAMxK,QAAOmG,WACpC,CACA,MAAAq/H,CAAOh7H,EAAMrE,GACT,MAAMk6Q,EAAgBl6Q,EAAUxG,OAAO+lB,OAAO/lB,OAAO+lB,OAAO,CAAC,EAAGvf,GAAU,CAAE2rI,QAAS,IAAIhjI,KAAK,KAAM,EAAG,EAAG,EAAG,EAAG,GAAIwxQ,OAAQ,IAC5H16P,KAAKy5P,QAAU1/Q,OAAO+lB,OAAO,CAAC,EAAGE,KAAKy5P,gBAC/Bz5P,KAAKy5P,QAAQ70Q,GAChBob,KAAK45P,sBACLl/Q,SAASysC,OAASA,EAAA,EAAiBviC,EAAM,GAAI61Q,IAEjDz6P,KAAKi6P,YAAY,CAAEr1Q,OAAMxK,WAAOwe,EAAWrY,WAC/C,CACA,iBAAAo6Q,CAAkBxyO,GACdnoB,KAAK25P,gBAAgBt+Q,KAAK8sC,GACU,IAAhCnoB,KAAK25P,gBAAgBngR,SACC,kBAAXiF,QAAuB,gBAAiBA,OAC/CA,OAAOm8Q,YAAYv7Q,iBAAiB,SAAU2gB,KAAKguB,QAGnDhuB,KAAKm6P,gBAGjB,CACA,oBAAAU,CAAqB1yO,GACjB,MAAMmV,EAAMt9B,KAAK25P,gBAAgBv+Q,QAAQ+sC,GACrCmV,GAAO,GACPt9B,KAAK25P,gBAAgBz5K,OAAO5iD,EAAK,GAED,IAAhCt9B,KAAK25P,gBAAgBngR,SACC,kBAAXiF,QAAuB,gBAAiBA,OAC/CA,OAAOm8Q,YAAYt7Q,oBAAoB,SAAU0gB,KAAKguB,QAGtDhuB,KAAKq6P,eAGjB,qCC5FJh/P,EAAQ,EAgCR,SAAeoG,EAAKlhB,GAClB,GAAmB,kBAARkhB,EACT,MAAM,IAAIS,UAAU,iCAGtB,IAAI/F,EAAM,CAAC,EAEP2+P,GADMv6Q,GAAW,CAAC,GACRmrC,QAAUA,EAEpBhqC,EAAQ,EACZ,KAAOA,EAAQ+f,EAAIjoB,QAAQ,CACzB,IAAIuhR,EAAQt5P,EAAIrmB,QAAQ,IAAKsG,GAG7B,IAAe,IAAXq5Q,EACF,MAGF,IAAIC,EAASv5P,EAAIrmB,QAAQ,IAAKsG,GAE9B,IAAgB,IAAZs5Q,EACFA,EAASv5P,EAAIjoB,YACR,GAAIwhR,EAASD,EAAO,CAEzBr5Q,EAAQ+f,EAAIomB,YAAY,IAAKkzO,EAAQ,GAAK,EAC1C,QACF,CAEA,IAAI7gR,EAAMunB,EAAIle,MAAM7B,EAAOq5Q,GAAOhoL,OAGlC,QAAIn6E,IAAcuD,EAAIjiB,GAAM,CAC1B,IAAI0hB,EAAM6F,EAAIle,MAAMw3Q,EAAQ,EAAGC,GAAQjoL,OAGb,KAAtBn3E,EAAIrgB,WAAW,KACjBqgB,EAAMA,EAAIrY,MAAM,GAAI,IAGtB4Y,EAAIjiB,GAAO+gR,EAAUr/P,EAAKk/P,EAC5B,CAEAp5Q,EAAQs5Q,EAAS,CACnB,CAEA,OAAO7+P,CACT,EA7EAd,EAAQ,EA+FR,SAAmBzW,EAAMgX,EAAKrb,GAC5B,IAAI26Q,EAAM36Q,GAAW,CAAC,EAClBkqI,EAAMywI,EAAIzgH,QAAUA,EAExB,GAAmB,oBAARhwB,EACT,MAAM,IAAIvoH,UAAU,4BAGtB,IAAKi5P,EAAmB/7P,KAAKxa,GAC3B,MAAM,IAAIsd,UAAU,4BAGtB,IAAI9nB,EAAQqwI,EAAI7uH,GAEhB,GAAIxhB,IAAU+gR,EAAmB/7P,KAAKhlB,GACpC,MAAM,IAAI8nB,UAAU,2BAGtB,IAAIT,EAAM7c,EAAO,IAAMxK,EAEvB,GAAI,MAAQ8gR,EAAIR,OAAQ,CACtB,IAAIA,EAASQ,EAAIR,OAAS,EAE1B,GAAIp5P,MAAMo5P,KAAYn5P,SAASm5P,GAC7B,MAAM,IAAIx4P,UAAU,4BAGtBT,GAAO,aAAekO,KAAKq2B,MAAM00N,EACnC,CAEA,GAAIQ,EAAI9uI,OAAQ,CACd,IAAK+uI,EAAmB/7P,KAAK87P,EAAI9uI,QAC/B,MAAM,IAAIlqH,UAAU,4BAGtBT,GAAO,YAAcy5P,EAAI9uI,MAC3B,CAEA,GAAI8uI,EAAIx1Q,KAAM,CACZ,IAAKy1Q,EAAmB/7P,KAAK87P,EAAIx1Q,MAC/B,MAAM,IAAIwc,UAAU,0BAGtBT,GAAO,UAAYy5P,EAAIx1Q,IACzB,CAEA,GAAIw1Q,EAAIhvI,QAAS,CACf,IAAIA,EAAUgvI,EAAIhvI,QAElB,IA2FJ,SAAiBtwH,GACf,MAAgC,kBAAzBw/P,EAAWjhR,KAAKyhB,IACrBA,aAAe1S,IACnB,CA9FS83D,CAAOkrE,IAAY5qH,MAAM4qH,EAAQxtE,WACpC,MAAM,IAAIx8C,UAAU,6BAGtBT,GAAO,aAAeyqH,EAAQmvI,aAChC,CAEIH,EAAII,WACN75P,GAAO,cAGLy5P,EAAI/uI,SACN1qH,GAAO,YAGT,GAAIy5P,EAAInwM,SAAU,CAKhB,OAJuC,kBAAjBmwM,EAAInwM,SACtBmwM,EAAInwM,SAAStkD,cACby0P,EAAInwM,UAGN,IAAK,MACHtpD,GAAO,iBACP,MACF,IAAK,SACHA,GAAO,oBACP,MACF,IAAK,OACHA,GAAO,kBACP,MACF,QACE,MAAM,IAAIS,UAAU,8BAE1B,CAEA,GAAIg5P,EAAIK,SAAU,CAIhB,OAHuC,kBAAjBL,EAAIK,SACtBL,EAAIK,SAAS90P,cAAgBy0P,EAAIK,UAGnC,KAAK,EACH95P,GAAO,oBACP,MACF,IAAK,MACHA,GAAO,iBACP,MACF,IAAK,SACHA,GAAO,oBACP,MACF,IAAK,OACHA,GAAO,kBACP,MACF,QACE,MAAM,IAAIS,UAAU,8BAE1B,CAEA,OAAOT,CACT,EAnMA,IAAI25P,EAAarhR,OAAOC,UAAUF,SAU9BqhR,EAAqB,wCAkMzB,SAASzvO,EAAQjqB,GACf,OAA6B,IAAtBA,EAAIrmB,QAAQ,KACf6xC,mBAAmBxrB,GACnBA,CACN,CASA,SAASg5I,EAAQ7+I,GACf,OAAOga,mBAAmBha,EAC5B,CAsBA,SAASq/P,EAAUx5P,EAAKiqB,GACtB,IACE,OAAOA,EAAOjqB,EAChB,CAAE,MAAOnnB,GACP,OAAOmnB,CACT,CACF,sCCpQa,IAAInnB,EAAE,EAAQ,OAAwE,IAAI0jB,EAAE,oBAAoBjkB,OAAOshG,GAAGthG,OAAOshG,GAA1G,SAAW1gG,EAAEu3B,GAAG,OAAOv3B,IAAIu3B,IAAI,IAAIv3B,GAAG,EAAEA,IAAI,EAAEu3B,IAAIv3B,IAAIA,GAAGu3B,IAAIA,CAAC,EAAiD4e,EAAEx2C,EAAEmD,SAAS6jC,EAAEhnC,EAAE4G,UAAU1G,EAAEF,EAAEkwN,gBAAgBlrM,EAAEhlB,EAAEqwN,cACtM,SAASlwN,EAAEE,GAAG,IAAIu3B,EAAEv3B,EAAEqvN,YAAYrvN,EAAEA,EAAEP,MAAM,IAAI,IAAIU,EAAEo3B,IAAI,OAAOlU,EAAErjB,EAAEG,EAAE,CAAC,MAAMiiB,GAAG,OAAM,CAAE,CAAC,CAA4B,IAAI5hB,EAAE,qBAAqBsD,QAAQ,qBAAqBA,OAAO/D,UAAU,qBAAqB+D,OAAO/D,SAASmB,cAAzI,SAAWlB,EAAEu3B,GAAG,OAAOA,GAAG,EAD+F,SAAWv3B,EAAEu3B,GAAG,IAAIp3B,EAAEo3B,IAAInV,EAAE+zB,EAAE,CAACq5G,KAAK,CAAC/vJ,MAAMU,EAAEkvN,YAAY93L,KAAK52B,EAAEyhB,EAAE,GAAGotI,KAAKvjH,EAAE7pB,EAAE,GAAwJ,OAArJviB,GAAE,WAAWc,EAAElB,MAAMU,EAAEQ,EAAE0uN,YAAY93L,EAAEz3B,EAAEa,IAAIsrC,EAAE,CAACujH,KAAK7uJ,GAAG,GAAE,CAACX,EAAEG,EAAEo3B,IAAIoP,GAAE,WAA6B,OAAlB7mC,EAAEa,IAAIsrC,EAAE,CAACujH,KAAK7uJ,IAAWX,GAAE,WAAWF,EAAEa,IAAIsrC,EAAE,CAACujH,KAAK7uJ,GAAG,GAAE,GAAE,CAACX,IAAI2kB,EAAExkB,GAAUA,CAAC,EAC5MugB,EAAQ0vM,0BAAqB,IAASzwN,EAAEywN,qBAAqBzwN,EAAEywN,qBAAqB5vN,sCCD7T,IAAIuE,EAAE,EAAQ,OAASlF,EAAE,EAAQ,OAA+F,IAAIo2C,EAAE,oBAAoB72C,OAAOshG,GAAGthG,OAAOshG,GAA1G,SAAW1gG,EAAEu3B,GAAG,OAAOv3B,IAAIu3B,IAAI,IAAIv3B,GAAG,EAAEA,IAAI,EAAEu3B,IAAIv3B,IAAIA,GAAGu3B,IAAIA,CAAC,EAAiDz3B,EAAED,EAAEuwN,qBAAqBxwN,EAAEmF,EAAEU,OAAOjF,EAAEuE,EAAEwB,UAAU+gB,EAAEviB,EAAE+qN,QAAQjrN,EAAEE,EAAEirN,cAC/PtvM,EAAQ2oO,iCAAiC,SAASrpP,EAAEu3B,EAAE53B,EAAEw2C,EAAElK,GAAG,IAAItrC,EAAEf,EAAE,MAAM,GAAG,OAAOe,EAAEkD,QAAQ,CAAC,IAAIue,EAAE,CAACy+P,UAAS,EAAGphR,MAAM,MAAMkB,EAAEkD,QAAQue,CAAC,MAAMA,EAAEzhB,EAAEkD,QAAQlD,EAAE2mB,GAAE,WAAW,SAAStnB,EAAEA,GAAG,IAAIW,EAAE,CAAiB,GAAhBA,GAAE,EAAGR,EAAEH,EAAEA,EAAEm2C,EAAEn2C,QAAM,IAASisC,GAAG7pB,EAAEy+P,SAAS,CAAC,IAAItpP,EAAEnV,EAAE3iB,MAAM,GAAGwsC,EAAE1U,EAAEv3B,GAAG,OAAOqjB,EAAEkU,CAAC,CAAC,OAAOlU,EAAErjB,CAAC,CAAK,GAAJu3B,EAAElU,EAAK4yB,EAAE91C,EAAEH,GAAG,OAAOu3B,EAAE,IAAI53B,EAAEw2C,EAAEn2C,GAAG,YAAG,IAASisC,GAAGA,EAAE1U,EAAE53B,GAAU43B,GAAEp3B,EAAEH,EAASqjB,EAAE1jB,EAAC,CAAC,IAASQ,EAAEkjB,EAAP1iB,GAAE,EAAOgmC,OAAE,IAAShnC,EAAE,KAAKA,EAAE,MAAM,CAAC,WAAW,OAAOK,EAAEu3B,IAAI,EAAE,OAAOoP,OAAE,EAAO,WAAW,OAAO3mC,EAAE2mC,IAAI,EAAE,GAAE,CAACpP,EAAE53B,EAAEw2C,EAAElK,IAAI,IAAI9rC,EAAEL,EAAEE,EAAEW,EAAE,GAAGA,EAAE,IACnc,OAAhDH,GAAE,WAAW4hB,EAAEy+P,UAAS,EAAGz+P,EAAE3iB,MAAMU,CAAC,GAAE,CAACA,IAAI0E,EAAE1E,GAAUA,CAAC,sCCRtDsgB,EAAOC,QAAU,EAAjB,2CCAAD,EAAOC,QAAU,EAAjB,8BCHF,IAAIu1P,EAAK,EAAQ,OACb6K,EAAK,EAAQ,OAEbt3H,EAAOs3H,EACXt3H,EAAKysH,GAAKA,EACVzsH,EAAKs3H,GAAKA,EAEVrgQ,EAAOC,QAAU8oI,qBCFjB,IADA,IAAIu3H,EAAY,GACPniR,EAAI,EAAGA,EAAI,MAAOA,EACzBmiR,EAAUniR,IAAMA,EAAI,KAAOO,SAAS,IAAIg1B,OAAO,GAmBjD1T,EAAOC,QAhBP,SAAqBwyB,EAAKC,GACxB,IAAIv0C,EAAIu0C,GAAU,EACd6tO,EAAMD,EAEV,MAAO,CACLC,EAAI9tO,EAAIt0C,MAAOoiR,EAAI9tO,EAAIt0C,MACvBoiR,EAAI9tO,EAAIt0C,MAAOoiR,EAAI9tO,EAAIt0C,MAAO,IAC9BoiR,EAAI9tO,EAAIt0C,MAAOoiR,EAAI9tO,EAAIt0C,MAAO,IAC9BoiR,EAAI9tO,EAAIt0C,MAAOoiR,EAAI9tO,EAAIt0C,MAAO,IAC9BoiR,EAAI9tO,EAAIt0C,MAAOoiR,EAAI9tO,EAAIt0C,MAAO,IAC9BoiR,EAAI9tO,EAAIt0C,MAAOoiR,EAAI9tO,EAAIt0C,MACvBoiR,EAAI9tO,EAAIt0C,MAAOoiR,EAAI9tO,EAAIt0C,MACvBoiR,EAAI9tO,EAAIt0C,MAAOoiR,EAAI9tO,EAAIt0C,OACtBqlB,KAAK,GACV,qBChBA,IAAIslJ,EAAqC,oBAAZ,QAA2BL,OAAOK,iBAAmBL,OAAOK,gBAAgBxjJ,KAAKmjJ,SACnE,oBAAd,UAAuE,mBAAnCplK,OAAOm9Q,SAAS13G,iBAAiC03G,SAAS13G,gBAAgBxjJ,KAAKk7P,UAEhJ,GAAI13G,EAAiB,CAEnB,IAAI23G,EAAQ,IAAI7uK,WAAW,IAE3B5xF,EAAOC,QAAU,WAEf,OADA6oJ,EAAgB23G,GACTA,CACT,CACF,KAAO,CAKL,IAAIC,EAAO,IAAIliR,MAAM,IAErBwhB,EAAOC,QAAU,WACf,IAAK,IAAW5gB,EAAPlB,EAAI,EAAMA,EAAI,GAAIA,IACN,KAAV,EAAJA,KAAiBkB,EAAoB,WAAhBk1B,KAAKG,UAC/BgsP,EAAKviR,GAAKkB,MAAY,EAAJlB,IAAa,GAAK,IAGtC,OAAOuiR,CACT,CACF,yBCjCA,IAQIC,EACAC,EATAC,EAAM,EAAQ,OACdC,EAAc,EAAQ,OAWtBC,EAAa,EACbC,EAAa,EA+FjBhhQ,EAAOC,QA5FP,SAAY9a,EAASstC,EAAKC,GACxB,IAAIv0C,EAAIs0C,GAAOC,GAAU,EACrB5b,EAAI2b,GAAO,GAGXuwC,GADJ79E,EAAUA,GAAW,CAAC,GACH69E,MAAQ29L,EACvBM,OAAgCzjQ,IAArBrY,EAAQ87Q,SAAyB97Q,EAAQ87Q,SAAWL,EAKnE,GAAY,MAAR59L,GAA4B,MAAZi+L,EAAkB,CACpC,IAAIC,EAAYL,IACJ,MAAR79L,IAEFA,EAAO29L,EAAU,CACA,EAAfO,EAAU,GACVA,EAAU,GAAIA,EAAU,GAAIA,EAAU,GAAIA,EAAU,GAAIA,EAAU,KAGtD,MAAZD,IAEFA,EAAWL,EAAiD,OAApCM,EAAU,IAAM,EAAIA,EAAU,IAE1D,CAMA,IAAIC,OAA0B3jQ,IAAlBrY,EAAQg8Q,MAAsBh8Q,EAAQg8Q,OAAQ,IAAIrzQ,MAAO+mB,UAIjEusP,OAA0B5jQ,IAAlBrY,EAAQi8Q,MAAsBj8Q,EAAQi8Q,MAAQJ,EAAa,EAGnE/+J,EAAMk/J,EAAQJ,GAAeK,EAAQJ,GAAY,IAcrD,GAXI/+J,EAAK,QAA0BzkG,IAArBrY,EAAQ87Q,WACpBA,EAAWA,EAAW,EAAI,QAKvBh/J,EAAK,GAAKk/J,EAAQJ,SAAiCvjQ,IAAlBrY,EAAQi8Q,QAC5CA,EAAQ,GAINA,GAAS,IACX,MAAM,IAAI94P,MAAM,mDAGlBy4P,EAAaI,EACbH,EAAaI,EACbR,EAAYK,EAMZ,IAAInnD,GAA4B,KAAb,WAHnBqnD,GAAS,cAG+BC,GAAS,WACjDtqP,EAAE34B,KAAO27N,IAAO,GAAK,IACrBhjM,EAAE34B,KAAO27N,IAAO,GAAK,IACrBhjM,EAAE34B,KAAO27N,IAAO,EAAI,IACpBhjM,EAAE34B,KAAY,IAAL27N,EAGT,IAAIunD,EAAOF,EAAQ,WAAc,IAAS,UAC1CrqP,EAAE34B,KAAOkjR,IAAQ,EAAI,IACrBvqP,EAAE34B,KAAa,IAANkjR,EAGTvqP,EAAE34B,KAAOkjR,IAAQ,GAAK,GAAM,GAC5BvqP,EAAE34B,KAAOkjR,IAAQ,GAAK,IAGtBvqP,EAAE34B,KAAO8iR,IAAa,EAAI,IAG1BnqP,EAAE34B,KAAkB,IAAX8iR,EAGT,IAAK,IAAI7hR,EAAI,EAAGA,EAAI,IAAKA,EACvB03B,EAAE34B,EAAIiB,GAAK4jF,EAAK5jF,GAGlB,OAAOqzC,GAAYquO,EAAYhqP,EACjC,yBC1GA,IAAI+pP,EAAM,EAAQ,OACdC,EAAc,EAAQ,OA2B1B9gQ,EAAOC,QAzBP,SAAY9a,EAASstC,EAAKC,GACxB,IAAIv0C,EAAIs0C,GAAOC,GAAU,EAEF,iBAAb,IACRD,EAAkB,WAAZttC,EAAuB,IAAI3G,MAAM,IAAM,KAC7C2G,EAAU,MAIZ,IAAIu7Q,GAFJv7Q,EAAUA,GAAW,CAAC,GAEHuvB,SAAWvvB,EAAQ07Q,KAAOA,KAO7C,GAJAH,EAAK,GAAgB,GAAVA,EAAK,GAAa,GAC7BA,EAAK,GAAgB,GAAVA,EAAK,GAAa,IAGzBjuO,EACF,IAAK,IAAIohF,EAAK,EAAGA,EAAK,KAAMA,EAC1BphF,EAAIt0C,EAAI01H,GAAM6sJ,EAAK7sJ,GAIvB,OAAOphF,GAAOquO,EAAYJ,EAC5B,qBCrBA1gQ,EAAOC,QAAU,CACf,MAAQ,EACR,MAAQ,EACR,IAAM,EACN,KAAO,EACP,OAAS,EACT,IAAM,EACN,KAAO,EACP,OAAS,EACT,MAAQ,EACR,MAAQ,EACR,OAAS,EACT,QAAU,EACV,OAAS,EACT,KAAO,mCCHT,IAEI8hC,EAAU,WAAY,EA2C1B/hC,EAAOC,QAAU8hC,yBC5DjB,aAEApjD,OAAOg5C,eAAe13B,EAAS,aAA/B,CAA+CjhB,OAAO,IAEtD,IAAI+nC,EAAQ,EAAQ,OAKpB,MAAMu6O,EAAuBv6O,EAAM8hO,cAAc,CAAC,GAG5C0Y,GAAyB,EAE/B,SAASC,GAA4B,UAAEC,EAAS,eAAEC,EAAc,MAAE3/Q,EAAK,OAAEC,EAAM,aAAE2/Q,EAAY,OAAEC,EAAM,UAAEnkC,EAAS,SAAEnuO,EAAQ,gBAAEuyQ,EAAkBN,IAC1I,MAAM9/Q,EAAQ,CAAC,EAmBf,MAlBkB,QAAdg8O,IACAh8O,EAAM,yBAA2B,WACb,kBAAb6N,IACP7N,EAAM,wBAA0B,GAAG6N,MAClCuyQ,IACDpgR,EAAM,4BAA8B,QACnB,kBAAVM,GAAuC,kBAAVA,IACpCN,EAAMM,MAAQA,GACI,kBAAXC,GAAyC,kBAAXA,IACrCP,EAAMO,OAASA,GACS,kBAAjB2/Q,GAAqD,kBAAjBA,IAC3ClgR,EAAMkgR,aAAeA,GACrBC,IACAngR,EAAMkgR,aAAe,OACA,qBAAdF,IACPhgR,EAAM,gBAAkBggR,GACE,qBAAnBC,IACPjgR,EAAM,qBAAuBigR,GAC1BjgR,CACX,CAkEAwe,EAAQ6hQ,cAJR,UAAuB,SAAE5gR,KAAag/F,IAClC,OAAQn5D,EAAMtmC,cAAc6gR,EAAqBtxB,SAAU,CAAEhxP,MAAOkhG,GAAgBh/F,EACxF,EAGA+e,EAAA,QAlEA,UAAkB,MAAEjH,EAAQ,EAAG4kG,QAASmkK,EAASvgR,UAAW+6P,EAAe,mBAAEx2B,EAAkB,gBAAEi8C,EAAe,OAAEJ,GAAS,EAAOngR,MAAOwgR,KAAcC,IACnJ,IAAI91O,EAAIC,EAAIqO,EACZ,MAAMynO,EAAsBp7O,EAAMkoL,WAAWqyD,GACvCc,EAAoB,IAAKF,GAG/B,IAAK,MAAOpjR,EAAKE,KAAUL,OAAO+yC,QAAQwwO,GACjB,qBAAVljR,UACAojR,EAAkBtjR,GAIjC,MAAMohG,EAAe,IACdiiL,KACAC,EACHR,UAGEngR,EAAQ,IACPwgR,KACAT,EAA4BthL,IAEnC,IAAI1+F,EAAY,yBACZ+6P,IACA/6P,GAAa,IAAI+6P,KACrB,MAAM8lB,EAAwC,QAA9Bj2O,EAAK8zD,EAAamiL,cAA2B,IAAPj2O,GAAgBA,EAChE1oC,EAAW,GACX4+Q,EAAY/tP,KAAK87B,KAAKr3C,GAC5B,IAAK,IAAI7a,EAAI,EAAGA,EAAImkR,EAAWnkR,IAAK,CAChC,IAAIokR,EAAY9gR,EAChB,GAAI6gR,EAAYtpQ,GAAS7a,IAAMmkR,EAAY,EAAG,CAO1C,MAAMvgR,EAAmC,QAA1BsqC,EAAKk2O,EAAUxgR,aAA0B,IAAPsqC,EAAgBA,EAAK,OAChEm2O,EAAiBxpQ,EAAQ,EACzBypQ,EAAmC,kBAAV1gR,EACzBA,EAAQygR,EACR,QAAQzgR,OAAWygR,KACzBD,EAAY,IAAKA,EAAWxgR,MAAO0gR,EACvC,CACA,MAAMC,EAAgB37O,EAAMtmC,cAAc,OAAQ,CAAEe,UAAWA,EAAWC,MAAO8gR,EAAWzjR,IAAKX,GAAK,UAClGkkR,EACA3+Q,EAASzD,KAAKyiR,GAKdh/Q,EAASzD,KAAK8mC,EAAMtmC,cAAcsmC,EAAM+tM,SAAU,CAAEh2O,IAAKX,GACrDukR,EACA37O,EAAMtmC,cAAc,KAAM,OAEtC,CACA,OAAQsmC,EAAMtmC,cAAc,OAAQ,CAAEe,UAAWukO,EAAoB,cAAei8C,EAAiB,YAAa,SAAU,YAAqD,QAAvCtnO,EAAKwlD,EAAa2hL,uBAAoC,IAAPnnO,EAAgBA,EAAK6mO,GAA0BQ,EAClOr+Q,EAAShB,KAAI,CAAC0V,EAAIja,IAAM4oC,EAAMtmC,cAAcshR,EAAS,CAAEjjR,IAAKX,GAAKia,KACjE1U,EACV,gnBC1EA,MAAMi/Q,EACF,WAAAl8O,CAAY7mC,GACRglB,KAAKhlB,UAAYA,CACrB,CAGA,qBAAAgjR,GAII,OAHkBh+P,KAAKhlB,UAAUijR,eAI5BngR,KAAIogR,IACL,GAoBZ,SAAkCA,GAC9B,MAAMnxP,EAAYmxP,EAASC,eAC3B,MAAkF,aAA5D,OAAdpxP,QAAoC,IAAdA,OAAuB,EAASA,EAAU/uB,KAC5E,CAvBgBogR,CAAyBF,GAAW,CACpC,MAAMjzO,EAAUizO,EAASG,eACzB,MAAO,GAAGpzO,EAAQovD,WAAWpvD,EAAQhY,SACzC,CAEI,OAAO,IACX,IAECjP,QAAOs6P,GAAaA,IACpB1/P,KAAK,IACd,EAeJ,MAAM2/P,EAAS,gBACTC,EAAY,UAkBZv/P,EAAS,IAAI,KAAO,iBA4EpBw/P,EAAqB,YACrBC,EAAsB,CACxB,CAACH,GAAS,YACV,uBAAU,mBACV,sBAAU,iBACV,6BAAU,wBACV,sBAAU,iBACV,6BAAU,wBACV,iBAAU,YACV,wBAAU,mBACV,qBAAU,YACV,yBAAU,oBACV,4BAAU,mBACV,sBAAU,UACV,6BAAU,iBACV,0BAAU,WACV,iCAAU,kBACV,sBAAU,WACV,6BAAU,kBACV,wBAAU,YACV,+BAAU,mBACV,0BAAU,UACV,iCAAU,iBACV,oBAAU,WACV,2BAAU,kBACV,sBAAU,WACV,6BAAU,kBACV,qBAAU,cACV,UAAW,UACX,SAAQ,eAsBNI,EAAQ,IAAIhuO,IAIZiuO,EAAc,IAAIjuO,IAOlBkuO,EAAc,IAAIluO,IAMxB,SAASmuO,EAAc50P,EAAK6C,GACxB,IACI7C,EAAIlvB,UAAU+jR,aAAahyP,EAC/B,CACA,MAAOzyB,GACH2kB,EAAOoB,MAAM,aAAa0M,EAAUnoB,4CAA4CslB,EAAItlB,OAAQtK,EAChG,CACJ,CAKA,SAAS0kR,EAAyB90P,EAAK6C,GACnC7C,EAAIlvB,UAAUikR,wBAAwBlyP,EAC1C,CAQA,SAASmyP,EAAmBnyP,GACxB,MAAM8sI,EAAgB9sI,EAAUnoB,KAChC,GAAIi6Q,EAAYruO,IAAIqpH,GAEhB,OADA56I,EAAOoB,MAAM,sDAAsDw5I,OAC5D,EAEXglH,EAAYpuO,IAAIopH,EAAe9sI,GAE/B,IAAK,MAAM7C,KAAOy0P,EAAMj5M,SACpBo5M,EAAc50P,EAAK6C,GAEvB,IAAK,MAAMoyP,KAAaP,EAAYl5M,SAChCo5M,EAAcK,EAAWpyP,GAE7B,OAAO,CACX,CAUA,SAASqyP,EAAal1P,EAAKtlB,GACvB,MAAMy6Q,EAAsBn1P,EAAIlvB,UAC3BskR,YAAY,aACZjB,aAAa,CAAE37N,UAAU,IAI9B,OAHI28N,GACKA,EAAoBE,mBAEtBr1P,EAAIlvB,UAAUskR,YAAY16Q,EACrC,CASA,SAAS46Q,EAAuBt1P,EAAKtlB,EAAM66Q,EAAqBhB,GAC5DW,EAAal1P,EAAKtlB,GAAM86Q,cAAcD,EAC1C,CASA,SAASE,EAAexjQ,GACpB,YAAuBvD,IAAhBuD,EAAI5b,OACf,CASA,SAASq/Q,EAAqBzjQ,GAC1B,YAAwBvD,IAAjBuD,EAAI0jQ,QACf,CAMA,SAASC,IACLjB,EAAY/2P,OAChB,CAkBA,MAAMi4P,EAAS,CACX,SAAkC,6EAElC,eAA8C,iCAC9C,gBAAgD,kFAChD,cAA4C,kDAC5C,qBAA0D,uCAC1D,aAA0C,0EAC1C,uBAA8D,6EAE9D,uBAA8D,wDAC9D,WAAsC,gFACtC,UAAoC,qFACpC,UAAsC,mFACtC,aAA0C,sFAC1C,sCAA4F,0GAC5F,iCAAkF,6DAEhFC,EAAgB,IAAI,KAAa,MAAO,WAAYD,GAkB1D,MAAME,EACF,WAAAp+O,CAAYthC,EAASqyB,EAAQ53B,GACzBglB,KAAKkgQ,YAAa,EAClBlgQ,KAAK2oD,SAAW5uE,OAAO+lB,OAAO,CAAC,EAAGvf,GAClCyf,KAAKsR,QAAUv3B,OAAO+lB,OAAO,CAAC,EAAG8S,GACjC5S,KAAKmgQ,MAAQvtP,EAAOhuB,KACpBob,KAAKogQ,gCACDxtP,EAAOytP,+BACXrgQ,KAAKsgQ,WAAatlR,EAClBglB,KAAKhlB,UAAU+jR,aAAa,IAAI,KAAU,OAAO,IAAM/+P,MAAM,UACjE,CACA,kCAAIqgQ,GAEA,OADArgQ,KAAKugQ,iBACEvgQ,KAAKogQ,+BAChB,CACA,kCAAIC,CAA+BzkQ,GAC/BoE,KAAKugQ,iBACLvgQ,KAAKogQ,gCAAkCxkQ,CAC3C,CACA,QAAIhX,GAEA,OADAob,KAAKugQ,iBACEvgQ,KAAKmgQ,KAChB,CACA,WAAI5/Q,GAEA,OADAyf,KAAKugQ,iBACEvgQ,KAAK2oD,QAChB,CACA,UAAI/1C,GAEA,OADA5S,KAAKugQ,iBACEvgQ,KAAKsR,OAChB,CACA,aAAIt2B,GACA,OAAOglB,KAAKsgQ,UAChB,CACA,aAAIE,GACA,OAAOxgQ,KAAKkgQ,UAChB,CACA,aAAIM,CAAU5kQ,GACVoE,KAAKkgQ,WAAatkQ,CACtB,CAKA,cAAA2kQ,GACI,GAAIvgQ,KAAKwgQ,UACL,MAAMR,EAAcpzP,OAAO,cAA0C,CAAEggE,QAAS5sE,KAAKmgQ,OAE7F,EAmBJ,MAAMM,UAA8BR,EAChC,WAAAp+O,CAAYthC,EAASmgR,EAAc97Q,EAAM5J,GAErC,MAAMqlR,OAAiFznQ,IAAhD8nQ,EAAaL,gCAC9CK,EAAaL,+BAGbztP,EAAS,CACXhuB,OACAy7Q,kCAEJ,QAAuBznQ,IAAnBrY,EAAQ+c,OAER8oB,MAAM7lC,EAASqyB,EAAQ53B,OAEtB,CAEDorC,MADgB7lC,EACFA,QAASqyB,EAAQ53B,EACnC,CAEAglB,KAAK2gQ,cAAgB5mR,OAAO+lB,OAAO,CAAEugQ,kCAAkCK,GACvE1gQ,KAAK4gQ,sBAAwB,KACO,qBAAzBC,uBACP7gQ,KAAK4gQ,sBAAwB,IAAIC,sBAAqB,KAClD7gQ,KAAK8gQ,kBAAkB,KAG/B9gQ,KAAK+gQ,UAAY,EACjB/gQ,KAAKghQ,YAAYhhQ,KAAK2gQ,cAAcM,gBAGpCjhQ,KAAK2gQ,cAAcM,oBAAiBroQ,EACpC8nQ,EAAaO,oBAAiBroQ,EAC9BsoQ,EAAgB3C,EAAQC,EAAW,YACvC,CACA,MAAA19P,GAEA,CACA,YAAIqgQ,GACA,OAAOnhQ,KAAK+gQ,SAChB,CAGA,WAAAC,CAAY7kQ,GACJ6D,KAAKwgQ,YAGTxgQ,KAAK+gQ,iBACOnoQ,IAARuD,GAAoD,OAA/B6D,KAAK4gQ,uBAC1B5gQ,KAAK4gQ,sBAAsBzgI,SAAShkI,EAAK6D,MAEjD,CAEA,WAAAohQ,GACI,OAAIphQ,KAAKwgQ,UACE,IAEFxgQ,KAAK+gQ,SAClB,CAIA,gBAAAD,GACSO,EAAUrhQ,KACnB,CACA,YAAI6/P,GAEA,OADA7/P,KAAKugQ,iBACEvgQ,KAAK2gQ,aAChB,CAKA,cAAAJ,GACI,GAAIvgQ,KAAKwgQ,UACL,MAAMR,EAAcpzP,OAAO,qBAEnC,EAwBJ,MAAM2W,EAzZU,SA0ZhB,SAAS+9O,EAAc34M,EAAU44M,EAAY,CAAC,GAC1C,IAAIhhR,EAAUooE,EACd,GAAyB,kBAAd44M,EAAwB,CAE/BA,EAAY,CAAE38Q,KADD28Q,EAEjB,CACA,MAAM3uP,EAAS74B,OAAO+lB,OAAO,CAAElb,KAAM65Q,EAAoB4B,gCAAgC,GAASkB,GAC5F38Q,EAAOguB,EAAOhuB,KACpB,GAAoB,kBAATA,IAAsBA,EAC7B,MAAMo7Q,EAAcpzP,OAAO,eAA4C,CACnEggE,QAAS/pE,OAAOje,KAIxB,GADArE,IAAYA,GAAU,YACjBA,EACD,MAAMy/Q,EAAcpzP,OAAO,cAE/B,MAAM40P,EAAc7C,EAAM71P,IAAIlkB,GAC9B,GAAI48Q,EAAa,CAEb,IAAI,QAAUjhR,EAASihR,EAAYjhR,WAC/B,QAAUqyB,EAAQ4uP,EAAY5uP,QAC9B,OAAO4uP,EAGP,MAAMxB,EAAcpzP,OAAO,gBAA8C,CAAEggE,QAAShoF,GAE5F,CACA,MAAM5J,EAAY,IAAI,KAAmB4J,GACzC,IAAK,MAAMmoB,KAAa8xP,EAAYn5M,SAChC1qE,EAAU+jR,aAAahyP,GAE3B,MAAM00P,EAAS,IAAIxB,EAAgB1/Q,EAASqyB,EAAQ53B,GAEpD,OADA2jR,EAAMluO,IAAI7rC,EAAM68Q,GACTA,CACX,CACA,SAASC,EAAoB/4M,EAAUg5M,GACnC,IAAI,aAAgB,UAEhB,MAAM3B,EAAcpzP,OAAO,kCAK/B,IAAIg1P,OAHoDhpQ,IAApD+oQ,EAAiBtB,iCACjBsB,EAAiBtB,gCAAiC,GAIlDuB,EADAjC,EAAeh3M,GACFA,EAASpoE,QAGTooE,EAGjB,MAAMk5M,EAAU9nR,OAAO+lB,OAAO/lB,OAAO+lB,OAAO,CAAC,EAAG6hQ,GAAmBC,QAGpChpQ,IAA3BipQ,EAAQZ,uBACDY,EAAQZ,eAKnB,QAAwCroQ,IAApC+oQ,EAAiBV,gBACmB,qBAAzBJ,qBACP,MAAMb,EAAcpzP,OAAO,sCAA0F,CAAC,GAG9H,MAAMk1P,EAAa,IARDlnR,EAQe4qB,KAAKC,UAAUo8P,GAPrC,IAAIjnR,GAAGgnD,QAAO,CAACjkB,EAAMriC,IAAOq0B,KAAKoyP,KAAK,GAAIpkP,GAAQriC,EAAEC,WAAW,GAAM,GAAG,IADlE,IAACX,EASlB,MAAM4mR,EAAc5C,EAAY91P,IAAIg5P,GACpC,GAAIN,EAEA,OADAA,EAAYR,YAAYW,EAAiBV,gBAClCO,EAEX,MAAMxmR,EAAY,IAAI,KAAmB8mR,GACzC,IAAK,MAAM/0P,KAAa8xP,EAAYn5M,SAChC1qE,EAAU+jR,aAAahyP,GAE3B,MAAM00P,EAAS,IAAIhB,EAAsBmB,EAAYD,EAAkBG,EAAY9mR,GAEnF,OADA4jR,EAAYnuO,IAAIqxO,EAAYL,GACrBA,CACX,CA8BA,SAASO,EAAOp9Q,EAAO65Q,GACnB,MAAMv0P,EAAMy0P,EAAM71P,IAAIlkB,GACtB,IAAKslB,GAAOtlB,IAAS65Q,IAAsB,UACvC,OAAO6C,IAEX,IAAKp3P,EACD,MAAM81P,EAAcpzP,OAAO,SAAgC,CAAEggE,QAAShoF,IAE1E,OAAOslB,CACX,CAKA,SAAS+3P,IACL,OAAOroR,MAAM0Z,KAAKqrQ,EAAMj5M,SAC5B,CAkBA+/E,eAAe47H,EAAUn3P,GACrB,IAAIg4P,GAAmB,EACvB,MAAMt9Q,EAAOslB,EAAItlB,KACjB,GAAI+5Q,EAAMnuO,IAAI5rC,GACVs9Q,GAAmB,EACnBvD,EAAMvtO,OAAOxsC,QAEZ,GAAIg6Q,EAAYpuO,IAAI5rC,GAAO,CACFslB,EACJk3P,eAAiB,IACnCxC,EAAYxtO,OAAOxsC,GACnBs9Q,GAAmB,EAE3B,CACIA,UACM/iP,QAAQivG,IAAIlkH,EAAIlvB,UACjBijR,eACAngR,KAAIogR,GAAYA,EAAS9sO,YAC9BlnB,EAAIs2P,WAAY,EAExB,CASA,SAASU,EAAgBiB,EAAkBlvP,EAAS3L,GAChD,IAAIkgB,EAGJ,IAAI6yD,EAA2D,QAAhD7yD,EAAKk3O,EAAoByD,UAAsC,IAAP36O,EAAgBA,EAAK26O,EACxF76P,IACA+yE,GAAW,IAAI/yE,KAEnB,MAAM86P,EAAkB/nL,EAAQ92E,MAAM,SAChC8+P,EAAkBpvP,EAAQ1P,MAAM,SACtC,GAAI6+P,GAAmBC,EAAiB,CACpC,MAAMllO,EAAU,CACZ,+BAA+Bk9C,oBAA0BpnE,OAY7D,OAVImvP,GACAjlO,EAAQ9hD,KAAK,iBAAiBg/F,sDAE9B+nL,GAAmBC,GACnBllO,EAAQ9hD,KAAK,OAEbgnR,GACAllO,EAAQ9hD,KAAK,iBAAiB43B,2DAElChU,EAAOyO,KAAKyvB,EAAQv+B,KAAK,KAE7B,CACAsgQ,EAAmB,IAAI,KAAU,GAAG7kL,aAAmB,KAAM,CAAGA,UAASpnE,aAAY,WACzF,CAQA,SAASqvP,EAAMC,EAAahiR,GACxB,GAAoB,OAAhBgiR,GAA+C,oBAAhBA,EAC/B,MAAMvC,EAAcpzP,OAAO,yBAE/B,QAAkB21P,EAAahiR,EACnC,CAUA,SAASiiR,EAAYC,IACjB,QAAcA,EAClB,CAkBA,MAAMC,EAAU,8BACVC,EAAa,EACbC,EAAa,2BACnB,IAAIC,EAAY,KAChB,SAASC,IA4BL,OA3BKD,IACDA,GAAY,QAAOH,EAASC,EAAY,CACpCnjI,QAAS,CAACgvD,EAAIu0E,KAMV,GACS,IADDA,EAEA,IACIv0E,EAAGw0E,kBAAkBJ,EACzB,CACA,MAAOtoR,GAIH8lB,QAAQsN,KAAKpzB,EACjB,CACR,IAEL8tC,OAAM9tC,IACL,MAAM0lR,EAAcpzP,OAAO,WAAoC,CAC3Dq2P,qBAAsB3oR,EAAEuO,SAC1B,KAGHg6Q,CACX,CAuBAp9H,eAAey9H,EAA2Bh5P,EAAKi5P,GAC3C,IACI,MACMC,SADWN,KACHO,YAAYT,EAAY,aAChCU,EAAcF,EAAGE,YAAYV,SAC7BU,EAAYj6F,IAAI85F,EAAiBI,EAAWr5P,UAC5Ck5P,EAAGpuO,IACb,CACA,MAAO16C,GACH,GAAIA,aAAa,KACb2kB,EAAOyO,KAAKpzB,EAAEuO,aAEb,CACD,MAAM26Q,EAAcxD,EAAcpzP,OAAO,UAAoC,CACzEq2P,qBAA4B,OAAN3oR,QAAoB,IAANA,OAAe,EAASA,EAAEuO,UAElEoW,EAAOyO,KAAK81P,EAAY36Q,QAC5B,CACJ,CACJ,CACA,SAAS06Q,EAAWr5P,GAChB,MAAO,GAAGA,EAAItlB,QAAQslB,EAAI3pB,QAAQqkO,OACtC,CAqBA,MAAM6+C,EACF,WAAA5hP,CAAY7mC,GACRglB,KAAKhlB,UAAYA,EAUjBglB,KAAK0jQ,iBAAmB,KACxB,MAAMx5P,EAAMlK,KAAKhlB,UAAUskR,YAAY,OAAOjB,eAC9Cr+P,KAAK2jQ,SAAW,IAAIC,EAAqB15P,GACzClK,KAAK6jQ,wBAA0B7jQ,KAAK2jQ,SAAS31G,OAAO3/I,MAAKxwB,IACrDmiB,KAAK0jQ,iBAAmB7lR,EACjBA,IAEf,CAQA,sBAAM0hR,GACF,IAAI/3O,EAAIC,EACR,IACI,MAKM8nH,EALiBvvI,KAAKhlB,UACvBskR,YAAY,mBACZjB,eAGwBL,wBACvBh0Q,EAAO85Q,IACb,GAAyF,OAAnD,QAAhCt8O,EAAKxnB,KAAK0jQ,wBAAqC,IAAPl8O,OAAgB,EAASA,EAAGu8O,cACtE/jQ,KAAK0jQ,uBAAyB1jQ,KAAK6jQ,wBAEsD,OAAnD,QAAhCp8O,EAAKznB,KAAK0jQ,wBAAqC,IAAPj8O,OAAgB,EAASA,EAAGs8O,aACtE,OAKR,GAAI/jQ,KAAK0jQ,iBAAiBM,wBAA0Bh6Q,GAChDgW,KAAK0jQ,iBAAiBK,WAAW/qO,MAAKirO,GAAuBA,EAAoBj6Q,OAASA,IAC1F,OAaJ,OATIgW,KAAK0jQ,iBAAiBK,WAAW1oR,KAAK,CAAE2O,OAAMulJ,UAGlDvvI,KAAK0jQ,iBAAiBK,WAClB/jQ,KAAK0jQ,iBAAiBK,WAAW//P,QAAOigQ,IACpC,MAAMC,EAAc,IAAIh7Q,KAAK+6Q,EAAoBj6Q,MAAM00D,UAEvD,OADYx1D,KAAKD,MACJi7Q,GA5Da,MA4DuC,IAElElkQ,KAAK2jQ,SAASQ,UAAUnkQ,KAAK0jQ,iBACxC,CACA,MAAOppR,GACH2kB,EAAOyO,KAAKpzB,EAChB,CACJ,CAQA,yBAAM8pR,GACF,IAAI58O,EACJ,IAKI,GAJ8B,OAA1BxnB,KAAK0jQ,wBACC1jQ,KAAK6jQ,wBAG0E,OAAnD,QAAhCr8O,EAAKxnB,KAAK0jQ,wBAAqC,IAAPl8O,OAAgB,EAASA,EAAGu8O,aAC1B,IAA5C/jQ,KAAK0jQ,iBAAiBK,WAAWvqR,OACjC,MAAO,GAEX,MAAMwQ,EAAO85Q,KAEP,iBAAEO,EAAgB,cAAEC,GA8BtC,SAAoCC,EAAiBC,EAxH5B,MA2HrB,MAAMH,EAAmB,GAEzB,IAAIC,EAAgBC,EAAgBhhR,QACpC,IAAK,MAAM0gR,KAAuBM,EAAiB,CAE/C,MAAME,EAAiBJ,EAAiBn+P,MAAK4oL,GAAMA,EAAGv/C,QAAU00H,EAAoB10H,QACpF,GAAKk1H,GAiBD,GAHAA,EAAe3wN,MAAMz4D,KAAK4oR,EAAoBj6Q,MAG1C06Q,EAAWL,GAAoBG,EAAS,CACxCC,EAAe3wN,MAAMzvC,MACrB,KACJ,OAdA,GAJAggQ,EAAiBhpR,KAAK,CAClBk0J,MAAO00H,EAAoB10H,MAC3Bz7F,MAAO,CAACmwN,EAAoBj6Q,QAE5B06Q,EAAWL,GAAoBG,EAAS,CAGxCH,EAAiBhgQ,MACjB,KACJ,CAaJigQ,EAAgBA,EAAc/gR,MAAM,EACxC,CACA,MAAO,CACH8gR,mBACAC,gBAER,CArEwDK,CAA2B3kQ,KAAK0jQ,iBAAiBK,YACvFa,GAAe,OAA8Bp/P,KAAKC,UAAU,CAAEwN,QAAS,EAAG8wP,WAAYM,KAgB5F,OAdArkQ,KAAK0jQ,iBAAiBM,sBAAwBh6Q,EAC1Cs6Q,EAAc9qR,OAAS,GAEvBwmB,KAAK0jQ,iBAAiBK,WAAaO,QAI7BtkQ,KAAK2jQ,SAASQ,UAAUnkQ,KAAK0jQ,oBAGnC1jQ,KAAK0jQ,iBAAiBK,WAAa,GAE9B/jQ,KAAK2jQ,SAASQ,UAAUnkQ,KAAK0jQ,mBAE/BkB,CACX,CACA,MAAOtqR,GAEH,OADA2kB,EAAOyO,KAAKpzB,GACL,EACX,CACJ,EAEJ,SAASwpR,IAGL,OAFc,IAAI56Q,MAELmtB,cAAc76B,UAAU,EAAG,GAC5C,CAyCA,MAAMooR,EACF,WAAA/hP,CAAY3X,GACRlK,KAAKkK,IAAMA,EACXlK,KAAK6kQ,wBAA0B7kQ,KAAK8kQ,8BACxC,CACA,kCAAMA,GACF,SAAK,YAIM,UACFz2P,MAAK,KAAM,IACX+Z,OAAM,KAAM,GAEzB,CAIA,UAAM4lI,GAEF,SAD8BhuJ,KAAK6kQ,wBAI9B,CACD,MAAME,QAtPlBt/H,eAA2Cv7H,GACvC,IACI,MACMk5P,SADWN,KACHO,YAAYT,GACpB/kR,QAAeulR,EAAGE,YAAYV,GAAY95P,IAAIy6P,EAAWr5P,IAI/D,aADMk5P,EAAGpuO,KACFn3C,CACX,CACA,MAAOvD,GACH,GAAIA,aAAa,KACb2kB,EAAOyO,KAAKpzB,EAAEuO,aAEb,CACD,MAAM26Q,EAAcxD,EAAcpzP,OAAO,UAAkC,CACvEq2P,qBAA4B,OAAN3oR,QAAoB,IAANA,OAAe,EAASA,EAAEuO,UAElEoW,EAAOyO,KAAK81P,EAAY36Q,QAC5B,CACJ,CACJ,CAiO6Cm8Q,CAA4BhlQ,KAAKkK,KAClE,OAA2B,OAAvB66P,QAAsD,IAAvBA,OAAgC,EAASA,EAAmBhB,YACpFgB,EAGA,CAAEhB,WAAY,GAE7B,CAVI,MAAO,CAAEA,WAAY,GAW7B,CAEA,eAAMI,CAAUc,GACZ,IAAIz9O,EAEJ,SAD8BxnB,KAAK6kQ,wBAI9B,CACD,MAAMK,QAAiCllQ,KAAKguJ,OAC5C,OAAOk1G,EAA2BljQ,KAAKkK,IAAK,CACxC85P,sBAAyE,QAAjDx8O,EAAKy9O,EAAiBjB,6BAA0C,IAAPx8O,EAAgBA,EAAK09O,EAAyBlB,sBAC/HD,WAAYkB,EAAiBlB,YAErC,CACJ,CAEA,SAAM58P,CAAI89P,GACN,IAAIz9O,EAEJ,SAD8BxnB,KAAK6kQ,wBAI9B,CACD,MAAMK,QAAiCllQ,KAAKguJ,OAC5C,OAAOk1G,EAA2BljQ,KAAKkK,IAAK,CACxC85P,sBAAyE,QAAjDx8O,EAAKy9O,EAAiBjB,6BAA0C,IAAPx8O,EAAgBA,EAAK09O,EAAyBlB,sBAC/HD,WAAY,IACLmB,EAAyBnB,cACzBkB,EAAiBlB,aAGhC,CACJ,EAOJ,SAASW,EAAWH,GAEhB,OAAO,OAEP/+P,KAAKC,UAAU,CAAEwN,QAAS,EAAG8wP,WAAYQ,KAAoB/qR,MACjE,CAkBA,IAAgC8tB,IAiBT,GAhBnB43P,EAAmB,IAAI,KAAU,mBAAmBlkR,GAAa,IAAI+iR,EAA0B/iR,IAAY,YAC3GkkR,EAAmB,IAAI,KAAU,aAAalkR,GAAa,IAAIyoR,EAAqBzoR,IAAY,YAEhGkmR,EAAgB3C,EAAQC,EAAWl3P,GAEnC45P,EAAgB3C,EAAQC,EAAW,WAEnC0C,EAAgB,UAAW,+GCjnC/B,MAAM/9O,EAOF,WAAAtB,CAAYj9B,EAAMugR,EAAiBnnR,GAC/BgiB,KAAKpb,KAAOA,EACZob,KAAKmlQ,gBAAkBA,EACvBnlQ,KAAKhiB,KAAOA,EACZgiB,KAAKolQ,mBAAoB,EAIzBplQ,KAAKqlQ,aAAe,CAAC,EACrBrlQ,KAAKslQ,kBAAoB,OACzBtlQ,KAAKulQ,kBAAoB,IAC7B,CACA,oBAAAC,CAAqBr4Q,GAEjB,OADA6S,KAAKslQ,kBAAoBn4Q,EAClB6S,IACX,CACA,oBAAAylQ,CAAqBL,GAEjB,OADAplQ,KAAKolQ,kBAAoBA,EAClBplQ,IACX,CACA,eAAA0lQ,CAAgBxoR,GAEZ,OADA8iB,KAAKqlQ,aAAenoR,EACb8iB,IACX,CACA,0BAAA2lQ,CAA2Bx9O,GAEvB,OADAnoB,KAAKulQ,kBAAoBp9O,EAClBnoB,IACX,EAmBJ,MAAMy+P,EAAqB,YAsB3B,MAAMrzB,EACF,WAAAvpN,CAAYj9B,EAAM5J,GACdglB,KAAKpb,KAAOA,EACZob,KAAKhlB,UAAYA,EACjBglB,KAAK+M,UAAY,KACjB/M,KAAK+pI,UAAY,IAAIp5G,IACrB3wB,KAAK4lQ,kBAAoB,IAAIj1O,IAC7B3wB,KAAK6lQ,iBAAmB,IAAIl1O,IAC5B3wB,KAAK8lQ,gBAAkB,IAAIn1O,GAC/B,CAKA,GAAA7nB,CAAIm7I,GAEA,MAAM8hH,EAAuB/lQ,KAAKgmQ,4BAA4B/hH,GAC9D,IAAKjkJ,KAAK4lQ,kBAAkBp1O,IAAIu1O,GAAuB,CACnD,MAAME,EAAW,IAAI,KAErB,GADAjmQ,KAAK4lQ,kBAAkBn1O,IAAIs1O,EAAsBE,GAC7CjmQ,KAAKkmQ,cAAcH,IACnB/lQ,KAAKmmQ,uBAEL,IACI,MAAMxjI,EAAW3iI,KAAKomQ,uBAAuB,CACzC3G,mBAAoBsG,IAEpBpjI,GACAsjI,EAAS7mP,QAAQujH,EAEzB,CACA,MAAOroJ,GAGP,CAER,CACA,OAAO0lB,KAAK4lQ,kBAAkB98P,IAAIi9P,GAAsBjlP,OAC5D,CACA,YAAAu9O,CAAa99Q,GACT,IAAIinC,EAEJ,MAAMu+O,EAAuB/lQ,KAAKgmQ,4BAAwC,OAAZzlR,QAAgC,IAAZA,OAAqB,EAASA,EAAQ0jK,YAClHvhH,EAAyF,QAA7Elb,EAAiB,OAAZjnC,QAAgC,IAAZA,OAAqB,EAASA,EAAQmiD,gBAA6B,IAAPlb,GAAgBA,EACvH,IAAIxnB,KAAKkmQ,cAAcH,KACnB/lQ,KAAKmmQ,uBAeJ,CAED,GAAIzjO,EACA,OAAO,KAGP,MAAMh/B,MAAM,WAAW1D,KAAKpb,wBAEpC,CAtBI,IACI,OAAOob,KAAKomQ,uBAAuB,CAC/B3G,mBAAoBsG,GAE5B,CACA,MAAOzrR,GACH,GAAIooD,EACA,OAAO,KAGP,MAAMpoD,CAEd,CAWR,CACA,YAAA6jR,GACI,OAAOn+P,KAAK+M,SAChB,CACA,YAAAs5P,CAAat5P,GACT,GAAIA,EAAUnoB,OAASob,KAAKpb,KACxB,MAAM8e,MAAM,yBAAyBqJ,EAAUnoB,qBAAqBob,KAAKpb,SAE7E,GAAIob,KAAK+M,UACL,MAAMrJ,MAAM,iBAAiB1D,KAAKpb,kCAItC,GAFAob,KAAK+M,UAAYA,EAEZ/M,KAAKmmQ,uBAAV,CAIA,GAwKR,SAA0Bp5P,GACtB,MAAuC,UAAhCA,EAAUu4P,iBACrB,CA1KYgB,CAAiBv5P,GACjB,IACI/M,KAAKomQ,uBAAuB,CAAE3G,mBAAoBhB,GACtD,CACA,MAAOnkR,GAKP,CAKJ,IAAK,MAAOmlR,EAAoB8G,KAAqBvmQ,KAAK4lQ,kBAAkB94O,UAAW,CACnF,MAAMi5O,EAAuB/lQ,KAAKgmQ,4BAA4BvG,GAC9D,IAEI,MAAM98H,EAAW3iI,KAAKomQ,uBAAuB,CACzC3G,mBAAoBsG,IAExBQ,EAAiBnnP,QAAQujH,EAC7B,CACA,MAAOroJ,GAGP,CACJ,CA7BA,CA8BJ,CACA,aAAAolR,CAAcz7G,EAAaw6G,GACvBz+P,KAAK4lQ,kBAAkBx0O,OAAO6yH,GAC9BjkJ,KAAK6lQ,iBAAiBz0O,OAAO6yH,GAC7BjkJ,KAAK+pI,UAAU34G,OAAO6yH,EAC1B,CAGA,YAAM,GACF,MAAMuiH,EAAW5sR,MAAM0Z,KAAK0M,KAAK+pI,UAAUrkF,gBACrCvmC,QAAQivG,IAAI,IACXo4I,EACExiQ,QAAOinB,GAAW,aAAcA,IAEhCntC,KAAImtC,GAAWA,EAAQw7O,SAASr1O,cAClCo1O,EACExiQ,QAAOinB,GAAW,YAAaA,IAE/BntC,KAAImtC,GAAWA,EAAQy7O,aAEpC,CACA,cAAAC,GACI,OAAyB,MAAlB3mQ,KAAK+M,SAChB,CACA,aAAAm5P,CAAcjiH,EAAaw6G,GACvB,OAAOz+P,KAAK+pI,UAAUv5G,IAAIyzH,EAC9B,CACA,UAAA2iH,CAAW3iH,EAAaw6G,GACpB,OAAOz+P,KAAK6lQ,iBAAiB/8P,IAAIm7I,IAAe,CAAC,CACrD,CACA,UAAAorE,CAAW/pN,EAAO,CAAC,GACf,MAAM,QAAE/kB,EAAU,CAAC,GAAM+kB,EACnBygQ,EAAuB/lQ,KAAKgmQ,4BAA4B1gQ,EAAKm6P,oBACnE,GAAIz/P,KAAKkmQ,cAAcH,GACnB,MAAMriQ,MAAM,GAAG1D,KAAKpb,QAAQmhR,mCAEhC,IAAK/lQ,KAAK2mQ,iBACN,MAAMjjQ,MAAM,aAAa1D,KAAKpb,oCAElC,MAAM+9I,EAAW3iI,KAAKomQ,uBAAuB,CACzC3G,mBAAoBsG,EACpBxlR,YAGJ,IAAK,MAAOk/Q,EAAoB8G,KAAqBvmQ,KAAK4lQ,kBAAkB94O,UAAW,CAE/Ei5O,IADiC/lQ,KAAKgmQ,4BAA4BvG,IAElE8G,EAAiBnnP,QAAQujH,EAEjC,CACA,OAAOA,CACX,CASA,MAAAwS,CAAOhtH,EAAU87H,GACb,IAAIz8H,EACJ,MAAMu+O,EAAuB/lQ,KAAKgmQ,4BAA4B/hH,GACxD4iH,EAA8E,QAAzDr/O,EAAKxnB,KAAK8lQ,gBAAgBh9P,IAAIi9P,UAA0C,IAAPv+O,EAAgBA,EAAK,IAAIqJ,IACrHg2O,EAAkB1/P,IAAIghB,GACtBnoB,KAAK8lQ,gBAAgBr1O,IAAIs1O,EAAsBc,GAC/C,MAAMC,EAAmB9mQ,KAAK+pI,UAAUjhI,IAAIi9P,GAI5C,OAHIe,GACA3+O,EAAS2+O,EAAkBf,GAExB,KACHc,EAAkBz1O,OAAOjJ,EAAS,CAE1C,CAKA,qBAAA4+O,CAAsBpkI,EAAUshB,GAC5B,MAAMh2I,EAAYjO,KAAK8lQ,gBAAgBh9P,IAAIm7I,GAC3C,GAAKh2I,EAGL,IAAK,MAAMka,KAAYla,EACnB,IACIka,EAASw6G,EAAUshB,EACvB,CACA,MAAOz8H,GAEP,CAER,CACA,sBAAA4+O,EAAuB,mBAAE3G,EAAkB,QAAEl/Q,EAAU,CAAC,IACpD,IAAIoiJ,EAAW3iI,KAAK+pI,UAAUjhI,IAAI22P,GAClC,IAAK98H,GAAY3iI,KAAK+M,YAClB41H,EAAW3iI,KAAK+M,UAAUo4P,gBAAgBnlQ,KAAKhlB,UAAW,CACtDykR,oBAyCuBx7G,EAzC2Bw7G,EA0CvDx7G,IAAew6G,OAAqB7lQ,EAAYqrJ,GAzC3C1jK,YAEJyf,KAAK+pI,UAAUt5G,IAAIgvO,EAAoB98H,GACvC3iI,KAAK6lQ,iBAAiBp1O,IAAIgvO,EAAoBl/Q,GAM9Cyf,KAAK+mQ,sBAAsBpkI,EAAU88H,GAMjCz/P,KAAK+M,UAAUw4P,mBACf,IACIvlQ,KAAK+M,UAAUw4P,kBAAkBvlQ,KAAKhlB,UAAWykR,EAAoB98H,EACzE,CACA,MAAOn7G,GAEP,CAmBhB,IAAuCy8H,EAhB/B,OAAOthB,GAAY,IACvB,CACA,2BAAAqjI,CAA4B/hH,EAAaw6G,GACrC,OAAIz+P,KAAK+M,UACE/M,KAAK+M,UAAUq4P,kBAAoBnhH,EAAaw6G,EAGhDx6G,CAEf,CACA,oBAAAkiH,GACI,QAAUnmQ,KAAK+M,WAC0B,aAArC/M,KAAK+M,UAAUu4P,iBACvB,EA6BJ,MAAM0B,EACF,WAAAnlP,CAAYj9B,GACRob,KAAKpb,KAAOA,EACZob,KAAKinQ,UAAY,IAAIt2O,GACzB,CAUA,YAAAouO,CAAahyP,GACT,MAAMmxP,EAAWl+P,KAAKs/P,YAAYvyP,EAAUnoB,MAC5C,GAAIs5Q,EAASyI,iBACT,MAAM,IAAIjjQ,MAAM,aAAaqJ,EAAUnoB,yCAAyCob,KAAKpb,QAEzFs5Q,EAASmI,aAAat5P,EAC1B,CACA,uBAAAkyP,CAAwBlyP,GACH/M,KAAKs/P,YAAYvyP,EAAUnoB,MAC/B+hR,kBAET3mQ,KAAKinQ,UAAU71O,OAAOrkB,EAAUnoB,MAEpCob,KAAK++P,aAAahyP,EACtB,CAQA,WAAAuyP,CAAY16Q,GACR,GAAIob,KAAKinQ,UAAUz2O,IAAI5rC,GACnB,OAAOob,KAAKinQ,UAAUn+P,IAAIlkB,GAG9B,MAAMs5Q,EAAW,IAAI9yB,EAASxmP,EAAMob,MAEpC,OADAA,KAAKinQ,UAAUx2O,IAAI7rC,EAAMs5Q,GAClBA,CACX,CACA,YAAAD,GACI,OAAOrkR,MAAM0Z,KAAK0M,KAAKinQ,UAAUvhN,SACrC,gJCjYJ,MAAMqkF,EAAY,GAYlB,IAAIm9H,GACJ,SAAWA,GACPA,EAASA,EAAgB,MAAI,GAAK,QAClCA,EAASA,EAAkB,QAAI,GAAK,UACpCA,EAASA,EAAe,KAAI,GAAK,OACjCA,EAASA,EAAe,KAAI,GAAK,OACjCA,EAASA,EAAgB,MAAI,GAAK,QAClCA,EAASA,EAAiB,OAAI,GAAK,QACtC,CAPD,CAOGA,IAAaA,EAAW,CAAC,IAC5B,MAAMC,EAAoB,CACtB,MAASD,EAAS5/I,MAClB,QAAW4/I,EAASE,QACpB,KAAQF,EAASG,KACjB,KAAQH,EAASI,KACjB,MAASJ,EAAS1kM,MAClB,OAAU0kM,EAASK,QAKjBC,EAAkBN,EAASG,KAO3BI,EAAgB,CAClB,CAACP,EAAS5/I,OAAQ,MAClB,CAAC4/I,EAASE,SAAU,MACpB,CAACF,EAASG,MAAO,OACjB,CAACH,EAASI,MAAO,OACjB,CAACJ,EAAS1kM,OAAQ,SAOhBklM,EAAoB,CAAC/kI,EAAUglI,KAAYtuR,KAC7C,GAAIsuR,EAAUhlI,EAAS8/H,SACnB,OAEJ,MAAMx5Q,GAAM,IAAIC,MAAOmtB,cACjBnX,EAASuoQ,EAAcE,GAC7B,IAAIzoQ,EAIA,MAAM,IAAIwE,MAAM,8DAA8DikQ,MAH9EvnQ,QAAQlB,GAAQ,IAAIjW,OAAS05I,EAAS/9I,WAAYvL,EAItD,EAEJ,MAAMuuR,EAOF,WAAA/lP,CAAYj9B,GACRob,KAAKpb,KAAOA,EAIZob,KAAK6nQ,UAAYL,EAKjBxnQ,KAAK8nQ,YAAcJ,EAInB1nQ,KAAK+nQ,gBAAkB,KAIvBh+H,EAAU1uJ,KAAK2kB,KACnB,CACA,YAAIyiQ,GACA,OAAOziQ,KAAK6nQ,SAChB,CACA,YAAIpF,CAAS7mQ,GACT,KAAMA,KAAOsrQ,GACT,MAAM,IAAIhlQ,UAAU,kBAAkBtG,+BAE1CoE,KAAK6nQ,UAAYjsQ,CACrB,CAEA,WAAA4mQ,CAAY5mQ,GACRoE,KAAK6nQ,UAA2B,kBAARjsQ,EAAmBurQ,EAAkBvrQ,GAAOA,CACxE,CACA,cAAIosQ,GACA,OAAOhoQ,KAAK8nQ,WAChB,CACA,cAAIE,CAAWpsQ,GACX,GAAmB,oBAARA,EACP,MAAM,IAAIsG,UAAU,qDAExBlC,KAAK8nQ,YAAclsQ,CACvB,CACA,kBAAIqsQ,GACA,OAAOjoQ,KAAK+nQ,eAChB,CACA,kBAAIE,CAAersQ,GACfoE,KAAK+nQ,gBAAkBnsQ,CAC3B,CAIA,KAAAyE,IAAShnB,GACL2mB,KAAK+nQ,iBAAmB/nQ,KAAK+nQ,gBAAgB/nQ,KAAMknQ,EAAS5/I,SAAUjuI,GACtE2mB,KAAK8nQ,YAAY9nQ,KAAMknQ,EAAS5/I,SAAUjuI,EAC9C,CACA,GAAAmnB,IAAOnnB,GACH2mB,KAAK+nQ,iBACD/nQ,KAAK+nQ,gBAAgB/nQ,KAAMknQ,EAASE,WAAY/tR,GACpD2mB,KAAK8nQ,YAAY9nQ,KAAMknQ,EAASE,WAAY/tR,EAChD,CACA,IAAAu4B,IAAQv4B,GACJ2mB,KAAK+nQ,iBAAmB/nQ,KAAK+nQ,gBAAgB/nQ,KAAMknQ,EAASG,QAAShuR,GACrE2mB,KAAK8nQ,YAAY9nQ,KAAMknQ,EAASG,QAAShuR,EAC7C,CACA,IAAAq0B,IAAQr0B,GACJ2mB,KAAK+nQ,iBAAmB/nQ,KAAK+nQ,gBAAgB/nQ,KAAMknQ,EAASI,QAASjuR,GACrE2mB,KAAK8nQ,YAAY9nQ,KAAMknQ,EAASI,QAASjuR,EAC7C,CACA,KAAAqK,IAASrK,GACL2mB,KAAK+nQ,iBAAmB/nQ,KAAK+nQ,gBAAgB/nQ,KAAMknQ,EAAS1kM,SAAUnpF,GACtE2mB,KAAK8nQ,YAAY9nQ,KAAMknQ,EAAS1kM,SAAUnpF,EAC9C,EAEJ,SAASmpR,EAAYt/B,GACjBn5F,EAAUnnJ,SAAQunJ,IACdA,EAAKq4H,YAAYt/B,EAAM,GAE/B,CACA,SAASglC,EAAkB3F,EAAahiR,GACpC,IAAK,MAAMoiJ,KAAYoH,EAAW,CAC9B,IAAIo+H,EAAiB,KACjB5nR,GAAWA,EAAQ2iP,QACnBilC,EAAiBhB,EAAkB5mR,EAAQ2iP,QAG3CvgG,EAASslI,eADO,OAAhB1F,EAC0B,KAGA,CAAC5/H,EAAUugG,KAAU7pP,KAC3C,MAAMwP,EAAUxP,EACXyE,KAAIrE,IACL,GAAW,MAAPA,EACA,OAAO,KAEN,GAAmB,kBAARA,EACZ,OAAOA,EAEN,GAAmB,kBAARA,GAAmC,mBAARA,EACvC,OAAOA,EAAIK,WAEV,GAAIL,aAAeiqB,MACpB,OAAOjqB,EAAIoP,QAGX,IACI,OAAO2c,KAAKC,UAAUhsB,EAC1B,CACA,MAAO2uR,GACH,OAAO,IACX,CACJ,IAECpkQ,QAAOvqB,GAAOA,IACdmlB,KAAK,KACNskO,IAA6B,OAAnBilC,QAA8C,IAAnBA,EAA4BA,EAAiBxlI,EAAS8/H,WAC3FF,EAAY,CACRr/B,MAAOgkC,EAAShkC,GAAOz8N,cACvB5d,UACAxP,OACA2E,KAAM2kJ,EAAS/9I,MAEvB,CAGZ,CACJ,sCC3JO,SAAS6gB,EAAUigD,EAAQnlE,GAChC,MAAMs/Q,EAAWt/Q,GAAW,CAAC,EAK7B,OAF4C,KAA9BmlE,EAAOA,EAAOlsE,OAAS,GAAY,IAAIksE,EAAQ,IAAMA,GAGhE9mD,MACEihQ,EAASwI,SAAW,IAAM,IACzB,MACsB,IAArBxI,EAASyI,QAAoB,GAAK,MAEtCv1L,MACL,qECzEe,SAASi+F,EAAkBv1K,EAAKI,IAClC,MAAPA,GAAeA,EAAMJ,EAAIjiB,UAAQqiB,EAAMJ,EAAIjiB,QAC/C,IAAK,IAAID,EAAI,EAAG+3L,EAAO,IAAI13L,MAAMiiB,GAAMtiB,EAAIsiB,EAAKtiB,IAAK+3L,EAAK/3L,GAAKkiB,EAAIliB,GACnE,OAAO+3L,CACT,qECJe,SAAS9vJ,EAAuBxS,GAC7C,QAAa,IAATA,EACF,MAAM,IAAIyS,eAAe,6DAE3B,OAAOzS,CACT,qECLe,SAASukI,EAAgB5Q,EAAUgQ,GAChD,KAAMhQ,aAAoBgQ,GACxB,MAAM,IAAIzwI,UAAU,oCAExB,gICHA,SAAS6tK,EAAkBrrL,EAAQxH,GACjC,IAAK,IAAI3D,EAAI,EAAGA,EAAI2D,EAAM1D,OAAQD,IAAK,CACrC,IAAIy8F,EAAa94F,EAAM3D,GACvBy8F,EAAW9kD,WAAa8kD,EAAW9kD,aAAc,EACjD8kD,EAAW/kD,cAAe,EACtB,UAAW+kD,IAAYA,EAAWhlD,UAAW,GACjDj3C,OAAOg5C,eAAeruC,GAAQ,OAAcsxF,EAAW97F,KAAM87F,EAC/D,CACF,CACe,SAAS08D,EAAaC,EAAaC,EAAYC,GAM5D,OALID,GAAYm9B,EAAkBp9B,EAAY34J,UAAW44J,GACrDC,GAAak9B,EAAkBp9B,EAAaE,GAChD94J,OAAOg5C,eAAe4/G,EAAa,YAAa,CAC9C3hH,UAAU,IAEL2hH,CACT,iGChBe,SAAS41H,EAA2B9mR,EAAG+mR,GACpD,IAAI/rK,EAAuB,qBAAXxpE,QAA0BxxC,EAAEwxC,OAAOI,WAAa5xC,EAAE,cAClE,IAAKg7G,EAAI,CACP,GAAI7iH,MAAMC,QAAQ4H,KAAOg7G,GAAK,OAA2Bh7G,KAAO+mR,GAAkB/mR,GAAyB,kBAAbA,EAAEjI,OAAqB,CAC/GijH,IAAIh7G,EAAIg7G,GACZ,IAAIljH,EAAI,EACJ84C,EAAI,WAAc,EACtB,MAAO,CACLz3C,EAAGy3C,EACH73C,EAAG,WACD,OAAIjB,GAAKkI,EAAEjI,OAAe,CACxBw7C,MAAM,GAED,CACLA,MAAM,EACN56C,MAAOqH,EAAElI,KAEb,EACAe,EAAG,SAAWi+C,GACZ,MAAMA,CACR,EACAx7B,EAAGs1B,EAEP,CACA,MAAM,IAAInwB,UAAU,wIACtB,CACA,IAEE+D,EAFEwiQ,GAAmB,EACrBC,GAAS,EAEX,MAAO,CACL9tR,EAAG,WACD6hH,EAAKA,EAAGtiH,KAAKsH,EACf,EACAjH,EAAG,WACD,IAAIy6C,EAAOwnE,EAAG1uF,OAEd,OADA06P,EAAmBxzO,EAAKD,KACjBC,CACT,EACA36C,EAAG,SAAWquR,GACZD,GAAS,EACTziQ,EAAM0iQ,CACR,EACA5rQ,EAAG,WACD,IACO0rQ,GAAoC,MAAhBhsK,EAAW,QAAWA,EAAW,QAC5D,CAAE,QACA,GAAIisK,EAAQ,MAAMziQ,CACpB,CACF,EAEJ,uJChDe,SAASgqK,EAAaC,GACnC,IAAIC,GAA4B,SAChC,OAAO,WACL,IACEtyL,EADE0yL,GAAQ,OAAeL,GAE3B,GAAIC,EAA2B,CAC7B,IAAIK,GAAY,OAAexwK,MAAM6hB,YACrChkC,EAASs1C,QAAQi9I,UAAUG,EAAO5wK,UAAW6wK,EAC/C,MACE3yL,EAAS0yL,EAAMxwK,MAAMC,KAAML,WAE7B,OAAO,OAA0BK,KAAMniB,EACzC,CACF,iGCfe,SAASiyL,EAAgB3zK,EAAKjiB,EAAKE,GAYhD,OAXAF,GAAM,OAAcA,MACTiiB,EACTpiB,OAAOg5C,eAAe52B,EAAKjiB,EAAK,CAC9BE,MAAOA,EACP82C,YAAY,EACZD,cAAc,EACdD,UAAU,IAGZ70B,EAAIjiB,GAAOE,EAEN+hB,CACT,sCCde,SAAS6zK,EAAgBvuL,GAItC,OAHAuuL,EAAkBj2L,OAAOgoC,eAAiBhoC,OAAOo2C,eAAezvB,OAAS,SAAyBjf,GAChG,OAAOA,EAAEugC,WAAajoC,OAAOo2C,eAAe1uC,EAC9C,EACOuuL,EAAgBvuL,EACzB,+HCJe,SAASsyJ,EAAUpyH,EAAUC,GAC1C,GAA0B,oBAAfA,GAA4C,OAAfA,EACtC,MAAM,IAAI1f,UAAU,sDAEtByf,EAAS3nC,UAAYD,OAAO6yB,OAAOgV,GAAcA,EAAW5nC,UAAW,CACrE6nC,YAAa,CACXznC,MAAOunC,EACPqP,UAAU,EACVC,cAAc,KAGlBl3C,OAAOg5C,eAAepR,EAAU,YAAa,CAC3CqP,UAAU,IAERpP,IAAY,OAAeD,EAAUC,EAC3C,sCChBe,SAAS0uJ,IACtB,GAAuB,qBAAZn9I,UAA4BA,QAAQi9I,UAAW,OAAO,EACjE,GAAIj9I,QAAQi9I,UAAUC,KAAM,OAAO,EACnC,GAAqB,oBAAV39I,MAAsB,OAAO,EACxC,IAEE,OADAhwB,QAAQ1oB,UAAU0kE,QAAQvkE,KAAKg5C,QAAQi9I,UAAU1tK,QAAS,IAAI,WAAa,MACpE,CACT,CAAE,MAAOpoB,GACP,OAAO,CACT,CACF,wJCRe,SAASk5J,EAA2BxkI,EAAM70B,GACvD,GAAIA,IAA2B,YAAlB,OAAQA,IAAsC,oBAATA,GAChD,OAAOA,EACF,QAAa,IAATA,EACT,MAAM,IAAI+nB,UAAU,4DAEtB,OAAO,OAAsB8M,EAC/B,qCCTe,SAAS8S,EAAgBrgC,EAAG6d,GAKzC,OAJAwiB,EAAkB/nC,OAAOgoC,eAAiBhoC,OAAOgoC,eAAerhB,OAAS,SAAyBjf,EAAG6d,GAEnG,OADA7d,EAAEugC,UAAY1iB,EACP7d,CACT,EACOqgC,EAAgBrgC,EAAG6d,EAC5B,6HCLe,SAASspQ,EAAapkP,EAAOqkP,GAC1C,GAAuB,YAAnB,OAAQrkP,IAAiC,OAAVA,EAAgB,OAAOA,EAC1D,IAAIskP,EAAOtkP,EAAMyO,OAAO81O,aACxB,QAAanwQ,IAATkwQ,EAAoB,CACtB,IAAI38O,EAAM28O,EAAK3uR,KAAKqqC,EAAOqkP,GAAQ,WACnC,GAAqB,YAAjB,OAAQ18O,GAAmB,OAAOA,EACtC,MAAM,IAAIjqB,UAAU,+CACtB,CACA,OAAiB,WAAT2mQ,EAAoBhmQ,OAASD,QAAQ4hB,EAC/C,yHCRe,SAASwkP,EAAevvR,GACrC,IAAIS,GAAM,OAAYT,EAAK,UAC3B,MAAwB,YAAjB,OAAQS,GAAoBA,EAAM2oB,OAAO3oB,EAClD,mCCLe,SAASu4J,EAAQhxJ,GAG9B,OAAOgxJ,EAAU,mBAAqBx/G,QAAU,iBAAmBA,OAAOI,SAAW,SAAU5xC,GAC7F,cAAcA,CAChB,EAAI,SAAUA,GACZ,OAAOA,GAAK,mBAAqBwxC,QAAUxxC,EAAEogC,cAAgBoR,QAAUxxC,IAAMwxC,OAAOj5C,UAAY,gBAAkByH,CACpH,EAAGgxJ,EAAQhxJ,EACb,gICPe,SAASovL,EAA4BpvL,EAAG4vL,GACrD,GAAK5vL,EAAL,CACA,GAAiB,kBAANA,EAAgB,OAAO,OAAiBA,EAAG4vL,GACtD,IAAI72L,EAAIT,OAAOC,UAAUF,SAASK,KAAKsH,GAAG8B,MAAM,GAAI,GAEpD,MADU,WAAN/I,GAAkBiH,EAAEogC,cAAarnC,EAAIiH,EAAEogC,YAAYj9B,MAC7C,QAANpK,GAAqB,QAANA,EAAoBZ,MAAM0Z,KAAK7R,GACxC,cAANjH,GAAqB,2CAA2C4kB,KAAK5kB,IAAW,OAAiBiH,EAAG4vL,QAAxG,CALc,CAMhB,sECJA,MAAMrzG,EAAUtjF,SAASmB,cAAc,KAMhC,SAASotR,EAA8B7uR,GAC5C,MAAM8uR,EAAqB,IAAM9uR,EAAQ,IACzC4jF,EAAQ1iD,UAAY4tP,EACpB,MAAMxlO,EAAOs6B,EAAQvhD,YAUrB,OAAyC,KAArCinB,EAAKnoD,WAAWmoD,EAAKlqD,OAAS,IAAiC,SAAVY,KAQlDspD,IAASwlO,GAA6BxlO,EAC/C,sCC1BO,SAASutK,IAAM,CAEf,SAASk4D,IAAe,+HCD/B,MAGMC,EAAS,0DACTC,EAAY,2DAGZC,EAAe,CAAC,EA0Cf,SAAS1kR,EAAKA,EAAMrE,GAGzB,QAFiBA,GAAW+oR,GACRzlB,IAAMwlB,EAAYD,GAC5BhqQ,KAAKxa,EACjB,k5BCtCA,QAnBW,WACG,SAkBiB,yLCkQ/B,SAAS2kR,IAIL,MAAO,CACH,wCAA8F,0LAItG,CAQA,MAQMC,EAAeD,EACfE,EAA8B,IAAI,KAAa,OAAQ,WAtBlD,CACH,wCAA8F,4LA4JhGC,EAAY,IAAI,KAAO,kBAM7B,SAASC,EAAUr2L,KAAQj6F,GACnBqwR,EAAUjH,UAAY,KAASjgM,OAC/BknM,EAAUhmR,MAAM,SAAS,UAAiB4vF,OAAUj6F,EAE5D,CAkBA,SAASuwR,EAAMC,KAAentR,GAC1B,MAAMotR,EAAoBD,KAAentR,EAC7C,CACA,SAASqtR,EAAaF,KAAentR,GACjC,OAAOotR,EAAoBD,KAAentR,EAC9C,CACA,SAASstR,EAAwB76G,EAAM/iJ,EAAMvjB,GACzC,MAAMohR,EAAWlwR,OAAO+lB,OAAO/lB,OAAO+lB,OAAO,CAAC,EAAG0pQ,KAAiB,CAAE,CAACp9P,GAAOvjB,IAE5E,OADgB,IAAI,KAAa,OAAQ,WAAYohR,GACtCr9P,OAAOR,EAAM,CACxBwgE,QAASuiF,EAAKvqK,MAEtB,CACA,SAASslR,EAAgD/6G,GACrD,OAAO66G,EAAwB76G,EAAM,8CAA2F,iGACpI,CAWA,SAAS26G,EAAoBD,KAAentR,GACxC,GAA0B,kBAAfmtR,EAAyB,CAChC,MAAMz9P,EAAO1vB,EAAK,GACZytR,EAAa,IAAIztR,EAAK6G,MAAM,IAIlC,OAHI4mR,EAAW,KACXA,EAAW,GAAGv9L,QAAUi9L,EAAWjlR,MAEhCilR,EAAWO,cAAcx9P,OAAOR,KAAS+9P,EACpD,CACA,OAAOV,EAA4B78P,OAAOi9P,KAAentR,EAC7D,CACA,SAAS2tR,EAAQ5mP,EAAWomP,KAAentR,GACvC,IAAK+mC,EACD,MAAMqmP,EAAoBD,KAAentR,EAEjD,CAOA,SAAS4tR,EAAUC,GAGf,MAAM1hR,EAAU,8BAAgC0hR,EAKhD,MAJAZ,EAAU9gR,GAIJ,IAAI6a,MAAM7a,EACpB,CAQA,SAAS2hR,EAAY/mP,EAAW56B,GACvB46B,GACD6mP,EAAUzhR,EAElB,CAkBA,SAAS4hR,IACL,IAAIjjP,EACJ,MAAwB,qBAATxY,OAAkD,QAAxBwY,EAAKxY,KAAK9O,gBAA6B,IAAPsnB,OAAgB,EAASA,EAAGliC,OAAU,EACnH,CACA,SAASolR,IACL,MAA+B,UAAxBC,KAA2D,WAAxBA,GAC9C,CACA,SAASA,IACL,IAAInjP,EACJ,MAAwB,qBAATxY,OAAkD,QAAxBwY,EAAKxY,KAAK9O,gBAA6B,IAAPsnB,OAAgB,EAASA,EAAG7R,WAAc,IACvH,CAyEA,MAAMi1P,EACF,WAAA/oP,CAAYgpP,EAAYC,GACpB9qQ,KAAK6qQ,WAAaA,EAClB7qQ,KAAK8qQ,UAAYA,EAEjBN,EAAYM,EAAYD,EAAY,+CACpC7qQ,KAAKi/K,UAAW,YAAqB,SACzC,CACA,GAAAn2K,GACI,MA5DqB,qBAAdqG,WACPA,WACA,WAAYA,WACgB,mBAArBA,UAAU47P,SAMhBL,MAAoB,WAAwB,eAAgBv7P,aACtDA,UAAU47P,OAoDNp7P,KAAKjT,IAAI,IAA6BsD,KAAK6qQ,YAM/C7qQ,KAAKi/K,SAAWj/K,KAAK8qQ,UAAY9qQ,KAAK6qQ,UACjD,EAmBJ,SAASG,EAAap4P,EAAQltB,GAC1B8kR,EAAY53P,EAAOq4P,SAAU,sCAC7B,MAAM,IAAEl2P,GAAQnC,EAAOq4P,SACvB,OAAKvlR,EAGE,GAAGqvB,IAAMrvB,EAAK66C,WAAW,KAAO76C,EAAKnC,MAAM,GAAKmC,IAF5CqvB,CAGf,CAkBA,MAAMm2P,EACF,iBAAO77C,CAAW87C,EAAWC,EAAaC,GACtCrrQ,KAAKmrQ,UAAYA,EACbC,IACAprQ,KAAKorQ,YAAcA,GAEnBC,IACArrQ,KAAKqrQ,aAAeA,EAE5B,CACA,YAAOvsP,GACH,OAAI9e,KAAKmrQ,UACEnrQ,KAAKmrQ,UAEI,qBAATn8P,MAAwB,UAAWA,KACnCA,KAAK8P,MAEU,qBAAfwd,YAA8BA,WAAWxd,MACzCwd,WAAWxd,MAED,qBAAVA,MACAA,WAEXwrP,EAAU,kHACd,CACA,cAAOtzI,GACH,OAAIh3H,KAAKorQ,YACEprQ,KAAKorQ,YAEI,qBAATp8P,MAAwB,YAAaA,KACrCA,KAAKs8P,QAEU,qBAAfhvO,YAA8BA,WAAWgvO,QACzChvO,WAAWgvO,QAEC,qBAAZA,QACAA,aAEXhB,EAAU,oHACd,CACA,eAAO9rP,GACH,OAAIxe,KAAKqrQ,aACErrQ,KAAKqrQ,aAEI,qBAATr8P,MAAwB,aAAcA,KACtCA,KAAKu8P,SAEU,qBAAfjvO,YAA8BA,WAAWivO,SACzCjvO,WAAWivO,SAEE,qBAAbA,SACAA,cAEXjB,EAAU,qHACd,EAsBJ,MAAMkB,EAAmB,CAErB,oBAA+D,wBAE/D,qBAAiE,iBAEjE,mBAA6D,gBAE7D,qBAAiE,iBAEjE,iBAAyD,iBAEzD,iBAAyD,mBAGzD,0BAA2E,qBAE3E,aAAiD,uBACjD,wBAAuE,wBAEvE,qBAAiE,qBACjE,sBAAmE,qBACnE,iCAAyF,4BAEzF,iBAAyD,iBAEzD,gBAAuD,iBACvD,4BAA+E,oBAC/E,iBAAyD,sBACzD,iBAAyD,sBAEzD,iBAAyD,iBAEzD,+BAAqF,wBACrF,iBAAyD,qBACzD,cAAmD,qBACnD,eAAqD,qBAErD,4BAA+E,oBAC/E,oCAA+F,sCAE/F,aAAiD,4BACjD,qBAAiE,0BACjE,wBAAuE,qBACvE,qBAAiE,0BACjE,gBAAuD,eAIvD,6BAAiF,2BACjF,oBAA+D,4BAE/D,wBAAuE,0BAEvE,qBAAiE,6BAEjE,+BAAqF,+BACrF,yBAAyE,8BACzE,0BAA2E,4BAC3E,+BAAqF,+BACrF,qBAAiE,+BACjE,6BAAiF,uCAEjF,iCAAyF,iBAEzF,sBAAmE,wBACnE,wBAAuE,0BACvE,wBAAuE,0BACvE,yBAAyE,2BACzE,oBAA+D,sBAC/D,0BAA2E,4BAC3E,0BAA2E,4BAC3E,iBAAyD,oBAmBvDC,EAAyB,IAAIb,EAAM,IAAO,KAChD,SAASc,EAAmBv8G,EAAM/kJ,GAC9B,OAAI+kJ,EAAKw8G,WAAavhQ,EAAQuhQ,SACnB5xR,OAAO+lB,OAAO/lB,OAAO+lB,OAAO,CAAC,EAAGsK,GAAU,CAAEuhQ,SAAUx8G,EAAKw8G,WAE/DvhQ,CACX,CACAq7H,eAAemmI,EAAmBz8G,EAAMjwJ,EAAQxZ,EAAM0kB,EAASyhQ,EAAiB,CAAC,GAC7E,OAAOC,EAA+B38G,EAAM08G,GAAgBpmI,UACxD,IAAI5sI,EAAO,CAAC,EACRg0B,EAAS,CAAC,EACVziB,IACe,QAAXlL,EACA2tB,EAASziB,EAGTvR,EAAO,CACHA,KAAM2M,KAAKC,UAAU2E,KAIjC,MAAM8kH,GAAQ,QAAYn1I,OAAO+lB,OAAO,CAAE5lB,IAAKi1K,EAAKv8I,OAAOtV,QAAUuvB,IAAStpC,MAAM,GAC9EyzI,QAAgBm4B,EAAK48G,wBAC3B/0I,EAAQ,gBAAgD,mBACpDm4B,EAAK68G,eACLh1I,EAAQ,qBAA0Dm4B,EAAK68G,cAE3E,MAAMC,EAAYlyR,OAAO+lB,OAAO,CAAEZ,SAC9B83H,WAAWn+H,GAQf,OAHK,YACDozQ,EAAUt2C,eAAiB,eAExBu1C,EAAcpsP,OAAdosP,CAAsBgB,EAAgB/8G,EAAMA,EAAKv8I,OAAOu5P,QAASzmR,EAAMwpI,GAAQ+8I,EAAU,GAExG,CACAxmI,eAAeqmI,EAA+B38G,EAAM08G,EAAgBO,GAChEj9G,EAAKk9G,kBAAmB,EACxB,MAAMpC,EAAWlwR,OAAO+lB,OAAO/lB,OAAO+lB,OAAO,CAAC,EAAG0rQ,GAAmBK,GACpE,IACI,MAAMS,EAAiB,IAAIC,EAAep9G,GACpC3wI,QAAiBW,QAAQ0c,KAAK,CAChCuwO,IACAE,EAAexrP,UAInBwrP,EAAeE,sBACf,MAAMC,QAAajuP,EAASiuP,OAC5B,GAAI,qBAAsBA,EACtB,MAAMC,EAAiBv9G,EAAM,2CAAkFs9G,GAEnH,GAAIjuP,EAASyyL,MAAQ,iBAAkBw7D,GACnC,OAAOA,EAEN,CACD,MAAM/iQ,EAAe8U,EAASyyL,GAAKw7D,EAAK/iQ,aAAe+iQ,EAAK/oR,MAAMmF,SAC3D8jR,EAAiBC,GAAsBljQ,EAAa3F,MAAM,OACjE,GAAwB,qCAApB4oQ,EACA,MAAMD,EAAiBv9G,EAAM,4BAA2Es9G,GAEvG,GAAwB,iBAApBE,EACL,MAAMD,EAAiBv9G,EAAM,uBAAyDs9G,GAErF,GAAwB,kBAApBE,EACL,MAAMD,EAAiBv9G,EAAM,gBAAmDs9G,GAEpF,MAAMI,EAAY5C,EAAS0C,IACvBA,EACKlmQ,cACAvgB,QAAQ,UAAW,KAC5B,GAAI0mR,EACA,MAAM5C,EAAwB76G,EAAM09G,EAAWD,GAG/ChD,EAAMz6G,EAAM09G,EAEpB,CACJ,CACA,MAAOvyR,GACH,GAAIA,aAAa,KACb,MAAMA,EAKVsvR,EAAMz6G,EAAM,yBAAqE,CAAE,QAAWtsJ,OAAOvoB,IACzG,CACJ,CACAmrJ,eAAeqnI,EAAsB39G,EAAMjwJ,EAAQxZ,EAAM0kB,EAASyhQ,EAAiB,CAAC,GAChF,MAAMkB,QAAuBnB,EAAmBz8G,EAAMjwJ,EAAQxZ,EAAM0kB,EAASyhQ,GAM7E,MALI,yBAA0BkB,GAC1BnD,EAAMz6G,EAAM,6BAA+D,CACvE69G,gBAAiBD,IAGlBA,CACX,CACA,SAASb,EAAgB/8G,EAAMhvJ,EAAMza,EAAMwpI,GACvC,MAAMz/G,EAAO,GAAGtP,IAAOza,KAAQwpI,IAC/B,OAAKigC,EAAKv8I,OAAOq4P,SAGVD,EAAa77G,EAAKv8I,OAAQnD,GAFtB,GAAG0/I,EAAKv8I,OAAOq6P,eAAex9P,GAG7C,CACA,SAASy9P,EAAuBC,GAC5B,OAAQA,GACJ,IAAK,UACD,MAAO,UACX,IAAK,QACD,MAAO,QACX,IAAK,MACD,MAAO,MACX,QACI,MAAO,gCAEnB,CACA,MAAMZ,EACF,mBAAAC,GACIl7L,aAAatxE,KAAKgwO,MACtB,CACA,WAAAnuN,CAAYstI,GACRnvJ,KAAKmvJ,KAAOA,EAIZnvJ,KAAKgwO,MAAQ,KACbhwO,KAAK8gB,QAAU,IAAI3B,SAAQ,CAACmM,EAAGjM,KAC3Brf,KAAKgwO,MAAQ1hO,YAAW,IACb+Q,EAAO0qP,EAAa/pQ,KAAKmvJ,KAAM,4BACvCs8G,EAAuB3iQ,MAAM,GAExC,EAEJ,SAAS4jQ,EAAiBv9G,EAAM/iJ,EAAMoS,GAClC,MAAM4uP,EAAc,CAChBxgM,QAASuiF,EAAKvqK,MAEd45B,EAAS9S,QACT0hQ,EAAY1hQ,MAAQ8S,EAAS9S,OAE7B8S,EAAS6uP,cACTD,EAAYC,YAAc7uP,EAAS6uP,aAEvC,MAAM3pR,EAAQqmR,EAAa56G,EAAM/iJ,EAAMghQ,GAGvC,OADA1pR,EAAMonC,WAAWwiP,eAAiB9uP,EAC3B96B,CACX,CAsBA,SAAS6pR,EAAaC,GAClB,YAAuB50Q,IAAf40Q,QACsB50Q,IAA1B40Q,EAAWC,UACnB,CACA,MAAMC,EACF,WAAA7rP,CAAYrD,GASR,GALAxe,KAAK2tQ,QAAU,GAIf3tQ,KAAK4tQ,0BAA4B,QACHh1Q,IAA1B4lB,EAASqvP,aACT,MAAM,IAAInqQ,MAAM,0BAGpB1D,KAAK2tQ,QAAUnvP,EAASqvP,aAAa9pQ,MAAM,KAAK,GAChD/D,KAAK4tQ,0BAA4BpvP,EAASovP,yBAC9C,CAOA,2BAAAE,CAA4BC,GACxB,IAAK/tQ,KAAK4tQ,2BACoC,IAA1C5tQ,KAAK4tQ,0BAA0Bp0R,OAC/B,OAAO,KAEX,IAAK,MAAMo0R,KAA6B5tQ,KAAK4tQ,0BACzC,GAAIA,EAA0B1P,UAC1B0P,EAA0B1P,WAAa6P,EACvC,OAAOb,EAAuBU,EAA0BI,kBAGhE,OAAO,IACX,CAOA,iBAAAC,CAAkBF,GACd,MACI,YADI/tQ,KAAK8tQ,4BAA4BC,IAEa,UAAlD/tQ,KAAK8tQ,4BAA4BC,EACzC,CAOA,oBAAAG,GACI,OAAQluQ,KAAKiuQ,kBAAkB,4BAC3BjuQ,KAAKiuQ,kBAAkB,iBAC/B,EAsBJxoI,eAAe0oI,EAAmBh/G,EAAM/kJ,GACpC,OAAOwhQ,EAAmBz8G,EAAM,MAA4B,sBAA2Du8G,EAAmBv8G,EAAM/kJ,GACpJ,CAwBAq7H,eAAe2oI,EAAej/G,EAAM/kJ,GAChC,OAAOwhQ,EAAmBz8G,EAAM,OAA8B,sBAAuD/kJ,EACzH,CAkBA,SAASikQ,EAAyBC,GAC9B,GAAKA,EAGL,IAEI,MAAMtkR,EAAO,IAAId,KAAK0Z,OAAO0rQ,IAE7B,IAAKhtQ,MAAMtX,EAAKimB,WAEZ,OAAOjmB,EAAKqxQ,aAEpB,CACA,MAAO/gR,GAEP,CAEJ,CA8DA,SAASi0R,EAA4BthO,GACjC,OAAyB,IAAlBrqC,OAAOqqC,EAClB,CACA,SAASuhO,EAAYlmP,GACjB,MAAOs6H,EAAWjuI,EAASiX,GAAatD,EAAMvkB,MAAM,KACpD,QAAkBnL,IAAdgqJ,QACYhqJ,IAAZ+b,QACc/b,IAAdgzB,EAEA,OADA+9O,EAAU,kDACH,KAEX,IACI,MAAMviP,GAAU,QAAazS,GAC7B,OAAKyS,EAIE5hB,KAAKrC,MAAMikB,IAHduiP,EAAU,uCACH,KAGf,CACA,MAAOrvR,GAEH,OADAqvR,EAAU,2CAAkD,OAANrvR,QAAoB,IAANA,OAAe,EAASA,EAAER,YACvF,IACX,CACJ,CAIA,SAAS20R,EAAgBnmP,GACrB,MAAMomP,EAAcF,EAAYlmP,GAIhC,OAHA+hP,EAAQqE,EAAa,kBACrBrE,EAAmC,qBAApBqE,EAAY3lP,IAAqB,kBAChDshP,EAAmC,qBAApBqE,EAAYhmP,IAAqB,kBACzC9lB,OAAO8rQ,EAAY3lP,KAAOnmB,OAAO8rQ,EAAYhmP,IACxD,CAkBA+8G,eAAekpI,EAAqB5vQ,EAAM+hB,EAAS8tP,GAAkB,GACjE,GAAIA,EACA,OAAO9tP,EAEX,IACI,aAAaA,CACjB,CACA,MAAOxmC,GAMH,MALIA,aAAa,MAQzB,UAA2B,KAAE8xB,IACzB,MAAiB,uBAATA,GACK,4BAATA,CACR,CAX0CyiQ,CAAkBv0R,IAC5CykB,EAAKowJ,KAAK2/G,cAAgB/vQ,SACpBA,EAAKowJ,KAAK4/G,UAGlBz0R,CACV,CACJ,CAsBA,MAAM00R,EACF,WAAAntP,CAAY9iB,GACRiB,KAAKjB,KAAOA,EACZiB,KAAKivQ,WAAY,EAKjBjvQ,KAAKkqF,QAAU,KACflqF,KAAKkvQ,aAAe,GACxB,CACA,MAAAC,GACQnvQ,KAAKivQ,YAGTjvQ,KAAKivQ,WAAY,EACjBjvQ,KAAKovQ,WACT,CACA,KAAAC,GACSrvQ,KAAKivQ,YAGVjvQ,KAAKivQ,WAAY,EACI,OAAjBjvQ,KAAKkqF,SACL5Y,aAAatxE,KAAKkqF,SAE1B,CACA,WAAAolL,CAAYC,GACR,IAAI/nP,EACJ,GAAI+nP,EAAU,CACV,MAAM57N,EAAW3zC,KAAKkvQ,aAEtB,OADAlvQ,KAAKkvQ,aAAev/P,KAAKjT,IAAwB,EAApBsD,KAAKkvQ,aAAkB,MAC7Cv7N,CACX,CACK,CAED3zC,KAAKkvQ,aAAe,IACpB,MACMv7N,GAD8D,QAAnDnsB,EAAKxnB,KAAKjB,KAAKywQ,gBAAgB9mB,sBAAmC,IAAPlhO,EAAgBA,EAAK,GACtEt+B,KAAKD,MAAQ,IACxC,OAAO0mB,KAAKhT,IAAI,EAAGg3C,EACvB,CACJ,CACA,QAAAy7N,CAASG,GAAW,GAChB,IAAKvvQ,KAAKivQ,UAEN,OAEJ,MAAMt7N,EAAW3zC,KAAKsvQ,YAAYC,GAClCvvQ,KAAKkqF,QAAU57E,YAAWm3H,gBAChBzlI,KAAKyvQ,WAAW,GACvB97N,EACP,CACA,eAAM87N,GACF,UACUzvQ,KAAKjB,KAAK2wQ,YAAW,EAC/B,CACA,MAAOp1R,GAMH,YAHI,iCADO,OAANA,QAAoB,IAANA,OAAe,EAASA,EAAE8xB,OAEzCpM,KAAKovQ,UAAwB,GAGrC,CACApvQ,KAAKovQ,UACT,EAmBJ,MAAMO,EACF,WAAA9tP,CAAY+tP,EAAWC,GACnB7vQ,KAAK4vQ,UAAYA,EACjB5vQ,KAAK6vQ,YAAcA,EACnB7vQ,KAAK8vQ,iBACT,CACA,eAAAA,GACI9vQ,KAAK+vQ,eAAiB1B,EAAyBruQ,KAAK6vQ,aACpD7vQ,KAAKgwQ,aAAe3B,EAAyBruQ,KAAK4vQ,UACtD,CACA,KAAAK,CAAMjxQ,GACFgB,KAAK4vQ,UAAY5wQ,EAAS4wQ,UAC1B5vQ,KAAK6vQ,YAAc7wQ,EAAS6wQ,YAC5B7vQ,KAAK8vQ,iBACT,CACA,MAAAhvQ,GACI,MAAO,CACH8uQ,UAAW5vQ,KAAK4vQ,UAChBC,YAAa7vQ,KAAK6vQ,YAE1B,EAmBJpqI,eAAeyqI,EAAqBnxQ,GAChC,IAAIyoB,EACJ,MAAM2nI,EAAOpwJ,EAAKowJ,KACZghH,QAAgBpxQ,EAAK2wQ,aACrBlxP,QAAiBmwP,EAAqB5vQ,EAAMqvQ,EAAej/G,EAAM,CAAEghH,aACzE9F,EAAqB,OAAb7rP,QAAkC,IAAbA,OAAsB,EAASA,EAASqnJ,MAAMrsL,OAAQ21K,EAAM,kBACzF,MAAMihH,EAAc5xP,EAASqnJ,MAAM,GACnC9mK,EAAKsxQ,sBAAsBD,GAC3B,MAAME,GAA2D,QAAvC9oP,EAAK4oP,EAAYG,wBAAqC,IAAP/oP,OAAgB,EAASA,EAAGhuC,QAC/Fg3R,EAAoBJ,EAAYG,kBAChC,GACAE,GAuCiBj3P,EAvCgBza,EAAK0xQ,aAuCX7lG,EAvCyB0lG,EAyCnD,IADS92P,EAASxV,QAAOviB,IAAMmpL,EAAQ5xI,MAAKx+C,GAAKA,EAAEk2R,aAAejvR,EAAEivR,kBACpD9lG,IAF3B,IAA2BpxJ,EAAUoxJ,EAjCjC,MAAM+lG,EAAiB5xQ,EAAK6xQ,YACtBC,IAAmB9xQ,EAAK2M,OAAS0kQ,EAAYU,iBAAoC,OAAjBL,QAA0C,IAAjBA,OAA0B,EAASA,EAAaj3R,QACzIo3R,IAAeD,GAAyBE,EACxCloQ,EAAU,CACZ6f,IAAK4nP,EAAYW,QACjB9kR,YAAamkR,EAAYnkR,aAAe,KACxC+kR,SAAUZ,EAAYa,UAAY,KAClCvlQ,MAAO0kQ,EAAY1kQ,OAAS,KAC5BwlQ,cAAed,EAAYc,gBAAiB,EAC5C7D,YAAa+C,EAAY/C,aAAe,KACxC1B,SAAUyE,EAAYzE,UAAY,KAClC8E,eACAzxQ,SAAU,IAAI2wQ,EAAaS,EAAYR,UAAWQ,EAAYP,aAC9De,eAEJ72R,OAAO+lB,OAAOf,EAAM4J,EACxB,CAqBA,SAAS6nQ,EAAoBvJ,GACzB,OAAOA,EAAUnpR,KAAK0pC,IAClB,IAAI,WAAEkpP,GAAelpP,EAAI02O,GAAW,IAAAne,QAAOv4N,EAAI,CAAC,eAChD,MAAO,CACHkpP,aACAloP,IAAK01O,EAASiT,OAAS,GACvBllR,YAAaiyQ,EAASjyQ,aAAe,KACrCyf,MAAOwyP,EAASxyP,OAAS,KACzB2hQ,YAAanP,EAASmP,aAAe,KACrC2D,SAAU9S,EAAS+S,UAAY,KAClC,GAET,CAmEA,MAAMG,EACF,WAAAvvP,GACI7hB,KAAKqxQ,aAAe,KACpBrxQ,KAAKsxQ,YAAc,KACnBtxQ,KAAK0oP,eAAiB,IAC1B,CACA,aAAI6oB,GACA,OAASvxQ,KAAK0oP,gBACVx/P,KAAKD,MAAQ+W,KAAK0oP,eAAiB,GAC3C,CACA,wBAAA8oB,CAAyBhzP,GACrB6rP,EAAQ7rP,EAAS2xP,QAAS,kBAC1B9F,EAAoC,qBAArB7rP,EAAS2xP,QAAyB,kBACjD9F,EAAyC,qBAA1B7rP,EAAS6yP,aAA8B,kBACtD,MAAMI,EAAY,cAAejzP,GAA0C,qBAAvBA,EAASizP,UACvD7uQ,OAAO4b,EAASizP,WAChBhD,EAAgBjwP,EAAS2xP,SAC/BnwQ,KAAK0xQ,0BAA0BlzP,EAAS2xP,QAAS3xP,EAAS6yP,aAAcI,EAC5E,CACA,iBAAAE,CAAkBxB,GACd9F,EAA2B,IAAnB8F,EAAQ32R,OAAc,kBAC9B,MAAMi4R,EAAYhD,EAAgB0B,GAClCnwQ,KAAK0xQ,0BAA0BvB,EAAS,KAAMsB,EAClD,CACA,cAAMtkH,CAASgC,EAAMyiH,GAAe,GAChC,OAAKA,IAAgB5xQ,KAAKsxQ,aAAgBtxQ,KAAKuxQ,WAG/ClH,EAAQrqQ,KAAKqxQ,aAAcliH,EAAM,sBAC7BnvJ,KAAKqxQ,oBACCrxQ,KAAK6xQ,QAAQ1iH,EAAMnvJ,KAAKqxQ,cACvBrxQ,KAAKsxQ,aAET,MAPItxQ,KAAKsxQ,WAQpB,CACA,iBAAAQ,GACI9xQ,KAAKqxQ,aAAe,IACxB,CACA,aAAMQ,CAAQ1iH,EAAM4iH,GAChB,MAAM,YAAET,EAAW,aAAED,EAAY,UAAEI,SAxF3ChsI,eAA+B0pB,EAAMkiH,GACjC,MAAM7yP,QAAiBstP,EAA+B38G,EAAM,CAAC,GAAG1pB,UAC5D,MAAM5sI,GAAO,QAAY,CACrB,WAAc,gBACd,cAAiBw4Q,IAClB9tR,MAAM,IACH,aAAEyuR,EAAY,OAAE10Q,GAAW6xJ,EAAKv8I,OAChCmC,EAAMm3P,EAAgB/8G,EAAM6iH,EAAc,YAAkC,OAAO10Q,KACnF05H,QAAgBm4B,EAAK48G,wBAE3B,OADA/0I,EAAQ,gBAAgD,oCACjDk0I,EAAcpsP,OAAdosP,CAAsBn2P,EAAK,CAC9B7V,OAAQ,OACR83H,UACAn+H,QACF,IAGN,MAAO,CACHy4Q,YAAa9yP,EAASyzP,aACtBR,UAAWjzP,EAAS0zP,WACpBb,aAAc7yP,EAAS2zP,cAE/B,CAkE+DC,CAAgBjjH,EAAM4iH,GAC7E/xQ,KAAK0xQ,0BAA0BJ,EAAaD,EAAczuQ,OAAO6uQ,GACrE,CACA,yBAAAC,CAA0BJ,EAAaD,EAAcgB,GACjDryQ,KAAKqxQ,aAAeA,GAAgB,KACpCrxQ,KAAKsxQ,YAAcA,GAAe,KAClCtxQ,KAAK0oP,eAAiBx/P,KAAKD,MAAuB,IAAfopR,CACvC,CACA,eAAOC,CAAS1lM,EAASjmC,GACrB,MAAM,aAAE0qO,EAAY,YAAEC,EAAW,eAAE5oB,GAAmB/hN,EAChD4rO,EAAU,IAAInB,EAmBpB,OAlBIC,IACAhH,EAAgC,kBAAjBgH,EAA2B,iBAAqD,CAC3FzkM,YAEJ2lM,EAAQlB,aAAeA,GAEvBC,IACAjH,EAA+B,kBAAhBiH,EAA0B,iBAAqD,CAC1F1kM,YAEJ2lM,EAAQjB,YAAcA,GAEtB5oB,IACA2hB,EAAkC,kBAAnB3hB,EAA6B,iBAAqD,CAC7F97K,YAEJ2lM,EAAQ7pB,eAAiBA,GAEtB6pB,CACX,CACA,MAAAzxQ,GACI,MAAO,CACHuwQ,aAAcrxQ,KAAKqxQ,aACnBC,YAAatxQ,KAAKsxQ,YAClB5oB,eAAgB1oP,KAAK0oP,eAE7B,CACA,OAAA8pB,CAAQhD,GACJxvQ,KAAKsxQ,YAAc9B,EAAgB8B,YACnCtxQ,KAAKqxQ,aAAe7B,EAAgB6B,aACpCrxQ,KAAK0oP,eAAiB8mB,EAAgB9mB,cAC1C,CACA,MAAA+pB,GACI,OAAO14R,OAAO+lB,OAAO,IAAIsxQ,EAAmBpxQ,KAAKc,SACrD,CACA,eAAA4xQ,GACI,OAAOpI,EAAU,kBACrB,EAmBJ,SAASqI,EAAwBlvP,EAAWmpD,GACxCy9L,EAA6B,kBAAd5mP,GAA+C,qBAAdA,EAA2B,iBAAqD,CAAEmpD,WACtI,CACA,MAAMgmM,EACF,WAAA/wP,CAAY2F,GACR,IAAI,IAAEgB,EAAG,KAAE2mI,EAAI,gBAAEqgH,GAAoBhoP,EAAI0zO,GAAM,IAAAnb,QAAOv4N,EAAI,CAAC,MAAO,OAAQ,oBAE1ExnB,KAAK0wQ,WAAa,WAClB1wQ,KAAK6yQ,iBAAmB,IAAI7D,EAAiBhvQ,MAC7CA,KAAK8yQ,eAAiB,KACtB9yQ,KAAK+yQ,eAAiB,KACtB/yQ,KAAKwoB,IAAMA,EACXxoB,KAAKmvJ,KAAOA,EACZnvJ,KAAKwvQ,gBAAkBA,EACvBxvQ,KAAKsxQ,YAAc9B,EAAgB8B,YACnCtxQ,KAAK/T,YAAcivQ,EAAIjvQ,aAAe,KACtC+T,KAAK0L,MAAQwvP,EAAIxvP,OAAS,KAC1B1L,KAAKkxQ,cAAgBhW,EAAIgW,gBAAiB,EAC1ClxQ,KAAKqtQ,YAAcnS,EAAImS,aAAe,KACtCrtQ,KAAKgxQ,SAAW9V,EAAI8V,UAAY,KAChChxQ,KAAK4wQ,YAAc1V,EAAI0V,cAAe,EACtC5wQ,KAAK2rQ,SAAWzQ,EAAIyQ,UAAY,KAChC3rQ,KAAKywQ,aAAevV,EAAIuV,aAAe,IAAIvV,EAAIuV,cAAgB,GAC/DzwQ,KAAKhB,SAAW,IAAI2wQ,EAAazU,EAAI0U,gBAAah3Q,EAAWsiQ,EAAI2U,kBAAej3Q,EACpF,CACA,gBAAM82Q,CAAWkC,GACb,MAAMN,QAAoB3C,EAAqB3uQ,KAAMA,KAAKwvQ,gBAAgBriH,SAASntJ,KAAKmvJ,KAAMyiH,IAO9F,OANAvH,EAAQiH,EAAatxQ,KAAKmvJ,KAAM,kBAC5BnvJ,KAAKsxQ,cAAgBA,IACrBtxQ,KAAKsxQ,YAAcA,QACbtxQ,KAAKmvJ,KAAK6jH,sBAAsBhzQ,MACtCA,KAAKmvJ,KAAK8jH,0BAA0BjzQ,OAEjCsxQ,CACX,CACA,gBAAA4B,CAAiBtB,GACb,OAvfRnsI,eAAgC1mI,EAAM6yQ,GAAe,GACjD,MAAMuB,GAAe,QAAmBp0Q,GAClCupB,QAAc6qP,EAAazD,WAAWkC,GACtCjmP,EAAS6iP,EAAYlmP,GAC3B+hP,EAAQ1+O,GAAUA,EAAO5C,KAAO4C,EAAO3C,WAAa2C,EAAOjD,IAAKyqP,EAAahkH,KAAM,kBACnF,MAAMlmI,EAAsC,kBAApB0C,EAAO1C,SAAwB0C,EAAO1C,cAAWrwB,EACnEw6Q,EAA8B,OAAbnqP,QAAkC,IAAbA,OAAsB,EAASA,EAA2B,iBACtG,MAAO,CACH0C,SACArD,QACA+qP,SAAUhF,EAAyBE,EAA4B5iP,EAAO3C,YACtEsqP,aAAcjF,EAAyBE,EAA4B5iP,EAAOjD,MAC1EggO,eAAgB2lB,EAAyBE,EAA4B5iP,EAAO5C,MAC5EqqP,eAAgBA,GAAkB,KAClCG,oBAAkC,OAAbtqP,QAAkC,IAAbA,OAAsB,EAASA,EAAgC,wBAAM,KAEvH,CAueeiqP,CAAiBlzQ,KAAM4xQ,EAClC,CACA,MAAA4B,GACI,OA7OR/tI,eAAsB1mI,GAClB,MAAMo0Q,GAAe,QAAmBp0Q,SAClCmxQ,EAAqBiD,SAIrBA,EAAahkH,KAAK6jH,sBAAsBG,GAC9CA,EAAahkH,KAAK8jH,0BAA0BE,EAChD,CAqOeK,CAAOxzQ,KAClB,CACA,OAAAwyQ,CAAQzzQ,GACAiB,OAASjB,IAGbsrQ,EAAQrqQ,KAAKwoB,MAAQzpB,EAAKypB,IAAKxoB,KAAKmvJ,KAAM,kBAC1CnvJ,KAAK/T,YAAc8S,EAAK9S,YACxB+T,KAAKgxQ,SAAWjyQ,EAAKiyQ,SACrBhxQ,KAAK0L,MAAQ3M,EAAK2M,MAClB1L,KAAKkxQ,cAAgBnyQ,EAAKmyQ,cAC1BlxQ,KAAKqtQ,YAActuQ,EAAKsuQ,YACxBrtQ,KAAK4wQ,YAAc7xQ,EAAK6xQ,YACxB5wQ,KAAK2rQ,SAAW5sQ,EAAK4sQ,SACrB3rQ,KAAKywQ,aAAe1xQ,EAAK0xQ,aAAa3yR,KAAI21R,GAAa15R,OAAO+lB,OAAO,CAAC,EAAG2zQ,KACzEzzQ,KAAKhB,SAASixQ,MAAMlxQ,EAAKC,UACzBgB,KAAKwvQ,gBAAgBgD,QAAQzzQ,EAAKywQ,iBACtC,CACA,MAAAiD,CAAOtjH,GACH,MAAMukH,EAAU,IAAId,EAAS74R,OAAO+lB,OAAO/lB,OAAO+lB,OAAO,CAAC,EAAGE,MAAO,CAAEmvJ,OAAMqgH,gBAAiBxvQ,KAAKwvQ,gBAAgBiD,YAElH,OADAiB,EAAQ10Q,SAASixQ,MAAMjwQ,KAAKhB,UACrB00Q,CACX,CACA,SAAAC,CAAUxrP,GAENkiP,GAASrqQ,KAAK+yQ,eAAgB/yQ,KAAKmvJ,KAAM,kBACzCnvJ,KAAK+yQ,eAAiB5qP,EAClBnoB,KAAK8yQ,iBACL9yQ,KAAKqwQ,sBAAsBrwQ,KAAK8yQ,gBAChC9yQ,KAAK8yQ,eAAiB,KAE9B,CACA,qBAAAzC,CAAsBoD,GACdzzQ,KAAK+yQ,eACL/yQ,KAAK+yQ,eAAeU,GAIpBzzQ,KAAK8yQ,eAAiBW,CAE9B,CACA,sBAAAG,GACI5zQ,KAAK6yQ,iBAAiB1D,QAC1B,CACA,qBAAA0E,GACI7zQ,KAAK6yQ,iBAAiBxD,OAC1B,CACA,8BAAMyE,CAAyBt1P,EAAUg1P,GAAS,GAC9C,IAAIO,GAAkB,EAClBv1P,EAAS2xP,SACT3xP,EAAS2xP,UAAYnwQ,KAAKwvQ,gBAAgB8B,cAC1CtxQ,KAAKwvQ,gBAAgBgC,yBAAyBhzP,GAC9Cu1P,GAAkB,GAElBP,SACMtD,EAAqBlwQ,YAEzBA,KAAKmvJ,KAAK6jH,sBAAsBhzQ,MAClC+zQ,GACA/zQ,KAAKmvJ,KAAK8jH,0BAA0BjzQ,KAE5C,CACA,YAAM,GACF,IAAI,QAAqBA,KAAKmvJ,KAAKjlJ,KAC/B,OAAOiV,QAAQE,OAAO6qP,EAAgDlqQ,KAAKmvJ,OAE/E,MAAMghH,QAAgBnwQ,KAAK0vQ,aAK3B,aAJMf,EAAqB3uQ,KArpBnCylI,eAA6B0pB,EAAM/kJ,GAC/B,OAAOwhQ,EAAmBz8G,EAAM,OAA8B,sBAAqD/kJ,EACvH,CAmpByC4pQ,CAAch0Q,KAAKmvJ,KAAM,CAAEghH,aAC5DnwQ,KAAKwvQ,gBAAgBsC,oBAGd9xQ,KAAKmvJ,KAAK4/G,SACrB,CACA,MAAAjuQ,GACI,OAAO/mB,OAAO+lB,OAAO/lB,OAAO+lB,OAAO,CAAE0oB,IAAKxoB,KAAKwoB,IAAK9c,MAAO1L,KAAK0L,YAAS9S,EAAWs4Q,cAAelxQ,KAAKkxQ,cAAejlR,YAAa+T,KAAK/T,kBAAe2M,EAAWg4Q,YAAa5wQ,KAAK4wQ,YAAaI,SAAUhxQ,KAAKgxQ,eAAYp4Q,EAAWy0Q,YAAartQ,KAAKqtQ,kBAAez0Q,EAAW+yQ,SAAU3rQ,KAAK2rQ,eAAY/yQ,EAAW63Q,aAAczwQ,KAAKywQ,aAAa3yR,KAAI21R,GAAa15R,OAAO+lB,OAAO,CAAC,EAAG2zQ,KAAajE,gBAAiBxvQ,KAAKwvQ,gBAAgB1uQ,SAG5amzQ,iBAAkBj0Q,KAAKi0Q,kBAAoBj0Q,KAAKhB,SAAS8B,UAAW,CAEpExD,OAAQ0C,KAAKmvJ,KAAKv8I,OAAOtV,OAAQsvE,QAAS5sE,KAAKmvJ,KAAKvqK,MAC5D,CACA,gBAAIysR,GACA,OAAOrxQ,KAAKwvQ,gBAAgB6B,cAAgB,EAChD,CACA,gBAAO6C,CAAU/kH,EAAMxoH,GACnB,IAAInf,EAAIC,EAAIqO,EAAIuC,EAAIE,EAAIE,EAAIE,EAAIE,EAChC,MAAM5sC,EAA4C,QAA7Bu7B,EAAKmf,EAAO16C,mBAAgC,IAAPu7B,EAAgBA,OAAK5uB,EACzE8S,EAAgC,QAAvB+b,EAAKkf,EAAOj7B,aAA0B,IAAP+b,EAAgBA,OAAK7uB,EAC7Dy0Q,EAA4C,QAA7Bv3O,EAAK6Q,EAAO0mO,mBAAgC,IAAPv3O,EAAgBA,OAAKl9B,EACzEo4Q,EAAsC,QAA1B34O,EAAKsO,EAAOqqO,gBAA6B,IAAP34O,EAAgBA,OAAKz/B,EACnE+yQ,EAAsC,QAA1BpzO,EAAKoO,EAAOglO,gBAA6B,IAAPpzO,EAAgBA,OAAK3/B,EACnEq7Q,EAAsD,QAAlCx7O,EAAKkO,EAAOstO,wBAAqC,IAAPx7O,EAAgBA,OAAK7/B,EACnFg3Q,EAAwC,QAA3Bj3O,EAAKgO,EAAOipO,iBAA8B,IAAPj3O,EAAgBA,OAAK//B,EACrEi3Q,EAA4C,QAA7Bh3O,EAAK8N,EAAOkpO,mBAAgC,IAAPh3O,EAAgBA,OAAKjgC,GACzE,IAAE4vB,EAAG,cAAE0oP,EAAa,YAAEN,EAAW,aAAEH,EAAcjB,gBAAiB2E,GAA4BxtO,EACpG0jO,EAAQ7hP,GAAO2rP,EAAyBhlH,EAAM,kBAC9C,MAAMqgH,EAAkB4B,EAAgBkB,SAAStyQ,KAAKpb,KAAMuvR,GAC5D9J,EAAuB,kBAAR7hP,EAAkB2mI,EAAM,kBACvCwjH,EAAwB1mR,EAAakjK,EAAKvqK,MAC1C+tR,EAAwBjnQ,EAAOyjJ,EAAKvqK,MACpCylR,EAAiC,mBAAlB6G,EAA6B/hH,EAAM,kBAClDk7G,EAA+B,mBAAhBuG,EAA2BzhH,EAAM,kBAChDwjH,EAAwBtF,EAAal+G,EAAKvqK,MAC1C+tR,EAAwB3B,EAAU7hH,EAAKvqK,MACvC+tR,EAAwBhH,EAAUx8G,EAAKvqK,MACvC+tR,EAAwBsB,EAAkB9kH,EAAKvqK,MAC/C+tR,EAAwB/C,EAAWzgH,EAAKvqK,MACxC+tR,EAAwB9C,EAAa1gH,EAAKvqK,MAC1C,MAAMma,EAAO,IAAI6zQ,EAAS,CACtBpqP,MACA2mI,OACAzjJ,QACAwlQ,gBACAjlR,cACA2kR,cACAI,WACA3D,cACA1B,WACA6D,kBACAI,YACAC,gBAQJ,OANIY,GAAgB72R,MAAMC,QAAQ42R,KAC9B1xQ,EAAK0xQ,aAAeA,EAAa3yR,KAAI21R,GAAa15R,OAAO+lB,OAAO,CAAC,EAAG2zQ,MAEpEQ,IACAl1Q,EAAKk1Q,iBAAmBA,GAErBl1Q,CACX,CAMA,iCAAaq1Q,CAAqBjlH,EAAMklH,EAAiBzD,GAAc,GACnE,MAAMpB,EAAkB,IAAI4B,EAC5B5B,EAAgBgC,yBAAyB6C,GAEzC,MAAMt1Q,EAAO,IAAI6zQ,EAAS,CACtBpqP,IAAK6rP,EAAgBtD,QACrB5hH,OACAqgH,kBACAoB,gBAIJ,aADMV,EAAqBnxQ,GACpBA,CACX,CAMA,wCAAau1Q,CAA4BnlH,EAAM3wI,EAAU2xP,GACrD,MAAMC,EAAc5xP,EAASqnJ,MAAM,GACnCwkG,OAAgCzxQ,IAAxBw3Q,EAAYW,QAAuB,kBAC3C,MAAMN,OAAgD73Q,IAAjCw3Q,EAAYG,iBAC3BC,EAAoBJ,EAAYG,kBAChC,GACAK,IAAgBR,EAAY1kQ,OAAS0kQ,EAAYU,iBAAoC,OAAjBL,QAA0C,IAAjBA,OAA0B,EAASA,EAAaj3R,QAC7Ig2R,EAAkB,IAAI4B,EAC5B5B,EAAgBmC,kBAAkBxB,GAElC,MAAMpxQ,EAAO,IAAI6zQ,EAAS,CACtBpqP,IAAK4nP,EAAYW,QACjB5hH,OACAqgH,kBACAoB,gBAGEjoQ,EAAU,CACZ6f,IAAK4nP,EAAYW,QACjB9kR,YAAamkR,EAAYnkR,aAAe,KACxC+kR,SAAUZ,EAAYa,UAAY,KAClCvlQ,MAAO0kQ,EAAY1kQ,OAAS,KAC5BwlQ,cAAed,EAAYc,gBAAiB,EAC5C7D,YAAa+C,EAAY/C,aAAe,KACxC1B,SAAUyE,EAAYzE,UAAY,KAClC8E,eACAzxQ,SAAU,IAAI2wQ,EAAaS,EAAYR,UAAWQ,EAAYP,aAC9De,cAAeR,EAAY1kQ,OAAS0kQ,EAAYU,iBACzB,OAAjBL,QAA0C,IAAjBA,OAA0B,EAASA,EAAaj3R,SAGnF,OADAO,OAAO+lB,OAAOf,EAAM4J,GACb5J,CACX,EAmBJ,MAAMw1Q,EAAgB,IAAI5jP,IAC1B,SAAS6jP,GAAaC,GAClBjK,EAAYiK,aAAerkP,SAAU,+BACrC,IAAIuyG,EAAW4xI,EAAczrQ,IAAI2rQ,GACjC,OAAI9xI,GACA6nI,EAAY7nI,aAAoB8xI,EAAK,kDAC9B9xI,IAEXA,EAAW,IAAI8xI,EACfF,EAAc9jP,IAAIgkP,EAAK9xI,GAChBA,EACX,CAkBA,MAAM+xI,GACF,WAAA7yP,GACI7hB,KAAKhiB,KAAO,OACZgiB,KAAK4X,QAAU,CAAC,CACpB,CACA,kBAAM+8P,GACF,OAAO,CACX,CACA,UAAMC,CAAK16R,EAAKE,GACZ4lB,KAAK4X,QAAQ19B,GAAOE,CACxB,CACA,UAAMy6R,CAAK36R,GACP,MAAME,EAAQ4lB,KAAK4X,QAAQ19B,GAC3B,YAAiB0e,IAAVxe,EAAsB,KAAOA,CACxC,CACA,aAAM06R,CAAQ56R,UACH8lB,KAAK4X,QAAQ19B,EACxB,CACA,YAAA66R,CAAar7P,EAAMs7P,GAGnB,CACA,eAAAC,CAAgBv7P,EAAMs7P,GAGtB,EAEJN,GAAoB12R,KAAO,OAM3B,MAAMk3R,GAAsBR,GAkB5B,SAASS,GAAoBj7R,EAAKojB,EAAQsvE,GACtC,MAAO,YAA6C1yF,KAAOojB,KAAUsvE,GACzE,CACA,MAAMwoM,GACF,WAAAvzP,CAAYwzP,EAAalmH,EAAMmmH,GAC3Bt1Q,KAAKq1Q,YAAcA,EACnBr1Q,KAAKmvJ,KAAOA,EACZnvJ,KAAKs1Q,QAAUA,EACf,MAAM,OAAE1iQ,EAAM,KAAEhuB,GAASob,KAAKmvJ,KAC9BnvJ,KAAKu1Q,YAAcJ,GAAoBn1Q,KAAKs1Q,QAAS1iQ,EAAOtV,OAAQ1Y,GACpEob,KAAKw1Q,mBAAqBL,GAAoB,cAA8CviQ,EAAOtV,OAAQ1Y,GAC3Gob,KAAKy1Q,kBAAoBtmH,EAAKumH,gBAAgBh1Q,KAAKyuJ,GACnDnvJ,KAAKq1Q,YAAYN,aAAa/0Q,KAAKu1Q,YAAav1Q,KAAKy1Q,kBACzD,CACA,cAAAE,CAAe52Q,GACX,OAAOiB,KAAKq1Q,YAAYT,KAAK50Q,KAAKu1Q,YAAax2Q,EAAK+B,SACxD,CACA,oBAAM80Q,GACF,MAAMC,QAAa71Q,KAAKq1Q,YAAYR,KAAK70Q,KAAKu1Q,aAC9C,OAAOM,EAAOjD,EAASsB,UAAUl0Q,KAAKmvJ,KAAM0mH,GAAQ,IACxD,CACA,iBAAAC,GACI,OAAO91Q,KAAKq1Q,YAAYP,QAAQ90Q,KAAKu1Q,YACzC,CACA,0BAAAQ,GACI,OAAO/1Q,KAAKq1Q,YAAYT,KAAK50Q,KAAKw1Q,mBAAoBx1Q,KAAKq1Q,YAAYr3R,KAC3E,CACA,oBAAMg4R,CAAeC,GACjB,GAAIj2Q,KAAKq1Q,cAAgBY,EACrB,OAEJ,MAAMnH,QAAoB9uQ,KAAK41Q,iBAG/B,aAFM51Q,KAAK81Q,oBACX91Q,KAAKq1Q,YAAcY,EACfnH,EACO9uQ,KAAK21Q,eAAe7G,QAD/B,CAGJ,CACA,SACI9uQ,KAAKq1Q,YAAYJ,gBAAgBj1Q,KAAKu1Q,YAAav1Q,KAAKy1Q,kBAC5D,CACA,mBAAa7oQ,CAAOuiJ,EAAM+mH,EAAsBZ,EAAU,YACtD,IAAKY,EAAqB18R,OACtB,OAAO,IAAI47R,GAAuBZ,GAAaU,IAAsB/lH,EAAMmmH,GAG/E,MAAMa,SAA+Bh3P,QAAQivG,IAAI8nJ,EAAqBp4R,KAAI2nJ,MAAO4vI,IAC7E,SAAUA,EAAYV,eAClB,OAAOU,CAEK,MACfrxQ,QAAOqxQ,GAAeA,IAE3B,IAAIe,EAAsBD,EAAsB,IAC5C3B,GAAaU,IACjB,MAAMh7R,EAAMi7R,GAAoBG,EAASnmH,EAAKv8I,OAAOtV,OAAQ6xJ,EAAKvqK,MAGlE,IAAIyxR,EAAgB,KAIpB,IAAK,MAAMhB,KAAea,EACtB,IACI,MAAML,QAAaR,EAAYR,KAAK36R,GACpC,GAAI27R,EAAM,CACN,MAAM92Q,EAAO6zQ,EAASsB,UAAU/kH,EAAM0mH,GAClCR,IAAgBe,IAChBC,EAAgBt3Q,GAEpBq3Q,EAAsBf,EACtB,KACJ,CACJ,CACA,MAAO7tP,GAAM,CAIjB,MAAM8uP,EAAqBH,EAAsBnyQ,QAAO1E,GAAKA,EAAEi3Q,wBAE/D,OAAKH,EAAoBG,uBACpBD,EAAmB98R,QAGxB48R,EAAsBE,EAAmB,GACrCD,SAGMD,EAAoBxB,KAAK16R,EAAKm8R,EAAcv1Q,gBAIhDqe,QAAQivG,IAAI8nJ,EAAqBp4R,KAAI2nJ,MAAO4vI,IAC9C,GAAIA,IAAgBe,EAChB,UACUf,EAAYP,QAAQ56R,EAC9B,CACA,MAAOstC,GAAM,CACjB,KAEG,IAAI4tP,GAAuBgB,EAAqBjnH,EAAMmmH,IAlBlD,IAAIF,GAAuBgB,EAAqBjnH,EAAMmmH,EAmBrE,EAsBJ,SAASkB,GAAgBlnQ,GACrB,MAAM2a,EAAK3a,EAAU7I,cACrB,GAAIwjB,EAAGhwC,SAAS,WAAagwC,EAAGhwC,SAAS,SAAWgwC,EAAGhwC,SAAS,UAC5D,MAAO,QAEN,GAAIw8R,GAAYxsP,GAEjB,MAAO,WAEN,GAAIA,EAAGhwC,SAAS,SAAWgwC,EAAGhwC,SAAS,YACxC,MAAO,KAEN,GAAIgwC,EAAGhwC,SAAS,SACjB,MAAO,OAEN,GAAIy8R,GAAWzsP,GAChB,MAAO,UAEN,GAAIA,EAAGhwC,SAAS,SACjB,MAAO,OAEN,GAAI08R,GAAc1sP,GAEnB,MAAO,aAEN,GAAI2sP,GAAS3sP,GAEd,MAAO,QAEN,GAAI4sP,GAAU5sP,GACf,MAAO,SAEN,IAAKA,EAAGhwC,SAAS,YAAc68R,GAAa7sP,MAC5CA,EAAGhwC,SAAS,SACb,MAAO,SAEN,GAAI88R,GAAW9sP,GAEhB,MAAO,UAEN,CAED,MAAM25C,EAAK,kCACLzrE,EAAUmX,EAAU/L,MAAMqgE,GAChC,GAA2E,KAA1D,OAAZzrE,QAAgC,IAAZA,OAAqB,EAASA,EAAQ3e,QAC3D,OAAO2e,EAAQ,EAEvB,CACA,MAAO,OACX,CACA,SAASu+Q,GAAWzsP,GAAK,WACrB,MAAO,aAAa7qB,KAAK6qB,EAC7B,CACA,SAAS4sP,GAAUvnQ,GAAY,WAC3B,MAAM2a,EAAK3a,EAAU7I,cACrB,OAAQwjB,EAAGhwC,SAAS,aACfgwC,EAAGhwC,SAAS,aACZgwC,EAAGhwC,SAAS,YACZgwC,EAAGhwC,SAAS,UACrB,CACA,SAAS68R,GAAa7sP,GAAK,WACvB,MAAO,WAAW7qB,KAAK6qB,EAC3B,CACA,SAASwsP,GAAYxsP,GAAK,WACtB,MAAO,YAAY7qB,KAAK6qB,EAC5B,CACA,SAAS8sP,GAAW9sP,GAAK,WACrB,MAAO,WAAW7qB,KAAK6qB,EAC3B,CACA,SAAS0sP,GAAc1sP,GAAK,WACxB,MAAO,cAAc7qB,KAAK6qB,EAC9B,CACA,SAAS2sP,GAAS3sP,GAAK,WACnB,MAAO,SAAS7qB,KAAK6qB,EACzB,CACA,SAAS+sP,GAAO/sP,GAAK,WACjB,MAAQ,oBAAoB7qB,KAAK6qB,IAC5B,aAAa7qB,KAAK6qB,IAAO,UAAU7qB,KAAK6qB,EACjD,CAYA,SAASgtP,GAAiBhtP,GAAK,WAE3B,OAAQ+sP,GAAO/sP,IACX8sP,GAAW9sP,IACX2sP,GAAS3sP,IACT0sP,GAAc1sP,IACd,iBAAiB7qB,KAAK6qB,IACtBwsP,GAAYxsP,EACpB,CAqBA,SAASitP,GAAkBC,EAAgBC,EAAa,IACpD,IAAIC,EACJ,OAAQF,GACJ,IAAK,UAEDE,EAAmBb,IAAgB,WACnC,MACJ,IAAK,SAIDa,EAAmB,GAAGb,IAAgB,cAAYW,IAClD,MACJ,QACIE,EAAmBF,EAE3B,MAAMG,EAAqBF,EAAW59R,OAChC49R,EAAWx4Q,KAAK,KAChB,mBACN,MAAO,GAAGy4Q,YAAgE,QAAeC,GAC7F,CAkBA,MAAMC,GACF,WAAA11P,CAAYstI,GACRnvJ,KAAKmvJ,KAAOA,EACZnvJ,KAAKo1H,MAAQ,EACjB,CACA,YAAAoiJ,CAAarvP,EAAUsvP,GAGnB,MAAMC,EAAmB34Q,GAAS,IAAIogB,SAAQ,CAACC,EAASC,KACpD,IAIID,EAHe+I,EAASppB,GAI5B,CACA,MAAOzkB,GAEH+kC,EAAO/kC,EACX,KAGJo9R,EAAgBD,QAAUA,EAC1Bz3Q,KAAKo1H,MAAM/5I,KAAKq8R,GAChB,MAAMh2R,EAAQse,KAAKo1H,MAAM57I,OAAS,EAClC,MAAO,KAGHwmB,KAAKo1H,MAAM1zI,GAAS,IAAMy9B,QAAQC,SAAS,CAEnD,CACA,mBAAMu4P,CAAcC,GAChB,GAAI53Q,KAAKmvJ,KAAK2/G,cAAgB8I,EAC1B,OAIJ,MAAMC,EAAe,GACrB,IACI,IAAK,MAAMC,KAAuB93Q,KAAKo1H,YAC7B0iJ,EAAoBF,GAEtBE,EAAoBL,SACpBI,EAAax8R,KAAKy8R,EAAoBL,QAGlD,CACA,MAAOn9R,GAGHu9R,EAAahyO,UACb,IAAK,MAAM4xO,KAAWI,EAClB,IACIJ,GACJ,CACA,MAAOnsP,GAEP,CAEJ,MAAMtrB,KAAKmvJ,KAAKi7G,cAAcx9P,OAAO,gBAAmD,CACpFmrQ,gBAAuB,OAANz9R,QAAoB,IAANA,OAAe,EAASA,EAAEuO,SAEjE,CACJ,EAqDJ,MAAMmvR,GACF,WAAAn2P,CAAYrD,GACR,IAAIgJ,EAAIC,EAAIqO,EAAIuC,EAEhB,MAAM4/O,EAAkBz5P,EAAS05P,sBACjCl4Q,KAAKk4Q,sBAAwB,CAAC,EAE9Bl4Q,KAAKk4Q,sBAAsBC,kBACsB,QAA5C3wP,EAAKywP,EAAgBE,yBAAsC,IAAP3wP,EAAgBA,EAd7C,EAexBywP,EAAgBG,oBAChBp4Q,KAAKk4Q,sBAAsBE,kBACvBH,EAAgBG,wBAE2Bx/Q,IAA/Cq/Q,EAAgBI,6BAChBr4Q,KAAKk4Q,sBAAsBI,wBACvBL,EAAgBI,iCAE2Bz/Q,IAA/Cq/Q,EAAgBM,6BAChBv4Q,KAAKk4Q,sBAAsBM,wBACvBP,EAAgBM,iCAEyB3/Q,IAA7Cq/Q,EAAgBQ,2BAChBz4Q,KAAKk4Q,sBAAsBO,yBACvBR,EAAgBQ,+BAEiC7/Q,IAArDq/Q,EAAgBS,mCAChB14Q,KAAKk4Q,sBAAsBQ,iCACvBT,EAAgBS,kCAExB14Q,KAAKguQ,iBAAmBxvP,EAASwvP,iBACH,kCAA1BhuQ,KAAKguQ,mBACLhuQ,KAAKguQ,iBAAmB,OAG5BhuQ,KAAK24Q,iCAC4G,QAA5G7iP,EAA0D,QAApDrO,EAAKjJ,EAASm6P,wCAAqD,IAAPlxP,OAAgB,EAASA,EAAG7oB,KAAK,WAAwB,IAAPk3B,EAAgBA,EAAK,GAC9I91B,KAAK44Q,qBAAgE,QAAxCvgP,EAAK7Z,EAASo6P,4BAAyC,IAAPvgP,GAAgBA,EAC7Fr4B,KAAK64Q,cAAgBr6P,EAASq6P,aAClC,CACA,gBAAAC,CAAiB75E,GACb,IAAIz3K,EAAIC,EAAIqO,EAAIuC,EAAIE,EAAIE,EACxB,MAAMx1C,EAAS,CACXq2D,SAAS,EACTy/N,eAAgB/4Q,MAYpB,OATAA,KAAKg5Q,8BAA8B/5E,EAAUh8M,GAC7C+c,KAAKi5Q,iCAAiCh6E,EAAUh8M,GAEhDA,EAAOq2D,UAAYr2D,EAAOq2D,QAAmD,QAAxC9xB,EAAKvkC,EAAOi2R,8BAA2C,IAAP1xP,GAAgBA,GACrGvkC,EAAOq2D,UAAYr2D,EAAOq2D,QAAmD,QAAxC7xB,EAAKxkC,EAAOk2R,8BAA2C,IAAP1xP,GAAgBA,GACrGxkC,EAAOq2D,UAAYr2D,EAAOq2D,QAAoD,QAAzCxjB,EAAK7yC,EAAOq1R,+BAA4C,IAAPxiP,GAAgBA,GACtG7yC,EAAOq2D,UAAYr2D,EAAOq2D,QAAoD,QAAzCjhB,EAAKp1C,EAAOu1R,+BAA4C,IAAPngP,GAAgBA,GACtGp1C,EAAOq2D,UAAYr2D,EAAOq2D,QAAqD,QAA1C/gB,EAAKt1C,EAAOw1R,gCAA6C,IAAPlgP,GAAgBA,GACvGt1C,EAAOq2D,UAAYr2D,EAAOq2D,QAA6D,QAAlD7gB,EAAKx1C,EAAOy1R,wCAAqD,IAAPjgP,GAAgBA,GACxGx1C,CACX,CAOA,6BAAA+1R,CAA8B/5E,EAAUh8M,GACpC,MAAMk1R,EAAoBn4Q,KAAKk4Q,sBAAsBC,kBAC/CC,EAAoBp4Q,KAAKk4Q,sBAAsBE,kBACjDD,IACAl1R,EAAOi2R,uBAAyBj6E,EAASzlN,QAAU2+R,GAEnDC,IACAn1R,EAAOk2R,uBAAyBl6E,EAASzlN,QAAU4+R,EAE3D,CAOA,gCAAAa,CAAiCh6E,EAAUh8M,GAOvC,IAAIm2R,EALJp5Q,KAAKq5Q,uCAAuCp2R,GACV,GACA,GACF,GACQ,GAExC,IAAK,IAAI1J,EAAI,EAAGA,EAAI0lN,EAASzlN,OAAQD,IACjC6/R,EAAen6E,EAAS57M,OAAO9J,GAC/BymB,KAAKq5Q,uCAAuCp2R,EACVm2R,GAAgB,KAC9CA,GAAgB,IACcA,GAAgB,KAC9CA,GAAgB,IACYA,GAAgB,KAC5CA,GAAgB,IACoBp5Q,KAAK24Q,iCAAiC1+R,SAASm/R,GAE/F,CAYA,sCAAAC,CAAuCp2R,EAAQo1R,EAA4BE,EAA4BE,EAA0BC,GACzH14Q,KAAKk4Q,sBAAsBI,0BAC3Br1R,EAAOq1R,0BAA4Br1R,EAAOq1R,wBAA0BD,IAEpEr4Q,KAAKk4Q,sBAAsBM,0BAC3Bv1R,EAAOu1R,0BAA4Bv1R,EAAOu1R,wBAA0BD,IAEpEv4Q,KAAKk4Q,sBAAsBO,2BAC3Bx1R,EAAOw1R,2BAA6Bx1R,EAAOw1R,yBAA2BA,IAEtEz4Q,KAAKk4Q,sBAAsBQ,mCAC3Bz1R,EAAOy1R,mCAAqCz1R,EAAOy1R,iCAAmCA,GAE9F,EAmBJ,MAAMY,GACF,WAAAz3P,CAAY3X,EAAKqvQ,EAA0BC,EAAyB5mQ,GAChE5S,KAAKkK,IAAMA,EACXlK,KAAKu5Q,yBAA2BA,EAChCv5Q,KAAKw5Q,wBAA0BA,EAC/Bx5Q,KAAK4S,OAASA,EACd5S,KAAK8uQ,YAAc,KACnB9uQ,KAAKy5Q,eAAiB,KACtBz5Q,KAAK05Q,WAAav6P,QAAQC,UAC1Bpf,KAAK25Q,sBAAwB,IAAIC,GAAa55Q,MAC9CA,KAAK65Q,oBAAsB,IAAID,GAAa55Q,MAC5CA,KAAK85Q,iBAAmB,IAAIvC,GAAoBv3Q,MAChDA,KAAK+5Q,aAAe,KACpB/5Q,KAAKg6Q,2BAA4B,EACjCh6Q,KAAKi6Q,wCAA0C,EAG/Cj6Q,KAAKqsQ,kBAAmB,EACxBrsQ,KAAKk6Q,gBAAiB,EACtBl6Q,KAAKm6Q,UAAW,EAChBn6Q,KAAKo6Q,uBAAyB,KAC9Bp6Q,KAAKq6Q,uBAAyB,KAC9Br6Q,KAAKoqQ,cAAgBX,EACrBzpQ,KAAKs6Q,sBAAwB,KAC7Bt6Q,KAAKu6Q,wBAA0B,CAAC,EAChCv6Q,KAAKw6Q,uBAAyB,KAC9Bx6Q,KAAKy6Q,wBAA0B,CAAC,EAIhCz6Q,KAAK06Q,qBAAkB9hR,EACvBoH,KAAKgsQ,aAAe,KACpBhsQ,KAAK2rQ,SAAW,KAChB3rQ,KAAK6/P,SAAW,CAAE8a,mCAAmC,GACrD36Q,KAAKo3Q,WAAa,GAClBp3Q,KAAKpb,KAAOslB,EAAItlB,KAChBob,KAAK46Q,cAAgBhoQ,EAAOioQ,gBAChC,CACA,0BAAAC,CAA2B5E,EAAsB6E,GAiC7C,OAhCIA,IACA/6Q,KAAKq6Q,uBAAyB7F,GAAauG,IAI/C/6Q,KAAKo6Q,uBAAyBp6Q,KAAKo1H,OAAMqQ,UACrC,IAAIj+G,EAAIC,EACR,IAAIznB,KAAKm6Q,WAGTn6Q,KAAKg7Q,yBAA2B5F,GAAuBxoQ,OAAO5M,KAAMk2Q,IAChEl2Q,KAAKm6Q,UAAT,CAKA,GAA2C,QAAtC3yP,EAAKxnB,KAAKq6Q,8BAA2C,IAAP7yP,OAAgB,EAASA,EAAGyzP,uBAE3E,UACUj7Q,KAAKq6Q,uBAAuBa,YAAYl7Q,KAClD,CACA,MAAO1lB,GAEP,OAEE0lB,KAAKm7Q,sBAAsBJ,GACjC/6Q,KAAK06Q,iBAA+C,QAA3BjzP,EAAKznB,KAAK8uQ,mBAAgC,IAAPrnP,OAAgB,EAASA,EAAGe,MAAQ,KAC5FxoB,KAAKm6Q,WAGTn6Q,KAAKk6Q,gBAAiB,EAjBtB,CAiB0B,IAEvBl6Q,KAAKo6Q,sBAChB,CAIA,qBAAM1E,GACF,GAAI11Q,KAAKm6Q,SACL,OAEJ,MAAMp7Q,QAAaiB,KAAKo7Q,oBAAoBxF,iBAC5C,OAAK51Q,KAAK8uQ,aAAgB/vQ,EAKtBiB,KAAK8uQ,aAAe/vQ,GAAQiB,KAAK8uQ,YAAYtmP,MAAQzpB,EAAKypB,KAE1DxoB,KAAKq7Q,aAAa7I,QAAQzzQ,cAGpBiB,KAAK8uQ,YAAYY,yBAKrB1vQ,KAAKs7Q,mBAAmBv8Q,GAAqC,QAfnE,CAgBJ,CACA,sCAAMw8Q,CAAiCpL,GACnC,IACI,MAAM3xP,QAAiB4vP,EAAepuQ,KAAM,CAAEmwQ,YACxCpxQ,QAAa6zQ,EAAS0B,4BAA4Bt0Q,KAAMwe,EAAU2xP,SAClEnwQ,KAAKw7Q,uBAAuBz8Q,EACtC,CACA,MAAOkH,GACH7F,QAAQsN,KAAK,qEAAsEzH,SAC7EjG,KAAKw7Q,uBAAuB,KACtC,CACJ,CACA,2BAAML,CAAsBJ,GACxB,IAAIvzP,EACJ,IAAI,QAAqBxnB,KAAKkK,KAAM,CAChC,MAAMimQ,EAAUnwQ,KAAKkK,IAAI21P,SAAS4b,YAClC,OAAItL,EAGO,IAAIhxP,SAAQC,IACf9Q,YAAW,IAAMtO,KAAKu7Q,iCAAiCpL,GAAS9hQ,KAAK+Q,EAASA,IAAS,IAIpFpf,KAAKw7Q,uBAAuB,KAE3C,CAEA,MAAME,QAA8B17Q,KAAKo7Q,oBAAoBxF,iBAC7D,IAAI+F,EAAoBD,EACpBE,GAAyB,EAC7B,GAAIb,GAAyB/6Q,KAAK4S,OAAOipQ,WAAY,OAC3C77Q,KAAK87Q,sCACX,MAAMC,EAAmD,QAA5Bv0P,EAAKxnB,KAAK+5Q,oBAAiC,IAAPvyP,OAAgB,EAASA,EAAGysP,iBACvF+H,EAA0C,OAAtBL,QAAoD,IAAtBA,OAA+B,EAASA,EAAkB1H,iBAC5Gp2R,QAAemiB,KAAKi8Q,kBAAkBlB,GAKtCgB,GAAuBA,IAAwBC,KACrC,OAAXn+R,QAA8B,IAAXA,OAAoB,EAASA,EAAOkhB,QACxD48Q,EAAoB99R,EAAOkhB,KAC3B68Q,GAAyB,EAEjC,CAEA,IAAKD,EACD,OAAO37Q,KAAKw7Q,uBAAuB,MAEvC,IAAKG,EAAkB1H,iBAAkB,CAGrC,GAAI2H,EACA,UACU57Q,KAAK85Q,iBAAiBnC,cAAcgE,EAC9C,CACA,MAAOrhS,GACHqhS,EAAoBD,EAGpB17Q,KAAKq6Q,uBAAuB6B,wBAAwBl8Q,MAAM,IAAMmf,QAAQE,OAAO/kC,IACnF,CAEJ,OAAIqhS,EACO37Q,KAAKm8Q,+BAA+BR,GAGpC37Q,KAAKw7Q,uBAAuB,KAE3C,CAMA,OALAnR,EAAQrqQ,KAAKq6Q,uBAAwBr6Q,KAAM,wBACrCA,KAAK87Q,sCAIP97Q,KAAK+5Q,cACL/5Q,KAAK+5Q,aAAa9F,mBAAqB0H,EAAkB1H,iBAClDj0Q,KAAKw7Q,uBAAuBG,GAEhC37Q,KAAKm8Q,+BAA+BR,EAC/C,CACA,uBAAMM,CAAkBG,GAgBpB,IAAIv+R,EAAS,KACb,IAGIA,QAAemiB,KAAKq6Q,uBAAuBgC,oBAAoBr8Q,KAAMo8Q,GAAkB,EAC3F,CACA,MAAO9hS,SAGG0lB,KAAKs8Q,iBAAiB,KAChC,CACA,OAAOz+R,CACX,CACA,oCAAMs+R,CAA+Bp9Q,GACjC,UACUmxQ,EAAqBnxQ,EAC/B,CACA,MAAOzkB,GACH,GACI,iCADO,OAANA,QAAoB,IAANA,OAAe,EAASA,EAAE8xB,MAIzC,OAAOpM,KAAKw7Q,uBAAuB,KAE3C,CACA,OAAOx7Q,KAAKw7Q,uBAAuBz8Q,EACvC,CACA,iBAAAw9Q,GACIv8Q,KAAKgsQ,aAnoEb,WACI,GAAyB,qBAAd78P,UACP,OAAO,KAEX,MAAMqtQ,EAAoBrtQ,UAC1B,OAECqtQ,EAAkB5wM,WAAa4wM,EAAkB5wM,UAAU,IAGxD4wM,EAAkBlkQ,UAElB,IACR,CAsnE4BmkQ,EACxB,CACA,aAAM/V,GACF1mQ,KAAKm6Q,UAAW,CACpB,CACA,uBAAMuC,CAAkBC,GACpB,IAAI,QAAqB38Q,KAAKkK,KAC1B,OAAOiV,QAAQE,OAAO6qP,EAAgDlqQ,OAI1E,MAAMjB,EAAO49Q,GACP,QAAmBA,GACnB,KAIN,OAHI59Q,GACAsrQ,EAAQtrQ,EAAKowJ,KAAKv8I,OAAOtV,SAAW0C,KAAK4S,OAAOtV,OAAQ0C,KAAM,sBAE3DA,KAAKs7Q,mBAAmBv8Q,GAAQA,EAAK0zQ,OAAOzyQ,MACvD,CACA,wBAAMs7Q,CAAmBv8Q,EAAM69Q,GAA2B,GACtD,IAAI58Q,KAAKm6Q,SAST,OANIp7Q,GACAsrQ,EAAQrqQ,KAAK2rQ,WAAa5sQ,EAAK4sQ,SAAU3rQ,KAAM,sBAE9C48Q,SACK58Q,KAAK85Q,iBAAiBnC,cAAc54Q,GAEvCiB,KAAKo1H,OAAMqQ,gBACRzlI,KAAKw7Q,uBAAuBz8Q,GAClCiB,KAAK68Q,qBAAqB,GAElC,CACA,aAAM9N,GACF,OAAI,QAAqB/uQ,KAAKkK,KACnBiV,QAAQE,OAAO6qP,EAAgDlqQ,cAGpEA,KAAK85Q,iBAAiBnC,cAAc,OAEtC33Q,KAAK88Q,4BAA8B98Q,KAAKq6Q,+BAClCr6Q,KAAKs8Q,iBAAiB,MAIzBt8Q,KAAKs7Q,mBAAmB,MAAqC,GACxE,CACA,cAAAtF,CAAeX,GACX,OAAI,QAAqBr1Q,KAAKkK,KACnBiV,QAAQE,OAAO6qP,EAAgDlqQ,OAEnEA,KAAKo1H,OAAMqQ,gBACRzlI,KAAKo7Q,oBAAoBpF,eAAexB,GAAaa,GAAa,GAEhF,CACA,mBAAA0H,GACI,OAAqB,MAAjB/8Q,KAAK2rQ,SACE3rQ,KAAKs6Q,sBAGLt6Q,KAAKu6Q,wBAAwBv6Q,KAAK2rQ,SAEjD,CACA,sBAAMmN,CAAiB75E,GACdj/L,KAAKg9Q,oCACAh9Q,KAAKi9Q,wBAGf,MAAMlE,EAAiB/4Q,KAAKg9Q,6BAG5B,OAAIjE,EAAeF,gBACf74Q,KAAKi6Q,wCACE96P,QAAQE,OAAOrf,KAAKoqQ,cAAcx9P,OAAO,6CAA6G,CAAC,IAE3JmsQ,EAAeD,iBAAiB75E,EAC3C,CACA,0BAAA+9E,GACI,OAAsB,OAAlBh9Q,KAAK2rQ,SACE3rQ,KAAKw6Q,uBAGLx6Q,KAAKy6Q,wBAAwBz6Q,KAAK2rQ,SAEjD,CACA,2BAAMsR,GACF,MAAMz+P,QA/ddinH,eAAkC0pB,EAAM/kJ,EAAU,CAAC,GAC/C,OAAOwhQ,EAAmBz8G,EAAM,MAA4B,qBAAyDu8G,EAAmBv8G,EAAM/kJ,GAClJ,CA6d+B8yQ,CAAmBl9Q,MACpC+4Q,EAAiB,IAAIf,GAAmBx5P,GACxB,OAAlBxe,KAAK2rQ,SACL3rQ,KAAKw6Q,uBAAyBzB,EAG9B/4Q,KAAKy6Q,wBAAwBz6Q,KAAK2rQ,UAAYoN,CAEtD,CACA,eAAAoE,GACI,OAAOn9Q,KAAKo7Q,oBAAoB/F,YAAYr3R,IAChD,CACA,eAAAo/R,CAAgBnT,GACZjqQ,KAAKoqQ,cAAgB,IAAI,KAAa,OAAQ,WAAYH,IAC9D,CACA,kBAAAoT,CAAmBluP,EAAgBzrC,EAAO45R,GACtC,OAAOt9Q,KAAKu9Q,sBAAsBv9Q,KAAK25Q,sBAAuBxqP,EAAgBzrC,EAAO45R,EACzF,CACA,sBAAAE,CAAuBr1P,EAAUsvP,GAC7B,OAAOz3Q,KAAK85Q,iBAAiBtC,aAAarvP,EAAUsvP,EACxD,CACA,gBAAAgG,CAAiBtuP,EAAgBzrC,EAAO45R,GACpC,OAAOt9Q,KAAKu9Q,sBAAsBv9Q,KAAK65Q,oBAAqB1qP,EAAgBzrC,EAAO45R,EACvF,CACA,cAAAI,GACI,OAAO,IAAIv+P,SAAQ,CAACC,EAASC,KACzB,GAAIrf,KAAK8uQ,YACL1vP,QAEC,CACD,MAAMm3H,EAAcv2I,KAAKq9Q,oBAAmB,KACxC9mI,IACAn3H,GAAS,GACVC,EACP,IAER,CAIA,uBAAMs+P,CAAkBr1P,GACpB,GAAItoB,KAAK8uQ,YAAa,CAClB,MAEM1kQ,EAAU,CACZsmQ,WAAY,YACZkN,UAAW,eACXt1P,QACA6nP,cANkBnwQ,KAAK8uQ,YAAYY,cAQlB,MAAjB1vQ,KAAK2rQ,WACLvhQ,EAAQuhQ,SAAW3rQ,KAAK2rQ,gBA10CxClmI,eAA2B0pB,EAAM/kJ,GAC7B,OAAOwhQ,EAAmBz8G,EAAM,OAA8B,2BAAwDu8G,EAAmBv8G,EAAM/kJ,GACnJ,CA00CkBo9J,CAAYxnK,KAAMoK,EAC5B,CACJ,CACA,MAAAtJ,GACI,IAAI0mB,EACJ,MAAO,CACHlqB,OAAQ0C,KAAK4S,OAAOtV,OACpBu+Q,WAAY77Q,KAAK4S,OAAOipQ,WACxBjvM,QAAS5sE,KAAKpb,KACdkqR,YAA0C,QAA5BtnP,EAAKxnB,KAAKq7Q,oBAAiC,IAAP7zP,OAAgB,EAASA,EAAG1mB,SAEtF,CACA,sBAAMw7Q,CAAiBv9Q,EAAMg8Q,GACzB,MAAM8C,QAAwB79Q,KAAK87Q,oCAAoCf,GACvE,OAAgB,OAATh8Q,EACD8+Q,EAAgB/H,oBAChB+H,EAAgBlI,eAAe52Q,EACzC,CACA,yCAAM+8Q,CAAoCf,GACtC,IAAK/6Q,KAAK88Q,2BAA4B,CAClC,MAAMgB,EAAY/C,GAAyBvG,GAAauG,IACpD/6Q,KAAKq6Q,uBACThQ,EAAQyT,EAAU99Q,KAAM,kBACxBA,KAAK88Q,iCAAmC1H,GAAuBxoQ,OAAO5M,KAAM,CAACw0Q,GAAasJ,EAASC,uBAAwB,gBAC3H/9Q,KAAK+5Q,mBACK/5Q,KAAK88Q,2BAA2BlH,gBAC9C,CACA,OAAO51Q,KAAK88Q,0BAChB,CACA,wBAAMkB,CAAmBnyR,GACrB,IAAI27B,EAAIC,EAMR,OAHIznB,KAAKk6Q,sBACCl6Q,KAAKo1H,OAAMqQ,eAEa,QAA5Bj+G,EAAKxnB,KAAKq7Q,oBAAiC,IAAP7zP,OAAgB,EAASA,EAAGysP,oBAAsBpoR,EACjFmU,KAAKq7Q,cAEkB,QAA5B5zP,EAAKznB,KAAK+5Q,oBAAiC,IAAPtyP,OAAgB,EAASA,EAAGwsP,oBAAsBpoR,EACjFmU,KAAK+5Q,aAET,IACX,CACA,2BAAM/G,CAAsBj0Q,GACxB,GAAIA,IAASiB,KAAK8uQ,YACd,OAAO9uQ,KAAKo1H,OAAMqQ,SAAYzlI,KAAKw7Q,uBAAuBz8Q,IAElE,CAEA,yBAAAk0Q,CAA0Bl0Q,GAClBA,IAASiB,KAAK8uQ,aACd9uQ,KAAK68Q,qBAEb,CACA,IAAAnjQ,GACI,MAAO,GAAG1Z,KAAK4S,OAAOipQ,cAAc77Q,KAAK4S,OAAOtV,UAAU0C,KAAKpb,MACnE,CACA,sBAAAgvR,GACI5zQ,KAAKg6Q,2BAA4B,EAC7Bh6Q,KAAK8uQ,aACL9uQ,KAAKq7Q,aAAazH,wBAE1B,CACA,qBAAAC,GACI7zQ,KAAKg6Q,2BAA4B,EAC7Bh6Q,KAAK8uQ,aACL9uQ,KAAKq7Q,aAAaxH,uBAE1B,CAEA,gBAAIwH,GACA,OAAOr7Q,KAAK8uQ,WAChB,CACA,mBAAA+N,GACI,IAAIr1P,EAAIC,EACR,IAAKznB,KAAKk6Q,eACN,OAEJl6Q,KAAK65Q,oBAAoB9rQ,KAAK/N,KAAK8uQ,aACnC,MAAMmP,EAA4F,QAA9Ex2P,EAAiC,QAA3BD,EAAKxnB,KAAK8uQ,mBAAgC,IAAPtnP,OAAgB,EAASA,EAAGgB,WAAwB,IAAPf,EAAgBA,EAAK,KAC3HznB,KAAK06Q,kBAAoBuD,IACzBj+Q,KAAK06Q,gBAAkBuD,EACvBj+Q,KAAK25Q,sBAAsB5rQ,KAAK/N,KAAK8uQ,aAE7C,CACA,qBAAAyO,CAAsBziH,EAAc3rI,EAAgBzrC,EAAO45R,GACvD,GAAIt9Q,KAAKm6Q,SACL,MAAO,OAEX,MAAMrsQ,EAA+B,oBAAnBqhB,EACZA,EACAA,EAAephB,KAAKrN,KAAKyuB,GAC/B,IAAI+uP,GAAiB,EACrB,MAAMp9P,EAAU9gB,KAAKk6Q,eACf/6P,QAAQC,UACRpf,KAAKo6Q,uBAUX,GATA/P,EAAQvpP,EAAS9gB,KAAM,kBAGvB8gB,EAAQzS,MAAK,KACL6vQ,GAGJpwQ,EAAG9N,KAAK8uQ,YAAY,IAEM,oBAAnB3/O,EAA+B,CACtC,MAAMonH,EAAcukB,EAAaqjH,YAAYhvP,EAAgBzrC,EAAO45R,GACpE,MAAO,KACHY,GAAiB,EACjB3nI,GAAa,CAErB,CACK,CACD,MAAMA,EAAcukB,EAAaqjH,YAAYhvP,GAC7C,MAAO,KACH+uP,GAAiB,EACjB3nI,GAAa,CAErB,CACJ,CAMA,4BAAMilI,CAAuBz8Q,GACrBiB,KAAK8uQ,aAAe9uQ,KAAK8uQ,cAAgB/vQ,GACzCiB,KAAKq7Q,aAAaxH,wBAElB90Q,GAAQiB,KAAKg6Q,2BACbj7Q,EAAK60Q,yBAET5zQ,KAAK8uQ,YAAc/vQ,EACfA,QACMiB,KAAKo7Q,oBAAoBzF,eAAe52Q,SAGxCiB,KAAKo7Q,oBAAoBtF,mBAEvC,CACA,KAAA1gJ,CAAMl+F,GAIF,OADAl3B,KAAK05Q,WAAa15Q,KAAK05Q,WAAWrrQ,KAAK6oB,EAAQA,GACxCl3B,KAAK05Q,UAChB,CACA,uBAAI0B,GAEA,OADA/Q,EAAQrqQ,KAAKg7Q,mBAAoBh7Q,KAAM,kBAChCA,KAAKg7Q,kBAChB,CACA,aAAAoD,CAAcC,GACLA,IAAar+Q,KAAKo3Q,WAAWn9R,SAASokS,KAG3Cr+Q,KAAKo3Q,WAAW/7R,KAAKgjS,GAGrBr+Q,KAAKo3Q,WAAW73O,OAChBv/B,KAAK46Q,cAAgB1D,GAAkBl3Q,KAAK4S,OAAOukQ,eAAgBn3Q,KAAKs+Q,kBAC5E,CACA,cAAAA,GACI,OAAOt+Q,KAAKo3Q,UAChB,CACA,2BAAMrL,GACF,IAAIvkP,EAEJ,MAAMwvG,EAAU,CACZ,mBAAwDh3H,KAAK46Q,eAE7D56Q,KAAKkK,IAAI3pB,QAAQqkO,QACjB5tF,EAAQ,oBAAwDh3H,KAAKkK,IAAI3pB,QAAQqkO,OAGrF,MAAM25D,QAGE,QAHyB/2P,EAAKxnB,KAAKu5Q,yBACtClb,aAAa,CACd37N,UAAU,WACS,IAAPlb,OAAgB,EAASA,EAAG48O,uBACxCma,IACAvnJ,EAAQ,qBAA0DunJ,GAGtE,MAAMC,QAAsBx+Q,KAAKy+Q,oBAIjC,OAHID,IACAxnJ,EAAQ,uBAA+DwnJ,GAEpExnJ,CACX,CACA,uBAAMynJ,GACF,IAAIj3P,EACJ,MAAMk3P,QACqC,QADPl3P,EAAKxnB,KAAKw5Q,wBACzCnb,aAAa,CAAE37N,UAAU,WAA4B,IAAPlb,OAAgB,EAASA,EAAG2lI,YAQ/E,OAP4B,OAAxBuxH,QAAwD,IAAxBA,OAAiC,EAASA,EAAoBh7R,QAhnF1G,SAAkB4vF,KAAQj6F,GAClBqwR,EAAUjH,UAAY,KAAS6E,MAC/BoC,EAAUh8P,KAAK,SAAS,UAAiB4lE,OAAUj6F,EAE3D,CAinFYslS,CAAS,2CAA2CD,EAAoBh7R,SAE7C,OAAxBg7R,QAAwD,IAAxBA,OAAiC,EAASA,EAAoBp2P,KACzG,EAQJ,SAASs2P,GAAUzvH,GACf,OAAO,QAAmBA,EAC9B,CAEA,MAAMyqH,GACF,WAAA/3P,CAAYstI,GACRnvJ,KAAKmvJ,KAAOA,EACZnvJ,KAAKivB,SAAW,KAChBjvB,KAAKm+Q,aAAc,SAAgBlvP,GAAajvB,KAAKivB,SAAWA,GACpE,CACA,QAAIlhB,GAEA,OADAs8P,EAAQrqQ,KAAKivB,SAAUjvB,KAAKmvJ,KAAM,kBAC3BnvJ,KAAKivB,SAASlhB,KAAKrN,KAAKV,KAAKivB,SACxC,EAmBJ,IAAI4vP,GAAqB,CACrB,YAAMC,GACF,MAAM,IAAIp7Q,MAAM,kCACpB,EACAq7Q,kBAAmB,GACnBC,0BAA2B,GAC3BC,WAAY,IAKhB,SAASC,GAAQnqQ,GACb,OAAO8pQ,GAAmBC,OAAO/pQ,EACrC,CAUA,SAASoqQ,GAAsB58O,GAC3B,MAAO,KAAKA,IAAS5yB,KAAKq2B,MAAsB,IAAhBr2B,KAAKG,WACzC,CAmDA,MAAMsvQ,GACF,WAAAv9P,GACI7hB,KAAKytQ,WAAa,IAAI4R,EAC1B,CACA,KAAAn1B,CAAM/hO,GACFA,GACJ,CACA,OAAA49G,CAEAu5I,EAAU32N,GACN,OAAOxpC,QAAQC,QAAQ,QAC3B,CACA,MAAA4D,CAEAs9O,EAAYif,GACR,MAAO,EACX,EAEJ,MAAMF,GACF,KAAAn1B,CAAM/hO,GACFA,GACJ,CACA,OAAA49G,CAEAu5I,EAAU32N,GACN,OAAOxpC,QAAQC,QAAQ,QAC3B,CACA,MAAA4D,CAEAs9O,EAAYif,GACR,MAAO,EACX,EAkFJ,MACMC,GAAa,eACnB,MAAMC,GAMF,WAAA59P,CAAY69P,GAIR1/Q,KAAKhiB,KAZ8B,uBAanCgiB,KAAKmvJ,KAAOyvH,GAAUc,EAC1B,CAMA,YAAMC,CAAOzoP,EAAS,SAAU06O,GAAe,GAoC3C,SAASgO,EAAuBjS,EAASvuP,EAASC,GAC9C,MAAMmuP,EAAa/uR,OAAO+uR,WACtBD,EAAaC,GACbA,EAAWC,WAAWvjB,OAAM,KACxBsjB,EAAWC,WACN1nI,QAAQ4nI,EAAS,CAAEz2O,WACnB7oB,MAAKia,IACNlJ,EAAQkJ,EAAM,IAEbF,OAAM,KACPhJ,EAAQogQ,GAAW,GACrB,IAINngQ,EAAO3b,MAAM,0CAErB,CAEA,GAAI1D,KAAKmvJ,KAAK0wG,SAAS8a,kCAAmC,CAEtD,OADsB,IAAIyE,IACLr5I,QAAQ,UAAW,CAAE7uG,OAAQ,UACtD,CACA,OAAO,IAAI/X,SAAQ,CAACC,EAASC,MA1D7BomH,eAA+B0pB,GAC3B,IAAKyiH,EAAc,CACf,GAAqB,MAAjBziH,EAAKw8G,UAAkD,MAA9Bx8G,EAAKmrH,sBAC9B,OAAOnrH,EAAKmrH,sBAAsB3M,QAEtC,GAAqB,MAAjBx+G,EAAKw8G,eAC2C/yQ,IAAhDu2J,EAAKorH,wBAAwBprH,EAAKw8G,UAClC,OAAOx8G,EAAKorH,wBAAwBprH,EAAKw8G,UAAUgC,OAE3D,CACA,OAAO,IAAIxuP,SAAQsmH,MAAOrmH,EAASC,KAC/B8uP,EAAmBh/G,EAAM,CACrB0wH,WAAY,kBACZ5sQ,QAAS,yBAER5E,MAAKmQ,IACN,QAA8B5lB,IAA1B4lB,EAASqvP,aAGR,CACD,MAAMj7P,EAAS,IAAI86P,EAAgBlvP,GAOnC,OANqB,MAAjB2wI,EAAKw8G,SACLx8G,EAAKmrH,sBAAwB1nQ,EAG7Bu8I,EAAKorH,wBAAwBprH,EAAKw8G,UAAY/4P,EAE3CwM,EAAQxM,EAAO+6P,QAC1B,CAXItuP,EAAO,IAAI3b,MAAM,2CAWrB,IAEC0kB,OAAM1kC,IACP27B,EAAO37B,EAAM,GACf,GAEV,EAyBIo8R,CAAgB9/Q,KAAKmvJ,MAChB9gJ,MAAKs/P,IACN,IAAKiE,GAAgBrE,EAAa9uR,OAAO+uR,YACrCoS,EAAuBjS,EAASvuP,EAASC,OAExC,CACD,GAAsB,qBAAX5gC,OAEP,YADA4gC,EAAO,IAAI3b,MAAM,mDAGrB,IAAIqR,EArQb8pQ,GAAmBG,0BAsQS,IAAfjqQ,EAAIv7B,SACJu7B,GAAO44P,GAEXuR,GAAQnqQ,GACH1G,MAAK,KACNuxQ,EAAuBjS,EAASvuP,EAASC,EAAO,IAE/C+I,OAAM1kC,IACP27B,EAAO37B,EAAM,GAErB,KAEC0kC,OAAM1kC,IACP27B,EAAO37B,EAAM,GACf,GAEV,EAEJ+hJ,eAAes6I,GAAsB5wH,EAAM/kJ,EAAS8sB,EAAQ8oP,GAAgB,EAAOC,GAAc,GAC7F,MAAMC,EAAW,IAAIT,GAA4BtwH,GACjD,IAAIgxH,EACJ,GAAIF,EACAE,EAAkBX,QAGlB,IACIW,QAAwBD,EAASP,OAAOzoP,EAC5C,CACA,MAAOxzC,GACHy8R,QAAwBD,EAASP,OAAOzoP,GAAQ,EACpD,CAEJ,MAAMkpP,EAAarmS,OAAO+lB,OAAO,CAAC,EAAGsK,GACrC,GAAe,qBAAX8sB,GACW,iBAAXA,EAAoE,CACpE,GAAI,wBAAyBkpP,EAAY,CACrC,MAAM/S,EAAc+S,EAAWC,oBAAoBhT,YAC7CiT,EAAiBF,EAAWC,oBAAoBC,eACtDvmS,OAAO+lB,OAAOsgR,EAAY,CACtB,oBAAuB,CACnB/S,cACAiT,iBACAH,kBACA,WAAc,kBACd,iBAAoB,yBAGhC,MACK,GAAI,oBAAqBC,EAAY,CACtC,MAAME,EAAiBF,EAAWG,gBAAgBD,eAClDvmS,OAAO+lB,OAAOsgR,EAAY,CACtB,gBAAmB,CACfE,iBACAH,kBACA,WAAc,kBACd,iBAAoB,yBAGhC,CACA,OAAOC,CACX,CAWA,OAVKJ,EAIDjmS,OAAO+lB,OAAOsgR,EAAY,CAAE,YAAeD,IAH3CpmS,OAAO+lB,OAAOsgR,EAAY,CAAED,oBAKhCpmS,OAAO+lB,OAAOsgR,EAAY,CAAE,WAAc,oBAC1CrmS,OAAO+lB,OAAOsgR,EAAY,CACtB,iBAAoB,yBAEjBA,CACX,CACA36I,eAAe+6I,GAAoBC,EAAcr2Q,EAASs2Q,EAAYC,EAAcC,GAChF,IAAIp5P,EAAIC,EACR,GAA8B,4BAA1Bm5P,EAAyG,CACzG,GACgC,QAD3Bp5P,EAAKi5P,EACL1D,6BAA0C,IAAPv1P,OAAgB,EAASA,EAAGymP,kBAAkB,2BAAgF,CAClK,MAAM4S,QAA6Bd,GAAsBU,EAAcr2Q,EAASs2Q,EAA2B,eAAfA,GAC5F,OAAOC,EAAaF,EAAcI,EACtC,CAEI,OAAOF,EAAaF,EAAcr2Q,GAASge,OAAMq9G,MAAO/hJ,IACpD,GAAmB,iCAAfA,EAAM0oB,KAA0F,CAChGhM,QAAQI,IAAI,GAAGkgR,iIACf,MAAMG,QAA6Bd,GAAsBU,EAAcr2Q,EAASs2Q,EAA2B,eAAfA,GAC5F,OAAOC,EAAaF,EAAcI,EACtC,CAEI,OAAO1hQ,QAAQE,OAAO37B,EAC1B,GAGZ,CACK,GAA8B,mBAA1Bk9R,EAAuF,CAC5F,GACgC,QAD3Bn5P,EAAKg5P,EACL1D,6BAA0C,IAAPt1P,OAAgB,EAASA,EAAGwmP,kBAAkB,kBAA8D,CAChJ,MAAM4S,QAA6Bd,GAAsBU,EAAcr2Q,EAASs2Q,GAChF,OAAOC,EAAaF,EAAcI,GAAsBz4P,OAAMq9G,MAAO/hJ,IACjE,IAAI8jC,EACJ,GACkK,WAAlI,QAD1BA,EAAKi5P,EACN1D,6BAA0C,IAAPv1P,OAAgB,EAASA,EAAGsmP,4BAA4B,qBAEzE,iCAAfpqR,EAAM0oB,MACS,gCAAf1oB,EAAM0oB,MAAwF,CAC9FhM,QAAQI,IAAI,8GAA8GkgR,WAI1H,MAAMI,QAAmCf,GAAsBU,EAAcr2Q,EAASs2Q,GAAY,GAClG,GAGA,OAAOC,EAAaF,EAAcK,EACtC,CAGJ,OAAO3hQ,QAAQE,OAAO37B,EAAM,GAEpC,CACK,CAED,MAAMo9R,QAAmCf,GAAsBU,EAAcr2Q,EAASs2Q,GAAY,GAClG,GAGA,OAAOC,EAAaF,EAAcK,EACtC,CACJ,CAEI,OAAO3hQ,QAAQE,OAAOuhQ,EAAwB,8BAEtD,CACAn7I,eAAes7I,GAA2B5xH,GACtC,MAAM6xH,EAAepC,GAAUzvH,GACzB3wI,QAAiB2vP,EAAmB6S,EAAc,CACpDnB,WAAY,kBACZ5sQ,QAAS,yBAEPL,EAAS,IAAI86P,EAAgBlvP,GAOnC,GAN6B,MAAzBwiQ,EAAarV,SACbqV,EAAa1G,sBAAwB1nQ,EAGrCouQ,EAAazG,wBAAwByG,EAAarV,UAAY/4P,EAE9DA,EAAOs7P,uBAAwB,CACd,IAAIuR,GAA4BuB,GACnCrB,QAClB,CACJ,CA4FA,SAASsB,GAAoB9xH,EAAMp6I,EAAKx0B,GACpC,MAAMygS,EAAepC,GAAUzvH,GAC/Bk7G,EAAQ2W,EAAa3U,iBAAkB2U,EAAc,0BACrD3W,EAAQ,eAAejrQ,KAAK2V,GAAMisQ,EAAc,2BAChD,MAAME,KAAiC,OAAZ3gS,QAAgC,IAAZA,OAAqB,EAASA,EAAQ2gS,iBAC/EvrQ,EAAWwrQ,GAAgBpsQ,IAC3B,KAAE5U,EAAI,KAAE2nB,GAmBlB,SAA4B/S,GACxB,MAAMY,EAAWwrQ,GAAgBpsQ,GAC3BqsQ,EAAY,mBAAmBt9Q,KAAKiR,EAAIjG,OAAO6G,EAASn8B,SAC9D,IAAK4nS,EACD,MAAO,CAAEjhR,KAAM,GAAI2nB,KAAM,MAE7B,MAAMu5P,EAAcD,EAAU,GAAGr9Q,MAAM,KAAKM,OAAS,GAC/Ci9Q,EAAgB,qBAAqBx9Q,KAAKu9Q,GAChD,GAAIC,EAAe,CACf,MAAMnhR,EAAOmhR,EAAc,GAC3B,MAAO,CAAEnhR,OAAM2nB,KAAMy5P,GAAUF,EAAYvyQ,OAAO3O,EAAK3mB,OAAS,IACpE,CACK,CACD,MAAO2mB,EAAM2nB,GAAQu5P,EAAYt9Q,MAAM,KACvC,MAAO,CAAE5D,OAAM2nB,KAAMy5P,GAAUz5P,GACnC,CACJ,CAnC2B05P,CAAmBzsQ,GACpC0sQ,EAAmB,OAAT35P,EAAgB,GAAK,IAAIA,IAEzCk5P,EAAapuQ,OAAOq4P,SAAW,CAAEl2P,IAAK,GAAGY,MAAaxV,IAAOshR,MAC7DT,EAAanhB,SAAS8a,mCAAoC,EAC1DqG,EAAavH,eAAiB1/R,OAAOwf,OAAO,CACxC4G,OACA2nB,OACAnS,SAAUA,EAASzvB,QAAQ,IAAK,IAChC3F,QAASxG,OAAOwf,OAAO,CAAE2nR,sBAExBA,GAmCT,WACI,SAASQ,IACL,MAAMluR,EAAK9Y,SAASmB,cAAc,KAC5B8lS,EAAMnuR,EAAG3W,MACf2W,EAAGkpB,UACC,oEACJilQ,EAAInzM,SAAW,QACfmzM,EAAIxkS,MAAQ,OACZwkS,EAAIxkC,gBAAkB,UACtBwkC,EAAIC,OAAS,qBACbD,EAAI5iF,MAAQ,UACZ4iF,EAAIvpR,OAAS,MACbupR,EAAIltR,KAAO,MACXktR,EAAIE,OAAS,MACbF,EAAIjwF,OAAS,QACbiwF,EAAIxyM,UAAY,SAChB37E,EAAGsuR,UAAU36Q,IAAI,6BACjBzsB,SAASme,KAAKld,YAAY6X,EAC9B,CACuB,qBAAZ4M,SAAmD,oBAAjBA,QAAQwR,MACjDxR,QAAQwR,KAAK,gIAIK,qBAAXnzB,QAA8C,qBAAb/D,WACZ,YAAxBA,SAASw7B,WACTz3B,OAAOY,iBAAiB,mBAAoBqiS,GAG5CA,IAGZ,CAlEQK,EAER,CACA,SAASZ,GAAgBpsQ,GACrB,MAAMitQ,EAAcjtQ,EAAI35B,QAAQ,KAChC,OAAO4mS,EAAc,EAAI,GAAKjtQ,EAAIjG,OAAO,EAAGkzQ,EAAc,EAC9D,CAkBA,SAAST,GAAUE,GACf,IAAKA,EACD,OAAO,KAEX,MAAM35P,EAAOllB,OAAO6+Q,GACpB,OAAIngR,MAAMwmB,GACC,KAEJA,CACX,CA2DA,MAAMm6P,GAEF,WAAApgQ,CAOA6uP,EASAwR,GACIliR,KAAK0wQ,WAAaA,EAClB1wQ,KAAKkiR,aAAeA,CACxB,CAMA,MAAAphR,GACI,OAAOwpQ,EAAU,kBACrB,CAEA,mBAAA6X,CAAoBC,GAChB,OAAO9X,EAAU,kBACrB,CAEA,cAAA+X,CAAeD,EAAOE,GAClB,OAAOhY,EAAU,kBACrB,CAEA,4BAAAiY,CAA6BH,GACzB,OAAO9X,EAAU,kBACrB,EA2BJ7kI,eAAe+8I,GAAkBrzH,EAAM/kJ,GACnC,OAAOwhQ,EAAmBz8G,EAAM,OAA8B,sBAA8C/kJ,EAChH,CAqBAq7H,eAAeg9I,GAAmBtzH,EAAM/kJ,GACpC,OAAO0iQ,EAAsB39G,EAAM,OAA8B,kCAAwEu8G,EAAmBv8G,EAAM/kJ,GACtK,CAkEA,MAAMs4Q,WAA4BT,GAE9B,WAAApgQ,CAEA8gQ,EAEAC,EAAWV,EAEXW,EAAY,MACRz8P,MAAM,WAAsC87P,GAC5CliR,KAAK2iR,OAASA,EACd3iR,KAAK4iR,UAAYA,EACjB5iR,KAAK6iR,UAAYA,CACrB,CAEA,4BAAOC,CAAsBp3Q,EAAOuzL,GAChC,OAAO,IAAIyjF,GAAoBh3Q,EAAOuzL,EAAU,WACpD,CAEA,wBAAO8jF,CAAkBr3Q,EAAOs3Q,EAASrX,EAAW,MAChD,OAAO,IAAI+W,GAAoBh3Q,EAAOs3Q,EAAS,YAA2CrX,EAC9F,CAEA,MAAA7qQ,GACI,MAAO,CACH4K,MAAO1L,KAAK2iR,OACZ1jF,SAAUj/L,KAAK4iR,UACfV,aAAcliR,KAAKkiR,aACnBvW,SAAU3rQ,KAAK6iR,UAEvB,CASA,eAAOvQ,CAAS7F,GACZ,MAAMtwQ,EAAsB,kBAATswQ,EAAoBjnQ,KAAKrC,MAAMspQ,GAAQA,EAC1D,IAAa,OAARtwQ,QAAwB,IAARA,OAAiB,EAASA,EAAIuP,SAAmB,OAARvP,QAAwB,IAARA,OAAiB,EAASA,EAAI8iM,UAAW,CACnH,GAAyB,aAArB9iM,EAAI+lR,aACJ,OAAOliR,KAAK8iR,sBAAsB3mR,EAAIuP,MAAOvP,EAAI8iM,UAEhD,GAAyB,cAArB9iM,EAAI+lR,aACT,OAAOliR,KAAK+iR,kBAAkB5mR,EAAIuP,MAAOvP,EAAI8iM,SAAU9iM,EAAIwvQ,SAEnE,CACA,OAAO,IACX,CAEA,yBAAMwW,CAAoBhzH,GACtB,OAAQnvJ,KAAKkiR,cACT,IAAK,WAOD,OAAO1B,GAAoBrxH,EANX,CACZ8zH,mBAAmB,EACnBv3Q,MAAO1L,KAAK2iR,OACZ1jF,SAAUj/L,KAAK4iR,UACf/C,WAAY,mBAE0B,qBAAsE4C,GAAoB,2BACxI,IAAK,YACD,OAhGhBh9I,eAAqC0pB,EAAM/kJ,GACvC,OAAO0iQ,EAAsB39G,EAAM,OAA8B,mCAA2Eu8G,EAAmBv8G,EAAM/kJ,GACzK,CA8FuB84Q,CAAsB/zH,EAAM,CAC/BzjJ,MAAO1L,KAAK2iR,OACZK,QAAShjR,KAAK4iR,YAEtB,QACIhZ,EAAMz6G,EAAM,kBAExB,CAEA,oBAAMkzH,CAAelzH,EAAMghH,GACvB,OAAQnwQ,KAAKkiR,cACT,IAAK,WAQD,OAAO1B,GAAoBrxH,EAPX,CACZghH,UACA8S,mBAAmB,EACnBv3Q,MAAO1L,KAAK2iR,OACZ1jF,SAAUj/L,KAAK4iR,UACf/C,WAAY,mBAE0B,iBAA6D2C,GAAmB,2BAC9H,IAAK,YACD,OAlHhB/8I,eAA6C0pB,EAAM/kJ,GAC/C,OAAO0iQ,EAAsB39G,EAAM,OAA8B,mCAA2Eu8G,EAAmBv8G,EAAM/kJ,GACzK,CAgHuB+4Q,CAA8Bh0H,EAAM,CACvCghH,UACAzkQ,MAAO1L,KAAK2iR,OACZK,QAAShjR,KAAK4iR,YAEtB,QACIhZ,EAAMz6G,EAAM,kBAExB,CAEA,4BAAAozH,CAA6BpzH,GACzB,OAAOnvJ,KAAKmiR,oBAAoBhzH,EACpC,EAmBJ1pB,eAAe29I,GAAcj0H,EAAM/kJ,GAC/B,OAAO0iQ,EAAsB39G,EAAM,OAA8B,6BAA8Du8G,EAAmBv8G,EAAM/kJ,GAC5J,CA2BA,MAAMi5Q,WAAwBpB,GAC1B,WAAApgQ,GACIuE,SAASzmB,WACTK,KAAKsjR,aAAe,IACxB,CAEA,kBAAOC,CAAY12P,GACf,MAAM22P,EAAO,IAAIH,GAAgBx2P,EAAO6jP,WAAY7jP,EAAOq1P,cAyB3D,OAxBIr1P,EAAOsjP,SAAWtjP,EAAOykP,aAErBzkP,EAAOsjP,UACPqT,EAAKrT,QAAUtjP,EAAOsjP,SAEtBtjP,EAAOykP,cACPkS,EAAKlS,YAAczkP,EAAOykP,aAG1BzkP,EAAOwzL,QAAUxzL,EAAOy2P,eACxBE,EAAKnjE,MAAQxzL,EAAOwzL,OAEpBxzL,EAAOy2P,eACPE,EAAKF,aAAez2P,EAAOy2P,eAG1Bz2P,EAAO42P,YAAc52P,EAAO62P,kBAEjCF,EAAKlS,YAAczkP,EAAO42P,WAC1BD,EAAKzpI,OAASltH,EAAO62P,kBAGrB9Z,EAAM,kBAEH4Z,CACX,CAEA,MAAA1iR,GACI,MAAO,CACHqvQ,QAASnwQ,KAAKmwQ,QACdmB,YAAatxQ,KAAKsxQ,YAClBv3H,OAAQ/5I,KAAK+5I,OACbsmE,MAAOrgN,KAAKqgN,MACZijE,aAActjR,KAAKsjR,aACnB5S,WAAY1wQ,KAAK0wQ,WACjBwR,aAAcliR,KAAKkiR,aAE3B,CAUA,eAAO5P,CAAS7F,GACZ,MAAMtwQ,EAAsB,kBAATswQ,EAAoBjnQ,KAAKrC,MAAMspQ,GAAQA,GACpD,WAAEiE,EAAU,aAAEwR,GAAiB/lR,EAAKzf,GAAO,IAAAqjQ,QAAO5jP,EAAK,CAAC,aAAc,iBAC5E,IAAKu0Q,IAAewR,EAChB,OAAO,KAEX,MAAMsB,EAAO,IAAIH,GAAgB3S,EAAYwR,GAM7C,OALAsB,EAAKrT,QAAUzzR,EAAKyzR,cAAWv3Q,EAC/B4qR,EAAKlS,YAAc50R,EAAK40R,kBAAe14Q,EACvC4qR,EAAKzpI,OAASr9J,EAAKq9J,OACnBypI,EAAKnjE,MAAQ3jO,EAAK2jO,MAClBmjE,EAAKF,aAAe5mS,EAAK4mS,cAAgB,KAClCE,CACX,CAEA,mBAAArB,CAAoBhzH,GAEhB,OAAOi0H,GAAcj0H,EADLnvJ,KAAK2jR,eAEzB,CAEA,cAAAtB,CAAelzH,EAAMghH,GACjB,MAAM/lQ,EAAUpK,KAAK2jR,eAErB,OADAv5Q,EAAQ+lQ,QAAUA,EACXiT,GAAcj0H,EAAM/kJ,EAC/B,CAEA,4BAAAm4Q,CAA6BpzH,GACzB,MAAM/kJ,EAAUpK,KAAK2jR,eAErB,OADAv5Q,EAAQw5Q,YAAa,EACdR,GAAcj0H,EAAM/kJ,EAC/B,CACA,YAAAu5Q,GACI,MAAMv5Q,EAAU,CACZy5Q,WAjGc,mBAkGdZ,mBAAmB,GAEvB,GAAIjjR,KAAKsjR,aACLl5Q,EAAQk5Q,aAAetjR,KAAKsjR,iBAE3B,CACD,MAAMQ,EAAW,CAAC,EACd9jR,KAAKmwQ,UACL2T,EAAmB,SAAI9jR,KAAKmwQ,SAE5BnwQ,KAAKsxQ,cACLwS,EAAuB,aAAI9jR,KAAKsxQ,aAEhCtxQ,KAAK+5I,SACL+pI,EAA6B,mBAAI9jR,KAAK+5I,QAE1C+pI,EAAqB,WAAI9jR,KAAK0wQ,WAC1B1wQ,KAAKqgN,QAAUrgN,KAAKsjR,eACpBQ,EAAgB,MAAI9jR,KAAKqgN,OAE7Bj2M,EAAQ05Q,UAAW,QAAYA,EACnC,CACA,OAAO15Q,CACX,EAmBJq7H,eAAes+I,GAA0B50H,EAAM/kJ,GAC3C,OAAOwhQ,EAAmBz8G,EAAM,OAA8B,oCAA2Eu8G,EAAmBv8G,EAAM/kJ,GACtK,CAWA,MAAM45Q,GAA8C,CAChD,eAAqD,kBA4BzD,MAAMC,WAA4BhC,GAC9B,WAAApgQ,CAAYgL,GACRzG,MAAM,QAAgC,SACtCpmB,KAAK6sB,OAASA,CAClB,CAEA,wBAAOq3P,CAAkBC,EAAgBC,GACrC,OAAO,IAAIH,GAAoB,CAAEE,iBAAgBC,oBACrD,CAEA,yBAAOC,CAAmBhX,EAAaiX,GACnC,OAAO,IAAIL,GAAoB,CAAE5W,cAAaiX,kBAClD,CAEA,mBAAAnC,CAAoBhzH,GAChB,OAtDR1pB,eAAuC0pB,EAAM/kJ,GACzC,OAAO0iQ,EAAsB39G,EAAM,OAA8B,qCAA+Eu8G,EAAmBv8G,EAAM/kJ,GAC7K,CAoDem6Q,CAAwBp1H,EAAMnvJ,KAAKwkR,2BAC9C,CAEA,cAAAnC,CAAelzH,EAAMghH,GACjB,OAvDR1qI,eAAqC0pB,EAAM/kJ,GACvC,MAAMoU,QAAiBsuP,EAAsB39G,EAAM,OAA8B,qCAA+Eu8G,EAAmBv8G,EAAM/kJ,IACzL,GAAIoU,EAAS8lQ,eACT,MAAM5X,EAAiBv9G,EAAM,2CAAkF3wI,GAEnH,OAAOA,CACX,CAiDeimQ,CAAsBt1H,EAAMp1K,OAAO+lB,OAAO,CAAEqwQ,WAAWnwQ,KAAKwkR,4BACvE,CAEA,4BAAAjC,CAA6BpzH,GACzB,OAjDR1pB,eAA4C0pB,EAAM/kJ,GAE9C,OAAO0iQ,EAAsB39G,EAAM,OAA8B,qCAA+Eu8G,EAAmBv8G,EADhJp1K,OAAO+lB,OAAO/lB,OAAO+lB,OAAO,CAAC,EAAGsK,GAAU,CAAEg9I,UAAW,YAC4G48H,GAC1L,CA8CeU,CAA6Bv1H,EAAMnvJ,KAAKwkR,2BACnD,CAEA,wBAAAA,GACI,MAAM,eAAEF,EAAc,YAAEjX,EAAW,eAAE8W,EAAc,iBAAEC,GAAqBpkR,KAAK6sB,OAC/E,OAAIy3P,GAAkBjX,EACX,CAAEiX,iBAAgBjX,eAEtB,CACHsX,YAAaR,EACb/3Q,KAAMg4Q,EAEd,CAEA,MAAAtjR,GACI,MAAM3E,EAAM,CACRu0Q,WAAY1wQ,KAAK0wQ,YAcrB,OAZI1wQ,KAAK6sB,OAAOwgP,cACZlxQ,EAAIkxQ,YAAcrtQ,KAAK6sB,OAAOwgP,aAE9BrtQ,KAAK6sB,OAAOy3P,iBACZnoR,EAAImoR,eAAiBtkR,KAAK6sB,OAAOy3P,gBAEjCtkR,KAAK6sB,OAAOu3P,mBACZjoR,EAAIioR,iBAAmBpkR,KAAK6sB,OAAOu3P,kBAEnCpkR,KAAK6sB,OAAOs3P,iBACZhoR,EAAIgoR,eAAiBnkR,KAAK6sB,OAAOs3P,gBAE9BhoR,CACX,CAEA,eAAOm2Q,CAAS7F,GACQ,kBAATA,IACPA,EAAOjnQ,KAAKrC,MAAMspQ,IAEtB,MAAM,eAAE0X,EAAc,iBAAEC,EAAgB,YAAE/W,EAAW,eAAEiX,GAAmB7X,EAC1E,OAAK2X,GACAD,GACA9W,GACAiX,EAGE,IAAIL,GAAoB,CAC3BE,iBACAC,mBACA/W,cACAiX,mBANO,IAQf,EAkEJ,MAAMM,GAOF,WAAA/iQ,CAAYgjQ,GACR,IAAIr9P,EAAIC,EAAIqO,EAAIuC,EAAIE,EAAIE,EACxB,MAAMqsP,GAAe,SAAkB,QAAmBD,IACpDvnR,EAAoE,QAA1DkqB,EAAKs9P,EAA8C,cAAsB,IAAPt9P,EAAgBA,EAAK,KACjGpb,EAAgE,QAAxDqb,EAAKq9P,EAA4C,eAAsB,IAAPr9P,EAAgBA,EAAK,KAC7F2/H,EAtDd,SAAmBj6J,GACf,OAAQA,GACJ,IAAK,eACD,MAAO,gBACX,IAAK,gBACD,MAAO,iBACX,IAAK,SACD,MAAO,eACX,IAAK,cACD,MAAO,eACX,IAAK,uBACD,MAAO,0BACX,IAAK,6BACD,MAAO,gCACX,QACI,OAAO,KAEnB,CAqC0B43R,CAAgE,QAArDjvP,EAAKgvP,EAAyC,YAAsB,IAAPhvP,EAAgBA,EAAK,MAE/Gu0O,EAAQ/sQ,GAAU8O,GAAQg7I,EAAW,kBACrCpnJ,KAAK1C,OAASA,EACd0C,KAAKonJ,UAAYA,EACjBpnJ,KAAKoM,KAAOA,EACZpM,KAAKglR,YAAmF,QAApE3sP,EAAKysP,EAAwD,mBAAsB,IAAPzsP,EAAgBA,EAAK,KACrHr4B,KAAKgsQ,aAAsF,QAAtEzzO,EAAKusP,EAA0D,oBAAsB,IAAPvsP,EAAgBA,EAAK,KACxHv4B,KAAK2rQ,SAA0E,QAA9DlzO,EAAKqsP,EAAkD,gBAAsB,IAAPrsP,EAAgBA,EAAK,IAChH,CAUA,gBAAOwsP,CAAUz/R,GACb,MAAMq/R,EAnDd,SAAuB9vQ,GACnB,MAAMvvB,GAAO,SAAkB,QAAmBuvB,IAAY,KAExDmwQ,EAAiB1/R,GACjB,SAAkB,QAAmBA,IAAqB,aAC1D,KAEA2/R,GAAc,SAAkB,QAAmBpwQ,IAAoB,aAI7E,OAH0BowQ,GACpB,SAAkB,QAAmBA,IAAoB,KACzD,OACsBA,GAAeD,GAAkB1/R,GAAQuvB,CACzE,CAuC2BqwQ,CAAc5/R,GACjC,IACI,OAAO,IAAIo/R,GAAcC,EAC7B,CACA,MAAOr9P,GACH,OAAO,IACX,CACJ,EAiCJ,MAAM69P,GACF,WAAAxjQ,GAII7hB,KAAK0wQ,WAAa2U,GAAkBC,WACxC,CAmBA,iBAAOC,CAAW75Q,EAAOuzL,GACrB,OAAOyjF,GAAoBI,sBAAsBp3Q,EAAOuzL,EAC5D,CAuBA,yBAAOumF,CAAmB95Q,EAAO+5Q,GAC7B,MAAMC,EAAgBd,GAAcK,UAAUQ,GAE9C,OADApb,EAAQqb,EAAe,kBAChBhD,GAAoBK,kBAAkBr3Q,EAAOg6Q,EAAct5Q,KAAMs5Q,EAAc/Z,SAC1F,EAKJ0Z,GAAkBC,YAAc,WAIhCD,GAAkBM,8BAAgC,WAIlDN,GAAkBO,0BAA4B,YAyB9C,MAAMC,GAMF,WAAAhkQ,CAAY6uP,GACR1wQ,KAAK0wQ,WAAaA,EAElB1wQ,KAAK8lR,oBAAsB,KAE3B9lR,KAAK+lR,iBAAmB,CAAC,CAC7B,CAMA,kBAAAC,CAAmBha,GACfhsQ,KAAK8lR,oBAAsB9Z,CAC/B,CAWA,mBAAAia,CAAoBC,GAEhB,OADAlmR,KAAK+lR,iBAAmBG,EACjBlmR,IACX,CAIA,mBAAAmmR,GACI,OAAOnmR,KAAK+lR,gBAChB,EAyBJ,MAAMK,WAA0BP,GAC5B,WAAAhkQ,GACIuE,SAASzmB,WAETK,KAAKqmR,OAAS,EAClB,CAMA,QAAAC,CAAS3hE,GAKL,OAHK3kN,KAAKqmR,OAAOpsS,SAAS0qO,IACtB3kN,KAAKqmR,OAAOhrS,KAAKspO,GAEd3kN,IACX,CAIA,SAAAumR,GACI,MAAO,IAAIvmR,KAAKqmR,OACpB,EAsLJ,MAAMG,WAA6BJ,GAC/B,WAAAvkQ,GACIuE,MAAM,eACV,CAaA,iBAAOm/P,CAAWjU,GACd,OAAO+R,GAAgBE,YAAY,CAC/B7S,WAAY8V,GAAqBlB,YACjCpD,aAAcsE,GAAqBC,wBACnCnV,eAER,CAMA,2BAAOoV,CAAqBC,GACxB,OAAOH,GAAqBI,2BAA2BD,EAC3D,CAOA,0BAAOE,CAAoBnjS,GACvB,OAAO8iS,GAAqBI,2BAA4BljS,EAAMonC,YAAc,CAAC,EACjF,CACA,iCAAO87P,EAA6BtZ,eAAgBwZ,IAChD,IAAKA,KAAmB,qBAAsBA,GAC1C,OAAO,KAEX,IAAKA,EAAcC,iBACf,OAAO,KAEX,IACI,OAAOP,GAAqBjB,WAAWuB,EAAcC,iBACzD,CACA,MAAOv/P,GACH,OAAO,IACX,CACJ,EAGJg/P,GAAqBC,wBAA0B,eAE/CD,GAAqBlB,YAAc,eA2DnC,MAAM0B,WAA2BZ,GAC7B,WAAAvkQ,GACIuE,MAAM,cACNpmB,KAAKsmR,SAAS,UAClB,CAcA,iBAAOf,CAAWpV,EAASmB,GACvB,OAAO+R,GAAgBE,YAAY,CAC/B7S,WAAYsW,GAAmB1B,YAC/BpD,aAAc8E,GAAmBC,sBACjC9W,UACAmB,eAER,CAMA,2BAAOoV,CAAqBC,GACxB,OAAOK,GAAmBJ,2BAA2BD,EACzD,CAOA,0BAAOE,CAAoBnjS,GACvB,OAAOsjS,GAAmBJ,2BAA4BljS,EAAMonC,YAAc,CAAC,EAC/E,CACA,iCAAO87P,EAA6BtZ,eAAgBwZ,IAChD,IAAKA,EACD,OAAO,KAEX,MAAM,aAAEI,EAAY,iBAAEH,GAAqBD,EAC3C,IAAKI,IAAiBH,EAElB,OAAO,KAEX,IACI,OAAOC,GAAmBzB,WAAW2B,EAAcH,EACvD,CACA,MAAOv/P,GACH,OAAO,IACX,CACJ,EAGJw/P,GAAmBC,sBAAwB,aAE3CD,GAAmB1B,YAAc,aA4DjC,MAAM6B,WAA2Bf,GAC7B,WAAAvkQ,GACIuE,MAAM,aACV,CAMA,iBAAOm/P,CAAWjU,GACd,OAAO+R,GAAgBE,YAAY,CAC/B7S,WAAYyW,GAAmB7B,YAC/BpD,aAAciF,GAAmBC,sBACjC9V,eAER,CAMA,2BAAOoV,CAAqBC,GACxB,OAAOQ,GAAmBP,2BAA2BD,EACzD,CAOA,0BAAOE,CAAoBnjS,GACvB,OAAOyjS,GAAmBP,2BAA4BljS,EAAMonC,YAAc,CAAC,EAC/E,CACA,iCAAO87P,EAA6BtZ,eAAgBwZ,IAChD,IAAKA,KAAmB,qBAAsBA,GAC1C,OAAO,KAEX,IAAKA,EAAcC,iBACf,OAAO,KAEX,IACI,OAAOI,GAAmB5B,WAAWuB,EAAcC,iBACvD,CACA,MAAOv/P,GACH,OAAO,IACX,CACJ,EAGJ2/P,GAAmBC,sBAAwB,aAE3CD,GAAmB7B,YAAc,aAsOjC,MAAM+B,WAA4BjB,GAC9B,WAAAvkQ,GACIuE,MAAM,cACV,CAOA,iBAAOm/P,CAAWj9P,EAAOyxH,GACrB,OAAOspI,GAAgBE,YAAY,CAC/B7S,WAAY2W,GAAoB/B,YAChCpD,aAAcmF,GAAoBC,uBAClC7D,WAAYn7P,EACZo7P,iBAAkB3pI,GAE1B,CAMA,2BAAO2sI,CAAqBC,GACxB,OAAOU,GAAoBT,2BAA2BD,EAC1D,CAOA,0BAAOE,CAAoBnjS,GACvB,OAAO2jS,GAAoBT,2BAA4BljS,EAAMonC,YAAc,CAAC,EAChF,CACA,iCAAO87P,EAA6BtZ,eAAgBwZ,IAChD,IAAKA,EACD,OAAO,KAEX,MAAM,iBAAEC,EAAgB,iBAAErD,GAAqBoD,EAC/C,IAAKC,IAAqBrD,EACtB,OAAO,KAEX,IACI,OAAO2D,GAAoB9B,WAAWwB,EAAkBrD,EAC5D,CACA,MAAOl8P,GACH,OAAO,IACX,CACJ,EAGJ6/P,GAAoBC,uBAAyB,cAE7CD,GAAoB/B,YAAc,cAsClC,MAAMiC,GACF,WAAA1lQ,CAAYgL,GACR7sB,KAAKjB,KAAO8tB,EAAO9tB,KACnBiB,KAAK0wQ,WAAa7jP,EAAO6jP,WACzB1wQ,KAAKstQ,eAAiBzgP,EAAOygP,eAC7BttQ,KAAKwnR,cAAgB36P,EAAO26P,aAChC,CACA,iCAAapT,CAAqBjlH,EAAMq4H,EAAenT,EAAiBzD,GAAc,GAClF,MAAM7xQ,QAAa6zQ,EAASwB,qBAAqBjlH,EAAMklH,EAAiBzD,GAClEF,EAAa+W,GAAsBpT,GAOzC,OANiB,IAAIkT,GAAmB,CACpCxoR,OACA2xQ,aACApD,eAAgB+G,EAChBmT,iBAGR,CACA,0BAAaE,CAAc3oR,EAAMyoR,EAAehpQ,SACtCzf,EAAK+0Q,yBAAyBt1P,GAAuB,GAC3D,MAAMkyP,EAAa+W,GAAsBjpQ,GACzC,OAAO,IAAI+oQ,GAAmB,CAC1BxoR,OACA2xQ,aACApD,eAAgB9uP,EAChBgpQ,iBAER,EAEJ,SAASC,GAAsBjpQ,GAC3B,OAAIA,EAASkyP,WACFlyP,EAASkyP,WAEhB,gBAAiBlyP,EACV,QAEJ,IACX,CAuEA,MAAMmpQ,WAAyB,KAC3B,WAAA9lQ,CAAYstI,EAAMzrK,EAAO8jS,EAAezoR,GACpC,IAAIyoB,EACJpB,MAAM1iC,EAAM0oB,KAAM1oB,EAAMmF,SACxBmX,KAAKwnR,cAAgBA,EACrBxnR,KAAKjB,KAAOA,EAEZhlB,OAAOgoC,eAAe/hB,KAAM2nR,GAAiB3tS,WAC7CgmB,KAAK8qB,WAAa,CACd8hD,QAASuiF,EAAKvqK,KACd+mR,SAAmC,QAAxBnkP,EAAK2nI,EAAKw8G,gBAA6B,IAAPnkP,EAAgBA,OAAK5uB,EAChEo0Q,gBAAiBtpR,EAAMonC,WAAWkiP,gBAClCwa,gBAER,CACA,6BAAOI,CAAuBz4H,EAAMzrK,EAAO8jS,EAAezoR,GACtD,OAAO,IAAI4oR,GAAiBx4H,EAAMzrK,EAAO8jS,EAAezoR,EAC5D,EAEJ,SAAS8oR,GAA8C14H,EAAMq4H,EAAejC,EAAYxmR,GAIpF,OAH0C,mBAAlByoR,EAClBjC,EAAWhD,6BAA6BpzH,GACxCo2H,EAAWpD,oBAAoBhzH,IACd/mI,OAAM1kC,IACzB,GAAmB,oCAAfA,EAAM0oB,KACN,MAAMu7Q,GAAiBC,uBAAuBz4H,EAAMzrK,EAAO8jS,EAAezoR,GAE9E,MAAMrb,CAAK,GAEnB,CAkEA+hJ,eAAeqiJ,GAAQ/oR,EAAMwmR,EAAY3W,GAAkB,GACvD,MAAMpwP,QAAiBmwP,EAAqB5vQ,EAAMwmR,EAAWlD,eAAetjR,EAAKowJ,WAAYpwJ,EAAK2wQ,cAAed,GACjH,OAAO2Y,GAAmBG,cAAc3oR,EAAM,OAAiCyf,EACnF,CA0BAinH,eAAesiJ,GAAgBhpR,EAAMwmR,EAAY3W,GAAkB,GAC/D,MAAM,KAAEz/G,GAASpwJ,EACjB,IAAI,QAAqBowJ,EAAKjlJ,KAC1B,OAAOiV,QAAQE,OAAO6qP,EAAgD/6G,IAE1E,MAAMq4H,EAAgB,iBACtB,IACI,MAAMhpQ,QAAiBmwP,EAAqB5vQ,EAAM8oR,GAA8C14H,EAAMq4H,EAAejC,EAAYxmR,GAAO6vQ,GACxIvE,EAAQ7rP,EAAS2xP,QAAShhH,EAAM,kBAChC,MAAMgiG,EAASqd,EAAYhwP,EAAS2xP,SACpC9F,EAAQlZ,EAAQhiG,EAAM,kBACtB,MAAQxmI,IAAKooP,GAAY5f,EAEzB,OADAkZ,EAAQtrQ,EAAKypB,MAAQuoP,EAAS5hH,EAAM,iBAC7Bo4H,GAAmBG,cAAc3oR,EAAMyoR,EAAehpQ,EACjE,CACA,MAAOlkC,GAKH,KAHuD,yBAA5C,OAANA,QAAoB,IAANA,OAAe,EAASA,EAAE8xB,OACzCw9P,EAAMz6G,EAAM,iBAEV70K,CACV,CACJ,CAkBAmrJ,eAAeuiJ,GAAsB74H,EAAMo2H,EAAY3W,GAAkB,GACrE,IAAI,QAAqBz/G,EAAKjlJ,KAC1B,OAAOiV,QAAQE,OAAO6qP,EAAgD/6G,IAE1E,MAAMq4H,EAAgB,SAChBhpQ,QAAiBqpQ,GAA8C14H,EAAMq4H,EAAejC,GACpFoB,QAAuBY,GAAmBnT,qBAAqBjlH,EAAMq4H,EAAehpQ,GAI1F,OAHKowP,SACKz/G,EAAKmsH,mBAAmBqL,EAAe5nR,MAE1C4nR,CACX,CA6GAlhJ,eAAewiJ,GAAsB94H,EAAM+4H,GACvC,IAAI,QAAqB/4H,EAAKjlJ,KAC1B,OAAOiV,QAAQE,OAAO6qP,EAAgD/6G,IAE1E,MAAM6xH,EAAepC,GAAUzvH,GACzB3wI,QA5CVinH,eAAuC0pB,EAAM/kJ,GACzC,OAAO0iQ,EAAsB39G,EAAM,OAA8B,qCAA+Eu8G,EAAmBv8G,EAAM/kJ,GAC7K,CA0C2B+9Q,CAAwBnH,EAAc,CACzD14P,MAAO4/P,EACPjF,mBAAmB,IAEjBO,QAAa+D,GAAmBnT,qBAAqB4M,EAAc,SAAsCxiQ,GAE/G,aADMwiQ,EAAa1F,mBAAmBkI,EAAKzkR,MACpCykR,CACX,CAokCA,SAASzU,GAAQ5/G,GACb,OAAO,QAAmBA,GAAM4/G,SACpC,CA2KA,SAASqZ,GAAoBj5H,EAAM/kJ,GAC/B,OAAOwhQ,EAAmBz8G,EAAM,OAA8B,mCAAwEu8G,EAAmBv8G,EAAM/kJ,GACnK,CAgE6B,IAAI6iF,QAmBjC,MAAMo7L,GAAwB,QAqB9B,MAAMC,GACF,WAAAzmQ,CAAY0mQ,EAAkBvqS,GAC1BgiB,KAAKuoR,iBAAmBA,EACxBvoR,KAAKhiB,KAAOA,CAChB,CACA,YAAA22R,GACI,IACI,OAAK30Q,KAAK4X,SAGV5X,KAAK4X,QAAQG,QAAQswQ,GAAuB,KAC5CroR,KAAK4X,QAAQk1G,WAAWu7J,IACjBlpQ,QAAQC,SAAQ,IAJZD,QAAQC,SAAQ,EAK/B,CACA,MAAOoI,GACH,OAAOrI,QAAQC,SAAQ,EAC3B,CACJ,CACA,IAAAw1P,CAAK16R,EAAKE,GAEN,OADA4lB,KAAK4X,QAAQG,QAAQ79B,EAAKsrB,KAAKC,UAAUrrB,IAClC+kC,QAAQC,SACnB,CACA,IAAAy1P,CAAK36R,GACD,MAAMuyR,EAAOzsQ,KAAK4X,QAAQE,QAAQ59B,GAClC,OAAOilC,QAAQC,QAAQqtP,EAAOjnQ,KAAKrC,MAAMspQ,GAAQ,KACrD,CACA,OAAAqI,CAAQ56R,GAEJ,OADA8lB,KAAK4X,QAAQk1G,WAAW5yI,GACjBilC,QAAQC,SACnB,CACA,WAAIxH,GACA,OAAO5X,KAAKuoR,kBAChB,EAuBJ,MAAMC,WAAgCF,GAClC,WAAAzmQ,GACIuE,OAAM,IAAM3nC,OAAOo5B,cAAc,SACjC7X,KAAKy1Q,kBAAoB,CAACjxR,EAAOikS,IAASzoR,KAAK0oR,eAAelkS,EAAOikS,GACrEzoR,KAAKuvJ,UAAY,CAAC,EAClBvvJ,KAAK2oR,WAAa,CAAC,EAGnB3oR,KAAK4oR,UAAY,KAEjB5oR,KAAK6oR,kBAAoB5R,KACzBj3Q,KAAKu2Q,uBAAwB,CACjC,CACA,iBAAAuS,CAAkBh7Q,GAEd,IAAK,MAAM5zB,KAAOH,OAAOiC,KAAKgkB,KAAKuvJ,WAAY,CAE3C,MAAMjvF,EAAWtgE,KAAK4X,QAAQE,QAAQ59B,GAChC6uS,EAAW/oR,KAAK2oR,WAAWzuS,GAG7BomF,IAAayoN,GACbj7Q,EAAG5zB,EAAK6uS,EAAUzoN,EAE1B,CACJ,CACA,cAAAooN,CAAelkS,EAAOikS,GAAO,GAEzB,IAAKjkS,EAAMtK,IAIP,YAHA8lB,KAAK8oR,mBAAkB,CAAC5uS,EAAK8uS,EAAW1oN,KACpCtgE,KAAKipR,gBAAgB/uS,EAAKomF,EAAS,IAI3C,MAAMpmF,EAAMsK,EAAMtK,IAGduuS,EAGAzoR,KAAKkpR,iBAKLlpR,KAAK+wJ,cAET,MAAMo4H,EAAmB,KAGrB,MAAMC,EAAcppR,KAAK4X,QAAQE,QAAQ59B,IACpCuuS,GAAQzoR,KAAK2oR,WAAWzuS,KAASkvS,IAKtCppR,KAAKipR,gBAAgB/uS,EAAKkvS,EAAY,EAEpCA,EAAcppR,KAAK4X,QAAQE,QAAQ59B,IAv/JtC,WAAoC,KAA1BQ,SAAS80J,cAy/JlB45I,IAAgB5kS,EAAM87E,UACtB97E,EAAM87E,WAAa97E,EAAMukS,SAKzBz6Q,WAAW66Q,EAnEe,IAsE1BA,GAER,CACA,eAAAF,CAAgB/uS,EAAKE,GACjB4lB,KAAK2oR,WAAWzuS,GAAOE,EACvB,MAAMm1K,EAAYvvJ,KAAKuvJ,UAAUr1K,GACjC,GAAIq1K,EACA,IAAK,MAAM/uI,KAAY5mC,MAAM0Z,KAAKi8J,GAC9B/uI,EAASpmC,EAAQorB,KAAKrC,MAAM/oB,GAASA,EAGjD,CACA,YAAAw2K,GACI5wJ,KAAK+wJ,cACL/wJ,KAAK4oR,UAAY39I,aAAY,KACzBjrI,KAAK8oR,mBAAkB,CAAC5uS,EAAK6uS,EAAUzoN,KACnCtgE,KAAK0oR,eAAe,IAAIW,aAAa,UAAW,CAC5CnvS,MACA6uS,WACAzoN,cAEO,EAAK,GAClB,GA9FiB,IAgG3B,CACA,WAAAywF,GACQ/wJ,KAAK4oR,YACLz9I,cAAcnrI,KAAK4oR,WACnB5oR,KAAK4oR,UAAY,KAEzB,CACA,cAAAU,GACI7qS,OAAOY,iBAAiB,UAAW2gB,KAAKy1Q,kBAC5C,CACA,cAAAyT,GACIzqS,OAAOa,oBAAoB,UAAW0gB,KAAKy1Q,kBAC/C,CACA,YAAAV,CAAa76R,EAAKsmC,GAC6B,IAAvCzmC,OAAOiC,KAAKgkB,KAAKuvJ,WAAW/1K,SAKxBwmB,KAAK6oR,kBACL7oR,KAAK4wJ,eAGL5wJ,KAAKspR,kBAGRtpR,KAAKuvJ,UAAUr1K,KAChB8lB,KAAKuvJ,UAAUr1K,GAAO,IAAI22C,IAE1B7wB,KAAK2oR,WAAWzuS,GAAO8lB,KAAK4X,QAAQE,QAAQ59B,IAEhD8lB,KAAKuvJ,UAAUr1K,GAAKitB,IAAIqZ,EAC5B,CACA,eAAAy0P,CAAgB/6R,EAAKsmC,GACbxgB,KAAKuvJ,UAAUr1K,KACf8lB,KAAKuvJ,UAAUr1K,GAAKk3C,OAAO5Q,GACM,IAA7BxgB,KAAKuvJ,UAAUr1K,GAAKiI,aACb6d,KAAKuvJ,UAAUr1K,IAGa,IAAvCH,OAAOiC,KAAKgkB,KAAKuvJ,WAAW/1K,SAC5BwmB,KAAKkpR,iBACLlpR,KAAK+wJ,cAEb,CAEA,UAAM6jH,CAAK16R,EAAKE,SACNgsC,MAAMwuP,KAAK16R,EAAKE,GACtB4lB,KAAK2oR,WAAWzuS,GAAOsrB,KAAKC,UAAUrrB,EAC1C,CACA,UAAMy6R,CAAK36R,GACP,MAAME,QAAcgsC,MAAMyuP,KAAK36R,GAE/B,OADA8lB,KAAK2oR,WAAWzuS,GAAOsrB,KAAKC,UAAUrrB,GAC/BA,CACX,CACA,aAAM06R,CAAQ56R,SACJksC,MAAM0uP,QAAQ56R,UACb8lB,KAAK2oR,WAAWzuS,EAC3B,EAEJsuS,GAAwBxqS,KAAO,QAO/B,MAAMurS,GAA0Bf,GAkBhC,MAAMgB,WAAkClB,GACpC,WAAAzmQ,GACIuE,OAAM,IAAM3nC,OAAOqlF,gBAAgB,UACvC,CACA,YAAAixM,CAAar7P,EAAMs7P,GAGnB,CACA,eAAAC,CAAgBv7P,EAAMs7P,GAGtB,EAEJwU,GAA0BxrS,KAAO,UAOjC,MAAMyrS,GAA4BD,GA6DlC,MAAME,GACF,WAAA7nQ,CAAY8nQ,GACR3pR,KAAK2pR,YAAcA,EACnB3pR,KAAK4pR,YAAc,CAAC,EACpB5pR,KAAKy1Q,kBAAoBz1Q,KAAKic,YAAYvb,KAAKV,KACnD,CAOA,mBAAOw0Q,CAAamV,GAIhB,MAAM7iB,EAAmB9mQ,KAAK6pR,UAAU3jR,MAAKizP,GAAYA,EAAS2wB,cAAcH,KAChF,GAAI7iB,EACA,OAAOA,EAEX,MAAMijB,EAAc,IAAIL,GAASC,GAEjC,OADA3pR,KAAK6pR,UAAUxuS,KAAK0uS,GACbA,CACX,CACA,aAAAD,CAAcH,GACV,OAAO3pR,KAAK2pR,cAAgBA,CAChC,CAWA,iBAAM1tQ,CAAYz3B,GACd,MAAMwlS,EAAexlS,GACf,QAAEylS,EAAO,UAAEC,EAAS,KAAEtgS,GAASogS,EAAapgS,KAC5C2yK,EAAWv8J,KAAK4pR,YAAYM,GAClC,KAAmB,OAAb3tH,QAAkC,IAAbA,OAAsB,EAASA,EAASp6K,MAC/D,OAEJ6nS,EAAaG,MAAM,GAAGniI,YAAY,CAC9B/kK,OAAQ,MACRgnS,UACAC,cAEJ,MAAME,EAAWxwS,MAAM0Z,KAAKipK,GAAUz+K,KAAI2nJ,MAAOlY,GAAYA,EAAQy8J,EAAa1rP,OAAQ10C,KACpF40B,QAxFd,SAAqB4rQ,GACjB,OAAOjrQ,QAAQivG,IAAIg8J,EAAStsS,KAAI2nJ,MAAO3kH,IACnC,IAEI,MAAO,CACHsV,WAAW,EACXh8C,YAHgB0mC,EAKxB,CACA,MAAOtT,GACH,MAAO,CACH4oB,WAAW,EACX5oB,SAER,KAER,CAwE+B68Q,CAAYD,GACnCJ,EAAaG,MAAM,GAAGniI,YAAY,CAC9B/kK,OAAQ,OACRgnS,UACAC,YACA1rQ,YAER,CAQA,UAAA8rQ,CAAWJ,EAAWK,GAC2B,IAAzCxwS,OAAOiC,KAAKgkB,KAAK4pR,aAAapwS,QAC9BwmB,KAAK2pR,YAAYtqS,iBAAiB,UAAW2gB,KAAKy1Q,mBAEjDz1Q,KAAK4pR,YAAYM,KAClBlqR,KAAK4pR,YAAYM,GAAa,IAAIr5P,KAEtC7wB,KAAK4pR,YAAYM,GAAW/iR,IAAIojR,EACpC,CAQA,YAAAC,CAAaN,EAAWK,GAChBvqR,KAAK4pR,YAAYM,IAAcK,GAC/BvqR,KAAK4pR,YAAYM,GAAW94P,OAAOm5P,GAElCA,GAAqD,IAArCvqR,KAAK4pR,YAAYM,GAAW/nS,aACtC6d,KAAK4pR,YAAYM,GAEiB,IAAzCnwS,OAAOiC,KAAKgkB,KAAK4pR,aAAapwS,QAC9BwmB,KAAK2pR,YAAYrqS,oBAAoB,UAAW0gB,KAAKy1Q,kBAE7D,EAoBJ,SAASgV,GAAiBloP,EAAS,GAAImoP,EAAS,IAC5C,IAAI56Q,EAAS,GACb,IAAK,IAAIv2B,EAAI,EAAGA,EAAImxS,EAAQnxS,IACxBu2B,GAAUH,KAAKq2B,MAAsB,GAAhBr2B,KAAKG,UAE9B,OAAOyyB,EAASzyB,CACpB,CAxBA45Q,GAASG,UAAY,GA8CrB,MAAMc,GACF,WAAA9oQ,CAAYn9B,GACRsb,KAAKtb,OAASA,EACdsb,KAAKu8J,SAAW,IAAI1rI,GACxB,CAMA,oBAAA+5P,CAAqBr9J,GACbA,EAAQs9J,iBACRt9J,EAAQs9J,eAAe7hC,MAAM1pQ,oBAAoB,UAAWiuI,EAAQy0C,WACpEz0C,EAAQs9J,eAAe7hC,MAAM/wP,SAEjC+H,KAAKu8J,SAASnrI,OAAOm8F,EACzB,CAcA,WAAMu9J,CAAMZ,EAAWtgS,EAAM4yC,EAAU,IACnC,MAAMquP,EAA2C,qBAAnB/hC,eAAiC,IAAIA,eAAmB,KACtF,IAAK+hC,EACD,MAAM,IAAInnR,MAAM,0BAMpB,IAAIqnR,EACAx9J,EACJ,OAAO,IAAIpuG,SAAQ,CAACC,EAASC,KACzB,MAAM4qQ,EAAUQ,GAAiB,GAAI,IACrCI,EAAe7hC,MAAM9tO,QACrB,MAAM8vQ,EAAW18Q,YAAW,KACxB+Q,EAAO,IAAI3b,MAAM,qBAA2D,GAC7E84B,GACH+wF,EAAU,CACNs9J,iBACA,SAAA7oH,CAAUx9K,GACN,MAAMwlS,EAAexlS,EACrB,GAAIwlS,EAAapgS,KAAKqgS,UAAYA,EAGlC,OAAQD,EAAapgS,KAAK3G,QACtB,IAAK,MAEDquF,aAAa05M,GACbD,EAAkBz8Q,YAAW,KACzB+Q,EAAO,IAAI3b,MAAM,WAAuC,GACzD,KACH,MACJ,IAAK,OAED4tE,aAAay5M,GACb3rQ,EAAQ4qQ,EAAapgS,KAAK40B,UAC1B,MACJ,QACI8yD,aAAa05M,GACb15M,aAAay5M,GACb1rQ,EAAO,IAAI3b,MAAM,qBAG7B,GAEJ1D,KAAKu8J,SAASp1J,IAAIomH,GAClBs9J,EAAe7hC,MAAM3pQ,iBAAiB,UAAWkuI,EAAQy0C,WACzDhiK,KAAKtb,OAAOsjK,YAAY,CACpBkiI,YACAD,UACArgS,QACD,CAACihS,EAAe9hC,OAAO,IAC3BkiC,SAAQ,KACH19J,GACAvtH,KAAK4qR,qBAAqBr9J,EAC9B,GAER,EAuBJ,SAASiiH,KACL,OAAO/wP,MACX,CAqBA,SAASysS,KACL,MAAkD,qBAAnC17C,KAA6B,mBACF,oBAA/BA,KAAyB,aACxC,CAqCA,MAAMkzB,GAAU,yBAEVyoB,GAAsB,uBACtBC,GAAkB,YAOxB,MAAMC,GACF,WAAAxpQ,CAAYzX,GACRpK,KAAKoK,QAAUA,CACnB,CACA,SAAAkhR,GACI,OAAO,IAAInsQ,SAAQ,CAACC,EAASC,KACzBrf,KAAKoK,QAAQ/qB,iBAAiB,WAAW,KACrC+/B,EAAQpf,KAAKoK,QAAQvsB,OAAO,IAEhCmiB,KAAKoK,QAAQ/qB,iBAAiB,SAAS,KACnCggC,EAAOrf,KAAKoK,QAAQ1mB,MAAM,GAC5B,GAEV,EAEJ,SAAS6nS,GAAe/8F,EAAIg9F,GACxB,OAAOh9F,EACF60E,YAAY,CAAC8nB,IAAsBK,EAAc,YAAc,YAC/DloB,YAAY6nB,GACrB,CAKA,SAASM,KACL,MAAMrhR,EAAUggB,UAAU9U,KAAKotP,GAlChB,GAmCf,OAAO,IAAIvjP,SAAQ,CAACC,EAASC,KACzBjV,EAAQ/qB,iBAAiB,SAAS,KAC9BggC,EAAOjV,EAAQ1mB,MAAM,IAEzB0mB,EAAQ/qB,iBAAiB,iBAAiB,KACtC,MAAMmvM,EAAKpkL,EAAQvsB,OACnB,IACI2wM,EAAGw0E,kBAAkBmoB,GAAqB,CAAEhqM,QAASiqM,IACzD,CACA,MAAO9wS,GACH+kC,EAAO/kC,EACX,KAEJ8vB,EAAQ/qB,iBAAiB,WAAWomJ,UAChC,MAAM+oD,EAAKpkL,EAAQvsB,OAKd2wM,EAAGk9F,iBAAiB3/P,SAASo/P,IAO9B/rQ,EAAQovK,IALRA,EAAGv2L,cA3BnB,WACI,MAAMmS,EAAUggB,UAAUK,eAAei4O,IACzC,OAAO,IAAI2oB,GAAUjhR,GAASkhR,WAClC,CAyBsBK,GACNvsQ,QAAcqsQ,MAIlB,GACF,GAEV,CACAhmJ,eAAemmJ,GAAWp9F,EAAIt0M,EAAKE,GAC/B,MAAMgwB,EAAUmhR,GAAe/8F,GAAI,GAAMnlB,IAAI,CACzC,CAAC+hH,IAAkBlxS,EACnBE,UAEJ,OAAO,IAAIixS,GAAUjhR,GAASkhR,WAClC,CAMA,SAASO,GAAcr9F,EAAIt0M,GACvB,MAAMkwB,EAAUmhR,GAAe/8F,GAAI,GAAMp9J,OAAOl3C,GAChD,OAAO,IAAImxS,GAAUjhR,GAASkhR,WAClC,CAGA,MAAMQ,GACF,WAAAjqQ,GACI7hB,KAAKhiB,KAAO,QACZgiB,KAAKu2Q,uBAAwB,EAC7Bv2Q,KAAKuvJ,UAAY,CAAC,EAClBvvJ,KAAK2oR,WAAa,CAAC,EAGnB3oR,KAAK4oR,UAAY,KACjB5oR,KAAK+rR,cAAgB,EACrB/rR,KAAKm5P,SAAW,KAChBn5P,KAAKgsR,OAAS,KACdhsR,KAAKisR,gCAAiC,EACtCjsR,KAAKksR,oBAAsB,KAE3BlsR,KAAKmsR,6BACDnsR,KAAKosR,mCAAmC/9Q,MAAK,SAAW,QAChE,CACA,aAAMg+Q,GACF,OAAIrsR,KAAKwuL,KAGTxuL,KAAKwuL,SAAWi9F,MAFLzrR,KAAKwuL,EAIpB,CACA,kBAAM89F,CAAah4P,GACf,IAAIi4P,EAAc,EAClB,OACI,IACI,MAAM/9F,QAAWxuL,KAAKqsR,UACtB,aAAa/3P,EAAGk6J,EACpB,CACA,MAAOl0M,GACH,GAAIiyS,IAlCa,EAmCb,MAAMjyS,EAEN0lB,KAAKwuL,KACLxuL,KAAKwuL,GAAGv2L,QACR+H,KAAKwuL,QAAK51L,EAGlB,CAER,CAKA,sCAAMwzR,GACF,OAAOlB,KAAclrR,KAAKwsR,qBAAuBxsR,KAAKysR,kBAC1D,CAIA,wBAAMD,GACFxsR,KAAKm5P,SAAWuwB,GAASlV,aA/JtB0W,KAAcl8Q,KAAO,MAiKxBhP,KAAKm5P,SAASmxB,WAAW,cAA2C7kJ,MAAOinJ,EAAS9iS,KAEzE,CACH+iS,oBAFe3sR,KAAK4sR,SAED3yS,SAAS2P,EAAK1P,SAIzC8lB,KAAKm5P,SAASmxB,WAAW,QAA8B7kJ,MAAOinJ,EAAS5tI,IAC5D,CAAC,eAEhB,CAQA,sBAAM2tI,GACF,IAAIjlQ,EAAIC,EAGR,GADAznB,KAAKksR,0BAvMbzmJ,iBACI,KAAoB,OAAdt2H,gBAAoC,IAAdA,eAAuB,EAASA,UAAU09Q,eAClE,OAAO,KAEX,IAEI,aAD2B19Q,UAAU09Q,cAAc3iC,OAC/BpoQ,MACxB,CACA,MAAO0lC,GACH,OAAO,IACX,CACJ,CA4LyCslQ,IAC5B9sR,KAAKksR,oBACN,OAEJlsR,KAAKgsR,OAAS,IAAIrB,GAAO3qR,KAAKksR,qBAE9B,MAAMvpN,QAAgB3iE,KAAKgsR,OAAOlB,MAAM,OAA8B,CAAC,EAAG,KACrEnoN,IAGsB,QAArBn7C,EAAKm7C,EAAQ,UAAuB,IAAPn7C,OAAgB,EAASA,EAAG4O,aACpC,QAArB3O,EAAKk7C,EAAQ,UAAuB,IAAPl7C,OAAgB,EAASA,EAAGrtC,MAAMH,SAAS,iBAC1E+lB,KAAKisR,gCAAiC,EAE9C,CAUA,yBAAMc,CAAoB7yS,GAnN9B,IACQstC,EAmNA,GAAKxnB,KAAKgsR,QACLhsR,KAAKksR,uBAnNmF,QAAxF1kQ,EAAmB,OAAdrY,gBAAoC,IAAdA,eAAuB,EAASA,UAAU09Q,qBAAkC,IAAPrlQ,OAAgB,EAASA,EAAGwlQ,aAAe,QAoN1GhtR,KAAKksR,oBAG3C,UACUlsR,KAAKgsR,OAAOlB,MAAM,aAA2C,CAAE5wS,OAErE8lB,KAAKisR,+BACC,IACA,GACV,CACA,MAAOzkQ,GAEP,CACJ,CACA,kBAAMmtP,GACF,IACI,IAAKvqP,UACD,OAAO,EAEX,MAAMokK,QAAWi9F,KAGjB,aAFMG,GAAWp9F,EAAI65F,GAAuB,WACtCwD,GAAcr9F,EAAI65F,KACjB,CACX,CACA,MAAO7gQ,GAAM,CACb,OAAO,CACX,CACA,uBAAMylQ,CAAkBh/H,GACpBjuJ,KAAK+rR,gBACL,UACU99H,GACV,CACA,QACIjuJ,KAAK+rR,eACT,CACJ,CACA,UAAMnX,CAAK16R,EAAKE,GACZ,OAAO4lB,KAAKitR,mBAAkBxnJ,gBACpBzlI,KAAKssR,cAAc99F,GAAOo9F,GAAWp9F,EAAIt0M,EAAKE,KACpD4lB,KAAK2oR,WAAWzuS,GAAOE,EAChB4lB,KAAK+sR,oBAAoB7yS,KAExC,CACA,UAAM26R,CAAK36R,GACP,MAAMiiB,QAAa6D,KAAKssR,cAAc99F,GAhK9C/oD,eAAyB+oD,EAAIt0M,GACzB,MAAMkwB,EAAUmhR,GAAe/8F,GAAI,GAAO1lL,IAAI5uB,GACxC0P,QAAa,IAAIyhS,GAAUjhR,GAASkhR,YAC1C,YAAgB1yR,IAAThP,EAAqB,KAAOA,EAAKxP,KAC5C,CA4JqD8yS,CAAU1+F,EAAIt0M,KAE3D,OADA8lB,KAAK2oR,WAAWzuS,GAAOiiB,EAChBA,CACX,CACA,aAAM24Q,CAAQ56R,GACV,OAAO8lB,KAAKitR,mBAAkBxnJ,gBACpBzlI,KAAKssR,cAAc99F,GAAOq9F,GAAcr9F,EAAIt0M,YAC3C8lB,KAAK2oR,WAAWzuS,GAChB8lB,KAAK+sR,oBAAoB7yS,KAExC,CACA,WAAM0yS,GAEF,MAAM/uS,QAAemiB,KAAKssR,cAAc99F,IACpC,MAAM2+F,EAAgB5B,GAAe/8F,GAAI,GAAO+rE,SAChD,OAAO,IAAI8wB,GAAU8B,GAAe7B,WAAW,IAEnD,IAAKztS,EACD,MAAO,GAGX,GAA2B,IAAvBmiB,KAAK+rR,cACL,MAAO,GAEX,MAAM/vS,EAAO,GACPoxS,EAAe,IAAIv8P,IACzB,GAAsB,IAAlBhzC,EAAOrE,OACP,IAAK,MAAQ6zS,UAAWnzS,EAAG,MAAEE,KAAWyD,EACpCuvS,EAAajmR,IAAIjtB,GACbsrB,KAAKC,UAAUzF,KAAK2oR,WAAWzuS,MAAUsrB,KAAKC,UAAUrrB,KACxD4lB,KAAKipR,gBAAgB/uS,EAAKE,GAC1B4B,EAAKX,KAAKnB,IAItB,IAAK,MAAMozS,KAAYvzS,OAAOiC,KAAKgkB,KAAK2oR,YAChC3oR,KAAK2oR,WAAW2E,KAAcF,EAAa58P,IAAI88P,KAE/CttR,KAAKipR,gBAAgBqE,EAAU,MAC/BtxS,EAAKX,KAAKiyS,IAGlB,OAAOtxS,CACX,CACA,eAAAitS,CAAgB/uS,EAAKomF,GACjBtgE,KAAK2oR,WAAWzuS,GAAOomF,EACvB,MAAMivF,EAAYvvJ,KAAKuvJ,UAAUr1K,GACjC,GAAIq1K,EACA,IAAK,MAAM/uI,KAAY5mC,MAAM0Z,KAAKi8J,GAC9B/uI,EAAS8/C,EAGrB,CACA,YAAAswF,GACI5wJ,KAAK+wJ,cACL/wJ,KAAK4oR,UAAY39I,aAAYxF,SAAYzlI,KAAK4sR,SA9MzB,IA+MzB,CACA,WAAA77H,GACQ/wJ,KAAK4oR,YACLz9I,cAAcnrI,KAAK4oR,WACnB5oR,KAAK4oR,UAAY,KAEzB,CACA,YAAA7T,CAAa76R,EAAKsmC,GAC6B,IAAvCzmC,OAAOiC,KAAKgkB,KAAKuvJ,WAAW/1K,QAC5BwmB,KAAK4wJ,eAEJ5wJ,KAAKuvJ,UAAUr1K,KAChB8lB,KAAKuvJ,UAAUr1K,GAAO,IAAI22C,IAErB7wB,KAAK60Q,KAAK36R,IAEnB8lB,KAAKuvJ,UAAUr1K,GAAKitB,IAAIqZ,EAC5B,CACA,eAAAy0P,CAAgB/6R,EAAKsmC,GACbxgB,KAAKuvJ,UAAUr1K,KACf8lB,KAAKuvJ,UAAUr1K,GAAKk3C,OAAO5Q,GACM,IAA7BxgB,KAAKuvJ,UAAUr1K,GAAKiI,aACb6d,KAAKuvJ,UAAUr1K,IAGa,IAAvCH,OAAOiC,KAAKgkB,KAAKuvJ,WAAW/1K,QAC5BwmB,KAAK+wJ,aAEb,EAEJ+6H,GAA0B9tS,KAAO,QAOjC,MAAMuvS,GAA4BzB,GAkBlC,SAAS0B,GAAoBr+H,EAAM/kJ,GAC/B,OAAOwhQ,EAAmBz8G,EAAM,OAA8B,+BAAiEu8G,EAAmBv8G,EAAM/kJ,GAC5J,CA0ByB+0Q,GAAsB,OACjB,IAAIvU,EAAM,IAAO,KAmG/C,MAAM6iB,GAA0B,YA4ThChoJ,eAAeioJ,GAAmBv+H,EAAM5uK,EAAS2/R,GAC7C,IAAI14P,EACJ,IAAK2nI,EAAK4tH,sBACN,UACUgE,GAA2B5xH,EACrC,CACA,MAAOzrK,GAKH0c,QAAQI,IAAI,8FAChB,CAEJ,IACI,IAAImtR,EASJ,GAPIA,EADmB,kBAAZptS,EACY,CACf8sR,YAAa9sR,GAIEA,EAEnB,YAAaotS,EAAkB,CAC/B,MAAM5hR,EAAU4hR,EAAiB5hR,QACjC,GAAI,gBAAiB4hR,EAAkB,CACnCtjB,EAAyB,WAAjBt+P,EAAQ/tB,KAAuDmxK,EAAM,kBAC7E,MAAMy+H,EAAiC,CACnCzd,QAASpkQ,EAAQw5Q,WACjBlF,oBAAqB,CACjBhT,YAAasgB,EAAiBtgB,YAC9BwS,WAAY,oBAYdgO,EAAkCrN,GAAoBrxH,EAAMy+H,EAAgC,oBATxDnoJ,MAAOg7I,EAAcr2Q,KAE3D,GAAIA,EAAQi2Q,oBAAoBF,kBAAoBX,GAAY,CAC5DnV,GAAsB,OAAb6V,QAAkC,IAAbA,OAAsB,EAASA,EAASliS,QAAUyvS,GAAyBhN,EAAc,kBAEvH,OAAO2H,GAAoB3H,QADUqN,GAAuBrN,EAAcr2Q,EAAS81Q,GAEvF,CACA,OAAOkI,GAAoB3H,EAAcr2Q,EAAQ,GAEiJ,kBAItM,aAHuByjR,EAAgCzlQ,OAAM1kC,GAClDy7B,QAAQE,OAAO37B,MAEVqqS,iBAAiBpJ,WACrC,CACK,CACDta,EAAyB,WAAjBt+P,EAAQ/tB,KAAwDmxK,EAAM,kBAC9E,MAAM6+H,GAA+D,QAA3CxmQ,EAAKmmQ,EAAiBM,uBAAoC,IAAPzmQ,OAAgB,EAASA,EAAGgB,MACrGmlQ,EAAiBO,eACrB7jB,EAAQ2jB,EAAiB7+H,EAAM,6BAC/B,MAAMg/H,EAA6B,CAC/BC,qBAAsBriR,EAAQw5Q,WAC9ByI,kBACAzN,gBAAiB,CACbV,WAAY,oBAYdwO,EAA8B7N,GAAoBrxH,EAAMg/H,EAA4B,gBAThD1oJ,MAAOg7I,EAAcr2Q,KAE3D,GAAIA,EAAQm2Q,gBAAgBJ,kBAAoBX,GAAY,CACxDnV,GAAsB,OAAb6V,QAAkC,IAAbA,OAAsB,EAASA,EAASliS,QAAUyvS,GAAyBhN,EAAc,kBAEvH,OAAO+M,GAAoB/M,QADUqN,GAAuBrN,EAAcr2Q,EAAS81Q,GAEvF,CACA,OAAOsN,GAAoB/M,EAAcr2Q,EAAQ,GAEiI,kBAItL,aAHuBikR,EAA4BjmQ,OAAM1kC,GAC9Cy7B,QAAQE,OAAO37B,MAEV4qS,kBAAkB3J,WACtC,CACJ,CACK,CACD,MAAM4J,EAAmC,CACrClhB,YAAasgB,EAAiBtgB,YAC9BwS,WAAY,mBAWV2O,EAAoChO,GAAoBrxH,EAAMo/H,EAAkC,wBATtD9oJ,MAAOg7I,EAAcr2Q,KAEjE,GAAIA,EAAQ+1Q,kBAAoBX,GAAY,CACxCnV,GAAsB,OAAb6V,QAAkC,IAAbA,OAAsB,EAASA,EAASliS,QAAUyvS,GAAyBhN,EAAc,kBAEvH,OAAOsD,GAA0BtD,QADIqN,GAAuBrN,EAAcr2Q,EAAS81Q,GAEvF,CACA,OAAO6D,GAA0BtD,EAAcr2Q,EAAQ,GAE6J,kBAIxN,aAHuBokR,EAAkCpmQ,OAAM1kC,GACpDy7B,QAAQE,OAAO37B,MAEVihS,WACpB,CACJ,CACA,QACiB,OAAbzE,QAAkC,IAAbA,GAA+BA,EAASuO,QACjE,CACJ,CAgCAhpJ,eAAeqoJ,GAAuB3+H,EAAM/kJ,EAASskR,GACjDrkB,EAAQqkB,EAAoB1wS,OAASyvS,GAAyBt+H,EAAM,kBACpE,MAAMw/H,QAAyBD,EAAoB/O,SACnDtV,EAAoC,kBAArBskB,EAA+Bx/H,EAAM,kBACpD,MAAMixH,EAAarmS,OAAO+lB,OAAO,CAAC,EAAGsK,GACrC,GAAI,wBAAyBg2Q,EAAY,CACrC,MAAM/S,EAAc+S,EAAWC,oBAAoBhT,YAC7C8S,EAAkBC,EAAWC,oBAAoBF,gBACjDN,EAAaO,EACdC,oBAAoBR,WACnB+O,EAAmBxO,EAAWC,oBAAoBuO,iBAUxD,OATA70S,OAAO+lB,OAAOsgR,EAAY,CACtB,oBAAuB,CACnB/S,cACAiT,eAAgBqO,EAChBxO,kBACAN,aACA+O,sBAGDxO,CACX,CACK,GAAI,oBAAqBA,EAAY,CACtC,MAAMD,EAAkBC,EAAWG,gBAAgBJ,gBAC7CN,EAAaO,EACdG,gBAAgBV,WACf+O,EAAmBxO,EAAWG,gBAAgBqO,iBASpD,OARA70S,OAAO+lB,OAAOsgR,EAAY,CACtB,gBAAmB,CACfE,eAAgBqO,EAChBxO,kBACAN,aACA+O,sBAGDxO,CACX,CAGI,OADArmS,OAAO+lB,OAAOsgR,EAAY,CAAE,eAAkBuO,IACvCvO,CAEf,CAqCA,MAAMyO,GAKF,WAAAhtQ,CAAYstI,GAERnvJ,KAAK0wQ,WAAame,GAAkBvJ,YACpCtlR,KAAKmvJ,KAAOyvH,GAAUzvH,EAC1B,CAkCA,iBAAA2/H,CAAkBC,EAAcC,GAC5B,OAAOtB,GAAmB1tR,KAAKmvJ,KAAM4/H,GAAc,QAAmBC,GAC1E,CA4BA,iBAAOzJ,CAAWpB,EAAgBC,GAC9B,OAAOH,GAAoBC,kBAAkBC,EAAgBC,EACjE,CAKA,2BAAOsC,CAAqBC,GACxB,MAAMpB,EAAaoB,EACnB,OAAOkI,GAAkBjI,2BAA2BrB,EACxD,CAiCA,0BAAOsB,CAAoBnjS,GACvB,OAAOmrS,GAAkBjI,2BAA4BljS,EAAMonC,YAAc,CAAC,EAC9E,CACA,iCAAO87P,EAA6BtZ,eAAgBwZ,IAChD,IAAKA,EACD,OAAO,KAEX,MAAM,YAAEzZ,EAAW,eAAEiX,GAAmBwC,EACxC,OAAIzZ,GAAeiX,EACRL,GAAoBI,mBAAmBhX,EAAaiX,GAExD,IACX,EA4BJ,SAAS2K,GAAqB9/H,EAAM+/H,GAChC,OAAIA,EACO1a,GAAa0a,IAExB7kB,EAAQl7G,EAAKkrH,uBAAwBlrH,EAAM,kBACpCA,EAAKkrH,uBAChB,CA/BAwU,GAAkBvJ,YAAc,QAEhCuJ,GAAkBM,qBAAuB,QA+CzC,MAAMC,WAAsBnN,GACxB,WAAApgQ,CAAYgL,GACRzG,MAAM,SAAkC,UACxCpmB,KAAK6sB,OAASA,CAClB,CACA,mBAAAs1P,CAAoBhzH,GAChB,OAAOi0H,GAAcj0H,EAAMnvJ,KAAKqvR,mBACpC,CACA,cAAAhN,CAAelzH,EAAMghH,GACjB,OAAOiT,GAAcj0H,EAAMnvJ,KAAKqvR,iBAAiBlf,GACrD,CACA,4BAAAoS,CAA6BpzH,GACzB,OAAOi0H,GAAcj0H,EAAMnvJ,KAAKqvR,mBACpC,CACA,gBAAAA,CAAiBlf,GACb,MAAM/lQ,EAAU,CACZy5Q,WAAY7jR,KAAK6sB,OAAOg3P,WACxB7tI,UAAWh2I,KAAK6sB,OAAOmpH,UACvB8tI,SAAU9jR,KAAK6sB,OAAOi3P,SACtBnY,SAAU3rQ,KAAK6sB,OAAO8+O,SACtB2X,aAActjR,KAAK6sB,OAAOy2P,aAC1BL,mBAAmB,EACnBqM,qBAAqB,GAKzB,OAHInf,IACA/lQ,EAAQ+lQ,QAAUA,GAEf/lQ,CACX,EAEJ,SAASmlR,GAAQ1iQ,GACb,OAAOm7P,GAAsBn7P,EAAOsiI,KAAM,IAAIigI,GAAcviQ,GAASA,EAAO+hP,gBAChF,CACA,SAAS4gB,GAAQ3iQ,GACb,MAAM,KAAEsiI,EAAI,KAAEpwJ,GAAS8tB,EAEvB,OADAw9O,EAAQtrQ,EAAMowJ,EAAM,kBACb44H,GAAgBhpR,EAAM,IAAIqwR,GAAcviQ,GAASA,EAAO+hP,gBACnE,CACAnpI,eAAegqJ,GAAM5iQ,GACjB,MAAM,KAAEsiI,EAAI,KAAEpwJ,GAAS8tB,EAEvB,OADAw9O,EAAQtrQ,EAAMowJ,EAAM,kBACb24H,GAAQ/oR,EAAM,IAAIqwR,GAAcviQ,GAASA,EAAO+hP,gBAC3D,CAsBA,MAAM8gB,GACF,WAAA7tQ,CAAYstI,EAAMnrJ,EAAQ85Q,EAAU/+Q,EAAM6vQ,GAAkB,GACxD5uQ,KAAKmvJ,KAAOA,EACZnvJ,KAAK89Q,SAAWA,EAChB99Q,KAAKjB,KAAOA,EACZiB,KAAK4uQ,gBAAkBA,EACvB5uQ,KAAK2vR,eAAiB,KACtB3vR,KAAK4vR,aAAe,KACpB5vR,KAAKgE,OAASpqB,MAAMC,QAAQmqB,GAAUA,EAAS,CAACA,EACpD,CACA,OAAA+hI,GACI,OAAO,IAAI5mH,SAAQsmH,MAAOrmH,EAASC,KAC/Brf,KAAK2vR,eAAiB,CAAEvwQ,UAASC,UACjC,IACIrf,KAAK4vR,mBAAqB5vR,KAAK89Q,SAAS5C,YAAYl7Q,KAAKmvJ,YACnDnvJ,KAAK6vR,cACX7vR,KAAK4vR,aAAaE,iBAAiB9vR,KACvC,CACA,MAAO1lB,GACH0lB,KAAKqf,OAAO/kC,EAChB,IAER,CACA,iBAAMy1S,CAAYvrS,GACd,MAAM,YAAEwrS,EAAW,UAAEh6I,EAAS,SAAE8tI,EAAQ,SAAEnY,EAAQ,MAAEjoR,EAAK,KAAE1F,GAASwG,EACpE,GAAId,EAEA,YADAsc,KAAKqf,OAAO37B,GAGhB,MAAMmpC,EAAS,CACXsiI,KAAMnvJ,KAAKmvJ,KACX00H,WAAYmM,EACZh6I,UAAWA,EACX21H,SAAUA,QAAY/yQ,EACtBkrR,SAAUA,QAAYlrR,EACtBmG,KAAMiB,KAAKjB,KACX6vQ,gBAAiB5uQ,KAAK4uQ,iBAE1B,IACI5uQ,KAAKof,cAAcpf,KAAKiwR,WAAWjyS,EAAhBgiB,CAAsB6sB,GAC7C,CACA,MAAOvyC,GACH0lB,KAAKqf,OAAO/kC,EAChB,CACJ,CACA,OAAA2jB,CAAQva,GACJsc,KAAKqf,OAAO37B,EAChB,CACA,UAAAusS,CAAWjyS,GACP,OAAQA,GACJ,IAAK,iBACL,IAAK,oBACD,OAAOuxS,GACX,IAAK,eACL,IAAK,kBACD,OAAOE,GACX,IAAK,iBACL,IAAK,oBACD,OAAOD,GACX,QACI5lB,EAAM5pQ,KAAKmvJ,KAAM,kBAE7B,CACA,OAAA/vI,CAAQokQ,GACJhZ,EAAYxqQ,KAAK2vR,eAAgB,iCACjC3vR,KAAK2vR,eAAevwQ,QAAQokQ,GAC5BxjR,KAAKkwR,sBACT,CACA,MAAA7wQ,CAAO37B,GACH8mR,EAAYxqQ,KAAK2vR,eAAgB,iCACjC3vR,KAAK2vR,eAAetwQ,OAAO37B,GAC3Bsc,KAAKkwR,sBACT,CACA,oBAAAA,GACQlwR,KAAK4vR,cACL5vR,KAAK4vR,aAAaO,mBAAmBnwR,MAEzCA,KAAK2vR,eAAiB,KACtB3vR,KAAKowR,SACT,EAmBJ,MAAMC,GAA6B,IAAIzlB,EAAM,IAAM,KAqHnD,MAAM0lB,WAAuBZ,GACzB,WAAA7tQ,CAAYstI,EAAMnrJ,EAAQk6P,EAAU4f,EAAU/+Q,GAC1CqnB,MAAM+oI,EAAMnrJ,EAAQ85Q,EAAU/+Q,GAC9BiB,KAAKk+P,SAAWA,EAChBl+P,KAAKuwR,WAAa,KAClBvwR,KAAKwwR,OAAS,KACVF,GAAeG,oBACfH,GAAeG,mBAAmBzlM,SAEtCslM,GAAeG,mBAAqBzwR,IACxC,CACA,oBAAM0wR,GACF,MAAM7yS,QAAemiB,KAAK+lI,UAE1B,OADAskI,EAAQxsR,EAAQmiB,KAAKmvJ,KAAM,kBACpBtxK,CACX,CACA,iBAAMgyS,GACFrlB,EAAmC,IAAvBxqQ,KAAKgE,OAAOxqB,OAAc,0CACtC,MAAMywS,EAAUQ,KAChBzqR,KAAKuwR,iBAAmBvwR,KAAK89Q,SAAS6S,WAAW3wR,KAAKmvJ,KAAMnvJ,KAAKk+P,SAAUl+P,KAAKgE,OAAO,GACvFimR,GACAjqR,KAAKuwR,WAAWK,gBAAkB3G,EAQlCjqR,KAAK89Q,SAAS+S,kBAAkB7wR,KAAKmvJ,MAAM/mI,OAAM9tC,IAC7C0lB,KAAKqf,OAAO/kC,EAAE,IAElB0lB,KAAK89Q,SAASgT,6BAA6B9wR,KAAKmvJ,MAAMziF,IAC7CA,GACD1sE,KAAKqf,OAAO0qP,EAAa/pQ,KAAKmvJ,KAAM,2BACxC,IAGJnvJ,KAAK+wR,sBACT,CACA,WAAI9G,GACA,IAAIziQ,EACJ,OAAmC,QAA1BA,EAAKxnB,KAAKuwR,kBAA+B,IAAP/oQ,OAAgB,EAASA,EAAGopQ,kBAAoB,IAC/F,CACA,MAAA5lM,GACIhrF,KAAKqf,OAAO0qP,EAAa/pQ,KAAKmvJ,KAAM,2BACxC,CACA,OAAAihI,GACQpwR,KAAKuwR,YACLvwR,KAAKuwR,WAAWt4R,QAEhB+H,KAAKwwR,QACL/xS,OAAO6yF,aAAatxE,KAAKwwR,QAE7BxwR,KAAKuwR,WAAa,KAClBvwR,KAAKwwR,OAAS,KACdF,GAAeG,mBAAqB,IACxC,CACA,oBAAAM,GACI,MAAMtI,EAAO,KACT,IAAIjhQ,EAAIC,GAC6E,QAAhFA,EAAgC,QAA1BD,EAAKxnB,KAAKuwR,kBAA+B,IAAP/oQ,OAAgB,EAASA,EAAG/oC,cAA2B,IAAPgpC,OAAgB,EAASA,EAAGupQ,QAMrHhxR,KAAKwwR,OAAS/xS,OAAO6vB,YAAW,KAC5BtO,KAAKwwR,OAAS,KACdxwR,KAAKqf,OAAO0qP,EAAa/pQ,KAAKmvJ,KAAM,wBAAiE,GACtG,KAGPnvJ,KAAKwwR,OAAS/xS,OAAO6vB,WAAWm6Q,EAAM4H,GAA2BvnR,MAAM,EAE3E2/Q,GACJ,EAIJ6H,GAAeG,mBAAqB,KAkBpC,MAAMQ,GAAuB,kBAGvBC,GAAqB,IAAIvgQ,IAC/B,MAAMwgQ,WAAuBzB,GACzB,WAAA7tQ,CAAYstI,EAAM2uH,EAAUlP,GAAkB,GAC1CxoP,MAAM+oI,EAAM,CACR,oBACA,kBACA,oBACA,WACD2uH,OAAUllR,EAAWg2Q,GACxB5uQ,KAAKiqR,QAAU,IACnB,CAKA,aAAMlkJ,GACF,IAAIqrJ,EAAeF,GAAmBpoR,IAAI9I,KAAKmvJ,KAAKz1I,QACpD,IAAK03Q,EAAc,CACf,IACI,MACMvzS,QAsCtB4nJ,eAAiDq4I,EAAU3uH,GACvD,MAAMj1K,EAAMm3S,GAAmBliI,GACzBkmH,EAAcic,GAAoBxT,GACxC,UAAYzI,EAAYV,eACpB,OAAO,EAEX,MAAM4c,EAAuD,eAA3Blc,EAAYR,KAAK36R,GAEnD,aADMm7R,EAAYP,QAAQ56R,GACnBq3S,CACX,CAhDiDC,CAAkCxxR,KAAK89Q,SAAU99Q,KAAKmvJ,YAC7C/oI,MAAM2/G,UAAY,KAC5DqrJ,EAAe,IAAMjyQ,QAAQC,QAAQvhC,EACzC,CACA,MAAOvD,GACH82S,EAAe,IAAMjyQ,QAAQE,OAAO/kC,EACxC,CACA42S,GAAmBzgQ,IAAIzwB,KAAKmvJ,KAAKz1I,OAAQ03Q,EAC7C,CAMA,OAHKpxR,KAAK4uQ,iBACNsiB,GAAmBzgQ,IAAIzwB,KAAKmvJ,KAAKz1I,QAAQ,IAAMyF,QAAQC,QAAQ,QAE5DgyQ,GACX,CACA,iBAAMrB,CAAYvrS,GACd,GAAmB,sBAAfA,EAAMxG,KACN,OAAOooC,MAAM2pQ,YAAYvrS,GAExB,GAAmB,YAAfA,EAAMxG,MAKf,GAAIwG,EAAMylS,QAAS,CACf,MAAMlrR,QAAaiB,KAAKmvJ,KAAK6uH,mBAAmBx5R,EAAMylS,SACtD,GAAIlrR,EAEA,OADAiB,KAAKjB,KAAOA,EACLqnB,MAAM2pQ,YAAYvrS,GAGzBwb,KAAKof,QAAQ,KAErB,OAZIpf,KAAKof,QAAQ,KAarB,CACA,iBAAMywQ,GAAgB,CACtB,OAAAO,GAAY,EAkBhB,SAASlU,GAAwB/sH,EAAMtxK,GACnCqzS,GAAmBzgQ,IAAI0+H,EAAKz1I,OAAQ77B,EACxC,CACA,SAASyzS,GAAoBxT,GACzB,OAAOtJ,GAAasJ,EAASC,qBACjC,CACA,SAASsT,GAAmBliI,GACxB,OAAOgmH,GAAoB8b,GAAsB9hI,EAAKv8I,OAAOtV,OAAQ6xJ,EAAKvqK,KAC9E,CAkOA6gJ,eAAegsJ,GAAmBtiI,EAAMuiI,EAAgB9iB,GAAkB,GACtE,IAAI,QAAqBz/G,EAAKjlJ,KAC1B,OAAOiV,QAAQE,OAAO6qP,EAAgD/6G,IAE1E,MAAM6xH,EAAepC,GAAUzvH,GACzB2uH,EAAWmR,GAAqBjO,EAAc0Q,GAC9Cx6P,EAAS,IAAIi6P,GAAenQ,EAAclD,EAAUlP,GACpD/wR,QAAeq5C,EAAO6uG,UAM5B,OALIloJ,IAAW+wR,WACJ/wR,EAAOkhB,KAAKk1Q,uBACb+M,EAAahO,sBAAsBn1R,EAAOkhB,YAC1CiiR,EAAa1E,iBAAiB,KAAMoV,IAEvC7zS,CACX,CA4BA,MAAM8zS,GACF,WAAA9vQ,CAAYstI,GACRnvJ,KAAKmvJ,KAAOA,EACZnvJ,KAAK4xR,gBAAkB,IAAI/gQ,IAC3B7wB,KAAK6xR,UAAY,IAAIhhQ,IACrB7wB,KAAK8xR,oBAAsB,KAC3B9xR,KAAK+xR,6BAA8B,EACnC/xR,KAAKgyR,uBAAyB9oS,KAAKD,KACvC,CACA,gBAAA6mS,CAAiBmC,GACbjyR,KAAK6xR,UAAU1qR,IAAI8qR,GACfjyR,KAAK8xR,qBACL9xR,KAAKkyR,mBAAmBlyR,KAAK8xR,oBAAqBG,KAClDjyR,KAAKmyR,eAAenyR,KAAK8xR,oBAAqBG,GAC9CjyR,KAAKoyR,iBAAiBpyR,KAAK8xR,qBAC3B9xR,KAAK8xR,oBAAsB,KAEnC,CACA,kBAAA3B,CAAmB8B,GACfjyR,KAAK6xR,UAAUzgQ,OAAO6gQ,EAC1B,CACA,OAAAI,CAAQ7tS,GAEJ,GAAIwb,KAAKsyR,oBAAoB9tS,GACzB,OAAO,EAEX,IAAIksB,GAAU,EAQd,OAPA1Q,KAAK6xR,UAAUjvS,SAAQ2vS,IACfvyR,KAAKkyR,mBAAmB1tS,EAAO+tS,KAC/B7hR,GAAU,EACV1Q,KAAKmyR,eAAe3tS,EAAO+tS,GAC3BvyR,KAAKoyR,iBAAiB5tS,GAC1B,IAEAwb,KAAK+xR,8BAgDjB,SAAyBvtS,GACrB,OAAQA,EAAMxG,MACV,IAAK,oBACL,IAAK,kBACL,IAAK,oBACD,OAAO,EACX,IAAK,UACD,OAAOw0S,GAAoBhuS,GAC/B,QACI,OAAO,EAEnB,CA3DiDiuS,CAAgBjuS,KAKzDwb,KAAK+xR,6BAA8B,EAE9BrhR,IACD1Q,KAAK8xR,oBAAsBttS,EAC3BksB,GAAU,IANHA,CASf,CACA,cAAAyhR,CAAe3tS,EAAO+tS,GAClB,IAAI/qQ,EACJ,GAAIhjC,EAAMd,QAAU8uS,GAAoBhuS,GAAQ,CAC5C,MAAM4nB,GAAoC,QAA3Bob,EAAKhjC,EAAMd,MAAM0oB,YAAyB,IAAPob,OAAgB,EAASA,EAAGzjB,MAAM,SAAS,KACzF,iBACJwuR,EAASt0R,QAAQ8rQ,EAAa/pQ,KAAKmvJ,KAAM/iJ,GAC7C,MAEImmR,EAASxC,YAAYvrS,EAE7B,CACA,kBAAA0tS,CAAmB1tS,EAAO+tS,GACtB,MAAMG,EAAsC,OAArBH,EAAStI,WACzBzlS,EAAMylS,SAAWzlS,EAAMylS,UAAYsI,EAAStI,QACnD,OAAOsI,EAASvuR,OAAO/pB,SAASuK,EAAMxG,OAAS00S,CACnD,CACA,mBAAAJ,CAAoB9tS,GAKhB,OAJI0E,KAAKD,MAAQ+W,KAAKgyR,wBAjEc,KAmEhChyR,KAAK4xR,gBAAgB9pR,QAElB9H,KAAK4xR,gBAAgBphQ,IAAImiQ,GAASnuS,GAC7C,CACA,gBAAA4tS,CAAiB5tS,GACbwb,KAAK4xR,gBAAgBzqR,IAAIwrR,GAASnuS,IAClCwb,KAAKgyR,uBAAyB9oS,KAAKD,KACvC,EAEJ,SAAS0pS,GAASr4S,GACd,MAAO,CAACA,EAAE0D,KAAM1D,EAAE2vS,QAAS3vS,EAAE07J,UAAW17J,EAAEqxR,UAAU3nQ,QAAO/B,GAAKA,IAAGrD,KAAK,IAC5E,CACA,SAAS4zR,IAAoB,KAAEx0S,EAAI,MAAE0F,IACjC,MAAiB,YAAT1F,GAC2D,wBAApD,OAAV0F,QAA4B,IAAVA,OAAmB,EAASA,EAAM0oB,KAC7D,CAkDA,MAAMwmR,GAAmB,uCACnBC,GAAa,UACnBptJ,eAAeqtJ,GAAgB3jI,GAE3B,GAAIA,EAAKv8I,OAAOq4P,SACZ,OAEJ,MAAM,kBAAE8nB,SA3BZttJ,eAAiC0pB,EAAM/kJ,EAAU,CAAC,GAC9C,OAAOwhQ,EAAmBz8G,EAAM,MAA4B,eAAkD/kJ,EAClH,CAyBwC4oR,CAAkB7jI,GACtD,IAAK,MAAM/iC,KAAU2mK,EACjB,IACI,GAAIE,GAAY7mK,GACZ,MAER,CACA,MAAO5kG,GAEP,CAGJoiP,EAAMz6G,EAAM,sBAChB,CACA,SAAS8jI,GAAYC,GACjB,MAAMx5C,EAAa+wB,KACb,SAAE90P,EAAQ,SAAE8xG,GAAa,IAAIlpF,IAAIm7M,GACvC,GAAIw5C,EAAS3yP,WAAW,uBAAwB,CAC5C,MAAM4yP,EAAQ,IAAI50P,IAAI20P,GACtB,MAAuB,KAAnBC,EAAM1rK,UAAgC,KAAbA,EAEJ,sBAAb9xG,GACJu9Q,EAAShtS,QAAQ,sBAAuB,MACpCwzP,EAAWxzP,QAAQ,sBAAuB,IAElC,sBAAbyvB,GAAoCw9Q,EAAM1rK,WAAaA,CAClE,CACA,IAAKorK,GAAWzzR,KAAKuW,GACjB,OAAO,EAEX,GAAIi9Q,GAAiBxzR,KAAK8zR,GAGtB,OAAOzrK,IAAayrK,EAGxB,MAAME,EAAuBF,EAAShtS,QAAQ,MAAO,OAIrD,OADW,IAAImjB,OAAO,UAAY+pR,EAAuB,IAAMA,EAAuB,KAAM,KAClFh0R,KAAKqoH,EACnB,CAkBA,MAAM4rK,GAAkB,IAAIzoB,EAAM,IAAO,KAKzC,SAAS0oB,KAIL,MAAMC,EAAS/jD,KAAUgkD,OAEzB,GAAe,OAAXD,QAA8B,IAAXA,OAAoB,EAASA,EAAO3hQ,EAEvD,IAAK,MAAMi3O,KAAQ9uR,OAAOiC,KAAKu3S,EAAO3hQ,GAQlC,GANA2hQ,EAAO3hQ,EAAEi3O,GAAMpuR,EAAI84S,EAAO3hQ,EAAEi3O,GAAMpuR,GAAK,GAEvC84S,EAAO3hQ,EAAEi3O,GAAMv4O,EAAIijQ,EAAO3hQ,EAAEi3O,GAAMv4O,GAAK,GAEvCijQ,EAAO3hQ,EAAEi3O,GAAMpuR,EAAI,IAAI84S,EAAO3hQ,EAAEi3O,GAAMv4O,GAElCijQ,EAAOE,GACP,IAAK,IAAIl6S,EAAI,EAAGA,EAAIg6S,EAAOE,GAAGj6S,OAAQD,IAElCg6S,EAAOE,GAAGl6S,GAAK,IAKnC,CACA,SAASm6S,GAASvkI,GACd,OAAO,IAAIhwI,SAAQ,CAACC,EAASC,KACzB,IAAImI,EAAIC,EAAIqO,EAEZ,SAAS69P,IAGLL,KACAM,KAAKr0R,KAAK,eAAgB,CACtB4oB,SAAU,KACN/I,EAAQw0Q,KAAKC,QAAQthR,aAAa,EAEtCuhR,UAAW,KAOPR,KACAj0Q,EAAO0qP,EAAa56G,EAAM,0BAAqE,EAEnG3yH,QAAS62P,GAAgBvqR,OAEjC,CACA,GAAqF,QAAhF2e,EAA+B,QAAzBD,EAAKgoN,KAAUokD,YAAyB,IAAPpsQ,OAAgB,EAASA,EAAGqsQ,eAA4B,IAAPpsQ,OAAgB,EAASA,EAAGssQ,OAErH30Q,EAAQw0Q,KAAKC,QAAQthR,kBAEpB,MAAiC,QAAzBujB,EAAK05M,KAAUokD,YAAyB,IAAP99P,OAAgB,EAASA,EAAGv2B,MAIrE,CAMD,MAAMy0R,EAAS7U,GAAsB,aAarC,OAXA3vC,KAAUwkD,GAAU,KAEVJ,KAAKr0R,KACPo0R,IAIAt0Q,EAAO0qP,EAAa56G,EAAM,0BAC9B,EAGG+vH,GAAQ,GAhtNhBL,GAAmBI,qBAgtN2B+U,KACxC5rQ,OAAM9tC,GAAK+kC,EAAO/kC,IAC3B,CAvBIq5S,GAuBJ,KACDvrQ,OAAM1kC,IAGL,MADAuwS,GAAmB,KACbvwS,CAAK,GAEnB,CACA,IAAIuwS,GAAmB,KAsBvB,MAAMC,GAAe,IAAItpB,EAAM,IAAM,MAC/BupB,GAAc,iBACdC,GAAuB,uBACvBC,GAAoB,CACtBx3S,MAAO,CACH2xF,SAAU,WACVhtF,IAAK,SACLrE,MAAO,MACPC,OAAQ,OAEZ,cAAe,OACfmqO,SAAU,MAIR+sE,GAAmB,IAAI3jQ,IAAI,CAC7B,CAAC,iCAA+D,KAChE,CAAC,iDAAkD,KACnD,CAAC,8CAA+C,OAEpD,SAAS4jQ,GAAaplI,GAClB,MAAMv8I,EAASu8I,EAAKv8I,OACpBy3P,EAAQz3P,EAAOipQ,WAAY1sH,EAAM,+BACjC,MAAMp6I,EAAMnC,EAAOq4P,SACbD,EAAap4P,EAAQwhR,IACrB,WAAWjlI,EAAKv8I,OAAOipQ,cAAcsY,KACrCtnQ,EAAS,CACXvvB,OAAQsV,EAAOtV,OACfsvE,QAASuiF,EAAKvqK,KACdqd,EAAG,MAEDuyR,EAAMF,GAAiBxrR,IAAIqmJ,EAAKv8I,OAAOu5P,SACzCqoB,IACA3nQ,EAAO2nQ,IAAMA,GAEjB,MAAMpd,EAAajoH,EAAKmvH,iBAIxB,OAHIlH,EAAW59R,SACXqzC,EAAO4nQ,GAAKrd,EAAWx4Q,KAAK,MAEzB,GAAGmW,MAAO,QAAY8X,GAAQtpC,MAAM,IAC/C,CACAkiJ,eAAeivJ,GAAYvlI,GACvB,MAAMrwJ,QA/DV,SAAmBqwJ,GAEf,OADA8kI,GAAmBA,IAAoBP,GAASvkI,GACzC8kI,EACX,CA4D0BU,CAAUxlI,GAC1BykI,EAAOpkD,KAAUokD,KAEvB,OADAvpB,EAAQupB,EAAMzkI,EAAM,kBACbrwJ,EAAQwW,KAAK,CAChBs/Q,MAAOl6S,SAASme,KAChBkc,IAAKw/Q,GAAaplI,GAClB0lI,sBAAuBjB,EAAKC,QAAQiB,4BACpC/4S,WAAYs4S,GACZU,WAAW,IACXC,GAAW,IAAI71Q,SAAQsmH,MAAOrmH,EAASC,WACjC21Q,EAAOC,QAAQ,CAEjBC,gBAAgB,IAEpB,MAAMC,EAAeprB,EAAa56G,EAAM,0BAGlCimI,EAAoB5lD,KAAUlhO,YAAW,KAC3C+Q,EAAO81Q,EAAa,GACrBjB,GAAaprR,OAEhB,SAASusR,IACL7lD,KAAUl+J,aAAa8jN,GACvBh2Q,EAAQ41Q,EACZ,CAGAA,EAAOM,KAAKD,GAAsBhnR,KAAKgnR,GAAsB,KACzDh2Q,EAAO81Q,EAAa,GACtB,KAEV,CAkBA,MAAMI,GAAqB,CACvBr1R,SAAU,MACVs1R,UAAW,MACXC,UAAW,MACXC,QAAS,MAMb,MAAMC,GACF,WAAA9zQ,CAAYpjC,GACRuhB,KAAKvhB,OAASA,EACduhB,KAAK4wR,gBAAkB,IAC3B,CACA,KAAA34R,GACI,GAAI+H,KAAKvhB,OACL,IACIuhB,KAAKvhB,OAAOwZ,OAChB,CACA,MAAO3d,GAAK,CAEpB,EAEJ,SAASs7S,GAAMzmI,EAAMp6I,EAAKnwB,EAAMzH,EAlBV,IAkBiCC,EAjBhC,KAkBnB,MAAMoE,EAAMmuB,KAAKhT,KAAKle,OAAO85B,OAAO4qD,YAAc/lF,GAAU,EAAG,GAAGtD,WAC5D2a,EAAOkb,KAAKhT,KAAKle,OAAO85B,OAAO2qD,WAAa/lF,GAAS,EAAG,GAAGrD,WACjE,IAAI4K,EAAS,GACb,MAAMnE,EAAUxG,OAAO+lB,OAAO/lB,OAAO+lB,OAAO,CAAC,EAAGy1R,IAAqB,CAAEp4S,MAAOA,EAAMrD,WAAYsD,OAAQA,EAAOtD,WAAY0H,MACvHiT,SAGEw1B,GAAK,UAAQxjB,cACf7hB,IACAF,EAASoyR,GAAa7sP,GA1BT,SA0B8BrlC,GAE3C8xR,GAAWzsP,KAEXlV,EAAMA,GA7BY,mBAgClBx0B,EAAQs1S,WAAa,OAEzB,MAAMC,EAAgB/7S,OAAO+yC,QAAQvsC,GAASqhD,QAAO,CAACjmC,GAAQzhB,EAAKE,KAAW,GAAGuhB,IAAQzhB,KAAOE,MAAU,IAC1G,GAjzPJ,SAA0B6vC,GAAK,WAC3B,IAAIzC,EACJ,OAAOwvP,GAAO/sP,OAAsC,QAA3BzC,EAAK/oC,OAAO0wB,iBAA8B,IAAPqY,OAAgB,EAASA,EAAG+iK,WAC5F,CA8yPQwrG,CAAiB9rQ,IAAkB,UAAXvlC,EAExB,OAaR,SAA4BqwB,EAAKrwB,GAC7B,MAAM8O,EAAK9Y,SAASmB,cAAc,KAClC2X,EAAGlO,KAAOyvB,EACVvhB,EAAG9O,OAASA,EACZ,MAAMggO,EAAQhqO,SAASqqF,YAAY,cACnC2/I,EAAMsxE,eAAe,SAAS,GAAM,EAAMv3S,OAAQ,EAAG,EAAG,EAAG,EAAG,GAAG,GAAO,GAAO,GAAO,EAAO,EAAG,MAChG+U,EAAGqnC,cAAc6pL,EACrB,CArBQuxE,CAAmBlhR,GAAO,GAAIrwB,GACvB,IAAIixS,GAAU,MAIzB,MAAMO,EAASz3S,OAAO62B,KAAKP,GAAO,GAAIrwB,EAAQoxS,GAC9CzrB,EAAQ6rB,EAAQ/mI,EAAM,iBAEtB,IACI+mI,EAAO9hH,OACX,CACA,MAAO95L,GAAK,CACZ,OAAO,IAAIq7S,GAAUO,EACzB,CA+BA,MAAMC,GAAc,kBAMdC,GAAuB,wBAMvBC,GAAiCzgR,mBAAmB,OAC1D6vH,eAAe6wJ,GAAgBnnI,EAAM+uG,EAAUj5C,EAAUsxE,EAAatM,EAASuM,GAC3EnsB,EAAQl7G,EAAKv8I,OAAOipQ,WAAY1sH,EAAM,+BACtCk7G,EAAQl7G,EAAKv8I,OAAOtV,OAAQ6xJ,EAAM,mBAClC,MAAMtiI,EAAS,CACXvvB,OAAQ6xJ,EAAKv8I,OAAOtV,OACpBsvE,QAASuiF,EAAKvqK,KACdqgO,WACAsxE,cACAt0R,EAAG,KACHgoR,WAEJ,GAAI/rB,aAAoB2nB,GAAuB,CAC3C3nB,EAAS8nB,mBAAmB72H,EAAK68G,cACjCn/O,EAAO6jP,WAAaxS,EAASwS,YAAc,IACtC,QAAQxS,EAASioB,yBAClBt5P,EAAOk5P,iBAAmBvgR,KAAKC,UAAUy4P,EAASioB,wBAGtD,IAAK,MAAOjsS,EAAKE,KAAUL,OAAO+yC,QAAQ0pQ,GAAoB,CAAC,GAC3D3pQ,EAAO3yC,GAAOE,CAEtB,CACA,GAAI8jR,aAAoBkoB,GAAmB,CACvC,MAAMC,EAASnoB,EAASqoB,YAAYviR,QAAO2gN,GAAmB,KAAVA,IAChD0hE,EAAO7sS,OAAS,IAChBqzC,EAAOw5P,OAASA,EAAOznR,KAAK,KAEpC,CACIuwJ,EAAKw8G,WACL9+O,EAAO4pQ,IAAMtnI,EAAKw8G,UAItB,MAAM+qB,EAAa7pQ,EACnB,IAAK,MAAM3yC,KAAOH,OAAOiC,KAAK06S,QACF99R,IAApB89R,EAAWx8S,WACJw8S,EAAWx8S,GAI1B,MAAMskS,QAAsBrvH,EAAKsvH,oBAC3BkY,EAAwBnY,EACxB,IAAI6X,MAAkCzgR,mBAAmB4oQ,KACzD,GAEN,MAAO,GAEX,UAAwB,OAAE5rQ,IACtB,IAAKA,EAAOq4P,SACR,MAAO,WAAWr4P,EAAOipQ,cAAcsa,KAE3C,OAAOnrB,EAAap4P,EAAQwjR,GAChC,CAPcQ,CAAeznI,OAAS,QAAYunI,GAAYnzS,MAAM,KAAKozS,GACzE,CA4BA,MAAME,GAA0B,oBA0FhC,MAAMC,GAzFN,MACI,WAAAj1Q,GACI7hB,KAAK+2R,cAAgB,CAAC,EACtB/2R,KAAK6zR,QAAU,CAAC,EAChB7zR,KAAKg3R,yBAA2B,CAAC,EACjCh3R,KAAK+9Q,qBAAuB0L,GAC5BzpR,KAAKq8Q,oBAAsBoV,GAC3BzxR,KAAKk8Q,wBAA0BA,EACnC,CAGA,gBAAMyU,CAAWxhI,EAAM+uG,EAAUj5C,EAAUglE,GACvC,IAAIziQ,EACJgjP,EAAuD,QAA1ChjP,EAAKxnB,KAAK+2R,cAAc5nI,EAAKz1I,eAA4B,IAAP8N,OAAgB,EAASA,EAAG+qP,QAAS,gDAEpG,OAAOqjB,GAAMzmI,QADKmnI,GAAgBnnI,EAAM+uG,EAAUj5C,EAAUwlD,IAAkBwf,GACtDQ,KAC5B,CACA,mBAAMwM,CAAc9nI,EAAM+uG,EAAUj5C,EAAUglE,SACpCjqR,KAAK6wR,kBAAkB1hI,GAG7B,OA1gFR,SAA4Bp6I,GACxBy6N,KAAUtvO,SAAS5a,KAAOyvB,CAC9B,CAugFQmiR,OADkBZ,GAAgBnnI,EAAM+uG,EAAUj5C,EAAUwlD,IAAkBwf,IAEvE,IAAI9qQ,SAAQ,QACvB,CACA,WAAA+7P,CAAY/rH,GACR,MAAMj1K,EAAMi1K,EAAKz1I,OACjB,GAAI1Z,KAAK+2R,cAAc78S,GAAM,CACzB,MAAM,QAAEq4R,EAAO,QAAEzxP,GAAY9gB,KAAK+2R,cAAc78S,GAChD,OAAIq4R,EACOpzP,QAAQC,QAAQmzP,IAGvB/H,EAAY1pP,EAAS,4CACdA,EAEf,CACA,MAAMA,EAAU9gB,KAAKm3R,kBAAkBhoI,GAOvC,OANAnvJ,KAAK+2R,cAAc78S,GAAO,CAAE4mC,WAG5BA,EAAQsH,OAAM,YACHpoB,KAAK+2R,cAAc78S,EAAI,IAE3B4mC,CACX,CACA,uBAAMq2Q,CAAkBhoI,GACpB,MAAM6lI,QAAeN,GAAYvlI,GAC3BojH,EAAU,IAAIof,GAAiBxiI,GASrC,OARA6lI,EAAO70J,SAAS,aAAci3J,IAC1B/sB,EAAwB,OAAhB+sB,QAAwC,IAAhBA,OAAyB,EAASA,EAAYC,UAAWloI,EAAM,sBAG/F,MAAO,CAAElsK,OADOsvR,EAAQ8f,QAAQ+E,EAAYC,WACjB,MAA8B,QAAiC,GAC3FzD,KAAKC,QAAQiB,6BAChB90R,KAAK+2R,cAAc5nI,EAAKz1I,QAAU,CAAE64P,WACpCvyQ,KAAK6zR,QAAQ1kI,EAAKz1I,QAAUs7Q,EACrBziB,CACX,CACA,4BAAAue,CAA6B3hI,EAAMrhJ,GAChB9N,KAAK6zR,QAAQ1kI,EAAKz1I,QAC1BnE,KAAKshR,GAAyB,CAAE74S,KAAM64S,KAA2Bh5S,IACpE,IAAI2pC,EACJ,MAAMklD,EAAmF,QAApEllD,EAAgB,OAAX3pC,QAA8B,IAAXA,OAAoB,EAASA,EAAO,UAAuB,IAAP2pC,OAAgB,EAASA,EAAGqvQ,SACzGj+R,IAAhB8zE,GACA5+D,IAAK4+D,GAETk9L,EAAMz6G,EAAM,iBAAoD,GACjEykI,KAAKC,QAAQiB,4BACpB,CACA,iBAAAjE,CAAkB1hI,GACd,MAAMj1K,EAAMi1K,EAAKz1I,OAIjB,OAHK1Z,KAAKg3R,yBAAyB98S,KAC/B8lB,KAAKg3R,yBAAyB98S,GAAO44S,GAAgB3jI,IAElDnvJ,KAAKg3R,yBAAyB98S,EACzC,CACA,0BAAI+gS,GAEA,OAAOhE,MAAsBJ,MAAeG,IAChD,GAyOJ,IAAI,GAAO,iBACP/jQ,GAAU,QAkBd,MAAMqkR,GACF,WAAAz1Q,CAAYstI,GACRnvJ,KAAKmvJ,KAAOA,EACZnvJ,KAAKu3R,kBAAoB,IAAI5mQ,GACjC,CACA,MAAA6mQ,GACI,IAAIhwQ,EAEJ,OADAxnB,KAAKy3R,wBACoC,QAAhCjwQ,EAAKxnB,KAAKmvJ,KAAK2/G,mBAAgC,IAAPtnP,OAAgB,EAASA,EAAGgB,MAAQ,IACzF,CACA,cAAM2kI,CAASykH,GAGX,GAFA5xQ,KAAKy3R,6BACCz3R,KAAKmvJ,KAAKirH,wBACXp6Q,KAAKmvJ,KAAK2/G,YACX,OAAO,KAGX,MAAO,CAAEwC,kBADiBtxQ,KAAKmvJ,KAAK2/G,YAAYY,WAAWkC,GAE/D,CACA,oBAAA8lB,CAAqBl3Q,GAEjB,GADAxgB,KAAKy3R,uBACDz3R,KAAKu3R,kBAAkB/mQ,IAAIhQ,GAC3B,OAEJ,MAAM+1H,EAAcv2I,KAAKmvJ,KAAKsuH,kBAAiB1+Q,IAC3CyhB,GAAmB,OAATzhB,QAA0B,IAATA,OAAkB,EAASA,EAAKywQ,gBAAgB8B,cAAgB,KAAK,IAEpGtxQ,KAAKu3R,kBAAkB9mQ,IAAIjQ,EAAU+1H,GACrCv2I,KAAK23R,wBACT,CACA,uBAAAC,CAAwBp3Q,GACpBxgB,KAAKy3R,uBACL,MAAMlhJ,EAAcv2I,KAAKu3R,kBAAkBzuR,IAAI0X,GAC1C+1H,IAGLv2I,KAAKu3R,kBAAkBnmQ,OAAO5Q,GAC9B+1H,IACAv2I,KAAK23R,yBACT,CACA,oBAAAF,GACIptB,EAAQrqQ,KAAKmvJ,KAAKirH,uBAAwB,wCAC9C,CACA,sBAAAud,GACQ33R,KAAKu3R,kBAAkBp1S,KAAO,EAC9B6d,KAAKmvJ,KAAKykH,yBAGV5zQ,KAAKmvJ,KAAK0kH,uBAElB,EA8FJ,MACMgkB,IAAoB,QAAuB,sBADhB,IAEjC,IAAIC,GAAoB,KACxB,MAAMC,GAAqBhjR,GAAQ0wH,MAAO1mI,IACtC,MAAMi5R,EAAgBj5R,SAAeA,EAAKm0Q,mBACpC+kB,EAAaD,KACd,IAAI9uS,MAAO+mB,UAAY/mB,KAAKia,MAAM60R,EAAc1kB,eAAiB,IACtE,GAAI2kB,GAAcA,EAAaJ,GAC3B,OAGJ,MAAM1nB,EAA4B,OAAlB6nB,QAA4C,IAAlBA,OAA2B,EAASA,EAAc1vQ,MACxFwvQ,KAAsB3nB,IAG1B2nB,GAAoB3nB,QACdrxP,MAAM/J,EAAK,CACb7V,OAAQixQ,EAAU,OAAS,SAC3Bn5I,QAASm5I,EACH,CACE,cAAiB,UAAUA,KAE7B,CAAC,IACT,EAUN,SAAS+nB,GAAQhuR,GAAM,WACnB,MAAMg0P,GAAW,QAAah0P,EAAK,QACnC,GAAIg0P,EAASgI,gBACT,OAAOhI,EAASG,eAEpB,MAAMlvG,EAvjOV,SAAwBjlJ,EAAKigM,GACzB,MAAM+zD,GAAW,QAAah0P,EAAK,QACnC,GAAIg0P,EAASgI,gBAAiB,CAC1B,MAAM/2G,EAAO+uG,EAASG,eAChB85B,EAAiBj6B,EAAS0I,aAChC,IAAI,QAAUuxB,EAAyB,OAAThuF,QAA0B,IAATA,EAAkBA,EAAO,CAAC,GACrE,OAAOh7C,EAGPy6G,EAAMz6G,EAAM,sBAEpB,CAEA,OADa+uG,EAAS7uC,WAAW,CAAE9uO,QAAS4pN,GAEhD,CAyiOiBiuF,CAAeluR,EAAK,CAC7B6wQ,sBAAuB+b,GACvBzhB,YAAa,CACTkY,GACAhE,GACAE,MAGF4O,GAAoB,QAAuB,oBAEjD,GAAIA,GAC2B,mBAApBC,iBACPA,gBAAiB,CAEjB,MAAMC,EAAmB,IAAIh6P,IAAI85P,EAAmBn4R,SAASo+B,QAC7D,GAAIp+B,SAASo+B,SAAWi6P,EAAiBj6P,OAAQ,CAC7C,MAAMk6P,EAAaT,GAAkBQ,EAAiBz+S,aAp5HlE,SAAgCq1K,EAAMhnI,EAAUsvP,IACrC,QAAmBtoH,GAAMquH,uBAAuBr1P,EAAUsvP,EACrE,CAm5HY+F,CAAuBruH,EAAMqpI,GAAY,IAAMA,EAAWrpI,EAAK2/G,eAl6H3E,SAA0B3/G,EAAMhgI,EAAgBzrC,EAAO45R,IAC5C,QAAmBnuH,GAAMsuH,iBAAiBtuP,EAAgBzrC,EAAO45R,EAC5E,CAi6HYG,CAAiBtuH,GAAMpwJ,GAAQy5R,EAAWz5R,IAC9C,CACJ,CACA,MAAM05R,GAAmB,QAAuB,QAIhD,OAHIA,GACAxX,GAAoB9xH,EAAM,UAAUspI,KAEjCtpI,CACX,CAliPA,IAw6OsBgoH,GAv6OlB0H,GAsiPmB,CACnB,MAAAC,CAAO/pQ,GAEH,OAAO,IAAIoK,SAAQ,CAACC,EAASC,KACzB,MAAM7rB,EAAK9Y,SAASmB,cAAc,UAR9C,IACQ2rC,EAAIC,EAQAj0B,EAAG1X,aAAa,MAAOi5B,GACvBvhB,EAAG2hB,OAASiK,EACZ5rB,EAAG4hB,QAAU96B,IACT,MAAMoJ,EAAQqmR,EAAa,kBAC3BrmR,EAAMonC,WAAaxwC,EACnB+kC,EAAO37B,EAAM,EAEjB8P,EAAGxV,KAAO,kBACVwV,EAAG0zN,QAAU,SAfqF,QAAlGz/L,EAAsD,QAAhDD,EAAK9sC,SAASQ,qBAAqB,eAA4B,IAAPssC,OAAgB,EAASA,EAAG,UAAuB,IAAPC,EAAgBA,EAAK/sC,UAgBtGiB,YAAY6X,EAAG,GAEhD,EACAyrR,WAAY,oCACZF,kBAAmB,0CACnBC,0BAA2B,0DAlJT7H,GAoJT,WAnJT,QAAmB,IAAI,KAAU,QAAkC,CAACn8R,GAAauF,QAAS4pN,MACtF,MAAMjgM,EAAMlvB,EAAUskR,YAAY,OAAOjB,eACnCkb,EAA2Bv+R,EAAUskR,YAAY,aACjDka,EAA0Bx+R,EAAUskR,YAAY,uBAChD,OAAEhiQ,EAAM,WAAEu+Q,GAAe3xQ,EAAI3pB,QACnC8pR,EAAQ/sQ,IAAWA,EAAOrjB,SAAS,KAAM,kBAAuD,CAAE2yF,QAAS1iE,EAAItlB,OAC/G,MAAMguB,EAAS,CACXtV,SACAu+Q,aACA1E,kBACAhL,QAAS,iCACT6F,aAAc,6BACd/E,UAAW,QACX4N,iBAAkB3D,GAAkBC,KAElCsJ,EAAe,IAAInH,GAASpvQ,EAAKqvQ,EAA0BC,EAAyB5mQ,GAE1F,OA19NR,SAAiCu8I,EAAMg7C,GACnC,MAAMkrE,GAAwB,OAATlrE,QAA0B,IAATA,OAAkB,EAASA,EAAKkrE,cAAgB,GAChFqjB,GAAa9+S,MAAMC,QAAQw7R,GAAeA,EAAc,CAACA,IAAcv3R,IAAI02R,KACpE,OAATrqE,QAA0B,IAATA,OAAkB,EAASA,EAAK8/D,WACjD96G,EAAKiuH,gBAAgBjzE,EAAK8/D,UAK9B96G,EAAK2rH,2BAA2B4d,EAAoB,OAATvuF,QAA0B,IAATA,OAAkB,EAASA,EAAK4wE,sBAChG,CA+8NQ4d,CAAwBlY,EAAct2E,GAC/Bs2E,CAAY,GACpB,UAKEjb,qBAAqB,YAKrBG,4BAA2B,CAAC3qR,EAAW49S,EAAqBC,KAChC79S,EAAUskR,YAAY,iBAC9BjwC,YAAY,MAErC,QAAmB,IAAI,KAAU,iBAAoDr0O,GAE1E,CAACm0K,GAAQ,IAAImoI,GAAYnoI,GAAzB,CADMyvH,GAAU5jS,EAAUskR,YAAY,QAAkCjB,kBAEhF,WAAuCmH,qBAAqB,cAC/D,QAAgB,GAAMvyP,GAtD1B,SAA+BkkQ,GAC3B,OAAQA,GACJ,IAAK,OACD,MAAO,OACX,IAAK,cACD,MAAO,KACX,IAAK,SACD,MAAO,YACX,IAAK,UACD,MAAO,UACX,IAAK,eACD,MAAO,gBACX,QACI,OAEZ,CAuCmC2hB,CAAsB3hB,MAErD,QAAgB,GAAMlkQ,GAAS,2MC5iVnC,MAAM,EAAO,qBACPA,EAAU,SAmBhB,IAAIsQ,EAAc,GAKlB,SAASw1Q,EAAc9lR,GACnBsQ,EAActQ,CAClB,CA2BA,MAAM+lR,EAIF,WAAAn3Q,CAAYo3Q,GACRj5R,KAAKi5R,YAAcA,EAEnBj5R,KAAKk5R,QAAU,WACnB,CAKA,GAAAzoQ,CAAIv2C,EAAKE,GACQ,MAATA,EACA4lB,KAAKi5R,YAAYnsK,WAAW9sH,KAAKm5R,cAAcj/S,IAG/C8lB,KAAKi5R,YAAYlhR,QAAQ/X,KAAKm5R,cAAcj/S,IAAM,QAAUE,GAEpE,CAIA,GAAA0uB,CAAI5uB,GACA,MAAMk/S,EAAYp5R,KAAKi5R,YAAYnhR,QAAQ9X,KAAKm5R,cAAcj/S,IAC9D,OAAiB,MAAbk/S,EACO,MAGA,QAASA,EAExB,CACA,MAAAx5K,CAAO1lI,GACH8lB,KAAKi5R,YAAYnsK,WAAW9sH,KAAKm5R,cAAcj/S,GACnD,CACA,aAAAi/S,CAAcv0S,GACV,OAAOob,KAAKk5R,QAAUt0S,CAC1B,CACA,QAAA9K,GACI,OAAOkmB,KAAKi5R,YAAYn/S,UAC5B,EAuBJ,MAAMu/S,EACF,WAAAx3Q,GACI7hB,KAAKs5R,OAAS,CAAC,EACft5R,KAAKu5R,mBAAoB,CAC7B,CACA,GAAA9oQ,CAAIv2C,EAAKE,GACQ,MAATA,SACO4lB,KAAKs5R,OAAOp/S,GAGnB8lB,KAAKs5R,OAAOp/S,GAAOE,CAE3B,CACA,GAAA0uB,CAAI5uB,GACA,OAAI,QAAS8lB,KAAKs5R,OAAQp/S,GACf8lB,KAAKs5R,OAAOp/S,GAEhB,IACX,CACA,MAAA0lI,CAAO1lI,UACI8lB,KAAKs5R,OAAOp/S,EACvB,EA4BJ,MAAMs/S,EAAmB,SAAUC,GAC/B,IAGI,GAAsB,qBAAXh7S,QAC2B,qBAA3BA,OAAOg7S,GAAiC,CAE/C,MAAMC,EAAaj7S,OAAOg7S,GAG1B,OAFAC,EAAW3hR,QAAQ,oBAAqB,SACxC2hR,EAAW5sK,WAAW,qBACf,IAAIksK,EAAkBU,EACjC,CACJ,CACA,MAAOp/S,GAAK,CAGZ,OAAO,IAAI++S,CACf,EAEMM,EAAoBH,EAAiB,gBAErCI,EAAiBJ,EAAiB,kBAkBlC9vB,EAAY,IAAI,KAAO,sBAIvBmwB,EAAgB,WAClB,IAAIhuS,EAAK,EACT,OAAO,WACH,OAAOA,GACX,CACH,CALqB,GAWhBiuS,EAAO,SAAUr4R,GACnB,MAAM6kB,GAAY,QAAkB7kB,GAC9Bq4R,EAAO,IAAI,KACjBA,EAAK9rQ,OAAO1H,GACZ,MAAMyzQ,EAAYD,EAAK3rQ,SACvB,OAAO,KAAO5J,gBAAgBw1Q,EAClC,EACMC,EAAmB,YAAaC,GAClC,IAAIpxS,EAAU,GACd,IAAK,IAAItP,EAAI,EAAGA,EAAI0gT,EAAQzgT,OAAQD,IAAK,CACrC,MAAME,EAAMwgT,EAAQ1gT,GAChBK,MAAMC,QAAQJ,IACbA,GACkB,kBAARA,GAEe,kBAAfA,EAAID,OACfqP,GAAWmxS,EAAiBj6R,MAAM,KAAMtmB,GAGxCoP,GADoB,kBAARpP,GACD,QAAUA,GAGVA,EAEfoP,GAAW,GACf,CACA,OAAOA,CACX,EAIA,IAAIoW,EAAS,KAITi7R,GAAY,EAMhB,MAAMC,EAAkB,SAAUC,EAASC,IACvC,SAAQA,IAA0B,IAAZD,IAAgC,IAAZA,EAAmB,+CAC7C,IAAZA,GACA1wB,EAAUjH,SAAW,KAAS2E,QAC9BnoQ,EAASyqQ,EAAUlpQ,IAAIE,KAAKgpQ,GACxB2wB,GACAT,EAAenpQ,IAAI,mBAAmB,IAGlB,oBAAZ2pQ,EACZn7R,EAASm7R,GAGTn7R,EAAS,KACT26R,EAAeh6K,OAAO,mBAE9B,EACMp/G,EAAM,YAAay5R,GAOrB,IANkB,IAAdC,IACAA,GAAY,EACG,OAAXj7R,IAA6D,IAA1C26R,EAAe9wR,IAAI,oBACtCqxR,GAAgB,IAGpBl7R,EAAQ,CACR,MAAMpW,EAAUmxS,EAAiBj6R,MAAM,KAAMk6R,GAC7Ch7R,EAAOpW,EACX,CACJ,EACMyxS,EAAa,SAAU/3P,GACzB,OAAO,YAAa03P,GAChBz5R,EAAI+hC,KAAW03P,EACnB,CACJ,EACMv2S,EAAQ,YAAau2S,GACvB,MAAMpxS,EAAU,4BAA8BmxS,KAAoBC,GAClEvwB,EAAUhmR,MAAMmF,EACpB,EACM0xS,EAAQ,YAAaN,GACvB,MAAMpxS,EAAU,yBAAyBmxS,KAAoBC,KAE7D,MADAvwB,EAAUhmR,MAAMmF,GACV,IAAI6a,MAAM7a,EACpB,EACM6kB,EAAO,YAAausR,GACtB,MAAMpxS,EAAU,qBAAuBmxS,KAAoBC,GAC3DvwB,EAAUh8P,KAAK7kB,EACnB,EAkBM2xS,EAAsB,SAAU5wS,GAClC,MAAwB,kBAATA,IACVA,IAASA,GACNA,IAASgZ,OAAO63R,mBAChB7wS,IAASgZ,OAAO83R,kBAC5B,EA6CMC,EAAW,aAIXC,EAAW,aAIXC,EAAc,SAAUlgT,EAAGu3B,GAC7B,GAAIv3B,IAAMu3B,EACN,OAAO,EAEN,GAAIv3B,IAAMggT,GAAYzoR,IAAM0oR,EAC7B,OAAQ,EAEP,GAAI1oR,IAAMyoR,GAAYhgT,IAAMigT,EAC7B,OAAO,EAEN,CACD,MAAME,EAASC,EAAYpgT,GAAIqgT,EAASD,EAAY7oR,GACpD,OAAe,OAAX4oR,EACe,OAAXE,EACOF,EAASE,IAAW,EAAIrgT,EAAEnB,OAAS04B,EAAE14B,OAASshT,EAASE,GAGtD,EAGI,OAAXA,EACE,EAGArgT,EAAIu3B,GAAK,EAAI,CAE5B,CACJ,EAIM+oR,EAAgB,SAAUtgT,EAAGu3B,GAC/B,OAAIv3B,IAAMu3B,EACC,EAEFv3B,EAAIu3B,GACD,EAGD,CAEf,EACMgpR,EAAa,SAAUhhT,EAAKiiB,GAC9B,GAAIA,GAAOjiB,KAAOiiB,EACd,OAAOA,EAAIjiB,GAGX,MAAM,IAAIwpB,MAAM,yBAA2BxpB,EAAM,iBAAkB,QAAUiiB,GAErF,EACMg/R,EAAoB,SAAUh/R,GAChC,GAAmB,kBAARA,GAA4B,OAARA,EAC3B,OAAO,QAAUA,GAErB,MAAMngB,EAAO,GAEb,IAAK,MAAMgiB,KAAK7B,EACZngB,EAAKX,KAAK2iB,GAGdhiB,EAAKujD,OACL,IAAIrlD,EAAM,IACV,IAAK,IAAIX,EAAI,EAAGA,EAAIyC,EAAKxC,OAAQD,IACnB,IAANA,IACAW,GAAO,KAEXA,IAAO,QAAU8B,EAAKzC,IACtBW,GAAO,IACPA,GAAOihT,EAAkBh/R,EAAIngB,EAAKzC,KAGtC,OADAW,GAAO,IACAA,CACX,EAOMkhT,EAAoB,SAAU35R,EAAK45R,GACrC,MAAMx/R,EAAM4F,EAAIjoB,OAChB,GAAIqiB,GAAOw/R,EACP,MAAO,CAAC55R,GAEZ,MAAM65R,EAAW,GACjB,IAAK,IAAIhgT,EAAI,EAAGA,EAAIugB,EAAKvgB,GAAK+/S,EACtB//S,EAAI+/S,EAAUx/R,EACdy/R,EAASjgT,KAAKomB,EAAIjmB,UAAUF,EAAGugB,IAG/By/R,EAASjgT,KAAKomB,EAAIjmB,UAAUF,EAAGA,EAAI+/S,IAG3C,OAAOC,CACX,EAOA,SAAS54N,EAAKvmE,EAAKT,GACf,IAAK,MAAMxhB,KAAOiiB,EACVA,EAAIhjB,eAAee,IACnBwhB,EAAGxhB,EAAKiiB,EAAIjiB,GAGxB,CAQA,MAAMqhT,EAAwB,SAAUt5R,IACpC,SAAQu4R,EAAoBv4R,GAAI,uBAChC,MACM41N,EAAO,KACb,IAAIj9O,EAAGN,EAAGyiB,EAAGy+R,EAAIjiT,EAGP,IAAN0oB,GACA3nB,EAAI,EACJyiB,EAAI,EACJniB,EAAI,EAAIqnB,KAAOrF,IAAW,EAAI,IAG9BhiB,EAAIqnB,EAAI,GACRA,EAAI0N,KAAK+2B,IAAIzkC,KACJ0N,KAAKC,IAAI,GAAG,OAEjB4rR,EAAK7rR,KAAKjT,IAAIiT,KAAKq2B,MAAMr2B,KAAKnP,IAAIyB,GAAK0N,KAAKumL,KAAM2hC,GAClDv9O,EAAIkhT,EAAK3jE,EACT96N,EAAI4S,KAAKy2B,MAAMnkC,EAAI0N,KAAKC,IAAI,EAjBV,GAiBqB4rR,GAAM7rR,KAAKC,IAAI,EAjBpC,OAqBlBt1B,EAAI,EACJyiB,EAAI4S,KAAKy2B,MAAMnkC,EAAI0N,KAAKC,IAAI,GAAG,SAIvC,MAAM06G,EAAO,GACb,IAAK/wI,EA3BqB,GA2BVA,EAAGA,GAAK,EACpB+wI,EAAKjvI,KAAK0hB,EAAI,EAAI,EAAI,GACtBA,EAAI4S,KAAKq2B,MAAMjpC,EAAI,GAEvB,IAAKxjB,EA/BS,GA+BEA,EAAGA,GAAK,EACpB+wI,EAAKjvI,KAAKf,EAAI,EAAI,EAAI,GACtBA,EAAIq1B,KAAKq2B,MAAM1rD,EAAI,GAEvBgwI,EAAKjvI,KAAKT,EAAI,EAAI,GAClB0vI,EAAKzkF,UACL,MAAMpkC,EAAM6oH,EAAK1rH,KAAK,IAEtB,IAAI68R,EAAgB,GACpB,IAAKliT,EAAI,EAAGA,EAAI,GAAIA,GAAK,EAAG,CACxB,IAAImiT,EAAU7+R,SAAS4E,EAAIqN,OAAOv1B,EAAG,GAAI,GAAGO,SAAS,IAC9B,IAAnB4hT,EAAQliT,SACRkiT,EAAU,IAAMA,GAEpBD,GAAgCC,CACpC,CACA,OAAOD,EAAch1R,aACzB,EA0CA,MAAMk1R,EAAkB,IAAItyR,OAAO,qBAY7B0xR,EAAc,SAAUt5R,GAC1B,GAAIk6R,EAAgBv8R,KAAKqC,GAAM,CAC3B,MAAMm6R,EAASh5R,OAAOnB,GACtB,GAAIm6R,IAXW,YAWiBA,GAPjB,WAQX,OAAOA,CAEf,CACA,OAAO,IACX,EAkBMC,EAAiB,SAAUngS,GAC7B,IACIA,GACJ,CACA,MAAOphB,GAEHg0B,YAAW,KAKP,MAAMhL,EAAQhpB,EAAEgpB,OAAS,GAEzB,MADAoK,EAAK,yCAA0CpK,GACzChpB,CAAC,GACRq1B,KAAKq2B,MAAM,GAClB,CACJ,EAwBM81P,EAAwB,SAAUpgS,EAAI3S,GACxC,MAAMyzC,EAAUluB,WAAW5S,EAAI3S,GAe/B,MAbuB,kBAAZyzC,GAES,qBAATu/P,MAEPA,KAAiB,WAEjBA,KAAKC,WAAWx/P,GAGQ,kBAAZA,GAAwBA,EAAe,OAEnDA,EAAe,QAEZA,CACX,EAqBA,MAAMy/P,EACF,WAAAp6Q,CAAYq6Q,EAAUC,GAClBn8R,KAAKk8R,SAAWA,EAChBl8R,KAAKm8R,iBAAmBA,EACxBn8R,KAAKo8R,SAAgC,OAArBD,QAAkD,IAArBA,OAA8B,EAASA,EAAiB99B,aAAa,CAAE37N,UAAU,IACzH1iC,KAAKo8R,UACe,OAArBD,QAAkD,IAArBA,GAAuCA,EAAiBrzR,MAAMuF,MAAK+tR,GAAap8R,KAAKo8R,SAAWA,GAErI,CACA,QAAAjvI,CAASykH,GACL,OAAK5xQ,KAAKo8R,SAgBHp8R,KAAKo8R,SAASjvI,SAASykH,GAfnB,IAAIzyP,SAAQ,CAACC,EAASC,KAKzB/Q,YAAW,KACHtO,KAAKo8R,SACLp8R,KAAKmtJ,SAASykH,GAAcvjQ,KAAK+Q,EAASC,GAG1CD,EAAQ,KACZ,GACD,EAAE,GAIjB,CACA,sBAAAi9Q,CAAuB77Q,GACnB,IAAIgH,EAC6B,QAAhCA,EAAKxnB,KAAKm8R,wBAAqC,IAAP30Q,GAAyBA,EAAG1e,MAAMuF,MAAK+tR,GAAYA,EAASE,iBAAiB97Q,IAC1H,CACA,qBAAA+7Q,GACI7uR,EAAK,oDAAoD1N,KAAKk8R,wFAElE,EAsBJ,MAAMM,EACF,WAAA36Q,CAAYq6Q,EAAUO,EAAkBC,GACpC18R,KAAKk8R,SAAWA,EAChBl8R,KAAKy8R,iBAAmBA,EACxBz8R,KAAK08R,cAAgBA,EACrB18R,KAAK28R,MAAQ,KACb38R,KAAK28R,MAAQD,EAAcr+B,aAAa,CAAE37N,UAAU,IAC/C1iC,KAAK28R,OACND,EAAcvnJ,QAAOga,GAASnvJ,KAAK28R,MAAQxtI,GAEnD,CACA,QAAAhC,CAASykH,GACL,OAAK5xQ,KAAK28R,MAgBH38R,KAAK28R,MAAMxvI,SAASykH,GAAcxpP,OAAM1kC,GAGvCA,GAAwB,+BAAfA,EAAM0oB,MACf5L,EAAI,kEACG,MAGA2e,QAAQE,OAAO37B,KAvBnB,IAAIy7B,SAAQ,CAACC,EAASC,KAKzB/Q,YAAW,KACHtO,KAAK28R,MACL38R,KAAKmtJ,SAASykH,GAAcvjQ,KAAK+Q,EAASC,GAG1CD,EAAQ,KACZ,GACD,EAAE,GAcjB,CACA,sBAAAi9Q,CAAuB77Q,GAGfxgB,KAAK28R,MACL38R,KAAK28R,MAAMjF,qBAAqBl3Q,GAGhCxgB,KAAK08R,cACA5zR,MACAuF,MAAK8gJ,GAAQA,EAAKuoI,qBAAqBl3Q,IAEpD,CACA,yBAAAo8Q,CAA0Bp8Q,GACtBxgB,KAAK08R,cACA5zR,MACAuF,MAAK8gJ,GAAQA,EAAKyoI,wBAAwBp3Q,IACnD,CACA,qBAAA+7Q,GACI,IAAI7yR,EAAe,0DACf1J,KAAKk8R,SADU,iFAIf,eAAgBl8R,KAAKy8R,iBACrB/yR,GACI,uJAIC,mBAAoB1J,KAAKy8R,iBAC9B/yR,GACI,2JAKJA,GACI,kKAIRgE,EAAKhE,EACT,EAGJ,MAAMmzR,EACF,WAAAh7Q,CAAYyvP,GACRtxQ,KAAKsxQ,YAAcA,CACvB,CACA,QAAAnkH,CAASykH,GACL,OAAOzyP,QAAQC,QAAQ,CACnBkyP,YAAatxQ,KAAKsxQ,aAE1B,CACA,sBAAA+qB,CAAuB77Q,GAGnBA,EAASxgB,KAAKsxQ,YAClB,CACA,yBAAAsrB,CAA0Bp8Q,GAAY,CACtC,qBAAA+7Q,GAA0B,EAG9BM,EAAsBC,MAAQ,QAkB9B,MAAMC,EAAmB,IAOnBC,EAAkB,6EAGlBC,EAAwB,KACxBC,EAAY,YACZC,EAAe,eAqBrB,MAAMC,EASF,WAAAv7Q,CAAY1hB,EAAMgsH,EAAQ1sD,EAAW49N,EAAeC,GAAY,EAAOC,EAAiB,GAAIC,GAAgC,EAAOC,GAAkB,GACjJz9R,KAAKmsH,OAASA,EACdnsH,KAAKy/D,UAAYA,EACjBz/D,KAAKq9R,cAAgBA,EACrBr9R,KAAKs9R,UAAYA,EACjBt9R,KAAKu9R,eAAiBA,EACtBv9R,KAAKw9R,8BAAgCA,EACrCx9R,KAAKy9R,gBAAkBA,EACvBz9R,KAAK09R,MAAQv9R,EAAKsG,cAClBzG,KAAKk8K,QAAUl8K,KAAK09R,MAAM5uR,OAAO9O,KAAK09R,MAAMtiT,QAAQ,KAAO,GAC3D4kB,KAAK29R,aACDhE,EAAkB7wR,IAAI,QAAU3I,IAASH,KAAK09R,KACtD,CACA,eAAAE,GACI,MAA0C,OAAnC59R,KAAK29R,aAAa7uR,OAAO,EAAG,EACvC,CACA,YAAA+uR,GACI,MAAyB,mBAAjB79R,KAAKk8K,SACQ,wBAAjBl8K,KAAKk8K,OACb,CACA,QAAI/7K,GACA,OAAOH,KAAK09R,KAChB,CACA,QAAIv9R,CAAK29R,GACDA,IAAY99R,KAAK29R,eACjB39R,KAAK29R,aAAeG,EAChB99R,KAAK49R,mBACLjE,EAAkBlpQ,IAAI,QAAUzwB,KAAK09R,MAAO19R,KAAK29R,cAG7D,CACA,QAAA7jT,GACI,IAAI2nB,EAAMzB,KAAK+9R,cAIf,OAHI/9R,KAAKu9R,iBACL97R,GAAO,IAAMzB,KAAKu9R,eAAiB,KAEhC97R,CACX,CACA,WAAAs8R,GACI,MAAMpoR,EAAW3V,KAAKmsH,OAAS,WAAa,UACtC+C,EAAQlvH,KAAKw9R,8BACb,OAAOx9R,KAAKy/D,YACZ,GACN,MAAO,GAAG9pD,IAAW3V,KAAKG,QAAQ+uH,GACtC,EAcJ,SAAS8uK,EAAsBC,EAAUjgT,EAAM6uC,GAG3C,IAAIqxQ,EACJ,IAHA,QAAuB,kBAATlgT,EAAmB,+BACjC,QAAyB,kBAAX6uC,EAAqB,gCAE/B7uC,IAASk/S,EACTgB,GACKD,EAAS9xK,OAAS,SAAW,SAAW8xK,EAASN,aAAe,YAEpE,IAAI3/S,IAASm/S,EAOd,MAAM,IAAIz5R,MAAM,4BAA8B1lB,GAN9CkgT,GACKD,EAAS9xK,OAAS,WAAa,WAC5B8xK,EAASN,aACT,OAIZ,EA5BJ,SAAiCM,GAC7B,OAAQA,EAAS99R,OAAS89R,EAASN,cAC/BM,EAASJ,gBACTI,EAAST,6BACjB,EAyBQW,CAAwBF,KACxBpxQ,EAAW,GAAIoxQ,EAASx+N,WAE5B,MAAM01B,EAAQ,GAId,OAHAzyB,EAAK71C,GAAQ,CAAC3yC,EAAKE,KACf+6G,EAAM95G,KAAKnB,EAAM,IAAME,EAAM,IAE1B8jT,EAAU/oM,EAAMv2F,KAAK,IAChC,CAqBA,MAAMw/R,EACF,WAAAv8Q,GACI7hB,KAAKq+R,UAAY,CAAC,CACtB,CACA,gBAAAC,CAAiB15S,EAAMwF,EAAS,IACvB,QAAS4V,KAAKq+R,UAAWz5S,KAC1Bob,KAAKq+R,UAAUz5S,GAAQ,GAE3Bob,KAAKq+R,UAAUz5S,IAASwF,CAC5B,CACA,GAAA0e,GACI,OAAO,QAAS9I,KAAKq+R,UACzB,EAmBJ,MAAME,EAAc,CAAC,EACfC,GAAY,CAAC,EACnB,SAASC,GAA0BR,GAC/B,MAAMS,EAAaT,EAASnkT,WAI5B,OAHKykT,EAAYG,KACbH,EAAYG,GAAc,IAAIN,GAE3BG,EAAYG,EACvB,CA6BA,MAAMC,GAIF,WAAA98Q,CAAY+8Q,GACR5+R,KAAK4+R,WAAaA,EAClB5+R,KAAK6+R,iBAAmB,GACxB7+R,KAAK8+R,mBAAqB,EAC1B9+R,KAAK++R,oBAAsB,EAC3B/+R,KAAKg/R,QAAU,IACnB,CACA,UAAAC,CAAWC,EAAa/2Q,GACpBnoB,KAAK++R,mBAAqBG,EAC1Bl/R,KAAKg/R,QAAU72Q,EACXnoB,KAAK++R,mBAAqB/+R,KAAK8+R,qBAC/B9+R,KAAKg/R,UACLh/R,KAAKg/R,QAAU,KAEvB,CAMA,cAAAG,CAAeC,EAAYx1S,GAEvB,IADAoW,KAAK6+R,iBAAiBO,GAAcx1S,EAC7BoW,KAAK6+R,iBAAiB7+R,KAAK8+R,qBAAqB,CACnD,MAAMO,EAAYr/R,KAAK6+R,iBAAiB7+R,KAAK8+R,2BACtC9+R,KAAK6+R,iBAAiB7+R,KAAK8+R,oBAClC,IAAK,IAAIvlT,EAAI,EAAGA,EAAI8lT,EAAU7lT,SAAUD,EAChC8lT,EAAU9lT,IACVsiT,GAAe,KACX77R,KAAK4+R,WAAWS,EAAU9lT,GAAG,IAIzC,GAAIymB,KAAK8+R,qBAAuB9+R,KAAK++R,mBAAoB,CACjD/+R,KAAKg/R,UACLh/R,KAAKg/R,UACLh/R,KAAKg/R,QAAU,MAEnB,KACJ,CACAh/R,KAAK8+R,oBACT,CACJ,EAoBJ,MAAMQ,GAAgC,QA+BtC,MAAMC,GAYF,WAAA19Q,CAAY29Q,EAAQvB,EAAUwB,EAAejhB,EAAekhB,EAAWC,EAAoBC,GACvF5/R,KAAKw/R,OAASA,EACdx/R,KAAKi+R,SAAWA,EAChBj+R,KAAKy/R,cAAgBA,EACrBz/R,KAAKw+Q,cAAgBA,EACrBx+Q,KAAK0/R,UAAYA,EACjB1/R,KAAK2/R,mBAAqBA,EAC1B3/R,KAAK4/R,cAAgBA,EACrB5/R,KAAK6/R,UAAY,EACjB7/R,KAAK8/R,cAAgB,EACrB9/R,KAAK+/R,gBAAiB,EACtB//R,KAAKggS,KAAO1F,EAAWkF,GACvBx/R,KAAKigS,OAASxB,GAA0BR,GACxCj+R,KAAKkgS,MAASrzQ,IAEN7sB,KAAKw+Q,gBACL3xP,EAAOowQ,GAAyBj9R,KAAKw+Q,eAElCwf,EAAsBC,EAAUd,EAActwQ,GAE7D,CAKA,IAAAvX,CAAK0sJ,EAAWm+H,GACZngS,KAAKogS,cAAgB,EACrBpgS,KAAKqgS,cAAgBF,EACrBngS,KAAKsgS,gBAAkB,IAAI3B,GAAe38H,GAC1ChiK,KAAKugS,WAAY,EACjBvgS,KAAKwgS,qBAAuBlyR,YAAW,KACnCtO,KAAKggS,KAAK,gCAEVhgS,KAAKygS,YACLzgS,KAAKwgS,qBAAuB,IAAI,GAEjC7wR,KAAKq2B,MApDW,MA11BC,SAAUtqC,GAClC,IAAI,WAAuC,aAAxBhhB,SAASw7B,WACxBxa,QAEC,CAGD,IAAIglS,GAAS,EACb,MAAMC,EAAY,WACTjmT,SAASme,KAIT6nS,IACDA,GAAS,EACThlS,KALA4S,WAAWqyR,EAAWhxR,KAAKq2B,MAAM,IAOzC,EACItrD,SAAS2E,kBACT3E,SAAS2E,iBAAiB,mBAAoBshT,GAAW,GAEzDliT,OAAOY,iBAAiB,OAAQshT,GAAW,IAGtCjmT,SAAS2/B,cAGd3/B,SAAS2/B,YAAY,sBAAsB,KACX,aAAxB3/B,SAASw7B,YACTyqR,GACJ,IAIJliT,OAAO47B,YAAY,SAAUsmR,GAKrC,CACJ,CAw2BQC,EAAoB,KAChB,GAAI5gS,KAAKugS,UACL,OAGJvgS,KAAK6gS,gBAAkB,IAAIC,IAA2B,IAAIznT,KACtD,MAAO0nT,EAASC,EAAMC,EAAMC,EAAMC,GAAQ9nT,EAE1C,GADA2mB,KAAKohS,wBAAwB/nT,GACxB2mB,KAAK6gS,gBAQV,GALI7gS,KAAKwgS,uBACLlvN,aAAatxE,KAAKwgS,sBAClBxgS,KAAKwgS,qBAAuB,MAEhCxgS,KAAK+/R,gBAAiB,EAClBgB,IAAYzB,GACZt/R,KAAKnU,GAAKm1S,EACVhhS,KAAKi/L,SAAWgiG,MAEf,IApGmB,UAoGfF,EAiBL,MAAM,IAAIr9R,MAAM,kCAAoCq9R,GAfhDC,GAGAhhS,KAAK6gS,gBAAgBQ,cAAe,EAGpCrhS,KAAKsgS,gBAAgBrB,WAAW+B,GAAM,KAClChhS,KAAKygS,WAAW,KAIpBzgS,KAAKygS,WAKb,KACD,IAAIpnT,KACH,MAAOioT,EAAI13S,GAAQvQ,EACnB2mB,KAAKohS,wBAAwB/nT,GAC7B2mB,KAAKsgS,gBAAgBnB,eAAemC,EAAI13S,EAAK,IAC9C,KACCoW,KAAKygS,WAAW,GACjBzgS,KAAKkgS,OAGR,MAAMqB,EAAY,CAAC,EACnBA,EAAUjC,IAAiC,IAC3CiC,EAAwC,IAAI5xR,KAAKq2B,MAAsB,IAAhBr2B,KAAKG,UACxD9P,KAAK6gS,gBAAgBW,2BACrBD,EAA6C,GACzCvhS,KAAK6gS,gBAAgBW,0BAE7BD,EAAuB,EAAIxE,EACvB/8R,KAAK2/R,qBACL4B,EAAiC,EAAIvhS,KAAK2/R,oBAE1C3/R,KAAK4/R,gBACL2B,EAA4B,GAAIvhS,KAAK4/R,eAErC5/R,KAAKy/R,gBACL8B,EAA8B,EAAIvhS,KAAKy/R,eAEvCz/R,KAAKw+Q,gBACL+iB,EAAUtE,GAAyBj9R,KAAKw+Q,eAEpB,qBAAbt+Q,UACPA,SAASunH,UACTu1K,EAAgB59R,KAAKc,SAASunH,YAC9B85K,EAAuB,EA3arB,KA6aN,MAAME,EAAazhS,KAAKkgS,MAAMqB,GAC9BvhS,KAAKggS,KAAK,+BAAiCyB,GAC3CzhS,KAAK6gS,gBAAgBa,OAAOD,GAAY,QAEtC,GAEV,CAIA,KAAAvmR,GACIlb,KAAK6gS,gBAAgBc,cAAc3hS,KAAKnU,GAAImU,KAAKi/L,UACjDj/L,KAAK4hS,uBAAuB5hS,KAAKnU,GAAImU,KAAKi/L,SAC9C,CAIA,iBAAO4iG,GACHtC,GAAsBuC,aAAc,CACxC,CAIA,oBAAOC,GACHxC,GAAsByC,gBAAiB,CAC3C,CAEA,kBAAOC,GACH,QAAI,cAGK1C,GAAsBuC,cAMlBvC,GAAsByC,gBACP,qBAAbtnT,UACmB,MAA1BA,SAASmB,iBAjyBO,kBAAX4C,QACbA,OAAe,QACfA,OAAe,OAAa,YAC3B,UAAU2gB,KAAK3gB,OAAOyhB,SAAS5a,UAOV,kBAAZw5L,SAA8C,kBAAfA,QAAQojH,IA2xBrD,CAIA,qBAAAC,GAA0B,CAI1B,SAAAC,GACIpiS,KAAKugS,WAAY,EACbvgS,KAAK6gS,kBACL7gS,KAAK6gS,gBAAgB5oS,QACrB+H,KAAK6gS,gBAAkB,MAGvB7gS,KAAKqiS,iBACL3nT,SAASme,KAAK6yE,YAAY1rE,KAAKqiS,gBAC/BriS,KAAKqiS,eAAiB,MAEtBriS,KAAKwgS,uBACLlvN,aAAatxE,KAAKwgS,sBAClBxgS,KAAKwgS,qBAAuB,KAEpC,CAIA,SAAAC,GACSzgS,KAAKugS,YACNvgS,KAAKggS,KAAK,8BACVhgS,KAAKoiS,YACDpiS,KAAKqgS,gBACLrgS,KAAKqgS,cAAcrgS,KAAK+/R,gBACxB//R,KAAKqgS,cAAgB,MAGjC,CAKA,KAAApoS,GACS+H,KAAKugS,YACNvgS,KAAKggS,KAAK,6BACVhgS,KAAKoiS,YAEb,CAMA,IAAA7sR,CAAK3rB,GACD,MAAM04S,GAAU,QAAU14S,GAC1BoW,KAAK6/R,WAAayC,EAAQ9oT,OAC1BwmB,KAAKigS,OAAO3B,iBAAiB,aAAcgE,EAAQ9oT,QAEnD,MAAM+oT,GAAa,QAAaD,GAG1BhH,EAAWF,EAAkBmH,EAhPlBC,MAmPjB,IAAK,IAAIjpT,EAAI,EAAGA,EAAI+hT,EAAS9hT,OAAQD,IACjCymB,KAAK6gS,gBAAgB4B,eAAeziS,KAAKogS,cAAe9E,EAAS9hT,OAAQ8hT,EAAS/hT,IAClFymB,KAAKogS,eAEb,CAMA,sBAAAwB,CAAuB/1S,EAAI62S,GACvB,IAAI,UACA,OAEJ1iS,KAAKqiS,eAAiB3nT,SAASmB,cAAc,UAC7C,MAAM0lT,EAAY,CAClBA,OAA2D,KAC3DA,EAAoC,GAAI11S,EACxC01S,EAAoC,GAAImB,EACxC1iS,KAAKqiS,eAAex/S,IAAMmd,KAAKkgS,MAAMqB,GACrCvhS,KAAKqiS,eAAexlT,MAAMyZ,QAAU,OACpC5b,SAASme,KAAKld,YAAYqkB,KAAKqiS,eACnC,CAIA,uBAAAjB,CAAwB/nT,GAEpB,MAAMymT,GAAgB,QAAUzmT,GAAMG,OACtCwmB,KAAK8/R,eAAiBA,EACtB9/R,KAAKigS,OAAO3B,iBAAiB,iBAAkBwB,EACnD,EAKJ,MAAMgB,GAOF,WAAAj/Q,CAAY8gR,EAAWC,EAAazC,EAAcD,GAiB9C,GAhBAlgS,KAAKmgS,aAAeA,EACpBngS,KAAKkgS,MAAQA,EAGblgS,KAAK6iS,oBAAsB,IAAIhyQ,IAE/B7wB,KAAK8iS,YAAc,GAMnB9iS,KAAK+iS,cAAgBpzR,KAAKq2B,MAAsB,IAAhBr2B,KAAKG,UAGrC9P,KAAKqhS,cAAe,GACf,UAmCDrhS,KAAK2iS,UAAYA,EACjB3iS,KAAK4iS,YAAcA,MApCL,CAKd5iS,KAAKwhS,yBAA2B3H,IAChCp7S,OApU8B,aAoUauhB,KAAKwhS,0BAA4BmB,EAC5ElkT,OApU2B,UAoUauhB,KAAKwhS,0BACzCoB,EAEJ5iS,KAAKgjS,SAAWlC,GAA2BmC,gBAE3C,IAAItoR,EAAS,GAGb,GAAI3a,KAAKgjS,SAASngT,KACwC,gBAAtDmd,KAAKgjS,SAASngT,IAAIisB,OAAO,EAAG,IAAyC,CAErE6L,EAAS,4BADajgC,SAAS0xI,OACwB,cAC3D,CACA,MAAM82K,EAAiB,eAAiBvoR,EAAS,iBACjD,IACI3a,KAAKgjS,SAAShpR,IAAI1E,OAClBtV,KAAKgjS,SAAShpR,IAAIi0I,MAAMi1I,GACxBljS,KAAKgjS,SAAShpR,IAAI/hB,OACtB,CACA,MAAO3d,GACHkmB,EAAI,2BACAlmB,EAAEgpB,OACF9C,EAAIlmB,EAAEgpB,OAEV9C,EAAIlmB,EACR,CACJ,CAKJ,CAKA,oBAAO2oT,GACH,MAAMjO,EAASt6S,SAASmB,cAAc,UAGtC,GAFAm5S,EAAOn4S,MAAMyZ,QAAU,QAEnB5b,SAASme,KAuBT,KAAM,oGAtBNne,SAASme,KAAKld,YAAYq5S,GAC1B,IAIcA,EAAOx1F,cAAc9kN,UAG3B8lB,EAAI,gCAEZ,CACA,MAAOlmB,GACH,MAAM8xI,EAAS1xI,SAAS0xI,OACxB4oK,EAAOnyS,IACH,gEACIupI,EACA,0BACZ,CAmBJ,OAXI4oK,EAAOmO,gBACPnO,EAAOh7Q,IAAMg7Q,EAAOmO,gBAEfnO,EAAOx1F,cACZw1F,EAAOh7Q,IAAMg7Q,EAAOx1F,cAAc9kN,SAG7Bs6S,EAAOt6S,WAEZs6S,EAAOh7Q,IAAMg7Q,EAAOt6S,UAEjBs6S,CACX,CAIA,KAAA/8R,GAEI+H,KAAKojS,OAAQ,EACTpjS,KAAKgjS,WAILhjS,KAAKgjS,SAAShpR,IAAInhB,KAAK4jB,YAAc,GACrCnO,YAAW,KACe,OAAlBtO,KAAKgjS,WACLtoT,SAASme,KAAK6yE,YAAY1rE,KAAKgjS,UAC/BhjS,KAAKgjS,SAAW,KACpB,GACDrzR,KAAKq2B,MAAM,KAGlB,MAAMm6P,EAAengS,KAAKmgS,aACtBA,IACAngS,KAAKmgS,aAAe,KACpBA,IAER,CAMA,aAAAwB,CAAc91S,EAAI62S,GAKd,IAJA1iS,KAAKqjS,KAAOx3S,EACZmU,KAAKsjS,KAAOZ,EACZ1iS,KAAKojS,OAAQ,EAENpjS,KAAKujS,gBAChB,CAQA,WAAAA,GAII,GAAIvjS,KAAKojS,OACLpjS,KAAKqhS,cACLrhS,KAAK6iS,oBAAoB1gT,MAAQ6d,KAAK8iS,YAAYtpT,OAAS,EAAI,EAAI,GAAI,CAEvEwmB,KAAK+iS,gBACL,MAAMxB,EAAY,CAAC,EACnBA,EAAoC,GAAIvhS,KAAKqjS,KAC7C9B,EAAoC,GAAIvhS,KAAKsjS,KAC7C/B,EAAwC,IAAIvhS,KAAK+iS,cACjD,IAAIS,EAASxjS,KAAKkgS,MAAMqB,GAEpBkC,EAAgB,GAChBlqT,EAAI,EACR,KAAOymB,KAAK8iS,YAAYtpT,OAAS,GAAG,CAGhC,KADgBwmB,KAAK8iS,YAAY,GACrBhoT,EAAEtB,OAtcN,GAwcJiqT,EAAcjqT,QAzcR,MAieN,MAvBmB,CAEnB,MAAMkqT,EAAS1jS,KAAK8iS,YAAY79R,QAChCw+R,EACIA,SAGIlqT,EACA,IACAmqT,EAAOC,IALXF,MAQIlqT,EACA,IACAmqT,EAAO1uL,GAVXyuL,KAaIlqT,EACA,IACAmqT,EAAO5oT,EACfvB,GACJ,CAIJ,CAGA,OAFAiqT,GAAkBC,EAClBzjS,KAAK4jS,gBAAgBJ,EAAQxjS,KAAK+iS,gBAC3B,CACX,CAEI,OAAO,CAEf,CAOA,cAAAN,CAAeoB,EAAQC,EAAWl6S,GAE9BoW,KAAK8iS,YAAYznT,KAAK,CAAEsoT,IAAKE,EAAQ7uL,GAAI8uL,EAAWhpT,EAAG8O,IAGnDoW,KAAKojS,OACLpjS,KAAKujS,aAEb,CAMA,eAAAK,CAAgB7uR,EAAKgvR,GAEjB/jS,KAAK6iS,oBAAoB17R,IAAI48R,GAC7B,MAAMC,EAAe,KACjBhkS,KAAK6iS,oBAAoBzxQ,OAAO2yQ,GAChC/jS,KAAKujS,aAAa,EAIhBU,EAAmB31R,WAAW01R,EAAcr0R,KAAKq2B,MAjgB5B,OAwgB3BhmC,KAAK0hS,OAAO3sR,GANS,KAEjBu8D,aAAa2yN,GAEbD,GAAc,GAGtB,CAMA,MAAAtC,CAAO3sR,EAAKmvR,IACJ,UAEAlkS,KAAKmkS,eAAepvR,EAAKmvR,GAGzB51R,YAAW,KACP,IAEI,IAAKtO,KAAKqhS,aACN,OAEJ,MAAM+C,EAAYpkS,KAAKgjS,SAAShpR,IAAIn+B,cAAc,UAClDuoT,EAAUpmT,KAAO,kBACjBomT,EAAU3+J,OAAQ,EAClB2+J,EAAUvhT,IAAMkyB,EAEhBqvR,EAAUjvR,OAASivR,EAAUnuR,mBACzB,WAEI,MAAMouR,EAASD,EAAUluR,WACpBmuR,GAAqB,WAAXA,GAAkC,aAAXA,IAElCD,EAAUjvR,OAASivR,EAAUnuR,mBAAqB,KAC9CmuR,EAAUvnR,YACVunR,EAAUvnR,WAAW6uD,YAAY04N,GAErCF,IAER,EACJE,EAAUhvR,QAAU,KAChB5U,EAAI,oCAAsCuU,GAC1C/U,KAAKqhS,cAAe,EACpBrhS,KAAK/H,OAAO,EAEhB+H,KAAKgjS,SAAShpR,IAAInhB,KAAKld,YAAYyoT,EACvC,CACA,MAAO9pT,GAEP,IACDq1B,KAAKq2B,MAAM,GAEtB,EAqBJ,IAAIs+P,GAAgB,KACQ,qBAAjBC,aACPD,GAAgBC,aAEU,qBAAdC,YACZF,GAAgBE,WAKpB,MAAMC,GAYF,WAAA5iR,CAAY29Q,EAAQvB,EAAUwB,EAAejhB,EAAekhB,EAAWC,EAAoBC,GACvF5/R,KAAKw/R,OAASA,EACdx/R,KAAKy/R,cAAgBA,EACrBz/R,KAAKw+Q,cAAgBA,EACrBx+Q,KAAK0/R,UAAYA,EACjB1/R,KAAK0kS,eAAiB,KACtB1kS,KAAK2kS,OAAS,KACd3kS,KAAK4kS,YAAc,EACnB5kS,KAAK6/R,UAAY,EACjB7/R,KAAK8/R,cAAgB,EACrB9/R,KAAKggS,KAAO1F,EAAWt6R,KAAKw/R,QAC5Bx/R,KAAKigS,OAASxB,GAA0BR,GACxCj+R,KAAKk+R,QAAUuG,GAAoBI,eAAe5G,EAAU0B,EAAoBC,EAAephB,EAAeihB,GAC9Gz/R,KAAKs9R,UAAYW,EAASX,SAC9B,CAQA,qBAAOuH,CAAe5G,EAAU0B,EAAoBC,EAAephB,EAAeihB,GAC9E,MAAM8B,EAAY,CAAC,EAoBnB,OAnBAA,EAAuB,EAAIxE,IACtB,WACmB,qBAAb78R,UACPA,SAASunH,UACTu1K,EAAgB59R,KAAKc,SAASunH,YAC9B85K,EAAuB,EA36BjB,KA66BN5B,IACA4B,EAAiC,EAAI5B,GAErCC,IACA2B,EAA4B,GAAI3B,GAEhCphB,IACA+iB,EAAUtE,GAAyBze,GAEnCihB,IACA8B,EAA8B,EAAI9B,GAE/BzB,EAAsBC,EAAUf,EAAWqE,EACtD,CAKA,IAAAjsR,CAAK0sJ,EAAWm+H,GACZngS,KAAKmgS,aAAeA,EACpBngS,KAAKgiK,UAAYA,EACjBhiK,KAAKggS,KAAK,2BAA6BhgS,KAAKk+R,SAC5Cl+R,KAAK+/R,gBAAiB,EAEtBpG,EAAkBlpQ,IAAI,8BAA8B,GACpD,IACI,IAAIlwC,EACJ,IAAI,UAAa,CACb,MAAM4pB,EAASnK,KAAKs9R,UAAY,YAAc,OAE9C/8S,EAAU,CACNy2I,QAAS,CACL,aAAc,YAAY+lK,KAAoBx5Q,KAAeyD,QAAQu9C,YAAYp6D,IACjF,mBAAoBnK,KAAKy/R,eAAiB,KAQ9Cz/R,KAAK0/R,YACLn/S,EAAQy2I,QAAuB,cAAI,UAAUh3H,KAAK0/R,aAElD1/R,KAAKw+Q,gBACLj+R,EAAQy2I,QAAQ,uBAAyBh3H,KAAKw+Q,eAGlD,MAAMzvQ,EAAMiY,QAAa,IACnBwH,EAA2C,IAAnCxuB,KAAKk+R,QAAQ9iT,QAAQ,UAC7B2zB,EAAiB,aAAKA,EAAiB,YACvCA,EAAgB,YAAKA,EAAgB,WACvCyf,IACAjuC,EAAe,MAAI,CAAE+9C,OAAQ9P,GAErC,CACAxuB,KAAK8kS,OAAS,IAAIR,GAActkS,KAAKk+R,QAAS,GAAI39S,EACtD,CACA,MAAOjG,GACH0lB,KAAKggS,KAAK,kCACV,MAAMt8S,EAAQpJ,EAAEuO,SAAWvO,EAAEsP,KAK7B,OAJIlG,GACAsc,KAAKggS,KAAKt8S,QAEdsc,KAAKygS,WAET,CACAzgS,KAAK8kS,OAAOC,OAAS,KACjB/kS,KAAKggS,KAAK,wBACVhgS,KAAK+/R,gBAAiB,CAAI,EAE9B//R,KAAK8kS,OAAOE,QAAU,KAClBhlS,KAAKggS,KAAK,0CACVhgS,KAAK8kS,OAAS,KACd9kS,KAAKygS,WAAW,EAEpBzgS,KAAK8kS,OAAOt8I,UAAYlnI,IACpBthB,KAAKilS,oBAAoB3jR,EAAE,EAE/BthB,KAAK8kS,OAAO1vR,QAAU96B,IAClB0lB,KAAKggS,KAAK,yCAEV,MAAMt8S,EAAQpJ,EAAEuO,SAAWvO,EAAEsP,KACzBlG,GACAsc,KAAKggS,KAAKt8S,GAEdsc,KAAKygS,WAAW,CAExB,CAIA,KAAAvlR,GAAU,CACV,oBAAO6mR,GACH0C,GAAoBzC,gBAAiB,CACzC,CACA,kBAAOC,GACH,IAAIiD,GAAe,EACnB,GAAyB,qBAAd/1R,WAA6BA,UAAUG,UAAW,CACzD,MAAM61R,EAAkB,iCAClBC,EAAkBj2R,UAAUG,UAAU/L,MAAM4hS,GAC9CC,GAAmBA,EAAgB5rT,OAAS,GACxCia,WAAW2xS,EAAgB,IAAM,MACjCF,GAAe,EAG3B,CACA,OAASA,GACa,OAAlBZ,KACCG,GAAoBzC,cAC7B,CAIA,uBAAOqD,GAGH,OAAQ1L,EAAkBJ,oBACkC,IAAxDI,EAAkB7wR,IAAI,6BAC9B,CACA,qBAAAq5R,GACIxI,EAAkB/5K,OAAO,6BAC7B,CACA,YAAA0lL,CAAa17S,GAET,GADAoW,KAAK2kS,OAAOtpT,KAAKuO,GACboW,KAAK2kS,OAAOnrT,SAAWwmB,KAAK4kS,YAAa,CACzC,MAAMW,EAAWvlS,KAAK2kS,OAAO/lS,KAAK,IAClCoB,KAAK2kS,OAAS,KACd,MAAMa,GAAW,QAASD,GAE1BvlS,KAAKgiK,UAAUwjI,EACnB,CACJ,CAIA,oBAAAC,CAAqBC,GACjB1lS,KAAK4kS,YAAcc,EACnB1lS,KAAK2kS,OAAS,EAClB,CAKA,kBAAAgB,CAAmB/7S,GAIf,IAHA,QAAuB,OAAhBoW,KAAK2kS,OAAiB,kCAGzB/6S,EAAKpQ,QAAU,EAAG,CAClB,MAAMksT,EAAa9iS,OAAOhZ,GAC1B,IAAK0X,MAAMokS,GAEP,OADA1lS,KAAKylS,qBAAqBC,GACnB,IAEf,CAEA,OADA1lS,KAAKylS,qBAAqB,GACnB77S,CACX,CAKA,mBAAAq7S,CAAoBW,GAChB,GAAoB,OAAhB5lS,KAAK8kS,OACL,OAEJ,MAAMl7S,EAAOg8S,EAAW,KAIxB,GAHA5lS,KAAK8/R,eAAiBl2S,EAAKpQ,OAC3BwmB,KAAKigS,OAAO3B,iBAAiB,iBAAkB10S,EAAKpQ,QACpDwmB,KAAK6lS,iBACe,OAAhB7lS,KAAK2kS,OAEL3kS,KAAKslS,aAAa17S,OAEjB,CAED,MAAMk8S,EAAgB9lS,KAAK2lS,mBAAmB/7S,GACxB,OAAlBk8S,GACA9lS,KAAKslS,aAAaQ,EAE1B,CACJ,CAKA,IAAAvwR,CAAK3rB,GACDoW,KAAK6lS,iBACL,MAAMvD,GAAU,QAAU14S,GAC1BoW,KAAK6/R,WAAayC,EAAQ9oT,OAC1BwmB,KAAKigS,OAAO3B,iBAAiB,aAAcgE,EAAQ9oT,QAGnD,MAAM8hT,EAAWF,EAAkBkH,EAxPV,OA0PrBhH,EAAS9hT,OAAS,GAClBwmB,KAAK+lS,YAAYljS,OAAOy4R,EAAS9hT,SAGrC,IAAK,IAAID,EAAI,EAAGA,EAAI+hT,EAAS9hT,OAAQD,IACjCymB,KAAK+lS,YAAYzK,EAAS/hT,GAElC,CACA,SAAA6oT,GACIpiS,KAAKugS,WAAY,EACbvgS,KAAK0kS,iBACLv5J,cAAcnrI,KAAK0kS,gBACnB1kS,KAAK0kS,eAAiB,MAEtB1kS,KAAK8kS,SACL9kS,KAAK8kS,OAAO7sS,QACZ+H,KAAK8kS,OAAS,KAEtB,CACA,SAAArE,GACSzgS,KAAKugS,YACNvgS,KAAKggS,KAAK,+BACVhgS,KAAKoiS,YAEDpiS,KAAKmgS,eACLngS,KAAKmgS,aAAangS,KAAK+/R,gBACvB//R,KAAKmgS,aAAe,MAGhC,CAKA,KAAAloS,GACS+H,KAAKugS,YACNvgS,KAAKggS,KAAK,6BACVhgS,KAAKoiS,YAEb,CAKA,cAAAyD,GACI16J,cAAcnrI,KAAK0kS,gBACnB1kS,KAAK0kS,eAAiBz5J,aAAY,KAE1BjrI,KAAK8kS,QACL9kS,KAAK+lS,YAAY,KAErB/lS,KAAK6lS,gBAAgB,GAEtBl2R,KAAKq2B,MA9SqB,MA+SjC,CAMA,WAAA+/P,CAAYtkS,GAIR,IACIzB,KAAK8kS,OAAOvvR,KAAK9T,EACrB,CACA,MAAOnnB,GACH0lB,KAAKggS,KAAK,0CAA2C1lT,EAAEuO,SAAWvO,EAAEsP,KAAM,uBAC1E0kB,WAAWtO,KAAKygS,UAAU//R,KAAKV,MAAO,EAC1C,CACJ,EAKJykS,GAAoBuB,6BAA+B,EAInDvB,GAAoBwB,eAAiB,IAyBrC,MAAMC,GACF,yBAAWC,GACP,MAAO,CAAC5G,GAAuBkF,GACnC,CAKA,mCAAW2B,GACP,OAAOpmS,KAAKqmS,2BAChB,CAIA,WAAAxkR,CAAYo8Q,GACRj+R,KAAKsmS,gBAAgBrI,EACzB,CACA,eAAAqI,CAAgBrI,GACZ,MAAMsI,EAAwB9B,IAAuBA,GAAiC,cACtF,IAAI+B,EAAuBD,IAA0B9B,GAAoBY,mBAOzE,GANIpH,EAASZ,gBACJkJ,GACD74R,EAAK,mFAET84R,GAAuB,GAEvBA,EACAxmS,KAAKymS,YAAc,CAAChC,QAEnB,CACD,MAAMiC,EAAc1mS,KAAKymS,YAAc,GACvC,IAAK,MAAMlvK,KAAa2uK,GAAiBC,eACjC5uK,GAAaA,EAAuB,eACpCmvK,EAAWrrT,KAAKk8I,GAGxB2uK,GAAiBG,6BAA8B,CACnD,CACJ,CAIA,gBAAAM,GACI,GAAI3mS,KAAKymS,YAAYjtT,OAAS,EAC1B,OAAOwmB,KAAKymS,YAAY,GAGxB,MAAM,IAAI/iS,MAAM,0BAExB,CAIA,gBAAAkjS,GACI,OAAI5mS,KAAKymS,YAAYjtT,OAAS,EACnBwmB,KAAKymS,YAAY,GAGjB,IAEf,EAGJP,GAAiBG,6BAA8B,EA0C/C,MAAMQ,GAaF,WAAAhlR,CAAYh2B,EAAIi7S,EAAWC,EAAgBC,EAAgBC,EAAYrI,EAAYsI,EAAU7G,EAAe8G,EAASvH,GACjH5/R,KAAKnU,GAAKA,EACVmU,KAAK8mS,UAAYA,EACjB9mS,KAAK+mS,eAAiBA,EACtB/mS,KAAKgnS,eAAiBA,EACtBhnS,KAAKinS,WAAaA,EAClBjnS,KAAK4+R,WAAaA,EAClB5+R,KAAKknS,SAAWA,EAChBlnS,KAAKqgS,cAAgBA,EACrBrgS,KAAKmnS,QAAUA,EACfnnS,KAAK4/R,cAAgBA,EACrB5/R,KAAKonS,gBAAkB,EACvBpnS,KAAKqnS,oBAAsB,GAC3BrnS,KAAKsnS,OAAS,EACdtnS,KAAKggS,KAAO1F,EAAW,KAAOt6R,KAAKnU,GAAK,KACxCmU,KAAKunS,kBAAoB,IAAIrB,GAAiBY,GAC9C9mS,KAAKggS,KAAK,sBACVhgS,KAAKwnS,QACT,CAIA,MAAAA,GACI,MAAMC,EAAOznS,KAAKunS,kBAAkBZ,mBACpC3mS,KAAK0nS,MAAQ,IAAID,EAAKznS,KAAK2nS,mBAAoB3nS,KAAK8mS,UAAW9mS,KAAK+mS,eAAgB/mS,KAAKgnS,eAAgBhnS,KAAKinS,WAAY,KAAMjnS,KAAK4/R,eAGrI5/R,KAAK4nS,0BAA4BH,EAAmC,8BAAK,EACzE,MAAMI,EAAoB7nS,KAAK8nS,cAAc9nS,KAAK0nS,OAC5CK,EAAmB/nS,KAAKgoS,iBAAiBhoS,KAAK0nS,OACpD1nS,KAAKioS,IAAMjoS,KAAK0nS,MAChB1nS,KAAKkoS,IAAMloS,KAAK0nS,MAChB1nS,KAAKmoS,eAAiB,KACtBnoS,KAAKooS,YAAa,EAOlB95R,YAAW,KAEPtO,KAAK0nS,OAAS1nS,KAAK0nS,MAAMpyR,KAAKuyR,EAAmBE,EAAiB,GACnEp4R,KAAKq2B,MAAM,IACd,MAAMqiQ,EAAmBZ,EAAqB,gBAAK,EAC/CY,EAAmB,IACnBroS,KAAKsoS,gBAAkBxM,GAAsB,KACzC97R,KAAKsoS,gBAAkB,KAClBtoS,KAAKooS,aACFpoS,KAAK0nS,OACL1nS,KAAK0nS,MAAM5H,cA9EK,QA+EhB9/R,KAAKggS,KAAK,wDACNhgS,KAAK0nS,MAAM5H,cACX,wCACJ9/R,KAAKooS,YAAa,EAClBpoS,KAAK0nS,MAAMvF,yBAENniS,KAAK0nS,OACV1nS,KAAK0nS,MAAM7H,UAvFC,MAwFZ7/R,KAAKggS,KAAK,oDACNhgS,KAAK0nS,MAAM7H,UACX,uCAKJ7/R,KAAKggS,KAAK,+CACVhgS,KAAK/H,SAEb,GAED0X,KAAKq2B,MAAMqiQ,IAEtB,CACA,gBAAAV,GACI,MAAO,KAAO3nS,KAAKnU,GAAK,IAAMmU,KAAKonS,iBACvC,CACA,gBAAAY,CAAiBP,GACb,OAAOc,IACCd,IAASznS,KAAK0nS,MACd1nS,KAAKwoS,kBAAkBD,GAElBd,IAASznS,KAAKmoS,gBACnBnoS,KAAKggS,KAAK,8BACVhgS,KAAKyoS,8BAGLzoS,KAAKggS,KAAK,4BACd,CAER,CACA,aAAA8H,CAAcL,GACV,OAAQ5+S,IACgB,IAAhBmX,KAAKsnS,SACDG,IAASznS,KAAKkoS,IACdloS,KAAK0oS,0BAA0B7/S,GAE1B4+S,IAASznS,KAAKmoS,eACnBnoS,KAAK2oS,4BAA4B9/S,GAGjCmX,KAAKggS,KAAK,6BAElB,CAER,CAIA,WAAAzqK,CAAYqzK,GAER,MAAMt1N,EAAM,CAAE/4F,EAAG,IAAKO,EAAG8tT,GACzB5oS,KAAK6oS,UAAUv1N,EACnB,CACA,oBAAAw1N,GACQ9oS,KAAKioS,MAAQjoS,KAAKmoS,gBAAkBnoS,KAAKkoS,MAAQloS,KAAKmoS,iBACtDnoS,KAAKggS,KAAK,2CAA6ChgS,KAAKmoS,eAAe3I,QAC3Ex/R,KAAK0nS,MAAQ1nS,KAAKmoS,eAClBnoS,KAAKmoS,eAAiB,KAG9B,CACA,mBAAAY,CAAoBC,GAChB,GAtJa,MAsJOA,EAAa,CAC7B,MAAMC,EAAMD,EAAwB,EAjJ7B,MAkJHC,EACAjpS,KAAKkpS,6BAtJC,MAwJDD,GAELjpS,KAAKggS,KAAK,wCACVhgS,KAAKmoS,eAAelwS,QAEhB+H,KAAKioS,MAAQjoS,KAAKmoS,gBAClBnoS,KAAKkoS,MAAQloS,KAAKmoS,gBAClBnoS,KAAK/H,SA7JJ,MAgKAgxS,IACLjpS,KAAKggS,KAAK,0BACVhgS,KAAKmpS,8BACLnpS,KAAKkpS,6BAEb,CACJ,CACA,2BAAAP,CAA4BS,GACxB,MAAMC,EAAQnO,EAAW,IAAKkO,GACxBx/S,EAAOsxS,EAAW,IAAKkO,GAC7B,GAAc,MAAVC,EACArpS,KAAK+oS,oBAAoBn/S,OAExB,IAAc,MAAVy/S,EAKL,MAAM,IAAI3lS,MAAM,2BAA6B2lS,GAH7CrpS,KAAKqnS,oBAAoBhsT,KAAKuO,EAIlC,CACJ,CACA,0BAAAs/S,GACQlpS,KAAKmpS,6BAA+B,GACpCnpS,KAAKggS,KAAK,oCACVhgS,KAAKooS,YAAa,EAClBpoS,KAAKmoS,eAAehG,wBACpBniS,KAAKspS,wBAILtpS,KAAKggS,KAAK,8BACVhgS,KAAKmoS,eAAe5yR,KAAK,CAAEh7B,EAAG,IAAKO,EAAG,CAAEP,EA5LvC,IA4LgDO,EAAG,CAAC,KAE7D,CACA,mBAAAwuT,GAEItpS,KAAKmoS,eAAejtR,QAEpBlb,KAAKggS,KAAK,mCACVhgS,KAAKmoS,eAAe5yR,KAAK,CAAEh7B,EAAG,IAAKO,EAAG,CAAEP,EAtM7B,IAsM4CO,EAAG,CAAC,KAG3DklB,KAAKggS,KAAK,kCACVhgS,KAAK0nS,MAAMnyR,KAAK,CAAEh7B,EAAG,IAAKO,EAAG,CAAEP,EAzMd,IAyMmCO,EAAG,CAAC,KACxDklB,KAAKioS,IAAMjoS,KAAKmoS,eAChBnoS,KAAK8oS,sBACT,CACA,yBAAAJ,CAA0BU,GAEtB,MAAMC,EAAQnO,EAAW,IAAKkO,GACxBx/S,EAAOsxS,EAAW,IAAKkO,GACf,MAAVC,EACArpS,KAAKupS,WAAW3/S,GAED,MAAVy/S,GACLrpS,KAAKwpS,eAAe5/S,EAE5B,CACA,cAAA4/S,CAAe3gT,GACXmX,KAAKypS,qBAELzpS,KAAK4+R,WAAW/1S,EACpB,CACA,kBAAA4gT,GACSzpS,KAAKooS,aACNpoS,KAAK4nS,4BACD5nS,KAAK4nS,2BAA6B,IAClC5nS,KAAKggS,KAAK,kCACVhgS,KAAKooS,YAAa,EAClBpoS,KAAK0nS,MAAMvF,yBAGvB,CACA,UAAAoH,CAAWP,GACP,MAAMC,EAAM/N,EA/OC,IA+OwB8N,GACrC,GA/Oa,MA+OOA,EAAa,CAC7B,MAAMr0R,EAAUq0R,EAAwB,EACxC,GAzOS,MAyOLC,EAAsB,CACtB,MAAMS,EAAmB3vT,OAAO+lB,OAAO,CAAC,EAAG6U,GACvC3U,KAAK8mS,UAAUrJ,kBAEfiM,EAAiBhqT,EAAIsgB,KAAK8mS,UAAU3mS,MAExCH,KAAK2pS,aAAaD,EACtB,MACK,GAnPQ,MAmPJT,EAA0B,CAC/BjpS,KAAKggS,KAAK,qCACVhgS,KAAKkoS,IAAMloS,KAAKmoS,eAChB,IAAK,IAAI5uT,EAAI,EAAGA,EAAIymB,KAAKqnS,oBAAoB7tT,SAAUD,EACnDymB,KAAKwpS,eAAexpS,KAAKqnS,oBAAoB9tT,IAEjDymB,KAAKqnS,oBAAsB,GAC3BrnS,KAAK8oS,sBACT,KAhQa,MAiQJG,EAGLjpS,KAAK4pS,sBAAsBj1R,GAnQrB,MAqQDs0R,EAELjpS,KAAK6pS,SAASl1R,GAtQR,MAwQDs0R,EACLvlT,EAAM,iBAAmBixB,GAxQpB,MA0QAs0R,GACLjpS,KAAKggS,KAAK,wBACVhgS,KAAKypS,qBACLzpS,KAAK8pS,iCAGLpmT,EAAM,mCAAqCulT,EAEnD,CACJ,CAIA,YAAAU,CAAanrI,GACT,MAAM39J,EAAY29J,EAAUxpD,GACtB/hG,EAAUurJ,EAAUv8J,EACpB9B,EAAOq+J,EAAU9+K,EACvBsgB,KAAKg2I,UAAYwoB,EAAU5jL,EAC3BolB,KAAK8mS,UAAU3mS,KAAOA,EAEF,IAAhBH,KAAKsnS,SACLtnS,KAAK0nS,MAAMxsR,QACXlb,KAAK+pS,yBAAyB/pS,KAAK0nS,MAAO7mS,GACtCk8R,IAAqB9pR,GACrBvF,EAAK,sCAGT1N,KAAKgqS,mBAEb,CACA,gBAAAA,GACI,MAAMvC,EAAOznS,KAAKunS,kBAAkBX,mBAChCa,GACAznS,KAAKiqS,cAAcxC,EAE3B,CACA,aAAAwC,CAAcxC,GACVznS,KAAKmoS,eAAiB,IAAIV,EAAKznS,KAAK2nS,mBAAoB3nS,KAAK8mS,UAAW9mS,KAAK+mS,eAAgB/mS,KAAKgnS,eAAgBhnS,KAAKinS,WAAYjnS,KAAKg2I,WAGxIh2I,KAAKmpS,4BACD1B,EAAmC,8BAAK,EAC5C,MAAMzlI,EAAYhiK,KAAK8nS,cAAc9nS,KAAKmoS,gBACpChI,EAAengS,KAAKgoS,iBAAiBhoS,KAAKmoS,gBAChDnoS,KAAKmoS,eAAe7yR,KAAK0sJ,EAAWm+H,GAEpCrE,GAAsB,KACd97R,KAAKmoS,iBACLnoS,KAAKggS,KAAK,gCACVhgS,KAAKmoS,eAAelwS,QACxB,GACD0X,KAAKq2B,MA3UQ,KA4UpB,CACA,QAAA6jQ,CAAS1pS,GACLH,KAAKggS,KAAK,qCAAuC7/R,GACjDH,KAAK8mS,UAAU3mS,KAAOA,EAGF,IAAhBH,KAAKsnS,OACLtnS,KAAK/H,SAIL+H,KAAKkqS,oBACLlqS,KAAKwnS,SAEb,CACA,wBAAAuC,CAAyBtC,EAAM5mS,GAC3Bb,KAAKggS,KAAK,oCACVhgS,KAAK0nS,MAAQD,EACbznS,KAAKsnS,OAAS,EACVtnS,KAAKknS,WACLlnS,KAAKknS,SAASrmS,EAAWb,KAAKg2I,WAC9Bh2I,KAAKknS,SAAW,MAImB,IAAnClnS,KAAK4nS,2BACL5nS,KAAKggS,KAAK,kCACVhgS,KAAKooS,YAAa,GAGlBtM,GAAsB,KAClB97R,KAAK8pS,+BAA+B,GACrCn6R,KAAKq2B,MAzWwB,KA2WxC,CACA,6BAAA8jQ,GAES9pS,KAAKooS,YAA8B,IAAhBpoS,KAAKsnS,SACzBtnS,KAAKggS,KAAK,4BACVhgS,KAAK6oS,UAAU,CAAEtuT,EAAG,IAAKO,EAAG,CAAEP,EAlW7B,IAkWsCO,EAAG,CAAC,KAEnD,CACA,0BAAA2tT,GACI,MAAMhB,EAAOznS,KAAKmoS,eAClBnoS,KAAKmoS,eAAiB,KAClBnoS,KAAKioS,MAAQR,GAAQznS,KAAKkoS,MAAQT,GAElCznS,KAAK/H,OAEb,CAKA,iBAAAuwS,CAAkBD,GACdvoS,KAAK0nS,MAAQ,KAGRa,GAAiC,IAAhBvoS,KAAKsnS,OASF,IAAhBtnS,KAAKsnS,QACVtnS,KAAKggS,KAAK,8BATVhgS,KAAKggS,KAAK,+BAENhgS,KAAK8mS,UAAUlJ,oBACfjE,EAAkB/5K,OAAO,QAAU5/G,KAAK8mS,UAAU3mS,MAElDH,KAAK8mS,UAAUnJ,aAAe39R,KAAK8mS,UAAU3mS,OAMrDH,KAAK/H,OACT,CACA,qBAAA2xS,CAAsBp8R,GAClBxN,KAAKggS,KAAK,0DACNhgS,KAAKmnS,UACLnnS,KAAKmnS,QAAQ35R,GACbxN,KAAKmnS,QAAU,MAInBnnS,KAAKqgS,cAAgB,KACrBrgS,KAAK/H,OACT,CACA,SAAA4wS,CAAUj/S,GACN,GAAoB,IAAhBoW,KAAKsnS,OACL,KAAM,8BAGNtnS,KAAKioS,IAAI1yR,KAAK3rB,EAEtB,CAIA,KAAAqO,GACwB,IAAhB+H,KAAKsnS,SACLtnS,KAAKggS,KAAK,gCACVhgS,KAAKsnS,OAAS,EACdtnS,KAAKkqS,oBACDlqS,KAAKqgS,gBACLrgS,KAAKqgS,gBACLrgS,KAAKqgS,cAAgB,MAGjC,CACA,iBAAA6J,GACIlqS,KAAKggS,KAAK,iCACNhgS,KAAK0nS,QACL1nS,KAAK0nS,MAAMzvS,QACX+H,KAAK0nS,MAAQ,MAEb1nS,KAAKmoS,iBACLnoS,KAAKmoS,eAAelwS,QACpB+H,KAAKmoS,eAAiB,MAEtBnoS,KAAKsoS,kBACLh3N,aAAatxE,KAAKsoS,iBAClBtoS,KAAKsoS,gBAAkB,KAE/B,EAyBJ,MAAM6B,GACF,GAAA9gI,CAAI+gI,EAAYxgT,EAAMygT,EAAY1sR,GAAQ,CAC1C,KAAAnW,CAAM4iS,EAAYxgT,EAAMygT,EAAY1sR,GAAQ,CAK5C,gBAAA2sR,CAAiBhiR,GAAS,CAK1B,oBAAAiiR,CAAqBjiR,GAAS,CAC9B,eAAAkiR,CAAgBJ,EAAYxgT,EAAMygT,GAAc,CAChD,iBAAAI,CAAkBL,EAAYxgT,EAAMygT,GAAc,CAClD,kBAAAK,CAAmBN,EAAYC,GAAc,CAC7C,WAAAM,CAAYC,GAAS,EAuBzB,MAAMC,GACF,WAAAhpR,CAAYipR,GACR9qS,KAAK8qS,eAAiBA,EACtB9qS,KAAK+qS,WAAa,CAAC,GACnB,QAAOnxT,MAAMC,QAAQixT,IAAmBA,EAAetxT,OAAS,EAAG,6BACvE,CAIA,OAAAwxT,CAAQ9gB,KAAc+P,GAClB,GAAIrgT,MAAMC,QAAQmmB,KAAK+qS,WAAW7gB,IAAa,CAE3C,MAAM36H,EAAY,IAAIvvJ,KAAK+qS,WAAW7gB,IACtC,IAAK,IAAI3wS,EAAI,EAAGA,EAAIg2K,EAAU/1K,OAAQD,IAClCg2K,EAAUh2K,GAAG4uC,SAASpoB,MAAMwvJ,EAAUh2K,GAAGulB,QAASm7R,EAE1D,CACJ,CACA,EAAAxnQ,CAAGy3P,EAAW/hQ,EAAUrpB,GACpBkB,KAAKirS,mBAAmB/gB,GACxBlqR,KAAK+qS,WAAW7gB,GAAalqR,KAAK+qS,WAAW7gB,IAAc,GAC3DlqR,KAAK+qS,WAAW7gB,GAAW7uS,KAAK,CAAE8sC,WAAUrpB,YAC5C,MAAMosS,EAAYlrS,KAAKmrS,gBAAgBjhB,GACnCghB,GACA/iR,EAASpoB,MAAMjB,EAASosS,EAEhC,CACA,GAAA52J,CAAI41I,EAAW/hQ,EAAUrpB,GACrBkB,KAAKirS,mBAAmB/gB,GACxB,MAAM36H,EAAYvvJ,KAAK+qS,WAAW7gB,IAAc,GAChD,IAAK,IAAI3wS,EAAI,EAAGA,EAAIg2K,EAAU/1K,OAAQD,IAClC,GAAIg2K,EAAUh2K,GAAG4uC,WAAaA,KACxBrpB,GAAWA,IAAYywJ,EAAUh2K,GAAGulB,SAEtC,YADAywJ,EAAUrvE,OAAO3mG,EAAG,EAIhC,CACA,kBAAA0xT,CAAmB/gB,IACf,QAAOlqR,KAAK8qS,eAAe5kS,MAAKs2F,GACrBA,IAAO0tL,IACd,kBAAoBA,EAC5B,EA0BJ,MAAMkhB,WAAsBP,GACxB,kBAAOQ,GACH,OAAO,IAAID,EACf,CACA,WAAAvpR,GACIuE,MAAM,CAAC,WACPpmB,KAAKsrS,SAAU,EAKO,qBAAX7sT,QAC4B,qBAA5BA,OAAOY,mBACb,YACDZ,OAAOY,iBAAiB,UAAU,KACzB2gB,KAAKsrS,UACNtrS,KAAKsrS,SAAU,EACftrS,KAAKgrS,QAAQ,UAAU,GAC3B,IACD,GACHvsT,OAAOY,iBAAiB,WAAW,KAC3B2gB,KAAKsrS,UACLtrS,KAAKsrS,SAAU,EACftrS,KAAKgrS,QAAQ,UAAU,GAC3B,IACD,GAEX,CACA,eAAAG,CAAgBjhB,GAEZ,OADA,QAAqB,WAAdA,EAAwB,uBAAyBA,GACjD,CAAClqR,KAAKsrS,QACjB,CACA,eAAAC,GACI,OAAOvrS,KAAKsrS,OAChB,EAoBJ,MAAME,GAAiB,GAEjBC,GAAwB,IAM9B,MAAMC,GAKF,WAAA7pR,CAAY8pR,EAAcC,GACtB,QAAiB,IAAbA,EAAqB,CACrB5rS,KAAK6rS,QAAUF,EAAa5nS,MAAM,KAElC,IAAI+nS,EAAS,EACb,IAAK,IAAIvyT,EAAI,EAAGA,EAAIymB,KAAK6rS,QAAQryT,OAAQD,IACjCymB,KAAK6rS,QAAQtyT,GAAGC,OAAS,IACzBwmB,KAAK6rS,QAAQC,GAAU9rS,KAAK6rS,QAAQtyT,GACpCuyT,KAGR9rS,KAAK6rS,QAAQryT,OAASsyT,EACtB9rS,KAAK+rS,UAAY,CACrB,MAEI/rS,KAAK6rS,QAAUF,EACf3rS,KAAK+rS,UAAYH,CAEzB,CACA,QAAA9xT,GACI,IAAIswT,EAAa,GACjB,IAAK,IAAI7wT,EAAIymB,KAAK+rS,UAAWxyT,EAAIymB,KAAK6rS,QAAQryT,OAAQD,IAC1B,KAApBymB,KAAK6rS,QAAQtyT,KACb6wT,GAAc,IAAMpqS,KAAK6rS,QAAQtyT,IAGzC,OAAO6wT,GAAc,GACzB,EAEJ,SAAS4B,KACL,OAAO,IAAIN,GAAK,GACpB,CACA,SAASO,GAAavmT,GAClB,OAAIA,EAAKqmT,WAAarmT,EAAKmmT,QAAQryT,OACxB,KAEJkM,EAAKmmT,QAAQnmT,EAAKqmT,UAC7B,CAIA,SAASG,GAAcxmT,GACnB,OAAOA,EAAKmmT,QAAQryT,OAASkM,EAAKqmT,SACtC,CACA,SAASI,GAAazmT,GAClB,IAAIkmT,EAAWlmT,EAAKqmT,UAIpB,OAHIH,EAAWlmT,EAAKmmT,QAAQryT,QACxBoyT,IAEG,IAAIF,GAAKhmT,EAAKmmT,QAASD,EAClC,CACA,SAASQ,GAAY1mT,GACjB,OAAIA,EAAKqmT,UAAYrmT,EAAKmmT,QAAQryT,OACvBkM,EAAKmmT,QAAQnmT,EAAKmmT,QAAQryT,OAAS,GAEvC,IACX,CAcA,SAAS6yT,GAAU3mT,EAAMkyO,EAAQ,GAC7B,OAAOlyO,EAAKmmT,QAAQtoT,MAAMmC,EAAKqmT,UAAYn0E,EAC/C,CACA,SAAS00E,GAAW5mT,GAChB,GAAIA,EAAKqmT,WAAarmT,EAAKmmT,QAAQryT,OAC/B,OAAO,KAEX,MAAM+yT,EAAS,GACf,IAAK,IAAIhzT,EAAImM,EAAKqmT,UAAWxyT,EAAImM,EAAKmmT,QAAQryT,OAAS,EAAGD,IACtDgzT,EAAOlxT,KAAKqK,EAAKmmT,QAAQtyT,IAE7B,OAAO,IAAImyT,GAAKa,EAAQ,EAC5B,CACA,SAASC,GAAU9mT,EAAM+mT,GACrB,MAAMF,EAAS,GACf,IAAK,IAAIhzT,EAAImM,EAAKqmT,UAAWxyT,EAAImM,EAAKmmT,QAAQryT,OAAQD,IAClDgzT,EAAOlxT,KAAKqK,EAAKmmT,QAAQtyT,IAE7B,GAAIkzT,aAAwBf,GACxB,IAAK,IAAInyT,EAAIkzT,EAAaV,UAAWxyT,EAAIkzT,EAAaZ,QAAQryT,OAAQD,IAClEgzT,EAAOlxT,KAAKoxT,EAAaZ,QAAQtyT,QAGpC,CACD,MAAMmzT,EAAcD,EAAa1oS,MAAM,KACvC,IAAK,IAAIxqB,EAAI,EAAGA,EAAImzT,EAAYlzT,OAAQD,IAChCmzT,EAAYnzT,GAAGC,OAAS,GACxB+yT,EAAOlxT,KAAKqxT,EAAYnzT,GAGpC,CACA,OAAO,IAAImyT,GAAKa,EAAQ,EAC5B,CAIA,SAASI,GAAYjnT,GACjB,OAAOA,EAAKqmT,WAAarmT,EAAKmmT,QAAQryT,MAC1C,CAIA,SAASozT,GAAgBC,EAAWC,GAChC,MAAMC,EAAQd,GAAaY,GAAYvnQ,EAAQ2mQ,GAAaa,GAC5D,GAAc,OAAVC,EACA,OAAOD,EAEN,GAAIC,IAAUznQ,EACf,OAAOsnQ,GAAgBT,GAAaU,GAAYV,GAAaW,IAG7D,MAAM,IAAIppS,MAAM,8BACZopS,EADY,8BAIZD,EACA,IAEZ,CAqBA,SAASG,GAAWtnT,EAAMohE,GACtB,GAAIolP,GAAcxmT,KAAUwmT,GAAcplP,GACtC,OAAO,EAEX,IAAK,IAAIvtE,EAAImM,EAAKqmT,UAAWppS,EAAImkD,EAAMilP,UAAWxyT,GAAKmM,EAAKmmT,QAAQryT,OAAQD,IAAKopB,IAC7E,GAAIjd,EAAKmmT,QAAQtyT,KAAOutE,EAAM+kP,QAAQlpS,GAClC,OAAO,EAGf,OAAO,CACX,CAIA,SAASsqS,GAAavnT,EAAMohE,GACxB,IAAIvtE,EAAImM,EAAKqmT,UACTppS,EAAImkD,EAAMilP,UACd,GAAIG,GAAcxmT,GAAQwmT,GAAcplP,GACpC,OAAO,EAEX,KAAOvtE,EAAImM,EAAKmmT,QAAQryT,QAAQ,CAC5B,GAAIkM,EAAKmmT,QAAQtyT,KAAOutE,EAAM+kP,QAAQlpS,GAClC,OAAO,IAETppB,IACAopB,CACN,CACA,OAAO,CACX,CAWA,MAAMuqS,GAKF,WAAArrR,CAAYn8B,EAAMynT,GACdntS,KAAKmtS,aAAeA,EACpBntS,KAAKotS,OAASf,GAAU3mT,EAAM,GAE9Bsa,KAAKqtS,YAAc19R,KAAKhT,IAAI,EAAGqD,KAAKotS,OAAO5zT,QAC3C,IAAK,IAAID,EAAI,EAAGA,EAAIymB,KAAKotS,OAAO5zT,OAAQD,IACpCymB,KAAKqtS,cAAe,QAAartS,KAAKotS,OAAO7zT,IAEjD+zT,GAAyBttS,KAC7B,EAmBJ,SAASstS,GAAyBC,GAC9B,GAAIA,EAAeF,YAAc5B,GAC7B,MAAM,IAAI/nS,MAAM6pS,EAAeJ,aAC3B,8BACA1B,GACA,WACA8B,EAAeF,YACf,MAER,GAAIE,EAAeH,OAAO5zT,OAASgyT,GAC/B,MAAM,IAAI9nS,MAAM6pS,EAAeJ,aAC3B,iEACA3B,GACA,gCACAgC,GAA4BD,GAExC,CAIA,SAASC,GAA4BD,GACjC,OAAqC,IAAjCA,EAAeH,OAAO5zT,OACf,GAEJ,gBAAkB+zT,EAAeH,OAAOxuS,KAAK,KAAO,GAC/D,CAkBA,MAAM6uS,WAA0B5C,GAC5B,kBAAOQ,GACH,OAAO,IAAIoC,EACf,CACA,WAAA5rR,GAEI,IAAIkyM,EACA25E,EAFJtnR,MAAM,CAAC,YAGiB,qBAAb1rC,UAC8B,qBAA9BA,SAAS2E,mBACkB,qBAAvB3E,SAAiB,QAExBgzT,EAAmB,mBACnB35E,EAAS,UAE6B,qBAA1Br5O,SAAoB,WAChCgzT,EAAmB,sBACnB35E,EAAS,aAE4B,qBAAzBr5O,SAAmB,UAC/BgzT,EAAmB,qBACnB35E,EAAS,YAEgC,qBAA7Br5O,SAAuB,eACnCgzT,EAAmB,yBACnB35E,EAAS,iBAOjB/zN,KAAK2tS,UAAW,EACZD,GACAhzT,SAAS2E,iBAAiBquT,GAAkB,KACxC,MAAME,GAAWlzT,SAASq5O,GACtB65E,IAAY5tS,KAAK2tS,WACjB3tS,KAAK2tS,SAAWC,EAChB5tS,KAAKgrS,QAAQ,UAAW4C,GAC5B,IACD,EAEX,CACA,eAAAzC,CAAgBjhB,GAEZ,OADA,QAAqB,YAAdA,EAAyB,uBAAyBA,GAClD,CAAClqR,KAAK2tS,SACjB,EAmBJ,MAAME,GAAsB,IAc5B,MAAMC,WAA6B3D,GAM/B,WAAAtoR,CAAYilR,EAAWC,EAAgBgH,EAAeC,EAAkBC,EAAqBC,EAAoBC,EAAwBC,GAuCrI,GAtCAhoR,QACApmB,KAAK8mS,UAAYA,EACjB9mS,KAAK+mS,eAAiBA,EACtB/mS,KAAK+tS,cAAgBA,EACrB/tS,KAAKguS,iBAAmBA,EACxBhuS,KAAKiuS,oBAAsBA,EAC3BjuS,KAAKkuS,mBAAqBA,EAC1BluS,KAAKmuS,uBAAyBA,EAC9BnuS,KAAKouS,cAAgBA,EAErBpuS,KAAKnU,GAAKiiT,GAAqBO,8BAC/BruS,KAAKggS,KAAO1F,EAAW,KAAOt6R,KAAKnU,GAAK,KACxCmU,KAAKsuS,kBAAoB,CAAC,EAC1BtuS,KAAKuuS,QAAU,IAAI59Q,IACnB3wB,KAAKwuS,iBAAmB,GACxBxuS,KAAKyuS,iBAAmB,GACxBzuS,KAAK0uS,qBAAuB,EAC5B1uS,KAAK2uS,qBAAuB,EAC5B3uS,KAAK4uS,0BAA4B,GACjC5uS,KAAK6uS,YAAa,EAClB7uS,KAAK8uS,gBAAkBjB,GACvB7tS,KAAK+uS,mBAzCuB,IA0C5B/uS,KAAKgvS,uBAAyB,KAC9BhvS,KAAK4/R,cAAgB,KACrB5/R,KAAKivS,0BAA4B,KACjCjvS,KAAK2tS,UAAW,EAEhB3tS,KAAKkvS,eAAiB,CAAC,EACvBlvS,KAAKmvS,eAAiB,EACtBnvS,KAAKovS,UAAY,KACjBpvS,KAAKinS,WAAa,KAClBjnS,KAAKgnS,eAAiB,KACtBhnS,KAAKqvS,oBAAqB,EAC1BrvS,KAAKsvS,uBAAyB,EAC9BtvS,KAAKuvS,2BAA6B,EAClCvvS,KAAKwvS,kBAAmB,EACxBxvS,KAAKyvS,2BAA6B,KAClCzvS,KAAK0vS,+BAAiC,KAClCtB,KAAkB,UAClB,MAAM,IAAI1qS,MAAM,kFAEpB+pS,GAAkBpC,cAAc54Q,GAAG,UAAWzyB,KAAK2vS,WAAY3vS,OACpB,IAAvC8mS,EAAU3mS,KAAK/kB,QAAQ,YACvBgwT,GAAcC,cAAc54Q,GAAG,SAAUzyB,KAAK4vS,UAAW5vS,KAEjE,CACA,WAAAu1H,CAAYr+F,EAAQr+B,EAAMg3S,GACtB,MAAMC,IAAc9vS,KAAKmvS,eACnB77N,EAAM,CAAE74F,EAAGq1T,EAAWn1T,EAAGu8C,EAAQhlB,EAAGrZ,GAC1CmH,KAAKggS,MAAK,QAAU1sN,KACpB,QAAOtzE,KAAK6uS,WAAY,0DACxB7uS,KAAKovS,UAAU75K,YAAYjiD,GACvBu8N,IACA7vS,KAAKkvS,eAAeY,GAAaD,EAEzC,CACA,GAAA/mS,CAAIomH,GACAlvH,KAAK+vS,kBACL,MAAM9pC,EAAW,IAAI,KAKf+pC,EAAiB,CACnB94Q,OAAQ,IACR9sB,QANY,CACZ9K,EAAG4vH,EAAM+gL,MAAMn2T,WACf82C,EAAGs+F,EAAMghL,cAKT7F,WAAaxhT,IACT,MAAM8rB,EAAU9rB,EAAW,EACN,OAAjBA,EAAW,EACXo9Q,EAAS7mP,QAAQzK,GAGjBsxP,EAAS5mP,OAAO1K,EACpB,GAGR3U,KAAKyuS,iBAAiBpzT,KAAK20T,GAC3BhwS,KAAK2uS,uBACL,MAAMjtT,EAAQse,KAAKyuS,iBAAiBj1T,OAAS,EAI7C,OAHIwmB,KAAK6uS,YACL7uS,KAAKmwS,SAASzuT,GAEXukR,EAASnlP,OACpB,CACA,MAAA0d,CAAO0wF,EAAOkhL,EAAevgN,EAAKw6M,GAC9BrqS,KAAK+vS,kBACL,MAAMM,EAAUnhL,EAAMohL,iBAChBlG,EAAal7K,EAAM+gL,MAAMn2T,WAC/BkmB,KAAKggS,KAAK,qBAAuBoK,EAAa,IAAMiG,GAC/CrwS,KAAKuuS,QAAQ/9Q,IAAI45Q,IAClBpqS,KAAKuuS,QAAQ99Q,IAAI25Q,EAAY,IAAIz5Q,MAErC,QAAOu+F,EAAMqhL,aAAangT,cAAgB8+H,EAAMqhL,aAAaC,eAAgB,uDAC7E,SAAQxwS,KAAKuuS,QAAQzlS,IAAIshS,GAAY55Q,IAAI6/Q,GAAU,gDACnD,MAAMI,EAAa,CACfpG,aACAqG,OAAQN,EACRlhL,QACAr/B,OAEJ7vF,KAAKuuS,QAAQzlS,IAAIshS,GAAY35Q,IAAI4/Q,EAASI,GACtCzwS,KAAK6uS,YACL7uS,KAAK2wS,YAAYF,EAEzB,CACA,QAAAN,CAASzuT,GACL,MAAMonB,EAAM9I,KAAKyuS,iBAAiB/sT,GAClCse,KAAKu1H,YAAY,IAAKzsH,EAAIsB,SAAUvhB,WACzBmX,KAAKyuS,iBAAiB/sT,GAC7Bse,KAAK2uS,uBAC6B,IAA9B3uS,KAAK2uS,uBACL3uS,KAAKyuS,iBAAmB,IAExB3lS,EAAIuhS,YACJvhS,EAAIuhS,WAAWxhT,EACnB,GAER,CACA,WAAA8nT,CAAYF,GACR,MAAMvhL,EAAQuhL,EAAWvhL,MACnBk7K,EAAal7K,EAAM+gL,MAAMn2T,WACzBu2T,EAAUnhL,EAAMohL,iBACtBtwS,KAAKggS,KAAK,aAAeoK,EAAa,QAAUiG,GAChD,MAAMp7R,EAAM,CAAW3V,EAAG8qS,GAGtBqG,EAAW5gN,MACX56E,EAAO,EAAIi6G,EAAMghL,aACjBj7R,EAAO,EAAIw7R,EAAW5gN,KAE1B56E,EAAgB,EAAIw7R,EAAWC,SAC/B1wS,KAAKu1H,YAPU,IAOUtgH,GAAMpsB,IAC3B,MAAM8rB,EAAU9rB,EAAoB,EAC9B5F,EAAS4F,EAAsB,EAErCilT,GAAqB8C,sBAAsBj8R,EAASu6G,IAC1BlvH,KAAKuuS,QAAQzlS,IAAIshS,IACvCpqS,KAAKuuS,QAAQzlS,IAAIshS,GAAYthS,IAAIunS,MAEXI,IACtBzwS,KAAKggS,KAAK,kBAAmBn3S,GACd,OAAX5F,GACA+c,KAAK6wS,cAAczG,EAAYiG,GAE/BI,EAAWpG,YACXoG,EAAWpG,WAAWpnT,EAAQ0xB,GAEtC,GAER,CACA,4BAAOi8R,CAAsBj8R,EAASu6G,GAClC,GAAIv6G,GAA8B,kBAAZA,IAAwB,QAASA,EAAS,KAAM,CAElE,MAAMm8R,GAAW,QAAQn8R,EAAS,KAClC,GAAI/6B,MAAMC,QAAQi3T,KAAcA,EAAS11T,QAAQ,YAAa,CAC1D,MAAM21T,EAAY,gBAAkB7hL,EAAMqhL,aAAatyQ,WAAWnkD,WAAa,IACzEk3T,EAAY9hL,EAAM+gL,MAAMn2T,WAC9B4zB,EACI,wGAA2CqjS,QACxCC,mDACX,CACJ,CACJ,CACA,gBAAA1G,CAAiBhiR,GACbtoB,KAAKinS,WAAa3+Q,EAClBtoB,KAAKggS,KAAK,wBACNhgS,KAAKinS,WACLjnS,KAAKixS,UAKDjxS,KAAK6uS,YACL7uS,KAAKu1H,YAAY,SAAU,CAAC,GAAG,SAGvCv1H,KAAKkxS,uCAAuC5oR,EAChD,CACA,sCAAA4oR,CAAuC3rB,IAGVA,GAAoC,KAAtBA,EAAW/rS,SAC1B,QAAQ+rS,MAC5BvlR,KAAKggS,KAAK,iEACVhgS,KAAK+uS,mBA3MsB,IA6MnC,CACA,oBAAAxE,CAAqBjiR,GACjBtoB,KAAKgnS,eAAiB1+Q,EACtBtoB,KAAKggS,KAAK,6BACNhgS,KAAKgnS,eACLhnS,KAAKmxS,cAMDnxS,KAAK6uS,YACL7uS,KAAKu1H,YAAY,WAAY,CAAC,GAAG,QAG7C,CAKA,OAAA07K,GACI,GAAIjxS,KAAK6uS,YAAc7uS,KAAKinS,WAAY,CACpC,MAAM3+Q,EAAQtoB,KAAKinS,WACbmK,GAAa,QAAc9oR,GAAS,OAAS,QAC7C+oR,EAAc,CAAE7tB,KAAMl7P,GACD,OAAvBtoB,KAAKouS,cACLiD,EAAoB,QAAI,EAEW,kBAAvBrxS,KAAKouS,gBACjBiD,EAAqB,QAAIrxS,KAAKouS,eAElCpuS,KAAKu1H,YAAY67K,EAAYC,GAAcllR,IACvC,MAAMlpC,EAASkpC,EAAkB,EAC3BviC,EAAOuiC,EAAgB,GAAK,QAC9BnsB,KAAKinS,aAAe3+Q,IACL,OAAXrlC,EACA+c,KAAKsvS,uBAAyB,EAI9BtvS,KAAKsxS,eAAeruT,EAAQ2G,GAEpC,GAER,CACJ,CAMA,WAAAunT,GACQnxS,KAAK6uS,YAAc7uS,KAAKgnS,gBACxBhnS,KAAKu1H,YAAY,WAAY,CAAE,MAASv1H,KAAKgnS,iBAAmB76Q,IAC5D,MAAMlpC,EAASkpC,EAAkB,EAC3BviC,EAAOuiC,EAAgB,GAAK,QACnB,OAAXlpC,EACA+c,KAAKuvS,2BAA6B,EAGlCvvS,KAAKuxS,mBAAmBtuT,EAAQ2G,EACpC,GAGZ,CAIA,QAAA4nT,CAAStiL,EAAOr/B,GACZ,MAAMu6M,EAAal7K,EAAM+gL,MAAMn2T,WACzBu2T,EAAUnhL,EAAMohL,iBACtBtwS,KAAKggS,KAAK,uBAAyBoK,EAAa,IAAMiG,IACtD,QAAOnhL,EAAMqhL,aAAangT,cAAgB8+H,EAAMqhL,aAAaC,eAAgB,wDAC9DxwS,KAAK6wS,cAAczG,EAAYiG,IAChCrwS,KAAK6uS,YACf7uS,KAAKyxS,cAAcrH,EAAYiG,EAASnhL,EAAMghL,aAAcrgN,EAEpE,CACA,aAAA4hN,CAAcrH,EAAYiG,EAASqB,EAAU7hN,GACzC7vF,KAAKggS,KAAK,eAAiBoK,EAAa,QAAUiG,GAClD,MAAMp7R,EAAM,CAAW3V,EAAG8qS,GAGtBv6M,IACA56E,EAAO,EAAIy8R,EACXz8R,EAAO,EAAI46E,GAEf7vF,KAAKu1H,YANU,IAMUtgH,EAC7B,CACA,eAAAu1R,CAAgBJ,EAAYxgT,EAAMygT,GAC9BrqS,KAAK+vS,kBACD/vS,KAAK6uS,WACL7uS,KAAK2xS,kBAAkB,IAAKvH,EAAYxgT,EAAMygT,GAG9CrqS,KAAK4uS,0BAA0BvzT,KAAK,CAChC+uT,aACAlzQ,OAAQ,IACRttC,OACAygT,cAGZ,CACA,iBAAAI,CAAkBL,EAAYxgT,EAAMygT,GAChCrqS,KAAK+vS,kBACD/vS,KAAK6uS,WACL7uS,KAAK2xS,kBAAkB,KAAMvH,EAAYxgT,EAAMygT,GAG/CrqS,KAAK4uS,0BAA0BvzT,KAAK,CAChC+uT,aACAlzQ,OAAQ,KACRttC,OACAygT,cAGZ,CACA,kBAAAK,CAAmBN,EAAYC,GAC3BrqS,KAAK+vS,kBACD/vS,KAAK6uS,WACL7uS,KAAK2xS,kBAAkB,KAAMvH,EAAY,KAAMC,GAG/CrqS,KAAK4uS,0BAA0BvzT,KAAK,CAChC+uT,aACAlzQ,OAAQ,KACRttC,KAAM,KACNygT,cAGZ,CACA,iBAAAsH,CAAkBz6Q,EAAQkzQ,EAAYxgT,EAAMygT,GACxC,MAAMjgS,EAAU,CAAW9K,EAAG8qS,EAAqBtvT,EAAG8O,GACtDoW,KAAKggS,KAAK,gBAAkB9oQ,EAAQ9sB,GACpCpK,KAAKu1H,YAAYr+F,EAAQ9sB,GAAUoU,IAC3B6rR,GACA/7R,YAAW,KACP+7R,EAAW7rR,EAAuB,EAAGA,EAAuB,EAAE,GAC/D7O,KAAKq2B,MAAM,GAClB,GAER,CACA,GAAAqjI,CAAI+gI,EAAYxgT,EAAMygT,EAAY1sR,GAC9B3d,KAAK4xS,YAAY,IAAKxH,EAAYxgT,EAAMygT,EAAY1sR,EACxD,CACA,KAAAnW,CAAM4iS,EAAYxgT,EAAMygT,EAAY1sR,GAChC3d,KAAK4xS,YAAY,IAAKxH,EAAYxgT,EAAMygT,EAAY1sR,EACxD,CACA,WAAAi0R,CAAY16Q,EAAQkzQ,EAAYxgT,EAAMygT,EAAY1sR,GAC9C3d,KAAK+vS,kBACL,MAAM3lS,EAAU,CACH9K,EAAG8qS,EACHtvT,EAAG8O,QAEHgP,IAAT+kB,IACAvT,EAAoB,EAAIuT,GAG5B3d,KAAKwuS,iBAAiBnzT,KAAK,CACvB67C,SACA9sB,UACAigS,eAEJrqS,KAAK0uS,uBACL,MAAMhtT,EAAQse,KAAKwuS,iBAAiBh1T,OAAS,EACzCwmB,KAAK6uS,WACL7uS,KAAK6xS,SAASnwT,GAGdse,KAAKggS,KAAK,kBAAoBoK,EAEtC,CACA,QAAAyH,CAASnwT,GACL,MAAMw1C,EAASl3B,KAAKwuS,iBAAiB9sT,GAAOw1C,OACtC9sB,EAAUpK,KAAKwuS,iBAAiB9sT,GAAO0oB,QACvCigS,EAAarqS,KAAKwuS,iBAAiB9sT,GAAO2oT,WAChDrqS,KAAKwuS,iBAAiB9sT,GAAOowT,OAAS9xS,KAAK6uS,WAC3C7uS,KAAKu1H,YAAYr+F,EAAQ9sB,GAAUvhB,IAC/BmX,KAAKggS,KAAK9oQ,EAAS,YAAaruC,UACzBmX,KAAKwuS,iBAAiB9sT,GAC7Bse,KAAK0uS,uBAE6B,IAA9B1uS,KAAK0uS,uBACL1uS,KAAKwuS,iBAAmB,IAExBnE,GACAA,EAAWxhT,EAAsB,EAAGA,EAAsB,EAC9D,GAER,CACA,WAAA8hT,CAAYC,GAER,GAAI5qS,KAAK6uS,WAAY,CACjB,MAAMzkS,EAAU,CAAe9uB,EAAGsvT,GAClC5qS,KAAKggS,KAAK,cAAe51R,GACzBpK,KAAKu1H,YAAsB,IAAKnrH,GAASvsB,IAErC,GAAe,OADAA,EAAqB,EACf,CACjB,MAAMk0T,EAAcl0T,EAAqB,EACzCmiB,KAAKggS,KAAK,cAAe,wBAA0B+R,EACvD,IAER,CACJ,CACA,cAAAvI,CAAe3gT,GACX,GAAI,MAAOA,EAAS,CAEhBmX,KAAKggS,KAAK,iBAAkB,QAAUn3S,IACtC,MAAMmpT,EAASnpT,EAAW,EACpBgnT,EAAa7vS,KAAKkvS,eAAe8C,GACnCnC,WACO7vS,KAAKkvS,eAAe8C,GAC3BnC,EAAWhnT,EAAoB,GAEvC,KACK,IAAI,UAAWA,EAChB,KAAM,qCAAuCA,EAAe,MAEvD,MAAOA,GAEZmX,KAAKiyS,YAAYppT,EAAW,EAAGA,EAAW,EAC9C,CACJ,CACA,WAAAopT,CAAY/6Q,EAAQr+B,GAChBmH,KAAKggS,KAAK,sBAAuB9oQ,EAAQr+B,GAC1B,MAAXq+B,EACAl3B,KAAK+tS,cAAcl1S,EAAiB,EAAGA,EAAiB,GAC5C,EAAOA,EAAQ,GAEX,MAAXq+B,EACLl3B,KAAK+tS,cAAcl1S,EAAiB,EAAGA,EAAiB,GAC3C,EAAMA,EAAQ,GAEX,MAAXq+B,EACLl3B,KAAKkyS,iBAAiBr5S,EAAiB,EAAGA,EAAkB,GAE5C,OAAXq+B,EACLl3B,KAAKsxS,eAAez4S,EAAwB,EAAGA,EAA0B,GAEzD,QAAXq+B,EACLl3B,KAAKuxS,mBAAmB14S,EAAwB,EAAGA,EAA0B,GAE7D,OAAXq+B,EACLl3B,KAAKmyS,uBAAuBt5S,GAG5BnV,EAAM,8CACF,QAAUwzC,GACV,qCAEZ,CACA,QAAAgwQ,CAASrmS,EAAWm1I,GAChBh2I,KAAKggS,KAAK,oBACVhgS,KAAK6uS,YAAa,EAClB7uS,KAAK0vS,gCAAiC,IAAIxmT,MAAO+mB,UACjDjQ,KAAKoyS,iBAAiBvxS,GACtBb,KAAK4/R,cAAgB5pJ,EACjBh2I,KAAKwvS,kBACLxvS,KAAKqyS,oBAETryS,KAAKsyS,gBACLtyS,KAAKwvS,kBAAmB,EACxBxvS,KAAKguS,kBAAiB,EAC1B,CACA,gBAAAuE,CAAiB/1Q,IACb,SAAQx8B,KAAKovS,UAAW,0DACpBpvS,KAAKivS,2BACL39N,aAAatxE,KAAKivS,2BAItBjvS,KAAKivS,0BAA4B3gS,YAAW,KACxCtO,KAAKivS,0BAA4B,KACjCjvS,KAAKwyS,sBAAsB,GAE5B7iS,KAAKq2B,MAAMxJ,GAClB,CACA,eAAAuzQ,IACS/vS,KAAKovS,WAAapvS,KAAKwvS,kBACxBxvS,KAAKuyS,iBAAiB,EAE9B,CACA,UAAA5C,CAAW/B,GAEHA,IACC5tS,KAAK2tS,UACN3tS,KAAK8uS,kBAAoB9uS,KAAK+uS,qBAC9B/uS,KAAKggS,KAAK,2CACVhgS,KAAK8uS,gBAAkBjB,GAClB7tS,KAAKovS,WACNpvS,KAAKuyS,iBAAiB,IAG9BvyS,KAAK2tS,SAAWC,CACpB,CACA,SAAAgC,CAAU6C,GACFA,GACAzyS,KAAKggS,KAAK,wBACVhgS,KAAK8uS,gBAAkBjB,GAClB7tS,KAAKovS,WACNpvS,KAAKuyS,iBAAiB,KAI1BvyS,KAAKggS,KAAK,8CACNhgS,KAAKovS,WACLpvS,KAAKovS,UAAUn3S,QAG3B,CACA,qBAAAy6S,GAQI,GAPA1yS,KAAKggS,KAAK,4BACVhgS,KAAK6uS,YAAa,EAClB7uS,KAAKovS,UAAY,KAEjBpvS,KAAK2yS,0BAEL3yS,KAAKkvS,eAAiB,CAAC,EACnBlvS,KAAK4yS,mBAAoB,CACzB,GAAK5yS,KAAK2tS,UAKL,GAAI3tS,KAAK0vS,+BAAgC,EAEJ,IAAIxmT,MAAO+mB,UAAYjQ,KAAK0vS,+BAjhB5C,MAmhBlB1vS,KAAK8uS,gBAAkBjB,IAE3B7tS,KAAK0vS,+BAAiC,IAC1C,OAXI1vS,KAAKggS,KAAK,8CACVhgS,KAAK8uS,gBAAkB9uS,KAAK+uS,mBAC5B/uS,KAAKyvS,4BAA6B,IAAIvmT,MAAO+mB,UAUjD,MAAM4iS,GAA8B,IAAI3pT,MAAO+mB,UAAYjQ,KAAKyvS,2BAChE,IAAIqD,EAAiBnjS,KAAKhT,IAAI,EAAGqD,KAAK8uS,gBAAkB+D,GACxDC,EAAiBnjS,KAAKG,SAAWgjS,EACjC9yS,KAAKggS,KAAK,0BAA4B8S,EAAiB,MACvD9yS,KAAKuyS,iBAAiBO,GAEtB9yS,KAAK8uS,gBAAkBn/R,KAAKjT,IAAIsD,KAAK+uS,mBA9hBd,IA8hBkC/uS,KAAK8uS,gBAClE,CACA9uS,KAAKguS,kBAAiB,EAC1B,CACA,0BAAMwE,GACF,GAAIxyS,KAAK4yS,mBAAoB,CACzB5yS,KAAKggS,KAAK,+BACVhgS,KAAKyvS,4BAA6B,IAAIvmT,MAAO+mB,UAC7CjQ,KAAK0vS,+BAAiC,KACtC,MAAMqD,EAAgB/yS,KAAKwpS,eAAe9oS,KAAKV,MACzCqtE,EAAUrtE,KAAKknS,SAASxmS,KAAKV,MAC7BmgS,EAAengS,KAAK0yS,sBAAsBhyS,KAAKV,MAC/Cw/R,EAASx/R,KAAKnU,GAAK,IAAMiiT,GAAqBkF,oBAC9CpT,EAAgB5/R,KAAK4/R,cAC3B,IAAIqT,GAAW,EACX59J,EAAa,KACjB,MAAM69J,EAAU,WACR79J,EACAA,EAAWp9I,SAGXg7S,GAAW,EACX9S,IAER,EACMgT,EAAgB,SAAU7/N,IAC5B,QAAO+hE,EAAY,0DACnBA,EAAW9f,YAAYjiD,EAC3B,EACAtzE,KAAKovS,UAAY,CACbn3S,MAAOi7S,EACP39K,YAAa49K,GAEjB,MAAMvhC,EAAe5xQ,KAAKqvS,mBAC1BrvS,KAAKqvS,oBAAqB,EAC1B,IAGI,MAAO3P,EAAWlhB,SAAuBr/P,QAAQivG,IAAI,CACjDpuH,KAAKkuS,mBAAmB/gJ,SAASykH,GACjC5xQ,KAAKmuS,uBAAuBhhJ,SAASykH,KAEpCqhC,EAWDzyS,EAAI,0CAVJA,EAAI,8CACJR,KAAKinS,WAAavH,GAAaA,EAAUpuB,YACzCtxQ,KAAKgnS,eAAiBxoB,GAAiBA,EAAcl2P,MACrD+sH,EAAa,IAAIwxJ,GAAWrH,EAAQx/R,KAAK8mS,UAAW9mS,KAAK+mS,eAAgB/mS,KAAKgnS,eAAgBhnS,KAAKinS,WAAY8L,EAAe1lO,EAAS8yN,GACzH3yR,IACVE,EAAKF,EAAS,KAAOxN,KAAK8mS,UAAUhtT,WAAa,KACjDkmB,KAAKozS,UA7kBQ,cA6kB+B,GAC7CxT,GAKX,CACA,MAAOl8S,GACHsc,KAAKggS,KAAK,wBAA0Bt8S,GAC/BuvT,IACGjzS,KAAK8mS,UAAUxJ,WAIf5vR,EAAKhqB,GAETwvT,IAER,CACJ,CACJ,CACA,SAAAE,CAAU5lS,GACNhN,EAAI,uCAAyCgN,GAC7CxN,KAAKsuS,kBAAkB9gS,IAAU,EAC7BxN,KAAKovS,UACLpvS,KAAKovS,UAAUn3S,SAGX+H,KAAKivS,4BACL39N,aAAatxE,KAAKivS,2BAClBjvS,KAAKivS,0BAA4B,MAEjCjvS,KAAK6uS,YACL7uS,KAAK0yS,wBAGjB,CACA,MAAA/5C,CAAOnrP,GACHhN,EAAI,mCAAqCgN,UAClCxN,KAAKsuS,kBAAkB9gS,IAC1B,QAAQxN,KAAKsuS,qBACbtuS,KAAK8uS,gBAAkBjB,GAClB7tS,KAAKovS,WACNpvS,KAAKuyS,iBAAiB,GAGlC,CACA,gBAAAH,CAAiBvxS,GACb,MAAMu9B,EAAQv9B,GAAY,IAAI3X,MAAO+mB,UACrCjQ,KAAKiuS,oBAAoB,CAAEoF,iBAAkBj1Q,GACjD,CACA,uBAAAu0Q,GACI,IAAK,IAAIp5T,EAAI,EAAGA,EAAIymB,KAAKwuS,iBAAiBh1T,OAAQD,IAAK,CACnD,MAAM8vL,EAAMrpK,KAAKwuS,iBAAiBj1T,GAC9B8vL,GAAgB,MAAOA,EAAIj/J,SAAWi/J,EAAIyoI,SACtCzoI,EAAIghI,YACJhhI,EAAIghI,WAAW,qBAEZrqS,KAAKwuS,iBAAiBj1T,GAC7BymB,KAAK0uS,uBAEb,CAEkC,IAA9B1uS,KAAK0uS,uBACL1uS,KAAKwuS,iBAAmB,GAEhC,CACA,gBAAA0D,CAAiB9H,EAAYl7K,GAEzB,IAAImhL,EAKAA,EAJCnhL,EAISA,EAAMpxI,KAAI8yC,GAAKuqQ,EAAkBvqQ,KAAIhyB,KAAK,KAH1C,UAKd,MAAM4/B,EAASx+B,KAAK6wS,cAAczG,EAAYiG,GAC1C7xQ,GAAUA,EAAO6rQ,YACjB7rQ,EAAO6rQ,WAAW,oBAE1B,CACA,aAAAwG,CAAczG,EAAYiG,GACtB,MAAMiD,EAAuB,IAAI5H,GAAKtB,GAAYtwT,WAClD,IAAI0kD,EACJ,GAAIx+B,KAAKuuS,QAAQ/9Q,IAAI8iR,GAAuB,CACxC,MAAMx1T,EAAMkiB,KAAKuuS,QAAQzlS,IAAIwqS,GAC7B90Q,EAAS1gD,EAAIgrB,IAAIunS,GACjBvyT,EAAIszC,OAAOi/Q,GACM,IAAbvyT,EAAIqE,MACJ6d,KAAKuuS,QAAQn9Q,OAAOkiR,EAE5B,MAGI90Q,OAAS5lC,EAEb,OAAO4lC,CACX,CACA,cAAA8yQ,CAAenzJ,EAAYo1J,GACvB/yS,EAAI,uBAAyB29I,EAAa,IAAMo1J,GAChDvzS,KAAKinS,WAAa,KAClBjnS,KAAKqvS,oBAAqB,EAC1BrvS,KAAKovS,UAAUn3S,QACI,kBAAfkmJ,GAAiD,sBAAfA,IAIlCn+I,KAAKsvS,yBACDtvS,KAAKsvS,wBAvrBW,IAyrBhBtvS,KAAK8uS,gBA9rBkB,IAisBvB9uS,KAAKkuS,mBAAmB3R,yBAGpC,CACA,kBAAAgV,CAAmBpzJ,EAAYo1J,GAC3B/yS,EAAI,4BAA8B29I,EAAa,IAAMo1J,GACrDvzS,KAAKgnS,eAAiB,KACtBhnS,KAAKqvS,oBAAqB,EAGP,kBAAflxJ,GAAiD,sBAAfA,IAIlCn+I,KAAKuvS,6BACDvvS,KAAKuvS,4BA3sBW,GA4sBhBvvS,KAAKmuS,uBAAuB5R,wBAGxC,CACA,sBAAA4V,CAAuBt5S,GACfmH,KAAKgvS,uBACLhvS,KAAKgvS,uBAAuBn2S,GAGxB,QAASA,GACTuH,QAAQI,IAAI,aAAe3H,EAAU,IAAE3S,QAAQ,KAAM,gBAGjE,CACA,aAAAosT,GAEItyS,KAAKixS,UACLjxS,KAAKmxS,cAGL,IAAK,MAAMqC,KAAWxzS,KAAKuuS,QAAQ7oP,SAC/B,IAAK,MAAM+qP,KAAc+C,EAAQ9tP,SAC7B1lD,KAAK2wS,YAAYF,GAGzB,IAAK,IAAIl3T,EAAI,EAAGA,EAAIymB,KAAKwuS,iBAAiBh1T,OAAQD,IAC1CymB,KAAKwuS,iBAAiBj1T,IACtBymB,KAAK6xS,SAASt4T,GAGtB,KAAOymB,KAAK4uS,0BAA0Bp1T,QAAQ,CAC1C,MAAM4wB,EAAUpK,KAAK4uS,0BAA0B3pS,QAC/CjF,KAAK2xS,kBAAkBvnS,EAAQ8sB,OAAQ9sB,EAAQggS,WAAYhgS,EAAQxgB,KAAMwgB,EAAQigS,WACrF,CACA,IAAK,IAAI9wT,EAAI,EAAGA,EAAIymB,KAAKyuS,iBAAiBj1T,OAAQD,IAC1CymB,KAAKyuS,iBAAiBl1T,IACtBymB,KAAKmwS,SAAS52T,EAG1B,CAIA,iBAAA84T,GACI,MAAMzH,EAAQ,CAAC,EACf,IAAI6I,EAAa,MACb,YAEIA,EADAzzS,KAAK8mS,UAAUxJ,UACF,aAGA,QAGrBsN,EAAM,OAAS6I,EAAa,IAAMlwR,EAAYr9B,QAAQ,MAAO,MAAQ,GACjE,UACA0kT,EAAM,qBAAuB,GAExB,YACLA,EAAM,yBAA2B,GAErC5qS,KAAK2qS,YAAYC,EACrB,CACA,gBAAAgI,GACI,MAAMH,EAASrH,GAAcC,cAAcE,kBAC3C,OAAO,QAAQvrS,KAAKsuS,oBAAsBmE,CAC9C,EAEJ3E,GAAqBO,4BAA8B,EAInDP,GAAqBkF,kBAAoB,EAkBzC,MAAMU,GACF,WAAA7xR,CAAYj9B,EAAMw5E,GACdp+D,KAAKpb,KAAOA,EACZob,KAAKo+D,KAAOA,CAChB,CACA,WAAOu1O,CAAK/uT,EAAMw5E,GACd,OAAO,IAAIs1O,GAAU9uT,EAAMw5E,EAC/B,EAmBJ,MAAMw1O,GAKF,UAAAC,GACI,OAAO7zS,KAAKk1E,QAAQx0E,KAAKV,KAC7B,CAQA,mBAAA8zS,CAAoBC,EAASC,GACzB,MAAMC,EAAa,IAAIP,GAAU/Y,EAAUoZ,GACrCG,EAAa,IAAIR,GAAU/Y,EAAUqZ,GAC3C,OAAgD,IAAzCh0S,KAAKk1E,QAAQ++N,EAAYC,EACpC,CAKA,OAAAC,GAEI,OAAOT,GAAUU,GACrB,EAmBJ,IAAIC,GACJ,MAAMC,WAAiBV,GACnB,uBAAWS,GACP,OAAOA,EACX,CACA,uBAAWA,CAAaz4S,GACpBy4S,GAAez4S,CACnB,CACA,OAAAs5E,CAAQv6F,EAAGu3B,GACP,OAAO2oR,EAAYlgT,EAAEiK,KAAMstB,EAAEttB,KACjC,CACA,WAAA2vT,CAAYn2O,GAGR,MAAM,QAAe,kDACzB,CACA,mBAAA01O,CAAoBC,EAASC,GACzB,OAAO,CACX,CACA,OAAAG,GAEI,OAAOT,GAAUU,GACrB,CACA,OAAAI,GAGI,OAAO,IAAId,GAAU9Y,EAAUyZ,GACnC,CACA,QAAAI,CAASC,EAAY9vT,GAGjB,OAFA,QAA6B,kBAAf8vT,EAAyB,gDAEhC,IAAIhB,GAAUgB,EAAYL,GACrC,CAIA,QAAAv6T,GACI,MAAO,MACX,EAEJ,MAAM66T,GAAY,IAAIL,GAqBtB,MAAMM,GAKF,WAAA/yR,CAAYu8C,EAAMy2O,EAAUx/C,EAAYy/C,EAAYC,EAAmB,MACnE/0S,KAAK80S,WAAaA,EAClB90S,KAAK+0S,iBAAmBA,EACxB/0S,KAAKg1S,WAAa,GAClB,IAAInqD,EAAM,EACV,MAAQzsL,EAAKnyC,WAOT,GALA4+N,EAAMgqD,EAAWx/C,EAAWj3L,EAAKlkF,IAAK26T,GAAY,EAE9CC,IACAjqD,IAAQ,GAERA,EAAM,EAGFzsL,EADAp+D,KAAK80S,WACE12O,EAAK3pE,KAGL2pE,EAAK/lE,UAGf,IAAY,IAARwyP,EAAW,CAEhB7qP,KAAKg1S,WAAW35T,KAAK+iF,GACrB,KACJ,CAGIp+D,KAAKg1S,WAAW35T,KAAK+iF,GAEjBA,EADAp+D,KAAK80S,WACE12O,EAAK/lE,MAGL+lE,EAAK3pE,IAEpB,CAER,CACA,OAAAwgT,GACI,GAA+B,IAA3Bj1S,KAAKg1S,WAAWx7T,OAChB,OAAO,KAEX,IACIqE,EADAugF,EAAOp+D,KAAKg1S,WAAW3wS,MAQ3B,GALIxmB,EADAmiB,KAAK+0S,iBACI/0S,KAAK+0S,iBAAiB32O,EAAKlkF,IAAKkkF,EAAKhkF,OAGrC,CAAEF,IAAKkkF,EAAKlkF,IAAKE,MAAOgkF,EAAKhkF,OAEtC4lB,KAAK80S,WAEL,IADA12O,EAAOA,EAAK3pE,MACJ2pE,EAAKnyC,WACTjsB,KAAKg1S,WAAW35T,KAAK+iF,GACrBA,EAAOA,EAAK/lE,WAKhB,IADA+lE,EAAOA,EAAK/lE,OACJ+lE,EAAKnyC,WACTjsB,KAAKg1S,WAAW35T,KAAK+iF,GACrBA,EAAOA,EAAK3pE,KAGpB,OAAO5W,CACX,CACA,OAAAq2P,GACI,OAAOl0O,KAAKg1S,WAAWx7T,OAAS,CACpC,CACA,IAAAu1O,GACI,GAA+B,IAA3B/uN,KAAKg1S,WAAWx7T,OAChB,OAAO,KAEX,MAAM4kF,EAAOp+D,KAAKg1S,WAAWh1S,KAAKg1S,WAAWx7T,OAAS,GACtD,OAAIwmB,KAAK+0S,iBACE/0S,KAAK+0S,iBAAiB32O,EAAKlkF,IAAKkkF,EAAKhkF,OAGrC,CAAEF,IAAKkkF,EAAKlkF,IAAKE,MAAOgkF,EAAKhkF,MAE5C,EAKJ,MAAM86T,GAQF,WAAArzR,CAAY3nC,EAAKE,EAAO2kN,EAAOtqM,EAAM4D,GACjC2H,KAAK9lB,IAAMA,EACX8lB,KAAK5lB,MAAQA,EACb4lB,KAAK++L,MAAiB,MAATA,EAAgBA,EAAQm2G,GAASC,IAC9Cn1S,KAAKvL,KACO,MAARA,EAAeA,EAAO2gT,GAAUC,WACpCr1S,KAAK3H,MACQ,MAATA,EAAgBA,EAAQ+8S,GAAUC,UAC1C,CAWA,IAAA50O,CAAKvmF,EAAKE,EAAO2kN,EAAOtqM,EAAM4D,GAC1B,OAAO,IAAI68S,GAAgB,MAAPh7T,EAAcA,EAAM8lB,KAAK9lB,IAAc,MAATE,EAAgBA,EAAQ4lB,KAAK5lB,MAAgB,MAAT2kN,EAAgBA,EAAQ/+L,KAAK++L,MAAe,MAARtqM,EAAeA,EAAOuL,KAAKvL,KAAe,MAAT4D,EAAgBA,EAAQ2H,KAAK3H,MAC5L,CAIA,KAAAjE,GACI,OAAO4L,KAAKvL,KAAKL,QAAU,EAAI4L,KAAK3H,MAAMjE,OAC9C,CAIA,OAAA63B,GACI,OAAO,CACX,CAUA,gBAAAqpR,CAAiBp+Q,GACb,OAAQl3B,KAAKvL,KAAK6gT,iBAAiBp+Q,MAC7BA,EAAOl3B,KAAK9lB,IAAK8lB,KAAK5lB,QACxB4lB,KAAK3H,MAAMi9S,iBAAiBp+Q,EACpC,CASA,gBAAAq+Q,CAAiBr+Q,GACb,OAAQl3B,KAAK3H,MAAMk9S,iBAAiBr+Q,IAChCA,EAAOl3B,KAAK9lB,IAAK8lB,KAAK5lB,QACtB4lB,KAAKvL,KAAK8gT,iBAAiBr+Q,EACnC,CAIA,IAAAs+Q,GACI,OAAIx1S,KAAKvL,KAAKw3B,UACHjsB,KAGAA,KAAKvL,KAAK+gT,MAEzB,CAIA,MAAAC,GACI,OAAOz1S,KAAKw1S,OAAOt7T,GACvB,CAIA,MAAAw7T,GACI,OAAI11S,KAAK3H,MAAM4zB,UACJjsB,KAAK9lB,IAGL8lB,KAAK3H,MAAMq9S,QAE1B,CAOA,MAAAC,CAAOz7T,EAAKE,EAAOi7Q,GACf,IAAI76Q,EAAIwlB,KACR,MAAM6qP,EAAMwK,EAAWn7Q,EAAKM,EAAEN,KAU9B,OARIM,EADAqwQ,EAAM,EACFrwQ,EAAEimF,KAAK,KAAM,KAAM,KAAMjmF,EAAEia,KAAKkhT,OAAOz7T,EAAKE,EAAOi7Q,GAAa,MAEvD,IAARxK,EACDrwQ,EAAEimF,KAAK,KAAMrmF,EAAO,KAAM,KAAM,MAGhCI,EAAEimF,KAAK,KAAM,KAAM,KAAM,KAAMjmF,EAAE6d,MAAMs9S,OAAOz7T,EAAKE,EAAOi7Q,IAE3D76Q,EAAEo7T,QACb,CAIA,UAAAC,GACI,GAAI71S,KAAKvL,KAAKw3B,UACV,OAAOmpR,GAAUC,WAErB,IAAI76T,EAAIwlB,KAKR,OAJKxlB,EAAEia,KAAKqhT,UAAat7T,EAAEia,KAAKA,KAAKqhT,WACjCt7T,EAAIA,EAAEu7T,gBAEVv7T,EAAIA,EAAEimF,KAAK,KAAM,KAAM,KAAMjmF,EAAEia,KAAKohT,aAAc,MAC3Cr7T,EAAEo7T,QACb,CAMA,MAAAh2L,CAAO1lI,EAAKm7Q,GACR,IAAI76Q,EAAGw7T,EAEP,GADAx7T,EAAIwlB,KACAq1P,EAAWn7Q,EAAKM,EAAEN,KAAO,EACpBM,EAAEia,KAAKw3B,WAAczxC,EAAEia,KAAKqhT,UAAat7T,EAAEia,KAAKA,KAAKqhT,WACtDt7T,EAAIA,EAAEu7T,gBAEVv7T,EAAIA,EAAEimF,KAAK,KAAM,KAAM,KAAMjmF,EAAEia,KAAKmrH,OAAO1lI,EAAKm7Q,GAAa,UAE5D,CAOD,GANI76Q,EAAEia,KAAKqhT,WACPt7T,EAAIA,EAAEy7T,gBAELz7T,EAAE6d,MAAM4zB,WAAczxC,EAAE6d,MAAMy9S,UAAat7T,EAAE6d,MAAM5D,KAAKqhT,WACzDt7T,EAAIA,EAAE07T,iBAEqB,IAA3B7gD,EAAWn7Q,EAAKM,EAAEN,KAAY,CAC9B,GAAIM,EAAE6d,MAAM4zB,UACR,OAAOmpR,GAAUC,WAGjBW,EAAWx7T,EAAE6d,MAAMm9S,OACnBh7T,EAAIA,EAAEimF,KAAKu1O,EAAS97T,IAAK87T,EAAS57T,MAAO,KAAM,KAAMI,EAAE6d,MAAMw9S,aAErE,CACAr7T,EAAIA,EAAEimF,KAAK,KAAM,KAAM,KAAM,KAAMjmF,EAAE6d,MAAMunH,OAAO1lI,EAAKm7Q,GAC3D,CACA,OAAO76Q,EAAEo7T,QACb,CAIA,MAAAE,GACI,OAAO91S,KAAK++L,KAChB,CAIA,MAAA62G,GACI,IAAIp7T,EAAIwlB,KAUR,OATIxlB,EAAE6d,MAAMy9S,WAAat7T,EAAEia,KAAKqhT,WAC5Bt7T,EAAIA,EAAE27T,eAEN37T,EAAEia,KAAKqhT,UAAYt7T,EAAEia,KAAKA,KAAKqhT,WAC/Bt7T,EAAIA,EAAEy7T,gBAENz7T,EAAEia,KAAKqhT,UAAYt7T,EAAE6d,MAAMy9S,WAC3Bt7T,EAAIA,EAAE47T,cAEH57T,CACX,CAIA,YAAAu7T,GACI,IAAIv7T,EAAIwlB,KAAKo2S,aAMb,OALI57T,EAAE6d,MAAM5D,KAAKqhT,WACbt7T,EAAIA,EAAEimF,KAAK,KAAM,KAAM,KAAM,KAAMjmF,EAAE6d,MAAM49S,gBAC3Cz7T,EAAIA,EAAE27T,cACN37T,EAAIA,EAAE47T,cAEH57T,CACX,CAIA,aAAA07T,GACI,IAAI17T,EAAIwlB,KAAKo2S,aAKb,OAJI57T,EAAEia,KAAKA,KAAKqhT,WACZt7T,EAAIA,EAAEy7T,eACNz7T,EAAIA,EAAE47T,cAEH57T,CACX,CAIA,WAAA27T,GACI,MAAMthG,EAAK70M,KAAKygE,KAAK,KAAM,KAAMy0O,GAASC,IAAK,KAAMn1S,KAAK3H,MAAM5D,MAChE,OAAOuL,KAAK3H,MAAMooE,KAAK,KAAM,KAAMzgE,KAAK++L,MAAO8V,EAAI,KACvD,CAIA,YAAAohG,GACI,MAAMI,EAAKr2S,KAAKygE,KAAK,KAAM,KAAMy0O,GAASC,IAAKn1S,KAAKvL,KAAK4D,MAAO,MAChE,OAAO2H,KAAKvL,KAAKgsE,KAAK,KAAM,KAAMzgE,KAAK++L,MAAO,KAAMs3G,EACxD,CAIA,UAAAD,GACI,MAAM3hT,EAAOuL,KAAKvL,KAAKgsE,KAAK,KAAM,MAAOzgE,KAAKvL,KAAKsqM,MAAO,KAAM,MAC1D1mM,EAAQ2H,KAAK3H,MAAMooE,KAAK,KAAM,MAAOzgE,KAAK3H,MAAM0mM,MAAO,KAAM,MACnE,OAAO/+L,KAAKygE,KAAK,KAAM,MAAOzgE,KAAK++L,MAAOtqM,EAAM4D,EACpD,CAMA,cAAAi+S,GACI,MAAMC,EAAav2S,KAAKw2S,SACxB,OAAO7mS,KAAKC,IAAI,EAAK2mS,IAAev2S,KAAK5L,QAAU,CACvD,CACA,MAAAoiT,GACI,GAAIx2S,KAAK81S,UAAY91S,KAAKvL,KAAKqhT,SAC3B,MAAM,IAAIpyS,MAAM,0BAA4B1D,KAAK9lB,IAAM,IAAM8lB,KAAK5lB,MAAQ,KAE9E,GAAI4lB,KAAK3H,MAAMy9S,SACX,MAAM,IAAIpyS,MAAM,mBAAqB1D,KAAK9lB,IAAM,IAAM8lB,KAAK5lB,MAAQ,YAEvE,MAAMm8T,EAAav2S,KAAKvL,KAAK+hT,SAC7B,GAAID,IAAev2S,KAAK3H,MAAMm+S,SAC1B,MAAM,IAAI9yS,MAAM,uBAGhB,OAAO6yS,GAAcv2S,KAAK81S,SAAW,EAAI,EAEjD,EAEJZ,GAASC,KAAM,EACfD,GAASuB,OAAQ,EAwFjB,MAAMrB,GAKF,WAAAvzR,CAAY60R,EAAaC,EAAQvB,GAAUC,YACvCr1S,KAAK02S,YAAcA,EACnB12S,KAAK22S,MAAQA,CACjB,CASA,MAAAhB,CAAOz7T,EAAKE,GACR,OAAO,IAAIg7T,GAAUp1S,KAAK02S,YAAa12S,KAAK22S,MACvChB,OAAOz7T,EAAKE,EAAO4lB,KAAK02S,aACxBj2O,KAAK,KAAM,KAAMy0O,GAASuB,MAAO,KAAM,MAChD,CAOA,MAAA72L,CAAO1lI,GACH,OAAO,IAAIk7T,GAAUp1S,KAAK02S,YAAa12S,KAAK22S,MACvC/2L,OAAO1lI,EAAK8lB,KAAK02S,aACjBj2O,KAAK,KAAM,KAAMy0O,GAASuB,MAAO,KAAM,MAChD,CAQA,GAAA3tS,CAAI5uB,GACA,IAAI2wQ,EACAzsL,EAAOp+D,KAAK22S,MAChB,MAAQv4O,EAAKnyC,WAAW,CAEpB,GADA4+N,EAAM7qP,KAAK02S,YAAYx8T,EAAKkkF,EAAKlkF,KACrB,IAAR2wQ,EACA,OAAOzsL,EAAKhkF,MAEPywQ,EAAM,EACXzsL,EAAOA,EAAK3pE,KAEPo2P,EAAM,IACXzsL,EAAOA,EAAK/lE,MAEpB,CACA,OAAO,IACX,CAMA,iBAAAu+S,CAAkB18T,GACd,IAAI2wQ,EAAKzsL,EAAOp+D,KAAK22S,MAAOE,EAAc,KAC1C,MAAQz4O,EAAKnyC,WAAW,CAEpB,GADA4+N,EAAM7qP,KAAK02S,YAAYx8T,EAAKkkF,EAAKlkF,KACrB,IAAR2wQ,EAAW,CACX,GAAKzsL,EAAK3pE,KAAKw3B,UAOV,OAAI4qR,EACEA,EAAY38T,IAGZ,KATP,IADAkkF,EAAOA,EAAK3pE,MACJ2pE,EAAK/lE,MAAM4zB,WACfmyC,EAAOA,EAAK/lE,MAEhB,OAAO+lE,EAAKlkF,GAQpB,CACS2wQ,EAAM,EACXzsL,EAAOA,EAAK3pE,KAEPo2P,EAAM,IACXgsD,EAAcz4O,EACdA,EAAOA,EAAK/lE,MAEpB,CACA,MAAM,IAAIqL,MAAM,wEACpB,CAIA,OAAAuoB,GACI,OAAOjsB,KAAK22S,MAAM1qR,SACtB,CAIA,KAAA73B,GACI,OAAO4L,KAAK22S,MAAMviT,OACtB,CAIA,MAAAqhT,GACI,OAAOz1S,KAAK22S,MAAMlB,QACtB,CAIA,MAAAC,GACI,OAAO11S,KAAK22S,MAAMjB,QACtB,CAUA,gBAAAJ,CAAiBp+Q,GACb,OAAOl3B,KAAK22S,MAAMrB,iBAAiBp+Q,EACvC,CASA,gBAAAq+Q,CAAiBr+Q,GACb,OAAOl3B,KAAK22S,MAAMpB,iBAAiBr+Q,EACvC,CAKA,WAAA4/Q,CAAYC,GACR,OAAO,IAAInC,GAAkB50S,KAAK22S,MAAO,KAAM32S,KAAK02S,aAAa,EAAOK,EAC5E,CACA,eAAAC,CAAgB98T,EAAK68T,GACjB,OAAO,IAAInC,GAAkB50S,KAAK22S,MAAOz8T,EAAK8lB,KAAK02S,aAAa,EAAOK,EAC3E,CACA,sBAAAE,CAAuB/8T,EAAK68T,GACxB,OAAO,IAAInC,GAAkB50S,KAAK22S,MAAOz8T,EAAK8lB,KAAK02S,aAAa,EAAMK,EAC1E,CACA,kBAAAG,CAAmBH,GACf,OAAO,IAAInC,GAAkB50S,KAAK22S,MAAO,KAAM32S,KAAK02S,aAAa,EAAMK,EAC3E,EAuBJ,SAASI,GAAqB1iT,EAAM4D,GAChC,OAAOwiS,EAAYpmS,EAAK7P,KAAMyT,EAAMzT,KACxC,CACA,SAASwyT,GAAgB3iT,EAAM4D,GAC3B,OAAOwiS,EAAYpmS,EAAM4D,EAC7B,CAkBA,IAAIg/S,GAzCJjC,GAAUC,WAAa,IAlPvB,MAMI,IAAA50O,CAAKvmF,EAAKE,EAAO2kN,EAAOtqM,EAAM4D,GAC1B,OAAO2H,IACX,CASA,MAAA21S,CAAOz7T,EAAKE,EAAOi7Q,GACf,OAAO,IAAI6/C,GAASh7T,EAAKE,EAAO,KACpC,CAQA,MAAAwlI,CAAO1lI,EAAKm7Q,GACR,OAAOr1P,IACX,CAIA,KAAA5L,GACI,OAAO,CACX,CAIA,OAAA63B,GACI,OAAO,CACX,CASA,gBAAAqpR,CAAiBp+Q,GACb,OAAO,CACX,CASA,gBAAAq+Q,CAAiBr+Q,GACb,OAAO,CACX,CACA,MAAAu+Q,GACI,OAAO,IACX,CACA,MAAAC,GACI,OAAO,IACX,CACA,MAAAc,GACI,OAAO,CACX,CAIA,MAAAV,GACI,OAAO,CACX,GAiNJ,MAAMwB,GAAmB,SAAUvsP,GAC/B,MAAwB,kBAAbA,EACA,UAAYwwO,EAAsBxwO,GAGlC,UAAYA,CAE3B,EAIMwsP,GAAuB,SAAUC,GACnC,GAAIA,EAAaC,aAAc,CAC3B,MAAM77S,EAAM47S,EAAa57S,OACzB,QAAsB,kBAARA,GACK,kBAARA,GACS,kBAARA,IAAoB,QAASA,EAAK,OAAS,uCAC3D,MAEI,QAAO47S,IAAiBH,IAAcG,EAAavrR,UAAW,iCAGlE,QAAOurR,IAAiBH,IAAcG,EAAaE,cAAczrR,UAAW,qDAChF,EAkBA,IAAI0rR,GAuOAC,GACAC,GAlOJ,MAAMC,GACF,oCAAWH,CAA0B/7S,GACjC+7S,GAA4B/7S,CAChC,CACA,oCAAW+7S,GACP,OAAOA,EACX,CAMA,WAAA91R,CAAYk2R,EAAQC,EAAgBF,GAASH,0BAA0BtC,YACnEr1S,KAAK+3S,OAASA,EACd/3S,KAAKg4S,cAAgBA,EACrBh4S,KAAKi4S,UAAY,MACjB,aAAuBr/S,IAAhBoH,KAAK+3S,QAAwC,OAAhB/3S,KAAK+3S,OAAiB,4DAC1DR,GAAqBv3S,KAAKg4S,cAC9B,CAEA,UAAAP,GACI,OAAO,CACX,CAEA,WAAAC,GACI,OAAO13S,KAAKg4S,aAChB,CAEA,cAAAE,CAAeC,GACX,OAAO,IAAIL,GAAS93S,KAAK+3S,OAAQI,EACrC,CAEA,iBAAAC,CAAkBC,GAEd,MAAkB,cAAdA,EACOr4S,KAAKg4S,cAGLF,GAASH,0BAA0BtC,UAElD,CAEA,QAAAiD,CAAS5yT,GACL,OAAIinT,GAAYjnT,GACLsa,KAEqB,cAAvBisS,GAAavmT,GACXsa,KAAKg4S,cAGLF,GAASH,0BAA0BtC,UAElD,CACA,QAAAkD,GACI,OAAO,CACX,CAEA,uBAAAC,CAAwBH,EAAWI,GAC/B,OAAO,IACX,CAEA,oBAAAC,CAAqBL,EAAWM,GAC5B,MAAkB,cAAdN,EACOr4S,KAAKk4S,eAAeS,GAEtBA,EAAa1sR,WAA2B,cAAdosR,EACxBr4S,KAGA83S,GAASH,0BAA0BtC,WAAWqD,qBAAqBL,EAAWM,GAAcT,eAAel4S,KAAKg4S,cAE/H,CAEA,WAAAY,CAAYlzT,EAAMizT,GACd,MAAMvlS,EAAQ64R,GAAavmT,GAC3B,OAAc,OAAV0tB,EACOulS,EAEFA,EAAa1sR,WAAuB,cAAV7Y,EACxBpT,OAGP,QAAiB,cAAVoT,GAAiD,IAAxB84R,GAAcxmT,GAAa,8CACpDsa,KAAK04S,qBAAqBtlS,EAAO0kS,GAASH,0BAA0BtC,WAAWuD,YAAYzM,GAAazmT,GAAOizT,IAE9H,CAEA,OAAA1sR,GACI,OAAO,CACX,CAEA,WAAA4sR,GACI,OAAO,CACX,CAEA,YAAAC,CAAap3T,EAAOw1C,GAChB,OAAO,CACX,CACA,GAAAt7B,CAAIm9S,GACA,OAAIA,IAAiB/4S,KAAK03S,cAAczrR,UAC7B,CACH,SAAUjsB,KAAK+yF,WACf,YAAa/yF,KAAK03S,cAAc97S,OAI7BoE,KAAK+yF,UAEpB,CAEA,IAAAp1E,GACI,GAAuB,OAAnB3d,KAAKi4S,UAAoB,CACzB,IAAIe,EAAS,GACRh5S,KAAKg4S,cAAc/rR,YACpB+sR,GACI,YACI1B,GAAiBt3S,KAAKg4S,cAAcp8S,OACpC,KAEZ,MAAM5d,SAAcgiB,KAAK+3S,OACzBiB,GAAUh7T,EAAO,IAEbg7T,GADS,WAATh7T,EACUu9S,EAAsBv7R,KAAK+3S,QAG3B/3S,KAAK+3S,OAEnB/3S,KAAKi4S,UAAYne,EAAKkf,EAC1B,CACA,OAAOh5S,KAAKi4S,SAChB,CAKA,QAAAllN,GACI,OAAO/yF,KAAK+3S,MAChB,CACA,SAAAkB,CAAUnyP,GACN,OAAIA,IAAUgxP,GAASH,0BAA0BtC,WACtC,EAEFvuP,aAAiBgxP,GAASH,2BACvB,IAGR,QAAO7wP,EAAM2wP,aAAc,qBACpBz3S,KAAKk5S,mBAAmBpyP,GAEvC,CAIA,kBAAAoyP,CAAmBC,GACf,MAAMC,SAAuBD,EAAUpB,OACjCsB,SAAsBr5S,KAAK+3S,OAC3BuB,EAAaxB,GAASyB,iBAAiBn+T,QAAQg+T,GAC/CI,EAAY1B,GAASyB,iBAAiBn+T,QAAQi+T,GAGpD,OAFA,QAAOC,GAAc,EAAG,sBAAwBF,IAChD,QAAOI,GAAa,EAAG,sBAAwBH,GAC3CC,IAAeE,EAEM,WAAjBH,EAEO,EAIHr5S,KAAK+3S,OAASoB,EAAUpB,QAChB,EAEH/3S,KAAK+3S,SAAWoB,EAAUpB,OACxB,EAGA,EAKRyB,EAAYF,CAE3B,CACA,SAAAG,GACI,OAAOz5S,IACX,CACA,SAAA05S,GACI,OAAO,CACX,CACA,MAAAC,CAAO7yP,GACH,GAAIA,IAAU9mD,KACV,OAAO,EAEN,GAAI8mD,EAAM2wP,aAAc,CACzB,MAAM0B,EAAYryP,EAClB,OAAQ9mD,KAAK+3S,SAAWoB,EAAUpB,QAC9B/3S,KAAKg4S,cAAc2B,OAAOR,EAAUnB,cAC5C,CAEI,OAAO,CAEf,EAMJF,GAASyB,iBAAmB,CAAC,SAAU,UAAW,SAAU,UA8D5D,MAAMK,GAAiB,IApCvB,cAA4BhG,GACxB,OAAA1+N,CAAQv6F,EAAGu3B,GACP,MAAM2nS,EAAYl/T,EAAEyjF,KAAKs5O,cACnBoC,EAAY5nS,EAAEksD,KAAKs5O,cACnBqC,EAAWF,EAAUZ,UAAUa,GACrC,OAAiB,IAAbC,EACOlf,EAAYlgT,EAAEiK,KAAMstB,EAAEttB,MAGtBm1T,CAEf,CACA,WAAAxF,CAAYn2O,GACR,OAAQA,EAAKs5O,cAAczrR,SAC/B,CACA,mBAAA6nR,CAAoBC,EAASC,GACzB,OAAQD,EAAQ2D,cAAciC,OAAO3F,EAAQ0D,cACjD,CACA,OAAAvD,GAEI,OAAOT,GAAUU,GACrB,CACA,OAAAI,GACI,OAAO,IAAId,GAAU9Y,EAAU,IAAIkd,GAAS,kBAAmBD,IACnE,CACA,QAAApD,CAASC,EAAY9vT,GACjB,MAAM4yT,EAAeI,GAAelD,GACpC,OAAO,IAAIhB,GAAU9uT,EAAM,IAAIkzT,GAAS,kBAAmBN,GAC/D,CAIA,QAAA19T,GACI,MAAO,WACX,GAoBEkgU,GAAQrqS,KAAKnP,IAAI,GACvB,MAAMy5S,GACF,WAAAp4R,CAAYroC,GACS,IAACq1B,EAIlB7O,KAAK5L,OAJaya,EAIIr1B,EAAS,EAF/BqjB,SAAU8S,KAAKnP,IAAIqO,GAAOmrS,GAAQ,KAGlCh6S,KAAKk6S,SAAWl6S,KAAK5L,MAAQ,EAC7B,MAAMgoO,GAHW9xG,EAGItqH,KAAK5L,MAHAyI,SAASjjB,MAAM0wI,EAAO,GAAG1rH,KAAK,KAAM,IAA9C,IAAC0rH,EAIjBtqH,KAAKm6S,MAAS3gU,EAAS,EAAK4iP,CAChC,CACA,YAAAg+E,GAEI,MAAMv8T,IAAWmiB,KAAKm6S,MAAS,GAAOn6S,KAAKk6S,UAE3C,OADAl6S,KAAKk6S,WACEr8T,CACX,EAeJ,MAAMw8T,GAAgB,SAAUC,EAAWzvD,EAAK0vD,EAAOC,GACnDF,EAAU/6Q,KAAKsrN,GACf,MAAM4vD,EAAoB,SAAU9lF,EAAK7kM,GACrC,MAAMt2C,EAASs2C,EAAO6kM,EACtB,IAAI+lF,EACAxgU,EACJ,GAAe,IAAXV,EACA,OAAO,KAEN,GAAe,IAAXA,EAGL,OAFAkhU,EAAYJ,EAAU3lF,GACtBz6O,EAAMqgU,EAAQA,EAAMG,GAAaA,EAC1B,IAAIxF,GAASh7T,EAAKwgU,EAAUt8O,KAAM82O,GAASuB,MAAO,KAAM,MAE9D,CAED,MAAMkE,EAAS99S,SAAUrjB,EAAS,EAAI,IAAMm7O,EACtClgO,EAAOgmT,EAAkB9lF,EAAKgmF,GAC9BtiT,EAAQoiT,EAAkBE,EAAS,EAAG7qR,GAG5C,OAFA4qR,EAAYJ,EAAUK,GACtBzgU,EAAMqgU,EAAQA,EAAMG,GAAaA,EAC1B,IAAIxF,GAASh7T,EAAKwgU,EAAUt8O,KAAM82O,GAASuB,MAAOhiT,EAAM4D,EACnE,CACJ,EAwCM4I,EAvCmB,SAAU25S,GAC/B,IAAIx8O,EAAO,KACPn9D,EAAO,KACPvf,EAAQ44T,EAAU9gU,OACtB,MAAMqhU,EAAe,SAAUC,EAAW/7G,GACtC,MAAM41B,EAAMjzO,EAAQo5T,EACdhrR,EAAOpuC,EACbA,GAASo5T,EACT,MAAMC,EAAYN,EAAkB9lF,EAAM,EAAG7kM,GACvC4qR,EAAYJ,EAAU3lF,GACtBz6O,EAAMqgU,EAAQA,EAAMG,GAAaA,EACvCM,EAAc,IAAI9F,GAASh7T,EAAKwgU,EAAUt8O,KAAM2gI,EAAO,KAAMg8G,GACjE,EACMC,EAAgB,SAAUC,GACxB78O,GACAA,EAAK3pE,KAAOwmT,EACZ78O,EAAO68O,IAGPh6S,EAAOg6S,EACP78O,EAAO68O,EAEf,EACA,IAAK,IAAI1hU,EAAI,EAAGA,EAAIqhU,EAAOxmT,QAAS7a,EAAG,CACnC,MAAM2hU,EAAQN,EAAOR,eAEfU,EAAYnrS,KAAKC,IAAI,EAAGgrS,EAAOxmT,OAAS7a,EAAI,IAC9C2hU,EACAL,EAAaC,EAAW5F,GAASuB,QAIjCoE,EAAaC,EAAW5F,GAASuB,OACjCoE,EAAaC,EAAW5F,GAASC,KAEzC,CACA,OAAOl0S,CACX,CAEak6S,CADE,IAAIlB,GAAUK,EAAU9gU,SAGvC,OAAO,IAAI47T,GAAUoF,GAAa3vD,EAAK5pP,EAC3C,EAkBA,IAAIm6S,GACJ,MAAMC,GAAiB,CAAC,EACxB,MAAMC,GAIF,kBAAWC,GAKP,OAJA,QAAOF,IAAkBzB,GAAgB,uCACzCwB,GACIA,IACI,IAAIE,GAAS,CAAE,YAAaD,IAAkB,CAAE,YAAazB,KAC9DwB,EACX,CACA,WAAAv5R,CAAY25R,EAAUC,GAClBz7S,KAAKw7S,SAAWA,EAChBx7S,KAAKy7S,UAAYA,CACrB,CACA,GAAA3yS,CAAI4yS,GACA,MAAMC,GAAY,QAAQ37S,KAAKw7S,SAAUE,GACzC,IAAKC,EACD,MAAM,IAAIj4S,MAAM,wBAA0Bg4S,GAE9C,OAAIC,aAAqBvG,GACduG,EAKA,IAEf,CACA,QAAAC,CAASC,GACL,OAAO,QAAS77S,KAAKy7S,UAAWI,EAAgB/hU,WACpD,CACA,QAAAgiU,CAASD,EAAiBE,IACtB,QAAOF,IAAoBlH,GAAW,uEACtC,MAAM2F,EAAY,GAClB,IAAI0B,GAAkB,EACtB,MAAM9qI,EAAO6qI,EAAiBjF,YAAYpD,GAAUC,MACpD,IAOI3iE,EAPAjjO,EAAOmjK,EAAK+jI,UAChB,KAAOlnS,GACHiuS,EACIA,GAAmBH,EAAgBtH,YAAYxmS,EAAKqwD,MACxDk8O,EAAUj/T,KAAK0yB,GACfA,EAAOmjK,EAAK+jI,UAIZjkE,EADAgrE,EACW3B,GAAcC,EAAWuB,EAAgBhI,cAGzCwH,GAEf,MAAMY,EAAYJ,EAAgB/hU,WAC5BoiU,EAAcniU,OAAO+lB,OAAO,CAAC,EAAGE,KAAKy7S,WAC3CS,EAAYD,GAAaJ,EACzB,MAAMM,EAAapiU,OAAO+lB,OAAO,CAAC,EAAGE,KAAKw7S,UAE1C,OADAW,EAAWF,GAAajrE,EACjB,IAAIsqE,GAASa,EAAYD,EACpC,CAIA,YAAAE,CAAa1B,EAAWqB,GACpB,MAAMI,GAAa,QAAIn8S,KAAKw7S,UAAU,CAACa,EAAiBJ,KACpD,MAAMv6T,GAAQ,QAAQse,KAAKy7S,UAAWQ,GAEtC,IADA,QAAOv6T,EAAO,oCAAsCu6T,GAChDI,IAAoBhB,GAAgB,CAEpC,GAAI35T,EAAM6yT,YAAYmG,EAAUt8O,MAAO,CAEnC,MAAMk8O,EAAY,GACZppI,EAAO6qI,EAAiBjF,YAAYpD,GAAUC,MACpD,IAAI5lS,EAAOmjK,EAAK+jI,UAChB,KAAOlnS,GACCA,EAAKnpB,OAAS81T,EAAU91T,MACxB01T,EAAUj/T,KAAK0yB,GAEnBA,EAAOmjK,EAAK+jI,UAGhB,OADAqF,EAAUj/T,KAAKq/T,GACRL,GAAcC,EAAW54T,EAAMmyT,aAC1C,CAGI,OAAOwH,EAEf,CACK,CACD,MAAMiB,EAAeP,EAAiBjzS,IAAI4xS,EAAU91T,MACpD,IAAI23T,EAAcF,EAIlB,OAHIC,IACAC,EAAcA,EAAY38L,OAAO,IAAI8zL,GAAUgH,EAAU91T,KAAM03T,KAE5DC,EAAY5G,OAAO+E,EAAWA,EAAUt8O,KACnD,KAEJ,OAAO,IAAIk9O,GAASa,EAAYn8S,KAAKy7S,UACzC,CAIA,iBAAAe,CAAkB9B,EAAWqB,GACzB,MAAMI,GAAa,QAAIn8S,KAAKw7S,UAAWa,IACnC,GAAIA,IAAoBhB,GAEpB,OAAOgB,EAEN,CACD,MAAMC,EAAeP,EAAiBjzS,IAAI4xS,EAAU91T,MACpD,OAAI03T,EACOD,EAAgBz8L,OAAO,IAAI8zL,GAAUgH,EAAU91T,KAAM03T,IAIrDD,CAEf,KAEJ,OAAO,IAAIf,GAASa,EAAYn8S,KAAKy7S,UACzC,EAoBJ,IAAIpG,GAMJ,MAAMoH,GACF,qBAAWpH,GACP,OAAQA,KACHA,GAAa,IAAIoH,GAAa,IAAIrH,GAAUgC,IAAkB,KAAMkE,GAASC,SACtF,CAKA,WAAA15R,CAAY66R,EAAW1E,EAAe2E,GAClC38S,KAAK08S,UAAYA,EACjB18S,KAAKg4S,cAAgBA,EACrBh4S,KAAK28S,UAAYA,EACjB38S,KAAKi4S,UAAY,KAMbj4S,KAAKg4S,eACLT,GAAqBv3S,KAAKg4S,eAE1Bh4S,KAAK08S,UAAUzwR,YACf,SAAQjsB,KAAKg4S,eAAiBh4S,KAAKg4S,cAAc/rR,UAAW,uCAEpE,CAEA,UAAAwrR,GACI,OAAO,CACX,CAEA,WAAAC,GACI,OAAO13S,KAAKg4S,eAAiB3C,EACjC,CAEA,cAAA6C,CAAeC,GACX,OAAIn4S,KAAK08S,UAAUzwR,UAERjsB,KAGA,IAAIy8S,GAAaz8S,KAAK08S,UAAWvE,EAAiBn4S,KAAK28S,UAEtE,CAEA,iBAAAvE,CAAkBC,GAEd,GAAkB,cAAdA,EACA,OAAOr4S,KAAK03S,cAEX,CACD,MAAM35T,EAAQiiB,KAAK08S,UAAU5zS,IAAIuvS,GACjC,OAAiB,OAAVt6T,EAAiBs3T,GAAat3T,CACzC,CACJ,CAEA,QAAAu6T,CAAS5yT,GACL,MAAM0tB,EAAQ64R,GAAavmT,GAC3B,OAAc,OAAV0tB,EACOpT,KAEJA,KAAKo4S,kBAAkBhlS,GAAOklS,SAASnM,GAAazmT,GAC/D,CAEA,QAAA6yT,CAASF,GACL,OAAyC,OAAlCr4S,KAAK08S,UAAU5zS,IAAIuvS,EAC9B,CAEA,oBAAAK,CAAqBL,EAAWM,GAE5B,IADA,QAAOA,EAAc,8CACH,cAAdN,EACA,OAAOr4S,KAAKk4S,eAAeS,GAE1B,CACD,MAAM+B,EAAY,IAAIhH,GAAU2E,EAAWM,GAC3C,IAAI4D,EAAaK,EACbjE,EAAa1sR,WACbswR,EAAcv8S,KAAK08S,UAAU98L,OAAOy4L,GACpCuE,EAAc58S,KAAK28S,UAAUH,kBAAkB9B,EAAW16S,KAAK08S,aAG/DH,EAAcv8S,KAAK08S,UAAU/G,OAAO0C,EAAWM,GAC/CiE,EAAc58S,KAAK28S,UAAUP,aAAa1B,EAAW16S,KAAK08S,YAE9D,MAAMG,EAAcN,EAAYtwR,UAC1BopR,GACAr1S,KAAKg4S,cACX,OAAO,IAAIyE,GAAaF,EAAaM,EAAaD,EACtD,CACJ,CAEA,WAAAhE,CAAYlzT,EAAMizT,GACd,MAAMvlS,EAAQ64R,GAAavmT,GAC3B,GAAc,OAAV0tB,EACA,OAAOulS,EAEN,EACD,QAA8B,cAAvB1M,GAAavmT,IAAiD,IAAxBwmT,GAAcxmT,GAAa,8CACxE,MAAMo3T,EAAoB98S,KAAKo4S,kBAAkBhlS,GAAOwlS,YAAYzM,GAAazmT,GAAOizT,GACxF,OAAO34S,KAAK04S,qBAAqBtlS,EAAO0pS,EAC5C,CACJ,CAEA,OAAA7wR,GACI,OAAOjsB,KAAK08S,UAAUzwR,SAC1B,CAEA,WAAA4sR,GACI,OAAO74S,KAAK08S,UAAUtoT,OAC1B,CAEA,GAAAwH,CAAIm9S,GACA,GAAI/4S,KAAKisB,UACL,OAAO,KAEX,MAAM9vB,EAAM,CAAC,EACb,IAAI4gT,EAAU,EAAGrH,EAAS,EAAGsH,GAAiB,EAW9C,GAVAh9S,KAAK84S,aAAac,IAAgB,CAAC1/T,EAAKu+T,KACpCt8S,EAAIjiB,GAAOu+T,EAAU78S,IAAIm9S,GACzBgE,IACIC,GAAkBP,GAAa9gB,gBAAgBv8R,KAAKllB,GACpDw7T,EAAS/lS,KAAKhT,IAAI+4S,EAAQ9yS,OAAO1oB,IAGjC8iU,GAAiB,CACrB,KAECjE,GAAgBiE,GAAkBtH,EAAS,EAAIqH,EAAS,CAEzD,MAAMv6Q,EAAQ,GAEd,IAAK,MAAMtoD,KAAOiiB,EACdqmC,EAAMtoD,GAAOiiB,EAAIjiB,GAErB,OAAOsoD,CACX,CAKI,OAHIu2Q,IAAiB/4S,KAAK03S,cAAczrR,YACpC9vB,EAAI,aAAe6D,KAAK03S,cAAc97S,OAEnCO,CAEf,CAEA,IAAAwhB,GACI,GAAuB,OAAnB3d,KAAKi4S,UAAoB,CACzB,IAAIe,EAAS,GACRh5S,KAAK03S,cAAczrR,YACpB+sR,GACI,YACI1B,GAAiBt3S,KAAK03S,cAAc97S,OACpC,KAEZoE,KAAK84S,aAAac,IAAgB,CAAC1/T,EAAKu+T,KACpC,MAAMwE,EAAYxE,EAAU96R,OACV,KAAds/R,IACAjE,GAAU,IAAM9+T,EAAM,IAAM+iU,EAChC,IAEJj9S,KAAKi4S,UAAuB,KAAXe,EAAgB,GAAKlf,EAAKkf,EAC/C,CACA,OAAOh5S,KAAKi4S,SAChB,CAEA,uBAAAO,CAAwBH,EAAWI,EAAW/2T,GAC1C,MAAM47C,EAAMt9B,KAAKk9S,cAAcx7T,GAC/B,GAAI47C,EAAK,CACL,MAAM6/Q,EAAc7/Q,EAAIs5Q,kBAAkB,IAAIlD,GAAU2E,EAAWI,IACnE,OAAO0E,EAAcA,EAAYv4T,KAAO,IAC5C,CAEI,OAAOob,KAAK08S,UAAU9F,kBAAkByB,EAEhD,CACA,iBAAA+E,CAAkBvB,GACd,MAAMv+Q,EAAMt9B,KAAKk9S,cAAcrB,GAC/B,GAAIv+Q,EAAK,CACL,MAAMm4Q,EAASn4Q,EAAIm4Q,SACnB,OAAOA,GAAUA,EAAO7wT,IAC5B,CAEI,OAAOob,KAAK08S,UAAUjH,QAE9B,CACA,aAAA4H,CAAcxB,GACV,MAAMpG,EAASz1S,KAAKo9S,kBAAkBvB,GACtC,OAAIpG,EACO,IAAI/B,GAAU+B,EAAQz1S,KAAK08S,UAAU5zS,IAAI2sS,IAGzC,IAEf,CAIA,gBAAA6H,CAAiBzB,GACb,MAAMv+Q,EAAMt9B,KAAKk9S,cAAcrB,GAC/B,GAAIv+Q,EAAK,CACL,MAAMo4Q,EAASp4Q,EAAIo4Q,SACnB,OAAOA,GAAUA,EAAO9wT,IAC5B,CAEI,OAAOob,KAAK08S,UAAUhH,QAE9B,CACA,YAAA6H,CAAa1B,GACT,MAAMnG,EAAS11S,KAAKs9S,iBAAiBzB,GACrC,OAAInG,EACO,IAAIhC,GAAUgC,EAAQ11S,KAAK08S,UAAU5zS,IAAI4sS,IAGzC,IAEf,CACA,YAAAoD,CAAap3T,EAAOw1C,GAChB,MAAMoG,EAAMt9B,KAAKk9S,cAAcx7T,GAC/B,OAAI47C,EACOA,EAAIg4Q,kBAAiBkI,GACjBtmR,EAAOsmR,EAAY54T,KAAM44T,EAAYp/O,QAIzCp+D,KAAK08S,UAAUpH,iBAAiBp+Q,EAE/C,CACA,WAAA4/Q,CAAY+E,GACR,OAAO77S,KAAKg3S,gBAAgB6E,EAAgB1H,UAAW0H,EAC3D,CACA,eAAA7E,CAAgByG,EAAW5B,GACvB,MAAMv+Q,EAAMt9B,KAAKk9S,cAAcrB,GAC/B,GAAIv+Q,EACA,OAAOA,EAAI05Q,gBAAgByG,GAAWvjU,GAAOA,IAE5C,CACD,MAAMm5C,EAAWrzB,KAAK08S,UAAU1F,gBAAgByG,EAAU74T,KAAM8uT,GAAUC,MAC1E,IAAI5lS,EAAOslB,EAAS07L,OACpB,KAAe,MAARhhN,GAAgB8tS,EAAgB3mO,QAAQnnE,EAAM0vS,GAAa,GAC9DpqR,EAAS4hR,UACTlnS,EAAOslB,EAAS07L,OAEpB,OAAO17L,CACX,CACJ,CACA,kBAAA6jR,CAAmB2E,GACf,OAAO77S,KAAKi3S,uBAAuB4E,EAAgBrH,UAAWqH,EAClE,CACA,sBAAA5E,CAAuByG,EAAS7B,GAC5B,MAAMv+Q,EAAMt9B,KAAKk9S,cAAcrB,GAC/B,GAAIv+Q,EACA,OAAOA,EAAI25Q,uBAAuByG,GAASxjU,GAChCA,IAGV,CACD,MAAMm5C,EAAWrzB,KAAK08S,UAAUzF,uBAAuByG,EAAQ94T,KAAM8uT,GAAUC,MAC/E,IAAI5lS,EAAOslB,EAAS07L,OACpB,KAAe,MAARhhN,GAAgB8tS,EAAgB3mO,QAAQnnE,EAAM2vS,GAAW,GAC5DrqR,EAAS4hR,UACTlnS,EAAOslB,EAAS07L,OAEpB,OAAO17L,CACX,CACJ,CACA,SAAA4lR,CAAUnyP,GACN,OAAI9mD,KAAKisB,UACD66B,EAAM76B,UACC,GAGC,EAGP66B,EAAM2wP,cAAgB3wP,EAAM76B,UAC1B,EAEF66B,IAAU62P,IACP,EAID,CAEf,CACA,SAAAlE,CAAUoC,GACN,GAAIA,IAAoBlH,IACpB30S,KAAK28S,UAAUf,SAASC,GACxB,OAAO77S,KAEN,CACD,MAAM48S,EAAc58S,KAAK28S,UAAUb,SAASD,EAAiB77S,KAAK08S,WAClE,OAAO,IAAID,GAAaz8S,KAAK08S,UAAW18S,KAAKg4S,cAAe4E,EAChE,CACJ,CACA,SAAAlD,CAAUh4T,GACN,OAAOA,IAAUizT,IAAa30S,KAAK28S,UAAUf,SAASl6T,EAC1D,CACA,MAAAi4T,CAAO7yP,GACH,GAAIA,IAAU9mD,KACV,OAAO,EAEN,GAAI8mD,EAAM2wP,aACX,OAAO,EAEN,CACD,MAAMmG,EAAoB92P,EAC1B,GAAK9mD,KAAK03S,cAAciC,OAAOiE,EAAkBlG,eAG5C,IAAI13S,KAAK08S,UAAUtoT,UAAYwpT,EAAkBlB,UAAUtoT,QAAS,CACrE,MAAMypT,EAAW79S,KAAK82S,YAAY8C,IAC5BkE,EAAYF,EAAkB9G,YAAY8C,IAChD,IAAImE,EAAcF,EAAS5I,UACvB+I,EAAeF,EAAU7I,UAC7B,KAAO8I,GAAeC,GAAc,CAChC,GAAID,EAAYn5T,OAASo5T,EAAap5T,OACjCm5T,EAAY3/O,KAAKu7O,OAAOqE,EAAa5/O,MACtC,OAAO,EAEX2/O,EAAcF,EAAS5I,UACvB+I,EAAeF,EAAU7I,SAC7B,CACA,OAAuB,OAAhB8I,GAAyC,OAAjBC,CACnC,CAEI,OAAO,CACX,CAnBI,OAAO,CAoBf,CACJ,CAMA,aAAAd,CAAcrB,GACV,OAAIA,IAAoBlH,GACb,KAGA30S,KAAK28S,UAAU7zS,IAAI+yS,EAAgB/hU,WAElD,EAEJ2iU,GAAa9gB,gBAAkB,iBA8B/B,MAAMgiB,GAAW,IA7BjB,cAAsBlB,GAClB,WAAA56R,GACIuE,MAAM,IAAIgvR,GAAUgC,IAAkBqF,GAAapH,WAAYiG,GAASC,QAC5E,CACA,SAAAtC,CAAUnyP,GACN,OAAIA,IAAU9mD,KACH,EAGA,CAEf,CACA,MAAA25S,CAAO7yP,GAEH,OAAOA,IAAU9mD,IACrB,CACA,WAAA03S,GACI,OAAO13S,IACX,CACA,iBAAAo4S,CAAkBC,GACd,OAAOoE,GAAapH,UACxB,CACA,OAAAppR,GACI,OAAO,CACX,GAMJlyC,OAAOu7C,iBAAiBo+Q,GAAW,CAC/BU,IAAK,CACDh6T,MAAO,IAAIs5T,GAAU/Y,EAAU8hB,GAAapH,aAEhD4I,IAAK,CACD7jU,MAAO,IAAIs5T,GAAU9Y,EAAU+iB,OAMvCrJ,GAASD,aAAeoI,GAAapH,WACrCyC,GAASH,0BAA4B8E,GAx9BjCpF,GAy9BSsG,GAlsBb,SAAoB/hT,GAChBi8S,GAAaj8S,CACjB,CAisBAsiT,CAAWP,IAkBX,MAAMQ,IAAY,EAOlB,SAASC,GAAa3xC,EAAM1hN,EAAW,MACnC,GAAa,OAAT0hN,EACA,OAAOgwC,GAAapH,WAaxB,GAXoB,kBAAT5oC,GAAqB,cAAeA,IAC3C1hN,EAAW0hN,EAAK,eAEpB,QAAoB,OAAb1hN,GACiB,kBAAbA,GACa,kBAAbA,GACc,kBAAbA,GAAyB,QAASA,EAAW,uCAAyCA,GAC9E,kBAAT0hN,GAAqB,WAAYA,GAA2B,OAAnBA,EAAK,YACrDA,EAAOA,EAAK,WAGI,kBAATA,GAAqB,QAASA,EAAM,CAE3C,OAAO,IAAIqrC,GADMrrC,EACa2xC,GAAarzP,GAC/C,CACA,GAAM0hN,aAAgB7yR,QAAUukU,GA2B3B,CACD,IAAI//O,EAAOq+O,GAAapH,WAYxB,OAXA3yO,EAAK+pM,GAAM,CAACvyR,EAAKmkU,KACb,IAAI,QAAS5xC,EAAMvyR,IACa,MAAxBA,EAAIsB,UAAU,EAAG,GAAY,CAE7B,MAAMi9T,EAAY2F,GAAaC,IAC3B5F,EAAUhB,cAAiBgB,EAAUxsR,YACrCmyC,EAAOA,EAAKs6O,qBAAqBx+T,EAAKu+T,GAE9C,CACJ,IAEGr6O,EAAK85O,eAAekG,GAAarzP,GAC5C,CAzC2C,CACvC,MAAMzuE,EAAW,GACjB,IAAIgiU,GAAuB,EAa3B,GAXA57O,EADqB+pM,GACF,CAACvyR,EAAK6D,KACrB,GAA4B,MAAxB7D,EAAIsB,UAAU,EAAG,GAAY,CAE7B,MAAMi9T,EAAY2F,GAAargU,GAC1B06T,EAAUxsR,YACXqyR,EACIA,IAAyB7F,EAAUf,cAAczrR,UACrD3vC,EAASjB,KAAK,IAAIq4T,GAAUx5T,EAAKu+T,IAEzC,KAEoB,IAApBn8T,EAAS9C,OACT,OAAOijU,GAAapH,WAExB,MAAMkJ,EAAWlE,GAAc/9T,EAAU66T,IAAsBuD,GAAaA,EAAU91T,MAAMwyT,IAC5F,GAAIkH,EAAsB,CACtB,MAAME,EAAiBnE,GAAc/9T,EAAUs9T,GAAe/F,cAC9D,OAAO,IAAI4I,GAAa8B,EAAUH,GAAarzP,GAAW,IAAIuwP,GAAS,CAAE,YAAakD,GAAkB,CAAE,YAAa5E,KAC3H,CAEI,OAAO,IAAI6C,GAAa8B,EAAUH,GAAarzP,GAAWuwP,GAASC,QAE3E,CAgBJ,EA5xBA,SAAyB3/S,GACrBg8S,GAAiBh8S,CACrB,CA2xBA6iT,CAAgBL,IAkBhB,MAAMM,WAAkB9K,GACpB,WAAA/xR,CAAY88R,GACRv4R,QACApmB,KAAK2+S,WAAaA,GAClB,SAAQhS,GAAYgS,IAA4C,cAA7B1S,GAAa0S,GAA6B,0DACjF,CACA,YAAAC,CAAaC,GACT,OAAOA,EAAKvG,SAASt4S,KAAK2+S,WAC9B,CACA,WAAApK,CAAYn2O,GACR,OAAQA,EAAKk6O,SAASt4S,KAAK2+S,YAAY1yR,SAC3C,CACA,OAAAipD,CAAQv6F,EAAGu3B,GACP,MAAM4sS,EAAS9+S,KAAK4+S,aAAajkU,EAAEyjF,MAC7B2gP,EAAS/+S,KAAK4+S,aAAa1sS,EAAEksD,MAC7B27O,EAAW+E,EAAO7F,UAAU8F,GAClC,OAAiB,IAAbhF,EACOlf,EAAYlgT,EAAEiK,KAAMstB,EAAEttB,MAGtBm1T,CAEf,CACA,QAAAtF,CAASC,EAAY9vT,GACjB,MAAMo6T,EAAYZ,GAAa1J,GACzBt2O,EAAOq+O,GAAapH,WAAWuD,YAAY54S,KAAK2+S,WAAYK,GAClE,OAAO,IAAItL,GAAU9uT,EAAMw5E,EAC/B,CACA,OAAAo2O,GACI,MAAMp2O,EAAOq+O,GAAapH,WAAWuD,YAAY54S,KAAK2+S,WAAYhB,IAClE,OAAO,IAAIjK,GAAU9Y,EAAUx8N,EACnC,CACA,QAAAtkF,GACI,OAAOuyT,GAAUrsS,KAAK2+S,WAAY,GAAG//S,KAAK,IAC9C,EAsDJ,MAAMqgT,GAAc,IAnCpB,cAAyBrL,GACrB,OAAA1+N,CAAQv6F,EAAGu3B,GACP,MAAM6nS,EAAWp/T,EAAEyjF,KAAK66O,UAAU/mS,EAAEksD,MACpC,OAAiB,IAAb27O,EACOlf,EAAYlgT,EAAEiK,KAAMstB,EAAEttB,MAGtBm1T,CAEf,CACA,WAAAxF,CAAYn2O,GACR,OAAO,CACX,CACA,mBAAA01O,CAAoBC,EAASC,GACzB,OAAQD,EAAQ4F,OAAO3F,EAC3B,CACA,OAAAG,GAEI,OAAOT,GAAUU,GACrB,CACA,OAAAI,GAEI,OAAOd,GAAUuK,GACrB,CACA,QAAAxJ,CAASC,EAAY9vT,GACjB,MAAMo6T,EAAYZ,GAAa1J,GAC/B,OAAO,IAAIhB,GAAU9uT,EAAMo6T,EAC/B,CAIA,QAAAllU,GACI,MAAO,QACX,GAoBJ,SAASolU,GAAYC,GACjB,MAAO,CAAEnhU,KAAM,QAAgCmhU,eACnD,CACA,SAASC,GAAiB/G,EAAW8G,GACjC,MAAO,CAAEnhU,KAAM,cAA4CmhU,eAAc9G,YAC7E,CACA,SAASgH,GAAmBhH,EAAW8G,GACnC,MAAO,CAAEnhU,KAAM,gBAAgDmhU,eAAc9G,YACjF,CACA,SAASiH,GAAmBjH,EAAW8G,EAAcI,GACjD,MAAO,CACHvhU,KAAM,gBACNmhU,eACA9G,YACAkH,UAER,CAwBA,MAAMC,GACF,WAAA39R,CAAY49R,GACRz/S,KAAKy/S,OAASA,CAClB,CACA,WAAA7G,CAAYiG,EAAM3kU,EAAKwlU,EAAUC,EAAct1T,EAAQu1T,IACnD,QAAOf,EAAKnF,UAAU15S,KAAKy/S,QAAS,qDACpC,MAAMI,EAAWhB,EAAKzG,kBAAkBl+T,GAExC,OAAI2lU,EAASvH,SAASqH,GAAchG,OAAO+F,EAASpH,SAASqH,KAIrDE,EAAS5zR,YAAcyzR,EAASzzR,UAIzB4yR,GAGa,MAAxBe,IACIF,EAASzzR,UACL4yR,EAAKtG,SAASr+T,GACd0lU,EAAqBE,iBAAiBT,GAAmBnlU,EAAK2lU,KAG9D,QAAOhB,EAAKpH,aAAc,uEAGzBoI,EAAS5zR,UACd2zR,EAAqBE,iBAAiBV,GAAiBllU,EAAKwlU,IAG5DE,EAAqBE,iBAAiBR,GAAmBplU,EAAKwlU,EAAUG,KAG5EhB,EAAKpH,cAAgBiI,EAASzzR,UACvB4yR,EAIAA,EAAKnG,qBAAqBx+T,EAAKwlU,GAAUjG,UAAUz5S,KAAKy/S,QAEvE,CACA,cAAAM,CAAeR,EAASS,EAASJ,GAuB7B,OAtB4B,MAAxBA,IACKL,EAAQ9H,cACT8H,EAAQzG,aAAac,IAAgB,CAAC1/T,EAAKu+T,KAClCuH,EAAQzH,SAASr+T,IAClB0lU,EAAqBE,iBAAiBT,GAAmBnlU,EAAKu+T,GAClE,IAGHuH,EAAQvI,cACTuI,EAAQlH,aAAac,IAAgB,CAAC1/T,EAAKu+T,KACvC,GAAI8G,EAAQhH,SAASr+T,GAAM,CACvB,MAAM2lU,EAAWN,EAAQnH,kBAAkBl+T,GACtC2lU,EAASlG,OAAOlB,IACjBmH,EAAqBE,iBAAiBR,GAAmBplU,EAAKu+T,EAAWoH,GAEjF,MAEID,EAAqBE,iBAAiBV,GAAiBllU,EAAKu+T,GAChE,KAILuH,EAAQvG,UAAUz5S,KAAKy/S,OAClC,CACA,cAAAvH,CAAeqH,EAAS1C,GACpB,OAAI0C,EAAQtzR,UACDwwR,GAAapH,WAGbkK,EAAQrH,eAAe2E,EAEtC,CACA,YAAAoD,GACI,OAAO,CACX,CACA,gBAAAC,GACI,OAAOlgT,IACX,CACA,QAAAi+B,GACI,OAAOj+B,KAAKy/S,MAChB,EAsBJ,MAAMU,GACF,WAAAt+R,CAAYgL,GACR7sB,KAAKogT,eAAiB,IAAIZ,GAAc3yR,EAAOoR,YAC/Cj+B,KAAKy/S,OAAS5yR,EAAOoR,WACrBj+B,KAAKqgT,WAAaF,GAAaG,cAAczzR,GAC7C7sB,KAAKugT,SAAWJ,GAAaK,YAAY3zR,GACzC7sB,KAAKygT,mBAAqB5zR,EAAO6zR,eACjC1gT,KAAK2gT,iBAAmB9zR,EAAO+zR,aACnC,CACA,YAAAC,GACI,OAAO7gT,KAAKqgT,UAChB,CACA,UAAAS,GACI,OAAO9gT,KAAKugT,QAChB,CACA,OAAApoT,CAAQimE,GACJ,MAAM2iP,EAAgB/gT,KAAKygT,kBACrBzgT,KAAKy/S,OAAOvqO,QAAQl1E,KAAK6gT,eAAgBziP,IAAS,EAClDp+D,KAAKy/S,OAAOvqO,QAAQl1E,KAAK6gT,eAAgBziP,GAAQ,EACjD4iP,EAAchhT,KAAK2gT,gBACnB3gT,KAAKy/S,OAAOvqO,QAAQ9W,EAAMp+D,KAAK8gT,eAAiB,EAChD9gT,KAAKy/S,OAAOvqO,QAAQ9W,EAAMp+D,KAAK8gT,cAAgB,EACrD,OAAOC,GAAiBC,CAC5B,CACA,WAAApI,CAAYiG,EAAM3kU,EAAKwlU,EAAUC,EAAct1T,EAAQu1T,GAInD,OAHK5/S,KAAK7H,QAAQ,IAAIu7S,GAAUx5T,EAAKwlU,MACjCA,EAAWjD,GAAapH,YAErBr1S,KAAKogT,eAAexH,YAAYiG,EAAM3kU,EAAKwlU,EAAUC,EAAct1T,EAAQu1T,EACtF,CACA,cAAAG,CAAeR,EAASS,EAASJ,GACzBI,EAAQvI,eAERuI,EAAUvD,GAAapH,YAE3B,IAAI4L,EAAWjB,EAAQvG,UAAUz5S,KAAKy/S,QAEtCwB,EAAWA,EAAS/I,eAAeuE,GAAapH,YAChD,MAAMrmS,EAAOhP,KAMb,OALAggT,EAAQlH,aAAac,IAAgB,CAAC1/T,EAAKu+T,KAClCzpS,EAAK7W,QAAQ,IAAIu7S,GAAUx5T,EAAKu+T,MACjCwI,EAAWA,EAASvI,qBAAqBx+T,EAAKuiU,GAAapH,YAC/D,IAEGr1S,KAAKogT,eAAeL,eAAeR,EAAS0B,EAAUrB,EACjE,CACA,cAAA1H,CAAeqH,EAAS1C,GAEpB,OAAO0C,CACX,CACA,YAAAU,GACI,OAAO,CACX,CACA,gBAAAC,GACI,OAAOlgT,KAAKogT,cAChB,CACA,QAAAniR,GACI,OAAOj+B,KAAKy/S,MAChB,CACA,oBAAOa,CAAczzR,GACjB,GAAIA,EAAOq0R,WAAY,CACnB,MAAMC,EAAYt0R,EAAOu0R,oBACzB,OAAOv0R,EAAOoR,WAAWw2Q,SAAS5nR,EAAOw0R,qBAAsBF,EACnE,CAEI,OAAOt0R,EAAOoR,WAAWk2Q,SAEjC,CACA,kBAAOqM,CAAY3zR,GACf,GAAIA,EAAOy0R,SAAU,CACjB,MAAMC,EAAU10R,EAAO20R,kBACvB,OAAO30R,EAAOoR,WAAWw2Q,SAAS5nR,EAAO40R,mBAAoBF,EACjE,CAEI,OAAO10R,EAAOoR,WAAWu2Q,SAEjC,EAsBJ,MAAMkN,GACF,WAAA7/R,CAAYgL,GACR7sB,KAAK2hT,uBAA0BvjP,GAASp+D,KAAK4hT,SAAW5hT,KAAK6hT,cAAczjP,GAAQp+D,KAAK8hT,gBAAgB1jP,GACxGp+D,KAAK+hT,qBAAwB3jP,GAASp+D,KAAK4hT,SAAW5hT,KAAK8hT,gBAAgB1jP,GAAQp+D,KAAK6hT,cAAczjP,GACtGp+D,KAAK8hT,gBAAmB1jP,IACpB,MAAM4jP,EAAahiT,KAAKy/S,OAAOvqO,QAAQl1E,KAAKiiT,cAAcpB,eAAgBziP,GAC1E,OAAOp+D,KAAKygT,kBAAoBuB,GAAc,EAAIA,EAAa,CAAC,EAEpEhiT,KAAK6hT,cAAiBzjP,IAClB,MAAM4jP,EAAahiT,KAAKy/S,OAAOvqO,QAAQ9W,EAAMp+D,KAAKiiT,cAAcnB,cAChE,OAAO9gT,KAAK2gT,gBAAkBqB,GAAc,EAAIA,EAAa,CAAC,EAElEhiT,KAAKiiT,cAAgB,IAAI9B,GAAatzR,GACtC7sB,KAAKy/S,OAAS5yR,EAAOoR,WACrBj+B,KAAKkiT,OAASr1R,EAAOs1R,WACrBniT,KAAK4hT,UAAY/0R,EAAOu1R,iBACxBpiT,KAAKygT,mBAAqB5zR,EAAO6zR,eACjC1gT,KAAK2gT,iBAAmB9zR,EAAO+zR,aACnC,CACA,WAAAhI,CAAYiG,EAAM3kU,EAAKwlU,EAAUC,EAAct1T,EAAQu1T,GAInD,OAHK5/S,KAAKiiT,cAAc9pT,QAAQ,IAAIu7S,GAAUx5T,EAAKwlU,MAC/CA,EAAWjD,GAAapH,YAExBwJ,EAAKzG,kBAAkBl+T,GAAKy/T,OAAO+F,GAE5Bb,EAEFA,EAAKhG,cAAgB74S,KAAKkiT,OACxBliT,KAAKiiT,cACP/B,mBACAtH,YAAYiG,EAAM3kU,EAAKwlU,EAAUC,EAAct1T,EAAQu1T,GAGrD5/S,KAAKqiT,sBAAsBxD,EAAM3kU,EAAKwlU,EAAUr1T,EAAQu1T,EAEvE,CACA,cAAAG,CAAeR,EAASS,EAASJ,GAC7B,IAAIqB,EACJ,GAAIjB,EAAQvI,cAAgBuI,EAAQ/zR,UAEhCg1R,EAAWxE,GAAapH,WAAWoE,UAAUz5S,KAAKy/S,aAGlD,GAAkB,EAAdz/S,KAAKkiT,OAAalC,EAAQnH,eAC1BmH,EAAQtG,UAAU15S,KAAKy/S,QAAS,CAIhC,IAAIpsR,EAFJ4tR,EAAWxE,GAAapH,WAAWoE,UAAUz5S,KAAKy/S,QAI9CpsR,EADArzB,KAAK4hT,SACM5B,EAAQ/I,uBAAuBj3S,KAAKiiT,cAAcnB,aAAc9gT,KAAKy/S,QAGrEO,EAAQhJ,gBAAgBh3S,KAAKiiT,cAAcpB,eAAgB7gT,KAAKy/S,QAE/E,IAAIrrT,EAAQ,EACZ,KAAOi/B,EAAS6gN,WAAa9/O,EAAQ4L,KAAKkiT,QAAQ,CAC9C,MAAMn0S,EAAOslB,EAAS4hR,UACtB,GAAKj1S,KAAK2hT,uBAAuB5zS,GAAjC,CAIK,IAAK/N,KAAK+hT,qBAAqBh0S,GAEhC,MAGAkzS,EAAWA,EAASvI,qBAAqB3qS,EAAKnpB,KAAMmpB,EAAKqwD,MACzDhqE,GACJ,CACJ,CACJ,KACK,CAKD,IAAIi/B,EAHJ4tR,EAAWjB,EAAQvG,UAAUz5S,KAAKy/S,QAElCwB,EAAWA,EAAS/I,eAAeuE,GAAapH,YAG5ChiR,EADArzB,KAAK4hT,SACMX,EAAS/J,mBAAmBl3S,KAAKy/S,QAGjCwB,EAASnK,YAAY92S,KAAKy/S,QAEzC,IAAIrrT,EAAQ,EACZ,KAAOi/B,EAAS6gN,WAAW,CACvB,MAAMnmO,EAAOslB,EAAS4hR,UACN7gT,EAAQ4L,KAAKkiT,QACzBliT,KAAK2hT,uBAAuB5zS,IAC5B/N,KAAK+hT,qBAAqBh0S,GAE1B3Z,IAGA6sT,EAAWA,EAASvI,qBAAqB3qS,EAAKnpB,KAAM63T,GAAapH,WAEzE,CACJ,CAEJ,OAAOr1S,KAAKiiT,cACP/B,mBACAH,eAAeR,EAAS0B,EAAUrB,EAC3C,CACA,cAAA1H,CAAeqH,EAAS1C,GAEpB,OAAO0C,CACX,CACA,YAAAU,GACI,OAAO,CACX,CACA,gBAAAC,GACI,OAAOlgT,KAAKiiT,cAAc/B,kBAC9B,CACA,QAAAjiR,GACI,OAAOj+B,KAAKy/S,MAChB,CACA,qBAAA4C,CAAsBxD,EAAMyD,EAAUC,EAAWl4T,EAAQm4T,GAErD,IAAI33D,EACJ,GAAI7qP,KAAK4hT,SAAU,CACf,MAAM7H,EAAW/5S,KAAKy/S,OAAO5L,aAC7BhpD,EAAM,CAAClwQ,EAAGu3B,IAAM6nS,EAAS7nS,EAAGv3B,EAChC,MAEIkwQ,EAAM7qP,KAAKy/S,OAAO5L,aAEtB,MAAM4O,EAAgB5D,GACtB,QAAO4D,EAAc5J,gBAAkB74S,KAAKkiT,OAAQ,IACpD,MAAMQ,EAAoB,IAAIhP,GAAU4O,EAAUC,GAC5CI,EAAiB3iT,KAAK4hT,SACtBa,EAAcpF,cAAcr9S,KAAKy/S,QACjCgD,EAAclF,aAAav9S,KAAKy/S,QAChC/7L,EAAU1jH,KAAKiiT,cAAc9pT,QAAQuqT,GAC3C,GAAID,EAAclK,SAAS+J,GAAW,CAClC,MAAMM,EAAeH,EAAcrK,kBAAkBkK,GACrD,IAAIO,EAAYx4T,EAAOy4T,mBAAmB9iT,KAAKy/S,OAAQkD,EAAgB3iT,KAAK4hT,UAC5E,KAAoB,MAAbiB,IACFA,EAAUj+T,OAAS09T,GAAYG,EAAclK,SAASsK,EAAUj+T,QAIjEi+T,EAAYx4T,EAAOy4T,mBAAmB9iT,KAAKy/S,OAAQoD,EAAW7iT,KAAK4hT,UAEvE,MAAMmB,EAA2B,MAAbF,EAAoB,EAAIh4D,EAAIg4D,EAAWH,GAE3D,GADwBh/L,IAAY6+L,EAAUt2R,WAAa82R,GAAe,EAKtE,OAHyB,MAArBP,GACAA,EAAkB1C,iBAAiBR,GAAmBgD,EAAUC,EAAWK,IAExEH,EAAc/J,qBAAqB4J,EAAUC,GAEnD,CACwB,MAArBC,GACAA,EAAkB1C,iBAAiBT,GAAmBiD,EAAUM,IAEpE,MAAMI,EAAgBP,EAAc/J,qBAAqB4J,EAAU7F,GAAapH,YAEhF,OADsC,MAAbwN,GAAqB7iT,KAAKiiT,cAAc9pT,QAAQ0qT,IAE5C,MAArBL,GACAA,EAAkB1C,iBAAiBV,GAAiByD,EAAUj+T,KAAMi+T,EAAUzkP,OAE3E4kP,EAActK,qBAAqBmK,EAAUj+T,KAAMi+T,EAAUzkP,OAG7D4kP,CAEf,CACJ,CACK,OAAIT,EAAUt2R,UAER4yR,EAEFn7L,GACDmnI,EAAI83D,EAAgBD,IAAsB,GACjB,MAArBF,IACAA,EAAkB1C,iBAAiBT,GAAmBsD,EAAe/9T,KAAM+9T,EAAevkP,OAC1FokP,EAAkB1C,iBAAiBV,GAAiBkD,EAAUC,KAE3DE,EACF/J,qBAAqB4J,EAAUC,GAC/B7J,qBAAqBiK,EAAe/9T,KAAM63T,GAAapH,aAOzDwJ,CAEf,EA0BJ,MAAMoE,GACF,WAAAphS,GACI7hB,KAAKkjT,WAAY,EACjBljT,KAAKmjT,WAAY,EACjBnjT,KAAKojT,eAAgB,EACrBpjT,KAAK0gT,gBAAiB,EACtB1gT,KAAKqjT,SAAU,EACfrjT,KAAKsjT,aAAc,EACnBtjT,KAAK4gT,eAAgB,EACrB5gT,KAAKkiT,OAAS,EACdliT,KAAKujT,UAAY,GACjBvjT,KAAKwjT,iBAAmB,KACxBxjT,KAAKyjT,gBAAkB,GACvBzjT,KAAK0jT,eAAiB,KACtB1jT,KAAK2jT,cAAgB,GACrB3jT,KAAKy/S,OAAS7F,EAClB,CACA,QAAAsH,GACI,OAAOlhT,KAAKmjT,SAChB,CAIA,cAAAf,GACI,MAAuB,KAAnBpiT,KAAKujT,UAKEvjT,KAAKmjT,UAGc,MAAnBnjT,KAAKujT,SAEpB,CAIA,kBAAAlC,GAEI,OADA,QAAOrhT,KAAKmjT,UAAW,oCAChBnjT,KAAKwjT,gBAChB,CAKA,iBAAApC,GAEI,OADA,QAAOphT,KAAKmjT,UAAW,oCACnBnjT,KAAKojT,cACEpjT,KAAKyjT,gBAGL9oB,CAEf,CACA,MAAA2mB,GACI,OAAOthT,KAAKqjT,OAChB,CAIA,gBAAA5B,GAEI,OADA,QAAOzhT,KAAKqjT,QAAS,kCACdrjT,KAAK0jT,cAChB,CAKA,eAAAlC,GAEI,OADA,QAAOxhT,KAAKqjT,QAAS,kCACjBrjT,KAAKsjT,YACEtjT,KAAK2jT,cAGL/oB,CAEf,CACA,QAAAgpB,GACI,OAAO5jT,KAAKkjT,SAChB,CAIA,gBAAAW,GACI,OAAO7jT,KAAKkjT,WAAgC,KAAnBljT,KAAKujT,SAClC,CAIA,QAAApB,GAEI,OADA,QAAOniT,KAAKkjT,UAAW,oCAChBljT,KAAKkiT,MAChB,CACA,QAAAjkR,GACI,OAAOj+B,KAAKy/S,MAChB,CACA,YAAAjP,GACI,QAASxwS,KAAKmjT,WAAanjT,KAAKqjT,SAAWrjT,KAAKkjT,UACpD,CACA,SAAA9yT,GACI,OAAO4P,KAAKwwS,gBAAkBxwS,KAAKy/S,SAAW7F,EAClD,CACA,IAAAn5O,GACI,MAAMA,EAAO,IAAIwiP,GAejB,OAdAxiP,EAAKyiP,UAAYljT,KAAKkjT,UACtBziP,EAAKyhP,OAASliT,KAAKkiT,OACnBzhP,EAAK0iP,UAAYnjT,KAAKmjT,UACtB1iP,EAAKigP,eAAiB1gT,KAAK0gT,eAC3BjgP,EAAK+iP,iBAAmBxjT,KAAKwjT,iBAC7B/iP,EAAK2iP,cAAgBpjT,KAAKojT,cAC1B3iP,EAAKgjP,gBAAkBzjT,KAAKyjT,gBAC5BhjP,EAAK4iP,QAAUrjT,KAAKqjT,QACpB5iP,EAAKmgP,cAAgB5gT,KAAK4gT,cAC1BngP,EAAKijP,eAAiB1jT,KAAK0jT,eAC3BjjP,EAAK6iP,YAActjT,KAAKsjT,YACxB7iP,EAAKkjP,cAAgB3jT,KAAK2jT,cAC1BljP,EAAKg/O,OAASz/S,KAAKy/S,OACnBh/O,EAAK8iP,UAAYvjT,KAAKujT,UACf9iP,CACX,EA6FJ,SAASqjP,GAAuCC,GAC5C,MAAMltM,EAAK,CAAC,EACZ,GAAIktM,EAAY3zT,YACZ,OAAOymH,EAEX,IAAI8H,EAeJ,GAdIolM,EAAYtE,SAAW7F,GACvBj7L,EAAU,YAELolM,EAAYtE,SAAWR,GAC5BtgM,EAAU,SAELolM,EAAYtE,SAAW9K,GAC5Bh2L,EAAU,SAGV,QAAOolM,EAAYtE,kBAAkBf,GAAW,4BAChD//L,EAAUolM,EAAYtE,OAAO3lU,YAEjC+8H,EAAgD,SAAI,QAAU8H,GAC1DolM,EAAYZ,UAAW,CACvB,MAAMa,EAAaD,EAAYrD,eACzB,aACA,UACN7pM,EAAGmtM,IAAc,QAAUD,EAAYP,kBACnCO,EAAYX,gBACZvsM,EAAGmtM,IAAe,KAAM,QAAUD,EAAYN,iBAEtD,CACA,GAAIM,EAAYV,QAAS,CACrB,MAAMY,EAAWF,EAAYnD,cACvB,YACA,QACN/pM,EAAGotM,IAAY,QAAUF,EAAYL,gBACjCK,EAAYT,cACZzsM,EAAGotM,IAAa,KAAM,QAAUF,EAAYJ,eAEpD,CASA,OARII,EAAYb,YACRa,EAAY3B,iBACZvrM,EAA2D,aAAIktM,EAAY7B,OAG3ErrM,EAAyD,YAAIktM,EAAY7B,QAG1ErrM,CACX,CACA,SAASqtM,GAA0BH,GAC/B,MAAM5nT,EAAM,CAAC,EAmBb,GAlBI4nT,EAAYZ,YACZhnT,EAAwD,GACpD4nT,EAAYP,iBACZO,EAAYX,gBACZjnT,EAAuD,GACnD4nT,EAAYN,iBAEpBtnT,EAAgE,KAC3D4nT,EAAYrD,gBAEjBqD,EAAYV,UACZlnT,EAAsD,GAAI4nT,EAAYL,eAClEK,EAAYT,cACZnnT,EAAqD,GAAI4nT,EAAYJ,eAEzExnT,EAA8D,KACzD4nT,EAAYnD,eAEjBmD,EAAYb,UAAW,CACvB/mT,EAA2C,EAAI4nT,EAAY7B,OAC3D,IAAIiC,EAAWJ,EAAYR,UACV,KAAbY,IAEIA,EADAJ,EAAY3B,iBACD,IAGA,KAGnBjmT,EAAgD,GAAIgoT,CACxD,CAKA,OAHIJ,EAAYtE,SAAW7F,KACvBz9S,EAA2C,EAAI4nT,EAAYtE,OAAO3lU,YAE/DqiB,CACX,CAuBA,MAAMioT,WAA2Bja,GAC7B,WAAAQ,CAAYC,GACR,MAAM,IAAIlnS,MAAM,0BACpB,CACA,mBAAO2gT,CAAan1L,EAAOr/B,GACvB,YAAYj3F,IAARi3F,EACO,OAASA,IAGhB,QAAOq/B,EAAMqhL,aAAangT,YAAa,kDAChC8+H,EAAM+gL,MAAMn2T,WAE3B,CAKA,WAAA+nC,CAAYilR,EAAWiH,EAAeG,EAAoBC,GACtD/nR,QACApmB,KAAK8mS,UAAYA,EACjB9mS,KAAK+tS,cAAgBA,EACrB/tS,KAAKkuS,mBAAqBA,EAC1BluS,KAAKmuS,uBAAyBA,EAE9BnuS,KAAKggS,KAAO1F,EAAW,WAKvBt6R,KAAKskT,SAAW,CAAC,CACrB,CAEA,MAAA9lR,CAAO0wF,EAAOkhL,EAAevgN,EAAKw6M,GAC9B,MAAMD,EAAal7K,EAAM+gL,MAAMn2T,WAC/BkmB,KAAKggS,KAAK,qBAAuBoK,EAAa,IAAMl7K,EAAMohL,kBAE1D,MAAMiU,EAAWH,GAAmBC,aAAan1L,EAAOr/B,GAClD20N,EAAa,CAAC,EACpBxkT,KAAKskT,SAASC,GAAYC,EAC1B,MAAMC,EAAwBX,GAAuC50L,EAAMqhL,cAC3EvwS,KAAK0kT,aAAata,EAAa,QAASqa,GAAuB,CAAC/gU,EAAO7F,KACnE,IAAI+L,EAAO/L,EAQX,GAPc,MAAV6F,IACAkG,EAAO,KACPlG,EAAQ,MAEE,OAAVA,GACAsc,KAAK+tS,cAAc3D,EAAYxgT,GAAmB,EAAOimG,IAEzD,QAAQ7vF,KAAKskT,SAAUC,KAAcC,EAAY,CACjD,IAAIvhU,EAKAA,EAJCS,EAGc,MAAVA,EACI,oBAGA,cAAgBA,EANhB,KAQb2mT,EAAWpnT,EAAQ,KACvB,IAER,CAEA,QAAAuuT,CAAStiL,EAAOr/B,GACZ,MAAM00N,EAAWH,GAAmBC,aAAan1L,EAAOr/B,UACjD7vF,KAAKskT,SAASC,EACzB,CACA,GAAAz7S,CAAIomH,GACA,MAAMu1L,EAAwBX,GAAuC50L,EAAMqhL,cACrEnG,EAAal7K,EAAM+gL,MAAMn2T,WACzBmsR,EAAW,IAAI,KAiBrB,OAhBAjmQ,KAAK0kT,aAAata,EAAa,QAASqa,GAAuB,CAAC/gU,EAAO7F,KACnE,IAAI+L,EAAO/L,EACG,MAAV6F,IACAkG,EAAO,KACPlG,EAAQ,MAEE,OAAVA,GACAsc,KAAK+tS,cAAc3D,EAAYxgT,GAClB,EACJ,MACTq8Q,EAAS7mP,QAAQx1B,IAGjBq8Q,EAAS5mP,OAAO,IAAI3b,MAAM9Z,GAC9B,IAEGq8Q,EAASnlP,OACpB,CAEA,gBAAAwpR,CAAiBhiR,GAEjB,CAKA,YAAAo8R,CAAata,EAAYqa,EAAwB,CAAC,EAAGt8R,GAEjD,OADAs8R,EAA8B,OAAI,SAC3BtlS,QAAQivG,IAAI,CACfpuH,KAAKkuS,mBAAmB/gJ,UAA2B,GACnDntJ,KAAKmuS,uBAAuBhhJ,UAA2B,KACxD9+I,MAAK,EAAEqxR,EAAWlhB,MACbkhB,GAAaA,EAAUpuB,cACvBmzC,EAA4B,KAAI/kB,EAAUpuB,aAE1CkN,GAAiBA,EAAcl2P,QAC/Bm8R,EAA0B,GAAIjmC,EAAcl2P,OAEhD,MAAMvT,GAAO/U,KAAK8mS,UAAU36K,OAAS,WAAa,WAC9CnsH,KAAK8mS,UAAU3mS,KACfiqS,EAFQ,OAKRpqS,KAAK8mS,UAAUrnO,WACf,QAAYglP,GAChBzkT,KAAKggS,KAAK,4BAA8BjrR,GACxC,MAAM4vS,EAAM,IAAI3uS,eAChB2uS,EAAI1uS,mBAAqB,KACrB,GAAIkS,GAA+B,IAAnBw8R,EAAIzuS,WAAkB,CAClClW,KAAKggS,KAAK,qBAAuBjrR,EAAM,qBAAsB4vS,EAAI1hU,OAAQ,YAAa0hU,EAAIn/K,cAC1F,IAAIr5G,EAAM,KACV,GAAIw4R,EAAI1hU,QAAU,KAAO0hU,EAAI1hU,OAAS,IAAK,CACvC,IACIkpC,GAAM,QAASw4R,EAAIn/K,aACvB,CACA,MAAOlrJ,GACHozB,EAAK,qCACDqH,EACA,KACA4vS,EAAIn/K,aACZ,CACAr9G,EAAS,KAAMgE,EACnB,MAGuB,MAAfw4R,EAAI1hU,QAAiC,MAAf0hU,EAAI1hU,QAC1ByqB,EAAK,sCACDqH,EACA,YACA4vS,EAAI1hU,QAEZklC,EAASw8R,EAAI1hU,QAEjBklC,EAAW,IACf,GAEJw8R,EAAIrvS,KAAK,MAAOP,GAAuB,GACvC4vS,EAAIpvS,MAAM,GAElB,EAsBJ,MAAMqvS,GACF,WAAA/iS,GACI7hB,KAAK6kT,UAAYpI,GAAapH,UAClC,CACA,OAAAyP,CAAQp/T,GACJ,OAAOsa,KAAK6kT,UAAUvM,SAAS5yT,EACnC,CACA,cAAAq/T,CAAer/T,EAAMs/T,GACjBhlT,KAAK6kT,UAAY7kT,KAAK6kT,UAAUjM,YAAYlzT,EAAMs/T,EACtD,EAmBJ,SAASC,KACL,MAAO,CACH7qU,MAAO,KACPkC,SAAU,IAAIq0C,IAEtB,CAQA,SAASu0R,GAA2BC,EAAoBz/T,EAAMkE,GAC1D,GAAI+iT,GAAYjnT,GACZy/T,EAAmB/qU,MAAQwP,EAC3Bu7T,EAAmB7oU,SAASwrB,aAE3B,GAAiC,OAA7Bq9S,EAAmB/qU,MACxB+qU,EAAmB/qU,MAAQ+qU,EAAmB/qU,MAAMw+T,YAAYlzT,EAAMkE,OAErE,CACD,MAAM04T,EAAWrW,GAAavmT,GACzBy/T,EAAmB7oU,SAASk0C,IAAI8xR,IACjC6C,EAAmB7oU,SAASm0C,IAAI6xR,EAAU2C,MAI9CC,GAFcC,EAAmB7oU,SAASwsB,IAAIw5S,GAC9C58T,EAAOymT,GAAazmT,GACoBkE,EAC5C,CACJ,CAmDA,SAASw7T,GAA8BD,EAAoBE,EAAYx7N,GAClC,OAA7Bs7N,EAAmB/qU,MACnByvG,EAAKw7N,EAAYF,EAAmB/qU,OAe5C,SAAwC+qU,EAAoBt7N,GACxDs7N,EAAmB7oU,SAASsG,SAAQ,CAAC0iU,EAAMprU,KACvC2vG,EAAK3vG,EAAKorU,EAAK,GAEvB,CAhBQC,CAA+BJ,GAAoB,CAACjrU,EAAKorU,KAErDF,GAA8BE,EADjB,IAAI5Z,GAAK2Z,EAAWvrU,WAAa,IAAMI,GACV2vG,EAAK,GAG3D,CAkCA,MAAM27N,GACF,WAAA3jS,CAAY4jS,GACRzlT,KAAKylT,YAAcA,EACnBzlT,KAAK0lT,MAAQ,IACjB,CACA,GAAA58S,GACI,MAAM68S,EAAW3lT,KAAKylT,YAAY38S,MAC5Bs1B,EAAQrkD,OAAO+lB,OAAO,CAAC,EAAG6lT,GAOhC,OANI3lT,KAAK0lT,OACLhjP,EAAK1iE,KAAK0lT,OAAO,CAACE,EAAMxrU,KACpBgkD,EAAMwnR,GAAQxnR,EAAMwnR,GAAQxrU,CAAK,IAGzC4lB,KAAK0lT,MAAQC,EACNvnR,CACX,EA0BJ,MAAMynR,GACF,WAAAhkS,CAAYikS,EAAYC,GACpB/lT,KAAK+lT,QAAUA,EACf/lT,KAAKgmT,eAAiB,CAAC,EACvBhmT,KAAKimT,eAAiB,IAAIT,GAAcM,GACxC,MAAMtpR,EATe,IAUjB,IAAgD7sB,KAAKG,SACzDgsR,EAAsB97R,KAAKkmT,aAAaxlT,KAAKV,MAAO2P,KAAKq2B,MAAMxJ,GACnE,CACA,YAAA0pR,GACI,MAAMtb,EAAQ5qS,KAAKimT,eAAen9S,MAC5Bq9S,EAAgB,CAAC,EACvB,IAAIC,GAAoB,EACxB1jP,EAAKkoO,GAAO,CAACgb,EAAMxrU,KACXA,EAAQ,IAAK,QAAS4lB,KAAKgmT,eAAgBJ,KAC3CO,EAAcP,GAAQxrU,EACtBgsU,GAAoB,EACxB,IAEAA,GACApmT,KAAK+lT,QAAQpb,YAAYwb,GAG7BrqB,EAAsB97R,KAAKkmT,aAAaxlT,KAAKV,MAAO2P,KAAKq2B,MAAsB,EAAhBr2B,KAAKG,SAxB9C,KAyB1B,EAuBJ,IAAIu2S,GAuBJ,SAASC,GAAoCjW,GACzC,MAAO,CACHkW,UAAU,EACVC,YAAY,EACZnW,UACAoW,QAAQ,EAEhB,EA7BA,SAAWJ,GACPA,EAAcA,EAAyB,UAAI,GAAK,YAChDA,EAAcA,EAAqB,MAAI,GAAK,QAC5CA,EAAcA,EAA8B,eAAI,GAAK,iBACrDA,EAAcA,EAA+B,gBAAI,GAAK,iBACzD,CALD,CAKGA,KAAkBA,GAAgB,CAAC,IA0CtC,MAAMK,GAIF,WAAA7kS,CACmBn8B,EACAihU,EACAC,GACf5mT,KAAKta,KAAOA,EACZsa,KAAK2mT,aAAeA,EACpB3mT,KAAK4mT,OAASA,EAEd5mT,KAAKhiB,KAAOqoU,GAAcQ,eAE1B7mT,KAAK3V,OAtDF,CACHk8T,UAAU,EACVC,YAAY,EACZnW,QAAS,KACToW,QAAQ,EAmDZ,CACA,iBAAAK,CAAkBzO,GACd,GAAK1L,GAAY3sS,KAAKta,MAIjB,IAA+B,MAA3Bsa,KAAK2mT,aAAavsU,MAGvB,OAFA,QAAO4lB,KAAK2mT,aAAarqU,SAAS2vC,UAAW,4DAEtCjsB,KAEN,CACD,MAAM+6S,EAAY/6S,KAAK2mT,aAAaI,QAAQ,IAAIrb,GAAK2M,IACrD,OAAO,IAAIqO,GAAa1a,KAAgB+O,EAAW/6S,KAAK4mT,OAC5D,EAVI,OADA,QAAO3a,GAAajsS,KAAKta,QAAU2yT,EAAW,iDACvC,IAAIqO,GAAava,GAAansS,KAAKta,MAAOsa,KAAK2mT,aAAc3mT,KAAK4mT,OAWjF,EAmBJ,MAAMI,GACF,WAAAnlS,CAAYx3B,EAAQ3E,GAChBsa,KAAK3V,OAASA,EACd2V,KAAKta,KAAOA,EAEZsa,KAAKhiB,KAAOqoU,GAAcY,eAC9B,CACA,iBAAAH,CAAkBzO,GACd,OAAI1L,GAAY3sS,KAAKta,MACV,IAAIshU,GAAehnT,KAAK3V,OAAQ2hT,MAGhC,IAAIgb,GAAehnT,KAAK3V,OAAQ8hT,GAAansS,KAAKta,MAEjE,EAmBJ,MAAMwhU,GACF,WAAArlS,CAAYx3B,EAAQ3E,EAAMm5T,GACtB7+S,KAAK3V,OAASA,EACd2V,KAAKta,KAAOA,EACZsa,KAAK6+S,KAAOA,EAEZ7+S,KAAKhiB,KAAOqoU,GAAcc,SAC9B,CACA,iBAAAL,CAAkBzO,GACd,OAAI1L,GAAY3sS,KAAKta,MACV,IAAIwhU,GAAUlnT,KAAK3V,OAAQ2hT,KAAgBhsS,KAAK6+S,KAAKzG,kBAAkBC,IAGvE,IAAI6O,GAAUlnT,KAAK3V,OAAQ8hT,GAAansS,KAAKta,MAAOsa,KAAK6+S,KAExE,EAmBJ,MAAMuI,GACF,WAAAvlS,CACmBx3B,EACA3E,EACApJ,GACf0jB,KAAK3V,OAASA,EACd2V,KAAKta,KAAOA,EACZsa,KAAK1jB,SAAWA,EAEhB0jB,KAAKhiB,KAAOqoU,GAAcgB,KAC9B,CACA,iBAAAP,CAAkBzO,GACd,GAAI1L,GAAY3sS,KAAKta,MAAO,CACxB,MAAMq1T,EAAY/6S,KAAK1jB,SAASyqU,QAAQ,IAAIrb,GAAK2M,IACjD,OAAI0C,EAAU9uR,UAEH,KAEF8uR,EAAU3gU,MAER,IAAI8sU,GAAUlnT,KAAK3V,OAAQ2hT,KAAgB+O,EAAU3gU,OAIrD,IAAIgtU,GAAMpnT,KAAK3V,OAAQ2hT,KAAgB+O,EAEtD,CAGI,OADA,QAAO9O,GAAajsS,KAAKta,QAAU2yT,EAAW,kEACvC,IAAI+O,GAAMpnT,KAAK3V,OAAQ8hT,GAAansS,KAAKta,MAAOsa,KAAK1jB,SAEpE,CACA,QAAAxC,GACI,MAAQ,aACJkmB,KAAKta,KACL,KACAsa,KAAK3V,OAAOvQ,WACZ,WACAkmB,KAAK1jB,SAASxC,WACd,GACR,EAyBJ,MAAMwtU,GACF,WAAAzlS,CAAY0lS,EAAOC,EAAmBC,GAClCznT,KAAKunT,MAAQA,EACbvnT,KAAKwnT,kBAAoBA,EACzBxnT,KAAKynT,UAAYA,CACrB,CAIA,kBAAAC,GACI,OAAO1nT,KAAKwnT,iBAChB,CAIA,UAAAG,GACI,OAAO3nT,KAAKynT,SAChB,CACA,iBAAAG,CAAkBliU,GACd,GAAIinT,GAAYjnT,GACZ,OAAOsa,KAAK0nT,uBAAyB1nT,KAAKynT,UAE9C,MAAMnF,EAAWrW,GAAavmT,GAC9B,OAAOsa,KAAK6nT,mBAAmBvF,EACnC,CACA,kBAAAuF,CAAmB3tU,GACf,OAAS8lB,KAAK0nT,uBAAyB1nT,KAAKynT,WAAcznT,KAAKunT,MAAMhP,SAASr+T,EAClF,CACA,OAAA4qU,GACI,OAAO9kT,KAAKunT,KAChB,EAyBJ,MAAMO,GACF,WAAAjmS,CAAYkmS,GACR/nT,KAAK+nT,OAASA,EACd/nT,KAAKy/S,OAASz/S,KAAK+nT,OAAOxX,aAAatyQ,UAC3C,EA8BJ,SAAS+pR,GAAoCC,EAAgBx3S,EAAQy5Q,EAAW13G,EAAS01I,EAAeC,GACpG,MAAMC,EAAkB51I,EAAQxuK,QAAOqkT,GAAUA,EAAOrqU,OAASksS,IACjEk+B,EAAgB7oR,MAAK,CAAC5kD,EAAGu3B,IAmB7B,SAAsC+1S,EAAgBttU,EAAGu3B,GACrD,GAAmB,MAAfv3B,EAAE09T,WAAoC,MAAfnmS,EAAEmmS,UACzB,MAAM,QAAe,sCAEzB,MAAMiQ,EAAW,IAAI5U,GAAU/4T,EAAE09T,UAAW19T,EAAEwkU,cACxCoJ,EAAW,IAAI7U,GAAUxhS,EAAEmmS,UAAWnmS,EAAEitS,cAC9C,OAAO8I,EAAexI,OAAOvqO,QAAQozO,EAAUC,EACnD,CA1BmCC,CAA6BP,EAAgBttU,EAAGu3B,KAC/Ek2S,EAAgBxlU,SAAQylU,IACpB,MAAMI,EAQd,SAA+CR,EAAgBI,EAAQF,GACnE,MAAoB,UAAhBE,EAAOrqU,MAAoC,kBAAhBqqU,EAAOrqU,OAIlCqqU,EAAOK,SAAWP,EAAW3P,wBAAwB6P,EAAOhQ,UAAWgQ,EAAOlJ,aAAc8I,EAAexI,SAHpG4I,CAMf,CAhBmCM,CAAsCV,EAAgBI,EAAQF,GACzFD,EAActlU,SAAQgmU,IACdA,EAAaC,WAAWR,EAAOrqU,OAC/ByyB,EAAOp1B,KAAKutU,EAAa7jP,YAAY0jP,EAAoBR,EAAeF,QAC5E,GACF,GAEV,CAmCA,SAASe,GAAaX,EAAYY,GAC9B,MAAO,CAAEZ,aAAYY,cACzB,CACA,SAASC,GAAyBC,EAAWC,EAAWh6R,EAAU+xR,GAC9D,OAAO6H,GAAa,IAAIxB,GAAU4B,EAAWh6R,EAAU+xR,GAAWgI,EAAUF,YAChF,CACA,SAASI,GAA0BF,EAAWG,EAAYl6R,EAAU+xR,GAChE,OAAO6H,GAAaG,EAAUd,WAAY,IAAIb,GAAU8B,EAAYl6R,EAAU+xR,GAClF,CACA,SAASoI,GAA8BJ,GACnC,OAAOA,EAAUd,WAAWT,qBACtBuB,EAAUd,WAAWrD,UACrB,IACV,CACA,SAASwE,GAA+BL,GACpC,OAAOA,EAAUF,YAAYrB,qBACvBuB,EAAUF,YAAYjE,UACtB,IACV,CAkBA,IAAIyE,GAcJ,MAAMC,GACF,iBAAOC,CAAWttT,GACd,IAAImpT,EAAO,IAAIkE,GAAc,MAI7B,OAHA9mP,EAAKvmE,GAAK,CAACutT,EAAWnH,KAClB+C,EAAOA,EAAK70R,IAAI,IAAIi7Q,GAAKge,GAAYnH,EAAU,IAE5C+C,CACX,CACA,WAAAzjS,CAAYznC,EAAOkC,EAjBD,MACbitU,KACDA,GAAyB,IAAInU,GAAUna,IAEpCsuB,IAauBI,IAC1B3pT,KAAK5lB,MAAQA,EACb4lB,KAAK1jB,SAAWA,CACpB,CAIA,OAAA2vC,GACI,OAAsB,OAAfjsB,KAAK5lB,OAAkB4lB,KAAK1jB,SAAS2vC,SAChD,CAWA,gCAAA29R,CAAiCvpR,EAAc+lB,GAC3C,GAAkB,MAAdpmD,KAAK5lB,OAAiBgsE,EAAUpmD,KAAK5lB,OACrC,MAAO,CAAEsL,KAAMsmT,KAAgB5xT,MAAO4lB,KAAK5lB,OAG3C,GAAIuyT,GAAYtsQ,GACZ,OAAO,KAEN,CACD,MAAMjtB,EAAQ64R,GAAa5rQ,GACrBtiD,EAAQiiB,KAAK1jB,SAASwsB,IAAIsK,GAChC,GAAc,OAAVr1B,EAAgB,CAChB,MAAM8rU,EAA4B9rU,EAAM6rU,iCAAiCzd,GAAa9rQ,GAAe+lB,GACrG,GAAiC,MAA7ByjQ,EAAmC,CAEnC,MAAO,CAAEnkU,KADQ8mT,GAAU,IAAId,GAAKt4R,GAAQy2S,EAA0BnkU,MAC7CtL,MAAOyvU,EAA0BzvU,MAC9D,CAEI,OAAO,IAEf,CAEI,OAAO,IAEf,CAER,CAKA,wBAAA0vU,CAAyBzpR,GACrB,OAAOrgC,KAAK4pT,iCAAiCvpR,GAAc,KAAM,GACrE,CAIA,OAAA0mR,CAAQ1mR,GACJ,GAAIssQ,GAAYtsQ,GACZ,OAAOrgC,KAEN,CACD,MAAMoT,EAAQ64R,GAAa5rQ,GACrB06Q,EAAY/6S,KAAK1jB,SAASwsB,IAAIsK,GACpC,OAAkB,OAAd2nS,EACOA,EAAUgM,QAAQ5a,GAAa9rQ,IAG/B,IAAImpR,GAAc,KAEjC,CACJ,CAQA,GAAA/4R,CAAI4P,EAAc0pR,GACd,GAAIpd,GAAYtsQ,GACZ,OAAO,IAAImpR,GAAcO,EAAO/pT,KAAK1jB,UAEpC,CACD,MAAM82B,EAAQ64R,GAAa5rQ,GAErBq/Q,GADQ1/S,KAAK1jB,SAASwsB,IAAIsK,IAAU,IAAIo2S,GAAc,OACrC/4R,IAAI07Q,GAAa9rQ,GAAe0pR,GACjDxN,EAAcv8S,KAAK1jB,SAASq5T,OAAOviS,EAAOssS,GAChD,OAAO,IAAI8J,GAAcxpT,KAAK5lB,MAAOmiU,EACzC,CACJ,CAOA,MAAA38L,CAAOv/E,GACH,GAAIssQ,GAAYtsQ,GACZ,OAAIrgC,KAAK1jB,SAAS2vC,UACP,IAAIu9R,GAAc,MAGlB,IAAIA,GAAc,KAAMxpT,KAAK1jB,UAGvC,CACD,MAAM82B,EAAQ64R,GAAa5rQ,GACrBtiD,EAAQiiB,KAAK1jB,SAASwsB,IAAIsK,GAChC,GAAIr1B,EAAO,CACP,MAAM2hU,EAAW3hU,EAAM6hI,OAAOusL,GAAa9rQ,IAC3C,IAAIk8Q,EAOJ,OALIA,EADAmD,EAASzzR,UACKjsB,KAAK1jB,SAASsjI,OAAOxsG,GAGrBpT,KAAK1jB,SAASq5T,OAAOviS,EAAOssS,GAE3B,OAAf1/S,KAAK5lB,OAAkBmiU,EAAYtwR,UAC5B,IAAIu9R,GAAc,MAGlB,IAAIA,GAAcxpT,KAAK5lB,MAAOmiU,EAE7C,CAEI,OAAOv8S,IAEf,CACJ,CAOA,GAAA8I,CAAIu3B,GACA,GAAIssQ,GAAYtsQ,GACZ,OAAOrgC,KAAK5lB,MAEX,CACD,MAAMg5B,EAAQ64R,GAAa5rQ,GACrBtiD,EAAQiiB,KAAK1jB,SAASwsB,IAAIsK,GAChC,OAAIr1B,EACOA,EAAM+qB,IAAIqjS,GAAa9rQ,IAGvB,IAEf,CACJ,CAQA,OAAA2pR,CAAQ3pR,EAAc4pR,GAClB,GAAItd,GAAYtsQ,GACZ,OAAO4pR,EAEN,CACD,MAAM72S,EAAQ64R,GAAa5rQ,GAErBq/Q,GADQ1/S,KAAK1jB,SAASwsB,IAAIsK,IAAU,IAAIo2S,GAAc,OACrCQ,QAAQ7d,GAAa9rQ,GAAe4pR,GAC3D,IAAI1N,EAOJ,OALIA,EADAmD,EAASzzR,UACKjsB,KAAK1jB,SAASsjI,OAAOxsG,GAGrBpT,KAAK1jB,SAASq5T,OAAOviS,EAAOssS,GAEvC,IAAI8J,GAAcxpT,KAAK5lB,MAAOmiU,EACzC,CACJ,CAMA,IAAA2N,CAAKxuT,GACD,OAAOsE,KAAKmqT,MAAMne,KAAgBtwS,EACtC,CAIA,KAAAyuT,CAAMC,EAAW1uT,GACb,MAAMC,EAAQ,CAAC,EAIf,OAHAqE,KAAK1jB,SAASg5T,kBAAiB,CAACgN,EAAUvH,KACtCp/S,EAAM2mT,GAAYvH,EAAUoP,MAAM3d,GAAU4d,EAAW9H,GAAW5mT,EAAG,IAElEA,EAAG0uT,EAAWpqT,KAAK5lB,MAAOuhB,EACrC,CAIA,UAAA0uT,CAAW3kU,EAAMqX,GACb,OAAOiD,KAAKsqT,YAAY5kU,EAAMsmT,KAAgBjvS,EAClD,CACA,WAAAutT,CAAYC,EAAcH,EAAWrtT,GACjC,MAAMlf,IAASmiB,KAAK5lB,OAAQ2iB,EAAEqtT,EAAWpqT,KAAK5lB,OAC9C,GAAIyD,EACA,OAAOA,EAGP,GAAI8uT,GAAY4d,GACZ,OAAO,KAEN,CACD,MAAMn3S,EAAQ64R,GAAase,GACrB1H,EAAY7iT,KAAK1jB,SAASwsB,IAAIsK,GACpC,OAAIyvS,EACOA,EAAUyH,YAAYne,GAAaoe,GAAe/d,GAAU4d,EAAWh3S,GAAQrW,GAG/E,IAEf,CAER,CACA,aAAAytT,CAAc9kU,EAAMqX,GAChB,OAAOiD,KAAKyqT,eAAe/kU,EAAMsmT,KAAgBjvS,EACrD,CACA,cAAA0tT,CAAeF,EAAcG,EAAqB3tT,GAC9C,GAAI4vS,GAAY4d,GACZ,OAAOvqT,KAEN,CACGA,KAAK5lB,OACL2iB,EAAE2tT,EAAqB1qT,KAAK5lB,OAEhC,MAAMg5B,EAAQ64R,GAAase,GACrB1H,EAAY7iT,KAAK1jB,SAASwsB,IAAIsK,GACpC,OAAIyvS,EACOA,EAAU4H,eAAete,GAAaoe,GAAe/d,GAAUke,EAAqBt3S,GAAQrW,GAG5F,IAAIysT,GAAc,KAEjC,CACJ,CAOA,OAAAmB,CAAQ5tT,GACJiD,KAAK4qT,SAAS5e,KAAgBjvS,EAClC,CACA,QAAA6tT,CAASF,EAAqB3tT,GAC1BiD,KAAK1jB,SAASg5T,kBAAiB,CAAC+C,EAAW0C,KACvCA,EAAU6P,SAASpe,GAAUke,EAAqBrS,GAAYt7S,EAAE,IAEhEiD,KAAK5lB,OACL2iB,EAAE2tT,EAAqB1qT,KAAK5lB,MAEpC,CACA,YAAAywU,CAAa9tT,GACTiD,KAAK1jB,SAASg5T,kBAAiB,CAAC+C,EAAW0C,KACnCA,EAAU3gU,OACV2iB,EAAEs7S,EAAW0C,EAAU3gU,MAC3B,GAER,EAyBJ,MAAM0wU,GACF,WAAAjpS,CAAYkpS,GACR/qT,KAAK+qT,WAAaA,CACtB,CACA,YAAOC,GACH,OAAO,IAAIF,GAAc,IAAItB,GAAc,MAC/C,EAEJ,SAASyB,GAAsBC,EAAexlU,EAAM04E,GAChD,GAAIuuO,GAAYjnT,GACZ,OAAO,IAAIolU,GAAc,IAAItB,GAAcprP,IAE1C,CACD,MAAM+sP,EAAWD,EAAcH,WAAWjB,yBAAyBpkU,GACnE,GAAgB,MAAZylU,EAAkB,CAClB,MAAMC,EAAeD,EAASzlU,KAC9B,IAAItL,EAAQ+wU,EAAS/wU,MACrB,MAAMimD,EAAeusQ,GAAgBwe,EAAc1lU,GAEnD,OADAtL,EAAQA,EAAMw+T,YAAYv4Q,EAAc+9B,GACjC,IAAI0sP,GAAcI,EAAcH,WAAWt6R,IAAI26R,EAAchxU,GACxE,CACK,CACD,MAAM2sU,EAAU,IAAIyC,GAAcprP,GAC5BitP,EAAeH,EAAcH,WAAWf,QAAQtkU,EAAMqhU,GAC5D,OAAO,IAAI+D,GAAcO,EAC7B,CACJ,CACJ,CACA,SAASC,GAAuBJ,EAAexlU,EAAMijB,GACjD,IAAI4iT,EAAWL,EAIf,OAHAxoP,EAAK/5D,GAAS,CAAC25S,EAAUlkP,KACrBmtP,EAAWN,GAAsBM,EAAU/e,GAAU9mT,EAAM48T,GAAWlkP,EAAK,IAExEmtP,CACX,CASA,SAASC,GAAyBN,EAAexlU,GAC7C,GAAIinT,GAAYjnT,GACZ,OAAOolU,GAAcE,QAEpB,CACD,MAAMK,EAAeH,EAAcH,WAAWf,QAAQtkU,EAAM,IAAI8jU,GAAc,OAC9E,OAAO,IAAIsB,GAAcO,EAC7B,CACJ,CASA,SAASI,GAA8BP,EAAexlU,GAClD,OAA4D,MAArDgmU,GAA6BR,EAAexlU,EACvD,CASA,SAASgmU,GAA6BR,EAAexlU,GACjD,MAAMylU,EAAWD,EAAcH,WAAWjB,yBAAyBpkU,GACnE,OAAgB,MAAZylU,EACOD,EAAcH,WAChBjiT,IAAIqiT,EAASzlU,MACb4yT,SAAS1L,GAAgBue,EAASzlU,KAAMA,IAGtC,IAEf,CAOA,SAASimU,GAAiCT,GACtC,MAAM5uU,EAAW,GACX8hF,EAAO8sP,EAAcH,WAAW3wU,MAgBtC,OAfY,MAARgkF,EAEKA,EAAKq5O,cACNr5O,EAAK06O,aAAac,IAAgB,CAACvB,EAAWI,KAC1Cn8T,EAASjB,KAAK,IAAIq4T,GAAU2E,EAAWI,GAAW,IAK1DyS,EAAcH,WAAWzuU,SAASg5T,kBAAiB,CAAC+C,EAAW0C,KACpC,MAAnBA,EAAU3gU,OACVkC,EAASjB,KAAK,IAAIq4T,GAAU2E,EAAW0C,EAAU3gU,OACrD,IAGDkC,CACX,CACA,SAASsvU,GAAgCV,EAAexlU,GACpD,GAAIinT,GAAYjnT,GACZ,OAAOwlU,EAEN,CACD,MAAMW,EAAgBH,GAA6BR,EAAexlU,GAClE,OACW,IAAIolU,GADM,MAAjBe,EACyB,IAAIrC,GAAcqC,GAGlBX,EAAcH,WAAWhE,QAAQrhU,GAElE,CACJ,CAKA,SAASomU,GAAqBZ,GAC1B,OAAOA,EAAcH,WAAW9+R,SACpC,CAOA,SAAS8/R,GAAmBb,EAAe9sP,GACvC,OAAO4tP,GAAkBhgB,KAAgBkf,EAAcH,WAAY3sP,EACvE,CACA,SAAS4tP,GAAkB3rR,EAAc4rR,EAAW7tP,GAChD,GAAuB,MAAnB6tP,EAAU7xU,MAEV,OAAOgkF,EAAKw6O,YAAYv4Q,EAAc4rR,EAAU7xU,OAE/C,CACD,IAAI8xU,EAAgB,KAgBpB,OAfAD,EAAU3vU,SAASg5T,kBAAiB,CAACgN,EAAUvH,KAC1B,cAAbuH,IAGA,QAA2B,OAApBvH,EAAU3gU,MAAgB,6CACjC8xU,EAAgBnR,EAAU3gU,OAG1BgkF,EAAO4tP,GAAkBxf,GAAUnsQ,EAAciiR,GAAWvH,EAAW38O,EAC3E,IAGCA,EAAKk6O,SAASj4Q,GAAcpU,WAA+B,OAAlBigS,IAC1C9tP,EAAOA,EAAKw6O,YAAYpM,GAAUnsQ,EAAc,aAAc6rR,IAE3D9tP,CACX,CACJ,CAsBA,SAAS+tP,GAAqBF,EAAWvmU,GACrC,OAAO0mU,GAAgB1mU,EAAMumU,EACjC,CAoDA,SAASI,GAAqBJ,EAAWK,GAKrC,MAAMhvR,EAAM2uR,EAAUM,UAAUlmQ,WAAUzrE,GAC/BA,EAAE0xU,UAAYA,KAEzB,QAAOhvR,GAAO,EAAG,gDACjB,MAAMkvR,EAAgBP,EAAUM,UAAUjvR,GAC1C2uR,EAAUM,UAAUrsO,OAAO5iD,EAAK,GAChC,IAAImvR,EAAyBD,EAAc5e,QACvC8e,GAAsC,EACtCnzU,EAAI0yU,EAAUM,UAAU/yU,OAAS,EACrC,KAAOizU,GAA0BlzU,GAAK,GAAG,CACrC,MAAMozU,EAAeV,EAAUM,UAAUhzU,GACrCozU,EAAa/e,UACTr0T,GAAK+jD,GACLsvR,GAA6BD,EAAcH,EAAc9mU,MAEzD+mU,GAAyB,EAEpBxf,GAAauf,EAAc9mU,KAAMinU,EAAajnU,QAEnDgnU,GAAsC,IAG9CnzU,GACJ,CACA,GAAKkzU,EAGA,IAAIC,EAGL,OAiCR,SAA6BT,GACzBA,EAAUY,cAAgBC,GAAoBb,EAAUM,UAAWQ,GAAyB/gB,MACxFigB,EAAUM,UAAU/yU,OAAS,EAC7ByyU,EAAUe,YACNf,EAAUM,UAAUN,EAAUM,UAAU/yU,OAAS,GAAG8yU,QAGxDL,EAAUe,aAAe,CAEjC,CA3CQC,CAAoBhB,IACb,EAIP,GAAIO,EAAc3N,KACdoN,EAAUY,cAAgBrB,GAAyBS,EAAUY,cAAeL,EAAc9mU,UAEzF,CAEDg9E,EADiB8pP,EAAclwU,UACf+7T,IACZ4T,EAAUY,cAAgBrB,GAAyBS,EAAUY,cAAergB,GAAUggB,EAAc9mU,KAAM2yT,GAAW,GAE7H,CACA,OAAO,CACX,CAnBI,OAAO,CAoBf,CACA,SAASuU,GAA6BM,EAAaxnU,GAC/C,GAAIwnU,EAAYrO,KACZ,OAAO5R,GAAaigB,EAAYxnU,KAAMA,GAGtC,IAAK,MAAM2yT,KAAa6U,EAAY5wU,SAChC,GAAI4wU,EAAY5wU,SAASnD,eAAek/T,IACpCpL,GAAaT,GAAU0gB,EAAYxnU,KAAM2yT,GAAY3yT,GACrD,OAAO,EAGf,OAAO,CAEf,CAiBA,SAASqnU,GAAwB9+J,GAC7B,OAAOA,EAAM2/I,OACjB,CAKA,SAASkf,GAAoBK,EAAQnpT,EAAQopT,GACzC,IAAIlC,EAAgBJ,GAAcE,QAClC,IAAK,IAAIzxU,EAAI,EAAGA,EAAI4zU,EAAO3zU,SAAUD,EAAG,CACpC,MAAM00K,EAAQk/J,EAAO5zU,GAIrB,GAAIyqB,EAAOiqJ,GAAQ,CACf,MAAMo/J,EAAYp/J,EAAMvoK,KACxB,IAAI26C,EACJ,GAAI4tH,EAAM4wJ,KACF5R,GAAamgB,EAAUC,IACvBhtR,EAAeusQ,GAAgBwgB,EAAUC,GACzCnC,EAAgBD,GAAsBC,EAAe7qR,EAAc4tH,EAAM4wJ,OAEpE5R,GAAaogB,EAAWD,KAC7B/sR,EAAeusQ,GAAgBygB,EAAWD,GAC1ClC,EAAgBD,GAAsBC,EAAelf,KAAgB/9I,EAAM4wJ,KAAKvG,SAASj4Q,SAI5F,KAAI4tH,EAAM3xK,SAsBX,MAAM,QAAe,8CArBrB,GAAI2wT,GAAamgB,EAAUC,GACvBhtR,EAAeusQ,GAAgBwgB,EAAUC,GACzCnC,EAAgBI,GAAuBJ,EAAe7qR,EAAc4tH,EAAM3xK,eAEzE,GAAI2wT,GAAaogB,EAAWD,GAE7B,GADA/sR,EAAeusQ,GAAgBygB,EAAWD,GACtCzgB,GAAYtsQ,GACZ6qR,EAAgBI,GAAuBJ,EAAelf,KAAgB/9I,EAAM3xK,cAE3E,CACD,MAAMyB,GAAQ,QAAQkwK,EAAM3xK,SAAU2vT,GAAa5rQ,IACnD,GAAItiD,EAAO,CAEP,MAAMuvU,EAAWvvU,EAAMu6T,SAASnM,GAAa9rQ,IAC7C6qR,EAAgBD,GAAsBC,EAAelf,KAAgBshB,EACzE,CACJ,CAMR,CACJ,CACJ,CACA,OAAOpC,CACX,CAQA,SAASqC,GAAgCtB,EAAWntE,EAAU0uE,EAAqBC,EAAmBC,GAClG,GAAKD,GAAsBC,EAqBtB,CACD,MAAMlmT,EAAQokT,GAAgCK,EAAUY,cAAe/tE,GACvE,IAAK4uE,GAAuB5B,GAAqBtkT,GAC7C,OAAOgmT,EAIP,GAAKE,GACsB,MAAvBF,GACC/B,GAA8BjkT,EAAOwkS,MAGrC,CACD,MAAMhoS,EAAS,SAAUiqJ,GACrB,OAASA,EAAM2/I,SAAW8f,MACpBD,KACIA,EAAkBryU,QAAQ6yK,EAAMq+J,YACrCrf,GAAah/I,EAAMvoK,KAAMo5P,IACtBmuD,GAAanuD,EAAU7wF,EAAMvoK,MACzC,EAGA,OAAOqmU,GAFae,GAAoBb,EAAUM,UAAWvoT,EAAQ86O,GAChD0uE,GAAuB/Q,GAAapH,WAE7D,CAbI,OAAO,IAenB,CA9CgD,CAC5C,MAAMwW,EAAgBH,GAA6BO,EAAUY,cAAe/tE,GAC5E,GAAqB,MAAjB+sE,EACA,OAAOA,EAEN,CACD,MAAM8B,EAAW/B,GAAgCK,EAAUY,cAAe/tE,GAC1E,GAAIgtE,GAAqB6B,GACrB,OAAOH,EAEN,GAA2B,MAAvBA,GACJ/B,GAA8BkC,EAAU3hB,MAIxC,CAED,OAAO+f,GAAmB4B,EADLH,GAAuB/Q,GAAapH,WAE7D,CALI,OAAO,IAMf,CACJ,CA2BJ,CAkKA,SAASuY,GAAmCC,EAAcL,EAAqBC,EAAmBC,GAC9F,OAAOH,GAAgCM,EAAa5B,UAAW4B,EAAa/uE,SAAU0uE,EAAqBC,EAAmBC,EAClI,CAMA,SAASI,GAAsCD,EAAcE,GACzD,OAtKJ,SAA4C9B,EAAWntE,EAAUivE,GAC7D,IAAIC,EAAmBvR,GAAapH,WACpC,MAAM4Y,EAAcvC,GAA6BO,EAAUY,cAAe/tE,GAC1E,GAAImvE,EAOA,OANKA,EAAYxW,cAEbwW,EAAYnV,aAAac,IAAgB,CAACvB,EAAWkK,KACjDyL,EAAmBA,EAAiBtV,qBAAqBL,EAAWkK,EAAU,IAG/EyL,EAEN,GAAID,EAAwB,CAG7B,MAAMvmT,EAAQokT,GAAgCK,EAAUY,cAAe/tE,GASvE,OARAivE,EAAuBjV,aAAac,IAAgB,CAACvB,EAAWI,KAC5D,MAAMr6O,EAAO2tP,GAAmBH,GAAgCpkT,EAAO,IAAIkkS,GAAK2M,IAAaI,GAC7FuV,EAAmBA,EAAiBtV,qBAAqBL,EAAWj6O,EAAK,IAG7EutP,GAAiCnkT,GAAO5kB,SAAQ83T,IAC5CsT,EAAmBA,EAAiBtV,qBAAqBgC,EAAU91T,KAAM81T,EAAUt8O,KAAK,IAErF4vP,CACX,CAQI,OAHArC,GADcC,GAAgCK,EAAUY,cAAe/tE,IAC/Bl8P,SAAQ83T,IAC5CsT,EAAmBA,EAAiBtV,qBAAqBgC,EAAU91T,KAAM81T,EAAUt8O,KAAK,IAErF4vP,CAEf,CAmIWE,CAAmCL,EAAa5B,UAAW4B,EAAa/uE,SAAUivE,EAC7F,CAiBA,SAASI,GAA+CN,EAAcnoU,EAAM0oU,EAAmBC,GAC3F,OAvIJ,SAAqDpC,EAAWntE,EAAU4qE,EAAW0E,EAAmBC,IACpG,QAAOD,GAAqBC,EAAoB,6DAChD,MAAM3oU,EAAO8mT,GAAU1tD,EAAU4qE,GACjC,GAAI+B,GAA8BQ,EAAUY,cAAennU,GAGvD,OAAO,KAEN,CAED,MAAM4oU,EAAa1C,GAAgCK,EAAUY,cAAennU,GAC5E,OAAIomU,GAAqBwC,GAEdD,EAAmB/V,SAASoR,GAS5BqC,GAAmBuC,EAAYD,EAAmB/V,SAASoR,GAE1E,CACJ,CA8GW6E,CAA4CV,EAAa5B,UAAW4B,EAAa/uE,SAAUp5P,EAAM0oU,EAAmBC,EAC/H,CAOA,SAASG,GAA2BX,EAAcnoU,GAC9C,OA7FJ,SAAiCumU,EAAWvmU,GACxC,OAAOgmU,GAA6BO,EAAUY,cAAennU,EACjE,CA2FW+oU,CAAwBZ,EAAa5B,UAAWzf,GAAUqhB,EAAa/uE,SAAUp5P,GAC5F,CAKA,SAASgpU,GAA6Bb,EAAcc,EAAoBlR,EAAWrpT,EAAOyxC,EAASnkD,GAC/F,OA7FJ,SAAmCuqU,EAAWntE,EAAU6vE,EAAoBlR,EAAWrpT,EAAOyxC,EAASnkD,GACnG,IAAIktU,EACJ,MAAMpnT,EAAQokT,GAAgCK,EAAUY,cAAe/tE,GACjE+sE,EAAgBH,GAA6BlkT,EAAOwkS,MAC1D,GAAqB,MAAjB6f,EACA+C,EAAY/C,MAEX,IAA0B,MAAtB8C,EAKL,MAAO,GAJPC,EAAY7C,GAAmBvkT,EAAOmnT,EAK1C,CAEA,GADAC,EAAYA,EAAUnV,UAAU/3T,GAC3BktU,EAAU3iS,WAAc2iS,EAAUnX,aAgBnC,MAAO,GAhB0C,CACjD,MAAMz/N,EAAQ,GACR6yK,EAAMnpQ,EAAMmyT,aACZ3iI,EAAOrrI,EACP+oR,EAAU3X,uBAAuBwG,EAAW/7T,GAC5CktU,EAAU5X,gBAAgByG,EAAW/7T,GAC3C,IAAIqsB,EAAOmjK,EAAK+jI,UAChB,KAAOlnS,GAAQiqE,EAAMx+F,OAAS4a,GACG,IAAzBy2P,EAAI98O,EAAM0vS,IACVzlO,EAAM38F,KAAK0yB,GAEfA,EAAOmjK,EAAK+jI,UAEhB,OAAOj9N,CACX,CAIJ,CA4DW62O,CAA0BhB,EAAa5B,UAAW4B,EAAa/uE,SAAU6vE,EAAoBlR,EAAWrpT,EAAOyxC,EAASnkD,EACnI,CAKA,SAASotU,GAA8BjB,EAAcvL,EAAUyM,GAC3D,OAhIJ,SAAoC9C,EAAWntE,EAAUwjE,EAAU+L,GAC/D,MAAM3oU,EAAO8mT,GAAU1tD,EAAUwjE,GAC3BuJ,EAAgBH,GAA6BO,EAAUY,cAAennU,GAC5E,GAAqB,MAAjBmmU,EACA,OAAOA,EAGP,GAAIwC,EAAmBxG,mBAAmBvF,GAEtC,OAAOyJ,GADYH,GAAgCK,EAAUY,cAAennU,GACtC2oU,EAAmBvJ,UAAU1M,kBAAkBkK,IAGrF,OAAO,IAGnB,CAiHW0M,CAA2BnB,EAAa5B,UAAW4B,EAAa/uE,SAAUwjE,EAAUyM,EAC/F,CAIA,SAASE,GAAkBpB,EAAcxV,GACrC,OAAO+T,GAAgB5f,GAAUqhB,EAAa/uE,SAAUu5D,GAAYwV,EAAa5B,UACrF,CACA,SAASG,GAAgB1mU,EAAMumU,GAC3B,MAAO,CACHntE,SAAUp5P,EACVumU,YAER,CAkBA,MAAMiD,GACF,WAAArtS,GACI7hB,KAAKmvT,UAAY,IAAIx+R,GACzB,CACA,gBAAAmvR,CAAiBuI,GACb,MAAMrqU,EAAOqqU,EAAOrqU,KACdskU,EAAW+F,EAAOhQ,WACxB,QAAgB,gBAATr6T,GACM,kBAATA,GACS,kBAATA,EAAyD,8CAC7D,QAAoB,cAAbskU,EAA0B,mDACjC,MAAM8M,EAAYpvT,KAAKmvT,UAAUrmT,IAAIw5S,GACrC,GAAI8M,EAAW,CACX,MAAMC,EAAUD,EAAUpxU,KAC1B,GAAa,gBAATA,GACY,kBAAZqxU,EACArvT,KAAKmvT,UAAU1+R,IAAI6xR,EAAUhD,GAAmBgD,EAAU+F,EAAOlJ,aAAciQ,EAAUjQ,oBAExF,GAAa,kBAATnhU,GACO,gBAAZqxU,EACArvT,KAAKmvT,UAAU/9R,OAAOkxR,QAErB,GAAa,kBAATtkU,GACO,kBAAZqxU,EACArvT,KAAKmvT,UAAU1+R,IAAI6xR,EAAUjD,GAAmBiD,EAAU8M,EAAU7P,eAEnE,GAAa,kBAATvhU,GACO,gBAAZqxU,EACArvT,KAAKmvT,UAAU1+R,IAAI6xR,EAAUlD,GAAiBkD,EAAU+F,EAAOlJ,mBAE9D,IAAa,kBAATnhU,GACO,kBAAZqxU,EAIA,MAAM,QAAe,mCACjBhH,EACA,mBACA+G,GANJpvT,KAAKmvT,UAAU1+R,IAAI6xR,EAAUhD,GAAmBgD,EAAU+F,EAAOlJ,aAAciQ,EAAU7P,SAO7F,CACJ,MAEIv/S,KAAKmvT,UAAU1+R,IAAI6xR,EAAU+F,EAErC,CACA,UAAAiH,GACI,OAAO11U,MAAM0Z,KAAK0M,KAAKmvT,UAAUzpQ,SACrC,EAkCJ,MAAM6pQ,GAA2B,IAXjC,MACI,gBAAAC,CAAiBlN,GACb,OAAO,IACX,CACA,kBAAAQ,CAAmBphU,EAAO3D,EAAO8nD,GAC7B,OAAO,IACX,GAUJ,MAAM4pR,GACF,WAAA5tS,CAAY6tS,EAASC,EAAYC,EAA0B,MACvD5vT,KAAK0vT,QAAUA,EACf1vT,KAAK2vT,WAAaA,EAClB3vT,KAAK4vT,wBAA0BA,CACnC,CACA,gBAAAJ,CAAiBlN,GACb,MAAMlkP,EAAOp+D,KAAK2vT,WAAWxH,WAC7B,GAAI/pP,EAAKypP,mBAAmBvF,GACxB,OAAOlkP,EAAK0mP,UAAU1M,kBAAkBkK,GAEvC,CACD,MAAMuN,EAA6C,MAAhC7vT,KAAK4vT,wBAClB,IAAItI,GAAUtnT,KAAK4vT,yBAAyB,GAAM,GAClD5vT,KAAK2vT,WAAW5G,YACtB,OAAO+F,GAA8B9uT,KAAK0vT,QAASpN,EAAUuN,EACjE,CACJ,CACA,kBAAA/M,CAAmBphU,EAAO3D,EAAO8nD,GAC7B,MAAM8oR,EAAqD,MAAhC3uT,KAAK4vT,wBAC1B5vT,KAAK4vT,wBACLtG,GAA+BtpT,KAAK2vT,YACpC33O,EAAQ02O,GAA6B1uT,KAAK0vT,QAASf,EAAoB5wU,EAAO,EAAG8nD,EAASnkD,GAChG,OAAqB,IAAjBs2F,EAAMx+F,OACC,KAGAw+F,EAAM,EAErB,EA0BJ,SAAS83O,GAA4BC,EAAeC,EAAc5oK,EAAW6oK,EAAaC,GACtF,MAAM/5O,EAAc,IAAI+4O,GACxB,IAAIpG,EAAcqH,EAClB,GAAI/oK,EAAUppK,OAASqoU,GAAcc,UAAW,CAC5C,MAAMhjD,EAAY/8G,EACd+8G,EAAU95Q,OAAOk8T,SACjBuC,EAAesH,GAAgCL,EAAeC,EAAc7rD,EAAUz+Q,KAAMy+Q,EAAU06C,KAAMoR,EAAaC,EAAe/5O,KAGxI,QAAOguL,EAAU95Q,OAAOm8T,WAAY,mBAIpC2J,EACIhsD,EAAU95Q,OAAOo8T,QACZuJ,EAAajH,YAAYpB,eAAiBhb,GAAYxoC,EAAUz+Q,MACzEojU,EAAeuH,GAAkCN,EAAeC,EAAc7rD,EAAUz+Q,KAAMy+Q,EAAU06C,KAAMoR,EAAaC,EAAeC,EAAkBh6O,GAEpK,MACK,GAAIixE,EAAUppK,OAASqoU,GAAcgB,MAAO,CAC7C,MAAM7/S,EAAQ4/I,EACV5/I,EAAMnd,OAAOk8T,SACbuC,EAiNZ,SAAqCiH,EAAe9G,EAAWvjU,EAAM4qU,EAAiBL,EAAalH,EAAa5yO,GAO5G,IAAIo6O,EAAetH,EAanB,OAZAqH,EAAgB3F,SAAQ,CAACtqR,EAAco4Q,KACnC,MAAM4U,EAAY7gB,GAAU9mT,EAAM26C,GAC9BmwR,GAA2BvH,EAAWhd,GAAaohB,MACnDkD,EAAeH,GAAgCL,EAAeQ,EAAclD,EAAW5U,EAAWwX,EAAalH,EAAa5yO,GAChI,IAEJm6O,EAAgB3F,SAAQ,CAACtqR,EAAco4Q,KACnC,MAAM4U,EAAY7gB,GAAU9mT,EAAM26C,GAC7BmwR,GAA2BvH,EAAWhd,GAAaohB,MACpDkD,EAAeH,GAAgCL,EAAeQ,EAAclD,EAAW5U,EAAWwX,EAAalH,EAAa5yO,GAChI,IAEGo6O,CACX,CAtO2BE,CAA4BV,EAAeC,EAAcxoT,EAAM9hB,KAAM8hB,EAAMlrB,SAAU2zU,EAAaC,EAAe/5O,KAGhI,QAAO3uE,EAAMnd,OAAOm8T,WAAY,mBAEhC2J,EACI3oT,EAAMnd,OAAOo8T,QAAUuJ,EAAajH,YAAYpB,aACpDmB,EAAe4H,GAA8BX,EAAeC,EAAcxoT,EAAM9hB,KAAM8hB,EAAMlrB,SAAU2zU,EAAaC,EAAeC,EAAkBh6O,GAE5J,MACK,GAAIixE,EAAUppK,OAASqoU,GAAcQ,eAAgB,CACtD,MAAM8J,EAAevpK,EAKjB0hK,EAJC6H,EAAa/J,OA0T1B,SAAsCmJ,EAAe9G,EAAWvjU,EAAMuqU,EAAazC,EAAqBr3O,GACpG,IAAIjnD,EACJ,GAAqD,MAAjDs/R,GAA2ByB,EAAavqU,GACxC,OAAOujU,EAEN,CACD,MAAM5+T,EAAS,IAAIolU,GAA6BQ,EAAahH,EAAWuE,GAClE/K,EAAgBwG,EAAUd,WAAWrD,UAC3C,IAAI9B,EACJ,GAAIrW,GAAYjnT,IAAgC,cAAvBumT,GAAavmT,GAAuB,CACzD,IAAIsuT,EACJ,GAAIiV,EAAUF,YAAYrB,qBACtB1T,EAAU4Z,GAAmCqC,EAAa3G,GAA+BL,QAExF,CACD,MAAM2H,EAAiB3H,EAAUF,YAAYjE,WAC7C,QAAO8L,aAA0BnU,GAAc,iDAC/CzI,EAAU8Z,GAAsCmC,EAAaW,EACjE,CAEA5N,EAAgB+M,EAAc/rT,OAAO+7S,eAAe0C,EAAezO,EAAS79N,EAChF,KACK,CACD,MAAMmsO,EAAWrW,GAAavmT,GAC9B,IAAIg6T,EAAWoP,GAA8BmB,EAAa3N,EAAU2G,EAAUF,aAC9D,MAAZrJ,GACAuJ,EAAUF,YAAYlB,mBAAmBvF,KACzC5C,EAAW+C,EAAcrK,kBAAkBkK,IAG3CU,EADY,MAAZtD,EACgBqQ,EAAc/rT,OAAO40S,YAAY6J,EAAeH,EAAU5C,EAAUvT,GAAazmT,GAAO2E,EAAQ8rF,GAE3G8yO,EAAUd,WAAWrD,UAAUvM,SAAS+J,GAE7ByN,EAAc/rT,OAAO40S,YAAY6J,EAAeH,EAAU7F,GAAapH,WAAYlJ,GAAazmT,GAAO2E,EAAQ8rF,GAG/GssO,EAEhBO,EAAc/2R,WACdg9R,EAAUF,YAAYrB,uBAEtBx4R,EAAW0+R,GAAmCqC,EAAa3G,GAA+BL,IACtF/5R,EAASuoR,eACTuL,EAAgB+M,EAAc/rT,OAAO+7S,eAAeiD,EAAe9zR,EAAUinD,IAGzF,CAIA,OAHAjnD,EACI+5R,EAAUF,YAAYrB,sBACyC,MAA3D8G,GAA2ByB,EAAajkB,MACzCgd,GAAyBC,EAAWjG,EAAe9zR,EAAU6gS,EAAc/rT,OAAOi8S,eAC7F,CACJ,CA3W2B4Q,CAA6Bd,EAAeC,EAAcW,EAAajrU,KAAMuqU,EAAaC,EAAe/5O,GAyQpI,SAAmC45O,EAAe9G,EAAW6H,EAASnK,EAAcsJ,EAAaC,EAAe/5O,GAC5G,GAAwD,MAApDq4O,GAA2ByB,EAAaa,GACxC,OAAO7H,EAGX,MAAMkH,EAAmBlH,EAAUF,YAAYpB,aAGzCoB,EAAcE,EAAUF,YAC9B,GAA0B,MAAtBpC,EAAavsU,MAAe,CAE5B,GAAKuyT,GAAYmkB,IAAY/H,EAAYrB,sBACrCqB,EAAYnB,kBAAkBkJ,GAC9B,OAAOT,GAAkCN,EAAe9G,EAAW6H,EAAS/H,EAAYjE,UAAUxM,SAASwY,GAAUb,EAAaC,EAAeC,EAAkBh6O,GAElK,GAAIw2N,GAAYmkB,GAAU,CAG3B,IAAIR,EAAkB,IAAI9G,GAAc,MAIxC,OAHAT,EAAYjE,UAAUhM,aAAanE,IAAW,CAAC/vT,EAAMw5E,KACjDkyP,EAAkBA,EAAgB7/R,IAAI,IAAIi7Q,GAAK9mT,GAAOw5E,EAAK,IAExDsyP,GAA8BX,EAAe9G,EAAW6H,EAASR,EAAiBL,EAAaC,EAAeC,EAAkBh6O,EAC3I,CAEI,OAAO8yO,CAEf,CACK,CAED,IAAIqH,EAAkB,IAAI9G,GAAc,MAOxC,OANA7C,EAAagE,SAAQ,CAACoG,EAAW32U,KAC7B,MAAM42U,EAAkBxkB,GAAUskB,EAASC,GACvChI,EAAYnB,kBAAkBoJ,KAC9BV,EAAkBA,EAAgB7/R,IAAIsgS,EAAWhI,EAAYjE,UAAUxM,SAAS0Y,IACpF,IAEGN,GAA8BX,EAAe9G,EAAW6H,EAASR,EAAiBL,EAAaC,EAAeC,EAAkBh6O,EAC3I,CACJ,CAnT2B86O,CAA0BlB,EAAeC,EAAcW,EAAajrU,KAAMirU,EAAahK,aAAcsJ,EAAaC,EAAe/5O,EAKxJ,KACK,IAAIixE,EAAUppK,OAASqoU,GAAcY,gBAItC,MAAM,QAAe,2BAA6B7/J,EAAUppK,MAH5D8qU,EA6SR,SAAqCiH,EAAe9G,EAAWvjU,EAAMuqU,EAAa95O,GAC9E,MAAM+6O,EAAgBjI,EAAUF,YAC1BD,EAAeK,GAA0BF,EAAWiI,EAAcpM,UAAWoM,EAAcxJ,sBAAwB/a,GAAYjnT,GAAOwrU,EAAcvJ,cAC1J,OAAOwJ,GAAgDpB,EAAejH,EAAcpjU,EAAMuqU,EAAaV,GAA0Bp5O,EACrI,CAjTuBi7O,CAA4BrB,EAAeC,EAAc5oK,EAAU1hK,KAAMuqU,EAAa95O,EAIzG,CACA,MAAMq8F,EAAUr8F,EAAYm5O,aAE5B,OAEJ,SAAyCU,EAAclH,EAAc3yO,GACjE,MAAM+yO,EAAYJ,EAAaX,WAC/B,GAAIe,EAAUxB,qBAAsB,CAChC,MAAM2J,EAAgBnI,EAAUpE,UAAUrN,cAAgByR,EAAUpE,UAAU74R,UACxEqlS,EAAkBjI,GAA8B2G,IAClD75O,EAAY38F,OAAS,IACpBw2U,EAAa7H,WAAWT,sBACxB2J,IAAkBnI,EAAUpE,UAAUnL,OAAO2X,KAC7CpI,EAAUpE,UAAUpN,cAAciC,OAAO2X,EAAgB5Z,iBAC1DvhO,EAAY96F,KAAK6jU,GAAYmK,GAA8BP,IAEnE,CACJ,CAfIyI,CAAgCvB,EAAclH,EAAct2I,GACrD,CAAEy2I,UAAWH,EAAct2I,UACtC,CAcA,SAAS2+I,GAAgDpB,EAAe9G,EAAWuI,EAAYvB,EAAa5lU,EAAQ8rF,GAChH,MAAMs7O,EAAexI,EAAUd,WAC/B,GAA2D,MAAvDqG,GAA2ByB,EAAauB,GAExC,OAAOvI,EAEN,CACD,IAAIjG,EAAe6M,EACnB,GAAIljB,GAAY6kB,GAGZ,IADA,QAAOvI,EAAUF,YAAYrB,qBAAsB,8DAC/CuB,EAAUF,YAAYpB,aAAc,CAIpC,MAAMoB,EAAcO,GAA+BL,GAI7CyI,EAAwB5D,GAAsCmC,EAH3ClH,aAAuBtM,GAC1CsM,EACAtM,GAAapH,YAEnB2N,EAAgB+M,EAAc/rT,OAAO+7S,eAAekJ,EAAUd,WAAWrD,UAAW4M,EAAuBv7O,EAC/G,KACK,CACD,MAAMw7O,EAAe/D,GAAmCqC,EAAa3G,GAA+BL,IACpGjG,EAAgB+M,EAAc/rT,OAAO+7S,eAAekJ,EAAUd,WAAWrD,UAAW6M,EAAcx7O,EACtG,KAEC,CACD,MAAMmsO,EAAWrW,GAAaulB,GAC9B,GAAiB,cAAblP,EAA0B,EAC1B,QAAqC,IAA9BpW,GAAcslB,GAAmB,yDACxC,MAAMI,EAAeH,EAAa3M,UAClC+K,EAAa5G,EAAUF,YAAYjE,UAEnC,MAAM+M,EAAkB1D,GAA+C8B,EAAauB,EAAYI,EAAc/B,GAE1G7M,EADmB,MAAnB6O,EACgB9B,EAAc/rT,OAAOk0S,eAAe0Z,EAAcC,GAIlDJ,EAAa3M,SAErC,KACK,CACD,MAAMgN,EAAkB3lB,GAAaqlB,GAErC,IAAIO,EACJ,GAAIN,EAAa5J,mBAAmBvF,GAAW,CAC3CuN,EAAa5G,EAAUF,YAAYjE,UACnC,MAAMkN,EAAmB7D,GAA+C8B,EAAauB,EAAYC,EAAa3M,UAAW+K,GAErHkC,EADoB,MAApBC,EACgBP,EACX3M,UACA1M,kBAAkBkK,GAClB1J,YAAYkZ,EAAiBE,GAIlBP,EAAa3M,UAAU1M,kBAAkBkK,EAEjE,MAEIyP,EAAgBjD,GAA8BmB,EAAa3N,EAAU2G,EAAUF,aAG/E/F,EADiB,MAAjB+O,EACgBhC,EAAc/rT,OAAO40S,YAAY6Y,EAAa3M,UAAWxC,EAAUyP,EAAeD,EAAiBznU,EAAQ8rF,GAI3Gs7O,EAAa3M,SAErC,CACJ,CACA,OAAOkE,GAAyBC,EAAWjG,EAAeyO,EAAa/J,sBAAwB/a,GAAY6kB,GAAazB,EAAc/rT,OAAOi8S,eACjJ,CACJ,CACA,SAASoQ,GAAkCN,EAAeC,EAAcwB,EAAYS,EAAahC,EAAaC,EAAeC,EAAkBh6O,GAC3I,MAAM+7O,EAAgBlC,EAAajH,YACnC,IAAIoJ,EACJ,MAAMC,EAAejC,EACfJ,EAAc/rT,OACd+rT,EAAc/rT,OAAOk8S,mBAC3B,GAAIvT,GAAY6kB,GACZW,EAAiBC,EAAarS,eAAemS,EAAcpN,UAAWmN,EAAa,WAElF,GAAIG,EAAanS,iBAAmBiS,EAAcvK,aAAc,CAEjE,MAAM0K,EAAgBH,EACjBpN,UACAlM,YAAY4Y,EAAYS,GAC7BE,EAAiBC,EAAarS,eAAemS,EAAcpN,UAAWuN,EAAe,KACzF,KACK,CACD,MAAM/P,EAAWrW,GAAaulB,GAC9B,IAAKU,EAActK,kBAAkB4J,IACjCtlB,GAAcslB,GAAc,EAE5B,OAAOxB,EAEX,MAAM8B,EAAkB3lB,GAAaqlB,GAE/B7Y,EADYuZ,EAAcpN,UAAU1M,kBAAkBkK,GAC7B1J,YAAYkZ,EAAiBG,GAExDE,EADa,cAAb7P,EACiB8P,EAAala,eAAega,EAAcpN,UAAWnM,GAGrDyZ,EAAaxZ,YAAYsZ,EAAcpN,UAAWxC,EAAU3J,EAAcmZ,EAAiBvC,GAA0B,KAE9I,CACA,MAAMzG,EAAeK,GAA0B6G,EAAcmC,EAAgBD,EAAcxK,sBAAwB/a,GAAY6kB,GAAaY,EAAanS,gBAEzJ,OAAOkR,GAAgDpB,EAAejH,EAAc0I,EAAYvB,EADjF,IAAIR,GAA6BQ,EAAanH,EAAcoH,GAC0C/5O,EACzH,CACA,SAASi6O,GAAgCL,EAAeC,EAAcwB,EAAYS,EAAahC,EAAaC,EAAe/5O,GACvH,MAAMs7O,EAAezB,EAAa7H,WAClC,IAAIW,EAAc9F,EAClB,MAAM34T,EAAS,IAAIolU,GAA6BQ,EAAaD,EAAcE,GAC3E,GAAIvjB,GAAY6kB,GACZxO,EAAgB+M,EAAc/rT,OAAO+7S,eAAeiQ,EAAa7H,WAAWrD,UAAWmN,EAAa97O,GACpG2yO,EAAeE,GAAyBgH,EAAchN,GAAe,EAAM+M,EAAc/rT,OAAOi8S,oBAE/F,CACD,MAAMqC,EAAWrW,GAAaulB,GAC9B,GAAiB,cAAblP,EACAU,EAAgB+M,EAAc/rT,OAAOk0S,eAAe8X,EAAa7H,WAAWrD,UAAWmN,GACvFnJ,EAAeE,GAAyBgH,EAAchN,EAAeyO,EAAa/J,qBAAsB+J,EAAa9J,kBAEpH,CACD,MAAMmK,EAAkB3lB,GAAaqlB,GAC/B3R,EAAW4R,EAAa3M,UAAU1M,kBAAkBkK,GAC1D,IAAI5C,EACJ,GAAI/S,GAAYmlB,GAEZpS,EAAWuS,MAEV,CACD,MAAMxZ,EAAYpuT,EAAOmlU,iBAAiBlN,GAMlC5C,EALS,MAAbjH,EACqC,cAAjCrM,GAAY0lB,IACZrZ,EAAUH,SAAShM,GAAWwlB,IAAkB7lS,UAGrCwsR,EAGAA,EAAUG,YAAYkZ,EAAiBG,GAK3CxV,GAAapH,UAEhC,CACA,GAAKwK,EAASlG,OAAO+F,GAKjBoJ,EAAekH,MALa,CAE5BlH,EAAeE,GAAyBgH,EADnBD,EAAc/rT,OAAO40S,YAAY6Y,EAAa3M,UAAWxC,EAAU5C,EAAUoS,EAAiBznU,EAAQ8rF,GACvDs7O,EAAa/J,qBAAsBqI,EAAc/rT,OAAOi8S,eAChI,CAIJ,CACJ,CACA,OAAO6I,CACX,CACA,SAAS0H,GAA2BvH,EAAW3G,GAC3C,OAAO2G,EAAUd,WAAWN,mBAAmBvF,EACnD,CAuBA,SAASgQ,GAAwBvC,EAAe3xP,EAAM52D,GAIlD,OAHAA,EAAMmjT,SAAQ,CAACtqR,EAAco4Q,KACzBr6O,EAAOA,EAAKw6O,YAAYv4Q,EAAco4Q,EAAU,IAE7Cr6O,CACX,CACA,SAASsyP,GAA8BX,EAAe9G,EAAWvjU,EAAM4qU,EAAiBL,EAAalH,EAAaoH,EAAkBh6O,GAGhI,GAAI8yO,EAAUF,YAAYjE,UAAU74R,YAC/Bg9R,EAAUF,YAAYrB,qBACvB,OAAOuB,EAQX,IACIsJ,EADAhC,EAAetH,EAGfsJ,EADA5lB,GAAYjnT,GACI4qU,EAGA,IAAI9G,GAAc,MAAMQ,QAAQtkU,EAAM4qU,GAE1D,MAAMT,EAAa5G,EAAUF,YAAYjE,UAqBzC,OApBAyN,EAAcj2U,SAASg5T,kBAAiB,CAACgN,EAAUvH,KAC/C,GAAI8U,EAAWtX,SAAS+J,GAAW,CAC/B,MAGM5C,EAAW4S,GAAwBvC,EAHrB9G,EAAUF,YACzBjE,UACA1M,kBAAkBkK,GAC8CvH,GACrEwV,EAAeF,GAAkCN,EAAeQ,EAAc,IAAI7kB,GAAK4W,GAAW5C,EAAUuQ,EAAalH,EAAaoH,EAAkBh6O,EAC5J,KAEJo8O,EAAcj2U,SAASg5T,kBAAiB,CAACgN,EAAUkQ,KAC/C,MAAMC,GAAsBxJ,EAAUF,YAAYlB,mBAAmBvF,IACxC,OAAzBkQ,EAAep4U,MACnB,IAAKy1U,EAAWtX,SAAS+J,KAAcmQ,EAAoB,CACvD,MAGM/S,EAAW4S,GAAwBvC,EAHrB9G,EAAUF,YACzBjE,UACA1M,kBAAkBkK,GAC8CkQ,GACrEjC,EAAeF,GAAkCN,EAAeQ,EAAc,IAAI7kB,GAAK4W,GAAW5C,EAAUuQ,EAAalH,EAAaoH,EAAkBh6O,EAC5J,KAEGo6O,CACX,CA8HA,MAAMmC,GACF,WAAA7wS,CAAYkmS,EAAQ4K,GAChB3yT,KAAK+nT,OAASA,EACd/nT,KAAK4yT,oBAAsB,GAC3B,MAAM/lS,EAAS7sB,KAAK+nT,OAAOxX,aACrBsiB,EAAc,IAAIrT,GAAc3yR,EAAOoR,YACvCj6B,GAhhFoB+/S,EAghFcl3R,GA/gF5B2jR,eACL,IAAIgP,GAAcuE,EAAY9lR,YAEhC8lR,EAAYH,WACV,IAAIlC,GAAcqC,GAGlB,IAAI5D,GAAa4D,GARhC,IAAkCA,EAihF1B/jT,KAAK8yT,WA1bb,SAA0B9uT,GACtB,MAAO,CAAEA,SACb,CAwb0B+uT,CAAiB/uT,GACnC,MAAMgvT,EAAqBL,EAAiB5J,YACtCkK,EAAoBN,EAAiBxK,WAErCiB,EAAayJ,EAAY9S,eAAetD,GAAapH,WAAY2d,EAAmBlO,UAAW,MAC/FoE,EAAYllT,EAAO+7S,eAAetD,GAAapH,WAAY4d,EAAkBnO,UAAW,MACxFqN,EAAiB,IAAI7K,GAAU8B,EAAY4J,EAAmBtL,qBAAsBmL,EAAY5S,gBAChG+C,EAAgB,IAAIsE,GAAU4B,EAAW+J,EAAkBvL,qBAAsB1jT,EAAOi8S,gBAC9FjgT,KAAK2vT,WAAa7G,GAAa9F,EAAemP,GAC9CnyT,KAAKkzT,gBAAkB,IAAIpL,GAAe9nT,KAAK+nT,OACnD,CACA,SAAI74L,GACA,OAAOlvH,KAAK+nT,MAChB,EAQJ,SAASoL,GAA2Bv4H,EAAMl1M,GACtC,MAAM0sH,EAAQk3M,GAA+B1uH,EAAK+0H,YAClD,OAAIv9M,IAGIwoF,EAAK1rE,MAAMqhL,aAAaC,iBACtB7D,GAAYjnT,KACT0sH,EAAMgmM,kBAAkBnM,GAAavmT,IAAOumC,WAC1CmmF,EAAMkmM,SAAS5yT,GAGvB,IACX,CACA,SAAS0tU,GAAYx4H,GACjB,OAA2C,IAApCA,EAAKg4H,oBAAoBp5U,MACpC,CASA,SAAS65U,GAA4Bz4H,EAAM04H,EAAmBC,GAC1D,MAAMC,EAAe,GACrB,GAAID,EAAa,EACb,QAA4B,MAArBD,EAA2B,mDAClC,MAAM5tU,EAAOk1M,EAAK1rE,MAAM+gL,MACxBr1G,EAAKg4H,oBAAoBhwU,SAAQgmU,IAC7B,MAAM6K,EAAa7K,EAAa8K,kBAAkBH,EAAa7tU,GAC3D+tU,GACAD,EAAan4U,KAAKo4U,EACtB,GAER,CACA,GAAIH,EAAmB,CACnB,IAAI73P,EAAY,GAChB,IAAK,IAAIliF,EAAI,EAAGA,EAAIqhN,EAAKg4H,oBAAoBp5U,SAAUD,EAAG,CACtD,MAAMo6U,EAAW/4H,EAAKg4H,oBAAoBr5U,GAC1C,GAAKo6U,EAASx7T,QAAQm7T,IAGjB,GAAIA,EAAkBM,iBAAkB,CAEzCn4P,EAAYA,EAAU1/D,OAAO6+L,EAAKg4H,oBAAoBrvU,MAAMhK,EAAI,IAChE,KACJ,OANIkiF,EAAUpgF,KAAKs4U,EAOvB,CACA/4H,EAAKg4H,oBAAsBn3P,CAC/B,MAEIm/H,EAAKg4H,oBAAsB,GAE/B,OAAOY,CACX,CAIA,SAASK,GAAmBj5H,EAAMxzC,EAAW6oK,EAAazC,GAClDpmK,EAAUppK,OAASqoU,GAAcgB,OACJ,OAA7BjgK,EAAU/8J,OAAOgmT,WACjB,QAAOiZ,GAA+B1uH,EAAK+0H,YAAa,8DACxD,QAAOtG,GAA8BzuH,EAAK+0H,YAAa,4DAE3D,MAAMK,EAAep1H,EAAK+0H,WACpB9xU,EAASiyU,GAA4Bl1H,EAAKk4H,WAAY9C,EAAc5oK,EAAW6oK,EAAazC,GA9gBtG,IAAoCuC,EAAe9G,EAmhB/C,OAnhBgC8G,EA+gBLn1H,EAAKk4H,WA/gBe7J,EA+gBHprU,EAAOorU,WA9gBnD,QAAOA,EAAUd,WAAWrD,UAAUpL,UAAUqW,EAAc/rT,OAAOi6B,YAAa,2BAClF,QAAOgrR,EAAUF,YAAYjE,UAAUpL,UAAUqW,EAAc/rT,OAAOi6B,YAAa,4BA8gBnF,QAAOpgD,EAAOorU,UAAUF,YAAYrB,uBAC/BsI,EAAajH,YAAYrB,qBAAsB,2DACpD9sH,EAAK+0H,WAAa9xU,EAAOorU,UAClB6K,GAA8Bl5H,EAAM/8M,EAAO20L,QAAS30L,EAAOorU,UAAUd,WAAWrD,UAAW,KACtG,CAeA,SAASgP,GAA8Bl5H,EAAMpoB,EAAS21I,EAAYmL,GAC9D,MAAMpL,EAAgBoL,EAChB,CAACA,GACD14H,EAAKg4H,oBACX,OA/uDJ,SAAgD3K,EAAgBz1I,EAAS21I,EAAY4L,GACjF,MAAMtjT,EAAS,GACTujT,EAAQ,GAYd,OAXAxhJ,EAAQ5vL,SAAQylU,IAz8CpB,IAA0BhQ,EA08CE,kBAAhBgQ,EAAOrqU,MACPiqU,EAAexI,OAAO3L,oBAAoBuU,EAAO9I,QAAS8I,EAAOlJ,eACjE6U,EAAM34U,MA58CQg9T,EA48CcgQ,EAAOhQ,UA38CpC,CAAEr6T,KAAM,cAA4CmhU,aA28CLkJ,EAAOlJ,aA38CY9G,cA48CrE,IAEJ2P,GAAoCC,EAAgBx3S,EAAQ,gBAAgD+hK,EAASuhJ,EAAoB5L,GACzIH,GAAoCC,EAAgBx3S,EAAQ,cAA4C+hK,EAASuhJ,EAAoB5L,GACrIH,GAAoCC,EAAgBx3S,EAAQ,cAA4CujT,EAAOD,EAAoB5L,GACnIH,GAAoCC,EAAgBx3S,EAAQ,gBAAgD+hK,EAASuhJ,EAAoB5L,GACzIH,GAAoCC,EAAgBx3S,EAAQ,QAAgC+hK,EAASuhJ,EAAoB5L,GAClH13S,CACX,CAguDWwjT,CAAuCr5H,EAAKs4H,gBAAiB1gJ,EAAS21I,EAAYD,EAC7F,CAkBA,IAAIgM,GAgNAC,GArMJ,MAAMC,GACF,WAAAvyS,GAOI7hB,KAAKq0T,MAAQ,IAAI1jS,GACrB,EAaJ,SAAS2jS,GAAwBC,EAAWntK,EAAW6oK,EAAauE,GAChE,MAAMnkB,EAAUjpJ,EAAU/8J,OAAOgmT,QACjC,GAAgB,OAAZA,EAAkB,CAClB,MAAMz1G,EAAO25H,EAAUF,MAAMvrT,IAAIunS,GAEjC,OADA,QAAe,MAARz1G,EAAc,gDACdi5H,GAAmBj5H,EAAMxzC,EAAW6oK,EAAauE,EAC5D,CACK,CACD,IAAI/jT,EAAS,GACb,IAAK,MAAMmqL,KAAQ25H,EAAUF,MAAM3uQ,SAC/Bj1C,EAASA,EAAO1U,OAAO83T,GAAmBj5H,EAAMxzC,EAAW6oK,EAAauE,IAE5E,OAAO/jT,CACX,CACJ,CAUA,SAASgkT,GAAiBF,EAAWrlM,EAAO+gM,EAAalH,EAAa2L,GAClE,MAAMrkB,EAAUnhL,EAAMohL,iBAChB11G,EAAO25H,EAAUF,MAAMvrT,IAAIunS,GACjC,IAAKz1G,EAAM,CAEP,IAAIutH,EAAayF,GAAmCqC,EAAayE,EAAsB3L,EAAc,MACjG4L,GAAqB,EACrBxM,EACAwM,GAAqB,EAEhB5L,aAAuBtM,IAC5B0L,EAAa2F,GAAsCmC,EAAalH,GAChE4L,GAAqB,IAGrBxM,EAAa1L,GAAapH,WAC1Bsf,GAAqB,GAEzB,MAAM1L,EAAYH,GAAa,IAAIxB,GAAUa,EAAYwM,GAAoB,GAAQ,IAAIrN,GAAUyB,EAAa2L,GAAqB,IACrI,OAAO,IAAIhC,GAAKxjM,EAAO+5L,EAC3B,CACA,OAAOruH,CACX,CAWA,SAASg6H,GAA8BL,EAAWrlM,EAAOokM,EAAmBrD,EAAalH,EAAa2L,GAClG,MAAM95H,EAAO65H,GAAiBF,EAAWrlM,EAAO+gM,EAAalH,EAAa2L,GAM1E,OALKH,EAAUF,MAAM7jS,IAAI0+F,EAAMohL,mBAC3BikB,EAAUF,MAAM5jS,IAAIy+F,EAAMohL,iBAAkB11G,GA3LpD,SAAkCA,EAAM04H,GACpC14H,EAAKg4H,oBAAoBv3U,KAAKi4U,EAClC,CA4LIuB,CAAyBj6H,EAAM04H,GArInC,SAA8B14H,EAAMguH,GAChC,MAAMM,EAAYtuH,EAAK+0H,WAAWxH,WAC5B2M,EAAiB,GAClB5L,EAAUpE,UAAUrN,cACHyR,EAAUpE,UAClBhM,aAAac,IAAgB,CAAC1/T,EAAKu+T,KACzCqc,EAAez5U,KAAK+jU,GAAiBllU,EAAKu+T,GAAW,IAM7D,OAHIyQ,EAAUxB,sBACVoN,EAAez5U,KAAK6jU,GAAYgK,EAAUpE,YAEvCgP,GAA8Bl5H,EAAMk6H,EAAgB5L,EAAUpE,UAAW8D,EACpF,CAyHWmM,CAAqBn6H,EAAM04H,EACtC,CAWA,SAAS0B,GAAiCT,EAAWrlM,EAAOokM,EAAmBC,GAC3E,MAAMljB,EAAUnhL,EAAMohL,iBAChB7oE,EAAU,GAChB,IAAI+rF,EAAe,GACnB,MAAMyB,EAAkBC,GAAyBX,GACjD,GAAgB,YAAZlkB,EAEA,IAAK,MAAO8kB,EAAav6H,KAAS25H,EAAUF,MAAMvnS,UAC9C0mS,EAAeA,EAAaz3T,OAAOs3T,GAA4Bz4H,EAAM04H,EAAmBC,IACpFH,GAAYx4H,KACZ25H,EAAUF,MAAMjjS,OAAO+jS,GAElBv6H,EAAK1rE,MAAMqhL,aAAaC,gBACzB/oE,EAAQpsP,KAAKu/M,EAAK1rE,YAK7B,CAED,MAAM0rE,EAAO25H,EAAUF,MAAMvrT,IAAIunS,GAC7Bz1G,IACA44H,EAAeA,EAAaz3T,OAAOs3T,GAA4Bz4H,EAAM04H,EAAmBC,IACpFH,GAAYx4H,KACZ25H,EAAUF,MAAMjjS,OAAOi/Q,GAElBz1G,EAAK1rE,MAAMqhL,aAAaC,gBACzB/oE,EAAQpsP,KAAKu/M,EAAK1rE,QAIlC,CAKA,OAJI+lM,IAAoBC,GAAyBX,IAE7C9sF,EAAQpsP,KAAK,KApHjB,QAAO64U,GAAwB,oCACxBA,IAmHmDhlM,EAAMkmM,MAAOlmM,EAAM+gL,QAEtE,CAAExoE,UAASh3N,OAAQ+iT,EAC9B,CACA,SAAS6B,GAAuBd,GAC5B,MAAM12U,EAAS,GACf,IAAK,MAAM+8M,KAAQ25H,EAAUF,MAAM3uQ,SAC1Bk1I,EAAK1rE,MAAMqhL,aAAaC,gBACzB3yT,EAAOxC,KAAKu/M,GAGpB,OAAO/8M,CACX,CAKA,SAASy3U,GAAgCf,EAAW7uU,GAChD,IAAIqjU,EAAc,KAClB,IAAK,MAAMnuH,KAAQ25H,EAAUF,MAAM3uQ,SAC/BqjQ,EAAcA,GAAeoK,GAA2Bv4H,EAAMl1M,GAElE,OAAOqjU,CACX,CACA,SAASwM,GAAsBhB,EAAWrlM,GAEtC,GADeA,EAAMqhL,aACVC,eACP,OAAOglB,GAAyBjB,GAE/B,CACD,MAAMlkB,EAAUnhL,EAAMohL,iBACtB,OAAOikB,EAAUF,MAAMvrT,IAAIunS,EAC/B,CACJ,CACA,SAASolB,GAA4BlB,EAAWrlM,GAC5C,OAAkD,MAA3CqmM,GAAsBhB,EAAWrlM,EAC5C,CACA,SAASgmM,GAAyBX,GAC9B,OAA8C,MAAvCiB,GAAyBjB,EACpC,CACA,SAASiB,GAAyBjB,GAC9B,IAAK,MAAM35H,KAAQ25H,EAAUF,MAAM3uQ,SAC/B,GAAIk1I,EAAK1rE,MAAMqhL,aAAaC,eACxB,OAAO51G,EAGf,OAAO,IACX,CA8BA,IAAI86H,GAAwB,EAsB5B,MAAMC,GAKF,WAAA9zS,CAAY+zS,GACR51T,KAAK41T,gBAAkBA,EAIvB51T,KAAK61T,eAAiB,IAAIrM,GAAc,MAIxCxpT,KAAK81T,kBAniCF,CACHjJ,cAAe/B,GAAcE,QAC7BuB,UAAW,GACXS,aAAc,GAiiCdhtT,KAAK+1T,cAAgB,IAAIplS,IACzB3wB,KAAKg2T,cAAgB,IAAIrlS,GAC7B,EAOJ,SAASslS,GAA2BC,EAAUxwU,EAAMklL,EAAS0hJ,EAAS1e,GAGlE,OAl7CJ,SAA+Bqe,EAAWvmU,EAAMm5T,EAAMyN,EAAS1e,IAC3D,QAAO0e,EAAUL,EAAUe,YAAa,qDACxBp0T,IAAZg1S,IACAA,GAAU,GAEdqe,EAAUM,UAAUlxU,KAAK,CACrBqK,OACAm5T,OACAyN,UACA1e,YAEAA,IACAqe,EAAUY,cAAgB5B,GAAsBgB,EAAUY,cAAennU,EAAMm5T,IAEnFoN,EAAUe,YAAcV,CAC5B,CAk6CI6J,CAAsBD,EAASJ,kBAAmBpwU,EAAMklL,EAAS0hJ,EAAS1e,GACrEA,EAIMwoB,GAAoCF,EAAU,IAAIhP,GAtzEtD,CACHX,UAAU,EACVC,YAAY,EACZnW,QAAS,KACToW,QAAQ,GAkzEqF/gU,EAAMklL,IAH5F,EAKf,CAkBA,SAASyrJ,GAAqBH,EAAU5J,EAAS1F,GAAS,GACtD,MAAM34J,EA76CV,SAA2Bg+J,EAAWK,GAClC,IAAK,IAAI/yU,EAAI,EAAGA,EAAI0yU,EAAUM,UAAU/yU,OAAQD,IAAK,CACjD,MAAM4oG,EAAS8pO,EAAUM,UAAUhzU,GACnC,GAAI4oG,EAAOmqO,UAAYA,EACnB,OAAOnqO,CAEf,CACA,OAAO,IACX,CAq6CkBm0O,CAAkBJ,EAASJ,kBAAmBxJ,GAE5D,GADyBD,GAAqB6J,EAASJ,kBAAmBxJ,GAIrE,CACD,IAAI3F,EAAe,IAAI6C,GAAc,MAUrC,OATkB,MAAdv7J,EAAM4wJ,KAEN8H,EAAeA,EAAal2R,IAAIu7Q,MAAgB,GAGhDtpO,EAAKurF,EAAM3xK,UAAW8tT,IAClBuc,EAAeA,EAAal2R,IAAI,IAAIi7Q,GAAKtB,IAAa,EAAK,IAG5DgsB,GAAoCF,EAAU,IAAIxP,GAAaz4J,EAAMvoK,KAAMihU,EAAcC,GACpG,CAdI,MAAO,EAef,CAMA,SAAS2P,GAA6BL,EAAUxwU,EAAMklL,GAClD,OAAOwrJ,GAAoCF,EAAU,IAAIhP,GA51ElD,CACHX,UAAU,EACVC,YAAY,EACZnW,QAAS,KACToW,QAAQ,GAw1EmF/gU,EAAMklL,GACzG,CAiDA,SAAS4rJ,GAAgCN,EAAUhnM,EAAOokM,EAAmBC,EAAakD,GAAoB,GAE1G,MAAM/wU,EAAOwpI,EAAM+gL,MACbymB,EAAiBR,EAASL,eAAe/sT,IAAIpjB,GACnD,IAAI8tU,EAAe,GAInB,GAAIkD,IAC4B,YAA3BxnM,EAAMohL,kBACHmlB,GAA4BiB,EAAgBxnM,IAAS,CACzD,MAAMynM,EAAmB3B,GAAiC0B,EAAgBxnM,EAAOokM,EAAmBC,GA7VxE,IA8VPmD,EA9VRrC,MAAMlyU,OA+Vf+zU,EAASL,eAAiBK,EAASL,eAAej2M,OAAOl6H,IAE7D,MAAM+hP,EAAUkvF,EAAiBlvF,QAEjC,GADA+rF,EAAemD,EAAiBlmT,QAC3BgmT,EAAmB,CAQpB,MAAMG,GAAmB,IACrBnvF,EAAQphL,WAAU6oE,GACPA,EAAMqhL,aAAaC,iBAE5BqmB,EAAUX,EAASL,eAAexL,WAAW3kU,GAAM,CAAC26C,EAAcy2R,IAAoB5B,GAAyB4B,KACrH,GAAIF,IAAoBC,EAAS,CAC7B,MAAM9P,EAAUmP,EAASL,eAAe9O,QAAQrhU,GAGhD,IAAKqhU,EAAQ96R,UAAW,CAEpB,MAAM8qS,EAsU1B,SAAiDhQ,GAC7C,OAAOA,EAAQmD,MAAK,CAAC7pR,EAAc22R,EAAqBC,KACpD,GAAID,GAAuB9B,GAAyB8B,GAAsB,CAEtE,MAAO,CADcxB,GAAyBwB,GAElD,CACK,CAED,IAAI3C,EAAQ,GAOZ,OANI2C,IACA3C,EAAQgB,GAAuB2B,IAEnCt0P,EAAKu0P,GAAU,CAACv9S,EAAMw9S,KAClB7C,EAAQA,EAAMt4T,OAAOm7T,EAAW,IAE7B7C,CACX,IAER,CAxVqC8C,CAAwCpQ,GAEzD,IAAK,IAAIxtU,EAAI,EAAGA,EAAIw9U,EAASv9U,SAAUD,EAAG,CACtC,MAAMqhN,EAAOm8H,EAASx9U,GAAI69U,EAAWx8H,EAAK1rE,MACpC1uG,EAAW62S,GAA+BnB,EAAUt7H,GAC1Ds7H,EAASN,gBAAgB0B,eAAeC,GAA2BH,GAAWI,GAAoBtB,EAAUkB,GAAW52S,EAASkwR,OAAQlwR,EAAS6pR,WACrJ,CACJ,CAEJ,CAIA,IAAKwsB,GAAWpvF,EAAQjuP,OAAS,IAAM+5U,EAGnC,GAAIqD,EAAiB,CAEjB,MAAMa,EAAa,KACnBvB,EAASN,gBAAgB8B,cAAcH,GAA2BroM,GAAQuoM,EAC9E,MAEIhwF,EAAQ7kP,SAAS+0U,IACb,MAAMC,EAAc1B,EAASF,cAAcltT,IAAI+uT,GAAsBF,IACrEzB,EAASN,gBAAgB8B,cAAcH,GAA2BI,GAAgBC,EAAY,GAI9G,EA6UR,SAA6B1B,EAAU1iB,GACnC,IAAK,IAAI7wS,EAAI,EAAGA,EAAI6wS,EAAQh6T,SAAUmpB,EAAG,CACrC,MAAMm1T,EAAetkB,EAAQ7wS,GAC7B,IAAKm1T,EAAavnB,aAAaC,eAAgB,CAE3C,MAAMunB,EAAkBF,GAAsBC,GACxCE,EAAkB9B,EAASF,cAAcltT,IAAIivT,GACnD7B,EAASF,cAAc5kS,OAAO2mS,GAC9B7B,EAASH,cAAc3kS,OAAO4mS,EAClC,CACJ,CACJ,CAtVQC,CAAoB/B,EAAUzuF,EAClC,CACA,OAAO+rF,CACX,CAMA,SAAS0E,GAAkChC,EAAUxwU,EAAMm5T,EAAMhvN,GAC7D,MAAMsoO,EAAWC,GAAwBlC,EAAUrmO,GACnD,GAAgB,MAAZsoO,EAAkB,CAClB,MAAM19U,EAAI49U,GAAuBF,GAC3BG,EAAY79U,EAAEiL,KAAM2qT,EAAU51T,EAAE41T,QAChChwQ,EAAeusQ,GAAgB0rB,EAAW5yU,GAEhD,OAAO6yU,GAA8BrC,EAAUoC,EADpC,IAAIpR,GAAUZ,GAAoCjW,GAAUhwQ,EAAcw+Q,GAEzF,CAGI,MAAO,EAEf,CA0BA,SAAS2Z,GAA6BtC,EAAUhnM,EAAOokM,EAAmBmF,GAAoB,GAC1F,MAAM/yU,EAAOwpI,EAAM+gL,MACnB,IAAI8Y,EAAc,KACd2P,GAA2B,EAG/BxC,EAASL,eAAerL,cAAc9kU,GAAM,CAACizU,EAAiB1mT,KAC1D,MAAMouB,EAAeusQ,GAAgB+rB,EAAiBjzU,GACtDqjU,EACIA,GAAeuM,GAAgCrjT,EAAIouB,GACvDq4R,EACIA,GAA4BxD,GAAyBjjT,EAAG,IAEhE,IAWIyiT,EAXAH,EAAY2B,EAASL,eAAe/sT,IAAIpjB,GAY5C,GAXK6uU,GAKDmE,EACIA,GAA4BxD,GAAyBX,GACzDxL,EACIA,GAAeuM,GAAgCf,EAAWvoB,QAP9DuoB,EAAY,IAAIH,GAChB8B,EAASL,eAAiBK,EAASL,eAAeplS,IAAI/qC,EAAM6uU,IAS7C,MAAfxL,EACA2L,GAAsB,MAErB,CACDA,GAAsB,EACtB3L,EAActM,GAAapH,WACX6gB,EAASL,eAAe9O,QAAQrhU,GACxCmlU,cAAa,CAACxS,EAAWugB,KAC7B,MAAM1I,EAAgBoF,GAAgCsD,EAAgB5sB,MAClEkkB,IACAnH,EAAcA,EAAYrQ,qBAAqBL,EAAW6X,GAC9D,GAER,CACA,MAAM2I,EAAoBpD,GAA4BlB,EAAWrlM,GACjE,IAAK2pM,IAAsB3pM,EAAMqhL,aAAaC,eAAgB,CAE1D,MAAM2nB,EAAWN,GAAsB3oM,IACvC,SAAQgnM,EAASF,cAAcxlS,IAAI2nS,GAAW,0CAC9C,MAAMtoO,EA+PH6lO,KA9PHQ,EAASF,cAAcvlS,IAAI0nS,EAAUtoO,GACrCqmO,EAASH,cAActlS,IAAIo/D,EAAKsoO,EACpC,CAEA,IAAI1nT,EAASmkT,GAA8BL,EAAWrlM,EAAOokM,EADzCnH,GAAqB+J,EAASJ,kBAAmBpwU,GACwBqjU,EAAa2L,GAC1G,IAAKmE,IAAsBH,IAA6BD,EAAmB,CACvE,MAAM79H,EAAO26H,GAAsBhB,EAAWrlM,GAC9Cz+G,EAASA,EAAO1U,OA8PxB,SAAgCm6T,EAAUhnM,EAAO0rE,GAC7C,MAAMl1M,EAAOwpI,EAAM+gL,MACbpgN,EAAM2nO,GAAoBtB,EAAUhnM,GACpC1uG,EAAW62S,GAA+BnB,EAAUt7H,GACpDnqL,EAASylT,EAASN,gBAAgB0B,eAAeC,GAA2BroM,GAAQr/B,EAAKrvE,EAASkwR,OAAQlwR,EAAS6pR,YACnH0c,EAAUmP,EAASL,eAAe9O,QAAQrhU,GAGhD,GAAImqG,GACA,SAAQqlO,GAAyBnO,EAAQ3sU,OAAQ,yDAEhD,CAED,MAAM0+U,EAAgB/R,EAAQmD,MAAK,CAAC7pR,EAAc22R,EAAqBC,KACnE,IAAKtqB,GAAYtsQ,IACb22R,GACA9B,GAAyB8B,GACzB,MAAO,CAACxB,GAAyBwB,GAAqB9nM,OAErD,CAED,IAAIskL,EAAU,GAOd,OANIwjB,IACAxjB,EAAUA,EAAQz3S,OAAOs5T,GAAuB2B,GAAqBl5U,KAAI88M,GAAQA,EAAK1rE,UAE1FxsD,EAAKu0P,GAAU,CAACv9S,EAAMq/S,KAClBvlB,EAAUA,EAAQz3S,OAAOg9T,EAAa,IAEnCvlB,CACX,KAEJ,IAAK,IAAIj6T,EAAI,EAAGA,EAAIu/U,EAAct/U,SAAUD,EAAG,CAC3C,MAAMy/U,EAAcF,EAAcv/U,GAClC28U,EAASN,gBAAgB8B,cAAcH,GAA2ByB,GAAcxB,GAAoBtB,EAAU8C,GAClH,CACJ,CACA,OAAOvoT,CACX,CAnS+BwoT,CAAuB/C,EAAUhnM,EAAO0rE,GACnE,CACA,OAAOnqL,CACX,CAYA,SAASyoT,GAA+BhD,EAAUxwU,EAAM+nU,GACpD,MACMxB,EAAYiK,EAASJ,kBACrB/M,EAAcmN,EAASL,eAAexL,WAAW3kU,GAAM,CAAC0kU,EAAWmK,KACrE,MACMxL,EAAcuM,GAAgCf,EAD/B3nB,GAAgBwd,EAAW1kU,IAEhD,GAAIqjU,EACA,OAAOA,CACX,IAEJ,OAAOwE,GAAgCtB,EAAWvmU,EAAMqjU,EAAa0E,GAT3C,EAU9B,CAyCA,SAAS2I,GAAoCF,EAAU9uK,GACnD,OAAO+xK,GAA8B/xK,EAAW8uK,EAASL,eACxC,KAAM1J,GAAqB+J,EAASJ,kBAAmB9pB,MAC5E,CAIA,SAASmtB,GAA8B/xK,EAAWgyK,EAAerQ,EAAakH,GAC1E,GAAItjB,GAAYvlJ,EAAU1hK,MACtB,OAAO2zU,GAAyCjyK,EAAWgyK,EAAerQ,EAAakH,GAEtF,CACD,MAAMsE,EAAY6E,EAActwT,IAAIkjS,MAEjB,MAAf+c,GAAoC,MAAbwL,IACvBxL,EAAcuM,GAAgCf,EAAWvoB,OAE7D,IAAIv7R,EAAS,GACb,MAAM4nS,EAAYpM,GAAa7kJ,EAAU1hK,MACnC4zU,EAAiBlyK,EAAU0/J,kBAAkBzO,GAC7C0C,EAAYqe,EAAc98U,SAASwsB,IAAIuvS,GAC7C,GAAI0C,GAAaue,EAAgB,CAC7B,MAAMC,EAAmBxQ,EACnBA,EAAY3Q,kBAAkBC,GAC9B,KACAmhB,EAAmBvK,GAAkBgB,EAAa5X,GACxD5nS,EAASA,EAAO1U,OAAOo9T,GAA8BG,EAAgBve,EAAWwe,EAAkBC,GACtG,CAIA,OAHIjF,IACA9jT,EAASA,EAAO1U,OAAOu4T,GAAwBC,EAAWntK,EAAW6oK,EAAalH,KAE/Et4S,CACX,CACJ,CAIA,SAAS4oT,GAAyCjyK,EAAWgyK,EAAerQ,EAAakH,GACrF,MAAMsE,EAAY6E,EAActwT,IAAIkjS,MAEjB,MAAf+c,GAAoC,MAAbwL,IACvBxL,EAAcuM,GAAgCf,EAAWvoB,OAE7D,IAAIv7R,EAAS,GAcb,OAbA2oT,EAAc98U,SAASg5T,kBAAiB,CAAC+C,EAAW0C,KAChD,MAAMwe,EAAmBxQ,EACnBA,EAAY3Q,kBAAkBC,GAC9B,KACAmhB,EAAmBvK,GAAkBgB,EAAa5X,GAClDihB,EAAiBlyK,EAAU0/J,kBAAkBzO,GAC/CihB,IACA7oT,EAASA,EAAO1U,OAAOs9T,GAAyCC,EAAgBve,EAAWwe,EAAkBC,IACjH,IAEAjF,IACA9jT,EAASA,EAAO1U,OAAOu4T,GAAwBC,EAAWntK,EAAW6oK,EAAalH,KAE/Et4S,CACX,CACA,SAAS4mT,GAA+BnB,EAAUt7H,GAC9C,MAAM1rE,EAAQ0rE,EAAK1rE,MACbr/B,EAAM2nO,GAAoBtB,EAAUhnM,GAC1C,MAAO,CACHwhL,OAAQ,KACJ,MAAMt+L,EA9wBlB,SAA4BwoF,GACxB,OAAOA,EAAK+0H,WAAW5G,YAAYjE,SACvC,CA4wB0B2U,CAAmB7+H,IAAS6hH,GAAapH,WACvD,OAAOjjM,EAAMz0F,MAAM,EAEvB0sR,WAAapnT,IACT,GAAe,OAAXA,EACA,OAAI4sG,EAxUpB,SAA2CqmO,EAAUxwU,EAAMmqG,GACvD,MAAMsoO,EAAWC,GAAwBlC,EAAUrmO,GACnD,GAAIsoO,EAAU,CACV,MAAM19U,EAAI49U,GAAuBF,GAC3BG,EAAY79U,EAAEiL,KAAM2qT,EAAU51T,EAAE41T,QAChChwQ,EAAeusQ,GAAgB0rB,EAAW5yU,GAEhD,OAAO6yU,GAA8BrC,EAAUoC,EADpC,IAAItR,GAAeV,GAAoCjW,GAAUhwQ,GAEhF,CAGI,MAAO,EAEf,CA4T2Bq5R,CAAkCxD,EAAUhnM,EAAM+gL,MAAOpgN,GAjVpF,SAAqCqmO,EAAUxwU,GAC3C,OAAO0wU,GAAoCF,EAAU,IAAIlP,GA72ElD,CACHT,UAAU,EACVC,YAAY,EACZnW,QAAS,KACToW,QAAQ,GAy2EwF/gU,GACxG,CAkV2Bi0U,CAA4BzD,EAAUhnM,EAAM+gL,OAGtD,CAGD,MAAMvsT,EA1pStB,SAA4B0oB,EAAM8iH,GAC9B,IAAI1hH,EAAS,gBACA,YAATpB,EACAoB,EACI,0FAGU,sBAATpB,EACLoB,EAAS,6DAEK,gBAATpB,IACLoB,EAAS,8BAEb,MAAM9pB,EAAQ,IAAIggB,MAAM0I,EAAO,OAAS8iH,EAAM+gL,MAAMn2T,WAAa,KAAO0zB,GAGxE,OADA9pB,EAAM0oB,KAAOA,EAAK9oB,cACXI,CACX,CAyoS8Bk2U,CAAmB32U,EAAQisI,GACzC,OAAOsnM,GAAgCN,EAAUhnM,EAC3B,KAAMxrI,EAChC,GAGZ,CAIA,SAAS8zU,GAAoBtB,EAAUhnM,GACnC,MAAMipM,EAAWN,GAAsB3oM,GACvC,OAAOgnM,EAASF,cAAcltT,IAAIqvT,EACtC,CAIA,SAASN,GAAsB3oM,GAC3B,OAAOA,EAAM+gL,MAAMn2T,WAAa,IAAMo1I,EAAMohL,gBAChD,CAIA,SAAS8nB,GAAwBlC,EAAUrmO,GACvC,OAAOqmO,EAASH,cAAcjtT,IAAI+mF,EACtC,CAIA,SAASwoO,GAAuBF,GAC5B,MAAM0B,EAAa1B,EAAS/8U,QAAQ,KAEpC,OADA,SAAuB,IAAhBy+U,GAAqBA,EAAa1B,EAAS3+U,OAAS,EAAG,iBACvD,CACH62T,QAAS8nB,EAASrpT,OAAO+qT,EAAa,GACtCn0U,KAAM,IAAIgmT,GAAKysB,EAASrpT,OAAO,EAAG+qT,IAE1C,CAIA,SAAStB,GAA8BrC,EAAUoC,EAAWlxK,GACxD,MAAMmtK,EAAY2B,EAASL,eAAe/sT,IAAIwvT,IAC9C,QAAO/D,EAAW,wDAElB,OAAOD,GAAwBC,EAAWntK,EADtB+kK,GAAqB+J,EAASJ,kBAAmBwC,GACH,KACtE,CA6BA,SAASf,GAA2BroM,GAChC,OAAIA,EAAMqhL,aAAaC,iBAAmBthL,EAAMqhL,aAAangT,YAIlD,KAliBX,QAAO+jU,GAAsB,oCACtBA,IAiiB4CjlM,EAAMkmM,MAAOlmM,EAAM+gL,OAG3D/gL,CAEf,CA+EA,MAAM4qM,GACF,WAAAj4S,CAAY0lS,GACRvnT,KAAKunT,MAAQA,CACjB,CACA,iBAAAnP,CAAkBC,GACd,MAAMt6T,EAAQiiB,KAAKunT,MAAMnP,kBAAkBC,GAC3C,OAAO,IAAIyhB,GAAsB/7U,EACrC,CACA,IAAAqgF,GACI,OAAOp+D,KAAKunT,KAChB,EAEJ,MAAMwS,GACF,WAAAl4S,CAAYq0S,EAAUxwU,GAClBsa,KAAKg6T,UAAY9D,EACjBl2T,KAAKi6T,MAAQv0U,CACjB,CACA,iBAAA0yT,CAAkBC,GACd,MAAMqR,EAAYld,GAAUxsS,KAAKi6T,MAAO5hB,GACxC,OAAO,IAAI0hB,GAAsB/5T,KAAKg6T,UAAWtQ,EACrD,CACA,IAAAtrP,GACI,OAAO86P,GAA+Bl5T,KAAKg6T,UAAWh6T,KAAKi6T,MAC/D,EAKJ,MAAMC,GAAqB,SAAUx0Q,GAGjC,OAFAA,EAASA,GAAU,CAAC,GACF,UAAIA,EAAkB,YAAK,IAAIx8D,MAAO+mB,UACjDy1C,CACX,EAKMy0Q,GAA2B,SAAU//U,EAAOggV,EAAaC,GAC3D,OAAKjgV,GAA0B,kBAAVA,IAGrB,QAAO,QAASA,EAAO,6CACK,kBAAjBA,EAAM,OACNkgV,GAA2BlgV,EAAM,OAAQggV,EAAaC,GAEhC,kBAAjBjgV,EAAM,OACXmgV,GAA4BngV,EAAM,OAAQggV,QAGjD,SAAO,EAAO,4BAA8B50T,KAAKC,UAAUrrB,EAAO,KAAM,KAVjEA,CAYf,EACMkgV,GAA6B,SAAUhmS,EAAIq/R,EAAU0G,GACvD,GACS,cADD/lS,EAEA,OAAO+lS,EAAwB,WAE/B,SAAO,EAAO,4BAA8B/lS,EAExD,EACMimS,GAA8B,SAAUjmS,EAAIq/R,EAAU6G,GACnDlmS,EAAGn7C,eAAe,eACnB,SAAO,EAAO,4BAA8BqsB,KAAKC,UAAU6uB,EAAI,KAAM,IAEzE,MAAM8J,EAAQ9J,EAAc,UACP,kBAAV8J,IACP,SAAO,EAAO,+BAAiCA,GAEnD,MAAMq8R,EAAe9G,EAASv1P,OAG9B,IAFA,QAAwB,OAAjBq8P,GAAiD,qBAAjBA,EAA8B,+CAEhEA,EAAahjB,aACd,OAAOr5Q,EAEX,MACMg8R,EADOK,EACY1nO,WACzB,MAA2B,kBAAhBqnO,EACAh8R,EAGJg8R,EAAch8R,CACzB,EAQMs8R,GAA2B,SAAUh1U,EAAM04E,EAAM83P,EAAUmE,GAC7D,OAAOM,GAAqBv8P,EAAM,IAAI27P,GAAsB7D,EAAUxwU,GAAO20U,EACjF,EAMMO,GAA+B,SAAUx8P,EAAMu1P,EAAU0G,GAC3D,OAAOM,GAAqBv8P,EAAM,IAAI07P,GAAsBnG,GAAW0G,EAC3E,EACA,SAASM,GAAqBv8P,EAAMg8P,EAAaC,GAC7C,MAAMQ,EAASz8P,EAAKs5O,cAAc97S,MAC5BmvD,EAAWovQ,GAAyBU,EAAQT,EAAYhiB,kBAAkB,aAAciiB,GAC9F,IAAIrmB,EACJ,GAAI51O,EAAKq5O,aAAc,CACnB,MAAMqjB,EAAW18P,EACXhkF,EAAQ+/U,GAAyBW,EAAS/nO,WAAYqnO,EAAaC,GACzE,OAAIjgV,IAAU0gV,EAAS/nO,YACnBhoC,IAAa+vQ,EAASpjB,cAAc97S,MAC7B,IAAIk8S,GAAS19T,EAAOgkU,GAAarzP,IAGjCqT,CAEf,CACK,CACD,MAAM28P,EAAe38P,EAWrB,OAVA41O,EAAU+mB,EACNhwQ,IAAagwQ,EAAarjB,cAAc97S,QACxCo4S,EAAUA,EAAQkE,eAAe,IAAIJ,GAAS/sP,KAElDgwQ,EAAajiB,aAAac,IAAgB,CAACvB,EAAWI,KAClD,MAAME,EAAegiB,GAAqBliB,EAAW2hB,EAAYhiB,kBAAkBC,GAAYgiB,GAC3F1hB,IAAiBF,IACjBzE,EAAUA,EAAQ0E,qBAAqBL,EAAWM,GACtD,IAEG3E,CACX,CACJ,CAuBA,MAAMgnB,GAMF,WAAAn5S,CAAYj9B,EAAO,GAAI45E,EAAS,KAAMJ,EAAO,CAAE9hF,SAAU,CAAC,EAAG2+U,WAAY,IACrEj7T,KAAKpb,KAAOA,EACZob,KAAKw+D,OAASA,EACdx+D,KAAKo+D,KAAOA,CAChB,EAQJ,SAAS88P,GAAY5V,EAAM6V,GAEvB,IAAIz1U,EAAOy1U,aAAmBzvB,GAAOyvB,EAAU,IAAIzvB,GAAKyvB,GACpDp9U,EAAQunU,EAAMv3S,EAAOk+R,GAAavmT,GACtC,KAAgB,OAATqoB,GAAe,CAClB,MAAM0qS,GAAY,QAAQ16T,EAAMqgF,KAAK9hF,SAAUyxB,IAAS,CACpDzxB,SAAU,CAAC,EACX2+U,WAAY,GAEhBl9U,EAAQ,IAAIi9U,GAAKjtT,EAAMhwB,EAAO06T,GAC9B/yT,EAAOymT,GAAazmT,GACpBqoB,EAAOk+R,GAAavmT,EACxB,CACA,OAAO3H,CACX,CAMA,SAASq9U,GAAa9V,GAClB,OAAOA,EAAKlnP,KAAKhkF,KACrB,CAMA,SAASihV,GAAa/V,EAAMlrU,GACxBkrU,EAAKlnP,KAAKhkF,MAAQA,EAClBkhV,GAAkBhW,EACtB,CAIA,SAASiW,GAAgBjW,GACrB,OAAOA,EAAKlnP,KAAK68P,WAAa,CAClC,CAYA,SAASO,GAAiBlW,EAAMpuR,GAC5BwrC,EAAK4iP,EAAKlnP,KAAK9hF,UAAU,CAACyB,EAAOg9T,KAC7B7jR,EAAO,IAAI8jS,GAAKj9U,EAAOunU,EAAMvK,GAAW,GAEhD,CAUA,SAAS0gB,GAAsBnW,EAAMpuR,EAAQwkS,EAAaC,GAClDD,IAAgBC,GAChBzkS,EAAOouR,GAEXkW,GAAiBlW,GAAMvnU,IACnB09U,GAAsB19U,EAAOm5C,GAAQ,EAAMykS,EAAc,IAEzDD,GAAeC,GACfzkS,EAAOouR,EAEf,CAsBA,SAASsW,GAAYtW,GACjB,OAAO,IAAI5Z,GAAqB,OAAhB4Z,EAAK9mP,OACf8mP,EAAK1gU,KACLg3U,GAAYtW,EAAK9mP,QAAU,IAAM8mP,EAAK1gU,KAChD,CAIA,SAAS02U,GAAkBhW,GACH,OAAhBA,EAAK9mP,QAUb,SAAyB8mP,EAAMjN,EAAWt6T,GACtC,MAAM89U,EA1EV,SAAqBvW,GACjB,YAA8B1sT,IAAvBwiU,GAAa9V,KAAwBiW,GAAgBjW,EAChE,CAwEuBwW,CAAY/9U,GACzBg+U,GAAc,QAASzW,EAAKlnP,KAAK9hF,SAAU+7T,GAC7CwjB,GAAcE,UACPzW,EAAKlnP,KAAK9hF,SAAS+7T,GAC1BiN,EAAKlnP,KAAK68P,aACVK,GAAkBhW,IAEZuW,GAAeE,IACrBzW,EAAKlnP,KAAK9hF,SAAS+7T,GAAat6T,EAAMqgF,KACtCknP,EAAKlnP,KAAK68P,aACVK,GAAkBhW,GAE1B,CAtBQ0W,CAAgB1W,EAAK9mP,OAAQ8mP,EAAK1gU,KAAM0gU,EAEhD,CAyCA,MAAM2W,GAAqB,iCAKrBC,GAAsB,+BAItBC,GAAiB,SACjBC,GAAa,SAAUliV,GACzB,MAAuB,kBAARA,GAAmC,IAAfA,EAAIV,SAAiByiV,GAAmB78T,KAAKllB,EACpF,EACMmiV,GAAoB,SAAUjyB,GAChC,MAA8B,kBAAfA,GACW,IAAtBA,EAAW5wT,SACV0iV,GAAoB98T,KAAKgrS,EAClC,EA6BMkyB,GAAuB,SAAU5sS,EAAa9lC,EAAMqwU,GACtD,MAAMv0U,EAAOu0U,aAAiBvuB,GAAO,IAAIwB,GAAe+sB,EAAOvqS,GAAeuqS,EAC9E,QAAarhU,IAAThP,EACA,MAAM,IAAI8Z,MAAMgsB,EAAc,sBAAwB89Q,GAA4B9nT,IAEtF,GAAoB,oBAATkE,EACP,MAAM,IAAI8Z,MAAMgsB,EACZ,uBACA89Q,GAA4B9nT,GAC5B,oBACAkE,EAAK9P,YAEb,GAAI0gT,EAAoB5wS,GACpB,MAAM,IAAI8Z,MAAMgsB,EACZ,YACA9lC,EAAK9P,WACL,IACA0zT,GAA4B9nT,IAGpC,GAAoB,kBAATkE,GACPA,EAAKpQ,OAAS2iV,GAAiB,IAC/B,QAAavyU,GAAQuyU,GACrB,MAAM,IAAIz4T,MAAMgsB,EACZ,kCACAysS,GACA,eACA3uB,GAA4B9nT,GAC5B,MACAkE,EAAKpO,UAAU,EAAG,IAClB,SAIR,GAAIoO,GAAwB,kBAATA,EAAmB,CAClC,IAAI2yU,GAAc,EACdC,GAAiB,EAqBrB,GApBA95P,EAAK94E,GAAM,CAAC1P,EAAKE,KACb,GAAY,WAARF,EACAqiV,GAAc,OAEb,GAAY,cAARriV,GAA+B,QAARA,IAC5BsiV,GAAiB,GACZJ,GAAWliV,IACZ,MAAM,IAAIwpB,MAAMgsB,EACZ,6BACAx1C,EACA,KACAszT,GAA4B9nT,GAJhBgqC,yFAtxOpC,SAA4B69Q,EAAgBxvT,GAEpCwvT,EAAeH,OAAO5zT,OAAS,IAC/B+zT,EAAeF,aAAe,GAElCE,EAAeH,OAAO/xT,KAAK0C,GAC3BwvT,EAAeF,cAAe,QAAatvT,GAC3CuvT,GAAyBC,EAC7B,CAuxOYkvB,CAAmB/2U,EAAMxL,GACzBoiV,GAAqB5sS,EAAat1C,EAAOsL,GAvxOrD,SAA2B6nT,GACvB,MAAMhpL,EAAOgpL,EAAeH,OAAO/oS,MACnCkpS,EAAeF,cAAe,QAAa9oL,GAEvCgpL,EAAeH,OAAO5zT,OAAS,IAC/B+zT,EAAeF,aAAe,EAEtC,CAixOYqvB,CAAkBh3U,EAAK,IAEvB62U,GAAeC,EACf,MAAM,IAAI94T,MAAMgsB,EACZ,4BACA89Q,GAA4B9nT,GAC5B,mCAEZ,CACJ,EAqGMi3U,GAAqB,SAAUhtS,EAAQitS,EAAcxyB,EAAY1nQ,GACnE,KAAIA,QAA2B9pC,IAAfwxS,KAGXiyB,GAAkBjyB,GACnB,MAAM,IAAI1mS,OAAM,QAAYisB,EAAQitS,GAChC,0BACAxyB,EAFY,mFAMxB,EACMyyB,GAAyB,SAAUltS,EAAQitS,EAAcxyB,EAAY1nQ,GACnE0nQ,IAEAA,EAAaA,EAAWlkT,QAAQ,mBAAoB,MAExDy2U,GAAmBhtS,EAAQitS,EAAcxyB,EAAY1nQ,EACzD,EASMo6R,GAAc,SAAUntS,EAAQotS,GAElC,MAAM3yB,EAAa2yB,EAAUr3U,KAAK5L,WAClC,GAAyC,kBAA5BijV,EAAU9+B,SAAS99R,MACO,IAAnC48T,EAAU9+B,SAAS99R,KAAK3mB,SACtB4iV,GAAWW,EAAU9+B,SAASx+N,YACc,cAA1Cs9P,EAAU9+B,SAAS99R,KAAK4D,MAAM,KAAK,IAChB,IAAtBqmS,EAAW5wT,SAnOU,SAAU4wT,GAKpC,OAJIA,IAEAA,EAAaA,EAAWlkT,QAAQ,mBAAoB,MAEjDm2U,GAAkBjyB,EAC7B,CA6NqC4yB,CAAsB5yB,GACnD,MAAM,IAAI1mS,OAAM,QAAYisB,EAAQ,OAApB,uFAIxB,EA+BA,MAAMstS,GACF,WAAAp7S,GACI7hB,KAAKk9T,YAAc,GAInBl9T,KAAKm9T,gBAAkB,CAC3B,EAKJ,SAASC,GAAsBC,EAAYC,GAEvC,IAAIC,EAAW,KACf,IAAK,IAAIhkV,EAAI,EAAGA,EAAI+jV,EAAc9jV,OAAQD,IAAK,CAC3C,MAAMqQ,EAAO0zU,EAAc/jV,GACrBmM,EAAOkE,EAAK4zU,UACD,OAAbD,GAAsBvwB,GAAWtnT,EAAM63U,EAAS73U,QAChD23U,EAAWH,YAAY7hV,KAAKkiV,GAC5BA,EAAW,MAEE,OAAbA,IACAA,EAAW,CAAE9sT,OAAQ,GAAI/qB,SAE7B63U,EAAS9sT,OAAOp1B,KAAKuO,EACzB,CACI2zU,GACAF,EAAWH,YAAY7hV,KAAKkiV,EAEpC,CAUA,SAASE,GAA4BJ,EAAY33U,EAAM43U,GACnDF,GAAsBC,EAAYC,GAClCI,GAA6CL,GAAYM,GAAa3wB,GAAW2wB,EAAWj4U,IAChG,CAUA,SAASk4U,GAAoCP,EAAYQ,EAAaP,GAClEF,GAAsBC,EAAYC,GAClCI,GAA6CL,GAAYM,GAAa1wB,GAAa0wB,EAAWE,IAC1F5wB,GAAa4wB,EAAaF,IAClC,CACA,SAASD,GAA6CL,EAAYj3Q,GAC9Di3Q,EAAWF,kBACX,IAAIW,GAAU,EACd,IAAK,IAAIvkV,EAAI,EAAGA,EAAI8jV,EAAWH,YAAY1jV,OAAQD,IAAK,CACpD,MAAMwkV,EAAYV,EAAWH,YAAY3jV,GACzC,GAAIwkV,EAAW,CAEP33Q,EADc23Q,EAAUr4U,OAExBs4U,GAAeX,EAAWH,YAAY3jV,IACtC8jV,EAAWH,YAAY3jV,GAAK,MAG5BukV,GAAU,CAElB,CACJ,CACIA,IACAT,EAAWH,YAAc,IAE7BG,EAAWF,iBACf,CAIA,SAASa,GAAeD,GACpB,IAAK,IAAIxkV,EAAI,EAAGA,EAAIwkV,EAAUttT,OAAOj3B,OAAQD,IAAK,CAC9C,MAAM2xT,EAAY6yB,EAAUttT,OAAOl3B,GACnC,GAAkB,OAAd2xT,EAAoB,CACpB6yB,EAAUttT,OAAOl3B,GAAK,KACtB,MAAM0kV,EAAU/yB,EAAUgzB,iBACtBj/T,GACAuB,EAAI,UAAY0qS,EAAUpxT,YAE9B+hT,EAAeoiC,EACnB,CACJ,CACJ,CAkBA,MAAME,GAAmB,iBAMnBC,GAA0B,GAIhC,MAAMC,GACF,WAAAx8S,CAAYilR,EAAWw3B,EAAkBpwB,EAAoBqwB,GACzDv+T,KAAK8mS,UAAYA,EACjB9mS,KAAKs+T,iBAAmBA,EACxBt+T,KAAKkuS,mBAAqBA,EAC1BluS,KAAKu+T,kBAAoBA,EACzBv+T,KAAKw+T,gBAAkB,EACvBx+T,KAAKimT,eAAiB,KACtBjmT,KAAKy+T,YAAc,IAAIxB,GACvBj9T,KAAK0+T,aAAe,EACpB1+T,KAAK2+T,6BAA+B,KAEpC3+T,KAAKqgS,cAAgB4kB,KAErBjlT,KAAK4+T,sBAAwB,IAAI5D,GAEjCh7T,KAAK6+T,sBAAwB,KAE7B7+T,KAAK9lB,IAAM8lB,KAAK8mS,UAAU/I,aAC9B,CAIA,QAAAjkT,GACI,OAASkmB,KAAK8mS,UAAU36K,OAAS,WAAa,WAAansH,KAAK8mS,UAAU3mS,IAC9E,EAEJ,SAAS2+T,GAAUC,EAAMn6G,EAAOo6G,GAE5B,GADAD,EAAK9+B,OAASxB,GAA0BsgC,EAAKj4B,WACzCi4B,EAAKT,mBA39T4B,kBAAX7/U,QACtBA,OAAkB,WAClBA,OAAkB,UAAa,WAC/B,IAKci/B,OAAO,6FAA+F,EAo9TpHqhT,EAAKhZ,QAAU,IAAI3B,GAAmB2a,EAAKj4B,WAAW,CAACsD,EAAYxgT,EAAMq1U,EAASpvO,KAC9EqvO,GAAiBH,EAAM30B,EAAYxgT,EAAMq1U,EAASpvO,EAAI,GACvDkvO,EAAK7wB,mBAAoB6wB,EAAKR,mBAEjCjwT,YAAW,IAAM6wT,GAAoBJ,GAA2B,IAAO,OAEtE,CAED,GAA4B,qBAAjBC,GAAiD,OAAjBA,EAAuB,CAC9D,GAA4B,kBAAjBA,EACP,MAAM,IAAIt7T,MAAM,sEAEpB,KACI,QAAUs7T,EACd,CACA,MAAO1kV,GACH,MAAM,IAAIopB,MAAM,kCAAoCppB,EACxD,CACJ,CACAykV,EAAKF,sBAAwB,IAAI/wB,GAAqBixB,EAAKj4B,UAAWliF,GAAO,CAACwlF,EAAYxgT,EAAMq1U,EAASpvO,KACrGqvO,GAAiBH,EAAM30B,EAAYxgT,EAAMq1U,EAASpvO,EAAI,IACtDuvO,IACAD,GAAoBJ,EAAMK,EAAc,IACxCz2T,KA0GZ,SAAgCo2T,EAAMp2T,GAClC+5D,EAAK/5D,GAAS,CAACzuB,EAAKE,KAChBilV,GAAeN,EAAM7kV,EAAKE,EAAM,GAExC,CA7GYklV,CAAuBP,EAAMp2T,EAAQ,GACtCo2T,EAAK7wB,mBAAoB6wB,EAAKR,kBAAmBS,GACpDD,EAAKhZ,QAAUgZ,EAAKF,qBACxB,CACAE,EAAK7wB,mBAAmB7R,wBAAuB/zQ,IAC3Cy2S,EAAKhZ,QAAQzb,iBAAiBhiR,EAAM,IAExCy2S,EAAKR,kBAAkBliC,wBAAuBx+S,IAC1CkhV,EAAKhZ,QAAQxb,qBAAqB1sT,EAAOyqC,MAAM,IAInDy2S,EAAKQ,eA5lTT,SAAyCthC,EAAUuhC,GAC/C,MAAM9gC,EAAaT,EAASnkT,WAI5B,OAHK0kT,GAAUE,KACXF,GAAUE,GAAc8gC,KAErBhhC,GAAUE,EACrB,CAslT0B+gC,CAAgCV,EAAKj4B,WAAW,IAAM,IAAI+e,GAAckZ,EAAK9+B,OAAQ8+B,EAAKhZ,WAEhHgZ,EAAKW,UAAY,IAAI9a,GACrBma,EAAKY,cAAgB,IAAIhK,GAAS,CAC9B2B,eAAgB,CAACpoM,EAAOr/B,EAAKugN,EAAe/F,KACxC,IAAIu1B,EAAa,GACjB,MAAMxhQ,EAAO2gQ,EAAKW,UAAU5a,QAAQ51L,EAAM+gL,OAS1C,OANK7xO,EAAKnyC,YACN2zS,EAAarJ,GAA6BwI,EAAKY,cAAezwM,EAAM+gL,MAAO7xO,GAC3E9vD,YAAW,KACP+7R,EAAW,KAAK,GACjB,IAEAu1B,CAAU,EAErBlI,cAAe,SAEnB2H,GAAeN,EAAM,aAAa,GAClCA,EAAKc,gBAAkB,IAAIlK,GAAS,CAChC2B,eAAgB,CAACpoM,EAAOr/B,EAAKugN,EAAe/F,KACxC00B,EAAKhZ,QAAQvnR,OAAO0wF,EAAOkhL,EAAevgN,GAAK,CAAC5sG,EAAQ2G,KACpD,MAAM6mB,EAAS45R,EAAWpnT,EAAQ2G,GAClCg0U,GAAoCmB,EAAKN,YAAavvM,EAAM+gL,MAAOx/R,EAAO,IAGvE,IAEXinT,cAAe,CAACxoM,EAAOr/B,KACnBkvO,EAAKhZ,QAAQvU,SAAStiL,EAAOr/B,EAAI,GAG7C,CAIA,SAASiwO,GAAef,GACpB,MACMjxS,EADaixS,EAAKW,UAAU5a,QAAQ,IAAIpZ,GAAK,2BACzB9vS,OAAS,EACnC,OAAO,IAAI1S,MAAO+mB,UAAY6d,CAClC,CAIA,SAASiyS,GAAyBhB,GAC9B,OAAO7E,GAAmB,CACtBr5T,UAAWi/T,GAAef,IAElC,CAIA,SAASG,GAAiBH,EAAM30B,EAAYxgT,EAAMq1U,EAASpvO,GAEvDkvO,EAAKP,kBACL,MAAM94U,EAAO,IAAIgmT,GAAKtB,GACtBxgT,EAAOm1U,EAAKJ,6BACNI,EAAKJ,6BAA6Bv0B,EAAYxgT,GAC9CA,EACN,IAAI6mB,EAAS,GACb,GAAIo/E,EACA,GAAIovO,EAAS,CACT,MAAMe,GAAiB,QAAIp2U,GAAOuhQ,GAAQizD,GAAajzD,KACvD16O,EAhtCZ,SAAuCylT,EAAUxwU,EAAM4qU,EAAiBzgO,GACpE,MAAMsoO,EAAWC,GAAwBlC,EAAUrmO,GACnD,GAAIsoO,EAAU,CACV,MAAM19U,EAAI49U,GAAuBF,GAC3BG,EAAY79U,EAAEiL,KAAM2qT,EAAU51T,EAAE41T,QAChChwQ,EAAeusQ,GAAgB0rB,EAAW5yU,GAC1Cu6U,EAAazW,GAAcC,WAAW6G,GAE5C,OAAOiI,GAA8BrC,EAAUoC,EADpC,IAAIlR,GAAMd,GAAoCjW,GAAUhwQ,EAAc4/R,GAErF,CAGI,MAAO,EAEf,CAksCqBC,CAA8BnB,EAAKc,gBAAiBn6U,EAAMs6U,EAAgBnwO,EACvF,KACK,CACD,MAAMswO,EAAa/hB,GAAax0T,GAChC6mB,EAASynT,GAAkC6G,EAAKc,gBAAiBn6U,EAAMy6U,EAAYtwO,EACvF,MAEC,GAAIovO,EAAS,CACd,MAAM3O,GAAkB,QAAI1mU,GAAOuhQ,GAAQizD,GAAajzD,KACxD16O,EAl2CR,SAAkCylT,EAAUxwU,EAAM4qU,GAC9C,MAAM2P,EAAazW,GAAcC,WAAW6G,GAC5C,OAAO8F,GAAoCF,EAAU,IAAI9O,GAr2ElD,CACHb,UAAU,EACVC,YAAY,EACZnW,QAAS,KACToW,QAAQ,GAi2E+E/gU,EAAMu6U,GACrG,CA+1CiBG,CAAyBrB,EAAKc,gBAAiBn6U,EAAM4qU,EAClE,KACK,CACD,MAAMzR,EAAOT,GAAax0T,GAC1B6mB,EAAS8lT,GAA6BwI,EAAKc,gBAAiBn6U,EAAMm5T,EACtE,CACA,IAAIc,EAAej6T,EACf+qB,EAAOj3B,OAAS,IAGhBmmU,EAAe0gB,GAAsBtB,EAAMr5U,IAE/Ck4U,GAAoCmB,EAAKN,YAAa9e,EAAclvS,EACxE,CACA,SAAS0uT,GAAoBJ,EAAMK,GAC/BC,GAAeN,EAAM,YAAaK,IACZ,IAAlBA,GAgJR,SAAmCL,GAC/BuB,GAAQvB,EAAM,sBACd,MAAM1E,EAAe0F,GAAyBhB,GACxCwB,EAA2Btb,KACjCG,GAA8B2Z,EAAK1+B,cAAe2L,MAAgB,CAACtmT,EAAM04E,KACrE,MAAMoiQ,EAAW9F,GAAyBh1U,EAAM04E,EAAM2gQ,EAAKc,gBAAiBxF,GAC5EnV,GAA2Bqb,EAA0B76U,EAAM86U,EAAS,IAExE,IAAI/vT,EAAS,GACb20S,GAA8Bmb,EAA0Bv0B,MAAgB,CAACtmT,EAAMm5T,KAC3EpuS,EAASA,EAAO1U,OAAOw6T,GAA6BwI,EAAKc,gBAAiBn6U,EAAMm5T,IAChF,MAAMc,EAAe8gB,GAAsB1B,EAAMr5U,GACjD26U,GAAsBtB,EAAMpf,EAAa,IAE7Cof,EAAK1+B,cAAgB4kB,KACrB2Y,GAAoCmB,EAAKN,YAAazyB,KAAgBv7R,EAC1E,CA/JQiwT,CAA0B3B,EAElC,CAMA,SAASM,GAAeN,EAAM30B,EAAYhwT,GACtC,MAAMsL,EAAO,IAAIgmT,GAAK,UAAYtB,GAC5B4J,EAAUoK,GAAahkU,GAC7B2kV,EAAKW,UAAU3a,eAAer/T,EAAMsuT,GACpC,MAAMvjS,EAAS8lT,GAA6BwI,EAAKY,cAAej6U,EAAMsuT,GACtE4pB,GAAoCmB,EAAKN,YAAa/4U,EAAM+qB,EAChE,CACA,SAASkwT,GAAmB5B,GACxB,OAAOA,EAAKL,cAChB,CAmMA,SAASkC,GAAgC7B,EAAM7vM,EAAOokM,GAGlD,IAAI7iT,EAEAA,EAD8B,UAA9Bw7R,GAAa/8K,EAAM+gL,OACVumB,GAAgCuI,EAAKY,cAAezwM,EAAOokM,GAG3DkD,GAAgCuI,EAAKc,gBAAiB3wM,EAAOokM,GAE1EmK,GAA4BsB,EAAKN,YAAavvM,EAAM+gL,MAAOx/R,EAC/D,CACA,SAASowT,GAAc9B,GACfA,EAAKF,uBACLE,EAAKF,sBAAsBzrB,UAAU+qB,GAE7C,CAMA,SAASmC,GAAQvB,KAAS9kC,GACtB,IAAI13P,EAAS,GACTw8R,EAAKF,wBACLt8R,EAASw8R,EAAKF,sBAAsBhzU,GAAK,KAE7C2U,EAAI+hC,KAAW03P,EACnB,CA8GA,SAAS6mC,GAAmB/B,EAAMr5U,EAAMq7U,GACpC,OAAQ7H,GAA+B6F,EAAKc,gBAAiBn6U,EAAMq7U,IAC/DtkB,GAAapH,UACrB,CAUA,SAAS2rB,GAA0BjC,EAAM3gQ,EAAO2gQ,EAAKH,uBAKjD,GAHKxgQ,GACD6iQ,GAAwClC,EAAM3gQ,GAE9Cg9P,GAAah9P,GAAO,CACpB,MAAMg3D,EAAQ8rM,GAA0BnC,EAAM3gQ,IAC9C,QAAOg3D,EAAM57I,OAAS,EAAG,yCACV47I,EAAM11F,OAAO2jO,GAAuC,IAAvBA,EAAYpgR,UAmBhE,SAAkC87U,EAAMr5U,EAAM0vI,GAE1C,MAAM+rM,EAAe/rM,EAAMt3I,KAAIsjV,GACpBA,EAAIC,iBAETC,EAAcR,GAAmB/B,EAAMr5U,EAAMy7U,GACnD,IAAII,EAAaD,EACjB,MAAME,EAAaF,EAAY3jT,OAC/B,IAAK,IAAIpkC,EAAI,EAAGA,EAAI67I,EAAM57I,OAAQD,IAAK,CACnC,MAAM6nV,EAAMhsM,EAAM77I,IAClB,QAAsB,IAAf6nV,EAAIn+U,OAA0C,iEACrDm+U,EAAIn+U,OAAS,EACbm+U,EAAIK,aACJ,MAAMphS,EAAeusQ,GAAgBlnT,EAAM07U,EAAI17U,MAE/C67U,EAAaA,EAAW3oB,YAAYv4Q,EAAmC+gS,EAAIM,yBAC/E,CACA,MAAMC,EAAaJ,EAAW3lU,KAAI,GAC5BgmU,EAAal8U,EAEnBq5U,EAAKhZ,QAAQ18I,IAAIu4J,EAAW9nV,WAAY6nV,GAAa1+U,IACjDq9U,GAAQvB,EAAM,2BAA4B,CACtCr5U,KAAMk8U,EAAW9nV,WACjBmJ,WAEJ,IAAIwtB,EAAS,GACb,GAAe,OAAXxtB,EAAiB,CAIjB,MAAMgrB,EAAY,GAClB,IAAK,IAAI10B,EAAI,EAAGA,EAAI67I,EAAM57I,OAAQD,IAC9B67I,EAAM77I,GAAG0J,OAAS,EAClBwtB,EAASA,EAAO1U,OAAOs6T,GAAqB0I,EAAKc,gBAAiBzqM,EAAM77I,GAAG8nV,iBACvEjsM,EAAM77I,GAAG8wT,YAGTp8R,EAAU5yB,MAAK,IAAM+5I,EAAM77I,GAAG8wT,WAAW,MAAM,EAAMj1K,EAAM77I,GAAGsoV,iCAElEzsM,EAAM77I,GAAGuoV,YAGbb,GAAwClC,EAAM7D,GAAY6D,EAAKH,sBAAuBl5U,IAEtFs7U,GAA0BjC,EAAMA,EAAKH,uBACrChB,GAAoCmB,EAAKN,YAAa/4U,EAAM+qB,GAE5D,IAAK,IAAIl3B,EAAI,EAAGA,EAAI00B,EAAUz0B,OAAQD,IAClCsiT,EAAe5tR,EAAU10B,GAEjC,KACK,CAED,GAAe,cAAX0J,EACA,IAAK,IAAI1J,EAAI,EAAGA,EAAI67I,EAAM57I,OAAQD,IACN,IAApB67I,EAAM77I,GAAG0J,OACTmyI,EAAM77I,GAAG0J,OAAS,EAGlBmyI,EAAM77I,GAAG0J,OAAS,MAIzB,CACDyqB,EAAK,kBAAoBk0T,EAAW9nV,WAAa,YAAcmJ,GAC/D,IAAK,IAAI1J,EAAI,EAAGA,EAAI67I,EAAM57I,OAAQD,IAC9B67I,EAAM77I,GAAG0J,OAAS,EAClBmyI,EAAM77I,GAAG6hD,YAAcn4C,CAE/B,CACAo9U,GAAsBtB,EAAMr5U,EAChC,IACD87U,EACP,CAzFYO,CAAyBhD,EAAMnD,GAAYx9P,GAAOg3D,EAE1D,MACSmmM,GAAgBn9P,IACrBo9P,GAAiBp9P,GAAMq6O,IACnBuoB,GAA0BjC,EAAMtmB,EAAU,GAGtD,CA6FA,SAAS4nB,GAAsBtB,EAAMlB,GACjC,MAAMmE,EAA0BC,GAA+BlD,EAAMlB,GAC/Dn4U,EAAOk2U,GAAYoG,GAGzB,OASJ,SAAmCjD,EAAM3pM,EAAO1vI,GAC5C,GAAqB,IAAjB0vI,EAAM57I,OACN,OAKJ,MAAMy0B,EAAY,GAClB,IAAIwC,EAAS,GAEb,MAAMyxT,EAAc9sM,EAAMpxH,QAAO4sB,GACT,IAAbA,EAAE3tC,SAEPk+U,EAAee,EAAYpkV,KAAI8yC,GAC1BA,EAAEywS,iBAEb,IAAK,IAAI9nV,EAAI,EAAGA,EAAI67I,EAAM57I,OAAQD,IAAK,CACnC,MAAM8pR,EAAcjuI,EAAM77I,GACpB8mD,EAAeusQ,GAAgBlnT,EAAM29Q,EAAY39Q,MACvD,IAA8B01C,EAA1B+mS,GAAmB,EAEvB,IADA,QAAwB,OAAjB9hS,EAAuB,iEACH,IAAvBgjO,EAAYpgR,OACZk/U,GAAmB,EACnB/mS,EAAcioO,EAAYjoO,YAC1B3qB,EAASA,EAAO1U,OAAOs6T,GAAqB0I,EAAKc,gBAAiBx8D,EAAYg+D,gBAAgB,SAE7F,GAA2B,IAAvBh+D,EAAYpgR,OACjB,GAAIogR,EAAYo+D,YAAcrD,GAC1B+D,GAAmB,EACnB/mS,EAAc,WACd3qB,EAASA,EAAO1U,OAAOs6T,GAAqB0I,EAAKc,gBAAiBx8D,EAAYg+D,gBAAgB,QAE7F,CAED,MAAMe,EAActB,GAAmB/B,EAAM17D,EAAY39Q,KAAMy7U,GAC/D99D,EAAYg/D,qBAAuBD,EACnC,MAAMx3J,EAAUx1C,EAAM77I,GAAGy0C,OAAOo0S,EAAYxmU,OAC5C,QAAgBhD,IAAZgyK,EAAuB,CACvB0xJ,GAAqB,qCAAsC1xJ,EAASy4F,EAAY39Q,MAChF,IAAI48U,EAAclkB,GAAaxzI,GACgB,kBAAZA,GACpB,MAAXA,IACA,QAASA,EAAS,eAGlB03J,EAAcA,EAAYpqB,eAAekqB,EAAY1qB,gBAEzD,MAAM6qB,EAAal/D,EAAYg+D,eACzBhH,EAAe0F,GAAyBhB,GACxCyD,EAAkB5H,GAA6B0H,EAAaF,EAAa/H,GAC/Eh3D,EAAYq+D,yBAA2BY,EACvCj/D,EAAYw+D,8BAAgCW,EAC5Cn/D,EAAYg+D,eAAiBV,GAAmB5B,GAEhDoC,EAAajhP,OAAOihP,EAAa/lV,QAAQmnV,GAAa,GACtD9xT,EAASA,EAAO1U,OAAOk6T,GAA2B8I,EAAKc,gBAAiBx8D,EAAY39Q,KAAM88U,EAAiBn/D,EAAYg+D,eAAgBh+D,EAAYo/D,eACnJhyT,EAASA,EAAO1U,OAAOs6T,GAAqB0I,EAAKc,gBAAiB0C,GAAY,GAClF,MAEIJ,GAAmB,EACnB/mS,EAAc,SACd3qB,EAASA,EAAO1U,OAAOs6T,GAAqB0I,EAAKc,gBAAiBx8D,EAAYg+D,gBAAgB,GAEtG,CAEJzD,GAAoCmB,EAAKN,YAAa/4U,EAAM+qB,GAC5DA,EAAS,GACL0xT,IAEA/sM,EAAM77I,GAAG0J,OAAS,EAIP6+U,EAER1sM,EAAM77I,GAAGuoV,UADRxzT,WAAWwzT,EAAWnyT,KAAKq2B,MAAM,IAEjCovF,EAAM77I,GAAG8wT,aACW,WAAhBjvQ,EACAntB,EAAU5yB,MAAK,IAAM+5I,EAAM77I,GAAG8wT,WAAW,MAAM,EAAOj1K,EAAM77I,GAAG8oV,wBAG/Dp0T,EAAU5yB,MAAK,IAAM+5I,EAAM77I,GAAG8wT,WAAW,IAAI3mS,MAAM03B,IAAc,EAAO,SAIxF,CAZQ,IAAW0mS,EAcnBb,GAAwClC,EAAMA,EAAKH,uBAEnD,IAAK,IAAIrlV,EAAI,EAAGA,EAAI00B,EAAUz0B,OAAQD,IAClCsiT,EAAe5tR,EAAU10B,IAG7BynV,GAA0BjC,EAAMA,EAAKH,sBACzC,CAxGI8D,CAA0B3D,EADZmC,GAA0BnC,EAAMiD,GACPt8U,GAChCA,CACX,CA+GA,SAASu8U,GAA+BlD,EAAMr5U,GAC1C,IAAI0tB,EAGAuvT,EAAkB5D,EAAKH,sBAE3B,IADAxrT,EAAQ64R,GAAavmT,GACJ,OAAV0tB,QAAoDxa,IAAlCwiU,GAAauH,IAClCA,EAAkBzH,GAAYyH,EAAiBvvT,GAE/CA,EAAQ64R,GADRvmT,EAAOymT,GAAazmT,IAGxB,OAAOi9U,CACX,CAQA,SAASzB,GAA0BnC,EAAM4D,GAErC,MAAMC,EAAmB,GAIzB,OAHAC,GAAsC9D,EAAM4D,EAAiBC,GAE7DA,EAAiBrjS,MAAK,CAAC5kD,EAAGu3B,IAAMv3B,EAAE2f,MAAQ4X,EAAE5X,QACrCsoU,CACX,CACA,SAASC,GAAsC9D,EAAM3gQ,EAAMg3D,GACvD,MAAM0tM,EAAY1H,GAAah9P,GAC/B,GAAI0kQ,EACA,IAAK,IAAIvpV,EAAI,EAAGA,EAAIupV,EAAUtpV,OAAQD,IAClC67I,EAAM/5I,KAAKynV,EAAUvpV,IAG7BiiV,GAAiBp9P,GAAMrgF,IACnB8kV,GAAsC9D,EAAMhhV,EAAOq3I,EAAM,GAEjE,CAIA,SAAS6rM,GAAwClC,EAAM3gQ,GACnD,MAAMg3D,EAAQgmM,GAAah9P,GAC3B,GAAIg3D,EAAO,CACP,IAAIj4G,EAAK,EACT,IAAK,IAAI7pB,EAAO,EAAGA,EAAO8hI,EAAM57I,OAAQ8Z,IACT,IAAvB8hI,EAAM9hI,GAAMrQ,SACZmyI,EAAMj4G,GAAMi4G,EAAM9hI,GAClB6pB,KAGRi4G,EAAM57I,OAAS2jC,EACfk+S,GAAaj9P,EAAMg3D,EAAM57I,OAAS,EAAI47I,OAAQx8H,EAClD,CACA4iU,GAAiBp9P,GAAMq6O,IACnBwoB,GAAwClC,EAAMtmB,EAAU,GAEhE,CAQA,SAASgoB,GAAsB1B,EAAMr5U,GACjC,MAAMi6T,EAAeic,GAAYqG,GAA+BlD,EAAMr5U,IAChEi9U,EAAkBzH,GAAY6D,EAAKH,sBAAuBl5U,GAQhE,OA7wCJ,SAA6B4/T,EAAMpuR,EAAQwkS,GACvC,IAAIt9P,EAAOs9P,EAAcpW,EAAOA,EAAK9mP,OACrC,KAAgB,OAATJ,GAAe,CAClB,GAAIlnC,EAAOknC,GACP,OAAO,EAEXA,EAAOA,EAAKI,MAChB,CAEJ,CA6vCIukQ,CAAoBJ,GAAkBvkQ,IAClC4kQ,GAA4BjE,EAAM3gQ,EAAK,IAE3C4kQ,GAA4BjE,EAAM4D,GAClClH,GAAsBkH,GAAkBvkQ,IACpC4kQ,GAA4BjE,EAAM3gQ,EAAK,IAEpCuhP,CACX,CAMA,SAASqjB,GAA4BjE,EAAM3gQ,GACvC,MAAMg3D,EAAQgmM,GAAah9P,GAC3B,GAAIg3D,EAAO,CAIP,MAAMnnH,EAAY,GAGlB,IAAIwC,EAAS,GACTwyT,GAAY,EAChB,IAAK,IAAI1pV,EAAI,EAAGA,EAAI67I,EAAM57I,OAAQD,IACN,IAApB67I,EAAM77I,GAAG0J,SACgB,IAApBmyI,EAAM77I,GAAG0J,SACd,QAAOggV,IAAa1pV,EAAI,EAAG,mDAC3B0pV,EAAW1pV,EAEX67I,EAAM77I,GAAG0J,OAAS,EAClBmyI,EAAM77I,GAAG6hD,YAAc,SAGvB,QAA2B,IAApBg6F,EAAM77I,GAAG0J,OAA0C,0CAE1DmyI,EAAM77I,GAAGuoV,YACTrxT,EAASA,EAAO1U,OAAOs6T,GAAqB0I,EAAKc,gBAAiBzqM,EAAM77I,GAAG8nV,gBAAgB,IACvFjsM,EAAM77I,GAAG8wT,YACTp8R,EAAU5yB,KAAK+5I,EAAM77I,GAAG8wT,WAAW3pS,KAAK,KAAM,IAAIgD,MAAM,QAAQ,EAAO,UAIjE,IAAdu/T,EAEA5H,GAAaj9P,OAAMxlE,GAInBw8H,EAAM57I,OAASypV,EAAW,EAG9BrF,GAAoCmB,EAAKN,YAAa7C,GAAYx9P,GAAO3tD,GACzE,IAAK,IAAIl3B,EAAI,EAAGA,EAAI00B,EAAUz0B,OAAQD,IAClCsiT,EAAe5tR,EAAU10B,GAEjC,CACJ,CAuDA,MAAM2pV,GAAgB,SAAUC,EAAS7lC,GACrC,MAAMy/B,EAAYqG,GAAiBD,GAAU1jQ,EAAYs9P,EAAUt9P,UAC1C,iBAArBs9P,EAAU3wM,QACVmuK,EAAMwiC,EAAU58T,KAAV48T,8EAKJt9P,GAA2B,cAAdA,GACM,cAArBs9P,EAAU3wM,QACVmuK,EAAM,gFAELwiC,EAAU5wM,QA3rWO,qBAAX1tI,QACPA,OAAOyhB,UACPzhB,OAAOyhB,SAASyV,WACgC,IAAhDl3B,OAAOyhB,SAASyV,SAASv6B,QAAQ,WACjCsyB,EAAK,6FA0rWT,MAAM2vR,EAAqC,OAArB0/B,EAAUsG,QAAwC,QAArBtG,EAAUsG,OAC7D,MAAO,CACHplC,SAAU,IAAIb,EAAS2/B,EAAU58T,KAAM48T,EAAU5wM,OAAQ1sD,EAAW49N,EAAeC,EAC/D,GACe79N,IAAcs9P,EAAUuG,WAC3D59U,KAAM,IAAIgmT,GAAKqxB,EAAU3yB,YAEjC,EACMg5B,GAAmB,SAAUD,GAE/B,IAAIhjU,EAAO,GAAIisH,EAAS,GAAIk3M,EAAY,GAAIl5B,EAAa,GAAI3qO,EAAY,GAErE0sD,GAAS,EAAMk3M,EAAS,QAASv7S,EAAO,IAE5C,GAAuB,kBAAZq7S,EAAsB,CAE7B,IAAII,EAAWJ,EAAQ/nV,QAAQ,MAC3BmoV,GAAY,IACZF,EAASF,EAAQ3nV,UAAU,EAAG+nV,EAAW,GACzCJ,EAAUA,EAAQ3nV,UAAU+nV,EAAW,IAG3C,IAAIC,EAAWL,EAAQ/nV,QAAQ,MACb,IAAdooV,IACAA,EAAWL,EAAQ3pV,QAEvB,IAAIiqV,EAAkBN,EAAQ/nV,QAAQ,MACb,IAArBqoV,IACAA,EAAkBN,EAAQ3pV,QAE9B2mB,EAAOgjU,EAAQ3nV,UAAU,EAAGm0B,KAAKjT,IAAI8mU,EAAUC,IAC3CD,EAAWC,IAEXr5B,EArFZ,SAAoBA,GAChB,IAAIs5B,EAAoB,GACxB,MAAMn3B,EAASnC,EAAWrmS,MAAM,KAChC,IAAK,IAAIxqB,EAAI,EAAGA,EAAIgzT,EAAO/yT,OAAQD,IAC/B,GAAIgzT,EAAOhzT,GAAGC,OAAS,EAAG,CACtB,IAAImqV,EAAQp3B,EAAOhzT,GACnB,IACIoqV,EAAQ12S,mBAAmB02S,EAAMz9U,QAAQ,MAAO,KACpD,CACA,MAAO5L,GAAK,CACZopV,GAAqB,IAAMC,CAC/B,CAEJ,OAAOD,CACX,CAuEyBE,CAAWT,EAAQ3nV,UAAUgoV,EAAUC,KAExD,MAAM1f,EArEd,SAAqB8f,GACjB,MAAMlhQ,EAAU,CAAC,EACa,MAA1BkhQ,EAAYxgV,OAAO,KACnBwgV,EAAcA,EAAYroV,UAAU,IAExC,IAAK,MAAMqmD,KAAWgiS,EAAY9/T,MAAM,KAAM,CAC1C,GAAuB,IAAnB89B,EAAQroD,OACR,SAEJ,MAAMsqV,EAAKjiS,EAAQ99B,MAAM,KACP,IAAd+/T,EAAGtqV,OACHmpF,EAAQ11C,mBAAmB62S,EAAG,KAAO72S,mBAAmB62S,EAAG,IAG3Dp2T,EAAK,0BAA0Bm0B,gBAAsBgiS,KAE7D,CACA,OAAOlhQ,CACX,CAmD4BohQ,CAAYZ,EAAQ3nV,UAAUm0B,KAAKjT,IAAIymU,EAAQ3pV,OAAQiqV,KAE3EF,EAAWpjU,EAAK/kB,QAAQ,KACpBmoV,GAAY,GACZp3M,EAAoB,UAAXk3M,GAAiC,QAAXA,EAC/Bv7S,EAAOjrB,SAASsD,EAAK3kB,UAAU+nV,EAAW,GAAI,KAG9CA,EAAWpjU,EAAK3mB,OAEpB,MAAMwqV,EAAkB7jU,EAAK5c,MAAM,EAAGggV,GACtC,GAAsC,cAAlCS,EAAgBv9T,cAChB2lH,EAAS,iBAER,GAAI43M,EAAgBjgU,MAAM,KAAKvqB,QAAU,EAC1C4yI,EAAS43M,MAER,CAED,MAAMC,EAAS9jU,EAAK/kB,QAAQ,KAC5BkoV,EAAYnjU,EAAK3kB,UAAU,EAAGyoV,GAAQx9T,cACtC2lH,EAASjsH,EAAK3kB,UAAUyoV,EAAS,GAEjCxkQ,EAAY6jQ,CAChB,CAEI,OAAQvf,IACRtkP,EAAYskP,EAAgB,GAEpC,CACA,MAAO,CACH5jT,OACA2nB,OACAskG,SACAk3M,YACAn3M,SACAk3M,SACAj5B,aACA3qO,YAER,EAmBMykQ,GAAa,oEAeA,WAGf,IAAIC,EAAe,EAKnB,MAAMC,EAAgB,EAiCzB,CAzCkB,GA8DnB,MAAMC,GAOF,WAAAxiT,CAAYqoQ,EAAWopC,EAAmBgR,EAAU5b,GAChD1oT,KAAKkqR,UAAYA,EACjBlqR,KAAKszT,kBAAoBA,EACzBtzT,KAAKskU,SAAWA,EAChBtkU,KAAK0oT,SAAWA,CACpB,CACA,OAAA8U,GACI,MAAMn9U,EAAM2f,KAAKskU,SAASjkV,IAC1B,MAAuB,UAAnB2f,KAAKkqR,UACE7pS,EAAI4vT,MAGJ5vT,EAAIm+E,OAAOyxO,KAE1B,CACA,YAAAj+J,GACI,OAAOhyI,KAAKkqR,SAChB,CACA,cAAAg0C,GACI,OAAOl+T,KAAKszT,kBAAkB4K,eAAel+T,KACjD,CACA,QAAAlmB,GACI,OAAQkmB,KAAKw9T,UAAU1jV,WACnB,IACAkmB,KAAKkqR,UACL,KACA,QAAUlqR,KAAKskU,SAASC,YAChC,EAEJ,MAAMC,GACF,WAAA3iT,CAAYyxS,EAAmB5vU,EAAOgC,GAClCsa,KAAKszT,kBAAoBA,EACzBtzT,KAAKtc,MAAQA,EACbsc,KAAKta,KAAOA,CAChB,CACA,OAAA83U,GACI,OAAOx9T,KAAKta,IAChB,CACA,YAAAssJ,GACI,MAAO,QACX,CACA,cAAAksL,GACI,OAAOl+T,KAAKszT,kBAAkB4K,eAAel+T,KACjD,CACA,QAAAlmB,GACI,OAAOkmB,KAAKta,KAAK5L,WAAa,SAClC,EAyBJ,MAAM2qV,GACF,WAAA5iT,CAAY6iT,EAAkBC,GAC1B3kU,KAAK0kU,iBAAmBA,EACxB1kU,KAAK2kU,eAAiBA,CAC1B,CACA,OAAAC,CAAQC,EAAiBC,GACrB9kU,KAAK0kU,iBAAiBvqV,KAAK,KAAM0qV,EAAiBC,EACtD,CACA,QAAAC,CAASrhV,GAEL,OADA,QAAOsc,KAAKglU,kBAAmB,gEACxBhlU,KAAK2kU,eAAexqV,KAAK,KAAMuJ,EAC1C,CACA,qBAAIshV,GACA,QAAShlU,KAAK2kU,cAClB,CACA,OAAAxsU,CAAQ2uD,GACJ,OAAQ9mD,KAAK0kU,mBAAqB59Q,EAAM49Q,uBACI9rU,IAAvCoH,KAAK0kU,iBAAiBO,cACnBjlU,KAAK0kU,iBAAiBO,eAClBn+Q,EAAM49Q,iBAAiBO,cAC3BjlU,KAAK0kU,iBAAiB5lU,UAAYgoD,EAAM49Q,iBAAiB5lU,OACrE,EAgKJ,MAAMomU,GAIF,WAAArjT,CAAYuzS,EAAOnlB,EAAOM,EAAc40B,GACpCnlU,KAAKo1T,MAAQA,EACbp1T,KAAKiwS,MAAQA,EACbjwS,KAAKuwS,aAAeA,EACpBvwS,KAAKmlU,eAAiBA,CAC1B,CACA,OAAIjrV,GACA,OAAIyyT,GAAY3sS,KAAKiwS,OACV,KAGA7D,GAAYpsS,KAAKiwS,MAEhC,CACA,OAAI5vT,GACA,OAAO,IAAI+kV,GAAcplU,KAAKo1T,MAAOp1T,KAAKiwS,MAC9C,CACA,oBAAIK,GACA,MAAMn0S,EAAM+nT,GAA0BlkT,KAAKuwS,cACrC1kT,EAAKsvS,EAAkBh/R,GAC7B,MAAc,OAAPtQ,EAAc,UAAYA,CACrC,CAIA,gBAAIqkT,GACA,OAAOgU,GAA0BlkT,KAAKuwS,aAC1C,CACA,OAAAtvP,CAAQ6F,GAEJ,MADAA,GAAQ,QAAmBA,cACJo+Q,IACnB,OAAO,EAEX,MAAMG,EAAWrlU,KAAKo1T,QAAUtuQ,EAAMsuQ,MAChCkQ,EAAWt4B,GAAWhtS,KAAKiwS,MAAOnpP,EAAMmpP,OACxCs1B,EAAsBvlU,KAAKswS,mBAAqBxpP,EAAMwpP,iBAC5D,OAAO+0B,GAAYC,GAAYC,CACnC,CACA,MAAAzkU,GACI,OAAOd,KAAKlmB,UAChB,CACA,QAAAA,GACI,OAAOkmB,KAAKo1T,MAAMt7U,WA/mS1B,SAAgC4L,GAC5B,IAAI0kT,EAAa,GACjB,IAAK,IAAI7wT,EAAImM,EAAKqmT,UAAWxyT,EAAImM,EAAKmmT,QAAQryT,OAAQD,IAC1B,KAApBmM,EAAKmmT,QAAQtyT,KACb6wT,GAAc,IAAMx0R,mBAAmB/S,OAAOnd,EAAKmmT,QAAQtyT,MAGnE,OAAO6wT,GAAc,GACzB,CAumSuCo7B,CAAuBxlU,KAAKiwS,MAC/D,EA+EJ,MAAMm1B,WAAsBF,GAExB,WAAArjT,CAAYk9S,EAAMr5U,GACd0gC,MAAM24S,EAAMr5U,EAAM,IAAIu9T,IAAe,EACzC,CACA,UAAIzkP,GACA,MAAMt+B,EAAaosQ,GAAWtsS,KAAKiwS,OACnC,OAAsB,OAAf/vQ,EACD,KACA,IAAIklS,GAAcplU,KAAKo1T,MAAOl1R,EACxC,CACA,QAAIj/B,GACA,IAAI5gB,EAAM2f,KACV,KAAsB,OAAf3f,EAAIm+E,QACPn+E,EAAMA,EAAIm+E,OAEd,OAAOn+E,CACX,EAgBJ,MAAMolV,GAOF,WAAA5jT,CAAY6jT,EAIZrlV,EAAKslV,GACD3lU,KAAK0lU,MAAQA,EACb1lU,KAAK3f,IAAMA,EACX2f,KAAK2lU,OAASA,CAClB,CASA,YAAI56Q,GAEA,OAAO/qD,KAAK0lU,MAAMhuB,cAAc97S,KACpC,CAUA,OAAI1hB,GACA,OAAO8lB,KAAK3f,IAAInG,GACpB,CAEA,QAAIiI,GACA,OAAO6d,KAAK0lU,MAAM7sB,aACtB,CAaA,KAAA96T,CAAM2H,GACF,MAAMgkU,EAAY,IAAIhe,GAAKhmT,GACrBkgV,EAAW7nV,GAAMiiB,KAAK3f,IAAKqF,GACjC,OAAO,IAAI+/U,GAAazlU,KAAK0lU,MAAMptB,SAASoR,GAAYkc,EAAUhsB,GACtE,CAKA,MAAAisB,GACI,OAAQ7lU,KAAK0lU,MAAMz5S,SACvB,CAWA,SAAAs4S,GACI,OAAOvkU,KAAK0lU,MAAM9pU,KAAI,EAC1B,CAmBA,OAAAhZ,CAAQs0C,GACJ,GAAIl3B,KAAK0lU,MAAMjuB,aACX,OAAO,EAIX,QAFqBz3S,KAAK0lU,MAEJ5sB,aAAa94S,KAAK2lU,QAAQ,CAACzrV,EAAKkkF,IAC3ClnC,EAAO,IAAIuuS,GAAarnQ,EAAMrgF,GAAMiiB,KAAK3f,IAAKnG,GAAM0/T,MAEnE,CAQA,QAAArB,CAAS7yT,GACL,MAAMgkU,EAAY,IAAIhe,GAAKhmT,GAC3B,OAAQsa,KAAK0lU,MAAMptB,SAASoR,GAAWz9R,SAC3C,CAaA,WAAA8yC,GACI,OAAI/+D,KAAK0lU,MAAMjuB,eAIHz3S,KAAK0lU,MAAMz5S,SAE3B,CAIA,MAAAnrB,GACI,OAAOd,KAAKukU,WAChB,CAaA,GAAA3oU,GACI,OAAOoE,KAAK0lU,MAAM9pU,KACtB,EAgBJ,SAASvb,GAAImuM,EAAI9oM,GAGb,OAFA8oM,GAAK,QAAmBA,IACrBs3I,iBAAiB,YACJltU,IAATlT,EAAqB3H,GAAMywM,EAAGu3I,MAAOrgV,GAAQ8oM,EAAGu3I,KAC3D,CA8CA,SAAShoV,GAAMygF,EAAQ94E,GAQnB,OANmC,OAA/BumT,IADJztO,GAAS,QAAmBA,IACJyxO,OACpB4sB,GAAuB,QAAS,OAAQn3U,GAAM,GAG9Ci3U,GAAmB,QAAS,OAAQj3U,GAAM,GAEvC,IAAI0/U,GAAc5mQ,EAAO42P,MAAO5oB,GAAUhuO,EAAOyxO,MAAOvqT,GACnE,CA8NA,MAAMsgV,GACF,WAAAnkT,CAAYokT,GACRjmU,KAAKimU,gBAAkBA,CAC3B,CACA,UAAApd,CAAW3+B,GACP,MAAqB,UAAdA,CACX,CACA,WAAAnlN,CAAYsjP,EAAQn5L,GAChB,MAAMxtI,EAAQwtI,EAAMqhL,aAAatyQ,WACjC,OAAO,IAAIomS,GAAU,QAASrkU,KAAM,IAAIylU,GAAapd,EAAOlJ,aAAc,IAAIimB,GAAcl2M,EAAMkmM,MAAOlmM,EAAM+gL,OAAQvuT,GAC3H,CACA,cAAAw8U,CAAehzB,GACX,MAAiC,WAA7BA,EAAUl5J,eACH,IAAMhyI,KAAKimU,gBAAgBlB,SAAS75B,EAAUxnT,OAG9C,IAAMsc,KAAKimU,gBAAgBrB,QAAQ15B,EAAUo5B,SAAU,KAEtE,CACA,iBAAA5Q,CAAkBhwU,EAAOgC,GACrB,OAAIsa,KAAKimU,gBAAgBjB,kBACd,IAAIR,GAAYxkU,KAAMtc,EAAOgC,GAG7B,IAEf,CACA,OAAAyS,CAAQ2uD,GACJ,OAAMA,aAAiBk/Q,MAGbl/Q,EAAMm/Q,kBAAoBjmU,KAAKimU,iBAK9Bn/Q,EAAMm/Q,gBAAgB9tU,QAAQ6H,KAAKimU,iBAElD,CACA,cAAArS,GACI,OAAgC,OAAzB5zT,KAAKimU,eAChB,EAKJ,MAAMC,GACF,WAAArkT,CAAYqoQ,EAAW+7C,GACnBjmU,KAAKkqR,UAAYA,EACjBlqR,KAAKimU,gBAAkBA,CAC3B,CACA,UAAApd,CAAW3+B,GACP,IAAIi8C,EAA6B,mBAAdj8C,EAAiC,cAAgBA,EAGpE,OAFAi8C,EACqB,qBAAjBA,EAAsC,gBAAkBA,EACrDnmU,KAAKkqR,YAAci8C,CAC9B,CACA,iBAAAzS,CAAkBhwU,EAAOgC,GACrB,OAAIsa,KAAKimU,gBAAgBjB,kBACd,IAAIR,GAAYxkU,KAAMtc,EAAOgC,GAG7B,IAEf,CACA,WAAAq/E,CAAYsjP,EAAQn5L,IAChB,QAA2B,MAApBm5L,EAAOhQ,UAAmB,yCACjC,MAAMutB,EAAW7nV,GAAM,IAAIqnV,GAAcl2M,EAAMkmM,MAAOlmM,EAAM+gL,OAAQoY,EAAOhQ,WACrE32T,EAAQwtI,EAAMqhL,aAAatyQ,WACjC,OAAO,IAAIomS,GAAUhc,EAAOrqU,KAAMgiB,KAAM,IAAIylU,GAAapd,EAAOlJ,aAAcymB,EAAUlkV,GAAQ2mU,EAAOK,SAC3G,CACA,cAAAwV,CAAehzB,GACX,MAAiC,WAA7BA,EAAUl5J,eACH,IAAMhyI,KAAKimU,gBAAgBlB,SAAS75B,EAAUxnT,OAG9C,IAAMsc,KAAKimU,gBAAgBrB,QAAQ15B,EAAUo5B,SAAUp5B,EAAUwd,SAEhF,CACA,OAAAvwT,CAAQ2uD,GACJ,OAAIA,aAAiBo/Q,KACTlmU,KAAKkqR,YAAcpjO,EAAMojO,aAC3BlqR,KAAKimU,kBACFn/Q,EAAMm/Q,iBACPjmU,KAAKimU,gBAAgB9tU,QAAQ2uD,EAAMm/Q,kBAGnD,CACA,cAAArS,GACI,QAAS5zT,KAAKimU,eAClB,EAEJ,SAAS5mV,GAAiB6vI,EAAOg7J,EAAW/hQ,EAAUi+S,EAA+B7lV,GACjF,IAAIokV,EAQJ,GAP6C,kBAAlCyB,IACPzB,OAAiB/rU,EACjBrY,EAAU6lV,GAE+B,oBAAlCA,IACPzB,EAAiByB,GAEjB7lV,GAAWA,EAAQ8lV,SAAU,CAC7B,MAAMpB,EAAe98S,EACfm+S,EAAe,CAACC,EAAczB,KAChClE,GAAgC1xM,EAAMkmM,MAAOlmM,EAAOl0I,GACpDiqV,EAAasB,EAAczB,EAAkB,EAEjDwB,EAAarB,aAAe98S,EAAS88S,aACrCqB,EAAaxnU,QAAUqpB,EAASrpB,QAChCqpB,EAAWm+S,CACf,CACA,MAAML,EAAkB,IAAIxB,GAAgBt8S,EAAUw8S,QAAkB/rU,GAClE5d,EAA0B,UAAdkvS,EACZ,IAAI87C,GAAuBC,GAC3B,IAAIC,GAAuBh8C,EAAW+7C,GAE5C,OArtDJ,SAAsClH,EAAM7vM,EAAOokM,GAC/C,IAAI7iT,EAEAA,EAD8B,UAA9Bw7R,GAAa/8K,EAAM+gL,OACVuoB,GAA6BuG,EAAKY,cAAezwM,EAAOokM,GAGxDkF,GAA6BuG,EAAKc,gBAAiB3wM,EAAOokM,GAEvEmK,GAA4BsB,EAAKN,YAAavvM,EAAM+gL,MAAOx/R,EAC/D,CA2sDI+1T,CAA6Bt3M,EAAMkmM,MAAOlmM,EAAOl0I,GAC1C,IAAM4lV,GAAgC1xM,EAAMkmM,MAAOlmM,EAAOl0I,EACrE,CACA,SAAS4pV,GAAQ11M,EAAO/mG,EAAUi+S,EAA+B7lV,GAC7D,OAAOlB,GAAiB6vI,EAAO,QAAS/mG,EAAUi+S,EAA+B7lV,EACrF,CAoCA,SAAS+zJ,GAAIplB,EAAOg7J,EAAW/hQ,GAC3B,IAAIntC,EAAY,KAChB,MAAMyrV,EAAct+S,EAAW,IAAIs8S,GAAgBt8S,GAAY,KAC7C,UAAd+hQ,EACAlvS,EAAY,IAAIgrV,GAAuBS,GAElCv8C,IACLlvS,EAAY,IAAIkrV,GAAuBh8C,EAAWu8C,IAEtD7F,GAAgC1xM,EAAMkmM,MAAOlmM,EAAOl0I,EACxD,EApnHA,SAA0C4gB,IACtC,SAAQs4T,GAAwB,mDAChCA,GAAyBt4T,CAC7B,CAujIA8qU,CAAiCtB,IA/3HjC,SAAyCxpU,IACrC,SAAQu4T,GAAsB,mDAC9BA,GAAuBv4T,CAC3B,CA63HA+qU,CAAgCvB,IA0BhC,MAAMwB,GAAsC,kCAItCC,GAAQ,CAAC,EAIf,IAAIC,IAAgB,EAgBpB,SAASC,GAA2B78T,EAAK88T,EAAc7qC,EAAkBpnR,EAAKuoR,GAC1E,IAAI2pC,EAAQlyT,GAAO7K,EAAI3pB,QAAQ2mV,iBACjBtuU,IAAVquU,IACK/8T,EAAI3pB,QAAQgoC,WACbgyQ,EAAM,kHAGV/5R,EAAI,kCAAmC0J,EAAI3pB,QAAQgoC,WACnD0+S,EAAQ,GAAG/8T,EAAI3pB,QAAQgoC,yCAE3B,IAEI4+S,EACAC,EAHArK,EAAYmG,GAAc+D,EAAO3pC,GACjCW,EAAW8+B,EAAU9+B,SAGF,qBAAZj3Q,SAA2BA,QAAQjY,MAC1Cq4T,EAAiBpgT,QAAQjY,IAAI63T,KAE7BQ,GACAD,GAAa,EACbF,EAAQ,UAAUG,QAAqBnpC,EAASx+N,YAChDs9P,EAAYmG,GAAc+D,EAAO3pC,GACjCW,EAAW8+B,EAAU9+B,UAGrBkpC,GAAcpK,EAAU9+B,SAAS9xK,OAErC,MAAMk7M,EAAoB/pC,GAAa6pC,EACjC,IAAItqC,EAAsBA,EAAsBC,OAChD,IAAIN,EAA0BtyR,EAAItlB,KAAMslB,EAAI3pB,QAASymV,GAC3DlK,GAAY,gCAAiCC,GACxCpwB,GAAYowB,EAAUr3U,OACvB60S,EAAM,4FAGV,MAAMwkC,EAuBV,SAA+B9gC,EAAU/zR,EAAKm9T,EAAmBlrC,GAC7D,IAAImrC,EAAWT,GAAM38T,EAAItlB,MACpB0iV,IACDA,EAAW,CAAC,EACZT,GAAM38T,EAAItlB,MAAQ0iV,GAEtB,IAAIvI,EAAOuI,EAASrpC,EAASF,eACzBghC,GACAxkC,EAAM,2HAIV,OAFAwkC,EAAO,IAAIV,GAAKpgC,EAAU6oC,GAAeO,EAAmBlrC,GAC5DmrC,EAASrpC,EAASF,eAAiBghC,EAC5BA,CACX,CApCiBwI,CAAsBtpC,EAAU/zR,EAAKm9T,EAAmB,IAAIprC,EAAsB/xR,EAAItlB,KAAMu3S,IACzG,OAAO,IAAIqrC,GAASzI,EAAM70T,EAC9B,CA4CA,MAAMs9T,GAEF,WAAA3lT,CAAY4lT,EAEZv9T,GACIlK,KAAKynU,cAAgBA,EACrBznU,KAAKkK,IAAMA,EAEXlK,KAAW,KAAI,WAEfA,KAAK0nU,kBAAmB,CAC5B,CACA,SAAItS,GAKA,OAJKp1T,KAAK0nU,mBACN5I,GAAU9+T,KAAKynU,cAAeznU,KAAKkK,IAAI3pB,QAAQqkO,MAAO5kN,KAAKkK,IAAI3pB,QAAsC,8BACrGyf,KAAK0nU,kBAAmB,GAErB1nU,KAAKynU,aAChB,CACA,SAAI1B,GAIA,OAHK/lU,KAAK2nU,gBACN3nU,KAAK2nU,cAAgB,IAAIvC,GAAcplU,KAAKo1T,MAAOppB,OAEhDhsS,KAAK2nU,aAChB,CACA,OAAAjhE,GAMI,OAL2B,OAAvB1mQ,KAAK2nU,iBAjEjB,SAA+B5I,EAAMnyP,GACjC,MAAM06P,EAAWT,GAAMj6P,GAElB06P,GAAYA,EAASvI,EAAK7kV,OAAS6kV,GACpCxkC,EAAM,YAAY3tN,KAAWmyP,EAAKj4B,wCAEtC+5B,GAAc9B,UACPuI,EAASvI,EAAK7kV,IACzB,CA0DY0tV,CAAsB5nU,KAAKo1T,MAAOp1T,KAAKkK,IAAItlB,MAC3Cob,KAAKynU,cAAgB,KACrBznU,KAAK2nU,cAAgB,MAElBxoT,QAAQC,SACnB,CACA,gBAAA0mT,CAAiB+B,GACc,OAAvB7nU,KAAK2nU,eACLptC,EAAM,eAAiBstC,EAAU,0BAEzC,EAiCJ,SAASC,GAAY59T,GAAM,UAAU6K,GACjC,MAAMy5K,GAAK,QAAatkL,EAAK,YAAYm0P,aAAa,CAClDp6G,WAAYlvI,IAEhB,IAAKy5K,EAAGk5I,iBAAkB,CACtB,MAAMz8D,GAAW,QAAkC,YAC/CA,GAiBZ,SAAiCz8E,EAAIruL,EAAM2nB,EAAMvnC,EAAU,CAAC,GACxDiuM,GAAK,QAAmBA,GACxBA,EAAGs3I,iBAAiB,eAChBt3I,EAAGk5I,kBACHntC,EAAM,0EAEV,MAAMwkC,EAAOvwI,EAAGi5I,cAChB,IAAIM,EACJ,GAAIhJ,EAAKj4B,UAAUxJ,UACX/8S,EAAQynV,eACRztC,EAAM,sJAEVwtC,EAAgB,IAAIlrC,EAAsBA,EAAsBC,YAE/D,GAAIv8S,EAAQynV,cAAe,CAC5B,MAAM1/S,EAAyC,kBAA1B/nC,EAAQynV,cACvBznV,EAAQynV,eACR,QAAoBznV,EAAQynV,cAAex5I,EAAGtkL,IAAI3pB,QAAQgoC,WAChEw/S,EAAgB,IAAIlrC,EAAsBv0Q,EAC9C,EA5MJ,SAA0Cy2S,EAAM5+T,EAAM2nB,EAAMigT,GACxDhJ,EAAKj4B,UAAY,IAAI1J,EAAS,GAAGj9R,KAAQ2nB,KAC3B,EAAOi3S,EAAKj4B,UAAUrnO,UAAWs/P,EAAKj4B,UAAUzJ,cAAe0hC,EAAKj4B,UAAUxJ,UAAWyhC,EAAKj4B,UAAUvJ,eAAgBwhC,EAAKj4B,UAAUtJ,+BAChI,GACjBuqC,IACAhJ,EAAK7wB,mBAAqB65B,EAElC,CAuMIE,CAAiClJ,EAAM5+T,EAAM2nB,EAAMigT,EACvD,CAtCYG,CAAwB15I,KAAOy8E,EAEvC,CACA,OAAOz8E,CACX,CA4QAs/G,GAAqB9zT,UAAUmuV,aAAe,SAAU/9B,EAAYC,GAChErqS,KAAKu1H,YAAY,IAAK,CAAEj2H,EAAG8qS,GAAcC,EAC7C,EAEAyD,GAAqB9zT,UAAUouV,KAAO,SAAUx+U,EAAMy+U,GAClDroU,KAAKu1H,YAAY,OAAQ,CAAEz6I,EAAG8O,GAAQy+U,EAC1C,EAjLA,IAA0B/gU,GACtByxR,EAAc,OACd,QAAmB,IAAI,KAAU,YAAY,CAAC/9S,GAAaykR,mBAAoB1qP,KAIpEgyT,GAHK/rV,EAAUskR,YAAY,OAAOjB,eACpBrjR,EAAUskR,YAAY,iBAClBtkR,EAAUskR,YAAY,sBACwBvqP,IACxE,UAAqC0wP,sBAAqB,KAC7D,QAAgB,EAAMxyP,EAAS3L,KAE/B,QAAgB,EAAM2L,EAAS,0MC17anC,MAAM,EAAO,0BACPA,EAAU,SAkBVq1T,EAAqB,IACrBC,EAAkB,KAAKt1T,IACvBu1T,EAAwB,SACxBC,EAAwB,kDACxBC,EAA0B,KAoB1BC,EAAwB,CAC1B,4BAAyE,kDACzE,iBAAmD,2CACnD,yBAAmE,mCACnE,iBAAmD,6FACnD,cAA6C,kDAC7C,8BAA6E,4EAE3E3oE,EAAgB,IAAI,KA3BV,gBACK,gBA0ByC2oE,GAE9D,SAASC,EAAcllV,GACnB,OAAQA,aAAiB,MACrBA,EAAM0oB,KAAKnyB,SAAS,iBAC5B,CAkBA,SAAS4uV,GAAyB,UAAEtgT,IAChC,MAAO,GAAGkgT,cAAkClgT,iBAChD,CACA,SAASugT,EAAiCtqT,GACtC,MAAO,CACH8J,MAAO9J,EAAS8J,MAChB6R,cAAe,EACfs3O,WAuCmCs3D,EAvCUvqT,EAASizP,UAyCnD7uQ,OAAOmmU,EAAkB7iV,QAAQ,IAAK,SAxCzC8pR,aAAc9mR,KAAKD,OAsC3B,IAA2C8/U,CApC3C,CACAtjM,eAAeujM,EAAqBC,EAAazqT,GAC7C,MACM0oI,SADqB1oI,EAASiuP,QACL/oR,MAC/B,OAAOs8Q,EAAcpzP,OAAO,iBAAiD,CACzEq8T,cACAC,WAAYhiL,EAAU96I,KACtB+8T,cAAejiL,EAAUr+J,QACzBugV,aAAcliL,EAAUjkK,QAEhC,CACA,SAASomV,GAAW,OAAE/rU,IAClB,OAAO,IAAIguQ,QAAQ,CACf,eAAgB,mBAChBg+D,OAAQ,mBACR,iBAAkBhsU,GAE1B,CACA,SAASisU,EAAmBC,GAAW,aAAEn4D,IACrC,MAAMr6I,EAAUqyM,EAAWG,GAE3B,OADAxyM,EAAQmF,OAAO,gBAoBnB,SAAgCk1I,GAC5B,MAAO,GAAGm3D,KAAyBn3D,GACvC,CAtBoCo4D,CAAuBp4D,IAChDr6I,CACX,CAMAyO,eAAeikM,EAAmBhuU,GAC9B,MAAM7d,QAAe6d,IACrB,OAAI7d,EAAOoF,QAAU,KAAOpF,EAAOoF,OAAS,IAEjCyY,IAEJ7d,CACX,CAkFA,SAAS8rV,EAAM95N,GACX,OAAO,IAAI1wF,SAAQC,IACf9Q,WAAW8Q,EAASywF,EAAG,GAE/B,CAuCA,MAAM+5N,EAAoB,oBACpBC,EAAc,GAKpB,SAASC,IACL,IAGI,MAAMC,EAAe,IAAI/8O,WAAW,KACrBh+E,KAAK60I,QAAU70I,KAAK4sP,UAC5B13G,gBAAgB6lL,GAEvBA,EAAa,GAAK,IAAcA,EAAa,GAAK,GAClD,MAAMC,EASd,SAAgBD,GACZ,MAAME,GA9CqBznS,EA8CaunS,EA7C5BxkT,KAAK1iB,OAAO+iB,gBAAgB4c,IAC7Bt8C,QAAQ,MAAO,KAAKA,QAAQ,MAAO,MAFlD,IAA+Bs8C,EAiD3B,OAAOynS,EAAUn7T,OAAO,EAAG,GAC/B,CAdoB2rI,CAAOsvL,GACnB,OAAOH,EAAkBxqU,KAAK4qU,GAAOA,EAAMH,CAC/C,CACA,MAAOriT,GAEH,OAAOqiT,CACX,CACJ,CA0BA,SAASjmL,EAAO4lL,GACZ,MAAO,GAAGA,EAAU58P,WAAW48P,EAAU5kH,OAC7C,CAkBA,MAAMslH,EAAqB,IAAIv5S,IAK/B,SAASw5S,EAAWX,EAAWQ,GAC3B,MAAM9vV,EAAM0pK,EAAO4lL,GACnBY,EAAuBlwV,EAAK8vV,GAqChC,SAA4B9vV,EAAK8vV,GAC7B,MAAMnvK,EAAUwvK,IACZxvK,GACAA,EAAQ7S,YAAY,CAAE9tK,MAAK8vV,QAE/BM,GACJ,CA1CIC,CAAmBrwV,EAAK8vV,EAC5B,CA0BA,SAASI,EAAuBlwV,EAAK8vV,GACjC,MAAM/7T,EAAYi8T,EAAmBphU,IAAI5uB,GACzC,GAAK+zB,EAGL,IAAK,MAAMka,KAAYla,EACnBka,EAAS6hT,EAEjB,CAQA,IAAIQ,EAAmB,KAEvB,SAASH,IAOL,OANKG,GAAoB,qBAAsBx7T,OAC3Cw7T,EAAmB,IAAIC,iBAAiB,yBACxCD,EAAiBhiL,UAAYluK,IACzB8vV,EAAuB9vV,EAAEsP,KAAK1P,IAAKI,EAAEsP,KAAKogV,IAAI,GAG/CQ,CACX,CACA,SAASF,IAC2B,IAA5BJ,EAAmB/nV,MAAcqoV,IACjCA,EAAiBvyU,QACjBuyU,EAAmB,KAE3B,CAkBA,MAAME,EAAgB,kCAChBC,EAAmB,EACnBC,EAAoB,+BAC1B,IAAI/nE,EAAY,KAChB,SAASC,IAgBL,OAfKD,IACDA,GAAY,QAAO6nE,EAAeC,EAAkB,CAChDnrM,QAAS,CAACgvD,EAAIu0E,KAMV,GACS,IADDA,EAEAv0E,EAAGw0E,kBAAkB4nE,EAC7B,KAIL/nE,CACX,CAEAp9H,eAAeh1G,EAAI+4S,EAAWpvV,GAC1B,MAAMF,EAAM0pK,EAAO4lL,GAEbpmE,SADWN,KACHO,YAAYunE,EAAmB,aACvCtnE,EAAcF,EAAGE,YAAYsnE,GAC7B7hD,QAAkBzlB,EAAYx6P,IAAI5uB,GAMxC,aALMopR,EAAYj6F,IAAIjvL,EAAOF,SACvBkpR,EAAGpuO,KACJ+zP,GAAYA,EAASihD,MAAQ5vV,EAAM4vV,KACpCG,EAAWX,EAAWpvV,EAAM4vV,KAEzB5vV,CACX,CAEAqrJ,eAAe7lB,EAAO4pN,GAClB,MAAMtvV,EAAM0pK,EAAO4lL,GAEbpmE,SADWN,KACHO,YAAYunE,EAAmB,mBACvCxnE,EAAGE,YAAYsnE,GAAmBx5S,OAAOl3C,SACzCkpR,EAAGpuO,IACb,CAOAywG,eAAez3G,EAAOw7S,EAAWqB,GAC7B,MAAM3wV,EAAM0pK,EAAO4lL,GAEbpmE,SADWN,KACHO,YAAYunE,EAAmB,aACvC3rK,EAAQmkG,EAAGE,YAAYsnE,GACvB7hD,QAAkB9pH,EAAMn2J,IAAI5uB,GAC5BomF,EAAWuqQ,EAAS9hD,GAW1B,YAViBnwR,IAAb0nE,QACM2+F,EAAM7tI,OAAOl3C,SAGb+kL,EAAMoK,IAAI/oG,EAAUpmF,SAExBkpR,EAAGpuO,MACLsrC,GAAcyoN,GAAYA,EAASihD,MAAQ1pQ,EAAS0pQ,KACpDG,EAAWX,EAAWlpQ,EAAS0pQ,KAE5B1pQ,CACX,CAsBAmlE,eAAeqlM,EAAqBC,GAChC,IAAIC,EACJ,MAAMC,QAA0Bj9S,EAAO+8S,EAAcvB,WAAW0B,IAC5D,MAAMD,EAkBd,SAAyCC,GACrC,MAAMt/O,EAAQs/O,GAAY,CACtBlB,IAAKF,IACLqB,mBAAoB,GAExB,OAAOC,EAAqBx/O,EAChC,CAxBkCy/O,CAAgCH,GACpDI,EA+Bd,SAAwCP,EAAeE,GACnD,GAA6C,IAAzCA,EAAkBE,mBAA0D,CAC5E,IAAKh8T,UAAU47P,OAAQ,CAGnB,MAAO,CACHkgE,oBACAD,oBAHiC7rT,QAAQE,OAAO2gP,EAAcpzP,OAAO,gBAK7E,CAEA,MAAM2+T,EAAkB,CACpBvB,IAAKiB,EAAkBjB,IACvBmB,mBAAoB,EACpBK,iBAAkBtiV,KAAKD,OAErB+hV,EAcdvlM,eAAoCslM,EAAeE,GAC/C,IACI,MAAMQ,QA1ZdhmM,gBAAyC,UAAE+jM,EAAS,yBAAEjwD,IAA4B,IAAEywD,IAChF,MAAMx0T,EAAWqzT,EAAyBW,GACpCxyM,EAAUqyM,EAAWG,GAErBkC,EAAmBnyD,EAAyBlb,aAAa,CAC3D37N,UAAU,IAEd,GAAIgpS,EAAkB,CAClB,MAAMntD,QAAyBmtD,EAAiBtnE,sBAC5Cma,GACAvnJ,EAAQmF,OAAO,oBAAqBoiJ,EAE5C,CACA,MAAM1lR,EAAO,CACTmxU,MACA2B,YAAanD,EACb5jH,MAAO4kH,EAAU5kH,MACjBv8D,WAAYkgL,GAEVn+T,EAAU,CACZlL,OAAQ,OACR83H,UACAn+H,KAAM2M,KAAKC,UAAU5M,IAEnB2lB,QAAiBkrT,GAAmB,IAAM5qT,MAAMtJ,EAAUpL,KAChE,GAAIoU,EAASyyL,GAAI,CACb,MAAM26H,QAAsBptT,EAASiuP,OAOrC,MANoC,CAChCu9D,IAAK4B,EAAc5B,KAAOA,EAC1BmB,mBAAoB,EACpB95D,aAAcu6D,EAAcv6D,aAC5BquB,UAAWopC,EAAiC8C,EAAclsC,WAGlE,CAEI,YAAYspC,EAAqB,sBAAuBxqT,EAEhE,CAoXkDqtT,CAA0Bd,EAAeE,GACnF,OAAOx6S,EAAIs6S,EAAcvB,UAAWiC,EACxC,CACA,MAAOnxV,GAaH,MAZIsuV,EAActuV,IAAkC,MAA5BA,EAAEwwC,WAAWo+S,iBAG3BtpN,EAAOmrN,EAAcvB,iBAIrB/4S,EAAIs6S,EAAcvB,UAAW,CAC/BQ,IAAKiB,EAAkBjB,IACvBmB,mBAAoB,IAGtB7wV,CACV,CACJ,CAlCoCwxV,CAAqBf,EAAeQ,GAChE,MAAO,CAAEN,kBAAmBM,EAAiBP,sBACjD,CACK,OAA6C,IAAzCC,EAAkBE,mBAChB,CACHF,oBACAD,oBAAqBe,EAAyBhB,IAI3C,CAAEE,oBAEjB,CA3DiCe,CAA+BjB,EAAeE,GAEvE,OADAD,EAAsBM,EAAiBN,oBAChCM,EAAiBL,iBAAiB,IAE7C,OAAIA,EAAkBjB,MAAQH,EAEnB,CAAEoB,wBAAyBD,GAE/B,CACHC,oBACAD,sBAER,CAuEAvlM,eAAesmM,EAAyBhB,GAIpC,IAAIn/O,QAAcqgP,EAA0BlB,EAAcvB,WAC1D,KAAoC,IAA7B59O,EAAMu/O,0BAEHxB,EAAM,KACZ/9O,QAAcqgP,EAA0BlB,EAAcvB,WAE1D,GAAiC,IAA7B59O,EAAMu/O,mBAA0D,CAEhE,MAAM,kBAAEF,EAAiB,oBAAED,SAA8BF,EAAqBC,GAC9E,OAAIC,GAKOC,CAEf,CACA,OAAOr/O,CACX,CASA,SAASqgP,EAA0BzC,GAC/B,OAAOx7S,EAAOw7S,GAAW0B,IACrB,IAAKA,EACD,MAAMlrE,EAAcpzP,OAAO,0BAE/B,OAAOw+T,EAAqBF,EAAS,GAE7C,CACA,SAASE,EAAqBx/O,GAC1B,OASiD,KADbq/O,EARDr/O,GASTu/O,oBACtBF,EAAkBO,iBAAmBlD,EAAqBp/U,KAAKD,MATxD,CACH+gV,IAAKp+O,EAAMo+O,IACXmB,mBAAoB,GAGrBv/O,EAEX,IAAwCq/O,CADxC,CAsBAxlM,eAAeymM,GAAyB,UAAE1C,EAAS,yBAAEjwD,GAA4B0xD,GAC7E,MAAMz1T,EAiCV,SAAsCg0T,GAAW,IAAEQ,IAC/C,MAAO,GAAGnB,EAAyBW,MAAcQ,uBACrD,CAnCqBmC,CAA6B3C,EAAWyB,GACnDj0M,EAAUuyM,EAAmBC,EAAWyB,GAExCS,EAAmBnyD,EAAyBlb,aAAa,CAC3D37N,UAAU,IAEd,GAAIgpS,EAAkB,CAClB,MAAMntD,QAAyBmtD,EAAiBtnE,sBAC5Cma,GACAvnJ,EAAQmF,OAAO,oBAAqBoiJ,EAE5C,CACA,MAAM1lR,EAAO,CACTuzU,aAAc,CACV/jL,WAAYkgL,EACZ3jH,MAAO4kH,EAAU5kH,QAGnBx6M,EAAU,CACZlL,OAAQ,OACR83H,UACAn+H,KAAM2M,KAAKC,UAAU5M,IAEnB2lB,QAAiBkrT,GAAmB,IAAM5qT,MAAMtJ,EAAUpL,KAChE,GAAIoU,EAASyyL,GAAI,CAGb,OAD2B63H,QADCtqT,EAASiuP,OAGzC,CAEI,YAAYu8D,EAAqB,sBAAuBxqT,EAEhE,CA2BAinH,eAAe6kK,EAAiBygC,EAAen5D,GAAe,GAC1D,IAAIy6D,EACJ,MAAMzgP,QAAc59D,EAAO+8S,EAAcvB,WAAW0B,IAChD,IAAKoB,EAAkBpB,GACnB,MAAMlrE,EAAcpzP,OAAO,kBAE/B,MAAM2/T,EAAerB,EAASxrC,UAC9B,IAAK9tB,GA8Fb,SAA0B8tB,GACtB,OAAoC,IAA5BA,EAAUvlQ,gBAGtB,SAA4BulQ,GACxB,MAAMz2S,EAAMC,KAAKD,MACjB,OAAQA,EAAMy2S,EAAU1vB,cACpB0vB,EAAU1vB,aAAe0vB,EAAUjuB,UAAYxoR,EAAMy/U,CAC7D,CANS8D,CAAmB9sC,EAC5B,CAjG6B+sC,CAAiBF,GAElC,OAAOrB,EAEN,GAAmC,IAA/BqB,EAAapyS,cAGlB,OADAkyS,EAwBZ5mM,eAAyCslM,EAAen5D,GAIpD,IAAIhmL,QAAc8gP,EAAuB3B,EAAcvB,WACvD,KAAyC,IAAlC59O,EAAM8zM,UAAUvlQ,qBAEbwvS,EAAM,KACZ/9O,QAAc8gP,EAAuB3B,EAAcvB,WAEvD,MAAM9pC,EAAY9zM,EAAM8zM,UACxB,OAAgC,IAA5BA,EAAUvlQ,cAEHmwQ,EAAiBygC,EAAen5D,GAGhC8tB,CAEf,CA1C2BitC,CAA0B5B,EAAen5D,GACjDs5D,EAEN,CAED,IAAK/7T,UAAU47P,OACX,MAAM/K,EAAcpzP,OAAO,eAE/B,MAAM2+T,EA0FlB,SAA6CL,GACzC,MAAM0B,EAAsB,CACxBzyS,cAAe,EACf0yS,YAAa3jV,KAAKD,OAEtB,OAAOlP,OAAO+lB,OAAO/lB,OAAO+lB,OAAO,CAAC,EAAGorU,GAAW,CAAExrC,UAAWktC,GACnE,CAhGoCE,CAAoC5B,GAE5D,OADAmB,EAsDZ5mM,eAAwCslM,EAAeE,GACnD,IACI,MAAMvrC,QAAkBwsC,EAAyBnB,EAAeE,GAC1D8B,EAA2BhzV,OAAO+lB,OAAO/lB,OAAO+lB,OAAO,CAAC,EAAGmrU,GAAoB,CAAEvrC,cAEvF,aADMjvQ,EAAIs6S,EAAcvB,UAAWuD,GAC5BrtC,CACX,CACA,MAAOplT,GACH,IAAIsuV,EAActuV,IACe,MAA5BA,EAAEwwC,WAAWo+S,YAAkD,MAA5B5uV,EAAEwwC,WAAWo+S,WAKhD,CACD,MAAM6D,EAA2BhzV,OAAO+lB,OAAO/lB,OAAO+lB,OAAO,CAAC,EAAGmrU,GAAoB,CAAEvrC,UAAW,CAAEvlQ,cAAe,WAC7G1J,EAAIs6S,EAAcvB,UAAWuD,EACvC,YALUntN,EAAOmrN,EAAcvB,WAM/B,MAAMlvV,CACV,CACJ,CA1E2B0yV,CAAyBjC,EAAeQ,GAChDA,CACX,KAKJ,OAHkBc,QACNA,EACNzgP,EAAM8zM,SAEhB,CAkCA,SAASgtC,EAAuBlD,GAC5B,OAAOx7S,EAAOw7S,GAAW0B,IACrB,IAAKoB,EAAkBpB,GACnB,MAAMlrE,EAAcpzP,OAAO,kBAE/B,MAAM2/T,EAAerB,EAASxrC,UAC9B,OAiDgC,KADHA,EAhDG6sC,GAiDlBpyS,eACdulQ,EAAUmtC,YAAcvE,EAAqBp/U,KAAKD,MAjDvClP,OAAO+lB,OAAO/lB,OAAO+lB,OAAO,CAAC,EAAGorU,GAAW,CAAExrC,UAAW,CAAEvlQ,cAAe,KAE7E+wS,EA6Cf,IAAqCxrC,CA7Cd,GAEvB,CAsBA,SAAS4sC,EAAkBrB,GACvB,YAA8BryU,IAAtBqyU,GACqC,IAAzCA,EAAkBE,kBAC1B,CAoFA1lM,eAAe0nB,EAAS49K,EAAen5D,GAAe,GAClD,MAAMq7D,EAAoBlC,QAO9BtlM,eAAgDslM,GAC5C,MAAM,oBAAEC,SAA8BF,EAAqBC,GACvDC,SAEMA,CAEd,CAZUkC,CAAiCD,GAIvC,aADwB3iC,EAAiB2iC,EAAmBr7D,IAC3CtpP,KACrB,CA+LA,SAAS6kT,EAAqBC,GAC1B,OAAOptE,EAAcpzP,OAAO,4BAAuE,CAC/FwgU,aAER,CAkBA,MAAMC,EAAqB,gBAErBC,EAAiBtyV,IACnB,MAAMkvB,EAAMlvB,EAAUskR,YAAY,OAAOjB,eAEnCmrE,EApDV,SAA0Bt/T,GACtB,IAAKA,IAAQA,EAAI3pB,QACb,MAAM4sV,EAAqB,qBAE/B,IAAKjjU,EAAItlB,KACL,MAAMuoV,EAAqB,YAG/B,MAAMI,EAAa,CACf,YACA,SACA,SAEJ,IAAK,MAAMpzQ,KAAWozQ,EAClB,IAAKrjU,EAAI3pB,QAAQ45E,GACb,MAAMgzQ,EAAqBhzQ,GAGnC,MAAO,CACHyS,QAAS1iE,EAAItlB,KACb2jC,UAAWre,EAAI3pB,QAAQgoC,UACvBjrB,OAAQ4M,EAAI3pB,QAAQ+c,OACpBsnN,MAAO16M,EAAI3pB,QAAQqkO,MAE3B,CA4BsB4oH,CAAiBtjU,GAQnC,MAN0B,CACtBA,MACAs/T,YACAjwD,0BAJ6B,QAAarvQ,EAAK,aAK/Cw8P,QAAS,IAAMvnP,QAAQC,UAEH,EAEtBquT,GAAmBzyV,IACrB,MAAMkvB,EAAMlvB,EAAUskR,YAAY,OAAOjB,eAEnC0sE,GAAgB,QAAa7gU,EAAKmjU,GAAoBhvE,eAK5D,MAJ8B,CAC1BqvE,MAAO,IAtRfjoM,eAAqBslM,GACjB,MAAMkC,EAAoBlC,GACpB,kBAAEE,EAAiB,oBAAED,SAA8BF,EAAqBmC,GAS9E,OARIjC,EACAA,EAAoB5iT,MAAMhoB,QAAQ1c,OAKlC4mT,EAAiB2iC,GAAmB7kT,MAAMhoB,QAAQ1c,OAE/CunV,EAAkBjB,GAC7B,CA0QqB0D,CAAM3C,GACnB59K,SAAWykH,GAAiBzkH,EAAS49K,EAAen5D,GAE5B,GAG5B,QAAmB,IAAI,KAAUy7D,EAAoBC,EAAe,YACpE,QAAmB,IAAI,KA1BS,yBA0B8BG,GAAiB,aAUnF,QAAgB,EAAMx6T,IAEtB,QAAgB,EAAMA,EAAS,WCzmC/B,MAAM06T,GAAkB,4BAClBC,GAAmB,uCACnBC,GAAoB,0FACpBC,GAAW,6CACXC,GAAsB,kBACtBC,GAAwB,iBACxBC,GAAwB,gBAG9B,IAAIC,GAoBAC,GAsBJ,SAASC,GAAc5rS,GACnB,MAAM6rS,EAAa,IAAIrhP,WAAWxqD,GAElC,OADqBjd,KAAK1iB,OAAO+iB,gBAAgByoT,IAC7BnoV,QAAQ,KAAM,IAAIA,QAAQ,MAAO,KAAKA,QAAQ,MAAO,IAC7E,CACA,SAASooV,GAAcC,GACnB,MACM1qT,GAAU0qT,EADA,IAAIhpN,QAAQ,EAAKgpN,EAAa/0V,OAAS,GAAM,IAExD0M,QAAQ,MAAO,KACfA,QAAQ,KAAM,KACbsoV,EAAUlqT,KAAKT,GACf4qT,EAAc,IAAIzhP,WAAWwhP,EAAQh1V,QAC3C,IAAK,IAAID,EAAI,EAAGA,EAAIi1V,EAAQh1V,SAAUD,EAClCk1V,EAAYl1V,GAAKi1V,EAAQjzV,WAAWhC,GAExC,OAAOk1V,CACX,EAzDA,SAAWN,GACPA,EAAYA,EAA0B,aAAI,GAAK,eAC/CA,EAAYA,EAAkC,qBAAI,GAAK,sBAC1D,CAHD,CAGGD,KAAkBA,GAAgB,CAAC,IAiBtC,SAAWC,GACPA,EAA2B,cAAI,gBAC/BA,EAAkC,qBAAI,sBACzC,CAHD,CAGGA,KAAgBA,GAAc,CAAC,IAoDlC,MAAMO,GAAc,uBAKdC,GAAiB,EACjBC,GAAwB,yBA6H9B,MAAM,GAAgB,8BAChB,GAAmB,EACnB,GAAoB,2BAC1B,IAAI,GAAY,KAChB,SAAS,KAeL,OAdK,KACD,IAAY,QAAO,GAAe,GAAkB,CAChDpvM,QAAS,CAACqvM,EAAW9rE,KAKjB,GACS,IADDA,EAEA8rE,EAAU7rE,kBAAkB,GACpC,KAIL,EACX,CAEAv9H,eAAeqpM,GAAMC,GACjB,MAAM70V,EAAM,GAAO60V,GACbvgJ,QAAW,KACXwgJ,QAAsBxgJ,EACvB60E,YAAY,IACZC,YAAY,IACZx6P,IAAI5uB,GACT,GAAI80V,EACA,OAAOA,EAEN,CAED,MAAMC,QA9JdxpM,eAAkCypM,GAC9B,GAAI,cAAe9kT,UAAW,CAG1B,MACM+kT,SADkB/kT,UAAUglT,aACRtxV,KAAI0wM,GAAMA,EAAG5pM,OACvC,IAAKuqV,EAAQl1V,SAASy0V,IAElB,OAAO,IAEf,CACA,IAAIM,EAAe,KAyEnB,aAxEiB,QAAON,GAAaC,GAAgB,CACjDnvM,QAASiG,MAAO+oD,EAAIu0E,EAAYssE,EAAYC,KACxC,IAAI9nT,EACJ,GAAIu7O,EAAa,EAEb,OAEJ,IAAKv0E,EAAGk9F,iBAAiB3/P,SAAS6iT,IAE9B,OAEJ,MAAMtrE,EAAcgsE,EAAmBhsE,YAAYsrE,IAC7Cx0V,QAAckpR,EAAY5hR,MAAM,eAAeonB,IAAIomU,GAEzD,SADM5rE,EAAYx7P,QACb1tB,EAIL,GAAmB,IAAf2oR,EAAkB,CAClB,MAAMwsE,EAAan1V,EACnB,IAAKm1V,EAAWpgL,OAASogL,EAAWC,SAAWD,EAAW/5T,SACtD,OAEJw5T,EAAe,CACX1mT,MAAOinT,EAAWE,SAClBC,WAA6C,QAAhCloT,EAAK+nT,EAAWG,kBAA+B,IAAPloT,EAAgBA,EAAKt+B,KAAKD,MAC/Eq5K,oBAAqB,CACjBnT,KAAMogL,EAAWpgL,KACjBqgL,OAAQD,EAAWC,OACnBh6T,SAAU+5T,EAAW/5T,SACrBm6T,QAASJ,EAAWI,QACpBC,SAAyC,kBAAxBL,EAAWK,SACtBL,EAAWK,SACXxB,GAAcmB,EAAWK,WAG3C,MACK,GAAmB,IAAf7sE,EAAkB,CACvB,MAAMwsE,EAAan1V,EACnB40V,EAAe,CACX1mT,MAAOinT,EAAWE,SAClBC,WAAYH,EAAWG,WACvBptK,oBAAqB,CACjBnT,KAAMi/K,GAAcmB,EAAWpgL,MAC/BqgL,OAAQpB,GAAcmB,EAAWC,QACjCh6T,SAAU+5T,EAAW/5T,SACrBm6T,QAASJ,EAAWI,QACpBC,SAAUxB,GAAcmB,EAAWK,WAG/C,MACK,GAAmB,IAAf7sE,EAAkB,CACvB,MAAMwsE,EAAan1V,EACnB40V,EAAe,CACX1mT,MAAOinT,EAAWE,SAClBC,WAAYH,EAAWG,WACvBptK,oBAAqB,CACjBnT,KAAMi/K,GAAcmB,EAAWpgL,MAC/BqgL,OAAQpB,GAAcmB,EAAWC,QACjCh6T,SAAU+5T,EAAW/5T,SACrBm6T,QAASJ,EAAWI,QACpBC,SAAUxB,GAAcmB,EAAWK,WAG/C,MAGL33U,cAEG,QAASy2U,UACT,QAAS,8BACT,QAAS,aAGnB,SAA2BM,GACvB,IAAKA,IAAiBA,EAAa1sK,oBAC/B,OAAO,EAEX,MAAM,oBAAEA,GAAwB0sK,EAChC,MAA2C,kBAA5BA,EAAaU,YACxBV,EAAaU,WAAa,GACI,kBAAvBV,EAAa1mT,OACpB0mT,EAAa1mT,MAAM9uC,OAAS,GACQ,kBAA7B8oL,EAAoBnT,MAC3BmT,EAAoBnT,KAAK31K,OAAS,GACI,kBAA/B8oL,EAAoBktK,QAC3BltK,EAAoBktK,OAAOh2V,OAAS,GACI,kBAAjC8oL,EAAoB9sJ,UAC3B8sJ,EAAoB9sJ,SAASh8B,OAAS,GACC,kBAAhC8oL,EAAoBqtK,SAC3BrtK,EAAoBqtK,QAAQn2V,OAAS,GACG,kBAAjC8oL,EAAoBstK,UAC3BttK,EAAoBstK,SAASp2V,OAAS,CAC9C,CArBWq2V,CAAkBb,GAAgBA,EAAe,IAC5D,CAyEsCc,CAAmBf,EAAqBvF,UAAU0F,UAChF,GAAID,EAEA,aADMc,GAAMhB,EAAsBE,GAC3BA,CAEf,CACJ,CAEAxpM,eAAesqM,GAAMhB,EAAsBC,GACvC,MAAM90V,EAAM,GAAO60V,GAEb3rE,SADW,MACHC,YAAY,GAAmB,aAG7C,aAFMD,EAAGE,YAAY,IAAmBj6F,IAAI2lK,EAAc90V,SACpDkpR,EAAGpuO,KACFg6S,CACX,CASA,SAAS,IAAO,UAAExF,IACd,OAAOA,EAAU5kH,KACrB,CAkBA,MAAMorH,GAAY,CACd,4BAAyE,kDACzE,2BAAkE,gDAClE,uBAA0D,wDAC1D,qBAA2D,qEAC3D,qBAA2D,mEAC3D,sBAA6D,2EAC7D,yBAAmE,mGACnE,qCAAoF,+EACpF,yBAAmE,qEACnE,2BAAuE,2DACvE,2BAAuE,yEAEvE,sBAA6D,oEAC7D,wBAAiE,wDACjE,yBAAmE,4IAEnE,0BAAqE,uEACrE,qBAA2D,iEAC3D,oBAAyD,yCACzD,gCAAiF,yIAG/E,GAAgB,IAAI,KAAa,YAAa,YAAaA,IA4EjEvqM,eAAewqM,GAAmBlB,EAAsBzmT,GACpD,MACM4nT,EAAqB,CACvBhxU,OAAQ,SACR83H,cAHkB,GAAW+3M,IAKjC,IACI,MAAMvwT,QAAiBM,MAAM,GAAGqxT,GAAYpB,EAAqBvF,cAAclhT,IAAS4nT,GAClFE,QAAqB5xT,EAASiuP,OACpC,GAAI2jE,EAAa1sV,MAAO,CACpB,MAAMmF,EAAUunV,EAAa1sV,MAAMmF,QACnC,MAAM,GAAc+jB,OAAO,2BAAqE,CAC5F2wO,UAAW10P,GAEnB,CACJ,CACA,MAAOod,GACH,MAAM,GAAc2G,OAAO,2BAAqE,CAC5F2wO,UAAmB,OAARt3O,QAAwB,IAARA,OAAiB,EAASA,EAAInsB,YAEjE,CACJ,CACA,SAASq2V,IAAY,UAAE5nT,IACnB,MAAO,GAAGulT,eAAqBvlT,iBACnC,CACAk9G,eAAe,IAAW,UAAE+jM,EAAS,cAAEuB,IACnC,MAAMrrC,QAAkBqrC,EAAc59K,WACtC,OAAO,IAAIm+G,QAAQ,CACf,eAAgB,mBAChBg+D,OAAQ,mBACR,iBAAkBE,EAAUlsU,OAC5B,qCAAsC,OAAOoiS,KAErD,CACA,SAAS2wC,IAAQ,OAAEb,EAAM,KAAErgL,EAAI,SAAE35I,EAAQ,SAAEo6T,IACvC,MAAM/2U,EAAO,CACTy3U,IAAK,CACD96T,WACA25I,OACAqgL,WAMR,OAHII,IAAa/B,KACbh1U,EAAKy3U,IAAIC,kBAAoBX,GAE1B/2U,CACX,CAmBA,MAAM23U,GAAsB,OAC5B/qM,eAAegrM,GAAiBC,GAC5B,MAAMC,QA+EVlrM,eAAmCmrM,EAAgBhB,GAC/C,MAAM90K,QAAqB81K,EAAeC,YAAYC,kBACtD,GAAIh2K,EACA,OAAOA,EAEX,OAAO81K,EAAeC,YAAYniT,UAAU,CACxCqiT,iBAAiB,EAGjBC,qBAAsB1C,GAAcsB,IAE5C,CA1FmCqB,CAAoBP,EAAUE,eAAgBF,EAAUd,UACjFttK,EAAsB,CACxBstK,SAAUc,EAAUd,SACpBD,QAASe,EAAUE,eAAejsH,MAClCnvM,SAAUm7T,EAAiBn7T,SAC3B25I,KAAMi/K,GAAcuC,EAAiB/sL,OAAO,SAC5C4rL,OAAQpB,GAAcuC,EAAiB/sL,OAAO,YAE5CorL,QAAqBF,GAAM4B,EAAU3B,sBAC3C,GAAKC,EAIA,IAiFT,SAAsBkC,EAAWC,GAC7B,MAAMC,EAAkBD,EAAevB,WAAasB,EAAUtB,SACxDyB,EAAkBF,EAAe37T,WAAa07T,EAAU17T,SACxD87T,EAAcH,EAAehiL,OAAS+hL,EAAU/hL,KAChDoiL,EAAgBJ,EAAe3B,SAAW0B,EAAU1B,OAC1D,OAAO4B,GAAmBC,GAAmBC,GAAeC,CAChE,CAvFcC,CAAaxC,EAAa1sK,oBAAqBA,GAWpD,OAAIp5K,KAAKD,OAAS+lV,EAAaU,WAAac,GA+BrD/qM,eAA2BirM,EAAW1B,GAClC,IACI,MAAMyC,QAzJdhsM,eAAkCspM,EAAsBC,GACpD,MAAMh4M,QAAgB,GAAW+3M,GAC3Bl2U,EAAOw3U,GAAQrB,EAAa1sK,qBAC5BovK,EAAgB,CAClBxyU,OAAQ,QACR83H,UACAn+H,KAAM2M,KAAKC,UAAU5M,IAEzB,IAAIu3U,EACJ,IACI,MAAM5xT,QAAiBM,MAAM,GAAGqxT,GAAYpB,EAAqBvF,cAAcwF,EAAa1mT,QAASopT,GACrGtB,QAAqB5xT,EAASiuP,MAClC,CACA,MAAOxmQ,GACH,MAAM,GAAc2G,OAAO,sBAA2D,CAClF2wO,UAAmB,OAARt3O,QAAwB,IAARA,OAAiB,EAASA,EAAInsB,YAEjE,CACA,GAAIs2V,EAAa1sV,MAAO,CACpB,MAAMmF,EAAUunV,EAAa1sV,MAAMmF,QACnC,MAAM,GAAc+jB,OAAO,sBAA2D,CAClF2wO,UAAW10P,GAEnB,CACA,IAAKunV,EAAa9nT,MACd,MAAM,GAAc1b,OAAO,yBAE/B,OAAOwjU,EAAa9nT,KACxB,CA6HmCqpT,CAAmBjB,EAAU3B,qBAAsBC,GACxE4C,EAAsB73V,OAAO+lB,OAAO/lB,OAAO+lB,OAAO,CAAC,EAAGkvU,GAAe,CAAE1mT,MAAOmpT,EAAc/B,WAAYxmV,KAAKD,QAEnH,aADM8mV,GAAMW,EAAU3B,qBAAsB6C,GACrCH,CACX,CACA,MAAOn3V,GACH,MAAMA,CACV,CACJ,CAvCeu3V,CAAYnB,EAAW,CAC1BpoT,MAAO0mT,EAAa1mT,MACpBonT,WAAYxmV,KAAKD,MACjBq5K,wBAKG0sK,EAAa1mT,MAnBpB,UACU2nT,GAAmBS,EAAU3B,qBAAsBC,EAAa1mT,MAC1E,CACA,MAAOhuC,GAEH8lB,QAAQsN,KAAKpzB,EACjB,CACA,OAAOw3V,GAAYpB,EAAU3B,qBAAsBzsK,EAavD,CAxBI,OAAOwvK,GAAYpB,EAAU3B,qBAAsBzsK,EAyB3D,CA8BA78B,eAAeqsM,GAAY/C,EAAsBzsK,GAC7C,MAAMh6I,QAhMVm9G,eAA+BspM,EAAsBzsK,GACjD,MAAMtrC,QAAgB,GAAW+3M,GAC3Bl2U,EAAOw3U,GAAQ/tK,GACfyvK,EAAmB,CACrB7yU,OAAQ,OACR83H,UACAn+H,KAAM2M,KAAKC,UAAU5M,IAEzB,IAAIu3U,EACJ,IACI,MAAM5xT,QAAiBM,MAAMqxT,GAAYpB,EAAqBvF,WAAYuI,GAC1E3B,QAAqB5xT,EAASiuP,MAClC,CACA,MAAOxmQ,GACH,MAAM,GAAc2G,OAAO,yBAAiE,CACxF2wO,UAAmB,OAARt3O,QAAwB,IAARA,OAAiB,EAASA,EAAInsB,YAEjE,CACA,GAAIs2V,EAAa1sV,MAAO,CACpB,MAAMmF,EAAUunV,EAAa1sV,MAAMmF,QACnC,MAAM,GAAc+jB,OAAO,yBAAiE,CACxF2wO,UAAW10P,GAEnB,CACA,IAAKunV,EAAa9nT,MACd,MAAM,GAAc1b,OAAO,4BAE/B,OAAOwjU,EAAa9nT,KACxB,CAoKwB0pT,CAAgBjD,EAAsBzsK,GACpD0sK,EAAe,CACjB1mT,QACAonT,WAAYxmV,KAAKD,MACjBq5K,uBAGJ,aADMytK,GAAMhB,EAAsBC,GAC3BA,EAAa1mT,KACxB,CA2CA,SAAS2pT,GAAmBC,GACxB,MAAMv9T,EAAU,CACZrhB,KAAM4+U,EAAgB5+U,KAEtB6+U,YAAaD,EAAgBE,aAE7BC,UAAWH,EAAgBI,cAK/B,OAEJ,SAAsC39T,EAAS49T,GAC3C,IAAKA,EAAuB39K,aACxB,OAEJjgJ,EAAQigJ,aAAe,CAAC,EACxB,MAAM90K,EAAQyyV,EAAuB39K,aAAa90K,MAC5CA,IACF60B,EAAQigJ,aAAa90K,MAAQA,GAEjC,MAAM+Y,EAAO05U,EAAuB39K,aAAa/7J,KAC3CA,IACF8b,EAAQigJ,aAAa/7J,KAAOA,GAEhC,MAAM+nN,EAAQ2xH,EAAuB39K,aAAagsD,MAC5CA,IACFjsM,EAAQigJ,aAAagsD,MAAQA,GAEjC,MAAM3gO,EAAOsyV,EAAuB39K,aAAa30K,KAC3CA,IACF00B,EAAQigJ,aAAa30K,KAAOA,EAEpC,CA1BIuyV,CAA6B79T,EAASu9T,GA2B1C,SAA8Bv9T,EAAS49T,GACnC,IAAKA,EAAuB3oV,KACxB,OAEJ+qB,EAAQ/qB,KAAO2oV,EAAuB3oV,IAC1C,CA/BI6oV,CAAqB99T,EAASu9T,GAgClC,SAA6Bv9T,EAAS49T,GAClC,IAAI/qT,EAAIC,EAAIqO,EAAIuC,EAAIE,EAEpB,IAAKg6S,EAAuBG,cACyB,QAA9ClrT,EAAK+qT,EAAuB39K,oBAAiC,IAAPptI,OAAgB,EAASA,EAAGmrT,cACrF,OAEJh+T,EAAQ+9T,WAAa,CAAC,EACtB,MAAMltV,EAAwG,QAAhGswC,EAAkD,QAA5CrO,EAAK8qT,EAAuBG,kBAA+B,IAAPjrT,OAAgB,EAASA,EAAGjiC,YAAyB,IAAPswC,EAAgBA,EAAoD,QAA9CuC,EAAKk6S,EAAuB39K,oBAAiC,IAAPv8H,OAAgB,EAASA,EAAGs6S,aACxNntV,IACFmvB,EAAQ+9T,WAAWltV,KAAOA,GAG9B,MAAMotV,EAA8D,QAA5Cr6S,EAAKg6S,EAAuBG,kBAA+B,IAAPn6S,OAAgB,EAASA,EAAGs6S,gBAClGD,IACFj+T,EAAQ+9T,WAAWE,eAAiBA,EAE5C,CAhDIE,CAAoBn+T,EAASu9T,GACtBv9T,CACX,CA6IA,SAAS,GAAqBy4T,GAC1B,OAAO,GAAcxgU,OAAO,4BAAuE,CAC/FwgU,aAER,EA3DA,SAAuB2F,EAAIC,GACvB,MAAMC,EAAc,GACpB,IAAK,IAAI15V,EAAI,EAAGA,EAAIw5V,EAAGv5V,OAAQD,IAC3B05V,EAAY53V,KAAK03V,EAAG1vV,OAAO9J,IACvBA,EAAIy5V,EAAGx5V,QACPy5V,EAAY53V,KAAK23V,EAAG3vV,OAAO9J,IAG5B05V,EAAYr0U,KAAK,GAC5B,CAVAs0U,CAAc,uBAAwB,uBA8EtC,MAAMC,GACF,WAAAtxT,CAAY3X,EAAK6gU,EAAeqI,GAE5BpzU,KAAKqzU,0CAA2C,EAChDrzU,KAAKszU,2BAA6B,KAClCtzU,KAAKuzU,iBAAmB,KACxBvzU,KAAKwzU,UAAY,GACjBxzU,KAAKyzU,qBAAsB,EAC3B,MAAMjK,EA1Dd,SAA0Bt/T,GACtB,IAAKA,IAAQA,EAAI3pB,QACb,MAAM,GAAqB,4BAE/B,IAAK2pB,EAAItlB,KACL,MAAM,GAAqB,YAG/B,MAAM2oV,EAAa,CACf,YACA,SACA,QACA,sBAEE,QAAEhtV,GAAY2pB,EACpB,IAAK,MAAMiwD,KAAWozQ,EAClB,IAAKhtV,EAAQ45E,GACT,MAAM,GAAqBA,GAGnC,MAAO,CACHyS,QAAS1iE,EAAItlB,KACb2jC,UAAWhoC,EAAQgoC,UACnBjrB,OAAQ/c,EAAQ+c,OAChBsnN,MAAOrkO,EAAQqkO,MACfsqH,SAAU3uV,EAAQmzV,kBAE1B,CA+B0B,CAAiBxpU,GACnClK,KAAK+uU,qBAAuB,CACxB7kU,MACAs/T,YACAuB,gBACAqI,oBAER,CACA,OAAA1sE,GACI,OAAOvnP,QAAQC,SACnB,EAmBJqmH,eAAekuM,GAAkBjD,GAC7B,IACIA,EAAUE,qBAAuBzhU,UAAU09Q,cAAc1sJ,SAASwtM,GAAiB,CAC/EhpH,MAAOipH,KAOX8C,EAAUE,eAAe5iT,SAAS5F,OAAM,QAG5C,CACA,MAAO9tC,GACH,MAAM,GAAcsyB,OAAO,qCAAkF,CACzGgnU,oBAA2B,OAANt5V,QAAoB,IAANA,OAAe,EAASA,EAAEuO,SAErE,CACJ,CAwEA48I,eAAeouM,GAAWnD,EAAWnwV,GACjC,IAAK4uB,UACD,MAAM,GAAcvC,OAAO,4BAK/B,GAHgC,YAA5BknU,aAAaC,kBACPD,aAAaE,oBAES,YAA5BF,aAAaC,WACb,MAAM,GAAcnnU,OAAO,sBAI/B,aArCJ64H,eAA8BirM,EAAWd,GAC/BA,EACFc,EAAUd,SAAWA,EAEfc,EAAUd,WAChBc,EAAUd,SAAW/B,GAE7B,CA4BUoG,CAAevD,EAAuB,OAAZnwV,QAAgC,IAAZA,OAAqB,EAASA,EAAQqvV,gBAhE9FnqM,eAA2BirM,EAAWE,GAIlC,GAHKA,GAAmBF,EAAUE,sBACxB+C,GAAkBjD,GAEvBE,IAAoBF,EAAUE,eAAnC,CAGA,KAAMA,aAA0BsD,2BAC5B,MAAM,GAActnU,OAAO,2BAE/B8jU,EAAUE,eAAiBA,CAJ3B,CAKJ,CAsDUuD,CAAYzD,EAAuB,OAAZnwV,QAAgC,IAAZA,OAAqB,EAASA,EAAQ6zV,2BAChF3D,GAAiBC,EAC5B,CAkBAjrM,eAAe4uM,GAAW3D,EAAWhwK,EAAa92K,GAC9C,MAAMsgS,EAWV,SAAsBxpH,GAClB,OAAQA,GACJ,KAAKytK,GAAYmG,qBACb,MAAO,oBACX,KAAKnG,GAAYoG,cACb,MAAO,0BACX,QACI,MAAM,IAAI7wU,MAEtB,CApBsBsuI,CAAa0uB,UACPgwK,EAAU3B,qBAAqBqE,kBAAkBtqU,OAC/D0rU,SAAStqD,EAAW,CAE1BuqD,WAAY7qV,EAAKmkV,IACjB2G,aAAc9qV,EAAKokV,IACnB2G,aAAc/qV,EAAKqkV,IACnB2G,oBAAqBjlU,KAAKq2B,MAAM98C,KAAKD,MAAQ,MAGrD,CA4BAw8I,eAAeovM,GAAqBnE,EAAWlsV,GAC3C,MAAM0tV,EAAkB1tV,EAAMoF,KAC9B,IAAKsoV,EAAgB4C,oBACjB,OAEApE,EAAU6C,kBACVrB,EAAgBxxK,cAAgBytK,GAAYoG,gBACF,oBAA/B7D,EAAU6C,iBACjB7C,EAAU6C,iBAAiBtB,GAAmBC,IAG9CxB,EAAU6C,iBAAiBxlU,KAAKkkU,GAAmBC,KAI3D,MAAM6C,EAAc7C,EAAgBtoV,KAxTxC,IAA0BA,EAEC,kBAFDA,EAyTDmrV,IAvTgBnrV,GAAQmkV,MAAuBnkV,GAwTZ,MAApDmrV,EAh8BmC,uBAi8B7BV,GAAW3D,EAAWwB,EAAgBxxK,YAAaq0K,EAEjE,CAEA,MAAM,GAAO,sBACP,GAAU,UAkBVC,GAA0Bh6V,IAC5B,MAAM01V,EAAY,IAAIyC,GAAiBn4V,EAAUskR,YAAY,OAAOjB,eAAgBrjR,EAAUskR,YAAY,0BAA0BjB,eAAgBrjR,EAAUskR,YAAY,uBAE1K,OADAnwP,UAAU09Q,cAAcxtS,iBAAiB,WAAW/E,GAAKu6V,GAAqBnE,EAAWp2V,KAClFo2V,CAAS,EAEduE,GAAkCj6V,IACpC,MAAM01V,EAAY11V,EACbskR,YAAY,aACZjB,eAIL,MAH0B,CACtBlxG,SAAW5sK,GAAYszV,GAAWnD,EAAWnwV,GAEzB,EAgC5BklJ,eAAeyvM,KACX,UAGU,SACV,CACA,MAAO56V,GACH,OAAO,CACX,CAIA,MAA0B,qBAAXmE,SACX,YACA,WACA,kBAAmB0wB,WACnB,gBAAiB1wB,QACjB,iBAAkBA,QAClB,UAAWA,QACXy1V,0BAA0Bl6V,UAAUb,eAAe,qBACnDg8V,iBAAiBn7V,UAAUb,eAAe,SAClD,CA6EA,SAASi8V,GAAqBlrU,GAAM,WAchC,OATAgrU,KAAoB7mU,MAAKq+D,IAErB,IAAKA,EACD,MAAM,GAAc9/D,OAAO,sBAC/B,IACD0e,IAEC,MAAM,GAAc1e,OAAO,yBAAgE,KAExF,SAAa,QAAmB1C,GAAM,aAAam0P,cAC9D,CAgBA54H,eAAe,GAASirM,EAAWnwV,GAE/B,OAAOszV,GADPnD,GAAY,QAAmBA,GACFnwV,EACjC,CA4BA,SAASyhL,GAAU0uK,EAAWvhT,GAE1B,OAjGJ,SAAqBuhT,EAAWvhT,GAC5B,IAAKhgB,UACD,MAAM,GAAcvC,OAAO,4BAG/B,OADA8jU,EAAU6C,iBAAmBpkT,EACtB,KACHuhT,EAAU6C,iBAAmB,IAAI,CAEzC,CAyFW8B,CADP3E,GAAY,QAAmBA,GACDvhT,EAClC,EAhMI,QAAmB,IAAI,KAAU,YAAa6lT,GAAwB,YACtE,QAAmB,IAAI,KAAU,qBAAsBC,GAAgC,aACvF,QAAgB,GAAM,KAEtB,QAAgB,GAAM,GAAS,sLCtgCnC,EAAe,WAAyB,uBCmBxC,MAAMK,EAAM,CAAC,EAAEn8V,eAGTo8V,EAAW,IAAI5kT,IAEfulE,EAAM,SACNs/O,EAAgB,YAahBC,EAAgB,IAAI5kT,IAAI,CAAC,QAAS,QAAS,QAAS,QAAS,OAE7D6kT,EAAmB,IAAI7kT,IAAI,CAAC,KAAM,OAElC8kT,EAAO,0DAcN,SAASC,EAAatwB,EAAM/kU,GACjC,IAAKA,QAAgCqY,IAArBrY,EAAQ2vO,SACtB,MAAM,IAAIhuN,UAAU,kCAGtB,MAAM2zU,EAAWt1V,EAAQs1V,eAAYj9U,EAErC,IAAIgU,EAEJ,GAAIrsB,EAAQu1V,YAAa,CACvB,GAA8B,oBAAnBv1V,EAAQw1V,OACjB,MAAM,IAAI7zU,UACR,yDAIJ0K,EA8TJ,SAA2BipU,EAAUE,GACnC,OAAOnpU,EAEP,SAASA,EAAOwxD,EAAMpgF,EAAMd,EAAOhD,GAEjC,MAAM87V,EAAmBp8V,MAAMC,QAAQqD,EAAMZ,UACvC8hO,GAAQ,QAAWhgJ,GACzB,OAAO23Q,EACL/3V,EACAd,EACAhD,EACA87V,EACA,CACEvxU,aAAc25M,EAAQA,EAAMnrI,OAAS,OAAIr6E,EACzC2L,SAAUsxU,EACVrxU,WAAY45M,EAAQA,EAAMn6M,UAAOrL,QAEnCA,EAEJ,CACF,CAlVaq9U,CAAkBJ,EAAUt1V,EAAQw1V,OAC/C,KAAO,CACL,GAA2B,oBAAhBx1V,EAAQsjQ,IACjB,MAAM,IAAI3hP,UAAU,wCAGtB,GAA4B,oBAAjB3hB,EAAQujQ,KACjB,MAAM,IAAI5hP,UAAU,yCAGtB0K,EAiSJ,SAA0B0e,EAAGu4N,EAAKC,GAChC,OAAOl3O,EAEP,SAASA,EAAO0e,EAAGttC,EAAMd,EAAOhD,GAE9B,MACMwhB,EADmB9hB,MAAMC,QAAQqD,EAAMZ,UACfwnQ,EAAOD,EACrC,OAAO3pQ,EAAMwhB,EAAG1d,EAAMd,EAAOhD,GAAOwhB,EAAG1d,EAAMd,EAC/C,CACF,CA1Sag5V,CAAiBL,EAAUt1V,EAAQsjQ,IAAKtjQ,EAAQujQ,KAC3D,CAGA,MAAMx7O,EAAQ,CACZ4nN,SAAU3vO,EAAQ2vO,SAClBimH,UAAW,GACXxoQ,WAAYptF,EAAQotF,YAAc,CAAC,EACnC/gE,SACAwpU,yBAA0B71V,EAAQ61V,0BAA4B,QAC9DC,UAAW91V,EAAQ+1V,gBAAkB/1V,EAAQ+1V,uBAAoB19U,EACjEi9U,WACAU,mBAAoBh2V,EAAQg2V,qBAAsB,EAClDC,UAA+B,IAArBj2V,EAAQi2V,SAClBC,SAAUl2V,EAAQk2V,WAAY,EAC9Bp5U,OAA0B,QAAlB9c,EAAQ8kB,MAAkB,KAAM,KACxCqxU,sBAAuBn2V,EAAQm2V,uBAAyB,MACxDC,uBAAyD,IAAlCp2V,EAAQo2V,uBAG3B94V,EAASgpE,EAAIv+C,EAAOg9S,OAAM1sT,GAGhC,OAAI/a,GAA4B,kBAAXA,EACZA,EAIFyqB,EAAMsE,OACX04S,EACAh9S,EAAM4nN,SACN,CAAC5zO,SAAUuB,QAAU+a,QACrBA,EAEJ,CAcA,SAASiuD,EAAIv+C,EAAO81D,EAAMlkF,GACxB,MAAkB,YAAdkkF,EAAKpgF,KAqCX,SAAiBsqB,EAAO81D,EAAMlkF,GAC5B,MAAM08V,EAAetuU,EAAMjL,OAC3B,IAAIA,EAASu5U,EAEsB,QAA/Bx4Q,EAAKzhD,QAAQlW,eAAkD,SAAvBmwU,EAAavxU,QACvDhI,EAAS,KACTiL,EAAMjL,OAASA,GAGjBiL,EAAM6tU,UAAU96V,KAAK+iF,GAErB,MAAMpgF,EAAO64V,EAAsBvuU,EAAO81D,EAAKzhD,SAAS,GAClDz/B,EAkPR,SAA4BorB,EAAO81D,GAEjC,MAAMlhF,EAAQ,CAAC,EAEf,IAAI45V,EAEAt6U,EAEJ,IAAKA,KAAQ4hE,EAAK+xD,WAChB,GAAa,aAAT3zH,GAAuB84U,EAAIn7V,KAAKikF,EAAK+xD,WAAY3zH,GAAO,CAC1D,MAAM3e,EAASk5V,EAAezuU,EAAO9L,EAAM4hE,EAAK+xD,WAAW3zH,IAE3D,GAAI3e,EAAQ,CACV,MAAO3D,EAAKE,GAASyD,EAGnByqB,EAAMquU,uBACE,UAARz8V,GACiB,kBAAVE,GACPs7V,EAAiBllT,IAAI4tC,EAAKzhD,SAE1Bm6T,EAAa18V,EAEb8C,EAAMhD,GAAOE,CAEjB,CACF,CAGF,GAAI08V,EAAY,EAEsB55V,EAAML,QAAUK,EAAML,MAAQ,CAAC,IAC7B,QAAhCyrB,EAAMouU,sBAAkC,aAAe,aAC3DI,CACJ,CAEA,OAAO55V,CACT,CAvRgB85V,CAAmB1uU,EAAO81D,GACxC,IAAI9hF,EAAW26V,EAAe3uU,EAAO81D,GAEjCq3Q,EAAcjlT,IAAI4tC,EAAKzhD,WACzBrgC,EAAWA,EAAS0nB,QAAO,SAAUjmB,GACnC,MAAwB,kBAAVA,KAAsB,OAAWA,EACjD,KAUF,OAPAmgF,EAAQ51D,EAAOprB,EAAOc,EAAMogF,GAC5B84Q,EAAYh6V,EAAOZ,GAGnBgsB,EAAM6tU,UAAU9xU,MAChBiE,EAAMjL,OAASu5U,EAERtuU,EAAMsE,OAAOwxD,EAAMpgF,EAAMd,EAAOhD,EACzC,CAjEW,CAAQouB,EAAO81D,EAAMlkF,GAGZ,sBAAdkkF,EAAKpgF,MAA8C,sBAAdogF,EAAKpgF,KA0EhD,SAAuBsqB,EAAO81D,GAC5B,GAAIA,EAAKx0E,MAAQw0E,EAAKx0E,KAAKutV,QAAU7uU,EAAM+tU,UAAW,CACpD,MACMe,EADUh5Q,EAAKx0E,KAAKutV,OACCt+U,KAAK,GAIhC,OAHA,QAA2B,wBAApBu+U,EAAWp5V,MAIhBsqB,EAAM+tU,UAAUgB,mBAAmBD,EAAWA,WAElD,CAEAE,EAAYhvU,EAAO81D,EAAKoQ,SAC1B,CAtFW+oQ,CAAcjvU,EAAO81D,GAGZ,sBAAdA,EAAKpgF,MAA8C,sBAAdogF,EAAKpgF,KAsHhD,SAAuBsqB,EAAO81D,EAAMlkF,GAClC,MAAM08V,EAAetuU,EAAMjL,OAC3B,IAAIA,EAASu5U,EAEK,QAAdx4Q,EAAKx5E,MAAyC,SAAvBgyV,EAAavxU,QACtChI,EAAS,KACTiL,EAAMjL,OAASA,GAGjBiL,EAAM6tU,UAAU96V,KAAK+iF,GAErB,MAAMpgF,EACU,OAAdogF,EAAKx5E,KACD0jB,EAAM4nN,SACN2mH,EAAsBvuU,EAAO81D,EAAKx5E,MAAM,GACxC1H,EAuMR,SAA+BorB,EAAO81D,GAEpC,MAAMlhF,EAAQ,CAAC,EAEf,IAAK,MAAM06F,KAAaxZ,EAAKriF,WAC3B,GAAuB,8BAAnB67F,EAAU55F,KACZ,GAAI45F,EAAUhuF,MAAQguF,EAAUhuF,KAAKutV,QAAU7uU,EAAM+tU,UAAW,CAC9D,MACMe,EADUx/P,EAAUhuF,KAAKutV,OACJt+U,KAAK,IAChC,QAA2B,wBAApBu+U,EAAWp5V,MAClB,MAAMw5V,EAAmBJ,EAAWA,YACpC,QAAiC,qBAA1BI,EAAiBx5V,MACxB,MAAM87C,EAAW09S,EAAiBrnN,WAAW,IAC7C,QAAyB,kBAAlBr2F,EAAS97C,MAEhBjE,OAAO+lB,OACL5iB,EACAorB,EAAM+tU,UAAUgB,mBAAmBv9S,EAASq4B,UAEhD,MACEmlR,EAAYhvU,EAAO81D,EAAKoQ,cAErB,CAEL,MAAM5pF,EAAOgzF,EAAUhzF,KAEvB,IAAIxK,EAEJ,GAAIw9F,EAAUx9F,OAAoC,kBAApBw9F,EAAUx9F,MACtC,GACEw9F,EAAUx9F,MAAMwP,MAChBguF,EAAUx9F,MAAMwP,KAAKutV,QACrB7uU,EAAM+tU,UACN,CACA,MACMe,EADUx/P,EAAUx9F,MAAMwP,KAAKutV,OACVt+U,KAAK,IAChC,QAA2B,wBAApBu+U,EAAWp5V,MAClB5D,EAAQkuB,EAAM+tU,UAAUgB,mBAAmBD,EAAWA,WACxD,MACEE,EAAYhvU,EAAO81D,EAAKoQ,eAG1Bp0F,EAA4B,OAApBw9F,EAAUx9F,OAAwBw9F,EAAUx9F,MAItD8C,EAAM0H,GAA0C,CAClD,CAGF,OAAO1H,CACT,CA1PgBu6V,CAAsBnvU,EAAO81D,GACrC9hF,EAAW26V,EAAe3uU,EAAO81D,GASvC,OAPAF,EAAQ51D,EAAOprB,EAAOc,EAAMogF,GAC5B84Q,EAAYh6V,EAAOZ,GAGnBgsB,EAAM6tU,UAAU9xU,MAChBiE,EAAMjL,OAASu5U,EAERtuU,EAAMsE,OAAOwxD,EAAMpgF,EAAMd,EAAOhD,EACzC,CA/IWw9V,CAAcpvU,EAAO81D,EAAMlkF,GAGlB,aAAdkkF,EAAKpgF,KA2FX,SAAgBsqB,EAAO81D,GACrB,GAAIA,EAAKx0E,MAAQw0E,EAAKx0E,KAAKutV,QAAU7uU,EAAM+tU,UAEzC,OACE/tU,EAAM+tU,UAAUsB,gBAAgBv5Q,EAAKx0E,KAAKutV,QAI9CG,EAAYhvU,EAAO81D,EAAKoQ,SAC1B,CAnGWopQ,CAAOtvU,EAAO81D,GAGL,SAAdA,EAAKpgF,KAsJX,SAAcsqB,EAAO81D,EAAMlkF,GAEzB,MAAMgD,EAAQ,CAAC,EAIf,OAFAg6V,EAAYh6V,EAAO+5V,EAAe3uU,EAAO81D,IAElC91D,EAAMsE,OAAOwxD,EAAM91D,EAAM4nN,SAAUhzO,EAAOhD,EACnD,CA5JW+mB,CAAKqH,EAAO81D,EAAMlkF,GAGT,SAAdkkF,EAAKpgF,KAqKX,SAAcstC,EAAG8yC,GACf,OAAOA,EAAKhkF,KACd,CAtKW,CAAKkuB,EAAO81D,QADrB,CAGF,CAoLA,SAASF,EAAQ51D,EAAOprB,EAAOc,EAAMogF,GAEf,kBAATpgF,GAAqBA,IAASsqB,EAAM4nN,UAAY5nN,EAAMmuU,WAC/Dv5V,EAAMkhF,KAAOA,EAEjB,CAYA,SAAS84Q,EAAYh6V,EAAOZ,GAC1B,GAAIA,EAAS9C,OAAS,EAAG,CACvB,MAAMY,EAAQkC,EAAS9C,OAAS,EAAI8C,EAAWA,EAAS,GAEpDlC,IACF8C,EAAMZ,SAAWlC,EAErB,CACF,CA+KA,SAAS68V,EAAe3uU,EAAO81D,GAE7B,MAAM9hF,EAAW,GACjB,IAAIoF,GAAS,EAIb,MAAMm2V,EAAevvU,EAAMkuU,SAAW,IAAI7lT,IAAQ4kT,EAElD,OAAS7zV,EAAQ08E,EAAK9hF,SAAS9C,QAAQ,CACrC,MAAMuE,EAAQqgF,EAAK9hF,SAASoF,GAE5B,IAAIxH,EAEJ,GAAIouB,EAAMkuU,SAAU,CAClB,MAAM5xV,EACW,YAAf7G,EAAMC,KACFD,EAAM4+B,QACS,sBAAf5+B,EAAMC,MACW,sBAAfD,EAAMC,KACND,EAAM6G,UACNgU,EAER,GAAIhU,EAAM,CACR,MAAMwP,EAAQyjV,EAAa/uU,IAAIlkB,IAAS,EACxC1K,EAAM0K,EAAO,IAAMwP,EACnByjV,EAAapnT,IAAI7rC,EAAMwP,EAAQ,EACjC,CACF,CAEA,MAAMvW,EAASgpE,EAAIv+C,EAAOvqB,EAAO7D,QAClB0e,IAAX/a,GAAsBvB,EAASjB,KAAKwC,EAC1C,CAEA,OAAOvB,CACT,CAcA,SAASy6V,EAAezuU,EAAO9L,EAAMpiB,GACnC,MAAMw3B,GAAO,EAAA1L,EAAA,GAAKoC,EAAMjL,OAAQb,GAGhC,KACY,OAAVpiB,QACUwe,IAAVxe,GACkB,kBAAVA,GAAsBwoB,OAAOtB,MAAMlnB,IAH7C,CAeA,GAPIR,MAAMC,QAAQO,KAGhBA,EAAQw3B,EAAKkmU,gBAAiB,OAAO19V,IAAS,OAAOA,IAIjC,UAAlBw3B,EAAKkoB,SAAsB,CAC7B,IAAIm6C,EACe,kBAAV75F,EAAqBA,EA6BlC,SAAoBkuB,EAAOluB,GAEzB,MAAMyD,EAAS,CAAC,EAEhB,IACE,EAAczD,EAAOgrB,EACvB,CAAE,MAAO1hB,GACP,IAAK4kB,EAAMiuU,mBAAoB,CAC7B,MAAM/pU,EAA6B,EAC7B3jB,EAAU,IAAI,IAAa,iCAAkC,CACjEstV,UAAW7tU,EAAM6tU,UACjB3pU,QACAurU,OAAQ,QACR1tV,OAAQ,6BAKV,MAHAxB,EAAQqjB,KAAO5D,EAAMutU,eAAYj9U,EACjC/P,EAAQksB,IAAM4gU,EAAO,gCAEf9sV,CACR,CACF,CAEA,OAAOhL,EAaP,SAASunB,EAASxgB,EAAMxK,GACtB,IAAIF,EAAM0K,EAEc,OAApB1K,EAAIqJ,MAAM,EAAG,KACS,SAApBrJ,EAAIqJ,MAAM,EAAG,KAAerJ,EAAM,MAAQA,EAAIqJ,MAAM,IACxDrJ,EAAMA,EAAIgM,QAAQsvV,EAAewC,IAGnCn6V,EAAO3D,GAAOE,CAChB,CACF,CA1E0C69V,CAAW3vU,EAAOzF,OAAOzoB,IAM/D,MAJoC,QAAhCkuB,EAAMouU,wBACRziQ,EAqKN,SAAoCikQ,GAElC,MAAMC,EAAY,CAAC,EAEnB,IAAI7kV,EAEJ,IAAKA,KAAQ4kV,EACP5C,EAAIn7V,KAAK+9V,EAAW5kV,KACtB6kV,EAAUC,EAA0B9kV,IAAS4kV,EAAU5kV,IAI3D,OAAO6kV,CACT,CAlLoBE,CAA2BpkQ,IAGpC,CAAC,QAASA,EACnB,CAEA,MAAO,CAC8B,UAAnC3rE,EAAM8tU,0BAAwCxkU,EAAKvM,MAC/C,IAAYuM,EAAKkoB,WAAaloB,EAAKkoB,SACnCloB,EAAKgmE,UACTx9F,EAxBF,CA0BF,CAyEA,SAASy8V,EAAsBvuU,EAAO1jB,EAAM0zV,GAE1C,IAAIz6V,EAEJ,GAAKy6V,EAEE,GAAI1zV,EAAK3K,SAAS,KAAM,CAC7B,MAAMq3Q,EAAc1sQ,EAAKmf,MAAM,KAC/B,IAEIq6D,EAFA18E,GAAS,EAIb,OAASA,EAAQ4vQ,EAAY93Q,QAAQ,CAEnC,MAAMgjB,GAAO,QAAiB80P,EAAY5vQ,IACtC,CAAC1D,KAAM,aAAc4G,KAAM0sQ,EAAY5vQ,IACvC,CAAC1D,KAAM,UAAW5D,MAAOk3Q,EAAY5vQ,IACzC08E,EAAOA,EACH,CACEpgF,KAAM,mBACN2oD,OAAQy3B,EACRtkC,SAAUt9B,EACV+7U,SAAU71U,QAAQhhB,GAAuB,YAAd8a,EAAKxe,MAChC0kD,UAAU,GAEZlmC,CACN,EAEA,QAAO4hE,EAAM,mBACbvgF,EAASugF,CACX,MACEvgF,GACE,QAAiB+G,KAAU,SAASwa,KAAKxa,GACrC,CAAC5G,KAAM,aAAc4G,QACrB,CAAC5G,KAAM,UAAW5D,MAAOwK,QA7B/B/G,EAAS,CAACG,KAAM,UAAW5D,MAAOwK,GAkCpC,GAAoB,YAAhB/G,EAAOG,KAAoB,CAC7B,MAAM4G,EAAmD/G,EAAY,MAErE,OAAOy3V,EAAIn7V,KAAKmuB,EAAMqlE,WAAY/oF,GAAQ0jB,EAAMqlE,WAAW/oF,GAAQA,CACrE,CAGA,GAAI0jB,EAAM+tU,UACR,OAAO/tU,EAAM+tU,UAAUgB,mBAAmBx5V,GAG5Cy5V,EAAYhvU,EACd,CAOA,SAASgvU,EAAYhvU,EAAOkwU,GAC1B,MAAM3vV,EAAU,IAAI,IAClB,sDACA,CACEstV,UAAW7tU,EAAM6tU,UACjBqC,QACAT,OAAQ,aACR1tV,OAAQ,6BAMZ,MAHAxB,EAAQqjB,KAAO5D,EAAMutU,eAAYj9U,EACjC/P,EAAQksB,IAAM4gU,EAAO,qDAEf9sV,CACR,CA6BA,SAASuvV,EAA0B9kV,GACjC,IAAI6pB,EAAK7pB,EAAKpN,QAAQgwG,EAAKuiP,GAG3B,MADuB,QAAnBt7T,EAAG55B,MAAM,EAAG,KAAc45B,EAAK,IAAMA,GAClCA,CACT,CAYA,SAAS66T,EAAQ1sT,EAAGhiB,GAClB,OAAOA,EAAGhmB,aACZ,CAUA,SAASm1V,EAAO9pF,GACd,MAAO,IAAMA,EAAGloP,aAClB,sECrzBA,MAAMm9D,EAAK,eAaJ,SAASwP,EAAW1mD,GACzB,MAAwB,kBAAVA,EACK,SAAfA,EAAM1uC,MACJgtU,EAAMt+R,EAAMtyC,OAEd4wU,EAAMt+R,EACZ,CAMA,SAASs+R,EAAM5wU,GACb,MAAiC,KAA1BA,EAAM8L,QAAQ09E,EAAI,GAC3B,sCCjCA,SAAS80Q,EAAyBz8U,GACjC,OAAOA,GAAKA,EAAEo9D,YAAct/E,OAAOC,UAAUb,eAAegB,KAAK8hB,EAAG,WAAaA,EAAW,QAAIA,CACjG,mCAEA,IAMO08U,EAEAC,EACAC,EACAC,EAEAC,EAZHC,EAAa,CAAC39U,QAAS,CAAC,GAMrBs9U,EACF,iIACEC,EAAsB,2BACtBC,EAAkB,oBAClBC,EAAsB,wCAgK1BE,EAFO39U,QA5JH09U,EAAa,CAOfE,iBAAkB,SAAUC,EAASC,EAAa7zU,GAKhD,GAJAA,EAAOA,GAAQ,CAAC,EAEhB4zU,EAAUA,EAAQnmQ,SAClBomQ,EAAcA,EAAYpmQ,QACR,CAIhB,IAAKztE,EAAK8zU,gBACR,OAAOF,EAET,IAAIG,EAAwBN,EAAWO,SAASJ,GAChD,IAAKG,EACH,MAAM,IAAI31U,MAAM,mCAKlB,OAHA21U,EAAsB3zV,KAAOqzV,EAAWQ,cACtCF,EAAsB3zV,MAEjBqzV,EAAWS,kBAAkBH,EACtC,CACA,IAAII,EAAgBV,EAAWO,SAASH,GACxC,IAAKM,EACH,MAAM,IAAI/1U,MAAM,uCAElB,GAAI+1U,EAAcpW,OAGhB,OAAK/9T,EAAK8zU,iBAGVK,EAAc/zV,KAAOqzV,EAAWQ,cAAcE,EAAc/zV,MACrDqzV,EAAWS,kBAAkBC,IAH3BN,EAKX,IAAIO,EAAYX,EAAWO,SAASJ,GACpC,IAAKQ,EACH,MAAM,IAAIh2U,MAAM,mCAElB,IAAKg2U,EAAUC,QAAUD,EAAUh0V,MAA8B,MAAtBg0V,EAAUh0V,KAAK,GAAY,CAGpE,IAAIk0V,EAAYhB,EAAoB90U,KAAK41U,EAAUh0V,MACnDg0V,EAAUC,OAASC,EAAU,GAC7BF,EAAUh0V,KAAOk0V,EAAU,EAC7B,CACIF,EAAUC,SAAWD,EAAUh0V,OACjCg0V,EAAUh0V,KAAO,KAEnB,IAAIm0V,EAAa,CAGfxW,OAAQqW,EAAUrW,OAClBsW,OAAQF,EAAcE,OACtBj0V,KAAM,KACNmnC,OAAQ4sT,EAAc5sT,OACtBqiG,MAAOuqN,EAAcvqN,MACrB4qN,SAAUL,EAAcK,UAE1B,IAAKL,EAAcE,SAIjBE,EAAWF,OAASD,EAAUC,OAGA,MAA1BF,EAAc/zV,KAAK,IACrB,GAAK+zV,EAAc/zV,KAgBZ,CAKL,IAAIq0V,EAAcL,EAAUh0V,KACxBs0V,EACFD,EAAYv+V,UAAU,EAAGu+V,EAAYlyT,YAAY,KAAO,GACxD4xT,EAAc/zV,KAChBm0V,EAAWn0V,KAAOqzV,EAAWQ,cAAcS,EAC7C,MAvBEH,EAAWn0V,KAAOg0V,EAAUh0V,KAIvB+zV,EAAc5sT,SACjBgtT,EAAWhtT,OAAS6sT,EAAU7sT,OAIzB4sT,EAAcvqN,QACjB2qN,EAAW3qN,MAAQwqN,EAAUxqN,QAqBvC,OALwB,OAApB2qN,EAAWn0V,OACbm0V,EAAWn0V,KAAO4f,EAAK8zU,gBACnBL,EAAWQ,cAAcE,EAAc/zV,MACvC+zV,EAAc/zV,MAEbqzV,EAAWS,kBAAkBK,EACtC,EACAP,SAAU,SAAUvkU,GAClB,IAAIlR,EAAQ80U,EAAU70U,KAAKiR,GAC3B,OAAKlR,EAGE,CACLw/T,OAAQx/T,EAAM,IAAM,GACpB81U,OAAQ91U,EAAM,IAAM,GACpBne,KAAMme,EAAM,IAAM,GAClBgpB,OAAQhpB,EAAM,IAAM,GACpBqrH,MAAOrrH,EAAM,IAAM,GACnBi2U,SAAUj2U,EAAM,IAAM,IARf,IAUX,EACA01U,cAAe,SAAU7zV,GAgBvB,IATAA,EAAOA,EAAKqe,MAAM,IAAI8hC,UAAUjnC,KAAK,IAAI1Y,QAAQ2yV,EAAiB,IAUhEnzV,EAAKlM,UAAYkM,EAAOA,EAAKQ,QAAQ4yV,EAAqB,KAAKt/V,SAEjE,OAAOkM,EAAKqe,MAAM,IAAI8hC,UAAUjnC,KAAK,GACvC,EACA46U,kBAAmB,SAAU31U,GAC3B,OACEA,EAAMw/T,OACNx/T,EAAM81U,OACN91U,EAAMne,KACNme,EAAMgpB,OACNhpB,EAAMqrH,MACNrrH,EAAMi2U,QAEV,GAOL,IAAIG,EAAoBjB,EAAW39U,QAEnC,SAASi4B,EAAQh5C,EAAGG,GAClB,IAAIF,EAAIR,OAAOiC,KAAK1B,GACpB,GAAIP,OAAOw5C,sBAAuB,CAChC,IAAI9xC,EAAI1H,OAAOw5C,sBAAsBj5C,GACrCG,IAAMgH,EAAIA,EAAEuiB,QAAO,SAAUvpB,GAC3B,OAAOV,OAAOo4C,yBAAyB73C,EAAGG,GAAGy2C,UAC/C,KAAK32C,EAAEc,KAAK0kB,MAAMxlB,EAAGkH,EACvB,CACA,OAAOlH,CACT,CACA,SAASs1L,EAAev1L,GACtB,IAAK,IAAIG,EAAI,EAAGA,EAAIklB,UAAUnmB,OAAQiB,IAAK,CACzC,IAAIF,EAAI,MAAQolB,UAAUllB,GAAKklB,UAAUllB,GAAK,CAAC,EAC/CA,EAAI,EAAI64C,EAAQv5C,OAAOQ,IAAI,GAAIqI,SAAQ,SAAUnI,GAC/Cq1L,EAAgBx1L,EAAGG,EAAGF,EAAEE,GAC1B,IAAKV,OAAO05C,0BAA4B15C,OAAOu7C,iBAAiBh7C,EAAGP,OAAO05C,0BAA0Bl5C,IAAM+4C,EAAQv5C,OAAOQ,IAAIqI,SAAQ,SAAUnI,GAC7IV,OAAOg5C,eAAez4C,EAAGG,EAAGV,OAAOo4C,yBAAyB53C,EAAGE,GACjE,GACF,CACA,OAAOH,CACT,CAWA,SAAS0uR,EAAezuR,GACtB,IAAIhB,EAXN,SAAsBgB,EAAGE,GACvB,GAAI,iBAAmBF,IAAMA,EAAG,OAAOA,EACvC,IAAID,EAAIC,EAAE04C,OAAO81O,aACjB,QAAI,IAAWzuR,EAAG,CAChB,IAAIf,EAAIe,EAAEH,KAAKI,EAAGE,GAAK,WACvB,GAAI,iBAAmBlB,EAAG,OAAOA,EACjC,MAAM,IAAI2oB,UAAU,+CACtB,CACA,OAAQ,WAAaznB,EAAIooB,OAASD,QAAQroB,EAC5C,CAEUquR,CAAaruR,EAAG,UACxB,MAAO,iBAAmBhB,EAAIA,EAAIspB,OAAOtpB,EAC3C,CACA,SAASu2L,EAAgB3zK,EAAKjiB,EAAKE,GAYjC,OAXAF,EAAM8uR,EAAe9uR,MACViiB,EACTpiB,OAAOg5C,eAAe52B,EAAKjiB,EAAK,CAC9BE,MAAOA,EACP82C,YAAY,EACZD,cAAc,EACdD,UAAU,IAGZ70B,EAAIjiB,GAAOE,EAEN+hB,CACT,CACA,SAAS0D,IAYP,OAXAA,EAAW9lB,OAAO+lB,OAAS/lB,OAAO+lB,OAAOY,OAAS,SAAUhc,GAC1D,IAAK,IAAInL,EAAI,EAAGA,EAAIomB,UAAUnmB,OAAQD,IAAK,CACzC,IAAI8Q,EAASsV,UAAUpmB,GACvB,IAAK,IAAIW,KAAOmQ,EACVtQ,OAAOC,UAAUb,eAAegB,KAAKkQ,EAAQnQ,KAC/CwK,EAAOxK,GAAOmQ,EAAOnQ,GAG3B,CACA,OAAOwK,CACT,EACOmb,EAASE,MAAMC,KAAML,UAC9B,CAGA,MAAMu6U,EAAiBt3U,OAAOrB,UAAY,SAAUnnB,GAClD,MAAwB,kBAAVA,GAAsBmnB,SAASnnB,EAC/C,EAGMgqI,EAAgBxhH,OAAOwhH,eAAiB,SAAUhqI,GACtD,MAAwB,kBAAVA,GAAsBu1B,KAAK+2B,IAAItsD,IAAUm1Q,CACzD,EACMA,EAAmB3sP,OAAO2sP,kBAAoB,iBAEpD,IAAIn6C,EAAsB,SAAUA,GAyDlC,OAxDAA,EAAwB,gBAAI,oBAC5BA,EAAuB,eAAI,mBAC3BA,EAAwB,gBAAI,oBAC5BA,EAAuB,eAAI,mBAC3BA,EAAqB,aAAI,iBACzBA,EAAsB,cAAI,kBAC1BA,EAAuB,eAAI,mBAC3BA,EAAyB,iBAAI,qBAC7BA,EAAwB,gBAAI,oBAC5BA,EAAmB,WAAI,eACvBA,EAAwB,gBAAI,oBAC5BA,EAAuB,eAAI,mBAC3BA,EAAyB,iBAAI,qBAC7BA,EAAwB,gBAAI,oBAC5BA,EAAwB,gBAAI,oBAC5BA,EAAwB,gBAAI,oBAC5BA,EAAuB,eAAI,mBAC3BA,EAAsB,cAAI,kBAC1BA,EAAqB,aAAI,iBACzBA,EAAsB,cAAI,kBAC1BA,EAA0B,kBAAI,qBAC9BA,EAAuB,eAAI,mBAC3BA,EAA6B,qBAAI,wBACjCA,EAA8B,sBAAI,yBAClCA,EAA6B,qBAAI,wBACjCA,EAA4B,oBAAI,uBAChCA,EAA2B,mBAAI,sBAC/BA,EAAgC,wBAAI,2BACpCA,EAAgC,wBAAI,2BACpCA,EAA8B,sBAAI,yBAClCA,EAA+B,uBAAI,0BACnCA,EAA8B,sBAAI,yBAClCA,EAAgC,wBAAI,2BACpCA,EAAoB,YAAI,gBACxBA,EAAqC,6BAAI,8BACzCA,EAAuB,eAAI,kBAC3BA,EAAqB,aAAI,iBACzBA,EAAoC,4BAAI,8BACxCA,EAAoB,YAAI,gBACxBA,EAAuB,eAAI,mBAC3BA,EAAkC,0BAAI,4BACtCA,EAA8B,sBAAI,yBAClCA,EAA8B,sBAAI,yBAClCA,EAAoB,YAAI,gBACxBA,EAAsB,cAAI,kBAC1BA,EAAqB,aAAI,iBACzBA,EAAiB,SAAI,aACrBA,EAA+B,uBAAI,yBACnCA,EAA+B,uBAAI,yBACnCA,EAAc,MAAI,WAClBA,EAAmB,WAAI,gBACvBA,EAAoB,YAAI,gBACxBA,EAAmB,WAAI,eACvBA,EAAiC,yBAAI,2BACrCA,EAA4B,oBAAI,uBAChCA,EAAiC,yBAAI,4BAC9BA,CACT,CA1D0B,CA0DxB,CAAC,GAMC+kI,EAA0B,SAAUA,GAMtC,OALAA,EAA0B,cAAI,eAC9BA,EAAwB,YAAI,aAC5BA,EAA6B,iBAAI,iBACjCA,EAAsB,UAAI,WAC1BA,EAAwB,YAAI,aACrBA,CACT,CAP8B,CAO5B,CAAC,GACCC,EAA4B,SAAUA,GA2CxC,OA1CAA,EAAiC,mBAAI,kBACrCA,EAAmC,qBAAI,oBACvCA,EAAoC,sBAAI,qBACxCA,EAA+C,iCAAI,+BACnDA,EAAgD,kCAAI,gCACpDA,EAA2D,6CAAI,0CAC/DA,EAA0D,4CAAI,yCAC9DA,EAA+C,iCAAI,+BACnDA,EAAkD,oCAAI,kCACtDA,EAA+C,iCAAI,+BACnDA,EAAkC,oBAAI,oBACtCA,EAAoC,sBAAI,sBACxCA,EAAqC,uBAAI,uBACzCA,EAAiD,mCAAI,kCACrDA,EAAgC,kBAAI,kBACpCA,EAA+B,iBAAI,iBACnCA,EAAiC,mBAAI,mBACrCA,EAAkC,oBAAI,oBACtCA,EAAiC,mBAAI,mBACrCA,EAAqC,uBAAI,sBACzCA,EAAuC,yBAAI,wBAC3CA,EAAkC,oBAAI,yBACtCA,EAA0C,4BAAI,2BAC9CA,EAA8B,gBAAI,gBAClCA,EAAgC,kBAAI,kBACpCA,EAAiC,mBAAI,mBACrCA,EAAiC,mBAAI,mBACrCA,EAAuB,SAAI,UAC3BA,EAAgC,kBAAI,kBACpCA,EAA6B,eAAI,eACjCA,EAA+B,iBAAI,iBACnCA,EAAqC,uBAAI,sBACzCA,EAA+C,iCAAI,gCACnDA,EAAkC,oBAAI,oBACtCA,EAAqC,uBAAI,uBACzCA,EAAmC,qBAAI,qBACvCA,EAAgC,kBAAI,kBACpCA,EAAoC,sBAAI,qBACxCA,EAAoC,sBAAI,qBACxCA,EAAiC,mBAAI,oBACrCA,EAA+B,iBAAI,UACnCA,EAAsB,QAAI,UACnBA,CACT,CA5CgC,CA4C9B,CAAC,GAEH,MAAMrpU,EAAO,WAAiB,EACxBspU,EAAa,CACjBlhT,MAAOpoB,EACP1Q,MAAO0Q,EACPvQ,IAAKuQ,EACLrD,KAAMqD,EACNa,KAAMb,EACNrtB,MAAOqtB,GAET,IAAIupU,EAAiBD,EAkBrB,SAASE,EAAsBC,KAAgBl9N,GAC7CA,EAAU16H,SAAQ,SAAU5E,GAC1Bs8V,EAAet8V,GAAQw8V,EAAYx8V,GAAQw8V,EAAYx8V,GAAM0iB,KAAK85U,GATtE,SAAwBx8V,GACtB,MAAM6rG,EAAO76E,KAAK5O,QAAQpiB,GAC1B,OAAI6rG,EACKA,EAAKnpF,KAAKsO,KAAK5O,QAAS,IAAIpiB,QAE9B+yB,CACT,CAGqF0pU,CAAez8V,EAClG,GACF,CAmBA,MAAMihB,EAASq7U,EAETI,EAA2B,gBAC3BC,EAAkB,4BAGxB,MAAMC,EACJ,WAAA/4T,CAAYykH,GACW,kBAAVA,IACTA,EAAQs0M,EAASC,cAAcv0M,IAEjCzmI,EAASG,KAAMsmI,EACjB,CACA,eAAIw0M,GACF,OAAO/gW,OAAOiC,KAAKgkB,MAAMgE,QAAOgoN,GAAiC,OAAzBA,EAAKxwO,UAAU,EAAG,IAC5D,CACA,cAAAu/V,CAAejsN,GACb,MAAMksN,EAAWn+U,SAASmD,KAAK8uH,GAAW,IAC1C,OAAIksN,EAAWp4U,OAAO2sP,iBACb3yP,IAEFo+U,CACT,CACA,kBAAAC,CAAmBnsN,GACjB,GAAI9uH,KAAK8uH,GAAW,CAClB,IAAI0rI,GAAex6P,KAAK8uH,IAAa,MAAMvrI,MAAM,GACjDi3Q,GAAoC,EAArBA,EAAYhhR,OAAa,IAAM,IAAMghR,EACpD,MAAMpgR,EAAQ,IAAI4yG,WAAWwtK,EAAYhhR,OAAS,GAClD,IAAK,IAAID,EAAI,EAAGA,EAAIihR,EAAYhhR,OAAS,EAAGD,IAC1Ca,EAAMb,GAAKsjB,SAAS29P,EAAYj3Q,MAAU,EAAJhK,EAAW,EAAJA,EAAQ,GAAI,IAE3D,OAAOa,CACT,CACE,OAAO,IAEX,CACA,0BAAA8gW,CAA2BpsN,GACzB,MAAMksN,EAAWn+U,SAASmD,KAAK8uH,GAAW,IAC1C,OAAIksN,EAAWp4U,OAAO2sP,iBACb3yP,IAEFo+U,CACT,CACA,oBAAAG,CAAqBrsN,GACnB,OAAOr7H,WAAWuM,KAAK8uH,GACzB,CACA,aAAAssN,CAActsN,EAAUvxH,GACtB,MAAMnjB,EAAQ4lB,KAAK8uH,GACnB,OAAO10I,EAAQqZ,WAAWrZ,GAASmjB,CACrC,CACA,gBAAA89U,CAAiBvsN,GACf,OAAO9uH,KAAK8uH,EACd,CACA,IAAA+oB,CAAK/oB,GACH,MAA0B,QAAnB9uH,KAAK8uH,EACd,CACA,iBAAAwsN,CAAkBxsN,GAChB,MAAM3iG,EAAMuuT,EAAyB52U,KAAK9D,KAAK8uH,IAC/C,GAAY,OAAR3iG,EAGJ,MAAO,CACLhvC,MAAO0f,SAASsvB,EAAI,GAAI,IACxB/uC,OAAQyf,SAASsvB,EAAI,GAAI,IAE7B,CACA,oBAAO0uT,CAAcr2T,GACnB,IAAIjhB,EACJ,MAAM+iI,EAAQ,CAAC,EAGf,IADAq0M,EAAgBn8P,UAAY,EACqB,QAAzCj7E,EAAQo3U,EAAgB72U,KAAK0gB,KAAkB,CACrD,IAAIpqC,EAAQmpB,EAAM,GACW,IAAzBnpB,EAAMgB,QAJE,MAIsBhB,EAAMytC,YAJ5B,OAImDztC,EAAMZ,OAAS,IAC5EY,EAAQA,EAAMmJ,MAAM,GAAI,IAG1B+iJ,EADa/iI,EAAM,GAAGwvE,QACR34F,CAChB,CACA,OAAOksJ,CACT,EAQF,SAASi1M,EAAkBzsN,GACzB,MAAoB,eAAbA,GAA0C,cAAbA,CACtC,CACA,MAAM0sN,EACJ,WAAA35T,CAAY45T,EAAeC,GAKzB,GAJA17U,KAAKgsN,UAAO,EACZhsN,KAAK27U,gBAAa,EAClB37U,KAAK47U,cAAW,EAChB57U,KAAK67U,wBAAqB,EACtBH,EAAqB,CACvB,MAAMI,EAAeJ,EAAoB1vH,KACzC,IAAK,MAAM9xO,KAAO4hW,EAChB,GAAI/hW,OAAOC,UAAUb,eAAegB,KAAKshW,EAAevhW,IAAQuhW,EAAcvhW,KAAS4hW,EAAa5hW,GAAM,CACxG+kB,EAAOyO,KAAK,6BAA6BxzB,wCAA0CuhW,EAAcM,OACjG/7U,KAAK67U,mBAAqB3hW,EAC1B,KACF,CAGFuhW,EAAgB57U,EAAS,IAAI+6U,EAAS,CAAC,GAAIkB,EAAcL,EAC3D,CAGA,GAFAz7U,KAAKgsN,KAAOyvH,EACZz7U,KAAK27U,WAAa,IAAIzyV,KAAKuyV,EAAc,eACrC,aAAcz7U,KAAKgsN,KAAM,CAC3B,MAAMh4K,EAAU,IAAI9qD,KAAK8W,KAAKgsN,KAAK,aAC/BkuH,EAAelmS,EAAQ/jC,aACzBjQ,KAAK47U,SAAW5nS,EAEpB,CACF,CACA,MAAInoD,GACF,OAAOmU,KAAKgsN,KAAK+vH,EACnB,CACA,SAAI,GACF,OAAO/7U,KAAKgsN,KAAKgwH,KACnB,CACA,aAAIpoS,GACF,OAAO5zC,KAAK27U,UACd,CACA,WAAI3nS,GACF,GAAIh0C,KAAK47U,SACP,OAAO57U,KAAK47U,SAEd,MAAMlxV,EAAWsV,KAAKtV,SACtB,OAAiB,OAAbA,EACK,IAAIxB,KAAK8W,KAAK27U,WAAW1rU,UAAuB,IAAXvlB,GAEvC,IACT,CACA,YAAIA,GACF,GAAI,aAAcsV,KAAKgsN,KAAM,CAC3B,MAAMthO,EAAWsV,KAAKgsN,KAAKmvH,qBAAqB,YAChD,GAAIjB,EAAexvV,GACjB,OAAOA,CAEX,MAAO,GAAIsV,KAAK47U,SACd,OAAQ57U,KAAK47U,SAAS3rU,UAAYjQ,KAAK27U,WAAW1rU,WAAa,IAEjE,OAAO,IACT,CACA,mBAAIgsU,GACF,MAAI,qBAAsBj8U,KAAKgsN,KACtBhsN,KAAKgsN,KAAKmvH,qBAAqB,oBAEjC,IACT,CACA,aAAIe,GACF,OAAOl8U,KAAKgsN,KAAKn0E,KAAK,cACxB,CACA,WAAIv+F,GACF,QAASt5C,KAAKnU,KAAOmU,KAAK67U,oBAAsB3B,EAAel6U,KAAK4zC,UAAU3jC,aAAiC,OAAlBjQ,KAAKtV,UAAqBsV,KAAKtV,UAAY,MAAQsV,KAAKk8U,aAAel8U,KAAKmnN,MAC3K,EAGF,MAAMg1H,EACJ,WAAAt6T,GACE7hB,KAAKu6B,SAAU,EACfv6B,KAAK8jN,OAAS,EACd9jN,KAAKy3I,MAAQ,EACbz3I,KAAK1V,MAAQ,EACb0V,KAAKo8U,WAAa,EAClBp8U,KAAKq8U,WAAa,EAClBr8U,KAAKvjB,QAAU,CACby+B,MAAO,EACP4lB,MAAO,EACP3lB,IAAK,GAEPnb,KAAKs8U,QAAU,CACbphU,MAAO,EACPC,IAAK,GAEPnb,KAAKu8U,UAAY,CACfrhU,MAAO,EACP4lB,MAAO,EACP3lB,IAAK,EAET,EAGF,IAAIqhU,EACK,QADLA,EAEK,QAFLA,EAGU,aAEd,MAAMC,EACJ,WAAA56T,CAAY66T,GACV18U,KAAK28U,WAAa,KAClB38U,KAAK48U,KAAO,KAEZ58U,KAAK08U,aAAU,EAEf18U,KAAK68U,YAAS,EAEd78U,KAAK88U,kBAAoB,CACvB,CAACN,GAA8B,KAC/B,CAACA,GAA8B,KAC/B,CAACA,GAAmC,MAEtCx8U,KAAK08U,QAAUA,CACjB,CAGA,YAAAK,CAAa3iW,EAAOk9J,GAClB,MAAMzqH,EAASzyC,EAAM2pB,MAAM,IAAK,GAChC,IAAImX,EAEFA,EADoB,IAAlB2R,EAAOrzC,QACY,MAAZ89J,OAAmB,EAASA,EAAS0lM,qBAAuB,EAE7DngV,SAASgwB,EAAO,IAE1B7sB,KAAK28U,WAAa,CAACzhU,EAAOre,SAASgwB,EAAO,IAAM3R,EAClD,CACA,aAAI+hU,GACF,OAAKj9U,KAAK28U,WAGH38U,KAAK28U,WAFH,EAGX,CACA,wBAAIO,GACF,OAAOl9U,KAAKi9U,UAAU,EACxB,CACA,sBAAID,GACF,OAAOh9U,KAAKi9U,UAAU,EACxB,CACA,OAAIloU,GAMF,OALK/U,KAAK48U,MAAQ58U,KAAK08U,SAAW18U,KAAK68U,SACrC78U,KAAK48U,KAAO3C,EAAkBhB,iBAAiBj5U,KAAK08U,QAAS18U,KAAK68U,OAAQ,CACxEzD,iBAAiB,KAGdp5U,KAAK48U,MAAQ,EACtB,CACA,OAAI7nU,CAAI36B,GACN4lB,KAAK48U,KAAOxiW,CACd,EAMF,MAAM81O,UAAiBusH,EACrB,WAAA56T,CAAY7jC,EAAM0+V,GAChBt2T,MAAMs2T,GACN18U,KAAKm9U,aAAe,KACpBn9U,KAAKo9U,mBAAqB,KAC1Bp9U,KAAKq9U,gBAAkB,KACvBr9U,KAAKs9U,QAAU,GAEft9U,KAAKtV,SAAW,EAEhBsV,KAAKu9U,GAAK,EAIVv9U,KAAKw9U,eAAY,EAEjBx9U,KAAKhiB,UAAO,EAEZgiB,KAAK++O,OAAS,KAEd/+O,KAAKy9U,UAAY,KAEjBz9U,KAAKkjO,OAAS,EAEdljO,KAAK4iG,GAAK,EAEV5iG,KAAK09U,cAAW,EAEhB19U,KAAK29U,YAAS,EAEd39U,KAAK49U,cAAW,EAEhB59U,KAAK69U,YAAS,EAEd79U,KAAKkb,MAAQ,EAEblb,KAAK89U,cAAW,EAEhB99U,KAAK+9U,iBAAc,EAEnB/9U,KAAKg+U,eAAY,EAEjBh+U,KAAK4qS,MAAQ,IAAIuxC,EAEjBn8U,KAAKpW,UAAO,EAEZoW,KAAKi+U,aAAc,EAEnBj+U,KAAKlgB,MAAQ,KAEbkgB,KAAKk+U,YAAc,KAEnBl+U,KAAKm+U,aAAU,EAEfn+U,KAAK8pH,SAAM,EAEX9pH,KAAKo+U,MAAQ,EACbp+U,KAAKhiB,KAAOA,CACd,CACA,eAAIqgW,GACF,MAAM,UACJb,GACEx9U,KACJ,IAAKw9U,IAAcx9U,KAAKm9U,aACtB,OAAO,KAET,IAAKn9U,KAAKm9U,cAAgBn9U,KAAKw9U,YAAcx9U,KAAKw9U,UAAUc,KAAM,CAChE,MAAMpkW,EAAM8lB,KAAKw9U,UAAU/5N,SAC3B,GAAIvpI,EACF8lB,KAAKm9U,aAAejjW,EAAIqkW,eAAev+U,KAAKu9U,QACvC,CACL,MAAMiB,EAAazkW,OAAOiC,KAAKgkB,KAAKw9U,WACpC,GAA0B,IAAtBgB,EAAWhlW,OACb,OAAOwmB,KAAKm9U,aAAen9U,KAAKw9U,UAAUgB,EAAW,IAAID,eAAev+U,KAAKu9U,GAEjF,CACF,CACA,OAAOv9U,KAAKm9U,YACd,CACA,OAAIhiU,GACF,OAAOnb,KAAKkb,MAAQlb,KAAKtV,QAC3B,CACA,sBAAI+zV,GACF,GAA6B,OAAzBz+U,KAAKq9U,gBACP,OAAO,KAET,IAAKnD,EAAel6U,KAAKq9U,iBACvB,OAAO,KAET,MAAM3yV,EAAYwvV,EAAel6U,KAAKtV,UAAgBsV,KAAKtV,SAAT,EAClD,OAAOsV,KAAKq9U,gBAA6B,IAAX3yV,CAChC,CACA,aAAIg0V,GACF,IAAIC,EAIJ,GAAgD,OAA3CA,EAAqB3+U,KAAKm9U,eAAyBwB,EAAmBD,UACzE,OAAO,EACF,GAAI1+U,KAAKw9U,UAAW,CACzB,MAAMgB,EAAazkW,OAAOiC,KAAKgkB,KAAKw9U,WAC9B3hV,EAAM2iV,EAAWhlW,OACvB,GAAIqiB,EAAM,GAAa,IAARA,GAAamE,KAAKw9U,UAAUgB,EAAW,IAAIE,UACxD,OAAO,CAEX,CACA,OAAO,CACT,CACA,YAAAE,CAAaC,GACX,GAAI7+U,KAAKw9U,UAAW,CAClB,MAAMtjW,EAAM8lB,KAAKw9U,UAAUqB,GACvB3kW,IAAQ8lB,KAAKm9U,eACfn9U,KAAKm9U,aAAejjW,EAAIqkW,eAAev+U,KAAKu9U,IAEhD,CACF,CACA,aAAAuB,GACE,IAAIC,EAAcC,EACc,OAA/BD,EAAe/+U,KAAK++O,SAA2BggG,EAAa/jT,QACvB,OAArCgkT,EAAkBh/U,KAAKy9U,YAA8BuB,EAAgBhkT,OACxE,CACA,uBAAAikT,CAAwBjhW,EAAM0/V,EAAUC,EAAQC,EAAUC,EAAQ7+N,GAAU,GAC1E,MAAM,kBACJ89N,GACE98U,KACE4R,EAAOkrU,EAAkB9+V,GAC1B4zB,GAULA,EAAK8rU,SAAW/tU,KAAKjT,IAAIkV,EAAK8rU,SAAUA,GACxC9rU,EAAK+rU,OAAShuU,KAAKhT,IAAIiV,EAAK+rU,OAAQA,GACpC/rU,EAAKgsU,SAAWjuU,KAAKjT,IAAIkV,EAAKgsU,SAAUA,GACxChsU,EAAKisU,OAASluU,KAAKhT,IAAIiV,EAAKisU,OAAQA,IAZlCf,EAAkB9+V,GAAQ,CACxB0/V,WACAC,SACAC,WACAC,SACA7+N,UAQN,CACA,yBAAAkgO,GACE,MAAM,kBACJpC,GACE98U,KACJ88U,EAAkBN,GAA+B,KACjDM,EAAkBN,GAA+B,KACjDM,EAAkBN,GAAoC,IACxD,EAMF,MAAM2C,UAAa1C,EACjB,WAAA56T,CAAYu9T,EAAWC,EAAM3C,EAASh7V,EAAO41J,GAC3ClxH,MAAMs2T,GACN18U,KAAKs/U,WAAa,EAClBt/U,KAAKtV,SAAW,EAChBsV,KAAK8pH,KAAM,EACX9pH,KAAKu/U,aAAc,EACnBv/U,KAAK68U,YAAS,EACd78U,KAAK85U,cAAW,EAChB95U,KAAKte,WAAQ,EACbse,KAAK4qS,MAAQ,IAAIuxC,EACjBn8U,KAAKtV,SAAW00V,EAAUjE,qBAAqB,YAC/Cn7U,KAAK8pH,IAAMs1N,EAAUvnM,KAAK,OAC1B73I,KAAKu/U,YAAcH,EAAUvnM,KAAK,eAClC73I,KAAK68U,OAASuC,EAAU/D,iBAAiB,OACzCr7U,KAAK85U,SAAWuF,EAChBr/U,KAAKte,MAAQA,EACb,MAAMu7V,EAAYmC,EAAU/D,iBAAiB,aACzC4B,GACFj9U,KAAK+8U,aAAaE,EAAW3lM,GAE3BA,IACFt3I,KAAKs/U,WAAahoM,EAASgoM,WAAahoM,EAAS5sJ,SAErD,CACA,SAAIwwB,GACF,OAAOlb,KAAK85U,SAAS5+T,MAAQlb,KAAKs/U,UACpC,CACA,OAAInkU,GACF,OAAOnb,KAAKkb,MAAQlb,KAAKtV,QAC3B,CACA,UAAIo5N,GACF,MAAM,kBACJg5H,GACE98U,KACJ,SAAU88U,EAAkBn7Q,OAASm7Q,EAAkBp8H,OAASo8H,EAAkB0C,WACpF,EAQF,MAAMC,EACJ,WAAA59T,CAAY69T,GACV1/U,KAAK2/U,UAAW,EAChB3/U,KAAK4/U,gBAAiB,EACtB5/U,KAAK6/U,2BAAwB,EAC7B7/U,KAAK8/U,MAAQ,EACb9/U,KAAK+/U,MAAQ,EACb//U,KAAKggV,eAAY,EACjBhgV,KAAKigV,kBAAe,EACpBjgV,KAAKkgV,SAAW,KAChBlgV,KAAKmgV,gBAAa,EAClBngV,KAAKogV,MAAO,EACZpgV,KAAKqgV,UAAY,EACjBrgV,KAAKsgV,sBAAmB,EACxBtgV,KAAK0lK,SAAU,EACf1lK,KAAKugV,UAAW,EAChBvgV,KAAKwgV,uBAAoB,EAEzBxgV,KAAKygV,OAAS,EACdzgV,KAAK0gV,QAAU,EACf1gV,KAAK2gV,QAAU,EACf3gV,KAAK4gV,gBAAkB,KACvB5gV,KAAK6gV,eAAiB,EACtB7gV,KAAK8gV,cAAgB,EACrB9gV,KAAKhiB,KAAO,KACZgiB,KAAK+U,SAAM,EACX/U,KAAK+gV,KAAO,GACZ/gV,KAAKiT,QAAU,KACfjT,KAAKghV,gBAAiB,EACtBhhV,KAAKihV,aAAe,EACpBjhV,KAAKkhV,mBAAoB,EACzBlhV,KAAKmhV,gBAAkB,EACvBnhV,KAAKohV,+BAA4B,EACjCphV,KAAKqhV,aAAe,EACpBrhV,KAAKshV,SAAW,EAChBthV,KAAKuhV,WAAa,EAClBvhV,KAAKwhV,iBAAc,EACnBxhV,KAAKyhV,sBAAmB,EACxBzhV,KAAK0hV,WAAa,EAClB1hV,KAAK2hV,uBAAoB,EACzB3hV,KAAK4hV,eAAiB,EACtB5hV,KAAK6hV,aAAe,EACpB7hV,KAAK8hV,WAAa,EAClB9hV,KAAK+hV,SAAW,EAChB/hV,KAAKgiV,wBAAqB,EAC1BhiV,KAAKiiV,qBAAuB,KAC5BjiV,KAAKkiV,aAAe,KACpBliV,KAAKmiV,iBAAkB,EACvBniV,KAAKggV,UAAY,GACjBhgV,KAAKgiV,mBAAqB,GAC1BhiV,KAAKmgV,WAAa,CAAC,EACnBngV,KAAK+U,IAAM2qU,CACb,CACA,QAAA0C,CAAS9qM,GACP,IAAKA,EAGH,OAFAt3I,KAAKugV,UAAW,OAChBvgV,KAAK0lK,SAAU,GAGjB,MAAM28K,EAAariV,KAAKsiV,WAAahrM,EAASgrM,WACxCC,EAAgBviV,KAAKwiV,cAAgBlrM,EAASkrM,cACpDxiV,KAAK0lK,QAAU1lK,KAAK+/U,QAAUzoM,EAASyoM,SAAWwC,KAAmBF,IAAeriV,KAAKogV,KACzFpgV,KAAKugV,SAAWvgV,KAAK+/U,MAAQzoM,EAASyoM,OAASsC,EAAa,GAAoB,IAAfA,GAAoBE,EAAgB,EACjGviV,KAAK0lK,SAAW1lK,KAAKugV,SACvBvgV,KAAKygV,OAAS9wU,KAAKq2B,MAAwB,GAAlBsxG,EAASmpM,QAElCzgV,KAAKygV,OAASnpM,EAASmpM,OAAS,EAElCzgV,KAAKwgV,kBAAoBlpM,EAASkpM,iBACpC,CACA,sBAAIiC,GACF,QAAIziV,KAAKggV,UAAUxmW,QACV0gW,EAAel6U,KAAKggV,UAAUhgV,KAAKggV,UAAUxmW,OAAS,GAAG6jW,gBAGpE,CACA,uBAAIqF,GACF,OAAO1iV,KAAK6/U,uBAAyB7/U,KAAK6gV,gBAlFd,EAmF9B,CACA,SAAI8B,GACF,MAAMC,EAAU5iV,KAAK6hV,aAAe7hV,KAAK4hV,eACzC,GAAIgB,EAAU,EAAG,CAEf,OAAqB,KADD5iV,KAAK+hV,SAAW/hV,KAAK8hV,YACbc,CAC9B,CACA,OAAO,CACT,CACA,QAAIC,GACF,OAAO7iV,KAAK8iV,SAAW9iV,KAAK+iV,WAC9B,CACA,WAAID,GACF,IAAIE,EACJ,OAAwC,OAAnCA,EAAiBhjV,KAAKkgV,WAAqB8C,EAAexpW,OACtDwmB,KAAKkgV,SAASlgV,KAAKkgV,SAAS1mW,OAAS,GAAG2hC,IAE1Cnb,KAAK+iV,WACd,CACA,eAAIA,GACF,IAAIE,EACJ,OAA0C,OAArCA,EAAkBjjV,KAAKggV,YAAsBiD,EAAgBzpW,OACzDwmB,KAAKggV,UAAUhgV,KAAKggV,UAAUxmW,OAAS,GAAG2hC,IAE5C,CACT,CACA,OAAI+nU,GACF,OAAIljV,KAAKsgV,iBACA3wU,KAAKhT,IAAIzT,KAAKD,MAAQ+W,KAAKsgV,iBAAkB,GAAK,IAEpD,CACT,CACA,iBAAIkC,GACF,IAAIW,EACJ,OAAyC,OAApCA,EAAkBnjV,KAAKkgV,WAAqBiD,EAAgB3pW,OACxDwmB,KAAKkgV,SAASlgV,KAAKkgV,SAAS1mW,OAAS,GAAGkI,OAEzC,CACV,CACA,cAAI4gW,GACF,IAAIc,EACJ,OAAyC,OAApCA,EAAkBpjV,KAAKkgV,WAAqBkD,EAAgB5pW,OACxDwmB,KAAKkgV,SAASlgV,KAAKkgV,SAAS1mW,OAAS,GAAGsgW,SAASyD,GAEnDv9U,KAAK+/U,KACd,EAGF,SAASv5T,EAAa68T,GACpB,OAAOr2P,WAAW15F,KAAKgxB,KAAK++T,IAAmB/nW,GAAKA,EAAEC,WAAW,IACnE,CAmBA,SAAS+nW,EAA2BC,GAElC,MAAMC,EAAaD,EAAIx/U,MAAM,KAC7B,IAAI0/U,EAAU,KACd,GAAsB,SAAlBD,EAAW,IAAuC,IAAtBA,EAAWhqW,OAAc,CACvD,MAAMkqW,EAAiBF,EAAW,GAAGz/U,MAAM,KACrC4/U,EAAaD,EAAeA,EAAelqW,OAAS,GAAGuqB,MAAM,KACnE,GAA0B,IAAtB4/U,EAAWnqW,OAAc,CAC3B,MAAMoqW,EAA6B,WAAlBD,EAAW,GACtB/5V,EAAO+5V,EAAW,GACpBC,GACFF,EAAexjQ,QAAQ,EAAG,GAC1BujQ,EAAUj9T,EAAa58B,IAEvB65V,EA/BR,SAAuBhiV,GACrB,MAAMoiV,EAAaC,EAAeriV,GAAKsiV,SAAS,EAAG,IAC7CC,EAAmB,IAAIh3P,WAAW,IAExC,OADAg3P,EAAiBvzT,IAAIozT,EAAY,GAAKA,EAAWrqW,QAC1CwqW,CACT,CA0BkBC,CAAcr6V,EAE5B,CACF,CACA,OAAO65V,CACT,CACA,SAASK,EAAeriV,GACtB,OAAOurF,WAAW15F,KAAKuzH,SAASjxG,mBAAmBnU,KAAOnmB,GAAKA,EAAEC,WAAW,IAC9E,CAGA,MAAM2oW,EAA+B,qBAATl1U,KAAuBA,UAAOpW,EAK1D,IAAIurV,EAAa,CACfC,SAAU,kBACVC,SAAU,gBACVC,UAAW,0BACXC,SAAU,sBAIRC,EACQ,kBADRA,EAEQ,iCAFRA,EAGS,0BAHTA,EAIQ,gDAEZ,SAASC,EAAiCl5S,GACxC,OAAQA,GACN,KAAKi5S,EACH,OAAOL,EAAWE,SACpB,KAAKG,EACH,OAAOL,EAAWG,UACpB,KAAKE,EACH,OAAOL,EAAWI,SACpB,KAAKC,EACH,OAAOL,EAAWC,SAExB,CAGA,IAAIM,EACI,mCADJA,EAEQ,mCAFRA,EAIS,mCAJTA,EAKQ,mCAEZ,SAASC,GAA6BC,GACpC,OAAIA,IAAaF,EACRP,EAAWI,SACTK,IAAaF,EACfP,EAAWG,UACTM,IAAaF,GAAqBE,IAAaF,EACjDP,EAAWC,cADb,CAGT,CACA,SAASS,GAAiCC,GACxC,OAAQA,GACN,KAAKX,EAAWE,SACd,OAAOG,EACT,KAAKL,EAAWG,UACd,OAAOE,EACT,KAAKL,EAAWI,SACd,OAAOC,EACT,KAAKL,EAAWC,SACd,OAAOI,EAEb,CACA,SAASO,GAAuBnyU,GAC9B,MAAM,WACJoyU,EAAU,mBACVC,GACEryU,EACEsyU,EAAsBF,EAAa,CAACb,EAAWE,SAAUF,EAAWI,SAAUJ,EAAWG,UAAWH,EAAWC,UAAUpgV,QAAO8gV,KAAeE,EAAWF,KAAc,GAI9K,OAHKI,EAAoBf,EAAWI,WAAaU,GAC/CC,EAAoB7pW,KAAK8oW,EAAWI,UAE/BW,CACT,CACA,MAAMC,GACgB,MAAhBjB,GAA4E,OAAnDkB,GAAwBlB,EAAa/0U,YAAsBi2U,GAAsBD,4BACrGn2U,KAAKG,UAAUg2U,4BAA4BzkV,KAAKsO,KAAKG,WAErD,KAJyB,IAAUi2U,GAiD9C,SAASC,GAAW7iT,EAAOtnB,EAAOC,GAGhC,OAAO6xE,WAAWhzG,UAAUuJ,MAAQi/C,EAAMj/C,MAAM23B,EAAOC,GAAO,IAAI6xE,WAAWpzG,MAAMI,UAAUuJ,MAAMpJ,KAAKqoD,EAAOtnB,EAAOC,GACxH,CASA,MAAMmqU,GAAa,CAAC17V,EAAMkkC,IAcpBA,EAAS,IAAMlkC,EAAKpQ,QAED,KAAjBoQ,EAAKkkC,IAAyC,KAArBlkC,EAAKkkC,EAAS,IAAoC,KAArBlkC,EAAKkkC,EAAS,IAElElkC,EAAKkkC,EAAS,GAAK,KAAQlkC,EAAKkkC,EAAS,GAAK,KAE5ClkC,EAAKkkC,EAAS,GAAK,KAAQlkC,EAAKkkC,EAAS,GAAK,KAAQlkC,EAAKkkC,EAAS,GAAK,KAAQlkC,EAAKkkC,EAAS,GAAK,IAc1Gy3T,GAAW,CAAC37V,EAAMkkC,IAIlBA,EAAS,IAAMlkC,EAAKpQ,QAED,KAAjBoQ,EAAKkkC,IAAyC,KAArBlkC,EAAKkkC,EAAS,IAAoC,KAArBlkC,EAAKkkC,EAAS,IAElElkC,EAAKkkC,EAAS,GAAK,KAAQlkC,EAAKkkC,EAAS,GAAK,KAE5ClkC,EAAKkkC,EAAS,GAAK,KAAQlkC,EAAKkkC,EAAS,GAAK,KAAQlkC,EAAKkkC,EAAS,GAAK,KAAQlkC,EAAKkkC,EAAS,GAAK,IAgB1G03T,GAAa,CAAC57V,EAAMkkC,KACxB,MAAM1a,EAAQ0a,EACd,IAAIt0C,EAAS,EACb,KAAO8rW,GAAW17V,EAAMkkC,IAAS,CAE/Bt0C,GAAU,GAEVA,GADaisW,GAAS77V,EAAMkkC,EAAS,GAEjCy3T,GAAS37V,EAAMkkC,EAAS,MAE1Bt0C,GAAU,IAEZs0C,GAAUt0C,CACZ,CACA,GAAIA,EAAS,EACX,OAAOoQ,EAAKm6V,SAAS3wU,EAAOA,EAAQ55B,EAEtB,EAEZisW,GAAW,CAAC77V,EAAMkkC,KACtB,IAAI3rC,EAAO,EAKX,OAJAA,GAAuB,IAAfyH,EAAKkkC,KAAmB,GAChC3rC,IAA4B,IAAnByH,EAAKkkC,EAAS,KAAc,GACrC3rC,IAA4B,IAAnByH,EAAKkkC,EAAS,KAAc,EACrC3rC,GAA2B,IAAnByH,EAAKkkC,EAAS,GACf3rC,CAAI,EAEPujW,GAAa,CAAC97V,EAAMkkC,IACjBw3T,GAAW17V,EAAMkkC,IAAW23T,GAAS77V,EAAMkkC,EAAS,GAAK,IAAMlkC,EAAKpQ,OAASs0C,EAOhF63T,GAAe/7V,IACnB,MAAM+6S,EAASihD,GAAah8V,GAC5B,IAAK,IAAIrQ,EAAI,EAAGA,EAAIorT,EAAOnrT,OAAQD,IAAK,CACtC,MAAM0yB,EAAQ04R,EAAOprT,GACrB,GAAIssW,GAAiB55U,GACnB,OAAO65U,GAAc75U,EAEzB,CACgB,EAMZ45U,GAAmB55U,GAChBA,GAAuB,SAAdA,EAAM/xB,KAAiC,iDAAf+xB,EAAM2F,KAE1Cm0U,GAAen8V,IAMnB,MAAM5L,EAAO6kB,OAAO+iB,aAAah8B,EAAK,GAAIA,EAAK,GAAIA,EAAK,GAAIA,EAAK,IAC3DzH,EAAOsjW,GAAS77V,EAAM,GAI5B,MAAO,CACL5L,OACAmE,OACAyH,KAAMA,EAAKm6V,SAJE,MAIwB5hW,GACtC,EAOGyjW,GAAeI,IACnB,IAAIl4T,EAAS,EACb,MAAM62Q,EAAS,GACf,KAAO2gD,GAAWU,EAASl4T,IAAS,CAClC,MAAM3rC,EAAOsjW,GAASO,EAASl4T,EAAS,GAExCA,GAAU,GACV,MAAM3S,EAAM2S,EAAS3rC,EAErB,KAAO2rC,EAAS,EAAI3S,GAAK,CACvB,MAAM8qU,EAAYF,GAAaC,EAAQjC,SAASj2T,IAC1C7hB,EAAQi6U,GAAYD,GACtBh6U,GACF04R,EAAOtpT,KAAK4wB,GAId6hB,GAAUm4T,EAAU9jW,KAAO,EAC7B,CACIojW,GAASS,EAASl4T,KACpBA,GAAU,GAEd,CACA,OAAO62Q,CAAM,EAETuhD,GAAcj6U,GACC,SAAfA,EAAMjuB,KACDmoW,GAAgBl6U,GACI,MAAlBA,EAAMjuB,KAAK,GACbooW,GAAen6U,GAEjBo6U,GAAgBp6U,GAEnBk6U,GAAkBl6U,IAItB,GAAIA,EAAM9pB,KAAO,EACf,OAEF,MAAMmkW,EAAQC,GAAet6U,EAAMriB,MAAM,GACnC48V,EAAc,IAAIx5P,WAAW/gF,EAAMriB,KAAKm6V,SAASuC,EAAM9sW,OAAS,IACtE,MAAO,CACLU,IAAK+xB,EAAMjuB,KACX4zB,KAAM00U,EACN18V,KAAM48V,EAAYz0P,OACnB,EAEGs0P,GAAkBp6U,IACtB,GAAIA,EAAM9pB,KAAO,EACf,OAEF,GAAmB,SAAf8pB,EAAMjuB,KAAiB,CAMzB,IAAI0D,EAAQ,EACZ,MAAMhB,EAAc6lW,GAAet6U,EAAMriB,KAAKm6V,SAASriW,IAAQ,GAC/DA,GAAShB,EAAYlH,OAAS,EAC9B,MAAMY,EAAQmsW,GAAet6U,EAAMriB,KAAKm6V,SAASriW,IACjD,MAAO,CACLxH,IAAK+xB,EAAMjuB,KACX4zB,KAAMlxB,EACNkJ,KAAMxP,EAEV,CAMA,MAAM6J,EAAOsiW,GAAet6U,EAAMriB,KAAKm6V,SAAS,IAChD,MAAO,CACL7pW,IAAK+xB,EAAMjuB,KACX4L,KAAM3F,EACP,EAEGmiW,GAAiBn6U,IACrB,GAAmB,SAAfA,EAAMjuB,KAAiB,CAMzB,GAAIiuB,EAAM9pB,KAAO,EACf,OAEF,IAAIT,EAAQ,EACZ,MAAMhB,EAAc6lW,GAAet6U,EAAMriB,KAAKm6V,SAASriW,IAAQ,GAC/DA,GAAShB,EAAYlH,OAAS,EAC9B,MAAMY,EAAQmsW,GAAet6U,EAAMriB,KAAKm6V,SAASriW,IACjD,MAAO,CACLxH,IAAK+xB,EAAMjuB,KACX4zB,KAAMlxB,EACNkJ,KAAMxP,EAEV,CAKA,MAAM26B,EAAMwxU,GAAet6U,EAAMriB,MACjC,MAAO,CACL1P,IAAK+xB,EAAMjuB,KACX4L,KAAMmrB,EACP,EAEG+wU,GAAgBW,IACpB,GAAuC,IAAnCA,EAAe78V,KAAK8nG,WAAkB,CACxC,MAAM9nG,EAAO,IAAIojG,WAAWy5P,EAAe78V,MAGrC88V,EAAqB,EAAV98V,EAAK,GACtB,IAAIiX,GAAajX,EAAK,IAAM,KAAOA,EAAK,IAAM,KAAOA,EAAK,IAAM,GAAKA,EAAK,GAM1E,OALAiX,GAAa,GACT6lV,IACF7lV,GAAa,aAGR8O,KAAKy2B,MAAMvlC,EACpB,CACgB,EAYZ0lV,GAAiB,CAAC/jT,EAAOmkT,GAAa,KAC1C,MAAM/qM,EAAUgrM,KAChB,GAAIhrM,EAAS,CACX,MAAMx0H,EAAUw0H,EAAQlwH,OAAO8W,GAC/B,GAAImkT,EAAY,CAEd,MAAMrpT,EAAMlW,EAAQhsC,QAAQ,MAC5B,OAAgB,IAATkiD,EAAalW,EAAQ5rC,UAAU,EAAG8hD,GAAOlW,CAClD,CAGA,OAAOA,EAAQlhC,QAAQ,MAAO,GAChC,CACA,MAAM2V,EAAM2mC,EAAMhpD,OAClB,IAAI8B,EACAurW,EACAC,EACAljU,EAAM,GACNrqC,EAAI,EACR,KAAOA,EAAIsiB,GAAK,CAEd,GADAvgB,EAAIknD,EAAMjpD,KACA,IAAN+B,GAAcqrW,EAChB,OAAO/iU,EACF,GAAU,IAANtoC,GAAoB,IAANA,EAIzB,OAAQA,GAAK,GACX,KAAK,EACL,KAAK,EACL,KAAK,EACL,KAAK,EACL,KAAK,EACL,KAAK,EACL,KAAK,EACL,KAAK,EAEHsoC,GAAO/gB,OAAO+iB,aAAatqC,GAC3B,MACF,KAAK,GACL,KAAK,GAEHurW,EAAQrkT,EAAMjpD,KACdqqC,GAAO/gB,OAAO+iB,cAAkB,GAAJtqC,IAAa,EAAY,GAARurW,GAC7C,MACF,KAAK,GAEHA,EAAQrkT,EAAMjpD,KACdutW,EAAQtkT,EAAMjpD,KACdqqC,GAAO/gB,OAAO+iB,cAAkB,GAAJtqC,IAAa,IAAc,GAARurW,IAAiB,GAAa,GAARC,IAAiB,GAG5F,CACA,OAAOljU,CAAG,EAEZ,IAAIg4H,GACJ,SAASgrM,KAGP,IAAIz3U,UAAUG,UAAUr1B,SAAS,iBAMjC,OAHK2hK,IAAuC,qBAArB5sI,KAAK6sI,cAC1BD,GAAU,IAAI5sI,KAAK6sI,YAAY,UAE1BD,EACT,CAMA,MAAM8C,GAAM,CACVqoM,QAAS,SAAUvkT,GACjB,IAAI/gC,EAAM,GACV,IAAK,IAAIloB,EAAI,EAAGA,EAAIipD,EAAMhpD,OAAQD,IAAK,CACrC,IAAImG,EAAI8iD,EAAMjpD,GAAGO,SAAS,IACtB4F,EAAElG,OAAS,IACbkG,EAAI,IAAMA,GAEZ+hB,GAAO/hB,CACT,CACA,OAAO+hB,CACT,GAGIulV,GAAer3U,KAAKC,IAAI,EAAG,IAAM,EACjCv0B,GAAO,GAAGA,KAUV4rW,GAAuB,CAC3BvmI,MAAO,EACP/+I,MAAO,EACPulR,IAAK,EACLjjW,KAAM,GAER,SAASkjW,GAAQv9V,GACf,OAAOiZ,OAAO+iB,aAAa7lB,MAAM,KAAMnW,EACzC,CACA,SAASw9V,GAAWr1P,EAAQjkE,GAC1B,MAAMlyB,EAAMm2F,EAAOjkE,IAAW,EAAIikE,EAAOjkE,EAAS,GAClD,OAAOlyB,EAAM,EAAI,MAAQA,EAAMA,CACjC,CACA,SAASyrV,GAAWt1P,EAAQjkE,GAC1B,MAAMlyB,EAAM0rV,GAAWv1P,EAAQjkE,GAC/B,OAAOlyB,EAAM,EAAI,WAAaA,EAAMA,CACtC,CACA,SAAS2rV,GAAWx1P,EAAQjkE,GAC1B,IAAIjwC,EAASwpW,GAAWt1P,EAAQjkE,GAGhC,OAFAjwC,GAAU8xB,KAAKC,IAAI,EAAG,IACtB/xB,GAAUwpW,GAAWt1P,EAAQjkE,EAAS,GAC/BjwC,CACT,CACA,SAASypW,GAAWv1P,EAAQjkE,GAC1B,OAAOikE,EAAOjkE,IAAW,GAAKikE,EAAOjkE,EAAS,IAAM,GAAKikE,EAAOjkE,EAAS,IAAM,EAAIikE,EAAOjkE,EAAS,EACrG,CACA,SAAS05T,GAAYz1P,EAAQjkE,EAAQ1zC,GACnC23G,EAAOjkE,GAAU1zC,GAAS,GAC1B23G,EAAOjkE,EAAS,GAAK1zC,GAAS,GAAK,IACnC23G,EAAOjkE,EAAS,GAAK1zC,GAAS,EAAI,IAClC23G,EAAOjkE,EAAS,GAAa,IAAR1zC,CACvB,CAgBA,SAASqtW,GAAQ79V,EAAMlE,GACrB,MAAMi9E,EAAU,GAChB,IAAKj9E,EAAKlM,OAER,OAAOmpF,EAET,MAAMxnD,EAAMvxB,EAAK8nG,WACjB,IAAK,IAAIn4G,EAAI,EAAGA,EAAI4hC,GAAM,CACxB,MAAMh5B,EAAOklW,GAAWz9V,EAAMrQ,GAExBmuW,EAASvlW,EAAO,EAAI5I,EAAI4I,EAAOg5B,EACrC,GAFagsU,GAAQv9V,EAAKm6V,SAASxqW,EAAI,EAAGA,EAAI,MAEjCmM,EAAK,GAChB,GAAoB,IAAhBA,EAAKlM,OAGPmpF,EAAQtnF,KAAKuO,EAAKm6V,SAASxqW,EAAI,EAAGmuW,QAC7B,CAEL,MAAMC,EAAaF,GAAQ79V,EAAKm6V,SAASxqW,EAAI,EAAGmuW,GAAShiW,EAAKnC,MAAM,IAChEokW,EAAWnuW,QACb6B,GAAK0kB,MAAM4iE,EAASglR,EAExB,CAEFpuW,EAAImuW,CACN,CAGA,OAAO/kR,CACT,CACA,SAASilR,GAAkBC,GACzB,MAAMC,EAAa,GACb70U,EAAU40U,EAAK,GAGrB,IAAInmW,EAAQ,EACZ,MAAMqmW,EAAYV,GAAWQ,EAAMnmW,GACnCA,GAAS,EACT,IAAIsmW,EAA2B,EAC3BC,EAAc,EACF,IAAZh1U,GACF+0U,EAA2BX,GAAWQ,EAAMnmW,GAC5CumW,EAAcZ,GAAWQ,EAAMnmW,EAAQ,GACvCA,GAAS,IAETsmW,EAA2BT,GAAWM,EAAMnmW,GAC5CumW,EAAcV,GAAWM,EAAMnmW,EAAQ,GACvCA,GAAS,IAIXA,GAAS,EACT,IAAIwmW,EAAYL,EAAKruW,OAASyuW,EAC9B,MAAME,EAAkBf,GAAWS,EAAMnmW,GACzCA,GAAS,EACT,IAAK,IAAInI,EAAI,EAAGA,EAAI4uW,EAAiB5uW,IAAK,CACxC,IAAI6uW,EAAiB1mW,EACrB,MAAM2mW,EAAgBhB,GAAWQ,EAAMO,GACvCA,GAAkB,EAClB,MAAME,EAAgC,WAAhBD,EAEtB,GAAsB,KADiB,WAAhBA,KAAgC,GAGrD,OADAppV,EAAOyO,KAAK,oDACL,KAET,MAAM66U,EAAqBlB,GAAWQ,EAAMO,GAC5CA,GAAkB,EAClBN,EAAWzsW,KAAK,CACditW,gBACAC,qBAEA32U,KAAM,CACJlnB,SAAU69V,EAAqBR,EAC/B7sU,MAAOgtU,EACP/sU,IAAK+sU,EAAYI,EAAgB,KAGrCJ,GAAaI,EAIbF,GAAkB,EAGlB1mW,EAAQ0mW,CACV,CACA,MAAO,CACLJ,2BACAD,YACA90U,UACAk1U,kBACAL,aAEJ,CAsBA,SAASU,GAAiBtK,GACxB,MAAMrgW,EAAS,GACT4qW,EAAQhB,GAAQvJ,EAAa,CAAC,OAAQ,SAC5C,IAAK,IAAI3kW,EAAI,EAAGA,EAAIkvW,EAAMjvW,OAAQD,IAAK,CACrC,MAAMmvW,EAAOD,EAAMlvW,GACbovW,EAAOlB,GAAQiB,EAAM,CAAC,SAAS,GACrC,GAAIC,EAAM,CACR,IAAI11U,EAAU01U,EAAK,GACnB,MAAMC,EAAUvB,GAAWsB,EAAkB,IAAZ11U,EAAgB,GAAK,IAChD41U,EAAOpB,GAAQiB,EAAM,CAAC,OAAQ,SAAS,GAC7C,GAAIG,EAAM,CACR51U,EAAU41U,EAAK,GACf,MAAMd,EAAYV,GAAWwB,EAAkB,IAAZ51U,EAAgB,GAAK,IAClD61U,EAAOrB,GAAQiB,EAAM,CAAC,OAAQ,SAAS,GAC7C,GAAII,EAAM,CACR,MAAMC,EAAW5B,GAAQ2B,EAAK/E,SAAS,EAAG,KACpC/lW,EAAO,CACXgrW,KAAMxM,EACNyM,KAAMzM,GACNuM,GACF,GAAI/qW,EAAM,CAER,MACMkrW,EAAWC,GADJ1B,GAAQiB,EAAM,CAAC,OAAQ,OAAQ,OAAQ,SAAS,IAE7D7qW,EAAO+qW,GAAW,CAChBb,YACA/pW,QAEFH,EAAOG,GAAQ6xL,EAAe,CAC5Bk4K,YACAl8V,GAAI+8V,GACHM,EACL,CACF,CACF,CACF,CACF,CAYA,OAXazB,GAAQvJ,EAAa,CAAC,OAAQ,OAAQ,SAC9Ct7V,SAAQwmW,IACX,MAAMR,EAAUvB,GAAW+B,EAAM,GAC3B/3N,EAAQxzI,EAAO+qW,GACjBv3N,IACFA,EAAM9rF,QAAU,CACd76C,SAAU28V,GAAW+B,EAAM,IAC3B59R,MAAO67R,GAAW+B,EAAM,KAE5B,IAEKvrW,CACT,CACA,SAASsrW,GAAUE,GACjB,MAAMC,EAAgBD,EAAKtF,SAAS,GAC9BwF,EAAmBD,EAAcvF,SAAS,IAC1CyF,EAASrC,GAAQmC,EAAcvF,SAAS,EAAG,IACjD,IAAI0F,EAAQD,EACZ,MAAM9K,EAAuB,SAAX8K,GAAgC,SAAXA,EACvC,GAAI9K,EAAW,CACb,MAAMgL,EAASjC,GAAQ6B,EAAe,CAACE,IAAS,GAElC/B,GADSiC,EAAO3F,SAAoB,SAAXyF,EAAoB,GAAK,IAC1B,CAAC,SACjC5mW,SAAQ+mW,IACZ,MAAMC,EAAOnC,GAAQkC,EAAM,CAAC,SAAS,GACrC,GAAIC,EAAM,CACR,MAAMvmB,EAAS8jB,GAAQyC,EAAK7F,SAAS,EAAG,IACxC,GAAe,SAAX1gB,GAAgC,SAAXA,EAAmB,CAC1C,MAAMwmB,EAAOpC,GAAQkC,EAAM,CAAC,SAAS,GACjCE,IAEFJ,EAAQtC,GAAQ0C,GAEpB,CACF,IAEJ,CACA,OAAQJ,GACN,IAAK,OACL,IAAK,OACL,IAAK,OACL,IAAK,OACH,CAEE,MAAMK,EAAUrC,GAAQ8B,EAAkB,CAAC,SAAS,GACpDE,GAAS,IAAMM,GAAMD,EAAQ,IAAMC,GAAMD,EAAQ,IAAMC,GAAMD,EAAQ,IACrE,KACF,CACF,IAAK,OACH,CACE,MAAME,EAAWvC,GAAQ6B,EAAe,CAACE,IAAS,GAC5CS,EAAUxC,GAAQuC,EAASjG,SAAS,IAAK,CAAC,SAAS,GACzD,GAAIkG,GAAWA,EAAQzwW,OAAS,GAAI,CAClC,IAAID,EAAI,EAER,GAAqB,IAAjB0wW,EAAQ1wW,KACV,MAEFA,EAAI2wW,GAAeD,EAAS1wW,GAC5BA,GAAK,EACL,MAAMiyE,EAAQy+R,EAAQ1wW,KAQtB,GAPY,IAARiyE,IACFjyE,GAAK,GAEK,GAARiyE,IACFjyE,GAAK0wW,EAAQ1wW,MAGM,IAAjB0wW,EAAQ1wW,KACV,MAEFA,EAAI2wW,GAAeD,EAAS1wW,GAC5B,MAAM4wW,EAAaF,EAAQ1wW,KAC3B,GAAmB,KAAf4wW,EAGF,MAIF,GANEV,GAAS,IAAMM,GAAMI,GAIvB5wW,GAAK,GAEgB,IAAjB0wW,EAAQ1wW,KACV,MAEFA,EAAI2wW,GAAeD,EAAS1wW,GAC5B,MAAM6wW,EAAYH,EAAQ1wW,KAC1B,IAAI8wW,GAA+B,IAAZD,IAAqB,EACpB,KAApBC,IACFA,GAAmB,IAAkB,EAAZD,IAAoB,KAAoB,IAAbH,EAAQ1wW,KAAc,IAE5EkwW,GAAS,IAAMY,CACjB,CACA,KACF,CACF,IAAK,OACL,IAAK,OACH,CACE,MAAMC,EAAU7C,GAAQ8B,EAAkB,CAAC,SAAS,GAC9CgB,EAAcD,EAAQ,GACtBE,EAAe,CAAC,GAAI,IAAK,IAAK,KAAKD,GAAe,GAClDE,EAAkC,GAAdF,EACpBG,EAAgBrD,GAAWiD,EAAS,GACpCK,GAA0B,GAAdJ,IAAuB,EAAI,IAAM,IAC7CK,EAAWN,EAAQ,IACnBO,EAAsBP,EAAQvG,SAAS,EAAG,IAChD0F,GAAS,IAAMe,EAAeC,EAC9BhB,GAAS,IAAMiB,EAAc5wW,SAAS,IAAIwJ,cAC1CmmW,GAAS,IAAMkB,EAAWC,EAC1B,IAAIE,EAAmB,GACvB,IAAK,IAAIvxW,EAAIsxW,EAAoBrxW,OAAQD,KAAM,CAC7C,MAAMwxW,EAAOF,EAAoBtxW,GACjC,GAAIwxW,GAAQD,EAAkB,CAE5BA,EAAmB,IADCC,EAAKjxW,SAAS,IAAIwJ,cACCwnW,CACzC,CACF,CACArB,GAASqB,EACT,KACF,CACF,IAAK,OACL,IAAK,OACH,CACE,MAAME,EAAUvD,GAAQ8B,EAAkB,CAAC,SAAS,GAC9C/zH,EAAUw1H,EAAQ,IAAM,EAAI,IAC5B9nH,EAAQ8nH,EAAQ,IAAM,EAAI,GAAOA,EAAQ,IAAM,EAAI,GACzDvB,GAAS,IAAMwB,GAAez1H,GAAW,IAAMy1H,GAAe/nH,GAC9D,KACF,CACF,IAAK,OACH,CACE,MAAMgoH,EAAUzD,GAAQ8B,EAAkB,CAAC,SAAS,GAC9C/zH,EAAU01H,EAAQ,GAClBhoH,EAAQgoH,EAAQ,GAChBC,EAAWD,EAAQ,IAAM,EAAI,GACnCzB,GAAS,IAAMwB,GAAez1H,GAAW,IAAMy1H,GAAe/nH,GAAS,IAAM+nH,GAAeE,GAC5F,KACF,CACF,IAAK,OACH,CACE,MAAMC,EAAU3D,GAAQ8B,EAAkB,CAAC,SAAS,GAC9C/zH,EAAU41H,EAAQ,KAAO,EACzBloH,EAAqB,GAAbkoH,EAAQ,GAChBT,EAAWS,EAAQ,KAAO,EAAI,IAAM,IACpCC,GAA6B,GAAbD,EAAQ,KAAc,EACtCE,GAA0B,GAAbF,EAAQ,KAAc,EACnCD,EAAuB,IAAZ31H,GAAiB61H,EAAeC,EAAY,GAAK,GAAKD,EAAe,GAAK,EACrFE,GAA2B,GAAbH,EAAQ,KAAc,EACpCI,GAAmC,EAAbJ,EAAQ,KAAc,EAC5CK,GAAmC,EAAbL,EAAQ,KAAc,EAC5CM,EAAoC,EAAbN,EAAQ,GAI/BO,EAAiB,EACjBC,EAA0B,EAC1BC,EAAqB,EACrBC,EAAqB,EAC3BrC,GAAS,IAAMj0H,EAAU,IAAMy1H,GAAe/nH,GAASynH,EAAW,IAAMM,GAAeE,GAAY,IAAMI,EAAa,IAAMC,EAAqBC,EAAqBC,EAAuB,IAAMT,GAAeU,GAAkB,IAAMV,GAAeW,GAA2B,IAAMX,GAAeY,GAAsB,IAAMC,EACrU,KACF,EAEJ,MAAO,CACLrC,QACA/K,YAEJ,CACA,SAASwL,GAAezkU,EAAOlsC,GAC7B,MAAM0nL,EAAQ1nL,EAAI,EAClB,KAAoB,IAAbksC,EAAMlsC,MAAeA,EAAI0nL,IAChC,OAAO1nL,CACT,CACA,SAASwwW,GAAM9tV,GACb,OAAQ,IAAMA,EAAEniB,SAAS,IAAIwJ,eAAeC,OAAO,EACrD,CACA,SAAS0nW,GAAep8U,GACtB,OAAQA,EAAM,GAAK,IAAM,IAAMA,CACjC,CAqCA,SAASk9U,GAAUpC,GACjB,MAAMC,EAAOnC,GAAQkC,EAAM,CAAC,SAAS,GACrC,GAAIC,EAAM,CACR,MAAMvmB,EAAS8jB,GAAQyC,EAAK7F,SAAS,EAAG,IACxC,GAAe,SAAX1gB,GAAgC,SAAXA,EACvB,OAAOokB,GAAQkC,EAAM,CAAC,OAAQ,SAAS,EAE3C,CACA,OAAO,IACT,CAoKA,SAASqC,GAA8BC,GACrC,MAAMzgS,EAAQ67R,GAAW4E,EAAM,GAG/B,IAAIn+T,EAAS,EAED,EAAR09B,IACF19B,GAAU,GAGA,EAAR09B,IACF19B,GAAU,GAEZ,IAAIpjC,EAAW,EACf,MAAMwhW,EAAc7E,GAAW4E,EAAM,GACrC,IAAK,IAAI1yW,EAAI,EAAGA,EAAI2yW,EAAa3yW,IAAK,CAEpC,GAAY,IAARiyE,EAAkB,CAEpB9gE,GADuB28V,GAAW4E,EAAMn+T,GAExCA,GAAU,CACZ,CAEY,IAAR09B,IACF19B,GAAU,GAGA,KAAR09B,IACF19B,GAAU,GAGA,KAAR09B,IACF19B,GAAU,EAEd,CACA,OAAOpjC,CACT,CAuDA,SAASyhW,GAAiBC,EAAOC,GAC/B,MAAMC,EAAO,IAAIt/P,WAAWo/P,EAAM5yW,OAAS6yW,EAAM7yW,QAGjD,OAFA8yW,EAAK77T,IAAI27T,GACTE,EAAK77T,IAAI47T,EAAOD,EAAM5yW,QACf8yW,CACT,CACA,SAASC,GAAaC,EAAYn7N,GAChC,MAAMo7N,EAAa,GACbC,EAAYr7N,EAAMs7N,QAClB5E,EAAY12N,EAAM02N,UAClBa,EAAUv3N,EAAMxlI,GACtB,IAAI+gW,GAAe,EAuHnB,OAtHcnF,GAAQiF,EAAW,CAAC,SAC5B5uW,KAAI+uW,IACR,MAAMC,EAAaD,EAAK36P,WAAa,EACvBu1P,GAAQoF,EAAM,CAAC,SACvB/uW,KAAIivW,IAER,MAAMC,EAAWvF,GAAQsF,EAAM,CAAC,SAASjvW,KAAImvW,IAC3C,MAAMh6U,EAAUg6U,EAAK,GACrB,IAAIpvW,EAASwpW,GAAW4F,EAAM,GAK9B,OAJgB,IAAZh6U,IACFp1B,GAAU8xB,KAAKC,IAAI,EAAG,IACtB/xB,GAAUwpW,GAAW4F,EAAM,IAEtBpvW,EAASkqW,CAAS,IACxB,GAIH,YAHiBnvV,IAAbo0V,IACFR,EAAaQ,GAERvF,GAAQsF,EAAM,CAAC,SAASjvW,KAAIovW,IACjC,MAAMrhW,EAAKw7V,GAAW6F,EAAM,GACtBC,EAAkC,SAAtB9F,GAAW6F,EAAM,GAInC,IAAIE,EAAwB,EAC5B,MAAMC,EAAsD,KAAd,GAAZF,GAClC,IAAIG,EAAoB,EACxB,MAAMC,EAAuD,KAAd,GAAZJ,GACnC,IAAIK,EAAa,EACb3hW,IAAO+8V,IAR8C,KAAd,EAAZuE,KAU3BK,GAAc,GAT+C,KAAd,EAAZL,KAYnCK,GAAc,GAX8C,KAAd,EAAZL,KAclCC,EAAwB/F,GAAW6F,EAAMM,GACzCA,GAAc,GAEZH,IACFC,EAAoBjG,GAAW6F,EAAMM,GACrCA,GAAc,GAEZD,IACFC,GAAc,GAEG,UAAfn8N,EAAMrzI,OACR4uW,EAwEZ,SAAgBnD,GACd,IAAKA,EACH,OAAO,EAET,MAAMgE,EAAUhE,EAAMruW,QAAQ,KACxBsyW,EAAYD,EAAU,EAAIhE,EAAQA,EAAMjuW,UAAU,EAAGiyW,GAC3D,MAAqB,SAAdC,GAAsC,SAAdA,GAEjB,SAAdA,GAAsC,SAAdA,CAC1B,CAjF2BC,CAAOt8N,EAAMo4N,QAE9BhC,GAAQsF,EAAM,CAAC,SAASjvW,KAAImuW,IAC1B,MAAMh5U,EAAUg5U,EAAK,GACfzgS,EAA8B,SAAtB67R,GAAW4E,EAAM,GACzB2B,EAA2C,KAAd,EAARpiS,GAC3B,IAAIqiS,EAAa,EACjB,MAAMC,EAAiD,KAAd,EAARtiS,GAC3BuiS,EAA+C,KAAd,IAARviS,GAC/B,IAAIwiS,EAAiB,EACrB,MAAMC,EAA2C,KAAd,IAARziS,GAC3B,IAAIq0D,EAAa,EACjB,MAAMquO,EAA4C,KAAd,KAAR1iS,GACtB2iS,EAAyD,KAAd,KAAR3iS,GACzC,IAAI4iS,EAAoB,EACxB,MAAMlC,EAAc7E,GAAW4E,EAAM,GACrC,IAAIoC,EAAa,EAEbT,IACFC,EAAaxG,GAAW4E,EAAMoC,GAC9BA,GAAc,GAEZP,IACFO,GAAc,GAEhB,IAAIC,EAAeT,EAAaf,EAChC,IAAK,IAAIyB,EAAK,EAAGA,EAAKrC,EAAaqC,IAAM,CAwBvC,GAvBIR,GACFC,EAAiB3G,GAAW4E,EAAMoC,GAClCA,GAAc,GAEdL,EAAiBZ,EAEfa,GACFpuO,EAAawnO,GAAW4E,EAAMoC,GAC9BA,GAAc,GAEdxuO,EAAaytO,EAEXY,IACFG,GAAc,GAEZF,IAEAC,EADc,IAAZn7U,EACkBo0U,GAAW4E,EAAMoC,GAEjB/G,GAAW2E,EAAMoC,GAEvCA,GAAc,GAEZh9N,EAAMrzI,OAASw+V,EAA6B,CAC9C,IAAIgS,EAAgB,EACpB,KAAOA,EAAgB3uO,GAAY,CACjC,MAAM4uO,EAAWpH,GAAWqF,EAAW4B,GAEvC,GADAA,GAAgB,EACZI,GAAa9B,EAAcF,EAAU4B,IAAgB,CAEvDK,GADajC,EAAU3I,SAASuK,EAAcA,EAAeG,GAC/B7B,EAAe,EAAI,EAAGJ,EAAa4B,EAAoBrG,EAAW0E,EAClG,CACA6B,GAAgBG,EAChBD,GAAiBC,EAAW,CAC9B,CACF,CACAjC,GAAcwB,EAAiBjG,CACjC,KAEJ,GACA,GACF,IAEG0E,CACT,CAWA,SAASiC,GAAa9B,EAAcgC,GAClC,GAAIhC,EAAc,CAChB,MAAMiC,EAAWD,GAAc,EAAI,GACnC,OAAoB,KAAbC,GAAgC,KAAbA,CAC5B,CAEE,OAAoB,KADU,GAAbD,EAGrB,CACA,SAASD,GAAwBG,EAAeC,EAAYC,EAAKrC,GAC/D,MAAM/iW,EAAOqlW,GAAWH,GACxB,IAAII,EAAS,EAEbA,GAAUH,EACV,IAAII,EAAc,EACdC,EAAc,EACdl9U,EAAI,EACR,KAAOg9U,EAAStlW,EAAKpQ,QAAQ,CAC3B21W,EAAc,EACd,EAAG,CACD,GAAID,GAAUtlW,EAAKpQ,OACjB,MAEF04B,EAAItoB,EAAKslW,KACTC,GAAej9U,CACjB,OAAe,MAANA,GAGTk9U,EAAc,EACd,EAAG,CACD,GAAIF,GAAUtlW,EAAKpQ,OACjB,MAEF04B,EAAItoB,EAAKslW,KACTE,GAAel9U,CACjB,OAAe,MAANA,GACT,MAAMm9U,EAAWzlW,EAAKpQ,OAAS01W,EAE/B,IAAII,EAASJ,EAGb,GAAIE,EAAcC,EAChBH,GAAUE,OACL,GAAIA,EAAcC,EAAU,CAEjCpwV,EAAOvb,MAAM,0BAA0B0rW,wBAAkCC,0BAEzE,KACF,CACA,GAAoB,IAAhBF,EAAmB,CAErB,GAAoB,MADAvlW,EAAK0lW,KACA,CACvB,MAAMC,EAAenI,GAAWx9V,EAAM0lW,GAEtC,GADAA,GAAU,EACW,KAAjBC,EAAqB,CACvB,MAAMC,EAAgBnI,GAAWz9V,EAAM0lW,GAEvC,GADAA,GAAU,EACY,aAAlBE,EAA8B,CAChC,MAAMC,EAAe7lW,EAAK0lW,KAG1B,GAAqB,IAAjBG,EAAoB,CACtB,MAAMrF,EAAYxgW,EAAK0lW,KAEjBI,EAAU,GAAOtF,EACjBuF,EAAaD,EAAU,EAAe,GAF3B,GAAOtF,GAEwB,EAC1CwF,EAAY,IAAI5iQ,WAAW2iQ,GACjC,GAAID,EAAS,CACXE,EAAU,GAAKxF,EACf,IAAK,IAAI7wW,EAAI,EAAGA,EAAIo2W,EAAYp2W,IAC9Bq2W,EAAUr2W,GAAKqQ,EAAK0lW,IAExB,CACA3C,EAAQtxW,KAAK,CACX2C,KAAMyxW,EACNN,cACAH,MACAvpU,MAAOmqU,GAEX,CACF,CACF,CACF,CACF,MAAO,GAAoB,IAAhBT,GACLC,EAAc,GAAI,CACpB,MAAMS,EAAe,GACrB,IAAK,IAAIt2W,EAAI,EAAGA,EAAI,GAAIA,IAAK,CAC3B,MAAMkuC,EAAK79B,EAAK0lW,KAAUx1W,SAAS,IACnC+1W,EAAax0W,KAAkB,GAAbosC,EAAGjuC,OAAc,IAAMiuC,EAAKA,GACpC,IAANluC,GAAiB,IAANA,GAAiB,IAANA,GAAiB,IAANA,GACnCs2W,EAAax0W,KAAK,IAEtB,CACA,MAAM7B,EAAS41W,EAAc,GACvBU,EAAgB,IAAI9iQ,WAAWxzG,GACrC,IAAK,IAAID,EAAI,EAAGA,EAAIC,EAAQD,IAC1Bu2W,EAAcv2W,GAAKqQ,EAAK0lW,KAE1B3C,EAAQtxW,KAAK,CACX8zW,cACAH,MACA7qN,KAAM0rN,EAAajxV,KAAK,IACxBmxV,SAAUxJ,GAAeuJ,GACzBA,iBAEJ,CAEJ,CACF,CAKA,SAASb,GAAWrlW,GAClB,MAAMpQ,EAASoQ,EAAK8nG,WACds+P,EAAe,GACrB,IAAIz2W,EAAI,EAGR,KAAOA,EAAIC,EAAS,GACF,IAAZoQ,EAAKrQ,IAA4B,IAAhBqQ,EAAKrQ,EAAI,IAA4B,IAAhBqQ,EAAKrQ,EAAI,IACjDy2W,EAAa30W,KAAK9B,EAAI,GACtBA,GAAK,GAELA,IAMJ,GAA4B,IAAxBy2W,EAAax2W,OACf,OAAOoQ,EAIT,MAAMqmW,EAAYz2W,EAASw2W,EAAax2W,OAClCoxL,EAAU,IAAI59E,WAAWijQ,GAC/B,IAAIC,EAAc,EAClB,IAAK32W,EAAI,EAAGA,EAAI02W,EAAWC,IAAe32W,IACpC22W,IAAgBF,EAAa,KAE/BE,IAEAF,EAAa/qV,SAEf2lK,EAAQrxL,GAAKqQ,EAAKsmW,GAEpB,OAAOtlL,CACT,CA0FA,SAASulL,GAAQvL,EAAUwL,EAAQxmW,GACjC,GAA4B,KAAxBg7V,EAASlzP,WACX,MAAM,IAAI3mD,WAAW,qBAEvB,IAAI93B,EACAo9U,EAeAC,EAdJ,GAAIF,EAAQ,CACVn9U,EAAU,EACVo9U,EAAO,IAAIrjQ,WAA2B,GAAhBojQ,EAAO52W,QAC7B,IAAK,IAAI+0W,EAAK,EAAGA,EAAK6B,EAAO52W,OAAQ+0W,IAAM,CACzC,MAAMvwV,EAAIoyV,EAAO7B,GACjB,GAAqB,KAAjBvwV,EAAE0zF,WACJ,MAAM,IAAI3mD,WAAW,eAEvBslT,EAAK5/T,IAAIzyB,EAAQ,GAALuwV,EACd,CACF,MACEt7U,EAAU,EACVo9U,EAAO,IAAIrjQ,WAGT/5E,EAAU,GACZq9U,EAAW,IAAItjQ,WAAW,GACtBojQ,EAAO52W,OAAS,GAClB,IAAI4xG,SAASklQ,EAASv+P,QAAQ2oD,UAAU,EAAG01M,EAAO52W,QAAQ,IAG5D82W,EAAW,IAAItjQ,WAEjB,MAAMujQ,EAAW,IAAIvjQ,WAAW,GAIhC,OAHIpjG,GAAQA,EAAK8nG,WAAa,GAC5B,IAAItG,SAASmlQ,EAASx+P,QAAQ2oD,UAAU,EAAG9wJ,EAAK8nG,YAAY,GAlDhE,SAAgB1zG,KAAS22B,GACvB,MAAM9Y,EAAM8Y,EAAQn7B,OACpB,IAAI2I,EAAO,EACP5I,EAAIsiB,EACR,KAAOtiB,KACL4I,GAAQwyB,EAAQp7B,GAAGm4G,WAErB,MAAM7zG,EAAS,IAAImvG,WAAW7qG,GAM9B,IALAtE,EAAO,GAAKsE,GAAQ,GAAK,IACzBtE,EAAO,GAAKsE,GAAQ,GAAK,IACzBtE,EAAO,GAAKsE,GAAQ,EAAI,IACxBtE,EAAO,GAAY,IAAPsE,EACZtE,EAAO4yC,IAAIzyC,EAAM,GACZzE,EAAI,EAAG4I,EAAO,EAAG5I,EAAIsiB,EAAKtiB,IAC7BsE,EAAO4yC,IAAI9b,EAAQp7B,GAAI4I,GACvBA,GAAQwyB,EAAQp7B,GAAGm4G,WAErB,OAAO7zG,CACT,CAkCS2yW,CAAO,CAAC,IAAK,IAAK,IAAK,KAAM,IAAIxjQ,WAAW,CAAC/5E,EAAS,EAAM,EAAM,IACrE2xU,EAEJ0L,EAAUD,EAAME,EAAU3mW,GAAQ,IAAIojG,WACxC,CAeA,SAASyjQ,GAAU71J,GACjB,MAAMz4M,EAAOy4M,EAAKjgD,UAAU,GACtB7sH,EAAS8sK,EAAK1oG,WACd14G,EAASohN,EAAKlpG,WACpB,GAAIl4G,EAAS2I,EACX,MAAO,CACL2rC,SACA3rC,KAAM3I,GAIV,GAAa,aADAohN,EAAKjgD,UAAU,GAE1B,MAAO,CACL7sH,SACA3rC,QAGJ,MAAM8wB,EAAU2nL,EAAKjgD,UAAU,KAAO,GACtC,GAAgB,IAAZ1nI,GAA6B,IAAZA,EACnB,MAAO,CACL6a,SACA3rC,QAGJ,MAAM4vG,EAAS6oG,EAAK7oG,OACd6yP,EAAWlmM,GAAIqoM,QAAQ,IAAI/5P,WAAW+E,EAAQjkE,EAAS,GAAI,KAC3D4iU,EAAqB91J,EAAKjgD,UAAU,IAC1C,IAAI01M,EAAO,KACPzmW,EAAO,KACX,GAAgB,IAAZqpB,EAAe,CACjB,GAAI9wB,EAAO,GAAKuuW,GAAsBA,EAAqB,GACzD,MAAO,CACL5iU,SACA3rC,QAGJyH,EAAO,IAAIojG,WAAW+E,EAAQjkE,EAAS,GAAI4iU,EAC7C,MAAO,GAAgB,IAAZz9U,EAAe,CACxB,IAAKy9U,GAAsBl3W,EAASs0C,EAAS,GAA0B,GAArB4iU,EAA0B,GAC1E,MAAO,CACL5iU,SACA3rC,QAGJkuW,EAAO,GACP,IAAK,IAAI92W,EAAI,EAAGA,EAAIm3W,EAAoBn3W,IACtC82W,EAAKh1W,KAAK,IAAI2xG,WAAW+E,EAAQjkE,EAAS,GAAS,GAAJv0C,EAAQ,IAE3D,CACA,MAAO,CACL05B,UACA2xU,WACAyL,OACAzmW,OACAkkC,SACA3rC,OAEJ,CAEA,IAAIwuW,GAAmB,CAAC,EACxB,MAAMC,GACJ,4BAAOC,GACLF,GAAmB,CAAC,CACtB,CACA,WAAA9uU,CAAY3iB,EAAQqkV,EAAKh4S,EAAQulT,EAAiB,CAAC,GAAIzuM,EAAK,MAC1DriJ,KAAKujV,SAAM,EACXvjV,KAAKd,YAAS,EACdc,KAAK6+U,eAAY,EACjB7+U,KAAK+wV,uBAAoB,EACzB/wV,KAAK0+U,eAAY,EACjB1+U,KAAKgxV,wBAAqB,EAC1BhxV,KAAKqiJ,GAAK,KACVriJ,KAAK9lB,IAAM,KACX8lB,KAAKixV,MAAQ,KACbjxV,KAAKkxV,KAAO,KACZlxV,KAAKd,OAASA,EACdc,KAAKujV,IAAMA,EACXvjV,KAAK6+U,UAAYtzS,EACjBvrC,KAAK+wV,kBAAoBD,EACzB9wV,KAAKqiJ,GAAKA,EACVriJ,KAAK0+U,YAAYx/U,GAAoB,SAAXA,EAC1Bc,KAAKgxV,mBAAqBhxV,KAAK0+U,WAAwB,YAAXx/U,CAC9C,CACA,WAAAwtE,GAEE,GAAI1sE,KAAKd,OAAQ,CACf,GAAoB,YAAhBc,KAAKd,QAAwC,SAAhBc,KAAKd,OACpC,OAAO,EAET,GAAuB,aAAnBc,KAAK6+U,UAEP,MAAuB,eAAhB7+U,KAAKd,OAEZ,OAAQc,KAAK6+U,WACX,KAAK2F,EACL,KAAKA,EACL,KAAKA,EACL,KAAKA,EACH,OAAoG,IAA7F,CAAC,cAAe,aAAc,kBAAmB,kBAAkBppW,QAAQ4kB,KAAKd,QAG/F,CACA,OAAO,CACT,CACA,cAAAq/U,CAAehB,GACb,IAAKv9U,KAAK0+U,YAAc1+U,KAAKujV,IAC3B,OAAO,KAET,GAAoB,YAAhBvjV,KAAKd,QAAwBc,KAAKujV,MAAQvjV,KAAKqiJ,GAAI,CACnC,kBAAPk7L,IAIW,YAAhBv9U,KAAKd,QAAyBc,KAAKqiJ,IACrCpjJ,EAAOyO,KAAK,sDAAsD1N,KAAKd,8BAGzEq+U,EAAK,GAEP,MAAMl7L,EAqEZ,SAAoC8uM,GAClC,MAAMC,EAAY,IAAIpkQ,WAAW,IACjC,IAAK,IAAIzzG,EAAI,GAAIA,EAAI,GAAIA,IACvB63W,EAAU73W,GAAK43W,GAAiB,GAAK,GAAK53W,GAAK,IAEjD,OAAO63W,CACT,CA3EiBC,CAA2B9T,GAEtC,OADoB,IAAIqT,GAAS5wV,KAAKd,OAAQc,KAAKujV,IAAK,WAAYvjV,KAAK+wV,kBAAmB1uM,EAE9F,CAGA,MAAMivM,EAAWhO,EAA2BtjV,KAAKujV,KACjD,GAAI+N,EACF,OAAQtxV,KAAK6+U,WACX,KAAK2F,EACHxkV,KAAKkxV,KAAOI,EAERA,EAAS93W,QAAU,KACrBwmB,KAAKixV,MAAQK,EAASvN,SAASuN,EAAS93W,OAAS,GAAI83W,EAAS93W,OAAS,IAEzE,MACF,KAAKgrW,EACH,CACE,MAAM+M,EAAyB,IAAIvkQ,WAAW,CAAC,IAAM,EAAM,IAAM,IAAM,IAAM,GAAM,GAAM,IAAM,IAAM,IAAM,IAAM,GAAM,IAAM,IAAM,GAAM,MACzIhtF,KAAKkxV,KAAOf,GAAQoB,EAAwB,KAAMD,GAClD,MAAME,EAAgB,IAAI3qM,YAAYyqM,EAASv/P,OAAQu/P,EAASp/P,WAAYo/P,EAAS5/P,WAAa,GAC5F+/P,EAAa5uV,OAAO+iB,aAAa7lB,MAAM,KAAMnmB,MAAM0Z,KAAKk+V,IAGxDE,EAAcD,EAAWj2W,UAAUi2W,EAAWr2W,QAAQ,KAAMq2W,EAAWj4W,QAGvEm4W,GAFS,IAAI/6Q,WACGD,gBAAgB+6Q,EAAa,YAC5Bx2W,qBAAqB,OAAO,GACnD,GAAIy2W,EAAS,CACX,MAAMV,EAAQU,EAAQ70U,WAAW,GAAK60U,EAAQ70U,WAAW,GAAGu7D,UAAYs5Q,EAAQ1iO,aAAa,SAC7F,GAAIgiO,EAAO,CACT,MAAMW,EAAaprU,EAAayqU,GAAOlN,SAAS,EAAG,KAjwDnE,SAA0BkN,GACxB,MAAMY,EAAO,SAAcrvT,EAAOlvC,EAAM6pB,GACtC,MAAM20U,EAAMtvT,EAAMlvC,GAClBkvC,EAAMlvC,GAAQkvC,EAAMrlB,GACpBqlB,EAAMrlB,GAAM20U,CACd,EACAD,EAAKZ,EAAO,EAAG,GACfY,EAAKZ,EAAO,EAAG,GACfY,EAAKZ,EAAO,EAAG,GACfY,EAAKZ,EAAO,EAAG,EACjB,CA0vDgBc,CAAiBH,GACjB5xV,KAAKixV,MAAQW,CACf,CACF,CACA,KACF,CACF,QACE,CACE,IAAInO,EAAU6N,EAASvN,SAAS,EAAG,IACnC,GAAuB,KAAnBN,EAAQjqW,OAAe,CACzB,MAAMw4W,EAAS,IAAIhlQ,WAAW,IAC9BglQ,EAAOvhU,IAAIgzT,EAAS,GAAKA,EAAQjqW,QACjCiqW,EAAUuO,CACZ,CACAhyV,KAAKixV,MAAQxN,EACb,KACF,EAKN,IAAKzjV,KAAKixV,OAAmC,KAA1BjxV,KAAKixV,MAAMv/P,WAAmB,CAC/C,IAAIu/P,EAAQN,GAAiB3wV,KAAKujV,KAClC,IAAK0N,EAAO,CACV,MAAMr1V,EAAM7hB,OAAOiC,KAAK20W,IAAkBn3W,OAASopB,OAAO2sP,iBAC1D0hG,EAAQ,IAAIjkQ,WAAW,IACZ,IAAI5B,SAAS6lQ,EAAMl/P,OAAQ,GAAI,GACvC2oD,UAAU,EAAG9+I,GAChB+0V,GAAiB3wV,KAAKujV,KAAO0N,CAC/B,CACAjxV,KAAKixV,MAAQA,CACf,CACA,OAAOjxV,IACT,EAUF,MAAMiyV,GAA6B,0BACnC,SAASC,GAAsBzwV,GAC7B,OAAOwwV,GAA2B7yV,KAAKqC,EACzC,CACA,SAAS0wV,GAAgChhG,EAAQnlC,EAAMomI,GACrD,GAA4B,OAAxBjhG,EAAO+wF,cAAyB/wF,EAAOgxF,gBACzC,IAAK,IAAI5oW,EAAI64W,EAAe54W,OAAQD,KAAM,CACxC,MAAMqL,EAAOwtW,EAAe74W,GACtBa,EAAQ4xO,EAAKpnO,GACfxK,IACF4xO,EAAKpnO,GAAQytW,GAAoBlhG,EAAQ/2Q,GAE7C,CAEJ,CACA,SAASi4W,GAAoBlhG,EAAQ/2Q,GACnC,GAA4B,OAAxB+2Q,EAAO+wF,cAAyB/wF,EAAOgxF,gBAAiB,CAC1D,MAAMD,EAAe/wF,EAAO+wF,aAC5B,OAAO9nW,EAAM8L,QAAQ+rW,IAA4BK,IAC/C,MAAMC,EAAeD,EAAkB92W,UAAU,EAAG82W,EAAkB94W,OAAS,GACzEg5W,EAAgC,MAAhBtQ,OAAuB,EAASA,EAAaqQ,GACnE,YAAsB35V,IAAlB45V,GACFrhG,EAAO8wF,uBAAyB9wF,EAAO8wF,qBAAuB,IAAIv+U,MAAM,+DAA+D6uV,OAChID,GAEFE,CAAa,GAExB,CACA,OAAOp4W,CACT,CACA,SAASq4W,GAAsBthG,EAAQnlC,EAAM0mI,GAC3C,IAII7rK,EACA8rK,EALAzQ,EAAe/wF,EAAO+wF,aAM1B,GALKA,IACH/wF,EAAO+wF,aAAeA,EAAe,CAAC,GAIpC,eAAgBl2H,EAAM,CACxBnlC,EAAOmlC,EAAK4mI,WACZ,IACE,MAAM9tE,EAAe,IAAI91Q,KAAKuvB,IAAIm0T,GAAW5tE,aAC7C,IAAIA,EAAat0P,IAAIq2J,GAGnB,MAAM,IAAInjL,MAAM,IAAImjL,kDAAqD6rK,MAFzEC,EAAQ7tE,EAAah8Q,IAAI+9K,EAI7B,CAAE,MAAOnjM,GACPytQ,EAAO8wF,uBAAyB9wF,EAAO8wF,qBAAuB,IAAIv+U,MAAM,4BAA4BhgB,EAAMmF,WAC5G,CACF,MACEg+L,EAAOmlC,EAAKnlC,KACZ8rK,EAAQ3mI,EAAK2mI,MAEX9rK,KAAQq7J,EACV/wF,EAAO8wF,uBAAyB9wF,EAAO8wF,qBAAuB,IAAIv+U,MAAM,uDAAuDmjL,OAE/Hq7J,EAAar7J,GAAQ8rK,GAAS,EAElC,CACA,SAASE,GAAyB1hG,EAAQnlC,EAAM8mI,GAC9C,MAAMC,EAAS/mI,EAAK+mI,OACpB,GAAID,GAAsBC,KAAUD,EAAoB,CACtD,IAAI5Q,EAAe/wF,EAAO+wF,aACrBA,IACH/wF,EAAO+wF,aAAeA,EAAe,CAAC,GAExCA,EAAa6Q,GAAUD,EAAmBC,EAC5C,MACE5hG,EAAO8wF,uBAAyB9wF,EAAO8wF,qBAAuB,IAAIv+U,MAAM,sEAAsEqvV,MAElJ,CAMA,SAASC,GAAeC,GAA2B,GACjD,GAAoB,qBAATjkV,KAAsB,OAEjC,OADaikV,IAA6BjkV,KAAKkkV,cAAgBlkV,KAAKmkV,oBACtDnkV,KAAKkkV,aAAelkV,KAAKokV,iBACzC,CAOA,MAAMC,GAAsB,CAC1B1xR,MAAO,CACL2xR,KAAM,EACN,OAAQ,IACR,OAAQ,EACRC,KAAM,GACNC,KAAM,EACNC,KAAM,EACN,OAAQ,EACR,OAAQ,EACRC,KAAM,EACNC,KAAM,EACNC,KAAM,EACN,OAAQ,GACRC,KAAM,EACNC,KAAM,GAENC,KAAM,GAENC,KAAM,GAENC,KAAM,EACNC,KAAM,EACNC,KAAM,EACNC,KAAM,EACNC,KAAM,EACNC,KAAM,EACNC,KAAM,EACNC,KAAM,EACNC,KAAM,EACN,OAAQ,EACRC,KAAM,EACNC,KAAM,EAENC,KAAM,EACNC,KAAM,EACNC,KAAM,EACNC,KAAM,EACNC,KAAM,EACNC,KAAM,EACNC,KAAM,EACNC,KAAM,GAERz0I,MAAO,CACL00I,KAAM,EACNC,KAAM,EACNC,KAAM,EACNC,KAAM,EACNC,KAAM,EACNC,KAAM,GACNC,KAAM,EACNC,KAAM,EACNC,KAAM,EACNC,KAAM,GACNC,KAAM,GACNC,KAAM,EACNC,KAAM,IACNC,KAAM,IACNC,KAAM,EACNC,KAAM,EACNC,KAAM,EACNC,KAAM,EACNC,KAAM,EACNC,KAAM,EACNC,KAAM,EACNC,KAAM,EACNC,KAAM,EACNC,KAAM,EACNC,KAAM,EACN,OAAQ,EACRC,KAAM,EACNC,KAAM,IAER7yW,KAAM,CACJ8yW,KAAM,EACNC,KAAM,IAOV,SAASC,GAA8BC,EAAQl5W,EAAMi1W,GAA2B,GAC9E,OAAQiE,EAAOnzV,MAAM,KAAKi1B,MAAKywT,IAAU0N,GAA4B1N,EAAOzrW,EAAMi1W,IACpF,CACA,SAASkE,GAA4B1N,EAAOzrW,EAAMi1W,GAA2B,GAC3E,IAAImE,EACJ,MAAMlE,EAAcF,GAAeC,GACnC,OAA8H,OAAtHmE,EAAuC,MAAflE,OAAsB,EAASA,EAAYmE,gBAAgBC,GAAiB7N,EAAOzrW,MAAkBo5W,CACvI,CACA,SAASE,GAAiB7N,EAAOzrW,GAC/B,MAAO,GAAGA,iBAAoByrW,IAChC,CACA,SAAS8N,GAA0BC,GACjC,GAAIA,EAAY,CACd,MAAMhO,EAASgO,EAAWh8W,UAAU,EAAG,GACvC,OAAO63W,GAAoB3yI,MAAM8oI,EACnC,CACA,OAAO,CACT,CACA,SAASiO,GAAkCC,GACzC,OAAOA,EAAS3zV,MAAM,KAAK69B,QAAO,CAAC/yB,EAAK26U,KACtC,MAAMmO,EAAkBtE,GAAoB3yI,MAAM8oI,GAClD,OAAImO,GACwB,EAAlBA,EAAsB9oV,IAAQA,EAAM,EAAI,IAE1CwkV,GAAoB1xR,MAAM6nR,GAAU36U,IAAQA,EAAM,EAAI,EAAE,GAC/D,EACL,CACA,MAAM+oV,GAAyB,CAAC,EAqBhC,MAAMC,GAAqB,aAC3B,SAASC,GAAuBrO,EAAOwJ,GAA2B,GAChE,OAAOxJ,EAAMvjW,QAAQ2xW,IAAoBv2U,GAtB3C,SAAqCy2U,EAAgB9E,GAA2B,GAC9E,GAAI2E,GAAuBG,GACzB,OAAOH,GAAuBG,GAMhC,MAAMC,EAAgB,CACpBjE,KAAM,CAAC,OAAQ,OAAQ,QACvBY,KAAM,CAAC,OAAQ,SACfoD,GACF,IAAK,IAAIx+W,EAAI,EAAGA,EAAIy+W,EAAcx+W,OAAQD,IACxC,GAAI49W,GAA4Ba,EAAcz+W,GAAI,QAAS05W,GAEzD,OADA2E,GAAuBG,GAAkBC,EAAcz+W,GAChDy+W,EAAcz+W,GAGzB,OAAOw+W,CACT,CAGgDE,CAA4B32U,EAAE7a,cAAewsV,IAC7F,CACA,SAASiF,GAA0BC,EAAaC,GAG9C,OAAID,GAA+B,SAAhBA,EACVA,EAEFC,EAAaA,EAAWr0V,MAAM,KAAK,GAAKq0V,CACjD,CAiBA,MAAMC,GAAwB,qJACxBC,GAA8B,qBAC9BC,GAAoB,mCAEpBC,GAA4B,IAAInvV,OAAO,CAAC,0CAA0Chf,OAExF,sBAAsBA,OAEtB,yBAAyBA,OAEzB,gCAAgCA,OAEhC,MAAMA,QACJuU,KAAK,KAAM,KACP65V,GAA4B,IAAIpvV,OAAO,CAAC,YAAYhf,OAAQ,6HAA6HA,OAAQ,wFAAwFA,OAAQ,0DAA0DA,OAAQ,kBAAkBA,OAAQ,sBAAsBA,QAAQuU,KAAK,MACta,MAAM85V,GACJ,gBAAOC,CAAUh9N,EAAQi9N,GACvB,IAAK,IAAIr/W,EAAI,EAAGA,EAAIoiJ,EAAOniJ,OAAQD,IAAK,CACtC,MAAMivJ,EAAQ7M,EAAOpiJ,GACrB,GAAIivJ,EAAM38I,KAAO+sW,EACf,OAAOpwN,CAEX,CACF,CACA,cAAOppH,CAAQrK,EAAK2qU,GAClB,OAAOzF,EAAkBhB,iBAAiByG,EAAS3qU,EAAK,CACtDqkU,iBAAiB,GAErB,CACA,sBAAOyf,CAAgBp3V,GACrB,OAAO82V,GAAkBn5V,KAAKqC,EAChC,CACA,0BAAOq3V,CAAoBjzS,EAAQ62R,GACjC,MACMvrF,EAAS,CACb4nG,gBAAiB,KACjBC,OAAQ,GACR/W,qBAAsB,KACtBgX,YAAa,KACbC,YAAa,KACbtY,gBAAiB,KACjBsB,aAAc,KACdC,gBATsB+P,GAAsBrsS,IAWxCszS,EAAwB,GAE9B,IAAIt7W,EACJ,IAFAw6W,GAAsB75Q,UAAY,EAEsB,OAAhD3gG,EAASw6W,GAAsBv0V,KAAK+hD,KAC1C,GAAIhoE,EAAO,GAAI,CACb,IAAIu7W,EAEJ,MAAM9yN,EAAQ,IAAIs0M,EAAS/8V,EAAO,IAEhCs0W,GAAgChhG,EAAQ7qH,EAAO,CAAC,SAAU,sBAAuB,cAAe,aAAc,oBAAqB,QAAS,QAAS,YAAa,kBAAmB,SAEvL,MAAMi9M,EAAM8O,GAAoBlhG,EAAQtzQ,EAAO,IACzCqlP,EAAQ,CACZ58F,QACA+yN,QAAS/yN,EAAMy0M,eAAe,cAAgBz0M,EAAMy0M,eAAe,qBACnEn2V,KAAM0hJ,EAAMugD,KACZ9xK,IAAK2jV,GAAWt5U,QAAQmkU,EAAK7G,IAEzB15Q,EAAasjE,EAAMg1M,kBAAkB,cACvCt4Q,IACFkgK,EAAM/lP,MAAQ6lF,EAAW7lF,MACzB+lP,EAAM9lP,OAAS4lF,EAAW5lF,QAE5Bk8W,GAAUhzN,EAAMizN,OAAQr2H,GAC8B,OAA/Ck2H,EAAuBl2H,EAAMs2H,gBAA0BJ,EAAqB5/W,QACjF2/W,EAAsB99W,KAAK6nP,GAE7BiuB,EAAO6nG,OAAO39W,KAAK6nP,EACrB,MAAO,GAAIrlP,EAAO,GAAI,CACpB,MAAMgyG,EAAMhyG,EAAO,GACb9B,EAAa8B,EAAO,GAC1B,OAAQgyG,GACN,IAAK,eACH,CAEE,MAAM4pQ,EAAe,IAAI7e,EAAS7+V,GAEhCo2W,GAAgChhG,EAAQsoG,EAAc,CAAC,UAAW,WAAY,QAAS,QAEzF,MAAMC,EAASD,EAAa,WACxBC,IACyB,OAAvBvoG,EAAO8nG,cACT9nG,EAAO8nG,YAAc,CAAC,GAExB9nG,EAAO8nG,YAAYS,GAAUD,GAE/B,KACF,CACF,IAAK,cACH,CAEE,MAAME,EAAaC,GAAS79W,EAAY2gW,EAASvrF,GAC7CwoG,EAAWjb,WAAaib,EAAWjtR,eACV,OAAvBykL,EAAO+nG,cACT/nG,EAAO+nG,YAAc,IAEvB/nG,EAAO+nG,YAAY79W,KAAKs+W,IAExB16V,EAAOyO,KAAK,mDAAmD3xB,MAEjE,KACF,CACF,IAAK,SAGD,CACE,MAAM89W,EAAqB,IAAIjf,EAAS7+V,GACxCo2W,GAAgChhG,EAAQ0oG,EAAoB,CAAC,OAAQ,QAAS,eAC9EpH,GAAsBthG,EAAQ0oG,EAAoBnd,EACpD,CACA,MAEJ,IAAK,mBACH,CAEE,MAAMod,EAA4B,IAAIlf,EAAS7+V,GAE7Co2W,GAAgChhG,EAAQ2oG,EAA2B,CAAC,aAAc,eAEpF3oG,EAAO4nG,gBAAkB,CACvBxV,IAAKmV,GAAWt5U,QAAQ06U,EAA0B,cAAepd,GACjEqd,UAAWD,EAA0B,eAAiB,KAExD,KACF,CACF,IAAK,QAGD3oG,EAAOyvF,gBAAkBoZ,GAAqBj+W,GAItD,CAGF,MAAMk+W,EAA0Bd,EAAsB3/W,OAAS,GAAK2/W,EAAsB3/W,OAAS23Q,EAAO6nG,OAAOx/W,OAKjH,OAJA23Q,EAAO6nG,OAASiB,EAA0Bd,EAAwBhoG,EAAO6nG,OAC5C,IAAzB7nG,EAAO6nG,OAAOx/W,SAChB23Q,EAAO8wF,qBAAuB,IAAIv+U,MAAM,gCAEnCytP,CACT,CACA,+BAAO+oG,CAAyBr0S,EAAQ62R,EAASvrF,GAC/C,IAAItzQ,EACJ,MAAM8kF,EAAU,CAAC,EACXq2R,EAAS7nG,EAAO6nG,OAChBmB,EAAe,CACnBC,MAAOpB,EAAOl7W,KAAIolP,IAAS,CACzBr3O,GAAIq3O,EAAM58F,MAAM8zN,MAChBC,WAAYn3H,EAAMm3H,eAEpBC,UAAWtB,EAAOl7W,KAAIolP,IAAS,CAC7Br3O,GAAIq3O,EAAM58F,MAAMg0N,UAChBC,UAAWr3H,EAAMq3H,cAEnB,kBAAmB,IAErB,IAAI1uW,EAAK,EAET,IADAysW,GAA4B95Q,UAAY,EACuB,QAAvD3gG,EAASy6W,GAA4Bx0V,KAAK+hD,KAAmB,CACnE,MAAMygF,EAAQ,IAAIs0M,EAAS/8V,EAAO,IAC5BG,EAAOsoJ,EAAMwgD,KACnB,GAAI9oM,EAAM,CACR,MAAM29I,EAASw+N,EAAan8W,GACtBw8W,EAAS73R,EAAQ3kF,IAAS,GAChC2kF,EAAQ3kF,GAAQw8W,EAEdrI,GAAgChhG,EAAQ7qH,EAAO,CAAC,MAAO,WAAY,WAAY,iBAAkB,sBAAuB,OAAQ,cAAe,kBAAmB,aAEpK,MAAMouF,EAAOpuF,EAAMm0N,SACbC,EAAYp0N,EAAM,kBAClBynB,EAAWznB,EAAMq0N,SACjBC,EAAkBt0N,EAAMu0N,gBACxBC,EAAax0N,EAAM,eACnByuF,EAAQ,CACZzuF,QACA+yN,QAAS,EACTxtW,GAAIA,IACJ+lF,QAAS00D,EAAM,aAAe,GAC9B1hJ,KAAM0hJ,EAAMugD,MAAQ6tC,GAAQ,GAC5B12O,OACAunD,QAAS+gG,EAAMuR,KAAK,WACpBkjN,WAAYz0N,EAAMuR,KAAK,cACvBmjN,OAAQ10N,EAAMuR,KAAK,UACnB68E,OACA3/M,IAAKuxH,EAAM20N,IAAMvC,GAAWt5U,QAAQknH,EAAM20N,IAAKve,GAAW,IAc5D,GAZIge,IACF3lI,EAAM2lI,UAAYA,GAEhB3sM,IACFgnE,EAAMhnE,SAAWA,GAEf6sM,IACF7lI,EAAM6lI,gBAAkBA,GAEtBE,IACF/lI,EAAM+lI,WAAaA,GAEP,MAAVn/N,GAAkBA,EAAOniJ,OAAQ,CAInC,MAAM0hX,EAAaxC,GAAWC,UAAUh9N,EAAQo5F,EAAMnjJ,UAAY+pD,EAAO,GACzEw/N,GAAYpmI,EAAOmmI,EAAY,cAC/BC,GAAYpmI,EAAOmmI,EAAY,YACjC,CACAV,EAAOn/W,KAAK05O,EACd,CACF,CACA,OAAOpyJ,CACT,CACA,yBAAOy4R,CAAmBv1S,EAAQ62R,EAAS7wV,EAAI7N,EAAMq9W,EAAYC,GAC/D,MAAMp4H,EAAQ,IAAIu8G,EAAa/C,GACzBsD,EAAY98G,EAAM88G,UAExB,IAOIniW,EACAtE,EACAikW,EATA+d,EAAqB,KACrBC,EAAY,EACZC,EAAc,EACd3a,EAAgB,EAChB4a,EAAuB,EACvBC,EAAW,KACXtc,EAAO,IAAInvH,EAASlyO,EAAM0+V,GAI1Bkf,GAAiB,EACjBC,GAAiB,EACjBC,EAAgB,KAIpB,IAHAtD,GAA0Bh6Q,UAAY,EACtC0kJ,EAAM69G,KAAOl7R,EACbq9K,EAAMi/G,gBAAkB+P,GAAsBrsS,GACe,QAArDhoE,EAAS26W,GAA0B10V,KAAK+hD,KAAmB,CAC7Dg2S,IACFA,GAAiB,EACjBxc,EAAO,IAAInvH,EAASlyO,EAAM0+V,GAE1B2C,EAAKnkU,MAAQ4lU,EACbzB,EAAK9B,GAAKie,EACVnc,EAAKz8O,GAAK84P,EACVrc,EAAKn8G,MAAQr3O,EACT0vW,IACFlc,EAAKnB,YAAcqd,EACnBlc,EAAKjC,mBAAqBme,EAAmBne,mBAC7Cme,EAAmBne,mBAAqB,KACpC0e,IACFzc,EAAKtC,aAAa+e,GAClBA,EAAgB,QAItB,MAAMpxW,EAAW7M,EAAO,GACxB,GAAI6M,EAAU,CAEZ20V,EAAK30V,SAAW+I,WAAW/I,GAE3B,MAAM5K,GAAS,IAAMjC,EAAO,IAAI0F,MAAM,GACtC87V,EAAKv/V,MAAQA,GAAS,KACtBu/V,EAAK/B,QAAQjiW,KAAKyE,EAAQ,CAAC,MAAO4K,EAAU5K,GAAS,CAAC,MAAO4K,GAC/D,MAAO,GAAI7M,EAAO,IAEhB,GAAIq8V,EAAemF,EAAK30V,UAAW,CACjC20V,EAAKnkU,MAAQ4lU,EACTtD,GACFue,GAAiB1c,EAAM7B,EAAWt6G,GAEpCm8G,EAAK9B,GAAKie,EACVnc,EAAKn8G,MAAQr3O,EACbwzV,EAAKz8O,GAAK84P,EACV1b,EAAU3kW,KAAKgkW,GAEf,MAAMkE,GAAO,IAAM1lW,EAAO,IAAI0F,MAAM,GACpC87V,EAAKxC,OAASwV,GAAoBnvH,EAAOqgH,GACzCyY,GAAsB3c,EAAMsc,GAC5BA,EAAWtc,EACXyB,GAAiBzB,EAAK30V,SACtB8wW,IACAC,EAAc,EACdI,GAAiB,CACnB,OACK,GAAIh+W,EAAO,GAAI,CAEpB,MAAM+L,GAAQ,IAAM/L,EAAO,IAAI0F,MAAM,GACjCo4W,EACFtc,EAAKtC,aAAanzV,EAAM+xW,GAExBtc,EAAKtC,aAAanzV,EAEtB,MAAO,GAAI/L,EAAO,GAGhBwhW,EAAKjC,oBAAsB,IAAMv/V,EAAO,IAAI0F,MAAM,GAClD87V,EAAK/B,QAAQjiW,KAAK,CAAC,oBAAqBgkW,EAAKjC,sBACtB,IAAnBwe,IACFA,EAAgB5b,EAAUxmW,YAEvB,CAEL,GADAqE,EAASA,EAAO,GAAG0lB,MAAMk1V,KACpB56W,EAAQ,CACXohB,EAAOyO,KAAK,sDACZ,QACF,CACA,IAAKn0B,EAAI,EAAGA,EAAIsE,EAAOrE,QACI,qBAAdqE,EAAOtE,GADWA,KAO/B,MAAMs2G,GAAO,IAAMhyG,EAAOtE,IAAIgK,MAAM,GAC9B04W,GAAU,IAAMp+W,EAAOtE,EAAI,IAAIgK,MAAM,GACrC24W,EAASr+W,EAAOtE,EAAI,IAAM,IAAMsE,EAAOtE,EAAI,IAAIgK,MAAM,GAAK,GAChE,OAAQssG,GACN,IAAK,gBACHqzI,EAAMllP,KAAOi+W,EAAO34W,cACpB,MACF,IAAK,iBACHk4W,EAAYt4H,EAAMy9G,QAAU9jV,SAASo/V,GACrC,MACF,IAAK,OACH,CACE,MAAME,EAAY,IAAIvhB,EAASqhB,GAE7B9J,GAAgCjvH,EAAOi5H,EAAW,CAAC,gCAErD,MAAMhb,EAAkBgb,EAAUphB,eAAe,oBACjD,GAAIb,EAAeiH,GAAkB,CACnCj+G,EAAMi+G,gBAAkBA,EAExB,IAAK,IAAItrT,EAAKsrT,EAAiBtrT,KAC7BmqT,EAAU1nQ,QAAQ,MAEpBkjR,GAAara,CACf,CACA,MAAMC,EAA4B+a,EAAU9gB,iBAAiB,+BACzD+F,IACFl+G,EAAMk+G,0BAA4BA,EAA0Br9U,MAAM,OAEpE,KACF,CACF,IAAK,iBACHm/N,EAAM29G,eAAiBlxU,KAAKhT,IAAIE,SAASo/V,GAAS,GAClD,MACF,IAAK,UACH/4H,EAAMjwN,QAAUpW,SAASo/V,GACzB,MACF,IAAK,uBACL,IAAK,SACH,MACF,IAAK,UACH/4H,EAAMk9G,MAAO,EACb,MACF,IAAK,KACC6b,GAAUC,IACZ7c,EAAK/B,QAAQjiW,KAAK6gX,EAAS,CAACD,EAAQC,GAAU,CAACD,IAEjD,MACF,IAAK,gBACHP,IACArc,EAAK/B,QAAQjiW,KAAK,CAAC,QACnB,MACF,IAAK,MACHgkW,EAAKv1N,KAAM,EACXu1N,EAAK/B,QAAQjiW,KAAK,CAACw0G,IACnB,MACF,IAAK,UACHwvP,EAAK/B,QAAQjiW,KAAK,CAACw0G,EAAKosQ,IACxB,MACF,IAAK,YACH,CACE,MAAMxgB,EAAgB,IAAIb,EAASqhB,GAEjC9J,GAAgCjvH,EAAOu4G,EAAe,CAAC,KAAM,QAAS,aAAc,WAAY,aAAc,aAAc,cAC5H0W,GAAgCjvH,EAAOu4G,EAAeA,EAAcX,aAEtE,MAAMshB,EAAY,IAAI5gB,EAAUC,EAAev4G,EAAMi9G,WAAW1E,EAAcM,KAC1EqgB,EAAU9iT,SAAW4pL,EAAMi+G,gBAC7Bj+G,EAAMi9G,WAAWic,EAAUvwW,IAAMuwW,EAEjCn9V,EAAOyO,KAAK,oCAAoCuuV,MAGlD5c,EAAK/B,QAAQjiW,KAAK,CAAC,kBAAmB4gX,IACtC,KACF,CACF,IAAK,SAED,CACE,MAAMpC,EAAqB,IAAIjf,EAASqhB,GACxC9J,GAAgCjvH,EAAO22H,EAAoB,CAAC,OAAQ,QAAS,SAAU,eACnF,WAAYA,EACdhH,GAAyB3vH,EAAO22H,EAAoByB,GAEpD7I,GAAsBvvH,EAAO22H,EAAoBnd,EAErD,CACA,MAEJ,IAAK,yBACHgf,EAAuB7+V,SAASo/V,GAChC,MACF,IAAK,MACH,CACE,MAAMI,EAAWzC,GAASqC,EAAQvf,EAASx5G,GAC3C,GAAIm5H,EAAS3vR,cAAe,CAC1B,GAAwB,SAApB2vR,EAASn9V,OAAmB,CAC9Bs+U,OAAY5kV,EACZ,KACF,CACK4kV,IACHA,EAAY,CAAC,GAEXA,EAAU6e,EAASxd,aACrBrB,EAAY39U,EAAS,CAAC,EAAG29U,IAE3BA,EAAU6e,EAASxd,WAAawd,CAClC,MACEp9V,EAAOyO,KAAK,2CAA2CuuV,MAEzD,KACF,CACF,IAAK,QACH/4H,EAAM09G,gBAAkBoZ,GAAqBiC,GAC7C,MACF,IAAK,MACH,CACE,MAAMK,EAAW,IAAI1hB,EAASqhB,GAI9B,GAFE9J,GAAgCjvH,EAAOo5H,EAAU,CAAC,YAAa,QAE7Djd,EAAK30V,SAAU,CAIjB,MAAMwmI,EAAO,IAAIg/F,EAASlyO,EAAM0+V,GAChC6f,GAAerrO,EAAMorO,EAAUzwW,EAAI2xV,GACnC+d,EAAqBrqO,EACrBmuN,EAAKnB,YAAcqd,EACfA,EAAmBne,qBAAuBiC,EAAKjC,qBACjDiC,EAAKjC,mBAAqBme,EAAmBne,mBAEjD,KAAO,CAGL,MAAMjiU,EAAMkkU,EAAKrC,mBACjB,GAAI7hU,EAAK,CACP,MAAMD,EAAQmkU,EAAKnC,qBACnB4e,EAAgB,GAAG3gV,EAAMD,KAASA,GACpC,MACE4gV,EAAgB,KAElBS,GAAeld,EAAMid,EAAUzwW,EAAI2xV,GACnC+d,EAAqBlc,EACrBwc,GAAiB,CACnB,CACA,KACF,CACF,IAAK,iBACH,CACE,MAAMW,EAAqB,IAAI5hB,EAASqhB,GACxC/4H,EAAM89G,eAAiBwb,EAAmB3kN,KAAK,oBAC/CqrF,EAAM+9G,aAAeub,EAAmBphB,cAAc,iBAAkB,GACxEl4G,EAAMg+G,kBAAoBh+G,EAAM+9G,aAAe,GAAKub,EAAmB3kN,KAAK,uBAC5EqrF,EAAMm+G,aAAemb,EAAmBphB,cAAc,iBAAkB,GACxEl4G,EAAMo+G,SAAWkb,EAAmBphB,cAAc,YAAa,GAC/D,KACF,CACF,IAAK,WACH,CACE,MAAMqhB,EAAe,IAAI7hB,EAASqhB,GAClC/4H,EAAMq+G,WAAakb,EAAathB,qBAAqB,eACrD,KACF,CACF,IAAK,OACH,CACE,IAAI+E,EAAWh9G,EAAMg9G,SAChBA,IACHA,EAAWh9G,EAAMg9G,SAAW,IAE9B,MAAMwc,EAAuBjB,EAAc,EAAIvb,EAASA,EAAS1mW,OAAS,QAAKof,EACzElX,EAAQ+5W,IACRrc,EAAY,IAAIxE,EAASqhB,GAE7B9J,GAAgCjvH,EAAOk8G,EAAW,CAAC,YAAa,QAElE,MAAMud,EAAO,IAAIxd,EAAKC,EAAWC,EAAM3C,EAASh7V,EAAOg7W,GACvDxc,EAAS7kW,KAAKshX,GACdtd,EAAK30V,UAAYiyW,EAAKjyW,SACtB,KACF,CACF,IAAK,eACH,CACE,MAAMkyW,EAAmB,IAAIhiB,EAASqhB,GAEpC9J,GAAgCjvH,EAAO05H,EAAkB,CAAC,QAE5D15H,EAAMs+G,YAAcob,EACpB,KACF,CACF,IAAK,mBACH,CACE,MAAMC,EAAuB,IAAIjiB,EAASqhB,GAExC9J,GAAgCjvH,EAAO25H,EAAsB,CAAC,QAEhE35H,EAAMu+G,iBAAmBv+G,EAAMu+G,kBAAoB,GACnDv+G,EAAMu+G,iBAAiBpmW,KAAKwhX,GAC5B,KACF,CACF,QACE59V,EAAOyO,KAAK,gCAAgC7vB,KAGlD,CACF,CACI89W,IAAaA,EAAS9e,QACxBmD,EAAU37U,MACVy8U,GAAiB6a,EAASjxW,SACtBw4O,EAAMg9G,WACRh9G,EAAM+8G,aAAe0b,IAEdz4H,EAAMg9G,WACf8b,GAAsB3c,EAAMsc,GAC5Btc,EAAKz8O,GAAK84P,EACVx4H,EAAM+8G,aAAeZ,EACjB7B,GACFue,GAAiB1c,EAAM7B,EAAWt6G,IAGtC,MAAM45H,EAAiB9c,EAAUxmW,OAC3BujX,EAAgB/c,EAAU,GAC1Bgd,EAAehd,EAAU8c,EAAiB,GAEhD,GADAhc,GAAiB59G,EAAMi+G,gBAAkBj+G,EAAM29G,eAC3CC,EAAgB,GAAKgc,GAAkBE,EAAc,CACvD95H,EAAM28G,sBAAwBiB,EAAgBgc,EAC9C,MAAMG,EAASD,EAAazf,GAC5Br6G,EAAM68G,MAAmB,gBAAXkd,EAA2BA,EAAS,EAC7C/5H,EAAMk9G,OACT4c,EAAa7e,SAAU,GAErB4e,IACF75H,EAAMw9G,QAAUqc,EAAcn6P,GAElC,MACEsgI,EAAM68G,MAAQ,EACd78G,EAAMw9G,QAAU,EAoBlB,OAlBIx9G,EAAM+8G,eACRa,GAAiB59G,EAAM+8G,aAAav1V,UAEtCw4O,EAAM49G,cAAgBA,EACtB59G,EAAM48G,MAAQ4b,EAWVE,EAAgB,GAuDxB,SAAkC5b,EAAW4b,GAC3C,IAAIsB,EAAWld,EAAU4b,GACzB,IAAK,IAAIriX,EAAIqiX,EAAeriX,KAAM,CAChC,MAAM8lW,EAAOW,EAAUzmW,GAEvB,IAAK8lW,EACH,OAEFA,EAAKhC,gBAAkB6f,EAAS7f,gBAAkC,IAAhBgC,EAAK30V,SACvDwyW,EAAW7d,CACb,CACF,CAjEM8d,CAAyBnd,EAAW4b,GAE/B14H,CACT,EAEF,SAAS02H,GAASwD,EAAkB1gB,EAASvrF,GAC3C,IAAIksG,EAAkBC,EAEtB,MAAMC,EAAW,IAAI3iB,EAASwiB,GAE5BjL,GAAgChhG,EAAQosG,EAAU,CAAC,YAAa,oBAAqB,MAAO,KAAM,QAEpG,MAAMC,EAAwD,OAAvCH,EAAmBE,EAASE,QAAkBJ,EAAmB,GAClFK,EAAaH,EAAStC,IACtB0C,EAAYJ,EAAStiB,mBAAmB,MACxC2iB,EAA2BL,EAASM,kBAEpCC,EAAiE,OAA7CR,EAAsBC,EAASQ,WAAqBT,EAAsB,WAChGI,GAAcH,EAASS,KAAOL,GAChC1+V,EAAOvb,MAAM,eAAe65W,EAASS,MAIvC,MAAMC,EAAcP,EAAahF,GAAWt5U,QAAQs+U,EAAYhhB,GAAW,GACrEqU,GAAqB6M,GAAsD,KAAK75V,MAAM,KAAKjmB,IAAI8kB,QAAQoB,OAAOpB,OAAOrB,UAC3H,OAAO,IAAIqvV,GAAS4M,EAAeS,EAAaH,EAAkB/M,EAAmB4M,EACvF,CACA,SAAS3D,GAAqBkE,GAC5B,MACMtd,EADa,IAAIhG,EAASsjB,GACG/iB,qBAAqB,eACxD,OAAIjB,EAAe0G,GACVA,EAEF,IACT,CACA,SAAS0Y,GAAU6E,EAAsBj7H,GACvC,IAAIg0H,GAAUiH,GAAwB,IAAIp6V,MAAM,SAASC,QAAO1oB,GAAKA,IACrE,CAAC,QAAS,QAAS,QAAQsH,SAAQ5E,IACjC,MAAMijU,EAAWi2C,EAAOlzV,QAAOylV,GA7qBnC,SAAqBA,EAAOzrW,GAC1B,MAAMogX,EAAY/K,GAAoBr1W,GACtC,QAASogX,KAAeA,EAAU3U,EAAMlmW,MAAM,EAAG,GACnD,CA0qB4C86W,CAAY5U,EAAOzrW,KACvDijU,EAASznU,SAEX0pP,EAAM,GAAGllP,UAAeijU,EAASriT,KAAK,KAEtCs4V,EAASA,EAAOlzV,QAAOylV,IAAsC,IAA7BxoC,EAAS7lU,QAAQquW,KACnD,IAEFvmH,EAAMs2H,cAAgBtC,CACxB,CACA,SAASiE,GAAYpmI,EAAOupI,EAAWC,GACrC,MAAMC,EAAaF,EAAUC,GACzBC,IACFzpI,EAAMwpI,GAAiBC,EAE3B,CAaA,SAASxC,GAAsB3c,EAAMsc,GAC/Btc,EAAKjC,mBACPiC,EAAKhC,gBAAkBn0V,KAAKia,MAAMk8U,EAAKjC,oBAClB,MAAZue,GAAoBA,EAASte,kBACtCgC,EAAKhC,gBAAkBse,EAASld,oBAE7BvE,EAAemF,EAAKhC,mBACvBgC,EAAKhC,gBAAkB,KACvBgC,EAAKjC,mBAAqB,KAE9B,CACA,SAASmf,GAAeld,EAAMid,EAAUzwW,EAAI2xV,GAC1C6B,EAAKxC,OAASyf,EAASrB,IACnBqB,EAASmC,WACXpf,EAAKtC,aAAauf,EAASmC,WAE7Bpf,EAAKn8G,MAAQr3O,EACbwzV,EAAK9B,GAAK,cACNC,IACF6B,EAAK7B,UAAYA,GAEnB6B,EAAKnB,YAAc,IACrB,CACA,SAAS6d,GAAiB1c,EAAM7B,EAAWt6G,GACzCm8G,EAAK7B,UAAYA,EACjB,MAAM,mBACJwE,GACE9+G,EACE8+G,EAAmBxoW,QAAUwoW,EAAmBA,EAAmBxoW,OAAS,GAAGgkW,YAAcA,IAAczjW,OAAOiC,KAAKwhW,GAAWxkT,MAAKuS,GAAUiyS,EAAUjyS,GAAQylT,sBACvKhP,EAAmB3mW,KAAKgkW,EAE5B,CAEA,IAAIqf,GACQ,WADRA,GAEK,QAFLA,GAGW,aAHXA,GAIc,gBAEdC,GACI,OADJA,GAEK,QAFLA,GAGQ,WAGZ,SAASC,GAAsB9/V,GAC7B,MAAM,KACJ9gB,GACE8gB,EACJ,OAAQ9gB,GACN,KAAK0gX,GACH,OAAOC,GACT,KAAKD,GACH,OAAOC,GACT,QACE,OAAOA,GAEb,CACA,SAASE,GAAergV,EAAU1f,GAChC,IAAIiW,EAAMyJ,EAASzJ,IAOnB,YAJYnc,IAARmc,GAA8C,IAAzBA,EAAI35B,QAAQ,WAEnC25B,EAAMjW,EAAQiW,KAETA,CACT,CACA,MAAM+pV,GACJ,WAAAj9U,CAAYk9U,GACV/+V,KAAK++V,SAAM,EACX/+V,KAAKg/V,QAAUjlX,OAAO6yB,OAAO,MAC7B5M,KAAKkiV,aAAe,KACpBliV,KAAK++V,IAAMA,EACX/+V,KAAKi/V,mBACP,CACA,SAAAC,CAAUC,GAAgB,CAC1B,QAAAC,GACEp/V,KAAKq/V,wBACP,CACA,iBAAAJ,GACE,MAAM,IACJF,GACE/+V,KACJ++V,EAAItsU,GAAG2iL,EAAOkqJ,iBAAkBt/V,KAAKu/V,kBAAmBv/V,MACxD++V,EAAItsU,GAAG2iL,EAAOoqJ,cAAex/V,KAAKy/V,eAAgBz/V,MAClD++V,EAAItsU,GAAG2iL,EAAOsqJ,oBAAqB1/V,KAAK2/V,oBAAqB3/V,MAC7D++V,EAAItsU,GAAG2iL,EAAOwqJ,uBAAwB5/V,KAAK6/V,uBAAwB7/V,KACrE,CACA,mBAAA8/V,GACE,MAAM,IACJf,GACE/+V,KACJ++V,EAAIzqN,IAAI8gE,EAAOkqJ,iBAAkBt/V,KAAKu/V,kBAAmBv/V,MACzD++V,EAAIzqN,IAAI8gE,EAAOoqJ,cAAex/V,KAAKy/V,eAAgBz/V,MACnD++V,EAAIzqN,IAAI8gE,EAAOsqJ,oBAAqB1/V,KAAK2/V,oBAAqB3/V,MAC9D++V,EAAIzqN,IAAI8gE,EAAOwqJ,uBAAwB5/V,KAAK6/V,uBAAwB7/V,KACtE,CAKA,oBAAA+/V,CAAqBjhW,GACnB,MAAM8T,EAAS5S,KAAK++V,IAAInsV,OAClBotV,EAAUptV,EAAOqtV,QACjBC,EAASttV,EAAOmsO,OAEhBA,EAAS,IADQihH,GAAWE,GACAttV,GAElC,OADA5S,KAAKg/V,QAAQlgW,EAAQ9gB,MAAQ+gQ,EACtBA,CACT,CACA,iBAAAohH,CAAkBrhW,GAChB,OAAOkB,KAAKg/V,QAAQlgW,EAAQ9gB,KAC9B,CACA,mBAAAoiX,CAAoB7rR,GACdv0E,KAAKg/V,QAAQzqR,WACRv0E,KAAKg/V,QAAQzqR,EAExB,CAKA,sBAAA8qR,GACE,IAAK,MAAM9qR,KAAev0E,KAAKg/V,QAAS,CACtC,MAAMjgH,EAAS/+O,KAAKg/V,QAAQzqR,GACxBwqK,GACFA,EAAO/zG,UAEThrI,KAAKogW,oBAAoB7rR,EAC3B,CACF,CACA,OAAAy2D,GACEhrI,KAAKkiV,aAAe,KACpBliV,KAAK8/V,sBACL9/V,KAAKq/V,wBACP,CACA,iBAAAE,CAAkB/6W,EAAOoF,GACvB,MAAM,IACJmrB,GACEnrB,EACJoW,KAAKkiV,aAAe,KACpBliV,KAAKT,KAAK,CACR1T,GAAI,KACJq3O,MAAO,EACPpe,aAAc,OACd9mO,KAAM0gX,GACN3pV,MACAsrV,mBAAoB,MAExB,CACA,cAAAZ,CAAej7W,EAAOoF,GACpB,MAAM,GACJiC,EAAE,MACFq3O,EAAK,UACL62H,EAAS,IACThlV,EAAG,mBACHsrV,GACEz2W,EACJoW,KAAKT,KAAK,CACR1T,KACAq3O,QACA62H,YACAj1I,aAAc,OACd9mO,KAAM0gX,GACN3pV,MACAsrV,sBAEJ,CACA,mBAAAV,CAAoBn7W,EAAOoF,GACzB,MAAM,GACJiC,EAAE,QACF+lF,EAAO,IACP78D,EAAG,mBACHsrV,GACEz2W,EACJoW,KAAKT,KAAK,CACR1T,KACA+lF,UACAsxJ,MAAO,KACPpe,aAAc,OACd9mO,KAAM0gX,GACN3pV,MACAsrV,sBAEJ,CACA,sBAAAR,CAAuBr7W,EAAOoF,GAC5B,MAAM,GACJiC,EAAE,QACF+lF,EAAO,IACP78D,EAAG,mBACHsrV,GACEz2W,EACJoW,KAAKT,KAAK,CACR1T,KACA+lF,UACAsxJ,MAAO,KACPpe,aAAc,OACd9mO,KAAM0gX,GACN3pV,MACAsrV,sBAEJ,CACA,IAAA9gW,CAAKT,GACH,IAAIwhW,EACJ,MAAM1tV,EAAS5S,KAAK++V,IAAInsV,OAKxB,IAcI2tV,EAdAxhH,EAAS/+O,KAAKmgW,kBAAkBrhW,GACpC,GAAIigP,EAAQ,CACV,MAAMyhH,EAAgBzhH,EAAOjgP,QAC7B,GAAI0hW,GAAiBA,EAAczrV,MAAQjW,EAAQiW,KAAOyrV,EAAct9H,QAAUpkO,EAAQokO,MAGxF,YADAjkO,EAAOk6B,MAAM,+CAGfl6B,EAAOuB,IAAI,yDAAyD1B,EAAQ9gB,QAC5E+gQ,EAAO/jN,OACT,CAiBA,GAXEulU,EADEzhW,EAAQ9gB,OAAS0gX,GACN9rV,EAAO6tV,mBAAmBl7T,QAE1B1lC,EAAS,CAAC,EAAG+S,EAAO8tV,mBAAmBn7T,QAAS,CAC3Do7T,aAAc,KACdC,WAAY,OAGhB7hH,EAAS/+O,KAAK+/V,qBAAqBjhW,GAI/Bo7U,EAAuE,OAAvDomB,EAAwBxhW,EAAQuhW,yBAA8B,EAASC,EAAsB3D,MAAO,CACtH,IAAIkE,EAQJ,GAPI/hW,EAAQ9gB,OAAS0gX,IAA+C,OAAlB5/V,EAAQokO,MACxD29H,EAAe7gW,KAAK++V,IAAI/F,OAAOl6V,EAAQokO,OAAO49H,QACrChiW,EAAQ9gB,OAAS0gX,IAAkD,OAAf5/V,EAAQjT,GACrEg1W,EAAe7gW,KAAK++V,IAAIgC,YAAYjiW,EAAQjT,IAAIi1W,QACvChiW,EAAQ9gB,OAAS0gX,IAAqD,OAAf5/V,EAAQjT,KACxEg1W,EAAe7gW,KAAK++V,IAAIiC,eAAeliW,EAAQjT,IAAIi1W,SAEjDD,EAAc,CAChB,MAAMtf,EAAasf,EAAatf,WAC1B0f,EAAiBJ,EAAahgB,eACpC,GAAIU,GAAc0f,EAAgB,CAChC,MAAMC,EAAgF,IAAjDvxV,KAAKhT,IAAiB,EAAb4kV,EAAiC,GAAjB0f,GAC9DV,EAAa1gW,EAAS,CAAC,EAAG0gW,EAAY,CACpCY,qBAAsBxxV,KAAKjT,IAAIwkW,EAA8BX,EAAWY,sBACxEC,cAAezxV,KAAKjT,IAAIwkW,EAA8BX,EAAWY,uBAErE,CACF,CACF,CACA,MAAME,EAA2Bd,EAAWK,YAAcL,EAAWI,cAAgB,CAAC,EAChFW,EAAe,CACnBf,aACA/jU,QAAS+jU,EAAWa,cACpBG,SAAUF,EAAyBG,aAAe,EAClDvkM,WAAYokM,EAAyBI,cAAgB,EACrDC,cAAeL,EAAyBM,iBAAmB,GAEvDC,EAAkB,CACtBC,UAAW,CAACrjV,EAAUosR,EAAO9rS,EAASgjW,KACpC,MAAM/iH,EAAS/+O,KAAKmgW,kBAAkBrhW,GACtCkB,KAAKogW,oBAAoBthW,EAAQ9gB,MACjC,MAAM6nE,EAASrnC,EAAS50B,KAGU,IAA9Bi8D,EAAOzqE,QAAQ,YAInBwvT,EAAM0xC,QAAQphU,MAAQ6vG,YAAY9hI,MAC9ByvW,GAAWG,gBAAgBhzS,GAC7B7lD,KAAK+hW,2BAA2BvjV,EAAUosR,EAAO9rS,EAASgjW,GAAkB,KAAM/iH,GAElF/+O,KAAKgiW,qBAAqBxjV,EAAUosR,EAAO9rS,EAASgjW,IAPpD9hW,KAAKiiW,2BAA2BzjV,EAAU1f,EAAS,IAAI4E,MAAM,uBAAwBo+V,GAAkB,KAAMl3D,EAQ/G,EAEF3sS,QAAS,CAACugB,EAAU1f,EAASgjW,EAAgBl3D,KAC3C5qS,KAAKkiW,mBAAmBpjW,EAASgjW,GAAgB,EAAOtjV,EAAUosR,EAAM,EAE1Eu3D,UAAW,CAACv3D,EAAO9rS,EAASgjW,KAC1B9hW,KAAKkiW,mBAAmBpjW,EAASgjW,GAAgB,OAAMlpW,EAAWgyS,EAAM,GAM5E7rD,EAAOx/O,KAAKT,EAASwiW,EAAcM,EACrC,CACA,oBAAAI,CAAqBxjV,EAAUosR,EAAO9rS,EAASgjW,GAC7C,MAAM/C,EAAM/+V,KAAK++V,IACXl5S,EAASrnC,EAAS50B,KAClBmrB,EAAM8pV,GAAergV,EAAU1f,GAC/BsjW,EAAe1J,GAAWI,oBAAoBjzS,EAAQ9wC,GAC5D,GAAIqtV,EAAangB,qBAEf,YADAjiV,KAAKiiW,2BAA2BzjV,EAAU1f,EAASsjW,EAAangB,qBAAsB6f,EAAgBl3D,GAGxG,MAAM,gBACJmuD,EAAe,OACfC,EAAM,YACNC,EAAW,YACXC,EAAW,gBACXtY,EAAe,aACfsB,GACEkgB,EACJpiW,KAAKkiV,aAAeA,EACpB,MACEkY,MAAO2G,EAAc,GACrBzG,UAAW+H,EACX,kBAAmBC,GACjB5J,GAAWwB,yBAAyBr0S,EAAQ9wC,EAAKqtV,GACrD,GAAIrB,EAAYvnX,OAAQ,CAEKunX,EAAY/nU,MAAKupU,IAAeA,EAAWxtV,QAM3CikV,EAAO,GAAGqB,YAAerB,EAAO,GAAG1yN,MAAM8zN,QAClEn7V,EAAOuB,IAAI,8GACXugW,EAAYzoR,QAAQ,CAClBt6F,KAAM,OACN4G,KAAM,OACNgtF,QAAS,OACTrsC,SAAS,EACTw1T,YAAY,EACZC,QAAQ,EACRnvW,IAAK,EACLy6I,MAAO,IAAIs0M,EAAS,CAAC,GACrBye,QAAS,EACTtkV,IAAK,KAGX,CACAgqV,EAAI/zD,QAAQ51F,EAAOotJ,gBAAiB,CAClCxJ,SACA+H,cACAsB,YACAC,WACAvJ,kBACAhkV,MACA61R,QACAk3D,iBACA7I,cACAC,cACAtY,kBACAsB,gBAEJ,CACA,0BAAA6f,CAA2BvjV,EAAUosR,EAAO9rS,EAASgjW,EAAgB/iH,GACnE,MAAMggH,EAAM/+V,KAAK++V,KACX,GACJlzW,EAAE,MACFq3O,EAAK,KACLllP,GACE8gB,EACEiW,EAAM8pV,GAAergV,EAAU1f,GAE/B2jW,EAAUvoB,EAAeh3G,GAASA,EAAQg3G,EAAeruV,GAAMA,EAAK,EACpE62W,EAAY9D,GAAsB9/V,GAClC+hW,EAAenI,GAAW0C,mBAAmB58U,EAAS50B,KAAMmrB,EAAK0tV,EAASC,EAH7D,EAGoF1iW,KAAKkiV,cAM5G,GAAIlkW,IAAS0gX,GAA8B,CACzC,MAAMiE,EAAc,CAClBr8N,MAAO,IAAIs0M,EAAS,CAAC,GACrBye,QAAS,EACTyH,QAASD,EACTj8W,KAAM,GACNmwB,OAEFgqV,EAAI/zD,QAAQ51F,EAAOotJ,gBAAiB,CAClCxJ,OAAQ,CAAC2J,GACT5B,YAAa,GACbhsV,MACA61R,QACAk3D,iBACA7I,YAAa,KACbC,YAAa,KACbH,gBAAiB,KACjBnY,gBAAiB,KACjBsB,aAAc,MAElB,CAGAt3C,EAAM0xC,QAAQnhU,IAAM4vG,YAAY9hI,MAGhC6V,EAAQ+hW,aAAeA,EACvB7gW,KAAK4iW,qBAAqB/B,EAAcriV,EAAUosR,EAAO9rS,EAASgjW,EAAgB/iH,EACpF,CACA,0BAAAkjH,CAA2BzjV,EAAU1f,EAASpb,EAAOo+W,EAAgBl3D,GACnE5qS,KAAK++V,IAAI/zD,QAAQ51F,EAAO5yI,MAAO,CAC7BxkF,KAAMm8V,EAAW0oB,cACjB/B,QAAS1mB,EAAa0oB,uBACtBvoE,MAAOz7R,EAAQ9gB,OAAS0gX,GACxB3pV,IAAKyJ,EAASzJ,IACd9O,IAAKviB,EACLA,QACA8pB,OAAQ9pB,EAAMmF,QACd21B,WACA1f,UACAgjW,iBACAl3D,SAEJ,CACA,kBAAAs3D,CAAmBpjW,EAASgjW,EAAgBtlU,GAAU,EAAOhe,EAAUosR,GACrE,IAAI/hT,EAAU,aAAa2zC,EAAU,UAAY,SAAWhe,EAAW,YAAcA,EAASpS,KAAO,IAAM,8BAA8BtN,EAAQ9gB,OAC7I8gB,EAAQ9gB,OAAS0gX,GACnB71W,GAAW,KAAKiW,EAAQokO,aAAapkO,EAAQjT,KACpCiT,EAAQ9gB,OAAS0gX,IAAmC5/V,EAAQ9gB,OAAS0gX,KAC9E71W,GAAW,QAAQiW,EAAQjT,iBAAiBiT,EAAQ8yE,YAEtD,MAAMluF,EAAQ,IAAIggB,MAAM7a,GACxBoW,EAAOyO,KAAK,sBAAsB7kB,KAClC,IAAIi4W,EAAU1mB,EAAa2oB,QACvBxoE,GAAQ,EACZ,MAAMx7C,EAAS/+O,KAAKmgW,kBAAkBrhW,GACtC,OAAQA,EAAQ9gB,MACd,KAAK0gX,GACHoC,EAAUtkU,EAAU49S,EAAa4oB,sBAAwB5oB,EAAa6oB,oBACtE1oE,GAAQ,EACR,MACF,KAAKmkE,GACHoC,EAAUtkU,EAAU49S,EAAa8oB,mBAAqB9oB,EAAa+oB,iBACnE5oE,GAAQ,EACR,MACF,KAAKmkE,GACHoC,EAAUtkU,EAAU49S,EAAagpB,yBAA2BhpB,EAAaipB,uBACzE9oE,GAAQ,EACR,MACF,KAAKmkE,GACHoC,EAAUtkU,EAAU49S,EAAakpB,4BAA8BlpB,EAAampB,oBAC5EhpE,GAAQ,EAGRx7C,GACF/+O,KAAKogW,oBAAoBthW,EAAQ9gB,MAEnC,MAAMkpK,EAAY,CAChBlpK,KAAMm8V,EAAW0oB,cACjB/B,UACAvmE,QACAxlR,IAAKjW,EAAQiW,IACbgqO,SACAjgP,UACApb,QACAo+W,iBACAl3D,SAEF,GAAIpsR,EAAU,CACZ,MAAMzJ,GAAyB,MAAlB+sV,OAAyB,EAASA,EAAe/sV,MAAQjW,EAAQiW,IAC9EmyI,EAAU1oI,SAAWqxJ,EAAe,CAClC96J,MACAnrB,UAAMgP,GACL4lB,EACL,CACAxe,KAAK++V,IAAI/zD,QAAQ51F,EAAO5yI,MAAO0kF,EACjC,CACA,oBAAA07M,CAAqB/B,EAAcriV,EAAUosR,EAAO9rS,EAASgjW,EAAgB/iH,GAC3E,MAAMggH,EAAM/+V,KAAK++V,KACX,KACJ/gX,EAAI,MACJklP,EAAK,GACLr3O,EAAE,QACF+lF,EAAO,mBACPyuR,GACEvhW,EACEiW,EAAM8pV,GAAergV,EAAU1f,GAC/B0/D,EAASogS,GAAsB9/V,GAC/B0kW,EAAsC,kBAAlB1kW,EAAQokO,OAAsB1kK,IAAWmgS,GAAyBz7H,OAAQtqO,EACpG,IAAKioW,EAAa7gB,UAAUxmW,OAAQ,CAClC,MAAMiqX,EAAS,IAAI//V,MAAM,iCAezB,YAdAq7V,EAAI/zD,QAAQ51F,EAAO5yI,MAAO,CACxBxkF,KAAMm8V,EAAW0oB,cACjB/B,QAAS1mB,EAAaspB,kBACtBnpE,OAAO,EACPxlR,MACArxB,MAAO+/W,EACPj2V,OAAQi2V,EAAO56W,QACf21B,WACA1f,UACAokO,MAAOsgI,EACPhlS,SACAsjS,iBACAl3D,SAGJ,CACKi2D,EAAahgB,iBAChBggB,EAAa5e,qBAAuB,IAAIv+U,MAAM,4BAEhD,MAAMhgB,EAAQm9W,EAAa5e,qBAC3B,GAAIv+V,EACFq7W,EAAI/zD,QAAQ51F,EAAO5yI,MAAO,CACxBxkF,KAAMm8V,EAAW0oB,cACjB/B,QAAS1mB,EAAaupB,oBACtBppE,OAAO,EACPxlR,MACArxB,QACA8pB,OAAQ9pB,EAAMmF,QACd21B,WACA1f,UACAokO,MAAOsgI,EACPhlS,SACAsjS,iBACAl3D,eAYJ,OARIi2D,EAAazgB,MAAQrhG,IACnBA,EAAO6kH,cACT/C,EAAaxgB,UAAYthG,EAAO6kH,eAAiB,GAE9C7kH,EAAO6kH,cAAetiW,MAAMu/V,EAAaxgB,aAC5CwgB,EAAaxgB,UAAY,IAGrBriW,GACN,KAAK0gX,GACL,KAAKA,GACHK,EAAI/zD,QAAQ51F,EAAOyuJ,aAAc,CAC/B/C,QAASD,EACT39H,MAAOsgI,GAAc,EACrB33W,GAAIA,GAAM,EACV++S,QACAk3D,iBACAzB,uBAEF,MACF,KAAK3B,GACHK,EAAI/zD,QAAQ51F,EAAO0uJ,mBAAoB,CACrChD,QAASD,EACTh1W,GAAIA,GAAM,EACV+lF,QAASA,GAAW,GACpBg5N,QACAk3D,iBACAzB,uBAEF,MACF,KAAK3B,GACHK,EAAI/zD,QAAQ51F,EAAO2uJ,sBAAuB,CACxCjD,QAASD,EACTh1W,GAAIA,GAAM,EACV+lF,QAASA,GAAW,GACpBg5N,QACAk3D,iBACAzB,uBAIR,EAGF,SAAS2D,GAAkB3yO,EAAO4yO,GAChC,IAAIz/W,EACJ,IACEA,EAAQ,IAAIglB,MAAM,WACpB,CAAE,MAAOvD,GAEPzhB,EAAQ9J,SAASqqF,YAAY,SAC7BvgF,EAAM0/W,UAAU,YAAY,GAAO,EACrC,CACA1/W,EAAM6sI,MAAQA,EACd4yO,EAAQppU,cAAcr2C,EACxB,CACA,SAAS2/W,GAAc9yO,EAAO+yO,GAI5B,MAAMj3W,EAAOkkI,EAAMlkI,KAInB,GAHa,aAATA,IACFkkI,EAAMlkI,KAAO,UAEXkkI,EAAMgzO,OAAShzO,EAAMgzO,KAAKC,WAAWF,EAAIv4W,IAC3C,IAEE,GADAwlI,EAAMkzO,OAAOH,IACR/yO,EAAMgzO,KAAKC,WAAWF,EAAIv4W,IAC7B,MAAM,IAAI6X,MAAM,yBAAyB0gW,IAE7C,CAAE,MAAOn+V,GACPhH,EAAOoB,MAAM,sBAAsB4F,KACnC,IACE,MAAMu+V,EAAe,IAAIx1V,KAAKy1V,aAAaL,EAAInwT,UAAWmwT,EAAIvwT,QAASuwT,EAAIngX,MAC3EugX,EAAa34W,GAAKu4W,EAAIv4W,GACtBwlI,EAAMkzO,OAAOC,EACf,CAAE,MAAOE,GACPzlW,EAAOoB,MAAM,2DAA2DqkW,IAC1E,CACF,CAEW,aAATv3W,IACFkkI,EAAMlkI,KAAOA,EAEjB,CACA,SAASw3W,GAAiBtzO,GAIxB,MAAMlkI,EAAOkkI,EAAMlkI,KAInB,GAHa,aAATA,IACFkkI,EAAMlkI,KAAO,UAEXkkI,EAAMgzO,KACR,IAAK,IAAI9qX,EAAI83I,EAAMgzO,KAAK7qX,OAAQD,KAC9B83I,EAAMuzO,UAAUvzO,EAAMgzO,KAAK9qX,IAGlB,aAAT4T,IACFkkI,EAAMlkI,KAAOA,EAEjB,CACA,SAAS03W,GAAkBxzO,EAAOn2G,EAAOC,EAAKirC,GAC5C,MAAMj5D,EAAOkkI,EAAMlkI,KAInB,GAHa,aAATA,IACFkkI,EAAMlkI,KAAO,UAEXkkI,EAAMgzO,MAAQhzO,EAAMgzO,KAAK7qX,OAAS,EAAG,CACvC,MAAM6qX,EAyCV,SAAwBA,EAAMnpV,EAAOC,GACnC,MAAM2pV,EAAY,GACZC,EA7BR,SAAmCV,EAAMt7W,GAEvC,GAAIA,EAAOs7W,EAAK,GAAGpwT,UACjB,OAAO,EAGT,MAAMp4C,EAAMwoW,EAAK7qX,OAAS,EAC1B,GAAIuP,EAAOs7W,EAAKxoW,GAAKg4C,QACnB,OAAQ,EAEV,IAAIp/C,EAAO,EACP4D,EAAQwD,EACZ,KAAOpH,GAAQ4D,GAAO,CACpB,MAAM2sW,EAAMr1V,KAAKq2B,OAAO3tC,EAAQ5D,GAAQ,GACxC,GAAI1L,EAAOs7W,EAAKW,GAAK/wT,UACnB57C,EAAQ2sW,EAAM,MACT,MAAIj8W,EAAOs7W,EAAKW,GAAK/wT,WAAax/C,EAAOoH,GAI9C,OAAOmpW,EAHPvwW,EAAOuwW,EAAM,CAIf,CACF,CAGA,OAAOX,EAAK5vW,GAAMw/C,UAAYlrD,EAAOA,EAAOs7W,EAAKhsW,GAAO47C,UAAYx/C,EAAO4D,CAC7E,CAG0B4sW,CAA0BZ,EAAMnpV,GACxD,GAAI6pV,GAAmB,EACrB,IAAK,IAAIxrX,EAAIwrX,EAAiBlpW,EAAMwoW,EAAK7qX,OAAQD,EAAIsiB,EAAKtiB,IAAK,CAC7D,MAAM6qX,EAAMC,EAAK9qX,GACjB,GAAI6qX,EAAInwT,WAAa/4B,GAASkpV,EAAIvwT,SAAW14B,EAC3C2pV,EAAUzpX,KAAK+oX,QACV,GAAIA,EAAInwT,UAAY94B,EACzB,OAAO2pV,CAEX,CAEF,OAAOA,CACT,CAvDiBI,CAAe7zO,EAAMgzO,KAAMnpV,EAAOC,GAC/C,IAAK,IAAI5hC,EAAI,EAAGA,EAAI8qX,EAAK7qX,OAAQD,IAC1B6sE,IAAaA,EAAUi+S,EAAK9qX,KAC/B83I,EAAMuzO,UAAUP,EAAK9qX,GAG3B,CACa,aAAT4T,IACFkkI,EAAMlkI,KAAOA,EAEjB,CA8CA,SAASg4W,GAAqBC,GAC5B,MAAMpvL,EAAS,GACf,IAAK,IAAIz8L,EAAI,EAAGA,EAAI6rX,EAAc5rX,OAAQD,IAAK,CAC7C,MAAM83I,EAAQ+zO,EAAc7rX,GAER,cAAf83I,EAAMlhI,MAAuC,aAAfkhI,EAAMlhI,OAAwBkhI,EAAMtvI,OACrEi0L,EAAO36L,KAAK+pX,EAAc7rX,GAE9B,CACA,OAAOy8L,CACT,CAEA,IAAIqvL,GACQ,UADRA,GAES,0BAFTA,GAGI,+BAIR,SAASC,KACP,GAAoB,qBAATt2V,KACX,OAAOA,KAAKu2V,QAAUv2V,KAAKy1V,YAC7B,CACA,SAASe,GAAwBC,EAAKxxT,EAAWJ,EAASjqD,EAAM5L,GAC9D,IAAIomX,EAAM,IAAIqB,EAAIxxT,EAAWJ,EAAS,IACtC,IACEuwT,EAAIhqX,MAAQwP,EACR5L,IACFomX,EAAIpmX,KAAOA,EAEf,CAAE,MAAO1D,GACP8pX,EAAM,IAAIqB,EAAIxxT,EAAWJ,EAASruC,KAAKC,UAAUznB,EAAO6xL,EAAe,CACrE7xL,QACC4L,GAAQA,GACb,CACA,OAAOw6W,CACT,CAIA,MAAMsB,GAAkB,MACtB,MAAMD,EAAMH,KACZ,IACEG,GAAO,IAAIA,EAAI,EAAG7iW,OAAO63R,kBAAmB,GAC9C,CAAE,MAAOngT,GACP,OAAOsoB,OAAO+iW,SAChB,CACA,OAAO/iW,OAAO63R,iBACf,EARuB,GASxB,SAASmrE,GAA+B57W,EAAM8jC,GAC5C,OAAO9jC,EAAKimB,UAAY,IAAO6d,CACjC,CAIA,MAAM+3U,GACJ,WAAAhkV,CAAYk9U,GACV/+V,KAAK++V,SAAM,EACX/+V,KAAK8lW,SAAW,KAChB9lW,KAAK+0N,MAAQ,KACb/0N,KAAK+lW,sBAAwB,CAAC,EAC9B/lW,KAAK++V,IAAMA,EACX/+V,KAAKgmW,oBACP,CACA,OAAAh7N,GACEhrI,KAAKimW,uBACLjmW,KAAK8lW,SAAW,KAChB9lW,KAAK+0N,MAAQ,KACb/0N,KAAK+lW,sBAAwB,CAAC,EAE9B/lW,KAAK++V,IAAM,IACb,CACA,kBAAAiH,GACE,MAAM,IACJjH,GACE/+V,KACJ++V,EAAItsU,GAAG2iL,EAAO8wJ,eAAgBlmW,KAAKmmW,gBAAiBnmW,MACpD++V,EAAItsU,GAAG2iL,EAAOgxJ,gBAAiBpmW,KAAKqmW,iBAAkBrmW,MACtD++V,EAAItsU,GAAG2iL,EAAOkqJ,iBAAkBt/V,KAAKu/V,kBAAmBv/V,MACxD++V,EAAItsU,GAAG2iL,EAAOkxJ,sBAAuBtmW,KAAKumW,sBAAuBvmW,MACjE++V,EAAItsU,GAAG2iL,EAAOoxJ,gBAAiBxmW,KAAKymW,iBAAkBzmW,MACtD++V,EAAItsU,GAAG2iL,EAAOsxJ,cAAe1mW,KAAK2mW,eAAgB3mW,KACpD,CACA,oBAAAimW,GACE,MAAM,IACJlH,GACE/+V,KACJ++V,EAAIzqN,IAAI8gE,EAAO8wJ,eAAgBlmW,KAAKmmW,gBAAiBnmW,MACrD++V,EAAIzqN,IAAI8gE,EAAOgxJ,gBAAiBpmW,KAAKqmW,iBAAkBrmW,MACvD++V,EAAIzqN,IAAI8gE,EAAOkqJ,iBAAkBt/V,KAAKu/V,kBAAmBv/V,MACzD++V,EAAIzqN,IAAI8gE,EAAOkxJ,sBAAuBtmW,KAAKumW,sBAAuBvmW,MAClE++V,EAAIzqN,IAAI8gE,EAAOoxJ,gBAAiBxmW,KAAKymW,iBAAkBzmW,MACvD++V,EAAIzqN,IAAI8gE,EAAOsxJ,cAAe1mW,KAAK2mW,eAAgB3mW,KACrD,CAGA,eAAAmmW,CAAgB3hX,EAAOoF,GACrBoW,KAAK+0N,MAAQnrO,EAAKmrO,KACpB,CACA,gBAAAsxI,GACOrmW,KAAK8lW,WAGVnB,GAAiB3kW,KAAK8lW,UACtB9lW,KAAK8lW,SAAW,KAChB9lW,KAAK+0N,MAAQ,KACb/0N,KAAK+lW,sBAAwB,CAAC,EAChC,CACA,iBAAAxG,GACEv/V,KAAK+lW,sBAAwB,CAAC,CAChC,CACA,WAAAa,CAAY7xI,GACV,MAAM1jG,EAAQrxH,KAAK6mW,YAAY9xI,EAAM+xI,YAErC,OADAz1O,EAAMlkI,KAAO,SACNkkI,CACT,CACA,WAAAw1O,CAAYC,GACV,GAAK9mW,KAAK+0N,MAAV,CAGA,IAAK,IAAIx7O,EAAI,EAAGA,EAAIutX,EAAWttX,OAAQD,IAAK,CAC1C,MAAMwtX,EAAYD,EAAWvtX,GAC7B,GAAuB,aAAnBwtX,EAAU52W,MAA2C,QAApB42W,EAAUhlX,MAI7C,OADAiiX,GAAkB+C,EAAW/mW,KAAK+0N,OAC3BgyI,CAEX,CACA,OAAO/mW,KAAK+0N,MAAMiyI,aAAa,WAAY,MAV3C,CAWF,CACA,qBAAAT,CAAsB/hX,EAAOoF,GAC3B,IAAKoW,KAAK+0N,MACR,OAEF,MACEgqI,KACEnsV,QAAQ,uBACNq0V,EAAsB,sBACtBC,KAGFlnW,KACJ,IAAKinW,IAA2BC,EAC9B,OAEF,MAAM,QACJva,GACE/iW,EAGCoW,KAAK8lW,WACR9lW,KAAK8lW,SAAW9lW,KAAK4mW,YAAY5mW,KAAK+0N,QAExC,MAAM0wI,EAAMH,KACZ,GAAKG,EAGL,IAAK,IAAIlsX,EAAI,EAAGA,EAAIozW,EAAQnzW,OAAQD,IAAK,CACvC,MAAMyE,EAAO2uW,EAAQpzW,GAAGyE,KACxB,GAAIA,IAASqnX,KAAwB4B,IAA2BC,EAC9D,SAEF,MAAMviE,EAASihD,GAAa+G,EAAQpzW,GAAGqQ,MACvC,GAAI+6S,EAAQ,CACV,MAAM1wP,EAAY04S,EAAQpzW,GAAGy1W,IAC7B,IAAIn7S,EAAUI,EAAY04S,EAAQpzW,GAAGmR,SACjCmpD,EAAU6xT,KACZ7xT,EAAU6xT,IAEK7xT,EAAUI,GACX,IACdJ,EAAUI,EA1JK,KA4JjB,IAAK,IAAItxC,EAAI,EAAGA,EAAIgiS,EAAOnrT,OAAQmpB,IAAK,CACtC,MAAMsJ,EAAQ04R,EAAOhiS,GAErB,IAAKkjV,GAAiB55U,GAAQ,CAE5BjM,KAAKmnW,iBAAiBlzT,EAAWj2D,GACjC,MAAMomX,EAAMoB,GAAwBC,EAAKxxT,EAAWJ,EAAS5nC,EAAOjuB,GAChEomX,GACFpkW,KAAK8lW,SAASvB,OAAOH,EAEzB,CACF,CACF,CACF,CACF,CACA,gBAAA+C,CAAiBlzT,EAAWj2D,GAC1B,IAAIopX,EACJ,MAAM/C,EAA2C,OAAnC+C,EAAiBpnW,KAAK8lW,eAAoB,EAASsB,EAAe/C,KAChF,GAAIA,EACF,IAAK,IAAI9qX,EAAI8qX,EAAK7qX,OAAQD,KAAM,CAC9B,MAAM6qX,EAAMC,EAAK9qX,GACb6qX,EAAIpmX,OAASA,GAAQomX,EAAInwT,UAAYA,GAAamwT,EAAIvwT,UAAY6xT,KACpEtB,EAAIvwT,QAAUI,EAElB,CAEJ,CACA,gBAAAwyT,CAAiBjiX,GAAO,YACtBw6O,EAAW,UACXqoI,EAAS,KACTrpX,IAEA,MAAM,SACJ8nX,EAAQ,IACR/G,GACE/+V,KACJ,IAAK++V,EACH,OAEF,MACEnsV,QAAQ,uBACNq0V,EAAsB,sBACtBC,IAEAnI,EACJ,GAAI+G,IAAamB,GAA0BC,GAAwB,CACjE,IAAI9gT,EAEFA,EADW,UAATpoE,EACUomX,GAAOA,EAAIpmX,OAASqnX,IAA2B6B,EACzC,UAATlpX,EACGomX,GAAOA,EAAIpmX,OAASqnX,IAAuB4B,EAE3C7C,GAAOA,EAAIpmX,OAASqnX,IAA2B6B,GAAyB9C,EAAIpmX,OAASqnX,IAAuB4B,EAE1HpC,GAAkBiB,EAAU9mI,EAAaqoI,EAAWjhT,EACtD,CACF,CACA,cAAAugT,CAAeniX,GAAO,QACpBs8W,IAEA,IAAK9gW,KAAK+0N,QAAU+rI,EAAQre,qBAAuBziV,KAAK++V,IAAInsV,OAAO00V,4BACjE,OAEF,MAAM,sBACJvB,EAAqB,SACrBD,GACE9lW,MACE,WACJmgV,GACE2gB,EACElsO,EAAM76I,OAAOiC,KAAKmkW,GAExB,GAAI2lB,EAAU,CACZ,MAAMyB,EAAcxtX,OAAOiC,KAAK+pX,GAAuB/hW,QAAOnY,IAAO+oI,EAAI36I,SAAS4R,KAClF,IAAK,IAAItS,EAAIguX,EAAY/tX,OAAQD,KAAM,CACrC,MAAMsS,EAAK07W,EAAYhuX,GACvBQ,OAAOiC,KAAK+pX,EAAsBl6W,GAAIw4W,MAAMzhX,SAAQ1I,IAClD4rX,EAASlB,UAAUmB,EAAsBl6W,GAAIw4W,KAAKnqX,GAAK,WAElD6rX,EAAsBl6W,EAC/B,CACF,CAEA,MAAMmxW,EAAe8D,EAAQ9gB,UAAU8gB,EAAQ9gB,UAAUxmW,OAAS,GAClE,GAAmB,IAAfo7I,EAAIp7I,SAAiB0gW,EAA+B,MAAhB8iB,OAAuB,EAASA,EAAa3f,iBACnF,OAEGr9U,KAAK8lW,WACR9lW,KAAK8lW,SAAW9lW,KAAK4mW,YAAY5mW,KAAK+0N,QAExC,MAAMyyI,EAAiBxK,EAAa3f,gBAAkB,IAAO2f,EAAa9hV,MACpEuqV,EAAMH,KACZ,IAAK,IAAI/rX,EAAI,EAAGA,EAAIq7I,EAAIp7I,OAAQD,IAAK,CACnC,MAAMsS,EAAK+oI,EAAIr7I,GACT6iX,EAAYjc,EAAWt0V,GACvBooD,EAAY2xT,GAA+BxJ,EAAUxoT,UAAW4zT,GAGhEC,EAAwB1B,EAAsBl6W,GAC9Cw4W,GAAiC,MAAzBoD,OAAgC,EAASA,EAAsBpD,OAAS,CAAC,EACvF,IAAIqD,GAA0C,MAAzBD,OAAgC,EAASA,EAAsBC,iBAAkB,EAClG7zT,EAAU6xT,GACd,MAAM1xT,EAAUooT,EAAUpoT,QAC1B,GAAIA,EACFH,EAAU+xT,GAA+B5xT,EAASwzT,GAClDE,GAAgB,OACX,GAAItL,EAAUlgB,YAAcwrB,EAAe,CAChD,MAAMC,EAA6B/yO,EAAIhzF,QAAO,CAACgmU,EAAoB/7W,KACjE,GAAIA,IAAOuwW,EAAUvwW,GAAI,CACvB,MAAMg8W,EAAiB1nB,EAAWt0V,GAClC,GAAIg8W,EAAe1gJ,QAAUi1I,EAAUj1I,OAAS0gJ,EAAej0T,UAAYwoT,EAAUxoT,aAAeg0T,GAAsBxL,EAAUxoT,UAAYg0T,EAAmBh0T,WACjK,OAAOi0T,CAEX,CACA,OAAOD,CAAkB,GACxB,MACCD,IACF9zT,EAAU+xT,GAA+B+B,EAA2B/zT,UAAW4zT,GAC/EE,GAAgB,EAEpB,CAIA,MAAM3rX,EAAahC,OAAOiC,KAAKogX,EAAUpwI,MACzC,IAAK,IAAIrpN,EAAI,EAAGA,EAAI5mB,EAAWvC,OAAQmpB,IAAK,CAC1C,MAAMzoB,EAAM6B,EAAW4mB,GACvB,GAzmIc,QADWmsH,EA0mII50I,IAzmIM,UAAb40I,GAAqC,eAAbA,GAA0C,aAAbA,GAAwC,aAAbA,GAAwC,gBAAbA,EA0mI/H,SAEF,MAAMs1O,EAAMC,EAAKnqX,GACjB,GAAIkqX,EACEsD,IAAkBD,EAAsBC,gBAC1CtD,EAAIvwT,QAAUA,QAEX,GAAI4xT,EAAK,CACd,IAAI77W,EAAOwyW,EAAUpwI,KAAK9xO,GACtBqhW,EAAkBrhW,KAnQNunB,EAoQU7X,EAAxBA,EAnQHojG,WAAW15F,KAAKmO,EAAIvb,QAAQ,MAAO,IAAIA,QAAQ,qBAAsB,SAASA,QAAQ,MAAO,IAAI6d,MAAM,MAAMguF,QAqQ5G,MAAM+1Q,EAAOtC,GAAwBC,EAAKxxT,EAAWJ,EAAS,CAC5D35D,MACA0P,QACCy7W,IACCyC,IACFA,EAAKj8W,GAAKA,EACVmU,KAAK8lW,SAASvB,OAAOuD,GACrBzD,EAAKnqX,GAAO4tX,EAEhB,CACF,CAGA/B,EAAsBl6W,GAAM,CAC1Bw4W,OACAjI,YACAsL,gBAEJ,CAxRJ,IAA0BjmW,EAj3HOqtH,CA0oI/B,EAGF,MAAMi5O,GACJ,WAAAlmV,CAAYk9U,GACV/+V,KAAK++V,SAAM,EACX/+V,KAAK4S,YAAS,EACd5S,KAAK+0N,MAAQ,KACb/0N,KAAK6gW,aAAe,KACpB7gW,KAAK8wE,YAAc,EACnB9wE,KAAKgoW,WAAa,EAClBhoW,KAAKioW,SAAW,KAChBjoW,KAAKkoW,kBAAoB,IAAMloW,KAAKmoW,aACpCnoW,KAAK++V,IAAMA,EACX/+V,KAAK4S,OAASmsV,EAAInsV,OAClB5S,KAAKi/V,mBACP,CACA,WAAImJ,GACF,OAAOpoW,KAAKioW,UAAY,CAC1B,CACA,cAAII,GACF,MAAM,OACJz1V,EAAM,aACNiuV,GACE7gW,KACJ,YAAsCpH,IAAlCga,EAAO01V,uBACF11V,EAAO01V,uBAETzH,EAAejuV,EAAO21V,4BAA8B1H,EAAahgB,eAAiB,CAC3F,CACA,iBAAI2nB,GACF,MAAM,aACJ3H,GACE7gW,KACJ,GAAqB,OAAjB6gW,EACF,OAAO,KAET,MAAM,SACJvf,EAAQ,aACRD,EAAY,eACZR,GACEggB,GACE,iBACJ4H,EAAgB,sBAChBC,EAAqB,eACrBC,GACE3oW,KAAK4S,OACHg2V,EAAa5oW,KAAK++V,IAAI6J,WAC5B,IAAIJ,EAAgBG,GAAiBtnB,GAA2BC,GAC5DsnB,EAAWH,kBAAoBG,EAAWF,uBAA2C,IAAlBF,KACrEA,OAAqC5vW,IAArB6vW,EAAiCA,EAAmBC,EAAwB7nB,GAE9F,MAAMgoB,EAA6BhoB,EAEnC,OAAO2nB,EAAgB74V,KAAKjT,IADI,EACAsD,KAAKgoW,WAAsCa,EAC7E,CACA,oBAAIC,GACF,MAAMC,EAAW/oW,KAAKgpW,mBAChBR,EAAgBxoW,KAAKwoW,cACrB3H,EAAe7gW,KAAK6gW,aAC1B,GAAiB,OAAbkI,GAAuC,OAAlBP,GAA2C,OAAjB3H,EACjD,OAAO,KAET,MAAMhe,EAAOge,EAAahe,KACpBomB,EAAeF,EAAWP,EAAgBxoW,KAAKkpW,YAC/CxsW,EAAMmmV,EAAOge,EAAa/f,cAC1BnkV,EAAMkmV,GAAQ7iV,KAAK4S,OAAO+1V,gBAAkB9H,EAAatf,YAAcsf,EAAahgB,gBAC1F,OAAOlxU,KAAKjT,IAAIiT,KAAKhT,IAAID,EAAKusW,GAAetsW,EAC/C,CACA,SAAIgmV,GACF,MAAM,aACJke,GACE7gW,KACJ,OAAqB,OAAjB6gW,EACK,EAEFA,EAAale,KACtB,CACA,eAAIumB,GACF,MAAM,aACJrI,GACE7gW,KACJ,GAAqB,OAAjB6gW,EACF,OAAO,EAET,MAAMsI,EAA6G,GAAxFnpW,KAAK4S,OAAO+1V,gBAAkB9H,EAAatf,YAAcsf,EAAahgB,gBACjG,OAAOlxU,KAAKhT,IAAIkkW,EAAa3d,IAAMimB,EAAmB,EACxD,CACA,uBAAIC,GACF,MAAM,MACJr0I,EAAK,aACL8rI,GACE7gW,KACJ,IAAK+0N,IAAU8rI,EACb,OAAO,EAET,MAAMwI,EAAiBt0I,EAAMu0I,SAAS9vX,OACtC,OAAQ6vX,EAAiBt0I,EAAMu0I,SAASnuV,IAAIkuV,EAAiB,GAAKxI,EAAahe,MAAQ7iV,KAAK8wE,WAC9F,CACA,OAAAk6D,GACEhrI,KAAK8/V,sBACL9/V,KAAKqmW,mBACLrmW,KAAK6gW,aAAe,KAEpB7gW,KAAK++V,IAAM/+V,KAAKkoW,kBAAoB,IACtC,CACA,iBAAAjJ,GACEj/V,KAAK++V,IAAItsU,GAAG2iL,EAAO8wJ,eAAgBlmW,KAAKmmW,gBAAiBnmW,MACzDA,KAAK++V,IAAItsU,GAAG2iL,EAAOgxJ,gBAAiBpmW,KAAKqmW,iBAAkBrmW,MAC3DA,KAAK++V,IAAItsU,GAAG2iL,EAAOkqJ,iBAAkBt/V,KAAKu/V,kBAAmBv/V,MAC7DA,KAAK++V,IAAItsU,GAAG2iL,EAAOsxJ,cAAe1mW,KAAK2mW,eAAgB3mW,MACvDA,KAAK++V,IAAItsU,GAAG2iL,EAAO5yI,MAAOxiE,KAAK/B,QAAS+B,KAC1C,CACA,mBAAA8/V,GACE9/V,KAAK++V,IAAIzqN,IAAI8gE,EAAO8wJ,eAAgBlmW,KAAKmmW,gBAAiBnmW,MAC1DA,KAAK++V,IAAIzqN,IAAI8gE,EAAOgxJ,gBAAiBpmW,KAAKqmW,iBAAkBrmW,MAC5DA,KAAK++V,IAAIzqN,IAAI8gE,EAAOkqJ,iBAAkBt/V,KAAKu/V,kBAAmBv/V,MAC9DA,KAAK++V,IAAIzqN,IAAI8gE,EAAOsxJ,cAAe1mW,KAAK2mW,eAAgB3mW,MACxDA,KAAK++V,IAAIzqN,IAAI8gE,EAAO5yI,MAAOxiE,KAAK/B,QAAS+B,KAC3C,CACA,eAAAmmW,CAAgB3hX,EAAOoF,GACrBoW,KAAK+0N,MAAQnrO,EAAKmrO,MAClB/0N,KAAK+0N,MAAM11O,iBAAiB,aAAc2gB,KAAKkoW,kBACjD,CACA,gBAAA7B,GACMrmW,KAAK+0N,QACP/0N,KAAK+0N,MAAMz1O,oBAAoB,aAAc0gB,KAAKkoW,mBAClDloW,KAAK+0N,MAAQ,KAEjB,CACA,iBAAAwqI,GACEv/V,KAAK6gW,aAAe,KACpB7gW,KAAKioW,SAAW,KAChBjoW,KAAKgoW,WAAa,CACpB,CACA,cAAArB,CAAeniX,GAAO,QACpBs8W,IAEA9gW,KAAK6gW,aAAeC,EAChBA,EAAQvgB,UACVvgV,KAAKmoW,cAEFrH,EAAQ1gB,MAAQpgV,KAAK+0N,OACxB/0N,KAAK+0N,MAAMz1O,oBAAoB,aAAc0gB,KAAKkoW,kBAEtD,CACA,OAAAjqW,CAAQzZ,EAAOoF,GACb,IAAI2/W,EACA3/W,EAAKk3W,UAAY1mB,EAAaovB,uBAGlCxpW,KAAKgoW,aAC2C,OAA3CuB,EAAqBvpW,KAAK6gW,eAAyB0I,EAAmBnpB,MACzEnhV,EAAOyO,KAAK,wEAEhB,CACA,UAAAy6V,GACE,MAAM,MACJpzI,EAAK,aACL8rI,GACE7gW,KACJ,IAAK+0N,IAAU8rI,EACb,OAEF7gW,KAAK8wE,YAAcikJ,EAAMjkJ,YACzB,MAAMs3R,EAAUpoW,KAAKypW,iBACrB,GAAgB,OAAZrB,EACF,OAEFpoW,KAAKioW,SAAWG,EAGhB,MAAM,eACJO,EAAc,wBACde,GACE1pW,KAAK4S,OACT,IAAK+1V,GAA8C,IAA5Be,IAAkC7I,EAAazgB,KACpE,OAEF,MAAMooB,EAAgBxoW,KAAKwoW,cAC3B,GAAsB,OAAlBA,EACF,OAEF,MAAMmB,EAAqBvB,EAAUI,EAMrC,GADoBmB,EADWh6V,KAAKjT,IAAIsD,KAAKqoW,WAAYG,EAAgB3H,EAAahgB,iBAEnE8oB,EAAqB,KAAQ3pW,KAAKopW,oBAAsB,EAAG,CAC5E,MAAMzsW,EAAMgT,KAAKjT,IAAI,EAAGiT,KAAKhT,IAAI,EAAK+sW,IAChCE,EAAOj6V,KAAKy2B,MAAM,GAAK,EAAIz2B,KAAKoZ,KAAK,IAAO4gV,EAAqB3pW,KAAKkpW,cAAgB,IAAM,GAClGn0I,EAAM80I,aAAel6V,KAAKjT,IAAIC,EAAKgT,KAAKhT,IAAI,EAAGitW,GACjD,MAAkC,IAAvB70I,EAAM80I,cAA6C,IAAvB90I,EAAM80I,eAC3C90I,EAAM80I,aAAe,EAEzB,CACA,gBAAAb,GACE,MAAM,aACJnI,GACE7gW,KACJ,OAAqB,OAAjB6gW,EACK,KAEFA,EAAahe,KAAOge,EAAa3d,GAC1C,CACA,cAAAumB,GACE,MAAMV,EAAW/oW,KAAKgpW,mBACtB,OAAiB,OAAbD,EACK,KAEFA,EAAW/oW,KAAK8wE,WACzB,EAGF,MAAMg5R,GAAa,CAAC,OAAQ,SAAU,SAAU,MAIhD,MAAMC,GAAmB,CAAC,MAAO,KAAM,OAIvC,IAAIC,GACE,GADFA,GAEG,MAFHA,GAGE,KAEN,SAASC,GAAanJ,GACpB,MAAM,aACJ7f,EAAY,kBACZC,EAAiB,IACjBgC,GACE4d,EAKJ,OAAI7f,GADyBiC,EAAMjC,EAAe,EAE5CC,EACK8oB,GAEFA,GAEFA,EACT,CACA,MAAME,GACJ,WAAAroV,CAAYsoV,EAAKxN,EAAMyN,GACrBpqW,KAAKmqW,SAAM,EACXnqW,KAAK28V,UAAO,EACZ38V,KAAKoqW,UAAO,EACZpqW,KAAKmqW,IAAMA,EACXnqW,KAAK28V,KAAOA,EACZ38V,KAAKoqW,KAAOA,CACd,CACA,aAAAC,CAAc9mB,GACZ,MAAMxuU,EAAM,IAAI/F,KAAKuvB,IAAIglT,GAUzB,YATiB3qV,IAAboH,KAAKmqW,KACPp1V,EAAI+vQ,aAAar0P,IAAI,WAAYzwB,KAAKmqW,IAAIrwX,iBAE1B8e,IAAdoH,KAAK28V,MACP5nV,EAAI+vQ,aAAar0P,IAAI,YAAazwB,KAAK28V,KAAK7iX,YAE1CkmB,KAAKoqW,MACPr1V,EAAI+vQ,aAAar0P,IAAI,YAAazwB,KAAKoqW,MAElCr1V,EAAIzvB,IACb,EAEF,MAAMglX,GACJ,WAAAzoV,CAAYj4B,GACVoW,KAAKuqW,YAAS,EACdvqW,KAAKq6V,gBAAa,EAClBr6V,KAAKq5V,aAAU,EACfr5V,KAAK03V,cAAW,EAChB13V,KAAK+U,SAAM,EACX/U,KAAKwqW,eAAY,EACjBxqW,KAAK5iB,YAAS,EACd4iB,KAAKnU,QAAK,EACVmU,KAAKpb,UAAO,EACZob,KAAKw3V,gBAAa,EAClBx3V,KAAK7iB,WAAQ,EACb6iB,KAAK8gW,aAAU,EACf9gW,KAAKyqW,cAAgB,EACrBzqW,KAAK0qW,UAAY,EACjB1qW,KAAK8jN,YAAS,EACd9jN,KAAK2qW,YAAc,EACnB3qW,KAAK4qW,sBAAmB,EACxB5qW,KAAK6qW,qBAAkB,EACvB7qW,KAAK8qW,YAAc,EACnB9qW,KAAK+qW,kBAAe,EACpB/qW,KAAKgrW,qBAAkB,EAEvBhrW,KAAKirW,OAAS,EACdjrW,KAAK+U,IAAM,CAACnrB,EAAKmrB,KACjB/U,KAAKuqW,OAAS,CAAC3gX,EAAK08I,OACpBtmI,KAAKq5V,QAAUzvW,EAAKyvW,QAChBzvW,EAAKk3W,UACP9gW,KAAK8gW,QAAUl3W,EAAKk3W,SAEtB9gW,KAAKnU,GAAKjC,EAAKiC,IAAM,EACrBmU,KAAKpb,KAAOgF,EAAKhF,KACjBob,KAAK7iB,MAAQyM,EAAKzM,OAAS,EAC3B6iB,KAAK5iB,OAASwM,EAAKxM,QAAU,EAC7B4iB,KAAKwqW,UAAY5gX,EAAK08I,MAAM80M,cAAc,aAAc,GACxDp7U,KAAK8qW,YAAclhX,EAAK08I,MAAMy0M,eAAe,qBAC7C/6U,KAAKq6V,WAAazwW,EAAKywW,WACvBr6V,KAAKw3V,WAAa5tW,EAAK4tW,WACvBx3V,KAAK03V,SAAW,CAAC9tW,EAAK4tW,WAAY5tW,EAAKywW,YAAYr2V,QAAO1oB,KAAOA,IAAGwC,KAAIlD,GAAKA,EAAEY,UAAU,EAAG,KAAIojB,KAAK,KACrGoB,KAAKkrW,WAAW,QAASthX,EAAK08I,MAAM8zN,OACpCp6V,KAAKkrW,WAAW,OAAQthX,EAAK08I,MAAMg0N,UACrC,CACA,cAAI6Q,GACF,OAAOx7V,KAAKhT,IAAIqD,KAAK2qW,YAAa3qW,KAAKq5V,QACzC,CACA,kBAAI+R,GACF,OAAOprW,KAAK8qW,aAAe9qW,KAAK2qW,aAAe3qW,KAAKq5V,OACtD,CACA,SAAI/yN,GACF,OAAOtmI,KAAKuqW,OAAO,EACrB,CACA,UAAIrT,GACF,OAAOl3V,KAAKsmI,MAAMizN,QAAU,EAC9B,CACA,aAAIQ,GACF,OAAO/5V,KAAKsmI,MAAM,eAAiB,GACrC,CACA,cAAI+kO,GACF,OAAOrrW,KAAKsmI,MAAM,gBAAkB,KACtC,CACA,SAAI9mG,GACF,OAAOx/B,KAAKsmI,MAAM80M,cAAc,QAAS,EAC3C,CACA,OAAImI,GACF,OAAOvjV,KAAK+U,IAAI,IAAM,EACxB,CACA,aAAAu2V,CAAc15R,GACZ,OAAO25R,GAASvrW,KAAK+qW,aAAcn5R,EACrC,CACA,gBAAA45R,CAAiB55R,GACf,OAAO25R,GAASvrW,KAAKgrW,gBAAiBp5R,EACxC,CACA,eAAI65R,GACF,OAAOzrW,KAAK+qW,YACd,CACA,kBAAIW,GACF,OAAO1rW,KAAKgrW,eACd,CACA,UAAAE,CAAWltX,EAAM4zF,GACf,GAAKA,EAGL,GAAa,UAAT5zF,EAAkB,CACpB,IAAIytX,EAAczrW,KAAK+qW,aAClBU,IACHA,EAAczrW,KAAK+qW,aAAe,KAEE,IAAlCU,EAAYrwX,QAAQw2F,IACtB65R,EAAYpwX,KAAKu2F,EAErB,MAAO,GAAa,SAAT5zF,EAAiB,CAC1B,IAAI0tX,EAAiB1rW,KAAKgrW,gBACrBU,IACHA,EAAiB1rW,KAAKgrW,gBAAkB,KAED,IAArCU,EAAetwX,QAAQw2F,IACzB85R,EAAerwX,KAAKu2F,EAExB,CACF,CAGA,SAAIwsQ,GACF,OAAO,CACT,CACA,SAAIA,CAAMhkW,GAAQ,CAClB,iBAAIuxX,GACF,OAAO3rW,KAAKyrW,YAAc,CAACzrW,KAAK4rW,mBAAgBhzW,CAClD,CACA,gBAAIizW,GACF,OAAO7rW,KAAK0rW,eAAiB,CAAC1rW,KAAK8rW,kBAAelzW,CACpD,CACA,gBAAIgzW,GACF,IAAIG,EACJ,OAAiD,OAAzCA,EAAoB/rW,KAAKyrW,kBAAuB,EAASM,EAAkB,EACrF,CACA,eAAID,GACF,IAAIE,EACJ,OAAuD,OAA/CA,EAAuBhsW,KAAK0rW,qBAA0B,EAASM,EAAqB,EAC9F,CACA,WAAAC,GAAe,EAEjB,SAASV,GAAS5vO,EAAQ/pD,GACxB,SAAKA,IAAY+pD,KAGmB,IAA7BA,EAAOvgJ,QAAQw2F,EACxB,CAEA,SAASs6R,GAAgBC,EAAUC,GACjC,MAAMC,EAAYD,EAAO1uB,SAEzB,GAAIxD,EAAemyB,GAAY,CAG7B,IACIhtB,EADA30V,EAAW,EAEX0hX,EAAO7uB,GAAK4uB,EAAS5uB,IACvB7yV,EAAW2hX,EAAYF,EAASjxV,MAChCmkU,EAAO8sB,IAEPzhX,EAAWyhX,EAASjxV,MAAQmxV,EAC5BhtB,EAAO+sB,GAEL/sB,EAAK30V,WAAaA,IACpB20V,EAAK30V,SAAWA,EAGpB,MAAO,GAAI0hX,EAAO7uB,GAAK4uB,EAAS5uB,GAAI,CACf4uB,EAASvpQ,KAAOwpQ,EAAOxpQ,IAExBupQ,EAASnuB,UACzBouB,EAAOlxV,MAAQixV,EAASjxV,OAASixV,EAASnuB,UAAYmuB,EAASjxV,OAE/DkxV,EAAOlxV,MAAQixV,EAASjxV,MAAQixV,EAASzhX,QAE7C,MACE0hX,EAAOlxV,MAAQvL,KAAKhT,IAAIwvW,EAASjxV,MAAQkxV,EAAO1hX,SAAU,EAE9D,CACA,SAAS4hX,GAAiBxL,EAASzhB,EAAM3B,EAAUC,EAAQC,EAAUC,GACvCF,EAASD,GACV,IACzBz+U,EAAOyO,KAAK,2CAA4C2xU,GACxD1B,EAASD,EAAW2B,EAAK30V,SACzBmzV,EAASD,EAAWyB,EAAK30V,UAE3B,IAAIqzV,EAAcL,EACdM,EAAYL,EAChB,MAAM4uB,EAAeltB,EAAK3B,SACpB8uB,EAAantB,EAAK1B,OACxB,GAAIzD,EAAeqyB,GAAe,CAEhC,MAAMzuB,EAAWnuU,KAAK+2B,IAAI6lU,EAAe7uB,GACpCxD,EAAemF,EAAKvB,UAGvBuB,EAAKvB,SAAWnuU,KAAKhT,IAAImhV,EAAUuB,EAAKvB,UAFxCuB,EAAKvB,SAAWA,EAIlBC,EAAcpuU,KAAKhT,IAAI+gV,EAAU6uB,GACjC7uB,EAAW/tU,KAAKjT,IAAIghV,EAAU6uB,GAC9B3uB,EAAWjuU,KAAKjT,IAAIkhV,EAAUyB,EAAKzB,UACnCI,EAAYruU,KAAKjT,IAAIihV,EAAQ6uB,GAC7B7uB,EAAShuU,KAAKhT,IAAIghV,EAAQ6uB,GAC1B3uB,EAASluU,KAAKhT,IAAIkhV,EAAQwB,EAAKxB,OACjC,CACA,MAAM8E,EAAQjF,EAAW2B,EAAKnkU,MACX,IAAfmkU,EAAKnkU,QACPmkU,EAAKnkU,MAAQwiU,GAEf2B,EAAK30V,SAAWizV,EAAS0B,EAAKnkU,MAC9BmkU,EAAK3B,SAAWA,EAChB2B,EAAKtB,YAAcA,EACnBsB,EAAKzB,SAAWA,EAChByB,EAAK1B,OAASA,EACd0B,EAAKrB,UAAYA,EACjBqB,EAAKxB,OAASA,EACd,MAAMN,EAAK8B,EAAK9B,GAEhB,IAAKujB,GAAWvjB,EAAKujB,EAAQngB,SAAWpD,EAAKujB,EAAQ/gB,MACnD,OAAO,EAET,IAAIxmW,EACJ,MAAMkzX,EAAUlvB,EAAKujB,EAAQngB,QACvBX,EAAY8gB,EAAQ9gB,UAQ1B,IAFAA,EAAUysB,GAAWptB,EAEhB9lW,EAAIkzX,EAASlzX,EAAI,EAAGA,IACvB2yX,GAAgBlsB,EAAUzmW,GAAIymW,EAAUzmW,EAAI,IAI9C,IAAKA,EAAIkzX,EAASlzX,EAAIymW,EAAUxmW,OAAS,EAAGD,IAC1C2yX,GAAgBlsB,EAAUzmW,GAAIymW,EAAUzmW,EAAI,IAM9C,OAJIunX,EAAQ7gB,cACVisB,GAAgBlsB,EAAUA,EAAUxmW,OAAS,GAAIsnX,EAAQ7gB,cAE3D6gB,EAAQnhB,SAAWmhB,EAAQlhB,gBAAiB,EACrC+C,CACT,CACA,SAAS+pB,GAAan9B,EAAYo9B,GAEhC,IAAIpR,EAAqB,KACzB,MAAMqR,EAAer9B,EAAWyQ,UAChC,IAAK,IAAIzmW,EAAIqzX,EAAapzX,OAAS,EAAGD,GAAK,EAAGA,IAAK,CACjD,MAAMszX,EAAUD,EAAarzX,GAAG2kW,YAChC,GAAI2uB,EAAS,CACXtR,EAAqBsR,EACrB,KACF,CACF,CACIt9B,EAAW0Q,qBAEN1Q,EAAW0Q,aAAatC,OAIjC,IACImvB,EADAC,EAAW,EAgCf,GAmGF,SAAiCx9B,EAAYo9B,EAAYK,GACvD,MAAM7rB,EAAkBwrB,EAAWxrB,gBAC7BjmU,EAAQvL,KAAKhT,IAAI4yU,EAAWoR,QAASgsB,EAAWhsB,SAAWgsB,EAAWhsB,QACtExlU,GAAOo0T,EAAW0Q,aAAe,EAAI,IAAMkB,EAAkBwrB,EAAW5sB,MAAQpwU,KAAKjT,IAAI6yU,EAAWwQ,MAAO4sB,EAAW5sB,QAAU4sB,EAAWhsB,QAC3IviT,EAAQuuU,EAAWhsB,QAAUpR,EAAWoR,QACxCssB,EAAWN,EAAW1sB,aAAe0sB,EAAW3sB,UAAUjkV,OAAO4wW,EAAW1sB,cAAgB0sB,EAAW3sB,UACvGktB,EAAW39B,EAAW0Q,aAAe1Q,EAAWyQ,UAAUjkV,OAAOwzU,EAAW0Q,cAAgB1Q,EAAWyQ,UAC7G,IAAK,IAAIzmW,EAAI2hC,EAAO3hC,GAAK4hC,EAAK5hC,IAAK,CACjC,MAAM4zX,EAAUD,EAAS9uU,EAAQ7kD,GACjC,IAAI6zX,EAAUH,EAAS1zX,GACnB4nW,IAAoBisB,GAAW7zX,EAAI4nW,IAErCisB,EAAUT,EAAW3sB,UAAUzmW,GAAK4zX,GAElCA,GAAWC,GACbJ,EAAeG,EAASC,EAE5B,CACF,CAnJEC,CAAwB99B,EAAYo9B,GAAY,CAACQ,EAASC,KACpDD,EAAQtwB,SAIVkwB,EAAWI,EAAQvqQ,GAAKwqQ,EAAQxqQ,IAE9Bs3O,EAAeizB,EAAQzvB,WAAaxD,EAAeizB,EAAQxvB,UAC7DyvB,EAAQlyV,MAAQkyV,EAAQ1vB,SAAWyvB,EAAQzvB,SAC3C0vB,EAAQxvB,SAAWuvB,EAAQvvB,SAC3BwvB,EAAQrvB,YAAcovB,EAAQpvB,YAC9BqvB,EAAQzvB,OAASwvB,EAAQxvB,OACzByvB,EAAQvvB,OAASsvB,EAAQtvB,OACzBuvB,EAAQpvB,UAAYmvB,EAAQnvB,UAC5BovB,EAAQ1iX,SAAWyiX,EAAQxvB,OAASwvB,EAAQzvB,SACxC0vB,EAAQ1iX,WACVoiX,EAAUM,GAIZT,EAAWhtB,SAAWgtB,EAAW/sB,gBAAiB,GAEpDwtB,EAAQtwB,kBAAoBqwB,EAAQrwB,kBACpCswB,EAAQruH,OAASouH,EAAQpuH,OACzBquH,EAAQxiE,MAAQuiE,EAAQviE,MACpBuiE,EAAQjvB,cACVkvB,EAAQlvB,YAAcivB,EAAQjvB,YAC9Bqd,EAAqB4R,EAAQjvB,YAC/B,IAEEqd,EAAoB,EACGoR,EAAW1sB,aAAe0sB,EAAW3sB,UAAUjkV,OAAO4wW,EAAW1sB,cAAgB0sB,EAAW3sB,WACpGp9V,SAAQy8V,IACvB,IAAIiuB,GACAjuB,GAAUA,EAAKnB,aAAemB,EAAKnB,YAAYrB,UAA0D,OAA7CywB,EAAsB/R,QAA8B,EAAS+R,EAAoBzwB,UAC/IwC,EAAKnB,YAAcqd,EACrB,GAEJ,CACA,GAAIoR,EAAWxrB,gBAEb,GADAwrB,EAAWhrB,kBAAoBgrB,EAAW3sB,UAAUhnT,MAAKqmT,IAASA,IAC9DstB,EAAWhrB,kBAAmB,CAChC1iV,EAAOyO,KAAK,+EACZ,IAAK,IAAIn0B,EAAIozX,EAAWxrB,gBAAiB5nW,KACvCozX,EAAW3sB,UAAU/6U,QAEvB0nW,EAAWhsB,QAAUgsB,EAAW3sB,UAAU,GAAGzC,GAC7CovB,EAAWjsB,QAAUisB,EAAW3sB,UAAU,GAAGp9O,EAC/C,MAAW+pQ,EAAWzrB,oBACpByrB,EAAWxsB,WAiDjB,SAAyBotB,EAAeC,EAAiBpsB,GACvD,MAAMjB,EAAatgV,EAAS,CAAC,EAAG0tW,GAC5BnsB,GACFA,EAA0Bx+V,SAAQiJ,WACzBs0V,EAAWt0V,EAAG,IAWzB,OARA9R,OAAOiC,KAAKwxX,GAAiB5qX,SAAQiJ,IACnC,MAAMuwW,EAAY,IAAI5gB,EAAUgyB,EAAgB3hX,GAAImgO,KAAMm0H,EAAWt0V,IACjEuwW,EAAU9iT,QACZ6mS,EAAWt0V,GAAMuwW,EAEjBn9V,EAAOyO,KAAK,0DAA0DlI,KAAKC,UAAU+nW,EAAgB3hX,GAAImgO,SAC3G,IAEKm0H,CACT,CAjE8BstB,CAAgBl+B,EAAW4Q,WAAYwsB,EAAWxsB,WAAYwsB,EAAWvrB,4BAGrG,MAAMssB,EAAef,EAAW3sB,UAChC,GAAI+sB,EAAU,CACZ9tW,EAAOyO,KAAK,gEACZ,IAAK,IAAIn0B,EAAI,EAAGA,EAAIm0X,EAAal0X,OAAQD,IACvCm0X,EAAan0X,GAAGqpH,IAAMmqQ,CAE1B,CACIJ,EAAWxrB,kBACbwrB,EAAWjsB,QAAUisB,EAAW3sB,UAAU,GAAGp9O,IAuDjD,SAA6B+qQ,EAAUC,EAAUZ,GAC/C,GAAIW,GAAYC,EAAU,CACxB,IAAIxvU,EAAQ,EACZ,IAAK,IAAI7kD,EAAI,EAAGsiB,EAAM8xW,EAASn0X,OAAQD,GAAKsiB,EAAKtiB,IAAK,CACpD,MAAMs0X,EAAUF,EAASp0X,GACnBu0X,EAAUF,EAASr0X,EAAI6kD,GACzByvU,GAAWC,GAAWD,EAAQnsX,QAAUosX,EAAQpsX,OAASmsX,EAAQ/zB,SAASyD,KAAOuwB,EAAQh0B,SAASyD,GACpGyvB,EAAea,EAASC,GAExB1vU,GAEJ,CACF,CACF,CAhEE2vU,CAAoBx+B,EAAW2Q,SAAUysB,EAAWzsB,UAAU,CAAC2tB,EAASC,KACtEA,EAAQhxB,kBAAoB+wB,EAAQ/wB,kBACpCgxB,EAAQljE,MAAQijE,EAAQjjE,KAAK,IAI3BkiE,EACFR,GAAiBK,EAAYG,EAASA,EAAQpvB,SAAUovB,EAAQnvB,OAAQmvB,EAAQlvB,SAAUkvB,EAAQjvB,QAKlGmwB,GAAcz+B,EAAYo9B,GAExBe,EAAal0X,SACfmzX,EAAW7rB,cAAgB6rB,EAAW9pB,KAAO6qB,EAAa,GAAGxyV,OAE/DyxV,EAAW/qB,eAAiBrS,EAAWqS,eACvC+qB,EAAW7qB,WAAavS,EAAWuS,WACnC,MAAMxB,EAAmBqsB,EAAWrsB,iBACpC,GAAIqsB,EAAWpsB,UAAYD,EAAkB,CAC3C,MAAMuC,EAAO8pB,EAAW9pB,KACnB8pB,EAAW7qB,aACd6qB,EAAW/qB,eAAiBtB,EAC5BqsB,EAAW7qB,WAAae,GAE1B8pB,EAAW9qB,aAAevB,EAC1BqsB,EAAW5qB,SAAWc,CACxB,MACE8pB,EAAW9qB,aAAetS,EAAWsS,aACrC8qB,EAAW5qB,SAAWxS,EAAWwS,SACjC4qB,EAAWrsB,iBAAmB/Q,EAAW+Q,gBAE7C,CAmDA,SAAS0tB,GAAcz+B,EAAYo9B,GACjC,MAAMvuU,EAAQuuU,EAAWhsB,QAAUgsB,EAAWxrB,gBAAkB5R,EAAWoR,QACrEisB,EAAer9B,EAAWyQ,UAC5B5hT,EAAQ,GAAKA,GAASwuU,EAAapzX,QAGvCy0X,GAAWtB,EAAYC,EAAaxuU,GAAOljB,MAC7C,CACA,SAAS+yV,GAAWnN,EAAS5lV,GAC3B,GAAIA,EAAO,CACT,MAAM8kU,EAAY8gB,EAAQ9gB,UAC1B,IAAK,IAAIzmW,EAAIunX,EAAQ3f,gBAAiB5nW,EAAIymW,EAAUxmW,OAAQD,IAC1DymW,EAAUzmW,GAAG2hC,OAASA,EAEpB4lV,EAAQ7gB,eACV6gB,EAAQ7gB,aAAa/kU,OAASA,EAElC,CACF,CAwCA,SAASgzV,GAAYhrI,EAAOq6G,EAAI4wB,GAC9B,IAAIC,EACJ,OAAe,MAATlrI,GAAiBA,EAAM49H,QAGtBuN,GAA6C,OAAnCD,EAAiBlrI,EAAM49H,cAAmB,EAASsN,EAAeluB,SAAU3C,EAAI4wB,GAFxF,IAGX,CACA,SAASE,GAASnuB,EAAU3C,EAAI4wB,GAC9B,GAAIjuB,EACF,IAAK,IAAI3mW,EAAI2mW,EAAS1mW,OAAQD,KAAM,CAClC,MAAMojX,EAAOzc,EAAS3mW,GACtB,GAAIojX,EAAKj7W,QAAUysX,GAAaxR,EAAK7iB,SAASyD,KAAOA,EACnD,OAAOof,CAEX,CAEF,OAAO,IACT,CACA,SAAS2R,GAA6BtV,GACpCA,EAAOp2W,SAAQ,CAACsgP,EAAOxhP,KACrB,MAAM,QACJo/W,GACE59H,EACW,MAAX49H,GAAmBA,EAAQ9gB,WAC7B8gB,EAAQ9gB,UAAUp9V,SAAQk3V,IACxBA,EAAS52G,MAAQxhP,CAAK,GAE1B,GAEJ,CAEA,SAAS6sX,GAAe7qX,GACtB,OAAQA,EAAMo9W,SACZ,KAAK1mB,EAAao0B,kBAClB,KAAKp0B,EAAaq0B,iBAClB,KAAKr0B,EAAa8oB,mBAClB,KAAK9oB,EAAa4oB,sBAChB,OAAO,EAEX,OAAO,CACT,CACA,SAAS0L,GAAenO,EAAY78W,GAClC,MAAMirX,EAAYJ,GAAe7qX,GACjC,OAAO68W,EAAWh7T,SAAWopU,EAAY,UAAY,SAA3B,QAC5B,CACA,SAASC,GAAcC,EAAaptC,GAElC,MAAMqtC,EAAwC,WAAxBD,EAAYE,QAAuB,EAAIp/V,KAAKC,IAAI,EAAG6xT,GACzE,OAAO9xT,KAAKjT,IAAIoyW,EAAgBD,EAAYpN,aAAcoN,EAAYlN,gBACxE,CACA,SAASqN,GAA6BC,GACpC,OAAOp/L,EAAeA,EAAe,CAAC,EAAGo/L,GAAc,CACrDrO,WAAY,KACZD,aAAc,MAElB,CACA,SAASzjM,GAAY2xM,EAAaptC,EAAYktC,EAAWO,GACvD,IAAKL,EACH,OAAO,EAET,MAAMM,EAA+B,MAAlBD,OAAyB,EAASA,EAAe9iW,KAC9DqrI,EAAQgqL,EAAaotC,EAAYrN,cAGzC,SAA4B2N,GAE1B,OAAsB,IAAfA,IAAyC,IAArBhgW,UAAU47P,UAAsBokG,IAAeA,EAAa,KAAOA,EAAa,IAC7G,CANyDC,CAAmBD,MAAiBR,GAC3F,OAAOE,EAAY3xM,YAAc2xM,EAAY3xM,YAAY2xM,EAAaptC,EAAYktC,EAAWO,EAAgBz3N,GAASA,CACxH,CAMA,MAAM43N,GAgBI,SAAUr1S,EAAMs1S,GACtB,IAAIC,EAAW,EACXC,EAAWx1S,EAAKxgF,OAAS,EACzBi2X,EAAe,KACfC,EAAiB,KACrB,KAAOH,GAAYC,GAAU,CAC3BC,GAAgBF,EAAWC,GAAY,EAAI,EAC3CE,EAAiB11S,EAAKy1S,GACtB,MAAME,EAAmBL,EAAaI,GACtC,GAAIC,EAAmB,EACrBJ,EAAWE,EAAe,MACrB,MAAIE,EAAmB,GAG5B,OAAOD,EAFPF,EAAWC,EAAe,CAG5B,CACF,CACA,OAAO,IACT,EA2CF,SAASG,GAAkBC,EAAc7vB,EAAW8vB,EAAY,EAAGC,EAAyB,EAAGC,EAA0B,MACvH,IAAIC,EAAW,KACf,GAAIJ,EAAc,CAChBI,EAAWjwB,EAAU6vB,EAAatyB,GAAKyC,EAAU,GAAGzC,GAAK,IAAM,KAE/D,MAAM2yB,EAAkBL,EAAahyB,OAASiyB,EAC1CI,EAAkB,GAAKA,EAAkB,QAC3CJ,GAAa,MAEjB,MAAyB,IAAdA,GAA0C,IAAvB9vB,EAAU,GAAG9kU,QACzC+0V,EAAWjwB,EAAU,IAGvB,GAAIiwB,MAAeJ,GAAgBA,EAAa3sI,QAAU+sI,EAAS/sI,QAAuF,IAA7EitI,GAA4BL,EAAWC,EAAwBE,IAW9I,SAAuCA,EAAUJ,EAAcG,GAC7D,GAAIH,GAAuC,IAAvBA,EAAa30V,OAAe20V,EAAa3sI,MAAQ+sI,EAAS/sI,QAAU2sI,EAAalyB,QAAU,GAAK,EAAG,CACrH,MAAMyyB,EAAgBP,EAAavyB,QAAQ17S,QAAO,CAACl3C,EAAUmlG,KAC5C,QAAXA,EAAI,KACNnlG,GAAY+I,WAAWo8F,EAAI,KAEtBnlG,IACNslX,GACH,OAAOC,EAAS/0V,OAASk1V,CAC3B,CACA,OAAO,CACT,CAtBiKC,CAA8BJ,EAAUJ,EAAclgW,KAAKjT,IAAIszW,EAAyBD,KACrP,OAAOE,EAGT,MAAMK,EAAgBjB,GAAoBrvB,EAAWmwB,GAA4BzvW,KAAK,KAAMovW,EAAWC,IACvG,OAAIO,GAAkBA,IAAkBT,GAAiBI,EAIlDA,EAHEK,CAIX,CAqBA,SAASH,GAA4BL,EAAY,EAAGC,EAAyB,EAAGQ,GAE9E,GAAIA,EAAUr1V,OAAS40V,GAAaS,EAAUr1V,MAAQq1V,EAAU7lX,SAAWolX,EACzE,OAAO,EAgBT,MAAMU,EAA2B7gW,KAAKjT,IAAIqzW,EAAwBQ,EAAU7lX,UAAY6lX,EAAUzyB,SAAWyyB,EAAUzyB,SAAW,IAClI,OAAIyyB,EAAUr1V,MAAQq1V,EAAU7lX,SAAW8lX,GAA4BV,EAC9D,EACES,EAAUr1V,MAAQs1V,EAA2BV,GAAaS,EAAUr1V,OAErE,EAEH,CACT,CAUA,SAASu1V,GAAuBC,EAAcX,EAAwBQ,GACpE,MAAMC,EAAkI,IAAvG7gW,KAAKjT,IAAIqzW,EAAwBQ,EAAU7lX,UAAY6lX,EAAUzyB,SAAWyyB,EAAUzyB,SAAW,IAIlI,OAD2ByyB,EAAU9xB,oBAAsB,GAC/B+xB,EAA2BE,CACzD,CAaA,IAAIC,GACS,EADTA,GAGyB,EAHzBA,GAI0B,EAJ1BA,GAMY,EAEZC,GACI,EADJA,GAE6B,EAF7BA,GAG6B,EA8WjC,MAAMC,GACJ,WAAAhvV,CAAYk9U,EAAK+R,GACf9wW,KAAK++V,SAAM,EACX/+V,KAAKgwO,OAAS,EACdhwO,KAAK+wW,kBAAoB,EACzB/wW,KAAKgxW,SAAU,EACfhxW,KAAKQ,SAAM,EACXR,KAAK0N,UAAO,EACZ1N,KAAKQ,IAAMvB,EAAOuB,IAAIE,KAAKzB,EAAQ,GAAG6xW,MACtC9wW,KAAK0N,KAAOzO,EAAOyO,KAAKhN,KAAKzB,EAAQ,GAAG6xW,MACxC9wW,KAAK++V,IAAMA,CACb,CACA,OAAA/zN,GACEhrI,KAAKixW,aAELjxW,KAAK++V,IAAM/+V,KAAKQ,IAAMR,KAAK0N,KAAO,IACpC,CACA,UAAAujW,IACsB,IAAhBjxW,KAAKgwO,QACPhhO,KAAKsiE,aAAatxE,KAAKgwO,OACvBhwO,KAAKgwO,OAAS,EAElB,CACA,SAAAkvH,GACEl/V,KAAKgxW,SAAU,EACfhxW,KAAK+wW,kBAAoB,EACzB/wW,KAAKkxW,cACP,CACA,QAAA9R,GACEp/V,KAAKgxW,SAAU,EACfhxW,KAAKixW,YACP,CACA,YAAAE,CAAaC,EAAa95N,EAAU94J,GAClC,MAAMijW,EAA+B,MAAZnqM,OAAmB,EAASA,EAASmqM,iBAC9D,GAAIA,EAAkB,CACpB,IAAI4vB,GAAc,EAClB,IAAK,IAAI93X,EAAI,EAAGA,EAAIkoW,EAAiBjoW,OAAQD,IAAK,CAChD,MAAMyyO,EAAOy1H,EAAiBloW,GAC9B,IAAIgqW,EACJ,IACEA,EAAM,IAAIv0U,KAAKuvB,IAAIytL,EAAKivI,IAAK3jN,EAASviI,KAAKzvB,IAC7C,CAAE,MAAO5B,GACPub,EAAOyO,KAAK,qDAAqDhqB,KACjE6/V,EAAMv3H,EAAKivI,KAAO,EACpB,CAGA,GAAI1X,IAAQ6tB,EAAa,CACvBC,EAAa93X,EACb,KACF,CAAWgqW,IAAQ6tB,EAAY51X,UAAU,EAAG+nW,EAAI/pW,UAC9C63X,EAAa93X,EAEjB,CACA,IAAoB,IAAhB83X,EAAmB,CACrB,MAAMrlJ,EAAOy1H,EAAiB4vB,GACxBlH,EAAMttW,SAASmvN,EAAK,eAA6B,MAAZ10E,OAAmB,EAASA,EAASgrM,YAChF,IAAIqa,EAAO9/V,SAASmvN,EAAK,gBAA8B,MAAZ10E,OAAmB,EAASA,EAASkrM,eAChF,GAAIxiV,KAAK++V,IAAInsV,OAAO+1V,eAAgB,CAClC,MAAM2I,EAAc3hW,KAAKjT,IAAI46I,EAAS4rM,IAAM5rM,EAASiqM,WAAYjqM,EAASupM,gBACtE8b,GAAQ,GAAK2U,EAAch6N,EAASiqM,aACtCob,GAAQ,EAEZ,CACA,MAAMyN,EAAO5rX,GAAWyrX,GAAazrX,GACrC,OAAO,IAAI0rX,GAAiBC,EAAKxN,GAAQ,EAAIA,OAAO/jW,EAAWwxW,EACjE,CACF,CACF,CACA,YAAA8G,CAAaK,IACoB,IAA3BvxW,KAAK+wW,mBACP/wW,KAAK+wW,iBAAmB/hW,KAAK+7G,YAAY9hI,MAG7C,CACA,kBAAAuoX,CAAmBC,GACjB,OAAOzxW,KAAKgxW,WAAaS,KAAcA,EAAS18V,OAAS08V,EAAS3Q,SAAW2Q,EAAS3Q,QAAQ1gB,KAChG,CACA,oBAAAsxB,CAAqBD,GACnB,OAAuB,IAAhBzxW,KAAKgwO,QAA2C,IAA3BhwO,KAAK+wW,kBAA2B/wW,KAAKwxW,mBAAmBC,EACtF,CACA,cAAAE,CAAejwX,EAAOkI,EAAMgoX,GAC1B,MAAM,QACJ9Q,EAAO,MACPl2D,GACEhhT,EAGEX,EAAM+lB,KAAK+7G,YAAY9hI,MACvB4oX,EAAUjnE,EAAMnuT,QAAQqkD,MAAQnxB,KAAKhT,IAAI,EAAG1T,EAAM2hT,EAAMnuT,QAAQqkD,OAAS,EAI/E,GAHAggU,EAAQxgB,iBAAmBp3V,KAAKD,MAAQ4oX,EAGpC/Q,EAAQ1gB,MAA2B,MAAnBwxB,GAA2BA,EAAgBxxB,KAAM,CASnE,GARA0gB,EAAQ1e,SAASwvB,GACbA,GACF5xW,KAAKQ,IAAI,iBAAiB9e,KAASo/W,EAAQvgB,SAAW,aAAeugB,EAAQxe,WAAa,IAAMwe,EAAQte,cAAgBse,EAAQp7L,QAAU,UAAY,YAGpJksM,GAAmB9Q,EAAQ9gB,UAAUxmW,OAAS,GAChDkzX,GAAakF,EAAiB9Q,IAE3B9gW,KAAKgxW,UAAYlQ,EAAQ1gB,KAC5B,OAEF,IAAIigB,EACA8J,EACAxN,EACJ,GAAImE,EAAQ9f,gBAAkB8f,EAAQ/gB,OAAS+gB,EAAQvgB,SAAU,CAE/D,MAAMooB,EAAiB3oW,KAAK++V,IAAInsV,OAAO+1V,eACjCrmB,EAAawe,EAAQxe,WACrBwvB,EAAQhR,EAAQ/gB,MAChByC,EAAgBse,EAAQte,cAExBuvB,EAAWzvB,IAAewvB,GADI,IAAnBtvB,GAKf2nB,EAAM4H,EAAWD,EAAQ,EAAIxvB,EAC7Bqa,EAAOoV,EAHgBpJ,EAAiB,EAAInmB,EAGPA,EAAgB,GAErD2nB,EAAM2H,EAAQ,EAIhB,MAAME,EAAelR,EAAQ5d,IACvB+uB,EAASD,EAAelR,EAAQzgB,UACtC,IAAIixB,EAAc3hW,KAAKjT,IAAIu1W,EAASnR,EAAQvf,WAAqC,IAAzBuf,EAAQjgB,gBAChE,GAAIywB,EAAc,EAAG,CACnB,GAAIM,GAAmBN,EAAcM,EAAgBlwB,WAGnD1hV,KAAK0N,KAAK,oCAAoCkkW,EAAgBlwB,kBAAkB4vB,wBAAkCxQ,EAAQ5d,OAC1HouB,EAAc,MACT,CACL,MAAMzwU,EAAWlxB,KAAKq2B,MAAMsrU,EAAcxQ,EAAQjgB,gBAElD,GADAspB,GAAOtpU,OACMjoC,IAAT+jW,EAAoB,CAEtBA,GADchtV,KAAKy2B,MAAMkrU,EAAcxQ,EAAQjgB,eAAiBigB,EAAQvf,WAE1E,CACAvhV,KAAKQ,IAAI,oBAAoBsgW,EAAQzgB,4BAA4B2xB,EAAa38V,QAAQ,aAAai8V,aAAuBzwU,aAAoB87T,IAChJ,CACAmE,EAAQpf,WAAa4vB,CACvB,CAEA,GADAjR,EAAqBrgW,KAAKkyW,sBAAsBpR,EAASl3W,EAAKy2W,mBAAoB8J,EAAKxN,GACnFgM,IAAmBoJ,EAErB,YADA/xW,KAAKkxW,aAAa7Q,EAGtB,MAAWS,EAAQ9f,gBAAkB8f,EAAQ7f,gBAC3Cof,EAAqBrgW,KAAKkyW,sBAAsBpR,EAASl3W,EAAKy2W,mBAAoB8J,EAAKxN,IAEzF,MAAMwV,EAAanyW,KAAK++V,IAAIqT,sBACtB5jS,EAAW2jS,EAAaA,EAAWh3V,IAAMg3V,EAAWt2W,IAAM,EAE1Dw2W,EAnzBZ,SAA+B1F,EAAY2F,EAAuB11W,KAChE,IAAIy1W,EAAiB,IAAO1F,EAAW9rB,eACvC,GAAI8rB,EAAWjnM,QAAS,CAEtB,MAAMs6K,EAAY2sB,EAAW3sB,UACvBuyB,EAA6B,EACnC,GAAIvyB,EAAUxmW,QAAU64X,EAAiBE,EAA6BD,EAAsB,CAC1F,MAAME,EAAiE,IAA3CxyB,EAAUA,EAAUxmW,OAAS,GAAGkR,SACxD8nX,EAAsBH,IACxBA,EAAiBG,EAErB,CACF,MAKEH,GAAkB,EAEpB,OAAO1iW,KAAKy2B,MAAMisU,EACpB,CA+xB6BI,CAAsB3R,EADY,KAA3BA,EAAQje,KAAOr0Q,IAEzCsyR,EAAQp7L,SAAWz8K,EAAM+W,KAAK+wW,iBAAmBsB,IACnDryW,KAAK+wW,iBAAmBnmE,EAAMnuT,QAAQy+B,YAE5BtiB,IAARuxW,GAAqBrJ,EAAQ9f,eAC/BhhV,KAAK+wW,iBAAmBnmE,EAAMnuT,QAAQqkD,MAAQuxU,GAAuC,IAArBvR,EAAQvf,YAAqB,MACzD,IAA3BvhV,KAAK+wW,kBAA2B/wW,KAAK+wW,iBAAmBsB,EAAiBppX,EAClF+W,KAAK+wW,iBAAmB9nX,EACf+W,KAAK+wW,iBAAmB9nX,GAAO,IACxC+W,KAAK+wW,kBAAoBsB,GAE3B,IAAIK,EAA2B1yW,KAAK+wW,iBAAmB9nX,EACvDypX,EAA2B/iW,KAAKhT,IAAI,EAAG+1W,GACvC1yW,KAAKQ,IAAI,wBAAwB9e,QAAYiuB,KAAKy2B,MAAMssU,SAiBxD1yW,KAAKgwO,MAAQhhO,KAAKV,YAAW,IAAMtO,KAAKkxW,aAAa7Q,IAAqBqS,EAC5E,MACE1yW,KAAKixW,YAET,CACA,qBAAAiB,CAAsBpR,EAAS6R,EAA4BxI,EAAKxN,GAC9D,IAAIyN,EAAOH,GAAanJ,GAMxB,OALkC,MAA9B6R,GAAsCA,EAA2BvI,MAAQtJ,EAAQnf,oBACnFwoB,EAAMwI,EAA2BxI,IACjCxN,EAAOgW,EAA2BhW,KAClCyN,EAAOJ,IAEF,IAAIE,GAAiBC,EAAKxN,EAAMyN,EACzC,CACA,UAAAwI,CAAWC,GACT,MAAMC,EAAeD,EAAW/R,QAC1B6N,EAAYJ,GAAesE,GAC3BE,EAAcF,EAAWE,aACzB,OACJ77U,EAAM,WACNuqS,EAAa,EAAC,YACdotC,GACEkE,GAAe,CAAC,EACdt7N,IAAUs7N,KAAiBlE,IAAgB33U,IAAWy5U,KAAoCoC,EAAYvyC,UAAYtpS,IAAWy5U,IACnI,GAAIl5N,EAAO,CACT,IAAIu7N,EAEJ,GADAhzW,KAAK+wW,kBAAoB,EACrBtvC,GAAcotC,EAAYrN,YAC5B,OAAO,EAET,GAAImN,GAA2D,OAA7CqE,EAAsBH,EAAW/zW,UAAoBk0W,EAAoB3S,mBAEzFrgW,KAAK0N,KAAK,6BAA6B+zT,EAAa,KAAKotC,EAAYrN,sBAAsBsR,kCAC3F9yW,KAAKkxW,mBACA,CACL,MAAM30P,EAAQqyP,GAAcC,EAAaptC,GAEzCzhU,KAAKgwO,MAAQhhO,KAAKV,YAAW,IAAMtO,KAAKkxW,gBAAgB30P,GACxDv8G,KAAK0N,KAAK,6BAA6B+zT,EAAa,KAAKotC,EAAYrN,sBAAsBsR,SAAoBv2P,MACjH,CAEAs2P,EAAWI,YAAa,EACxBF,EAAYvyC,UAAW,CACzB,CACA,OAAO/oL,CACT,EASF,MAAMy7N,GAEJ,WAAArxV,CAAYsxV,EAAUC,EAAW,EAAGC,EAAS,GAC3CrzW,KAAKmzW,cAAW,EAChBnzW,KAAKszW,YAAS,EACdtzW,KAAKuzW,eAAY,EACjBvzW,KAAKwzW,kBAAe,EACpBxzW,KAAKmzW,SAAWA,EAEhBnzW,KAAKszW,OAASH,EAAWxjW,KAAKoZ,IAAIpZ,KAAKnP,IAAI,IAAO2yW,GAAY,EAC9DnzW,KAAKuzW,UAAYH,EACjBpzW,KAAKwzW,aAAeH,CACtB,CACA,MAAA7tP,CAAO6tP,EAAQj5X,GACb,MAAMq5X,EAAW9jW,KAAKC,IAAI5P,KAAKszW,OAAQD,GACvCrzW,KAAKuzW,UAAYn5X,GAAS,EAAIq5X,GAAYA,EAAWzzW,KAAKuzW,UAC1DvzW,KAAKwzW,cAAgBH,CACvB,CACA,cAAAK,GACE,OAAO1zW,KAAKwzW,YACd,CACA,WAAAG,GACE,GAAI3zW,KAAKszW,OAAQ,CACf,MAAMM,EAAa,EAAIjkW,KAAKC,IAAI5P,KAAKszW,OAAQtzW,KAAKwzW,cAClD,GAAII,EACF,OAAO5zW,KAAKuzW,UAAYK,CAE5B,CACA,OAAO5zW,KAAKuzW,SACd,EAWF,MAAMM,GACJ,WAAAhyV,CAAYiyV,EAAMC,EAAMC,EAAiBC,EAAc,KACrDj0W,KAAKk0W,sBAAmB,EACxBl0W,KAAKm0W,gBAAa,EAClBn0W,KAAKo0W,iBAAc,EACnBp0W,KAAKq0W,WAAQ,EACbr0W,KAAKs0W,WAAQ,EACbt0W,KAAKu0W,kBAAe,EACpBv0W,KAAKw0W,WAAQ,EACbx0W,KAAKk0W,iBAAmBF,EACxBh0W,KAAKm0W,WAAa,KAClBn0W,KAAKo0W,YAAc,GACnBp0W,KAAKq0W,MAAQ,IAAInB,GAAKY,GACtB9zW,KAAKs0W,MAAQ,IAAIpB,GAAKa,GACtB/zW,KAAKu0W,aAAeN,EACpBj0W,KAAKw0W,MAAQ,IAAItB,GAAKY,EACxB,CACA,MAAA9lV,CAAO8lV,EAAMC,GACX,MAAM,MACJM,EAAK,MACLC,EAAK,MACLE,GACEx0W,KACAq0W,EAAMlB,WAAaW,IACrB9zW,KAAKq0W,MAAQ,IAAInB,GAAKY,EAAMO,EAAMV,cAAeU,EAAMX,mBAErDY,EAAMnB,WAAaY,IACrB/zW,KAAKs0W,MAAQ,IAAIpB,GAAKa,EAAMO,EAAMX,cAAeW,EAAMZ,mBAErDc,EAAMrB,WAAaW,IACrB9zW,KAAKw0W,MAAQ,IAAItB,GAAKY,EAAMU,EAAMb,cAAea,EAAMd,kBAE3D,CACA,MAAAluP,CAAOivP,EAAYC,GAEjB,MAEMC,GAHNF,EAAa9kW,KAAKhT,IAAI83W,EAAYz0W,KAAKo0W,cAGR,IAEzBQ,EAJU,EAAIF,EAIaC,EACjC30W,KAAKs0W,MAAM9uP,OAAOmvP,EAAWC,GAC7B50W,KAAKq0W,MAAM7uP,OAAOmvP,EAAWC,EAC/B,CACA,UAAAC,CAAWC,GAGT,MAAM7nU,EAAU6nU,EAAO,IACjBzB,EAAS1jW,KAAK81B,KAAK,GAAK91B,KAAKoZ,KAAKpZ,KAAKC,IAAIq9B,EAAS,GAAK,GAC/DjtC,KAAKw0W,MAAMhvP,OAAO6tP,EAAQ1jW,KAAKhT,IAAIm4W,EAAM,GAC3C,CACA,WAAAC,GACE,OAAO/0W,KAAKs0W,MAAMZ,kBAAoB1zW,KAAKm0W,UAC7C,CACA,WAAAR,GACE,OAAI3zW,KAAK+0W,cAKAplW,KAAKjT,IAAIsD,KAAKs0W,MAAMX,cAAe3zW,KAAKq0W,MAAMV,eAE9C3zW,KAAKk0W,gBAEhB,CACA,eAAAc,GACE,OAAIh1W,KAAKw0W,MAAMd,kBAAoB1zW,KAAKm0W,WAC/Bn0W,KAAKw0W,MAAMb,cAEX3zW,KAAKu0W,YAEhB,CACA,OAAAvpO,GAAW,EAGb,MAAMiqO,GAAyB,CAC7BroP,WAAW,EACX8nC,eAAgB,GAChBwgN,oBAAqB,CAAC,CACpBtoP,WAAW,EACXuoP,gBAAgB,EAChBC,QAAQ,KAGNC,GAAuB,CAAC,EAC9B,SAASC,GAAsCpyI,EAAOqyI,EAAoBC,EAAmBC,EAAkBC,EAAWC,GAExH,MAAMlK,EAAcvoI,EAAMm3H,WAAan3H,EAAMuoI,YAAc,KACrDmK,EAA0C,MAAnBD,OAA0B,EAASA,EAAgBtb,WAC1Ewb,EAAwC,MAAnBF,OAA0B,EAASA,EAAgB5nN,SACxE+nN,EAAcD,EAAqBh5W,SAASg5W,GAAsBD,EAAuBh5W,IAAW,EAC1G,IAAIm5W,EAAgB,KACpB,GAAmB,MAAftK,GAAuBA,EAAYjyX,OACrC,IAEIu8X,EADyB,IAAvBtK,EAAYjyX,QAAgBiyX,EAAY,GAC1B8J,EAAmB55O,OAAO8vO,EAAY,IAAI19M,SAE1C09M,EAAY7pU,QAAO,CAACga,EAAKg2B,KACvC,GAAIA,EAAS,CACX,MAAMokS,EAAkBT,EAAmB55O,OAAO/pD,GAClD,IAAKokS,EACH,MAAM,IAAItyW,MAAM,qBAAqBkuE,eAGvC73F,OAAOiC,KAAKg6X,EAAgBjoN,UAAUnrK,SAAQ1I,IAC5C0hE,EAAI1hE,IAAQ0hE,EAAI1hE,IAAQ,GAAK87X,EAAgBjoN,SAAS7zK,EAAI,GAE9D,CACA,OAAO0hE,CAAG,GACT,CACD,EAAG,GAGT,CAAE,MAAOl4D,GACP,OAAO,CACT,CAEF,YAA4BkV,IAArBsqO,EAAMs0H,aAA6Bt0H,EAAM/lP,MAAQ,MAAQ+lP,EAAM9lP,OAAS,MAAQ8lP,EAAM9lP,OAAS,MAAQ8lP,EAAM/lP,MAAQ,MAAQ+lP,EAAMsnI,UAAY76V,KAAKhT,IAAI84W,EAAkB,KAA4B,QAArBvyI,EAAMmoI,YAAwBnoI,EAAMmoI,aAAemK,GAAqBtyI,EAAMm2H,QAAU1pV,KAAKhT,IAAI+4W,EAAW,SAAWK,GAAiB77B,EAAe47B,IAAgB/7X,OAAOiC,KAAK+5X,GAAe/8U,MAAK+0H,GAAYlxJ,SAASkxJ,GAAY+nN,GACla,CACA,SAASG,GAA4B/yI,EAAOqyI,EAAoBW,GAC9D,MAAMC,EAAcjzI,EAAMs0H,WACpB4e,EAAclzI,EAAMm3H,WAC1B,IAAK8b,IAAgBC,IAAgBF,EACnC,OAAO/2V,QAAQC,QAAQ61V,IAEzB,MAAMoB,EAAyB,CAC7Bl5X,MAAO+lP,EAAM/lP,MACbC,OAAQ8lP,EAAM9lP,OACdi8W,QAAS1pV,KAAK87B,KAAK97B,KAAKhT,IAAoB,GAAhBumO,EAAMm2H,QAAen2H,EAAMkoI,iBAEvDkL,UAAWpzI,EAAMsnI,WAAa,IAE1Ba,EAAanoI,EAAMmoI,WACN,QAAfA,IACFgL,EAAuBE,iBAAmBlL,EAAW5kW,eAEvD,MAAMiuJ,EAAiByhN,EAAYpyW,MAAM,KAAKjmB,KAAI05W,IAAc,CAC9Dx5W,KAAM,eACN0iO,MAAO7wC,EAAeA,EAAe,CAAC,EAAGwmM,GAAyB,CAAC,EAAG,CACpEG,YAAalf,GAAiBE,EAAY,eA4B9C,OAzBI4e,GAAelzI,EAAMuoI,aACvBvoI,EAAMuoI,YAAY7oX,SAAQgpX,IACxB,IAAI6K,EACC7K,IAGgE,OAApE6K,EAAwBlB,EAAmB55O,OAAOiwO,KAAkC6K,EAAsBzgM,OAAOpzL,SAAQ2/W,IACxH,GAAIA,EAAW3wR,UAAYg6R,EAAc,CACvC,MAAM79M,EAAWw0M,EAAWx0M,UAAY,GAClC2oN,EAAiBjjX,WAAWs6J,GAC9BmsL,EAAew8B,IAAmBA,EAAiB,GACrDhiN,EAAer5K,KAAK0kB,MAAM20J,EAAgB0hN,EAAYryW,MAAM,KAAKjmB,KAAIu8W,IAAc,CACjFr8W,KAAM,eACN2jF,MAAO,CACL60S,YAAalf,GAAiB+C,EAAY,SAC1CtsM,SAAU,GAAK2oN,OAMvB,KACA,IAGCv3V,QAAQivG,IAAIsmC,EAAe52K,KAAImzB,IAEpC,MAAM0lW,EAaV,SAAiC/jW,GAC/B,MAAM,MACJ+uD,EAAK,MACL++I,GACE9tM,EACEgkW,EAAcl2J,GAAS/+I,EAC7B,GAAIi1S,EAAa,CACf,MAAMntB,EAAQmtB,EAAYJ,YAAYzyW,MAAM,KAAK,GACjD,GAAI28M,EACF,MAAO,IAAIA,EAAMtjO,UAAUsjO,EAAMvjO,SAASwyB,KAAK87B,KAAKi1K,EAAM41J,aAAa51J,EAAM61J,kBAAoB,QAAQ9sB,KAAS95U,KAAK87B,KAAKi1K,EAAM24I,QAAU,OAE9I,GAAI13R,EACF,MAAO,IAAIA,EAAMosF,WAAWpsF,EAAMk1S,iBAAmB,IAAM,OAAOptB,GAEtE,CACA,MAAO,EACT,CA7B4BqtB,CAAwB7lW,GAChD,OAAOokW,GAAqBsB,KAAqBtB,GAAqBsB,GAAmBT,EAAkBa,aAAa9lW,GAAe,KACrI5C,MAAK6mW,IAAuB,CAC9BtoP,WAAYsoP,EAAoBl8U,MAAKpnB,IAASA,EAAKg7G,YACnD8nC,iBACAwgN,0BACE9sV,OAAM1kC,IAAS,CACjBkpI,WAAW,EACX8nC,iBACAwgN,oBAAqB,GACrBxxX,WAEJ,CAoDA,SAASszX,GAAyBxB,EAAmByB,GACnD,IAAIC,GAAY,EACZC,EAAqB,GAczB,OAbI3B,IACF0B,EAAkC,QAAtB1B,EACZ2B,EAAqB,CAAC3B,IAEpByB,IACFE,EAAqBF,EAAgBE,oBAAsBpN,GAAiBxmX,MAAM,GAClF2zX,OAA0Ct+W,IAA9Bq+W,EAAgBC,UAA0BD,EAAgBC,UAvC1E,WACE,GAA0B,oBAAfE,WAA2B,CACpC,MAAMC,EAAiBD,WAAW,yBAC5BE,EAAWF,WAAW,aAC5B,GAAIC,EAAetiJ,QAAUuiJ,EAASviJ,MACpC,OAAkC,IAA3BsiJ,EAAel/W,OAE1B,CACA,OAAO,CACT,CA8BsFo/W,GAEhFJ,EADED,EACmBC,EAAmBnzW,QAAO07G,GAAmB,QAAVA,IAEnC,CAAC,QAGnB,CACLw3P,YACAC,qBAEJ,CAoGA,SAASK,GAA8BC,EAASjqW,GAC9CvO,EAAOuB,IAAI,gCAAgCi3W,sBAA4BjqW,IACzE,CAiFA,SAASkqW,GAAmB/1X,EAAQq0L,EAAQ2hM,GAC1C,GAAI,UAAWh2X,EAAQ,CACrB,MAAMD,EAAQs0L,EAAO56L,QAAQuG,GAC7B,IAAe,IAAXD,EACF,OAAOA,CAEX,CACA,IAAK,IAAInI,EAAI,EAAGA,EAAIy8L,EAAOx8L,OAAQD,IAAK,CAEtC,GAAIq+X,GAAcj2X,EADJq0L,EAAOz8L,GACYo+X,GAC/B,OAAOp+X,CAEX,CACA,OAAQ,CACV,CACA,SAASq+X,GAAcj2X,EAAQ0vI,EAAOsmP,GACpC,MAAM,QACJ/lS,EAAO,KACPhtF,EAAI,KACJ8vO,EAAI,UACJgmI,EAAS,gBACTE,EACAr1T,QAASn1C,GACPzO,EACEq5W,EAASr5W,EAAOq5W,OACtB,YAAoBpiW,IAAZg5E,GAAyBy/C,EAAMz/C,UAAYA,UAAsBh5E,IAAThU,GAAsBysI,EAAMzsI,OAASA,UAAmBgU,IAAT87N,GAAsBrjG,EAAMqjG,OAASA,UAAmB97N,IAAT87N,GAAsBrjG,EAAMqpO,YAAcA,UAA6B9hW,IAAdxI,GAA2BihI,EAAM9rF,UAAYn1C,UAA0BwI,IAAXoiW,GAAwB3pO,EAAM2pO,SAAWA,UAAgCpiW,IAApBgiW,GAE1U,SAA8Bid,EAAkBC,EAAmB,IACjE,MAAMC,EAAOF,EAAiB9zW,MAAM,KAC9Bi0W,EAAOF,EAAiB/zW,MAAM,KAEpC,OAAOg0W,EAAKv+X,SAAWw+X,EAAKx+X,SAAWu+X,EAAK/+U,MAAKxlC,IAA4B,IAAtBwkX,EAAK58X,QAAQoY,IACtE,CAP2WykX,CAAqBrd,EAAiBvpO,EAAMupO,yBAAyChiW,IAAnB++W,GAAgCA,EAAeh2X,EAAQ0vI,GACpe,CAOA,SAAS6mP,GAAoBv2X,EAAQ0vI,GACnC,MAAM,WACJgpO,EAAU,SACVtsM,GACEpsK,EACJ,YAAuBiX,IAAfyhW,IAA6BhpO,EAAMgpO,YAAc,IAAI7+W,UAAU,EAAG,KAAO6+W,EAAW7+W,UAAU,EAAG,WAAqBod,IAAbm1J,GAA0BA,KAAc18B,EAAM08B,UAAY,KAC7K,CAoCA,SAASoqN,GAAoB18W,EAAKiiC,EAAa0oB,GAC7C,IAAK,IAAI7sE,EAAImkD,EAAankD,GAAK,EAAGA,IAChC,GAAI6sE,EAAU3qD,EAAIliB,IAChB,OAAOA,EAGX,IAAK,IAAIA,EAAImkD,EAAc,EAAGnkD,EAAIkiB,EAAIjiB,OAAQD,IAC5C,GAAI6sE,EAAU3qD,EAAIliB,IAChB,OAAOA,EAGX,OAAQ,CACV,CAqpBA,MAAM6+X,GACJ,WAAAv2V,GACE7hB,KAAKq4W,gBAAa,EAClBr4W,KAAKs4W,WAAa,KAClBt4W,KAAKu4W,cAAgB,KACrBv4W,KAAKw4W,eAAiB,EACtBx4W,KAAKq4W,WAAar4W,KAAKy4W,KAAK/3W,KAAKV,KACnC,CACA,OAAAgrI,GACEhrI,KAAK04W,sBACL14W,KAAK24W,oBACP,CACA,mBAAAD,GAEE14W,KAAK44W,gBACL54W,KAAKmrI,eACP,CACA,kBAAAwtO,GAAsB,CACtB,WAAAE,GACE,QAAS74W,KAAKu4W,aAChB,CACA,WAAAO,GACE,QAAS94W,KAAKs4W,UAChB,CAMA,WAAArtO,CAAY8tO,GACV,OAAK/4W,KAAKu4W,gBACRv4W,KAAKw4W,eAAiB,EACtBx4W,KAAKu4W,cAAgBvpW,KAAKi8H,YAAYjrI,KAAKq4W,WAAYU,IAChD,EAGX,CAKA,aAAA5tO,GACE,QAAInrI,KAAKu4W,gBACPvpW,KAAKm8H,cAAcnrI,KAAKu4W,eACxBv4W,KAAKu4W,cAAgB,MACd,EAGX,CAKA,aAAAK,GACE,QAAI54W,KAAKs4W,aACPtpW,KAAKsiE,aAAatxE,KAAKs4W,YACvBt4W,KAAKs4W,WAAa,MACX,EAGX,CAOA,IAAAG,GACEz4W,KAAKw4W,iBACuB,IAAxBx4W,KAAKw4W,iBACPx4W,KAAKg5W,SAGDh5W,KAAKw4W,eAAiB,GAExBx4W,KAAKi5W,gBAEPj5W,KAAKw4W,eAAiB,EAE1B,CACA,aAAAS,GACEj5W,KAAK44W,gBACL54W,KAAKs4W,WAAatpW,KAAKV,WAAWtO,KAAKq4W,WAAY,EACrD,CAMA,MAAAW,GAAU,EAGZ,IAAIE,GACU,aADVA,GAES,YAFTA,GAGO,UAHPA,GAIE,KAEN,MAAMC,GACJ,WAAAt3V,CAAYk9U,GACV/+V,KAAKo5W,gBAAkBr/X,OAAO6yB,OAAO,MACrC5M,KAAKq5W,iBAAmBt/X,OAAO6yB,OAAO,MACtC5M,KAAKggV,UAAYjmW,OAAO6yB,OAAO,MAC/B5M,KAAKs5W,WAAav/X,OAAO6yB,OAAO,MAChC5M,KAAKu5W,cAAgB,GACrBv5W,KAAK++V,SAAM,EACX/+V,KAAKw5W,SAAU,EACfx5W,KAAK++V,IAAMA,EACX/+V,KAAKgmW,oBACP,CACA,kBAAAA,GACE,MAAM,IACJjH,GACE/+V,KACJ++V,EAAItsU,GAAG2iL,EAAOqkK,gBAAiBz5W,KAAK05W,iBAAkB15W,MACtD++V,EAAItsU,GAAG2iL,EAAOukK,cAAe35W,KAAK45W,eAAgB55W,MAClD++V,EAAItsU,GAAG2iL,EAAOykK,YAAa75W,KAAK85W,aAAc95W,KAChD,CACA,oBAAAimW,GACE,MAAM,IACJlH,GACE/+V,KACJ++V,EAAIzqN,IAAI8gE,EAAOqkK,gBAAiBz5W,KAAK05W,iBAAkB15W,MACvD++V,EAAIzqN,IAAI8gE,EAAOukK,cAAe35W,KAAK45W,eAAgB55W,MACnD++V,EAAIzqN,IAAI8gE,EAAOykK,YAAa75W,KAAK85W,aAAc95W,KACjD,CACA,OAAAgrI,GACEhrI,KAAKimW,uBAELjmW,KAAKggV,UAELhgV,KAAKo5W,gBAELp5W,KAAKq5W,iBAAmBr5W,KAAKs5W,WAAa,IAC5C,CAMA,eAAAS,CAAgBvrS,EAAUk0R,GACxB,MAAMsX,EAAch6W,KAAKo5W,gBAAgB1W,GACzC,GAAIsX,EACF,IAAK,IAAIzgY,EAAIygY,EAAYxgY,OAAQD,KAAM,CACrC,MAAM0gY,EAAaD,EAAYzgY,GAC/B,IAAK0gY,EACH,MAEF,MAAMC,EAAcD,EAAW9+V,IAC/B,GAAI8+V,EAAW/+V,OAASszD,GAA4B,OAAhB0rS,GAAwB1rS,GAAY0rS,EACtE,OAAOD,CAEX,CAEF,OAAOj6W,KAAKm6W,gBAAgB3rS,EAAUk0R,EACxC,CAOA,eAAAyX,CAAgB3rS,EAAUk0R,GACxB,MAAM,UACJ1iB,GACEhgV,KACEhkB,EAAOjC,OAAOiC,KAAKgkW,GACzB,IAAK,IAAIzmW,EAAIyC,EAAKxC,OAAQD,KAAM,CAC9B,MAAM6gY,EAAiBp6B,EAAUhkW,EAAKzC,IACtC,IAAuB,MAAlB6gY,OAAyB,EAASA,EAAevhX,KAAK7a,QAAU0kX,GAAa0X,EAAe9Q,SAAU,CACzG,MAAMjqB,EAAO+6B,EAAevhX,KAC5B,GAAIwmV,EAAKnkU,OAASszD,GAAYA,GAAY6wQ,EAAKlkU,IAC7C,OAAOkkU,CAEX,CACF,CACA,OAAO,IACT,CAOA,sBAAAg7B,CAAuBC,EAAkBC,EAAWC,EAAcC,GAC5Dz6W,KAAKs5W,aACPt5W,KAAKs5W,WAAWgB,GAAoBC,GAItC,MAAMG,GAAkC,MAAhBD,OAAuB,EAASA,EAAa3gC,SAASyD,MAAQ,EACtFxjW,OAAOiC,KAAKgkB,KAAKggV,WAAWp9V,SAAQ1I,IAClC,MAAMkgY,EAAiBp6W,KAAKggV,UAAU9lW,GACtC,IAAKkgY,EACH,OAEF,GAAIM,GAAkBN,EAAevhX,KAAK0kV,GACxC,OAEF,IAAK68B,EAAe9Q,WAAa8Q,EAAet2J,OAI9C,YAHIs2J,EAAevhX,KAAK7a,OAASw8X,GAC/Bx6W,KAAK26W,eAAeP,EAAevhX,OAIvC,MAAM+hX,EAASR,EAAe16P,MAAM46P,GAC/BM,GAGLA,EAAO7xX,KAAKiwC,MAAKjwC,IACf,MAAM8xX,GAAiB76W,KAAK86W,eAAe/xX,EAAK20V,SAAU30V,EAAK40V,OAAQ48B,GAKvE,OAJIM,GAEF76W,KAAK26W,eAAeP,EAAevhX,MAE9BgiX,CAAa,GACpB,GAEN,CAMA,sBAAAE,CAAuBnxX,GACrB,MAAM0vX,EAAat5W,KAAKs5W,YAClB,KACJj6B,EAAI,KACJsd,GACE/yW,EACJ,IAAK0vX,GAA0B,gBAAZj6B,EAAK9B,GACtB,OAEF,MAAMy9B,EAAUC,GAAe57B,GACzB+6B,EAAiBp6W,KAAKggV,UAAUg7B,GACtC,IAAKZ,GAAkBA,EAAe9Q,UAAYjqB,EAAKv1N,IACrD,OAEF,MAAMoxP,GAAc77B,EAAKxC,OAWzB,GAVA9iW,OAAOiC,KAAKs9X,GAAY12X,SAAQ03X,IAC9B,MAAMa,EAAa97B,EAAKvC,kBAAkBw9B,GAC1C,IAAKa,EACH,OAEF,MAAMZ,EAAYjB,EAAWgB,GACvBt7P,EAAUk8P,IAAqC,IAAvBC,EAAWn8P,QACzCo7P,EAAe16P,MAAM46P,GAAoBt6W,KAAKo7W,iBAAiB/7B,EAAMsd,EAAM39O,EAASu7P,EAAU,IAEhGH,EAAet2J,OAAS,KACpB/pO,OAAOiC,KAAKo+X,EAAe16P,OAAOlmI,OAAQ,CAC5C4gY,EAAe9Q,UAAW,GACV8Q,EAAevhX,KAAKslV,QAAUkB,EAAKlB,SAAWi8B,EAAevhX,KAAKslV,WAEhFn+U,KAAKq5W,iBAAiBe,EAAevhX,KAAK7a,MAAQo8X,GAE/CiB,GAAUjB,IAEbp6W,KAAKs7W,YAAYj8B,EAAK9B,GAAK,EAAG8B,EAAKrhW,KAEvC,MAEEgiB,KAAK26W,eAAeP,EAAevhX,KAEvC,CACA,WAAAyiX,CAAYC,EAAU7Y,GACpB,MAAMsX,EAAch6W,KAAKo5W,gBAAgB1W,GACpCsX,IAGLh6W,KAAKo5W,gBAAgB1W,GAAasX,EAAYh2W,QAAO24V,GAAQA,EAAK7iB,SAASyD,IAAMg+B,IACnF,CACA,YAAAC,CAAan8B,EAAMp1F,GACjB,MAAM+wH,EAAUC,GAAe57B,GAC/B,IAAI+6B,EAAiBp6W,KAAKggV,UAAUg7B,IAC/BZ,GAAkBnwH,IACrBmwH,EAAiBp6W,KAAKggV,UAAUg7B,GAAW,CACzCniX,KAAMwmV,EACN66B,YAAa,KACbp2J,OAAQ,KACRwlJ,UAAU,EACV5pP,MAAO3lI,OAAO6yB,OAAO,OAEnByyU,EAAKv1N,MACP9pH,KAAKw5W,SAAU,IAGfY,IACFA,EAAet2J,OAAS,KACxBs2J,EAAe9Q,UAAW,EAE9B,CACA,gBAAA8R,CAAiBthC,EAAU6iB,EAAM39O,EAASu7P,GACxC,MAAMjR,EAAW,CACfvgX,KAAM,GACNi2H,WAEI0+N,EAAW5D,EAAS5+T,MACpByiU,EAAS7D,EAAS3+T,IAClB6iU,EAAYlE,EAASkE,WAAaL,EAClCI,EAAcjE,EAASiE,aAAeL,EAC5C,IAAK,IAAInkW,EAAI,EAAGA,EAAIghY,EAAU/gY,OAAQD,IAAK,CACzC,MAAM06D,EAAYsmU,EAAUr/V,MAAM3hC,GAAKymB,KAAKu5W,cACtC1lU,EAAU0mU,EAAUp/V,IAAI5hC,GAAKymB,KAAKu5W,cACxC,GAAIx7B,GAAe9pS,GAAa+pS,GAAanqS,EAAS,CAGpDy1T,EAASvgX,KAAK1N,KAAK,CACjBqiW,SAAU/tU,KAAKhT,IAAI+gV,EAAU68B,EAAUr/V,MAAM3hC,IAC7CokW,OAAQhuU,KAAKjT,IAAIihV,EAAQ48B,EAAUp/V,IAAI5hC,MAEzC,KACF,CAAO,GAAImkW,EAAW7pS,GAAW8pS,EAAS1pS,EAAW,CACnD,MAAM/4B,EAAQvL,KAAKhT,IAAI+gV,EAAU68B,EAAUr/V,MAAM3hC,IAC3C4hC,EAAMxL,KAAKjT,IAAIihV,EAAQ48B,EAAUp/V,IAAI5hC,IACvC4hC,EAAMD,IACRouV,EAAStqP,SAAU,EAGnBsqP,EAASvgX,KAAK1N,KAAK,CACjBqiW,SAAUxiU,EACVyiU,OAAQxiU,IAGd,MAAO,GAAIwiU,GAAU1pS,EAEnB,KAEJ,CACA,OAAOq1T,CACT,CAKA,kBAAAmS,CAAmB1yX,GACjB,IACI2yX,EACAznU,EACAJ,EAHA8nU,EAAe,KAIfC,EAAc,EAClB,MAAM,cACJrC,EAAa,UACbv5B,GACEhgV,KAmBJ,OAlBAjmB,OAAOiC,KAAKgkW,GAAWp9V,SAAQ1I,IAC7B,MAAMkgY,EAAiBp6B,EAAU9lW,GAC5BkgY,GAGDiB,GAAUjB,KACZnmU,EAAYmmU,EAAevhX,KAAKqiB,MAAQq+V,EACxC1lU,EAAUumU,EAAevhX,KAAKsiB,IAAMo+V,EAChCxwX,GAAQkrD,GAAalrD,GAAQ8qD,IAE/B6nU,EAAc/rW,KAAKjT,IAAI3T,EAAOkrD,EAAWJ,EAAU9qD,GAC/C6yX,GAAeF,IACjBC,EAAevB,EAAevhX,KAC9B+iX,EAAcF,IAGpB,IAEKC,CACT,CACA,iBAAAE,CAAkB79X,GAChB,MAAM89X,EAAqB97W,KAAKq5W,iBAAiBr7X,GACjD,YAA8B4a,IAAvBkjX,IAAqCA,EAAmBxS,UAAY+R,GAAUS,GACvF,CACA,QAAA5gV,CAAS4+S,GACP,MAAMkhC,EAAUC,GAAenhC,GACzBsgC,EAAiBp6W,KAAKggV,UAAUg7B,GACtC,OAAIZ,EACGA,EAAe9Q,SAET+R,GAAUjB,GACZlB,GAEAA,GAJAA,GAOJA,EACT,CACA,cAAA4B,CAAep9B,EAAUC,EAAQ48B,GAC/B,IAAItmU,EACAJ,EACJ,IAAK,IAAIt6D,EAAI,EAAGA,EAAIghY,EAAU/gY,OAAQD,IAAK,CAGzC,GAFA06D,EAAYsmU,EAAUr/V,MAAM3hC,GAAKymB,KAAKu5W,cACtC1lU,EAAU0mU,EAAUp/V,IAAI5hC,GAAKymB,KAAKu5W,cAC9B77B,GAAYzpS,GAAa0pS,GAAU9pS,EACrC,OAAO,EAET,GAAI8pS,GAAU1pS,EAEZ,OAAO,CAEX,CACA,OAAO,CACT,CACA,YAAA6lU,CAAat1X,EAAOoF,GAClB,MAAM,KACJy1V,EAAI,KACJsd,GACE/yW,EAGJ,GAAgB,gBAAZy1V,EAAK9B,IAAwB8B,EAAKpB,YACpC,OAIF,MAAMn6H,EAAS64I,EAAO,KAAO/yW,EACvBoxX,EAAUC,GAAe57B,GAC/Br/U,KAAKggV,UAAUg7B,GAAW,CACxBniX,KAAMwmV,EACN66B,YAAa,KACbp2J,SACAwlJ,UAAU,EACV5pP,MAAO3lI,OAAO6yB,OAAO,MAEzB,CACA,gBAAA8sW,CAAiBl1X,EAAOoF,GACtB,MAAM,KACJy1V,EAAI,KACJsd,EAAI,WACJ2c,GACE1vX,EACJ,GAAgB,gBAAZy1V,EAAK9B,GACP,OAEF,MAAMi9B,EAAen7B,EAAKrhW,KAC1B,GAAI2+W,EAAM,CACR,IAAIqd,EAAch6W,KAAKo5W,gBAAgBoB,GAClCR,IACHh6W,KAAKo5W,gBAAgBoB,GAAgBR,EAAc,IAErDA,EAAY3+X,KAAKshX,EACnB,CAEA38V,KAAKs5W,WAAaA,EAClBv/X,OAAOiC,KAAKs9X,GAAY12X,SAAQ03X,IAC9B,MAAMC,EAAYjB,EAAWgB,GAC7Bt6W,KAAKq6W,uBAAuBC,EAAkBC,EAAWC,EAAc7d,EAAK,GAEhF,CACA,cAAAid,CAAep1X,EAAOoF,GACpBoW,KAAK+6W,uBAAuBnxX,EAC9B,CACA,WAAAmyX,CAAYjiC,GACV,MAAMkhC,EAAUC,GAAenhC,GAC/B,QAAS95U,KAAKggV,UAAUg7B,EAC1B,CACA,QAAAgB,CAASh+X,GACP,IAAIi+X,EACJ,QAAkE,OAAvDA,EAAwBj8W,KAAKo5W,gBAAgBp7X,MAAkBi+X,EAAsBziY,OAClG,CACA,sBAAA0iY,CAAuBhhW,EAAOC,EAAKq/V,EAAc2B,EAAaC,GACxDD,IAAgBn8W,KAAKw5W,SAGzBz/X,OAAOiC,KAAKgkB,KAAKggV,WAAWp9V,SAAQ1I,IAClC,MAAMkgY,EAAiBp6W,KAAKggV,UAAU9lW,GACtC,IAAKkgY,EACH,OAEF,MAAM/6B,EAAO+6B,EAAevhX,KACxBwmV,EAAKrhW,OAASw8X,GAAgB2B,IAAgB98B,EAAKv1N,KAGnDu1N,EAAKnkU,MAAQC,GAAOkkU,EAAKlkU,IAAMD,IAAUk/V,EAAe9Q,UAAY8S,IACtEp8W,KAAK26W,eAAet7B,EACtB,GAEJ,CACA,cAAAs7B,CAAe7gC,GACb,MAAMkhC,EAAUC,GAAenhC,GAC/BA,EAASlvC,MAAM9mF,OAAS,EACxBg2H,EAASoF,4BACT,MAAM86B,EAAch6W,KAAKo5W,gBAAgBt/B,EAAS97V,MAClD,GAAIg8X,EAAa,CACf,MAAMqC,EAAaviC,EAASyD,GAC5Bv9U,KAAKo5W,gBAAgBt/B,EAAS97V,MAAQg8X,EAAYh2W,QAAO24V,GAAQA,EAAK7iB,SAASyD,KAAO8+B,GACxF,QACOr8W,KAAKggV,UAAUg7B,GAClBlhC,EAASqE,gBACJn+U,KAAKq5W,iBAAiBv/B,EAAS97V,KAE1C,CACA,kBAAAs+X,GACEt8W,KAAKggV,UAAYjmW,OAAO6yB,OAAO,MAC/B5M,KAAKq5W,iBAAmBt/X,OAAO6yB,OAAO,MACtC5M,KAAKo5W,gBAAkBr/X,OAAO6yB,OAAO,MACrC5M,KAAKw5W,SAAU,CACjB,EAEF,SAAS6B,GAAUjB,GACjB,IAAImC,EAAuBC,EAAwBC,EACnD,OAAOrC,EAAe9Q,WAAa8Q,EAAevhX,KAAKixH,MAAgE,OAAvDyyP,EAAwBnC,EAAe16P,MAAMghG,YAAiB,EAAS67J,EAAsBv9P,WAAsE,OAAxDw9P,EAAyBpC,EAAe16P,MAAM/9C,YAAiB,EAAS66S,EAAuBx9P,WAA2E,OAA7Dy9P,EAAyBrC,EAAe16P,MAAM8/N,iBAAsB,EAASi9B,EAAuBz9P,SAC9X,CACA,SAASi8P,GAAenhC,GACtB,MAAO,GAAGA,EAAS97V,QAAQ87V,EAAS52G,SAAS42G,EAASyD,IACxD,CAUA,MAAMm/B,GAAe,CACnBljY,OAAQ,EACR0hC,MAAO,IAAM,EACbC,IAAK,IAAM,GAEb,MAAMwhW,GAIJ,iBAAOC,CAAW7nJ,EAAOvmJ,GACvB,IACE,GAAIumJ,EAAO,CACT,MAAMu0I,EAAWqT,GAAaE,YAAY9nJ,GAC1C,IAAK,IAAIx7O,EAAI,EAAGA,EAAI+vX,EAAS9vX,OAAQD,IACnC,GAAIi1F,GAAY86R,EAASpuV,MAAM3hC,IAAMi1F,GAAY86R,EAASnuV,IAAI5hC,GAC5D,OAAO,CAGb,CACF,CAAE,MAAOmK,GAIT,CACA,OAAO,CACT,CACA,iBAAOyuX,CAAWp9I,EAAOrvM,EAAKo3V,GAC5B,IACE,GAAI/nJ,EAAO,CACT,MAAMgoJ,EAAYJ,GAAaE,YAAY9nJ,GACrCu0I,EAAW,GACjB,IAAI/vX,EACJ,IAAKA,EAAI,EAAGA,EAAIwjY,EAAUvjY,OAAQD,IAChC+vX,EAASjuX,KAAK,CACZ6/B,MAAO6hW,EAAU7hW,MAAM3hC,GACvB4hC,IAAK4hW,EAAU5hW,IAAI5hC,KAGvB,OAAOymB,KAAKg9W,aAAa1T,EAAU5jV,EAAKo3V,EAC1C,CACF,CAAE,MAAOp5X,GAIT,CACA,MAAO,CACLmY,IAAK,EACLqf,MAAOwK,EACPvK,IAAKuK,EACLu3V,eAAWrkX,EAEf,CACA,mBAAOokX,CAAa1T,EAAU5jV,EAAKo3V,GACjCp3V,EAAM/V,KAAKhT,IAAI,EAAG+oB,GAElB4jV,EAAS/pU,MAAK,SAAU5kD,EAAGu3B,GACzB,MAAMq3B,EAAO5uD,EAAEugC,MAAQhJ,EAAEgJ,MACzB,OAAIquB,GAGKr3B,EAAEiJ,IAAMxgC,EAAEwgC,GAErB,IACA,IAAI+hW,EAAY,GAChB,GAAIJ,EAIF,IAAK,IAAIvjY,EAAI,EAAGA,EAAI+vX,EAAS9vX,OAAQD,IAAK,CACxC,MAAM4jY,EAAUD,EAAU1jY,OAC1B,GAAI2jY,EAAS,CACX,MAAMC,EAAUF,EAAUC,EAAU,GAAGhiW,IAEnCmuV,EAAS/vX,GAAG2hC,MAAQkiW,EAAUN,EAK5BxT,EAAS/vX,GAAG4hC,IAAMiiW,IACpBF,EAAUC,EAAU,GAAGhiW,IAAMmuV,EAAS/vX,GAAG4hC,KAI3C+hW,EAAU7hY,KAAKiuX,EAAS/vX,GAE5B,MAEE2jY,EAAU7hY,KAAKiuX,EAAS/vX,GAE5B,MAEA2jY,EAAY5T,EAEd,IAGI+T,EAHAC,EAAY,EAMZC,EAAc73V,EACdoqV,EAAYpqV,EAChB,IAAK,IAAInsC,EAAI,EAAGA,EAAI2jY,EAAU1jY,OAAQD,IAAK,CACzC,MAAM2hC,EAAQgiW,EAAU3jY,GAAG2hC,MACrBC,EAAM+hW,EAAU3jY,GAAG4hC,IAEzB,GAAIuK,EAAMo3V,GAAmB5hW,GAASwK,EAAMvK,EAE1CoiW,EAAcriW,EACd40V,EAAY30V,EACZmiW,EAAYxN,EAAYpqV,OACnB,GAAIA,EAAMo3V,EAAkB5hW,EAAO,CACxCmiW,EAAkBniW,EAClB,KACF,CACF,CACA,MAAO,CACLrf,IAAKyhX,EACLpiW,MAAOqiW,GAAe,EACtBpiW,IAAK20V,GAAa,EAClBmN,UAAWI,EAEf,CAMA,kBAAOR,CAAY9nJ,GACjB,IACE,OAAOA,EAAMu0I,QACf,CAAE,MAAOhvX,GAEP,OADA2kB,EAAOuB,IAAI,+BAAgClmB,GACpCoiY,EACT,CACF,EAGF,MAAMc,GACJ,WAAA37V,CAAYqhN,EAAOq6G,EAAI1xV,EAAI1J,EAAO,EAAGw6W,GAAO,EAAI39O,GAAU,GACxDh/G,KAAKkjO,WAAQ,EACbljO,KAAKu9U,QAAK,EACVv9U,KAAK28V,UAAO,EACZ38V,KAAKnU,QAAK,EACVmU,KAAK7d,UAAO,EACZ6d,KAAKg/G,aAAU,EACfh/G,KAAKy9W,YAeA,CACLviW,MAAO,EACPwiW,aAAc,EACdC,WAAY,EACZxiW,IAAK,GAlBLnb,KAAKu8U,UAAY,CACf56Q,MAaG,CACLzmD,MAAO,EACPwiW,aAAc,EACdC,WAAY,EACZxiW,IAAK,GAhBHulM,MAYG,CACLxlM,MAAO,EACPwiW,aAAc,EACdC,WAAY,EACZxiW,IAAK,GAfHqkU,WAWG,CACLtkU,MAAO,EACPwiW,aAAc,EACdC,WAAY,EACZxiW,IAAK,IAbLnb,KAAKkjO,MAAQA,EACbljO,KAAKu9U,GAAKA,EACVv9U,KAAKnU,GAAKA,EACVmU,KAAK7d,KAAOA,EACZ6d,KAAK28V,KAAOA,EACZ38V,KAAKg/G,QAAUA,CACjB,EAWF,SAAS4+P,GAAoB59B,EAAWp9O,GACtC,IAAK,IAAIrpH,EAAI,EAAGsiB,EAAMmkV,EAAUxmW,OAAQD,EAAIsiB,EAAKtiB,IAAK,CACpD,IAAIskY,EACJ,IAAsC,OAAhCA,EAAe79B,EAAUzmW,SAAc,EAASskY,EAAaj7Q,MAAQA,EACzE,OAAOo9O,EAAUzmW,EAErB,CACA,OAAO,IACT,CAyBA,SAASukY,GAAoBz+B,EAAM0+B,GACjC,GAAI1+B,EAAM,CACR,MAAMnkU,EAAQmkU,EAAKnkU,MAAQ6iW,EAC3B1+B,EAAKnkU,MAAQmkU,EAAK3B,SAAWxiU,EAC7BmkU,EAAK1B,OAASziU,EAAQmkU,EAAK30V,QAC7B,CACF,CACA,SAASszX,GAAmBD,EAASjd,GAEnC,MAAM9gB,EAAY8gB,EAAQ9gB,UAC1B,IAAK,IAAIzmW,EAAI,EAAGsiB,EAAMmkV,EAAUxmW,OAAQD,EAAIsiB,EAAKtiB,IAC/CukY,GAAoB99B,EAAUzmW,GAAIwkY,GAGhCjd,EAAQ7gB,cACV69B,GAAoBhd,EAAQ7gB,aAAc89B,GAE5Cjd,EAAQlhB,gBAAiB,CAC3B,CAYA,SAASq+B,GAAYC,EAAUC,EAAerd,GACvCqd,KAyBP,SAA8BD,EAAUpd,EAASqd,GAC/C,GAjFF,SAAsCD,EAAUC,EAAerd,GAC7D,SAAIqd,KACErd,EAAQhhB,MAAQghB,EAAQpgB,SAAWw9B,GAAYA,EAASt7Q,GAAKk+P,EAAQpgB,SAK7E,CA0EM09B,CAA6BF,EAAUC,EAAerd,GAAU,CAClE,MAAMud,EAxEV,SAAwCC,EAAaC,GACnD,MAAMC,EAAYF,EAAYt+B,UACxBy+B,EAAWF,EAAWv+B,UAC5B,IAAKy+B,EAASjlY,SAAWglY,EAAUhlY,OAEjC,YADAylB,EAAOuB,IAAI,yBAGb,MAAMk+W,EAAgBd,GAAoBY,EAAWC,EAAS,GAAG77Q,IACjE,GAAK87Q,KAAiBA,GAAkBA,EAAchhC,UAItD,OAAOghC,EAHLz/W,EAAOuB,IAAI,wCAIf,CA2D0Bm+W,CAA+BR,EAAerd,GAChEud,GAAiBnkC,EAAemkC,EAAcnjW,SAChDjc,EAAOuB,IAAI,0EAA0EsgW,EAAQ/rV,OAC7FipW,GAAmBK,EAAcnjW,MAAO4lV,GAE5C,CACF,CA9BE8d,CAAqBV,EAAUpd,EAASqd,IACnCrd,EAAQlhB,gBAAkBu+B,GAI7BU,GAAwB/d,EAASqd,GAE9Brd,EAAQlhB,iBAAkBu+B,GAAkBrd,EAAQ3f,iBAIvD6sB,GAAcmQ,EAAerd,GAEjC,CAgCA,SAAS+d,GAAwB/d,EAASge,GACxC,IAAKhe,EAAQre,qBAAuBq8B,EAAWr8B,mBAC7C,OAEF,MAAMzC,EAAY8gB,EAAQ9gB,UACpB++B,EAAeD,EAAW9+B,UAChC,IAAKA,EAAUxmW,SAAWulY,EAAavlY,OACrC,OAMF,IAAIwlY,EACA3/B,EACJ,MAAM4/B,EAAWtvW,KAAKjT,IAAIoiX,EAAWh/B,MAAOghB,EAAQhhB,OAChDg/B,EAAWp+B,QAAUu+B,GAAYne,EAAQpgB,QAAUu+B,IACrDD,EAAUpB,GAAoBmB,EAAcE,GAC5C5/B,EAAOu+B,GAAoB59B,EAAWi/B,IAEnCD,GAAY3/B,IACf2/B,EAAUD,EAAapvW,KAAKq2B,MAAM+4U,EAAavlY,OAAS,IACxD6lW,EAAOu+B,GAAoB59B,EAAWg/B,EAAQp8Q,KAAOo9O,EAAUrwU,KAAKq2B,MAAMg6S,EAAUxmW,OAAS,KAE/F,MAAM0lY,EAASF,EAAQ3hC,gBACjB8hC,EAAY9/B,EAAKhC,gBACvB,IAAK6hC,IAAWC,EACd,OAGFnB,IADemB,EAAYD,GAAU,KAAQ7/B,EAAKnkU,MAAQ8jW,EAAQ9jW,OACxC4lV,EAC5B,CAEA,MAAMse,GAAiBzvW,KAAKC,IAAI,EAAG,IAEnC,MAAMyvW,GACJ,WAAAx9V,CAAYjP,GACV5S,KAAK4S,YAAS,EACd5S,KAAK++O,OAAS,KACd/+O,KAAKs/W,iBAAmB,EACxBt/W,KAAK4S,OAASA,CAChB,CACA,OAAAo4H,GACMhrI,KAAK++O,SACP/+O,KAAK++O,OAAO/zG,UACZhrI,KAAK++O,OAAS,KAElB,CACA,KAAA/jN,GACMh7B,KAAK++O,QAEP/+O,KAAK++O,OAAO/jN,OAEhB,CACA,IAAAz7B,CAAK8/U,EAAMkgC,GACT,MAAMxqW,EAAMsqU,EAAKtqU,IACjB,IAAKA,EACH,OAAOoK,QAAQE,OAAO,IAAImgW,GAAU,CAClCxhY,KAAMm8V,EAAW0oB,cACjB/B,QAAS1mB,EAAaqlC,gBACtBllF,OAAO,EACP8kD,OACA37V,MAAO,IAAIggB,MAAM,6BAA4BqR,EAAM,YAAc,QACjE+sV,eAAgB,QAGpB9hW,KAAKg7B,QACL,MAAMpoB,EAAS5S,KAAK4S,OACd8sW,EAAkB9sW,EAAO+sW,QACzBC,EAAiBhtW,EAAOmsO,OAC9B,OAAO,IAAI5/N,SAAQ,CAACC,EAASC,KAI3B,GAHIrf,KAAK++O,QACP/+O,KAAK++O,OAAO/zG,UAEVq0M,EAAKv1N,IAAK,CACZ,GAAIu1N,EAAK/B,QAAQtkT,MAAKwyL,GAAoB,QAAZA,EAAK,KAEjC,YADAnsM,EAAOwgW,GAAmBxgC,IAI1BA,EAAKv1N,KAAM,CAEf,CACA,MAAMi1H,EAAS/+O,KAAK++O,OAASsgG,EAAKtgG,OAAS2gI,EAAkB,IAAIA,EAAgB9sW,GAAU,IAAIgtW,EAAehtW,GACxG4tV,EAAgBsf,GAAoBzgC,GACpCkhB,EAAayO,GAA6Bp8V,EAAOmtW,eAAex6U,SAChE+7T,EAAe,CACnBf,aACA/jU,QAAS+jU,EAAWa,cACpBG,SAAU,EACVtkM,WAAY,EACZykM,cAAe,EACfse,cAA2B,gBAAZ3gC,EAAK9B,GAAuB3gV,IAAWwiX,IAGxD//B,EAAKz0C,MAAQ7rD,EAAO6rD,MACpB7rD,EAAOx/O,KAAKihW,EAAec,EAAc,CACvCO,UAAW,CAACrjV,EAAUosR,EAAO9rS,EAASgjW,KACpC9hW,KAAKigX,YAAY5gC,EAAMtgG,GACvB,IAAIpqO,EAAU6J,EAAS50B,KACnBkV,EAAQohX,SAAW7gC,EAAKhB,cAC1BgB,EAAKhB,YAAYh8L,GAAK,IAAIr1D,WAAWr4E,EAAQpxB,MAAM,EAAG,KACtDoxB,EAAUA,EAAQpxB,MAAM,KAE1B67B,EAAQ,CACNigU,OACAsd,KAAM,KACNhoV,UACAmtV,kBACA,EAEJ7jW,QAAS,CAACugB,EAAU1f,EAASgjW,EAAgBl3D,KAC3C5qS,KAAKigX,YAAY5gC,EAAMtgG,GACvB1/N,EAAO,IAAImgW,GAAU,CACnBxhY,KAAMm8V,EAAW0oB,cACjB/B,QAAS1mB,EAAaqlC,gBACtBllF,OAAO,EACP8kD,OACA7gU,SAAUqxJ,EAAe,CACvB96J,MACAnrB,UAAMgP,GACL4lB,GACH96B,MAAO,IAAIggB,MAAM,cAAc8a,EAASpS,QAAQoS,EAASv6B,QACzD69W,iBACAl3D,UACC,EAELnzB,QAAS,CAACmzB,EAAO9rS,EAASgjW,KACxB9hW,KAAKigX,YAAY5gC,EAAMtgG,GACvB1/N,EAAO,IAAImgW,GAAU,CACnBxhY,KAAMm8V,EAAW0oB,cACjB/B,QAAS1mB,EAAa+lC,iBACtB5lF,OAAO,EACP8kD,OACA37V,MAAO,IAAIggB,MAAM,WACjBo+V,iBACAl3D,UACC,EAELu3D,UAAW,CAACv3D,EAAO9rS,EAASgjW,KAC1B9hW,KAAKigX,YAAY5gC,EAAMtgG,GACvB1/N,EAAO,IAAImgW,GAAU,CACnBxhY,KAAMm8V,EAAW0oB,cACjB/B,QAAS1mB,EAAao0B,kBACtBj0E,OAAO,EACP8kD,OACA37V,MAAO,IAAIggB,MAAM,iBAAiB49V,EAAa9kU,aAC/CslU,iBACAl3D,UACC,EAEL20E,WAAY,CAAC30E,EAAO9rS,EAASlV,EAAMk4W,KAC7Byd,GACFA,EAAW,CACTlgC,OACAsd,KAAM,KACNhoV,QAAS/qB,EACTk4W,kBAEJ,GAEF,GAEN,CACA,QAAAse,CAAS/gC,EAAMsd,EAAM4iB,GACnBv/W,KAAKg7B,QACL,MAAMpoB,EAAS5S,KAAK4S,OACd8sW,EAAkB9sW,EAAO+sW,QACzBC,EAAiBhtW,EAAOmsO,OAC9B,OAAO,IAAI5/N,SAAQ,CAACC,EAASC,KAI3B,GAHIrf,KAAK++O,QACP/+O,KAAK++O,OAAO/zG,UAEVq0M,EAAKv1N,KAAO6yO,EAAK7yO,IAEnB,YADAzqG,EAAOwgW,GAAmBxgC,EAAMsd,IAGlC,MAAM59G,EAAS/+O,KAAK++O,OAASsgG,EAAKtgG,OAAS2gI,EAAkB,IAAIA,EAAgB9sW,GAAU,IAAIgtW,EAAehtW,GACxG4tV,EAAgBsf,GAAoBzgC,EAAMsd,GAE1C4D,EAAayO,GAA6Bp8V,EAAOmtW,eAAex6U,SAChE+7T,EAAe,CACnBf,aACA/jU,QAAS+jU,EAAWa,cACpBG,SAAU,EACVtkM,WAAY,EACZykM,cAAe,EACfse,cAAeZ,IAGjBziB,EAAK/xD,MAAQ7rD,EAAO6rD,MACpB7rD,EAAOx/O,KAAKihW,EAAec,EAAc,CACvCO,UAAW,CAACrjV,EAAUosR,EAAO9rS,EAASgjW,KACpC9hW,KAAKigX,YAAY5gC,EAAMtgG,GACvB/+O,KAAKqgX,oBAAoBhhC,EAAMsd,GAC/B,MAAM2jB,EAAiB,CACrBjhC,OACAsd,OACAhoV,QAAS6J,EAAS50B,KAClBk4W,kBAEFyd,EAAWe,GACXlhW,EAAQkhW,EAAe,EAEzBriX,QAAS,CAACugB,EAAU1f,EAASgjW,EAAgBl3D,KAC3C5qS,KAAKigX,YAAY5gC,EAAMtgG,GACvB1/N,EAAO,IAAImgW,GAAU,CACnBxhY,KAAMm8V,EAAW0oB,cACjB/B,QAAS1mB,EAAaqlC,gBACtBllF,OAAO,EACP8kD,OACAsd,OACAn+U,SAAUqxJ,EAAe,CACvB96J,IAAKyrV,EAAczrV,IACnBnrB,UAAMgP,GACL4lB,GACH96B,MAAO,IAAIggB,MAAM,cAAc8a,EAASpS,QAAQoS,EAASv6B,QACzD69W,iBACAl3D,UACC,EAELnzB,QAAS,CAACmzB,EAAO9rS,EAASgjW,KACxBziB,EAAKz0C,MAAMrwQ,QAAUoiU,EAAK/xD,MAAMrwQ,QAChCv6B,KAAKigX,YAAY5gC,EAAMtgG,GACvB1/N,EAAO,IAAImgW,GAAU,CACnBxhY,KAAMm8V,EAAW0oB,cACjB/B,QAAS1mB,EAAa+lC,iBACtB5lF,OAAO,EACP8kD,OACAsd,OACAj5W,MAAO,IAAIggB,MAAM,WACjBo+V,iBACAl3D,UACC,EAELu3D,UAAW,CAACv3D,EAAO9rS,EAASgjW,KAC1B9hW,KAAKigX,YAAY5gC,EAAMtgG,GACvB1/N,EAAO,IAAImgW,GAAU,CACnBxhY,KAAMm8V,EAAW0oB,cACjB/B,QAAS1mB,EAAao0B,kBACtBj0E,OAAO,EACP8kD,OACAsd,OACAj5W,MAAO,IAAIggB,MAAM,iBAAiB49V,EAAa9kU,aAC/CslU,iBACAl3D,UACC,GAEL,GAEN,CACA,mBAAAy1E,CAAoBhhC,EAAMsd,GACxB,MAAM4jB,EAAYlhC,EAAKz0C,MACjB41E,EAAY7jB,EAAK/xD,MACjB61E,EAAYD,EAAUl2X,MAE5B,GADAi2X,EAAUz8J,QAAU08J,EAAU18J,OAC1B28J,EAAW,CACb,MAAMC,EAAgB/wW,KAAKy2B,MAAMi5S,EAAK30V,SAAWiyW,EAAKjyW,UAChDi2X,EAAiBhxW,KAAKjT,IAAIiT,KAAKy2B,MAAMm6U,EAAUz8J,OAAS28J,GAAYC,GAEpEE,GADoBF,EAAgBC,GACIhxW,KAAKy2B,MAAMm6U,EAAUz8J,OAAS68J,GAC5EJ,EAAUj2X,MAAQi2X,EAAUz8J,OAAS88J,CACvC,MACEL,EAAUj2X,MAAQqlB,KAAKhT,IAAI4jX,EAAUz8J,OAAQy8J,EAAUj2X,OAEzD,MAAMu2X,EAAcN,EAAU9jY,QACxBqkY,EAAcN,EAAU/jY,QAC1BokY,EAAY3lW,MAEd2lW,EAAY//U,OAASggV,EAAYhgV,MAAQggV,EAAY5lW,OAErD2lW,EAAY3lW,MAAQ4lW,EAAY5lW,MAChC2lW,EAAY//U,MAAQggV,EAAYhgV,OAElC+/U,EAAY1lW,IAAM2lW,EAAY3lW,GAChC,CACA,WAAA8kW,CAAY5gC,EAAMtgG,GAChBsgG,EAAKtgG,OAAS,KACV/+O,KAAK++O,SAAWA,IAClB/vO,KAAKsiE,aAAatxE,KAAKs/W,iBACvBt/W,KAAK++O,OAAS,MAEhBA,EAAO/zG,SACT,EAEF,SAAS80O,GAAoBzgC,EAAMsd,EAAO,MACxC,MAAM96T,EAAU86T,GAAQtd,EAClBmhB,EAAgB,CACpBnhB,OACAsd,OACA73I,aAAc,cACd/vM,IAAK8sB,EAAQ9sB,IACbiiH,QAAS,CAAC,EACV+pP,WAAY,EACZpwT,SAAU,GAENz1C,EAAQ2mB,EAAQq7S,qBAChB/hU,EAAM0mB,EAAQm7S,mBACpB,GAAI9C,EAAeh/T,IAAUg/T,EAAe/+T,GAAM,CAChD,IAAI6lW,EACJ,IAAIC,EAAiB/lW,EACjBgmW,EAAe/lW,EACnB,GAAgB,gBAAZkkU,EAAK9B,IAAiH,aAA9C,OAAzCyjC,EAAoB3hC,EAAKhB,kBAAuB,EAAS2iC,EAAkB9hX,QAAuB,CAInI,MAAMiiX,EAAchmW,EAAMD,EACtBimW,EAAc,KAChBD,EAAe/lW,GAAO,GAAKgmW,EAAc,KAE7B,IAAVjmW,IACFslV,EAAc0f,SAAU,EACxBe,EAAiB/lW,EAAQ,GAE7B,CACAslV,EAAcugB,WAAaE,EAC3BzgB,EAAc7vS,SAAWuwT,CAC3B,CACA,OAAO1gB,CACT,CACA,SAASqf,GAAmBxgC,EAAMsd,GAChC,MAAMj5W,EAAQ,IAAIggB,MAAM,OAAO27U,EAAKv1N,IAAM,MAAQ,qBAC5Co9B,EAAY,CAChBlpK,KAAMm8V,EAAWinC,YACjBtgB,QAAS1mB,EAAainC,SACtB9mF,OAAO,EACP8kD,OACA37V,QACAo+W,eAAgB,MAMlB,OAJInF,IACFz1M,EAAUy1M,KAAOA,IAElBA,GAActd,GAAMz0C,MAAMrwQ,SAAU,EAC9B,IAAIilV,GAAUt4N,EACvB,CACA,MAAMs4N,WAAkB97W,MACtB,WAAAme,CAAYj4B,GACVw8B,MAAMx8B,EAAKlG,MAAMmF,SACjBmX,KAAKpW,UAAO,EACZoW,KAAKpW,KAAOA,CACd,EAGF,MAAM03X,GACJ,WAAAz/V,CAAYiiI,EAAQzB,GAClBriJ,KAAK8jJ,YAAS,EACd9jJ,KAAKuhX,WAAQ,EACbvhX,KAAK8jJ,OAASA,EACd9jJ,KAAKuhX,MAAQl/N,CACf,CACA,OAAAhB,CAAQz3J,EAAM1P,GACZ,OAAO8lB,KAAK8jJ,OAAOzC,QAAQ,CACzBz8J,KAAM,UACNy9J,GAAIriJ,KAAKuhX,OACRrnY,EAAK0P,EACV,EAGF,MAAM43X,GACJ,WAAA3/V,CAAYiiI,EAAQ5pK,GAClB8lB,KAAK8jJ,YAAS,EACd9jJ,KAAK9lB,SAAM,EACX8lB,KAAK8jJ,OAASA,EACd9jJ,KAAK9lB,IAAMA,CACb,CACA,SAAAunY,GACE,OAAOzhX,KAAK8jJ,OAAOM,UAAU,MAAOpkJ,KAAK9lB,IAAK,CAC5C0K,KAAM,YACL,EAAO,CAAC,UAAW,WACxB,EAYF,MAAM88X,GACJ,WAAA7/V,GACE7hB,KAAK2hX,KAAO,CAAC,EAAK,EAAK,EAAK,EAAK,EAAK,GAAM,GAAM,GAAM,IAAM,GAAM,IACpE3hX,KAAK4hX,OAAS,CAAC,IAAIC,YAAY,KAAM,IAAIA,YAAY,KAAM,IAAIA,YAAY,KAAM,IAAIA,YAAY,MACjG7hX,KAAK8hX,UAAY,CAAC,IAAID,YAAY,KAAM,IAAIA,YAAY,KAAM,IAAIA,YAAY,KAAM,IAAIA,YAAY,MACpG7hX,KAAK+hX,KAAO,IAAIF,YAAY,KAC5B7hX,KAAKgiX,QAAU,IAAIH,YAAY,KAC/B7hX,KAAK9lB,IAAM,IAAI2nY,YAAY,GAC3B7hX,KAAKiiX,OAAS,EACdjiX,KAAKygJ,QAAU,EACfzgJ,KAAKkiX,iBAAc,EACnBliX,KAAKmiX,oBAAiB,EACtBniX,KAAKoiX,WACP,CAGA,wBAAAC,CAAyB5wR,GACvB,MAAMmpG,EAAO,IAAIxvG,SAASqG,GACpB6wR,EAAW,IAAIT,YAAY,GACjC,IAAK,IAAItoY,EAAI,EAAGA,EAAI,EAAGA,IACrB+oY,EAAS/oY,GAAKqhN,EAAKjgD,UAAc,EAAJphK,GAE/B,OAAO+oY,CACT,CACA,SAAAF,GACE,MAAML,EAAO/hX,KAAK+hX,KACZC,EAAUhiX,KAAKgiX,QACfJ,EAAS5hX,KAAK4hX,OACdW,EAAUX,EAAO,GACjBY,EAAUZ,EAAO,GACjBa,EAAUb,EAAO,GACjBc,EAAUd,EAAO,GACjBE,EAAY9hX,KAAK8hX,UACjBa,EAAab,EAAU,GACvBc,EAAad,EAAU,GACvBe,EAAaf,EAAU,GACvBgB,EAAahB,EAAU,GACvBhnY,EAAI,IAAI+mY,YAAY,KAC1B,IAAI5lX,EAAI,EACJm0G,EAAK,EACL72H,EAAI,EACR,IAAKA,EAAI,EAAGA,EAAI,IAAKA,IAEjBuB,EAAEvB,GADAA,EAAI,IACCA,GAAK,EAELA,GAAK,EAAI,IAGpB,IAAKA,EAAI,EAAGA,EAAI,IAAKA,IAAK,CACxB,IAAIwpY,EAAK3yQ,EAAKA,GAAM,EAAIA,GAAM,EAAIA,GAAM,EAAIA,GAAM,EAClD2yQ,EAAKA,IAAO,EAAS,IAALA,EAAY,GAC5BhB,EAAK9lX,GAAK8mX,EACVf,EAAQe,GAAM9mX,EAGd,MAAMslO,EAAKzmP,EAAEmhB,GACP+mX,EAAKloY,EAAEymP,GACP0hJ,EAAKnoY,EAAEkoY,GAGb,IAAIzoY,EAAY,IAARO,EAAEioY,GAAmB,SAALA,EACxBR,EAAQtmX,GAAK1hB,GAAK,GAAKA,IAAM,EAC7BioY,EAAQvmX,GAAK1hB,GAAK,GAAKA,IAAM,GAC7BkoY,EAAQxmX,GAAK1hB,GAAK,EAAIA,IAAM,GAC5BmoY,EAAQzmX,GAAK1hB,EAGbA,EAAS,SAAL0oY,EAAsB,MAALD,EAAoB,IAALzhJ,EAAiB,SAAJtlO,EACjD0mX,EAAWI,GAAMxoY,GAAK,GAAKA,IAAM,EACjCqoY,EAAWG,GAAMxoY,GAAK,GAAKA,IAAM,GACjCsoY,EAAWE,GAAMxoY,GAAK,EAAIA,IAAM,GAChCuoY,EAAWC,GAAMxoY,EAGZ0hB,GAGHA,EAAIslO,EAAKzmP,EAAEA,EAAEA,EAAEmoY,EAAK1hJ,KACpBnxH,GAAMt1H,EAAEA,EAAEs1H,KAHVn0G,EAAIm0G,EAAK,CAKb,CACF,CACA,SAAAqxQ,CAAUyB,GAER,MAAMhpY,EAAM8lB,KAAKqiX,yBAAyBa,GAC1C,IAAIC,GAAU,EACVr1V,EAAS,EACb,KAAOA,EAAS5zC,EAAIV,QAAU2pY,GAC5BA,EAAUjpY,EAAI4zC,KAAY9tB,KAAK9lB,IAAI4zC,GACnCA,IAEF,GAAIq1V,EACF,OAEFnjX,KAAK9lB,IAAMA,EACX,MAAMumK,EAAUzgJ,KAAKygJ,QAAUvmK,EAAIV,OACnC,GAAgB,IAAZinK,GAA6B,IAAZA,GAA6B,IAAZA,EACpC,MAAM,IAAI/8I,MAAM,wBAA0B+8I,GAE5C,MAAMwhO,EAASjiX,KAAKiiX,OAA6B,GAAnBxhO,EAAU,EAAI,GAC5C,IAAI2iO,EACAC,EACJ,MAAMnB,EAAcliX,KAAKkiX,YAAc,IAAIL,YAAYI,GACjDE,EAAiBniX,KAAKmiX,eAAiB,IAAIN,YAAYI,GACvDqB,EAAOtjX,KAAK+hX,KACZJ,EAAO3hX,KAAK2hX,KACZG,EAAY9hX,KAAK8hX,UACjBa,EAAab,EAAU,GACvBc,EAAad,EAAU,GACvBe,EAAaf,EAAU,GACvBgB,EAAahB,EAAU,GAC7B,IAAItnW,EACAjgC,EACJ,IAAK6oY,EAAQ,EAAGA,EAAQnB,EAAQmB,IAC1BA,EAAQ3iO,EACVjmI,EAAO0nW,EAAYkB,GAASlpY,EAAIkpY,IAGlC7oY,EAAIigC,EACA4oW,EAAQ3iO,IAAY,GAEtBlmK,EAAIA,GAAK,EAAIA,IAAM,GAGnBA,EAAI+oY,EAAK/oY,IAAM,KAAO,GAAK+oY,EAAK/oY,IAAM,GAAK,MAAS,GAAK+oY,EAAK/oY,IAAM,EAAI,MAAS,EAAI+oY,EAAS,IAAJ/oY,GAG1FA,GAAKonY,EAAKyB,EAAQ3iO,EAAU,IAAM,IACzBA,EAAU,GAAK2iO,EAAQ3iO,IAAY,IAE5ClmK,EAAI+oY,EAAK/oY,IAAM,KAAO,GAAK+oY,EAAK/oY,IAAM,GAAK,MAAS,GAAK+oY,EAAK/oY,IAAM,EAAI,MAAS,EAAI+oY,EAAS,IAAJ/oY,IAE5F2nY,EAAYkB,GAAS5oW,GAAQ0nW,EAAYkB,EAAQ3iO,GAAWlmK,KAAO,GAErE,IAAK8oY,EAAW,EAAGA,EAAWpB,EAAQoB,IACpCD,EAAQnB,EAASoB,EAEf9oY,EADa,EAAX8oY,EACEnB,EAAYkB,GAEZlB,EAAYkB,EAAQ,GAGxBjB,EAAekB,GADbA,EAAW,GAAKD,GAAS,EACA7oY,EAEAooY,EAAWW,EAAK/oY,IAAM,KAAOqoY,EAAWU,EAAK/oY,IAAM,GAAK,MAASsoY,EAAWS,EAAK/oY,IAAM,EAAI,MAASuoY,EAAWQ,EAAS,IAAJ/oY,IAEjJ4nY,EAAekB,GAAYlB,EAAekB,KAAc,CAE5D,CAGA,sBAAAE,CAAuBn7R,GACrB,OAAOA,GAAQ,IAAa,MAAPA,IAAkB,GAAY,SAAPA,IAAoB,EAAIA,IAAS,EAC/E,CACA,OAAAi5D,CAAQmiO,EAAkB11V,EAAQyzV,GAChC,MAAMkC,EAAUzjX,KAAKygJ,QAAU,EACzB0hO,EAAiBniX,KAAKmiX,eACtBuB,EAAU1jX,KAAKgiX,QACfF,EAAY9hX,KAAK8hX,UACjBa,EAAab,EAAU,GACvBc,EAAad,EAAU,GACvBe,EAAaf,EAAU,GACvBgB,EAAahB,EAAU,GACvB6B,EAAa3jX,KAAKqiX,yBAAyBd,GACjD,IAAIqC,EAAcD,EAAW,GACzBE,EAAcF,EAAW,GACzBG,EAAcH,EAAW,GACzBI,EAAcJ,EAAW,GAC7B,MAAMK,EAAa,IAAIC,WAAWT,GAC5BU,EAAc,IAAID,WAAWD,EAAWxqY,QAC9C,IAAI2qY,EAAIC,EAAIC,EAAIC,EACZC,EAAIxxC,EAAIC,EAAIwxC,EACZC,EAAaC,EAAaC,EAAaC,EACvCxB,EAAO7pY,EACX,MAAMsrY,EAAW7kX,KAAKujX,uBACtB,KAAOz1V,EAASk2V,EAAWxqY,QAAQ,CAYjC,IAXAirY,EAAcI,EAASb,EAAWl2V,IAClC42V,EAAcG,EAASb,EAAWl2V,EAAS,IAC3C62V,EAAcE,EAASb,EAAWl2V,EAAS,IAC3C82V,EAAcC,EAASb,EAAWl2V,EAAS,IAC3Cy2V,EAAKE,EAActC,EAAe,GAClCpvC,EAAK6xC,EAAczC,EAAe,GAClCnvC,EAAK2xC,EAAcxC,EAAe,GAClCqC,EAAKE,EAAcvC,EAAe,GAClCiB,EAAQ,EAGH7pY,EAAI,EAAGA,EAAIkqY,EAASlqY,IACvB4qY,EAAKxB,EAAW4B,IAAO,IAAM3B,EAAW7vC,GAAM,GAAK,KAAQ8vC,EAAW7vC,GAAM,EAAI,KAAQ8vC,EAAgB,IAAL0B,GAAarC,EAAeiB,GAC/HgB,EAAKzB,EAAW5vC,IAAO,IAAM6vC,EAAW5vC,GAAM,GAAK,KAAQ6vC,EAAW2B,GAAM,EAAI,KAAQ1B,EAAgB,IAALyB,GAAapC,EAAeiB,EAAQ,GACvIiB,EAAK1B,EAAW3vC,IAAO,IAAM4vC,EAAW4B,GAAM,GAAK,KAAQ3B,EAAW0B,GAAM,EAAI,KAAQzB,EAAgB,IAAL/vC,GAAaovC,EAAeiB,EAAQ,GACvIkB,EAAK3B,EAAW6B,IAAO,IAAM5B,EAAW2B,GAAM,GAAK,KAAQ1B,EAAW9vC,GAAM,EAAI,KAAQ+vC,EAAgB,IAAL9vC,GAAamvC,EAAeiB,EAAQ,GAEvImB,EAAKJ,EACLpxC,EAAKqxC,EACLpxC,EAAKqxC,EACLG,EAAKF,EACLlB,GAAgB,EAIlBe,EAAKT,EAAQa,IAAO,KAAO,GAAKb,EAAQ3wC,GAAM,GAAK,MAAS,GAAK2wC,EAAQ1wC,GAAM,EAAI,MAAS,EAAI0wC,EAAa,IAALc,GAAarC,EAAeiB,GACpIgB,EAAKV,EAAQ3wC,IAAO,KAAO,GAAK2wC,EAAQ1wC,GAAM,GAAK,MAAS,GAAK0wC,EAAQc,GAAM,EAAI,MAAS,EAAId,EAAa,IAALa,GAAapC,EAAeiB,EAAQ,GAC5IiB,EAAKX,EAAQ1wC,IAAO,KAAO,GAAK0wC,EAAQc,GAAM,GAAK,MAAS,GAAKd,EAAQa,GAAM,EAAI,MAAS,EAAIb,EAAa,IAAL3wC,GAAaovC,EAAeiB,EAAQ,GAC5IkB,EAAKZ,EAAQc,IAAO,KAAO,GAAKd,EAAQa,GAAM,GAAK,MAAS,GAAKb,EAAQ3wC,GAAM,EAAI,MAAS,EAAI2wC,EAAa,IAAL1wC,GAAamvC,EAAeiB,EAAQ,GAG5Ic,EAAYp2V,GAAU+2V,EAASV,EAAKP,GACpCM,EAAYp2V,EAAS,GAAK+2V,EAASP,EAAKT,GACxCK,EAAYp2V,EAAS,GAAK+2V,EAASR,EAAKP,GACxCI,EAAYp2V,EAAS,GAAK+2V,EAAST,EAAKL,GAGxCH,EAAca,EACdZ,EAAca,EACdZ,EAAca,EACdZ,EAAca,EACd92V,GAAkB,CACpB,CACA,OAAOo2V,EAAYnyR,MACrB,EAKF,MAAM+yR,GACJ,WAAAjjW,CAAYjP,GAAQ,mBAClBmyW,GAAqB,GACnB,CAAC,GAcH,GAbA/kX,KAAKglX,YAAa,EAClBhlX,KAAK+kX,wBAAqB,EAC1B/kX,KAAK8jJ,OAAS,KACd9jJ,KAAKilX,kBAAoB,KACzBjlX,KAAK9lB,IAAM,KACX8lB,KAAKklX,WAAa,KAClBllX,KAAKmlX,cAAgB,KACrBnlX,KAAKolX,UAAY,KACjBplX,KAAKqlX,cAAgB,KACrBrlX,KAAKslX,iBAAc,EACnBtlX,KAAKslX,YAAc1yW,EAAO2yW,kBAC1BvlX,KAAK+kX,mBAAqBA,EAEtBA,EACF,IACE,MAAMS,EAAgBx2W,KAAK60I,OACvB2hO,IACFxlX,KAAK8jJ,OAAS0hO,EAAc1hO,QAAU0hO,EAAcC,aAExD,CAAE,MAAOnrY,GAET,CAEF0lB,KAAKslX,aAAetlX,KAAK8jJ,MAC3B,CACA,OAAA9Y,GACEhrI,KAAK8jJ,OAAS,KACd9jJ,KAAKilX,kBAAoB,KACzBjlX,KAAK9lB,IAAM,KACX8lB,KAAKklX,WAAa,KAClBllX,KAAKmlX,cAAgB,KACrBnlX,KAAKolX,UAAY,KACjBplX,KAAKqlX,cAAgB,IACvB,CACA,MAAAK,GACE,OAAO1lX,KAAKslX,WACd,CACA,KAAAr6R,GACE,MAAM,cACJo6R,EAAa,cACbF,GACEnlX,KACJ,IAAKqlX,GAAiBF,EAEpB,OADAnlX,KAAKuW,QACE,KAET,MAAM3sB,EAAO,IAAIojG,WAAWq4R,GAE5B,OADArlX,KAAKuW,QACDvW,KAAK+kX,mBA7Rb,SAAuBviV,GACrB,MAAMmjV,EAAcnjV,EAAMkvD,WACpBk0R,EAAeD,GAAe,IAAIv6R,SAAS5oD,EAAMuvD,QAAQgpD,SAAS4qO,EAAc,GACtF,OAAIC,EACKvgC,GAAW7iT,EAAO,EAAGmjV,EAAcC,GAErCpjV,CACT,CAuRaqjV,CAAcj8X,GAEhBA,CACT,CACA,KAAA2sB,GACEvW,KAAKqlX,cAAgB,KACrBrlX,KAAKolX,UAAY,KACjBplX,KAAKmlX,cAAgB,KACjBnlX,KAAKilX,oBACPjlX,KAAKilX,kBAAoB,KAE7B,CACA,OAAA5jO,CAAQz3J,EAAM1P,EAAKmoK,GACjB,OAAIriJ,KAAKslX,YACA,IAAInmW,SAAQ,CAACC,EAASC,KAC3Brf,KAAK8lX,gBAAgB,IAAI94R,WAAWpjG,GAAO1P,EAAKmoK,GAChD,MAAM0jO,EAAgB/lX,KAAKirF,QACvB86R,EACF3mW,EAAQ2mW,EAAch0R,QAEtB1yE,EAAO,IAAI3b,MAAM,4CACnB,IAGG1D,KAAKgmX,iBAAiB,IAAIh5R,WAAWpjG,GAAO1P,EAAKmoK,EAC1D,CAIA,eAAAyjO,CAAgBl8X,EAAM1P,EAAKmoK,GACzB,MAAM,UACJ+iO,EAAS,cACTC,EAAa,cACbF,GACEnlX,KACJA,KAAKimX,QAAQ,kBAMTd,IACFv7X,EAAOuiW,GAAiBg5B,EAAev7X,GACvCoW,KAAKmlX,cAAgB,MAIvB,MAAMe,EAAelmX,KAAKmmX,cAAcv8X,GACxC,IAAKs8X,EAAa1sY,OAChB,OAAO,KAEL4rY,IACF/iO,EAAK+iO,GAEP,IAAIH,EAAoBjlX,KAAKilX,kBACxBA,IACHA,EAAoBjlX,KAAKilX,kBAAoB,IAAIvD,IAEnDuD,EAAkBxD,UAAUvnY,GAC5B,MAAM2D,EAASwnY,EAGf,OAFArlX,KAAKqlX,cAAgBJ,EAAkB5jO,QAAQ6kO,EAAan0R,OAAQ,EAAGswD,GACvEriJ,KAAKolX,UAAY//B,GAAW6gC,GAAe,IAAIn0R,OAC1Cl0G,GACI,IAGX,CACA,gBAAAmoY,CAAiBp8X,EAAM1P,EAAKmoK,GAC1B,GAAIriJ,KAAK9lB,MAAQA,IAAQ8lB,KAAKklX,WAAY,CACxC,IAAKllX,KAAK8jJ,OACR,OAAO3kI,QAAQC,QAAQpf,KAAKomX,iBAAiBx8X,EAAM1P,EAAKmoK,IAE1DriJ,KAAK9lB,IAAMA,EACX8lB,KAAKklX,WAAa,IAAI1D,GAAWxhX,KAAK8jJ,OAAQ5pK,EAChD,CACA,OAAO8lB,KAAKklX,WAAWzD,YAAYpzW,MAAKg4W,IAEtC,IAAKrmX,KAAK8jJ,OACR,OAAO3kI,QAAQE,OAAO,IAAI3b,MAAM,+BAElC1D,KAAKimX,QAAQ,yBAEb,OADe,IAAI3E,GAAUthX,KAAK8jJ,OAAQ,IAAI92D,WAAWq1D,IAC3ChB,QAAQz3J,EAAKmoG,OAAQs0R,EAAO,IACzCj+V,OAAMniB,IACPhH,EAAOyO,KAAK,wDAAwDzH,EAAIrhB,SAASqhB,EAAIpd,WAC9EmX,KAAKomX,iBAAiBx8X,EAAM1P,EAAKmoK,KAE5C,CACA,gBAAA+jO,CAAiBx8X,EAAM1P,EAAKmoK,GAC1BriJ,KAAKslX,aAAc,EACnBtlX,KAAKglX,YAAa,EAClBhlX,KAAK8lX,gBAAgBl8X,EAAM1P,EAAKmoK,GAChC,MAAM0jO,EAAgB/lX,KAAKirF,QAC3B,GAAI86R,EACF,OAAOA,EAAch0R,OAEvB,MAAM,IAAIruF,MAAM,wDAClB,CACA,aAAAyiX,CAAcv8X,GACZ,IAAIs8X,EAAet8X,EACnB,MAAM08X,EAAa18X,EAAKpQ,OAASoQ,EAAKpQ,OA3JvB,GAgKf,OAJI8sY,IAAe18X,EAAKpQ,SACtB0sY,EAAe7gC,GAAWz7V,EAAM,EAAG08X,GACnCtmX,KAAKmlX,cAAgB9/B,GAAWz7V,EAAM08X,IAEjCJ,CACT,CACA,OAAAD,CAAQ3yS,GACDtzE,KAAKglX,aAGV/lX,EAAOuB,IAAI,gBAAgB8yE,KAC3BtzE,KAAKglX,YAAa,EACpB,EAOF,MAAMuB,GACM,SAAU9rY,GAClB,IAAI+lB,EAAM,GACV,MAAM3E,EAAMphB,EAAEjB,OACd,IAAK,IAAID,EAAI,EAAGA,EAAIsiB,EAAKtiB,IACvBinB,GAAO,IAAI/lB,EAAEygC,MAAM3hC,GAAG87B,QAAQ,MAAM56B,EAAE0gC,IAAI5hC,GAAG87B,QAAQ,MAEvD,OAAO7U,CACT,EAGIgmX,GACK,UADLA,GAEE,OAFFA,GAGS,cAHTA,GAIU,eAJVA,GAKwB,6BALxBA,GAMW,gBANXA,GAOK,UAPLA,GAQI,SARJA,GASG,QATHA,GAUG,QAVHA,GAWc,mBAXdA,GAYW,gBAEjB,MAAMC,WAA6BrO,GACjC,WAAAv2V,CAAYk9U,EAAK2nB,EAAiBjpC,EAAWqzB,EAAW0J,GACtDp0V,QACApmB,KAAK++V,SAAM,EACX/+V,KAAK6vW,aAAe,KACpB7vW,KAAK2mX,YAAc,KACnB3mX,KAAK0mX,qBAAkB,EACvB1mX,KAAK4mX,WAAa,KAClB5mX,KAAK22O,OAAS6vI,GACdxmX,KAAKw6W,kBAAe,EACpBx6W,KAAK+0N,MAAQ,KACb/0N,KAAK6mX,YAAc,KACnB7mX,KAAK4S,YAAS,EACd5S,KAAKi+U,aAAc,EACnBj+U,KAAK8mX,gBAAkB,EACvB9mX,KAAK+mX,iBAAmB,EACxB/mX,KAAKm/V,cAAgB,EACrBn/V,KAAK4gV,gBAAkB,KACvB5gV,KAAKgnX,gBAAiB,EACtBhnX,KAAKinX,UAAY,EACjBjnX,KAAKg5V,OAAS,KACdh5V,KAAKknX,oBAAiB,EACtBlnX,KAAKy9U,eAAY,EACjBz9U,KAAKmnX,gBAAkB,KACvBnnX,KAAKonX,oBAAqB,EAC1BpnX,KAAKqnX,eAAY,EACjBrnX,KAAKsnX,QAAU,GACftnX,KAAKu8U,WAAY,EACjBv8U,KAAKunX,WAAa,KAClBvnX,KAAKwnX,SAAW,KAChBxnX,KAAK8wW,UAAY,GACjB9wW,KAAKQ,SAAM,EACXR,KAAK0N,UAAO,EACZ1N,KAAKw6W,aAAeA,EACpBx6W,KAAK8wW,UAAYA,EACjB9wW,KAAKQ,IAAMvB,EAAOuB,IAAIE,KAAKzB,EAAQ,GAAG6xW,MACtC9wW,KAAK0N,KAAOzO,EAAOyO,KAAKhN,KAAKzB,EAAQ,GAAG6xW,MACxC9wW,KAAK++V,IAAMA,EACX/+V,KAAKknX,eAAiB,IAAI7H,GAAetgB,EAAInsV,QAC7C5S,KAAKy9U,UAAYA,EACjBz9U,KAAK0mX,gBAAkBA,EACvB1mX,KAAK4S,OAASmsV,EAAInsV,OAClB5S,KAAKqnX,UAAY,IAAIvC,GAAU/lB,EAAInsV,QACnCmsV,EAAItsU,GAAG2iL,EAAOotJ,gBAAiBxiW,KAAKynX,iBAAkBznX,KACxD,CACA,MAAAg5W,GACEh5W,KAAK0nX,WACP,CACA,SAAAA,GAAa,CAGb,SAAAxoB,CAAUC,GAAgB,CAC1B,QAAAC,GACEp/V,KAAKknX,eAAelsV,QACpBh7B,KAAKy9U,UAAUziT,MAAMh7B,KAAKw6W,cAC1B,MAAMn7B,EAAOr/U,KAAK2mX,YACN,MAARtnC,GAAgBA,EAAKtgG,SACvBsgG,EAAKP,gBACL9+U,KAAK0mX,gBAAgB/L,eAAet7B,IAEtCr/U,KAAK2nX,kBACL3nX,KAAK2mX,YAAc,KACnB3mX,KAAK6vW,aAAe,KACpB7vW,KAAKmrI,gBACLnrI,KAAK44W,gBACL54W,KAAKsI,MAAQk+W,EACf,CACA,cAAAoB,GACE5nX,KAAKu8U,WAAY,CACnB,CACA,eAAAsrC,GACE7nX,KAAKu8U,WAAY,CACnB,CACA,YAAAurC,CAAa3V,EAAYtR,GAGvB,GAAIA,EAAazgB,MAAQ+xB,EAAW8K,YAAc9K,EAAWh3V,MAAQnb,KAAK+0N,MACxE,OAAO,EAET,MAAMmrH,EAAW2gB,EAAa3gB,SAG9B,GAAgB,MAAZA,GAAoBA,EAAS1mW,OAAQ,CACvC,MAAMu4X,EAAW7xB,EAASA,EAAS1mW,OAAS,GAO5C,OADyBmjY,GAAaC,WAAW58W,KAAK+0N,MAAOg9I,EAAS72V,MAAQ62V,EAASrnX,SAAW,EAEpG,CACA,MAAM8vX,EAAe3Z,EAAa7gB,UAAU6gB,EAAa7gB,UAAUxmW,OAAS,GAAGwE,KAC/E,OAAOgiB,KAAK0mX,gBAAgB7K,kBAAkBrB,EAChD,CACA,eAAAuN,GAEI,IAAIC,EADN,GAAIhoX,KAAKg5V,QAAmC,OAAzBh5V,KAAKmnX,gBAEtB,OAAyD,OAAjDa,EAAwBhoX,KAAKmnX,sBAA2B,EAASa,EAAsBlnB,OAEnG,CACA,eAAAqF,CAAgB3hX,EAAOoF,GACrB,MAAMmrO,EAAQ/0N,KAAK+0N,MAAQ/0N,KAAK6mX,YAAcj9X,EAAKmrO,MACnD/0N,KAAKunX,WAAavnX,KAAKioX,eAAevnX,KAAKV,MAC3CA,KAAKwnX,SAAWxnX,KAAKkoX,aAAaxnX,KAAKV,MACvC+0N,EAAM11O,iBAAiB,UAAW2gB,KAAKunX,YACvCxyJ,EAAM11O,iBAAiB,QAAS2gB,KAAKwnX,UACrC,MAAM50W,EAAS5S,KAAK4S,OAChB5S,KAAKg5V,QAAUpmV,EAAOu1W,eAAiBnoX,KAAKsI,QAAUk+W,IACxDxmX,KAAKk/V,UAAUtsV,EAAOusV,cAE1B,CACA,gBAAAkH,GACE,MAAMtxI,EAAQ/0N,KAAK+0N,MACN,MAATA,GAAiBA,EAAMqzJ,QACzBpoX,KAAKQ,IAAI,sDACTR,KAAKm/V,cAAgBn/V,KAAK8mX,gBAAkB,GAI1C/xJ,GAAS/0N,KAAKunX,YAAcvnX,KAAKwnX,WACnCzyJ,EAAMz1O,oBAAoB,UAAW0gB,KAAKunX,YAC1CxyJ,EAAMz1O,oBAAoB,QAAS0gB,KAAKwnX,UACxCxnX,KAAKunX,WAAavnX,KAAKwnX,SAAW,MAEhCxnX,KAAKy9U,WACPz9U,KAAKy9U,UAAU4qC,SAEjBroX,KAAK+0N,MAAQ/0N,KAAK6mX,YAAc,KAChC7mX,KAAKgnX,gBAAiB,EACtBhnX,KAAK0mX,gBAAgBpK,qBACrBt8W,KAAKo/V,UACP,CACA,cAAA6oB,GACE,MAAM,OACJr1W,EAAM,YACN+zW,EAAW,MACX5xJ,EAAK,YACL8xJ,EAAW,MACXv+W,GACEtI,KACE8wE,EAAcikJ,EAAQA,EAAMjkJ,YAAc,EAC1CqhS,EAAawK,GAAaxK,WAAW0U,GAA4B9xJ,EAAOjkJ,EAAal+D,EAAO01W,eAElG,GADAtoX,KAAKQ,IAAI,oBAAoB05U,EAAeppQ,GAAeA,EAAYz7D,QAAQ,GAAKy7D,aAAuBxoE,KACvGtI,KAAKsI,QAAUk+W,GACjBxmX,KAAKuoX,yBACA,GAAI5B,EAAa,CAEtB,MAAMnjK,EAAY5wM,EAAOm9V,uBACnByY,EAAkB7B,EAAYzrW,MAAQsoM,EACtCilK,EAAgB9B,EAAYzrW,MAAQyrW,EAAYj8X,SAAW84N,EAEjE,IAAK2uJ,EAAWt2W,KAAO4sX,EAAgBtW,EAAWj3V,OAASstW,EAAkBrW,EAAWh3V,IAAK,CAC3F,MAAMutW,EAAe53S,EAAc23S,GAE/B33S,EAAc03S,GAAmBE,KAC/BA,GAAgB/B,EAAY5nI,SAC9B/+O,KAAKQ,IAAI,mFACTmmX,EAAY7nC,gBACZ9+U,KAAKuoX,qBAEPvoX,KAAK6vW,aAAe,KAExB,CACF,CACI96I,IAEF/0N,KAAK0mX,gBAAgBxK,uBAAuBprS,EAAal0E,IAAUoD,KAAKw6W,cAAc,GACtFx6W,KAAK8mX,gBAAkBh2S,GAIpB9wE,KAAKgnX,gBAAmB7U,EAAWt2W,MACtCmE,KAAK+mX,iBAAmB/mX,KAAKm/V,cAAgBruR,GAI/C9wE,KAAKi5W,eACP,CACA,YAAAiP,GAEEloX,KAAKm/V,cAAgBn/V,KAAK8mX,gBAAkB,CAC9C,CACA,gBAAAW,CAAiBjjY,EAAOoF,GACtBoW,KAAK4gV,gBAAkBh3V,EAAKg3V,gBAC5B5gV,KAAKsnX,QAAU,EACjB,CACA,mBAAA5O,GACE14W,KAAK++V,IAAIzqN,IAAI8gE,EAAOotJ,gBAAiBxiW,KAAKynX,iBAAkBznX,MAC5DA,KAAKo/V,WACLh5U,MAAMsyV,sBAEN14W,KAAK++V,IAAM,IACb,CACA,kBAAA4Z,GACE34W,KAAKsI,MAAQk+W,GACTxmX,KAAKknX,gBACPlnX,KAAKknX,eAAel8O,UAElBhrI,KAAKy9U,WACPz9U,KAAKy9U,UAAUzyM,UAEbhrI,KAAKqnX,WACPrnX,KAAKqnX,UAAUr8O,UAEjBhrI,KAAK++V,IAAM/+V,KAAKQ,IAAMR,KAAK0N,KAAO1N,KAAKqnX,UAAYrnX,KAAKy9U,UAAYz9U,KAAKknX,eAAiBlnX,KAAK0mX,gBAAkB,KACjHtgW,MAAMuyV,oBACR,CACA,YAAAgQ,CAAatpC,EAAMn8G,EAAO0lJ,GACxB5oX,KAAK6oX,qBAAqBxpC,EAAMn8G,EAAO0lJ,EACzC,CACA,oBAAAC,CAAqBxpC,EAAMn8G,EAAO0lJ,GAUhC5oX,KAAK8oX,YAAYzpC,EAAMn8G,EAAO0lJ,GATLh/X,IACvB,GAAIoW,KAAK+oX,mBAAmB1pC,GAG1B,OAFAr/U,KAAK0N,KAAK,YAAY2xU,EAAK9B,KAAK3zV,EAAK+yW,KAAO,OAAS/yW,EAAK+yW,KAAKj7W,MAAQ,eAAe29V,EAAKn8G,2CAC3FljO,KAAK0mX,gBAAgB/L,eAAet7B,GAGtCA,EAAKz0C,MAAMwxC,aACXp8U,KAAKgpX,4BAA4Bp/X,EAAK,IAE0BykB,MAAKzkB,IACrE,IAAKA,EAEH,OAEF,MAAM0e,EAAQtI,KAAKsI,MACftI,KAAK+oX,mBAAmB1pC,IACtB/2U,IAAUk+W,KAAuBxmX,KAAK2mX,aAAer+W,IAAUk+W,MACjExmX,KAAK0mX,gBAAgB/L,eAAet7B,GACpCr/U,KAAKsI,MAAQk+W,KAIb,YAAa58X,IACfoW,KAAKQ,IAAI,mBAAmB6+U,EAAK9B,eAAe8B,EAAKn8G,SACrDljO,KAAK++V,IAAI/zD,QAAQ51F,EAAOykK,YAAajwX,IAIvCoW,KAAKipX,4BAA4Br/X,GAAK,IACrCw+B,OAAM5a,IACHxN,KAAKsI,QAAUk+W,IAAiBxmX,KAAKsI,QAAUk+W,KAGnDxmX,KAAK0N,KAAK,gBAA0B,MAAVF,OAAiB,EAASA,EAAO3kB,UAAY2kB,KACvExN,KAAKkpX,qBAAqB7pC,GAAK,GAEnC,CACA,oBAAA8pC,CAAqB9pC,GACnB,IAAI+pC,EACJ,MAAM,gBACJ1C,GACE1mX,KAEJ,GADkB0mX,EAAgBxrV,SAASmkT,KACzB65B,GAAyB,CAEzC,MAAMsB,EAAen7B,EAAKrhW,KACpBg/X,EAAeh9W,KAAKqpX,iBAAiBrpX,KAAK6mX,YAAarM,GACvD8O,EAAyB35W,KAAKhT,IAAI0iV,EAAK30V,SAAUsyX,EAAeA,EAAanhX,IAAMmE,KAAK4S,OAAO22W,iBAE/FC,EAAoBxpX,KAAKwpX,mBAEX,KADAA,EAAoBnqC,EAAK9B,GAAKisC,EAAkBjsC,GAAK,IAChDv9U,KAAKypX,sBAAsBH,EAAwBjqC,EAAK30V,YAC/Eg8X,EAAgB/L,eAAet7B,EAEnC,MAA6G,KAAvD,OAAzC+pC,EAAoBppX,KAAK6mX,kBAAuB,EAASuC,EAAkB9f,SAAS9vX,QAE/FktY,EAAgBpK,qBACPoK,EAAgB1K,SAAS38B,EAAKrhW,QAEvC0oY,EAAgB3L,uBAAuB,CACrC17B,OACAsd,KAAM,KACN/xD,MAAOy0C,EAAKz0C,MACZ/+S,GAAIwzV,EAAKrhW,OAEP0oY,EAAgBxrV,SAASmkT,KAAU65B,IACrCwN,EAAgB/L,eAAet7B,GAGrC,CACA,eAAAqqC,CAAgB5oB,GACd,GAAIA,EAAQp7L,UAAYo7L,EAAQ1gB,KAAM,CAEpC,MAAM4c,EAAe8D,EAAQ9gB,UAAU8gB,EAAQ9gB,UAAUxmW,OAAS,GAClEwmB,KAAK0mX,gBAAgB3L,uBAAuB,CAC1C17B,KAAM2d,EACNL,KAAM,KACN/xD,MAAOoyD,EAAapyD,MACpB/+S,GAAImxW,EAAah/W,MAErB,CACK8iX,EAAQ9gB,UAAU,KACrB8gB,EAAQnf,mBAAoB,EAEhC,CACA,eAAAgoC,CAAgB3qJ,EAAaqoI,EAAWrpX,EAAO,MAC7C,KAAMghP,EAAcqoI,GAClB,OAIF,MAAMuiB,EAAa,CACjB5qJ,cACAqoI,YACArpX,QAEFgiB,KAAK++V,IAAI/zD,QAAQ51F,EAAOoxJ,gBAAiBojB,EAC3C,CACA,gBAAAC,CAAiBxqC,EAAMn8G,GACrBljO,KAAK8oX,YAAYzpC,EAAMn8G,GAAO70N,MAAKzkB,IACjC,IAAKA,GAAQoW,KAAK+oX,mBAAmB1pC,KAAUr/U,KAAKg5V,OAClD,MAAM,IAAIt1V,MAAM,qBAElB,OAAO9Z,CAAI,IACVykB,MAAKzkB,IACN,MAAM,IACJm1W,GACE/+V,MACE,QACJ2U,GACE/qB,EACEkgY,EAAczqC,EAAKhB,YAGzB,GAAI1pU,GAAWA,EAAQ+8E,WAAa,GAAoB,MAAfo4R,GAAuBA,EAAY5vY,KAAO4vY,EAAYznO,IAA6B,YAAvBynO,EAAY5qX,OAAsB,CACrI,MAAM+0C,EAAYjlC,KAAK+7G,YAAY9hI,MAEnC,OAAO+W,KAAKqnX,UAAUhmO,QAAQ,IAAIr0D,WAAWr4E,GAAUm1W,EAAY5vY,IAAI63G,OAAQ+3R,EAAYznO,GAAGtwD,QAAQ3pE,OAAMniB,IAS1G,MARA84V,EAAI/zD,QAAQ51F,EAAO5yI,MAAO,CACxBxkF,KAAMm8V,EAAWinC,YACjBtgB,QAAS1mB,EAAa2vC,mBACtBxvF,OAAO,EACP72S,MAAOuiB,EACPuH,OAAQvH,EAAIpd,QACZw2V,SAEIp5U,CAAG,IACRoI,MAAK4sJ,IACN,MAAMpnH,EAAU7kC,KAAK+7G,YAAY9hI,MAUjC,OATA81W,EAAI/zD,QAAQ51F,EAAO40K,eAAgB,CACjC3qC,OACA1qU,QAASsmJ,EACT2vI,MAAO,CACLq/E,OAAQh2U,EACRi2U,SAAUr2U,KAGdjqD,EAAK+qB,QAAUsmJ,EACRj7J,KAAKmqX,wBAAwBvgY,EAAK,GAE7C,CACA,OAAOoW,KAAKmqX,wBAAwBvgY,EAAK,IACxCw+B,OAAM5a,IACHxN,KAAKsI,QAAUk+W,IAAiBxmX,KAAKsI,QAAUk+W,KAGnDxmX,KAAK0N,KAAKF,GACVxN,KAAKkpX,qBAAqB7pC,GAAK,GAEnC,CACA,uBAAA8qC,CAAwBvgY,GACtB,MAAM,OACJovW,GACEh5V,KACJ,IAAKg5V,EACH,MAAM,IAAIt1V,MAAM,qCAElB,MAAMknS,EAAQhhT,EAAKy1V,KAAKz0C,MACxB5qS,KAAKsI,MAAQk+W,GACb58X,EAAKy1V,KAAKz1V,KAAO,IAAIojG,WAAWpjG,EAAK+qB,SACrCi2R,EAAM0xC,QAAQphU,MAAQ0vR,EAAM2xC,UAAUrhU,MAAQlM,KAAK+7G,YAAY9hI,MAC/D2hT,EAAM0xC,QAAQnhU,IAAMyvR,EAAM2xC,UAAUphU,IAAMnM,KAAK+7G,YAAY9hI,MAC3D+W,KAAKy4W,MACP,CACA,kBAAAsQ,CAAmB1pC,GACjB,MAAM,YACJsnC,GACE3mX,KACJ,OAAQq/U,IAASsnC,GAAetnC,EAAK9B,KAAOopC,EAAYppC,IAAM8B,EAAKn8G,QAAUyjJ,EAAYzjJ,KAC3F,CACA,oBAAAknJ,CAAqB/qC,EAAMsd,GACzB,IAAI0tB,EAAgBC,EAAcC,EAAmBC,EACrD,MAAMz1J,EAAQ/0N,KAAK6mX,YAAc7mX,KAAK6mX,YAAc7mX,KAAK+0N,MAEzD,GADA/0N,KAAKQ,IAAI,YAAY6+U,EAAKrhW,YAAYqhW,EAAK9B,KAAKof,EAAO,UAAYA,EAAKj7W,MAAQ,SAASse,KAAKw6W,eAAiB7b,GAAyB,QAAU,WAAWtf,EAAKn8G,iBAAqD,OAAnCmnJ,EAAiBhrC,EAAK3B,UAAoB2sC,EAAiBz9U,KAAKv3B,QAAQ,OAAuC,OAA/Bi1W,EAAejrC,EAAK1B,QAAkB2sC,EAAe19U,KAAKv3B,QAAQ,gBAAgB0/M,EAAQwxJ,GAAoB5J,GAAaE,YAAY9nJ,IAAU,iBACrY,gBAAZsqH,EAAK9B,GAAsB,CAC7B,IAAIktC,EACJ,GAAIprC,EAAKrhW,OAAS2gX,GAA4B,CAC5C,MAAMnrW,EAAK6rV,EAAKvC,kBAChB,IAAK/iW,OAAOiC,KAAKwX,GAAIwlC,MAAKh7C,KAAUwV,EAAGxV,KAGrC,YADAgiB,KAAKsI,MAAQk+W,GAGjB,CACA,MAAMtjJ,EAAwC,OAA/BunJ,EAAezqX,KAAKg5V,aAAkB,EAASyxB,EAAaprC,EAAKn8G,OACnE,MAATA,GAAiBA,EAAMunI,gBACzBzqW,KAAKQ,IAAI,2CAA2C0iO,EAAMunI,kCAC1DvnI,EAAMunI,cAAgB,EAE1B,CACAzqW,KAAKsI,MAAQk+W,GACRzxJ,KAGA/0N,KAAKgnX,gBAAkB3nC,EAAKrhW,MAAQ2gX,IAA0B5pI,EAAMu0I,SAAS9vX,SAAqD,OAAzC+wY,EAAoBvqX,KAAK2mX,kBAAuB,EAAS4D,EAAkBhtC,OAAqD,OAA3CitC,EAAqBxqX,KAAK6vW,mBAAwB,EAAS2a,EAAmBjtC,MAC/Pv9U,KAAKgnX,gBAAiB,EACtBhnX,KAAK0qX,kBAEP1qX,KAAKy4W,OACP,CACA,cAAAiS,GAAkB,CAClB,2BAAAzB,CAA4B0B,GAC1B,MAAM,WACJ/D,GACE5mX,KACJ,IAAK4mX,EACH,OAEF,MAAM,KACJvnC,EAAI,KACJsd,EAAI,YACJiuB,GACED,EAEEz7V,GAAY07V,GAAsC,IAAvBA,EAAYpxY,QAAgBoxY,EAAY5xV,MAAK6xV,IAAeA,IACvFC,EAAY,IAAItN,GAAcn+B,EAAKn8G,MAAOm8G,EAAK9B,GAAI8B,EAAKz0C,MAAMwxC,WAAa,EAAG,EAAGugB,EAAOA,EAAKj7W,OAAS,GAAIwtC,GAChH03V,EAAW37R,MAAM6/R,EACnB,CAGA,2BAAA9B,CAA4B3pC,GAAO,CACnC,WAAAypC,CAAYzpC,EAAMn8G,EAAO0lJ,EAAmB,KAAMmC,GAChD,IAAI/J,EACJ,MAAMlgB,EAAmB,MAAT59H,OAAgB,EAASA,EAAM49H,QAC/C,IAAK9gW,KAAKg5V,SAAW8H,EACnB,MAAM,IAAIp9V,MAAM,mCAAmCo9V,EAAU,GAAK,cAEpE,IAAIkqB,EAAoB,KAwBxB,IAvBI3rC,EAAKX,WAAyD,OAAzCsiC,EAAoB3hC,EAAKhB,cAAwB2iC,EAAkB9mY,KAmBhFmlW,EAAKX,WAAaoiB,EAAQ9e,mBAAmBxoW,QACvDwmB,KAAKy9U,UAAUwtC,UAAU5rC,EAAMyhB,EAAQ9e,qBAnBvChiV,KAAKQ,IAAI,mBAAmB6+U,EAAK9B,UAAUujB,EAAQngB,WAAWmgB,EAAQ/gB,WAA8B,wBAAnB//U,KAAK8wW,UAAsC,QAAU,WAAWzxB,EAAKn8G,SACtJljO,KAAKsI,MAAQk+W,GACbxmX,KAAK2mX,YAActnC,EACnB2rC,EAAoBhrX,KAAKy9U,UAAUl+U,KAAK8/U,GAAMhxU,MAAK68W,IACjD,IAAKlrX,KAAK+oX,mBAAmBmC,EAAc7rC,MAKzC,OAJAr/U,KAAK++V,IAAI/zD,QAAQ51F,EAAO+1K,WAAYD,GAChClrX,KAAKsI,QAAUk+W,KACjBxmX,KAAKsI,MAAQk+W,IAER0E,CACT,IAEFlrX,KAAK++V,IAAI/zD,QAAQ51F,EAAOg2K,YAAa,CACnC/rC,SAEuB,OAArBr/U,KAAK2mX,cACPqE,EAAoB7rW,QAAQE,OAAO,IAAI3b,MAAM,wDAKjDklX,EAAmBj5W,KAAKhT,IAAI0iV,EAAKnkU,MAAO0tW,GAAoB,GACxD5oX,KAAK4S,OAAO+1V,gBAA8B,gBAAZtpB,EAAK9B,GAAsB,CAC3D,MAAM2C,EAAW4gB,EAAQ5gB,SACzB,GAAIA,GAAY6qC,EAAkB,CAC5BnC,EAAmBvpC,EAAKlkU,KAAO2lV,EAAQ7gB,eACzCZ,EAAOyhB,EAAQ7gB,cAEjB,MAAMkuB,EAAYnuW,KAAKqrX,YAAYnrC,EAAUb,EAAMupC,GACnD,GAAIza,GAAa,EAAG,CAClB,MAAMxR,EAAOzc,EAASiuB,GAItB,IAAInqH,EAgBJ,OAnBAhkP,KAAKQ,IAAI,oBAAoB6+U,EAAK9B,SAASof,EAAKj7W,aAAa29V,EAAKz8O,mBAAmBk+P,EAAQngB,WAAWmgB,EAAQ/gB,mBAAmBouB,KAAajuB,EAAS1mW,OAAS,MAAyB,wBAAnBwmB,KAAK8wW,UAAsC,QAAU,YAAYzxB,EAAKn8G,kBAAkBzvO,WAAWm1X,EAAiBvzW,QAAQ,OACpSrV,KAAK+mX,iBAAmBpqB,EAAKzhV,MAAQyhV,EAAKjyW,SAC1CsV,KAAKsI,MAAQk+W,GAGXxiI,EADEgnI,EACQA,EAAkB38W,MAAK68W,IAC1BA,GAAiBlrX,KAAK+oX,mBAAmBmC,EAAc7rC,MACnD,KAEFr/U,KAAKsrX,gBAAgBjsC,EAAMsd,EAAMz5H,EAAO6nJ,KAC9C3iW,OAAM1kC,GAASsc,KAAKurX,oBAAoB7nY,KAEjCsc,KAAKsrX,gBAAgBjsC,EAAMsd,EAAMz5H,EAAO6nJ,GAAkB3iW,OAAM1kC,GAASsc,KAAKurX,oBAAoB7nY,KAE9Gsc,KAAK++V,IAAI/zD,QAAQ51F,EAAOo2K,aAAc,CACpCnsC,OACAsd,OACAisB,qBAEuB,OAArB5oX,KAAK2mX,YACAxnW,QAAQE,OAAO,IAAI3b,MAAM,6DAE3BsgP,CACT,CAAO,IAAKq7F,EAAKtqU,KAAO/U,KAAKyrX,iBAAiBvrC,EAAU0oC,GAEtD,OAAOzpW,QAAQC,QAAQ,KAE3B,CACF,CACApf,KAAKQ,IAAI,oBAAoB6+U,EAAK9B,UAAU8B,EAAKz8O,MAAMk+P,EAAU,OAASA,EAAQngB,QAAU,IAAMmgB,EAAQ/gB,MAAQ,KAAO,KAAwB,wBAAnB//U,KAAK8wW,UAAsC,QAAU,YAAYzxB,EAAKn8G,kBAAkBzvO,WAAWm1X,EAAiBvzW,QAAQ,OAEtP6kU,EAAemF,EAAK9B,MAAQv9U,KAAKi+U,cACnCj+U,KAAK+mX,iBAAmB1nC,EAAKnkU,MAAQmkU,EAAK30V,UAE5CsV,KAAKsI,MAAQk+W,GAGb,MAAMkF,EAAiB1rX,KAAK4S,OAAO+4W,YACnC,IAAI9tY,EAsBJ,OApBEA,EADE6tY,GAAkBV,EACXA,EAAkB38W,MAAK68W,IACzBA,GAAiBlrX,KAAK+oX,mBAAoC,MAAjBmC,OAAwB,EAASA,EAAc7rC,MACpF,KAEFr/U,KAAKknX,eAAe3nX,KAAK8/U,EAAM0rC,KACrC3iW,OAAM1kC,GAASsc,KAAKurX,oBAAoB7nY,KAIlCy7B,QAAQivG,IAAI,CAACpuH,KAAKknX,eAAe3nX,KAAK8/U,EAAMqsC,EAAiBX,OAAmBnyX,GAAYoyX,IAAoB38W,MAAK,EAAEu9W,OACzHF,GAAkBE,GAAkBb,GACvCA,EAAiBa,GAEZA,KACNxjW,OAAM1kC,GAASsc,KAAKurX,oBAAoB7nY,KAE7Csc,KAAK++V,IAAI/zD,QAAQ51F,EAAOo2K,aAAc,CACpCnsC,OACAupC,qBAEuB,OAArB5oX,KAAK2mX,YACAxnW,QAAQE,OAAO,IAAI3b,MAAM,uDAE3B7lB,CACT,CACA,eAAAytY,CAAgBjsC,EAAMwsC,EAAU3oJ,EAAO6nJ,GACrC,OAAO,IAAI5rW,SAAQ,CAACC,EAASC,KAC3B,IAAI+uV,EACJ,MAAMwc,EAAc,GACdkB,EAAsD,OAAnC1d,EAAiBlrI,EAAM49H,cAAmB,EAASsN,EAAeluB,SACrFkgC,EAAWzjB,IACf38V,KAAKknX,eAAe9G,SAAS/gC,EAAMsd,EAAMouB,GAAkB18W,MAAKiyW,IAC9DsK,EAAYjuB,EAAKj7W,OAAS4+X,EAC1B,MAAMyL,EAAazL,EAAe3jB,KAClC38V,KAAK++V,IAAI/zD,QAAQ51F,EAAOykK,YAAayG,GACrC,MAAM0L,EAAW9d,GAAYhrI,EAAOm8G,EAAK9B,GAAIof,EAAKj7W,MAAQ,IAAM2sX,GAASyd,EAAiBzsC,EAAK9B,GAAIof,EAAKj7W,MAAQ,GAChH,IAAIsqY,EAGF,OAAO5sW,EAAQ,CACbigU,OACAsd,KAAMovB,EACNnB,gBALFxK,EAAS4L,EAOX,IACC5jW,MAAM/I,EAAO,EAElB+gW,EAASyL,EAAS,GAEtB,CACA,mBAAAN,CAAoB7nY,GAClB,GAAI,SAAUA,EAAO,CACnB,MAAMkG,EAAOlG,EAAMkG,KACflG,EAAMkG,MAAQA,EAAKk3W,UAAY1mB,EAAa+lC,iBAC9CngX,KAAKisX,sBAAsBriY,EAAKy1V,KAAMz1V,EAAK+yW,MAE3C38V,KAAK++V,IAAI/zD,QAAQ51F,EAAO5yI,MAAO54E,EAEnC,MACEoW,KAAK++V,IAAI/zD,QAAQ51F,EAAO5yI,MAAO,CAC7BxkF,KAAMm8V,EAAW+xC,YACjBprB,QAAS1mB,EAAa+xC,mBACtBlmX,IAAKviB,EACLA,QACA62S,OAAO,IAGX,OAAO,IACT,CACA,sBAAA6xF,CAAuBtB,GACrB,MAAMhsX,EAAUkB,KAAKqsX,kBAAkBvB,GACvC,IAAKhsX,GAAWkB,KAAKsI,QAAUk+W,GAI7B,YAHKxmX,KAAK2mX,aAAe3mX,KAAKsI,QAAUk+W,IAAiBxmX,KAAKsI,QAAUk+W,KACtExmX,KAAKsI,MAAQk+W,KAIjB,MAAM,KACJnnC,EAAI,KACJsd,EAAI,MACJz5H,GACEpkO,EACE7V,EAAM+lB,KAAK+7G,YAAY9hI,MAC7Bo2V,EAAKz0C,MAAM0xC,QAAQnhU,IAAMlyB,EACrB0zW,IACFA,EAAK/xD,MAAM0xC,QAAQnhU,IAAMlyB,GAE3B+W,KAAKssX,kBAAkBjtC,EAAMsd,EAAMz5H,EAAO4nJ,EAAU9rQ,QACtD,CACA,iBAAAqtQ,CAAkBvB,GAChB,MAAM,OACJ9xB,EAAM,YACN2tB,GACE3mX,MAEFkjO,MAAOsgI,EAAU,GACjBjmB,EACAof,KAAMwR,GACJ2c,EACJ,GAAgB,MAAV9xB,IAAkBA,EAAOwK,GAE7B,OADAxjW,KAAK0N,KAAK,oDAAoD6vU,cAAeimB,8CACtE,KAET,MAAMtgI,EAAQ81H,EAAOwK,GACf7G,EAAOwR,GAAa,EAAID,GAAYhrI,EAAOq6G,EAAI4wB,GAAa,KAC5D9uB,EAAOsd,EAAOA,EAAK7iB,SA7tI7B,SAA2B52G,EAAOq6G,EAAIopC,GACpC,GAAe,MAATzjJ,IAAiBA,EAAM49H,QAC3B,OAAO,KAET,MAAMD,EAAe39H,EAAM49H,QAC3B,IAAIhnB,EAAW+mB,EAAa7gB,UAAUzC,EAAKsjB,EAAalgB,SACxD,OAAI7G,IAGJA,EAAW+mB,EAAa5gB,aACpBnG,GAAYA,EAASyD,KAAOA,EACvBzD,EAELyD,EAAKsjB,EAAalgB,SAAWgmC,GAAeA,EAAYppC,KAAOA,EAC1DopC,EAEF,KACT,CA4sIwC4F,CAAkBrpJ,EAAOq6G,EAAIopC,GACjE,OAAKtnC,GAGDsnC,GAAeA,IAAgBtnC,IACjCA,EAAKz0C,MAAQ+7E,EAAY/7E,OAEpB,CACLy0C,OACAsd,OACAz5H,UARO,IAUX,CACA,kBAAAspJ,CAAmB5iY,EAAMy1V,EAAMsd,EAAMmuB,EAAW2B,GAC9C,IAAIC,EACJ,IAAK9iY,GAAQoW,KAAKsI,QAAUk+W,GAC1B,OAEF,MAAM,MACJp6B,EAAK,MACLC,GACEziW,EACJ,IAAImoG,EAASq6P,EAKb,GAJIA,GAASC,IAEXt6P,EAASo6P,GAAiBC,EAAOC,IAEP,OAArBqgC,EAAU36R,KAAmB26R,EAAQlzY,OAC1C,OAEF,MAAMqoD,EAAU,CACd7jD,KAAM4L,EAAK5L,KACXqhW,OACAsd,OACAmuB,YACAtsT,OAAQ6gR,EAAKrhW,KACb4L,KAAMmoG,GAGR,GADA/xF,KAAK++V,IAAI/zD,QAAQ51F,EAAOu3K,iBAAkB9qV,GACtCj4C,EAAKgjY,SAAWhjY,EAAK21V,cAAgBod,EAAM,CAC7C,GAAI8vB,EACF,OAGFzsX,KAAK6sX,eAAextC,EACtB,CACF,CACA,cAAAwtC,CAAextC,GACb,MAAMtqH,EAAQ/0N,KAAK+0N,MACnB,IAAKA,EACH,OAGF,IAAK4nJ,GAAaC,WAAW7nJ,EAAOA,EAAMjkJ,aAExC,YADA9wE,KAAK2pX,gBAAgB,EAAGtqC,EAAKnkU,OAI/B,MAAM41D,EAAcikJ,EAAMjkJ,YACpBqhS,EAAawK,GAAaxK,WAAWp9I,EAAOjkJ,EAAa,GACzDg8S,EAAeztC,EAAK30V,SACpBqiY,EAAkBp9W,KAAKjT,IAAyC,EAArCsD,KAAK4S,OAAOm9V,uBAA2C,IAAf+c,GACnE5xW,EAAQvL,KAAKhT,IAAIgT,KAAKjT,IAAI2iV,EAAKnkU,MAAQ6xW,EAAiB5a,EAAWh3V,IAAM4xW,GAAkBj8S,EAAci8S,GAC3G1tC,EAAKnkU,MAAQA,EAAQ6xW,GACvB/sX,KAAK2pX,gBAAgBzuW,EAAOmkU,EAAKnkU,MAErC,CACA,gBAAAmuW,CAAiB2D,EAAYhvY,GAC3B,MAAM0nC,EAAM1lB,KAAKitX,kBACjB,OAAK/yC,EAAex0T,GAGb1lB,KAAKktX,sBAAsBF,EAAYtnW,EAAK1nC,GAF1C,IAGX,CACA,qBAAAkvY,CAAsBF,EAAYtnW,EAAK1nC,GACrC,MACE40B,QAAQ,cACN01W,IAEAtoX,KACEmyW,EAAawK,GAAaxK,WAAW6a,EAAYtnW,EAAK4iW,GAE5D,GAAuB,IAAnBnW,EAAWt2W,UAAsCjD,IAAzBu5W,EAAW8K,UAAyB,CAC9D,MAAMkQ,EAAoBntX,KAAK0mX,gBAAgBvM,gBAAgBz0V,EAAK1nC,GACpE,GAAImvY,GAAqBhb,EAAW8K,UAAYkQ,EAAkBhyW,IAChE,OAAOwhW,GAAaxK,WAAW6a,EAAYtnW,EAAK/V,KAAKhT,IAAIw1W,EAAW8K,UAAWqL,GAEnF,CACA,OAAOnW,CACT,CACA,kBAAAib,CAAmBC,GACjB,MAAM,OACJz6W,GACE5S,KACJ,IAAIstX,EAMJ,OAJEA,EADED,EACU19W,KAAKhT,IAAI,EAAIiW,EAAO26W,cAAgBF,EAAcz6W,EAAO22W,iBAEzD32W,EAAO22W,gBAEd55W,KAAKjT,IAAI4wX,EAAW16W,EAAO46W,mBACpC,CACA,qBAAA/D,CAAsBgE,EAAWX,GAC/B,MAAMl6W,EAAS5S,KAAK4S,OACdqiN,EAAYtlN,KAAKhT,IAAIgT,KAAKjT,IAAI+wX,EAAYX,EAAcl6W,EAAO22W,iBAAkBuD,GACjFY,EAAgB/9W,KAAKhT,IAAI8wX,EAA2B,EAAfX,EAAkBl6W,EAAO46W,mBAAqB,EAAGv4J,GAC5F,OAAIy4J,GAAiBz4J,IAEnBriN,EAAO46W,mBAAqBE,EAC5B1tX,KAAK0N,KAAK,+BAA+BggX,OAClC,EAGX,CACA,eAAA3T,CAAgBvrS,EAAUgsS,EAAe7b,IACvC,MAAMgvB,EAAa3tX,KAAK0mX,gBAAgB3M,gBAAgBvrS,EAAUmwR,IAClE,OAAIgvB,GAAc,aAAcA,EACvBA,EAAW7zC,SAEb6zC,CACT,CACA,eAAAC,CAAgBloW,EAAKm7U,GACnB,MAAM7gB,EAAY6gB,EAAa7gB,UACzB6tC,EAAU7tC,EAAUxmW,OAC1B,IAAKq0Y,EACH,OAAO,KAIT,MAAM,OACJj7W,GACE5S,KACEkb,EAAQ8kU,EAAU,GAAG9kU,MAC3B,IAAImkU,EACJ,GAAIwhB,EAAazgB,KAAM,CACrB,MAAM0tC,EAA0Bl7W,EAAOk7W,wBACvC,GAAID,EAAUC,EAEZ,OADA9tX,KAAK0N,KAAK,iDAAiDmgX,YAAkBC,MACtE,OAMJjtB,EAAalhB,WAAa3/U,KAAKonX,qBAA8C,IAAxBpnX,KAAKm/V,eAAwBz5U,EAAMxK,KAC3FmkU,EAAOr/U,KAAK+tX,uBAAuBltB,EAAc7gB,GACjDhgV,KAAKm/V,cAAgBn/V,KAAK+mX,iBAAmB1nC,EAAOr/U,KAAK++V,IAAI+J,kBAAoBzpB,EAAKnkU,MAAQwK,EAElG,MAAWA,GAAOxK,IAEhBmkU,EAAOW,EAAU,IAInB,IAAKX,EAAM,CACT,MAAMlkU,EAAMvI,EAAO+1V,eAAiB9H,EAAa/d,QAAU+d,EAAa9d,YACxE1D,EAAOr/U,KAAKguX,sBAAsBtoW,EAAKvK,EAAK0lV,EAC9C,CACA,OAAO7gW,KAAKiuX,0BAA0B5uC,EACxC,CACA,aAAA6uC,CAAc7uC,EAAMupC,GAClB,MAAMuF,EAAenuX,KAAK0mX,gBAAgBxrV,SAASmkT,GACnD,OAAQ8uC,IAAiBjV,IAAoBiV,IAAiBjV,MAA2B75B,EAAKv1N,MAAQ9pH,KAAK+mX,iBAAmB6B,CAChI,CACA,0BAAAwF,CAA2B/uC,EAAMwhB,EAAcsR,EAAYqI,EAAc8S,GACvE,MAAMe,EAAWhvC,EAAKv1N,IAChBwkQ,EAAetuX,KAAK4tX,gBAAgB5tX,KAAK+mX,iBAAkBlmB,GACjE,GAAqB,OAAjBytB,EACF,OAAOA,EAGT,GADAjvC,EAAOivC,EACHD,GAAYhvC,IAASA,EAAKv1N,KAAOqoP,EAAW8K,UAAW,CAEzD,MAAMsR,EAAiBvuX,KAAKktX,sBAAsBltX,KAAK6mX,YAAc7mX,KAAK6mX,YAAc7mX,KAAK+0N,MAAOo9I,EAAW8K,UAAWzC,GAC1H,GAAuB,OAAnB+T,GAA2Bpc,EAAWt2W,IAAM0yX,EAAe1yX,KAAOyxX,EAGpE,OADAttX,KAAKQ,IAAI,8BAA8Bg6W,+BAA0Cn7B,EAAK9B,MAC/E,IAEX,CACA,OAAO8B,CACT,CACA,yBAAA4uC,CAA0B5uC,GAExB,OAAY,MAARA,IAAgBA,EAAKnB,aAAyB,MAARmB,GAAgBA,EAAKnB,YAAYt0V,MAAUoW,KAAKi+U,YAGnFoB,EAFEA,EAAKnB,WAGhB,CACA,WAAAmtC,CAAYnrC,EAAUb,EAAMupC,GAC1B,IAAIoD,GAAY,EACZwC,GAAa,EACbC,GAAyB,EAC7B,IAAK,IAAIl1Y,EAAI,EAAGsiB,EAAMqkV,EAAS1mW,OAAQD,EAAIsiB,EAAKtiB,IAAK,CACnD,MAAMojX,EAAOzc,EAAS3mW,GAEtB,GADAk1Y,EAAyBA,IAA2B9xB,EAAKpd,YACrDysC,GAAY,GAAKpD,EAAmBjsB,EAAKzhV,MAC3C,MAEF,MAAM4oM,EAAS64I,EAAK74I,OAChBA,EACFkoK,GAAY,GACFwC,GAAc7xB,EAAKpd,aAAekvC,IAA2B9xB,EAAK7iB,WAAauF,IACzF2sC,EAAWzyY,GAEbi1Y,EAAa1qK,CACf,CACA,OAAOkoK,CACT,CACA,gBAAAP,CAAiBvrC,EAAU0oC,GACzB,MAAM7W,EAAW7xB,EAASA,EAAS1mW,OAAS,GAC5C,OAAOu4X,GAAY6W,EAAmB7W,EAAS72V,OAAS62V,EAASjuJ,MACnE,CAOA,sBAAAiqK,CAAuBltB,EAAc7gB,GACnC,MAAM6vB,EAAe7vW,KAAK6vW,aAC1B,IAAIxwB,EAAO,KACX,GAAIwwB,GAMF,GALIhP,EAAape,qBAEfziV,KAAKQ,IAAI,+DAA+DqvW,EAAaxyB,mBACrFgC,EA7zIR,SAA2BW,EAAW0uC,EAAU3e,GAC9C,GAAiB,OAAb2e,IAAsB90Y,MAAMC,QAAQmmW,KAAeA,EAAUxmW,SAAW0gW,EAAew0C,GACzF,OAAO,KAKT,GAAIA,GADa1uC,EAAU,GAAG3C,iBACF,GAC1B,OAAO,KAGT,GAAIqxC,IADW1uC,EAAUA,EAAUxmW,OAAS,GAAGilW,oBACpB,GACzB,OAAO,KAETsxB,EAAyBA,GAA0B,EACnD,IAAK,IAAIpsE,EAAM,EAAGA,EAAMq8C,EAAUxmW,SAAUmqT,EAAK,CAC/C,MAAM07C,EAAOW,EAAUr8C,GACvB,GAAI8sE,GAAuBie,EAAU3e,EAAwB1wB,GAC3D,OAAOA,CAEX,CACA,OAAO,IACT,CAuyIesvC,CAAkB3uC,EAAW6vB,EAAapxB,mBAAoBz+U,KAAK4S,OAAOm9V,0BAE9E1wB,EAAM,CAET,MAAMuvC,EAAW/e,EAAatyB,GAAK,EACnC,GAAIqxC,GAAY/tB,EAAalgB,SAAWiuC,GAAY/tB,EAAa9gB,MAAO,CACtE,MAAMkwB,EAAWjwB,EAAU4uC,EAAW/tB,EAAalgB,SAE/CkvB,EAAajtQ,KAAOqtQ,EAASrtQ,KAC/By8O,EAAO4wB,EACPjwW,KAAKQ,IAAI,8DAA8D6+U,EAAK9B,MAEhF,CAGK8B,IACHA,EAntIV,SAAwBW,EAAWp9O,GACjC,OAAOysQ,GAAoBrvB,GAAWuwB,GAChCA,EAAU3tQ,GAAKA,EACV,EACE2tQ,EAAU3tQ,GAAKA,GAChB,EAED,GAGb,CAysIiBisR,CAAe7uC,EAAW6vB,EAAajtQ,IAC1Cy8O,GACFr/U,KAAKQ,IAAI,8DAA8D6+U,EAAK9B,MAGlF,MACK,CAEL,MAAMuxC,EAAY9uX,KAAK++V,IAAI+J,iBACT,OAAdgmB,IACFzvC,EAAOr/U,KAAKguX,sBAAsBc,EAAW9uX,KAAKi+U,YAAc4iB,EAAa9d,YAAc8d,EAAahe,KAAMge,GAElH,CACA,OAAOxhB,CACT,CAKA,qBAAA2uC,CAAsBle,EAAW30V,EAAK0lV,GACpC,MAAM,OACJjuV,GACE5S,KACJ,IAAI,aACF6vW,GACE7vW,MACA,UACFggV,EAAS,MACTD,GACE8gB,EACJ,MAAM,aACJ5gB,GACE4gB,GACE,uBACJkP,GACEn9V,EACEstU,EAAW2gB,EAAa3gB,SACxB6uC,KAAkBn8W,EAAO+1V,gBAA8B,MAAZzoB,GAAoBA,EAAS1mW,QAAUymW,GAMxF,IAAIZ,EACJ,GANI0vC,GAAgB9uC,IAAiBjgV,KAAKi+U,cAExC+B,EAAYA,EAAUjkV,OAAOkkV,GAC7BF,EAAQE,EAAa1C,IAGnBuyB,EAAY30V,EAAK,CAInBkkU,EAAOuwB,GAAkBC,EAAc7vB,EAAW8vB,EAH1BA,EAAY30V,EAAM40V,EAAyB,EAAIA,EAIzE,MAEE1wB,EAAOW,EAAUA,EAAUxmW,OAAS,GAEtC,GAAI6lW,EAAM,CACR,MAAM2vC,EAAW3vC,EAAK9B,GAAKsjB,EAAalgB,QAGlCsuC,EAAYjvX,KAAK0mX,gBAAgBxrV,SAASmkT,GAIhD,IAHI4vC,IAAc/V,IAAoB+V,IAAc/V,IAAyB75B,EAAKv1N,OAChF+lP,EAAexwB,GAEbwwB,GAAgBxwB,EAAK9B,KAAOsyB,EAAatyB,MAAQwxC,GAAgB7uC,EAAS,GAAGpG,SAASyD,GAAK8B,EAAK9B,IAAK,CAIvG,GADkBsyB,GAAgBxwB,EAAKn8G,QAAU2sI,EAAa3sI,MAC/C,CACb,MAAMgsJ,EAAWlvC,EAAUgvC,EAAW,GAEpC3vC,EADEA,EAAK9B,GAAKwC,GAAS//U,KAAK0mX,gBAAgBxrV,SAASg0V,KAAchW,GAC1DgW,EAEA,IAEX,CACF,CACF,CACA,OAAO7vC,CACT,CACA,qBAAA8vC,CAAsBtuB,GACpB,MAAM,OACJjuV,EAAM,MACNmiN,GACE/0N,KACJ,IAAK+0N,EACH,OAEF,MAAM+zI,EAAmB9oW,KAAK++V,IAAI+J,iBAC5Bh4R,EAAcikJ,EAAMjkJ,YACpB51D,EAAQ2lV,EAAa7gB,UAAU,GAAG9kU,MAClCC,EAAM0lV,EAAahe,KACnBusC,EAAsBt+S,GAAe51D,EAAQtI,EAAOm9V,wBAA0Bj/R,GAAe31D,EAEnG,GAAyB,OAArB2tV,GAA6B/zI,EAAMrqO,SAAWo+W,IAAqBh4R,EAAcg4R,IAAqBsmB,GAAsB,CAE9H,MAAM/mB,OAA+CzvW,IAAlCga,EAAO01V,uBAAuC11V,EAAO01V,uBAAyB11V,EAAO21V,4BAA8B1H,EAAahgB,iBAC9IuuC,GAAuBr6J,EAAM7+M,WAAa,GAAK46D,EAAc31D,EAAMktV,KACjEroW,KAAKgnX,iBACRhnX,KAAK+mX,iBAAmBje,GAGtB/zI,EAAM7+M,aACRlW,KAAK0N,KAAK,aAAaojE,EAAYz7D,QAAQ,gEAAgE8F,6BAA+B2tV,EAAiBzzV,QAAQ,MACnK0/M,EAAMjkJ,YAAcg4R,GAG1B,CACF,CACA,cAAAumB,CAAevuB,EAAS8Q,EAAiBuM,GAGvC,MAAM3kY,EAASsnX,EAAQ9gB,UAAUxmW,OACjC,IAAKA,EAEH,OADAwmB,KAAK0N,KAAK,iCACH,EAET,MAAM4hX,EAAexuB,EAAQ9gB,UAAU,GAAG9kU,MACpCq0W,GAAkB3d,EAClB4d,EAAU1uB,EAAQlhB,gBAAkB1F,EAAeo1C,GACzD,GAAIC,IAAmBC,IAAYF,EAAc,CAC/C,MAAM,aACJzf,GACE7vW,KACJi+W,GAAYpO,EAAcsO,EAAerd,GACzC,MAAM2uB,EAAsB3uB,EAAQ9gB,UAAU,GAAG9kU,MAEjD,OADAlb,KAAKQ,IAAI,0BAA0BivX,EAAoBp6W,QAAQ,gBAAgBu8V,EAAkBA,EAAgBjxB,QAAU,SAASmgB,EAAQngB,oBAAoBkvB,EAAeA,EAAatyB,GAAK,mBAAmB/jW,KAC7Mi2Y,CACT,CACA,OAAOH,CACT,CACA,gBAAAI,CAAiB5uB,GAGf,OAAOA,EAAQ1gB,MAAQ0gB,EAAQ9f,gBAAkB8f,EAAQvf,YAAcuf,EAAQpf,WAAa/xU,KAAKhT,IAAImkW,EAAQzf,aADpF,EACkGyf,EAAQvf,WACrI,CACA,gBAAAouC,CAAiB7uB,EAASid,GAExB,IAAI5e,EAAgBn/V,KAAKm/V,cAIzB,GAHIA,EAAgB4e,IAClB5e,GAAiB,IAEI,IAAnBA,IAAkD,IAA1Bn/V,KAAK8mX,gBAAwB,CAGvD,MAAM8I,EAAwD,OAAzB5vX,KAAK4gV,gBACpCA,EAAkBgvC,EAA+B5vX,KAAK4gV,gBAAkBkgB,EAAQlgB,gBAC9D,OAApBA,GAA4B1G,EAAe0G,IAC7Cue,EAAgB4e,EAAUn9B,EACtBA,EAAkB,IACpBue,GAAiB2B,EAAQhgB,eAE3Bqe,EAAgBxvV,KAAKjT,IAAIiT,KAAKhT,IAAIohX,EAAS5e,GAAgB4e,EAAUjd,EAAQhgB,eAC7E9gV,KAAKQ,IAAI,qBAAqBogV,cAA4BgvC,EAA+B,eAAiB,6CAA6CzwB,KACvJn/V,KAAKm/V,cAAgBA,GACZ2B,EAAQ1gB,KAGjB+e,EAAgBn/V,KAAK++V,IAAI+J,kBAAoBiV,EAE7C/9W,KAAKm/V,cAAgBA,EAAgB,EAEvCn/V,KAAK8mX,gBAAkB3nB,CACzB,CACAn/V,KAAK+mX,iBAAmB5nB,CAC1B,CACA,eAAA8tB,GACE,MAAM,MACJl4J,GACE/0N,KAEJ,IAAI0lB,EAAM,EAMV,OALI1lB,KAAKgnX,gBAAkBjyJ,EACzBrvM,EAAMqvM,EAAMjkJ,YACH9wE,KAAK+mX,mBACdrhW,EAAM1lB,KAAK+mX,kBAENrhW,CACT,CACA,qBAAAumW,CAAsB5sC,EAAMsd,GACtB38V,KAAK4mX,YAA0B,gBAAZvnC,EAAK9B,IAAwB8B,EAAKz0C,MAAMrwQ,UAC7Dv6B,KAAK0N,KAAK,YAAY2xU,EAAK9B,KAAKof,EAAO,SAAWA,EAAKj7W,MAAQ,eAAe29V,EAAKn8G,qBACnFljO,KAAKkpX,qBAAqB7pC,GAE9B,CACA,oBAAA6pC,CAAqB7pC,GACdr/U,KAAK2mX,cAAgB3mX,KAAK+oX,mBAAmB1pC,IAASr/U,KAAKsI,QAAUk+W,MACxExmX,KAAKsI,MAAQk+W,GAEjB,CACA,wBAAAqJ,CAAyBC,EAAYlmY,GACnC,GAAIA,EAAKkhY,YAAclhY,EAAKy1V,KAAM,CAChC,MAAMvgV,EAAUkB,KAAKqsX,kBAAkBziY,EAAKkhY,WACxChsX,IACFlV,EAAKy1V,KAAOvgV,EAAQugV,KAExB,CACA,MAAMA,EAAOz1V,EAAKy1V,KAElB,IAAKA,GAAQA,EAAKrhW,OAAS8xY,IAAe9vX,KAAKg5V,OAC7C,OAGA,IAAI+2B,EADN,GAAI/vX,KAAK+oX,mBAAmB1pC,GAG1B,YADAr/U,KAAK0N,KAAK,oDAAoD2xU,EAAKtqU,SAAoD,OAA1Cg7W,EAAqB/vX,KAAK2mX,kBAAuB,EAASoJ,EAAmBh7W,OAG5J,MAAMi7W,EAAoBpmY,EAAKk3W,UAAY1mB,EAAainC,SACpD2O,GACFhwX,KAAK0mX,gBAAgBlL,aAAan8B,GAAM,GAG1C,MAAM0zB,EAAcnpX,EAAKmpX,aACnB,OACJ77U,EAAM,WACNuqS,EAAa,EAAC,YACdotC,GACEkE,GAAe,CAAC,EACpB,GAAIA,GAAe77U,IAAWy5U,IAAmC9B,EAAa,CAC5E7uW,KAAKiwX,wBAAwBjwX,KAAKmnX,iBAClC,MAAM5qQ,EAAQqyP,GAAcC,EAAaptC,GACzCzhU,KAAK0N,KAAK,YAAY2xU,EAAK9B,SAASuyC,KAAczwC,EAAKn8G,sBAAsBt5O,EAAKk3W,6BAA6Br/B,EAAa,KAAKotC,EAAYrN,kBAAkBjlP,OAC/Jw2P,EAAYvyC,UAAW,EACvBxgU,KAAKinX,UAAYj4W,KAAK+7G,YAAY9hI,MAAQszH,EAC1Cv8G,KAAKsI,MAAQk+W,EACf,MAAO,GAAI3X,GAAekE,EAAa,CAErC,GADA/yW,KAAKkwX,oBAAoBJ,KACrBruD,EAAaotC,EAAYrN,aAO3B,YADAviW,EAAOyO,KAAK,GAAG9jB,EAAKk3W,0CAA0Cr/B,MAJzDuuD,GAAqB94V,IAAWy5U,KACnCoC,EAAYvyC,UAAW,EAM7B,MAA2B,MAAfuyC,OAAsB,EAASA,EAAY77U,UAAYy5U,GACjE3wW,KAAKsI,MAAQk+W,GAEbxmX,KAAKsI,MAAQk+W,GAGfxmX,KAAKi5W,eACP,CACA,0BAAAkX,CAA2BvmY,GAEzB,GAAIoW,KAAKsI,QAAUk+W,IAAiBxmX,KAAKsI,QAAUk+W,GAAc,CAC/D,MAAMnnC,EAAOz1V,EAAKy1V,KACZm7B,EAAe5wX,EAAK40E,OACpBw+S,EAAeh9W,KAAKqpX,iBAAiBrpX,KAAK6mX,YAAarM,GAGvDlR,EAAW0T,GAAgBA,EAAanhX,IAAM,GAChDytW,GACFtpW,KAAKypX,sBAAsBzM,EAAanhX,KAAc,MAARwjV,OAAe,EAASA,EAAK30V,WAAa,IAE1F,MAAM0lY,GAAe9mB,EAYrB,OAXI8mB,GAIFpwX,KAAK0N,KAAK,oEAAoE8sW,YAE5En7B,IACFr/U,KAAK0mX,gBAAgB/L,eAAet7B,GACpCr/U,KAAK+mX,iBAAmB1nC,EAAKnkU,OAE/Blb,KAAKuoX,oBACE6H,CACT,CACA,OAAO,CACT,CACA,mBAAAF,CAAoBJ,GACdA,IAAenxB,KAEjB3+V,KAAK2mX,YAAc,MAIhB3mX,KAAKgnX,iBACRhnX,KAAKonX,oBAAqB,GAExBpnX,KAAKsI,QAAUk+W,KACjBxmX,KAAKsI,MAAQk+W,GAEjB,CACA,kBAAA6J,CAAmBt7J,EAAOu7J,EAAY9V,GACpC,IAAKzlJ,EACH,OAIF,MAAMw7J,EAAqB5T,GAAaE,YAAY9nJ,GACpD/0N,KAAK0mX,gBAAgBrM,uBAAuBiW,EAAYC,EAAoB/V,GACxEx6W,KAAKsI,QAAUk+W,IACjBxmX,KAAKuoX,mBAET,CACA,iBAAAA,GACEvoX,KAAKQ,IAAI,uBACTR,KAAK2mX,YAAc,KACnB3mX,KAAK6vW,aAAe,KACpB7vW,KAAKsI,MAAQk+W,EACf,CACA,uBAAAyJ,CAAwB/sJ,GAGtB,IAAKljO,KAAKgnX,eAAgB,CACxBhnX,KAAKonX,oBAAqB,EAC1B,MAAMtmB,EAAU59H,EAAQA,EAAM49H,QAAU,KACzB,MAAXA,GAAmBA,EAAQ1gB,MAE7BpgV,KAAKm/V,eAAiB,EACtBn/V,KAAK2vX,iBAAiB7uB,EAAS,GAC/B9gW,KAAKuoX,qBAELvoX,KAAK+mX,iBAAmB/mX,KAAKm/V,aAEjC,CACF,CACA,uBAAAqxB,CAAwB1F,GACtB9qX,KAAK0N,KAAK,wDAAwDo9W,EAAUvtC,eAAeutC,EAAU5nJ,2CACrGljO,KAAKywX,wBACLzwX,KAAKiwX,wBAAwBjwX,KAAKmnX,iBAClCnnX,KAAKuoX,mBACP,CACA,qBAAAkI,CAAsBv1W,EAAQ,GAC5Blb,KAAK0mX,gBAAgBxK,uBAAuBhhW,EAAOte,IAAUoD,KAAKw6W,cAAc,GAAO,EACzF,CACA,iBAAA8R,CAAkBjtC,EAAMsd,EAAMz5H,EAAOlkH,GACnC,IAAI0xQ,EACJ,MAAM5vB,EAAU59H,EAAM49H,QACtB,IAAKA,EAEH,YADA9gW,KAAK0N,KAAK,2BA4BZ,IAzBe3zB,OAAOiC,KAAKqjW,EAAKvC,mBAAmBl7S,QAAO,CAAC/jD,EAAQG,KACjE,MAAM4zB,EAAOytU,EAAKvC,kBAAkB9+V,GACpC,GAAI4zB,EAAM,CACR,MAAM++W,EAAiB/+W,EAAK+rU,OAAS/rU,EAAK8rU,SAC1C,GAAIizC,GAAkB,EAKpB,OADA3wX,KAAK0N,KAAK,4BAA4B2xU,EAAK9B,MAAMv/V,wBAA2B2yY,MACrE9yY,IAAU,EAEnB,MAAM8kW,EAAQ3jO,EAAU,EAAIstP,GAAiBxL,EAASzhB,EAAMztU,EAAK8rU,SAAU9rU,EAAK+rU,OAAQ/rU,EAAKgsU,SAAUhsU,EAAKisU,QAU5G,OATA79U,KAAK++V,IAAI/zD,QAAQ51F,EAAOw7K,kBAAmB,CACzC9vB,UACA59H,QACAy/G,QACA3kW,OACAqhW,OACAnkU,MAAOtJ,EAAK8rU,SACZviU,IAAKvJ,EAAK+rU,UAEL,CACT,CACA,OAAO9/V,CAAM,IACZ,IACiG,QAA5C,OAAvC6yY,EAAmB1wX,KAAK4mX,iBAAsB,EAAS8J,EAAiBhtY,OAAiB,CACxG,MAAMA,EAAQ,IAAIggB,MAAM,8BAA8B27U,EAAK9B,eAAe8B,EAAKn8G,6DAiB/E,GAhB4B,IAAxBA,EAAMunI,gBAERvnI,EAAMunI,gBACNprB,EAAKv1N,KAAM,EACX9pH,KAAK0mX,gBAAgB/L,eAAet7B,GACpCr/U,KAAK0mX,gBAAgBlL,aAAan8B,GAAM,IAE1Cr/U,KAAK0N,KAAKhqB,EAAMmF,SAChBmX,KAAK++V,IAAI/zD,QAAQ51F,EAAO5yI,MAAO,CAC7BxkF,KAAMm8V,EAAWinC,YACjBtgB,QAAS1mB,EAAay2C,mBACtBt2F,OAAO,EACP72S,QACA27V,OACA7xU,OAAQ,yBAAyB6xU,EAAK9B,gBAAgBr6G,EAAMnuN,UAEzD/U,KAAK++V,IACR,OAEF/+V,KAAK2nX,iBAEP,CACA3nX,KAAKsI,MAAQk+W,GACbxmX,KAAK++V,IAAI/zD,QAAQ51F,EAAO07K,YAAa,CACnCzxC,OACAsd,QAEJ,CACA,eAAAgrB,GACM3nX,KAAK4mX,aACP5mX,KAAK4mX,WAAW57O,UAChBhrI,KAAK4mX,WAAa,KAEtB,CACA,kBAAAmK,CAAmBnnY,GACE,kBAAfA,EAAKpF,QACPwb,KAAK0mX,gBAAgBpK,qBACrBt8W,KAAK2nX,kBACL3nX,KAAKiwX,wBAAwBjwX,KAAKmnX,iBAClCnnX,KAAKuoX,oBAET,CACA,SAAIjgX,CAAM2zK,GACR,MAAMuvD,EAAgBxrO,KAAK22O,OACvBnL,IAAkBvvD,IACpBj8K,KAAK22O,OAAS16D,EACdj8K,KAAKQ,IAAI,GAAGgrO,MAAkBvvD,KAElC,CACA,SAAI3zK,GACF,OAAOtI,KAAK22O,MACd,EAGF,MAAMq6I,GACJ,WAAAnvW,GACE7hB,KAAKixX,OAAS,GACdjxX,KAAKkxX,WAAa,CACpB,CACA,IAAA71Y,CAAKugI,GACH57G,KAAKixX,OAAO51Y,KAAKugI,GACjB57G,KAAKkxX,YAAct1Q,EAAMpiI,MAC3B,CACA,KAAAyxG,GACE,MAAM,OACJgmS,EAAM,WACNC,GACElxX,KACJ,IAAIniB,EACJ,OAAKozY,EAAOz3Y,QAGVqE,EAD2B,IAAlBozY,EAAOz3Y,OACPy3Y,EAAO,GAYtB,SAA2BA,EAAQC,GACjC,MAAMrzY,EAAS,IAAImvG,WAAWkkS,GAC9B,IAAIpjW,EAAS,EACb,IAAK,IAAIv0C,EAAI,EAAGA,EAAI03Y,EAAOz3Y,OAAQD,IAAK,CACtC,MAAMqiI,EAAQq1Q,EAAO13Y,GACrBsE,EAAO4yC,IAAImrF,EAAO9tF,GAClBA,GAAU8tF,EAAMpiI,MAClB,CACA,OAAOqE,CACT,CAnBeszY,CAAkBF,EAAQC,GAErClxX,KAAKuW,QACE14B,GAPE,IAAImvG,WAAW,EAQ1B,CACA,KAAAz2E,GACEvW,KAAKixX,OAAOz3Y,OAAS,EACrBwmB,KAAKkxX,WAAa,CACpB,EAsCF,SAASE,GAAWpzY,EAAO,GAAIqzY,EAAiB,KAC9C,MAAO,CACLrzY,OACA6N,IAAK,EACL+mI,KAAM,EACNy+P,iBACAC,gBAAiB,EACjB3kC,QAAS,GACTigC,QAAS,EAEb,CAEA,MAAM2E,GACJ,WAAA1vW,GACE7hB,KAAKwxX,iBAAc,EACnBxxX,KAAKyxX,eAAY,EACjBzxX,KAAK0xX,WAAa,EAClB1xX,KAAK2xX,WAAa,KAClB3xX,KAAK4xX,QAAU,KACf5xX,KAAKsnX,QAAU,KACftnX,KAAK6xX,QAAU,IACjB,CACA,gBAAAC,CAAiB5zC,EAAamc,EAAY7C,EAAYu6B,GACpD/xX,KAAKyxX,UAAY,CACfzzY,KAAM,MACN6N,GAAI,EACJ+mI,KAAM,EACNy+P,eAAgB,IAChBC,eAAgB,EAChB3kC,QAAS,GACTigC,QAAS,EAEb,CACA,cAAAoF,CAAeC,GACbjyX,KAAKsnX,QAAU2K,EACfjyX,KAAKkyX,iBACP,CACA,eAAAA,GACElyX,KAAK4xX,QAAU,KACf5xX,KAAK6xX,QAAU,KACf7xX,KAAK0xX,WAAa,CACpB,CACA,QAAAS,CAASvoY,EAAMkkC,GACb,OAAO,CACT,CACA,WAAAskW,CAAY/gQ,EAAOznI,EAAMkkC,GAAS,CAGlC,KAAAukW,CAAMzoY,EAAM4iW,GACNxsV,KAAK2xX,aACP/nY,EAAOuiW,GAAiBnsV,KAAK2xX,WAAY/nY,GACzCoW,KAAK2xX,WAAa,MAEpB,IAEIW,EAFAtsC,EAAUR,GAAW57V,EAAM,GAC3BkkC,EAASk4T,EAAUA,EAAQxsW,OAAS,EAExC,MAAM63I,EAAQrxH,KAAKwxX,YACb1rB,EAAW9lW,KAAKyxX,UAChB5wX,EAAYmlV,EAAUL,GAAaK,QAAWptV,EAC9Cpf,EAASoQ,EAAKpQ,OAmBpB,KAlBqB,OAAjBwmB,KAAK4xX,SAAwC,IAApB5xX,KAAK0xX,YAAoBx3C,EAAer5U,MACnEb,KAAK4xX,QAAUW,GAAU1xX,EAAW2rV,EAAYxsV,KAAKsnX,SACrDtnX,KAAK6xX,QAAU7xX,KAAK4xX,SAED,OAAjB5xX,KAAK6xX,UACP7xX,KAAK6xX,QAAU7xX,KAAK4xX,SAIlB5rC,GAAWA,EAAQxsW,OAAS,GAC9BssX,EAASnZ,QAAQtxW,KAAK,CACpB2zW,IAAKhvV,KAAK6xX,QACVW,IAAKxyX,KAAK6xX,QACVjoY,KAAMo8V,EACNhoW,KAAMqnX,GACN36W,SAAUkY,OAAO63R,oBAGd3sQ,EAASt0C,GAAQ,CACtB,GAAIwmB,KAAKmyX,SAASvoY,EAAMkkC,GAAS,CAC/B,MAAM7hB,EAAQjM,KAAKoyX,YAAY/gQ,EAAOznI,EAAMkkC,GACxC7hB,GACFjM,KAAK0xX,aACL1xX,KAAK6xX,QAAU5lX,EAAMu5G,OAAOwpO,IAC5BlhU,GAAU7hB,EAAMzyB,OAChB84Y,EAAgBxkW,GAEhBA,EAASt0C,CAEb,MAAWksW,GAAW97V,EAAMkkC,IAE1Bk4T,EAAUR,GAAW57V,EAAMkkC,GAC3Bg4U,EAASnZ,QAAQtxW,KAAK,CACpB2zW,IAAKhvV,KAAK6xX,QACVW,IAAKxyX,KAAK6xX,QACVjoY,KAAMo8V,EACNhoW,KAAMqnX,GACN36W,SAAUkY,OAAO63R,oBAEnB3sQ,GAAUk4T,EAAQxsW,OAClB84Y,EAAgBxkW,GAEhBA,IAEF,GAAIA,IAAWt0C,GAAU84Y,IAAkB94Y,EAAQ,CACjD,MAAMi5Y,EAAcptC,GAAWz7V,EAAM0oY,GACjCtyX,KAAK2xX,WACP3xX,KAAK2xX,WAAaxlC,GAAiBnsV,KAAK2xX,WAAYc,GAEpDzyX,KAAK2xX,WAAac,CAEtB,CACF,CACA,MAAO,CACLlwB,WAAYlxO,EACZqhQ,WAAYtB,KACZtrB,WACAiB,UAAWqqB,KAEf,CACA,cAAAuB,CAAe/oY,EAAM+nW,EAASnF,GAC5B,OAAOrtU,QAAQE,OAAO,IAAI3b,MAAM,IAAI1D,6DACtC,CACA,KAAAirF,CAAMuhQ,GAEJ,MAAMmlC,EAAa3xX,KAAK2xX,WAKxB,OAJIA,IACF3xX,KAAK2xX,WAAa,KAClB3xX,KAAKqyX,MAAMV,EAAY,IAElB,CACLpvB,WAAYviW,KAAKwxX,YACjBkB,WAAYtB,KACZtrB,SAAU9lW,KAAKyxX,UACf1qB,UAAWqqB,KAEf,CACA,OAAApmP,GAAW,EASb,MAAMunP,GAAY,CAAC1xX,EAAW2rV,EAAY86B,KACxC,GAAIptC,EAAer5U,GACjB,OAAmB,GAAZA,EAGT,OAAoB,IAAb2rV,GADW86B,EAA6B,IAAnBA,EAAQt6B,SAAmBs6B,EAAQv/B,UAAY,EACtC,EAmIvC,SAAS6qC,GAAkBhpY,EAAMkkC,GAC/B,OAAwB,MAAjBlkC,EAAKkkC,IAAkD,OAAV,IAAnBlkC,EAAKkkC,EAAS,GACjD,CACA,SAAS+kW,GAAgBjpY,EAAMkkC,GAC7B,OAA0B,EAAnBlkC,EAAKkkC,EAAS,GAAY,EAAI,CACvC,CACA,SAASglW,GAAmBlpY,EAAMkkC,GAChC,OAA2B,EAAnBlkC,EAAKkkC,EAAS,KAAc,GAAKlkC,EAAKkkC,EAAS,IAAM,GAAwB,IAAnBlkC,EAAKkkC,EAAS,MAAe,CACjG,CAIA,SAASilW,GAAWnpY,EAAMkkC,GAIxB,OAAOA,EAAS,EAAIlkC,EAAKpQ,QAAUo5Y,GAAkBhpY,EAAMkkC,EAC7D,CAIA,SAASklW,GAAQppY,EAAMkkC,GAGrB,GAAIilW,GAAWnpY,EAAMkkC,GAAS,CAE5B,MAAMmlW,EAAeJ,GAAgBjpY,EAAMkkC,GAC3C,GAAIA,EAASmlW,GAAgBrpY,EAAKpQ,OAChC,OAAO,EAGT,MAAM05Y,EAAcJ,GAAmBlpY,EAAMkkC,GAC7C,GAAIolW,GAAeD,EACjB,OAAO,EAET,MAAME,EAAYrlW,EAASolW,EAC3B,OAAOC,IAAcvpY,EAAKpQ,QAAUu5Y,GAAWnpY,EAAMupY,EACvD,CACA,OAAO,CACT,CACA,SAASC,GAAgB/hQ,EAAOpiG,EAAUrlC,EAAMkkC,EAAQusU,GACtD,IAAKhpO,EAAMgiQ,WAAY,CACrB,MAAMzgX,EAtKV,SAAwBqc,EAAUrlC,EAAMkkC,EAAQusU,GAC9C,IAAIi5B,EACAC,EACAC,EACA5gX,EACJ,MAAMtD,EAAYH,UAAUG,UAAU7I,cAChCgtX,EAAgBp5B,EAChBq5B,EAAoB,CAAC,KAAO,MAAO,KAAO,KAAO,MAAO,KAAO,KAAO,MAAO,KAAO,KAAO,MAAO,IAAM,MAE9GJ,EAAqD,IAAf,IAAnB1pY,EAAKkkC,EAAS,MAAe,GAChD,MAAM6lW,GAAwC,GAAnB/pY,EAAKkkC,EAAS,MAAe,EACxD,KAAI6lW,EAAoBD,EAAkBl6Y,OAAS,GAyGnD,OA9FAg6Y,GAAwC,EAAnB5pY,EAAKkkC,EAAS,KAAc,EAEjD0lW,IAAyC,IAAnB5pY,EAAKkkC,EAAS,MAAe,EACnD7uB,EAAOuB,IAAI,kBAAkB65V,gBAAyBi5B,oBAAiCK,KAEnF,WAAWv0X,KAAKkQ,GACdqkX,GAAqB,GACvBL,EAAiB,EACjB1gX,EAAS,IAAIh5B,MAAM,GAInB25Y,EAA6BI,EAAoB,IAEjDL,EAAiB,EACjB1gX,EAAS,IAAIh5B,MAAM,GACnB25Y,EAA6BI,IAGY,IAAlCrkX,EAAUl0B,QAAQ,YAC3Bk4Y,EAAiB,EACjB1gX,EAAS,IAAIh5B,MAAM,GACnB25Y,EAA6BI,IAK7BL,EAAiB,EACjB1gX,EAAS,IAAIh5B,MAAM,GAEfygX,KAAqD,IAAtCA,EAAWj/W,QAAQ,gBAA6D,IAArCi/W,EAAWj/W,QAAQ,gBAAyBi/W,GAAcs5B,GAAqB,EAI3IJ,EAA6BI,EAAoB,IAI7Ct5B,IAAmD,IAArCA,EAAWj/W,QAAQ,eAAwBu4Y,GAAqB,GAA2B,IAAtBH,GAA2B,WAAWp0X,KAAKkQ,MAAgB+qV,GAAoC,IAAtBm5B,KAC9JF,EAAiB,EACjB1gX,EAAS,IAAIh5B,MAAM,IAErB25Y,EAA6BI,IAqCjC/gX,EAAO,GAAK0gX,GAAkB,EAE9B1gX,EAAO,KAA2B,GAApB+gX,IAA6B,EAC3C/gX,EAAO,KAA2B,EAApB+gX,IAA6B,EAE3C/gX,EAAO,IAAM4gX,GAAqB,EACX,IAAnBF,IAEF1gX,EAAO,KAAoC,GAA7B2gX,IAAsC,EACpD3gX,EAAO,IAAmC,EAA7B2gX,IAAsC,EAGnD3gX,EAAO,IAAM,EACbA,EAAO,GAAK,GAEP,CACLA,SACAygX,WAAYK,EAAkBC,GAC9BC,aAAcJ,EACd/pC,MAAO,WAAa6pC,EACpBG,iBA9GF,CACE,MAAM/vY,EAAQ,IAAIggB,MAAM,+BAA+BiwX,KACvD1kW,EAAS4kW,KAAKz+K,EAAO5yI,MAAO4yI,EAAO5yI,MAAO,CACxCxkF,KAAMm8V,EAAWinC,YACjBtgB,QAAS1mB,EAAay2C,mBACtBt2F,OAAO,EACP72S,QACA8pB,OAAQ9pB,EAAMmF,SAGlB,CAsGF,CA2CmBirY,CAAe7kW,EAAUrlC,EAAMkkC,EAAQusU,GACtD,IAAKznV,EACH,OAEFy+G,EAAMz+G,OAASA,EAAOA,OACtBy+G,EAAMgiQ,WAAazgX,EAAOygX,WAC1BhiQ,EAAMuiQ,aAAehhX,EAAOghX,aAC5BviQ,EAAMo4N,MAAQ72U,EAAO62U,MACrBp4N,EAAMoiQ,cAAgB7gX,EAAO6gX,cAC7Bx0X,EAAOuB,IAAI,gBAAgB6wH,EAAMo4N,eAAe72U,EAAOygX,wBAAwBzgX,EAAOghX,eACxF,CACF,CACA,SAASG,GAAiBV,GACxB,OAAO,OAAeA,CACxB,CAgBA,SAASW,GAAc3iQ,EAAOznI,EAAMkkC,EAAQkhU,EAAK0iC,GAC/C,MACMuC,EAAQjlC,EAAM0iC,EADEqC,GAAiB1iQ,EAAMgiQ,YAEvCvpY,EAlBR,SAA0BF,EAAMkkC,GAE9B,MAAMmlW,EAAeJ,GAAgBjpY,EAAMkkC,GAC3C,GAAIA,EAASmlW,GAAgBrpY,EAAKpQ,OAAQ,CAExC,MAAM05Y,EAAcJ,GAAmBlpY,EAAMkkC,GAAUmlW,EACvD,GAAIC,EAAc,EAEhB,MAAO,CACLD,eACAC,cAGN,CACF,CAIiBgB,CAAiBtqY,EAAMkkC,GACtC,IAAI4oB,EACJ,GAAI5sD,EAAQ,CACV,MAAM,YACJopY,EAAW,aACXD,GACEnpY,EACEqqY,EAAUlB,EAAeC,EACzB/oI,EAAUx6O,KAAKhT,IAAI,EAAGmxB,EAASqmW,EAAUvqY,EAAKpQ,QAEhD2wQ,GACFzzM,EAAO,IAAIs2C,WAAWmnS,EAAUlB,GAChCv8U,EAAKjmB,IAAI7mC,EAAKm6V,SAASj2T,EAASmlW,EAAcrpY,EAAKpQ,QAAS,IAE5Dk9D,EAAO9sD,EAAKm6V,SAASj2T,EAASmlW,EAAcnlW,EAASqmW,GAEvD,MAAMC,EAAU,CACd19U,OACAs4S,IAAKilC,GAKP,OAHK9pI,GACH94H,EAAMs7N,QAAQtxW,KAAK+4Y,GAEd,CACL5uQ,OAAQ4uQ,EACR56Y,OAAQ26Y,EACRhqI,UAEJ,CAEA,MAAM3wQ,EAASoQ,EAAKpQ,OAASs0C,EAC7B4oB,EAAO,IAAIs2C,WAAWxzG,GACtBk9D,EAAKjmB,IAAI7mC,EAAKm6V,SAASj2T,EAAQlkC,EAAKpQ,QAAS,GAK7C,MAAO,CACLgsI,OALa,CACb9uE,OACAs4S,IAAKilC,GAILz6Y,SACA2wQ,SAAU,EAEd,CAMA,IAAIkqI,GAAkB,KACtB,MAAMC,GAAc,CAAC,GAAI,GAAI,GAAI,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,IAAK,IAAK,IAAK,KACvUC,GAAkB,CAAC,MAAO,KAAO,KAAO,MAAO,KAAO,KAAO,MAAO,KAAO,KAC3EC,GAAsB,CAE5B,CAAC,EAED,GAEA,IAEA,IAGA,CAAC,EAED,EAEA,EAEA,GAGA,CAAC,EAED,GAEA,IAEA,IAGA,CAAC,EAED,IAEA,IAEA,KAEMC,GAAc,CAAC,EAErB,EAEA,EAEA,GAEA,SAASC,GAAcrjQ,EAAOznI,EAAMkkC,EAAQkhU,EAAK0iC,GAE/C,GAAI5jW,EAAS,GAAKlkC,EAAKpQ,OACrB,OAEF,MAAMsQ,EAAS6qY,GAAY/qY,EAAMkkC,GACjC,GAAIhkC,GAAUgkC,EAAShkC,EAAOopY,aAAetpY,EAAKpQ,OAAQ,CACxD,MACMy6Y,EAAQjlC,EAAM0iC,GAD2B,IAAzB5nY,EAAO8qY,gBAA0B9qY,EAAO+qY,YAExDrvQ,EAAS,CACb9uE,KAAM9sD,EAAKm6V,SAASj2T,EAAQA,EAAShkC,EAAOopY,aAC5ClkC,IAAKilC,EACLzB,IAAKyB,GAMP,OAJA5iQ,EAAMz+G,OAAS,GACfy+G,EAAMuiQ,aAAe9pY,EAAO8pY,aAC5BviQ,EAAMgiQ,WAAavpY,EAAO+qY,WAC1BxjQ,EAAMs7N,QAAQtxW,KAAKmqI,GACZ,CACLA,SACAhsI,OAAQsQ,EAAOopY,YACf/oI,QAAS,EAEb,CACF,CACA,SAASwqI,GAAY/qY,EAAMkkC,GACzB,MAAMgnW,EAAclrY,EAAKkkC,EAAS,IAAM,EAAI,EACtCinW,EAAYnrY,EAAKkkC,EAAS,IAAM,EAAI,EACpCknW,EAAeprY,EAAKkkC,EAAS,IAAM,EAAI,GACvCmnW,EAAkBrrY,EAAKkkC,EAAS,IAAM,EAAI,EAChD,GAAoB,IAAhBgnW,GAAsC,IAAjBE,GAAuC,KAAjBA,GAA2C,IAApBC,EAAuB,CAC3F,MAAMC,EAAatrY,EAAKkkC,EAAS,IAAM,EAAI,EACrCqnW,EAAcvrY,EAAKkkC,EAAS,IAAM,EAElCsnW,EAAkE,IAAxDd,GAA+B,IADN,IAAhBQ,EAAoB,EAAIC,EAA0B,IAAdA,EAAkB,EAAI,GAC/BC,EAAe,GAE7DH,EAAaN,GAAsC,GADb,IAAhBO,EAAoB,EAAoB,IAAhBA,EAAoB,EAAI,GACfG,GACvDrB,EAA+B,IAAhBuB,EAAoB,EAAI,EACvCE,EAAoBb,GAAoBM,GAAaC,GACrDO,EAAcb,GAAYM,GAC1BH,EAAsC,EAApBS,EAAwBC,EAC1CpC,EAAcvjX,KAAKq2B,MAAMqvV,EAAoBD,EAAUP,EAAaK,GAAcI,EACxF,GAAwB,OAApBjB,GAA0B,CAC5B,MACMx2Y,GADYsxB,UAAUG,WAAa,IAChB/L,MAAM,kBAC/B8wX,GAAkBx2Y,EAASgf,SAAShf,EAAO,IAAM,CACnD,CAMA,QALwBw2Y,IAAmBA,IAAmB,IAC3B,IAAdU,GAAmBK,GAAW,OAA0B,IAAhBD,IAE3DvrY,EAAKkkC,EAAS,GAAwB,IAAnBlkC,EAAKkkC,EAAS,IAE5B,CACL+mW,aACAjB,eACAV,cACA0B,kBAEJ,CACF,CACA,SAASW,GAAgB3rY,EAAMkkC,GAC7B,OAAwB,MAAjBlkC,EAAKkkC,IAAkD,OAAV,IAAnBlkC,EAAKkkC,EAAS,KAAqD,KAAV,EAAnBlkC,EAAKkkC,EAAS,GACvF,CACA,SAAS0nW,GAAS5rY,EAAMkkC,GAItB,OAAOA,EAAS,EAAIlkC,EAAKpQ,QAAU+7Y,GAAgB3rY,EAAMkkC,EAC3D,CAKA,SAAS2nW,GAAM7rY,EAAMkkC,GAGnB,GAAIA,EAAS,EAAIlkC,EAAKpQ,QAAU+7Y,GAAgB3rY,EAAMkkC,GAAS,CAE7D,MAAMmlW,EAAe,EAEfnpY,EAAS6qY,GAAY/qY,EAAMkkC,GACjC,IAAIolW,EAAcD,EACJ,MAAVnpY,GAAkBA,EAAOopY,cAC3BA,EAAcppY,EAAOopY,aAEvB,MAAMC,EAAYrlW,EAASolW,EAC3B,OAAOC,IAAcvpY,EAAKpQ,QAAUg8Y,GAAS5rY,EAAMupY,EACrD,CACA,OAAO,CACT,CAiEA,MAAMuC,GAAoB,iBAmI1B,MAAMC,GAAe,CAAC/rY,EAAMkkC,KAE1B,IAAI8nW,EAAO,EACPC,EAAU,EACd/nW,GAAU+nW,EACV,MAAMvpC,EAAO,IAAIu1B,YAAY,GACvBzlJ,EAAO,IAAIylJ,YAAY,GACvB92B,EAAO,IAAI/9P,WAAW,GAC5B,KAAO6oS,EAAU,GAAG,CAClB9qC,EAAK,GAAKnhW,EAAKkkC,GAEf,MAAMw8F,EAAO36G,KAAKjT,IAAIm5X,EAAS,GACzB5wX,EAAQ,EAAIqlH,EAClB8xG,EAAK,GAAK,aAAe,GAAKn3N,GAASA,EACvCqnV,EAAK,IAAMvB,EAAK,GAAK3uH,EAAK,KAAOn3N,EACjC2wX,EAAQA,EAAiBA,GAAQtrQ,EAAOgiO,EAAK,GAA9BA,EAAK,GACpBx+T,GAAU,EACV+nW,GAAWvrQ,CACb,CACA,OAAOsrQ,CAAI,EAGb,MAAME,WAAmBvE,GACvB,WAAA1vW,CAAYoN,GACV7I,QACApmB,KAAKivB,cAAW,EAChBjvB,KAAKivB,SAAWA,CAClB,CACA,gBAAA6iW,CAAiB5zC,EAAamc,EAAY7C,EAAYu6B,GACpD3rW,MAAM0rW,iBAAiB5zC,EAAamc,EAAY7C,EAAYu6B,GAC5D/xX,KAAKwxX,YAAc,CACjBx2Y,UAAW,aACXgD,KAAM,QACN6N,GAAI,EACJ+mI,KAAM,EACN0+P,eAAgB,EAChByE,aAAc,MACdppC,QAAS,GACT8mC,cAAep5B,EACf3vW,SAAUqnY,EACVV,eAAgB,IAChBzE,QAAS,EAEb,CACA,QAAAuF,CAASvoY,EAAMkkC,GACb,OAAOA,EAAS,GAAKlkC,EAAKpQ,MAC5B,CACA,WAAA44Y,CAAY/gQ,EAAOznI,EAAMkkC,GACvB,MAAMolW,EAAcd,GAAY/gQ,EAAOznI,EAAMkkC,EAAQ9tB,KAAK4xX,QAAS5xX,KAAK0xX,YACxE,IAAqB,IAAjBwB,EAAoB,CAEtB,MAAO,CACL1tQ,OAFa6L,EAAMs7N,QAAQt7N,EAAMs7N,QAAQnzW,OAAS,GAGlDA,OAAQ05Y,EACR/oI,QAAS,EAEb,CACF,CACA,YAAOsrI,CAAM7rY,GACX,IAAKA,EACH,OAAO,EAET,MAAMo8V,EAAUR,GAAW57V,EAAM,GACjC,IAAKo8V,EACH,OAAO,EAIT,MAAMl4T,EAASk4T,EAAQxsW,OACvB,OAAqB,KAAjBoQ,EAAKkkC,IAAyC,MAArBlkC,EAAKkkC,EAAS,SAAyCl1B,IAA1B+sV,GAAaK,IAEvE2vC,GAAa/rY,EAAMkkC,GAAU,EAI/B,EAEF,SAASskW,GAAY/gQ,EAAOznI,EAAMsxB,EAAO8zU,EAAK0iC,GAC5C,GAAIx2W,EAAQ,EAAItxB,EAAKpQ,OACnB,OAAQ,EAEV,GAAoB,KAAhBoQ,EAAKsxB,IAAuC,MAApBtxB,EAAKsxB,EAAQ,GACvC,OAAQ,EAIV,MAAM86W,EAAmBpsY,EAAKsxB,EAAQ,IAAM,EAC5C,GAAI86W,GAAoB,EACtB,OAAQ,EAEV,MACMnB,EADkB,CAAC,KAAO,MAAO,MACJmB,GAG7BC,EAAkC,GAAlBrsY,EAAKsxB,EAAQ,GAE7Bg4W,EAAmE,EADpD,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,IAAK,GAAI,GAAI,IAAK,GAAI,IAAK,IAAK,GAAI,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KAAM,IAAK,IAAK,KAAM,IAAK,IAAK,KAAM,IAAK,IAAK,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,MACniB,EAAhB+C,EAAoBD,GACrD,GAAI96W,EAAQg4W,EAActpY,EAAKpQ,OAC7B,OAAQ,EAIV,MAAM27Y,EAAcvrY,EAAKsxB,EAAQ,IAAM,EACvC,IAAIg7W,EAAY,EACI,IAAhBf,EACFe,GAAa,GAEK,EAAdf,GAAmC,IAAhBA,IACrBe,GAAa,GAEG,EAAdf,IACFe,GAAa,IAGjB,MAAMC,GAASvsY,EAAKsxB,EAAQ,IAAM,EAAItxB,EAAKsxB,EAAQ,KAAO,GAAKg7W,EAAY,EAErEtC,EADc,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GACTuB,GAAegB,EAG1CP,EAAOhsY,EAAKsxB,EAAQ,IAAM,EAC1Bk7W,EAA0B,EAAlBxsY,EAAKsxB,EAAQ,GACrBtI,EAAS,IAAIo6E,WAAW,CAACgpS,GAAoB,EAAIJ,GAAQ,EAAIQ,GAAS,GAAY,EAARA,IAAc,EAAIjB,GAAe,EAAIgB,GAAS,EAAIF,GAAiB,EAAGA,GAAiB,EAAI,MAErKhC,EAAQjlC,EAAM0iC,GADE,KAAOmD,EAAa,KAEpCn+U,EAAO9sD,EAAKm6V,SAAS7oU,EAAOA,EAAQg4W,GAQ1C,OAPA7hQ,EAAMz+G,OAASA,EACfy+G,EAAMuiQ,aAAeA,EACrBviQ,EAAMgiQ,WAAawB,EACnBxjQ,EAAMs7N,QAAQtxW,KAAK,CACjBq7D,OACAs4S,IAAKilC,IAEAf,CACT,CAEA,MAAMmD,GACJ,WAAAx0W,GACE7hB,KAAKs2X,YAAc,IACrB,CACA,iBAAAC,CAAkBr8Y,EAAK80W,EAAKwjC,EAAKnyX,GAC/B,MAAO,CACLnmB,MACA+xB,OAAO,EACP+iV,MACAwjC,MACAgE,MAAO,GACPn2X,QACA7mB,OAAQ,EAEZ,CACA,cAAAi9Y,CAAe9pC,GACb,IAAI+pC,EACJ,IACIC,EADAL,EAAct2X,KAAKs2X,YAMvB,GAHKA,GAA4C,IAA7BA,EAAYE,MAAMh9Y,SACpC88Y,EAAc3pC,EAAQA,EAAQnzW,OAAS,IAEL,OAA/Bk9Y,EAAeJ,IAAwBI,EAAaF,MAAO,CAC9D,MAAMA,EAAQF,EAAYE,MAC1BG,EAAWH,EAAMA,EAAMh9Y,OAAS,EAClC,CACA,OAAOm9Y,CACT,CACA,cAAAC,CAAeN,EAAa5D,GAC1B,GAAI4D,EAAYE,MAAMh9Y,QAAU88Y,EAAYrqX,MAAO,CAEjD,QAAwBrT,IAApB09X,EAAYtnC,IAAmB,CACjC,MAAMrC,EAAU+lC,EAAW/lC,QACrBkqC,EAAYlqC,EAAQnzW,OAC1B,IAAIq9Y,EAOF,YADAnE,EAAW9F,UANE,CACb,MAAMkK,EAAanqC,EAAQkqC,EAAY,GACvCP,EAAYtnC,IAAM8nC,EAAW9nC,IAC7BsnC,EAAY9D,IAAMsE,EAAWtE,GAC/B,CAKF,CACAE,EAAW/lC,QAAQtxW,KAAKi7Y,EAC1B,CACIA,EAAYj2X,MAAM7mB,QACpBylB,EAAOuB,IAAI81X,EAAYtnC,IAAM,IAAMsnC,EAAY9D,IAAM,IAAM8D,EAAYj2X,MAE3E,EAOF,MAAM02X,GACJ,WAAAl1W,CAAYj4B,GACVoW,KAAKpW,UAAO,EACZoW,KAAKg3X,oBAAiB,EACtBh3X,KAAKooF,UAAO,EACZpoF,KAAKi3X,mBAAgB,EACrBj3X,KAAKpW,KAAOA,EAEZoW,KAAKg3X,eAAiBptY,EAAK8nG,WAE3B1xF,KAAKooF,KAAO,EAEZpoF,KAAKi3X,cAAgB,CACvB,CAGA,QAAAC,GACE,MAAMttY,EAAOoW,KAAKpW,KACZotY,EAAiBh3X,KAAKg3X,eACtBxoT,EAAW5kF,EAAK8nG,WAAaslS,EAC7BG,EAAe,IAAInqS,WAAW,GAC9BoqS,EAAiBznX,KAAKjT,IAAI,EAAGs6X,GACnC,GAAuB,IAAnBI,EACF,MAAM,IAAI1zX,MAAM,sBAElByzX,EAAa1mW,IAAI7mC,EAAKm6V,SAASv1Q,EAAUA,EAAW4oT,IACpDp3X,KAAKooF,KAAO,IAAIgD,SAAS+rS,EAAaplS,QAAQ4oD,UAAU,GAExD36I,KAAKi3X,cAAiC,EAAjBG,EACrBp3X,KAAKg3X,gBAAkBI,CACzB,CAGA,QAAAC,CAASjjY,GACP,IAAIkjY,EACJljY,EAAQub,KAAKjT,IAAItI,EAA6B,EAAtB4L,KAAKg3X,eAAqBh3X,KAAKi3X,eACnDj3X,KAAKi3X,cAAgB7iY,GACvB4L,KAAKooF,OAASh0F,EACd4L,KAAKi3X,eAAiB7iY,IAGtBkjY,GADAljY,GAAS4L,KAAKi3X,gBACO,EACrB7iY,GAASkjY,GAAa,EACtBt3X,KAAKg3X,gBAAkBM,EACvBt3X,KAAKk3X,WACLl3X,KAAKooF,OAASh0F,EACd4L,KAAKi3X,eAAiB7iY,EAE1B,CAGA,QAAAmjY,CAASp1Y,GACP,IAAImoI,EAAO36G,KAAKjT,IAAIsD,KAAKi3X,cAAe90Y,GACxC,MAAMq1Y,EAAOx3X,KAAKooF,OAAS,GAAKkiC,EAKhC,GAJInoI,EAAO,IACT8c,EAAOvb,MAAM,2CAEfsc,KAAKi3X,eAAiB3sQ,EAClBtqH,KAAKi3X,cAAgB,EACvBj3X,KAAKooF,OAASkiC,MACT,MAAItqH,KAAKg3X,eAAiB,GAG/B,MAAM,IAAItzX,MAAM,qBAFhB1D,KAAKk3X,UAGP,CAEA,OADA5sQ,EAAOnoI,EAAOmoI,EACVA,EAAO,GAAKtqH,KAAKi3X,cACZO,GAAQltQ,EAAOtqH,KAAKu3X,SAASjtQ,GAE7BktQ,CAEX,CAGA,MAAAC,GACE,IAAIC,EACJ,IAAKA,EAAmB,EAAGA,EAAmB13X,KAAKi3X,gBAAiBS,EAClE,GAAsD,KAAjD13X,KAAKooF,KAAO,aAAesvS,GAI9B,OAFA13X,KAAKooF,OAASsvS,EACd13X,KAAKi3X,eAAiBS,EACfA,EAKX,OADA13X,KAAKk3X,WACEQ,EAAmB13X,KAAKy3X,QACjC,CAGA,OAAAE,GACE33X,KAAKq3X,SAAS,EAAIr3X,KAAKy3X,SACzB,CAGA,MAAAG,GACE53X,KAAKq3X,SAAS,EAAIr3X,KAAKy3X,SACzB,CAGA,OAAAI,GACE,MAAMC,EAAM93X,KAAKy3X,SACjB,OAAOz3X,KAAKu3X,SAASO,EAAM,GAAK,CAClC,CAGA,MAAAC,GACE,MAAMP,EAAOx3X,KAAK63X,UAClB,OAAI,EAAOL,EAEF,EAAIA,IAAS,GAEZ,GAAKA,IAAS,EAE1B,CAIA,WAAAQ,GACE,OAA4B,IAArBh4X,KAAKu3X,SAAS,EACvB,CAGA,SAAAU,GACE,OAAOj4X,KAAKu3X,SAAS,EACvB,CAGA,UAAAW,GACE,OAAOl4X,KAAKu3X,SAAS,GACvB,CAGA,QAAAY,GACE,OAAOn4X,KAAKu3X,SAAS,GACvB,CASA,eAAAa,CAAgBhkY,GACd,IAEIikY,EAFAC,EAAY,EACZC,EAAY,EAEhB,IAAK,IAAI51X,EAAI,EAAGA,EAAIvO,EAAOuO,IACP,IAAd41X,IACFF,EAAar4X,KAAK+3X,SAClBQ,GAAaD,EAAYD,EAAa,KAAO,KAE/CC,EAA0B,IAAdC,EAAkBD,EAAYC,CAE9C,CAUA,OAAAC,GACE,IAIIC,EACAC,EACAn/Y,EANAo/Y,EAAsB,EACtBC,EAAuB,EACvBC,EAAqB,EACrBC,EAAwB,EAI5B,MAAMb,EAAYj4X,KAAKi4X,UAAUv3X,KAAKV,MAChCu3X,EAAWv3X,KAAKu3X,SAAS72X,KAAKV,MAC9B63X,EAAU73X,KAAK63X,QAAQn3X,KAAKV,MAC5Bg4X,EAAch4X,KAAKg4X,YAAYt3X,KAAKV,MACpCq3X,EAAWr3X,KAAKq3X,SAAS32X,KAAKV,MAC9B43X,EAAS53X,KAAK43X,OAAOl3X,KAAKV,MAC1B23X,EAAU33X,KAAK23X,QAAQj3X,KAAKV,MAC5Bo4X,EAAkBp4X,KAAKo4X,gBAAgB13X,KAAKV,MAClDi4X,IACA,MAAMc,EAAad,IAMnB,GALAV,EAAS,GACTF,EAAS,GACTY,IACAN,IAEmB,MAAfoB,GAAqC,MAAfA,GAAqC,MAAfA,GAAqC,MAAfA,GAAqC,KAAfA,GAAoC,KAAfA,GAAoC,KAAfA,GAAoC,MAAfA,GAAqC,MAAfA,EAAoB,CACnM,MAAMC,EAAkBnB,IAQxB,GAPwB,IAApBmB,GACF3B,EAAS,GAGXM,IACAA,IACAN,EAAS,GACLW,IAGF,IADAU,EAAuC,IAApBM,EAAwB,EAAI,GAC1Cz/Y,EAAI,EAAGA,EAAIm/Y,EAAkBn/Y,IAC5By+Y,KAGAI,EADE7+Y,EAAI,EACU,GAEA,GAK1B,CACAo+Y,IACA,MAAMsB,EAAkBpB,IACxB,GAAwB,IAApBoB,EACFpB,SACK,GAAwB,IAApBoB,EAKT,IAJA5B,EAAS,GACTO,IACAA,IACAa,EAAiCZ,IAC5Bt+Y,EAAI,EAAGA,EAAIk/Y,EAAgCl/Y,IAC9Cq+Y,IAGJD,IACAN,EAAS,GACT,MAAM6B,EAAsBrB,IACtBsB,EAA4BtB,IAC5BuB,EAAmB7B,EAAS,GACT,IAArB6B,GACF/B,EAAS,GAGXA,EAAS,GACLW,MAEFW,EAAsBd,IACtBe,EAAuBf,IACvBgB,EAAqBhB,IACrBiB,EAAwBjB,KAE1B,IAAIwB,EAAa,CAAC,EAAG,GACrB,GAAIrB,KAEEA,IAAe,CAGjB,OADuBC,KAErB,KAAK,EACHoB,EAAa,CAAC,EAAG,GACjB,MACF,KAAK,EACHA,EAAa,CAAC,GAAI,IAClB,MACF,KAAK,EACHA,EAAa,CAAC,GAAI,IAClB,MACF,KAAK,EACHA,EAAa,CAAC,GAAI,IAClB,MACF,KAAK,EACHA,EAAa,CAAC,GAAI,IAClB,MACF,KAAK,EACHA,EAAa,CAAC,GAAI,IAClB,MACF,KAAK,EACHA,EAAa,CAAC,GAAI,IAClB,MACF,KAAK,EACHA,EAAa,CAAC,GAAI,IAClB,MACF,KAAK,EACHA,EAAa,CAAC,GAAI,IAClB,MACF,KAAK,GACHA,EAAa,CAAC,GAAI,IAClB,MACF,KAAK,GACHA,EAAa,CAAC,GAAI,IAClB,MACF,KAAK,GACHA,EAAa,CAAC,GAAI,IAClB,MACF,KAAK,GACHA,EAAa,CAAC,IAAK,IACnB,MACF,KAAK,GACHA,EAAa,CAAC,EAAG,GACjB,MACF,KAAK,GACHA,EAAa,CAAC,EAAG,GACjB,MACF,KAAK,GACHA,EAAa,CAAC,EAAG,GACjB,MACF,KAAK,IAEDA,EAAa,CAACpB,KAAe,EAAIA,IAAaA,KAAe,EAAIA,KAIzE,CAEF,MAAO,CACL96Y,MAAOwyB,KAAK87B,KAAiC,IAA3BytV,EAAsB,GAAgC,EAAtBP,EAAiD,EAAvBC,GAC5Ex7Y,QAAS,EAAIg8Y,IAAqBD,EAA4B,GAAK,IAAMC,EAAmB,EAAI,IAAMP,EAAqBC,GAC3HO,WAAYA,EAEhB,CACA,aAAAC,GAME,OAJAt5X,KAAKi4X,YAELj4X,KAAK63X,UAEE73X,KAAK63X,SACd,EAGF,MAAM0B,WAAuBlD,GAC3B,WAAAmD,CAAYnoQ,EAAO01O,EAAW0yB,EAAKl1Q,EAAM75H,GACvC,MAAM8rY,EAAQx2X,KAAK05X,aAAaroQ,EAAOooQ,EAAI7vY,MAC3C,IACIvO,EADAi7Y,EAAct2X,KAAKs2X,YAEnBqD,GAAW,EAEfF,EAAI7vY,KAAO,KAIP0sY,GAAeE,EAAMh9Y,SAAW63I,EAAMuoQ,WACxC55X,KAAK42X,eAAeN,EAAajlQ,GACjCilQ,EAAct2X,KAAKs2X,YAAct2X,KAAKu2X,mBAAkB,EAAOkD,EAAIzqC,IAAKyqC,EAAIjH,IAAK,KAEnFgE,EAAM5zY,SAAQ8zD,IACZ,IAAImjV,EACJ,OAAQnjV,EAAK14D,MAEX,KAAK,EACH,CACE,IAAI87Y,GAAQ,EACZz+Y,GAAO,EACP,MAAMuO,EAAO8sD,EAAK9sD,KAElB,GAAI+vY,GAAY/vY,EAAKpQ,OAAS,EAAG,CAE/B,MAAMugZ,EAAY,IAAIhD,GAAUntY,GAAM0vY,gBAMpB,IAAdS,GAAiC,IAAdA,GAAiC,IAAdA,GAAiC,IAAdA,IAC3DD,GAAQ,EAEZ,CAEE,IAAIpD,EADN,GAAIoD,EAGkC,OAA/BpD,EAAeJ,IAAwBI,EAAazqX,QAAUqqX,EAAYp8Y,MAC7E8lB,KAAK42X,eAAeN,EAAajlQ,GACjCilQ,EAAct2X,KAAKs2X,YAAc,MAGhCA,IACHA,EAAct2X,KAAKs2X,YAAct2X,KAAKu2X,mBAAkB,EAAMkD,EAAIzqC,IAAKyqC,EAAIjH,IAAK,KAElF8D,EAAYrqX,OAAQ,EACpBqqX,EAAYp8Y,IAAM4/Y,EAClB,KAEF,CACF,KAAK,EACHz+Y,GAAO,EAG8B,OAAhCw+Y,EAAgBvD,IAAwBuD,EAAc5tX,QAAUqqX,EAAYp8Y,MAC/E8lB,KAAK42X,eAAeN,EAAajlQ,GACjCilQ,EAAct2X,KAAKs2X,YAAc,MAE9BA,IACHA,EAAct2X,KAAKs2X,YAAct2X,KAAKu2X,mBAAkB,EAAMkD,EAAIzqC,IAAKyqC,EAAIjH,IAAK,KAElF8D,EAAYp8Y,KAAM,EAClBo8Y,EAAYrqX,OAAQ,EACpB,MAEF,KAAK,EAED5wB,GAAO,EACPszW,GAAwBj4S,EAAK9sD,KAAM,EAAG6vY,EAAIzqC,IAAK+X,EAAUpa,SACzD,MAGJ,KAAK,EACH,CACE,IAAIqtC,EAAmBC,EACvB5+Y,GAAO,EACPs+Y,GAAW,EACX,MAAMO,EAAMxjV,EAAK9sD,KAEXgpB,EADmB,IAAImkX,GAAUmD,GACP1B,UAChC,IAAKnnQ,EAAM6oQ,KAAO7oQ,EAAMl0I,QAAUy1B,EAAOz1B,OAASk0I,EAAMj0I,SAAWw1B,EAAOx1B,SAAqD,OAAzC48Y,EAAoB3oQ,EAAMgoQ,iBAAsB,EAASW,EAAkB,MAAQpnX,EAAOymX,WAAW,KAAkD,OAA1CY,EAAqB5oQ,EAAMgoQ,iBAAsB,EAASY,EAAmB,MAAQrnX,EAAOymX,WAAW,GAAI,CAC5ShoQ,EAAMl0I,MAAQy1B,EAAOz1B,MACrBk0I,EAAMj0I,OAASw1B,EAAOx1B,OACtBi0I,EAAMgoQ,WAAazmX,EAAOymX,WAC1BhoQ,EAAM6oQ,IAAM,CAACA,GACb7oQ,EAAM3mI,SAAWA,EACjB,MAAMyvY,EAAaD,EAAIn2C,SAAS,EAAG,GACnC,IAAIq2C,EAAc,QAClB,IAAK,IAAI7gZ,EAAI,EAAGA,EAAI,EAAGA,IAAK,CAC1B,IAAImG,EAAIy6Y,EAAW5gZ,GAAGO,SAAS,IAC3B4F,EAAElG,OAAS,IACbkG,EAAI,IAAMA,GAEZ06Y,GAAe16Y,CACjB,CACA2xI,EAAMo4N,MAAQ2wC,CAChB,CACA,KACF,CAEF,KAAK,EACH/+Y,GAAO,EACPg2I,EAAMgpQ,IAAM,CAAC3jV,EAAK9sD,MAClB,MAEF,KAAK,EACHvO,GAAO,EACPg2I,EAAMuoQ,UAAW,EACbtD,GACFt2X,KAAK42X,eAAeN,EAAajlQ,GAEnCilQ,EAAct2X,KAAKs2X,YAAct2X,KAAKu2X,mBAAkB,EAAOkD,EAAIzqC,IAAKyqC,EAAIjH,IAAK,IACjF,MAEF,KAAK,GACHn3Y,GAAO,EACP,MACF,QACEA,GAAO,EACHi7Y,IACFA,EAAYj2X,OAAS,eAAiBq2C,EAAK14D,KAAO,KAIxD,GAAIs4Y,GAAej7Y,EAAM,CACTi7Y,EAAYE,MACpBn7Y,KAAKq7D,EACb,KAGE6tE,GAAQ+xQ,IACVt2X,KAAK42X,eAAeN,EAAajlQ,GACjCrxH,KAAKs2X,YAAc,KAEvB,CACA,YAAAoD,CAAaroQ,EAAO7uF,GAClB,MAAM3mC,EAAM2mC,EAAMkvD,WAClB,IAAIppF,EAAQ+oH,EAAMipQ,WAAa,EAC/B,MAAMC,EAAYjyX,EACZkuX,EAAQ,GACd,IACIp8Y,EACAyrN,EACA20L,EAHAjhZ,EAAI,EAIJkhZ,GAAiB,EACjBC,EAAe,EAWnB,KARe,IAAXpyX,IAEFmyX,EAAgB,EAEhBC,EAA0B,GAAXl4V,EAAM,GACrBl6B,EAAQ,EACR/uB,EAAI,GAECA,EAAIsiB,GAGT,GAFAzhB,EAAQooD,EAAMjpD,KAET+uB,EAIL,GAAc,IAAVA,EAKJ,GAAKluB,EAEE,GAAc,IAAVA,EAAa,CAEtB,GADAyrN,EAAWtsN,EAAI+uB,EAAQ,EACnBmyX,GAAiB,EAAG,CACtB,MAAM/jV,EAAO,CACX9sD,KAAM44C,EAAMuhT,SAAS02C,EAAe50L,GACpC7nN,KAAM08Y,GAGRlE,EAAMn7Y,KAAKq7D,EACb,KAAO,CAKL,MAAMigV,EAAW32X,KAAKy2X,eAAeplQ,EAAMs7N,SACvCgqC,IACE4D,GAAahhZ,GAAK,EAAIghZ,GAIpB5D,EAASruX,QAEXquX,EAAS/sY,KAAO+sY,EAAS/sY,KAAKm6V,SAAS,EAAG4yC,EAAS/sY,KAAK8nG,WAAa6oS,IAKrE10L,EAAW,IAEb8wL,EAAS/sY,KAAOuiW,GAAiBwqC,EAAS/sY,KAAM44C,EAAMuhT,SAAS,EAAGl+I,IAClE8wL,EAASruX,MAAQ,GAGvB,CAEI/uB,EAAIsiB,GACN2+X,EAAsB,GAAXh4V,EAAMjpD,GAEjBkhZ,EAAgBlhZ,EAChBmhZ,EAAeF,EACflyX,EAAQ,GAGRA,GAAS,CAEb,MACEA,EAAQ,OA/CRA,EAAQ,OALRA,EAAQluB,EAAQ,EAAI,OAJpBkuB,EAAQluB,EAAQ,EAAI,EA2DxB,GAAIqgZ,GAAiB,GAAKnyX,GAAS,EAAG,CACpC,MAAMouC,EAAO,CACX9sD,KAAM44C,EAAMuhT,SAAS02C,EAAe5+X,GACpC7d,KAAM08Y,EACNpyX,MAAOA,GAETkuX,EAAMn7Y,KAAKq7D,EAEb,CAEA,GAAqB,IAAjB8/U,EAAMh9Y,OAAc,CAEtB,MAAMm9Y,EAAW32X,KAAKy2X,eAAeplQ,EAAMs7N,SACvCgqC,IACFA,EAAS/sY,KAAOuiW,GAAiBwqC,EAAS/sY,KAAM44C,GAEpD,CAEA,OADA6uF,EAAMipQ,UAAYhyX,EACXkuX,CACT,EAOF,MAAMmE,GACJ,WAAA94W,CAAYoN,EAAUrc,EAAQ++U,GAC5B3xV,KAAK2xV,aAAU,EACf3xV,KAAKqnX,eAAY,EACjBrnX,KAAK2xV,QAAUA,EACf3xV,KAAKqnX,UAAY,IAAIvC,GAAUlyW,EAAQ,CACrCmyW,oBAAoB,GAExB,CACA,aAAA6V,CAAcC,GACZ,OAAO76X,KAAKqnX,UAAUhmO,QAAQw5O,EAAe76X,KAAK2xV,QAAQz3W,IAAI63G,OAAQ/xF,KAAK2xV,QAAQtvM,GAAGtwD,OACxF,CAGA,gBAAA+oS,CAAiBnuC,EAASouC,EAAa5yW,GACrC,MAAM6yW,EAAUruC,EAAQouC,GAAarkV,KACrC,GAAIskV,EAAQxhZ,QAAU,GAGpB,OAEF,MAAMqhZ,EAAgBG,EAAQj3C,SAAS,GAAIi3C,EAAQxhZ,OAASwhZ,EAAQxhZ,OAAS,IACvEyhZ,EAAkBJ,EAAc9oS,OAAOxuG,MAAMs3Y,EAAc3oS,WAAY2oS,EAAc3oS,WAAa2oS,EAAcrhZ,QACtHwmB,KAAK46X,cAAcK,GAAiB5sX,MAAK6sX,IACvC,MAAMjgO,EAAgB,IAAIjuE,WAAWkuS,GACrCF,EAAQvqW,IAAIwqI,EAAe,IACtBj7J,KAAKqnX,UAAU3B,UAClB1lX,KAAKm7X,kBAAkBxuC,EAASouC,EAAc,EAAG5yW,EACnD,GAEJ,CACA,iBAAAgzW,CAAkBxuC,EAASouC,EAAa5yW,GACtC,MAAQ4yW,IAAe,CACrB,GAAIA,GAAepuC,EAAQnzW,OAEzB,YADA2uC,IAGF,KAAIwkU,EAAQouC,GAAarkV,KAAKl9D,OAAS,MAGvCwmB,KAAK86X,iBAAiBnuC,EAASouC,EAAa5yW,IACvCnoB,KAAKqnX,UAAU3B,UAClB,MAEJ,CACF,CAGA,mBAAA0V,CAAoBC,GAClB,MAAMC,EAAiE,GAA9C3rX,KAAKq2B,OAAOq1V,EAAY7hZ,OAAS,IAAM,KAAY,GACtEqhZ,EAAgB,IAAIU,UAAUD,GACpC,IAAIE,EAAY,EAChB,IAAK,IAAIC,EAAW,GAAIA,EAAWJ,EAAY7hZ,OAAS,GAAIiiZ,GAAY,IAAKD,GAAa,GACxFX,EAAcpqW,IAAI4qW,EAAYt3C,SAAS03C,EAAUA,EAAW,IAAKD,GAEnE,OAAOX,CACT,CACA,mBAAAa,CAAoBL,EAAapgO,GAC/B,MAAM0gO,EAAqB,IAAI3uS,WAAWiuE,GAC1C,IAAIwgO,EAAW,EACf,IAAK,IAAID,EAAY,GAAIA,EAAYH,EAAY7hZ,OAAS,GAAIgiZ,GAAa,IAAKC,GAAY,GAC1FJ,EAAY5qW,IAAIkrW,EAAmB53C,SAAS03C,EAAUA,EAAW,IAAKD,GAExE,OAAOH,CACT,CACA,gBAAAO,CAAiBjvC,EAASouC,EAAac,EAAW1zW,EAAU6yW,GAC1D,MAAMK,EAAcpsC,GAAW+rC,EAAQpxY,MACjCixY,EAAgB76X,KAAKo7X,oBAAoBC,GAC/Cr7X,KAAK46X,cAAcC,EAAc9oS,QAAQ1jF,MAAK6sX,IAC5CF,EAAQpxY,KAAOoW,KAAK07X,oBAAoBL,EAAaH,GAChDl7X,KAAKqnX,UAAU3B,UAClB1lX,KAAK87X,kBAAkBnvC,EAASouC,EAAac,EAAY,EAAG1zW,EAC9D,GAEJ,CACA,iBAAA2zW,CAAkBnvC,EAASouC,EAAac,EAAW1zW,GACjD,GAAIwkU,aAAmB3/P,WACrB,MAAM,IAAItpF,MAAM,6CAElB,MAAQq3X,IAAec,EAAY,EAAG,CACpC,GAAId,GAAepuC,EAAQnzW,OAEzB,YADA2uC,IAGF,MAAM4zW,EAAWpvC,EAAQouC,GAAavE,MACtC,OACMqF,GAAaE,EAASviZ,QADpBqiZ,IAAa,CAInB,MAAMb,EAAUe,EAASF,GACzB,KAAIb,EAAQpxY,KAAKpQ,QAAU,IAAuB,IAAjBwhZ,EAAQh9Y,MAA+B,IAAjBg9Y,EAAQh9Y,QAG/DgiB,KAAK47X,iBAAiBjvC,EAASouC,EAAac,EAAW1zW,EAAU6yW,IAC5Dh7X,KAAKqnX,UAAU3B,UAClB,MAEJ,CACF,CACF,EAGF,MAAMsW,GAAgB,IACtB,MAAMC,GACJ,WAAAp6W,CAAYoN,EAAUrc,EAAQspX,GAC5Bl8X,KAAKivB,cAAW,EAChBjvB,KAAK4S,YAAS,EACd5S,KAAKk8X,mBAAgB,EACrBl8X,KAAKm8X,UAAY,KACjBn8X,KAAKo8X,WAAY,EACjBp8X,KAAKq6V,gBAAa,EAClBr6V,KAAKw3V,gBAAa,EAClBx3V,KAAKq8X,UAAY,EACjBr8X,KAAKs8X,QAAU,EACft8X,KAAKu8X,iBAAc,EACnBv8X,KAAKwxX,iBAAc,EACnBxxX,KAAKyxX,eAAY,EACjBzxX,KAAKw8X,eAAY,EACjBx8X,KAAKy8X,YAAc,KACnBz8X,KAAKmlX,cAAgB,KACrBnlX,KAAK08X,iBAAc,EACnB18X,KAAKivB,SAAWA,EAChBjvB,KAAK4S,OAASA,EACd5S,KAAKk8X,cAAgBA,EACrBl8X,KAAK08X,YAAc,IAAInD,EACzB,CACA,YAAO9D,CAAM7rY,GACX,MAAM+yY,EAAaV,GAAUU,WAAW/yY,GAIxC,OAHI+yY,EAAa,GACf19X,EAAOyO,KAAK,wDAAwDivX,MAE/C,IAAhBA,CACT,CACA,iBAAOA,CAAW/yY,GAChB,MAAMpQ,EAASoQ,EAAKpQ,OACpB,IAAIojZ,EAAajtX,KAAKjT,IAAIs/X,IAAmBxiZ,EAASwiZ,IAAiB,EACnEziZ,EAAI,EACR,KAAOA,EAAIqjZ,GAAY,CAErB,IAAIC,GAAW,EACXC,GAAe,EACfC,EAAY,EAChB,IAAK,IAAIp6X,EAAIppB,EAAGopB,EAAInpB,EAAQmpB,GAAKq5X,GAAe,CAC9C,GAAgB,KAAZpyY,EAAK+Y,IAAgBnpB,EAASmpB,IAAMq5X,IAA6C,KAA5BpyY,EAAK+Y,EAAIq5X,IAgB3D,IAAIe,EAET,OAAQ,EAER,KACF,CARE,GAZAA,KACqB,IAAjBD,IACFA,EAAcn6X,EAEM,IAAhBm6X,IACFF,EAAajtX,KAAKjT,IAAIogY,EAAcd,MAAoBpyY,EAAKpQ,OAASwiZ,IAAiB,IAGtFa,IACHA,EAAiC,IAAtBG,GAASpzY,EAAM+Y,IAGxBk6X,GAAYE,EAAY,IAAsB,IAAhBD,GAAqBC,EAAY,GAAKp6X,EAAIq5X,GAAgBY,GAC1F,OAAOE,CAQb,CACAvjZ,GACF,CACA,OAAQ,CACV,CAKA,kBAAOqtX,CAAY5oX,EAAM0M,GACvB,MAAO,CACL1P,UAAoB,UAATgD,GAA6B,UAATA,EAAmB,kBAAe4a,EACjE5a,OACA6N,GAAIo7V,GAAqBjpW,GACzB40I,KAAM,EACNy+P,eAAgB,IAChBC,eAAgB,EAChB3kC,QAAS,GACTigC,QAAS,EACTliY,SAAmB,UAAT1M,EAAmB0M,OAAWkO,EAE5C,CAMA,gBAAAk5X,CAAiB5zC,EAAamc,EAAY7C,EAAYu6B,GACpD/xX,KAAKo8X,WAAY,EACjBp8X,KAAKs8X,QAAU,EACft8X,KAAKu8X,YAAcN,GAAUr1B,YAAY,SACzC5mW,KAAKwxX,YAAcyK,GAAUr1B,YAAY,QAASmrB,GAClD/xX,KAAKyxX,UAAYwK,GAAUr1B,YAAY,OACvC5mW,KAAKw8X,UAAYP,GAAUr1B,YAAY,QACvC5mW,KAAKwxX,YAAYuE,aAAe,MAGhC/1X,KAAKy8X,YAAc,KACnBz8X,KAAKmlX,cAAgB,KACrBnlX,KAAKq6V,WAAaA,EAClBr6V,KAAKw3V,WAAaA,EAClBx3V,KAAKq8X,UAAYtK,CACnB,CACA,cAAAC,GAAkB,CAClB,eAAAE,GACE,MAAM,YACJV,EAAW,YACX+K,EAAW,UACX9K,GACEzxX,KACAwxX,IACFA,EAAYyL,QAAU,MAEpBV,IACFA,EAAYU,QAAU,MAEpBxL,IACFA,EAAUwL,QAAU,MAEtBj9X,KAAKy8X,YAAc,KACnBz8X,KAAKmlX,cAAgB,IACvB,CACA,KAAAkN,CAAMzoY,EAAM4iW,EAAY0wC,GAAc,EAAOjyS,GAAQ,GAInD,IAAIwuS,EAHCyD,IACHl9X,KAAKm8X,UAAY,MAGnB,MAAMzJ,EAAa1yX,KAAKu8X,YAClBh6B,EAAaviW,KAAKwxX,YAClB1rB,EAAW9lW,KAAKyxX,UAChB1qB,EAAY/mW,KAAKw8X,UACvB,IAAIW,EAAWzK,EAAW9/P,IACtB85N,EAAYgmC,EAAWuK,QACvBG,EAAW76B,EAAW3vO,IACtByqQ,EAASv3B,EAASlzO,IAClB0qQ,EAAY/6B,EAAW06B,QACvBj3C,EAAU8f,EAASm3B,QACnBM,EAAa,KACbnB,EAAYp8X,KAAKo8X,UACjBoB,EAAQx9X,KAAKs8X,OACbzgY,EAAMjS,EAAKpQ,OAMf,GALIwmB,KAAKmlX,gBAEPtpX,GADAjS,EAAOuiW,GAAiBnsV,KAAKmlX,cAAev7X,IACjCpQ,OACXwmB,KAAKmlX,cAAgB,MAEnBtpX,EAAMmgY,KAAkB/wS,EAE1B,OADAjrF,KAAKmlX,cAAgBv7X,EACd,CACL24W,aACAmwB,aACA5sB,WACAiB,aAGJ,MAAM41B,EAAahtX,KAAKhT,IAAI,EAAGs/X,GAAUU,WAAW/yY,IACpDiS,IAAQA,EAAM8gY,GAAcX,GACxBngY,EAAMjS,EAAK8nG,aAAezG,IAC5BjrF,KAAKmlX,cAAgB,IAAIn4R,WAAWpjG,EAAKmoG,OAAQl2F,EAAKjS,EAAKmoG,OAAOL,WAAa71F,IAIjF,IAAI4hY,EAAiB,EACrB,IAAK,IAAIviX,EAAQyhX,EAAYzhX,EAAQrf,EAAKqf,GAAS8gX,GACjD,GAAoB,KAAhBpyY,EAAKsxB,GAAiB,CACxB,MAAMwiX,KAA2B,GAAlB9zY,EAAKsxB,EAAQ,IACtB03G,EAAMoqQ,GAASpzY,EAAMsxB,GAI3B,IAAI4S,EACJ,IAJ+B,GAAlBlkC,EAAKsxB,EAAQ,KAAc,EAI9B,GAGR,GAFA4S,EAAS5S,EAAQ,EAAItxB,EAAKsxB,EAAQ,GAE9B4S,IAAW5S,EAAQ8gX,GACrB,cAGFluW,EAAS5S,EAAQ,EAEnB,OAAQ03G,GACN,KAAKuqQ,EACCO,IACEhxC,IAAc+sC,EAAMkE,GAASjxC,KAC/B1sV,KAAK08X,YAAYlD,YAAY9G,EAAY3rB,EAAW0yB,GAAK,EAAOz5X,KAAKq8X,WAEvE3vC,EAAY,CACV9iW,KAAM,GACNzH,KAAM,IAGNuqW,IACFA,EAAU9iW,KAAKvO,KAAKuO,EAAKm6V,SAASj2T,EAAQ5S,EAAQ8gX,KAClDtvC,EAAUvqW,MAAQ+4B,EAAQ8gX,GAAgBluW,GAE5C,MACF,KAAKsvW,EACH,GAAIM,EAAK,CACP,GAAIJ,IAAc7D,EAAMkE,GAASL,IAC/B,OAAQ/6B,EAAWwzB,cACjB,IAAK,MACH/1X,KAAK49X,YAAYr7B,EAAYk3B,GAC7B,MACF,IAAK,MACHz5X,KAAK69X,aAAat7B,EAAYk3B,GAC9B,MACF,IAAK,MAEDz5X,KAAK89X,YAAYv7B,EAAYk3B,GAKrC6D,EAAY,CACV1zY,KAAM,GACNzH,KAAM,EAEV,CACIm7Y,IACFA,EAAU1zY,KAAKvO,KAAKuO,EAAKm6V,SAASj2T,EAAQ5S,EAAQ8gX,KAClDsB,EAAUn7Y,MAAQ+4B,EAAQ8gX,GAAgBluW,GAE5C,MACF,KAAKuvW,EACCK,IACE13C,IAAYyzC,EAAMkE,GAAS33C,KAC7BhmV,KAAK+9X,YAAYj4B,EAAU2zB,GAE7BzzC,EAAU,CACRp8V,KAAM,GACNzH,KAAM,IAGN6jW,IACFA,EAAQp8V,KAAKvO,KAAKuO,EAAKm6V,SAASj2T,EAAQ5S,EAAQ8gX,KAChDh2C,EAAQ7jW,MAAQ+4B,EAAQ8gX,GAAgBluW,GAE1C,MACF,KAAK,EACC4vW,IACF5vW,GAAUlkC,EAAKkkC,GAAU,GAE3B0vW,EAAQx9X,KAAKs8X,OAAS0B,GAASp0Y,EAAMkkC,GAErC,MACF,KAAK0vW,EACH,CACME,IACF5vW,GAAUlkC,EAAKkkC,GAAU,GAE3B,MAAMmwW,EAAaC,GAASt0Y,EAAMkkC,EAAQ9tB,KAAKk8X,cAAegB,EAAal9X,KAAKivB,UAQhFkuW,EAAWc,EAAWd,SAClBA,EAAW,IACbzK,EAAW9/P,IAAMuqQ,EACjBzK,EAAWqD,aAAekI,EAAWE,mBAEvCf,EAAWa,EAAWb,SAClBA,EAAW,IACb76B,EAAW3vO,IAAMwqQ,EACjB76B,EAAWwzB,aAAekI,EAAWG,mBAEvCf,EAASY,EAAWZ,OAChBA,EAAS,IACXv3B,EAASlzO,IAAMyqQ,GAEE,OAAfE,GAAwBnB,IAC1Bn9X,EAAOyO,KAAK,wBAAwBwN,wBAA4BqiX,kCAA2CZ,8BAC3GY,EAAa,KAEbriX,EAAQyhX,EAAa,KAEvBP,EAAYp8X,KAAKo8X,WAAY,EAC7B,KACF,CACF,KAAK,GACL,KAAK,KACH,MACF,QACEmB,EAAa3qQ,EAGnB,MACE6qQ,IAGAA,EAAiB,GACnBY,GAAiBr+X,KAAKivB,SAAU,IAAIvrB,MAAM,SAAS+5X,8CAErD/K,EAAWuK,QAAUvwC,EACrB6V,EAAW06B,QAAUK,EACrBx3B,EAASm3B,QAAUj3C,EACnB,MAAMs4C,EAAc,CAClB/7B,aACAmwB,aACA5sB,WACAiB,aAKF,OAHI97Q,GACFjrF,KAAKu+X,wBAAwBD,GAExBA,CACT,CACA,KAAArzS,GACE,MAAM,cACJk6R,GACEnlX,KAEJ,IAAIniB,EAYJ,OAbAmiB,KAAKmlX,cAAgB,KAGnBtnY,EADEsnY,EACOnlX,KAAKqyX,MAAMlN,GAAgB,GAAG,GAAO,GAErC,CACPuN,WAAY1yX,KAAKu8X,YACjBh6B,WAAYviW,KAAKwxX,YACjB1rB,SAAU9lW,KAAKyxX,UACf1qB,UAAW/mW,KAAKw8X,WAGpBx8X,KAAKu+X,wBAAwB1gZ,GACzBmiB,KAAKm8X,UACAn8X,KAAKqhJ,QAAQxjK,EAAQmiB,KAAKm8X,WAE5Bt+Y,CACT,CACA,uBAAA0gZ,CAAwBD,GACtB,MAAM,WACJ/7B,EAAU,WACVmwB,EAAU,SACV5sB,EAAQ,UACRiB,GACEu3B,EACE5xC,EAAYgmC,EAAWuK,QACvBK,EAAY/6B,EAAW06B,QACvBj3C,EAAU8f,EAASm3B,QAEzB,IAAIxD,EAQJ,GAPI/sC,IAAc+sC,EAAMkE,GAASjxC,KAC/B1sV,KAAK08X,YAAYlD,YAAY9G,EAAY3rB,EAAW0yB,GAAK,EAAMz5X,KAAKq8X,WACpE3J,EAAWuK,QAAU,MAGrBvK,EAAWuK,QAAUvwC,EAEnB4wC,IAAc7D,EAAMkE,GAASL,IAAa,CAC5C,OAAQ/6B,EAAWwzB,cACjB,IAAK,MACH/1X,KAAK49X,YAAYr7B,EAAYk3B,GAC7B,MACF,IAAK,MACHz5X,KAAK69X,aAAat7B,EAAYk3B,GAC9B,MACF,IAAK,MAEDz5X,KAAK89X,YAAYv7B,EAAYk3B,GAInCl3B,EAAW06B,QAAU,IACvB,MACmB,MAAbK,GAAqBA,EAAUn7Y,MACjC8c,EAAOuB,IAAI,iEAIb+hW,EAAW06B,QAAUK,EAEnBt3C,IAAYyzC,EAAMkE,GAAS33C,KAC7BhmV,KAAK+9X,YAAYj4B,EAAU2zB,GAC3B3zB,EAASm3B,QAAU,MAGnBn3B,EAASm3B,QAAUj3C,CAEvB,CACA,cAAA2sC,CAAe/oY,EAAM+nW,EAASnF,GAC5B,MAAM8xC,EAAct+X,KAAKqyX,MAAMzoY,EAAM4iW,GAAY,GAAOxsV,KAAK4S,OAAO+4W,aAC9DwQ,EAAYn8X,KAAKm8X,UAAY,IAAIxB,GAAmB36X,KAAKivB,SAAUjvB,KAAK4S,OAAQ++U,GACtF,OAAO3xV,KAAKqhJ,QAAQi9O,EAAanC,EACnC,CACA,OAAA96O,CAAQi9O,EAAanC,GACnB,OAAO,IAAIh9W,SAAQC,IACjB,MAAM,WACJmjV,EAAU,WACVmwB,GACE4L,EACA/7B,EAAW5V,SAAuC,QAA5B4V,EAAWwzB,aACnCoG,EAAUhB,kBAAkB54B,EAAW5V,QAAS,GAAG,KAC7C+lC,EAAW/lC,QACbwvC,EAAUL,kBAAkBpJ,EAAW/lC,QAAS,EAAG,GAAG,KACpDvtU,EAAQk/W,EAAY,IAGtBl/W,EAAQk/W,EACV,IAEO5L,EAAW/lC,SACpBwvC,EAAUL,kBAAkBpJ,EAAW/lC,QAAS,EAAG,GAAG,KACpDvtU,EAAQk/W,EAAY,GAExB,GAEJ,CACA,OAAAtzP,GACEhrI,KAAKq8X,UAAY,CACnB,CACA,WAAAuB,CAAYvsQ,EAAOooQ,GACjB,IAAIz6J,EAAc,EAClB,MAAMy9J,EAAcz8X,KAAKy8X,YACzB,IAgBI3uW,EACAjyB,EAqBAmzV,EAtCAplW,EAAO6vY,EAAI7vY,KACf,GAAI6yY,EAAa,CACfz8X,KAAKy8X,YAAc,KACnB,MAAM+B,EAAoB/B,EAAYtyI,QAChCs0I,EAAehC,EAAYj3Q,OAAO9uE,KAAKg7C,WAE7C,IAA2B,IAAvB8sS,EACF50Y,EAAOuiW,GAAiBswC,EAAYj3Q,OAAO9uE,KAAM9sD,OAC5C,CACL,MAAM80Y,EAAqBD,EAAeD,EAC1C/B,EAAYj3Q,OAAO9uE,KAAKjmB,IAAI7mC,EAAKm6V,SAAS,EAAGy6C,GAAoBE,GACjErtQ,EAAMs7N,QAAQtxW,KAAKohZ,EAAYj3Q,QAC/Bw5G,EAAcy9J,EAAYtyI,OAC5B,CACF,CAIA,IAAKr8N,EAASkxM,EAAanjO,EAAMjS,EAAKpQ,OAAQs0C,EAASjyB,EAAM,IACvDk3X,GAAWnpY,EAAMkkC,GADyCA,KAMhE,GAAIA,IAAWkxM,EAAa,CAC1B,IAAIxxN,EACJ,MAAMmxX,EAAc7wW,EAASjyB,EAAM,EAOnC,GALE2R,EADEmxX,EACO,iDAAiD7wW,IAEjD,kCAEXuwW,GAAiBr+X,KAAKivB,SAAU,IAAIvrB,MAAM8J,GAASmxX,IAC9CA,EACH,MAEJ,CAGA,GAFAvL,GAAgB/hQ,EAAOrxH,KAAKivB,SAAUrlC,EAAMkkC,EAAQ9tB,KAAKq6V,iBAEzCzhW,IAAZ6gY,EAAIzqC,IACNA,EAAMyqC,EAAIzqC,QACL,KAAIytC,EAOT,YADAx9X,EAAOyO,KAAK,oCANU,CAGtB,MAAMkxX,EAAgB7K,GAAiB1iQ,EAAMgiQ,YAC7CrkC,EAAMytC,EAAYj3Q,OAAOwpO,IAAM4vC,CACjC,CAGA,CAGA,IACI3yX,EADAylX,EAAa,EAEjB,KAAO5jW,EAASjyB,GAAK,CAGnB,GAFAoQ,EAAQ+nX,GAAc3iQ,EAAOznI,EAAMkkC,EAAQkhU,EAAK0iC,GAChD5jW,GAAU7hB,EAAMzyB,OACXyyB,EAAMk+O,QAOJ,CACLnqP,KAAKy8X,YAAcxwX,EACnB,KACF,CARE,IADAylX,IACO5jW,EAASjyB,EAAM,IAChBk3X,GAAWnpY,EAAMkkC,GADEA,KAS7B,CACF,CACA,YAAA+vW,CAAaxsQ,EAAOooQ,GAClB,MAAM7vY,EAAO6vY,EAAI7vY,KACXpQ,EAASoQ,EAAKpQ,OACpB,IAAIk4Y,EAAa,EACb5jW,EAAS,EACb,MAAMkhU,EAAMyqC,EAAIzqC,IAChB,QAAYp2V,IAARo2V,EAIJ,KAAOlhU,EAASt0C,GACd,GAAIg8Y,GAAS5rY,EAAMkkC,GAAS,CAC1B,MAAM7hB,EAAQyoX,GAAcrjQ,EAAOznI,EAAMkkC,EAAQkhU,EAAK0iC,GACtD,IAAIzlX,EAKF,MAJA6hB,GAAU7hB,EAAMzyB,OAChBk4Y,GAKJ,MAEE5jW,SAfF7uB,EAAOyO,KAAK,oCAkBhB,CACA,WAAAowX,CAAYzsQ,EAAOooQ,GACjB,CACE,MAAM7vY,EAAO6vY,EAAI7vY,KACXolW,EAAMyqC,EAAIzqC,IAChB,QAAYp2V,IAARo2V,EAEF,YADA/vV,EAAOyO,KAAK,oCAGd,MAAMl0B,EAASoQ,EAAKpQ,OACpB,IAEI23Q,EAFAugI,EAAa,EACb5jW,EAAS,EAEb,KAAOA,EAASt0C,IAAW23Q,EAASihI,GAAY/gQ,EAAOznI,EAAMkkC,EAAQkhU,EAAK0iC,MAAiB,GACzF5jW,GAAUqjO,CAEd,CACF,CACA,WAAA4sI,CAAYj4B,EAAU2zB,GACpB,QAAgB7gY,IAAZ6gY,EAAIzqC,IAEN,YADA/vV,EAAOyO,KAAK,oCAGd,MAAMmxX,EAAYh/X,EAAS,CAAC,EAAG45X,EAAK,CAClCz7Y,KAAMgiB,KAAKu8X,YAAcl3B,GAAsBA,GAC/C36W,SAAUkY,OAAO63R,oBAEnBqrE,EAASnZ,QAAQtxW,KAAKwjZ,EACxB,EAEF,SAAS7B,GAASpzY,EAAMkkC,GAEtB,QAA4B,GAAnBlkC,EAAKkkC,EAAS,KAAc,GAAKlkC,EAAKkkC,EAAS,EAC1D,CACA,SAASkwW,GAASp0Y,EAAMkkC,GAEtB,OAA4B,GAApBlkC,EAAKkkC,EAAS,MAAe,EAAIlkC,EAAKkkC,EAAS,GACzD,CACA,SAASowW,GAASt0Y,EAAMkkC,EAAQouW,EAAegB,EAAajuW,GAC1D,MAAMpxC,EAAS,CACbu/Y,UAAW,EACXD,UAAW,EACXE,QAAS,EACTc,kBAAmB,MACnBC,kBAAmB,OAGfU,EAAWhxW,EAAS,IADgB,GAAnBlkC,EAAKkkC,EAAS,KAAc,EAAIlkC,EAAKkkC,EAAS,IACvB,EAM9C,IADAA,GAAU,KAFqC,GAApBlkC,EAAKkkC,EAAS,MAAe,EAAIlkC,EAAKkkC,EAAS,KAGnEA,EAASgxW,GAAU,CACxB,MAAMlsQ,EAAMoqQ,GAASpzY,EAAMkkC,GACrBixW,GAAmC,GAAnBn1Y,EAAKkkC,EAAS,KAAc,EAAIlkC,EAAKkkC,EAAS,GACpE,OAAQlkC,EAAKkkC,IACX,KAAK,IAEH,IAAKovW,EAAa,CAChB8B,GAA4C,YAC5C,KACF,CAEF,KAAK,IAGsB,IAArBnhZ,EAAOu/Y,WACTv/Y,EAAOu/Y,SAAWxqQ,GAEpB,MAGF,KAAK,IAEoB,IAAnB/0I,EAAOw/Y,SACTx/Y,EAAOw/Y,OAASzqQ,GAElB,MACF,KAAK,IAEH,IAAKsqQ,EAAa,CAChB8B,GAA4C,SAC5C,KACF,CAEF,KAAK,IAGsB,IAArBnhZ,EAAOs/Y,WACTt/Y,EAAOs/Y,SAAWvqQ,EAClB/0I,EAAOsgZ,kBAAoB,OAE7B,MAIF,KAAK,EACL,KAAK,EAEEjC,EAAc+C,MAAS/C,EAAcgD,KAEV,IAArBrhZ,EAAOu/Y,WAChBv/Y,EAAOu/Y,SAAWxqQ,EAClB/0I,EAAOugZ,kBAAoB,OAH3Bn/X,EAAOuB,IAAI,mDAKb,MACF,KAAK,IAEH,IAAK08X,EAAa,CAChB8B,GAA4C,QAC5C,KACF,CAEF,KAAK,IAEI9C,EAAciD,KAEa,IAArBthZ,EAAOu/Y,WAChBv/Y,EAAOu/Y,SAAWxqQ,EAClB/0I,EAAOugZ,kBAAoB,OAH3Bn/X,EAAOuB,IAAI,mDAMf,MACF,KAAK,EAKH,IAAyB,IAArB3iB,EAAOu/Y,UAAmB2B,EAAe,EAAG,CAC9C,IAAIK,EAAWtxW,EAAS,EACpB2tC,EAAYsjU,EAChB,KAAOtjU,EAAY,GAAG,CAEpB,GACO,MAFc7xE,EAAKw1Y,IAKM,IAAtBlD,EAAciD,IAChBlgY,EAAOuB,IAAI,4DAEX3iB,EAAOu/Y,SAAWxqQ,EAClB/0I,EAAOugZ,kBAAoB,OAKnC,MAAMiB,EAAgBz1Y,EAAKw1Y,EAAW,GAAK,EAC3CA,GAAYC,EACZ5jU,GAAa4jU,CACf,CACF,CACA,MACF,KAAK,IAEL,KAAK,IAEH,OADAhB,GAAiBpvW,EAAU,IAAIvrB,MAAM,mCAC9B7lB,EACT,KAAK,GAEH,OADAwgZ,GAAiBpvW,EAAU,IAAIvrB,MAAM,mCAC9B7lB,EAIXiwC,GAAUixW,EAAe,CAC3B,CACA,OAAOlhZ,CACT,CACA,SAASwgZ,GAAiBpvW,EAAUvrC,EAAOuvX,GACzCh0W,EAAOyO,KAAK,kBAAkBhqB,EAAMmF,WACpComC,EAAS4kW,KAAKz+K,EAAO5yI,MAAO4yI,EAAO5yI,MAAO,CACxCxkF,KAAMm8V,EAAWinC,YACjBtgB,QAAS1mB,EAAay2C,mBACtBt2F,OAAO,EACP04E,aACAvvX,QACA8pB,OAAQ9pB,EAAMmF,SAElB,CACA,SAASm2Y,GAA4ChhZ,GACnDihB,EAAOuB,IAAI,GAAGxiB,4DAChB,CACA,SAAS2/Y,GAAS7pP,GAChB,IACIurM,EACAigD,EACAC,EACAC,EACAC,EALAlmZ,EAAI,EAMR,MAAMqQ,EAAOkqJ,EAAOlqJ,KAEpB,IAAKkqJ,GAA0B,IAAhBA,EAAO3xJ,KACpB,OAAO,KAMT,KAAOyH,EAAK,GAAGpQ,OAAS,IAAMoQ,EAAKpQ,OAAS,GAC1CoQ,EAAK,GAAKuiW,GAAiBviW,EAAK,GAAIA,EAAK,IACzCA,EAAKs2F,OAAO,EAAG,GAGjBm/P,EAAOz1V,EAAK,GAEZ,GAAkB,KADCy1V,EAAK,IAAM,KAAOA,EAAK,IAAM,GAAKA,EAAK,GACrC,CAInB,GAHAigD,GAAUjgD,EAAK,IAAM,GAAKA,EAAK,GAG3BigD,GAAUA,EAASxrP,EAAO3xJ,KAAO,EACnC,OAAO,KAET,MAAMu9Y,EAAWrgD,EAAK,GACP,IAAXqgD,IAIFF,EAA4B,WAAR,GAAVngD,EAAK,IAEK,SAAR,IAAXA,EAAK,KAEc,OAAR,IAAXA,EAAK,KAEc,KAAR,IAAXA,EAAK,MAEM,IAAXA,EAAK,KAAc,EACL,GAAXqgD,GACFD,EAA6B,WAAR,GAAXpgD,EAAK,KAEK,SAAR,IAAXA,EAAK,KAEc,OAAR,IAAXA,EAAK,KAEc,KAAR,IAAXA,EAAK,MAEM,IAAXA,EAAK,KAAc,EAChBmgD,EAASC,EAAS,OACpBxgY,EAAOyO,KAAK,GAAGiC,KAAKy2B,OAAOo5V,EAASC,GAAU,+CAC9CD,EAASC,IAGXA,EAASD,GAGbD,EAAYlgD,EAAK,GAEjB,IAAIsgD,EAAqBJ,EAAY,EACrC,GAAIzrP,EAAO3xJ,MAAQw9Y,EACjB,OAAO,KAET7rP,EAAO3xJ,MAAQw9Y,EAEf,MAAM1C,EAAU,IAAIjwS,WAAW8mD,EAAO3xJ,MACtC,IAAK,IAAIwgB,EAAI,EAAGi9X,EAAUh2Y,EAAKpQ,OAAQmpB,EAAIi9X,EAASj9X,IAAK,CACvD08U,EAAOz1V,EAAK+Y,GACZ,IAAI9G,EAAMwjV,EAAK3tP,WACf,GAAIiuS,EAAoB,CACtB,GAAIA,EAAqB9jY,EAAK,CAE5B8jY,GAAsB9jY,EACtB,QACF,CAEEwjV,EAAOA,EAAK0E,SAAS47C,GACrB9jY,GAAO8jY,EACPA,EAAqB,CAEzB,CACA1C,EAAQxsW,IAAI4uT,EAAM9lW,GAClBA,GAAKsiB,CACP,CAKA,OAJIyjY,IAEFA,GAAUC,EAAY,GAEjB,CACL31Y,KAAMqzY,EACNjuC,IAAKwwC,EACLhN,IAAKiN,EACL5jY,IAAKyjY,EAET,CACA,OAAO,IACT,CA+DA,MAAMO,GACJ,qBAAOC,CAAer2C,EAAOmqC,GAC3B,GACO,cADCnqC,EACN,CACE,GAAqB,IAAjBmqC,EACF,OAAO,IAAI5mS,WAAW,CAAC,EAAM,IAAM,EAAM,IAAM,GAAM,MAChD,GAAqB,IAAjB4mS,EACT,OAAO,IAAI5mS,WAAW,CAAC,GAAM,EAAM,GAAM,IAAM,EAAM,GAAM,EAAM,GAAM,MAClE,GAAqB,IAAjB4mS,EACT,OAAO,IAAI5mS,WAAW,CAAC,EAAM,IAAM,EAAM,IAAM,GAAM,IAAM,EAAM,GAAM,GAAM,EAAM,IAAM,EAAM,MAC1F,GAAqB,IAAjB4mS,EACT,OAAO,IAAI5mS,WAAW,CAAC,EAAM,IAAM,EAAM,IAAM,GAAM,IAAM,EAAM,GAAM,GAAM,EAAM,IAAM,EAAM,IAAM,GAAM,IAAM,EAAM,EAAM,KACxH,GAAqB,IAAjB4mS,EACT,OAAO,IAAI5mS,WAAW,CAAC,EAAM,IAAM,EAAM,IAAM,GAAM,IAAM,EAAM,GAAM,GAAM,EAAM,IAAM,EAAM,IAAM,GAAM,EAAM,IAAM,EAAM,GAAM,IAAM,EAAM,KAC1I,GAAqB,IAAjB4mS,EACT,OAAO,IAAI5mS,WAAW,CAAC,EAAM,IAAM,EAAM,IAAM,GAAM,IAAM,EAAM,GAAM,GAAM,EAAM,IAAM,EAAM,IAAM,GAAM,EAAM,IAAM,EAAM,GAAM,IAAM,EAAM,EAAM,IAAM,EAAM,GAAM,EAAM,KAE1K,KAEP,CACE,GAAqB,IAAjB4mS,EAEF,OAAO,IAAI5mS,WAAW,CAAC,EAAK,GAAM,GAAM,IAAM,IAAM,GAAM,IAAM,IAAM,IAAM,EAAK,EAAK,EAAK,EAAK,GAAM,EAAK,IAAM,IAAM,GAAK,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,KACvW,GAAqB,IAAjB4mS,EAET,OAAO,IAAI5mS,WAAW,CAAC,EAAK,GAAM,GAAM,IAAM,IAAM,GAAM,IAAM,IAAM,IAAM,EAAK,EAAK,EAAK,EAAK,EAAK,IAAM,EAAK,EAAK,IAAM,IAAM,GAAK,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,KACrW,GAAqB,IAAjB4mS,EAET,OAAO,IAAI5mS,WAAW,CAAC,EAAK,GAAM,GAAM,IAAM,IAAM,GAAM,IAAM,IAAM,IAAM,EAAK,EAAK,EAAK,EAAK,EAAK,IAAM,EAAK,EAAK,IAAM,IAAM,GAAK,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,IAEvW,CAGX,EAOF,MAAM+yS,GAAapwX,KAAKC,IAAI,EAAG,IAAM,EACrC,MAAMowX,GACJ,WAAO9uQ,GA0CL,IAAI33I,EACJ,IAAKA,KA1CLymZ,GAAIhsX,MAAQ,CACVohV,KAAM,GAEN6qC,KAAM,GACNC,KAAM,GACNC,KAAM,GACNC,KAAM,GACNC,KAAM,GACNC,KAAM,GACNx3C,KAAM,GACNy3C,KAAM,GACN13C,KAAM,GACN23C,KAAM,GACNC,KAAM,GACNC,KAAM,GACN7zC,KAAM,GACN8zC,KAAM,GACNlsC,KAAM,GACN,OAAQ,GACRmsC,KAAM,GACN,OAAQ,GACRC,KAAM,GACNC,KAAM,GACNC,KAAM,GACNC,KAAM,GACNC,KAAM,GACNC,KAAM,GACNC,KAAM,GACN93C,KAAM,GACN+3C,KAAM,GACNC,KAAM,GACNp0C,KAAM,GACNC,KAAM,GACNH,KAAM,GACNrE,KAAM,GACNuD,KAAM,GACN7C,KAAM,GACNT,KAAM,GACN24C,KAAM,GACNC,KAAM,IAGEvB,GAAIhsX,MACRgsX,GAAIhsX,MAAM76B,eAAeI,KAC3BymZ,GAAIhsX,MAAMz6B,GAAK,CAACA,EAAEgC,WAAW,GAAIhC,EAAEgC,WAAW,GAAIhC,EAAEgC,WAAW,GAAIhC,EAAEgC,WAAW,KAGpF,MAAMimZ,EAAY,IAAIx0S,WAAW,CAAC,EAElC,EAAM,EAAM,EAEZ,EAAM,EAAM,EAAM,EAElB,IAAM,IAAM,IAAM,IAElB,EAAM,EAAM,EAAM,EAElB,EAAM,EAAM,EAAM,EAElB,EAAM,EAAM,EAAM,EAElB,GAAM,IAAM,IAAM,IAAM,IAAM,GAAM,GAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAElEy0S,EAAY,IAAIz0S,WAAW,CAAC,EAElC,EAAM,EAAM,EAEZ,EAAM,EAAM,EAAM,EAElB,IAAM,IAAM,IAAM,IAElB,EAAM,EAAM,EAAM,EAElB,EAAM,EAAM,EAAM,EAElB,EAAM,EAAM,EAAM,EAElB,GAAM,IAAM,IAAM,IAAM,IAAM,GAAM,GAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAExEgzS,GAAI0B,WAAa,CACfhhL,MAAO8gL,EACP7/T,MAAO8/T,GAET,MAAMrB,EAAO,IAAIpzS,WAAW,CAAC,EAE7B,EAAM,EAAM,EAEZ,EAAM,EAAM,EAAM,EAElB,EAAM,EAAM,EAAM,GAElB,IAAM,IAAM,IAAM,GAElB,EAEA,EAAM,EAAM,IAENk0S,EAAO,IAAIl0S,WAAW,CAAC,EAE7B,EAAM,EAAM,EAEZ,EAAM,EAAM,EAAM,IAElBgzS,GAAI2B,KAAO3B,GAAI4B,KAAO5B,GAAI6B,KAAOX,EACjClB,GAAI8B,KAAO,IAAI90S,WAAW,CAAC,EAE3B,EAAM,EAAM,EAEZ,EAAM,EAAM,EAAM,EAElB,EAAM,EAAM,EAAM,IAElBgzS,GAAI+B,KAAO,IAAI/0S,WAAW,CAAC,EAE3B,EAAM,EAAM,EAEZ,EAAM,EAEN,EAAM,EAAM,EAAM,EAAM,EAAM,IAE9BgzS,GAAIgC,KAAO,IAAIh1S,WAAW,CAAC,EAE3B,EAAM,EAAM,EAEZ,EAAM,EAEN,EAAM,IAENgzS,GAAIiC,KAAO,IAAIj1S,WAAW,CAAC,EAE3B,EAAM,EAAM,EAEZ,EAAM,EAAM,EAAM,IAElB,MAAMk1S,EAAa,IAAIl1S,WAAW,CAAC,IAAK,IAAK,IAAK,MAC5Cm1S,EAAY,IAAIn1S,WAAW,CAAC,GAAI,IAAK,GAAI,KACzCo1S,EAAe,IAAIp1S,WAAW,CAAC,EAAG,EAAG,EAAG,IAC9CgzS,GAAIqC,KAAOrC,GAAIsC,IAAItC,GAAIhsX,MAAMssX,KAAM4B,EAAYE,EAAcF,EAAYC,GACzEnC,GAAIuC,KAAOvC,GAAIsC,IAAItC,GAAIhsX,MAAMmsX,KAAMH,GAAIsC,IAAItC,GAAIhsX,MAAMosX,KAAMA,GAC7D,CACA,UAAOkC,CAAItkZ,KAAS22B,GAClB,IAAIxyB,EAAO,EACP5I,EAAIo7B,EAAQn7B,OAChB,MAAMqiB,EAAMtiB,EAEZ,KAAOA,KACL4I,GAAQwyB,EAAQp7B,GAAGm4G,WAErB,MAAM7zG,EAAS,IAAImvG,WAAW7qG,GAO9B,IANAtE,EAAO,GAAKsE,GAAQ,GAAK,IACzBtE,EAAO,GAAKsE,GAAQ,GAAK,IACzBtE,EAAO,GAAKsE,GAAQ,EAAI,IACxBtE,EAAO,GAAY,IAAPsE,EACZtE,EAAO4yC,IAAIzyC,EAAM,GAEZzE,EAAI,EAAG4I,EAAO,EAAG5I,EAAIsiB,EAAKtiB,IAE7BsE,EAAO4yC,IAAI9b,EAAQp7B,GAAI4I,GACvBA,GAAQwyB,EAAQp7B,GAAGm4G,WAErB,OAAO7zG,CACT,CACA,WAAOirW,CAAK9qW,GACV,OAAOgiZ,GAAIsC,IAAItC,GAAIhsX,MAAM80U,KAAMk3C,GAAI0B,WAAW1jZ,GAChD,CACA,WAAOuiZ,CAAK32Y,GACV,OAAOo2Y,GAAIsC,IAAItC,GAAIhsX,MAAMusX,KAAM32Y,EACjC,CACA,WAAOi/V,CAAKd,EAAWr9V,GACrBA,GAAYq9V,EACZ,MAAMy6C,EAAoB7yX,KAAKq2B,MAAMt7C,GAAYq1Y,GAAa,IACxD0C,EAAoB9yX,KAAKq2B,MAAMt7C,GAAYq1Y,GAAa,IAC9D,OAAOC,GAAIsC,IAAItC,GAAIhsX,MAAM60U,KAAM,IAAI77P,WAAW,CAAC,EAE/C,EAAM,EAAM,EAEZ,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAE1C,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAE1C+6P,GAAa,GAAK,IAAMA,GAAa,GAAK,IAAMA,GAAa,EAAI,IAAkB,IAAZA,EAEvEy6C,GAAqB,GAAIA,GAAqB,GAAK,IAAMA,GAAqB,EAAI,IAA0B,IAApBA,EAA0BC,GAAqB,GAAIA,GAAqB,GAAK,IAAMA,GAAqB,EAAI,IAA0B,IAApBA,EAA0B,GAAM,IAE1O,EAAM,IACR,CACA,WAAOjC,CAAKnvQ,GACV,OAAO2uQ,GAAIsC,IAAItC,GAAIhsX,MAAMwsX,KAAMR,GAAIn3C,KAAKx3N,EAAM02N,UAAW12N,EAAM3mI,UAAWs1Y,GAAIl3C,KAAKz3N,EAAMrzI,MAAOgiZ,GAAIU,KAAKrvQ,GAC3G,CACA,WAAOovQ,CAAKnP,GACV,OAAO0O,GAAIsC,IAAItC,GAAIhsX,MAAMysX,KAAM,IAAIzzS,WAAW,CAAC,EAAM,EAAM,EAAM,EAEjEskS,GAAkB,GAAIA,GAAkB,GAAK,IAAMA,GAAkB,EAAI,IAAuB,IAAjBA,IAEjF,CACA,WAAOoP,CAAKrvQ,GACV,MAAmB,UAAfA,EAAMrzI,KACDgiZ,GAAIsC,IAAItC,GAAIhsX,MAAM0sX,KAAMV,GAAIsC,IAAItC,GAAIhsX,MAAMutX,KAAMvB,GAAIgC,MAAOhC,GAAIuC,KAAMvC,GAAIiB,KAAK5vQ,IAE9E2uQ,GAAIsC,IAAItC,GAAIhsX,MAAM0sX,KAAMV,GAAIsC,IAAItC,GAAIhsX,MAAMstX,KAAMtB,GAAI+B,MAAO/B,GAAIuC,KAAMvC,GAAIiB,KAAK5vQ,GAEzF,CACA,WAAOw7N,CAAKtP,EAAImlD,EAAqBrxQ,GACnC,OAAO2uQ,GAAIsC,IAAItC,GAAIhsX,MAAM64U,KAAMmzC,GAAIS,KAAKljD,GAAKyiD,GAAIjzC,KAAK17N,EAAOqxQ,GAC/D,CACA,WAAO/B,CAAK3qN,GACV,IAAIz8L,EAAIy8L,EAAOx8L,OACf,MAAMmpZ,EAAQ,GACd,KAAOppZ,KACLopZ,EAAMppZ,GAAKymZ,GAAIt3C,KAAK1yK,EAAOz8L,IAE7B,OAAOymZ,GAAIsC,IAAIviY,MAAM,KAAM,CAACigY,GAAIhsX,MAAM2sX,KAAMX,GAAIc,KAAK9qN,EAAO,GAAG+xK,UAAW/xK,EAAO,GAAGtrL,WAAWqR,OAAO4mY,GAAO5mY,OAAOikY,GAAIa,KAAK7qN,IAC/H,CACA,WAAO6qN,CAAK7qN,GACV,IAAIz8L,EAAIy8L,EAAOx8L,OACf,MAAMmpZ,EAAQ,GACd,KAAOppZ,KACLopZ,EAAMppZ,GAAKymZ,GAAI52C,KAAKpzK,EAAOz8L,IAE7B,OAAOymZ,GAAIsC,IAAIviY,MAAM,KAAM,CAACigY,GAAIhsX,MAAM6sX,QAAS8B,GACjD,CACA,WAAO7B,CAAK/4C,EAAWr9V,GACrBA,GAAYq9V,EACZ,MAAMy6C,EAAoB7yX,KAAKq2B,MAAMt7C,GAAYq1Y,GAAa,IACxD0C,EAAoB9yX,KAAKq2B,MAAMt7C,GAAYq1Y,GAAa,IACxDt6W,EAAQ,IAAIunE,WAAW,CAAC,EAE9B,EAAM,EAAM,EAEZ,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAE1C,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAE1C+6P,GAAa,GAAK,IAAMA,GAAa,GAAK,IAAMA,GAAa,EAAI,IAAkB,IAAZA,EAEvEy6C,GAAqB,GAAIA,GAAqB,GAAK,IAAMA,GAAqB,EAAI,IAA0B,IAApBA,EAA0BC,GAAqB,GAAIA,GAAqB,GAAK,IAAMA,GAAqB,EAAI,IAA0B,IAApBA,EAA0B,EAAM,EAAM,EAAM,EAEtP,EAAM,EAEN,EAAM,EAEN,EAAM,EAAM,EAAM,EAElB,EAAM,EAAM,EAAM,EAElB,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,GAAM,EAAM,EAAM,EAElN,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAE1I,IAAM,IAAM,IAAM,MAElB,OAAOzC,GAAIsC,IAAItC,GAAIhsX,MAAM8sX,KAAMr7W,EACjC,CACA,WAAOu7W,CAAK3vQ,GACV,MAAMs7N,EAAUt7N,EAAMs7N,SAAW,GAC3BlnU,EAAQ,IAAIunE,WAAW,EAAI2/P,EAAQnzW,QACzC,IAAID,EACAiyE,EAGJ,IAAKjyE,EAAI,EAAGA,EAAIozW,EAAQnzW,OAAQD,IAC9BiyE,EAAQmhS,EAAQpzW,GAAGiyE,MACnB/lC,EAAMlsC,EAAI,GAAKiyE,EAAMo3U,WAAa,EAAIp3U,EAAMq3U,cAAgB,EAAIr3U,EAAMs3U,cAExE,OAAO9C,GAAIsC,IAAItC,GAAIhsX,MAAMgtX,KAAMv7W,EACjC,CACA,WAAOw7W,CAAK5vQ,GACV,OAAO2uQ,GAAIsC,IAAItC,GAAIhsX,MAAMitX,KAAMjB,GAAI32C,KAAKh4N,GAAQ2uQ,GAAIsC,IAAItC,GAAIhsX,MAAMqtX,KAAMrB,GAAI2B,MAAO3B,GAAIsC,IAAItC,GAAIhsX,MAAMmtX,KAAMnB,GAAI4B,MAAO5B,GAAIsC,IAAItC,GAAIhsX,MAAMotX,KAAMpB,GAAI8B,MAAO9B,GAAIsC,IAAItC,GAAIhsX,MAAMktX,KAAMlB,GAAI6B,MACvL,CACA,WAAOzsC,CAAK/jO,GACV,IAEI93I,EACAqQ,EACAiS,EAJAq+X,EAAM,GACNG,EAAM,GAMV,IAAK9gZ,EAAI,EAAGA,EAAI83I,EAAM6oQ,IAAI1gZ,OAAQD,IAChCqQ,EAAOynI,EAAM6oQ,IAAI3gZ,GACjBsiB,EAAMjS,EAAK8nG,WACXwoS,EAAI7+Y,KAAKwgB,IAAQ,EAAI,KACrBq+X,EAAI7+Y,KAAW,IAANwgB,GAGTq+X,EAAMA,EAAIn+X,OAAOniB,MAAMI,UAAUuJ,MAAMpJ,KAAKyP,IAI9C,IAAKrQ,EAAI,EAAGA,EAAI83I,EAAMgpQ,IAAI7gZ,OAAQD,IAChCqQ,EAAOynI,EAAMgpQ,IAAI9gZ,GACjBsiB,EAAMjS,EAAK8nG,WACX2oS,EAAIh/Y,KAAKwgB,IAAQ,EAAI,KACrBw+X,EAAIh/Y,KAAW,IAANwgB,GACTw+X,EAAMA,EAAIt+X,OAAOniB,MAAMI,UAAUuJ,MAAMpJ,KAAKyP,IAE9C,MAAMm5Y,EAAO/C,GAAIsC,IAAItC,GAAIhsX,MAAMisX,KAAM,IAAIjzS,WAAW,CAAC,EAErDktS,EAAI,GAEJA,EAAI,GAEJA,EAAI,GAEJ,IAEA,IAAO7oQ,EAAM6oQ,IAAI1gZ,QACfuiB,OAAOm+X,GAAKn+X,OAAO,CAACs1H,EAAMgpQ,IAAI7gZ,SAC7BuiB,OAAOs+X,KACJl9Y,EAAQk0I,EAAMl0I,MACdC,EAASi0I,EAAMj0I,OACf4lZ,EAAW3xQ,EAAMgoQ,WAAW,GAC5B4J,EAAW5xQ,EAAMgoQ,WAAW,GAClC,OAAO2G,GAAIsC,IAAItC,GAAIhsX,MAAMohV,KAAM,IAAIpoQ,WAAW,CAAC,EAAM,EAAM,EAE3D,EAAM,EAAM,EAEZ,EAAM,EAEN,EAAM,EAEN,EAAM,EAEN,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAElE7vG,GAAS,EAAI,IAAc,IAARA,EAEnBC,GAAU,EAAI,IAAe,IAATA,EAEpB,EAAM,GAAM,EAAM,EAElB,EAAM,GAAM,EAAM,EAElB,EAAM,EAAM,EAAM,EAElB,EAAM,EAEN,GAAM,IAAM,GAAM,IAAM,IAExB,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,GAAM,IAAM,IAAM,IAAM,GAAM,IAAM,IAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAE5J,EAAM,GAEN,GAAM,KAEN2lZ,EAAM/C,GAAIsC,IAAItC,GAAIhsX,MAAMksX,KAAM,IAAIlzS,WAAW,CAAC,EAAM,GAAM,IAAM,IAEhE,EAAM,GAAM,IAAM,IAElB,EAAM,GAAM,IAAM,OAElBgzS,GAAIsC,IAAItC,GAAIhsX,MAAM+sX,KAAM,IAAI/zS,WAAW,CAACg2S,GAAY,GAEpDA,GAAY,GAAK,IAAMA,GAAY,EAAI,IAAiB,IAAXA,EAAiBC,GAAY,GAE1EA,GAAY,GAAK,IAAMA,GAAY,EAAI,IAAiB,IAAXA,KAC/C,CACA,WAAO5C,CAAKhvQ,GACV,MAAM6xQ,EAAY7xQ,EAAMz+G,OAAOp5B,OAC/B,OAAO,IAAIwzG,WAAW,CAAC,EAEvB,EAAM,EAAM,EAGZ,EAEA,GAAOk2S,EAEP,EAAM,EAEN,EAGA,EAEA,GAAOA,EAEP,GAEA,GAEA,EAAM,EAAM,EAEZ,EAAM,EAAM,EAAM,EAElB,EAAM,EAAM,EAAM,EAGlB,GACEnnY,OAAO,CAACmnY,IAAYnnY,OAAOs1H,EAAMz+G,QAAQ7W,OAAO,CAAC,EAAM,EAAM,IACjE,CACA,gBAAOonY,CAAU9xQ,GACf,MAAMgiQ,EAAahiQ,EAAMgiQ,WACzB,OAAO,IAAIrmS,WAAW,CAAC,EAAM,EAAM,EAEnC,EAAM,EAAM,EAEZ,EAAM,EAEN,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAE1C,EAAMqkC,EAAMuiQ,aAEZ,EAAM,GAEN,EAAM,EAAM,EAAM,EAElBP,GAAc,EAAI,IAAmB,IAAbA,EAExB,EAAM,GACR,CACA,WAAO5+B,CAAKpjO,GACV,OAAO2uQ,GAAIsC,IAAItC,GAAIhsX,MAAMygV,KAAMurC,GAAImD,UAAU9xQ,GAAQ2uQ,GAAIsC,IAAItC,GAAIhsX,MAAMqsX,KAAML,GAAIK,KAAKhvQ,IACxF,CACA,UAAO6tQ,CAAI7tQ,GACT,OAAO2uQ,GAAIsC,IAAItC,GAAIhsX,MAAM,QAASgsX,GAAImD,UAAU9xQ,GAClD,CACA,UAAO8tQ,CAAI9tQ,GACT,OAAO2uQ,GAAIsC,IAAItC,GAAIhsX,MAAM,QAASgsX,GAAImD,UAAU9xQ,GAAQ2uQ,GAAIsC,IAAItC,GAAIhsX,MAAM4sX,KAAMvvQ,EAAMz+G,QACxF,CACA,WAAOy2U,CAAKh4N,GACV,MAAmB,UAAfA,EAAMrzI,KACmB,QAAvBqzI,EAAM0kQ,cAA0C,QAAhB1kQ,EAAMo4N,MACjCu2C,GAAIsC,IAAItC,GAAIhsX,MAAMq1U,KAAM22C,GAAIiC,KAAMjC,GAAId,IAAI7tQ,IAExB,QAAvBA,EAAM0kQ,aACDiK,GAAIsC,IAAItC,GAAIhsX,MAAMq1U,KAAM22C,GAAIiC,KAAMjC,GAAIb,IAAI9tQ,IAE5C2uQ,GAAIsC,IAAItC,GAAIhsX,MAAMq1U,KAAM22C,GAAIiC,KAAMjC,GAAIvrC,KAAKpjO,IAE3C2uQ,GAAIsC,IAAItC,GAAIhsX,MAAMq1U,KAAM22C,GAAIiC,KAAMjC,GAAI5qC,KAAK/jO,GAEtD,CACA,WAAOs3N,CAAKt3N,GACV,MAAMxlI,EAAKwlI,EAAMxlI,GACXnB,EAAW2mI,EAAM3mI,SAAW2mI,EAAM02N,UAClC5qW,EAAQk0I,EAAMl0I,MACdC,EAASi0I,EAAMj0I,OACfolZ,EAAoB7yX,KAAKq2B,MAAMt7C,GAAYq1Y,GAAa,IACxD0C,EAAoB9yX,KAAKq2B,MAAMt7C,GAAYq1Y,GAAa,IAC9D,OAAOC,GAAIsC,IAAItC,GAAIhsX,MAAM20U,KAAM,IAAI37P,WAAW,CAAC,EAE/C,EAAM,EAAM,EAEZ,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAE1C,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAE1CnhG,GAAM,GAAK,IAAMA,GAAM,GAAK,IAAMA,GAAM,EAAI,IAAW,IAALA,EAElD,EAAM,EAAM,EAAM,EAElB22Y,GAAqB,GAAIA,GAAqB,GAAK,IAAMA,GAAqB,EAAI,IAA0B,IAApBA,EAA0BC,GAAqB,GAAIA,GAAqB,GAAK,IAAMA,GAAqB,EAAI,IAA0B,IAApBA,EAA0B,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAE9Q,EAAM,EAEN,EAAM,EAEN,EAAM,EAEN,EAAM,EAEN,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,GAAM,EAAM,EAAM,EAElNtlZ,GAAS,EAAI,IAAc,IAARA,EAAc,EAAM,EAEvCC,GAAU,EAAI,IAAe,IAATA,EAAe,EAAM,IAE3C,CACA,WAAO2vW,CAAK17N,EAAOqxQ,GACjB,MAAMU,EAAwBpD,GAAIgB,KAAK3vQ,GACjCxlI,EAAKwlI,EAAMxlI,GACXw3Y,EAA+B1zX,KAAKq2B,MAAM08V,GAAuB3C,GAAa,IAC9EuD,EAA+B3zX,KAAKq2B,MAAM08V,GAAuB3C,GAAa,IACpF,OAAOC,GAAIsC,IAAItC,GAAIhsX,MAAM+4U,KAAMizC,GAAIsC,IAAItC,GAAIhsX,MAAMk5U,KAAM,IAAIlgQ,WAAW,CAAC,EAEvE,EAAM,EAAM,EAEZnhG,GAAM,GAAIA,GAAM,GAAK,IAAMA,GAAM,EAAI,IAAW,IAALA,KACtCm0Y,GAAIsC,IAAItC,GAAIhsX,MAAMi5U,KAAM,IAAIjgQ,WAAW,CAAC,EAE7C,EAAM,EAAM,EAEZq2S,GAAgC,GAAIA,GAAgC,GAAK,IAAMA,GAAgC,EAAI,IAAqC,IAA/BA,EAAqCC,GAAgC,GAAIA,GAAgC,GAAK,IAAMA,GAAgC,EAAI,IAAqC,IAA/BA,KAAwCtD,GAAI/zC,KAAK56N,EAAO+xQ,EAAsB5pZ,OAAS,GAE9W,GAEA,EAEA,GAEA,EAEA,GAEA4pZ,EACF,CAMA,WAAO16C,CAAKr3N,GAEV,OADAA,EAAM3mI,SAAW2mI,EAAM3mI,UAAY,WAC5Bs1Y,GAAIsC,IAAItC,GAAIhsX,MAAM00U,KAAMs3C,GAAIr3C,KAAKt3N,GAAQ2uQ,GAAIQ,KAAKnvQ,GAC3D,CACA,WAAO+3N,CAAK/3N,GACV,MAAMxlI,EAAKwlI,EAAMxlI,GACjB,OAAOm0Y,GAAIsC,IAAItC,GAAIhsX,MAAMo1U,KAAM,IAAIp8P,WAAW,CAAC,EAE/C,EAAM,EAAM,EAEZnhG,GAAM,GAAIA,GAAM,GAAK,IAAMA,GAAM,EAAI,IAAW,IAALA,EAE3C,EAAM,EAAM,EAAM,EAElB,EAAM,EAAM,EAAM,EAElB,EAAM,EAAM,EAAM,EAElB,EAAM,EAAM,EAAM,IAEpB,CACA,WAAOogW,CAAK56N,EAAOvjG,GACjB,MAAM6+T,EAAUt7N,EAAMs7N,SAAW,GAC3B9wV,EAAM8wV,EAAQnzW,OACd+pZ,EAAW,GAAK,GAAK1nY,EACrB2mC,EAAQ,IAAIwqD,WAAWu2S,GAC7B,IAAIhqZ,EACAisI,EACA96H,EACAvI,EACAqpE,EACAg4U,EAUJ,IATA11W,GAAU,EAAIy1W,EACd/gW,EAAM/R,IAAI,CAAgB,UAAf4gG,EAAMrzI,KAAmB,EAAO,EAE3C,EAAM,GAAM,EAEZ6d,IAAQ,GAAK,IAAMA,IAAQ,GAAK,IAAMA,IAAQ,EAAI,IAAY,IAANA,EAExDiyB,IAAW,GAAK,IAAMA,IAAW,GAAK,IAAMA,IAAW,EAAI,IAAe,IAATA,GAC9D,GACEv0C,EAAI,EAAGA,EAAIsiB,EAAKtiB,IACnBisI,EAASmnO,EAAQpzW,GACjBmR,EAAW86H,EAAO96H,SAClBvI,EAAOqjI,EAAOrjI,KACdqpE,EAAQg6D,EAAOh6D,MACfg4U,EAAMh+Q,EAAOg+Q,IACbhhW,EAAM/R,IAAI,CAAC/lC,IAAa,GAAK,IAAMA,IAAa,GAAK,IAAMA,IAAa,EAAI,IAAiB,IAAXA,EAElFvI,IAAS,GAAK,IAAMA,IAAS,GAAK,IAAMA,IAAS,EAAI,IAAa,IAAPA,EAE3DqpE,EAAMi4U,WAAa,EAAIj4U,EAAMo3U,UAAWp3U,EAAMq3U,cAAgB,EAAIr3U,EAAMs3U,eAAiB,EAAIt3U,EAAMk4U,cAAgB,EAAIl4U,EAAMm4U,UAA8B,MAAnBn4U,EAAMo4U,WAA2C,GAAnBp4U,EAAMo4U,WAE5KJ,IAAQ,GAAK,IAAMA,IAAQ,GAAK,IAAMA,IAAQ,EAAI,IAAY,IAANA,GACrD,GAAK,GAAKjqZ,GAEf,OAAOymZ,GAAIsC,IAAItC,GAAIhsX,MAAMi4U,KAAMzpT,EACjC,CACA,kBAAO07S,CAAYloK,GACZgqN,GAAIhsX,OACPgsX,GAAI9uQ,OAEN,MAAM2yQ,EAAQ7D,GAAIW,KAAK3qN,GAEvB,OADem2K,GAAiB6zC,GAAIqC,KAAMwB,EAE5C,EAEF7D,GAAIhsX,WAAQ,EACZgsX,GAAI0B,gBAAa,EACjB1B,GAAI2B,UAAO,EACX3B,GAAI4B,UAAO,EACX5B,GAAI6B,UAAO,EACX7B,GAAI8B,UAAO,EACX9B,GAAI+B,UAAO,EACX/B,GAAIgC,UAAO,EACXhC,GAAIiC,UAAO,EACXjC,GAAIqC,UAAO,EACXrC,GAAIuC,UAAO,EAEX,MAAMuB,GAAwB,IAC9B,SAASC,GAAoB/2C,EAAUg3C,EAAWC,EAAU,EAAG79V,GAAQ,GACrE,MAAMvoD,EAASmvW,EAAWg3C,EAAYC,EACtC,OAAO79V,EAAQz2B,KAAKy2B,MAAMvoD,GAAUA,CACtC,CAIA,SAASqmZ,GAAoBl3C,EAAU5mT,GAAQ,GAC7C,OAAO29V,GAAoB/2C,EAAU,IAAM,EAAI82C,GAAuB19V,EACxE,CASA,IAmkCIn9C,GAnkCAk7Y,GAAgB,KAChBC,GAAsB,KAC1B,MAAMC,GACJ,WAAAxiX,CAAYoN,EAAUrc,EAAQspX,EAAelsQ,EAAS,IAiBpD,GAhBAhwH,KAAKivB,cAAW,EAChBjvB,KAAK4S,YAAS,EACd5S,KAAKk8X,mBAAgB,EACrBl8X,KAAKskY,aAAc,EACnBtkY,KAAKukY,SAAW,KAChBvkY,KAAKwkY,SAAW,KAChBxkY,KAAKykY,WAAa,KAClBzkY,KAAK0kY,aAAe,KACpB1kY,KAAK2kY,oBAAsB,KAC3B3kY,KAAK4kY,mBAAoB,EACzB5kY,KAAK6kY,mBAAoB,EACzB7kY,KAAK8kY,sBAAmB,EACxB9kY,KAAKivB,SAAWA,EAChBjvB,KAAK4S,OAASA,EACd5S,KAAKk8X,cAAgBA,EACrBl8X,KAAKskY,aAAc,EACG,OAAlBH,GAAwB,CAC1B,MACMtmZ,GADYsxB,UAAUG,WAAa,IAChB/L,MAAM,kBAC/B4gY,GAAgBtmZ,EAASgf,SAAShf,EAAO,IAAM,CACjD,CACA,GAA4B,OAAxBumZ,GAA8B,CAChC,MAAMvmZ,EAASsxB,UAAUG,UAAU/L,MAAM,kBACzC6gY,GAAsBvmZ,EAASgf,SAAShf,EAAO,IAAM,CACvD,CACF,CACA,OAAAmtJ,GAEEhrI,KAAK4S,OAAS5S,KAAK8kY,iBAAmB9kY,KAAKukY,SAAWvkY,KAAKwkY,SAAW,IACxE,CACA,cAAAxS,CAAe+S,GACb9lY,EAAOuB,IAAI,0CACXR,KAAKukY,SAAWvkY,KAAKwkY,SAAWO,CAClC,CACA,kBAAAC,GACE/lY,EAAOuB,IAAI,uCACXR,KAAK6kY,mBAAoB,EACzB7kY,KAAK4kY,mBAAoB,CAC3B,CACA,gBAAA9S,GACE7yX,EAAOuB,IAAI,yCACXR,KAAKskY,aAAc,EACnBtkY,KAAK8kY,sBAAmBlsY,CAC1B,CACA,gBAAAqsY,CAAiBC,GAEf,IAAIC,GAAmB,EACvB,MAAMC,EAAWF,EAAa,GAAGl2C,IAC3BtR,EAAWwnD,EAAatjW,QAAO,CAACyjW,EAAQ7/Q,KAC5C,IAAIwpO,EAAMxpO,EAAOwpO,IACb5wT,EAAQ4wT,EAAMq2C,EAOlB,OANIjnW,GAAS,aAEX+mW,GAAmB,EACnBn2C,EAAMs2C,GAAat2C,EAAKo2C,GACxBhnW,EAAQ4wT,EAAMq2C,GAEZjnW,EAAQ,EACHinW,EAEFr2C,CAAG,GACTo2C,GAIH,OAHID,GACFlmY,EAAOoB,MAAM,yBAERq9U,CACT,CACA,KAAA6nD,CAAMhjC,EAAYmwB,EAAY5sB,EAAUiB,EAAWva,EAAYg5C,EAAoBv6S,EAAOuvR,GACxF,IAAI95J,EACA/+I,EACAu8Q,EACAj6V,EACAijW,EACA3H,EACAkmD,EAAkBj5C,EAClBk5C,EAAkBl5C,EAOtB,MAAMm5C,EAAWpjC,EAAW3vO,KAAO,EAC7BgzQ,EAAWlT,EAAW9/P,KAAO,EAC7Bp5I,EAASk5Y,EAAW/lC,QAAQnzW,OAC5BqsZ,EAAqBtjC,EAAW5V,QAAQnzW,OAAS,EACjDssZ,EAAqB76S,GAASzxG,EAAS,GAAKA,EAAS,EAE3D,KADsBmsZ,GAAYE,MAAyBD,GAAYE,IAAuB9lY,KAAKskY,aAAer5S,EACjG,CACf,GAAIjrF,KAAKskY,YAAa,CACpB,IAAIyB,EAAuBC,EAAoBC,EAAwBC,EACvE,MAAMtzX,EAAS5S,KAAK8kY,kBAChBlyX,GAAW8/W,EAAWv1Y,QAAUy1B,EAAOz1B,OAASu1Y,EAAWt1Y,SAAWw1B,EAAOx1B,SAA8D,OAAlD2oZ,EAAwBrT,EAAW2G,iBAAsB,EAAS0M,EAAsB,OAAqD,OAA3CC,EAAqBpzX,EAAOymX,iBAAsB,EAAS2M,EAAmB,MAA4D,OAAnDC,EAAyBvT,EAAW2G,iBAAsB,EAAS4M,EAAuB,OAAsD,OAA5CC,EAAsBtzX,EAAOymX,iBAAsB,EAAS6M,EAAoB,KACxclmY,KAAK8xX,kBAET,MACE5zC,EAAcl+U,KAAKmmY,WAAW5jC,EAAYmwB,EAAYlmC,EAAYg5C,GAEpE,MAAMX,EAAoB7kY,KAAK6kY,kBAC/B,IACIuB,EADAC,GAAsB,EAE1B,GAAIP,IACFO,EAwsBR,SAA2B15C,GACzB,IAAK,IAAIpzW,EAAI,EAAGA,EAAIozW,EAAQnzW,OAAQD,IAClC,GAAIozW,EAAQpzW,GAAGW,IACb,OAAOX,EAGX,OAAQ,CACV,CA/sB6B+sZ,CAAkB5T,EAAW/lC,UAC7Ck4C,GAAqB7kY,KAAK4S,OAAO2zX,8BAEpC,GADAhnD,GAAc,EACV8mD,EAAqB,EAAG,CAC1BpnY,EAAOyO,KAAK,0BAA0B24X,YAA6B7sZ,6CACnE,MAAMkkW,EAAW19U,KAAKilY,iBAAiBvS,EAAW/lC,SAClD+lC,EAAW/lC,QAAU+lC,EAAW/lC,QAAQppW,MAAM8iZ,GAC9C3T,EAAW9F,SAAWyZ,EACtBX,IAAoBhT,EAAW/lC,QAAQ,GAAGqC,IAAMtR,GAAYg1C,EAAWrB,eACvE+U,EAAmBV,CACrB,MAAmC,IAAxBW,IACTpnY,EAAOyO,KAAK,2CAA2Cl0B,mBACvD+lW,GAAc,GAIpB,GAAIv/U,KAAKskY,YAAa,CACpB,GAAIuB,GAAsBC,EAAoB,CAK5C,MAAMpoD,EAAW19U,KAAKilY,iBAAiBvS,EAAW/lC,SAE5C65C,GADUlB,GAAa/iC,EAAW5V,QAAQ,GAAGqC,IAAKtR,GAAYA,GACzBg1C,EAAWrB,eACtDoU,GAAmB91X,KAAKhT,IAAI,EAAG6pY,GAC/Bd,GAAmB/1X,KAAKhT,IAAI,GAAI6pY,EAClC,CAGA,GAAIX,GAOF,GALKtjC,EAAW8wB,aACdp0X,EAAOyO,KAAK,2DACZwwU,EAAcl+U,KAAKmmY,WAAW5jC,EAAYmwB,EAAYlmC,EAAYg5C,IAEpE7jU,EAAQ3hE,KAAKymY,WAAWlkC,EAAYkjC,EAAiBzlY,KAAK4kY,kBAAmBY,EAAoBI,GAAYE,GAAsBtrB,IAAiB7b,GAA0B+mC,OAAkB9sY,GAC5LktY,EAAoB,CACtB,MAAMY,EAAmB/kU,EAAQA,EAAMg8Q,OAASh8Q,EAAM+7Q,SAAW,EAE5Dg1C,EAAWrB,iBACdpyX,EAAOyO,KAAK,2DACZwwU,EAAcl+U,KAAKmmY,WAAW5jC,EAAYmwB,EAAYlmC,EAAYg5C,IAEpE9kL,EAAQ1gN,KAAK2mY,WAAWjU,EAAYgT,EAAiBb,EAAmB6B,EAC1E,OACSZ,IACTplL,EAAQ1gN,KAAK2mY,WAAWjU,EAAYgT,EAAiBb,EAAmB,IAEtEnkL,IACFA,EAAMkmL,cAAgBP,EACtB3lL,EAAM6+H,aAAsC,IAAxB8mD,EACpB3lL,EAAM0lL,iBAAmBA,EAE7B,CACF,CAWA,OARIpmY,KAAKskY,aAAetkY,KAAKukY,UAAYvkY,KAAKwkY,WACxC1+B,EAASnZ,QAAQnzW,SACnB0tW,EAAM2/C,GAAiC/gC,EAAUtZ,EAAYxsV,KAAKukY,SAAUvkY,KAAKwkY,WAE/Ez9B,EAAUpa,QAAQnzW,SACpByK,EAAO6iZ,GAAiC//B,EAAWva,EAAYxsV,KAAKukY,YAGjE,CACL5iU,QACA++I,QACAw9H,cACAqB,cACAt7V,OACAijW,MAEJ,CACA,UAAAi/C,CAAW5jC,EAAYmwB,EAAYlmC,EAAYg5C,GAC7C,MAAMuB,EAAexkC,EAAW5V,QAC1Bu4C,EAAexS,EAAW/lC,QAC1BuvC,EAAgBl8X,KAAKk8X,cACrBlmN,EAAS,CAAC,EACVuuN,EAAWvkY,KAAKukY,SACtB,IAEIjd,EACA0f,EACAj/C,EAJAk/C,GAAiB1C,GAAYiB,EAC7BxqZ,EAAY,YAOhB,GAHIisZ,IACF3f,EAAU0f,EAAUpqY,KAElB2lW,EAAW3vV,QAAUm0X,EAAavtZ,OAAQ,CAM5C,OADA+oX,EAAWxa,UAAYwa,EAAW8wB,WAC1B9wB,EAAWwzB,cACjB,IAAK,MACCmG,EAAc+C,MAEhBjkZ,EAAY,aACZunX,EAAW9Y,MAAQ,IACVyyC,EAAcgD,MAEvB38B,EAAW9Y,MAAQ,OAErB,MACF,IAAK,MACH8Y,EAAW9Y,MAAQ,OAGvBzzK,EAAOr0G,MAAQ,CACb91E,GAAI,QACJ7Q,UAAWA,EACXyuW,MAAO8Y,EAAW9Y,MAClBvL,YAAyC,QAA5BqkB,EAAWwzB,cAA0BmG,EAAc+C,KAAO,IAAIjyS,WAAW,GAAKgzS,GAAI9hD,YAAY,CAACqkB,IAC5GvjW,SAAU,CACR40X,aAAcrxB,EAAWqxB,eAGzBqT,IACFl/C,EAAYwa,EAAW8uB,eAClBkT,GAAYx8C,IAAcw8C,EAASx8C,UAItCk/C,GAAgB,EAFhB3f,EAAU0f,EAAUD,EAAa,GAAG/3C,IAAMr/U,KAAKy2B,MAAM2hT,EAAYyE,GAKvE,CACA,GAAIkmC,EAAWwH,KAAOxH,EAAW2H,KAAO6K,EAAa1rZ,OAAQ,CAc3D,GAXAk5Y,EAAW3qC,UAAY2qC,EAAWrB,eAClCr7M,EAAO0qC,MAAQ,CACb70N,GAAI,OACJ7Q,UAAW,YACXyuW,MAAOipC,EAAWjpC,MAClBvL,YAAa8hD,GAAI9hD,YAAY,CAACw0C,IAC9B1zX,SAAU,CACR7hB,MAAOu1Y,EAAWv1Y,MAClBC,OAAQs1Y,EAAWt1Y,SAGnB6pZ,EAEF,GADAl/C,EAAY2qC,EAAWrB,eAClBkT,GAAYx8C,IAAcw8C,EAASx8C,UAMtCk/C,GAAgB,MANiC,CACjD,MAAMvpD,EAAW19U,KAAKilY,iBAAiBC,GACjClmK,EAAcrvN,KAAKy2B,MAAM2hT,EAAYyE,GAC3Cw6C,EAAUr3X,KAAKjT,IAAIsqY,EAAS1B,GAAaJ,EAAa,GAAG1S,IAAK90C,GAAY1+G,GAC1EsoJ,EAAU33W,KAAKjT,IAAI4qX,EAAS5pC,EAAW1+G,EACzC,CAIFh/N,KAAK8kY,iBAAmB,CACtB3nZ,MAAOu1Y,EAAWv1Y,MAClBC,OAAQs1Y,EAAWt1Y,OACnBi8Y,WAAY3G,EAAW2G,WAE3B,CACA,GAAIt/Y,OAAOiC,KAAKg6L,GAAQx8L,OActB,OAbAwmB,KAAKskY,aAAc,EACf2C,GACFjnY,KAAKukY,SAAW,CACdv3C,SAAUs6B,EACVv/B,UAAWA,GAEb/nV,KAAKwkY,SAAW,CACdx3C,SAAUg6C,EACVj/C,UAAWA,IAGbu/B,EAAUv/B,OAAYnvV,EAEjB,CACLo9K,SACAsxM,UACAv/B,YAGN,CACA,UAAA4+C,CAAWt1Q,EAAOm7N,EAAYgiC,EAAYkY,GACxC,MAAMQ,EAAY71Q,EAAMggQ,eAClB8V,EAAe91Q,EAAMs7N,QACrBy6C,EAAgB,GAChBvQ,EAAYsQ,EAAa3tZ,OACzB8tY,EAAUtnX,KAAKukY,SACrB,IAGI8C,EACAC,EAJA7C,EAAazkY,KAAKykY,WAClB32W,EAAS,EACTy5W,EAAoBvnY,KAAK2kY,oBAGzBU,EAASziY,OAAO63R,kBAChB+sG,EAAS5kY,OAAO83R,kBAChB+sG,GAAc,EAGlB,IAAKjZ,GAA6B,OAAfiW,EAAqB,CACtC,MAAMz1C,EAAMxC,EAAa06C,EACnB1D,EAAM2D,EAAa,GAAGn4C,IAAMs2C,GAAa6B,EAAa,GAAG3U,IAAK2U,EAAa,GAAGn4C,KAChFm1C,IAAgC,OAAfM,GAAuB90X,KAAK+2B,IAAIsoT,EAAMw0C,EAAMiB,GAAc,KAE7EjW,GAAa,EAGbiW,EAAaz1C,EAAMw0C,CAEvB,CAIA,MAAMkE,EAAWpgB,EAAQt6B,SAAWk6C,EAAY5f,EAAQv/B,UACxD,IAAK,IAAIxuW,EAAI,EAAGA,EAAIs9Y,EAAWt9Y,IAAK,CAClC,MAAMisI,EAAS2hR,EAAa5tZ,GAC5BisI,EAAOwpO,IAAMs2C,GAAa9/Q,EAAOwpO,IAAM04C,EAAUjD,GACjDj/Q,EAAOgtQ,IAAM8S,GAAa9/Q,EAAOgtQ,IAAMkV,EAAUjD,GAC7Cj/Q,EAAOgtQ,IAAM2U,EAAa5tZ,EAAI,EAAIA,EAAI,EAAIA,GAAGi5Y,MAC/CiV,GAAc,EAElB,CAGIA,GACFN,EAAa5nW,MAAK,SAAU5kD,EAAGu3B,GAC7B,MAAMy1X,EAAWhtZ,EAAE63Y,IAAMtgX,EAAEsgX,IACrBoV,EAAWjtZ,EAAEq0W,IAAM98U,EAAE88U,IAC3B,OAAO24C,GAAYC,CACrB,IAIFP,EAAWF,EAAa,GAAG3U,IAC3B8U,EAAUH,EAAaA,EAAa3tZ,OAAS,GAAGg5Y,IAIhD,MAAMqV,EAAgBP,EAAUD,EAC1BS,EAAwBD,EAAgBl4X,KAAKy2B,MAAMyhW,GAAiBhR,EAAY,IAAM0Q,GAAqBl2Q,EAAMggQ,eAAiB,GAGxI,GAAI7C,EAAY,CAEd,MAAMpwV,EAAQipW,EAAW5C,EACnBsD,EAAY3pW,EAAQ0pW,EACpBE,EAAe5pW,GAAS,EAC9B,IAAI2pW,GAAaC,KACXD,EACF9oY,EAAOyO,KAAK,QAAQw2X,GAAoB9lW,GAAO,UAAaA,4CAAgDouT,EAAWn3U,QAAQ,MAE/HpW,EAAOyO,KAAK,QAAQw2X,IAAqB9lW,GAAO,UAAaA,mDAAuDouT,EAAWn3U,QAAQ,OAEpI2yX,GAAgBvD,GAAc0C,EAAa,GAAGn4C,KAAOm1C,IAAe,CACvEkD,EAAW5C,EACX,MAAMwD,EAAWd,EAAa,GAAGn4C,IAAM5wT,EACvC,GAAI2pW,EACFZ,EAAa,GAAG3U,IAAM6U,EACtBF,EAAa,GAAGn4C,IAAMi5C,OAEtB,IAAK,IAAI1uZ,EAAI,EAAGA,EAAI4tZ,EAAa3tZ,UAC3B2tZ,EAAa5tZ,GAAGi5Y,IAAMyV,GADa1uZ,IAIvC4tZ,EAAa5tZ,GAAGi5Y,KAAOp0V,EACvB+oW,EAAa5tZ,GAAGy1W,KAAO5wT,EAG3Bn/B,EAAOuB,IAAI,oCAAoC0jY,GAAoB+D,GAAU,MAAS/D,GAAoBmD,GAAU,cAAiBnD,GAAoB9lW,GAAO,QAClK,CAEJ,CACAipW,EAAW13X,KAAKhT,IAAI,EAAG0qY,GACvB,IAAIa,EAAS,EACTC,EAAU,EACVC,EAAUf,EACd,IAAK,IAAI9tZ,EAAI,EAAGA,EAAIs9Y,EAAWt9Y,IAAK,CAElC,MAAMisI,EAAS2hR,EAAa5tZ,GACtBi9Y,EAAQhxQ,EAAOgxQ,MACf6R,EAAU7R,EAAMh9Y,OACtB,IAAI8uZ,EAAY,EAChB,IAAK,IAAI3lY,EAAI,EAAGA,EAAI0lY,EAAS1lY,IAC3B2lY,GAAa9R,EAAM7zX,GAAG/Y,KAAKpQ,OAE7B2uZ,GAAWG,EACXJ,GAAUG,EACV7iR,EAAOhsI,OAAS8uZ,EAGZ9iR,EAAOgtQ,IAAM4V,GACf5iR,EAAOgtQ,IAAM4V,EACbA,GAAWN,EAAwB,EAAI,GAAK,GAE5CM,EAAU5iR,EAAOgtQ,IAEnB6S,EAAS11X,KAAKjT,IAAI8oH,EAAOwpO,IAAKq2C,GAC9BmC,EAAS73X,KAAKhT,IAAI6oH,EAAOwpO,IAAKw4C,EAChC,CACAF,EAAUH,EAAatQ,EAAY,GAAGrE,IAItC,MAAM+V,EAAWJ,EAAU,EAAID,EAAS,EACxC,IAAI3H,EACJ,IACEA,EAAO,IAAIvzS,WAAWu7S,EACxB,CAAE,MAAOtiY,GASP,YARAjG,KAAKivB,SAAS4kW,KAAKz+K,EAAO5yI,MAAO4yI,EAAO5yI,MAAO,CAC7CxkF,KAAMm8V,EAAWquD,UACjB1nC,QAAS1mB,EAAaquD,kBACtBluG,OAAO,EACP72S,MAAOuiB,EACPwf,MAAO8iX,EACP/6X,OAAQ,8BAA8B+6X,KAG1C,CACA,MAAM3tM,EAAO,IAAIxvG,SAASm1S,EAAKxuS,QAC/B6oG,EAAKlgD,UAAU,EAAG6tP,GAClBhI,EAAK9vW,IAAIuvW,GAAIhsX,MAAMusX,KAAM,GACzB,IAAImI,GAAqB,EACrBC,EAAc/lY,OAAO63R,kBACrBmuG,EAAchmY,OAAO63R,kBACrBouG,EAAcjmY,OAAO83R,kBACrBouG,EAAclmY,OAAO83R,kBACzB,IAAK,IAAInhT,EAAI,EAAGA,EAAIs9Y,EAAWt9Y,IAAK,CAClC,MAAM+8Y,EAAc6Q,EAAa5tZ,GAC3BwvZ,EAAmBzS,EAAYE,MACrC,IAcIwS,EAdAC,EAAkB,EAEtB,IAAK,IAAItmY,EAAI,EAAG0lY,EAAUU,EAAiBvvZ,OAAQmpB,EAAI0lY,EAAS1lY,IAAK,CACnE,MAAM+zC,EAAOqyV,EAAiBpmY,GACxBumY,EAAWxyV,EAAK9sD,KAChBu/Y,EAAczyV,EAAK9sD,KAAK8nG,WAC9BkpG,EAAKlgD,UAAU5sH,EAAQq7W,GACvBr7W,GAAU,EACVyyW,EAAK9vW,IAAIy4W,EAAUp7W,GACnBA,GAAUq7W,EACVF,GAAmB,EAAIE,CACzB,CAIA,GAAI5vZ,EAAIs9Y,EAAY,EAClB0Q,EAAoBJ,EAAa5tZ,EAAI,GAAGi5Y,IAAM8D,EAAY9D,IAC1DwW,EAAW7B,EAAa5tZ,EAAI,GAAGy1W,IAAMsnC,EAAYtnC,QAC5C,CACL,MAAMp8U,EAAS5S,KAAK4S,OACdw2X,EAAoB7vZ,EAAI,EAAI+8Y,EAAY9D,IAAM2U,EAAa5tZ,EAAI,GAAGi5Y,IAAMsV,EAE9E,GADAkB,EAAWzvZ,EAAI,EAAI+8Y,EAAYtnC,IAAMm4C,EAAa5tZ,EAAI,GAAGy1W,IAAM84C,EAC3Dl1X,EAAOy2X,wBAAgD,OAAtBrpY,KAAK0kY,aAAuB,CAM/D,MAAM4E,EAAe35X,KAAKq2B,MAAMpzB,EAAO01W,cAAgB4e,GACjDqC,GAAmB7C,EAAmBrB,EAASqB,EAAmBQ,EAAYlnY,KAAK0kY,cAAgBpO,EAAYtnC,IACjHu6C,EAAkBD,GAGpB/B,EAAoBgC,EAAkBH,EAClC7B,EAAoB,EACtBA,EAAoB6B,EAEpBV,GAAqB,EAEvBzpY,EAAOuB,IAAI,sCAAsC+oY,EAAkB,6CAA6ChC,EAAoB,oCAEpIA,EAAoB6B,CAExB,MACE7B,EAAoB6B,CAExB,CACA,MAAMI,EAAwB75X,KAAKy2B,MAAMkwV,EAAYtnC,IAAMsnC,EAAY9D,KACvEmW,EAAch5X,KAAKjT,IAAIisY,EAAapB,GACpCsB,EAAcl5X,KAAKhT,IAAIksY,EAAatB,GACpCqB,EAAcj5X,KAAKjT,IAAIksY,EAAaI,GACpCF,EAAcn5X,KAAKhT,IAAImsY,EAAaE,GACpC5B,EAAc/rZ,KAAK,IAAIouZ,GAAUnT,EAAYp8Y,IAAKqtZ,EAAmB0B,EAAiBO,GACxF,CACA,GAAIpC,EAAc5tZ,OAChB,GAAI2qZ,IACF,GAAIA,GAAgB,GAAI,CAGtB,MAAM34U,EAAQ47U,EAAc,GAAG57U,MAC/BA,EAAMo3U,UAAY,EAClBp3U,EAAMm4U,UAAY,CACpB,OACK,GAAIS,IAGL0E,EAAcF,EAAcC,EAAcF,GAAeb,EAAwBe,EAAc,MAAkC,IAAzBzB,EAAc,GAAG5D,IAAW,CACtIvkY,EAAOyO,KAAK,uGACZ,IAAI8kX,EAAM6U,EACV,IAAK,IAAI9tZ,EAAI,EAAGsiB,EAAMurY,EAAc5tZ,OAAQD,EAAIsiB,EAAKtiB,IAAK,CACxD,MAAMmwZ,EAAUlX,EAAM4U,EAAc7tZ,GAAGmR,SACjCskW,EAAMwjC,EAAM4U,EAAc7tZ,GAAGiqZ,IACnC,GAAIjqZ,EAAIsiB,EAAM,EAAG,CACf,MAAM8tY,EAAUD,EAAUtC,EAAc7tZ,EAAI,GAAGiqZ,IAC/C4D,EAAc7tZ,GAAGmR,SAAWi/Y,EAAU36C,CACxC,MACEo4C,EAAc7tZ,GAAGmR,SAAWnR,EAAI6tZ,EAAc7tZ,EAAI,GAAGmR,SAAWo9Y,EAElEV,EAAc7tZ,GAAGiqZ,IAAM,EACvBhR,EAAMkX,CACR,CACF,CAIJnC,EAAoBmB,IAAuBnB,EAAoBO,EAAwBP,EACvFvnY,KAAKykY,WAAaA,EAAa6C,EAAUC,EACzCvnY,KAAK2kY,oBAAsB4C,EAC3BvnY,KAAK6kY,mBAAoB,EACzB,MAIMj7Y,EAAO,CACXwiW,MALW4zC,GAAInzC,KAAKx7N,EAAMigQ,iBAAkB+V,EAAUxnY,EAAS,CAAC,EAAGwxH,EAAO,CAC1Es7N,QAASy6C,KAKT/6C,MAAOk0C,EACP7iD,SAAU2nD,EAAS6B,EACnBvpD,QAAS6pD,EAASD,GAAqBL,EACvCtpD,SAAUypD,EAAWH,EACrBrpD,OAAQ4mD,EAAayC,EACrBlpZ,KARW,QASX2nZ,UAAU,EACVC,UAAU,EACVx2M,GAAIg4M,EAAc5tZ,OAClBozY,QAASv7P,EAAMu7P,SAIjB,OAFAv7P,EAAMs7N,QAAU,GAChBt7N,EAAMu7P,QAAU,EACThjY,CACT,CACA,kBAAAggZ,CAAmBv4Q,GACjB,OAAQA,EAAM0kQ,cACZ,IAAK,MACH,OApiB4B,KAqiB9B,IAAK,MACH,OAriBsB,KAsiBxB,QACE,OAziBsB,KA2iB5B,CACA,UAAA0Q,CAAWp1Q,EAAOm7N,EAAYgiC,EAAYgX,EAAoBE,GAC5D,MAAMrU,EAAiBhgQ,EAAMggQ,eAEvBwY,EAAcxY,GADChgQ,EAAMgiQ,WAAahiQ,EAAMgiQ,WAAahC,GAErDkW,EAAoBvnY,KAAK4pY,mBAAmBv4Q,GAC5Cy4Q,EAAsBvC,EAAoBsC,EAC1CviB,EAAUtnX,KAAKukY,SACfwF,EAAiC,QAAvB14Q,EAAM0kQ,cAA0B/1X,KAAKk8X,cAAc+C,KAC7DmI,EAAgB,GAChB4C,OAAuCpxY,IAApB8sY,EACzB,IAAIyB,EAAe91Q,EAAMs7N,QACrB7+T,EAASi8W,EAAU,EAAI,EACvBrF,EAAe1kY,KAAK0kY,eAAiB,EAYzC,MAAMuF,EAAmBz9C,EAAa6kC,EAChCqW,EAAWpgB,EAAQt6B,SAAWqkC,EAAiB/J,EAAQv/B,UAO7D,GANA/nV,KAAK4kY,kBAAoBpW,EAAaA,GAAc2Y,EAAa3tZ,QAAUkrZ,EAAe,IAAMc,GAAsB71X,KAAK+2B,IAAIujW,EAAmBvF,GAAgB,KAAQ/0X,KAAK+2B,IAAI4+V,GAAa6B,EAAa,GAAGn4C,IAAM04C,EAAUuC,GAAoBvF,GAAgB,GAAKoF,GAGzQ3C,EAAavkZ,SAAQ,SAAU4iI,GAC7BA,EAAOwpO,IAAMs2C,GAAa9/Q,EAAOwpO,IAAM04C,EAAUuC,EACnD,KACKzb,GAAckW,EAAe,EAAG,CAOnC,GAHAyC,EAAeA,EAAanjY,QAAOwhH,GAAUA,EAAOwpO,KAAO,KAGtDm4C,EAAa3tZ,OAChB,OAIAkrZ,EAFsB,IAApBgB,EAEa,EACNF,IAAuBwE,EAEjBr6X,KAAKhT,IAAI,EAAGstY,GAGZ9C,EAAa,GAAGn4C,GAEnC,CAQA,GAA2B,QAAvB39N,EAAM0kQ,aAAwB,CAChC,MAAMmU,EAAsBlqY,KAAK4S,OAAOs3X,oBACxC,IAAK,IAAI3wZ,EAAI,EAAGowZ,EAAUjF,EAAcnrZ,EAAI4tZ,EAAa3tZ,OAAQD,IAAK,CAEpE,MAAMisI,EAAS2hR,EAAa5tZ,GACtBy1W,EAAMxpO,EAAOwpO,IACb5wT,EAAQ4wT,EAAM26C,EACdj/Y,EAAWilB,KAAK+2B,IAAI,IAAOtI,EAAQizV,GAGzC,GAAIjzV,IAAU8rW,EAAsBJ,GAAuBE,EAC/C,IAANzwZ,IACF0lB,EAAOyO,KAAK,kBAAkBshV,EAAMqiC,GAAgBh8W,QAAQ,gCAAgC1F,KAAKy2B,MAAM,IAAOhI,EAAQizV,UACtHrxX,KAAK0kY,aAAeA,EAAeiF,EAAU36C,QAS5C,GAAI5wT,GAAS8rW,EAAsBJ,GAAuBp/Y,EA/nBrC,KA+nB6Es/Y,EAAkB,CACvH,IAAI7/I,EAAUx6O,KAAKy2B,MAAMhI,EAAQ0rW,GAGjCH,EAAU36C,EAAM7kG,EAAU2/I,EACtBH,EAAU,IACZx/I,IACAw/I,GAAWG,GAEH,IAANvwZ,IACFymB,KAAK0kY,aAAeA,EAAeiF,GAErC1qY,EAAOyO,KAAK,4BAA4By8O,oBAA0Bw/I,EAAUtY,GAAgBh8W,QAAQ,cAAc1F,KAAKy2B,MAAM,IAAOhI,EAAQizV,cAC5I,IAAK,IAAI1uX,EAAI,EAAGA,EAAIwnP,EAASxnP,IAAK,CAChC,MAAMwnY,EAAWx6X,KAAKhT,IAAIgtY,EAAS,GACnC,IAAIS,EAAYvK,GAAIC,eAAezuQ,EAAMoiQ,eAAiBpiQ,EAAMo4N,MAAOp4N,EAAMuiQ,cACxEwW,IACHnrY,EAAOuB,IAAI,oGACX4pY,EAAY5kR,EAAO9uE,KAAKqtS,YAE1BojD,EAAajnT,OAAO3mG,EAAG,EAAG,CACxBm9D,KAAM0zV,EACNp7C,IAAKm7C,IAEPR,GAAWG,EACXvwZ,GACF,CACF,CACAisI,EAAOwpO,IAAM26C,EACbA,GAAWG,CACb,CACF,CACA,IAEIvJ,EAFA0H,EAAW,KACXpW,EAAU,KAEV0W,EAAW,EACX9J,EAAe0I,EAAa3tZ,OAChC,KAAOilZ,KACL8J,GAAYpB,EAAa1I,GAAc/nV,KAAKg7C,WAE9C,IAAK,IAAI/uF,EAAI,EAAG0nY,EAAalD,EAAa3tZ,OAAQmpB,EAAI0nY,EAAY1nY,IAAK,CACrE,MAAM2nY,EAAcnD,EAAaxkY,GAC3B+zC,EAAO4zV,EAAY5zV,KACzB,IAAIs4S,EAAMs7C,EAAYt7C,IACtB,GAAgB,OAAZ6iC,EAAkB,CAGDuV,EAAczkY,EAAI,GAC1BjY,SAAWilB,KAAKy2B,OAAO4oT,EAAM6iC,GAAWgY,EACrD,KAAO,CAOL,GANIrb,GAAqC,QAAvBn9P,EAAM0kQ,eAEtB/mC,EAAM01C,GAGRuD,EAAWj5C,IACPu5C,EAAW,GAwBb,OArBAA,GAAYz6W,EACZ,IACEyyW,EAAO,IAAIvzS,WAAWu7S,EACxB,CAAE,MAAOtiY,GASP,YARAjG,KAAKivB,SAAS4kW,KAAKz+K,EAAO5yI,MAAO4yI,EAAO5yI,MAAO,CAC7CxkF,KAAMm8V,EAAWquD,UACjB1nC,QAAS1mB,EAAaquD,kBACtBluG,OAAO,EACP72S,MAAOuiB,EACPwf,MAAO8iX,EACP/6X,OAAQ,8BAA8B+6X,KAG1C,CACA,IAAKwB,EAAS,CACC,IAAI3+S,SAASm1S,EAAKxuS,QAC1B2oD,UAAU,EAAG6tP,GAClBhI,EAAK9vW,IAAIuvW,GAAIhsX,MAAMusX,KAAM,EAC3B,CAKJ,CACAA,EAAK9vW,IAAIimB,EAAM5oB,GACf,MAAMy8W,EAAU7zV,EAAKg7C,WACrB5jE,GAAUy8W,EAIVnD,EAAc/rZ,KAAK,IAAIouZ,IAAU,EAAMlC,EAAmBgD,EAAS,IACnE1Y,EAAU7iC,CACZ,CAGA,MAAM6nC,EAAYuQ,EAAc5tZ,OAChC,IAAKq9Y,EACH,OAIF,MAAMC,EAAasQ,EAAcA,EAAc5tZ,OAAS,GACxDwmB,KAAK0kY,aAAeA,EAAe7S,EAAUgY,EAAc/S,EAAWpsY,SAGtE,MAAMmiW,EAAOk9C,EAAU,IAAI/8S,WAAW,GAAKgzS,GAAInzC,KAAKx7N,EAAMigQ,iBAAkB2W,EAAW4B,EAAahqY,EAAS,CAAC,EAAGwxH,EAAO,CACtHs7N,QAASy6C,KAIX/1Q,EAAMs7N,QAAU,GAChB,MAAMzxU,EAAQ+sX,EAAW5W,EACnBl2W,EAAMupX,EAAerT,EAErBiM,EAAY,CAChBlxC,MAAOS,EACPR,MAAOk0C,EACP7iD,SAAUxiU,EACVyiU,OAAQxiU,EACRyiU,SAAU1iU,EACV2iU,OAAQ1iU,EACRn9B,KARW,QASX2nZ,UAAU,EACVC,UAAU,EACVx2M,GAAIynM,GAGN,OADA72X,KAAK4kY,mBAAoB,EAClBtH,CACT,CACA,eAAAkN,CAAgBn5Q,EAAOm7N,EAAYgiC,EAAY9hC,GAC7C,MAAM2kC,EAAiBhgQ,EAAMggQ,eAEvBwY,EAAcxY,GADChgQ,EAAMgiQ,WAAahiQ,EAAMgiQ,WAAahC,GAErDqT,EAAe1kY,KAAK0kY,aAEpBsC,EAAUhnY,KAAKwkY,SACfiG,EAA+B,IAAnBzD,EAAQh6C,SAAmBg6C,EAAQj/C,UAC/CnK,GAA6B,OAAjB8mD,EAAwBA,EAAeh4C,EAAU9O,SAAWyzC,GAAkBoZ,EAC1F5sD,EAAS6O,EAAU7O,OAASwzC,EAAiBoZ,EAE7C7L,EAzwBoB,KAywBJiL,EAEhBhT,EAAYlnX,KAAK87B,MAAMoyS,EAASD,GAAYghD,GAE5C8L,EAAc7K,GAAIC,eAAezuQ,EAAMoiQ,eAAiBpiQ,EAAMo4N,MAAOp4N,EAAMuiQ,cAGjF,GAFA30X,EAAOyO,KAAK,qCAEPg9X,EAEH,YADAzrY,EAAOk6B,MAAM,6GAGf,MAAMwzT,EAAU,GAChB,IAAK,IAAIpzW,EAAI,EAAGA,EAAIs9Y,EAAWt9Y,IAAK,CAClC,MAAM06Y,EAAQr2C,EAAWrkW,EAAIqlZ,EAC7BjyC,EAAQtxW,KAAK,CACXq7D,KAAMg0V,EACN17C,IAAKilC,EACLzB,IAAKyB,GAET,CAEA,OADA5iQ,EAAMs7N,QAAUA,EACT3sV,KAAKymY,WAAWp1Q,EAAOm7N,EAAYgiC,GAAY,EACxD,EAEF,SAAS8W,GAAalrZ,EAAOuwZ,GAC3B,IAAI78W,EACJ,GAAkB,OAAd68W,EACF,OAAOvwZ,EAYT,IARE0zC,EAFE68W,EAAYvwZ,GAEJ,WAGD,WAKJu1B,KAAK+2B,IAAItsD,EAAQuwZ,GAAa,YACnCvwZ,GAAS0zC,EAEX,OAAO1zC,CACT,CASA,SAASysZ,GAAiCx1Q,EAAOm7N,EAAY86B,EAAS0f,GACpE,MAAMxtZ,EAAS63I,EAAMs7N,QAAQnzW,OAC7B,IAAKA,EACH,OAEF,MAAM63Y,EAAiBhgQ,EAAMggQ,eAC7B,IAAK,IAAI3vY,EAAQ,EAAGA,EAAQlI,EAAQkI,IAAS,CAC3C,MAAM8jI,EAAS6L,EAAMs7N,QAAQjrW,GAG7B8jI,EAAOwpO,IAAMs2C,GAAa9/Q,EAAOwpO,IAAMs4B,EAAQt6B,SAAWqkC,EAAiB/J,EAAQv/B,UAAWyE,EAAa6kC,GAAkBA,EAC7H7rQ,EAAOgtQ,IAAM8S,GAAa9/Q,EAAOgtQ,IAAMwU,EAAQh6C,SAAWqkC,EAAiB2V,EAAQj/C,UAAWyE,EAAa6kC,GAAkBA,CAC/H,CACA,MAAM1kC,EAAUt7N,EAAMs7N,QAEtB,OADAt7N,EAAMs7N,QAAU,GACT,CACLA,UAEJ,CACA,SAASm6C,GAAiCz1Q,EAAOm7N,EAAY86B,GAC3D,MAAM9tY,EAAS63I,EAAMs7N,QAAQnzW,OAC7B,IAAKA,EACH,OAEF,MAAM63Y,EAAiBhgQ,EAAMggQ,eAC7B,IAAK,IAAI3vY,EAAQ,EAAGA,EAAQlI,EAAQkI,IAAS,CAC3C,MAAM8jI,EAAS6L,EAAMs7N,QAAQjrW,GAG7B8jI,EAAOwpO,IAAMs2C,GAAa9/Q,EAAOwpO,IAAMs4B,EAAQt6B,SAAWqkC,EAAiB/J,EAAQv/B,UAAWyE,EAAa6kC,GAAkBA,CAC/H,CACAhgQ,EAAMs7N,QAAQptT,MAAK,CAAC5kD,EAAGu3B,IAAMv3B,EAAEq0W,IAAM98U,EAAE88U,MACvC,MAAMrC,EAAUt7N,EAAMs7N,QAEtB,OADAt7N,EAAMs7N,QAAU,GACT,CACLA,UAEJ,CACA,MAAM88C,GACJ,WAAA5nX,CAAY+oX,EAAYlgZ,EAAUvI,EAAMqhZ,GACtCxjY,KAAK7d,UAAO,EACZ6d,KAAKtV,cAAW,EAChBsV,KAAKwjY,SAAM,EACXxjY,KAAKwrD,WAAQ,EACbxrD,KAAKtV,SAAWA,EAChBsV,KAAK7d,KAAOA,EACZ6d,KAAKwjY,IAAMA,EACXxjY,KAAKwrD,MAAQ,CACXi4U,UAAW,EACXZ,aAAc,EACdC,cAAe,EACfc,WAAY,EACZhB,UAAWgI,EAAa,EAAI,EAC5BjH,UAAWiH,EAAa,EAAI,EAEhC,EAoLF,SAASC,GAAoBx5Q,EAAOrzI,GAClC,MAAMm6W,EAAuB,MAAT9mO,OAAgB,EAASA,EAAMo4N,MACnD,GAAI0O,GAAeA,EAAY3+W,OAAS,EACtC,OAAO2+W,EAET,GAAIn6W,IAASw+V,EAA6B,CACxC,GAAoB,SAAhB2b,GAA0C,SAAhBA,GAA0C,SAAhBA,EACtD,OAAOA,EAET,GAAoB,SAAhBA,GAA0C,SAAhBA,EAAwB,CAGpD,OAAOL,GAAuBK,GADG,EAEnC,CACA,MAAMt6W,EAAS,YAEf,OADAohB,EAAO2S,KAAK,uBAAuBumV,+CAAyDt6W,MACrFA,CACT,CAIA,OADAohB,EAAOyO,KAAK,0BAA0ByqV,MAClB,SAAhBA,GAA0C,SAAhBA,EACrB,mBAEW,SAAhBA,EACK,gBAEF,aACT,CAIA,IACElvW,GAAM+lB,KAAK+7G,YAAY9hI,IAAIyX,KAAKsO,KAAK+7G,YACvC,CAAE,MAAO9kH,IACPhH,EAAOoB,MAAM,qDACbpX,GAAsB,MAAhBi7V,OAAuB,EAASA,EAAah7V,KAAKD,GAC1D,CACA,MAAM6hZ,GAAY,CAAC,CACjBzY,MA1gHF,MACE,WAAAxwW,CAAYoN,EAAUrc,GACpB5S,KAAKmlX,cAAgB,KACrBnlX,KAAKwsV,WAAa,EAClBxsV,KAAK4S,YAAS,EACd5S,KAAK0yX,gBAAa,EAClB1yX,KAAKuiW,gBAAa,EAClBviW,KAAK8lW,cAAW,EAChB9lW,KAAK+qY,cAAW,EAChB/qY,KAAK4S,OAASA,CAChB,CACA,cAAAo/W,GAAkB,CAClB,gBAAAF,CAAiB5zC,EAAamc,EAAY7C,EAAYu6B,GACpD,MAAMW,EAAa1yX,KAAK0yX,WAAatB,GAAW,QAAS,GACnD7uB,EAAaviW,KAAKuiW,WAAa6uB,GAAW,QAAS,GACnD4Z,EAAehrY,KAAK+qY,SAAW3Z,GAAW,OAAQ,GAGxD,GAFApxX,KAAK8lW,SAAWsrB,GAAW,MAAO,GAClCpxX,KAAKwsV,WAAa,EACG,MAAftO,IAAuBA,EAAYxsP,WACvC,OAEF,MAAMu5S,EAAWziD,GAAiBtK,GAClC,GAAI+sD,EAASvqL,MAAO,CAClB,MAAM,GACJ70N,EAAE,UACFk8V,EAAS,MACT0B,GACEwhD,EAASvqL,MACbgyK,EAAW7mY,GAAKA,EAChB6mY,EAAW3qC,UAAYijD,EAAajjD,UAAYA,EAChD2qC,EAAWjpC,MAAQA,CACrB,CACA,GAAIwhD,EAAStpU,MAAO,CAClB,MAAM,GACJ91E,EAAE,UACFk8V,EAAS,MACT0B,GACEwhD,EAAStpU,MACb4gS,EAAW12W,GAAKA,EAChB02W,EAAWxa,UAAYA,EACvBwa,EAAW9Y,MAAQA,CACrB,CACAuhD,EAAan/Y,GAAKo7V,GAAqBhjW,KACvCyuY,EAAW1kC,eAAiB,EAC5B0kC,EAAWhoY,SAAW63W,EAAW73W,SAAWqnY,CAC9C,CACA,eAAAG,GACElyX,KAAKmlX,cAAgB,IACvB,CACA,YAAOsQ,CAAM7rY,GACX,OA/1SJ,SAAqBA,GACnB,MAAMuxB,EAAMvxB,EAAK8nG,WACjB,IAAK,IAAIn4G,EAAI,EAAGA,EAAI4hC,GAAM,CACxB,MAAMh5B,EAAOklW,GAAWz9V,EAAMrQ,GAC9B,GAAI4I,EAAO,GAAqB,MAAhByH,EAAKrQ,EAAI,IAA+B,MAAhBqQ,EAAKrQ,EAAI,IAA+B,MAAhBqQ,EAAKrQ,EAAI,IAA+B,MAAhBqQ,EAAKrQ,EAAI,GAC/F,OAAO,EAETA,EAAI4I,EAAO,EAAI5I,EAAI4I,EAAOg5B,CAC5B,CACA,OAAO,CACT,CAq1SW+vX,CAAYthZ,EACrB,CACA,KAAAyoY,CAAMzoY,EAAM4iW,GACVxsV,KAAKwsV,WAAaA,EAElB,IAAI04C,EAAet7Y,EACnB,MAAM8oY,EAAa1yX,KAAK0yX,WAClB3rB,EAAY/mW,KAAK+qY,SACvB,GAAI/qY,KAAK4S,OAAO+4W,YAAa,CAIvB3rX,KAAKmlX,gBACP+f,EAAe/4C,GAAiBnsV,KAAKmlX,cAAev7X,IAEtD,MAAMuhZ,EA7vRZ,SAA2BvhZ,GACzB,MAAMwhZ,EAAiB,CACrB75I,MAAO,KACPjwL,UAAW,MAEP+pU,EAAQ5jD,GAAQ79V,EAAM,CAAC,SAC7B,GAAIyhZ,EAAM7xZ,OAAS,EAEjB,OADA4xZ,EAAe9pU,UAAY13E,EACpBwhZ,EAET,MAAM7mR,EAAO8mR,EAAMA,EAAM7xZ,OAAS,GAIlC,OAFA4xZ,EAAe75I,MAAQ8zF,GAAWz7V,EAAM,EAAG26H,EAAKryB,WAAa,GAC7Dk5S,EAAe9pU,UAAY+jR,GAAWz7V,EAAM26H,EAAKryB,WAAa,GACvDk5S,CACT,CA8uR4BE,CAAkBpG,GACxCllY,KAAKmlX,cAAgBgmB,EAAc7pU,UACnCoxT,EAAW/lC,QAAUw+C,EAAc55I,OAAS,IAAIvkK,UAClD,MACE0lS,EAAW/lC,QAAUu4C,EAEvB,MAAMp/B,EAAW9lW,KAAKurY,gBAAgB7Y,EAAYlmC,GAElD,OADAua,EAAUpa,QAAUJ,GAAaC,EAAYkmC,GACtC,CACLA,aACAnwB,WAAYviW,KAAKuiW,WACjBuD,WACAiB,UAAW/mW,KAAK+qY,SAEpB,CACA,KAAA9/S,GACE,MAAMuhQ,EAAaxsV,KAAKwsV,WAClBkmC,EAAa1yX,KAAK0yX,WAClB3rB,EAAY/mW,KAAK+qY,SACvBrY,EAAW/lC,QAAU3sV,KAAKmlX,eAAiB,IAAIn4R,WAC/ChtF,KAAKmlX,cAAgB,KACrB,MAAMrf,EAAW9lW,KAAKurY,gBAAgB7Y,EAAY1yX,KAAKwsV,YAEvD,OADAua,EAAUpa,QAAUJ,GAAaC,EAAYkmC,GACtC,CACLA,aACAnwB,WAAY6uB,KACZtrB,WACAiB,UAAWqqB,KAEf,CACA,eAAAma,CAAgB7Y,EAAYlmC,GAC1B,MAAMsZ,EAAW9lW,KAAK8lW,SACtB,GAAI4sB,EAAW/lC,QAAQnzW,OAAQ,CAC7B,MAAMgyZ,EAAQ/jD,GAAQirC,EAAW/lC,QAAS,CAAC,SACvC6+C,GACFA,EAAM5oZ,SAAQgH,IACZ,MAAM6hZ,EA9+QhB,SAAmB7hZ,GACjB,MAAMqpB,EAAUrpB,EAAK,GACrB,IAAI8hZ,EAAc,GACdtxZ,EAAQ,GACR8sZ,EAAY,EACZyE,EAAwB,EACxBC,EAAmB,EACnBC,EAAgB,EAChBhgZ,EAAK,EACLiiC,EAAS,EACb,GAAgB,IAAZ7a,EAAe,CACjB,KAAsD,OAA/Ck0U,GAAQv9V,EAAKm6V,SAASj2T,EAAQA,EAAS,KAC5C49W,GAAevkD,GAAQv9V,EAAKm6V,SAASj2T,EAAQA,EAAS,IACtDA,GAAU,EAIZ,IAFA49W,GAAevkD,GAAQv9V,EAAKm6V,SAASj2T,EAAQA,EAAS,IACtDA,GAAU,EAC4C,OAA/Cq5T,GAAQv9V,EAAKm6V,SAASj2T,EAAQA,EAAS,KAC5C1zC,GAAS+sW,GAAQv9V,EAAKm6V,SAASj2T,EAAQA,EAAS,IAChDA,GAAU,EAEZ1zC,GAAS+sW,GAAQv9V,EAAKm6V,SAASj2T,EAAQA,EAAS,IAChDA,GAAU,EACVo5W,EAAY7/C,GAAWz9V,EAAM,IAC7B+hZ,EAAwBtkD,GAAWz9V,EAAM,IACzCiiZ,EAAgBxkD,GAAWz9V,EAAM,IACjCiC,EAAKw7V,GAAWz9V,EAAM,IACtBkkC,EAAS,EACX,MAAO,GAAgB,IAAZ7a,EAAe,CACxB6a,GAAU,EACVo5W,EAAY7/C,GAAWz9V,EAAMkkC,GAC7BA,GAAU,EACV,MAAMg+W,EAAuBzkD,GAAWz9V,EAAMkkC,GAC9CA,GAAU,EACV,MAAMi+W,EAAwB1kD,GAAWz9V,EAAMkkC,GAW/C,IAVAA,GAAU,EACV89W,EAAmB,GAAK,GAAKE,EAAuBC,EAC/C3nR,EAAcwnR,KACjBA,EAAmBhpY,OAAO2sP,iBAC1BtwP,EAAOyO,KAAK,qGAEdm+X,EAAgBxkD,GAAWz9V,EAAMkkC,GACjCA,GAAU,EACVjiC,EAAKw7V,GAAWz9V,EAAMkkC,GACtBA,GAAU,EAC4C,OAA/Cq5T,GAAQv9V,EAAKm6V,SAASj2T,EAAQA,EAAS,KAC5C49W,GAAevkD,GAAQv9V,EAAKm6V,SAASj2T,EAAQA,EAAS,IACtDA,GAAU,EAIZ,IAFA49W,GAAevkD,GAAQv9V,EAAKm6V,SAASj2T,EAAQA,EAAS,IACtDA,GAAU,EAC4C,OAA/Cq5T,GAAQv9V,EAAKm6V,SAASj2T,EAAQA,EAAS,KAC5C1zC,GAAS+sW,GAAQv9V,EAAKm6V,SAASj2T,EAAQA,EAAS,IAChDA,GAAU,EAEZ1zC,GAAS+sW,GAAQv9V,EAAKm6V,SAASj2T,EAAQA,EAAS,IAChDA,GAAU,CACZ,CAEA,MAAO,CACL49W,cACAtxZ,QACA8sZ,YACA0E,mBACAD,wBACAE,gBACAhgZ,KACA8oB,QATc/qB,EAAKm6V,SAASj2T,EAAQlkC,EAAK8nG,YAW7C,CAy6Q2Bs6S,CAAUpiZ,GAC3B,GAAI8rY,GAAkBt2X,KAAKqsY,EAASC,aAAc,CAChD,MAAM18C,EAAM9U,EAAeuxD,EAASG,kBAAoBH,EAASG,iBAAmBH,EAASvE,UAAY16C,EAAai/C,EAASE,sBAAwBF,EAASvE,UAChK,IAAIx8Y,EAAsC,aAA3B+gZ,EAASI,cAA+BjpY,OAAO63R,kBAAoBgxG,EAASI,cAAgBJ,EAASvE,UAEhHx8Y,GAAY,OACdA,EAAWkY,OAAO63R,mBAEpB,MAAM9lR,EAAU82X,EAAS92X,QACzBmxV,EAASnZ,QAAQtxW,KAAK,CACpBuO,KAAM+qB,EACN9Y,IAAK8Y,EAAQ+8E,WACb8gS,IAAKxjC,EACLA,IAAKA,EACLhxW,KAAMqnX,GACN36W,SAAUA,GAEd,IAGN,CACA,OAAOo7W,CACT,CACA,cAAA6sB,CAAe/oY,EAAM+nW,EAASnF,GAC5B,OAAOrtU,QAAQE,OAAO,IAAI3b,MAAM,0DAClC,CACA,OAAAsnI,GAAW,GA44GXu6P,MAzNF,MACE,WAAA1jX,GACE7hB,KAAKisY,iBAAkB,EACvBjsY,KAAKq6V,gBAAa,EAClBr6V,KAAKw3V,gBAAa,EAClBx3V,KAAKirY,cAAW,EAChBjrY,KAAKsnX,QAAU,KACftnX,KAAKksY,gBAAa,EAClBlsY,KAAKmsY,YAAc,IACrB,CACA,OAAAnhQ,GAAW,CACX,cAAAgnP,CAAeoa,GACbpsY,KAAKsnX,QAAU8kB,EACfpsY,KAAKmsY,YAAc,IACrB,CACA,kBAAAnH,GACEhlY,KAAKmsY,YAAc,IACrB,CACA,gBAAAra,CAAiB5zC,EAAamc,EAAY7C,EAAYnZ,GACpDr+U,KAAKq6V,WAAaA,EAClBr6V,KAAKw3V,WAAaA,EAClBx3V,KAAKqsY,oBA/xYT,SAA4BnuD,EAAaG,GACvC,IAAKH,IAAgBG,EACnB,OAAOH,EAET,MAAM+S,EAAQ5S,EAAY4S,MACtBA,GAAS5S,EAAY2S,oBACTvJ,GAAQvJ,EAAa,CAAC,OAAQ,SACtCt7V,SAAQ8lW,IACZ,MAGMY,EAHO7B,GAAQiB,EAAM,CAAC,OAAQ,OAAQ,OAAQ,SAAS,GAGlC3E,SAAS,GACpC,IAAIuoD,EAAW7kD,GAAQ6B,EAAe,CAAC,SACvC,MAAMijD,EAAUD,EAAS9yZ,OAAS,EAC7B+yZ,IACHD,EAAW7kD,GAAQ6B,EAAe,CAAC,UAErCgjD,EAAS1pZ,SAAQ6nI,IAEGg9N,GADK8kD,EAAU9hR,EAAIs5N,SAAS,IAAMt5N,EAAIs5N,SAAS,IACvB,CAAC,SACjCnhW,SAAQ+mW,IAChB,MAAM6iD,EAAOzgD,GAAUpC,GACvB,GAAI6iD,EAAM,CAER,MAAMC,EAAYD,EAAKzoD,SAAS,EAAG,IAC9B0oD,EAAUzzW,MAAK9mB,GAAW,IAANA,MACvBjT,EAAOuB,IAAI,+BAA+B+rY,EAAU,IAAM,wBAAwB7tP,GAAIqoM,QAAQ0lD,SAAiB/tP,GAAIqoM,QAAQkK,MAC3Hu7C,EAAK/7W,IAAIwgU,EAAO,GAEpB,IACA,GACF,IAGN,OAAO/S,CACT,CA4vY6BwuD,CAAmBxuD,EAAaG,IACzDr+U,KAAKisY,iBAAkB,CACzB,CACA,mBAAAI,CAAoBnuD,GAClB,IAAI,WACFmc,EAAU,WACV7C,GACEx3V,KACJ,GAAqB,MAAfk+U,IAAuBA,EAAYxsP,WAGvC,OAFA1xF,KAAKksY,gBAAatzY,OAClBoH,KAAKirY,cAAWryY,GAGlB,MAAMqyY,EAAWjrY,KAAKirY,SAAWziD,GAAiBtK,GAG9C+sD,EAAStpU,QACX04R,EAAawwC,GAAoBI,EAAStpU,MAAO66Q,IAE/CyuD,EAASvqL,QACX82I,EAAaqzC,GAAoBI,EAASvqL,MAAO87H,IAEnD,MAAMxmK,EAAS,CAAC,EACZi1N,EAAStpU,OAASspU,EAASvqL,MAC7B1qC,EAAOwpK,WAAa,CAClBxkW,UAAW,YACXyuW,MAAO4Q,EAAa,IAAM7C,EAC1BtZ,cACAryV,GAAI,QAEGo/Y,EAAStpU,MAClBq0G,EAAOr0G,MAAQ,CACb3mF,UAAW,YACXyuW,MAAO4Q,EACPnc,cACAryV,GAAI,SAEGo/Y,EAASvqL,MAClB1qC,EAAO0qC,MAAQ,CACb1lO,UAAW,YACXyuW,MAAO+N,EACPtZ,cACAryV,GAAI,QAGNoT,EAAOyO,KAAK,8EAEd1N,KAAKksY,WAAal2N,CACpB,CACA,KAAAuvN,CAAMhjC,EAAYmwB,EAAY5sB,EAAUiB,EAAWva,EAAYg5C,GAC7D,IAAImH,EAAWC,EACf,IAAI,QACFtlB,EAAO,YACP6kB,GACEnsY,KACJ,MAAMniB,EAAS,CACb8jF,WAAO/oE,EACP8nN,WAAO9nN,EACP3U,KAAM8iX,EACN7f,IAAK4e,EACL5nB,iBAAatlV,GAMVshV,EAAeiyD,KAClBA,EAAcnsY,KAAKmsY,YAAc3/C,GAAc,GAKjD,MAAM5iW,EAAO8oY,EAAW/lC,QACxB,GAAc,MAAR/iW,IAAgBA,EAAKpQ,OACzB,OAAOqE,EAET,MAAMqgW,EAAc,CAClBopC,aAAS1uX,EACTmvV,UAAW,GAEb,IAAIkjD,EAAWjrY,KAAKirY,SAKpB,GAJgC,OAAzB0B,EAAY1B,IAAqB0B,EAAUnzZ,SAChDwmB,KAAKqsY,oBAAoBziZ,GACzBqhZ,EAAWjrY,KAAKirY,UAEe,OAA1B2B,EAAa3B,KAAqB2B,EAAWpzZ,OAGlD,OADAylB,EAAOyO,KAAK,6DACL7vB,EAELmiB,KAAKisY,kBACP/tD,EAAYloK,OAASh2K,KAAKksY,WAC1BlsY,KAAKisY,iBAAkB,GAEzB,MAAMvhZ,EAzwYV,SAAqBd,EAAMqhZ,GACzB,IAAI4B,EAAc,EACdC,EAAgB,EAChBC,EAAgB,EACpB,MAAMC,EAAQvlD,GAAQ79V,EAAM,CAAC,OAAQ,SACrC,IAAK,IAAIrQ,EAAI,EAAGA,EAAIyzZ,EAAMxzZ,OAAQD,IAAK,CACrC,MAAMwzW,EAAOigD,EAAMzzZ,GAKb2zW,EAAOzF,GAAQsF,EAAM,CAAC,SAAS,GAG/B17N,EAAQ45Q,EADH5jD,GAAW6F,EAAM,IAE5B,IAAK77N,EACH,SAEF,MAAM47Q,EAAe57Q,EAAM9rF,QACrB4nT,EAAY9F,GAAW6F,EAAM,IAAsB,MAAhB+/C,OAAuB,EAASA,EAAazhV,OACtF,IAAIwiS,EAAiC,MAAhBi/C,OAAuB,EAASA,EAAaviZ,SAClD,EAAZyiW,IAKAa,EAAiB3G,GAAW6F,EAHd,EAAZC,EAGgC,GAGA,IAItC,MAAMpF,EAAY12N,EAAM02N,WAAa,IAC/BmlD,EAAQzlD,GAAQsF,EAAM,CAAC,SAC7B,IAAK,IAAIpqV,EAAI,EAAGA,EAAIuqY,EAAM1zZ,OAAQmpB,IAChCkqY,EAAc7gD,GAA8BkhD,EAAMvqY,KAC7CkqY,GAAe7+C,IAElB6+C,EAAc7+C,EADM3G,GAAW6lD,EAAMvqY,GAAI,IAGvC0uH,EAAMrzI,OAASw+V,EACjBswD,GAAiBD,EAAc9kD,EACtB12N,EAAMrzI,OAASw+V,IACxBuwD,GAAiBF,EAAc9kD,EAGrC,CACA,GAAsB,IAAlB+kD,GAAyC,IAAlBC,EAAqB,CAE9C,IAAII,EAAevwY,IACfwwY,EAAa,EACbC,EAAe,EACnB,MAAMC,EAAQ7lD,GAAQ79V,EAAM,CAAC,SAC7B,IAAK,IAAIrQ,EAAI,EAAGA,EAAI+zZ,EAAM9zZ,OAAQD,IAAK,CACrC,MAAMsuW,EAAOD,GAAkB0lD,EAAM/zZ,IACrC,GAAY,MAARsuW,GAAgBA,EAAKC,WAAY,CACnCqlD,EAAex9X,KAAKjT,IAAIywY,EAActlD,EAAKG,yBAA2BH,EAAKE,WAC3E,MAAMwlD,EAAqB1lD,EAAKC,WAAWlmT,QAAO,CAACo3L,EAAK34O,IAAQ24O,EAAM34O,EAAIuxB,KAAKlnB,UAAY,GAAG,GAC9F0iZ,EAAaz9X,KAAKhT,IAAIywY,EAAYG,EAAqB1lD,EAAKG,yBAA2BH,EAAKE,WAC5FslD,EAAeD,EAAaD,CAC9B,CACF,CACA,GAAIE,GAAgBnzD,EAAemzD,GACjC,OAAOA,CAEX,CACA,OAAIP,GAGGC,CACT,CAksYqBS,CAAY5jZ,EAAMqhZ,GAC7BrtD,EA9zYV,SAAqBqtD,EAAUwC,GAE7B,OAAOhmD,GAAQgmD,EAAM,CAAC,OAAQ,SAAS7rW,QAAO,CAAC/jD,EAAQkvW,KACrD,MAAME,EAAOxF,GAAQsF,EAAM,CAAC,SAAS,GAC/B95U,EAAUg6U,EAAK,GACf/xU,EAAQusU,GAAQsF,EAAM,CAAC,SAASnrT,QAAO,CAAC/jD,EAAQqvW,KAEpD,MAAMrhW,EAAKw7V,GAAW6F,EAAM,GACtB77N,EAAQ45Q,EAASp/Y,GACvB,GAAIwlI,EAAO,CACT,IAAI27N,EAAW3F,GAAW4F,EAAM,GAChC,GAAgB,IAAZh6U,EAAe,CAIjB,GAAI+5U,IAAahG,GAEf,OADA/nV,EAAOyO,KAAK,oFACL7vB,EAETmvW,GAAYhG,GAAe,EAC3BgG,GAAY3F,GAAW4F,EAAM,EAC/B,CAEA,MAEMh5S,EAAY+4S,GAFJ37N,EAAM02N,WAAa,KAGjC,GAAI7N,EAAejmS,KAA0B,OAAXp2D,GAAmBo2D,EAAYp2D,GAC/D,OAAOo2D,CAEX,CACA,OAAOp2D,CAAM,GACZ,MACH,OAAc,OAAVq9B,GAAkBg/T,EAAeh/T,KAAsB,OAAXr9B,GAAmBq9B,EAAQr9B,GAClEq9B,EAEFr9B,CAAM,GACZ,KACL,CAyxYqB6vZ,CAAYzC,EAAUrhZ,GACjC+jZ,EAA0B,OAAb/vD,EAAoB4O,EAAa5O,GAmDxD,SAA0B0pC,EAAS1pC,EAAU4O,EAAY9hW,GACvD,GAAgB,OAAZ48X,EACF,OAAO,EAGT,MAAMsmB,EAAcj+X,KAAKhT,IAAIjS,EAAU,GACjCupD,EAAY2pS,EAAW0pC,EAAQt6B,SAAWs6B,EAAQv/B,UACxD,OAAOp4U,KAAK+2B,IAAIuN,EAAYu4S,GAAcohD,CAC5C,CA1DQC,CAAiBvmB,EAASqmB,EAAYnhD,EAAY9hW,IAAawzV,EAAY6J,YAAcu/B,EAAQv/B,WAAay9C,KAChHtnD,EAAYopC,QAAUqmB,EAAanhD,EAC/B86B,GAAiC,IAAtBA,EAAQv/B,WACrB9oV,EAAOyO,KAAK,yBAAwBwwU,EAAYopC,QAAUA,EAAQt6B,WAEpEhtV,KAAKsnX,QAAUA,EAAU,CACvBt6B,SAAU9O,EAAYopC,QACtBv/B,UAAW,IAGf,MAAM9zS,EAAYsuT,EAAaorC,EAAarmB,EAAQt6B,SAAWs6B,EAAQv/B,UAAYokD,EAC7Et4V,EAAUI,EAAYvpD,GArpYhC,SAAwBugZ,EAAUwC,EAAMjhD,GACtC/E,GAAQgmD,EAAM,CAAC,OAAQ,SAAS7qZ,SAAQmqW,IACtCtF,GAAQsF,EAAM,CAAC,SAASnqW,SAAQsqW,IAE9B,MAAMrhW,EAAKw7V,GAAW6F,EAAM,GACtB77N,EAAQ45Q,EAASp/Y,GACvB,IAAKwlI,EACH,OAGF,MAAM02N,EAAY12N,EAAM02N,WAAa,IAErCN,GAAQsF,EAAM,CAAC,SAASnqW,SAAQqqW,IAC9B,MAAMh6U,EAAUg6U,EAAK,GACfn/T,EAAS0+T,EAAazE,EAC5B,GAAIj6T,EAAQ,CACV,IAAI40W,EAAsBr7C,GAAW4F,EAAM,GAC3C,GAAgB,IAAZh6U,EACFyvX,GAAuB50W,EACvB40W,EAAsB/yX,KAAKhT,IAAI+lY,EAAqB,GACpDl7C,GAAYyF,EAAM,EAAGy1C,OAChB,CACLA,GAAuB/yX,KAAKC,IAAI,EAAG,IACnC8yX,GAAuBr7C,GAAW4F,EAAM,GACxCy1C,GAAuB50W,EACvB40W,EAAsB/yX,KAAKhT,IAAI+lY,EAAqB,GACpD,MAAMoL,EAAQn+X,KAAKq2B,MAAM08V,GAAuB17C,GAAe,IACzD5wF,EAAQzmP,KAAKq2B,MAAM08V,GAAuB17C,GAAe,IAC/DQ,GAAYyF,EAAM,EAAG6gD,GACrBtmD,GAAYyF,EAAM,EAAG72F,EACvB,CACF,IACA,GACF,GAEN,CAmnYI23I,CAAe9C,EAAUrhZ,EAAM09X,EAAQt6B,SAAWs6B,EAAQv/B,WACtDr9V,EAAW,EACbsV,KAAKmsY,YAAct4V,GAEnB50C,EAAOyO,KAAK,wDACZ1N,KAAKglY,sBAEP,MAAMW,IAAasF,EAAStpU,MACtBikU,IAAaqF,EAASvqL,MAC5B,IAAI1iO,EAAO,GACP2nZ,IACF3nZ,GAAQ,SAEN4nZ,IACF5nZ,GAAQ,SAEV,MAAMqzI,EAAQ,CACZ+6N,MAAOxiW,EACP8zV,SAAUzpS,EACV2pS,SAAU3pS,EACV0pS,OAAQ9pS,EACRgqS,OAAQhqS,EACR71D,OACA2nZ,WACAC,WACAx2M,GAAI,EACJw9L,QAAS,GASX,OAPA/uY,EAAO8jF,MAAuB,UAAf0vD,EAAMrzI,KAAmBqzI,OAAQz4H,EAChD/a,EAAO6iO,MAAuB,UAAfrvF,EAAMrzI,KAAmBqzI,OAAQz4H,EAChD/a,EAAOqgW,YAAcA,EACrBrgW,EAAOqpW,IAAM2/C,GAAiC/gC,EAAUtZ,EAAY86B,EAASA,GACzEvgB,EAAUpa,QAAQnzW,SACpBqE,EAAOoG,KAAO6iZ,GAAiC//B,EAAWva,EAAY86B,IAEjEzpY,CACT,IAoDC,CACDw0Y,MAAO4J,GACPsJ,MAAOlB,IACN,CACDhS,MA7kHF,cAAyBd,GACvB,WAAA1vW,CAAYoN,EAAUrc,GACpBwT,QACApmB,KAAKivB,cAAW,EAChBjvB,KAAK4S,YAAS,EACd5S,KAAKivB,SAAWA,EAChBjvB,KAAK4S,OAASA,CAChB,CACA,gBAAAk/W,CAAiB5zC,EAAamc,EAAY7C,EAAYu6B,GACpD3rW,MAAM0rW,iBAAiB5zC,EAAamc,EAAY7C,EAAYu6B,GAC5D/xX,KAAKwxX,YAAc,CACjBx2Y,UAAW,aACXgD,KAAM,QACN6N,GAAI,EACJ+mI,KAAM,EACN0+P,eAAgB,EAChByE,aAAc,MACdppC,QAAS,GACT8mC,cAAep5B,EACf3vW,SAAUqnY,EACVV,eAAgB,IAChBzE,QAAS,EAEb,CAGA,YAAO6I,CAAM7rY,GACX,IAAKA,EACH,OAAO,EAOT,MAAMo8V,EAAUR,GAAW57V,EAAM,GACjC,IAAIkkC,GAAqB,MAAXk4T,OAAkB,EAASA,EAAQxsW,SAAW,EAC5D,GAAIi8Y,GAAM7rY,EAAMkkC,GACd,OAAO,EAET,IAAK,IAAIt0C,EAASoQ,EAAKpQ,OAAQs0C,EAASt0C,EAAQs0C,IAC9C,GAAIklW,GAAQppY,EAAMkkC,GAEhB,OADA7uB,EAAOuB,IAAI,2BACJ,EAGX,OAAO,CACT,CACA,QAAA2xX,CAASvoY,EAAMkkC,GACb,OAxSJ,SAAoBlkC,EAAMkkC,GACxB,OAVF,SAA2BlkC,EAAMkkC,GAC/B,OAAOA,EAAS,EAAIlkC,EAAKpQ,MAC3B,CAQSw0Z,CAAkBpkZ,EAAMkkC,IAAW8kW,GAAkBhpY,EAAMkkC,IAAWglW,GAAmBlpY,EAAMkkC,IAAWlkC,EAAKpQ,OAASs0C,CACjI,CAsSWmgX,CAAWrkZ,EAAMkkC,EAC1B,CACA,WAAAskW,CAAY/gQ,EAAOznI,EAAMkkC,GACvBslW,GAAgB/hQ,EAAOrxH,KAAKivB,SAAUrlC,EAAMkkC,EAAQujG,EAAMoiQ,eAC1D,MAAMxnX,EAAQ+nX,GAAc3iQ,EAAOznI,EAAMkkC,EAAQ9tB,KAAK4xX,QAAS5xX,KAAK0xX,YACpE,GAAIzlX,GAA2B,IAAlBA,EAAMk+O,QACjB,OAAOl+O,CAEX,GAqhHAs5X,MAAOlB,IACN,CACDhS,MAjxDF,cAAyBd,GACvB,gBAAAO,CAAiB5zC,EAAamc,EAAY7C,EAAYu6B,GACpD3rW,MAAM0rW,iBAAiB5zC,EAAamc,EAAY7C,EAAYu6B,GAC5D/xX,KAAKwxX,YAAc,CACjBx2Y,UAAW,aACXgD,KAAM,QACN6N,GAAI,EACJ+mI,KAAM,EACN0+P,eAAgB,EAChByE,aAAc,MACdppC,QAAS,GACT8mC,cAAep5B,EACf3vW,SAAUqnY,EACVV,eAAgB,IAChBzE,QAAS,EAEb,CACA,YAAO6I,CAAM7rY,GACX,IAAKA,EACH,OAAO,EAOT,MAAMo8V,EAAUR,GAAW57V,EAAM,GACjC,IAAIkkC,GAAqB,MAAXk4T,OAAkB,EAASA,EAAQxsW,SAAW,EAG5D,GAAIwsW,GAA4B,KAAjBp8V,EAAKkkC,IAAyC,MAArBlkC,EAAKkkC,EAAS,SAAyCl1B,IAA1B+sV,GAAaK,IAElF2vC,GAAa/rY,EAAMkkC,IAAW,GAC5B,OAAO,EAET,IAAK,IAAIt0C,EAASoQ,EAAKpQ,OAAQs0C,EAASt0C,EAAQs0C,IAC9C,GAAI2nW,GAAM7rY,EAAMkkC,GAEd,OADA7uB,EAAOuB,IAAI,iCACJ,EAGX,OAAO,CACT,CACA,QAAA2xX,CAASvoY,EAAMkkC,GACb,OAp4DJ,SAAkBlkC,EAAMkkC,GAEtB,OAAOynW,GAAgB3rY,EAAMkkC,IADV,GACmClkC,EAAKpQ,OAASs0C,CACtE,CAi4DWqkW,CAASvoY,EAAMkkC,EACxB,CACA,WAAAskW,CAAY/gQ,EAAOznI,EAAMkkC,GACvB,GAAqB,OAAjB9tB,KAAK4xX,QAGT,OAAO8C,GAAcrjQ,EAAOznI,EAAMkkC,EAAQ9tB,KAAK4xX,QAAS5xX,KAAK0xX,WAC/D,GA+tDA6T,MAAOlB,KAGPyG,GAAU5qT,OAAO,EAAG,EAAG,CACrBmyS,MAAOyD,GACPyP,MAAOlB,KAGX,MAAM6J,GACJ,WAAArsX,CAAYoN,EAAUitW,EAAetpX,EAAQo9G,EAAQnkI,GACnDmU,KAAKylI,OAAQ,EACbzlI,KAAKivB,cAAW,EAChBjvB,KAAKk8X,mBAAgB,EACrBl8X,KAAK4S,YAAS,EACd5S,KAAKgwH,YAAS,EACdhwH,KAAKnU,QAAK,EACVmU,KAAKmuY,aAAU,EACfnuY,KAAKouY,aAAU,EACfpuY,KAAKqnX,eAAY,EACjBrnX,KAAKy1X,WAAQ,EACbz1X,KAAKquY,kBAAoB,KACzBruY,KAAKsuY,oBAAiB,EACtBtuY,KAAKuuY,0BAAuB,EAC5BvuY,KAAKivB,SAAWA,EAChBjvB,KAAKk8X,cAAgBA,EACrBl8X,KAAK4S,OAASA,EACd5S,KAAKgwH,OAASA,EACdhwH,KAAKnU,GAAKA,CACZ,CACA,SAAA2iZ,CAAUF,GACRtuY,KAAKsuY,eAAiBA,EAClBtuY,KAAKqnX,WACPrnX,KAAKqnX,UAAU9wW,OAEnB,CACA,IAAAl7B,CAAKuO,EAAMy0V,EAAaysC,EAAWxiX,GACjC,MAAMsiS,EAAQkgF,EAAUrN,YACxB7yE,EAAM8yE,aAAez0X,KACrB,IAAIwlZ,EAAW,IAAIzhT,WAAWpjG,GAC9B,MAAM,qBACJ2kZ,EAAoB,eACpBD,GACEtuY,KACAsI,IACFtI,KAAKuuY,qBAAuBjmY,GAE9B,MAAM,WACJkmX,EAAU,cACVkgB,EAAa,YACbC,EAAW,mBACXnJ,EAAkB,WAClBh5C,EAAU,kBACVoiD,GACEtmY,GAASimY,GACP,WACJl0C,EAAU,WACV7C,EAAU,eACVq3C,EAAc,SACdnkZ,EAAQ,gBACRokZ,GACER,EACE38C,EA2PV,SAA2B/nW,EAAMkgY,GAC/B,IAAIilB,EAAiB,KACjBnlZ,EAAK8nG,WAAa,GAAyD,OAApC,MAAfo4R,OAAsB,EAASA,EAAY5vY,MAAmC,OAAnB4vY,EAAYznO,IAAqC,MAAtBynO,EAAY5qX,SAC5H6vY,EAAiBjlB,GAEnB,OAAOilB,CACT,CAjQoBC,CAAkBP,EAAUpwD,GAC5C,GAAIsT,GAA8B,YAAnBA,EAAQzyV,OAAsB,CAC3C,MAAMmoX,EAAYrnX,KAAKivY,eAEvB,IAAI5nB,EAAU3B,SAsBZ,OAPA1lX,KAAKquY,kBAAoBhnB,EAAUrB,iBAAiByoB,EAAU98C,EAAQz3W,IAAI63G,OAAQ4/P,EAAQtvM,GAAGtwD,QAAQ1jF,MAAK4sJ,IAGxG,MAAMp9K,EAASmiB,KAAK3kB,KAAK4/K,EAAe,KAAM6vN,GAE9C,OADA9qX,KAAKquY,kBAAoB,KAClBxwZ,CAAM,IAERmiB,KAAKquY,kBAtBU,CAGtB,IAAIpzO,EAAgBosN,EAAUvB,gBAAgB2oB,EAAU98C,EAAQz3W,IAAI63G,OAAQ4/P,EAAQtvM,GAAGtwD,QAMvF,GAJqB+4R,EAAUnuB,MAAQ,IAErC1hM,EAAgBosN,EAAUp8R,UAEvBgwE,EAEH,OADA2vI,EAAM+yE,WAAa10X,KACZimZ,GAAYpkB,GAErB2jB,EAAW,IAAIzhT,WAAWiuE,EAC5B,CAUF,CACA,MAAMk0O,EAAcnvY,KAAKovY,aAAaV,EAAeC,GACrD,GAAIQ,EAAa,CACf,MAAMzrZ,EAAQsc,KAAKqvY,oBAAoBZ,GACvC,GAAI/qZ,EAUF,OATAub,EAAOyO,KAAK,gBAAgBhqB,EAAMmF,WAClCmX,KAAKivB,SAAS4kW,KAAKz+K,EAAO5yI,MAAO4yI,EAAO5yI,MAAO,CAC7CxkF,KAAMm8V,EAAWinC,YACjBtgB,QAAS1mB,EAAay2C,mBACtBt2F,OAAO,EACP72S,QACA8pB,OAAQ9pB,EAAMmF,UAEhB+hT,EAAM+yE,WAAa10X,KACZimZ,GAAYpkB,EAEvB,EACI4jB,GAAiBC,GAAeC,GAAqBO,IACvDnvY,KAAK8xX,iBAAiBgd,EAAiBz0C,EAAY7C,EAAY9sW,EAAU2zV,IAEvEqwD,GAAiBE,GAAqBO,IACxCnvY,KAAKsvY,sBAAsBT,GAExBrgB,GACHxuX,KAAKkyX,kBAEP,MAAMr0Y,EAASmiB,KAAKuvY,SAASd,EAAU98C,EAASnF,EAAYg5C,EAAoB1a,GAC1E9uN,EAAeh8J,KAAKuuY,qBAK1B,OAJAvyO,EAAawyN,YAAa,EAC1BxyN,EAAa0yO,eAAgB,EAC7B1yO,EAAa2yO,aAAc,EAC3B/jG,EAAM+yE,WAAa10X,KACZpL,CACT,CAGA,KAAAotG,CAAM6/R,GACJ,MAAMlgF,EAAQkgF,EAAUrN,YACxB7yE,EAAM8yE,aAAez0X,KACrB,MAAM,UACJo+X,EAAS,qBACTknB,EAAoB,kBACpBF,GACEruY,KACJ,GAAIquY,EAGF,OAAOA,EAAkBhgY,MAAK,IACrBrO,KAAKirF,MAAM6/R,KAGtB,MAAM0kB,EAAkB,IAClB,WACJhjD,GACE+hD,EACJ,GAAIlnB,EAAW,CAIb,MAAMpsN,EAAgBosN,EAAUp8R,QAC5BgwE,GAEFu0O,EAAgBn0Z,KAAK2kB,KAAK3kB,KAAK4/K,EAAe,KAAM6vN,GAExD,CACA,MAAM,QACJqjB,EAAO,QACPC,GACEpuY,KACJ,IAAKmuY,IAAYC,EAGf,OADAxjG,EAAM+yE,WAAa10X,KACZ,CAACimZ,GAAYpkB,IAEtB,MAAM2kB,EAAuBtB,EAAQljT,MAAMuhQ,GAC3C,OAAIkjD,GAAUD,GAELA,EAAqBphY,MAAKiwX,IAC/Bt+X,KAAK2vY,WAAWH,EAAiBlR,EAAaxT,GACvC0kB,MAGXxvY,KAAK2vY,WAAWH,EAAiBC,EAAsB3kB,GAChD0kB,EACT,CACA,UAAAG,CAAWH,EAAiBlR,EAAaxT,GACvC,MAAM,WACJvoB,EAAU,WACVmwB,EAAU,SACV5sB,EAAQ,UACRiB,GACEu3B,GACE,mBACJkH,EAAkB,WAClBh5C,GACExsV,KAAKuuY,qBACTtvY,EAAOuB,IAAI,qCAAqCsqX,EAAUvtC,KAAKutC,EAAUnuB,MAAQ,EAAI,OAASmuB,EAAUnuB,KAAO,eAAemuB,EAAU5nJ,SACxI,MAAM0sK,EAAc5vY,KAAKouY,QAAQ7I,MAAMhjC,EAAYmwB,EAAY5sB,EAAUiB,EAAWva,EAAYg5C,GAAoB,EAAMxlY,KAAKnU,IAC/H2jZ,EAAgBn0Z,KAAK,CACnBu0Z,cACA9kB,cAEFA,EAAUrN,YAAYE,WAAa10X,IACrC,CACA,qBAAAqmZ,CAAsBT,GACpB,MAAM,QACJV,EAAO,QACPC,GACEpuY,KACCmuY,GAAYC,IAGjBD,EAAQnc,eAAe6c,GACvBT,EAAQpc,eAAe6c,GACzB,CACA,eAAA3c,GACE,MAAM,QACJic,EAAO,QACPC,GACEpuY,KACCmuY,GAAYC,IAGjBD,EAAQjc,kBACRkc,EAAQpJ,qBACV,CACA,gBAAAlT,CAAiBgd,EAAiBz0C,EAAY7C,EAAYu6B,EAAe1zC,GACvE,MAAM,QACJ8vD,EAAO,QACPC,GACEpuY,KACCmuY,GAAYC,IAGjBD,EAAQrc,iBAAiBgd,EAAiBz0C,EAAY7C,EAAYu6B,GAClEqc,EAAQtc,iBAAiBgd,EAAiBz0C,EAAY7C,EAAYnZ,GACpE,CACA,OAAArzM,GACMhrI,KAAKmuY,UACPnuY,KAAKmuY,QAAQnjQ,UACbhrI,KAAKmuY,aAAUv1Y,GAEboH,KAAKouY,UACPpuY,KAAKouY,QAAQpjQ,UACbhrI,KAAKouY,aAAUx1Y,EAEnB,CACA,QAAA22Y,CAAS3lZ,EAAM+nW,EAASnF,EAAYg5C,EAAoB1a,GACtD,IAAIjtY,EAMJ,OAJEA,EADE8zW,GAA8B,eAAnBA,EAAQzyV,OACZc,KAAK6vY,kBAAkBjmZ,EAAM+nW,EAASnF,EAAYg5C,EAAoB1a,GAEtE9qX,KAAK8vY,oBAAoBlmZ,EAAM4iW,EAAYg5C,EAAoB1a,GAEnEjtY,CACT,CACA,mBAAAiyZ,CAAoBlmZ,EAAM4iW,EAAYg5C,EAAoB1a,GACxD,MAAM,WACJvoB,EAAU,WACVmwB,EAAU,SACV5sB,EAAQ,UACRiB,GACE/mW,KAAKmuY,QAAQ9b,MAAMzoY,EAAM4iW,GAAY,GAAQxsV,KAAK4S,OAAO+4W,aAE7D,MAAO,CACLikB,YAFkB5vY,KAAKouY,QAAQ7I,MAAMhjC,EAAYmwB,EAAY5sB,EAAUiB,EAAWva,EAAYg5C,GAAoB,EAAOxlY,KAAKnU,IAG9Hi/X,YAEJ,CACA,iBAAA+kB,CAAkBjmZ,EAAMkgY,EAAat9B,EAAYg5C,EAAoB1a,GACnE,OAAO9qX,KAAKmuY,QAAQxb,eAAe/oY,EAAMkgY,EAAat9B,GAAYn+U,MAAKiwX,IAE9D,CACLsR,YAFkB5vY,KAAKouY,QAAQ7I,MAAMjH,EAAY/7B,WAAY+7B,EAAY5L,WAAY4L,EAAYx4B,SAAUw4B,EAAYv3B,UAAWva,EAAYg5C,GAAoB,EAAOxlY,KAAKnU,IAG9Ki/X,eAGN,CACA,mBAAAukB,CAAoBzlZ,GAClB,MAAM,OACJgpB,EAAM,SACNqc,EAAQ,cACRitW,EAAa,OACblsQ,GACEhwH,KAEJ,IAAI+vY,EACJ,IAAK,IAAIx2Z,EAAI,EAAGsiB,EAAMivY,GAAUtxZ,OAAQD,EAAIsiB,EAAKtiB,IAAK,CACpD,IAAIy2Z,EACJ,GAAiD,OAA5CA,EAAqBlF,GAAUvxZ,GAAG84Y,QAAkB2d,EAAmBva,MAAM7rY,GAAO,CACvFmmZ,EAAMjF,GAAUvxZ,GAChB,KACF,CACF,CACA,IAAKw2Z,EACH,OAAO,IAAIrsY,MAAM,mDAGnB,MAAMyqY,EAAUnuY,KAAKmuY,QACfC,EAAUpuY,KAAKouY,QACf6B,EAAUF,EAAIxK,MACd2K,EAAUH,EAAI1d,MACf+b,GAAaA,aAAmB6B,IACnCjwY,KAAKouY,QAAU,IAAI6B,EAAQhhX,EAAUrc,EAAQspX,EAAelsQ,IAEzDm+Q,GAAaA,aAAmB+B,IACnClwY,KAAKmuY,QAAU,IAAI+B,EAAQjhX,EAAUrc,EAAQspX,GAC7Cl8X,KAAKy1X,MAAQya,EAAQza,MAEzB,CACA,YAAA2Z,CAAaV,EAAeC,GAG1B,OAAQ3uY,KAAKmuY,UAAYnuY,KAAKouY,SAAWM,GAAiBC,CAC5D,CACA,YAAAM,GACE,IAAI5nB,EAAYrnX,KAAKqnX,UAIrB,OAHKA,IACHA,EAAYrnX,KAAKqnX,UAAY,IAAIvC,GAAU9kX,KAAK4S,SAE3Cy0W,CACT,EASF,MAAM6nB,GAAcpkB,IAAa,CAC/B8kB,YAAa,CAAC,EACd9kB,cAEF,SAAS4kB,GAAUpwY,GACjB,MAAO,SAAUA,GAAKA,EAAE+O,gBAAgB+hB,QAC1C,CACA,MAAM+/W,GACJ,WAAAtuX,CAAYw4U,EAAY7C,EAAYs3C,EAAiBpkZ,EAAUmkZ,GAC7D7uY,KAAKq6V,gBAAa,EAClBr6V,KAAKw3V,gBAAa,EAClBx3V,KAAK8uY,qBAAkB,EACvB9uY,KAAKtV,cAAW,EAChBsV,KAAK6uY,oBAAiB,EACtB7uY,KAAKq6V,WAAaA,EAClBr6V,KAAKw3V,WAAaA,EAClBx3V,KAAK8uY,gBAAkBA,EACvB9uY,KAAKtV,SAAWA,EAChBsV,KAAK6uY,eAAiBA,GAAkB,IAC1C,EAEF,MAAMuB,GACJ,WAAAvuX,CAAY6sX,EAAelgB,EAAYgX,EAAoBmJ,EAAaniD,EAAYoiD,GAClF5uY,KAAK0uY,mBAAgB,EACrB1uY,KAAKwuX,gBAAa,EAClBxuX,KAAKwlY,wBAAqB,EAC1BxlY,KAAK2uY,iBAAc,EACnB3uY,KAAKwsV,gBAAa,EAClBxsV,KAAK4uY,uBAAoB,EACzB5uY,KAAK0uY,cAAgBA,EACrB1uY,KAAKwuX,WAAaA,EAClBxuX,KAAKwlY,mBAAqBA,EAC1BxlY,KAAK2uY,YAAcA,EACnB3uY,KAAKwsV,WAAaA,EAClBxsV,KAAK4uY,kBAAoBA,CAC3B,EAGF,IAAIyB,GAAgB,CAACh1Y,QAAS,CAAC,IAE9B,SAAUD,GAEV,IAAIo1B,EAAMz2C,OAAOC,UAAUb,eACvBopD,EAAS,IASb,SAAS6yK,IAAU,CA4BnB,SAASk7L,EAAG50Y,EAAIoD,EAAS4/G,GACvB1+G,KAAKtE,GAAKA,EACVsE,KAAKlB,QAAUA,EACfkB,KAAK0+G,KAAOA,IAAQ,CACtB,CAaA,SAAS8wC,EAAY+gP,EAAS/rZ,EAAOkX,EAAIoD,EAAS4/G,GAChD,GAAkB,oBAAPhjH,EACT,MAAM,IAAIwG,UAAU,mCAGtB,IAAIse,EAAW,IAAI8vX,EAAG50Y,EAAIoD,GAAWyxY,EAAS7xR,GAC1Cj+F,EAAM8hB,EAASA,EAAS/9C,EAAQA,EAMpC,OAJK+rZ,EAAQC,QAAQ/vX,GACX8vX,EAAQC,QAAQ/vX,GAAK/kB,GAC1B60Y,EAAQC,QAAQ/vX,GAAO,CAAC8vX,EAAQC,QAAQ/vX,GAAMD,GADhB+vX,EAAQC,QAAQ/vX,GAAKplC,KAAKmlC,IADlC+vX,EAAQC,QAAQ/vX,GAAOD,EAAU+vX,EAAQE,gBAI7DF,CACT,CASA,SAASG,EAAWH,EAAS9vX,GACI,MAAzB8vX,EAAQE,aAAoBF,EAAQC,QAAU,IAAIp7L,SAC5Cm7L,EAAQC,QAAQ/vX,EAC9B,CASA,SAASoqR,IACP7qS,KAAKwwY,QAAU,IAAIp7L,EACnBp1M,KAAKywY,aAAe,CACtB,CAzEI12Z,OAAO6yB,SACTwoM,EAAOp7N,UAAYD,OAAO6yB,OAAO,OAM5B,IAAIwoM,GAASpzL,YAAWugB,GAAS,IA2ExCsoQ,EAAa7wT,UAAU22Z,WAAa,WAClC,IACIlgY,EACA7rB,EAFAgsZ,EAAQ,GAIZ,GAA0B,IAAtB5wY,KAAKywY,aAAoB,OAAOG,EAEpC,IAAKhsZ,KAAS6rB,EAASzQ,KAAKwwY,QACtBhgX,EAAIr2C,KAAKs2B,EAAQ7rB,IAAOgsZ,EAAMv1Z,KAAKknD,EAAS39C,EAAKrB,MAAM,GAAKqB,GAGlE,OAAI7K,OAAOw5C,sBACFq9W,EAAM70Y,OAAOhiB,OAAOw5C,sBAAsB9iB,IAG5CmgY,CACT,EASA/lG,EAAa7wT,UAAUu1K,UAAY,SAAmB/qK,GACpD,IAAIi8B,EAAM8hB,EAASA,EAAS/9C,EAAQA,EAChC+3K,EAAWv8J,KAAKwwY,QAAQ/vX,GAE5B,IAAK87I,EAAU,MAAO,GACtB,GAAIA,EAAS7gK,GAAI,MAAO,CAAC6gK,EAAS7gK,IAElC,IAAK,IAAIniB,EAAI,EAAGu3C,EAAIyrI,EAAS/iL,OAAQmoH,EAAK,IAAI/nH,MAAMk3C,GAAIv3C,EAAIu3C,EAAGv3C,IAC7DooH,EAAGpoH,GAAKgjL,EAAShjL,GAAGmiB,GAGtB,OAAOimG,CACT,EASAkpM,EAAa7wT,UAAU62Z,cAAgB,SAAuBrsZ,GAC5D,IAAIi8B,EAAM8hB,EAASA,EAAS/9C,EAAQA,EAChC+qK,EAAYvvJ,KAAKwwY,QAAQ/vX,GAE7B,OAAK8uI,EACDA,EAAU7zJ,GAAW,EAClB6zJ,EAAU/1K,OAFM,CAGzB,EASAqxT,EAAa7wT,UAAU65Y,KAAO,SAAcrvY,EAAOssZ,EAAIC,EAAIC,EAAIC,EAAIC,GACjE,IAAIzwX,EAAM8hB,EAASA,EAAS/9C,EAAQA,EAEpC,IAAKwb,KAAKwwY,QAAQ/vX,GAAM,OAAO,EAE/B,IAEIpnC,EACAE,EAHAg2K,EAAYvvJ,KAAKwwY,QAAQ/vX,GACzB5kB,EAAM8D,UAAUnmB,OAIpB,GAAI+1K,EAAU7zJ,GAAI,CAGhB,OAFI6zJ,EAAU7wC,MAAM1+G,KAAKyvJ,eAAejrK,EAAO+qK,EAAU7zJ,QAAI9C,GAAW,GAEhEiD,GACN,KAAK,EAAG,OAAO0zJ,EAAU7zJ,GAAGvhB,KAAKo1K,EAAUzwJ,UAAU,EACrD,KAAK,EAAG,OAAOywJ,EAAU7zJ,GAAGvhB,KAAKo1K,EAAUzwJ,QAASgyY,IAAK,EACzD,KAAK,EAAG,OAAOvhP,EAAU7zJ,GAAGvhB,KAAKo1K,EAAUzwJ,QAASgyY,EAAIC,IAAK,EAC7D,KAAK,EAAG,OAAOxhP,EAAU7zJ,GAAGvhB,KAAKo1K,EAAUzwJ,QAASgyY,EAAIC,EAAIC,IAAK,EACjE,KAAK,EAAG,OAAOzhP,EAAU7zJ,GAAGvhB,KAAKo1K,EAAUzwJ,QAASgyY,EAAIC,EAAIC,EAAIC,IAAK,EACrE,KAAK,EAAG,OAAO1hP,EAAU7zJ,GAAGvhB,KAAKo1K,EAAUzwJ,QAASgyY,EAAIC,EAAIC,EAAIC,EAAIC,IAAK,EAG3E,IAAK33Z,EAAI,EAAGF,EAAO,IAAIO,MAAMiiB,EAAK,GAAItiB,EAAIsiB,EAAKtiB,IAC7CF,EAAKE,EAAI,GAAKomB,UAAUpmB,GAG1Bg2K,EAAU7zJ,GAAGqE,MAAMwvJ,EAAUzwJ,QAASzlB,EACxC,KAAO,CACL,IACIspB,EADAnpB,EAAS+1K,EAAU/1K,OAGvB,IAAKD,EAAI,EAAGA,EAAIC,EAAQD,IAGtB,OAFIg2K,EAAUh2K,GAAGmlI,MAAM1+G,KAAKyvJ,eAAejrK,EAAO+qK,EAAUh2K,GAAGmiB,QAAI9C,GAAW,GAEtEiD,GACN,KAAK,EAAG0zJ,EAAUh2K,GAAGmiB,GAAGvhB,KAAKo1K,EAAUh2K,GAAGulB,SAAU,MACpD,KAAK,EAAGywJ,EAAUh2K,GAAGmiB,GAAGvhB,KAAKo1K,EAAUh2K,GAAGulB,QAASgyY,GAAK,MACxD,KAAK,EAAGvhP,EAAUh2K,GAAGmiB,GAAGvhB,KAAKo1K,EAAUh2K,GAAGulB,QAASgyY,EAAIC,GAAK,MAC5D,KAAK,EAAGxhP,EAAUh2K,GAAGmiB,GAAGvhB,KAAKo1K,EAAUh2K,GAAGulB,QAASgyY,EAAIC,EAAIC,GAAK,MAChE,QACE,IAAK33Z,EAAM,IAAKspB,EAAI,EAAGtpB,EAAO,IAAIO,MAAMiiB,EAAK,GAAI8G,EAAI9G,EAAK8G,IACxDtpB,EAAKspB,EAAI,GAAKhD,UAAUgD,GAG1B4sJ,EAAUh2K,GAAGmiB,GAAGqE,MAAMwvJ,EAAUh2K,GAAGulB,QAASzlB,GAGpD,CAEA,OAAO,CACT,EAWAwxT,EAAa7wT,UAAUy4C,GAAK,SAAYjuC,EAAOkX,EAAIoD,GACjD,OAAO0wJ,EAAYxvJ,KAAMxb,EAAOkX,EAAIoD,GAAS,EAC/C,EAWA+rS,EAAa7wT,UAAU0kI,KAAO,SAAcl6H,EAAOkX,EAAIoD,GACrD,OAAO0wJ,EAAYxvJ,KAAMxb,EAAOkX,EAAIoD,GAAS,EAC/C,EAYA+rS,EAAa7wT,UAAUy1K,eAAiB,SAAwBjrK,EAAOkX,EAAIoD,EAAS4/G,GAClF,IAAIj+F,EAAM8hB,EAASA,EAAS/9C,EAAQA,EAEpC,IAAKwb,KAAKwwY,QAAQ/vX,GAAM,OAAOzgB,KAC/B,IAAKtE,EAEH,OADAg1Y,EAAW1wY,KAAMygB,GACVzgB,KAGT,IAAIuvJ,EAAYvvJ,KAAKwwY,QAAQ/vX,GAE7B,GAAI8uI,EAAU7zJ,GAEV6zJ,EAAU7zJ,KAAOA,GACfgjH,IAAQ6wC,EAAU7wC,MAClB5/G,GAAWywJ,EAAUzwJ,UAAYA,GAEnC4xY,EAAW1wY,KAAMygB,OAEd,CACL,IAAK,IAAIlnC,EAAI,EAAGk3B,EAAS,GAAIj3B,EAAS+1K,EAAU/1K,OAAQD,EAAIC,EAAQD,KAEhEg2K,EAAUh2K,GAAGmiB,KAAOA,GACnBgjH,IAAS6wC,EAAUh2K,GAAGmlI,MACtB5/G,GAAWywJ,EAAUh2K,GAAGulB,UAAYA,IAErC2R,EAAOp1B,KAAKk0K,EAAUh2K,IAOtBk3B,EAAOj3B,OAAQwmB,KAAKwwY,QAAQ/vX,GAAyB,IAAlBhQ,EAAOj3B,OAAei3B,EAAO,GAAKA,EACpEigY,EAAW1wY,KAAMygB,EACxB,CAEA,OAAOzgB,IACT,EASA6qS,EAAa7wT,UAAU01K,mBAAqB,SAA4BlrK,GACtE,IAAIi8B,EAUJ,OARIj8B,GACFi8B,EAAM8hB,EAASA,EAAS/9C,EAAQA,EAC5Bwb,KAAKwwY,QAAQ/vX,IAAMiwX,EAAW1wY,KAAMygB,KAExCzgB,KAAKwwY,QAAU,IAAIp7L,EACnBp1M,KAAKywY,aAAe,GAGfzwY,IACT,EAKA6qS,EAAa7wT,UAAUs6J,IAAMu2J,EAAa7wT,UAAUy1K,eACpDo7I,EAAa7wT,UAAUw1K,YAAcq7I,EAAa7wT,UAAUy4C,GAK5Do4Q,EAAasmG,SAAW5uW,EAKxBsoQ,EAAaA,aAAeA,EAM1BzvS,EAAOC,QAAUwvS,CAEpB,CAhVA,CAgVGwlG,IAEH,IACIxlG,GAA4B6tC,EADL23D,GAAch1Y,SAGzC,MAAM+1Y,GACJ,WAAAvvX,CAAYk9U,EAAKlzW,EAAIwlZ,EAAoBC,GACvCtxY,KAAKtc,MAAQ,KACbsc,KAAK++V,SAAM,EACX/+V,KAAKnU,QAAK,EACVmU,KAAKivB,cAAW,EAChBjvB,KAAKq/U,KAAO,KACZr/U,KAAK28V,KAAO,KACZ38V,KAAKuxY,eAAY,EACjBvxY,KAAKwxY,cAAgB,KACrBxxY,KAAKyxY,YAAS,EACdzxY,KAAK4mX,WAAa,KAClB5mX,KAAKqxY,wBAAqB,EAC1BrxY,KAAKsxY,aAAU,EACf,MAAM1+X,EAASmsV,EAAInsV,OACnB5S,KAAK++V,IAAMA,EACX/+V,KAAKnU,GAAKA,EACVmU,KAAKuxY,YAAc3+X,EAAO8+X,aAC1B1xY,KAAKqxY,mBAAqBA,EAC1BrxY,KAAKsxY,QAAUA,EACf,MAAMK,EAAiB,CAAC9tQ,EAAIj6I,MAC1BA,EAAOA,GAAQ,CAAC,GACXy1V,KAAOr/U,KAAKq/U,KACjBz1V,EAAKiC,GAAKmU,KAAKnU,GACXg4I,IAAOuxE,EAAO5yI,QAChBxiE,KAAKtc,MAAQkG,EAAKlG,OAEpBsc,KAAK++V,IAAI/zD,QAAQnnK,EAAIj6I,EAAK,EAI5BoW,KAAKivB,SAAW,IAAI47Q,GACpB7qS,KAAKivB,SAASwD,GAAG2iL,EAAO40K,eAAgB2nB,GACxC3xY,KAAKivB,SAASwD,GAAG2iL,EAAO5yI,MAAOmvU,GAC/B,MAAMz+C,EAAcF,GAAepgV,EAAOqgV,2BAA6B,CACrEoE,gBAAiB,KAAM,GAEnBu6C,EAAoB,CACxB3S,KAAM/rC,EAAYmE,gBAAgB,cAClC6nC,IAAKhsC,EAAYmE,gBAAgB,2BACjC8nC,IAAKjsC,EAAYmE,gBAAgB,6BAEnC,GAAIr3V,KAAKuxY,WAA+B,qBAAXtjQ,OAAwB,CAEnD,GADwBr7H,EAAOi/X,YAj3JK,oBAA1BC,sBAk3JW,CACnB,IACMl/X,EAAOi/X,YACT5yY,EAAOuB,IAAI,sBAAsBoS,EAAOi/X,mBAAmBhmZ,MAC3DmU,KAAKwxY,cAz2JjB,SAAoB9rZ,GAClB,MAAMqsZ,EAAY,IAAI/iY,KAAKuvB,IAAI74C,EAAMspB,KAAK9O,SAAS5a,MAAMA,KAEzD,MAAO,CACL0sZ,OAFa,IAAIhjY,KAAKi/H,OAAO8jQ,GAG7BA,YAEJ,CAk2JiCE,CAAWr/X,EAAOi/X,cAEvC5yY,EAAOuB,IAAI,6BAA6B3U,MACxCmU,KAAKwxY,cAv3JjB,WACE,MAAM37H,EAAO,IAAI7mQ,KAAK2tI,KAAK,CAAC,wFAAwFm1P,sBAAsBh4Z,sBAAuB,CAC/JkE,KAAM,oBAEFk0Z,EAAYljY,KAAKuvB,IAAIglN,gBAAgBsyB,GAE3C,MAAO,CACLm8H,OAFa,IAAIhjY,KAAKi/H,OAAOikQ,GAG7BA,YAEJ,CA62JiCC,IAEvBnyY,KAAKyxY,OAASjtZ,GAASwb,KAAKoyY,gBAAgB5tZ,GAC5C,MAAM,OACJwtZ,GACEhyY,KAAKwxY,cACTQ,EAAO3yZ,iBAAiB,UAAW2gB,KAAKyxY,QACxCO,EAAO58X,QAAU5wB,IACf,MAAMd,EAAQ,IAAIggB,MAAM,GAAGlf,EAAMqE,aAAarE,EAAM+uF,YAAY/uF,EAAMwuF,WACtEpgE,EAAO8+X,cAAe,EACtBzyY,EAAOyO,KAAK,aAAa7hB,qCACzBmU,KAAK++V,IAAI/zD,QAAQ51F,EAAO5yI,MAAO,CAC7BxkF,KAAMm8V,EAAW+xC,YACjBprB,QAAS1mB,EAAa+xC,mBACtB5xF,OAAO,EACP/1S,MAAO,gBACPd,SACA,EAEJsuZ,EAAOhqP,YAAY,CACjBihJ,IAAK,OACLizF,cAAe0V,EACf5hR,OAAQ,GACRnkI,GAAIA,EACJ+mB,OAAQpN,KAAKC,UAAUmN,IAE3B,CAAE,MAAO3M,IACPhH,EAAOyO,KAAK,qBAAqB7hB,oCAAsCoa,IACvEjG,KAAKqyY,cACLryY,KAAKtc,MAAQ,KACbsc,KAAK4mX,WAAa,IAAIsnB,GAAWluY,KAAKivB,SAAU2iX,EAAmBh/X,EAAQ,GAAI/mB,EACjF,CACA,MACF,CACF,CACAmU,KAAK4mX,WAAa,IAAIsnB,GAAWluY,KAAKivB,SAAU2iX,EAAmBh/X,EAAQ,GAAI/mB,EACjF,CACA,WAAAwmZ,GACE,GAAIryY,KAAKwxY,cAAe,CACtB,MAAM,OACJQ,EAAM,UACNE,GACElyY,KAAKwxY,cACLU,GAEFljY,KAAKuvB,IAAIkjN,gBAAgBywJ,GAE3BF,EAAO1yZ,oBAAoB,UAAW0gB,KAAKyxY,QAC3CO,EAAO58X,QAAU,KACjB48X,EAAOM,YACPtyY,KAAKwxY,cAAgB,IACvB,CACF,CACA,OAAAxmQ,GACE,GAAIhrI,KAAKwxY,cACPxxY,KAAKqyY,cACLryY,KAAKyxY,YAAS74Y,MACT,CACL,MAAMguX,EAAa5mX,KAAK4mX,WACpBA,IACFA,EAAW57O,UACXhrI,KAAK4mX,WAAa,KAEtB,CACA,MAAM33V,EAAWjvB,KAAKivB,SAClBA,GACFA,EAASygI,qBAEX1vJ,KAAKq/U,KAAO,KAEZr/U,KAAKivB,SAAW,KAEhBjvB,KAAK++V,IAAM,IACb,CACA,IAAA1jX,CAAKuO,EAAMklZ,EAAiBz0C,EAAY7C,EAAYnY,EAAMsd,EAAMjyW,EAAU86Y,EAAoB1a,EAAWshB,GACvG,IAAImG,EAAmBC,EACvB1nB,EAAUrN,YAAYviW,MAAQlM,KAAK+7G,YAAY9hI,MAC/C,MAAM,WACJ29X,GACE5mX,KACEwsV,EAAamQ,EAAOA,EAAKzhV,MAAQmkU,EAAKnkU,MAEtCmjU,EAAcgB,EAAKhB,YACnB6/B,EAAWl+W,KAAKq/U,KAChBqvD,IAAkBxwB,GAAY7+B,EAAKz8O,KAAOs7Q,EAASt7Q,IACnD+rS,IAAgBzwB,GAAY4M,EAAU5nJ,QAAUg7I,EAASh7I,OACzDuvK,EAASv0B,EAAW4M,EAAUvtC,GAAK2gC,EAAS3gC,IAAM,EAClDm1D,EAAW1yY,KAAK28V,KAAOmuB,EAAUnuB,KAAO38V,KAAK28V,KAAKj7W,OAAS,EAC3DiqY,EAAyB,IAAX8mB,GAAgB3nB,EAAUj/X,GAAK,GAAKi/X,EAAUj/X,MAAoB,MAAZqyX,OAAmB,EAASA,EAAStzE,MAAMwxC,YAC/GoyC,GAAcmgB,IAA2B,IAAX8D,GAA2B,IAAXA,IAA8B,IAAbC,GAAkB/mB,GAAe+mB,GAAY,IAC5GzpZ,EAAM+lB,KAAK+7G,YAAY9hI,OACzB0lZ,GAAe8D,GAAuC,IAA7BpzD,EAAKz0C,MAAM0xC,QAAQphU,SAC9CmkU,EAAKz0C,MAAM0xC,QAAQphU,MAAQjyB,IAEzB0zW,IAAS+1C,GAAalkB,IACxB7xB,EAAK/xD,MAAM0xC,QAAQphU,MAAQjyB,GAE7B,MAAM2lZ,IAAsB1wB,IAAuD,OAAzCq0B,EAAoBlzD,EAAKnB,kBAAuB,EAASq0D,EAAkBx9X,QAA4D,OAAjDy9X,EAAwBt0B,EAAShgC,kBAAuB,EAASs0D,EAAsBz9X,MACjNzM,EAAQ,IAAI8nY,GAAc1B,EAAelgB,EAAYgX,EAAoBmJ,EAAaniD,EAAYoiD,GACxG,IAAKpgB,GAAckgB,GAAiBE,EAAmB,CACrD3vY,EAAOuB,IAAI,0BAA0B6+U,EAAKrhW,gDAAgD8sY,EAAUvtC,SAASutC,EAAUnuB,eAAemuB,EAAU5nJ,aAAa4nJ,EAAUj/X,8BACpJ6iZ,2BACFC,0BACDngB,kCACQgX,0BACRh5C,iCACOoiD,KACvB,MAAMh8X,EAAS,IAAIu9X,GAAe91C,EAAY7C,EAAYs3C,EAAiBpkZ,EAAU0hZ,GACrFpsY,KAAKqvY,oBAAoBz8X,EAC3B,CAKA,GAJA5S,KAAKq/U,KAAOA,EACZr/U,KAAK28V,KAAOA,EAGR38V,KAAKwxY,cAEPxxY,KAAKwxY,cAAcQ,OAAOhqP,YAAY,CACpCihJ,IAAK,QACLr/S,OACAy0V,cACAysC,YACAxiX,SACC1e,aAAgBsqG,YAAc,CAACtqG,GAAQ,SACrC,GAAIg9X,EAAY,CACrB,MAAM+rB,EAAiB/rB,EAAWvrY,KAAKuO,EAAMy0V,EAAaysC,EAAWxiX,GACjEonY,GAAUiD,IACZ/rB,EAAWnhP,OAAQ,EACnBktQ,EAAetkY,MAAKzkB,IAClBoW,KAAK4yY,uBAAuBhpZ,EAAK,IAChCw+B,OAAM1kC,IACPsc,KAAK6yY,gBAAgBnvZ,EAAOonY,EAAW,kCAAkC,MAG3ElE,EAAWnhP,OAAQ,EACnBzlI,KAAK4yY,uBAAuBD,GAEhC,CACF,CACA,KAAA1nT,CAAM6/R,GACJA,EAAUrN,YAAYviW,MAAQlM,KAAK+7G,YAAY9hI,MAC/C,MAAM,WACJ29X,GACE5mX,KACJ,GAAIA,KAAKwxY,cACPxxY,KAAKwxY,cAAcQ,OAAOhqP,YAAY,CACpCihJ,IAAK,QACL6hF,mBAEG,GAAIlE,EAAY,CACrB,IAAI+rB,EAAiB/rB,EAAW37R,MAAM6/R,GACnB4kB,GAAUiD,IACX/rB,EAAWnhP,OACtBiqQ,GAAUiD,KACbA,EAAiBxzX,QAAQC,QAAQuzX,IAEnCA,EAAetkY,MAAKzkB,IAClBoW,KAAK8yY,kBAAkBlpZ,EAAMkhY,EAAU,IACtC1iW,OAAM1kC,IACPsc,KAAK6yY,gBAAgBnvZ,EAAOonY,EAAW,mCAAmC,KAG5E9qX,KAAK8yY,kBAAkBH,EAAgB7nB,EAE3C,CACF,CACA,eAAA+nB,CAAgBnvZ,EAAOonY,EAAWt9W,GAC3BxN,KAAK++V,MAGV/+V,KAAKtc,MAAQA,EACbsc,KAAK++V,IAAI/zD,QAAQ51F,EAAO5yI,MAAO,CAC7BxkF,KAAMm8V,EAAWinC,YACjBtgB,QAAS1mB,EAAay2C,mBACtB/F,YACAzrC,KAAMr/U,KAAKq/U,WAAQzmV,EACnB2hS,OAAO,EACP72S,QACAuiB,IAAKviB,EACL8pB,WAEJ,CACA,iBAAAslY,CAAkBnwU,EAASmoT,GACzBnoT,EAAQ//E,SAAQ/E,IACdmiB,KAAK4yY,uBAAuB/0Z,EAAO,IAErCmiB,KAAKsxY,QAAQxmB,EACf,CACA,eAAAsnB,CAAgB5tZ,GACd,MAAMoF,EAAOpF,EAAMoF,KACnB,GAAc,MAARA,IAAgBA,EAAKpF,MAEzB,YADAya,EAAOyO,KAAK,oCAAmC9jB,EAAO,aAAe,SAGvE,MAAMm1W,EAAM/+V,KAAK++V,IACjB,GAAK/+V,KAAK++V,IAGV,OAAQn1W,EAAKpF,OACX,IAAK,OACH,CACE,IAAIuuZ,EACJ,MAAMb,EAA0D,OAA7Ca,EAAsB/yY,KAAKwxY,oBAAyB,EAASuB,EAAoBb,UAChGA,GAEFljY,KAAKuvB,IAAIkjN,gBAAgBywJ,GAE3B,KACF,CACF,IAAK,mBAEDlyY,KAAK4yY,uBAAuBhpZ,EAAKA,MACjC,MAEJ,IAAK,QAEDoW,KAAKsxY,QAAQ1nZ,EAAKA,MAClB,MAIJ,IAAK,YACCqV,EAAOrV,EAAKA,KAAK+9Q,UACnB1oQ,EAAOrV,EAAKA,KAAK+9Q,SAAS/9Q,EAAKA,KAAKf,SAEtC,MACF,QAEIe,EAAKA,KAAOA,EAAKA,MAAQ,CAAC,EAC1BA,EAAKA,KAAKy1V,KAAOr/U,KAAKq/U,KACtBz1V,EAAKA,KAAKiC,GAAKmU,KAAKnU,GACpBkzW,EAAI/zD,QAAQphT,EAAKpF,MAAOoF,EAAKA,MAIrC,CACA,mBAAAylZ,CAAoBz8X,GAClB,MAAM,WACJg0W,GACE5mX,KACAA,KAAKwxY,cACPxxY,KAAKwxY,cAAcQ,OAAOhqP,YAAY,CACpCihJ,IAAK,YACLr2R,WAEOg0W,GACTA,EAAW4nB,UAAU57X,EAEzB,CACA,sBAAAggY,CAAuB/0Z,GACrBA,EAAOitY,UAAUrN,YAAYtiW,IAAMnM,KAAK+7G,YAAY9hI,MACpD+W,KAAKqxY,mBAAmBxzZ,EAC1B,EAGF,SAASm1Z,GAAyBC,EAAYC,GAC5C,GAAID,EAAWz5Z,SAAW05Z,EAAW15Z,OACnC,OAAO,EAET,IAAK,IAAID,EAAI,EAAGA,EAAI05Z,EAAWz5Z,OAAQD,IACrC,IAAK45Z,GAAyBF,EAAW15Z,GAAG+sJ,MAAO4sQ,EAAW35Z,GAAG+sJ,OAC/D,OAAO,EAGX,OAAO,CACT,CACA,SAAS6sQ,GAAyBC,EAAQC,EAAQC,GAEhD,MAAMC,EAAoBH,EAAO,uBACjC,OAAIG,IAAsBD,EACjBC,IAAsBF,EAAO,yBAG7BC,GAAoB,CAAC,WAAY,OAAQ,kBAAmB,aAAc,UAAW,SAAU,mBAAmBt6W,MAAKw6W,GAAqBJ,EAAOI,KAAuBH,EAAOG,IAC5L,CACA,SAASC,GAA8BC,EAAe3sC,GACpD,OAAOA,EAAUhlX,MAAM0kB,gBAAkBitY,EAAc9uZ,KAAK6hB,iBAAmBsgW,EAAUzuV,UAAYyuV,EAAUzuV,SAAS7R,iBAAmBitY,EAAch/K,MAAQ,IAAIjuN,cACvK,CAg9CA,MAAMktY,GACJ,WAAA9xX,CAAY+xX,GACV5zY,KAAKspW,cAAW,EAChB,MAAMuqC,EAAW,CAACjvZ,EAAMlD,EAAOlI,KAE7B,IADAkI,KAAkB,GACNlI,EAAS,EACnB,MAAM,IAAIolD,aAAa,sBAAsBh6C,2CAA8ClD,yCAA6ClI,MAE1I,OAAOo6Z,EAAWlyZ,GAAOkD,EAAK,EAEhCob,KAAKspW,SAAW,CACd,UAAI9vX,GACF,OAAOo6Z,EAAWp6Z,MACpB,EACA,GAAA2hC,CAAIz5B,GACF,OAAOmyZ,EAAS,MAAOnyZ,EAAOkyZ,EAAWp6Z,OAC3C,EACA,KAAA0hC,CAAMx5B,GACJ,OAAOmyZ,EAAS,QAASnyZ,EAAOkyZ,EAAWp6Z,OAC7C,EAEJ,EA6bF,MAAMs6Z,GACJ,WAAAjyX,CAAYkyX,GACV/zY,KAAKg0Y,aAAU,EACfh0Y,KAAKi0Y,OAAS,CACZvzL,MAAO,GACP/+I,MAAO,GACP69Q,WAAY,IAEdx/U,KAAKg0Y,QAAUD,CACjB,CACA,MAAA53Q,CAAOirB,EAAWppK,EAAMo8C,GACtB,MAAMg7F,EAAQp1H,KAAKi0Y,OAAOj2Z,GAC1Bo3I,EAAM/5I,KAAK+rK,GACU,IAAjBhyB,EAAM57I,QAAiB4gD,GACzBp6B,KAAKk0Y,YAAYl2Z,EAErB,CACA,WAAAm2Z,CAAY/sP,EAAWppK,GACPgiB,KAAKi0Y,OAAOj2Z,GACpBs6F,QAAQ8uE,GACdpnJ,KAAKk0Y,YAAYl2Z,EACnB,CACA,aAAAo2Z,CAAcp2Z,GACZ,IAAI+nJ,EACJ,MAAMjlH,EAAU,IAAI3B,SAAQC,IAC1B2mH,EAAU3mH,CAAO,IAEbgoI,EAAY,CAChBrhB,UACA6xC,QAAS,OACTyyH,WAAY,OACZpsS,QAAS,QAGX,OADA+B,KAAKm8H,OAAOirB,EAAWppK,GAChB8iC,CACT,CACA,WAAAozX,CAAYl2Z,GACV,MAAMo3I,EAAQp1H,KAAKi0Y,OAAOj2Z,GAC1B,GAAIo3I,EAAM57I,OAAQ,CAChB,MAAM4tK,EAAYhyB,EAAM,GACxB,IAGEgyB,EAAUrhB,SACZ,CAAE,MAAOriJ,GACPub,EAAOyO,KAAK,kDAAkD1vB,8BAAiC0F,KAC/F0jK,EAAUnpJ,QAAQva,GAGlB,MAAM0uM,EAAKpyL,KAAKg0Y,QAAQh2Z,GACZ,MAANo0M,GAAcA,EAAGiiN,UACrBr0Y,KAAKs0Y,oBAAoBt2Z,EAE7B,CACF,CACF,CACA,mBAAAs2Z,CAAoBt2Z,GAClBgiB,KAAKi0Y,OAAOj2Z,GAAMinB,QAClBjF,KAAKk0Y,YAAYl2Z,EACnB,CACA,OAAAQ,CAAQR,GACN,OAAOgiB,KAAKi0Y,OAAOj2Z,GAAM,EAC3B,EAGF,MAAMu2Z,GAA8B,uDAu9BpC,SAASC,GAAqBp2U,GAC5B,MAAMq2U,EAAiBr2U,EAAKxhD,iBAAiB,UAC7C,GAAGr5B,MAAMpJ,KAAKs6Z,GAAgB7xZ,SAAQyH,IACpC+zE,EAAKsN,YAAYrhF,EAAO,GAE5B,CAiDA,MAAMqqZ,GAA0B,CAC9B,GAAM,IAEN,GAAM,IAEN,GAAM,IAEN,GAAM,IAEN,GAAM,IAEN,IAAM,IAEN,IAAM,IAEN,IAAM,IAEN,IAAM,IAEN,IAAM,KAKN,IAAM,IAEN,IAAM,IAEN,IAAM,IAEN,IAAM,IAEN,IAAM,KAEN,IAAM,IAEN,IAAM,IAEN,IAAM,KAEN,IAAM,IAEN,IAAM,GAEN,IAAM,IAEN,IAAM,IAEN,IAAM,IAEN,IAAM,IAEN,IAAM,IAEN,IAAM,IAIN,IAAM,IAEN,IAAM,IAEN,IAAM,IAEN,IAAM,IAEN,IAAM,IAEN,IAAM,IAEN,IAAM,KAEN,IAAM,IAEN,IAAM,GAEN,IAAM,KAEN,IAAM,KAEN,IAAM,IAEN,IAAM,KAEN,IAAM,KAEN,IAAM,KAEN,IAAM,KAEN,IAAM,IAEN,IAAM,IAEN,IAAM,IAEN,IAAM,IAEN,IAAM,IAEN,IAAM,IAEN,IAAM,IAEN,IAAM,IAEN,IAAM,IAEN,IAAM,IAEN,IAAM,IAEN,IAAM,IAEN,IAAM,IAEN,IAAM,IAEN,IAAM,IAEN,IAAM,IAIN,IAAM,IAEN,IAAM,IAEN,IAAM,IAEN,IAAM,IAEN,IAAM,IAEN,IAAM,IAEN,IAAM,IAEN,IAAM,IAEN,IAAM,IAEN,IAAM,IAEN,IAAM,IAEN,IAAM,GAEN,IAAM,GAEN,IAAM,GAEN,IAAM,IAEN,IAAM,KAEN,IAAM,IAEN,IAAM,IAEN,IAAM,IAEN,IAAM,IAEN,IAAM,IAEN,IAAM,IAEN,IAAM,IAEN,IAAM,KAEN,IAAM,IAEN,IAAM,IAEN,IAAM,IAEN,IAAM,IAEN,IAAM,KAEN,IAAM,KAEN,IAAM,KAEN,IAAM,MAMFC,GAAiB5pD,GAAQloV,OAAO+iB,aAAa8uX,GAAwB3pD,IAASA,GAC9E6pD,GAAU,GACVC,GAAU,IAEVC,GAAa,CACjB,GAAM,EACN,GAAM,EACN,GAAM,EACN,GAAM,EACN,GAAM,EACN,GAAM,GACN,GAAM,GACN,GAAM,IAEFC,GAAc,CAClB,GAAM,EACN,GAAM,EACN,GAAM,EACN,GAAM,EACN,GAAM,GACN,GAAM,GACN,GAAM,IAEFC,GAAa,CACjB,GAAM,EACN,GAAM,EACN,GAAM,EACN,GAAM,EACN,GAAM,EACN,GAAM,GACN,GAAM,GACN,GAAM,IAEFC,GAAc,CAClB,GAAM,EACN,GAAM,EACN,GAAM,EACN,GAAM,EACN,GAAM,GACN,GAAM,GACN,GAAM,IAEFC,GAAmB,CAAC,QAAS,QAAS,OAAQ,OAAQ,MAAO,SAAU,UAAW,QAAS,eACjG,MAAMC,GACJ,WAAAtzX,GACE7hB,KAAKjX,KAAO,KACZiX,KAAKo1Y,aAAe,CACtB,CACA,GAAA50Y,CAAIwJ,EAAUspE,GACZ,GAAItzE,KAAKo1Y,cAAgBprY,EAAU,CACjC,MAAMsX,EAAmB,oBAARgyD,EAAqBA,IAAQA,EAC9Cr0E,EAAOuB,IAAI,GAAGR,KAAKjX,SAASihB,MAAasX,IAC3C,CACF,EAEF,MAAM+zX,GAAqB,SAA4BC,GACrD,MAAMC,EAAW,GACjB,IAAK,IAAI5yY,EAAI,EAAGA,EAAI2yY,EAAS97Z,OAAQmpB,IACnC4yY,EAASl6Z,KAAKi6Z,EAAS3yY,GAAG7oB,SAAS,KAErC,OAAOy7Z,CACT,EACA,MAAMC,GACJ,WAAA3zX,GACE7hB,KAAKy1Y,WAAa,QAClBz1Y,KAAK01Y,WAAY,EACjB11Y,KAAK21Y,SAAU,EACf31Y,KAAK41Y,WAAa,QAClB51Y,KAAK61Y,OAAQ,CACf,CACA,KAAAt/X,GACEvW,KAAKy1Y,WAAa,QAClBz1Y,KAAK01Y,WAAY,EACjB11Y,KAAK21Y,SAAU,EACf31Y,KAAK41Y,WAAa,QAClB51Y,KAAK61Y,OAAQ,CACf,CACA,SAAAC,CAAUC,GACR,MAAMh4U,EAAU,CAAC,aAAc,YAAa,UAAW,aAAc,SACrE,IAAK,IAAIxkF,EAAI,EAAGA,EAAIwkF,EAAQvkF,OAAQD,IAAK,CACvC,MAAMsD,EAAQkhF,EAAQxkF,GAClBw8Z,EAAO58Z,eAAe0D,KACxBmjB,KAAKnjB,GAASk5Z,EAAOl5Z,GAEzB,CACF,CACA,SAAAuT,GACE,MAA2B,UAApB4P,KAAKy1Y,aAA2Bz1Y,KAAK01Y,YAAc11Y,KAAK21Y,SAA+B,UAApB31Y,KAAK41Y,aAA2B51Y,KAAK61Y,KACjH,CACA,MAAAl8F,CAAO7yP,GACL,OAAO9mD,KAAKy1Y,aAAe3uV,EAAM2uV,YAAcz1Y,KAAK01Y,YAAc5uV,EAAM4uV,WAAa11Y,KAAK21Y,UAAY7uV,EAAM6uV,SAAW31Y,KAAK41Y,aAAe9uV,EAAM8uV,YAAc51Y,KAAK61Y,QAAU/uV,EAAM+uV,KACtL,CACA,IAAAp1U,CAAKu1U,GACHh2Y,KAAKy1Y,WAAaO,EAAYP,WAC9Bz1Y,KAAK01Y,UAAYM,EAAYN,UAC7B11Y,KAAK21Y,QAAUK,EAAYL,QAC3B31Y,KAAK41Y,WAAaI,EAAYJ,WAC9B51Y,KAAK61Y,MAAQG,EAAYH,KAC3B,CACA,QAAA/7Z,GACE,MAAO,SAAWkmB,KAAKy1Y,WAAa,eAAiBz1Y,KAAK01Y,UAAY,aAAe11Y,KAAK21Y,QAAU,gBAAkB31Y,KAAK41Y,WAAa,WAAa51Y,KAAK61Y,KAC5J,EAOF,MAAMI,GACJ,WAAAp0X,GACE7hB,KAAKk2Y,MAAQ,IACbl2Y,KAAKm2Y,SAAW,IAAIX,EACtB,CACA,KAAAj/X,GACEvW,KAAKk2Y,MAAQ,IACbl2Y,KAAKm2Y,SAAS5/X,OAChB,CACA,OAAA6/X,CAAQF,EAAOF,GACbh2Y,KAAKk2Y,MAAQA,EACbl2Y,KAAKm2Y,SAAS11U,KAAKu1U,EACrB,CACA,WAAAK,CAAYL,GACVh2Y,KAAKm2Y,SAAS11U,KAAKu1U,EACrB,CACA,MAAAr8F,CAAO7yP,GACL,OAAO9mD,KAAKk2Y,QAAUpvV,EAAMovV,OAASl2Y,KAAKm2Y,SAASx8F,OAAO7yP,EAAMqvV,SAClE,CACA,IAAA11U,CAAK61U,GACHt2Y,KAAKk2Y,MAAQI,EAAQJ,MACrBl2Y,KAAKm2Y,SAAS11U,KAAK61U,EAAQH,SAC7B,CACA,OAAAlqX,GACE,MAAsB,MAAfjsB,KAAKk2Y,OAAiBl2Y,KAAKm2Y,SAAS/lZ,WAC7C,EAOF,MAAMmmZ,GACJ,WAAA10X,CAAY5iB,GACVe,KAAKw2Y,MAAQ,GACbx2Y,KAAK0lB,IAAM,EACX1lB,KAAKy2Y,aAAe,IAAIjB,GACxBx1Y,KAAK02Y,aAAe,KACpB12Y,KAAKf,YAAS,EACd,IAAK,IAAI1lB,EAAI,EAAGA,EAAIs7Z,GAASt7Z,IAC3BymB,KAAKw2Y,MAAMn7Z,KAAK,IAAI46Z,IAEtBj2Y,KAAKf,OAASA,CAChB,CACA,MAAA06S,CAAO7yP,GACL,IAAK,IAAIvtE,EAAI,EAAGA,EAAIs7Z,GAASt7Z,IAC3B,IAAKymB,KAAKw2Y,MAAMj9Z,GAAGogU,OAAO7yP,EAAM0vV,MAAMj9Z,IACpC,OAAO,EAGX,OAAO,CACT,CACA,IAAAknF,CAAK3Z,GACH,IAAK,IAAIvtE,EAAI,EAAGA,EAAIs7Z,GAASt7Z,IAC3BymB,KAAKw2Y,MAAMj9Z,GAAGknF,KAAK3Z,EAAM0vV,MAAMj9Z,GAEnC,CACA,OAAA0yC,GACE,IAAI++R,GAAQ,EACZ,IAAK,IAAIzxU,EAAI,EAAGA,EAAIs7Z,GAASt7Z,IAC3B,IAAKymB,KAAKw2Y,MAAMj9Z,GAAG0yC,UAAW,CAC5B++R,GAAQ,EACR,KACF,CAEF,OAAOA,CACT,CAKA,SAAA2rF,CAAUC,GACJ52Y,KAAK0lB,MAAQkxX,IACf52Y,KAAK0lB,IAAMkxX,GAET52Y,KAAK0lB,IAAM,GACb1lB,KAAKf,OAAOuB,IAAI,EAAG,4BAA8BR,KAAK0lB,KACtD1lB,KAAK0lB,IAAM,GACF1lB,KAAK0lB,IAAMmvX,KACpB70Y,KAAKf,OAAOuB,IAAI,EAAG,6BAA+BR,KAAK0lB,KACvD1lB,KAAK0lB,IAAMmvX,GAEf,CAKA,UAAAgC,CAAWC,GACT,MAAMC,EAAS/2Y,KAAK0lB,IAAMoxX,EAC1B,GAAIA,EAAS,EACX,IAAK,IAAIv9Z,EAAIymB,KAAK0lB,IAAM,EAAGnsC,EAAIw9Z,EAAS,EAAGx9Z,IACzCymB,KAAKw2Y,MAAMj9Z,GAAG88Z,YAAYr2Y,KAAKy2Y,cAGnCz2Y,KAAK22Y,UAAUI,EACjB,CAKA,SAAAC,GACEh3Y,KAAK62Y,YAAY,GACjB72Y,KAAKw2Y,MAAMx2Y,KAAK0lB,KAAK0wX,QAAQ,IAAKp2Y,KAAKy2Y,aACzC,CACA,UAAAQ,CAAWlsD,GACLA,GAAQ,KAEV/qV,KAAKg3Y,YAEP,MAAMtzW,EAAOixW,GAAe5pD,GACxB/qV,KAAK0lB,KAAOmvX,GACd70Y,KAAKf,OAAOuB,IAAI,GAAG,IAAM,iBAAmBuqV,EAAKjxW,SAAS,IAAM,KAAO4pD,EAAO,iBAAmB1jC,KAAK0lB,IAAM,oBAG9G1lB,KAAKw2Y,MAAMx2Y,KAAK0lB,KAAK0wX,QAAQ1yW,EAAM1jC,KAAKy2Y,cACxCz2Y,KAAK62Y,WAAW,GAClB,CACA,YAAAK,CAAaC,GACX,IAAI59Z,EACJ,IAAKA,EAAI49Z,EAAU59Z,EAAIs7Z,GAASt7Z,IAC9BymB,KAAKw2Y,MAAMj9Z,GAAGg9B,OAElB,CACA,KAAAzO,GACE9H,KAAKk3Y,aAAa,GAClBl3Y,KAAK0lB,IAAM,EACX1lB,KAAKy2Y,aAAalgY,OACpB,CACA,eAAA6gY,GACEp3Y,KAAKk3Y,aAAal3Y,KAAK0lB,IACzB,CACA,aAAA2xX,GACE,MAAMb,EAAQ,GACd,IAAIxrF,GAAQ,EACZ,IAAK,IAAIzxU,EAAI,EAAGA,EAAIs7Z,GAASt7Z,IAAK,CAChC,MAAMmqD,EAAO1jC,KAAKw2Y,MAAMj9Z,GAAG28Z,MACd,MAATxyW,IACFsnR,GAAQ,GAEVwrF,EAAMn7Z,KAAKqoD,EACb,CACA,OAAIsnR,EACK,GAEAwrF,EAAM53Y,KAAK,GAEtB,CACA,YAAA04Y,CAAavB,GACX/1Y,KAAKy2Y,aAAaX,UAAUC,GACX/1Y,KAAKw2Y,MAAMx2Y,KAAK0lB,KACxB2wX,YAAYr2Y,KAAKy2Y,aAC5B,EAOF,MAAMc,GACJ,WAAA11X,CAAY5iB,GACVe,KAAKnb,KAAO,GACZmb,KAAKw3Y,QAAU5C,GACf50Y,KAAKy3Y,aAAe,KACpBz3Y,KAAK03Y,iBAAmB,KACxB13Y,KAAKf,YAAS,EACd,IAAK,IAAI1lB,EAAI,EAAGA,EAAIq7Z,GAASr7Z,IAC3BymB,KAAKnb,KAAKxJ,KAAK,IAAIk7Z,GAAIt3Y,IAEzBe,KAAKf,OAASA,CAChB,CACA,KAAAsX,GACE,IAAK,IAAIh9B,EAAI,EAAGA,EAAIq7Z,GAASr7Z,IAC3BymB,KAAKnb,KAAKtL,GAAGuuB,QAEf9H,KAAKw3Y,QAAU5C,EACjB,CACA,MAAAj7F,CAAO7yP,GACL,IAAIu/J,GAAQ,EACZ,IAAK,IAAI9sO,EAAI,EAAGA,EAAIq7Z,GAASr7Z,IAC3B,IAAKymB,KAAKnb,KAAKtL,GAAGogU,OAAO7yP,EAAMjiE,KAAKtL,IAAK,CACvC8sO,GAAQ,EACR,KACF,CAEF,OAAOA,CACT,CACA,IAAA5lJ,CAAK3Z,GACH,IAAK,IAAIvtE,EAAI,EAAGA,EAAIq7Z,GAASr7Z,IAC3BymB,KAAKnb,KAAKtL,GAAGknF,KAAK3Z,EAAMjiE,KAAKtL,GAEjC,CACA,OAAA0yC,GACE,IAAI++R,GAAQ,EACZ,IAAK,IAAIzxU,EAAI,EAAGA,EAAIq7Z,GAASr7Z,IAC3B,IAAKymB,KAAKnb,KAAKtL,GAAG0yC,UAAW,CAC3B++R,GAAQ,EACR,KACF,CAEF,OAAOA,CACT,CACA,SAAAgsF,GACch3Y,KAAKnb,KAAKmb,KAAKw3Y,SACvBR,WACN,CACA,eAAAI,GACcp3Y,KAAKnb,KAAKmb,KAAKw3Y,SACvBJ,iBACN,CAKA,UAAAH,CAAWvzW,GACG1jC,KAAKnb,KAAKmb,KAAKw3Y,SACvBP,WAAWvzW,EACjB,CACA,MAAAi0W,CAAO5B,GACO/1Y,KAAKnb,KAAKmb,KAAKw3Y,SACvBF,aAAavB,EACnB,CACA,UAAAc,CAAWC,GACG92Y,KAAKnb,KAAKmb,KAAKw3Y,SACvBX,WAAWC,EACjB,CACA,SAAAH,CAAUC,GACR52Y,KAAKf,OAAOuB,IAAI,EAAG,cAAgBo2Y,GACvB52Y,KAAKnb,KAAKmb,KAAKw3Y,SACvBb,UAAUC,EAChB,CACA,MAAAgB,CAAOC,GACL73Y,KAAKf,OAAOuB,IAAI,GAAG,IAAM,aAAegF,KAAKC,UAAUoyY,KACvD,IAAIC,EAASD,EAAQ/sO,IAAM,EAM3B,GALI9qK,KAAKy3Y,cAAgBK,EAAS93Y,KAAKy3Y,aAAe,IACpDK,EAAS93Y,KAAKy3Y,aAAe,GAI3Bz3Y,KAAKy3Y,cAAgBz3Y,KAAKw3Y,UAAYM,EAAQ,CAEhD,IAAK,IAAIv+Z,EAAI,EAAGA,EAAIq7Z,GAASr7Z,IAC3BymB,KAAKnb,KAAKtL,GAAGuuB,QAKf,MAAMiwY,EAAc/3Y,KAAKw3Y,QAAU,EAAIx3Y,KAAKy3Y,aAGtCC,EAAmB13Y,KAAK03Y,iBAC9B,GAAIA,EAAkB,CACpB,MAAMM,EAAeN,EAAiB7yZ,KAAKkzZ,GAAarB,aAClD3tZ,EAAOiX,KAAKf,OAAOlW,KACzB,GAAqB,OAAjBivZ,GAAkC,OAATjvZ,GAAiBivZ,EAAejvZ,EAC3D,IAAK,IAAIxP,EAAI,EAAGA,EAAIymB,KAAKy3Y,aAAcl+Z,IACrCymB,KAAKnb,KAAKizZ,EAAS93Y,KAAKy3Y,aAAel+Z,EAAI,GAAGknF,KAAKi3U,EAAiB7yZ,KAAKkzZ,EAAcx+Z,GAG7F,CACF,CACAymB,KAAKw3Y,QAAUM,EACf,MAAMhtO,EAAM9qK,KAAKnb,KAAKmb,KAAKw3Y,SAC3B,GAAuB,OAAnBK,EAAQI,OAAiB,CAC3B,MAAMA,EAASJ,EAAQI,OACjBC,EAAUvoY,KAAKhT,IAAIs7Y,EAAS,EAAG,GACrCntO,EAAI6rO,UAAUkB,EAAQI,QACtBJ,EAAQ94M,MAAQj0B,EAAI0rO,MAAM0B,GAAS/B,SAASV,UAC9C,CACA,MAAMM,EAAS,CACbN,WAAYoC,EAAQ94M,MACpB22M,UAAWmC,EAAQnC,UACnBC,QAASkC,EAAQlC,QACjBC,WAAY,QACZC,OAAO,GAET71Y,KAAK23Y,OAAO5B,EACd,CAKA,UAAAoC,CAAWC,GACTp4Y,KAAKf,OAAOuB,IAAI,GAAG,IAAM,aAAegF,KAAKC,UAAU2yY,KACvDp4Y,KAAKg3Y,YACLh3Y,KAAK23Y,OAAOS,GACZp4Y,KAAKi3Y,WAAW,GAClB,CACA,aAAAoB,CAAcC,GACZt4Y,KAAKy3Y,aAAea,CACtB,CACA,MAAAC,GACE,GAA0B,OAAtBv4Y,KAAKy3Y,aAEP,YADAz3Y,KAAKf,OAAOuB,IAAI,EAAG,wCAGrBR,KAAKf,OAAOuB,IAAI,GAAG,IAAMR,KAAKw4Y,mBAC9B,MAAMT,EAAc/3Y,KAAKw3Y,QAAU,EAAIx3Y,KAAKy3Y,aACtCgB,EAASz4Y,KAAKnb,KAAKq7F,OAAO63T,EAAa,GAAG,GAChDU,EAAO3wY,QACP9H,KAAKnb,KAAKq7F,OAAOlgF,KAAKw3Y,QAAS,EAAGiB,GAClCz4Y,KAAKf,OAAOuB,IAAI,EAAG,aAErB,CAKA,cAAAg4Y,CAAeE,GACbA,EAAWA,IAAY,EACvB,MAAMC,EAAc,GACpB,IAAI10Z,EAAO,GACP20Z,GAAS,EACb,IAAK,IAAIr/Z,EAAI,EAAGA,EAAIq7Z,GAASr7Z,IAAK,CAChC,MAAMs/Z,EAAU74Y,KAAKnb,KAAKtL,GAAG89Z,gBACzBwB,IACFD,EAAQr/Z,EAAI,EACRm/Z,EACFC,EAAYt9Z,KAAK,OAASu9Z,EAAQ,MAAQC,EAAU,KAEpDF,EAAYt9Z,KAAKw9Z,EAAQ9lU,QAG/B,CAQA,OAPI4lU,EAAYn/Z,OAAS,IAErByK,EADEy0Z,EACK,IAAMC,EAAY/5Y,KAAK,OAAS,IAEhC+5Y,EAAY/5Y,KAAK,OAGrB3a,CACT,CACA,gBAAA60Z,GACE,OAAO94Y,KAAKnb,IACd,EAKF,MAAMk0Z,GACJ,WAAAl3X,CAAYm3X,EAAeC,EAAch6Y,GACvCe,KAAKk5Y,UAAO,EACZl5Y,KAAKi5Y,kBAAe,EACpBj5Y,KAAK7S,UAAO,EACZ6S,KAAKo3H,aAAU,EACfp3H,KAAKm5Y,qBAAkB,EACvBn5Y,KAAKo5Y,wBAAqB,EAC1Bp5Y,KAAK03Y,sBAAmB,EACxB13Y,KAAKq5Y,mBAAgB,EACrBr5Y,KAAKs5Y,iBAAc,EACnBt5Y,KAAK02Y,kBAAe,EACpB12Y,KAAKf,YAAS,EACde,KAAKk5Y,KAAOF,EACZh5Y,KAAKi5Y,aAAeA,EACpBj5Y,KAAK7S,KAAO,KACZ6S,KAAKo3H,QAAU,EACfp3H,KAAKm5Y,gBAAkB,IAAI5B,GAAct4Y,GACzCe,KAAKo5Y,mBAAqB,IAAI7B,GAAct4Y,GAC5Ce,KAAK03Y,iBAAmB,IAAIH,GAAct4Y,GAC1Ce,KAAKq5Y,cAAgBr5Y,KAAKm5Y,gBAAgBt0Z,KAAK+vZ,IAC/C50Y,KAAKs5Y,YAAct5Y,KAAKm5Y,gBACxBn5Y,KAAK7S,KAAO,KACZ6S,KAAK02Y,aAAe,KACpB12Y,KAAKf,OAASA,CAChB,CACA,KAAAsX,GACEvW,KAAK7S,KAAO,KACZ6S,KAAKm5Y,gBAAgB5iY,QACrBvW,KAAKo5Y,mBAAmB7iY,QACxBvW,KAAK03Y,iBAAiBnhY,QACtBvW,KAAKi5Y,aAAa1iY,QAClBvW,KAAKq5Y,cAAgBr5Y,KAAKm5Y,gBAAgBt0Z,KAAK+vZ,IAC/C50Y,KAAKs5Y,YAAct5Y,KAAKm5Y,gBACxBn5Y,KAAK7S,KAAO,KACZ6S,KAAK02Y,aAAe,IACtB,CACA,UAAA6C,GACE,OAAOv5Y,KAAKi5Y,YACd,CACA,UAAAO,CAAWC,GACTz5Y,KAAKi5Y,aAAeQ,CACtB,CACA,MAAA7B,CAAOC,GACL73Y,KAAKs5Y,YAAY1B,OAAOC,EAC1B,CACA,UAAAM,CAAWC,GACTp4Y,KAAKs5Y,YAAYnB,WAAWC,EAC9B,CACA,OAAAsB,CAAQC,GACFA,IAAY35Y,KAAK7S,OAGrB6S,KAAK7S,KAAOwsZ,EACZ35Y,KAAKf,OAAOuB,IAAI,GAAG,IAAM,QAAUm5Y,IACjB,gBAAd35Y,KAAK7S,KACP6S,KAAKs5Y,YAAct5Y,KAAKo5Y,oBAExBp5Y,KAAKs5Y,YAAct5Y,KAAKm5Y,gBACxBn5Y,KAAKs5Y,YAAY/iY,SAED,iBAAdvW,KAAK7S,OACP6S,KAAKm5Y,gBAAgB1B,aAAe,KACpCz3Y,KAAKo5Y,mBAAmB3B,aAAe,MAEzCz3Y,KAAK7S,KAAOwsZ,EACd,CACA,WAAAC,CAAYpD,GACV,IAAK,IAAIj9Z,EAAI,EAAGA,EAAIi9Z,EAAMh9Z,OAAQD,IAChCymB,KAAKs5Y,YAAYrC,WAAWT,EAAMj9Z,IAEpC,MAAMg/B,EAASvY,KAAKs5Y,cAAgBt5Y,KAAKm5Y,gBAAkB,OAAS,WACpEn5Y,KAAKf,OAAOuB,IAAI,GAAG,IAAM+X,EAAS,KAAOvY,KAAKs5Y,YAAYd,gBAAe,KACvD,kBAAdx4Y,KAAK7S,MAA0C,iBAAd6S,KAAK7S,OACxC6S,KAAKf,OAAOuB,IAAI,GAAG,IAAM,cAAgBR,KAAKm5Y,gBAAgBX,gBAAe,KAC7Ex4Y,KAAK65Y,mBAET,CACA,KAAAC,GAEE95Y,KAAKf,OAAOuB,IAAI,EAAG,gCACnBR,KAAK05Y,QAAQ,cACf,CACA,IAAAK,GAEE/5Y,KAAKf,OAAOuB,IAAI,EAAG,kBACD,cAAdR,KAAK7S,OAGT6S,KAAKs5Y,YAAYtC,YACbh3Y,KAAKs5Y,cAAgBt5Y,KAAKm5Y,iBAC5Bn5Y,KAAK65Y,mBAET,CACA,KAAAG,GAEA,CACA,KAAAC,GAEA,CACA,KAAAC,GAEEl6Y,KAAKf,OAAOuB,IAAI,EAAG,6BACnBR,KAAKs5Y,YAAYlC,kBACjBp3Y,KAAK65Y,kBACP,CACA,IAAAM,CAAK7B,GAEHt4Y,KAAKf,OAAOuB,IAAI,EAAG,MAAQ83Y,EAAS,eACpCt4Y,KAAKs5Y,YAAct5Y,KAAKm5Y,gBACxBn5Y,KAAK05Y,QAAQ,gBACb15Y,KAAKs5Y,YAAYjB,cAAcC,EACjC,CACA,KAAA8B,GAEEp6Y,KAAKf,OAAOuB,IAAI,EAAG,kBACnBR,KAAKs5Y,YAAY3B,OAAO,CACtB9B,OAAO,GAEX,CACA,KAAAwE,GAEEr6Y,KAAKf,OAAOuB,IAAI,EAAG,kCACnBR,KAAK05Y,QAAQ,gBACf,CACA,IAAAY,GAEEt6Y,KAAKf,OAAOuB,IAAI,EAAG,MACnBR,KAAK05Y,QAAQ,YACf,CACA,KAAAa,GAEEv6Y,KAAKf,OAAOuB,IAAI,EAAG,OACnBR,KAAK05Y,QAAQ,YACf,CACA,KAAAc,GAEEx6Y,KAAKf,OAAOuB,IAAI,EAAG,gCACnBR,KAAKm5Y,gBAAgB5iY,QACrBvW,KAAK65Y,kBAAiB,EACxB,CACA,IAAAY,GAEEz6Y,KAAKf,OAAOuB,IAAI,EAAG,wBACnBR,KAAKs5Y,YAAYf,SACjBv4Y,KAAK65Y,kBAAiB,EACxB,CACA,KAAAa,GAEE16Y,KAAKf,OAAOuB,IAAI,EAAG,oCACnBR,KAAKo5Y,mBAAmB7iY,OAC1B,CACA,KAAAokY,GAGE,GADA36Y,KAAKf,OAAOuB,IAAI,EAAG,wBACD,gBAAdR,KAAK7S,KAAwB,CAC/B,MAAM89H,EAAMjrH,KAAKm5Y,gBACjBn5Y,KAAKm5Y,gBAAkBn5Y,KAAKo5Y,mBAC5Bp5Y,KAAKo5Y,mBAAqBnuR,EAC1BjrH,KAAKs5Y,YAAct5Y,KAAKo5Y,mBACxBp5Y,KAAKf,OAAOuB,IAAI,GAAG,IAAM,SAAWR,KAAKm5Y,gBAAgBX,kBAC3D,CACAx4Y,KAAK65Y,kBAAiB,EACxB,CACA,IAAAe,CAAKC,GAEH76Y,KAAKf,OAAOuB,IAAI,EAAG,MAAQq6Y,EAAS,kBACpC76Y,KAAKs5Y,YAAYzC,WAAWgE,EAC9B,CACA,QAAAC,CAASC,GAEP,MAAMhF,EAAS,CACbF,OAAO,GAIT,GAFAE,EAAOL,UAAYqF,EAAa,IAAM,EACtChF,EAAOJ,QAAUoF,GAAc,GAC1BhF,EAAOJ,QAKVI,EAAON,WAAa,YALD,CACnB,MAAMuF,EAAarrY,KAAKq2B,MAAM+0W,EAAa,GAAK,GAC1C31J,EAAS,CAAC,QAAS,QAAS,OAAQ,OAAQ,MAAO,SAAU,WACnE2wJ,EAAON,WAAarwJ,EAAO41J,EAC7B,CAGAh7Y,KAAKf,OAAOuB,IAAI,EAAG,WAAagF,KAAKC,UAAUswY,IAC/C/1Y,KAAKs5Y,YAAY3B,OAAO5B,EAC1B,CACA,gBAAA8D,CAAiB5+W,GAAW,GAC1B,MAAMlyC,EAAOiX,KAAKf,OAAOlW,KACZ,OAATA,GAGAiX,KAAKi5Y,eACmB,OAAtBj5Y,KAAK02Y,cAA0B12Y,KAAKm5Y,gBAAgBltX,UAIjDjsB,KAAKm5Y,gBAAgBx/F,OAAO35S,KAAK03Y,oBACpC13Y,KAAKi5Y,aAAagC,OAAOj7Y,KAAK02Y,aAAc3tZ,EAAMiX,KAAK03Y,kBACnDz8W,GAAYj7B,KAAKi5Y,aAAaiC,aAChCl7Y,KAAKi5Y,aAAaiC,cAEpBl7Y,KAAK02Y,aAAe12Y,KAAKm5Y,gBAAgBltX,UAAY,KAAOljC,GAP9DiX,KAAK02Y,aAAe3tZ,EAUtBiX,KAAK03Y,iBAAiBj3U,KAAKzgE,KAAKm5Y,iBAEpC,CACA,cAAAgC,CAAe5ga,GACTylB,KAAKi5Y,eACFj5Y,KAAKm5Y,gBAAgBltX,YACpBjsB,KAAKi5Y,aAAagC,QACpBj7Y,KAAKi5Y,aAAagC,OAAOj7Y,KAAK02Y,aAAcn8Z,EAAGylB,KAAKm5Y,iBAEtDn5Y,KAAK02Y,aAAen8Z,GAG1B,EAKF,MAAM6ga,GACJ,WAAAv5X,CAAY8hB,EAAO03W,EAAMC,GACvBt7Y,KAAK+tJ,cAAW,EAChB/tJ,KAAKu7Y,eAAiB,EACtBv7Y,KAAKw7Y,WAkTA,CACL7ga,EAAG,KACHu3B,EAAG,MAnTHlS,KAAKf,YAAS,EACd,MAAMA,EAASe,KAAKf,OAAS,IAAIk2Y,GACjCn1Y,KAAK+tJ,SAAW,CAAC,KAAM,IAAIgrP,GAAcp1W,EAAO03W,EAAMp8Y,GAAS,IAAI85Y,GAAcp1W,EAAQ,EAAG23W,EAAMr8Y,GACpG,CACA,UAAAs6Y,CAAW1+O,GACT,OAAO76J,KAAK+tJ,SAAS8M,GAAS0+O,YAChC,CACA,UAAAC,CAAW3+O,EAAS4+O,GAClBz5Y,KAAK+tJ,SAAS8M,GAAS2+O,WAAWC,EACpC,CAKA,OAAA9uO,CAAQ5hL,EAAM0yZ,GACZz7Y,KAAKf,OAAOlW,KAAOA,EACnB,IAAK,IAAIxP,EAAI,EAAGA,EAAIkia,EAASjia,OAAQD,GAAK,EAAG,CAC3C,MAAMoB,EAAkB,IAAd8ga,EAASlia,GACb24B,EAAsB,IAAlBupY,EAASlia,EAAI,GACvB,IAAImia,GAAW,EACXC,EAAa,KACjB,GAAU,IAANhha,GAAiB,IAANu3B,EACb,SAEAlS,KAAKf,OAAOuB,IAAI,GAAG,IAAM,IAAM60Y,GAAmB,CAACoG,EAASlia,GAAIkia,EAASlia,EAAI,KAAO,SAAW87Z,GAAmB,CAAC16Z,EAAGu3B,IAAM,MAE9H,MAAMspY,EAAax7Y,KAAKw7Y,WAExB,GADsB7ga,GAAK,IAAQA,GAAK,GACrB,CAEjB,GAAIiha,GAAejha,EAAGu3B,EAAGspY,GAAa,CACpCK,GAAW,KAAM,KAAML,GACvBx7Y,KAAKf,OAAOuB,IAAI,GAAG,IAAM,qBAAuB60Y,GAAmB,CAAC16Z,EAAGu3B,IAAM,iBAC7E,QACF,CACA2pY,GAAWlha,EAAGu3B,EAAGlS,KAAKw7Y,YACtBE,EAAW17Y,KAAK87Y,SAASnha,EAAGu3B,GACvBwpY,IACHA,EAAW17Y,KAAK+7Y,YAAYpha,EAAGu3B,IAE5BwpY,IACHA,EAAW17Y,KAAKg8Y,SAASrha,EAAGu3B,IAEzBwpY,IACHA,EAAW17Y,KAAKi8Y,0BAA0Btha,EAAGu3B,GAEjD,MACE2pY,GAAW,KAAM,KAAML,GAEzB,IAAKE,IACHC,EAAa37Y,KAAKk8Y,WAAWvha,EAAGu3B,GAC5BypY,GAAY,CACd,MAAMQ,EAAWn8Y,KAAKu7Y,eACtB,GAAIY,GAAYA,EAAW,EAAG,CACZn8Y,KAAK+tJ,SAASouP,GACtBvC,YAAY+B,EACtB,MACE37Y,KAAKf,OAAOuB,IAAI,EAAG,mCAEvB,CAEGk7Y,GAAaC,GAChB37Y,KAAKf,OAAOuB,IAAI,GAAG,IAAM,+BAAiC60Y,GAAmB,CAAC16Z,EAAGu3B,IAAM,UAAYmjY,GAAmB,CAACoG,EAASlia,GAAIkia,EAASlia,EAAI,MAErJ,CACF,CAMA,QAAAuia,CAASnha,EAAGu3B,GAGV,MAFqB,KAANv3B,GAAoB,KAANA,GAAoB,KAANA,GAAoB,KAANA,IAAeu3B,GAAK,IAAQA,GAAK,QACrE,KAANv3B,GAAoB,KAANA,IAAeu3B,GAAK,IAAQA,GAAK,IAE5D,OAAO,EAET,MAAMgnY,EAAa,KAANv+Z,GAAoB,KAANA,GAAoB,KAANA,EAAa,EAAI,EACpDkgL,EAAU76J,KAAK+tJ,SAASmrP,GAwC9B,OAvCU,KAANv+Z,GAAoB,KAANA,GAAoB,KAANA,GAAoB,KAANA,EAClC,KAANu3B,EACF2oJ,EAAQi/O,QACO,KAAN5nY,EACT2oJ,EAAQk/O,OACO,KAAN7nY,EACT2oJ,EAAQm/O,QACO,KAAN9nY,EACT2oJ,EAAQo/O,QACO,KAAN/nY,EACT2oJ,EAAQq/O,QACO,KAANhoY,EACT2oJ,EAAQs/O,KAAK,GACE,KAANjoY,EACT2oJ,EAAQs/O,KAAK,GACE,KAANjoY,EACT2oJ,EAAQs/O,KAAK,GACE,KAANjoY,EACT2oJ,EAAQu/O,QACO,KAANloY,EACT2oJ,EAAQw/O,QACO,KAANnoY,EACT2oJ,EAAQy/O,OACO,KAANpoY,EACT2oJ,EAAQ0/O,QACO,KAANroY,EACT2oJ,EAAQ2/O,QACO,KAANtoY,EACT2oJ,EAAQ4/O,OACO,KAANvoY,EACT2oJ,EAAQ6/O,QACO,KAANxoY,GACT2oJ,EAAQ8/O,QAIV9/O,EAAQ+/O,KAAK1oY,EAAI,IAEnBlS,KAAKu7Y,eAAiBrC,GACf,CACT,CAKA,WAAA6C,CAAYpha,EAAGu3B,GACb,IAAIgnY,EAAO,EACX,IAAW,KAANv+Z,GAAoB,KAANA,IAAeu3B,GAAK,IAAQA,GAAK,GAAM,CAMxD,GAJEgnY,EADQ,KAANv+Z,EACK,EAEA,EAELu+Z,IAASl5Y,KAAKu7Y,eAEhB,OADAv7Y,KAAKf,OAAOuB,IAAI,EAAG,uCACZ,EAET,MAAMq6J,EAAU76J,KAAK+tJ,SAASmrP,GAC9B,QAAKr+O,IAGLA,EAAQigP,SAAS5oY,GACjBlS,KAAKf,OAAOuB,IAAI,GAAG,IAAM,WAAa60Y,GAAmB,CAAC16Z,EAAGu3B,IAAM,OAC5D,EACT,CACA,OAAO,CACT,CAMA,QAAA8pY,CAASrha,EAAGu3B,GACV,IAAI44J,EAGJ,MAFenwL,GAAK,IAAQA,GAAK,IAAQA,GAAK,IAAQA,GAAK,KAASu3B,GAAK,IAAQA,GAAK,SACjE,KAANv3B,GAAoB,KAANA,IAAeu3B,GAAK,IAAQA,GAAK,IAE5D,OAAO,EAET,MAAMgnY,EAAOv+Z,GAAK,GAAO,EAAI,EAE3BmwL,EADE54J,GAAK,IAAQA,GAAK,GACL,IAATgnY,EAAapE,GAAWn6Z,GAAKq6Z,GAAWr6Z,GAG/B,IAATu+Z,EAAanE,GAAYp6Z,GAAKs6Z,GAAYt6Z,GAElD,MAAMkgL,EAAU76J,KAAK+tJ,SAASmrP,GAC9B,QAAKr+O,IAGLA,EAAQ+8O,OAAO53Y,KAAKo8Y,aAAatxO,EAAK54J,IACtClS,KAAKu7Y,eAAiBrC,GACf,EACT,CAMA,YAAAkD,CAAatxO,EAAKigL,GAChB,IAAIsxD,EACJ,MAAMxE,EAAU,CACd94M,MAAO,KACP42M,SAAS,EACTsC,OAAQ,KACRvC,WAAW,EACX5qO,IAAKA,GAgBP,OAbEuxO,EADEtxD,EAAO,GACEA,EAAO,GAEPA,EAAO,GAEpB8sD,EAAQnC,UAA+B,KAAP,EAAX2G,GACjBA,GAAY,GACdxE,EAAQ94M,MAAQ,CAAC,QAAS,QAAS,OAAQ,OAAQ,MAAO,SAAU,UAAW,SAASpvL,KAAKq2B,MAAMq2W,EAAW,IACrGA,GAAY,IACrBxE,EAAQlC,SAAU,EAClBkC,EAAQ94M,MAAQ,SAEhB84M,EAAQI,OAA6C,EAApCtoY,KAAKq2B,OAAOq2W,EAAW,IAAQ,GAE3CxE,CACT,CAMA,UAAAqE,CAAWvha,EAAGu3B,GACZ,IAAIoqY,EACAC,EAAY,KACZC,EAAY,KAQhB,GAPI7ha,GAAK,IACP2ha,EAAY,EACZE,EAAY7ha,EAAI,IAEhB2ha,EAAY,EACZE,EAAY7ha,GAEV6ha,GAAa,IAAQA,GAAa,GAAM,CAE1C,IAAIC,EAEFA,EADgB,KAAdD,EACQtqY,EAAI,GACS,KAAdsqY,EACCtqY,EAAI,IAEJA,EAAI,IAEhBlS,KAAKf,OAAOuB,IAAI,GAAG,IAAM,iBAAmBm0Y,GAAe8H,GAAW,gBAAkBH,IACxFC,EAAY,CAACE,EACf,MAAW9ha,GAAK,IAAQA,GAAK,MAC3B4ha,EAAkB,IAANrqY,EAAU,CAACv3B,GAAK,CAACA,EAAGu3B,IAKlC,OAHIqqY,GACFv8Y,KAAKf,OAAOuB,IAAI,GAAG,IAAM,iBAAmB60Y,GAAmBkH,GAAW39Y,KAAK,OAE1E29Y,CACT,CAMA,yBAAAN,CAA0Btha,EAAGu3B,GAG3B,MAFqB,KAANv3B,GAAoB,KAANA,IAAeu3B,GAAK,IAAQA,GAAK,QACzC,KAANv3B,GAAoB,KAANA,IAAeu3B,GAAK,IAAQA,GAAK,IAE5D,OAAO,EAET,IAAIxwB,EACJ,MAAM02Z,EAAU,CAAC,EACP,KAANz9Z,GAAoB,KAANA,GAChB+G,EAAQiuB,KAAKq2B,OAAO9zB,EAAI,IAAQ,GAChCkmY,EAAQxC,WAAaV,GAAiBxzZ,GAClCwwB,EAAI,IAAM,IACZkmY,EAAQxC,WAAawC,EAAQxC,WAAa,UAE7B,KAAN1jY,EACTkmY,EAAQxC,WAAa,eAErBwC,EAAQ3C,WAAa,QACX,KAANvjY,IACFkmY,EAAQ1C,WAAY,IAGxB,MAAMwD,EAAOv+Z,GAAK,GAAO,EAAI,EAG7B,OAFgBqlB,KAAK+tJ,SAASmrP,GACtBf,WAAWC,IACZ,CACT,CAKA,KAAA7hY,GACE,IAAK,IAAIh9B,EAAI,EAAGA,EAAIQ,OAAOiC,KAAKgkB,KAAK+tJ,UAAUv0K,OAAQD,IAAK,CAC1D,MAAMshL,EAAU76J,KAAK+tJ,SAASx0K,GAC1BshL,GACFA,EAAQtkJ,OAEZ,CACAslY,GAAW,KAAM,KAAM77Y,KAAKw7Y,WAC9B,CAKA,cAAAL,CAAe5ga,GACb,IAAK,IAAIhB,EAAI,EAAGA,EAAIymB,KAAK+tJ,SAASv0K,OAAQD,IAAK,CAC7C,MAAMshL,EAAU76J,KAAK+tJ,SAASx0K,GAC1BshL,GACFA,EAAQsgP,eAAe5ga,EAE3B,CACF,EAEF,SAASsha,GAAWlha,EAAGu3B,EAAGspY,GACxBA,EAAW7ga,EAAIA,EACf6ga,EAAWtpY,EAAIA,CACjB,CACA,SAAS0pY,GAAejha,EAAGu3B,EAAGspY,GAC5B,OAAOA,EAAW7ga,IAAMA,GAAK6ga,EAAWtpY,IAAMA,CAChD,CAQA,MAAMwqY,GACJ,WAAA76X,CAAY86X,EAAoBC,GAC9B58Y,KAAK28Y,wBAAqB,EAC1B38Y,KAAK68Y,UAAY,GACjB78Y,KAAK48Y,eAAY,EACjB58Y,KAAKi0C,UAAY,KACjBj0C,KAAK6zC,QAAU,KACf7zC,KAAKuY,OAAS,KACdvY,KAAK28Y,mBAAqBA,EAC1B38Y,KAAK48Y,UAAYA,CACnB,CACA,WAAA1B,GACyB,OAAnBl7Y,KAAKi0C,YAGTj0C,KAAK28Y,mBAAmBG,QAAQ98Y,KAAK48Y,UAAW58Y,KAAKi0C,UAAWj0C,KAAK6zC,QAAS7zC,KAAKuY,OAAQvY,KAAK68Y,WAChG78Y,KAAKi0C,UAAY,KACnB,CACA,MAAAgnW,CAAOhnW,EAAWJ,EAASt7B,IACF,OAAnBvY,KAAKi0C,WAAsBj0C,KAAKi0C,UAAYA,KAC9Cj0C,KAAKi0C,UAAYA,GAEnBj0C,KAAK6zC,QAAUA,EACf7zC,KAAKuY,OAASA,EACdvY,KAAK28Y,mBAAmBI,oBAAoB/8Y,KAAK48Y,UACnD,CACA,KAAArmY,GACEvW,KAAK68Y,UAAY,GACjB78Y,KAAKi0C,UAAY,IACnB,EAmBF,IAAIsxT,GAAS,WACX,GAAoB,MAAhBrhB,GAAwBA,EAAaqhB,OACvC,OAAOv2V,KAAKu2V,OAEd,MAAMy3C,EAAoB,CAAC,GAAI,KAAM,MAC/BC,EAAoB,CAAC,QAAS,SAAU,MAAO,OAAQ,SAC7D,SAASC,EAAe/tJ,EAAS/0Q,GAC/B,GAAqB,kBAAVA,EACT,OAAO,EAGT,IAAKR,MAAMC,QAAQs1Q,GACjB,OAAO,EAGT,MAAMguJ,EAAU/ia,EAAMqsB,cAEtB,SAAK0oP,EAAQ/zQ,QAAQ+ha,IACZA,CAGX,CAIA,SAASC,EAAiBhja,GACxB,OAAO8ia,EAAeD,EAAmB7ia,EAC3C,CACA,SAASomF,EAAOrkE,KAAQzf,GACtB,IAAInD,EAAI,EACR,KAAOA,EAAIomB,UAAUnmB,OAAQD,IAAK,CAChC,MAAM8ja,EAAO19Y,UAAUpmB,GACvB,IAAK,MAAM+lB,KAAK+9Y,EACdlhZ,EAAImD,GAAK+9Y,EAAK/9Y,EAElB,CACA,OAAOnD,CACT,CACA,SAASopW,EAAOtxT,EAAWJ,EAAS5vD,GAClC,MAAMmgX,EAAMpkW,KACNs9Y,EAAU,CACdpsX,YAAY,GAUdkzU,EAAIm5C,cAAe,EAOnB,IAAIC,EAAM,GACNC,GAAe,EACfC,EAAazpW,EACb0pW,EAAW9pW,EACX+pW,EAAQ35Z,EACR45Z,EAAU,KACVC,EAAY,GACZC,GAAe,EACfC,EAAQ,OACRC,EAAa,QACbC,EAAY,GACZC,EAAiB,SACjBC,EAAQ,GACRC,EAAS,SACbtka,OAAOg5C,eAAeqxU,EAAK,KAAM5jS,EAAO,CAAC,EAAG88U,EAAS,CACnDx0Y,IAAK,WACH,OAAO00Y,CACT,EACA/sX,IAAK,SAAUr2C,GACboja,EAAM,GAAKpja,CACb,KAEFL,OAAOg5C,eAAeqxU,EAAK,cAAe5jS,EAAO,CAAC,EAAG88U,EAAS,CAC5Dx0Y,IAAK,WACH,OAAO20Y,CACT,EACAhtX,IAAK,SAAUr2C,GACbqja,IAAiBrja,CACnB,KAEFL,OAAOg5C,eAAeqxU,EAAK,YAAa5jS,EAAO,CAAC,EAAG88U,EAAS,CAC1Dx0Y,IAAK,WACH,OAAO40Y,CACT,EACAjtX,IAAK,SAAUr2C,GACb,GAAqB,kBAAVA,EACT,MAAM,IAAI8nB,UAAU,uCAEtBw7Y,EAAatja,EACb4lB,KAAKu9Y,cAAe,CACtB,KAEFxja,OAAOg5C,eAAeqxU,EAAK,UAAW5jS,EAAO,CAAC,EAAG88U,EAAS,CACxDx0Y,IAAK,WACH,OAAO60Y,CACT,EACAltX,IAAK,SAAUr2C,GACb,GAAqB,kBAAVA,EACT,MAAM,IAAI8nB,UAAU,qCAEtBy7Y,EAAWvja,EACX4lB,KAAKu9Y,cAAe,CACtB,KAEFxja,OAAOg5C,eAAeqxU,EAAK,OAAQ5jS,EAAO,CAAC,EAAG88U,EAAS,CACrDx0Y,IAAK,WACH,OAAO80Y,CACT,EACAntX,IAAK,SAAUr2C,GACbwja,EAAQ,GAAKxja,EACb4lB,KAAKu9Y,cAAe,CACtB,KAIFxja,OAAOg5C,eAAeqxU,EAAK,SAAU5jS,EAAO,CAAC,EAAG88U,EAAS,CACvDx0Y,IAAK,WACH,OAAO+0Y,CACT,EACAptX,IAAK,SAAUr2C,GACbyja,EAAUzja,EACV4lB,KAAKu9Y,cAAe,CACtB,KAEFxja,OAAOg5C,eAAeqxU,EAAK,WAAY5jS,EAAO,CAAC,EAAG88U,EAAS,CACzDx0Y,IAAK,WACH,OAAOg1Y,CACT,EACArtX,IAAK,SAAUr2C,GACb,MAAMkka,EAnHZ,SAA8Blka,GAC5B,OAAO8ia,EAAeF,EAAmB5ia,EAC3C,CAiHsBmka,CAAqBnka,GAErC,IAAgB,IAAZkka,EACF,MAAM,IAAIr0R,YAAY,+CAExB6zR,EAAYQ,EACZt+Y,KAAKu9Y,cAAe,CACtB,KAEFxja,OAAOg5C,eAAeqxU,EAAK,cAAe5jS,EAAO,CAAC,EAAG88U,EAAS,CAC5Dx0Y,IAAK,WACH,OAAOi1Y,CACT,EACAttX,IAAK,SAAUr2C,GACb2ja,IAAiB3ja,EACjB4lB,KAAKu9Y,cAAe,CACtB,KAEFxja,OAAOg5C,eAAeqxU,EAAK,OAAQ5jS,EAAO,CAAC,EAAG88U,EAAS,CACrDx0Y,IAAK,WACH,OAAOk1Y,CACT,EACAvtX,IAAK,SAAUr2C,GACb,GAAqB,kBAAVA,GAAgC,SAAVA,EAC/B,MAAM,IAAI6vI,YAAY,sDAExB+zR,EAAQ5ja,EACR4lB,KAAKu9Y,cAAe,CACtB,KAEFxja,OAAOg5C,eAAeqxU,EAAK,YAAa5jS,EAAO,CAAC,EAAG88U,EAAS,CAC1Dx0Y,IAAK,WACH,OAAOm1Y,CACT,EACAxtX,IAAK,SAAUr2C,GACb,MAAMkka,EAAUlB,EAAiBhja,GACjC,IAAKkka,EACH,MAAM,IAAIr0R,YAAY,+CAExBg0R,EAAaK,EACbt+Y,KAAKu9Y,cAAe,CACtB,KAEFxja,OAAOg5C,eAAeqxU,EAAK,WAAY5jS,EAAO,CAAC,EAAG88U,EAAS,CACzDx0Y,IAAK,WACH,OAAOo1Y,CACT,EACAztX,IAAK,SAAUr2C,GACb,GAAIA,EAAQ,GAAKA,EAAQ,IACvB,MAAM,IAAIspB,MAAM,uCAElBw6Y,EAAY9ja,EACZ4lB,KAAKu9Y,cAAe,CACtB,KAEFxja,OAAOg5C,eAAeqxU,EAAK,gBAAiB5jS,EAAO,CAAC,EAAG88U,EAAS,CAC9Dx0Y,IAAK,WACH,OAAOq1Y,CACT,EACA1tX,IAAK,SAAUr2C,GACb,MAAMkka,EAAUlB,EAAiBhja,GACjC,IAAKkka,EACH,MAAM,IAAIr0R,YAAY,+CAExBk0R,EAAiBG,EACjBt+Y,KAAKu9Y,cAAe,CACtB,KAEFxja,OAAOg5C,eAAeqxU,EAAK,OAAQ5jS,EAAO,CAAC,EAAG88U,EAAS,CACrDx0Y,IAAK,WACH,OAAOs1Y,CACT,EACA3tX,IAAK,SAAUr2C,GACb,GAAIA,EAAQ,GAAKA,EAAQ,IACvB,MAAM,IAAIspB,MAAM,mCAElB06Y,EAAQhka,EACR4lB,KAAKu9Y,cAAe,CACtB,KAEFxja,OAAOg5C,eAAeqxU,EAAK,QAAS5jS,EAAO,CAAC,EAAG88U,EAAS,CACtDx0Y,IAAK,WACH,OAAOu1Y,CACT,EACA5tX,IAAK,SAAUr2C,GACb,MAAMkka,EAAUlB,EAAiBhja,GACjC,IAAKkka,EACH,MAAM,IAAIr0R,YAAY,+CAExBo0R,EAASC,EACTt+Y,KAAKu9Y,cAAe,CACtB,KAQFn5C,EAAIo6C,kBAAe5lZ,CACrB,CAYA,OANA2sW,EAAOvrX,UAAUyka,aAAe,WAG9B,OADezvY,KAAK0vY,OACNC,oBAAoB3vY,KAAMhP,KAAK/b,KAC/C,EAEOshX,CACR,CA1PY,GAgQb,MAAMq5C,GAEJ,MAAAlzX,CAAO9hC,EAAMrJ,GACX,IAAKqJ,EACH,MAAO,GAET,GAAoB,kBAATA,EACT,MAAM,IAAI8Z,MAAM,iCAElB,OAAOupB,mBAAmBrX,mBAAmBhsB,GAC/C,EAIF,SAASi1Z,GAAer6X,GACtB,SAASs6X,EAAep/Z,EAAG4hC,EAAG1mC,EAAGmiB,GAC/B,OAAiB,MAAL,EAAJrd,GAA0B,IAAL,EAAJ4hC,IAAmB,EAAJ1mC,GAAS6Y,WAAWsJ,GAAK,EACnE,CACA,MAAMukB,EAAIkD,EAAMjhB,MAAM,uCACtB,OAAK+d,EAGD7tB,WAAW6tB,EAAE,IAAM,GAGdw9X,EAAex9X,EAAE,GAAIA,EAAE,GAAI,EAAGA,EAAE,IAGlCw9X,EAAex9X,EAAE,GAAIA,EAAE,GAAIA,EAAE,GAAIA,EAAE,IARjC,IASX,CAIA,MAAMy9X,GACJ,WAAAl9X,GACE7hB,KAAK0lD,OAAS3rE,OAAO6yB,OAAO,KAC9B,CAEA,GAAA6jB,CAAIzyB,EAAGiE,GACAjC,KAAK8I,IAAI9K,IAAY,KAANiE,IAClBjC,KAAK0lD,OAAO1nD,GAAKiE,EAErB,CAMA,GAAA6G,CAAI9K,EAAGghZ,EAAMC,GACX,OAAIA,EACKj/Y,KAAKwwB,IAAIxyB,GAAKgC,KAAK0lD,OAAO1nD,GAAKghZ,EAAKC,GAEtCj/Y,KAAKwwB,IAAIxyB,GAAKgC,KAAK0lD,OAAO1nD,GAAKghZ,CACxC,CAEA,GAAAxuX,CAAIxyB,GACF,OAAOA,KAAKgC,KAAK0lD,MACnB,CAEA,GAAA5iE,CAAIkb,EAAGiE,EAAGtnB,GACR,IAAK,IAAIH,EAAI,EAAGA,EAAIG,EAAEnB,SAAUgB,EAC9B,GAAIynB,IAAMtnB,EAAEH,GAAI,CACdwlB,KAAKywB,IAAIzyB,EAAGiE,GACZ,KACF,CAEJ,CAEA,OAAAi9Y,CAAQlhZ,EAAGiE,GACL,UAAU7C,KAAK6C,IAEjBjC,KAAKywB,IAAIzyB,EAAGnB,SAASoF,EAAG,IAE5B,CAEA,OAAAoxK,CAAQr1K,EAAGiE,GACT,GAAI,2BAA2B7C,KAAK6C,GAAI,CACtC,MAAMoxK,EAAU5/K,WAAWwO,GAC3B,GAAIoxK,GAAW,GAAKA,GAAW,IAE7B,OADArzK,KAAKywB,IAAIzyB,EAAGq1K,IACL,CAEX,CACA,OAAO,CACT,EAKF,SAASpuB,GAAazgI,EAAO2D,EAAUg3X,EAAeC,GACpD,MAAMzjR,EAASyjR,EAAa56X,EAAMzgB,MAAMq7Y,GAAc,CAAC56X,GACvD,IAAK,MAAMjrC,KAAKoiJ,EAAQ,CACtB,GAAyB,kBAAdA,EAAOpiJ,GAChB,SAEF,MAAMuqV,EAAKnoM,EAAOpiJ,GAAGwqB,MAAMo7Y,GAC3B,GAAkB,IAAdr7E,EAAGtqV,OACL,SAIF2uC,EAFU27S,EAAG,GACHA,EAAG,GAEf,CACF,CACA,MAAMtwN,GAAW,IAAI+xP,GAAO,EAAG,EAAG,IAG5B5kJ,GAA4B,WAAnBntG,GAAS6rS,MAAqB,SAAW,SACxD,SAASC,GAAS96X,EAAO4/U,EAAKm7C,GAE5B,MAAMC,EAASh7X,EAEf,SAASi7X,IACP,MAAMzqS,EAAK6pS,GAAer6X,GAC1B,GAAW,OAAPwwF,EACF,MAAM,IAAItxG,MAAM,wBAA0B87Y,GAK5C,OADAh7X,EAAQA,EAAMt+B,QAAQ,iBAAkB,IACjC8uH,CACT,CAmEA,SAAS0qS,IACPl7X,EAAQA,EAAMt+B,QAAQ,OAAQ,GAChC,CAMA,GAHAw5Z,IACAt7C,EAAInwT,UAAYwrW,IAChBC,IAC0B,WAAtBl7X,EAAMjhC,MAAM,EAAG,GAEjB,MAAM,IAAImgB,MAAM,qEAAoE87Y,GAEtFh7X,EAAQA,EAAMjhC,MAAM,GACpBm8Z,IACAt7C,EAAIvwT,QAAU4rW,IAGdC,IAjFA,SAA4Bl7X,EAAO4/U,GACjC,MAAMvkG,EAAW,IAAIk/I,GACrB95P,GAAazgI,GAAO,SAAUxmB,EAAGiE,GAC/B,IAAI09Y,EACJ,OAAQ3hZ,GACN,IAAK,SAEH,IAAK,IAAIzkB,EAAIgma,EAAW/la,OAAS,EAAGD,GAAK,EAAGA,IAC1C,GAAIgma,EAAWhma,GAAGsS,KAAOoW,EAAG,CAC1B49P,EAASpvO,IAAIzyB,EAAGuhZ,EAAWhma,GAAG+5K,QAC9B,KACF,CAEF,MACF,IAAK,WACHusG,EAAS/8Q,IAAIkb,EAAGiE,EAAG,CAAC,KAAM,OAC1B,MACF,IAAK,OACH09Y,EAAO19Y,EAAE8B,MAAM,KACf87P,EAASq/I,QAAQlhZ,EAAG2hZ,EAAK,IACrB9/I,EAASxsF,QAAQr1K,EAAG2hZ,EAAK,KAC3B9/I,EAASpvO,IAAI,eAAe,GAE9BovO,EAAS/8Q,IAAIkb,EAAG2hZ,EAAK,GAAI,CAAC,SACN,IAAhBA,EAAKnma,QACPqmR,EAAS/8Q,IAAI,YAAa68Z,EAAK,GAAI,CAAC,QAASh/L,GAAQ,QAEvD,MACF,IAAK,WACHg/L,EAAO19Y,EAAE8B,MAAM,KACf87P,EAASxsF,QAAQr1K,EAAG2hZ,EAAK,IACL,IAAhBA,EAAKnma,QACPqmR,EAAS/8Q,IAAI,gBAAiB68Z,EAAK,GAAI,CAAC,QAASh/L,GAAQ,MAAO,YAAa,aAAc,SAE7F,MACF,IAAK,OACHk/C,EAASxsF,QAAQr1K,EAAGiE,GACpB,MACF,IAAK,QACH49P,EAAS/8Q,IAAIkb,EAAGiE,EAAG,CAAC,QAAS0+M,GAAQ,MAAO,OAAQ,UAG1D,GAAG,IAAK,MAGRyjJ,EAAI9wM,OAASusG,EAAS/2P,IAAI,SAAU,MACpCs7V,EAAIpyL,SAAW6tF,EAAS/2P,IAAI,WAAY,IACxC,IAAI7E,EAAO47P,EAAS/2P,IAAI,OAAQ,QACnB,SAAT7E,IAAsC,IAAnBuvG,GAASvvG,OAE9BA,GAAQ,GAEVmgW,EAAIngW,KAAOA,EACXmgW,EAAIw7C,UAAY//I,EAAS/2P,IAAI,YAAa,SAC1Cs7V,EAAIy7C,YAAchgJ,EAAS/2P,IAAI,eAAe,GAC9Cs7V,EAAIjiX,KAAO09Q,EAAS/2P,IAAI,OAAQ,KAChCs7V,EAAIi7C,MAAQx/I,EAAS/2P,IAAI,QAAS63M,IAClC,IAAInyI,EAAWqxL,EAAS/2P,IAAI,WAAY,QACvB,SAAb0lE,GAA6C,KAAtBglC,GAAShlC,WAElCA,EAAyB,UAAd41R,EAAIi7C,OAAmC,SAAdj7C,EAAIi7C,MAAmB,EAAkB,QAAdj7C,EAAIi7C,OAAiC,UAAdj7C,EAAIi7C,MAAoB,IAAM,IAEtHj7C,EAAI51R,SAAWA,CACjB,CAmBAsxU,CAAmBt7X,EAAO4/U,EAC5B,CACA,SAAS27C,GAAcv7X,GACrB,OAAOA,EAAMt+B,QAAQ,iBAAkB,KACzC,CACA,MAAM85Z,GACJ,WAAAn+X,GACE7hB,KAAKsI,MAAQ,UACbtI,KAAK+xF,OAAS,GACd/xF,KAAK47I,QAAU,IAAIgjQ,GACnB5+Y,KAAKu/Y,WAAa,GAClBv/Y,KAAKokW,IAAM,KACXpkW,KAAKigZ,WAAQ,EACbjgZ,KAAKkgZ,oBAAiB,EACtBlgZ,KAAKmgZ,aAAU,CACjB,CACA,KAAAh9Y,CAAMvZ,GACJ,MAAMwnB,EAAQpR,KAWd,SAASogZ,IACP,IAAIruT,EAAS3gF,EAAM2gF,OACfrsE,EAAM,EAEV,IADAqsE,EAASguT,GAAchuT,GAChBrsE,EAAMqsE,EAAOv4G,QAA0B,OAAhBu4G,EAAOrsE,IAAiC,OAAhBqsE,EAAOrsE,MACzDA,EAEJ,MAAMzhB,EAAO8tF,EAAOxuG,MAAM,EAAGmiC,GAS7B,MAPoB,OAAhBqsE,EAAOrsE,MACPA,EAEgB,OAAhBqsE,EAAOrsE,MACPA,EAEJtU,EAAM2gF,OAASA,EAAOxuG,MAAMmiC,GACrBzhB,CACT,CAvBIra,IAEFwnB,EAAM2gF,QAAU3gF,EAAMwqI,QAAQlwH,OAAO9hC,EAAM,CACzCkqJ,QAAQ,KAoCZ,IACE,IAAI7vI,EAAO,GACX,GAAoB,YAAhBmN,EAAM9I,MAAqB,CAE7B,IAAK,UAAUlJ,KAAKgS,EAAM2gF,QACxB,OAAO/xF,KAETiE,EAAOm8Y,IAGP,MAAM9+X,EAAIrd,EAAKV,MAAM,qCACrB,GAAW,MAAL+d,IAAaA,EAAE,GACnB,MAAM,IAAI5d,MAAM,+BAElB0N,EAAM9I,MAAQ,QAChB,CACA,IAAI+3Y,GAAuB,EAC3B,KAAOjvY,EAAM2gF,QAAQ,CAEnB,IAAK,UAAU3yF,KAAKgS,EAAM2gF,QACxB,OAAO/xF,KAOT,OALKqgZ,EAGHA,GAAuB,EAFvBp8Y,EAAOm8Y,IAIDhvY,EAAM9I,OACZ,IAAK,SAEC,IAAIlJ,KAAK6E,GA1CnBghJ,GA2CoBhhJ,GA3CA,SAAUjG,EAAGiE,GAQjC,GAAG,KAoCegC,IAEVmN,EAAM9I,MAAQ,MAEhB,SACF,IAAK,OAEErE,IACHmN,EAAM9I,MAAQ,MAEhB,SACF,IAAK,KAEH,GAAI,iBAAiBlJ,KAAK6E,GAAO,CAC/BmN,EAAM9I,MAAQ,OACd,KACF,CAEA,IAAKrE,EACH,SAKF,GAHAmN,EAAMgzV,IAAM,IAAImB,GAAO,EAAG,EAAG,IAC7Bn0V,EAAM9I,MAAQ,OAEe,IAAzBrE,EAAK7oB,QAAQ,UAAe,CAC9Bg2B,EAAMgzV,IAAIv4W,GAAKoY,EACf,QACF,CAGF,IAAK,MAEH,IAAKmN,EAAMgzV,IAAK,CACdhzV,EAAM9I,MAAQ,SACd,QACF,CACA,IACEg3Y,GAASr7Y,EAAMmN,EAAMgzV,IAAKhzV,EAAMmuY,WAClC,CAAE,MAAOjla,GAEP82B,EAAMgzV,IAAM,KACZhzV,EAAM9I,MAAQ,SACd,QACF,CACA8I,EAAM9I,MAAQ,UACd,SACF,IAAK,UACH,CACE,MAAMg4Y,GAAwC,IAAzBr8Y,EAAK7oB,QAAQ,UAKlC,IAAK6oB,GAAQq8Y,IAAiBD,GAAuB,GAAO,CAEtDjvY,EAAM6uY,OAAS7uY,EAAMgzV,KACvBhzV,EAAM6uY,MAAM7uY,EAAMgzV,KAEpBhzV,EAAMgzV,IAAM,KACZhzV,EAAM9I,MAAQ,KACd,QACF,CACA,GAAkB,OAAd8I,EAAMgzV,IACR,SAEEhzV,EAAMgzV,IAAIngX,OACZmtB,EAAMgzV,IAAIngX,MAAQ,MAEpBmtB,EAAMgzV,IAAIngX,MAAQggB,CACpB,CACA,SACF,IAAK,SAEEA,IACHmN,EAAM9I,MAAQ,MAGtB,CACF,CAAE,MAAOhuB,GAEa,YAAhB82B,EAAM9I,OAAuB8I,EAAMgzV,KAAOhzV,EAAM6uY,OAClD7uY,EAAM6uY,MAAM7uY,EAAMgzV,KAEpBhzV,EAAMgzV,IAAM,KAGZhzV,EAAM9I,MAAwB,YAAhB8I,EAAM9I,MAAsB,YAAc,QAC1D,CACA,OAAOtI,IACT,CACA,KAAAirF,GACE,MAAM75E,EAAQpR,KACd,IAWE,IAPIoR,EAAMgzV,KAAuB,WAAhBhzV,EAAM9I,SACrB8I,EAAM2gF,QAAU,OAChB3gF,EAAMjO,SAKY,YAAhBiO,EAAM9I,OAAuC,cAAhB8I,EAAM9I,MACrC,MAAM,IAAI5E,MAAM,8BAEpB,CAAE,MAAOppB,GACH82B,EAAM8uY,gBACR9uY,EAAM8uY,eAAe5la,EAEzB,CAIA,OAHI82B,EAAM+uY,SACR/uY,EAAM+uY,UAEDngZ,IACT,EAGF,MAAMugZ,GAAa,mBAGbhgX,GAAa,SAAoBigX,EAAaC,EAAcjyU,EAAW,GAC3E,OAAOgyU,EAAYj9Z,MAAMirF,EAAUA,EAAWiyU,EAAajna,UAAYina,CACzE,EAgBM9iY,GAAO,SAAc15B,GACzB,IAAI67J,EAAQ,KACRvmK,EAAI0K,EAAKzK,OACb,KAAOD,GACLumK,EAAgB,GAARA,EAAa77J,EAAK1I,aAAahC,GAEzC,OAAQumK,IAAU,GAAGhmK,UACvB,EAIA,SAAS4ma,GAAczsW,EAAWJ,EAAS5vD,GACzC,OAAO05B,GAAKs2B,EAAUn6D,YAAc6jC,GAAKk2B,EAAQ/5D,YAAc6jC,GAAK15B,EACtE,CAwBA,SAAS08Z,GAAYC,EAAct5B,EAASu5B,EAAQj+S,EAAI4pP,EAAYs0D,EAAUC,GAC5E,MAAMxvV,EAAS,IAAIyuV,GAGbgB,EAAWz6D,GAAe,IAAIv5P,WAAW4zT,IAAe7tU,OAAO7sF,QAAQq6Z,GAAY,MAAMx8Y,MAAM,MAC/FsgW,EAAO,GACPomC,EAAYnjB,EA1/NpB,SAAoCt6B,EAAUi0D,EAAW,GACvD,OAAOld,GAAoB/2C,EAAU82C,GAAuB,EAAImd,EAClE,CAw/N8BC,CAA2B55B,EAAQt6B,SAAUs6B,EAAQv/B,WAAa,EAC9F,IAGIo5D,EAHAC,EAAU,YACVC,EAAqB,EACrBC,EAAoB,EAEpBC,GAAW,EACfhwV,EAAO0uV,MAAQ,SAAU77C,GAEvB,MAAMo9C,EAASX,EAAOj+S,GACtB,IAAI6+S,EAAYZ,EAAO9zC,SAGvB,MAAM20C,GAAyBL,EAAqB5W,GAAa,IAWjE,GARc,MAAV+W,GAAkBA,EAAOG,WACD/oZ,IAAtB0oZ,EAEFG,EAAYZ,EAAO9zC,SAAWy0C,EAAOtmY,MA/CrB,SAAyB2lY,EAAQj+S,EAAIgpS,GAC3D,IAAI4V,EAASX,EAAOj+S,GAChBg/S,EAASf,EAAOW,EAAOI,QAI3B,IAAKA,IAAWA,EAAOD,KAAOH,EAAOG,IAGnC,OAFAd,EAAO9zC,SAAW8zC,EAAOgB,mBAAqBL,EAAOtmY,WACrDsmY,EAAOG,KAAM,GAMf,KAA6B,OAArBG,EAAUF,IAAmBE,EAAQH,KAAK,CAChD,IAAIG,EACJjB,EAAO9zC,UAAYy0C,EAAOtmY,MAAQ0mY,EAAO1mY,MACzCsmY,EAAOG,KAAM,EACbH,EAASI,EACTA,EAASf,EAAOW,EAAOI,OACzB,CACAf,EAAOgB,mBAAqBjW,CAC9B,CA2BQmW,CAAgBlB,EAAQj+S,EAAI8+S,IAG5BA,EAAuB,CACzB,IAAKp6B,EAEH,YADA65B,EAAe,IAAIz9Y,MAAM,mCAI3B+9Y,EAAYC,EAAwBb,EAAOgB,kBAC7C,CACA,MAAMn3Z,EAAW05W,EAAIvwT,QAAUuwT,EAAInwT,UAC7BA,EAAYqxV,GAA+D,KAAjDlhC,EAAInwT,UAAYwtW,EAAYH,GAAyC,IAAb90D,GAAsB,IAC9G4X,EAAInwT,UAAYtkC,KAAKhT,IAAIs3C,EAAW,GACpCmwT,EAAIvwT,QAAUlkC,KAAKhT,IAAIs3C,EAAYvpD,EAAU,GAG7C,MAAMzG,EAAOmgX,EAAIngX,KAAK8uF,OAGtBqxR,EAAIngX,KAAOgpC,mBAAmBrX,mBAAmB3xB,IAG5CmgX,EAAIv4W,KACPu4W,EAAIv4W,GAAK60Z,GAAct8C,EAAInwT,UAAWmwT,EAAIvwT,QAAS5vD,IAEjDmgX,EAAIvwT,QAAU,GAChBwwT,EAAKhpX,KAAK+oX,EAEd,EACA7yS,EAAO2uV,eAAiB,SAAUx8Z,GAChCy9Z,EAAez9Z,CACjB,EACA6tE,EAAO4uV,QAAU,WACXgB,EACFJ,EAAcI,GAGhBL,EAASz8C,EACX,EAGA28C,EAASp+Z,SAAQqhB,IACf,GAAIs9Y,EAAU,CAEZ,GAAIhhX,GAAWt8B,EAAM,oBAAqB,CAExCs9Y,GAAW,EAEXt9Y,EAAK1gB,MAAM,IAAIwgB,MAAM,KAAKnhB,SAAQie,IAC5B0/B,GAAW1/B,EAAW,UACxBugZ,EAAUvgZ,EAAUtd,MAAM,GACjBg9C,GAAW1/B,EAAW,aAC/BwgZ,EAAqBxkZ,SAASgE,EAAUtd,MAAM,IAChD,IAEF,IAEE+9Z,EAxIe,SAA0B/uV,GACjD,IAAIyiD,EAAKn4G,SAAS01D,EAAWhvE,OAAO,IACpC,MAAMy+Z,EAAOnlZ,SAAS01D,EAAWhvE,OAAO,GAAI,IACtC0+Z,EAAOplZ,SAAS01D,EAAWhvE,OAAO,GAAI,IACtC4F,EAAQopE,EAAW/4E,OAAS,EAAIqjB,SAAS01D,EAAW/2E,UAAU,EAAG+2E,EAAWn3E,QAAQ,OAAS,EACnG,IAAK8+V,EAAellO,KAAQklO,EAAe8nE,KAAU9nE,EAAe+nE,KAAU/nE,EAAe/wV,GAC3F,MAAMua,MAAM,oCAAoC6uD,KAKlD,OAHAyiD,GAAM,IAAOgtS,EACbhtS,GAAM,IAAYitS,EAClBjtS,GAAM,KAAiB7rH,EAChB6rH,CACT,CA4H8BktS,CAAiBd,GAAW,GAClD,CAAE,MAAO19Z,GACPy9Z,EAAez9Z,CACjB,CAEA,MACF,CAAoB,KAATugB,IACTs9Y,GAAW,EAEf,CAEAhwV,EAAOpuD,MAAMc,EAAO,KAAK,IAE3BstD,EAAO05B,OACT,CAEA,MAAMk3T,GAAc,iBAGdC,GAAa,8CAGbC,GAAkB,kCAClBC,GAAuB,CAC3B7tZ,KAAM,QACNksN,OAAQ,SACRtoN,MAAO,MACP6iB,MAAO,QACPC,IAAK,OAEP,SAASonY,GAAW5tY,EAAS2yW,EAASw5B,EAAUC,GAC9C,MAAMp+U,EAAU8kR,GAAQ,IAAIz6P,WAAWr4E,GAAU,CAAC,SAClD,GAAuB,IAAnBguD,EAAQnpF,OAEV,YADAuna,EAAc,IAAIr9Y,MAAM,+BAG1B,MAAM8+Y,EAAW7/U,EAAQ7kF,KAAIyiZ,GAAQh6C,GAAeg6C,KAC9CkiB,EAnnOR,SAA8Bz1D,EAAUg3C,EAAWid,EAAW,EAAG76W,GAAQ,GACvE,OAAO29V,GAAoB/2C,EAAUg3C,EAAW,EAAIid,EAAU76W,EAChE,CAinOmBs8W,CAAqBp7B,EAAQt6B,SAAU,EAAGs6B,EAAQv/B,WACnE,IACEy6D,EAAS5/Z,SAAQ+/Z,GAAQ7B,EAK7B,SAAmB6B,EAAMF,GACvB,MACMG,GADS,IAAIhsU,WACGD,gBAAgBgsU,EAAM,YACtCrmT,EAAKsmT,EAAO1na,qBAAqB,MAAM,GAC7C,IAAKohH,EACH,MAAM,IAAI54F,MAAM,gBAElB,MAAMm/Y,EAAkB,CACtBr4C,UAAW,GACXs4C,aAAc,EACdC,oBAAqB,EACrBC,SAAU,GAENC,EAAWlpa,OAAOiC,KAAK6ma,GAAiBjhX,QAAO,CAAC/jD,EAAQ3D,KAC5D2D,EAAO3D,GAAOoiH,EAAG2yB,aAAa,OAAO/0I,MAAU2oa,EAAgB3oa,GACxD2D,IACN,CAAC,GACEk1F,EAAwC,aAAjCupB,EAAG2yB,aAAa,aACvBi0R,EAAgBC,GAAuBC,GAAqB9mT,EAAI,UAAW,UAC3E+mT,EAAiBF,GAAuBC,GAAqB9mT,EAAI,SAAU,WAC3EgnT,EAAcF,GAAqB9mT,EAAI,OAAQ,WACrD,MAAO,GAAGx+G,IAAI3D,KAAKmpa,GAAaC,IAC9B,MAAMC,EAAUC,GAAeF,EAAYxwU,GAC3C,IAAKywU,IAAYD,EAAWG,aAAa,SACvC,OAAO,KAET,MAAMzvW,EAAY0vW,GAAcJ,EAAWt0R,aAAa,SAAUg0R,GAC5Dv4Z,EAAWi5Z,GAAcJ,EAAWt0R,aAAa,OAAQg0R,GAC/D,IAAIpvW,EAAU8vW,GAAcJ,EAAWt0R,aAAa,OAAQg0R,GAC5D,GAAkB,OAAdhvW,EACF,MAAM2vW,GAAsBL,GAE9B,GAAgB,OAAZ1vW,EAAkB,CACpB,GAAiB,OAAbnpD,EACF,MAAMk5Z,GAAsBL,GAE9B1vW,EAAUI,EAAYvpD,CACxB,CACA,MAAM05W,EAAM,IAAImB,GAAOtxT,EAAYwuW,EAAU5uW,EAAU4uW,EAAUe,GACjEp/C,EAAIv4W,GAAK60Z,GAAct8C,EAAInwT,UAAWmwT,EAAIvwT,QAASuwT,EAAIngX,MACvD,MAIM8xZ,EA8CV,SAAuBziP,EAAQz2K,EAAOqma,GACpC,MAAMW,EAAQ,oCACd,IAAIC,EAAc,KAClB,MAAMC,EAAkB,CAAC,eAAgB,YAAa,QAAS,kBAAmB,WAAY,cAQxFC,EAA4B,MAAV1wP,GAAkBA,EAAOowP,aAAa,SAAWpwP,EAAOrkC,aAAa,SAAW,KACpG+0R,GAAmBd,EAAc/pa,eAAe6qa,KAClDF,EAAcZ,EAAcc,IAE9B,OAAOD,EAAgBniX,QAAO,CAACm0W,EAAQnxZ,KACrC,MAAMxK,EAAQ6pa,GAAepna,EAAOgna,EAAOj/Z,IAASq/Z,GAAe3wP,EAAQuwP,EAAOj/Z,IAASq/Z,GAAeH,EAAaD,EAAOj/Z,GAI9H,OAHIxK,IACF27Z,EAAOnxZ,GAAQxK,GAEV27Z,CAAM,GACZ,CAAC,EACN,CApEmBmO,CAJAb,EAAeE,EAAWt0R,aAAa,WACxCi0R,EAAcK,EAAWt0R,aAAa,UAGRi0R,IACtC,UACJ/zU,GACE4mU,EACJ,GAAI5mU,EAAW,CAEb,MAAMywU,EAAY0C,GAAqBnzU,GACnCywU,IACFx7C,EAAIw7C,UAAYA,GAElBx7C,EAAIi7C,MAAQlwU,CACd,CAEA,OADAtvE,EAASukW,EAAK2xC,GACP3xC,CAAG,IACTpgW,QAAOogW,GAAe,OAARA,GACnB,CAhEsC+/C,CAAUxB,EAAMF,KACpD,CAAE,MAAO/+Z,GACPq9Z,EAAcr9Z,EAChB,CACF,CA6DA,SAAS0/Z,GAAqB3nN,EAAa2oN,EAAY/rG,GACrD,MAAM75O,EAASi9H,EAAYvgN,qBAAqBkpa,GAAY,GAC5D,OAAI5lV,EACK,GAAGj7E,MAAMpJ,KAAKqkF,EAAO5hD,iBAAiBy7R,IAExC,EACT,CACA,SAAS8qG,GAAuBkB,GAC9B,OAAOA,EAAeziX,QAAO,CAAC0iX,EAAMtmV,KAClC,MAAMnyE,EAAKmyE,EAAQixD,aAAa,UAIhC,OAHIpjI,IACFy4Z,EAAKz4Z,GAAMmyE,GAENsmV,CAAI,GACV,CAAC,EACN,CACA,SAASb,GAAezlV,EAAS+U,GAC/B,MAAO,GAAGxvF,MAAMpJ,KAAK6jF,EAAQlhD,YAAY8kB,QAAO,CAACngC,EAAK28D,EAAM7kF,KAC1D,IAAIgra,EACJ,MAAsB,OAAlBnmV,EAAKga,UAAqB7+F,EACrBkoB,EAAM,KAE6B,OAAvC8iZ,EAAmBnmV,EAAKthD,aAAuBynY,EAAiB/qa,OAC5Diqa,GAAerlV,EAAM2U,GACnBA,EACFtxE,EAAM28D,EAAK3hD,YAAYs2D,OAAO7sF,QAAQ,OAAQ,KAEhDub,EAAM28D,EAAK3hD,WAAW,GAC5B,GACL,CAwBA,SAASwnY,GAAejmV,EAAS+2C,EAAInwH,GACnC,OAAKo5E,GAGEA,EAAQwmV,eAAezvS,EAAInwH,GAAQo5E,EAAQimV,eAAelvS,EAAInwH,GAF5D,IAGX,CACA,SAASg/Z,GAAsBxlV,GAC7B,OAAO,IAAI16D,MAAM,kCAAkC06D,IACrD,CACA,SAASulV,GAAcc,EAAoBxB,GACzC,IAAKwB,EACH,OAAO,KAET,IAAIx3W,EAAU4xW,GAAe4F,GAQ7B,OAPgB,OAAZx3W,IACEm1W,GAAWhjZ,KAAKqlZ,GAClBx3W,EAON,SAAwCw3W,EAAoBxB,GAC1D,MAAM3hY,EAAI8gY,GAAWt+Y,KAAK2gZ,GACpB9/G,GAAiB,EAAPrjR,EAAE,KAAkB,EAAPA,EAAE,IAAU2hY,EAASH,aAClD,OAAoB,MAAL,EAAPxhY,EAAE,IAA8B,IAAL,EAAPA,EAAE,KAAuB,EAAPA,EAAE,IAAUqjR,EAASs+G,EAASz4C,SAC9E,CAXgBk6C,CAA+BD,EAAoBxB,GACpDZ,GAAgBjjZ,KAAKqlZ,KAC9Bx3W,EAUN,SAAwBw3W,EAAoBxB,GAC1C,MAAM3hY,EAAI+gY,GAAgBv+Y,KAAK2gZ,GACzBrqa,EAAQwoB,OAAO0e,EAAE,IAEvB,OADaA,EAAE,IAEb,IAAK,IACH,OAAe,KAARlnC,EACT,IAAK,IACH,OAAe,GAARA,EACT,IAAK,KACH,OAAe,IAARA,EACT,IAAK,IACH,OAAOA,EAAQ6oa,EAASz4C,UAC1B,IAAK,IACH,OAAOpwX,EAAQ6oa,EAASD,SAE5B,OAAO5oa,CACT,CA3BgBuqa,CAAeF,EAAoBxB,KAG1Ch2W,CACT,CAyoBA,SAAS23W,GAAuCvzR,GAC9C,OAAIA,EAAMupO,iBACJ,8BAA8Bx7V,KAAKiyH,EAAMupO,kBAAoB,8BAA8Bx7V,KAAKiyH,EAAMupO,iBACjG,WAGJ,WACT,CACA,SAASiqD,GAAqBC,EAAYC,GACxC,QAASD,GAAcA,EAAW30Z,OAASy0Z,GAAuCG,IAAkBtR,GAA8BsR,EAAeD,EACnJ,CAgBA,MAAME,GACJ,WAAAnjY,CAAYk9U,GACV/+V,KAAK++V,SAAM,EACX/+V,KAAKilZ,sBAAmB,EACxBjlZ,KAAKklZ,gBAAa,EAClBllZ,KAAK+0N,WAAQ,EACb/0N,KAAKmlZ,sBAAmB,EACxBnlZ,KAAKgwO,WAAQ,EACbhwO,KAAKolZ,gBAAa,EAClBplZ,KAAKqlZ,sBAAmB,EACxBrlZ,KAAK++V,IAAMA,EACX/+V,KAAKilZ,iBAAmBriZ,OAAO63R,kBAC/Bz6R,KAAKklZ,YAAc,EACnBllZ,KAAK+0N,MAAQ,KACb/0N,KAAKmlZ,iBAAmB,GACxBnlZ,KAAKgwO,WAAQp3O,EACboH,KAAKolZ,WAAa,KAClBplZ,KAAKi/V,mBACP,CACA,mBAAAqmD,CAAoBD,GAClBrlZ,KAAKqlZ,iBAAmBA,CAC1B,CACA,OAAAr6Q,GACMhrI,KAAK++V,KACP/+V,KAAKulZ,qBAEHvlZ,KAAKgwO,OACPhwO,KAAKwlZ,cAEPxlZ,KAAK+0N,MAAQ,KACb/0N,KAAKolZ,WAAa,KAElBplZ,KAAK++V,IAAM/+V,KAAKqlZ,iBAAmB,IACrC,CACA,iBAAApmD,GACE,MAAM,IACJF,GACE/+V,KACJ++V,EAAItsU,GAAG2iL,EAAOqwM,uBAAwBzlZ,KAAK0lZ,sBAAuB1lZ,MAClE++V,EAAItsU,GAAG2iL,EAAOuwM,gBAAiB3lZ,KAAK4lZ,iBAAkB5lZ,MACtD++V,EAAItsU,GAAG2iL,EAAOywM,gBAAiB7lZ,KAAK8lZ,iBAAkB9lZ,MACtD++V,EAAItsU,GAAG2iL,EAAO2wM,eAAgB/lZ,KAAKgmZ,gBAAiBhmZ,MACpD++V,EAAItsU,GAAG2iL,EAAO6wM,cAAejmZ,KAAKkmZ,eAAgBlmZ,MAClD++V,EAAItsU,GAAG2iL,EAAOgxJ,gBAAiBpmW,KAAKqmW,iBAAkBrmW,KACxD,CACA,kBAAAulZ,GACE,MAAM,IACJxmD,GACE/+V,KACJ++V,EAAIzqN,IAAI8gE,EAAOqwM,uBAAwBzlZ,KAAK0lZ,sBAAuB1lZ,MACnE++V,EAAIzqN,IAAI8gE,EAAOuwM,gBAAiB3lZ,KAAK4lZ,iBAAkB5lZ,MACvD++V,EAAIzqN,IAAI8gE,EAAOywM,gBAAiB7lZ,KAAK8lZ,iBAAkB9lZ,MACvD++V,EAAIzqN,IAAI8gE,EAAO2wM,eAAgB/lZ,KAAKgmZ,gBAAiBhmZ,MACrD++V,EAAIzqN,IAAI8gE,EAAO6wM,cAAejmZ,KAAKkmZ,eAAgBlmZ,MACnD++V,EAAIzqN,IAAI8gE,EAAOgxJ,gBAAiBpmW,KAAKqmW,iBAAkBrmW,KACzD,CACA,qBAAA0lZ,CAAsBlha,EAAOoF,GAE3B,MAAMs5O,EAAQljO,KAAK++V,IAAI/F,OAAOpvW,EAAKu8Z,cAC/BnmZ,KAAKomZ,eAAeljL,IACtBljO,KAAKmlZ,iBAAiB9pa,KAAK,CACzBg+W,QAASn2H,EAAMm2H,QACfj8W,OAAQ8lP,EAAM9lP,OACdD,MAAO+lP,EAAM/lP,OAGnB,CACA,gBAAAyoa,CAAiBpha,EAAOoF,GACtBoW,KAAK+0N,MAAQnrO,EAAKmrO,iBAAiBsxL,iBAAmBz8Z,EAAKmrO,MAAQ,KACnE/0N,KAAKolZ,WAAa,KACdplZ,KAAKgwO,OAAShwO,KAAK++V,IAAI/F,OAAOx/W,QAChCwmB,KAAKsmZ,kBAET,CACA,gBAAAR,CAAiBtha,EAAOoF,GACtB,MAAMm1W,EAAM/+V,KAAK++V,IACjB/+V,KAAKmlZ,iBAAmB,GACxBnlZ,KAAKklZ,WAAat7Z,EAAKs7Z,WACnBnmD,EAAInsV,OAAO2zY,sBAAwB38Z,EAAK82N,OAE1C1gN,KAAKwmZ,cAET,CACA,eAAAR,CAAgBxha,EAAOoF,GACjBoW,KAAKgwO,OAASkqG,EAAel6U,KAAKilZ,mBACpCjlZ,KAAKsmZ,kBAET,CAIA,cAAAJ,CAAe1ha,EAAOoF,GACRoW,KAAK++V,IACTnsV,OAAO2zY,sBAAwB38Z,EAAK82N,OAE1C1gN,KAAKwmZ,cAET,CACA,gBAAAngD,GACErmW,KAAKwlZ,aACP,CACA,gBAAAc,GACE,GAAItmZ,KAAK+0N,MAAO,CACd,GAAI/0N,KAAKi9M,aAAe,GAAKj9M,KAAKg9M,YAAc,EAE9C,YADAh9M,KAAKolZ,WAAa,MAGpB,MAAMpsD,EAASh5V,KAAK++V,IAAI/F,OACxB,GAAIA,EAAOx/W,OAAQ,CACjB,MAAMulX,EAAM/+V,KAAK++V,IACX0nD,EAAWzmZ,KAAK0mZ,YAAY1tD,EAAOx/W,OAAS,GAC9Cita,IAAazmZ,KAAKilZ,kBACpBhmZ,EAAOuB,IAAI,+BAA+BimZ,MAAaztD,EAAOytD,GAAUrpa,WAAW47W,EAAOytD,GAAUptD,qBAAqBr5V,KAAKg9M,cAAch9M,KAAKi9M,eAEnJ8hJ,EAAIkmD,iBAAmBwB,EACnB1nD,EAAIkmD,iBAAmBjlZ,KAAKilZ,kBAAoBjlZ,KAAKqlZ,kBAGvDrlZ,KAAKqlZ,iBAAiBsB,kBAExB3mZ,KAAKilZ,iBAAmBlmD,EAAIkmD,gBAC9B,CACF,CACF,CAKA,WAAAyB,CAAYE,GACV,MAAM5tD,EAASh5V,KAAK++V,IAAI/F,OACxB,IAAKA,EAAOx/W,OACV,OAAQ,EAEV,MAAMqta,EAAc7tD,EAAOh1V,QAAO,CAACk/N,EAAOxhP,IAAUse,KAAKomZ,eAAeljL,IAAUxhP,GAASkla,IAE3F,OADA5mZ,KAAKolZ,WAAa,KACXJ,GAAmB8B,uBAAuBD,EAAa7mZ,KAAKg9M,WAAYh9M,KAAKi9M,YACtF,CACA,YAAAupM,GACMxmZ,KAAKgwO,QAIThwO,KAAKilZ,iBAAmBriZ,OAAO63R,kBAC/BzrR,KAAKm8H,cAAcnrI,KAAKgwO,OACxBhwO,KAAKgwO,MAAQhhO,KAAKi8H,YAAYjrI,KAAKsmZ,iBAAiB5lZ,KAAKV,MAAO,KAChEA,KAAKsmZ,mBACP,CACA,WAAAd,GACExlZ,KAAKmlZ,iBAAmB,GACxBnlZ,KAAKklZ,YAAc,EACnBllZ,KAAKilZ,iBAAmBriZ,OAAO63R,kBAC3Bz6R,KAAKgwO,QACPhhO,KAAKm8H,cAAcnrI,KAAKgwO,OACxBhwO,KAAKgwO,WAAQp3O,EAEjB,CACA,aAAAmuZ,GACE,GAAI/mZ,KAAKolZ,WACP,OAAOplZ,KAAKolZ,WAEd,MAAMrwL,EAAQ/0N,KAAK+0N,MACbiyL,EAAa,CACjB7pa,MAAO,EACPC,OAAQ,GAEV,GAAI23O,EAAO,CACT,MAAMqwL,EAAarwL,EAAMz8N,wBACzB0uZ,EAAW7pa,MAAQioa,EAAWjoa,MAC9B6pa,EAAW5pa,OAASgoa,EAAWhoa,OAC1B4pa,EAAW7pa,OAAU6pa,EAAW5pa,SAGnC4pa,EAAW7pa,MAAQioa,EAAW/sZ,MAAQ+sZ,EAAW3wZ,MAAQsgO,EAAM53O,OAAS,EACxE6pa,EAAW5pa,OAASgoa,EAAWhtZ,OAASgtZ,EAAW5ja,KAAOuzO,EAAM33O,QAAU,EAE9E,CAEA,OADA4iB,KAAKolZ,WAAa4B,EACXA,CACT,CACA,cAAIhqM,GACF,OAAOh9M,KAAK+mZ,gBAAgB5pa,MAAQ6iB,KAAKinZ,kBAC3C,CACA,eAAIhqM,GACF,OAAOj9M,KAAK+mZ,gBAAgB3pa,OAAS4iB,KAAKinZ,kBAC5C,CACA,sBAAIA,GACF,IAAI5tB,EAAa,EACjB,IAAKr5X,KAAK++V,IAAInsV,OAAOs0Y,uBACnB,IACE7tB,EAAarqX,KAAKg/D,gBACpB,CAAE,MAAO1zF,GAET,CAEF,OAAO++Y,CACT,CACA,cAAA+sB,CAAeljL,GAEb,OADyBljO,KAAKmlZ,iBACLnsX,MAAKmuX,GACrBjkL,EAAMm2H,UAAY8tD,EAAgB9tD,SAAWn2H,EAAM/lP,QAAUgqa,EAAgBhqa,OAAS+lP,EAAM9lP,SAAW+pa,EAAgB/pa,QAElI,CACA,6BAAO0pa,CAAuB9tD,EAAQ77W,EAAOC,GAC3C,GAAgB,MAAV47W,IAAkBA,EAAOx/W,OAC7B,OAAQ,EAcV,IAAI4ta,EAAgBpuD,EAAOx/W,OAAS,EAEpC,MAAM6ta,EAAa13Y,KAAKhT,IAAIxf,EAAOC,GACnC,IAAK,IAAI7D,EAAI,EAAGA,EAAIy/W,EAAOx/W,OAAQD,GAAK,EAAG,CACzC,MAAM2pP,EAAQ81H,EAAOz/W,GACrB,IAAK2pP,EAAM/lP,OAASkqa,GAAcnkL,EAAM9lP,QAAUiqa,KAdvBC,EAc0DpkL,IAdhDqkL,EAcuDvuD,EAAOz/W,EAAI,KAVhG+ta,EAASnqa,QAAUoqa,EAAUpqa,OAASmqa,EAASlqa,SAAWmqa,EAAUnqa,QAUiC,CAC1Ggqa,EAAgB7ta,EAChB,KACF,CACF,CAlB4B,IAAC+ta,EAAUC,EAmBvC,OAAOH,CACT,EAgGF,MAAMI,GAAgB,QAQtB,MAAMC,GACJ,WAAA5lY,CAAYk9U,GACV/+V,KAAK++V,SAAM,EACX/+V,KAAK4S,YAAS,EACd5S,KAAK+0N,MAAQ,KACb/0N,KAAK0nZ,iBAAmB,KACxB1nZ,KAAK2nZ,wBAA0B,CAAC,EAChC3nZ,KAAK4nZ,4BAA8B,EACnC5nZ,KAAK6nZ,iBAAmB,GACxB7nZ,KAAK8nZ,yBAA2B,CAAC,EACjC9nZ,KAAK+nZ,kBAAoBN,GAAcO,kBAAoB,CAACP,GAAcO,mBAAqB,GAC/FhoZ,KAAKioZ,iBAAmBjoZ,KAAKkoZ,kBAAkBxnZ,KAAKV,MACpDA,KAAKmoZ,gBAAkBnoZ,KAAKooZ,iBAAiB1nZ,KAAKV,MAClDA,KAAKK,MAAQpB,EAAOoB,MAAMK,KAAKzB,EAAQuoZ,IACvCxnZ,KAAKQ,IAAMvB,EAAOuB,IAAIE,KAAKzB,EAAQuoZ,IACnCxnZ,KAAK0N,KAAOzO,EAAOyO,KAAKhN,KAAKzB,EAAQuoZ,IACrCxnZ,KAAKtc,MAAQub,EAAOvb,MAAMgd,KAAKzB,EAAQuoZ,IACvCxnZ,KAAK++V,IAAMA,EACX/+V,KAAK4S,OAASmsV,EAAInsV,OAClB5S,KAAKi/V,mBACP,CACA,OAAAj0N,GACEhrI,KAAK8/V,sBACL9/V,KAAKqoZ,kBAEL,MAAMz1Y,EAAS5S,KAAK4S,OACpBA,EAAO01Y,gCAAkC,KACzC11Y,EAAO21Y,gBAAkB31Y,EAAO41Y,6BAA0B5vZ,EAC1Dga,EAAOoyU,WAAapyU,EAAO61Y,iBAAmB,CAAC,EAE/CzoZ,KAAK++V,IAAM/+V,KAAKioZ,iBAAmBjoZ,KAAKmoZ,gBAAkBnoZ,KAAK8nZ,yBAA2B,KAE1F9nZ,KAAK4S,OAAS,IAChB,CACA,iBAAAqsV,GACEj/V,KAAK++V,IAAItsU,GAAG2iL,EAAO8wJ,eAAgBlmW,KAAKmmW,gBAAiBnmW,MACzDA,KAAK++V,IAAItsU,GAAG2iL,EAAOszM,eAAgB1oZ,KAAKqoZ,gBAAiBroZ,MACzDA,KAAK++V,IAAItsU,GAAG2iL,EAAOkqJ,iBAAkBt/V,KAAKu/V,kBAAmBv/V,MAC7DA,KAAK++V,IAAItsU,GAAG2iL,EAAOotJ,gBAAiBxiW,KAAKynX,iBAAkBznX,KAC7D,CACA,mBAAA8/V,GACE9/V,KAAK++V,IAAIzqN,IAAI8gE,EAAO8wJ,eAAgBlmW,KAAKmmW,gBAAiBnmW,MAC1DA,KAAK++V,IAAIzqN,IAAI8gE,EAAOszM,eAAgB1oZ,KAAKqoZ,gBAAiBroZ,MAC1DA,KAAK++V,IAAIzqN,IAAI8gE,EAAOkqJ,iBAAkBt/V,KAAKu/V,kBAAmBv/V,MAC9DA,KAAK++V,IAAIzqN,IAAI8gE,EAAOotJ,gBAAiBxiW,KAAKynX,iBAAkBznX,KAC9D,CACA,mBAAA2oZ,CAAoB7jE,GAClB,MAAM,WACJE,EAAU,mBACVC,GACEjlV,KAAK4S,OACHg2Y,EAAyB5jE,EAAWF,GAC1C,GAAI8jE,EACF,OAAOA,EAAuBC,WAIhC,GAAI/jE,IAAcX,EAAWI,UAAYU,EACvC,OAAOA,EAET,MAAM,IAAIvhV,MAAM,oDAAoDohV,KACtE,CACA,uBAAAgkE,CAAwBhkE,GACtB,MAAM,WACJE,GACEhlV,KAAK4S,OACHg2Y,EAAyB5jE,EAAWF,GAC1C,GAAI8jE,EACF,OAAOA,EAAuBG,qBAE9B/oZ,KAAKQ,IAAI,+CAA+CskV,MAE5D,CACA,sBAAAkkE,CAAuB9jE,GACrB,MAAM8T,EAASh5V,KAAK++V,IAAI/F,OAClBiwD,EAAc,CAAC7ua,EAAOb,EAAGoB,MAAQP,GAASO,EAAES,QAAQhB,KAAWb,EAC/D68X,EAAcpd,EAAOl7W,KAAIolP,GAASA,EAAMm3H,aAAYr2V,OAAOilZ,GAC3D9yC,EAAcnd,EAAOl7W,KAAIolP,GAASA,EAAMs0H,aAAYxzV,OAAOilZ,GAIjE,OAHI7yC,EAAY58X,OAAS28X,EAAY38X,SAAW,GAC9C28X,EAAY96X,KAAK,eAEZ,IAAI8jC,SAAQ,CAACC,EAASC,KAC3B,MAAMgjG,EAAU6mS,IACd,MAAMpkE,EAAYokE,EAAWjkZ,QAC7BjF,KAAKmpZ,oBAAoBrkE,EAAWsxB,EAAaD,GAAa9nW,MAAK+6Y,GAAahqY,EAAQ,CACtF0lU,YACAskE,gBACEhhY,OAAM1kC,IACJwla,EAAW1va,OACb6oI,EAAQ6mS,GAER7pY,EADS37B,aAAiB2la,GACnB3la,EAEA,IAAI2la,GAAY,CACrBrra,KAAMm8V,EAAWmvE,iBACjBxoD,QAAS1mB,EAAamvE,qBACtB7la,QACA62S,OAAO,GACN72S,EAAMmF,SACX,GACA,EAEJw5H,EAAQ6iO,EAAoB,GAEhC,CACA,2BAAAC,CAA4BL,EAAW0kE,GACrC,MAAM,gCACJlB,GACEtoZ,KAAK4S,OACT,GAAiD,oBAApC01Y,EAAiD,CAC5D,IAAImB,EAAa,4DAA4DnB,IAI7E,OAHoC,OAAhCnjE,IAAmE,UAA3Bn2U,KAAK9O,SAASyV,WACxD8zY,EAAa,iFAAiFvpZ,SAASyV,YAElGwJ,QAAQE,OAAO,IAAI3b,MAAM+lZ,GAClC,CACA,OAAOnB,EAAgCxjE,EAAW0kE,EACpD,CACA,mBAAAL,CAAoBrkE,EAAWsxB,EAAaD,GAE1C,MAAMuzC,EAzgpBV,SAAkD5kE,EAAWsxB,EAAaD,EAAasyC,GACrF,IAAIkB,EACJ,OAAQ7kE,GACN,KAAKX,EAAWE,SACdslE,EAAgB,CAAC,OAAQ,QACzB,MACF,KAAKxlE,EAAWI,SAChB,KAAKJ,EAAWG,UACdqlE,EAAgB,CAAC,QACjB,MACF,KAAKxlE,EAAWC,SACdulE,EAAgB,CAAC,OAAQ,UACzB,MACF,QACE,MAAM,IAAIjmZ,MAAM,uBAAuBohV,KAE3C,OAEF,SAA4C6kE,EAAevzC,EAAaD,EAAasyC,GAiBnF,MAAO,CAhBY,CACjBkB,cAAeA,EACfC,gBAAiBnB,EAAiBmB,iBAAmB,WACrDC,sBAAuBpB,EAAiBoB,uBAAyB,WACjEC,aAAcrB,EAAiBqB,cAAgB,CAACrB,EAAiBsB,aAAe,aAChFC,kBAAmB5zC,EAAYt4X,KAAI2rW,IAAS,CAC1C+sB,YAAa,sBAAsB/sB,KACnCwgE,WAAYxB,EAAiByB,iBAAmB,GAChDC,iBAAkB1B,EAAiB2B,uBAAyB,SAE9DC,kBAAmBl0C,EAAYr4X,KAAI2rW,IAAS,CAC1C+sB,YAAa,sBAAsB/sB,KACnCwgE,WAAYxB,EAAiB6B,iBAAmB,GAChDH,iBAAkB1B,EAAiB8B,uBAAyB,UAIlE,CApBSC,CAAmCb,EAAevzC,EAAaD,EAAasyC,EACrF,CAw/oBkCgC,CAAyC3lE,EAAWsxB,EAAaD,EAAan2W,KAAK4S,OAAO61Y,kBAClHd,EAA0B3nZ,KAAK2nZ,wBAAwB7iE,GAC7D,IAAI4lE,EAA6C,MAA3B/C,OAAkC,EAASA,EAAwB+C,gBACzF,IAAKA,EAAiB,CACpB1qZ,KAAKQ,IAAI,+BAA+BskV,qCAA6Ct/U,KAAKC,UAAUikZ,MACpGgB,EAAkB1qZ,KAAKmlV,4BAA4BL,EAAW4kE,GAC9D,MAAMiB,EAA2B3qZ,KAAK2nZ,wBAAwB7iE,GAAa,CACzE4lE,mBAKF,OAHAA,EAAgBtiY,OAAM1kC,IACpBsc,KAAKQ,IAAI,0CAA0CskV,OAAephW,IAAQ,IAErEgna,EAAgBr8Y,MAAKu8Y,IAC1B5qZ,KAAKQ,IAAI,0BAA0BoqZ,EAAqB9lE,uBACxD,MAAM+lE,EAAqB7qZ,KAAK8qZ,uBAAuBhmE,GAcvD,OAbA9kV,KAAKQ,IAAI,0BAA0BskV,MACnC6lE,EAAyBvB,UAAYwB,EAAqBG,kBAAkB18Y,MAAK+6Y,IAC/EppZ,KAAKQ,IAAI,2BAA2BskV,MAC7B+lE,EAAmBx8Y,MAAK28Y,GACzBA,EACKhrZ,KAAKirZ,8BAA8B7B,EAAWtkE,EAAWkmE,GAE3D5B,OAGXuB,EAAyBvB,UAAUhhY,OAAM1kC,IACvCsc,KAAKtc,MAAM,oCAAoCohW,QAAgBphW,IAAQ,IAElEina,EAAyBvB,SAAS,GAE7C,CACA,OAAOsB,EAAgBr8Y,MAAK,IAAMs5Y,EAAwByB,WAC5D,CACA,4BAAA8B,EAA6B,YAC3B7sE,EAAW,UACXyG,EAAS,UACTskE,IAEAppZ,KAAKQ,IAAI,gCAAgCskV,aAAqBpmM,GAAIqoM,QAAQ1I,EAAY4S,OAAS,OAC/F,MAAMk6D,EAAmB/B,EAAUrzQ,gBAC7Bq1Q,EAAyB,CAC7B/sE,cACAyG,YACAskE,YACA+B,mBACAE,UAAW,kBAGb,OADArrZ,KAAK6nZ,iBAAiBxsa,KAAK+va,GACpBA,CACT,CACA,eAAAE,CAAgBF,GACd,MAAM/sE,EAAc+sE,EAAuB/sE,YAC3C,GAAIA,EAAY6S,KAAM,CACpB,MAAMq6D,EAAoBvrZ,KAAKkrZ,6BAA6BE,GACtDn6D,EAAQjxV,KAAKwrZ,eAAentE,GAC5Bhb,EAAS,OACfrjU,KAAK8nZ,yBAAyB72D,GAASjxV,KAAKyrZ,uCAAuCF,EAAmBloF,EAAQgb,EAAY6S,KAAM,UAClI,MACElxV,KAAK0N,KAAK,2DAEZ1N,KAAK0rZ,cAAcN,EACrB,CACA,cAAAI,CAAentE,GACb,IAAKA,EACH,MAAM,IAAI36U,MAAM,iDAElB,GAA0B,OAAtB26U,EAAY4S,MACd,MAAM,IAAIvtV,MAAM,iBAElB,OAAOg7I,GAAIqoM,QAAQ1I,EAAY4S,MACjC,CACA,gBAAA06D,CAAiBP,EAAwBxha,GACvC,IAAIgia,EACJ,MAAMC,EAAaT,EAAuBD,iBAG1C,OAFAnrZ,KAAKQ,IAAI,yBAAyBqrZ,EAAW71Q,wBAAwB0I,GAAIqoM,SAAyE,OAA/D6kE,EAAwBR,EAAuB/sE,kBAAuB,EAASutE,EAAsB36D,QAAU,8BAC9KrnW,EAAOA,EAAK8nG,WAAa9nG,MACtCiia,EAAW79X,OAAOpkC,EAC3B,CACA,qBAAAkia,CAAsBzsE,GACpB,MAAMb,EAAazkW,OAAOiC,KAAKqjW,EAAK7B,WAAa,CAAC,GAKlD,OAJKx9U,KAAK0nZ,mBACR1nZ,KAAKQ,IAAI,2CAA2C6+U,EAAK9B,MAAM8B,EAAKrhW,SAASqhW,EAAKn8G,sBAAsBs7G,EAAW5/U,KAAK,SACxHoB,KAAK0nZ,iBAAmB1nZ,KAAK+rZ,oBAAoBvtE,IAE5Cx+U,KAAK0nZ,gBACd,CACA,mBAAAqE,CAAoBvtE,GAClB,OAAO,IAAIr/T,SAAQ,CAACC,EAASC,KAC3B,MAAM2sY,EAAqBjnE,GAAuB/kV,KAAK4S,QACjDsyU,EAAsB1G,EAAW1gW,IAAI2mW,GAAkCzgV,QAAO5pB,KAAWA,IAAgD,IAAvC4xa,EAAmB5wa,QAAQhB,KACnI,OAAO4lB,KAAKisZ,6BAA6B/mE,GAAqB72U,MAAK,EACjEy2U,gBAEA,MAAMonE,EAAkBrnE,GAAiCC,GACrDonE,EACF9sY,EAAQ8sY,GAER7sY,EAAO,IAAI3b,MAAM,yCAAyCohV,MAC5D,IACC18T,MAAM/I,EAAO,GAEpB,CACA,OAAA8sY,CAAQvia,GACN,MAAMy0V,EAAcz0V,EAAKwia,QAAQ/tE,YAC3B4S,EAAQjxV,KAAKwrZ,eAAentE,GAC5BguE,EAAa,WAAWp7D,cAAkB5S,EAAYQ,sBAAsBR,EAAYn/U,eAAem/U,EAAYkF,OACzHvjV,KAAKQ,IAAI,4BAA4B6rZ,KACrC,IAAIC,EAA2BtsZ,KAAK8nZ,yBAAyB72D,GAqB7D,OApBKq7D,IACHA,EAA2BtsZ,KAAK8nZ,yBAAyB72D,GAASjxV,KAAKusZ,0BAA0BluE,GAAahwU,MAAK,EACjHy2U,YACAskE,gBAEAppZ,KAAKwsZ,mBACLxsZ,KAAKQ,IAAI,8BAA8B5W,EAAKy1V,KAAK9B,MAAM3zV,EAAKy1V,KAAKrhW,SAAS4L,EAAKy1V,KAAKn8G,mBAAmBmpL,KAChGrsZ,KAAKysZ,oBAAoB3nE,EAAWskE,GAAW/6Y,MAAK,KACzDrO,KAAKwsZ,mBACL,MAAMjB,EAAoBvrZ,KAAKkrZ,6BAA6B,CAC1DpmE,YACAskE,YACA/qE,gBAGF,OAAOr+U,KAAKyrZ,uCAAuCF,EADpC,OAC+DltE,EAAY6S,KAAM,eAAe,OAGnHo7D,EAAyBlkY,OAAM1kC,GAASsc,KAAK0sZ,YAAYhpa,MAEpD4oa,CACT,CACA,gBAAAE,CAAiB3ja,EAAU,iBACzB,IAAKmX,KAAK++V,IACR,MAAM,IAAIr7V,MAAM,gBAEpB,CACA,WAAAgpZ,CAAYhpa,GACLsc,KAAK++V,MAGV/+V,KAAKtc,MAAMA,EAAMmF,SACbnF,aAAiB2la,GACnBrpZ,KAAK++V,IAAI/zD,QAAQ51F,EAAO5yI,MAAO9+E,EAAMkG,MAErCoW,KAAK++V,IAAI/zD,QAAQ51F,EAAO5yI,MAAO,CAC7BxkF,KAAMm8V,EAAWmvE,iBACjBxoD,QAAS1mB,EAAauyE,mBACtBjpa,QACA62S,OAAO,IAGb,CACA,yBAAAgyH,CAA0BluE,GACxB,MAAM4S,EAAQjxV,KAAKwrZ,eAAentE,GAC5B+sE,EAAyBprZ,KAAK8nZ,yBAAyB72D,GAC7D,IAAKm6D,EAAwB,CAC3B,MAAMtmE,EAAYL,EAAiCpG,EAAYQ,WACzDqG,EAAsBJ,EAAY,CAACA,GAAaC,GAAuB/kV,KAAK4S,QAClF,OAAO5S,KAAKgpZ,uBAAuB9jE,EACrC,CACA,OAAOkmE,CACT,CACA,4BAAAa,CAA6B/mE,GAI3B,GAHKA,EAAoB1rW,SACvB0rW,EAAsBH,GAAuB/kV,KAAK4S,SAEjB,IAA/BsyU,EAAoB1rW,OACtB,MAAM,IAAI6va,GAAY,CACpBrra,KAAMm8V,EAAWmvE,iBACjBxoD,QAAS1mB,EAAawyE,iCACtBryH,OAAO,GACN,oDAAoD/0R,KAAKC,UAAU,CACpEu/U,WAAYhlV,KAAK4S,OAAOoyU,gBAG5B,OAAOhlV,KAAKgpZ,uBAAuB9jE,EACrC,CACA,iBAAAgjE,CAAkB1ja,GAChB,MAAM,aACJqoa,EAAY,SACZ5hB,GACEzmZ,EACEsoa,EAAa,IAAItoa,EAAMxG,iCAAiC6ua,KAI9D,GAHA7sZ,KAAKK,MAAMysZ,GAGM,OAAb7hB,EACF,OAEF,IAAIh6C,EACA87D,EACJ,GAAqB,SAAjBF,GAA2B7sZ,KAAK4S,OAAOoyU,WAAWb,EAAWE,UAAW,CAE1E,MAAM53E,EAAO06E,GAAQ,IAAIn6P,WAAWi+S,IACpC,IACE,MAAMthD,EAAOnjU,EAAahhB,KAAKrC,MAAMspQ,GAAMk9E,MACrC6iD,EAAOzgD,GAAU,IAAI/+P,WAAW28P,IACtC,IAAK6iD,EACH,MAAM,IAAI9oY,MAAM,wDAElButV,EAAQu7C,EAAKzoD,SAAS,EAAG,IACzBgpE,EAAkB5oE,EAAWE,QAC/B,CAAE,MAAO3gW,GAEP,YADAsc,KAAK0N,KAAK,GAAGo/Y,2BAAoCppa,IAEnD,CACF,KAAO,CAEL,MAAMspa,EAlvmBZ,SAAwB/hB,GACtB,MAAMtoU,EAAU,GAChB,GAAIsoU,aAAoB/2S,YAAa,CACnC,MAAM16G,EAASyxZ,EAASv5S,WACxB,IAAI5jE,EAAS,EACb,KAAOA,EAAS,GAAKt0C,GAAQ,CAC3B,MACM03W,EAAOT,GADA,IAAIrlQ,SAAS6/S,EAAUn9W,IAEpC60C,EAAQtnF,KAAK61W,GACbpjU,GAAUojU,EAAK/uW,IACjB,CACF,CACA,OAAOwgF,CACT,CAqumB0BsqV,CAAehiB,GAC7BiiB,EAAWF,EAAYhpZ,QAAOktV,GAAQA,EAAKtM,WAAaF,IAAuB,GACrF,IAAKwoE,EAMH,YAL2B,IAAvBF,EAAYxza,QAAgBwza,EAAYh0X,MAAKk4T,IAASA,EAAKtM,WAC7D5kV,KAAK0N,KAAK,GAAGo/Y,8CAEb9sZ,KAAKQ,IAAI,YAAYssZ,SAAkBE,EAAYlva,KAAIozW,GAAQvM,GAA6BuM,EAAKtM,YAAWhmV,KAAK,6CAKrH,GADAmuZ,EAAkBpoE,GAA6BuoE,EAAStoE,UAC/B,IAArBsoE,EAASj6Y,SAAiBi6Y,EAAStja,KAAM,CAC3C,MAAMkkC,EAASo/X,EAAStja,KAAKpQ,OAAS,GACtCy3W,EAAQi8D,EAAStja,KAAKm6V,SAASj2T,EAAQA,EAAS,GAClD,CACF,CACA,IAAKi/X,IAAoB97D,EACvB,OAEF,MAAMk8D,EAAWzuQ,GAAIqoM,QAAQkK,IACvB,yBACJ62D,EAAwB,iBACxBD,GACE7nZ,KACJ,IAAIssZ,EAA2BxE,EAAyBqF,GACxD,IAAK,IAAI5za,EAAI,EAAGA,EAAIsua,EAAiBrua,OAAQD,IAAK,CAEhD,MAAM6za,EAAavF,EAAiBtua,GAC9B8kW,EAAc+uE,EAAW/uE,YAC/B,IAAKA,EAAY4S,MACf,SAEF,MAAMo8D,EAAc3uQ,GAAIqoM,QAAQ1I,EAAY4S,OAC5C,GAAIk8D,IAAaE,IAAwE,IAAzDhvE,EAAYkF,IAAIr9V,QAAQ,KAAM,IAAI9K,QAAQ+xa,GAAkB,CAE1F,GADAb,EAA2BxE,EAAyBuF,GAChDhvE,EAAY6S,KACd,aAEK42D,EAAyBuF,GAChChvE,EAAY6S,KAAO,IAAIlkQ,WAAWi+S,GAClC5sD,EAAY4S,MAAQA,EACpBq7D,EAA2BxE,EAAyBqF,GAAYb,EAAyBj+Y,MAAK,IACrFrO,KAAKyrZ,uCAAuC2B,EAAYP,EAAc5hB,EAAU,+BAEzF,KACF,CACF,CACKqhB,IAEHA,EAA2BxE,EAAyBqF,GAAYntZ,KAAKisZ,6BAA6B,CAACc,IAAkB1+Y,MAAK,EACxHy2U,YACAskE,gBAEA,IAAIkE,EACJttZ,KAAKwsZ,mBACL,MAAMnuE,EAAc,IAAIuS,GAAS,cAAeu8D,EAAmF,OAAxEG,EAAwBzoE,GAAiCC,IAAsBwoE,EAAwB,IAGlK,OAFAjvE,EAAY6S,KAAO,IAAIlkQ,WAAWi+S,GAClC5sD,EAAY4S,MAAQA,EACbjxV,KAAKysZ,oBAAoB3nE,EAAWskE,GAAW/6Y,MAAK,KACzDrO,KAAKwsZ,mBACL,MAAMjB,EAAoBvrZ,KAAKkrZ,6BAA6B,CAC1D7sE,cACAyG,YACAskE,cAEF,OAAOppZ,KAAKyrZ,uCAAuCF,EAAmBsB,EAAc5hB,EAAU,2BAA2B,GACzH,KAGNqhB,EAAyBlkY,OAAM1kC,GAASsc,KAAK0sZ,YAAYhpa,IAC3D,CACA,gBAAA0ka,CAAiB5ja,GACfwb,KAAKQ,IAAI,IAAIhc,EAAMxG,cACrB,CACA,mBAAAyua,CAAoB3nE,EAAWskE,GAC7B,MAAMh0R,EAAQp1H,KAAK+nZ,kBAAkBxka,QACrCyc,KAAKQ,IAAI,2BAA2BskV,MAGpC,MAAMyoE,EAAsBpuY,QAAQivG,IAAIgH,GAAO/mH,MAAK,KAClD,IAAKrO,KAAK+0N,MACR,MAAM,IAAIrxN,MAAM,6DAElB,OAAO1D,KAAK+0N,MAAMy4L,aAAapE,EAAU,IAG3C,OADAppZ,KAAK+nZ,kBAAkB1sa,KAAKkya,GACrBA,EAAoBl/Y,MAAK,KAC9BrO,KAAKQ,IAAI,uBAAuBskV,MAChC1vN,EAAM/5I,KAAKkya,GACXvtZ,KAAK+nZ,kBAAoB/nZ,KAAK+nZ,kBAAkB/jZ,QAAO1E,IAA2B,IAAtB81H,EAAMh6I,QAAQkkB,IAAU,GAExF,CACA,sCAAAmsZ,CAAuC3sZ,EAAS+tZ,EAAc5hB,EAAUz9X,GACtE,IAAIigZ,EAAuBC,EAC3B,MAAMC,EAA4E,OAAnDF,EAAwBztZ,KAAK4S,OAAOoyU,aAAsG,OAAtE0oE,EAAyBD,EAAsB3uZ,EAAQgmV,iBAAjE,EAAgG4oE,EAAuBE,gBAChN,GAAID,EACF,IACE,MAAME,EAAiBF,EAAsBxza,KAAK6lB,KAAK++V,IAAK8tD,EAAc5hB,EAAUnsY,GACpF,IAAK+uZ,EACH,MAAM,IAAInqZ,MAAM,2DAElBmpZ,EAAegB,EAAehB,aAC9B5hB,EAAWnsY,EAAQu/U,YAAY6S,KAAO28D,EAAe5iB,SAAW,IAAIj+S,WAAW6gU,EAAe5iB,UAAY,IAC5G,CAAE,MAAOvnZ,GACP,IAAIoqa,EAEJ,GADA9tZ,KAAK0N,KAAKhqB,EAAMmF,SACc,OAAzBila,EAAY9tZ,KAAK++V,MAAgB+uD,EAAUl7Y,OAAOvS,MACrD,MAAM3c,CAEV,CAEF,GAAiB,OAAbunZ,EAEF,OADAjrY,KAAKQ,IAAI,qCAAqCgN,oBACvC2R,QAAQC,QAAQtgB,GAEzB,MAAMmyV,EAAQjxV,KAAKwrZ,eAAe1sZ,EAAQu/U,aAC1Cr+U,KAAKQ,IAAI,uCAAuCgN,OAAYyjV,sBAA0B47D,aAAwB5hB,EAAWA,EAASv5S,WAAa,SAC/I,MAAMq8T,EAAgB,IAAIljH,GACpBriJ,EAAY1pJ,EAAQkvZ,WAAaxpa,IACrC,MAAMqna,EAAa/sZ,EAAQqsZ,iBAC3B,IAAKU,EAEH,YADAkC,EAAcl6B,KAAK,QAAS,IAAInwX,MAAM,kBAGxC,MAAM,YACJg9J,EAAW,QACX73K,GACErE,EACJwb,KAAKQ,IAAI,IAAIkgK,iCAA2CmrP,EAAW71Q,4BAA4BntJ,EAAQ6oG,cACnF,oBAAhBgvE,GAAqD,oBAAhBA,EACvC1gK,KAAKiuZ,aAAanvZ,EAASjW,GAASu/B,OAAM1kC,IACxCsc,KAAK0sZ,YAAYhpa,GACjBqqa,EAAcl6B,KAAK,QAASnwY,EAAM,IAEX,oBAAhBg9K,EACL5hK,EAAQgmV,YAAcX,EAAWE,WACnCrkV,KAAK2rZ,iBAAiB7sZ,EAASglV,EAAe,iBAC9C9jV,KAAK0rZ,cAAc5sZ,IAGrBkB,KAAK0N,KAAK,qCAAqCgzJ,KACjD,EAEIwtP,EAAsBpvZ,EAAQqvZ,qBAAuB3pa,IAEzD,IADmBsa,EAAQqsZ,iBAGzB,YADA4C,EAAcl6B,KAAK,QAAS,IAAInwX,MAAM,kBAGxC1D,KAAKouZ,kBAAkBtvZ,GACvB,MAAMusZ,EAAYvsZ,EAAQusZ,UAC1B0C,EAAcl6B,KAAK,YAAaw3B,GACd,YAAdA,IACFrrZ,KAAK0N,KAAK,GAAG5O,EAAQgmV,6BAA6BmM,KAClDjxV,KAAKsrZ,gBAAgBxsZ,GACvB,EAEFA,EAAQqsZ,iBAAiB9ra,iBAAiB,UAAWmpK,GACrD1pJ,EAAQqsZ,iBAAiB9ra,iBAAiB,oBAAqB6ua,GAC/D,MAAMG,EAAmB,IAAIlvY,SAAQ,CAACC,EAASC,KAC7C0uY,EAAct7X,GAAG,QAASpT,GAC1B0uY,EAAct7X,GAAG,aAAa44X,IACxBA,EAAU9qX,WAAW,UACvBnhB,IACuB,sBAAdisY,EACThsY,EAAO,IAAIgqY,GAAY,CACrBrra,KAAMm8V,EAAWmvE,iBACjBxoD,QAAS1mB,EAAak0E,oCACtB/zH,OAAO,GACN,iCACoB,mBAAd8wH,EACThsY,EAAO,IAAIgqY,GAAY,CACrBrra,KAAMm8V,EAAWmvE,iBACjBxoD,QAAS1mB,EAAam0E,iCACtBh0H,OAAO,GACN,0BAA0B8wH,OACN,YAAdA,EACThsY,EAAO,IAAI3b,MAAM,yCAEjB1D,KAAK0N,KAAK,gCAAgC29Y,KAC5C,GACA,IAEJ,OAAOvsZ,EAAQqsZ,iBAAiByC,gBAAgBf,EAAc5hB,GAAU58X,MAAK,KAC3E,IAAImgZ,EACJxuZ,KAAKQ,IAAI,sCAA4F,OAArDguZ,EAAwB1vZ,EAAQqsZ,uBAA4B,EAASqD,EAAsBx4Q,qBAAqBi7M,IAAQ,IACvK7oU,OAAM1kC,IACP,MAAM,IAAI2la,GAAY,CACpBrra,KAAMm8V,EAAWmvE,iBACjBxoD,QAAS1mB,EAAaq0E,sBACtB/qa,QACA62S,OAAO,GACN,yCAAyC72S,IAAQ,IACnD2qB,MAAK,IAAMggZ,IAAkBjmY,OAAM1kC,IAGpC,MAFAqqa,EAAcr+P,qBACd1vJ,KAAK0rZ,cAAc5sZ,GACbpb,CAAK,IACV2qB,MAAK,KACN0/Y,EAAcr+P,qBACP5wJ,IAEX,CACA,iBAAAsvZ,CAAkBhD,GAChBA,EAAuBD,iBAAiBuD,YAAY9ra,SAAQ,CAACK,EAAQguW,KACnEjxV,KAAKQ,IAAI,sBAAsBvd,6BAAkCy7J,GAAIqoM,QAAQ,WAAYkK,EAAQ,IAAIjkQ,WAAWikQ,EAAMl/P,OAAQk/P,EAAM/+P,WAAY++P,EAAMv/P,YAAc,IAAI1E,WAAWikQ,sBAA0BvyM,GAAIqoM,QAAQ,IAAI/5P,WAAWo+T,EAAuB/sE,YAAY4S,OAAS,aAAam6D,EAAuB/sE,YAAYkF,OACpU6nE,EAAuBC,UAAYpoa,CAAM,GAE7C,CACA,sBAAA6na,CAAuBhmE,GACrB,MAAMlyU,EAAS5S,KAAK4S,OAEd+7Y,EAAa,IAAIzuD,EADRttV,EAAOmsO,QACQnsO,GACxBmC,EAAM/U,KAAK8oZ,wBAAwBhkE,GACzC,OAAK/vU,GAGL/U,KAAKQ,IAAI,oCAAoCskV,MACtC,IAAI3lU,SAAQ,CAACC,EAASC,KAC3B,MAAMmhV,EAAgB,CACpB17I,aAAc,cACd/vM,OAEIwrV,EAAa3tV,EAAOg8Y,eAAerpX,QACnC+7T,EAAe,CACnBf,aACA/jU,QAAS+jU,EAAWa,cACpBG,SAAU,EACVtkM,WAAY,EACZykM,cAAe,GAEXE,EAAkB,CACtBC,UAAW,CAACrjV,EAAUosR,EAAO9rS,EAASgjW,KACpC1iV,EAAQZ,EAAS50B,KAAK,EAExBqU,QAAS,CAACugB,EAAUqwY,EAAQ/sD,EAAgBl3D,KAC1CvrR,EAAO,IAAIgqY,GAAY,CACrBrra,KAAMm8V,EAAWmvE,iBACjBxoD,QAAS1mB,EAAa00E,6CACtBv0H,OAAO,EACPunE,iBACAtjV,SAAUqxJ,EAAe,CACvB96J,IAAKyrV,EAAczrV,IACnBnrB,UAAMgP,GACL4lB,IACF,IAAIsmU,kCAA0C/vU,eAAiByJ,EAASpS,SAASoS,EAASv6B,SAAS,EAExGk+W,UAAW,CAACv3D,EAAO9rS,EAASgjW,KAC1BziV,EAAO,IAAIgqY,GAAY,CACrBrra,KAAMm8V,EAAWmvE,iBACjBxoD,QAAS1mB,EAAa00E,6CACtBv0H,OAAO,EACPunE,iBACAtjV,SAAU,CACRzJ,IAAKyrV,EAAczrV,IACnBnrB,UAAMgP,IAEP,IAAIksV,qCAA6C/vU,MAAQ,EAE9D0iQ,QAAS,CAACmzB,EAAO9rS,EAASgjW,KACxBziV,EAAO,IAAI3b,MAAM,WAAW,GAGhCirZ,EAAWpvZ,KAAKihW,EAAec,EAAcM,EAAgB,KAhDtDziV,QAAQC,SAkDnB,CACA,6BAAA6rY,CAA8B7B,EAAWtkE,EAAWiqE,GAClD,OAAO,IAAI5vY,SAAQ,CAACC,EAASC,KAC3B+pY,EAAU4F,qBAAqBD,GAAM1gZ,MAAK4gZ,IACxCjvZ,KAAKQ,IAAI,wBAAwByuZ,EAAU,UAAY,2BAAmC,MAARF,OAAe,EAASA,EAAKr9T,mBAAmBozP,MAClI1lU,EAAQgqY,EAAU,IACjBhhY,OAAM1kC,IACP27B,EAAO,IAAIgqY,GAAY,CACrBrra,KAAMm8V,EAAWmvE,iBACjBxoD,QAAS1mB,EAAa80E,4CACtBxra,QACA62S,OAAO,GACN72S,EAAMmF,SAAS,GAClB,GAEN,CACA,YAAAola,CAAanvZ,EAASqwZ,GACpB,OAAOnvZ,KAAKovZ,eAAetwZ,EAAS,IAAIkuF,WAAWmiU,IAAa9gZ,MAAKzkB,GAC5DoW,KAAK2rZ,iBAAiB7sZ,EAAS,IAAIkuF,WAAWpjG,IAAOw+B,OAAM1kC,IAChE,MAAM,IAAI2la,GAAY,CACpBrra,KAAMm8V,EAAWmvE,iBACjBxoD,QAAS1mB,EAAai1E,iCACtB3ra,QACA62S,OAAO,GACN72S,EAAMmF,QAAQ,KAGvB,CACA,yBAAAyma,CAA0B3qG,EAAK4qG,GAM7B,MAAMC,EAAY3sZ,OAAO+iB,aAAa7lB,MAAM,KAAM,IAAI8mJ,YAAY0oQ,EAAiBx9T,SACnF,IAAKy9T,EAAUv1a,SAAS,uBAMtB,OADA0qU,EAAIvuS,iBAAiB,eAAgB,2BAC9Bm5Y,EAET,MAAME,GAAgB,IAAI74U,WAAYD,gBAAgB64U,EAAW,mBAE3Dx4R,EAAUy4R,EAAc7yY,iBAAiB,cAC/C,GAAIo6G,EAAQx9I,OAAS,EAAG,CACtB,IAAIsQ,EACJ,IAAK,IAAIvQ,EAAI,EAAGsiB,EAAMm7H,EAAQx9I,OAAQD,EAAIsiB,EAAKtiB,IAAK,CAClD,IAAIm2a,EAAuBC,EAC3B7la,EAASktI,EAAQz9I,GACjB,MAAMqL,EAAiE,OAAzD8qa,EAAwB5la,EAAO7O,cAAc,cAAmB,EAASy0a,EAAsBjzY,YACvGriC,EAAoE,OAA3Du1a,EAAyB7la,EAAO7O,cAAc,eAAoB,EAAS00a,EAAuBlzY,YAC7G73B,GAAQxK,GACVuqU,EAAIvuS,iBAAiBxxB,EAAMxK,EAE/B,CACF,CACA,MAAMw1a,EAAmBH,EAAcx0a,cAAc,aAC/C40a,EAAoC,MAApBD,OAA2B,EAASA,EAAiBnzY,YAC3E,IAAKozY,EACH,MAAM,IAAInsZ,MAAM,0CAElB,OAAOogV,EAAex/T,KAAKurY,GAC7B,CACA,eAAAC,CAAgBnrG,EAAK5vS,EAAKg7Y,EAAcR,GACtC,MAAMhH,EAAkBvoZ,KAAK4S,OAAO21Y,gBACpC,OAAKA,EAOEppY,QAAQC,UAAU/Q,MAAK,KAC5B,IAAK0hZ,EAAa1xE,YAChB,MAAM,IAAI36U,MAAM,eAElB,OAAO6kZ,EAAgBpua,KAAK6lB,KAAK++V,IAAKp6C,EAAK5vS,EAAKg7Y,EAAcR,EAAiB,IAC9EnnY,OAAM1kC,IACP,IAAKqsa,EAAa1xE,YAEhB,MAAM36V,EAIR,OADAihU,EAAIrvS,KAAK,OAAQP,GAAK,GACfwzY,EAAgBpua,KAAK6lB,KAAK++V,IAAKp6C,EAAK5vS,EAAKg7Y,EAAcR,EAAiB,IAC9ElhZ,MAAK2hZ,IAEDrrG,EAAIzuS,YACPyuS,EAAIrvS,KAAK,OAAQP,GAAK,GAGxB,MAAO,CACL4vS,MACA4qG,iBAH4BS,GAAgDT,EAI7E,KA5BD5qG,EAAIrvS,KAAK,OAAQP,GAAK,GACfoK,QAAQC,QAAQ,CACrBulS,MACA4qG,qBA2BN,CACA,cAAAH,CAAe7D,EAAmBgE,GAChC,MAAMU,EAAgBjwZ,KAAK4S,OAAOq9Y,cAAc1qX,QAChD,OAAO,IAAIpmB,SAAQ,CAACC,EAASC,KAC3B,MAAMtK,EAAM/U,KAAK2oZ,oBAAoB4C,EAAkBzmE,WACvD9kV,KAAKQ,IAAI,mCAAmCuU,KAC5C,MAAM4vS,EAAM,IAAI3uS,eAChB2uS,EAAI7/F,aAAe,cACnB6/F,EAAI1uS,mBAAqB,KACvB,IAAKjW,KAAK++V,MAAQwsD,EAAkBJ,iBAClC,OAAO9rY,EAAO,IAAI3b,MAAM,kBAE1B,GAAuB,IAAnBihT,EAAIzuS,WACN,GAAmB,MAAfyuS,EAAI1hU,OAAgB,CACtB+c,KAAK4nZ,4BAA8B,EACnC,IAAIh+Z,EAAO+6T,EAAInmS,SACfxe,KAAKQ,IAAI,oBAAoB5W,aAAgBsqG,YAActqG,EAAK8nG,WAAa9nG,KAC7E,MAAM4+Z,EAA0BxoZ,KAAK4S,OAAO41Y,wBAC5C,GAAIA,EACF,IACE5+Z,EAAO4+Z,EAAwBrua,KAAK6lB,KAAK++V,IAAKp6C,EAAK5vS,EAAKw2Y,EAC1D,CAAE,MAAO7na,GACPsc,KAAKtc,MAAMA,EACb,CAEF07B,EAAQx1B,EACV,KAAO,CACL,MAAMilX,EAAcohD,EAAcrvD,WAC5BY,EAAcqN,EAAcA,EAAYrN,YAAc,EAE5D,GADAxhW,KAAK4nZ,8BACD5nZ,KAAK4nZ,4BAA8BpmD,GAAe78C,EAAI1hU,QAAU,KAAO0hU,EAAI1hU,OAAS,IACtFo8B,EAAO,IAAIgqY,GAAY,CACrBrra,KAAMm8V,EAAWmvE,iBACjBxoD,QAAS1mB,EAAa81E,kCACtB31H,OAAO,EACPunE,eAAgBn9C,EAChBnmS,SAAU,CACRzJ,MACAnrB,UAAMgP,EACNwT,KAAMu4S,EAAI1hU,OACVgB,KAAM0gU,EAAIvhU,aAEX,+BAA+B2xB,eAAiB4vS,EAAI1hU,WAAW0hU,EAAIvhU,oBACjE,CACL,MAAM+sa,EAAe3uD,EAAcxhW,KAAK4nZ,4BAA8B,EACtE5nZ,KAAK0N,KAAK,6BAA6ByiZ,mBACvCnwZ,KAAKovZ,eAAe7D,EAAmBgE,GAAkBlhZ,KAAK+Q,EAASC,EACzE,CACF,CACF,EAEEksY,EAAkB6E,YAAc7E,EAAkB6E,WAAWl6Y,aAAeF,eAAeG,MAC7Fo1Y,EAAkB6E,WAAWp1X,QAE/BuwX,EAAkB6E,WAAazrG,EAC/B3kT,KAAK8vZ,gBAAgBnrG,EAAK5vS,EAAKw2Y,EAAmBgE,GAAkBlhZ,MAAK,EACvEs2S,MACA4qG,uBAEIhE,EAAkBzmE,WAAaX,EAAWG,YAC5CirE,EAAmBvvZ,KAAKsvZ,0BAA0B3qG,EAAK4qG,IAEzD5qG,EAAIpvS,KAAKg6Y,EAAiB,GAC1B,GAEN,CACA,eAAAppD,CAAgB3hX,EAAOoF,GACrB,IAAKoW,KAAK4S,OAAOy9Y,WACf,OAEF,MAAMt7L,EAAQnrO,EAAKmrO,MAGnB/0N,KAAK+0N,MAAQA,EACbA,EAAM11O,iBAAiB,YAAa2gB,KAAKioZ,kBACzClzL,EAAM11O,iBAAiB,gBAAiB2gB,KAAKmoZ,gBAC/C,CACA,eAAAE,GACE,MAAMtzL,EAAQ/0N,KAAK+0N,MACbu7L,EAAgBtwZ,KAAK6nZ,iBACvB9yL,IACFA,EAAMz1O,oBAAoB,YAAa0gB,KAAKioZ,kBAC5ClzL,EAAMz1O,oBAAoB,gBAAiB0gB,KAAKmoZ,iBAChDnoZ,KAAK+0N,MAAQ,MAEf/0N,KAAK4nZ,4BAA8B,EACnC5nZ,KAAK+nZ,kBAAoB,GACzB/nZ,KAAK6nZ,iBAAmB,GACxB7nZ,KAAK8nZ,yBAA2B,CAAC,EACjCl3D,GAASC,wBAGT,MAAM0/D,EAAkBD,EAAc92a,OACtCiua,GAAcO,kBAAoB7oY,QAAQivG,IAAIkiS,EAAcxya,KAAIsta,GAA0BprZ,KAAK0rZ,cAAcN,KAAyBrvZ,OAAgB,MAATg5N,OAAgB,EAASA,EAAMy4L,aAAa,MAAMplY,OAAM1kC,IACnMsc,KAAKQ,IAAI,+BAA+B9c,IAAQ,MAC7C2qB,MAAK,KACJkiZ,IACFvwZ,KAAKQ,IAAI,yDACT8vZ,EAAc92a,OAAS,EACzB,IACC4uC,OAAM1kC,IACPsc,KAAKQ,IAAI,kDAAkD9c,IAAQ,GAEvE,CACA,iBAAA67W,GACEv/V,KAAK0nZ,iBAAmB,IAC1B,CACA,gBAAAjgC,CAAiBjjY,GAAO,YACtB00W,IAEA,GAAKA,GAAgBl5V,KAAK4S,OAAOy9Y,aAG5BrwZ,KAAK0nZ,iBAAkB,CAC1B,MAAMlpE,EAAa0a,EAAYt3T,QAAO,CAACsjB,EAASy0S,MACC,IAA3Cz0S,EAAQ9pE,QAAQu+W,EAAW9a,YAC7B35R,EAAQ7pE,KAAKs+W,EAAW9a,WAEnB35R,IACN,IACHllD,KAAKQ,IAAI,0CAA0Cg+U,EAAW5/U,KAAK,SACnEoB,KAAK0nZ,iBAAmB1nZ,KAAK+rZ,oBAAoBvtE,EACnD,CACF,CACA,aAAAktE,CAAcN,GACZ,MAAM,iBACJD,EAAgB,WAChBiF,GACEhF,EACJ,GAAID,EAAkB,CACpBnrZ,KAAKQ,IAAI,8CAA8C2qZ,EAAiBn1Q,aACpEo1Q,EAAuB4C,aACzB7C,EAAiB7ra,oBAAoB,UAAW8ra,EAAuB4C,YACvE5C,EAAuB4C,gBAAap1Z,GAElCwyZ,EAAuB+C,uBACzBhD,EAAiB7ra,oBAAoB,oBAAqB8ra,EAAuB+C,sBACjF/C,EAAuB+C,0BAAuBv1Z,GAE5Cw3Z,GAAcA,EAAWl6Y,aAAeF,eAAeG,MACzDi6Y,EAAWp1X,QAEbowX,EAAuBD,iBAAmBC,EAAuB/sE,YAAc+sE,EAAuBgF,gBAAax3Z,EACnH,MAAMlX,EAAQse,KAAK6nZ,iBAAiBzsa,QAAQgwa,GAI5C,OAHI1pa,GAAS,GACXse,KAAK6nZ,iBAAiB3nU,OAAOx+F,EAAO,GAE/Bypa,EAAiBvrS,SAASx3F,OAAM1kC,IACrCsc,KAAKQ,IAAI,6BAA6B9c,IAAQ,IAC7C2qB,MAAK,IACC88Y,EAAiBlzZ,UACvBmwB,OAAM1kC,IACPsc,KAAKQ,IAAI,4BAA4B9c,IAAQ,GAEjD,CACF,EAEF+ja,GAAcO,uBAAoB,EAClC,MAAMqB,WAAoB3lZ,MACxB,WAAAme,CAAYj4B,EAAMf,GAChBu9B,MAAMv9B,GACNmX,KAAKpW,UAAO,EACZA,EAAKlG,QAAUkG,EAAKlG,MAAQ,IAAIggB,MAAM7a,IACtCmX,KAAKpW,KAAOA,EACZA,EAAKqc,IAAMrc,EAAKlG,KAClB,EAWF,IAAI8sa,GAgDAC,GA2BAC,IA1EJ,SAAWF,GAITA,EAAuB,SAAI,IAI3BA,EAAoB,MAAI,IAIxBA,EAAoB,MAAI,IAIxBA,EAAoB,MAAI,KAIxBA,EAAmB,KAAI,IAIvBA,EAAsB,QAAI,IAI1BA,EAAyB,WAAI,KAI7BA,EAAkB,IAAI,IAItBA,EAAoB,MAAI,GACzB,CArCD,CAqCGA,KAAiBA,GAAe,CAAC,IAWpC,SAAWC,GAITA,EAAwB,KAAI,IAI5BA,EAAuB,IAAI,IAI3BA,EAA0B,OAAI,IAI9BA,EAAyB,MAAI,GAC9B,CAjBD,CAiBGA,KAAsBA,GAAoB,CAAC,IAU9C,SAAWC,GAITA,EAAwB,OAAI,cAI5BA,EAAyB,QAAI,eAI7BA,EAAyB,QAAI,eAI7BA,EAAwB,OAAI,aAC7B,CAjBD,CAiBGA,KAAoBA,GAAkB,CAAC,IAS1C,MAAMC,GAAgB,CACpB,CAACD,GAAgBE,QAAS,CAAC,KAAM,IAAK,KAAM,MAC5C,CAACF,GAAgBG,SAAU,CAAC,KAAM,KAAM,MAAO,MAAO,MAAO,MAC7D,CAACH,GAAgBI,SAAU,CAAC,MAAO,KAAM,KAAM,MAAO,KAAM,KAC5D,CAACJ,GAAgBK,QAAS,CAAC,KAAM,QAUnC,MAAMC,GACJ,WAAAnvY,CAAYznC,EAAOyyC,GACjB7sB,KAAK5lB,WAAQ,EACb4lB,KAAK6sB,YAAS,EACVjzC,MAAMC,QAAQO,KAChBA,EAAQA,EAAM0D,KAAImkB,GAAKA,aAAa+uZ,GAAS/uZ,EAAI,IAAI+uZ,GAAO/uZ,MAE9DjC,KAAK5lB,MAAQA,EACb4lB,KAAK6sB,OAASA,CAChB,EAUF,MAAMokY,GACJ,WAAApvY,CAAYnhC,GACVsf,KAAKtf,iBAAc,EACnBsf,KAAKtf,YAAcA,CACrB,EAGF,MAAMwwa,GAAO,OAiBb,SAASC,GAAWj6X,EAAQr0C,EAAK7E,EAAMwuB,GACrC,OAAO,IAAI9I,MAAM,aAAawzB,MAhBhB98C,EAgBkCyI,EAf5CjJ,MAAMC,QAAQO,GACTorB,KAAKC,UAAUrrB,GAEpBA,aAAiBu2C,IACZ,QAELv2C,aAAiBy2C,IACZ,QAEY,kBAAVz2C,EACForB,KAAKC,UAAUrrB,GAEjByoB,OAAOzoB,UAG8C4D,IAAQ,CAClEwuB,UAjBJ,IAAgBpyB,CAmBhB,CAEA,MAAMg3a,GAAY,YAEZ93U,GAAU,UAEV+3U,GAAQ,gBAERC,GAAU,UAEVC,GAAU,UAMhB,MAAMC,GAAe,mBAEfC,GAAQ,QAERC,GAAM,MAEZ,SAASr3X,GAAex3C,EAAK7E,EAAMwuB,GACjC,OAAO2kZ,GAAW,YAAatua,EAAK7E,EAAMwuB,EAC5C,CA+DA,SAASmlZ,GAAsBv3a,GAC7B,IAAkC,IAA9B85G,YAAYkyH,OAAOhsO,GACrB,MAAMigD,GAAejgD,EAAOi3a,IAE9B,MAAO,IAhCaO,EAgCIx3a,EA/BjBmrC,KAAK1iB,OAAO+iB,gBAAgBgsY,OADrC,IAAsBA,CAiCtB,CAoBA,SAASC,GAAiBz3a,GACxB,GArGF,SAAsBA,GACpB,OAAOA,GAAS,iBAAmB,gBAAkBA,CACvD,CAmGM03a,CAAa13a,GACf,MAAMigD,GAAejgD,EAAOm3a,IAE9B,OAAOn3a,EAAMN,UACf,CA0BA,SAASi4a,GAAY33a,EAAO43a,GAC1B,GAAI53a,EAAQ,EACV,OAAQ23a,IAAa33a,EAAO43a,GAE9B,MAAMC,EAAetiZ,KAAKC,IAAI,GAAIoiZ,GAElC,GADsBriZ,KAAK+2B,IAAItsD,EAAQ63a,EAAe,EAAI,IAAOrvZ,OAAOsvZ,QACrD,CAEjB,MAAMC,EAAexiZ,KAAKq2B,MAAM5rD,EAAQ63a,GACxC,OAAQE,EAAe,IAAM,EAAIA,EAAeA,EAAe,GAAKF,CACtE,CAEE,OAAOtiZ,KAAKy2B,MAAMhsD,EAAQ63a,GAAgBA,CAE9C,CAoCA,SAASG,GAAiBh4a,GACxB,MAAMi4a,EAAeN,GAAY33a,EAAO,GACxC,GAAIu1B,KAAKq2B,MAAMr2B,KAAK+2B,IAAI2rX,IAAev4a,WAAWN,OAAS,GACzD,MAAM6gD,GAAejgD,EAAOk3a,IAE9B,MAAM92J,EAAc63J,EAAav4a,WACjC,OAAO0gR,EAAYvgR,SAAS,KAAOugR,EAAc,GAAGA,KACtD,CAEA,MAAMzoC,GAAS,SAqCf,SAASugM,GAAehqY,GACtB,MAAMluC,GALak4G,EAKOhqE,GAJZ5nC,aAAe4xG,EAAOx4G,WAAWyJ,MAAM,GAAI,GAD3D,IAAqB+uG,EAMnB,IAA6D,IAAzD,yCAAyClzF,KAAKhlB,GAChD,MAAMigD,GAAejgD,EAAOq3a,IAE9B,OAAOr3a,CACT,CA6BA,SAASm4a,GAAkBn4a,GACzB,cAAeA,GACb,IAAK,SACH,IAAK8/V,EAAe9/V,GAClB,MAAMigD,GAAejgD,EAAOg3a,IAE9B,OAAIxuZ,OAAOohH,UAAU5pI,GACZy3a,GAAiBz3a,GAEnBg4a,GAAiBh4a,GAC1B,IAAK,SACH,OAzDN,SAAyBA,GACvB,GAAIo3a,GAAapyZ,KAAKhlB,GACpB,MAAMigD,GAAejgD,EAAO23O,IAE9B,MAAO,IAAI33O,EAAM8L,QAAQ,MAAO,QAAQA,QAAQ,KAAM,SACxD,CAoDassa,CAAgBp4a,GACzB,IAAK,SACH,OAAOk4a,GAAel4a,GACxB,IAAK,UACH,OAvPN,SAA0BA,GACxB,GAAqB,mBAAVA,EACT,MAAMigD,GAAejgD,EAAOk/F,IAE9B,OAAOl/F,EAAQ,KAAO,IACxB,CAkPaq4a,CAAiBr4a,GAC1B,IAAK,SACH,GAAIA,aAAiB8O,KACnB,OArKR,SAAuB9O,GACrB,MAAO,IAAIy3a,GAAiBz3a,EAAM61B,UAAY,MAChD,CAmKeyiZ,CAAct4a,GAEvB,GAAIA,aAAiB4yG,WACnB,OAAO2kU,GAAsBv3a,GAE/B,GAAIA,aAAiB62a,GACnB,OAAOqB,GAAel4a,GAE1B,QAEE,MAAMigD,GAAejgD,EAAOg3a,IAElC,CAqBA,SAASuB,GAAav4a,GACpB,IAA6C,IAAzC,yBAAyBglB,KAAKhlB,GAChC,MAAMigD,GAAejgD,EAAOs3a,IAE9B,OAAOt3a,CACT,CA0BA,SAASw4a,GAAgB/lY,GACvB,OAAc,MAAVA,EACK,GAEF9yC,OAAO+yC,QAAQD,GAAQ/uC,KAAI,EAAE5D,EAAKE,MACzB,IAAVA,EACK,IAAIu4a,GAAaz4a,KAEnB,IAAIy4a,GAAaz4a,MAAQq4a,GAAkBn4a,OACjDwkB,KAAK,GACV,CAgBA,SAASi0Z,GAAcz4a,GACrB,OAAIA,aAAiB42a,GACZ,GAAGuB,GAAkBn4a,EAAMA,SAASw4a,GAAgBx4a,EAAMyyC,UAE1D0lY,GAAkBn4a,EAE7B,CAkEA,SAAS04a,GAAcxO,EAAM/ja,EAAU,CACrC6yF,YAAY,IAEZ,GAAoB,kBAATkxU,EACT,MAAMjqX,GAAeiqX,EAAM4M,IAE7B,MAAMpkY,EAAUw3X,aAAgB3zX,IAAM2zX,EAAKx3X,UAAY/yC,OAAO+yC,QAAQw3X,GAChEyO,EAAgC,MAAXxya,GAAmBA,EAAQ6yF,WAAa,IAAM,GACzE,OAAOx5F,MAAM0Z,KAAKw5B,GAAShvC,KAAI,EAAE5D,EAAK6P,MAChCA,aAAgBina,MAAW,IAC7Bjna,EAAO,IAAIina,GAAOjna,IAEpB,IAAI66B,EAAS+tY,GAAaz4a,GAtD9B,IAA4BE,EAiExB,OAVmB,IAAf2P,EAAK3P,MACPwqC,GAAUguY,GAAgB7oa,EAAK8iC,SAE/BjI,GAAU,IACNhrC,MAAMC,QAAQkQ,EAAK3P,OACrBwqC,GA3DC,KADmBxqC,EA4DS2P,GA3DlB3P,MAAM0D,IAAI+0a,IAAej0Z,KAAK,QAAQg0Z,GAAgBx4a,EAAMyyC,UA6DvEjI,GAAUiuY,GAAc9oa,IAGrB66B,CAAM,IACZhmB,KAAK,IAAIm0Z,IACd,CA2BA,MAAMC,GAAe94a,GAAe,OAARA,GAAwB,OAARA,GAAwB,OAARA,EAEtDo/D,GAAUl/D,GACO,kBAAVA,EACF8/V,EAAe9/V,GAER,MAATA,GAA2B,KAAVA,IAA0B,IAAVA,EAiE1C,MAAM64a,GAAY74a,GAASu1B,KAAKy2B,MAAMhsD,GAOhC84a,GAAY94a,GAAkC,IAAzB64a,GAAU74a,EAAQ,KAQvC+4a,GAAiB,CAIrBjzT,GAAI+yT,GAIJn4a,EAAGm4a,GAIHnwT,GAAIowT,GAIJliT,GAAIkiT,GAIJE,IAAKF,GAILG,IAtCgB,CAACj5a,EAAOmG,KACT,MAAXA,GAAmBA,EAAQm/V,UAC7BtlW,EAtDJ,SAA2B26B,EAAKtF,GAC9B,MAAM0N,EAAK,IAAIohB,IAAIxpB,GACbzhB,EAAO,IAAIirC,IAAI9uB,GACrB,GAAI0N,EAAGmhB,SAAWhrC,EAAKgrC,OACrB,OAAOvpB,EAET,MAAMiiF,EAAS75E,EAAGzG,SAAS3S,MAAM,KAAKxgB,MAAM,GACtC+va,EAAWhga,EAAKojB,SAAS3S,MAAM,KAAKxgB,MAAM,GAAI,GAEpD,KAAOyzG,EAAO,KAAOs8T,EAAS,IAC5Bt8T,EAAO/xF,QACPquZ,EAASruZ,QAGX,KAAOquZ,EAAS95a,QACd85a,EAASruZ,QACT+xF,EAAO1e,QAAQ,MAEjB,OAAO0e,EAAOp4F,KAAK,IACrB,CAmCY20Z,CAAkBn5a,EAAOmG,EAAQm/V,UAEpC9pU,mBAAmBx7B,IAsC1Bo5a,IAAKN,GAIL7gO,GAAI4gO,IA+DN,SAASQ,GAAWC,EAAMnza,EAAU,CAAC,GACnC,OAAKmza,EArMP,SAAsBt5a,EAAOmG,GAC3B,OAAOuya,GAAc14a,EAAOmG,EAC9B,CAsMSoza,CArDT,SAAqBx3Z,EAAK5b,GACxB,MAAMoiF,EAAU,CAAC,EACjB,GAAW,MAAPxmE,GAA8B,kBAARA,EACxB,OAAOwmE,EAET,MAAM3mF,EAAOjC,OAAOiC,KAAKmgB,GAAKojC,OACxB0H,EAAapnC,EAAS,CAAC,EAAGszZ,GAA2B,MAAX5ya,OAAkB,EAASA,EAAQ0mD,YAC7EjjC,EAAoB,MAAXzjB,OAAkB,EAASA,EAAQyjB,OA2BlD,OA1BAhoB,EAAK4G,SAAQ1I,IACX,GAAc,MAAV8pB,GAAkBA,EAAO9pB,GAC3B,OAEF,IAAIE,EAAQ+hB,EAAIjiB,GAChB,MAAM2/D,EAAY5S,EAAW/sD,GACzB2/D,IACFz/D,EAAQy/D,EAAUz/D,EAAOmG,IAGf,MAARrG,GAAyB,IAAVE,GAIR,MAAPF,GAAyB,IAAVE,GAIdk/D,GAAQl/D,KAGT44a,GAAa94a,IAAyB,kBAAVE,IAC9BA,EAAQ,IAAI62a,GAAQ72a,IAEtBuoF,EAAQzoF,GAAOE,EAAK,IAEfuoF,CACT,CAkBsBixV,CAAYF,EAAMnza,GAAUsf,EAAS,CACvDuzE,YAAY,GACX7yF,IAJM,EAKX,CA+CA,SAASsza,GAAkB78R,EAAS08R,EAAMnza,GACxC,OAAOsf,EAASm3H,EAlClB,SAAuB08R,EAAMnza,EAAU,CAAC,GACtC,IAAKmza,EACH,MAAO,CAAC,EAEV,MAAM5mY,EAAU/yC,OAAO+yC,QAAQ4mY,GACzBI,EAAY/5a,OAAO+yC,QAAQ6jY,IAAe50Z,OAAOhiB,OAAO+yC,SAAoB,MAAXvsC,OAAkB,EAASA,EAAQwza,kBAAoB,CAAC,IACzHC,EAASlnY,EAAQ8U,QAAO,CAACga,EAAKgwC,KAClC,IAAIqoU,EACJ,MAAO/5a,EAAKE,GAASwxG,EACfjoD,GAAgF,OAAtEswX,EAAkBH,EAAU5tZ,MAAK0lF,GAASA,EAAM,GAAG3xG,SAASC,WAAiB,EAAS+5a,EAAgB,KAAOvD,GAAgBG,QAG7I,OAF6B,MAAfj1W,EAAIjY,KAA+BiY,EAAIjY,GAAS,CAAC,GAC/DiY,EAAIjY,GAAOzpD,GAAOE,EACXwhE,CAAG,GACT,CAAC,GACJ,OAAO7hE,OAAO+yC,QAAQknY,GAAQpyX,QAAO,CAACga,GAAMjY,EAAOvpD,MACjDwhE,EAAIjY,GAAS8vX,GAAWr5a,EAAOmG,GACxBq7D,IACN,CAAC,EACN,CAgB2Bs4W,CAAcR,EAAMnza,GAC/C,CASA,MAAM4za,GAAa,OAsBnB,MAAMC,GAAQ,cAcd,SAASC,GAAgBt/Y,EAAK2+Y,EAAMnza,GAGlC,MAAM2uI,EAzBR,SAAqBwkS,EAAMnza,EAAU,CAAC,GACpC,IAAKmza,EACH,MAAO,GAET,MAAM7mY,EAAS4mY,GAAWC,EAAMnza,GAChC,MAAO,GAAG4za,MAAcv+Y,mBAAmBiX,IAC7C,CAmBgBynY,CAAYZ,EAAMnza,GAChC,IAAK2uI,EACH,OAAOn6G,EAET,GAAIq/Y,GAAMh1Z,KAAK2V,GACb,OAAOA,EAAI7uB,QAAQkua,GAAOllS,GAE5B,MAAM5yE,EAAYvnC,EAAI96B,SAAS,KAAO,IAAM,IAC5C,MAAO,GAAG86B,IAAMunC,IAAY4yE,GAC9B,CAqrBA,SAASqlS,GAAqBv+O,EAAQw+O,EAAeC,EAAgBC,GAC9D1+O,GAGLj8L,OAAOiC,KAAKw4a,GAAe5xa,SAAQgpX,IACjC,MAAM+oD,EAAe3+O,EAAOhyK,QAAOqtH,GAASA,EAAMz/C,UAAYg6R,IAAc9tX,KAAIuzI,IAC9E,MAAMujS,EAAc/0Z,EAAS,CAAC,EAAGwxH,GAMjC,OALAujS,EAAY9zD,aAAUloW,EACtBg8Z,EAAYtuR,MAAQ,IAAIs0M,EAASg6E,EAAYtuR,OAC7CsuR,EAAY7/Y,IAAM6/Y,EAAYtuR,MAAM20N,IAAM45D,GAAsBxjS,EAAMt8G,IAAKs8G,EAAMiV,MAAM,uBAAwB,qBAAsBmuR,GACrIG,EAAYhjV,QAAUgjV,EAAYtuR,MAAM,YAAckuR,EAAc5oD,GACpEgpD,EAAYtuR,MAAM,cAAgBouR,EAC3BE,CAAW,IAEpB5+O,EAAO36L,QAAQs5a,EAAa,GAEhC,CACA,SAASE,GAAsBtxE,EAAKuxE,EAAUC,EAAcN,GAC1D,MACEO,KAAM70Z,EACN80Z,OAAQpoY,EACR,CAACkoY,GAAeG,GACdT,EACJ,IAAIU,EACAL,IACFK,EAAiC,MAAjBD,OAAwB,EAASA,EAAcJ,GAC3DK,IACF5xE,EAAM4xE,IAGV,MAAMpgZ,EAAM,IAAI/F,KAAKuvB,IAAIglT,GAWzB,OAVIpjV,IAASg1Z,IACXpgZ,EAAI5U,KAAOA,GAET0sB,GACF9yC,OAAOiC,KAAK6wC,GAAQ0S,OAAO38C,SAAQ1I,IAC7BA,GACF66B,EAAI+vQ,aAAar0P,IAAIv2C,EAAK2yC,EAAO3yC,GACnC,IAGG66B,EAAIzvB,IACb,CAEA,MAAM8va,GAAwB,uBAC9B,MAAMC,GACJ,WAAAxzY,CAAYjP,GACV5S,KAAKs1Z,cAAW,EAChBt1Z,KAAKu1Z,oBAAiB,EACtBv1Z,KAAKw1Z,kBAAe,EACpBx1Z,KAAKi9J,gBAAa,EAClBj9J,KAAK4S,OAAS,KACd5S,KAAKiO,UAAY,KACjBjO,KAAKlB,QAAU,KACfkB,KAAK++O,OAAS,KACd/+O,KAAK4qS,WAAQ,EACb5qS,KAAKs1Z,SAAW1iZ,GAASA,EAAO0iZ,UAAmB,KACnDt1Z,KAAK4qS,MAAQ,IAAIuxC,EACjBn8U,KAAKi9J,WAAa,CACpB,CACA,OAAAjyB,GACEhrI,KAAKiO,UAAY,KACjBjO,KAAKy1Z,gBACLz1Z,KAAK++O,OAAS,KACd/+O,KAAK4S,OAAS,KACd5S,KAAKlB,QAAU,KACfkB,KAAKs1Z,SAAW,IAClB,CACA,aAAAG,GACE,MAAM12K,EAAS/+O,KAAK++O,OACpB/vO,KAAKsiE,aAAatxE,KAAKu1Z,gBACvBvmZ,KAAKsiE,aAAatxE,KAAKw1Z,cACnBz2K,IACFA,EAAO9oO,mBAAqB,KAC5B8oO,EAAO22K,WAAa,KACM,IAAtB32K,EAAO7oO,aACTlW,KAAK4qS,MAAMrwQ,SAAU,EACrBwkN,EAAO/jN,SAGb,CACA,KAAAA,GACE,IAAI26X,EACJ31Z,KAAKy1Z,gBACqC,OAArCE,EAAkB31Z,KAAKiO,YAAsB0nZ,EAAgBl+I,SAChEz3Q,KAAKiO,UAAUwpQ,QAAQz3Q,KAAK4qS,MAAO5qS,KAAKlB,QAASkB,KAAK++O,OAE1D,CACA,IAAAx/O,CAAKT,EAAS8T,EAAQ3E,GACpB,GAAIjO,KAAK4qS,MAAMnuT,QAAQy+B,MACrB,MAAM,IAAIxX,MAAM,iCAElB1D,KAAK4qS,MAAMnuT,QAAQy+B,MAAQlM,KAAK+7G,YAAY9hI,MAC5C+W,KAAKlB,QAAUA,EACfkB,KAAK4S,OAASA,EACd5S,KAAKiO,UAAYA,EACjBjO,KAAK41Z,cACP,CACA,YAAAA,GACE,MAAM,OACJhjZ,EAAM,QACN9T,GACEkB,KACJ,IAAK4S,IAAW9T,EACd,OAEF,MAAM6lT,EAAM3kT,KAAK++O,OAAS,IAAI/vO,KAAKgH,eAC7B40R,EAAQ5qS,KAAK4qS,MACnBA,EAAMnuT,QAAQqkD,MAAQ,EACtB8pQ,EAAM9mF,OAAS,EACf8mF,EAAMrwQ,SAAU,EAChB,MAAM+6X,EAAWt1Z,KAAKs1Z,SAClBA,EACFn2Y,QAAQC,UAAU/Q,MAAK,KACrB,GAAIrO,KAAK++O,SAAW4lE,IAAO3kT,KAAK4qS,MAAMrwQ,QACtC,OAAO+6X,EAAS3wG,EAAK7lT,EAAQiW,IAAI,IAChCqT,OAAM1kC,IACP,GAAIsc,KAAK++O,SAAW4lE,IAAO3kT,KAAK4qS,MAAMrwQ,QAEtC,OADAoqR,EAAIrvS,KAAK,MAAOxW,EAAQiW,KAAK,GACtBugZ,EAAS3wG,EAAK7lT,EAAQiW,IAAI,IAChC1G,MAAK,KACFrO,KAAK++O,SAAW4lE,GAAO3kT,KAAK4qS,MAAMrwQ,SACtCv6B,KAAK61Z,eAAelxG,EAAK7lT,EAAS8T,EAAO,IACxCwV,OAAM1kC,IAEPsc,KAAKiO,UAAUhQ,QAAQ,CACrBmO,KAAMu4S,EAAI1hU,OACVgB,KAAMP,EAAMmF,SACXiW,EAAS6lT,EAAK/Z,EACX,IAGR5qS,KAAK61Z,eAAelxG,EAAK7lT,EAAS8T,EAEtC,CACA,cAAAijZ,CAAelxG,EAAK7lT,EAAS8T,GACtB+xS,EAAIzuS,YACPyuS,EAAIrvS,KAAK,MAAOxW,EAAQiW,KAAK,GAE/B,MAAMiiH,EAAUl4H,EAAQk4H,SAClB,qBACJmqO,EAAoB,cACpBC,GACExuV,EAAO2tV,WACX,GAAIvpO,EACF,IAAK,MAAMltI,KAAUktI,EACnB2tL,EAAIvuS,iBAAiBtsB,EAAQktI,EAAQltI,IAGrCgV,EAAQ6xD,UACVg0P,EAAIvuS,iBAAiB,QAAS,SAAWtX,EAAQiiX,WAAa,KAAOjiX,EAAQ6xD,SAAW,IAE1Fg0P,EAAI1uS,mBAAqBjW,KAAK81Z,iBAAiBp1Z,KAAKV,MACpD2kT,EAAI+wG,WAAa11Z,KAAK+1Z,aAAar1Z,KAAKV,MACxC2kT,EAAI7/F,aAAehmN,EAAQgmN,aAE3B91M,KAAKsiE,aAAatxE,KAAKu1Z,gBACvB3iZ,EAAO4pB,QAAU2kU,GAAwBjnB,EAAeinB,GAAwBA,EAAuBC,EACvGphW,KAAKu1Z,eAAiBvmZ,KAAKV,WAAWtO,KAAKg2Z,YAAYt1Z,KAAKV,MAAO4S,EAAO4pB,SAC1EmoR,EAAIpvS,MACN,CACA,gBAAAugZ,GACE,MAAM,QACJh3Z,EACAigP,OAAQ4lE,EAAG,MACX/Z,GACE5qS,KACJ,IAAKlB,IAAY6lT,EACf,OAEF,MAAMzuS,EAAayuS,EAAIzuS,WACjBtD,EAAS5S,KAAK4S,OAGpB,IAAIg4R,EAAMrwQ,SAKNrkB,GAAc,IACY,IAAxB00R,EAAMnuT,QAAQqkD,QAChB8pQ,EAAMnuT,QAAQqkD,MAAQnxB,KAAKhT,IAAIqS,KAAK+7G,YAAY9hI,MAAO2hT,EAAMnuT,QAAQy+B,OAEjEtI,EAAO4pB,UAAY5pB,EAAO2tV,WAAWa,gBACvCpyV,KAAKsiE,aAAatxE,KAAKu1Z,gBACvB3iZ,EAAO4pB,QAAU5pB,EAAO2tV,WAAWa,cACnCphW,KAAKu1Z,eAAiBvmZ,KAAKV,WAAWtO,KAAKg2Z,YAAYt1Z,KAAKV,MAAO4S,EAAO2tV,WAAWa,eAAiBx2D,EAAMnuT,QAAQqkD,MAAQ8pQ,EAAMnuT,QAAQy+B,UAG3H,IAAfhF,GAAkB,CACpBlH,KAAKsiE,aAAatxE,KAAKu1Z,gBACvB5wG,EAAI1uS,mBAAqB,KACzB0uS,EAAI+wG,WAAa,KACjB,MAAMzya,EAAS0hU,EAAI1hU,OAEbgza,EAAuC,SAArBtxG,EAAI7/F,aAA0B6/F,EAAIn/K,aAAe,KACzE,GAAIviJ,GAAU,KAAOA,EAAS,IAAK,CACjC,MAAM2G,EAA0B,MAAnBqsa,EAA0BA,EAAkBtxG,EAAInmS,SAC7D,GAAY,MAAR50B,EAAc,CAChBghT,EAAMnuT,QAAQ0+B,IAAMxL,KAAKhT,IAAIqS,KAAK+7G,YAAY9hI,MAAO2hT,EAAMnuT,QAAQqkD,OACnE,MAAMjlC,EAA2B,gBAArB8oT,EAAI7/F,aAAiCl7N,EAAK8nG,WAAa9nG,EAAKpQ,OAGxE,GAFAoxT,EAAM9mF,OAAS8mF,EAAMtgT,MAAQuR,EAC7B+uS,EAAMyxC,WAA2B,IAAdzxC,EAAMtgT,OAAgBsgT,EAAMnuT,QAAQ0+B,IAAMyvR,EAAMnuT,QAAQqkD,QACtE9gC,KAAKiO,UACR,OAEF,MAAMsxW,EAAav/W,KAAKiO,UAAUsxW,WAIlC,GAHIA,GACFA,EAAW30E,EAAO9rS,EAASlV,EAAM+6T,IAE9B3kT,KAAKiO,UACR,OAEF,MAAMioZ,EAAY,CAChBnhZ,IAAK4vS,EAAIwxG,YACTvsa,KAAMA,EACNwiB,KAAMnpB,GAGR,YADA+c,KAAKiO,UAAU4zV,UAAUq0D,EAAWtrH,EAAO9rS,EAAS6lT,EAEtD,CACF,CAGA,MAAMkqD,EAAcj8V,EAAO2tV,WAAWK,WAQlC1jM,GAAY2xM,EAPGjkE,EAAMnzJ,OAOgB,EALxB,CACf1iI,IAAKjW,EAAQiW,IACbnrB,UAAMgP,EACNwT,KAAMnpB,IAGN+c,KAAKy3I,MAAMo3N,IAEX5vW,EAAOvb,MAAM,GAAGT,mBAAwB6b,EAAQiW,OAChD/U,KAAKiO,UAAUhQ,QAAQ,CACrBmO,KAAMnpB,EACNgB,KAAM0gU,EAAIvhU,YACT0b,EAAS6lT,EAAK/Z,GAErB,CAEJ,CACA,WAAAorH,GACE,IAAKh2Z,KAAK4S,OAAQ,OAClB,MAAMi8V,EAAc7uW,KAAK4S,OAAO2tV,WAAWI,aAE3C,GAAIzjM,GAAY2xM,EADG7uW,KAAK4qS,MAAMnzJ,OACW,GACvCz3I,KAAKy3I,MAAMo3N,OACN,CACL,IAAIunD,EACJn3Z,EAAOyO,KAAK,yBAA2D,OAAjC0oZ,EAAgBp2Z,KAAKlB,cAAmB,EAASs3Z,EAAcrhZ,OACrG,MAAM9G,EAAYjO,KAAKiO,UACnBA,IACFjO,KAAKy1Z,gBACLxnZ,EAAUk0V,UAAUniW,KAAK4qS,MAAO5qS,KAAKlB,QAASkB,KAAK++O,QAEvD,CACF,CACA,KAAAtnG,CAAMo3N,GACJ,MAAM,QACJ/vW,EAAO,MACP8rS,GACE5qS,KACJA,KAAKi9J,WAAa2xM,GAAcC,EAAajkE,EAAMnzJ,OACnDmzJ,EAAMnzJ,QACNx4I,EAAOyO,KAAK,GAAGzqB,OAAS,eAAiBA,OAAS,2BAAsC,MAAX6b,OAAkB,EAASA,EAAQiW,iBAAiB61R,EAAMnzJ,SAASo3N,EAAYrN,kBAAkBxhW,KAAKi9J,gBAEnLj9J,KAAKy1Z,gBACLz1Z,KAAK++O,OAAS,KAEd/vO,KAAKsiE,aAAatxE,KAAKw1Z,cACvBx1Z,KAAKw1Z,aAAexmZ,KAAKV,WAAWtO,KAAK41Z,aAAal1Z,KAAKV,MAAOA,KAAKi9J,WACzE,CACA,YAAA84P,CAAavxa,GACX,MAAMomT,EAAQ5qS,KAAK4qS,MACnBA,EAAM9mF,OAASt/N,EAAMs/N,OACjBt/N,EAAM6xa,mBACRzrH,EAAMtgT,MAAQ9F,EAAM8F,MAExB,CACA,WAAAs5W,GACE,IAAI/lX,EAAS,KACb,GAAImiB,KAAK++O,QAAUq2K,GAAsBh2Z,KAAKY,KAAK++O,OAAOu3K,yBAA0B,CAClF,MAAMj2E,EAAYrgV,KAAK++O,OAAOw3K,kBAAkB,OAChD14a,EAASwiW,EAAY5sV,WAAW4sV,GAAa,IAC/C,CACA,OAAOxiW,CACT,CACA,iBAAA04a,CAAkB3xa,GAChB,OAAIob,KAAK++O,QAAU,IAAI11O,OAAO,IAAIzkB,qBAAyB,MAAMwa,KAAKY,KAAK++O,OAAOu3K,yBACzEt2Z,KAAK++O,OAAOw3K,kBAAkB3xa,GAEhC,IACT,EAgBF,MAAM65W,GAAY,qBAClB,MAAM+3D,GACJ,WAAA30Y,CAAYjP,GACV5S,KAAKy2Z,gBAAa,EAClBz2Z,KAAKu1Z,oBAAiB,EACtBv1Z,KAAKoK,QAAU,KACfpK,KAAKwe,SAAW,KAChBxe,KAAKgtR,gBAAa,EAClBhtR,KAAKlB,QAAU,KACfkB,KAAK4S,OAAS,KACd5S,KAAKiO,UAAY,KACjBjO,KAAK4qS,WAAQ,EACb5qS,KAAK++O,OAAS,KACd/+O,KAAKy2Z,WAAa7jZ,EAAO6jZ,YAAcC,GACvC12Z,KAAKgtR,WAAa,IAAIh+Q,KAAK0rB,gBAC3B16B,KAAK4qS,MAAQ,IAAIuxC,CACnB,CACA,OAAAnxM,GACEhrI,KAAK++O,OAAS/+O,KAAKiO,UAAYjO,KAAKlB,QAAUkB,KAAK4S,OAAS5S,KAAKoK,QAAU,KAC3EpK,KAAKy1Z,gBACLz1Z,KAAKwe,SAAW,KAEhBxe,KAAKy2Z,WAAaz2Z,KAAKgtR,WAAahtR,KAAK4qS,MAAQ,IACnD,CACA,aAAA6qH,GACMz1Z,KAAKgtR,aAAehtR,KAAK4qS,MAAMnuT,QAAQ0+B,MACzCnb,KAAK4qS,MAAMrwQ,SAAU,EACrBv6B,KAAKgtR,WAAWhyP,QAEpB,CACA,KAAAA,GACE,IAAI26X,EACJ31Z,KAAKy1Z,gBACqC,OAArCE,EAAkB31Z,KAAKiO,YAAsB0nZ,EAAgBl+I,SAChEz3Q,KAAKiO,UAAUwpQ,QAAQz3Q,KAAK4qS,MAAO5qS,KAAKlB,QAASkB,KAAKwe,SAE1D,CACA,IAAAjf,CAAKT,EAAS8T,EAAQ3E,GACpB,MAAM28R,EAAQ5qS,KAAK4qS,MACnB,GAAIA,EAAMnuT,QAAQy+B,MAChB,MAAM,IAAIxX,MAAM,iCAElBknS,EAAMnuT,QAAQy+B,MAAQlM,KAAK+7G,YAAY9hI,MACvC,MAAM0ta,EAgIV,SAA8B73Z,EAAS87B,GACrC,MAAM+7X,EAAa,CACjBz3Z,OAAQ,MACR/R,KAAM,OACNypa,YAAa,cACbh8X,SACAo8F,QAAS,IAAIhoH,KAAKs8P,QAAQzrQ,EAAS,CAAC,EAAGf,EAAQk4H,WAE7Cl4H,EAAQ6xD,UACVgmW,EAAW3/R,QAAQvmG,IAAI,QAAS,SAAW3xB,EAAQiiX,WAAa,IAAMl+W,OAAO/D,EAAQ6xD,SAAW,IAElG,OAAOgmW,CACT,CA5IuBE,CAAqB/3Z,EAASkB,KAAKgtR,WAAWpyP,QAC3D2kV,EAAatxW,EAAUsxW,WACvBt9Q,EAAyC,gBAAzBnjG,EAAQgmN,aACxBgyM,EAAS70T,EAAgB,aAAe,UACxC,qBACJk/P,EAAoB,cACpBC,GACExuV,EAAO2tV,WACXvgW,KAAKlB,QAAUA,EACfkB,KAAK4S,OAASA,EACd5S,KAAKiO,UAAYA,EACjBjO,KAAKoK,QAAUpK,KAAKy2Z,WAAW33Z,EAAS63Z,GACxC3nZ,KAAKsiE,aAAatxE,KAAKu1Z,gBACvB3iZ,EAAO4pB,QAAU2kU,GAAwBjnB,EAAeinB,GAAwBA,EAAuBC,EACvGphW,KAAKu1Z,eAAiBvmZ,KAAKV,YAAW,KACpCtO,KAAKy1Z,gBACLxnZ,EAAUk0V,UAAUv3D,EAAO9rS,EAASkB,KAAKwe,SAAS,GACjD5L,EAAO4pB,SACVxtB,KAAK8P,MAAM9e,KAAKoK,SAASiE,MAAKmQ,IAC5Bxe,KAAKwe,SAAWxe,KAAK++O,OAASvgO,EAC9B,MAAMsiB,EAAQnxB,KAAKhT,IAAIqS,KAAK+7G,YAAY9hI,MAAO2hT,EAAMnuT,QAAQy+B,OAO7D,GANAlM,KAAKsiE,aAAatxE,KAAKu1Z,gBACvB3iZ,EAAO4pB,QAAU4kU,EACjBphW,KAAKu1Z,eAAiBvmZ,KAAKV,YAAW,KACpCtO,KAAKy1Z,gBACLxnZ,EAAUk0V,UAAUv3D,EAAO9rS,EAASkB,KAAKwe,SAAS,GACjD4iV,GAAiBtgU,EAAQ8pQ,EAAMnuT,QAAQy+B,SACrCsD,EAASyyL,GAAI,CAChB,MAAM,OACJhuN,EAAM,WACNG,GACEo7B,EACJ,MAAM,IAAIu4Y,GAAW3za,GAAc,8BAA+BH,EAAQu7B,EAC5E,CAGA,OAFAosR,EAAMnuT,QAAQqkD,MAAQA,EACtB8pQ,EAAMtgT,MAgHZ,SAA0B0sI,GACxB,MAAMggS,EAAehgS,EAAQluH,IAAI,iBACjC,GAAIkuZ,EAAc,CAChB,MAAMC,EATV,SAA4BC,GAC1B,MAAMr5a,EAAS4gX,GAAU36V,KAAKozZ,GAC9B,GAAIr5a,EACF,OAAOgf,SAAShf,EAAO,IAAMgf,SAAShf,EAAO,IAAM,CAEvD,CAI4Bs5a,CAAmBH,GAC3C,GAAI98E,EAAe+8E,GACjB,OAAOA,CAEX,CACA,MAAMj7Q,EAAgBhlB,EAAQluH,IAAI,kBAClC,GAAIkzI,EACF,OAAOn/I,SAASm/I,EAEpB,CA5HoBo7Q,CAAiB54Y,EAASw4G,UAAY4zK,EAAMtgT,MACtDi1X,GAAcrlC,EAAetnU,EAAOotW,eAC/BhgX,KAAKq3Z,kBAAkB74Y,EAAUosR,EAAO9rS,EAAS8T,EAAOotW,cAAeT,GAE5Et9Q,EACKzjF,EAASizE,cAEW,SAAzB3yF,EAAQgmN,aACHtmM,EAASiuP,OAEXjuP,EAASv6B,MAAM,IACrBoqB,MAAK+hU,IACN,MAAM5xT,EAAWxe,KAAKwe,SACtB,IAAKA,EACH,MAAM,IAAI9a,MAAM,oBAElBsL,KAAKsiE,aAAatxE,KAAKu1Z,gBACvB3qH,EAAMnuT,QAAQ0+B,IAAMxL,KAAKhT,IAAIqS,KAAK+7G,YAAY9hI,MAAO2hT,EAAMnuT,QAAQqkD,OACnE,MAAMx2C,EAAQ8lV,EAAa0mF,GACvBxsa,IACFsgT,EAAM9mF,OAAS8mF,EAAMtgT,MAAQA,GAE/B,MAAM4kX,EAAiB,CACrBn6V,IAAKyJ,EAASzJ,IACdnrB,KAAMwmV,EACNhkU,KAAMoS,EAASv7B,QAEbs8X,IAAerlC,EAAetnU,EAAOotW,gBACvCT,EAAW30E,EAAO9rS,EAASsxU,EAAc5xT,GAE3CvQ,EAAU4zV,UAAUqN,EAAgBtkE,EAAO9rS,EAAS0f,EAAS,IAC5D4J,OAAM1kC,IAEP,GADAsrB,KAAKsiE,aAAatxE,KAAKu1Z,gBACnB3qH,EAAMrwQ,QACR,OAIF,MAAMnuB,EAAQ1oB,GAAYA,EAAM0oB,MAAV,EAChBnoB,EAAQP,EAAeA,EAAMmF,QAAb,KACtBolB,EAAUhQ,QAAQ,CAChBmO,OACAnoB,QACC6a,EAASpb,EAAQA,EAAMo9W,QAAU,KAAMl2D,EAAM,GAEpD,CACA,WAAAg5D,GACE,IAAI/lX,EAAS,KACb,GAAImiB,KAAKwe,SAAU,CACjB,MAAM6hU,EAAYrgV,KAAKwe,SAASw4G,QAAQluH,IAAI,OAC5CjrB,EAASwiW,EAAY5sV,WAAW4sV,GAAa,IAC/C,CACA,OAAOxiW,CACT,CACA,iBAAA04a,CAAkB3xa,GAChB,OAAOob,KAAKwe,SAAWxe,KAAKwe,SAASw4G,QAAQluH,IAAIlkB,GAAQ,IAC3D,CACA,iBAAAyya,CAAkB74Y,EAAUosR,EAAO9rS,EAASkhX,EAAgB,EAAGT,GAC7D,MAAM+3C,EAAa,IAAItmC,GACjBumC,EAAS/4Y,EAAS3lB,KAAK2+Z,YACvBC,EAAO,IACJF,EAAOvpQ,OAAO3/I,MAAKzkB,IACxB,GAAIA,EAAKorC,KAIP,OAHIsiY,EAAWpmC,YACb3R,EAAW30E,EAAO9rS,EAASw4Z,EAAWrsU,QAASzsE,GAE1CW,QAAQC,QAAQ,IAAI80E,YAAY,IAEzC,MAAM0nB,EAAQhyH,EAAKxP,MACbyhB,EAAM+/G,EAAMpiI,OAelB,OAdAoxT,EAAM9mF,QAAUjoN,EACZA,EAAMmkX,GAAiBs3C,EAAWpmC,YAGpComC,EAAWj8a,KAAKugI,GACZ07S,EAAWpmC,YAAclR,GAE3BT,EAAW30E,EAAO9rS,EAASw4Z,EAAWrsU,QAASzsE,IAKjD+gW,EAAW30E,EAAO9rS,EAAS88G,EAAOp9F,GAE7Bi5Y,GAAM,IACZrvY,OAAM,IAEAjJ,QAAQE,WAGnB,OAAOo4Y,GACT,EAkCF,SAASf,GAAW53Z,EAAS63Z,GAC3B,OAAO,IAAI3nZ,KAAKm6I,QAAQrqJ,EAAQiW,IAAK4hZ,EACvC,CACA,MAAMI,WAAmBrzZ,MACvB,WAAAme,CAAYh5B,EAASujB,EAAM00V,GACzB16U,MAAMv9B,GACNmX,KAAKoM,UAAO,EACZpM,KAAK8gW,aAAU,EACf9gW,KAAKoM,KAAOA,EACZpM,KAAK8gW,QAAUA,CACjB,EAGF,MAAM42D,GAAkB,KAClBC,GAAO,CACX,MAAA1c,CAAO5pR,EAAOp9E,EAAWJ,EAAS+jX,GAChC,MAAM/5a,EAAS,GACf,IAAIitL,EAEAs5L,EACAyzD,EACA5f,EACAh0Z,EACJ,MAAMwhX,EAAMz2V,KAAKu2V,QAAUv2V,KAAKy1V,aAChC,IAAK,IAAIhqX,EAAI,EAAGA,EAAIm9a,EAAc/ya,KAAKrL,OAAQiB,IAK7C,GAJAqwL,EAAM8sP,EAAc/ya,KAAKpK,GACzBo9a,GAAY,EACZ5f,EAAS,EACTh0Z,EAAO,IACF6mL,EAAI7+I,UAAW,CAClB,IAAI6rY,EACJ,IAAK,IAAIx8a,EAAI,EAAGA,EAAIwvL,EAAI0rO,MAAMh9Z,OAAQ8B,IAChCo8a,GAAgBt4Z,KAAK0rK,EAAI0rO,MAAMl7Z,GAAG46Z,QAAU2hB,EAC9C5f,KAEAh0Z,GAAQ6mL,EAAI0rO,MAAMl7Z,GAAG46Z,MACrB2hB,GAAY,GAIhB/sP,EAAI4rO,aAAeziW,EAGfA,IAAcJ,IAChBA,GAAW,MAETokW,GAAU,GACZA,IAEAA,IAEF,MAAMuL,EAAUzD,GAAc97Z,EAAK8uF,QAC7BlnF,EAAK60Z,GAAczsW,EAAWJ,EAAS2vW,GAG9B,MAATnyR,GAA+C,OAA7BymS,EAAczmS,EAAMgzO,OAAiByzD,EAAYxzD,WAAWz4W,KAClFu4W,EAAM,IAAIqB,EAAIxxT,EAAWJ,EAAS2vW,GAClCp/C,EAAIv4W,GAAKA,EACTu4W,EAAIngW,KAAOxpB,EAAI,EACf2pX,EAAIi7C,MAAQ,OAIZj7C,EAAI51R,SAAW,GAAK7+D,KAAKjT,IAAI,GAAkC,GAA9BiT,KAAKq2B,MAAe,EAATiyW,EAAa,KACzDp6Z,EAAOxC,KAAK+oX,GAEhB,CAeF,OAbI/yO,GAASxzI,EAAOrE,SAElBqE,EAAO0hD,MAAK,CAACw4X,EAAMC,IACC,SAAdD,EAAK9zZ,MAAiC,SAAd+zZ,EAAK/zZ,KACxB,EAEL8zZ,EAAK9zZ,KAAO,GAAK+zZ,EAAK/zZ,KAAO,EACxB+zZ,EAAK/zZ,KAAO8zZ,EAAK9zZ,KAEnB8zZ,EAAK9zZ,KAAO+zZ,EAAK/zZ,OAE1BpmB,EAAO+E,SAAQwhX,GAAOD,GAAc9yO,EAAO+yO,MAEtCvmX,CACT,GAwBIo6a,GAAmBpoP,EAAeA,EAAe,CACrDs4M,eAAe,EAEfhpB,eAAgB,EAEhB+4D,uBAAmBt/Z,EAEnByH,OAAO,EAEP83Z,mBAAmB,EAEnB5R,sBAAsB,EAEtBW,wBAAwB,EAExBj0D,0BAA0B,EAC1B66B,wBAAyB,EAEzBvE,gBAAiB,GAEjB6uC,iBAAkBx7Z,IAElBy7Z,0BAA2Bz7Z,IAC3B2wX,cAAe,IAEfjF,cAAe,GAEfgwC,yBAA0B,EAE1BC,YAAa,GAEbC,cAAe,EAEfzoD,uBAAwB,IAExBrH,sBAAuB,EAEvBH,4BAA6B3rW,IAE7B6rW,sBAAkB7vW,EAElB0vW,4BAAwB1vW,EAExB8wW,wBAAyB,EAEzB+uD,sBAAsB,EAKtBC,qBAAsB,KAEtBlrC,mBAAoB,IAEpBkkB,cAAc,EAEdG,WAAY,KAEZtsB,mBAAmB,EAEnBozC,gBAAY//Z,EAEZgga,mBAAmB,EAEnBC,2BAA4B,IAE5BC,8BAA+B,GAE/BC,oBAAqB,EAErBh6K,OAAQs2K,GAER11C,aAAS/mX,EAETqnW,aAASrnW,EAET08Z,cAAU18Z,EAEV2vZ,qBAAiB3vZ,EAEjB4vZ,6BAAyB5vZ,EAEzBoga,cAj6jBF,MACE,WAAAn3Y,CAAYo3Y,GACVj5Z,KAAK++V,SAAM,EACX/+V,KAAKk5Z,iBAAmB,EACxBl5Z,KAAKm5Z,qBAAuB,EAC5Bn5Z,KAAKo5Z,gBAAkB,EACvBp5Z,KAAKq5Z,gBAAkB,EACvBr5Z,KAAKs5Z,iBAAmB,GACxBt5Z,KAAKu1W,mBAAqB,KAC1Bv1W,KAAKu5Z,WAAa,KAClBv5Z,KAAKgwO,OAAS,EACdhwO,KAAK2mX,YAAc,KACnB3mX,KAAKw5Z,YAAc,KACnBx5Z,KAAKy5Z,iBAAmB,EACxBz5Z,KAAK05Z,iBAAc,EAKnB15Z,KAAK25Z,mBAAqB,KACxB,MACEhzC,YAAatnC,EACbm6E,YAAa78D,EAAI,IACjBoC,GACE/+V,MACE,iBACJ45Z,EAAgB,MAChB7kM,GACEgqI,EACJ,IAAK1f,IAAStqH,EACZ,OAEF,MAAM9rO,EAAM8hI,YAAY9hI,MAClB2hT,EAAQ+xD,EAAOA,EAAK/xD,MAAQy0C,EAAKz0C,MACjClgT,EAAWiyW,EAAOA,EAAKjyW,SAAW20V,EAAK30V,SACvCmva,EAAc5wa,EAAM2hT,EAAMnuT,QAAQy+B,MAClC4+Y,EAAe/6D,EAAI+6D,aAEzB,GAAIlvH,EAAMrwQ,SAAWqwQ,EAAM9mF,QAAU8mF,EAAM9mF,SAAW8mF,EAAMtgT,OAAS+0V,EAAKn8G,OAAS42L,EAIjF,OAHA95Z,KAAKixW,kBAELjxW,KAAKq5Z,gBAAkB,GAKzB,IAAKO,GAAoB7kM,EAAMglM,SAAWhlM,EAAM80I,eAAiB90I,EAAM7+M,WACrE,OAEF,MAAMi8V,EAAapT,EAAIqT,sBACvB,GAAmB,OAAfD,EACF,OAEF,MAAM6nD,EAAeh6Z,KAAK05Z,YAAY1kD,kBAChCnL,EAAel6V,KAAK+2B,IAAIquL,EAAM80I,cAEpC,GAAIgwD,GAAelqZ,KAAKhT,IAAIq9Z,EAAsBtva,GAA2B,EAAfm/W,GAApB,KACxC,OAIF,MAAMowD,EAAwB9nD,EAAWt2W,IAAMguW,EACzCiL,EAAOlqE,EAAMnuT,QAAQqkD,MAAQ8pQ,EAAMnuT,QAAQqkD,MAAQ8pQ,EAAMnuT,QAAQy+B,OAAS,EAC1Eg/Y,EAAkBtvH,EAAM9mF,QAAUgxJ,GAAQ,EAC1Cz4B,EAAar8U,KAAKm6Z,gBAClBnhE,EAAS+F,EAAI/F,OACb91H,EAAQ81H,EAAO3Z,EAAKn8G,OACpBk3L,EAAcxvH,EAAMtgT,OAASqlB,KAAKhT,IAAIiuS,EAAM9mF,OAAQn0M,KAAKy2B,MAAM17C,EAAWw4O,EAAMkoI,eAAiB,IACvG,IAAIivD,EAAgBH,EAAkBL,EAAc/kD,EAAO+kD,EACvDQ,EAAgB,GAAKH,IACvBG,EAAgB1qZ,KAAKjT,IAAIm9Z,EAA4B,EAAfjvH,EAAM9mF,OAAau4H,IAE3D,MAAMi+E,EAAWJ,EAAiC,IAAftvH,EAAM9mF,OAAgBu2M,EAAgB,EAEnEE,EAAkBD,GAAYF,EAAcxvH,EAAM9mF,QAAUw2M,EAAyB,EAAdF,EAAkB/9E,EAAa29E,EAAe,IAE3H,GAAIO,GAAmBN,EACrB,OAEF,MAAMO,EAAMF,EAAsB,EAAXA,EAAej+E,EACtC,IACIo+E,EADAC,EAA2B93Z,OAAO63R,kBAGtC,IAAKggI,EAAgBp7E,EAAKn8G,MAAQ,EAAGu3L,EAAgBX,EAAcW,IAAiB,CAGlF,MAAME,EAAmB3hE,EAAOyhE,GAAetvD,WAE/C,GADAuvD,EAA2B16Z,KAAK46Z,kBAAkBZ,EAAe,IAAMQ,EAAK9va,EAAWiwa,GAAmB3hE,EAAOyhE,GAAe35D,SAC5H45D,EAA2BT,EAC7B,KAEJ,CAGA,GAAIS,GAA4BH,EAC9B,OAIF,GAAIG,EAAsC,GAAXhwa,EAC7B,OAEFq0W,EAAI07D,cAAgB17D,EAAI87D,cAAgBJ,EACpCP,EAEFl6Z,KAAK05Z,YAAYl0S,OAAOq0S,EAAclqZ,KAAKjT,IAAIs9Z,EAAcllD,GAAOlqE,EAAM9mF,QAG1E9jN,KAAK05Z,YAAY7kD,WAAWglD,GAE9B,MAAMiB,EAAuB9hE,EAAOyhE,GAAetvD,WAC/CnrW,KAAKm6Z,gBAAkBn6Z,KAAK++V,IAAInsV,OAAOmoZ,qBAAuBD,GAChE96Z,KAAKg7Z,eAAeF,GAEtB96Z,KAAKixW,aACLhyW,EAAOyO,KAAK,kBAAkB2xU,EAAK9B,KAAKof,EAAO,SAAWA,EAAKj7W,MAAQ,eAAe29V,EAAKn8G,4DACpE+2L,EAAsB5kZ,QAAQ,yDACTklZ,EAAgBllZ,QAAQ,6DACpBqlZ,EAAyBrlZ,QAAQ,8BACzD,EAAPy/V,oCACM56B,EAAemC,GAA2B,EAAbA,EAAiB,yCAC3B,EAAvBr8U,KAAKm6Z,iDACHM,OAA0C,EAAvBK,SACxC/7D,EAAI/zD,QAAQ51F,EAAO6lN,4BAA6B,CAC9C57E,OACAsd,OACA/xD,SACA,EAEJ5qS,KAAK++V,IAAMk6D,EACXj5Z,KAAK05Z,YAAc15Z,KAAKk7Z,gBACxBl7Z,KAAKi/V,mBACP,CACA,cAAA+7D,CAAeG,GACTA,IACFl8Z,EAAOuB,IAAI,0BAA0B26Z,KACrCn7Z,KAAK++V,IAAInsV,OAAOuoZ,uBAAyBA,GAE3Cn7Z,KAAKo5Z,gBAAkB,EACvBp5Z,KAAK05Z,YAAc15Z,KAAKk7Z,eAC1B,CACA,aAAAA,GACE,MAAMtoZ,EAAS5S,KAAK++V,IAAInsV,OACxB,OAAO,IAAIihW,GAAuBjhW,EAAOwoZ,eAAgBxoZ,EAAOyoZ,eAAgBzoZ,EAAOuoZ,uBACzF,CACA,iBAAAl8D,GACE,MAAM,IACJF,GACE/+V,KACJ++V,EAAItsU,GAAG2iL,EAAOkqJ,iBAAkBt/V,KAAKu/V,kBAAmBv/V,MACxD++V,EAAItsU,GAAG2iL,EAAOo2K,aAAcxrX,KAAKs7Z,cAAet7Z,MAChD++V,EAAItsU,GAAG2iL,EAAOykK,YAAa75W,KAAK85W,aAAc95W,MAC9C++V,EAAItsU,GAAG2iL,EAAOukK,cAAe35W,KAAK45W,eAAgB55W,MAClD++V,EAAItsU,GAAG2iL,EAAOmmN,gBAAiBv7Z,KAAKw7Z,iBAAkBx7Z,MACtD++V,EAAItsU,GAAG2iL,EAAOyuJ,aAAc7jW,KAAKy7Z,cAAez7Z,MAChD++V,EAAItsU,GAAG2iL,EAAO2wM,eAAgB/lZ,KAAKgmZ,gBAAiBhmZ,MACpD++V,EAAItsU,GAAG2iL,EAAOsmN,uBAAwB17Z,KAAK27Z,sBAAuB37Z,MAClE++V,EAAItsU,GAAG2iL,EAAO5yI,MAAOxiE,KAAK/B,QAAS+B,KACrC,CACA,mBAAA8/V,GACE,MAAM,IACJf,GACE/+V,KACC++V,IAGLA,EAAIzqN,IAAI8gE,EAAOkqJ,iBAAkBt/V,KAAKu/V,kBAAmBv/V,MACzD++V,EAAIzqN,IAAI8gE,EAAOo2K,aAAcxrX,KAAKs7Z,cAAet7Z,MACjD++V,EAAIzqN,IAAI8gE,EAAOykK,YAAa75W,KAAK85W,aAAc95W,MAC/C++V,EAAIzqN,IAAI8gE,EAAOukK,cAAe35W,KAAK45W,eAAgB55W,MACnD++V,EAAIzqN,IAAI8gE,EAAOmmN,gBAAiBv7Z,KAAKw7Z,iBAAkBx7Z,MACvD++V,EAAIzqN,IAAI8gE,EAAOyuJ,aAAc7jW,KAAKy7Z,cAAez7Z,MACjD++V,EAAIzqN,IAAI8gE,EAAO2wM,eAAgB/lZ,KAAKgmZ,gBAAiBhmZ,MACrD++V,EAAIzqN,IAAI8gE,EAAOsmN,uBAAwB17Z,KAAK27Z,sBAAuB37Z,MACnE++V,EAAIzqN,IAAI8gE,EAAO5yI,MAAOxiE,KAAK/B,QAAS+B,MACtC,CACA,OAAAgrI,GACEhrI,KAAK8/V,sBACL9/V,KAAKixW,aAELjxW,KAAK++V,IAAM/+V,KAAK25Z,mBAAqB,KACrC35Z,KAAK2mX,YAAc3mX,KAAKw5Z,YAAc,IACxC,CACA,iBAAAj6D,CAAkB/6W,EAAOoF,GACvBoW,KAAKm5Z,qBAAuB,EAC5Bn5Z,KAAKo5Z,gBAAkB,EACvBp5Z,KAAKk5Z,iBAAmB,EACxBl5Z,KAAK2mX,YAAc3mX,KAAKw5Z,YAAc,KACtCx5Z,KAAKgmZ,kBACLhmZ,KAAKixW,YACP,CACA,eAAA+0C,GACMhmZ,KAAKm5Z,qBAAuB,GAAKn5Z,KAAK2mX,cACxC3mX,KAAKm5Z,oBAAsBn5Z,KAAK2mX,YAAYzjJ,OAE9CljO,KAAKq5Z,gBAAkB,EACvBr5Z,KAAK27Z,wBACL37Z,KAAKu5Z,WAAa,KAClBv5Z,KAAKu1W,mBAAqB,IAC5B,CACA,qBAAAomD,GACE37Z,KAAKo5Z,gBAAkB,EACvBp5Z,KAAKs5Z,iBAAmB,EAC1B,CACA,aAAAgC,CAAc92a,EAAOoF,GACnB,MAAMy1V,EAAOz1V,EAAKy1V,KAClB,IAAIr/U,KAAK47Z,eAAev8E,GAAxB,CAIE,IAAIw8E,EADN,IAAKx8E,EAAKpB,YAERj+U,KAAK2mX,YAActnC,EACnBr/U,KAAKw5Z,YAA0C,OAA3BqC,EAAajya,EAAK+yW,MAAgBk/D,EAAa,KAErE77Z,KAAKixW,aACLjxW,KAAKgwO,MAAQhhO,KAAKi8H,YAAYjrI,KAAK25Z,mBAAoB,IAPvD,CAQF,CACA,gBAAA6B,CAAiBh3a,EAAOoF,GACtBoW,KAAKixW,YACP,CACA,OAAAhzW,CAAQzZ,EAAOoF,GACb,IAAIA,EAAK2wS,MAGT,OAAQ3wS,EAAKk3W,SACX,KAAK1mB,EAAa0hF,uBAClB,KAAK1hF,EAAa2hF,oBAEhB/7Z,KAAKm5Z,qBAAuB,EAC5Bn5Z,KAAKo5Z,gBAAkB,EACvB,MACF,KAAKh/E,EAAao0B,kBAChB,CACE,MAAMnvB,EAAOz1V,EAAKy1V,MACZ,YACJsnC,EACA6yC,YAAa78D,GACX38V,KACJ,GAAIq/U,GAAQsnC,GAAetnC,EAAK9B,KAAOopC,EAAYppC,IAAM8B,EAAKn8G,QAAUyjJ,EAAYzjJ,MAAO,CACzF,MAAMj6O,EAAM8hI,YAAY9hI,MAClB2hT,EAAQ+xD,EAAOA,EAAK/xD,MAAQy0C,EAAKz0C,MACjCivH,EAAc5wa,EAAM2hT,EAAMnuT,QAAQy+B,MAClC45V,EAAOlqE,EAAMnuT,QAAQqkD,MAAQ8pQ,EAAMnuT,QAAQqkD,MAAQ8pQ,EAAMnuT,QAAQy+B,OAAS,EAEhF,GADwB0vR,EAAM9mF,QAAUgxJ,GAAQ,EAC3B,CACnB,MAAMklD,EAAeh6Z,KAAK05Z,YAAY1kD,kBACtCh1W,KAAK05Z,YAAYl0S,OAAOq0S,EAAclqZ,KAAKjT,IAAIs9Z,EAAcllD,GAAOlqE,EAAM9mF,OAC5E,MACE9jN,KAAK05Z,YAAY7kD,WAAWglD,EAEhC,CACA,KACF,EAEN,CACA,iBAAAe,CAAkBoB,EAAoBC,EAAWC,EAAcC,GAG7D,OAFoBH,EAAqBE,EAAeD,GAChCE,EAAWn8Z,KAAKk5Z,iBAAmB,EAE7D,CACA,aAAAuC,CAAcj3a,EAAOoF,GACnB,MAAMgpB,EAAS5S,KAAK++V,IAAInsV,QAClB,QACJn2B,GACEmN,EAAKghT,MACHwxH,EAAgB3/a,EAAQ0+B,IAAM1+B,EAAQy+B,MACxCg/T,EAAekiF,KACjBp8Z,KAAKk5Z,iBAAmBkD,EAAgB,KAEtCxya,EAAKk3W,QAAQ1gB,KACfpgV,KAAK05Z,YAAY1rY,OAAOpb,EAAOypZ,gBAAiBzpZ,EAAO0pZ,iBAEvDt8Z,KAAK05Z,YAAY1rY,OAAOpb,EAAOwoZ,eAAgBxoZ,EAAOyoZ,eAE1D,CACA,YAAAvhD,CAAat1X,GAAO,KAClB66V,EAAI,KACJsd,IAEA,MAAM/xD,EAAQ+xD,EAAOA,EAAK/xD,MAAQy0C,EAAKz0C,MAIvC,GAHIy0C,EAAKrhW,OAAS2gX,IAChB3+V,KAAK05Z,YAAY7kD,WAAWjqE,EAAMnuT,QAAQqkD,MAAQ8pQ,EAAMnuT,QAAQy+B,QAE9Dlb,KAAK47Z,eAAev8E,GAAxB,CAYA,GARAr/U,KAAKixW,aAED5xB,EAAKn8G,QAAUljO,KAAKq5Z,iBACtBr5Z,KAAKq5Z,gBAAkB,GAEzBr5Z,KAAKo5Z,gBAAkB,EAGnBp5Z,KAAK++V,IAAInsV,OAAO2pZ,sBAAuB,CACzC,MAAM7xa,EAAWiyW,EAAOA,EAAKjyW,SAAW20V,EAAK30V,SACvCw4O,EAAQljO,KAAK++V,IAAI/F,OAAO3Z,EAAKn8G,OAC7Bs5L,GAAet5L,EAAMpf,OAASof,EAAMpf,OAAOr+L,MAAQ,GAAKmlR,EAAM9mF,OAC9D24M,GAAkBv5L,EAAMpf,OAASof,EAAMpf,OAAOp5N,SAAW,GAAKA,EACpEw4O,EAAMpf,OAAS,CACbr+L,MAAO+2Y,EACP9xa,SAAU+xa,GAEZv5L,EAAMynI,YAAch7V,KAAKy2B,MAAM,EAAIo2X,EAAcC,EACnD,CACA,GAAIp9E,EAAKpB,YAAa,CACpB,MAAMy+E,EAAmB,CACvB9xH,QACAy0C,OACAsd,OACA9wW,GAAIwzV,EAAKrhW,MAEXgiB,KAAK45W,eAAexkK,EAAOukK,cAAe+iD,GAC1Cr9E,EAAKpB,aAAc,CACrB,MAEEj+U,KAAKm5Z,oBAAsB95E,EAAKn8G,KAhClC,CAkCF,CACA,cAAA02I,CAAep1X,EAAOoF,GACpB,MAAM,KACJy1V,EAAI,KACJsd,GACE/yW,EACEghT,EAAgB,MAAR+xD,GAAgBA,EAAK/xD,MAAM9mF,OAAS64I,EAAK/xD,MAAQy0C,EAAKz0C,MACpE,GAAIA,EAAMrwQ,QACR,OAEF,GAAIv6B,KAAK47Z,eAAev8E,GACtB,OAKF,MAAMs9E,EAAe/xH,EAAM0xC,QAAQnhU,IAAMyvR,EAAMnuT,QAAQy+B,MAAQvL,KAAKjT,IAAIkuS,EAAMnuT,QAAQqkD,MAAQ8pQ,EAAMnuT,QAAQy+B,MAAOlb,KAAK05Z,YAAY1kD,mBACpIh1W,KAAK05Z,YAAYl0S,OAAOm3S,EAAc/xH,EAAM9mF,QAC5C8mF,EAAMyxC,WAAar8U,KAAKm6Z,gBACpB96E,EAAKpB,YACPj+U,KAAKy5Z,iBAAmBkD,EAAe,IAEvC38Z,KAAKy5Z,iBAAmB,CAE5B,CACA,cAAAmC,CAAev8E,GAEb,OAAOA,EAAKrhW,OAAS2gX,IAAsC,gBAAZtf,EAAK9B,EACtD,CACA,UAAA0zB,GACMjxW,KAAKgwO,OAAS,IAChBhhO,KAAKm8H,cAAcnrI,KAAKgwO,OACxBhwO,KAAKgwO,OAAS,EAElB,CACA,kBAAI4sL,GACF,MAAM,aACJC,EAAY,aACZ/C,GACE95Z,KAAK++V,IACH1iB,EAAar8U,KAAKm6Z,gBAClB2C,EAAgB98Z,KAAK++V,IAAInsV,OAAOmqZ,mBAChCC,EAAeh9Z,KAAKi9Z,cAAc5gF,EAAYy9E,EAAc+C,EAAc,EAAGC,EAAe,EAAG,GACrG,GAAIE,GAAgB,EAClB,OAAOA,EAET,MAAM9X,EAAallZ,KAAK++V,IAAImmD,WACtBgY,EAAUvtZ,KAAKjT,IAAIiT,KAAKhT,IAAIuoZ,EAAY4U,GAAe+C,GAE7D,OADA59Z,EAAOyO,KAAK,kFAAkFw3Y,gBAAyBgY,KAChHA,CACT,CACA,mBAAIC,GACF,OAAIn9Z,KAAKs5Z,kBACC,EAEHt5Z,KAAKq5Z,cACd,CAGA,iBAAIwB,GACF,MAAMsC,EAAkBn9Z,KAAKm9Z,gBAEvBC,EADcp9Z,KAAK05Z,YACO3kD,cAC1BsoD,EAAkBr9Z,KAAKm5Z,qBAAuB,EAEpD,IAAyB,IAArBgE,KAA4BC,IAAgBC,GAAmBr9Z,KAAKs5Z,mBAAqBt5Z,KAAKs9Z,mBAChG,OAAOH,EAIT,MAAMI,EAAmBH,GAAeC,EAAkBr9Z,KAAKw9Z,sBAAwBx9Z,KAAK48Z,eAG5F,IAAyB,IAArBO,EAAwB,CAC1B,MAAMnkE,EAASh5V,KAAK++V,IAAI/F,OACxB,GAAIA,EAAOx/W,OAASm2B,KAAKhT,IAAIwga,EAAiBI,IAAqBvkE,EAAOmkE,GAAiBzyD,WAAa1R,EAAOukE,GAAkB7yD,UAC/H,OAAOyyD,CAEX,CAKA,OAFAn9Z,KAAKq5Z,eAAiBkE,EACtBv9Z,KAAKs5Z,iBAAmBt5Z,KAAKs9Z,kBACtBC,CACT,CACA,eAAAD,GACE,MAAO,GAAGt9Z,KAAKm6Z,mBAAmBn6Z,KAAKy9Z,qBAAqBpoZ,QAAQ,IACtE,CACA,mBAAAmoZ,GACE,MAAM,YACJ72C,EAAW,YACX6yC,EAAW,IACXz6D,GACE/+V,MACE,aACJ68Z,EAAY,OACZjqZ,EAAM,aACNknZ,GACE/6D,EACE2+D,EAAsBlE,EAAcA,EAAY9ua,SAAWi8X,EAAcA,EAAYj8X,SAAW,EAChGiza,EAAQ39Z,KAAKm6Z,gBAEbF,EAAwBj6Z,KAAKy9Z,qBACnC,IAAIG,EAAWhrZ,EAAOirZ,mBAClBC,EAAalrZ,EAAOmoZ,qBAGxB,GAAId,EAAuB,CACzB,MAAM8D,EAAa/9Z,KAAKi9Z,cAAcU,EAAO7D,EAAc+C,EAAc5C,EAAuB,EAAG2D,EAAUE,GAC7G,GAAIC,GAAc,EAChB,OAAOA,CAEX,CAEA,IAAIhB,EAAqBW,EAAsB/tZ,KAAKjT,IAAIgha,EAAqB9qZ,EAAOmqZ,oBAAsBnqZ,EAAOmqZ,mBACjH,IAAK9C,EAAuB,CAE1B,MAAMR,EAAmBz5Z,KAAKy5Z,iBAC9B,GAAIA,EAAkB,CAOpBsD,GADwBW,EAAsB/tZ,KAAKjT,IAAIgha,EAAqB9qZ,EAAOorZ,iBAAmBprZ,EAAOorZ,iBACtEvE,EACvCx6Z,EAAO2S,KAAK,2BAA2BjC,KAAKy2B,MAAM,IAAOqzX,iDAAgE9pZ,KAAKy2B,MAAM,IAAO22X,SAE3Ia,EAAWE,EAAa,CAC1B,CACF,CACA,MAAMG,EAAYj+Z,KAAKi9Z,cAAcU,EAAO7D,EAAc+C,EAAc5C,EAAuB8C,EAAoBa,EAAUE,GAE7H,GADA7+Z,EAAO2S,KAAK,SAASqoZ,EAAwB,uBAAyB,4CAA4CgE,KAC9GA,GAAa,EACf,OAAOA,EAGT,MAAMC,EAAWn/D,EAAI/F,OAAO8gE,GACtBqE,EAAYp/D,EAAI/F,OAAO+F,EAAIq/D,WACjC,OAAiB,MAAZF,OAAmB,EAASA,EAAS7kE,UAAyB,MAAb8kE,OAAoB,EAASA,EAAU9kE,SACpFygE,EAGF/6D,EAAIq/D,SACb,CACA,kBAAAX,GACE,MAAM1+D,EAAM/+V,KAAK++V,IACXhqI,EAAQgqI,EAAIhqI,MAClB,IAAKA,EACH,OAAOn4N,IAIT,MAAMitW,EAAe90I,GAAgC,IAAvBA,EAAM80I,aAAqBl6V,KAAK+2B,IAAIquL,EAAM80I,cAAgB,EAClFsI,EAAapT,EAAIqT,sBACvB,OAAQD,EAAaA,EAAWt2W,IAAM,GAAKguW,CAC7C,CACA,aAAAswD,GACE,OAAOn6Z,KAAK05Z,YAAY3kD,cAAgB/0W,KAAK05Z,YAAY/lD,cAAgB3zW,KAAK++V,IAAInsV,OAAOuoZ,sBAC3F,CACA,aAAA8B,CAAcvnD,EAAWokD,EAAc+C,EAAc5C,EAAuB8C,EAAoBa,EAAUE,GACxG,IAAI1vD,EACJ,MAAMiwD,EAAmBpE,EAAwB8C,EAC3C5D,EAAsBn5Z,KAAKm5Z,oBAC3BmF,GAA8C,IAAzBnF,EAA6Bn5Z,KAAK++V,IAAImmD,WAAaiU,GACxE,YACJxyC,EAAW,YACX6yC,GACEx5Z,MACE,OACJg5V,EAAM,eACNulE,EAAc,UACdH,EAAS,OACTxrZ,GACE5S,KAAK++V,IACT,GAAsB,IAAlB/F,EAAOx/W,OACT,OAAO,EAET,MAAM0pP,EAAQ81H,EAAOslE,GACfl+E,IAAmB,MAATl9G,GAAqD,OAAnCkrI,EAAiBlrI,EAAM49H,WAAoBsN,EAAehuB,MACtFg5E,GAAgC,IAAfgF,IAA6C,IAAzBjF,EAC3C,IAAIqF,EACAhpD,EAAoB,MACpBC,GAA6B,MAATvyI,OAAgB,EAASA,EAAMsnI,YAAc,EACrE,MAAM,gBACJmL,EAAe,gBACfsB,GACErkW,EACE2iW,EAAqBv1W,KAAKu1W,qBAAuBv1W,KAAKu1W,mBApqBhE,SAA+BgpD,GAC7B,OAAOA,EAAe38X,QAAO,CAAC2zU,EAAoBlkP,KAChD,IAAIotS,EAAalpD,EAAmB55O,OAAOtK,EAAMz/C,SAC5C6sV,IACHA,EAAalpD,EAAmB55O,OAAOtK,EAAMz/C,SAAW,CACtDokG,OAAQ,GACRjoB,SAAU,CACR,EAAG,GAEL2wQ,YAAY,EACZC,eAAe,IAGnBF,EAAWzoP,OAAO36L,KAAKg2I,GACvB,MAAMutS,EAAcvtS,EAAM08B,UAAY,IAUtC,OATA0wQ,EAAW1wQ,SAAS6wQ,IAAgBH,EAAW1wQ,SAAS6wQ,IAAgB,GAAK,EAC7EH,EAAWC,WAAaD,EAAWC,YAAcrtS,EAAM9rF,QACvDk5X,EAAWE,cAAgBF,EAAWE,eAAiBttS,EAAM0pO,WACzD0jE,EAAWC,aACbnpD,EAAmBspD,iBAAkB,GAEnCJ,EAAWE,gBACbppD,EAAmBupD,oBAAqB,GAEnCvpD,CAAkB,GACxB,CACDspD,iBAAiB,EACjBC,oBAAoB,EACpBnjS,OAAQ,CAAC,GAEb,CAsoBqFojS,CAAsBR,IACvG,GAAInF,EAAgB,CAClB,IAA6B,IAAzBp5Z,KAAKo5Z,eACP,OAAOp5Z,KAAKo5Z,eAEd,MAAMG,EAAav5Z,KAAKu5Z,aAAev5Z,KAAKu5Z,WA1oBlD,SAAuBvgE,EAAQuc,EAAoBukD,EAAc+C,GAC/D,OAAO7jE,EAAOz1W,MAAMu2a,EAAc+C,EAAe,GAAGj7X,QAAO,CAACo9X,EAAO97L,KACjE,IAAKA,EAAMw0H,SACT,OAAOsnE,EAET,MAAMvzD,EAAcvoI,EAAMuoI,YAC1B,IAAIwzD,EAAOD,EAAM97L,EAAMw0H,UAClBunE,IACHD,EAAM97L,EAAMw0H,UAAYunE,EAAO,CAC7BC,WAAYtia,IACZ6xO,UAAW7xO,IACXuia,aAAcvia,IACdwia,SAAU,EACVC,YAAa,CACXC,IAAK,GAEPvxQ,SAAU,CACR,EAAK,GAEP8wQ,iBAAkBpzD,EAClBhB,cAAe,IAGnBw0D,EAAKC,WAAavvZ,KAAKjT,IAAIuia,EAAKC,WAAYh8L,EAAMm2H,SAClD,MAAMkmE,EAAsB5vZ,KAAKjT,IAAIwmO,EAAM9lP,OAAQ8lP,EAAM/lP,OAsBzD,OArBA8hb,EAAKxwL,UAAY9+N,KAAKjT,IAAIuia,EAAKxwL,UAAW8wL,GAC1CN,EAAKE,aAAexvZ,KAAKjT,IAAIuia,EAAKE,aAAcj8L,EAAMsnI,WACtDy0D,EAAKG,SAAWzvZ,KAAKhT,IAAIsia,EAAKG,SAAUl8L,EAAM1jM,OAC9Cy/X,EAAKx0D,eAAiBvnI,EAAMunI,cAC5Bw0D,EAAKI,YAAYn8L,EAAMmoI,aAAe4zD,EAAKI,YAAYn8L,EAAMmoI,aAAe,GAAK,EAC7EI,GACFA,EAAY7oX,SAAQgpX,IAClB,IAAKA,EACH,OAEF,MAAM4zD,EAAajqD,EAAmB55O,OAAOiwO,GACxC4zD,IAILP,EAAKJ,gBAAkBI,EAAKJ,iBAAmBtpD,EAAmBspD,gBAAkBW,EAAWd,WAAac,EAAWb,gBAAkBppD,EAAmBspD,kBAAoBtpD,EAAmBupD,mBACnM/kb,OAAOiC,KAAKwjb,EAAWzxQ,UAAUnrK,SAAQmrK,IACvCkxQ,EAAKlxQ,SAASA,IAAakxQ,EAAKlxQ,SAASA,IAAa,GAAKyxQ,EAAWzxQ,SAASA,EAAS,IACxF,IAGCixQ,CAAK,GACX,CAAC,EACN,CA0lB+DS,CAAczmE,EAAQuc,EAAoBukD,EAAc+C,IAC3G6C,EA/wBZ,SAA2BnG,EAAY/jD,EAAmBE,EAAWC,EAAiBsB,GACpF,MAAM0oD,EAAY5lb,OAAOiC,KAAKu9a,GACxB1jD,EAAwC,MAAnBF,OAA0B,EAASA,EAAgB5nN,SACxE6nN,EAA0C,MAAnBD,OAA0B,EAASA,EAAgBtb,WAC1EulE,EAAe/pD,GAAuD,IAAjCh5W,SAASg5W,GAEpD,IAAIgqD,GAAY,EACZC,GAAuB,EACvBrxL,EAAY7xO,IACZuia,EAAevia,IACfsia,EAAatia,IACbmja,EAAgB,EAChBV,EAAc,GAClB,MAAM,UACJnoD,EAAS,mBACTC,GACEH,GAAyBxB,EAAmByB,GAChD,IAAK,IAAI19X,EAAIomb,EAAUnmb,OAAQD,KAAM,CACnC,MAAM0lb,EAAO1F,EAAWoG,EAAUpmb,IAClCsmb,EAAYZ,EAAKlxQ,SAAS,GAAK,EAC/B0gF,EAAY9+N,KAAKjT,IAAI+xO,EAAWwwL,EAAKxwL,WACrC0wL,EAAexvZ,KAAKjT,IAAIyia,EAAcF,EAAKE,cAC3CD,EAAavvZ,KAAKjT,IAAIwia,EAAYD,EAAKC,YACvC,MAAMc,EAAsB7oD,EAAmBnzW,QAAO07G,GAASu/S,EAAKI,YAAY3/S,GAAS,IACrFsgT,EAAoBxmb,OAAS,IAC/Bsmb,GAAuB,EACvBT,EAAcW,EAElB,CACAvxL,EAAYyrG,EAAezrG,GAAaA,EAAY,EACpD0wL,EAAejlF,EAAeilF,GAAgBA,EAAe,EAC7D,MAAMc,EAAYtwZ,KAAKhT,IAAI,KAAM8xO,GAC3ByxL,EAAevwZ,KAAKhT,IAAI,GAAIwia,GA0DlC,OAzDAD,EAAahlF,EAAeglF,GAAcA,EAAaxpD,EACvDA,EAAY/lW,KAAKhT,IAAIuia,EAAYxpD,GAE5BoqD,IACHtqD,OAAoB58W,EACpByma,EAAc,IAoDT,CACL3nE,SAnDeioE,EAAU/9X,QAAO,CAAC92C,EAAUylX,KAE3C,MAAM4vD,EAAgB5G,EAAWhpD,GACjC,GAAIA,IAAczlX,EAChB,OAAOA,EAET,GAAIq1a,EAAcjB,WAAaxpD,EAE7B,OADA8B,GAA8BjH,EAAW,kBAAkB4vD,EAAcjB,oCAAoCxpD,KACtG5qX,EAET,IAAKq1a,EAActB,gBAEjB,OADArnD,GAA8BjH,EAAW,yDAClCzlX,EAET,GAAI8qX,GAAwBrF,EAAUn1X,QAAQw6X,EAAqBp6X,UAAU,EAAG,IAAM,IAAM,EAE1F,OADAg8X,GAA8BjH,EAAW,2BAA2BqF,gBAC7D9qX,EAET,GAAI+qX,IAAuB+pD,GACzB,IAAKO,EAAcpyQ,SAAS8nN,GAE1B,OADA2B,GAA8BjH,EAAW,sBAAsBsF,4CAA6D97X,OAAOiC,KAAKmkb,EAAcpyQ,cAC/IjjK,OAEJ,KAAM8qX,GAAwBgqD,IAAiBC,GAA6C,IAAhCM,EAAcpyQ,SAAS,GAExF,OADAypN,GAA8BjH,EAAW,yCAClCzlX,EAET,OAAIq1a,EAAc1xL,UAAYwxL,GAC5BzoD,GAA8BjH,EAAW,qBAAqB4vD,EAAc1xL,0BAA0BwxL,KAC/Fn1a,GAELq1a,EAAchB,aAAee,GAC/B1oD,GAA8BjH,EAAW,oBAAoB4vD,EAAchB,6BAA6Be,KACjGp1a,GAEJu0a,EAAYrmY,MAAK0mF,GAASygT,EAAcd,YAAY3/S,GAAS,IAI9DygT,EAAcf,SAAWW,GAC3BvoD,GAA8BjH,EAAW,gBAAgB4vD,EAAcf,8BAA8BW,KAC9Fj1a,GAGLA,IAAa2sW,GAAkC8Y,IAAc9Y,GAAkC3sW,IAAaq1a,EAAc11D,cAAgB8uD,EAAWzua,GAAU2/W,eAC1J3/W,GAETi1a,EAAgBI,EAAcf,SACvB7uD,IAZLiH,GAA8BjH,EAAW,mCAAmC/qW,KAAKC,UAAU45Z,YACpFv0a,EAWO,QACf8N,GAGDyma,cACAnoD,YACAioD,eACAD,aAEJ,CA8qBwBkB,CAAkB7G,EAAY/jD,EAAmBE,EAAWC,EAAiBsB,IACzF,SACJvf,EAAQ,YACR2nE,EAAW,aACXF,EAAY,WACZD,EAAU,UACVhoD,GACEwoD,EACJlB,EAAkB9mE,EAClB8d,EAAoB0B,EAAYmoD,EAAYA,EAAY7lb,OAAS,GAAK6lb,EAAY,GAClF5pD,EAAmB0pD,EACnBzpD,EAAY/lW,KAAKhT,IAAI+4W,EAAWwpD,GAChCjga,EAAOuB,IAAI,2BAA2BgF,KAAKC,UAAUi6Z,KACvD,MACElB,EAA2B,MAATt7L,OAAgB,EAASA,EAAMw0H,SACjD8d,EAA6B,MAATtyI,OAAgB,EAASA,EAAMmoI,WAErD,MAAMqyD,EAAsBlE,EAAcA,EAAY9ua,SAAWi8X,EAAcA,EAAYj8X,SAAW,EAChG21a,EAAkBrga,KAAK05Z,YAAY1kD,kBAAoB,IACvDsrD,EAAgB,GACtB,IAAK,IAAI/mb,EAAIsjb,EAActjb,GAAKugb,EAAcvgb,IAAK,CACjD,IAAIgnb,EACJ,MAAMC,EAAYxnE,EAAOz/W,GACnBknb,EAAWlnb,EAAI+kb,EACrB,IAAKkC,EACH,SAEF,GAAI5tZ,EAAO8tZ,uBAAyBF,EAAU31D,kBAAoB21D,EAAU51D,iBAAkB,CAC5F,MAAMsL,EAAoB/mW,UAAU+mW,kBACiD,oBAApD,MAArBA,OAA4B,EAASA,EAAkBa,eAAgCzB,GAAsCkrD,EAAWjrD,EAAoBC,EAAmBC,EAAkBC,EAAWC,IACtN6qD,EAAU51D,iBAAmBqL,GAA4BuqD,EAAWjrD,EAAoBW,GACxFsqD,EAAU51D,iBAAiBv8V,MAAK0oW,IAC9B,IAAK/2W,KAAK++V,IACR,OAEFyhE,EAAU31D,gBAAkBkM,EAC5B,MAAM/d,EAASh5V,KAAK++V,IAAI/F,OAClBt3W,EAAQs3W,EAAO59W,QAAQolb,GACzBzpD,EAAarzX,MACfub,EAAOyO,KAAK,gDAAgDqpW,EAAarzX,oBAAoBhC,KAAS8jB,KAAKC,UAAUsxW,MAC3GA,EAAanqP,YACvB3tH,EAAOyO,KAAK,qEAAqEhsB,KAAS8jB,KAAKC,UAAUsxW,MACrGr1X,GAAS,GAAKs3W,EAAOx/W,OAAS,IAChCylB,EAAOuB,IAAI,oCAAoC9e,KAC/Cse,KAAK++V,IAAI4hE,YAAYj/a,IAEzB,KAGF8+a,EAAU31D,gBAAkBoK,EAEhC,CAIA,GAAIupD,GAAmBgC,EAAU9oE,WAAa8mE,GAAmBhpD,GAAqBgrD,EAAUn1D,aAAemK,GAAqBirD,GAAYhrD,EAAmB+qD,EAAUh2D,YAAci2D,GAAYhrD,EAAmB,GAAKA,EAAmB+qD,EAAUh2D,WAAag2D,EAAU31D,kBAAgG,OAA1E01D,EAAwBC,EAAU31D,gBAAgBqK,uBAAgCqrD,EAAsB,GAAGnrD,QAAS,CAC3ZkrD,EAAcjlb,KAAK9B,GACnB,QACF,CACA,MAAMsnX,EAAe2/D,EAAU1/D,QACzB8/D,GAAepH,EAA8B,MAAhB34D,OAAuB,EAASA,EAAatf,WAA6B,MAAhBsf,OAAuB,EAASA,EAAahhB,wBAA0B69E,EACpK,IAAImD,EAUFA,EAHGJ,EAGU3C,EAAapoD,EAFbkoD,EAAWloD,EAM1B,MAAMrc,EAAUqkE,GAAuBzD,GAA+C,EAAtByD,GAAkD,IAAvBX,EAA2B/jE,EAAOz/W,GAAG6xX,eAAiBpS,EAAOz/W,GAAG4xX,WACrJ21D,EAAgB9ga,KAAK46Z,kBAAkByF,EAAiBQ,EAAYxnE,EAAUunE,OAA8Bhoa,IAAjBioW,GAUjG,GAPAggE,GAAcxnE,IAEd9/W,IAAM4/a,GAA+C,IAAxBqH,EAAU91D,WAA+C,IAA5B81D,EAAU/1D,iBAIpEq2D,GAAiBT,IAAoBnmF,EAAe4mF,IAAkB1gF,IAASpgV,KAAKy5Z,kBAAoBqH,EAAgBzC,GAC1F,CAC5B,MAAMlB,EAAkBn9Z,KAAKm9Z,gBAW7B,OAVI5jb,IAAM6kb,IAAmC,IAArBjB,GAA0BA,IAAoBiB,IAChEkC,EAAc9mb,QAChBylB,EAAOk6B,MAAM,0BAA0BmnY,EAAc1ha,KAAK,WAAWi+Z,sCAAiD7jE,EAAOsnE,EAAc,IAAIppE,WAAW8B,EAAOsnE,EAAc,IAAIj1D,oCAAoCnoI,EAAMg0H,WAAWse,KAE1Ov2W,EAAO2S,KAAK,0BAA0B0sZ,MAAuB/kb,gBAAgBo2B,KAAKy2B,MAAMy6X,eAAwBlxZ,KAAKy2B,MAAMy6X,EAAaxnE,WAAiBgnE,EAAgBhrZ,QAAQ,kBAAkBurZ,EAAYvrZ,QAAQ,uBAAuBgpZ,EAAiBhpZ,QAAQ,oBAAoByrZ,EAAczrZ,QAAQ,qBAAqB+jZ,cAA2BoF,gBAA8BhpD,mBAAmC4oD,MAEhahF,IACFp5Z,KAAKo5Z,eAAiB7/a,GAGjBA,CACT,CACF,CAEA,OAAQ,CACV,CACA,iBAAIshb,CAActT,GAChB,MAAM,aACJsV,EAAY,aACZ/C,GACE95Z,KAAK++V,IACH3kX,EAAQu1B,KAAKjT,IAAIiT,KAAKhT,IAAI4qZ,EAAWuS,GAAe+C,GACtD78Z,KAAKq5Z,iBAAmBj/a,IAC1B4lB,KAAKs5Z,iBAAmB,GACxBt5Z,KAAKq5Z,eAAiBj/a,EAE1B,GA+yiBA2mb,iBA9zOF,MACE,WAAAl/Y,CAAYk9U,GAEV/+V,KAAK8gW,QAAU,KAEf9gW,KAAKgha,WAAa,KAElBhha,KAAKiha,oBAAiB,EAEtBjha,KAAKuvJ,eAAY,EACjBvvJ,KAAK++V,SAAM,EAEX/+V,KAAKkha,0BAA4B,EAEjClha,KAAKmha,wBAA0B,EAE/Bnha,KAAK+0N,MAAQ,KAEb/0N,KAAKoha,YAAc,KAEnBpha,KAAKqha,mBAAqB,KAC1Brha,KAAKsha,kBAAe,EAEpBtha,KAAKuha,aAAe,CAClB5/V,MAAO,EACP++I,MAAO,EACP8+H,WAAY,GAEdx/U,KAAKg2K,OAAS,CAAC,EACfh2K,KAAKwha,cAAgB,CAAC,EACtBxha,KAAKyha,kBAAe,EACpBzha,KAAKQ,SAAM,EACXR,KAAK0N,UAAO,EACZ1N,KAAKtc,WAAQ,EACbsc,KAAK0ha,gBAAkBl9a,IAChBwb,KAAK++V,KAGV/+V,KAAK++V,IAAI6oB,gBAAgB,EAE3B5nX,KAAK2ha,kBAAoBn9a,IAClBwb,KAAK++V,KAGV/+V,KAAK++V,IAAI8oB,iBAAiB,EAG5B7nX,KAAK4ha,mBAAqB,KACxB,MAAM,MACJ7sM,EAAK,YACLqsM,GACEpha,KACJA,KAAKQ,IAAI,uBACLu0N,IACFA,EAAMz1O,oBAAoB,UAAW0gB,KAAK6ha,iBAC1C7ha,KAAK8ha,6BACL9ha,KAAK++V,IAAI/zD,QAAQ51F,EAAO8wJ,eAAgB,CACtCnxI,QACAqsM,YAAaA,KAGbA,GAEFA,EAAY9hb,oBAAoB,aAAc0gB,KAAK4ha,oBAErD5ha,KAAK+ha,oBAAoB,EAE3B/ha,KAAKgia,oBAAsB,KACzBhia,KAAKQ,IAAI,sBAAsB,EAEjCR,KAAKiia,oBAAsB,KACzBjia,KAAKQ,IAAI,qBAAqB,EAEhCR,KAAK6ha,gBAAkB,KACrB,MAAM,SACJK,EAAQ,WACRlB,GACEhha,KACAkia,IAAalB,GACf/ha,EAAOvb,MAAM,0DAA0Ds9a,OAAgBkB,KACzF,EAEFlia,KAAK++V,IAAMA,EACX,MAAM+R,EAAY,sBArjdtB,IAA8BzmX,EAsjd1B2V,KAAKsha,cAtjdqBj3a,EAsjde2oW,GAAe+L,EAAInsV,OAAOqgV,0BArjd9C,qBAATjkV,MAAwB3kB,IAAW2kB,KAAKmkV,oBAsjdpDnzV,KAAKQ,IAAMvB,EAAOuB,IAAIE,KAAKzB,EAAQ6xW,GACnC9wW,KAAK0N,KAAOzO,EAAOyO,KAAKhN,KAAKzB,EAAQ6xW,GACrC9wW,KAAKtc,MAAQub,EAAOvb,MAAMgd,KAAKzB,EAAQ6xW,GACvC9wW,KAAKmia,oBACLnia,KAAKi/V,mBACP,CACA,cAAAmjE,GACE,OAAOpia,KAAKqia,uBAAuB7ob,OAAS,GAAKO,OAAOiC,KAAKgkB,KAAKwha,eAAehob,OAAS,CAC5F,CACA,OAAAwxJ,GACEhrI,KAAK8/V,sBACL9/V,KAAK8gW,QAAU,KACf9gW,KAAKqha,mBAAqB,KAE1Brha,KAAK++V,IAAM,IACb,CACA,iBAAAE,GACE,MAAM,IACJF,GACE/+V,KACJ++V,EAAItsU,GAAG2iL,EAAOuwM,gBAAiB3lZ,KAAK4lZ,iBAAkB5lZ,MACtD++V,EAAItsU,GAAG2iL,EAAOgxJ,gBAAiBpmW,KAAKqmW,iBAAkBrmW,MACtD++V,EAAItsU,GAAG2iL,EAAOkqJ,iBAAkBt/V,KAAKu/V,kBAAmBv/V,MACxD++V,EAAItsU,GAAG2iL,EAAOywM,gBAAiB7lZ,KAAK8lZ,iBAAkB9lZ,MACtD++V,EAAItsU,GAAG2iL,EAAOktN,aAActia,KAAKuia,cAAevia,MAChD++V,EAAItsU,GAAG2iL,EAAOu3K,iBAAkB3sX,KAAKwia,kBAAmBxia,MACxD++V,EAAItsU,GAAG2iL,EAAO6wM,cAAejmZ,KAAKkmZ,eAAgBlmZ,MAClD++V,EAAItsU,GAAG2iL,EAAOqtN,WAAYzia,KAAK0ia,YAAa1ia,MAC5C++V,EAAItsU,GAAG2iL,EAAOoxJ,gBAAiBxmW,KAAKymW,iBAAkBzmW,MACtD++V,EAAItsU,GAAG2iL,EAAOsxJ,cAAe1mW,KAAK2mW,eAAgB3mW,MAClD++V,EAAItsU,GAAG2iL,EAAO07K,YAAa9wX,KAAK2ia,aAAc3ia,MAC9C++V,EAAItsU,GAAG2iL,EAAOwtN,aAAc5ia,KAAK6ia,cAAe7ia,KAClD,CACA,mBAAA8/V,GACE,MAAM,IACJf,GACE/+V,KACJ++V,EAAIzqN,IAAI8gE,EAAOuwM,gBAAiB3lZ,KAAK4lZ,iBAAkB5lZ,MACvD++V,EAAIzqN,IAAI8gE,EAAOgxJ,gBAAiBpmW,KAAKqmW,iBAAkBrmW,MACvD++V,EAAIzqN,IAAI8gE,EAAOkqJ,iBAAkBt/V,KAAKu/V,kBAAmBv/V,MACzD++V,EAAIzqN,IAAI8gE,EAAOywM,gBAAiB7lZ,KAAK8lZ,iBAAkB9lZ,MACvD++V,EAAIzqN,IAAI8gE,EAAOktN,aAActia,KAAKuia,cAAevia,MACjD++V,EAAIzqN,IAAI8gE,EAAOu3K,iBAAkB3sX,KAAKwia,kBAAmBxia,MACzD++V,EAAIzqN,IAAI8gE,EAAO6wM,cAAejmZ,KAAKkmZ,eAAgBlmZ,MACnD++V,EAAIzqN,IAAI8gE,EAAOqtN,WAAYzia,KAAK0ia,YAAa1ia,MAC7C++V,EAAIzqN,IAAI8gE,EAAOoxJ,gBAAiBxmW,KAAKymW,iBAAkBzmW,MACvD++V,EAAIzqN,IAAI8gE,EAAOsxJ,cAAe1mW,KAAK2mW,eAAgB3mW,MACnD++V,EAAIzqN,IAAI8gE,EAAO07K,YAAa9wX,KAAK2ia,aAAc3ia,MAC/C++V,EAAIzqN,IAAI8gE,EAAOwtN,aAAc5ia,KAAK6ia,cAAe7ia,KACnD,CACA,iBAAAmia,GACEnia,KAAKyha,aAAe,CAAC,EACrBzha,KAAKiha,eAAiB,IAAIntB,GAAqB9zY,KAAKyha,cACpDzha,KAAKuvJ,UAAY,CACf5tF,MAAO,GACP++I,MAAO,GACP8+H,WAAY,IAEdx/U,KAAKuha,aAAe,CAClB5/V,MAAO,EACP++I,MAAO,EACP8+H,WAAY,GAEdx/U,KAAKqha,mBAAqB,IAC5B,CACA,iBAAA9hE,GACEv/V,KAAKkha,0BAA4Blha,KAAKmha,wBAA0B,EAChEnha,KAAK8gW,QAAU,IACjB,CACA,gBAAAglD,CAAiBtha,EAAOoF,GAKtB,IAAIk5a,EAAc,GACdl5a,EAAK+3E,QAAU/3E,EAAK82N,QAAU92N,EAAKm5a,YACrCD,EAAc,GAEhB9ia,KAAKkha,0BAA4Blha,KAAKmha,wBAA0B2B,EAChE9ia,KAAKQ,IAAI,GAAGR,KAAKkha,0DACnB,CACA,gBAAAtb,CAAiBpha,EAAOoF,GACtB,MAAMmrO,EAAQ/0N,KAAK+0N,MAAQnrO,EAAKmrO,MAC1Bm+H,EAAcF,GAAehzV,KAAKsha,cACxC,GAAIvsM,GAASm+H,EAAa,CACxB,IAAI8vE,EACJ,MAAMnzT,EAAK7vG,KAAKoha,YAAc,IAAIluE,EAClClzV,KAAKQ,IAAI,yBAA+D,OAArCwia,EAAkBnzT,EAAGhuF,kBAAuB,EAASmhZ,EAAgBp+a,QAExGirH,EAAGxwH,iBAAiB,aAAc2gB,KAAK4ha,oBACvC/xT,EAAGxwH,iBAAiB,cAAe2gB,KAAKiia,qBACxCpyT,EAAGxwH,iBAAiB,cAAe2gB,KAAKgia,qBACpChia,KAAKsha,eACPzxT,EAAGxwH,iBAAiB,iBAAkB2gB,KAAK2ha,mBAC3C9xT,EAAGxwH,iBAAiB,eAAgB2gB,KAAK0ha,kBAI3C,MAAMuB,EAAYjja,KAAKgha,WAAahyZ,KAAKuvB,IAAIglN,gBAAgB1zI,GAE7D,GAAI7vG,KAAKsha,aACP,IACEvsM,EAAM7oC,gBAAgB,OAEtB,MAAMg3O,EAAMl0Z,KAAKmkV,mBACjBp+H,EAAM3B,sBAAwB2B,EAAM3B,uBAAyB8vM,GAAOrzT,aAAcqzT,EAClF1uB,GAAqBz/K,GA6xB/B,SAAmBA,EAAOhgN,GACxB,MAAM1qB,EAAS2kB,KAAKt0B,SAASmB,cAAc,UAC3CwO,EAAOrM,KAAO,YACdqM,EAAOxH,IAAMkyB,EACbggN,EAAMp5O,YAAY0O,EACpB,CAjyBU84a,CAAUpuM,EAAOkuM,GACjBluM,EAAMx1N,MACR,CAAE,MAAO7b,GACPqxO,EAAMlyO,IAAMogb,CACd,MAEAluM,EAAMlyO,IAAMogb,EAEdluM,EAAM11O,iBAAiB,UAAW2gB,KAAK6ha,gBACzC,CACF,CACA,gBAAAx7D,GACE,MAAM,MACJtxI,EAAK,YACLqsM,EAAW,WACXJ,GACEhha,KACJ,GAAIoha,EAAa,CAEf,GADApha,KAAKQ,IAAI,0BACsB,SAA3B4ga,EAAYlrZ,WACd,IAKEkrZ,EAAYgC,aACd,CAAE,MAAOn9Z,IACPjG,KAAK0N,KAAK,qBAAqBzH,GAAIpd,oCACrC,CAGFmX,KAAKuia,gBACLnB,EAAY9hb,oBAAoB,aAAc0gB,KAAK4ha,oBACnDR,EAAY9hb,oBAAoB,cAAe0gB,KAAKiia,qBACpDb,EAAY9hb,oBAAoB,cAAe0gB,KAAKgia,qBAChDhia,KAAKsha,eACPF,EAAY9hb,oBAAoB,iBAAkB0gB,KAAK2ha,mBACvDP,EAAY9hb,oBAAoB,eAAgB0gB,KAAK0ha,kBAKnD3sM,IACFA,EAAMz1O,oBAAoB,UAAW0gB,KAAK6ha,iBACtCb,GACFhyZ,KAAKuvB,IAAIkjN,gBAAgBu/K,GAKvBhha,KAAKkia,WAAalB,GACpBjsM,EAAM7oC,gBAAgB,OAClBlsL,KAAKsha,cACP9sB,GAAqBz/K,GAEvBA,EAAMx1N,QAENS,KAAK0N,KAAK,iEAGd1N,KAAKoha,YAAc,KACnBpha,KAAK+0N,MAAQ,KACb/0N,KAAKgha,WAAa,KAClBhha,KAAKkha,0BAA4Blha,KAAKmha,wBACtCnha,KAAKwha,cAAgB,CAAC,EACtBxha,KAAKg2K,OAAS,CAAC,CACjB,CACAh2K,KAAK++V,IAAI/zD,QAAQ51F,EAAOszM,oBAAgB9vZ,EAC1C,CACA,aAAA2pa,GACEvia,KAAKqia,uBAAuBz/a,SAAQ5E,IAClCgiB,KAAKqja,YAAYrlb,EAAK,IAExBgiB,KAAKmia,oBACLnia,KAAK++V,IAAI8oB,iBACX,CACA,WAAAw7C,CAAYrlb,GACV,MAAMo0M,EAAKpyL,KAAKyha,aAAazjb,GAC7B,IAEI,IAAIslb,EADN,GAAIlxO,EAEFpyL,KAAKuja,sBAAsBvlb,GAG3BgiB,KAAKyha,aAAazjb,QAAQ4a,EACoB,OAAzC0qa,EAAoBtja,KAAKoha,cAAwBkC,EAAkBE,cAAchqb,QACpFwmB,KAAKoha,YAAYqC,mBAAmBrxO,EAG1C,CAAE,MAAOnsL,IACPjG,KAAK0N,KAAK,iBAAiB1vB,IAAQioB,GACrC,CACF,CACA,cAAAigZ,CAAe1ha,EAAOoF,GACpB,MAAM85a,EAAoB1ja,KAAKqia,uBAAuB7ob,OAChDmqb,EAAa5pb,OAAOiC,KAAK4N,GA0C/B,GAzCA+5a,EAAW/gb,SAAQg6Z,IACjB,GAAI8mB,EAAmB,CAErB,MAAMryS,EAAQrxH,KAAKg2K,OAAO4mO,GAC1B,GAAIvrR,GAA4C,oBAA5BA,EAAMt/B,OAAO6xU,WAA2B,CAC1D,IAAIC,EACJ,MAAM,GACJh4a,EAAE,MACF49V,EAAK,WACL2O,EAAU,UACVp9W,EAAS,SACTgkB,GACEpV,EAAKgzZ,GACHknB,EAAmB5rE,GAA0B7mO,EAAMo4N,MAAOp4N,EAAM+mO,YAChE2rE,EAAmC,MAApBD,OAA2B,EAASA,EAAiB59a,QAAQquZ,GAA6B,MAC/G,IAAIyvB,EAAa9rE,GAA0BzO,EAAO2O,GAClD,MAAM6rE,EAA0C,OAA7BJ,EAAcG,QAAsB,EAASH,EAAY39a,QAAQquZ,GAA6B,MACjH,GAAIyvB,GAAcD,IAAiBE,EAAW,CACd,UAA1BrnB,EAAUr5Z,MAAM,EAAG,KACrBygb,EAAalsE,GAAuBksE,EAAYhka,KAAKsha,eAEvD,MAAMvlR,EAAW,GAAG/gK,YAAoBgpb,IACxChka,KAAKkka,iBAAiBtnB,EAAW7gQ,GACjC/7I,KAAKQ,IAAI,mBAAmBsja,QAAuBE,KACnDhka,KAAKg2K,OAAO4mO,GAAa,CACvB7qT,OAAQs/B,EAAMt/B,OACd03P,QACAzuW,YACAo9W,aACAp5V,WACAnT,KAEJ,CACF,CACF,MAEEmU,KAAKwha,cAAc5kB,GAAahzZ,EAAKgzZ,EACvC,IAIE8mB,EACF,OAEF,MAAMxC,EAA4BvxZ,KAAKhT,IAAIqD,KAAKkha,0BAA4B,EAAG,GAC3Elha,KAAKkha,4BAA8BA,IACrClha,KAAKQ,IAAI,GAAG0ga,mCAA2DyC,EAAW/ka,KAAK,QACvFoB,KAAKkha,0BAA4BA,GAE/Blha,KAAKoha,aAA+C,SAAhCpha,KAAKoha,YAAYlrZ,YACvClW,KAAK+ha,oBAET,CACA,gBAAAmC,CAAiBlmb,EAAM+9J,GACrB,MAAM,eACJklR,GACEjha,KACEonJ,EAAY,CAChBrhB,QAAS,KACP,MAAMqsD,EAAKpyL,KAAKyha,aAAazjb,GACzBo0M,IACFpyL,KAAKQ,IAAI,YAAYxiB,0BAA6B+9J,KAClDq2C,EAAGwxO,WAAW7nR,IAEhBklR,EAAe3sB,oBAAoBt2Z,EAAK,EAE1C45L,QAAS,OACTyyH,WAAY,OACZpsS,QAASva,IACPsc,KAAK0N,KAAK,oBAAoB1vB,sBAA0B0F,EAAM,GAGlEu9a,EAAe9kS,OAAOirB,EAAWppK,IAAQgiB,KAAKwha,cAAcxjb,GAC9D,CACA,iBAAAwkb,CAAkBh+a,EAAO0mT,GACvB,MAAM,IACJ6zD,EAAG,eACHkiE,EAAc,OACdjrP,GACEh2K,MACE,KACJpW,EAAI,KACJ5L,EAAI,KACJqhW,EAAI,KACJsd,EAAI,UACJmuB,GACE5/E,EACEi5H,EAAar5C,EAAUvuC,UAAUv+V,GACjComb,EAAuBp1Z,KAAK+7G,YAAY9hI,MAC9Ck7a,EAAWjpZ,MAAQkpZ,EACnB,MAAMC,EAAgBhlF,EAAKz0C,MAAM2xC,UAC3B+nF,EAAgB3nE,EAAOA,EAAK/xD,MAAM2xC,UAAY,KACxB,IAAxB8nF,EAAcnpZ,QAChBmpZ,EAAcnpZ,MAAQkpZ,GAEpBE,GAAyC,IAAxBA,EAAcppZ,QACjCopZ,EAAcppZ,MAAQkpZ,GAQxB,MAAM7hE,EAAavsL,EAAOr0G,MAC1B,IAAI4iW,GAAuB,EACd,UAATvmb,GAA6E,gBAA1C,MAAdukX,OAAqB,EAASA,EAAWvnX,aAChEupb,GAAwBvka,KAAKqha,oBAAuC,IAAjBv2C,EAAUj/X,IAAYmU,KAAKqha,mBAAmB9jF,KAAOutC,EAAUvtC,GAClHv9U,KAAKqha,mBAAqBv2C,GAE5B,MAAM05C,EAAYnlF,EAAKnkU,MACjBksI,EAAY,CAChBrhB,QAAS,KAEP,GADAo+R,EAAWzmD,aAAe1uW,KAAK+7G,YAAY9hI,MACvCs7a,EAAsB,CACxB,MAAMnyO,EAAKpyL,KAAKyha,aAAazjb,GAC7B,GAAIo0M,EAAI,CACN,MAAMh0J,EAAQomY,EAAYpyO,EAAGqyO,gBACzB90Z,KAAK+2B,IAAItI,IAAU,KACrBp+B,KAAKQ,IAAI,kDAAkDgka,aAAqBpmY,UAAcihT,EAAK9B,OACnGnrJ,EAAGqyO,gBAAkBD,EAEzB,CACF,CACAxka,KAAK0ka,eAAe96a,EAAM5L,EAAK,EAEjC45L,QAAS,OAGTyyH,WAAY,KAEV,MAAMlvR,EAAMnM,KAAK+7G,YAAY9hI,MAC7Bk7a,EAAWxmD,WAAawmD,EAAWhpZ,IAAMA,EACb,IAAxBkpZ,EAAcvjY,QAChBujY,EAAcvjY,MAAQ3lB,GAEpBmpZ,GAAyC,IAAxBA,EAAcxjY,QACjCwjY,EAAcxjY,MAAQ3lB,GAExB,MAAM,aACJsmZ,GACEzha,KACEs5W,EAAa,CAAC,EACpB,IAAK,MAAMt7X,KAAQyjb,EACjBnoD,EAAWt7X,GAAQ2+X,GAAaE,YAAY4kD,EAAazjb,IAE3DgiB,KAAKuha,aAAavjb,GAAQ,EACb,UAATA,GAA6B,UAATA,EACtBgiB,KAAKuha,aAAa/hF,WAAa,GAE/Bx/U,KAAKuha,aAAa5/V,MAAQ,EAC1B3hE,KAAKuha,aAAa7gN,MAAQ,GAE5B1gN,KAAK++V,IAAI/zD,QAAQ51F,EAAOqkK,gBAAiB,CACvCz7X,OACAqhW,OACAsd,OACAmuB,YACAtsT,OAAQ6gR,EAAKrhW,KACbs7X,cACA,EAEJr7W,QAASva,IAEP,MAAMc,EAAQ,CACZxG,KAAMm8V,EAAWinC,YACjB5iT,OAAQ6gR,EAAKrhW,KACb8iX,QAAS1mB,EAAa2hF,oBACtB4I,iBAAkB3mb,EAClBqhW,OACAsd,OACAmuB,YACApnY,QACAuiB,IAAKviB,EACL62S,OAAO,GAET,GAAI72S,EAAM0oB,OAASwyB,aAAagmY,mBAG9Bpgb,EAAMs8W,QAAU1mB,EAAayqF,sBACxB,CACL,MAAMC,IAAqB9ka,KAAKuha,aAAavjb,GAC7CwG,EAAMs8W,QAAU1mB,EAAa2hF,oBAI7B/7Z,KAAK0N,KAAK,UAAUo3Z,KAAoB/lE,EAAInsV,OAAOmmZ,mDAAmD/6a,mBAClG8mb,GAAoB/lE,EAAInsV,OAAOmmZ,sBACjCv0a,EAAM+1S,OAAQ,EAElB,CACAwkE,EAAI/zD,QAAQ51F,EAAO5yI,MAAOh+E,EAAM,GAGpCy8a,EAAe9kS,OAAOirB,EAAWppK,IAAQgiB,KAAKwha,cAAcxjb,GAC9D,CACA,gBAAAyoX,CAAiBjiX,EAAOoF,GACtB,MAAM,eACJq3a,GACEjha,KACE+ka,EAAiB/mb,IAAQ,CAC7B+nJ,QAAS/lI,KAAKgla,eAAetka,KAAKV,KAAMhiB,EAAM4L,EAAKo1O,YAAap1O,EAAKy9W,WACrEzvL,QAAS,OAGTyyH,WAAY,KAEVrqS,KAAK++V,IAAI/zD,QAAQ51F,EAAO6vN,eAAgB,CACtCjnb,QACA,EAEJigB,QAASva,IACPsc,KAAK0N,KAAK,yBAAyB1vB,iBAAqB0F,EAAM,IAG9DkG,EAAK5L,KACPijb,EAAe9kS,OAAO4oS,EAAen7a,EAAK5L,MAAO4L,EAAK5L,MAEtDgiB,KAAKqia,uBAAuBz/a,SAAQ5E,IAClCijb,EAAe9kS,OAAO4oS,EAAe/mb,GAAOA,EAAK,GAGvD,CACA,YAAA2kb,CAAan+a,EAAOoF,GAClB,MAAM,KACJy1V,EAAI,KACJsd,GACE/yW,EACEs7a,EAAoB,GACpBpoF,EAAoB6f,EAAOA,EAAK7f,kBAAoBuC,EAAKvC,kBAC3DA,EAAkBN,GACpB0oF,EAAkB7pb,KAAK,eAEnByhW,EAAkBN,IACpB0oF,EAAkB7pb,KAAK,SAErByhW,EAAkBN,IACpB0oF,EAAkB7pb,KAAK,UAiBM,IAA7B6pb,EAAkB1rb,QACpBwmB,KAAK0N,KAAK,oEAAoE2xU,EAAKrhW,eAAeqhW,EAAKn8G,aAAam8G,EAAK9B,MAE3Hv9U,KAAKmla,cAjBe,KAClB,MAAMl8a,EAAM+lB,KAAK+7G,YAAY9hI,MAC7Bo2V,EAAKz0C,MAAM2xC,UAAUphU,IAAMlyB,EACvB0zW,IACFA,EAAK/xD,MAAM2xC,UAAUphU,IAAMlyB,GAE7B,MAAM2hT,EAAQ+xD,EAAOA,EAAK/xD,MAAQy0C,EAAKz0C,MACvC5qS,KAAK++V,IAAI/zD,QAAQ51F,EAAOukK,cAAe,CACrCt6B,OACAsd,OACA/xD,QACA/+S,GAAIwzV,EAAKrhW,MACT,GAK2Bknb,EACjC,CACA,aAAArC,CAAcr+a,EAAOoF,GACnBoW,KAAKola,aACP,CAIA,WAAA1C,CAAYl+a,EAAOoF,GACHoW,KAAKqia,uBAAuBzgY,QAAO,CAACga,EAAK59D,KACrD,MAAMo0M,EAAKpyL,KAAKyha,aAAazjb,GAQ7B,OAPIo0M,GAAQxoM,EAAK5L,MAAQ4L,EAAK5L,OAASA,IACrCo0M,EAAGizO,QAAS,EACPjzO,EAAGg2L,QACNh2L,EAAGg2L,OAAQ,EACXpoX,KAAKQ,IAAI,GAAGxiB,4BAGT49D,KAAWw2I,IAAMA,EAAGg2L,MAAM,IAChC,KAEDpoX,KAAKQ,IAAI,sCACTR,KAAKmla,cAAa,KAChBnla,KAAKqia,uBAAuBz/a,SAAQ5E,IAClC,MAAMo0M,EAAKpyL,KAAKyha,aAAazjb,GACzBo0M,IACFA,EAAGizO,QAAS,EACd,IAEF,MAAM,YACJjE,GACEpha,KACCoha,GAA0C,SAA3BA,EAAYlrZ,YAMhClW,KAAKQ,IAAI,qCAET4ga,EAAYgC,eAPNhC,GACFpha,KAAKQ,IAAI,qEAAqE4ga,EAAYlrZ,aAMrE,IAG/B,CACA,cAAAywV,CAAeniX,GAAO,QACpBs8W,IAEKA,EAAQ9gB,UAAUxmW,SAGvBwmB,KAAK8gW,QAAUA,EACX9gW,KAAKqia,uBAAuB7ob,OAC9BwmB,KAAKmla,aAAanla,KAAK8ha,2BAA2Bpha,KAAKV,OAEvDA,KAAK8ha,6BAET,CACA,WAAAsD,GACE,MAAM,IACJrmE,EAAG,QACH+B,EAAO,MACP/rI,GACE/0N,KACJ,IAAK+0N,GAAqB,OAAZ+rI,EACZ,OAGF,IAD0B9gW,KAAKqia,uBACR7ob,OACrB,OAEF,MAAMo5B,EAASmsV,EAAInsV,OACbk+D,EAAcikJ,EAAMjkJ,YACpBmwR,EAAiBH,EAAQpe,oBAGzB01E,EAAmBt3D,EAAQ1gB,MAAwC,OAAhCxtU,EAAO8lZ,qBAAgC9lZ,EAAO8lZ,qBAAuB9lZ,EAAOwlZ,iBACrH,GAAIl+E,EAAek+E,IAAqBA,EAAmB,EAAG,CAC5D,MAAMkN,EAAsB31Z,KAAKhT,IAAIy7Z,EAAkBn3D,GACjDskE,EAA2B51Z,KAAKq2B,MAAM8qC,EAAcmwR,GAAkBA,EAAiBqkE,EAC7Ftla,KAAKwla,gBAAgB10V,EAAamwR,EAAgBskE,EACpD,CACA,GAAIrrF,EAAetnU,EAAOylZ,4BAA8BzlZ,EAAOylZ,0BAA4B,EAAG,CAC5F,MAAMoN,EAAoB91Z,KAAKhT,IAAIiW,EAAO22W,gBAAiB32W,EAAOylZ,2BAC5DqN,EAAuB/1Z,KAAKhT,IAAI8oa,EAAmBxkE,GACnD0kE,EAA4Bh2Z,KAAKq2B,MAAM8qC,EAAcmwR,GAAkBA,EAAiBykE,EAC9F1la,KAAK4la,iBAAiB90V,EAAamwR,EAAgB0kE,EACrD,CACF,CACA,eAAAH,CAAgB10V,EAAamwR,EAAgBskE,GAC3C,MAAM,QACJzkE,EAAO,aACP2gE,GACEzha,KACsBA,KAAKqia,uBACbz/a,SAAQ5E,IACxB,MAAMo0M,EAAKqvO,EAAazjb,GACxB,GAAIo0M,EAAI,CACN,MAAMk3K,EAAWqT,GAAaE,YAAYzqL,GAE1C,GAAIk3K,EAAS9vX,OAAS,GAAK+rb,EAA2Bj8D,EAASpuV,MAAM,GAAI,CAMvE,GALAlb,KAAK++V,IAAI/zD,QAAQ51F,EAAOywN,oBAAqB,CAC3C/1D,UAAWy1D,IAIE,MAAXzkE,GAAmBA,EAAQ1gB,KAC7BpgV,KAAK++V,IAAI/zD,QAAQ51F,EAAO0wN,yBAA0B,CAChDh2D,UAAWy1D,SAER,GAAInzO,EAAGg2L,OAAS9e,EAASnuV,IAAImuV,EAAS9vX,OAAS,GAAKs3F,EAA+B,EAAjBmwR,EAEvE,YADAjhW,KAAKQ,IAAI,gBAAgBxiB,sDAG3BgiB,KAAK++V,IAAI/zD,QAAQ51F,EAAOoxJ,gBAAiB,CACvCxnI,YAAa,EACbqoI,UAAWk+D,EACXvnb,QAEJ,CACF,IAEJ,CACA,gBAAA4nb,CAAiB90V,EAAamwR,EAAgB0kE,GAC5C,MAAM,aACJlE,GACEzha,KACsBA,KAAKqia,uBACbz/a,SAAQ5E,IACxB,MAAMo0M,EAAKqvO,EAAazjb,GACxB,GAAIo0M,EAAI,CACN,MAAMk3K,EAAWqT,GAAaE,YAAYzqL,GACpC2zO,EAAoBz8D,EAAS9vX,OAEnC,GAAIusb,EAAoB,EACtB,OAEF,MAAMxoD,EAAcjU,EAASpuV,MAAM6qZ,EAAoB,GACjDj2D,EAAYxG,EAASnuV,IAAI4qZ,EAAoB,GAEnD,GAAIJ,EAA4BpoD,GAAezsS,GAAeysS,GAAezsS,GAAeg/R,EAC1F,OACK,GAAI19K,EAAGg2L,OAASt3S,EAAcg/R,EAAY,EAAI7O,EAEnD,YADAjhW,KAAKQ,IAAI,gBAAgBxiB,uDAG3BgiB,KAAK++V,IAAI/zD,QAAQ51F,EAAOoxJ,gBAAiB,CACvCxnI,YAAau+I,EACblW,UAAWzqW,IACX5e,QAEJ,IAEJ,CAOA,0BAAA8jb,GACE,IAAK9ha,KAAK8gW,UAAY9gW,KAAK+0N,QAAU/0N,KAAKoha,aAA+C,SAAhCpha,KAAKoha,YAAYlrZ,WACxE,OAEF,MAAM,QACJ4qV,EAAO,IACP/B,EAAG,MACHhqI,EAAK,YACLqsM,GACEpha,KACEgma,EAAgBllE,EAAQ9gB,UAAU,GAAG9kU,MAAQ4lV,EAAQhgB,cACrDmlF,EAAgBlxM,EAAMrqO,SACtBw7a,EAAahsF,EAAeknF,EAAY12a,UAAY02a,EAAY12a,SAAW,EAC7Eo2W,EAAQ1gB,MAAQ2e,EAAInsV,OAAO6lZ,sBAE7B2I,EAAY12a,SAAWkS,IACvBoD,KAAKmma,oBAAoBrlE,KAChBklE,EAAgBE,GAAcF,EAAgBC,IAAkB/rF,EAAe+rF,MAKxFjma,KAAKQ,IAAI,qCAAqCwla,EAAc3wZ,QAAQ,MACpE+rZ,EAAY12a,SAAWs7a,EAE3B,CACA,mBAAAG,CAAoBtlE,GAClB,MAAMugE,EAAcpha,KAAKoha,YACnBphF,EAAY6gB,EAAa7gB,UAE/B,GADYA,EAAUxmW,QACXqnX,EAAazgB,MAAuB,MAAfghF,GAAuBA,EAAYgF,qBAAsB,CACvF,MAAMlrZ,EAAQvL,KAAKhT,IAAI,EAAGqjV,EAAU,GAAG9kU,OACjCC,EAAMxL,KAAKhT,IAAIue,EAAOA,EAAQ2lV,EAAa/f,eACjD9gV,KAAKQ,IAAI,mCAAmC4ga,EAAY12a,uCAAuCwwB,KAASC,MACxGimZ,EAAYgF,qBAAqBlrZ,EAAOC,EAC1C,CACF,CACA,kBAAA4mZ,GACE,MAAM,0BACJb,EAAyB,eACzBD,EAAc,cACdO,GACExha,KAMEqma,EAAqBtsb,OAAOiC,KAAKwlb,GAAehob,OACtD,GAAI6sb,KAAwBnF,GAAoD,IAAvBmF,GAA4B,eAAgB7E,GAAgB,CAEnHxha,KAAKsma,oBAAoB9E,GACzBxha,KAAKwha,cAAgB,CAAC,EAEtB,MAAMxtB,EAAUh0Y,KAAKqia,uBACrB,GAAIruB,EAAQx6Z,OACVwmB,KAAK++V,IAAI/zD,QAAQ51F,EAAOmxN,eAAgB,CACtCvwP,OAAQh2K,KAAKg2K,SAEfg+N,EAAQpxZ,SAAQ5E,IACdijb,EAAe/sB,YAAYl2Z,EAAK,QAE7B,CACL,MAAM0F,EAAQ,IAAIggB,MAAM,qDACxB1D,KAAK++V,IAAI/zD,QAAQ51F,EAAO5yI,MAAO,CAC7BxkF,KAAMm8V,EAAWinC,YACjBtgB,QAAS1mB,EAAaosF,iCACtBjsI,OAAO,EACP72S,QACA8pB,OAAQ9pB,EAAMmF,SAElB,CACF,CACF,CACA,mBAAAy9a,CAAoBtwP,GAClB,MAAM,aACJyrP,EAAY,YACZL,GACEpha,KACJ,IAAKoha,EACH,MAAM19Z,MAAM,wDAEd,IAAK,MAAMk5Y,KAAa5mO,EACtB,IAAKyrP,EAAa7kB,GAAY,CAC5B,IAAI6pB,EACJ,MAAMp1S,EAAQ2kD,EAAO4mO,GACrB,IAAKvrR,EACH,MAAM3tH,MAAM,kCAAkCk5Y,6BAGhD,IAAInzD,GAAwG,KAArD,OAAzCg9E,EAAoBp1S,EAAM+mO,iBAAsB,EAASquE,EAAkBrrb,QAAQ,MAAei2I,EAAM+mO,WAAa/mO,EAAMo4N,MACrIA,GAC4B,UAA1BmzD,EAAUr5Z,MAAM,EAAG,KACrBkmW,EAAQqO,GAAuBrO,EAAOzpV,KAAKsha,eAG/C,MAAMvlR,EAAW,GAAG1qB,EAAMr2I,oBAAoByuW,IAC9CzpV,KAAKQ,IAAI,yBAAyBu7I,MAClC,IACE,MAAMq2C,EAAKqvO,EAAa7kB,GAAawkB,EAAYsF,gBAAgB3qR,GAC3D4qR,EAAS/pB,EACf58Y,KAAK4ma,kBAAkBD,EAAQ,cAAe3ma,KAAK6ma,kBACnD7ma,KAAK4ma,kBAAkBD,EAAQ,YAAa3ma,KAAK8ma,gBACjD9ma,KAAK4ma,kBAAkBD,EAAQ,QAAS3ma,KAAK+ma,kBAEzC/ma,KAAKsha,cACPtha,KAAK4ma,kBAAkBD,EAAQ,kBAAkB,CAAC3ob,EAAMwG,KAEtD,MAAMwib,EAAgBxib,EAAMwib,cACP,MAAjBA,GAAyBA,EAAcxtb,QACzCwmB,KAAK++V,IAAI/zD,QAAQ51F,EAAO6vN,eAAgB,CACtCjnb,KAAM4+Z,GAEV,IAGJ58Y,KAAKg2K,OAAO4mO,GAAa,CACvB7qT,OAAQqgG,EACRq3J,MAAOA,EACPzuW,UAAWq2I,EAAMr2I,UACjBo9W,WAAY/mO,EAAM+mO,WAClBp5V,SAAUqyH,EAAMryH,SAChBnT,GAAIwlI,EAAMxlI,GAEd,CAAE,MAAOoa,IACPjG,KAAKtc,MAAM,2CAA2CuiB,GAAIpd,WAC1DmX,KAAK++V,IAAI/zD,QAAQ51F,EAAO5yI,MAAO,CAC7BxkF,KAAMm8V,EAAWinC,YACjBtgB,QAAS1mB,EAAa0hF,uBACtBvhI,OAAO,EACP72S,MAAOuiB,GACP0+Z,iBAAkB/nB,EAClB7gQ,SAAUA,GAEd,CACF,CAEJ,CACA,YAAImmR,GACF,IAAI+E,EAAaC,EACjB,MAAMnyM,GAAuC,OAA7BkyM,EAAcjna,KAAK+0N,QAAiF,OAAtDmyM,EAAwBD,EAAYhsb,oBAA9C,EAAgFisb,EAAsB/sb,KAAK8sb,EAAa,YAAcjna,KAAK+0N,MAC/L,OAAgB,MAATA,OAAgB,EAASA,EAAMlyO,GACxC,CACA,gBAAAgkb,CAAiB7ob,GACf,MAAM,eACJijb,GACEjha,KACciha,EAAezib,QAAQR,GAC/B45L,SACZ,CACA,cAAAkvP,CAAe9ob,GACb,IAAImpb,EACJ,GAAmG,YAAnD,OAA1CA,EAAqBnna,KAAKoha,kBAAuB,EAAS+F,EAAmBjxZ,YAEjF,YADAlW,KAAKqja,YAAYrlb,GAGnB,MAAM,eACJijb,GACEjha,KACciha,EAAezib,QAAQR,GAC/BqsT,aACV42H,EAAe3sB,oBAAoBt2Z,EACrC,CACA,gBAAA+ob,CAAiB/ob,EAAMwG,GACrB,IAAI4ib,EACJ,MAAM1jb,EAAQ,IAAIggB,MAAM,GAAG1lB,iDAA+F,OAA1Copb,EAAqBpna,KAAKoha,kBAAuB,EAASgG,EAAmBlxZ,cAC7JlW,KAAKtc,MAAM,GAAGA,IAASc,GAGvBwb,KAAK++V,IAAI/zD,QAAQ51F,EAAO5yI,MAAO,CAC7BxkF,KAAMm8V,EAAWinC,YACjBtgB,QAAS1mB,EAAaitF,uBACtB1C,iBAAkB3mb,EAClB0F,QACA62S,OAAO,IAGT,MAAMnzI,EAAYpnJ,KAAKiha,eAAezib,QAAQR,GAC1CopK,GACFA,EAAUnpJ,QAAQva,EAEtB,CAGA,cAAAshb,CAAehnb,EAAMghP,EAAaqoI,GAChC,MAAM,MACJtyI,EAAK,YACLqsM,EAAW,eACXH,EAAc,aACdQ,GACEzha,KACEoyL,EAAKqvO,EAAazjb,GACxB,IAAK+2O,IAAUqsM,IAAgBhvO,EAG7B,OAFApyL,KAAK0N,KAAK,iCAAiC1vB,8CAC3Cijb,EAAe3sB,oBAAoBt2Z,GAGrC,MAAMiob,EAAgB/rF,EAAenlH,EAAMrqO,UAAYqqO,EAAMrqO,SAAWkS,IAClEspa,EAAahsF,EAAeknF,EAAY12a,UAAY02a,EAAY12a,SAAWkS,IAC3E0qa,EAAc33Z,KAAKhT,IAAI,EAAGqiO,GAC1BuoM,EAAY53Z,KAAKjT,IAAI2qW,EAAW4+D,EAAeC,GACjDqB,EAAYD,KAAiBl1O,EAAGizO,QAAUjzO,EAAGg2L,QAC/Ch2L,EAAGg2L,OAAQ,EACXpoX,KAAKQ,IAAI,aAAa8ma,KAAeC,eAAuBvpb,kBAC5Do0M,EAAGxyE,OAAO0nT,EAAaC,IAGvBtG,EAAe3sB,oBAAoBt2Z,EAEvC,CAGA,cAAA0mb,CAAe96a,EAAM5L,GACnB,MAAMo0M,EAAKpyL,KAAKyha,aAAazjb,GAC7B,GAAKo0M,EAMLA,EAAGg2L,OAAQ,EACXh2L,EAAGo1O,aAAa59a,QANd,IAAKoW,KAAKwha,cAAcxjb,GACtB,MAAM,IAAI0lB,MAAM,+BAA+B1lB,wCAMrD,CAKA,YAAAmnb,CAAasC,EAAazzB,EAAUh0Y,KAAKqia,wBACvC,IAAKruB,EAAQx6Z,OAGX,OAFAwmB,KAAKQ,IAAI,iEACT2e,QAAQC,UAAU/Q,KAAKo5Z,GAGzB,MAAM,eACJxG,GACEjha,KAGE0na,EAAqB1zB,EAAQl2Z,KAAIE,GAAQijb,EAAe7sB,cAAcp2Z,KAC5EmhC,QAAQivG,IAAIs5S,GAAoBr5Z,MAAK,KAEnCo5Z,IACAzzB,EAAQpxZ,SAAQ5E,IACd,MAAMo0M,EAAKpyL,KAAKyha,aAAazjb,GAIjB,MAANo0M,GAAcA,EAAGiiN,UACrB4sB,EAAe3sB,oBAAoBt2Z,EACrC,GACA,GAEN,CACA,oBAAAqkb,GACE,OAAOtob,OAAOiC,KAAKgkB,KAAKyha,aAC1B,CACA,iBAAAmF,CAAkB5ob,EAAMwG,EAAOkX,GAC7B,MAAMq2F,EAAS/xF,KAAKyha,aAAazjb,GACjC,IAAK+zG,EACH,OAEF,MAAMvxE,EAAW9kB,EAAGgF,KAAKV,KAAMhiB,GAC/BgiB,KAAKuvJ,UAAUvxK,GAAM3C,KAAK,CACxBmJ,QACAg8B,aAEFuxE,EAAO1yG,iBAAiBmF,EAAOg8B,EACjC,CACA,qBAAA+iZ,CAAsBvlb,GACpB,MAAM+zG,EAAS/xF,KAAKyha,aAAazjb,GAC5B+zG,GAGL/xF,KAAKuvJ,UAAUvxK,GAAM4E,SAAQkuC,IAC3BihE,EAAOzyG,oBAAoBwxC,EAAEtsC,MAAOssC,EAAEtQ,SAAS,GAEnD,GA22MAmnZ,mBAAoB3iB,GACpB4iB,gBApjmBF,MACE,WAAA/lZ,CAAYk9U,GACV/+V,KAAK++V,SAAM,EACX/+V,KAAK6na,cAAgB,EACrB7na,KAAK8na,oBAAsB,CAAC,EAC5B9na,KAAKQ,SAAM,EACXR,KAAK0N,UAAO,EACZ1N,KAAKtc,WAAQ,EACbsc,KAAK++V,IAAMA,EACX/+V,KAAKQ,IAAMvB,EAAOuB,IAAIE,KAAKzB,EAAQ,WACnCe,KAAK0N,KAAOzO,EAAOyO,KAAKhN,KAAKzB,EAAQ,cACrCe,KAAKtc,MAAQub,EAAOvb,MAAMgd,KAAKzB,EAAQ,YACvCe,KAAKi/V,mBACP,CACA,iBAAAA,GACE,MAAMF,EAAM/+V,KAAK++V,IACjBA,EAAItsU,GAAG2iL,EAAO5yI,MAAOxiE,KAAK/B,QAAS+B,MACnC++V,EAAItsU,GAAG2iL,EAAOkqJ,iBAAkBt/V,KAAKu/V,kBAAmBv/V,MACxD++V,EAAItsU,GAAG2iL,EAAOsxJ,cAAe1mW,KAAK2mW,eAAgB3mW,KACpD,CACA,mBAAA8/V,GACE,MAAMf,EAAM/+V,KAAK++V,IACZA,IAGLA,EAAIzqN,IAAI8gE,EAAO5yI,MAAOxiE,KAAK/B,QAAS+B,MACpC++V,EAAIzqN,IAAI8gE,EAAO5yI,MAAOxiE,KAAK+na,WAAY/na,MACvC++V,EAAIzqN,IAAI8gE,EAAOkqJ,iBAAkBt/V,KAAKu/V,kBAAmBv/V,MACzD++V,EAAIzqN,IAAI8gE,EAAOsxJ,cAAe1mW,KAAK2mW,eAAgB3mW,MACrD,CACA,OAAAgrI,GACEhrI,KAAK8/V,sBAEL9/V,KAAK++V,IAAM,KACX/+V,KAAK8na,oBAAsB,CAAC,CAC9B,CACA,SAAA5oE,CAAUC,GAAgB,CAC1B,QAAAC,GACEp/V,KAAK6na,cAAgB,CACvB,CACA,oBAAAG,CAAqB3oF,GACnB,OAAgB,MAARA,OAAe,EAASA,EAAKrhW,QAAU2gX,GAAyBtf,EAAKn8G,MAAQljO,KAAK++V,IAAIq/D,SAChG,CACA,iBAAA7+D,GACEv/V,KAAK6na,cAAgB,EACrB7na,KAAK8na,oBAAsB,CAAC,CAC9B,CACA,cAAAnhE,GACE3mW,KAAK6na,cAAgB,CACvB,CACA,OAAA5pa,CAAQzZ,EAAOoF,GACb,IAAIq+a,EAAYC,EAChB,GAAIt+a,EAAK2wS,MACP,OAEF,MAAMwkE,EAAM/+V,KAAK++V,IACXjgW,EAAUlV,EAAKkV,QACrB,OAAQlV,EAAKk3W,SACX,KAAK1mB,EAAaqlC,gBAClB,KAAKrlC,EAAao0B,kBAClB,KAAKp0B,EAAa+tF,eAClB,KAAK/tF,EAAaq0B,iBAEhB,YADA7kX,EAAKmpX,YAAc/yW,KAAKooa,2BAA2Bx+a,IAErD,KAAKwwV,EAAay2C,mBAEhB,GAAgC,OAA3Bo3C,EAAar+a,EAAKy1V,OAAiB4oF,EAAWn+S,IAKjD,YAJAlgI,EAAKmpX,YAAc,CACjB77U,OAAQy5U,GACRnlT,MAAOolT,KAKb,KAAKx2B,EAAainC,SAClB,KAAKjnC,EAAa2vC,mBAKd,OAFAngY,EAAKmpX,YAAc/yW,KAAKooa,2BAA2Bx+a,QACnDA,EAAKmpX,YAAY77U,OAASy5U,IAG9B,KAAKv2B,EAAaspB,kBAClB,KAAKtpB,EAAaupB,oBAChB,CACE,IAAI0kE,EAAeC,EAEnB,MAAM9kE,EAAa55W,EAAK40E,SAAWmgS,GAAyB/0W,EAAKs5O,MAAQ67H,EAAIq/D,UACzEx0a,EAAKk3W,UAAY1mB,EAAaspB,mBAA0D,OAAjC2kE,EAAgBz+a,EAAKkV,UAA4E,OAAvDwpa,EAAwBD,EAAcxnE,eAAyBynE,EAAsBloF,KACxLx2V,EAAKmpX,YAAc/yW,KAAKuoa,+BAA+B3+a,EAAM45W,IAG7D55W,EAAKqpX,YAAa,EAClBrpX,EAAKmpX,YAAc/yW,KAAKwoa,qBAAqB5+a,EAAM45W,GAEvD,CACA,OACF,KAAKppB,EAAa+oB,iBAClB,KAAK/oB,EAAa8oB,mBAIhB,YAH0D,kBAAnC,MAAXpkW,OAAkB,EAASA,EAAQokO,SAC7Ct5O,EAAKmpX,YAAc/yW,KAAKuoa,+BAA+B3+a,EAAMkV,EAAQokO,SAGzE,KAAKk3G,EAAaipB,uBAClB,KAAKjpB,EAAagpB,yBAClB,KAAKhpB,EAAampB,oBAClB,KAAKnpB,EAAakpB,4BAChB,GAAIxkW,EAAS,CACX,MAAMokO,EAAQ67H,EAAI/F,OAAO+F,EAAIq/D,WAC7B,GAAIl7L,IAAUpkO,EAAQ9gB,OAAS0gX,IAAmCx7H,EAAMooI,cAAcxsW,EAAQ8yE,UAAY9yE,EAAQ9gB,OAAS0gX,IAAsCx7H,EAAMsoI,iBAAiB1sW,EAAQ8yE,UAM9L,OAHAhoF,EAAKmpX,YAAc/yW,KAAKuoa,+BAA+B3+a,EAAMm1W,EAAIq/D,WACjEx0a,EAAKmpX,YAAY77U,OAASy5U,QAC1B/mX,EAAKmpX,YAAYvnT,MAAQolT,GAG7B,CACA,OACF,KAAKx2B,EAAak0E,oCAChB,CACE,MAAMprL,EAAQ67H,EAAI/F,OAAO+F,EAAIq/D,WACvBqK,EAA+B,MAATvlM,OAAgB,EAASA,EAAM58F,MAAM,cAC7DmiS,EACF7+a,EAAKmpX,YAAc,CACjB77U,OAAQy5U,GACRnlT,MAAOolT,GACP83D,UAAWD,GAGbzoa,KAAK2oa,eAAe/+a,EAExB,CACA,OACF,KAAKwwV,EAAa0hF,uBAClB,KAAK1hF,EAAaquD,kBAClB,KAAKruD,EAAa2hF,oBAEhB,YADAnya,EAAKmpX,YAAc/yW,KAAKwoa,qBAAqB5+a,EAAoC,OAA7Bs+a,EAAct+a,EAAKs5O,OAAiBglM,EAAcnpE,EAAIq/D,YAE5G,KAAKhkF,EAAa+xC,mBAClB,KAAK/xC,EAAaitF,uBAClB,KAAKjtF,EAAayqF,kBAClB,KAAKzqF,EAAawuF,mBAClB,KAAKxuF,EAAaovB,qBAClB,KAAKpvB,EAAayuF,sBAClB,KAAKzuF,EAAa0uF,sBAKhB,YAJAl/a,EAAKmpX,YAAc,CACjB77U,OAAQy5U,GACRnlT,MAAOolT,KAIThnX,EAAK5L,OAASm8V,EAAWmvE,kBAC3BtpZ,KAAK2oa,eAAe/+a,EAExB,CACA,cAAA++a,CAAe/+a,GACb,MAAM45W,EAAaxjW,KAAKgoa,qBAAqBp+a,EAAKy1V,MAElDz1V,EAAKqpX,YAAa,EAClBrpX,EAAKmpX,YAAc/yW,KAAKwoa,qBAAqB5+a,EAAM45W,EACrD,CACA,8BAAA+kE,CAA+B3+a,EAAM45W,GACnC,MACMqL,EAAcH,GADR1uW,KAAK++V,IACsBnsV,OAAO8tV,mBAAoB92W,GAC5D63U,EAAazhU,KAAK6na,gBAExB,GADc3qQ,GAAY2xM,EAAaptC,EAAY8sC,GAAe3kX,GAAOA,EAAK40B,UAE5E,MAAO,CACL0Y,OAAQy5U,GACRnlT,MAAOolT,GACP/B,cACAptC,cAGJ,MAAMsxC,EAAc/yW,KAAKwoa,qBAAqB5+a,EAAM45W,GAKpD,OAJIqL,IACFkE,EAAYlE,YAAcA,EAC1BkE,EAAYtxC,WAAaA,GAEpBsxC,CACT,CACA,0BAAAq1D,CAA2Bx+a,GACzB,MAAMm1W,EAAM/+V,KAAK++V,IAGXgqE,EAAoB/oa,KAAKgoa,qBAAqBp+a,EAAKy1V,MACnDn8G,EAAQ67H,EAAI/F,OAAO+vE,IACnB,eACJhpD,EAAc,cACdkwC,GACElxD,EAAInsV,OACFi8V,EAAcH,GAAe9kX,EAAKk3W,QAAQvgU,WAAW,OAAS0vX,EAAgBlwC,EAAgBn2X,GAC9Fo/a,EAAiBjqE,EAAI/F,OAAOp3T,QAAO,CAACga,EAAKsnL,IAAUtnL,EAAMsnL,EAAMunI,eAAe,GAEpF,GAAIvnI,EAAO,CACLt5O,EAAKk3W,UAAY1mB,EAAainC,UAChCn+I,EAAMunI,gBAGR,GADcvtM,GAAY2xM,EAAam6D,EAAgBz6D,GAAe3kX,GAAOA,EAAK40B,UAEhF,MAAO,CACL0Y,OAAQy5U,GACRnlT,MAAOolT,GACP/B,cACAptC,WAAYunG,EAGlB,CAGA,MAAMj2D,EAAc/yW,KAAKwoa,qBAAqB5+a,EAAMm/a,GAMpD,OAJIl6D,IACFkE,EAAYlE,YAAcA,EAC1BkE,EAAYtxC,WAAaunG,GAEpBj2D,CACT,CACA,oBAAAy1D,CAAqB5+a,EAAM45W,GACzB,MAAMzE,EAAM/+V,KAAK++V,IACE,OAAfyE,QAAsC5qW,IAAf4qW,IACzBA,EAAazE,EAAIq/D,WAEnB,MAAMl7L,EAAQljO,KAAK++V,IAAI/F,OAAOwK,GAC9B,GAAItgI,EAAO,CACT,IAAI+lM,EAAaC,EACjB,MAAMp2D,EAAelpX,EAAKk3W,QAC1B59H,EAAMwnI,YACFoI,IAAiB14B,EAAa2hF,qBAChC74L,EAAMunI,gBAGR,IAAI88C,GAAa,EACjB,MAAM,OACJvuD,EAAM,UACNolE,EAAS,aACTtE,EAAY,aACZ+C,GACE99D,EACCA,EAAI66D,mBACP76D,EAAIq/D,WAAa,GAEnB,MAAM+K,EAA6C,OAA5BF,EAAcr/a,EAAKy1V,WAAgB,EAAS4pF,EAAYjrb,KAGzEorb,GADoBD,IAAkBxqE,IAA2BmU,IAAiB14B,EAAay2C,oBAAgD,UAA1BjnY,EAAK+6a,mBAAiC7xD,IAAiB14B,EAAa0hF,wBAA0BhpD,IAAiB14B,EAAa2hF,uBAClM/iE,EAAOhgU,MAAK,EAC/DqhU,gBACIn3H,EAAMm3H,aAAeA,IAGrBgvE,EAD8C,UAA1Bz/a,EAAK+6a,mBAAiC7xD,IAAiB14B,EAAa0hF,wBAA0BhpD,IAAiB14B,EAAa2hF,sBACjG/iE,EAAOhgU,MAAK,EAC/D0+T,WACA2C,gBACIn3H,EAAMw0H,WAAaA,GAAYx0H,EAAMm3H,aAAeA,KAExDr8W,KAAMsrb,EACN13V,QAAS23V,GAC4B,OAAlCL,EAAiBt/a,EAAKkV,SAAmBoqa,EAAiB,CAAC,EAChE,IAAK,IAAI3vb,EAAIy/W,EAAOx/W,OAAQD,KAAM,CAChC,MAAMg3X,GAAah3X,EAAI6kb,GAAaplE,EAAOx/W,OAC3C,GAAI+2X,IAAc6tD,GAAa7tD,GAAaupD,GAAgBvpD,GAAassD,GAAgD,IAAhC7jE,EAAOuX,GAAW7F,UAAiB,CAC1H,IAAI8+D,EAAoBC,EACxB,MAAMC,EAAiB1wE,EAAOuX,GAE9B,GAAIuC,IAAiB14B,EAAainC,UAAY8nD,IAAkBxqE,IAA0B/0W,EAAKy1V,KAAM,CACnG,MAAMwhB,EAAe7H,EAAOuX,GAAWzP,QACvC,GAAID,EAAc,CAChB,MAAM8oE,EAAgB/5D,GAAkBhmX,EAAKy1V,KAAMwhB,EAAa7gB,UAAWp2V,EAAKy1V,KAAKnkU,OACrF,GAAqB,MAAjByuZ,GAAyBA,EAAc7/S,IACzC,QAEJ,CACF,KAAO,IAAIw/S,IAAsB5qE,IAAmCgrE,EAAep+D,cAAci+D,IAAyBD,IAAsB5qE,IAAsCgrE,EAAel+D,iBAAiB+9D,GAEpN,SACK,GAAIJ,IAAkBxqE,IAAuE,OAA3C6qE,EAAqBtmM,EAAMuoI,cAAwB+9D,EAAmBxwY,MAAK44C,GAAW83V,EAAep+D,cAAc15R,MAAau3V,IAAkBxqE,IAAgF,OAAjD8qE,EAAwBvmM,EAAMwoI,iBAA2B+9D,EAAsBzwY,MAAK44C,GAAW83V,EAAel+D,iBAAiB55R,MAAaw3V,GAA2BlmM,EAAMm3H,aAAeqvE,EAAervE,aAAe+uE,GAA2BlmM,EAAMm3H,aAAeqvE,EAAervE,YAAcgvE,GAA2BnmM,EAAMw0H,WAAagyE,EAAehyE,SAE5kB,QACF,CACA6vD,EAAYh3C,EACZ,KACF,CACF,CACA,GAAIg3C,GAAa,GAAKxoD,EAAIq/D,YAAc7W,EAGtC,OAFA39Z,EAAKqpX,YAAa,EAClBjzW,KAAK6na,cAAgB,EACd,CACL3wY,OAAQy5U,GACRnlT,MAAOolT,GACPiqD,cAAetT,EAGrB,CAGA,MAAO,CACLrwX,OAAQy5U,GACRnlT,MAAOolT,GAEX,CACA,UAAAm3D,CAAWvjb,EAAOoF,GAChB,IAAIggb,EACJ,OAAkD,OAAzCA,EAAoBhgb,EAAKmpX,kBAAuB,EAAS62D,EAAkB1yY,QAClF,KAAKy5U,GACH,MACF,KAAKA,GACH3wW,KAAK6pa,0BAA0Bjgb,GAC1BA,EAAKmpX,YAAYvyC,UAAY52U,EAAKk3W,UAAY1mB,EAAainC,SAErD,gCAAgCjiX,KAAKxV,EAAKlG,MAAMmF,WACzDmX,KAAK0N,KAAK,4BAA4B9jB,EAAK+6a,wFAC3C3ka,KAAK++V,IAAI+qE,qBAHTlgb,EAAK2wS,OAAQ,EAUf3wS,EAAK2wS,OACPv6R,KAAK++V,IAAIK,UAGb,CACA,yBAAAyqE,CAA0Bjgb,GACxB,MAAMm1W,EAAM/+V,KAAK++V,IACXgU,EAAcnpX,EAAKmpX,YACzB,IAAKA,EACH,OAEF,MAAM,MACJvnT,EAAK,UACLk9W,EAAS,cACT7N,GACE9nD,EACJ,OAAQvnT,GACN,KAAKolT,GACH5wW,KAAK+pa,YAAYngb,EAAMixa,GACvB,MACF,KAAKjqD,GACC83D,IACF3pE,EAAIirE,aAAelgE,GAAWA,GAAW1uX,QAAQstb,GAAa,GAC9D31D,EAAYvyC,UAAW,GAEzBxgU,KAAK0N,KAAK,0CAA0CqxV,EAAIirE,0BAIvDj3D,EAAYvyC,UACfxgU,KAAK+pa,YAAYngb,EAAMixa,EAE3B,CACA,WAAAkP,CAAYngb,EAAM45W,QACG5qW,IAAf4qW,GAA4B55W,EAAKmpX,cACnC/yW,KAAK0N,KAAK,sBAAsB81V,WAAoB55W,EAAKk3W,WACzD9gW,KAAK++V,IAAI87D,cAAgBr3D,EACzB55W,EAAKmpX,YAAYvyC,UAAW,EAE5BxgU,KAAK++V,IAAI07D,cAAgBz6Z,KAAK++V,IAAI87D,cAEtC,GA6slBAoP,cAhwGF,MACE,WAAApoZ,CAAYk9U,GACV/+V,KAAK++V,SAAM,EACX/+V,KAAKkqa,iCAAkC,EACvClqa,KAAKgwO,WAAQ,EACbhwO,KAAK+0N,MAAQ,KACb/0N,KAAKmqa,cAAW,EAChBnqa,KAAKoqa,kBAAoB,EACzBpqa,KAAKqqa,kBAAoB,EAEzBrqa,KAAKqlZ,sBAAmB,EACxBrlZ,KAAK++V,IAAMA,EACX/+V,KAAKi/V,mBACP,CACA,mBAAAqmD,CAAoBD,GAClBrlZ,KAAKqlZ,iBAAmBA,CAC1B,CACA,iBAAApmD,GACEj/V,KAAK++V,IAAItsU,GAAG2iL,EAAOuwM,gBAAiB3lZ,KAAK4lZ,iBAAkB5lZ,KAC7D,CACA,mBAAA8/V,GACE9/V,KAAK++V,IAAIzqN,IAAI8gE,EAAOuwM,gBAAiB3lZ,KAAK4lZ,iBAAkB5lZ,KAC9D,CACA,OAAAgrI,GACMhrI,KAAKgwO,OACP7kG,cAAcnrI,KAAKgwO,OAErBhwO,KAAK8/V,sBACL9/V,KAAKkqa,iCAAkC,EACvClqa,KAAK+0N,MAAQ,IACf,CACA,gBAAA6wL,CAAiBpha,EAAOoF,GACtB,MAAMgpB,EAAS5S,KAAK++V,IAAInsV,OACxB,GAAIA,EAAOulZ,kBAAmB,CAC5B,MAAMpjM,EAAQnrO,EAAKmrO,iBAAiB/lN,KAAKq3Y,iBAAmBz8Z,EAAKmrO,MAAQ,KACzE/0N,KAAK+0N,MAAQA,EACTA,GAAkD,oBAAlCA,EAAMu1M,0BACxBtqa,KAAKkqa,iCAAkC,GAEzCl7Z,KAAKm8H,cAAcnrI,KAAKgwO,OACxBhwO,KAAKgwO,MAAQhhO,KAAKi8H,YAAYjrI,KAAKuqa,iBAAiB7pa,KAAKV,MAAO4S,EAAOimZ,2BACzE,CACF,CACA,QAAA2R,CAAS9pN,EAAO+pN,EAAeC,GAC7B,MAAM55V,EAAci6C,YAAY9hI,MAChC,GAAIwhb,EAAe,CACjB,GAAIzqa,KAAKmqa,SAAU,CACjB,MAAMQ,EAAgB75V,EAAc9wE,KAAKmqa,SACnCS,EAAiBF,EAAgB1qa,KAAKoqa,kBACtCS,EAAiBJ,EAAgBzqa,KAAKqqa,kBACtCS,EAAa,IAAOF,EAAiBD,EACrC5rE,EAAM/+V,KAAK++V,IAMjB,GALAA,EAAI/zD,QAAQ51F,EAAO21N,SAAU,CAC3BH,eAAgBA,EAChBC,eAAgBA,EAChBG,mBAAoBN,IAElBI,EAAa,GAEXF,EAAiB7rE,EAAInsV,OAAOkmZ,8BAAgC+R,EAAgB,CAC9E,IAAII,EAAelsE,EAAIksE,aACvBhsa,EAAOyO,KAAK,mEAAqEu9Z,GAC7EA,EAAe,KAAgC,IAA1BlsE,EAAIkmD,kBAA2BlmD,EAAIkmD,kBAAoBgmB,KAC9EA,GAA8B,EAC9BlsE,EAAI/zD,QAAQ51F,EAAOqwM,uBAAwB,CACzCviL,MAAO+nM,EACP9kB,aAAcpnD,EAAIksE,eAEpBlsE,EAAIkmD,iBAAmBgmB,EACvBjra,KAAKqlZ,iBAAiBsB,kBAE1B,CAEJ,CACA3mZ,KAAKmqa,SAAWr5V,EAChB9wE,KAAKoqa,kBAAoBM,EACzB1qa,KAAKqqa,kBAAoBI,CAC3B,CACF,CACA,gBAAAF,GACE,MAAM7pN,EAAQ1gN,KAAK+0N,MACnB,GAAIrU,EACF,GAAI1gN,KAAKkqa,gCAAiC,CACxC,MAAMgB,EAAuBxqN,EAAM4pN,0BACnCtqa,KAAKwqa,SAAS9pN,EAAOwqN,EAAqBC,iBAAkBD,EAAqBE,mBACnF,MAEEpra,KAAKwqa,SAAS9pN,EAAOA,EAAM2qN,wBAAyB3qN,EAAM4qN,wBAGhE,GAuqGAjiC,wBAAwB,EAExBa,oBAAqB,EAErB3D,8BAA8B,EAE9B+1B,gBAAiB,EAEjBD,gBAAiB,EAEjBhB,eAAgB,EAEhBD,eAAgB,EAEhBD,uBAAwB,IAExBoQ,0BAA2B,IAE3B1N,mBAAoB,IAEpB9C,qBAAsB,GAEtBwB,uBAAuB,EAEvBQ,mBAAoB,EAEpBiB,gBAAiB,EAEjBwN,eAAgB,EAEhBnb,YAAY,EAEZprE,wBAAoBrsV,EAEpBosV,WAAY,CAAC,EAEbyjE,iBAAkB,CAAC,EAEnBH,gCAAiCnjE,GAEjCsmF,eAAe,EACf9/C,aAAa,EACbhjB,gBAAgB,EAChB+qD,UAAM96Z,EACN0uW,6BAA6B,EAC7BL,wBAAwB,EACxBC,uBAAuB,EACvBw5D,sBAAsB,EACtB9R,eAAgB,CACdrpX,QArJsB,CACxB47T,qBAAsB,IACtBC,cAAe,IACfT,aAAc,KACdC,WAAY,OAmJZqvD,cAAe,CACb1qX,QAAS,CACP47T,qBAAsB,IACtBC,cAAe,IACfT,aAAc,CACZa,YAAa,EACbC,aAAc,IACdE,gBAAiB,IACjBoN,QAAS,UAEXnO,WAAY,CACVY,YAAa,EACbC,aAAc,IACdE,gBAAiB,IACjBoN,QAAS,YAIftO,mBAAoB,CAClBl7T,QAAS,CACP47T,qBAAsBvkW,IACtBwkW,cAAe,IACfT,aAAc,CACZa,YAAa,EACbC,aAAc,EACdE,gBAAiB,GAEnBf,WAAY,CACVY,YAAa,EACbC,aAAc,IACdE,gBAAiB,OAIvBjB,mBAAoB,CAClBn7T,QAAS,CACP47T,qBAAsB,IACtBC,cAAe,IACfT,aAAc,CACZa,YAAa,EACbC,aAAc,EACdE,gBAAiB,GAEnBf,WAAY,CACVY,YAAa,EACbC,aAAc,IACdE,gBAAiB,OAIvBoe,eAAgB,CACdx6U,QAAS,CACP47T,qBAAsB,IACtBC,cAAe,KACfT,aAAc,CACZa,YAAa,EACbC,aAAc,EACdE,gBAAiB,GAEnBf,WAAY,CACVY,YAAa,EACbC,aAAc,IACdE,gBAAiB,OAIvB+pE,2BAA4B,CAC1BnmY,QAAS,CACP47T,qBAAsB,IACtBC,cAAe,IACfT,aAAc,CACZa,YAAa,EACbC,aAAc,EACdE,gBAAiB,GAEnBf,WAAY,CACVY,YAAa,EACbC,aAAc,IACdE,gBAAiB,OAMvBgqE,uBAAwB,IACxBC,wBAAyB,EACzBC,0BAA2B,IAC3BC,+BAAgC,KAChCC,oBAAqB,IACrBC,qBAAsB,EACtBC,uBAAwB,IACxBC,4BAA6B,KAC7BC,mBAAoB,IACpBC,oBAAqB,EACrBC,sBAAuB,IACvBC,2BAA4B,MAYrB,CACLC,WAAY5U,GAEZ6U,cAAc,EAEdC,aAAa,EAEbC,sBAAsB,EAEtBC,wBAAyB,UAEzBC,+BAAgC,KAEhCC,wBAAyB,UAEzBC,+BAAgC,KAEhCC,wBAAyB,aAEzBC,+BAAgC,GAEhCC,wBAAyB,aAEzBC,+BAAgC,GAEhCC,0BAA0B,IApCR,CAAC,EAAG,CACxBC,yBAv2QF,cAAuC3mD,GACrC,WAAA5kW,CAAYk9U,EAAK2nB,EAAiBjpC,GAChCr3T,MAAM24U,EAAK2nB,EAAiBjpC,EAAW,+BAAgCkhB,IACvE3+V,KAAKqta,gBAAkB,EACvBrta,KAAKsta,eAAiB,GACtBtta,KAAKuta,YAAc,KACnBvta,KAAKgmW,oBACP,CACA,mBAAA0S,GACE14W,KAAKimW,uBACL7/U,MAAMsyV,sBACN14W,KAAKuta,YAAc,IACrB,CACA,kBAAAvnE,GACE,MAAM,IACJjH,GACE/+V,KACJ++V,EAAItsU,GAAG2iL,EAAO8wJ,eAAgBlmW,KAAKmmW,gBAAiBnmW,MACpD++V,EAAItsU,GAAG2iL,EAAOgxJ,gBAAiBpmW,KAAKqmW,iBAAkBrmW,MACtD++V,EAAItsU,GAAG2iL,EAAOkqJ,iBAAkBt/V,KAAKu/V,kBAAmBv/V,MACxD++V,EAAItsU,GAAG2iL,EAAOyuJ,aAAc7jW,KAAKy7Z,cAAez7Z,MAChD++V,EAAItsU,GAAG2iL,EAAO5yI,MAAOxiE,KAAK/B,QAAS+B,MACnC++V,EAAItsU,GAAG2iL,EAAOo4N,wBAAyBxta,KAAKyta,wBAAyBzta,MACrE++V,EAAItsU,GAAG2iL,EAAOs4N,sBAAuB1ta,KAAK2ta,sBAAuB3ta,MACjE++V,EAAItsU,GAAG2iL,EAAO2uJ,sBAAuB/jW,KAAK4ta,sBAAuB5ta,MACjE++V,EAAItsU,GAAG2iL,EAAOy4N,wBAAyB7ta,KAAK8ta,wBAAyB9ta,MACrE++V,EAAItsU,GAAG2iL,EAAOoxJ,gBAAiBxmW,KAAKymW,iBAAkBzmW,MACtD++V,EAAItsU,GAAG2iL,EAAOukK,cAAe35W,KAAK45W,eAAgB55W,KACpD,CACA,oBAAAimW,GACE,MAAM,IACJlH,GACE/+V,KACJ++V,EAAIzqN,IAAI8gE,EAAO8wJ,eAAgBlmW,KAAKmmW,gBAAiBnmW,MACrD++V,EAAIzqN,IAAI8gE,EAAOgxJ,gBAAiBpmW,KAAKqmW,iBAAkBrmW,MACvD++V,EAAIzqN,IAAI8gE,EAAOkqJ,iBAAkBt/V,KAAKu/V,kBAAmBv/V,MACzD++V,EAAIzqN,IAAI8gE,EAAOyuJ,aAAc7jW,KAAKy7Z,cAAez7Z,MACjD++V,EAAIzqN,IAAI8gE,EAAO5yI,MAAOxiE,KAAK/B,QAAS+B,MACpC++V,EAAIzqN,IAAI8gE,EAAOo4N,wBAAyBxta,KAAKyta,wBAAyBzta,MACtE++V,EAAIzqN,IAAI8gE,EAAOs4N,sBAAuB1ta,KAAK2ta,sBAAuB3ta,MAClE++V,EAAIzqN,IAAI8gE,EAAO2uJ,sBAAuB/jW,KAAK4ta,sBAAuB5ta,MAClE++V,EAAIzqN,IAAI8gE,EAAOy4N,wBAAyB7ta,KAAK8ta,wBAAyB9ta,MACtE++V,EAAIzqN,IAAI8gE,EAAOoxJ,gBAAiBxmW,KAAKymW,iBAAkBzmW,MACvD++V,EAAIzqN,IAAI8gE,EAAOukK,cAAe35W,KAAK45W,eAAgB55W,KACrD,CACA,SAAAk/V,CAAUC,GACRn/V,KAAKo/V,WACLp/V,KAAKsI,MAAQk+W,GACbxmX,KAAKirI,YAlDe,KAmDpBjrI,KAAK+mX,iBAAmB/mX,KAAKm/V,cAAgBn/V,KAAK8mX,gBAAkB3nB,EACpEn/V,KAAKy4W,MACP,CACA,iBAAAlZ,GACEv/V,KAAKuta,YAAc,KACnBvta,KAAK0mX,gBAAgBpK,oBACvB,CACA,gBAAAjW,GACErmW,KAAKsta,eAAiB,GACtBlnZ,MAAMigV,kBACR,CACA,aAAAo1D,CAAcj3a,EAAOoF,GACnBoW,KAAKuta,YAAc3jb,EAAKk3W,OAC1B,CACA,uBAAAgtE,CAAwBtpb,EAAOoF,GAC7B,MAAM,KACJy1V,EAAI,QACJ4vE,GACErla,EAGJ,GAFAoW,KAAK6vW,aAAexwB,EACpBr/U,KAAKsI,MAAQk+W,IACRyoC,EACH,OAEF,MAAM3lD,EAAWtpW,KAAKsta,eAAetta,KAAKqta,gBAC1C,IAAK/jE,EACH,OAKF,IAAIiR,EACJ,MAAMiqD,EAAYnlF,EAAKnkU,MACvB,IAAK,IAAI3hC,EAAI,EAAGA,EAAI+vX,EAAS9vX,OAAQD,IACnC,GAAIirb,GAAal7D,EAAS/vX,GAAG2hC,OAASspZ,GAAal7D,EAAS/vX,GAAG4hC,IAAK,CAClEo/V,EAAYjR,EAAS/vX,GACrB,KACF,CAEF,MAAMw0b,EAAU1uF,EAAKnkU,MAAQmkU,EAAK30V,SAC9B6vX,EACFA,EAAUp/V,IAAM4yZ,GAEhBxzD,EAAY,CACVr/V,MAAOspZ,EACPrpZ,IAAK4yZ,GAEPzkE,EAASjuX,KAAKk/X,IAEhBv6W,KAAK0mX,gBAAgBlL,aAAan8B,GAClCr/U,KAAKoqX,qBAAqB/qC,EAAM,KAClC,CACA,gBAAAonB,CAAiBjiX,EAAOoF,GACtB,MAAM,YACJo1O,EAAW,UACXqoI,GACEz9W,EACJ,GAAoB,IAAhBo1O,GAAqBqoI,IAAczkW,OAAO63R,kBAAmB,CAC/D,MAAMuzI,EAAqB3mE,EAAY,EACvC,GAAI2mE,GAAsB,EACxB,OAEFpkb,EAAKokb,mBAAqBr+Z,KAAKhT,IAAI,EAAGqxa,GACtChua,KAAKsta,eAAe1qb,SAAQ0mX,IAC1B,IAAK,IAAI/vX,EAAI,EAAGA,EAAI+vX,EAAS9vX,QAC3B,GAAI8vX,EAAS/vX,GAAG4hC,KAAO6yZ,EACrB1kE,EAASrkW,YADX,CAGO,KAAIqkW,EAAS/vX,GAAG2hC,MAAQ8yZ,GAG7B,MAFA1kE,EAAS/vX,GAAG2hC,MAAQ8yZ,EAItBz0b,GADA,CAEF,IAEFymB,KAAK0mX,gBAAgBxK,uBAAuBl9I,EAAagvM,EAAoBrvE,GAC/E,CACF,CACA,cAAAib,CAAep1X,EAAOoF,GAElB,IAAIq9a,EADDjna,KAAKgnX,gBAAkBp9X,EAAKy1V,KAAKrhW,OAAS2gX,IAEX,OAA7BsoE,EAAcjna,KAAK+0N,QAAkBkyM,EAAY39D,SAAS9vX,SAC7DwmB,KAAKgnX,gBAAiB,EAG5B,CAGA,OAAA/oX,CAAQzZ,EAAOoF,GACb,MAAMy1V,EAAOz1V,EAAKy1V,MACL,MAARA,OAAe,EAASA,EAAKrhW,QAAU2gX,KACtC/0W,EAAKk3W,UAAY1mB,EAAainC,UAChCrhX,KAAK0mX,gBAAgBlL,aAAan8B,GAAM,GAEtCr/U,KAAK2mX,aACP3mX,KAAK2mX,YAAY7nC,gBAEf9+U,KAAKsI,QAAUk+W,KACjBxmX,KAAKsI,MAAQk+W,IAGnB,CAGA,uBAAAinD,CAAwBjpb,GAAO,eAC7Bw8W,IAEIhhW,KAAKg5V,QAAUg6C,GAAyBhzY,KAAKg5V,OAAQgI,GACvDhhW,KAAKg5V,OAASgI,EAAeljX,KAAImwb,GAAiB,IAAI3jE,GAAM2jE,MAG9Djua,KAAKsta,eAAiB,GACtBtta,KAAKg5V,OAASgI,EAAeljX,KAAImwb,IAC/B,MAAM/qM,EAAQ,IAAIonI,GAAM2jE,GAExB,OADAjua,KAAKsta,eAAepqM,EAAMr3O,IAAM,GACzBq3O,CAAK,IAEdljO,KAAK0mX,gBAAgBxK,uBAAuB,EAAGt5W,OAAO63R,kBAAmBkkE,IACzE3+V,KAAK6vW,aAAe,KACpB7vW,KAAK6mX,YAAc,KACrB,CACA,qBAAA8mD,CAAsBnpb,EAAOoF,GAC3B,IAAI6gY,EAEJ,GADAzqX,KAAKqta,eAAiBzjb,EAAKiC,GACW,OAA/B4+X,EAAezqX,KAAKg5V,UAAmByxB,EAAajxY,SAAoC,IAAzBwmB,KAAKqta,eAEzE,YADArta,KAAKmrI,gBAKP,MAAM+iS,EAAelua,KAAKg5V,OAAOh5V,KAAKqta,gBAClB,MAAhBa,GAAwBA,EAAaptE,QACvC9gW,KAAK6mX,YAAc7mX,KAAKmua,sBAExBnua,KAAK6mX,YAAc,KAEjBqnD,GACFlua,KAAKirI,YA7La,IA+LtB,CAGA,qBAAA2iS,CAAsBppb,EAAOoF,GAC3B,IAAIwkb,EACJ,MAAM,eACJf,EAAc,OACdr0E,GACEh5V,MAEF8gW,QAAS6L,EACT9gX,GAAI+8V,GACFh/V,EACJ,IAAKovW,EAEH,YADAh5V,KAAK0N,KAAK,kDAAkDk7U,KAG9D,MAAMv3N,EAAQ2nO,EAAOpQ,GACrB,GAAIA,GAAWoQ,EAAOx/W,SAAW63I,EAC/B,OAEFrxH,KAAKQ,IAAI,kBAAkBooV,aAAmB+jB,EAAWhsB,WAAWgsB,EAAW5sB,SAAS4sB,EAAWrqB,WAAa,SAASqqB,EAAWrqB,cAAcqqB,EAAWnqB,iBAAmB,eAAemqB,EAAW7rB,iBAC1M9gV,KAAK6mX,YAAc7mX,KAAKmua,sBACxB,IAAIpwD,EAAU,EACd,GAAIpR,EAAWvsB,MAA4C,OAAnCguF,EAAiB/8S,EAAMyvO,UAAoBstE,EAAehuF,KAAM,CACtF,MAAMmtF,EAAcvta,KAAKuta,YACzB,GAAI5gE,EAAWhrB,oBAAsB4rF,EACnC,OAEF,MAAMc,EAA2Bd,EAAYvtF,UAAU,GAWrD,IAAIgoC,EAVN,GAAK32P,EAAMyvO,QAWTid,EAAU/9W,KAAKqvX,eAAe1iB,EAAYt7O,EAAMyvO,QAA2D,OAAjDknB,EAAwBhoX,KAAKmnX,sBAA2B,EAASa,EAAsBlnB,SACjI,IAAZid,GAAiBswD,IAEnBtwD,EAAUswD,EAAyBnzZ,MACnC+yV,GAAWtB,EAAYoR,SAdrBpR,EAAWlqB,oBAAsB8qF,EAAY9qF,oBAC/Co8B,GAAwBlS,EAAY4gE,GACpCxvD,EAAUpR,EAAW3sB,UAAU,GAAG9kU,OACzBmzZ,IAETtwD,EAAUswD,EAAyBnzZ,MACnC+yV,GAAWtB,EAAYoR,GAW7B,CAGA,GAFA1sP,EAAMyvO,QAAU6L,EAChB3sW,KAAKmnX,gBAAkB91P,EACnBu3N,IAAYykF,IAGXrta,KAAKonX,qBAAuBpnX,KAAKuta,aAAgB5gE,EAAWvsB,MAC/DpgV,KAAK2vX,iBAAiB3vX,KAAKuta,aAAe5gE,EAAYoR,GAIxD/9W,KAAKy4W,OAGD9L,EAAWvsB,OAASpgV,KAAK2mX,aAAe3mX,KAAK+0N,OAAS/0N,KAAKsI,QAAUk+W,IAAY,CACjE5W,GAAkB,KAAMjD,EAAW3sB,UAAWhgV,KAAK+0N,MAAMjkJ,YAAa,KAEtF9wE,KAAK0N,KAAK,+CACV2jH,EAAMyvO,aAAUloW,EAEpB,CACF,CACA,2BAAAqwX,CAA4B2C,GAC1B,MAAM,KACJvsC,EAAI,QACJ1qU,GACEi3W,EACE9B,EAAczqC,EAAKhB,YACnB0gB,EAAM/+V,KAAK++V,IACjB,IAAI/+V,KAAK+oX,mBAAmB1pC,IAIxB1qU,GAAWA,EAAQ+8E,WAAa,GAAoB,MAAfo4R,GAAuBA,EAAY5vY,KAAO4vY,EAAYznO,IAA6B,YAAvBynO,EAAY5qX,OAAsB,CACrI,MAAM+0C,EAAY82E,YAAY9hI,MAE9B+W,KAAKqnX,UAAUhmO,QAAQ,IAAIr0D,WAAWr4E,GAAUm1W,EAAY5vY,IAAI63G,OAAQ+3R,EAAYznO,GAAGtwD,QAAQ3pE,OAAMniB,IASnG,MARA84V,EAAI/zD,QAAQ51F,EAAO5yI,MAAO,CACxBxkF,KAAMm8V,EAAWinC,YACjBtgB,QAAS1mB,EAAa2vC,mBACtBxvF,OAAO,EACP72S,MAAOuiB,EACPuH,OAAQvH,EAAIpd,QACZw2V,SAEIp5U,CAAG,IACRoI,MAAK4sJ,IACN,MAAMpnH,EAAUk3E,YAAY9hI,MAC5B81W,EAAI/zD,QAAQ51F,EAAO40K,eAAgB,CACjC3qC,OACA1qU,QAASsmJ,EACT2vI,MAAO,CACLq/E,OAAQh2U,EACRi2U,SAAUr2U,IAEZ,IACDzrB,OAAMniB,IACPjG,KAAK0N,KAAK,GAAGzH,EAAIrhB,SAASqhB,EAAIpd,WAC9BmX,KAAKsI,MAAQk+W,EAAU,GAE3B,CACF,CACA,MAAAxN,GACE,GAAKh5W,KAAK+0N,OAIV,GAAI/0N,KAAKsI,QAAUk+W,GAAY,CAC7B,MAAM,eACJ6mD,EAAc,OACdr0E,GACEh5V,KACEqxH,EAAkB,MAAV2nO,OAAiB,EAASA,EAAOq0E,GAC/C,IAAKh8S,IAAU2nO,EAAOx/W,SAAW63I,EAAMyvO,QACrC,OAEF,MAAM,OACJluV,GACE5S,KACE8wE,EAAc9wE,KAAKitX,kBACnBjQ,EAAeL,GAAaK,aAAah9W,KAAKsta,eAAetta,KAAKqta,iBAAmB,GAAIv8V,EAAal+D,EAAO01W,gBAEjHntW,IAAKytW,EACL/sX,IAAKyhX,GACHN,EACEsxD,EAAiBtua,KAAKqpX,iBAAiBrpX,KAAK+0N,MAAO4pI,IACnD4vE,EAAel9S,EAAMyvO,QAE3B,GAAIwc,EADct9W,KAAKotX,mBAAqC,MAAlBkhD,OAAyB,EAASA,EAAezya,KAAO0ya,EAAa7rF,oBAE7G,OAEF,MAAM1C,EAAYuuF,EAAavuF,UACzB6tC,EAAU7tC,EAAUxmW,OACpB2hC,EAAMozZ,EAAa1rF,KACzB,IAAI2rF,EAAY,KAChB,MAAM3+D,EAAe7vW,KAAK6vW,aAC1B,GAAI+Y,EAAmBztW,EAAK,CAC1B,MAAMqoM,EAAY5wM,EAAOm9V,uBACnB0+D,EAAkB7lD,EAAmBztW,EAAMqoM,EAAY,EAAIA,EACjEgrN,EAAY5+D,GAAkBC,EAAc7vB,EAAWrwU,KAAKhT,IAAIqjV,EAAU,GAAG9kU,MAAO0tW,GAAmB6lD,IAClGD,GAAa3+D,GAAgBA,EAAa30V,MAAQ8kU,EAAU,GAAG9kU,QAClEszZ,EAAYxuF,EAAU,GAE1B,MACEwuF,EAAYxuF,EAAU6tC,EAAU,GAElC,IAAK2gD,EACH,OAGF,GADAA,EAAYxua,KAAKiuX,0BAA0BugD,GACtB,gBAAjBA,EAAUjxF,GAAsB,CAElC,MACMoe,EAAW3b,EADAwuF,EAAUjxF,GAAKgxF,EAAa5tF,QACP,GAClCgb,GAAYA,EAAS/4P,KAAO4rU,EAAU5rU,IAAM5iG,KAAK0mX,gBAAgBxrV,SAASygU,KAAcud,KAC1Fs1D,EAAY7yE,EAEhB,CACI37V,KAAK0mX,gBAAgBxrV,SAASszY,KAAet1D,IAE/Cl5W,KAAK2oX,aAAa6lD,EAAWn9S,EAAOu3P,EAExC,OA1DE5oX,KAAKsI,MAAQk+W,EA2DjB,CACA,kBAAA4G,CAAmBshD,GACjB,MAAMC,EAAkBvoZ,MAAMgnW,qBAC9B,OAAKshD,EAGE/+Z,KAAKhT,IAAIgya,EAAiBD,GAFxBC,CAGX,CACA,YAAAhmD,CAAatpC,EAAMn8G,EAAO0lJ,GACxB5oX,KAAK2mX,YAActnC,EACH,gBAAZA,EAAK9B,GACPv9U,KAAK6pX,iBAAiBxqC,EAAMn8G,IAE5BljO,KAAKonX,oBAAqB,EAC1BhhW,MAAMuiW,aAAatpC,EAAMn8G,EAAO0lJ,GAEpC,CACA,yBAAIulD,GACF,OAAO,IAAIx6B,GAAmB3zY,KAAKsta,eAAetta,KAAKqta,iBAAmB,GAC5E,GA6+PAuB,wBAn9PF,cAAsC/9D,GACpC,WAAAhvV,CAAYk9U,GACV34U,MAAM24U,EAAK,+BACX/+V,KAAK+0N,MAAQ,KACb/0N,KAAKg2K,OAAS,GACdh2K,KAAK6ua,SAAW,KAChB7ua,KAAK8ua,cAAgB,GACrB9ua,KAAK4oV,SAAW,EAChB5oV,KAAKkua,aAAe,KACpBlua,KAAK+ua,oBAAqB,EAC1B/ua,KAAKgva,oBAAsB,EAC3Bhva,KAAKiva,qBAAuB,IAAMjva,KAAKkva,gBAAgB,GACvDlva,KAAKmva,qBAAsB,EAC3Bnva,KAAKova,yBAA2B,EAChCpva,KAAKqva,kBAAmB,EACxBrva,KAAKsva,oBAAsB,KAKzB,GAJKtva,KAAKmva,qBACRnga,KAAKm8H,cAAcnrI,KAAKova,0BAGrBpva,KAAK+0N,QAAU/0N,KAAK++V,IAAInsV,OAAOu6Z,yBAClC,OAEF,IAAIpmE,EAAY,KAChB,MAAM/wL,EAASmvL,GAAqBnlW,KAAK+0N,MAAM+xI,YAC/C,IAAK,IAAIvtX,EAAI,EAAGA,EAAIy8L,EAAOx8L,OAAQD,IACjC,GAAuB,WAAnBy8L,EAAOz8L,GAAG4T,KAEZ45W,EAAY/wL,EAAOz8L,QACd,GAAuB,YAAnBy8L,EAAOz8L,GAAG4T,KAAoB,CACvC45W,EAAY/wL,EAAOz8L,GACnB,KACF,CAIF,MAAMqvW,EAAU5oV,KAAKuva,sBAAsBxoE,GACvC/mW,KAAK0zY,gBAAkB9qD,GACzB5oV,KAAKwva,iBAAiB5mF,EACxB,EAEF5oV,KAAKi/V,mBACP,CACA,OAAAj0N,GACEhrI,KAAK8/V,sBACL9/V,KAAKg2K,OAAOx8L,OAAS,EACrBwmB,KAAK8ua,cAAct1b,OAAS,EAC5BwmB,KAAKkua,aAAe,KACpBlua,KAAKsva,oBAAsBtva,KAAKiva,qBAAuB,KACvD7oZ,MAAM4kH,SACR,CACA,mBAAIykS,GACF,OAAOzva,KAAKqva,gBACd,CACA,mBAAII,CAAgBr1b,GAClB4lB,KAAKqva,iBAAmBj1b,EACpB4lB,KAAK4oV,SAAW,GAClB5oV,KAAK0va,kBAET,CACA,iBAAAzwE,GACE,MAAM,IACJF,GACE/+V,KACJ++V,EAAItsU,GAAG2iL,EAAO8wJ,eAAgBlmW,KAAKmmW,gBAAiBnmW,MACpD++V,EAAItsU,GAAG2iL,EAAOgxJ,gBAAiBpmW,KAAKqmW,iBAAkBrmW,MACtD++V,EAAItsU,GAAG2iL,EAAOkqJ,iBAAkBt/V,KAAKu/V,kBAAmBv/V,MACxD++V,EAAItsU,GAAG2iL,EAAOywM,gBAAiB7lZ,KAAK8lZ,iBAAkB9lZ,MACtD++V,EAAItsU,GAAG2iL,EAAOoqJ,cAAex/V,KAAKy/V,eAAgBz/V,MAClD++V,EAAItsU,GAAG2iL,EAAOmmN,gBAAiBv7Z,KAAKw7Z,iBAAkBx7Z,MACtD++V,EAAItsU,GAAG2iL,EAAO2uJ,sBAAuB/jW,KAAK4ta,sBAAuB5ta,MACjE++V,EAAItsU,GAAG2iL,EAAO5yI,MAAOxiE,KAAK/B,QAAS+B,KACrC,CACA,mBAAA8/V,GACE,MAAM,IACJf,GACE/+V,KACJ++V,EAAIzqN,IAAI8gE,EAAO8wJ,eAAgBlmW,KAAKmmW,gBAAiBnmW,MACrD++V,EAAIzqN,IAAI8gE,EAAOgxJ,gBAAiBpmW,KAAKqmW,iBAAkBrmW,MACvD++V,EAAIzqN,IAAI8gE,EAAOkqJ,iBAAkBt/V,KAAKu/V,kBAAmBv/V,MACzD++V,EAAIzqN,IAAI8gE,EAAOywM,gBAAiB7lZ,KAAK8lZ,iBAAkB9lZ,MACvD++V,EAAIzqN,IAAI8gE,EAAOoqJ,cAAex/V,KAAKy/V,eAAgBz/V,MACnD++V,EAAIzqN,IAAI8gE,EAAOmmN,gBAAiBv7Z,KAAKw7Z,iBAAkBx7Z,MACvD++V,EAAIzqN,IAAI8gE,EAAO2uJ,sBAAuB/jW,KAAK4ta,sBAAuB5ta,MAClE++V,EAAIzqN,IAAI8gE,EAAO5yI,MAAOxiE,KAAK/B,QAAS+B,KACtC,CAGA,eAAAmmW,CAAgB3hX,EAAOoF,GACrBoW,KAAK+0N,MAAQnrO,EAAKmrO,MACb/0N,KAAK+0N,QAGN/0N,KAAKgva,oBAAsB,IAC7Bhva,KAAK0zY,cAAgB1zY,KAAKgva,mBAC1Bhva,KAAKgva,oBAAsB,GAE7Bhva,KAAKmva,sBAAwBnva,KAAK+0N,MAAM+xI,YAAc,aAAc9mW,KAAK+0N,MAAM+xI,YAC3E9mW,KAAKmva,oBACPnva,KAAKkva,gBAAgB,KAErBlva,KAAK+0N,MAAM+xI,WAAWznX,iBAAiB,SAAU2gB,KAAKiva,sBAE1D,CACA,eAAAC,CAAgB1yY,GACdxtB,KAAKm8H,cAAcnrI,KAAKova,yBACxBpva,KAAKova,wBAA0Bpga,KAAKi8H,YAAYjrI,KAAKsva,oBAAqB9yY,EAC5E,CACA,gBAAA6pU,GACE,IAAKrmW,KAAK+0N,MACR,OAEF/lN,KAAKm8H,cAAcnrI,KAAKova,yBACnBpva,KAAKmva,qBACRnva,KAAK+0N,MAAM+xI,WAAWxnX,oBAAoB,SAAU0gB,KAAKiva,sBAEvDjva,KAAK4oV,SAAW,IAClB5oV,KAAKgva,mBAAqBhva,KAAK4oV,SAEduc,GAAqBnlW,KAAK+0N,MAAM+xI,YAExClkX,SAAQyuI,IACjBszO,GAAiBtzO,EAAM,IAGzBrxH,KAAK0zY,eAAiB,EACtB1zY,KAAK+0N,MAAQ,IACf,CACA,iBAAAwqI,GACEv/V,KAAKg2K,OAAS,GACdh2K,KAAK6ua,SAAW,KAChB7ua,KAAK8ua,cAAgB,GACrB9ua,KAAK4oV,SAAW,EAChB5oV,KAAKkua,aAAe,KACpBlua,KAAK+ua,oBAAqB,CAC5B,CAGA,gBAAAjpB,CAAiBtha,EAAOoF,GACtBoW,KAAKg2K,OAASpsL,EAAKo3W,cACrB,CACA,qBAAA4sE,CAAsBppb,EAAOoF,GAC3B,MAAM,GACJiC,EAAE,QACF+lF,EAAO,QACPkvR,GACEl3W,EACE+lb,EAAqB3va,KAAK8ua,cAAcjjb,GAC9C,IAAK8jb,GAAsBA,EAAmB/9V,UAAYA,EAExD,YADA5xE,KAAK0N,KAAK,0BAA0B7hB,eAAgB+lF,+BAA2D,MAAtB+9V,OAA6B,EAASA,EAAmB/9V,WAGpJ,MAAM2sS,EAAaoxD,EAAmB7uE,QACtC6uE,EAAmB7uE,QAAUl3W,EAAKk3W,QAClC9gW,KAAKQ,IAAI,kBAAkB3U,MAAO8jb,EAAmB/qb,cAAc+qb,EAAmBj7M,cAAc9iJ,aAAmBkvR,EAAQngB,WAAWmgB,EAAQ/gB,UAC9Il0V,IAAOmU,KAAK4oV,SACd5oV,KAAK2xW,eAAe9lX,EAAIjC,EAAM20X,EAElC,CACA,cAAA9e,CAAej7W,EAAOoF,GACpBoW,KAAK+pa,YAAYngb,EAAKs5O,MACxB,CACA,gBAAAs4L,CAAiBh3a,EAAOoF,GACtBoW,KAAK+pa,YAAYngb,EAAKs5O,MACxB,CACA,WAAA6mM,CAAYvmE,GACV,MAAMg9D,EAAYxga,KAAK++V,IAAI/F,OAAOwK,GAClC,IAAKg9D,EACH,OAEF,MAAM90D,EAAiB80D,EAAU90D,gBAAkB,KAC7CkkE,EAAgB5va,KAAK6ua,SAC3B,IAAIX,EAAelua,KAAKkua,aACxB,IAAKxiE,IAAoC,MAAjBkkE,OAAwB,EAASA,EAAcp2b,WAA+B,MAAlBkyX,OAAyB,EAASA,EAAelyX,SAA6B,MAAlBkyX,GAA0BA,EAAe1yU,MAAK44C,IAAkF,KAArD,MAAjBg+V,OAAwB,EAASA,EAAcx0b,QAAQw2F,MAAmB,CAClR5xE,KAAK6ua,SAAWnjE,EAChB1rW,KAAK4oV,SAAW,EAChB5oV,KAAKkua,aAAe,KACpB,MAAMltE,EAAiBhhW,KAAKg2K,OAAOhyK,QAAOqtH,IAAUq6O,IAA6D,IAA3CA,EAAetwX,QAAQi2I,EAAMz/C,WACnG,GAAIovR,EAAexnX,OAEbwmB,KAAK+ua,qBAAuB/tE,EAAehoU,MAAKq4F,GAASA,EAAM9rF,YACjEvlC,KAAK+ua,oBAAqB,GAG5B/tE,EAAep+W,SAAQ,CAACyuI,EAAO93I,KAC7B83I,EAAMxlI,GAAKtS,CAAC,SAET,IAAK20b,IAAiBlua,KAAK8ua,cAAct1b,OAE9C,OAEFwmB,KAAK8ua,cAAgB9tE,EAGrB,MAAM6uE,EAAqB7va,KAAK++V,IAAInsV,OAAOi9Z,mBAC3C,IAAK3B,GAAgB2B,EAAoB,CACvC7va,KAAK+ua,oBAAqB,EAC1B,MAAMe,EAAap4D,GAAmBm4D,EAAoB7uE,GAC1D,GAAI8uE,GAAc,EAChB5B,EAAeltE,EAAe8uE,OACzB,CACL,MAAMC,EAAWr4D,GAAmBm4D,EAAoB7va,KAAKg2K,QAC7Dk4P,EAAelua,KAAKg2K,OAAO+5P,EAC7B,CACF,CAGA,IAAInnF,EAAU5oV,KAAKgwa,YAAY9B,IACd,IAAbtlF,GAAkBslF,IACpBtlF,EAAU5oV,KAAKgwa,YAAY,OAI7B,MAAMC,EAAwB,CAC5BjvE,kBAEFhhW,KAAKQ,IAAI,6BAA6BwgW,EAAexnX,6BAA+C,MAAlBkyX,OAAyB,EAASA,EAAe9sW,KAAK,kBACxIoB,KAAK++V,IAAI/zD,QAAQ51F,EAAOo4N,wBAAyByC,IAChC,IAAbrnF,IAAoC,IAAlB5oV,KAAK4oV,SACzB5oV,KAAKwva,iBAAiB5mF,EAE1B,MAAW5oV,KAAK0xW,qBAAqBw8D,IAEnClua,KAAKwva,iBAAiBxva,KAAK4oV,QAE/B,CACA,WAAAonF,CAAY9B,GACV,MAAMl4P,EAASh2K,KAAK8ua,cACdoB,EAAgBlwa,KAAK+ua,mBAC3B,IAAK,IAAIx1b,EAAI,EAAGA,EAAIy8L,EAAOx8L,OAAQD,IAAK,CACtC,MAAM83I,EAAQ2kD,EAAOz8L,GACrB,KAAI22b,GAAkB7+S,EAAM9rF,WAAY2qY,GAAkBhC,MAGrDA,GAAgBt2D,GAAcvmP,EAAO68S,IACxC,OAAO30b,CAEX,CACA,GAAI20b,EAAc,CAChB,IAAK,IAAI30b,EAAI,EAAGA,EAAIy8L,EAAOx8L,OAAQD,IAAK,CACtC,MAAM83I,EAAQ2kD,EAAOz8L,GACrB,GAAI45Z,GAAyB+6B,EAAa5nS,MAAOjV,EAAMiV,MAAO,CAAC,WAAY,iBAAkB,oBAC3F,OAAO/sJ,CAEX,CACA,IAAK,IAAIA,EAAI,EAAGA,EAAIy8L,EAAOx8L,OAAQD,IAAK,CACtC,MAAM83I,EAAQ2kD,EAAOz8L,GACrB,GAAI45Z,GAAyB+6B,EAAa5nS,MAAOjV,EAAMiV,MAAO,CAAC,aAC7D,OAAO/sJ,CAEX,CACF,CACA,OAAQ,CACV,CACA,qBAAAg2b,CAAsBxoE,GACpB,GAAIA,EAAW,CACb,MAAM/wL,EAASh2K,KAAK8ua,cACpB,IAAK,IAAIv1b,EAAI,EAAGA,EAAIy8L,EAAOx8L,OAAQD,IAAK,CAEtC,GAAIk6Z,GADUz9N,EAAOz8L,GACoBwtX,GACvC,OAAOxtX,CAEX,CACF,CACA,OAAQ,CACV,CACA,OAAA0kB,CAAQzZ,EAAOoF,IACTA,EAAK2wS,OAAU3wS,EAAKkV,UAGpBlV,EAAKkV,QAAQ9gB,OAAS0gX,IAAsC90W,EAAKkV,QAAQjT,KAAOmU,KAAK4oV,SAAa5oV,KAAK6ua,WAA6D,IAAjD7ua,KAAK6ua,SAASzzb,QAAQwO,EAAKkV,QAAQ8yE,UACxJ5xE,KAAK4yW,WAAWhpX,GAEpB,CACA,qBAAIumb,GACF,OAAOnwa,KAAKg2K,MACd,CAGA,kBAAIgrL,GACF,OAAOhhW,KAAK8ua,aACd,CAGA,iBAAIp7B,GACF,OAAO1zY,KAAK4oV,OACd,CACA,iBAAI8qD,CAAc08B,GAChBpwa,KAAK+ua,oBAAqB,EAC1B/ua,KAAKwva,iBAAiBY,EACxB,CACA,iBAAAC,CAAkBC,GAEhB,GADAtwa,KAAK++V,IAAInsV,OAAOi9Z,mBAAqBS,EACjCA,EAAgB,CAClB,MAAMH,EAAoBnwa,KAAKmwa,kBAE/B,GADAnwa,KAAK+ua,oBAAqB,EACtBoB,EAAkB32b,OAAQ,CAE5B,MAAM00b,EAAelua,KAAKkua,aAC1B,GAAIA,GAAgBt2D,GAAc04D,EAAgBpC,GAChD,OAAOA,EAGT,MAAM4B,EAAap4D,GAAmB44D,EAAgBtwa,KAAK8ua,eAC3D,GAAIgB,GAAc,EAAG,CACnB,MAAMz+S,EAAQrxH,KAAK8ua,cAAcgB,GAEjC,OADA9va,KAAKwva,iBAAiBM,GACfz+S,CACT,CAAO,GAAI68S,EAGT,OAAO,KACF,CAEL,MAAM6B,EAAWr4D,GAAmB44D,EAAgBH,GACpD,GAAIJ,GAAY,EACd,OAAOI,EAAkBJ,EAE7B,CACF,CACF,CACA,OAAO,IACT,CACA,YAAA7+D,CAAaK,GACXnrV,MAAM8qV,eACN,MAAMg9D,EAAelua,KAAKkua,aAC1B,GAAIlua,KAAKwxW,mBAAmB08D,IAAiBA,EAAc,CACzD,MAAMrib,EAAKqib,EAAarib,GAClB+lF,EAAUs8V,EAAat8V,QAC7B,IAAI78D,EAAMm5Z,EAAan5Z,IACvB,GAAIw8V,EACF,IACEx8V,EAAMw8V,EAAiBlH,cAAct1V,EACvC,CAAE,MAAOrxB,GACPsc,KAAK0N,KAAK,6DAA6DhqB,IACzE,CAEFsc,KAAKQ,IAAI,oCAAoC3U,KAC7CmU,KAAK++V,IAAI/zD,QAAQ51F,EAAOwqJ,uBAAwB,CAC9C7qV,MACAlpB,KACA+lF,UACAyuR,mBAAoBkR,GAAoB,MAE5C,CACF,CAOA,gBAAAm+D,GACE,MAAM,MACJ36M,GACE/0N,KACJ,IAAK+0N,EACH,OAEF,MAAM+xI,EAAa3B,GAAqBpwI,EAAM+xI,YACxConE,EAAelua,KAAKkua,aAC1B,IAAIqC,EAYJ,GAXIrC,IACFqC,EAAYzpE,EAAW9iW,QAAO+iW,GAAa0sC,GAA8By6B,EAAcnnE,KAAY,GAC9FwpE,GACHvwa,KAAK0N,KAAK,gDAAgDwga,EAAatpb,uBAAuBspb,EAAax5M,UAG/G,GAAGnxO,MAAMpJ,KAAK2sX,GAAYlkX,SAAQyuI,IACb,aAAfA,EAAMlkI,MAAuBkkI,IAAUk/S,IACzCl/S,EAAMlkI,KAAO,WACf,IAEEojb,EAAW,CACb,MAAMpjb,EAAO6S,KAAKyva,gBAAkB,UAAY,SAC5Cc,EAAUpjb,OAASA,IACrBojb,EAAUpjb,KAAOA,EAErB,CACF,CAMA,gBAAAqib,CAAiBY,GACf,MAAMp6P,EAASh2K,KAAK8ua,cAMpB,IAAK9ua,KAAK+0N,MAER,YADA/0N,KAAKgva,mBAAqBoB,GAK5B,GAAIA,GAAS,GAAKA,GAASp6P,EAAOx8L,SAAW0gW,EAAek2F,GAE1D,YADApwa,KAAK0N,KAAK,8BAA8B0ia,KAK1Cpwa,KAAKixW,aACLjxW,KAAK+ua,oBAAqB,EAC1B,MAAMyB,EAAYxwa,KAAKkua,aACjB78S,EAAQ2kD,EAAOo6P,IAAU,KAI/B,GAHApwa,KAAK4oV,QAAUwnF,EACfpwa,KAAKkua,aAAe78S,EACpBrxH,KAAK0va,oBACAr+S,EAKH,YAHArxH,KAAK++V,IAAI/zD,QAAQ51F,EAAOs4N,sBAAuB,CAC7C7hb,GAAIukb,IAIR,MAAMK,IAAgBp/S,EAAMyvO,UAAYzvO,EAAMyvO,QAAQ1gB,KACtD,GAAIgwF,IAAUpwa,KAAK4oV,SAAWv3N,IAAUm/S,GAAaC,EACnD,OAEFzwa,KAAKQ,IAAI,+BAA+B4va,KAAW/+S,EAAQ,KAAKA,EAAMzsI,cAAcysI,EAAMqjG,cAAcrjG,EAAMz/C,UAAY,KAC1H,MAAM,GACJ/lF,EAAE,QACF+lF,EAAU,GAAE,KACZhtF,EAAI,KACJ5G,EAAI,IACJ+2B,GACEs8G,EACJrxH,KAAK++V,IAAI/zD,QAAQ51F,EAAOs4N,sBAAuB,CAC7C7hb,KACA+lF,UACAhtF,OACA5G,OACA+2B,QAEF,MAAMw8V,EAAmBvxW,KAAKmxW,aAAa9/O,EAAMt8G,IAAkB,MAAby7Z,OAAoB,EAASA,EAAU1vE,QAASzvO,EAAMyvO,SAC5G9gW,KAAKkxW,aAAaK,EACpB,GA6hPAorC,mBAzwIF,MACE,WAAA96X,CAAYk9U,GACV/+V,KAAK++V,SAAM,EACX/+V,KAAK+0N,MAAQ,KACb/0N,KAAK4S,YAAS,EACd5S,KAAK0vV,SAAU,EACf1vV,KAAK23Z,UAAO,EACZ33Z,KAAK8mW,WAAa,GAClB9mW,KAAKg2K,OAAS,GACdh2K,KAAKsnX,QAAU,GACftnX,KAAK0wa,iBAAmB,GACxB1wa,KAAK2wa,eAAiB,CAAC,EACvB3wa,KAAK4wa,wBAA0B,CAAC,EAChC5wa,KAAK6wa,mBAAgB,EACrB7wa,KAAK8wa,mBAAgB,EACrB9wa,KAAK+wa,QAAU,EAEf/wa,KAAKi9V,QAAU,EAEfj9V,KAAKwiV,eAAiB,EAEtBxiV,KAAK4hZ,QAAU,EAEf5hZ,KAAK6gZ,OAwmBA,CACL9zC,SAAU,EACV80C,mBAAoB,EACpB,EAAG,CACD3mY,MAAO,EACP0mY,QAAS,EACTD,KAAK,IA7mBP3hZ,KAAKgxa,wBAAqB,EAC1Bhxa,KAAK++V,IAAMA,EACX/+V,KAAK4S,OAASmsV,EAAInsV,OAClB5S,KAAK23Z,KAAO54D,EAAInsV,OAAO25Z,WACvBvsa,KAAKgxa,mBAAqB,CACxBC,WAAY,CACVlvb,MAAOie,KAAK4S,OAAO+5Z,wBACnB3gK,aAAchsQ,KAAK4S,OAAOg6Z,gCAE5BsE,WAAY,CACVnvb,MAAOie,KAAK4S,OAAOi6Z,wBACnB7gK,aAAchsQ,KAAK4S,OAAOk6Z,gCAE5BqE,WAAY,CACVpvb,MAAOie,KAAK4S,OAAOm6Z,wBACnB/gK,aAAchsQ,KAAK4S,OAAOo6Z,gCAE5BoE,WAAY,CACVrvb,MAAOie,KAAK4S,OAAOq6Z,wBACnBjhK,aAAchsQ,KAAK4S,OAAOs6Z,iCAG9BnuE,EAAItsU,GAAG2iL,EAAOuwM,gBAAiB3lZ,KAAK4lZ,iBAAkB5lZ,MACtD++V,EAAItsU,GAAG2iL,EAAOgxJ,gBAAiBpmW,KAAKqmW,iBAAkBrmW,MACtD++V,EAAItsU,GAAG2iL,EAAOkqJ,iBAAkBt/V,KAAKu/V,kBAAmBv/V,MACxD++V,EAAItsU,GAAG2iL,EAAOotJ,gBAAiBxiW,KAAKynX,iBAAkBznX,MACtD++V,EAAItsU,GAAG2iL,EAAOo4N,wBAAyBxta,KAAKyta,wBAAyBzta,MACrE++V,EAAItsU,GAAG2iL,EAAOo2K,aAAcxrX,KAAKs7Z,cAAet7Z,MAChD++V,EAAItsU,GAAG2iL,EAAOykK,YAAa75W,KAAK85W,aAAc95W,MAC9C++V,EAAItsU,GAAG2iL,EAAOi8N,sBAAuBrxa,KAAKsxa,sBAAuBtxa,MACjE++V,EAAItsU,GAAG2iL,EAAO40K,eAAgBhqX,KAAKuxa,gBAAiBvxa,MACpD++V,EAAItsU,GAAG2iL,EAAOo8N,eAAgBxxa,KAAKyxa,eAAgBzxa,MACnD++V,EAAItsU,GAAG2iL,EAAOs8N,wBAAyB1xa,KAAK2xa,wBAAyB3xa,MACrE++V,EAAItsU,GAAG2iL,EAAOoxJ,gBAAiBxmW,KAAKymW,iBAAkBzmW,KACxD,CACA,OAAAgrI,GACE,MAAM,IACJ+zN,GACE/+V,KACJ++V,EAAIzqN,IAAI8gE,EAAOuwM,gBAAiB3lZ,KAAK4lZ,iBAAkB5lZ,MACvD++V,EAAIzqN,IAAI8gE,EAAOgxJ,gBAAiBpmW,KAAKqmW,iBAAkBrmW,MACvD++V,EAAIzqN,IAAI8gE,EAAOkqJ,iBAAkBt/V,KAAKu/V,kBAAmBv/V,MACzD++V,EAAIzqN,IAAI8gE,EAAOotJ,gBAAiBxiW,KAAKynX,iBAAkBznX,MACvD++V,EAAIzqN,IAAI8gE,EAAOo4N,wBAAyBxta,KAAKyta,wBAAyBzta,MACtE++V,EAAIzqN,IAAI8gE,EAAOo2K,aAAcxrX,KAAKs7Z,cAAet7Z,MACjD++V,EAAIzqN,IAAI8gE,EAAOykK,YAAa75W,KAAK85W,aAAc95W,MAC/C++V,EAAIzqN,IAAI8gE,EAAOi8N,sBAAuBrxa,KAAKsxa,sBAAuBtxa,MAClE++V,EAAIzqN,IAAI8gE,EAAO40K,eAAgBhqX,KAAKuxa,gBAAiBvxa,MACrD++V,EAAIzqN,IAAI8gE,EAAOo8N,eAAgBxxa,KAAKyxa,eAAgBzxa,MACpD++V,EAAIzqN,IAAI8gE,EAAOs8N,wBAAyB1xa,KAAK2xa,wBAAyB3xa,MACtE++V,EAAIzqN,IAAI8gE,EAAOoxJ,gBAAiBxmW,KAAKymW,iBAAkBzmW,MAEvDA,KAAK++V,IAAM/+V,KAAK4S,OAAS,KACzB5S,KAAK6wa,cAAgB7wa,KAAK8wa,mBAAgBl4a,CAC5C,CACA,iBAAAg5a,GACE,GAAI5xa,KAAK4S,OAAO85Z,wBAA0B1sa,KAAK6wa,gBAAkB7wa,KAAK8wa,eAAgB,CACpF,MAAMe,EAAW,IAAIn1B,GAAa18Y,KAAM,cAClC8xa,EAAW,IAAIp1B,GAAa18Y,KAAM,cAClC+xa,EAAW,IAAIr1B,GAAa18Y,KAAM,cAClCgya,EAAW,IAAIt1B,GAAa18Y,KAAM,cACxCA,KAAK6wa,cAAgB,IAAIz1B,GAAa,EAAGy2B,EAAUC,GACnD9xa,KAAK8wa,cAAgB,IAAI11B,GAAa,EAAG22B,EAAUC,EACrD,CACF,CACA,OAAAl1B,CAAQF,EAAW3oW,EAAWJ,EAASt7B,EAAQskY,GAE7C,IAAIo1B,GAAS,EACb,IAAK,IAAI14b,EAAIsja,EAAUrja,OAAQD,KAAM,CACnC,MAAM24b,EAAWr1B,EAAUtja,GACrB44b,GA6hBU7wM,EA7hBa4wM,EAAS,GA6hBlB3wM,EA7hBsB2wM,EAAS,GA6hB3B9vM,EA7hB+BnuL,EA6hB3BouL,EA7hBsCxuL,EA8hB/DlkC,KAAKjT,IAAI6kO,EAAIc,GAAM1yN,KAAKhT,IAAI2kO,EAAIc,IA7hBnC,GAAI+vM,GAAW,IACbD,EAAS,GAAKvia,KAAKjT,IAAIw1a,EAAS,GAAIj+X,GACpCi+X,EAAS,GAAKvia,KAAKhT,IAAIu1a,EAAS,GAAIr+X,GACpCo+X,GAAS,EACLE,GAAWt+X,EAAUI,GAAa,IACpC,MAGN,CAohBJ,IAAsBqtL,EAAIC,EAAIa,EAAIC,EAhhB9B,GAHK4vM,GACHp1B,EAAUxha,KAAK,CAAC44D,EAAWJ,IAEzB7zC,KAAK4S,OAAOu6Z,yBAA0B,CACxC,MAAM97S,EAAQrxH,KAAK2wa,eAAe/zB,GAClC58Y,KAAK23Z,KAAK1c,OAAO5pR,EAAOp9E,EAAWJ,EAASt7B,EAC9C,KAAO,CACL,MAAM8rV,EAAOrkW,KAAK23Z,KAAK1c,OAAO,KAAMhnW,EAAWJ,EAASt7B,GACxDvY,KAAK++V,IAAI/zD,QAAQ51F,EAAOg9N,YAAa,CACnCp0b,KAAM,WACNqmX,OACAhzO,MAAOurR,GAEX,CACF,CAGA,cAAA60B,CAAejtb,GAAO,KACpB66V,EAAI,GACJxzV,EAAE,QACFy7X,EAAO,UACPv/B,IAEA,MAAM,iBACJ2oF,GACE1wa,KACO,SAAPnU,IACFmU,KAAKsnX,QAAQjoC,EAAKz8O,IAAM,CACtBoqP,SAAUs6B,EACVv/B,cAMA2oF,EAAiBl3b,SACnBwmB,KAAK0wa,iBAAmB,GACxBA,EAAiB9tb,SAAQy8V,IACvBr/U,KAAK85W,aAAa1kK,EAAOykK,YAAax6B,EAAK,IAGjD,CACA,gBAAAgzF,CAAiBtwb,EAAOu2B,GACtB,MAAM,MACJy8M,GACE/0N,KACJ,GAAI+0N,EACF,IAAK,IAAIx7O,EAAI,EAAGA,EAAIw7O,EAAM+xI,WAAWttX,OAAQD,IAAK,CAChD,MAAMwtX,EAAYhyI,EAAM+xI,WAAWvtX,GACnC,GAAIsra,GAAqB99C,EAAW,CAClCniX,KAAM7C,EACN2yO,KAAMp8M,EACNguH,MAAO,CAAC,IAER,OAAOygO,CAEX,CAEF,OAAO,IACT,CACA,mBAAAg2C,CAAoBH,GACd58Y,KAAK4S,OAAOu6Z,yBACdnta,KAAKsya,kBAAkB11B,GAEvB58Y,KAAKuya,qBAAqB31B,EAE9B,CACA,iBAAA01B,CAAkB11B,GAChB,GAAI58Y,KAAK2wa,eAAe/zB,GACtB,OAEF,MAAM,mBACJo0B,EAAkB,eAClBL,EAAc,MACd57M,GACE/0N,MACE,MACJje,EAAK,aACLiqR,GACEglK,EAAmBp0B,GAEjB41B,EAAgBxya,KAAKqya,iBAAiBtwb,EAAOiqR,GACnD,GAAKwmK,EAQH7B,EAAe/zB,GAAa41B,EAC5B7tE,GAAiBgsE,EAAe/zB,IAChC54C,GAAkB2sE,EAAe/zB,GAAY7nL,OAV3B,CAClB,MAAMgyI,EAAY/mW,KAAKyya,gBAAgB,WAAY1wb,EAAOiqR,GACtD+6F,IAEFA,EAAU61C,IAAa,EACvB+zB,EAAe/zB,GAAa71C,EAEhC,CAKF,CACA,oBAAAwrE,CAAqB31B,GACnB,GAAI58Y,KAAK4wa,wBAAwBh0B,GAC/B,OAGF,MAAMvjR,EAAkBr5H,KAAKgxa,mBAAmBp0B,GAChD,IAAKvjR,EACH,OAEF,MACMhI,EAAQ,CACZmsR,IAAKZ,EACL76Z,MAHYs3I,EAAgBt3I,MAI5BoO,KAAM,WACNo1C,UAAS8zF,EAAgB07F,SAAU17F,EAAgB07F,MAAMxvL,QACzDmtY,eAAgBr5S,EAAgB07F,OAElC/0N,KAAK4wa,wBAAwBh0B,GAAavrR,EAC1CrxH,KAAK++V,IAAI/zD,QAAQ51F,EAAOu9N,6BAA8B,CACpD38P,OAAQ,CAAC3kD,IAEb,CACA,eAAAohT,CAAgBtib,EAAMpO,EAAO2yO,GAC3B,MAAMK,EAAQ/0N,KAAK+0N,MACnB,GAAKA,EAGL,OAAOA,EAAMiyI,aAAa72W,EAAMpO,EAAO2yO,EACzC,CACA,gBAAAkxL,CAAiBpha,EAAOoF,GACtBoW,KAAK+0N,MAAQnrO,EAAKmrO,MAClB/0N,KAAK4ya,cACP,CACA,gBAAAvsE,GACE,MAAM,eACJsqE,GACE3wa,KACJjmB,OAAOiC,KAAK20b,GAAgB/tb,SAAQg6Z,IAClCj4C,GAAiBgsE,EAAe/zB,WACzB+zB,EAAe/zB,EAAU,IAElC58Y,KAAK4wa,wBAA0B,CAAC,CAClC,CACA,iBAAArxE,GAEEv/V,KAAK+wa,QAAU,EACf/wa,KAAKi9V,QAAU,EACfj9V,KAAKwiV,eAAiB,EAEtBxiV,KAAK4hZ,QAAU,EACf5hZ,KAAK6gZ,OAsYA,CACL9zC,SAAU,EACV80C,mBAAoB,EACpB,EAAG,CACD3mY,MAAO,EACP0mY,QAAS,EACTD,KAAK,IA1YP3hZ,KAAK4ya,eACL5ya,KAAKg2K,OAAS,GACdh2K,KAAK2wa,eAAiB,CAAC,EACvB3wa,KAAK4wa,wBAA0B,CAAC,EAChC5wa,KAAK8mW,WAAa,GAClB9mW,KAAK0wa,iBAAmB,GACxB1wa,KAAKsnX,QAAU,GACXtnX,KAAK6wa,eAAiB7wa,KAAK8wa,gBAC7B9wa,KAAK6wa,cAAct6Z,QACnBvW,KAAK8wa,cAAcv6Z,QAEvB,CACA,YAAAq8Z,GAEE,MAAM,MACJ79M,GACE/0N,KACJ,IAAK+0N,EACH,OAEF,MAAM+xI,EAAa/xI,EAAM+xI,WACzB,GAAIA,EACF,IAAK,IAAIvtX,EAAI,EAAGA,EAAIutX,EAAWttX,OAAQD,IACrCorX,GAAiBmC,EAAWvtX,GAGlC,CACA,uBAAAk0b,CAAwBjpb,EAAOoF,GAC7B,MAAMosL,EAASpsL,EAAKo3W,gBAAkB,GAChC6xE,EAAW78P,EAAOh9I,MAAKq4F,GAASA,EAAMkpO,YAAc4nD,KAC1D,GAAIniZ,KAAK4S,OAAO45Z,cAAgBqG,GAAY7ya,KAAK4S,OAAO65Z,YAAa,CAEnE,GADwBz5B,GAAyBhzY,KAAKg2K,OAAQA,GAG5D,YADAh2K,KAAKg2K,OAASA,GAKhB,GAFAh2K,KAAK8mW,WAAa,GAClB9mW,KAAKg2K,OAASA,EACVh2K,KAAK4S,OAAOu6Z,yBAA0B,CACxC,MAAMp4M,EAAQ/0N,KAAK+0N,MACb+9M,EAAc/9M,EAAQowI,GAAqBpwI,EAAM+xI,YAAc,KA+BrE,GA9BA9mW,KAAKg2K,OAAOpzL,SAAQ,CAACyuI,EAAO3vI,KAE1B,IAAIqlX,EACJ,GAAI+rE,EAAa,CACf,IAAIhuB,EAAa,KACjB,IAAK,IAAIvra,EAAI,EAAGA,EAAIu5b,EAAYt5b,OAAQD,IACtC,GAAIu5b,EAAYv5b,IAAMsra,GAAqBiuB,EAAYv5b,GAAI83I,GAAQ,CACjEyzR,EAAaguB,EAAYv5b,GACzBu5b,EAAYv5b,GAAK,KACjB,KACF,CAEEura,IACF/9C,EAAY+9C,EAEhB,CACA,GAAI/9C,EACFpC,GAAiBoC,OACZ,CACL,MAAMgsE,EAAgBnuB,GAAuCvzR,GAC7D01O,EAAY/mW,KAAKyya,gBAAgBM,EAAe1hT,EAAMzsI,KAAMysI,EAAMqjG,MAC9DqyI,IACFA,EAAU55W,KAAO,WAErB,CACI45W,GACF/mW,KAAK8mW,WAAWzrX,KAAK0rX,EACvB,IAGiB,MAAf+rE,GAAuBA,EAAYt5b,OAAQ,CAC7C,MAAMw5b,EAAmBF,EAAY9ua,QAAOzpB,GAAW,OAANA,IAAYuD,KAAIvD,GAAKA,EAAEwH,QACpEixb,EAAiBx5b,QACnBylB,EAAOyO,KAAK,kDAAkDsla,EAAiBp0a,KAAK,sFAExF,CACF,MAAO,GAAIoB,KAAKg2K,OAAOx8L,OAAQ,CAE7B,MAAMy5b,EAAajza,KAAKg2K,OAAOl4L,KAAIuzI,IAC1B,CACLtvI,MAAOsvI,EAAMzsI,KACbuL,KAAMkhI,EAAMrzI,KAAKyoB,cACjB8+B,QAAS8rF,EAAM9rF,QACfmuW,cAAeriR,MAGnBrxH,KAAK++V,IAAI/zD,QAAQ51F,EAAOu9N,6BAA8B,CACpD38P,OAAQi9P,GAEZ,CACF,CACF,CACA,gBAAAxrD,CAAiBjjY,EAAOoF,GAClBoW,KAAK4S,OAAO85Z,sBAAwB9ib,EAAK04W,UAC3C14W,EAAK04W,SAAS1/W,SAAQswb,IACpB,MAAMC,EAAkB,wBAAwBrva,KAAKova,EAAcp4E,YACnE,IAAKq4E,EACH,OAEF,MAAMv2B,EAAY,YAAYu2B,EAAgB,KACxC95S,EAAkBr5H,KAAKgxa,mBAAmBp0B,GAC3CvjR,IAGLA,EAAgBt3I,MAAQmxb,EAActub,KAClCsub,EAAcx+M,OAEhBr7F,EAAgB2yI,aAAeknK,EAAcx+M,MAE/Cr7F,EAAgB07F,MAAQm+M,EAAa,GAG3C,CACA,sBAAAE,CAAuB/zF,GACrB,MAAMn8G,EAAQljO,KAAK++V,IAAI/F,OAAO3Z,EAAKn8G,OACnC,OAAgB,MAATA,OAAgB,EAASA,EAAM58F,MAAM,kBAC9C,CACA,aAAAg1R,CAAc92a,EAAOoF,GAEnB,GAAIoW,KAAK0vV,SAAW9lW,EAAKy1V,KAAKrhW,OAAS2gX,GAAwB,CAC7D,IAAI00E,EAAkBxX,EACtB,MAAM,cACJgV,EAAa,cACbC,EAAa,OACb7zE,GACEj9V,MACE,GACJ4iG,EAAE,GACF26O,GACE3zV,EAAKy1V,KACH8uB,EAAiG,OAApFklE,EAA+C,OAA3BxX,EAAajya,EAAK+yW,WAAgB,EAASk/D,EAAWn6a,OAAiB2xb,GAAoB,EAC9HxC,GAAiBC,IACfvzF,IAAO0f,EAAS,GAAK1f,IAAO0f,GAAUkR,IAAcnuW,KAAKwiV,cAAgB,GAAK5/O,IAAO5iG,KAAK+wa,UAC5FF,EAAct6Z,QACdu6Z,EAAcv6Z,SAGlBvW,KAAK+wa,OAASnuU,EACd5iG,KAAKi9V,OAAS1f,EACdv9U,KAAKwiV,cAAgB2rB,CACvB,CACF,CACA,YAAA2L,CAAat1X,EAAOoF,GAClB,MAAM,KACJy1V,EAAI,QACJ1qU,GACE/qB,EACJ,GAAIy1V,EAAKrhW,OAAS2gX,GAEhB,GAAIhqV,EAAQ+8E,WAAY,CACtB,MAAMo4R,EAAczqC,EAAKhB,YAEnBi1F,EAAa,UAAW1pb,EAE9B,GAAmB,MAAfkgY,IAAwBA,EAAYprC,WAAa40F,EAAW,CAC9D,MAAMC,EAAqBvza,KAAKg2K,OAAOqpK,EAAKn8G,OACtC29K,EAAS7gZ,KAAK6gZ,OACfA,EAAOxhE,EAAKz8O,MACfi+S,EAAOxhE,EAAKz8O,IAAM,CAChB1nF,MAAOmkU,EAAKnkU,MACZ0mY,OAAQ5hZ,KAAK4hZ,OACbD,KAAK,GAEP3hZ,KAAK4hZ,OAASviE,EAAKz8O,IAEjB2wU,GAAsBA,EAAmBh5E,YAAc4nD,GACzDniZ,KAAKwza,YAAYn0F,EAAM1qU,GAEvB3U,KAAKyza,WAAW7pb,EAEpB,CACF,MAEEoW,KAAK++V,IAAI/zD,QAAQ51F,EAAOy4N,wBAAyB,CAC/C5e,SAAS,EACT5vE,OACA37V,MAAO,IAAIggB,MAAM,2BAIzB,CACA,WAAA8va,CAAYn0F,EAAM1qU,GAChB,MAAMoqV,EAAM/+V,KAAK++V,IACjBwjD,GAAW5tY,EAAS3U,KAAKsnX,QAAQjoC,EAAKz8O,KAAKyhQ,IACzCrkW,KAAK0za,YAAYrvE,EAAMhlB,EAAKn8G,OAC5B67H,EAAI/zD,QAAQ51F,EAAOy4N,wBAAyB,CAC1C5e,SAAS,EACT5vE,KAAMA,GACN,IACD37V,IACDub,EAAOuB,IAAI,0BAA0B9c,KACrCq7W,EAAI/zD,QAAQ51F,EAAOy4N,wBAAyB,CAC1C5e,SAAS,EACT5vE,KAAMA,EACN37V,SACA,GAEN,CACA,UAAA+vb,CAAW7pb,GACT,IAAI2oZ,EACJ,MAAM,KACJlzD,EAAI,QACJ1qU,GACE/qB,GAEE,QACJ09X,EAAO,iBACPopD,GACE1wa,KACE2za,EAAUrsD,EAAQ9tY,OAAS,EACjC,IAAK8tY,EAAQjoC,EAAKz8O,MAAoB,IAAb+wU,EAEvB,YADAjD,EAAiBr1b,KAAKuO,GAGxB,MAAMm1W,EAAM/+V,KAAK++V,IAGjB4hD,GADgE,OAAzCpO,EAAoBlzD,EAAKnB,cAAwBq0D,EAAkB3oZ,KAAOuiW,GAAiB9M,EAAKnB,YAAYt0V,KAAM,IAAIojG,WAAWr4E,IAAYA,EACzI3U,KAAKsnX,QAAQjoC,EAAKz8O,IAAK5iG,KAAK6gZ,OAAQxhE,EAAKz8O,GAAIy8O,EAAKnkU,OAAOmpV,IAClFrkW,KAAK0za,YAAYrvE,EAAMhlB,EAAKn8G,OAC5B67H,EAAI/zD,QAAQ51F,EAAOy4N,wBAAyB,CAC1C5e,SAAS,EACT5vE,KAAMA,GACN,IACD37V,IACD,MAAMkwb,EAAmC,mCAAlBlwb,EAAMmF,QACzB+qb,EACFlD,EAAiBr1b,KAAKuO,GAEtBoW,KAAK6za,iBAAiBx0F,EAAM1qU,GAG9B1V,EAAOuB,IAAI,4BAA4B9c,KACnCkwb,GAAkBD,EAAUt0F,EAAKz8O,IAGrCm8P,EAAI/zD,QAAQ51F,EAAOy4N,wBAAyB,CAC1C5e,SAAS,EACT5vE,KAAMA,EACN37V,SACA,GAEN,CACA,gBAAAmwb,CAAiBx0F,EAAM1qU,GAErB,MAAM4+Z,EAAqBvza,KAAKg2K,OAAOqpK,EAAKn8G,OACvCqwM,EAAmBh5E,WACtBgoD,GAAW5tY,EAAS3U,KAAKsnX,QAAQjoC,EAAKz8O,KAAK,KACzC2wU,EAAmBh5E,UAAY4nD,GAC/BniZ,KAAKwza,YAAYn0F,EAAM1qU,EAAQ,IAC9B,KACD4+Z,EAAmBh5E,UAAY,MAAM,GAG3C,CACA,WAAAm5E,CAAYrvE,EAAMyvE,GAChB,MAAM/0E,EAAM/+V,KAAK++V,IACjB,GAAI/+V,KAAK4S,OAAOu6Z,yBAA0B,CACxC,MAAMpmE,EAAY/mW,KAAK8mW,WAAWgtE,GAKlC,IAAK/sE,GAAgC,aAAnBA,EAAU55W,KAC1B,OAEFk3W,EAAKzhX,SAAQwhX,GAAOD,GAAc4C,EAAW3C,IAC/C,KAAO,CACL,MAAM8pE,EAAelua,KAAKg2K,OAAO89P,GACjC,IAAK5F,EACH,OAEF,MAAM78S,EAAQ68S,EAAa3oY,QAAU,UAAY,YAAcuuY,EAC/D/0E,EAAI/zD,QAAQ51F,EAAOg9N,YAAa,CAC9Bp0b,KAAM,YACNqmX,OACAhzO,SAEJ,CACF,CACA,eAAAkgT,CAAgB/sb,EAAOoF,GACrB,MAAM,KACJy1V,GACEz1V,EACAy1V,EAAKrhW,OAAS2gX,IAChB3+V,KAAK85W,aAAa1kK,EAAOykK,YAAajwX,EAE1C,CACA,uBAAA+nb,GACE3xa,KAAKg2K,OAAS,GACdh2K,KAAK2wa,eAAiB,CAAC,CACzB,CACA,qBAAAW,CAAsB9sb,EAAOoF,GAC3BoW,KAAK4xa,oBACL,MAAM,cACJf,EAAa,cACbC,GACE9wa,KACJ,IAAKA,KAAK0vV,UAAYmhF,IAAkBC,EACtC,OAEF,MAAM,KACJzxF,EAAI,QACJsN,GACE/iW,EACJ,GAAIy1V,EAAKrhW,OAAS2gX,IAAgE,SAAtC3+V,KAAKoza,uBAAuB/zF,GAKxE,IAAK,IAAI9lW,EAAI,EAAGA,EAAIozW,EAAQnzW,OAAQD,IAAK,CACvC,MAAMw6b,EAAUpnF,EAAQpzW,GAAGksC,MAC3B,GAAIsuZ,EAAS,CACX,MAAMC,EAAUh0a,KAAKi0a,kBAAkBF,GACvClD,EAAclmQ,QAAQgiL,EAAQpzW,GAAGy1W,IAAKglF,EAAQ,IAC9ClD,EAAcnmQ,QAAQgiL,EAAQpzW,GAAGy1W,IAAKglF,EAAQ,GAChD,CACF,CACF,CACA,gBAAAvtE,CAAiBjiX,GAAO,YACtBw6O,EAAW,UACXqoI,EAAS,mBACT2mE,EAAkB,KAClBhwb,IAEA,MAAM,MACJ+2O,GACE/0N,KACJ,GAAK+0N,KAASA,EAAMjkJ,YAAcu2R,GAAlC,CAKA,IAAKrpX,GAAiB,UAATA,EAAkB,CAC7B,MAAM,eACJ2yb,GACE3wa,KACJjmB,OAAOiC,KAAK20b,GAAgB/tb,SAAQg6Z,GAAa/3C,GAAkB8rE,EAAe/zB,GAAY59K,EAAaqoI,IAC7G,CACA,GAAIrnW,KAAK4S,OAAOu6Z,0BAEM,IAAhBnuM,QAA4CpmO,IAAvBo1a,EAAkC,CACzD,MAAM,WACJlnE,GACE9mW,KACJjmB,OAAOiC,KAAK8qX,GAAYlkX,SAAQg6Z,GAAa/3C,GAAkBiC,EAAW81C,GAAY59K,EAAagvM,IACrG,CAhBF,CAkBF,CACA,iBAAAiG,CAAkBrkF,GAChB,MAAMskF,EAAgB,CAAC,GAAI,IACrB9/a,EAAuB,GAAfw7V,EAAU,GACxB,IAAIphR,EAAW,EACf,IAAK,IAAI7rE,EAAI,EAAGA,EAAIvO,EAAOuO,IAAK,CAC9B,MAAMwxa,EAAUvkF,EAAUphR,KACpB4lW,EAAU,IAAOxkF,EAAUphR,KAC3B6lW,EAAU,IAAOzkF,EAAUphR,KACjC,GAAgB,IAAZ4lW,GAA6B,IAAZC,EACnB,SAGF,GADqC,KAApB,EAAOF,GACX,CACX,MAAMG,EAAS,EAAOH,EAClB,IAA4BG,GAAU,IAA4BA,IAEpEJ,EAAcI,GAAQj5b,KAAK+4b,GAC3BF,EAAcI,GAAQj5b,KAAKg5b,GAE/B,CACF,CACA,OAAOH,CACT,GA4pHAK,sBAz7SF,cAAoC9tD,GAClC,WAAA5kW,CAAYk9U,EAAK2nB,EAAiBjpC,GAChCr3T,MAAM24U,EAAK2nB,EAAiBjpC,EAAW,4BAA6BkhB,IACpE3+V,KAAKw0a,YAAc,KACnBx0a,KAAKy0a,cAAgB,EACrBz0a,KAAK00a,gBAAkB,EACvB10a,KAAK20a,cAAgB,KACrB30a,KAAK40a,eAAiB,KACtB50a,KAAK4oV,SAAW,EAChB5oV,KAAK60a,YAAc,KACnB70a,KAAKuta,YAAc,KACnBvta,KAAK80a,UAAW,EAChB90a,KAAK+0a,eAAgB,EACrB/0a,KAAKg1a,sBAAwB,KAC7Bh1a,KAAKgmW,oBACP,CACA,mBAAA0S,GACE14W,KAAKimW,uBACL7/U,MAAMsyV,sBACN14W,KAAKuta,YAAc,KACnBvta,KAAK20a,cAAgB,KACrB30a,KAAK40a,eAAiB,IACxB,CACA,kBAAA5uE,GACE,MAAM,IACJjH,GACE/+V,KACJ++V,EAAItsU,GAAG2iL,EAAO8wJ,eAAgBlmW,KAAKmmW,gBAAiBnmW,MACpD++V,EAAItsU,GAAG2iL,EAAOgxJ,gBAAiBpmW,KAAKqmW,iBAAkBrmW,MACtD++V,EAAItsU,GAAG2iL,EAAOkqJ,iBAAkBt/V,KAAKu/V,kBAAmBv/V,MACxD++V,EAAItsU,GAAG2iL,EAAOyuJ,aAAc7jW,KAAKy7Z,cAAez7Z,MAChD++V,EAAItsU,GAAG2iL,EAAO6/N,qBAAsBj1a,KAAKk1a,qBAAsBl1a,MAC/D++V,EAAItsU,GAAG2iL,EAAO+/N,sBAAuBn1a,KAAKo1a,sBAAuBp1a,MACjE++V,EAAItsU,GAAG2iL,EAAO0uJ,mBAAoB9jW,KAAKq1a,mBAAoBr1a,MAC3D++V,EAAItsU,GAAG2iL,EAAO5yI,MAAOxiE,KAAK/B,QAAS+B,MACnC++V,EAAItsU,GAAG2iL,EAAOktN,aAActia,KAAKuia,cAAevia,MAChD++V,EAAItsU,GAAG2iL,EAAOmxN,eAAgBvma,KAAKs1a,gBAAiBt1a,MACpD++V,EAAItsU,GAAG2iL,EAAOoxJ,gBAAiBxmW,KAAKymW,iBAAkBzmW,MACtD++V,EAAItsU,GAAG2iL,EAAO6vN,eAAgBjla,KAAKu1a,gBAAiBv1a,MACpD++V,EAAItsU,GAAG2iL,EAAOo8N,eAAgBxxa,KAAKyxa,eAAgBzxa,MACnD++V,EAAItsU,GAAG2iL,EAAOukK,cAAe35W,KAAK45W,eAAgB55W,KACpD,CACA,oBAAAimW,GACE,MAAM,IACJlH,GACE/+V,KACJ++V,EAAIzqN,IAAI8gE,EAAO8wJ,eAAgBlmW,KAAKmmW,gBAAiBnmW,MACrD++V,EAAIzqN,IAAI8gE,EAAOgxJ,gBAAiBpmW,KAAKqmW,iBAAkBrmW,MACvD++V,EAAIzqN,IAAI8gE,EAAOkqJ,iBAAkBt/V,KAAKu/V,kBAAmBv/V,MACzD++V,EAAIzqN,IAAI8gE,EAAOyuJ,aAAc7jW,KAAKy7Z,cAAez7Z,MACjD++V,EAAIzqN,IAAI8gE,EAAO6/N,qBAAsBj1a,KAAKk1a,qBAAsBl1a,MAChE++V,EAAIzqN,IAAI8gE,EAAO+/N,sBAAuBn1a,KAAKo1a,sBAAuBp1a,MAClE++V,EAAIzqN,IAAI8gE,EAAO0uJ,mBAAoB9jW,KAAKq1a,mBAAoBr1a,MAC5D++V,EAAIzqN,IAAI8gE,EAAO5yI,MAAOxiE,KAAK/B,QAAS+B,MACpC++V,EAAIzqN,IAAI8gE,EAAOktN,aAActia,KAAKuia,cAAevia,MACjD++V,EAAIzqN,IAAI8gE,EAAOmxN,eAAgBvma,KAAKs1a,gBAAiBt1a,MACrD++V,EAAIzqN,IAAI8gE,EAAOoxJ,gBAAiBxmW,KAAKymW,iBAAkBzmW,MACvD++V,EAAIzqN,IAAI8gE,EAAO6vN,eAAgBjla,KAAKu1a,gBAAiBv1a,MACrD++V,EAAIzqN,IAAI8gE,EAAOo8N,eAAgBxxa,KAAKyxa,eAAgBzxa,MACpD++V,EAAIzqN,IAAI8gE,EAAOukK,cAAe35W,KAAK45W,eAAgB55W,KACrD,CAGA,cAAAyxa,CAAejtb,GAAO,KACpB66V,EAAI,GACJxzV,EAAE,QACFy7X,EAAO,UACPv/B,IAIA,GAAW,SAAPl8V,EAAe,CACjB,MAAM+2G,EAAKy8O,EAAKz8O,GAChB5iG,KAAKsnX,QAAQjoC,EAAKz8O,IAAM,CACtBoqP,SAAUs6B,EACVv/B,aAEF/nV,KAAKQ,IAAI,mBAAmBoiG,sBAAuB0kR,KACnDtnX,KAAKy0a,aAAe7xU,EAEhB5iG,KAAKsI,QAAUk+W,IACjBxmX,KAAKy4W,MAET,CACF,CACA,SAAAvZ,CAAUC,GACR,IAAKn/V,KAAKg5V,OAGR,OAFAh5V,KAAKm/V,cAAgBA,OACrBn/V,KAAKsI,MAAQk+W,IAGf,MAAMM,EAAkB9mX,KAAK8mX,gBAC7B9mX,KAAKo/V,WACLp/V,KAAKirI,YA/Fe,KAgGhB67O,EAAkB,IAAwB,IAAnB3nB,GACzBn/V,KAAKQ,IAAI,gDAAgDsmX,EAAgBzxW,QAAQ,MACjF8pV,EAAgB2nB,EAChB9mX,KAAKsI,MAAQk+W,KAEbxmX,KAAKgnX,gBAAiB,EACtBhnX,KAAKsI,MAAQk+W,IAEfxmX,KAAK+mX,iBAAmB/mX,KAAKm/V,cAAgBn/V,KAAK8mX,gBAAkB3nB,EACpEn/V,KAAKy4W,MACP,CACA,MAAAO,GACE,OAAQh5W,KAAKsI,OACX,KAAKk+W,GACHxmX,KAAKw1a,aACL,MACF,KAAKhvD,GACH,CACE,IAAIivD,EACJ,MAAM,OACJz8E,EAAM,QACNpQ,GACE5oV,KACE8gW,EAAoB,MAAV9H,GAAiE,OAAtCy8E,EAAkBz8E,EAAOpQ,SAAnC,EAAgE6sF,EAAgB30E,QACjH,GAAIA,EAAS,CACX,GAAI9gW,KAAK0vX,iBAAiB5uB,GACxB,MAEF9gW,KAAKsI,MAAQk+W,EACf,CACA,KACF,CACF,KAAKA,GACH,CACE,IAAIygD,EACJ,MAAMh+a,EAAM8hI,YAAY9hI,MAClBg+X,EAAYjnX,KAAKinX,UAEvB,IAAKA,GAAah+X,GAAOg+X,GAA2C,OAA7BggD,EAAcjna,KAAK+0N,QAAkBkyM,EAAYyO,QAAS,CAC/F,MAAM,OACJ18E,EAAM,QACNpQ,GACE5oV,KACJA,KAAKQ,IAAI,gDACTR,KAAKiwX,yBAAmC,MAAVj3B,OAAiB,EAASA,EAAOpQ,KAAa,MAC5E5oV,KAAKsI,MAAQk+W,EACf,CACA,KACF,CACF,KAAKA,GACH,CAEE,MAAMquD,EAAc70a,KAAK60a,YACzB,GAAIA,EAAa,CACf,MAAM,KACJx1F,EAAI,KACJsd,EAAI,MACJvqP,EAAK,SACLljF,GACE2lZ,EACJ,QAA8Bj8a,IAA1BoH,KAAKsnX,QAAQjoC,EAAKz8O,IAAmB,CACvC5iG,KAAK60a,YAAc,KACnB70a,KAAK00a,gBAAkB,EACvB10a,KAAKsI,MAAQk+W,GACb,MACM58X,EAAO,CACXy1V,OACAsd,OACAhoV,QAJcy9F,EAAMnnB,QAKpB62Q,eAAgB,MAElB9hW,KAAKgpX,4BAA4Bp/X,GAC7BslC,GACF9I,MAAM6iW,4BAA4Br/X,EAEtC,MAAO,GAAIoW,KAAKy0a,eAAiBz0a,KAAK00a,eAEpC10a,KAAKQ,IAAI,wBAAwB6+U,EAAKz8O,wCAAwC5iG,KAAKy0a,gBACnFz0a,KAAK21a,2BACA,CAEL,MAAMjwZ,EAAM1lB,KAAKitX,kBACX9a,EAAawK,GAAaxK,WAAWnyW,KAAK6mX,YAAanhW,EAAK1lB,KAAK4S,OAAO01W,eAC5CnY,GAA4BgC,EAAWh3V,IAAKnb,KAAK4S,OAAOm9V,uBAAwB1wB,GAClF,IAC9Br/U,KAAKQ,IAAI,wBAAwB6+U,EAAKz8O,SAASy8O,EAAKnkU,+CAA+Ci3V,EAAWh3V,iBAC9Gnb,KAAK21a,uBAET,CACF,MACE31a,KAAKsI,MAAQk+W,EAEjB,EAEJxmX,KAAK0nX,WACP,CACA,oBAAAiuD,GACE,MAAMd,EAAc70a,KAAK60a,YACrBA,IACF70a,KAAK0mX,gBAAgB/L,eAAek6D,EAAYx1F,MAChDr/U,KAAK60a,YAAc,KACnB70a,KAAK00a,gBAAkB,EACvB10a,KAAKsI,MAAQk+W,GAEjB,CACA,iBAAA+B,GACEvoX,KAAK21a,uBACLvvZ,MAAMmiW,mBACR,CACA,SAAAb,GACE,MAAM,MACJ3yJ,GACE/0N,KACW,MAAT+0N,GAAiBA,EAAM7+M,aAI7BlW,KAAK8mX,gBAAkB/xJ,EAAMjkJ,YAC/B,CACA,UAAA0kW,GACE,MAAM,IACJz2E,EAAG,OACH/F,EAAM,MACNjkI,EAAK,QACL6zH,GACE5oV,KACE4S,EAASmsV,EAAInsV,OAQnB,IAAK5S,KAAKu8U,YAAcxnH,IAAU/0N,KAAKonX,qBAAuBx0W,EAAOgmZ,oBAAkC,MAAV5/D,IAAkBA,EAAOpQ,GACpH,OAEF,MAAM43E,EAAYxnE,EAAOpQ,GACnB2lF,EAAe/N,EAAU1/D,QAC/B,IAAKytE,GAAgBA,EAAanuF,MAAQpgV,KAAKmnX,kBAAoBq5C,GAAaxga,KAAK0vX,iBAAiB6+C,GAEpG,YADAvua,KAAKsI,MAAQk+W,IAGf,MAAMwG,EAAahtX,KAAK6mX,YAAc7mX,KAAK6mX,YAAc7mX,KAAK+0N,MAC1D/0N,KAAK+0a,eAAiB/nD,IACxBhtX,KAAK+0a,eAAgB,EACrB/0a,KAAKqwX,mBAAmBrD,EAAYxwC,EAA6BmiB,KAEnE,MAAMwT,EAAanyW,KAAKqpX,iBAAiB2D,EAAYruB,IACrD,GAAmB,OAAfwT,EACF,OAEF,MAAM,cACJwiE,EAAa,eACbC,GACE50a,KACJ,IAAK40a,GAAkB50a,KAAK8nX,aAAa3V,EAAYo8D,GAKnD,OAJAxvE,EAAI/zD,QAAQ51F,EAAOqtN,WAAY,CAC7Bzkb,KAAM,eAERgiB,KAAKsI,MAAQk+W,IAGf,MAAM8nD,EAAiBtua,KAAKqpX,iBAAiBrpX,KAAKw0a,YAAcx0a,KAAKw0a,YAAcx0a,KAAK+0N,MAAO4pI,IACzF2e,EAAYnL,EAAWt2W,IACvByxX,EAAYttX,KAAKotX,mBAAqC,MAAlBkhD,OAAyB,EAASA,EAAezya,KACrFmkV,EAAYuuF,EAAavuF,UACzB9kU,EAAQ8kU,EAAU,GAAG9kU,MAC3B,IAAI0tW,EAAmB5oX,KAAK80a,SAAW90a,KAAKitX,kBAAoB9a,EAAWh3V,IAC3E,GAAIy5Z,GAAkB7/M,EAAO,CAC3B,MAAMrvM,EAAM1lB,KAAKitX,kBAEb0nD,IAAkBxhC,GAAyByhC,EAAetuS,MAAOquS,EAAcruS,SACjFsiP,EAAmBljW,GAGjB6oZ,EAAa5uF,UAAYj6T,EAAMxK,IAE7Bi3V,EAAWh3V,IAAMD,GAASi3V,EAAW8K,aACvCj9W,KAAKQ,IAAI,yEACTu0N,EAAMjkJ,YAAc51D,EAAQ,IAGlC,CAGA,GAAIoiW,GAAagQ,IAAcsnD,GAAkBhsD,EAAmB5oC,EAAUA,EAAUxmW,OAAS,GAAG0hC,MAClG,OAEF,IAAImkU,EAAOr/U,KAAK4tX,gBAAgBhF,EAAkB2lD,GAC9CqH,GAAQ,EAMZ,GAJIv2F,GAAQr/U,KAAKkuX,cAAc7uC,EAAMupC,KACnCgtD,IAAUv2F,EAAKv1N,IACfu1N,EAAOr/U,KAAKouX,2BAA2B/uC,EAAMkvF,EAAcp8D,EAAYxT,GAAwB2uB,KAE5FjuC,EAEH,YADAr/U,KAAK+0a,eAAgB,GAKvB,MAAMc,EAAoBvH,GAAkBjvF,EAAKnkU,MAAQozZ,EAAenzZ,IAAMozZ,EAAa1tF,eAC3F,GAAIg1F,IAEgB,MAAlBvH,IAA0BA,EAAezya,MAAQs2W,EAAWt2W,IAAK,CAEjE,MAAMi6a,EAAW91a,KAAK+5W,gBAAgB16B,EAAKnkU,MAAOyjV,IAClD,GAAiB,OAAbm3E,EACF,OAIF,GADAF,IAAUA,IAAUE,EAAShsT,OAAS+rT,GAA4C,IAAvBvH,EAAezya,KACtEg6a,IAAsBD,GAASA,GAASzjE,EAAW8K,WAAa9K,EAAW8K,UAAY64D,EAAS36Z,IAClG,MAEJ,CACAnb,KAAK2oX,aAAatpC,EAAMmhF,EAAW53C,EACrC,CACA,kBAAAwE,CAAmBshD,GACjB,MAAMC,EAAkBvoZ,MAAMgnW,qBAC9B,OAAKshD,EAGE/+Z,KAAKjT,IAAIiT,KAAKhT,IAAIgya,EAAiBD,GAAmB1ua,KAAK4S,OAAO46W,oBAFhEmhD,CAGX,CACA,gBAAAtoE,GACErmW,KAAKw0a,YAAc,KACnBx0a,KAAK+0a,cAAgB/0a,KAAK80a,UAAW,EACrC1uZ,MAAMigV,kBACR,CACA,oBAAA6uE,CAAqB1wb,GAAO,YAC1Bu8W,IAGA/gW,KAAK2nX,kBACL3nX,KAAKg5V,OAAS+H,EAAYjjX,KAAImwb,GAAiB,IAAI3jE,GAAM2jE,IAC3D,CACA,qBAAAmH,CAAsB5wb,EAAOoF,GAE3B,MAAMm5a,IAAan5a,EAAKmrB,IACxB/U,KAAK4oV,QAAUh/V,EAAKiC,GACpB,MAAM,YACJ86X,GACE3mX,KACA2mX,IACFA,EAAY7nC,gBACZ9+U,KAAKywX,sBAAsB9J,EAAYzrW,QAEzClb,KAAKuoX,oBAEAw6C,EAIH/ia,KAAKirI,YA/Va,KA4VlBjrI,KAAK2nX,kBAOHo7C,GACF/ia,KAAK40a,eAAiBhrb,EAEtBoW,KAAKsI,MAAQk+W,GACbxmX,KAAK+1a,mBAAmBnsb,KAExBoW,KAAK40a,eAAiB,KACtB50a,KAAK20a,cAAgB/qb,EACrBoW,KAAKsI,MAAQk+W,IAEfxmX,KAAKy4W,MACP,CACA,iBAAAlZ,GACEv/V,KAAK0mX,gBAAgBpK,qBACrBt8W,KAAKm/V,cAAgBn/V,KAAK8mX,gBAAkB,EAC5C9mX,KAAK+0a,cAAgB/0a,KAAK80a,UAAW,EACrC90a,KAAKg5V,OAASh5V,KAAKuta,YAAcvta,KAAK60a,YAAc70a,KAAK20a,cAAgB30a,KAAKg1a,sBAAwBh1a,KAAK40a,eAAiB,KAC5H50a,KAAKonX,oBAAqB,EAC1BpnX,KAAK4oV,QAAU5oV,KAAKy0a,aAAez0a,KAAK00a,gBAAkB,CAC5D,CACA,aAAAjZ,CAAcj3a,EAAOoF,GACnBoW,KAAKuta,YAAc3jb,EAAKk3W,QACW,OAA/B9gW,KAAKg1a,wBACPh1a,KAAK++V,IAAI/zD,QAAQ51F,EAAO0uJ,mBAAoB9jW,KAAKg1a,uBACjDh1a,KAAKg1a,sBAAwB,KAEjC,CACA,kBAAAK,CAAmB7wb,EAAOoF,GACxB,IAAIwkb,EACJ,GAAwB,MAApBpua,KAAKuta,YAEP,YADAvta,KAAKg1a,sBAAwBprb,GAG/B,MAAM,OACJovW,GACEh5V,MAEF8gW,QAAS6L,EACT9gX,GAAI+8V,GACFh/V,EACJ,IAAKovW,EAEH,YADAh5V,KAAK0N,KAAK,+CAA+Ck7U,KAG3D5oV,KAAKQ,IAAI,eAAeooV,aAAmB+jB,EAAWhsB,WAAWgsB,EAAW5sB,SAAS4sB,EAAWrqB,WAAa,SAASqqB,EAAWrqB,cAAcqqB,EAAWnqB,iBAAmB,eAAemqB,EAAW7rB,iBACvM,MAAMzvN,EAAQ2nO,EAAOpQ,GACrB,IAAIm1B,EAAU,EACd,GAAIpR,EAAWvsB,MAA4C,OAAnCguF,EAAiB/8S,EAAMyvO,UAAoBstE,EAAehuF,KAAM,CACtFpgV,KAAK0pX,gBAAgB/c,GACrB,MAAM4gE,EAAcvta,KAAKuta,YACzB,GAAI5gE,EAAWhrB,oBAAsB4rF,EACnC,OAQA,IAAIvlD,EANN,IAAK32P,EAAMyvO,SAAW6L,EAAWlqB,oBAAsB8qF,EAAY9qF,mBAGjEo8B,GAAwBlS,EAAY4gE,GACpCxvD,EAAUpR,EAAW3sB,UAAU,GAAG9kU,WAGlC6iW,EAAU/9W,KAAKqvX,eAAe1iB,EAAYt7O,EAAMyvO,QAA2D,OAAjDknB,EAAwBhoX,KAAKmnX,sBAA2B,EAASa,EAAsBlnB,QAErJ,CACAzvO,EAAMyvO,QAAU6L,EAChB3sW,KAAKmnX,gBAAkB91P,EAGlBrxH,KAAKonX,qBAAuBpnX,KAAKuta,aAAgB5gE,EAAWvsB,MAC/DpgV,KAAK2vX,iBAAiB3vX,KAAKuta,aAAe5gE,EAAYoR,GAGpD/9W,KAAKsI,QAAUk+W,IAAwBxmX,KAAK0vX,iBAAiB/iB,KAC/D3sW,KAAKsI,MAAQk+W,IAIfxmX,KAAKy4W,MACP,CACA,2BAAAuQ,CAA4Bp/X,GAC1B,IAAI2oZ,EACJ,MAAM,KACJlzD,EAAI,KACJsd,EAAI,QACJhoV,GACE/qB,GACE,OACJgpB,EAAM,QACNg2U,EAAO,OACPoQ,GACEh5V,KACJ,IAAKg5V,EAEH,YADAh5V,KAAK0N,KAAK,yEAAyE2xU,EAAK9B,eAAe8B,EAAKn8G,8BAG9G,MAAM7xG,EAAQ2nO,EAAOpQ,GACrB,IAAKv3N,EAEH,YADArxH,KAAK0N,KAAK,sDAGZ,MAAMozV,EAAUzvO,EAAMyvO,QACtB,IAAKA,EAGH,OAFA9gW,KAAK0N,KAAK,gEACV1N,KAAKywX,sBAAsBpxC,EAAKnkU,OAGlC,MAAMm/U,EAAaznV,EAAOslZ,mBAAqB7mS,EAAMgpO,YAAc,YACnE,IAAIusB,EAAa5mX,KAAK4mX,WACjBA,IACHA,EAAa5mX,KAAK4mX,WAAa,IAAIwqB,GAAoBpxY,KAAK++V,IAAKJ,GAAyB3+V,KAAKg2a,wBAAwBt1a,KAAKV,MAAOA,KAAKosX,uBAAuB1rX,KAAKV,QAKtK,MAAMsnX,EAAUtnX,KAAKsnX,QAAQjoC,EAAKz8O,IAC5BksS,EAA4D,OAAzCyD,EAAoBlzD,EAAKnB,kBAAuB,EAASq0D,EAAkB3oZ,KACpG,QAAgBgP,IAAZ0uX,EAAuB,CAGzB,MAAMke,GAAqB,EACrBr3B,EAAYxR,EAAOA,EAAKj7W,OAAS,EACjCs9H,GAAyB,IAAfmvP,EACV2c,EAAY,IAAItN,GAAcn+B,EAAKn8G,MAAOm8G,EAAK9B,GAAI8B,EAAKz0C,MAAMwxC,WAAYznU,EAAQ+8E,WAAYy8Q,EAAWnvP,GAC/G4nQ,EAAWvrY,KAAKs5B,EAASm6X,EAAiBz0C,EAAY,GAAIhb,EAAMsd,EAAMmE,EAAQhgB,cAAe0kD,EAAoB1a,EAAWxD,EAC9H,KAAO,CACLtnX,KAAKQ,IAAI,4BAA4B6+U,EAAKz8O,wDAAwDy8O,EAAK9B,UAAUujB,EAAQngB,YAAYmgB,EAAQ/gB,gBAAgB6I,KAC7J,MAAM,MACJx2O,GACEpyG,KAAK60a,YAAc70a,KAAK60a,aAAe,CACzCx1F,OACAsd,OACAvqP,MAAO,IAAI4+Q,GACX9hW,UAAU,GAEZkjF,EAAM/2H,KAAK,IAAI2xG,WAAWr4E,IAC1B3U,KAAK00a,eAAiB10a,KAAKy0a,aAC3Bz0a,KAAKsI,MAAQk+W,EACf,CACF,CACA,2BAAAyC,CAA4B2C,GACtB5rX,KAAK60a,YACP70a,KAAK60a,YAAY3lZ,UAAW,EAG9B9I,MAAM6iW,4BAA4B2C,EACpC,CACA,aAAA22C,GAGEvia,KAAK6mX,YAAc7mX,KAAKw0a,YAAc,KACtCx0a,KAAKgnX,gBAAiB,CACxB,CACA,eAAAsuD,CAAgB9wb,EAAOoF,GACrB,MAAM24W,EAAa34W,EAAKosL,OAAOr0G,MAC3B4gS,IACFviW,KAAK6mX,YAActkB,EAAWxwQ,QAAU,MAEtCnoG,EAAKosL,OAAO0qC,QACd1gN,KAAKw0a,YAAc5qb,EAAKosL,OAAO0qC,MAAM3uH,QAAU,KAEnD,CACA,cAAA6nR,CAAep1X,EAAOoF,GACpB,MAAM,KACJy1V,EAAI,KACJsd,GACE/yW,EACJ,GAAIy1V,EAAKrhW,OAAS2gX,GAYlB,GAAI3+V,KAAK+oX,mBAAmB1pC,GAG1Br/U,KAAK0N,KAAK,YAAY2xU,EAAK9B,KAAKof,EAAO,OAASA,EAAKj7W,MAAQ,eAAe29V,EAAKn8G,qDAAqDljO,KAAKsI,uBAAuBtI,KAAK40a,eAAiB50a,KAAK40a,eAAehwb,KAAO,eAHrN,CAMA,GAAgB,gBAAZy6V,EAAK9B,GAAsB,CAC7Bv9U,KAAK6vW,aAAexwB,EACpB,MAAMhuN,EAAQrxH,KAAK40a,eACfvjT,IACFrxH,KAAK20a,cAAgBtjT,EACrBrxH,KAAK40a,eAAiB,KACtB50a,KAAK++V,IAAI/zD,QAAQ51F,EAAO6gO,qBAAsBpmQ,EAAe,CAAC,EAAGx+C,IAErE,CACArxH,KAAKoqX,qBAAqB/qC,EAAMsd,EAVhC,MAhBE,IAAK38V,KAAKgnX,gBAAkB3nC,EAAKrhW,OAAS2gX,GAAwB,CAChE,MAAMquB,EAAahtX,KAAKw0a,aAAex0a,KAAK+0N,MAC5C,GAAIi4J,EAAY,CACarQ,GAAaE,YAAYmQ,GAC7BxzY,SACrBwmB,KAAKgnX,gBAAiB,EAE1B,CACF,CAmBJ,CACA,OAAA/oX,CAAQzZ,EAAOoF,GACb,IAAIy+a,EACJ,GAAIz+a,EAAK2wS,MACPv6R,KAAKsI,MAAQk+W,QAGf,OAAQ58X,EAAKk3W,SACX,KAAK1mB,EAAainC,SAClB,KAAKjnC,EAAay2C,mBAClB,KAAKz2C,EAAa2vC,mBAClB,KAAK3vC,EAAaqlC,gBAClB,KAAKrlC,EAAao0B,kBAClB,KAAKp0B,EAAa+tF,eAClB,KAAK/tF,EAAaq0B,iBAChBzuW,KAAK6vX,yBAAyBlxB,GAAyB/0W,GACvD,MACF,KAAKwwV,EAAaipB,uBAClB,KAAKjpB,EAAagpB,yBAClB,KAAKhpB,EAAaupB,oBAEX/5W,EAAKqpX,YAAcjzW,KAAKsI,QAAUk+W,KAA0D,OAAjC6hD,EAAgBz+a,EAAKkV,cAAmB,EAASupa,EAAcrqb,QAAU0gX,KACvI1+V,KAAKsI,MAAQk+W,IAEf,MACF,KAAKpsC,EAAa2hF,oBAClB,KAAK3hF,EAAayqF,kBAChB,IAAKj7a,EAAK40E,QAA0B,UAAhB50E,EAAK40E,OACvB,OAEF,GAAI50E,EAAKk3W,UAAY1mB,EAAa2hF,oBAEhC,YADA/7Z,KAAKuoX,oBAGHvoX,KAAKmwX,2BAA2BvmY,KAClCoW,KAAK20a,cAAgB,KACrBvuZ,MAAMujW,gBAAgB,EAAG/mX,OAAO63R,kBAAmB,UAErD,MACF,KAAK2/C,EAAa+xC,mBAChBnsX,KAAK+wX,mBAAmBnnY,GAG9B,CACA,gBAAA68W,CAAiBjiX,GAAO,KACtBxG,IAEIA,IAASw+V,IACXx8U,KAAK80a,UAAW,EAEpB,CACA,eAAAS,CAAgB/wb,GAAO,KACrBxG,IAEA,GAAIA,IAASw+V,EAA6B,CACxCx8U,KAAK80a,UAAW,EAChB90a,KAAK+0a,eAAgB,EACjB/0a,KAAKsI,QAAUk+W,KACjBxmX,KAAKsI,MAAQk+W,IAEf,MAAMK,EAAc7mX,KAAK6mX,aAAe7mX,KAAK+0N,MACzC8xJ,IACF7mX,KAAKqwX,mBAAmBxJ,EAAa7oY,EAAM2gX,IAC3C3+V,KAAKy4W,OAET,CACF,CACA,uBAAAu9D,CAAwBrjC,GACtB,IAAIujC,EACJ,MAAMrqb,EAAK,SACL,IACJkzW,GACE/+V,MACE,YACJ4vY,EAAW,UACX9kB,GACE6nB,EACE7zY,EAAUkB,KAAKqsX,kBAAkBvB,GACvC,IAAKhsX,EAEH,YADAkB,KAAKwwX,wBAAwB1F,GAG/B,MAAM,KACJzrC,EAAI,KACJsd,EAAI,MACJz5H,GACEpkO,GACE,QACJgiW,GACE59H,GACE,MACJvhK,EAAK,KACL19E,EAAI,IACJijW,EAAG,YACHhJ,GACE0xD,EAIJ,IAAI5vY,KAAK+oX,mBAAmB1pC,IAAUyhB,EAAtC,CAQA,GAJA9gW,KAAKsI,MAAQk+W,GACTxmX,KAAK40a,gBAAkBjzW,GACzB3hE,KAAKm2a,oBAAoBn2a,KAAK40a,gBAEb,MAAf12F,GAAuBA,EAAYloK,OAAQ,CAC7C,MAAMogQ,EAAc/2F,EAAKnB,aAAemB,EACxCr/U,KAAKq2a,mBAAmBnzM,EAAOg7G,EAAYloK,OAAQogQ,EAAatrD,GAChE/rB,EAAI/zD,QAAQ51F,EAAOkhO,0BAA2B,CAC5Cj3F,KAAM+2F,EACNvqb,KACAmqL,OAAQkoK,EAAYloK,QAGxB,CACA,GAAIr0G,EAAO,CACT,MAAM,SACJ+7Q,EAAQ,OACRC,EAAM,SACNC,EAAQ,OACRC,GACEl8Q,EACAg7R,IACFA,EAAK7f,kBAAkBN,GAA+B,CACpDkB,WACAC,SACAC,WACAC,WAGJwB,EAAKJ,wBAAwBzC,EAA6BkB,EAAUC,EAAQC,EAAUC,GACtF79U,KAAKwsX,mBAAmB7qT,EAAO09Q,EAAMsd,EAAMmuB,EAC7C,CACA,GAAW,MAAP5jC,GAA+C,OAA/BgvF,EAAehvF,EAAIyF,UAAoBupF,EAAa18b,OAAQ,CAC9E,MAAM+8b,EAAa12a,EAAS,CAC1BhU,KACAwzV,OACAyhB,WACC5Z,GACH6X,EAAI/zD,QAAQ51F,EAAOkxJ,sBAAuBiwE,EAC5C,CACA,GAAItyb,EAAM,CACR,MAAMuyb,EAAc32a,EAAS,CAC3BhU,KACAwzV,OACAyhB,WACC78W,GACH86W,EAAI/zD,QAAQ51F,EAAOi8N,sBAAuBmF,EAC5C,CAhDA,MAFEx2a,KAAK0mX,gBAAgB/L,eAAet7B,EAmDxC,CACA,kBAAAg3F,CAAmBpL,EAAcj1P,EAAQqpK,EAAMyrC,GAC7C,GAAI9qX,KAAKsI,QAAUk+W,GACjB,OAGExwM,EAAO0qC,cACF1qC,EAAO0qC,MAIhB,MAAMrvF,EAAQ2kD,EAAOr0G,MACrB,IAAK0vD,EACH,OAEFA,EAAMxlI,GAAK,QACX,MAAM4qb,EAAqBxL,EAAa5wE,WACxCr6V,KAAKQ,IAAI,gCAAgC6wH,EAAMr2I,oCAAoCy7b,KAAsBplT,EAAMo4N,UAE3GgtF,GAA+D,IAAzCA,EAAmB1ya,MAAM,KAAKvqB,SACtD63I,EAAM+mO,WAAaq+E,GAErBz2a,KAAK++V,IAAI/zD,QAAQ51F,EAAO6wM,cAAejwO,GACvC,MAAMkoK,EAAc7sN,EAAM6sN,YAC1B,GAAmB,MAAfA,GAAuBA,EAAYxsP,WAAY,CACjD,MAAM7vD,EAAU,CACd7jD,KAAM,QACNqhW,OACAsd,KAAM,KACNmuB,YACAtsT,OAAQ6gR,EAAKrhW,KACb4L,KAAMs0V,GAERl+U,KAAK++V,IAAI/zD,QAAQ51F,EAAOu3K,iBAAkB9qV,EAC5C,CAEA7hC,KAAKi5W,eACP,CACA,YAAA0P,CAAatpC,EAAMhuN,EAAOu3P,GAExB,MAAMqG,EAAYjvX,KAAK0mX,gBAAgBxrV,SAASmkT,GAK9C,IAAIq3F,EADN,GAHA12a,KAAK2mX,YAActnC,EAGfr/U,KAAK40a,gBAAkB3lD,IAAc/V,IAA4B+V,IAAc/V,GAEjF,GAAgB,gBAAZ75B,EAAK9B,GACPv9U,KAAK6pX,iBAAiBxqC,EAAMhuN,QACvB,GAAyC,OAApCqlT,EAAkBrlT,EAAMyvO,UAAoB41E,EAAgBt2F,OAASpgV,KAAKsnX,QAAQjoC,EAAKz8O,IAAK,CACtG5iG,KAAKQ,IAAI,+CAA+C6+U,EAAKz8O,mDAAmDy8O,EAAK9B,eAAev9U,KAAK4oV,WACzI5oV,KAAKsI,MAAQk+W,GACb,MAAM+mD,EAAcvta,KAAKuta,YACrBA,GAAeA,EAAYvtF,UAAU,GAAG9kU,QAAUm2G,EAAMyvO,QAAQ9gB,UAAU,GAAG9kU,OAC/E2jW,GAAwBxtP,EAAMyvO,QAASysE,EAE3C,MACEvta,KAAKonX,oBAAqB,EAC1BhhW,MAAMuiW,aAAatpC,EAAMhuN,EAAOu3P,QAGlC5oX,KAAKmpX,qBAAqB9pC,EAE9B,CACA,kBAAA02F,CAAmBnB,GACjB,MAAM,MACJ7/M,EAAK,cACL4/M,GACE30a,KACE22a,EAAsC,MAAjBhC,OAAwB,EAASA,EAAcruS,MACpEswS,EAAmBhC,EAAetuS,MACpCyuF,GAAS4hN,IAAuBA,EAAmBh8E,WAAai8E,EAAiBj8E,UAAYg6E,EAAc/vb,OAASgwb,EAAehwb,MAAQ+vb,EAAcjgN,OAASkgN,EAAelgN,QACnL10N,KAAKQ,IAAI,8CACT4lB,MAAMujW,gBAAgB,EAAG/mX,OAAO63R,kBAAmB,SACnDz6R,KAAK20a,cAAgB,KAEzB,CACA,mBAAAwB,CAAoBvB,GAClB,MAAM,IACJ71E,GACE/+V,KACJA,KAAK+1a,mBAAmBnB,GACxB50a,KAAK20a,cAAgBC,EACrB50a,KAAK40a,eAAiB,KACtB71E,EAAI/zD,QAAQ51F,EAAO6gO,qBAAsBpmQ,EAAe,CAAC,EAAG+kQ,GAC9D,GA6qRAiC,qBA1qRF,cAAmChmE,GACjC,WAAAhvV,CAAYk9U,GACV34U,MAAM24U,EAAK,4BACX/+V,KAAKg2K,OAAS,GACdh2K,KAAK6ua,SAAW,KAChB7ua,KAAK8ua,cAAgB,GACrB9ua,KAAK4oV,SAAW,EAChB5oV,KAAKkua,aAAe,KACpBlua,KAAK+ua,oBAAqB,EAC1B/ua,KAAKi/V,mBACP,CACA,iBAAAA,GACE,MAAM,IACJF,GACE/+V,KACJ++V,EAAItsU,GAAG2iL,EAAOkqJ,iBAAkBt/V,KAAKu/V,kBAAmBv/V,MACxD++V,EAAItsU,GAAG2iL,EAAOywM,gBAAiB7lZ,KAAK8lZ,iBAAkB9lZ,MACtD++V,EAAItsU,GAAG2iL,EAAOoqJ,cAAex/V,KAAKy/V,eAAgBz/V,MAClD++V,EAAItsU,GAAG2iL,EAAOmmN,gBAAiBv7Z,KAAKw7Z,iBAAkBx7Z,MACtD++V,EAAItsU,GAAG2iL,EAAO0uJ,mBAAoB9jW,KAAKq1a,mBAAoBr1a,MAC3D++V,EAAItsU,GAAG2iL,EAAO5yI,MAAOxiE,KAAK/B,QAAS+B,KACrC,CACA,mBAAA8/V,GACE,MAAM,IACJf,GACE/+V,KACJ++V,EAAIzqN,IAAI8gE,EAAOkqJ,iBAAkBt/V,KAAKu/V,kBAAmBv/V,MACzD++V,EAAIzqN,IAAI8gE,EAAOywM,gBAAiB7lZ,KAAK8lZ,iBAAkB9lZ,MACvD++V,EAAIzqN,IAAI8gE,EAAOoqJ,cAAex/V,KAAKy/V,eAAgBz/V,MACnD++V,EAAIzqN,IAAI8gE,EAAOmmN,gBAAiBv7Z,KAAKw7Z,iBAAkBx7Z,MACvD++V,EAAIzqN,IAAI8gE,EAAO0uJ,mBAAoB9jW,KAAKq1a,mBAAoBr1a,MAC5D++V,EAAIzqN,IAAI8gE,EAAO5yI,MAAOxiE,KAAK/B,QAAS+B,KACtC,CACA,OAAAgrI,GACEhrI,KAAK8/V,sBACL9/V,KAAKg2K,OAAOx8L,OAAS,EACrBwmB,KAAK8ua,cAAct1b,OAAS,EAC5BwmB,KAAKkua,aAAe,KACpB9nZ,MAAM4kH,SACR,CACA,iBAAAu0N,GACEv/V,KAAKg2K,OAAS,GACdh2K,KAAK8ua,cAAgB,GACrB9ua,KAAK6ua,SAAW,KAChB7ua,KAAKkua,aAAe,KACpBlua,KAAK4oV,SAAW,EAChB5oV,KAAK+ua,oBAAqB,CAC5B,CACA,gBAAAjpB,CAAiBtha,EAAOoF,GACtBoW,KAAKg2K,OAASpsL,EAAKm3W,aAAe,EACpC,CACA,kBAAAs0E,CAAmB7wb,EAAOoF,GACxB,MAAM,GACJiC,EAAE,QACF+lF,EAAO,QACPkvR,GACEl3W,EACE+lb,EAAqB3va,KAAK8ua,cAAcjjb,GAC9C,IAAK8jb,GAAsBA,EAAmB/9V,UAAYA,EAExD,YADA5xE,KAAK0N,KAAK,uBAAuB7hB,eAAgB+lF,+BAA2D,MAAtB+9V,OAA6B,EAASA,EAAmB/9V,WAGjJ,MAAM2sS,EAAaoxD,EAAmB7uE,QACtC6uE,EAAmB7uE,QAAUl3W,EAAKk3W,QAClC9gW,KAAKQ,IAAI,eAAe3U,MAAO8jb,EAAmB/qb,cAAc+qb,EAAmBj7M,cAAc9iJ,aAAmBkvR,EAAQngB,WAAWmgB,EAAQ/gB,UAC3Il0V,IAAOmU,KAAK4oV,SACd5oV,KAAK2xW,eAAe9lX,EAAIjC,EAAM20X,EAElC,CACA,cAAA9e,CAAej7W,EAAOoF,GACpBoW,KAAK+pa,YAAYngb,EAAKs5O,MACxB,CACA,gBAAAs4L,CAAiBh3a,EAAOoF,GACtBoW,KAAK+pa,YAAYngb,EAAKs5O,MACxB,CACA,WAAA6mM,CAAYvmE,GACV,MAAMg9D,EAAYxga,KAAK++V,IAAI/F,OAAOwK,GAClC,IAAKg9D,EACH,OAEF,MAAM/0D,EAAc+0D,EAAU/0D,aAAe,KACvCmkE,EAAgB5va,KAAK6ua,SAC3B,IAAIX,EAAelua,KAAKkua,aACxB,IAAKziE,IAAiC,MAAjBmkE,OAAwB,EAASA,EAAcp2b,WAA4B,MAAfiyX,OAAsB,EAASA,EAAYjyX,SAA0B,MAAfiyX,GAAuBA,EAAYzyU,MAAK44C,IAAkF,KAArD,MAAjBg+V,OAAwB,EAASA,EAAcx0b,QAAQw2F,MAAmB,CACnQ5xE,KAAK6ua,SAAWpjE,EAChBzrW,KAAK4oV,SAAW,EAChB5oV,KAAKkua,aAAe,KACpB,MAAMntE,EAAc/gW,KAAKg2K,OAAOhyK,QAAOqtH,IAAUo6O,IAAuD,IAAxCA,EAAYrwX,QAAQi2I,EAAMz/C,WAC1F,GAAImvR,EAAYvnX,OAEVwmB,KAAK+ua,qBAAuBhuE,EAAY/nU,MAAKq4F,GAASA,EAAM9rF,YAC9DvlC,KAAK+ua,oBAAqB,GAG5BhuE,EAAYn+W,SAAQ,CAACyuI,EAAO93I,KAC1B83I,EAAMxlI,GAAKtS,CAAC,SAET,IAAK20b,IAAiBlua,KAAK8ua,cAAct1b,OAE9C,OAEFwmB,KAAK8ua,cAAgB/tE,EAGrB,MAAM4U,EAAkB31W,KAAK++V,IAAInsV,OAAO+iW,gBACxC,IAAKu4D,GAAgBv4D,EAAiB,CACpC,MAAMm6D,EAAap4D,GAAmB/B,EAAiB5U,EAAamX,IACpE,GAAI43D,GAAc,EAChB5B,EAAentE,EAAY+uE,OACtB,CACL,MAAMC,EAAWr4D,GAAmB/B,EAAiB31W,KAAKg2K,QAC1Dk4P,EAAelua,KAAKg2K,OAAO+5P,EAC7B,CACF,CAGA,IAAInnF,EAAU5oV,KAAKgwa,YAAY9B,IACd,IAAbtlF,GAAkBslF,IACpBtlF,EAAU5oV,KAAKgwa,YAAY,OAI7B,MAAM8G,EAAqB,CACzB/1E,eAEF/gW,KAAKQ,IAAI,0BAA0BugW,EAAYvnX,sCAAqD,MAAfiyX,OAAsB,EAASA,EAAY7sW,KAAK,QACrIoB,KAAK++V,IAAI/zD,QAAQ51F,EAAO6/N,qBAAsB6B,GAC9C,MAAMC,EAAkB/2a,KAAK4oV,QAC7B,IAAiB,IAAbA,IAAuC,IAArBmuF,EACpB/2a,KAAKg3a,cAAcpuF,QACd,GAAImY,EAAYvnX,SAA+B,IAArBu9b,EAAwB,CACvD,IAAIE,EACJ,MAAMvzb,EAAQ,IAAIggB,MAAM,0DAA8F,OAAnCuza,EAAiBj3a,KAAK6ua,eAAoB,EAASoI,EAAer4a,KAAK,qBAAqBmiW,EAAYvnX,UAC3LwmB,KAAK0N,KAAKhqB,EAAMmF,SAChBmX,KAAK++V,IAAI/zD,QAAQ51F,EAAO5yI,MAAO,CAC7BxkF,KAAMm8V,EAAWinC,YACjBtgB,QAAS1mB,EAAaipB,uBACtB9oE,OAAO,EACP72S,SAEJ,CACF,MAAWsc,KAAK0xW,qBAAqBw8D,IAEnClua,KAAKg3a,cAAch3a,KAAK4oV,QAE5B,CACA,OAAA3qV,CAAQzZ,EAAOoF,IACTA,EAAK2wS,OAAU3wS,EAAKkV,UAGpBlV,EAAKkV,QAAQ9gB,OAAS0gX,IAAmC90W,EAAKkV,QAAQjT,KAAOmU,KAAK4oV,SAAa5oV,KAAK6ua,WAA6D,IAAjD7ua,KAAK6ua,SAASzzb,QAAQwO,EAAKkV,QAAQ8yE,WACrJ5xE,KAAK+wW,kBAAoB,EACzB/wW,KAAK4yW,WAAWhpX,IAEpB,CACA,kBAAI20a,GACF,OAAOv+Z,KAAKg2K,MACd,CACA,eAAI+qL,GACF,OAAO/gW,KAAK8ua,aACd,CACA,cAAIvsE,GACF,OAAOviW,KAAK4oV,OACd,CACA,cAAI2Z,CAAW6tE,GAEbpwa,KAAK+ua,oBAAqB,EAC1B/ua,KAAKg3a,cAAc5G,EACrB,CACA,cAAA8G,CAAeC,GACb,MAAMp4E,EAAM/+V,KAAK++V,IAEjB,GADAA,EAAInsV,OAAO+iW,gBAAkBwhE,EACzBA,EAAa,CACf,MAAM5Y,EAAiBv+Z,KAAKu+Z,eAE5B,GADAv+Z,KAAK+ua,oBAAqB,EACtBxQ,EAAe/kb,OAAQ,CAEzB,MAAM00b,EAAelua,KAAKkua,aAC1B,GAAIA,GAAgBt2D,GAAcu/D,EAAajJ,EAAch2D,IAC3D,OAAOg2D,EAGT,MAAM4B,EAAap4D,GAAmBy/D,EAAan3a,KAAK8ua,cAAe52D,IACvE,GAAI43D,GAAc,EAAG,CACnB,MAAMz+S,EAAQrxH,KAAK8ua,cAAcgB,GAEjC,OADA9va,KAAKg3a,cAAclH,GACZz+S,CACT,CAAO,GAAI68S,EAAc,CAEvB,IAAIxwY,EAAcqhU,EAAIq/D,WACD,IAAjB1gY,IACFA,EAAcqhU,EAAI69D,gBAEpB,MAAMwa,EAtoThB,SAAwCz1b,EAAQq3W,EAAQulE,EAAgB7gY,EAAai6U,GACnF,MAAMszD,EAAejyE,EAAOt7T,GAStB25Y,EANWr+E,EAAOp3T,QAAO,CAAC01Y,EAAYp0M,EAAOxhP,KACjD,MAAM6hW,EAAMrgH,EAAMqgH,IAGlB,OAFmB+zF,EAAW/zF,KAAS+zF,EAAW/zF,GAAO,KAC9CloW,KAAKqG,GACT41b,CAAU,GAChB,CAAC,GACwBrM,EAAa1nF,KACrC8zF,EAAW79b,OAAS,IACtBkkD,EAAc/tB,KAAKhT,IAAIoD,MAAM4P,KAAM0na,IAGrC,MAAM7hE,EAAoBy1D,EAAa5/D,WACjCoK,EAAmBw1D,EAAazgE,UAChC+sE,EAAoBtM,EAAavzE,SAASl8W,UAAU,EAAG,GACvDg8b,EAAgBr/D,GAAoBnf,EAAQt7T,GAAawlM,IAC7D,GAAIA,EAAMmoI,aAAemK,GAAqBtyI,EAAMsnI,YAAciL,GAAoBvyI,EAAMw0H,SAASl8W,UAAU,EAAG,KAAO+7b,EACvH,OAAO,EAET,MAAM9rE,EAAcvoI,EAAMuoI,YACpBz1L,EAASuoP,EAAev6Z,QAAOqtH,IAAUo6O,IAAuD,IAAxCA,EAAYrwX,QAAQi2I,EAAMz/C,WACxF,OAAO8lS,GAAmB/1X,EAAQq0L,EAAQ2hM,IAAmB,CAAC,IAEhE,OAAI6/D,GAAiB,EACZA,EAEFr/D,GAAoBnf,EAAQt7T,GAAawlM,IAC9C,MAAMuoI,EAAcvoI,EAAMuoI,YACpBz1L,EAASuoP,EAAev6Z,QAAOqtH,IAAUo6O,IAAuD,IAAxCA,EAAYrwX,QAAQi2I,EAAMz/C,WACxF,OAAO8lS,GAAmB/1X,EAAQq0L,EAAQ2hM,IAAmB,CAAC,GAElE,CAomT8B8/D,CAA+BN,EAAap4E,EAAI/F,OAAQulE,EAAgB7gY,EAAaw6U,IACzG,IAAqB,IAAjBk/D,EAEF,OAAO,KAGTr4E,EAAI07D,cAAgB2c,CACtB,CACA,GAAID,EAAYppR,UAAYopR,EAAY98E,WAAY,CAGlD,MAAMq9E,EAA+BhgE,GAAmBy/D,EAAa5Y,GACrE,GAAImZ,GAAgC,EAClC,OAAOnZ,EAAemZ,EAE1B,CACF,CACF,CACA,OAAO,IACT,CACA,aAAAV,CAAc5G,GACZ,MAAMp6P,EAASh2K,KAAK8ua,cAGpB,GAAIsB,EAAQ,GAAKA,GAASp6P,EAAOx8L,OAE/B,YADAwmB,KAAK0N,KAAK,2BAA2B0ia,KAKvCpwa,KAAKixW,aACLjxW,KAAK+ua,oBAAqB,EAC1B,MAAMyB,EAAYxwa,KAAKkua,aACjB78S,EAAQ2kD,EAAOo6P,GACfK,EAAcp/S,EAAMyvO,UAAYzvO,EAAMyvO,QAAQ1gB,KACpD,GAAIgwF,IAAUpwa,KAAK4oV,SAAWv3N,IAAUm/S,GAAaC,EACnD,OAOF,GALAzwa,KAAKQ,IAAI,4BAA4B4va,MAAU/+S,EAAMzsI,cAAcysI,EAAMqjG,cAAcrjG,EAAMz/C,oBAAoBy/C,EAAM08B,YACvH/tJ,KAAK4oV,QAAUwnF,EACfpwa,KAAKkua,aAAe78S,EACpBrxH,KAAK++V,IAAI/zD,QAAQ51F,EAAO+/N,sBAAuBtlQ,EAAe,CAAC,EAAGx+C,IAE9Do/S,EACF,OAEF,MAAMl/D,EAAmBvxW,KAAKmxW,aAAa9/O,EAAMt8G,IAAkB,MAAby7Z,OAAoB,EAASA,EAAU1vE,QAASzvO,EAAMyvO,SAC5G9gW,KAAKkxW,aAAaK,EACpB,CACA,WAAAy+D,CAAY9B,GACV,MAAMntE,EAAc/gW,KAAK8ua,cACzB,IAAK,IAAIv1b,EAAI,EAAGA,EAAIwnX,EAAYvnX,OAAQD,IAAK,CAC3C,MAAM83I,EAAQ0vO,EAAYxnX,GAC1B,KAAIymB,KAAK+ua,oBAAuB19S,EAAM9rF,YAGjC2oY,GAAgBt2D,GAAcs2D,EAAc78S,EAAO6mP,KACtD,OAAO3+X,CAEX,CACA,GAAI20b,EAAc,CAChB,MAAM,KACJtpb,EAAI,KACJ8vO,EAAI,UACJgmI,EAAS,gBACTE,EAAe,WACfP,EAAU,SACVtsM,GACEmgR,EACJ,IAAK,IAAI30b,EAAI,EAAGA,EAAIwnX,EAAYvnX,OAAQD,IAAK,CAE3C,GAAIq+X,GAAc,CAChBhzX,OACA8vO,OACAgmI,YACAE,kBACAP,aACAtsM,YAPYgzM,EAAYxnX,GAQhB2+X,IACR,OAAO3+X,CAEX,CACA,IAAK,IAAIA,EAAI,EAAGA,EAAIwnX,EAAYvnX,OAAQD,IAAK,CAC3C,MAAM83I,EAAQ0vO,EAAYxnX,GAC1B,GAAI45Z,GAAyB+6B,EAAa5nS,MAAOjV,EAAMiV,MAAO,CAAC,WAAY,iBAAkB,oBAC3F,OAAO/sJ,CAEX,CACA,IAAK,IAAIA,EAAI,EAAGA,EAAIwnX,EAAYvnX,OAAQD,IAAK,CAC3C,MAAM83I,EAAQ0vO,EAAYxnX,GAC1B,GAAI45Z,GAAyB+6B,EAAa5nS,MAAOjV,EAAMiV,MAAO,CAAC,aAC7D,OAAO/sJ,CAEX,CACF,CACA,OAAQ,CACV,CACA,YAAA23X,CAAaK,GACX,MAAMhP,EAAaviW,KAAKkua,aACxB,GAAIlua,KAAKwxW,mBAAmBjP,IAAeA,EAAY,CACrDn8U,MAAM8qV,eACN,MAAMrlX,EAAK02W,EAAW12W,GAChB+lF,EAAU2wR,EAAW3wR,QAC3B,IAAI78D,EAAMwtV,EAAWxtV,IACrB,GAAIw8V,EACF,IACEx8V,EAAMw8V,EAAiBlH,cAAct1V,EACvC,CAAE,MAAOrxB,GACPsc,KAAK0N,KAAK,6DAA6DhqB,IACzE,CAGFsc,KAAKQ,IAAI,gCAAgC3U,MAAO02W,EAAW39W,cAAc29W,EAAW7tI,cAAc9iJ,KAClG5xE,KAAKixW,aACLjxW,KAAK++V,IAAI/zD,QAAQ51F,EAAOsqJ,oBAAqB,CAC3C3qV,MACAlpB,KACA+lF,UACAyuR,mBAAoBkR,GAAoB,MAE5C,CACF,GAi3QAomE,cAAelwB,GACfmwB,eA5gDF,MAGE,WAAA/1Z,CAAYk9U,GACV/+V,KAAK++V,SAAM,EACX/+V,KAAK4S,YAAS,EACd5S,KAAK+0N,WAAQ,EACb/0N,KAAK63a,SAAM,EACX73a,KAAK83a,SAAM,EACX93a,KAAK+3a,YAAa,EAClB/3a,KAAKg4a,iBAAc,EACnBh4a,KAAKuvN,aAAc,EACnBvvN,KAAKi4a,SAAU,EACfj4a,KAAKu8U,WAAY,EACjBv8U,KAAKk4a,iBAAc,EAEnBl4a,KAAKw0a,iBAAc,EACnBx0a,KAAKm4a,UAAY,KACXn4a,KAAKuvN,cACPvvN,KAAKi4a,SAAU,GAEjBj4a,KAAKu8U,WAAY,CAAI,EAEvBv8U,KAAKo4a,UAAY,KACVp4a,KAAKuvN,cACRvvN,KAAKuvN,aAAc,GAErBvvN,KAAKu8U,WAAY,CAAK,EAKxBv8U,KAAKq4a,kBAAoBv5a,IACvB,IACEkB,KAAKD,MAAMjB,EAAS,CAClBw/J,GAAIkyP,GAAa8nB,SACjB7sU,IAAKzrG,KAAKuvN,aAEd,CAAE,MAAO7rO,GACPub,EAAOyO,KAAK,yCAA0ChqB,EACxD,GAKFsc,KAAKu4a,kBAAoBz5a,IACvB,IACE,MAAMg7U,EAAWh7U,EAAQugV,KACnBn8G,EAAQljO,KAAK++V,IAAI/F,OAAOlf,EAAS52G,OACjC5kE,EAAKt+J,KAAKw4a,cAAc1+F,GACxBlwV,EAAO,CACX9O,EAAuB,IAApBg/V,EAASpvV,SACZ4zK,MAEEA,IAAOkyP,GAAaioB,OAASn6Q,IAAOkyP,GAAap2D,OAAS97L,GAAMkyP,GAAakoB,QAC/E9ub,EAAKs2G,GAAKgjI,EAAMm2H,QAAU,IAC1BzvW,EAAKyoM,GAAKryL,KAAK24a,gBAAgBr6Q,GAAM,IACrC10K,EAAKk5G,GAAK9iG,KAAK44a,gBAAgBt6Q,IAEjCt+J,KAAKD,MAAMjB,EAASlV,EACtB,CAAE,MAAOlG,GACPub,EAAOyO,KAAK,wCAAyChqB,EACvD,GAEFsc,KAAK++V,IAAMA,EACX,MAAMnsV,EAAS5S,KAAK4S,OAASmsV,EAAInsV,QAC3B,KACJ8gZ,GACE9gZ,EACQ,MAAR8gZ,IACF9gZ,EAAOqtV,QAAUjgW,KAAK64a,uBACtBjma,EAAO+sW,QAAU3/W,KAAK84a,uBACtB94a,KAAK63a,IAAMnkB,EAAK19Q,WAlUtB,WACE,IACE,OAAO6N,OAAOk1R,YAChB,CAAE,MAAOr1b,GACP,IACE,MAAMqxB,EAAMwpB,IAAIglN,gBAAgB,IAAI5mG,MAC9BxY,EAAOpvH,EAAIj7B,WAEjB,OADAykD,IAAIkjN,gBAAgB1sO,GACbovH,EAAK5gJ,MAAM4gJ,EAAKt8G,YAAY,KAAO,EAC5C,CAAE,MAAOnkC,GACP,IAAI25G,GAAK,IAAIn0G,MAAO+mB,UAMpB,MALa,uCAAuC/pB,QAAQ,SAAS5K,IACnE,MAAMb,GAAK4iH,EAAqB,GAAhB1tF,KAAKG,UAAiB,GAAK,EAE3C,OADAutF,EAAK1tF,KAAKq2B,MAAMq3D,EAAK,KACR,KAAL/hH,EAAWb,EAAQ,EAAJA,EAAU,GAAKX,SAAS,GAAG,GAGtD,CACF,CACF,CA+SmCqqJ,GAC7BnkI,KAAK83a,IAAMpkB,EAAKslB,UAChBh5a,KAAK+3a,YAAiC,IAApBrkB,EAAKqkB,WACvB/3a,KAAKg4a,YAActkB,EAAKskB,YACxBh4a,KAAKi/V,oBAET,CACA,iBAAAA,GACE,MAAMF,EAAM/+V,KAAK++V,IACjBA,EAAItsU,GAAG2iL,EAAO8wJ,eAAgBlmW,KAAKmmW,gBAAiBnmW,MACpD++V,EAAItsU,GAAG2iL,EAAOszM,eAAgB1oZ,KAAKqoZ,gBAAiBroZ,MACpD++V,EAAItsU,GAAG2iL,EAAOmxN,eAAgBvma,KAAKs1a,gBAAiBt1a,KACtD,CACA,mBAAA8/V,GACE,MAAMf,EAAM/+V,KAAK++V,IACjBA,EAAIzqN,IAAI8gE,EAAO8wJ,eAAgBlmW,KAAKmmW,gBAAiBnmW,MACrD++V,EAAIzqN,IAAI8gE,EAAOszM,eAAgB1oZ,KAAKqoZ,gBAAiBroZ,MACrD++V,EAAIzqN,IAAI8gE,EAAOmxN,eAAgBvma,KAAKs1a,gBAAiBt1a,KACvD,CACA,OAAAgrI,GACEhrI,KAAK8/V,sBACL9/V,KAAKqoZ,kBAGLroZ,KAAK++V,IAAM/+V,KAAK4S,OAAS5S,KAAKk4a,YAAcl4a,KAAKw0a,YAAc,KAE/Dx0a,KAAKm4a,UAAYn4a,KAAKo4a,UAAY,IACpC,CACA,eAAAjyE,CAAgB3hX,EAAOoF,GACrBoW,KAAK+0N,MAAQnrO,EAAKmrO,MAClB/0N,KAAK+0N,MAAM11O,iBAAiB,UAAW2gB,KAAKm4a,WAC5Cn4a,KAAK+0N,MAAM11O,iBAAiB,UAAW2gB,KAAKo4a,UAC9C,CACA,eAAA/vB,GACOroZ,KAAK+0N,QAGV/0N,KAAK+0N,MAAMz1O,oBAAoB,UAAW0gB,KAAKm4a,WAC/Cn4a,KAAK+0N,MAAMz1O,oBAAoB,UAAW0gB,KAAKo4a,WAG/Cp4a,KAAK+0N,MAAQ,KACf,CACA,eAAAugN,CAAgB9wb,EAAOoF,GACrB,IAAIqvb,EAAoBC,EACxBl5a,KAAKk4a,YAA0D,OAA3Ce,EAAqBrvb,EAAKosL,OAAOr0G,YAAiB,EAASs3W,EAAmBlnV,OAClG/xF,KAAKw0a,YAA0D,OAA3C0E,EAAqBtvb,EAAKosL,OAAO0qC,YAAiB,EAASw4N,EAAmBnnV,MACpG,CAIA,UAAA+5E,GACE,IAAIm7P,EACJ,MAAO,CACLhla,EAAG,EACH6/L,GAAI2uN,GAAkB0oB,IACtBtB,IAAK73a,KAAK63a,IACVC,IAAK93a,KAAK83a,IACVl4U,GAAkC,OAA7BqnU,EAAcjna,KAAK+0N,YAAiB,EAASkyM,EAAYp9D,aAC9DupD,IAAKpzZ,KAAK++V,IAAIq6E,kBAAoB,IAEtC,CAKA,KAAAr5a,CAAMjB,EAASlV,EAAO,CAAC,GAErBiW,EAASjW,EAAMoW,KAAK8rK,cACpB,MAAMutQ,EAAUzvb,EAAK00K,KAAOkyP,GAAa9pK,MAAQ98P,EAAK00K,KAAOkyP,GAAaioB,OAAS7ub,EAAK00K,KAAOkyP,GAAakoB,MACxG14a,KAAKi4a,SAAWoB,IAClBzvb,EAAK88G,IAAK,EACV98G,EAAK6hH,IAAK,EACVzrG,KAAKi4a,SAAU,GAEF,MAAXrub,EAAK6hH,KACP7hH,EAAK6hH,GAAKzrG,KAAKu8U,WAKjB,MAAM,YACJy7F,GACEh4a,KACAg4a,IACFpub,EAAO7P,OAAOiC,KAAK4N,GAAMg4C,QAAO,CAACga,EAAK1hE,KACpC89b,EAAY/9b,SAASC,KAAS0hE,EAAI1hE,GAAO0P,EAAK1P,IACvC0hE,IACN,CAAC,IAEF57C,KAAK+3a,YACFj5a,EAAQk4H,UACXl4H,EAAQk4H,QAAU,CAAC,GAErB68R,GAAkB/0Z,EAAQk4H,QAASptI,IAEnCkV,EAAQiW,IAAMs/Y,GAAgBv1Z,EAAQiW,IAAKnrB,EAE/C,CAIA,aAAA4ub,CAAc1+F,GACZ,MAAM,KACJ97V,GACE87V,EACJ,MAAa,aAAT97V,EACKwya,GAAa8oB,WAEF,gBAAhBx/F,EAASyD,GACJizE,GAAa9pK,KAET,UAAT1oQ,EACKwya,GAAap2D,MAET,SAATp8W,EACGgiB,KAAK++V,IAAIgC,YAAYvnX,OAGnBg3a,GAAaioB,MAFXjoB,GAAakoB,WAFxB,CAOF,CAKA,eAAAC,CAAgB36b,GACd,IACIg7W,EADAK,EAAU,EAEd,MAAM0F,EAAM/+V,KAAK++V,IACjB,GAAI/gX,IAASwya,GAAap2D,MACxBpB,EAAS+F,EAAIgC,gBACR,CACL,MAAMpkW,EAAMoiW,EAAI89D,aACVhha,EAAMc,GAAO,EAAIA,EAAM,EAAIoiW,EAAI/F,OAAOx/W,OAC5Cw/W,EAAS+F,EAAI/F,OAAOz1W,MAAM,EAAGsY,EAC/B,CACA,IAAK,MAAMqnO,KAAS81H,EACd91H,EAAMm2H,QAAUA,IAClBA,EAAUn2H,EAAMm2H,SAGpB,OAAOA,EAAU,EAAIA,EAAUzsT,GACjC,CAKA,eAAAgsY,CAAgB56b,GACd,MAAM+2O,EAAQ/0N,KAAK++V,IAAIhqI,MACjBhjI,EAAS/zG,IAASwya,GAAap2D,MAAQp6V,KAAKk4a,YAAcl4a,KAAKw0a,YACrE,IAAKziV,IAAWgjI,EACd,OAAOnoL,IAGT,OAAkB,IADL+vU,GAAaxK,WAAWpgR,EAAQgjI,EAAMjkJ,YAAa9wE,KAAK4S,OAAO01W,eAChEzsX,GACd,CAKA,oBAAAg9a,GACE,MAAM,QACJ54E,GACEjgW,KAAK4S,OACH7S,EAAQC,KAAKq4a,kBACblkV,EAAO8rQ,GAAWjgW,KAAK4S,OAAOmsO,OACpC,OAAO,MACL,WAAAl9N,CAAYjP,GACV5S,KAAK++O,YAAS,EACd/+O,KAAK++O,OAAS,IAAI5qJ,EAAKvhF,EACzB,CACA,SAAIg4R,GACF,OAAO5qS,KAAK++O,OAAO6rD,KACrB,CACA,WAAI9rS,GACF,OAAOkB,KAAK++O,OAAOjgP,OACrB,CACA,OAAAksI,GACEhrI,KAAK++O,OAAO/zG,SACd,CACA,KAAAhwG,GACEh7B,KAAK++O,OAAO/jN,OACd,CACA,IAAAz7B,CAAKT,EAAS8T,EAAQ3E,GACpBlO,EAAMjB,GACNkB,KAAK++O,OAAOx/O,KAAKT,EAAS8T,EAAQ3E,EACpC,EAEJ,CAKA,oBAAA6qa,GACE,MAAM,QACJn5D,GACE3/W,KAAK4S,OACH7S,EAAQC,KAAKu4a,kBACbpkV,EAAOwrR,GAAW3/W,KAAK4S,OAAOmsO,OACpC,OAAO,MACL,WAAAl9N,CAAYjP,GACV5S,KAAK++O,YAAS,EACd/+O,KAAK++O,OAAS,IAAI5qJ,EAAKvhF,EACzB,CACA,SAAIg4R,GACF,OAAO5qS,KAAK++O,OAAO6rD,KACrB,CACA,WAAI9rS,GACF,OAAOkB,KAAK++O,OAAOjgP,OACrB,CACA,OAAAksI,GACEhrI,KAAK++O,OAAO/zG,SACd,CACA,KAAAhwG,GACEh7B,KAAK++O,OAAO/jN,OACd,CACA,IAAAz7B,CAAKT,EAAS8T,EAAQ3E,GACpBlO,EAAMjB,GACNkB,KAAK++O,OAAOx/O,KAAKT,EAAS8T,EAAQ3E,EACpC,EAEJ,GAsuCAsra,0BAluCF,MACE,WAAA13Z,CAAYk9U,GACV/+V,KAAK++V,SAAM,EACX/+V,KAAKQ,SAAM,EACXR,KAAK++O,OAAS,KACd/+O,KAAKujV,IAAM,KACXvjV,KAAK+5V,UAAY,IACjB/5V,KAAKw5a,gBAAkB,KACvBx5a,KAAKy5a,WAAa,IAClBz5a,KAAK05a,aAAe,EACpB15a,KAAK0lK,QAAU,EACf1lK,KAAKqlP,SAAU,EACfrlP,KAAK0vV,SAAU,EACf1vV,KAAKg5V,OAAS,KACdh5V,KAAK+gW,YAAc,KACnB/gW,KAAKghW,eAAiB,KACtBhhW,KAAK25a,kBAAoB,CAAC,EAC1B35a,KAAK++V,IAAMA,EACX/+V,KAAKQ,IAAMvB,EAAOuB,IAAIE,KAAKzB,EAAQ,uBACnCe,KAAKi/V,mBACP,CACA,iBAAAA,GACE,MAAMF,EAAM/+V,KAAK++V,IACjBA,EAAItsU,GAAG2iL,EAAOkqJ,iBAAkBt/V,KAAKu/V,kBAAmBv/V,MACxD++V,EAAItsU,GAAG2iL,EAAOotJ,gBAAiBxiW,KAAKynX,iBAAkBznX,MACtD++V,EAAItsU,GAAG2iL,EAAOywM,gBAAiB7lZ,KAAK8lZ,iBAAkB9lZ,MACtD++V,EAAItsU,GAAG2iL,EAAO5yI,MAAOxiE,KAAK/B,QAAS+B,KACrC,CACA,mBAAA8/V,GACE,MAAMf,EAAM/+V,KAAK++V,IACZA,IAGLA,EAAIzqN,IAAI8gE,EAAOkqJ,iBAAkBt/V,KAAKu/V,kBAAmBv/V,MACzD++V,EAAIzqN,IAAI8gE,EAAOotJ,gBAAiBxiW,KAAKynX,iBAAkBznX,MACvD++V,EAAIzqN,IAAI8gE,EAAOywM,gBAAiB7lZ,KAAK8lZ,iBAAkB9lZ,MACvD++V,EAAIzqN,IAAI8gE,EAAO5yI,MAAOxiE,KAAK/B,QAAS+B,MACtC,CACA,SAAAk/V,GAGE,GAFAl/V,KAAKqlP,SAAU,EACfrlP,KAAKsxE,eACDtxE,KAAK0vV,SAAW1vV,KAAKujV,IAAK,CAC5B,GAAIvjV,KAAK0lK,QAAS,CAChB,MAAMjY,EAAwB,IAAlBztJ,KAAKy5a,YAAqB1uT,YAAY9hI,MAAQ+W,KAAK0lK,SAC/D,GAAIjY,EAAM,EAER,YADAztJ,KAAKs2M,gBAAgBt2M,KAAKujV,IAAK91L,EAGnC,CACAztJ,KAAK45a,qBAAqB55a,KAAKujV,IACjC,CACF,CACA,QAAA6b,GACEp/V,KAAKqlP,SAAU,EACXrlP,KAAK++O,SACP/+O,KAAK++O,OAAO/zG,UACZhrI,KAAK++O,OAAS,MAEhB/+O,KAAKsxE,cACP,CACA,YAAAA,IAC4B,IAAtBtxE,KAAK05a,cACP1qa,KAAKsiE,aAAatxE,KAAK05a,aACvB15a,KAAK05a,aAAe,EAExB,CACA,OAAA1uS,GACEhrI,KAAK8/V,sBACL9/V,KAAKo/V,WAELp/V,KAAK++V,IAAM,KACX/+V,KAAKg5V,OAASh5V,KAAK+gW,YAAc/gW,KAAKghW,eAAiB,IACzD,CACA,WAAA2/D,CAAYkZ,GACV,MAAM7gF,EAASh5V,KAAKg5V,OAChBA,IACFh5V,KAAKg5V,OAASA,EAAOh1V,QAAOk/N,GAASA,IAAU22M,IAEnD,CACA,iBAAAt6E,GACEv/V,KAAKo/V,WACLp/V,KAAK0vV,SAAU,EACf1vV,KAAKy5a,WAAa,IAClBz5a,KAAK0lK,QAAU,EACf1lK,KAAKujV,IAAM,KACXvjV,KAAK+5V,UAAY,IACjB/5V,KAAKg5V,OAASh5V,KAAK+gW,YAAc/gW,KAAKghW,eAAiB,IACzD,CACA,gBAAAymB,CAAiBjjY,EAAOoF,GACtB,MAAM,gBACJmvW,GACEnvW,EACoB,OAApBmvW,IAGJ/4V,KAAK+5V,UAAYhB,EAAgBgB,UACjC/5V,KAAKujV,IAAMwV,EAAgBxV,IACvBvjV,KAAKqlP,SACPrlP,KAAKk/V,YAET,CACA,gBAAA4mD,CAAiBtha,EAAOoF,GACtBoW,KAAK+gW,YAAcn3W,EAAKm3W,YACxB/gW,KAAKghW,eAAiBp3W,EAAKo3W,cAC7B,CACA,OAAA/iW,CAAQzZ,EAAOoF,GACb,MAAM,YACJmpX,GACEnpX,EACJ,IAAoB,MAAfmpX,OAAsB,EAASA,EAAY77U,UAAYy5U,IAAgDoC,EAAYvnT,QAAUolT,GAAgD,CAChL,MAAM5X,EAASh5V,KAAKg5V,OACpB,IAAIwgF,EAAkBx5a,KAAKw5a,gBACvBM,EAAe95a,KAAK+5V,UACxB,GAAInwW,EAAKkV,QAAS,CAChB,MAAM,QACJ8yE,EAAO,UACPmoR,EAAS,KACT/7W,GACE4L,EAAKkV,QACL8yE,GAAWonR,EACb8gF,EAAe95a,KAAK+5a,qBAAqBnoW,EAAS5zF,EAAM87b,GAC/C//E,IACT+/E,EAAe//E,EAEnB,CACM+/E,KAAgB95a,KAAK25a,oBACzB35a,KAAK25a,kBAAkBG,GAAgB/uT,YAAY9hI,QAEhDuwb,GAAmBxgF,IAEtBwgF,EAAkBxgF,EAAOp3T,QAAO,CAACo4Y,EAAU92M,MACE,IAAvC82M,EAAS5+b,QAAQ8nP,EAAM62H,YACzBigF,EAAS3+b,KAAK6nP,EAAM62H,WAEfigF,IACN,KAEDR,GAAmBA,EAAgBhgc,OAAS,IAC9CwmB,KAAKi6a,sBAAsBT,GAC3BzmE,EAAYvyC,SAAWxgU,KAAK+5V,YAAc+/E,GAEvC/mE,EAAYvyC,UACfvhU,EAAOyO,KAAK,qBAAqB9jB,EAAKk3W,aAAal3W,EAAKlG,MAAMmF,gDAAgDixb,aAAwB9gF,EAASA,EAAOx/W,OAASw/W,iBAAsBxzV,KAAKC,UAAU+za,iBAA+Bh0a,KAAKC,UAAUzF,KAAK25a,qBAE3P,CACF,CACA,kBAAAO,CAAmBlhF,GAEjBh5V,KAAKg5V,OAASA,EACd,IAAImhF,EAAgBn6a,KAAKo6a,oBAAoBp6a,KAAK+5V,WAClD,GAA6B,IAAzBogF,EAAc3gc,OAAc,CAC9B,MAAMugX,EAAYf,EAAO,GAAGe,UAC5B/5V,KAAKQ,IAAI,8BAA8BR,KAAK+5V,0CAA0CA,MACtFogF,EAAgBn6a,KAAKo6a,oBAAoBrgF,GACzC/5V,KAAK+5V,UAAYA,CACnB,CAIA,OAHIogF,EAAc3gc,SAAWw/W,EAAOx/W,QAClCwmB,KAAKQ,IAAI,SAAS25a,EAAc3gc,UAAUw/W,EAAOx/W,6BAA6BwmB,KAAK+5V,cAE9EogF,CACT,CACA,mBAAAC,CAAoBrgF,GAClB,OAAoB,OAAhB/5V,KAAKg5V,OACA,GAEFh5V,KAAKg5V,OAAOh1V,QAAOk/N,GAAS62H,IAAc72H,EAAM62H,WACzD,CACA,qBAAAkgF,CAAsBT,GAEpB,IAAIxgF,EADJh5V,KAAKw5a,gBAAkBA,EAIvB,MAAMG,EAAoB35a,KAAK25a,kBACzB1wb,EAAM8hI,YAAY9hI,MACxBlP,OAAOiC,KAAK29b,GAAmB/2b,SAAQm3W,IACjC9wW,EAAM0wb,EAAkB5/E,GAhLE,YAiLrB4/E,EAAkB5/E,EAC3B,IAEF,IAAK,IAAIxgX,EAAI,EAAGA,EAAIigc,EAAgBhgc,OAAQD,IAAK,CAC/C,MAAMwgX,EAAYy/E,EAAgBjgc,GAClC,GAAIwgX,KAAa4/E,EACf,SAEF,GAAI5/E,IAAc/5V,KAAK+5V,UACrB,OAEF,MAAM/4W,EAAgBgf,KAAK++V,IAAI07D,cACzB4f,EAAgBr6a,KAAK++V,IAAI/F,OAAOh4W,GAEtC,GADAg4W,EAASh5V,KAAKo6a,oBAAoBrgF,GAC9Bf,EAAOx/W,OAAS,EAAG,CACrBwmB,KAAKQ,IAAI,uBAAuBu5V,MAChC/5V,KAAK+5V,UAAYA,EACjBuU,GAA6BtV,GAC7Bh5V,KAAK++V,IAAI/zD,QAAQ51F,EAAO2wM,eAAgB,CACtC/sD,WAGF,MAAMshF,EAAmBt6a,KAAK++V,IAAI/F,OAAOh4W,GACrCq5b,GAAiBC,GAAoBt6a,KAAKg5V,SACxCshF,EAAiBh0S,MAAM,uBAAyB+zS,EAAc/zS,MAAM,sBAAwBg0S,EAAiBjhF,UAAYghF,EAAchhF,SACzIr5V,KAAKQ,IAAI,yCAAyC65a,EAAchhF,cAAcihF,EAAiBjhF,WAEjGr5V,KAAK++V,IAAI07D,cAAgBz5a,GAE3B,KACF,CACF,CACF,CACA,oBAAA+4b,CAAqBnoW,EAAS5zF,EAAMu8b,GAClC,MAAMvhF,EAASh5V,KAAKo6a,oBAAoBG,GAAgBx+a,OAAOiE,KAAKg5V,QAAU,IAC9E,IAAK,IAAIz/W,EAAI,EAAGA,EAAIy/W,EAAOx/W,OAAQD,IACjC,GAAIyE,IAAS0gX,IAAmC1F,EAAOz/W,GAAG+xX,cAAc15R,IAAY5zF,IAAS0gX,IAAsC1F,EAAOz/W,GAAGiyX,iBAAiB55R,GAC5J,OAAOonR,EAAOz/W,GAAGwgX,UAGrB,OAAOwgF,CACT,CACA,aAAAC,CAAcC,GACZ,MAAMzhF,EAASh5V,KAAKg5V,OACpB,IAAKA,EACH,OAEF,MAAM0hF,EAAqB,CAAC,EACtBC,EAAwB,CAAC,EAC/BF,EAAc73b,SAAQg4b,IACpB,MACE7+F,GAAI24E,EACJ,UAAWmmB,EACX,kBAAmBpmB,GACjBmmB,EACJ,GAAI5hF,EAAOhgU,MAAKkqM,GAASA,EAAM62H,YAAc26D,IAC3C,OAEF,MAAMomB,EAAiB96a,KAAKo6a,oBAAoBS,GAAQ/8b,KAAIi9b,IAC1D,MAAMh/b,EAAa,IAAI6+V,EAASmgG,EAAUz0S,OAC1CvqJ,EAAW,cAAgB24a,EAC3B,MAAMsmB,EAAqBj/b,EAAWq+W,OAAS,GAAGr+W,EAAWq+W,eAAes6D,IACtEumB,EAAwBl/b,EAAWu+W,WAAa,GAAGv+W,EAAWu+W,mBAAmBo6D,IACnFsmB,IACFN,EAAmB3+b,EAAWq+W,OAAS4gF,EACvCj/b,EAAWq+W,MAAQ4gF,GAEjBC,IACFN,EAAsB5+b,EAAWu+W,WAAa2gF,EAC9Cl/b,EAAWu+W,UAAY2gF,GAEzB,MAAMlma,EAAM8/Y,GAAsBkmB,EAAUx3F,IAAKxnW,EAAW,qBAAsB,mBAAoB04a,GAChGymB,EAAc,IAAI5wE,GAAM,CAC5BhkO,MAAOvqJ,EACPs+W,WAAY0gF,EAAU1gF,WACtBhB,QAAS0hF,EAAU1hF,QACnBj8W,OAAQ29b,EAAU39b,OAClBwH,KAAMm2b,EAAUn2b,KAChBmwB,MACAyiV,WAAYujF,EAAUvjF,WACtBr6W,MAAO49b,EAAU59b,QAEnB,GAAI49b,EAAUtvE,YACZ,IAAK,IAAIlyX,EAAI,EAAGA,EAAIwhc,EAAUtvE,YAAYjyX,OAAQD,IAChD2hc,EAAYhwE,WAAW,QAAS,GAAG6vE,EAAUtvE,YAAYlyX,YAAYm7a,KAGzE,GAAIqmB,EAAUrvE,eACZ,IAAK,IAAInyX,EAAI,EAAGA,EAAIwhc,EAAUrvE,eAAelyX,OAAQD,IACnD2hc,EAAYhwE,WAAW,OAAQ,GAAG6vE,EAAUrvE,eAAenyX,YAAYm7a,KAG3E,OAAOwmB,CAAW,IAEpBliF,EAAO39W,QAAQy/b,GACfvmB,GAAqBv0Z,KAAK+gW,YAAa25E,EAAoBjmB,EAAgBC,GAC3EH,GAAqBv0Z,KAAKghW,eAAgB25E,EAAuBlmB,EAAgBC,EAAQ,GAE7F,CACA,oBAAAklB,CAAqBr2F,GACnB,MAAM3wU,EAAS5S,KAAK++V,IAAInsV,OAClBstV,EAASttV,EAAOmsO,OAKtB,IAAIhqO,EAJA/U,KAAK++O,QACP/+O,KAAK++O,OAAO/zG,UAEdhrI,KAAK++O,OAAS,IAAImhH,EAAOttV,GAEzB,IACEmC,EAAM,IAAI/F,KAAKuvB,IAAIglT,EACrB,CAAE,MAAO7/V,GAGP,OAFAsc,KAAK0vV,SAAU,OACf1vV,KAAKQ,IAAI,0CAA0C+iV,IAErD,CACA,GAAqB,UAAjBxuU,EAAIY,SAAsB,CAC5B,MAAMwla,EAA6E,GAA/Dn7a,KAAK++V,IAAIq6E,mBAAqBxma,EAAOuoZ,wBACzDpmZ,EAAI+vQ,aAAar0P,IAAI,eAAgBzwB,KAAK+5V,WAC1ChlV,EAAI+vQ,aAAar0P,IAAI,kBAAmB,GAAK0qZ,EAC/C,CACA,MAAMr8a,EAAU,CACdgmN,aAAc,OACd/vM,IAAKA,EAAIzvB,MAELi7W,EAAa3tV,EAAO84Z,2BAA2BnmY,QAC/C87T,EAA2Bd,EAAWK,YAAcL,EAAWI,cAAgB,CAAC,EAChFW,EAAe,CACnBf,aACA/jU,QAAS+jU,EAAWa,cACpBG,SAAUF,EAAyBG,aAAe,EAClDvkM,WAAYokM,EAAyBI,cAAgB,EACrDC,cAAeL,EAAyBM,iBAAmB,GAEvD1zV,EAAY,CAChB4zV,UAAW,CAACrjV,EAAUosR,EAAO9rS,EAASgjW,KACpC9hW,KAAKQ,IAAI,8BAA8BuU,MACvC,MAAMqma,EAAe58Z,EAAS50B,KAC9B,GAA6B,IAAzBwxb,EAAavwW,QAEf,YADA7qE,KAAKQ,IAAI,oBAAoB46a,EAAavwW,0BAG5C7qE,KAAK0lK,QAAU36C,YAAY9hI,MAC3B+W,KAAKy5a,WAAa2B,EAAaC,IAC/B,MACE,aAAcC,EACd,iBAAkBb,EAClB,mBAAoBjB,GAClB4B,EACJ,GAAIE,EACF,IACEt7a,KAAKujV,IAAM,IAAIv0U,KAAKuvB,IAAI+8Y,EAAWvma,GAAKzvB,IAC1C,CAAE,MAAO5B,GAGP,OAFAsc,KAAK0vV,SAAU,OACf1vV,KAAKQ,IAAI,iDAAiD86a,IAE5D,CAEFt7a,KAAKs2M,gBAAgBt2M,KAAKujV,KAAOzkV,EAAQiW,KACrC0la,GACFz6a,KAAKw6a,cAAcC,GAErB,MAAMc,EAAqB,CACzBC,iBAAkBJ,EAClBrma,IAAKA,EAAIj7B,YAEXkmB,KAAK++V,IAAI/zD,QAAQ51F,EAAOqmO,yBAA0BF,GAC9C/B,GACFx5a,KAAKi6a,sBAAsBT,EAC7B,EAEFv7a,QAAS,CAACva,EAAOob,EAASgjW,EAAgBl3D,KAGxC,GAFA5qS,KAAKQ,IAAI,oCAAoC9c,EAAM0oB,QAAQ1oB,EAAMO,SAAS6a,EAAQiW,QAClF/U,KAAKo/V,WACc,MAAf17W,EAAM0oB,KAGR,OAFApM,KAAK0vV,SAAU,OACf1vV,KAAKQ,IAAI,qBAAqB1B,EAAQiW,2BAGxC,IAAI04I,EAAwB,IAAlBztJ,KAAKy5a,WACf,GAAmB,MAAf/1b,EAAM0oB,KAWVpM,KAAKs2M,gBAAgBt2M,KAAKujV,KAAOzkV,EAAQiW,IAAK04I,OAX9C,CACE,MAAMsxF,EAAS/+O,KAAK++O,OACpB,GAAoE,oBAA9C,MAAVA,OAAiB,EAASA,EAAOw3K,mBAAmC,CAC9E,MAAMt/R,EAAa8nH,EAAOw3K,kBAAkB,eACxCt/R,IACFw2B,EAA+B,IAAzBh6J,WAAWwjI,GAErB,CACAj3H,KAAKQ,IAAI,qBAAqB1B,EAAQiW,mBAExC,CACkD,EAEpDotV,UAAW,CAACv3D,EAAO9rS,EAASgjW,KAC1B9hW,KAAKQ,IAAI,sCAAsC1B,EAAQiW,QACvD/U,KAAKs2M,gBAAgBt2M,KAAKujV,KAAOzkV,EAAQiW,IAAI,GAGjD/U,KAAKQ,IAAI,iCAAiCuU,KAC1C/U,KAAK++O,OAAOx/O,KAAKT,EAASwiW,EAAcrzV,EAC1C,CACA,eAAAqoM,CAAgBitI,EAAKm4F,EAA0B,IAAlB17a,KAAKy5a,YAChCz5a,KAAKsxE,eACLtxE,KAAK05a,YAAc1qa,KAAKV,YAAW,KACjC,IAAIw/Y,EACJ,MAAM/4L,EAAkC,OAAzB+4L,EAAY9tZ,KAAK++V,UAAe,EAAS+uD,EAAU/4L,OAC9DA,GAAUA,EAAMqzJ,MAIpBpoX,KAAKs2M,gBAAgBitI,EAAuB,IAAlBvjV,KAAKy5a,YAH7Bz5a,KAAK45a,qBAAqBr2F,EAGqB,GAChDm4F,EACL,KAy7BF,SAASC,GAAQx/a,GACf,OAAIA,GAAsB,kBAARA,EACZviB,MAAMC,QAAQsiB,GACTA,EAAIre,IAAI69b,IAEV5hc,OAAOiC,KAAKmgB,GAAKylC,QAAO,CAAC/jD,EAAQ3D,KACtC2D,EAAO3D,GAAOyhc,GAAQx/a,EAAIjiB,IACnB2D,IACN,CAAC,GAECse,CACT,CAKA,SAASy/a,GAAoBhpa,GAC3B,MAAMipa,EAAgBjpa,EAAOmsO,OAC7B,GAAI88L,IAAkBrlB,IAAeqlB,IAAkBxmB,GAErDp2Z,EAAOuB,IAAI,yEACXoS,EAAO+4W,aAAc,MAChB,EAnqBT,WACE,GAEA38W,KAAK8P,OAAS9P,KAAK0rB,iBAAmB1rB,KAAK8sa,gBAAkB9sa,KAAKm6I,QAChE,IAEE,OADA,IAAIn6I,KAAK8sa,eAAe,CAAC,IAClB,CACT,CAAE,MAAOxhc,GAET,CAEF,OAAO,CACT,EAwpBmCyhc,KAE7Bnpa,EAAOmsO,OAASy3K,GAChB5jZ,EAAO+4W,aAAc,EACrB/4W,EAAO2yW,mBAAoB,EAC3BtmX,EAAOuB,IAAI,8DAEf,CACF,CAEA,IAAIw7a,GACJ,MAAMC,WAAwBprE,GAC5B,WAAAhvV,CAAYk9U,EAAKw6E,GACfnzZ,MAAM24U,EAAK,sBACX/+V,KAAKk8a,QAAU,GACfl8a,KAAKm8a,aAAe,EACpBn8a,KAAKo8a,eAAiB,EACtBp8a,KAAKq8a,iBAAc,EACnBr8a,KAAKira,aAAe,KACpBjra,KAAKs8a,mBAAqB,EAC1Bt8a,KAAKu8a,kBAAoB,EACzBv8a,KAAKw8a,cAAW,EAChBx8a,KAAKy8a,sBAAmB,EACxBz8a,KAAKw8a,SAAWjD,EAChBv5a,KAAKgmW,oBACP,CACA,kBAAAA,GACE,MAAM,IACJjH,GACE/+V,KACJ++V,EAAItsU,GAAG2iL,EAAOkqJ,iBAAkBt/V,KAAKu/V,kBAAmBv/V,MACxD++V,EAAItsU,GAAG2iL,EAAOotJ,gBAAiBxiW,KAAKynX,iBAAkBznX,MACtD++V,EAAItsU,GAAG2iL,EAAOyuJ,aAAc7jW,KAAKy7Z,cAAez7Z,MAChD++V,EAAItsU,GAAG2iL,EAAO2wM,eAAgB/lZ,KAAKgmZ,gBAAiBhmZ,MACpD++V,EAAItsU,GAAG2iL,EAAOukK,cAAe35W,KAAK45W,eAAgB55W,MAClD++V,EAAItsU,GAAG2iL,EAAO5yI,MAAOxiE,KAAK/B,QAAS+B,KACrC,CACA,oBAAAimW,GACE,MAAM,IACJlH,GACE/+V,KACJ++V,EAAIzqN,IAAI8gE,EAAOkqJ,iBAAkBt/V,KAAKu/V,kBAAmBv/V,MACzD++V,EAAIzqN,IAAI8gE,EAAOotJ,gBAAiBxiW,KAAKynX,iBAAkBznX,MACvD++V,EAAIzqN,IAAI8gE,EAAOyuJ,aAAc7jW,KAAKy7Z,cAAez7Z,MACjD++V,EAAIzqN,IAAI8gE,EAAO2wM,eAAgB/lZ,KAAKgmZ,gBAAiBhmZ,MACrD++V,EAAIzqN,IAAI8gE,EAAOukK,cAAe35W,KAAK45W,eAAgB55W,MACnD++V,EAAIzqN,IAAI8gE,EAAO5yI,MAAOxiE,KAAK/B,QAAS+B,KACtC,CACA,OAAAgrI,GACEhrI,KAAKimW,uBACLjmW,KAAKw8a,SAAW,KAChBx8a,KAAK08a,cACLt2Z,MAAM4kH,SACR,CACA,QAAAo0N,GACiBp/V,KAAKk8a,QAGbt5b,SAAQsgP,IACbA,EAAMwnI,UAAY,EAClBxnI,EAAMunI,cAAgB,CAAC,IAEzBrkV,MAAMg5U,UACR,CACA,WAAAs9E,GACE18a,KAAKq8a,iBAAczjb,EACnBoH,KAAKu8a,kBAAoB,EACzBv8a,KAAKs8a,mBAAqB,EAC1Bt8a,KAAKira,aAAe,KACpBjra,KAAKk8a,QAAU,GACfl8a,KAAKo8a,eAAiB,CACxB,CACA,iBAAA78E,CAAkB/6W,EAAOoF,GACvBoW,KAAK08a,aACP,CACA,gBAAAj1D,CAAiBjjY,EAAOoF,GACtB,MAAMqpW,EAA2BjzV,KAAK++V,IAAInsV,OAAOqgV,yBAC3C+F,EAAS,GACT2jF,EAAe,CAAC,EAChBC,EAAqB,CAAC,EAC5B,IAAIC,GAAkB,EAClBC,GAAkB,EAClBC,GAAkB,EACtBnzb,EAAKovW,OAAOp2W,SAAQo6b,IAClB,IAAIC,EAAaC,EACjB,MAAMnhc,EAAaihc,EAAY12S,MAI/B,IAAI,WACF+zN,EAAU,WACV7C,GACEwlF,GACuF,KAAxD,OAA7BC,EAAc5iF,QAAsB,EAAS4iF,EAAY7hc,QAAQ,iBACrE4gc,KAAoBA,GAAkB,kBAAkB58a,KAAK+P,UAAUG,YACnE0sa,KACFgB,EAAY3iF,WAAaA,OAAazhW,IAGtCyhW,IACF2iF,EAAY3iF,WAAaA,EAAavC,GAAuBuC,EAAYpH,IAES,KAAjD,OAA7BiqF,EAAc1lF,QAAsB,EAAS0lF,EAAY9hc,QAAQ,WACrEo8W,EAAawlF,EAAYxlF,WAlgsBjC,SAA6B/N,GAG3B,MAAMyN,EAASzN,EAAM1lV,MAAM,KAC3B,IAAK,IAAIxqB,EAAI,EAAGA,EAAI29W,EAAO19W,OAAQD,IAAK,CACtC,MAAM4jc,EAAUjmF,EAAO39W,GAAGwqB,MAAM,KAChC,GAAIo5a,EAAQ3jc,OAAS,EAAG,CACtB,IAAIqE,EAASs/b,EAAQl4a,QAAU,IAC/BpnB,GAAUgf,SAASsgb,EAAQl4a,SAASnrB,SAAS,IAC7C+D,IAAW,MAAQgf,SAASsgb,EAAQl4a,SAASnrB,SAAS,KAAKyJ,OAAO,GAClE2zW,EAAO39W,GAAKsE,CACd,CACF,CACA,OAAOq5W,EAAOt4V,KAAK,IACrB,CAo/rB8Cw+a,CAAoB5lF,IAI5D,MAAM,MACJr6W,EAAK,OACLC,EAAM,cACNo8W,GACEwjF,EAIJ,GAHAH,IAAoBA,KAAqB1/b,IAASC,IAClD0/b,IAAoBA,IAAoBtlF,GACxCulF,IAAoBA,IAAoB1iF,GACnB,MAAjBb,GAAyBA,EAAchgX,QAAU6gX,IAAepD,GAA8BoD,EAAY,QAASpH,IAA6BuE,IAAeP,GAA8BO,EAAY,QAASvE,GACpN,OAEF,MAAM,OACJsG,EACA,aAAc8jF,EACd,aAAcC,EACd,aAAcC,EAAO,WACrBC,EACA,cAAeC,GACb1hc,EAEEsgX,EAAW,GADa,GAAGkhF,GAAW,SACAP,EAAY3jF,WAAWmkF,KAAcH,KAAa9jF,KAAUkkF,KAAeH,IACvH,GAAKX,EAAatgF,GAKX,GAAIsgF,EAAatgF,GAAU9Y,MAAQy5F,EAAYjoa,KAAQioa,EAAY12S,MAAM,cAS9Eq2S,EAAatgF,GAAU6O,WAAW,QAASnvX,EAAWq+W,OACtDuiF,EAAatgF,GAAU6O,WAAW,OAAQnvX,EAAWu+W,eAVwC,CAG7F,MAAMojF,EAAed,EAAmBvgF,IAAa,EACrD2gF,EAAY12S,MAAM,cAAgB,IAAI1sJ,MAAM8jc,EAAe,GAAG9+a,KAAK,KACnE,MAAMskO,EAAQ,IAAIonI,GAAM0yE,GACxBL,EAAatgF,GAAYn5H,EACzB81H,EAAO39W,KAAK6nP,EACd,KAb6B,CAC3B,MAAMA,EAAQ,IAAIonI,GAAM0yE,GACxBL,EAAatgF,GAAYn5H,EACzB05M,EAAmBvgF,GAAY,EAC/BrD,EAAO39W,KAAK6nP,EACd,CAWA,IAEFljO,KAAK29a,0BAA0B3kF,EAAQpvW,EAAMizb,EAAiBC,EAAiBC,EACjF,CACA,yBAAAY,CAA0BC,EAAgBh0b,EAAMizb,EAAiBC,EAAiBC,GAChF,IAAIh8E,EAAc,GACdC,EAAiB,GACjBhI,EAAS4kF,EAWb,IARKf,GAAmBC,IAAoBC,IAC1C/jF,EAASA,EAAOh1V,QAAO,EACrBwzV,aACA6T,aACAluX,QACAC,aACI,SAAGo6W,MAAiBr6W,IAASC,SA1toBnBhD,EA0toB4CixX,IAztoB9CtB,GAAiB3uX,QAAQhB,IAAU,GADvD,IAAsBA,CA0toBuD,KAEnD,IAAlB4+W,EAAOx/W,OAkBT,YAhBA2lC,QAAQC,UAAU/Q,MAAK,KACrB,GAAIrO,KAAK++V,IAAK,CACRn1W,EAAKovW,OAAOx/W,QACdwmB,KAAK0N,KAAK,gDAAgDlI,KAAKC,UAAU7b,EAAKovW,OAAO,GAAG1yN,UAE1F,MAAM5iJ,EAAQ,IAAIggB,MAAM,qDACxB1D,KAAK++V,IAAI/zD,QAAQ51F,EAAO5yI,MAAO,CAC7BxkF,KAAMm8V,EAAWinC,YACjBtgB,QAAS1mB,EAAayjG,mCACtBtjJ,OAAO,EACPxlR,IAAKnrB,EAAKmrB,IACVrxB,QACA8pB,OAAQ9pB,EAAMmF,SAElB,KAIJ,GAAIe,EAAKm3W,YAAa,CACpB,MAAM,yBACJ9N,GACEjzV,KAAK++V,IAAInsV,OACbmuV,EAAcn3W,EAAKm3W,YAAY/8V,QAAOqtH,IAAUA,EAAMgpO,YAAcpD,GAA8B5lO,EAAMgpO,WAAY,QAASpH,KAE7H6qF,GAAsB/8E,EACxB,CACIn3W,EAAKy4W,YACPrB,EAAiBp3W,EAAKy4W,UACtBy7E,GAAsB98E,IAGxB,MAAM+8E,EAAiB/kF,EAAOz1W,MAAM,GAEpCy1W,EAAOz5T,MAAK,CAAC5kD,EAAGu3B,KACd,GAAIv3B,EAAE2rJ,MAAM,gBAAkBp0H,EAAEo0H,MAAM,cACpC,OAAQ3rJ,EAAE2rJ,MAAM,eAAiB,KAAOp0H,EAAEo0H,MAAM,eAAiB,IAAM,GAAK,EAG9E,GAAIu2S,GAAmBlic,EAAEyC,SAAW80B,EAAE90B,OACpC,OAAOzC,EAAEyC,OAAS80B,EAAE90B,OAEtB,GAAIzC,EAAE6vX,YAAct4V,EAAEs4V,UACpB,OAAO7vX,EAAE6vX,UAAYt4V,EAAEs4V,UAEzB,GAAI7vX,EAAE0wX,aAAen5V,EAAEm5V,WACrB,OAAOtB,GAAiB3uX,QAAQT,EAAE0wX,YAActB,GAAiB3uX,QAAQ82B,EAAEm5V,YAE7E,GAAI1wX,EAAE68W,aAAetlV,EAAEslV,WAAY,CACjC,MAAMwmF,EAASzmF,GAA0B58W,EAAE68W,YACrCymF,EAAS1mF,GAA0BrlV,EAAEslV,YAC3C,GAAIwmF,IAAWC,EACb,OAAOA,EAASD,CAEpB,CACA,GAAIrjc,EAAE4oW,MAAQrxU,EAAEqxU,KAAO5oW,EAAE+8W,WAAaxlV,EAAEwlV,SAAU,CAChD,MAAMsmF,EAASvmF,GAAkC98W,EAAE+8W,UAC7CumF,EAASxmF,GAAkCvlV,EAAEwlV,UACnD,GAAIsmF,IAAWC,EACb,OAAOA,EAASD,CAEpB,CACA,OAAIrjc,EAAEywX,iBAAmBl5V,EAAEk5V,eAClBzwX,EAAEywX,eAAiBl5V,EAAEk5V,eAEvB,CAAC,IAEV,IAAI8yE,EAAuBH,EAAe,GAC1C,GAAI/9a,KAAKw8a,WACPxjF,EAASh5V,KAAKw8a,SAAStC,mBAAmBlhF,GACtCA,EAAOx/W,SAAWukc,EAAevkc,QACnC,IAAK,IAAID,EAAI,EAAGA,EAAIwkc,EAAevkc,OAAQD,IACzC,GAAIwkc,EAAexkc,GAAGwgX,YAAcf,EAAO,GAAGe,UAAW,CACvDmkF,EAAuBH,EAAexkc,GACtC,KACF,CAINymB,KAAKk8a,QAAUljF,EAGf,IAAK,IAAIz/W,EAAI,EAAGA,EAAIy/W,EAAOx/W,OAAQD,IACjC,GAAIy/W,EAAOz/W,KAAO2kc,EAAsB,CACtC,IAAIC,EACJn+a,KAAKm8a,YAAc5ic,EACnB,MAAM6kc,EAAoBF,EAAqB7kF,QACzC+/E,EAAoBp5a,KAAK++V,IAAIq6E,kBAGnC,GAFAp5a,KAAKQ,IAAI,oBAAoBw4V,EAAOx/W,yCAAyC4kc,UAEyCxlb,KAAjE,OAA/Culb,EAAuBn+a,KAAK++V,IAAI6J,iBAAsB,EAASu1E,EAAqBhjB,wBAAuC,CAC/H,MAAMkjB,EAAqB1ua,KAAKjT,IAAI0hb,EAAmBp+a,KAAK++V,IAAInsV,OAAO24Z,2BACnE8S,EAAqBjF,GAAqBA,IAAsBnhB,GAAiBkD,yBACnFn7Z,KAAK++V,IAAIq6E,kBAAoBiF,EAEjC,CACA,KACF,CAKF,MAAMC,EAAYvB,IAAoBD,EAChCyB,EAAQ,CACZvlF,SACA+H,cACAC,iBACA/H,YAAarvW,EAAKqvW,YAClBC,YAAatvW,EAAKsvW,YAClBgsD,WAAYllZ,KAAKm8a,YACjBvxI,MAAOhhT,EAAKghT,MACZjpO,MAAOo7W,EACPr8N,MAAOo8N,EACP/Z,UAAWub,GAAav9E,EAAY/nU,MAAKz+C,KAAOA,EAAEw6B,OAEpD/U,KAAK++V,IAAI/zD,QAAQ51F,EAAOywM,gBAAiB04B,IAGrCv+a,KAAK++V,IAAInsV,OAAOu1W,eAAiBnoX,KAAK++V,IAAIy/E,iBAC5Cx+a,KAAK++V,IAAIG,UAAUl/V,KAAK++V,IAAInsV,OAAOusV,cAEvC,CACA,UAAInG,GACF,OAA4B,IAAxBh5V,KAAKk8a,QAAQ1ic,OACR,KAEFwmB,KAAKk8a,OACd,CACA,SAAIh5M,GACF,OAAOljO,KAAKs8a,iBACd,CACA,SAAIp5M,CAAMu7M,GACR,MAAMzlF,EAASh5V,KAAKk8a,QACpB,GAAsB,IAAlBljF,EAAOx/W,OACT,OAGF,GAAIilc,EAAW,GAAKA,GAAYzlF,EAAOx/W,OAAQ,CAE7C,MAAMkK,EAAQ,IAAIggB,MAAM,qBAClB62R,EAAQkkJ,EAAW,EASzB,GARAz+a,KAAK++V,IAAI/zD,QAAQ51F,EAAO5yI,MAAO,CAC7BxkF,KAAMm8V,EAAW+xC,YACjBprB,QAAS1mB,EAAawuF,mBACtB1lM,MAAOu7M,EACPlkJ,QACA72S,QACA8pB,OAAQ9pB,EAAMmF,UAEZ0xS,EACF,OAEFkkJ,EAAW9ua,KAAKjT,IAAI+hb,EAAUzlF,EAAOx/W,OAAS,EAChD,CACA,MAAMklc,EAAiB1+a,KAAKs8a,kBACtBqC,EAAY3+a,KAAKira,aACjB2T,EAAgBD,EAAYA,EAAUr4S,MAAM,mBAAgB1tI,EAC5DsqO,EAAQ81H,EAAOylF,GACf1kF,EAAY72H,EAAM58F,MAAM,cAG9B,GAFAtmI,KAAKs8a,kBAAoBmC,EACzBz+a,KAAKira,aAAe/nM,EAChBw7M,IAAmBD,GAAYv7M,EAAM49H,SAAW69E,GAAaC,IAAkB7kF,EACjF,OAEF/5V,KAAKQ,IAAI,sBAAsBi+a,MAAav7M,EAAM9lP,OAAS8lP,EAAM9lP,OAAS,KAAO,KAAK8lP,EAAMmoI,WAAanoI,EAAMmoI,WAAa,IAAM,KAAKnoI,EAAMw0H,SAAWx0H,EAAMw0H,SAAW,IAAM,MAAMx0H,EAAMm2H,WAAWU,EAAY,iBAAmBA,EAAY,iBAAiB2kF,IAAiBE,EAAgB,iBAAmBA,EAAgB,MACtU,MAAMC,EAAqB,CACzB37M,MAAOu7M,EACPn4S,MAAO48F,EAAM58F,MACbw6N,QAAS59H,EAAM49H,QACfzH,QAASn2H,EAAMm2H,QACf+R,eAAgBloI,EAAMkoI,eACtBD,WAAYjoI,EAAMioI,WAClBR,YAAaznI,EAAMynI,YACnBxtX,MAAO+lP,EAAM/lP,MACbC,OAAQ8lP,EAAM9lP,OACds6W,SAAUx0H,EAAMw0H,SAChB2C,WAAYn3H,EAAMm3H,WAClB7C,WAAYt0H,EAAMs0H,WAClBiU,YAAavoI,EAAMuoI,YACnBC,eAAgBxoI,EAAMwoI,eACtB5nJ,OAAQof,EAAMpf,OACd4mJ,UAAWxnI,EAAMwnI,UACjBD,cAAevnI,EAAMunI,cACrB7lX,KAAMs+O,EAAMt+O,KACZiH,GAAIq3O,EAAMr3O,GACV03V,IAAKrgH,EAAMqgH,IACXxuU,IAAKmuN,EAAMnuN,IACXqpU,MAAO,EACPutB,cAAezoI,EAAMyoI,cACrBE,aAAc3oI,EAAM2oI,cAEtB7rW,KAAK++V,IAAI/zD,QAAQ51F,EAAOmmN,gBAAiBsjB,GAEzC,MAAMh+E,EAAe39H,EAAM49H,QAC3B,IAAKD,GAAgBA,EAAazgB,KAAM,CAEtC,MAAMmxB,EAAmBvxW,KAAKmxW,aAAajuI,EAAMqgH,IAAkB,MAAbo7F,OAAoB,EAASA,EAAU79E,QAASD,GACtG7gW,KAAKkxW,aAAaK,EACpB,CACF,CACA,eAAIutE,GACF,OAAO9+a,KAAKu8a,gBACd,CACA,eAAIuC,CAAYL,GACdz+a,KAAKu8a,iBAAmBkC,OACC7lb,IAArBoH,KAAKq8a,cACPr8a,KAAKq8a,YAAcoC,IAEH,IAAdA,IACFz+a,KAAKkjO,MAAQu7M,EAEjB,CACA,cAAIv5B,GACF,OAAOllZ,KAAKm8a,WACd,CACA,cAAIj3B,CAAWu5B,GACbz+a,KAAKm8a,YAAcsC,CACrB,CACA,cAAI9lB,GAEF,QAAyB//Z,IAArBoH,KAAKq8a,YAA2B,CAClC,MAAM0C,EAAmB/+a,KAAK++V,IAAInsV,OAAO+lZ,WACzC,YAAyB//Z,IAArBmmb,EACKA,EAEF/+a,KAAK++V,IAAI69D,cAClB,CACA,OAAO58Z,KAAKq8a,WACd,CACA,cAAI1jB,CAAW8lB,GACbz+a,KAAKq8a,YAAcoC,CACrB,CACA,OAAAxgb,CAAQzZ,EAAOoF,IACTA,EAAK2wS,OAAU3wS,EAAKkV,SAGpBlV,EAAKkV,QAAQ9gB,OAAS0gX,IAA6B90W,EAAKkV,QAAQokO,QAAUljO,KAAKkjO,OACjFljO,KAAK4yW,WAAWhpX,EAEpB,CAGA,cAAAgwX,CAAep1X,GAAO,KACpB66V,IAEA,QAAazmV,IAATymV,GAAsBA,EAAKrhW,OAAS2gX,GAAwB,CAC9D,MAAMnrW,EAAK6rV,EAAKvC,kBAChB,IAAK/iW,OAAOiC,KAAKwX,GAAIwlC,MAAKh7C,KAAUwV,EAAGxV,KACrC,OAEF,MAAMklP,EAAQljO,KAAKk8a,QAAQ78F,EAAKn8G,OACnB,MAATA,GAAiBA,EAAMwnI,YACzB1qW,KAAKQ,IAAI,kCAAkC0iO,EAAMwnI,8BACjDxnI,EAAMwnI,UAAY,EAEtB,CACF,CACA,aAAA+wD,CAAcj3a,EAAOoF,GACnB,IAAIo1b,EACJ,MAAM,MACJ97M,EAAK,QACL49H,GACEl3W,EACE09Z,EAAWtnZ,KAAKk8a,QAAQh5M,GAE5B,IAAI+7M,EADN,IAAK33B,EAMH,OAJAtnZ,KAAK0N,KAAK,uBAAuBw1N,UACwB,OAApD+7M,EAAwBr1b,EAAKy2W,qBAA+B4+E,EAAsB70E,OACrFtJ,EAAQnf,mBAAoB,IAM5Bz+G,IAAUljO,KAAKs8a,mBAEc,IAA3Bh1B,EAAS78C,gBACX68C,EAAS58C,UAAY,GAEvB1qW,KAAK2xW,eAAezuI,EAAOt5O,EAAM09Z,EAASxmD,UACqB,OAArDk+E,EAAyBp1b,EAAKy2W,qBAA+B2+E,EAAuB50E,OAE9FtJ,EAAQnf,mBAAoB,EAEhC,CACA,YAAAuvB,CAAaK,GACXnrV,MAAM8qV,eACN,MAAMorE,EAAoBt8a,KAAKs8a,kBACzBrR,EAAejra,KAAKira,aAC1B,GAAIA,GAAgBjra,KAAKwxW,mBAAmBy5D,GAAe,CACzD,IAAIl2Z,EAAMk2Z,EAAa1nF,IACvB,GAAIguB,EACF,IACEx8V,EAAMw8V,EAAiBlH,cAAct1V,EACvC,CAAE,MAAOrxB,GACPsc,KAAK0N,KAAK,6DAA6DhqB,IACzE,CAEF,MAAMq2W,EAAYkxE,EAAa3kS,MAAM,cACrCtmI,KAAKQ,IAAI,uBAAuB87a,SAAmF1jb,KAA1C,MAApB24W,OAA2B,EAASA,EAAiBpH,KAAqB,UAAYoH,EAAiBpH,IAAM,SAAWoH,EAAiB5U,KAAO,UAAU5C,EAAY,YAAcA,EAAY,MAAMhlV,KAI3P/U,KAAKixW,aACLjxW,KAAK++V,IAAI/zD,QAAQ51F,EAAOoqJ,cAAe,CACrCzqV,MACAmuN,MAAOo5M,EACPviF,UAAWkxE,EAAa3kS,MAAM,cAC9Bz6I,GAAI,EAEJw0W,mBAAoBkR,GAAoB,MAE5C,CACF,CACA,iBAAIkpD,GACF,OAA+B,IAA3Bz6Z,KAAKu8a,iBACAv8a,KAAKu8a,iBAELv8a,KAAK++V,IAAI87D,aAEpB,CACA,iBAAIJ,CAAclT,GAChBvnZ,KAAKkjO,MAAQqkL,GACkB,IAA3BvnZ,KAAKu8a,mBACPv8a,KAAK++V,IAAI87D,cAAgBtT,EAE7B,CACA,WAAAoZ,CAAYn9D,GACV,IAAI07E,EACJ,MAAMlmF,EAASh5V,KAAKk8a,QAAQl4a,QAAO,CAACk/N,EAAOxhP,IACrCA,IAAU8hX,IAGVxjW,KAAKw8a,UACPx8a,KAAKw8a,SAAS7b,YAAYz9L,GAExBA,IAAUljO,KAAKira,eACjBjra,KAAKira,aAAe,KACpBjra,KAAKs8a,mBAAqB,EACtBp5M,EAAM49H,SACR59H,EAAM49H,QAAQ9gB,UAAUp9V,SAAQma,GAAKA,EAAEmmO,OAAS,MAG7C,KAETorI,GAA6BtV,GAC7Bh5V,KAAKk8a,QAAUljF,EACXh5V,KAAKs8a,mBAAqB,GAAiD,OAA3C4C,EAAqBl/a,KAAKira,eAAyBiU,EAAmBp+E,UACxG9gW,KAAKs8a,kBAAoBt8a,KAAKira,aAAanqE,QAAQ9gB,UAAU,GAAG98G,OAElEljO,KAAK++V,IAAI/zD,QAAQ51F,EAAO2wM,eAAgB,CACtC/sD,UAEJ,CACA,eAAAgtD,CAAgBxha,GAAO,OACrBw0W,IAEAh5V,KAAKk8a,QAAUljF,CACjB,CACA,mBAAAmmF,GACE,MAAM,iBACJl6B,EAAgB,aAChB4X,EAAY,aACZmN,GACEhqa,KAAK++V,IACL/+V,KAAKo8a,gBAAkBvf,IACzB78Z,KAAKo8a,cAAgBvf,EACrB78Z,KAAK++V,IAAI/zD,QAAQ51F,EAAOsmN,uBAAwB,CAC9CzW,mBACAjsD,OAAQh5V,KAAKg5V,OACb6jE,eACA/C,aAAc95Z,KAAK++V,IAAI+6D,aACvBkQ,iBAGN,EAEF,SAAS8T,GAAsB9nQ,GAC7B,MAAMr6C,EAAS,CAAC,EAChBq6C,EAAOpzL,SAAQyuI,IACb,MAAMz/C,EAAUy/C,EAAMz/C,SAAW,GACjCy/C,EAAMxlI,GAAK8vI,EAAO/pD,GAAW+pD,EAAO/pD,IAAY,EAChD+pD,EAAO/pD,IAAU,GAErB,CAEA,MAAMwtW,GACJ,WAAAv9Z,CAAYjP,GACV5S,KAAK4S,YAAS,EACd5S,KAAKq/a,gBAAkB,CAAC,EACxBr/a,KAAK23a,cAAgB,KACrB33a,KAAK4S,OAASA,CAChB,CACA,KAAAooB,CAAMh9C,GACJ,IAAK,MAAMulW,KAAOvjV,KAAKq/a,gBAAiB,CACtC,MAAMtgM,EAAS/+O,KAAKq/a,gBAAgB97F,GAAKxkG,OACzC,GAAIA,EAAQ,CACV,IAAIugM,EACJ,GAAIthc,GAAQA,KAAgD,OAArCshc,EAAkBvgM,EAAOjgP,cAAmB,EAASwgb,EAAgBjgG,KAAKrhW,MAC/F,OAEF+gQ,EAAO/jN,OACT,CACF,CACF,CACA,MAAAqtV,GACE,IAAK,MAAM9kC,KAAOvjV,KAAKq/a,gBAAiB,CACtC,MAAMjzB,EAAUpsZ,KAAKq/a,gBAAgB97F,IAEjC6oE,EAAQhB,wBAA0BgB,EAAQ/tE,YAAY2S,4BACjDhxV,KAAKq/a,gBAAgB97F,EAEhC,CACF,CACA,OAAAv4M,GACEhrI,KAAKqoX,SACL,IAAK,MAAM9kC,KAAOvjV,KAAKq/a,gBAAiB,CACtC,MAAMtgM,EAAS/+O,KAAKq/a,gBAAgB97F,GAAKxkG,OACrCA,GACFA,EAAO/zG,SAEX,CACAhrI,KAAKq/a,gBAAkB,CAAC,CAC1B,CACA,kBAAAE,CAAmBlgG,EAAMyhB,EAAU1mB,EAAa+tF,eAAgBzkb,EAAOo+W,EAAgBtjV,GACrF,OAAO,IAAIghW,GAAU,CACnBxhY,KAAMm8V,EAAW0oB,cACjB/B,UACAvmE,OAAO,EACP8kD,OACA7gU,WACA96B,QACAo+W,kBAEJ,CACA,SAAAmpB,CAAUu0D,EAAax9F,GACrB,GAAIhiV,KAAK23a,eAAiB33a,KAAK4S,OAAOy9Y,WAAY,CAEhD,MAAM,GACJ9yE,EAAE,GACF36O,GACE48U,EACJ,IAAK,IAAIjmc,EAAI,EAAGA,EAAIyoW,EAAmBxoW,OAAQD,IAAK,CAClD,MAAM8lW,EAAO2C,EAAmBzoW,GAChC,GAAIqpH,GAAMy8O,EAAKz8O,KAAc,gBAAP26O,GAAoC,gBAAZ8B,EAAK9B,IAAwBA,EAAK8B,EAAK9B,IAAK,CACxFv9U,KAAK23a,cAAc7rB,sBAAsBzsE,GAAMhxU,MAAK69Y,IAClD7sE,EAAKT,aAAastE,EAAgB,IAEpC,KACF,CACF,CACF,CACF,CACA,IAAA3sZ,CAAK8/U,GACH,OAAKA,EAAKhB,aAAegB,EAAKX,WAAa1+U,KAAK23a,cAEvC33a,KAAK23a,cAAc7rB,sBAAsBzsE,GAAMhxU,MAAK69Y,GAClDlsZ,KAAK41Z,aAAav2E,EAAM6sE,KAG5BlsZ,KAAK41Z,aAAav2E,EAC3B,CACA,YAAAu2E,CAAav2E,EAAM6sE,GACjB,IAAIuzB,EAAUC,EACVxzB,GACF7sE,EAAKT,aAAastE,GAEpB,MAAM7tE,EAAcgB,EAAKhB,YACzB,IAAKA,EAAa,CAChB,MAAM36V,EAAQ,IAAIggB,MAAMwoZ,EAAkB,gEAAgEA,IAAoB,uDAC9H,OAAO/sY,QAAQE,OAAOrf,KAAKu/a,mBAAmBlgG,EAAMjF,EAAa+tF,eAAgBzkb,GACnF,CACA,MAAM6/V,EAAMlF,EAAYkF,IACxB,IAAKA,EACH,OAAOpkU,QAAQE,OAAOrf,KAAKu/a,mBAAmBlgG,EAAMjF,EAAa+tF,eAAgB,IAAIzka,MAAM,qBAAqB6/U,QAElH,IAAI6oE,EAAUpsZ,KAAKq/a,gBAAgB97F,GACnC,GAA4B,OAAvBk8F,EAAWrzB,IAAoBqzB,EAASphG,YAAYnkW,IAEvD,OADAmkW,EAAYnkW,IAAMkya,EAAQ/tE,YAAYnkW,IAC/BilC,QAAQC,QAAQ,CACrBigU,OACA+sE,YAKF,IAAIuzB,EADN,GAA6B,OAAxBD,EAAYtzB,IAAoBszB,EAAUE,eAE7C,OAAoE,OAA3DD,EAAwBvzB,EAAQhB,6BAAkC,EAASu0B,EAAsBt0B,WACxG,UAAKzyZ,EACL,IAAK,iBACL,IAAK,SACL,IAAK,mBACH,OAAOwzZ,EAAQwzB,eAAevxa,MAAK68W,IAEjC7sC,EAAYnkW,IAAMgxY,EAAckhC,QAAQ/tE,YAAYnkW,IAC7C,CACLmlW,OACA+sE,cAeV,OANAA,EAAUpsZ,KAAKq/a,gBAAgB97F,GAAO,CACpClF,cACAuhG,eAAgB,KAChB7gM,OAAQ,KACRqsK,uBAAwB,MAElB/sE,EAAYn/U,QAClB,IAAK,cACL,IAAK,aACL,IAAK,kBACL,IAAK,iBACH,MAA8B,aAA1Bm/U,EAAYQ,UAEP7+U,KAAK6/a,YAAYzzB,EAAS/sE,GAE5Br/U,KAAK8/a,WAAW1zB,EAAS/sE,GAClC,IAAK,UACH,OAAOr/U,KAAK6/a,YAAYzzB,EAAS/sE,GACnC,QACE,OAAOlgU,QAAQE,OAAOrf,KAAKu/a,mBAAmBlgG,EAAMjF,EAAa+tF,eAAgB,IAAIzka,MAAM,0CAA0C26U,EAAYn/U,aAEvJ,CACA,UAAA4gb,CAAW1zB,EAAS/sE,GAClB,MAAM6rC,EAAgB,CACpB7rC,OACA+sE,WAEF,GAAIpsZ,KAAK23a,eAAiB33a,KAAK4S,OAAOy9Y,WAAY,CAChD,MAAM/D,EAA2BtsZ,KAAK23a,cAAcxrB,QAAQjhC,GAC5D,GAAIohC,EACF,OAAQF,EAAQwzB,eAAiBtzB,EAAyBj+Y,MAAKk9Y,IAC7Da,EAAQhB,uBAAyBG,EAC1BrgC,MACL9iW,OAAM1kC,IAGR,MADA0oa,EAAQwzB,eAAiB,KACnBl8b,CAAK,GAGjB,CACA,OAAOy7B,QAAQC,QAAQ8rW,EACzB,CACA,WAAA20D,CAAYzzB,EAAS/sE,GACnB,MAAMzsU,EAAS5S,KAAK4S,OAEd6qU,EAAY,IAAIyiB,EADPttV,EAAOmsO,QACOnsO,GAE7B,OADAysU,EAAK5B,UAAY2uE,EAAQrtK,OAAS0+F,EAC3B2uE,EAAQwzB,eAAiB,IAAIzga,SAAQ,CAACC,EAASC,KACpD,MAAMmhV,EAAgB,CACpB4rD,UACA/sE,OACAv6H,aAAc,cACd/vM,IAAKq3Y,EAAQ/tE,YAAYkF,KAMrBgd,EAAa3tV,EAAOq9Y,cAAc1qX,QAClC+7T,EAAe,CACnBf,aACA/jU,QAAS+jU,EAAWa,cACpBG,SAAU,EACVtkM,WAAY,EACZykM,cAAe,GAEXE,EAAkB,CACtBC,UAAW,CAACrjV,EAAUosR,EAAO9rS,EAASgjW,KACpC,MAAM,KACJziB,EAAI,QACJ+sE,EACAr3Y,IAAKwuU,GACHzkV,EACJ,IAAKugV,EAAKhB,aAAe+tE,IAAYpsZ,KAAKq/a,gBAAgB97F,GACxD,OAAOlkU,EAAOrf,KAAKu/a,mBAAmBlgG,EAAMjF,EAAa+tF,eAAgB,IAAIzka,MAAM,gDAAiDo+V,IAEtIsqD,EAAQ/tE,YAAYnkW,IAAMmlW,EAAKhB,YAAYnkW,IAAM,IAAI8yG,WAAWxuE,EAAS50B,MAGzEy1V,EAAK5B,UAAY,KACjB2uE,EAAQrtK,OAAS,KACjB3/N,EAAQ,CACNigU,OACA+sE,WACA,EAEJnuZ,QAAS,CAACugB,EAAU1f,EAASgjW,EAAgBl3D,KAC3C5qS,KAAKigX,YAAYnhX,GACjBugB,EAAOrf,KAAKu/a,mBAAmBlgG,EAAMjF,EAAa+tF,eAAgB,IAAIzka,MAAM,cAAc8a,EAASpS,oBAAoBoS,EAASv6B,QAAS69W,EAAgBjyL,EAAe,CACtK96J,IAAKyrV,EAAczrV,IACnBnrB,UAAMgP,GACL4lB,IAAW,EAEhB2jV,UAAW,CAACv3D,EAAO9rS,EAASgjW,KAC1B9hW,KAAKigX,YAAYnhX,GACjBugB,EAAOrf,KAAKu/a,mBAAmBlgG,EAAMjF,EAAaq0B,iBAAkB,IAAI/qW,MAAM,yBAA0Bo+V,GAAgB,EAE1HrqF,QAAS,CAACmzB,EAAO9rS,EAASgjW,KACxB9hW,KAAKigX,YAAYnhX,GACjBugB,EAAOrf,KAAKu/a,mBAAmBlgG,EAAMjF,EAAa+lC,iBAAkB,IAAIz8W,MAAM,uBAAwBo+V,GAAgB,GAG1HrkB,EAAUl+U,KAAKihW,EAAec,EAAcM,EAAgB,GAEhE,CACA,WAAAqe,CAAYnhX,GACV,MAAM,KACJugV,EAAI,QACJ+sE,EACAr3Y,IAAKwuU,GACHzkV,EACEigP,EAASqtK,EAAQrtK,OACnBsgG,EAAK5B,YAAc1+F,IACrBsgG,EAAK5B,UAAY,KACjB2uE,EAAQrtK,OAAS,aAEZ/+O,KAAKq/a,gBAAgB97F,GACxBxkG,GACFA,EAAO/zG,SAEX,EAGF,SAAS+0S,KACP,OAAO/wa,KAAKgxa,cAAgBhxa,KAAKixa,kBACnC,CACA,SAASC,KAEP,IADoBltF,KAElB,OAAO,EAKT,MAAMyuE,EAAese,KACrB,OAAQte,GAAgBA,EAAaznb,WAA4D,oBAAxCynb,EAAaznb,UAAUwtb,cAAwE,oBAAlC/F,EAAaznb,UAAU4lI,MAC/I,CAkBA,MAAMugU,GACJ,WAAAt+Z,CAAYjP,EAAQmiN,EAAO2xJ,EAAiB3nB,GAC1C/+V,KAAK4S,YAAS,EACd5S,KAAK+0N,MAAQ,KACb/0N,KAAK0mX,qBAAkB,EACvB1mX,KAAK++V,SAAM,EACX/+V,KAAKogb,WAAa,EAClBpgb,KAAKqgb,eAAgB,EACrBrgb,KAAKsgb,QAAU,KACftgb,KAAKugb,OAAQ,EACbvgb,KAAK01a,SAAU,EACf11a,KAAK4S,OAASA,EACd5S,KAAK+0N,MAAQA,EACb/0N,KAAK0mX,gBAAkBA,EACvB1mX,KAAK++V,IAAMA,CACb,CACA,OAAA/zN,GACEhrI,KAAK+0N,MAAQ,KAEb/0N,KAAK++V,IAAM/+V,KAAK0mX,gBAAkB,IACpC,CAQA,IAAAj+F,CAAKq+F,EAAiB05D,GACpB,MAAM,OACJ5ta,EAAM,MACNmiN,EAAK,QACLurN,GACEtgb,KACJ,GAAc,OAAV+0N,EACF,OAEF,MAAM,YACJjkJ,EAAW,QACX4kW,GACE3gN,EACE0rN,EAASzgb,KAAK01a,UAAYA,EAC1BgL,GAAa1gb,KAAK01a,SAAWA,EAInC,GAHA11a,KAAK01a,QAAUA,EAGX5kW,IAAgBg2S,EAAiB,CAKnC,GAJA9mX,KAAKugb,OAAQ,EACR7K,IACH11a,KAAKogb,WAAa,GAEJ,OAAZE,EAAkB,CAEpB,GAAItgb,KAAKqgb,cAAe,CACtB,MAAMM,EAAmB3xa,KAAK+7G,YAAY9hI,MAAQq3b,EAClDrhb,EAAOyO,KAAK,+BAA+BojE,YAAsBnhE,KAAKy2B,MAAMu6Y,QAC5E3gb,KAAKqgb,eAAgB,CACvB,CACArgb,KAAKsgb,QAAU,IACjB,CACA,MACF,CAGA,GAAII,GAAaD,EAEf,YADAzgb,KAAKsgb,QAAU,MAKjB,GAAIvrN,EAAMglM,SAAW2b,GAAW3gN,EAAMqzJ,OAAgC,IAAvBrzJ,EAAM80I,eAAuB8S,GAAaE,YAAY9nJ,GAAOv7O,OAE1G,YADAwmB,KAAKogb,WAAa,GAGpB,MAAMjuE,EAAawK,GAAaxK,WAAWp9I,EAAOjkJ,EAAa,GACzDmsS,EAAY9K,EAAW8K,WAAa,EAC1C,GAAIy4D,EAAS,CAEX,MAAMkL,EAAkBzuE,EAAWt2W,IAjFd,EAmFfglb,GAAe5jE,GAAaujE,GAAcA,EAAWtla,OAAS41D,GAAemsS,EAAYnsS,EAnF1E,IAmF+G9wE,KAAK0mX,gBAAgBjL,mBAAmB3qS,GAC5K,GAAI8vW,GAAmBC,EACrB,OAGF7gb,KAAKugb,OAAQ,CACf,CAIA,IAAKvgb,KAAKugb,OAA0B,OAAjBvgb,KAAKsgb,QAAkB,CACxC,IAAIlyE,EAGJ,KADmB+D,EAAWt2W,IAAM,KAChBohX,EAClB,OAGF,MAAM6jE,EAAYnxa,KAAKhT,IAAIsgX,EAAW9K,EAAWj3V,OAAS,GAAK41D,EAKzDoyJ,EAAQljO,KAAK++V,IAAI/F,OAASh5V,KAAK++V,IAAI/F,OAAOh5V,KAAK++V,IAAIksE,cAAgB,KAEnE8V,GADkB,MAAT79M,GAA6D,OAAnCkrI,EAAiBlrI,EAAM49H,cAAjC,EAA6DsN,EAAehuB,MAC3C,EAA/Bl9G,EAAM49H,QAAQjgB,eA5G1B,EA6GfmgG,EAAehhb,KAAK0mX,gBAAgBjL,mBAAmB3qS,GAC7D,GAAIgwW,EAAY,IAAMA,GAAaC,GAAmBC,GAIpD,YAHKjsN,EAAMglM,QACT/5Z,KAAKihb,mBAAmBD,GAI9B,CAGA,MAAME,EAAOlya,KAAK+7G,YAAY9hI,MAC9B,GAAgB,OAAZq3b,EAEF,YADAtgb,KAAKsgb,QAAUY,GAGjB,MAAMC,EAAkBD,EAAOZ,EAC/B,IAAK5K,GAAWyL,GA9Hc,MAgI5Bnhb,KAAKohb,aAAajvE,IACbnyW,KAAK+0N,OACR,OAGJ,MAAMssN,EAAoB1kE,GAAaxK,WAAWp9I,EAAOjkJ,EAAal+D,EAAO01W,eAC7EtoX,KAAKshb,mBAAmBD,EAAmBF,EAC7C,CAQA,kBAAAG,CAAmBnvE,EAAYovE,GAC7B,MAAM,OACJ3ua,EAAM,gBACN8zW,EAAe,MACf3xJ,GACE/0N,KACJ,GAAc,OAAV+0N,EACF,OAEF,MAAMjkJ,EAAcikJ,EAAMjkJ,YACpBkuC,EAAU0nQ,EAAgBjL,mBAAmB3qS,GACnD,GAAIkuC,EAAS,CAMX,GAHmBh/G,KAAKihb,mBAAmBjiU,KAGxBh/G,KAAK+0N,MACtB,MAEJ,EAMKo9I,EAAWt2W,IAAM+W,EAAO01W,eAAiBnW,EAAW8K,WAAa9K,EAAW8K,UAAYnsS,EAAcl+D,EAAO01W,gBAAkBi5D,EAAsD,IAAlC3ua,EAAO0lZ,2BAC7Jr5Z,EAAOyO,KAAK,6CAIZ1N,KAAKsgb,QAAU,KACftgb,KAAKwhb,kBAET,CAOA,YAAAJ,CAAajvE,GACX,MAAM,IACJpT,EAAG,MACHhqI,EAAK,cACLsrN,GACErgb,KACJ,IAAKqgb,GAAiBtrN,EAAO,CAE3B/0N,KAAKqgb,eAAgB,EACrB,MAAM38b,EAAQ,IAAIggB,MAAM,yBAAyBqxN,EAAMjkJ,kCAAkCtrE,KAAKC,UAAU0sW,OACxGlzW,EAAOyO,KAAKhqB,EAAMmF,SAClBk2W,EAAI/zD,QAAQ51F,EAAO5yI,MAAO,CACxBxkF,KAAMm8V,EAAWinC,YACjBtgB,QAAS1mB,EAAaovB,qBACtBjvE,OAAO,EACP72S,QACAquG,OAAQogR,EAAWt2W,KAEvB,CACF,CAOA,kBAAAolb,CAAmBjiU,GACjB,MAAM,OACJpsG,EAAM,IACNmsV,EAAG,MACHhqI,GACE/0N,KACJ,GAAc,OAAV+0N,EACF,OAAO,EAIT,MAAMjkJ,EAAcikJ,EAAMjkJ,YACpBqhS,EAAawK,GAAaxK,WAAWp9I,EAAOjkJ,EAAa,GACzD78B,EAAY68B,EAAcqhS,EAAWj3V,MAAQi3V,EAAWj3V,MAAQi3V,EAAW8K,UACjF,GAAIhpU,EAAW,CACb,MAAMwtY,EAAgBtvE,EAAWt2W,KAAO+W,EAAO01W,cACzCo5D,EAAUvvE,EAAWt2W,IAAM,GAAKs2W,EAAWt2W,IAAM,GAAKk5N,EAAM7+M,WAAa,EACzEyra,EAAY1tY,EAAY68B,EAC9B,GAAI6wW,EAAY,IAAMF,GAAiBC,GAAU,CAE/C,GAAIC,EAAY/ua,EAAO01W,cAAe,CACpC,MAAM,gBACJ5B,GACE1mX,KACJ,IAAI4hb,GAAW,EACf,GAAoB,IAAhB9wW,EAAmB,CACrB,MAAM+wW,EAAYn7D,EAAgB3M,gBAAgB,EAAGpb,IACjDkjF,GAAa5tY,EAAY4tY,EAAU1ma,MACrCyma,GAAW,EAEf,CACA,IAAKA,EAAU,CACb,MAAME,EAAmB9iU,GAAW0nQ,EAAgB3M,gBAAgBjpS,EAAa6tR,IACjF,GAAImjF,EAAkB,CACpB,IAAIC,GAAa,EACbr8Z,EAAMo8Z,EAAiB3ma,IAC3B,KAAOuK,EAAMuuB,GAAW,CACtB,MAAM+tY,EAAct7D,EAAgBjL,mBAAmB/1V,GACvD,IAAIs8Z,EAEG,CACLD,GAAa,EACb,KACF,CAJEr8Z,GAAOs8Z,EAAYt3b,QAKvB,CACA,GAAIq3b,EACF,OAAO,CAEX,CACF,CACF,CACA,MAAME,EAAatya,KAAKhT,IAAIs3C,EAlQJ,IAkQyC68B,EAnQnC,IAwQ9B,GAJA7xE,EAAOyO,KAAK,6CAA6CojE,QAAkBmxW,KAC3Ejib,KAAKugb,OAAQ,EACbvgb,KAAKsgb,QAAU,KACfvrN,EAAMjkJ,YAAcmxW,EAChBjjU,IAAYA,EAAQ8K,IAAK,CAC3B,MAAMpmI,EAAQ,IAAIggB,MAAM,mDAAmDotE,QAAkBmxW,KAC7FljF,EAAI/zD,QAAQ51F,EAAO5yI,MAAO,CACxBxkF,KAAMm8V,EAAWinC,YACjBtgB,QAAS1mB,EAAayuF,sBACtBtuI,OAAO,EACP72S,QACA8pB,OAAQ9pB,EAAMmF,QACdw2V,KAAMrgO,GAEV,CACA,OAAOijU,CACT,CACF,CACA,OAAO,CACT,CAMA,eAAAT,GACE,MAAM,OACJ5ua,EAAM,IACNmsV,EAAG,MACHhqI,EAAK,WACLqrN,GACEpgb,KACJ,GAAc,OAAV+0N,EACF,OAEF,MAAMjkJ,EAAcikJ,EAAMjkJ,YAE1B,GADA9wE,KAAKogb,aACDA,EAAaxta,EAAO4lZ,cAAe,CACrC,MAAMypB,EAAanxW,GAAesvW,EAAa,GAAKxta,EAAO2lZ,YAErD70a,EAAQ,IAAIggB,MAAM,8BAA8BotE,QAAkBmxW,KACxEhjb,EAAOyO,KAAKhqB,EAAMmF,SAClBksO,EAAMjkJ,YAAcmxW,EACpBljF,EAAI/zD,QAAQ51F,EAAO5yI,MAAO,CACxBxkF,KAAMm8V,EAAWinC,YACjBtgB,QAAS1mB,EAAa0uF,sBACtBplb,QACA62S,OAAO,GAEX,KAAO,CACL,MAAM72S,EAAQ,IAAIggB,MAAM,yDAAyDotE,WAAqBl+D,EAAO4lZ,wBAC7Gv5Z,EAAOvb,MAAMA,EAAMmF,SACnBk2W,EAAI/zD,QAAQ51F,EAAO5yI,MAAO,CACxBxkF,KAAMm8V,EAAWinC,YACjBtgB,QAAS1mB,EAAaovB,qBACtB9lX,QACA62S,OAAO,GAEX,CACF,EAKF,MAAM2nJ,WAAyBz7D,GAC7B,WAAA5kW,CAAYk9U,EAAK2nB,EAAiBjpC,GAChCr3T,MAAM24U,EAAK2nB,EAAiBjpC,EAAW,sBAAuBkhB,IAC9D3+V,KAAKmib,gBAAiB,EACtBnib,KAAKoib,cAAgB,KACrBpib,KAAKkjO,OAAS,EACdljO,KAAKqib,iBAAkB,EACvBrib,KAAK+ia,UAAW,EAChB/ia,KAAKs+a,WAAY,EACjBt+a,KAAKsib,YAAc,KACnBtib,KAAKuib,WAAa,KAClBvib,KAAKwib,UAAY,KACjBxib,KAAKyib,aAAe,EACpBzib,KAAK0ib,gBAAiB,EACtB1ib,KAAKwpX,kBAAoB,KACzBxpX,KAAK2ib,kBAAmB,EACxB3ib,KAAKw0a,YAAc,KACnBx0a,KAAKgmW,oBACP,CACA,kBAAAA,GACE,MAAM,IACJjH,GACE/+V,KACJ++V,EAAItsU,GAAG2iL,EAAO8wJ,eAAgBlmW,KAAKmmW,gBAAiBnmW,MACpD++V,EAAItsU,GAAG2iL,EAAOgxJ,gBAAiBpmW,KAAKqmW,iBAAkBrmW,MACtD++V,EAAItsU,GAAG2iL,EAAOkqJ,iBAAkBt/V,KAAKu/V,kBAAmBv/V,MACxD++V,EAAItsU,GAAG2iL,EAAOywM,gBAAiB7lZ,KAAK8lZ,iBAAkB9lZ,MACtD++V,EAAItsU,GAAG2iL,EAAOoqJ,cAAex/V,KAAKy/V,eAAgBz/V,MAClD++V,EAAItsU,GAAG2iL,EAAOyuJ,aAAc7jW,KAAKy7Z,cAAez7Z,MAChD++V,EAAItsU,GAAG2iL,EAAO6lN,4BAA6Bj7Z,KAAK4ib,2BAA4B5ib,MAC5E++V,EAAItsU,GAAG2iL,EAAO5yI,MAAOxiE,KAAK/B,QAAS+B,MACnC++V,EAAItsU,GAAG2iL,EAAO+/N,sBAAuBn1a,KAAKo1a,sBAAuBp1a,MACjE++V,EAAItsU,GAAG2iL,EAAO6gO,qBAAsBj2a,KAAK6ib,qBAAsB7ib,MAC/D++V,EAAItsU,GAAG2iL,EAAOmxN,eAAgBvma,KAAKs1a,gBAAiBt1a,MACpD++V,EAAItsU,GAAG2iL,EAAO6vN,eAAgBjla,KAAKu1a,gBAAiBv1a,MACpD++V,EAAItsU,GAAG2iL,EAAO2wM,eAAgB/lZ,KAAKgmZ,gBAAiBhmZ,MACpD++V,EAAItsU,GAAG2iL,EAAOukK,cAAe35W,KAAK45W,eAAgB55W,KACpD,CACA,oBAAAimW,GACE,MAAM,IACJlH,GACE/+V,KACJ++V,EAAIzqN,IAAI8gE,EAAO8wJ,eAAgBlmW,KAAKmmW,gBAAiBnmW,MACrD++V,EAAIzqN,IAAI8gE,EAAOgxJ,gBAAiBpmW,KAAKqmW,iBAAkBrmW,MACvD++V,EAAIzqN,IAAI8gE,EAAOkqJ,iBAAkBt/V,KAAKu/V,kBAAmBv/V,MACzD++V,EAAIzqN,IAAI8gE,EAAOywM,gBAAiB7lZ,KAAK8lZ,iBAAkB9lZ,MACvD++V,EAAIzqN,IAAI8gE,EAAOyuJ,aAAc7jW,KAAKy7Z,cAAez7Z,MACjD++V,EAAIzqN,IAAI8gE,EAAO6lN,4BAA6Bj7Z,KAAK4ib,2BAA4B5ib,MAC7E++V,EAAIzqN,IAAI8gE,EAAO5yI,MAAOxiE,KAAK/B,QAAS+B,MACpC++V,EAAIzqN,IAAI8gE,EAAO+/N,sBAAuBn1a,KAAKo1a,sBAAuBp1a,MAClE++V,EAAIzqN,IAAI8gE,EAAO6gO,qBAAsBj2a,KAAK6ib,qBAAsB7ib,MAChE++V,EAAIzqN,IAAI8gE,EAAOmxN,eAAgBvma,KAAKs1a,gBAAiBt1a,MACrD++V,EAAIzqN,IAAI8gE,EAAO6vN,eAAgBjla,KAAKu1a,gBAAiBv1a,MACrD++V,EAAIzqN,IAAI8gE,EAAO2wM,eAAgB/lZ,KAAKgmZ,gBAAiBhmZ,MACrD++V,EAAIzqN,IAAI8gE,EAAOukK,cAAe35W,KAAK45W,eAAgB55W,KACrD,CACA,mBAAA04W,GACE14W,KAAKimW,uBACL7/U,MAAMsyV,qBACR,CACA,SAAAxZ,CAAUC,GACR,GAAIn/V,KAAKg5V,OAAQ,CACf,MAAM,gBACJ8tB,EAAe,IACf/nB,GACE/+V,KAIJ,GAHAA,KAAKo/V,WACLp/V,KAAKirI,YArEW,KAsEhBjrI,KAAKkjO,OAAS,GACTljO,KAAKonX,mBAAoB,CAE5B,IAAIuxC,EAAa55D,EAAI45D,YACD,IAAhBA,IACE55D,EAAInsV,OAAO64Z,eAAiBzra,KAAKg5V,OAAOx/W,OAAS,GAEnDm/a,EAAa,EACb34Z,KAAKi+U,aAAc,GAEnB06E,EAAa55D,EAAI69D,gBAKrB79D,EAAI07D,cAAgB9B,EACpB34Z,KAAKkjO,MAAQ67H,EAAIq/D,UACjBp+Z,KAAKgnX,gBAAiB,CACxB,CAEIF,EAAkB,IAAwB,IAAnB3nB,IACzBn/V,KAAKQ,IAAI,gDAAgDsmX,EAAgBzxW,QAAQ,MACjF8pV,EAAgB2nB,GAElB9mX,KAAKsI,MAAQk+W,GACbxmX,KAAK+mX,iBAAmB/mX,KAAKm/V,cAAgBn/V,KAAK8mX,gBAAkB3nB,EACpEn/V,KAAKy4W,MACP,MACEz4W,KAAKqib,iBAAkB,EACvBrib,KAAKsI,MAAQk+W,EAEjB,CACA,QAAApnB,GACEp/V,KAAKqib,iBAAkB,EACvBj8Z,MAAMg5U,UACR,CACA,MAAA4Z,GACE,OAAQh5W,KAAKsI,OACX,KAAKk+W,GACH,CACE,MAAM,OACJxtB,EAAM,MACN91H,GACEljO,KACEira,EAAyB,MAAVjyE,OAAiB,EAASA,EAAO91H,GAChD49H,EAA0B,MAAhBmqE,OAAuB,EAASA,EAAanqE,QAC7D,GAAIA,KAAaA,EAAQ1gB,MAAQpgV,KAAKmnX,kBAAoB8jD,GAAe,CACvE,GAAIjra,KAAK0vX,iBAAiB5uB,GACxB,MAEF9gW,KAAKsI,MAAQk+W,GACb,KACF,CAAO,GAAIxmX,KAAK++V,IAAI07D,gBAAkBz6Z,KAAKkjO,MAAO,CAChDljO,KAAKsI,MAAQk+W,GACb,KACF,CACA,KACF,CACF,KAAKA,GACH,CACE,IAAIygD,EACJ,MAAMh+a,EAAM+lB,KAAK+7G,YAAY9hI,MACvBg+X,EAAYjnX,KAAKinX,UAEvB,IAAKA,GAAah+X,GAAOg+X,GAA2C,OAA7BggD,EAAcjna,KAAK+0N,QAAkBkyM,EAAYyO,QAAS,CAC/F,MAAM,OACJ18E,EAAM,MACN91H,GACEljO,KACEira,EAAyB,MAAVjyE,OAAiB,EAASA,EAAO91H,GACtDljO,KAAKiwX,wBAAwBg7C,GAAgB,MAC7Cjra,KAAKsI,MAAQk+W,EACf,CACF,EAGAxmX,KAAKsI,QAAUk+W,IACjBxmX,KAAKw1a,aAEPx1a,KAAK0nX,WACP,CACA,SAAAA,GACEthW,MAAMshW,YACN1nX,KAAK8ib,cACL9ib,KAAK+ib,sBACP,CACA,UAAAvN,GACE,MAAM,IACJz2E,EAAG,gBACHooB,EAAe,OACfnuB,EAAM,MACNjkI,GACE/0N,KAKJ,GAAwB,OAApBmnX,IAA6BpyJ,IAAU/0N,KAAKonX,qBAAuBroB,EAAInsV,OAAOgmZ,mBAChF,OAIF,GAAI54Z,KAAK+ia,UAAY/ia,KAAKs+a,UACxB,OAEF,MAAMp7M,EAAQljO,KAAKu8U,UAAYwiB,EAAI07D,cAAgB17D,EAAIq/D,UACvD,GAAgB,MAAVplE,IAAkBA,EAAO91H,GAC7B,OAEF,MAAMs9L,EAAYxnE,EAAO91H,GAInBivI,EAAanyW,KAAKgjb,uBACxB,GAAmB,OAAf7wE,EACF,OAEF,MAAM8wE,EAAcjjb,KAAK+nX,kBACzB,GAAIk7D,GAAejjb,KAAK8nX,aAAa3V,EAAY8wE,GAAc,CAC7D,MAAMr5b,EAAO,CAAC,EAMd,OALIoW,KAAK+ia,WACPn5a,EAAK5L,KAAO,SAEdgiB,KAAK++V,IAAI/zD,QAAQ51F,EAAOqtN,WAAY74a,QACpCoW,KAAKsI,MAAQk+W,GAEf,CACA,IAAKxmX,KAAKu8U,UACR,OAIEwiB,EAAIq/D,YAAcl7L,IAA8B,IAArB67H,EAAI+/E,aACjC9+a,KAAKQ,IAAI,qBAAqB0iO,gBAAoBljO,KAAKkjO,SAEzDljO,KAAKkjO,MAAQ67H,EAAI07D,cAAgBv3L,EACjC,MAAM29H,EAAe2/D,EAAU1/D,QAI/B,IAAKD,GAAgB7gW,KAAKsI,QAAUk+W,IAAuB3lB,EAAazgB,MAAQpgV,KAAKmnX,kBAAoBq5C,EAGvG,OAFAxga,KAAKkjO,MAAQA,OACbljO,KAAKsI,MAAQk+W,IAGf,MAAMlJ,EAAYnL,EAAWt2W,IAGvByxX,EAAYttX,KAAKotX,mBAAmBozC,EAAUr1D,YAGpD,GAAImS,GAAagQ,EACf,OAEEttX,KAAKwpX,mBAAqBxpX,KAAKwpX,kBAAkBtuW,MAAQi3V,EAAWh3V,MACtEnb,KAAKwpX,kBAAoB,MAE3B,MAAMZ,EAAmB5oX,KAAKwpX,kBAAoBxpX,KAAKwpX,kBAAkBtuW,MAAQi3V,EAAWh3V,IAC5F,IAAIkkU,EAAOr/U,KAAK4tX,gBAAgBhF,EAAkB/nB,GAElD,GAAI7gW,KAAK0ib,iBAAmB1ib,KAAK6vW,cAAgBxwB,GAAoB,gBAAZA,EAAK9B,IAAwBv9U,KAAK0mX,gBAAgBxrV,SAASmkT,KAAU65B,GAAkB,CAC9I,IAAIgqE,EACJ,MACMz2E,GADmE,OAAnDy2E,EAAwBljb,KAAKwpX,mBAA6B05D,EAAwB7jG,GAAM9B,GAChFsjB,EAAalgB,QACrCwiG,EAAgBtiF,EAAa7gB,UAAUysB,EAAU,GACnD02E,GAAiB9jG,EAAKz8O,KAAOugV,EAAcvgV,KAC7Cy8O,EAAO8jG,EACPnjb,KAAK0mX,gBAAgB/L,eAAewoE,GAExC,MAAWnjb,KAAKwpX,mBAAqBrX,EAAWt2W,MAC9CmE,KAAKwpX,kBAAoB,MAG3B,GAAInqC,GAAQr/U,KAAKkuX,cAAc7uC,EAAMupC,GAAmB,CAEtD,IADiBvpC,EAAKv1N,IACP,CAEb,MAAM9rI,EAAOgiB,KAAKs+a,YAAct+a,KAAK+ia,SAAWvmF,EAA8BA,EACxEqqC,GAAe7oY,IAASw+V,EAA8Bx8U,KAAKw0a,YAAcx0a,KAAK6mX,cAAgB7mX,KAAK+0N,MACrG8xJ,GACF7mX,KAAKqwX,mBAAmBxJ,EAAa7oY,EAAM2gX,GAE/C,CACAtf,EAAOr/U,KAAKouX,2BAA2B/uC,EAAMwhB,EAAcsR,EAAYxT,GAAwB2uB,EACjG,CACKjuC,KAGDA,EAAKnB,aAAgBmB,EAAKnB,YAAYt0V,MAASoW,KAAKi+U,cACtDoB,EAAOA,EAAKnB,aAEdl+U,KAAK2oX,aAAatpC,EAAMmhF,EAAW53C,GACrC,CACA,YAAAD,CAAatpC,EAAMn8G,EAAO0lJ,GAExB,MAAMqG,EAAYjvX,KAAK0mX,gBAAgBxrV,SAASmkT,GAChDr/U,KAAK2mX,YAActnC,EACf4vC,IAAc/V,IAA4B+V,IAAc/V,GAC1C,gBAAZ75B,EAAK9B,GACPv9U,KAAK6pX,iBAAiBxqC,EAAMn8G,GACnBljO,KAAKi+U,aACdj+U,KAAKQ,IAAI,YAAY6+U,EAAK9B,eAAe8B,EAAKn8G,sEAC9CljO,KAAKojb,qBAAqB/jG,EAAMn8G,KAEhCljO,KAAKonX,oBAAqB,EAC1BhhW,MAAMuiW,aAAatpC,EAAMn8G,EAAO0lJ,IAGlC5oX,KAAKmpX,qBAAqB9pC,EAE9B,CACA,eAAA86B,CAAgB3rS,GACd,OAAOxuE,KAAK0mX,gBAAgBvM,gBAAgB3rS,EAAUmwR,GACxD,CACA,qBAAA0kF,CAAsBhkG,GACpB,OAAIA,EAEKr/U,KAAKm6W,gBAAgB96B,EAAKlkU,IAAM,IAElC,IACT,CAQA,oBAAAmoa,GACEtjb,KAAKujb,mBACLvjb,KAAK2pX,gBAAgB,EAAG/mX,OAAO63R,kBACjC,CAQA,eAAAksH,GACE,MAAM,OACJ3tD,EAAM,MACNjkI,GACE/0N,KAEJ,GAAa,MAAT+0N,GAAiBA,EAAM7+M,WAAY,CACrC,IAAIsta,EACJ,MAAMC,EAAqBzjb,KAAK+5W,gBAAgBhlJ,EAAMjkJ,aAClD2yW,GAAsBA,EAAmBvoa,MAAQ,GAGnDlb,KAAK2pX,gBAAgB,EAAG85D,EAAmBvoa,MAAQ,GAErD,MAAM2lV,EAAe7gW,KAAK+nX,kBAC1B,GAAoB,MAAhBlnB,GAAwBA,EAAazgB,KAAM,CAC7C,MAAM+xB,EAAanyW,KAAKgjb,uBAExB,IAAK7wE,GAAcA,EAAWt2W,IAAoC,EAA9BglW,EAAahgB,eAC/C,MAEJ,CACA,IAAK9rH,EAAMglM,QAAU/gE,EAAQ,CAE3B,MACMuuD,EAAYvuD,EADEh5V,KAAK++V,IAAI07D,eAEvBgoB,EAAezib,KAAKyib,aAExBe,EADEf,GAAgBzib,KAAK2mX,YACV3mX,KAAK2mX,YAAYj8X,SAAW68Z,EAAUp8C,YAAc,IAAOs3E,GAAgB,EAE3E,CAEjB,MACEe,EAAa,EAIf,MAAME,EAAe1jb,KAAKm6W,gBAAgBplJ,EAAMjkJ,YAAc0yW,GAC9D,GAAIE,EAAc,CAEhB,MAAMC,EAAmB3jb,KAAKqjb,sBAAsBK,GACpD,GAAIC,EAAkB,CAEpB3jb,KAAKujb,mBAEL,MAAMK,EAAWD,EAAiB5lG,YAAc4lG,EAAiB5lG,YAAc4lG,EAAiBzoa,MAC1F4xW,EAAe62D,EAAiBj5b,SAChCm5b,EAAWl0a,KAAKhT,IAAI+mb,EAAavoa,IAAKyoa,EAAWj0a,KAAKjT,IAAIiT,KAAKhT,IAAImwX,EAAe9sX,KAAK4S,OAAOm9V,uBAAwB+c,GAAgB9sX,KAAK0ib,eAAiB,GAAM,OAAS51D,GAAgB9sX,KAAK0ib,eAAiB,IAAO,OAC9N1ib,KAAK2pX,gBAAgBk6D,EAAUjhb,OAAO63R,kBACxC,CACF,CACF,CACF,CACA,gBAAA8oJ,GACE,MAAM58D,EAAc3mX,KAAK2mX,YAOzB,OANA3mX,KAAK2mX,YAAc,KACnB3mX,KAAKwpX,kBAAoB,KACrB7C,IACFA,EAAY7nC,gBACZ9+U,KAAK0mX,gBAAgB/L,eAAegM,IAE9B3mX,KAAKsI,OACX,KAAKk+W,GACL,KAAKA,GACL,KAAKA,GACL,KAAKA,GACL,KAAKA,GACHxmX,KAAKsI,MAAQk+W,GAGjBxmX,KAAK+mX,iBAAmB/mX,KAAKitX,iBAC/B,CACA,eAAAtD,CAAgB3qJ,EAAaqoI,GAC3BjhV,MAAMujW,gBAAgB3qJ,EAAaqoI,EAAWrnW,KAAK+ia,SAAW,QAAU,KAC1E,CACA,eAAA58D,CAAgB3hX,EAAOoF,GACrBw8B,MAAM+/U,gBAAgB3hX,EAAOoF,GAC7B,MAAMmrO,EAAQnrO,EAAKmrO,MACnB/0N,KAAKuib,WAAavib,KAAK8jb,eAAepjb,KAAKV,MAC3CA,KAAKwib,UAAYxib,KAAK+jb,cAAcrjb,KAAKV,MACzC+0N,EAAM11O,iBAAiB,UAAW2gB,KAAKuib,YACvCxtN,EAAM11O,iBAAiB,SAAU2gB,KAAKwib,WACtCxib,KAAKoib,cAAgB,IAAIjC,GAAcngb,KAAK4S,OAAQmiN,EAAO/0N,KAAK0mX,gBAAiB1mX,KAAK++V,IACxF,CACA,gBAAAsH,GACE,MAAM,MACJtxI,GACE/0N,KACA+0N,GAAS/0N,KAAKuib,YAAcvib,KAAKwib,YACnCztN,EAAMz1O,oBAAoB,UAAW0gB,KAAKuib,YAC1CxtN,EAAMz1O,oBAAoB,SAAU0gB,KAAKwib,WACzCxib,KAAKuib,WAAavib,KAAKwib,UAAY,KACnCxib,KAAKw0a,YAAc,MAErBx0a,KAAKsib,YAAc,KACftib,KAAKoib,gBACPpib,KAAKoib,cAAcp3S,UACnBhrI,KAAKoib,cAAgB,MAEvBh8Z,MAAMigV,kBACR,CACA,cAAAy9E,GAEE9jb,KAAKy4W,MACP,CACA,aAAAsrE,GACE,MAAMhvN,EAAQ/0N,KAAK+0N,MACbjkJ,EAAcikJ,EAAQA,EAAMjkJ,YAAc,KAC5CopQ,EAAeppQ,IACjB9wE,KAAKQ,IAAI,mBAAmBswE,EAAYz7D,QAAQ,MAIlD,MAAM88V,EAAanyW,KAAKgjb,uBACL,OAAf7wE,GAA0C,IAAnBA,EAAWt2W,IAMtCmE,KAAKy4W,OALHz4W,KAAK0N,KAAK,gDAAgDykW,EAAaA,EAAWt2W,IAAM,WAM5F,CACA,iBAAA0jW,GAEEv/V,KAAKQ,IAAI,wBACTR,KAAK++V,IAAI/zD,QAAQ51F,EAAOktN,kBAAc1pa,GACtCoH,KAAK0mX,gBAAgBpK,qBACrBt8W,KAAK0ib,gBAAiB,EACtB1ib,KAAKm/V,cAAgBn/V,KAAK8mX,gBAAkB9mX,KAAKyib,aAAe,EAChEzib,KAAKg5V,OAASh5V,KAAKsib,YAActib,KAAKwpX,kBAAoBxpX,KAAKmnX,gBAAkB,KACjFnnX,KAAK+ia,SAAW/ia,KAAKs+a,UAAYt+a,KAAKonX,oBAAqB,CAC7D,CACA,gBAAA0+B,CAAiBtha,EAAOoF,GAEtB,IAAIo6b,GAAM,EACNC,GAAQ,EACZr6b,EAAKovW,OAAOp2W,SAAQsgP,IAClB,MAAMumH,EAAQvmH,EAAMm3H,WAChB5Q,IACFu6F,EAAMA,IAAuC,IAAhCv6F,EAAMruW,QAAQ,aAC3B6oc,EAAQA,IAAyC,IAAhCx6F,EAAMruW,QAAQ,aACjC,IAEF4kB,KAAK2ib,iBAAmBqB,GAAOC,IA9wBnC,WACE,IAAIC,EACJ,MAAMziB,EAAese,KACrB,MAAyJ,oBAA1H,MAAhBte,GAAoF,OAAnDyiB,EAAwBziB,EAAaznb,gBAA/C,EAA6Ekqc,EAAsBtgB,WAC3I,CA0wB6CugB,GACrCnkb,KAAK2ib,kBACP3ib,KAAKQ,IAAI,0EAEXR,KAAKg5V,OAASpvW,EAAKovW,OACnBh5V,KAAKonX,oBAAqB,CAC5B,CACA,cAAA3nB,CAAej7W,EAAOoF,GACpB,MAAM,OACJovW,GACEh5V,KACJ,IAAKg5V,GAAUh5V,KAAKsI,QAAUk+W,GAC5B,OAEF,MAAMtjJ,EAAQ81H,EAAOpvW,EAAKs5O,SACrBA,EAAM49H,SAAW59H,EAAM49H,QAAQ1gB,MAAQpgV,KAAKmnX,kBAAoBjkJ,GAASljO,KAAK0vX,iBAAiBxsJ,EAAM49H,YACxG9gW,KAAKsI,MAAQk+W,GAEjB,CACA,aAAAi1C,CAAcj3a,EAAOoF,GACnB,IAAIw6b,EACJ,MAAM,OACJprF,GACEh5V,KACEqkb,EAAaz6b,EAAKs5O,MAClBypI,EAAa/iX,EAAKk3W,QAClBp2W,EAAWiiX,EAAW7rB,cAC5B,IAAKkY,EAEH,YADAh5V,KAAK0N,KAAK,yCAAyC22a,KAGrDrkb,KAAKQ,IAAI,SAAS6jb,aAAsB13E,EAAWhsB,WAAWgsB,EAAW5sB,SAAS4sB,EAAWrqB,WAAa,SAASqqB,EAAWrqB,cAAcqqB,EAAWnqB,iBAAmB,WAAWmqB,EAAWjsB,YAAYisB,EAAW7sB,mBAAmBp1V,KAC1O,MAAM48Z,EAAWtuD,EAAOqrF,GAClB19D,EAAc3mX,KAAK2mX,aACrBA,GAAgB3mX,KAAKsI,QAAUk+W,IAAsBxmX,KAAKsI,QAAUk+W,IAClEG,EAAYzjJ,QAAUt5O,EAAKs5O,OAASyjJ,EAAY5nI,QAClD/+O,KAAKujb,mBAGT,IAAIxlE,EAAU,EACd,GAAIpR,EAAWvsB,MAAkD,OAAzCgkG,EAAoB98B,EAASxmD,UAAoBsjF,EAAkBhkG,KAAM,CAC/F,IAAI4nC,EAEJ,GADAhoX,KAAK0pX,gBAAgB/c,GACjBA,EAAWhrB,kBACb,OAEFo8B,EAAU/9W,KAAKqvX,eAAe1iB,EAAY26C,EAASxmD,QAA2D,OAAjDknB,EAAwBhoX,KAAKmnX,sBAA2B,EAASa,EAAsBlnB,QACtJ,CAUA,GARAwmD,EAASxmD,QAAU6L,EACnB3sW,KAAKmnX,gBAAkBmgC,EACvBtnZ,KAAK++V,IAAI/zD,QAAQ51F,EAAOsxJ,cAAe,CACrC5F,QAAS6L,EACTzpI,MAAOmhN,IAILrkb,KAAKsI,QAAUk+W,GAAqB,CACtC,GAAIxmX,KAAK0vX,iBAAiB/iB,GAExB,OAEF3sW,KAAKsI,MAAQk+W,EACf,CACKxmX,KAAKonX,mBAECza,EAAWvsB,MACpBpgV,KAAKmvX,sBAAsBxiB,GAF3B3sW,KAAK2vX,iBAAiBhjB,EAAYoR,GAMpC/9W,KAAKy4W,MACP,CACA,2BAAAuQ,CAA4Bp/X,GAC1B,IAAI2oZ,EACJ,MAAM,KACJlzD,EAAI,KACJsd,EAAI,QACJhoV,GACE/qB,GACE,OACJovW,GACEh5V,KACJ,IAAKg5V,EAEH,YADAh5V,KAAK0N,KAAK,mEAAmE2xU,EAAK9B,eAAe8B,EAAKn8G,8BAGxG,MAAM+nM,EAAejyE,EAAO3Z,EAAKn8G,OAC3B49H,EAAUmqE,EAAanqE,QAC7B,IAAKA,EAGH,OAFA9gW,KAAK0N,KAAK,qBAAqB2xU,EAAK9B,eAAe8B,EAAKn8G,6CACxDljO,KAAK0mX,gBAAgB/L,eAAet7B,GAGtC,MAAMmY,EAAayzE,EAAazzE,WAG1BguC,EAAqB1kC,EAAQnhB,WAAamhB,EAAQ1gB,KAClD0uD,EAA4D,OAAzCyD,EAAoBlzD,EAAKnB,kBAAuB,EAASq0D,EAAkB3oZ,KAC9FywW,EAAar6V,KAAKskb,eAAerZ,GAIjCrkD,EAAa5mX,KAAK4mX,WAAa5mX,KAAK4mX,YAAc,IAAIwqB,GAAoBpxY,KAAK++V,IAAKJ,GAAwB3+V,KAAKg2a,wBAAwBt1a,KAAKV,MAAOA,KAAKosX,uBAAuB1rX,KAAKV,OACtLmuW,EAAYxR,EAAOA,EAAKj7W,OAAS,EACjCs9H,GAAyB,IAAfmvP,EACV2c,EAAY,IAAItN,GAAcn+B,EAAKn8G,MAAOm8G,EAAK9B,GAAI8B,EAAKz0C,MAAMwxC,WAAYznU,EAAQ+8E,WAAYy8Q,EAAWnvP,GACzGsoQ,EAAUtnX,KAAKsnX,QAAQjoC,EAAKz8O,IAClCgkR,EAAWvrY,KAAKs5B,EAASm6X,EAAiBz0C,EAAY7C,EAAYnY,EAAMsd,EAAMmE,EAAQhgB,cAAe0kD,EAAoB1a,EAAWxD,EACtI,CACA,qBAAA8tD,CAAsB5wb,EAAOoF,GAE3B,MAAM26b,EAAevkb,KAAK+ia,SAK1B,MAJmBn5a,EAAKmrB,IAIT,CACb,GAAI/U,KAAK6mX,cAAgB7mX,KAAK+0N,MAAO,CACnC/0N,KAAKQ,IAAI,iFACTR,KAAK6mX,YAAc7mX,KAAK+0N,MACxB,MAAM4xJ,EAAc3mX,KAAK2mX,YAErBA,IACF3mX,KAAKQ,IAAI,4DACTmmX,EAAY7nC,gBACZ9+U,KAAK0mX,gBAAgB/L,eAAegM,IAGtC3mX,KAAK2nX,kBAEL3nX,KAAKuoX,mBACP,MAAWvoX,KAAKs+a,WAEdt+a,KAAK2nX,kBAEP,MAAM5oB,EAAM/+V,KAAK++V,IAEbwlF,IACFxlF,EAAI/zD,QAAQ51F,EAAOoxJ,gBAAiB,CAClCxnI,YAAa,EACbqoI,UAAWzkW,OAAO63R,kBAClBz8S,KAAM,OAERgiB,KAAK0mX,gBAAgBpK,sBAEvBvd,EAAI/zD,QAAQ51F,EAAO6gO,qBAAsBrsb,EAC3C,CACF,CACA,oBAAAi5b,CAAqBr+b,EAAOoF,GAC1B,MAAMg/V,EAAUh/V,EAAKiC,GACfk3a,IAAa/ia,KAAK++V,IAAIgC,YAAYnY,GAAS7zU,IACjD,GAAIguZ,EAAU,CACZ,MAAMyR,EAAcx0a,KAAKw0a,YAErBA,GAAex0a,KAAK6mX,cAAgB2tD,IACtCx0a,KAAKQ,IAAI,sFACTR,KAAK6mX,YAAc2tD,EAEvB,CACAx0a,KAAK+ia,SAAWA,EAChB/ia,KAAKy4W,MACP,CACA,eAAA68D,CAAgB9wb,EAAOoF,GACrB,MAAMosL,EAASpsL,EAAKosL,OACpB,IAAIwuQ,EACA5/b,EACA6vM,GAAY,EAChB,IAAK,MAAMz2M,KAAQg4L,EAAQ,CACzB,MAAM3kD,EAAQ2kD,EAAOh4L,GACrB,GAAiB,SAAbqzI,EAAMxlI,IAIR,GAHAjH,EAAO5G,EACPwmc,EAAanzT,EAEA,UAATrzI,EAAkB,CACpB,MAAM00Y,EAAa18M,EAAOh4L,GACtB00Y,IACF1yX,KAAKw0a,YAAc9hD,EAAW3gS,OAElC,OAEA0iG,GAAY,CAEhB,CACIA,GAAa+vP,GACfxkb,KAAKQ,IAAI,8BAA8B5b,gDACvCob,KAAK6mX,YAAc29D,EAAWzyV,QAE9B/xF,KAAK6mX,YAAc7mX,KAAK+0N,KAE5B,CACA,cAAA6kJ,CAAep1X,EAAOoF,GACpB,MAAM,KACJy1V,EAAI,KACJsd,GACE/yW,EACJ,GAAIy1V,GAAQA,EAAKrhW,OAAS2gX,GACxB,OAEF,GAAI3+V,KAAK+oX,mBAAmB1pC,GAO1B,OAJAr/U,KAAK0N,KAAK,YAAY2xU,EAAK9B,KAAKof,EAAO,OAASA,EAAKj7W,MAAQ,eAAe29V,EAAKn8G,qDAAqDljO,KAAKsI,cACvItI,KAAKsI,QAAUk+W,KACjBxmX,KAAKsI,MAAQk+W,KAIjB,MAAM57E,EAAQ+xD,EAAOA,EAAK/xD,MAAQy0C,EAAKz0C,MACvC5qS,KAAKyib,aAAe9ya,KAAKy2B,MAAM,EAAIwkQ,EAAMtgT,OAASsgT,EAAM2xC,UAAUphU,IAAMyvR,EAAMnuT,QAAQqkD,QACtE,gBAAZu+S,EAAK9B,KACPv9U,KAAK6vW,aAAexwB,GAEtBr/U,KAAKoqX,qBAAqB/qC,EAAMsd,EAClC,CACA,OAAA1+V,CAAQzZ,EAAOoF,GACb,IAAIy+a,EACJ,GAAIz+a,EAAK2wS,MACPv6R,KAAKsI,MAAQk+W,QAGf,OAAQ58X,EAAKk3W,SACX,KAAK1mB,EAAainC,SAClB,KAAKjnC,EAAay2C,mBAClB,KAAKz2C,EAAa2vC,mBAClB,KAAK3vC,EAAaqlC,gBAClB,KAAKrlC,EAAao0B,kBAClB,KAAKp0B,EAAa+tF,eAClB,KAAK/tF,EAAaq0B,iBAChBzuW,KAAK6vX,yBAAyBlxB,GAAwB/0W,GACtD,MACF,KAAKwwV,EAAa+oB,iBAClB,KAAK/oB,EAAa8oB,mBAClB,KAAK9oB,EAAaupB,oBAEX/5W,EAAKqpX,YAAcjzW,KAAKsI,QAAUk+W,KAA0D,OAAjC6hD,EAAgBz+a,EAAKkV,cAAmB,EAASupa,EAAcrqb,QAAU0gX,KACvI1+V,KAAKsI,MAAQk+W,IAEf,MACF,KAAKpsC,EAAa2hF,oBAClB,KAAK3hF,EAAayqF,kBAChB,IAAKj7a,EAAK40E,QAA0B,SAAhB50E,EAAK40E,OACvB,OAEF,GAAI50E,EAAKk3W,UAAY1mB,EAAa2hF,oBAEhC,YADA/7Z,KAAKuoX,oBAGHvoX,KAAKmwX,2BAA2BvmY,IAClCoW,KAAK2pX,gBAAgB,EAAG/mX,OAAO63R,mBAEjC,MACF,KAAK2/C,EAAa+xC,mBAChBnsX,KAAK+wX,mBAAmBnnY,GAG9B,CAGA,WAAAk5b,GACE,MAAM,MACJ/tN,EAAK,cACLqtN,GACEpib,KACJ,GAAK+0N,GAAUqtN,GAAkBrtN,EAAM7+M,WAAvC,CAIA,GAAIlW,KAAKgnX,iBAAmBrK,GAAaE,YAAY9nJ,GAAOv7O,OAAQ,CAElE,MAAMgnc,EAAaxgb,KAAKsI,QAAUk+W,GAAaxmX,KAAK2mX,YAAc,KAClEy7D,EAAc35J,KAAKzoR,KAAK8mX,gBAAiB05D,EAC3C,CACAxgb,KAAK8mX,gBAAkB/xJ,EAAMjkJ,WAN7B,CAOF,CACA,0BAAA8xW,GACE5ib,KAAKsI,MAAQk+W,GAGRxmX,KAAKgnX,iBACRhnX,KAAKonX,oBAAqB,EAC1BpnX,KAAK+mX,iBAAmB/mX,KAAKm/V,eAE/Bn/V,KAAKi5W,eACP,CACA,eAAAs8D,CAAgB/wb,GAAO,KACrBxG,IAEA,GAAIA,IAASw+V,GAA+Bx8U,KAAKs+a,YAAct+a,KAAK+ia,SAAU,CAC5E,MAAMl8C,GAAe7oY,IAASw+V,EAA8Bx8U,KAAKw0a,YAAcx0a,KAAK6mX,cAAgB7mX,KAAK+0N,MACzG/0N,KAAKqwX,mBAAmBxJ,EAAa7oY,EAAM2gX,IAC3C3+V,KAAKy4W,MACP,CACF,CACA,eAAAutC,CAAgBxha,EAAOoF,GACjBoW,KAAKkjO,OAAS,GAAKljO,KAAK2mX,cAC1B3mX,KAAKkjO,MAAQljO,KAAK2mX,YAAYzjJ,OAEhCljO,KAAKg5V,OAASpvW,EAAKovW,MACrB,CACA,cAAAyrF,GACEzkb,KAAKmib,gBAAkBnib,KAAKmib,cAC9B,CAKA,cAAAz3D,GACE,MAAM,MACJ31J,GACE/0N,KACJ,IAAK+0N,EACH,OAEF,MAAMjkJ,EAAcikJ,EAAMjkJ,YAC1B,IAAIquR,EAAgBn/V,KAAKm/V,cAGzB,GAAIA,GAAiB,GAAKruR,EAAcquR,EAAe,CACrD,GAAIpqI,EAAM2gN,QAER,YADA11a,KAAKQ,IAAI,qBAAqB2+V,yBAAqCruR,KAGrE,MAAMw4R,EAAWqT,GAAaE,YAAY9nJ,GAEpC32L,GADckrU,EAAS9vX,OAAS8vX,EAASpuV,MAAM,GAAK,GAC9BikV,EACxB/gU,EAAQ,IAAMA,EAAQp+B,KAAK4S,OAAO01W,eAAiBlqV,EAAQp+B,KAAK4S,OAAOm9V,0BACzE/vW,KAAKQ,IAAI,+BAA+B49B,2BACxC+gU,GAAiB/gU,EACjBp+B,KAAKm/V,cAAgBA,GAEvBn/V,KAAKQ,IAAI,iCAAiC2+V,uBAAmCruR,KAC7EikJ,EAAMjkJ,YAAcquR,CACtB,CACF,CACA,cAAAmlF,CAAerZ,GACb,IAAI5wE,EAAar6V,KAAK4S,OAAOslZ,mBAAqB+S,EAAa5wE,WAS/D,OARIr6V,KAAKmib,gBAAkB9nF,IACzBr6V,KAAKQ,IAAI,wBAEP65V,GADuC,IAArCA,EAAWj/W,QAAQ,aACR,YAEA,aAGVi/W,CACT,CACA,oBAAA+oF,CAAqB/jG,EAAMn8G,GACzBm8G,EAAKpB,aAAc,EACnBj+U,KAAK8oX,YAAYzpC,EAAMn8G,GAAO70N,MAAKzkB,IACjC,MAAM,IACJm1W,GACE/+V,KACJ,IAAKpW,GAAQoW,KAAK+oX,mBAAmB1pC,GACnC,OAEFn8G,EAAMunI,cAAgB,EACtBzqW,KAAKsI,MAAQk+W,GACbxmX,KAAKonX,oBAAqB,EAC1BpnX,KAAKi+U,aAAc,EACnB,MAAMrzC,EAAQy0C,EAAKz0C,MAEnBA,EAAM0xC,QAAQphU,MAAQ0vR,EAAM0xC,QAAQnhU,IAAMyvR,EAAM2xC,UAAUrhU,MAAQ0vR,EAAM2xC,UAAUphU,IAAMnM,KAAK+7G,YAAY9hI,MACzG81W,EAAI/zD,QAAQ51F,EAAOykK,YAAajwX,GAChCy1V,EAAKpB,aAAc,CAAK,GAE5B,CACA,uBAAA+3F,CAAwBrjC,GACtB,IAAIujC,EACJ,MAAMrqb,EAAK,QACL,IACJkzW,GACE/+V,MACE,YACJ4vY,EAAW,UACX9kB,GACE6nB,EACE7zY,EAAUkB,KAAKqsX,kBAAkBvB,GACvC,IAAKhsX,EAEH,YADAkB,KAAKwwX,wBAAwB1F,GAG/B,MAAM,KACJzrC,EAAI,KACJsd,EAAI,MACJz5H,GACEpkO,GACE,MACJ4hN,EAAK,KACLz8N,EAAI,IACJijW,EAAG,YACHhJ,GACE0xD,GACE,QACJ9uC,GACE59H,EAEEvhK,EAAQ3hE,KAAK+ia,cAAWnqa,EAAYg3Y,EAAYjuU,MAItD,GAAI3hE,KAAK+oX,mBAAmB1pC,GAC1Br/U,KAAK0mX,gBAAgB/L,eAAet7B,OADtC,CAKA,GADAr/U,KAAKsI,MAAQk+W,GACTtoC,EAAa,CACf,GAAmB,MAAfA,GAAuBA,EAAYloK,OAAQ,CAC7C,MAAMogQ,EAAc/2F,EAAKnB,aAAemB,EACxCr/U,KAAKq2a,mBAAmBnzM,EAAOg7G,EAAYloK,OAAQogQ,EAAatrD,GAChE/rB,EAAI/zD,QAAQ51F,EAAOkhO,0BAA2B,CAC5Cj3F,KAAM+2F,EACNvqb,KACAmqL,OAAQkoK,EAAYloK,QAExB,CAGA,MAAMsxM,EAAUppC,EAAYopC,QACtBv/B,EAAY7J,EAAY6J,UAC1B7N,EAAeotC,KACjBtnX,KAAKsnX,QAAQjoC,EAAKz8O,IAAM,CACtBoqP,SAAUs6B,EACVv/B,aAEFgX,EAAI/zD,QAAQ51F,EAAOo8N,eAAgB,CACjCnyF,OACAxzV,KACAy7X,UACAv/B,cAGN,CAGA,GAAIrnI,GAASogJ,GAAuB,gBAAZzhB,EAAK9B,GAAsB,CACjD,MAAMoe,EAAWmF,EAAQ9gB,UAAUX,EAAK9B,GAAK,EAAIujB,EAAQngB,SACnD+jG,EAAkBrlG,EAAK9B,KAAOujB,EAAQngB,QACtCgkG,GAA0BhpF,GAAYtc,EAAKz8O,GAAK+4P,EAAS/4P,GAC/D,IAAgC,IAA5BgtS,EAAYrwD,YAAuB,CACrC,MAAM,SACJ7B,EAAQ,OACRC,EAAM,SACNC,EAAQ,OACRC,GACEn9H,EACJ,GAAIi8I,EACFA,EAAK7f,kBAAkBp8H,EAAM1iO,MAAQ,CACnC0/V,WACAC,SACAC,WACAC,eAMF,GAHIn9H,EAAMkmL,eAAiBlmL,EAAM6+H,aAAgC,IAAjBurC,EAAUj/X,KAAa84b,IACrE3kb,KAAK0ib,gBAAiB,GAEpBhiO,EAAMksK,SAAWlsK,EAAM6+H,YAAa,CAGtC,MAAM4yB,EAAanyW,KAAKgjb,uBAClBp6D,GAAoBzW,EAAaA,EAAWh3V,IAAMnb,KAAKitX,mBAAqBjtX,KAAK4S,OAAO01W,cACxFr0U,EAAYysK,EAAM0lL,iBAAmB1lL,EAAM0lL,iBAAmB1oD,EACpE,IAAKgnG,GAAmB97D,EAAmB30U,EAAYj0C,KAAK4S,OAAO01W,gBAAkBq8D,EAEnF,YADA3kb,KAAK4kb,UAAUvlG,GAENslG,IAETtlG,EAAKv1N,KAAM,GAGbu1N,EAAKJ,wBAAwBv+H,EAAM1iO,KAAMqhW,EAAKnkU,MAAOyiU,EAAQ0B,EAAKnkU,MAAO2iU,GAAQ,EACnF,MAAW6mG,GAAmBhnG,EA/tCb,IAiuCf2B,EAAKv1N,KAAM,GAGfu1N,EAAKJ,wBAAwBv+H,EAAM1iO,KAAM0/V,EAAUC,EAAQC,EAAUC,GACjE79U,KAAKwpX,oBACPxpX,KAAKwpX,kBAAoBnqC,GAE3Br/U,KAAKwsX,mBAAmB9rK,EAAO2+H,EAAMsd,EAAMmuB,EAAW45D,GAAmBC,EAC3E,KAAO,KAAID,IAAmBC,EAK5B,YADA3kb,KAAK4kb,UAAUvlG,GAFfA,EAAKv1N,KAAM,CAIb,CACF,CACA,GAAInoD,EAAO,CACT,MAAM,SACJ+7Q,EAAQ,OACRC,EAAM,SACNC,EAAQ,OACRC,GACEl8Q,EACAg7R,IACFA,EAAK7f,kBAAkBN,GAA+B,CACpDkB,WACAC,SACAC,WACAC,WAGJwB,EAAKJ,wBAAwBzC,EAA6BkB,EAAUC,EAAQC,EAAUC,GACtF79U,KAAKwsX,mBAAmB7qT,EAAO09Q,EAAMsd,EAAMmuB,EAC7C,CACA,GAAIhqB,GAAkB,MAAP5Z,GAA+C,OAA/BgvF,EAAehvF,EAAIyF,UAAoBupF,EAAa18b,OAAQ,CACzF,MAAM+8b,EAAa,CACjB1qb,KACAwzV,OACAyhB,UACAnU,QAASzF,EAAIyF,SAEfoS,EAAI/zD,QAAQ51F,EAAOkxJ,sBAAuBiwE,EAC5C,CACA,GAAIz1E,GAAW78W,EAAM,CACnB,MAAMuyb,EAAc,CAClB3qb,KACAwzV,OACAyhB,UACAnU,QAAS1oW,EAAK0oW,SAEhBoS,EAAI/zD,QAAQ51F,EAAOi8N,sBAAuBmF,EAC5C,CAzHA,CA0HF,CACA,kBAAAH,CAAmBpL,EAAcj1P,EAAQqpK,EAAMyrC,GAC7C,GAAI9qX,KAAKsI,QAAUk+W,GACjB,OAEFxmX,KAAKs+a,YAActoQ,EAAOr0G,QAAUq0G,EAAO0qC,MAGvC1gN,KAAK+ia,WAAa/ia,KAAKs+a,kBAClBtoQ,EAAOr0G,MAGhB,MAAM,MACJA,EAAK,MACL++I,EAAK,WACL8+H,GACExpK,EACJ,GAAIr0G,EAAO,CACT,IAAI04R,EAAa4wE,EAAa5wE,WAC9B,MAAMpwU,EAAK9a,UAAUG,UAAU7I,cAC/B,GAAIzG,KAAK2ib,iBAAkB,CACrBtoF,IAEAA,GADuC,IAArCA,EAAWj/W,QAAQ,aACR,YAEA,aAMjB,MAAMypc,EAAgBljX,EAAM3iE,SACxB6lb,GAAiB,iBAAkBA,GAAuD,KAArCA,EAAcjxD,cAAgB,KAAuC,IAA3B3pW,EAAG7uC,QAAQ,aAC5Gi/W,EAAa,YAEjB,CAEIA,IAAmD,IAArCA,EAAWj/W,QAAQ,eAAkD,IAA3B6uC,EAAG7uC,QAAQ,YAAyC,eAApBumF,EAAM3mF,YAEhGq/W,EAAa,YACbr6V,KAAKQ,IAAI,iCAAiC65V,MAExC4wE,EAAa5wE,YAAc4wE,EAAa5wE,aAAeA,GACzDr6V,KAAKQ,IAAI,kCAAkCyqa,EAAa5wE,oBAAoBA,MAE9E14R,EAAMy2R,WAAaiC,EACnB14R,EAAM91E,GAAK,OACXmU,KAAKQ,IAAI,gCAAgCmhE,EAAM3mF,6CAA6Cq/W,GAAc,MAAM4wE,EAAa5wE,YAAc,MAAM14R,EAAM8nR,SACzJ,CACI/oI,IACFA,EAAM03I,WAAa6yE,EAAazzE,WAChC92I,EAAM70N,GAAK,OACXmU,KAAKQ,IAAI,gCAAgCkgN,EAAM1lO,oCAAoCiwb,EAAazzE,YAAc,MAAM92I,EAAM+oI,WAExHjK,GACFx/U,KAAKQ,IAAI,qCAAqCg/U,EAAWxkW,oCAAoCiwb,EAAa/zE,UAAU1X,EAAWiK,UAEjIzpV,KAAK++V,IAAI/zD,QAAQ51F,EAAO6wM,cAAejwO,GAEvCj8L,OAAOiC,KAAKg6L,GAAQpzL,SAAQg6Z,IAC1B,MACM1+D,EADQloK,EAAO4mO,GACK1+D,YACP,MAAfA,GAAuBA,EAAYxsP,YACrC1xF,KAAK++V,IAAI/zD,QAAQ51F,EAAOu3K,iBAAkB,CACxC3uY,KAAM4+Z,EACNhzZ,KAAMs0V,EACNmB,OACAsd,KAAM,KACNmuB,YACAtsT,OAAQ6gR,EAAKrhW,MAEjB,IAGFgiB,KAAKi5W,eACP,CACA,oBAAA+pE,GACE,OAAOhjb,KAAKqpX,iBAAiBrpX,KAAK6mX,YAAc7mX,KAAK6mX,YAAc7mX,KAAK+0N,MAAO4pI,GACjF,CACA,SAAAimF,CAAUvlG,GACRr/U,KAAK0ib,gBAAiB,EAEtB1ib,KAAKwpX,kBAAoBnqC,EACzBr/U,KAAK2nX,kBACL3nX,KAAK6sX,eAAextC,GACpBr/U,KAAK0mX,gBAAgB/L,eAAet7B,GACpCr/U,KAAK6vW,aAAe,KACpB7vW,KAAK+mX,iBAAmB1nC,EAAKnkU,MAC7Blb,KAAKsI,MAAQk+W,EACf,CACA,oBAAAu8D,GACE,MAAMriO,EAAQ1gN,KAAK+0N,MACnB,IAAI0uN,EAAqB,KACzB,GAAI/iO,GAASA,EAAMxqM,WAAa,IAAuB,IAAlBwqM,EAAMg1N,QAAmB,CAC5D,MAAM5kW,EAAc4vI,EAAM5vI,YAkB1B,GAVI6rS,GAAaC,WAAWl8J,EAAO5vI,GACjC2yW,EAAqBzjb,KAAK+5W,gBAAgBjpS,GACjC6rS,GAAaC,WAAWl8J,EAAO5vI,EAAc,MAMtD2yW,EAAqBzjb,KAAK+5W,gBAAgBjpS,EAAc,KAEtD2yW,EAAoB,CACtBzjb,KAAKwpX,kBAAoB,KACzB,MAAM84D,EAActib,KAAKsib,YACnBwC,EAAmBrB,EAAmBvgN,MACvCo/M,GAAemB,EAAmBlmG,KAAO+kG,EAAY/kG,IAAM+kG,EAAYp/M,QAAU4hN,IACpF9kb,KAAKsib,YAAcmB,EACnBzjb,KAAK++V,IAAI/zD,QAAQ51F,EAAOwtN,aAAc,CACpCvjF,KAAMokG,IAEHnB,GAAeA,EAAYp/M,QAAU4hN,GACxC9kb,KAAK++V,IAAI/zD,QAAQ51F,EAAO2vO,eAAgB,CACtC7hN,MAAO4hN,IAIf,CACF,CACF,CACA,aAAIv9B,GACF,MAAMloE,EAAOr/U,KAAK2jb,iBAClB,OAAItkG,EACKA,EAAKn8G,OAEN,CACV,CACA,eAAI8hN,GACF,MAAMjwN,EAAQ/0N,KAAK+0N,MACnB,OAAIA,EACK/0N,KAAKsib,aAAetib,KAAK+5W,gBAAgBhlJ,EAAMjkJ,aAEjD,IACT,CACA,0BAAIm0W,GACF,MAAMlwN,EAAQ/0N,KAAK+0N,MACnB,GAAIA,EAAO,CACT,MAAMjkJ,EAAcikJ,EAAMjkJ,YACpBuuQ,EAAOr/U,KAAKglb,YAClB,GAAI3lG,GAAQnF,EAAeppQ,IAAgBopQ,EAAemF,EAAKhC,iBAAkB,CAC/E,MAAM6nG,EAAS7lG,EAAKhC,gBAA+C,KAA5BvsQ,EAAcuuQ,EAAKnkU,OAC1D,OAAO,IAAIhyB,KAAKg8b,EAClB,CACF,CACA,OAAO,IACT,CACA,gBAAIja,GACF,MAAM5rF,EAAOr/U,KAAKglb,YAClB,OAAI3lG,EACKA,EAAKn8G,OAEN,CACV,CACA,oBAAIygN,GACF,MAAMtkG,EAAOr/U,KAAKglb,YAClB,OAAI3lG,EACKr/U,KAAKqjb,sBAAsBhkG,GAE7B,IACT,CACA,kBAAIm/F,GACF,OAAOx+a,KAAKqib,eACd,EAOF,MAAM8C,GAIJ,kBAAWlya,GACT,MAAO,QACT,CAKA,qBAAOita,GACL,OAAOA,IACT,CAKA,kBAAOxzW,GACL,OAz+CJ,WACE,IAAKwzW,KACH,OAAO,EAET,MAAM9e,EAAcpuE,KACpB,MAA+E,oBAAjD,MAAfouE,OAAsB,EAASA,EAAY/pE,mBAAoC,CAAC,wBAAyB,gBAAiB,iBAAiBr+T,MAAKosZ,GAA2BhkB,EAAY/pE,gBAAgBC,GAAiB8tF,EAAyB,aAAc,CAAC,YAAa,QAAQpsZ,MAAKqsZ,GAA0BjkB,EAAY/pE,gBAAgBC,GAAiB+tF,EAAwB,YAC1Y,CAm+CW34W,EACT,CAKA,qBAAOsmR,GACL,OAAOA,IACT,CACA,iBAAW59I,GACT,OAAOA,CACT,CACA,qBAAW+kI,GACT,OAAOA,CACT,CACA,uBAAWC,GACT,OAAOA,CACT,CAKA,wBAAWkrG,GACT,OAAKH,GAAII,cAGFJ,GAAII,cAFFttB,EAGX,CAKA,wBAAWqtB,CAAcC,GACvBJ,GAAII,cAAgBA,CACtB,CAMA,WAAA1ja,CAAY+mV,EAAa,CAAC,GAIxB5oW,KAAK4S,YAAS,EAId5S,KAAK4oW,gBAAa,EAClB5oW,KAAKwlb,oBAAiB,EACtBxlb,KAAKylb,wBAAqB,EAC1Bzlb,KAAKqlP,SAAU,EACfrlP,KAAK0lb,SAAW,IAAI76I,GACpB7qS,KAAK2lb,mBAAqB,EAC1B3lb,KAAK4lb,cAAgB,KACrB5lb,KAAKg5Z,mBAAgB,EACrBh5Z,KAAK+ga,sBAAmB,EACxB/ga,KAAK2na,wBAAqB,EAC1B3na,KAAK6lb,uBAAoB,EACzB7lb,KAAK8lb,qBAAkB,EACvB9lb,KAAKqlZ,sBAAmB,EACxBrlZ,KAAK62a,0BAAuB,EAC5B72a,KAAK4ua,6BAA0B,EAC/B5ua,KAAK23a,mBAAgB,EACrB33a,KAAK43a,oBAAiB,EACtB53a,KAAK+lb,OAAS,KACd/lb,KAAK+U,IAAM,KACX/U,KAAKgmb,yBAAsB,EAz11B/B,SAAoBxrG,EAAa3uV,GAE/B,GAAuB,kBAAZuU,UAAwC,IAAhBo6U,GAA+C,kBAAhBA,EAA0B,CAC1FD,EAAsBC,EAGtB,QAAS,MAAO,OAAQ,OAAQ,SAGhC,IACEF,EAAe95U,IAAI,2BAA2B3U,8BAChD,CAAE,MAAOvR,GACPggW,EAAiBD,CACnB,CACF,MACEC,EAAiBD,CAErB,CAy01BI4rG,CAAWr9E,EAAWvoW,QAAS,EAAO,gBACtC,MAAMuS,EAAS5S,KAAK4S,OAj6ExB,SAAqB2ya,EAAe38E,GAClC,IAAKA,EAAWF,uBAAyBE,EAAWL,+BAAiCK,EAAWH,kBAAoBG,EAAWN,wBAC7H,MAAM,IAAI5kW,MAAM,qIAElB,QAA+C9K,IAA3CgwW,EAAWL,mCAAmF3vW,IAArCgwW,EAAWF,uBAAuCE,EAAWL,6BAA+BK,EAAWF,uBAClK,MAAM,IAAIhlW,MAAM,qGAElB,QAA0C9K,IAAtCgwW,EAAWN,8BAAyE1vW,IAAhCgwW,EAAWH,kBAAkCG,EAAWN,wBAA0BM,EAAWH,kBACnJ,MAAM,IAAI/kW,MAAM,2FAElB,MAAMwib,EAAevK,GAAQ4J,GAIvBY,EAAqB,CAAC,UAAW,WAAY,aAAc,mBAsCjE,MAvC+B,CAAC,WAAY,QAAS,QAE9Bvjc,SAAQ5E,IAC7B,MAAMooc,EAAa,GAAY,UAATpoc,EAAmB,WAAaA,cAChDqoc,OAA0Cztb,IAA3BgwW,EAAWw9E,GAC1BE,EAAS,GACfH,EAAmBvjc,SAAQ07Z,IACzB,MAAMioC,EAAoB,GAAGvoc,WAAcsga,IACrClka,EAAQwuX,EAAW29E,GACzB,QAAc3tb,IAAVxe,GAAuBisc,EAAc,CACvCC,EAAOjrc,KAAKkrc,GACZ,MAAM1mL,EAAWqmL,EAAaE,GAAY7gZ,QAI1C,OAHAqjU,EAAWw9E,GAAc,CACvB7gZ,QAASs6N,GAEHy+I,GACN,IAAK,UACHz+I,EAASuhG,cAAgBhnX,EACzBylR,EAASshG,qBAAuB/mX,EAChC,MACF,IAAK,WACHylR,EAAS+gG,WAAWY,YAAcpnX,EAClCylR,EAAS8gG,aAAaa,YAAcpnX,EACpC,MACF,IAAK,aACHylR,EAAS+gG,WAAWa,aAAernX,EACnCylR,EAAS8gG,aAAac,aAAernX,EACrC,MACF,IAAK,kBACHylR,EAAS+gG,WAAWe,gBAAkBvnX,EACtCylR,EAAS8gG,aAAagB,gBAAkBvnX,EAG9C,KAEEksc,EAAO9sc,QACTylB,EAAOyO,KAAK,mBAAmB44a,EAAO1nb,KAAK,4CAA4Cwnb,OAAgB5gb,KAAKC,UAAUmjW,EAAWw9E,MACnI,IAEKv2Q,EAAeA,EAAe,CAAC,EAAGq2Q,GAAet9E,EAC1D,CA42EiC49E,CAAYrB,GAAIG,cAAe18E,GAC5D5oW,KAAK4oW,WAAaA,EACdh2V,EAAO+4W,aACTiwD,GAAoBhpa,GAItB,MACEomZ,cAAeytB,EACf1lB,iBAAkB2lB,EAClB/e,mBAAoBgf,EACpB/e,gBAAiBgf,EACjB3c,cAAe4c,GACbj0a,EACEg1Z,EAAkB,IAAIgf,EAAsB5mb,MAC5Cg5Z,EAAgBh5Z,KAAKg5Z,cAAgB,IAAIytB,EAAoBzmb,MAC7D+ga,EAAmB/ga,KAAK+ga,iBAAmB,IAAI2lB,EAAuB1mb,MACtE2na,EAAqB3na,KAAK2na,mBAAqB,IAAIgf,EAAyB3mb,MAC5Eiqa,EAAgB,IAAI4c,EAAoB7mb,MACxC8mb,EAAiB,IAAIhoF,GAAe9+V,MACpC+mb,EAAqB,IAAIlhF,GAAmB7lW,MAC5Cgnb,EAAkCp0a,EAAO2ma,0BAEzCxgF,EAAkBiuF,EAAkC,IAAIA,EAAgChnb,MAAQ,KAChG8lb,EAAkB9lb,KAAK8lb,gBAAkB,IAAI7J,GAAgBj8a,KAAM+4V,GAEnE2tB,EAAkB,IAAIvN,GAAgBn5W,MACtCy9U,EAAY,IAAI2hG,GAAUp/a,KAAK4S,QAC/ByyY,EAAmBrlZ,KAAKqlZ,iBAAmB,IAAI68B,GAAiBlib,KAAM0mX,EAAiBjpC,GAG7FkqF,EAAmBriB,oBAAoBD,GAEvC4kB,EAAc3kB,oBAAoBD,GAClC,MAAMogC,EAAqB,CAACqB,EAAgBhB,EAAiBzgC,GACzDtsD,GACF0sF,EAAmBvlW,OAAO,EAAG,EAAG64Q,GAElC/4V,KAAKylb,mBAAqBA,EAC1B,MAAMD,EAAiB,CAACxsB,EAAe+H,EAAkB4G,EAAoBsC,EAAe8c,EAAoBrgE,GAChH1mX,KAAK62a,qBAAuB72a,KAAKinb,iBAAiBr0a,EAAOika,qBAAsB4O,GAC/E,MAAMyB,EAA6Bt0a,EAAO2ha,sBACtC2S,GACFzB,EAAmBpqc,KAAK,IAAI6rc,EAA2Blnb,KAAM0mX,EAAiBjpC,IAGhFz9U,KAAK4ua,wBAA0B5ua,KAAKinb,iBAAiBr0a,EAAOg8Z,wBAAyB6W,GACrF,MAAM0B,EAAgCv0a,EAAOw6Z,yBACzC+Z,GACF1B,EAAmBpqc,KAAK,IAAI8rc,EAA8Bnnb,KAAM0mX,EAAiBjpC,IAEnFz9U,KAAKinb,iBAAiBr0a,EAAO+pY,mBAAoB6oC,GACjD/nG,EAAUk6F,cAAgB33a,KAAK23a,cAAgB33a,KAAKinb,iBAAiBr0a,EAAO+ka,cAAe6N,GAC3Fxlb,KAAK43a,eAAiB53a,KAAKinb,iBAAiBr0a,EAAOgla,eAAgB4N,GACnExlb,KAAK6lb,kBAAoB7lb,KAAKinb,iBAAiBl/E,GAAmBy9E,GAClExlb,KAAKwlb,eAAiBA,EAItBC,EAAmBpqc,KAAKusb,GACxB,MAAMG,EAAaH,EAAgBG,WACT,oBAAfA,GACT/na,KAAKyyB,GAAG2iL,EAAO5yI,MAAOulW,EAAYH,EAEtC,CACA,gBAAAqf,CAAiBG,EAAiBz5W,GAChC,GAAIy5W,EAAiB,CACnB,MAAMC,EAAqB,IAAID,EAAgBpnb,MAI/C,OAHI2tE,GACFA,EAAWtyF,KAAKgsc,GAEXA,CACT,CACA,OAAO,IACT,CAGA,EAAA50Z,CAAGjuC,EAAOg8B,EAAU1hB,EAAUkB,MAC5BA,KAAK0lb,SAASjzZ,GAAGjuC,EAAOg8B,EAAU1hB,EACpC,CACA,IAAA4/G,CAAKl6H,EAAOg8B,EAAU1hB,EAAUkB,MAC9BA,KAAK0lb,SAAShnU,KAAKl6H,EAAOg8B,EAAU1hB,EACtC,CACA,kBAAA4wJ,CAAmBlrK,GACjBwb,KAAK0lb,SAASh2R,mBAAmBlrK,EACnC,CACA,GAAA8vJ,CAAI9vJ,EAAOg8B,EAAU1hB,EAAUkB,KAAM0+G,GACnC1+G,KAAK0lb,SAASpxS,IAAI9vJ,EAAOg8B,EAAU1hB,EAAS4/G,EAC9C,CACA,SAAA6wC,CAAU/qK,GACR,OAAOwb,KAAK0lb,SAASn2R,UAAU/qK,EACjC,CACA,IAAAqvY,CAAKrvY,EAAOI,EAAM0ic,GAChB,OAAOtnb,KAAK0lb,SAAS7xD,KAAKrvY,EAAOI,EAAM0ic,EACzC,CACA,OAAAt8I,CAAQxmT,EAAO8ic,GACb,GAAItnb,KAAK4S,OAAOvS,MACd,OAAOL,KAAK6zX,KAAKrvY,EAAOA,EAAO8ic,GAE/B,IACE,OAAOtnb,KAAK6zX,KAAKrvY,EAAOA,EAAO8ic,EACjC,CAAE,MAAO5jc,GAGP,GAFAub,EAAOvb,MAAM,mDAAqDc,EAAQ,qBAAuBd,EAAMmF,QAAU,2BAA4BnF,IAExIsc,KAAKgmb,oBAAqB,CAC7Bhmb,KAAKgmb,qBAAsB,EAC3B,MAAMzrJ,EAAQ/1S,IAAU4wN,EAAO5yI,MAC/BxiE,KAAKgrS,QAAQ51F,EAAO5yI,MAAO,CACzBxkF,KAAMm8V,EAAW+xC,YACjBprB,QAAS1mB,EAAa+xC,mBACtB5xF,QACA/1S,QACAd,UAEFsc,KAAKgmb,qBAAsB,CAC7B,CACF,CAEF,OAAO,CACT,CACA,aAAAn1C,CAAcrsZ,GACZ,OAAOwb,KAAK0lb,SAAS70C,cAAcrsZ,EACrC,CAKA,OAAAwmJ,GACE/rI,EAAOuB,IAAI,WACXR,KAAKgrS,QAAQ51F,EAAOmyO,gBAAY3ub,GAChCoH,KAAKwnb,cACLxnb,KAAK0vJ,qBACL1vJ,KAAK2lb,mBAAqB,EAC1B3lb,KAAK+U,IAAM,KACX/U,KAAKylb,mBAAmB7ic,SAAQmqB,GAAaA,EAAUi+H,YACvDhrI,KAAKylb,mBAAmBjsc,OAAS,EACjCwmB,KAAKwlb,eAAe5ic,SAAQmqB,GAAaA,EAAUi+H,YACnDhrI,KAAKwlb,eAAehsc,OAAS,EAE7B,MAAMo5B,EAAS5S,KAAK4S,OACpBA,EAAO0iZ,SAAW1iZ,EAAO6jZ,gBAAa79Z,EAEtCoH,KAAK4oW,WAAa,IACpB,CAKA,WAAA6+E,CAAY1yN,GACV91N,EAAOuB,IAAI,eACXR,KAAK+lb,OAAShxN,EACd/0N,KAAKgrS,QAAQ51F,EAAOuwM,gBAAiB,CACnC5wL,MAAOA,GAEX,CAKA,WAAAyyN,GACEvob,EAAOuB,IAAI,eACXR,KAAKgrS,QAAQ51F,EAAOgxJ,qBAAiBxtW,GACrCoH,KAAK+lb,OAAS,IAChB,CAKA,UAAA2B,CAAW3ya,GACT/U,KAAKo/V,WACL,MAAMrqI,EAAQ/0N,KAAK+0N,MACb4yN,EAAe3nb,KAAK+U,IACpB6ya,EAAgB5nb,KAAK+U,IAAMklU,EAAkBhB,iBAAiBjqU,KAAK9O,SAAS5a,KAAMyvB,EAAK,CAC3FqkU,iBAAiB,IAEnBp5U,KAAK2lb,mBAAqB,EAC1B3lb,KAAK4lb,cAAgB,KACrB3mb,EAAOuB,IAAI,cAAconb,KACrB7yN,GAAS4yN,IAAiBA,IAAiBC,GAAiB5nb,KAAK+ga,iBAAiBqB,oBACpFpia,KAAKwnb,cACLxnb,KAAKynb,YAAY1yN,IAGnB/0N,KAAKgrS,QAAQ51F,EAAOkqJ,iBAAkB,CACpCvqV,IAAKA,GAET,CASA,SAAAmqV,CAAUC,GAAgB,GACxBlgW,EAAOuB,IAAI,aAAa2+V,MACxBn/V,KAAKqlP,SAAU,EACfrlP,KAAK6nX,kBACL,IAAK,IAAItuY,EAAI,EAAGA,EAAIymB,KAAKylb,mBAAmBjsc,SAC1CwmB,KAAKylb,mBAAmBlsc,GAAG2lX,UAAUC,GAChCn/V,KAAKqlP,SAAYrlP,KAAKylb,oBAFuBlsc,KAMtD,CAKA,QAAA6lX,GACEngW,EAAOuB,IAAI,YACXR,KAAKqlP,SAAU,EACf,IAAK,IAAI9rQ,EAAI,EAAGA,EAAIymB,KAAKylb,mBAAmBjsc,SAC1CwmB,KAAKylb,mBAAmBlsc,GAAG6lX,YACvBp/V,KAAKqlP,SAAYrlP,KAAKylb,oBAFwBlsc,KAMtD,CAKA,eAAAsuY,GACE5oX,EAAOuB,IAAI,oBACXR,KAAKylb,mBAAmB7ic,SAAQoqS,IAC1BA,EAAW66F,iBACb76F,EAAW66F,iBACb,GAEJ,CAMA,cAAAD,GACE3oX,EAAOuB,IAAI,mBACXR,KAAKylb,mBAAmB7ic,SAAQoqS,IAC1BA,EAAW46F,gBACb56F,EAAW46F,gBACb,GAEJ,CAKA,cAAA68D,GACExlb,EAAOuB,IAAI,kBACXR,KAAKqlZ,iBAAiBo/B,gBACxB,CAQA,iBAAA3a,GACE7qa,EAAOuB,IAAI,qBACX,MAAMu0N,EAAQ/0N,KAAK+lb,OACnB/lb,KAAKwnb,cACDzyN,GACF/0N,KAAKynb,YAAY1yN,EAErB,CACA,WAAA4rM,CAAYn9D,GACVxjW,KAAK8lb,gBAAgBnlB,YAAYn9D,EACnC,CAKA,UAAIxK,GACF,MAAMA,EAASh5V,KAAK8lb,gBAAgB9sF,OACpC,OAAOA,GAAkB,EAC3B,CAKA,gBAAIiyE,GACF,OAAOjra,KAAKqlZ,iBAAiB4lB,YAC/B,CAKA,gBAAIA,CAAawT,GACfx/a,EAAOuB,IAAI,oBAAoBi+a,KAC/Bz+a,KAAK8lb,gBAAgBhH,YAAcL,EACnCz+a,KAAKqlZ,iBAAiBi+B,sBACxB,CAKA,aAAI/7B,GACF,OAAOvnZ,KAAKqlZ,iBAAiBkC,SAC/B,CAQA,aAAIA,CAAUk3B,GACZx/a,EAAOuB,IAAI,iBAAiBi+a,KAC5Bz+a,KAAK8lb,gBAAgBhH,YAAcL,EACnCz+a,KAAKqlZ,iBAAiBsB,iBACxB,CAKA,aAAIyX,GACF,OAAOp+Z,KAAK8lb,gBAAgB5iN,KAC9B,CAQA,aAAIk7L,CAAUqgB,GACZx/a,EAAOuB,IAAI,iBAAiBi+a,KAC5Bz+a,KAAK8lb,gBAAgBhH,YAAcL,CACrC,CAKA,iBAAIhkB,GACF,OAAOz6Z,KAAK8lb,gBAAgBrrB,aAC9B,CAMA,iBAAIA,CAAcv3L,GAChBljO,KAAK8lb,gBAAgBrrB,cAAgBv3L,CACvC,CAMA,cAAIgiL,GACF,OAAOv1Y,KAAKhT,IAAIqD,KAAK8lb,gBAAgB5gC,WAAYllZ,KAAK85Z,aACxD,CAKA,cAAI5U,CAAWu5B,GACbx/a,EAAOuB,IAAI,kBAAkBi+a,KAC7Bz+a,KAAK8lb,gBAAgB5gC,WAAau5B,CACpC,CAQA,cAAI9lB,GACF,MAAMA,EAAa34Z,KAAK8lb,gBAAgBntB,WACxC,OAAoB,IAAhBA,GAAqB34Z,KAAKg5Z,cAAcmE,iBAAmB,EACtDn9Z,KAAKg5Z,cAAcmE,gBAErBxE,CACT,CAQA,cAAIA,CAAW8lB,GACbx/a,EAAOuB,IAAI,kBAAkBi+a,MAEX,IAAdA,IACFA,EAAW9ua,KAAKhT,IAAI8hb,EAAUz+a,KAAK85Z,eAErC95Z,KAAK8lb,gBAAgBntB,WAAa8lB,CACpC,CAMA,wBAAIl4B,GACF,OAAOvmZ,KAAK4S,OAAO2zY,oBACrB,CAKA,wBAAIA,CAAqBshC,GACvB,MAAMC,IAA4BD,EAC9BC,IAA4B9nb,KAAK4S,OAAO2zY,uBACtCuhC,EACF9nb,KAAK2na,mBAAmBnhB,gBAExBxmZ,KAAK2na,mBAAmBniB,cACxBxlZ,KAAKilZ,kBAAoB,EACzBjlZ,KAAKqlZ,iBAAiBsB,mBAExB3mZ,KAAK4S,OAAO2zY,qBAAuBuhC,EAEvC,CAKA,oBAAI7iC,GACF,OAAOjlZ,KAAK2lb,iBACd,CAKA,qBAAIvM,GACF,MAAM,YACJ1f,GACE15Z,KAAKg5Z,cACT,OAAKU,EAGEA,EAAY/lD,cAFV/mU,GAGX,CACA,qBAAIwsY,CAAkBje,GACpBn7Z,KAAKg5Z,cAAcgC,eAAeG,EACpC,CAMA,gBAAInB,GACF,MAAM,YACJN,GACE15Z,KAAKg5Z,cACT,OAAKU,EAGEA,EAAY1kD,kBAFVpoU,GAGX,CAKA,oBAAIq4W,CAAiBw5B,GACfz+a,KAAK2lb,oBAAsBlH,IAC7Bx/a,EAAOuB,IAAI,wBAAwBi+a,KACnCz+a,KAAK2lb,kBAAoBlH,EACzBz+a,KAAK8lb,gBAAgB3G,sBAEzB,CACA,gBAAInV,GACF,OAAOhqa,KAAK4lb,aACd,CACA,gBAAI5b,CAAa5vb,IAt2tBnB,SAAqBA,GACnB,OAAO0vX,GAAW1uX,QAAQhB,IAAU,CACtC,EAq2tBQ2tc,CAAY3tc,IAAU4lB,KAAK4lb,gBAAkBxrc,IAC/C4lB,KAAK4lb,cAAgBxrc,EACrB4lB,KAAK8lb,gBAAgB3G,sBAEzB,CAKA,oBAAIvlB,GACF,OAA6C,IAAtC55Z,KAAK8lb,gBAAgBhH,WAC9B,CAKA,eAAIA,GACF,OAAO9+a,KAAK8lb,gBAAgBhH,WAC9B,CAKA,gBAAIhlB,GACF,MAAM,OACJ9gE,EACApmV,QAAQ,eACN44Z,IAEAxra,KACJ,IAAKg5V,EAAQ,OAAO,EACpB,MAAMn9V,EAAMm9V,EAAOx/W,OACnB,IAAK,IAAID,EAAI,EAAGA,EAAIsiB,EAAKtiB,IACvB,GAAIy/W,EAAOz/W,GAAG4xX,YAAcqgE,EAC1B,OAAOjyb,EAGX,OAAO,CACT,CAKA,gBAAIsjb,GACF,MAAM,OACJ7jE,EAAM,iBACNisD,EAAgB,aAChB+kB,GACEhqa,KACJ,IAAI68Z,EAMJ,GAJEA,GADwB,IAAtB5X,GAAqC,MAAVjsD,GAAkBA,EAAOx/W,OACvCw/W,EAAOx/W,OAAS,EAEhByra,EAEb+kB,EACF,IAAK,IAAIzwb,EAAIsjb,EAActjb,KAAM,CAC/B,MAAMmvb,EAAY1vE,EAAOz/W,GAAG+sJ,MAAM,cAClC,GAAIoiS,GAAaA,GAAasB,EAC5B,OAAOzwb,CAEX,CAEF,OAAOsjb,CACT,CACA,kBAAID,GACF,OAAO58Z,KAAKg5Z,cAAc4D,cAC5B,CAKA,iBAAI/B,GACF,OAAO76Z,KAAKg5Z,cAAc6B,aAC5B,CASA,iBAAIA,CAActT,GAChBvnZ,KAAKg5Z,cAAc6B,cAAgBtT,CACrC,CAKA,eAAIygC,GACF,OAAOhob,KAAKqlZ,iBAAiB4/B,sBAC/B,CACA,yBAAI7yE,GACF,OAAOpyW,KAAKqlZ,iBAAiB29B,sBAC/B,CAMA,cAAA9L,CAAeC,GACb,IAAI8Q,EACJ,OAA8D,OAAtDA,EAAwBjob,KAAK62a,2BAAgC,EAASoR,EAAsB/Q,eAAeC,EACrH,CAKA,iBAAA9G,CAAkBC,GAChB,IAAI4X,EAEJ,OAD0D,OAAzDA,EAAwBlob,KAAK4ua,0BAA4CsZ,EAAsB7X,kBAAkBC,GAC3G,IACT,CAKA,kBAAI/R,GACF,MAAMsY,EAAuB72a,KAAK62a,qBAClC,OAAOA,EAAuBA,EAAqBtY,eAAiB,EACtE,CAKA,eAAIx9D,GACF,MAAM81E,EAAuB72a,KAAK62a,qBAClC,OAAOA,EAAuBA,EAAqB91E,YAAc,EACnE,CAKA,cAAIwB,GACF,MAAMs0E,EAAuB72a,KAAK62a,qBAClC,OAAOA,EAAuBA,EAAqBt0E,YAAc,CACnE,CAKA,cAAIA,CAAW4lF,GACb,MAAMtR,EAAuB72a,KAAK62a,qBAC9BA,IACFA,EAAqBt0E,WAAa4lF,EAEtC,CAKA,qBAAIhY,GACF,MAAMvB,EAA0B5ua,KAAK4ua,wBACrC,OAAOA,EAA0BA,EAAwBuB,kBAAoB,EAC/E,CAKA,kBAAInvE,GACF,MAAM4tE,EAA0B5ua,KAAK4ua,wBACrC,OAAOA,EAA0BA,EAAwB5tE,eAAiB,EAC5E,CAKA,iBAAI0yC,GACF,MAAMk7B,EAA0B5ua,KAAK4ua,wBACrC,OAAOA,EAA0BA,EAAwBl7B,eAAiB,CAC5E,CACA,SAAI3+K,GACF,OAAO/0N,KAAK+lb,MACd,CAKA,iBAAIryC,CAAc00C,GAChB,MAAMxZ,EAA0B5ua,KAAK4ua,wBACjCA,IACFA,EAAwBl7B,cAAgB00C,EAE5C,CAKA,mBAAI3Y,GACF,MAAMb,EAA0B5ua,KAAK4ua,wBACrC,QAAOA,GAA0BA,EAAwBa,eAC3D,CAKA,mBAAIA,CAAgBr1b,GAClB,MAAMw0b,EAA0B5ua,KAAK4ua,wBACjCA,IACFA,EAAwBa,gBAAkBr1b,EAE9C,CAKA,kBAAIuuX,GACF,OAAO3oW,KAAK4S,OAAO+1V,cACrB,CAKA,kBAAIA,CAAex7W,GACjB6S,KAAK4S,OAAO+1V,eAAiBx7W,CAC/B,CAMA,oBAAI27W,GACF,OAAO9oW,KAAK6lb,kBAAkB/8E,gBAChC,CAMA,WAAIV,GACF,OAAOpoW,KAAK6lb,kBAAkBz9E,OAChC,CAOA,cAAIC,GACF,OAAOroW,KAAK6lb,kBAAkBx9E,UAChC,CAKA,iBAAIG,GACF,OAAOxoW,KAAK6lb,kBAAkBr9E,aAChC,CAKA,SAAI7lB,GACF,OAAO3iV,KAAK6lb,kBAAkBljG,KAChC,CAKA,kBAAI67F,GACF,OAAOx+a,KAAKqlZ,iBAAiBm5B,cAC/B,EAEF2G,GAAII,mBAAgB,wGC/73BpB,KAAe,WAA2B,sECJnC,MAAM8C,EAAgB,CAC3BnxZ,OAAQ,CAAC,QACTy7L,KAAM,CAAC,aAAc,MAAO,MAAO,KACnC/oO,KAAM,CAAC,UACP8pO,WAAY,CAAC,SAAU,SACvBpuO,KAAM,CAAC,IAAK,OAAQ,OAAQ,QAC5BrF,KAAM,CAAC,YACPw2I,OAAQ,KACRm+F,SAAU,CAAC,QACX0gE,KAAM,CAAC,IAAK,QACZhgE,OAAQ,CAAC,SACTzyO,IAAK,CACH,QACA,QACA,SACA,MACA,QACA,SACA,SACA,QACA,sGC5BJ,MAAMylc,EAAgB,CACpBtqc,KAAM,SACN,GAAAwiB,CAAInnB,GACF2mB,KAAK4kB,OAAO,MAAOvrC,EACrB,EACA,IAAAq0B,CAAKr0B,GACH2mB,KAAK4kB,OAAO,OAAQvrC,EACtB,EACA,KAAAqK,CAAMrK,GACJ2mB,KAAK4kB,OAAO,QAASvrC,EACvB,EACA,MAAAurC,CAAO5mC,EAAM3E,GACP+mB,SAAWA,QAAQpiB,IAAOoiB,QAAQpiB,GAAM+hB,MAAMK,QAAS/mB,EAC7D,GAEF,MAAMuuR,EACJ,WAAA/lP,CAAY0ma,GACV,IAAIhoc,EAAUof,UAAUnmB,OAAS,QAAsBof,IAAjB+G,UAAU,GAAmBA,UAAU,GAAK,CAAC,EACnFK,KAAKkxH,KAAKq3T,EAAgBhoc,EAC5B,CACA,IAAA2wI,CAAKq3T,GACH,IAAIhoc,EAAUof,UAAUnmB,OAAS,QAAsBof,IAAjB+G,UAAU,GAAmBA,UAAU,GAAK,CAAC,EACnFK,KAAKuiC,OAAShiD,EAAQgiD,QAAU,WAChCviC,KAAKf,OAASspb,GAAkBD,EAChCtob,KAAKzf,QAAUA,EACfyf,KAAKK,MAAQ9f,EAAQ8f,KACvB,CACA,GAAAG,GACE,IAAK,IAAIiZ,EAAO9Z,UAAUnmB,OAAQH,EAAO,IAAIO,MAAM6/B,GAAOC,EAAO,EAAGA,EAAOD,EAAMC,IAC/ErgC,EAAKqgC,GAAQ/Z,UAAU+Z,GAEzB,OAAO1Z,KAAKwob,QAAQnvc,EAAM,MAAO,IAAI,EACvC,CACA,IAAAq0B,GACE,IAAK,IAAI+6a,EAAQ9ob,UAAUnmB,OAAQH,EAAO,IAAIO,MAAM6uc,GAAQC,EAAQ,EAAGA,EAAQD,EAAOC,IACpFrvc,EAAKqvc,GAAS/ob,UAAU+ob,GAE1B,OAAO1ob,KAAKwob,QAAQnvc,EAAM,OAAQ,IAAI,EACxC,CACA,KAAAqK,GACE,IAAK,IAAIilc,EAAQhpb,UAAUnmB,OAAQH,EAAO,IAAIO,MAAM+uc,GAAQC,EAAQ,EAAGA,EAAQD,EAAOC,IACpFvvc,EAAKuvc,GAASjpb,UAAUipb,GAE1B,OAAO5ob,KAAKwob,QAAQnvc,EAAM,QAAS,GACrC,CACA,SAAAwvc,GACE,IAAK,IAAIC,EAAQnpb,UAAUnmB,OAAQH,EAAO,IAAIO,MAAMkvc,GAAQC,EAAQ,EAAGA,EAAQD,EAAOC,IACpF1vc,EAAK0vc,GAASppb,UAAUopb,GAE1B,OAAO/ob,KAAKwob,QAAQnvc,EAAM,OAAQ,wBAAwB,EAC5D,CACA,OAAAmvc,CAAQnvc,EAAM2vc,EAAKzmZ,EAAQ0mZ,GACzB,OAAIA,IAAcjpb,KAAKK,MAAc,MACd,kBAAZhnB,EAAK,KAAiBA,EAAK,GAAK,GAAGkpD,IAASviC,KAAKuiC,UAAUlpD,EAAK,MACpE2mB,KAAKf,OAAO+pb,GAAK3vc,GAC1B,CACA,MAAAuzB,CAAOs8a,GACL,OAAO,IAAIthL,EAAO5nQ,KAAKf,OAAQ,CAE3BsjC,OAAQ,GAAGviC,KAAKuiC,UAAU2mZ,QAEzBlpb,KAAKzf,SAEZ,CACA,KAAAogF,CAAMpgF,GAGJ,OAFAA,EAAUA,GAAWyf,KAAKzf,SAClBgiD,OAAShiD,EAAQgiD,QAAUviC,KAAKuiC,OACjC,IAAIqlO,EAAO5nQ,KAAKf,OAAQ1e,EACjC,EAEF,IAAI4oc,EAAa,IAAIvhL,EAErB,MAAMijC,EACJ,WAAAhpR,GACE7hB,KAAK2uB,UAAY,CAAC,CACpB,CACA,EAAA8D,CAAGhiB,EAAQ+P,GAKT,OAJA/P,EAAO1M,MAAM,KAAKnhB,SAAQ4B,IACxBwb,KAAK2uB,UAAUnqC,GAASwb,KAAK2uB,UAAUnqC,IAAU,GACjDwb,KAAK2uB,UAAUnqC,GAAOnJ,KAAKmlC,EAAS,IAE/BxgB,IACT,CACA,GAAAs0I,CAAI9vJ,EAAOg8B,GACJxgB,KAAK2uB,UAAUnqC,KACfg8B,EAILxgB,KAAK2uB,UAAUnqC,GAASwb,KAAK2uB,UAAUnqC,GAAOwf,QAAO8sB,GAAKA,IAAMtQ,WAHvDxgB,KAAK2uB,UAAUnqC,GAI1B,CACA,IAAAqvY,CAAKrvY,GACH,IAAK,IAAIi1B,EAAO9Z,UAAUnmB,OAAQH,EAAO,IAAIO,MAAM6/B,EAAO,EAAIA,EAAO,EAAI,GAAIC,EAAO,EAAGA,EAAOD,EAAMC,IAClGrgC,EAAKqgC,EAAO,GAAK/Z,UAAU+Z,GAE7B,GAAI1Z,KAAK2uB,UAAUnqC,GAAQ,CACV,GAAGuX,OAAOiE,KAAK2uB,UAAUnqC,IACjC5B,SAAQqsC,IACbA,KAAY51C,EAAK,GAErB,CACA,GAAI2mB,KAAK2uB,UAAU,KAAM,CACR,GAAG5yB,OAAOiE,KAAK2uB,UAAU,MACjC/rC,SAAQqsC,IACbA,EAASlvB,MAAMkvB,EAAU,CAACzqC,KAAUnL,GAAM,GAE9C,CACF,EAGF,SAASijI,IACP,IAAInwF,EACAi9Z,EACJ,MAAMtoa,EAAU,IAAI3B,SAAQ,CAACC,EAASC,KACpC8M,EAAM/M,EACNgqa,EAAM/pa,CAAM,IAId,OAFAyB,EAAQ1B,QAAU+M,EAClBrL,EAAQzB,OAAS+pa,EACVtoa,CACT,CACA,SAASuoa,EAAW1iZ,GAClB,OAAc,MAAVA,EAAuB,GACpB,GAAKA,CACd,CAMA,SAAS2iZ,EAAc3iZ,EAAQjhD,EAAM6jc,GACnC,SAASC,EAAStvc,GAChB,OAAOA,GAAOA,EAAIkB,QAAQ,QAAU,EAAIlB,EAAIgM,QAAQ,OAAQ,KAAOhM,CACrE,CACA,SAASuvc,IACP,OAAQ9iZ,GAA4B,kBAAXA,CAC3B,CACA,MAAMrjC,EAAwB,kBAAT5d,EAAoB,GAAGqW,OAAOrW,GAAQA,EAAKqe,MAAM,KACtE,KAAOT,EAAM9pB,OAAS,GAAG,CACvB,GAAIiwc,IAAwB,MAAO,CAAC,EACpC,MAAMvvc,EAAMsvc,EAASlmb,EAAM2B,UACtB0hC,EAAOzsD,IAAQqvc,IAAO5iZ,EAAOzsD,GAAO,IAAIqvc,GAE3C5iZ,EADE5sD,OAAOC,UAAUb,eAAegB,KAAKwsD,EAAQzsD,GACtCysD,EAAOzsD,GAEP,CAAC,CAEd,CACA,OAAIuvc,IAA+B,CAAC,EAC7B,CACLttb,IAAKwqC,EACL3oC,EAAGwrb,EAASlmb,EAAM2B,SAEtB,CACA,SAAS22D,EAAQj1B,EAAQjhD,EAAM46E,GAC7B,MAAM,IACJnkE,EAAG,EACH6B,GACEsrb,EAAc3iZ,EAAQjhD,EAAM3L,QAChCoiB,EAAI6B,GAAKsiE,CACX,CAUA,SAASk9P,EAAQ72R,EAAQjhD,GACvB,MAAM,IACJyW,EAAG,EACH6B,GACEsrb,EAAc3iZ,EAAQjhD,GAC1B,GAAKyW,EACL,OAAOA,EAAI6B,EACb,CAQA,SAAS0oB,EAAWhiC,EAAQ2F,EAAQ85Q,GAClC,IAAK,MAAM3nQ,KAAQnS,EACJ,cAATmS,GAAiC,gBAATA,IACtBA,KAAQ9X,EACkB,kBAAjBA,EAAO8X,IAAsB9X,EAAO8X,aAAiBqG,QAAkC,kBAAjBxY,EAAOmS,IAAsBnS,EAAOmS,aAAiBqG,OAChIshQ,IAAWz/Q,EAAO8X,GAAQnS,EAAOmS,IAErCkqB,EAAWhiC,EAAO8X,GAAOnS,EAAOmS,GAAO2nQ,GAGzCz/Q,EAAO8X,GAAQnS,EAAOmS,IAI5B,OAAO9X,CACT,CACA,SAASglc,EAAYjob,GACnB,OAAOA,EAAIvb,QAAQ,sCAAuC,OAC5D,CACA,IAAIyjc,EAAa,CACf,IAAK,QACL,IAAK,OACL,IAAK,OACL,IAAK,SACL,IAAK,QACL,IAAK,UAEP,SAASh0U,EAAO/rH,GACd,MAAoB,kBAATA,EACFA,EAAK1D,QAAQ,cAActL,GAAK+uc,EAAW/uc,KAE7CgP,CACT,CACA,MAAM4sZ,EAAQ,CAAC,IAAK,IAAK,IAAK,IAAK,KAgBnC,SAASozC,EAASztb,EAAKzW,GACrB,IAAImkc,EAAelqb,UAAUnmB,OAAS,QAAsBof,IAAjB+G,UAAU,GAAmBA,UAAU,GAAK,IACvF,IAAKxD,EAAK,OACV,GAAIA,EAAIzW,GAAO,OAAOyW,EAAIzW,GAC1B,MAAM4gB,EAAQ5gB,EAAKqe,MAAM8lb,GACzB,IAAIrrc,EAAU2d,EACd,IAAK,IAAI5iB,EAAI,EAAGA,EAAI+sB,EAAM9sB,SAAUD,EAAG,CACrC,IAAKiF,EAAS,OACd,GAAiC,kBAAtBA,EAAQ8nB,EAAM/sB,KAAoBA,EAAI,EAAI+sB,EAAM9sB,OACzD,OAEF,QAA0Bof,IAAtBpa,EAAQ8nB,EAAM/sB,IAAmB,CACnC,IAAIopB,EAAI,EACJrD,EAAIgH,EAAM/iB,MAAMhK,EAAGA,EAAIopB,GAAG/D,KAAKirb,GAC/BC,EAAMtrc,EAAQ8gB,GAClB,UAAe1G,IAARkxb,GAAqBxjb,EAAM9sB,OAASD,EAAIopB,GAC7CA,IACArD,EAAIgH,EAAM/iB,MAAMhK,EAAGA,EAAIopB,GAAG/D,KAAKirb,GAC/BC,EAAMtrc,EAAQ8gB,GAEhB,QAAY1G,IAARkxb,EAAmB,OACvB,GAAY,OAARA,EAAc,OAAO,KACzB,GAAIpkc,EAAKs7C,SAAS1hC,GAAI,CACpB,GAAmB,kBAARwqb,EAAkB,OAAOA,EACpC,GAAIxqb,GAAuB,kBAAXwqb,EAAIxqb,GAAiB,OAAOwqb,EAAIxqb,EAClD,CACA,MAAMyqb,EAAazjb,EAAM/iB,MAAMhK,EAAIopB,GAAG/D,KAAKirb,GAC3C,OAAIE,EAAmBH,EAASE,EAAKC,EAAYF,QACjD,CACF,CACArrc,EAAUA,EAAQ8nB,EAAM/sB,GAC1B,CACA,OAAOiF,CACT,CACA,SAASwrc,EAAe59a,GACtB,OAAIA,GAAQA,EAAKhxB,QAAQ,KAAO,EAAUgxB,EAAKlmB,QAAQ,IAAK,KACrDkmB,CACT,CAEA,MAAM69a,UAAsBp/I,EAC1B,WAAAhpR,CAAYj4B,GACV,IAAIrJ,EAAUof,UAAUnmB,OAAS,QAAsBof,IAAjB+G,UAAU,GAAmBA,UAAU,GAAK,CAChFo1G,GAAI,CAAC,eACLm1U,UAAW,eAEb9ja,QACApmB,KAAKpW,KAAOA,GAAQ,CAAC,EACrBoW,KAAKzf,QAAUA,OACmBqY,IAA9BoH,KAAKzf,QAAQspc,eACf7pb,KAAKzf,QAAQspc,aAAe,UAEWjxb,IAArCoH,KAAKzf,QAAQ4pc,sBACfnqb,KAAKzf,QAAQ4pc,qBAAsB,EAEvC,CACA,aAAAC,CAAcr1U,GACR/0G,KAAKzf,QAAQw0H,GAAG35H,QAAQ25H,GAAM,GAChC/0G,KAAKzf,QAAQw0H,GAAG15H,KAAK05H,EAEzB,CACA,gBAAAs1U,CAAiBt1U,GACf,MAAMrzH,EAAQse,KAAKzf,QAAQw0H,GAAG35H,QAAQ25H,GAClCrzH,GAAS,GACXse,KAAKzf,QAAQw0H,GAAG70B,OAAOx+F,EAAO,EAElC,CACA,WAAA4oc,CAAYC,EAAKx1U,EAAI76H,GACnB,IAAIqG,EAAUof,UAAUnmB,OAAS,QAAsBof,IAAjB+G,UAAU,GAAmBA,UAAU,GAAK,CAAC,EACnF,MAAMkqb,OAAwCjxb,IAAzBrY,EAAQspc,aAA6Btpc,EAAQspc,aAAe7pb,KAAKzf,QAAQspc,aACxFM,OAAsDvxb,IAAhCrY,EAAQ4pc,oBAAoC5pc,EAAQ4pc,oBAAsBnqb,KAAKzf,QAAQ4pc,oBACnH,IAAIzkc,EAAO,CAAC6kc,EAAKx1U,GACb76H,GAAsB,kBAARA,IAAkBwL,EAAOA,EAAKqW,OAAO7hB,IACnDA,GAAsB,kBAARA,IAAkBwL,EAAOA,EAAKqW,OAAO8tb,EAAe3vc,EAAI6pB,MAAM8lb,GAAgB3vc,IAC5Fqwc,EAAInvc,QAAQ,MAAQ,IACtBsK,EAAO6kc,EAAIxmb,MAAM,MAEnB,MAAMlmB,EAAS2/U,EAAQx9T,KAAKpW,KAAMlE,GAClC,OAAI7H,IAAWssc,GAAsC,kBAARjwc,EAAyB2D,EAC/D+rc,EAAS5pb,KAAKpW,MAAQoW,KAAKpW,KAAK2gc,IAAQvqb,KAAKpW,KAAK2gc,GAAKx1U,GAAK76H,EAAK2vc,EAC1E,CACA,WAAAW,CAAYD,EAAKx1U,EAAI76H,EAAKE,GACxB,IAAImG,EAAUof,UAAUnmB,OAAS,QAAsBof,IAAjB+G,UAAU,GAAmBA,UAAU,GAAK,CAChF6zE,QAAQ,GAEV,MAAMq2W,OAAwCjxb,IAAzBrY,EAAQspc,aAA6Btpc,EAAQspc,aAAe7pb,KAAKzf,QAAQspc,aAC9F,IAAInkc,EAAO,CAAC6kc,EAAKx1U,GACb76H,IAAKwL,EAAOA,EAAKqW,OAAO8tb,EAAe3vc,EAAI6pB,MAAM8lb,GAAgB3vc,IACjEqwc,EAAInvc,QAAQ,MAAQ,IACtBsK,EAAO6kc,EAAIxmb,MAAM,KACjB3pB,EAAQ26H,EACRA,EAAKrvH,EAAK,IAEZsa,KAAKoqb,cAAcr1U,GACnBn5C,EAAQ57D,KAAKpW,KAAMlE,EAAMtL,GACpBmG,EAAQizF,QAAQxzE,KAAK6zX,KAAK,QAAS02D,EAAKx1U,EAAI76H,EAAKE,EACxD,CACA,YAAAqwc,CAAaF,EAAKx1U,EAAI64C,GACpB,IAAIrtK,EAAUof,UAAUnmB,OAAS,QAAsBof,IAAjB+G,UAAU,GAAmBA,UAAU,GAAK,CAChF6zE,QAAQ,GAEV,IAAK,MAAMlyD,KAAKssI,EACc,kBAAjBA,EAAUtsI,IAAqE,mBAAlDvnC,OAAOC,UAAUF,SAASimB,MAAM6tJ,EAAUtsI,KAA0BthB,KAAKwqb,YAAYD,EAAKx1U,EAAIzzF,EAAGssI,EAAUtsI,GAAI,CACrJkyD,QAAQ,IAGPjzF,EAAQizF,QAAQxzE,KAAK6zX,KAAK,QAAS02D,EAAKx1U,EAAI64C,EACnD,CACA,iBAAA88R,CAAkBH,EAAKx1U,EAAI64C,EAAWhtF,EAAMujM,GAC1C,IAAI5jR,EAAUof,UAAUnmB,OAAS,QAAsBof,IAAjB+G,UAAU,GAAmBA,UAAU,GAAK,CAChF6zE,QAAQ,GAEN9tF,EAAO,CAAC6kc,EAAKx1U,GACbw1U,EAAInvc,QAAQ,MAAQ,IACtBsK,EAAO6kc,EAAIxmb,MAAM,KACjB68D,EAAOgtF,EACPA,EAAY74C,EACZA,EAAKrvH,EAAK,IAEZsa,KAAKoqb,cAAcr1U,GACnB,IAAIwjJ,EAAOilE,EAAQx9T,KAAKpW,KAAMlE,IAAS,CAAC,EACpCk7E,EACFl6C,EAAW6xO,EAAM3qG,EAAWu2G,GAE5B5L,EAAO,IACFA,KACA3qG,GAGPhyF,EAAQ57D,KAAKpW,KAAMlE,EAAM6yQ,GACpBh4Q,EAAQizF,QAAQxzE,KAAK6zX,KAAK,QAAS02D,EAAKx1U,EAAI64C,EACnD,CACA,oBAAA+8R,CAAqBJ,EAAKx1U,GACpB/0G,KAAK4qb,kBAAkBL,EAAKx1U,WACvB/0G,KAAKpW,KAAK2gc,GAAKx1U,GAExB/0G,KAAKqqb,iBAAiBt1U,GACtB/0G,KAAK6zX,KAAK,UAAW02D,EAAKx1U,EAC5B,CACA,iBAAA61U,CAAkBL,EAAKx1U,GACrB,YAAqCn8G,IAA9BoH,KAAKsqb,YAAYC,EAAKx1U,EAC/B,CACA,iBAAA81U,CAAkBN,EAAKx1U,GAErB,OADKA,IAAIA,EAAK/0G,KAAKzf,QAAQ2pc,WACW,OAAlClqb,KAAKzf,QAAQuqc,iBAAkC,IAE9C9qb,KAAKsqb,YAAYC,EAAKx1U,IAEpB/0G,KAAKsqb,YAAYC,EAAKx1U,EAC/B,CACA,iBAAAg2U,CAAkBR,GAChB,OAAOvqb,KAAKpW,KAAK2gc,EACnB,CACA,2BAAAS,CAA4BT,GAC1B,MAAM3gc,EAAOoW,KAAK+qb,kBAAkBR,GAEpC,SADU3gc,GAAQ7P,OAAOiC,KAAK4N,IAAS,IAC5Bsc,MAAKjE,GAAKrY,EAAKqY,IAAMloB,OAAOiC,KAAK4N,EAAKqY,IAAIzoB,OAAS,GAChE,CACA,MAAAsnB,GACE,OAAOd,KAAKpW,IACd,EAGF,IAAIqhc,EAAgB,CAClBC,WAAY,CAAC,EACb,gBAAAC,CAAiB/vb,GACf4E,KAAKkrb,WAAW9vb,EAAOxW,MAAQwW,CACjC,EACA,MAAA8jP,CAAOgsM,EAAY9wc,EAAOF,EAAKqG,EAAS6qc,GAItC,OAHAF,EAAWtoc,SAAQyoc,IACbrrb,KAAKkrb,WAAWG,KAAYjxc,EAAQ4lB,KAAKkrb,WAAWG,GAAWrka,QAAQ5sC,EAAOF,EAAKqG,EAAS6qc,GAAW,IAEtGhxc,CACT,GAGF,MAAMkxc,EAAmB,CAAC,EAC1B,MAAMC,UAAmB1gJ,EACvB,WAAAhpR,CAAY2kP,GACV,IAAIjmR,EAAUof,UAAUnmB,OAAS,QAAsBof,IAAjB+G,UAAU,GAAmBA,UAAU,GAAK,CAAC,EACnFymB,QAhSJ,SAAczrC,EAAGC,EAAGL,GAClBI,EAAEiI,SAAQ0+B,IACJ1mC,EAAE0mC,KAAI/mC,EAAE+mC,GAAK1mC,EAAE0mC,GAAE,GAEzB,CA6RIm/C,CAAK,CAAC,gBAAiB,gBAAiB,iBAAkB,eAAgB,mBAAoB,aAAc,SAAU+lM,EAAUxmQ,MAChIA,KAAKzf,QAAUA,OACmBqY,IAA9BoH,KAAKzf,QAAQspc,eACf7pb,KAAKzf,QAAQspc,aAAe,KAE9B7pb,KAAKf,OAASkqb,EAAWv8a,OAAO,aAClC,CACA,cAAA4+a,CAAejB,GACTA,IAAKvqb,KAAKsY,SAAWiya,EAC3B,CACA,MAAA1kH,CAAO3rV,GACL,IAAIqG,EAAUof,UAAUnmB,OAAS,QAAsBof,IAAjB+G,UAAU,GAAmBA,UAAU,GAAK,CAChF8rb,cAAe,CAAC,GAElB,QAAY7yb,IAAR1e,GAA6B,OAARA,EACvB,OAAO,EAET,MAAMsmV,EAAWxgU,KAAKof,QAAQllC,EAAKqG,GACnC,OAAOigV,QAA6B5nU,IAAjB4nU,EAASr0S,GAC9B,CACA,cAAAu/Z,CAAexxc,EAAKqG,GAClB,IAAIorc,OAAsC/yb,IAAxBrY,EAAQorc,YAA4Bprc,EAAQorc,YAAc3rb,KAAKzf,QAAQorc,iBACrE/yb,IAAhB+yb,IAA2BA,EAAc,KAC7C,MAAM9B,OAAwCjxb,IAAzBrY,EAAQspc,aAA6Btpc,EAAQspc,aAAe7pb,KAAKzf,QAAQspc,aAC9F,IAAI+B,EAAarrc,EAAQw0H,IAAM/0G,KAAKzf,QAAQ2pc,WAAa,GACzD,MAAM2B,EAAuBF,GAAezxc,EAAIkB,QAAQuwc,IAAgB,EAClEG,GAAwB9rb,KAAKzf,QAAQwrc,0BAA4Bxrc,EAAQspc,eAAiB7pb,KAAKzf,QAAQyrc,yBAA2Bzrc,EAAQorc,cA7NpJ,SAA6Bzxc,EAAKyxc,EAAa9B,GAC7C8B,EAAcA,GAAe,GAC7B9B,EAAeA,GAAgB,GAC/B,MAAMoC,EAAgBz1C,EAAMxyY,QAAO1oB,GAAKqwc,EAAYvwc,QAAQE,GAAK,GAAKuuc,EAAazuc,QAAQE,GAAK,IAChG,GAA6B,IAAzB2wc,EAAczyc,OAAc,OAAO,EACvC,MAAMiB,EAAI,IAAI4uB,OAAO,IAAI4ib,EAAcnuc,KAAIxC,GAAW,MAANA,EAAY,MAAQA,IAAGsjB,KAAK,SAC5E,IAAI+6C,GAAWl/D,EAAE2kB,KAAKllB,GACtB,IAAKy/D,EAAS,CACZ,MAAMwtD,EAAKjtH,EAAIkB,QAAQyuc,GACnB1iV,EAAK,IAAM1sH,EAAE2kB,KAAKllB,EAAIsB,UAAU,EAAG2rH,MACrCxtD,GAAU,EAEd,CACA,OAAOA,CACT,CA+MoKuyY,CAAoBhyc,EAAKyxc,EAAa9B,GACtM,GAAIgC,IAAyBC,EAAsB,CACjD,MAAMxqa,EAAIpnC,EAAIqpB,MAAMvD,KAAKy0K,aAAa03Q,eACtC,GAAI7qa,GAAKA,EAAE9nC,OAAS,EAClB,MAAO,CACLU,MACA0xc,cAGJ,MAAM/nb,EAAQ3pB,EAAI6pB,MAAM4nb,IACpBA,IAAgB9B,GAAgB8B,IAAgB9B,GAAgB7pb,KAAKzf,QAAQw0H,GAAG35H,QAAQyoB,EAAM,KAAO,KAAG+nb,EAAa/nb,EAAMoB,SAC/H/qB,EAAM2pB,EAAMjF,KAAKirb,EACnB,CAEA,MAD0B,kBAAf+B,IAAyBA,EAAa,CAACA,IAC3C,CACL1xc,MACA0xc,aAEJ,CACA,SAAAzpM,CAAUnmQ,EAAMuE,EAAS6rc,GAQvB,GAPuB,kBAAZ7rc,GAAwByf,KAAKzf,QAAQ8rc,mCAC9C9rc,EAAUyf,KAAKzf,QAAQ8rc,iCAAiC1sb,YAEnC,kBAAZpf,IAAsBA,EAAU,IACtCA,IAEAA,IAASA,EAAU,CAAC,QACZqY,IAAT5c,GAA+B,OAATA,EAAe,MAAO,GAC3CpC,MAAMC,QAAQmC,KAAOA,EAAO,CAAC6mB,OAAO7mB,KACzC,MAAMswc,OAA0C1zb,IAA1BrY,EAAQ+rc,cAA8B/rc,EAAQ+rc,cAAgBtsb,KAAKzf,QAAQ+rc,cAC3FzC,OAAwCjxb,IAAzBrY,EAAQspc,aAA6Btpc,EAAQspc,aAAe7pb,KAAKzf,QAAQspc,cACxF,IACJ3vc,EAAG,WACH0xc,GACE5rb,KAAK0rb,eAAe1vc,EAAKA,EAAKxC,OAAS,GAAI+G,GACzCk/E,EAAYmsX,EAAWA,EAAWpyc,OAAS,GAC3C+wc,EAAMhqc,EAAQgqc,KAAOvqb,KAAKsY,SAC1Bi0a,EAA0Bhsc,EAAQgsc,yBAA2Bvsb,KAAKzf,QAAQgsc,wBAChF,GAAIhC,GAA6B,WAAtBA,EAAI9jb,cAA4B,CACzC,GAAI8lb,EAAyB,CAC3B,MAAMZ,EAAcprc,EAAQorc,aAAe3rb,KAAKzf,QAAQorc,YACxD,OAAIW,EACK,CACLnga,IAAK,GAAGszC,IAAYksX,IAAczxc,IAClCsyc,QAAStyc,EACTuyc,aAAcvyc,EACdwyc,QAASnC,EACToC,OAAQltX,EACRmtX,WAAY5sb,KAAK6sb,qBAAqBtsc,IAGnC,GAAGk/E,IAAYksX,IAAczxc,GACtC,CACA,OAAIoyc,EACK,CACLnga,IAAKjyC,EACLsyc,QAAStyc,EACTuyc,aAAcvyc,EACdwyc,QAASnC,EACToC,OAAQltX,EACRmtX,WAAY5sb,KAAK6sb,qBAAqBtsc,IAGnCrG,CACT,CACA,MAAMsmV,EAAWxgU,KAAKof,QAAQpjC,EAAMuE,GACpC,IAAI4rC,EAAMq0S,GAAYA,EAASr0S,IAC/B,MAAM2ga,EAAatsH,GAAYA,EAASgsH,SAAWtyc,EAC7C6yc,EAAkBvsH,GAAYA,EAASisH,cAAgBvyc,EACvD8yc,EAAUjzc,OAAOC,UAAUF,SAASimB,MAAMosB,GAE1C8ga,OAAoCr0b,IAAvBrY,EAAQ0sc,WAA2B1sc,EAAQ0sc,WAAajtb,KAAKzf,QAAQ0sc,WAClFC,GAA8Bltb,KAAKmtb,YAAcntb,KAAKmtb,WAAWC,eAEvE,GAAIF,GAA8B/ga,IADI,kBAARA,GAAmC,mBAARA,GAAoC,kBAARA,IAHpE,CAAC,kBAAmB,oBAAqB,mBAIU/wC,QAAQ4xc,GAAW,IAA6B,kBAAfC,GAAuC,mBAAZD,GAA+B,CAC7J,IAAKzsc,EAAQ8sc,gBAAkBrtb,KAAKzf,QAAQ8sc,cAAe,CACpDrtb,KAAKzf,QAAQ+sc,uBAChBttb,KAAKf,OAAOyO,KAAK,mEAEnB,MAAMjzB,EAAIulB,KAAKzf,QAAQ+sc,sBAAwBttb,KAAKzf,QAAQ+sc,sBAAsBR,EAAY3ga,EAAK,IAC9F5rC,EACHw0H,GAAI62U,IACD,QAAQ1xc,MAAQ8lB,KAAKsY,mDAC1B,OAAIg0a,GACF9rH,EAASr0S,IAAM1xC,EACf+lV,EAASosH,WAAa5sb,KAAK6sb,qBAAqBtsc,GACzCigV,GAEF/lV,CACT,CACA,GAAIovc,EAAc,CAChB,MAAM0D,EAA6B,mBAAZP,EACjBvsX,EAAO8sX,EAAiB,GAAK,CAAC,EAC9BC,EAAcD,EAAiBR,EAAkBD,EACvD,IAAK,MAAMxra,KAAK6K,EACd,GAAIpyC,OAAOC,UAAUb,eAAegB,KAAKgyC,EAAK7K,GAAI,CAChD,MAAMmsa,EAAU,GAAGD,IAAc3D,IAAevoa,IAChDm/C,EAAKn/C,GAAKthB,KAAKmiP,UAAUsrM,EAAS,IAC7Bltc,EAED0sc,YAAY,EACZl4U,GAAI62U,IAGJnrX,EAAKn/C,KAAOmsa,IAAShtX,EAAKn/C,GAAK6K,EAAI7K,GACzC,CAEF6K,EAAMs0C,CACR,CACF,MAAO,GAAIysX,GAAoD,kBAAfD,GAAuC,mBAAZD,EACzE7ga,EAAMA,EAAIvtB,KAAKqub,GACX9ga,IAAKA,EAAMnsB,KAAK0tb,kBAAkBvha,EAAKnwC,EAAMuE,EAAS6rc,QACrD,CACL,IAAIuB,GAAc,EACdnB,GAAU,EACd,MAAMoB,OAAwCh1b,IAAlBrY,EAAQ6T,OAAgD,kBAAlB7T,EAAQ6T,MACpEy5b,EAAkBtC,EAAWsC,gBAAgBttc,GAC7Cutc,EAAqBF,EAAsB5tb,KAAK+tb,eAAeC,UAAUzD,EAAKhqc,EAAQ6T,MAAO7T,GAAW,GACxG0tc,EAAoC1tc,EAAQ2tc,SAAWN,EAAsB5tb,KAAK+tb,eAAeC,UAAUzD,EAAKhqc,EAAQ6T,MAAO,CACnI85b,SAAS,IACN,GACC3wb,EAAehd,EAAQ,eAAeutc,MAAyBvtc,EAAQ,eAAe0tc,MAAwC1tc,EAAQgd,cACvIyC,KAAKmub,cAAchia,IAAQ0ha,IAC9BF,GAAc,EACdxha,EAAM5uB,GAEHyC,KAAKmub,cAAchia,KACtBqga,GAAU,EACVrga,EAAMjyC,GAER,MACMk0c,GADiC7tc,EAAQ8tc,gCAAkCrub,KAAKzf,QAAQ8tc,iCACtC7B,OAAU5zb,EAAYuzB,EACxEmia,EAAgBT,GAAmBtwb,IAAiB4uB,GAAOnsB,KAAKzf,QAAQ+tc,cAC9E,GAAI9B,GAAWmB,GAAeW,EAAe,CAE3C,GADAtub,KAAKf,OAAOuB,IAAI8tb,EAAgB,YAAc,aAAc/D,EAAK9qX,EAAWvlF,EAAKo0c,EAAgB/wb,EAAe4uB,GAC5G09Z,EAAc,CAChB,MAAMx5O,EAAKrwM,KAAKof,QAAQllC,EAAK,IACxBqG,EACHspc,cAAc,IAEZx5O,GAAMA,EAAGlkL,KAAKnsB,KAAKf,OAAOyO,KAAK,kLACrC,CACA,IAAI6gb,EAAO,GACX,MAAMC,EAAexub,KAAKyub,cAAcC,iBAAiB1ub,KAAKzf,QAAQouc,YAAapuc,EAAQgqc,KAAOvqb,KAAKsY,UACvG,GAAmC,aAA/BtY,KAAKzf,QAAQquc,eAAgCJ,GAAgBA,EAAa,GAC5E,IAAK,IAAIj1c,EAAI,EAAGA,EAAIi1c,EAAah1c,OAAQD,IACvCg1c,EAAKlzc,KAAKmzc,EAAaj1c,QAEe,QAA/BymB,KAAKzf,QAAQquc,cACtBL,EAAOvub,KAAKyub,cAAcI,mBAAmBtuc,EAAQgqc,KAAOvqb,KAAKsY,UAEjEi2a,EAAKlzc,KAAKkF,EAAQgqc,KAAOvqb,KAAKsY,UAEhC,MAAM/C,EAAO,CAACub,EAAG9yB,EAAG8wb,KAClB,MAAMC,EAAoBlB,GAAmBiB,IAAyB3ia,EAAM2ia,EAAuBV,EAC/Fpub,KAAKzf,QAAQyuc,kBACfhvb,KAAKzf,QAAQyuc,kBAAkBl+Z,EAAG2uC,EAAWzhE,EAAG+wb,EAAmBT,EAAe/tc,GACzEyf,KAAKivb,kBAAoBjvb,KAAKivb,iBAAiBC,aACxDlvb,KAAKivb,iBAAiBC,YAAYp+Z,EAAG2uC,EAAWzhE,EAAG+wb,EAAmBT,EAAe/tc,GAEvFyf,KAAK6zX,KAAK,aAAc/iW,EAAG2uC,EAAWzhE,EAAGmuB,EAAI,EAE3CnsB,KAAKzf,QAAQ2uc,cACXlvb,KAAKzf,QAAQ4uc,oBAAsBvB,EACrCW,EAAK3rc,SAAQ01B,IACXtY,KAAK+tb,eAAeqB,YAAY92a,EAAU/3B,GAASqC,SAAQysc,IACzD95a,EAAK,CAAC+C,GAAWp+B,EAAMm1c,EAAQ9uc,EAAQ,eAAe8uc,MAAa9xb,EAAa,GAChF,IAGJgY,EAAKg5a,EAAMr0c,EAAKqjB,GAGtB,CACA4uB,EAAMnsB,KAAK0tb,kBAAkBvha,EAAKnwC,EAAMuE,EAASigV,EAAU4rH,GACvDI,GAAWrga,IAAQjyC,GAAO8lB,KAAKzf,QAAQ+uc,8BAA6Bnja,EAAM,GAAGszC,KAAavlF,MACzFsyc,GAAWmB,IAAgB3tb,KAAKzf,QAAQgvc,yBAEzCpja,EADoC,OAAlCnsB,KAAKzf,QAAQuqc,iBACT9qb,KAAKzf,QAAQgvc,uBAAuBvvb,KAAKzf,QAAQ+uc,4BAA8B,GAAG7vX,KAAavlF,IAAQA,EAAKyzc,EAAcxha,OAAMvzB,GAEhIoH,KAAKzf,QAAQgvc,uBAAuBpja,GAGhD,CACA,OAAImga,GACF9rH,EAASr0S,IAAMA,EACfq0S,EAASosH,WAAa5sb,KAAK6sb,qBAAqBtsc,GACzCigV,GAEFr0S,CACT,CACA,iBAAAuha,CAAkBvha,EAAKjyC,EAAKqG,EAASigV,EAAU4rH,GAC7C,IAAIh7a,EAAQpR,KACZ,GAAIA,KAAKmtb,YAAcntb,KAAKmtb,WAAWhqb,MACrCgpB,EAAMnsB,KAAKmtb,WAAWhqb,MAAMgpB,EAAK,IAC5BnsB,KAAKzf,QAAQkrc,cAAc+D,oBAC3Bjvc,GACFA,EAAQgqc,KAAOvqb,KAAKsY,UAAYkoT,EAASksH,QAASlsH,EAASmsH,OAAQnsH,EAASgsH,QAAS,CACtFhsH,kBAEG,IAAKjgV,EAAQkvc,kBAAmB,CACjClvc,EAAQkrc,eAAezrb,KAAKy0K,aAAavjD,KAAK,IAC7C3wI,EAEDkrc,cAAe,IACVzrb,KAAKzf,QAAQkrc,iBACblrc,EAAQkrc,iBAIjB,MAAMiE,EAAiC,kBAARvja,IAAqB5rC,GAAWA,EAAQkrc,oBAA2D7yb,IAA1CrY,EAAQkrc,cAAciE,gBAAgCnvc,EAAQkrc,cAAciE,gBAAkB1vb,KAAKzf,QAAQkrc,cAAciE,iBACjN,IAAIC,EACJ,GAAID,EAAiB,CACnB,MAAMtgQ,EAAKjjK,EAAI5oB,MAAMvD,KAAKy0K,aAAa03Q,eACvCwD,EAAUvgQ,GAAMA,EAAG51M,MACrB,CACA,IAAIoQ,EAAOrJ,EAAQ2F,SAAsC,kBAApB3F,EAAQ2F,QAAuB3F,EAAQ2F,QAAU3F,EAMtF,GALIyf,KAAKzf,QAAQkrc,cAAc+D,mBAAkB5lc,EAAO,IACnDoW,KAAKzf,QAAQkrc,cAAc+D,oBAC3B5lc,IAELuiC,EAAMnsB,KAAKy0K,aAAa5+D,YAAY1pF,EAAKviC,EAAMrJ,EAAQgqc,KAAOvqb,KAAKsY,SAAU/3B,GACzEmvc,EAAiB,CACnB,MAAMttP,EAAKj2K,EAAI5oB,MAAMvD,KAAKy0K,aAAa03Q,eAEnCwD,GADYvtP,GAAMA,EAAG5oN,UACF+G,EAAQqvc,MAAO,EACxC,EACKrvc,EAAQgqc,KAAyC,OAAlCvqb,KAAKzf,QAAQuqc,kBAA6BtqH,GAAYA,EAASr0S,MAAK5rC,EAAQgqc,IAAM/pH,EAASksH,UAC1F,IAAjBnsc,EAAQqvc,OAAgBzja,EAAMnsB,KAAKy0K,aAAam7Q,KAAKzja,GAAK,WAC5D,IAAK,IAAI1S,EAAO9Z,UAAUnmB,OAAQH,EAAO,IAAIO,MAAM6/B,GAAOC,EAAO,EAAGA,EAAOD,EAAMC,IAC/ErgC,EAAKqgC,GAAQ/Z,UAAU+Z,GAEzB,OAAI0ya,GAAWA,EAAQ,KAAO/yc,EAAK,KAAOkH,EAAQue,SAChDsS,EAAMnS,OAAOyO,KAAK,6CAA6Cr0B,EAAK,cAAca,EAAI,MAC/E,MAEFk3B,EAAM+wO,aAAa9oQ,EAAMa,EAClC,GAAGqG,IACCA,EAAQkrc,eAAezrb,KAAKy0K,aAAal+J,OAC/C,CACA,MAAMs5a,EAActvc,EAAQsvc,aAAe7vb,KAAKzf,QAAQsvc,YAClDC,EAA4C,kBAAhBD,EAA2B,CAACA,GAAeA,EAU7E,YATYj3b,IAARuzB,GAA6B,OAARA,GAAgB2ja,GAAsBA,EAAmBt2c,SAAyC,IAA/B+G,EAAQwvc,qBAClG5ja,EAAM8+Z,EAAc/rM,OAAO4wM,EAAoB3ja,EAAKjyC,EAAK8lB,KAAKzf,SAAWyf,KAAKzf,QAAQyvc,wBAA0B,CAC9GC,aAAc,IACTzvH,EACHosH,WAAY5sb,KAAK6sb,qBAAqBtsc,OAErCA,GACDA,EAASyf,OAERmsB,CACT,CACA,OAAA/M,CAAQpjC,GACN,IACIitI,EACAujU,EACAC,EACAC,EACAC,EALApsc,EAAUof,UAAUnmB,OAAS,QAAsBof,IAAjB+G,UAAU,GAAmBA,UAAU,GAAK,CAAC,EAqEnF,MA/DoB,kBAAT3jB,IAAmBA,EAAO,CAACA,IACtCA,EAAK4G,SAAQob,IACX,GAAIgC,KAAKmub,cAAcllU,GAAQ,OAC/B,MAAMinU,EAAYlwb,KAAK0rb,eAAe1tb,EAAGzd,GACnCrG,EAAMg2c,EAAUh2c,IACtBsyc,EAAUtyc,EACV,IAAI0xc,EAAasE,EAAUtE,WACvB5rb,KAAKzf,QAAQ4vc,aAAYvE,EAAaA,EAAW7vb,OAAOiE,KAAKzf,QAAQ4vc,aACzE,MAAMvC,OAAwCh1b,IAAlBrY,EAAQ6T,OAAgD,kBAAlB7T,EAAQ6T,MACpEg8b,EAAwBxC,IAAwBrtc,EAAQ2tc,SAA6B,IAAlB3tc,EAAQ6T,OAAe4L,KAAK+tb,eAAesC,mBAC9GC,OAA2C13b,IAApBrY,EAAQue,UAAqD,kBAApBve,EAAQue,SAAmD,kBAApBve,EAAQue,UAA6C,KAApBve,EAAQue,QAChJyxb,EAAQhwc,EAAQguc,KAAOhuc,EAAQguc,KAAOvub,KAAKyub,cAAcI,mBAAmBtuc,EAAQgqc,KAAOvqb,KAAKsY,SAAU/3B,EAAQouc,aACxH/C,EAAWhpc,SAAQmyH,IACb/0G,KAAKmub,cAAcllU,KACvB0jU,EAAS53U,GACJu2U,EAAiB,GAAGiF,EAAM,MAAMx7U,MAAS/0G,KAAK45D,OAAS55D,KAAK45D,MAAM42X,qBAAuBxwb,KAAK45D,MAAM42X,mBAAmB7D,KAC1HrB,EAAiB,GAAGiF,EAAM,MAAMx7U,MAAQ,EACxC/0G,KAAKf,OAAOyO,KAAK,QAAQ8+a,qBAA2B+D,EAAM3xb,KAAK,2CAA2C+tb,wBAA8B,6NAE1I4D,EAAM3tc,SAAQwpB,IACZ,GAAIpM,KAAKmub,cAAcllU,GAAQ,OAC/ByjU,EAAUtgb,EACV,MAAMqkb,EAAY,CAACv2c,GACnB,GAAI8lB,KAAKmtb,YAAcntb,KAAKmtb,WAAWuD,cACrC1wb,KAAKmtb,WAAWuD,cAAcD,EAAWv2c,EAAKkyB,EAAM2oG,EAAIx0H,OACnD,CACL,IAAIowc,EACA/C,IAAqB+C,EAAe3wb,KAAK+tb,eAAeC,UAAU5hb,EAAM7rB,EAAQ6T,MAAO7T,IAC3F,MAAMqwc,EAAa,GAAG5wb,KAAKzf,QAAQswc,sBAC7BC,EAAgB,GAAG9wb,KAAKzf,QAAQswc,yBAAyB7wb,KAAKzf,QAAQswc,kBAU5E,GATIjD,IACF6C,EAAUp1c,KAAKnB,EAAMy2c,GACjBpwc,EAAQ2tc,SAAmD,IAAxCyC,EAAav1c,QAAQ01c,IAC1CL,EAAUp1c,KAAKnB,EAAMy2c,EAAazqc,QAAQ4qc,EAAe9wb,KAAKzf,QAAQswc,kBAEpET,GACFK,EAAUp1c,KAAKnB,EAAM02c,IAGrBN,EAAsB,CACxB,MAAMS,EAAa,GAAG72c,IAAM8lB,KAAKzf,QAAQywc,mBAAmBzwc,EAAQue,UACpE2xb,EAAUp1c,KAAK01c,GACXnD,IACF6C,EAAUp1c,KAAK01c,EAAaJ,GACxBpwc,EAAQ2tc,SAAmD,IAAxCyC,EAAav1c,QAAQ01c,IAC1CL,EAAUp1c,KAAK01c,EAAaJ,EAAazqc,QAAQ4qc,EAAe9wb,KAAKzf,QAAQswc,kBAE3ET,GACFK,EAAUp1c,KAAK01c,EAAaH,GAGlC,CACF,CACA,IAAIK,EACJ,KAAOA,EAAcR,EAAUpsb,OACxBrE,KAAKmub,cAAcllU,KACtBwjU,EAAewE,EACfhoU,EAAQjpH,KAAKsqb,YAAYl+a,EAAM2oG,EAAIk8U,EAAa1wc,GAEpD,IACA,GACF,IAEG,CACL4rC,IAAK88F,EACLujU,UACAC,eACAC,UACAC,SAEJ,CACA,aAAAwB,CAAchia,GACZ,YAAevzB,IAARuzB,MAAwBnsB,KAAKzf,QAAQ2wc,YAAsB,OAAR/ka,OAAoBnsB,KAAKzf,QAAQ4wc,mBAA6B,KAARhla,EAClH,CACA,WAAAm+Z,CAAYl+a,EAAM2oG,EAAI76H,GACpB,IAAIqG,EAAUof,UAAUnmB,OAAS,QAAsBof,IAAjB+G,UAAU,GAAmBA,UAAU,GAAK,CAAC,EACnF,OAAIK,KAAKmtb,YAAcntb,KAAKmtb,WAAW7C,YAAoBtqb,KAAKmtb,WAAW7C,YAAYl+a,EAAM2oG,EAAI76H,EAAKqG,GAC/Fyf,KAAKoxb,cAAc9G,YAAYl+a,EAAM2oG,EAAI76H,EAAKqG,EACvD,CACA,oBAAAssc,GACE,IAAItsc,EAAUof,UAAUnmB,OAAS,QAAsBof,IAAjB+G,UAAU,GAAmBA,UAAU,GAAK,CAAC,EACnF,MAAM0xb,EAAc,CAAC,eAAgB,UAAW,UAAW,UAAW,MAAO,OAAQ,cAAe,KAAM,eAAgB,cAAe,gBAAiB,gBAAiB,aAAc,cAAe,iBAClMC,EAA2B/wc,EAAQ2F,SAAsC,kBAApB3F,EAAQ2F,QACnE,IAAI0D,EAAO0nc,EAA2B/wc,EAAQ2F,QAAU3F,EAUxD,GATI+wc,GAAqD,qBAAlB/wc,EAAQ6T,QAC7CxK,EAAKwK,MAAQ7T,EAAQ6T,OAEnB4L,KAAKzf,QAAQkrc,cAAc+D,mBAC7B5lc,EAAO,IACFoW,KAAKzf,QAAQkrc,cAAc+D,oBAC3B5lc,KAGF0nc,EAA0B,CAC7B1nc,EAAO,IACFA,GAEL,IAAK,MAAM1P,KAAOm3c,SACTznc,EAAK1P,EAEhB,CACA,OAAO0P,CACT,CACA,sBAAOikc,CAAgBttc,GACrB,MAAMgiD,EAAS,eACf,IAAK,MAAM5gD,KAAUpB,EACnB,GAAIxG,OAAOC,UAAUb,eAAegB,KAAKoG,EAASoB,IAAW4gD,IAAW5gD,EAAOnG,UAAU,EAAG+mD,UAAkB3pC,IAAcrY,EAAQoB,GAClI,OAAO,EAGX,OAAO,CACT,EAGF,SAAS2gI,EAAWz8D,GAClB,OAAOA,EAAOxiE,OAAO,GAAGC,cAAgBuiE,EAAOtiE,MAAM,EACvD,CACA,MAAMguc,EACJ,WAAA1va,CAAYthC,GACVyf,KAAKzf,QAAUA,EACfyf,KAAKwxb,cAAgBxxb,KAAKzf,QAAQixc,gBAAiB,EACnDxxb,KAAKf,OAASkqb,EAAWv8a,OAAO,gBAClC,CACA,qBAAA6kb,CAAsBrlb,GAEpB,KADAA,EAAO49a,EAAe59a,KACTA,EAAKhxB,QAAQ,KAAO,EAAG,OAAO,KAC3C,MAAMkkB,EAAI8M,EAAKrI,MAAM,KACrB,OAAiB,IAAbzE,EAAE9lB,OAAqB,MAC3B8lB,EAAE+E,MACoC,MAAlC/E,EAAEA,EAAE9lB,OAAS,GAAGitB,cAA8B,KAC3CzG,KAAK0xb,mBAAmBpyb,EAAEV,KAAK,MACxC,CACA,uBAAA+yb,CAAwBvlb,GAEtB,KADAA,EAAO49a,EAAe59a,KACTA,EAAKhxB,QAAQ,KAAO,EAAG,OAAOgxB,EAC3C,MAAM9M,EAAI8M,EAAKrI,MAAM,KACrB,OAAO/D,KAAK0xb,mBAAmBpyb,EAAE,GACnC,CACA,kBAAAoyb,CAAmBtlb,GACjB,GAAoB,kBAATA,GAAqBA,EAAKhxB,QAAQ,MAAQ,EAAG,CACtD,MAAMw2c,EAAe,CAAC,OAAQ,OAAQ,OAAQ,OAAQ,OAAQ,OAAQ,QACtE,IAAItyb,EAAI8M,EAAKrI,MAAM,KAcnB,OAbI/D,KAAKzf,QAAQsxc,aACfvyb,EAAIA,EAAExhB,KAAI6+W,GAAQA,EAAKl2V,gBACD,IAAbnH,EAAE9lB,QACX8lB,EAAE,GAAKA,EAAE,GAAGmH,cACZnH,EAAE,GAAKA,EAAE,GAAGhc,cACRsuc,EAAax2c,QAAQkkB,EAAE,GAAGmH,gBAAkB,IAAGnH,EAAE,GAAKgjH,EAAWhjH,EAAE,GAAGmH,iBACpD,IAAbnH,EAAE9lB,SACX8lB,EAAE,GAAKA,EAAE,GAAGmH,cACQ,IAAhBnH,EAAE,GAAG9lB,SAAc8lB,EAAE,GAAKA,EAAE,GAAGhc,eACtB,QAATgc,EAAE,IAAgC,IAAhBA,EAAE,GAAG9lB,SAAc8lB,EAAE,GAAKA,EAAE,GAAGhc,eACjDsuc,EAAax2c,QAAQkkB,EAAE,GAAGmH,gBAAkB,IAAGnH,EAAE,GAAKgjH,EAAWhjH,EAAE,GAAGmH,gBACtEmrb,EAAax2c,QAAQkkB,EAAE,GAAGmH,gBAAkB,IAAGnH,EAAE,GAAKgjH,EAAWhjH,EAAE,GAAGmH,iBAErEnH,EAAEV,KAAK,IAChB,CACA,OAAOoB,KAAKzf,QAAQuxc,WAAa9xb,KAAKzf,QAAQsxc,aAAezlb,EAAK3F,cAAgB2F,CACpF,CACA,eAAA2lb,CAAgB3lb,GAId,OAH0B,iBAAtBpM,KAAKzf,QAAQgf,MAA2BS,KAAKzf,QAAQyxc,4BACvD5lb,EAAOpM,KAAK2xb,wBAAwBvlb,KAE9BpM,KAAKwxb,gBAAkBxxb,KAAKwxb,cAAch4c,QAAUwmB,KAAKwxb,cAAcp2c,QAAQgxB,IAAS,CAClG,CACA,qBAAA6lb,CAAsB1B,GACpB,IAAKA,EAAO,OAAO,KACnB,IAAItnU,EAmBJ,OAlBAsnU,EAAM3tc,SAAQwpB,IACZ,GAAI68G,EAAO,OACX,MAAMipU,EAAalyb,KAAK0xb,mBAAmBtlb,GACtCpM,KAAKzf,QAAQixc,gBAAiBxxb,KAAK+xb,gBAAgBG,KAAajpU,EAAQipU,EAAU,KAEpFjpU,GAASjpH,KAAKzf,QAAQixc,eACzBjB,EAAM3tc,SAAQwpB,IACZ,GAAI68G,EAAO,OACX,MAAMkpU,EAAUnyb,KAAK2xb,wBAAwBvlb,GAC7C,GAAIpM,KAAK+xb,gBAAgBI,GAAU,OAAOlpU,EAAQkpU,EAClDlpU,EAAQjpH,KAAKzf,QAAQixc,cAActrb,MAAKksb,GAClCA,IAAiBD,EAAgBC,EACjCA,EAAah3c,QAAQ,KAAO,GAAK+2c,EAAQ/2c,QAAQ,KAAO,OAA5D,EACsC,IAAlCg3c,EAAah3c,QAAQ+2c,GAAuBC,OAAhD,GACA,IAGDnpU,IAAOA,EAAQjpH,KAAK0ub,iBAAiB1ub,KAAKzf,QAAQouc,aAAa,IAC7D1lU,CACT,CACA,gBAAAylU,CAAiB2D,EAAWjmb,GAC1B,IAAKimb,EAAW,MAAO,GAGvB,GAFyB,oBAAdA,IAA0BA,EAAYA,EAAUjmb,IAClC,kBAAdimb,IAAwBA,EAAY,CAACA,IACG,mBAA/Ct4c,OAAOC,UAAUF,SAASimB,MAAMsyb,GAAiC,OAAOA,EAC5E,IAAKjmb,EAAM,OAAOimb,EAAU9sZ,SAAW,GACvC,IAAI0jF,EAAQopU,EAAUjmb,GAKtB,OAJK68G,IAAOA,EAAQopU,EAAUryb,KAAKyxb,sBAAsBrlb,KACpD68G,IAAOA,EAAQopU,EAAUryb,KAAK0xb,mBAAmBtlb,KACjD68G,IAAOA,EAAQopU,EAAUryb,KAAK2xb,wBAAwBvlb,KACtD68G,IAAOA,EAAQopU,EAAU9sZ,SACvB0jF,GAAS,EAClB,CACA,kBAAA4lU,CAAmBzib,EAAMkmb,GACvB,MAAMC,EAAgBvyb,KAAK0ub,iBAAiB4D,GAAgBtyb,KAAKzf,QAAQouc,aAAe,GAAIvib,GACtFmkb,EAAQ,GACRiC,EAAUl3c,IACTA,IACD0kB,KAAK+xb,gBAAgBz2c,GACvBi1c,EAAMl1c,KAAKC,GAEX0kB,KAAKf,OAAOyO,KAAK,uDAAuDpyB,KAC1E,EAYF,MAVoB,kBAAT8wB,IAAsBA,EAAKhxB,QAAQ,MAAQ,GAAKgxB,EAAKhxB,QAAQ,MAAQ,IACpD,iBAAtB4kB,KAAKzf,QAAQgf,MAAyBizb,EAAQxyb,KAAK0xb,mBAAmBtlb,IAChD,iBAAtBpM,KAAKzf,QAAQgf,MAAiD,gBAAtBS,KAAKzf,QAAQgf,MAAwBizb,EAAQxyb,KAAKyxb,sBAAsBrlb,IAC1F,gBAAtBpM,KAAKzf,QAAQgf,MAAwBizb,EAAQxyb,KAAK2xb,wBAAwBvlb,KACrD,kBAATA,GAChBomb,EAAQxyb,KAAK0xb,mBAAmBtlb,IAElCmmb,EAAc3vc,SAAQkiH,IAChByrV,EAAMn1c,QAAQ0pH,GAAM,GAAG0tV,EAAQxyb,KAAK0xb,mBAAmB5sV,GAAI,IAE1DyrV,CACT,EAGF,IAAIkC,EAAO,CAAC,CACVlE,KAAM,CAAC,MAAO,KAAM,KAAM,MAAO,KAAM,MAAO,MAAO,KAAM,MAAO,KAAM,KAAM,KAAM,KAAM,QAAS,KAAM,KAAM,KAAM,KAAM,KAAM,MACjIl4I,GAAI,CAAC,EAAG,GACRvxM,GAAI,GACH,CACDypV,KAAM,CAAC,KAAM,KAAM,MAAO,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,MAAO,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,MAAO,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,MAAO,KAAM,KAAM,KAAM,MAAO,MAAO,KAAM,KAAM,KAAM,KAAM,KAAM,MAAO,KAAM,MAAO,MAAO,KAAM,QAAS,KAAM,MAAO,KAAM,KAAM,KAAM,MAAO,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,MACzYl4I,GAAI,CAAC,EAAG,GACRvxM,GAAI,GACH,CACDypV,KAAM,CAAC,KAAM,KAAM,MAAO,KAAM,KAAM,KAAM,KAAM,MAAO,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,MAAO,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,MACxIl4I,GAAI,CAAC,GACLvxM,GAAI,GACH,CACDypV,KAAM,CAAC,KAAM,KAAM,MAAO,KAAM,KAAM,KAAM,KAAM,MAClDl4I,GAAI,CAAC,EAAG,EAAG,GACXvxM,GAAI,GACH,CACDypV,KAAM,CAAC,MACPl4I,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,GAAI,KACrBvxM,GAAI,GACH,CACDypV,KAAM,CAAC,KAAM,MACbl4I,GAAI,CAAC,EAAG,EAAG,GACXvxM,GAAI,GACH,CACDypV,KAAM,CAAC,MAAO,MACdl4I,GAAI,CAAC,EAAG,EAAG,GACXvxM,GAAI,GACH,CACDypV,KAAM,CAAC,MACPl4I,GAAI,CAAC,EAAG,EAAG,EAAG,GACdvxM,GAAI,GACH,CACDypV,KAAM,CAAC,MACPl4I,GAAI,CAAC,EAAG,GACRvxM,GAAI,GACH,CACDypV,KAAM,CAAC,MACPl4I,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,IACjBvxM,GAAI,IACH,CACDypV,KAAM,CAAC,MACPl4I,GAAI,CAAC,EAAG,EAAG,EAAG,IACdvxM,GAAI,IACH,CACDypV,KAAM,CAAC,MACPl4I,GAAI,CAAC,EAAG,GACRvxM,GAAI,IACH,CACDypV,KAAM,CAAC,MACPl4I,GAAI,CAAC,EAAG,GACRvxM,GAAI,IACH,CACDypV,KAAM,CAAC,MACPl4I,GAAI,CAAC,EAAG,EAAG,EAAG,GACdvxM,GAAI,IACH,CACDypV,KAAM,CAAC,MACPl4I,GAAI,CAAC,EAAG,EAAG,IACXvxM,GAAI,IACH,CACDypV,KAAM,CAAC,MACPl4I,GAAI,CAAC,EAAG,EAAG,GACXvxM,GAAI,IACH,CACDypV,KAAM,CAAC,MACPl4I,GAAI,CAAC,EAAG,GACRvxM,GAAI,IACH,CACDypV,KAAM,CAAC,OACPl4I,GAAI,CAAC,EAAG,EAAG,GACXvxM,GAAI,IACH,CACDypV,KAAM,CAAC,MACPl4I,GAAI,CAAC,EAAG,EAAG,GAAI,IACfvxM,GAAI,IACH,CACDypV,KAAM,CAAC,MACPl4I,GAAI,CAAC,EAAG,GACRvxM,GAAI,GACH,CACDypV,KAAM,CAAC,MACPl4I,GAAI,CAAC,EAAG,EAAG,IACXvxM,GAAI,IACH,CACDypV,KAAM,CAAC,MACPl4I,GAAI,CAAC,EAAG,EAAG,EAAG,GACdvxM,GAAI,IACH,CACDypV,KAAM,CAAC,KAAM,MACbl4I,GAAI,CAAC,EAAG,EAAG,GAAI,IACfvxM,GAAI,KAEF4tV,EAAqB,CACvB,EAAG,SAAUl4c,GACX,OAAOooB,OAAOpoB,EAAI,EACpB,EACA,EAAG,SAAUA,GACX,OAAOooB,OAAY,GAALpoB,EAChB,EACA,EAAG,SAAUA,GACX,OAAO,CACT,EACA,EAAG,SAAUA,GACX,OAAOooB,OAAOpoB,EAAI,IAAM,GAAKA,EAAI,KAAO,GAAK,EAAIA,EAAI,IAAM,GAAKA,EAAI,IAAM,IAAMA,EAAI,IAAM,IAAMA,EAAI,KAAO,IAAM,EAAI,EACvH,EACA,EAAG,SAAUA,GACX,OAAOooB,OAAY,GAALpoB,EAAS,EAAS,GAALA,EAAS,EAAS,GAALA,EAAS,EAAIA,EAAI,KAAO,GAAKA,EAAI,KAAO,GAAK,EAAIA,EAAI,KAAO,GAAK,EAAI,EAC/G,EACA,EAAG,SAAUA,GACX,OAAOooB,OAAY,GAALpoB,EAAS,EAAIA,GAAK,GAAKA,GAAK,EAAI,EAAI,EACpD,EACA,EAAG,SAAUA,GACX,OAAOooB,OAAY,GAALpoB,EAAS,EAAIA,EAAI,IAAM,GAAKA,EAAI,IAAM,IAAMA,EAAI,IAAM,IAAMA,EAAI,KAAO,IAAM,EAAI,EACjG,EACA,EAAG,SAAUA,GACX,OAAOooB,OAAY,GAALpoB,EAAS,EAAS,GAALA,EAAS,EAAS,GAALA,GAAe,IAALA,EAAU,EAAI,EAClE,EACA,EAAG,SAAUA,GACX,OAAOooB,OAAOpoB,GAAK,EACrB,EACA,GAAI,SAAUA,GACZ,OAAOooB,OAAY,GAALpoB,EAAS,EAAS,GAALA,EAAS,EAAIA,EAAI,EAAI,EAAIA,EAAI,GAAK,EAAI,EACnE,EACA,GAAI,SAAUA,GACZ,OAAOooB,OAAY,GAALpoB,GAAe,IAALA,EAAU,EAAS,GAALA,GAAe,IAALA,EAAU,EAAIA,EAAI,GAAKA,EAAI,GAAK,EAAI,EACtF,EACA,GAAI,SAAUA,GACZ,OAAOooB,OAAOpoB,EAAI,IAAM,GAAKA,EAAI,KAAO,GAC1C,EACA,GAAI,SAAUA,GACZ,OAAOooB,OAAa,IAANpoB,EAChB,EACA,GAAI,SAAUA,GACZ,OAAOooB,OAAY,GAALpoB,EAAS,EAAS,GAALA,EAAS,EAAS,GAALA,EAAS,EAAI,EACvD,EACA,GAAI,SAAUA,GACZ,OAAOooB,OAAOpoB,EAAI,IAAM,GAAKA,EAAI,KAAO,GAAK,EAAIA,EAAI,IAAM,IAAMA,EAAI,IAAM,IAAMA,EAAI,KAAO,IAAM,EAAI,EACxG,EACA,GAAI,SAAUA,GACZ,OAAOooB,OAAOpoB,EAAI,IAAM,GAAKA,EAAI,KAAO,GAAK,EAAU,IAANA,EAAU,EAAI,EACjE,EACA,GAAI,SAAUA,GACZ,OAAOooB,OAAY,GAALpoB,GAAUA,EAAI,IAAM,GAAKA,EAAI,KAAO,GAAK,EAAI,EAC7D,EACA,GAAI,SAAUA,GACZ,OAAOooB,OAAY,GAALpoB,EAAS,EAAS,GAALA,EAAS,EAAI,EAC1C,EACA,GAAI,SAAUA,GACZ,OAAOooB,OAAY,GAALpoB,EAAS,EAAS,GAALA,GAAUA,EAAI,IAAM,GAAKA,EAAI,IAAM,GAAK,EAAIA,EAAI,IAAM,IAAMA,EAAI,IAAM,GAAK,EAAI,EAC5G,EACA,GAAI,SAAUA,GACZ,OAAOooB,OAAY,GAALpoB,EAAS,EAAS,GAALA,GAAUA,EAAI,IAAM,GAAKA,EAAI,IAAM,GAAK,EAAI,EACzE,EACA,GAAI,SAAUA,GACZ,OAAOooB,OAAOpoB,EAAI,KAAO,EAAI,EAAIA,EAAI,KAAO,EAAI,EAAIA,EAAI,KAAO,GAAKA,EAAI,KAAO,EAAI,EAAI,EACzF,EACA,GAAI,SAAUA,GACZ,OAAOooB,OAAY,GAALpoB,EAAS,EAAS,GAALA,EAAS,GAAKA,EAAI,GAAKA,EAAI,KAAOA,EAAI,IAAM,EAAI,EAAI,EACjF,GAEF,MAAMm4c,EAAkB,CAAC,KAAM,KAAM,MAC/BC,EAAe,CAAC,MAChBC,EAAgB,CACpBl3Y,KAAM,EACNkL,IAAK,EACLisY,IAAK,EACLC,IAAK,EACLC,KAAM,EACNlsY,MAAO,GAcT,MAAMmsY,EACJ,WAAApxa,CAAY4sa,GACV,IAAIluc,EAAUof,UAAUnmB,OAAS,QAAsBof,IAAjB+G,UAAU,GAAmBA,UAAU,GAAK,CAAC,EACnFK,KAAKyub,cAAgBA,EACrBzub,KAAKzf,QAAUA,EACfyf,KAAKf,OAASkqb,EAAWv8a,OAAO,kBAC1B5M,KAAKzf,QAAQ2yc,oBAAqBN,EAAa34c,SAAS+lB,KAAKzf,QAAQ2yc,oBAAwC,qBAAT3yY,MAAyBA,KAAK4yY,cACtInzb,KAAKzf,QAAQ2yc,kBAAoB,KACjClzb,KAAKf,OAAOvb,MAAM,uJAEpBsc,KAAK0zE,MAtBT,WACE,MAAMA,EAAQ,CAAC,EASf,OARA++W,EAAK7vc,SAAQ6tC,IACXA,EAAI89Z,KAAK3rc,SAAQkuC,IACf4iD,EAAM5iD,GAAK,CACTsia,QAAS3ia,EAAI4lR,GACbg9I,QAASX,EAAmBjia,EAAIq0E,IACjC,GACD,IAEGpxB,CACT,CAWiB4/W,EACf,CACA,OAAAC,CAAQhJ,EAAKpub,GACX6D,KAAK0zE,MAAM62W,GAAOpub,CACpB,CACA,OAAAq3b,CAAQpnb,GACN,IAAI7rB,EAAUof,UAAUnmB,OAAS,QAAsBof,IAAjB+G,UAAU,GAAmBA,UAAU,GAAK,CAAC,EACnF,GAAIK,KAAKqwb,mBACP,IACE,OAAO,IAAI9vY,KAAK4yY,YAAYnJ,EAAe59a,GAAO,CAChDpuB,KAAMuC,EAAQ2tc,QAAU,UAAY,YAExC,CAAE,MACA,MACF,CAEF,OAAOlub,KAAK0zE,MAAMtnE,IAASpM,KAAK0zE,MAAM1zE,KAAKyub,cAAckD,wBAAwBvlb,GACnF,CACA,WAAAqnb,CAAYrnb,GACV,IAAI7rB,EAAUof,UAAUnmB,OAAS,QAAsBof,IAAjB+G,UAAU,GAAmBA,UAAU,GAAK,CAAC,EACnF,MAAM+zb,EAAO1zb,KAAKwzb,QAAQpnb,EAAM7rB,GAChC,OAAIyf,KAAKqwb,mBACAqD,GAAQA,EAAKzlX,kBAAkB0lX,iBAAiBn6c,OAAS,EAE3Dk6c,GAAQA,EAAKN,QAAQ55c,OAAS,CACvC,CACA,mBAAAo6c,CAAoBxnb,EAAMlyB,GACxB,IAAIqG,EAAUof,UAAUnmB,OAAS,QAAsBof,IAAjB+G,UAAU,GAAmBA,UAAU,GAAK,CAAC,EACnF,OAAOK,KAAKovb,YAAYhjb,EAAM7rB,GAASzC,KAAIuxc,GAAU,GAAGn1c,IAAMm1c,KAChE,CACA,WAAAD,CAAYhjb,GACV,IAAI7rB,EAAUof,UAAUnmB,OAAS,QAAsBof,IAAjB+G,UAAU,GAAmBA,UAAU,GAAK,CAAC,EACnF,MAAM+zb,EAAO1zb,KAAKwzb,QAAQpnb,EAAM7rB,GAChC,OAAKmzc,EAGD1zb,KAAKqwb,mBACAqD,EAAKzlX,kBAAkB0lX,iBAAiBp0Z,MAAK,CAACs0Z,EAAiBC,IAAoBjB,EAAcgB,GAAmBhB,EAAciB,KAAkBh2c,KAAIi2c,GAAkB,GAAG/zb,KAAKzf,QAAQ1F,UAAU0F,EAAQ2tc,QAAU,UAAUlub,KAAKzf,QAAQ1F,UAAY,KAAKk5c,MAEhQL,EAAKN,QAAQt1c,KAAIyoD,GAAUvmC,KAAKgub,UAAU5hb,EAAMm6B,EAAQhmD,KALtD,EAMX,CACA,SAAAytc,CAAU5hb,EAAMhY,GACd,IAAI7T,EAAUof,UAAUnmB,OAAS,QAAsBof,IAAjB+G,UAAU,GAAmBA,UAAU,GAAK,CAAC,EACnF,MAAM+zb,EAAO1zb,KAAKwzb,QAAQpnb,EAAM7rB,GAChC,OAAImzc,EACE1zb,KAAKqwb,mBACA,GAAGrwb,KAAKzf,QAAQ1F,UAAU0F,EAAQ2tc,QAAU,UAAUlub,KAAKzf,QAAQ1F,UAAY,KAAK64c,EAAKM,OAAO5/b,KAElG4L,KAAKi0b,yBAAyBP,EAAMt/b,IAE7C4L,KAAKf,OAAOyO,KAAK,6BAA6BtB,KACvC,GACT,CACA,wBAAA6nb,CAAyBP,EAAMt/b,GAC7B,MAAMkpC,EAAMo2Z,EAAKQ,MAAQR,EAAKL,QAAQj/b,GAASs/b,EAAKL,QAAQ1jb,KAAK+2B,IAAItyC,IACrE,IAAIi7b,EAASqE,EAAKN,QAAQ91Z,GACtBt9B,KAAKzf,QAAQ4zc,sBAAgD,IAAxBT,EAAKN,QAAQ55c,QAAoC,IAApBk6c,EAAKN,QAAQ,KAClE,IAAX/D,EACFA,EAAS,SACW,IAAXA,IACTA,EAAS,KAGb,MAAM+E,EAAe,IAAMp0b,KAAKzf,QAAQ1F,SAAWw0c,EAAOv1c,WAAakmB,KAAKzf,QAAQ1F,QAAUw0c,EAAOv1c,WAAau1c,EAAOv1c,WACzH,MAAuC,OAAnCkmB,KAAKzf,QAAQ2yc,kBACA,IAAX7D,EAAqB,GACH,kBAAXA,EAA4B,WAAWA,EAAOv1c,aAClDs6c,IACqC,OAAnCp0b,KAAKzf,QAAQ2yc,mBAEblzb,KAAKzf,QAAQ4zc,sBAAgD,IAAxBT,EAAKN,QAAQ55c,QAAoC,IAApBk6c,EAAKN,QAAQ,GADjFgB,IAIFp0b,KAAKzf,QAAQ1F,SAAWyiD,EAAIxjD,WAAakmB,KAAKzf,QAAQ1F,QAAUyiD,EAAIxjD,WAAawjD,EAAIxjD,UAC9F,CACA,gBAAAu2c,GACE,OAAQsC,EAAgB14c,SAAS+lB,KAAKzf,QAAQ2yc,kBAChD,EAGF,SAASmB,EAAqBzqc,EAAM0qc,EAAap6c,GAC/C,IAAI2vc,EAAelqb,UAAUnmB,OAAS,QAAsBof,IAAjB+G,UAAU,GAAmBA,UAAU,GAAK,IACnFwqb,IAAsBxqb,UAAUnmB,OAAS,QAAsBof,IAAjB+G,UAAU,KAAmBA,UAAU,GACrFja,EAhgCN,SAA6BkE,EAAM0qc,EAAap6c,GAC9C,MAAME,EAAQojV,EAAQ5zU,EAAM1P,GAC5B,YAAc0e,IAAVxe,EACKA,EAEFojV,EAAQ82H,EAAap6c,EAC9B,CA0/Baq6c,CAAoB3qc,EAAM0qc,EAAap6c,GAKlD,OAJKwL,GAAQykc,GAAsC,kBAARjwc,IACzCwL,EAAOkkc,EAAShgc,EAAM1P,EAAK2vc,QACdjxb,IAATlT,IAAoBA,EAAOkkc,EAAS0K,EAAap6c,EAAK2vc,KAErDnkc,CACT,CACA,MAAM8uc,EACJ,WAAA3ya,GACE,IAAIthC,EAAUof,UAAUnmB,OAAS,QAAsBof,IAAjB+G,UAAU,GAAmBA,UAAU,GAAK,CAAC,EACnFK,KAAKf,OAASkqb,EAAWv8a,OAAO,gBAChC5M,KAAKzf,QAAUA,EACfyf,KAAKurC,OAAShrD,EAAQkrc,eAAiBlrc,EAAQkrc,cAAclgZ,QAAU,CAACnxD,GAASA,GACjF4lB,KAAKkxH,KAAK3wI,EACZ,CACA,IAAA2wI,GACE,IAAI3wI,EAAUof,UAAUnmB,OAAS,QAAsBof,IAAjB+G,UAAU,GAAmBA,UAAU,GAAK,CAAC,EAC9Epf,EAAQkrc,gBAAelrc,EAAQkrc,cAAgB,CAClDgJ,aAAa,IAEf,MAAMC,EAAQn0c,EAAQkrc,cACtBzrb,KAAK21G,YAA0B/8G,IAAjB87b,EAAM/+U,OAAuB++U,EAAM/+U,OAASA,EAC1D31G,KAAKy0b,iBAAoC77b,IAAtB87b,EAAMD,aAA4BC,EAAMD,YAC3Dz0b,KAAK20b,yBAAoD/7b,IAA9B87b,EAAMC,qBAAoCD,EAAMC,oBAC3E30b,KAAKuiC,OAASmyZ,EAAMnyZ,OAASmnZ,EAAYgL,EAAMnyZ,QAAUmyZ,EAAME,eAAiB,KAChF50b,KAAKqvb,OAASqF,EAAMrF,OAAS3F,EAAYgL,EAAMrF,QAAUqF,EAAMG,eAAiB,KAChF70b,KAAK80b,gBAAkBJ,EAAMI,gBAAkBJ,EAAMI,gBAAkBJ,EAAMI,iBAAmB,IAChG90b,KAAK+0b,eAAiBL,EAAMM,eAAiB,GAAKN,EAAMK,gBAAkB,IAC1E/0b,KAAKg1b,eAAiBh1b,KAAK+0b,eAAiB,GAAKL,EAAMM,gBAAkB,GACzEh1b,KAAKi1b,cAAgBP,EAAMO,cAAgBvL,EAAYgL,EAAMO,eAAiBP,EAAMQ,sBAAwBxL,EAAY,OACxH1pb,KAAKm1b,cAAgBT,EAAMS,cAAgBzL,EAAYgL,EAAMS,eAAiBT,EAAMU,sBAAwB1L,EAAY,KACxH1pb,KAAKq1b,wBAA0BX,EAAMW,wBAA0BX,EAAMW,wBAA0BX,EAAMW,yBAA2B,IAChIr1b,KAAKs1b,YAAcZ,EAAMY,YAAcZ,EAAMY,YAAc,IAC3Dt1b,KAAKu1b,kBAAsC38b,IAAvB87b,EAAMa,cAA6Bb,EAAMa,aAC7Dv1b,KAAKw1b,aACP,CACA,KAAAj/a,GACMvW,KAAKzf,SAASyf,KAAKkxH,KAAKlxH,KAAKzf,QACnC,CACA,WAAAi1c,GACE,MAAMC,EAAY,GAAGz1b,KAAKuiC,cAAcviC,KAAKqvb,SAC7Crvb,KAAKoyF,OAAS,IAAI/oF,OAAOosb,EAAW,KACpC,MAAMC,EAAoB,GAAG11b,KAAKuiC,SAASviC,KAAK+0b,sBAAsB/0b,KAAKg1b,iBAAiBh1b,KAAKqvb,SACjGrvb,KAAK21b,eAAiB,IAAItsb,OAAOqsb,EAAmB,KACpD,MAAME,EAAmB,GAAG51b,KAAKi1b,qBAAqBj1b,KAAKm1b,gBAC3Dn1b,KAAKmsb,cAAgB,IAAI9ib,OAAOusb,EAAkB,IACpD,CACA,WAAA//U,CAAYp0G,EAAK7X,EAAM2gc,EAAKhqc,GAC1B,IAAIgjB,EACAnpB,EACAy7c,EACJ,MAAMvB,EAAct0b,KAAKzf,SAAWyf,KAAKzf,QAAQkrc,eAAiBzrb,KAAKzf,QAAQkrc,cAAc+D,kBAAoB,CAAC,EAClH,SAASsG,EAAUl6b,GACjB,OAAOA,EAAI1V,QAAQ,MAAO,OAC5B,CACA,MAAM6vc,EAAe77c,IACnB,GAAIA,EAAIkB,QAAQ4kB,KAAK80b,iBAAmB,EAAG,CACzC,MAAMpvc,EAAO2uc,EAAqBzqc,EAAM0qc,EAAap6c,EAAK8lB,KAAKzf,QAAQspc,aAAc7pb,KAAKzf,QAAQ4pc,qBAClG,OAAOnqb,KAAKu1b,aAAev1b,KAAKurC,OAAO7lD,OAAMkT,EAAW2xb,EAAK,IACxDhqc,KACAqJ,EACHosc,iBAAkB97c,IACfwL,CACP,CACA,MAAM4Z,EAAIplB,EAAI6pB,MAAM/D,KAAK80b,iBACnB92b,EAAIsB,EAAE2F,QAAQ8tE,OACdh2E,EAAIuC,EAAEV,KAAKoB,KAAK80b,iBAAiB/hX,OACvC,OAAO/yE,KAAKurC,OAAO8oZ,EAAqBzqc,EAAM0qc,EAAat2b,EAAGgC,KAAKzf,QAAQspc,aAAc7pb,KAAKzf,QAAQ4pc,qBAAsBptb,EAAGwtb,EAAK,IAC/Hhqc,KACAqJ,EACHosc,iBAAkBh4b,GAClB,EAEJgC,KAAKw1b,cACL,MAAMS,EAA8B11c,GAAWA,EAAQ01c,6BAA+Bj2b,KAAKzf,QAAQ01c,4BAC7FvG,EAAkBnvc,GAAWA,EAAQkrc,oBAA2D7yb,IAA1CrY,EAAQkrc,cAAciE,gBAAgCnvc,EAAQkrc,cAAciE,gBAAkB1vb,KAAKzf,QAAQkrc,cAAciE,gBA2CrL,MA1Cc,CAAC,CACb78X,MAAO7yD,KAAK21b,eACZO,UAAWt6b,GAAOk6b,EAAUl6b,IAC3B,CACDi3D,MAAO7yD,KAAKoyF,OACZ8jW,UAAWt6b,GAAOoE,KAAKy0b,YAAcqB,EAAU91b,KAAK21G,OAAO/5G,IAAQk6b,EAAUl6b,KAEzEhZ,SAAQuzc,IAEZ,IADAN,EAAW,EACJtyb,EAAQ4yb,EAAKtjY,MAAM/uD,KAAKrC,IAAM,CACnC,MAAM20b,EAAa7yb,EAAM,GAAGwvE,OAE5B,GADA34F,EAAQ27c,EAAaK,QACPx9b,IAAVxe,EACF,GAA2C,oBAAhC67c,EAA4C,CACrD,MAAM3pG,EAAO2pG,EAA4Bx0b,EAAK8B,EAAOhjB,GACrDnG,EAAwB,kBAATkyW,EAAoBA,EAAO,EAC5C,MAAO,GAAI/rW,GAAWxG,OAAOC,UAAUb,eAAegB,KAAKoG,EAAS61c,GAClEh8c,EAAQ,OACH,IAAIs1c,EAAiB,CAC1Bt1c,EAAQmpB,EAAM,GACd,QACF,CACEvD,KAAKf,OAAOyO,KAAK,8BAA8B0ob,uBAAgC30b,KAC/ErnB,EAAQ,EACV,KAC0B,kBAAVA,GAAuB4lB,KAAK20b,sBAC5Cv6c,EAAQivc,EAAWjvc,IAErB,MAAM87c,EAAYC,EAAKD,UAAU97c,GASjC,GARAqnB,EAAMA,EAAIvb,QAAQqd,EAAM,GAAI2yb,GACxBxG,GACFyG,EAAKtjY,MAAM2rB,WAAapkG,EAAMZ,OAC9B28c,EAAKtjY,MAAM2rB,WAAaj7E,EAAM,GAAG/pB,QAEjC28c,EAAKtjY,MAAM2rB,UAAY,EAEzBq3W,IACIA,GAAY71b,KAAKs1b,YACnB,KAEJ,KAEK7zb,CACT,CACA,IAAAmub,CAAKnub,EAAKqjG,GACR,IACIvhG,EACAnpB,EACAi8c,EAHA91c,EAAUof,UAAUnmB,OAAS,QAAsBof,IAAjB+G,UAAU,GAAmBA,UAAU,GAAK,CAAC,EAInF,SAAS22b,EAAiBp8c,EAAKq8c,GAC7B,MAAMC,EAAMx2b,KAAKq1b,wBACjB,GAAIn7c,EAAIkB,QAAQo7c,GAAO,EAAG,OAAOt8c,EACjC,MAAMoB,EAAIpB,EAAI6pB,MAAM,IAAIsF,OAAO,GAAGmtb,WAClC,IAAI1gK,EAAgB,IAAIx6S,EAAE,KAC1BpB,EAAMoB,EAAE,GACRw6S,EAAgB91R,KAAK61G,YAAYigL,EAAeugK,GAChD,MAAMI,EAAsB3gK,EAAcvyR,MAAM,MAC1Cmzb,EAAsB5gK,EAAcvyR,MAAM,OAC5Ckzb,GAAuBA,EAAoBj9c,OAAS,IAAM,IAAMk9c,GAAuBA,EAAoBl9c,OAAS,IAAM,KAC5Hs8S,EAAgBA,EAAc5vS,QAAQ,KAAM,MAE9C,IACEmwc,EAAgB7wb,KAAKrC,MAAM2yR,GACvBygK,IAAkBF,EAAgB,IACjCE,KACAF,GAEP,CAAE,MAAO/7c,GAEP,OADA0lB,KAAKf,OAAOyO,KAAK,oDAAoDxzB,IAAOI,GACrE,GAAGJ,IAAMs8c,IAAM1gK,GACxB,CAEA,cADOugK,EAAc94b,aACdrjB,CACT,CACA,KAAOqpB,EAAQvD,KAAKmsb,cAAcrob,KAAKrC,IAAM,CAC3C,IAAIwlC,EAAa,GACjBovZ,EAAgB,IACX91c,GAEL81c,EAAgBA,EAAcnwc,SAA4C,kBAA1Bmwc,EAAcnwc,QAAuBmwc,EAAcnwc,QAAUmwc,EAC7GA,EAActG,oBAAqB,SAC5BsG,EAAc94b,aACrB,IAAIo5b,GAAW,EACf,IAAgD,IAA5Cpzb,EAAM,GAAGnoB,QAAQ4kB,KAAK80b,mBAA4B,OAAO11b,KAAKmE,EAAM,IAAK,CAC3E,MAAM9oB,EAAI8oB,EAAM,GAAGQ,MAAM/D,KAAK80b,iBAAiBh3c,KAAI6+E,GAAQA,EAAKoW,SAChExvE,EAAM,GAAK9oB,EAAEwqB,QACbgiC,EAAaxsD,EACbk8c,GAAW,CACb,CAEA,GADAv8c,EAAQ0qH,EAAGwxV,EAAiBn8c,KAAK6lB,KAAMuD,EAAM,GAAGwvE,OAAQsjX,GAAgBA,GACpEj8c,GAASmpB,EAAM,KAAO9B,GAAwB,kBAAVrnB,EAAoB,OAAOA,EAC9C,kBAAVA,IAAoBA,EAAQivc,EAAWjvc,IAC7CA,IACH4lB,KAAKf,OAAOyO,KAAK,qBAAqBnK,EAAM,kBAAkB9B,KAC9DrnB,EAAQ,IAENu8c,IACFv8c,EAAQ6sD,EAAWrF,QAAO,CAAC3/B,EAAGlF,IAAMiD,KAAKurC,OAAOtpC,EAAGlF,EAAGxc,EAAQgqc,IAAK,IAC9Dhqc,EACHy1c,iBAAkBzyb,EAAM,GAAGwvE,UACzB34F,EAAM24F,SAEZtxE,EAAMA,EAAIvb,QAAQqd,EAAM,GAAInpB,GAC5B4lB,KAAKoyF,OAAO5T,UAAY,CAC1B,CACA,OAAO/8E,CACT,EAgCF,SAASm1b,EAAsBl7b,GAC7B,MAAM02G,EAAQ,CAAC,EACf,OAAO,SAAyBx2G,EAAK2ub,EAAKhqc,GACxC,MAAMrG,EAAMqwc,EAAM/kb,KAAKC,UAAUllB,GACjC,IAAIs5D,EAAYu4D,EAAMl4H,GAKtB,OAJK2/D,IACHA,EAAYn+C,EAAGsub,EAAeO,GAAMhqc,GACpC6xH,EAAMl4H,GAAO2/D,GAERA,EAAUj+C,EACnB,CACF,CACA,MAAMi7b,EACJ,WAAAh1a,GACE,IAAIthC,EAAUof,UAAUnmB,OAAS,QAAsBof,IAAjB+G,UAAU,GAAmBA,UAAU,GAAK,CAAC,EACnFK,KAAKf,OAASkqb,EAAWv8a,OAAO,aAChC5M,KAAKzf,QAAUA,EACfyf,KAAKklD,QAAU,CACb3e,OAAQqwZ,GAAsB,CAACrM,EAAKrvL,KAClC,MAAMrhN,EAAY,IAAI0G,KAAKu2Y,aAAavM,EAAK,IACxCrvL,IAEL,OAAOt/P,GAAOi+C,EAAUtO,OAAO3vC,EAAI,IAErCzR,SAAUysc,GAAsB,CAACrM,EAAKrvL,KACpC,MAAMrhN,EAAY,IAAI0G,KAAKu2Y,aAAavM,EAAK,IACxCrvL,EACHr+Q,MAAO,aAET,OAAO+e,GAAOi+C,EAAUtO,OAAO3vC,EAAI,IAErCojM,SAAU43P,GAAsB,CAACrM,EAAKrvL,KACpC,MAAMrhN,EAAY,IAAI0G,KAAKC,eAAe+pY,EAAK,IAC1CrvL,IAEL,OAAOt/P,GAAOi+C,EAAUtO,OAAO3vC,EAAI,IAErCm7b,aAAcH,GAAsB,CAACrM,EAAKrvL,KACxC,MAAMrhN,EAAY,IAAI0G,KAAKI,mBAAmB4pY,EAAK,IAC9CrvL,IAEL,OAAOt/P,GAAOi+C,EAAUtO,OAAO3vC,EAAKs/P,EAAIx7I,OAAS,MAAM,IAEzD1lD,KAAM48X,GAAsB,CAACrM,EAAKrvL,KAChC,MAAMrhN,EAAY,IAAI0G,KAAKy2Y,WAAWzM,EAAK,IACtCrvL,IAEL,OAAOt/P,GAAOi+C,EAAUtO,OAAO3vC,EAAI,KAGvCoE,KAAKkxH,KAAK3wI,EACZ,CACA,IAAA2wI,CAAKs1I,GAIH,MAAMkuL,GAHQ/0b,UAAUnmB,OAAS,QAAsBof,IAAjB+G,UAAU,GAAmBA,UAAU,GAAK,CAChF8rb,cAAe,CAAC,IAEIA,cACtBzrb,KAAK80b,gBAAkBJ,EAAMI,gBAAkBJ,EAAMI,gBAAkBJ,EAAMI,iBAAmB,GAClG,CACA,GAAA3tb,CAAIviB,EAAMkgH,GACR9kG,KAAKklD,QAAQtgE,EAAK6hB,cAAcssE,QAAU+xB,CAC5C,CACA,SAAAmyV,CAAUryc,EAAMkgH,GACd9kG,KAAKklD,QAAQtgE,EAAK6hB,cAAcssE,QAAU6jX,EAAsB9xV,EAClE,CACA,MAAAv5D,CAAOnxD,EAAOmxD,EAAQg/Y,GACpB,IAAIhqc,EAAUof,UAAUnmB,OAAS,QAAsBof,IAAjB+G,UAAU,GAAmBA,UAAU,GAAK,CAAC,EA0BnF,OAzBgB4rC,EAAOxnC,MAAM/D,KAAK80b,iBACXlzZ,QAAO,CAACs1Z,EAAKn6b,KAClC,MAAM,WACJo6b,EAAU,cACV72Y,GApGR,SAAwBlH,GACtB,IAAI+9Y,EAAa/9Y,EAAU3yC,cAAcssE,OACzC,MAAMzyB,EAAgB,CAAC,EACvB,GAAIlH,EAAUh+D,QAAQ,MAAQ,EAAG,CAC/B,MAAMkkB,EAAI85C,EAAUr1C,MAAM,KAC1Bozb,EAAa73b,EAAE,GAAGmH,cAAcssE,OAChC,MAAMqkX,EAAS93b,EAAE,GAAG9jB,UAAU,EAAG8jB,EAAE,GAAG9lB,OAAS,GAC5B,aAAf29c,GAA6BC,EAAOh8c,QAAQ,KAAO,EAChDklE,EAAcn2D,WAAUm2D,EAAcn2D,SAAWitc,EAAOrkX,QACrC,iBAAfokX,GAAiCC,EAAOh8c,QAAQ,KAAO,EAC3DklE,EAAco/D,QAAOp/D,EAAco/D,MAAQ03U,EAAOrkX,QAE1CqkX,EAAOrzb,MAAM,KACrBnhB,SAAQs4Q,IACX,IAAKA,EAAK,OACV,MAAOhhR,KAAQwC,GAAQw+Q,EAAIn3P,MAAM,KAC3BnI,EAAMlf,EAAKkiB,KAAK,KAAKm0E,OAAO7sF,QAAQ,WAAY,IACjDo6D,EAAcpmE,EAAI64F,UAASzyB,EAAcpmE,EAAI64F,QAAUn3E,GAChD,UAARA,IAAiB0kD,EAAcpmE,EAAI64F,SAAU,GACrC,SAARn3E,IAAgB0kD,EAAcpmE,EAAI64F,SAAU,GAC3CzxE,MAAM1F,KAAM0kD,EAAcpmE,EAAI64F,QAAUl2E,SAASjB,EAAK,IAAG,GAGpE,CACA,MAAO,CACLu7b,aACA72Y,gBAEJ,CAyEU+2Y,CAAet6b,GACnB,GAAIiD,KAAKklD,QAAQiyY,GAAa,CAC5B,IAAI/rM,EAAY8rM,EAChB,IACE,MAAMI,EAAa/2c,GAAWA,EAAQg3c,cAAgBh3c,EAAQg3c,aAAah3c,EAAQy1c,mBAAqB,CAAC,EACnGlla,EAAIwma,EAAWp/a,QAAUo/a,EAAW/M,KAAOhqc,EAAQ23B,QAAU33B,EAAQgqc,KAAOA,EAClFn/L,EAAYprP,KAAKklD,QAAQiyY,GAAYD,EAAKpma,EAAG,IACxCwvB,KACA//D,KACA+2c,GAEP,CAAE,MAAO5zc,GACPsc,KAAKf,OAAOyO,KAAKhqB,EACnB,CACA,OAAO0nQ,CACT,CAGA,OAFEprP,KAAKf,OAAOyO,KAAK,oCAAoCypb,KAEhDD,CAAG,GACT98c,EAEL,EASF,MAAMo9c,UAAkB3sJ,EACtB,WAAAhpR,CAAY41a,EAASx4R,EAAOunG,GAC1B,IAAIjmR,EAAUof,UAAUnmB,OAAS,QAAsBof,IAAjB+G,UAAU,GAAmBA,UAAU,GAAK,CAAC,EACnFymB,QACApmB,KAAKy3b,QAAUA,EACfz3b,KAAKi/J,MAAQA,EACbj/J,KAAKwmQ,SAAWA,EAChBxmQ,KAAKyub,cAAgBjoL,EAASioL,cAC9Bzub,KAAKzf,QAAUA,EACfyf,KAAKf,OAASkqb,EAAWv8a,OAAO,oBAChC5M,KAAK03b,aAAe,GACpB13b,KAAK23b,iBAAmBp3c,EAAQo3c,kBAAoB,GACpD33b,KAAK43b,aAAe,EACpB53b,KAAK63b,WAAat3c,EAAQs3c,YAAc,EAAIt3c,EAAQs3c,WAAa,EACjE73b,KAAKw1Z,aAAej1a,EAAQi1a,cAAgB,EAAIj1a,EAAQi1a,aAAe,IACvEx1Z,KAAKsI,MAAQ,CAAC,EACdtI,KAAKo1H,MAAQ,GACTp1H,KAAKy3b,SAAWz3b,KAAKy3b,QAAQvmU,MAC/BlxH,KAAKy3b,QAAQvmU,KAAKs1I,EAAUjmR,EAAQk3c,QAASl3c,EAEjD,CACA,SAAAu3c,CAAUlsX,EAAWggX,EAAYrrc,EAAS4nC,GACxC,MAAM4va,EAAS,CAAC,EACV39Z,EAAU,CAAC,EACX49Z,EAAkB,CAAC,EACnBC,EAAmB,CAAC,EA4B1B,OA3BArsX,EAAUhpF,SAAQ2nc,IAChB,IAAI2N,GAAmB,EACvBtM,EAAWhpc,SAAQmyH,IACjB,MAAMnwH,EAAO,GAAG2lc,KAAOx1U,KAClBx0H,EAAQizR,QAAUxzQ,KAAKi/J,MAAM2rR,kBAAkBL,EAAKx1U,GACvD/0G,KAAKsI,MAAM1jB,GAAQ,EACVob,KAAKsI,MAAM1jB,GAAQ,IAAmC,IAArBob,KAAKsI,MAAM1jB,QAC/BgU,IAAlBwhC,EAAQx1C,KAAqBw1C,EAAQx1C,IAAQ,IAEjDob,KAAKsI,MAAM1jB,GAAQ,EACnBszc,GAAmB,OACGt/b,IAAlBwhC,EAAQx1C,KAAqBw1C,EAAQx1C,IAAQ,QAC5BgU,IAAjBm/b,EAAOnzc,KAAqBmzc,EAAOnzc,IAAQ,QAClBgU,IAAzBq/b,EAAiBljV,KAAmBkjV,EAAiBljV,IAAM,IACjE,IAEGmjV,IAAkBF,EAAgBzN,IAAO,EAAI,KAEhDxwc,OAAOiC,KAAK+7c,GAAQv+c,QAAUO,OAAOiC,KAAKo+C,GAAS5gD,SACrDwmB,KAAKo1H,MAAM/5I,KAAK,CACd++C,UACA+9Z,aAAcp+c,OAAOiC,KAAKo+C,GAAS5gD,OACnCsqO,OAAQ,CAAC,EACTl5M,OAAQ,GACRud,aAGG,CACL4va,OAAQh+c,OAAOiC,KAAK+7c,GACpB39Z,QAASrgD,OAAOiC,KAAKo+C,GACrB49Z,gBAAiBj+c,OAAOiC,KAAKg8c,GAC7BC,iBAAkBl+c,OAAOiC,KAAKi8c,GAElC,CACA,MAAAn0O,CAAOl/N,EAAMqhB,EAAKrc,GAChB,MAAMhP,EAAIgK,EAAKmf,MAAM,KACfwmb,EAAM3vc,EAAE,GACRm6H,EAAKn6H,EAAE,GACTqrB,GAAKjG,KAAK6zX,KAAK,gBAAiB02D,EAAKx1U,EAAI9uG,GACzCrc,GACFoW,KAAKi/J,MAAMyrR,kBAAkBH,EAAKx1U,EAAInrH,GAExCoW,KAAKsI,MAAM1jB,GAAQqhB,GAAO,EAAI,EAC9B,MAAM69M,EAAS,CAAC,EAChB9jN,KAAKo1H,MAAMxyI,SAAQguC,KAn5CvB,SAAkB+V,EAAQjhD,EAAM46E,EAAUvkE,GACxC,MAAM,IACJI,EAAG,EACH6B,GACEsrb,EAAc3iZ,EAAQjhD,EAAM3L,QAChCoiB,EAAI6B,GAAK7B,EAAI6B,IAAM,GACfjC,IAAQI,EAAI6B,GAAK7B,EAAI6B,GAAGjC,OAAOukE,IAC9BvkE,GAAQI,EAAI6B,GAAG3iB,KAAKilF,EAC3B,CA44CM83X,CAASxna,EAAEkzL,OAAQ,CAACymO,GAAMx1U,GA7EhC,SAAuBnkF,EAAGhsC,QACAgU,IAApBg4B,EAAEwJ,QAAQx1C,YACLgsC,EAAEwJ,QAAQx1C,GACjBgsC,EAAEuna,eAEN,CAyEME,CAAczna,EAAGhsC,GACbqhB,GAAK2qB,EAAEhmB,OAAOvvB,KAAK4qB,GACA,IAAnB2qB,EAAEuna,cAAuBvna,EAAEoE,OAC7Bj7C,OAAOiC,KAAK40C,EAAEkzL,QAAQlhO,SAAQkuC,IACvBgzL,EAAOhzL,KAAIgzL,EAAOhzL,GAAK,CAAC,GAC7B,MAAMwna,EAAa1na,EAAEkzL,OAAOhzL,GACxBwna,EAAW9+c,QACb8+c,EAAW11c,SAAQpI,SACIoe,IAAjBkrN,EAAOhzL,GAAGt2C,KAAkBspO,EAAOhzL,GAAGt2C,IAAK,EAAI,GAEvD,IAEFo2C,EAAEoE,MAAO,EACLpE,EAAEhmB,OAAOpxB,OACXo3C,EAAEzI,SAASyI,EAAEhmB,QAEbgmB,EAAEzI,WAEN,IAEFnoB,KAAK6zX,KAAK,SAAU/vK,GACpB9jN,KAAKo1H,MAAQp1H,KAAKo1H,MAAMpxH,QAAO4sB,IAAMA,EAAEoE,MACzC,CACA,IAAAg5H,CAAKu8R,EAAKx1U,EAAIwjV,GACZ,IAAIC,EAAQ74b,UAAUnmB,OAAS,QAAsBof,IAAjB+G,UAAU,GAAmBA,UAAU,GAAK,EAC5EmqF,EAAOnqF,UAAUnmB,OAAS,QAAsBof,IAAjB+G,UAAU,GAAmBA,UAAU,GAAKK,KAAKw1Z,aAChFrtY,EAAWxoB,UAAUnmB,OAAS,EAAImmB,UAAU,QAAK/G,EACrD,IAAK2xb,EAAI/wc,OAAQ,OAAO2uC,EAAS,KAAM,CAAC,GACxC,GAAInoB,KAAK43b,cAAgB53b,KAAK23b,iBAS5B,YARA33b,KAAK03b,aAAar8c,KAAK,CACrBkvc,MACAx1U,KACAwjV,SACAC,QACA1uW,OACA3hE,aAIJnoB,KAAK43b,eACL,MAAM95K,EAAW,CAAC73Q,EAAKrc,KAErB,GADAoW,KAAK43b,eACD53b,KAAK03b,aAAal+c,OAAS,EAAG,CAChC,MAAMu0B,EAAO/N,KAAK03b,aAAazyb,QAC/BjF,KAAKguJ,KAAKjgJ,EAAKw8a,IAAKx8a,EAAKgnG,GAAIhnG,EAAKwqb,OAAQxqb,EAAKyqb,MAAOzqb,EAAK+7E,KAAM/7E,EAAKoa,SACxE,CACIliB,GAAOrc,GAAQ4uc,EAAQx4b,KAAK63b,WAC9Bvpb,YAAW,KACTtO,KAAKguJ,KAAK7zK,KAAK6lB,KAAMuqb,EAAKx1U,EAAIwjV,EAAQC,EAAQ,EAAU,EAAP1uW,EAAU3hE,EAAS,GACnE2hE,GAGL3hE,EAASliB,EAAKrc,EAAK,EAEfk7G,EAAK9kG,KAAKy3b,QAAQc,GAAQ73b,KAAKV,KAAKy3b,SAC1C,GAAkB,IAAd3yV,EAAGtrH,OAaP,OAAOsrH,EAAGylV,EAAKx1U,EAAI+oK,GAZjB,IACE,MAAMrjS,EAAIqqH,EAAGylV,EAAKx1U,GACdt6H,GAAuB,oBAAXA,EAAE4zB,KAChB5zB,EAAE4zB,MAAKzkB,GAAQk0R,EAAS,KAAMl0R,KAAOw+B,MAAM01P,GAE3CA,EAAS,KAAMrjS,EAEnB,CAAE,MAAOwrB,GACP63Q,EAAS73Q,EACX,CAIJ,CACA,cAAAwyb,CAAe7sX,EAAWggX,GACxB,IAAIrrc,EAAUof,UAAUnmB,OAAS,QAAsBof,IAAjB+G,UAAU,GAAmBA,UAAU,GAAK,CAAC,EAC/EwoB,EAAWxoB,UAAUnmB,OAAS,EAAImmB,UAAU,QAAK/G,EACrD,IAAKoH,KAAKy3b,QAER,OADAz3b,KAAKf,OAAOyO,KAAK,kEACVya,GAAYA,IAEI,kBAAdyjD,IAAwBA,EAAY5rE,KAAKyub,cAAcI,mBAAmBjjX,IAC3D,kBAAfggX,IAAyBA,EAAa,CAACA,IAClD,MAAMmM,EAAS/3b,KAAK83b,UAAUlsX,EAAWggX,EAAYrrc,EAAS4nC,GAC9D,IAAK4va,EAAOA,OAAOv+c,OAEjB,OADKu+c,EAAO39Z,QAAQ5gD,QAAQ2uC,IACrB,KAET4va,EAAOA,OAAOn1c,SAAQgC,IACpBob,KAAK04b,QAAQ9zc,EAAK,GAEtB,CACA,IAAA2a,CAAKqsE,EAAWggX,EAAYzja,GAC1BnoB,KAAKy4b,eAAe7sX,EAAWggX,EAAY,CAAC,EAAGzja,EACjD,CACA,MAAAqrP,CAAO5nM,EAAWggX,EAAYzja,GAC5BnoB,KAAKy4b,eAAe7sX,EAAWggX,EAAY,CACzCp4K,QAAQ,GACPrrP,EACL,CACA,OAAAuwa,CAAQ9zc,GACN,IAAI29C,EAAS5iC,UAAUnmB,OAAS,QAAsBof,IAAjB+G,UAAU,GAAmBA,UAAU,GAAK,GACjF,MAAM/kB,EAAIgK,EAAKmf,MAAM,KACfwmb,EAAM3vc,EAAE,GACRm6H,EAAKn6H,EAAE,GACbolB,KAAKguJ,KAAKu8R,EAAKx1U,EAAI,YAAQn8G,OAAWA,GAAW,CAACqN,EAAKrc,KACjDqc,GAAKjG,KAAKf,OAAOyO,KAAK,GAAG60B,sBAA2BwyE,kBAAmBw1U,WAActkb,IACpFA,GAAOrc,GAAMoW,KAAKf,OAAOuB,IAAI,GAAG+hC,qBAA0BwyE,kBAAmBw1U,IAAO3gc,GACzFoW,KAAK8jN,OAAOl/N,EAAMqhB,EAAKrc,EAAK,GAEhC,CACA,WAAAslc,CAAYtjX,EAAWnM,EAAWvlF,EAAKy+c,EAAeC,GACpD,IAAIr4c,EAAUof,UAAUnmB,OAAS,QAAsBof,IAAjB+G,UAAU,GAAmBA,UAAU,GAAK,CAAC,EAC/Ek5b,EAAMl5b,UAAUnmB,OAAS,QAAsBof,IAAjB+G,UAAU,GAAmBA,UAAU,GAAK,OAC9E,GAAIK,KAAKwmQ,SAAS5sM,OAAS55D,KAAKwmQ,SAAS5sM,MAAM42X,qBAAuBxwb,KAAKwmQ,SAAS5sM,MAAM42X,mBAAmB/wX,GAC3Gz/D,KAAKf,OAAOyO,KAAK,qBAAqBxzB,wBAA0BulF,wBAAiC,iOAGnG,QAAY7mE,IAAR1e,GAA6B,OAARA,GAAwB,KAARA,EAAzC,CACA,GAAI8lB,KAAKy3b,SAAWz3b,KAAKy3b,QAAQ7qb,OAAQ,CACvC,MAAMtH,EAAO,IACR/kB,EACHq4c,YAEI9zV,EAAK9kG,KAAKy3b,QAAQ7qb,OAAOlM,KAAKV,KAAKy3b,SACzC,GAAI3yV,EAAGtrH,OAAS,EACd,IACE,IAAIiB,EAEFA,EADgB,IAAdqqH,EAAGtrH,OACDsrH,EAAGl5B,EAAWnM,EAAWvlF,EAAKy+c,EAAerzb,GAE7Cw/F,EAAGl5B,EAAWnM,EAAWvlF,EAAKy+c,GAEhCl+c,GAAuB,oBAAXA,EAAE4zB,KAChB5zB,EAAE4zB,MAAKzkB,GAAQivc,EAAI,KAAMjvc,KAAOw+B,MAAMywa,GAEtCA,EAAI,KAAMp+c,EAEd,CAAE,MAAOwrB,GACP4yb,EAAI5yb,EACN,MAEA6+F,EAAGl5B,EAAWnM,EAAWvlF,EAAKy+c,EAAeE,EAAKvzb,EAEtD,CACKsmE,GAAcA,EAAU,IAC7B5rE,KAAKi/J,MAAMurR,YAAY5+W,EAAU,GAAInM,EAAWvlF,EAAKy+c,EA5BM,CA6B7D,EAGF,SAAS7vb,IACP,MAAO,CACLzI,OAAO,EACPy4b,eAAe,EACf/jV,GAAI,CAAC,eACLm1U,UAAW,CAAC,eACZyE,YAAa,CAAC,OACdwB,YAAY,EACZqB,eAAe,EACfQ,0BAA0B,EAC1Bzyb,KAAM,MACNg2N,SAAS,EACT4+N,sBAAsB,EACtBtK,aAAc,IACd8B,YAAa,IACbkF,gBAAiB,IACjBG,iBAAkB,IAClB+H,yBAAyB,EACzB7J,aAAa,EACbZ,eAAe,EACfM,cAAe,WACfO,oBAAoB,EACpBH,mBAAmB,EACnBiH,6BAA6B,EAC7BpG,aAAa,EACbG,yBAAyB,EACzBkB,YAAY,EACZC,mBAAmB,EACnB9D,eAAe,EACfJ,YAAY,EACZK,uBAAuB,EACvBiC,wBAAwB,EACxBD,6BAA6B,EAC7B/C,yBAAyB,EACzBF,iCAAkC,SAAgBhzc,GAChD,IAAI+0B,EAAM,CAAC,EAIX,GAHuB,kBAAZ/0B,EAAK,KAAiB+0B,EAAM/0B,EAAK,IACrB,kBAAZA,EAAK,KAAiB+0B,EAAI7Q,aAAelkB,EAAK,IAClC,kBAAZA,EAAK,KAAiB+0B,EAAI4qb,aAAe3/c,EAAK,IAClC,kBAAZA,EAAK,IAAsC,kBAAZA,EAAK,GAAiB,CAC9D,MAAMkH,EAAUlH,EAAK,IAAMA,EAAK,GAChCU,OAAOiC,KAAKuE,GAASqC,SAAQ1I,IAC3Bk0B,EAAIl0B,GAAOqG,EAAQrG,EAAI,GAE3B,CACA,OAAOk0B,CACT,EACAq9a,cAAe,CACbgJ,aAAa,EACblpZ,OAAQ,CAACnxD,EAAOmxD,EAAQg/Y,EAAKhqc,IAAYnG,EACzCmoD,OAAQ,KACR8sZ,OAAQ,KACRyF,gBAAiB,IACjBC,eAAgB,IAChBE,cAAe,MACfE,cAAe,IACfE,wBAAyB,IACzBC,YAAa,IACb5F,iBAAiB,GAGvB,CACA,SAASuJ,EAAiB14c,GAOxB,MAN0B,kBAAfA,EAAQw0H,KAAiBx0H,EAAQw0H,GAAK,CAACx0H,EAAQw0H,KACvB,kBAAxBx0H,EAAQouc,cAA0Bpuc,EAAQouc,YAAc,CAACpuc,EAAQouc,cAC1C,kBAAvBpuc,EAAQ4vc,aAAyB5vc,EAAQ4vc,WAAa,CAAC5vc,EAAQ4vc,aACtE5vc,EAAQixc,eAAiBjxc,EAAQixc,cAAcp2c,QAAQ,UAAY,IACrEmF,EAAQixc,cAAgBjxc,EAAQixc,cAAcz1b,OAAO,CAAC,YAEjDxb,CACT,CAEA,SAASwwB,IAAQ,CASjB,MAAMmob,UAAaruJ,EACjB,WAAAhpR,GACE,IAAIthC,EAAUof,UAAUnmB,OAAS,QAAsBof,IAAjB+G,UAAU,GAAmBA,UAAU,GAAK,CAAC,EAC/EwoB,EAAWxoB,UAAUnmB,OAAS,EAAImmB,UAAU,QAAK/G,EAXzD,IAA6BuxI,EAoBzB,GARA/jH,QACApmB,KAAKzf,QAAU04c,EAAiB14c,GAChCyf,KAAKwmQ,SAAW,CAAC,EACjBxmQ,KAAKf,OAASkqb,EACdnpb,KAAKuqK,QAAU,CACb4uR,SAAU,IAjBahvT,EAmBLnqI,KAlBTjmB,OAAOy5C,oBAAoBz5C,OAAOo2C,eAAeg6G,IACzDvnJ,SAAQs0c,IACc,oBAAd/sT,EAAK+sT,KACd/sT,EAAK+sT,GAAO/sT,EAAK+sT,GAAKx2b,KAAKypI,GAC7B,IAeIhiH,IAAanoB,KAAKkmQ,gBAAkB3lR,EAAQkyP,QAAS,CACvD,IAAKzyO,KAAKzf,QAAQu4c,cAEhB,OADA94b,KAAKkxH,KAAK3wI,EAAS4nC,GACZnoB,KAETsO,YAAW,KACTtO,KAAKkxH,KAAK3wI,EAAS4nC,EAAS,GAC3B,EACL,CACF,CACA,IAAA+oG,GACE,IAAI9/G,EAAQpR,KACZ,IAAIzf,EAAUof,UAAUnmB,OAAS,QAAsBof,IAAjB+G,UAAU,GAAmBA,UAAU,GAAK,CAAC,EAC/EwoB,EAAWxoB,UAAUnmB,OAAS,EAAImmB,UAAU,QAAK/G,EAC9B,oBAAZrY,IACT4nC,EAAW5nC,EACXA,EAAU,CAAC,IAERA,EAAQ2pc,YAAmC,IAAtB3pc,EAAQ2pc,WAAuB3pc,EAAQw0H,KACrC,kBAAfx0H,EAAQw0H,GACjBx0H,EAAQ2pc,UAAY3pc,EAAQw0H,GACnBx0H,EAAQw0H,GAAG35H,QAAQ,eAAiB,IAC7CmF,EAAQ2pc,UAAY3pc,EAAQw0H,GAAG,KAGnC,MAAMqkV,EAAUtwb,IAkBhB,SAASuwb,EAAoBC,GAC3B,OAAKA,EACwB,oBAAlBA,EAAqC,IAAIA,EAC7CA,EAFoB,IAG7B,CACA,GAtBAt5b,KAAKzf,QAAU,IACV64c,KACAp5b,KAAKzf,WACL04c,EAAiB14c,IAEgB,OAAlCyf,KAAKzf,QAAQuqc,mBACf9qb,KAAKzf,QAAQkrc,cAAgB,IACxB2N,EAAQ3N,iBACRzrb,KAAKzf,QAAQkrc,qBAGS7yb,IAAzBrY,EAAQspc,eACV7pb,KAAKzf,QAAQwrc,wBAA0Bxrc,EAAQspc,mBAErBjxb,IAAxBrY,EAAQorc,cACV3rb,KAAKzf,QAAQyrc,uBAAyBzrc,EAAQorc,cAO3C3rb,KAAKzf,QAAQkyP,QAAS,CAMzB,IAAI54L,EALA75C,KAAKuqK,QAAQtrK,OACfkqb,EAAWj4T,KAAKmoU,EAAoBr5b,KAAKuqK,QAAQtrK,QAASe,KAAKzf,SAE/D4oc,EAAWj4T,KAAK,KAAMlxH,KAAKzf,SAGzByf,KAAKuqK,QAAQ1wH,UACfA,EAAY75C,KAAKuqK,QAAQ1wH,UACA,qBAAT0G,OAChB1G,EAAYg9Y,GAEd,MAAMrrV,EAAK,IAAI+lV,EAAavxb,KAAKzf,SACjCyf,KAAKi/J,MAAQ,IAAIgrR,EAAcjqb,KAAKzf,QAAQqtK,UAAW5tJ,KAAKzf,SAC5D,MAAM3F,EAAIolB,KAAKwmQ,SACf5rR,EAAEqkB,OAASkqb,EACXvuc,EAAEw2c,cAAgBpxb,KAAKi/J,MACvBrkL,EAAE6zc,cAAgBjjV,EAClB5wH,EAAEmzc,eAAiB,IAAIkF,EAAeznV,EAAI,CACxC3wH,QAASmlB,KAAKzf,QAAQswc,gBACtBqC,kBAAmBlzb,KAAKzf,QAAQ2yc,kBAChCiB,qBAAsBn0b,KAAKzf,QAAQ4zc,wBAEjCt6Y,GAAe75C,KAAKzf,QAAQkrc,cAAclgZ,QAAUvrC,KAAKzf,QAAQkrc,cAAclgZ,SAAW6tZ,EAAQ3N,cAAclgZ,SAClH3wD,EAAEi/D,UAAYw/Y,EAAoBx/Y,GAClCj/D,EAAEi/D,UAAUq3E,KAAKt2I,EAAGolB,KAAKzf,SACzByf,KAAKzf,QAAQkrc,cAAclgZ,OAAS3wD,EAAEi/D,UAAUtO,OAAO7qC,KAAK9lB,EAAEi/D,YAEhEj/D,EAAE65L,aAAe,IAAI+/Q,EAAax0b,KAAKzf,SACvC3F,EAAEg/E,MAAQ,CACR42X,mBAAoBxwb,KAAKwwb,mBAAmB9vb,KAAKV,OAEnDplB,EAAEq0c,iBAAmB,IAAIuI,EAAU6B,EAAoBr5b,KAAKuqK,QAAQktR,SAAU78c,EAAEw2c,cAAex2c,EAAGolB,KAAKzf,SACvG3F,EAAEq0c,iBAAiBx8Z,GAAG,KAAK,SAAUjuC,GACnC,IAAK,IAAIi1B,EAAO9Z,UAAUnmB,OAAQH,EAAO,IAAIO,MAAM6/B,EAAO,EAAIA,EAAO,EAAI,GAAIC,EAAO,EAAGA,EAAOD,EAAMC,IAClGrgC,EAAKqgC,EAAO,GAAK/Z,UAAU+Z,GAE7BtI,EAAMyiX,KAAKrvY,KAAUnL,EACvB,IACI2mB,KAAKuqK,QAAQgvR,mBACf3+c,EAAE2+c,iBAAmBF,EAAoBr5b,KAAKuqK,QAAQgvR,kBAClD3+c,EAAE2+c,iBAAiBroU,MAAMt2I,EAAE2+c,iBAAiBroU,KAAKt2I,EAAGolB,KAAKzf,QAAQi5c,UAAWx5b,KAAKzf,UAEnFyf,KAAKuqK,QAAQ4iR,aACfvyc,EAAEuyc,WAAakM,EAAoBr5b,KAAKuqK,QAAQ4iR,YAC5Cvyc,EAAEuyc,WAAWj8T,MAAMt2I,EAAEuyc,WAAWj8T,KAAKlxH,OAE3CA,KAAKorb,WAAa,IAAIG,EAAWvrb,KAAKwmQ,SAAUxmQ,KAAKzf,SACrDyf,KAAKorb,WAAW34Z,GAAG,KAAK,SAAUjuC,GAChC,IAAK,IAAIikc,EAAQ9ob,UAAUnmB,OAAQH,EAAO,IAAIO,MAAM6uc,EAAQ,EAAIA,EAAQ,EAAI,GAAIC,EAAQ,EAAGA,EAAQD,EAAOC,IACxGrvc,EAAKqvc,EAAQ,GAAK/ob,UAAU+ob,GAE9Bt3a,EAAMyiX,KAAKrvY,KAAUnL,EACvB,IACA2mB,KAAKuqK,QAAQ4uR,SAASv2c,SAAQ0+B,IACxBA,EAAE4vG,MAAM5vG,EAAE4vG,KAAKlxH,KAAK,GAE5B,CAGA,GAFAA,KAAKurC,OAASvrC,KAAKzf,QAAQkrc,cAAclgZ,OACpCpjB,IAAUA,EAAWpX,GACtB/Q,KAAKzf,QAAQouc,cAAgB3ub,KAAKwmQ,SAAS+yL,mBAAqBv5b,KAAKzf,QAAQgqc,IAAK,CACpF,MAAMgG,EAAQvwb,KAAKwmQ,SAASioL,cAAcC,iBAAiB1ub,KAAKzf,QAAQouc,aACpE4B,EAAM/2c,OAAS,GAAkB,QAAb+2c,EAAM,KAAcvwb,KAAKzf,QAAQgqc,IAAMgG,EAAM,GACvE,CACKvwb,KAAKwmQ,SAAS+yL,kBAAqBv5b,KAAKzf,QAAQgqc,KACnDvqb,KAAKf,OAAOyO,KAAK,2DAEF,CAAC,cAAe,oBAAqB,oBAAqB,qBAClE9qB,SAAQ21c,IACfv4b,KAAKu4b,GAAU,WACb,OAAOnnb,EAAM6tJ,MAAMs5R,MAAW54b,UAChC,CAAC,IAEqB,CAAC,cAAe,eAAgB,oBAAqB,wBAC7D/c,SAAQ21c,IACtBv4b,KAAKu4b,GAAU,WAEb,OADAnnb,EAAM6tJ,MAAMs5R,MAAW54b,WAChByR,CACT,CAAC,IAEH,MAAM60P,EAAW3pJ,IACX/8G,EAAO,KACX,MAAMk6b,EAAS,CAACxzb,EAAK1rB,KACfylB,KAAKkmQ,gBAAkBlmQ,KAAK05b,sBAAsB15b,KAAKf,OAAOyO,KAAK,yEACvE1N,KAAKkmQ,eAAgB,EAChBlmQ,KAAKzf,QAAQkyP,SAASzyO,KAAKf,OAAOuB,IAAI,cAAeR,KAAKzf,SAC/Dyf,KAAK6zX,KAAK,cAAe7zX,KAAKzf,SAC9B0lR,EAAS7mP,QAAQ7kC,GACjB4tC,EAASliB,EAAK1rB,EAAE,EAElB,GAAIylB,KAAK4rE,WAA+C,OAAlC5rE,KAAKzf,QAAQuqc,mBAA8B9qb,KAAKkmQ,cAAe,OAAOuzL,EAAO,KAAMz5b,KAAKzlB,EAAEmmB,KAAKV,OACrHA,KAAKwrb,eAAexrb,KAAKzf,QAAQgqc,IAAKkP,EAAO,EAO/C,OALIz5b,KAAKzf,QAAQqtK,YAAc5tJ,KAAKzf,QAAQu4c,cAC1Cv5b,IAEA+O,WAAW/O,EAAM,GAEZ0mQ,CACT,CACA,aAAA0zL,CAAcrhb,GACZ,IACIshb,EADWj6b,UAAUnmB,OAAS,QAAsBof,IAAjB+G,UAAU,GAAmBA,UAAU,GAAKoR,EAEnF,MAAM27a,EAA8B,kBAAbp0a,EAAwBA,EAAWtY,KAAKsY,SAE/D,GADwB,oBAAbA,IAAyBshb,EAAethb,IAC9CtY,KAAKzf,QAAQqtK,WAAa5tJ,KAAKzf,QAAQw4c,wBAAyB,CACnE,GAAIrM,GAAqC,WAA1BA,EAAQjmb,iBAAgCzG,KAAKzf,QAAQg1O,SAA2C,IAAhCv1N,KAAKzf,QAAQg1O,QAAQ/7O,QAAe,OAAOogd,IAC1H,MAAM7B,EAAS,GACT57T,EAASouT,IACb,IAAKA,EAAK,OACV,GAAY,WAARA,EAAkB,OACTvqb,KAAKwmQ,SAASioL,cAAcI,mBAAmBtE,GACvD3nc,SAAQkuC,IACD,WAANA,GACAina,EAAO38c,QAAQ01C,GAAK,GAAGina,EAAO18c,KAAKy1C,EAAE,GACzC,EAEJ,GAAK47Z,EAIHvwT,EAAOuwT,OAJK,CACM1sb,KAAKwmQ,SAASioL,cAAcC,iBAAiB1ub,KAAKzf,QAAQouc,aAClE/rc,SAAQkuC,GAAKqrG,EAAOrrG,IAChC,CAGI9wB,KAAKzf,QAAQg1O,SACfv1N,KAAKzf,QAAQg1O,QAAQ3yO,SAAQkuC,GAAKqrG,EAAOrrG,KAE3C9wB,KAAKwmQ,SAASyoL,iBAAiB1vb,KAAKw4b,EAAQ/3b,KAAKzf,QAAQw0H,IAAIz6H,IACtDA,GAAM0lB,KAAK65b,mBAAoB75b,KAAKsY,UAAUtY,KAAK85b,oBAAoB95b,KAAKsY,UACjFshb,EAAat/c,EAAE,GAEnB,MACEs/c,EAAa,KAEjB,CACA,eAAAG,CAAgBxL,EAAMx5U,EAAI5sF,GACxB,MAAM89O,EAAW3pJ,IAQjB,OAPKiyU,IAAMA,EAAOvub,KAAK4rE,WAClBmpC,IAAIA,EAAK/0G,KAAKzf,QAAQw0H,IACtB5sF,IAAUA,EAAWpX,GAC1B/Q,KAAKwmQ,SAASyoL,iBAAiBz7K,OAAO+6K,EAAMx5U,GAAI9uG,IAC9CggQ,EAAS7mP,UACT+I,EAASliB,EAAI,IAERggQ,CACT,CACA,GAAA+zL,CAAI5+b,GACF,IAAKA,EAAQ,MAAM,IAAIsI,MAAM,iGAC7B,IAAKtI,EAAOpd,KAAM,MAAM,IAAI0lB,MAAM,4FAsBlC,MArBoB,YAAhBtI,EAAOpd,OACTgiB,KAAKuqK,QAAQktR,QAAUr8b,IAEL,WAAhBA,EAAOpd,MAAqBod,EAAOoF,KAAOpF,EAAOsS,MAAQtS,EAAO1X,SAClEsc,KAAKuqK,QAAQtrK,OAAS7D,GAEJ,qBAAhBA,EAAOpd,OACTgiB,KAAKuqK,QAAQgvR,iBAAmBn+b,GAEd,eAAhBA,EAAOpd,OACTgiB,KAAKuqK,QAAQ4iR,WAAa/xb,GAER,kBAAhBA,EAAOpd,MACTitc,EAAcE,iBAAiB/vb,GAEb,cAAhBA,EAAOpd,OACTgiB,KAAKuqK,QAAQ1wH,UAAYz+C,GAEP,aAAhBA,EAAOpd,MACTgiB,KAAKuqK,QAAQ4uR,SAAS99c,KAAK+f,GAEtB4E,IACT,CACA,mBAAA85b,CAAoBhpa,GAClB,GAAKA,GAAM9wB,KAAK4rE,aACZ,CAAC,SAAU,OAAOxwF,QAAQ01C,IAAM,GACpC,IAAK,IAAIg/E,EAAK,EAAGA,EAAK9vG,KAAK4rE,UAAUpyF,OAAQs2H,IAAM,CACjD,MAAMmqV,EAAYj6b,KAAK4rE,UAAUkkC,GACjC,KAAI,CAAC,SAAU,OAAO10H,QAAQ6+c,IAAc,IACxCj6b,KAAKi/J,MAAM+rR,4BAA4BiP,GAAY,CACrDj6b,KAAK65b,iBAAmBI,EACxB,KACF,CACF,CACF,CACA,cAAAzO,CAAejB,EAAKpia,GAClB,IAAIhU,EAASnU,KACbA,KAAKk6b,qBAAuB3P,EAC5B,MAAMtkL,EAAW3pJ,IACjBt8G,KAAK6zX,KAAK,mBAAoB02D,GAC9B,MAAM4P,EAAcrpa,IAClB9wB,KAAKsY,SAAWwY,EAChB9wB,KAAK4rE,UAAY5rE,KAAKwmQ,SAASioL,cAAcI,mBAAmB/9Z,GAChE9wB,KAAK65b,sBAAmBjhc,EACxBoH,KAAK85b,oBAAoBhpa,EAAE,EAEvBkE,EAAO,CAAC/uB,EAAK6qB,KACbA,GACFqpa,EAAYrpa,GACZ9wB,KAAKorb,WAAWI,eAAe16Z,GAC/B9wB,KAAKk6b,0BAAuBthc,EAC5BoH,KAAK6zX,KAAK,kBAAmB/iW,GAC7B9wB,KAAKf,OAAOuB,IAAI,kBAAmBswB,IAEnC9wB,KAAKk6b,0BAAuBthc,EAE9BqtQ,EAAS7mP,SAAQ,WACf,OAAOjL,EAAO55B,KAAKolB,UACrB,IACIwoB,GAAUA,EAASliB,GAAK,WAC1B,OAAOkO,EAAO55B,KAAKolB,UACrB,GAAE,EAEEy6b,EAAS7L,IACRhE,GAAQgE,IAAQvub,KAAKwmQ,SAAS+yL,mBAAkBhL,EAAO,IAC5D,MAAMz9Z,EAAoB,kBAATy9Z,EAAoBA,EAAOvub,KAAKwmQ,SAASioL,cAAcwD,sBAAsB1D,GAC1Fz9Z,IACG9wB,KAAKsY,UACR6hb,EAAYrpa,GAET9wB,KAAKorb,WAAW9ya,UAAUtY,KAAKorb,WAAWI,eAAe16Z,GAC1D9wB,KAAKwmQ,SAAS+yL,kBAAoBv5b,KAAKwmQ,SAAS+yL,iBAAiBc,mBAAmBr6b,KAAKwmQ,SAAS+yL,iBAAiBc,kBAAkBvpa,IAE3I9wB,KAAK25b,cAAc7oa,GAAG7qB,IACpB+uB,EAAK/uB,EAAK6qB,EAAE,GACZ,EAaJ,OAXKy5Z,IAAOvqb,KAAKwmQ,SAAS+yL,kBAAqBv5b,KAAKwmQ,SAAS+yL,iBAAiB9zT,OAElE8kT,GAAOvqb,KAAKwmQ,SAAS+yL,kBAAoBv5b,KAAKwmQ,SAAS+yL,iBAAiB9zT,MAC7B,IAAjDzlI,KAAKwmQ,SAAS+yL,iBAAiBnuT,OAAO5xJ,OACxCwmB,KAAKwmQ,SAAS+yL,iBAAiBnuT,SAAS/8H,KAAK+rb,GAE7Cp6b,KAAKwmQ,SAAS+yL,iBAAiBnuT,OAAOgvT,GAGxCA,EAAO7P,GARP6P,EAAOp6b,KAAKwmQ,SAAS+yL,iBAAiBnuT,UAUjC66H,CACT,CACA,SAAAq0L,CAAU/P,EAAKx1U,EAAIwlV,GACjB,IAAIhmT,EAASv0I,KACb,MAAMw6b,EAAS,SAAUtgd,EAAKorB,GAC5B,IAAI/kB,EACJ,GAAoB,kBAAT+kB,EAAmB,CAC5B,IAAK,IAAIqjb,EAAQhpb,UAAUnmB,OAAQkD,EAAO,IAAI9C,MAAM+uc,EAAQ,EAAIA,EAAQ,EAAI,GAAIC,EAAQ,EAAGA,EAAQD,EAAOC,IACxGlsc,EAAKksc,EAAQ,GAAKjpb,UAAUipb,GAE9Broc,EAAUg0J,EAAOh0J,QAAQ8rc,iCAAiC,CAACnyc,EAAKorB,GAAMvJ,OAAOrf,GAC/E,MACE6D,EAAU,IACL+kB,GAGP/kB,EAAQgqc,IAAMhqc,EAAQgqc,KAAOiQ,EAAOjQ,IACpChqc,EAAQguc,KAAOhuc,EAAQguc,MAAQiM,EAAOjM,KACtChuc,EAAQw0H,GAAKx0H,EAAQw0H,IAAMylV,EAAOzlV,GAClCx0H,EAAQg6c,UAAYh6c,EAAQg6c,WAAaA,GAAaC,EAAOD,UAC7D,MAAM1Q,EAAet1S,EAAOh0J,QAAQspc,cAAgB,IACpD,IAAI4Q,EAMJ,OAJEA,EADEl6c,EAAQg6c,WAAa3gd,MAAMC,QAAQK,GACzBA,EAAI4D,KAAIkgB,GAAK,GAAGzd,EAAQg6c,YAAY1Q,IAAe7rb,MAEnDzd,EAAQg6c,UAAY,GAAGh6c,EAAQg6c,YAAY1Q,IAAe3vc,IAAQA,EAEzEq6J,EAAOh6J,EAAEkgd,EAAWl6c,EAC7B,EAQA,MAPmB,kBAARgqc,EACTiQ,EAAOjQ,IAAMA,EAEbiQ,EAAOjM,KAAOhE,EAEhBiQ,EAAOzlV,GAAKA,EACZylV,EAAOD,UAAYA,EACZC,CACT,CACA,CAAAjgd,GACE,OAAOylB,KAAKorb,YAAcprb,KAAKorb,WAAWjpM,aAAaxiP,UACzD,CACA,MAAAkmU,GACE,OAAO7lU,KAAKorb,YAAcprb,KAAKorb,WAAWvlH,UAAUlmU,UACtD,CACA,mBAAA+6b,CAAoB3lV,GAClB/0G,KAAKzf,QAAQ2pc,UAAYn1U,CAC3B,CACA,kBAAAy7U,CAAmBz7U,GACjB,IAAIx0H,EAAUof,UAAUnmB,OAAS,QAAsBof,IAAjB+G,UAAU,GAAmBA,UAAU,GAAK,CAAC,EACnF,IAAKK,KAAKkmQ,cAER,OADAlmQ,KAAKf,OAAOyO,KAAK,kDAAmD1N,KAAK4rE,YAClE,EAET,IAAK5rE,KAAK4rE,YAAc5rE,KAAK4rE,UAAUpyF,OAErC,OADAwmB,KAAKf,OAAOyO,KAAK,6DAA8D1N,KAAK4rE,YAC7E,EAET,MAAM2+W,EAAMhqc,EAAQgqc,KAAOvqb,KAAK65b,kBAAoB75b,KAAK4rE,UAAU,GAC7D+iX,IAAc3ub,KAAKzf,SAAUyf,KAAKzf,QAAQouc,YAC1CgM,EAAU36b,KAAK4rE,UAAU5rE,KAAK4rE,UAAUpyF,OAAS,GACvD,GAA0B,WAAtB+wc,EAAI9jb,cAA4B,OAAO,EAC3C,MAAMm0b,EAAiB,CAAC9pa,EAAGt2C,KACzB,MAAMqgd,EAAY76b,KAAKwmQ,SAASyoL,iBAAiB3mb,MAAM,GAAGwoB,KAAKt2C,KAC/D,OAAsB,IAAfqgd,GAAkC,IAAdA,CAAe,EAE5C,GAAIt6c,EAAQu6c,SAAU,CACpB,MAAMC,EAAYx6c,EAAQu6c,SAAS96b,KAAM46b,GACzC,QAAkBhic,IAAdmic,EAAyB,OAAOA,CACtC,CACA,QAAI/6b,KAAK4qb,kBAAkBL,EAAKx1U,OAC3B/0G,KAAKwmQ,SAASyoL,iBAAiBwI,WAAWz3b,KAAKzf,QAAQqtK,WAAc5tJ,KAAKzf,QAAQw4c,8BACnF6B,EAAerQ,EAAKx1U,IAAS45U,IAAeiM,EAAeD,EAAS5lV,IAE1E,CACA,cAAAimV,CAAejmV,EAAI5sF,GACjB,MAAM89O,EAAW3pJ,IACjB,OAAKt8G,KAAKzf,QAAQw0H,IAIA,kBAAPA,IAAiBA,EAAK,CAACA,IAClCA,EAAGnyH,SAAQpI,IACLwlB,KAAKzf,QAAQw0H,GAAG35H,QAAQZ,GAAK,GAAGwlB,KAAKzf,QAAQw0H,GAAG15H,KAAKb,EAAE,IAE7DwlB,KAAK25b,eAAc1zb,IACjBggQ,EAAS7mP,UACL+I,GAAUA,EAASliB,EAAI,IAEtBggQ,IAXD99O,GAAUA,IACPhJ,QAAQC,UAWnB,CACA,aAAA67a,CAAc1M,EAAMpma,GAClB,MAAM89O,EAAW3pJ,IACG,kBAATiyU,IAAmBA,EAAO,CAACA,IACtC,MAAM2M,EAAYl7b,KAAKzf,QAAQg1O,SAAW,GACpC4lO,EAAU5M,EAAKvqb,QAAOumb,GAAO2Q,EAAU9/c,QAAQmvc,GAAO,IAC5D,OAAK4Q,EAAQ3hd,QAIbwmB,KAAKzf,QAAQg1O,QAAU2lO,EAAUn/b,OAAOo/b,GACxCn7b,KAAK25b,eAAc1zb,IACjBggQ,EAAS7mP,UACL+I,GAAUA,EAASliB,EAAI,IAEtBggQ,IARD99O,GAAUA,IACPhJ,QAAQC,UAQnB,CACA,GAAAspI,CAAI6hS,GAEF,GADKA,IAAKA,EAAMvqb,KAAK65b,mBAAqB75b,KAAK4rE,WAAa5rE,KAAK4rE,UAAUpyF,OAAS,EAAIwmB,KAAK4rE,UAAU,GAAK5rE,KAAKsY,YAC5Giya,EAAK,MAAO,MACjB,MACMkE,EAAgBzub,KAAKwmQ,UAAYxmQ,KAAKwmQ,SAASioL,eAAiB,IAAI8C,EAAazob,KACvF,MAFgB,CAAC,KAAM,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,KAAM,KAAM,KAAM,MAAO,MAAO,MAAO,MAAO,MAAO,KAAM,KAAM,MAAO,MAAO,MAAO,KAAM,KAAM,MAAO,MAAO,MAAO,KAAM,MAAO,MAAO,MAAO,MAAO,KAAM,MAAO,OAEna1tB,QAAQqzc,EAAckD,wBAAwBpH,KAAS,GAAKA,EAAI9jb,cAAcrrB,QAAQ,SAAW,EAAI,MAAQ,KAC9H,CACA,qBAAOggd,GAGL,OAAO,IAAIlC,EAFGv5b,UAAUnmB,OAAS,QAAsBof,IAAjB+G,UAAU,GAAmBA,UAAU,GAAK,CAAC,EACpEA,UAAUnmB,OAAS,EAAImmB,UAAU,QAAK/G,EAEvD,CACA,aAAAyic,GACE,IAAI96c,EAAUof,UAAUnmB,OAAS,QAAsBof,IAAjB+G,UAAU,GAAmBA,UAAU,GAAK,CAAC,EAC/EwoB,EAAWxoB,UAAUnmB,OAAS,QAAsBof,IAAjB+G,UAAU,GAAmBA,UAAU,GAAKoR,EACnF,MAAMuqb,EAAoB/6c,EAAQ+6c,kBAC9BA,UAA0B/6c,EAAQ+6c,kBACtC,MAAMC,EAAgB,IACjBv7b,KAAKzf,WACLA,EAEDkyP,SAAS,GAGP9xK,EAAQ,IAAIu4X,EAAKqC,QACD3ic,IAAlBrY,EAAQ8f,YAA0CzH,IAAnBrY,EAAQgiD,SACzCo+B,EAAM1hE,OAAS0hE,EAAM1hE,OAAO0hE,MAAMpgF,IA4BpC,MA1BsB,CAAC,QAAS,WAAY,YAC9BqC,SAAQ0+B,IACpBq/C,EAAMr/C,GAAKthB,KAAKshB,EAAE,IAEpBq/C,EAAM6lM,SAAW,IACZxmQ,KAAKwmQ,UAEV7lM,EAAM6lM,SAAS5sM,MAAQ,CACrB42X,mBAAoB7vX,EAAM6vX,mBAAmB9vb,KAAKigE,IAEhD26X,IACF36X,EAAMs+F,MAAQ,IAAIgrR,EAAcjqb,KAAKi/J,MAAMr1K,KAAM2xc,GACjD56X,EAAM6lM,SAAS4qL,cAAgBzwX,EAAMs+F,OAEvCt+F,EAAMyqX,WAAa,IAAIG,EAAW5qX,EAAM6lM,SAAU+0L,GAClD56X,EAAMyqX,WAAW34Z,GAAG,KAAK,SAAUjuC,GACjC,IAAK,IAAIskc,EAAQnpb,UAAUnmB,OAAQH,EAAO,IAAIO,MAAMkvc,EAAQ,EAAIA,EAAQ,EAAI,GAAIC,EAAQ,EAAGA,EAAQD,EAAOC,IACxG1vc,EAAK0vc,EAAQ,GAAKppb,UAAUopb,GAE9BpoX,EAAMkzT,KAAKrvY,KAAUnL,EACvB,IACAsnF,EAAMuwD,KAAKqqU,EAAepza,GAC1Bw4C,EAAMyqX,WAAW7qc,QAAUg7c,EAC3B56X,EAAMyqX,WAAW6D,iBAAiBzoL,SAAS5sM,MAAQ,CACjD42X,mBAAoB7vX,EAAM6vX,mBAAmB9vb,KAAKigE,IAE7CA,CACT,CACA,MAAA7/D,GACE,MAAO,CACLvgB,QAASyf,KAAKzf,QACd0+K,MAAOj/J,KAAKi/J,MACZ3mJ,SAAUtY,KAAKsY,SACfszD,UAAW5rE,KAAK4rE,UAChBiuX,iBAAkB75b,KAAK65b,iBAE3B,EAEF,MAAMl3T,EAAWu2T,EAAKkC,iBACtBz4T,EAASy4T,eAAiBlC,EAAKkC,eAERz4T,EAASy4T,eACpBz4T,EAAS+lB,IACR/lB,EAASzR,KACAyR,EAASg3T,cACPh3T,EAASo3T,gBACrBp3T,EAASq3T,IACEr3T,EAAS6oT,eACd7oT,EAAS23T,UAP3B,MAQM//c,EAAIooJ,EAASpoJ,EACJooJ,EAASkjM,OACIljM,EAAS+3T,oBACV/3T,EAAS6tT,mBACb7tT,EAASq4T,eACVr4T,EAASs4T,0GC7vE/B,MAAMO,EAAgB,CAAC70Z,EAAQ80Z,IAAiBA,EAAazia,MAAM19C,GAAMqrD,aAAkBrrD,IAE3F,IAAIogd,EACAC,EAqBJ,MAAMC,EAAmB,IAAI3uW,QACvB4uW,EAAqB,IAAI5uW,QACzB6uW,EAA2B,IAAI7uW,QAC/B8uW,EAAiB,IAAI9uW,QACrB+uW,EAAwB,IAAI/uW,QA0DlC,IAAIgvW,EAAgB,CAChB,GAAAnzb,CAAIpkB,EAAQ8X,EAAM28P,GACd,GAAIz0Q,aAAkBw3c,eAAgB,CAElC,GAAa,SAAT1/b,EACA,OAAOq/b,EAAmB/yb,IAAIpkB,GAElC,GAAa,qBAAT8X,EACA,OAAO9X,EAAOgnS,kBAAoBowK,EAAyBhzb,IAAIpkB,GAGnE,GAAa,UAAT8X,EACA,OAAO28P,EAASuyB,iBAAiB,QAC3B9yR,EACAugQ,EAASmK,YAAYnK,EAASuyB,iBAAiB,GAE7D,CAEA,OAAOxvM,EAAKx3F,EAAO8X,GACvB,EACA,GAAAi0B,CAAI/rC,EAAQ8X,EAAMpiB,GAEd,OADAsK,EAAO8X,GAAQpiB,GACR,CACX,EACA,GAAAo2C,CAAI9rC,EAAQ8X,GACR,OAAI9X,aAAkBw3c,iBACR,SAAT1/b,GAA4B,UAATA,IAGjBA,KAAQ9X,CACnB,GAKJ,SAASy3c,EAAatyW,GAIlB,OAAIA,IAASuyW,YAAYpid,UAAUqpR,aAC7B,qBAAsB64L,eAAelid,WA7GnC2hd,IACHA,EAAuB,CACpBU,UAAUrid,UAAUsid,QACpBD,UAAUrid,UAAUuid,SACpBF,UAAUrid,UAAUwid,sBAqHEvid,SAAS4vG,GAC5B,YAAaxwG,GAIhB,OADAwwG,EAAK9pF,MAAMk8B,EAAOj8B,MAAO3mB,GAClB6iG,EAAK0/W,EAAiB9yb,IAAI9I,MACrC,EAEG,YAAa3mB,GAGhB,OAAO6iG,EAAK2N,EAAK9pF,MAAMk8B,EAAOj8B,MAAO3mB,GACzC,EAvBW,SAAUojd,KAAepjd,GAC5B,MAAM+pR,EAAKv5K,EAAK1vG,KAAK8hD,EAAOj8B,MAAOy8b,KAAepjd,GAElD,OADAyid,EAAyBrra,IAAI2yO,EAAIq5L,EAAWl9Z,KAAOk9Z,EAAWl9Z,OAAS,CAACk9Z,IACjEvgX,EAAKknL,EAChB,CAoBR,CACA,SAASs5L,EAAuBtid,GAC5B,MAAqB,oBAAVA,EACA+hd,EAAa/hd,IAGpBA,aAAiB8hd,gBAhGzB,SAAwC94L,GAEpC,GAAIy4L,EAAmBrra,IAAI4yO,GACvB,OACJ,MAAMpuO,EAAO,IAAI7V,SAAQ,CAACC,EAASC,KAC/B,MAAMmyR,EAAW,KACbpuC,EAAG9jR,oBAAoB,WAAY4vC,GACnCk0O,EAAG9jR,oBAAoB,QAASoE,GAChC0/Q,EAAG9jR,oBAAoB,QAASoE,EAAM,EAEpCwrC,EAAW,KACb9P,IACAoyR,GAAU,EAER9tT,EAAQ,KACV27B,EAAO+jP,EAAG1/Q,OAAS,IAAIk7C,aAAa,aAAc,eAClD4yQ,GAAU,EAEdpuC,EAAG/jR,iBAAiB,WAAY6vC,GAChCk0O,EAAG/jR,iBAAiB,QAASqE,GAC7B0/Q,EAAG/jR,iBAAiB,QAASqE,EAAM,IAGvCm4c,EAAmBpra,IAAI2yO,EAAIpuO,EAC/B,CAyEQ2na,CAA+Bvid,GAC/Bohd,EAAcphd,EAzJVshd,IACHA,EAAoB,CACjBU,YACAQ,eACAC,SACAR,UACAH,kBAoJG,IAAIxpa,MAAMt4C,EAAO6hd,GAErB7hd,EACX,CACA,SAAS8hG,EAAK9hG,GAGV,GAAIA,aAAiB0id,WACjB,OA3IR,SAA0B1yb,GACtB,MAAM0W,EAAU,IAAI3B,SAAQ,CAACC,EAASC,KAClC,MAAMmyR,EAAW,KACbpnS,EAAQ9qB,oBAAoB,UAAW2va,GACvC7kZ,EAAQ9qB,oBAAoB,QAASoE,EAAM,EAEzCura,EAAU,KACZ7vY,EAAQ88D,EAAK9xE,EAAQvsB,SACrB2zT,GAAU,EAER9tT,EAAQ,KACV27B,EAAOjV,EAAQ1mB,OACf8tT,GAAU,EAEdpnS,EAAQ/qB,iBAAiB,UAAW4va,GACpC7kZ,EAAQ/qB,iBAAiB,QAASqE,EAAM,IAe5C,OAbAo9B,EACKzS,MAAMj0B,IAGHA,aAAiBiid,WACjBT,EAAiBnra,IAAIr2C,EAAOgwB,EAChC,IAGCge,OAAM,SAGX4za,EAAsBvra,IAAI3P,EAAS1W,GAC5B0W,CACX,CA4Gei8a,CAAiB3id,GAG5B,GAAI2hd,EAAevra,IAAIp2C,GACnB,OAAO2hd,EAAejzb,IAAI1uB,GAC9B,MAAMkmF,EAAWo8X,EAAuBtid,GAOxC,OAJIkmF,IAAalmF,IACb2hd,EAAetra,IAAIr2C,EAAOkmF,GAC1B07X,EAAsBvra,IAAI6vC,EAAUlmF,IAEjCkmF,CACX,CACA,MAAMrkC,EAAU7hD,GAAU4hd,EAAsBlzb,IAAI1uB,GC5KpD,SAAS4id,EAAOp4c,EAAMquB,GAAS,QAAEgqb,EAAO,QAAEz9T,EAAO,SAAE09T,EAAQ,WAAEC,GAAe,CAAC,GACzE,MAAM/yb,EAAUggB,UAAU9U,KAAK1wB,EAAMquB,GAC/Bmqb,EAAclhX,EAAK9xE,GAoBzB,OAnBIo1H,GACAp1H,EAAQ/qB,iBAAiB,iBAAkBmF,IACvCg7I,EAAQtjD,EAAK9xE,EAAQvsB,QAAS2G,EAAMu+Q,WAAYv+Q,EAAM6qV,WAAYnzP,EAAK9xE,EAAQi5P,aAAc7+Q,EAAM,IAGvGy4c,GACA7yb,EAAQ/qB,iBAAiB,WAAYmF,GAAUy4c,EAE/Cz4c,EAAMu+Q,WAAYv+Q,EAAM6qV,WAAY7qV,KAExC44c,EACK/ub,MAAMmgL,IACH2uQ,GACA3uQ,EAAGnvM,iBAAiB,SAAS,IAAM89c,MACnCD,GACA1uQ,EAAGnvM,iBAAiB,iBAAkBmF,GAAU04c,EAAS14c,EAAMu+Q,WAAYv+Q,EAAM6qV,WAAY7qV,IACjG,IAEC4jC,OAAM,SACJg1a,CACX,CAMA,SAASC,EAASz4c,GAAM,QAAEq4c,GAAY,CAAC,GACnC,MAAM7yb,EAAUggB,UAAUK,eAAe7lC,GAMzC,OALIq4c,GACA7yb,EAAQ/qB,iBAAiB,WAAYmF,GAAUy4c,EAE/Cz4c,EAAMu+Q,WAAYv+Q,KAEf03F,EAAK9xE,GAASiE,MAAK,KAAe,GAC7C,CAEA,MAAMivb,EAAc,CAAC,MAAO,SAAU,SAAU,aAAc,SACxDC,EAAe,CAAC,MAAO,MAAO,SAAU,SACxCC,EAAgB,IAAI7sa,IAC1B,SAAS8sa,EAAU/4c,EAAQ8X,GACvB,KAAM9X,aAAkB03c,cAClB5/b,KAAQ9X,GACM,kBAAT8X,EACP,OAEJ,GAAIghc,EAAc10b,IAAItM,GAClB,OAAOghc,EAAc10b,IAAItM,GAC7B,MAAMkhc,EAAiBlhc,EAAKtW,QAAQ,aAAc,IAC5Cy3c,EAAWnhc,IAASkhc,EACpBE,EAAUL,EAAatjd,SAASyjd,GACtC,KAEEA,KAAmBC,EAAWd,SAAWD,gBAAgB5id,aACrD4jd,IAAWN,EAAYrjd,SAASyjd,GAClC,OAEJ,MAAMx+b,EAASumI,eAAgBo4T,KAAcxkd,GAEzC,MAAM+pR,EAAKpjQ,KAAKqjQ,YAAYw6L,EAAWD,EAAU,YAAc,YAC/D,IAAIl5c,EAAS0+Q,EAAGnkG,MAQhB,OAPI0+R,IACAj5c,EAASA,EAAOhD,MAAMrI,EAAK4rB,iBAMjBka,QAAQivG,IAAI,CACtB1pI,EAAOg5c,MAAmBrkd,GAC1Bukd,GAAWx6L,EAAGpuO,QACd,EACR,EAEA,OADAwoa,EAAc/sa,IAAIj0B,EAAM0C,GACjBA,CACX,CDgCI+8b,EC/BS,CAAC6B,IAAa,IACpBA,EACHh1b,IAAK,CAACpkB,EAAQ8X,EAAM28P,IAAaskM,EAAU/4c,EAAQ8X,IAASshc,EAASh1b,IAAIpkB,EAAQ8X,EAAM28P,GACvF3oO,IAAK,CAAC9rC,EAAQ8X,MAAWihc,EAAU/4c,EAAQ8X,IAASshc,EAAStta,IAAI9rC,EAAQ8X,KD4BzD2rB,CAAS8za,uEEtHtB,MAAMvgT,EAAU,IAAIC,YACdC,EAAU,IAAIC,YAEpB,SAAS9/I,KAAUi4Y,GACtB,MAAM7xZ,EAAO6xZ,EAAQpyW,QAAO,CAACga,GAAOpiE,YAAaoiE,EAAMpiE,GAAQ,GACzDq0C,EAAM,IAAIm/D,WAAW7qG,GAC3B,IAAI5I,EAAI,EACR,IAAK,MAAMw4G,KAAUiiT,EACjBnmX,EAAI4C,IAAIshE,EAAQx4G,GAChBA,GAAKw4G,EAAOv4G,OAEhB,OAAOq0C,CACX,CCZO,MAYM4sH,EAAUj2H,GAZK,CAACA,IACzB,IAAIu5a,EAAYv5a,EACS,kBAAdu5a,IACPA,EAAYriT,EAAQjB,OAAOsjT,IAE/B,MACMtic,EAAM,GACZ,IAAK,IAAIliB,EAAI,EAAGA,EAAIwkd,EAAUvkd,OAAQD,GAFnB,MAGfkiB,EAAIpgB,KAAKwnB,OAAO+iB,aAAa7lB,MAAM,KAAMg+b,EAAUh6G,SAASxqW,EAAGA,EAHhD,SAKnB,OAAOgsC,KAAK9pB,EAAImD,KAAK,IAAI,EAGlBo/b,CAAax5a,GAAOt+B,QAAQ,KAAM,IAAIA,QAAQ,MAAO,KAAKA,QAAQ,MAAO,KAUvEwlC,EAAUlH,IACnB,IAAIy5a,EAAUz5a,EACVy5a,aAAmBjxW,aACnBixW,EAAUriT,EAAQlwH,OAAOuya,IAE7BA,EAAUA,EAAQ/3c,QAAQ,KAAM,KAAKA,QAAQ,KAAM,KAAKA,QAAQ,MAAO,IACvE,IACI,MAfoB,CAAC+3c,IACzB,MAAMrsC,EAASttY,KAAK25a,GACdx4a,EAAQ,IAAIunE,WAAW4kU,EAAOp4a,QACpC,IAAK,IAAID,EAAI,EAAGA,EAAIq4a,EAAOp4a,OAAQD,IAC/BksC,EAAMlsC,GAAKq4a,EAAOr2a,WAAWhC,GAEjC,OAAOksC,CAAK,EASDy4a,CAAaD,EACxB,CACA,MACI,MAAM,IAAI/7b,UAAU,oDACxB,GCnCG,MAAMi8b,UAAkBz6b,MAC3B,WAAAme,CAAYh5B,EAAStI,GACjB6lC,MAAMv9B,EAAStI,GACfyf,KAAKoM,KAAO,mBACZpM,KAAKpb,KAAOob,KAAK6hB,YAAYj9B,KAC7B8e,MAAMqnB,oBAAoB/qB,KAAMA,KAAK6hB,YACzC,EAEJs8a,EAAU/xb,KAAO,oBACV,cAAuC+xb,EAC1C,WAAAt8a,CAAYh5B,EAAS8rB,EAASypb,EAAQ,cAAe5wb,EAAS,eAC1D4Y,MAAMv9B,EAAS,CAAE2jB,MAAO,CAAE4xb,QAAO5wb,SAAQmH,aACzC3U,KAAKoM,KAAO,kCACZpM,KAAKo+b,MAAQA,EACbp+b,KAAKwN,OAASA,EACdxN,KAAK2U,QAAUA,CACnB,IAEqBvI,KAAO,mCACzB,cAAyB+xb,EAC5B,WAAAt8a,CAAYh5B,EAAS8rB,EAASypb,EAAQ,cAAe5wb,EAAS,eAC1D4Y,MAAMv9B,EAAS,CAAE2jB,MAAO,CAAE4xb,QAAO5wb,SAAQmH,aACzC3U,KAAKoM,KAAO,kBACZpM,KAAKo+b,MAAQA,EACbp+b,KAAKwN,OAASA,EACdxN,KAAK2U,QAAUA,CACnB,IAEOvI,KAAO,mBACX,cAAgC+xb,EACnC,WAAAt8a,GACIuE,SAASzmB,WACTK,KAAKoM,KAAO,0BAChB,IAEcA,KAAO,2BAClB,MAAMiyb,UAAyBF,EAClC,WAAAt8a,GACIuE,SAASzmB,WACTK,KAAKoM,KAAO,wBAChB,EAEJiyb,EAAiBjyb,KAAO,0BACjB,cAAkC+xb,EACrC,WAAAt8a,CAAYh5B,EAAU,8BAA+BtI,GACjD6lC,MAAMv9B,EAAStI,GACfyf,KAAKoM,KAAO,2BAChB,IAEgBA,KAAO,6BACpB,cAAyB+xb,EAC5B,WAAAt8a,GACIuE,SAASzmB,WACTK,KAAKoM,KAAO,iBAChB,IAEOA,KAAO,kBACX,MAAMkyb,UAAmBH,EAC5B,WAAAt8a,GACIuE,SAASzmB,WACTK,KAAKoM,KAAO,iBAChB,EAEJkyb,EAAWlyb,KAAO,kBACX,MAAMmyb,UAAmBJ,EAC5B,WAAAt8a,GACIuE,SAASzmB,WACTK,KAAKoM,KAAO,iBAChB,EAEJmyb,EAAWnyb,KAAO,mBACX,cAAyB+xb,EAC5B,WAAAt8a,GACIuE,SAASzmB,WACTK,KAAKoM,KAAO,iBAChB,IAEOA,KAAO,mBACX,cAA0B+xb,EAC7B,WAAAt8a,GACIuE,SAASzmB,WACTK,KAAKoM,KAAO,kBAChB,IAEQA,KAAO,oBACZ,cAAgC+xb,EACnC,WAAAt8a,CAAYh5B,EAAU,kDAAmDtI,GACrE6lC,MAAMv9B,EAAStI,GACfyf,KAAKoM,KAAO,0BAChB,IAEcA,KAAO,2BAOzB6mB,OAAOylO,cANA,cAAuCylM,EAC1C,WAAAt8a,CAAYh5B,EAAU,uDAAwDtI,GAC1E6lC,MAAMv9B,EAAStI,GACfyf,KAAKoM,KAAO,iCAChB,GAGqBA,KAAO,mCACzB,cAA0B+xb,EAC7B,WAAAt8a,CAAYh5B,EAAU,oBAAqBtI,GACvC6lC,MAAMv9B,EAAStI,GACfyf,KAAKoM,KAAO,kBAChB,IAEQA,KAAO,oBACZ,cAA6C+xb,EAChD,WAAAt8a,CAAYh5B,EAAU,gCAAiCtI,GACnD6lC,MAAMv9B,EAAStI,GACfyf,KAAKoM,KAAO,uCAChB,IAE2BA,KAAO,wCCjHtC,aACO,MAAMoyb,EAAetkd,GAAQA,aAAeukd,UCDnD,SAASC,EAAS95c,EAAM4X,EAAO,kBAC3B,OAAO,IAAI0F,UAAU,kDAAkD1F,aAAgB5X,IAC3F,CACA,SAAS+5c,EAAY/7S,EAAWh+J,GAC5B,OAAOg+J,EAAUh+J,OAASA,CAC9B,CACA,SAASg6c,EAAcjhb,GACnB,OAAO9gB,SAAS8gB,EAAK/4B,KAAKrB,MAAM,GAAI,GACxC,CAaA,SAASs7c,EAAW3kd,EAAK4kd,GACrB,GAAIA,EAAOtld,SAAWsld,EAAO9la,MAAMk6P,GAAah5S,EAAI4kd,OAAO7kd,SAASi5S,KAAY,CAC5E,IAAI5/M,EAAM,sEACV,GAAIwrX,EAAOtld,OAAS,EAAG,CACnB,MAAM+qI,EAAOu6U,EAAOz6b,MACpBivE,GAAO,UAAUwrX,EAAOlgc,KAAK,aAAa2lH,IAC9C,MAC2B,IAAlBu6U,EAAOtld,OACZ85F,GAAO,UAAUwrX,EAAO,SAASA,EAAO,MAGxCxrX,GAAO,GAAGwrX,EAAO,MAErB,MAAM,IAAI58b,UAAUoxE,EACxB,CACJ,CACO,SAASyrX,EAAkB7kd,EAAKkvC,KAAQ01a,GAC3C,OAAQ11a,GACJ,IAAK,QACL,IAAK,QACL,IAAK,QAAS,CACV,IAAKu1a,EAAYzkd,EAAI0oK,UAAW,QAC5B,MAAM87S,EAAS,QACnB,MAAMxrK,EAAWr2R,SAASusB,EAAI7lC,MAAM,GAAI,IAExC,GADeq7c,EAAc1kd,EAAI0oK,UAAUjlI,QAC5Bu1Q,EACX,MAAMwrK,EAAS,OAAOxrK,IAAY,kBACtC,KACJ,CACA,IAAK,QACL,IAAK,QACL,IAAK,QAAS,CACV,IAAKyrK,EAAYzkd,EAAI0oK,UAAW,qBAC5B,MAAM87S,EAAS,qBACnB,MAAMxrK,EAAWr2R,SAASusB,EAAI7lC,MAAM,GAAI,IAExC,GADeq7c,EAAc1kd,EAAI0oK,UAAUjlI,QAC5Bu1Q,EACX,MAAMwrK,EAAS,OAAOxrK,IAAY,kBACtC,KACJ,CACA,IAAK,QACL,IAAK,QACL,IAAK,QAAS,CACV,IAAKyrK,EAAYzkd,EAAI0oK,UAAW,WAC5B,MAAM87S,EAAS,WACnB,MAAMxrK,EAAWr2R,SAASusB,EAAI7lC,MAAM,GAAI,IAExC,GADeq7c,EAAc1kd,EAAI0oK,UAAUjlI,QAC5Bu1Q,EACX,MAAMwrK,EAAS,OAAOxrK,IAAY,kBACtC,KACJ,CACA,IAAK,QACD,GAA2B,YAAvBh5S,EAAI0oK,UAAUh+J,MAA6C,UAAvB1K,EAAI0oK,UAAUh+J,KAClD,MAAM85c,EAAS,oBAEnB,MAEJ,IAAK,QACL,IAAK,QACL,IAAK,QAAS,CACV,IAAKC,EAAYzkd,EAAI0oK,UAAW,SAC5B,MAAM87S,EAAS,SACnB,MAAMxrK,EA1ElB,SAAuB9pQ,GACnB,OAAQA,GACJ,IAAK,QACD,MAAO,QACX,IAAK,QACD,MAAO,QACX,IAAK,QACD,MAAO,QACX,QACI,MAAM,IAAI1lB,MAAM,eAE5B,CA+D6Bs7b,CAAc51a,GAE/B,GADelvC,EAAI0oK,UAAUq8S,aACd/rK,EACX,MAAMwrK,EAASxrK,EAAU,wBAC7B,KACJ,CACA,QACI,MAAM,IAAIhxR,UAAU,6CAE5B28b,EAAW3kd,EAAK4kd,EACpB,CC7FA,SAASj2c,EAAQyqF,EAAK4rX,KAAWlrb,GAE7B,IADAA,EAAQA,EAAMhQ,OAAOtB,UACXlpB,OAAS,EAAG,CAClB,MAAM+qI,EAAOvwG,EAAM3P,MACnBivE,GAAO,eAAet/D,EAAMpV,KAAK,aAAa2lH,IAClD,MAC0B,IAAjBvwG,EAAMx6B,OACX85F,GAAO,eAAet/D,EAAM,SAASA,EAAM,MAG3Cs/D,GAAO,WAAWt/D,EAAM,MAa5B,OAXc,MAAVkrb,EACA5rX,GAAO,aAAa4rX,IAEG,oBAAXA,GAAyBA,EAAOt6c,KAC5C0uF,GAAO,sBAAsB4rX,EAAOt6c,OAEb,kBAAXs6c,GAAiC,MAAVA,GAC/BA,EAAOr9a,aAAaj9B,OACpB0uF,GAAO,4BAA4B4rX,EAAOr9a,YAAYj9B,QAGvD0uF,CACX,CACA,OAAgB4rX,KAAWlrb,IAChBnrB,EAAQ,eAAgBq2c,KAAWlrb,GAEvC,SAASmrb,EAAQ/1a,EAAK81a,KAAWlrb,GACpC,OAAOnrB,EAAQ,eAAeugC,uBAA0B81a,KAAWlrb,EACvE,CC7BA,MAAgB95B,KACRskd,EAAYtkd,IAGqB,cAA9BA,IAAM+4C,OAAOu9D,aAEjB,MAAMx8E,EAAQ,CAAC,aCJP,SAASyY,EAASjI,GAC7B,GAHwB,kBADNpqC,EAIAoqC,IAH4B,OAAVpqC,GAGkC,oBAA1CL,OAAOC,UAAUF,SAASK,KAAKqqC,GACvD,OAAO,EALf,IAAsBpqC,EAOlB,GAAqC,OAAjCL,OAAOo2C,eAAe3L,GACtB,OAAO,EAEX,IAAImS,EAAQnS,EACZ,KAAwC,OAAjCzqC,OAAOo2C,eAAewG,IACzBA,EAAQ58C,OAAOo2C,eAAewG,GAElC,OAAO58C,OAAOo2C,eAAe3L,KAAWmS,CAC5C,CCdO,SAASyoa,EAAMlld,GAClB,OAAOuyC,EAASvyC,IAA2B,kBAAZA,EAAImld,GACvC,CCgGA,MAfc55T,MAAO65T,IACjB,IAAKA,EAAIl2a,IACL,MAAM,IAAIlnB,UAAU,4DAExB,MAAM,UAAE0gJ,EAAS,UAAE28S,GAtFvB,SAAuBD,GACnB,IAAI18S,EACA28S,EACJ,OAAQD,EAAID,KACR,IAAK,MACD,OAAQC,EAAIl2a,KACR,IAAK,QACL,IAAK,QACL,IAAK,QACDw5H,EAAY,CAAEh+J,KAAM,UAAW+4B,KAAM,OAAO2hb,EAAIl2a,IAAI7lC,OAAO,MAC3Dg8c,EAAYD,EAAIxkd,EAAI,CAAC,QAAU,CAAC,UAChC,MACJ,IAAK,QACL,IAAK,QACL,IAAK,QACD8nK,EAAY,CAAEh+J,KAAM,oBAAqB+4B,KAAM,OAAO2hb,EAAIl2a,IAAI7lC,OAAO,MACrEg8c,EAAYD,EAAIxkd,EAAI,CAAC,QAAU,CAAC,UAChC,MACJ,IAAK,WACL,IAAK,eACL,IAAK,eACL,IAAK,eACD8nK,EAAY,CACRh+J,KAAM,WACN+4B,KAAM,OAAO9gB,SAASyic,EAAIl2a,IAAI7lC,OAAO,GAAI,KAAO,KAEpDg8c,EAAYD,EAAIxkd,EAAI,CAAC,UAAW,aAAe,CAAC,UAAW,WAC3D,MACJ,QACI,MAAM,IAAIujd,EAAiB,gEAEnC,MAEJ,IAAK,KACD,OAAQiB,EAAIl2a,KACR,IAAK,QACDw5H,EAAY,CAAEh+J,KAAM,QAASq6c,WAAY,SACzCM,EAAYD,EAAIxkd,EAAI,CAAC,QAAU,CAAC,UAChC,MACJ,IAAK,QACD8nK,EAAY,CAAEh+J,KAAM,QAASq6c,WAAY,SACzCM,EAAYD,EAAIxkd,EAAI,CAAC,QAAU,CAAC,UAChC,MACJ,IAAK,QACD8nK,EAAY,CAAEh+J,KAAM,QAASq6c,WAAY,SACzCM,EAAYD,EAAIxkd,EAAI,CAAC,QAAU,CAAC,UAChC,MACJ,IAAK,UACL,IAAK,iBACL,IAAK,iBACL,IAAK,iBACD8nK,EAAY,CAAEh+J,KAAM,OAAQq6c,WAAYK,EAAIE,KAC5CD,EAAYD,EAAIxkd,EAAI,CAAC,cAAgB,GACrC,MACJ,QACI,MAAM,IAAIujd,EAAiB,gEAEnC,MAEJ,IAAK,MACD,OAAQiB,EAAIl2a,KACR,IAAK,QACDw5H,EAAY,CAAEh+J,KAAM06c,EAAIE,KACxBD,EAAYD,EAAIxkd,EAAI,CAAC,QAAU,CAAC,UAChC,MACJ,IAAK,UACL,IAAK,iBACL,IAAK,iBACL,IAAK,iBACD8nK,EAAY,CAAEh+J,KAAM06c,EAAIE,KACxBD,EAAYD,EAAIxkd,EAAI,CAAC,cAAgB,GACrC,MACJ,QACI,MAAM,IAAIujd,EAAiB,gEAEnC,MAEJ,QACI,MAAM,IAAIA,EAAiB,+DAEnC,MAAO,CAAEz7S,YAAW28S,YACxB,CAKqCE,CAAcH,GACzC5id,EAAO,CACTkmK,EACA08S,EAAI91X,MAAO,EACX81X,EAAII,SAAWH,GAEb5tG,EAAU,IAAK2tG,GAGrB,cAFO3tG,EAAQvoU,WACRuoU,EAAQqoG,IACR,EAAOl2S,OAAOM,UAAU,MAAOutM,KAAYj1W,EAAK,EC9F3D,MAAMijd,EAAkB3hc,GAAM0tB,EAAO1tB,GACrC,IAAI4hc,EACAC,EACJ,MAAMC,EAAe5ld,GACoB,cAA9BA,IAAM+4C,OAAOu9D,aAElBuvW,EAAiBt6T,MAAOrzB,EAAOl4H,EAAKold,EAAKl2a,EAAK7vB,GAAS,KACzD,IAAIqyP,EAASx5I,EAAMtpG,IAAI5uB,GACvB,GAAI0xQ,IAASxiO,GACT,OAAOwiO,EAAOxiO,GAElB,MAAM42a,QAAkB,EAAU,IAAKV,EAAKl2a,QAS5C,OARI7vB,GACAxf,OAAOwf,OAAOrf,GACb0xQ,EAIDA,EAAOxiO,GAAO42a,EAHd5tV,EAAM3hF,IAAIv2C,EAAK,CAAE,CAACkvC,GAAM42a,IAKrBA,CAAS,EA4CpB,MA1C2B,CAAC9ld,EAAKkvC,KAC7B,GAAI02a,EAAY5ld,GAAM,CAClB,IAAIold,EAAMpld,EAAI+ld,OAAO,CAAE10Z,OAAQ,QAO/B,cANO+zZ,EAAIxkd,SACJwkd,EAAIY,UACJZ,EAAIa,UACJb,EAAIhgc,SACJggc,EAAI1ua,SACJ0ua,EAAI3vV,GACP2vV,EAAIthc,EACG2hc,EAAeL,EAAIthc,IAE9B6hc,IAAaA,EAAW,IAAI5yW,SACrB8yW,EAAeF,EAAU3ld,EAAKold,EAAKl2a,GAC9C,CACA,GAAIg2a,EAAMlld,GAAM,CACZ,GAAIA,EAAI8jB,EACJ,OAAO0tB,EAAOxxC,EAAI8jB,GACtB6hc,IAAaA,EAAW,IAAI5yW,SAE5B,OADkB8yW,EAAeF,EAAU3ld,EAAKA,EAAKkvC,GAAK,EAE9D,CACA,OAAOlvC,CAAG,EAoBd,EAlB4B,CAACA,EAAKkvC,KAC9B,GAAI02a,EAAY5ld,GAAM,CAClB,IAAIold,EAAMpld,EAAI+ld,OAAO,CAAE10Z,OAAQ,QAC/B,OAAI+zZ,EAAIthc,EACG2hc,EAAeL,EAAIthc,IAE9B4hc,IAAcA,EAAY,IAAI3yW,SACvB8yW,EAAeH,EAAW1ld,EAAKold,EAAKl2a,GAC/C,CACA,GAAIg2a,EAAMlld,GAAM,CACZ,GAAIA,EAAI8jB,EACJ,OAAO0tB,EAAOxxC,EAAI8jB,GACtB4hc,IAAcA,EAAY,IAAI3yW,SAE9B,OADkB8yW,EAAeH,EAAW1ld,EAAKA,EAAKkvC,GAAK,EAE/D,CACA,OAAOlvC,CAAG,ECvDd,MANaurJ,MAAOr8G,EAAKlvC,EAAK0P,KAC1B,MAAMo2c,QCAKv6T,eAA4Br8G,EAAKlvC,EAAKkmd,GAOjD,GANc,SAAVA,IACAlmd,QAAY,EAA8BA,EAAKkvC,IAErC,WAAVg3a,IACAlmd,QAAY,EAA6BA,EAAKkvC,IAE9Co1a,EAAYtkd,GAEZ,OADA6kd,EAAkB7kd,EAAKkvC,EAAKg3a,GACrBlmd,EAEX,GAAIA,aAAe8yG,WAAY,CAC3B,IAAK5jE,EAAImX,WAAW,MAChB,MAAM,IAAIr+B,UAAU,EAAgBhoB,KAAQ85B,IAEhD,OAAO,EAAO8vI,OAAOM,UAAU,MAAOlqK,EAAK,CAAEyjC,KAAM,OAAOyL,EAAI7lC,OAAO,KAAMqB,KAAM,SAAU,EAAO,CAACw7c,GACvG,CACA,MAAM,IAAIl+b,UAAU,EAAgBhoB,KAAQ85B,EAAO,aAAc,gBACrE,CDlB4B,CAAWoV,EAAKlvC,EAAK,QELjD,EAAgBkvC,EAAKlvC,KACjB,GAAIkvC,EAAImX,WAAW,OAASnX,EAAImX,WAAW,MAAO,CAC9C,MAAM,cAAE8/Z,GAAkBnmd,EAAI0oK,UAC9B,GAA6B,kBAAlBy9S,GAA8BA,EAAgB,KACrD,MAAM,IAAIn+b,UAAU,GAAGknB,yDAE/B,CACH,EFDG,CAAeA,EAAK42a,GACpB,MAAMp0a,QAAkB,EAAOk4H,OAAOr9G,KGN3B,SAAmBrd,EAAKw5H,GACnC,MAAMjlI,EAAO,OAAOyL,EAAI7lC,OAAO,KAC/B,OAAQ6lC,GACJ,IAAK,QACL,IAAK,QACL,IAAK,QACD,MAAO,CAAEzL,OAAM/4B,KAAM,QACzB,IAAK,QACL,IAAK,QACL,IAAK,QACD,MAAO,CAAE+4B,OAAM/4B,KAAM,UAAW07c,WAAYl3a,EAAI7lC,OAAO,IAAM,GACjE,IAAK,QACL,IAAK,QACL,IAAK,QACD,MAAO,CAAEo6B,OAAM/4B,KAAM,qBACzB,IAAK,QACL,IAAK,QACL,IAAK,QACD,MAAO,CAAE+4B,OAAM/4B,KAAM,QAASq6c,WAAYr8S,EAAUq8S,YACxD,IAAK,QACD,MAAO,CAAEr6c,KAAMg+J,EAAUh+J,MAC7B,QACI,MAAM,IAAIy5c,EAAiB,OAAOj1a,gEAE9C,CHlB+C,CAAgBA,EAAK42a,EAAUp9S,WAAYo9S,EAAWp2c,GACjG,OAAO,IAAIojG,WAAWphE,EAAU,EIapC,MArBmB,IAAIorG,KACnB,MAAMisH,EAAUjsH,EAAQhzH,OAAOtB,SAC/B,GAAuB,IAAnBugP,EAAQzpQ,QAAmC,IAAnBypQ,EAAQzpQ,OAChC,OAAO,EAEX,IAAIoiE,EACJ,IAAK,MAAM9xD,KAAUm5P,EAAS,CAC1B,MAAM7oF,EAAargL,OAAOiC,KAAK8N,GAC/B,GAAK8xD,GAAoB,IAAbA,EAAIz5D,KAIhB,IAAK,MAAMo+c,KAAanmS,EAAY,CAChC,GAAIx+G,EAAIprB,IAAI+va,GACR,OAAO,EAEX3kZ,EAAIz0C,IAAIo5b,EACZ,MARI3kZ,EAAM,IAAI/qB,IAAIupI,EAStB,CACA,OAAO,CAAI,EChBf,MAAMvqE,EAAO31G,GAAQA,IAAM+4C,OAAOu9D,aAC5BgwW,EAAe,CAACp3a,EAAKlvC,EAAKkmd,KAC5B,QAAgBxnc,IAAZ1e,EAAI8/c,KAAiC,QAAZ9/c,EAAI8/c,IAC7B,MAAM,IAAI93b,UAAU,oEAExB,QAAoBtJ,IAAhB1e,EAAIwld,UAA2D,IAAlCxld,EAAIwld,QAAQzld,WAAWmmd,GACpD,MAAM,IAAIl+b,UAAU,yEAAyEk+b,KAEjG,QAAgBxnc,IAAZ1e,EAAIkvC,KAAqBlvC,EAAIkvC,MAAQA,EACrC,MAAM,IAAIlnB,UAAU,gEAAgEknB,KAExF,OAAO,CAAI,EAETq3a,EAAqB,CAACr3a,EAAKlvC,EAAKkmd,EAAOM,KACzC,KAAIxmd,aAAe8yG,YAAnB,CAEA,GAAI0zW,GAAY,EAAUxmd,GAAM,CAC5B,GRVD,SAAqBA,GACxB,OAAOkld,EAAMlld,IAAoB,QAAZA,EAAImld,KAAkC,kBAAVnld,EAAI8jB,CACzD,CQQY,CAAgB9jB,IAAQsmd,EAAap3a,EAAKlvC,EAAKkmd,GAC/C,OACJ,MAAM,IAAIl+b,UAAU,0HACxB,CACA,IAAK,EAAUhoB,GACX,MAAM,IAAIgoB,UAAU,EAAgBknB,EAAKlvC,KAAQ85B,EAAO,aAAc0sb,EAAW,eAAiB,OAEtG,GAAiB,WAAbxmd,EAAI8D,KACJ,MAAM,IAAIkkB,UAAU,GAAG2tF,EAAI31G,iEAVrB,CAWV,EAkCJ,SAASymd,EAAaD,EAAUt3a,EAAKlvC,EAAKkmd,GACpBh3a,EAAImX,WAAW,OACrB,QAARnX,GACAA,EAAImX,WAAW,UACf,qBAAqBnhC,KAAKgqB,GAE1Bq3a,EAAmBr3a,EAAKlvC,EAAKkmd,EAAOM,GAtChB,EAACt3a,EAAKlvC,EAAKkmd,EAAOM,KAC1C,GAAIA,GAAY,EAAUxmd,GACtB,OAAQkmd,GACJ,IAAK,OACD,GR/BT,SAAsBlmd,GACzB,MAAmB,QAAZA,EAAImld,KAAkC,kBAAVnld,EAAIY,CAC3C,CQ6BoB,CAAiBZ,IAAQsmd,EAAap3a,EAAKlvC,EAAKkmd,GAChD,OACJ,MAAM,IAAIl+b,UAAU,oDACxB,IAAK,SACD,GRhCT,SAAqBhoB,GACxB,MAAmB,QAAZA,EAAImld,KAAkC,qBAAVnld,EAAIY,CAC3C,CQ8BoB,CAAgBZ,IAAQsmd,EAAap3a,EAAKlvC,EAAKkmd,GAC/C,OACJ,MAAM,IAAIl+b,UAAU,mDAGhC,IAAK,EAAUhoB,GACX,MAAM,IAAIgoB,UAAU,EAAgBknB,EAAKlvC,KAAQ85B,EAAO0sb,EAAW,eAAiB,OAExF,GAAiB,WAAbxmd,EAAI8D,KACJ,MAAM,IAAIkkB,UAAU,GAAG2tF,EAAI31G,uEAE/B,GAAc,SAAVkmd,GAAiC,WAAblmd,EAAI8D,KACxB,MAAM,IAAIkkB,UAAU,GAAG2tF,EAAI31G,2EAE/B,GAAc,YAAVkmd,GAAoC,WAAblmd,EAAI8D,KAC3B,MAAM,IAAIkkB,UAAU,GAAG2tF,EAAI31G,8EAE/B,GAAIA,EAAI0oK,WAAuB,WAAVw9S,GAAmC,YAAblmd,EAAI8D,KAC3C,MAAM,IAAIkkB,UAAU,GAAG2tF,EAAI31G,4EAE/B,GAAIA,EAAI0oK,WAAuB,YAAVw9S,GAAoC,YAAblmd,EAAI8D,KAC5C,MAAM,IAAIkkB,UAAU,GAAG2tF,EAAI31G,4EAC/B,EAWI0md,CAAoBx3a,EAAKlvC,EAAKkmd,EAAOM,EAE7C,CACeC,EAAajgc,UAAK9H,GAAW,GACrC,MAAMioc,EAAsBF,EAAajgc,UAAK9H,GAAW,GC3ChE,MAhCA,SAAsBkoc,EAAKC,EAAmBC,EAAkBC,EAAiBC,GAC7E,QAAwBtoc,IAApBsoc,EAAWC,WAAgDvoc,IAA1Bqoc,GAAiBE,KAClD,MAAM,IAAIL,EAAI,kEAElB,IAAKG,QAA4Croc,IAAzBqoc,EAAgBE,KACpC,OAAO,IAAItwa,IAEf,IAAKj3C,MAAMC,QAAQond,EAAgBE,OACC,IAAhCF,EAAgBE,KAAK3nd,QACrBynd,EAAgBE,KAAKnoa,MAAMxU,GAA2B,kBAAVA,GAAuC,IAAjBA,EAAMhrC,SACxE,MAAM,IAAIsnd,EAAI,yFAElB,IAAIM,EAEAA,OADqBxoc,IAArBooc,EACa,IAAIrwa,IAAI,IAAI52C,OAAO+yC,QAAQk0a,MAAsBD,EAAkBj0a,YAGnEi0a,EAEjB,IAAK,MAAMR,KAAaU,EAAgBE,KAAM,CAC1C,IAAKC,EAAW5wa,IAAI+va,GAChB,MAAM,IAAIlC,EAAiB,+BAA+BkC,wBAE9D,QAA8B3nc,IAA1Bsoc,EAAWX,GACX,MAAM,IAAIO,EAAI,+BAA+BP,iBAEjD,GAAIa,EAAWt4b,IAAIy3b,SAA6C3nc,IAA/Bqoc,EAAgBV,GAC7C,MAAM,IAAIO,EAAI,+BAA+BP,iCAErD,CACA,OAAO,IAAI1va,IAAIowa,EAAgBE,KACnC,ECzBO,MAAME,EACT,WAAAx/a,CAAYlN,GACR,KAAMA,aAAmBq4E,YACrB,MAAM,IAAI9qF,UAAU,6CAExBlC,KAAKg0J,SAAWr/I,CACpB,CACA,kBAAA2sb,CAAmBL,GACf,GAAIjhc,KAAKuhc,iBACL,MAAM,IAAIr/b,UAAU,8CAGxB,OADAlC,KAAKuhc,iBAAmBN,EACjBjhc,IACX,CACA,oBAAAwhc,CAAqBC,GACjB,GAAIzhc,KAAK0hc,mBACL,MAAM,IAAIx/b,UAAU,gDAGxB,OADAlC,KAAK0hc,mBAAqBD,EACnBzhc,IACX,CACA,UAAMymC,CAAKvsD,EAAKqG,GACZ,IAAKyf,KAAKuhc,mBAAqBvhc,KAAK0hc,mBAChC,MAAM,IAAIpD,EAAW,mFAEzB,IAAK,EAAWt+b,KAAKuhc,iBAAkBvhc,KAAK0hc,oBACxC,MAAM,IAAIpD,EAAW,6EAEzB,MAAM4C,EAAa,IACZlhc,KAAKuhc,oBACLvhc,KAAK0hc,oBAGZ,IAAIn3U,GAAM,EACV,GAFmB,EAAa+zU,EAAY,IAAI3ta,IAAI,CAAC,CAAC,OAAO,KAASpwC,GAAS4gd,KAAMnhc,KAAKuhc,iBAAkBL,GAE7F1wa,IAAI,SACf+5F,EAAMvqH,KAAKuhc,iBAAiBh3U,IACT,mBAARA,GACP,MAAM,IAAI+zU,EAAW,2EAG7B,MAAM,IAAEl1a,GAAQ83a,EAChB,GAAmB,kBAAR93a,IAAqBA,EAC5B,MAAM,IAAIk1a,EAAW,6DAEzBuC,EAAoBz3a,EAAKlvC,EAAK,QAC9B,IAII+md,EAJAtsb,EAAU3U,KAAKg0J,SACfzpC,IACA51G,EAAU+mI,EAAQjB,OAAO,EAAU9lI,KAInCssb,EADAjhc,KAAKuhc,iBACa7lT,EAAQjB,OAAO,EAAUj1I,KAAKC,UAAUzF,KAAKuhc,oBAG7C7lT,EAAQjB,OAAO,IAErC,MAAM7wJ,EAAOmS,EAAOklc,EAAiBvlT,EAAQjB,OAAO,KAAM9lI,GACpDiX,QAAkB,EAAKxC,EAAKlvC,EAAK0P,GACjC+3c,EAAM,CACR/1a,UAAW,EAAUA,GACrBjX,QAAS,IAWb,OATI41G,IACAo3U,EAAIhtb,QAAUinI,EAAQlwH,OAAO/W,IAE7B3U,KAAK0hc,qBACLC,EAAI73c,OAASkW,KAAK0hc,oBAElB1hc,KAAKuhc,mBACLI,EAAIC,UAAYhmT,EAAQlwH,OAAOu1a,IAE5BU,CACX,EC9EG,MAAME,EACT,WAAAhgb,CAAYlN,GACR3U,KAAK8hc,WAAa,IAAIT,EAAc1sb,EACxC,CACA,kBAAA2sb,CAAmBL,GAEf,OADAjhc,KAAK8hc,WAAWR,mBAAmBL,GAC5Bjhc,IACX,CACA,UAAMymC,CAAKvsD,EAAKqG,GACZ,MAAMohd,QAAY3hc,KAAK8hc,WAAWr7Z,KAAKvsD,EAAKqG,GAC5C,QAAoBqY,IAAhB+oc,EAAIhtb,QACJ,MAAM,IAAIzS,UAAU,6DAExB,MAAO,GAAGy/b,EAAIC,aAAaD,EAAIhtb,WAAWgtb,EAAI/1a,WAClD,ECfJ,MAAgB5hC,GAAS2lB,KAAKq2B,MAAMh8C,EAAKimB,UAAY,KCArD,MAEMg8B,EAAMuQ,MAGN43W,EAAQ,oIACd,MAAgB3yZ,IACZ,MAAMk4C,EAAUy6W,EAAMtwZ,KAAKrC,GAC3B,IAAKk4C,GAAYA,EAAQ,IAAMA,EAAQ,GACnC,MAAM,IAAIz3C,UAAU,8BAExB,MAAM9nB,EAAQqZ,WAAWkmD,EAAQ,IAEjC,IAAIooZ,EACJ,OAFapoZ,EAAQ,GAAGlzC,eAGpB,IAAK,MACL,IAAK,OACL,IAAK,SACL,IAAK,UACL,IAAK,IACDs7b,EAAcpyb,KAAKy2B,MAAMhsD,GACzB,MACJ,IAAK,SACL,IAAK,UACL,IAAK,MACL,IAAK,OACL,IAAK,IACD2nd,EAAcpyb,KAAKy2B,MA3BhB,GA2BsBhsD,GACzB,MACJ,IAAK,OACL,IAAK,QACL,IAAK,KACL,IAAK,MACL,IAAK,IACD2nd,EAAcpyb,KAAKy2B,MAjClBqW,KAiCwBriE,GACzB,MACJ,IAAK,MACL,IAAK,OACL,IAAK,IACD2nd,EAAcpyb,KAAKy2B,MAAMhsD,EAAQ6xD,GACjC,MACJ,IAAK,OACL,IAAK,QACL,IAAK,IACD81Z,EAAcpyb,KAAKy2B,MAzClB6F,OAyCwB7xD,GACzB,MACJ,QACI2nd,EAAcpyb,KAAKy2B,MA3ClB6F,SA2CwB7xD,GAGjC,MAAmB,MAAfu/D,EAAQ,IAA6B,QAAfA,EAAQ,IACtBooZ,EAELA,CACV,ECnDD,SAASC,EAAcjgd,EAAOyiC,GAC1B,IAAK5hB,OAAOrB,SAASijB,GACjB,MAAM,IAAItiB,UAAU,WAAWngB,WAEnC,OAAOyiC,CACX,CACO,MAAMy9a,EACT,WAAApgb,CAAYlN,EAAU,CAAC,GACnB,IAAK8X,EAAS9X,GACV,MAAM,IAAIzS,UAAU,oCAExBlC,KAAKg0J,SAAWr/I,CACpB,CACA,SAAAutb,CAAUC,GAEN,OADAnic,KAAKg0J,SAAW,IAAKh0J,KAAKg0J,SAAUnrI,IAAKs5a,GAClCnic,IACX,CACA,UAAAoic,CAAWC,GAEP,OADAric,KAAKg0J,SAAW,IAAKh0J,KAAKg0J,SAAUrrI,IAAK05a,GAClCric,IACX,CACA,WAAAsic,CAAYC,GAER,OADAvic,KAAKg0J,SAAW,IAAKh0J,KAAKg0J,SAAUlrI,IAAKy5a,GAClCvic,IACX,CACA,MAAAwic,CAAOC,GAEH,OADAzic,KAAKg0J,SAAW,IAAKh0J,KAAKg0J,SAAU0uS,IAAKD,GAClCzic,IACX,CACA,YAAA2ic,CAAan+a,GAUT,MATqB,kBAAVA,EACPxkB,KAAKg0J,SAAW,IAAKh0J,KAAKg0J,SAAU4uS,IAAKZ,EAAc,eAAgBx9a,IAElEA,aAAiBt7B,KACtB8W,KAAKg0J,SAAW,IAAKh0J,KAAKg0J,SAAU4uS,IAAKZ,EAAc,eAAgBa,EAAMr+a,KAG7ExkB,KAAKg0J,SAAW,IAAKh0J,KAAKg0J,SAAU4uS,IAAKC,EAAM,IAAI35c,MAAU84Z,EAAKx9X,IAE/DxkB,IACX,CACA,iBAAA8ic,CAAkBt+a,GAUd,MATqB,kBAAVA,EACPxkB,KAAKg0J,SAAW,IAAKh0J,KAAKg0J,SAAUjrI,IAAKi5a,EAAc,oBAAqBx9a,IAEvEA,aAAiBt7B,KACtB8W,KAAKg0J,SAAW,IAAKh0J,KAAKg0J,SAAUjrI,IAAKi5a,EAAc,oBAAqBa,EAAMr+a,KAGlFxkB,KAAKg0J,SAAW,IAAKh0J,KAAKg0J,SAAUjrI,IAAK85a,EAAM,IAAI35c,MAAU84Z,EAAKx9X,IAE/DxkB,IACX,CACA,WAAA+ic,CAAYv+a,GAgBR,MAfqB,qBAAVA,EACPxkB,KAAKg0J,SAAW,IAAKh0J,KAAKg0J,SAAUtrI,IAAKm6a,EAAM,IAAI35c,OAE9Cs7B,aAAiBt7B,KACtB8W,KAAKg0J,SAAW,IAAKh0J,KAAKg0J,SAAUtrI,IAAKs5a,EAAc,cAAea,EAAMr+a,KAG5ExkB,KAAKg0J,SADiB,kBAAVxvI,EACI,IACTxkB,KAAKg0J,SACRtrI,IAAKs5a,EAAc,cAAea,EAAM,IAAI35c,MAAU84Z,EAAKx9X,KAI/C,IAAKxkB,KAAKg0J,SAAUtrI,IAAKs5a,EAAc,cAAex9a,IAEnExkB,IACX,ECrEG,MAAMgjc,UAAgBf,EACzB,kBAAAX,CAAmBL,GAEf,OADAjhc,KAAKuhc,iBAAmBN,EACjBjhc,IACX,CACA,UAAMymC,CAAKvsD,EAAKqG,GACZ,MAAMotK,EAAM,IAAIk0S,EAAYnmT,EAAQjB,OAAOj1I,KAAKC,UAAUzF,KAAKg0J,YAE/D,GADArG,EAAI2zS,mBAAmBthc,KAAKuhc,kBACxB3nd,MAAMC,QAAQmmB,KAAKuhc,kBAAkBJ,OACrCnhc,KAAKuhc,iBAAiBJ,KAAKlnd,SAAS,SACN,IAA9B+lB,KAAKuhc,iBAAiBh3U,IACtB,MAAM,IAAIg0U,EAAW,uCAEzB,OAAO5wS,EAAIlnH,KAAKvsD,EAAKqG,EACzB,yTC8BJ,MAAM+0V,EAAM,CAAC,EAAEn8V,eAyBR,SAAS8pd,EAAa7od,EAAO8od,EAAU3id,GAK5C,MAJwB,kBAAb2id,IACT3id,EAAU2id,EACVA,OAAWtqc,GAUf,SAAkBrY,GAEhB,MAAMqyB,EAAS,CACbuwb,WAAY,GACZC,eAAgB,CAAC,WAAY,WAAY,UAAW,YAAa,UACjEC,MAAO,CACLC,SAAUC,EAAO/9c,IACjBg+c,iBAAkBC,EAClBC,cAAeD,EACfE,WAAYJ,EAAOtpY,IACnB2pY,WAAYL,EAAOK,IACnBC,gBAAiBJ,EACjBv6L,mBAAoBu6L,EACpBK,WAAYP,EAAOQ,IACnBC,oBAAqBjyW,EACrBkyW,oBAAqBlyW,EACrBmyW,aAAcX,EAAOQ,GAAUhyW,GAC/BoyW,SAAUZ,EAAOY,GAAUpyW,GAC3BqyW,aAAcX,EACd75c,KAAM65c,EACNY,cAAeZ,EACf5iY,WAAY0iY,EAAO1iY,IACnByjY,4BAA6BvyW,EAC7BwyW,sBAAuBxyW,EACvByyW,sBAAuBzyW,EACvB0yW,SAAUlB,EAAOkB,IACjBC,gBAAiBnB,EAAOoB,IACxBC,kBAAmBrB,EAAOoB,IAC1BE,SAAUtB,EAAOppb,GAAM43E,GACvB+yW,aAAcrB,EACdsB,SAAUxB,EAAOppb,GAAM43E,GACvBizW,aAAcvB,EACd7iP,MAAO2iP,EAAO3iP,IACd7+N,MAAOgwG,EACPvsG,KAAM+9c,EAAO/9c,IACby/c,SAAU1B,EAAO0B,IACjBC,cAAeC,EACfC,YAAa7B,EAAOvpY,GAAMqrY,GAC1BC,cAAe/B,EAAOvpY,IACtBurY,UAAWhC,EAAOgC,IAClB56D,UAAW66D,EACXC,gBAAiB1zW,EACjB2zW,0BAA2B3zW,EAC3B4zW,oBAAqB5zW,EACrB6zW,cAAerC,EAAOtpY,IACtB4rY,OAAQtC,EAAOsC,IACfC,cAAevC,EAAOuC,KAExBC,KAAM,CACJpC,WAAYqC,IACZC,mBAAoBC,EACpB5C,SAAU0C,IACVtC,cAAeyC,GACf3C,iBAAkB4C,GAClBxC,WAAYoC,IACZK,qBAAsBC,EACtBC,oCAAqCC,EACrCC,gCAAiCD,EACjCE,wBAAyBC,EACzBz9L,mBAAoB09L,EACpB9C,WAAYkC,EAAOa,GACnBC,gBAAiBC,EACjB/C,oBAAqBgD,EACrB/C,oBAAqBgD,EACrB5C,cAAeiC,EACfpC,aAAc8B,EAAOkB,GACrB/C,SAAU6B,EAAOmB,GACjB/C,aAAckC,EACd18c,KAAM08c,EACNzlY,WAAYmlY,IACZ1B,4BAA6B8C,EAC7B7C,sBAAuB8C,EACvB7C,sBAAuB8C,EACvB7C,SAAUuB,IACVtB,gBAAiBsB,EAAOuB,GACxB3C,kBAAmBoB,EAAOuB,GAC1B1C,SAAUmB,EAAOwB,GACjB1C,aAAcwB,EACdvB,SAAUiB,EAAOyB,GACjBzC,aAAcsB,EACd1lP,MAAOolP,EAAO0B,GACd3ld,MAAO4ld,EACPC,UAAWC,EACXC,WAAYC,EACZvid,KAAMwgd,EAAOgC,GACb/C,SAAUe,IACVZ,YAAaY,IACbV,cAAeU,IACfT,UAAWS,IACXP,gBAAiBwC,EACjBvC,0BAA2BwC,EAC3BvC,oBAAqBwC,EACrBhqO,SAAUiqO,EACVxC,cAAeI,EAAOqC,GACtBC,0BAA2BC,EAC3BC,kBAAmBC,EACnB5C,OAAQG,IACRF,cAAeE,MAGnBx3D,EAAU57X,GAASryB,GAAW,CAAC,GAAGmod,iBAAmB,IAGrD,MAAM9+c,EAAO,CAAC,EACd,OAAO++c,EAUP,SAASA,EAAQl4b,GAEf,IAAI60S,EAAO,CACTtnU,KAAM,OACN1B,SAAU,IAGZ,MAAMwiB,EAAU,CACdwE,MAAO,CAACgiT,GACRsjJ,WAAY,GACZh2b,SACAywb,QACA0C,OACAh0W,SACA4mK,SACA/uQ,QAGIi/c,EAAY,GAClB,IAAInnd,GAAS,EACb,OAASA,EAAQ+uB,EAAOj3B,QAGtB,GAA8B,gBAA1Bi3B,EAAO/uB,GAAO,GAAG1D,MAAoD,kBAA1ByyB,EAAO/uB,GAAO,GAAG1D,KAC9D,GAAyB,UAArByyB,EAAO/uB,GAAO,GAChBmnd,EAAUxtd,KAAKqG,OACV,CAELA,EAAQond,EAAYr4b,EADPo4b,EAAUxkc,MACW3iB,EACpC,CAIJ,IADAA,GAAS,IACAA,EAAQ+uB,EAAOj3B,QAAQ,CAC9B,MAAM+zI,EAAU36G,EAAOnC,EAAO/uB,GAAO,IACjC4zV,EAAIn7V,KAAKozI,EAAS98G,EAAO/uB,GAAO,GAAG1D,OACrCuvI,EAAQ98G,EAAO/uB,GAAO,GAAG1D,MAAM7D,KAAKJ,OAAO+lB,OAAO,CAChDipc,eAAgBt4b,EAAO/uB,GAAO,GAAGqnd,gBAChCjqc,GAAU2R,EAAO/uB,GAAO,GAE/B,CAGA,GAAIod,EAAQ8pc,WAAWpvd,OAAS,EAAG,CACjC,MAAM4mI,EAAOthH,EAAQ8pc,WAAW9pc,EAAQ8pc,WAAWpvd,OAAS,IAC5C4mI,EAAK,IAAM4oV,GACnB7ud,KAAK2kB,OAASlG,EAAWwnH,EAAK,GACxC,CAkBA,IAfAklM,EAAK92O,SAAW,CACdtzD,MAAOkjM,EAAM3tM,EAAOj3B,OAAS,EAAIi3B,EAAO,GAAG,GAAGyK,MAAQ,CACpDjX,KAAM,EACNgvE,OAAQ,EACRnlD,OAAQ,IAEV3S,IAAKijM,EAAM3tM,EAAOj3B,OAAS,EAAIi3B,EAAOA,EAAOj3B,OAAS,GAAG,GAAG2hC,IAAM,CAChElX,KAAM,EACNgvE,OAAQ,EACRnlD,OAAQ,KAKZpsC,GAAS,IACAA,EAAQkxB,EAAOuwb,WAAW3pd,QACjC8rU,EAAO1yS,EAAOuwb,WAAWzhd,GAAO4jU,IAASA,EAE3C,OAAOA,CACT,CAQA,SAASwjJ,EAAYr4b,EAAQyK,EAAO1hC,GAClC,IAIIyrd,EAEAgE,EAEAC,EAEAC,EAVAznd,EAAQw5B,EAAQ,EAChBkub,GAAoB,EACpBC,GAAa,EASjB,OAAS3nd,GAASlI,GAAQ,CACxB,MAAMgL,EAAQisB,EAAO/uB,GACrB,OAAQ8C,EAAM,GAAGxG,MACf,IAAK,gBACL,IAAK,cACL,IAAK,aAEgB,UAAbwG,EAAM,GACR4kd,IAEAA,IAEFD,OAAWvwc,EACX,MAEJ,IAAK,kBAEgB,UAAbpU,EAAM,MACJygd,GAAakE,GAAaC,GAAqBF,IACjDA,EAAsBxnd,GAExBynd,OAAWvwc,GAEb,MAEJ,IAAK,aACL,IAAK,gBACL,IAAK,iBACL,IAAK,iBACL,IAAK,2BAID,MAEJ,QAEIuwc,OAAWvwc,EAGjB,IAAKwwc,GAAiC,UAAb5kd,EAAM,IAAoC,mBAAlBA,EAAM,GAAGxG,OAAmD,IAAtBord,GAAwC,SAAb5kd,EAAM,KAAoC,kBAAlBA,EAAM,GAAGxG,MAA8C,gBAAlBwG,EAAM,GAAGxG,MAAyB,CAC/M,GAAIind,EAAU,CACZ,IAAIqE,EAAY5nd,EAEhB,IADAund,OAAYrwc,EACL0wc,KAAa,CAClB,MAAMC,EAAY94b,EAAO64b,GACzB,GAA0B,eAAtBC,EAAU,GAAGvrd,MAA+C,oBAAtBurd,EAAU,GAAGvrd,KAA4B,CACjF,GAAqB,SAAjBurd,EAAU,GAAe,SACzBN,IACFx4b,EAAOw4b,GAAW,GAAGjrd,KAAO,kBAC5Bqrd,GAAa,GAEfE,EAAU,GAAGvrd,KAAO,aACpBird,EAAYK,CACd,MAAO,GAA0B,eAAtBC,EAAU,GAAGvrd,MAA+C,qBAAtBurd,EAAU,GAAGvrd,MAAqD,+BAAtBurd,EAAU,GAAGvrd,MAA+D,qBAAtBurd,EAAU,GAAGvrd,MAAqD,mBAAtBurd,EAAU,GAAGvrd,KAG1M,KAEJ,CACIkrd,KAAyBD,GAAaC,EAAsBD,KAC9DhE,EAASuE,SAAU,GAIrBvE,EAAS9pb,IAAMphC,OAAO+lB,OAAO,CAAC,EAAGmpc,EAAYx4b,EAAOw4b,GAAW,GAAG/tb,MAAQ12B,EAAM,GAAG22B,KACnF1K,EAAOyvE,OAAO+oX,GAAavnd,EAAO,EAAG,CAAC,OAAQujd,EAAUzgd,EAAM,KAC9D9C,IACAlI,GACF,CAGA,GAAsB,mBAAlBgL,EAAM,GAAGxG,KAA2B,CAEtC,MAAM+L,EAAO,CACX/L,KAAM,WACNwrd,SAAS,EACTtub,MAAOnhC,OAAO+lB,OAAO,CAAC,EAAGtb,EAAM,GAAG02B,OAElCC,SAAKviB,GAEPqsc,EAAWl7c,EACX0mB,EAAOyvE,OAAOx+F,EAAO,EAAG,CAAC,QAASqI,EAAMvF,EAAM,KAC9C9C,IACAlI,IACA0vd,OAAsBtwc,EACtBuwc,GAAW,CACb,CACF,CACF,CAEA,OADA14b,EAAOyK,GAAO,GAAGsub,QAAUH,EACpB7vd,CACT,CAYA,SAAS+pd,EAAO32b,EAAQ68b,GACtB,OAAOn0b,EAOP,SAASA,EAAKgT,GACZ+6a,EAAMlpd,KAAK6lB,KAAM4M,EAAO0b,GAAQA,GAC5Bmhb,GAAKA,EAAItvd,KAAK6lB,KAAMsoB,EAC1B,CACF,CAKA,SAASypE,IACP/xF,KAAKsD,MAAMjoB,KAAK,CACd2C,KAAM,WACN1B,SAAU,IAEd,CAKA,SAAS+md,EAAMjlY,EAAM91C,EAAOusH,GACX70I,KAAKsD,MAAMtD,KAAKsD,MAAM9pB,OAAS,GAEtB8C,SACfjB,KAAK+iF,GACdp+D,KAAKsD,MAAMjoB,KAAK+iF,GAChBp+D,KAAK4oc,WAAWvtd,KAAK,CAACitC,EAAOusH,QAAgBj8I,IAC7CwlE,EAAKoQ,SAAW,CACdtzD,MAAOkjM,EAAM91L,EAAMpN,OAEnBC,SAAKviB,EAET,CAUA,SAASotc,EAAOyD,GACd,OAAOxxc,EAOP,SAASA,EAAMqwB,GACTmhb,GAAKA,EAAItvd,KAAK6lB,KAAMsoB,GACxBy9a,EAAK5rd,KAAK6lB,KAAMsoB,EAClB,CACF,CAKA,SAASy9a,EAAKz9a,EAAOohb,GACnB,MAAMtrY,EAAOp+D,KAAKsD,MAAMe,MAClBiR,EAAOtV,KAAK4oc,WAAWvkc,MAC7B,IAAKiR,EACH,MAAM,IAAI5R,MAAM,iBAAmB4kB,EAAMtqC,KAAO,OAAQ,OAAkB,CACxEk9B,MAAOoN,EAAMpN,MACbC,IAAKmN,EAAMnN,MACR,yBACA,GAAI7F,EAAK,GAAGt3B,OAASsqC,EAAMtqC,KAChC,GAAI0rd,EACFA,EAAYvvd,KAAK6lB,KAAMsoB,EAAOhT,EAAK,QAC9B,EACWA,EAAK,IAAM0zb,GACnB7ud,KAAK6lB,KAAMsoB,EAAOhT,EAAK,GACjC,CAEF8oD,EAAKoQ,SAASrzD,IAAMijM,EAAM91L,EAAMnN,IAClC,CAKA,SAASw9O,IACP,OAAO,OAAS34P,KAAKsD,MAAMe,MAC7B,CAUA,SAASghc,IACPrlc,KAAKpW,KAAK+/c,6BAA8B,CAC1C,CAMA,SAASxE,EAAqB78a,GAC5B,GAAItoB,KAAKpW,KAAK+/c,4BAA6B,CACxB3pc,KAAKsD,MAAMtD,KAAKsD,MAAM9pB,OAAS,GACvC0hC,MAAQtY,OAAO/F,SAASmD,KAAK+oc,eAAezgb,GAAQ,IAC7DtoB,KAAKpW,KAAK+/c,iCAA8B/wc,CAC1C,CACF,CAMA,SAASouc,IACP,MAAMp9c,EAAOoW,KAAK24P,SACL34P,KAAKsD,MAAMtD,KAAKsD,MAAM9pB,OAAS,GACvCk7O,KAAO9qO,CACd,CAMA,SAASq9c,IACP,MAAMr9c,EAAOoW,KAAK24P,SACL34P,KAAKsD,MAAMtD,KAAKsD,MAAM9pB,OAAS,GACvCy9C,KAAOrtC,CACd,CAMA,SAASm9c,IAEH/mc,KAAKpW,KAAKggd,iBACd5pc,KAAK+xF,SACL/xF,KAAKpW,KAAKggd,gBAAiB,EAC7B,CAMA,SAAS/C,IACP,MAAMj9c,EAAOoW,KAAK24P,SACL34P,KAAKsD,MAAMtD,KAAKsD,MAAM9pB,OAAS,GACvCY,MAAQwP,EAAK1D,QAAQ,2BAA4B,IACtD8Z,KAAKpW,KAAKggd,oBAAiBhxc,CAC7B,CAMA,SAASsuc,IACP,MAAMt9c,EAAOoW,KAAK24P,SACL34P,KAAKsD,MAAMtD,KAAKsD,MAAM9pB,OAAS,GACvCY,MAAQwP,EAAK1D,QAAQ,eAAgB,GAC5C,CAMA,SAASmhd,EAA4B/+a,GACnC,MAAMvmC,EAAQie,KAAK24P,SACbv6L,EAAOp+D,KAAKsD,MAAMtD,KAAKsD,MAAM9pB,OAAS,GAC5C4kF,EAAKr8E,MAAQA,EACbq8E,EAAK6lF,YAAa,OAAoBjkJ,KAAK+oc,eAAezgb,IAAQ7hB,aACpE,CAMA,SAAS6gc,IACP,MAAM19c,EAAOoW,KAAK24P,SACL34P,KAAKsD,MAAMtD,KAAKsD,MAAM9pB,OAAS,GACvCsG,MAAQ8J,CACf,CAMA,SAASw9c,IACP,MAAMx9c,EAAOoW,KAAK24P,SACL34P,KAAKsD,MAAMtD,KAAKsD,MAAM9pB,OAAS,GACvCu7B,IAAMnrB,CACb,CAMA,SAASs8c,EAAyB59a,GAChC,MAAM81C,EAAOp+D,KAAKsD,MAAMtD,KAAKsD,MAAM9pB,OAAS,GAC5C,IAAK4kF,EAAKkuG,MAAO,CACf,MAAMA,EAAQtsK,KAAK+oc,eAAezgb,GAAO9uC,OACzC4kF,EAAKkuG,MAAQA,CACf,CACF,CAMA,SAASm8R,IACPzoc,KAAKpW,KAAKigd,8BAA+B,CAC3C,CAMA,SAAStB,EAAgCjgb,GAC1BtoB,KAAKsD,MAAMtD,KAAKsD,MAAM9pB,OAAS,GACvC8yL,MAAsD,KAA9CtsK,KAAK+oc,eAAezgb,GAAOwhb,YAAY,GAAY,EAAI,CACtE,CAMA,SAASzB,IACProc,KAAKpW,KAAKigd,kCAA+Bjxc,CAC3C,CAOA,SAAS6qc,EAAYn7a,GACnB,MAEMmX,EAFOz/B,KAAKsD,MAAMtD,KAAKsD,MAAM9pB,OAAS,GAEtB8C,SACtB,IAAI8jI,EAAO3gF,EAASA,EAASjmD,OAAS,GACjC4mI,GAAsB,SAAdA,EAAKpiI,OAEhBoiI,EAAOn8H,KACPm8H,EAAK5xC,SAAW,CACdtzD,MAAOkjM,EAAM91L,EAAMpN,OAEnBC,SAAKviB,GAEP6mC,EAASpkD,KAAK+kI,IAEhBpgH,KAAKsD,MAAMjoB,KAAK+kI,EAClB,CAOA,SAASkmV,EAAWh+a,GAClB,MAAM83F,EAAOpgH,KAAKsD,MAAMe,MACxB+7G,EAAKhmI,OAAS4lB,KAAK+oc,eAAezgb,GAClC83F,EAAK5xC,SAASrzD,IAAMijM,EAAM91L,EAAMnN,IAClC,CAOA,SAAS4sb,EAAiBz/a,GACxB,MAAMxpB,EAAUkB,KAAKsD,MAAMtD,KAAKsD,MAAM9pB,OAAS,GAE/C,GAAIwmB,KAAKpW,KAAKmgd,YAAa,CAIzB,OAHajrc,EAAQxiB,SAASwiB,EAAQxiB,SAAS9C,OAAS,GACnDg1F,SAASrzD,IAAMijM,EAAM91L,EAAMnN,UAChCnb,KAAKpW,KAAKmgd,iBAAcnxc,EAE1B,EACKoH,KAAKpW,KAAKigd,8BAAgCj3b,EAAOwwb,eAAenpd,SAAS6kB,EAAQ9gB,QACpFyld,EAAYtpd,KAAK6lB,KAAMsoB,GACvBg+a,EAAWnsd,KAAK6lB,KAAMsoB,GAE1B,CAOA,SAASi/a,IACPvnc,KAAKpW,KAAKmgd,aAAc,CAC1B,CAOA,SAASvC,IACP,MAAM59c,EAAOoW,KAAK24P,SACL34P,KAAKsD,MAAMtD,KAAKsD,MAAM9pB,OAAS,GACvCY,MAAQwP,CACf,CAOA,SAAS69c,IACP,MAAM79c,EAAOoW,KAAK24P,SACL34P,KAAKsD,MAAMtD,KAAKsD,MAAM9pB,OAAS,GACvCY,MAAQwP,CACf,CAOA,SAASu9c,IACP,MAAMv9c,EAAOoW,KAAK24P,SACL34P,KAAKsD,MAAMtD,KAAKsD,MAAM9pB,OAAS,GACvCY,MAAQwP,CACf,CAOA,SAASo+c,IACP,MAAM5pY,EAAOp+D,KAAKsD,MAAMtD,KAAKsD,MAAM9pB,OAAS,GAK5C,GAAIwmB,KAAKpW,KAAKogd,YAAa,CAEzB,MAAMC,EAAgBjqc,KAAKpW,KAAKqgd,eAAiB,WACjD7rY,EAAKpgF,MAAQ,YAEbogF,EAAK6rY,cAAgBA,SAEd7rY,EAAKrpD,WACLqpD,EAAKt+E,KACd,aAESs+E,EAAK6lF,kBAEL7lF,EAAKr8E,MAEdie,KAAKpW,KAAKqgd,mBAAgBrxc,CAC5B,CAOA,SAAS8uc,IACP,MAAMtpY,EAAOp+D,KAAKsD,MAAMtD,KAAKsD,MAAM9pB,OAAS,GAK5C,GAAIwmB,KAAKpW,KAAKogd,YAAa,CAEzB,MAAMC,EAAgBjqc,KAAKpW,KAAKqgd,eAAiB,WACjD7rY,EAAKpgF,MAAQ,YAEbogF,EAAK6rY,cAAgBA,SAEd7rY,EAAKrpD,WACLqpD,EAAKt+E,KACd,aAESs+E,EAAK6lF,kBAEL7lF,EAAKr8E,MAEdie,KAAKpW,KAAKqgd,mBAAgBrxc,CAC5B,CAOA,SAASivc,EAAgBv/a,GACvB,MAAMu9B,EAAS7lD,KAAK+oc,eAAezgb,GAC7B4hb,EAAWlqc,KAAKsD,MAAMtD,KAAKsD,MAAM9pB,OAAS,GAGhD0wd,EAASnod,OAAQ,OAAa8jE,GAE9BqkZ,EAASjmT,YAAa,OAAoBp+F,GAAQp/C,aACpD,CAOA,SAASkhc,IACP,MAAM7tH,EAAW95U,KAAKsD,MAAMtD,KAAKsD,MAAM9pB,OAAS,GAC1CY,EAAQ4lB,KAAK24P,SACbv6L,EAAOp+D,KAAKsD,MAAMtD,KAAKsD,MAAM9pB,OAAS,GAG5C,GADAwmB,KAAKpW,KAAKogd,aAAc,EACN,SAAd5rY,EAAKpgF,KAAiB,CAExB,MAAM1B,EAAWw9V,EAASx9V,SAC1B8hF,EAAK9hF,SAAWA,CAClB,MACE8hF,EAAKt7E,IAAM1I,CAEf,CAOA,SAAS8td,IACP,MAAMt+c,EAAOoW,KAAK24P,SACL34P,KAAKsD,MAAMtD,KAAKsD,MAAM9pB,OAAS,GACvCu7B,IAAMnrB,CACb,CAOA,SAASu+c,IACP,MAAMv+c,EAAOoW,KAAK24P,SACL34P,KAAKsD,MAAMtD,KAAKsD,MAAM9pB,OAAS,GACvCsG,MAAQ8J,CACf,CAOA,SAASw+c,IACPpoc,KAAKpW,KAAKogd,iBAAcpxc,CAC1B,CAOA,SAAS4sc,IACPxlc,KAAKpW,KAAKqgd,cAAgB,WAC5B,CAOA,SAAShC,EAAsB3/a,GAC7B,MAAMvmC,EAAQie,KAAK24P,SACbv6L,EAAOp+D,KAAKsD,MAAMtD,KAAKsD,MAAM9pB,OAAS,GAG5C4kF,EAAKr8E,MAAQA,EAEbq8E,EAAK6lF,YAAa,OAAoBjkJ,KAAK+oc,eAAezgb,IAAQ7hB,cAClEzG,KAAKpW,KAAKqgd,cAAgB,MAC5B,CAOA,SAASzD,EAA+Bl+a,GACtCtoB,KAAKpW,KAAKugd,uBAAyB7hb,EAAMtqC,IAC3C,CAMA,SAAS2od,EAA8Br+a,GACrC,MAAM1+B,EAAOoW,KAAK+oc,eAAezgb,GAC3BtqC,EAAOgiB,KAAKpW,KAAKugd,uBAEvB,IAAI/vd,EACJ,GAAI4D,EACF5D,GAAQ,OAAgCwP,EAAe,oCAAT5L,EAA6C,GAAK,IAChGgiB,KAAKpW,KAAKugd,4BAAyBvxc,MAC9B,CAELxe,GADe,OAA8BwP,EAE/C,CACaoW,KAAKsD,MAAMtD,KAAKsD,MAAM9pB,OAAS,GACvCY,OAASA,CAChB,CAMA,SAASwsd,EAAyBt+a,GACnBtoB,KAAKsD,MAAMe,MACnBmqE,SAASrzD,IAAMijM,EAAM91L,EAAMnN,IAClC,CAMA,SAASirb,GAAuB99a,GAC9Bg+a,EAAWnsd,KAAK6lB,KAAMsoB,GACTtoB,KAAKsD,MAAMtD,KAAKsD,MAAM9pB,OAAS,GACvCu7B,IAAM/U,KAAK+oc,eAAezgb,EACjC,CAMA,SAAS69a,GAAoB79a,GAC3Bg+a,EAAWnsd,KAAK6lB,KAAMsoB,GACTtoB,KAAKsD,MAAMtD,KAAKsD,MAAM9pB,OAAS,GACvCu7B,IAAM,UAAY/U,KAAK+oc,eAAezgb,EAC7C,CAOA,SAASs7a,KACP,MAAO,CACL5ld,KAAM,aACN1B,SAAU,GAEd,CAGA,SAASynd,KACP,MAAO,CACL/ld,KAAM,OACN02O,KAAM,KACNz9L,KAAM,KACN78C,MAAO,GAEX,CAGA,SAAS+pd,KACP,MAAO,CACLnmd,KAAM,aACN5D,MAAO,GAEX,CAGA,SAASymF,KACP,MAAO,CACL7iF,KAAM,aACNimK,WAAY,GACZliK,MAAO,KACPjC,MAAO,KACPi1B,IAAK,GAET,CAGA,SAAS0vb,KACP,MAAO,CACLzmd,KAAM,WACN1B,SAAU,GAEd,CAGA,SAAS29E,KACP,MAAO,CACLj8E,KAAM,UAENsuL,MAAO,EACPhwL,SAAU,GAEd,CAGA,SAASqod,KACP,MAAO,CACL3md,KAAM,QAEV,CAGA,SAASm8B,KACP,MAAO,CACLn8B,KAAM,OACN5D,MAAO,GAEX,CAGA,SAASwmO,KACP,MAAO,CACL5iO,KAAM,QACN8B,MAAO,KACPi1B,IAAK,GACLjyB,IAAK,KAET,CAGA,SAAS0C,KACP,MAAO,CACLxH,KAAM,OACN8B,MAAO,KACPi1B,IAAK,GACLz4B,SAAU,GAEd,CAMA,SAAS09E,GAAK1xC,GACZ,MAAO,CACLtqC,KAAM,OACNosd,QAAwB,gBAAf9hb,EAAMtqC,KACfk9B,MAAO,KACPilG,OAAQ73F,EAAMkhb,QACdltd,SAAU,GAEd,CAMA,SAAS2od,GAAS38a,GAChB,MAAO,CACLtqC,KAAM,WACNmiI,OAAQ73F,EAAMkhb,QACd19c,QAAS,KACTxP,SAAU,GAEd,CAGA,SAASipd,KACP,MAAO,CACLvnd,KAAM,YACN1B,SAAU,GAEd,CAGA,SAASupd,KACP,MAAO,CACL7nd,KAAM,SACN1B,SAAU,GAEd,CAGA,SAAS2H,KACP,MAAO,CACLjG,KAAM,OACN5D,MAAO,GAEX,CAGA,SAAS0rd,KACP,MAAO,CACL9nd,KAAM,gBAEV,CACF,CA7+BSqsd,CAAS9pd,EAAT8pd,EAAkB,QAAY,OAAM9pd,GAAS7F,WAAWuzK,OAAM,SAAa7zK,EAAO8od,GAAU,KACrG,CAs/BA,SAAS9kP,EAAMtjO,GACb,MAAO,CACLmpB,KAAMnpB,EAAEmpB,KACRgvE,OAAQn4F,EAAEm4F,OACVnlD,OAAQhzC,EAAEgzC,OAEd,CAOA,SAAS0gX,EAAU87D,EAAU7gR,GAC3B,IAAI/nM,GAAS,EACb,OAASA,EAAQ+nM,EAAWjwM,QAAQ,CAClC,MAAMY,EAAQqvM,EAAW/nM,GACrB9H,MAAMC,QAAQO,GAChBo0Z,EAAU87D,EAAUlwd,GAEpBmwd,EAAUD,EAAUlwd,EAExB,CACF,CAOA,SAASmwd,EAAUD,EAAUC,GAE3B,IAAIrwd,EACJ,IAAKA,KAAOqwd,EACV,GAAIj1H,EAAIn7V,KAAKowd,EAAWrwd,GACtB,OAAQA,GACN,IAAK,iBACH,CACE,MAAMme,EAAQkyc,EAAUrwd,GACpBme,GACFiyc,EAASpwd,GAAKmB,QAAQgd,GAExB,KACF,CACF,IAAK,aACH,CACE,MAAMA,EAAQkyc,EAAUrwd,GACpBme,GACFiyc,EAASpwd,GAAKmB,QAAQgd,GAExB,KACF,CACF,IAAK,QACL,IAAK,OACH,CACE,MAAMA,EAAQkyc,EAAUrwd,GACpBme,GACFte,OAAO+lB,OAAOwqc,EAASpwd,GAAMme,GAE/B,KACF,EAKV,CAGA,SAAS2wc,EAAev0c,EAAM4D,GAC5B,MAAI5D,EACI,IAAIiP,MAAM,iBAAmBjP,EAAKzW,KAAO,OAAQ,OAAkB,CACvEk9B,MAAOzmB,EAAKymB,MACZC,IAAK1mB,EAAK0mB,MACP,0BAA4B9iB,EAAMra,KAAO,OAAQ,OAAkB,CACtEk9B,MAAO7iB,EAAM6iB,MACbC,IAAK9iB,EAAM8iB,MACR,aAEC,IAAIzX,MAAM,oCAAsCrL,EAAMra,KAAO,OAAQ,OAAkB,CAC3Fk9B,MAAO7iB,EAAM6iB,MACbC,IAAK9iB,EAAM8iB,MACR,kBAET,6HCxkCO,SAASqvb,EAA2Bl/a,EAAGm/a,GAE5C,MAAM5sd,EAAS,CAAC,CAACG,KAAM,OAAQ5D,MAAO,WAWtC,OATIqwd,EAAmB,GACrB5sd,EAAOxC,KAAK,CACV2C,KAAM,UACN2+B,QAAS,MACTwzG,WAAY,CAAC,EACb7zI,SAAU,CAAC,CAAC0B,KAAM,OAAQ5D,MAAOyoB,OAAO4nc,OAIrC5sd,CACT,CAaO,SAAS6sd,EAAyBtiH,EAAgBqiH,GACvD,MACE,sBACCriH,EAAiB,IACjBqiH,EAAmB,EAAI,IAAMA,EAAmB,GAErD,CAWO,SAASE,EAAOric,GACrB,MAAMsic,EACmC,kBAAhCtic,EAAM/nB,QAAQqqd,cACjBtic,EAAM/nB,QAAQqqd,cACd,gBACAC,EACJvic,EAAM/nB,QAAQsqd,qBAAuBL,EACjCM,EACJxic,EAAM/nB,QAAQuqd,mBAAqBJ,EAC/BK,EAAgBzic,EAAM/nB,QAAQwqd,eAAiB,YAC/CC,EAAuB1ic,EAAM/nB,QAAQyqd,sBAAwB,KAC7DC,EAA0B3ic,EAAM/nB,QAAQ0qd,yBAA2B,CACvErud,UAAW,CAAC,YAGRsud,EAAY,GAClB,IAAI9iH,GAAkB,EAEtB,OAASA,EAAiB9/U,EAAM6ic,cAAc3xd,QAAQ,CACpD,MAAMqnF,EAAav4D,EAAM8ic,aAAatic,IACpCR,EAAM6ic,cAAc/iH,IAGtB,IAAKvnR,EACH,SAGF,MAAMxlD,EAAU/S,EAAM8lH,IAAIvtD,GACpBh1E,EAAKgX,OAAOg+D,EAAWojF,YAAY3gK,cACnC+nd,GAAS,OAAax/c,EAAG4a,eAC/B,IAAIgkc,EAAmB,EAEvB,MAAMa,EAAiB,GACjBC,EAASjjc,EAAMkjc,eAAe1ic,IAAIjd,GAGxC,UAAkB+M,IAAX2yc,KAA0Bd,GAAoBc,GAAQ,CACvDD,EAAe9xd,OAAS,GAC1B8xd,EAAejwd,KAAK,CAAC2C,KAAM,OAAQ5D,MAAO,MAG5C,IAAIkC,EAC6B,kBAAxBuud,EACHA,EACAA,EAAoBziH,EAAgBqiH,GAElB,kBAAbnud,IACTA,EAAW,CAAC0B,KAAM,OAAQ5D,MAAOkC,IAGnCgvd,EAAejwd,KAAK,CAClB2C,KAAM,UACN2+B,QAAS,IACTwzG,WAAY,CACV7qI,KACE,IACAsld,EACA,SACAS,GACCZ,EAAmB,EAAI,IAAMA,EAAmB,IACnDgB,oBAAqB,GACrBz2N,UAC+B,kBAAtB81N,EACHA,EACAA,EAAkB1iH,EAAgBqiH,GACxC7td,UAAW,CAAC,0BAEdN,SAAU1C,MAAMC,QAAQyC,GAAYA,EAAW,CAACA,IAEpD,CAEA,MAAM8jI,EAAO/kG,EAAQA,EAAQ7hC,OAAS,GAEtC,GAAI4mI,GAAsB,YAAdA,EAAKpiI,MAAuC,MAAjBoiI,EAAKzjG,QAAiB,CAC3D,MAAM+ub,EAAWtrV,EAAK9jI,SAAS8jI,EAAK9jI,SAAS9C,OAAS,GAClDkyd,GAA8B,SAAlBA,EAAS1td,KACvB0td,EAAStxd,OAAS,IAElBgmI,EAAK9jI,SAASjB,KAAK,CAAC2C,KAAM,OAAQ5D,MAAO,MAG3CgmI,EAAK9jI,SAASjB,QAAQiwd,EACxB,MACEjwb,EAAQhgC,QAAQiwd,GAIlB,MAAMrG,EAAW,CACfjnd,KAAM,UACN2+B,QAAS,KACTwzG,WAAY,CAACtkI,GAAI++c,EAAgB,MAAQS,GACzC/ud,SAAUgsB,EAAM4zE,KAAK7gE,GAAS,IAGhC/S,EAAM+mP,MAAMxuL,EAAYokY,GAExBiG,EAAU7vd,KAAK4pd,EACjB,CAEA,GAAyB,IAArBiG,EAAU1xd,OAId,MAAO,CACLwE,KAAM,UACN2+B,QAAS,UACTwzG,WAAY,CAACw7U,eAAe,EAAM/ud,UAAW,CAAC,cAC9CN,SAAU,CACR,CACE0B,KAAM,UACN2+B,QAASqub,EACT76U,WAAY,KACP,QAAgB86U,GACnBp/c,GAAI,kBAENvP,SAAU,CAAC,CAAC0B,KAAM,OAAQ5D,MAAO2wd,KAEnC,CAAC/sd,KAAM,OAAQ5D,MAAO,MACtB,CACE4D,KAAM,UACN2+B,QAAS,KACTwzG,WAAY,CAAC,EACb7zI,SAAUgsB,EAAM4zE,KAAKgvX,GAAW,IAElC,CAACltd,KAAM,OAAQ5D,MAAO,OAG5B,oGCrIA,SAASwxd,EAAcxtY,GACrB,MAAM+hD,EAAS/hD,EAAK+hD,OAEpB,OAAkB,OAAXA,QAA8BvnH,IAAXunH,EACtB/hD,EAAK9hF,SAAS9C,OAAS,EACvB2mI,CACN,8BC/FO,MAAMo8C,EAAW,CACtBsvS,WCXK,SAAoBvjc,EAAO81D,GAEhC,MAAMvgF,EAAS,CACbG,KAAM,UACN2+B,QAAS,aACTwzG,WAAY,CAAC,EACb7zI,SAAUgsB,EAAM4zE,KAAK5zE,EAAM8lH,IAAIhwD,IAAO,IAGxC,OADA91D,EAAM+mP,MAAMjxL,EAAMvgF,GACXyqB,EAAMwjc,UAAU1tY,EAAMvgF,EAC/B,EDEEkud,MEXK,SAAmBzjc,EAAO81D,GAE/B,MAAMvgF,EAAS,CAACG,KAAM,UAAW2+B,QAAS,KAAMwzG,WAAY,CAAC,EAAG7zI,SAAU,IAE1E,OADAgsB,EAAM+mP,MAAMjxL,EAAMvgF,GACX,CAACyqB,EAAMwjc,UAAU1tY,EAAMvgF,GAAS,CAACG,KAAM,OAAQ5D,MAAO,MAC/D,EFOEgyB,KGZK,SAAc9D,EAAO81D,GAC1B,MAAMhkF,EAAQgkF,EAAKhkF,MAAQgkF,EAAKhkF,MAAQ,KAAO,GAEzC+1I,EAAa,CAAC,EAEhB/xD,EAAKs2J,OACPvkG,EAAWvzI,UAAY,CAAC,YAAcwhF,EAAKs2J,OAK7C,IAAI72O,EAAS,CACXG,KAAM,UACN2+B,QAAS,OACTwzG,aACA7zI,SAAU,CAAC,CAAC0B,KAAM,OAAQ5D,WAa5B,OAVIgkF,EAAKnnC,OACPp5C,EAAO+L,KAAO,CAACqtC,KAAMmnC,EAAKnnC,OAG5B3uB,EAAM+mP,MAAMjxL,EAAMvgF,GAClBA,EAASyqB,EAAMwjc,UAAU1tY,EAAMvgF,GAG/BA,EAAS,CAACG,KAAM,UAAW2+B,QAAS,MAAOwzG,WAAY,CAAC,EAAG7zI,SAAU,CAACuB,IACtEyqB,EAAM+mP,MAAMjxL,EAAMvgF,GACXA,CACT,EHhBEuzC,OIdK,SAAuB9oB,EAAO81D,GAEnC,MAAMvgF,EAAS,CACbG,KAAM,UACN2+B,QAAS,MACTwzG,WAAY,CAAC,EACb7zI,SAAUgsB,EAAM8lH,IAAIhwD,IAGtB,OADA91D,EAAM+mP,MAAMjxL,EAAMvgF,GACXyqB,EAAMwjc,UAAU1tY,EAAMvgF,EAC/B,EJKE4md,SKfK,SAAkBn8b,EAAO81D,GAE9B,MAAMvgF,EAAS,CACbG,KAAM,UACN2+B,QAAS,KACTwzG,WAAY,CAAC,EACb7zI,SAAUgsB,EAAM8lH,IAAIhwD,IAGtB,OADA91D,EAAM+mP,MAAMjxL,EAAMvgF,GACXyqB,EAAMwjc,UAAU1tY,EAAMvgF,EAC/B,ELMEmud,kBMjBK,SAA2B1jc,EAAO81D,GACvC,MAAMwsY,EACmC,kBAAhCtic,EAAM/nB,QAAQqqd,cACjBtic,EAAM/nB,QAAQqqd,cACd,gBACA/+c,EAAKgX,OAAOu7D,EAAK6lF,YAAY3gK,cAC7B+nd,GAAS,OAAax/c,EAAG4a,eACzB/kB,EAAQ4mB,EAAM6ic,cAAc/vd,QAAQyQ,GAE1C,IAAIogd,EAEAC,EAAe5jc,EAAMkjc,eAAe1ic,IAAIjd,QAEvB+M,IAAjBszc,GACFA,EAAe,EACf5jc,EAAM6ic,cAAc9vd,KAAKwQ,GACzBogd,EAAU3jc,EAAM6ic,cAAc3xd,QAE9Byyd,EAAUvqd,EAAQ,EAGpBwqd,GAAgB,EAChB5jc,EAAMkjc,eAAe/6a,IAAI5kC,EAAIqgd,GAG7B,MAAM1md,EAAO,CACXxH,KAAM,UACN2+B,QAAS,IACTwzG,WAAY,CACV7qI,KAAM,IAAMsld,EAAgB,MAAQS,EACpCx/c,GACE++c,EACA,SACAS,GACCa,EAAe,EAAI,IAAMA,EAAe,IAC3CC,iBAAiB,EACjBC,gBAAiB,CAAC,mBAEpB9vd,SAAU,CAAC,CAAC0B,KAAM,OAAQ5D,MAAOyoB,OAAOopc,MAE1C3jc,EAAM+mP,MAAMjxL,EAAM54E,GAGlB,MAAM6md,EAAM,CACVrud,KAAM,UACN2+B,QAAS,MACTwzG,WAAY,CAAC,EACb7zI,SAAU,CAACkJ,IAGb,OADA8iB,EAAM+mP,MAAMjxL,EAAMiuY,GACX/jc,EAAMwjc,UAAU1tY,EAAMiuY,EAC/B,ENjCEpyY,QOjBK,SAAiB3xD,EAAO81D,GAE7B,MAAMvgF,EAAS,CACbG,KAAM,UACN2+B,QAAS,IAAMyhD,EAAKkuG,MACpBn8C,WAAY,CAAC,EACb7zI,SAAUgsB,EAAM8lH,IAAIhwD,IAGtB,OADA91D,EAAM+mP,MAAMjxL,EAAMvgF,GACXyqB,EAAMwjc,UAAU1tY,EAAMvgF,EAC/B,EPQEs8B,KQhBK,SAAc7R,EAAO81D,GAC1B,GAAI91D,EAAM/nB,QAAQ+rd,mBAAoB,CAEpC,MAAMzud,EAAS,CAACG,KAAM,MAAO5D,MAAOgkF,EAAKhkF,OAEzC,OADAkuB,EAAM+mP,MAAMjxL,EAAMvgF,GACXyqB,EAAMwjc,UAAU1tY,EAAMvgF,EAC/B,CAGF,ERQE0ud,eSjBK,SAAwBjkc,EAAO81D,GACpC,MAAMvyE,EAAKgX,OAAOu7D,EAAK6lF,YAAY3gK,cAC7Bu9E,EAAav4D,EAAMkkc,eAAe1jc,IAAIjd,GAE5C,IAAKg1E,EACH,OAAO,EAAA+lP,EAAA,GAAOt+S,EAAO81D,GAIvB,MAAM+xD,EAAa,CAACttI,KAAK,OAAag+E,EAAW9rD,KAAO,IAAKjyB,IAAKs7E,EAAKt7E,KAE9C,OAArB+9E,EAAW/gF,YAAuC8Y,IAArBioE,EAAW/gF,QAC1CqwI,EAAWrwI,MAAQ+gF,EAAW/gF,OAIhC,MAAMjC,EAAS,CAACG,KAAM,UAAW2+B,QAAS,MAAOwzG,aAAY7zI,SAAU,IAEvE,OADAgsB,EAAM+mP,MAAMjxL,EAAMvgF,GACXyqB,EAAMwjc,UAAU1tY,EAAMvgF,EAC/B,ETDE+iO,MUpBK,SAAet4M,EAAO81D,GAE3B,MAAM+xD,EAAa,CAACttI,KAAK,OAAau7E,EAAKrpD,MAE1B,OAAbqpD,EAAKt7E,UAA6B8V,IAAbwlE,EAAKt7E,MAC5BqtI,EAAWrtI,IAAMs7E,EAAKt7E,KAGL,OAAfs7E,EAAKt+E,YAAiC8Y,IAAfwlE,EAAKt+E,QAC9BqwI,EAAWrwI,MAAQs+E,EAAKt+E,OAI1B,MAAMjC,EAAS,CAACG,KAAM,UAAW2+B,QAAS,MAAOwzG,aAAY7zI,SAAU,IAEvE,OADAgsB,EAAM+mP,MAAMjxL,EAAMvgF,GACXyqB,EAAMwjc,UAAU1tY,EAAMvgF,EAC/B,EVKE4ud,WWpBK,SAAoBnkc,EAAO81D,GAEhC,MAAMn6E,EAAO,CAACjG,KAAM,OAAQ5D,MAAOgkF,EAAKhkF,MAAM8L,QAAQ,YAAa,MACnEoiB,EAAM+mP,MAAMjxL,EAAMn6E,GAGlB,MAAMpG,EAAS,CACbG,KAAM,UACN2+B,QAAS,OACTwzG,WAAY,CAAC,EACb7zI,SAAU,CAAC2H,IAGb,OADAqkB,EAAM+mP,MAAMjxL,EAAMvgF,GACXyqB,EAAMwjc,UAAU1tY,EAAMvgF,EAC/B,EXOE6ud,cYpBK,SAAuBpkc,EAAO81D,GACnC,MAAMvyE,EAAKgX,OAAOu7D,EAAK6lF,YAAY3gK,cAC7Bu9E,EAAav4D,EAAMkkc,eAAe1jc,IAAIjd,GAE5C,IAAKg1E,EACH,OAAO,EAAA+lP,EAAA,GAAOt+S,EAAO81D,GAIvB,MAAM+xD,EAAa,CAAC7qI,MAAM,OAAau7E,EAAW9rD,KAAO,KAEhC,OAArB8rD,EAAW/gF,YAAuC8Y,IAArBioE,EAAW/gF,QAC1CqwI,EAAWrwI,MAAQ+gF,EAAW/gF,OAIhC,MAAMjC,EAAS,CACbG,KAAM,UACN2+B,QAAS,IACTwzG,aACA7zI,SAAUgsB,EAAM8lH,IAAIhwD,IAGtB,OADA91D,EAAM+mP,MAAMjxL,EAAMvgF,GACXyqB,EAAMwjc,UAAU1tY,EAAMvgF,EAC/B,EZHE2H,KavBK,SAAc8iB,EAAO81D,GAE1B,MAAM+xD,EAAa,CAAC7qI,MAAM,OAAa84E,EAAKrpD,MAEzB,OAAfqpD,EAAKt+E,YAAiC8Y,IAAfwlE,EAAKt+E,QAC9BqwI,EAAWrwI,MAAQs+E,EAAKt+E,OAI1B,MAAMjC,EAAS,CACbG,KAAM,UACN2+B,QAAS,IACTwzG,aACA7zI,SAAUgsB,EAAM8lH,IAAIhwD,IAGtB,OADA91D,EAAM+mP,MAAMjxL,EAAMvgF,GACXyqB,EAAMwjc,UAAU1tY,EAAMvgF,EAC/B,EbOEond,SDnBK,SAAkB38b,EAAO81D,EAAMI,GACpC,MAAMmE,EAAUr6D,EAAM8lH,IAAIhwD,GACpBosL,EAAQhsL,EAyEhB,SAAmBJ,GACjB,IAAIosL,GAAQ,EACZ,GAAkB,SAAdpsL,EAAKpgF,KAAiB,CACxBwsQ,EAAQpsL,EAAK+hD,SAAU,EACvB,MAAM7jI,EAAW8hF,EAAK9hF,SACtB,IAAIoF,GAAS,EAEb,MAAQ8oQ,KAAW9oQ,EAAQpF,EAAS9C,QAClCgxQ,EAAQohN,EAActvd,EAASoF,GAEnC,CAEA,OAAO8oQ,CACT,CAtFyBmiN,CAAUnuY,GAAUotY,EAAcxtY,GAEnD+xD,EAAa,CAAC,EAEd7zI,EAAW,GAEjB,GAA4B,mBAAjB8hF,EAAKtyE,QAAuB,CACrC,MAAM03H,EAAO7gD,EAAQ,GAErB,IAAI4iY,EAEA/hV,GAAsB,YAAdA,EAAKxlI,MAAuC,MAAjBwlI,EAAK7mG,QAC1C4ob,EAAY/hV,GAEZ+hV,EAAY,CAACvnd,KAAM,UAAW2+B,QAAS,IAAKwzG,WAAY,CAAC,EAAG7zI,SAAU,IACtEqmF,EAAQ2V,QAAQitX,IAGdA,EAAUjpd,SAAS9C,OAAS,GAC9B+rd,EAAUjpd,SAASg8F,QAAQ,CAACt6F,KAAM,OAAQ5D,MAAO,MAGnDmrd,EAAUjpd,SAASg8F,QAAQ,CACzBt6F,KAAM,UACN2+B,QAAS,QACTwzG,WAAY,CAACnyI,KAAM,WAAY8N,QAASsyE,EAAKtyE,QAAS9M,UAAU,GAChE1C,SAAU,KAKZ6zI,EAAWvzI,UAAY,CAAC,iBAC1B,CAEA,IAAI8E,GAAS,EAEb,OAASA,EAAQihF,EAAQnpF,QAAQ,CAC/B,MAAMuE,EAAQ4kF,EAAQjhF,IAIpB8oQ,GACU,IAAV9oQ,GACe,YAAf3D,EAAMC,MACY,MAAlBD,EAAM4+B,UAENrgC,EAASjB,KAAK,CAAC2C,KAAM,OAAQ5D,MAAO,OAGnB,YAAf2D,EAAMC,MAAwC,MAAlBD,EAAM4+B,SAAoB6tO,EAGxDluQ,EAASjB,KAAK0C,GAFdzB,EAASjB,QAAQ0C,EAAMzB,SAI3B,CAEA,MAAM8jI,EAAOz9C,EAAQA,EAAQnpF,OAAS,GAGlC4mI,IAASoqI,GAAuB,YAAdpqI,EAAKpiI,MAAuC,MAAjBoiI,EAAKzjG,UACpDrgC,EAASjB,KAAK,CAAC2C,KAAM,OAAQ5D,MAAO,OAItC,MAAMyD,EAAS,CAACG,KAAM,UAAW2+B,QAAS,KAAMwzG,aAAY7zI,YAE5D,OADAgsB,EAAM+mP,MAAMjxL,EAAMvgF,GACXyqB,EAAMwjc,UAAU1tY,EAAMvgF,EAC/B,ECjDEm8E,KcxBK,SAAc1xD,EAAO81D,GAE1B,MAAM+xD,EAAa,CAAC,EACdxtD,EAAUr6D,EAAM8lH,IAAIhwD,GAC1B,IAAI18E,GAAS,EAOb,IAL0B,kBAAf08E,EAAKljD,OAAqC,IAAfkjD,EAAKljD,QACzCi1G,EAAWj1G,MAAQkjD,EAAKljD,SAIjBx5B,EAAQihF,EAAQnpF,QAAQ,CAC/B,MAAMuE,EAAQ4kF,EAAQjhF,GAEtB,GACiB,YAAf3D,EAAMC,MACY,OAAlBD,EAAM4+B,SACN5+B,EAAMoyI,YACNv2I,MAAMC,QAAQkE,EAAMoyI,WAAWvzI,YAC/BmB,EAAMoyI,WAAWvzI,UAAU3C,SAAS,kBACpC,CACAk2I,EAAWvzI,UAAY,CAAC,sBACxB,KACF,CACF,CAGA,MAAMiB,EAAS,CACbG,KAAM,UACN2+B,QAASyhD,EAAKgsY,QAAU,KAAO,KAC/Bj6U,aACA7zI,SAAUgsB,EAAM4zE,KAAKvZ,GAAS,IAGhC,OADAr6D,EAAM+mP,MAAMjxL,EAAMvgF,GACXyqB,EAAMwjc,UAAU1tY,EAAMvgF,EAC/B,EdVE0nd,Ue1BK,SAAmBj9b,EAAO81D,GAE/B,MAAMvgF,EAAS,CACbG,KAAM,UACN2+B,QAAS,IACTwzG,WAAY,CAAC,EACb7zI,SAAUgsB,EAAM8lH,IAAIhwD,IAGtB,OADA91D,EAAM+mP,MAAMjxL,EAAMvgF,GACXyqB,EAAMwjc,UAAU1tY,EAAMvgF,EAC/B,EfkBEojB,KgB3BK,SAAcqH,EAAO81D,GAE1B,MAAMvgF,EAAS,CAACG,KAAM,OAAQ1B,SAAUgsB,EAAM4zE,KAAK5zE,EAAM8lH,IAAIhwD,KAE7D,OADA91D,EAAM+mP,MAAMjxL,EAAMvgF,GACXyqB,EAAMwjc,UAAU1tY,EAAMvgF,EAC/B,EhBuBEgod,OiB7BK,SAAgBv9b,EAAO81D,GAE5B,MAAMvgF,EAAS,CACbG,KAAM,UACN2+B,QAAS,SACTwzG,WAAY,CAAC,EACb7zI,SAAUgsB,EAAM8lH,IAAIhwD,IAGtB,OADA91D,EAAM+mP,MAAMjxL,EAAMvgF,GACXyqB,EAAMwjc,UAAU1tY,EAAMvgF,EAC/B,EjBoBE+ud,MkB/BK,SAAetkc,EAAO81D,GAC3B,MAAMv5E,EAAOyjB,EAAM8lH,IAAIhwD,GACjByuY,EAAWhod,EAAKogB,QAEhB6nc,EAAe,GAErB,GAAID,EAAU,CAEZ,MAAMrpV,EAAO,CACXxlI,KAAM,UACN2+B,QAAS,QACTwzG,WAAY,CAAC,EACb7zI,SAAUgsB,EAAM4zE,KAAK,CAAC2wX,IAAW,IAEnCvkc,EAAM+mP,MAAMjxL,EAAK9hF,SAAS,GAAIknI,GAC9BspV,EAAazxd,KAAKmoI,EACpB,CAEA,GAAI3+H,EAAKrL,OAAS,EAAG,CAEnB,MAAMqf,EAAO,CACX7a,KAAM,UACN2+B,QAAS,QACTwzG,WAAY,CAAC,EACb7zI,SAAUgsB,EAAM4zE,KAAKr3F,GAAM,IAGvBq2B,GAAQ,QAAWkjD,EAAK9hF,SAAS,IACjC6+B,GAAM,QAASijD,EAAK9hF,SAAS8hF,EAAK9hF,SAAS9C,OAAS,IACtD0hC,GAASC,IAAKtiB,EAAK21E,SAAW,CAACtzD,QAAOC,QAC1C2xb,EAAazxd,KAAKwd,EACpB,CAGA,MAAMhb,EAAS,CACbG,KAAM,UACN2+B,QAAS,QACTwzG,WAAY,CAAC,EACb7zI,SAAUgsB,EAAM4zE,KAAK4wX,GAAc,IAGrC,OADAxkc,EAAM+mP,MAAMjxL,EAAMvgF,GACXyqB,EAAMwjc,UAAU1tY,EAAMvgF,EAC/B,ElBVEkvd,UmB/BK,SAAmBzkc,EAAO81D,GAI/B,MAAMvgF,EAAS,CACbG,KAAM,UACN2+B,QAAS,KACTwzG,WAAY,CAAC,EACb7zI,SAAUgsB,EAAM8lH,IAAIhwD,IAGtB,OADA91D,EAAM+mP,MAAMjxL,EAAMvgF,GACXyqB,EAAMwjc,UAAU1tY,EAAMvgF,EAC/B,EnBoBEmvd,SoB3BK,SAAkB1kc,EAAO81D,EAAMI,GACpC,MAAM/+B,EAAW++B,EAASA,EAAOliF,cAAWsc,EAGtC+jB,EAAuB,KADZ8iB,EAAWA,EAASrkD,QAAQgjF,GAAQ,GACpB,KAAO,KAElCihV,EAAQ7gV,GAA0B,UAAhBA,EAAOxgF,KAAmBwgF,EAAO6gV,WAAQzmZ,EAC3Dpf,EAAS6la,EAAQA,EAAM7la,OAAS4kF,EAAK9hF,SAAS9C,OACpD,IAAI+pP,GAAa,EAEjB,MAAMH,EAAQ,GAEd,OAASG,EAAY/pP,GAAQ,CAE3B,MAAM8pP,EAAOllK,EAAK9hF,SAASinP,GAErBpzG,EAAa,CAAC,EACd2mN,EAAauoE,EAAQA,EAAM97K,QAAa3qO,EAE1Ck+U,IACF3mN,EAAWkvR,MAAQvoE,GAIrB,IAAIj5V,EAAS,CAACG,KAAM,UAAW2+B,UAASwzG,aAAY7zI,SAAU,IAE1DgnP,IACFzlP,EAAOvB,SAAWgsB,EAAM8lH,IAAIk1G,GAC5Bh7N,EAAM+mP,MAAM/rB,EAAMzlP,GAClBA,EAASyqB,EAAMwjc,UAAUxoO,EAAMzlP,IAGjCulP,EAAM/nP,KAAKwC,EACb,CAGA,MAAMA,EAAS,CACbG,KAAM,UACN2+B,QAAS,KACTwzG,WAAY,CAAC,EACb7zI,SAAUgsB,EAAM4zE,KAAKknJ,GAAO,IAG9B,OADA96N,EAAM+mP,MAAMjxL,EAAMvgF,GACXyqB,EAAMwjc,UAAU1tY,EAAMvgF,EAC/B,EpBhBEoG,KqBjCK,SAAcqkB,EAAO81D,GAE1B,MAAMvgF,EAAS,CAACG,KAAM,OAAQ5D,OAAO,OAAUyoB,OAAOu7D,EAAKhkF,SAE3D,OADAkuB,EAAM+mP,MAAMjxL,EAAMvgF,GACXyqB,EAAMwjc,UAAU1tY,EAAMvgF,EAC/B,ErB6BEiod,csBlCK,SAAuBx9b,EAAO81D,GAEnC,MAAMvgF,EAAS,CACbG,KAAM,UACN2+B,QAAS,KACTwzG,WAAY,CAAC,EACb7zI,SAAU,IAGZ,OADAgsB,EAAM+mP,MAAMjxL,EAAMvgF,GACXyqB,EAAMwjc,UAAU1tY,EAAMvgF,EAC/B,EtByBEovd,KAAMv+b,EACNw+b,KAAMx+b,EACNmyD,WAAYnyD,EACZy+b,mBAAoBz+b,GAItB,SAASA,IAET,sJuBwBO,SAAS0+b,EAAO9nJ,EAAM/kU,GAC3B,MAAM+nB,GAAQ,OAAYg9S,EAAM/kU,GAC1B69E,EAAO91D,EAAMu+C,IAAIy+P,OAAM1sT,GACvBy0c,GAAO,QAAO/kc,GAEdzqB,EAASjE,MAAMC,QAAQukF,GACzB,CAACpgF,KAAM,OAAQ1B,SAAU8hF,GACzBA,GAAQ,CAACpgF,KAAM,OAAQ1B,SAAU,IAUrC,OARI+wd,KAIF,QAAO,aAAcxvd,GACrBA,EAAOvB,SAASjB,KAAK,CAAC2C,KAAM,OAAQ5D,MAAO,MAAOizd,IAG7Cxvd,CACT,sCCnFO,SAAS+oU,EAAOt+S,EAAO81D,GAC5B,MAAMkvY,EAAUlvY,EAAK6rY,cACrB,IAAI5a,EAAS,IAQb,GANgB,cAAZie,EACFje,GAAU,KACW,SAAZie,IACTje,GAAU,KAAOjxX,EAAKr8E,OAASq8E,EAAK6lF,YAAc,KAGlC,mBAAd7lF,EAAKpgF,KACP,MAAO,CAAC,CAACA,KAAM,OAAQ5D,MAAO,KAAOgkF,EAAKt7E,IAAMusc,IAGlD,MAAMke,EAAWjlc,EAAM8lH,IAAIhwD,GACrBolD,EAAO+pV,EAAS,GAElB/pV,GAAsB,SAAdA,EAAKxlI,KACfwlI,EAAKppI,MAAQ,IAAMopI,EAAKppI,MAExBmzd,EAASj1X,QAAQ,CAACt6F,KAAM,OAAQ5D,MAAO,MAGzC,MAAMgmI,EAAOmtV,EAASA,EAAS/zd,OAAS,GAQxC,OANI4mI,GAAsB,SAAdA,EAAKpiI,KACfoiI,EAAKhmI,OAASi1c,EAEdke,EAASlyd,KAAK,CAAC2C,KAAM,OAAQ5D,MAAOi1c,IAG/Bke,CACT,gNC6HA,MAAMj4H,EAAM,CAAC,EAAEn8V,eAGTmwR,EAAe,CAAC,EAYf,SAASkkM,EAAYloJ,EAAM/kU,GAChC,MAAMs/Q,EAAWt/Q,GAAW+oR,EAEtBkjM,EAAiB,IAAI77a,IAErBy6a,EAAe,IAAIz6a,IAEnB66a,EAAiB,IAAI76a,IAIrB4rI,EAAW,IAAI,OAAoBsjG,EAAStjG,UAG5Cj0J,EAAQ,CACZ8lH,IA0EF,SAAa5vD,GAEX,MAAM9Y,EAAS,GAEf,GAAI,aAAc8Y,EAAQ,CACxB,MAAMwZ,EAAQxZ,EAAOliF,SACrB,IAAIoF,GAAS,EACb,OAASA,EAAQs2F,EAAMx+F,QAAQ,CAC7B,MAAMqE,EAASyqB,EAAMu+C,IAAImxB,EAAMt2F,GAAQ88E,GAGvC,GAAI3gF,EAAQ,CACV,GAAI6D,GAAmC,UAA1Bs2F,EAAMt2F,EAAQ,GAAG1D,OACvBpE,MAAMC,QAAQgE,IAA2B,SAAhBA,EAAOG,OACnCH,EAAOzD,MAAQqzd,EAAuB5vd,EAAOzD,SAG1CR,MAAMC,QAAQgE,IAA2B,YAAhBA,EAAOG,MAAoB,CACvD,MAAMwlI,EAAO3lI,EAAOvB,SAAS,GAEzBknI,GAAsB,SAAdA,EAAKxlI,OACfwlI,EAAKppI,MAAQqzd,EAAuBjqV,EAAKppI,OAE7C,CAGER,MAAMC,QAAQgE,GAChB6nE,EAAOrqE,QAAQwC,GAEf6nE,EAAOrqE,KAAKwC,EAEhB,CACF,CACF,CAEA,OAAO6nE,CACT,EA7GEomZ,YACAU,iBACApB,eACAI,iBACAL,cAAe,GACf5uS,WACA11G,IAgCF,SAAauX,EAAMI,GACjB,MAAMxgF,EAAOogF,EAAKpgF,KACZkhQ,EAAS52O,EAAMi0J,SAASv+K,GAE9B,GAAIs3V,EAAIn7V,KAAKmuB,EAAMi0J,SAAUv+K,IAASkhQ,EACpC,OAAOA,EAAO52O,EAAO81D,EAAMI,GAG7B,GAAIl2D,EAAM/nB,QAAQmtd,aAAeplc,EAAM/nB,QAAQmtd,YAAYzzd,SAAS+D,GAAO,CACzE,GAAI,aAAcogF,EAAM,CACtB,MAAM,SAAC9hF,KAAaqxd,GAAWvvY,EACzBvgF,GAAS,QAAgB8vd,GAI/B,OAFA9vd,EAAOvB,SAAWgsB,EAAM8lH,IAAIhwD,GAErBvgF,CACT,CAGA,OAAO,QAAgBugF,EACzB,CAIA,OAFgB91D,EAAM/nB,QAAQqtd,gBAAkBC,GAEjCvlc,EAAO81D,EAAMI,EAC9B,EAxDEj+E,QAASs/Q,EACTxQ,QACAnzK,QAiBF,OAdA,QAAMopO,GAAM,SAAUlnP,GACpB,GAAkB,eAAdA,EAAKpgF,MAAuC,uBAAdogF,EAAKpgF,KAA+B,CACpE,MAAMF,EAAoB,eAAdsgF,EAAKpgF,KAAwBwud,EAAiBpB,EACpDv/c,EAAKgX,OAAOu7D,EAAK6lF,YAAY3gK,cAI9BxF,EAAI0yC,IAAI3kC,IAEX/N,EAAI2yC,IAAI5kC,EAAIuyE,EAEhB,CACF,IAEO91D,CAoFT,CAYA,SAAS+mP,EAAM/7P,EAAM6pB,GACf7pB,EAAKk7E,WAAUrxD,EAAGqxD,UAAW,QAASl7E,GAC5C,CAcA,SAASw4c,EAAUx4c,EAAM6pB,GAEvB,IAAIt/B,EAASs/B,EAGb,GAAI7pB,GAAQA,EAAK1J,KAAM,CACrB,MAAMkkd,EAAQx6c,EAAK1J,KAAKkkd,MAClBC,EAAYz6c,EAAK1J,KAAKmkd,UACtBC,EAAc16c,EAAK1J,KAAKokd,YAE9B,GAAqB,kBAAVF,EAGT,GAAoB,YAAhBjwd,EAAOG,KACTH,EAAO8+B,QAAUmxb,MAMd,CAIHjwd,EAAS,CAACG,KAAM,UAAW2+B,QAASmxb,EAAO39U,WAAY,CAAC,EAAG7zI,SAD1C,aAAcuB,EAASA,EAAOvB,SAAW,CAACuB,GAE7D,CAGkB,YAAhBA,EAAOG,MAAsBgwd,GAC/Bj0d,OAAO+lB,OAAOjiB,EAAOsyI,YAAY,QAAgB69U,IAIjD,aAAcnwd,GACdA,EAAOvB,UACO,OAAdyxd,QACcn1c,IAAdm1c,IAEAlwd,EAAOvB,SAAWyxd,EAEtB,CAEA,OAAOlwd,CACT,CAYA,SAASgwd,EAAsBvlc,EAAO81D,GACpC,MAAMx0E,EAAOw0E,EAAKx0E,MAAQ,CAAC,EAErB/L,IACJ,UAAWugF,IACTk3Q,EAAIn7V,KAAKyP,EAAM,gBAAkB0rV,EAAIn7V,KAAKyP,EAAM,aAE9C,CACE5L,KAAM,UACN2+B,QAAS,MACTwzG,WAAY,CAAC,EACb7zI,SAAUgsB,EAAM8lH,IAAIhwD,IALtB,CAACpgF,KAAM,OAAQ5D,MAAOgkF,EAAKhkF,OASjC,OADAkuB,EAAM+mP,MAAMjxL,EAAMvgF,GACXyqB,EAAMwjc,UAAU1tY,EAAMvgF,EAC/B,CAcO,SAASq+F,EAAKlE,EAAOwyK,GAE1B,MAAM3sQ,EAAS,GACf,IAAI6D,GAAS,EAMb,IAJI8oQ,GACF3sQ,EAAOxC,KAAK,CAAC2C,KAAM,OAAQ5D,MAAO,SAG3BsH,EAAQs2F,EAAMx+F,QACjBkI,GAAO7D,EAAOxC,KAAK,CAAC2C,KAAM,OAAQ5D,MAAO,OAC7CyD,EAAOxC,KAAK28F,EAAMt2F,IAOpB,OAJI8oQ,GAASxyK,EAAMx+F,OAAS,GAC1BqE,EAAOxC,KAAK,CAAC2C,KAAM,OAAQ5D,MAAO,OAG7ByD,CACT,CAUA,SAAS4vd,EAAuBrzd,GAC9B,IAAIsH,EAAQ,EACR0qB,EAAOhyB,EAAMmB,WAAWmG,GAE5B,KAAgB,IAAT0qB,GAAuB,KAATA,GACnB1qB,IACA0qB,EAAOhyB,EAAMmB,WAAWmG,GAG1B,OAAOtH,EAAMmJ,MAAM7B,EACrB,sFCjdA,MAAMqtB,EAAsB,kBAATC,KAAoBA,KAAOstB,WA6EjC2xa,EAAcC,GA3EN,EAAC35a,EAAGjJ,KACvB,MAAM+pF,EAAK,CAACzxF,EAAKliC,KACf6yC,EAAE9D,IAAI/uC,EAAOkiC,GACNA,GAGHuqb,EAASzsd,IACb,GAAI6yC,EAAE/D,IAAI9uC,GACR,OAAO6yC,EAAEzrB,IAAIpnB,GAEf,MAAO1D,EAAM5D,GAASkxC,EAAE5pC,GACxB,OAAQ1D,GACN,KAAK,KACL,KAAK,KACH,OAAOq3H,EAAGj7H,EAAOsH,GACnB,KAAK,KAAO,CACV,MAAM+Z,EAAM45G,EAAG,GAAI3zH,GACnB,IAAK,MAAMA,KAAStH,EAClBqhB,EAAIpgB,KAAK8yd,EAAOzsd,IAClB,OAAO+Z,CACT,CACA,KAAK,KAAQ,CACX,MAAMkrC,EAAS0uE,EAAG,CAAC,EAAG3zH,GACtB,IAAK,MAAOxH,EAAKwH,KAAUtH,EACzBusD,EAAOwna,EAAOj0d,IAAQi0d,EAAOzsd,GAC/B,OAAOilD,CACT,CACA,KAAK,KACH,OAAO0uE,EAAG,IAAInsH,KAAK9O,GAAQsH,GAC7B,KAAK,KAAQ,CACX,MAAM,OAAC2I,EAAM,MAAEmhE,GAASpxE,EACxB,OAAOi7H,EAAG,IAAIhsG,OAAOhf,EAAQmhE,GAAQ9pE,EACvC,CACA,KAAK,KAAK,CACR,MAAM5D,EAAMu3H,EAAG,IAAI1kF,IAAKjvC,GACxB,IAAK,MAAOxH,EAAKwH,KAAUtH,EACzB0D,EAAI2yC,IAAI09a,EAAOj0d,GAAMi0d,EAAOzsd,IAC9B,OAAO5D,CACT,CACA,KAAK,KAAK,CACR,MAAM2yC,EAAM4kF,EAAG,IAAIxkF,IAAKnvC,GACxB,IAAK,MAAMA,KAAStH,EAClBq2C,EAAItpB,IAAIgnc,EAAOzsd,IACjB,OAAO+uC,CACT,CACA,KAAK,KAAO,CACV,MAAM,KAAC7rC,EAAI,QAAEiE,GAAWzO,EACxB,OAAOi7H,EAAG,IAAItmG,EAAInqB,GAAMiE,GAAUnH,EACpC,CACA,KAAK,KACH,OAAO2zH,EAAG+4V,OAAOh0d,GAAQsH,GAC3B,IAAK,SACH,OAAO2zH,EAAGt7H,OAAOq0d,OAAOh0d,IAASsH,GACnC,IAAK,cACH,OAAO2zH,EAAG,IAAIroB,WAAW5yG,GAAO23G,OAAQ33G,GAC1C,IAAK,WAAY,CACf,MAAM,OAAE23G,GAAW,IAAI/E,WAAW5yG,GAClC,OAAOi7H,EAAG,IAAIjqB,SAAS2G,GAAS33G,EAClC,EAEF,OAAOi7H,EAAG,IAAItmG,EAAI/wB,GAAM5D,GAAQsH,EAAM,EAGxC,OAAOysd,CAAM,EAY0BE,CAAa,IAAI19a,IAAKu9a,EAAtBG,CAAkC,GC7ErEC,EAAQ,IAEPx0d,SAAQ,GAAI,CAAC,GACd,KAACkC,GAAQjC,OAETq3O,EAASh3O,IACb,MAAM4D,SAAc5D,EACpB,GAAa,WAAT4D,IAAsB5D,EACxB,MAAO,CAAC,KAAW4D,GAErB,MAAMuwd,EAAW,EAASp0d,KAAKC,GAAOmJ,MAAM,GAAI,GAChD,OAAQgrd,GACN,IAAK,QACH,MAAO,CAAC,KAAOD,GACjB,IAAK,SACH,MAAO,CAAC,KAAQA,GAClB,IAAK,OACH,MAAO,CAAC,KAAMA,GAChB,IAAK,SACH,MAAO,CAAC,KAAQA,GAClB,IAAK,MACH,MAAO,CAAC,KAAKA,GACf,IAAK,MACH,MAAO,CAAC,KAAKA,GACf,IAAK,WACH,MAAO,CAAC,KAAOC,GAGnB,OAAIA,EAASt0d,SAAS,SACb,CAAC,KAAOs0d,GAEbA,EAASt0d,SAAS,SACb,CAAC,KAAOs0d,GAEV,CAAC,KAAQA,EAAS,EAGrBC,EAAa,EAAE1nR,EAAM9oM,KACzB8oM,IAAS,OACC,aAAT9oM,GAAgC,WAATA,GAyHZywd,EAAY,CAACr0d,GAAQqyR,OAAMiiM,SAAS,CAAC,KACjD,MAAMpjb,EAAI,GACV,MAxHiB,EAACqjb,EAAQliM,EAAMl4O,EAAGjJ,KAEnC,MAAM+pF,EAAK,CAACzxF,EAAKxpC,KACf,MAAMsH,EAAQ4pC,EAAEjwC,KAAKuoC,GAAO,EAE5B,OADA2Q,EAAE9D,IAAIr2C,EAAOsH,GACNA,CAAK,EAGR41G,EAAOl9G,IACX,GAAIm6C,EAAE/D,IAAIp2C,GACR,OAAOm6C,EAAEzrB,IAAI1uB,GAEf,IAAK0sM,EAAM9oM,GAAQozO,EAAOh3O,GAC1B,OAAQ0sM,GACN,KAAK,KAAW,CACd,IAAIl7F,EAAQxxG,EACZ,OAAQ4D,GACN,IAAK,SACH8oM,EAAO,KACPl7F,EAAQxxG,EAAMN,WACd,MACF,IAAK,WACL,IAAK,SACH,GAAI60d,EACF,MAAM,IAAIzsc,UAAU,uBAAyBlkB,GAC/C4tG,EAAQ,KACR,MACF,IAAK,YACH,OAAOypB,EAAG,CAAC,MAAOj7H,GAEtB,OAAOi7H,EAAG,CAACyxE,EAAMl7F,GAAQxxG,EAC3B,CACA,KAAK,KAAO,CACV,GAAI4D,EAAM,CACR,IAAImiI,EAAS/lI,EAOb,MANa,aAAT4D,EACFmiI,EAAS,IAAInzB,WAAW5yG,EAAM23G,QAEd,gBAAT/zG,IACPmiI,EAAS,IAAInzB,WAAW5yG,IAEnBi7H,EAAG,CAACr3H,EAAM,IAAImiI,IAAU/lI,EACjC,CAEA,MAAMqhB,EAAM,GACN/Z,EAAQ2zH,EAAG,CAACyxE,EAAMrrL,GAAMrhB,GAC9B,IAAK,MAAMwxG,KAASxxG,EAClBqhB,EAAIpgB,KAAKi8G,EAAK1L,IAChB,OAAOlqG,CACT,CACA,KAAK,KAAQ,CACX,GAAI1D,EACF,OAAQA,GACN,IAAK,SACH,OAAOq3H,EAAG,CAACr3H,EAAM5D,EAAMN,YAAaM,GACtC,IAAK,UACL,IAAK,SACL,IAAK,SACH,OAAOi7H,EAAG,CAACr3H,EAAM5D,EAAMskE,WAAYtkE,GAIzC,GAAIqyR,GAAS,WAAYryR,EACvB,OAAOk9G,EAAKl9G,EAAM0mB,UAEpB,MAAMgsB,EAAU,GACVprC,EAAQ2zH,EAAG,CAACyxE,EAAMh6J,GAAU1yC,GAClC,IAAK,MAAMF,KAAO8B,EAAK5B,IACjBu0d,GAAWH,EAAWp9O,EAAOh3O,EAAMF,MACrC4yC,EAAQzxC,KAAK,CAACi8G,EAAKp9G,GAAMo9G,EAAKl9G,EAAMF,MAExC,OAAOwH,CACT,CACA,KAAK,KACH,OAAO2zH,EAAG,CAACyxE,EAAM1sM,EAAMi8B,eAAgBj8B,GACzC,KAAK,KAAQ,CACX,MAAM,OAACiQ,EAAM,MAAEmhE,GAASpxE,EACxB,OAAOi7H,EAAG,CAACyxE,EAAM,CAACz8L,SAAQmhE,UAASpxE,EACrC,CACA,KAAK,KAAK,CACR,MAAM0yC,EAAU,GACVprC,EAAQ2zH,EAAG,CAACyxE,EAAMh6J,GAAU1yC,GAClC,IAAK,MAAOF,EAAK0xG,KAAUxxG,GACrBu0d,IAAYH,EAAWp9O,EAAOl3O,MAASs0d,EAAWp9O,EAAOxlI,MAC3D9+D,EAAQzxC,KAAK,CAACi8G,EAAKp9G,GAAMo9G,EAAK1L,KAElC,OAAOlqG,CACT,CACA,KAAK,KAAK,CACR,MAAMorC,EAAU,GACVprC,EAAQ2zH,EAAG,CAACyxE,EAAMh6J,GAAU1yC,GAClC,IAAK,MAAMwxG,KAASxxG,GACdu0d,GAAWH,EAAWp9O,EAAOxlI,KAC/B9+D,EAAQzxC,KAAKi8G,EAAK1L,IAEtB,OAAOlqG,CACT,EAGF,MAAM,QAACmH,GAAWzO,EAClB,OAAOi7H,EAAG,CAACyxE,EAAM,CAACliM,KAAM5G,EAAM6K,YAAWzO,EAAM,EAGjD,OAAOk9G,CAAI,EAiBJs3W,GAAaniM,GAAQiiM,KAAUjiM,EAAM,IAAI97O,IAAKrF,EAA9Csjb,CAAiDx0d,GAAQkxC,CAAC,EC1JnE,MAA0C,oBAApBujb,gBAEpB,CAACrlZ,EAAKjpE,IACJA,IAAY,SAAUA,GAAW,UAAWA,GAC1C0td,EAAYQ,EAAUjlZ,EAAKjpE,IAAYsud,gBAAgBrlZ,GAE3D,CAACA,EAAKjpE,IAAY0td,EAAYQ,EAAUjlZ,EAAKjpE,iSCrBxC,MAAMuud,EAAa,YAAE,KACfC,EAAa,EACbC,EAAa,EACbp+C,EAAa,EACbq+C,EAAa,EACbC,EAAa,EACbC,EAAa,EACbC,EAAa,EACb5sY,EAAa,EACb6sY,EAAa,sECG1B,MAAM/lM,EAAe,CAAC,EAef,SAASxvR,EAASM,EAAOmG,GAC9B,MAAMs/Q,EAAWt/Q,GAAW+oR,EAQ5B,OAAOziN,EAAIzsE,EAN2B,mBAA7BylR,EAASyvM,iBACZzvM,EAASyvM,gBAGmB,mBAAzBzvM,EAAS0vM,aAA4B1vM,EAAS0vM,YAGzD,CAcA,SAAS1oZ,EAAIzsE,EAAOk1d,EAAiBC,GACnC,GAqDF,SAAcn1d,GACZ,OAAOsoB,QAAQtoB,GAA0B,kBAAVA,EACjC,CAvDMgkF,CAAKhkF,GAAQ,CACf,GAAI,UAAWA,EACb,MAAsB,SAAfA,EAAM4D,MAAoBuxd,EAAmBn1d,EAAMA,MAAX,GAGjD,GAAIk1d,GAAmB,QAASl1d,GAASA,EAAM0I,IAC7C,OAAO1I,EAAM0I,IAGf,GAAI,aAAc1I,EAChB,OAAOg0I,EAAIh0I,EAAMkC,SAAUgzd,EAAiBC,EAEhD,CAEA,OAAI31d,MAAMC,QAAQO,GACTg0I,EAAIh0I,EAAOk1d,EAAiBC,GAG9B,EACT,CAcA,SAASnhV,EAAI1oE,EAAQ4pZ,EAAiBC,GAEpC,MAAM1xd,EAAS,GACf,IAAI6D,GAAS,EAEb,OAASA,EAAQgkE,EAAOlsE,QACtBqE,EAAO6D,GAASmlE,EAAInB,EAAOhkE,GAAQ4td,EAAiBC,GAGtD,OAAO1xd,EAAO+gB,KAAK,GACrB,gGCnFO,MAAM4wc,EAAY,CACvBxwV,SAAS,EACTywV,SAQF,SAA2BrnQ,EAAS6I,EAAIy+P,GACtC,OAgBA,SAAetjc,GACb,OAAO,QAAcA,IAAQ,IAAArP,GAAaqrM,EAAS/sF,EAAO,aAA7B,CAA2CjvG,GAAQivG,EAAMjvG,EACxF,EAgBA,SAASivG,EAAMjvG,GACb,OAAgB,OAATA,IAAiB,QAAmBA,GAAQ6kM,EAAG7kM,GAAQsjc,EAAItjc,EACpE,CACF,kGCpBO,SAASujc,EAAavnQ,EAAS6I,EAAIjzN,EAAM2e,GAC9C,MAAMskK,EAAQtkK,EAAMA,EAAM,EAAIiG,OAAO63R,kBACrC,IAAIt4S,EAAO,EACX,OAGA,SAAeiqB,GACb,IAAI,QAAcA,GAEhB,OADAg8L,EAAQi7P,MAAMrld,GACPukD,EAAOn2B,GAEhB,OAAO6kM,EAAG7kM,EACZ,EAGA,SAASm2B,EAAOn2B,GACd,OAAI,QAAcA,IAASjqB,IAAS8+K,GAClCmnC,EAAQwnQ,QAAQxjc,GACTm2B,IAET6lK,EAAQ29P,KAAK/nd,GACNizN,EAAG7kM,GACZ,CACF,+UC1CO,MAAMyjc,EAAaC,EAAW,YAcxBC,EAAoBD,EAAW,cAuB/BE,EAAaF,EAAW,uBAa9B,SAASG,EAAa7jc,GAC3B,OAGW,OAATA,IAAkBA,EAAO,IAAe,MAATA,EAEnC,CAaO,MAAM8jc,EAAaJ,EAAW,MAoBxBK,EAAgBL,EAAW,cAe3BM,EAAmBN,EAAW,kBAiBpC,SAASO,EAAmBjkc,GACjC,OAAgB,OAATA,GAAiBA,GAAQ,CAClC,CAWO,SAASkkc,EAA0Blkc,GACxC,OAAgB,OAATA,IAAkBA,EAAO,GAAc,KAATA,EACvC,CAiBO,SAASmkc,EAAcnkc,GAC5B,OAAiB,IAAVA,IAAyB,IAAVA,GAAwB,KAATA,CACvC,CAuBO,MAAMokc,EAAqBV,EAAW,gBAsBhCW,EAAoBX,EAAW,MAU5C,SAASA,EAAWj9Y,GAClB,OAUA,SAAezmD,GACb,OAAgB,OAATA,GAAiBA,GAAQ,GAAKymD,EAAMzzD,KAAKyD,OAAO+iB,aAAaxZ,GACtE,CACF,sCC/NO,SAAS8zE,EAAOlmB,EAAM9+C,EAAO0kG,EAAQ4U,GAC1C,MAAMr5G,EAAM6+C,EAAKxgF,OACjB,IAEI4gL,EAFAs2S,EAAa,EAajB,GAPEx1b,EADEA,EAAQ,GACDA,EAAQC,EAAM,EAAIA,EAAMD,EAEzBA,EAAQC,EAAMA,EAAMD,EAE9B0kG,EAASA,EAAS,EAAIA,EAAS,EAG3B4U,EAAMh7I,OAAS,IACjB4gL,EAAaxgL,MAAM0Z,KAAKkhI,GACxB4lC,EAAW9hF,QAAQp9D,EAAO0kG,GAE1B5lD,EAAKkmB,UAAUk6E,QAMf,IAHIx6C,GAAQ5lD,EAAKkmB,OAAOhlE,EAAO0kG,GAGxB8wV,EAAal8U,EAAMh7I,QACxB4gL,EAAa5lC,EAAMjxI,MAAMmtd,EAAYA,EAAa,KAClDt2S,EAAW9hF,QAAQp9D,EAAO,GAE1B8+C,EAAKkmB,UAAUk6E,GACfs2S,GAAc,IACdx1b,GAAS,GAGf,CAkBO,SAAS7/B,EAAK2+E,EAAMw6D,GACzB,OAAIx6D,EAAKxgF,OAAS,GAChB0mG,EAAOlmB,EAAMA,EAAKxgF,OAAQ,EAAGg7I,GACtBx6D,GAEFw6D,CACT,sJCrEA,MAAMr7I,EAAiB,CAAC,EAAEA,eAUnB,SAASw3d,EAAkBlnR,GAEhC,MAAMr7D,EAAM,CAAC,EACb,IAAI1sI,GAAS,EAEb,OAASA,EAAQ+nM,EAAWjwM,QAC1Bo3d,EAAgBxiV,EAAKq7D,EAAW/nM,IAGlC,OAAO0sI,CACT,CAYA,SAASwiV,EAAgBxiV,EAAKm8U,GAE5B,IAAIsG,EAEJ,IAAKA,KAAQtG,EAAW,CACtB,MAEM91c,GAFQtb,EAAegB,KAAKi0I,EAAKyiV,GAAQziV,EAAIyiV,QAAQj4c,KAEpCw1H,EAAIyiV,GAAQ,CAAC,GAE9Bx4c,EAAQkyc,EAAUsG,GAExB,IAAIzkc,EAEJ,GAAI/T,EACF,IAAK+T,KAAQ/T,EAAO,CACblf,EAAegB,KAAKsa,EAAM2X,KAAO3X,EAAK2X,GAAQ,IACnD,MAAMhyB,EAAQie,EAAM+T,GACpB0kc,EAEEr8c,EAAK2X,GACLxyB,MAAMC,QAAQO,GAASA,EAAQA,EAAQ,CAACA,GAAS,GAErD,CAEJ,CACF,CAaA,SAAS02d,EAAWn9I,EAAU35P,GAC5B,IAAIt4E,GAAS,EAEb,MAAM+5H,EAAS,GAEf,OAAS/5H,EAAQs4E,EAAKxgF,SAEE,UAApBwgF,EAAKt4E,GAAOylB,IAAkBwsT,EAAWl4M,GAAQpgI,KAAK2+E,EAAKt4E,KAG/D,OAAOiyU,EAAU,EAAG,EAAGl4M,EACzB,sCC9EO,SAASs1V,EAAgC32d,EAAOq1B,GACrD,MAAMrD,EAAOxJ,OAAO/F,SAASziB,EAAOq1B,GACpC,OAEArD,EAAO,GAAc,KAATA,GAAeA,EAAO,IAAMA,EAAO,IAE/CA,EAAO,KAAOA,EAAO,KAErBA,EAAO,OAAUA,EAAO,OAExBA,EAAO,OAAUA,EAAO,OACJ,SAAZ,MAAPA,IAAiD,SAAZ,MAAPA,IAE/BA,EAAO,QACE,SAEFvJ,OAAOmuc,cAAc5kc,EAC9B,2JC7BA,MAAM6kc,EAA6B,oEAc5B,SAASzrb,EAAaprC,GAC3B,OAAOA,EAAM8L,QAAQ+qd,EAA4Bvlb,EACnD,CAYA,SAASA,EAAOijO,EAAIrlP,EAAI4nc,GACtB,GAAI5nc,EAEF,OAAOA,EAKT,GAAa,KADA4nc,EAAG31d,WAAW,GACV,CACf,MAAMioI,EAAO0tV,EAAG31d,WAAW,GACrB2uI,EAAe,MAAT1G,GAAyB,KAATA,EAC5B,OAAO,OAAgC0tV,EAAG3td,MAAM2mI,EAAM,EAAI,GAAIA,EAAM,GAAK,GAC3E,CACA,OAAO,OAA8BgnV,IAAOviN,CAC9C,sCCzBO,SAASwiN,EAAoB/2d,GAClC,OAAOA,EAEN8L,QAAQ,cAAe,KAEvBA,QAAQ,SAAU,IAOlBugB,cAAcnjB,aACjB,qEChBO,SAAS8td,EAAWN,EAAYrgc,EAAQ3R,GAE7C,MAAM4hS,EAAS,GACf,IAAIh/S,GAAS,EAEb,OAASA,EAAQovd,EAAWt3d,QAAQ,CAClC,MAAM4lC,EAAU0xb,EAAWpvd,GAAO0vd,WAE9Bhyb,IAAYshR,EAAOzmT,SAASmlC,KAC9B3O,EAAS2O,EAAQ3O,EAAQ3R,GACzB4hS,EAAOrlT,KAAK+jC,GAEhB,CAEA,OAAO3O,CACT,gICyBO,SAAS4gc,EAAaj3d,GAE3B,MAAMyD,EAAS,GACf,IAAI6D,GAAS,EACTw5B,EAAQ,EACRkvV,EAAO,EACX,OAAS1oX,EAAQtH,EAAMZ,QAAQ,CAC7B,MAAM4yB,EAAOhyB,EAAMmB,WAAWmG,GAE9B,IAAIwE,EAAU,GAGd,GAAa,KAATkmB,IAAe,QAAkBhyB,EAAMmB,WAAWmG,EAAQ,MAAO,QAAkBtH,EAAMmB,WAAWmG,EAAQ,IAC9G0oX,EAAO,OAGJ,GAAIh+V,EAAO,IACT,oBAAoBhN,KAAKyD,OAAO+iB,aAAaxZ,MAChDlmB,EAAU2c,OAAO+iB,aAAaxZ,SAI7B,GAAIA,EAAO,OAAUA,EAAO,MAAQ,CACvC,MAAM2B,EAAO3zB,EAAMmB,WAAWmG,EAAQ,GAGlC0qB,EAAO,OAAU2B,EAAO,OAAUA,EAAO,OAC3C7nB,EAAU2c,OAAO+iB,aAAaxZ,EAAM2B,GACpCq8V,EAAO,GAIPlkX,EAAU,QAEd,MAGEA,EAAU2c,OAAO+iB,aAAaxZ,GAE5BlmB,IACFrI,EAAOxC,KAAKjB,EAAMmJ,MAAM23B,EAAOx5B,GAAQk0B,mBAAmB1vB,IAC1Dg1B,EAAQx5B,EAAQ0oX,EAAO,EACvBlkX,EAAU,IAERkkX,IACF1oX,GAAS0oX,EACTA,EAAO,EAEX,CACA,OAAOvsX,EAAO+gB,KAAK,IAAMxkB,EAAMmJ,MAAM23B,EACvC,4HCvFO,SAASo2b,EAAYC,GAE1B,MAAMC,EAAQ,CAAC,EACf,IAEIhtd,EAEAykd,EAEA3vJ,EAEAm4J,EAEAr3S,EAEAs3S,EAEA9wS,EAdAl/K,GAAS,EAeb,MAAM+uB,EAAS,IAAI,IAAa8gc,GAChC,OAAS7vd,EAAQ+uB,EAAOj3B,QAAQ,CAC9B,KAAOkI,KAAS8vd,GACd9vd,EAAQ8vd,EAAM9vd,GAMhB,GAJA8C,EAAQisB,EAAO3H,IAAIpnB,GAIfA,GAA2B,cAAlB8C,EAAM,GAAGxG,MAA0D,mBAAlCyyB,EAAO3H,IAAIpnB,EAAQ,GAAG,GAAG1D,OACrE0zd,EAAYltd,EAAM,GAAGmtd,WAAWlhc,OAChC6oS,EAAa,EACTA,EAAao4J,EAAUl4d,QAA4C,oBAAlCk4d,EAAUp4J,GAAY,GAAGt7T,OAC5Ds7T,GAAc,GAEZA,EAAao4J,EAAUl4d,QAA4C,YAAlCk4d,EAAUp4J,GAAY,GAAGt7T,MAC5D,OAASs7T,EAAao4J,EAAUl4d,QACQ,YAAlCk4d,EAAUp4J,GAAY,GAAGt7T,MAGS,cAAlC0zd,EAAUp4J,GAAY,GAAGt7T,OAC3B0zd,EAAUp4J,GAAY,GAAGs4J,6BAA8B,EACvDt4J,KAOR,GAAiB,UAAb90T,EAAM,GACJA,EAAM,GAAGgyX,cACXz8X,OAAO+lB,OAAO0xc,EAAOK,EAAWphc,EAAQ/uB,IACxCA,EAAQ8vd,EAAM9vd,GACdk/K,GAAO,QAIN,GAAIp8K,EAAM,GAAG87Q,WAAY,CAG5B,IAFAg5C,EAAa53T,EACbund,OAAYrwc,EACL0gT,KAEL,GADAm4J,EAAahhc,EAAO3H,IAAIwwS,GACG,eAAvBm4J,EAAW,GAAGzzd,MAAgD,oBAAvByzd,EAAW,GAAGzzd,KACjC,UAAlByzd,EAAW,KACTxI,IACFx4b,EAAO3H,IAAImgc,GAAW,GAAGjrd,KAAO,mBAElCyzd,EAAW,GAAGzzd,KAAO,aACrBird,EAAY3vJ,QAET,GAA2B,eAAvBm4J,EAAW,GAAGzzd,KAGvB,MAGAird,IAEFzkd,EAAM,GAAG22B,IAAM,IACV1K,EAAO3H,IAAImgc,GAAW,GAAG/tb,OAI9Bk/I,EAAa3pJ,EAAOltB,MAAM0ld,EAAWvnd,GACrC04K,EAAW9hF,QAAQ9zF,GACnBisB,EAAOyvE,OAAO+oX,EAAWvnd,EAAQund,EAAY,EAAG7uS,GAEpD,CACF,CAIA,OADA,OAAOm3S,EAAa,EAAG3uc,OAAO63R,kBAAmBhqR,EAAOltB,MAAM,KACtDq9K,CACV,CAYA,SAASixS,EAAWphc,EAAQqhc,GAC1B,MAAMxpb,EAAQ7X,EAAO3H,IAAIgpc,GAAY,GAC/Bhzc,EAAU2R,EAAO3H,IAAIgpc,GAAY,GACvC,IAAI3yG,EAAgB2yG,EAAa,EAEjC,MAAMC,EAAiB,GACjBC,EAAY1pb,EAAMqpb,YAAc7yc,EAAQyyD,OAAOjpC,EAAMkuV,aAAaluV,EAAMpN,OACxE+2b,EAAcD,EAAUvhc,OAExB+gc,EAAQ,GAERU,EAAO,CAAC,EAEd,IAAIp+T,EAEAwD,EACA51J,GAAS,EAETlD,EAAU8pC,EACV6pb,EAAS,EACTj3b,EAAQ,EACZ,MAAMk3b,EAAS,CAACl3b,GAIhB,KAAO18B,GAAS,CAEd,KAAOiyB,EAAO3H,MAAMq2V,GAAe,KAAO3gX,IAG1Cuzd,EAAe12d,KAAK8jX,GACf3gX,EAAQmzd,aACX79T,EAASh1I,EAAQuzc,YAAY7zd,GACxBA,EAAQuvB,MACX+lI,EAAOz4J,KAAK,MAEVi8J,GACF06T,EAAUM,WAAW9zd,EAAQ08B,OAE3B18B,EAAQozd,8BACVI,EAAUO,oCAAqC,GAEjDP,EAAU/jT,MAAMna,GACZt1J,EAAQozd,8BACVI,EAAUO,wCAAqC35c,IAKnD0+I,EAAW94J,EACXA,EAAUA,EAAQuvB,IACpB,CAKA,IADAvvB,EAAU8pC,IACD5mC,EAAQuwd,EAAYz4d,QAGD,SAA1By4d,EAAYvwd,GAAO,IAA+C,UAA9Buwd,EAAYvwd,EAAQ,GAAG,IAAkBuwd,EAAYvwd,GAAO,GAAG1D,OAASi0d,EAAYvwd,EAAQ,GAAG,GAAG1D,MAAQi0d,EAAYvwd,GAAO,GAAGw5B,MAAMjX,OAASguc,EAAYvwd,GAAO,GAAGy5B,IAAIlX,OAC3MiX,EAAQx5B,EAAQ,EAChB0wd,EAAO/2d,KAAK6/B,GAEZ18B,EAAQmzd,gBAAa/4c,EACrBpa,EAAQ84J,cAAW1+I,EACnBpa,EAAUA,EAAQuvB,MAqBtB,IAhBAikc,EAAUvhc,OAAS,GAKfjyB,GAEFA,EAAQmzd,gBAAa/4c,EACrBpa,EAAQ84J,cAAW1+I,GAEnBw5c,EAAO/tc,MAKT3iB,EAAQ0wd,EAAO54d,OACRkI,KAAS,CACd,MAAM6B,EAAQ0ud,EAAY1ud,MAAM6ud,EAAO1wd,GAAQ0wd,EAAO1wd,EAAQ,IACxDw5B,EAAQ62b,EAAe1tc,MAC7Bmtc,EAAMn2d,KAAK,CAAC6/B,EAAOA,EAAQ33B,EAAM/J,OAAS,IAC1Ci3B,EAAOyvE,OAAOhlE,EAAO,EAAG33B,EAC1B,CAGA,IAFAiud,EAAM3ra,UACNnkD,GAAS,IACAA,EAAQ8vd,EAAMh4d,QACrB04d,EAAKC,EAASX,EAAM9vd,GAAO,IAAMywd,EAASX,EAAM9vd,GAAO,GACvDywd,GAAUX,EAAM9vd,GAAO,GAAK8vd,EAAM9vd,GAAO,GAAK,EAEhD,OAAOwwd,CACT,sEChMO,MAAMM,EAOX,WAAA3wb,CAAY47F,GAEVz9G,KAAKvL,KAAOgpH,EAAU,IAAIA,GAAW,GAErCz9G,KAAK3H,MAAQ,EACf,CAWA,GAAAyQ,CAAIpnB,GACF,GAAIA,EAAQ,GAAKA,GAASse,KAAKvL,KAAKjb,OAASwmB,KAAK3H,MAAM7e,OACtD,MAAM,IAAIuxD,WAAW,wBAA0BrpD,EAAQ,kCAAoCse,KAAKvL,KAAKjb,OAASwmB,KAAK3H,MAAM7e,QAAU,KAErI,OAAIkI,EAAQse,KAAKvL,KAAKjb,OAAewmB,KAAKvL,KAAK/S,GACxCse,KAAK3H,MAAM2H,KAAK3H,MAAM7e,OAASkI,EAAQse,KAAKvL,KAAKjb,OAAS,EACnE,CAMA,UAAIA,GACF,OAAOwmB,KAAKvL,KAAKjb,OAASwmB,KAAK3H,MAAM7e,MACvC,CASA,KAAAyrB,GAEE,OADAjF,KAAK22Y,UAAU,GACR32Y,KAAK3H,MAAMgM,KACpB,CAaA,KAAA9gB,CAAM23B,EAAOC,GAEX,MAAMyqB,EAAe,OAARzqB,QAAwBviB,IAARuiB,EAAoBvY,OAAO63R,kBAAoBt/Q,EAC5E,OAAIyqB,EAAO5lC,KAAKvL,KAAKjb,OACZwmB,KAAKvL,KAAKlR,MAAM23B,EAAO0qB,GAE5B1qB,EAAQlb,KAAKvL,KAAKjb,OACbwmB,KAAK3H,MAAM9U,MAAMyc,KAAK3H,MAAM7e,OAASosD,EAAO5lC,KAAKvL,KAAKjb,OAAQwmB,KAAK3H,MAAM7e,OAAS0hC,EAAQlb,KAAKvL,KAAKjb,QAAQqsD,UAE9G7lC,KAAKvL,KAAKlR,MAAM23B,GAAOnf,OAAOiE,KAAK3H,MAAM9U,MAAMyc,KAAK3H,MAAM7e,OAASosD,EAAO5lC,KAAKvL,KAAKjb,QAAQqsD,UACrG,CAsBA,MAAAq6C,CAAOhlE,EAAOu3b,EAAaj+U,GAEzB,MAAMpgI,EAAQq+c,GAAe,EAC7Bzyc,KAAK22Y,UAAUhnY,KAAK+7B,MAAMxwB,IAC1B,MAAMusN,EAAUznO,KAAK3H,MAAM6nF,OAAOlgF,KAAK3H,MAAM7e,OAAS4a,EAAOwO,OAAO63R,mBAEpE,OADIjmK,GAAOk+U,EAAY1yc,KAAKvL,KAAM+/H,GAC3BizG,EAAQ5hM,SACjB,CAUA,GAAAxhC,GAEE,OADArE,KAAK22Y,UAAU/zY,OAAO63R,mBACfz6R,KAAKvL,KAAK4P,KACnB,CAWA,IAAAhpB,CAAK0O,GACHiW,KAAK22Y,UAAU/zY,OAAO63R,mBACtBz6R,KAAKvL,KAAKpZ,KAAK0O,EACjB,CAWA,QAAA4od,CAASn+U,GACPx0H,KAAK22Y,UAAU/zY,OAAO63R,mBACtBi4K,EAAY1yc,KAAKvL,KAAM+/H,EACzB,CAWA,OAAAl8C,CAAQvuF,GACNiW,KAAK22Y,UAAU,GACf32Y,KAAK3H,MAAMhd,KAAK0O,EAClB,CAWA,WAAA6od,CAAYp+U,GACVx0H,KAAK22Y,UAAU,GACf+7D,EAAY1yc,KAAK3H,MAAOm8H,EAAM3uF,UAChC,CAcA,SAAA8wW,CAAUn8Z,GACR,KAAIA,IAAMwlB,KAAKvL,KAAKjb,QAAUgB,EAAIwlB,KAAKvL,KAAKjb,QAAgC,IAAtBwmB,KAAK3H,MAAM7e,QAAgBgB,EAAI,GAA0B,IAArBwlB,KAAKvL,KAAKjb,QACpG,GAAIgB,EAAIwlB,KAAKvL,KAAKjb,OAAQ,CAExB,MAAMiuP,EAAUznO,KAAKvL,KAAKyrF,OAAO1lG,EAAGooB,OAAO63R,mBAC3Ci4K,EAAY1yc,KAAK3H,MAAOovO,EAAQ5hM,UAClC,KAAO,CAEL,MAAM4hM,EAAUznO,KAAK3H,MAAM6nF,OAAOlgF,KAAKvL,KAAKjb,OAASwmB,KAAK3H,MAAM7e,OAASgB,EAAGooB,OAAO63R,mBACnFi4K,EAAY1yc,KAAKvL,KAAMgzO,EAAQ5hM,UACjC,CACF,EAeF,SAAS6sa,EAAY14Y,EAAM3hE,GAEzB,IAAIq4c,EAAa,EACjB,GAAIr4c,EAAM7e,OAAS,IACjBwgF,EAAK3+E,QAAQgd,QAEb,KAAOq4c,EAAar4c,EAAM7e,QACxBwgF,EAAK3+E,QAAQgd,EAAM9U,MAAMmtd,EAAYA,EAAa,MAClDA,GAAc,GAGpB,qXC7OO,MAAM5K,EAAgB,CAC3Blhd,KAAM,gBACN6qd,SAQF,SAA+BrnQ,EAAS6I,EAAIy+P,GAC1C,IAEImD,EAFA1wd,EAAO,EAGX,OAYA,SAAeiqB,GAGb,OAFAg8L,EAAQi7P,MAAM,iBAehB,SAAgBj3b,GAEd,OADAymc,EAASzmc,EACF0mc,EAAQ1mc,EACjB,CAhBSqvG,CAAOrvG,EAChB,EA2BA,SAAS0mc,EAAQ1mc,GACf,OAAIA,IAASymc,GACXzqQ,EAAQi7P,MAAM,yBACP0P,EAAS3mc,IAEdjqB,GAAQ,IAAe,OAATiqB,IAAiB,QAAmBA,KACpDg8L,EAAQ29P,KAAK,iBACN90P,EAAG7kM,IAELsjc,EAAItjc,EACb,CAYA,SAAS2mc,EAAS3mc,GAChB,OAAIA,IAASymc,GACXzqQ,EAAQwnQ,QAAQxjc,GAChBjqB,IACO4wd,IAET3qQ,EAAQ29P,KAAK,0BACN,QAAc35b,IAAQ,IAAArP,GAAaqrM,EAAS0qQ,EAAS,aAA/B,CAA6C1mc,GAAQ0mc,EAAQ1mc,GAC5F,CACF,GCpFO,MAAM4tD,EAAO,CAClBg5Y,aAAc,CACZvD,SAiHJ,SAAkCrnQ,EAAS6I,EAAIy+P,GAC7C,MAAM1gc,EAAOhP,KAEb,OADAgP,EAAKikc,eAAeC,gBAAat6c,EAC1BwvM,EAAQr1B,MAAM,KAGrB,SAAiB3mK,GAKf,OAJA4C,EAAKikc,eAAeE,kBAAoBnkc,EAAKikc,eAAeE,mBAAqBnkc,EAAKikc,eAAeG,kBAI9F,IAAAr2c,GAAaqrM,EAAS6I,EAAI,iBAAkBjiM,EAAKikc,eAAe9wd,KAAO,EAAvE,CAA0EiqB,EACnF,IAGA,SAAkBA,GAChB,GAAI4C,EAAKikc,eAAeE,qBAAsB,QAAc/mc,GAG1D,OAFA4C,EAAKikc,eAAeE,uBAAoBv6c,EACxCoW,EAAKikc,eAAeG,sBAAmBx6c,EAChCy6c,EAAiBjnc,GAI1B,OAFA4C,EAAKikc,eAAeE,uBAAoBv6c,EACxCoW,EAAKikc,eAAeG,sBAAmBx6c,EAChCwvM,EAAQ/lF,QAAQixV,EAAiBriQ,EAAIoiQ,EAArCjrQ,CAAuDh8L,EAChE,IAGA,SAASinc,EAAiBjnc,GAOxB,OALA4C,EAAKikc,eAAeC,YAAa,EAEjClkc,EAAKokS,eAAYx6S,GAGV,IAAAmE,GAAaqrM,EAASA,EAAQ/lF,QAAQroD,EAAMi3I,EAAIy+P,GAAM,aAAc1gc,EAAKuiD,OAAOu/Y,WAAWjqU,QAAQ0sU,KAAKt5d,SAAS,qBAAkB2e,EAAY,EAA/I,CAAkJwT,EAC3J,CACF,GAnJE25b,KA0KF,SAAyB39P,GACvBA,EAAQ29P,KAAK/lc,KAAKizc,eAAej1d,KACnC,EA3KE4G,KAAM,OACN6qd,SAuBF,SAA2BrnQ,EAAS6I,EAAIy+P,GACtC,MAAM1gc,EAAOhP,KACPogH,EAAOpxG,EAAKyB,OAAOzB,EAAKyB,OAAOj3B,OAAS,GAC9C,IAAIg6d,EAAcpzV,GAAyB,eAAjBA,EAAK,GAAGpiI,KAAwBoiI,EAAK,GAAG2oV,eAAe3oV,EAAK,IAAI,GAAM5mI,OAAS,EACrG2I,EAAO,EACX,OAGA,SAAeiqB,GACb,MAAMjc,EAAO6e,EAAKikc,eAAej1d,OAAkB,KAATouB,GAAwB,KAATA,GAAwB,KAATA,EAAc,gBAAkB,eACxG,GAAa,kBAATjc,GAA4B6e,EAAKikc,eAAeJ,QAAUzmc,IAAS4C,EAAKikc,eAAeJ,QAAS,QAAWzmc,GAAO,CAOpH,GANK4C,EAAKikc,eAAej1d,OACvBgxB,EAAKikc,eAAej1d,KAAOmS,EAC3Bi4M,EAAQi7P,MAAMlzc,EAAM,CAClBmwQ,YAAY,KAGH,kBAATnwQ,EAEF,OADAi4M,EAAQi7P,MAAM,kBACE,KAATj3b,GAAwB,KAATA,EAAcg8L,EAAQr1B,MAAM+yR,EAAe4J,EAAKvG,EAAlC/gQ,CAA4Ch8L,GAAQ+8b,EAAS/8b,GAEnG,IAAK4C,EAAKokS,WAAsB,KAAThnS,EAGrB,OAFAg8L,EAAQi7P,MAAM,kBACdj7P,EAAQi7P,MAAM,iBACPoQ,EAAOrnc,EAElB,CACA,OAAOsjc,EAAItjc,EACb,EAGA,SAASqnc,EAAOrnc,GACd,OAAI,QAAWA,MAAWjqB,EAAO,IAC/BimN,EAAQwnQ,QAAQxjc,GACTqnc,KAEHzkc,EAAKokS,WAAajxT,EAAO,KAAO6sB,EAAKikc,eAAeJ,OAASzmc,IAAS4C,EAAKikc,eAAeJ,OAAkB,KAATzmc,GAAwB,KAATA,IACtHg8L,EAAQ29P,KAAK,iBACNoD,EAAS/8b,IAEXsjc,EAAItjc,EACb,CAKA,SAAS+8b,EAAS/8b,GAKhB,OAJAg8L,EAAQi7P,MAAM,kBACdj7P,EAAQwnQ,QAAQxjc,GAChBg8L,EAAQ29P,KAAK,kBACb/2b,EAAKikc,eAAeJ,OAAS7jc,EAAKikc,eAAeJ,QAAUzmc,EACpDg8L,EAAQr1B,MAAM,IAErB/jK,EAAKokS,UAAYs8J,EAAMgE,EAAStrQ,EAAQ/lF,QAAQsxV,EAAmCC,EAAaC,GAClG,CAGA,SAASH,EAAQtnc,GAGf,OAFA4C,EAAKikc,eAAeG,kBAAmB,EACvCI,IACOI,EAAYxnc,EACrB,CAGA,SAASync,EAAYznc,GACnB,OAAI,QAAcA,IAChBg8L,EAAQi7P,MAAM,4BACdj7P,EAAQwnQ,QAAQxjc,GAChBg8L,EAAQ29P,KAAK,4BACN6N,GAEFlE,EAAItjc,EACb,CAGA,SAASwnc,EAAYxnc,GAEnB,OADA4C,EAAKikc,eAAe9wd,KAAOqxd,EAAcxkc,EAAK+5b,eAAe3gQ,EAAQ29P,KAAK,mBAAmB,GAAMvsd,OAC5Fy3N,EAAG7kM,EACZ,CACF,GAlGMunc,EAAoC,CACxC30V,SAAS,EACTywV,SA2KF,SAA0CrnQ,EAAS6I,EAAIy+P,GACrD,MAAM1gc,EAAOhP,KAIb,OAAO,IAAAjD,GAAaqrM,GAGpB,SAAqBh8L,GACnB,MAAMg0G,EAAOpxG,EAAKyB,OAAOzB,EAAKyB,OAAOj3B,OAAS,GAC9C,QAAQ,QAAc4yB,IAASg0G,GAAyB,6BAAjBA,EAAK,GAAGpiI,KAAsCizN,EAAG7kM,GAAQsjc,EAAItjc,EACtG,GAN0C,2BAA4B4C,EAAKuiD,OAAOu/Y,WAAWjqU,QAAQ0sU,KAAKt5d,SAAS,qBAAkB2e,EAAY,EAOnJ,GAnLM06c,EAAkB,CACtBt0V,SAAS,EACTywV,SA4IF,SAAwBrnQ,EAAS6I,EAAIy+P,GACnC,MAAM1gc,EAAOhP,KACb,OAAO,IAAAjD,GAAaqrM,GAGpB,SAAqBh8L,GACnB,MAAMg0G,EAAOpxG,EAAKyB,OAAOzB,EAAKyB,OAAOj3B,OAAS,GAC9C,OAAO4mI,GAAyB,mBAAjBA,EAAK,GAAGpiI,MAA6BoiI,EAAK,GAAG2oV,eAAe3oV,EAAK,IAAI,GAAM5mI,SAAWw1B,EAAKikc,eAAe9wd,KAAO8uN,EAAG7kM,GAAQsjc,EAAItjc,EACjJ,GAN0C,iBAAkB4C,EAAKikc,eAAe9wd,KAAO,EAOzF,GC3KO,MAAMyhd,EAAa,CACxBoP,aAAc,CACZvD,SAgFJ,SAAwCrnQ,EAAS6I,EAAIy+P,GACnD,MAAM1gc,EAAOhP,KACb,OAeA,SAAmBoM,GACjB,IAAI,QAAcA,GAGhB,OAAO,IAAArP,GAAaqrM,EAAS0rQ,EAAY,aAAc9kc,EAAKuiD,OAAOu/Y,WAAWjqU,QAAQ0sU,KAAKt5d,SAAS,qBAAkB2e,EAAY,EAA3H,CAA8HwT,GAEvI,OAAO0nc,EAAW1nc,EACpB,EAeA,SAAS0nc,EAAW1nc,GAClB,OAAOg8L,EAAQ/lF,QAAQuhV,EAAY3yP,EAAIy+P,EAAhCtnQ,CAAqCh8L,EAC9C,CACF,GAxHE25b,KA2HF,SAAc39P,GACZA,EAAQ29P,KAAK,aACf,EA5HEnhd,KAAM,aACN6qd,SAQF,SAAiCrnQ,EAAS6I,EAAIy+P,GAC5C,MAAM1gc,EAAOhP,KACb,OAYA,SAAeoM,GACb,GAAa,KAATA,EAAa,CACf,MAAM9D,EAAQ0G,EAAKikc,eAWnB,OAVK3qc,EAAMgN,OACT8yL,EAAQi7P,MAAM,aAAc,CAC1B/iM,YAAY,IAEdh4P,EAAMgN,MAAO,GAEf8yL,EAAQi7P,MAAM,oBACdj7P,EAAQi7P,MAAM,oBACdj7P,EAAQwnQ,QAAQxjc,GAChBg8L,EAAQ29P,KAAK,oBACN1qV,CACT,CACA,OAAOq0V,EAAItjc,EACb,EAYA,SAASivG,EAAMjvG,GACb,OAAI,QAAcA,IAChBg8L,EAAQi7P,MAAM,8BACdj7P,EAAQwnQ,QAAQxjc,GAChBg8L,EAAQ29P,KAAK,8BACb39P,EAAQ29P,KAAK,oBACN90P,IAET7I,EAAQ29P,KAAK,oBACN90P,EAAG7kM,GACZ,CACF,GCtCO,SAAS2nc,EAAmB3rQ,EAAS6I,EAAIy+P,EAAK1xd,EAAMg2d,EAAaC,EAAmBC,EAASC,EAAYx3c,GAC9G,MAAMskK,EAAQtkK,GAAOiG,OAAO63R,kBAC5B,IAAI25K,EAAU,EACd,OAcA,SAAehoc,GACb,GAAa,KAATA,EAMF,OALAg8L,EAAQi7P,MAAMrld,GACdoqN,EAAQi7P,MAAM2Q,GACd5rQ,EAAQi7P,MAAM4Q,GACd7rQ,EAAQwnQ,QAAQxjc,GAChBg8L,EAAQ29P,KAAKkO,GACNI,EAIT,GAAa,OAATjoc,GAA0B,KAATA,GAAwB,KAATA,IAAe,QAAaA,GAC9D,OAAOsjc,EAAItjc,GAQb,OANAg8L,EAAQi7P,MAAMrld,GACdoqN,EAAQi7P,MAAM6Q,GACd9rQ,EAAQi7P,MAAM8Q,GACd/rQ,EAAQi7P,MAAM,cAAe,CAC3B7sF,YAAa,WAERrrH,EAAI/+O,EACb,EAYA,SAASioc,EAAejoc,GACtB,OAAa,KAATA,GACFg8L,EAAQi7P,MAAM4Q,GACd7rQ,EAAQwnQ,QAAQxjc,GAChBg8L,EAAQ29P,KAAKkO,GACb7rQ,EAAQ29P,KAAKiO,GACb5rQ,EAAQ29P,KAAK/nd,GACNizN,IAET7I,EAAQi7P,MAAM8Q,GACd/rQ,EAAQi7P,MAAM,cAAe,CAC3B7sF,YAAa,WAER89F,EAASloc,GAClB,CAYA,SAASkoc,EAASloc,GAChB,OAAa,KAATA,GACFg8L,EAAQ29P,KAAK,eACb39P,EAAQ29P,KAAKoO,GACNE,EAAejoc,IAEX,OAATA,GAA0B,KAATA,IAAe,QAAmBA,GAC9Csjc,EAAItjc,IAEbg8L,EAAQwnQ,QAAQxjc,GACA,KAATA,EAAcmoc,EAAiBD,EACxC,CAYA,SAASC,EAAenoc,GACtB,OAAa,KAATA,GAAwB,KAATA,GAAwB,KAATA,GAChCg8L,EAAQwnQ,QAAQxjc,GACTkoc,GAEFA,EAASloc,EAClB,CAYA,SAAS++O,EAAI/+O,GACX,OAAKgoc,GAAqB,OAAThoc,GAA0B,KAATA,KAAe,QAA0BA,GAOvEgoc,EAAUnzS,GAAkB,KAAT70J,GACrBg8L,EAAQwnQ,QAAQxjc,GAChBgoc,IACOjpN,GAEI,KAAT/+O,GACFg8L,EAAQwnQ,QAAQxjc,GAChBgoc,IACOjpN,GAMI,OAAT/+O,GAA0B,KAATA,GAAwB,KAATA,IAAe,QAAaA,GACvDsjc,EAAItjc,IAEbg8L,EAAQwnQ,QAAQxjc,GACA,KAATA,EAAcooc,EAAYrpN,IAxB/B/iD,EAAQ29P,KAAK,eACb39P,EAAQ29P,KAAKoO,GACb/rQ,EAAQ29P,KAAKmO,GACb9rQ,EAAQ29P,KAAK/nd,GACNizN,EAAG7kM,GAqBd,CAYA,SAASooc,EAAUpoc,GACjB,OAAa,KAATA,GAAwB,KAATA,GAAwB,KAATA,GAChCg8L,EAAQwnQ,QAAQxjc,GACT++O,GAEFA,EAAI/+O,EACb,CACF,CCpKO,SAASqoc,EAAarsQ,EAAS6I,EAAIy+P,EAAK1xd,EAAM02d,EAAYP,GAC/D,MAAMnlc,EAAOhP,KACb,IAEI4G,EAFAzkB,EAAO,EAGX,OAYA,SAAeiqB,GAMb,OALAg8L,EAAQi7P,MAAMrld,GACdoqN,EAAQi7P,MAAMqR,GACdtsQ,EAAQwnQ,QAAQxjc,GAChBg8L,EAAQ29P,KAAK2O,GACbtsQ,EAAQi7P,MAAM8Q,GACPrB,CACT,EAYA,SAASA,EAAQ1mc,GACf,OAAIjqB,EAAO,KAAgB,OAATiqB,GAA0B,KAATA,GAAwB,KAATA,IAAgBxF,GAMzD,KAATwF,IAAgBjqB,GAAQ,2BAA4B6sB,EAAKuiD,OAAOu/Y,WACvDpB,EAAItjc,GAEA,KAATA,GACFg8L,EAAQ29P,KAAKoO,GACb/rQ,EAAQi7P,MAAMqR,GACdtsQ,EAAQwnQ,QAAQxjc,GAChBg8L,EAAQ29P,KAAK2O,GACbtsQ,EAAQ29P,KAAK/nd,GACNizN,IAIL,QAAmB7kM,IACrBg8L,EAAQi7P,MAAM,cACdj7P,EAAQwnQ,QAAQxjc,GAChBg8L,EAAQ29P,KAAK,cACN+M,IAET1qQ,EAAQi7P,MAAM,cAAe,CAC3B7sF,YAAa,WAERm+F,EAAYvoc,GACrB,CAYA,SAASuoc,EAAYvoc,GACnB,OAAa,OAATA,GAA0B,KAATA,GAAwB,KAATA,IAAe,QAAmBA,IAASjqB,IAAS,KACtFimN,EAAQ29P,KAAK,eACN+M,EAAQ1mc,KAEjBg8L,EAAQwnQ,QAAQxjc,GACXxF,IAAMA,IAAQ,QAAcwF,IACjB,KAATA,EAAcwoc,EAAcD,EACrC,CAYA,SAASC,EAAYxoc,GACnB,OAAa,KAATA,GAAwB,KAATA,GAAwB,KAATA,GAChCg8L,EAAQwnQ,QAAQxjc,GAChBjqB,IACOwyd,GAEFA,EAAYvoc,EACrB,CACF,CCzGO,SAASyoc,EAAazsQ,EAAS6I,EAAIy+P,EAAK1xd,EAAM02d,EAAYP,GAE/D,IAAItB,EACJ,OAYA,SAAezmc,GACb,GAAa,KAATA,GAAwB,KAATA,GAAwB,KAATA,EAMhC,OALAg8L,EAAQi7P,MAAMrld,GACdoqN,EAAQi7P,MAAMqR,GACdtsQ,EAAQwnQ,QAAQxjc,GAChBg8L,EAAQ29P,KAAK2O,GACb7B,EAAkB,KAATzmc,EAAc,GAAKA,EACrBwrN,EAET,OAAO83O,EAAItjc,EACb,EAcA,SAASwrN,EAAMxrN,GACb,OAAIA,IAASymc,GACXzqQ,EAAQi7P,MAAMqR,GACdtsQ,EAAQwnQ,QAAQxjc,GAChBg8L,EAAQ29P,KAAK2O,GACbtsQ,EAAQ29P,KAAK/nd,GACNizN,IAET7I,EAAQi7P,MAAM8Q,GACPrB,EAAQ1mc,GACjB,CAYA,SAAS0mc,EAAQ1mc,GACf,OAAIA,IAASymc,GACXzqQ,EAAQ29P,KAAKoO,GACNv8O,EAAMi7O,IAEF,OAATzmc,EACKsjc,EAAItjc,IAIT,QAAmBA,IAErBg8L,EAAQi7P,MAAM,cACdj7P,EAAQwnQ,QAAQxjc,GAChBg8L,EAAQ29P,KAAK,eACN,IAAAhpc,GAAaqrM,EAAS0qQ,EAAS,gBAExC1qQ,EAAQi7P,MAAM,cAAe,CAC3B7sF,YAAa,WAERi9F,EAAOrnc,GAChB,CAOA,SAASqnc,EAAOrnc,GACd,OAAIA,IAASymc,GAAmB,OAATzmc,IAAiB,QAAmBA,IACzDg8L,EAAQ29P,KAAK,eACN+M,EAAQ1mc,KAEjBg8L,EAAQwnQ,QAAQxjc,GACA,KAATA,EAAcupG,EAAS89V,EAChC,CAYA,SAAS99V,EAAOvpG,GACd,OAAIA,IAASymc,GAAmB,KAATzmc,GACrBg8L,EAAQwnQ,QAAQxjc,GACTqnc,GAEFA,EAAOrnc,EAChB,CACF,CCrIO,SAAS0oc,EAAkB1sQ,EAAS6I,GAEzC,IAAIrqM,EACJ,OAGA,SAASsU,EAAM9O,GACb,IAAI,QAAmBA,GAKrB,OAJAg8L,EAAQi7P,MAAM,cACdj7P,EAAQwnQ,QAAQxjc,GAChBg8L,EAAQ29P,KAAK,cACbn/b,GAAO,EACAsU,EAET,IAAI,QAAc9O,GAChB,OAAO,IAAArP,GAAaqrM,EAASltL,EAAOtU,EAAO,aAAe,aAAnD,CAAiEwF,GAE1E,OAAO6kM,EAAG7kM,EACZ,CACF,gBC1BO,MAAMy0D,EAAa,CACxBj8E,KAAM,aACN6qd,SAcF,SAA4BrnQ,EAAS6I,EAAIy+P,GACvC,MAAM1gc,EAAOhP,KAEb,IAAIikJ,EACJ,OAYA,SAAe73I,GAKb,OADAg8L,EAAQi7P,MAAM,cAchB,SAAgBj3b,GAGd,OAAOqoc,EAAat6d,KAAK60B,EAAMo5L,EAAS2sQ,EAExCrF,EAAK,kBAAmB,wBAAyB,wBAF1C+E,CAEmEroc,EAC5E,CAnBSqvG,CAAOrvG,EAChB,EA8BA,SAAS2oc,EAAW3oc,GAElB,OADA63I,GAAa,OAAoBj1I,EAAK+5b,eAAe/5b,EAAKyB,OAAOzB,EAAKyB,OAAOj3B,OAAS,GAAG,IAAI+J,MAAM,GAAI,IAC1F,KAAT6oB,GACFg8L,EAAQi7P,MAAM,oBACdj7P,EAAQwnQ,QAAQxjc,GAChBg8L,EAAQ29P,KAAK,oBACNiP,GAEFtF,EAAItjc,EACb,CAYA,SAAS4oc,EAAY5oc,GAEnB,OAAO,QAA0BA,GAAQ0oc,EAAkB1sQ,EAAS6sQ,EAA3BH,CAA8C1oc,GAAQ6oc,EAAkB7oc,EACnH,CAYA,SAAS6oc,EAAkB7oc,GACzB,OAAO2nc,EAAmB3rQ,EAAS8sQ,EAEnCxF,EAAK,wBAAyB,+BAAgC,qCAAsC,2BAA4B,8BAFzHqE,CAEwJ3nc,EACjK,CAYA,SAAS8oc,EAAiB9oc,GACxB,OAAOg8L,EAAQ/lF,QAAQ8yV,EAAa95V,EAAOA,EAApC+sF,CAA2Ch8L,EACpD,CAcA,SAASivG,EAAMjvG,GACb,OAAO,QAAcA,IAAQ,IAAArP,GAAaqrM,EAASgtQ,EAAiB,aAAvC,CAAqDhpc,GAAQgpc,EAAgBhpc,EAC5G,CAcA,SAASgpc,EAAgBhpc,GACvB,OAAa,OAATA,IAAiB,QAAmBA,IACtCg8L,EAAQ29P,KAAK,cAKb/2b,EAAKuiD,OAAO8jZ,QAAQh6d,KAAK4oK,GAKlBgtD,EAAG7kM,IAELsjc,EAAItjc,EACb,CACF,GAlKM+oc,EAAc,CAClBn2V,SAAS,EACTywV,SAuKF,SAA6BrnQ,EAAS6I,EAAIy+P,GACxC,OAcA,SAAqBtjc,GACnB,OAAO,QAA0BA,GAAQ0oc,EAAkB1sQ,EAASktQ,EAA3BR,CAAyC1oc,GAAQsjc,EAAItjc,EAChG,EAaA,SAASkpc,EAAalpc,GACpB,OAAOyoc,EAAazsQ,EAASmtQ,EAAY7F,EAAK,kBAAmB,wBAAyB,wBAAnFmF,CAA4Gzoc,EACrH,CAYA,SAASmpc,EAAWnpc,GAClB,OAAO,QAAcA,IAAQ,IAAArP,GAAaqrM,EAASotQ,EAA8B,aAApD,CAAkEppc,GAAQopc,EAA6Bppc,EACtI,CAYA,SAASopc,EAA6Bppc,GACpC,OAAgB,OAATA,IAAiB,QAAmBA,GAAQ6kM,EAAG7kM,GAAQsjc,EAAItjc,EACpE,CACF,GCjPO,MAAM83b,EAAe,CAC1Bt/c,KAAM,eACN6qd,SAcF,SAA8BrnQ,EAAS6I,EAAIy+P,GACzC,MAAM1gc,EAAOhP,KACb,OAgBA,SAAeoM,GAMb,OAHAg8L,EAAQi7P,MAAM,iBAGP,IAAAtmc,GAAaqrM,EAASqtQ,EAAa,aAAc,EAAjD,CAAwDrpc,EACjE,EAYA,SAASqpc,EAAYrpc,GACnB,MAAMg0G,EAAOpxG,EAAKyB,OAAOzB,EAAKyB,OAAOj3B,OAAS,GAC9C,OAAO4mI,GAAyB,eAAjBA,EAAK,GAAGpiI,MAAyBoiI,EAAK,GAAG2oV,eAAe3oV,EAAK,IAAI,GAAM5mI,QAAU,EAAIs5d,EAAQ1mc,GAAQsjc,EAAItjc,EAC1H,CAYA,SAAS0mc,EAAQ1mc,GACf,OAAa,OAATA,EACKivG,EAAMjvG,IAEX,QAAmBA,GACdg8L,EAAQ/lF,QAAQqzV,EAAc5C,EAASz3V,EAAvC+sF,CAA8Ch8L,IAEvDg8L,EAAQi7P,MAAM,iBACPoQ,EAAOrnc,GAChB,CAYA,SAASqnc,EAAOrnc,GACd,OAAa,OAATA,IAAiB,QAAmBA,IACtCg8L,EAAQ29P,KAAK,iBACN+M,EAAQ1mc,KAEjBg8L,EAAQwnQ,QAAQxjc,GACTqnc,EACT,CAGA,SAASp4V,EAAMjvG,GAKb,OAJAg8L,EAAQ29P,KAAK,gBAIN90P,EAAG7kM,EACZ,CACF,GApGMspc,EAAe,CACnB12V,SAAS,EACTywV,SAyGF,SAA8BrnQ,EAAS6I,EAAIy+P,GACzC,MAAM1gc,EAAOhP,KACb,OAAO01c,EAaP,SAASA,EAAatpc,GAGpB,OAAI4C,EAAKuiD,OAAOnvC,KAAKpT,EAAK/lB,MAAMgb,MACvByrc,EAAItjc,IAET,QAAmBA,IACrBg8L,EAAQi7P,MAAM,cACdj7P,EAAQwnQ,QAAQxjc,GAChBg8L,EAAQ29P,KAAK,cACN2P,IASF,IAAA34c,GAAaqrM,EAASqtQ,EAAa,aAAc,EAAjD,CAAwDrpc,EACjE,CAYA,SAASqpc,EAAYrpc,GACnB,MAAMg0G,EAAOpxG,EAAKyB,OAAOzB,EAAKyB,OAAOj3B,OAAS,GAC9C,OAAO4mI,GAAyB,eAAjBA,EAAK,GAAGpiI,MAAyBoiI,EAAK,GAAG2oV,eAAe3oV,EAAK,IAAI,GAAM5mI,QAAU,EAAIy3N,EAAG7kM,IAAQ,QAAmBA,GAAQspc,EAAatpc,GAAQsjc,EAAItjc,EACrK,CACF,kBCjKO,MAAMupc,EAAa,CACxB/wd,KAAM,aACNw6B,QAKF,SAA2B3O,EAAQ3R,GACjC,IAGIuc,EAEAp3B,EALA2xd,EAAanlc,EAAOj3B,OAAS,EAC7Bq8d,EAAe,EAOkB,eAAjCplc,EAAOolc,GAAc,GAAG73d,OAC1B63d,GAAgB,GAIdD,EAAa,EAAIC,GAA+C,eAA/Bplc,EAAOmlc,GAAY,GAAG53d,OACzD43d,GAAc,GAEmB,uBAA/Bnlc,EAAOmlc,GAAY,GAAG53d,OAAkC63d,IAAiBD,EAAa,GAAKA,EAAa,EAAIC,GAAmD,eAAnCplc,EAAOmlc,EAAa,GAAG,GAAG53d,QACxJ43d,GAAcC,EAAe,IAAMD,EAAa,EAAI,GAElDA,EAAaC,IACfx6b,EAAU,CACRr9B,KAAM,iBACNk9B,MAAOzK,EAAOolc,GAAc,GAAG36b,MAC/BC,IAAK1K,EAAOmlc,GAAY,GAAGz6b,KAE7Bl3B,EAAO,CACLjG,KAAM,YACNk9B,MAAOzK,EAAOolc,GAAc,GAAG36b,MAC/BC,IAAK1K,EAAOmlc,GAAY,GAAGz6b,IAC3Bq7V,YAAa,SAEf,OAAO/lW,EAAQolc,EAAcD,EAAaC,EAAe,EAAG,CAAC,CAAC,QAASx6b,EAASvc,GAAU,CAAC,QAAS7a,EAAM6a,GAAU,CAAC,OAAQ7a,EAAM6a,GAAU,CAAC,OAAQuc,EAASvc,MAEjK,OAAO2R,CACT,EAvCEg/b,SA8CF,SAA4BrnQ,EAAS6I,EAAIy+P,GACvC,IAAIvtd,EAAO,EACX,OAYA,SAAeiqB,GAGb,OADAg8L,EAAQi7P,MAAM,cAchB,SAAgBj3b,GAEd,OADAg8L,EAAQi7P,MAAM,sBACPyS,EAAa1pc,EACtB,CAhBSqvG,CAAOrvG,EAChB,EA2BA,SAAS0pc,EAAa1pc,GACpB,OAAa,KAATA,GAAejqB,IAAS,GAC1BimN,EAAQwnQ,QAAQxjc,GACT0pc,GAII,OAAT1pc,IAAiB,QAA0BA,IAC7Cg8L,EAAQ29P,KAAK,sBACN+M,EAAQ1mc,IAEVsjc,EAAItjc,EACb,CAYA,SAAS0mc,EAAQ1mc,GACf,OAAa,KAATA,GACFg8L,EAAQi7P,MAAM,sBACP0S,EAAgB3pc,IAEZ,OAATA,IAAiB,QAAmBA,IACtCg8L,EAAQ29P,KAAK,cAIN90P,EAAG7kM,KAER,QAAcA,IACT,IAAArP,GAAaqrM,EAAS0qQ,EAAS,aAA/B,CAA6C1mc,IAKtDg8L,EAAQi7P,MAAM,kBACPz5c,EAAKwiB,GACd,CAcA,SAAS2pc,EAAgB3pc,GACvB,OAAa,KAATA,GACFg8L,EAAQwnQ,QAAQxjc,GACT2pc,IAET3tQ,EAAQ29P,KAAK,sBACN+M,EAAQ1mc,GACjB,CAYA,SAASxiB,EAAKwiB,GACZ,OAAa,OAATA,GAA0B,KAATA,IAAe,QAA0BA,IAC5Dg8L,EAAQ29P,KAAK,kBACN+M,EAAQ1mc,KAEjBg8L,EAAQwnQ,QAAQxjc,GACTxiB,EACT,CACF,GCpLO,MAAMosd,EAAkB,CAC7Bpxd,KAAM,kBACNm/C,UAKF,SAAkCtzB,EAAQ3R,GAExC,IAEIuc,EAEAp3B,EAEA48E,EANAn/E,EAAQ+uB,EAAOj3B,OAUnB,KAAOkI,KACL,GAAyB,UAArB+uB,EAAO/uB,GAAO,GAAgB,CAChC,GAA8B,YAA1B+uB,EAAO/uB,GAAO,GAAG1D,KAAoB,CACvCq9B,EAAU35B,EACV,KACF,CAC8B,cAA1B+uB,EAAO/uB,GAAO,GAAG1D,OACnBiG,EAAOvC,EAEX,KAGgC,YAA1B+uB,EAAO/uB,GAAO,GAAG1D,MAEnByyB,EAAOyvE,OAAOx+F,EAAO,GAElBm/E,GAAwC,eAA1BpwD,EAAO/uB,GAAO,GAAG1D,OAClC6iF,EAAan/E,GAInB,MAAMu4E,EAAU,CACdj8E,KAAM,gBACNk9B,MAAO,IACFzK,EAAOxsB,GAAM,GAAGi3B,OAErBC,IAAK,IACA1K,EAAOA,EAAOj3B,OAAS,GAAG,GAAG2hC,MAKpC1K,EAAOxsB,GAAM,GAAGjG,KAAO,oBAInB6iF,GACFpwD,EAAOyvE,OAAOj8F,EAAM,EAAG,CAAC,QAASg2E,EAASn7D,IAC1C2R,EAAOyvE,OAAOrf,EAAa,EAAG,EAAG,CAAC,OAAQpwD,EAAO4K,GAAS,GAAIvc,IAC9D2R,EAAO4K,GAAS,GAAGF,IAAM,IACpB1K,EAAOowD,GAAY,GAAG1lD,MAG3B1K,EAAO4K,GAAS,GAAK4+C,EAKvB,OADAxpD,EAAOp1B,KAAK,CAAC,OAAQ4+E,EAASn7D,IACvB2R,CACT,EAjEEg/b,SAwEF,SAAiCrnQ,EAAS6I,EAAIy+P,GAC5C,MAAM1gc,EAAOhP,KAEb,IAAI6yc,EACJ,OAaA,SAAezmc,GACb,IAEIm5b,EAFA7jd,EAAQstB,EAAKyB,OAAOj3B,OAIxB,KAAOkI,KAGL,GAAmC,eAA/BstB,EAAKyB,OAAO/uB,GAAO,GAAG1D,MAAwD,eAA/BgxB,EAAKyB,OAAO/uB,GAAO,GAAG1D,MAAwD,YAA/BgxB,EAAKyB,OAAO/uB,GAAO,GAAG1D,KAAoB,CAC1Iund,EAA2C,cAA/Bv2b,EAAKyB,OAAO/uB,GAAO,GAAG1D,KAClC,KACF,CAKF,IAAKgxB,EAAKuiD,OAAOnvC,KAAKpT,EAAK/lB,MAAMgb,QAAU+K,EAAKokS,WAAamyJ,GAG3D,OAFAn9P,EAAQi7P,MAAM,qBACdwP,EAASzmc,EAiBb,SAAgBA,GAEd,OADAg8L,EAAQi7P,MAAM,6BACPoQ,EAAOrnc,EAChB,CAnBWqvG,CAAOrvG,GAEhB,OAAOsjc,EAAItjc,EACb,EA6BA,SAASqnc,EAAOrnc,GACd,OAAIA,IAASymc,GACXzqQ,EAAQwnQ,QAAQxjc,GACTqnc,IAETrrQ,EAAQ29P,KAAK,8BACN,QAAc35b,IAAQ,IAAArP,GAAaqrM,EAAS/sF,EAAO,aAA7B,CAA2CjvG,GAAQivG,EAAMjvG,GACxF,CAaA,SAASivG,EAAMjvG,GACb,OAAa,OAATA,IAAiB,QAAmBA,IACtCg8L,EAAQ29P,KAAK,qBACN90P,EAAG7kM,IAELsjc,EAAItjc,EACb,CACF,GCzKO,MAAM6pc,EAAiB,CAC5B,UACA,UACA,QACA,OACA,WACA,aACA,OACA,UACA,SACA,MACA,WACA,KACA,UACA,SACA,MACA,MACA,KACA,KACA,WACA,aACA,SACA,SACA,OACA,QACA,WACA,KACA,KACA,KACA,KACA,KACA,KACA,OACA,SACA,KACA,OACA,SACA,SACA,KACA,OACA,OACA,OACA,WACA,MACA,WACA,KACA,WACA,SACA,IACA,QACA,SACA,UACA,UACA,QACA,QACA,KACA,QACA,KACA,QACA,QACA,KACA,QACA,MAeWC,EAAe,CAAC,MAAO,SAAU,QAAS,YC5E1CrR,EAAW,CACtBsR,UAAU,EACVvxd,KAAM,WACNm/C,UAeF,SAA2BtzB,GACzB,IAAI/uB,EAAQ+uB,EAAOj3B,OACnB,KAAOkI,MACoB,UAArB+uB,EAAO/uB,GAAO,IAA4C,aAA1B+uB,EAAO/uB,GAAO,GAAG1D,QAInD0D,EAAQ,GAAmC,eAA9B+uB,EAAO/uB,EAAQ,GAAG,GAAG1D,OAEpCyyB,EAAO/uB,GAAO,GAAGw5B,MAAQzK,EAAO/uB,EAAQ,GAAG,GAAGw5B,MAE9CzK,EAAO/uB,EAAQ,GAAG,GAAGw5B,MAAQzK,EAAO/uB,EAAQ,GAAG,GAAGw5B,MAElDzK,EAAOyvE,OAAOx+F,EAAQ,EAAG,IAE3B,OAAO+uB,CACT,EA9BEg/b,SAqCF,SAA0BrnQ,EAAS6I,EAAIy+P,GACrC,MAAM1gc,EAAOhP,KAEb,IAAI6yc,EAEAuD,EAEArkX,EAEArwG,EAEA20d,EACJ,OAYA,SAAejqc,GAEb,OAaF,SAAgBA,GAId,OAHAg8L,EAAQi7P,MAAM,YACdj7P,EAAQi7P,MAAM,gBACdj7P,EAAQwnQ,QAAQxjc,GACTkJ,CACT,CAlBSmmG,CAAOrvG,EAChB,EAiCA,SAASkJ,EAAKlJ,GACZ,OAAa,KAATA,GACFg8L,EAAQwnQ,QAAQxjc,GACTkqc,GAEI,KAATlqc,GACFg8L,EAAQwnQ,QAAQxjc,GAChBgqc,GAAa,EACNG,GAEI,KAATnqc,GACFg8L,EAAQwnQ,QAAQxjc,GAChBymc,EAAS,EAMF7jc,EAAKokS,UAAYniG,EAAKulQ,IAI3B,QAAWpqc,IAEbg8L,EAAQwnQ,QAAQxjc,GAChB2lF,EAASlvF,OAAO+iB,aAAaxZ,GACtBuQ,GAEF+yb,EAAItjc,EACb,CAgBA,SAASkqc,EAAgBlqc,GACvB,OAAa,KAATA,GACFg8L,EAAQwnQ,QAAQxjc,GAChBymc,EAAS,EACF4D,GAEI,KAATrqc,GACFg8L,EAAQwnQ,QAAQxjc,GAChBymc,EAAS,EACTnxd,EAAQ,EACDg1d,IAIL,QAAWtqc,IACbg8L,EAAQwnQ,QAAQxjc,GAChBymc,EAAS,EAGF7jc,EAAKokS,UAAYniG,EAAKulQ,GAExB9G,EAAItjc,EACb,CAYA,SAASqqc,EAAkBrqc,GACzB,OAAa,KAATA,GACFg8L,EAAQwnQ,QAAQxjc,GAGT4C,EAAKokS,UAAYniG,EAAKulQ,GAExB9G,EAAItjc,EACb,CAYA,SAASsqc,EAAgBtqc,GACvB,MAAMhyB,EAAQ,SACd,OAAIgyB,IAAShyB,EAAMmB,WAAWmG,MAC5B0mN,EAAQwnQ,QAAQxjc,GACFhyB,IAAVsH,EAGKstB,EAAKokS,UAAYniG,EAAK+hQ,EAExB0D,GAEFhH,EAAItjc,EACb,CAYA,SAASmqc,EAAcnqc,GACrB,OAAI,QAAWA,IAEbg8L,EAAQwnQ,QAAQxjc,GAChB2lF,EAASlvF,OAAO+iB,aAAaxZ,GACtBuQ,GAEF+yb,EAAItjc,EACb,CAcA,SAASuQ,EAAQvQ,GACf,GAAa,OAATA,GAA0B,KAATA,GAAwB,KAATA,IAAe,QAA0BA,GAAO,CAClF,MAAMuqc,EAAiB,KAATvqc,EACRxnB,EAAOmtG,EAAOtrF,cACpB,OAAKkwc,GAAUP,IAAcF,EAAaj8d,SAAS2K,GAM/Cqxd,EAAeh8d,SAAS83G,EAAOtrF,gBACjCosc,EAAS,EACL8D,GACFvuQ,EAAQwnQ,QAAQxjc,GACTwqc,GAKF5nc,EAAKokS,UAAYniG,EAAG7kM,GAAQ4mc,EAAa5mc,KAElDymc,EAAS,EAEF7jc,EAAKokS,YAAcpkS,EAAKuiD,OAAOnvC,KAAKpT,EAAK/lB,MAAMgb,MAAQyrc,EAAItjc,GAAQgqc,EAAaS,EAAwBzqc,GAAQ0qc,EAA4B1qc,KAlBjJymc,EAAS,EAGF7jc,EAAKokS,UAAYniG,EAAG7kM,GAAQ4mc,EAAa5mc,GAgBpD,CAGA,OAAa,KAATA,IAAe,QAAkBA,IACnCg8L,EAAQwnQ,QAAQxjc,GAChB2lF,GAAUlvF,OAAO+iB,aAAaxZ,GACvBuQ,GAEF+yb,EAAItjc,EACb,CAYA,SAASwqc,EAAiBxqc,GACxB,OAAa,KAATA,GACFg8L,EAAQwnQ,QAAQxjc,GAGT4C,EAAKokS,UAAYniG,EAAK+hQ,GAExBtD,EAAItjc,EACb,CAYA,SAASyqc,EAAwBzqc,GAC/B,OAAI,QAAcA,IAChBg8L,EAAQwnQ,QAAQxjc,GACTyqc,GAEFE,EAAY3qc,EACrB,CAyBA,SAAS0qc,EAA4B1qc,GACnC,OAAa,KAATA,GACFg8L,EAAQwnQ,QAAQxjc,GACT2qc,GAII,KAAT3qc,GAAwB,KAATA,IAAe,QAAWA,IAC3Cg8L,EAAQwnQ,QAAQxjc,GACT4qc,IAEL,QAAc5qc,IAChBg8L,EAAQwnQ,QAAQxjc,GACT0qc,GAEFC,EAAY3qc,EACrB,CAgBA,SAAS4qc,EAAsB5qc,GAE7B,OAAa,KAATA,GAAwB,KAATA,GAAwB,KAATA,GAAwB,KAATA,IAAe,QAAkBA,IAChFg8L,EAAQwnQ,QAAQxjc,GACT4qc,GAEFC,EAA2B7qc,EACpC,CAeA,SAAS6qc,EAA2B7qc,GAClC,OAAa,KAATA,GACFg8L,EAAQwnQ,QAAQxjc,GACT8qc,IAEL,QAAc9qc,IAChBg8L,EAAQwnQ,QAAQxjc,GACT6qc,GAEFH,EAA4B1qc,EACrC,CAeA,SAAS8qc,EAA6B9qc,GACpC,OAAa,OAATA,GAA0B,KAATA,GAAwB,KAATA,GAAwB,KAATA,GAAwB,KAATA,EACzDsjc,EAAItjc,GAEA,KAATA,GAAwB,KAATA,GACjBg8L,EAAQwnQ,QAAQxjc,GAChBiqc,EAAUjqc,EACH+qc,IAEL,QAAc/qc,IAChBg8L,EAAQwnQ,QAAQxjc,GACT8qc,GAEFE,EAA+Bhrc,EACxC,CAcA,SAAS+qc,EAA6B/qc,GACpC,OAAIA,IAASiqc,GACXjuQ,EAAQwnQ,QAAQxjc,GAChBiqc,EAAU,KACHgB,GAEI,OAATjrc,IAAiB,QAAmBA,GAC/Bsjc,EAAItjc,IAEbg8L,EAAQwnQ,QAAQxjc,GACT+qc,EACT,CAYA,SAASC,EAA+Bhrc,GACtC,OAAa,OAATA,GAA0B,KAATA,GAAwB,KAATA,GAAwB,KAATA,GAAwB,KAATA,GAAwB,KAATA,GAAwB,KAATA,GAAwB,KAATA,IAAe,QAA0BA,GAC/I6qc,EAA2B7qc,IAEpCg8L,EAAQwnQ,QAAQxjc,GACTgrc,EACT,CAaA,SAASC,EAAkCjrc,GACzC,OAAa,KAATA,GAAwB,KAATA,IAAe,QAAcA,GACvC0qc,EAA4B1qc,GAE9Bsjc,EAAItjc,EACb,CAYA,SAAS2qc,EAAY3qc,GACnB,OAAa,KAATA,GACFg8L,EAAQwnQ,QAAQxjc,GACTkrc,GAEF5H,EAAItjc,EACb,CAYA,SAASkrc,EAAclrc,GACrB,OAAa,OAATA,IAAiB,QAAmBA,GAG/B4mc,EAAa5mc,IAElB,QAAcA,IAChBg8L,EAAQwnQ,QAAQxjc,GACTkrc,GAEF5H,EAAItjc,EACb,CAYA,SAAS4mc,EAAa5mc,GACpB,OAAa,KAATA,GAA0B,IAAXymc,GACjBzqQ,EAAQwnQ,QAAQxjc,GACTmrc,GAEI,KAATnrc,GAA0B,IAAXymc,GACjBzqQ,EAAQwnQ,QAAQxjc,GACTorc,GAEI,KAATprc,GAA0B,IAAXymc,GACjBzqQ,EAAQwnQ,QAAQxjc,GACTqrc,GAEI,KAATrrc,GAA0B,IAAXymc,GACjBzqQ,EAAQwnQ,QAAQxjc,GACToqc,GAEI,KAATpqc,GAA0B,IAAXymc,GACjBzqQ,EAAQwnQ,QAAQxjc,GACTsrc,KAEL,QAAmBtrc,IAAqB,IAAXymc,GAA2B,IAAXA,EAIpC,OAATzmc,IAAiB,QAAmBA,IACtCg8L,EAAQ29P,KAAK,gBACN4R,EAAkBvrc,KAE3Bg8L,EAAQwnQ,QAAQxjc,GACT4mc,IARL5qQ,EAAQ29P,KAAK,gBACN39P,EAAQr1B,MAAM6kS,EAAiBC,EAAmBF,EAAlDvvQ,CAAqEh8L,GAQhF,CAaA,SAASurc,EAAkBvrc,GACzB,OAAOg8L,EAAQr1B,MAAM+kS,EAA0BC,EAA0BF,EAAlEzvQ,CAAqFh8L,EAC9F,CAaA,SAAS2rc,EAAyB3rc,GAIhC,OAHAg8L,EAAQi7P,MAAM,cACdj7P,EAAQwnQ,QAAQxjc,GAChBg8L,EAAQ29P,KAAK,cACNiS,CACT,CAaA,SAASA,EAAmB5rc,GAC1B,OAAa,OAATA,IAAiB,QAAmBA,GAC/Burc,EAAkBvrc,IAE3Bg8L,EAAQi7P,MAAM,gBACP2P,EAAa5mc,GACtB,CAYA,SAASmrc,EAA0Bnrc,GACjC,OAAa,KAATA,GACFg8L,EAAQwnQ,QAAQxjc,GACToqc,GAEFxD,EAAa5mc,EACtB,CAYA,SAASorc,EAAuBprc,GAC9B,OAAa,KAATA,GACFg8L,EAAQwnQ,QAAQxjc,GAChB2lF,EAAS,GACFkmX,GAEFjF,EAAa5mc,EACtB,CAYA,SAAS6rc,EAAsB7rc,GAC7B,GAAa,KAATA,EAAa,CACf,MAAMxnB,EAAOmtG,EAAOtrF,cACpB,OAAIyvc,EAAaj8d,SAAS2K,IACxBwjN,EAAQwnQ,QAAQxjc,GACTqrc,GAEFzE,EAAa5mc,EACtB,CACA,OAAI,QAAWA,IAAS2lF,EAAOv4G,OAAS,GAEtC4uN,EAAQwnQ,QAAQxjc,GAChB2lF,GAAUlvF,OAAO+iB,aAAaxZ,GACvB6rc,GAEFjF,EAAa5mc,EACtB,CAYA,SAASsrc,EAAwBtrc,GAC/B,OAAa,KAATA,GACFg8L,EAAQwnQ,QAAQxjc,GACToqc,GAEFxD,EAAa5mc,EACtB,CAoBA,SAASoqc,EAA8Bpqc,GACrC,OAAa,KAATA,GACFg8L,EAAQwnQ,QAAQxjc,GACTqrc,GAII,KAATrrc,GAA0B,IAAXymc,GACjBzqQ,EAAQwnQ,QAAQxjc,GACToqc,GAEFxD,EAAa5mc,EACtB,CAYA,SAASqrc,EAAkBrrc,GACzB,OAAa,OAATA,IAAiB,QAAmBA,IACtCg8L,EAAQ29P,KAAK,gBACN8R,EAAkBzrc,KAE3Bg8L,EAAQwnQ,QAAQxjc,GACTqrc,EACT,CAYA,SAASI,EAAkBzrc,GAMzB,OALAg8L,EAAQ29P,KAAK,YAKN90P,EAAG7kM,EACZ,CACF,GA1wBMwrc,EAAkB,CACtB54V,SAAS,EACTywV,SA6zBF,SAAiCrnQ,EAAS6I,EAAIy+P,GAC5C,OAaA,SAAetjc,GAIb,OAHAg8L,EAAQi7P,MAAM,cACdj7P,EAAQwnQ,QAAQxjc,GAChBg8L,EAAQ29P,KAAK,cACN39P,EAAQ/lF,QAAQ,IAAW4uF,EAAIy+P,EACxC,CACF,GA/0BMoI,EAA2B,CAC/B94V,SAAS,EACTywV,SA2wBF,SAA0CrnQ,EAAS6I,EAAIy+P,GACrD,MAAM1gc,EAAOhP,KACb,OAaA,SAAeoM,GACb,IAAI,QAAmBA,GAIrB,OAHAg8L,EAAQi7P,MAAM,cACdj7P,EAAQwnQ,QAAQxjc,GAChBg8L,EAAQ29P,KAAK,cACN1qV,EAET,OAAOq0V,EAAItjc,EACb,EAaA,SAASivG,EAAMjvG,GACb,OAAO4C,EAAKuiD,OAAOnvC,KAAKpT,EAAK/lB,MAAMgb,MAAQyrc,EAAItjc,GAAQ6kM,EAAG7kM,EAC5D,CACF,GCn0BA,MAAM8rc,EAAsB,CAC1Bl5V,SAAS,EACTywV,SAiaF,SAAqCrnQ,EAAS6I,EAAIy+P,GAChD,MAAM1gc,EAAOhP,KACb,OAOA,SAAeoM,GACb,GAAa,OAATA,EACF,OAAOsjc,EAAItjc,GAKb,OAHAg8L,EAAQi7P,MAAM,cACdj7P,EAAQwnQ,QAAQxjc,GAChBg8L,EAAQ29P,KAAK,cACNoS,CACT,EAOA,SAASA,EAAU/rc,GACjB,OAAO4C,EAAKuiD,OAAOnvC,KAAKpT,EAAK/lB,MAAMgb,MAAQyrc,EAAItjc,GAAQ6kM,EAAG7kM,EAC5D,CACF,GAxba03b,EAAa,CACxBqS,UAAU,EACVvxd,KAAM,aACN6qd,SAQF,SAA4BrnQ,EAAS6I,EAAIy+P,GACvC,MAAM1gc,EAAOhP,KAEPo4c,EAAa,CACjBp5V,SAAS,EACTywV,SAiSF,SAA4BrnQ,EAAS6I,EAAIy+P,GACvC,IAAIvtd,EAAO,EACX,OAAOk2d,EAOP,SAASA,EAAYjsc,GAInB,OAHAg8L,EAAQi7P,MAAM,cACdj7P,EAAQwnQ,QAAQxjc,GAChBg8L,EAAQ29P,KAAK,cACN7qb,CACT,CAcA,SAASA,EAAM9O,GAKb,OADAg8L,EAAQi7P,MAAM,oBACP,QAAcj3b,IAAQ,IAAArP,GAAaqrM,EAASkwQ,EAAqB,aAActpc,EAAKuiD,OAAOu/Y,WAAWjqU,QAAQ0sU,KAAKt5d,SAAS,qBAAkB2e,EAAY,EAApI,CAAuIwT,GAAQksc,EAAoBlsc,EAClM,CAcA,SAASksc,EAAoBlsc,GAC3B,OAAIA,IAASymc,GACXzqQ,EAAQi7P,MAAM,2BACPkV,EAAcnsc,IAEhBsjc,EAAItjc,EACb,CAcA,SAASmsc,EAAcnsc,GACrB,OAAIA,IAASymc,GACX1wd,IACAimN,EAAQwnQ,QAAQxjc,GACTmsc,GAELp2d,GAAQq2d,GACVpwQ,EAAQ29P,KAAK,4BACN,QAAc35b,IAAQ,IAAArP,GAAaqrM,EAASqwQ,EAAoB,aAA1C,CAAwDrsc,GAAQqsc,EAAmBrsc,IAE3Gsjc,EAAItjc,EACb,CAcA,SAASqsc,EAAmBrsc,GAC1B,OAAa,OAATA,IAAiB,QAAmBA,IACtCg8L,EAAQ29P,KAAK,mBACN90P,EAAG7kM,IAELsjc,EAAItjc,EACb,CACF,GAnYA,IAGIymc,EAHA6F,EAAgB,EAChBF,EAAW,EAGf,OAcA,SAAepsc,GAEb,OAeF,SAA4BA,GAC1B,MAAMg0G,EAAOpxG,EAAKyB,OAAOzB,EAAKyB,OAAOj3B,OAAS,GAM9C,OALAk/d,EAAgBt4V,GAAyB,eAAjBA,EAAK,GAAGpiI,KAAwBoiI,EAAK,GAAG2oV,eAAe3oV,EAAK,IAAI,GAAM5mI,OAAS,EACvGq5d,EAASzmc,EACTg8L,EAAQi7P,MAAM,cACdj7P,EAAQi7P,MAAM,mBACdj7P,EAAQi7P,MAAM,2BACPyS,EAAa1pc,EACtB,CAvBSusc,CAAmBvsc,EAC5B,EAoCA,SAAS0pc,EAAa1pc,GACpB,OAAIA,IAASymc,GACX2F,IACApwQ,EAAQwnQ,QAAQxjc,GACT0pc,GAEL0C,EAAW,EACN9I,EAAItjc,IAEbg8L,EAAQ29P,KAAK,4BACN,QAAc35b,IAAQ,IAAArP,GAAaqrM,EAASwwQ,EAAY,aAAlC,CAAgDxsc,GAAQwsc,EAAWxsc,GAClG,CAcA,SAASwsc,EAAWxsc,GAClB,OAAa,OAATA,IAAiB,QAAmBA,IACtCg8L,EAAQ29P,KAAK,mBACN/2b,EAAKokS,UAAYniG,EAAG7kM,GAAQg8L,EAAQr1B,MAAMmlS,EAAqBW,EAAgBx9V,EAAnD+sF,CAA0Dh8L,KAE/Fg8L,EAAQi7P,MAAM,uBACdj7P,EAAQi7P,MAAM,cAAe,CAC3B7sF,YAAa,WAER5kW,EAAKxF,GACd,CAcA,SAASwF,EAAKxF,GACZ,OAAa,OAATA,IAAiB,QAAmBA,IACtCg8L,EAAQ29P,KAAK,eACb39P,EAAQ29P,KAAK,uBACN6S,EAAWxsc,KAEhB,QAAcA,IAChBg8L,EAAQ29P,KAAK,eACb39P,EAAQ29P,KAAK,wBACN,IAAAhpc,GAAaqrM,EAAS0wQ,EAAY,aAAlC,CAAgD1sc,IAE5C,KAATA,GAAeA,IAASymc,EACnBnD,EAAItjc,IAEbg8L,EAAQwnQ,QAAQxjc,GACTwF,EACT,CAcA,SAASknc,EAAW1sc,GAClB,OAAa,OAATA,IAAiB,QAAmBA,GAC/Bwsc,EAAWxsc,IAEpBg8L,EAAQi7P,MAAM,uBACdj7P,EAAQi7P,MAAM,cAAe,CAC3B7sF,YAAa,WAERv/U,EAAK7qB,GACd,CAcA,SAAS6qB,EAAK7qB,GACZ,OAAa,OAATA,IAAiB,QAAmBA,IACtCg8L,EAAQ29P,KAAK,eACb39P,EAAQ29P,KAAK,uBACN6S,EAAWxsc,IAEP,KAATA,GAAeA,IAASymc,EACnBnD,EAAItjc,IAEbg8L,EAAQwnQ,QAAQxjc,GACT6qB,EACT,CAeA,SAAS4hb,EAAezsc,GACtB,OAAOg8L,EAAQ/lF,QAAQ+1V,EAAY/8V,EAAO09V,EAAnC3wQ,CAAkDh8L,EAC3D,CAcA,SAAS2sc,EAAc3sc,GAIrB,OAHAg8L,EAAQi7P,MAAM,cACdj7P,EAAQwnQ,QAAQxjc,GAChBg8L,EAAQ29P,KAAK,cACN8P,CACT,CAcA,SAASA,EAAazpc,GACpB,OAAOssc,EAAgB,IAAK,QAActsc,IAAQ,IAAArP,GAAaqrM,EAAS4wQ,EAAoB,aAAcN,EAAgB,EAAxE,CAA2Etsc,GAAQ4sc,EAAmB5sc,EAC1J,CAcA,SAAS4sc,EAAmB5sc,GAC1B,OAAa,OAATA,IAAiB,QAAmBA,GAC/Bg8L,EAAQr1B,MAAMmlS,EAAqBW,EAAgBx9V,EAAnD+sF,CAA0Dh8L,IAEnEg8L,EAAQi7P,MAAM,iBACP4V,EAAa7sc,GACtB,CAcA,SAAS6sc,EAAa7sc,GACpB,OAAa,OAATA,IAAiB,QAAmBA,IACtCg8L,EAAQ29P,KAAK,iBACNiT,EAAmB5sc,KAE5Bg8L,EAAQwnQ,QAAQxjc,GACT6sc,EACT,CAcA,SAAS59V,EAAMjvG,GAEb,OADAg8L,EAAQ29P,KAAK,cACN90P,EAAG7kM,EACZ,CA4GF,kBC5ZO,MAAM88P,EAAqB,CAChCtkR,KAAM,qBACN6qd,SAQF,SAAoCrnQ,EAAS6I,EAAIy+P,GAC/C,MAAM1gc,EAAOhP,KACb,IAEIrD,EAEAyC,EAJAjd,EAAO,EAKX,OAgBA,SAAeiqB,GAKb,OAJAg8L,EAAQi7P,MAAM,sBACdj7P,EAAQi7P,MAAM,4BACdj7P,EAAQwnQ,QAAQxjc,GAChBg8L,EAAQ29P,KAAK,4BACNzwb,CACT,EAiBA,SAASA,EAAKlJ,GACZ,OAAa,KAATA,GACFg8L,EAAQi7P,MAAM,mCACdj7P,EAAQwnQ,QAAQxjc,GAChBg8L,EAAQ29P,KAAK,mCACNllZ,IAETunJ,EAAQi7P,MAAM,2BACd1mc,EAAM,GACNyC,EAAO,KACAhlB,EAAMgyB,GACf,CAcA,SAASy0C,EAAQz0C,GACf,OAAa,KAATA,GAAwB,MAATA,GACjBg8L,EAAQi7P,MAAM,uCACdj7P,EAAQwnQ,QAAQxjc,GAChBg8L,EAAQ29P,KAAK,uCACb39P,EAAQi7P,MAAM,2BACd1mc,EAAM,EACNyC,EAAO,KACAhlB,IAETguN,EAAQi7P,MAAM,2BACd1mc,EAAM,EACNyC,EAAO,KACAhlB,EAAMgyB,GACf,CAmBA,SAAShyB,EAAMgyB,GACb,GAAa,KAATA,GAAejqB,EAAM,CACvB,MAAMmmC,EAAQ8/K,EAAQ29P,KAAK,2BAC3B,OAAI3mc,IAAS,OAAsB,OAA8B4P,EAAK+5b,eAAezgb,KAMrF8/K,EAAQi7P,MAAM,4BACdj7P,EAAQwnQ,QAAQxjc,GAChBg8L,EAAQ29P,KAAK,4BACb39P,EAAQ29P,KAAK,sBACN90P,GATEy+P,EAAItjc,EAUf,CACA,OAAIhN,EAAKgN,IAASjqB,IAASwa,GACzByrM,EAAQwnQ,QAAQxjc,GACThyB,GAEFs1d,EAAItjc,EACb,CACF,GCzIO,MAAMy3b,EAAkB,CAC7Bj/c,KAAM,kBACN6qd,SAQF,SAAiCrnQ,EAAS6I,EAAIy+P,GAC5C,OAYA,SAAetjc,GAKb,OAJAg8L,EAAQi7P,MAAM,mBACdj7P,EAAQi7P,MAAM,gBACdj7P,EAAQwnQ,QAAQxjc,GAChBg8L,EAAQ29P,KAAK,gBACN0N,CACT,EAYA,SAASA,EAAOrnc,GAEd,OAAI,QAAiBA,IACnBg8L,EAAQi7P,MAAM,wBACdj7P,EAAQwnQ,QAAQxjc,GAChBg8L,EAAQ29P,KAAK,wBACb39P,EAAQ29P,KAAK,mBACN90P,GAEFy+P,EAAItjc,EACb,CACF,GCnDO,MAAM07b,EAAa,CACxBljd,KAAM,aACN6qd,SAQF,SAA4BrnQ,EAAS6I,GACnC,OAGA,SAAe7kM,GAIb,OAHAg8L,EAAQi7P,MAAM,cACdj7P,EAAQwnQ,QAAQxjc,GAChBg8L,EAAQ29P,KAAK,eACN,IAAAhpc,GAAaqrM,EAAS6I,EAAI,aACnC,CACF,kBCXO,MAAMioQ,EAAW,CACtBt0d,KAAM,WACNwsd,WAmBF,SAA4B3gc,GAC1B,IAAI/uB,GAAS,EAEb,MAAMy3d,EAAY,GAClB,OAASz3d,EAAQ+uB,EAAOj3B,QAAQ,CAC9B,MAAM8uC,EAAQ7X,EAAO/uB,GAAO,GAE5B,GADAy3d,EAAU99d,KAAKo1B,EAAO/uB,IACH,eAAf4mC,EAAMtqC,MAAwC,cAAfsqC,EAAMtqC,MAAuC,aAAfsqC,EAAMtqC,KAAqB,CAE1F,MAAM8vC,EAAwB,eAAfxF,EAAMtqC,KAAwB,EAAI,EACjDsqC,EAAMtqC,KAAO,OACb0D,GAASosC,CACX,CACF,CAGIrd,EAAOj3B,SAAW2/d,EAAU3/d,SAC9B,OAAOi3B,EAAQ,EAAGA,EAAOj3B,OAAQ2/d,GAEnC,OAAO1oc,CACT,EAtCEszB,UAyCF,SAA2BtzB,EAAQ3R,GACjC,IAGIwpB,EAEAhT,EAEArd,EAEA88N,EATArzO,EAAQ+uB,EAAOj3B,OACfs0C,EAAS,EAWb,KAAOpsC,KAEL,GADA4mC,EAAQ7X,EAAO/uB,GAAO,GAClB4zB,EAAM,CAER,GAAmB,SAAfgT,EAAMtqC,MAAkC,cAAfsqC,EAAMtqC,MAAwBsqC,EAAM8wb,UAC/D,MAKuB,UAArB3oc,EAAO/uB,GAAO,IAAiC,cAAf4mC,EAAMtqC,OACxCsqC,EAAM8wb,WAAY,EAEtB,MAAO,GAAInhd,GACT,GAAyB,UAArBwY,EAAO/uB,GAAO,KAAkC,eAAf4mC,EAAMtqC,MAAwC,cAAfsqC,EAAMtqC,QAA0BsqC,EAAM+wb,YACxG/jc,EAAO5zB,EACY,cAAf4mC,EAAMtqC,MAAsB,CAC9B8vC,EAAS,EACT,KACF,MAEsB,aAAfxF,EAAMtqC,OACfia,EAAQvW,GAGZ,MAAM8mJ,EAAQ,CACZxqJ,KAA+B,cAAzByyB,EAAO6E,GAAM,GAAGt3B,KAAuB,OAAS,QACtDk9B,MAAO,IACFzK,EAAO6E,GAAM,GAAG4F,OAErBC,IAAK,IACA1K,EAAOA,EAAOj3B,OAAS,GAAG,GAAG2hC,MAG9Bp5B,EAAQ,CACZ/D,KAAM,QACNk9B,MAAO,IACFzK,EAAO6E,GAAM,GAAG4F,OAErBC,IAAK,IACA1K,EAAOxY,GAAO,GAAGkjB,MAGlBl3B,EAAO,CACXjG,KAAM,YACNk9B,MAAO,IACFzK,EAAO6E,EAAOwY,EAAS,GAAG,GAAG3S,KAElCA,IAAK,IACA1K,EAAOxY,EAAQ,GAAG,GAAGijB,QAyB5B,OAtBA65M,EAAQ,CAAC,CAAC,QAASvsF,EAAO1pI,GAAU,CAAC,QAAS/c,EAAO+c,IAGrDi2N,GAAQ,OAAKA,EAAOtkN,EAAOltB,MAAM+xB,EAAO,EAAGA,EAAOwY,EAAS,IAG3DinM,GAAQ,OAAKA,EAAO,CAAC,CAAC,QAAS9wO,EAAM6a,KAKrCi2N,GAAQ,OAAKA,GAAO,OAAWj2N,EAAQyyD,OAAOu/Y,WAAWwI,WAAW/F,KAAM9ic,EAAOltB,MAAM+xB,EAAOwY,EAAS,EAAG71B,EAAQ,GAAI6G,IAGtHi2N,GAAQ,OAAKA,EAAO,CAAC,CAAC,OAAQ9wO,EAAM6a,GAAU2R,EAAOxY,EAAQ,GAAIwY,EAAOxY,EAAQ,GAAI,CAAC,OAAQlW,EAAO+c,KAGpGi2N,GAAQ,OAAKA,EAAOtkN,EAAOltB,MAAM0U,EAAQ,IAGzC88N,GAAQ,OAAKA,EAAO,CAAC,CAAC,OAAQvsF,EAAO1pI,MACrC,OAAO2R,EAAQ6E,EAAM7E,EAAOj3B,OAAQu7O,GAC7BtkN,CACT,EAhIEg/b,SAuIF,SAA0BrnQ,EAAS6I,EAAIy+P,GACrC,MAAM1gc,EAAOhP,KACb,IAEIu5c,EAEAlE,EAJA3zd,EAAQstB,EAAKyB,OAAOj3B,OAOxB,KAAOkI,KACL,IAAoC,eAA/BstB,EAAKyB,OAAO/uB,GAAO,GAAG1D,MAAwD,cAA/BgxB,EAAKyB,OAAO/uB,GAAO,GAAG1D,QAA0BgxB,EAAKyB,OAAO/uB,GAAO,GAAG23d,UAAW,CACnIE,EAAavqc,EAAKyB,OAAO/uB,GAAO,GAChC,KACF,CAEF,OAiBA,SAAe0qB,GAEb,IAAKmtc,EACH,OAAO7J,EAAItjc,GAYb,GAAImtc,EAAWH,UACb,OAAOI,EAAYptc,GAWrB,OATAipc,EAAUrmc,EAAKuiD,OAAO8jZ,QAAQp7d,UAAS,OAAoB+0B,EAAK+5b,eAAe,CAC7E7tb,MAAOq+b,EAAWp+b,IAClBA,IAAKnM,EAAK/lB,UAEZm/M,EAAQi7P,MAAM,YACdj7P,EAAQi7P,MAAM,eACdj7P,EAAQwnQ,QAAQxjc,GAChBg8L,EAAQ29P,KAAK,eACb39P,EAAQ29P,KAAK,YACN1qV,CACT,EAkBA,SAASA,EAAMjvG,GAKb,OAAa,KAATA,EACKg8L,EAAQ/lF,QAAQo3V,EAAmBC,EAAYrE,EAAUqE,EAAaF,EAAtEpxQ,CAAmFh8L,GAI/E,KAATA,EACKg8L,EAAQ/lF,QAAQs3V,EAAwBD,EAAYrE,EAAUuE,EAAmBJ,EAAjFpxQ,CAA8Fh8L,GAIhGipc,EAAUqE,EAAWttc,GAAQotc,EAAYptc,EAClD,CAgBA,SAASwtc,EAAiBxtc,GACxB,OAAOg8L,EAAQ/lF,QAAQw3V,EAA6BH,EAAYF,EAAzDpxQ,CAAsEh8L,EAC/E,CAkBA,SAASstc,EAAWttc,GAElB,OAAO6kM,EAAG7kM,EACZ,CAkBA,SAASotc,EAAYptc,GAEnB,OADAmtc,EAAWF,WAAY,EAChB3J,EAAItjc,EACb,CACF,GA9RMqtc,EAAoB,CACxBhK,SAoSF,SAA0BrnQ,EAAS6I,EAAIy+P,GACrC,OAYA,SAAuBtjc,GAKrB,OAJAg8L,EAAQi7P,MAAM,YACdj7P,EAAQi7P,MAAM,kBACdj7P,EAAQwnQ,QAAQxjc,GAChBg8L,EAAQ29P,KAAK,kBACN+T,CACT,EAYA,SAASA,EAAe1tc,GACtB,OAAO,QAA0BA,GAAQ0oc,EAAkB1sQ,EAAS2xQ,EAA3BjF,CAAyC1oc,GAAQ2tc,EAAa3tc,EACzG,CAYA,SAAS2tc,EAAa3tc,GACpB,OAAa,KAATA,EACK4tc,EAAY5tc,GAEd2nc,EAAmB3rQ,EAAS6xQ,EAA0BC,EAA4B,sBAAuB,6BAA8B,mCAAoC,yBAA0B,4BAA6B,GAAlOnG,CAAsO3nc,EAC/O,CAYA,SAAS6tc,EAAyB7tc,GAChC,OAAO,QAA0BA,GAAQ0oc,EAAkB1sQ,EAAS+xQ,EAA3BrF,CAA4C1oc,GAAQ4tc,EAAY5tc,EAC3G,CAYA,SAAS8tc,EAA2B9tc,GAClC,OAAOsjc,EAAItjc,EACb,CAYA,SAAS+tc,EAAgB/tc,GACvB,OAAa,KAATA,GAAwB,KAATA,GAAwB,KAATA,EACzByoc,EAAazsQ,EAASgyQ,EAAoB1K,EAAK,gBAAiB,sBAAuB,sBAAvFmF,CAA8Gzoc,GAEhH4tc,EAAY5tc,EACrB,CAYA,SAASguc,EAAmBhuc,GAC1B,OAAO,QAA0BA,GAAQ0oc,EAAkB1sQ,EAAS4xQ,EAA3BlF,CAAwC1oc,GAAQ4tc,EAAY5tc,EACvG,CAYA,SAAS4tc,EAAY5tc,GACnB,OAAa,KAATA,GACFg8L,EAAQi7P,MAAM,kBACdj7P,EAAQwnQ,QAAQxjc,GAChBg8L,EAAQ29P,KAAK,kBACb39P,EAAQ29P,KAAK,YACN90P,GAEFy+P,EAAItjc,EACb,CACF,GApaMutc,EAAyB,CAC7BlK,SA0aF,SAA+BrnQ,EAAS6I,EAAIy+P,GAC1C,MAAM1gc,EAAOhP,KACb,OAYA,SAAuBoM,GACrB,OAAOqoc,EAAat6d,KAAK60B,EAAMo5L,EAASiyQ,EAAoBC,EAAsB,YAAa,kBAAmB,kBAA3G7F,CAA8Hroc,EACvI,EAYA,SAASiuc,EAAmBjuc,GAC1B,OAAO4C,EAAKuiD,OAAO8jZ,QAAQp7d,UAAS,OAAoB+0B,EAAK+5b,eAAe/5b,EAAKyB,OAAOzB,EAAKyB,OAAOj3B,OAAS,GAAG,IAAI+J,MAAM,GAAI,KAAO0tN,EAAG7kM,GAAQsjc,EAAItjc,EACtJ,CAYA,SAASkuc,EAAqBluc,GAC5B,OAAOsjc,EAAItjc,EACb,CACF,GApdMytc,EAA8B,CAClCpK,SA0dF,SAAoCrnQ,EAAS6I,EAAIy+P,GAC/C,OAcA,SAAiCtjc,GAO/B,OAJAg8L,EAAQi7P,MAAM,aACdj7P,EAAQi7P,MAAM,mBACdj7P,EAAQwnQ,QAAQxjc,GAChBg8L,EAAQ29P,KAAK,mBACNwU,CACT,EAcA,SAASA,EAAuBnuc,GAC9B,OAAa,KAATA,GACFg8L,EAAQi7P,MAAM,mBACdj7P,EAAQwnQ,QAAQxjc,GAChBg8L,EAAQ29P,KAAK,mBACb39P,EAAQ29P,KAAK,aACN90P,GAEFy+P,EAAItjc,EACb,CACF,GCniBO,MAAMouc,EAAkB,CAC7B51d,KAAM,kBACNwsd,WAAY8H,EAAS9H,WACrB3B,SAQF,SAAiCrnQ,EAAS6I,EAAIy+P,GAC5C,MAAM1gc,EAAOhP,KACb,OAYA,SAAeoM,GAKb,OAJAg8L,EAAQi7P,MAAM,cACdj7P,EAAQi7P,MAAM,oBACdj7P,EAAQwnQ,QAAQxjc,GAChBg8L,EAAQ29P,KAAK,oBACNzwb,CACT,EAYA,SAASA,EAAKlJ,GACZ,OAAa,KAATA,GACFg8L,EAAQi7P,MAAM,eACdj7P,EAAQwnQ,QAAQxjc,GAChBg8L,EAAQ29P,KAAK,eACb39P,EAAQ29P,KAAK,cACN1qV,GAEFq0V,EAAItjc,EACb,CA6BA,SAASivG,EAAMjvG,GAMb,OAAgB,KAATA,GAAe,2BAA4B4C,EAAKuiD,OAAOu/Y,WAAapB,EAAItjc,GAAQ6kM,EAAG7kM,EAC5F,CACF,GClFO,SAASquc,EAAkBruc,GAChC,OAAa,OAATA,IAAiB,QAA0BA,KAAS,QAAkBA,GACjE,GAEL,QAAmBA,GACd,OADT,CAGF,CCRO,MAAMsuc,EAAY,CACvB91d,KAAM,YACNwsd,WAUF,SAA6B3gc,EAAQ3R,GACnC,IAEIwW,EAEAkzH,EAEAvkJ,EAEA02d,EAEAC,EAEA5gB,EAEA6gB,EAEA/sb,EAhBApsC,GAAS,EAsBb,OAASA,EAAQ+uB,EAAOj3B,QAEtB,GAAyB,UAArBi3B,EAAO/uB,GAAO,IAA4C,sBAA1B+uB,EAAO/uB,GAAO,GAAG1D,MAAgCyyB,EAAO/uB,GAAO,GAAGo5d,OAIpG,IAHAxlc,EAAO5zB,EAGA4zB,KAEL,GAAwB,SAApB7E,EAAO6E,GAAM,IAA0C,sBAAzB7E,EAAO6E,GAAM,GAAGt3B,MAAgCyyB,EAAO6E,GAAM,GAAGsgR,OAElG92R,EAAQiqc,eAAet4b,EAAO6E,GAAM,IAAI/5B,WAAW,KAAOujB,EAAQiqc,eAAet4b,EAAO/uB,GAAO,IAAInG,WAAW,GAAI,CAKhH,IAAKk1B,EAAO6E,GAAM,GAAGwlc,QAAUrqc,EAAO/uB,GAAO,GAAGk0S,SAAWnlR,EAAO/uB,GAAO,GAAGy5B,IAAI2S,OAASrd,EAAO/uB,GAAO,GAAGw5B,MAAM4S,QAAU,MAAQrd,EAAO6E,GAAM,GAAG6F,IAAI2S,OAASrd,EAAO6E,GAAM,GAAG4F,MAAM4S,OAASrd,EAAO/uB,GAAO,GAAGy5B,IAAI2S,OAASrd,EAAO/uB,GAAO,GAAGw5B,MAAM4S,QAAU,GAC3P,SAIFksa,EAAMvpb,EAAO6E,GAAM,GAAG6F,IAAI2S,OAASrd,EAAO6E,GAAM,GAAG4F,MAAM4S,OAAS,GAAKrd,EAAO/uB,GAAO,GAAGy5B,IAAI2S,OAASrd,EAAO/uB,GAAO,GAAGw5B,MAAM4S,OAAS,EAAI,EAAI,EAC7I,MAAM5S,EAAQ,IACTzK,EAAO6E,GAAM,GAAG6F,KAEfA,EAAM,IACP1K,EAAO/uB,GAAO,GAAGw5B,OAEtB6/b,EAAU7/b,GAAQ8+a,GAClB+gB,EAAU5/b,EAAK6+a,GACf2gB,EAAkB,CAChB38d,KAAMg8c,EAAM,EAAI,iBAAmB,mBACnC9+a,QACAC,IAAK,IACA1K,EAAO6E,GAAM,GAAG6F,MAGvBy/b,EAAkB,CAChB58d,KAAMg8c,EAAM,EAAI,iBAAmB,mBACnC9+a,MAAO,IACFzK,EAAO/uB,GAAO,GAAGw5B,OAEtBC,OAEFl3B,EAAO,CACLjG,KAAMg8c,EAAM,EAAI,aAAe,eAC/B9+a,MAAO,IACFzK,EAAO6E,GAAM,GAAG6F,KAErBA,IAAK,IACA1K,EAAO/uB,GAAO,GAAGw5B,QAGxBstH,EAAQ,CACNxqJ,KAAMg8c,EAAM,EAAI,SAAW,WAC3B9+a,MAAO,IACFy/b,EAAgBz/b,OAErBC,IAAK,IACAy/b,EAAgBz/b,MAGvB1K,EAAO6E,GAAM,GAAG6F,IAAM,IACjBw/b,EAAgBz/b,OAErBzK,EAAO/uB,GAAO,GAAGw5B,MAAQ,IACpB0/b,EAAgBz/b,KAErB0/b,EAAa,GAGTpqc,EAAO6E,GAAM,GAAG6F,IAAI2S,OAASrd,EAAO6E,GAAM,GAAG4F,MAAM4S,SACrD+sb,GAAa,OAAKA,EAAY,CAAC,CAAC,QAASpqc,EAAO6E,GAAM,GAAIxW,GAAU,CAAC,OAAQ2R,EAAO6E,GAAM,GAAIxW,MAIhG+7c,GAAa,OAAKA,EAAY,CAAC,CAAC,QAASryU,EAAO1pI,GAAU,CAAC,QAAS67c,EAAiB77c,GAAU,CAAC,OAAQ67c,EAAiB77c,GAAU,CAAC,QAAS7a,EAAM6a,KAKnJ+7c,GAAa,OAAKA,GAAY,OAAW/7c,EAAQyyD,OAAOu/Y,WAAWwI,WAAW/F,KAAM9ic,EAAOltB,MAAM+xB,EAAO,EAAG5zB,GAAQod,IAGnH+7c,GAAa,OAAKA,EAAY,CAAC,CAAC,OAAQ52d,EAAM6a,GAAU,CAAC,QAAS87c,EAAiB97c,GAAU,CAAC,OAAQ87c,EAAiB97c,GAAU,CAAC,OAAQ0pI,EAAO1pI,KAG7I2R,EAAO/uB,GAAO,GAAGy5B,IAAI2S,OAASrd,EAAO/uB,GAAO,GAAGw5B,MAAM4S,QACvDA,EAAS,EACT+sb,GAAa,OAAKA,EAAY,CAAC,CAAC,QAASpqc,EAAO/uB,GAAO,GAAIod,GAAU,CAAC,OAAQ2R,EAAO/uB,GAAO,GAAIod,MAEhGgvB,EAAS,GAEX,OAAOrd,EAAQ6E,EAAO,EAAG5zB,EAAQ4zB,EAAO,EAAGulc,GAC3Cn5d,EAAQ4zB,EAAOulc,EAAWrhe,OAASs0C,EAAS,EAC5C,KACF,CAMNpsC,GAAS,EACT,OAASA,EAAQ+uB,EAAOj3B,QACQ,sBAA1Bi3B,EAAO/uB,GAAO,GAAG1D,OACnByyB,EAAO/uB,GAAO,GAAG1D,KAAO,QAG5B,OAAOyyB,CACT,EA5IEg/b,SAmJF,SAA2BrnQ,EAAS6I,GAClC,MAAM+pQ,EAAmBh7c,KAAKuxD,OAAOu/Y,WAAWkK,iBAAiBzH,KAC3Dj8T,EAAWt3I,KAAKs3I,SAChB77B,EAASg/V,EAAkBnjU,GAGjC,IAAIu7T,EACJ,OAYA,SAAezmc,GAGb,OAFAymc,EAASzmc,EACTg8L,EAAQi7P,MAAM,qBACPoQ,EAAOrnc,EAChB,EAYA,SAASqnc,EAAOrnc,GACd,GAAIA,IAASymc,EAEX,OADAzqQ,EAAQwnQ,QAAQxjc,GACTqnc,EAET,MAAMnrb,EAAQ8/K,EAAQ29P,KAAK,qBAGrB1qV,EAAQo/V,EAAkBruc,GAI1BkJ,GAAQ+lG,GAAmB,IAAVA,GAAeI,GAAUu/V,EAAiB/ge,SAASmyB,GACpEnU,GAASwjH,GAAqB,IAAXA,GAAgBJ,GAAS2/V,EAAiB/ge,SAASq9J,GAG5E,OAFAhvH,EAAMstQ,MAAQlzR,QAAmB,KAAXmwc,EAAgBv9b,EAAOA,IAASmmG,IAAWxjH,IACjEqwB,EAAMwyb,OAASp4c,QAAmB,KAAXmwc,EAAgB56c,EAAQA,IAAUojH,IAAU/lG,IAC5D27L,EAAG7kM,EACZ,CACF,GAeA,SAAS2uc,EAAU38P,EAAOtwL,GACxBswL,EAAMnrI,QAAUnlD,EAChBswL,EAAMtwL,QAAUA,EAChBswL,EAAM68P,cAAgBntb,CACxB,CCrOO,MAAMw1a,EAAW,CACtB1+c,KAAM,WACN6qd,SAQF,SAA0BrnQ,EAAS6I,EAAIy+P,GACrC,IAAIvtd,EAAO,EACX,OAcA,SAAeiqB,GAMb,OALAg8L,EAAQi7P,MAAM,YACdj7P,EAAQi7P,MAAM,kBACdj7P,EAAQwnQ,QAAQxjc,GAChBg8L,EAAQ29P,KAAK,kBACb39P,EAAQi7P,MAAM,oBACP/tb,CACT,EAcA,SAASA,EAAKlJ,GACZ,OAAI,QAAWA,IACbg8L,EAAQwnQ,QAAQxjc,GACT8uc,GAEI,KAAT9uc,EACKsjc,EAAItjc,GAEN+uc,EAAW/uc,EACpB,CAcA,SAAS8uc,EAAmB9uc,GAE1B,OAAa,KAATA,GAAwB,KAATA,GAAwB,KAATA,IAAe,QAAkBA,IAEjEjqB,EAAO,EACAi5d,EAAyBhvc,IAE3B+uc,EAAW/uc,EACpB,CAcA,SAASgvc,EAAyBhvc,GAChC,OAAa,KAATA,GACFg8L,EAAQwnQ,QAAQxjc,GAChBjqB,EAAO,EACAk5d,IAIK,KAATjvc,GAAwB,KAATA,GAAwB,KAATA,IAAe,QAAkBA,KAAUjqB,IAAS,IACrFimN,EAAQwnQ,QAAQxjc,GACTgvc,IAETj5d,EAAO,EACAg5d,EAAW/uc,GACpB,CAYA,SAASivc,EAAUjvc,GACjB,OAAa,KAATA,GACFg8L,EAAQ29P,KAAK,oBACb39P,EAAQi7P,MAAM,kBACdj7P,EAAQwnQ,QAAQxjc,GAChBg8L,EAAQ29P,KAAK,kBACb39P,EAAQ29P,KAAK,YACN90P,GAII,OAAT7kM,GAA0B,KAATA,GAAwB,KAATA,IAAe,QAAaA,GACvDsjc,EAAItjc,IAEbg8L,EAAQwnQ,QAAQxjc,GACTivc,EACT,CAYA,SAASF,EAAW/uc,GAClB,OAAa,KAATA,GACFg8L,EAAQwnQ,QAAQxjc,GACTkvc,IAEL,QAAWlvc,IACbg8L,EAAQwnQ,QAAQxjc,GACT+uc,GAEFzL,EAAItjc,EACb,CAYA,SAASkvc,EAAiBlvc,GACxB,OAAO,QAAkBA,GAAQmvc,EAAWnvc,GAAQsjc,EAAItjc,EAC1D,CAYA,SAASmvc,EAAWnvc,GAClB,OAAa,KAATA,GACFg8L,EAAQwnQ,QAAQxjc,GAChBjqB,EAAO,EACAm5d,GAEI,KAATlvc,GAEFg8L,EAAQ29P,KAAK,oBAAoB/nd,KAAO,gBACxCoqN,EAAQi7P,MAAM,kBACdj7P,EAAQwnQ,QAAQxjc,GAChBg8L,EAAQ29P,KAAK,kBACb39P,EAAQ29P,KAAK,YACN90P,GAEFuqQ,EAAWpvc,EACpB,CAcA,SAASovc,EAAWpvc,GAElB,IAAc,KAATA,IAAe,QAAkBA,KAAUjqB,IAAS,GAAI,CAC3D,MAAM4rB,EAAgB,KAAT3B,EAAcovc,EAAaD,EAExC,OADAnzQ,EAAQwnQ,QAAQxjc,GACT2B,CACT,CACA,OAAO2hc,EAAItjc,EACb,CACF,GC3NO,MAAM24b,EAAW,CACtBngd,KAAM,WACN6qd,SAQF,SAA0BrnQ,EAAS6I,EAAIy+P,GACrC,MAAM1gc,EAAOhP,KAEb,IAAI6yc,EAEAnxd,EAEA+5d,EACJ,OAYA,SAAervc,GAIb,OAHAg8L,EAAQi7P,MAAM,YACdj7P,EAAQi7P,MAAM,gBACdj7P,EAAQwnQ,QAAQxjc,GACTkJ,CACT,EAgBA,SAASA,EAAKlJ,GACZ,OAAa,KAATA,GACFg8L,EAAQwnQ,QAAQxjc,GACTkqc,GAEI,KAATlqc,GACFg8L,EAAQwnQ,QAAQxjc,GACTmqc,GAEI,KAATnqc,GACFg8L,EAAQwnQ,QAAQxjc,GACT0zD,IAIL,QAAW1zD,IACbg8L,EAAQwnQ,QAAQxjc,GACTsvc,GAEFhM,EAAItjc,EACb,CAgBA,SAASkqc,EAAgBlqc,GACvB,OAAa,KAATA,GACFg8L,EAAQwnQ,QAAQxjc,GACTqqc,GAEI,KAATrqc,GACFg8L,EAAQwnQ,QAAQxjc,GAChB1qB,EAAQ,EACDg1d,IAEL,QAAWtqc,IACbg8L,EAAQwnQ,QAAQxjc,GACTwnE,GAEF87X,EAAItjc,EACb,CAYA,SAASqqc,EAAkBrqc,GACzB,OAAa,KAATA,GACFg8L,EAAQwnQ,QAAQxjc,GACTuvc,GAEFjM,EAAItjc,EACb,CAYA,SAASunE,EAAQvnE,GACf,OAAa,OAATA,EACKsjc,EAAItjc,GAEA,KAATA,GACFg8L,EAAQwnQ,QAAQxjc,GACTwvc,IAEL,QAAmBxvc,IACrBqvc,EAAc9nY,EACPkoY,EAAiBzvc,KAE1Bg8L,EAAQwnQ,QAAQxjc,GACTunE,EACT,CAYA,SAASioY,EAAaxvc,GACpB,OAAa,KAATA,GACFg8L,EAAQwnQ,QAAQxjc,GACTuvc,GAEFhoY,EAAQvnE,EACjB,CAYA,SAASuvc,EAAWvvc,GAClB,OAAgB,KAATA,EAAc+O,EAAI/O,GAAiB,KAATA,EAAcwvc,EAAaxvc,GAAQunE,EAAQvnE,EAC9E,CAYA,SAASsqc,EAAgBtqc,GACvB,MAAMhyB,EAAQ,SACd,OAAIgyB,IAAShyB,EAAMmB,WAAWmG,MAC5B0mN,EAAQwnQ,QAAQxjc,GACChyB,IAAVsH,EAAyBo6d,EAAQpF,GAEnChH,EAAItjc,EACb,CAYA,SAAS0vc,EAAM1vc,GACb,OAAa,OAATA,EACKsjc,EAAItjc,GAEA,KAATA,GACFg8L,EAAQwnQ,QAAQxjc,GACT2vc,IAEL,QAAmB3vc,IACrBqvc,EAAcK,EACPD,EAAiBzvc,KAE1Bg8L,EAAQwnQ,QAAQxjc,GACT0vc,EACT,CAYA,SAASC,EAAW3vc,GAClB,OAAa,KAATA,GACFg8L,EAAQwnQ,QAAQxjc,GACT4vc,GAEFF,EAAM1vc,EACf,CAYA,SAAS4vc,EAAS5vc,GAChB,OAAa,KAATA,EACK+O,EAAI/O,GAEA,KAATA,GACFg8L,EAAQwnQ,QAAQxjc,GACT4vc,GAEFF,EAAM1vc,EACf,CAYA,SAASwnE,EAAYxnE,GACnB,OAAa,OAATA,GAA0B,KAATA,EACZ+O,EAAI/O,IAET,QAAmBA,IACrBqvc,EAAc7nY,EACPioY,EAAiBzvc,KAE1Bg8L,EAAQwnQ,QAAQxjc,GACTwnE,EACT,CAYA,SAAS9T,EAAY1zD,GACnB,OAAa,OAATA,EACKsjc,EAAItjc,GAEA,KAATA,GACFg8L,EAAQwnQ,QAAQxjc,GACT6vc,IAEL,QAAmB7vc,IACrBqvc,EAAc37Y,EACP+7Y,EAAiBzvc,KAE1Bg8L,EAAQwnQ,QAAQxjc,GACT0zD,EACT,CAYA,SAASm8Y,EAAiB7vc,GACxB,OAAgB,KAATA,EAAc+O,EAAI/O,GAAQ0zD,EAAY1zD,EAC/C,CAYA,SAASmqc,EAAcnqc,GAErB,OAAI,QAAWA,IACbg8L,EAAQwnQ,QAAQxjc,GACT8vc,GAEFxM,EAAItjc,EACb,CAYA,SAAS8vc,EAAS9vc,GAEhB,OAAa,KAATA,IAAe,QAAkBA,IACnCg8L,EAAQwnQ,QAAQxjc,GACT8vc,GAEFC,EAAgB/vc,EACzB,CAYA,SAAS+vc,EAAgB/vc,GACvB,OAAI,QAAmBA,IACrBqvc,EAAcU,EACPN,EAAiBzvc,KAEtB,QAAcA,IAChBg8L,EAAQwnQ,QAAQxjc,GACT+vc,GAEFhhc,EAAI/O,EACb,CAYA,SAASsvc,EAAQtvc,GAEf,OAAa,KAATA,IAAe,QAAkBA,IACnCg8L,EAAQwnQ,QAAQxjc,GACTsvc,GAEI,KAATtvc,GAAwB,KAATA,IAAe,QAA0BA,GACnDgwc,EAAehwc,GAEjBsjc,EAAItjc,EACb,CAYA,SAASgwc,EAAehwc,GACtB,OAAa,KAATA,GACFg8L,EAAQwnQ,QAAQxjc,GACT+O,GAII,KAAT/O,GAAwB,KAATA,IAAe,QAAWA,IAC3Cg8L,EAAQwnQ,QAAQxjc,GACTiwc,IAEL,QAAmBjwc,IACrBqvc,EAAcW,EACPP,EAAiBzvc,KAEtB,QAAcA,IAChBg8L,EAAQwnQ,QAAQxjc,GACTgwc,GAEFjhc,EAAI/O,EACb,CAYA,SAASiwc,EAAqBjwc,GAE5B,OAAa,KAATA,GAAwB,KAATA,GAAwB,KAATA,GAAwB,KAATA,IAAe,QAAkBA,IAChFg8L,EAAQwnQ,QAAQxjc,GACTiwc,GAEFC,EAA0Blwc,EACnC,CAaA,SAASkwc,EAA0Blwc,GACjC,OAAa,KAATA,GACFg8L,EAAQwnQ,QAAQxjc,GACTmwc,IAEL,QAAmBnwc,IACrBqvc,EAAca,EACPT,EAAiBzvc,KAEtB,QAAcA,IAChBg8L,EAAQwnQ,QAAQxjc,GACTkwc,GAEFF,EAAehwc,EACxB,CAaA,SAASmwc,EAA4Bnwc,GACnC,OAAa,OAATA,GAA0B,KAATA,GAAwB,KAATA,GAAwB,KAATA,GAAwB,KAATA,EACzDsjc,EAAItjc,GAEA,KAATA,GAAwB,KAATA,GACjBg8L,EAAQwnQ,QAAQxjc,GAChBymc,EAASzmc,EACFowc,IAEL,QAAmBpwc,IACrBqvc,EAAcc,EACPV,EAAiBzvc,KAEtB,QAAcA,IAChBg8L,EAAQwnQ,QAAQxjc,GACTmwc,IAETn0Q,EAAQwnQ,QAAQxjc,GACTqwc,EACT,CAYA,SAASD,EAA4Bpwc,GACnC,OAAIA,IAASymc,GACXzqQ,EAAQwnQ,QAAQxjc,GAChBymc,OAASj6c,EACF8jd,GAEI,OAATtwc,EACKsjc,EAAItjc,IAET,QAAmBA,IACrBqvc,EAAce,EACPX,EAAiBzvc,KAE1Bg8L,EAAQwnQ,QAAQxjc,GACTowc,EACT,CAYA,SAASC,EAA8Brwc,GACrC,OAAa,OAATA,GAA0B,KAATA,GAAwB,KAATA,GAAwB,KAATA,GAAwB,KAATA,GAAwB,KAATA,EACxEsjc,EAAItjc,GAEA,KAATA,GAAwB,KAATA,IAAe,QAA0BA,GACnDgwc,EAAehwc,IAExBg8L,EAAQwnQ,QAAQxjc,GACTqwc,EACT,CAaA,SAASC,EAAiCtwc,GACxC,OAAa,KAATA,GAAwB,KAATA,IAAe,QAA0BA,GACnDgwc,EAAehwc,GAEjBsjc,EAAItjc,EACb,CAYA,SAAS+O,EAAI/O,GACX,OAAa,KAATA,GACFg8L,EAAQwnQ,QAAQxjc,GAChBg8L,EAAQ29P,KAAK,gBACb39P,EAAQ29P,KAAK,YACN90P,GAEFy+P,EAAItjc,EACb,CAgBA,SAASyvc,EAAiBzvc,GAKxB,OAJAg8L,EAAQ29P,KAAK,gBACb39P,EAAQi7P,MAAM,cACdj7P,EAAQwnQ,QAAQxjc,GAChBg8L,EAAQ29P,KAAK,cACN4W,CACT,CAgBA,SAASA,EAAgBvwc,GAGvB,OAAO,QAAcA,IAAQ,IAAArP,GAAaqrM,EAASw0Q,EAAuB,aAAc5tc,EAAKuiD,OAAOu/Y,WAAWjqU,QAAQ0sU,KAAKt5d,SAAS,qBAAkB2e,EAAY,EAAtI,CAAyIwT,GAAQwwc,EAAsBxwc,EACtM,CAgBA,SAASwwc,EAAsBxwc,GAE7B,OADAg8L,EAAQi7P,MAAM,gBACPoY,EAAYrvc,EACrB,CACF,GCzpBO,MAAMywc,EAAiB,CAC5Bj4d,KAAM,iBACNwsd,WAAY8H,EAAS9H,WACrB3B,SAQF,SAAgCrnQ,EAAS6I,EAAIy+P,GAC3C,MAAM1gc,EAAOhP,KACb,OAYA,SAAeoM,GAMb,OALAg8L,EAAQi7P,MAAM,aACdj7P,EAAQi7P,MAAM,eACdj7P,EAAQwnQ,QAAQxjc,GAChBg8L,EAAQ29P,KAAK,eACb39P,EAAQ29P,KAAK,aACN1qV,CACT,EAGA,SAASA,EAAMjvG,GAKb,OAAgB,KAATA,GAAe,2BAA4B4C,EAAKuiD,OAAOu/Y,WAAapB,EAAItjc,GAAQ6kM,EAAG7kM,EAC5F,CACF,GC3CO,MAAMs4b,EAAkB,CAC7B9/c,KAAM,kBACN6qd,SAQF,SAAiCrnQ,EAAS6I,EAAIy+P,GAC5C,OAaA,SAAetjc,GAGb,OAFAg8L,EAAQi7P,MAAM,mBACdj7P,EAAQwnQ,QAAQxjc,GACTivG,CACT,EAaA,SAASA,EAAMjvG,GACb,OAAI,QAAmBA,IACrBg8L,EAAQ29P,KAAK,mBACN90P,EAAG7kM,IAELsjc,EAAItjc,EACb,CACF,GC7CO,MAAM+3b,EAAW,CACtBv/c,KAAM,WACN0yJ,SA2DF,SAAkBlrI,GAEhB,OAAgB,KAATA,GAA+D,oBAAhDpM,KAAKyQ,OAAOzQ,KAAKyQ,OAAOj3B,OAAS,GAAG,GAAGwE,IAC/D,EA7DEohC,QAMF,SAAyB3O,GACvB,IAGI/uB,EAEA2hd,EALAyZ,EAAgBrsc,EAAOj3B,OAAS,EAChCuje,EAAiB,EAOrB,IAAwC,eAAnCtsc,EAAOssc,GAAgB,GAAG/+d,MAA4D,UAAnCyyB,EAAOssc,GAAgB,GAAG/+d,QAAwD,eAAlCyyB,EAAOqsc,GAAe,GAAG9+d,MAA2D,UAAlCyyB,EAAOqsc,GAAe,GAAG9+d,MAIjL,IAHA0D,EAAQq7d,IAGCr7d,EAAQo7d,GACf,GAA8B,iBAA1Brsc,EAAO/uB,GAAO,GAAG1D,KAAyB,CAE5CyyB,EAAOssc,GAAgB,GAAG/+d,KAAO,kBACjCyyB,EAAOqsc,GAAe,GAAG9+d,KAAO,kBAChC++d,GAAkB,EAClBD,GAAiB,EACjB,KACF,CAKJp7d,EAAQq7d,EAAiB,EACzBD,IACA,OAASp7d,GAASo7d,QACFlkd,IAAVyqc,EACE3hd,IAAUo7d,GAA2C,eAA1Brsc,EAAO/uB,GAAO,GAAG1D,OAC9Cqld,EAAQ3hd,GAEDA,IAAUo7d,GAA2C,eAA1Brsc,EAAO/uB,GAAO,GAAG1D,OACrDyyB,EAAO4yb,GAAO,GAAGrld,KAAO,eACpB0D,IAAU2hd,EAAQ,IACpB5yb,EAAO4yb,GAAO,GAAGlob,IAAM1K,EAAO/uB,EAAQ,GAAG,GAAGy5B,IAC5C1K,EAAOyvE,OAAOmjX,EAAQ,EAAG3hd,EAAQ2hd,EAAQ,GACzCyZ,GAAiBp7d,EAAQ2hd,EAAQ,EACjC3hd,EAAQ2hd,EAAQ,GAElBA,OAAQzqc,GAGZ,OAAO6X,CACT,EAlDEg/b,SAmEF,SAA0BrnQ,EAAS6I,EAAIy+P,GAErC,IAEIvtd,EAEAmmC,EAJAkwb,EAAW,EAKf,OAcA,SAAepsc,GAGb,OAFAg8L,EAAQi7P,MAAM,YACdj7P,EAAQi7P,MAAM,oBACPyS,EAAa1pc,EACtB,EAYA,SAAS0pc,EAAa1pc,GACpB,OAAa,KAATA,GACFg8L,EAAQwnQ,QAAQxjc,GAChBosc,IACO1C,IAET1tQ,EAAQ29P,KAAK,oBACNiX,EAAQ5wc,GACjB,CAYA,SAAS4wc,EAAQ5wc,GAEf,OAAa,OAATA,EACKsjc,EAAItjc,GAMA,KAATA,GACFg8L,EAAQi7P,MAAM,SACdj7P,EAAQwnQ,QAAQxjc,GAChBg8L,EAAQ29P,KAAK,SACNiX,GAII,KAAT5wc,GACFkc,EAAQ8/K,EAAQi7P,MAAM,oBACtBlhd,EAAO,EACAo2d,EAAcnsc,KAEnB,QAAmBA,IACrBg8L,EAAQi7P,MAAM,cACdj7P,EAAQwnQ,QAAQxjc,GAChBg8L,EAAQ29P,KAAK,cACNiX,IAIT50Q,EAAQi7P,MAAM,gBACPz5c,EAAKwiB,GACd,CAYA,SAASxiB,EAAKwiB,GACZ,OAAa,OAATA,GAA0B,KAATA,GAAwB,KAATA,IAAe,QAAmBA,IACpEg8L,EAAQ29P,KAAK,gBACNiX,EAAQ5wc,KAEjBg8L,EAAQwnQ,QAAQxjc,GACTxiB,EACT,CAYA,SAAS2ud,EAAcnsc,GAErB,OAAa,KAATA,GACFg8L,EAAQwnQ,QAAQxjc,GAChBjqB,IACOo2d,GAILp2d,IAASq2d,GACXpwQ,EAAQ29P,KAAK,oBACb39P,EAAQ29P,KAAK,YACN90P,EAAG7kM,KAIZkc,EAAMtqC,KAAO,eACN4L,EAAKwiB,GACd,CACF,iBCxNO,MAAM,EAAW,CACtB,GAAM4tD,EACN,GAAMA,EACN,GAAMA,EACN,GAAMA,EACN,GAAMA,EACN,GAAMA,EACN,GAAMA,EACN,GAAMA,EACN,GAAMA,EACN,GAAMA,EACN,GAAMA,EACN,GAAMA,EACN,GAAMA,EACN,GAAM4pY,GAIKqZ,EAAiB,CAC5B,GAAMp8Y,GAIKq8Y,EAAc,CACzB,EAAE,GAAIhZ,EACN,EAAE,GAAIA,EACN,GAAMA,GAIK/mV,EAAO,CAClB,GAAMw4V,EACN,GAAM7P,EACN,GAAM,CAACkQ,EAAiBlQ,GACxB,GAAMjB,EACN,GAAMmR,EACN,GAAMlQ,EACN,GAAMhC,EACN,IAAOA,GAIIj+Y,EAAS,CACpB,GAAMqjN,EACN,GAAM26L,GAIK,GAAO,CAClB,EAAE,GAAIiE,EACN,EAAE,GAAIA,EACN,EAAE,GAAIA,EACN,GAAM0S,EACN,GAAMtxM,EACN,GAAMwxM,EACN,GAAM,CAACpX,EAAUyB,GACjB,GAAM8X,EACN,GAAM,CAACnY,EAAiBb,GACxB,GAAMqV,EACN,GAAMwB,EACN,GAAMvW,GAIKmV,GAAa,CACxB/F,KAAM,CAACmH,EAAW,OAIPM,GAAmB,CAC9BzH,KAAM,CAAC,GAAI,KAIA1sU,GAAU,CACrB0sU,KAAM,yJCvBD,SAAS4J,EAAgB5rZ,EAAQ89J,EAAY/7N,GAElD,IAAI8qN,EAAQ,CACV68P,cAAe,EACft1I,OAAQ,EACR1hU,KAAM3Q,GAAQA,EAAK2Q,MAAQ,EAC3BgvE,OAAQ3/E,GAAQA,EAAK2/E,QAAU,EAC/BnlD,OAAQx6B,GAAQA,EAAKw6B,QAAU,GAGjC,MAAMsvb,EAAc,CAAC,EAEfC,EAAuB,GAE7B,IAAIpsF,EAAS,GAET3tX,EAAQ,GAERg6c,GAAW,EAOf,MAAMl1Q,EAAU,CACd/lF,QAASk7V,GAoNX,SAA+BntS,EAAWx+J,GACxC4rc,EAAUptS,EAAWx+J,EAAKte,KAC5B,IArNEy/K,MAAOwqS,EAAiBE,GACxB7N,QAsJF,SAAiBxjc,IACX,QAAmBA,IACrBgyM,EAAMn6M,OACNm6M,EAAMnrI,OAAS,EACfmrI,EAAMtwL,SAAoB,IAAV1hB,EAAc,EAAI,EAClCsxc,MACmB,IAAVtxc,IACTgyM,EAAMnrI,SACNmrI,EAAMtwL,UAIJswL,EAAM68P,aAAe,EACvB78P,EAAMunH,UAENvnH,EAAM68P,eAGF78P,EAAM68P,eAIVhqF,EAAO7yK,EAAMunH,QAAQnsV,SACnB4kO,EAAM68P,cAAgB,EACtB78P,EAAMunH,WAKV7mU,EAAQw4I,SAAWlrI,EAGnBkxc,GAAW,CACb,EAtLEja,MAyLF,SAAerld,EAAMqkG,GAGnB,MAAM/5D,EAAQ+5D,GAAU,CAAC,EAKzB,OAJA/5D,EAAMtqC,KAAOA,EACbsqC,EAAMpN,MAAQjyB,IACd6V,EAAQ2R,OAAOp1B,KAAK,CAAC,QAASitC,EAAOxpB,IACrCwE,EAAMjoB,KAAKitC,GACJA,CACT,EAjMEy9a,KAoMF,SAAc/nd,GACZ,MAAMsqC,EAAQhlB,EAAMe,MAGpB,OAFAikB,EAAMnN,IAAMlyB,IACZ6V,EAAQ2R,OAAOp1B,KAAK,CAAC,OAAQitC,EAAOxpB,IAC7BwpB,CACT,EAxME8qR,UAAWmqK,EAAiBE,EAAmB,CAC7CrqK,WAAW,KASTt0S,EAAU,CACdsN,KAAM,KACN6mc,eAAgB,CAAC,EACjBX,WA8EF,SAAoBl4d,GAClBgje,EAAYhje,EAAM6pB,MAAQ7pB,EAAM64F,OAChCyqY,GACF,EAhFEjtc,OAAQ,GACRxnB,MACAsoE,SACA+lF,SAAU,KACVyxT,eA4CF,SAAwBzgb,EAAOq1b,GAC7B,OAsZJ,SAAyB1sF,EAAQ0sF,GAC/B,IAAIj8d,GAAS,EAEb,MAAM7D,EAAS,GAEf,IAAI+/d,EACJ,OAASl8d,EAAQuvY,EAAOz3Y,QAAQ,CAC9B,MAAMoiI,EAAQq1Q,EAAOvvY,GAErB,IAAItH,EACJ,GAAqB,kBAAVwhI,EACTxhI,EAAQwhI,OACH,OAAQA,GACb,KAAM,EAEFxhI,EAAQ,KACR,MAEJ,KAAM,EAEFA,EAAQ,KACR,MAEJ,KAAM,EAEFA,EAAQ,OACR,MAEJ,KAAM,EAEFA,EAAQuje,EAAa,IAAM,KAC3B,MAEJ,KAAM,EAEF,IAAKA,GAAcC,EAAO,SAC1Bxje,EAAQ,IACR,MAEJ,QAGIA,EAAQyoB,OAAO+iB,aAAag2F,GAGlCgiW,GAAmB,IAAXhiW,EACR/9H,EAAOxC,KAAKjB,EACd,CACA,OAAOyD,EAAO+gB,KAAK,GACrB,CAvcWi/c,CAAgBxL,EAAY/pb,GAAQq1b,EAC7C,EA7CEtL,cACApkT,MAsBF,SAAe1qK,GAKb,GAJA0tY,GAAS,OAAKA,EAAQ1tY,GACtBu6d,IAGkC,OAA9B7sF,EAAOA,EAAOz3Y,OAAS,GACzB,MAAO,GAMT,OAJAgke,EAAUnuP,EAAY,GAGtBvwN,EAAQ2R,QAAS,OAAW4sc,EAAsBv+c,EAAQ2R,OAAQ3R,GAC3DA,EAAQ2R,MACjB,GA3BA,IAOIstc,EAPAz1c,EAAQ+mN,EAAWogP,SAASt1d,KAAK2kB,EAASspM,GAW9C,OAHIinB,EAAW+hP,YACbiM,EAAqBhie,KAAKg0O,GAErBvwN,EA4BP,SAASuzc,EAAY/pb,GACnB,OA2WJ,SAAqB2oW,EAAQ3oW,GAC3B,MAAMib,EAAajb,EAAMpN,MAAMyqT,OACzBq4I,EAAmB11b,EAAMpN,MAAM+/b,aAC/Bp9Y,EAAWv1C,EAAMnN,IAAIwqT,OACrBs4I,EAAiB31b,EAAMnN,IAAI8/b,aAEjC,IAAIrgR,EACJ,GAAIr3J,IAAes6B,EAEjB+8H,EAAO,CAACq2L,EAAO1tV,GAAYhgD,MAAMy6d,EAAkBC,QAC9C,CAEL,GADArjR,EAAOq2L,EAAO1tY,MAAMggD,EAAYs6B,GAC5BmgZ,GAAoB,EAAG,CACzB,MAAMx6V,EAAOo3E,EAAK,GACE,kBAATp3E,EACTo3E,EAAK,GAAKp3E,EAAKjgI,MAAMy6d,GAErBpjR,EAAK31L,OAET,CACIg5c,EAAiB,GAEnBrjR,EAAKv/M,KAAK41Y,EAAOpzT,GAAUt6E,MAAM,EAAG06d,GAExC,CACA,OAAOrjR,CACT,CArYWsjR,CAAYjtF,EAAQ3oW,EAC7B,CAGA,SAASr/B,IAEP,MAAM,aACJgyd,EAAY,OACZt1I,EAAM,KACN1hU,EAAI,OACJgvE,EAAM,OACNnlD,GACEswL,EACJ,MAAO,CACL68P,eACAt1I,SACA1hU,OACAgvE,SACAnlD,SAEJ,CAuBA,SAASgwb,IAEP,IAAIK,EACJ,KAAO//P,EAAMunH,OAASsrD,EAAOz3Y,QAAQ,CACnC,MAAMoiI,EAAQq1Q,EAAO7yK,EAAMunH,QAG3B,GAAqB,kBAAV/pN,EAKT,IAJAuiW,EAAa//P,EAAMunH,OACfvnH,EAAM68P,aAAe,IACvB78P,EAAM68P,aAAe,GAEhB78P,EAAMunH,SAAWw4I,GAAc//P,EAAM68P,aAAer/V,EAAMpiI,QAC/DslD,EAAG88E,EAAMrgI,WAAW6iO,EAAM68P,oBAG5Bn8a,EAAG88E,EAEP,CACF,CAUA,SAAS98E,EAAG1yB,GACVkxc,OAAW1kd,EACXmld,EAAe3xc,EACf9D,EAAQA,EAAM8D,EAChB,CAwEA,SAASqxc,EAAkBnyb,EAAG1Z,GAC5BA,EAAK63I,SACP,CAUA,SAAS8zT,EAAiBa,EAAU/7X,GAClC,OAeA,SAAcyuX,EAAY2K,EAAa4C,GAErC,IAAIC,EAEAC,EAEAC,EAEA5sc,EACJ,OAAOh4B,MAAMC,QAAQi3d,GACrB2N,EAAuB3N,GAAc,aAAcA,EAEnD2N,EAAuB,CAAC,IAUxB,SAA+B3ge,GAC7B,OAAOo9B,EAGP,SAASA,EAAM9O,GACb,MAAM3X,EAAgB,OAAT2X,GAAiBtuB,EAAIsuB,GAC5BgiH,EAAe,OAAThiH,GAAiBtuB,EAAIy1d,KAKjC,OAAOkL,EAJM,IAGT7ke,MAAMC,QAAQ4a,GAAQA,EAAOA,EAAO,CAACA,GAAQ,MAAS7a,MAAMC,QAAQu0I,GAAOA,EAAMA,EAAM,CAACA,GAAO,IAC5FqwV,CAA6Bryc,EACtC,CACF,CAvBiEsyc,CAAsB5N,GAiCvF,SAAS2N,EAAuBzkZ,GAG9B,OAFAskZ,EAAmBtkZ,EACnBukZ,EAAiB,EACG,IAAhBvkZ,EAAKxgF,OACA6ke,EAEFM,EAAgB3kZ,EAAKukZ,GAC9B,CAUA,SAASI,EAAgBvuS,GACvB,OAGA,SAAehkK,GAKbwF,EAgER,WACE,MAAMgtc,EAAa31d,IACb41d,EAAgB//c,EAAQw4I,SACxBwnU,EAAwBhgd,EAAQ0/c,iBAChCO,EAAmBjgd,EAAQ2R,OAAOj3B,OAClCwle,EAAaple,MAAM0Z,KAAKgQ,GAC9B,MAAO,CACLhQ,KAAMyrd,EACNt1T,WASF,SAASA,IACP20D,EAAQwgQ,EACR9/c,EAAQw4I,SAAWunU,EACnB//c,EAAQ0/c,iBAAmBM,EAC3Bhgd,EAAQ2R,OAAOj3B,OAASule,EACxBz7c,EAAQ07c,EACRtB,GACF,CACF,CAzFez+S,GACPu/S,EAAmBpuS,EACdA,EAAUpxD,UACblgH,EAAQ0/c,iBAAmBpuS,GAK7B,GAAIA,EAAUxrL,MAAQka,EAAQyyD,OAAOu/Y,WAAWjqU,QAAQ0sU,KAAKt5d,SAASm2L,EAAUxrL,MAC9E,OAAO8qd,EAAItjc,GAEb,OAAOgkK,EAAUq/R,SAASt1d,KAI1BkoG,EAAStoG,OAAO+lB,OAAO/lB,OAAO6yB,OAAO9N,GAAUujF,GAAUvjF,EAASspM,EAAS6I,EAAIy+P,EAJxEt/R,CAI6EhkK,EACtF,CACF,CAGA,SAAS6kM,EAAG7kM,GAGV,OAFAkxc,GAAW,EACXc,EAASI,EAAkB5sc,GACpB6pc,CACT,CAGA,SAAS/L,EAAItjc,GAGX,OAFAkxc,GAAW,EACX1rc,EAAK63I,YACC80T,EAAiBD,EAAiB9ke,OAC/Bmle,EAAgBL,EAAiBC,IAEnCF,CACT,CACF,CACF,CAUA,SAASb,EAAUptS,EAAW98K,GACxB88K,EAAUghS,aAAeiM,EAAqBpje,SAASm2L,IACzDitS,EAAqBhie,KAAK+0L,GAExBA,EAAUhxJ,UACZ,OAAOtgB,EAAQ2R,OAAQnd,EAAMwL,EAAQ2R,OAAOj3B,OAAS8Z,EAAM88K,EAAUhxJ,QAAQtgB,EAAQ2R,OAAOltB,MAAM+P,GAAOwL,IAEvGsxK,EAAUrsI,YACZjlC,EAAQ2R,OAAS2/J,EAAUrsI,UAAUjlC,EAAQ2R,OAAQ3R,GAEzD,CA0CA,SAAS4+c,IACHt/P,EAAMn6M,QAAQm5c,GAAeh/P,EAAMnrI,OAAS,IAC9CmrI,EAAMnrI,OAASmqY,EAAYh/P,EAAMn6M,MACjCm6M,EAAMtwL,QAAUsvb,EAAYh/P,EAAMn6M,MAAQ,EAE9C,CACF,gGCjfO,MAAMoX,EAAU,CACrBo0b,SASF,SAA2BrnQ,GACzB,MAAMytQ,EAAeztQ,EAAQ/lF,QAAQriH,KAAKuxD,OAAOu/Y,WAAWmM,gBAM5D,SAAoC7wc,GAClC,GAAa,OAATA,EAEF,YADAg8L,EAAQwnQ,QAAQxjc,GAMlB,OAHAg8L,EAAQi7P,MAAM,cACdj7P,EAAQwnQ,QAAQxjc,GAChBg8L,EAAQ29P,KAAK,eACN,IAAAhpc,GAAaqrM,EAASytQ,EAAc,aAC7C,IAGA,SAA0Bzpc,GAExB,OADAg8L,EAAQi7P,MAAM,aACP8U,EAAU/rc,EACnB,IAnBA,IAAIkrI,EACJ,OAAOu+T,EAqBP,SAASsC,EAAU/rc,GACjB,MAAMkc,EAAQ8/K,EAAQi7P,MAAM,YAAa,CACvC7sF,YAAa,OACbl/N,aAMF,OAJIA,IACFA,EAASvpI,KAAOua,GAElBgvH,EAAWhvH,EACJ1+B,EAAKwiB,EACd,CAGA,SAASxiB,EAAKwiB,GACZ,OAAa,OAATA,GACFg8L,EAAQ29P,KAAK,aACb39P,EAAQ29P,KAAK,kBACb39P,EAAQwnQ,QAAQxjc,KAGd,QAAmBA,IACrBg8L,EAAQwnQ,QAAQxjc,GAChBg8L,EAAQ29P,KAAK,aACNoS,IAIT/vQ,EAAQwnQ,QAAQxjc,GACTxiB,EACT,CACF,4GCvDO,MAAMlP,EAAW,CACtB+0d,SAcF,SAA4BrnQ,GAC1B,MAAMp5L,EAAOhP,KAEPsD,EAAQ,GACd,IAEI27c,EAEAC,EAEAC,EANAC,EAAY,EAOhB,OAAOlkc,EAGP,SAASA,EAAM9O,GAWb,GAAIgzc,EAAY97c,EAAM9pB,OAAQ,CAC5B,MAAMuQ,EAAOuZ,EAAM87c,GAEnB,OADApwc,EAAKikc,eAAiBlpd,EAAK,GACpBq+M,EAAQ/lF,QAAQt4H,EAAK,GAAGipd,aAAcqM,EAAkBC,EAAxDl3Q,CAA4Eh8L,EACrF,CAGA,OAAOkzc,EAAmBlzc,EAC5B,CAGA,SAASizc,EAAiBjzc,GAMxB,GALAgzc,IAKIpwc,EAAKikc,eAAeC,WAAY,CAClClkc,EAAKikc,eAAeC,gBAAat6c,EAC7Bqmd,GACFM,IAKF,MAAMC,EAAmBxwc,EAAKyB,OAAOj3B,OACrC,IAEI4kO,EAFAqhQ,EAAkBD,EAKtB,KAAOC,KACL,GAAwC,SAApCzwc,EAAKyB,OAAOgvc,GAAiB,IAA0D,cAAzCzwc,EAAKyB,OAAOgvc,GAAiB,GAAGzhe,KAAsB,CACtGogO,EAAQpvM,EAAKyB,OAAOgvc,GAAiB,GAAGtkc,IACxC,KACF,CAEFukc,EAAeN,GAGf,IAAI19d,EAAQ89d,EACZ,KAAO99d,EAAQstB,EAAKyB,OAAOj3B,QACzBw1B,EAAKyB,OAAO/uB,GAAO,GAAGy5B,IAAM,IACvBijM,GAEL18N,IAQF,OAJA,OAAOstB,EAAKyB,OAAQgvc,EAAkB,EAAG,EAAGzwc,EAAKyB,OAAOltB,MAAMi8d,IAG9Dxwc,EAAKyB,OAAOj3B,OAASkI,EACd49d,EAAmBlzc,EAC5B,CACA,OAAO8O,EAAM9O,EACf,CAGA,SAASkzc,EAAmBlzc,GAM1B,GAAIgzc,IAAc97c,EAAM9pB,OAAQ,CAI9B,IAAKyle,EACH,OAAOU,EAAkBvzc,GAM3B,GAAI6yc,EAAUT,kBAAoBS,EAAUT,iBAAiBrI,SAC3D,OAAOyJ,EAAUxzc,GAQnB4C,EAAKokS,UAAY1wS,QAAQu8c,EAAUT,mBAAqBS,EAAUY,8BACpE,CAIA,OADA7wc,EAAKikc,eAAiB,CAAC,EAChB7qQ,EAAQr1B,MAAM+sS,EAAoBC,EAAsBC,EAAxD53Q,CAA+Eh8L,EACxF,CAGA,SAAS2zc,EAAqB3zc,GAG5B,OAFI6yc,GAAWM,IACfG,EAAeN,GACRO,EAAkBvzc,EAC3B,CAGA,SAAS4zc,EAAsB5zc,GAG7B,OAFA4C,EAAKuiD,OAAOnvC,KAAKpT,EAAK/lB,MAAMgb,MAAQm7c,IAAc97c,EAAM9pB,OACxD2le,EAAkBnwc,EAAK/lB,MAAM6kC,OACtB8xb,EAAUxzc,EACnB,CAGA,SAASuzc,EAAkBvzc,GAGzB,OADA4C,EAAKikc,eAAiB,CAAC,EAChB7qQ,EAAQ/lF,QAAQy9V,EAAoBG,EAAmBL,EAAvDx3Q,CAAkEh8L,EAC3E,CAGA,SAAS6zc,EAAkB7zc,GAIzB,OAHAgzc,IACA97c,EAAMjoB,KAAK,CAAC2zB,EAAKwvc,iBAAkBxvc,EAAKikc,iBAEjC0M,EAAkBvzc,EAC3B,CAGA,SAASwzc,EAAUxzc,GACjB,OAAa,OAATA,GACE6yc,GAAWM,IACfG,EAAe,QACft3Q,EAAQwnQ,QAAQxjc,KAGlB6yc,EAAYA,GAAajwc,EAAKuiD,OAAO4rD,KAAKnuG,EAAK/lB,OAC/Cm/M,EAAQi7P,MAAM,YAAa,CACzBsO,WAAYsN,EACZzoG,YAAa,OACbl/N,SAAU4nU,IAELgB,EAAa9zc,GACtB,CAGA,SAAS8zc,EAAa9zc,GACpB,OAAa,OAATA,GACF+zc,EAAa/3Q,EAAQ29P,KAAK,cAAc,GACxC2Z,EAAe,QACft3Q,EAAQwnQ,QAAQxjc,KAGd,QAAmBA,IACrBg8L,EAAQwnQ,QAAQxjc,GAChB+zc,EAAa/3Q,EAAQ29P,KAAK,cAE1BqZ,EAAY,EACZpwc,EAAKokS,eAAYx6S,EACVsiB,IAETktL,EAAQwnQ,QAAQxjc,GACT8zc,EACT,CAUA,SAASC,EAAa73b,EAAO83b,GAC3B,MAAMtsU,EAAS9kI,EAAKqjc,YAAY/pb,GAyChC,GAxCI83b,GAAWtsU,EAAOz4J,KAAK,MAC3BitC,EAAMgvH,SAAW4nU,EACbA,IAAYA,EAAWnxc,KAAOua,GAClC42b,EAAa52b,EACb22b,EAAU3M,WAAWhqb,EAAMpN,OAC3B+jc,EAAUhxT,MAAMna,GAmCZ9kI,EAAKuiD,OAAOnvC,KAAKkG,EAAMpN,MAAMjX,MAAO,CACtC,IAAIviB,EAAQu9d,EAAUxuc,OAAOj3B,OAC7B,KAAOkI,KACL,GAEAu9d,EAAUxuc,OAAO/uB,GAAO,GAAGw5B,MAAM4S,OAASqxb,KAEzCF,EAAUxuc,OAAO/uB,GAAO,GAAGy5B,KAE5B8jc,EAAUxuc,OAAO/uB,GAAO,GAAGy5B,IAAI2S,OAASqxb,GAGtC,OAMJ,MAAMK,EAAmBxwc,EAAKyB,OAAOj3B,OACrC,IAEIotB,EAEAw3M,EAJAqhQ,EAAkBD,EAOtB,KAAOC,KACL,GAAwC,SAApCzwc,EAAKyB,OAAOgvc,GAAiB,IAA0D,cAAzCzwc,EAAKyB,OAAOgvc,GAAiB,GAAGzhe,KAAsB,CACtG,GAAI4oB,EAAM,CACRw3M,EAAQpvM,EAAKyB,OAAOgvc,GAAiB,GAAGtkc,IACxC,KACF,CACAvU,GAAO,CACT,CAMF,IAJA84c,EAAeN,GAGf19d,EAAQ89d,EACD99d,EAAQstB,EAAKyB,OAAOj3B,QACzBw1B,EAAKyB,OAAO/uB,GAAO,GAAGy5B,IAAM,IACvBijM,GAEL18N,KAIF,OAAOstB,EAAKyB,OAAQgvc,EAAkB,EAAG,EAAGzwc,EAAKyB,OAAOltB,MAAMi8d,IAG9Dxwc,EAAKyB,OAAOj3B,OAASkI,CACvB,CACF,CAQA,SAASg+d,EAAev9d,GACtB,IAAIT,EAAQ4hB,EAAM9pB,OAGlB,KAAOkI,KAAUS,GAAM,CACrB,MAAMypG,EAAQtoF,EAAM5hB,GACpBstB,EAAKikc,eAAiBrnX,EAAM,GAC5BA,EAAM,GAAGm6W,KAAK5rd,KAAK60B,EAAMo5L,EAC3B,CACA9kM,EAAM9pB,OAAS2I,CACjB,CACA,SAASo9d,IACPN,EAAUhxT,MAAM,CAAC,OACjBixT,OAAatmd,EACbqmd,OAAYrmd,EACZoW,EAAKikc,eAAeC,gBAAat6c,CACnC,CACF,GAjUMknd,EAAqB,CACzBrQ,SAwUF,SAA2BrnQ,EAAS6I,EAAIy+P,GAGtC,OAAO,IAAA3yc,GAAaqrM,EAASA,EAAQ/lF,QAAQriH,KAAKuxD,OAAOu/Y,WAAWp2d,SAAUu2N,EAAIy+P,GAAM,aAAc1vc,KAAKuxD,OAAOu/Y,WAAWjqU,QAAQ0sU,KAAKt5d,SAAS,qBAAkB2e,EAAY,EACnL,uHCvVO,MAAMyiB,EAAU,CACrB+D,QAgBF,SAAwB3O,GAEtB,OADA,OAAYA,GACLA,CACT,EAlBEg/b,SAyBF,SAAyBrnQ,EAAS6I,GAEhC,IAAI35D,EACJ,OAYA,SAAoBlrI,GAKlB,OAJAg8L,EAAQi7P,MAAM,WACd/rT,EAAW8wD,EAAQi7P,MAAM,eAAgB,CACvC7sF,YAAa,YAER6pG,EAAYj0c,EACrB,EAYA,SAASi0c,EAAYj0c,GACnB,OAAa,OAATA,EACKwpc,EAAWxpc,IAKhB,QAAmBA,GACdg8L,EAAQr1B,MAAMutS,EAAuBC,EAAiB3K,EAAtDxtQ,CAAkEh8L,IAI3Eg8L,EAAQwnQ,QAAQxjc,GACTi0c,EACT,CAOA,SAASzK,EAAWxpc,GAGlB,OAFAg8L,EAAQ29P,KAAK,gBACb39P,EAAQ29P,KAAK,WACN90P,EAAG7kM,EACZ,CAOA,SAASm0c,EAAgBn0c,GAQvB,OAPAg8L,EAAQwnQ,QAAQxjc,GAChBg8L,EAAQ29P,KAAK,gBACbzuT,EAASvpI,KAAOq6L,EAAQi7P,MAAM,eAAgB,CAC5C7sF,YAAa,UACbl/N,aAEFA,EAAWA,EAASvpI,KACbsyc,CACT,CACF,GAhGMC,EAAwB,CAC5BthW,SAAS,EACTywV,SAqGF,SAA8BrnQ,EAAS6I,EAAIy+P,GACzC,MAAM1gc,EAAOhP,KACb,OAOA,SAAwBoM,GAKtB,OAJAg8L,EAAQ29P,KAAK,gBACb39P,EAAQi7P,MAAM,cACdj7P,EAAQwnQ,QAAQxjc,GAChBg8L,EAAQ29P,KAAK,eACN,IAAAhpc,GAAaqrM,EAAS+oM,EAAU,aACzC,EAOA,SAASA,EAAS/kY,GAChB,GAAa,OAATA,IAAiB,QAAmBA,GACtC,OAAOsjc,EAAItjc,GAKb,MAAMg0G,EAAOpxG,EAAKyB,OAAOzB,EAAKyB,OAAOj3B,OAAS,GAC9C,OAAKw1B,EAAKuiD,OAAOu/Y,WAAWjqU,QAAQ0sU,KAAKt5d,SAAS,iBAAmBmmI,GAAyB,eAAjBA,EAAK,GAAGpiI,MAAyBoiI,EAAK,GAAG2oV,eAAe3oV,EAAK,IAAI,GAAM5mI,QAAU,EACrJy3N,EAAG7kM,GAELg8L,EAAQgrG,UAAUpkS,EAAKuiD,OAAOu/Y,WAAW3zV,KAAMuyV,EAAKz+P,EAApD7I,CAAwDh8L,EACjE,CACF,GCrJO,MAAM+wG,EAAO,CAClBsyV,SASF,SAAwBrnQ,GACtB,MAAMp5L,EAAOhP,KACPy9G,EAAU2qF,EAAQ/lF,QAExB,KAMA,SAAuBj2G,GACrB,GAAa,OAATA,EAEF,YADAg8L,EAAQwnQ,QAAQxjc,GAOlB,OAJAg8L,EAAQi7P,MAAM,mBACdj7P,EAAQwnQ,QAAQxjc,GAChBg8L,EAAQ29P,KAAK,mBACb/2b,EAAKwvc,sBAAmB5ld,EACjB6kH,CACT,GAdA2qF,EAAQ/lF,QAAQriH,KAAKuxD,OAAOu/Y,WAAWoM,YAAasD,GAAgB,IAAAzjd,GAAaqrM,EAASA,EAAQ/lF,QAAQriH,KAAKuxD,OAAOu/Y,WAAW3zV,KAAMqjW,EAAgBp4Q,EAAQ/lF,QAAQhnG,EAASmlc,IAAkB,gBAClM,OAAO/iW,EAgBP,SAAS+iW,EAAep0c,GACtB,GAAa,OAATA,EAQJ,OAJAg8L,EAAQi7P,MAAM,cACdj7P,EAAQwnQ,QAAQxjc,GAChBg8L,EAAQ29P,KAAK,cACb/2b,EAAKwvc,sBAAmB5ld,EACjB6kH,EAPL2qF,EAAQwnQ,QAAQxjc,EAQpB,CACF,uHC9CO,MAAM0xQ,EAAW,CACtBszL,WAAYqP,KAED56Z,EAAS66Z,EAAkB,UAC3Bz8d,EAAOy8d,EAAkB,QAQtC,SAASA,EAAkB/8a,GACzB,MAAO,CACLyta,WAAYqP,EAAyB,SAAV98a,EAAmBg9a,OAAyB/nd,GACvE62c,SAQF,SAAwBrnQ,GACtB,MAAMp5L,EAAOhP,KACP8wc,EAAa9wc,KAAKuxD,OAAOu/Y,WAAWnta,GACpC1/C,EAAOmkN,EAAQ/lF,QAAQyuV,EAAY51b,EAAO0lc,GAChD,OAAO1lc,EAGP,SAASA,EAAM9O,GACb,OAAO0mc,EAAQ1mc,GAAQnoB,EAAKmoB,GAAQw0c,EAAQx0c,EAC9C,CAGA,SAASw0c,EAAQx0c,GACf,GAAa,OAATA,EAMJ,OAFAg8L,EAAQi7P,MAAM,QACdj7P,EAAQwnQ,QAAQxjc,GACTxiB,EALLw+M,EAAQwnQ,QAAQxjc,EAMpB,CAGA,SAASxiB,EAAKwiB,GACZ,OAAI0mc,EAAQ1mc,IACVg8L,EAAQ29P,KAAK,QACN9hd,EAAKmoB,KAIdg8L,EAAQwnQ,QAAQxjc,GACTxiB,EACT,CAQA,SAASkpd,EAAQ1mc,GACf,GAAa,OAATA,EACF,OAAO,EAET,MAAM4tD,EAAO82Y,EAAW1kc,GACxB,IAAI1qB,GAAS,EACb,GAAIs4E,EAGF,OAASt4E,EAAQs4E,EAAKxgF,QAAQ,CAC5B,MAAMuQ,EAAOiwE,EAAKt4E,GAClB,IAAKqI,EAAKutJ,UAAYvtJ,EAAKutJ,SAASn9J,KAAK60B,EAAMA,EAAKsoI,UAClD,OAAO,CAEX,CAEF,OAAO,CACT,CACF,EACF,CAQA,SAASmpU,EAAeI,GACtB,OAGA,SAAwBpwc,EAAQ3R,GAC9B,IAEIukc,EAFA3hd,GAAS,EAMb,OAASA,GAAS+uB,EAAOj3B,aACTof,IAAVyqc,EACE5yb,EAAO/uB,IAAoC,SAA1B+uB,EAAO/uB,GAAO,GAAG1D,OACpCqld,EAAQ3hd,EACRA,KAEQ+uB,EAAO/uB,IAAoC,SAA1B+uB,EAAO/uB,GAAO,GAAG1D,OAExC0D,IAAU2hd,EAAQ,IACpB5yb,EAAO4yb,GAAO,GAAGlob,IAAM1K,EAAO/uB,EAAQ,GAAG,GAAGy5B,IAC5C1K,EAAOyvE,OAAOmjX,EAAQ,EAAG3hd,EAAQ2hd,EAAQ,GACzC3hd,EAAQ2hd,EAAQ,GAElBA,OAAQzqc,GAGZ,OAAOiod,EAAgBA,EAAcpwc,EAAQ3R,GAAW2R,CAC1D,CACF,CAaA,SAASkwc,EAAuBlwc,EAAQ3R,GACtC,IAAIgzc,EAAa,EAEjB,OAASA,GAAcrhc,EAAOj3B,QAC5B,IAAKs4d,IAAerhc,EAAOj3B,QAAyC,eAA/Bi3B,EAAOqhc,GAAY,GAAG9zd,OAA6D,SAAnCyyB,EAAOqhc,EAAa,GAAG,GAAG9zd,KAAiB,CAC9H,MAAM4L,EAAO6mB,EAAOqhc,EAAa,GAAG,GAC9B7gF,EAASnyX,EAAQuzc,YAAYzod,GACnC,IAIIk3d,EAJAp/d,EAAQuvY,EAAOz3Y,OACfune,GAAe,EACf5+d,EAAO,EAGX,KAAOT,KAAS,CACd,MAAMk6H,EAAQq1Q,EAAOvvY,GACrB,GAAqB,kBAAVk6H,EAAoB,CAE7B,IADAmlW,EAAcnlW,EAAMpiI,OACyB,KAAtCoiI,EAAMrgI,WAAWwle,EAAc,IACpC5+d,IACA4+d,IAEF,GAAIA,EAAa,MACjBA,GAAe,CACjB,MAEK,IAAe,IAAXnlW,EACPklW,GAAO,EACP3+d,SACK,IAAe,IAAXy5H,EAEJ,CAELl6H,IACA,KACF,CACF,CACA,GAAIS,EAAM,CACR,MAAMmmC,EAAQ,CACZtqC,KAAM8zd,IAAerhc,EAAOj3B,QAAUsne,GAAQ3+d,EAAO,EAAI,aAAe,oBACxE+4B,MAAO,CACL+/b,aAAcv5d,EAAQq/d,EAAcn3d,EAAKsxB,MAAM+/b,aAAe8F,EAC9Dp7I,OAAQ/7U,EAAKsxB,MAAMyqT,OAASjkV,EAC5BuiB,KAAMra,EAAKuxB,IAAIlX,KACfgvE,OAAQrpF,EAAKuxB,IAAI83D,OAAS9wF,EAC1B2rC,OAAQlkC,EAAKuxB,IAAI2S,OAAS3rC,GAE5Bg5B,IAAK,IACAvxB,EAAKuxB,MAGZvxB,EAAKuxB,IAAM,IACNmN,EAAMpN,OAEPtxB,EAAKsxB,MAAM4S,SAAWlkC,EAAKuxB,IAAI2S,OACjC/zC,OAAO+lB,OAAOlW,EAAM0+B,IAEpB7X,EAAOyvE,OAAO4xX,EAAY,EAAG,CAAC,QAASxpb,EAAOxpB,GAAU,CAAC,OAAQwpB,EAAOxpB,IACxEgzc,GAAc,EAElB,CACAA,GACF,CAEF,OAAOrhc,CACT,gQCtLO,SAAStN,EAAM5iB,GACpB,MAAMs/Q,EAAWt/Q,GAAW,CAAC,EAKvBgxE,EAAS,CACbu/Y,YAJF,OAAkB,CAAC,KAAuBjxM,EAASp2E,YAAc,KAK/DpuK,QAASzO,EAAO,KAChByoc,QAAS,GACT36d,SAAUkyB,EAAO,KACjBuwG,KAAMvwG,EAAO,KACbwV,KAAM,CAAC,EACPyjC,OAAQj5C,EAAO,MACf3oB,KAAM2oB,EAAO,OAEf,OAAO2kD,EAQP,SAAS3kD,EAAO6wG,GACd,OAEA,SAAiBnqH,GACf,OAAO,OAAgBi+D,EAAQksD,EAASnqH,EAC1C,CACF,CACF,iGC3CO,SAAS0td,EAAYvwc,GAC1B,OAAQ,OAAYA,KAGpB,OAAOA,CACT,sECAA,MAAMiN,EAAS,cAMR,SAASujc,IACd,IAKIC,EALAjuY,EAAS,EACT8e,EAAS,GAET72E,GAAQ,EAGZ,OAIA,SAAsB9gC,EAAO8od,EAAU/nb,GAErC,MAAM81W,EAAS,GAEf,IAAI1tX,EAEAwK,EAEAoxV,EAEAgiH,EAEA/0c,EACJhyB,EAAQ23G,GAA2B,kBAAV33G,EAAqBA,EAAMN,WAAa,IAAI+hK,YAAYqnT,QAAYtqc,GAAW8yB,OAAOtxC,IAC/G+kX,EAAgB,EAChBptQ,EAAS,GACL72E,IAE0B,QAAxB9gC,EAAMmB,WAAW,IACnB4jX,IAEFjkV,OAAQtiB,GAEV,KAAOumW,EAAgB/kX,EAAMZ,QAAQ,CAKnC,GAJAkkC,EAAO8gE,UAAY2gR,EACnB57V,EAAQma,EAAO5Z,KAAK1pB,GACpB+me,EAAc59c,QAAyB3K,IAAhB2K,EAAM7hB,MAAsB6hB,EAAM7hB,MAAQtH,EAAMZ,OACvE4yB,EAAOhyB,EAAMmB,WAAW4le,IACnB59c,EAAO,CACVwuF,EAAS33G,EAAMmJ,MAAM47W,GACrB,KACF,CACA,GAAa,KAAT/yV,GAAe+yV,IAAkBgiH,GAAeD,EAClDjwF,EAAO51Y,MAAM,GACb6le,OAAmBtod,OAUnB,OARIsod,IACFjwF,EAAO51Y,MAAM,GACb6le,OAAmBtod,GAEjBumW,EAAgBgiH,IAClBlwF,EAAO51Y,KAAKjB,EAAMmJ,MAAM47W,EAAegiH,IACvCluY,GAAUkuY,EAAchiH,GAElB/yV,GACN,KAAK,EAED6kX,EAAO51Y,KAAK,OACZ43F,IACA,MAEJ,KAAK,EAID,IAFAllE,EAA+B,EAAxB4B,KAAK87B,KAAKwnC,EAAS,GAC1Bg+S,EAAO51Y,MAAM,GACN43F,IAAWllE,GAAMkjX,EAAO51Y,MAAM,GACrC,MAEJ,KAAK,GAED41Y,EAAO51Y,MAAM,GACb43F,EAAS,EACT,MAEJ,QAEIiuY,GAAmB,EACnBjuY,EAAS,EAIjBksR,EAAgBgiH,EAAc,CAChC,CACIhmc,IACE+lc,GAAkBjwF,EAAO51Y,MAAM,GAC/B02G,GAAQk/R,EAAO51Y,KAAK02G,GACxBk/R,EAAO51Y,KAAK,OAEd,OAAO41Y,CACT,CACF,8GCtGO,SAASzpX,EAAM45c,EAAa/7c,GAEjC,MAAMy0B,EAAW,CAAC,EAEZunb,EAAS,CAAC,EAChB,IAAI3/d,GAAS,EAEb,OAASA,EAAQ0/d,EAAY5ne,QAC3BO,OAAO+lB,OAAOg6B,EAAUsnb,EAAY1/d,GAAOo4C,UAC3C//C,OAAO+lB,OAAOuhd,EAAQD,EAAY1/d,GAAO2/d,QAG3C,OAAO,IAAI,IAAOvnb,EAAUunb,EAAQh8c,EACtC,2BCPA,MAAMiwU,EAAM,CAAC,EAAEn8V,eAMR,SAASyzB,EAAOi0D,GAErB,MAAM/mC,EAAW,CAAC,EAEZunb,EAAS,CAAC,EAEhB,IAAI7kd,EAEJ,IAAKA,KAAQqkE,EAAWsvD,WACtB,GAAImlN,EAAIn7V,KAAK0mF,EAAWsvD,WAAY3zH,GAAO,CACzC,MAAMpiB,EAAQymF,EAAWsvD,WAAW3zH,GAC9BoV,EAAO,IAAI,IACfpV,EACAqkE,EAAWsZ,UAAUtZ,EAAW9kF,YAAc,CAAC,EAAGygB,GAClDpiB,EACAymF,EAAWx7D,OAIXw7D,EAAW6qH,iBACX7qH,EAAW6qH,gBAAgBzxM,SAASuiB,KAEpCoV,EAAK85K,iBAAkB,GAGzB5xJ,EAASt9B,GAAQoV,EAEjByvc,GAAO,EAAAz8N,EAAA,GAAUpoP,IAASA,EAC1B6kd,GAAO,EAAAz8N,EAAA,GAAUhzO,EAAKgmE,YAAcp7E,CACtC,CAGF,OAAO,IAAI,IAAOs9B,EAAUunb,EAAQxgZ,EAAWx7D,MACjD,CCvDO,MAAMi8c,EAAQ10c,EAAO,CAC1BvH,MAAO,QACP,SAAA80E,CAAU7uD,EAAG9uB,GACX,MAAO,SAAWA,EAAKjZ,MAAM,GAAGkjB,aAClC,EACA0pH,WAAY,CACVoxV,aAAc,KACdC,aAAc,KACdC,UAAW,KACXC,UAAW,KACXC,UAAW,KACXC,WAAY,KACZC,UAAW,QCZFC,EAAMl1c,EAAO,CACxBvH,MAAO,MACP,SAAA80E,CAAU7uD,EAAG9uB,GACX,MAAO,OAASA,EAAKjZ,MAAM,GAAGkjB,aAChC,EACA0pH,WAAY,CAAC8xG,QAAS,KAAMD,QAAS,KAAMG,SAAU,uBCAhD,SAAS4/O,EAAyBhme,EAAY+9C,GACnD,OAAO,OAAuB/9C,EAAY+9C,EAASrzB,cACrD,CCNO,MAAM7mB,EAAQgtB,EAAO,CAC1BvH,MAAO,QACPtpB,WAAY,CAACime,WAAY,eACzB7nY,UAAW4nY,EACX5xV,WAAY,CAACvwI,MAAO,KAAMqie,WAAY,uBCJjC,MAAMC,EAAOt1c,EAAO,CACzB,SAAAutE,CAAU7uD,EAAG9uB,GACX,MAAgB,SAATA,EAAkBA,EAAO,QAAUA,EAAKjZ,MAAM,GAAGkjB,aAC1D,EACA0pH,WAAY,CACVgyV,qBAAsB,KACtBC,WAAY,EAAAC,WACZC,iBAAkB,KAClBC,SAAU,EAAAF,WACVG,YAAa,EAAAH,WACbI,aAAc,EAAAl8a,OACdm8a,aAAc,EAAAn8a,OACdo8a,YAAa,EAAAp8a,OACbq8a,aAAc,EAAAC,eACdC,YAAa,KACb1W,gBAAiB,EAAAyW,eACjBE,YAAa,KACbC,aAAc,EAAAX,WACdY,eAAgB,EAAAJ,eAChBK,iBAAkB,KAClBC,aAAc,EAAAd,WACde,WAAY,EAAAP,eACZQ,YAAa,EAAAhB,WACbiB,aAAc,KACdC,WAAY,EAAAlB,WACZmB,YAAa,KACbC,iBAAkB,KAClBzuO,UAAW,KACX0uO,eAAgB,EAAAb,eAChBc,UAAW,EAAAp9a,OACXq9a,SAAU,KACVC,UAAW,EAAAxB,WACXyB,cAAe,EAAAzB,WACf0B,oBAAqB,EAAA1B,WACrB2B,gBAAiB,KACjBC,SAAU,EAAApB,eACVqB,gBAAiB,KACjBC,aAAc,EAAA59a,OACd69a,YAAa,EAAA/B,WACbgC,aAAc,EAAAhC,WACdiC,aAAc,KACdC,aAAc,EAAAlC,WACdmC,oBAAqB,EAAA3B,eACrB4B,aAAc,EAAAl+a,OACdm+a,aAAc,EAAAn+a,OACdo+a,YAAa,EAAAp+a,OACbq+a,aAAc,EAAAvC,WACdwC,YAAa,EAAAt+a,OACbu+a,SAAU,KACVC,aAAc,EAAAx+a,OACdy+a,aAAc,EAAAz+a,OACd0+a,aAAc,EAAA1+a,OACd2+a,cAAe,KACftvP,KAAM,QC7CGz7M,EAAOvN,EAAO,CACzBvH,MAAO,OACPtpB,WAAY,CACVope,cAAe,iBACfC,UAAW,QACXC,QAAS,MACTC,UAAW,cAEbnrY,UAAW4nY,EACXr2R,gBAAiB,CAAC,UAAW,WAAY,QAAS,YAClDv7D,WAAY,CAEVo1V,KAAM,KACN5qT,OAAQ,EAAAm9K,eACR9lH,cAAe,EAAA6wP,eACf5wP,UAAW,EAAA4wP,eACX3rb,OAAQ,KACRsub,MAAO,KACPtzP,gBAAiB,EAAAuzP,QACjBC,oBAAqB,EAAAD,QACrBE,eAAgB,EAAAF,QAChB3ie,IAAK,KACLuyH,GAAI,KACJowB,MAAO,EAAAggV,QACPtzP,eAAgB,KAChBC,aAAc,EAAAywP,eACdp0Q,UAAW,EAAAg3Q,QACXlkQ,SAAU,EAAAkkQ,QACVvoB,SAAU,EAAA2lB,eACVjyU,QAAS,KACT8hF,QAAS,KACT5mO,QAAS,EAAA25d,QACT9yP,KAAM,KACN/1O,UAAW,EAAAime,eACXhwP,KAAM,EAAAtsL,OACNusL,QAAS,KACTz3M,QAAS,KACTokL,gBAAiB,EAAA4iR,WACjB3gQ,SAAU,EAAA+jQ,QACVzyP,aAAc,EAAA6vP,eACd5vP,OAAQ,EAAA1sL,OAAS,EAAAuxS,eACjB5kH,YAAa,KACbtpO,KAAM,KACN4+C,SAAU,KACVo9a,SAAU,KACVrgb,QAAS,EAAAkgb,QACTnpW,MAAO,EAAAmpW,QACP/8T,IAAK,KACLm9T,QAAS,KACT7me,SAAU,EAAAyme,QACVpyP,SAAU,EAAAyyP,kBACVxyP,UAAW,EAAA+uP,WACX9uP,QAAS,KACTC,aAAc,KACduyP,cAAe,KACf9wQ,KAAM,KACNye,WAAY,KACZC,YAAa,KACbF,WAAY,KACZG,eAAgB,EAAA6xP,QAChB5xP,WAAY,KACZ78F,QAAS,EAAA6rV,eACTzle,OAAQ,EAAAmpD,OACRwtL,OAAQ,EAAA0xP,QACR31b,KAAM,EAAAyW,OACNjhD,KAAM,KACN0uO,SAAU,KACVhoO,QAAS,EAAA62d,eACT5uP,UAAW,EAAA4uP,eACXh3d,GAAI,KACJm6d,WAAY,KACZC,YAAa,KACbC,MAAO,EAAAT,QACPvxP,UAAW,KACXC,UAAW,KACX94I,GAAI,KACJ4T,MAAO,EAAAw2X,QACPhvV,OAAQ,KACR49F,SAAU,EAAAwuP,eACV7ge,QAAS,EAAA6ge,eACTvuP,UAAW,EAAAmxP,QACXlxP,SAAU,EAAAsuP,eACV1yd,KAAM,KACNpO,MAAO,KACP2yO,KAAM,KACNp8M,SAAU,KACV0hD,KAAM,KACNv9E,QAAS,KACTw2I,KAAM,EAAAwyV,QACN9wP,IAAK,EAAApuL,OACLquL,SAAU,KACVj4N,IAAK,KACL9Y,UAAW,EAAA0iD,OACXwuL,MAAO,KACP71N,OAAQ,KACRxC,IAAK,KACLu4N,UAAW,EAAA1uL,OACX+nK,SAAU,EAAAm3Q,QACVjkQ,MAAO,EAAAikQ,QACP7ge,KAAM,KACNy7N,MAAO,KACP6U,SAAU,EAAAuwP,QACVtwP,WAAY,EAAAswP,QACZhuM,QAAS,KACT0uM,aAAc,KACdC,WAAY,KACZC,cAAe,KACfC,cAAe,KACfC,eAAgB,KAChBC,eAAgB,KAChBC,OAAQ,KACR1hJ,SAAU,KACV2hJ,UAAW,KACXC,iBAAkB,KAClB5ie,SAAU,KACV7D,QAAS,KACT8+S,QAAS,KACT4nL,cAAe,KACfC,cAAe,KACfC,kBAAmB,KACnBC,OAAQ,KACRC,YAAa,KACbC,MAAO,KACPC,WAAY,KACZppQ,OAAQ,KACRqpQ,UAAW,KACXC,YAAa,KACbC,WAAY,KACZC,YAAa,KACbC,WAAY,KACZ3pQ,YAAa,KACb4pQ,OAAQ,KACRC,iBAAkB,KAClBC,UAAW,KACXC,QAAS,KACT1pd,QAAS,KACT2pd,QAAS,KACTC,WAAY,KACZC,aAAc,KACdC,QAAS,KACTC,UAAW,KACXhke,UAAW,KACXike,WAAY,KACZC,QAAS,KACTC,iBAAkB,KAClB7mQ,OAAQ,KACR8mQ,aAAc,KACd3mQ,iBAAkB,KAClB4mQ,UAAW,KACXC,YAAa,KACbtmT,UAAW,KACXumT,eAAgB,KAChB50S,YAAa,KACb60S,aAAc,KACdC,aAAc,KACdvwS,YAAa,KACbwwS,WAAY,KACZC,YAAa,KACb/vS,UAAW,KACXgwS,UAAW,KACXC,SAAU,KACVC,WAAY,KACZC,WAAY,KACZC,QAAS,KACTC,QAAS,KACTC,OAAQ,KACR9wC,UAAW,KACX+wC,WAAY,KACZ5pG,WAAY,KACZ6pG,aAAc,KACdC,mBAAoB,KACpBC,QAAS,KACTC,SAAU,KACVxuQ,SAAU,KACVyuQ,YAAa,KACbC,0BAA2B,KAC3BC,SAAU,KACVC,UAAW,KACXC,SAAU,KACVC,aAAc,KACdC,UAAW,KACXC,UAAW,KACXC,SAAU,KACVC,UAAW,KACXC,aAAc,KACdC,SAAU,KACVC,qBAAsB,KACtBC,SAAU,KACVC,eAAgB,KAChBnyC,UAAW,KACXl9N,QAAS,KACT3lM,KAAM,EAAAmwc,QACNrwP,QAAS,EAAA7uL,OACT3D,QAAS,KACT0yP,KAAM,EAAAutL,eACNrie,YAAa,KACb60O,YAAa,EAAAowP,QACb8E,QAAS,KACTC,cAAe,KACfC,oBAAqB,KACrBn1P,OAAQ,KACRC,QAAS,KACTG,SAAU,EAAA+vP,QACV9vP,eAAgB,KAChBpwO,IAAK,EAAAs9d,eACL5hb,SAAU,EAAAwkb,QACVh0S,SAAU,EAAAg0S,QACV5ge,KAAM,EAAA0hD,OACNsvL,QAAS,EAAAtvL,OACTuvL,QAAS,EAAA+sP,eACTl+P,MAAO,KACPoR,OAAQ,EAAA0vP,QACRxvP,SAAU,EAAAwvP,QACV36d,SAAU,EAAA26d,QACViF,mBAAoB,EAAAjF,QACpBkF,yBAA0B,EAAAlF,QAC1BmF,eAAgB,KAChBp1U,MAAO,KACPrzJ,KAAM,EAAAokD,OACN2vL,MAAO,KACP20P,KAAM,KACN10P,KAAM,EAAA5vL,OACN6vL,WAAY,EAAAisP,WACZx/d,IAAK,KACLwzO,OAAQ,KACRC,QAAS,KACTC,OAAQ,KACRr7M,MAAO,EAAAqrB,OACPtR,KAAM,KACNp4C,MAAO,KACP8H,SAAU,EAAA4hD,OACV7hD,OAAQ,KACR5E,MAAO,KACPqiQ,UAAW,KACXnkQ,KAAM,KACN8se,cAAe,EAAArF,QACfhvP,OAAQ,KACRr8O,MAAO,EAAAioe,WACPlle,MAAO,EAAAopD,OACP21C,KAAM,KACN6uY,mBAAoB,KAIpB1rE,MAAO,KACP2rE,MAAO,KACPC,QAAS,EAAApI,eACTtxU,KAAM,KACNqkQ,WAAY,KACZpzK,QAAS,KACTo/C,OAAQ,EAAAr7O,OACR2kb,YAAa,KACbC,aAAc,EAAA5kb,OACdgsL,YAAa,KACbC,YAAa,KACb9uL,KAAM,KACN0nb,QAAS,KACTC,QAAS,KACTvjd,MAAO,KACPsE,KAAM,KACNk/c,SAAU,KACVC,SAAU,KACVxsR,MAAO,KACPljF,QAAS,EAAA4pW,QACT+F,QAAS,EAAA/F,QACTjhe,MAAO,KACPine,KAAM,KACNx/c,MAAO,KACP6nN,YAAa,KACb43P,OAAQ,EAAAnlb,OACRolb,WAAY,EAAAplb,OACZ/gD,KAAM,KACNome,SAAU,KACVC,OAAQ,KACR/2P,aAAc,EAAAvuL,OACdsuL,YAAa,EAAAtuL,OACbulb,SAAU,EAAArG,QACVsG,OAAQ,EAAAtG,QACRuG,QAAS,EAAAvG,QACTwG,OAAQ,EAAAxG,QACR9+a,OAAQ,KACR6uL,QAAS,KACT02P,OAAQ,KACRC,IAAK,KACLC,YAAa,EAAA7lb,OACbmtC,MAAO,KACP2vP,OAAQ,KACRrtG,UAAW,EAAAqsP,WACXgK,QAAS,KACT71P,QAAS,KACTvyO,KAAM,KACNqoe,UAAW,EAAA/lb,OACXgmb,UAAW,KACXt5c,QAAS,KACTu5c,OAAQ,KACRC,MAAO,KACPC,OAAQ,EAAAnmb,OAGRomb,kBAAmB,KACnBt6P,YAAa,KACbC,SAAU,KACVa,wBAAyB,EAAAsyP,QACzBryP,sBAAuB,EAAAqyP,QACvBljb,OAAQ,KACRzI,SAAU,KACV6oC,QAAS,EAAAp8B,OACTi4L,SAAU,KACVgC,aAAc,QCrTLosP,EAAMhgd,EAAO,CACxBvH,MAAO,MACPtpB,WAAY,CACV66O,aAAc,gBACdG,kBAAmB,qBACnBI,WAAY,cACZM,cAAe,iBACfM,UAAW,aACXn7O,UAAW,QACXq7O,SAAU,YACVjwO,SAAU,YACVmwO,mBAAoB,sBACpBC,0BAA2B,8BAC3BC,aAAc,gBACdC,eAAgB,kBAChBpF,YAAa,cACb25P,SAAU,WACV9zP,iBAAkB,oBAClBM,iBAAkB,oBAClB1jO,YAAa,eACb5N,SAAU,YACV2xO,WAAY,cACZ9nC,aAAc,gBACdjiH,WAAY,cACZd,SAAU,YACV+qJ,eAAgB,mBAChBC,YAAa,eACbz9O,UAAW,aACX09O,YAAa,eACbhrJ,WAAY,cACZqrJ,UAAW,aACXC,2BAA4B,+BAC5BC,yBAA0B,6BAC1BrG,SAAU,WACV0G,UAAW,cACXC,aAAc,iBACdmyP,aAAc,iBACdjyP,eAAgB,kBAChB9rJ,cAAe,iBACf4sJ,cAAe,iBACfG,UAAW,aACXE,UAAW,aACXC,YAAa,eACb8wP,QAAS,WACTC,YAAa,gBACbC,aAAc,iBACdC,QAAS,WACTC,QAAS,WACTC,QAAS,WACTC,SAAU,YACVC,MAAO,SACPC,UAAW,cACXC,WAAY,eACZ/1M,QAAS,UACTg2M,WAAY,aACZtH,aAAc,eACdG,cAAe,gBACfoH,QAAS,UACT3oJ,SAAU,WACV2hJ,UAAW,YACXC,iBAAkB,mBAClB5ie,SAAU,WACV7D,QAAS,UACT8+S,QAAS,UACT+nL,OAAQ,SACRC,YAAa,cACbC,MAAO,QACPC,WAAY,aACZppQ,OAAQ,SACRqpQ,UAAW,YACXC,YAAa,cACbC,WAAY,aACZC,YAAa,cACbC,WAAY,aACZ3pQ,YAAa,cACb4pQ,OAAQ,SACRC,iBAAkB,mBAClBC,UAAW,YACXiG,MAAO,QACPhG,QAAS,UACT1pd,QAAS,UACT2pd,QAAS,UACTgG,UAAW,YACXC,WAAY,aACZ/F,aAAc,eACdC,QAAS,UACTC,UAAW,YACXhke,UAAW,YACXike,WAAY,aACZC,QAAS,UACT5mQ,OAAQ,SACR8mQ,aAAc,eACd3mQ,iBAAkB,mBAClB6mQ,YAAa,cACbtmT,UAAW,YACX2R,YAAa,cACb60S,aAAc,eACdC,aAAc,eACdvwS,YAAa,cACbwwS,WAAY,aACZC,YAAa,cACb/vS,UAAW,YACXk1S,aAAc,eACdlF,UAAW,YACXC,SAAU,WACVC,WAAY,aACZC,WAAY,aACZC,QAAS,UACTC,QAAS,UACTC,OAAQ,SACR9wC,UAAW,YACX+wC,WAAY,aACZ5pG,WAAY,aACZ6pG,aAAc,eACd2E,SAAU,WACVzE,QAAS,UACTC,SAAU,WACVxuQ,SAAU,WACV2uQ,SAAU,WACVC,UAAW,YACXC,SAAU,WACVoE,OAAQ,SACRlE,UAAW,YACXC,UAAW,YACXC,SAAU,WACVC,UAAW,YACXC,aAAc,eACdC,SAAU,WACVE,SAAU,WACVC,eAAgB,iBAChBnyC,UAAW,YACX81C,OAAQ,SACRtxP,iBAAkB,oBAClBC,kBAAmB,qBACnBC,WAAY,cACZC,QAAS,WACTK,cAAe,iBACfxH,eAAgB,iBAChBmI,gBAAiB,mBACjBW,eAAgB,kBAChBY,UAAW,aACXxtC,YAAa,eACbytC,sBAAuB,yBACvBC,uBAAwB,0BACxB2uP,gBAAiB,mBACjBC,iBAAkB,oBAClBC,cAAe,iBACfC,eAAgB,kBAChBC,iBAAkB,oBAClBr8R,cAAe,iBACf5wM,YAAa,eACbsD,SAAU,WACVk7O,WAAY,cACZzwJ,eAAgB,kBAChB0wJ,cAAe,iBACfyuP,gBAAiB,mBACjBn9P,OAAQ,SACR8O,kBAAmB,qBACnBC,mBAAoB,sBACpBE,YAAa,eACbC,aAAc,gBACdC,WAAY,eACZE,YAAa,eACbK,SAAU,YACVC,aAAc,gBACdG,cAAe,iBACfR,aAAc,gBACdC,SAAU,aACVC,YAAa,gBACbC,YAAa,gBACbtxJ,YAAa,eACb8xJ,YAAa,eACbI,QAAS,WAET+sP,cAAe,gBACfC,cAAe,iBAEjBt0Y,UAAW,IACXg2C,WAAY,CACVwmG,MAAO,EAAA+3P,sBACP93P,aAAc,EAAArwL,OACdswL,WAAY,KACZC,SAAU,KACVC,kBAAmB,KACnBE,WAAY,EAAA1wL,OACZ2wL,UAAW,EAAA3wL,OACX4wL,WAAY,KACZC,OAAQ,EAAA7wL,OACRsyC,cAAe,KACfw+I,cAAe,KACfE,QAAS,EAAAhxL,OACT01X,UAAW,KACXxkM,cAAe,KACfD,cAAe,KACfE,YAAa,KACbC,KAAM,KACNC,MAAO,KACPC,KAAM,EAAAtxL,OACN01F,GAAI,KACJ67F,SAAU,KACVC,UAAW,EAAAxxL,OACX3pD,UAAW,EAAAime,eACX7qP,KAAM,KACNC,SAAU,KACVC,cAAe,KACflwO,SAAU,KACV+2M,MAAO,KACPo5B,mBAAoB,KACpBC,0BAA2B,KAC3BC,aAAc,KACdC,eAAgB,KAChBj9M,QAAS,KACTk9M,kBAAmB,KACnBC,iBAAkB,KAClBtF,YAAa,KACbx/D,OAAQ,KACR5sK,GAAI,KACJC,GAAI,KACJjM,EAAG,KACH+xe,SAAU,KACV8B,cAAe,KACfh2P,QAAS,EAAApyL,OACTqyL,gBAAiB,EAAAryL,OACjBsyL,UAAW,KACXviO,QAAS,KACT0iO,IAAK,KACLF,QAAS,EAAAvyL,OACTwyL,iBAAkB,KAClB1F,SAAU,EAAAoyP,QACVxsP,GAAI,KACJC,GAAI,KACJC,SAAU,KACVy1P,SAAU,KACVx1P,UAAW,EAAA7yL,OACX8yL,iBAAkB,KAClBl+M,IAAK,KACL32B,MAAO,KACP80O,SAAU,EAAA/yL,OACVgzL,0BAA2B,KAC3Bn7O,KAAM,KACNuX,YAAa,EAAA4wC,OACbx+C,SAAU,KACVic,OAAQ,KACRw1N,UAAW,KACXC,YAAa,KACbC,WAAY,KACZ9nC,aAAc,KACd+nC,UAAW,KACXk1P,eAAgB,KAChBl/Y,WAAY,KACZd,SAAU,KACV+qJ,eAAgB,KAChBC,YAAa,KACbz9O,UAAW,KACX09O,YAAa,KACbhrJ,WAAY,KACZvjC,OAAQ,KACRujb,GAAI,KACJx7d,KAAM,KACNymO,GAAI,KACJC,GAAI,KACJC,GAAI,EAAA69G,eACJ59G,GAAI,EAAA49G,eACJ39G,UAAW,EAAA29G,eACX19G,2BAA4B,KAC5BC,yBAA0B,KAC1BC,SAAU,KACVC,kBAAmB,KACnBC,cAAe,KACfjtG,QAAS,KACTktG,QAAS,EAAAl0L,OACTwob,kBAAmB,KACnBC,WAAY,KACZ5xe,OAAQ,KACRkI,KAAM,KACN0uO,SAAU,KACV0G,UAAW,EAAAn0L,OACXo0L,aAAc,EAAAp0L,OACdumb,aAAc,EAAAvmb,OACd16C,GAAI,KACJ+uO,YAAa,EAAAr0L,OACbs0L,eAAgB,KAChBo0P,kBAAmB,KACnBl0P,GAAI,KACJD,IAAK,KACLG,UAAW,EAAA10L,OACXvoC,EAAG,EAAAuoC,OACHk7B,GAAI,EAAAl7B,OACJ4yB,GAAI,EAAA5yB,OACJ20L,GAAI,EAAA30L,OACJ40L,GAAI,EAAA50L,OACJ60L,aAAc,EAAAszP,sBACdrzP,iBAAkB,KAClBE,UAAW,KACXC,WAAY,KACZC,SAAU,KACVH,QAAS,KACT5G,KAAM,KACNgH,aAAc,KACd3sJ,cAAe,KACf4sJ,cAAe,KACfC,kBAAmB,EAAAr1L,OACnBs1L,MAAO,KACPC,UAAW,KACXE,UAAW,KACXC,YAAa,KACbF,aAAc,KACdG,YAAa,KACbC,YAAa,KACbC,KAAM,KACNC,iBAAkB,KAClBC,UAAW,KACXC,aAAc,KACd5/N,IAAK,KACLo4N,MAAO,KACPm6P,uBAAwB,KACxBC,sBAAuB,KACvBt3Q,UAAW,EAAAtxK,OACX6ob,UAAW,KACXlwd,OAAQ,KACRxC,IAAK,KACLvP,KAAM,KACNvI,KAAM,KACNmoe,QAAS,KACTC,YAAa,KACbC,aAAc,KACdC,QAAS,KACTC,QAAS,KACTC,QAAS,KACTC,SAAU,KACVC,MAAO,KACPC,UAAW,KACXC,WAAY,KACZhxP,WAAY,KACZvtM,SAAU,KACVnB,OAAQ,KACR2pP,QAAS,KACTg2M,WAAY,KACZtH,aAAc,KACdG,cAAe,KACfoH,QAAS,KACT3oJ,SAAU,KACV2hJ,UAAW,KACXC,iBAAkB,KAClB5ie,SAAU,KACV7D,QAAS,KACT8+S,QAAS,KACT+nL,OAAQ,KACRC,YAAa,KACbC,MAAO,KACPC,WAAY,KACZppQ,OAAQ,KACRqpQ,UAAW,KACXC,YAAa,KACbC,WAAY,KACZC,YAAa,KACbC,WAAY,KACZ3pQ,YAAa,KACb4pQ,OAAQ,KACRC,iBAAkB,KAClBC,UAAW,KACXiG,MAAO,KACPhG,QAAS,KACT1pd,QAAS,KACT2pd,QAAS,KACTgG,UAAW,KACXC,WAAY,KACZ/F,aAAc,KACdC,QAAS,KACTC,UAAW,KACXhke,UAAW,KACXike,WAAY,KACZC,QAAS,KACT5mQ,OAAQ,KACR8mQ,aAAc,KACd3mQ,iBAAkB,KAClB6mQ,YAAa,KACbtmT,UAAW,KACX2R,YAAa,KACb60S,aAAc,KACdC,aAAc,KACdvwS,YAAa,KACbwwS,WAAY,KACZC,YAAa,KACb/vS,UAAW,KACXk1S,aAAc,KACdlF,UAAW,KACXC,SAAU,KACVC,WAAY,KACZC,WAAY,KACZC,QAAS,KACTC,QAAS,KACTC,OAAQ,KACR9wC,UAAW,KACX+wC,WAAY,KACZ5pG,WAAY,KACZ6pG,aAAc,KACd2E,SAAU,KACVzE,QAAS,KACTC,SAAU,KACVxuQ,SAAU,KACV2uQ,SAAU,KACVC,UAAW,KACXC,SAAU,KACVoE,OAAQ,KACRlE,UAAW,KACXC,UAAW,KACXC,SAAU,KACVC,UAAW,KACXC,aAAc,KACdC,SAAU,KACVE,SAAU,KACVC,eAAgB,KAChBnyC,UAAW,KACX81C,OAAQ,KACR38R,QAAS,KACTmrC,SAAU,KACVniO,MAAO,KACPoiO,OAAQ,KACRlkN,YAAa,KACb8lB,OAAQ,KACRunK,SAAU,KACVwpR,QAAS,KACT1yP,iBAAkB,EAAAp2L,OAClBq2L,kBAAmB,EAAAr2L,OACnBs2L,WAAY,KACZC,QAAS,KACTp3O,KAAM,KACNq3O,WAAY,EAAAx2L,OACZy2L,oBAAqB,KACrBC,iBAAkB,KAClBC,aAAc,KACdoyP,MAAO,KACPh6L,KAAM,EAAAutL,eACN0M,MAAO,KACPf,cAAe,KACfrxP,cAAe,KACfC,OAAQ,KACRC,UAAW,EAAA92L,OACX+2L,UAAW,EAAA/2L,OACXg3L,UAAW,EAAAh3L,OACXi3L,cAAe,KACfC,oBAAqB,KACrBC,eAAgB,KAChB8xP,UAAW,KACX11b,SAAU,EAAA40b,sBACVj0e,EAAG,KACHkjP,OAAQ,KACRhI,eAAgB,KAChBiI,KAAM,KACNC,KAAM,KACNt4O,IAAK,EAAAmpe,sBACLvC,IAAK,EAAAuC,sBACL5wP,gBAAiB,KACjBC,YAAa,KACbC,UAAW,KACXC,mBAAoB,EAAAywP,sBACpBxwP,iBAAkB,EAAAwwP,sBAClBe,cAAe,EAAAf,sBACfgB,gBAAiB,EAAAhB,sBACjBvwP,SAAU,KACVC,QAAS,KACTvgP,OAAQ,KACRwgP,OAAQ,KACRC,GAAI,KACJC,GAAI,KACJppD,MAAO,KACP9zG,KAAM,KACNo9J,eAAgB,KAChBkxP,KAAM,KACNjxP,MAAO,KACPkxP,aAAc,KACdhxP,iBAAkB,EAAAr4L,OAClBs4L,iBAAkB,EAAAt4L,OAClBw4L,aAAc,KACdJ,QAAS,KACTK,YAAa,KACbC,aAAc,KACdC,MAAO,KACPC,MAAO,KACPC,YAAa,KACbC,UAAW,KACXxtC,YAAa,KACbytC,sBAAuB,EAAA/4L,OACvBg5L,uBAAwB,EAAAh5L,OACxBsf,OAAQ,KACR1nE,OAAQ,KACR+ve,gBAAiB,EAAAQ,sBACjBP,iBAAkB,KAClBC,cAAe,KACfC,eAAgB,KAChBC,iBAAkB,EAAA/nb,OAClB0rJ,cAAe,EAAA1rJ,OACfllD,YAAa,KACbxE,MAAO,KACP4iP,aAAc,EAAAl5L,OACdspb,aAAc,KACdC,oBAAqB,KACrBC,WAAY,KACZC,cAAe,KACfC,qBAAsB,KACtB73c,eAAgB,EAAAs2c,sBAChB/pe,SAAU,EAAA4hD,OACVm5L,YAAa,KACbh7O,OAAQ,KACRi7O,QAAS,EAAAp5L,OACTq5L,QAAS,EAAAr5L,OACTs5L,WAAY,KACZzwJ,eAAgB,KAChB0wJ,cAAe,KACf37O,WAAY,KACZsqe,cAAe,KACf3ue,MAAO,KACPowe,kBAAmB,KACnBlye,KAAM,KACNozO,OAAQ,EAAAs9P,sBACRvxc,GAAI,KACJg9D,UAAW,KACXo0Y,gBAAiB,KACjBvuP,GAAI,KACJC,GAAI,KACJC,kBAAmB,EAAA35L,OACnB45L,mBAAoB,EAAA55L,OACpB65L,QAAS,KACTC,YAAa,KACbC,aAAc,KACdC,WAAY,EAAAh6L,OACZmf,OAAQ,KACR+6K,YAAa,EAAAl6L,OACb26L,cAAe,EAAA36L,OACfm6L,aAAc,KACdI,SAAU,EAAAv6L,OACVw6L,aAAc,EAAAx6L,OACdtzB,QAAS,KACT0tN,SAAU,EAAAp6L,OACVq6L,YAAa,EAAAr6L,OACbs6L,YAAa,EAAAt6L,OACb5mD,QAAS,KACTqhP,WAAY,KACZC,WAAY,KACZ9jP,MAAO,KACPikP,OAAQ,KACR7xJ,YAAa,KACb8xJ,YAAa,KACbplO,EAAG,KACHqlO,GAAI,KACJC,GAAI,KACJC,iBAAkB,KAClBC,QAAS,EAAAl7L,OACTpV,EAAG,KACHixM,GAAI,KACJC,GAAI,KACJC,iBAAkB,KAClBpwM,EAAG,KACHqwM,WAAY,QCpiBH,EAAO/6N,EAAM,CAACs6c,EAAKR,EAAO1he,EAAOsie,EAAM/nc,GAAW,QAClD,EAAM3S,EAAM,CAACs6c,EAAKR,EAAO1he,EAAOsie,EAAM0K,GAAU,4JCT7D,MAAMr7N,EAAQ,kBACR4+N,EAAO,UACPj6X,EAAM,SAOL,SAAShwF,EAAK7I,EAAQjjB,GAC3B,MAAMine,GAAS,OAAUjne,GACzB,IAAIoiB,EAAOpiB,EACPg9J,EAAO,IAEX,GAAIiqU,KAAUhkd,EAAOgkd,OACnB,OAAOhkd,EAAOy8B,SAASz8B,EAAOgkd,OAAOA,IAGvC,GAAIA,EAAO7ne,OAAS,GAA4B,SAAvB6ne,EAAO99d,MAAM,EAAG,IAAiBguQ,EAAMnyP,KAAKhlB,GAAQ,CAE3E,GAAwB,MAApBA,EAAMiJ,OAAO,GAAY,CAE3B,MAAM3G,EAAOtC,EAAMmJ,MAAM,GAAG2C,QAAQiqe,EAAMC,GAC1C5zd,EAAO,OAAS9f,EAAK2G,OAAO,GAAGC,cAAgB5G,EAAK6G,MAAM,EAC5D,KAAO,CAEL,MAAM7G,EAAOtC,EAAMmJ,MAAM,GAEzB,IAAK4se,EAAK/wd,KAAK1iB,GAAO,CACpB,IAAI2ze,EAAS3ze,EAAKwJ,QAAQgwG,EAAKo6X,GAEN,MAArBD,EAAOhte,OAAO,KAChBgte,EAAS,IAAMA,GAGjBj2e,EAAQ,OAASi2e,CACnB,CACF,CAEAj5U,EAAO,GACT,CAEA,OAAO,IAAIA,EAAK56I,EAAMpiB,EACxB,CAMA,SAASk2e,EAAM3hO,GACb,MAAO,IAAMA,EAAGloP,aAClB,CAMA,SAAS2pd,EAAUzhO,GACjB,OAAOA,EAAGtrQ,OAAO,GAAGC,aACtB,sEC1DO,MAAMite,EAAc,CACzBlF,QAAS,UACTwB,SAAU,WACVp2V,OAAQ,SACRy3V,gBAAiB,kBACjBC,iBAAkB,mBAClBC,cAAe,gBACfC,eAAgB,iBAChBC,iBAAkB,mBAClBl9P,OAAQ,SACRmwP,aAAc,eACdC,aAAc,eACdC,UAAW,YACXC,UAAW,YACXC,UAAW,YACXC,WAAY,aACZC,UAAW,YACXI,WAAY,kDCtBP,SAASr9N,EAAUxqQ,GACxB,OAAOA,EAAMqsB,aACf,qECDO,SAAS+pd,EAAuBz0e,EAAY67F,GACjD,OAAOA,KAAa77F,EAAaA,EAAW67F,GAAaA,CAC3D,+HCFA,MAAM64Y,EAAS12e,OAAOiC,KAAK,GAEpB,MAAM00e,UAAoB,IAQ/B,WAAA7uc,CAAYiY,EAAU89C,EAAWwkJ,EAAM/2N,GACrC,IAAI3jB,GAAS,EAMb,GAJA0kC,MAAM0T,EAAU89C,GAEhB+4Y,EAAK3wd,KAAM,QAASqF,GAEA,kBAAT+2N,EACT,OAAS16O,EAAQ+ue,EAAOj3e,QAAQ,CAC9B,MAAMu5L,EAAQ09S,EAAO/ue,GACrBive,EAAK3wd,KAAMywd,EAAO/ue,IAAS06O,EAAO,EAAMrpD,MAAY,EAAMA,GAC5D,CAEJ,EAUF,SAAS49S,EAAKjra,EAAQxrE,EAAKE,GACrBA,IAEFsrE,EAAOxrE,GAAOE,EAElB,CAZAs2e,EAAY12e,UAAUq7d,SAAU,sEC/BzB,MAAMub,EAMX,WAAA/uc,CAAYiY,EAAU89C,GAEpB53E,KAAK85B,SAAWA,EAEhB95B,KAAK43E,UAAYA,CACnB,EAIFg5Y,EAAK52e,UAAUqrB,MAAQ,KACvBurd,EAAK52e,UAAUyre,SAAU,EACzBmL,EAAK52e,UAAUqoe,YAAa,EAC5BuO,EAAK52e,UAAU8re,mBAAoB,EACnC8K,EAAK52e,UAAUusD,QAAS,EACxBqqb,EAAK52e,UAAU89V,gBAAiB,EAChC84I,EAAK52e,UAAU6oe,gBAAiB,EAChC+N,EAAK52e,UAAU00e,uBAAwB,EACvCkC,EAAK52e,UAAU0xM,iBAAkB,EACjCklS,EAAK52e,UAAUq7d,SAAU,sEClBlB,MAAMwb,EAOX,WAAAhvc,CAAYiY,EAAUunb,EAAQh8c,GAC5BrF,KAAK85B,SAAWA,EAChB95B,KAAKqhd,OAASA,EACVh8c,IACFrF,KAAKqF,MAAQA,EAEjB,EAIFwrd,EAAO72e,UAAU8/C,SAAW,CAAC,EAE7B+2b,EAAO72e,UAAUqne,OAAS,CAAC,EAE3BwP,EAAO72e,UAAUqrB,MAAQ,4SC3BzB,IAAIyrd,EAAS,EAEN,MAAMrL,EAAUzpV,IACVqmV,EAAarmV,IACb8pV,EAAoB9pV,IACpBz1F,EAASy1F,IACT6mV,EAAiB7mV,IACjB87M,EAAiB97M,IACjB0yV,EAAwB1yV,IAErC,SAASA,IACP,OAAO,KAAO80V,CAChB,6SCZA,MAAMxoc,EAAQ,eACRyoc,EAAgB,IAAI1nd,OAAO,IAAMif,EAAQ,aAAc,MACvD0oc,EAAe,IAAI3nd,OAAO,IAAMif,EAAQ,KAAM,MAEpD,SAAS2oc,EAAiBtjZ,EAAY5pE,GACrC,IAEC,MAAO,CAACkpB,mBAAmB0gD,EAAW/uE,KAAK,KAC5C,CAAE,MAEF,CAEA,GAA0B,IAAtB+uE,EAAWn0F,OACd,OAAOm0F,EAGR5pE,EAAQA,GAAS,EAGjB,MAAMtP,EAAOk5E,EAAWpqF,MAAM,EAAGwgB,GAC3B1L,EAAQs1E,EAAWpqF,MAAMwgB,GAE/B,OAAOnqB,MAAMI,UAAU+hB,OAAO5hB,KAAK,GAAI82e,EAAiBx8d,GAAOw8d,EAAiB54d,GACjF,CAEA,SAASqzB,EAAOlH,GACf,IACC,OAAOyI,mBAAmBzI,EAC3B,CAAE,MACD,IAAIrgB,EAASqgB,EAAMjhB,MAAMwtd,IAAkB,GAE3C,IAAK,IAAIx3e,EAAI,EAAGA,EAAI4qB,EAAO3qB,OAAQD,IAGlC4qB,GAFAqgB,EAAQysc,EAAiB9sd,EAAQ5qB,GAAGqlB,KAAK,KAE1B2E,MAAMwtd,IAAkB,GAGxC,OAAOvsc,CACR,CACD,CAsCe,SAAS0sc,EAAmBC,GAC1C,GAA0B,kBAAfA,EACV,MAAM,IAAIjvd,UAAU,6DAA+Divd,EAAa,KAGjG,IAEC,OAAOlkc,mBAAmBkkc,EAC3B,CAAE,MAED,OA9CF,SAAkC3sc,GAEjC,MAAM4sc,EAAa,CAClB,SAAU,eACV,SAAU,gBAGX,IAAI7td,EAAQytd,EAAaltd,KAAK0gB,GAC9B,KAAOjhB,GAAO,CACb,IAEC6td,EAAW7td,EAAM,IAAM0pB,mBAAmB1pB,EAAM,GACjD,CAAE,MACD,MAAM1lB,EAAS6tC,EAAOnoB,EAAM,IAExB1lB,IAAW0lB,EAAM,KACpB6td,EAAW7td,EAAM,IAAM1lB,EAEzB,CAEA0lB,EAAQytd,EAAaltd,KAAK0gB,EAC3B,CAGA4sc,EAAW,OAAS,SAEpB,MAAMtkc,EAAU/yC,OAAOiC,KAAKo1e,GAE5B,IAAK,MAAMl3e,KAAO4yC,EAEjBtI,EAAQA,EAAMt+B,QAAQ,IAAImjB,OAAOnvB,EAAK,KAAMk3e,EAAWl3e,IAGxD,OAAOsqC,CACR,CAYS6sc,CAAyBF,EACjC,CACD,CCzFe,SAASG,EAAazra,EAAQvJ,GAC5C,GAAwB,kBAAXuJ,GAA4C,kBAAdvJ,EAC1C,MAAM,IAAIp6C,UAAU,iDAGrB,GAAe,KAAX2jD,GAA+B,KAAdvJ,EACpB,MAAO,GAGR,MAAM10B,EAAiBi+B,EAAOzqE,QAAQkhE,GAEtC,OAAwB,IAApB10B,EACI,GAGD,CACNi+B,EAAOtiE,MAAM,EAAGqkC,GAChBi+B,EAAOtiE,MAAMqkC,EAAiB00B,EAAU9iE,QAE1C,CCnBO,SAASw+b,EAAYrxY,EAAQyf,GACnC,MAAMvoE,EAAS,CAAC,EAEhB,GAAIjE,MAAMC,QAAQusE,GACjB,IAAK,MAAMlsE,KAAOksE,EAAW,CAC5B,MAAM4vB,EAAaj8F,OAAOo4C,yBAAyBwU,EAAQzsD,GACvD87F,GAAY9kD,YACfn3C,OAAOg5C,eAAel1C,EAAQ3D,EAAK87F,EAErC,MAGA,IAAK,MAAM97F,KAAOi5C,QAAQG,QAAQqT,GAAS,CAC1C,MAAMqvC,EAAaj8F,OAAOo4C,yBAAyBwU,EAAQzsD,GAC3D,GAAI87F,EAAW9kD,WAAY,CAEtBk1B,EAAUlsE,EADAysD,EAAOzsD,GACKysD,IACzB5sD,OAAOg5C,eAAel1C,EAAQ3D,EAAK87F,EAErC,CACD,CAGD,OAAOn4F,CACR,CCpBA,MAAM0ze,EAAoBn3e,GAAmB,OAAVA,QAA4Bwe,IAAVxe,EAG/Co3e,EAAkB3ra,GAAUjwC,mBAAmBiwC,GAAQ3/D,QAAQ,YAAY+V,GAAK,IAAIA,EAAE1gB,WAAW,GAAGzB,SAAS,IAAIwJ,kBAEjHmue,EAA2Bx+b,OAAO,4BA8OxC,SAASy+b,EAA6Bt3e,GACrC,GAAqB,kBAAVA,GAAuC,IAAjBA,EAAMZ,OACtC,MAAM,IAAI0oB,UAAU,uDAEtB,CAEA,SAASu4I,EAAOrgK,EAAOmG,GACtB,OAAIA,EAAQk6J,OACJl6J,EAAQoud,OAAS6iB,EAAgBp3e,GAASw7B,mBAAmBx7B,GAG9DA,CACR,CAEA,SAAS,EAAOA,EAAOmG,GACtB,OAAIA,EAAQmrC,OACJ,EAAgBtxC,GAGjBA,CACR,CAEA,SAASu3e,EAAWntc,GACnB,OAAI5qC,MAAMC,QAAQ2qC,GACVA,EAAM+a,OAGO,kBAAV/a,EACHmtc,EAAW53e,OAAOiC,KAAKwoC,IAC5B+a,MAAK,CAAC5kD,EAAGu3B,IAAMtP,OAAOjoB,GAAKioB,OAAOsP,KAClCp0B,KAAI5D,GAAOsqC,EAAMtqC,KAGbsqC,CACR,CAEA,SAASotc,EAAWptc,GACnB,MAAMqtc,EAAYrtc,EAAMppC,QAAQ,KAKhC,OAJmB,IAAfy2e,IACHrtc,EAAQA,EAAMjhC,MAAM,EAAGsue,IAGjBrtc,CACR,CAYA,SAAS7qC,EAAWS,EAAOmG,GAO1B,OANIA,EAAQuxe,eAAiBlvd,OAAOtB,MAAMsB,OAAOxoB,KAA6B,kBAAVA,GAAuC,KAAjBA,EAAM24F,OAC/F34F,EAAQwoB,OAAOxoB,IACLmG,EAAQwxe,eAA2B,OAAV33e,GAA2C,SAAxBA,EAAMqsB,eAAoD,UAAxBrsB,EAAMqsB,gBAC9FrsB,EAAgC,SAAxBA,EAAMqsB,eAGRrsB,CACR,CAEO,SAAS43e,EAAQxtc,GAEvB,MAAM2I,GADN3I,EAAQotc,EAAWptc,IACMppC,QAAQ,KACjC,OAAoB,IAAhB+xC,EACI,GAGD3I,EAAMjhC,MAAM4pC,EAAa,EACjC,CAEO,SAAShqB,EAAM+rH,EAAO3uI,GAW5Bmxe,GAVAnxe,EAAU,CACTmrC,QAAQ,EACR6T,MAAM,EACN0yb,YAAa,OACbC,qBAAsB,IACtBJ,cAAc,EACdC,eAAe,KACZxxe,IAGiC2xe,sBAErC,MAAMr4a,EApMP,SAA8Bt5D,GAC7B,IAAI1C,EAEJ,OAAQ0C,EAAQ0xe,aACf,IAAK,QACJ,MAAO,CAAC/3e,EAAKE,EAAO+7F,KACnBt4F,EAAS,YAAYimB,KAAK5pB,GAE1BA,EAAMA,EAAIgM,QAAQ,UAAW,IAExBrI,QAKoB+a,IAArBu9E,EAAYj8F,KACfi8F,EAAYj8F,GAAO,CAAC,GAGrBi8F,EAAYj8F,GAAK2D,EAAO,IAAMzD,GAR7B+7F,EAAYj8F,GAAOE,CAQe,EAIrC,IAAK,UACJ,MAAO,CAACF,EAAKE,EAAO+7F,KACnBt4F,EAAS,SAASimB,KAAK5pB,GACvBA,EAAMA,EAAIgM,QAAQ,OAAQ,IAErBrI,OAKoB+a,IAArBu9E,EAAYj8F,GAKhBi8F,EAAYj8F,GAAO,IAAIi8F,EAAYj8F,GAAME,GAJxC+7F,EAAYj8F,GAAO,CAACE,GALpB+7F,EAAYj8F,GAAOE,CAS2B,EAIjD,IAAK,uBACJ,MAAO,CAACF,EAAKE,EAAO+7F,KACnBt4F,EAAS,WAAWimB,KAAK5pB,GACzBA,EAAMA,EAAIgM,QAAQ,SAAU,IAEvBrI,OAKoB+a,IAArBu9E,EAAYj8F,GAKhBi8F,EAAYj8F,GAAO,IAAIi8F,EAAYj8F,GAAME,GAJxC+7F,EAAYj8F,GAAO,CAACE,GALpB+7F,EAAYj8F,GAAOE,CAS2B,EAIjD,IAAK,QACL,IAAK,YACJ,MAAO,CAACF,EAAKE,EAAO+7F,KACnB,MAAMt8F,EAA2B,kBAAVO,GAAsBA,EAAMH,SAASsG,EAAQ2xe,sBAC9DC,EAAmC,kBAAV/3e,IAAuBP,GAAW,EAAOO,EAAOmG,GAAStG,SAASsG,EAAQ2xe,sBACzG93e,EAAQ+3e,EAAiB,EAAO/3e,EAAOmG,GAAWnG,EAClD,MAAMkmF,EAAWzmF,GAAWs4e,EAAiB/3e,EAAM2pB,MAAMxjB,EAAQ2xe,sBAAsBp0e,KAAIiM,GAAQ,EAAOA,EAAMxJ,KAAuB,OAAVnG,EAAiBA,EAAQ,EAAOA,EAAOmG,GACpK41F,EAAYj8F,GAAOomF,CAAQ,EAI7B,IAAK,oBACJ,MAAO,CAACpmF,EAAKE,EAAO+7F,KACnB,MAAMt8F,EAAU,SAASulB,KAAKllB,GAG9B,GAFAA,EAAMA,EAAIgM,QAAQ,OAAQ,KAErBrM,EAEJ,YADAs8F,EAAYj8F,GAAOE,EAAQ,EAAOA,EAAOmG,GAAWnG,GAIrD,MAAMg4e,EAAuB,OAAVh4e,EAChB,GACAA,EAAM2pB,MAAMxjB,EAAQ2xe,sBAAsBp0e,KAAIiM,GAAQ,EAAOA,EAAMxJ,UAE7CqY,IAArBu9E,EAAYj8F,GAKhBi8F,EAAYj8F,GAAO,IAAIi8F,EAAYj8F,MAASk4e,GAJ3Cj8Y,EAAYj8F,GAAOk4e,CAImC,EAIzD,QACC,MAAO,CAACl4e,EAAKE,EAAO+7F,UACMv9E,IAArBu9E,EAAYj8F,GAKhBi8F,EAAYj8F,GAAO,IAAI,CAACi8F,EAAYj8F,IAAMsqG,OAAQpqG,GAJjD+7F,EAAYj8F,GAAOE,CAIoC,EAI5D,CA0FmBi4e,CAAqB9xe,GAGjC8sI,EAActzI,OAAO6yB,OAAO,MAElC,GAAqB,kBAAVsiH,EACV,OAAO7B,EAKR,KAFA6B,EAAQA,EAAMn8C,OAAO7sF,QAAQ,SAAU,KAGtC,OAAOmnI,EAGR,IAAK,MAAMkzU,KAAarxU,EAAMnrH,MAAM,KAAM,CACzC,GAAkB,KAAdw8b,EACH,SAGD,MAAM+xB,EAAa/xe,EAAQmrC,OAAS60a,EAAUr6c,QAAQ,MAAO,KAAOq6c,EAEpE,IAAKrmd,EAAKE,GAASk3e,EAAagB,EAAY,UAEhC15d,IAAR1e,IACHA,EAAMo4e,GAKPl4e,OAAkBwe,IAAVxe,EAAsB,KAAQ,CAAC,QAAS,YAAa,qBAAqBH,SAASsG,EAAQ0xe,aAAe73e,EAAQ,EAAOA,EAAOmG,GACxIs5D,EAAU,EAAO3/D,EAAKqG,GAAUnG,EAAOizI,EACxC,CAEA,IAAK,MAAOnzI,EAAKE,KAAUL,OAAO+yC,QAAQugG,GACzC,GAAqB,kBAAVjzI,GAAgC,OAAVA,EAChC,IAAK,MAAOm4e,EAAMr2H,KAAWniX,OAAO+yC,QAAQ1yC,GAC3CA,EAAMm4e,GAAQ54e,EAAWuiX,EAAQ37W,QAGlC8sI,EAAYnzI,GAAOP,EAAWS,EAAOmG,GAIvC,OAAqB,IAAjBA,EAAQg/C,KACJ8tF,IAKiB,IAAjB9sI,EAAQg/C,KAAgBxlD,OAAOiC,KAAKqxI,GAAa9tF,OAASxlD,OAAOiC,KAAKqxI,GAAa9tF,KAAKh/C,EAAQg/C,OAAOqC,QAAO,CAAC/jD,EAAQ3D,KAC9H,MAAME,EAAQizI,EAAYnzI,GAQ1B,OAPIwoB,QAAQtoB,IAA2B,kBAAVA,IAAuBR,MAAMC,QAAQO,GAEjEyD,EAAO3D,GAAOy3e,EAAWv3e,GAEzByD,EAAO3D,GAAOE,EAGRyD,CAAM,GACX9D,OAAO6yB,OAAO,MAClB,CAEO,SAASnH,EAAUkhC,EAAQpmD,GACjC,IAAKomD,EACJ,MAAO,GAQR+qb,GALAnxe,EAAU,CAACk6J,QAAQ,EAClBk0T,QAAQ,EACRsjB,YAAa,OACbC,qBAAsB,OAAQ3xe,IAEM2xe,sBAErC,MAAMM,EAAet4e,GACnBqG,EAAQkye,UAAYlB,EAAkB5qb,EAAOzsD,KAC1CqG,EAAQmye,iBAAmC,KAAhB/rb,EAAOzsD,GAGjC2/D,EApZP,SAA+Bt5D,GAC9B,OAAQA,EAAQ0xe,aACf,IAAK,QACJ,OAAO/3e,GAAO,CAAC2D,EAAQzD,KACtB,MAAMsH,EAAQ7D,EAAOrE,OAErB,YACWof,IAAVxe,GACImG,EAAQkye,UAAsB,OAAVr4e,GACpBmG,EAAQmye,iBAA6B,KAAVt4e,EAExByD,EAGM,OAAVzD,EACI,IACHyD,EAAQ,CAAC48J,EAAOvgK,EAAKqG,GAAU,IAAKmB,EAAO,KAAKkd,KAAK,KAInD,IACH/gB,EACH,CAAC48J,EAAOvgK,EAAKqG,GAAU,IAAKk6J,EAAO/4J,EAAOnB,GAAU,KAAMk6J,EAAOrgK,EAAOmG,IAAUqe,KAAK,IACvF,EAIH,IAAK,UACJ,OAAO1kB,GAAO,CAAC2D,EAAQzD,SAEXwe,IAAVxe,GACImG,EAAQkye,UAAsB,OAAVr4e,GACpBmG,EAAQmye,iBAA6B,KAAVt4e,EAExByD,EAGM,OAAVzD,EACI,IACHyD,EACH,CAAC48J,EAAOvgK,EAAKqG,GAAU,MAAMqe,KAAK,KAI7B,IACH/gB,EACH,CAAC48J,EAAOvgK,EAAKqG,GAAU,MAAOk6J,EAAOrgK,EAAOmG,IAAUqe,KAAK,KAK9D,IAAK,uBACJ,OAAO1kB,GAAO,CAAC2D,EAAQzD,SAEXwe,IAAVxe,GACImG,EAAQkye,UAAsB,OAAVr4e,GACpBmG,EAAQmye,iBAA6B,KAAVt4e,EAExByD,EAGM,OAAVzD,EACI,IACHyD,EACH,CAAC48J,EAAOvgK,EAAKqG,GAAU,UAAUqe,KAAK,KAIjC,IACH/gB,EACH,CAAC48J,EAAOvgK,EAAKqG,GAAU,SAAUk6J,EAAOrgK,EAAOmG,IAAUqe,KAAK,KAKjE,IAAK,QACL,IAAK,YACL,IAAK,oBAAqB,CACzB,MAAM+zd,EAAsC,sBAAxBpye,EAAQ0xe,YACzB,MACA,IAEH,OAAO/3e,GAAO,CAAC2D,EAAQzD,SAEXwe,IAAVxe,GACImG,EAAQkye,UAAsB,OAAVr4e,GACpBmG,EAAQmye,iBAA6B,KAAVt4e,EAExByD,GAIRzD,EAAkB,OAAVA,EAAiB,GAAKA,EAER,IAAlByD,EAAOrE,OACH,CAAC,CAACihK,EAAOvgK,EAAKqG,GAAUoye,EAAal4U,EAAOrgK,EAAOmG,IAAUqe,KAAK,KAGnE,CAAC,CAAC/gB,EAAQ48J,EAAOrgK,EAAOmG,IAAUqe,KAAKre,EAAQ2xe,uBAExD,CAEA,QACC,OAAOh4e,GAAO,CAAC2D,EAAQzD,SAEXwe,IAAVxe,GACImG,EAAQkye,UAAsB,OAAVr4e,GACpBmG,EAAQmye,iBAA6B,KAAVt4e,EAExByD,EAGM,OAAVzD,EACI,IACHyD,EACH48J,EAAOvgK,EAAKqG,IAIP,IACH1C,EACH,CAAC48J,EAAOvgK,EAAKqG,GAAU,IAAKk6J,EAAOrgK,EAAOmG,IAAUqe,KAAK,KAK9D,CAsRmBg0d,CAAsBrye,GAElCsye,EAAa,CAAC,EAEpB,IAAK,MAAO34e,EAAKE,KAAUL,OAAO+yC,QAAQ6Z,GACpC6rb,EAAat4e,KACjB24e,EAAW34e,GAAOE,GAIpB,MAAM4B,EAAOjC,OAAOiC,KAAK62e,GAMzB,OAJqB,IAAjBtye,EAAQg/C,MACXvjD,EAAKujD,KAAKh/C,EAAQg/C,MAGZvjD,EAAK8B,KAAI5D,IACf,MAAME,EAAQusD,EAAOzsD,GAErB,YAAc0e,IAAVxe,EACI,GAGM,OAAVA,EACIqgK,EAAOvgK,EAAKqG,GAGhB3G,MAAMC,QAAQO,GACI,IAAjBA,EAAMZ,QAAwC,sBAAxB+G,EAAQ0xe,YAC1Bx3U,EAAOvgK,EAAKqG,GAAW,KAGxBnG,EACLwnD,OAAOiY,EAAU3/D,GAAM,IACvB0kB,KAAK,KAGD67I,EAAOvgK,EAAKqG,GAAW,IAAMk6J,EAAOrgK,EAAOmG,EAAQ,IACxDyjB,QAAO/H,GAAKA,EAAEziB,OAAS,IAAGolB,KAAK,IACnC,CAEO,SAASk0d,EAAS/9c,EAAKx0B,GAC7BA,EAAU,CACTmrC,QAAQ,KACLnrC,GAGJ,IAAKwye,EAAMp1c,GAAQ2zc,EAAav8c,EAAK,KAMrC,YAJanc,IAATm6d,IACHA,EAAOh+c,GAGD,CACNA,IAAKg+c,GAAMhvd,MAAM,OAAO,IAAM,GAC9BmrH,MAAO/rH,EAAM6ud,EAAQj9c,GAAMx0B,MACvBA,GAAWA,EAAQyye,yBAA2Br1c,EAAO,CAACs1c,mBAAoB,EAAOt1c,EAAMp9B,IAAY,CAAC,EAE1G,CAEO,SAAS2ye,EAAavsb,EAAQpmD,GACpCA,EAAU,CACTk6J,QAAQ,EACRk0T,QAAQ,EACR,CAAC8iB,IAA2B,KACzBlxe,GAGJ,MAAMw0B,EAAM68c,EAAWjrb,EAAO5xB,KAAKhR,MAAM,KAAK,IAAM,GAQpD,IAAI8/T,EAAcp+T,EALJ,IACVtC,EAHiB6ud,EAAQrrb,EAAO5xB,KAGZ,CAACwqB,MAAM,OAC3BoH,EAAOuoF,OAGwB3uI,GAC/BsjV,IACHA,EAAc,IAAIA,KAGnB,IAAIlmT,EA5ML,SAAiB5I,GAChB,IAAI4I,EAAO,GACX,MAAMk0c,EAAY98c,EAAI35B,QAAQ,KAK9B,OAJmB,IAAfy2e,IACHl0c,EAAO5I,EAAIxxB,MAAMsue,IAGXl0c,CACR,CAoMYw1c,CAAQxsb,EAAO5xB,KAC1B,GAAI4xB,EAAOssb,mBAAoB,CAC9B,MAAMG,EAA6B,IAAI70b,IAAIxpB,GAC3Cq+c,EAA2Bz1c,KAAOgpB,EAAOssb,mBACzCt1c,EAAOp9B,EAAQkxe,GAA4B2B,EAA2Bz1c,KAAO,IAAIgpB,EAAOssb,oBACzF,CAEA,MAAO,GAAGl+c,IAAM8uT,IAAclmT,GAC/B,CAEO,SAAS81F,EAAKjvF,EAAOxgB,EAAQzjB,GACnCA,EAAU,CACTyye,yBAAyB,EACzB,CAACvB,IAA2B,KACzBlxe,GAGJ,MAAM,IAACw0B,EAAG,MAAEm6G,EAAK,mBAAE+jW,GAAsBH,EAAStuc,EAAOjkC,GAEzD,OAAO2ye,EAAa,CACnBn+c,MACAm6G,MAAO8oT,EAAY9oT,EAAOlrH,GAC1Bivd,sBACE1ye,EACJ,CAEO,SAAS8ye,EAAQ7uc,EAAOxgB,EAAQzjB,GAGtC,OAAOkzH,EAAKjvF,EAFY5qC,MAAMC,QAAQmqB,GAAU9pB,IAAQ8pB,EAAO/pB,SAASC,GAAO,CAACA,EAAKE,KAAW4pB,EAAO9pB,EAAKE,GAExEmG,EACrC,CC5gBA,4CCFA,IAAI+ye,EACG,SAASC,EAAQ5wV,GACtB2wV,EAAe3wV,CACjB,CACO,SAAS6wV,IACd,OAAOF,CACT,u0BCNe,SAASzzd,IAYtB,OAXAA,EAAW9lB,OAAO+lB,OAAS/lB,OAAO+lB,OAAOY,OAAS,SAAUhc,GAC1D,IAAK,IAAInL,EAAI,EAAGA,EAAIomB,UAAUnmB,OAAQD,IAAK,CACzC,IAAI8Q,EAASsV,UAAUpmB,GACvB,IAAK,IAAIW,KAAOmQ,EACVtQ,OAAOC,UAAUb,eAAegB,KAAKkQ,EAAQnQ,KAC/CwK,EAAOxK,GAAOmQ,EAAOnQ,GAG3B,CACA,OAAOwK,CACT,EACOmb,EAASE,MAAMC,KAAML,UAC9B,yBCbiCplB,EAAE,qDAAqD,SAASC,EAAEA,GAAG,IAAIC,EAAE,CAACuD,KAAK,MAAM4G,KAAK,GAAG6ue,aAAY,EAAGntV,MAAM,CAAC,EAAEhqJ,SAAS,IAAI/C,EAAEiB,EAAE+oB,MAAM,uBAAuB,GAAGhqB,IAAIkB,EAAEmK,KAAKrL,EAAE,IAAI,IAAEA,EAAE,KAAK,MAAMiB,EAAE6I,OAAO7I,EAAEhB,OAAO,MAAMiB,EAAEg5e,aAAY,GAAIh5e,EAAEmK,KAAK27C,WAAW,QAAQ,CAAC,IAAI3lD,EAAEJ,EAAEY,QAAQ,UAAU,MAAM,CAAC4C,KAAK,UAAU21F,SAAS,IAAI/4F,EAAEJ,EAAE+I,MAAM,EAAE3I,GAAG,GAAG,CAAC,IAAI,IAAID,EAAE,IAAI0uB,OAAO9uB,GAAGe,EAAE,KAAK,QAAQA,EAAEX,EAAEmpB,KAAKtpB,KAAK,GAAGc,EAAE,GAAGy3F,OAAO,GAAGz3F,EAAE,GAAG,CAAC,IAAImG,EAAEnG,EAAE,GAAGy3F,OAAOjiD,EAAE,CAACrvC,EAAE,IAAIA,EAAErG,QAAQ,MAAM,IAAI01C,EAAErvC,EAAEsiB,MAAM,MAAMtpB,EAAE6rJ,MAAMx1G,EAAE,IAAIA,EAAE,GAAGn2C,EAAE6jG,WAAW,MAAMljG,EAAE,KAAKb,EAAE6rJ,MAAMhrJ,EAAE,IAAIA,EAAE,GAAGy3F,OAAOv3F,UAAU,EAAEF,EAAE,GAAG9B,OAAO,IAAI,OAAOiB,CAAC,CAAC,IAAIA,EAAE,kDAAkDlB,EAAE,QAAQqB,EAAEb,OAAO6yB,OAAO,MAAM,SAASjyB,EAAEL,EAAEC,GAAG,OAAOA,EAAEyD,MAAM,IAAI,OAAO,OAAO1D,EAAEC,EAAE8gC,QAAQ,IAAI,MAAM,OAAO/gC,GAAG,IAAIC,EAAEqK,MAAMrK,EAAE+rJ,MAAM,SAAShsJ,GAAG,IAAIC,EAAE,GAAG,IAAI,IAAIC,KAAKF,EAAEC,EAAEc,KAAKb,EAAE,KAAKF,EAAEE,GAAG,KAAK,OAAOD,EAAEf,OAAO,IAAIe,EAAEqkB,KAAK,KAAK,EAAE,CAA9F,CAAgGrkB,EAAE+rJ,OAAO,KAAK/rJ,EAAEk5e,YAAY,KAAK,KAAKl5e,EAAEk5e,YAAYn5e,EAAEA,EAAEC,EAAE+B,SAASslD,OAAOjnD,EAAE,IAAI,KAAKJ,EAAEqK,KAAK,IAAI,IAAI,UAAU,OAAOtK,EAAE,UAAUC,EAAEo5F,QAAQ,SAAS,CAAC,IAAIr4F,EAAE,CAAC6nB,MAAM,SAAS7oB,EAAEC,GAAGA,IAAIA,EAAE,CAAC,GAAGA,EAAEozF,aAAapzF,EAAEozF,WAAW/yF,GAAG,IAAID,EAAEW,EAAE,GAAGmG,EAAE,GAAGqvC,GAAG,EAAExP,GAAE,EAAG,GAAG,IAAIhnC,EAAEc,QAAQ,KAAK,CAAC,IAAID,EAAEb,EAAEc,QAAQ,KAAKE,EAAED,KAAK,CAAC2C,KAAK,OAAOq9B,SAAS,IAAIlgC,EAAEb,EAAEA,EAAEkB,UAAU,EAAEL,IAAI,CAAC,OAAOb,EAAE4L,QAAQzL,GAAE,SAASA,EAAEG,GAAG,GAAG0mC,EAAE,CAAC,GAAG7mC,IAAI,KAAKE,EAAEiK,KAAK,IAAI,OAAO08B,GAAE,CAAE,CAAC,IAAInmC,EAAE4hB,EAAE,MAAMtiB,EAAE4I,OAAO,GAAG3D,EAAEjF,EAAE8lD,WAAW,WAAWjhC,EAAE1kB,EAAEH,EAAEjB,OAAOsB,EAAER,EAAE+I,OAAOic,GAAG,GAAG5f,EAAE,CAAC,IAAIuiB,EAAEznB,EAAEC,GAAG,OAAOq2C,EAAE,GAAGx1C,EAAED,KAAK4mB,GAAG3mB,KAAKH,EAAEsG,EAAEqvC,IAAIx0C,SAASjB,KAAK4mB,GAAG3mB,EAAE,CAAC,GAAGyhB,IAAI+zB,IAAI,SAASn2C,EAAEH,EAAEC,IAAIuD,MAAMzD,EAAEozF,WAAWhzF,EAAEiK,QAAQjK,EAAEqD,KAAK,YAAYsjC,GAAE,GAAI3mC,EAAE84e,aAAanyc,IAAIxmC,GAAG,MAAMA,GAAGH,EAAE2B,SAASjB,KAAK,CAAC2C,KAAK,OAAOq9B,QAAQ/gC,EAAEiJ,MAAM+b,EAAEhlB,EAAEc,QAAQ,IAAIkkB,MAAM,IAAIwxB,GAAGx1C,EAAED,KAAKV,IAAIQ,EAAEsG,EAAEqvC,EAAE,KAAK31C,EAAEmB,SAASjB,KAAKV,GAAG8G,EAAEqvC,GAAGn2C,KAAKoiB,GAAGpiB,EAAE84e,eAAe3ic,GAAG,IAAIn2C,EAAE84e,aAAa94e,EAAEiK,OAAOnK,EAAE8I,MAAM,GAAG,MAAMutC,IAAIn2C,GAAG,IAAIm2C,EAAEx1C,EAAEmG,EAAEqvC,KAAKxP,GAAG,MAAMxmC,GAAGA,GAAG,CAACK,GAAG,IAAI21C,EAAEx1C,EAAEmG,EAAEqvC,GAAGx0C,SAAS,IAAI2f,EAAE3hB,EAAEc,QAAQ,IAAIkkB,GAAGsnB,EAAEtsC,EAAEiJ,MAAM+b,GAAG,IAAIrD,OAAE,EAAOA,GAAG1iB,EAAE6lB,KAAKwnB,KAAKA,EAAE,MAAM3qB,GAAG,GAAG60B,EAAE31C,EAAE3B,QAAQ,GAAG,MAAMotC,IAAIzrC,EAAEE,KAAK,CAAC2C,KAAK,OAAOq9B,QAAQuL,GAAG,CAAC,IAAGtrC,CAAC,EAAEmqB,UAAU,SAASnrB,GAAG,OAAOA,EAAEsnD,QAAO,SAAStnD,EAAEC,GAAG,OAAOD,EAAEK,EAAE,GAAGJ,EAAE,GAAE,GAAG,GAAG,ICA9gE,SAASmzB,IACd,GAAItN,SAAWA,QAAQsN,KAAM,CAC3B,IAAK,IAAI+L,EAAO9Z,UAAUnmB,OAAQH,EAAO,IAAIO,MAAM6/B,GAAOC,EAAO,EAAGA,EAAOD,EAAMC,IAC/ErgC,EAAKqgC,GAAQ/Z,UAAU+Z,GAEF,kBAAZrgC,EAAK,KAAiBA,EAAK,GAAK,mBAAmBA,EAAK,MACnE+mB,QAAQsN,QAAQr0B,EAClB,CACF,CACA,MAAMq6e,EAAgB,CAAC,EAChB,SAASC,IACd,IAAK,IAAIlrC,EAAQ9ob,UAAUnmB,OAAQH,EAAO,IAAIO,MAAM6uc,GAAQC,EAAQ,EAAGA,EAAQD,EAAOC,IACpFrvc,EAAKqvc,GAAS/ob,UAAU+ob,GAEH,kBAAZrvc,EAAK,IAAmBq6e,EAAcr6e,EAAK,MAC/B,kBAAZA,EAAK,KAAiBq6e,EAAcr6e,EAAK,IAAM,IAAI6P,MAC9DwkB,KAAQr0B,GACV,CACA,MAAMu6e,EAAY,CAACC,EAAM/ld,IAAO,KAC9B,GAAI+ld,EAAK3tN,cACPp4P,QACK,CACL,MAAMyhN,EAAc,KAClBjhN,YAAW,KACTuld,EAAKv/U,IAAI,cAAei7E,EAAY,GACnC,GACHzhN,GAAI,EAEN+ld,EAAKphc,GAAG,cAAe88L,EACzB,GAEK,SAASyrO,EAAe64B,EAAM9+W,EAAIjnG,GACvC+ld,EAAK74B,eAAejmV,EAAI6+W,EAAUC,EAAM/ld,GAC1C,CACO,SAASmtb,EAAc44B,EAAMtpC,EAAKx1U,EAAIjnG,GACzB,kBAAPinG,IAAiBA,EAAK,CAACA,IAClCA,EAAGnyH,SAAQpI,IACLq5e,EAAKtze,QAAQw0H,GAAG35H,QAAQZ,GAAK,GAAGq5e,EAAKtze,QAAQw0H,GAAG15H,KAAKb,EAAE,IAE7Dq5e,EAAK54B,cAAc1Q,EAAKqpC,EAAUC,EAAM/ld,GAC1C,CAkCO,SAAS2xO,EAAet8N,GAC7B,OAAOA,EAAUl3B,aAAek3B,EAAUv+B,OAA8B,kBAAdu+B,GAA0BA,EAAU3pC,OAAS,EAAI2pC,EAAY,UACzH,CC5EA,MAAM2wc,EAAkB,oGAClBC,EAAe,CACnB,QAAS,IACT,QAAS,IACT,OAAQ,IACR,QAAS,IACT,OAAQ,IACR,QAAS,IACT,SAAU,IACV,QAAS,IACT,SAAU,IACV,QAAS,IACT,SAAU,IACV,SAAU,IACV,SAAU,OACV,SAAU,OACV,QAAS,OACT,SAAU,OACV,WAAY,SACZ,UAAW,SACX,SAAU,IACV,QAAS,KAELC,EAAqB1yc,GAAKyyc,EAAazyc,GCtB7C,IAAIulB,EAAiB,CACnBotb,SAAU,kBACVC,cAAe,GACfC,oBAAqB,GACrBC,4BAA4B,EAC5BC,mBAAoB,GACpBC,2BAA4B,CAAC,KAAM,SAAU,IAAK,KAClDC,aAAa,EACb1tW,SDesB5iI,GAAQA,EAAKiC,QAAQ4te,EAAiBE,ICbvD,SAAS10S,IACd,IAAI/+L,EAAUof,UAAUnmB,OAAS,QAAsBof,IAAjB+G,UAAU,GAAmBA,UAAU,GAAK,CAAC,EACnFknC,EAAiB,IACZA,KACAtmD,EAEP,CACO,SAASwmC,IACd,OAAO8f,CACT,gBCdA,SAASk4B,EAAYX,EAAMo2Z,GACzB,IAAKp2Z,EAAM,OAAO,EAClB,MAAM3uD,EAAO2uD,EAAKlhF,MAAQkhF,EAAKlhF,MAAMZ,SAAW8hF,EAAK9hF,SACrD,OAAIk4e,EAAoB/kd,EAAKj2B,OAAS,IAC7Bi2B,CACX,CACA,SAASuuO,EAAY5/K,GACnB,IAAKA,EAAM,MAAO,GAClB,MAAM9hF,EAAW8hF,EAAKlhF,MAAQkhF,EAAKlhF,MAAMZ,SAAW8hF,EAAK9hF,SACzD,OAAO8hF,EAAKlhF,OAASkhF,EAAKlhF,MAAMu3e,kBAAoBC,EAAWp4e,GAAYA,CAC7E,CAKA,SAASo4e,EAAW9qe,GAClB,OAAOhQ,MAAMC,QAAQ+P,GAAQA,EAAO,CAACA,EACvC,CAQO,SAAS+qe,EAAcr4e,EAAUs4e,GACtC,IAAKt4e,EAAU,MAAO,GACtB,IAAIu4e,EAAa,GACjB,MAAMC,EAAgBJ,EAAWp4e,GAC3By4e,EAAYH,EAAYR,4BAA8BQ,EAAYN,2BAA6BM,EAAYN,2BAA6B,GAsC9I,OArCAQ,EAAclye,SAAQ,CAAC7E,EAAOi3e,KAC5B,GAAqB,kBAAVj3e,EACT82e,GAAc,GAAG92e,SACZ,IAAI,IAAA87F,gBAAe97F,GAAQ,CAChC,MAAMk3e,EAAkBl7e,OAAOiC,KAAK+B,EAAMb,OAAO1D,OAC3C07e,EAAkBH,EAAU35e,QAAQ2C,EAAMC,OAAS,EACnDm3e,EAAgBp3e,EAAMb,MAAMZ,SAClC,IAAK64e,GAAiBD,GAAuC,IAApBD,EACvCJ,GAAc,IAAI92e,EAAMC,cACnB,GAAKm3e,GAAmBD,GAAuC,IAApBD,EAE3C,GAAIl3e,EAAMb,MAAMu3e,kBACrBI,GAAc,IAAIG,OAAgBA,UAC7B,GAAIE,GAAuC,IAApBD,GAAkD,kBAAlBE,EAC5DN,GAAc,IAAI92e,EAAMC,QAAQm3e,MAAkBp3e,EAAMC,YACnD,CACL,MAAMq9B,EAAUs5c,EAAcQ,EAAeP,GAC7CC,GAAc,IAAIG,KAAc35c,MAAY25c,IAC9C,MAREH,GAAc,IAAIG,OAAgBA,IAStC,MAAO,GAAc,OAAVj3e,EACT2vB,EAAK,kFACA,GAAqB,kBAAV3vB,EAAoB,CACpC,MAAM,OACJwtD,KACGo1B,GACD5iF,EACE/B,EAAOjC,OAAOiC,KAAK2kF,GACzB,GAAoB,IAAhB3kF,EAAKxC,OAAc,CACrB,MAAMY,EAAQmxD,EAAS,GAAGvvD,EAAK,OAAOuvD,IAAWvvD,EAAK,GACtD64e,GAAc,KAAKz6e,KACrB,MACEszB,EAAK,mJAAoJ3vB,EAE7J,MACE2vB,EAAK,qKAAsK3vB,EAC7K,IAEK82e,CACT,CACA,SAASO,EAAY94e,EAAU+4e,EAAcxB,EAAMe,EAAaU,EAAeC,GAC7E,GAAqB,KAAjBF,EAAqB,MAAO,GAChC,MAAMN,EAAYH,EAAYN,4BAA8B,GACtDkB,EAAgCH,GAAgB,IAAIhsd,OAAO0rd,EAAUj3e,KAAI23e,GAAQ,IAAIA,MAAQ72d,KAAK,MAAMQ,KAAKi2d,GACnH,IAAK/4e,IAAak5e,IAAkCD,EAAgB,MAAO,CAACF,GAC5E,MAAMzre,EAAO,CAAC,GACd,SAASgkF,EAAQ5N,GACO00Z,EAAW10Z,GACnBp9E,SAAQ7E,IACC,kBAAVA,IACPghF,EAAYhhF,GAAQ6vF,EAAQowK,EAAYjgQ,IAAkC,kBAAVA,IAAuB,IAAA87F,gBAAe97F,IAAQhE,OAAO+lB,OAAOlW,EAAM7L,GAAM,GAEhJ,CACA6vF,CAAQtxF,GACR,MAAMo5e,EAAM,EAAKvyd,MAAM,MAAMkyd,SACvB/vd,EAAO,IACR1b,KACA0re,GAEL,SAASK,EAAY53e,EAAOqgF,EAAMw3Z,GAChC,MAAM51Z,EAASg+K,EAAYjgQ,GACrB83e,EAAiBC,EAAO91Z,EAAQ5B,EAAK9hF,SAAUs5e,GACrD,OAhFJ,SAA+Bt5e,GAC7B,MAAiD,mBAA7CvC,OAAOC,UAAUF,SAASK,KAAKmC,IAC5BA,EAASojD,OAAM3hD,IAAS,IAAA87F,gBAAe97F,IAChD,CA6EWg4e,CAAsB/1Z,IAAqC,IAA1B61Z,EAAer8e,QAAgBuE,EAAMb,OAASa,EAAMb,MAAMu3e,kBAAoBz0Z,EAAS61Z,CACjI,CACA,SAASG,EAAkBj4e,EAAOunD,EAAO4xZ,EAAK39c,EAAG08e,GAC3Cl4e,EAAMm4e,OACRn4e,EAAMzB,SAAWgpD,EACjB4xZ,EAAI77c,MAAK,IAAAu+F,cAAa77F,EAAO,CAC3B7D,IAAKX,GACJ08e,OAASr9d,EAAY0sC,KAExB4xZ,EAAI77c,QAAQ,EAAAq7J,SAAS54J,IAAI,CAACC,IAAQzC,IAChC,MAAM4B,EAAQ,IACT5B,EAAE4B,OAGP,cADOA,EAAMu3e,kBACN,gBAAoBn5e,EAAE0C,KAAM6hB,EAAS,CAAC,EAAG3iB,EAAO,CACrDhD,IAAKX,EACL8G,IAAK/E,EAAE+E,KACN41e,EAAS,CAAC,EAAI,CACf35e,SAAUgpD,IACT,IAGT,CACA,SAASwwb,EAAOK,EAAWC,EAASR,GAClC,MAAMS,EAAa3B,EAAWyB,GAE9B,OADiBzB,EAAW0B,GACZx0b,QAAO,CAACs1Z,EAAK94X,EAAM7kF,KACjC,MAAM+8e,EAAqBl4Z,EAAK9hF,UAAY8hF,EAAK9hF,SAAS,IAAM8hF,EAAK9hF,SAAS,GAAG++B,SAAWw4c,EAAKrtN,SAAS/xF,aAAa5+D,YAAYz3C,EAAK9hF,SAAS,GAAG++B,QAAS/V,EAAMuud,EAAKv7c,UACxK,GAAkB,QAAd8lD,EAAKpgF,KAAgB,CACvB,IAAIitI,EAAMorW,EAAWx5d,SAASuhE,EAAKx5E,KAAM,KACZ,IAAzBgxe,EAAcp8e,QAAiByxI,IAAKA,EAAM2qW,EAAc,GAAGx3Z,EAAKx5E,OAC/DqmI,IAAKA,EAAM,CAAC,GACjB,MAAMltI,EAA2C,IAAnChE,OAAOiC,KAAKoiF,EAAKkoE,OAAO9sJ,OAzG9C,SAAoB6Q,EAAQ3F,GAC1B,MAAM6xe,EAAY,IACb7xe,GAGL,OADA6xe,EAAUr5e,MAAQnD,OAAO+lB,OAAOzV,EAAOnN,MAAOwH,EAAOxH,OAC9Cq5e,CACT,CAmG6DrxP,CAAW,CAC9DhoP,MAAOkhF,EAAKkoE,OACXrb,GAAOA,EACJnH,GAAY,IAAAjqC,gBAAe97F,GAC3By4e,EAAiC1yW,GAAa/kD,EAAYX,GAAM,KAAUA,EAAKq1Z,YAC/EgD,EAAuBjB,GAAkD,kBAAVz3e,GAAsBA,EAAMm4e,QAAUpyW,EACrG4yW,EAAuC,kBAAbp6e,GAAsC,OAAbA,GAAqBvC,OAAOZ,eAAegB,KAAKmC,EAAU8hF,EAAKx5E,MACxH,GAAqB,kBAAV7G,EAAoB,CAC7B,MAAM3D,EAAQy5e,EAAKrtN,SAAS/xF,aAAa5+D,YAAY93H,EAAOunB,EAAMuud,EAAKv7c,UACvE4+a,EAAI77c,KAAKjB,EACX,MAAO,GAAI2kF,EAAYhhF,IAAUy4e,EAAgC,CAE/DR,EAAkBj4e,EADJ43e,EAAY53e,EAAOqgF,EAAMw3Z,GACP1+B,EAAK39c,EACvC,MAAO,GAAIk9e,EAAsB,CAE/BT,EAAkBj4e,EADJ+3e,EAAOO,EAAYj4Z,EAAK9hF,SAAUs5e,GAChB1+B,EAAK39c,EACvC,MAAO,GAAIqpB,OAAOtB,MAAM7N,WAAW2qE,EAAKx5E,OACtC,GAAI8xe,EAAkB,CAEpBV,EAAkBj4e,EADJ43e,EAAY53e,EAAOqgF,EAAMw3Z,GACP1+B,EAAK39c,EAAG6kF,EAAKq1Z,YAC/C,MAAO,GAAImB,EAAYR,4BAA8BW,EAAU35e,QAAQgjF,EAAKx5E,OAAS,EACnF,GAAIw5E,EAAKq1Z,YACPv8B,EAAI77c,MAAK,IAAAQ,eAAcuiF,EAAKx5E,KAAM,CAChC1K,IAAK,GAAGkkF,EAAKx5E,QAAQrL,WAElB,CACL,MAAM+rD,EAAQwwb,EAAOO,EAAYj4Z,EAAK9hF,SAAUs5e,GAChD1+B,EAAI77c,MAAK,IAAAQ,eAAcuiF,EAAKx5E,KAAM,CAChC1K,IAAK,GAAGkkF,EAAKx5E,QAAQrL,KACpB+rD,GACL,MACK,GAAI84B,EAAKq1Z,YACdv8B,EAAI77c,KAAK,IAAI+iF,EAAKx5E,eACb,CACL,MAAM0gD,EAAQwwb,EAAOO,EAAYj4Z,EAAK9hF,SAAUs5e,GAChD1+B,EAAI77c,KAAK,IAAI+iF,EAAKx5E,QAAQ0gD,MAAU84B,EAAKx5E,QAC3C,MACK,GAAqB,kBAAV7G,GAAuB+lI,EAIvCkyW,EAAkBj4e,EAAOu4e,EAAoBp/B,EAAK39c,EAA4B,IAAzB6kF,EAAK9hF,SAAS9C,SAAiB88e,OAJlC,CAClD,MAAMj7c,EAAU+iD,EAAK9hF,SAAS,GAAKg6e,EAAqB,KACpDj7c,GAAS67a,EAAI77c,KAAKggC,EACxB,CAGF,MAAO,GAAkB,SAAd+iD,EAAKpgF,KAAiB,CAC/B,MAAM24e,EAAgB/B,EAAYP,mBAC5Bh5c,EAAUk6c,EAAiBX,EAAY/tW,SAASgtW,EAAKrtN,SAAS/xF,aAAa5+D,YAAYz3C,EAAK/iD,QAAS/V,EAAMuud,EAAKv7c,WAAau7c,EAAKrtN,SAAS/xF,aAAa5+D,YAAYz3C,EAAK/iD,QAAS/V,EAAMuud,EAAKv7c,UAC/Lq+c,EACFz/B,EAAI77c,MAAK,IAAAQ,eAAc86e,EAAe,CACpCz8e,IAAK,GAAGkkF,EAAKx5E,QAAQrL,KACpB8hC,IAEH67a,EAAI77c,KAAKggC,EAEb,CACA,OAAO67a,CAAG,GACT,GACL,CAKA,OAAOl5M,EAJQ83O,EAAO,CAAC,CACrBI,OAAO,EACP55e,SAAUA,GAAY,KACpBo5e,EAAKhB,EAAWp4e,GAAY,KACN,GAC5B,CACO,SAASs6e,EAAMjvd,GACpB,IAAI,SACFrrB,EAAQ,MACR8X,EAAK,OACLoqE,EAAM,QACNq4Z,EAAO,QACP/3d,EAAO,SACPg4d,EAAW,CAAC,EAAC,OACbpxa,EAAM,SACN8tD,EAAQ,WACR7lC,EAAU,GACVonC,EACA8+W,KAAMkD,EACNx8e,EAAGy8e,EAAU,eACbzB,KACG0B,GACDtvd,EACJ,MAAMksd,EAAOkD,IAAiB,SAC9B,IAAKlD,EAEH,OADAF,EAAS,4EACFr3e,EAET,MAAM/B,EAAIy8e,GAAcnD,EAAKt5e,EAAEmmB,KAAKmzd,IAAS,CAAC71d,GAAKA,GAC/Cc,IAASg4d,EAASh4d,QAAUA,GAChC,MAAMo4d,EAAsB,IACvBnwc,OACC8sc,EAAKtze,SAAWsze,EAAKtze,QAAQ42e,OAEnC,IAAIvrC,EAAa72U,GAAMx6H,EAAEw6H,IAAM8+W,EAAKtze,SAAWsze,EAAKtze,QAAQ2pc,UAC5D0B,EAAmC,kBAAfA,EAA0B,CAACA,GAAcA,GAAc,CAAC,eAC5E,MAAMwrC,EAAezC,EAAcr4e,EAAU46e,GACvC35d,EAAei2G,GAAY4jX,GAAgBF,EAAoB/C,qBAAuB0C,GACtF,aACJQ,GACEH,EACEh9e,EAAM28e,IAAYQ,EAAeA,EAAaD,GAAgB75d,GAAgB65d,GAAgB75d,GAChGs2d,EAAKtze,SAAWsze,EAAKtze,QAAQkrc,eAAiBooC,EAAKtze,QAAQkrc,cAAc+D,mBAC3E9pY,EAASA,GAAU3rE,OAAOiC,KAAK0pE,GAAQlsE,OAAS,EAAI,IAC/CksE,KACAmua,EAAKtze,QAAQkrc,cAAc+D,kBAC5B,IACCqkC,EAAKtze,QAAQkrc,cAAc+D,mBAGlC,MAAM8nC,EAAwB5xa,EAASoxa,EAASrrC,cAAgB,CAC9DA,cAAe,IACVqrC,EAASrrC,cACZlpZ,OAAQ,MACR8sZ,OAAQ,QAGNimC,EAAgB,IACjBwB,EACH1ie,WACGsxD,KACA4xa,EACH/5d,eACAw3G,GAAI62U,GAEA2rC,EAAcr9e,EAAMK,EAAEL,EAAKo7e,GAAiB/3d,EAC9CowE,GACF5zF,OAAOiC,KAAK2xF,GAAY/qF,SAAQtH,IAC9B,MAAMivQ,EAAO58K,EAAWryF,GACC,oBAAdivQ,EAAKvsQ,OAAwBusQ,EAAKrtQ,QAAUqtQ,EAAKrtQ,MAAMZ,UAAYi7e,EAAYn8e,QAAQ,GAAGE,OAAS,GAAKi8e,EAAYn8e,QAAQ,GAAGE,QAAU,IAIpJqyF,EAAWryF,GAAK,iBAHhB,WACE,OAAO,gBAAoB,WAAgB,KAAMivQ,EACnD,GACmD,MAAK,IAG5D,MAAMlvO,EAAU+5c,EAAYznZ,GAAcrxF,EAAUi7e,EAAa1D,EAAMqD,EAAqB5B,EAAeC,GACrGiC,OAAyB5+d,IAAX4lE,EAAuBA,EAAS04Z,EAAoBO,mBACxE,OAAOD,GAAc,IAAA37e,eAAc27e,EAAaP,EAAiB57c,GAAWA,CAC9E,CCvQO,MAAMq8c,EAAmB,CAC9B15e,KAAM,WACN,IAAAkzI,CAAKyR,GACH28C,EAAY38C,EAASpiJ,QAAQ42e,QAC7B,OAAQx0V,EACV,GCFWg1V,GAAc,IAAA1zO,iBACpB,MAAM2zO,EACX,WAAA/1c,GACE7hB,KAAK63d,eAAiB,CAAC,CACzB,CACA,iBAAAC,CAAkBlsC,GAChBA,EAAWhpc,SAAQmyH,IACZ/0G,KAAK63d,eAAe9iX,KAAK/0G,KAAK63d,eAAe9iX,IAAM,EAAI,GAEhE,CACA,iBAAAgjX,GACE,OAAOh+e,OAAOiC,KAAKgkB,KAAK63d,eAC1B,EAEK,SAASG,EAAoBC,GAClC,OAAO/yZ,GAAO,IAAI/lD,SAAQC,IACxB,MAAM84c,EAAmBC,IACrBF,EAAaE,gBACfF,EAAaE,gBAAgBjzZ,GAAK72D,MAAK+pd,IACrCh5c,EAAQ,IACHg5c,KACAF,GACH,IAGJ94c,EAAQ84c,EACV,GAEJ,CACO,SAASC,IACd,MAAMtE,GAAO,SACPjoC,EAAaioC,EAAKwE,iBAAmBxE,EAAKwE,iBAAiBN,oBAAsB,GACjF3pd,EAAM,CAAC,EACPkqd,EAAmB,CAAC,EAS1B,OARAzE,EAAKjoZ,UAAUhpF,SAAQkuC,IACrBwnc,EAAiBxnc,GAAK,CAAC,EACvB86Z,EAAWhpc,SAAQmyH,IACjBujX,EAAiBxnc,GAAGikF,GAAM8+W,EAAKhpC,kBAAkB/5Z,EAAGikF,IAAO,CAAC,CAAC,GAC7D,IAEJ3mG,EAAIkqd,iBAAmBA,EACvBlqd,EAAImqd,gBAAkB1E,EAAKv7c,SACpBlK,CACT,CC5CO,SAAS,EAAMzG,GACpB,IAAI,SACFrrB,EAAQ,MACR8X,EAAK,OACLoqE,EAAM,QACNq4Z,EAAO,QACP/3d,EAAO,SACPg4d,EAAW,CAAC,EAAC,OACbpxa,EAAM,SACN8tD,EAAQ,WACR7lC,EAAU,GACVonC,EACA8+W,KAAMkD,EACNx8e,EAAGy8e,EAAU,eACbzB,KACG0B,GACDtvd,EACJ,MACEksd,KAAM2E,EACNtuC,UAAWuuC,IACT,IAAApuR,YAAWstR,IAAgB,CAAC,EAC1B9D,EAAOkD,GAAiByB,IAAmB,SAC3Cj+e,EAAIy8e,GAAcnD,GAAQA,EAAKt5e,EAAEmmB,KAAKmzd,GAC5C,OAAO+C,EAAoB,CACzBt6e,WACA8X,QACAoqE,SACAq4Z,UACA/3d,UACAg4d,WACApxa,SACA8tD,WACA7lC,aACAonC,GAAIA,GAAMx6H,GAAKA,EAAEw6H,IAAM0jX,GAAwB5E,GAAQA,EAAKtze,SAAWsze,EAAKtze,QAAQ2pc,UACpF2pC,OACAt5e,EAAGy8e,EACHzB,oBACG0B,GAEP,CCxCA,MAAMyB,EAAc,CAACt+e,EAAOs0B,KAC1B,MAAMruB,GAAM,IAAAD,UAIZ,OAHA,IAAAc,YAAU,KACRb,EAAI7B,QAAUkwB,EAASruB,EAAI7B,QAAUpE,CAAK,GACzC,CAACA,EAAOs0B,IACJruB,EAAI7B,OAAO,EAEb,SAASm6e,EAAe5jX,GAC7B,IAAI73H,EAAQyiB,UAAUnmB,OAAS,QAAsBof,IAAjB+G,UAAU,GAAmBA,UAAU,GAAK,CAAC,EACjF,MACEk0d,KAAMkD,GACJ75e,GAEF22e,KAAM2E,EACNtuC,UAAWuuC,IACT,IAAApuR,YAAWstR,IAAgB,CAAC,EAC1B9D,EAAOkD,GAAiByB,IAAmB,SAEjD,GADI3E,IAASA,EAAKwE,mBAAkBxE,EAAKwE,iBAAmB,IAAIT,IAC3D/D,EAAM,CACTF,EAAS,0EACT,MAAMiF,EAAY,CAAC56d,EAAG66d,IACc,kBAAvBA,EAAwCA,EAC/CA,GAAoD,kBAAvBA,GAA8E,kBAApCA,EAAmBt7d,aAAkCs7d,EAAmBt7d,aAC5I3jB,MAAMC,QAAQmkB,GAAKA,EAAEA,EAAExkB,OAAS,GAAKwkB,EAExC86d,EAAc,CAACF,EAAW,CAAC,GAAG,GAIpC,OAHAE,EAAYv+e,EAAIq+e,EAChBE,EAAYjF,KAAO,CAAC,EACpBiF,EAAY5uO,OAAQ,EACb4uO,CACT,CACIjF,EAAKtze,QAAQ42e,YAAqCv+d,IAA5Bi7d,EAAKtze,QAAQ42e,MAAMrtY,MAAoB6pY,EAAS,uGAC1E,MAAMiB,EAAc,IACf7tc,OACA8sc,EAAKtze,QAAQ42e,SACbj6e,IAEC,YACJq3e,EAAW,UACXh6B,GACEq6B,EACJ,IAAIhpC,EAAa72U,GAAM0jX,GAAwB5E,EAAKtze,SAAWsze,EAAKtze,QAAQ2pc,UAC5E0B,EAAmC,kBAAfA,EAA0B,CAACA,GAAcA,GAAc,CAAC,eACxEioC,EAAKwE,iBAAiBP,mBAAmBjE,EAAKwE,iBAAiBP,kBAAkBlsC,GACrF,MAAM1hM,GAAS2pO,EAAK3tN,eAAiB2tN,EAAKn6B,uBAAyB9N,EAAWlsZ,OAAMllD,GPU/E,SAA4Bu6H,EAAI8+W,GACrC,IAAItze,EAAUof,UAAUnmB,OAAS,QAAsBof,IAAjB+G,UAAU,GAAmBA,UAAU,GAAK,CAAC,EACnF,OAAKk0d,EAAKjoZ,WAAcioZ,EAAKjoZ,UAAUpyF,YAIqBof,IAArCi7d,EAAKtze,QAAQ4pc,oBAI7B0pC,EAAKrjC,mBAAmBz7U,EAAI,CACjCw1U,IAAKhqc,EAAQgqc,IACbuQ,SAAU,CAACw4B,EAAc14B,KACvB,GAAIr6c,EAAQ0ze,UAAY1ze,EAAQ0ze,SAAS74e,QAAQ,qBAAuB,GAAKk4e,EAAa9sN,SAASyoL,iBAAiBwI,SAAW67B,EAAap5B,uBAAyBU,EAAe04B,EAAap5B,qBAAsBnlV,GAAK,OAAO,CAAK,IA7B9O,SAAsCA,EAAI8+W,GACxC,IAAItze,EAAUof,UAAUnmB,OAAS,QAAsBof,IAAjB+G,UAAU,GAAmBA,UAAU,GAAK,CAAC,EACnF,MAAM4qb,EAAMspC,EAAKjoZ,UAAU,GACrB+iX,IAAcklC,EAAKtze,SAAUsze,EAAKtze,QAAQouc,YAC1CgM,EAAUk5B,EAAKjoZ,UAAUioZ,EAAKjoZ,UAAUpyF,OAAS,GACvD,GAA0B,WAAtB+wc,EAAI9jb,cAA4B,OAAO,EAC3C,MAAMm0b,EAAiB,CAAC9pa,EAAGt2C,KACzB,MAAMqgd,EAAYg5B,EAAKrtN,SAASyoL,iBAAiB3mb,MAAM,GAAGwoB,KAAKt2C,KAC/D,OAAsB,IAAfqgd,GAAkC,IAAdA,CAAe,EAE5C,QAAIt6c,EAAQ0ze,UAAY1ze,EAAQ0ze,SAAS74e,QAAQ,qBAAuB,GAAKy4e,EAAKrtN,SAASyoL,iBAAiBwI,SAAWo8B,EAAK35B,uBAAyBU,EAAei5B,EAAK35B,qBAAsBnlV,QAC3L8+W,EAAKjpC,kBAAkBL,EAAKx1U,MAC3B8+W,EAAKrtN,SAASyoL,iBAAiBwI,WAAWo8B,EAAKtze,QAAQqtK,WAAcimU,EAAKtze,QAAQw4c,8BACnF6B,EAAerQ,EAAKx1U,IAAS45U,IAAeiM,EAAeD,EAAS5lV,IAE1E,CASWgkX,CAA6BhkX,EAAI8+W,EAAMtze,IAL9Coze,EAAS,yCAA0CE,EAAKjoZ,YACjD,EAYX,CO1B2F4kX,CAAmBh2c,EAAGq5e,EAAMe,KACrH,SAASoE,IACP,OAAOnF,EAAKv5B,UAAUp9c,EAAMqtc,KAAO,KAA6B,aAAvBqqC,EAAYqE,OAAwBrtC,EAAaA,EAAW,GAAI2O,EAC3G,CACA,MAAOhgd,EAAG2+e,IAAQ,IAAAz7e,UAASu7e,GAC3B,IAAIG,EAAWvtC,EAAWhtb,OACtB1hB,EAAMqtc,MAAK4uC,EAAW,GAAGj8e,EAAMqtc,MAAM4uC,KACzC,MAAMC,EAAmBV,EAAYS,GAC/B3wR,GAAY,IAAApoN,SAAO,IACzB,IAAAc,YAAU,KACR,MAAM,SACJ+ye,EAAQ,cACRC,GACEU,EAgBJ,SAASyE,IACH7wR,EAAUhqN,SAAS06e,EAAKF,EAC9B,CAGA,OApBAxwR,EAAUhqN,SAAU,EACf0rQ,GAAUqqO,IACTr3e,EAAMqtc,IACR0Q,EAAc44B,EAAM32e,EAAMqtc,IAAKqB,GAAY,KACrCpjP,EAAUhqN,SAAS06e,EAAKF,EAAK,IAGnCh+B,EAAe64B,EAAMjoC,GAAY,KAC3BpjP,EAAUhqN,SAAS06e,EAAKF,EAAK,KAInC9uO,GAASkvO,GAAoBA,IAAqBD,GAAY3wR,EAAUhqN,SAC1E06e,EAAKF,GAKH/E,GAAYJ,GAAMA,EAAKphc,GAAGwhc,EAAUoF,GACpCnF,GAAiBL,GAAMA,EAAK50T,MAAMxsI,GAAGyhc,EAAemF,GACjD,KACL7wR,EAAUhqN,SAAU,EAChBy1e,GAAYJ,GAAMI,EAASlwd,MAAM,KAAKnhB,SAAQtI,GAAKu5e,EAAKv/U,IAAIh6J,EAAG++e,KAC/DnF,GAAiBL,GAAMK,EAAcnwd,MAAM,KAAKnhB,SAAQtI,GAAKu5e,EAAK50T,MAAM3qB,IAAIh6J,EAAG++e,IAAY,CAChG,GACA,CAACxF,EAAMsF,IACV,MAAMG,GAAY,IAAAl5e,SAAO,IACzB,IAAAc,YAAU,KACJsnN,EAAUhqN,UAAY86e,EAAU96e,SAClC06e,EAAKF,GAEPM,EAAU96e,SAAU,CAAK,GACxB,CAACq1e,EAAMt5B,IACV,MAAMnsb,EAAM,CAAC7zB,EAAGs5e,EAAM3pO,GAItB,GAHA97O,EAAI7zB,EAAIA,EACR6zB,EAAIyld,KAAOA,EACXzld,EAAI87O,MAAQA,EACRA,EAAO,OAAO97O,EAClB,IAAK87O,IAAUqqO,EAAa,OAAOnmd,EACnC,MAAM,IAAI+Q,SAAQC,IACZliC,EAAMqtc,IACR0Q,EAAc44B,EAAM32e,EAAMqtc,IAAKqB,GAAY,IAAMxsa,MAEjD47a,EAAe64B,EAAMjoC,GAAY,IAAMxsa,KACzC,GAEJ,CCxGO,SAASm6c,EAAgBxkX,GAC9B,IAAIx0H,EAAUof,UAAUnmB,OAAS,QAAsBof,IAAjB+G,UAAU,GAAmBA,UAAU,GAAK,CAAC,EACnF,OAAO,SAAgB+pO,GACrB,SAAS8vP,EAAuB7xd,GAC9B,IAAI,aACF8xd,KACG/8e,GACDirB,EACJ,MAAOptB,EAAGs5e,EAAM3pO,GAASyuO,EAAe5jX,EAAI,IACvCr4H,EACH69c,UAAWh6c,EAAQg6c,YAEfm/B,EAAgB,IACjBh9e,EACHnC,IACAs5e,OACA8F,OAAQzvO,GAOV,OALI3pQ,EAAQq5e,SAAWH,EACrBC,EAAcr5e,IAAMo5e,GACVl5e,EAAQq5e,SAAWH,IAC7BC,EAAcD,aAAeA,IAExB,IAAA59e,eAAc6tP,EAAkBgwP,EACzC,CACAF,EAAuBvte,YAAc,0BAA0BwzP,EAAe/V,MAC9E8vP,EAAuB9vP,iBAAmBA,EAI1C,OAAOnpP,EAAQq5e,SAAU,IAAA92P,aAHN,CAAC5lP,EAAOmD,KAAQ,IAAAxE,eAAc29e,EAAwBz/e,OAAO+lB,OAAO,CAAC,EAAG5iB,EAAO,CAChGu8e,aAAcp5e,OAEuCm5e,CACzD,CACF,CClCO,SAASK,EAAY38e,GAC1B,MAAM,GACJ63H,EAAE,SACFz4H,KACGiE,GACDrD,GACG3C,EAAGs5e,EAAM3pO,GAASyuO,EAAe5jX,EAAIx0H,GAC5C,OAAOjE,EAAS/B,EAAG,CACjBs5e,OACAtpC,IAAKspC,EAAKv7c,UACT4xO,EACL,CCVO,SAAS4vO,EAAgBnyd,GAC9B,IAAI,KACFksd,EAAI,UACJ3pC,EAAS,SACT5tc,GACEqrB,EACJ,MAAMvtB,GAAQ,IAAAqwN,UAAQ,KAAM,CAC1BopR,OACA3pC,eACE,CAAC2pC,EAAM3pC,IACX,OAAO,IAAAruc,eAAc87e,EAAYvsP,SAAU,CACzChxP,SACCkC,EACL,CCbO,SAASy9e,EAAOzB,EAAkBC,GACvC,IAAIr7e,EAAQyiB,UAAUnmB,OAAS,QAAsBof,IAAjB+G,UAAU,GAAmBA,UAAU,GAAK,CAAC,EACjF,MACEk0d,KAAMkD,GACJ75e,GAEF22e,KAAM2E,IACJ,IAAAnuR,YAAWstR,IAAgB,CAAC,EAC1B9D,EAAOkD,GAAiByB,IAAmB,SAC7C3E,EAAKtze,SAAWsze,EAAKtze,QAAQkyP,UAC7B6lP,IAAqBzE,EAAKn6B,uBAC5Bm6B,EAAKrtN,SAAS4qL,cAAcxnc,KAAO0ue,EACnCzE,EAAKtze,QAAQw0H,GAAKh7H,OAAO2rE,OAAO4ya,GAAkB12b,QAAO,CAACs1Z,EAAK8iC,KAC7Djgf,OAAOiC,KAAKg+e,GAAcp3e,SAAQmyH,IAC5BmiV,EAAI97c,QAAQ25H,GAAM,GAAGmiV,EAAI77c,KAAK05H,EAAG,IAEhCmiV,IACN28B,EAAKtze,QAAQw0H,IAChB8+W,EAAKn6B,sBAAuB,EAC5Bm6B,EAAK3tN,eAAgB,GAEnBqyN,IAAoB1E,EAAKoG,0BAC3BpG,EAAKroC,eAAe+sC,GACpB1E,EAAKoG,yBAA0B,GAEnC,CCvBO,SAASC,IACd,OAAO,SAAgBxwP,GACrB,SAASywP,EAAexyd,GACtB,IAAI,iBACF2wd,EAAgB,gBAChBC,KACG77e,GACDirB,EAEJ,OADAoyd,EAAOzB,EAAkBC,IAClB,IAAA18e,eAAc6tP,EAAkB,IAClChtP,GAEP,CAIA,OAHAy9e,EAAehC,gBAAkBH,EAAoBtuP,GACrDywP,EAAelue,YAAc,kBAAkBwzP,EAAe/V,MAC9DywP,EAAezwP,iBAAmBA,EAC3BywP,CACT,CACF,CCVO,MAAMnwe,EAAO,IAAM,GACbjB,EAAO,IAAM,GACbw9C,EAAS,IAAM,GACf,EAAS,IAAM,GACf6zb,EAAS,IAAM,GACfC,EAAgB,IAAM,sFCXnC,MAAM39N,EAAuB,gBAAoB,CAAC,GAG5CC,GAAyB,EAE/B,SAASC,GAA4B,UAAEC,EAAS,eAAEC,EAAc,MAAE3/Q,EAAK,OAAEC,EAAM,aAAE2/Q,EAAY,OAAEC,EAAM,UAAEnkC,EAAS,SAAEnuO,EAAQ,gBAAEuyQ,EAAkBN,IAC1I,MAAM9/Q,EAAQ,CAAC,EAmBf,MAlBkB,QAAdg8O,IACAh8O,EAAM,yBAA2B,WACb,kBAAb6N,IACP7N,EAAM,wBAA0B,GAAG6N,MAClCuyQ,IACDpgR,EAAM,4BAA8B,QACnB,kBAAVM,GAAuC,kBAAVA,IACpCN,EAAMM,MAAQA,GACI,kBAAXC,GAAyC,kBAAXA,IACrCP,EAAMO,OAASA,GACS,kBAAjB2/Q,GAAqD,kBAAjBA,IAC3ClgR,EAAMkgR,aAAeA,GACrBC,IACAngR,EAAMkgR,aAAe,OACA,qBAAdF,IACPhgR,EAAM,gBAAkBggR,GACE,qBAAnBC,IACPjgR,EAAM,qBAAuBigR,GAC1BjgR,CACX,CACA,SAASy9e,GAAS,MAAElme,EAAQ,EAAG4kG,QAASmkK,EAASvgR,UAAW+6P,EAAe,mBAAEx2B,EAAkB,gBAAEi8C,EAAe,OAAEJ,GAAS,EAAOngR,MAAOwgR,KAAcC,IACnJ,IAAI91O,EAAIC,EAAIqO,EACZ,MAAMynO,EAAsB,aAAiBb,GACvCc,EAAoB,IAAKF,GAG/B,IAAK,MAAOpjR,EAAKE,KAAUL,OAAO+yC,QAAQwwO,GACjB,qBAAVljR,UACAojR,EAAkBtjR,GAIjC,MAAMohG,EAAe,IACdiiL,KACAC,EACHR,UAGEngR,EAAQ,IACPwgR,KACAT,EAA4BthL,IAEnC,IAAI1+F,EAAY,yBACZ+6P,IACA/6P,GAAa,IAAI+6P,KACrB,MAAM8lB,EAAwC,QAA9Bj2O,EAAK8zD,EAAamiL,cAA2B,IAAPj2O,GAAgBA,EAChE1oC,EAAW,GACX4+Q,EAAY/tP,KAAK87B,KAAKr3C,GAC5B,IAAK,IAAI7a,EAAI,EAAGA,EAAImkR,EAAWnkR,IAAK,CAChC,IAAIokR,EAAY9gR,EAChB,GAAI6gR,EAAYtpQ,GAAS7a,IAAMmkR,EAAY,EAAG,CAO1C,MAAMvgR,EAAmC,QAA1BsqC,EAAKk2O,EAAUxgR,aAA0B,IAAPsqC,EAAgBA,EAAK,OAChEm2O,EAAiBxpQ,EAAQ,EACzBypQ,EAAmC,kBAAV1gR,EACzBA,EAAQygR,EACR,QAAQzgR,OAAWygR,KACzBD,EAAY,IAAKA,EAAWxgR,MAAO0gR,EACvC,CACA,MAAMC,EAAgB,gBAAoB,OAAQ,CAAElhR,UAAWA,EAAWC,MAAO8gR,EAAWzjR,IAAKX,GAAK,UAClGkkR,EACA3+Q,EAASzD,KAAKyiR,GAKdh/Q,EAASzD,KAAK,gBAAoB,WAAgB,CAAEnB,IAAKX,GACrDukR,EACA,gBAAoB,KAAM,OAEtC,CACA,OAAQ,gBAAoB,OAAQ,CAAElhR,UAAWukO,EAAoB,cAAei8C,EAAiB,YAAa,SAAU,YAAqD,QAAvCtnO,EAAKwlD,EAAa2hL,uBAAoC,IAAPnnO,EAAgBA,EAAK6mO,GAA0BQ,EAClOr+Q,EAAShB,KAAI,CAAC0V,EAAIja,IAAM,gBAAoB4jR,EAAS,CAAEjjR,IAAKX,GAAKia,KACjE1U,EACV,4SCWA,MAAMy7e,EACJ,oEAGIC,EAAe,YAAE,KAEjBC,EAA2B,CAACnuB,oBAAoB,GAChDouB,EAAe,gCAIfC,EAAe,CACnB,CAACrne,KAAM,aAAczH,GAAI,wCACzB,CAACyH,KAAM,qBAAsBzH,GAAI,wCACjC,CACEyH,KAAM,YACNzH,GAAI,qDACJsxB,GAAI,gBAEN,CACE7pB,KAAM,eACNzH,GAAI,qDACJsxB,GAAI,mBAEN,CACE7pB,KAAM,kBACNzH,GAAI,qDACJsxB,GAAI,sBAEN,CAAC7pB,KAAM,aAAczH,GAAI,wCACzB,CAACyH,KAAM,sBAAuBzH,GAAI,+BAClC,CACEyH,KAAM,mBACNzH,GAAI,kDAEN,CAACyH,KAAM,aAAczH,GAAI,qBACzB,CAACyH,KAAM,UAAWzH,GAAI,kCAAmCsxB,GAAI,iBAC7D,CAAC7pB,KAAM,eAAgBzH,GAAI,wBAC3B,CAACyH,KAAM,YAAazH,GAAI,iCAAkCsxB,GAAI,cAC9D,CAAC7pB,KAAM,SAAUzH,GAAI,4BAA6BsxB,GAAI,YACtD,CAAC7pB,KAAM,YAAazH,GAAI,qBACxB,CAACyH,KAAM,oBAAqBzH,GAAI,oBAAqBsxB,GAAI,gBACzD,CAAC7pB,KAAM,mBAAoBzH,GAAI,oBAAqBsxB,GAAI,iBAWnD,SAASy9c,EAASr6e,GACvB,MAAMs6e,EAAkBt6e,EAAQs6e,gBAC1BC,EAAev6e,EAAQu6e,aACvBx+e,EAAWiE,EAAQjE,UAAY,GAC/BM,EAAY2D,EAAQ3D,UACpB+wF,EAAaptF,EAAQotF,WACrBotZ,EAAqBx6e,EAAQw6e,mBAC7BC,EAAgBz6e,EAAQy6e,eAAiBR,EACzCS,EAAgB16e,EAAQ06e,eAAiBT,EACzCU,EAAsB36e,EAAQ26e,oBAChC,IAAI36e,EAAQ26e,uBAAwBT,GACpCA,EACEU,EAAW56e,EAAQ46e,SACnBC,EAAmB76e,EAAQ66e,iBAC3BC,EAAe96e,EAAQ86e,cAAgBC,EAEvCjwC,GAAY,SACf2O,IAAI,KACJA,IAAIihC,GACJjhC,IAAI,IAAckhC,GAClBlhC,IAAIghC,GAED9ud,EAAO,IAAI,IAEO,kBAAb5vB,EACT4vB,EAAK9xB,MAAQkC,GAEb,QACE,qBACEA,EACA,4CAIFu+e,GAAmBE,IACrB,QACE,6FAIJ,IAAK,MAAMQ,KAAeZ,EACpB5gf,OAAOb,OAAOqH,EAASg7e,EAAYjoe,QACrC,QACE,eACEioe,EAAYjoe,KACZ,YACCioe,EAAYp+c,GACT,QAAUo+c,EAAYp+c,GAAK,YAC3B,aACJ,UACAo9c,EACA,IACAgB,EAAY1ve,GACZ,oBAKR,MAAM2ve,EAAYnwC,EAAUlob,MAAM+I,GAElC,IAAIuvd,EAAWpwC,EAAUqwC,QAAQF,EAAWtvd,GAiB5C,OAdItvB,IACF6+e,EAAW,CACTz9e,KAAM,UACN2+B,QAAS,MACTwzG,WAAY,CAACvzI,aAEbN,SACoB,SAAlBm/e,EAASz9e,KAAkBy9e,EAASn/e,SAAW,CAACm/e,MAKtD,QAAMA,GAgBN,SAAmBr9Z,EAAM18E,EAAO88E,GAC9B,GAAkB,QAAdJ,EAAKpgF,MAAkBwgF,GAA2B,kBAAV98E,EAO1C,OANIy5e,EACF38Z,EAAOliF,SAAS4jG,OAAOx+F,EAAO,GAE9B88E,EAAOliF,SAASoF,GAAS,CAAC1D,KAAM,OAAQ5D,MAAOgkF,EAAKhkF,OAG/CsH,EAGT,GAAkB,YAAd08E,EAAKpgF,KAAoB,CAE3B,IAAI9D,EAEJ,IAAKA,KAAO,IACV,GACEH,OAAOb,OAAO,IAAegB,IAC7BH,OAAOb,OAAOklF,EAAK+xD,WAAYj2I,GAC/B,CACA,MAAME,EAAQgkF,EAAK+xD,WAAWj2I,GACxBklB,EAAO,IAAcllB,IACd,OAATklB,GAAiBA,EAAKnlB,SAASmkF,EAAKzhD,YACtCyhD,EAAK+xD,WAAWj2I,GAAOmhf,EAAax4d,OAAOzoB,GAAS,IAAKF,EAAKkkF,GAElE,CAEJ,CAEA,GAAkB,YAAdA,EAAKpgF,KAAoB,CAC3B,IAAI4hI,EAASi7W,GACRA,EAAgB5gf,SAASmkF,EAAKzhD,WAC/Bo+c,GACEA,EAAmB9gf,SAASmkF,EAAKzhD,SAOvC,IAJKijG,GAAUk7W,GAAiC,kBAAVp5e,IACpCk+H,GAAUk7W,EAAa18Z,EAAM18E,EAAO88E,IAGlCohD,GAAUphD,GAA2B,kBAAV98E,EAO7B,OANI05e,GAAoBh9Z,EAAK9hF,SAC3BkiF,EAAOliF,SAAS4jG,OAAOx+F,EAAO,KAAM08E,EAAK9hF,UAEzCkiF,EAAOliF,SAAS4jG,OAAOx+F,EAAO,GAGzBA,CAEX,CACF,KAhEO,OAAa+5e,EAAU,CAC5BvrQ,SAAQ,WAIRviJ,aACA4oQ,oBAAoB,EACpB1yF,IAAG,MACHC,KAAI,OACJ0yF,UAAU,EACVC,UAAU,GAuDd,CAWO,SAAS6kJ,EAAoBlhf,GAIlC,MAAMuhf,EAAQvhf,EAAMgB,QAAQ,KACtBwgf,EAAexhf,EAAMgB,QAAQ,KAC7Bygf,EAAazhf,EAAMgB,QAAQ,KAC3Bu7d,EAAQv8d,EAAMgB,QAAQ,KAE5B,OAEa,IAAXugf,IAEY,IAAXhlB,GAAgBglB,EAAQhlB,IACN,IAAlBilB,GAAuBD,EAAQC,IACf,IAAhBC,GAAqBF,EAAQE,GAE9BnB,EAAat7d,KAAKhlB,EAAMmJ,MAAM,EAAGo4e,IAE1Bvhf,EAGF,EACT,iGCvTe,SAAS0hf,EAAYv7e,GAGlC,MAAMyuB,EAAOhP,KAEbgP,EAAKuiD,OAKL,SAAgBv3C,GACd,OAAO,OAAaA,EAAK,IACpBhL,EAAKplB,KAAK,eACVrJ,EAIHkpM,WAAYz6K,EAAKplB,KAAK,wBAA0B,GAChD8+c,gBAAiB15b,EAAKplB,KAAK,2BAA6B,IAE5D,CACF,gGC6Fe,SAASmye,EAAa7qZ,EAAa3wF,GAChD,OAAI2wF,GAAe,QAASA,EAInBu0D,eAAgB6/K,EAAMp5S,GAE3B,MAAMuvd,GACJ,OAAOn2K,EAAM,CAACp5S,UAAS3rB,UAEnB2wF,EAAYtf,IAAI6pa,EAAUvvd,EAClC,EAMK,SAAUo5S,EAAMp5S,GAMrB,OACE,OAAOo5S,EAAM,CAACp5S,UAAUglE,GAAe3wF,GAE3C,CACF,sCC7IO,SAASklB,EAAUigD,GACxB,OAAOA,EAAO9mD,KAAK,KAAKm0E,MAC1B,qGCvBA,MAAMipZ,EAAM,EACN32d,EAAQ,GAWP,SAAS42d,EAAU7hf,GACxB,MAAMiQ,EAASwY,OAAOzoB,GAChBsjC,EAAS,YACf,IAAIna,EAAQma,EAAO5Z,KAAKzZ,GACpBk6H,EAAO,EAEX,MAAMzgI,EAAQ,GAEd,KAAOyf,GACLzf,EAAMzI,KACJ6gf,EAAS7xe,EAAO9G,MAAMghI,EAAMhhH,EAAM7hB,OAAQ6iI,EAAO,GAAG,GACpDhhH,EAAM,IAGRghH,EAAOhhH,EAAM7hB,MAAQ6hB,EAAM,GAAG/pB,OAC9B+pB,EAAQma,EAAO5Z,KAAKzZ,GAKtB,OAFAvG,EAAMzI,KAAK6gf,EAAS7xe,EAAO9G,MAAMghI,GAAOA,EAAO,GAAG,IAE3CzgI,EAAM8a,KAAK,GACpB,CAYA,SAASs9d,EAAS9hf,EAAO8gC,EAAOC,GAC9B,IAAIooB,EAAa,EACbs6B,EAAWzjF,EAAMZ,OAErB,GAAI0hC,EAAO,CACT,IAAI9O,EAAOhyB,EAAM0vd,YAAYvma,GAE7B,KAAOn3B,IAAS4vd,GAAO5vd,IAAS/G,GAC9Bk+B,IACAn3B,EAAOhyB,EAAM0vd,YAAYvma,EAE7B,CAEA,GAAIpoB,EAAK,CACP,IAAI/O,EAAOhyB,EAAM0vd,YAAYjsY,EAAW,GAExC,KAAOzxD,IAAS4vd,GAAO5vd,IAAS/G,GAC9Bw4D,IACAzxD,EAAOhyB,EAAM0vd,YAAYjsY,EAAW,EAExC,CAEA,OAAOA,EAAWt6B,EAAanpD,EAAMmJ,MAAMggD,EAAYs6B,GAAY,EACrE,sCC7DO,SAASs+Z,EAAKz4e,GACnB,GAAIA,EACF,MAAMA,CAEV,2DCXe,SAASgzC,EAAct8C,GACrC,GAAqB,kBAAVA,GAAgC,OAAVA,EAChC,OAAO,EAGR,MAAMJ,EAAYD,OAAOo2C,eAAe/1C,GACxC,OAAsB,OAAdJ,GAAsBA,IAAcD,OAAOC,WAAkD,OAArCD,OAAOo2C,eAAen2C,OAA0Bi5C,OAAOu9D,eAAep2G,MAAY64C,OAAOI,YAAYj5C,EACtK,CC+BO,SAASgif,IAEd,MAAMjpT,EAAM,GAENkpT,EAAW,CAACzqa,IAKlB,YAAgBlM,GACd,IAAI42a,GAAmB,EAEvB,MAAMn0c,EAAWu9B,EAAOrhD,MAExB,GAAwB,oBAAb8jB,EACT,MAAM,IAAIjmB,UAAU,2CAA6CimB,IAWnE,SAASpa,EAAKrqB,KAAUkhC,GACtB,MAAMlpB,EAAKy3K,IAAMmpT,GACjB,IAAI56e,GAAS,EAEb,GAAIgC,EACFykC,EAASzkC,OADX,CAMA,OAAShC,EAAQgkE,EAAOlsE,QACA,OAAlBorC,EAAOljC,SAAqCkX,IAAlBgsB,EAAOljC,KACnCkjC,EAAOljC,GAASgkE,EAAOhkE,IAK3BgkE,EAAS9gC,EAGLlpB,EAqDH,SAAc88B,EAAYrQ,GAE/B,IAAIu4Q,EAEJ,OAAO3nM,EAQP,SAASA,KAAWqhE,GAClB,MAAMmiU,EAAoB/jc,EAAWh/C,OAAS4gL,EAAW5gL,OAEzD,IAAIqE,EAEA0+e,GACFniU,EAAW/+K,KAAK25C,GAGlB,IACEn3C,EAAS26C,EAAWz4B,MAAMC,KAAMo6J,EAClC,CAAE,MAAO12K,GAOP,GAAI64e,GAAqB77L,EACvB,MAPqC,EAUvC,OAAO1rQ,EAVgC,EAWzC,CAEKunc,IACC1+e,GAAUA,EAAOwwB,MAA+B,oBAAhBxwB,EAAOwwB,KACzCxwB,EAAOwwB,KAAKA,EAAM2mB,GACTn3C,aAAkB6lB,MAC3BsxB,EAAKn3C,GAELwwB,EAAKxwB,GAGX,CAOA,SAASm3C,EAAKtxC,KAAUkhC,GACjB87Q,IACHA,GAAS,EACTv4Q,EAASzkC,KAAUkhC,GAEvB,CAOA,SAASvW,EAAKj0B,GACZ46C,EAAK,KAAM56C,EACb,CACF,CAxHQ8hG,CAAKxgF,EAAIqS,EAATmuE,IAAkBt3D,GAElBuD,EAAS,QAASvD,EAhBpB,CAkBF,CAjCA7W,CAAK,QAAS23C,EAkChB,EAhDuBs0Y,IAmDvB,SAAawiC,GACX,GAA0B,oBAAfA,EACT,MAAM,IAAIt6d,UACR,+CAAiDs6d,GAKrD,OADArpT,EAAI93L,KAAKmhf,GACFH,CACT,GA1DA,OAAOA,CA2DT,gBCvGO,MAAMI,EAIX,SAQc3ic,GACR,MAEMnD,EAFO32B,KACO6hB,YAKpB,UACMznC,EAAQu8C,EAAMmD,GAEd/5B,EAAQ,WACZ,OAAO3lB,EAAM2lB,MAAMA,EAAOJ,UAC5B,EAgBA,OAdA5lB,OAAOgoC,eAAehiB,EAAO42B,GActB52B,CAGb,EC+TIu1U,EAAM,CAAC,EAAEn8V,eAeR,MAAMujf,UAAkBD,EAI7B,WAAA56c,GAEEuE,MAAM,QAeNpmB,KAAK28d,cAAW/je,EAYhBoH,KAAK6qD,YAASjyD,EAadoH,KAAK48d,UAAY,GAajB58d,KAAKqqc,cAAWzxc,EAShBoH,KAAK68d,aAAe,EASpB78d,KAAK88d,YAASlke,EASdoH,KAAKy/D,UAAY,CAAC,EAUlBz/D,KAAKuxD,YAAS34D,EASdoH,KAAK+8d,aAAeX,GACtB,CAaA,IAAA37Z,GAEE,MAAMyQ,EACgF,IAC9EwrZ,EAER,IAAIh7e,GAAS,EAEb,OAASA,EAAQse,KAAK48d,UAAUpjf,QAAQ,CACtC,MAAMwjf,EAAWh9d,KAAK48d,UAAUl7e,GAChCwvF,EAAY8oX,OAAOgjC,EACrB,CAIA,OAFA9rZ,EAAYtnF,KAAK42E,GAAO,EAAM,CAAC,EAAGxgE,KAAKy/D,YAEhCyR,CACT,CA6DA,IAAAtnF,CAAK1P,EAAKE,GACR,MAAmB,kBAARF,EAEgB,IAArBylB,UAAUnmB,QACZyjf,EAAe,OAAQj9d,KAAK88d,QAC5B98d,KAAKy/D,UAAUvlF,GAAOE,EACf4lB,MAIDs1U,EAAIn7V,KAAK6lB,KAAKy/D,UAAWvlF,IAAQ8lB,KAAKy/D,UAAUvlF,SAAS0e,EAI/D1e,GACF+if,EAAe,OAAQj9d,KAAK88d,QAC5B98d,KAAKy/D,UAAYvlF,EACV8lB,MAIFA,KAAKy/D,SACd,CAmBA,MAAAlmE,GACE,GAAIyG,KAAK88d,OACP,OAAO98d,KAMT,MAAMgP,EAAgC,KAEtC,OAAShP,KAAK68d,YAAc78d,KAAK48d,UAAUpjf,QAAQ,CACjD,MAAOwjf,KAAaz8e,GAAWyf,KAAK48d,UAAU58d,KAAK68d,aAEnD,IAAmB,IAAft8e,EAAQ,GACV,UAGiB,IAAfA,EAAQ,KACVA,EAAQ,QAAKqY,GAGf,MAAMstP,EAAc82O,EAAS7if,KAAK60B,KAASzuB,GAEhB,oBAAhB2lQ,GACTlmP,KAAK+8d,aAAa/iC,IAAI9zM,EAE1B,CAKA,OAHAlmP,KAAK88d,QAAS,EACd98d,KAAK68d,YAAcj6d,OAAO63R,kBAEnBz6R,IACT,CAgBA,KAAAmD,CAAM+I,GACJlM,KAAKzG,SACL,MAAM2je,EAAWC,EAAMjxd,GACjBqlD,EAASvxD,KAAKuxD,QAAUvxD,KAAK6qD,OAEnC,OADAuya,EAAa,QAAS7ra,GACfA,EAAO1uD,OAAOq6d,GAAWA,EAClC,CA4CA,OAAAl2c,CAAQ9a,EAAM8oB,GACZ,MAAMhmB,EAAOhP,KAMb,OAJAA,KAAKzG,SACL6je,EAAa,UAAWp9d,KAAKuxD,QAAUvxD,KAAK6qD,QAC5Cwya,EAAe,UAAWr9d,KAAKqqc,UAAYrqc,KAAK28d,UAEzC3nc,EAAO1G,OAAS11B,EAAWo8B,GAAQ,IAAI7V,QAAQmP,GAQtD,SAASA,EAASlP,EAASC,GACzB,MAAM69c,EAAWC,EAAMjxd,GAGjBoxd,EAEsBtud,EAAK7L,MAAM+5d,GA+BvC,SAASK,EAAS75e,EAAOwoB,GACnBxoB,IAAUwoB,EACZmT,EAAO37B,GACE07B,EACTA,EAAQlT,KAER,QAAO8oB,EAAM,yCACbA,OAAKp8B,EAAWsT,GAEpB,CArCA8C,EAAK4iD,IAAI0ra,EAAWJ,GAAU,SAAUx5e,EAAO4hU,EAAMp5S,GACnD,GAAIxoB,IAAU4hU,IAASp5S,EACrB,OAAOqxd,EAAS75e,GAKlB,MAAM85e,EAC8D,EAI9DC,EAAgBzud,EAAKvJ,UAAU+3d,EAAatxd,GA2iB1D,IAAyB9xB,EACC,kBADDA,EAziBGqjf,IAqjB5B,SAAsBrjf,GACpB,OAAOsoB,QACLtoB,GACmB,kBAAVA,GACP,eAAgBA,GAChB,eAAgBA,EAEtB,CAlBsCsjf,CAAatjf,GAziBzC8xB,EAAK9xB,MAAQqjf,EAEbvxd,EAAKruB,OAAS4/e,EAGhBF,EAAS75e,EAAqD,EAChE,GAiBF,CACF,CAiCA,WAAAi6e,CAAYzxd,GAEV,IAEIruB,EAFAqxC,GAAW,EAYf,OARAlvB,KAAKzG,SACL6je,EAAa,cAAep9d,KAAKuxD,QAAUvxD,KAAK6qD,QAChDwya,EAAe,cAAer9d,KAAKqqc,UAAYrqc,KAAK28d,UAEpD38d,KAAKgnB,QAAQ9a,GASb,SAAkBxoB,EAAOwoB,GACvBgjB,GAAW,EACXitc,EAAKz4e,GACL7F,EAASquB,CACX,IAZA0xd,EAAW,cAAe,UAAW1uc,IACrC,QAAOrxC,EAAQ,+CAERA,CAUT,CAwCA,GAAA+zE,CAAI0zP,EAAMp5S,EAAM8oB,GACd6oc,EAAWv4K,GACXtlT,KAAKzG,SAEL,MAAMwje,EAAe/8d,KAAK+8d,aAO1B,OALK/nc,GAAwB,oBAAT9oB,IAClB8oB,EAAO9oB,EACPA,OAAOtT,GAGFo8B,EAAO1G,OAAS11B,EAAWo8B,GAAQ,IAAI7V,QAAQmP,GAWtD,SAASA,EAASlP,EAASC,IACzB,QACkB,oBAATnT,EACP,qDAEF,MAAMgxd,EAAWC,EAAMjxd,GACvB6wd,EAAanra,IAAI0zP,EAAM43K,GAQvB,SAAkBx5e,EAAOo6e,EAAY5xd,GACnC,MAAM6xd,EAEFD,GAAcx4K,EAGd5hU,EACF27B,EAAO37B,GACE07B,EACTA,EAAQ2+c,KAER,QAAO/oc,EAAM,yCACbA,OAAKp8B,EAAWmle,EAAe7xd,GAEnC,GACF,CACF,CAmBA,OAAAwvd,CAAQp2K,EAAMp5S,GAEZ,IAEIruB,EAFAqxC,GAAW,EAQf,OAJAlvB,KAAK4xD,IAAI0zP,EAAMp5S,GASf,SAAkBxoB,EAAO4hU,GACvB62K,EAAKz4e,GACL7F,EAASynU,EACTp2R,GAAW,CACb,IAXA0uc,EAAW,UAAW,MAAO1uc,IAC7B,QAAOrxC,EAAQ,+CACRA,CAUT,CA+BA,SAAA4nB,CAAU6/S,EAAMp5S,GACdlM,KAAKzG,SACL,MAAM2je,EAAWC,EAAMjxd,GACjBm+b,EAAWrqc,KAAKqqc,UAAYrqc,KAAK28d,SAIvC,OAHAU,EAAe,YAAahzB,GAC5BwzB,EAAWv4K,GAEJ+kJ,EAAS/kJ,EAAM43K,EACxB,CA2DA,GAAAljC,CAAI5/c,KAAUggL,GACZ,MAAMwiU,EAAY58d,KAAK48d,UACjBn9Z,EAAYz/D,KAAKy/D,UAIvB,GAFAw9Z,EAAe,MAAOj9d,KAAK88d,QAEb,OAAV1if,QAA4Bwe,IAAVxe,QAEf,GAAqB,oBAAVA,EAChB4jf,EAAU5jf,EAAOggL,OACZ,IAAqB,kBAAVhgL,EAOhB,MAAM,IAAI8nB,UAAU,+BAAiC9nB,EAAQ,KANzDR,MAAMC,QAAQO,GAChB6jf,EAAQ7jf,GAER8jf,EAAU9jf,EAId,CAEA,OAAO4lB,KAMP,SAASmH,EAAI/sB,GACX,GAAqB,oBAAVA,EACT4jf,EAAU5jf,EAAO,QACZ,IAAqB,kBAAVA,EAShB,MAAM,IAAI8nB,UAAU,+BAAiC9nB,EAAQ,KAR7D,GAAIR,MAAMC,QAAQO,GAAQ,CACxB,MAAOq4B,KAAW2nJ,GAC2B,EAC7C4jU,EAAUvrd,EAAQ2nJ,EACpB,MACE8jU,EAAU9jf,EAId,CACF,CAMA,SAAS8jf,EAAUrgf,GACjB,KAAM,YAAaA,MAAa,aAAcA,GAC5C,MAAM,IAAI6lB,MACR,8KAIJu6d,EAAQpgf,EAAOwhB,SAEXxhB,EAAOgiR,WACTpgM,EAAUogM,SAAWr/L,GAAO,EAAMf,EAAUogM,SAAUhiR,EAAOgiR,UAEjE,CAMA,SAASo+N,EAAQ5+d,GACf,IAAI3d,GAAS,EAEb,GAAgB,OAAZ2d,QAAgCzG,IAAZyG,OAEjB,KAAIzlB,MAAMC,QAAQwlB,GAMvB,MAAM,IAAI6C,UAAU,oCAAsC7C,EAAU,KALpE,OAAS3d,EAAQ2d,EAAQ7lB,QAAQ,CAE/B2tB,EADc9H,EAAQ3d,GAExB,CAGF,CACF,CAOA,SAASs8e,EAAUvrd,EAAQ2nJ,GACzB,IAAI14K,GAAS,EACTy8e,GAAc,EAElB,OAASz8e,EAAQk7e,EAAUpjf,QACzB,GAAIojf,EAAUl7e,GAAO,KAAO+wB,EAAQ,CAClC0rd,EAAaz8e,EACb,KACF,CAGF,IAAoB,IAAhBy8e,EACFvB,EAAUvhf,KAAK,CAACo3B,KAAW2nJ,SAIxB,GAAIA,EAAW5gL,OAAS,EAAG,CAC9B,IAAK4kf,KAAY1hf,GAAQ09K,EACzB,MAAMikU,EAAiBzB,EAAUuB,GAAY,GACzC,EAAWE,IAAmB,EAAWD,KAC3CA,EAAU59Z,GAAO,EAAM69Z,EAAgBD,IAGzCxB,EAAUuB,GAAc,CAAC1rd,EAAQ2rd,KAAY1hf,EAC/C,CACF,CACF,EA+BK,MAAM4hf,GAAU,IAAI5B,GAAYnje,SASvC,SAAS6je,EAAax4e,EAAMxK,GAC1B,GAAqB,oBAAVA,EACT,MAAM,IAAI8nB,UAAU,WAAatd,EAAO,qBAE5C,CASA,SAASy4e,EAAez4e,EAAMxK,GAC5B,GAAqB,oBAAVA,EACT,MAAM,IAAI8nB,UAAU,WAAatd,EAAO,uBAE5C,CASA,SAASq4e,EAAer4e,EAAMk4e,GAC5B,GAAIA,EACF,MAAM,IAAIp5d,MACR,gBACE9e,EACA,mHAGR,CAQA,SAASi5e,EAAWz/Z,GAGlB,IAAK,EAAWA,IAA8B,kBAAdA,EAAKpgF,KACnC,MAAM,IAAIkkB,UAAU,uBAAyBk8D,EAAO,IAGxD,CAUA,SAASw/Z,EAAWh5e,EAAM25e,EAAWrvc,GACnC,IAAKA,EACH,MAAM,IAAIxrB,MACR,IAAM9e,EAAO,0BAA4B25e,EAAY,YAG3D,CAMA,SAASpB,EAAM/if,GACb,OAOF,SAAyBA,GACvB,OAAOsoB,QACLtoB,GACmB,kBAAVA,GACP,YAAaA,GACb,aAAcA,EAEpB,CAdSokf,CAAgBpkf,GAASA,EAAQ,IAAI,IAAMA,EACpD,sECnsCO,MA0EMijG,EAWX,SAKYj+E,GACR,GAAa,OAATA,QAA0BxG,IAATwG,EACnB,OAAO6xM,EAGT,GAAoB,oBAAT7xM,EACT,OAAOq/d,EAAYr/d,GAGrB,GAAoB,kBAATA,EACT,OAAOxlB,MAAMC,QAAQulB,GAe7B,SAAoBs/d,GAElB,MAAMjO,EAAS,GACf,IAAI/ue,GAAS,EAEb,OAASA,EAAQg9e,EAAMllf,QACrBi3e,EAAO/ue,GAAS27F,EAAQqhZ,EAAMh9e,IAGhC,OAAO+8e,EAAYj1a,GAMnB,SAASA,KAAO4wG,GACd,IAAI14K,GAAS,EAEb,OAASA,EAAQ+ue,EAAOj3e,QACtB,GAAIi3e,EAAO/ue,GAAOqe,MAAMC,KAAMo6J,GAAa,OAAO,EAGpD,OAAO,CACT,CACF,CAvCqCukU,CAAWv/d,GA+ChD,SAAsB2zK,GACpB,MAAM6rT,EAAuD,EAE7D,OAAOH,EAAYrwW,GAMnB,SAASA,EAAIhwD,GACX,MAAMyga,EAAsD,EAK5D,IAAI3kf,EAEJ,IAAKA,KAAO64L,EACV,GAAI8rT,EAAa3kf,KAAS0kf,EAAc1kf,GAAM,OAAO,EAGvD,OAAO,CACT,CACF,CAtEwD4kf,CAAa1/d,GAG/D,GAAoB,kBAATA,EACT,OA0ER,SAAqB2zK,GACnB,OAAO0rT,EAAYzgf,GAKnB,SAASA,EAAKogF,GACZ,OAAOA,GAAQA,EAAKpgF,OAAS+0L,CAC/B,CACF,CAnFegsT,CAAY3/d,GAGrB,MAAM,IAAIsE,MAAM,+CAEpB,EAsFF,SAAS+6d,EAAYO,GACnB,OAMA,SAAe5kf,EAAOsH,EAAO88E,GAC3B,OAAO97D,QACLu8d,EAAe7kf,IACb4kf,EAAa7kf,KACX6lB,KACA5lB,EACiB,kBAAVsH,EAAqBA,OAAQkX,EACpC4lE,QAAU5lE,GAGlB,CACF,CAEA,SAASq4M,IACP,OAAO,CACT,CAMA,SAASguR,EAAe7kf,GACtB,OAAiB,OAAVA,GAAmC,kBAAVA,GAAsB,SAAUA,CAClE,sHCrQO,MAAM8kf,EAAW9gR,EAAM,OAUjB+gR,EAAa/gR,EAAM,SAUhC,SAASA,EAAMpgO,GACb,OAQA,SAAeogF,GACb,MAAMggJ,EAAShgJ,GAAQA,EAAKoQ,UAAYpQ,EAAKoQ,SAASxwF,IAAU,CAAC,EAEjE,GACwB,kBAAfogO,EAAMn6M,MACbm6M,EAAMn6M,KAAO,GACW,kBAAjBm6M,EAAMnrI,QACbmrI,EAAMnrI,OAAS,EAEf,MAAO,CACLhvE,KAAMm6M,EAAMn6M,KACZgvE,OAAQmrI,EAAMnrI,OACdnlD,OAC0B,kBAAjBswL,EAAMtwL,QAAuBswL,EAAMtwL,QAAU,EAChDswL,EAAMtwL,YACNl1B,EAGZ,CACF,CAUO,SAAS41E,EAASpQ,GACvB,MAAMljD,EAAQikd,EAAW/ga,GACnBjjD,EAAM+jd,EAAS9ga,GAErB,GAAIljD,GAASC,EACX,MAAO,CAACD,QAAOC,MAEnB,sCC1DO,SAASikd,EAAkBhlf,GAEhC,OAAKA,GAA0B,kBAAVA,EAKjB,aAAcA,GAAS,SAAUA,EAC5Bo0F,EAASp0F,EAAMo0F,UAIpB,UAAWp0F,GAAS,QAASA,EACxBo0F,EAASp0F,GAId,SAAUA,GAAS,WAAYA,EAC1BgkO,EAAMhkO,GAIR,GAnBE,EAoBX,CAMA,SAASgkO,EAAMA,GACb,OAAO18N,EAAM08N,GAASA,EAAMn6M,MAAQ,IAAMviB,EAAM08N,GAASA,EAAMnrI,OACjE,CAMA,SAASzE,EAAS9oD,GAChB,OAAO04L,EAAM14L,GAAOA,EAAIxK,OAAS,IAAMkjM,EAAM14L,GAAOA,EAAIvK,IAC1D,CAMA,SAASz5B,EAAMtH,GACb,OAAOA,GAA0B,kBAAVA,EAAqBA,EAAQ,CACtD,mEC/EO,SAAS2kN,EAAMjkN,GACpB,OAAOA,CACT,0JCyNA,MAAMkwU,EAAQ,YAAE,KAKHq0K,GAAW,EAKXC,GAAO,EAKPC,EAAO,OAiDb,SAASC,EAAal6K,EAAMlmT,EAAMqge,EAAS55b,GAEhD,IAAIktI,EAEgB,oBAAT3zK,GAA0C,oBAAZqge,GACvC55b,EAAU45b,EAEVA,EAAUrge,GAGV2zK,EAAQ3zK,EAGV,MAAMi8E,GAAK,OAAQ03F,GACb99I,EAAO4Q,GAAW,EAAI,GAS5B,SAAS3kC,EAAQk9D,EAAM18E,EAAOg+e,GAC5B,MAAMtlf,EACJgkF,GAAwB,kBAATA,EAAoBA,EAAO,CAAC,EAG7C,GAA0B,kBAAfhkF,EAAM4D,KAAmB,CAClC,MAAM4G,EAEqB,kBAAlBxK,EAAMuiC,QACTviC,EAAMuiC,QAEc,kBAAfviC,EAAMwK,KACXxK,EAAMwK,UACNgU,EAEN7e,OAAOg5C,eAAejsB,EAAO,OAAQ,CACnC1sB,MACE,UAAW,OAAMgkF,EAAKpgF,MAAQ4G,EAAO,IAAMA,EAAO,IAAM,KAAO,KAErE,CAEA,OAAOkiB,EAEP,SAASA,IAEP,IAEI64d,EAEA7xc,EAEA8xc,EANA/hf,EAASmtU,EAQb,KAAK5rT,GAAQi8E,EAAGjd,EAAM18E,EAAOg+e,EAAQA,EAAQlmf,OAAS,SAAMof,MAE1D/a,EA0CR,SAAkBzD,GAChB,GAAIR,MAAMC,QAAQO,GAChB,OAAOA,EAGT,GAAqB,kBAAVA,EACT,MAAO,CAACilf,EAAUjlf,GAGpB,OAAiB,OAAVA,QAA4Bwe,IAAVxe,EAAsB4wU,EAAQ,CAAC5wU,EAC1D,CApDiBylf,CAASJ,EAAQrha,EAAMsha,IAE5B7hf,EAAO,KAAOyhf,GAChB,OAAOzhf,EAIX,GAAI,aAAcugF,GAAQA,EAAK9hF,SAAU,CACvC,MAAMwjf,EAA0C,EAEhD,GAAIA,EAAaxjf,UAAYuB,EAAO,KAAO0hf,EAIzC,IAHAzxc,GAAU+X,EAAUi6b,EAAaxjf,SAAS9C,QAAU,GAAKy7C,EACzD2qc,EAAeF,EAAQ3je,OAAO+je,GAEvBhyc,GAAU,GAAKA,EAASgyc,EAAaxjf,SAAS9C,QAAQ,CAC3D,MAAMuE,EAAQ+hf,EAAaxjf,SAASwxC,GAIpC,GAFA6xc,EAAYz+d,EAAQnjB,EAAO+vC,EAAQ8xc,EAAvB1+d,GAERy+d,EAAU,KAAOL,EACnB,OAAOK,EAGT7xc,EAC0B,kBAAjB6xc,EAAU,GAAkBA,EAAU,GAAK7xc,EAASmH,CAC/D,CAEJ,CAEA,OAAOp3C,CACT,CACF,CAzEAqjB,CAAQokT,OAAM1sT,EAAW,GAAzBsI,EA0EF,kGCnGO,SAAS4F,EAAMw+S,EAAMy6K,EAAeC,EAAkBC,GAE3D,IAAIp6b,EAEAzmC,EAEAqge,EAGuB,oBAAlBM,GACqB,oBAArBC,GAEP5ge,OAAOxG,EACP6me,EAAUM,EACVl6b,EAAUm6b,IAGV5ge,EAAO2ge,EAEPN,EAAUO,EACVn6b,EAAUo6b,IAGZ,QAAa36K,EAAMlmT,GAMnB,SAAkBg/D,EAAMsha,GACtB,MAAMlha,EAASkha,EAAQA,EAAQlmf,OAAS,GAClCkI,EAAQ88E,EAASA,EAAOliF,SAASlB,QAAQgjF,QAAQxlE,EACvD,OAAO6me,EAAQrha,EAAM18E,EAAO88E,EAC9B,GAVmC34B,EAWrC,qFC5RO,MAAMq6b,UAAqBx8d,MAwDhC,WAAAme,CAAYs+c,EAAeC,EAAwB9hc,GACjDlY,QAEsC,kBAA3Bg6c,IACT9hc,EAAS8hc,EACTA,OAAyBxne,GAI3B,IAAI4U,EAAS,GAETjtB,EAAU,CAAC,EACX8/e,GAAc,EAwClB,GAtCID,IAMA7/e,EAHA,SAAU6/e,GACV,WAAYA,GAMZ,UAAWA,GACX,QAASA,EALC,CAAC5nJ,MAAO4nJ,GAUX,SAAUA,EACP,CACRjqJ,UAAW,CAACiqJ,GACZ5nJ,MAAO4nJ,EAAuB5xZ,UAKtB,IAAI4xZ,IAIW,kBAAlBD,EACT3yd,EAAS2yd,GAGD5/e,EAAQisB,OAAS2zd,IACzBE,GAAc,EACd7yd,EAAS2yd,EAAct3e,QACvBtI,EAAQisB,MAAQ2zd,IAGb5/e,EAAQw3V,SAAWx3V,EAAQ8J,QAA4B,kBAAXi0C,EAAqB,CACpE,MAAM58C,EAAQ48C,EAAOljD,QAAQ,MAEd,IAAXsG,EACFnB,EAAQw3V,OAASz5S,GAEjB/9C,EAAQ8J,OAASi0C,EAAO/6C,MAAM,EAAG7B,GACjCnB,EAAQw3V,OAASz5S,EAAO/6C,MAAM7B,EAAQ,GAE1C,CAEA,IAAKnB,EAAQi4V,OAASj4V,EAAQ41V,WAAa51V,EAAQ41V,UAAW,CAC5D,MAAM33Q,EAASj+E,EAAQ41V,UAAU51V,EAAQ41V,UAAU38V,OAAS,GAExDglF,IACFj+E,EAAQi4V,MAAQh6Q,EAAOgQ,SAE3B,CAEA,MAAMtzD,EACJ36B,EAAQi4V,OAAS,UAAWj4V,EAAQi4V,MAChCj4V,EAAQi4V,MAAMt9T,MACd36B,EAAQi4V,MAQdx4U,KAAKm2U,UAAY51V,EAAQ41V,gBAAav9U,EAOtCoH,KAAKwM,MAAQjsB,EAAQisB,YAAS5T,EAO9BoH,KAAKizE,OAAS/3D,EAAQA,EAAM+3D,YAASr6E,EAWrCoH,KAAKu6R,WAAQ3hS,EAOboH,KAAKkM,KAQLlM,KAAKnX,QAAU2kB,EAOfxN,KAAKiE,KAAOiX,EAAQA,EAAMjX,UAAOrL,EASjCoH,KAAKpb,MAAO,OAAkBrE,EAAQi4V,QAAU,MAOhDx4U,KAAKw4U,MAAQj4V,EAAQi4V,YAAS5/U,EAO9BoH,KAAKwN,OAASxN,KAAKnX,QAOnBmX,KAAK+3U,OAASx3V,EAAQw3V,aAAUn/U,EAOhCoH,KAAK3V,OAAS9J,EAAQ8J,aAAUuO,EAWhCoH,KAAKsD,MACH+8d,GAAe9/e,EAAQisB,OAAwC,kBAAxBjsB,EAAQisB,MAAMlJ,MACjD/iB,EAAQisB,MAAMlJ,MACd,GAYNtD,KAAKk/b,OAOLl/b,KAAKkzR,SAOLlzR,KAAKsge,KAULtge,KAAK+U,GAEP,EAGFmrd,EAAalmf,UAAUkyB,KAAO,GAC9Bg0d,EAAalmf,UAAU4K,KAAO,GAC9Bs7e,EAAalmf,UAAUwzB,OAAS,GAChC0yd,EAAalmf,UAAU6O,QAAU,GACjCq3e,EAAalmf,UAAUspB,MAAQ,GAC/B48d,EAAalmf,UAAUi5F,YAASr6E,EAChCsne,EAAalmf,UAAUiqB,UAAOrL,EAC9Bsne,EAAalmf,UAAUm8V,eAAYv9U,EACnCsne,EAAalmf,UAAUwyB,WAAQ5T,EAC/Bsne,EAAalmf,UAAUugT,WAAQ3hS,EAC/Bsne,EAAalmf,UAAUw+V,WAAQ5/U,EAC/Bsne,EAAalmf,UAAU+9V,YAASn/U,EAChCsne,EAAalmf,UAAUqQ,YAASuO,6MCzShC,MAAM0B,EAA8B,UAClC,UACA,OACA,WACA,OACA,UACA,WACD,KAEM,MAAMime,EAuBX,WAAA1+c,CAAYznC,GAEV,IAAImG,EAKFA,EAHGnG,GAEM,OAAMA,GACL,CAACsL,KAAMtL,GACS,kBAAVA,GA+jBtB,SAAsBA,GACpB,OAAOsoB,QACLtoB,GACmB,kBAAVA,GACP,eAAgBA,GAChB,eAAgBA,EAEtB,CAtkB4Csjf,CAAatjf,GACzC,CAACA,SAEDA,EANA,CAAC,EAkBb4lB,KAAKwge,IAAM,QAASjgf,EAAU,GAAK,IAAQigf,MAU3Cxge,KAAKpW,KAAO,CAAC,EASboW,KAAKsd,QAAU,GAOftd,KAAK2zJ,SAAW,GAOhB3zJ,KAAK5lB,MAYL4lB,KAAKliB,IAULkiB,KAAKniB,OASLmiB,KAAKyge,OAIL,IAkBI98b,EAlBAjiD,GAAS,EAEb,OAASA,EAAQ4Y,EAAM9gB,QAAQ,CAC7B,MAAMmqD,EAAQrpC,EAAM5Y,GAKlBiiD,KAASpjD,QACUqY,IAAnBrY,EAAQojD,IACW,OAAnBpjD,EAAQojD,KAGR3jC,KAAK2jC,GAAmB,YAAVA,EAAsB,IAAIpjD,EAAQojD,IAAUpjD,EAAQojD,GAEtE,CAMA,IAAKA,KAASpjD,EAEP+Z,EAAMrgB,SAAS0pD,KAElB3jC,KAAK2jC,GAASpjD,EAAQojD,GAG5B,CAQA,YAAIxE,GACF,MAA4B,kBAAdn/B,KAAKta,KACf,IAAQy5C,SAASn/B,KAAKta,WACtBkT,CACN,CAcA,YAAIumC,CAASA,GACXuhc,EAAevhc,EAAU,YACzBwhc,EAAWxhc,EAAU,YACrBn/B,KAAKta,KAAO,IAAQkZ,KAAKoB,KAAK4ge,SAAW,GAAIzhc,EAC/C,CAQA,WAAIyhc,GACF,MAA4B,kBAAd5ge,KAAKta,KACf,IAAQk7e,QAAQ5ge,KAAKta,WACrBkT,CACN,CAYA,WAAIgoe,CAAQA,GACVC,EAAW7ge,KAAKm/B,SAAU,WAC1Bn/B,KAAKta,KAAO,IAAQkZ,KAAKgie,GAAW,GAAI5ge,KAAKm/B,SAC/C,CAQA,WAAI2hc,GACF,MAA4B,kBAAd9ge,KAAKta,KACf,IAAQo7e,QAAQ9ge,KAAKta,WACrBkT,CACN,CAcA,WAAIkoe,CAAQA,GAIV,GAHAH,EAAWG,EAAS,WACpBD,EAAW7ge,KAAK4ge,QAAS,WAErBE,EAAS,CACX,GAA+B,KAA3BA,EAAQh3B,YAAY,GACtB,MAAM,IAAIpmc,MAAM,iCAGlB,GAAIo9d,EAAQ7mf,SAAS,IAAK,GACxB,MAAM,IAAIypB,MAAM,yCAEpB,CAEA1D,KAAKta,KAAO,IAAQkZ,KAAKoB,KAAK4ge,QAAS5ge,KAAK+ge,MAAQD,GAAW,IACjE,CAQA,QAAIp7e,GACF,OAAOsa,KAAKsd,QAAQtd,KAAKsd,QAAQ9jC,OAAS,EAC5C,CAcA,QAAIkM,CAAKA,IACH,OAAMA,KACRA,GAAO,OAAUA,IAGnBg7e,EAAeh7e,EAAM,QAEjBsa,KAAKta,OAASA,GAChBsa,KAAKsd,QAAQjiC,KAAKqK,EAEtB,CAQA,QAAIq7e,GACF,MAA4B,kBAAd/ge,KAAKta,KACf,IAAQy5C,SAASn/B,KAAKta,KAAMsa,KAAK8ge,cACjCloe,CACN,CAcA,QAAImoe,CAAKA,GACPL,EAAeK,EAAM,QACrBJ,EAAWI,EAAM,QACjB/ge,KAAKta,KAAO,IAAQkZ,KAAKoB,KAAK4ge,SAAW,GAAIG,GAAQ/ge,KAAK8ge,SAAW,IACvE,CA+DA,IAAAE,CAAKb,EAAeC,EAAwB9hc,GAE1C,MAAMz1C,EAAUmX,KAAKnX,QAAQs3e,EAAeC,EAAwB9hc,GAIpE,MAFAz1C,EAAQ0xS,OAAQ,EAEV1xS,CACR,CA4DA,IAAA+oB,CAAKuud,EAAeC,EAAwB9hc,GAE1C,MAAMz1C,EAAUmX,KAAKnX,QAAQs3e,EAAeC,EAAwB9hc,GAIpE,OAFAz1C,EAAQ0xS,WAAQ3hS,EAET/P,CACT,CA4DA,OAAAA,CAAQs3e,EAAeC,EAAwB9hc,GAC7C,MAAMz1C,EAAU,IAAI,IAElBs3e,EACAC,EACA9hc,GAYF,OATIt+B,KAAKta,OACPmD,EAAQjE,KAAOob,KAAKta,KAAO,IAAMmD,EAAQjE,KACzCiE,EAAQqjB,KAAOlM,KAAKta,MAGtBmD,EAAQ0xS,OAAQ,EAEhBv6R,KAAK2zJ,SAASt4K,KAAKwN,GAEZA,CACT,CAeA,QAAA/O,CAASopd,GACP,QAAmBtqc,IAAfoH,KAAK5lB,MACP,MAAO,GAGT,GAA0B,kBAAf4lB,KAAK5lB,MACd,OAAO4lB,KAAK5lB,MAId,OADgB,IAAIyhK,YAAYqnT,QAAYtqc,GAC7B8yB,OAAO1rB,KAAK5lB,MAC7B,EAaF,SAASumf,EAAWhkI,EAAM/3W,GACxB,GAAI+3W,GAAQA,EAAK1iX,SAAS,IAAQu8c,KAChC,MAAM,IAAI9yb,MACR,IAAM9e,EAAO,uCAAyC,IAAQ4xc,IAAM,IAG1E,CAYA,SAASkqC,EAAe/jI,EAAM/3W,GAC5B,IAAK+3W,EACH,MAAM,IAAIj5V,MAAM,IAAM9e,EAAO,oBAEjC,CAYA,SAASi8e,EAAWn7e,EAAMd,GACxB,IAAKc,EACH,MAAM,IAAIge,MAAM,YAAc9e,EAAO,kCAEzC,sEC9jBO,MAAMq8e,EAAU,CAAC9hc,SAcxB,SAAkBz5C,EAAMo7e,GACtB,QAAgBloe,IAAZkoe,GAA4C,kBAAZA,EAClC,MAAM,IAAI5+d,UAAU,mCAGtB2+d,EAAWn7e,GACX,IAIIw7e,EAJAhmd,EAAQ,EACRC,GAAO,EACPz5B,EAAQgE,EAAKlM,OAIjB,QACcof,IAAZkoe,GACmB,IAAnBA,EAAQtnf,QACRsnf,EAAQtnf,OAASkM,EAAKlM,OACtB,CACA,KAAOkI,KACL,GAAgC,KAA5BgE,EAAKokd,YAAYpod,IAGnB,GAAIw/e,EAAc,CAChBhmd,EAAQx5B,EAAQ,EAChB,KACF,OACSy5B,EAAM,IAGf+ld,GAAe,EACf/ld,EAAMz5B,EAAQ,GAIlB,OAAOy5B,EAAM,EAAI,GAAKz1B,EAAKnC,MAAM23B,EAAOC,EAC1C,CAEA,GAAI2ld,IAAYp7e,EACd,MAAO,GAGT,IAAIy7e,GAAoB,EACpBC,EAAeN,EAAQtnf,OAAS,EAEpC,KAAOkI,KACL,GAAgC,KAA5BgE,EAAKokd,YAAYpod,IAGnB,GAAIw/e,EAAc,CAChBhmd,EAAQx5B,EAAQ,EAChB,KACF,OAEIy/e,EAAmB,IAGrBD,GAAe,EACfC,EAAmBz/e,EAAQ,GAGzB0/e,GAAgB,IAEd17e,EAAKokd,YAAYpod,KAAWo/e,EAAQh3B,YAAYs3B,KAC9CA,EAAe,IAGjBjmd,EAAMz5B,IAKR0/e,GAAgB,EAChBjmd,EAAMgmd,IAMVjmd,IAAUC,EACZA,EAAMgmd,EACGhmd,EAAM,IACfA,EAAMz1B,EAAKlM,QAGb,OAAOkM,EAAKnC,MAAM23B,EAAOC,EAC3B,EAlGkCyld,QA4GlC,SAAiBl7e,GAGf,GAFAm7e,EAAWn7e,GAES,IAAhBA,EAAKlM,OACP,MAAO,IAGT,IAGI6nf,EAHAlmd,GAAO,EACPz5B,EAAQgE,EAAKlM,OAKjB,OAASkI,GACP,GAAgC,KAA5BgE,EAAKokd,YAAYpod,IACnB,GAAI2/e,EAAgB,CAClBlmd,EAAMz5B,EACN,KACF,OACU2/e,IAEVA,GAAiB,GAIrB,OAAOlmd,EAAM,EACe,KAAxBz1B,EAAKokd,YAAY,GACf,IACA,IACM,IAAR3ub,GAAqC,KAAxBz1B,EAAKokd,YAAY,GAC5B,KACApkd,EAAKnC,MAAM,EAAG43B,EACtB,EA5I2C2ld,QAsJ3C,SAAiBp7e,GACfm7e,EAAWn7e,GAEX,IASI27e,EATA3/e,EAAQgE,EAAKlM,OAEb2hC,GAAO,EACPmmd,EAAY,EACZC,GAAY,EAGZC,EAAc,EAIlB,KAAO9/e,KAAS,CACd,MAAM0qB,EAAO1mB,EAAKokd,YAAYpod,GAE9B,GAAa,KAAT0qB,EAWA+O,EAAM,IAGRkmd,GAAiB,EACjBlmd,EAAMz5B,EAAQ,GAGH,KAAT0qB,EAEEm1d,EAAW,EACbA,EAAW7/e,EACc,IAAhB8/e,IACTA,EAAc,GAEPD,GAAY,IAGrBC,GAAe,QAzBf,GAAIH,EAAgB,CAClBC,EAAY5/e,EAAQ,EACpB,KACF,CAwBJ,CAEA,GACE6/e,EAAW,GACXpmd,EAAM,GAEU,IAAhBqmd,GAEiB,IAAhBA,GAAqBD,IAAapmd,EAAM,GAAKomd,IAAaD,EAAY,EAEvE,MAAO,GAGT,OAAO57e,EAAKnC,MAAMg+e,EAAUpmd,EAC9B,EAnNoDvc,KA6NpD,YAAiBiiC,GACf,IAEI4gc,EAFA//e,GAAS,EAIb,OAASA,EAAQm/C,EAASrnD,QACxBqnf,EAAWhgc,EAASn/C,IAEhBm/C,EAASn/C,KACX+/e,OACa7oe,IAAX6oe,EAAuB5gc,EAASn/C,GAAS+/e,EAAS,IAAM5gc,EAASn/C,IAIvE,YAAkBkX,IAAX6oe,EAAuB,IAahC,SAAmB/7e,GACjBm7e,EAAWn7e,GAEX,MAAMg8e,EAAmC,KAAxBh8e,EAAKokd,YAAY,GAGlC,IAAI1vd,EAuBN,SAAyBsL,EAAMi8e,GAC7B,IAMIv1d,EAEAw1d,EARA/jf,EAAS,GACTgkf,EAAoB,EACpBC,GAAa,EACbC,EAAO,EACPrgf,GAAS,EAMb,OAASA,GAASgE,EAAKlM,QAAQ,CAC7B,GAAIkI,EAAQgE,EAAKlM,OACf4yB,EAAO1mB,EAAKokd,YAAYpod,OACnB,IAAa,KAAT0qB,EACT,MAEAA,EAAO,EACT,CAEA,GAAa,KAATA,EAAuB,CACzB,GAAI01d,IAAcpgf,EAAQ,GAAc,IAATqgf,QAExB,GAAID,IAAcpgf,EAAQ,GAAc,IAATqgf,EAAY,CAChD,GACElkf,EAAOrE,OAAS,GACM,IAAtBqof,GAC0C,KAA1Chkf,EAAOisd,YAAYjsd,EAAOrE,OAAS,IACO,KAA1CqE,EAAOisd,YAAYjsd,EAAOrE,OAAS,GAEnC,GAAIqE,EAAOrE,OAAS,GAGlB,GAFAoof,EAAiB/jf,EAAOgqC,YAAY,KAEhC+5c,IAAmB/jf,EAAOrE,OAAS,EAAG,CACpCoof,EAAiB,GACnB/jf,EAAS,GACTgkf,EAAoB,IAEpBhkf,EAASA,EAAO0F,MAAM,EAAGq+e,GACzBC,EAAoBhkf,EAAOrE,OAAS,EAAIqE,EAAOgqC,YAAY,MAG7Di6c,EAAYpgf,EACZqgf,EAAO,EACP,QACF,OACK,GAAIlkf,EAAOrE,OAAS,EAAG,CAC5BqE,EAAS,GACTgkf,EAAoB,EACpBC,EAAYpgf,EACZqgf,EAAO,EACP,QACF,CAGEJ,IACF9jf,EAASA,EAAOrE,OAAS,EAAIqE,EAAS,MAAQ,KAC9Cgkf,EAAoB,EAExB,MACMhkf,EAAOrE,OAAS,EAClBqE,GAAU,IAAM6H,EAAKnC,MAAMu+e,EAAY,EAAGpgf,GAE1C7D,EAAS6H,EAAKnC,MAAMu+e,EAAY,EAAGpgf,GAGrCmgf,EAAoBngf,EAAQogf,EAAY,EAG1CA,EAAYpgf,EACZqgf,EAAO,CACT,MAAoB,KAAT31d,GAAyB21d,GAAQ,EAC1CA,IAEAA,GAAQ,CAEZ,CAEA,OAAOlkf,CACT,CAtGcmkf,CAAgBt8e,GAAOg8e,GAEd,IAAjBtnf,EAAMZ,QAAiBkof,IACzBtnf,EAAQ,KAGNA,EAAMZ,OAAS,GAA2C,KAAtCkM,EAAKokd,YAAYpkd,EAAKlM,OAAS,KACrDY,GAAS,KAGX,OAAOsnf,EAAW,IAAMtnf,EAAQA,CAClC,CA9BsCwqQ,CAAU68O,EAChD,EA5O0DjrC,IAAK,KA8W/D,SAASqqC,EAAWn7e,GAClB,GAAoB,kBAATA,EACT,MAAM,IAAIwc,UACR,mCAAqCsD,KAAKC,UAAU/f,GAG1D,sECpaO,MAAMu8e,EAAU,CAACzB,IAExB,WACE,MAAO,GACT,kGCKO,SAAS0B,EAAUx8e,GACxB,GAAoB,kBAATA,EACTA,EAAO,IAAI64C,IAAI74C,QACV,KAAK,OAAMA,GAAO,CAEvB,MAAMhC,EAAQ,IAAIwe,UAChB,+EACExc,EACA,KAGJ,MADAhC,EAAM0oB,KAAO,uBACP1oB,CACR,CAEA,GAAsB,UAAlBgC,EAAKiwB,SAAsB,CAE7B,MAAMjyB,EAAQ,IAAIwe,UAAU,kCAE5B,MADAxe,EAAM0oB,KAAO,yBACP1oB,CACR,CAEA,OAWF,SAA6BqxB,GAC3B,GAAqB,KAAjBA,EAAI0yG,SAAiB,CAEvB,MAAM/jI,EAAQ,IAAIwe,UAChB,wDAGF,MADAxe,EAAM0oB,KAAO,4BACP1oB,CACR,CAEA,MAAMgzB,EAAW3B,EAAI2B,SACrB,IAAIh1B,GAAS,EAEb,OAASA,EAAQg1B,EAASl9B,QACxB,GACkC,KAAhCk9B,EAASozb,YAAYpod,IACe,KAApCg1B,EAASozb,YAAYpod,EAAQ,GAC7B,CACA,MAAMygf,EAAQzrd,EAASozb,YAAYpod,EAAQ,GAC3C,GAAc,KAAVygf,GAAoC,MAAVA,EAAyB,CAErD,MAAMz+e,EAAQ,IAAIwe,UAChB,uDAGF,MADAxe,EAAM0oB,KAAO,4BACP1oB,CACR,CACF,CAGF,OAAOupC,mBAAmBvW,EAC5B,CA1CS0rd,CAAoB18e,EAC7B,sCCfO,SAAS28e,EAAMC,GACpB,OAAO5/d,QACa,OAAlB4/d,GAC2B,kBAAlBA,GACP,SAAUA,GACVA,EAAch9e,MACd,aAAcg9e,GACdA,EAAc3sd,eAES/c,IAAvB0pe,EAAcnzU,KAEpB","sources":["webpack://mba-web-client/./node_modules/@barges/react/lib/classnames.js","webpack://mba-web-client/./node_modules/@barges/react/lib/node_modules/rollup-plugin-styles/dist/runtime/inject-css.js","webpack://mba-web-client/./node_modules/@barges/react/lib/atoms/title/title.module.scss.js","webpack://mba-web-client/./node_modules/@barges/react/lib/atoms/title/title.js","webpack://mba-web-client/./node_modules/@barges/react/lib/atoms/icon/icon.module.scss.js","webpack://mba-web-client/./node_modules/@barges/react/lib/atoms/icon/icon.js","webpack://mba-web-client/./node_modules/@barges/react/lib/molecules/button/button.js","webpack://mba-web-client/./node_modules/@barges/react/lib/molecules/picker/picker.js","webpack://mba-web-client/./node_modules/@barges/react/lib/molecules/menu_item/menu_item.js","webpack://mba-web-client/./node_modules/@barges/react/lib/molecules/avatar/avatar.js","webpack://mba-web-client/./node_modules/@barges/react/lib/atoms/status_indicator/status_indicator.module.scss.js","webpack://mba-web-client/./node_modules/@barges/react/lib/atoms/status_indicator/status_indicator.js","webpack://mba-web-client/./node_modules/@barges/react/lib/molecules/input/input.js","webpack://mba-web-client/./node_modules/@barges/react/lib/organisms/footer/footer.js","webpack://mba-web-client/./node_modules/@barges/react/lib/molecules/speciality/speciality.js","webpack://mba-web-client/./node_modules/@barges/react/lib/molecules/my_orders_right_arrow/my_orders_right_arrow.js","webpack://mba-web-client/./node_modules/@barges/react/lib/organisms/my_orders_advisor_cell/my_orders_advisor_cell.js","webpack://mba-web-client/./node_modules/@barges/react/lib/atoms/label/label.module.scss.js","webpack://mba-web-client/./node_modules/@barges/react/lib/atoms/label/label.js","webpack://mba-web-client/./node_modules/@barges/react/lib/atoms/my_orders_section_divider/my_orders_section_divider.module.scss.js","webpack://mba-web-client/./node_modules/@barges/react/lib/atoms/my_orders_section_divider/my_orders_section_divider.js","webpack://mba-web-client/./node_modules/@barges/react/lib/organisms/my_orders_order_cell/img/live_chat.js","webpack://mba-web-client/./node_modules/@barges/react/lib/organisms/my_orders_order_cell/img/video_call.js","webpack://mba-web-client/./node_modules/@barges/react/lib/organisms/my_orders_order_cell/img/voice_call.js","webpack://mba-web-client/./node_modules/@barges/react/lib/organisms/my_orders_order_cell/img/clock.js","webpack://mba-web-client/./node_modules/@barges/react/lib/organisms/my_orders_order_cell/my_orders_order_cell.js","webpack://mba-web-client/./node_modules/@barges/react/lib/molecules/chat_bubble/chat-bubble.js","webpack://mba-web-client/./node_modules/@barges/react/lib/molecules/table/table.js","webpack://mba-web-client/./node_modules/@barges/react/lib/molecules/duration_item/duration_item.js","webpack://mba-web-client/./node_modules/@barges/react/lib/molecules/filter_tab/filter_tab.js","webpack://mba-web-client/./node_modules/@barges/react/lib/atoms/switch/switch.module.scss.js","webpack://mba-web-client/./node_modules/@barges/react/lib/atoms/switch/switch.js","webpack://mba-web-client/./node_modules/@barges/react/lib/atoms/play_button/img/play_button_icon.js","webpack://mba-web-client/./node_modules/@barges/react/lib/atoms/play_button/play_button.module.scss.js","webpack://mba-web-client/./node_modules/@barges/react/lib/atoms/play_button/play_button.js","webpack://mba-web-client/./node_modules/@barges/react/lib/atoms/rating/img/rating_icon.js","webpack://mba-web-client/./node_modules/@barges/react/lib/atoms/rating/rating.module.scss.js","webpack://mba-web-client/./node_modules/@barges/react/lib/atoms/rating/rating.js","webpack://mba-web-client/./node_modules/@barges/react/lib/atoms/channels_card/channels_card.module.scss.js","webpack://mba-web-client/./node_modules/@barges/react/lib/atoms/channels_card/channels_card.js","webpack://mba-web-client/./node_modules/@barges/react/lib/atoms/live_modes_prices/live_modes_prices.module.scss.js","webpack://mba-web-client/./node_modules/@barges/react/lib/atoms/live_modes_prices/live_modes_prices.js","webpack://mba-web-client/./node_modules/@barges/react/lib/atoms/reading_since_and_count/reading_since_and_count.module.scss.js","webpack://mba-web-client/./node_modules/@barges/react/lib/atoms/reading_since_and_count/reading_since_and_count.js","webpack://mba-web-client/./node_modules/@barges/react/lib/organisms/staff_pick/staff_pick_small.js","webpack://mba-web-client/./node_modules/@barges/react/lib/organisms/staff_pick/staff_pick_big.js","webpack://mba-web-client/./node_modules/@barges/react/lib/organisms/staff_pick/staff_pick.js","webpack://mba-web-client/./node_modules/@barges/react/lib/molecules/method_cell/img/right_arrow_icon.js","webpack://mba-web-client/./node_modules/@barges/react/lib/molecules/method_cell/img/hourglass_icon.js","webpack://mba-web-client/./node_modules/@barges/react/lib/molecules/method_cell/img/refresh_icon.js","webpack://mba-web-client/./node_modules/@barges/react/lib/molecules/method_cell/img/checkmark_icon.js","webpack://mba-web-client/./node_modules/@barges/react/lib/molecules/method_cell/method_cell.js","webpack://mba-web-client/./node_modules/@barges/react/lib/molecules/payment_method_details/img/delete_icon.js","webpack://mba-web-client/./node_modules/@barges/react/lib/molecules/payment_method_details/payment_method_details.js","webpack://mba-web-client/./node_modules/@barges/react/lib/molecules/channel_button/assets/chatIcon.js","webpack://mba-web-client/./node_modules/@barges/react/lib/molecules/channel_button/assets/voiceIcon.js","webpack://mba-web-client/./node_modules/@barges/react/lib/molecules/channel_button/assets/videoIcon.js","webpack://mba-web-client/./node_modules/@barges/react/lib/molecules/channel_button/channel_button.js","webpack://mba-web-client/./node_modules/@barges/react/lib/organisms/advisor_section/img/left_arrow_icon.js","webpack://mba-web-client/./node_modules/@barges/react/lib/organisms/advisor_section/img/right_arrow_icon.js","webpack://mba-web-client/./node_modules/@barges/react/lib/organisms/advisor_section/advisor_section.js","webpack://mba-web-client/./node_modules/@barges/react/lib/atoms/advisor_section_title_label/advisor_section_title_label.module.scss.js","webpack://mba-web-client/./node_modules/@barges/react/lib/atoms/advisor_section_title_label/advisor_section_title_label.js","webpack://mba-web-client/./node_modules/@barges/react/lib/atoms/advisor_section_short_descriptions/advisor_section_short_descriptions.module.scss.js","webpack://mba-web-client/./node_modules/@barges/react/lib/atoms/advisor_section_short_descriptions/advisor_section_short_descriptions.js","webpack://mba-web-client/./node_modules/@barges/react/lib/organisms/my_orders_details_item/assets/Clock.js","webpack://mba-web-client/./node_modules/@barges/react/lib/organisms/my_orders_details_item/assets/Stars.js","webpack://mba-web-client/./node_modules/@barges/react/lib/organisms/my_orders_details_item/assets/ChatTypeIcon.js","webpack://mba-web-client/./node_modules/@barges/react/lib/organisms/my_orders_details_item/my_orders_details_item.js","webpack://mba-web-client/./node_modules/@barges/react/lib/organisms/advisor_list_card/advisor_list_card_pg/advisor_list_card_pg.js","webpack://mba-web-client/./node_modules/@barges/react/lib/organisms/advisor_list_card/advisor_list_card_ka/advisor_list_card_ka.js","webpack://mba-web-client/./node_modules/@barges/react/lib/organisms/advisor_list_card/advisor_list_card_ka/assets/HeartIcon.js","webpack://mba-web-client/./node_modules/@barges/react/lib/organisms/advisor_list_card/advisor_list_card_ka/assets/RatingIcon.js","webpack://mba-web-client/./node_modules/@barges/react/lib/molecules/typing_indicator/typing_indicator.js","webpack://mba-web-client/./node_modules/@barges/react/lib/molecules/marketing_banner/marketing_banner.js","webpack://mba-web-client/./node_modules/@barges/react/lib/organisms/popover/assets/icons.js","webpack://mba-web-client/./node_modules/@barges/react/lib/organisms/popover/popover.js","webpack://mba-web-client/./node_modules/@barges/react/lib/atoms/coupon/img/arrow_img.js","webpack://mba-web-client/./node_modules/@barges/react/lib/atoms/coupon/coupon.js","webpack://mba-web-client/./node_modules/@barges/react/lib/scss/global.scss.js","webpack://mba-web-client/./node_modules/@barges/react/lib/foundation/pem_papping/pem_mapping.js","webpack://mba-web-client/./node_modules/@barges/react/lib/foundation/font/font_styling.js","webpack://mba-web-client/./node_modules/@barges/react/lib/foundation/button/button.js","webpack://mba-web-client/./node_modules/@barges/react/lib/foundation/avatar/avatar.js","webpack://mba-web-client/./node_modules/@barges/react/lib/foundation/status_indicator/status_indicator.js","webpack://mba-web-client/./node_modules/@barges/react/lib/foundation/speciality/speciality.js","webpack://mba-web-client/./node_modules/@barges/react/lib/foundation/my_orders_advisor_cell_types/my_orders_advisor_cell_types.js","webpack://mba-web-client/./node_modules/@barges/react/lib/foundation/review_type/review_type.js","webpack://mba-web-client/./node_modules/@barges/react/lib/foundation/label/label_types.js","webpack://mba-web-client/./node_modules/@barges/react/lib/foundation/label/label_sizings.js","webpack://mba-web-client/./node_modules/@barges/react/lib/foundation/order/order.js","webpack://mba-web-client/./node_modules/@barges/react/lib/foundation/filter_tab/filter_tab.js","webpack://mba-web-client/./node_modules/@barges/react/lib/foundation/play_button/play_button.js","webpack://mba-web-client/./node_modules/@barges/react/lib/foundation/rating/rating.js","webpack://mba-web-client/./node_modules/@barges/react/lib/foundation/channels_card/channels_card.js","webpack://mba-web-client/./node_modules/@barges/react/lib/foundation/advisor_list_card/advisor_list_card.js","webpack://mba-web-client/./node_modules/@barges/react/lib/foundation/live_modes_prices/live_modes_prices.js","webpack://mba-web-client/./node_modules/@barges/react/lib/foundation/reading_since_and_count/reading_since_and_count.js","webpack://mba-web-client/./node_modules/@barges/react/lib/foundation/staff_pick/staff_pick.js","webpack://mba-web-client/./node_modules/@barges/react/lib/foundation/method_cell/method_cell.js","webpack://mba-web-client/./node_modules/@barges/react/lib/foundation/my_orders_details_item/my_orders_details_item_type.js","webpack://mba-web-client/./node_modules/@barges/react/lib/foundation/payment_method_details/payment_method_details.js","webpack://mba-web-client/./node_modules/@barges/react/lib/foundation/coupon/coupon_types.js","webpack://mba-web-client/./node_modules/@barges/react/lib/foundation/profile_channel_button/profile_channel_button.js","webpack://mba-web-client/./node_modules/@barges/react/lib/foundation/index.js","webpack://mba-web-client/./node_modules/@bugsnag/browser/dist/bugsnag.js","webpack://mba-web-client/./node_modules/@bugsnag/js/browser/notifier.js","webpack://mba-web-client/./node_modules/@bugsnag/plugin-react/dist/bugsnag-react.js","webpack://mba-web-client/./node_modules/@firebase/util/dist/index.esm2017.js","webpack://mba-web-client/./node_modules/immer/dist/immer.esm.mjs","webpack://mba-web-client/./node_modules/@reduxjs/toolkit/dist/redux-toolkit.esm.js","webpack://mba-web-client/./node_modules/@remix-run/router/dist/router.js","webpack://mba-web-client/./node_modules/classnames/index.js","webpack://mba-web-client/./node_modules/d3-array/src/ticks.js","webpack://mba-web-client/./node_modules/date-fns/esm/_lib/addLeadingZeros/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/_lib/assign/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/_lib/cloneObject/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/_lib/defaultLocale/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/_lib/defaultOptions/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/_lib/format/lightFormatters/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/_lib/format/longFormatters/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/_lib/getTimezoneOffsetInMilliseconds/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/_lib/getUTCISOWeek/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/_lib/startOfUTCISOWeekYear/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/_lib/getUTCISOWeekYear/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/_lib/getUTCWeek/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/_lib/startOfUTCWeekYear/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/_lib/getUTCWeekYear/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/_lib/protectedTokens/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/_lib/requiredArgs/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/_lib/roundingMethods/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/_lib/setUTCDay/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/_lib/setUTCISODay/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/_lib/setUTCISOWeek/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/_lib/setUTCWeek/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/_lib/startOfUTCISOWeek/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/_lib/startOfUTCWeek/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/_lib/toInteger/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/add/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/addBusinessDays/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/addDays/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/addHours/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/addISOWeekYears/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/addMilliseconds/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/addMinutes/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/addMonths/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/addQuarters/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/addSeconds/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/addWeeks/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/addYears/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/areIntervalsOverlapping/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/clamp/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/closestIndexTo/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/closestTo/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/compareAsc/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/compareDesc/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/constants/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/daysToWeeks/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/differenceInBusinessDays/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/differenceInCalendarDays/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/differenceInCalendarISOWeekYears/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/differenceInCalendarISOWeeks/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/differenceInCalendarMonths/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/differenceInCalendarQuarters/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/differenceInCalendarWeeks/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/differenceInCalendarYears/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/differenceInDays/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/differenceInHours/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/differenceInISOWeekYears/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/differenceInMilliseconds/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/differenceInMinutes/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/differenceInMonths/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/differenceInQuarters/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/differenceInSeconds/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/differenceInWeeks/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/differenceInYears/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/eachDayOfInterval/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/eachHourOfInterval/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/eachMinuteOfInterval/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/eachMonthOfInterval/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/eachQuarterOfInterval/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/eachWeekOfInterval/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/eachWeekendOfInterval/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/eachWeekendOfMonth/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/eachWeekendOfYear/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/eachYearOfInterval/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/endOfDay/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/endOfDecade/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/endOfHour/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/endOfISOWeek/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/endOfISOWeekYear/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/endOfMinute/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/endOfMonth/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/endOfQuarter/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/endOfSecond/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/endOfToday/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/endOfTomorrow/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/endOfWeek/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/endOfYear/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/endOfYesterday/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/_lib/format/formatters/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/_lib/getUTCDayOfYear/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/format/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/formatDistance/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/formatDistanceStrict/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/formatDistanceToNow/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/formatDistanceToNowStrict/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/formatDuration/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/formatISO/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/formatISO9075/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/formatISODuration/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/formatRFC3339/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/formatRFC7231/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/formatRelative/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/fromUnixTime/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/getDate/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/getDay/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/getDayOfYear/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/getDaysInMonth/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/getDaysInYear/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/getDecade/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/getDefaultOptions/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/getHours/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/getISODay/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/getISOWeek/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/getISOWeekYear/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/getISOWeeksInYear/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/getMilliseconds/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/getMinutes/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/getMonth/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/getOverlappingDaysInIntervals/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/getQuarter/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/getSeconds/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/getTime/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/getUnixTime/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/getWeek/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/getWeekOfMonth/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/getWeekYear/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/getWeeksInMonth/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/getYear/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/hoursToMilliseconds/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/hoursToMinutes/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/hoursToSeconds/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/intervalToDuration/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/intlFormat/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/intlFormatDistance/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/isAfter/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/isBefore/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/isDate/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/isEqual/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/isExists/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/isFirstDayOfMonth/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/isFriday/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/isFuture/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/isLastDayOfMonth/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/isLeapYear/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/isMatch/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/isMonday/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/isPast/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/isSameDay/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/isSameHour/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/isSameISOWeek/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/isSameISOWeekYear/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/isSameMinute/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/isSameMonth/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/isSameQuarter/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/isSameSecond/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/isSameWeek/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/isSameYear/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/isSaturday/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/isSunday/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/isThisHour/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/isThisISOWeek/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/isThisMinute/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/isThisMonth/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/isThisQuarter/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/isThisSecond/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/isThisWeek/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/isThisYear/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/isThursday/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/isToday/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/isTomorrow/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/isTuesday/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/isValid/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/isWednesday/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/isWeekend/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/isWithinInterval/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/isYesterday/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/lastDayOfDecade/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/lastDayOfISOWeek/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/lastDayOfISOWeekYear/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/lastDayOfMonth/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/lastDayOfQuarter/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/lastDayOfWeek/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/lastDayOfYear/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/lightFormat/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/locale/_lib/buildFormatLongFn/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/locale/_lib/buildLocalizeFn/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/locale/_lib/buildMatchFn/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/locale/_lib/buildMatchPatternFn/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/locale/en-US/_lib/formatDistance/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/locale/en-US/_lib/formatLong/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/locale/en-US/_lib/formatRelative/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/locale/en-US/_lib/localize/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/locale/en-US/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/locale/en-US/_lib/match/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/locale/es/_lib/formatDistance/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/locale/es/_lib/formatLong/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/locale/es/_lib/formatRelative/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/locale/es/_lib/localize/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/locale/es/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/locale/es/_lib/match/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/max/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/milliseconds/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/millisecondsToHours/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/millisecondsToMinutes/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/millisecondsToSeconds/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/min/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/minutesToHours/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/minutesToMilliseconds/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/minutesToSeconds/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/monthsToQuarters/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/monthsToYears/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/nextDay/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/nextFriday/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/nextMonday/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/nextSaturday/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/nextSunday/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/nextThursday/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/nextTuesday/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/nextWednesday/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/parse/_lib/Parser.js","webpack://mba-web-client/./node_modules/date-fns/esm/parse/_lib/Setter.js","webpack://mba-web-client/./node_modules/date-fns/esm/parse/_lib/constants.js","webpack://mba-web-client/./node_modules/date-fns/esm/parse/_lib/parsers/EraParser.js","webpack://mba-web-client/./node_modules/date-fns/esm/parse/_lib/parsers/YearParser.js","webpack://mba-web-client/./node_modules/date-fns/esm/parse/_lib/parsers/LocalWeekYearParser.js","webpack://mba-web-client/./node_modules/date-fns/esm/parse/_lib/parsers/ISOWeekYearParser.js","webpack://mba-web-client/./node_modules/date-fns/esm/parse/_lib/parsers/ExtendedYearParser.js","webpack://mba-web-client/./node_modules/date-fns/esm/parse/_lib/parsers/QuarterParser.js","webpack://mba-web-client/./node_modules/date-fns/esm/parse/_lib/parsers/StandAloneQuarterParser.js","webpack://mba-web-client/./node_modules/date-fns/esm/parse/_lib/parsers/MonthParser.js","webpack://mba-web-client/./node_modules/date-fns/esm/parse/_lib/parsers/StandAloneMonthParser.js","webpack://mba-web-client/./node_modules/date-fns/esm/parse/_lib/parsers/LocalWeekParser.js","webpack://mba-web-client/./node_modules/date-fns/esm/parse/_lib/parsers/ISOWeekParser.js","webpack://mba-web-client/./node_modules/date-fns/esm/parse/_lib/parsers/DateParser.js","webpack://mba-web-client/./node_modules/date-fns/esm/parse/_lib/parsers/DayOfYearParser.js","webpack://mba-web-client/./node_modules/date-fns/esm/parse/_lib/parsers/DayParser.js","webpack://mba-web-client/./node_modules/date-fns/esm/parse/_lib/parsers/LocalDayParser.js","webpack://mba-web-client/./node_modules/date-fns/esm/parse/_lib/parsers/StandAloneLocalDayParser.js","webpack://mba-web-client/./node_modules/date-fns/esm/parse/_lib/parsers/ISODayParser.js","webpack://mba-web-client/./node_modules/date-fns/esm/parse/_lib/parsers/AMPMParser.js","webpack://mba-web-client/./node_modules/date-fns/esm/parse/_lib/parsers/AMPMMidnightParser.js","webpack://mba-web-client/./node_modules/date-fns/esm/parse/_lib/parsers/DayPeriodParser.js","webpack://mba-web-client/./node_modules/date-fns/esm/parse/_lib/parsers/Hour1to12Parser.js","webpack://mba-web-client/./node_modules/date-fns/esm/parse/_lib/parsers/Hour0to23Parser.js","webpack://mba-web-client/./node_modules/date-fns/esm/parse/_lib/parsers/Hour0To11Parser.js","webpack://mba-web-client/./node_modules/date-fns/esm/parse/_lib/parsers/Hour1To24Parser.js","webpack://mba-web-client/./node_modules/date-fns/esm/parse/_lib/parsers/MinuteParser.js","webpack://mba-web-client/./node_modules/date-fns/esm/parse/_lib/parsers/SecondParser.js","webpack://mba-web-client/./node_modules/date-fns/esm/parse/_lib/parsers/FractionOfSecondParser.js","webpack://mba-web-client/./node_modules/date-fns/esm/parse/_lib/parsers/ISOTimezoneWithZParser.js","webpack://mba-web-client/./node_modules/date-fns/esm/parse/_lib/parsers/ISOTimezoneParser.js","webpack://mba-web-client/./node_modules/date-fns/esm/parse/_lib/parsers/TimestampSecondsParser.js","webpack://mba-web-client/./node_modules/date-fns/esm/parse/_lib/parsers/TimestampMillisecondsParser.js","webpack://mba-web-client/./node_modules/date-fns/esm/parse/_lib/parsers/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/parse/_lib/utils.js","webpack://mba-web-client/./node_modules/date-fns/esm/parse/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/parseISO/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/parseJSON/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/previousDay/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/previousFriday/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/previousMonday/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/previousSaturday/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/previousSunday/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/previousThursday/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/previousTuesday/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/previousWednesday/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/quartersToMonths/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/quartersToYears/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/roundToNearestMinutes/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/secondsToHours/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/secondsToMilliseconds/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/secondsToMinutes/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/set/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/setDate/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/setDay/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/setDayOfYear/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/setDefaultOptions/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/setHours/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/setISODay/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/setISOWeek/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/setISOWeekYear/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/setMilliseconds/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/setMinutes/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/setMonth/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/setQuarter/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/setSeconds/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/setWeek/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/setWeekYear/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/setYear/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/startOfDay/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/startOfDecade/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/startOfHour/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/startOfISOWeek/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/startOfISOWeekYear/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/startOfMinute/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/startOfMonth/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/startOfQuarter/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/startOfSecond/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/startOfToday/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/startOfTomorrow/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/startOfWeek/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/startOfWeekYear/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/startOfYear/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/startOfYesterday/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/sub/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/subBusinessDays/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/subDays/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/subHours/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/subISOWeekYears/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/subMilliseconds/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/subMinutes/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/subMonths/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/subQuarters/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/subSeconds/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/subWeeks/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/subYears/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/toDate/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/weeksToDays/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/yearsToMonths/index.js","webpack://mba-web-client/./node_modules/date-fns/esm/yearsToQuarters/index.js","webpack://mba-web-client/./node_modules/deeks/lib/deeks.js","webpack://mba-web-client/./node_modules/deeks/lib/types.js","webpack://mba-web-client/./node_modules/deeks/lib/utils.js","webpack://mba-web-client/./node_modules/doc-path/lib/path.js","webpack://mba-web-client/./node_modules/domelementtype/lib/index.js","webpack://mba-web-client/./node_modules/domhandler/lib/index.js","webpack://mba-web-client/./node_modules/domhandler/lib/node.js","webpack://mba-web-client/./node_modules/extend/index.js","webpack://mba-web-client/./node_modules/fingerprintjs2/fingerprint2.js","webpack://mba-web-client/./node_modules/hast-util-to-jsx-runtime/node_modules/inline-style-parser/index.js","webpack://mba-web-client/./node_modules/hast-util-to-jsx-runtime/node_modules/style-to-object/cjs/index.js","webpack://mba-web-client/./node_modules/hoist-non-react-statics/dist/hoist-non-react-statics.cjs.js","webpack://mba-web-client/./node_modules/html-dom-parser/lib/client/constants.js","webpack://mba-web-client/./node_modules/html-dom-parser/lib/client/domparser.js","webpack://mba-web-client/./node_modules/html-dom-parser/lib/client/html-to-dom.js","webpack://mba-web-client/./node_modules/html-dom-parser/lib/client/utilities.js","webpack://mba-web-client/./node_modules/html-react-parser/lib/attributes-to-props.js","webpack://mba-web-client/./node_modules/html-react-parser/lib/dom-to-react.js","webpack://mba-web-client/./node_modules/html-react-parser/lib/index.js","webpack://mba-web-client/./node_modules/html-react-parser/lib/utilities.js","webpack://mba-web-client/./node_modules/inline-style-parser/index.js","webpack://mba-web-client/./node_modules/json-2-csv/lib/constants.js","webpack://mba-web-client/./node_modules/json-2-csv/lib/converter.js","webpack://mba-web-client/./node_modules/json-2-csv/lib/csv2json.js","webpack://mba-web-client/./node_modules/json-2-csv/lib/json2csv.js","webpack://mba-web-client/./node_modules/json-2-csv/lib/utils.js","webpack://mba-web-client/./node_modules/lodash.camelcase/index.js","webpack://mba-web-client/./node_modules/lodash.debounce/index.js","webpack://mba-web-client/./node_modules/lodash.lowercase/index.js","webpack://mba-web-client/./node_modules/lodash.snakecase/index.js","webpack://mba-web-client/./node_modules/lodash/_DataView.js","webpack://mba-web-client/./node_modules/lodash/_Hash.js","webpack://mba-web-client/./node_modules/lodash/_ListCache.js","webpack://mba-web-client/./node_modules/lodash/_Map.js","webpack://mba-web-client/./node_modules/lodash/_MapCache.js","webpack://mba-web-client/./node_modules/lodash/_Promise.js","webpack://mba-web-client/./node_modules/lodash/_Set.js","webpack://mba-web-client/./node_modules/lodash/_Stack.js","webpack://mba-web-client/./node_modules/lodash/_Symbol.js","webpack://mba-web-client/./node_modules/lodash/_Uint8Array.js","webpack://mba-web-client/./node_modules/lodash/_WeakMap.js","webpack://mba-web-client/./node_modules/lodash/_arrayEach.js","webpack://mba-web-client/./node_modules/lodash/_arrayFilter.js","webpack://mba-web-client/./node_modules/lodash/_arrayLikeKeys.js","webpack://mba-web-client/./node_modules/lodash/_arrayPush.js","webpack://mba-web-client/./node_modules/lodash/_assignValue.js","webpack://mba-web-client/./node_modules/lodash/_assocIndexOf.js","webpack://mba-web-client/./node_modules/lodash/_baseAssign.js","webpack://mba-web-client/./node_modules/lodash/_baseAssignIn.js","webpack://mba-web-client/./node_modules/lodash/_baseAssignValue.js","webpack://mba-web-client/./node_modules/lodash/_baseClone.js","webpack://mba-web-client/./node_modules/lodash/_baseCreate.js","webpack://mba-web-client/./node_modules/lodash/_baseGetAllKeys.js","webpack://mba-web-client/./node_modules/lodash/_baseGetTag.js","webpack://mba-web-client/./node_modules/lodash/_baseIsArguments.js","webpack://mba-web-client/./node_modules/lodash/_baseIsMap.js","webpack://mba-web-client/./node_modules/lodash/_baseIsNative.js","webpack://mba-web-client/./node_modules/lodash/_baseIsSet.js","webpack://mba-web-client/./node_modules/lodash/_baseIsTypedArray.js","webpack://mba-web-client/./node_modules/lodash/_baseKeys.js","webpack://mba-web-client/./node_modules/lodash/_baseKeysIn.js","webpack://mba-web-client/./node_modules/lodash/_baseTimes.js","webpack://mba-web-client/./node_modules/lodash/_baseTrim.js","webpack://mba-web-client/./node_modules/lodash/_baseUnary.js","webpack://mba-web-client/./node_modules/lodash/_cloneArrayBuffer.js","webpack://mba-web-client/./node_modules/lodash/_cloneBuffer.js","webpack://mba-web-client/./node_modules/lodash/_cloneDataView.js","webpack://mba-web-client/./node_modules/lodash/_cloneRegExp.js","webpack://mba-web-client/./node_modules/lodash/_cloneSymbol.js","webpack://mba-web-client/./node_modules/lodash/_cloneTypedArray.js","webpack://mba-web-client/./node_modules/lodash/_copyArray.js","webpack://mba-web-client/./node_modules/lodash/_copyObject.js","webpack://mba-web-client/./node_modules/lodash/_copySymbols.js","webpack://mba-web-client/./node_modules/lodash/_copySymbolsIn.js","webpack://mba-web-client/./node_modules/lodash/_coreJsData.js","webpack://mba-web-client/./node_modules/lodash/_defineProperty.js","webpack://mba-web-client/./node_modules/lodash/_freeGlobal.js","webpack://mba-web-client/./node_modules/lodash/_getAllKeys.js","webpack://mba-web-client/./node_modules/lodash/_getAllKeysIn.js","webpack://mba-web-client/./node_modules/lodash/_getMapData.js","webpack://mba-web-client/./node_modules/lodash/_getNative.js","webpack://mba-web-client/./node_modules/lodash/_getPrototype.js","webpack://mba-web-client/./node_modules/lodash/_getRawTag.js","webpack://mba-web-client/./node_modules/lodash/_getSymbols.js","webpack://mba-web-client/./node_modules/lodash/_getSymbolsIn.js","webpack://mba-web-client/./node_modules/lodash/_getTag.js","webpack://mba-web-client/./node_modules/lodash/_getValue.js","webpack://mba-web-client/./node_modules/lodash/_hashClear.js","webpack://mba-web-client/./node_modules/lodash/_hashDelete.js","webpack://mba-web-client/./node_modules/lodash/_hashGet.js","webpack://mba-web-client/./node_modules/lodash/_hashHas.js","webpack://mba-web-client/./node_modules/lodash/_hashSet.js","webpack://mba-web-client/./node_modules/lodash/_initCloneArray.js","webpack://mba-web-client/./node_modules/lodash/_initCloneByTag.js","webpack://mba-web-client/./node_modules/lodash/_initCloneObject.js","webpack://mba-web-client/./node_modules/lodash/_isIndex.js","webpack://mba-web-client/./node_modules/lodash/_isKeyable.js","webpack://mba-web-client/./node_modules/lodash/_isMasked.js","webpack://mba-web-client/./node_modules/lodash/_isPrototype.js","webpack://mba-web-client/./node_modules/lodash/_listCacheClear.js","webpack://mba-web-client/./node_modules/lodash/_listCacheDelete.js","webpack://mba-web-client/./node_modules/lodash/_listCacheGet.js","webpack://mba-web-client/./node_modules/lodash/_listCacheHas.js","webpack://mba-web-client/./node_modules/lodash/_listCacheSet.js","webpack://mba-web-client/./node_modules/lodash/_mapCacheClear.js","webpack://mba-web-client/./node_modules/lodash/_mapCacheDelete.js","webpack://mba-web-client/./node_modules/lodash/_mapCacheGet.js","webpack://mba-web-client/./node_modules/lodash/_mapCacheHas.js","webpack://mba-web-client/./node_modules/lodash/_mapCacheSet.js","webpack://mba-web-client/./node_modules/lodash/_nativeCreate.js","webpack://mba-web-client/./node_modules/lodash/_nativeKeys.js","webpack://mba-web-client/./node_modules/lodash/_nativeKeysIn.js","webpack://mba-web-client/./node_modules/lodash/_nodeUtil.js","webpack://mba-web-client/./node_modules/lodash/_objectToString.js","webpack://mba-web-client/./node_modules/lodash/_overArg.js","webpack://mba-web-client/./node_modules/lodash/_root.js","webpack://mba-web-client/./node_modules/lodash/_stackClear.js","webpack://mba-web-client/./node_modules/lodash/_stackDelete.js","webpack://mba-web-client/./node_modules/lodash/_stackGet.js","webpack://mba-web-client/./node_modules/lodash/_stackHas.js","webpack://mba-web-client/./node_modules/lodash/_stackSet.js","webpack://mba-web-client/./node_modules/lodash/_toSource.js","webpack://mba-web-client/./node_modules/lodash/_trimmedEndIndex.js","webpack://mba-web-client/./node_modules/lodash/before.js","webpack://mba-web-client/./node_modules/lodash/cloneDeep.js","webpack://mba-web-client/./node_modules/lodash/debounce.js","webpack://mba-web-client/./node_modules/lodash/eq.js","webpack://mba-web-client/./node_modules/lodash/fp.js","webpack://mba-web-client/./node_modules/lodash/fp/_baseConvert.js","webpack://mba-web-client/./node_modules/lodash/fp/_mapping.js","webpack://mba-web-client/./node_modules/lodash/fp/placeholder.js","webpack://mba-web-client/./node_modules/lodash/isArguments.js","webpack://mba-web-client/./node_modules/lodash/isArray.js","webpack://mba-web-client/./node_modules/lodash/isArrayLike.js","webpack://mba-web-client/./node_modules/lodash/isBuffer.js","webpack://mba-web-client/./node_modules/lodash/isFunction.js","webpack://mba-web-client/./node_modules/lodash/isLength.js","webpack://mba-web-client/./node_modules/lodash/isMap.js","webpack://mba-web-client/./node_modules/lodash/isObject.js","webpack://mba-web-client/./node_modules/lodash/isObjectLike.js","webpack://mba-web-client/./node_modules/lodash/isSet.js","webpack://mba-web-client/./node_modules/lodash/isSymbol.js","webpack://mba-web-client/./node_modules/lodash/isTypedArray.js","webpack://mba-web-client/./node_modules/lodash/keys.js","webpack://mba-web-client/./node_modules/lodash/keysIn.js","webpack://mba-web-client/./node_modules/lodash/lodash.min.js","webpack://mba-web-client/./node_modules/lodash/now.js","webpack://mba-web-client/./node_modules/lodash/once.js","webpack://mba-web-client/./node_modules/lodash/stubArray.js","webpack://mba-web-client/./node_modules/lodash/stubFalse.js","webpack://mba-web-client/./node_modules/lodash/toFinite.js","webpack://mba-web-client/./node_modules/lodash/toInteger.js","webpack://mba-web-client/./node_modules/lodash/toNumber.js","webpack://mba-web-client/./node_modules/mixpanel-browser/dist/mixpanel.cjs.js","webpack://mba-web-client/./node_modules/navigator.locks/dist/index.umd.js","webpack://mba-web-client/./node_modules/normalize-wheel/index.js","webpack://mba-web-client/./node_modules/normalize-wheel/src/ExecutionEnvironment.js","webpack://mba-web-client/./node_modules/normalize-wheel/src/UserAgent_DEPRECATED.js","webpack://mba-web-client/./node_modules/normalize-wheel/src/isEventSupported.js","webpack://mba-web-client/./node_modules/normalize-wheel/src/normalizeWheel.js","webpack://mba-web-client/./node_modules/object-assign/index.js","webpack://mba-web-client/./node_modules/opentok-react/dist/OTPublisher.js","webpack://mba-web-client/./node_modules/opentok-react/dist/OTSession.js","webpack://mba-web-client/./node_modules/opentok-react/dist/OTStreams.js","webpack://mba-web-client/./node_modules/opentok-react/dist/OTSubscriber.js","webpack://mba-web-client/./node_modules/opentok-react/dist/OTSubscriberContext.js","webpack://mba-web-client/./node_modules/opentok-react/dist/createSession.js","webpack://mba-web-client/./node_modules/opentok-react/dist/index.js","webpack://mba-web-client/./node_modules/opentok-react/dist/preloadScript.js","webpack://mba-web-client/./node_modules/opentok-react/node_modules/prop-types/factoryWithThrowingShims.js","webpack://mba-web-client/./node_modules/opentok-react/node_modules/prop-types/index.js","webpack://mba-web-client/./node_modules/opentok-react/node_modules/prop-types/lib/ReactPropTypesSecret.js","webpack://mba-web-client/./node_modules/prop-types/factoryWithThrowingShims.js","webpack://mba-web-client/./node_modules/prop-types/index.js","webpack://mba-web-client/./node_modules/prop-types/lib/ReactPropTypesSecret.js","webpack://mba-web-client/./node_modules/pubnub/dist/web/pubnub.min.js","webpack://mba-web-client/./node_modules/qr.js/lib/8BitByte.js","webpack://mba-web-client/./node_modules/qr.js/lib/BitBuffer.js","webpack://mba-web-client/./node_modules/qr.js/lib/ErrorCorrectLevel.js","webpack://mba-web-client/./node_modules/qr.js/lib/Polynomial.js","webpack://mba-web-client/./node_modules/qr.js/lib/QRCode.js","webpack://mba-web-client/./node_modules/qr.js/lib/RSBlock.js","webpack://mba-web-client/./node_modules/qr.js/lib/math.js","webpack://mba-web-client/./node_modules/qr.js/lib/mode.js","webpack://mba-web-client/./node_modules/qr.js/lib/util.js","webpack://mba-web-client/./node_modules/react-compound-slider/dist/rcs.esm.js","webpack://mba-web-client/./node_modules/react-device-detect/dist/lib.js","webpack://mba-web-client/./node_modules/react-device-detect/node_modules/ua-parser-js/dist/ua-parser.min.js","webpack://mba-web-client/./node_modules/react-display-name/lib/getDisplayName.js","webpack://mba-web-client/./node_modules/react-dom/cjs/react-dom.production.min.js","webpack://mba-web-client/./node_modules/react-dom/client.js","webpack://mba-web-client/./node_modules/react-dom/index.js","webpack://mba-web-client/./node_modules/react-easy-crop/node_modules/tslib/tslib.es6.js","webpack://mba-web-client/./node_modules/react-easy-crop/index.module.js","webpack://mba-web-client/./node_modules/react-easy-swipe/lib/index.js","webpack://mba-web-client/./node_modules/react-easy-swipe/lib/react-swipe.js","webpack://mba-web-client/./node_modules/react-easy-swipe/node_modules/prop-types/factoryWithThrowingShims.js","webpack://mba-web-client/./node_modules/react-easy-swipe/node_modules/prop-types/index.js","webpack://mba-web-client/./node_modules/react-easy-swipe/node_modules/prop-types/lib/ReactPropTypesSecret.js","webpack://mba-web-client/./node_modules/react-facebook-login/dist/facebook-login-render-props.js","webpack://mba-web-client/./node_modules/react-fast-compare/index.js","webpack://mba-web-client/./node_modules/react-helmet/es/Helmet.js","webpack://mba-web-client/./node_modules/react-helmet/node_modules/prop-types/factoryWithThrowingShims.js","webpack://mba-web-client/./node_modules/react-helmet/node_modules/prop-types/index.js","webpack://mba-web-client/./node_modules/react-helmet/node_modules/prop-types/lib/ReactPropTypesSecret.js","webpack://mba-web-client/./node_modules/react-hotjar/index.js","webpack://mba-web-client/./node_modules/react-hotjar/src/react-hotjar.js","webpack://mba-web-client/./node_modules/react-is/cjs/react-is.production.min.js","webpack://mba-web-client/./node_modules/react-is/index.js","webpack://mba-web-client/./node_modules/react-property/lib/index.js","webpack://mba-web-client/./node_modules/react-property/lib/possibleStandardNamesOptimized.js","webpack://mba-web-client/./node_modules/react-qr-code/lib/QRCodeSvg/index.js","webpack://mba-web-client/./node_modules/react-qr-code/lib/index.js","webpack://mba-web-client/./node_modules/react-redux/es/utils/batch.js","webpack://mba-web-client/./node_modules/react-redux/es/components/Context.js","webpack://mba-web-client/./node_modules/react-redux/es/hooks/useReduxContext.js","webpack://mba-web-client/./node_modules/react-redux/es/hooks/useSelector.js","webpack://mba-web-client/./node_modules/react-redux/node_modules/@babel/runtime/helpers/esm/extends.js","webpack://mba-web-client/./node_modules/react-redux/node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js","webpack://mba-web-client/./node_modules/react-redux/es/connect/selectorFactory.js","webpack://mba-web-client/./node_modules/react-redux/es/connect/wrapMapToProps.js","webpack://mba-web-client/./node_modules/react-redux/es/connect/invalidArgFactory.js","webpack://mba-web-client/./node_modules/react-redux/es/connect/mergeProps.js","webpack://mba-web-client/./node_modules/react-redux/es/utils/Subscription.js","webpack://mba-web-client/./node_modules/react-redux/es/utils/useIsomorphicLayoutEffect.js","webpack://mba-web-client/./node_modules/react-redux/es/utils/shallowEqual.js","webpack://mba-web-client/./node_modules/react-redux/es/components/connect.js","webpack://mba-web-client/./node_modules/react-redux/es/connect/mapStateToProps.js","webpack://mba-web-client/./node_modules/react-redux/es/connect/mapDispatchToProps.js","webpack://mba-web-client/./node_modules/react-redux/es/utils/bindActionCreators.js","webpack://mba-web-client/./node_modules/react-redux/es/components/Provider.js","webpack://mba-web-client/./node_modules/react-redux/es/hooks/useStore.js","webpack://mba-web-client/./node_modules/react-redux/es/hooks/useDispatch.js","webpack://mba-web-client/./node_modules/react-redux/es/index.js","webpack://mba-web-client/./node_modules/react-redux/es/utils/useSyncExternalStore.js","webpack://mba-web-client/./node_modules/react-redux/node_modules/react-is/cjs/react-is.production.min.js","webpack://mba-web-client/./node_modules/react-redux/node_modules/react-is/index.js","webpack://mba-web-client/./node_modules/react-responsive-carousel/lib/js/CSSTranslate.js","webpack://mba-web-client/./node_modules/react-responsive-carousel/lib/js/components/Carousel/animations.js","webpack://mba-web-client/./node_modules/react-responsive-carousel/lib/js/components/Carousel/index.js","webpack://mba-web-client/./node_modules/react-responsive-carousel/lib/js/components/Carousel/utils.js","webpack://mba-web-client/./node_modules/react-responsive-carousel/lib/js/components/Thumbs.js","webpack://mba-web-client/./node_modules/react-responsive-carousel/lib/js/cssClasses.js","webpack://mba-web-client/./node_modules/react-responsive-carousel/lib/js/dimensions.js","webpack://mba-web-client/./node_modules/react-responsive-carousel/lib/js/index.js","webpack://mba-web-client/./node_modules/react-responsive-carousel/lib/js/shims/document.js","webpack://mba-web-client/./node_modules/react-responsive-carousel/lib/js/shims/window.js","webpack://mba-web-client/./node_modules/react-responsive-carousel/node_modules/classnames/index.js","webpack://mba-web-client/./node_modules/react-router-dom-last-location/dist/index.es.js","webpack://mba-web-client/./node_modules/react-router-dom/dist/index.js","webpack://mba-web-client/./node_modules/react-router/dist/index.js","webpack://mba-web-client/./node_modules/react-side-effect/lib/index.js","webpack://mba-web-client/./node_modules/react-webcam/dist/react-webcam.js","webpack://mba-web-client/./node_modules/react/cjs/react-jsx-runtime.production.min.js","webpack://mba-web-client/./node_modules/react/cjs/react.production.min.js","webpack://mba-web-client/./node_modules/react/index.js","webpack://mba-web-client/./node_modules/react/jsx-runtime.js","webpack://mba-web-client/./node_modules/redux-logger/dist/redux-logger.js","webpack://mba-web-client/./node_modules/redux-thunk/es/index.js","webpack://mba-web-client/./node_modules/redux/node_modules/@babel/runtime/helpers/esm/defineProperty.js","webpack://mba-web-client/./node_modules/redux/node_modules/@babel/runtime/helpers/esm/objectSpread2.js","webpack://mba-web-client/./node_modules/redux/es/redux.js","webpack://mba-web-client/./node_modules/scheduler/cjs/scheduler.production.min.js","webpack://mba-web-client/./node_modules/scheduler/index.js","webpack://mba-web-client/./node_modules/scriptjs/dist/script.js","webpack://mba-web-client/./node_modules/semver/classes/comparator.js","webpack://mba-web-client/./node_modules/semver/classes/range.js","webpack://mba-web-client/./node_modules/semver/classes/semver.js","webpack://mba-web-client/./node_modules/semver/functions/clean.js","webpack://mba-web-client/./node_modules/semver/functions/cmp.js","webpack://mba-web-client/./node_modules/semver/functions/coerce.js","webpack://mba-web-client/./node_modules/semver/functions/compare-build.js","webpack://mba-web-client/./node_modules/semver/functions/compare-loose.js","webpack://mba-web-client/./node_modules/semver/functions/compare.js","webpack://mba-web-client/./node_modules/semver/functions/diff.js","webpack://mba-web-client/./node_modules/semver/functions/eq.js","webpack://mba-web-client/./node_modules/semver/functions/gt.js","webpack://mba-web-client/./node_modules/semver/functions/gte.js","webpack://mba-web-client/./node_modules/semver/functions/inc.js","webpack://mba-web-client/./node_modules/semver/functions/lt.js","webpack://mba-web-client/./node_modules/semver/functions/lte.js","webpack://mba-web-client/./node_modules/semver/functions/major.js","webpack://mba-web-client/./node_modules/semver/functions/minor.js","webpack://mba-web-client/./node_modules/semver/functions/neq.js","webpack://mba-web-client/./node_modules/semver/functions/parse.js","webpack://mba-web-client/./node_modules/semver/functions/patch.js","webpack://mba-web-client/./node_modules/semver/functions/prerelease.js","webpack://mba-web-client/./node_modules/semver/functions/rcompare.js","webpack://mba-web-client/./node_modules/semver/functions/rsort.js","webpack://mba-web-client/./node_modules/semver/functions/satisfies.js","webpack://mba-web-client/./node_modules/semver/functions/sort.js","webpack://mba-web-client/./node_modules/semver/functions/valid.js","webpack://mba-web-client/./node_modules/semver/index.js","webpack://mba-web-client/./node_modules/semver/internal/constants.js","webpack://mba-web-client/./node_modules/semver/internal/debug.js","webpack://mba-web-client/./node_modules/semver/internal/identifiers.js","webpack://mba-web-client/./node_modules/semver/internal/lrucache.js","webpack://mba-web-client/./node_modules/semver/internal/parse-options.js","webpack://mba-web-client/./node_modules/semver/internal/re.js","webpack://mba-web-client/./node_modules/semver/ranges/gtr.js","webpack://mba-web-client/./node_modules/semver/ranges/intersects.js","webpack://mba-web-client/./node_modules/semver/ranges/ltr.js","webpack://mba-web-client/./node_modules/semver/ranges/max-satisfying.js","webpack://mba-web-client/./node_modules/semver/ranges/min-satisfying.js","webpack://mba-web-client/./node_modules/semver/ranges/min-version.js","webpack://mba-web-client/./node_modules/semver/ranges/outside.js","webpack://mba-web-client/./node_modules/semver/ranges/simplify.js","webpack://mba-web-client/./node_modules/semver/ranges/subset.js","webpack://mba-web-client/./node_modules/semver/ranges/to-comparators.js","webpack://mba-web-client/./node_modules/semver/ranges/valid.js","webpack://mba-web-client/./node_modules/style-to-js/cjs/index.js","webpack://mba-web-client/./node_modules/style-to-js/cjs/utilities.js","webpack://mba-web-client/./node_modules/style-to-object/cjs/index.js","webpack://mba-web-client/./node_modules/tslib/tslib.es6.js","webpack://mba-web-client/./node_modules/ua-parser-js/src/ua-parser.js","webpack://mba-web-client/./node_modules/universal-cookie/es6/utils.js","webpack://mba-web-client/./node_modules/universal-cookie/es6/index.js","webpack://mba-web-client/./node_modules/universal-cookie/es6/Cookies.js","webpack://mba-web-client/./node_modules/universal-cookie/node_modules/cookie/index.js","webpack://mba-web-client/./node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.production.min.js","webpack://mba-web-client/./node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.production.min.js","webpack://mba-web-client/./node_modules/use-sync-external-store/shim/index.js","webpack://mba-web-client/./node_modules/use-sync-external-store/shim/with-selector.js","webpack://mba-web-client/./node_modules/uuid/index.js","webpack://mba-web-client/./node_modules/uuid/lib/bytesToUuid.js","webpack://mba-web-client/./node_modules/uuid/lib/rng-browser.js","webpack://mba-web-client/./node_modules/uuid/v1.js","webpack://mba-web-client/./node_modules/uuid/v4.js","webpack://mba-web-client/./node_modules/void-elements/index.js","webpack://mba-web-client/./node_modules/warning/warning.js","webpack://mba-web-client/./node_modules/react-loading-skeleton/dist/index.cjs","webpack://mba-web-client/./node_modules/@firebase/app/dist/esm/index.esm2017.js","webpack://mba-web-client/./node_modules/@firebase/component/dist/esm/index.esm2017.js","webpack://mba-web-client/./node_modules/@firebase/logger/dist/esm/index.esm2017.js","webpack://mba-web-client/./node_modules/comma-separated-tokens/index.js","webpack://mba-web-client/./node_modules/date-fns/node_modules/@babel/runtime/helpers/esm/arrayLikeToArray.js","webpack://mba-web-client/./node_modules/date-fns/node_modules/@babel/runtime/helpers/esm/assertThisInitialized.js","webpack://mba-web-client/./node_modules/date-fns/node_modules/@babel/runtime/helpers/esm/classCallCheck.js","webpack://mba-web-client/./node_modules/date-fns/node_modules/@babel/runtime/helpers/esm/createClass.js","webpack://mba-web-client/./node_modules/date-fns/node_modules/@babel/runtime/helpers/esm/createForOfIteratorHelper.js","webpack://mba-web-client/./node_modules/date-fns/node_modules/@babel/runtime/helpers/esm/createSuper.js","webpack://mba-web-client/./node_modules/date-fns/node_modules/@babel/runtime/helpers/esm/defineProperty.js","webpack://mba-web-client/./node_modules/date-fns/node_modules/@babel/runtime/helpers/esm/getPrototypeOf.js","webpack://mba-web-client/./node_modules/date-fns/node_modules/@babel/runtime/helpers/esm/inherits.js","webpack://mba-web-client/./node_modules/date-fns/node_modules/@babel/runtime/helpers/esm/isNativeReflectConstruct.js","webpack://mba-web-client/./node_modules/date-fns/node_modules/@babel/runtime/helpers/esm/possibleConstructorReturn.js","webpack://mba-web-client/./node_modules/date-fns/node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js","webpack://mba-web-client/./node_modules/date-fns/node_modules/@babel/runtime/helpers/esm/toPrimitive.js","webpack://mba-web-client/./node_modules/date-fns/node_modules/@babel/runtime/helpers/esm/toPropertyKey.js","webpack://mba-web-client/./node_modules/date-fns/node_modules/@babel/runtime/helpers/esm/typeof.js","webpack://mba-web-client/./node_modules/date-fns/node_modules/@babel/runtime/helpers/esm/unsupportedIterableToArray.js","webpack://mba-web-client/./node_modules/decode-named-character-reference/index.dom.js","webpack://mba-web-client/./node_modules/devlop/lib/default.js","webpack://mba-web-client/./node_modules/estree-util-is-identifier-name/lib/index.js","webpack://mba-web-client/./node_modules/firebase/app/dist/esm/index.esm.js","webpack://mba-web-client/./node_modules/@firebase/auth/dist/esm2017/index-2cab5241.js","webpack://mba-web-client/./node_modules/@firebase/database/dist/index.esm2017.js","webpack://mba-web-client/./node_modules/@firebase/installations/dist/esm/index.esm2017.js","webpack://mba-web-client/./node_modules/@firebase/messaging/dist/esm/index.esm2017.js","webpack://mba-web-client/./node_modules/hast-util-to-jsx-runtime/node_modules/style-to-object/esm/index.mjs","webpack://mba-web-client/./node_modules/hast-util-to-jsx-runtime/lib/index.js","webpack://mba-web-client/./node_modules/hast-util-whitespace/lib/index.js","webpack://mba-web-client/./node_modules/hls.js/dist/hls.mjs","webpack://mba-web-client/./node_modules/html-react-parser/esm/index.mjs","webpack://mba-web-client/./node_modules/html-url-attributes/lib/index.js","webpack://mba-web-client/./node_modules/i18next/dist/esm/i18next.js","webpack://mba-web-client/./node_modules/idb/build/wrap-idb-value.js","webpack://mba-web-client/./node_modules/idb/build/index.js","webpack://mba-web-client/./node_modules/jose/dist/browser/lib/buffer_utils.js","webpack://mba-web-client/./node_modules/jose/dist/browser/runtime/base64url.js","webpack://mba-web-client/./node_modules/jose/dist/browser/util/errors.js","webpack://mba-web-client/./node_modules/jose/dist/browser/runtime/webcrypto.js","webpack://mba-web-client/./node_modules/jose/dist/browser/lib/crypto_key.js","webpack://mba-web-client/./node_modules/jose/dist/browser/lib/invalid_key_input.js","webpack://mba-web-client/./node_modules/jose/dist/browser/runtime/is_key_like.js","webpack://mba-web-client/./node_modules/jose/dist/browser/lib/is_object.js","webpack://mba-web-client/./node_modules/jose/dist/browser/lib/is_jwk.js","webpack://mba-web-client/./node_modules/jose/dist/browser/runtime/jwk_to_key.js","webpack://mba-web-client/./node_modules/jose/dist/browser/runtime/normalize_key.js","webpack://mba-web-client/./node_modules/jose/dist/browser/runtime/sign.js","webpack://mba-web-client/./node_modules/jose/dist/browser/runtime/get_sign_verify_key.js","webpack://mba-web-client/./node_modules/jose/dist/browser/runtime/check_key_length.js","webpack://mba-web-client/./node_modules/jose/dist/browser/runtime/subtle_dsa.js","webpack://mba-web-client/./node_modules/jose/dist/browser/lib/is_disjoint.js","webpack://mba-web-client/./node_modules/jose/dist/browser/lib/check_key_type.js","webpack://mba-web-client/./node_modules/jose/dist/browser/lib/validate_crit.js","webpack://mba-web-client/./node_modules/jose/dist/browser/jws/flattened/sign.js","webpack://mba-web-client/./node_modules/jose/dist/browser/jws/compact/sign.js","webpack://mba-web-client/./node_modules/jose/dist/browser/lib/epoch.js","webpack://mba-web-client/./node_modules/jose/dist/browser/lib/secs.js","webpack://mba-web-client/./node_modules/jose/dist/browser/jwt/produce.js","webpack://mba-web-client/./node_modules/jose/dist/browser/jwt/sign.js","webpack://mba-web-client/./node_modules/mdast-util-from-markdown/lib/index.js","webpack://mba-web-client/./node_modules/mdast-util-to-hast/lib/footer.js","webpack://mba-web-client/./node_modules/mdast-util-to-hast/lib/handlers/list-item.js","webpack://mba-web-client/./node_modules/mdast-util-to-hast/lib/handlers/index.js","webpack://mba-web-client/./node_modules/mdast-util-to-hast/lib/handlers/blockquote.js","webpack://mba-web-client/./node_modules/mdast-util-to-hast/lib/handlers/break.js","webpack://mba-web-client/./node_modules/mdast-util-to-hast/lib/handlers/code.js","webpack://mba-web-client/./node_modules/mdast-util-to-hast/lib/handlers/delete.js","webpack://mba-web-client/./node_modules/mdast-util-to-hast/lib/handlers/emphasis.js","webpack://mba-web-client/./node_modules/mdast-util-to-hast/lib/handlers/footnote-reference.js","webpack://mba-web-client/./node_modules/mdast-util-to-hast/lib/handlers/heading.js","webpack://mba-web-client/./node_modules/mdast-util-to-hast/lib/handlers/html.js","webpack://mba-web-client/./node_modules/mdast-util-to-hast/lib/handlers/image-reference.js","webpack://mba-web-client/./node_modules/mdast-util-to-hast/lib/handlers/image.js","webpack://mba-web-client/./node_modules/mdast-util-to-hast/lib/handlers/inline-code.js","webpack://mba-web-client/./node_modules/mdast-util-to-hast/lib/handlers/link-reference.js","webpack://mba-web-client/./node_modules/mdast-util-to-hast/lib/handlers/link.js","webpack://mba-web-client/./node_modules/mdast-util-to-hast/lib/handlers/list.js","webpack://mba-web-client/./node_modules/mdast-util-to-hast/lib/handlers/paragraph.js","webpack://mba-web-client/./node_modules/mdast-util-to-hast/lib/handlers/root.js","webpack://mba-web-client/./node_modules/mdast-util-to-hast/lib/handlers/strong.js","webpack://mba-web-client/./node_modules/mdast-util-to-hast/lib/handlers/table.js","webpack://mba-web-client/./node_modules/mdast-util-to-hast/lib/handlers/table-cell.js","webpack://mba-web-client/./node_modules/mdast-util-to-hast/lib/handlers/table-row.js","webpack://mba-web-client/./node_modules/mdast-util-to-hast/lib/handlers/text.js","webpack://mba-web-client/./node_modules/mdast-util-to-hast/lib/handlers/thematic-break.js","webpack://mba-web-client/./node_modules/mdast-util-to-hast/lib/index.js","webpack://mba-web-client/./node_modules/mdast-util-to-hast/lib/revert.js","webpack://mba-web-client/./node_modules/mdast-util-to-hast/lib/state.js","webpack://mba-web-client/./node_modules/mdast-util-to-hast/node_modules/@ungap/structured-clone/esm/deserialize.js","webpack://mba-web-client/./node_modules/mdast-util-to-hast/node_modules/@ungap/structured-clone/esm/serialize.js","webpack://mba-web-client/./node_modules/mdast-util-to-hast/node_modules/@ungap/structured-clone/esm/index.js","webpack://mba-web-client/./node_modules/mdast-util-to-hast/node_modules/@ungap/structured-clone/esm/types.js","webpack://mba-web-client/./node_modules/mdast-util-to-string/lib/index.js","webpack://mba-web-client/./node_modules/micromark-core-commonmark/lib/blank-line.js","webpack://mba-web-client/./node_modules/micromark-factory-space/index.js","webpack://mba-web-client/./node_modules/micromark-util-character/index.js","webpack://mba-web-client/./node_modules/micromark-util-chunked/index.js","webpack://mba-web-client/./node_modules/micromark-util-combine-extensions/index.js","webpack://mba-web-client/./node_modules/micromark-util-decode-numeric-character-reference/index.js","webpack://mba-web-client/./node_modules/micromark-util-decode-string/index.js","webpack://mba-web-client/./node_modules/micromark-util-normalize-identifier/index.js","webpack://mba-web-client/./node_modules/micromark-util-resolve-all/index.js","webpack://mba-web-client/./node_modules/micromark-util-sanitize-uri/index.js","webpack://mba-web-client/./node_modules/micromark-util-subtokenize/index.js","webpack://mba-web-client/./node_modules/micromark-util-subtokenize/lib/splice-buffer.js","webpack://mba-web-client/./node_modules/micromark-core-commonmark/lib/thematic-break.js","webpack://mba-web-client/./node_modules/micromark-core-commonmark/lib/list.js","webpack://mba-web-client/./node_modules/micromark-core-commonmark/lib/block-quote.js","webpack://mba-web-client/./node_modules/micromark-factory-destination/index.js","webpack://mba-web-client/./node_modules/micromark-factory-label/index.js","webpack://mba-web-client/./node_modules/micromark-factory-title/index.js","webpack://mba-web-client/./node_modules/micromark-factory-whitespace/index.js","webpack://mba-web-client/./node_modules/micromark-core-commonmark/lib/definition.js","webpack://mba-web-client/./node_modules/micromark-core-commonmark/lib/code-indented.js","webpack://mba-web-client/./node_modules/micromark-core-commonmark/lib/heading-atx.js","webpack://mba-web-client/./node_modules/micromark-core-commonmark/lib/setext-underline.js","webpack://mba-web-client/./node_modules/micromark-util-html-tag-name/index.js","webpack://mba-web-client/./node_modules/micromark-core-commonmark/lib/html-flow.js","webpack://mba-web-client/./node_modules/micromark-core-commonmark/lib/code-fenced.js","webpack://mba-web-client/./node_modules/micromark-core-commonmark/lib/character-reference.js","webpack://mba-web-client/./node_modules/micromark-core-commonmark/lib/character-escape.js","webpack://mba-web-client/./node_modules/micromark-core-commonmark/lib/line-ending.js","webpack://mba-web-client/./node_modules/micromark-core-commonmark/lib/label-end.js","webpack://mba-web-client/./node_modules/micromark-core-commonmark/lib/label-start-image.js","webpack://mba-web-client/./node_modules/micromark-util-classify-character/index.js","webpack://mba-web-client/./node_modules/micromark-core-commonmark/lib/attention.js","webpack://mba-web-client/./node_modules/micromark-core-commonmark/lib/autolink.js","webpack://mba-web-client/./node_modules/micromark-core-commonmark/lib/html-text.js","webpack://mba-web-client/./node_modules/micromark-core-commonmark/lib/label-start-link.js","webpack://mba-web-client/./node_modules/micromark-core-commonmark/lib/hard-break-escape.js","webpack://mba-web-client/./node_modules/micromark-core-commonmark/lib/code-text.js","webpack://mba-web-client/./node_modules/micromark/lib/constructs.js","webpack://mba-web-client/./node_modules/micromark/lib/create-tokenizer.js","webpack://mba-web-client/./node_modules/micromark/lib/initialize/content.js","webpack://mba-web-client/./node_modules/micromark/lib/initialize/document.js","webpack://mba-web-client/./node_modules/micromark-core-commonmark/lib/content.js","webpack://mba-web-client/./node_modules/micromark/lib/initialize/flow.js","webpack://mba-web-client/./node_modules/micromark/lib/initialize/text.js","webpack://mba-web-client/./node_modules/micromark/lib/parse.js","webpack://mba-web-client/./node_modules/micromark/lib/postprocess.js","webpack://mba-web-client/./node_modules/micromark/lib/preprocess.js","webpack://mba-web-client/./node_modules/property-information/lib/util/merge.js","webpack://mba-web-client/./node_modules/property-information/lib/util/create.js","webpack://mba-web-client/./node_modules/property-information/lib/xlink.js","webpack://mba-web-client/./node_modules/property-information/lib/xml.js","webpack://mba-web-client/./node_modules/property-information/lib/util/case-insensitive-transform.js","webpack://mba-web-client/./node_modules/property-information/lib/xmlns.js","webpack://mba-web-client/./node_modules/property-information/lib/aria.js","webpack://mba-web-client/./node_modules/property-information/lib/html.js","webpack://mba-web-client/./node_modules/property-information/lib/svg.js","webpack://mba-web-client/./node_modules/property-information/index.js","webpack://mba-web-client/./node_modules/property-information/lib/find.js","webpack://mba-web-client/./node_modules/property-information/lib/hast-to-react.js","webpack://mba-web-client/./node_modules/property-information/lib/normalize.js","webpack://mba-web-client/./node_modules/property-information/lib/util/case-sensitive-transform.js","webpack://mba-web-client/./node_modules/property-information/lib/util/defined-info.js","webpack://mba-web-client/./node_modules/property-information/lib/util/info.js","webpack://mba-web-client/./node_modules/property-information/lib/util/schema.js","webpack://mba-web-client/./node_modules/property-information/lib/util/types.js","webpack://mba-web-client/./node_modules/decode-uri-component/index.js","webpack://mba-web-client/./node_modules/split-on-first/index.js","webpack://mba-web-client/./node_modules/filter-obj/index.js","webpack://mba-web-client/./node_modules/query-string/base.js","webpack://mba-web-client/./node_modules/query-string/index.js","webpack://mba-web-client/./node_modules/react-i18next/dist/es/i18nInstance.js","webpack://mba-web-client/./node_modules/@babel/runtime/helpers/esm/extends.js","webpack://mba-web-client/./node_modules/html-parse-stringify/dist/html-parse-stringify.module.js","webpack://mba-web-client/./node_modules/react-i18next/dist/es/utils.js","webpack://mba-web-client/./node_modules/react-i18next/dist/es/unescape.js","webpack://mba-web-client/./node_modules/react-i18next/dist/es/defaults.js","webpack://mba-web-client/./node_modules/react-i18next/dist/es/TransWithoutContext.js","webpack://mba-web-client/./node_modules/react-i18next/dist/es/initReactI18next.js","webpack://mba-web-client/./node_modules/react-i18next/dist/es/context.js","webpack://mba-web-client/./node_modules/react-i18next/dist/es/Trans.js","webpack://mba-web-client/./node_modules/react-i18next/dist/es/useTranslation.js","webpack://mba-web-client/./node_modules/react-i18next/dist/es/withTranslation.js","webpack://mba-web-client/./node_modules/react-i18next/dist/es/Translation.js","webpack://mba-web-client/./node_modules/react-i18next/dist/es/I18nextProvider.js","webpack://mba-web-client/./node_modules/react-i18next/dist/es/useSSR.js","webpack://mba-web-client/./node_modules/react-i18next/dist/es/withSSR.js","webpack://mba-web-client/./node_modules/react-i18next/dist/es/index.js","webpack://mba-web-client/./node_modules/react-loading-skeleton/dist/index.js","webpack://mba-web-client/./node_modules/react-markdown/lib/index.js","webpack://mba-web-client/./node_modules/remark-parse/lib/index.js","webpack://mba-web-client/./node_modules/remark-rehype/lib/index.js","webpack://mba-web-client/./node_modules/space-separated-tokens/index.js","webpack://mba-web-client/./node_modules/trim-lines/index.js","webpack://mba-web-client/./node_modules/bail/index.js","webpack://mba-web-client/./node_modules/unified/node_modules/is-plain-obj/index.js","webpack://mba-web-client/./node_modules/trough/lib/index.js","webpack://mba-web-client/./node_modules/unified/lib/callable-instance.js","webpack://mba-web-client/./node_modules/unified/lib/index.js","webpack://mba-web-client/./node_modules/unist-util-is/lib/index.js","webpack://mba-web-client/./node_modules/unist-util-position/lib/index.js","webpack://mba-web-client/./node_modules/unist-util-stringify-position/lib/index.js","webpack://mba-web-client/./node_modules/unist-util-visit-parents/lib/color.js","webpack://mba-web-client/./node_modules/unist-util-visit-parents/lib/index.js","webpack://mba-web-client/./node_modules/unist-util-visit/lib/index.js","webpack://mba-web-client/./node_modules/vfile-message/lib/index.js","webpack://mba-web-client/./node_modules/vfile/lib/index.js","webpack://mba-web-client/./node_modules/vfile/lib/minpath.browser.js","webpack://mba-web-client/./node_modules/vfile/lib/minproc.browser.js","webpack://mba-web-client/./node_modules/vfile/lib/minurl.browser.js","webpack://mba-web-client/./node_modules/vfile/lib/minurl.shared.js"],"sourcesContent":["const hasOwn = {}.hasOwnProperty;\nfunction classNames(...args) {\n    let classes = \"\";\n    for (let i = 0; i < args.length; i++) {\n        const arg = args[i];\n        if (arg) {\n            classes = appendClass(classes, parseValue(arg));\n        }\n    }\n    return classes;\n}\nfunction parseValue(arg) {\n    if (typeof arg === \"string\") {\n        return arg;\n    }\n    if (typeof arg !== \"object\") {\n        return \"\";\n    }\n    if (Array.isArray(arg)) {\n        return classNames(...arg);\n    }\n    if (arg.toString !== Object.prototype.toString && !arg.toString.toString().includes(\"[native code]\")) {\n        return arg.toString();\n    }\n    let classes = \"\";\n    for (const key in arg) {\n        if (hasOwn.call(arg, key) && arg[key]) {\n            classes = appendClass(classes, key);\n        }\n    }\n    return classes;\n}\nfunction appendClass(value, newClass) {\n    if (!newClass) {\n        return value;\n    }\n    return value ? (value + \" \" + newClass) : newClass;\n}\n\nexport { classNames as default };\n//# sourceMappingURL=classnames.js.map\n","var e=[],t=[];function n(n,r){if(n&&\"undefined\"!=typeof document){var a,s=!0===r.prepend?\"prepend\":\"append\",d=!0===r.singleTag,i=\"string\"==typeof r.container?document.querySelector(r.container):document.getElementsByTagName(\"head\")[0];if(d){var u=e.indexOf(i);-1===u&&(u=e.push(i)-1,t[u]={}),a=t[u]&&t[u][s]?t[u][s]:t[u][s]=c();}else a=c();65279===n.charCodeAt(0)&&(n=n.substring(1)),a.styleSheet?a.styleSheet.cssText+=n:a.appendChild(document.createTextNode(n));}function c(){var e=document.createElement(\"style\");if(e.setAttribute(\"type\",\"text/css\"),r.attributes)for(var t=Object.keys(r.attributes),n=0;n<t.length;n++)e.setAttribute(t[n],r.attributes[t[n]]);var a=\"prepend\"===s?\"afterbegin\":\"beforeend\";return i.insertAdjacentElement(a,e),e}}\n\nexport { n as default };\n//# sourceMappingURL=inject-css.js.map\n","import n from '../../node_modules/rollup-plugin-styles/dist/runtime/inject-css.js';\n\nvar css = \"@keyframes mbw_animationBzdot9__3fe80467{0%{background-position:-200px 0}to{background-position:calc(200px + 100%) 0}}.mbw_skeleton__3fe80467{display:flex;position:relative}.mbw_skeleton__3fe80467:after{-webkit-animation:mbw_animationBzdot9__3fe80467 1.2s ease-in-out infinite;animation:mbw_animationBzdot9__3fe80467 1.2s ease-in-out infinite;background-color:#eee!important;background-image:linear-gradient(90deg,#eee,#f5f5f5,#eee);background-repeat:no-repeat;background-size:200px 100%;contain-intrinsic-size:auto 1px auto 1px;content:\\\"\\\";display:flex;height:100%;left:0;line-height:1;max-width:100%;pointer-events:none;position:absolute;top:0;width:100%}.mbw_titleHeadingJumbo__3fe80467{font-weight:400;transition:all .4s}@media (min-width:105rem){.mbw_titleHeadingJumbo__3fe80467{font-size:var(--mbw-fs-jumbo-lg,4rem);line-height:var(--mbw-line-height-small,1.3)}}@media (max-width:105rem){.mbw_titleHeadingJumbo__3fe80467{font-size:var(--mbw-fs-jumbo-md,3.375rem);line-height:var(--mbw-line-height-small,1.3)}}@media (max-width:80rem){.mbw_titleHeadingJumbo__3fe80467{font-size:var(--mbw-fs-jumbo-sm,1.75rem);line-height:var(--mbw-line-height-medium,1.4)}}@media (max-width:48rem){.mbw_titleHeadingJumbo__3fe80467{font-size:var(--mbw-fs-jumbo-sm,1.75rem);line-height:var(--mbw-line-height-medium,1.4)}}@media (min-width:105rem){.mbw_skeletonHeadingJumbo__3fe80467{min-height:calc(var(--mbw-line-height-small, 1.3)*var(--rows)*1rem)}}@media (max-width:105rem){.mbw_skeletonHeadingJumbo__3fe80467{min-height:calc(var(--mbw-line-height-small, 1.3)*var(--rows)*1rem)}}@media (max-width:80rem){.mbw_skeletonHeadingJumbo__3fe80467{min-height:calc(var(--mbw-line-height-medium, 1.4)*var(--rows)*1rem)}}@media (max-width:48rem){.mbw_skeletonHeadingJumbo__3fe80467{min-height:calc(var(--mbw-line-height-medium, 1.4)*var(--rows)*1rem)}}.mbw_titleHeadingH1__3fe80467{font-weight:400;transition:all .4s}@media (min-width:105rem){.mbw_titleHeadingH1__3fe80467{font-size:var(--mbw-fs-h1-lg,3rem);line-height:var(--mbw-line-height-large,1.5)}}@media (max-width:105rem){.mbw_titleHeadingH1__3fe80467{font-size:var(--mbw-fs-h1-md,2.375rem);line-height:var(--mbw-line-height-medium,1.4)}}@media (max-width:80rem){.mbw_titleHeadingH1__3fe80467{font-size:var(--mbw-fs-h1-sm,1.75rem);line-height:var(--mbw-line-height-medium,1.4)}}@media (max-width:48rem){.mbw_titleHeadingH1__3fe80467{font-size:var(--mbw-fs-h1-sm,1.75rem);line-height:var(--mbw-line-height-medium,1.4)}}@media (min-width:105rem){.mbw_skeletonHeadingH1__3fe80467{min-height:calc(var(--mbw-line-height-large, 1.5)*var(--rows)*1rem)}}@media (max-width:105rem){.mbw_skeletonHeadingH1__3fe80467{min-height:calc(var(--mbw-line-height-medium, 1.4)*var(--rows)*1rem)}}@media (max-width:80rem){.mbw_skeletonHeadingH1__3fe80467{min-height:calc(var(--mbw-line-height-medium, 1.4)*var(--rows)*1rem)}}@media (max-width:48rem){.mbw_skeletonHeadingH1__3fe80467{min-height:calc(var(--mbw-line-height-medium, 1.4)*var(--rows)*1rem)}}.mbw_titleHeadingH2__3fe80467{font-weight:400;transition:all .4s}@media (min-width:105rem){.mbw_titleHeadingH2__3fe80467{font-size:var(--mbw-fs-h2-lg,2.125rem);line-height:var(--mbw-line-height-medium,1.4)}}@media (max-width:105rem){.mbw_titleHeadingH2__3fe80467{font-size:var(--mbw-fs-h2-md,1.75rem);line-height:var(--mbw-line-height-medium,1.4)}}@media (max-width:80rem){.mbw_titleHeadingH2__3fe80467{font-size:var(--mbw-fs-h2-sm,1.5rem);line-height:var(--mbw-line-height-medium,1.4)}}@media (max-width:48rem){.mbw_titleHeadingH2__3fe80467{font-size:var(--mbw-fs-h2-sm,1.5rem);line-height:var(--mbw-line-height-medium,1.4)}}@media (min-width:105rem){.mbw_skeletonHeadingH2__3fe80467{min-height:calc(var(--mbw-line-height-medium, 1.4)*var(--rows)*1rem)}}@media (max-width:105rem){.mbw_skeletonHeadingH2__3fe80467{min-height:calc(var(--mbw-line-height-medium, 1.4)*var(--rows)*1rem)}}@media (max-width:80rem){.mbw_skeletonHeadingH2__3fe80467{min-height:calc(var(--mbw-line-height-medium, 1.4)*var(--rows)*1rem)}}@media (max-width:48rem){.mbw_skeletonHeadingH2__3fe80467{min-height:calc(var(--mbw-line-height-medium, 1.4)*var(--rows)*1rem)}}.mbw_titleHeadingH3__3fe80467{font-weight:400;transition:all .4s}@media (min-width:105rem){.mbw_titleHeadingH3__3fe80467{font-size:var(--mbw-fs-h3-lg,1.75rem);line-height:var(--mbw-line-height-large,1.5)}}@media (max-width:105rem){.mbw_titleHeadingH3__3fe80467{font-size:var(--mbw-fs-h3-md,1.5rem);line-height:var(--mbw-line-height-large,1.5)}}@media (max-width:80rem){.mbw_titleHeadingH3__3fe80467{font-size:var(--mbw-fs-h3-sm,1.375rem);line-height:var(--mbw-line-height-medium,1.4)}}@media (max-width:48rem){.mbw_titleHeadingH3__3fe80467{font-size:var(--mbw-fs-h3-sm,1.375rem);line-height:var(--mbw-line-height-medium,1.4)}}@media (min-width:105rem){.mbw_skeletonHeadingH3__3fe80467{min-height:calc(var(--mbw-line-height-large, 1.5)*var(--rows)*1rem)}}@media (max-width:105rem){.mbw_skeletonHeadingH3__3fe80467{min-height:calc(var(--mbw-line-height-large, 1.5)*var(--rows)*1rem)}}@media (max-width:80rem){.mbw_skeletonHeadingH3__3fe80467{min-height:calc(var(--mbw-line-height-medium, 1.4)*var(--rows)*1rem)}}@media (max-width:48rem){.mbw_skeletonHeadingH3__3fe80467{min-height:calc(var(--mbw-line-height-medium, 1.4)*var(--rows)*1rem)}}.mbw_titleHeadingH4__3fe80467{font-weight:400;transition:all .4s}@media (min-width:105rem){.mbw_titleHeadingH4__3fe80467{font-size:var(--mbw-fs-h4-lg,1.375rem);line-height:var(--mbw-line-height-large,1.5)}}@media (max-width:105rem){.mbw_titleHeadingH4__3fe80467{font-size:var(--mbw-fs-h4-md,1.2rem);line-height:var(--mbw-line-height-large,1.5)}}@media (max-width:80rem){.mbw_titleHeadingH4__3fe80467{font-size:var(--mbw-fs-h4-sm,1.125rem);line-height:var(--mbw-line-height-medium,1.4)}}@media (max-width:48rem){.mbw_titleHeadingH4__3fe80467{font-size:var(--mbw-fs-h4-sm,1.125rem);line-height:var(--mbw-line-height-medium,1.4)}}@media (min-width:105rem){.mbw_skeletonHeadingH4__3fe80467{min-height:calc(var(--mbw-line-height-large, 1.5)*var(--rows)*1rem)}}@media (max-width:105rem){.mbw_skeletonHeadingH4__3fe80467{min-height:calc(var(--mbw-line-height-large, 1.5)*var(--rows)*1rem)}}@media (max-width:80rem){.mbw_skeletonHeadingH4__3fe80467{min-height:calc(var(--mbw-line-height-medium, 1.4)*var(--rows)*1rem)}}@media (max-width:48rem){.mbw_skeletonHeadingH4__3fe80467{min-height:calc(var(--mbw-line-height-medium, 1.4)*var(--rows)*1rem)}}.mbw_titleHeadingH5__3fe80467{font-weight:400;transition:all .4s}@media (min-width:105rem){.mbw_titleHeadingH5__3fe80467{font-size:var(--mbw-fs-h5-lg,1.2rem);line-height:var(--mbw-line-height-medium,1.4)}}@media (max-width:105rem){.mbw_titleHeadingH5__3fe80467{font-size:var(--mbw-fs-h5-md,1.125rem);line-height:var(--mbw-line-height-medium,1.4)}}@media (max-width:80rem){.mbw_titleHeadingH5__3fe80467{font-size:var(--mbw-fs-h5-sm,1rem);line-height:var(--mbw-line-height-medium,1.4)}}@media (max-width:48rem){.mbw_titleHeadingH5__3fe80467{font-size:var(--mbw-fs-h5-sm,1rem);line-height:var(--mbw-line-height-medium,1.4)}}@media (min-width:105rem){.mbw_skeletonHeadingH5__3fe80467{min-height:calc(var(--mbw-line-height-medium, 1.4)*var(--rows)*1rem)}}@media (max-width:105rem){.mbw_skeletonHeadingH5__3fe80467{min-height:calc(var(--mbw-line-height-medium, 1.4)*var(--rows)*1rem)}}@media (max-width:80rem){.mbw_skeletonHeadingH5__3fe80467{min-height:calc(var(--mbw-line-height-medium, 1.4)*var(--rows)*1rem)}}@media (max-width:48rem){.mbw_skeletonHeadingH5__3fe80467{min-height:calc(var(--mbw-line-height-medium, 1.4)*var(--rows)*1rem)}}.mbw_titleHeadingH6__3fe80467{font-weight:400;transition:all .4s}@media (min-width:105rem){.mbw_titleHeadingH6__3fe80467{font-size:var(--mbw-fs-h6-lg,1.125rem);line-height:var(--mbw-line-height-medium,1.4)}}@media (max-width:105rem){.mbw_titleHeadingH6__3fe80467{font-size:var(--mbw-fs-h6-md,1.063rem);line-height:var(--mbw-line-height-medium,1.4)}}@media (max-width:80rem){.mbw_titleHeadingH6__3fe80467{font-size:var(--mbw-fs-h6-sm,.938rem);line-height:var(--mbw-line-height-medium,1.4)}}@media (max-width:48rem){.mbw_titleHeadingH6__3fe80467{font-size:var(--mbw-fs-h6-sm,.938rem);line-height:var(--mbw-line-height-medium,1.4)}}@media (min-width:105rem){.mbw_skeletonHeadingH6__3fe80467{min-height:calc(var(--mbw-line-height-medium, 1.4)*var(--rows)*1rem)}}@media (max-width:105rem){.mbw_skeletonHeadingH6__3fe80467{min-height:calc(var(--mbw-line-height-medium, 1.4)*var(--rows)*1rem)}}@media (max-width:80rem){.mbw_skeletonHeadingH6__3fe80467{min-height:calc(var(--mbw-line-height-medium, 1.4)*var(--rows)*1rem)}}@media (max-width:48rem){.mbw_skeletonHeadingH6__3fe80467{min-height:calc(var(--mbw-line-height-medium, 1.4)*var(--rows)*1rem)}}.mbw_titleContentDefault__3fe80467{font-weight:400;transition:all .4s}@media (min-width:105rem){.mbw_titleContentDefault__3fe80467{font-size:var(--mbw-fs-default-lg,1.063rem);line-height:var(--mbw-line-height-large,1.5)}}@media (max-width:105rem){.mbw_titleContentDefault__3fe80467{font-size:var(--mbw-fs-default-md,1rem);line-height:var(--mbw-line-height-large,1.5)}}@media (max-width:80rem){.mbw_titleContentDefault__3fe80467{font-size:var(--mbw-fs-default-sm,.938rem);line-height:var(--mbw-line-height-large,1.5)}}@media (max-width:48rem){.mbw_titleContentDefault__3fe80467{font-size:var(--mbw-fs-default-sm,.938rem);line-height:var(--mbw-line-height-large,1.5)}}@media (min-width:105rem){.mbw_skeletonContentDefault__3fe80467{min-height:calc(var(--mbw-line-height-large, 1.5)*var(--rows)*1rem)}}@media (max-width:105rem){.mbw_skeletonContentDefault__3fe80467{min-height:calc(var(--mbw-line-height-large, 1.5)*var(--rows)*1rem)}}@media (max-width:80rem){.mbw_skeletonContentDefault__3fe80467{min-height:calc(var(--mbw-line-height-large, 1.5)*var(--rows)*1rem)}}@media (max-width:48rem){.mbw_skeletonContentDefault__3fe80467{min-height:calc(var(--mbw-line-height-large, 1.5)*var(--rows)*1rem)}}.mbw_titleContentMedium__3fe80467{font-weight:400;transition:all .4s}@media (min-width:105rem){.mbw_titleContentMedium__3fe80467{font-size:var(--mbw-fs-medium-lg,.938rem);line-height:var(--mbw-line-height-large,1.5)}}@media (max-width:105rem){.mbw_titleContentMedium__3fe80467{font-size:var(--mbw-fs-medium-md,.938rem);line-height:var(--mbw-line-height-large,1.5)}}@media (max-width:80rem){.mbw_titleContentMedium__3fe80467{font-size:var(--mbw-fs-medium-sm,.875rem);line-height:var(--mbw-line-height-large,1.5)}}@media (max-width:48rem){.mbw_titleContentMedium__3fe80467{font-size:var(--mbw-fs-medium-sm,.875rem);line-height:var(--mbw-line-height-large,1.5)}}@media (min-width:105rem){.mbw_skeletonContentMedium__3fe80467{min-height:calc(var(--mbw-line-height-large, 1.5)*var(--rows)*1rem)}}@media (max-width:105rem){.mbw_skeletonContentMedium__3fe80467{min-height:calc(var(--mbw-line-height-large, 1.5)*var(--rows)*1rem)}}@media (max-width:80rem){.mbw_skeletonContentMedium__3fe80467{min-height:calc(var(--mbw-line-height-large, 1.5)*var(--rows)*1rem)}}@media (max-width:48rem){.mbw_skeletonContentMedium__3fe80467{min-height:calc(var(--mbw-line-height-large, 1.5)*var(--rows)*1rem)}}.mbw_titleContentSmall__3fe80467{font-weight:400;transition:all .4s}@media (min-width:105rem){.mbw_titleContentSmall__3fe80467{font-size:var(--mbw-fs-small-lg,.938rem);line-height:var(--mbw-line-height-medium,1.4)}}@media (max-width:105rem){.mbw_titleContentSmall__3fe80467{font-size:var(--mbw-fs-small-md,.938rem);line-height:var(--mbw-line-height-medium,1.4)}}@media (max-width:80rem){.mbw_titleContentSmall__3fe80467{font-size:var(--mbw-fs-small-sm,.875rem);line-height:var(--mbw-line-height-medium,1.4)}}@media (max-width:48rem){.mbw_titleContentSmall__3fe80467{font-size:var(--mbw-fs-small-sm,.875rem);line-height:var(--mbw-line-height-medium,1.4)}}@media (min-width:105rem){.mbw_skeletonContentSmall__3fe80467{min-height:calc(var(--mbw-line-height-medium, 1.4)*var(--rows)*1rem)}}@media (max-width:105rem){.mbw_skeletonContentSmall__3fe80467{min-height:calc(var(--mbw-line-height-medium, 1.4)*var(--rows)*1rem)}}@media (max-width:80rem){.mbw_skeletonContentSmall__3fe80467{min-height:calc(var(--mbw-line-height-medium, 1.4)*var(--rows)*1rem)}}@media (max-width:48rem){.mbw_skeletonContentSmall__3fe80467{min-height:calc(var(--mbw-line-height-medium, 1.4)*var(--rows)*1rem)}}.mbw_titleCaption1__3fe80467{font-weight:400;transition:all .4s}@media (min-width:105rem){.mbw_titleCaption1__3fe80467{font-size:var(--mbw-fs-caption-1-lg,.75rem);line-height:var(--mbw-line-height-large,1.5)}}@media (max-width:105rem){.mbw_titleCaption1__3fe80467{font-size:var(--mbw-fs-caption-1-md,.75rem);line-height:var(--mbw-line-height-large,1.5)}}@media (max-width:80rem){.mbw_titleCaption1__3fe80467{font-size:var(--mbw-fs-caption-1-sm,.75rem);line-height:var(--mbw-line-height-large,1.5)}}@media (max-width:48rem){.mbw_titleCaption1__3fe80467{font-size:var(--mbw-fs-caption-1-sm,.75rem);line-height:var(--mbw-line-height-large,1.5)}}@media (min-width:105rem){.mbw_skeletonCaption1__3fe80467{min-height:calc(var(--mbw-line-height-large, 1.5)*var(--rows)*1rem)}}@media (max-width:105rem){.mbw_skeletonCaption1__3fe80467{min-height:calc(var(--mbw-line-height-large, 1.5)*var(--rows)*1rem)}}@media (max-width:80rem){.mbw_skeletonCaption1__3fe80467{min-height:calc(var(--mbw-line-height-large, 1.5)*var(--rows)*1rem)}}@media (max-width:48rem){.mbw_skeletonCaption1__3fe80467{min-height:calc(var(--mbw-line-height-large, 1.5)*var(--rows)*1rem)}}.mbw_titleCaption2__3fe80467{font-weight:400;transition:all .4s}@media (min-width:105rem){.mbw_titleCaption2__3fe80467{font-size:var(--mbw-fs-caption-2-lg,.625rem);line-height:var(--mbw-line-height-medium,1.4)}}@media (max-width:105rem){.mbw_titleCaption2__3fe80467{font-size:var(--mbw-fs-caption-2-md,.625rem);line-height:var(--mbw-line-height-medium,1.4)}}@media (max-width:80rem){.mbw_titleCaption2__3fe80467{font-size:var(--mbw-fs-caption-2-sm,.625rem);line-height:var(--mbw-line-height-medium,1.4)}}@media (max-width:48rem){.mbw_titleCaption2__3fe80467{font-size:var(--mbw-fs-caption-2-sm,.625rem);line-height:var(--mbw-line-height-medium,1.4)}}@media (min-width:105rem){.mbw_skeletonCaption2__3fe80467{min-height:calc(var(--mbw-line-height-medium, 1.4)*var(--rows)*1rem)}}@media (max-width:105rem){.mbw_skeletonCaption2__3fe80467{min-height:calc(var(--mbw-line-height-medium, 1.4)*var(--rows)*1rem)}}@media (max-width:80rem){.mbw_skeletonCaption2__3fe80467{min-height:calc(var(--mbw-line-height-medium, 1.4)*var(--rows)*1rem)}}@media (max-width:48rem){.mbw_skeletonCaption2__3fe80467{min-height:calc(var(--mbw-line-height-medium, 1.4)*var(--rows)*1rem)}}.mbw_titleBold__3fe80467{font-weight:600}.mbw_titleEllipsisText__3fe80467{-webkit-line-clamp:var(--rows);-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;white-space:normal;width:100%;word-break:break-all}.mbw_titleEllipsisText__3fe80467 *{display:inline}\";\nvar modules_a1601a7d = {\"skeleton\":\"mbw_skeleton__3fe80467\",\"animation-bzdot9\":\"mbw_animationBzdot9__3fe80467\",\"title-heading-jumbo\":\"mbw_titleHeadingJumbo__3fe80467\",\"skeleton-heading-jumbo\":\"mbw_skeletonHeadingJumbo__3fe80467\",\"title-heading-h1\":\"mbw_titleHeadingH1__3fe80467\",\"skeleton-heading-h1\":\"mbw_skeletonHeadingH1__3fe80467\",\"title-heading-h2\":\"mbw_titleHeadingH2__3fe80467\",\"skeleton-heading-h2\":\"mbw_skeletonHeadingH2__3fe80467\",\"title-heading-h3\":\"mbw_titleHeadingH3__3fe80467\",\"skeleton-heading-h3\":\"mbw_skeletonHeadingH3__3fe80467\",\"title-heading-h4\":\"mbw_titleHeadingH4__3fe80467\",\"skeleton-heading-h4\":\"mbw_skeletonHeadingH4__3fe80467\",\"title-heading-h5\":\"mbw_titleHeadingH5__3fe80467\",\"skeleton-heading-h5\":\"mbw_skeletonHeadingH5__3fe80467\",\"title-heading-h6\":\"mbw_titleHeadingH6__3fe80467\",\"skeleton-heading-h6\":\"mbw_skeletonHeadingH6__3fe80467\",\"title-content-default\":\"mbw_titleContentDefault__3fe80467\",\"skeleton-content-default\":\"mbw_skeletonContentDefault__3fe80467\",\"title-content-medium\":\"mbw_titleContentMedium__3fe80467\",\"skeleton-content-medium\":\"mbw_skeletonContentMedium__3fe80467\",\"title-content-small\":\"mbw_titleContentSmall__3fe80467\",\"skeleton-content-small\":\"mbw_skeletonContentSmall__3fe80467\",\"title-caption-1\":\"mbw_titleCaption1__3fe80467\",\"skeleton-caption-1\":\"mbw_skeletonCaption1__3fe80467\",\"title-caption-2\":\"mbw_titleCaption2__3fe80467\",\"skeleton-caption-2\":\"mbw_skeletonCaption2__3fe80467\",\"title-bold\":\"mbw_titleBold__3fe80467\",\"title-ellipsis-text\":\"mbw_titleEllipsisText__3fe80467\"};\nn(css,{});\n\nexport { css, modules_a1601a7d as default };\n//# sourceMappingURL=title.module.scss.js.map\n","import React from 'react';\nimport classNames from '../../classnames.js';\nimport modules_a1601a7d from './title.module.scss.js';\n\nconst Title = ({ fontStyle = \"content-default\", bold = false, children, maxRows = 1, ellipsis = false, loading, ...rest }) => {\n    const getTitleClassName = () => classNames(modules_a1601a7d[`title-${fontStyle}`], {\n        [modules_a1601a7d[\"title-bold\"]]: bold,\n        [modules_a1601a7d[\"skeleton\"]]: loading,\n        [modules_a1601a7d[`skeleton-${fontStyle}`]]: loading\n    });\n    const renderEllipsisTitle = () => (React.createElement(\"div\", { className: modules_a1601a7d[\"title-ellipsis-text\"], style: { \"--rows\": maxRows }, suppressHydrationWarning: true },\n        React.createElement(\"span\", { className: getTitleClassName(), ...rest, \"data-testid\": \"mbw-title-container\", style: { whiteSpace: \"pre-line\" }, suppressHydrationWarning: true }, children)));\n    const renderRegularTitle = () => (React.createElement(\"span\", { className: getTitleClassName(), style: { \"--rows\": maxRows }, ...rest, \"data-testid\": \"mbw-title-container\", suppressHydrationWarning: true }, children));\n    const renderTitle = () => {\n        if (ellipsis)\n            return renderEllipsisTitle();\n        return renderRegularTitle();\n    };\n    return renderTitle();\n};\n\nexport { Title as default };\n//# sourceMappingURL=title.js.map\n","import n from '../../node_modules/rollup-plugin-styles/dist/runtime/inject-css.js';\n\nvar css = \"@keyframes mbw_animationBzdot9__ced52ea7{0%{background-position:-200px 0}to{background-position:calc(200px + 100%) 0}}.mbw_skeleton__ced52ea7{display:flex;position:relative}.mbw_skeleton__ced52ea7:after{-webkit-animation:mbw_animationBzdot9__ced52ea7 1.2s ease-in-out infinite;animation:mbw_animationBzdot9__ced52ea7 1.2s ease-in-out infinite;background-color:#eee!important;background-image:linear-gradient(90deg,#eee,#f5f5f5,#eee);background-repeat:no-repeat;background-size:200px 100%;contain-intrinsic-size:auto 1px auto 1px;content:\\\"\\\";display:flex;height:100%;left:0;line-height:1;max-width:100%;pointer-events:none;position:absolute;top:0;width:100%}.mbw_icon__ced52ea7 svg{overflow:visible}\";\nvar modules_e00953a9 = {\"skeleton\":\"mbw_skeleton__ced52ea7\",\"animation-bzdot9\":\"mbw_animationBzdot9__ced52ea7\",\"icon\":\"mbw_icon__ced52ea7\"};\nn(css,{});\n\nexport { css, modules_e00953a9 as default };\n//# sourceMappingURL=icon.module.scss.js.map\n","import React, { useState } from 'react';\nimport classNames from '../../classnames.js';\nimport modules_e00953a9 from './icon.module.scss.js';\n\nconst Icon = (props) => {\n    const { className, children, width, height, parentRef, dataTestId, loading } = props;\n    const [iconPath, setIconPath] = useState(null);\n    const updateSvgHandler = (colorSvg, childrenObject) => {\n        const result = React.Children.map(childrenObject, (child) => {\n            if (React.isValidElement(child) && (child.type === \"path\" || child.type === \"circle\" || child.type === \"mask\")) {\n                const originalProps = child.props || {};\n                let updatedProps = {\n                    ...originalProps,\n                    stroke: colorSvg\n                };\n                if (originalProps && originalProps.fill) {\n                    updatedProps = { ...updatedProps, fill: colorSvg };\n                }\n                return React.cloneElement(child, updatedProps);\n            }\n            return child;\n        });\n        setIconPath(result);\n    };\n    const updateSvg = (colorSvg) => {\n        const result = React.Children.map(children, (child) => {\n            if (React.isValidElement(child) && child.type === \"svg\") {\n                return child.props.children;\n            }\n            return child;\n        });\n        updateSvgHandler(colorSvg, result);\n    };\n    const getParentTextColor = () => {\n        let textColor = null;\n        if (parentRef?.current) {\n            const computedStyle = window.getComputedStyle(parentRef.current);\n            textColor = computedStyle.getPropertyValue(\"color\");\n        }\n        return textColor;\n    };\n    const getIconColorByClassName = () => {\n        let iconColor = null;\n        if (className) {\n            const elements = document.getElementsByClassName(className);\n            for (let i = 0; i < elements.length; i++) {\n                iconColor = window.getComputedStyle(elements[i], null).getPropertyValue(\"color\");\n            }\n        }\n        return iconColor;\n    };\n    React.useEffect(() => {\n        if (parentRef?.current) {\n            const textColor = getParentTextColor();\n            updateSvg(textColor);\n        }\n        if (parentRef?.current?.disabled) {\n            updateSvg(\"#ffffff\");\n        }\n        if (className) {\n            const iconColor = getIconColorByClassName();\n            updateSvg(iconColor);\n        }\n    }, [parentRef, className]);\n    React.useEffect(() => {\n        const handleMouseOver = () => {\n            if (parentRef?.current) {\n                const hoverColor = getParentTextColor();\n                updateSvg(hoverColor);\n            }\n        };\n        const handleMouseLeave = () => {\n            const prevColor = getIconColorByClassName() || getParentTextColor();\n            updateSvg(prevColor || \"#121212\");\n        };\n        if (parentRef?.current && !parentRef.current.disabled) {\n            parentRef.current.addEventListener(\"mouseover\", handleMouseOver);\n            parentRef.current.addEventListener(\"mouseleave\", handleMouseLeave);\n        }\n        return () => {\n            if (parentRef?.current && !parentRef.current.disabled) {\n                parentRef.current.removeEventListener(\"mouseover\", handleMouseOver);\n                parentRef.current.removeEventListener(\"mouseleave\", handleMouseLeave);\n            }\n        };\n    }, [parentRef]);\n    const getViewBox = () => {\n        if (React.isValidElement(children) && children.type === \"svg\" && children.props.viewBox) {\n            return children.props.viewBox;\n        }\n        return \"0 0 24 24\";\n    };\n    const getSvgClassName = () => classNames(modules_e00953a9.icon, className, { [modules_e00953a9.skeleton]: loading });\n    const getSvgWidth = () => {\n        let w = \"25\";\n        if (className) {\n            const elements = document.getElementsByClassName(className);\n            for (let i = 0; i < elements.length; i++) {\n                const style = window.getComputedStyle(elements[i], null);\n                w = style.width;\n            }\n        }\n        if (width)\n            w = width;\n        return w;\n    };\n    const getSvgHeight = () => {\n        let h = \"25\";\n        if (className) {\n            const elements = document.getElementsByClassName(className);\n            for (let i = 0; i < elements.length; i++) {\n                const style = window.getComputedStyle(elements[i], null);\n                h = style.height;\n            }\n        }\n        if (height)\n            h = height;\n        return h;\n    };\n    const renderIcon = () => (React.createElement(\"div\", { className: getSvgClassName(), \"data-testid\": dataTestId },\n        React.createElement(\"svg\", { width: getSvgWidth(), height: getSvgHeight(), \n            // fill=\"#FFFFFF\"\n            fill: 'transparent', viewBox: getViewBox(), xmlns: \"http://www.w3.org/2000/svg\" }, iconPath || children)));\n    return renderIcon();\n};\n\nexport { Icon as default };\n//# sourceMappingURL=icon.js.map\n","import React, { useRef } from 'react';\nimport Title from '../../atoms/title/title.js';\nimport Icon from '../../atoms/icon/icon.js';\n\nconst getClassName = (title, type, dynemicHeight) => {\n    let className = title ? `mbw-button-${type}` : `mbw-button-${type} mbw-button-no-title`;\n    className = dynemicHeight ? className + \" mbw-button-dynemic-height\" : className;\n    return className;\n};\nconst Button = ({ title, type = \"primary\", icon, onClick, disabled = false, dynemicHeight = false }) => {\n    const buttonRef = useRef(null);\n    const renderIcon = () => (icon ? (React.createElement(\"div\", { \"data-testid\": \"mbw-button-icon\", className: \"mbw-button--button-icon-container\" },\n        React.createElement(Icon, { parentRef: buttonRef, className: \"mbw-button--button-icon\" }, icon))) : null);\n    const renderTitle = () => title ? (React.createElement(\"div\", { \"data-testid\": \"mbw-button-title\", className: \"mbw-button--center-text\" },\n        React.createElement(Title, { fontStyle: \"content-default\", bold: true }, title))) : null;\n    return (React.createElement(\"button\", { \"data-testid\": \"mbw-button\", ref: buttonRef, className: getClassName(title, type, dynemicHeight), onClick: onClick, disabled: disabled },\n        React.createElement(\"div\", { className: \"mbw-button--center\" },\n            renderIcon(),\n            renderTitle())));\n};\n\nexport { Button as default };\n//# sourceMappingURL=button.js.map\n","import React, { useRef, useState, useEffect } from 'react';\nimport Title from '../../atoms/title/title.js';\n\nconst Picker = ({ options, placeholder = \"\", onOptionSelected, title, description }) => {\n    const pickerButtonRef = useRef(null);\n    const [isOpen, setIsOpen] = useState(false);\n    const [overlayTop, setOverlayTop] = useState(0);\n    const [selectedIndex, setSelectedIndex] = useState(null);\n    useEffect(() => {\n        setOverlayTop((pickerButtonRef.current?.offsetHeight || 0) + 10);\n    }, [pickerButtonRef.current?.offsetHeight]);\n    const arrow = (React.createElement(\"svg\", { className: `mbw-picker--carret ${isOpen ? \"mbw-picker--carret--open\" : \"mbw-picker--carret--closed\"}`, width: 15, height: 15, viewBox: \"0 0 25 25\", fill: \"none\", xmlns: \"http://www.w3.org/2000/svg\" },\n        React.createElement(\"path\", { d: \"M19 9L12 15L5 9\", stroke: \"#121212\", strokeWidth: \"1.5\", strokeLinecap: \"round\", strokeLinejoin: \"round\" })));\n    const onPickerClick = () => {\n        setIsOpen(!isOpen);\n    };\n    const onOptionClick = (option, index) => {\n        setSelectedIndex(index);\n        setIsOpen(!isOpen);\n        if (onOptionSelected) {\n            onOptionSelected(option, index);\n        }\n    };\n    const renderTitle = () => {\n        if (title) {\n            return React.createElement(Title, { fontStyle: \"content-default\" }, title);\n        }\n        return null;\n    };\n    const renderDescription = () => {\n        if (description) {\n            return React.createElement(\"div\", { className: \"mbw-picker--title\" },\n                React.createElement(Title, { fontStyle: \"content-default\" }, description));\n        }\n        return null;\n    };\n    return (React.createElement(\"div\", null,\n        renderTitle(),\n        React.createElement(\"div\", { className: \"mbw-picker\" },\n            React.createElement(\"button\", { \"data-testid\": \"mbw-picker-button\", ref: pickerButtonRef, onClick: onPickerClick, className: \"mbw-picker--button\" },\n                React.createElement(Title, { fontStyle: \"content-default\" }, selectedIndex !== null ? options[selectedIndex].title : placeholder),\n                arrow),\n            isOpen ? (React.createElement(\"ul\", { style: { top: overlayTop || 0 }, className: \"mbw-picker--overlay\" }, options.map((o, index) => React.createElement(\"li\", { \"data-testid\": \"mbw-picker-option\", className: `mbw-picker--option${selectedIndex === index ? \" mbw-picker--option--selected\" : \"\"}`, onClick: () => { onOptionClick(o, index); }, key: o.value },\n                React.createElement(Title, { fontStyle: \"content-default\" }, o.title))))) : null),\n        renderDescription()));\n};\n//mbw-picker--option--selected\n\nexport { Picker as default };\n//# sourceMappingURL=picker.js.map\n","import React, { useRef } from 'react';\nimport Title from '../../atoms/title/title.js';\nimport Icon from '../../atoms/icon/icon.js';\n\nconst MenuItem = ({ title, icon, active = false, label }) => {\n    const className = active ? \"mbw-menu-item-active\" : \"mbw-menu-item\";\n    const itemRef = useRef(null);\n    const renderMenuItemIcon = () => icon ? (React.createElement(\"div\", { \"data-testid\": \"mbw-menu-item-icon\" },\n        React.createElement(Icon, { className: \"mbw-menu-item-icon\", parentRef: itemRef }, icon))) : null;\n    const renderMenuItemTitle = () => title ? (React.createElement(\"div\", { \"data-testid\": \"mbw-menu-item-title\", className: \"mbw-menu-item-title\" },\n        React.createElement(Title, { fontStyle: \"heading-h6\" }, title))) : null;\n    return (React.createElement(\"div\", { \"data-testid\": \"mbw-menu-item\", ref: itemRef, className: className },\n        React.createElement(\"div\", { className: \"mbw-menu-item-icon-and-title\" },\n            renderMenuItemIcon(),\n            renderMenuItemTitle()),\n        label || null));\n};\n\nexport { MenuItem as default };\n//# sourceMappingURL=menu_item.js.map\n","import React from 'react';\n\nconst defaultAvatarUrl = \"data:image/svg+xml;charset=UTF-8,%3csvg xmlns='http://www.w3.org/2000/svg' width='100' height='100' viewBox='0 0 100% 100%' fill='none'%3e%3crect width='100%' height='100%' fill='%23D0D0D0'/%3e%3cg clip-path='url(%23clip0_1143_48193)'%3e%3ccircle cx='49.9996' cy='35.5552' r='12.2222' fill='%239C9C9C'/%3e%3cellipse cx='49.9998' cy='65.5552' rx='21.1111' ry='12.2222' fill='%239C9C9C'/%3e%3c/g%3e%3cdefs%3e%3cclipPath id='clip0_1143_48193'%3e%3cpath d='M0 15C0 6.71573 6.71573 0 15 0H85C93.2843 0 100 6.71573 100 15V85C100 93.2843 93.2843 100 85 100H15C6.71573 100 0 93.2843 0 85V15Z' fill='white'/%3e%3c/clipPath%3e%3c/defs%3e%3c/svg%3e\";\nconst Avatar = ({ type = \"round\", size, imgSrc = null, topOverlayContainer, bottomOverlayContainer, transformContainer, hideBorders }) => {\n    const renderTransformContainer = () => {\n        if (!transformContainer)\n            return null;\n        return (React.createElement(\"div\", { className: \"mbw-avatar-transform-container-holder\" }, transformContainer));\n    };\n    const renderTopOverlayContainer = () => {\n        if (!topOverlayContainer)\n            return React.createElement(\"div\", null);\n        return (React.createElement(\"div\", { className: \"mbw-avatar-top-overlay-container\" }, topOverlayContainer));\n    };\n    const renderBottomOverlayContainer = () => {\n        if (!renderBottomOverlayContainer)\n            return React.createElement(\"div\", null);\n        return (React.createElement(\"div\", { className: \"mbw-avatar-bottom-overlay-container\" }, bottomOverlayContainer));\n    };\n    const renderOverlaysContainer = () => {\n        if (!topOverlayContainer && !bottomOverlayContainer)\n            return null;\n        return (React.createElement(\"div\", { className: 'mbw-avatar-overlays-container' },\n            renderTopOverlayContainer(),\n            renderBottomOverlayContainer()));\n    };\n    const getAvatarUrl = () => {\n        if (!imgSrc)\n            return defaultAvatarUrl;\n        return imgSrc || defaultAvatarUrl;\n    };\n    const getImgContainerHolderClassName = () => {\n        let className = `mbw-avatar-${type}-img-container-holder`;\n        if (size)\n            className = `mbw-avatar-${type}-${size}-img-container-holder`;\n        if (!hideBorders)\n            return className;\n        Object.keys(hideBorders).forEach((key) => {\n            switch (key) {\n                case \"leftTop\":\n                    className = className + \" mbw-avatar-hide-left-top-border-radius\";\n                    break;\n                case \"rightTop\":\n                    className = className + \" mbw-avatar-hide-right-top-border-radius\";\n                    break;\n                case \"rightBottom\":\n                    className = className + \" mbw-avatar-hide-right-bottom-border-radius\";\n                    break;\n                case \"leftBottom\":\n                    className = className + \" mbw-avatar-hide-left-bottom-border-radius\";\n                    break;\n            }\n        });\n        return className;\n    };\n    const renderAvatar = () => (React.createElement(\"div\", { className: `mbw-avatar-${type}-container`, \"data-testid\": \"mbw-avatar-container\" },\n        React.createElement(\"div\", { className: getImgContainerHolderClassName() },\n            React.createElement(\"div\", { className: \"mbw-avatar-img-container\" },\n                React.createElement(\"img\", { src: getAvatarUrl(), className: \"mbw-avatar-image\", alt: \"\" })),\n            renderOverlaysContainer()),\n        renderTransformContainer()));\n    return renderAvatar();\n};\n\nexport { Avatar as default };\n//# sourceMappingURL=avatar.js.map\n","import n from '../../node_modules/rollup-plugin-styles/dist/runtime/inject-css.js';\n\nvar css = \"@keyframes mbw_animationBzdot9__b4aabd98{0%{background-position:-200px 0}to{background-position:calc(200px + 100%) 0}}.mbw_statusIndicatorContainer__b4aabd98{align-items:center;display:flex;justify-content:center;width:100%}.mbw_statusIndicatorBigHolder__b4aabd98{padding:.1875rem}.mbw_statusIndicatorBigHolder__b4aabd98,.mbw_statusIndicatorHolder__b4aabd98{background-color:var(--mbw-status-indicator-border-color,#fff);border-radius:31.25rem}.mbw_statusIndicatorHolder__b4aabd98.mbw_default__b4aabd98{padding:.1875rem}@media (max-width:48rem){.mbw_statusIndicatorHolder__b4aabd98.mbw_default__b4aabd98{padding:.125rem}}.mbw_statusIndicatorHolder__b4aabd98.mbw_medium__b4aabd98,.mbw_statusIndicatorHolder__b4aabd98.mbw_small__b4aabd98{padding:.1875rem}.mbw_statusIndicatorHolder__b4aabd98.mbw_small1__b4aabd98{padding:.125rem}.mbw_statusIndicatorOnlineBig__b4aabd98{height:var(--mbw-status-indicator-big-height,1.625rem);width:var(--mbw-status-indicator-big-width,7.5rem)}.mbw_statusIndicatorOnlineBig__b4aabd98,.mbw_statusIndicatorOnlineDefault__b4aabd98{align-items:center;background-color:var(--mbw-status-indicator-online-color,#62dd13);border-radius:31.25rem;color:var(--mbw-status-indicator-text-color,#fff);display:flex;justify-content:center}.mbw_statusIndicatorOnlineDefault__b4aabd98{height:var(--mbw-status-indicator-medium-height,.625rem);width:var(--mbw-status-indicator-medium-width,6.25rem)}@media (max-width:48rem){.mbw_statusIndicatorOnlineDefault__b4aabd98{height:var(--mbw-status-indicator-small-height,.5rem);width:var(--mbw-status-indicator-small-width,4.375rem)}}.mbw_statusIndicatorOnlineMedium__b4aabd98{height:var(--mbw-status-indicator-medium-height,.625rem);width:var(--mbw-status-indicator-medium-width,6.25rem)}.mbw_statusIndicatorOnlineMedium__b4aabd98,.mbw_statusIndicatorOnlineSmall__b4aabd98{align-items:center;background-color:var(--mbw-status-indicator-online-color,#62dd13);border-radius:31.25rem;color:var(--mbw-status-indicator-text-color,#fff);display:flex;justify-content:center}.mbw_statusIndicatorOnlineSmall__b4aabd98{height:var(--mbw-status-indicator-small-height,.5rem);width:var(--mbw-status-indicator-small-width,4.375rem)}.mbw_statusIndicatorOnlineExtraSmall__b4aabd98{height:var(--mbw-status-indicator-extra-small-height,.375rem);width:var(--mbw-status-indicator-extra-small-width,3.125rem)}.mbw_statusIndicatorOnlineExtraSmall1__b4aabd98,.mbw_statusIndicatorOnlineExtraSmall__b4aabd98{align-items:center;background-color:var(--mbw-status-indicator-online-color,#62dd13);border-radius:31.25rem;color:var(--mbw-status-indicator-text-color,#fff);display:flex;justify-content:center}.mbw_statusIndicatorOnlineExtraSmall1__b4aabd98{height:var(--mbw-status-indicator-extra-small-1-height,.1875rem);width:var(--mbw-status-indicator-extra-small-1-width,1.2rem)}.mbw_statusIndicatorOfflineBig__b4aabd98{height:var(--mbw-status-indicator-big-height,1.625rem);width:var(--mbw-status-indicator-big-width,7.5rem)}.mbw_statusIndicatorOfflineBig__b4aabd98,.mbw_statusIndicatorOfflineDefault__b4aabd98{align-items:center;background-color:var(--mbw-status-indicator-offline-color,#d0d0d0);border-radius:31.25rem;color:var(--mbw-status-indicator-text-color,#fff);display:flex;justify-content:center}.mbw_statusIndicatorOfflineDefault__b4aabd98{height:var(--mbw-status-indicator-medium-height,.625rem);width:var(--mbw-status-indicator-medium-width,6.25rem)}@media (max-width:48rem){.mbw_statusIndicatorOfflineDefault__b4aabd98{height:var(--mbw-status-indicator-small-height,.5rem);width:var(--mbw-status-indicator-small-width,4.375rem)}}.mbw_statusIndicatorOfflineMedium__b4aabd98{height:var(--mbw-status-indicator-medium-height,.625rem);width:var(--mbw-status-indicator-medium-width,6.25rem)}.mbw_statusIndicatorOfflineMedium__b4aabd98,.mbw_statusIndicatorOfflineSmall__b4aabd98{align-items:center;background-color:var(--mbw-status-indicator-offline-color,#d0d0d0);border-radius:31.25rem;color:var(--mbw-status-indicator-text-color,#fff);display:flex;justify-content:center}.mbw_statusIndicatorOfflineSmall__b4aabd98{height:var(--mbw-status-indicator-small-height,.5rem);width:var(--mbw-status-indicator-small-width,4.375rem)}.mbw_statusIndicatorOfflineExtraSmall__b4aabd98{height:var(--mbw-status-indicator-extra-small-height,.375rem);width:var(--mbw-status-indicator-extra-small-width,3.125rem)}.mbw_statusIndicatorOfflineExtraSmall1__b4aabd98,.mbw_statusIndicatorOfflineExtraSmall__b4aabd98{align-items:center;background-color:var(--mbw-status-indicator-offline-color,#d0d0d0);border-radius:31.25rem;color:var(--mbw-status-indicator-text-color,#fff);display:flex;justify-content:center}.mbw_statusIndicatorOfflineExtraSmall1__b4aabd98{height:var(--mbw-status-indicator-extra-small-1-height,.1875rem);width:var(--mbw-status-indicator-extra-small-1-width,1.2rem)}.mbw_statusIndicatorBusyBig__b4aabd98{height:var(--mbw-status-indicator-big-height,1.625rem);width:var(--mbw-status-indicator-big-width,7.5rem)}.mbw_statusIndicatorBusyBig__b4aabd98,.mbw_statusIndicatorBusyDefault__b4aabd98{align-items:center;background-color:var(--mbw-status-indicator-busy-color,#ff5a5a);border-radius:31.25rem;color:var(--mbw-status-indicator-text-color,#fff);display:flex;justify-content:center}.mbw_statusIndicatorBusyDefault__b4aabd98{height:var(--mbw-status-indicator-medium-height,.625rem);width:var(--mbw-status-indicator-medium-width,6.25rem)}@media (max-width:48rem){.mbw_statusIndicatorBusyDefault__b4aabd98{height:var(--mbw-status-indicator-small-height,.5rem);width:var(--mbw-status-indicator-small-width,4.375rem)}}.mbw_statusIndicatorBusyMedium__b4aabd98{height:var(--mbw-status-indicator-medium-height,.625rem);width:var(--mbw-status-indicator-medium-width,6.25rem)}.mbw_statusIndicatorBusyMedium__b4aabd98,.mbw_statusIndicatorBusySmall__b4aabd98{align-items:center;background-color:var(--mbw-status-indicator-busy-color,#ff5a5a);border-radius:31.25rem;color:var(--mbw-status-indicator-text-color,#fff);display:flex;justify-content:center}.mbw_statusIndicatorBusySmall__b4aabd98{height:var(--mbw-status-indicator-small-height,.5rem);width:var(--mbw-status-indicator-small-width,4.375rem)}.mbw_statusIndicatorBusyExtraSmall__b4aabd98{height:var(--mbw-status-indicator-extra-small-height,.375rem);width:var(--mbw-status-indicator-extra-small-width,3.125rem)}.mbw_statusIndicatorBusyExtraSmall1__b4aabd98,.mbw_statusIndicatorBusyExtraSmall__b4aabd98{align-items:center;background-color:var(--mbw-status-indicator-busy-color,#ff5a5a);border-radius:31.25rem;color:var(--mbw-status-indicator-text-color,#fff);display:flex;justify-content:center}.mbw_statusIndicatorBusyExtraSmall1__b4aabd98{height:var(--mbw-status-indicator-extra-small-1-height,.1875rem);width:var(--mbw-status-indicator-extra-small-1-width,1.2rem)}\";\nvar modules_9325e332 = {\"status-indicator-container\":\"mbw_statusIndicatorContainer__b4aabd98\",\"status-indicator-big-holder\":\"mbw_statusIndicatorBigHolder__b4aabd98\",\"status-indicator-holder\":\"mbw_statusIndicatorHolder__b4aabd98\",\"default\":\"mbw_default__b4aabd98\",\"medium\":\"mbw_medium__b4aabd98\",\"small\":\"mbw_small__b4aabd98\",\"small-1\":\"mbw_small1__b4aabd98\",\"status-indicator-online-big\":\"mbw_statusIndicatorOnlineBig__b4aabd98\",\"status-indicator-online-default\":\"mbw_statusIndicatorOnlineDefault__b4aabd98\",\"status-indicator-online-medium\":\"mbw_statusIndicatorOnlineMedium__b4aabd98\",\"status-indicator-online-small\":\"mbw_statusIndicatorOnlineSmall__b4aabd98\",\"status-indicator-online-extra-small\":\"mbw_statusIndicatorOnlineExtraSmall__b4aabd98\",\"status-indicator-online-extra-small-1\":\"mbw_statusIndicatorOnlineExtraSmall1__b4aabd98\",\"status-indicator-offline-big\":\"mbw_statusIndicatorOfflineBig__b4aabd98\",\"status-indicator-offline-default\":\"mbw_statusIndicatorOfflineDefault__b4aabd98\",\"status-indicator-offline-medium\":\"mbw_statusIndicatorOfflineMedium__b4aabd98\",\"status-indicator-offline-small\":\"mbw_statusIndicatorOfflineSmall__b4aabd98\",\"status-indicator-offline-extra-small\":\"mbw_statusIndicatorOfflineExtraSmall__b4aabd98\",\"status-indicator-offline-extra-small-1\":\"mbw_statusIndicatorOfflineExtraSmall1__b4aabd98\",\"status-indicator-busy-big\":\"mbw_statusIndicatorBusyBig__b4aabd98\",\"status-indicator-busy-default\":\"mbw_statusIndicatorBusyDefault__b4aabd98\",\"status-indicator-busy-medium\":\"mbw_statusIndicatorBusyMedium__b4aabd98\",\"status-indicator-busy-small\":\"mbw_statusIndicatorBusySmall__b4aabd98\",\"status-indicator-busy-extra-small\":\"mbw_statusIndicatorBusyExtraSmall__b4aabd98\",\"status-indicator-busy-extra-small-1\":\"mbw_statusIndicatorBusyExtraSmall1__b4aabd98\",\"animation-bzdot9\":\"mbw_animationBzdot9__b4aabd98\"};\nn(css,{});\n\nexport { css, modules_9325e332 as default };\n//# sourceMappingURL=status_indicator.module.scss.js.map\n","import React from 'react';\nimport Title from '../title/title.js';\nimport modules_9325e332 from './status_indicator.module.scss.js';\nimport classNames from '../../classnames.js';\n\nconst StatusIndicator = ({ status = \"offline\", size = \"default\", rounded, width, height, loading }) => {\n    const renderStatusIndicatorText = () => {\n        if (size !== \"big\")\n            return null;\n        const statusText = status.charAt(0).toUpperCase() + status.slice(1);\n        return React.createElement(Title, { fontStyle: \"content-medium\", bold: true }, statusText);\n    };\n    const getStatusIndicatorContentClassName = () => classNames(modules_9325e332[`status-indicator-${status}-${size}`], {\n        [modules_9325e332[\"skeleton\"]]: loading\n    });\n    if (rounded) {\n        return React.createElement(\"div\", { className: getStatusIndicatorContentClassName(), style: { width: width, height: height } });\n    }\n    return (React.createElement(\"div\", { className: modules_9325e332[\"status-indicator-container\"], \"data-testid\": \"mbw-status-indicator-container\" },\n        React.createElement(\"div\", { className: classNames(modules_9325e332[\"status-indicator-holder\"], modules_9325e332[size]) },\n            React.createElement(\"div\", { className: getStatusIndicatorContentClassName(), \"data-testid\": \"mbw-status-indicator-content\" }, renderStatusIndicatorText()))));\n};\n\nexport { StatusIndicator as default };\n//# sourceMappingURL=status_indicator.js.map\n","import React, { useState } from 'react';\nimport Title from '../../atoms/title/title.js';\n\nconst Input = ({ title, type, description, disabled, error, leftIcon, rightIcon, maxLength, placeholder, lines, onChange, onKeyDown }) => {\n    const [text, setText] = useState(\"\");\n    const [textLength, setTextLength] = useState(\"\");\n    const characterCount = textLength.length;\n    const className = () => {\n        let classNameValue = \"mbw-input\";\n        if (error)\n            classNameValue += \" mbw-input-error\";\n        if (leftIcon)\n            classNameValue += \" mbw-input-left-icon\";\n        return classNameValue;\n    };\n    const inputRef = React.useRef(null);\n    const handleChange = (event) => {\n        const newText = event.target.value;\n        setText(newText);\n        onChange(newText);\n    };\n    const handleTextareaChange = (e) => {\n        setTextLength(e.target.value);\n    };\n    return (React.createElement(\"div\", null,\n        React.createElement(\"label\", null,\n            React.createElement(Title, { fontStyle: \"content-small\", bold: true }, title)),\n        React.createElement(\"div\", { className: \"mbw-input-wrapper\" }, !lines || lines <= 1 ? (React.createElement(React.Fragment, null,\n            leftIcon && React.createElement(\"div\", { className: \"mbw-left-icon\" }, leftIcon),\n            React.createElement(\"input\", { className: className(), maxLength: maxLength, placeholder: placeholder || \"Text\", value: text, onChange: handleChange, ref: inputRef, disabled: disabled, \"aria-label\": title, \"data-testid\": title, tabIndex: 0, type: type || \"text\", onKeyDown: onKeyDown }),\n            rightIcon && React.createElement(\"div\", { className: \"mbw-right-icon\" }, rightIcon))) : (React.createElement(\"div\", { className: \"mbw-text-area-wrapper\" },\n            React.createElement(\"textarea\", { tabIndex: 0, placeholder: placeholder || \"Text\", onChange: handleTextareaChange, className: `mbw-input${error && \" mbw-text-area-error\"}`, disabled: disabled, name: title, rows: lines, maxLength: maxLength || 250 }),\n            React.createElement(\"div\", { className: !error ? \"mbw-text-area-characters\" : \"mbw-text-area-characters-error\" },\n                React.createElement(Title, { fontStyle: \"caption-1\" },\n                    characterCount,\n                    \"/\",\n                    maxLength || 250))))),\n        description && !error && !disabled && (React.createElement(\"div\", { className: \"mbw-input-description\" },\n            React.createElement(Title, { fontStyle: \"caption-1\" }, description))),\n        error && !disabled && (React.createElement(\"div\", { className: \"mbw-input-error-text\" },\n            React.createElement(Title, { fontStyle: \"caption-1\" }, error)))));\n};\n\nexport { Input as default };\n//# sourceMappingURL=input.js.map\n","import React from 'react';\nimport Title from '../../atoms/title/title.js';\n\nconst Footer = ({ links, termsLinks, logo, companyInfo, socialLinks, logoAction }) => {\n    return (React.createElement(\"footer\", null,\n        React.createElement(\"div\", { className: \"mbw-footer\" },\n            React.createElement(\"div\", { className: \"mbw-footer-logo-wrapper\" },\n                React.createElement(\"div\", { className: \"mbw-footer-logo\", onClick: logoAction }, logo),\n                React.createElement(\"div\", { className: \"mbw-footer-social-media\" }, socialLinks?.map((appLinks) => {\n                    return (React.createElement(\"a\", { key: appLinks.key, href: appLinks.href, target: \"_blank\", rel: \"noreferrer\" }, appLinks.icon));\n                }))),\n            React.createElement(\"div\", { className: \"mbw-footer-links\" }, links?.map((link) => (React.createElement(\"div\", { className: \"mbw-footer-link\", key: link.title },\n                React.createElement(\"div\", { className: \"mbw-footer-link-title\" },\n                    React.createElement(Title, { fontStyle: \"content-default\", bold: true }, link.title)),\n                link.children.map((itemsLink) => (React.createElement(\"div\", { key: itemsLink.name },\n                    React.createElement(Title, { fontStyle: \"heading-h6\" },\n                        React.createElement(\"a\", { className: \"mbw-footer-path\", href: itemsLink.path }, itemsLink.name)))))))))),\n        React.createElement(\"div\", { className: \"mbw-footer-terms\" },\n            React.createElement(Title, { fontStyle: \"content-small\" }, companyInfo),\n            React.createElement(\"div\", { className: \"mbw-footer-terms-links\" }, termsLinks?.map((term) => {\n                return (React.createElement(Title, { key: term.path, fontStyle: \"content-small\" },\n                    React.createElement(\"a\", { href: term.path }, term.name)));\n            })))));\n};\n\nexport { Footer as default };\n//# sourceMappingURL=footer.js.map\n","import React from 'react';\nimport Title from '../../atoms/title/title.js';\n\nconst Speciality = ({ type = \"button\", speciality, renderTitle, icon, renderIcon, title }) => {\n    const kindCaseCaterpillar = speciality.iconName?.replace(\"_\", \"-\") || \"default\";\n    const specialityIcon = icon || speciality.iconUrl;\n    const specialityTitle = title || speciality.name;\n    let titleFontStyleDesktop;\n    let titleFontStyleMobile;\n    let descriptionFontStyleDesktop;\n    let descriptionFontStyleMobile;\n    switch (type) {\n        case \"standard\":\n            titleFontStyleDesktop = \"heading-h2\";\n            descriptionFontStyleDesktop = \"heading-h6\";\n            titleFontStyleMobile = \"heading-h2\";\n            descriptionFontStyleMobile = \"heading-h6\";\n            break;\n        case \"button\":\n            titleFontStyleDesktop = \"content-small\";\n            titleFontStyleMobile = \"caption-1\";\n            break;\n        case \"advisor-profile\":\n            titleFontStyleDesktop = \"content-small\";\n            titleFontStyleMobile = speciality.iconName ? \"caption-2\" : \"content-small\";\n            break;\n    }\n    const renderSpecialityIcon = () => (React.createElement(\"div\", { \"data-testid\": \"mbw-speciality-icon\", className: `mbw-speciality-icon-${type}-${kindCaseCaterpillar}` }, renderIcon ? renderIcon() : React.createElement(\"img\", { src: specialityIcon, alt: \"\" })));\n    const renderSpecialityTitle = () => (React.createElement(\"div\", { \"data-testid\": \"mbw-speciality-title\", className: `mbw-speciality-title-${type}` }, renderTitle ? renderTitle() : (React.createElement(React.Fragment, null,\n        React.createElement(\"div\", { className: `mbw-speciality-title-desktop-${type}` },\n            React.createElement(Title, { fontStyle: titleFontStyleDesktop, bold: true }, specialityTitle)),\n        React.createElement(\"div\", { className: `mbw-speciality-title-mobile-${type}` },\n            React.createElement(Title, { fontStyle: titleFontStyleMobile, bold: true }, specialityTitle))))));\n    const renderSpecialityDescription = () => (React.createElement(\"div\", { \"data-testid\": \"mbw-speciality-description\", className: `mbw-speciality-description-${type}` },\n        React.createElement(\"div\", { className: \"mbw-speciality-description-desktop\" },\n            React.createElement(Title, { fontStyle: descriptionFontStyleDesktop }, speciality.description)),\n        React.createElement(\"div\", { className: \"mbw-speciality-description-mobile\" },\n            React.createElement(Title, { fontStyle: descriptionFontStyleMobile }, speciality.description))));\n    return (React.createElement(\"div\", { \"data-testid\": \"mbw-speciality\", className: `mbw-speciality-${type}-${kindCaseCaterpillar}` },\n        React.createElement(\"div\", { \"data-testid\": \"mbw-speciality-content\", className: `mbw-speciality-content-${type}` },\n            renderSpecialityIcon(),\n            React.createElement(\"div\", { \"data-testid\": \"mbw-speciality-title-content\", className: `mbw-speciality-title-content-${type}` },\n                renderSpecialityTitle(),\n                renderSpecialityDescription()))));\n};\n\nexport { Speciality as default };\n//# sourceMappingURL=speciality.js.map\n","import React from 'react';\nimport Icon from '../../atoms/icon/icon.js';\nimport Title from '../../atoms/title/title.js';\n\nconst MyOrdersRightArrow = ({ withReview = false, reviewType = null }) => {\n    const getRightArrowIconClassName = () => {\n        if (withReview && !reviewType)\n            return \"mbw-right-arrow-purple\";\n        return \"mbw-right-arrow-default\";\n    };\n    const renderRightArrowIcon = () => (React.createElement(Icon, { width: \"24\", height: \"24\", className: getRightArrowIconClassName(), dataTestId: \"mbw-right-arrow\" },\n        React.createElement(\"svg\", { xmlns: \"http://www.w3.org/2000/svg\", width: \"24\", height: \"24\", viewBox: \"0 0 24 24\", fill: \"none\" },\n            React.createElement(\"path\", { d: \"M9 19L15 12L9 5\", stroke: \"#121212\", strokeWidth: \"1.5\", strokeLinecap: \"round\", strokeLinejoin: \"round\" }))));\n    const renderReviewIcon = () => (React.createElement(Icon, { width: \"24\", height: \"24\", className: `mbw-right-arrow-review-${reviewType}-icon`, dataTestId: \"mbw-right-arrow-review-icon\" },\n        React.createElement(\"svg\", { xmlns: \"http://www.w3.org/2000/svg\", width: \"25\", height: \"24\", viewBox: \"0 0 25 24\", fill: \"none\" },\n            React.createElement(\"circle\", { cx: \"12.5\", cy: \"12\", r: \"10\", stroke: \"#121212\", strokeWidth: \"1.5\" }),\n            React.createElement(\"path\", { d: \"M9.5 16C10.3504 16.6303 11.3846 17 12.5 17C13.6154 17 14.6496 16.6303 15.5 16\", stroke: \"#121212\", strokeWidth: \"1.5\", strokeLinecap: \"round\" }),\n            React.createElement(\"path\", { d: \"M16 10.5C16 10.8293 15.9101 11.1048 15.7911 11.2833C15.6697 11.4654 15.557 11.5 15.5 11.5C15.443 11.5 15.3303 11.4654 15.2089 11.2833C15.0899 11.1048 15 10.8293 15 10.5C15 10.1707 15.0899 9.89525 15.2089 9.71669C15.3303 9.53464 15.443 9.5 15.5 9.5C15.557 9.5 15.6697 9.53464 15.7911 9.71669C15.9101 9.89525 16 10.1707 16 10.5Z\", stroke: \"#121212\" }),\n            React.createElement(\"path\", { d: \"M10 10.5C10 10.8293 9.91012 11.1048 9.79108 11.2833C9.66971 11.4654 9.55695 11.5 9.5 11.5C9.44305 11.5 9.33029 11.4654 9.20892 11.2833C9.08988 11.1048 9 10.8293 9 10.5C9 10.1707 9.08988 9.89525 9.20892 9.71669C9.33029 9.53464 9.44305 9.5 9.5 9.5C9.55695 9.5 9.66971 9.53464 9.79108 9.71669C9.91012 9.89525 10 10.1707 10 10.5Z\", stroke: \"#121212\" }))));\n    const renderReview = () => {\n        if (!withReview)\n            return null;\n        if (!reviewType) {\n            return (React.createElement(\"div\", { className: 'mbw-right-arrow-review-text-container', \"data-testid\": \"mbw-right-arrow-review-text-container\" },\n                React.createElement(Title, { fontStyle: 'content-default', bold: true }, \"Rate and review\")));\n        }\n        return (React.createElement(\"div\", { className: 'mbw-right-arrow-review-icon-container' }, renderReviewIcon()));\n    };\n    const renderMyOrdersRightArrow = () => (React.createElement(\"div\", { className: 'mbw-my-orders-right-arrow-container' },\n        renderReview(),\n        renderRightArrowIcon()));\n    return renderMyOrdersRightArrow();\n};\n\nexport { MyOrdersRightArrow as default };\n//# sourceMappingURL=my_orders_right_arrow.js.map\n","import React from 'react';\nimport Avatar from '../../molecules/avatar/avatar.js';\nimport MyOrdersRightArrow from '../../molecules/my_orders_right_arrow/my_orders_right_arrow.js';\nimport Title from '../../atoms/title/title.js';\nimport StatusIndicator from '../../atoms/status_indicator/status_indicator.js';\n\nconst MyOrdersAdvisorCell = ({ type = \"completed\", advisorName = \"Advisor name\", advisorServiceName = \"Psychic reader\", advisorStatus = \"offline\", orderTitle, labels = [] }) => {\n    const renderAvatar = () => (React.createElement(React.Fragment, null,\n        React.createElement(\"div\", { className: 'mbw-my-orders-advisor-cell-avatar-holder-mobile' },\n            React.createElement(Avatar, { type: 'rectangle', size: \"small\", transformContainer: React.createElement(StatusIndicator, { status: advisorStatus, size: \"extra-small-1\" }) })),\n        React.createElement(\"div\", { className: 'mbw-my-orders-advisor-cell-avatar-holder-browser' },\n            React.createElement(Avatar, { type: 'rectangle', size: \"large\", transformContainer: React.createElement(StatusIndicator, { status: advisorStatus, size: \"extra-small\" }) }))));\n    const renderLabel = () => {\n        const labelMobile = React.createElement(\"div\", { className: `mbw-my-orders-advisor-cell-${type}-labels-holder-mobile` },\n            React.createElement(\"div\", { className: 'mbw-my-orders-advisor-cell-order-title-holder-container', \"data-testid\": \"mbw-my-orders-advisor-cell-order-title-holder-container\" }, orderTitle),\n            React.createElement(\"div\", { className: 'mbw-my-orders-advisor-cell-labels-holder-container' }, labels.map((label, index) => (React.createElement(\"div\", { className: 'mbw-my-orders-advisor-cell-label-container', key: index, \"data-testid\": \"mbw-my-orders-advisor-cell-label-container\" }, label)))));\n        const labelBrowser = React.createElement(\"div\", { className: `mbw-my-orders-advisor-cell-${type}-labels-holder-browser` },\n            React.createElement(\"div\", { className: 'mbw-my-orders-advisor-cell-orderTitle-holder-container', \"data-testid\": \"mbw-my-orders-advisor-cell-orderTitle-holder-container\" }, orderTitle),\n            React.createElement(\"div\", { className: 'mbw-my-orders-advisor-cell-labels-holder-container' }, labels.map((label, index) => (React.createElement(\"div\", { className: 'mbw-my-orders-advisor-cell-label-container', key: index, \"data-testid\": \"mbw-my-orders-advisor-cell-label-container\" }, label)))));\n        return { labelMobile, labelBrowser };\n    };\n    const renderMyOrdersAdvisorCell = () => {\n        const { labelMobile, labelBrowser } = renderLabel() || {};\n        return (React.createElement(\"div\", { className: `mbw-my-orders-advisor-cell-${type}-container`, \"data-testid\": \"mbw-my-orders-advisor-cell-container\" },\n            React.createElement(\"div\", { className: 'mbw-my-orders-advisor-cell-advisor-info' },\n                React.createElement(\"div\", { className: 'mbw-my-orders-advisor-cell-avatar-service-container' },\n                    renderAvatar(),\n                    React.createElement(\"div\", { className: 'mbw-my-orders-advisor-cell-advisor-name-service-and-label-container' },\n                        React.createElement(\"div\", { className: 'mbw-my-orders-advisor-cell-advisor-name-service-container' },\n                            React.createElement(\"div\", { \"data-testid\": \"mbw-my-orders-advisor-cell-advisor-name\" },\n                                React.createElement(Title, { fontStyle: 'heading-h5', bold: true }, advisorName)),\n                            React.createElement(\"div\", { className: 'mbw-my-orders-advisor-cell-advisor-service-name-container', \"data-testid\": \"mbw-my-orders-advisor-cell-advisor-service-name\" },\n                                React.createElement(Title, { fontStyle: 'content-default' }, advisorServiceName))),\n                        labelBrowser)),\n                labelMobile),\n            React.createElement(\"div\", { className: 'mbw-my-orders-advisor-cell-right-arrow-container' },\n                React.createElement(MyOrdersRightArrow, null))));\n    };\n    return renderMyOrdersAdvisorCell();\n};\n\nexport { MyOrdersAdvisorCell as default };\n//# sourceMappingURL=my_orders_advisor_cell.js.map\n","import n from '../../node_modules/rollup-plugin-styles/dist/runtime/inject-css.js';\n\nvar css = \"@keyframes mbw_animationBzdot9__3a1e751f{0%{background-position:-200px 0}to{background-position:calc(200px + 100%) 0}}.mbw_labelGrayContainer__3a1e751f{align-items:center;background-color:#f7f7f7;border:.063rem solid #eaeaea;border-radius:31.25rem;display:flex;justify-content:center;padding:.1875rem .625rem;width:fit-content}@media (max-width:48rem){.mbw_labelGrayContainer__3a1e751f{padding:.063rem .313rem}}\";\nvar modules_1a8f5c5e = {\"label-gray-container\":\"mbw_labelGrayContainer__3a1e751f\",\"animation-bzdot9\":\"mbw_animationBzdot9__3a1e751f\"};\nn(css,{});\n\nexport { css, modules_1a8f5c5e as default };\n//# sourceMappingURL=label.module.scss.js.map\n","import React from 'react';\nimport modules_1a8f5c5e from './label.module.scss.js';\n\nconst Label = ({ labelType, children }) => {\n    const renderLabel = () => (React.createElement(\"div\", { className: modules_1a8f5c5e[`label-${labelType}-container`] }, children));\n    return renderLabel();\n};\n\nexport { Label as default };\n//# sourceMappingURL=label.js.map\n","import n from '../../node_modules/rollup-plugin-styles/dist/runtime/inject-css.js';\n\nvar css = \".mbw_myOrdersSectionDividerContainer__9849aaed{align-items:center;display:flex;flex-direction:row;justify-content:center;width:100%}.mbw_myOrdersSectionCompletedDividerTitleContainer__9849aaed{color:var(--mbw-my-orders-section-divider-completed-color,#62dd13);white-space:nowrap}.mbw_myOrdersSectionCompletedDividerLineContainer__9849aaed{background-color:var(--mbw-my-orders-section-divider-completed-color,#62dd13);height:.063rem;margin-left:.313rem;width:100%}.mbw_myOrdersSectionNeedReviewDividerTitleContainer__9849aaed{color:var(--mbw-my-orders-section-divider-need-review-color,#ff8717);white-space:nowrap}.mbw_myOrdersSectionNeedReviewDividerLineContainer__9849aaed{background-color:var(--mbw-my-orders-section-divider-need-review-color,#ff8717);height:.063rem;margin-left:.313rem;width:100%}\";\nvar modules_c372949e = {\"my-orders-section-divider-container\":\"mbw_myOrdersSectionDividerContainer__9849aaed\",\"my-orders-section-completed-divider-title-container\":\"mbw_myOrdersSectionCompletedDividerTitleContainer__9849aaed\",\"my-orders-section-completed-divider-line-container\":\"mbw_myOrdersSectionCompletedDividerLineContainer__9849aaed\",\"my-orders-section-need-review-divider-title-container\":\"mbw_myOrdersSectionNeedReviewDividerTitleContainer__9849aaed\",\"my-orders-section-need-review-divider-line-container\":\"mbw_myOrdersSectionNeedReviewDividerLineContainer__9849aaed\"};\nn(css,{});\n\nexport { css, modules_c372949e as default };\n//# sourceMappingURL=my_orders_section_divider.module.scss.js.map\n","import React from 'react';\nimport Title from '../title/title.js';\nimport modules_c372949e from './my_orders_section_divider.module.scss.js';\n\nconst MyOrdersSectionDivider = ({ type = \"completed\", title = \"Completed\" }) => {\n    const renderMyOrdersSectionDivider = () => (React.createElement(\"div\", { className: modules_c372949e[\"my-orders-section-divider-container\"] },\n        React.createElement(\"div\", { className: modules_c372949e[`my-orders-section-${type}-divider-title-container`], \"data-testid\": \"mbw-my-orders-section-divider-title-container\" },\n            React.createElement(Title, { fontStyle: \"content-default\", bold: true }, title)),\n        React.createElement(\"div\", { className: modules_c372949e[`my-orders-section-${type}-divider-line-container`], \"data-testid\": \"mbw-my-orders-section-divider-line-container\" })));\n    return renderMyOrdersSectionDivider();\n};\n\nexport { MyOrdersSectionDivider as default };\n//# sourceMappingURL=my_orders_section_divider.js.map\n","import React from 'react';\n\nconst liveChat = React.createElement(\"svg\", { xmlns: \"http://www.w3.org/2000/svg\", width: \"30\", height: \"30\", viewBox: \"0 0 30 30\", fill: \"none\" },\n    React.createElement(\"path\", { fillRule: \"evenodd\", clipRule: \"evenodd\", d: \"M27.5 15C27.5 21.9036 21.9036 27.5 15 27.5C13.0004 27.5 11.1105 27.0305 9.43441 26.1957C8.98901 25.9738 8.47992 25.9 7.99923 26.0286L5.21668 26.7731C4.00877 27.0963 2.90369 25.9912 3.22689 24.7833L3.9714 22.0008C4.10001 21.5201 4.02617 21.011 3.80433 20.5656C2.96952 18.8895 2.5 16.9996 2.5 15C2.5 8.09644 8.09644 2.5 15 2.5C21.9036 2.5 27.5 8.09644 27.5 15ZM10 16.25C9.30964 16.25 8.75 15.6904 8.75 15C8.75 14.3096 9.30964 13.75 10 13.75C10.6904 13.75 11.25 14.3096 11.25 15C11.25 15.6904 10.6904 16.25 10 16.25ZM13.75 15C13.75 15.6904 14.3096 16.25 15 16.25C15.6904 16.25 16.25 15.6904 16.25 15C16.25 14.3096 15.6904 13.75 15 13.75C14.3096 13.75 13.75 14.3096 13.75 15ZM18.75 15C18.75 15.6904 19.3096 16.25 20 16.25C20.6904 16.25 21.25 15.6904 21.25 15C21.25 14.3096 20.6904 13.75 20 13.75C19.3096 13.75 18.75 14.3096 18.75 15Z\", fill: \"#121212\" }));\n\nexport { liveChat };\n//# sourceMappingURL=live_chat.js.map\n","import React from 'react';\n\nconst videoCall = React.createElement(\"svg\", { xmlns: \"http://www.w3.org/2000/svg\", width: \"30\", height: \"30\", viewBox: \"0 0 30 30\", fill: \"none\" },\n    React.createElement(\"path\", { d: \"M3 8.25C3 6.17893 4.67893 4.5 6.75 4.5H18.75C20.8211 4.5 22.5 6.17893 22.5 8.25V21.75C22.5 23.8211 20.8211 25.5 18.75 25.5H6.75C4.67893 25.5 3 23.8211 3 21.75V8.25Z\", fill: \"#121212\" }),\n    React.createElement(\"path\", { d: \"M21 13.1185C21 12.6806 21.1913 12.2646 21.5238 11.9796L26.0238 8.12245C26.9968 7.28844 28.5 7.9798 28.5 9.26133V20.7387C28.5 22.0202 26.9968 22.7116 26.0238 21.8776L21.5238 18.0204C21.1913 17.7354 21 17.3194 21 16.8815V13.1185Z\", fill: \"#121212\" }));\n\nexport { videoCall };\n//# sourceMappingURL=video_call.js.map\n","import React from 'react';\n\nconst voiceCall = React.createElement(\"svg\", { xmlns: \"http://www.w3.org/2000/svg\", width: \"30\", height: \"30\", viewBox: \"0 0 30 30\", fill: \"none\" },\n    React.createElement(\"path\", { d: \"M10.4904 6.60087L11.403 8.23623C12.2267 9.71207 11.896 11.6481 10.5988 12.9453C10.5988 12.9453 10.5988 12.9453 10.5988 12.9453C10.5987 12.9455 9.02542 14.519 11.8782 17.3718C14.7304 20.2239 16.3038 18.652 16.3047 18.6512C16.3047 18.6512 16.3047 18.6512 16.3047 18.6512C17.6019 17.354 19.5379 17.0233 21.0138 17.847L22.6491 18.7596C24.8777 20.0033 25.1409 23.1286 23.182 25.0875C22.005 26.2645 20.5631 27.1804 18.9691 27.2408C16.2858 27.3425 11.7288 26.6634 7.15771 22.0923C2.58659 17.5212 1.90749 12.9642 2.00921 10.2809C2.06964 8.68694 2.9855 7.24502 4.16254 6.06798C6.12137 4.10915 9.24665 4.37233 10.4904 6.60087Z\", fill: \"#121212\" }),\n    React.createElement(\"path\", { d: \"M14.5137 1.91162C14.6096 1.31979 15.1692 0.918319 15.7612 1.01413C15.7979 1.02115 15.9158 1.04318 15.9775 1.05693C16.1011 1.08443 16.2734 1.12678 16.4883 1.18935C16.9179 1.31446 17.5182 1.52058 18.2387 1.85079C19.6811 2.51189 21.6006 3.66837 23.5925 5.6597C25.5844 7.65103 26.7412 9.57001 27.4025 11.012C27.7328 11.7323 27.939 12.3324 28.0642 12.7619C28.1267 12.9767 28.1691 13.149 28.1966 13.2725C28.2104 13.3343 28.2204 13.3839 28.2274 13.4205L28.2358 13.4656C28.3316 14.0575 27.9337 14.6401 27.3417 14.7359C26.7514 14.8314 26.1953 14.4319 26.0971 13.8428C26.094 13.827 26.0857 13.7845 26.0768 13.7445C26.059 13.6643 26.0281 13.5372 25.9791 13.3691C25.8811 13.0328 25.7109 12.5329 25.4284 11.9168C24.864 10.6861 23.8491 8.98658 22.0569 7.1949C20.2647 5.40322 18.5647 4.3886 17.3336 3.82436C16.7173 3.54189 16.2173 3.37177 15.8809 3.27382C15.7128 3.22486 15.5014 3.17635 15.4212 3.1585C14.832 3.06033 14.4182 2.50175 14.5137 1.91162Z\", fill: \"#121212\" }),\n    React.createElement(\"path\", { fillRule: \"evenodd\", clipRule: \"evenodd\", d: \"M14.8413 6.90437C15.0061 6.3279 15.6071 5.9941 16.1837 6.15881L15.8854 7.20259C16.1837 6.15881 16.1837 6.15881 16.1837 6.15881L16.1858 6.15941L16.188 6.16005L16.1928 6.16146L16.204 6.16481L16.2327 6.17373C16.2545 6.18071 16.2818 6.1898 16.3143 6.20133C16.3793 6.22439 16.4653 6.2572 16.5707 6.30236C16.7816 6.39273 17.0698 6.53229 17.4238 6.74174C18.1325 7.16103 19.0999 7.85749 20.2364 8.99365C21.3728 10.1298 22.0695 11.097 22.4889 11.8054C22.6984 12.1593 22.838 12.4474 22.9284 12.6583C22.9736 12.7637 23.0064 12.8496 23.0295 12.9146C23.041 12.9471 23.0501 12.9743 23.0571 12.9962L23.066 13.0248L23.0694 13.036L23.0708 13.0409L23.0714 13.0431C23.0714 13.0431 23.072 13.0452 22.0279 13.3434L23.072 13.0452C23.2368 13.6216 22.9029 14.2225 22.3262 14.3872C21.7545 14.5505 21.1588 14.2237 20.9881 13.6562L20.9828 13.6406C20.9751 13.6189 20.9591 13.5761 20.9323 13.5135C20.8787 13.3886 20.7816 13.1842 20.62 12.9112C20.2972 12.3659 19.7141 11.542 18.7007 10.5289C17.6873 9.51574 16.8631 8.93287 16.3177 8.61014C16.0447 8.44859 15.8402 8.35147 15.7152 8.29792C15.6526 8.27112 15.6098 8.25515 15.588 8.24743L15.5724 8.24208C15.0048 8.07146 14.6779 7.47594 14.8413 6.90437Z\", fill: \"#121212\" }));\n\nexport { voiceCall };\n//# sourceMappingURL=voice_call.js.map\n","import React from 'react';\n\nconst clock = React.createElement(\"svg\", { xmlns: \"http://www.w3.org/2000/svg\", width: \"24\", height: \"24\", viewBox: \"0 0 24 24\", fill: \"none\" },\n    React.createElement(\"path\", { fillRule: \"evenodd\", clipRule: \"evenodd\", d: \"M12 22C17.5228 22 22 17.5228 22 12C22 6.47715 17.5228 2 12 2C6.47715 2 2 6.47715 2 12C2 17.5228 6.47715 22 12 22ZM12.75 8C12.75 7.58579 12.4142 7.25 12 7.25C11.5858 7.25 11.25 7.58579 11.25 8V12C11.25 12.1989 11.329 12.3897 11.4697 12.5303L13.9697 15.0303C14.2626 15.3232 14.7374 15.3232 15.0303 15.0303C15.3232 14.7374 15.3232 14.2626 15.0303 13.9697L12.75 11.6893V8Z\", fill: \"#121212\" }));\n\nexport { clock };\n//# sourceMappingURL=clock.js.map\n","import React from 'react';\nimport MyOrdersRightArrow from '../../molecules/my_orders_right_arrow/my_orders_right_arrow.js';\nimport Title from '../../atoms/title/title.js';\nimport Icon from '../../atoms/icon/icon.js';\nimport { liveChat } from './img/live_chat.js';\nimport { videoCall } from './img/video_call.js';\nimport { voiceCall } from './img/voice_call.js';\nimport { clock } from './img/clock.js';\n\nconst MyOrdersOrderCell = ({ type = \"live-chat\", orderSubject, orderCreatedAt, orderDescription, reviewType = null, labels = [] }) => {\n    const renderLabel = () => (React.createElement(\"div\", { className: 'mbw-my-orders-order-cell-labels-holder-container' }, labels.map((label, index) => (React.createElement(\"div\", { className: 'mbw-my-orders-order-cell-label-container', key: index, \"data-testid\": \"mbw-my-orders-order-cell-label-container\" }, label)))));\n    const getOrderIcon = (icon) => (React.createElement(Icon, { className: `mbw-my-orders-order-cell-${type}-icon`, dataTestId: \"mbw-my-orders-order-cell-icon\" }, icon));\n    const renderOrderIcon = () => {\n        let orderIcon = null;\n        switch (type) {\n            case \"live-chat\":\n                orderIcon = getOrderIcon(liveChat);\n                break;\n            case \"video-call\":\n                orderIcon = getOrderIcon(videoCall);\n                break;\n            case \"voice-call\":\n                orderIcon = getOrderIcon(voiceCall);\n                break;\n            default:\n                orderIcon = null;\n        }\n        return orderIcon;\n    };\n    const renderOrderSubject = () => (React.createElement(\"div\", { className: \"mbw-my-orders-order-cell-subject-container\", \"data-testid\": \"mbw-my-orders-order-cell-subject-container\" },\n        React.createElement(Title, { fontStyle: 'heading-h5', bold: true }, orderSubject)));\n    const renderOrderTitle = () => (React.createElement(\"div\", { className: \"mbw-my-orders-order-cell-title-container\" },\n        renderOrderIcon(),\n        renderOrderSubject()));\n    const renderOrderCreatedAt = () => (React.createElement(\"div\", { className: \"mbw-my-orders-order-cell-order-created-at-container\", \"data-testid\": \"mbw-my-orders-order-cell-order-created-at-container\" },\n        React.createElement(Title, { fontStyle: 'content-default' }, orderCreatedAt)));\n    const renderOrderDescription = () => (React.createElement(\"div\", { className: \"mbw-my-orders-order-cell-order-description-container\", \"data-testid\": \"mbw-my-orders-order-cell-order-description-container\" },\n        React.createElement(Icon, { className: \"mbw-my-orders-order-cell-order-description-icon\" }, clock),\n        React.createElement(Title, { fontStyle: 'content-default' }, orderDescription)));\n    const renderMyOrdersAdvisorCell = () => (React.createElement(\"div\", { className: \"mbw-my-orders-order-cell-container\" },\n        React.createElement(\"div\", { className: \"mbw-my-orders-order-cell-content-container\" },\n            React.createElement(\"div\", { className: \"mbw-my-orders-order-cell-order-title-labels-container\" },\n                renderOrderTitle(),\n                renderLabel()),\n            React.createElement(\"div\", { className: \"mbw-my-orders-order-cell-order-data-container\" },\n                renderOrderCreatedAt(),\n                renderOrderDescription())),\n        React.createElement(\"div\", { className: 'mbw-my-orders-order-cell-right-arrow-container' },\n            React.createElement(MyOrdersRightArrow, { withReview: !!reviewType, reviewType: reviewType }))));\n    return renderMyOrdersAdvisorCell();\n};\n\nexport { MyOrdersOrderCell as default };\n//# sourceMappingURL=my_orders_order_cell.js.map\n","import React from 'react';\nimport Title from '../../atoms/title/title.js';\nimport Avatar from '../avatar/avatar.js';\n\nconst ChatBubble = ({ message, isUser, time, avatarSrc = null }) => {\n    const now = new Date(time);\n    const hours = now.getHours();\n    const minutes = now.getMinutes();\n    const ampm = hours >= 12 ? \"PM\" : \"AM\";\n    const hours12 = hours % 12 || 12;\n    const formattedHours = hours12.toString().padStart(2, \"0\");\n    const formattedMinutes = minutes.toString().padStart(2, \"0\");\n    const timeOnBubble = `${formattedHours}:${formattedMinutes} ${ampm}`;\n    return (React.createElement(\"div\", { className: `mbw-chat-bubble-wrapper ${isUser ? \"mbw-chat-bubble-wrapper-user\" : \"mbw-chat-bubble-wrapper-other\"}` },\n        !isUser && React.createElement(\"div\", { className: \"mbw-chat-bubble-avatar-container\" },\n            React.createElement(Avatar, { imgSrc: avatarSrc, type: \"round\", size: \"small\" })),\n        React.createElement(\"div\", { className: `mbw-chat-bubble ${isUser ? \"mbw-chat-bubble-user\" : \"mbw-chat-bubble-other\"}` },\n            React.createElement(\"div\", { className: \"mbw-chat-bubble-message\" },\n                React.createElement(Title, { fontStyle: \"content-medium\" }, message),\n                React.createElement(\"div\", { className: \"mbw-chat-bubble-time\" },\n                    React.createElement(Title, { fontStyle: \"caption-2\" }, timeOnBubble))))));\n};\n\nexport { ChatBubble as default };\n//# sourceMappingURL=chat-bubble.js.map\n","import React from 'react';\nimport Title from '../../atoms/title/title.js';\n\nconst Table = ({ tableColumnsHeaders, data, tableTotalData }) => {\n    return (React.createElement(\"div\", { className: \"mbw-table\" },\n        React.createElement(\"div\", { className: \"mbw-table-head\" }, tableColumnsHeaders?.map((header) => {\n            return (React.createElement(\"div\", { key: header },\n                React.createElement(Title, { fontStyle: \"content-medium\", bold: true }, header)));\n        })),\n        React.createElement(\"div\", { className: \"mbw-table-body\" }, data?.map((item, index) => (React.createElement(\"div\", { key: index, className: \"mbw-table-row\" },\n            React.createElement(\"div\", { className: \"mbw-table-item\" },\n                React.createElement(Title, { fontStyle: \"content-medium\" }, item?.date)),\n            React.createElement(\"div\", { className: \"mbw-table-item\" },\n                React.createElement(Title, { fontStyle: \"content-medium\" }, item?.invoiceId)),\n            React.createElement(\"div\", { className: \"mbw-table-item\" },\n                React.createElement(Title, { fontStyle: \"content-medium\", bold: true },\n                    item?.paymentData?.currency,\n                    item?.paymentData?.amount + \".00\"),\n                React.createElement(\"div\", { className: \"mbw-table-item-source\" },\n                    React.createElement(Title, { fontStyle: \"content-medium\" }, item?.paymentData?.source))))))),\n        React.createElement(\"div\", { className: \"mbw-table-total\" },\n            React.createElement(Title, { fontStyle: \"content-medium\" },\n                tableTotalData?.total?.name,\n                \" : \",\n                tableTotalData?.total?.amount),\n            React.createElement(\"div\", { className: \"mbw-table-total-cash-back\" },\n                React.createElement(Title, { bold: true, fontStyle: \"content-medium\" },\n                    tableTotalData.cashBack.percentage,\n                    \" \",\n                    tableTotalData.cashBack.name,\n                    \" \",\n                    tableTotalData.cashBack.amount)))));\n};\n\nexport { Table as default };\n//# sourceMappingURL=table.js.map\n","import React, { useCallback } from 'react';\nimport Title from '../../atoms/title/title.js';\n\nconst DurationItem = ({ duration, durationText, durationSubText, mostPopular, selected = false, onDurationSelected, isNewUser = false, topLabel, useYourBalanceText, secondsText, bottomContainer, priceContainer }) => {\n    const selectedClassName = (className) => selected ? `${className}-selected` : className;\n    const newUserClassName = (className) => isNewUser ? selectedClassName(className) : \"\";\n    const renderDurationText = () => (React.createElement(\"div\", { \"data-testid\": \"mbw-duration-item-duration-text\", className: \"mbw-duration-item-duration-text\" },\n        React.createElement(Title, { fontStyle: \"heading-h5\", bold: true }, durationText)));\n    const renderDurationSecondsText = () => secondsText ? (React.createElement(\"div\", { \"data-testid\": \"mbw-duration-item-duration-seconds-text\", className: \"mbw-duration-item-duration-seconds-text\" }, React.createElement(Title, { fontStyle: \"caption-1\", bold: true }, secondsText))) : null;\n    const renderDurationTextMobile = () => (React.createElement(\"div\", { \"data-testid\": \"mbw-duration-item-duration-text\", className: \"mbw-duration-item-duration-text-mobile\" }, isNewUser ? React.createElement(Title, { fontStyle: \"heading-h5\", bold: true }, durationText)\n        : React.createElement(Title, { fontStyle: \"heading-h4\", bold: true }, durationText)));\n    const renderDuration = () => (React.createElement(\"div\", { className: \"mbw-duration-item-duration-container\" },\n        React.createElement(\"div\", { \"data-testid\": \"mbw-duration-item-duration\", className: selectedClassName(\"mbw-duration-item-duration\") }, duration),\n        renderDurationText(),\n        renderDurationTextMobile(),\n        renderDurationSecondsText(),\n        durationSubText));\n    const renderMostPopular = () => (React.createElement(\"div\", { \"data-testid\": \"mbw-duration-item-most-popular\" }, mostPopular));\n    const renderTopLabel = () => (React.createElement(\"div\", { \"data-testid\": \"mbw-duration-item-top-label\" }, topLabel));\n    const renderUseYourBalanceText = () => (React.createElement(\"div\", { \"data-testid\": \"mbw-duration-item-current-balance\", className: \"mbw-duration-item-current-balance\" },\n        React.createElement(Title, { fontStyle: \"content-small\", bold: true }, useYourBalanceText)));\n    const renderAdditionalText = useCallback(() => {\n        if (useYourBalanceText)\n            return renderUseYourBalanceText();\n        return priceContainer;\n    }, [useYourBalanceText]);\n    return (React.createElement(\"div\", { \"data-testid\": \"mbw-duration-item\", className: selectedClassName(\"mbw-duration-item\") + newUserClassName(\" mbw-duration-item-new-user\"), onClick: onDurationSelected, onKeyDown: onDurationSelected },\n        renderMostPopular(),\n        renderTopLabel(),\n        renderDuration(),\n        renderAdditionalText(),\n        bottomContainer));\n};\n\nexport { DurationItem as default };\n//# sourceMappingURL=duration_item.js.map\n","import React from 'react';\nimport Title from '../../atoms/title/title.js';\nimport Icon from '../../atoms/icon/icon.js';\n\nconst FilterTab = ({ type = \"filter\", title, icon, active = false, onClick }) => {\n    const activeColorClass = active ? \"mbw-filter-tab-active\" : null;\n    const renderIcon = () => (icon ? (React.createElement(Icon, { className: `mbw-filter-tab-${type}-icon ${activeColorClass}`, dataTestId: \"mbw-filter-tab-icon\" }, icon)) : null);\n    const renderTitle = () => title ? (React.createElement(\"div\", { \"data-testid\": \"mbw-filter-tab-title\", className: `mbw-filter-tab-${type}-title ${activeColorClass}` },\n        React.createElement(Title, { fontStyle: \"content-small\", bold: true }, title))) : null;\n    return (React.createElement(\"button\", { \"data-testid\": \"mbw-filter-tab\", className: `mbw-filter-tab-${type} ${activeColorClass}`, onClick: onClick },\n        renderIcon(),\n        renderTitle()));\n};\n\nexport { FilterTab as default };\n//# sourceMappingURL=filter_tab.js.map\n","import n from '../../node_modules/rollup-plugin-styles/dist/runtime/inject-css.js';\n\nvar css = \".mbw_switchSwitch__b8969350{border:none;display:inline-block;height:1.875rem;position:relative;width:3.125rem}.mbw_switchSwitch__b8969350 input{height:0;opacity:0;width:0}.mbw_switchSlider__b8969350{align-items:center;background-color:var(--mbw-switch-background-color,#d0d0d0);border-radius:2.125rem;bottom:0;cursor:pointer;display:flex;left:0;position:absolute;right:0;top:0;transition:.4s}.mbw_switchSlider__b8969350:before{background-color:var(--mbw-switch-background-color-before,#fff);border-radius:50%;content:\\\"\\\";height:1.563rem;left:.25rem;position:absolute;transition:.4s;width:1.563rem}input:checked+.mbw_switchSlider__b8969350{background-color:var(--mbw-switch-background-color-checked,#62dd13)}input:checked+.mbw_switchSlider__b8969350:before{-webkit-transform:translateX(1.062rem);-ms-transform:translateX(1.062rem);transform:translateX(1.062rem)}\";\nvar modules_21d2064f = {\"switch-switch\":\"mbw_switchSwitch__b8969350\",\"switch-slider\":\"mbw_switchSlider__b8969350\"};\nn(css,{});\n\nexport { css, modules_21d2064f as default };\n//# sourceMappingURL=switch.module.scss.js.map\n","import React from 'react';\nimport modules_21d2064f from './switch.module.scss.js';\n\nconst Switch = ({ id, checked, onChange }) => {\n    const onSwitcherChange = (e) => {\n        if (!onChange)\n            return;\n        onChange(e.target.checked);\n    };\n    const renderSwitch = () => (React.createElement(\"label\", { \"data-testid\": \"mbw-switch\", id: id, htmlFor: `checkbox${id}`, className: modules_21d2064f[\"switch-switch\"] },\n        React.createElement(\"input\", { \"data-testid\": \"mbw-switch-slider\", id: `checkbox${id}`, type: \"checkbox\", checked: checked, onChange: onSwitcherChange }),\n        React.createElement(\"span\", { className: modules_21d2064f[\"switch-slider\"] })));\n    return renderSwitch();\n};\nSwitch.displayName = \"Switch\";\n\nexport { Switch as default };\n//# sourceMappingURL=switch.js.map\n","import React from 'react';\n\nconst playButtonIcon = React.createElement(\"svg\", { width: \"22\", height: \"23\", viewBox: \"0 0 22 23\", fill: \"none\", xmlns: \"http://www.w3.org/2000/svg\" },\n    React.createElement(\"g\", { id: \"Frame 5801\" },\n        React.createElement(\"path\", { id: \"Rectangle 1974\", d: \"M5.5 4.91806C5.5 3.73442 6.80673 3.0171 7.80531 3.65256L18.6364 10.5451C19.5626 11.1345 19.5626 12.4866 18.6364 13.076L7.80531 19.9685C6.80673 20.604 5.5 19.8867 5.5 18.703V4.91806Z\", fill: \"white\" })));\n\nexport { playButtonIcon };\n//# sourceMappingURL=play_button_icon.js.map\n","import n from '../../node_modules/rollup-plugin-styles/dist/runtime/inject-css.js';\n\nvar css = \"@keyframes mbw_animationBzdot9__e08598d6{0%{background-position:-200px 0}to{background-position:calc(200px + 100%) 0}}.mbw_skeleton__e08598d6{display:flex;position:relative}.mbw_skeleton__e08598d6:after{-webkit-animation:mbw_animationBzdot9__e08598d6 1.2s ease-in-out infinite;animation:mbw_animationBzdot9__e08598d6 1.2s ease-in-out infinite;background-color:#eee!important;background-image:linear-gradient(90deg,#eee,#f5f5f5,#eee);background-repeat:no-repeat;background-size:200px 100%;contain-intrinsic-size:auto 1px auto 1px;content:\\\"\\\";display:flex;height:100%;left:0;line-height:1;max-width:100%;pointer-events:none;position:absolute;top:0;width:100%}.mbw_playButtonBigContainer__e08598d6{align-items:center;background-color:var(--mbw-play-button-background-color,rgba(0,0,0,.5));border-radius:50%;cursor:pointer;display:flex;height:var(--mbw-play-button-big-height,2.875rem);justify-content:center;overflow:hidden;width:var(--mbw-play-button-big-width,2.875rem)}.mbw_playButtonBigContainer__e08598d6:hover{background-color:var(--mbw-play-button-background-color-hover,#8755f4)}.mbw_playButtonBigIcon__e08598d6{height:var(--mbw-play-button-big-icon-height,1.375rem);width:var(--mbw-play-button-big-icon-width,1.375rem)}.mbw_playButtonDefaultContainer__e08598d6{align-items:center;background-color:var(--mbw-play-button-background-color,rgba(0,0,0,.5));border-radius:50%;cursor:pointer;display:flex;height:var(--mbw-play-button-default-height,2.25rem);justify-content:center;overflow:hidden;width:var(--mbw-play-button-default-width,2.25rem)}.mbw_playButtonDefaultContainer__e08598d6:hover{background-color:var(--mbw-play-button-background-color-hover,#8755f4)}.mbw_playButtonDefaultIcon__e08598d6{height:var(--mbw-play-button-default-icon-height,1rem);width:var(--mbw-play-button-default-icon-width,1rem)}\";\nvar modules_547ff120 = {\"skeleton\":\"mbw_skeleton__e08598d6\",\"animation-bzdot9\":\"mbw_animationBzdot9__e08598d6\",\"play-button-big-container\":\"mbw_playButtonBigContainer__e08598d6\",\"play-button-big-icon\":\"mbw_playButtonBigIcon__e08598d6\",\"play-button-default-container\":\"mbw_playButtonDefaultContainer__e08598d6\",\"play-button-default-icon\":\"mbw_playButtonDefaultIcon__e08598d6\"};\nn(css,{});\n\nexport { css, modules_547ff120 as default };\n//# sourceMappingURL=play_button.module.scss.js.map\n","import React from 'react';\nimport { playButtonIcon } from './img/play_button_icon.js';\nimport Icon from '../icon/icon.js';\nimport classNames from '../../classnames.js';\nimport modules_547ff120 from './play_button.module.scss.js';\n\nconst PlayButton = ({ type = \"default\", onClick, loading = false }) => {\n    const getPlayButtonContainerClassName = () => classNames(modules_547ff120[`play-button-${type}-container`], { [modules_547ff120[\"skeleton\"]]: loading });\n    const renderPlayButton = () => (React.createElement(\"div\", { className: getPlayButtonContainerClassName(), onClick: onClick, \"data-testid\": \"mbw-play-button-container\" },\n        React.createElement(Icon, { className: modules_547ff120[`play-button-${type}-icon`], dataTestId: \"mbw-play-button-icon\" }, playButtonIcon)));\n    return renderPlayButton();\n};\n\nexport { PlayButton as default };\n//# sourceMappingURL=play_button.js.map\n","import React from 'react';\n\nconst RatingIcon = React.createElement(\"svg\", { xmlns: \"http://www.w3.org/2000/svg\", width: \"20\", height: \"20\", viewBox: \"0 0 20 20\", fill: \"none\" },\n    React.createElement(\"path\", { d: \"M7.62796 4.3648C8.6835 2.56594 9.21127 1.6665 10.0003 1.6665C10.7894 1.6665 11.3171 2.56594 12.3727 4.3648L12.6458 4.83019C12.9457 5.34137 13.0957 5.59696 13.3295 5.7656C13.5634 5.93424 13.8546 5.99684 14.4371 6.12204L14.9674 6.23603C17.0171 6.67661 18.042 6.8969 18.2858 7.64179C18.5296 8.38668 17.831 9.16285 16.4336 10.7152L16.0721 11.1168C15.675 11.5579 15.4764 11.7785 15.3871 12.0514C15.2978 12.3242 15.3278 12.6185 15.3878 13.2071L15.4425 13.7429C15.6538 15.8141 15.7594 16.8496 15.121 17.31C14.4827 17.7704 13.5231 17.3506 11.6039 16.5112L11.1074 16.294C10.5621 16.0554 10.2894 15.9362 10.0003 15.9362C9.71128 15.9362 9.4386 16.0555 8.89323 16.294L8.39672 16.5112C6.47755 17.3506 5.51797 17.7704 4.87962 17.31C4.24126 16.8496 4.34689 15.8141 4.55816 13.7429L4.61281 13.2071C4.67285 12.6185 4.70286 12.3242 4.61354 12.0514C4.52422 11.7785 4.32568 11.5579 3.92859 11.1168L3.56707 10.7152C2.1697 9.16285 1.47101 8.38668 1.71484 7.64179C1.95867 6.8969 2.98354 6.67661 5.03327 6.23603L5.56356 6.12204C6.14603 5.99684 6.43727 5.93424 6.67111 5.7656C6.90495 5.59696 7.05493 5.34137 7.35488 4.83019L7.62796 4.3648Z\", fill: \"#FFB222\" }));\n\nexport { RatingIcon };\n//# sourceMappingURL=rating_icon.js.map\n","import n from '../../node_modules/rollup-plugin-styles/dist/runtime/inject-css.js';\n\nvar css = \"@keyframes mbw_animationBzdot9__a4324176{0%{background-position:-200px 0}to{background-position:calc(200px + 100%) 0}}.mbw_ratingDefaultContainer__a4324176{align-items:center;background-color:#fff;border-radius:31.25rem;display:flex;justify-content:center;padding:.5rem .688rem .5rem .625rem}@media (max-width:48rem){.mbw_ratingDefaultContainer__a4324176{padding:.375rem .563rem .375rem .5rem}}.mbw_ratingDefaultIcon__a4324176{height:var(--mbw-medium-big-icon-height,1.2rem);margin-right:var(--mbw-rating-medium-icon-margin-right,.25rem);width:var(--mbw-medium-big-icon-width,1.2rem)}@media (max-width:48rem){.mbw_ratingDefaultIcon__a4324176{height:var(--mbw-small-big-icon-height,1.125rem);margin-right:var(--mbw-rating-small-icon-margin-right,.125rem);width:var(--mbw-small-big-icon-width,1.125rem)}}.mbw_ratingBigContainer__a4324176{align-items:center;background-color:#fff;border-radius:31.25rem;display:flex;justify-content:center;padding:.625rem .813rem .625rem .75rem}.mbw_ratingDefaultIcon__a4324176{align-items:center;color:#ffb222;display:flex;height:var(--mbw-rating-big-icon-height,1.375rem);justify-content:center;margin-right:var(--mbw-rating-big-icon-margin-right,.375rem);width:var(--mbw-rating-big-icon-width,1.375rem)}.mbw_ratingMediumContainer__a4324176{align-items:center;background-color:#fff;border-radius:31.25rem;display:flex;justify-content:center;padding:.5rem .688rem .5rem .625rem}.mbw_ratingMediumIcon__a4324176{align-items:center;color:#ffb222;display:flex;height:var(--mbw-medium-big-icon-height,1.2rem);justify-content:center;margin-right:var(--mbw-rating-medium-icon-margin-right,.25rem);width:var(--mbw-medium-big-icon-width,1.2rem)}.mbw_ratingSmallContainer__a4324176{align-items:center;background-color:#fff;border-radius:31.25rem;display:flex;justify-content:center;padding:.375rem .563rem .375rem .5rem}.mbw_ratingSmallIcon__a4324176{align-items:center;color:#ffb222;display:flex;height:var(--mbw-small-big-icon-height,1.125rem);justify-content:center;margin-right:var(--mbw-rating-small-icon-margin-right,.125rem);width:var(--mbw-small-big-icon-width,1.125rem)}.mbw_ratingBorderContainer__a4324176{border:.063rem solid var(--mbw-default-border,#eaeaea)}\";\nvar modules_a2428c96 = {\"rating-default-container\":\"mbw_ratingDefaultContainer__a4324176\",\"rating-default-icon\":\"mbw_ratingDefaultIcon__a4324176\",\"rating-big-container\":\"mbw_ratingBigContainer__a4324176\",\"rating-medium-container\":\"mbw_ratingMediumContainer__a4324176\",\"rating-medium-icon\":\"mbw_ratingMediumIcon__a4324176\",\"rating-small-container\":\"mbw_ratingSmallContainer__a4324176\",\"rating-small-icon\":\"mbw_ratingSmallIcon__a4324176\",\"rating-border-container\":\"mbw_ratingBorderContainer__a4324176\",\"animation-bzdot9\":\"mbw_animationBzdot9__a4324176\"};\nn(css,{});\n\nexport { css, modules_a2428c96 as default };\n//# sourceMappingURL=rating.module.scss.js.map\n","import React from 'react';\nimport { RatingIcon } from './img/rating_icon.js';\nimport Icon from '../icon/icon.js';\nimport Title from '../title/title.js';\nimport modules_a2428c96 from './rating.module.scss.js';\nimport classNames from '../../classnames.js';\n\nconst Rating = ({ type, rating, withBorder = false, loading }) => {\n    const getFontStyle = () => {\n        if (type === \"medium\")\n            return \"content-medium\";\n        if (type === \"small\")\n            return \"content-small\";\n        return \"content-default\";\n    };\n    const getRatingContainerClassname = () => classNames(modules_a2428c96[`rating-${type}-container`], {\n        [modules_a2428c96[\"rating-border-container\"]]: withBorder\n    });\n    const renderRating = () => (React.createElement(\"div\", { className: getRatingContainerClassname(), \"data-testid\": \"mbw-rating-container\" },\n        React.createElement(Icon, { className: modules_a2428c96[`rating-${type}-icon`], loading: loading }, RatingIcon),\n        React.createElement(Title, { fontStyle: getFontStyle(), bold: true, loading: loading }, rating)));\n    return renderRating();\n};\n\nexport { Rating as default };\n//# sourceMappingURL=rating.js.map\n","import n from '../../node_modules/rollup-plugin-styles/dist/runtime/inject-css.js';\n\nvar css = \"@keyframes mbw_animationBzdot9__2fa3f755{0%{background-position:-200px 0}to{background-position:calc(200px + 100%) 0}}.mbw_skeleton__2fa3f755{display:flex;position:relative}.mbw_skeleton__2fa3f755:after{-webkit-animation:mbw_animationBzdot9__2fa3f755 1.2s ease-in-out infinite;animation:mbw_animationBzdot9__2fa3f755 1.2s ease-in-out infinite;background-color:#eee!important;background-image:linear-gradient(90deg,#eee,#f5f5f5,#eee);background-repeat:no-repeat;background-size:200px 100%;contain-intrinsic-size:auto 1px auto 1px;content:\\\"\\\";display:flex;height:100%;left:0;line-height:1;max-width:100%;pointer-events:none;position:absolute;top:0;width:100%}.mbw_channelsCardContainer__2fa3f755{align-items:center;display:flex;flex-direction:row;justify-content:center}.mbw_channelsCardBigIconContainer__2fa3f755{background-color:#f7f7f7;border-radius:.625rem;display:flex;margin-left:var(--mbw-rating-big-icon-margin-left,.938rem);padding:var(--mbw-rating-big-icon-padding,.688rem)}.mbw_channelsCardBigIconContainer__2fa3f755:first-of-type{margin-left:0}.mbw_skeletonBig__2fa3f755{height:calc(var(--mbw-channels-card-big-icon-height, 2rem) + var(--mbw-rating-big-icon-padding, .688rem)*2);width:calc(var(--mbw-channels-card-big-icon-width, 2rem) + var(--mbw-rating-big-icon-padding, .688rem)*2)}.mbw_channelsCardBigLiveChatOnlineIcon__2fa3f755{color:var(--mbw-channels-card-live-chat-online-color,#62dd13)}.mbw_channelsCardBigLiveChatOfflineIcon__2fa3f755,.mbw_channelsCardBigLiveChatOnlineIcon__2fa3f755{height:var(--mbw-channels-card-big-icon-height,2rem);width:var(--mbw-channels-card-big-icon-width,2rem)}.mbw_channelsCardBigLiveChatOfflineIcon__2fa3f755{color:var(--mbw-channels-card-live-chat-offline-color,#7c7f89)}.mbw_channelsCardBigLiveChatBusyIcon__2fa3f755,.mbw_channelsCardBigVideoCallOnlineIcon__2fa3f755{height:var(--mbw-channels-card-big-icon-height,2rem);width:var(--mbw-channels-card-big-icon-width,2rem)}.mbw_channelsCardBigVideoCallOnlineIcon__2fa3f755{color:var(--mbw-channels-card-video-call-online-color,#1cb4ff)}.mbw_channelsCardBigVideoCallOfflineIcon__2fa3f755{color:var(--mbw-channels-card-video-call-offline-color,#7c7f89)}.mbw_channelsCardBigVideoCallBusyIcon__2fa3f755,.mbw_channelsCardBigVideoCallOfflineIcon__2fa3f755,.mbw_channelsCardBigVoiceCallOnlineIcon__2fa3f755{height:var(--mbw-channels-card-big-icon-height,2rem);width:var(--mbw-channels-card-big-icon-width,2rem)}.mbw_channelsCardBigVoiceCallOnlineIcon__2fa3f755{color:var(--mbw-channels-card-voice-call-online-color,#8755f4)}.mbw_channelsCardBigVoiceCallOfflineIcon__2fa3f755{color:var(--mbw-channels-card-voice-call-offline-color,#7c7f89)}.mbw_channelsCardBigVoiceCallBusyIcon__2fa3f755,.mbw_channelsCardBigVoiceCallOfflineIcon__2fa3f755{height:var(--mbw-channels-card-big-icon-height,2rem);width:var(--mbw-channels-card-big-icon-width,2rem)}.mbw_channelsCardMediumIconContainer__2fa3f755{background-color:#f7f7f7;border-radius:.625rem;display:flex;margin-left:var(--mbw-rating-medium-icon-margin-left,.438rem);padding:var(--mbw-rating-big-medium-padding,.438rem)}.mbw_channelsCardMediumIconContainer__2fa3f755:first-of-type{margin-left:0}.mbw_skeletonMedium__2fa3f755{height:calc(var(--mbw-channels-card-medium-icon-height, 1.2rem) + var(--mbw-rating-big-medium-padding, .438rem)*2);width:calc(var(--mbw-channels-card-medium-icon-width, 1.2rem) + var(--mbw-rating-big-medium-padding, .438rem)*2)}.mbw_channelsCardMediumLiveChatOnlineIcon__2fa3f755{color:var(--mbw-channels-card-live-chat-online-color,#62dd13)}.mbw_channelsCardMediumLiveChatOfflineIcon__2fa3f755,.mbw_channelsCardMediumLiveChatOnlineIcon__2fa3f755{height:var(--mbw-channels-card-medium-icon-height,1.2rem);width:var(--mbw-channels-card-medium-icon-width,1.2rem)}.mbw_channelsCardMediumLiveChatOfflineIcon__2fa3f755{color:var(--mbw-channels-card-live-chat-offline-color,#7c7f89)}.mbw_channelsCardMediumLiveChatBusyIcon__2fa3f755,.mbw_channelsCardMediumVideoCallOnlineIcon__2fa3f755{height:var(--mbw-channels-card-medium-icon-height,1.2rem);width:var(--mbw-channels-card-medium-icon-width,1.2rem)}.mbw_channelsCardMediumVideoCallOnlineIcon__2fa3f755{color:var(--mbw-channels-card-video-call-online-color,#1cb4ff)}.mbw_channelsCardMediumVideoCallOfflineIcon__2fa3f755{color:var(--mbw-channels-card-video-call-offline-color,#7c7f89)}.mbw_channelsCardMediumVideoCallBusyIcon__2fa3f755,.mbw_channelsCardMediumVideoCallOfflineIcon__2fa3f755,.mbw_channelsCardMediumVoiceCallOnlineIcon__2fa3f755{height:var(--mbw-channels-card-medium-icon-height,1.2rem);width:var(--mbw-channels-card-medium-icon-width,1.2rem)}.mbw_channelsCardMediumVoiceCallOnlineIcon__2fa3f755{color:var(--mbw-channels-card-voice-call-online-color,#8755f4)}.mbw_channelsCardMediumVoiceCallOfflineIcon__2fa3f755{color:var(--mbw-channels-card-voice-call-offline-color,#7c7f89)}.mbw_channelsCardMediumVoiceCallBusyIcon__2fa3f755,.mbw_channelsCardMediumVoiceCallOfflineIcon__2fa3f755{height:var(--mbw-channels-card-medium-icon-height,1.2rem);width:var(--mbw-channels-card-medium-icon-width,1.2rem)}.mbw_channelsCardSmallIconContainer__2fa3f755{background-color:#f7f7f7;border-radius:.625rem;display:flex;margin-left:var(--mbw-rating-small-icon-margin-left,.375rem);padding:var(--mbw-rating-big-small-padding,.313rem)}.mbw_channelsCardSmallIconContainer__2fa3f755:first-of-type{margin-left:0}.mbw_skeletonSmall__2fa3f755{height:calc(var(--mbw-channels-card-small-icon-height, 1.2rem) + var(--mbw-rating-big-small-padding, .313rem)*2);width:calc(var(--mbw-channels-card-small-icon-width, 1.2rem) + var(--mbw-rating-big-small-padding, .313rem)*2)}.mbw_channelsCardSmallLiveChatOnlineIcon__2fa3f755{color:var(--mbw-channels-card-live-chat-online-color,#62dd13)}.mbw_channelsCardSmallLiveChatOfflineIcon__2fa3f755,.mbw_channelsCardSmallLiveChatOnlineIcon__2fa3f755{height:var(--mbw-channels-card-small-icon-height,1.2rem);width:var(--mbw-channels-card-small-icon-width,1.2rem)}.mbw_channelsCardSmallLiveChatOfflineIcon__2fa3f755{color:var(--mbw-channels-card-live-chat-offline-color,#7c7f89)}.mbw_channelsCardSmallLiveChatBusyIcon__2fa3f755,.mbw_channelsCardSmallVideoCallOnlineIcon__2fa3f755{height:var(--mbw-channels-card-small-icon-height,1.2rem);width:var(--mbw-channels-card-small-icon-width,1.2rem)}.mbw_channelsCardSmallVideoCallOnlineIcon__2fa3f755{color:var(--mbw-channels-card-video-call-online-color,#1cb4ff)}.mbw_channelsCardSmallVideoCallOfflineIcon__2fa3f755{color:var(--mbw-channels-card-video-call-offline-color,#7c7f89)}.mbw_channelsCardSmallVideoCallBusyIcon__2fa3f755,.mbw_channelsCardSmallVideoCallOfflineIcon__2fa3f755,.mbw_channelsCardSmallVoiceCallOnlineIcon__2fa3f755{height:var(--mbw-channels-card-small-icon-height,1.2rem);width:var(--mbw-channels-card-small-icon-width,1.2rem)}.mbw_channelsCardSmallVoiceCallOnlineIcon__2fa3f755{color:var(--mbw-channels-card-voice-call-online-color,#8755f4)}.mbw_channelsCardSmallVoiceCallOfflineIcon__2fa3f755{color:var(--mbw-channels-card-voice-call-offline-color,#7c7f89)}.mbw_channelsCardSmallVoiceCallBusyIcon__2fa3f755,.mbw_channelsCardSmallVoiceCallOfflineIcon__2fa3f755{height:var(--mbw-channels-card-small-icon-height,1.2rem);width:var(--mbw-channels-card-small-icon-width,1.2rem)}\";\nvar modules_fbf318e2 = {\"skeleton\":\"mbw_skeleton__2fa3f755\",\"animation-bzdot9\":\"mbw_animationBzdot9__2fa3f755\",\"channels-card-container\":\"mbw_channelsCardContainer__2fa3f755\",\"channels-card-big-icon-container\":\"mbw_channelsCardBigIconContainer__2fa3f755\",\"skeleton-big\":\"mbw_skeletonBig__2fa3f755\",\"channels-card-big-live-chat-online-icon\":\"mbw_channelsCardBigLiveChatOnlineIcon__2fa3f755\",\"channels-card-big-live-chat-offline-icon\":\"mbw_channelsCardBigLiveChatOfflineIcon__2fa3f755\",\"channels-card-big-live-chat-busy-icon\":\"mbw_channelsCardBigLiveChatBusyIcon__2fa3f755\",\"channels-card-big-video-call-online-icon\":\"mbw_channelsCardBigVideoCallOnlineIcon__2fa3f755\",\"channels-card-big-video-call-offline-icon\":\"mbw_channelsCardBigVideoCallOfflineIcon__2fa3f755\",\"channels-card-big-video-call-busy-icon\":\"mbw_channelsCardBigVideoCallBusyIcon__2fa3f755\",\"channels-card-big-voice-call-online-icon\":\"mbw_channelsCardBigVoiceCallOnlineIcon__2fa3f755\",\"channels-card-big-voice-call-offline-icon\":\"mbw_channelsCardBigVoiceCallOfflineIcon__2fa3f755\",\"channels-card-big-voice-call-busy-icon\":\"mbw_channelsCardBigVoiceCallBusyIcon__2fa3f755\",\"channels-card-medium-icon-container\":\"mbw_channelsCardMediumIconContainer__2fa3f755\",\"skeleton-medium\":\"mbw_skeletonMedium__2fa3f755\",\"channels-card-medium-live-chat-online-icon\":\"mbw_channelsCardMediumLiveChatOnlineIcon__2fa3f755\",\"channels-card-medium-live-chat-offline-icon\":\"mbw_channelsCardMediumLiveChatOfflineIcon__2fa3f755\",\"channels-card-medium-live-chat-busy-icon\":\"mbw_channelsCardMediumLiveChatBusyIcon__2fa3f755\",\"channels-card-medium-video-call-online-icon\":\"mbw_channelsCardMediumVideoCallOnlineIcon__2fa3f755\",\"channels-card-medium-video-call-offline-icon\":\"mbw_channelsCardMediumVideoCallOfflineIcon__2fa3f755\",\"channels-card-medium-video-call-busy-icon\":\"mbw_channelsCardMediumVideoCallBusyIcon__2fa3f755\",\"channels-card-medium-voice-call-online-icon\":\"mbw_channelsCardMediumVoiceCallOnlineIcon__2fa3f755\",\"channels-card-medium-voice-call-offline-icon\":\"mbw_channelsCardMediumVoiceCallOfflineIcon__2fa3f755\",\"channels-card-medium-voice-call-busy-icon\":\"mbw_channelsCardMediumVoiceCallBusyIcon__2fa3f755\",\"channels-card-small-icon-container\":\"mbw_channelsCardSmallIconContainer__2fa3f755\",\"skeleton-small\":\"mbw_skeletonSmall__2fa3f755\",\"channels-card-small-live-chat-online-icon\":\"mbw_channelsCardSmallLiveChatOnlineIcon__2fa3f755\",\"channels-card-small-live-chat-offline-icon\":\"mbw_channelsCardSmallLiveChatOfflineIcon__2fa3f755\",\"channels-card-small-live-chat-busy-icon\":\"mbw_channelsCardSmallLiveChatBusyIcon__2fa3f755\",\"channels-card-small-video-call-online-icon\":\"mbw_channelsCardSmallVideoCallOnlineIcon__2fa3f755\",\"channels-card-small-video-call-offline-icon\":\"mbw_channelsCardSmallVideoCallOfflineIcon__2fa3f755\",\"channels-card-small-video-call-busy-icon\":\"mbw_channelsCardSmallVideoCallBusyIcon__2fa3f755\",\"channels-card-small-voice-call-online-icon\":\"mbw_channelsCardSmallVoiceCallOnlineIcon__2fa3f755\",\"channels-card-small-voice-call-offline-icon\":\"mbw_channelsCardSmallVoiceCallOfflineIcon__2fa3f755\",\"channels-card-small-voice-call-busy-icon\":\"mbw_channelsCardSmallVoiceCallBusyIcon__2fa3f755\"};\nn(css,{});\n\nexport { css, modules_fbf318e2 as default };\n//# sourceMappingURL=channels_card.module.scss.js.map\n","import React from 'react';\nimport Icon from '../icon/icon.js';\nimport { liveChat } from '../../organisms/my_orders_order_cell/img/live_chat.js';\nimport { videoCall } from '../../organisms/my_orders_order_cell/img/video_call.js';\nimport { voiceCall } from '../../organisms/my_orders_order_cell/img/voice_call.js';\nimport classNames from '../../classnames.js';\nimport modules_fbf318e2 from './channels_card.module.scss.js';\n\nconst ChannelsCard = ({ type, liveModes = [], loading }) => {\n    const getChannelsCardIconContainerClassName = () => classNames(modules_fbf318e2[`channels-card-${type}-icon-container`], { [modules_fbf318e2.skeleton]: loading, [modules_fbf318e2[`skeleton-${type}`]]: loading });\n    const getLiveModeIcon = (modeType, modeState, index, icon) => (React.createElement(\"div\", { className: getChannelsCardIconContainerClassName(), key: `channels-card-${type}-${modeType}-${modeState}-icon${index}` },\n        React.createElement(Icon, { className: modules_fbf318e2[`channels-card-${type}-${modeType}-${modeState}-icon`], dataTestId: \"mbw-channels-card-icon\" }, icon)));\n    const renderLiveModeIcon = (modeType, modeState, index) => {\n        let orderIcon = null;\n        switch (modeType) {\n            case \"live-chat\":\n                orderIcon = getLiveModeIcon(modeType, modeState, index, liveChat);\n                break;\n            case \"video-call\":\n                orderIcon = getLiveModeIcon(modeType, modeState, index, videoCall);\n                break;\n            case \"voice-call\":\n                orderIcon = getLiveModeIcon(modeType, modeState, index, voiceCall);\n                break;\n            default:\n                orderIcon = null;\n        }\n        return orderIcon;\n    };\n    const getCorrectModeType = (mode) => {\n        let modeType = null;\n        switch (mode) {\n            case \"chat\":\n                modeType = \"live-chat\";\n                break;\n            case \"video\":\n                modeType = \"video-call\";\n                break;\n            case \"voice\":\n                modeType = \"voice-call\";\n                break;\n            default:\n                modeType = null;\n        }\n        return modeType;\n    };\n    const renderLiveModesIcons = () => (liveModes.map((liveMode, index) => {\n        const { mode, modeState } = liveMode;\n        const correctModeType = getCorrectModeType(mode);\n        return renderLiveModeIcon(correctModeType, modeState, index);\n    }));\n    const renderChannelsCard = () => (React.createElement(\"div\", { className: modules_fbf318e2[\"channels-card-container\"] }, renderLiveModesIcons()));\n    return renderChannelsCard();\n};\n\nexport { ChannelsCard as default };\n//# sourceMappingURL=channels_card.js.map\n","import n from '../../node_modules/rollup-plugin-styles/dist/runtime/inject-css.js';\n\nvar css = \"@keyframes mbw_animationBzdot9__f62eced9{0%{background-position:-200px 0}to{background-position:calc(200px + 100%) 0}}.mbw_liveModesPricesBigContainer__f62eced9{align-items:flex-start;display:flex;flex-direction:column}.mbw_liveModesPricesMediumContainer__f62eced9{align-items:flex-start;display:flex;flex-direction:row}.mbw_liveModesPricesDefaultContainer__f62eced9,.mbw_liveModesPricesSmallContainer__f62eced9{align-items:flex-start;display:flex;flex-direction:column}@media (max-width:105rem){.mbw_liveModesPricesDefaultContainer__f62eced9{align-items:flex-start;display:flex;flex-direction:row}}@media (max-width:80rem){.mbw_liveModesPricesDefaultContainer__f62eced9{align-items:flex-start;display:flex;flex-direction:column}}.mbw_liveModesPricesFromAndCrosePriceContainer__f62eced9{align-items:center;display:flex;justify-content:center}.mbw_liveModesPricesCrosePriceContainer__f62eced9,.mbw_liveModesPricesFromContainer__f62eced9{margin-right:var(--mbw-live-modes-prices-price-margin-right,.313rem)}.mbw_liveModesPricesCrosePriceContainer__f62eced9{display:flex;text-decoration:line-through}.mbw_liveModesPricesPriceContainer__f62eced9{color:var(--mbw-live-modes-prices-price-color,var(--mbw-text-primary,#121212))}.mbw_liveModesSalesPricesPriceContainer__f62eced9{color:var(--mbw-live-modes-sales-prices-price-color,#62dd13)}\";\nvar modules_1229886e = {\"live-modes-prices-big-container\":\"mbw_liveModesPricesBigContainer__f62eced9\",\"live-modes-prices-medium-container\":\"mbw_liveModesPricesMediumContainer__f62eced9\",\"live-modes-prices-small-container\":\"mbw_liveModesPricesSmallContainer__f62eced9\",\"live-modes-prices-default-container\":\"mbw_liveModesPricesDefaultContainer__f62eced9\",\"live-modes-prices-from-and-crose-price-container\":\"mbw_liveModesPricesFromAndCrosePriceContainer__f62eced9\",\"live-modes-prices-from-container\":\"mbw_liveModesPricesFromContainer__f62eced9\",\"live-modes-prices-crose-price-container\":\"mbw_liveModesPricesCrosePriceContainer__f62eced9\",\"live-modes-prices-price-container\":\"mbw_liveModesPricesPriceContainer__f62eced9\",\"live-modes-sales-prices-price-container\":\"mbw_liveModesSalesPricesPriceContainer__f62eced9\",\"animation-bzdot9\":\"mbw_animationBzdot9__f62eced9\"};\nn(css,{});\n\nexport { css, modules_1229886e as default };\n//# sourceMappingURL=live_modes_prices.module.scss.js.map\n","import React from 'react';\nimport Title from '../title/title.js';\nimport modules_1229886e from './live_modes_prices.module.scss.js';\n\nconst LiveModesPrices = ({ type, liveModeMinPrices, loading }) => {\n    const { liveModeMinPrice, liveModeMinSalesPrice, liveModeFromText, liveModeMinPriceTitle, liveModeMinSalesPriceTitle, liveModeFromTextFontStyle, liveModeMinPriceTitleFontStyle, liveModeMinPriceCrosePriceFontStyle } = liveModeMinPrices;\n    const getFontStyleForFromText = () => {\n        if (liveModeFromTextFontStyle)\n            return liveModeFromTextFontStyle;\n        return \"content-small\";\n    };\n    const renderFromText = () => (React.createElement(\"div\", { className: modules_1229886e[\"live-modes-prices-from-container\"], \"data-testid\": \"mbw-live-modes-prices-from-container\" },\n        React.createElement(Title, { fontStyle: getFontStyleForFromText(), loading: loading }, liveModeFromText)));\n    const getFontStyleForCrosePrice = () => {\n        if (liveModeMinPriceCrosePriceFontStyle)\n            return liveModeMinPriceCrosePriceFontStyle;\n        return \"content-small\";\n    };\n    const renderCrosePrice = () => {\n        if (!liveModeMinSalesPrice)\n            return null;\n        return (React.createElement(\"div\", { className: modules_1229886e[\"live-modes-prices-crose-price-container\"], \"data-testid\": \"mbw-live-modes-prices-crose-price-container\" },\n            React.createElement(Title, { fontStyle: getFontStyleForCrosePrice(), loading: loading }, `$${liveModeMinPrice}`)));\n    };\n    const getFontStyleForPrice = () => {\n        if (liveModeMinPriceTitleFontStyle)\n            return liveModeMinPriceTitleFontStyle;\n        return \"content-small\";\n    };\n    const renderPrice = () => {\n        let priceValue = liveModeMinPriceTitle;\n        let priceClassName = modules_1229886e[\"live-modes-prices-price-container\"];\n        if (liveModeMinSalesPrice) {\n            priceValue = liveModeMinSalesPriceTitle;\n            priceClassName = modules_1229886e[\"live-modes-sales-prices-price-container\"];\n        }\n        return (React.createElement(\"div\", { className: priceClassName, \"data-testid\": \"mbw-live-modes-prices-price-container\" },\n            React.createElement(Title, { fontStyle: getFontStyleForPrice(), bold: true, loading: loading }, priceValue)));\n    };\n    const renderLiveModesPrices = () => (React.createElement(\"div\", { className: modules_1229886e[`live-modes-prices-${type}-container`], \"data-testid\": \"mbw-live-modes-prices-container\" },\n        React.createElement(\"div\", { className: modules_1229886e[\"live-modes-prices-from-and-crose-price-container\"] },\n            renderFromText(),\n            renderCrosePrice()),\n        React.createElement(\"div\", null, renderPrice())));\n    return renderLiveModesPrices();\n};\n\nexport { LiveModesPrices as default };\n//# sourceMappingURL=live_modes_prices.js.map\n","import n from '../../node_modules/rollup-plugin-styles/dist/runtime/inject-css.js';\n\nvar css = \".mbw_readingSinceAndCountContainer__9c284ef7{align-items:center;display:flex;justify-content:flex-start}.mbw_readingSinceAndCountReadingsCountContainer__9c284ef7{color:var(--mbw-text-primary,#121212)}.mbw_readingSinceAndCountYearJoinedContainer__9c284ef7{color:var(--mbw-text-secondary,#636570);margin-left:.313rem}\";\nvar modules_4204a613 = {\"reading-since-and-count-container\":\"mbw_readingSinceAndCountContainer__9c284ef7\",\"reading-since-and-count-readings-count-container\":\"mbw_readingSinceAndCountReadingsCountContainer__9c284ef7\",\"reading-since-and-count-year-joined-container\":\"mbw_readingSinceAndCountYearJoinedContainer__9c284ef7\"};\nn(css,{});\n\nexport { css, modules_4204a613 as default };\n//# sourceMappingURL=reading_since_and_count.module.scss.js.map\n","import React from 'react';\nimport Title from '../title/title.js';\nimport modules_4204a613 from './reading_since_and_count.module.scss.js';\n\nconst ReadingSinceAndCount = ({ type, readingData, loading }) => {\n    const { readingsCount, yearJoined } = readingData;\n    const getFontStyle = () => {\n        if (type === \"big\")\n            return \"heading-h5\";\n        if (type === \"medium\")\n            return \"heading-h4\";\n        if (type === \"default\")\n            return \"content-default\";\n        if (type === \"small\")\n            return \"content-small\";\n        return \"caption-1\";\n    };\n    const renderReadingSinceAndCount = () => (React.createElement(\"div\", { className: modules_4204a613[\"reading-since-and-count-container\"] },\n        React.createElement(\"div\", { className: modules_4204a613[\"reading-since-and-count-readings-count-container\"], \"data-testid\": \"mbw-reading-since-and-count-readings-count-container\" },\n            React.createElement(Title, { fontStyle: getFontStyle(), bold: true, loading: loading }, readingsCount)),\n        React.createElement(\"div\", { className: modules_4204a613[\"reading-since-and-count-year-joined-container\"], \"data-testid\": \"mbw-reading-since-and-count-year-joined-container\" },\n            React.createElement(Title, { fontStyle: getFontStyle(), bold: true, loading: loading, ellipsis: true }, yearJoined))));\n    return renderReadingSinceAndCount();\n};\n\nexport { ReadingSinceAndCount as default };\n//# sourceMappingURL=reading_since_and_count.js.map\n","import React from 'react';\nimport Title from '../../atoms/title/title.js';\nimport Avatar from '../../molecules/avatar/avatar.js';\nimport ChannelsCard from '../../atoms/channels_card/channels_card.js';\nimport LiveModesPrices from '../../atoms/live_modes_prices/live_modes_prices.js';\nimport ReadingSinceAndCount from '../../atoms/reading_since_and_count/reading_since_and_count.js';\nimport PlayButton from '../../atoms/play_button/play_button.js';\nimport Rating from '../../atoms/rating/rating.js';\n\nconst StaffPickSmall = ({ imgSrc, rating, playButtonOnClick, advisorName, advisorServiceName, liveModes = [], liveModeMinPrices, readingData, staffPickText, loading }) => {\n    const renderStaffPickSmallAvatar = () => (React.createElement(Avatar, { type: 'rectangle', imgSrc: imgSrc, topOverlayContainer: React.createElement(\"div\", { className: \"mbw-staff-pick-rating-and-play-button-container\" },\n            React.createElement(Rating, { type: \"default\", rating: rating, loading: loading }),\n            React.createElement(PlayButton, { type: 'default', onClick: playButtonOnClick, loading: loading })), bottomOverlayContainer: React.createElement(\"div\", { className: \"mbw-staff-pick-advisor-name-and-service-container\" },\n            React.createElement(\"div\", { className: \"mbw-staff-pick-advisor-name-container\", \"data-testid\": \"mbw-staff-pick-small-advisor-name-container\" },\n                React.createElement(Title, { fontStyle: \"heading-h4\", ellipsis: true, bold: true, loading: loading }, advisorName)),\n            React.createElement(\"div\", { className: \"mbw-staff-pick-advisor-service-name-container\", \"data-testid\": \"mbw-staff-pick-small-service-name-container\" },\n                React.createElement(Title, { fontStyle: \"heading-h6\", ellipsis: true, loading: loading }, advisorServiceName))), hideBorders: { leftBottom: true, rightBottom: true } }));\n    const renderReadingSinceAndCount = () => (React.createElement(\"div\", { className: \"mbw-staff-pick-small-reading-since-and-count-container\" },\n        React.createElement(ReadingSinceAndCount, { type: \"default\", readingData: readingData, loading: loading })));\n    const renderStaffPickText = () => (React.createElement(\"div\", { className: \"mbw-staff-pick-small-text-container\" },\n        React.createElement(Title, { fontStyle: \"content-medium\", ellipsis: true, maxRows: 6, loading: loading }, staffPickText)));\n    const renderChannelsCardAndLiveModesPrices = () => (React.createElement(\"div\", { className: \"mbw-staff-pick-small-channels-card-and-live-modes-prices-container\" },\n        React.createElement(\"div\", { className: \"mbw-staff-pick-small-channels-card-container\" },\n            React.createElement(ChannelsCard, { type: \"small\", liveModes: liveModes, loading: loading })),\n        React.createElement(\"div\", { className: \"mbw-staff-pick-small-live-modes-prices-container\" },\n            React.createElement(LiveModesPrices, { type: \"small\", liveModeMinPrices: {\n                    ...liveModeMinPrices,\n                    liveModeFromTextFontStyle: \"content-default\",\n                    liveModeMinPriceTitleFontStyle: \"content-default\",\n                    liveModeMinPriceCrosePriceFontStyle: \"content-default\"\n                }, loading: loading }))));\n    const renderStaffPickSmallContent = () => (React.createElement(\"div\", { className: \"mbw-staff-pick-small-content-container\" },\n        renderReadingSinceAndCount(),\n        renderStaffPickText(),\n        renderChannelsCardAndLiveModesPrices()));\n    const renderStaffPickSmall = () => (React.createElement(\"div\", { className: \"mbw-staff-pick-small-container\" },\n        renderStaffPickSmallAvatar(),\n        renderStaffPickSmallContent()));\n    return renderStaffPickSmall();\n};\n\nexport { StaffPickSmall as default };\n//# sourceMappingURL=staff_pick_small.js.map\n","import React from 'react';\nimport Title from '../../atoms/title/title.js';\nimport Avatar from '../../molecules/avatar/avatar.js';\nimport ChannelsCard from '../../atoms/channels_card/channels_card.js';\nimport LiveModesPrices from '../../atoms/live_modes_prices/live_modes_prices.js';\nimport ReadingSinceAndCount from '../../atoms/reading_since_and_count/reading_since_and_count.js';\nimport Rating from '../../atoms/rating/rating.js';\n\nconst StaffPickBig = ({ imgSrc, rating, advisorName, advisorServiceName, liveModes = [], liveModeMinPrices, readingData, staffPickText, loading }) => {\n    const renderStaffPickSmallAvatar = () => (React.createElement(\"div\", { className: \"mbw-staff-pick-big-advisor-avatar-container\" },\n        React.createElement(Avatar, { type: 'rectangle', imgSrc: imgSrc, hideBorders: { rightTop: true, rightBottom: true } })));\n    const renderAdvisorName = () => (React.createElement(\"div\", { className: \"mbw-staff-pick-big-advisor-name-and-service-container\" },\n        React.createElement(\"div\", { className: \"mbw-staff-pick-big-advisor-name-container\", \"data-testid\": \"mbw-staff-pick-big-advisor-name-container\" },\n            React.createElement(Title, { fontStyle: \"heading-h2\", bold: true, ellipsis: true, loading: loading }, advisorName)),\n        React.createElement(\"div\", { className: \"mbw-staff-pick-big-advisor-service-name-container\", \"data-testid\": \"mbw-staff-pick-big-advisor-service-name-container\" },\n            React.createElement(Title, { fontStyle: \"heading-h5\", ellipsis: true, loading: loading }, advisorServiceName))));\n    const renderRating = () => (React.createElement(Rating, { type: \"default\", rating: rating, withBorder: true, loading: loading }));\n    const renderAdvisorNameAndRating = () => (React.createElement(\"div\", { className: \"mbw-staff-pick-big-advisor-name-and-rating-container\" },\n        renderAdvisorName(),\n        renderRating()));\n    const renderStaffPickText = () => (React.createElement(\"div\", { className: \"mbw-staff-pick-big-text-container\" },\n        React.createElement(Title, { fontStyle: \"heading-h5\", ellipsis: true, maxRows: 6, loading: loading }, staffPickText)));\n    const renderChannelsCardAndLiveModesPrices = () => (React.createElement(\"div\", { className: \"mbw-staff-pick-big-channels-card-and-live-modes-prices-container\" },\n        React.createElement(\"div\", { className: \"mbw-staff-pick-big-channels-card-container\" },\n            React.createElement(ChannelsCard, { type: \"big\", liveModes: liveModes, loading: loading })),\n        React.createElement(\"div\", { className: \"mbw-staff-pick-big-live-modes-prices-container\" },\n            React.createElement(LiveModesPrices, { type: \"big\", liveModeMinPrices: {\n                    ...liveModeMinPrices,\n                    liveModeFromTextFontStyle: \"content-default\",\n                    liveModeMinPriceTitleFontStyle: \"heading-h4\",\n                    liveModeMinPriceCrosePriceFontStyle: \"content-default\"\n                }, loading: loading }))));\n    const renderReadingSinceAndCount = () => (React.createElement(\"div\", { className: \"mbw-staff-pick-big-reading-since-and-count-container\" },\n        React.createElement(ReadingSinceAndCount, { type: \"medium\", readingData: readingData, loading: loading })));\n    const renderChannelsCardAndReadingSince = () => (React.createElement(\"div\", { className: \"mbw-staff-pick-big-channels-card-and-reading-since-container\" },\n        renderChannelsCardAndLiveModesPrices(),\n        renderReadingSinceAndCount()));\n    const renderStaffPickSmallContent = () => (React.createElement(\"div\", { className: \"mbw-staff-pick-big-content-container\" },\n        React.createElement(\"div\", { className: \"mbw-staff-pick-big-advisor-name-and-staff-pick-text-container\" },\n            renderAdvisorNameAndRating(),\n            renderStaffPickText()),\n        renderChannelsCardAndReadingSince()));\n    const renderStaffPickBig = () => (React.createElement(\"div\", { className: \"mbw-staff-pick-big-container\" },\n        renderStaffPickSmallAvatar(),\n        renderStaffPickSmallContent()));\n    return renderStaffPickBig();\n};\n\nexport { StaffPickBig as default };\n//# sourceMappingURL=staff_pick_big.js.map\n","import React from 'react';\nimport StaffPickSmall from './staff_pick_small.js';\nimport StaffPickBig from './staff_pick_big.js';\n\nconst StaffPick = ({ statusIndicatorStatus, rating, playButtonOnClick, imgSrc, advisorName = \"Advisor Name\", advisorServiceName = \"Advisor Service Name\", liveModes = [], liveModeMinPrices, readingData, staffPickText, loading }) => {\n    const renderStaffPickSmall = () => (React.createElement(StaffPickSmall, { statusIndicatorStatus: statusIndicatorStatus, rating: rating, playButtonOnClick: playButtonOnClick, imgSrc: imgSrc, advisorName: advisorName, advisorServiceName: advisorServiceName, liveModes: liveModes, liveModeMinPrices: liveModeMinPrices, readingData: readingData, staffPickText: staffPickText, loading: loading }));\n    const renderStaffPickBig = () => (React.createElement(StaffPickBig, { statusIndicatorStatus: statusIndicatorStatus, rating: rating, playButtonOnClick: playButtonOnClick, imgSrc: imgSrc, advisorName: advisorName, advisorServiceName: advisorServiceName, liveModes: liveModes, liveModeMinPrices: liveModeMinPrices, readingData: readingData, staffPickText: staffPickText, loading: loading }));\n    const renderStaffPick = () => (React.createElement(\"div\", { className: \"mbw-staff-pick-holder\", \"data-testid\": \"mbw-staff-pick-holder\" },\n        renderStaffPickSmall(),\n        renderStaffPickBig()));\n    return renderStaffPick();\n};\n\nexport { StaffPick as default };\n//# sourceMappingURL=staff_pick.js.map\n","import React from 'react';\n\nconst rightArrowIcon = React.createElement(\"svg\", { xmlns: \"http://www.w3.org/2000/svg\", width: \"20\", height: \"20\", viewBox: \"0 0 20 20\", fill: \"none\" },\n    React.createElement(\"path\", { d: \"M7.5 15.8334L12.5 10L7.5 4.16671\", stroke: \"#121212\", strokeWidth: \"1.5\", strokeLinecap: \"round\", strokeLinejoin: \"round\" }));\n\nexport { rightArrowIcon };\n//# sourceMappingURL=right_arrow_icon.js.map\n","import React from 'react';\n\nconst hourglassIcon = React.createElement(\"svg\", { xmlns: \"http://www.w3.org/2000/svg\", width: \"20\", height: \"20\", viewBox: \"0 0 20 20\", fill: \"none\" },\n    React.createElement(\"path\", { d: \"M10.0013 10.0001L7.53655 12.4409C5.10114 14.8526 3.88344 16.0584 4.22435 17.0988C4.25365 17.1883 4.29004 17.2753 4.33318 17.359C4.83502 18.3334 6.55711 18.3334 10.0013 18.3334C13.4455 18.3334 15.1676 18.3334 15.6694 17.359C15.7126 17.2753 15.749 17.1883 15.7783 17.0988C16.1192 16.0584 14.9015 14.8526 12.466 12.4409L10.0013 10.0001ZM10.0013 10.0001L12.4661 7.5593C14.9015 5.14758 16.1192 3.94172 15.7783 2.90132C15.749 2.81189 15.7126 2.72489 15.6694 2.64113C15.1676 1.66675 13.4455 1.66675 10.0013 1.66675C6.55711 1.66675 4.83502 1.66675 4.33318 2.64113C4.29004 2.72489 4.25365 2.81189 4.22435 2.90132C3.88344 3.94172 5.10115 5.14758 7.53655 7.55931L10.0013 10.0001Z\", stroke: \"#7C7F89\", strokeWidth: \"1.5\" }),\n    React.createElement(\"path\", { d: \"M8.33203 4.58325H11.6654\", stroke: \"#7C7F89\", strokeWidth: \"1.5\", strokeLinecap: \"round\" }),\n    React.createElement(\"path\", { d: \"M8.33203 15.4167H11.6654\", stroke: \"#7C7F89\", strokeWidth: \"1.5\", strokeLinecap: \"round\" }));\n\nexport { hourglassIcon };\n//# sourceMappingURL=hourglass_icon.js.map\n","import React from 'react';\n\nconst refreshIcon = React.createElement(\"svg\", { xmlns: \"http://www.w3.org/2000/svg\", width: \"20\", height: \"20\", viewBox: \"0 0 20 20\", fill: \"none\" },\n    React.createElement(\"path\", { d: \"M3.06781 9.44444H2.31781H3.06781ZM3.06781 10.8333L2.53957 11.3657C2.83198 11.6559 3.30365 11.6559 3.59605 11.3657L3.06781 10.8333ZM4.9959 9.97685C5.28994 9.68511 5.2918 9.21024 5.00006 8.9162C4.70832 8.62216 4.23345 8.6203 3.93941 8.91204L4.9959 9.97685ZM2.19621 8.91204C1.90217 8.6203 1.4273 8.62216 1.13556 8.9162C0.843819 9.21024 0.845684 9.68511 1.13973 9.97685L2.19621 8.91204ZM15.4078 6.22612C15.6247 6.57899 16.0866 6.68918 16.4395 6.47225C16.7924 6.25532 16.9026 5.79341 16.6856 5.44054L15.4078 6.22612ZM10.067 1.75C5.79282 1.75 2.31781 5.18938 2.31781 9.44444H3.81781C3.81781 6.02889 6.61011 3.25 10.067 3.25V1.75ZM2.31781 9.44444L2.31781 10.8333H3.81781L3.81781 9.44444L2.31781 9.44444ZM3.59605 11.3657L4.9959 9.97685L3.93941 8.91204L2.53957 10.3009L3.59605 11.3657ZM3.59605 10.3009L2.19621 8.91204L1.13973 9.97685L2.53957 11.3657L3.59605 10.3009ZM16.6856 5.44054C15.325 3.22738 12.869 1.75 10.067 1.75V3.25C12.3301 3.25 14.3107 4.44155 15.4078 6.22612L16.6856 5.44054Z\", fill: \"#FF5A5A\" }),\n    React.createElement(\"path\", { d: \"M16.9269 9.16699L17.4542 8.63358C17.162 8.3448 16.6919 8.3448 16.3997 8.63358L16.9269 9.16699ZM14.9945 10.0225C14.6999 10.3136 14.6972 10.7885 14.9883 11.0831C15.2795 11.3777 15.7544 11.3805 16.049 11.0893L14.9945 10.0225ZM17.8049 11.0893C18.0995 11.3805 18.5744 11.3777 18.8656 11.0831C19.1567 10.7885 19.154 10.3136 18.8594 10.0225L17.8049 11.0893ZM4.53669 13.7731C4.31915 13.4206 3.85705 13.3112 3.50456 13.5287C3.15206 13.7463 3.04266 14.2084 3.26019 14.5609L4.53669 13.7731ZM9.90097 18.2503C14.1872 18.2503 17.6769 14.8136 17.6769 10.5559H16.1769C16.1769 13.9687 13.3754 16.7503 9.90097 16.7503V18.2503ZM17.6769 10.5559V9.16699H16.1769V10.5559H17.6769ZM16.3997 8.63358L14.9945 10.0225L16.049 11.0893L17.4542 9.70041L16.3997 8.63358ZM16.3997 9.70041L17.8049 11.0893L18.8594 10.0225L17.4542 8.63358L16.3997 9.70041ZM3.26019 14.5609C4.62609 16.7742 7.09071 18.2503 9.90097 18.2503V16.7503C7.62691 16.7503 5.63788 15.5575 4.53669 13.7731L3.26019 14.5609Z\", fill: \"#FF5A5A\" }));\n\nexport { refreshIcon };\n//# sourceMappingURL=refresh_icon.js.map\n","import React from 'react';\n\nconst checkmarkIcon = React.createElement(\"svg\", { xmlns: \"http://www.w3.org/2000/svg\", width: \"20\", height: \"20\", viewBox: \"0 0 20 20\", fill: \"none\" },\n    React.createElement(\"path\", { d: \"M3.33203 11.5L7.14155 15.8333L16.6654 5\", stroke: \"#62DD13\", strokeWidth: \"1.5\", strokeLinecap: \"round\", strokeLinejoin: \"round\" }));\n\nexport { checkmarkIcon };\n//# sourceMappingURL=checkmark_icon.js.map\n","import React from 'react';\nimport Icon from '../../atoms/icon/icon.js';\nimport Title from '../../atoms/title/title.js';\nimport { rightArrowIcon } from './img/right_arrow_icon.js';\nimport { hourglassIcon } from './img/hourglass_icon.js';\nimport { refreshIcon } from './img/refresh_icon.js';\nimport { checkmarkIcon } from './img/checkmark_icon.js';\n\nconst MethodCell = ({ type, img, text, subText }) => {\n    const renderIcon = () => {\n        const className = `mbw-method-cell-${type}-icon`;\n        if (img && typeof img === \"string\") {\n            return React.createElement(\"img\", { src: img, className: className });\n        }\n        return (React.createElement(Icon, { className: className, dataTestId: \"mbw-method-cell-icon\" }, img));\n    };\n    const renderText = () => (React.createElement(\"div\", { className: \"mbw-method-cell-text-container\" },\n        React.createElement(\"div\", { className: `mbw-method-cell-${type}-text`, \"data-testid\": \"mbw-method-cell-text\" },\n            React.createElement(Title, { fontStyle: \"content-default\", bold: true }, text)),\n        React.createElement(\"div\", { className: \"mbw-method-cell-sub-text\", \"data-testid\": \"mbw-method-cell-sub-text\" },\n            React.createElement(Title, { fontStyle: \"content-small\" }, subText))));\n    const renderIconAndText = () => (React.createElement(\"div\", { className: \"mbw-method-cell-icon-and-text-container\" },\n        renderIcon(),\n        renderText()));\n    const getRightIcon = () => {\n        let rightIcon = null;\n        switch (type) {\n            case \"default\":\n            case \"highlighted\":\n                rightIcon = rightArrowIcon;\n                break;\n            case \"disabled\":\n                rightIcon = hourglassIcon;\n                break;\n            case \"error\":\n                rightIcon = refreshIcon;\n                break;\n            case \"success\":\n                rightIcon = checkmarkIcon;\n                break;\n            default:\n                rightIcon = null;\n        }\n        return rightIcon;\n    };\n    const renderRightIcon = () => (React.createElement(Icon, { className: `mbw-method-cell-${type}-right-icon`, dataTestId: \"mbw-method-cell-right-icon\" }, getRightIcon()));\n    const renderMethodCellContent = () => (React.createElement(\"div\", { className: 'mbw-method-cell-content-container' },\n        renderIconAndText(),\n        renderRightIcon()));\n    const renderMethodCell = () => (React.createElement(\"div\", { className: `mbw-method-cell-${type}-container`, \"data-testid\": \"mbw-method-cell-container\" }, renderMethodCellContent()));\n    return renderMethodCell();\n};\n\nexport { MethodCell as default };\n//# sourceMappingURL=method_cell.js.map\n","import React from 'react';\n\nconst deleteIcon = React.createElement(\"svg\", { xmlns: \"http://www.w3.org/2000/svg\", width: \"20\", height: \"20\", viewBox: \"0 0 20 20\", fill: \"none\" },\n    React.createElement(\"path\", { d: \"M17.0828 5H2.91602\", stroke: \"#121212\", strokeWidth: \"1.5\", strokeLinecap: \"round\" }),\n    React.createElement(\"path\", { d: \"M15.6936 7.08301L15.3103 12.8323C15.1628 15.0447 15.0891 16.1509 14.3682 16.8253C13.6474 17.4997 12.5387 17.4997 10.3214 17.4997H9.6769C7.45956 17.4997 6.3509 17.4997 5.63005 16.8253C4.90921 16.1509 4.83547 15.0447 4.68797 12.8323L4.30469 7.08301\", stroke: \"#121212\", strokeWidth: \"1.5\", strokeLinecap: \"round\" }),\n    React.createElement(\"path\", { d: \"M7.91602 9.16699L8.33268 13.3337\", stroke: \"#121212\", strokeWidth: \"1.5\", strokeLinecap: \"round\" }),\n    React.createElement(\"path\", { d: \"M12.0827 9.16699L11.666 13.3337\", stroke: \"#121212\", strokeWidth: \"1.5\", strokeLinecap: \"round\" }),\n    React.createElement(\"path\", { d: \"M5.41602 5C5.46258 5 5.48587 5 5.50697 4.99947C6.19318 4.98208 6.79854 4.54576 7.03203 3.90027C7.03921 3.88041 7.04657 3.85832 7.0613 3.81415L7.14221 3.57143C7.21127 3.36423 7.24581 3.26063 7.29161 3.17267C7.47436 2.82173 7.81247 2.57803 8.20319 2.51564C8.30112 2.5 8.41033 2.5 8.62873 2.5H11.37C11.5884 2.5 11.6976 2.5 11.7955 2.51564C12.1862 2.57803 12.5243 2.82173 12.7071 3.17267C12.7529 3.26063 12.7874 3.36423 12.8565 3.57143L12.9374 3.81415C12.9521 3.85826 12.9595 3.88042 12.9667 3.90027C13.2002 4.54576 13.8055 4.98208 14.4917 4.99947C14.5128 5 14.5361 5 14.5827 5\", stroke: \"#121212\", strokeWidth: \"1.5\" }));\n\nexport { deleteIcon };\n//# sourceMappingURL=delete_icon.js.map\n","import React from 'react';\nimport Icon from '../../atoms/icon/icon.js';\nimport { deleteIcon } from './img/delete_icon.js';\nimport Title from '../../atoms/title/title.js';\nimport Button from '../button/button.js';\n\nconst PaymentMethodDetails = ({ type, icon, kind, isDefault = false, onRemove, sourceTypeTitle, defaultTitle, last4, onMakeDefault, onlyPaymentSource = false, fullName, paypalBillingAgreementEmail, expiredTitle, deleteButtonText }) => {\n    const defaultCardIcon = \"data:image/svg+xml;charset=UTF-8,%3csvg width='24' height='16' viewBox='0 0 24 16' fill='none' xmlns='http://www.w3.org/2000/svg'%3e%3cpath fillRule='evenodd' clipRule='evenodd' d='M16.8302 8.24144H20.6047C20.7967 8.2421 20.9809 8.31726 21.1167 8.4505C21.2525 8.58374 21.3291 8.76442 21.3298 8.95287V11.193C21.3284 11.3813 21.2517 11.5615 21.1159 11.6946C20.9802 11.8278 20.7966 11.9031 20.6047 11.9044H16.8302C16.638 11.9038 16.454 11.8286 16.3182 11.6954C16.1822 11.5621 16.1056 11.3815 16.1049 11.193V8.95285C16.1056 8.76442 16.1822 8.58373 16.3182 8.45049C16.454 8.31725 16.638 8.2421 16.8302 8.24144ZM2.39074 10.5042H7.38754V11.8946L2.39074 11.8945V10.5042ZM2.39074 8.24144H12.3843V9.63182H2.39074V8.24144ZM0 4.32685H24V0.980531C23.9993 0.720746 23.8938 0.471739 23.7066 0.288035C23.5193 0.104204 23.2655 0.000655964 23.0006 0H0.999476C0.734565 0.00065704 0.480768 0.104204 0.293534 0.288035C0.106303 0.471735 0.000764571 0.720736 9.6e-05 0.980531L0 4.32685ZM24 5.71723H0V15.0195C0.000669634 15.2794 0.106207 15.5284 0.293438 15.7121C0.480669 15.8958 0.734455 15.9993 0.999381 16H23.0005C23.2654 15.9993 23.5192 15.8958 23.7065 15.7121C23.8937 15.5284 23.9992 15.2794 23.9999 15.0195L24 5.71723Z' fill='%23BCBCBC'/%3e%3c/svg%3e\";\n    const renderSourceIcon = () => React.createElement(\"img\", { src: icon || defaultCardIcon, className: \"mbw-payment-method-details-source-icon\" });\n    const renderDeleteIcon = () => {\n        if (isDefault && !onlyPaymentSource)\n            return null;\n        return (React.createElement(\"button\", { type: \"button\", className: `mbw-payment-method-details-delete-icon-container-${type}`, onClick: onRemove, \"data-testid\": \"mbw-payment-method-details-delete\" },\n            React.createElement(Icon, { className: \"mbw-payment-method-details-delete-icon\" }, deleteIcon)));\n    };\n    const renderDetails = () => {\n        if (kind === \"cc\") {\n            return (React.createElement(\"div\", { className: \"mbw-payment-method-details-cc-container\" },\n                React.createElement(\"div\", { \"data-testid\": \"mbw-payment-method-details-last4\" },\n                    React.createElement(Title, { fontStyle: \"heading-h4\", bold: true }, last4)),\n                React.createElement(\"div\", { className: \"mbw-payment-method-details-cc\" },\n                    React.createElement(\"div\", { \"data-testid\": \"mbw-payment-method-details-name\", className: \"mbw-payment-method-details-name\" },\n                        React.createElement(Title, { fontStyle: \"content-small\", bold: true }, fullName)),\n                    React.createElement(\"div\", { \"data-testid\": \"mbw-payment-method-details-exp-date\", className: \"mbw-payment-method-details-exp-date\" },\n                        React.createElement(Title, { fontStyle: \"content-small\", bold: true, \"data-testid\": \"mbw-payment-method-details-exp-date\" }, expiredTitle)))));\n        }\n        return (React.createElement(\"div\", { className: \"mbw-payment-method-details-pp\", \"data-testid\": \"mbw-payment-method-details-pp\" },\n            React.createElement(Title, { fontStyle: \"heading-h4\", bold: true }, paypalBillingAgreementEmail || \"PayPal\")));\n    };\n    const renderDefaultSection = () => {\n        if (isDefault) {\n            return (React.createElement(\"div\", { className: \"mbw-payment-method-details-default\", \"data-testid\": \"mbw-payment-method-details-default-text\" },\n                React.createElement(Title, { fontStyle: \"content-small\", bold: true }, defaultTitle)));\n        }\n        return (React.createElement(\"button\", { type: \"button\", className: \"mbw-payment-method-details-set-default\", onClick: onMakeDefault, \"data-testid\": \"mbw-payment-method-details-header\" },\n            React.createElement(\"div\", { className: `mbw-payment-method-details-set-default-text-${type}`, \"data-testid\": \"mbw-payment-method-details-default-text\" },\n                React.createElement(Title, { fontStyle: \"content-small\", bold: true }, defaultTitle))));\n    };\n    const renderSourceDetailsHeader = () => (React.createElement(\"div\", { className: \"mbw-payment-method-details-header\" },\n        React.createElement(\"div\", { \"data-testid\": \"mbw-payment-method-details-source-name\", className: \"mbw-payment-method-details-source-name\" },\n            renderSourceIcon(),\n            React.createElement(Title, { fontStyle: \"heading-h5\", bold: true }, sourceTypeTitle || \"Paypal\")),\n        renderDeleteIcon()));\n    const renderBottomButtons = () => (React.createElement(\"div\", { \"data-testid\": \"mbw-payment-method-details-buttons-container\", className: `mbw-payment-method-details-buttons-container-${type}` },\n        React.createElement(\"div\", { \"data-testid\": \"mbw-payment-method-details-delete-button\", className: \"mbw-payment-method-details-bottom-button\" },\n            React.createElement(Button, { type: \"secondary\", title: deleteButtonText, onClick: () => onRemove, icon: deleteIcon })),\n        isDefault && !onlyPaymentSource ? null : React.createElement(\"div\", { \"data-testid\": \"mbw-payment-method-details-default-button\", className: \"mbw-payment-method-details-bottom-button\" },\n            React.createElement(Button, { type: \"primary\", title: defaultTitle, onClick: () => onMakeDefault }))));\n    const renderPaymentSourceContainer = () => (React.createElement(\"div\", { \"data-testid\": \"mbw-payment-method-details-container\", className: `mbw-payment-method-details-container-${type}` },\n        React.createElement(\"div\", { \"data-testid\": \"mbw-payment-method-details\", className: `mbw-payment-method-details-${type}` },\n            renderSourceDetailsHeader(),\n            renderDefaultSection(),\n            renderDetails()),\n        renderBottomButtons()));\n    return renderPaymentSourceContainer();\n};\n\nexport { PaymentMethodDetails as default };\n//# sourceMappingURL=payment_method_details.js.map\n","import React from 'react';\n\nconst ChatIcon = () => {\n    return (React.createElement(\"svg\", { width: \"50\", height: \"50\", viewBox: \"0 0 50 50\", fill: \"none\", xmlns: \"http://www.w3.org/2000/svg\" },\n        React.createElement(\"path\", { fillRule: \"evenodd\", clipRule: \"evenodd\", d: \"M45.8327 25C45.8327 36.506 36.5053 45.8334 24.9993 45.8334C21.6667 45.8334 18.5168 45.0508 15.7234 43.6595C14.981 43.2897 14.1325 43.1667 13.3314 43.381L8.69382 44.6219C6.68063 45.1605 4.83884 43.3187 5.3775 41.3055L6.61835 36.668C6.8327 35.8668 6.70963 35.0183 6.33989 34.276C4.94855 31.4826 4.16602 28.3327 4.16602 25C4.16602 13.4941 13.4934 4.16669 24.9993 4.16669C36.5053 4.16669 45.8327 13.4941 45.8327 25ZM16.666 27.0834C15.5154 27.0834 14.5827 26.1506 14.5827 25C14.5827 23.8494 15.5154 22.9167 16.666 22.9167C17.8166 22.9167 18.7493 23.8494 18.7493 25C18.7493 26.1506 17.8166 27.0834 16.666 27.0834ZM22.916 25C22.916 26.1506 23.8488 27.0834 24.9993 27.0834C26.1499 27.0834 27.0827 26.1506 27.0827 25C27.0827 23.8494 26.1499 22.9167 24.9993 22.9167C23.8488 22.9167 22.916 23.8494 22.916 25ZM31.2493 25C31.2493 26.1506 32.1821 27.0834 33.3327 27.0834C34.4833 27.0834 35.416 26.1506 35.416 25C35.416 23.8494 34.4833 22.9167 33.3327 22.9167C32.1821 22.9167 31.2493 23.8494 31.2493 25Z\", fill: \"#62DD13\" })));\n};\n\nexport { ChatIcon as default };\n//# sourceMappingURL=chatIcon.js.map\n","import React from 'react';\n\nconst VoiceIcon = () => {\n    return (React.createElement(\"svg\", { xmlns: \"http://www.w3.org/2000/svg\", width: \"51\", height: \"50\", viewBox: \"0 0 51 50\", fill: \"none\" },\n        React.createElement(\"path\", { d: \"M18.1506 11.0015L19.6717 13.7271C21.0445 16.1868 20.4934 19.4135 18.3313 21.5756C18.3313 21.5756 18.3313 21.5756 18.3313 21.5756C18.3312 21.5757 15.709 24.1982 20.4637 28.953C25.2178 33.707 27.8403 31.0862 27.8411 31.0853C27.8411 31.0853 27.8411 31.0853 27.8411 31.0853C30.0032 28.9233 33.2299 28.3722 35.6896 29.745L38.4152 31.2661C42.1294 33.3389 42.5681 38.5477 39.3034 41.8125C37.3416 43.7742 34.9384 45.3006 32.2818 45.4013C27.8096 45.5709 20.2147 44.439 12.5962 36.8205C4.97764 29.202 3.84582 21.6071 4.01536 17.1349C4.11607 14.4783 5.64251 12.0751 7.60423 10.1133C10.869 6.8486 16.0778 7.28724 18.1506 11.0015Z\", fill: \"#8755F4\" }),\n        React.createElement(\"path\", { d: \"M24.8549 3.18605C25.0147 2.19967 25.9474 1.53055 26.934 1.69024C26.9951 1.70193 27.1916 1.73865 27.2946 1.76157C27.5005 1.80741 27.7877 1.87799 28.1458 1.98227C28.8619 2.1908 29.8624 2.53432 31.0631 3.08466C33.4672 4.1865 36.6664 6.11397 39.9862 9.43285C43.3061 12.7517 45.2341 15.95 46.3362 18.3534C46.8867 19.5538 47.2304 20.554 47.4389 21.2699C47.5433 21.6279 47.6139 21.915 47.6597 22.1209C47.6826 22.2238 47.6994 22.3064 47.7111 22.3675L47.725 22.4428C47.8847 23.4291 47.2215 24.4001 46.2348 24.5598C45.251 24.7191 44.3241 24.0532 44.1605 23.0714C44.1554 23.0451 44.1416 22.9742 44.1267 22.9075C44.097 22.7739 44.0455 22.562 43.9638 22.2818C43.8005 21.7213 43.5169 20.8883 43.046 19.8614C42.1053 17.8102 40.4138 14.9776 37.4268 11.9915C34.4398 9.00538 31.6065 7.31435 29.5547 6.37395C28.5275 5.90317 27.6942 5.61964 27.1336 5.45639C26.8533 5.37478 26.501 5.29394 26.3674 5.26418C25.3854 5.10057 24.6956 4.16961 24.8549 3.18605Z\", fill: \"#8755F4\" }),\n        React.createElement(\"path\", { fillRule: \"evenodd\", clipRule: \"evenodd\", d: \"M25.4009 11.5073C25.6755 10.5465 26.6771 9.99019 27.6382 10.2647L27.141 12.0043C27.6382 10.2647 27.6382 10.2647 27.6382 10.2647L27.6417 10.2657L27.6454 10.2668L27.6534 10.2691L27.6721 10.2747L27.7198 10.2896C27.7562 10.3012 27.8017 10.3163 27.8558 10.3356C27.9642 10.374 28.1075 10.4287 28.2831 10.504C28.6347 10.6546 29.115 10.8872 29.705 11.2363C30.8861 11.9351 32.4985 13.0958 34.3926 14.9894C36.2868 16.8831 37.4479 18.4949 38.1469 19.6757C38.4961 20.2655 38.7287 20.7457 38.8794 21.0972C38.9547 21.2728 39.0094 21.416 39.0478 21.5243C39.0671 21.5785 39.0822 21.6239 39.0938 21.6603L39.1087 21.708L39.1143 21.7267L39.1166 21.7348L39.1177 21.7385C39.1177 21.7385 39.1187 21.7419 37.3786 22.239L39.1187 21.7419C39.3933 22.7027 38.8368 23.7041 37.8758 23.9786C36.9229 24.2508 35.93 23.7062 35.6456 22.7604L35.6367 22.7344C35.6238 22.6982 35.5972 22.6268 35.5525 22.5226C35.4632 22.3143 35.3013 21.9736 35.032 21.5187C34.494 20.6098 33.5222 19.2366 31.8332 17.5481C30.1442 15.8596 28.7706 14.8881 27.8615 14.3503C27.4065 14.081 27.0657 13.9191 26.8573 13.8299C26.7531 13.7852 26.6817 13.7586 26.6454 13.7457L26.6194 13.7368C25.6734 13.4525 25.1286 12.4599 25.4009 11.5073Z\", fill: \"#8755F4\" })));\n};\n\nexport { VoiceIcon as default };\n//# sourceMappingURL=voiceIcon.js.map\n","import React from 'react';\n\nconst VideoIcon = () => {\n    return (React.createElement(\"svg\", { width: \"51\", height: \"50\", viewBox: \"0 0 51 50\", fill: \"none\", xmlns: \"http://www.w3.org/2000/svg\" },\n        React.createElement(\"path\", { d: \"M5.33398 13.75C5.33398 10.2982 8.13221 7.5 11.584 7.5H31.584C35.0358 7.5 37.834 10.2982 37.834 13.75V36.25C37.834 39.7018 35.0358 42.5 31.584 42.5H11.584C8.13221 42.5 5.33398 39.7018 5.33398 36.25V13.75Z\", fill: \"#1CB4FF\" }),\n        React.createElement(\"path\", { d: \"M35.334 21.8641C35.334 21.1343 35.6529 20.4409 36.207 19.966L43.707 13.5374C45.3287 12.1474 47.834 13.2997 47.834 15.4356V34.5644C47.834 36.7003 45.3287 37.8526 43.707 36.4626L36.207 30.034C35.6529 29.5591 35.334 28.8657 35.334 28.1359V21.8641Z\", fill: \"#1CB4FF\" })));\n};\n\nexport { VideoIcon as default };\n//# sourceMappingURL=videoIcon.js.map\n","import React from 'react';\nimport Title from '../../atoms/title/title.js';\nimport ChatIcon from './assets/chatIcon.js';\nimport VoiceIcon from './assets/voiceIcon.js';\nimport VideoIcon from './assets/videoIcon.js';\n\nconst ChanelButton = ({ type, offline, busy, price, newPrice, titleText, startButtonText }) => {\n    let className = `mbw-channel-${type}-button`;\n    if (offline) {\n        className = \"mbw-channel-offline-button\";\n    }\n    if (busy) {\n        className = \"mbw-channel-busy-button\";\n    }\n    const profileChannelButtonImage = () => {\n        switch (type) {\n            case \"chat\":\n                return React.createElement(ChatIcon, null);\n            case \"voiceCall\":\n                return React.createElement(VoiceIcon, null);\n            case \"videoCall\":\n                return React.createElement(VideoIcon, null);\n            default:\n                return null;\n        }\n    };\n    return (React.createElement(\"div\", { className: className },\n        profileChannelButtonImage(),\n        React.createElement(\"div\", { className: \"mbw-channel-button-text\" },\n            React.createElement(Title, { fontStyle: \"heading-h5\", bold: true }, titleText),\n            React.createElement(\"br\", null),\n            React.createElement(Title, { fontStyle: \"content-medium\" },\n                React.createElement(\"span\", { className: newPrice && \"mbw-channel-button-old-price\" }, price)),\n            React.createElement(\"br\", null),\n            newPrice && React.createElement(Title, { bold: true, fontStyle: \"content-medium\" },\n                React.createElement(\"span\", { className: \"mbw-channel-button-new-price\" }, newPrice))),\n        React.createElement(\"div\", { className: \"mbw-channel-button-start\" },\n            React.createElement(Title, { fontStyle: \"content-small\", bold: true }, startButtonText),\n            React.createElement(\"svg\", { width: \"6\", height: \"14\", viewBox: \"0 0 6 14\", fill: \"none\", xmlns: \"http://www.w3.org/2000/svg\" },\n                React.createElement(\"path\", { d: \"M1.58398 11.083L5.08398 6.99967L1.58398 2.91634\", strokeWidth: \"1.5\", strokeLinecap: \"round\", strokeLinejoin: \"round\" })))));\n};\n\nexport { ChanelButton as default };\n//# sourceMappingURL=channel_button.js.map\n","import React from 'react';\n\nconst leftArrowIcon = React.createElement(\"svg\", { xmlns: \"http://www.w3.org/2000/svg\", width: \"24\", height: \"24\", viewBox: \"0 0 24 24\", fill: \"none\" },\n    React.createElement(\"path\", { d: \"M20 12H4M4 12L10 6M4 12L10 18\", stroke: \"#121212\", strokeWidth: \"1.5\", strokeLinecap: \"round\", strokeLinejoin: \"round\" }));\n\nexport { leftArrowIcon };\n//# sourceMappingURL=left_arrow_icon.js.map\n","import React from 'react';\n\nconst rightArrowIcon = React.createElement(\"svg\", { xmlns: \"http://www.w3.org/2000/svg\", width: \"24\", height: \"24\", viewBox: \"0 0 24 24\", fill: \"none\" },\n    React.createElement(\"path\", { d: \"M4 12H20M20 12L14 6M20 12L14 18\", stroke: \"#121212\", strokeWidth: \"1.5\", strokeLinecap: \"round\", strokeLinejoin: \"round\" }));\n\nexport { rightArrowIcon };\n//# sourceMappingURL=right_arrow_icon.js.map\n","import React, { useState, useRef, useEffect } from 'react';\nimport Icon from '../../atoms/icon/icon.js';\nimport { leftArrowIcon } from './img/left_arrow_icon.js';\nimport { rightArrowIcon } from './img/right_arrow_icon.js';\n\n/* eslint-disable @typescript-eslint/no-empty-function */\nconst scrollElementTypes = {\n    left: \"left\",\n    right: \"right\"\n};\nconst AdvisorSection = ({ advisorSectionId, advisorSectionTitle, advisorSectionShortDescriptions, advisorSectionContent = [], \n// loading=false,\nelementsCount = {}, needScrollOnBrowser = false }) => {\n    const { maxElementsCount = null, elementsCountPhone = 2, elementsCountTablet = 4, elementsCountLaptop = 4, elementsCountDesktop = 4 } = elementsCount;\n    const [windowInnerWidth, setWindowInnerWidth] = useState(window.innerWidth);\n    const [showLeftScrollElement, setShowLeftScrollElement] = useState(true);\n    const [showRightScrollElement, setShowRightScrollElement] = useState(true);\n    const advisorsContainerRef = useRef(null);\n    const advisorsContainerScrollerRef = useRef(null);\n    const calcScrollElementContantWidth = (advisorSectionId) => {\n        const contentContainer = document.getElementById(`${advisorSectionId}advisorsContainerScroller`);\n        if (!contentContainer)\n            return;\n        const contentContainerChildrenArray = Array.from(contentContainer.children);\n        let contentWidth = 0;\n        contentContainerChildrenArray.forEach((el) => {\n            const style = window.getComputedStyle(el);\n            contentWidth += parseFloat(style.marginLeft) + parseFloat(style.width);\n        });\n        return { contentWidth, contentContainer }; //eslint-disable-line\n    };\n    const needShowScrollElement = ({ advisorSectionId, setShowLeftScrollElement, setShowRightScrollElement }) => {\n        const data = calcScrollElementContantWidth(advisorSectionId);\n        if (!data)\n            return;\n        const { contentWidth } = data;\n        const mainScrollContainer = document.getElementById(`${advisorSectionId}advisorsContainer`);\n        if (mainScrollContainer) {\n            if (contentWidth <= mainScrollContainer.offsetWidth) {\n                setShowLeftScrollElement(false);\n                setShowRightScrollElement(false);\n                return;\n            }\n            if (mainScrollContainer.scrollLeft === 0 && contentWidth > mainScrollContainer.offsetWidth) {\n                setShowLeftScrollElement(false);\n                setShowRightScrollElement(true);\n                return;\n            }\n            if (mainScrollContainer.scrollLeft > 0 && contentWidth > mainScrollContainer.offsetWidth) {\n                setShowLeftScrollElement(true);\n                setShowRightScrollElement(true);\n            }\n            if (mainScrollContainer.scrollLeft > 0 && contentWidth > mainScrollContainer.offsetWidth\n                && mainScrollContainer.scrollLeft + mainScrollContainer.offsetWidth\n                    >= mainScrollContainer.scrollWidth) {\n                setShowLeftScrollElement(true);\n                setShowRightScrollElement(false);\n            }\n        }\n    };\n    const handleResize = () => {\n        setWindowInnerWidth(window.innerWidth);\n        needShowScrollElement({ advisorSectionId, setShowLeftScrollElement, setShowRightScrollElement });\n    };\n    const handleScroll = () => {\n        needShowScrollElement({ advisorSectionId, setShowLeftScrollElement, setShowRightScrollElement });\n    };\n    useEffect(() => {\n        window.addEventListener(\"resize\", handleResize);\n        return () => window.removeEventListener(\"resize\", handleResize);\n    }, []);\n    useEffect(() => {\n        calcScrollElementContantWidth(advisorSectionId);\n        needShowScrollElement({ advisorSectionId, setShowLeftScrollElement, setShowRightScrollElement });\n    }, [advisorsContainerScrollerRef]);\n    useEffect(() => {\n        if (advisorsContainerRef.current) {\n            const advisorsContainer = advisorsContainerRef.current;\n            advisorsContainer.addEventListener(\"scroll\", handleScroll);\n            return () => {\n                advisorsContainer.removeEventListener(\"scroll\", handleScroll);\n            };\n        }\n        return () => { };\n    }, [windowInnerWidth, advisorsContainerRef.current]);\n    const getElementsCount = (count) => {\n        if (maxElementsCount)\n            return maxElementsCount;\n        return count;\n    };\n    const renderAdvisors = () => (advisorSectionContent.map((advisor, index) => (React.createElement(\"div\", { key: index, className: \"mbw-advisor-container\", \"data-testid\": \"mbw-advisor-container\", style: {\n            \"--elementsCountPhone\": getElementsCount(elementsCountPhone),\n            \"--elementsCountTablet\": getElementsCount(elementsCountTablet),\n            \"--elementsCountLaptop\": getElementsCount(elementsCountLaptop),\n            \"--elementsCountDesktop\": getElementsCount(elementsCountDesktop)\n        } }, advisor))));\n    const renderAdvisorSectionShortDescriptions = () => {\n        if (!advisorSectionShortDescriptions)\n            return null;\n        return (React.createElement(\"div\", { className: \"mbw-advisor-section-short-descriptions-holder\" }, advisorSectionShortDescriptions));\n    };\n    const onScrollBtnClick = (e) => {\n        const scrollContainer = document.getElementById(`${advisorSectionId}advisorsContainer`);\n        if (!scrollContainer)\n            return;\n        if (e.currentTarget.id === scrollElementTypes.left) {\n            scrollContainer.scrollTo({ left: scrollContainer.scrollLeft - scrollContainer.clientWidth, behavior: \"smooth\" });\n            return;\n        }\n        scrollContainer.scrollTo({ left: scrollContainer.scrollLeft + scrollContainer.offsetWidth, behavior: \"smooth\" });\n    };\n    const getScrollElementClassName = (type) => {\n        let className = `mbw-advisor-section-scroll-${type}-element-container`;\n        if (needScrollOnBrowser)\n            className = className + \" mbw-advisor-section-scroll-element-container-need-scroll-on-browser\";\n        return className;\n    };\n    const renderScrollLeftElement = () => {\n        if (!showLeftScrollElement)\n            return null;\n        return (React.createElement(\"div\", { className: getScrollElementClassName(scrollElementTypes.left) },\n            React.createElement(\"button\", { id: scrollElementTypes.left, type: \"button\", className: \"mbw-advisor-section-scroll-element-icon-container\", onClick: onScrollBtnClick },\n                React.createElement(Icon, { className: \"mbw-advisor-section-scroll-element-icon\", dataTestId: \"mbw-advisor-section-scroll-element-icon\" }, leftArrowIcon))));\n    };\n    const renderScrollRightElement = () => {\n        if (!showRightScrollElement)\n            return null;\n        return (React.createElement(\"div\", { className: getScrollElementClassName(scrollElementTypes.right) },\n            React.createElement(\"button\", { id: scrollElementTypes.right, type: \"button\", className: \"mbw-advisor-section-scroll-element-icon-container\", onClick: onScrollBtnClick },\n                React.createElement(Icon, { className: \"mbw-advisor-section-scroll-element-icon\", dataTestId: \"mbw-advisor-section-scroll-element-icon\" }, rightArrowIcon))));\n    };\n    const renderScrollElements = () => (React.createElement(React.Fragment, null,\n        renderScrollLeftElement(),\n        renderScrollRightElement()));\n    const getAdvisorsContainerClassName = () => {\n        let className = \"mbw-advisors-container\";\n        if (needScrollOnBrowser)\n            className = className + \" mbw-advisors-container-need-scroll-on-browser\";\n        return className;\n    };\n    const renderAdvisorSectionContent = () => {\n        if (advisorSectionContent.length === 0)\n            return null;\n        return (React.createElement(\"div\", { className: \"mbw-section-main-container\" },\n            renderScrollElements(),\n            renderAdvisorSectionShortDescriptions(),\n            React.createElement(\"div\", { id: `${advisorSectionId}advisorsContainer`, className: getAdvisorsContainerClassName(), ref: advisorsContainerRef },\n                React.createElement(\"div\", { className: \"mbw-advisors-container-scroller\", id: `${advisorSectionId}advisorsContainerScroller`, ref: advisorsContainerScrollerRef }, renderAdvisors()))));\n    };\n    const renderAdvisorSectionTitle = () => {\n        if (!advisorSectionTitle)\n            return null;\n        return (React.createElement(\"div\", { className: \"mbw-advisor-section-title-container\" }, advisorSectionTitle));\n    };\n    const renderAdvisorSection = () => (React.createElement(\"div\", { className: \"mbw-advisor-section-container\" },\n        renderAdvisorSectionTitle(),\n        renderAdvisorSectionContent()));\n    return renderAdvisorSection();\n};\n\nexport { AdvisorSection as default };\n//# sourceMappingURL=advisor_section.js.map\n","import n from '../../node_modules/rollup-plugin-styles/dist/runtime/inject-css.js';\n\nvar css = \"@keyframes mbw_animationBzdot9__c2d6e9d6{0%{background-position:-200px 0}to{background-position:calc(200px + 100%) 0}}.mbw_skeleton__c2d6e9d6{display:flex;position:relative}.mbw_skeleton__c2d6e9d6:after{-webkit-animation:mbw_animationBzdot9__c2d6e9d6 1.2s ease-in-out infinite;animation:mbw_animationBzdot9__c2d6e9d6 1.2s ease-in-out infinite;background-color:#eee!important;background-image:linear-gradient(90deg,#eee,#f5f5f5,#eee);background-repeat:no-repeat;background-size:200px 100%;contain-intrinsic-size:auto 1px auto 1px;content:\\\"\\\";display:flex;height:100%;left:0;line-height:1;max-width:100%;pointer-events:none;position:absolute;top:0;width:100%}.mbw_advisorSectionTitleLabelContainer__c2d6e9d6{align-items:center;display:flex;justify-content:space-between}.mbw_advisorSectionTitleLabelIconAndTextContainer__c2d6e9d6{align-items:center;display:flex;justify-content:flex-start}.mbw_advisorSectionTitleLabeIcon__c2d6e9d6{display:flex;height:var(--mbw-advisor-section-title-labe-icon-height-desktop,2.25rem);width:var(--mbw-advisor-section-title-labe-icon-width-desktop,2.25rem)}@media (max-width:48rem){.mbw_advisorSectionTitleLabeIcon__c2d6e9d6{height:var(--mbw-advisor-section-title-labe-icon-height-phone,1.875rem);width:var(--mbw-advisor-section-title-labe-icon-width-phone,1.875rem)}}.mbw_advisorSectionTitleLabeTextContainer__c2d6e9d6{display:flex;margin-left:var(--mbw-advisor-section-title-labe-text-container-margin-left-desktop,.938rem)}@media (max-width:48rem){.mbw_advisorSectionTitleLabeTextContainer__c2d6e9d6{margin-left:var(--mbw-advisor-section-title-labe-text-container-margin-left-phone,.5rem)}}.mbw_advisorSectionSeeAllBtnContainer__c2d6e9d6{display:none}@media (max-width:48rem){.mbw_advisorSectionSeeAllBtnContainer__c2d6e9d6{color:var(--mbw-advisor-section-see-all-btn-color,#8755f4);cursor:pointer;display:flex}}\";\nvar modules_c8b79225 = {\"skeleton\":\"mbw_skeleton__c2d6e9d6\",\"animation-bzdot9\":\"mbw_animationBzdot9__c2d6e9d6\",\"advisor-section-title-label-container\":\"mbw_advisorSectionTitleLabelContainer__c2d6e9d6\",\"advisor-section-title-label-icon-and-text-container\":\"mbw_advisorSectionTitleLabelIconAndTextContainer__c2d6e9d6\",\"advisor-section-title-labe-icon\":\"mbw_advisorSectionTitleLabeIcon__c2d6e9d6\",\"advisor-section-title-labe-text-container\":\"mbw_advisorSectionTitleLabeTextContainer__c2d6e9d6\",\"advisor-section-see-all-btn-container\":\"mbw_advisorSectionSeeAllBtnContainer__c2d6e9d6\"};\nn(css,{});\n\nexport { css, modules_c8b79225 as default };\n//# sourceMappingURL=advisor_section_title_label.module.scss.js.map\n","import React from 'react';\nimport Title from '../title/title.js';\nimport classNames from '../../classnames.js';\nimport modules_c8b79225 from './advisor_section_title_label.module.scss.js';\n\nconst AdvisorSectionTitleLabel = ({ iconUrl, titleText, seeAllBtnOnClick, seeAllBtnText, loading }) => {\n    const getIconContainerClassName = () => classNames({ [modules_c8b79225.skeleton]: loading });\n    const renderIconAndText = () => (React.createElement(\"div\", { className: modules_c8b79225[\"advisor-section-title-label-icon-and-text-container\"] },\n        React.createElement(\"div\", { className: getIconContainerClassName() },\n            React.createElement(\"img\", { src: iconUrl, alt: \"\", className: modules_c8b79225[\"advisor-section-title-labe-icon\"], \"data-testid\": \"mbw-advisor-section-title-labe-icon\" })),\n        React.createElement(\"div\", { className: modules_c8b79225[\"advisor-section-title-labe-text-container\"], \"data-testid\": \"mbw-advisor-section-title-labe-text-container\" },\n            React.createElement(Title, { fontStyle: \"heading-h2\", bold: true, loading: loading }, titleText))));\n    const renderSeeAllBtn = () => {\n        if (!seeAllBtnOnClick || !seeAllBtnText)\n            return null;\n        return (React.createElement(\"div\", { className: modules_c8b79225[\"advisor-section-see-all-btn-container\"], \"data-testid\": \"mbw-advisor-section-see-all-btn-container\", onClick: seeAllBtnOnClick },\n            React.createElement(Title, { fontStyle: \"content-default\", bold: true, loading: loading }, seeAllBtnText)));\n    };\n    const renderAdvisorSectionTitleLabel = () => (React.createElement(\"div\", { className: modules_c8b79225[\"advisor-section-title-label-container\"] },\n        renderIconAndText(),\n        renderSeeAllBtn()));\n    return renderAdvisorSectionTitleLabel();\n};\n\nexport { AdvisorSectionTitleLabel as default };\n//# sourceMappingURL=advisor_section_title_label.js.map\n","import n from '../../node_modules/rollup-plugin-styles/dist/runtime/inject-css.js';\n\nvar css = \"@keyframes mbw_animationBzdot9__342ec25f{0%{background-position:-200px 0}to{background-position:calc(200px + 100%) 0}}.mbw_skeleton__342ec25f{display:flex;position:relative}.mbw_skeleton__342ec25f:after{-webkit-animation:mbw_animationBzdot9__342ec25f 1.2s ease-in-out infinite;animation:mbw_animationBzdot9__342ec25f 1.2s ease-in-out infinite;background-color:#eee!important;background-image:linear-gradient(90deg,#eee,#f5f5f5,#eee);background-repeat:no-repeat;background-size:200px 100%;contain-intrinsic-size:auto 1px auto 1px;content:\\\"\\\";display:flex;height:100%;left:0;line-height:1;max-width:100%;pointer-events:none;position:absolute;top:0;width:100%}.mbw_advisorSectionShortDescriptionsContainer__342ec25f{align-items:flex-start;display:flex;flex-direction:column;justify-content:flex-start;margin-right:var(--mbw-advisor-section-short-descriptions-container-margin-right,1.875rem)}.mbw_advisorSectionShortDescriptionsTextContainer__342ec25f{color:var(--mbw-advisor-section-short-descriptions-text-color,var(--mbw-text-primary,#121212));display:flex;margin-top:var(--mbw-advisor-section-short-descriptions-text-container-margin-top,1.875rem);width:100%}.mbw_advisorSectionShortDescriptionsSubTextContainer__342ec25f{color:var(--mbw-advisor-section-short-descriptions-sub-text-color,var(--mbw-text-secondary,#636570));display:flex;margin-top:var(--mbw-advisor-section-short-descriptions-sub-text-container-margin-top,1rem);width:100%}.mbw_advisorSectionShortDescriptionsSeeAllBtnContainer__342ec25f{align-items:center;border:var(--mbw-advisor-section-short-descriptions-see-all-btn-container-border-size,.063rem) solid var(--mbw-advisor-section-short-descriptions-see-all-btn-container-border-color,var(--mbw-default-border,#eaeaea));border-radius:var(--mbw-advisor-section-short-descriptions-see-all-btn-container-border-radius,.625rem);color:var(--mbw-advisor-section-short-descriptions-text-color,var(--mbw-text-primary,#121212));cursor:pointer;display:flex;justify-content:center;margin-top:var(--mbw-advisor-section-short-descriptions-see-all-btn-container-margin-top,2.5rem);padding:var(--mbw-advisor-section-short-descriptions-see-all-btn-container-padding,.813rem .625rem .813rem .625rem);width:var(--mbw-advisor-section-short-descriptions-see-all-btn-container-width,12.5rem)}\";\nvar modules_14c8d388 = {\"skeleton\":\"mbw_skeleton__342ec25f\",\"animation-bzdot9\":\"mbw_animationBzdot9__342ec25f\",\"advisor-section-short-descriptions-container\":\"mbw_advisorSectionShortDescriptionsContainer__342ec25f\",\"advisor-section-short-descriptions-text-container\":\"mbw_advisorSectionShortDescriptionsTextContainer__342ec25f\",\"advisor-section-short-descriptions-sub-text-container\":\"mbw_advisorSectionShortDescriptionsSubTextContainer__342ec25f\",\"advisor-section-short-descriptions-see-all-btn-container\":\"mbw_advisorSectionShortDescriptionsSeeAllBtnContainer__342ec25f\"};\nn(css,{});\n\nexport { css, modules_14c8d388 as default };\n//# sourceMappingURL=advisor_section_short_descriptions.module.scss.js.map\n","import React from 'react';\nimport Title from '../title/title.js';\nimport AdvisorSectionTitleLabel from '../advisor_section_title_label/advisor_section_title_label.js';\nimport classNames from '../../classnames.js';\nimport modules_14c8d388 from './advisor_section_short_descriptions.module.scss.js';\n\nconst AdvisorSectionShortDescriptions = ({ iconUrl, titleText, shortDescriptionsText, shortDescriptionsSubText, seeAllBtnOnClick, seeAllBtnText, loading }) => {\n    const renderAdvisorSectionTitleLabel = () => (React.createElement(AdvisorSectionTitleLabel, { iconUrl: iconUrl, titleText: titleText, loading: loading }));\n    const renderShortDescriptionsText = () => {\n        if (!shortDescriptionsText && !loading)\n            return null;\n        return (React.createElement(\"div\", { className: modules_14c8d388[\"advisor-section-short-descriptions-text-container\"], \"data-testid\": \"mbw-advisor-section-short-descriptions-text-container\" },\n            React.createElement(Title, { fontStyle: \"heading-h5\", ellipsis: true, maxRows: 5, loading: loading }, shortDescriptionsText)));\n    };\n    const renderShortDescriptionsSubText = () => {\n        if (!shortDescriptionsSubText && !loading)\n            return null;\n        return (React.createElement(\"div\", { className: modules_14c8d388[\"advisor-section-short-descriptions-sub-text-container\"], \"data-testid\": \"mbw-advisor-section-short-descriptions-sub-text-container\" },\n            React.createElement(Title, { fontStyle: \"heading-h6\", ellipsis: true, maxRows: 3, loading: loading }, shortDescriptionsSubText)));\n    };\n    const getSeeAllBtnContainerClassName = () => classNames(modules_14c8d388[\"advisor-section-short-descriptions-see-all-btn-container\"], { [modules_14c8d388.skeleton]: loading });\n    const renderSeeAllBtn = () => {\n        if ((!seeAllBtnOnClick || !seeAllBtnText) && !loading)\n            return null;\n        return (React.createElement(\"div\", { className: getSeeAllBtnContainerClassName(), \"data-testid\": \"mbw-advisor-section-short-descriptions-see-all-btn-container\", onClick: seeAllBtnOnClick },\n            React.createElement(Title, { fontStyle: \"content-default\", bold: true, loading: loading }, seeAllBtnText)));\n    };\n    const renderAdvisorSectionShortDescriptions = () => (React.createElement(\"div\", { className: modules_14c8d388[\"advisor-section-short-descriptions-container\"] },\n        renderAdvisorSectionTitleLabel(),\n        renderShortDescriptionsText(),\n        renderShortDescriptionsSubText(),\n        renderSeeAllBtn()));\n    return renderAdvisorSectionShortDescriptions();\n};\n\nexport { AdvisorSectionShortDescriptions as default };\n//# sourceMappingURL=advisor_section_short_descriptions.js.map\n","import React from 'react';\n\nconst Clock = () => {\n    return (React.createElement(\"svg\", { width: \"30\", height: \"30\", viewBox: \"0 0 30 30\", fill: \"none\", xmlns: \"http://www.w3.org/2000/svg\" },\n        React.createElement(\"path\", { fillRule: \"evenodd\", clipRule: \"evenodd\", d: \"M15 27.5C21.9036 27.5 27.5 21.9036 27.5 15C27.5 8.09644 21.9036 2.5 15 2.5C8.09644 2.5 2.5 8.09644 2.5 15C2.5 21.9036 8.09644 27.5 15 27.5ZM15.9375 10C15.9375 9.48223 15.5178 9.0625 15 9.0625C14.4822 9.0625 14.0625 9.48223 14.0625 10V15C14.0625 15.2486 14.1613 15.4871 14.3371 15.6629L17.4621 18.7879C17.8282 19.154 18.4218 19.154 18.7879 18.7879C19.154 18.4218 19.154 17.8282 18.7879 17.4621L15.9375 14.6117V10Z\", fill: \"#121212\" })));\n};\n\nexport { Clock };\n//# sourceMappingURL=Clock.js.map\n","import React from 'react';\n\nconst Stars = () => {\n    return (React.createElement(\"svg\", { width: \"50\", height: \"50\", viewBox: \"0 0 50 50\", fill: \"none\", xmlns: \"http://www.w3.org/2000/svg\" },\n        React.createElement(\"path\", { d: \"M20.813 34.3748L18.78 35.3626C14.6531 36.5034 12.5896 37.0738 11.4773 35.8732C10.365 34.6726 10.9405 32.496 12.0915 28.143L12.3893 27.0168C12.7164 25.7798 12.8799 25.1614 12.7977 24.548C12.7154 23.9347 12.3967 23.396 11.7593 22.3185L11.179 21.3375C8.93589 17.5459 7.81434 15.6501 8.5634 14.1416C9.31245 12.6331 11.436 12.511 15.6832 12.2668L16.782 12.2036C17.9889 12.1342 18.5924 12.0995 19.1186 11.8187C19.6448 11.5379 20.0342 11.0429 20.813 10.0528L21.5221 9.15139C24.2627 5.66721 25.633 3.92512 27.2083 4.19344C28.7835 4.46177 29.5205 6.56281 30.9943 10.7649L31.3757 11.852C31.7945 13.0461 32.0039 13.6432 32.4114 14.083C32.8188 14.5228 33.3782 14.7556 34.4969 15.2211L35.5155 15.645C39.4524 17.2833 41.4208 18.1024 41.6453 19.7768C41.8369 21.2052 40.6508 22.4491 38.2264 24.548\", stroke: \"#FF8717\", strokeWidth: \"1.5\" }),\n        React.createElement(\"path\", { d: \"M31.7754 22.2687C29.72 19.8093 28.6922 18.5796 27.5108 18.769C26.3293 18.9584 25.7766 20.4415 24.6712 23.4077L24.3853 24.1751C24.0711 25.018 23.9141 25.4394 23.6085 25.7499C23.3029 26.0603 22.8833 26.2246 22.0443 26.5533L21.2804 26.8524C18.3277 28.0089 16.8514 28.5871 16.683 29.769C16.5146 30.9509 17.7657 31.9537 20.2679 33.9593L20.9153 34.4781C21.6263 35.0481 21.9818 35.333 22.1876 35.7231C22.3934 36.1131 22.4262 36.5641 22.4917 37.4661L22.5514 38.2873C22.782 41.4615 22.8973 43.0485 23.9747 43.5896C25.0521 44.1306 26.378 43.2673 29.0299 41.5406L29.7159 41.0939C30.4695 40.6033 30.8463 40.3579 31.2791 40.2886C31.7119 40.2192 32.1516 40.3336 33.0312 40.5624L33.832 40.7708C36.9272 41.576 38.4748 41.9787 39.309 41.1312C40.1433 40.2837 39.7116 38.7473 38.8484 35.6746L38.625 34.8797C38.3797 34.0065 38.257 33.5699 38.3187 33.137C38.3804 32.704 38.6194 32.3237 39.0975 31.5632L39.5327 30.8707C41.2151 28.1943 42.0562 26.856 41.4944 25.7912C40.9327 24.7264 39.34 24.6402 36.1546 24.4678L35.3305 24.4232C34.4253 24.3742 33.9727 24.3497 33.578 24.1515C33.1834 23.9534 32.8913 23.6039 32.3072 22.905L31.7754 22.2687Z\", fill: \"#FF8717\", fillOpacity: \"0.3\", stroke: \"#FF8717\", strokeWidth: \"1.5\" })));\n};\n\nexport { Stars };\n//# sourceMappingURL=Stars.js.map\n","import React from 'react';\n\nconst ChatTypeIcon = () => {\n    return (React.createElement(\"svg\", { width: \"24\", height: \"24\", viewBox: \"0 0 24 24\", fill: \"none\", xmlns: \"http://www.w3.org/2000/svg\" },\n        React.createElement(\"path\", { fillRule: \"evenodd\", clipRule: \"evenodd\", d: \"M21.8032 12.0002C21.8032 17.4148 17.4138 21.8041 11.9992 21.8041C10.4309 21.8041 8.94861 21.4359 7.63406 20.7811C7.28473 20.6071 6.88544 20.5492 6.50843 20.6501L4.32604 21.234C3.37866 21.4875 2.51193 20.6208 2.76542 19.6734L3.34935 17.491C3.45022 17.114 3.39231 16.7147 3.21831 16.3654C2.56356 15.0508 2.19531 13.5685 2.19531 12.0002C2.19531 6.58565 6.58468 2.19629 11.9992 2.19629C17.4138 2.19629 21.8032 6.58565 21.8032 12.0002ZM8.07766 12.9806C7.53621 12.9806 7.09727 12.5417 7.09727 12.0002C7.09727 11.4588 7.53621 11.0198 8.07766 11.0198C8.61912 11.0198 9.05806 11.4588 9.05806 12.0002C9.05806 12.5417 8.61912 12.9806 8.07766 12.9806ZM11.0188 12.0002C11.0188 12.5417 11.4578 12.9806 11.9992 12.9806C12.5407 12.9806 12.9796 12.5417 12.9796 12.0002C12.9796 11.4588 12.5407 11.0198 11.9992 11.0198C11.4578 11.0198 11.0188 11.4588 11.0188 12.0002ZM14.9404 12.0002C14.9404 12.5417 15.3793 12.9806 15.9208 12.9806C16.4623 12.9806 16.9012 12.5417 16.9012 12.0002C16.9012 11.4588 16.4623 11.0198 15.9208 11.0198C15.3793 11.0198 14.9404 11.4588 14.9404 12.0002Z\", fill: \"white\" })));\n};\n\nexport { ChatTypeIcon };\n//# sourceMappingURL=ChatTypeIcon.js.map\n","import React from 'react';\nimport FilterTab from '../../molecules/filter_tab/filter_tab.js';\nimport Button from '../../molecules/button/button.js';\nimport Avatar from '../../molecules/avatar/avatar.js';\nimport Title from '../../atoms/title/title.js';\nimport { Clock } from './assets/Clock.js';\nimport { Stars } from './assets/Stars.js';\nimport { ChatTypeIcon } from './assets/ChatTypeIcon.js';\n\nconst MyOrdersDetailsItem = ({ avatarSrc, time, date, type, tabText, tabIcon, title, subTitle, buttonLinkText, buttonLinkIcon, buttonLinkCallBack }) => {\n    return (React.createElement(\"div\", { \"data-test-id\": `${type}`, className: \"mbw-my-orders-details-item\" },\n        React.createElement(\"div\", { className: \"mbw-my-orders-details-top-block\" },\n            React.createElement(\"div\", { className: \"mbw-my-orders-details-flex\" },\n                React.createElement(\"div\", { className: \"mbw-my-orders-details-avatar-block\" },\n                    React.createElement(Avatar, { imgSrc: avatarSrc, size: \"large\" }),\n                    React.createElement(Avatar, { imgSrc: avatarSrc, size: \"large\" }),\n                    React.createElement(\"div\", { className: `mbw-my-orders-details-avatar-middle-icon-${type}` },\n                        React.createElement(ChatTypeIcon, null))),\n                React.createElement(\"div\", null,\n                    React.createElement(\"div\", { className: \"mbw-my-orders-details-flex\" },\n                        React.createElement(Clock, null),\n                        React.createElement(Title, { fontStyle: \"heading-h3\", bold: true }, time),\n                        React.createElement(\"br\", null)),\n                    React.createElement(Title, { fontStyle: \"content-default\" }, date))),\n            React.createElement(FilterTab, { title: tabText, icon: tabIcon })),\n        React.createElement(\"div\", { className: \"mbw-my-orders-details-bottom-block\" },\n            React.createElement(\"div\", { className: \"mbw-my-orders-details-flex\" },\n                React.createElement(Stars, null),\n                React.createElement(\"div\", null,\n                    React.createElement(Title, { fontStyle: \"heading-h6\", bold: true }, title),\n                    React.createElement(\"br\", null),\n                    React.createElement(Title, { fontStyle: \"content-medium\" }, subTitle))),\n            React.createElement(\"div\", null,\n                React.createElement(Button, { type: \"link\", onClick: () => buttonLinkCallBack, title: buttonLinkText, icon: buttonLinkIcon })))));\n};\n\nexport { MyOrdersDetailsItem as default };\n//# sourceMappingURL=my_orders_details_item.js.map\n","import React from 'react';\nimport Title from '../../../atoms/title/title.js';\nimport Avatar from '../../../molecules/avatar/avatar.js';\nimport ChannelsCard from '../../../atoms/channels_card/channels_card.js';\nimport LiveModesPrices from '../../../atoms/live_modes_prices/live_modes_prices.js';\nimport ReadingSinceAndCount from '../../../atoms/reading_since_and_count/reading_since_and_count.js';\nimport Rating from '../../../atoms/rating/rating.js';\nimport PlayButton from '../../../atoms/play_button/play_button.js';\nimport StatusIndicator from '../../../atoms/status_indicator/status_indicator.js';\n\nconst AdvisorListCardPG = ({ statusIndicatorStatus, rating, playButtonOnClick, imgSrc, advisorName = \"Advisor Name\", advisorServiceName = \"Advisor Service Name\", liveModes = [], liveModeMinPrices, readingData, loading }) => {\n    const renderAdvisorAvatar = () => (React.createElement(Avatar, { type: 'rectangle', imgSrc: imgSrc, topOverlayContainer: React.createElement(\"div\", { style: { display: \"flex\", width: \"100%\", alignItems: \"center\", justifyContent: \"space-between\" } },\n            React.createElement(Rating, { type: \"default\", rating: rating, loading: loading }),\n            React.createElement(PlayButton, { type: 'default', onClick: playButtonOnClick, loading: loading })), bottomOverlayContainer: React.createElement(React.Fragment, null,\n            React.createElement(Title, { fontStyle: \"content-default\", bold: true, loading: loading }, \" dadadaw\")), transformContainer: React.createElement(StatusIndicator, { status: statusIndicatorStatus, size: \"default\", loading: loading }), hideBorders: { leftBottom: true, rightBottom: true } }));\n    const renderAdvisorNameAndServiceName = () => (React.createElement(\"div\", { className: \"mbw-advisor-list-card-advisor-name-and-service-container\" },\n        React.createElement(\"div\", { className: \"mbw-advisor-list-card-advisor-name-container\", \"data-testid\": \"mbw-advisor-list-card-advisor-name-container\" },\n            React.createElement(Title, { fontStyle: 'heading-h4', bold: true, loading: loading, ellipsis: true }, advisorName)),\n        React.createElement(\"div\", { className: \"mbw-advisor-list-card-advisor-service-mame-container\", \"data-testid\": \"mbw-advisor-list-card-advisor-service-name-container\" },\n            React.createElement(Title, { fontStyle: \"content-default\", loading: loading, ellipsis: true }, advisorServiceName))));\n    const renderChannelsCardAndLiveModesPricesContainer = () => (React.createElement(\"div\", { className: \"mbw-advisor-list-card-channels-card-and-live-modes-prices-container\" },\n        React.createElement(\"div\", { className: \"mbw-advisor-list-card-channels-card-container\" },\n            React.createElement(ChannelsCard, { type: \"medium\", liveModes: liveModes, loading: loading })),\n        React.createElement(\"div\", { className: \"mbw-advisor-list-card-live-modes-prices-container\" },\n            React.createElement(LiveModesPrices, { type: \"default\", liveModeMinPrices: liveModeMinPrices, loading: loading }))));\n    const renderReadingSinceAndCount = () => (React.createElement(\"div\", { className: \"mbw-advisor-list-card-reading-since-and-count-container\" },\n        React.createElement(\"div\", { className: \"mbw-advisor-list-card-reading-since-and-count-browser\" },\n            React.createElement(ReadingSinceAndCount, { type: \"small\", readingData: readingData, loading: loading })),\n        React.createElement(\"div\", { className: \"mbw-advisor-list-card-reading-since-and-count-mobile\" },\n            React.createElement(ReadingSinceAndCount, { type: \"extra-small\", readingData: readingData, loading: loading }))));\n    const renderDataContainer = () => (React.createElement(\"div\", { className: \"mbw-advisor-list-card-data-container\" },\n        renderAdvisorNameAndServiceName(),\n        renderChannelsCardAndLiveModesPricesContainer(),\n        renderReadingSinceAndCount()));\n    const renderAdvisorListCard = () => (React.createElement(\"div\", { className: \"mbw-advisor-list-card-container\", \"data-testid\": \"mbw-advisor-list-card-container\" },\n        renderAdvisorAvatar(),\n        renderDataContainer()));\n    return renderAdvisorListCard();\n};\n\nexport { AdvisorListCardPG as default };\n//# sourceMappingURL=advisor_list_card_pg.js.map\n","import React from 'react';\nimport Title from '../../../atoms/title/title.js';\nimport Avatar from '../../../molecules/avatar/avatar.js';\nimport Rating from '../../../atoms/rating/rating.js';\nimport Icon from '../../../atoms/icon/icon.js';\nimport Button from '../../../molecules/button/button.js';\nimport StatusIndicator from '../../../atoms/status_indicator/status_indicator.js';\nimport { RatingIcon } from './assets/RatingIcon.js';\nimport { HeartIcon } from './assets/HeartIcon.js';\n\nconst AdvisorListCardKA = ({ statusIndicatorStatus, statusIndicatorText, rating, imgSrc, readingData, advisorName = \"Advisor Name\", advisorServiceName = \"Advisor Service Name\", loading, reviews, bonus, advisorDescription, liveModeMinPrices, playButtonOnClick }) => {\n    const renderAdvisorAvatar = () => (React.createElement(Avatar, { type: 'rectangle', imgSrc: imgSrc, size: \"large\" }));\n    const renderAdvisorNameAndServiceName = () => (React.createElement(\"div\", { className: \"mbw-advisor-list-card-advisor-name-and-service-container\" },\n        React.createElement(\"div\", { className: \"mbw-advisor-list-card-advisor-name-container\", \"data-testid\": \"mbw-advisor-list-card-advisor-name-container\" },\n            React.createElement(Title, { fontStyle: 'heading-h4', bold: true, loading: loading, ellipsis: true }, advisorName)),\n        React.createElement(\"div\", { className: \"mbw-advisor-list-card-advisor-service-mame-container\", \"data-testid\": \"mbw-advisor-list-card-advisor-service-name-container\" },\n            React.createElement(Title, { fontStyle: \"content-default\", loading: loading, ellipsis: true }, advisorServiceName)),\n        React.createElement(\"div\", { className: \"mbw-advisor-list-card-advisor-ka-status\" },\n            React.createElement(StatusIndicator, { status: statusIndicatorStatus, size: \"medium\" }),\n            React.createElement(\"div\", { className: `mbw-status-indicator-${statusIndicatorStatus}-text` },\n                React.createElement(Title, { fontStyle: \"content-medium\" }, statusIndicatorText)))));\n    const renderAdvisorListCard = () => (React.createElement(\"div\", { className: \"mbw-advisor-list-card-ka-container\", \"data-testid\": \"mbw-advisor-list-card-container\" },\n        React.createElement(\"div\", { className: \"mbw-advisor-list-card-name-wrapper-ka\" },\n            renderAdvisorAvatar(),\n            renderAdvisorNameAndServiceName(),\n            React.createElement(\"div\", { className: \"mbw-advisor-list-card-heart-icon\" },\n                React.createElement(Icon, { width: \"22\", height: \"20\" }, HeartIcon()))),\n        React.createElement(\"div\", { className: \"mbw-advisor-list-card-button-ka-rating\" },\n            React.createElement(\"div\", { className: \"mbw-advisor-list-card-button-ka-rating-child\" },\n                React.createElement(Rating, { type: \"default\", rating: rating, loading: loading }),\n                React.createElement(Title, { fontStyle: 'content-small', loading: loading, ellipsis: true }, reviews)),\n            React.createElement(\"div\", { className: \"mbw-advisor-list-card-button-ka-rating-child\" },\n                React.createElement(Title, { fontStyle: 'heading-h4', bold: true, loading: loading, ellipsis: true }, readingData?.readingsCount),\n                React.createElement(Title, { fontStyle: 'content-small', loading: loading, ellipsis: true }, readingData?.yearJoined))),\n        React.createElement(\"div\", { className: \"mbw-advisor-list-card-button-ka-description\" },\n            React.createElement(Title, { fontStyle: \"content-default\", maxRows: 3, ellipsis: true }, advisorDescription)),\n        React.createElement(\"div\", { className: \"mbw-advisor-list-card-button-ka\" },\n            React.createElement(\"div\", { className: \"mbw-advisor-list-card-button-ka-price\" },\n                bonus,\n                React.createElement(Title, { fontStyle: 'heading-h4', bold: true, loading: loading, ellipsis: true }, liveModeMinPrices?.liveModeMinPriceTitle)),\n            React.createElement(\"div\", { className: \"mbw-advisor-list-card-button-ka-rating-child\" },\n                React.createElement(Button, { type: \"primary\", onClick: () => playButtonOnClick(), title: \"Chat now\", icon: RatingIcon() })))));\n    return renderAdvisorListCard();\n};\n\nexport { AdvisorListCardKA as default };\n//# sourceMappingURL=advisor_list_card_ka.js.map\n","import React from 'react';\n\nconst HeartIcon = () => {\n    return React.createElement(\"svg\", { width: \"22\", height: \"20\", viewBox: \"0 0 22 20\", fill: \"none\", xmlns: \"http://www.w3.org/2000/svg\" },\n        React.createElement(\"path\", { d: \"M7.96173 16.9111L8.42605 16.3221L7.96173 16.9111ZM11 3.50088L10.4596 4.02098C10.601 4.16787 10.7961 4.25088 11 4.25088C11.2039 4.25088 11.399 4.16787 11.5404 4.02098L11 3.50088ZM14.0383 16.9111L14.5026 17.5001L14.0383 16.9111ZM8.42605 16.3221C6.91039 15.1273 5.25307 13.9605 3.93829 12.48C2.64922 11.0285 1.75 9.33474 1.75 7.13734H0.25C0.25 9.80287 1.3605 11.8363 2.81672 13.476C4.24723 15.0868 6.07077 16.3755 7.49742 17.5001L8.42605 16.3221ZM1.75 7.13734C1.75 4.98647 2.96537 3.18277 4.62436 2.42444C6.23607 1.68772 8.40166 1.88282 10.4596 4.02098L11.5404 2.98078C9.0985 0.443765 6.26409 0.0256307 4.00076 1.0602C1.78471 2.07317 0.25 4.42527 0.25 7.13734H1.75ZM7.49742 17.5001C8.00965 17.9039 8.55954 18.3345 9.11682 18.6602C9.67386 18.9857 10.3096 19.2502 11 19.2502V17.7502C10.6904 17.7502 10.3261 17.6295 9.87361 17.3651C9.42132 17.1008 8.95208 16.7368 8.42605 16.3221L7.49742 17.5001ZM14.5026 17.5001C15.9292 16.3755 17.7528 15.0868 19.1833 13.476C20.6395 11.8363 21.75 9.80287 21.75 7.13734H20.25C20.25 9.33474 19.3508 11.0285 18.0617 12.48C16.7469 13.9605 15.0896 15.1273 13.574 16.3221L14.5026 17.5001ZM21.75 7.13734C21.75 4.42527 20.2153 2.07317 17.9992 1.0602C15.7359 0.0256307 12.9015 0.443765 10.4596 2.98078L11.5404 4.02098C13.5983 1.88282 15.7639 1.68772 17.3756 2.42444C19.0346 3.18277 20.25 4.98647 20.25 7.13734H21.75ZM13.574 16.3221C13.0479 16.7368 12.5787 17.1008 12.1264 17.3651C11.6739 17.6295 11.3096 17.7502 11 17.7502V19.2502C11.6904 19.2502 12.3261 18.9857 12.8832 18.6602C13.4405 18.3345 13.9903 17.9039 14.5026 17.5001L13.574 16.3221Z\", fill: \"#7C7F89\" }));\n};\n\nexport { HeartIcon };\n//# sourceMappingURL=HeartIcon.js.map\n","import React from 'react';\n\nconst RatingIcon = () => {\n    return React.createElement(\"svg\", { width: \"20\", height: \"19\", viewBox: \"0 0 20 19\", fill: \"none\", xmlns: \"http://www.w3.org/2000/svg\" },\n        React.createElement(\"path\", { fillRule: \"evenodd\", clipRule: \"evenodd\", d: \"M10.9963 18.1051L11.4932 17.2655C11.8786 16.6143 12.0713 16.2887 12.3809 16.1087C12.6905 15.9287 13.0802 15.9219 13.8597 15.9085C15.0104 15.8887 15.7322 15.8182 16.3375 15.5675C17.4605 15.1023 18.3528 14.21 18.8179 13.087C19.1668 12.2447 19.1668 11.1769 19.1668 9.04134V8.12467C19.1668 5.12403 19.1668 3.62371 18.4914 2.52156C18.1135 1.90484 17.595 1.38633 16.9783 1.00841C15.8761 0.333008 14.3758 0.333008 11.3752 0.333008H8.62516C5.62452 0.333008 4.1242 0.333008 3.02204 1.00841C2.40533 1.38633 1.88682 1.90484 1.5089 2.52156C0.833496 3.62371 0.833496 5.12403 0.833496 8.12467V9.04134C0.833496 11.1769 0.833496 12.2447 1.18238 13.087C1.64756 14.21 2.53982 15.1023 3.66286 15.5675C4.26814 15.8182 4.98986 15.8887 6.14061 15.9085C6.92009 15.9219 7.30983 15.9287 7.61939 16.1087C7.92894 16.2887 8.12166 16.6143 8.5071 17.2655L9.00403 18.1051C9.44693 18.8533 10.5534 18.8533 10.9963 18.1051ZM13.6668 9.49967C14.1731 9.49967 14.5835 9.08927 14.5835 8.58301C14.5835 8.07675 14.1731 7.66634 13.6668 7.66634C13.1606 7.66634 12.7502 8.07675 12.7502 8.58301C12.7502 9.08927 13.1606 9.49967 13.6668 9.49967ZM10.9168 8.58301C10.9168 9.08927 10.5064 9.49967 10.0002 9.49967C9.4939 9.49967 9.0835 9.08927 9.0835 8.58301C9.0835 8.07675 9.4939 7.66634 10.0002 7.66634C10.5064 7.66634 10.9168 8.07675 10.9168 8.58301ZM6.3335 9.49967C6.83976 9.49967 7.25016 9.08927 7.25016 8.58301C7.25016 8.07675 6.83976 7.66634 6.3335 7.66634C5.82723 7.66634 5.41683 8.07675 5.41683 8.58301C5.41683 9.08927 5.82723 9.49967 6.3335 9.49967Z\", fill: \"white\" }));\n};\n\nexport { RatingIcon };\n//# sourceMappingURL=RatingIcon.js.map\n","import React from 'react';\nimport Avatar from '../avatar/avatar.js';\n\nconst TypingIndicator = ({ avatarSrc = null }) => (React.createElement(\"div\", { className: \"mbw-typing-indicator-wrapper\" },\n    React.createElement(\"div\", { className: \"mbw-typing-indicator-avatar-container\" },\n        React.createElement(Avatar, { imgSrc: avatarSrc, type: \"round\", size: \"small\" })),\n    React.createElement(\"div\", { className: \"mbw-typing-indicator\" },\n        React.createElement(\"div\", { \"data-testid\": \"typing-indicator\", className: \"mbw-typing-indicator-loader\" },\n            React.createElement(\"div\", { className: \"mbw-typing-indicator-loader-circle\" }),\n            React.createElement(\"div\", { className: \"mbw-typing-indicator-loader-circle\" }),\n            React.createElement(\"div\", { className: \"mbw-typing-indicator-loader-circle\" })))));\n\nexport { TypingIndicator as default };\n//# sourceMappingURL=typing_indicator.js.map\n","import React from 'react';\nimport Title from '../../atoms/title/title.js';\n\nconst MarketingBanner = ({ offers, offerIcon }) => {\n    const renderTitle = (offer) => {\n        let wrapperClassName = \"mbw-marketing-banner-item-wrapper\";\n        if (offers.length === 1) {\n            wrapperClassName += \" mbw-marketing-banner-wraper-single-item\";\n        }\n        return (React.createElement(\"div\", { className: wrapperClassName },\n            React.createElement(\"div\", { className: \"mbw-marketing-banner-title\" },\n                React.createElement(Title, { fontStyle: \"heading-h4\" }, offer.title),\n                React.createElement(Title, { fontStyle: \"content-small\" }, offer.subtitle))));\n    };\n    const contentHolderClass = \"mbw-marketing-banner-content-holder\";\n    return (React.createElement(\"div\", { className: \"mbw-marketing-banner-wrapper\" },\n        React.createElement(\"div\", { className: contentHolderClass },\n            renderTitle(offers[0]),\n            React.createElement(\"div\", { className: \"mbw-marketing-banner-icon\" }, offerIcon),\n            offers[1] && renderTitle(offers[1]))));\n};\n\nexport { MarketingBanner as default };\n//# sourceMappingURL=marketing_banner.js.map\n","import React from 'react';\n\nconst closeIcon = (React.createElement(\"path\", { d: \"M19.4999 5.00006L5.5 19M5.49994 5L19.4999 18.9999\", stroke: \"#121212\", strokeWidth: \"1.5\", strokeLinecap: \"round\" }));\nconst backIcon = (React.createElement(\"path\", { d: \"M20 12H4M4 12L10 6M4 12L10 18\", stroke: \"#121212\", strokeWidth: \"1.5\", strokeLinecap: \"round\", strokeLinejoin: \"round\" }));\n\nexport { backIcon, closeIcon };\n//# sourceMappingURL=icons.js.map\n","import React, { useRef, useEffect, useCallback } from 'react';\nimport { createPortal } from 'react-dom';\nimport Icon from '../../atoms/icon/icon.js';\nimport { backIcon, closeIcon } from './assets/icons.js';\n\nconst Popover = ({ isOpen, children, insertNode, width, closeOnBackdropClick, renderTitle, renderCloseButton, renderBackButton, renderTopOverlay, onCloseButtonClick, onBackButtonClick }) => {\n    const dialogRef = useRef(null);\n    useEffect(() => {\n        isOpen ? dialogRef.current?.showModal() : dialogRef.current?.close();\n    }, [isOpen]);\n    const handleBackdropClick = useCallback((e) => {\n        if (!e.currentTarget.matches(\"dialog\"))\n            return;\n        const { top, bottom, left, right } = e.currentTarget.getBoundingClientRect();\n        const { clientX: mouseX, clientY: mouseY } = e;\n        if (mouseX === 0 && mouseY === 0)\n            return;\n        const clickedOutsideOfModalBox = (mouseX <= left || mouseX >= right ||\n            mouseY <= top || mouseY >= bottom);\n        if (clickedOutsideOfModalBox)\n            dialogRef.current?.close();\n    }, [dialogRef]);\n    const prepareBackButton = () => {\n        if (renderBackButton)\n            return renderBackButton();\n        if (!onBackButtonClick)\n            return null;\n        return (React.createElement(\"div\", { className: \"mbw-popover-back-btn-container\", \"data-testid\": \"mbw-popover-back-btn-container\" },\n            React.createElement(\"button\", { \"aria-label\": \"back\", className: \"mbw-popover-back-btn\", onClick: onBackButtonClick },\n                React.createElement(Icon, null, backIcon))));\n    };\n    const prepareCloseButton = () => {\n        if (renderCloseButton)\n            return renderCloseButton();\n        if (!onCloseButtonClick)\n            return null;\n        return (React.createElement(\"div\", { className: \"mbw-popover-close-btn-container\", \"data-testid\": \"mbw-popover-close-btn-container\" },\n            React.createElement(\"button\", { \"aria-label\": \"close\", className: \"mbw-popover-close-btn\", onClick: onCloseButtonClick },\n                React.createElement(Icon, null, closeIcon))));\n    };\n    return (React.createElement(React.Fragment, null, createPortal(React.createElement(\"dialog\", { ref: dialogRef, onClick: closeOnBackdropClick ? handleBackdropClick : undefined, className: \"mbw-popover-dialog\", \"data-testid\": \"mbw-popover-dialog\", style: { \"--mbw-popover-width\": width } },\n        renderTopOverlay && (React.createElement(\"div\", { className: \"mbw-popover-top-overlay-container\", \"data-testid\": \"mbw-popover-top-overlay-container\" }, renderTopOverlay())),\n        prepareCloseButton(),\n        React.createElement(\"div\", { className: \"mbw-popover-title-container\", \"data-testid\": \"mbw-popover-title-container\" },\n            prepareBackButton(),\n            React.createElement(\"div\", { className: \"mbw-popover-title\", \"data-testid\": \"mbw-popover-title\" }, renderTitle())),\n        React.createElement(\"div\", { className: \"mbw-popover-content\", \"data-testid\": \"mbw-popover-content\" }, children)), insertNode || document.body)));\n};\n\nexport { Popover as default };\n//# sourceMappingURL=popover.js.map\n","import React from 'react';\n\nconst arrowImg = (React.createElement(\"svg\", { width: \"24\", height: \"24\", viewBox: \"0 0 24 24\", fill: \"red\", xmlns: \"http://www.w3.org/2000/svg\" },\n    React.createElement(\"path\", { d: \"M9 19L15 12L9 5\", stroke: \"white\", strokeWidth: \"1.5\", strokeLinecap: \"round\", strokeLinejoin: \"round\" })));\n\nexport { arrowImg };\n//# sourceMappingURL=arrow_img.js.map\n","import React from 'react';\nimport { arrowImg } from './img/arrow_img.js';\nimport Icon from '../icon/icon.js';\nimport Title from '../title/title.js';\n\nconst renderArrow = (active, couponType) => {\n    if (active) {\n        return (React.createElement(Icon, { className: `mbw-coupon-arrow-${couponType}`, dataTestId: \"mbw-coupon-arrow\" }, arrowImg));\n    }\n    return null;\n};\nconst Coupon = ({ couponType = \"small\", active = true, discountText, icon, description, badge }) => {\n    const couponStyleByState = active ? \"mbw-coupon-active\" : \"mbw-coupon-inactive\";\n    let titleByType;\n    switch (couponType) {\n        case \"large\":\n            titleByType = \"heading-h4\";\n            break;\n        case \"medium\":\n            titleByType = \"heading-h5\";\n            break;\n        case \"small\":\n            titleByType = \"content-medium\";\n            break;\n    }\n    const renderCoupon = () => (React.createElement(\"div\", { \"data-testid\": \"mbw-coupon-container\", className: `mbw-coupon-container-${couponType} ${couponStyleByState}` },\n        badge && React.createElement(\"div\", { \"data-testid\": \"mbw-coupon-badge\", className: \"mbw-coupon-badge\" }, badge),\n        React.createElement(\"div\", { \"data-testid\": \"mbw-coupon-content\", className: \"mbw-coupon-content\" },\n            icon && React.createElement(Icon, { className: `mbw-coupon-icon-${couponType}`, dataTestId: \"mbw-coupon-icon\" }, icon),\n            React.createElement(\"div\", { className: \"mbw-coupon-info-container\", \"data-testid\": \"mbw-coupon-info-container\" },\n                React.createElement(\"div\", { className: `mbw-coupon-info-${couponType}`, \"data-testid\": \"mbw-coupon-info\" },\n                    React.createElement(Title, { fontStyle: titleByType, bold: true }, discountText),\n                    description && React.createElement(Title, { fontStyle: \"caption-1\" }, description)),\n                renderArrow(active, couponType)))));\n    return renderCoupon();\n};\n\nexport { Coupon as default };\n//# sourceMappingURL=coupon.js.map\n","import n from '../node_modules/rollup-plugin-styles/dist/runtime/inject-css.js';\n\nvar css = \":root{--mbw-general-light:#fff;--mbw-general-dark:#27292f;--mbw-background-primary:#fff;--mbw-background-secondary:#f7f7f7;--mbw-text-primary:#121212;--mbw-text-secondary:#636570;--mbw-text-tertiary:#fff;--mbw-default-border:var(--mbw-default-border,#eaeaea);--mbw-icon-primarym:#121212;--mbw-icon-secondary:#636570;--mbw-icon-tertiary:#fff;--mbw-button-primary:#8755f4;--mbw-button-primary-hover:#a479ff;--mbw-button-primary-dissabled:#c3c5ca;--mbw-button-secondary:#121212;--mbw-button-secondary-hover:#8755f4;--mbw-button-secondary-disabled:#636570;--mbw-button-link:#8755f4;--mbw-button-link-hover:rgba(135,85,244,.102);--mbw-button-link-disabled:#f7f7f7;--mbw-red:#ff5a5a;--mbw-orange:#ff8717;--mbw-yellow:#ffb222;--mbw-green:#62dd13;--mbw-sky-blue:#1cb4ff;--mbw-blue:#4f60ff;--mbw-purple:#8755f4;--mbw-bg-psychic-readings:#e9dded;--mbw-bg-love-readings:#f1dede;--mbw-bg-tarot-readings:#dae7f1;--mbw-bg-palm-readings:#dbebdd;--mbw-bg-oracle-guidence:#f0ebd2;--mbw-bg-astrology-horoscopes:#d8ecee;--mbw-bg-angel-insights:#f2dcec;--mbw-bg-dream-analysis:#e2e2fa;--mbw-bg-spiritual-medium:#dbebdd;--mbw-psychic-readings:#9356a5;--mbw-love-readings:#ba5a5a;--mbw-tarot-readings:#4787b9;--mbw-palm-readings:#499c56;--mbw-oracle-guidence:#b69d1e;--mbw-astrology-horoscopes:#3e9ea8;--mbw-angel-insight:#bf50a0;--mbw-dream-analysis:#7070e5;--mbw-spiritual-medium:#499c56;--mbw-bg-psychic-readings-gradient:#9356a50a;--mbw-bg-love-readings-gradient:#ba5a5a0a;--mbw-bg-tarot-readings-gradient:#4787b90a;--mbw-bg-palm-readings-gradient:#499c560a;--mbw-bg-oracle-guidence-gradient:#b69d1e0a;--mbw-bg-astrology-horoscopes-gradient:#3e9ea80a;--mbw-bg-angel-insights-gradient:#bf50a00a;--mbw-bg-dream-analysis-gradient:#7070e50a;--mbw-switch-background-color:#d0d0d0;--mbw-switch-background-color-before:#fff;--mbw-switch-background-color-checked:#62dd13;--mbw-chat-color:#62dd13;--mbw-voice-color:#8755f4;--mbw-video-color:#1cb4ff;--mbw-default-shadow-color:#f7f7f7;--mbw-input-shadow-color:rgba(0,0,0,.08);--mbw-line-height-small:1.3;--mbw-line-height-medium:1.4;--mbw-line-height-large:1.5;--mbw-fs-jumbo-lg:4rem;--mbw-fs-h1-lg:3rem;--mbw-fs-h2-lg:2.125rem;--mbw-fs-h3-lg:1.75rem;--mbw-fs-h4-lg:1.375rem;--mbw-fs-h5-lg:1.2rem;--mbw-fs-h6-lg:1.125rem;--mbw-fs-default-lg:1.063rem;--mbw-fs-medium-lg:0.938rem;--mbw-fs-small-lg:0.875rem;--mbw-fs-caption-1-lg:0.75rem;--mbw-fs-caption-2-lg:0.625rem;--mbw-fs-jumbo-md:3.375rem;--mbw-fs-h1-md:2.375rem;--mbw-fs-h2-md:1.75rem;--mbw-fs-h3-md:1.5rem;--mbw-fs-h4-md:1.2rem;--mbw-fs-h5-md:1.125rem;--mbw-fs-h6-md:1.063rem;--mbw-fs-default-md:1rem;--mbw-fs-medium-md:0.938rem;--mbw-fs-small-md:0.875rem;--mbw-fs-caption-1-md:0.75rem;--mbw-fs-caption-2-md:0.625rem;--mbw-fs-jumbo-sm:1.75rem;--mbw-fs-h1-sm:1.75rem;--mbw-fs-h2-sm:1.5rem;--mbw-fs-h3-sm:1.375rem;--mbw-fs-h4-sm:1.125rem;--mbw-fs-h5-sm:1rem;--mbw-fs-h6-sm:0.938rem;--mbw-fs-default-sm:0.938rem;--mbw-fs-medium-sm:0.875rem;--mbw-fs-small-sm:0.813rem;--mbw-fs-caption-1-sm:0.75rem;--mbw-fs-caption-2-sm:0.625rem;--mbw-duration-item-selected-bg-color:rgba(135,85,244,.102);--mbw-duration-item-selected-fg-color:#8755f4;--mbw-duration-item-new-user-mobile-selected-price-bg-color:#62dd13}*,:after,:before{box-sizing:border-box}\";\nn(css,{});\n\nexport { css };\n//# sourceMappingURL=global.scss.js.map\n","const pemMapping = {\n    \"41px\": \"41px\",\n    \"34px\": \"34px\",\n    \"28px\": \"28px\",\n    \"25px\": \"25px\",\n    \"22px\": \"22px\",\n    \"20px\": \"20px\",\n    \"18px\": \"18px\",\n    \"17px\": \"17px\",\n    \"16px\": \"16px\",\n    \"15px\": \"15px\",\n    \"14px\": \"14px\",\n    \"13px\": \"13px\",\n    \"12px\": \"12px\",\n    \"10px\": \"10px\",\n    \"none\": \"none\"\n};\nvar pem_mapping = Object.freeze(pemMapping);\n\nexport { pem_mapping as default };\n//# sourceMappingURL=pem_mapping.js.map\n","const FontStyling = {\n    \"heading-jumbo\": \"heading-jumbo\",\n    \"heading-h1\": \"heading-h1\",\n    \"heading-h2\": \"heading-h2\",\n    \"heading-h3\": \"heading-h3\",\n    \"heading-h4\": \"headline\",\n    \"heading-h5\": \"heading-h5\",\n    \"heading-h6\": \"heading-h6\",\n    \"content-default\": \"content-default\",\n    \"content-medium\": \"content-medium\",\n    \"content-small\": \"content-small\",\n    \"caption-1\": \"caption-1\",\n    \"caption-2\": \"caption-2\"\n};\nvar font_styling = Object.freeze(FontStyling);\n\nexport { font_styling as default };\n//# sourceMappingURL=font_styling.js.map\n","const ButtonTypes = {\n    \"primary\": \"primary\",\n    \"secondary\": \"secondary\",\n    \"link\": \"link\",\n    \"title\": \"title\"\n};\nvar button = Object.freeze(ButtonTypes);\n\nexport { button as default };\n//# sourceMappingURL=button.js.map\n","const AvatarTypes = Object.freeze({\n    \"round\": \"round\",\n    \"rectangle\": \"rectangle\"\n});\nconst AvatarSize = Object.freeze({\n    \"large\": \"large\",\n    \"medium\": \"medium\",\n    \"small\": \"small\",\n    \"extra-small\": \"extra-small\"\n});\nvar AvatarProps = { AvatarTypes, AvatarSize };\n\nexport { AvatarProps as default };\n//# sourceMappingURL=avatar.js.map\n","const StatusIndicatorStatus = Object.freeze({\n    \"online\": \"online\",\n    \"offline\": \"offline\",\n    \"busy\": \"busy\"\n});\nconst StatusIndicatorSizes = Object.freeze({\n    \"big\": \"big\",\n    \"default\": \"default\",\n    \"medium\": \"medium\",\n    \"small\": \"small\",\n    \"extra-small\": \"extra-small\",\n    \"extra-small-1\": \"extra-small-1\"\n});\nvar StatusIndicatorProps = { StatusIndicatorStatus, StatusIndicatorSizes };\n\nexport { StatusIndicatorProps as default };\n//# sourceMappingURL=status_indicator.js.map\n","const SpecialityTypes = Object.freeze({\n    \"standard\": \"standard\",\n    \"button\": \"button\",\n    \"advisor-profile\": \"advisor-profile\"\n});\nconst SpecialityKinds = Object.freeze({\n    \"love_readings\": \"love-readings\",\n    \"psychic_readings\": \"psychic-readings\",\n    \"tarot_readings\": \"tarot-readings\",\n    \"astrology_horoscopes\": \"astrology-horoscopes\",\n    \"palm_readings\": \"palm-readings\",\n    \"angel_insights\": \"angel-insights\",\n    \"oracle_guidance\": \"oracle-guidance\",\n    \"dream_analysis\": \"dream-analysis\",\n    \"spiritual_medium\": \"spiritual-medium\"\n});\nvar SpecialityProps = { SpecialityTypes, SpecialityKinds };\n\nexport { SpecialityProps as default };\n//# sourceMappingURL=speciality.js.map\n","const MyOrdersAdvisorCellTypes = {\n    \"completed\": \"completed\",\n    \"need-review\": \"need-review\"\n};\nvar my_orders_advisor_cell_types = Object.freeze(MyOrdersAdvisorCellTypes);\n\nexport { my_orders_advisor_cell_types as default };\n//# sourceMappingURL=my_orders_advisor_cell_types.js.map\n","const ReviewTypes = {\n    \"positive\": \"positive\",\n    \"negative\": \"negative\"\n};\nvar review_type = Object.freeze(ReviewTypes);\n\nexport { review_type as default };\n//# sourceMappingURL=review_type.js.map\n","const LabelTypes = {\n    \"default\": \"default\",\n    \"red\": \"red\",\n    \"green\": \"green\",\n    \"purple\": \"purple\",\n    \"gray\": \"gray\"\n};\nvar label_types = Object.freeze(LabelTypes);\n\nexport { label_types as default };\n//# sourceMappingURL=label_types.js.map\n","const LabelSizings = {\n    \"small\": \"small\",\n    \"large\": \"large\"\n};\nvar label_sizings = Object.freeze(LabelSizings);\n\nexport { label_sizings as default };\n//# sourceMappingURL=label_sizings.js.map\n","const OrderTypes = {\n    \"live-chat\": \"live-chat\",\n    \"video-call\": \"video-call\",\n    \"voice-call\": \"voice-call\"\n};\nvar order = Object.freeze(OrderTypes);\n\nexport { order as default };\n//# sourceMappingURL=order.js.map\n","const FilterTabTypes = {\n    \"filter\": \"filter\",\n    \"hero\": \"hero\"\n};\nvar filter_tab = Object.freeze(FilterTabTypes);\n\nexport { filter_tab as default };\n//# sourceMappingURL=filter_tab.js.map\n","const PlayButtonTypes = {\n    \"default\": \"default\",\n    \"big\": \"big\"\n};\nvar play_button = Object.freeze(PlayButtonTypes);\n\nexport { play_button as default };\n//# sourceMappingURL=play_button.js.map\n","const RatingTypes = {\n    \"big\": \"big\",\n    \"medium\": \"medium\",\n    \"small\": \"small\",\n    \"large\": \"large\",\n    \"default\": \"default\"\n};\nvar rating = Object.freeze(RatingTypes);\n\nexport { rating as default };\n//# sourceMappingURL=rating.js.map\n","const ChannelsCardTypes = {\n    \"big\": \"big\",\n    \"medium\": \"medium\",\n    \"small\": \"small\"\n};\nvar channels_card = Object.freeze(ChannelsCardTypes);\n\nexport { channels_card as default };\n//# sourceMappingURL=channels_card.js.map\n","const AdvisorListCardTypes = {\n    \"large\": \"large\",\n    \"medium\": \"medium\",\n    \"small\": \"small\"\n};\nvar advisor_list_card = Object.freeze(AdvisorListCardTypes);\n\nexport { advisor_list_card as default };\n//# sourceMappingURL=advisor_list_card.js.map\n","const LiveModesPricesTypes = {\n    \"big\": \"big\",\n    \"medium\": \"medium\",\n    \"small\": \"small\",\n    \"default\": \"default\"\n};\nvar live_modes_prices = Object.freeze(LiveModesPricesTypes);\n\nexport { live_modes_prices as default };\n//# sourceMappingURL=live_modes_prices.js.map\n","const ReadingSinceAndCountTypes = {\n    \"big\": \"big\",\n    \"medium\": \"medium\",\n    \"default\": \"default\",\n    \"small\": \"small\",\n    \"extra-small\": \"extra-small\"\n};\nvar reading_since_and_count = Object.freeze(ReadingSinceAndCountTypes);\n\nexport { reading_since_and_count as default };\n//# sourceMappingURL=reading_since_and_count.js.map\n","const StaffPickTypes = {\n    \"large\": \"large\",\n    \"small\": \"small\"\n};\nvar staff_pick = Object.freeze(StaffPickTypes);\n\nexport { staff_pick as default };\n//# sourceMappingURL=staff_pick.js.map\n","const MethodCelleTypes = {\n    \"disabled\": \"disabled\",\n    \"default\": \"default\",\n    \"highlighted\": \"highlighted\",\n    \"error\": \"error\",\n    \"success\": \"success\"\n};\nvar method_cell = Object.freeze(MethodCelleTypes);\n\nexport { method_cell as default };\n//# sourceMappingURL=method_cell.js.map\n","const MyOrdersDetailsItemTypes = {\n    \"chat\": \"chat\",\n    \"voice\": \"voice\"\n};\nvar my_orders_details_item_type = Object.freeze(MyOrdersDetailsItemTypes);\n\nexport { my_orders_details_item_type as default };\n//# sourceMappingURL=my_orders_details_item_type.js.map\n","const PaymentMethodDetailsTypes = {\n    \"web\": \"web\",\n    \"mobile-app\": \"mobile-app\"\n};\nvar payment_method_details = Object.freeze(PaymentMethodDetailsTypes);\n\nexport { payment_method_details as default };\n//# sourceMappingURL=payment_method_details.js.map\n","const CouponTypes = {\n    \"small\": \"small\",\n    \"medium\": \"medium\",\n    \"large\": \"large\"\n};\nvar coupon_types = Object.freeze(CouponTypes);\n\nexport { coupon_types as default };\n//# sourceMappingURL=coupon_types.js.map\n","const ChannelButtonTypes = {\n    \"chat\": \"chat\",\n    \"voiceCall\": \"voiceCall\",\n    \"videoCall\": \"videoCall\"\n};\nvar profile_channel_button = Object.freeze(ChannelButtonTypes);\n\nexport { profile_channel_button as default };\n//# sourceMappingURL=profile_channel_button.js.map\n","export { default as PemMapping } from './pem_papping/pem_mapping.js';\nexport { default as FontStyling } from './font/font_styling.js';\nexport { default as ButtonTypes } from './button/button.js';\nimport AvatarProps from './avatar/avatar.js';\nimport StatusIndicatorProps from './status_indicator/status_indicator.js';\nimport SpecialityProps from './speciality/speciality.js';\nexport { default as MyOrdersAdvisorCellTypes } from './my_orders_advisor_cell_types/my_orders_advisor_cell_types.js';\nexport { default as ReviewTypes } from './review_type/review_type.js';\nexport { default as LabelTypes } from './label/label_types.js';\nexport { default as LabelSizings } from './label/label_sizings.js';\nexport { default as OrderTypes } from './order/order.js';\nexport { default as FilterTabTypes } from './filter_tab/filter_tab.js';\nexport { default as PlayButtonTypes } from './play_button/play_button.js';\nexport { default as RatingTypes } from './rating/rating.js';\nexport { default as ChannelsCardTypes } from './channels_card/channels_card.js';\nexport { default as AdvisorListCardTypes } from './advisor_list_card/advisor_list_card.js';\nexport { default as LiveModesPricesTypes } from './live_modes_prices/live_modes_prices.js';\nexport { default as ReadingSinceAndCountTypes } from './reading_since_and_count/reading_since_and_count.js';\nexport { default as StaffPickTypes } from './staff_pick/staff_pick.js';\nexport { default as MethodCelleTypes } from './method_cell/method_cell.js';\nexport { default as MyOrdersDetailsItemTypes } from './my_orders_details_item/my_orders_details_item_type.js';\nexport { default as PaymentMethodDetailsTypes } from './payment_method_details/payment_method_details.js';\nexport { default as CouponTypes } from './coupon/coupon_types.js';\nexport { default as ChannelButtonTypes } from './profile_channel_button/profile_channel_button.js';\n\nconst AvatarTypes = AvatarProps.AvatarTypes;\nconst AvatarSizes = AvatarProps.AvatarSize;\nconst StatusIndicatorStatus = StatusIndicatorProps.StatusIndicatorStatus;\nconst StatusIndicatorSizes = StatusIndicatorProps.StatusIndicatorSizes;\nconst SpecialityTypes = SpecialityProps.SpecialityTypes;\nconst SpecialityKinds = SpecialityProps.SpecialityKinds;\n\nexport { AvatarSizes, AvatarTypes, SpecialityKinds, SpecialityTypes, StatusIndicatorSizes, StatusIndicatorStatus };\n//# sourceMappingURL=index.js.map\n","(function(f){if(typeof exports===\"object\"&&typeof module!==\"undefined\"){module.exports=f()}else if(typeof define===\"function\"&&define.amd){define([],f)}else{var g;if(typeof window!==\"undefined\"){g=window}else if(typeof global!==\"undefined\"){g=global}else if(typeof self!==\"undefined\"){g=self}else{g=this}g.Bugsnag = f()}})(function(){var define,module,exports;\nvar _$breadcrumbTypes_8 = ['navigation', 'request', 'process', 'log', 'user', 'state', 'error', 'manual'];\n\n// Array#reduce\nvar _$reduce_17 = function (arr, fn, accum) {\n  var val = accum;\n\n  for (var i = 0, len = arr.length; i < len; i++) {\n    val = fn(val, arr[i], i, arr);\n  }\n\n  return val;\n};\n\n/* removed: var _$reduce_17 = require('./reduce'); */; // Array#filter\n\n\nvar _$filter_12 = function (arr, fn) {\n  return _$reduce_17(arr, function (accum, item, i, arr) {\n    return !fn(item, i, arr) ? accum : accum.concat(item);\n  }, []);\n};\n\n/* removed: var _$reduce_17 = require('./reduce'); */; // Array#includes\n\n\nvar _$includes_13 = function (arr, x) {\n  return _$reduce_17(arr, function (accum, item, i, arr) {\n    return accum === true || item === x;\n  }, false);\n};\n\n// Array#isArray\nvar _$isArray_14 = function (obj) {\n  return Object.prototype.toString.call(obj) === '[object Array]';\n};\n\n/* eslint-disable-next-line no-prototype-builtins */\nvar _hasDontEnumBug = !{\n  toString: null\n}.propertyIsEnumerable('toString');\n\nvar _dontEnums = ['toString', 'toLocaleString', 'valueOf', 'hasOwnProperty', 'isPrototypeOf', 'propertyIsEnumerable', 'constructor']; // Object#keys\n\nvar _$keys_15 = function (obj) {\n  // stripped down version of\n  // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/Keys\n  var result = [];\n  var prop;\n\n  for (prop in obj) {\n    if (Object.prototype.hasOwnProperty.call(obj, prop)) result.push(prop);\n  }\n\n  if (!_hasDontEnumBug) return result;\n\n  for (var i = 0, len = _dontEnums.length; i < len; i++) {\n    if (Object.prototype.hasOwnProperty.call(obj, _dontEnums[i])) result.push(_dontEnums[i]);\n  }\n\n  return result;\n};\n\nvar _$intRange_24 = function (min, max) {\n  if (min === void 0) {\n    min = 1;\n  }\n\n  if (max === void 0) {\n    max = Infinity;\n  }\n\n  return function (value) {\n    return typeof value === 'number' && parseInt('' + value, 10) === value && value >= min && value <= max;\n  };\n};\n\n/* removed: var _$filter_12 = require('../es-utils/filter'); */;\n\n/* removed: var _$isArray_14 = require('../es-utils/is-array'); */;\n\nvar _$listOfFunctions_25 = function (value) {\n  return typeof value === 'function' || _$isArray_14(value) && _$filter_12(value, function (f) {\n    return typeof f === 'function';\n  }).length === value.length;\n};\n\nvar _$stringWithLength_26 = function (value) {\n  return typeof value === 'string' && !!value.length;\n};\n\nvar _$config_5 = {};\n/* removed: var _$filter_12 = require('./lib/es-utils/filter'); */;\n\n/* removed: var _$reduce_17 = require('./lib/es-utils/reduce'); */;\n\n/* removed: var _$keys_15 = require('./lib/es-utils/keys'); */;\n\n/* removed: var _$isArray_14 = require('./lib/es-utils/is-array'); */;\n\n/* removed: var _$includes_13 = require('./lib/es-utils/includes'); */;\n\n/* removed: var _$intRange_24 = require('./lib/validators/int-range'); */;\n\n/* removed: var _$stringWithLength_26 = require('./lib/validators/string-with-length'); */;\n\n/* removed: var _$listOfFunctions_25 = require('./lib/validators/list-of-functions'); */;\n\n/* removed: var _$breadcrumbTypes_8 = require('./lib/breadcrumb-types'); */;\n\nvar defaultErrorTypes = function () {\n  return {\n    unhandledExceptions: true,\n    unhandledRejections: true\n  };\n};\n\n_$config_5.schema = {\n  apiKey: {\n    defaultValue: function () {\n      return null;\n    },\n    message: 'is required',\n    validate: _$stringWithLength_26\n  },\n  appVersion: {\n    defaultValue: function () {\n      return undefined;\n    },\n    message: 'should be a string',\n    validate: function (value) {\n      return value === undefined || _$stringWithLength_26(value);\n    }\n  },\n  appType: {\n    defaultValue: function () {\n      return undefined;\n    },\n    message: 'should be a string',\n    validate: function (value) {\n      return value === undefined || _$stringWithLength_26(value);\n    }\n  },\n  autoDetectErrors: {\n    defaultValue: function () {\n      return true;\n    },\n    message: 'should be true|false',\n    validate: function (value) {\n      return value === true || value === false;\n    }\n  },\n  enabledErrorTypes: {\n    defaultValue: function () {\n      return defaultErrorTypes();\n    },\n    message: 'should be an object containing the flags { unhandledExceptions:true|false, unhandledRejections:true|false }',\n    allowPartialObject: true,\n    validate: function (value) {\n      // ensure we have an object\n      if (typeof value !== 'object' || !value) return false;\n      var providedKeys = _$keys_15(value);\n      var defaultKeys = _$keys_15(defaultErrorTypes()); // ensure it only has a subset of the allowed keys\n\n      if (_$filter_12(providedKeys, function (k) {\n        return _$includes_13(defaultKeys, k);\n      }).length < providedKeys.length) return false; // ensure all of the values are boolean\n\n      if (_$filter_12(_$keys_15(value), function (k) {\n        return typeof value[k] !== 'boolean';\n      }).length > 0) return false;\n      return true;\n    }\n  },\n  onError: {\n    defaultValue: function () {\n      return [];\n    },\n    message: 'should be a function or array of functions',\n    validate: _$listOfFunctions_25\n  },\n  onSession: {\n    defaultValue: function () {\n      return [];\n    },\n    message: 'should be a function or array of functions',\n    validate: _$listOfFunctions_25\n  },\n  onBreadcrumb: {\n    defaultValue: function () {\n      return [];\n    },\n    message: 'should be a function or array of functions',\n    validate: _$listOfFunctions_25\n  },\n  endpoints: {\n    defaultValue: function () {\n      return {\n        notify: 'https://notify.bugsnag.com',\n        sessions: 'https://sessions.bugsnag.com'\n      };\n    },\n    message: 'should be an object containing endpoint URLs { notify, sessions }',\n    validate: function (val) {\n      return (// first, ensure it's an object\n        val && typeof val === 'object' && // notify and sessions must always be set\n        _$stringWithLength_26(val.notify) && _$stringWithLength_26(val.sessions) && // ensure no keys other than notify/session are set on endpoints object\n        _$filter_12(_$keys_15(val), function (k) {\n          return !_$includes_13(['notify', 'sessions'], k);\n        }).length === 0\n      );\n    }\n  },\n  autoTrackSessions: {\n    defaultValue: function (val) {\n      return true;\n    },\n    message: 'should be true|false',\n    validate: function (val) {\n      return val === true || val === false;\n    }\n  },\n  enabledReleaseStages: {\n    defaultValue: function () {\n      return null;\n    },\n    message: 'should be an array of strings',\n    validate: function (value) {\n      return value === null || _$isArray_14(value) && _$filter_12(value, function (f) {\n        return typeof f === 'string';\n      }).length === value.length;\n    }\n  },\n  releaseStage: {\n    defaultValue: function () {\n      return 'production';\n    },\n    message: 'should be a string',\n    validate: function (value) {\n      return typeof value === 'string' && value.length;\n    }\n  },\n  maxBreadcrumbs: {\n    defaultValue: function () {\n      return 25;\n    },\n    message: 'should be a number ≤100',\n    validate: function (value) {\n      return _$intRange_24(0, 100)(value);\n    }\n  },\n  enabledBreadcrumbTypes: {\n    defaultValue: function () {\n      return _$breadcrumbTypes_8;\n    },\n    message: \"should be null or a list of available breadcrumb types (\" + _$breadcrumbTypes_8.join(',') + \")\",\n    validate: function (value) {\n      return value === null || _$isArray_14(value) && _$reduce_17(value, function (accum, maybeType) {\n        if (accum === false) return accum;\n        return _$includes_13(_$breadcrumbTypes_8, maybeType);\n      }, true);\n    }\n  },\n  context: {\n    defaultValue: function () {\n      return undefined;\n    },\n    message: 'should be a string',\n    validate: function (value) {\n      return value === undefined || typeof value === 'string';\n    }\n  },\n  user: {\n    defaultValue: function () {\n      return {};\n    },\n    message: 'should be an object with { id, email, name } properties',\n    validate: function (value) {\n      return value === null || value && _$reduce_17(_$keys_15(value), function (accum, key) {\n        return accum && _$includes_13(['id', 'email', 'name'], key);\n      }, true);\n    }\n  },\n  metadata: {\n    defaultValue: function () {\n      return {};\n    },\n    message: 'should be an object',\n    validate: function (value) {\n      return typeof value === 'object' && value !== null;\n    }\n  },\n  logger: {\n    defaultValue: function () {\n      return undefined;\n    },\n    message: 'should be null or an object with methods { debug, info, warn, error }',\n    validate: function (value) {\n      return !value || value && _$reduce_17(['debug', 'info', 'warn', 'error'], function (accum, method) {\n        return accum && typeof value[method] === 'function';\n      }, true);\n    }\n  },\n  redactedKeys: {\n    defaultValue: function () {\n      return ['password'];\n    },\n    message: 'should be an array of strings|regexes',\n    validate: function (value) {\n      return _$isArray_14(value) && value.length === _$filter_12(value, function (s) {\n        return typeof s === 'string' || s && typeof s.test === 'function';\n      }).length;\n    }\n  },\n  plugins: {\n    defaultValue: function () {\n      return [];\n    },\n    message: 'should be an array of plugin objects',\n    validate: function (value) {\n      return _$isArray_14(value) && value.length === _$filter_12(value, function (p) {\n        return p && typeof p === 'object' && typeof p.load === 'function';\n      }).length;\n    }\n  },\n  featureFlags: {\n    defaultValue: function () {\n      return [];\n    },\n    message: 'should be an array of objects that have a \"name\" property',\n    validate: function (value) {\n      return _$isArray_14(value) && value.length === _$filter_12(value, function (feature) {\n        return feature && typeof feature === 'object' && typeof feature.name === 'string';\n      }).length;\n    }\n  }\n};\n\n// extends helper from babel\n// https://github.com/babel/babel/blob/916429b516e6466fd06588ee820e40e025d7f3a3/packages/babel-helpers/src/helpers.js#L377-L393\nvar _$assign_11 = function (target) {\n  for (var i = 1; i < arguments.length; i++) {\n    var source = arguments[i];\n\n    for (var key in source) {\n      if (Object.prototype.hasOwnProperty.call(source, key)) {\n        target[key] = source[key];\n      }\n    }\n  }\n\n  return target;\n};\n\n/* removed: var _$reduce_17 = require('./reduce'); */; // Array#map\n\n\nvar _$map_16 = function (arr, fn) {\n  return _$reduce_17(arr, function (accum, item, i, arr) {\n    return accum.concat(fn(item, i, arr));\n  }, []);\n};\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nvar schema = _$config_5.schema;\n\n/* removed: var _$map_16 = require('@bugsnag/core/lib/es-utils/map'); */;\n\n/* removed: var _$assign_11 = require('@bugsnag/core/lib/es-utils/assign'); */;\n\nvar _$config_1 = {\n  releaseStage: _$assign_11({}, schema.releaseStage, {\n    defaultValue: function () {\n      if (/^localhost(:\\d+)?$/.test(window.location.host)) return 'development';\n      return 'production';\n    }\n  }),\n  appType: _extends({}, schema.appType, {\n    defaultValue: function () {\n      return 'browser';\n    }\n  }),\n  logger: _$assign_11({}, schema.logger, {\n    defaultValue: function () {\n      return (// set logger based on browser capability\n        typeof console !== 'undefined' && typeof console.debug === 'function' ? getPrefixedConsole() : undefined\n      );\n    }\n  })\n};\n\nvar getPrefixedConsole = function () {\n  var logger = {};\n  var consoleLog = console.log;\n  _$map_16(['debug', 'info', 'warn', 'error'], function (method) {\n    var consoleMethod = console[method];\n    logger[method] = typeof consoleMethod === 'function' ? consoleMethod.bind(console, '[bugsnag]') : consoleLog.bind(console, '[bugsnag]');\n  });\n  return logger;\n};\n\nvar Breadcrumb = /*#__PURE__*/function () {\n  function Breadcrumb(message, metadata, type, timestamp) {\n    if (timestamp === void 0) {\n      timestamp = new Date();\n    }\n\n    this.type = type;\n    this.message = message;\n    this.metadata = metadata;\n    this.timestamp = timestamp;\n  }\n\n  var _proto = Breadcrumb.prototype;\n\n  _proto.toJSON = function toJSON() {\n    return {\n      type: this.type,\n      name: this.message,\n      timestamp: this.timestamp,\n      metaData: this.metadata\n    };\n  };\n\n  return Breadcrumb;\n}();\n\nvar _$Breadcrumb_3 = Breadcrumb;\n\nvar _$stackframe_34 = {};\n(function (root, factory) {\n  'use strict'; // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n  /* istanbul ignore next */\n\n  if (typeof define === 'function' && define.amd) {\n    define('stackframe', [], factory);\n  } else if (typeof _$stackframe_34 === 'object') {\n    _$stackframe_34 = factory();\n  } else {\n    root.StackFrame = factory();\n  }\n})(this, function () {\n  'use strict';\n\n  function _isNumber(n) {\n    return !isNaN(parseFloat(n)) && isFinite(n);\n  }\n\n  function _capitalize(str) {\n    return str.charAt(0).toUpperCase() + str.substring(1);\n  }\n\n  function _getter(p) {\n    return function () {\n      return this[p];\n    };\n  }\n\n  var booleanProps = ['isConstructor', 'isEval', 'isNative', 'isToplevel'];\n  var numericProps = ['columnNumber', 'lineNumber'];\n  var stringProps = ['fileName', 'functionName', 'source'];\n  var arrayProps = ['args'];\n  var props = booleanProps.concat(numericProps, stringProps, arrayProps);\n\n  function StackFrame(obj) {\n    if (obj instanceof Object) {\n      for (var i = 0; i < props.length; i++) {\n        if (obj.hasOwnProperty(props[i]) && obj[props[i]] !== undefined) {\n          this['set' + _capitalize(props[i])](obj[props[i]]);\n        }\n      }\n    }\n  }\n\n  StackFrame.prototype = {\n    getArgs: function () {\n      return this.args;\n    },\n    setArgs: function (v) {\n      if (Object.prototype.toString.call(v) !== '[object Array]') {\n        throw new TypeError('Args must be an Array');\n      }\n\n      this.args = v;\n    },\n    getEvalOrigin: function () {\n      return this.evalOrigin;\n    },\n    setEvalOrigin: function (v) {\n      if (v instanceof StackFrame) {\n        this.evalOrigin = v;\n      } else if (v instanceof Object) {\n        this.evalOrigin = new StackFrame(v);\n      } else {\n        throw new TypeError('Eval Origin must be an Object or StackFrame');\n      }\n    },\n    toString: function () {\n      var functionName = this.getFunctionName() || '{anonymous}';\n      var args = '(' + (this.getArgs() || []).join(',') + ')';\n      var fileName = this.getFileName() ? '@' + this.getFileName() : '';\n      var lineNumber = _isNumber(this.getLineNumber()) ? ':' + this.getLineNumber() : '';\n      var columnNumber = _isNumber(this.getColumnNumber()) ? ':' + this.getColumnNumber() : '';\n      return functionName + args + fileName + lineNumber + columnNumber;\n    }\n  };\n\n  for (var i = 0; i < booleanProps.length; i++) {\n    StackFrame.prototype['get' + _capitalize(booleanProps[i])] = _getter(booleanProps[i]);\n\n    StackFrame.prototype['set' + _capitalize(booleanProps[i])] = function (p) {\n      return function (v) {\n        this[p] = Boolean(v);\n      };\n    }(booleanProps[i]);\n  }\n\n  for (var j = 0; j < numericProps.length; j++) {\n    StackFrame.prototype['get' + _capitalize(numericProps[j])] = _getter(numericProps[j]);\n\n    StackFrame.prototype['set' + _capitalize(numericProps[j])] = function (p) {\n      return function (v) {\n        if (!_isNumber(v)) {\n          throw new TypeError(p + ' must be a Number');\n        }\n\n        this[p] = Number(v);\n      };\n    }(numericProps[j]);\n  }\n\n  for (var k = 0; k < stringProps.length; k++) {\n    StackFrame.prototype['get' + _capitalize(stringProps[k])] = _getter(stringProps[k]);\n\n    StackFrame.prototype['set' + _capitalize(stringProps[k])] = function (p) {\n      return function (v) {\n        this[p] = String(v);\n      };\n    }(stringProps[k]);\n  }\n\n  return StackFrame;\n});\n\nvar _$errorStackParser_31 = {};\n(function (root, factory) {\n  'use strict'; // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n  /* istanbul ignore next */\n\n  if (typeof define === 'function' && define.amd) {\n    define('error-stack-parser', ['stackframe'], factory);\n  } else if (typeof _$errorStackParser_31 === 'object') {\n    _$errorStackParser_31 = factory(_$stackframe_34);\n  } else {\n    root.ErrorStackParser = factory(root.StackFrame);\n  }\n})(this, function ErrorStackParser(StackFrame) {\n  'use strict';\n\n  var FIREFOX_SAFARI_STACK_REGEXP = /(^|@)\\S+\\:\\d+/;\n  var CHROME_IE_STACK_REGEXP = /^\\s*at .*(\\S+\\:\\d+|\\(native\\))/m;\n  var SAFARI_NATIVE_CODE_REGEXP = /^(eval@)?(\\[native code\\])?$/;\n  return {\n    /**\n     * Given an Error object, extract the most information from it.\n     *\n     * @param {Error} error object\n     * @return {Array} of StackFrames\n     */\n    parse: function ErrorStackParser$$parse(error) {\n      if (typeof error.stacktrace !== 'undefined' || typeof error['opera#sourceloc'] !== 'undefined') {\n        return this.parseOpera(error);\n      } else if (error.stack && error.stack.match(CHROME_IE_STACK_REGEXP)) {\n        return this.parseV8OrIE(error);\n      } else if (error.stack) {\n        return this.parseFFOrSafari(error);\n      } else {\n        throw new Error('Cannot parse given Error object');\n      }\n    },\n    // Separate line and column numbers from a string of the form: (URI:Line:Column)\n    extractLocation: function ErrorStackParser$$extractLocation(urlLike) {\n      // Fail-fast but return locations like \"(native)\"\n      if (urlLike.indexOf(':') === -1) {\n        return [urlLike];\n      }\n\n      var regExp = /(.+?)(?:\\:(\\d+))?(?:\\:(\\d+))?$/;\n      var parts = regExp.exec(urlLike.replace(/[\\(\\)]/g, ''));\n      return [parts[1], parts[2] || undefined, parts[3] || undefined];\n    },\n    parseV8OrIE: function ErrorStackParser$$parseV8OrIE(error) {\n      var filtered = error.stack.split('\\n').filter(function (line) {\n        return !!line.match(CHROME_IE_STACK_REGEXP);\n      }, this);\n      return filtered.map(function (line) {\n        if (line.indexOf('(eval ') > -1) {\n          // Throw away eval information until we implement stacktrace.js/stackframe#8\n          line = line.replace(/eval code/g, 'eval').replace(/(\\(eval at [^\\()]*)|(\\)\\,.*$)/g, '');\n        }\n\n        var sanitizedLine = line.replace(/^\\s+/, '').replace(/\\(eval code/g, '('); // capture and preseve the parenthesized location \"(/foo/my bar.js:12:87)\" in\n        // case it has spaces in it, as the string is split on \\s+ later on\n\n        var location = sanitizedLine.match(/ (\\((.+):(\\d+):(\\d+)\\)$)/); // remove the parenthesized location from the line, if it was matched\n\n        sanitizedLine = location ? sanitizedLine.replace(location[0], '') : sanitizedLine;\n        var tokens = sanitizedLine.split(/\\s+/).slice(1); // if a location was matched, pass it to extractLocation() otherwise pop the last token\n\n        var locationParts = this.extractLocation(location ? location[1] : tokens.pop());\n        var functionName = tokens.join(' ') || undefined;\n        var fileName = ['eval', '<anonymous>'].indexOf(locationParts[0]) > -1 ? undefined : locationParts[0];\n        return new StackFrame({\n          functionName: functionName,\n          fileName: fileName,\n          lineNumber: locationParts[1],\n          columnNumber: locationParts[2],\n          source: line\n        });\n      }, this);\n    },\n    parseFFOrSafari: function ErrorStackParser$$parseFFOrSafari(error) {\n      var filtered = error.stack.split('\\n').filter(function (line) {\n        return !line.match(SAFARI_NATIVE_CODE_REGEXP);\n      }, this);\n      return filtered.map(function (line) {\n        // Throw away eval information until we implement stacktrace.js/stackframe#8\n        if (line.indexOf(' > eval') > -1) {\n          line = line.replace(/ line (\\d+)(?: > eval line \\d+)* > eval\\:\\d+\\:\\d+/g, ':$1');\n        }\n\n        if (line.indexOf('@') === -1 && line.indexOf(':') === -1) {\n          // Safari eval frames only have function names and nothing else\n          return new StackFrame({\n            functionName: line\n          });\n        } else {\n          var functionNameRegex = /((.*\".+\"[^@]*)?[^@]*)(?:@)/;\n          var matches = line.match(functionNameRegex);\n          var functionName = matches && matches[1] ? matches[1] : undefined;\n          var locationParts = this.extractLocation(line.replace(functionNameRegex, ''));\n          return new StackFrame({\n            functionName: functionName,\n            fileName: locationParts[0],\n            lineNumber: locationParts[1],\n            columnNumber: locationParts[2],\n            source: line\n          });\n        }\n      }, this);\n    },\n    parseOpera: function ErrorStackParser$$parseOpera(e) {\n      if (!e.stacktrace || e.message.indexOf('\\n') > -1 && e.message.split('\\n').length > e.stacktrace.split('\\n').length) {\n        return this.parseOpera9(e);\n      } else if (!e.stack) {\n        return this.parseOpera10(e);\n      } else {\n        return this.parseOpera11(e);\n      }\n    },\n    parseOpera9: function ErrorStackParser$$parseOpera9(e) {\n      var lineRE = /Line (\\d+).*script (?:in )?(\\S+)/i;\n      var lines = e.message.split('\\n');\n      var result = [];\n\n      for (var i = 2, len = lines.length; i < len; i += 2) {\n        var match = lineRE.exec(lines[i]);\n\n        if (match) {\n          result.push(new StackFrame({\n            fileName: match[2],\n            lineNumber: match[1],\n            source: lines[i]\n          }));\n        }\n      }\n\n      return result;\n    },\n    parseOpera10: function ErrorStackParser$$parseOpera10(e) {\n      var lineRE = /Line (\\d+).*script (?:in )?(\\S+)(?:: In function (\\S+))?$/i;\n      var lines = e.stacktrace.split('\\n');\n      var result = [];\n\n      for (var i = 0, len = lines.length; i < len; i += 2) {\n        var match = lineRE.exec(lines[i]);\n\n        if (match) {\n          result.push(new StackFrame({\n            functionName: match[3] || undefined,\n            fileName: match[2],\n            lineNumber: match[1],\n            source: lines[i]\n          }));\n        }\n      }\n\n      return result;\n    },\n    // Opera 10.65+ Error.stack very similar to FF/Safari\n    parseOpera11: function ErrorStackParser$$parseOpera11(error) {\n      var filtered = error.stack.split('\\n').filter(function (line) {\n        return !!line.match(FIREFOX_SAFARI_STACK_REGEXP) && !line.match(/^Error created at/);\n      }, this);\n      return filtered.map(function (line) {\n        var tokens = line.split('@');\n        var locationParts = this.extractLocation(tokens.pop());\n        var functionCall = tokens.shift() || '';\n        var functionName = functionCall.replace(/<anonymous function(: (\\w+))?>/, '$2').replace(/\\([^\\)]*\\)/g, '') || undefined;\n        var argsRaw;\n\n        if (functionCall.match(/\\(([^\\)]*)\\)/)) {\n          argsRaw = functionCall.replace(/^[^\\(]+\\(([^\\)]*)\\)$/, '$1');\n        }\n\n        var args = argsRaw === undefined || argsRaw === '[arguments not available]' ? undefined : argsRaw.split(',');\n        return new StackFrame({\n          functionName: functionName,\n          args: args,\n          fileName: locationParts[0],\n          lineNumber: locationParts[1],\n          columnNumber: locationParts[2],\n          source: line\n        });\n      }, this);\n    }\n  };\n});\n\nvar _$errorStackParser_10 = _$errorStackParser_31;\n\nvar _$safeJsonStringify_30 = function (data, replacer, space, opts) {\n  var redactedKeys = opts && opts.redactedKeys ? opts.redactedKeys : [];\n  var redactedPaths = opts && opts.redactedPaths ? opts.redactedPaths : [];\n  return JSON.stringify(prepareObjForSerialization(data, redactedKeys, redactedPaths), replacer, space);\n};\n\nvar MAX_DEPTH = 20;\nvar MAX_EDGES = 25000;\nvar MIN_PRESERVED_DEPTH = 8;\nvar REPLACEMENT_NODE = '...';\n\nfunction isError(o) {\n  return o instanceof Error || /^\\[object (Error|(Dom)?Exception)\\]$/.test(Object.prototype.toString.call(o));\n}\n\nfunction throwsMessage(err) {\n  return '[Throws: ' + (err ? err.message : '?') + ']';\n}\n\nfunction find(haystack, needle) {\n  for (var i = 0, len = haystack.length; i < len; i++) {\n    if (haystack[i] === needle) return true;\n  }\n\n  return false;\n} // returns true if the string `path` starts with any of the provided `paths`\n\n\nfunction isDescendent(paths, path) {\n  for (var i = 0, len = paths.length; i < len; i++) {\n    if (path.indexOf(paths[i]) === 0) return true;\n  }\n\n  return false;\n}\n\nfunction shouldRedact(patterns, key) {\n  for (var i = 0, len = patterns.length; i < len; i++) {\n    if (typeof patterns[i] === 'string' && patterns[i].toLowerCase() === key.toLowerCase()) return true;\n    if (patterns[i] && typeof patterns[i].test === 'function' && patterns[i].test(key)) return true;\n  }\n\n  return false;\n}\n\nfunction __isArray_30(obj) {\n  return Object.prototype.toString.call(obj) === '[object Array]';\n}\n\nfunction safelyGetProp(obj, prop) {\n  try {\n    return obj[prop];\n  } catch (err) {\n    return throwsMessage(err);\n  }\n}\n\nfunction prepareObjForSerialization(obj, redactedKeys, redactedPaths) {\n  var seen = []; // store references to objects we have seen before\n\n  var edges = 0;\n\n  function visit(obj, path) {\n    function edgesExceeded() {\n      return path.length > MIN_PRESERVED_DEPTH && edges > MAX_EDGES;\n    }\n\n    edges++;\n    if (path.length > MAX_DEPTH) return REPLACEMENT_NODE;\n    if (edgesExceeded()) return REPLACEMENT_NODE;\n    if (obj === null || typeof obj !== 'object') return obj;\n    if (find(seen, obj)) return '[Circular]';\n    seen.push(obj);\n\n    if (typeof obj.toJSON === 'function') {\n      try {\n        // we're not going to count this as an edge because it\n        // replaces the value of the currently visited object\n        edges--;\n        var fResult = visit(obj.toJSON(), path);\n        seen.pop();\n        return fResult;\n      } catch (err) {\n        return throwsMessage(err);\n      }\n    }\n\n    var er = isError(obj);\n\n    if (er) {\n      edges--;\n      var eResult = visit({\n        name: obj.name,\n        message: obj.message\n      }, path);\n      seen.pop();\n      return eResult;\n    }\n\n    if (__isArray_30(obj)) {\n      var aResult = [];\n\n      for (var i = 0, len = obj.length; i < len; i++) {\n        if (edgesExceeded()) {\n          aResult.push(REPLACEMENT_NODE);\n          break;\n        }\n\n        aResult.push(visit(obj[i], path.concat('[]')));\n      }\n\n      seen.pop();\n      return aResult;\n    }\n\n    var result = {};\n\n    try {\n      for (var prop in obj) {\n        if (!Object.prototype.hasOwnProperty.call(obj, prop)) continue;\n\n        if (isDescendent(redactedPaths, path.join('.')) && shouldRedact(redactedKeys, prop)) {\n          result[prop] = '[REDACTED]';\n          continue;\n        }\n\n        if (edgesExceeded()) {\n          result[prop] = REPLACEMENT_NODE;\n          break;\n        }\n\n        result[prop] = visit(safelyGetProp(obj, prop), path.concat(prop));\n      }\n    } catch (e) {}\n\n    seen.pop();\n    return result;\n  }\n\n  return visit(obj, []);\n}\n\n/* removed: var _$map_16 = require('./es-utils/map'); */;\n\n/* removed: var _$filter_12 = require('./es-utils/filter'); */;\n\n/* removed: var _$isArray_14 = require('./es-utils/is-array'); */;\n\n/* removed: var _$safeJsonStringify_30 = require('@bugsnag/safe-json-stringify'); */;\n\nfunction add(existingFeatures, existingFeatureKeys, name, variant) {\n  if (typeof name !== 'string') {\n    return;\n  }\n\n  if (variant === undefined) {\n    variant = null;\n  } else if (variant !== null && typeof variant !== 'string') {\n    variant = _$safeJsonStringify_30(variant);\n  }\n\n  var existingIndex = existingFeatureKeys[name];\n\n  if (typeof existingIndex === 'number') {\n    existingFeatures[existingIndex] = {\n      name: name,\n      variant: variant\n    };\n    return;\n  }\n\n  existingFeatures.push({\n    name: name,\n    variant: variant\n  });\n  existingFeatureKeys[name] = existingFeatures.length - 1;\n}\n\nfunction merge(existingFeatures, newFeatures, existingFeatureKeys) {\n  if (!_$isArray_14(newFeatures)) {\n    return;\n  }\n\n  for (var i = 0; i < newFeatures.length; ++i) {\n    var feature = newFeatures[i];\n\n    if (feature === null || typeof feature !== 'object') {\n      continue;\n    } // 'add' will handle if 'name' doesn't exist & 'variant' is optional\n\n\n    add(existingFeatures, existingFeatureKeys, feature.name, feature.variant);\n  }\n\n  return existingFeatures;\n} // convert feature flags from a map of 'name -> variant' into the format required\n// by the Bugsnag Event API:\n//   [{ featureFlag: 'name', variant: 'variant' }, { featureFlag: 'name 2' }]\n\n\nfunction toEventApi(featureFlags) {\n  return _$map_16(_$filter_12(featureFlags, Boolean), function (_ref) {\n    var name = _ref.name,\n        variant = _ref.variant;\n    var flag = {\n      featureFlag: name\n    }; // don't add a 'variant' property unless there's actually a value\n\n    if (typeof variant === 'string') {\n      flag.variant = variant;\n    }\n\n    return flag;\n  });\n}\n\nfunction clear(features, featuresIndex, name) {\n  var existingIndex = featuresIndex[name];\n\n  if (typeof existingIndex === 'number') {\n    features[existingIndex] = null;\n    delete featuresIndex[name];\n  }\n}\n\nvar _$featureFlagDelegate_18 = {\n  add: add,\n  clear: clear,\n  merge: merge,\n  toEventApi: toEventApi\n};\n\n// Given `err` which may be an error, does it have a stack property which is a string?\nvar _$hasStack_19 = function (err) {\n  return !!err && (!!err.stack || !!err.stacktrace || !!err['opera#sourceloc']) && typeof (err.stack || err.stacktrace || err['opera#sourceloc']) === 'string' && err.stack !== err.name + \": \" + err.message;\n};\n\n/**\n * Expose `isError`.\n */\nvar _$isError_32 = __isError_32;\n/**\n * Test whether `value` is error object.\n *\n * @param {*} value\n * @returns {boolean}\n */\n\nfunction __isError_32(value) {\n  switch (Object.prototype.toString.call(value)) {\n    case '[object Error]':\n      return true;\n\n    case '[object Exception]':\n      return true;\n\n    case '[object DOMException]':\n      return true;\n\n    default:\n      return value instanceof Error;\n  }\n}\n\nvar _$iserror_20 = _$isError_32;\n\n/* removed: var _$assign_11 = require('./es-utils/assign'); */;\n\nvar __add_22 = function (state, section, keyOrObj, maybeVal) {\n  var _updates;\n\n  if (!section) return;\n  var updates; // addMetadata(\"section\", null) -> clears section\n\n  if (keyOrObj === null) return __clear_22(state, section); // normalise the two supported input types into object form\n\n  if (typeof keyOrObj === 'object') updates = keyOrObj;\n  if (typeof keyOrObj === 'string') updates = (_updates = {}, _updates[keyOrObj] = maybeVal, _updates); // exit if we don't have an updates object at this point\n\n  if (!updates) return; // ensure a section with this name exists\n\n  if (!state[section]) state[section] = {}; // merge the updates with the existing section\n\n  state[section] = _$assign_11({}, state[section], updates);\n};\n\nvar get = function (state, section, key) {\n  if (typeof section !== 'string') return undefined;\n\n  if (!key) {\n    return state[section];\n  }\n\n  if (state[section]) {\n    return state[section][key];\n  }\n\n  return undefined;\n};\n\nvar __clear_22 = function (state, section, key) {\n  if (typeof section !== 'string') return; // clear an entire section\n\n  if (!key) {\n    delete state[section];\n    return;\n  } // clear a single value from a section\n\n\n  if (state[section]) {\n    delete state[section][key];\n  }\n};\n\nvar _$metadataDelegate_22 = {\n  add: __add_22,\n  get: get,\n  clear: __clear_22\n};\n\nvar _$stackGenerator_33 = {};\n(function (root, factory) {\n  'use strict'; // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n  /* istanbul ignore next */\n\n  if (typeof define === 'function' && define.amd) {\n    define('stack-generator', ['stackframe'], factory);\n  } else if (typeof _$stackGenerator_33 === 'object') {\n    _$stackGenerator_33 = factory(_$stackframe_34);\n  } else {\n    root.StackGenerator = factory(root.StackFrame);\n  }\n})(this, function (StackFrame) {\n  return {\n    backtrace: function StackGenerator$$backtrace(opts) {\n      var stack = [];\n      var maxStackSize = 10;\n\n      if (typeof opts === 'object' && typeof opts.maxStackSize === 'number') {\n        maxStackSize = opts.maxStackSize;\n      }\n\n      var curr = arguments.callee;\n\n      while (curr && stack.length < maxStackSize && curr['arguments']) {\n        // Allow V8 optimizations\n        var args = new Array(curr['arguments'].length);\n\n        for (var i = 0; i < args.length; ++i) {\n          args[i] = curr['arguments'][i];\n        }\n\n        if (/function(?:\\s+([\\w$]+))+\\s*\\(/.test(curr.toString())) {\n          stack.push(new StackFrame({\n            functionName: RegExp.$1 || undefined,\n            args: args\n          }));\n        } else {\n          stack.push(new StackFrame({\n            args: args\n          }));\n        }\n\n        try {\n          curr = curr.caller;\n        } catch (e) {\n          break;\n        }\n      }\n\n      return stack;\n    }\n  };\n});\n\n/* removed: var _$errorStackParser_10 = require('./lib/error-stack-parser'); */;\n\n/* removed: var _$stackGenerator_33 = require('stack-generator'); */;\n\n/* removed: var _$hasStack_19 = require('./lib/has-stack'); */;\n\n/* removed: var _$map_16 = require('./lib/es-utils/map'); */;\n\n/* removed: var _$reduce_17 = require('./lib/es-utils/reduce'); */;\n\n/* removed: var _$filter_12 = require('./lib/es-utils/filter'); */;\n\n/* removed: var _$assign_11 = require('./lib/es-utils/assign'); */;\n\n/* removed: var _$metadataDelegate_22 = require('./lib/metadata-delegate'); */;\n\n/* removed: var _$featureFlagDelegate_18 = require('./lib/feature-flag-delegate'); */;\n\n/* removed: var _$iserror_20 = require('./lib/iserror'); */;\n\nvar Event = /*#__PURE__*/function () {\n  function Event(errorClass, errorMessage, stacktrace, handledState, originalError) {\n    if (stacktrace === void 0) {\n      stacktrace = [];\n    }\n\n    if (handledState === void 0) {\n      handledState = defaultHandledState();\n    }\n\n    this.apiKey = undefined;\n    this.context = undefined;\n    this.groupingHash = undefined;\n    this.originalError = originalError;\n    this._handledState = handledState;\n    this.severity = this._handledState.severity;\n    this.unhandled = this._handledState.unhandled;\n    this.app = {};\n    this.device = {};\n    this.request = {};\n    this.breadcrumbs = [];\n    this.threads = [];\n    this._metadata = {};\n    this._features = [];\n    this._featuresIndex = {};\n    this._user = {};\n    this._session = undefined;\n    this.errors = [createBugsnagError(errorClass, errorMessage, Event.__type, stacktrace)]; // Flags.\n    // Note these are not initialised unless they are used\n    // to save unnecessary bytes in the browser bundle\n\n    /* this.attemptImmediateDelivery, default: true */\n  }\n\n  var _proto = Event.prototype;\n\n  _proto.addMetadata = function addMetadata(section, keyOrObj, maybeVal) {\n    return _$metadataDelegate_22.add(this._metadata, section, keyOrObj, maybeVal);\n  };\n\n  _proto.getMetadata = function getMetadata(section, key) {\n    return _$metadataDelegate_22.get(this._metadata, section, key);\n  };\n\n  _proto.clearMetadata = function clearMetadata(section, key) {\n    return _$metadataDelegate_22.clear(this._metadata, section, key);\n  };\n\n  _proto.addFeatureFlag = function addFeatureFlag(name, variant) {\n    if (variant === void 0) {\n      variant = null;\n    }\n\n    _$featureFlagDelegate_18.add(this._features, this._featuresIndex, name, variant);\n  };\n\n  _proto.addFeatureFlags = function addFeatureFlags(featureFlags) {\n    _$featureFlagDelegate_18.merge(this._features, featureFlags, this._featuresIndex);\n  };\n\n  _proto.getFeatureFlags = function getFeatureFlags() {\n    return _$featureFlagDelegate_18.toEventApi(this._features);\n  };\n\n  _proto.clearFeatureFlag = function clearFeatureFlag(name) {\n    _$featureFlagDelegate_18.clear(this._features, this._featuresIndex, name);\n  };\n\n  _proto.clearFeatureFlags = function clearFeatureFlags() {\n    this._features = [];\n    this._featuresIndex = {};\n  };\n\n  _proto.getUser = function getUser() {\n    return this._user;\n  };\n\n  _proto.setUser = function setUser(id, email, name) {\n    this._user = {\n      id: id,\n      email: email,\n      name: name\n    };\n  };\n\n  _proto.toJSON = function toJSON() {\n    return {\n      payloadVersion: '4',\n      exceptions: _$map_16(this.errors, function (er) {\n        return _$assign_11({}, er, {\n          message: er.errorMessage\n        });\n      }),\n      severity: this.severity,\n      unhandled: this._handledState.unhandled,\n      severityReason: this._handledState.severityReason,\n      app: this.app,\n      device: this.device,\n      request: this.request,\n      breadcrumbs: this.breadcrumbs,\n      context: this.context,\n      groupingHash: this.groupingHash,\n      metaData: this._metadata,\n      user: this._user,\n      session: this._session,\n      featureFlags: this.getFeatureFlags()\n    };\n  };\n\n  return Event;\n}(); // takes a stacktrace.js style stackframe (https://github.com/stacktracejs/stackframe)\n// and returns a Bugsnag compatible stackframe (https://docs.bugsnag.com/api/error-reporting/#json-payload)\n\n\nvar formatStackframe = function (frame) {\n  var f = {\n    file: frame.fileName,\n    method: normaliseFunctionName(frame.functionName),\n    lineNumber: frame.lineNumber,\n    columnNumber: frame.columnNumber,\n    code: undefined,\n    inProject: undefined\n  }; // Some instances result in no file:\n  // - calling notify() from chrome's terminal results in no file/method.\n  // - non-error exception thrown from global code in FF\n  // This adds one.\n\n  if (f.lineNumber > -1 && !f.file && !f.method) {\n    f.file = 'global code';\n  }\n\n  return f;\n};\n\nvar normaliseFunctionName = function (name) {\n  return /^global code$/i.test(name) ? 'global code' : name;\n};\n\nvar defaultHandledState = function () {\n  return {\n    unhandled: false,\n    severity: 'warning',\n    severityReason: {\n      type: 'handledException'\n    }\n  };\n};\n\nvar ensureString = function (str) {\n  return typeof str === 'string' ? str : '';\n};\n\nfunction createBugsnagError(errorClass, errorMessage, type, stacktrace) {\n  return {\n    errorClass: ensureString(errorClass),\n    errorMessage: ensureString(errorMessage),\n    type: type,\n    stacktrace: _$reduce_17(stacktrace, function (accum, frame) {\n      var f = formatStackframe(frame); // don't include a stackframe if none of its properties are defined\n\n      try {\n        if (JSON.stringify(f) === '{}') return accum;\n        return accum.concat(f);\n      } catch (e) {\n        return accum;\n      }\n    }, [])\n  };\n}\n\nfunction getCauseStack(error) {\n  if (error.cause) {\n    return [error].concat(getCauseStack(error.cause));\n  } else {\n    return [error];\n  }\n} // Helpers\n\n\nEvent.getStacktrace = function (error, errorFramesToSkip, backtraceFramesToSkip) {\n  if (_$hasStack_19(error)) return _$errorStackParser_10.parse(error).slice(errorFramesToSkip); // error wasn't provided or didn't have a stacktrace so try to walk the callstack\n\n  try {\n    return _$filter_12(_$stackGenerator_33.backtrace(), function (frame) {\n      return (frame.functionName || '').indexOf('StackGenerator$$') === -1;\n    }).slice(1 + backtraceFramesToSkip);\n  } catch (e) {\n    return [];\n  }\n};\n\nEvent.create = function (maybeError, tolerateNonErrors, handledState, component, errorFramesToSkip, logger) {\n  if (errorFramesToSkip === void 0) {\n    errorFramesToSkip = 0;\n  }\n\n  var _normaliseError = normaliseError(maybeError, tolerateNonErrors, component, logger),\n      error = _normaliseError[0],\n      internalFrames = _normaliseError[1];\n\n  var event;\n\n  try {\n    var stacktrace = Event.getStacktrace(error, // if an error was created/throw in the normaliseError() function, we need to\n    // tell the getStacktrace() function to skip the number of frames we know will\n    // be from our own functions. This is added to the number of frames deep we\n    // were told about\n    internalFrames > 0 ? 1 + internalFrames + errorFramesToSkip : 0, // if there's no stacktrace, the callstack may be walked to generated one.\n    // this is how many frames should be removed because they come from our library\n    1 + errorFramesToSkip);\n    event = new Event(error.name, error.message, stacktrace, handledState, maybeError);\n  } catch (e) {\n    event = new Event(error.name, error.message, [], handledState, maybeError);\n  }\n\n  if (error.name === 'InvalidError') {\n    event.addMetadata(\"\" + component, 'non-error parameter', makeSerialisable(maybeError));\n  }\n\n  if (error.cause) {\n    var _event$errors;\n\n    var causes = getCauseStack(error).slice(1);\n    var normalisedCauses = _$map_16(causes, function (cause) {\n      // Only get stacktrace for error causes that are a valid JS Error and already have a stack\n      var stacktrace = _$iserror_20(cause) && _$hasStack_19(cause) ? _$errorStackParser_10.parse(cause) : [];\n\n      var _normaliseError2 = normaliseError(cause, true, 'error cause'),\n          error = _normaliseError2[0];\n\n      if (error.name === 'InvalidError') event.addMetadata('error cause', makeSerialisable(cause));\n      return createBugsnagError(error.name, error.message, Event.__type, stacktrace);\n    });\n\n    (_event$errors = event.errors).push.apply(_event$errors, normalisedCauses);\n  }\n\n  return event;\n};\n\nvar makeSerialisable = function (err) {\n  if (err === null) return 'null';\n  if (err === undefined) return 'undefined';\n  return err;\n};\n\nvar normaliseError = function (maybeError, tolerateNonErrors, component, logger) {\n  var error;\n  var internalFrames = 0;\n\n  var createAndLogInputError = function (reason) {\n    var verb = component === 'error cause' ? 'was' : 'received';\n    if (logger) logger.warn(component + \" \" + verb + \" a non-error: \\\"\" + reason + \"\\\"\");\n    var err = new Error(component + \" \" + verb + \" a non-error. See \\\"\" + component + \"\\\" tab for more detail.\");\n    err.name = 'InvalidError';\n    return err;\n  }; // In some cases:\n  //\n  //  - the promise rejection handler (both in the browser and node)\n  //  - the node uncaughtException handler\n  //\n  // We are really limited in what we can do to get a stacktrace. So we use the\n  // tolerateNonErrors option to ensure that the resulting error communicates as\n  // such.\n\n\n  if (!tolerateNonErrors) {\n    if (_$iserror_20(maybeError)) {\n      error = maybeError;\n    } else {\n      error = createAndLogInputError(typeof maybeError);\n      internalFrames += 2;\n    }\n  } else {\n    switch (typeof maybeError) {\n      case 'string':\n      case 'number':\n      case 'boolean':\n        error = new Error(String(maybeError));\n        internalFrames += 1;\n        break;\n\n      case 'function':\n        error = createAndLogInputError('function');\n        internalFrames += 2;\n        break;\n\n      case 'object':\n        if (maybeError !== null && _$iserror_20(maybeError)) {\n          error = maybeError;\n        } else if (maybeError !== null && hasNecessaryFields(maybeError)) {\n          error = new Error(maybeError.message || maybeError.errorMessage);\n          error.name = maybeError.name || maybeError.errorClass;\n          internalFrames += 1;\n        } else {\n          error = createAndLogInputError(maybeError === null ? 'null' : 'unsupported object');\n          internalFrames += 2;\n        }\n\n        break;\n\n      default:\n        error = createAndLogInputError('nothing');\n        internalFrames += 2;\n    }\n  }\n\n  if (!_$hasStack_19(error)) {\n    // in IE10/11 a new Error() doesn't have a stacktrace until you throw it, so try that here\n    try {\n      throw error;\n    } catch (e) {\n      if (_$hasStack_19(e)) {\n        error = e; // if the error only got a stacktrace after we threw it here, we know it\n        // will only have one extra internal frame from this function, regardless\n        // of whether it went through createAndLogInputError() or not\n\n        internalFrames = 1;\n      }\n    }\n  }\n\n  return [error, internalFrames];\n}; // default value for stacktrace.type\n\n\nEvent.__type = 'browserjs';\n\nvar hasNecessaryFields = function (error) {\n  return (typeof error.name === 'string' || typeof error.errorClass === 'string') && (typeof error.message === 'string' || typeof error.errorMessage === 'string');\n};\n\nvar _$Event_6 = Event;\n\n// This is a heavily modified/simplified version of\n//   https://github.com/othiym23/async-some\n// with the logic flipped so that it is akin to the\n// synchronous \"every\" method instead of \"some\".\n// run the asynchronous test function (fn) over each item in the array (arr)\n// in series until:\n//   - fn(item, cb) => calls cb(null, false)\n//   - or the end of the array is reached\n// the callback (cb) will be passed (null, false) if any of the items in arr\n// caused fn to call back with false, otherwise it will be passed (null, true)\nvar _$asyncEvery_7 = function (arr, fn, cb) {\n  var index = 0;\n\n  var next = function () {\n    if (index >= arr.length) return cb(null, true);\n    fn(arr[index], function (err, result) {\n      if (err) return cb(err);\n      if (result === false) return cb(null, false);\n      index++;\n      next();\n    });\n  };\n\n  next();\n};\n\n/* removed: var _$asyncEvery_7 = require('./async-every'); */;\n\nvar _$callbackRunner_9 = function (callbacks, event, onCallbackError, cb) {\n  // This function is how we support different kinds of callback:\n  //  - synchronous - return value\n  //  - node-style async with callback - cb(err, value)\n  //  - promise/thenable - resolve(value)\n  // It normalises each of these into the lowest common denominator – a node-style callback\n  var runMaybeAsyncCallback = function (fn, cb) {\n    if (typeof fn !== 'function') return cb(null);\n\n    try {\n      // if function appears sync…\n      if (fn.length !== 2) {\n        var ret = fn(event); // check if it returned a \"thenable\" (promise)\n\n        if (ret && typeof ret.then === 'function') {\n          return ret.then( // resolve\n          function (val) {\n            return setTimeout(function () {\n              return cb(null, val);\n            });\n          }, // reject\n          function (err) {\n            setTimeout(function () {\n              onCallbackError(err);\n              return cb(null, true);\n            });\n          });\n        }\n\n        return cb(null, ret);\n      } // if function is async…\n\n\n      fn(event, function (err, result) {\n        if (err) {\n          onCallbackError(err);\n          return cb(null);\n        }\n\n        cb(null, result);\n      });\n    } catch (e) {\n      onCallbackError(e);\n      cb(null);\n    }\n  };\n\n  _$asyncEvery_7(callbacks, runMaybeAsyncCallback, cb);\n};\n\nvar _$syncCallbackRunner_23 = function (callbacks, callbackArg, callbackType, logger) {\n  var ignore = false;\n  var cbs = callbacks.slice();\n\n  while (!ignore) {\n    if (!cbs.length) break;\n\n    try {\n      ignore = cbs.pop()(callbackArg) === false;\n    } catch (e) {\n      logger.error(\"Error occurred in \" + callbackType + \" callback, continuing anyway\\u2026\");\n      logger.error(e);\n    }\n  }\n\n  return ignore;\n};\n\nvar _$pad_29 = function pad(num, size) {\n  var s = '000000000' + num;\n  return s.substr(s.length - size);\n};\n\n/* removed: var _$pad_29 = require('./pad.js'); */;\n\nvar env = typeof window === 'object' ? window : self;\nvar globalCount = 0;\n\nfor (var prop in env) {\n  if (Object.hasOwnProperty.call(env, prop)) globalCount++;\n}\n\nvar mimeTypesLength = navigator.mimeTypes ? navigator.mimeTypes.length : 0;\nvar clientId = _$pad_29((mimeTypesLength + navigator.userAgent.length).toString(36) + globalCount.toString(36), 4);\n\nvar _$fingerprint_28 = function fingerprint() {\n  return clientId;\n};\n\n/**\n * cuid.js\n * Collision-resistant UID generator for browsers and node.\n * Sequential for fast db lookups and recency sorting.\n * Safe for element IDs and server-side lookups.\n *\n * Extracted from CLCTR\n *\n * Copyright (c) Eric Elliott 2012\n * MIT License\n */\n/* removed: var _$fingerprint_28 = require('./lib/fingerprint.js'); */;\n\n/* removed: var _$pad_29 = require('./lib/pad.js'); */;\n\nvar c = 0,\n    blockSize = 4,\n    base = 36,\n    discreteValues = Math.pow(base, blockSize);\n\nfunction randomBlock() {\n  return _$pad_29((Math.random() * discreteValues << 0).toString(base), blockSize);\n}\n\nfunction safeCounter() {\n  c = c < discreteValues ? c : 0;\n  c++; // this is not subliminal\n\n  return c - 1;\n}\n\nfunction cuid() {\n  // Starting with a lowercase letter makes\n  // it HTML element ID friendly.\n  var letter = 'c',\n      // hard-coded allows for sequential access\n  // timestamp\n  // warning: this exposes the exact date and time\n  // that the uid was created.\n  timestamp = new Date().getTime().toString(base),\n      // Prevent same-machine collisions.\n  counter = _$pad_29(safeCounter().toString(base), blockSize),\n      // A few chars to generate distinct ids for different\n  // clients (so different computers are far less\n  // likely to generate the same id)\n  print = _$fingerprint_28(),\n      // Grab some more chars from Math.random()\n  random = randomBlock() + randomBlock();\n  return letter + timestamp + counter + print + random;\n}\n\ncuid.fingerprint = _$fingerprint_28;\nvar _$cuid_27 = cuid;\n\n/* removed: var _$cuid_27 = require('@bugsnag/cuid'); */;\n\nvar Session = /*#__PURE__*/function () {\n  function Session() {\n    this.id = _$cuid_27();\n    this.startedAt = new Date();\n    this._handled = 0;\n    this._unhandled = 0;\n    this._user = {};\n    this.app = {};\n    this.device = {};\n  }\n\n  var _proto = Session.prototype;\n\n  _proto.getUser = function getUser() {\n    return this._user;\n  };\n\n  _proto.setUser = function setUser(id, email, name) {\n    this._user = {\n      id: id,\n      email: email,\n      name: name\n    };\n  };\n\n  _proto.toJSON = function toJSON() {\n    return {\n      id: this.id,\n      startedAt: this.startedAt,\n      events: {\n        handled: this._handled,\n        unhandled: this._unhandled\n      }\n    };\n  };\n\n  _proto._track = function _track(event) {\n    this[event._handledState.unhandled ? '_unhandled' : '_handled'] += 1;\n  };\n\n  return Session;\n}();\n\nvar _$Session_35 = Session;\n\n/* removed: var _$config_5 = require('./config'); */;\n\n/* removed: var _$Event_6 = require('./event'); */;\n\n/* removed: var _$Breadcrumb_3 = require('./breadcrumb'); */;\n\n/* removed: var _$Session_35 = require('./session'); */;\n\n/* removed: var _$map_16 = require('./lib/es-utils/map'); */;\n\n/* removed: var _$includes_13 = require('./lib/es-utils/includes'); */;\n\n/* removed: var _$filter_12 = require('./lib/es-utils/filter'); */;\n\n/* removed: var _$reduce_17 = require('./lib/es-utils/reduce'); */;\n\n/* removed: var _$keys_15 = require('./lib/es-utils/keys'); */;\n\n/* removed: var _$assign_11 = require('./lib/es-utils/assign'); */;\n\n/* removed: var _$callbackRunner_9 = require('./lib/callback-runner'); */;\n\n/* removed: var _$metadataDelegate_22 = require('./lib/metadata-delegate'); */;\n\n/* removed: var _$syncCallbackRunner_23 = require('./lib/sync-callback-runner'); */;\n\n/* removed: var _$breadcrumbTypes_8 = require('./lib/breadcrumb-types'); */;\n\nvar __add_4 = _$featureFlagDelegate_18.add,\n    __clear_4 = _$featureFlagDelegate_18.clear,\n    __merge_4 = _$featureFlagDelegate_18.merge;\n\nvar noop = function () {};\n\nvar Client = /*#__PURE__*/function () {\n  function Client(configuration, schema, internalPlugins, notifier) {\n    var _this = this;\n\n    if (schema === void 0) {\n      schema = _$config_5.schema;\n    }\n\n    if (internalPlugins === void 0) {\n      internalPlugins = [];\n    }\n\n    // notifier id\n    this._notifier = notifier; // intialise opts and config\n\n    this._config = {};\n    this._schema = schema; // i/o\n\n    this._delivery = {\n      sendSession: noop,\n      sendEvent: noop\n    };\n    this._logger = {\n      debug: noop,\n      info: noop,\n      warn: noop,\n      error: noop\n    }; // plugins\n\n    this._plugins = {}; // state\n\n    this._breadcrumbs = [];\n    this._session = null;\n    this._metadata = {};\n    this._featuresIndex = {};\n    this._features = [];\n    this._context = undefined;\n    this._user = {}; // callbacks:\n    //  e: onError\n    //  s: onSession\n    //  sp: onSessionPayload\n    //  b: onBreadcrumb\n    // (note these names are minified by hand because object\n    // properties are not safe to minify automatically)\n\n    this._cbs = {\n      e: [],\n      s: [],\n      sp: [],\n      b: []\n    }; // expose internal constructors\n\n    this.Client = Client;\n    this.Event = _$Event_6;\n    this.Breadcrumb = _$Breadcrumb_3;\n    this.Session = _$Session_35;\n    this._config = this._configure(configuration, internalPlugins);\n    _$map_16(internalPlugins.concat(this._config.plugins), function (pl) {\n      if (pl) _this._loadPlugin(pl);\n    }); // when notify() is called we need to know how many frames are from our own source\n    // this inital value is 1 not 0 because we wrap notify() to ensure it is always\n    // bound to have the client as its `this` value – see below.\n\n    this._depth = 1;\n    var self = this;\n    var notify = this.notify;\n\n    this.notify = function () {\n      return notify.apply(self, arguments);\n    };\n  }\n\n  var _proto = Client.prototype;\n\n  _proto.addMetadata = function addMetadata(section, keyOrObj, maybeVal) {\n    return _$metadataDelegate_22.add(this._metadata, section, keyOrObj, maybeVal);\n  };\n\n  _proto.getMetadata = function getMetadata(section, key) {\n    return _$metadataDelegate_22.get(this._metadata, section, key);\n  };\n\n  _proto.clearMetadata = function clearMetadata(section, key) {\n    return _$metadataDelegate_22.clear(this._metadata, section, key);\n  };\n\n  _proto.addFeatureFlag = function addFeatureFlag(name, variant) {\n    if (variant === void 0) {\n      variant = null;\n    }\n\n    __add_4(this._features, this._featuresIndex, name, variant);\n  };\n\n  _proto.addFeatureFlags = function addFeatureFlags(featureFlags) {\n    __merge_4(this._features, featureFlags, this._featuresIndex);\n  };\n\n  _proto.clearFeatureFlag = function clearFeatureFlag(name) {\n    __clear_4(this._features, this._featuresIndex, name);\n  };\n\n  _proto.clearFeatureFlags = function clearFeatureFlags() {\n    this._features = [];\n    this._featuresIndex = {};\n  };\n\n  _proto.getContext = function getContext() {\n    return this._context;\n  };\n\n  _proto.setContext = function setContext(c) {\n    this._context = c;\n  };\n\n  _proto._configure = function _configure(opts, internalPlugins) {\n    var schema = _$reduce_17(internalPlugins, function (schema, plugin) {\n      if (plugin && plugin.configSchema) return _$assign_11({}, schema, plugin.configSchema);\n      return schema;\n    }, this._schema); // accumulate configuration and error messages\n\n    var _reduce = _$reduce_17(_$keys_15(schema), function (accum, key) {\n      var defaultValue = schema[key].defaultValue(opts[key]);\n\n      if (opts[key] !== undefined) {\n        var valid = schema[key].validate(opts[key]);\n\n        if (!valid) {\n          accum.errors[key] = schema[key].message;\n          accum.config[key] = defaultValue;\n        } else {\n          if (schema[key].allowPartialObject) {\n            accum.config[key] = _$assign_11(defaultValue, opts[key]);\n          } else {\n            accum.config[key] = opts[key];\n          }\n        }\n      } else {\n        accum.config[key] = defaultValue;\n      }\n\n      return accum;\n    }, {\n      errors: {},\n      config: {}\n    }),\n        errors = _reduce.errors,\n        config = _reduce.config;\n\n    if (schema.apiKey) {\n      // missing api key is the only fatal error\n      if (!config.apiKey) throw new Error('No Bugsnag API Key set'); // warn about an apikey that is not of the expected format\n\n      if (!/^[0-9a-f]{32}$/i.test(config.apiKey)) errors.apiKey = 'should be a string of 32 hexadecimal characters';\n    } // update and elevate some options\n\n\n    this._metadata = _$assign_11({}, config.metadata);\n    __merge_4(this._features, config.featureFlags, this._featuresIndex);\n    this._user = _$assign_11({}, config.user);\n    this._context = config.context;\n    if (config.logger) this._logger = config.logger; // add callbacks\n\n    if (config.onError) this._cbs.e = this._cbs.e.concat(config.onError);\n    if (config.onBreadcrumb) this._cbs.b = this._cbs.b.concat(config.onBreadcrumb);\n    if (config.onSession) this._cbs.s = this._cbs.s.concat(config.onSession); // finally warn about any invalid config where we fell back to the default\n\n    if (_$keys_15(errors).length) {\n      this._logger.warn(generateConfigErrorMessage(errors, opts));\n    }\n\n    return config;\n  };\n\n  _proto.getUser = function getUser() {\n    return this._user;\n  };\n\n  _proto.setUser = function setUser(id, email, name) {\n    this._user = {\n      id: id,\n      email: email,\n      name: name\n    };\n  };\n\n  _proto._loadPlugin = function _loadPlugin(plugin) {\n    var result = plugin.load(this); // JS objects are not the safest way to store arbitrarily keyed values,\n    // so bookend the key with some characters that prevent tampering with\n    // stuff like __proto__ etc. (only store the result if the plugin had a\n    // name)\n\n    if (plugin.name) this._plugins[\"~\" + plugin.name + \"~\"] = result;\n    return this;\n  };\n\n  _proto.getPlugin = function getPlugin(name) {\n    return this._plugins[\"~\" + name + \"~\"];\n  };\n\n  _proto._setDelivery = function _setDelivery(d) {\n    this._delivery = d(this);\n  };\n\n  _proto.startSession = function startSession() {\n    var session = new _$Session_35();\n    session.app.releaseStage = this._config.releaseStage;\n    session.app.version = this._config.appVersion;\n    session.app.type = this._config.appType;\n    session._user = _$assign_11({}, this._user); // run onSession callbacks\n\n    var ignore = _$syncCallbackRunner_23(this._cbs.s, session, 'onSession', this._logger);\n\n    if (ignore) {\n      this._logger.debug('Session not started due to onSession callback');\n\n      return this;\n    }\n\n    return this._sessionDelegate.startSession(this, session);\n  };\n\n  _proto.addOnError = function addOnError(fn, front) {\n    if (front === void 0) {\n      front = false;\n    }\n\n    this._cbs.e[front ? 'unshift' : 'push'](fn);\n  };\n\n  _proto.removeOnError = function removeOnError(fn) {\n    this._cbs.e = _$filter_12(this._cbs.e, function (f) {\n      return f !== fn;\n    });\n  };\n\n  _proto._addOnSessionPayload = function _addOnSessionPayload(fn) {\n    this._cbs.sp.push(fn);\n  };\n\n  _proto.addOnSession = function addOnSession(fn) {\n    this._cbs.s.push(fn);\n  };\n\n  _proto.removeOnSession = function removeOnSession(fn) {\n    this._cbs.s = _$filter_12(this._cbs.s, function (f) {\n      return f !== fn;\n    });\n  };\n\n  _proto.addOnBreadcrumb = function addOnBreadcrumb(fn, front) {\n    if (front === void 0) {\n      front = false;\n    }\n\n    this._cbs.b[front ? 'unshift' : 'push'](fn);\n  };\n\n  _proto.removeOnBreadcrumb = function removeOnBreadcrumb(fn) {\n    this._cbs.b = _$filter_12(this._cbs.b, function (f) {\n      return f !== fn;\n    });\n  };\n\n  _proto.pauseSession = function pauseSession() {\n    return this._sessionDelegate.pauseSession(this);\n  };\n\n  _proto.resumeSession = function resumeSession() {\n    return this._sessionDelegate.resumeSession(this);\n  };\n\n  _proto.leaveBreadcrumb = function leaveBreadcrumb(message, metadata, type) {\n    // coerce bad values so that the defaults get set\n    message = typeof message === 'string' ? message : '';\n    type = typeof type === 'string' && _$includes_13(_$breadcrumbTypes_8, type) ? type : 'manual';\n    metadata = typeof metadata === 'object' && metadata !== null ? metadata : {}; // if no message, discard\n\n    if (!message) return;\n    var crumb = new _$Breadcrumb_3(message, metadata, type); // run onBreadcrumb callbacks\n\n    var ignore = _$syncCallbackRunner_23(this._cbs.b, crumb, 'onBreadcrumb', this._logger);\n\n    if (ignore) {\n      this._logger.debug('Breadcrumb not attached due to onBreadcrumb callback');\n\n      return;\n    } // push the valid crumb onto the queue and maintain the length\n\n\n    this._breadcrumbs.push(crumb);\n\n    if (this._breadcrumbs.length > this._config.maxBreadcrumbs) {\n      this._breadcrumbs = this._breadcrumbs.slice(this._breadcrumbs.length - this._config.maxBreadcrumbs);\n    }\n  };\n\n  _proto._isBreadcrumbTypeEnabled = function _isBreadcrumbTypeEnabled(type) {\n    var types = this._config.enabledBreadcrumbTypes;\n    return types === null || _$includes_13(types, type);\n  };\n\n  _proto.notify = function notify(maybeError, onError, postReportCallback) {\n    if (postReportCallback === void 0) {\n      postReportCallback = noop;\n    }\n\n    var event = _$Event_6.create(maybeError, true, undefined, 'notify()', this._depth + 1, this._logger);\n\n    this._notify(event, onError, postReportCallback);\n  };\n\n  _proto._notify = function _notify(event, onError, postReportCallback) {\n    var _this2 = this;\n\n    if (postReportCallback === void 0) {\n      postReportCallback = noop;\n    }\n\n    event.app = _$assign_11({}, event.app, {\n      releaseStage: this._config.releaseStage,\n      version: this._config.appVersion,\n      type: this._config.appType\n    });\n    event.context = event.context || this._context;\n    event._metadata = _$assign_11({}, event._metadata, this._metadata);\n    event._user = _$assign_11({}, event._user, this._user);\n    event.breadcrumbs = this._breadcrumbs.slice();\n    __merge_4(event._features, this._features, event._featuresIndex); // exit early if events should not be sent on the current releaseStage\n\n    if (this._config.enabledReleaseStages !== null && !_$includes_13(this._config.enabledReleaseStages, this._config.releaseStage)) {\n      this._logger.warn('Event not sent due to releaseStage/enabledReleaseStages configuration');\n\n      return postReportCallback(null, event);\n    }\n\n    var originalSeverity = event.severity;\n\n    var onCallbackError = function (err) {\n      // errors in callbacks are tolerated but we want to log them out\n      _this2._logger.error('Error occurred in onError callback, continuing anyway…');\n\n      _this2._logger.error(err);\n    };\n\n    var callbacks = [].concat(this._cbs.e).concat(onError);\n    _$callbackRunner_9(callbacks, event, onCallbackError, function (err, shouldSend) {\n      if (err) onCallbackError(err);\n\n      if (!shouldSend) {\n        _this2._logger.debug('Event not sent due to onError callback');\n\n        return postReportCallback(null, event);\n      }\n\n      if (_this2._isBreadcrumbTypeEnabled('error')) {\n        // only leave a crumb for the error if actually got sent\n        Client.prototype.leaveBreadcrumb.call(_this2, event.errors[0].errorClass, {\n          errorClass: event.errors[0].errorClass,\n          errorMessage: event.errors[0].errorMessage,\n          severity: event.severity\n        }, 'error');\n      }\n\n      if (originalSeverity !== event.severity) {\n        event._handledState.severityReason = {\n          type: 'userCallbackSetSeverity'\n        };\n      }\n\n      if (event.unhandled !== event._handledState.unhandled) {\n        event._handledState.severityReason.unhandledOverridden = true;\n        event._handledState.unhandled = event.unhandled;\n      }\n\n      if (_this2._session) {\n        _this2._session._track(event);\n\n        event._session = _this2._session;\n      }\n\n      _this2._delivery.sendEvent({\n        apiKey: event.apiKey || _this2._config.apiKey,\n        notifier: _this2._notifier,\n        events: [event]\n      }, function (err) {\n        return postReportCallback(err, event);\n      });\n    });\n  };\n\n  return Client;\n}();\n\nvar generateConfigErrorMessage = function (errors, rawInput) {\n  var er = new Error(\"Invalid configuration\\n\" + _$map_16(_$keys_15(errors), function (key) {\n    return \"  - \" + key + \" \" + errors[key] + \", got \" + stringify(rawInput[key]);\n  }).join('\\n\\n'));\n  return er;\n};\n\nvar stringify = function (val) {\n  switch (typeof val) {\n    case 'string':\n    case 'number':\n    case 'object':\n      return JSON.stringify(val);\n\n    default:\n      return String(val);\n  }\n};\n\nvar _$Client_4 = Client;\n\nvar _$jsonPayload_21 = {};\n/* removed: var _$safeJsonStringify_30 = require('@bugsnag/safe-json-stringify'); */;\n\nvar EVENT_REDACTION_PATHS = ['events.[].metaData', 'events.[].breadcrumbs.[].metaData', 'events.[].request'];\n\n_$jsonPayload_21.event = function (event, redactedKeys) {\n  var payload = _$safeJsonStringify_30(event, null, null, {\n    redactedPaths: EVENT_REDACTION_PATHS,\n    redactedKeys: redactedKeys\n  });\n\n  if (payload.length > 10e5) {\n    event.events[0]._metadata = {\n      notifier: \"WARNING!\\nSerialized payload was \" + payload.length / 10e5 + \"MB (limit = 1MB)\\nmetadata was removed\"\n    };\n    payload = _$safeJsonStringify_30(event, null, null, {\n      redactedPaths: EVENT_REDACTION_PATHS,\n      redactedKeys: redactedKeys\n    });\n  }\n\n  return payload;\n};\n\n_$jsonPayload_21.session = function (session, redactedKeys) {\n  var payload = _$safeJsonStringify_30(session, null, null);\n  return payload;\n};\n\nvar _$delivery_36 = {};\n/* removed: var _$jsonPayload_21 = require('@bugsnag/core/lib/json-payload'); */;\n\n_$delivery_36 = function (client, win) {\n  if (win === void 0) {\n    win = window;\n  }\n\n  return {\n    sendEvent: function (event, cb) {\n      if (cb === void 0) {\n        cb = function () {};\n      }\n\n      var url = getApiUrl(client._config, 'notify', '4', win);\n      var body = _$jsonPayload_21.event(event, client._config.redactedKeys);\n      var req = new win.XDomainRequest();\n\n      req.onload = function () {\n        cb(null);\n      };\n\n      req.onerror = function () {\n        var err = new Error('Event failed to send');\n\n        client._logger.error('Event failed to send…', err);\n\n        if (body.length > 10e5) {\n          client._logger.warn(\"Event oversized (\" + (body.length / 10e5).toFixed(2) + \" MB)\");\n        }\n\n        cb(err);\n      };\n\n      req.open('POST', url);\n      setTimeout(function () {\n        try {\n          req.send(body);\n        } catch (e) {\n          client._logger.error(e);\n\n          cb(e);\n        }\n      }, 0);\n    },\n    sendSession: function (session, cb) {\n      if (cb === void 0) {\n        cb = function () {};\n      }\n\n      var url = getApiUrl(client._config, 'sessions', '1', win);\n      var req = new win.XDomainRequest();\n\n      req.onload = function () {\n        cb(null);\n      };\n\n      req.open('POST', url);\n      setTimeout(function () {\n        try {\n          req.send(_$jsonPayload_21.session(session, client._config.redactedKeys));\n        } catch (e) {\n          client._logger.error(e);\n\n          cb(e);\n        }\n      }, 0);\n    }\n  };\n};\n\nvar getApiUrl = function (config, endpoint, version, win) {\n  // IE8 doesn't support Date.prototype.toISOstring(), but it does convert a date\n  // to an ISO string when you use JSON stringify. Simply parsing the result of\n  // JSON.stringify is smaller than using a toISOstring() polyfill.\n  var isoDate = JSON.parse(JSON.stringify(new Date()));\n  var url = matchPageProtocol(config.endpoints[endpoint], win.location.protocol);\n  return url + \"?apiKey=\" + encodeURIComponent(config.apiKey) + \"&payloadVersion=\" + version + \"&sentAt=\" + encodeURIComponent(isoDate);\n};\n\nvar matchPageProtocol = _$delivery_36._matchPageProtocol = function (endpoint, pageProtocol) {\n  return pageProtocol === 'http:' ? endpoint.replace(/^https:/, 'http:') : endpoint;\n};\n\n/* removed: var _$jsonPayload_21 = require('@bugsnag/core/lib/json-payload'); */;\n\nvar _$delivery_37 = function (client, win) {\n  if (win === void 0) {\n    win = window;\n  }\n\n  return {\n    sendEvent: function (event, cb) {\n      if (cb === void 0) {\n        cb = function () {};\n      }\n\n      try {\n        var url = client._config.endpoints.notify;\n        var req = new win.XMLHttpRequest();\n        var body = _$jsonPayload_21.event(event, client._config.redactedKeys);\n\n        req.onreadystatechange = function () {\n          if (req.readyState === win.XMLHttpRequest.DONE) {\n            var status = req.status;\n\n            if (status === 0 || status >= 400) {\n              var err = new Error(\"Request failed with status \" + status);\n\n              client._logger.error('Event failed to send…', err);\n\n              if (body.length > 10e5) {\n                client._logger.warn(\"Event oversized (\" + (body.length / 10e5).toFixed(2) + \" MB)\");\n              }\n\n              cb(err);\n            } else {\n              cb(null);\n            }\n          }\n        };\n\n        req.open('POST', url);\n        req.setRequestHeader('Content-Type', 'application/json');\n        req.setRequestHeader('Bugsnag-Api-Key', event.apiKey || client._config.apiKey);\n        req.setRequestHeader('Bugsnag-Payload-Version', '4');\n        req.setRequestHeader('Bugsnag-Sent-At', new Date().toISOString());\n        req.send(body);\n      } catch (e) {\n        client._logger.error(e);\n      }\n    },\n    sendSession: function (session, cb) {\n      if (cb === void 0) {\n        cb = function () {};\n      }\n\n      try {\n        var url = client._config.endpoints.sessions;\n        var req = new win.XMLHttpRequest();\n\n        req.onreadystatechange = function () {\n          if (req.readyState === win.XMLHttpRequest.DONE) {\n            var status = req.status;\n\n            if (status === 0 || status >= 400) {\n              var err = new Error(\"Request failed with status \" + status);\n\n              client._logger.error('Session failed to send…', err);\n\n              cb(err);\n            } else {\n              cb(null);\n            }\n          }\n        };\n\n        req.open('POST', url);\n        req.setRequestHeader('Content-Type', 'application/json');\n        req.setRequestHeader('Bugsnag-Api-Key', client._config.apiKey);\n        req.setRequestHeader('Bugsnag-Payload-Version', '1');\n        req.setRequestHeader('Bugsnag-Sent-At', new Date().toISOString());\n        req.send(_$jsonPayload_21.session(session, client._config.redactedKeys));\n      } catch (e) {\n        client._logger.error(e);\n      }\n    }\n  };\n};\n\nvar appStart = new Date();\n\nvar reset = function () {\n  appStart = new Date();\n};\n\nvar _$app_38 = {\n  name: 'appDuration',\n  load: function (client) {\n    client.addOnError(function (event) {\n      var now = new Date();\n      event.app.duration = now - appStart;\n    }, true);\n    return {\n      reset: reset\n    };\n  }\n};\n\n/*\n * Sets the default context to be the current URL\n */\nvar _$context_39 = function (win) {\n  if (win === void 0) {\n    win = window;\n  }\n\n  return {\n    load: function (client) {\n      client.addOnError(function (event) {\n        if (event.context !== undefined) return;\n        event.context = win.location.pathname;\n      }, true);\n    }\n  };\n};\n\nvar _$pad_43 = function pad(num, size) {\n  var s = '000000000' + num;\n  return s.substr(s.length - size);\n};\n\n/* removed: var _$pad_43 = require('./pad.js'); */;\n\nvar __env_42 = typeof window === 'object' ? window : self;\nvar __globalCount_42 = 0;\n\nfor (var __prop_42 in __env_42) {\n  if (Object.hasOwnProperty.call(__env_42, __prop_42)) __globalCount_42++;\n}\n\nvar __mimeTypesLength_42 = navigator.mimeTypes ? navigator.mimeTypes.length : 0;\nvar __clientId_42 = _$pad_43((__mimeTypesLength_42 + navigator.userAgent.length).toString(36) + __globalCount_42.toString(36), 4);\n\nvar _$fingerprint_42 = function fingerprint() {\n  return __clientId_42;\n};\n\n/**\n * cuid.js\n * Collision-resistant UID generator for browsers and node.\n * Sequential for fast db lookups and recency sorting.\n * Safe for element IDs and server-side lookups.\n *\n * Extracted from CLCTR\n *\n * Copyright (c) Eric Elliott 2012\n * MIT License\n */\n/* removed: var _$fingerprint_42 = require('./lib/fingerprint.js'); */;\n\n/* removed: var _$pad_43 = require('./lib/pad.js'); */;\n\nvar __c_41 = 0,\n    __blockSize_41 = 4,\n    __base_41 = 36,\n    __discreteValues_41 = Math.pow(__base_41, __blockSize_41);\n\nfunction __randomBlock_41() {\n  return _$pad_43((Math.random() * __discreteValues_41 << 0).toString(__base_41), __blockSize_41);\n}\n\nfunction __safeCounter_41() {\n  __c_41 = __c_41 < __discreteValues_41 ? __c_41 : 0;\n  __c_41++; // this is not subliminal\n\n  return __c_41 - 1;\n}\n\nfunction __cuid_41() {\n  // Starting with a lowercase letter makes\n  // it HTML element ID friendly.\n  var letter = 'c',\n      // hard-coded allows for sequential access\n  // timestamp\n  // warning: this exposes the exact date and time\n  // that the uid was created.\n  timestamp = new Date().getTime().toString(__base_41),\n      // Prevent same-machine collisions.\n  counter = _$pad_43(__safeCounter_41().toString(__base_41), __blockSize_41),\n      // A few chars to generate distinct ids for different\n  // clients (so different computers are far less\n  // likely to generate the same id)\n  print = _$fingerprint_42(),\n      // Grab some more chars from Math.random()\n  random = __randomBlock_41() + __randomBlock_41();\n  return letter + timestamp + counter + print + random;\n}\n\n__cuid_41.fingerprint = _$fingerprint_42;\nvar _$cuid_41 = __cuid_41;\n\n/* removed: var _$assign_11 = require('@bugsnag/core/lib/es-utils/assign'); */;\n\nvar BUGSNAG_ANONYMOUS_ID_KEY = 'bugsnag-anonymous-id';\n\nvar getDeviceId = function (win) {\n  try {\n    var storage = win.localStorage;\n    var id = storage.getItem(BUGSNAG_ANONYMOUS_ID_KEY); // If we get an ID, make sure it looks like a valid cuid. The length can\n    // fluctuate slightly, so some leeway is built in\n\n    if (id && /^c[a-z0-9]{20,32}$/.test(id)) {\n      return id;\n    }\n\n    /* removed: var _$cuid_41 = require('@bugsnag/cuid'); */;\n\n    id = _$cuid_41();\n    storage.setItem(BUGSNAG_ANONYMOUS_ID_KEY, id);\n    return id;\n  } catch (err) {// If localStorage is not available (e.g. because it's disabled) then give up\n  }\n};\n/*\n * Automatically detects browser device details\n */\n\n\nvar _$device_40 = function (nav, win) {\n  if (nav === void 0) {\n    nav = navigator;\n  }\n\n  if (win === void 0) {\n    win = window;\n  }\n\n  return {\n    load: function (client) {\n      var device = {\n        locale: nav.browserLanguage || nav.systemLanguage || nav.userLanguage || nav.language,\n        userAgent: nav.userAgent\n      };\n\n      if (win && win.screen && win.screen.orientation && win.screen.orientation.type) {\n        device.orientation = win.screen.orientation.type;\n      } else if (win && win.document) {\n        device.orientation = win.document.documentElement.clientWidth > win.document.documentElement.clientHeight ? 'landscape' : 'portrait';\n      }\n\n      if (client._config.generateAnonymousId) {\n        device.id = getDeviceId(win);\n      }\n\n      client.addOnSession(function (session) {\n        session.device = _$assign_11({}, session.device, device); // only set device id if collectUserIp is false\n\n        if (!client._config.collectUserIp) setDefaultUserId(session);\n      }); // add time just as the event is sent\n\n      client.addOnError(function (event) {\n        event.device = _$assign_11({}, event.device, device, {\n          time: new Date()\n        });\n        if (!client._config.collectUserIp) setDefaultUserId(event);\n      }, true);\n    },\n    configSchema: {\n      generateAnonymousId: {\n        validate: function (value) {\n          return value === true || value === false;\n        },\n        defaultValue: function () {\n          return true;\n        },\n        message: 'should be true|false'\n      }\n    }\n  };\n};\n\nvar setDefaultUserId = function (eventOrSession) {\n  // device id is also used to populate the user id field, if it's not already set\n  var user = eventOrSession.getUser();\n\n  if (!user || !user.id) {\n    eventOrSession.setUser(eventOrSession.device.id);\n  }\n};\n\n/* removed: var _$assign_11 = require('@bugsnag/core/lib/es-utils/assign'); */;\n/*\n * Sets the event request: { url } to be the current href\n */\n\n\nvar _$request_44 = function (win) {\n  if (win === void 0) {\n    win = window;\n  }\n\n  return {\n    load: function (client) {\n      client.addOnError(function (event) {\n        if (event.request && event.request.url) return;\n        event.request = _$assign_11({}, event.request, {\n          url: win.location.href\n        });\n      }, true);\n    }\n  };\n};\n\n/* removed: var _$includes_13 = require('@bugsnag/core/lib/es-utils/includes'); */;\n\nvar _$session_45 = {\n  load: function (client) {\n    client._sessionDelegate = sessionDelegate;\n  }\n};\nvar sessionDelegate = {\n  startSession: function (client, session) {\n    var sessionClient = client;\n    sessionClient._session = session;\n    sessionClient._pausedSession = null; // exit early if the current releaseStage is not enabled\n\n    if (sessionClient._config.enabledReleaseStages !== null && !_$includes_13(sessionClient._config.enabledReleaseStages, sessionClient._config.releaseStage)) {\n      sessionClient._logger.warn('Session not sent due to releaseStage/enabledReleaseStages configuration');\n\n      return sessionClient;\n    }\n\n    sessionClient._delivery.sendSession({\n      notifier: sessionClient._notifier,\n      device: session.device,\n      app: session.app,\n      sessions: [{\n        id: session.id,\n        startedAt: session.startedAt,\n        user: session._user\n      }]\n    });\n\n    return sessionClient;\n  },\n  resumeSession: function (client) {\n    // Do nothing if there's already an active session\n    if (client._session) {\n      return client;\n    } // If we have a paused session then make it the active session\n\n\n    if (client._pausedSession) {\n      client._session = client._pausedSession;\n      client._pausedSession = null;\n      return client;\n    } // Otherwise start a new session\n\n\n    return client.startSession();\n  },\n  pauseSession: function (client) {\n    client._pausedSession = client._session;\n    client._session = null;\n  }\n};\n\n/* removed: var _$assign_11 = require('@bugsnag/core/lib/es-utils/assign'); */;\n/*\n * Prevent collection of user IPs\n */\n\n\nvar _$clientIp_46 = {\n  load: function (client) {\n    if (client._config.collectUserIp) return;\n    client.addOnError(function (event) {\n      // If user.id is explicitly undefined, it will be missing from the payload. It needs\n      // removing so that the following line replaces it\n      if (event._user && typeof event._user.id === 'undefined') delete event._user.id;\n      event._user = _$assign_11({\n        id: '[REDACTED]'\n      }, event._user);\n      event.request = _$assign_11({\n        clientIp: '[REDACTED]'\n      }, event.request);\n    });\n  },\n  configSchema: {\n    collectUserIp: {\n      defaultValue: function () {\n        return true;\n      },\n      message: 'should be true|false',\n      validate: function (value) {\n        return value === true || value === false;\n      }\n    }\n  }\n};\n\nvar _$consoleBreadcrumbs_47 = {};\n/* removed: var _$map_16 = require('@bugsnag/core/lib/es-utils/map'); */;\n\n/* removed: var _$reduce_17 = require('@bugsnag/core/lib/es-utils/reduce'); */;\n\n/* removed: var _$filter_12 = require('@bugsnag/core/lib/es-utils/filter'); */;\n/*\n * Leaves breadcrumbs when console log methods are called\n */\n\n\n_$consoleBreadcrumbs_47.load = function (client) {\n  var isDev = /^(local-)?dev(elopment)?$/.test(client._config.releaseStage);\n  if (isDev || !client._isBreadcrumbTypeEnabled('log')) return;\n  _$map_16(CONSOLE_LOG_METHODS, function (method) {\n    var original = console[method];\n\n    console[method] = function () {\n      for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n        args[_key] = arguments[_key];\n      }\n\n      client.leaveBreadcrumb('Console output', _$reduce_17(args, function (accum, arg, i) {\n        // do the best/simplest stringification of each argument\n        var stringified = '[Unknown value]'; // this may fail if the input is:\n        // - an object whose [[Prototype]] is null (no toString)\n        // - an object with a broken toString or @@toPrimitive implementation\n\n        try {\n          stringified = String(arg);\n        } catch (e) {} // if it stringifies to [object Object] attempt to JSON stringify\n\n\n        if (stringified === '[object Object]') {\n          // catch stringify errors and fallback to [object Object]\n          try {\n            stringified = JSON.stringify(arg);\n          } catch (e) {}\n        }\n\n        accum[\"[\" + i + \"]\"] = stringified;\n        return accum;\n      }, {\n        severity: method.indexOf('group') === 0 ? 'log' : method\n      }), 'log');\n      original.apply(console, args);\n    };\n\n    console[method]._restore = function () {\n      console[method] = original;\n    };\n  });\n};\n\nif (\"production\" !== 'production') {\n  _$consoleBreadcrumbs_47.destroy = function () {\n    return CONSOLE_LOG_METHODS.forEach(function (method) {\n      if (typeof console[method]._restore === 'function') console[method]._restore();\n    });\n  };\n}\n\nvar CONSOLE_LOG_METHODS = _$filter_12(['log', 'debug', 'info', 'warn', 'error'], function (method) {\n  return typeof console !== 'undefined' && typeof console[method] === 'function';\n});\n\n/* removed: var _$map_16 = require('@bugsnag/core/lib/es-utils/map'); */;\n\n/* removed: var _$reduce_17 = require('@bugsnag/core/lib/es-utils/reduce'); */;\n\n/* removed: var _$filter_12 = require('@bugsnag/core/lib/es-utils/filter'); */;\n\nvar MAX_LINE_LENGTH = 200;\nvar MAX_SCRIPT_LENGTH = 500000;\n\nvar _$inlineScriptContent_48 = function (doc, win) {\n  if (doc === void 0) {\n    doc = document;\n  }\n\n  if (win === void 0) {\n    win = window;\n  }\n\n  return {\n    load: function (client) {\n      if (!client._config.trackInlineScripts) return;\n      var originalLocation = win.location.href;\n      var html = ''; // in IE8-10 the 'interactive' state can fire too soon (before scripts have finished executing), so in those\n      // we wait for the 'complete' state before assuming that synchronous scripts are no longer executing\n\n      var isOldIe = !!doc.attachEvent;\n      var DOMContentLoaded = isOldIe ? doc.readyState === 'complete' : doc.readyState !== 'loading';\n\n      var getHtml = function () {\n        return doc.documentElement.outerHTML;\n      }; // get whatever HTML exists at this point in time\n\n\n      html = getHtml();\n      var prev = doc.onreadystatechange; // then update it when the DOM content has loaded\n\n      doc.onreadystatechange = function () {\n        // IE8 compatible alternative to document#DOMContentLoaded\n        if (doc.readyState === 'interactive') {\n          html = getHtml();\n          DOMContentLoaded = true;\n        }\n\n        try {\n          prev.apply(this, arguments);\n        } catch (e) {}\n      };\n\n      var _lastScript = null;\n\n      var updateLastScript = function (script) {\n        _lastScript = script;\n      };\n\n      var getCurrentScript = function () {\n        var script = doc.currentScript || _lastScript;\n\n        if (!script && !DOMContentLoaded) {\n          var scripts = doc.scripts || doc.getElementsByTagName('script');\n          script = scripts[scripts.length - 1];\n        }\n\n        return script;\n      };\n\n      var addSurroundingCode = function (lineNumber) {\n        // get whatever html has rendered at this point\n        if (!DOMContentLoaded || !html) html = getHtml(); // simulate the raw html\n\n        var htmlLines = ['<!-- DOC START -->'].concat(html.split('\\n'));\n        var zeroBasedLine = lineNumber - 1;\n        var start = Math.max(zeroBasedLine - 3, 0);\n        var end = Math.min(zeroBasedLine + 3, htmlLines.length);\n        return _$reduce_17(htmlLines.slice(start, end), function (accum, line, i) {\n          accum[start + 1 + i] = line.length <= MAX_LINE_LENGTH ? line : line.substr(0, MAX_LINE_LENGTH);\n          return accum;\n        }, {});\n      };\n\n      client.addOnError(function (event) {\n        // remove any of our own frames that may be part the stack this\n        // happens before the inline script check as it happens for all errors\n        event.errors[0].stacktrace = _$filter_12(event.errors[0].stacktrace, function (f) {\n          return !/__trace__$/.test(f.method);\n        });\n        var frame = event.errors[0].stacktrace[0]; // remove hash and query string from url\n\n        var cleanUrl = function (url) {\n          return url.replace(/#.*$/, '').replace(/\\?.*$/, '');\n        }; // if frame.file exists and is not the original location of the page, this can't be an inline script\n\n\n        if (frame && frame.file && cleanUrl(frame.file) !== cleanUrl(originalLocation)) return; // grab the last script known to have run\n\n        var currentScript = getCurrentScript();\n\n        if (currentScript) {\n          var content = currentScript.innerHTML;\n          event.addMetadata('script', 'content', content.length <= MAX_SCRIPT_LENGTH ? content : content.substr(0, MAX_SCRIPT_LENGTH)); // only attempt to grab some surrounding code if we have a line number\n\n          if (frame && frame.lineNumber) {\n            frame.code = addSurroundingCode(frame.lineNumber);\n          }\n        }\n      }, true); // Proxy all the timer functions whose callback is their 0th argument.\n      // Keep a reference to the original setTimeout because we need it later\n\n      var _map = _$map_16(['setTimeout', 'setInterval', 'setImmediate', 'requestAnimationFrame'], function (fn) {\n        return __proxy(win, fn, function (original) {\n          return __traceOriginalScript(original, function (args) {\n            return {\n              get: function () {\n                return args[0];\n              },\n              replace: function (fn) {\n                args[0] = fn;\n              }\n            };\n          });\n        });\n      }),\n          _setTimeout = _map[0]; // Proxy all the host objects whose prototypes have an addEventListener function\n\n\n      _$map_16(['EventTarget', 'Window', 'Node', 'ApplicationCache', 'AudioTrackList', 'ChannelMergerNode', 'CryptoOperation', 'EventSource', 'FileReader', 'HTMLUnknownElement', 'IDBDatabase', 'IDBRequest', 'IDBTransaction', 'KeyOperation', 'MediaController', 'MessagePort', 'ModalWindow', 'Notification', 'SVGElementInstance', 'Screen', 'TextTrack', 'TextTrackCue', 'TextTrackList', 'WebSocket', 'WebSocketWorker', 'Worker', 'XMLHttpRequest', 'XMLHttpRequestEventTarget', 'XMLHttpRequestUpload'], function (o) {\n        if (!win[o] || !win[o].prototype || !Object.prototype.hasOwnProperty.call(win[o].prototype, 'addEventListener')) return;\n\n        __proxy(win[o].prototype, 'addEventListener', function (original) {\n          return __traceOriginalScript(original, eventTargetCallbackAccessor);\n        });\n\n        __proxy(win[o].prototype, 'removeEventListener', function (original) {\n          return __traceOriginalScript(original, eventTargetCallbackAccessor, true);\n        });\n      });\n\n      function __traceOriginalScript(fn, callbackAccessor, alsoCallOriginal) {\n        if (alsoCallOriginal === void 0) {\n          alsoCallOriginal = false;\n        }\n\n        return function () {\n          // this is required for removeEventListener to remove anything added with\n          // addEventListener before the functions started being wrapped by Bugsnag\n          var args = [].slice.call(arguments);\n\n          try {\n            var cba = callbackAccessor(args);\n            var cb = cba.get();\n            if (alsoCallOriginal) fn.apply(this, args);\n            if (typeof cb !== 'function') return fn.apply(this, args);\n\n            if (cb.__trace__) {\n              cba.replace(cb.__trace__);\n            } else {\n              var script = getCurrentScript(); // this function mustn't be annonymous due to a bug in the stack\n              // generation logic, meaning it gets tripped up\n              // see: https://github.com/stacktracejs/stack-generator/issues/6\n\n              cb.__trace__ = function __trace__() {\n                // set the script that called this function\n                updateLastScript(script); // immediately unset the currentScript synchronously below, however\n                // if this cb throws an error the line after will not get run so schedule\n                // an almost-immediate aysnc update too\n\n                _setTimeout(function () {\n                  updateLastScript(null);\n                }, 0);\n\n                var ret = cb.apply(this, arguments);\n                updateLastScript(null);\n                return ret;\n              };\n\n              cb.__trace__.__trace__ = cb.__trace__;\n              cba.replace(cb.__trace__);\n            }\n          } catch (e) {// swallow these errors on Selenium:\n            // Permission denied to access property '__trace__'\n            // WebDriverException: Message: Permission denied to access property \"handleEvent\"\n          } // IE8 doesn't let you call .apply() on setTimeout/setInterval\n\n\n          if (fn.apply) return fn.apply(this, args);\n\n          switch (args.length) {\n            case 1:\n              return fn(args[0]);\n\n            case 2:\n              return fn(args[0], args[1]);\n\n            default:\n              return fn();\n          }\n        };\n      }\n    },\n    configSchema: {\n      trackInlineScripts: {\n        validate: function (value) {\n          return value === true || value === false;\n        },\n        defaultValue: function () {\n          return true;\n        },\n        message: 'should be true|false'\n      }\n    }\n  };\n};\n\nfunction __proxy(host, name, replacer) {\n  var original = host[name];\n  if (!original) return original;\n  var replacement = replacer(original);\n  host[name] = replacement;\n  return original;\n}\n\nfunction eventTargetCallbackAccessor(args) {\n  var isEventHandlerObj = !!args[1] && typeof args[1].handleEvent === 'function';\n  return {\n    get: function () {\n      return isEventHandlerObj ? args[1].handleEvent : args[1];\n    },\n    replace: function (fn) {\n      if (isEventHandlerObj) {\n        args[1].handleEvent = fn;\n      } else {\n        args[1] = fn;\n      }\n    }\n  };\n}\n\n/*\n * Leaves breadcrumbs when the user interacts with the DOM\n */\nvar _$interactionBreadcrumbs_49 = function (win) {\n  if (win === void 0) {\n    win = window;\n  }\n\n  return {\n    load: function (client) {\n      if (!('addEventListener' in win)) return;\n      if (!client._isBreadcrumbTypeEnabled('user')) return;\n      win.addEventListener('click', function (event) {\n        var targetText, targetSelector;\n\n        try {\n          targetText = getNodeText(event.target);\n          targetSelector = getNodeSelector(event.target, win);\n        } catch (e) {\n          targetText = '[hidden]';\n          targetSelector = '[hidden]';\n\n          client._logger.error('Cross domain error when tracking click event. See docs: https://tinyurl.com/yy3rn63z');\n        }\n\n        client.leaveBreadcrumb('UI click', {\n          targetText: targetText,\n          targetSelector: targetSelector\n        }, 'user');\n      }, true);\n    }\n  };\n};\n\nvar trimStart = /^\\s+/;\nvar trimEnd = /(^|[^\\s])\\s+$/;\n\nfunction getNodeText(el) {\n  var text = el.textContent || el.innerText || '';\n\n  if (!text && (el.type === 'submit' || el.type === 'button')) {\n    text = el.value;\n  }\n\n  text = text.replace(trimStart, '').replace(trimEnd, '$1');\n\n  if (text.length > 140) {\n    return text.slice(0, 135) + '(...)';\n  }\n\n  return text;\n} // Create a label from tagname, id and css class of the element\n\n\nfunction getNodeSelector(el, win) {\n  var parts = [el.tagName];\n  if (el.id) parts.push('#' + el.id);\n  if (el.className && el.className.length) parts.push(\".\" + el.className.split(' ').join('.')); // Can't get much more advanced with the current browser\n\n  if (!win.document.querySelectorAll || !Array.prototype.indexOf) return parts.join('');\n\n  try {\n    if (win.document.querySelectorAll(parts.join('')).length === 1) return parts.join('');\n  } catch (e) {\n    // Sometimes the query selector can be invalid just return it as-is\n    return parts.join('');\n  } // try to get a more specific selector if this one matches more than one element\n\n\n  if (el.parentNode.childNodes.length > 1) {\n    var index = Array.prototype.indexOf.call(el.parentNode.childNodes, el) + 1;\n    parts.push(\":nth-child(\" + index + \")\");\n  }\n\n  if (win.document.querySelectorAll(parts.join('')).length === 1) return parts.join(''); // try prepending the parent node selector\n\n  if (el.parentNode) return getNodeSelector(el.parentNode, win) + \" > \" + parts.join('');\n  return parts.join('');\n}\n\nvar _$navigationBreadcrumbs_50 = {};\n/*\n* Leaves breadcrumbs when navigation methods are called or events are emitted\n*/\n_$navigationBreadcrumbs_50 = function (win) {\n  if (win === void 0) {\n    win = window;\n  }\n\n  var plugin = {\n    load: function (client) {\n      if (!('addEventListener' in win)) return;\n      if (!client._isBreadcrumbTypeEnabled('navigation')) return; // returns a function that will drop a breadcrumb with a given name\n\n      var drop = function (name) {\n        return function () {\n          return client.leaveBreadcrumb(name, {}, 'navigation');\n        };\n      }; // simple drops – just names, no meta\n\n\n      win.addEventListener('pagehide', drop('Page hidden'), true);\n      win.addEventListener('pageshow', drop('Page shown'), true);\n      win.addEventListener('load', drop('Page loaded'), true);\n      win.document.addEventListener('DOMContentLoaded', drop('DOMContentLoaded'), true); // some browsers like to emit popstate when the page loads, so only add the popstate listener after that\n\n      win.addEventListener('load', function () {\n        return win.addEventListener('popstate', drop('Navigated back'), true);\n      }); // hashchange has some metadata that we care about\n\n      win.addEventListener('hashchange', function (event) {\n        var metadata = event.oldURL ? {\n          from: relativeLocation(event.oldURL, win),\n          to: relativeLocation(event.newURL, win),\n          state: getCurrentState(win)\n        } : {\n          to: relativeLocation(win.location.href, win)\n        };\n        client.leaveBreadcrumb('Hash changed', metadata, 'navigation');\n      }, true); // the only way to know about replaceState/pushState is to wrap them… >_<\n\n      if (win.history.replaceState) wrapHistoryFn(client, win.history, 'replaceState', win);\n      if (win.history.pushState) wrapHistoryFn(client, win.history, 'pushState', win);\n    }\n  };\n\n  if (\"production\" !== 'production') {\n    plugin.destroy = function (win) {\n      if (win === void 0) {\n        win = window;\n      }\n\n      win.history.replaceState._restore();\n\n      win.history.pushState._restore();\n    };\n  }\n\n  return plugin;\n};\n\nif (\"production\" !== 'production') {\n  _$navigationBreadcrumbs_50.destroy = function (win) {\n    if (win === void 0) {\n      win = window;\n    }\n\n    win.history.replaceState._restore();\n\n    win.history.pushState._restore();\n  };\n} // takes a full url like http://foo.com:1234/pages/01.html?yes=no#section-2 and returns\n// just the path and hash parts, e.g. /pages/01.html?yes=no#section-2\n\n\nvar relativeLocation = function (url, win) {\n  var a = win.document.createElement('A');\n  a.href = url;\n  return \"\" + a.pathname + a.search + a.hash;\n};\n\nvar stateChangeToMetadata = function (win, state, title, url) {\n  var currentPath = relativeLocation(win.location.href, win);\n  return {\n    title: title,\n    state: state,\n    prevState: getCurrentState(win),\n    to: url || currentPath,\n    from: currentPath\n  };\n};\n\nvar wrapHistoryFn = function (client, target, fn, win) {\n  var orig = target[fn];\n\n  target[fn] = function (state, title, url) {\n    client.leaveBreadcrumb(\"History \" + fn, stateChangeToMetadata(win, state, title, url), 'navigation'); // if throttle plugin is in use, reset the event sent count\n\n    if (typeof client.resetEventCount === 'function') client.resetEventCount(); // if the client is operating in auto session-mode, a new route should trigger a new session\n\n    if (client._config.autoTrackSessions) client.startSession(); // Internet Explorer will convert `undefined` to a string when passed, causing an unintended redirect\n    // to '/undefined'. therefore we only pass the url if it's not undefined.\n\n    orig.apply(target, [state, title].concat(url !== undefined ? url : []));\n  };\n\n  if (\"production\" !== 'production') {\n    target[fn]._restore = function () {\n      target[fn] = orig;\n    };\n  }\n};\n\nvar getCurrentState = function (win) {\n  try {\n    return win.history.state;\n  } catch (e) {}\n};\n\nvar BREADCRUMB_TYPE = 'request';\n\n/* removed: var _$includes_13 = require('@bugsnag/core/lib/es-utils/includes'); */;\n/*\n * Leaves breadcrumbs when network requests occur\n */\n\n\nvar _$networkBreadcrumbs_51 = function (_ignoredUrls, win) {\n  if (_ignoredUrls === void 0) {\n    _ignoredUrls = [];\n  }\n\n  if (win === void 0) {\n    win = window;\n  }\n\n  var restoreFunctions = [];\n  var plugin = {\n    load: function (client) {\n      if (!client._isBreadcrumbTypeEnabled('request')) return;\n      var ignoredUrls = [client._config.endpoints.notify, client._config.endpoints.sessions].concat(_ignoredUrls);\n      monkeyPatchXMLHttpRequest();\n      monkeyPatchFetch(); // XMLHttpRequest monkey patch\n\n      function monkeyPatchXMLHttpRequest() {\n        if (!('addEventListener' in win.XMLHttpRequest.prototype)) return;\n        var nativeOpen = win.XMLHttpRequest.prototype.open; // override native open()\n\n        win.XMLHttpRequest.prototype.open = function open(method, url) {\n          var _this = this;\n\n          var requestSetupKey = false;\n\n          var error = function () {\n            return handleXHRError(method, url);\n          };\n\n          var load = function () {\n            return handleXHRLoad(method, url, _this.status);\n          }; // if we have already setup listeners, it means open() was called twice, we need to remove\n          // the listeners and recreate them\n\n\n          if (requestSetupKey) {\n            this.removeEventListener('load', load);\n            this.removeEventListener('error', error);\n          } // attach load event listener\n\n\n          this.addEventListener('load', load); // attach error event listener\n\n          this.addEventListener('error', error);\n          requestSetupKey = true;\n          nativeOpen.apply(this, arguments);\n        };\n\n        if (\"production\" !== 'production') {\n          restoreFunctions.push(function () {\n            win.XMLHttpRequest.prototype.open = nativeOpen;\n          });\n        }\n      }\n\n      function handleXHRLoad(method, url, status) {\n        if (url === undefined) {\n          client._logger.warn('The request URL is no longer present on this XMLHttpRequest. A breadcrumb cannot be left for this request.');\n\n          return;\n        } // an XMLHttpRequest's URL can be an object as long as its 'toString'\n        // returns a URL, e.g. a HTMLAnchorElement\n\n\n        if (typeof url === 'string' && _$includes_13(ignoredUrls, url.replace(/\\?.*$/, ''))) {\n          // don't leave a network breadcrumb from bugsnag notify calls\n          return;\n        }\n\n        var metadata = {\n          status: status,\n          request: method + \" \" + url\n        };\n\n        if (status >= 400) {\n          // contacted server but got an error response\n          client.leaveBreadcrumb('XMLHttpRequest failed', metadata, BREADCRUMB_TYPE);\n        } else {\n          client.leaveBreadcrumb('XMLHttpRequest succeeded', metadata, BREADCRUMB_TYPE);\n        }\n      }\n\n      function handleXHRError(method, url) {\n        if (url === undefined) {\n          client._logger.warn('The request URL is no longer present on this XMLHttpRequest. A breadcrumb cannot be left for this request.');\n\n          return;\n        }\n\n        if (typeof url === 'string' && _$includes_13(ignoredUrls, url.replace(/\\?.*$/, ''))) {\n          // don't leave a network breadcrumb from bugsnag notify calls\n          return;\n        } // failed to contact server\n\n\n        client.leaveBreadcrumb('XMLHttpRequest error', {\n          request: method + \" \" + url\n        }, BREADCRUMB_TYPE);\n      } // window.fetch monkey patch\n\n\n      function monkeyPatchFetch() {\n        // only patch it if it exists and if it is not a polyfill (patching a polyfilled\n        // fetch() results in duplicate breadcrumbs for the same request because the\n        // implementation uses XMLHttpRequest which is also patched)\n        if (!('fetch' in win) || win.fetch.polyfill) return;\n        var oldFetch = win.fetch;\n\n        win.fetch = function fetch() {\n          var _arguments = arguments;\n          var urlOrRequest = arguments[0];\n          var options = arguments[1];\n          var method;\n          var url = null;\n\n          if (urlOrRequest && typeof urlOrRequest === 'object') {\n            url = urlOrRequest.url;\n\n            if (options && 'method' in options) {\n              method = options.method;\n            } else if (urlOrRequest && 'method' in urlOrRequest) {\n              method = urlOrRequest.method;\n            }\n          } else {\n            url = urlOrRequest;\n\n            if (options && 'method' in options) {\n              method = options.method;\n            }\n          }\n\n          if (method === undefined) {\n            method = 'GET';\n          }\n\n          return new Promise(function (resolve, reject) {\n            // pass through to native fetch\n            oldFetch.apply(void 0, _arguments).then(function (response) {\n              handleFetchSuccess(response, method, url);\n              resolve(response);\n            })[\"catch\"](function (error) {\n              handleFetchError(method, url);\n              reject(error);\n            });\n          });\n        };\n\n        if (\"production\" !== 'production') {\n          restoreFunctions.push(function () {\n            win.fetch = oldFetch;\n          });\n        }\n      }\n\n      var handleFetchSuccess = function (response, method, url) {\n        var metadata = {\n          status: response.status,\n          request: method + \" \" + url\n        };\n\n        if (response.status >= 400) {\n          // when the request comes back with a 4xx or 5xx status it does not reject the fetch promise,\n          client.leaveBreadcrumb('fetch() failed', metadata, BREADCRUMB_TYPE);\n        } else {\n          client.leaveBreadcrumb('fetch() succeeded', metadata, BREADCRUMB_TYPE);\n        }\n      };\n\n      var handleFetchError = function (method, url) {\n        client.leaveBreadcrumb('fetch() error', {\n          request: method + \" \" + url\n        }, BREADCRUMB_TYPE);\n      };\n    }\n  };\n\n  if (\"production\" !== 'production') {\n    plugin.destroy = function () {\n      restoreFunctions.forEach(function (fn) {\n        return fn();\n      });\n      restoreFunctions = [];\n    };\n  }\n\n  return plugin;\n};\n\n/* removed: var _$intRange_24 = require('@bugsnag/core/lib/validators/int-range'); */;\n/*\n * Throttles and dedupes events\n */\n\n\nvar _$throttle_52 = {\n  load: function (client) {\n    // track sent events for each init of the plugin\n    var n = 0; // add onError hook\n\n    client.addOnError(function (event) {\n      // have max events been sent already?\n      if (n >= client._config.maxEvents) {\n        client._logger.warn(\"Cancelling event send due to maxEvents per session limit of \" + client._config.maxEvents + \" being reached\");\n\n        return false;\n      }\n\n      n++;\n    });\n\n    client.resetEventCount = function () {\n      n = 0;\n    };\n  },\n  configSchema: {\n    maxEvents: {\n      defaultValue: function () {\n        return 10;\n      },\n      message: 'should be a positive integer ≤100',\n      validate: function (val) {\n        return _$intRange_24(1, 100)(val);\n      }\n    }\n  }\n};\n\nvar _$stripQueryString_53 = {};\n/*\n * Remove query strings (and fragments) from stacktraces\n */\n/* removed: var _$map_16 = require('@bugsnag/core/lib/es-utils/map'); */;\n\n/* removed: var _$reduce_17 = require('@bugsnag/core/lib/es-utils/reduce'); */;\n\n_$stripQueryString_53 = {\n  load: function (client) {\n    client.addOnError(function (event) {\n      var allFrames = _$reduce_17(event.errors, function (accum, er) {\n        return accum.concat(er.stacktrace);\n      }, []);\n      _$map_16(allFrames, function (frame) {\n        frame.file = strip(frame.file);\n      });\n    });\n  }\n};\n\nvar strip = _$stripQueryString_53._strip = function (str) {\n  return typeof str === 'string' ? str.replace(/\\?.*$/, '').replace(/#.*$/, '') : str;\n};\n\n/*\n * Automatically notifies Bugsnag when window.onerror is called\n */\nvar _$onerror_54 = function (win, component) {\n  if (win === void 0) {\n    win = window;\n  }\n\n  if (component === void 0) {\n    component = 'window onerror';\n  }\n\n  return {\n    load: function (client) {\n      if (!client._config.autoDetectErrors) return;\n      if (!client._config.enabledErrorTypes.unhandledExceptions) return;\n\n      function onerror(messageOrEvent, url, lineNo, charNo, error) {\n        // Ignore errors with no info due to CORS settings\n        if (lineNo === 0 && /Script error\\.?/.test(messageOrEvent)) {\n          client._logger.warn('Ignoring cross-domain or eval script error. See docs: https://tinyurl.com/yy3rn63z');\n        } else {\n          // any error sent to window.onerror is unhandled and has severity=error\n          var handledState = {\n            severity: 'error',\n            unhandled: true,\n            severityReason: {\n              type: 'unhandledException'\n            }\n          };\n          var event; // window.onerror can be called in a number of ways. This big if-else is how we\n          // figure out which arguments were supplied, and what kind of values it received.\n\n          if (error) {\n            // if the last parameter (error) was supplied, this is a modern browser's\n            // way of saying \"this value was thrown and not caught\"\n            event = client.Event.create(error, true, handledState, component, 1);\n            decorateStack(event.errors[0].stacktrace, url, lineNo, charNo);\n          } else if ( // This complex case detects \"error\" events that are typically synthesised\n          // by jquery's trigger method (although can be created in other ways). In\n          // order to detect this:\n          // - the first argument (message) must exist and be an object (most likely it's a jQuery event)\n          // - the second argument (url) must either not exist or be something other than a string (if it\n          //    exists and is not a string, it'll be the extraParameters argument from jQuery's trigger()\n          //    function)\n          // - the third, fourth and fifth arguments must not exist (lineNo, charNo and error)\n          typeof messageOrEvent === 'object' && messageOrEvent !== null && (!url || typeof url !== 'string') && !lineNo && !charNo && !error) {\n            // The jQuery event may have a \"type\" property, if so use it as part of the error message\n            var name = messageOrEvent.type ? \"Event: \" + messageOrEvent.type : 'Error'; // attempt to find a message from one of the conventional properties, but\n            // default to empty string (the event will fill it with a placeholder)\n\n            var message = messageOrEvent.message || messageOrEvent.detail || '';\n            event = client.Event.create({\n              name: name,\n              message: message\n            }, true, handledState, component, 1); // provide the original thing onerror received – not our error-like object we passed to _notify\n\n            event.originalError = messageOrEvent; // include the raw input as metadata – it might contain more info than we extracted\n\n            event.addMetadata(component, {\n              event: messageOrEvent,\n              extraParameters: url\n            });\n          } else {\n            // Lastly, if there was no \"error\" parameter this event was probably from an old\n            // browser that doesn't support that. Instead we need to generate a stacktrace.\n            event = client.Event.create(messageOrEvent, true, handledState, component, 1);\n            decorateStack(event.errors[0].stacktrace, url, lineNo, charNo);\n          }\n\n          client._notify(event);\n        }\n\n        if (typeof prevOnError === 'function') prevOnError.apply(this, arguments);\n      }\n\n      var prevOnError = win.onerror;\n      win.onerror = onerror;\n    }\n  };\n}; // Sometimes the stacktrace has less information than was passed to window.onerror.\n// This function will augment the first stackframe with any useful info that was\n// received as arguments to the onerror callback.\n\n\nvar decorateStack = function (stack, url, lineNo, charNo) {\n  if (!stack[0]) stack.push({});\n  var culprit = stack[0];\n  if (!culprit.file && typeof url === 'string') culprit.file = url;\n  if (!culprit.lineNumber && isActualNumber(lineNo)) culprit.lineNumber = lineNo;\n\n  if (!culprit.columnNumber) {\n    if (isActualNumber(charNo)) {\n      culprit.columnNumber = charNo;\n    } else if (window.event && isActualNumber(window.event.errorCharacter)) {\n      culprit.columnNumber = window.event.errorCharacter;\n    }\n  }\n};\n\nvar isActualNumber = function (n) {\n  return typeof n === 'number' && String.call(n) !== 'NaN';\n};\n\n/* removed: var _$map_16 = require('@bugsnag/core/lib/es-utils/map'); */;\n\n/* removed: var _$iserror_20 = require('@bugsnag/core/lib/iserror'); */;\n\nvar _listener;\n/*\n * Automatically notifies Bugsnag when window.onunhandledrejection is called\n */\n\n\nvar _$unhandledRejection_55 = function (win) {\n  if (win === void 0) {\n    win = window;\n  }\n\n  var plugin = {\n    load: function (client) {\n      if (!client._config.autoDetectErrors || !client._config.enabledErrorTypes.unhandledRejections) return;\n\n      var listener = function (evt) {\n        var error = evt.reason;\n        var isBluebird = false; // accessing properties on evt.detail can throw errors (see #394)\n\n        try {\n          if (evt.detail && evt.detail.reason) {\n            error = evt.detail.reason;\n            isBluebird = true;\n          }\n        } catch (e) {}\n\n        var event = client.Event.create(error, false, {\n          severity: 'error',\n          unhandled: true,\n          severityReason: {\n            type: 'unhandledPromiseRejection'\n          }\n        }, 'unhandledrejection handler', 1, client._logger);\n\n        if (isBluebird) {\n          _$map_16(event.errors[0].stacktrace, fixBluebirdStacktrace(error));\n        }\n\n        client._notify(event, function (event) {\n          if (_$iserror_20(event.originalError) && !event.originalError.stack) {\n            var _event$addMetadata;\n\n            event.addMetadata('unhandledRejection handler', (_event$addMetadata = {}, _event$addMetadata[Object.prototype.toString.call(event.originalError)] = {\n              name: event.originalError.name,\n              message: event.originalError.message,\n              code: event.originalError.code\n            }, _event$addMetadata));\n          }\n        });\n      };\n\n      if ('addEventListener' in win) {\n        win.addEventListener('unhandledrejection', listener);\n      } else {\n        win.onunhandledrejection = function (reason, promise) {\n          listener({\n            detail: {\n              reason: reason,\n              promise: promise\n            }\n          });\n        };\n      }\n\n      _listener = listener;\n    }\n  };\n\n  if (\"production\" !== 'production') {\n    plugin.destroy = function (win) {\n      if (win === void 0) {\n        win = window;\n      }\n\n      if (_listener) {\n        if ('addEventListener' in win) {\n          win.removeEventListener('unhandledrejection', _listener);\n        } else {\n          win.onunhandledrejection = null;\n        }\n      }\n\n      _listener = null;\n    };\n  }\n\n  return plugin;\n}; // The stack parser on bluebird stacks in FF get a suprious first frame:\n//\n// Error: derp\n//   b@http://localhost:5000/bluebird.html:22:24\n//   a@http://localhost:5000/bluebird.html:18:9\n//   @http://localhost:5000/bluebird.html:14:9\n//\n// results in\n//   […]\n//     0: Object { file: \"Error: derp\", method: undefined, lineNumber: undefined, … }\n//     1: Object { file: \"http://localhost:5000/bluebird.html\", method: \"b\", lineNumber: 22, … }\n//     2: Object { file: \"http://localhost:5000/bluebird.html\", method: \"a\", lineNumber: 18, … }\n//     3: Object { file: \"http://localhost:5000/bluebird.html\", lineNumber: 14, columnNumber: 9, … }\n//\n// so the following reduce/accumulator function removes such frames\n//\n// Bluebird pads method names with spaces so trim that too…\n// https://github.com/petkaantonov/bluebird/blob/b7f21399816d02f979fe434585334ce901dcaf44/src/debuggability.js#L568-L571\n\n\nvar fixBluebirdStacktrace = function (error) {\n  return function (frame) {\n    if (frame.file === error.toString()) return;\n\n    if (frame.method) {\n      frame.method = frame.method.replace(/^\\s+/, '');\n    }\n  };\n};\n\nvar _$notifier_2 = {};\nvar name = 'Bugsnag JavaScript';\nvar version = '7.20.2';\nvar url = 'https://github.com/bugsnag/bugsnag-js';\n\n/* removed: var _$Client_4 = require('@bugsnag/core/client'); */;\n\n/* removed: var _$Event_6 = require('@bugsnag/core/event'); */;\n\n/* removed: var _$Session_35 = require('@bugsnag/core/session'); */;\n\n/* removed: var _$Breadcrumb_3 = require('@bugsnag/core/breadcrumb'); */;\n\n/* removed: var _$map_16 = require('@bugsnag/core/lib/es-utils/map'); */;\n\n/* removed: var _$keys_15 = require('@bugsnag/core/lib/es-utils/keys'); */;\n\n/* removed: var _$assign_11 = require('@bugsnag/core/lib/es-utils/assign'); */; // extend the base config schema with some browser-specific options\n\n\nvar __schema_2 = _$assign_11({}, _$config_5.schema, _$config_1);\n\n/* removed: var _$onerror_54 = require('@bugsnag/plugin-window-onerror'); */;\n\n/* removed: var _$unhandledRejection_55 = require('@bugsnag/plugin-window-unhandled-rejection'); */;\n\n/* removed: var _$app_38 = require('@bugsnag/plugin-app-duration'); */;\n\n/* removed: var _$device_40 = require('@bugsnag/plugin-browser-device'); */;\n\n/* removed: var _$context_39 = require('@bugsnag/plugin-browser-context'); */;\n\n/* removed: var _$request_44 = require('@bugsnag/plugin-browser-request'); */;\n\n/* removed: var _$throttle_52 = require('@bugsnag/plugin-simple-throttle'); */;\n\n/* removed: var _$consoleBreadcrumbs_47 = require('@bugsnag/plugin-console-breadcrumbs'); */;\n\n/* removed: var _$networkBreadcrumbs_51 = require('@bugsnag/plugin-network-breadcrumbs'); */;\n\n/* removed: var _$navigationBreadcrumbs_50 = require('@bugsnag/plugin-navigation-breadcrumbs'); */;\n\n/* removed: var _$interactionBreadcrumbs_49 = require('@bugsnag/plugin-interaction-breadcrumbs'); */;\n\n/* removed: var _$inlineScriptContent_48 = require('@bugsnag/plugin-inline-script-content'); */;\n\n/* removed: var _$session_45 = require('@bugsnag/plugin-browser-session'); */;\n\n/* removed: var _$clientIp_46 = require('@bugsnag/plugin-client-ip'); */;\n\n/* removed: var _$stripQueryString_53 = require('@bugsnag/plugin-strip-query-string'); */; // delivery mechanisms\n\n\n/* removed: var _$delivery_36 = require('@bugsnag/delivery-x-domain-request'); */;\n\n/* removed: var _$delivery_37 = require('@bugsnag/delivery-xml-http-request'); */;\n\nvar Bugsnag = {\n  _client: null,\n  createClient: function (opts) {\n    // handle very simple use case where user supplies just the api key as a string\n    if (typeof opts === 'string') opts = {\n      apiKey: opts\n    };\n    if (!opts) opts = {};\n    var internalPlugins = [// add browser-specific plugins\n    _$app_38, _$device_40(), _$context_39(), _$request_44(), _$throttle_52, _$session_45, _$clientIp_46, _$stripQueryString_53, _$onerror_54(), _$unhandledRejection_55(), _$navigationBreadcrumbs_50(), _$interactionBreadcrumbs_49(), _$networkBreadcrumbs_51(), _$consoleBreadcrumbs_47, // this one added last to avoid wrapping functionality before bugsnag uses it\n    _$inlineScriptContent_48()]; // configure a client with user supplied options\n\n    var bugsnag = new _$Client_4(opts, __schema_2, internalPlugins, {\n      name: name,\n      version: version,\n      url: url\n    }); // set delivery based on browser capability (IE 8+9 have an XDomainRequest object)\n\n    bugsnag._setDelivery(window.XDomainRequest ? _$delivery_36 : _$delivery_37);\n\n    bugsnag._logger.debug('Loaded!');\n\n    bugsnag.leaveBreadcrumb('Bugsnag loaded', {}, 'state');\n    return bugsnag._config.autoTrackSessions ? bugsnag.startSession() : bugsnag;\n  },\n  start: function (opts) {\n    if (Bugsnag._client) {\n      Bugsnag._client._logger.warn('Bugsnag.start() was called more than once. Ignoring.');\n\n      return Bugsnag._client;\n    }\n\n    Bugsnag._client = Bugsnag.createClient(opts);\n    return Bugsnag._client;\n  },\n  isStarted: function () {\n    return Bugsnag._client != null;\n  }\n};\n_$map_16(['resetEventCount'].concat(_$keys_15(_$Client_4.prototype)), function (m) {\n  if (/^_/.test(m)) return;\n\n  Bugsnag[m] = function () {\n    if (!Bugsnag._client) return console.log(\"Bugsnag.\" + m + \"() was called before Bugsnag.start()\");\n    Bugsnag._client._depth += 1;\n\n    var ret = Bugsnag._client[m].apply(Bugsnag._client, arguments);\n\n    Bugsnag._client._depth -= 1;\n    return ret;\n  };\n});\n_$notifier_2 = Bugsnag;\n_$notifier_2.Client = _$Client_4;\n_$notifier_2.Event = _$Event_6;\n_$notifier_2.Session = _$Session_35;\n_$notifier_2.Breadcrumb = _$Breadcrumb_3; // Export a \"default\" property for compatibility with ESM imports\n\n_$notifier_2[\"default\"] = Bugsnag;\n\nreturn _$notifier_2;\n\n});\n//# sourceMappingURL=bugsnag.js.map\n","module.exports = require('@bugsnag/browser')\n","(function(f){if(typeof exports===\"object\"&&typeof module!==\"undefined\"){module.exports=f()}else if(typeof define===\"function\"&&define.amd){define([],f)}else{var g;if(typeof window!==\"undefined\"){g=window}else if(typeof global!==\"undefined\"){g=global}else if(typeof self!==\"undefined\"){g=self}else{g=this}g.BugsnagPluginReact = f()}})(function(){var define,module,exports;\nvar _$src_1 = {};\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\n_$src_1 = /*#__PURE__*/function () {\n  function BugsnagPluginReact() {\n    // Fetch React from the window object, if it exists\n    var globalReact = typeof window !== 'undefined' && window.React;\n    this.name = 'react';\n    this.lazy = arguments.length === 0 && !globalReact;\n\n    if (!this.lazy) {\n      this.React = (arguments.length <= 0 ? undefined : arguments[0]) || globalReact;\n      if (!this.React) throw new Error('@bugsnag/plugin-react reference to `React` was undefined');\n    }\n  }\n\n  var _proto = BugsnagPluginReact.prototype;\n\n  _proto.load = function load(client) {\n    if (!this.lazy) {\n      var ErrorBoundary = createClass(this.React, client);\n\n      ErrorBoundary.createErrorBoundary = function () {\n        return ErrorBoundary;\n      };\n\n      return ErrorBoundary;\n    }\n\n    var BugsnagPluginReactLazyInitializer = function () {\n      throw new Error(\"@bugsnag/plugin-react was used incorrectly. Valid usage is as follows:\\nPass React to the plugin constructor\\n\\n  `Bugsnag.start({ plugins: [new BugsnagPluginReact(React)] })`\\nand then call `const ErrorBoundary = Bugsnag.getPlugin('react').createErrorBoundary()`\\n\\nOr if React is not available until after Bugsnag has started,\\nconstruct the plugin with no arguments\\n  `Bugsnag.start({ plugins: [new BugsnagPluginReact()] })`,\\nthen pass in React when available to construct your error boundary\\n  `const ErrorBoundary = Bugsnag.getPlugin('react').createErrorBoundary(React)`\");\n    };\n\n    BugsnagPluginReactLazyInitializer.createErrorBoundary = function (React) {\n      if (!React) throw new Error('@bugsnag/plugin-react reference to `React` was undefined');\n      return createClass(React, client);\n    };\n\n    return BugsnagPluginReactLazyInitializer;\n  };\n\n  return BugsnagPluginReact;\n}();\n\nvar formatComponentStack = function (str) {\n  var lines = str.split(/\\s*\\n\\s*/g);\n  var ret = '';\n\n  for (var line = 0, len = lines.length; line < len; line++) {\n    if (lines[line].length) ret += \"\" + (ret.length ? '\\n' : '') + lines[line];\n  }\n\n  return ret;\n};\n\nvar createClass = function (React, client) {\n  return /*#__PURE__*/function (_React$Component) {\n    _inheritsLoose(ErrorBoundary, _React$Component);\n\n    function ErrorBoundary(props) {\n      var _this;\n\n      _this = _React$Component.call(this, props) || this;\n      _this.state = {\n        error: null,\n        info: null\n      };\n      _this.handleClearError = _this.handleClearError.bind(_assertThisInitialized(_this));\n      return _this;\n    }\n\n    var _proto2 = ErrorBoundary.prototype;\n\n    _proto2.handleClearError = function handleClearError() {\n      this.setState({\n        error: null,\n        info: null\n      });\n    };\n\n    _proto2.componentDidCatch = function componentDidCatch(error, info) {\n      var onError = this.props.onError;\n      var handledState = {\n        severity: 'error',\n        unhandled: true,\n        severityReason: {\n          type: 'unhandledException'\n        }\n      };\n      var event = client.Event.create(error, true, handledState, 1);\n      if (info && info.componentStack) info.componentStack = formatComponentStack(info.componentStack);\n      event.addMetadata('react', info);\n\n      client._notify(event, onError);\n\n      this.setState({\n        error: error,\n        info: info\n      });\n    };\n\n    _proto2.render = function render() {\n      var error = this.state.error;\n\n      if (error) {\n        var FallbackComponent = this.props.FallbackComponent;\n        if (FallbackComponent) return React.createElement(FallbackComponent, _extends({}, this.state, {\n          clearError: this.handleClearError\n        }));\n        return null;\n      }\n\n      return this.props.children;\n    };\n\n    return ErrorBoundary;\n  }(React.Component);\n};\n\n_$src_1.formatComponentStack = formatComponentStack;\n_$src_1[\"default\"] = _$src_1;\n\nreturn _$src_1;\n\n});\n//# sourceMappingURL=bugsnag-react.js.map\n","/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * @fileoverview Firebase constants.  Some of these (@defines) can be overridden at compile-time.\n */\nconst CONSTANTS = {\n    /**\n     * @define {boolean} Whether this is the client Node.js SDK.\n     */\n    NODE_CLIENT: false,\n    /**\n     * @define {boolean} Whether this is the Admin Node.js SDK.\n     */\n    NODE_ADMIN: false,\n    /**\n     * Firebase SDK Version\n     */\n    SDK_VERSION: '${JSCORE_VERSION}'\n};\n\n/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Throws an error if the provided assertion is falsy\n */\nconst assert = function (assertion, message) {\n    if (!assertion) {\n        throw assertionError(message);\n    }\n};\n/**\n * Returns an Error object suitable for throwing.\n */\nconst assertionError = function (message) {\n    return new Error('Firebase Database (' +\n        CONSTANTS.SDK_VERSION +\n        ') INTERNAL ASSERT FAILED: ' +\n        message);\n};\n\n/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nconst stringToByteArray$1 = function (str) {\n    // TODO(user): Use native implementations if/when available\n    const out = [];\n    let p = 0;\n    for (let i = 0; i < str.length; i++) {\n        let c = str.charCodeAt(i);\n        if (c < 128) {\n            out[p++] = c;\n        }\n        else if (c < 2048) {\n            out[p++] = (c >> 6) | 192;\n            out[p++] = (c & 63) | 128;\n        }\n        else if ((c & 0xfc00) === 0xd800 &&\n            i + 1 < str.length &&\n            (str.charCodeAt(i + 1) & 0xfc00) === 0xdc00) {\n            // Surrogate Pair\n            c = 0x10000 + ((c & 0x03ff) << 10) + (str.charCodeAt(++i) & 0x03ff);\n            out[p++] = (c >> 18) | 240;\n            out[p++] = ((c >> 12) & 63) | 128;\n            out[p++] = ((c >> 6) & 63) | 128;\n            out[p++] = (c & 63) | 128;\n        }\n        else {\n            out[p++] = (c >> 12) | 224;\n            out[p++] = ((c >> 6) & 63) | 128;\n            out[p++] = (c & 63) | 128;\n        }\n    }\n    return out;\n};\n/**\n * Turns an array of numbers into the string given by the concatenation of the\n * characters to which the numbers correspond.\n * @param bytes Array of numbers representing characters.\n * @return Stringification of the array.\n */\nconst byteArrayToString = function (bytes) {\n    // TODO(user): Use native implementations if/when available\n    const out = [];\n    let pos = 0, c = 0;\n    while (pos < bytes.length) {\n        const c1 = bytes[pos++];\n        if (c1 < 128) {\n            out[c++] = String.fromCharCode(c1);\n        }\n        else if (c1 > 191 && c1 < 224) {\n            const c2 = bytes[pos++];\n            out[c++] = String.fromCharCode(((c1 & 31) << 6) | (c2 & 63));\n        }\n        else if (c1 > 239 && c1 < 365) {\n            // Surrogate Pair\n            const c2 = bytes[pos++];\n            const c3 = bytes[pos++];\n            const c4 = bytes[pos++];\n            const u = (((c1 & 7) << 18) | ((c2 & 63) << 12) | ((c3 & 63) << 6) | (c4 & 63)) -\n                0x10000;\n            out[c++] = String.fromCharCode(0xd800 + (u >> 10));\n            out[c++] = String.fromCharCode(0xdc00 + (u & 1023));\n        }\n        else {\n            const c2 = bytes[pos++];\n            const c3 = bytes[pos++];\n            out[c++] = String.fromCharCode(((c1 & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));\n        }\n    }\n    return out.join('');\n};\n// We define it as an object literal instead of a class because a class compiled down to es5 can't\n// be treeshaked. https://github.com/rollup/rollup/issues/1691\n// Static lookup maps, lazily populated by init_()\n// TODO(dlarocque): Define this as a class, since we no longer target ES5.\nconst base64 = {\n    /**\n     * Maps bytes to characters.\n     */\n    byteToCharMap_: null,\n    /**\n     * Maps characters to bytes.\n     */\n    charToByteMap_: null,\n    /**\n     * Maps bytes to websafe characters.\n     * @private\n     */\n    byteToCharMapWebSafe_: null,\n    /**\n     * Maps websafe characters to bytes.\n     * @private\n     */\n    charToByteMapWebSafe_: null,\n    /**\n     * Our default alphabet, shared between\n     * ENCODED_VALS and ENCODED_VALS_WEBSAFE\n     */\n    ENCODED_VALS_BASE: 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' + 'abcdefghijklmnopqrstuvwxyz' + '0123456789',\n    /**\n     * Our default alphabet. Value 64 (=) is special; it means \"nothing.\"\n     */\n    get ENCODED_VALS() {\n        return this.ENCODED_VALS_BASE + '+/=';\n    },\n    /**\n     * Our websafe alphabet.\n     */\n    get ENCODED_VALS_WEBSAFE() {\n        return this.ENCODED_VALS_BASE + '-_.';\n    },\n    /**\n     * Whether this browser supports the atob and btoa functions. This extension\n     * started at Mozilla but is now implemented by many browsers. We use the\n     * ASSUME_* variables to avoid pulling in the full useragent detection library\n     * but still allowing the standard per-browser compilations.\n     *\n     */\n    HAS_NATIVE_SUPPORT: typeof atob === 'function',\n    /**\n     * Base64-encode an array of bytes.\n     *\n     * @param input An array of bytes (numbers with\n     *     value in [0, 255]) to encode.\n     * @param webSafe Boolean indicating we should use the\n     *     alternative alphabet.\n     * @return The base64 encoded string.\n     */\n    encodeByteArray(input, webSafe) {\n        if (!Array.isArray(input)) {\n            throw Error('encodeByteArray takes an array as a parameter');\n        }\n        this.init_();\n        const byteToCharMap = webSafe\n            ? this.byteToCharMapWebSafe_\n            : this.byteToCharMap_;\n        const output = [];\n        for (let i = 0; i < input.length; i += 3) {\n            const byte1 = input[i];\n            const haveByte2 = i + 1 < input.length;\n            const byte2 = haveByte2 ? input[i + 1] : 0;\n            const haveByte3 = i + 2 < input.length;\n            const byte3 = haveByte3 ? input[i + 2] : 0;\n            const outByte1 = byte1 >> 2;\n            const outByte2 = ((byte1 & 0x03) << 4) | (byte2 >> 4);\n            let outByte3 = ((byte2 & 0x0f) << 2) | (byte3 >> 6);\n            let outByte4 = byte3 & 0x3f;\n            if (!haveByte3) {\n                outByte4 = 64;\n                if (!haveByte2) {\n                    outByte3 = 64;\n                }\n            }\n            output.push(byteToCharMap[outByte1], byteToCharMap[outByte2], byteToCharMap[outByte3], byteToCharMap[outByte4]);\n        }\n        return output.join('');\n    },\n    /**\n     * Base64-encode a string.\n     *\n     * @param input A string to encode.\n     * @param webSafe If true, we should use the\n     *     alternative alphabet.\n     * @return The base64 encoded string.\n     */\n    encodeString(input, webSafe) {\n        // Shortcut for Mozilla browsers that implement\n        // a native base64 encoder in the form of \"btoa/atob\"\n        if (this.HAS_NATIVE_SUPPORT && !webSafe) {\n            return btoa(input);\n        }\n        return this.encodeByteArray(stringToByteArray$1(input), webSafe);\n    },\n    /**\n     * Base64-decode a string.\n     *\n     * @param input to decode.\n     * @param webSafe True if we should use the\n     *     alternative alphabet.\n     * @return string representing the decoded value.\n     */\n    decodeString(input, webSafe) {\n        // Shortcut for Mozilla browsers that implement\n        // a native base64 encoder in the form of \"btoa/atob\"\n        if (this.HAS_NATIVE_SUPPORT && !webSafe) {\n            return atob(input);\n        }\n        return byteArrayToString(this.decodeStringToByteArray(input, webSafe));\n    },\n    /**\n     * Base64-decode a string.\n     *\n     * In base-64 decoding, groups of four characters are converted into three\n     * bytes.  If the encoder did not apply padding, the input length may not\n     * be a multiple of 4.\n     *\n     * In this case, the last group will have fewer than 4 characters, and\n     * padding will be inferred.  If the group has one or two characters, it decodes\n     * to one byte.  If the group has three characters, it decodes to two bytes.\n     *\n     * @param input Input to decode.\n     * @param webSafe True if we should use the web-safe alphabet.\n     * @return bytes representing the decoded value.\n     */\n    decodeStringToByteArray(input, webSafe) {\n        this.init_();\n        const charToByteMap = webSafe\n            ? this.charToByteMapWebSafe_\n            : this.charToByteMap_;\n        const output = [];\n        for (let i = 0; i < input.length;) {\n            const byte1 = charToByteMap[input.charAt(i++)];\n            const haveByte2 = i < input.length;\n            const byte2 = haveByte2 ? charToByteMap[input.charAt(i)] : 0;\n            ++i;\n            const haveByte3 = i < input.length;\n            const byte3 = haveByte3 ? charToByteMap[input.charAt(i)] : 64;\n            ++i;\n            const haveByte4 = i < input.length;\n            const byte4 = haveByte4 ? charToByteMap[input.charAt(i)] : 64;\n            ++i;\n            if (byte1 == null || byte2 == null || byte3 == null || byte4 == null) {\n                throw new DecodeBase64StringError();\n            }\n            const outByte1 = (byte1 << 2) | (byte2 >> 4);\n            output.push(outByte1);\n            if (byte3 !== 64) {\n                const outByte2 = ((byte2 << 4) & 0xf0) | (byte3 >> 2);\n                output.push(outByte2);\n                if (byte4 !== 64) {\n                    const outByte3 = ((byte3 << 6) & 0xc0) | byte4;\n                    output.push(outByte3);\n                }\n            }\n        }\n        return output;\n    },\n    /**\n     * Lazy static initialization function. Called before\n     * accessing any of the static map variables.\n     * @private\n     */\n    init_() {\n        if (!this.byteToCharMap_) {\n            this.byteToCharMap_ = {};\n            this.charToByteMap_ = {};\n            this.byteToCharMapWebSafe_ = {};\n            this.charToByteMapWebSafe_ = {};\n            // We want quick mappings back and forth, so we precompute two maps.\n            for (let i = 0; i < this.ENCODED_VALS.length; i++) {\n                this.byteToCharMap_[i] = this.ENCODED_VALS.charAt(i);\n                this.charToByteMap_[this.byteToCharMap_[i]] = i;\n                this.byteToCharMapWebSafe_[i] = this.ENCODED_VALS_WEBSAFE.charAt(i);\n                this.charToByteMapWebSafe_[this.byteToCharMapWebSafe_[i]] = i;\n                // Be forgiving when decoding and correctly decode both encodings.\n                if (i >= this.ENCODED_VALS_BASE.length) {\n                    this.charToByteMap_[this.ENCODED_VALS_WEBSAFE.charAt(i)] = i;\n                    this.charToByteMapWebSafe_[this.ENCODED_VALS.charAt(i)] = i;\n                }\n            }\n        }\n    }\n};\n/**\n * An error encountered while decoding base64 string.\n */\nclass DecodeBase64StringError extends Error {\n    constructor() {\n        super(...arguments);\n        this.name = 'DecodeBase64StringError';\n    }\n}\n/**\n * URL-safe base64 encoding\n */\nconst base64Encode = function (str) {\n    const utf8Bytes = stringToByteArray$1(str);\n    return base64.encodeByteArray(utf8Bytes, true);\n};\n/**\n * URL-safe base64 encoding (without \".\" padding in the end).\n * e.g. Used in JSON Web Token (JWT) parts.\n */\nconst base64urlEncodeWithoutPadding = function (str) {\n    // Use base64url encoding and remove padding in the end (dot characters).\n    return base64Encode(str).replace(/\\./g, '');\n};\n/**\n * URL-safe base64 decoding\n *\n * NOTE: DO NOT use the global atob() function - it does NOT support the\n * base64Url variant encoding.\n *\n * @param str To be decoded\n * @return Decoded result, if possible\n */\nconst base64Decode = function (str) {\n    try {\n        return base64.decodeString(str, true);\n    }\n    catch (e) {\n        console.error('base64Decode failed: ', e);\n    }\n    return null;\n};\n\n/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Do a deep-copy of basic JavaScript Objects or Arrays.\n */\nfunction deepCopy(value) {\n    return deepExtend(undefined, value);\n}\n/**\n * Copy properties from source to target (recursively allows extension\n * of Objects and Arrays).  Scalar values in the target are over-written.\n * If target is undefined, an object of the appropriate type will be created\n * (and returned).\n *\n * We recursively copy all child properties of plain Objects in the source- so\n * that namespace- like dictionaries are merged.\n *\n * Note that the target can be a function, in which case the properties in\n * the source Object are copied onto it as static properties of the Function.\n *\n * Note: we don't merge __proto__ to prevent prototype pollution\n */\nfunction deepExtend(target, source) {\n    if (!(source instanceof Object)) {\n        return source;\n    }\n    switch (source.constructor) {\n        case Date:\n            // Treat Dates like scalars; if the target date object had any child\n            // properties - they will be lost!\n            const dateValue = source;\n            return new Date(dateValue.getTime());\n        case Object:\n            if (target === undefined) {\n                target = {};\n            }\n            break;\n        case Array:\n            // Always copy the array source and overwrite the target.\n            target = [];\n            break;\n        default:\n            // Not a plain Object - treat it as a scalar.\n            return source;\n    }\n    for (const prop in source) {\n        // use isValidKey to guard against prototype pollution. See https://snyk.io/vuln/SNYK-JS-LODASH-450202\n        if (!source.hasOwnProperty(prop) || !isValidKey(prop)) {\n            continue;\n        }\n        target[prop] = deepExtend(target[prop], source[prop]);\n    }\n    return target;\n}\nfunction isValidKey(key) {\n    return key !== '__proto__';\n}\n\n/**\n * @license\n * Copyright 2022 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Polyfill for `globalThis` object.\n * @returns the `globalThis` object for the given environment.\n * @public\n */\nfunction getGlobal() {\n    if (typeof self !== 'undefined') {\n        return self;\n    }\n    if (typeof window !== 'undefined') {\n        return window;\n    }\n    if (typeof global !== 'undefined') {\n        return global;\n    }\n    throw new Error('Unable to locate global object.');\n}\n\n/**\n * @license\n * Copyright 2022 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nconst getDefaultsFromGlobal = () => getGlobal().__FIREBASE_DEFAULTS__;\n/**\n * Attempt to read defaults from a JSON string provided to\n * process(.)env(.)__FIREBASE_DEFAULTS__ or a JSON file whose path is in\n * process(.)env(.)__FIREBASE_DEFAULTS_PATH__\n * The dots are in parens because certain compilers (Vite?) cannot\n * handle seeing that variable in comments.\n * See https://github.com/firebase/firebase-js-sdk/issues/6838\n */\nconst getDefaultsFromEnvVariable = () => {\n    if (typeof process === 'undefined' || typeof process.env === 'undefined') {\n        return;\n    }\n    const defaultsJsonString = process.env.__FIREBASE_DEFAULTS__;\n    if (defaultsJsonString) {\n        return JSON.parse(defaultsJsonString);\n    }\n};\nconst getDefaultsFromCookie = () => {\n    if (typeof document === 'undefined') {\n        return;\n    }\n    let match;\n    try {\n        match = document.cookie.match(/__FIREBASE_DEFAULTS__=([^;]+)/);\n    }\n    catch (e) {\n        // Some environments such as Angular Universal SSR have a\n        // `document` object but error on accessing `document.cookie`.\n        return;\n    }\n    const decoded = match && base64Decode(match[1]);\n    return decoded && JSON.parse(decoded);\n};\n/**\n * Get the __FIREBASE_DEFAULTS__ object. It checks in order:\n * (1) if such an object exists as a property of `globalThis`\n * (2) if such an object was provided on a shell environment variable\n * (3) if such an object exists in a cookie\n * @public\n */\nconst getDefaults = () => {\n    try {\n        return (getDefaultsFromGlobal() ||\n            getDefaultsFromEnvVariable() ||\n            getDefaultsFromCookie());\n    }\n    catch (e) {\n        /**\n         * Catch-all for being unable to get __FIREBASE_DEFAULTS__ due\n         * to any environment case we have not accounted for. Log to\n         * info instead of swallowing so we can find these unknown cases\n         * and add paths for them if needed.\n         */\n        console.info(`Unable to get __FIREBASE_DEFAULTS__ due to: ${e}`);\n        return;\n    }\n};\n/**\n * Returns emulator host stored in the __FIREBASE_DEFAULTS__ object\n * for the given product.\n * @returns a URL host formatted like `127.0.0.1:9999` or `[::1]:4000` if available\n * @public\n */\nconst getDefaultEmulatorHost = (productName) => { var _a, _b; return (_b = (_a = getDefaults()) === null || _a === void 0 ? void 0 : _a.emulatorHosts) === null || _b === void 0 ? void 0 : _b[productName]; };\n/**\n * Returns emulator hostname and port stored in the __FIREBASE_DEFAULTS__ object\n * for the given product.\n * @returns a pair of hostname and port like `[\"::1\", 4000]` if available\n * @public\n */\nconst getDefaultEmulatorHostnameAndPort = (productName) => {\n    const host = getDefaultEmulatorHost(productName);\n    if (!host) {\n        return undefined;\n    }\n    const separatorIndex = host.lastIndexOf(':'); // Finding the last since IPv6 addr also has colons.\n    if (separatorIndex <= 0 || separatorIndex + 1 === host.length) {\n        throw new Error(`Invalid host ${host} with no separate hostname and port!`);\n    }\n    // eslint-disable-next-line no-restricted-globals\n    const port = parseInt(host.substring(separatorIndex + 1), 10);\n    if (host[0] === '[') {\n        // Bracket-quoted `[ipv6addr]:port` => return \"ipv6addr\" (without brackets).\n        return [host.substring(1, separatorIndex - 1), port];\n    }\n    else {\n        return [host.substring(0, separatorIndex), port];\n    }\n};\n/**\n * Returns Firebase app config stored in the __FIREBASE_DEFAULTS__ object.\n * @public\n */\nconst getDefaultAppConfig = () => { var _a; return (_a = getDefaults()) === null || _a === void 0 ? void 0 : _a.config; };\n/**\n * Returns an experimental setting on the __FIREBASE_DEFAULTS__ object (properties\n * prefixed by \"_\")\n * @public\n */\nconst getExperimentalSetting = (name) => { var _a; return (_a = getDefaults()) === null || _a === void 0 ? void 0 : _a[`_${name}`]; };\n\n/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nclass Deferred {\n    constructor() {\n        this.reject = () => { };\n        this.resolve = () => { };\n        this.promise = new Promise((resolve, reject) => {\n            this.resolve = resolve;\n            this.reject = reject;\n        });\n    }\n    /**\n     * Our API internals are not promisified and cannot because our callback APIs have subtle expectations around\n     * invoking promises inline, which Promises are forbidden to do. This method accepts an optional node-style callback\n     * and returns a node-style callback which will resolve or reject the Deferred's promise.\n     */\n    wrapCallback(callback) {\n        return (error, value) => {\n            if (error) {\n                this.reject(error);\n            }\n            else {\n                this.resolve(value);\n            }\n            if (typeof callback === 'function') {\n                // Attaching noop handler just in case developer wasn't expecting\n                // promises\n                this.promise.catch(() => { });\n                // Some of our callbacks don't expect a value and our own tests\n                // assert that the parameter length is 1\n                if (callback.length === 1) {\n                    callback(error);\n                }\n                else {\n                    callback(error, value);\n                }\n            }\n        };\n    }\n}\n\n/**\n * @license\n * Copyright 2021 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nfunction createMockUserToken(token, projectId) {\n    if (token.uid) {\n        throw new Error('The \"uid\" field is no longer supported by mockUserToken. Please use \"sub\" instead for Firebase Auth User ID.');\n    }\n    // Unsecured JWTs use \"none\" as the algorithm.\n    const header = {\n        alg: 'none',\n        type: 'JWT'\n    };\n    const project = projectId || 'demo-project';\n    const iat = token.iat || 0;\n    const sub = token.sub || token.user_id;\n    if (!sub) {\n        throw new Error(\"mockUserToken must contain 'sub' or 'user_id' field!\");\n    }\n    const payload = Object.assign({ \n        // Set all required fields to decent defaults\n        iss: `https://securetoken.google.com/${project}`, aud: project, iat, exp: iat + 3600, auth_time: iat, sub, user_id: sub, firebase: {\n            sign_in_provider: 'custom',\n            identities: {}\n        } }, token);\n    // Unsecured JWTs use the empty string as a signature.\n    const signature = '';\n    return [\n        base64urlEncodeWithoutPadding(JSON.stringify(header)),\n        base64urlEncodeWithoutPadding(JSON.stringify(payload)),\n        signature\n    ].join('.');\n}\n\n/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Returns navigator.userAgent string or '' if it's not defined.\n * @return user agent string\n */\nfunction getUA() {\n    if (typeof navigator !== 'undefined' &&\n        typeof navigator['userAgent'] === 'string') {\n        return navigator['userAgent'];\n    }\n    else {\n        return '';\n    }\n}\n/**\n * Detect Cordova / PhoneGap / Ionic frameworks on a mobile device.\n *\n * Deliberately does not rely on checking `file://` URLs (as this fails PhoneGap\n * in the Ripple emulator) nor Cordova `onDeviceReady`, which would normally\n * wait for a callback.\n */\nfunction isMobileCordova() {\n    return (typeof window !== 'undefined' &&\n        // @ts-ignore Setting up an broadly applicable index signature for Window\n        // just to deal with this case would probably be a bad idea.\n        !!(window['cordova'] || window['phonegap'] || window['PhoneGap']) &&\n        /ios|iphone|ipod|ipad|android|blackberry|iemobile/i.test(getUA()));\n}\n/**\n * Detect Node.js.\n *\n * @return true if Node.js environment is detected or specified.\n */\n// Node detection logic from: https://github.com/iliakan/detect-node/\nfunction isNode() {\n    var _a;\n    const forceEnvironment = (_a = getDefaults()) === null || _a === void 0 ? void 0 : _a.forceEnvironment;\n    if (forceEnvironment === 'node') {\n        return true;\n    }\n    else if (forceEnvironment === 'browser') {\n        return false;\n    }\n    try {\n        return (Object.prototype.toString.call(global.process) === '[object process]');\n    }\n    catch (e) {\n        return false;\n    }\n}\n/**\n * Detect Browser Environment.\n * Note: This will return true for certain test frameworks that are incompletely\n * mimicking a browser, and should not lead to assuming all browser APIs are\n * available.\n */\nfunction isBrowser() {\n    return typeof window !== 'undefined' || isWebWorker();\n}\n/**\n * Detect Web Worker context.\n */\nfunction isWebWorker() {\n    return (typeof WorkerGlobalScope !== 'undefined' &&\n        typeof self !== 'undefined' &&\n        self instanceof WorkerGlobalScope);\n}\n/**\n * Detect Cloudflare Worker context.\n */\nfunction isCloudflareWorker() {\n    return (typeof navigator !== 'undefined' &&\n        navigator.userAgent === 'Cloudflare-Workers');\n}\nfunction isBrowserExtension() {\n    const runtime = typeof chrome === 'object'\n        ? chrome.runtime\n        : typeof browser === 'object'\n            ? browser.runtime\n            : undefined;\n    return typeof runtime === 'object' && runtime.id !== undefined;\n}\n/**\n * Detect React Native.\n *\n * @return true if ReactNative environment is detected.\n */\nfunction isReactNative() {\n    return (typeof navigator === 'object' && navigator['product'] === 'ReactNative');\n}\n/** Detects Electron apps. */\nfunction isElectron() {\n    return getUA().indexOf('Electron/') >= 0;\n}\n/** Detects Internet Explorer. */\nfunction isIE() {\n    const ua = getUA();\n    return ua.indexOf('MSIE ') >= 0 || ua.indexOf('Trident/') >= 0;\n}\n/** Detects Universal Windows Platform apps. */\nfunction isUWP() {\n    return getUA().indexOf('MSAppHost/') >= 0;\n}\n/**\n * Detect whether the current SDK build is the Node version.\n *\n * @return true if it's the Node SDK build.\n */\nfunction isNodeSdk() {\n    return CONSTANTS.NODE_CLIENT === true || CONSTANTS.NODE_ADMIN === true;\n}\n/** Returns true if we are running in Safari. */\nfunction isSafari() {\n    return (!isNode() &&\n        !!navigator.userAgent &&\n        navigator.userAgent.includes('Safari') &&\n        !navigator.userAgent.includes('Chrome'));\n}\n/**\n * This method checks if indexedDB is supported by current browser/service worker context\n * @return true if indexedDB is supported by current browser/service worker context\n */\nfunction isIndexedDBAvailable() {\n    try {\n        return typeof indexedDB === 'object';\n    }\n    catch (e) {\n        return false;\n    }\n}\n/**\n * This method validates browser/sw context for indexedDB by opening a dummy indexedDB database and reject\n * if errors occur during the database open operation.\n *\n * @throws exception if current browser/sw context can't run idb.open (ex: Safari iframe, Firefox\n * private browsing)\n */\nfunction validateIndexedDBOpenable() {\n    return new Promise((resolve, reject) => {\n        try {\n            let preExist = true;\n            const DB_CHECK_NAME = 'validate-browser-context-for-indexeddb-analytics-module';\n            const request = self.indexedDB.open(DB_CHECK_NAME);\n            request.onsuccess = () => {\n                request.result.close();\n                // delete database only when it doesn't pre-exist\n                if (!preExist) {\n                    self.indexedDB.deleteDatabase(DB_CHECK_NAME);\n                }\n                resolve(true);\n            };\n            request.onupgradeneeded = () => {\n                preExist = false;\n            };\n            request.onerror = () => {\n                var _a;\n                reject(((_a = request.error) === null || _a === void 0 ? void 0 : _a.message) || '');\n            };\n        }\n        catch (error) {\n            reject(error);\n        }\n    });\n}\n/**\n *\n * This method checks whether cookie is enabled within current browser\n * @return true if cookie is enabled within current browser\n */\nfunction areCookiesEnabled() {\n    if (typeof navigator === 'undefined' || !navigator.cookieEnabled) {\n        return false;\n    }\n    return true;\n}\n\n/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * @fileoverview Standardized Firebase Error.\n *\n * Usage:\n *\n *   // TypeScript string literals for type-safe codes\n *   type Err =\n *     'unknown' |\n *     'object-not-found'\n *     ;\n *\n *   // Closure enum for type-safe error codes\n *   // at-enum {string}\n *   var Err = {\n *     UNKNOWN: 'unknown',\n *     OBJECT_NOT_FOUND: 'object-not-found',\n *   }\n *\n *   let errors: Map<Err, string> = {\n *     'generic-error': \"Unknown error\",\n *     'file-not-found': \"Could not find file: {$file}\",\n *   };\n *\n *   // Type-safe function - must pass a valid error code as param.\n *   let error = new ErrorFactory<Err>('service', 'Service', errors);\n *\n *   ...\n *   throw error.create(Err.GENERIC);\n *   ...\n *   throw error.create(Err.FILE_NOT_FOUND, {'file': fileName});\n *   ...\n *   // Service: Could not file file: foo.txt (service/file-not-found).\n *\n *   catch (e) {\n *     assert(e.message === \"Could not find file: foo.txt.\");\n *     if ((e as FirebaseError)?.code === 'service/file-not-found') {\n *       console.log(\"Could not read file: \" + e['file']);\n *     }\n *   }\n */\nconst ERROR_NAME = 'FirebaseError';\n// Based on code from:\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error#Custom_Error_Types\nclass FirebaseError extends Error {\n    constructor(\n    /** The error code for this error. */\n    code, message, \n    /** Custom data for this error. */\n    customData) {\n        super(message);\n        this.code = code;\n        this.customData = customData;\n        /** The custom name for all FirebaseErrors. */\n        this.name = ERROR_NAME;\n        // Fix For ES5\n        // https://github.com/Microsoft/TypeScript-wiki/blob/master/Breaking-Changes.md#extending-built-ins-like-error-array-and-map-may-no-longer-work\n        // TODO(dlarocque): Replace this with `new.target`: https://www.typescriptlang.org/docs/handbook/release-notes/typescript-2-2.html#support-for-newtarget\n        //                   which we can now use since we no longer target ES5.\n        Object.setPrototypeOf(this, FirebaseError.prototype);\n        // Maintains proper stack trace for where our error was thrown.\n        // Only available on V8.\n        if (Error.captureStackTrace) {\n            Error.captureStackTrace(this, ErrorFactory.prototype.create);\n        }\n    }\n}\nclass ErrorFactory {\n    constructor(service, serviceName, errors) {\n        this.service = service;\n        this.serviceName = serviceName;\n        this.errors = errors;\n    }\n    create(code, ...data) {\n        const customData = data[0] || {};\n        const fullCode = `${this.service}/${code}`;\n        const template = this.errors[code];\n        const message = template ? replaceTemplate(template, customData) : 'Error';\n        // Service Name: Error message (service/code).\n        const fullMessage = `${this.serviceName}: ${message} (${fullCode}).`;\n        const error = new FirebaseError(fullCode, fullMessage, customData);\n        return error;\n    }\n}\nfunction replaceTemplate(template, data) {\n    return template.replace(PATTERN, (_, key) => {\n        const value = data[key];\n        return value != null ? String(value) : `<${key}?>`;\n    });\n}\nconst PATTERN = /\\{\\$([^}]+)}/g;\n\n/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Evaluates a JSON string into a javascript object.\n *\n * @param {string} str A string containing JSON.\n * @return {*} The javascript object representing the specified JSON.\n */\nfunction jsonEval(str) {\n    return JSON.parse(str);\n}\n/**\n * Returns JSON representing a javascript object.\n * @param {*} data JavaScript object to be stringified.\n * @return {string} The JSON contents of the object.\n */\nfunction stringify(data) {\n    return JSON.stringify(data);\n}\n\n/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Decodes a Firebase auth. token into constituent parts.\n *\n * Notes:\n * - May return with invalid / incomplete claims if there's no native base64 decoding support.\n * - Doesn't check if the token is actually valid.\n */\nconst decode = function (token) {\n    let header = {}, claims = {}, data = {}, signature = '';\n    try {\n        const parts = token.split('.');\n        header = jsonEval(base64Decode(parts[0]) || '');\n        claims = jsonEval(base64Decode(parts[1]) || '');\n        signature = parts[2];\n        data = claims['d'] || {};\n        delete claims['d'];\n    }\n    catch (e) { }\n    return {\n        header,\n        claims,\n        data,\n        signature\n    };\n};\n/**\n * Decodes a Firebase auth. token and checks the validity of its time-based claims. Will return true if the\n * token is within the time window authorized by the 'nbf' (not-before) and 'iat' (issued-at) claims.\n *\n * Notes:\n * - May return a false negative if there's no native base64 decoding support.\n * - Doesn't check if the token is actually valid.\n */\nconst isValidTimestamp = function (token) {\n    const claims = decode(token).claims;\n    const now = Math.floor(new Date().getTime() / 1000);\n    let validSince = 0, validUntil = 0;\n    if (typeof claims === 'object') {\n        if (claims.hasOwnProperty('nbf')) {\n            validSince = claims['nbf'];\n        }\n        else if (claims.hasOwnProperty('iat')) {\n            validSince = claims['iat'];\n        }\n        if (claims.hasOwnProperty('exp')) {\n            validUntil = claims['exp'];\n        }\n        else {\n            // token will expire after 24h by default\n            validUntil = validSince + 86400;\n        }\n    }\n    return (!!now &&\n        !!validSince &&\n        !!validUntil &&\n        now >= validSince &&\n        now <= validUntil);\n};\n/**\n * Decodes a Firebase auth. token and returns its issued at time if valid, null otherwise.\n *\n * Notes:\n * - May return null if there's no native base64 decoding support.\n * - Doesn't check if the token is actually valid.\n */\nconst issuedAtTime = function (token) {\n    const claims = decode(token).claims;\n    if (typeof claims === 'object' && claims.hasOwnProperty('iat')) {\n        return claims['iat'];\n    }\n    return null;\n};\n/**\n * Decodes a Firebase auth. token and checks the validity of its format. Expects a valid issued-at time.\n *\n * Notes:\n * - May return a false negative if there's no native base64 decoding support.\n * - Doesn't check if the token is actually valid.\n */\nconst isValidFormat = function (token) {\n    const decoded = decode(token), claims = decoded.claims;\n    return !!claims && typeof claims === 'object' && claims.hasOwnProperty('iat');\n};\n/**\n * Attempts to peer into an auth token and determine if it's an admin auth token by looking at the claims portion.\n *\n * Notes:\n * - May return a false negative if there's no native base64 decoding support.\n * - Doesn't check if the token is actually valid.\n */\nconst isAdmin = function (token) {\n    const claims = decode(token).claims;\n    return typeof claims === 'object' && claims['admin'] === true;\n};\n\n/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nfunction contains(obj, key) {\n    return Object.prototype.hasOwnProperty.call(obj, key);\n}\nfunction safeGet(obj, key) {\n    if (Object.prototype.hasOwnProperty.call(obj, key)) {\n        return obj[key];\n    }\n    else {\n        return undefined;\n    }\n}\nfunction isEmpty(obj) {\n    for (const key in obj) {\n        if (Object.prototype.hasOwnProperty.call(obj, key)) {\n            return false;\n        }\n    }\n    return true;\n}\nfunction map(obj, fn, contextObj) {\n    const res = {};\n    for (const key in obj) {\n        if (Object.prototype.hasOwnProperty.call(obj, key)) {\n            res[key] = fn.call(contextObj, obj[key], key, obj);\n        }\n    }\n    return res;\n}\n/**\n * Deep equal two objects. Support Arrays and Objects.\n */\nfunction deepEqual(a, b) {\n    if (a === b) {\n        return true;\n    }\n    const aKeys = Object.keys(a);\n    const bKeys = Object.keys(b);\n    for (const k of aKeys) {\n        if (!bKeys.includes(k)) {\n            return false;\n        }\n        const aProp = a[k];\n        const bProp = b[k];\n        if (isObject(aProp) && isObject(bProp)) {\n            if (!deepEqual(aProp, bProp)) {\n                return false;\n            }\n        }\n        else if (aProp !== bProp) {\n            return false;\n        }\n    }\n    for (const k of bKeys) {\n        if (!aKeys.includes(k)) {\n            return false;\n        }\n    }\n    return true;\n}\nfunction isObject(thing) {\n    return thing !== null && typeof thing === 'object';\n}\n\n/**\n * @license\n * Copyright 2022 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Rejects if the given promise doesn't resolve in timeInMS milliseconds.\n * @internal\n */\nfunction promiseWithTimeout(promise, timeInMS = 2000) {\n    const deferredPromise = new Deferred();\n    setTimeout(() => deferredPromise.reject('timeout!'), timeInMS);\n    promise.then(deferredPromise.resolve, deferredPromise.reject);\n    return deferredPromise.promise;\n}\n\n/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Returns a querystring-formatted string (e.g. &arg=val&arg2=val2) from a\n * params object (e.g. {arg: 'val', arg2: 'val2'})\n * Note: You must prepend it with ? when adding it to a URL.\n */\nfunction querystring(querystringParams) {\n    const params = [];\n    for (const [key, value] of Object.entries(querystringParams)) {\n        if (Array.isArray(value)) {\n            value.forEach(arrayVal => {\n                params.push(encodeURIComponent(key) + '=' + encodeURIComponent(arrayVal));\n            });\n        }\n        else {\n            params.push(encodeURIComponent(key) + '=' + encodeURIComponent(value));\n        }\n    }\n    return params.length ? '&' + params.join('&') : '';\n}\n/**\n * Decodes a querystring (e.g. ?arg=val&arg2=val2) into a params object\n * (e.g. {arg: 'val', arg2: 'val2'})\n */\nfunction querystringDecode(querystring) {\n    const obj = {};\n    const tokens = querystring.replace(/^\\?/, '').split('&');\n    tokens.forEach(token => {\n        if (token) {\n            const [key, value] = token.split('=');\n            obj[decodeURIComponent(key)] = decodeURIComponent(value);\n        }\n    });\n    return obj;\n}\n/**\n * Extract the query string part of a URL, including the leading question mark (if present).\n */\nfunction extractQuerystring(url) {\n    const queryStart = url.indexOf('?');\n    if (!queryStart) {\n        return '';\n    }\n    const fragmentStart = url.indexOf('#', queryStart);\n    return url.substring(queryStart, fragmentStart > 0 ? fragmentStart : undefined);\n}\n\n/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * @fileoverview SHA-1 cryptographic hash.\n * Variable names follow the notation in FIPS PUB 180-3:\n * http://csrc.nist.gov/publications/fips/fips180-3/fips180-3_final.pdf.\n *\n * Usage:\n *   var sha1 = new sha1();\n *   sha1.update(bytes);\n *   var hash = sha1.digest();\n *\n * Performance:\n *   Chrome 23:   ~400 Mbit/s\n *   Firefox 16:  ~250 Mbit/s\n *\n */\n/**\n * SHA-1 cryptographic hash constructor.\n *\n * The properties declared here are discussed in the above algorithm document.\n * @constructor\n * @final\n * @struct\n */\nclass Sha1 {\n    constructor() {\n        /**\n         * Holds the previous values of accumulated variables a-e in the compress_\n         * function.\n         * @private\n         */\n        this.chain_ = [];\n        /**\n         * A buffer holding the partially computed hash result.\n         * @private\n         */\n        this.buf_ = [];\n        /**\n         * An array of 80 bytes, each a part of the message to be hashed.  Referred to\n         * as the message schedule in the docs.\n         * @private\n         */\n        this.W_ = [];\n        /**\n         * Contains data needed to pad messages less than 64 bytes.\n         * @private\n         */\n        this.pad_ = [];\n        /**\n         * @private {number}\n         */\n        this.inbuf_ = 0;\n        /**\n         * @private {number}\n         */\n        this.total_ = 0;\n        this.blockSize = 512 / 8;\n        this.pad_[0] = 128;\n        for (let i = 1; i < this.blockSize; ++i) {\n            this.pad_[i] = 0;\n        }\n        this.reset();\n    }\n    reset() {\n        this.chain_[0] = 0x67452301;\n        this.chain_[1] = 0xefcdab89;\n        this.chain_[2] = 0x98badcfe;\n        this.chain_[3] = 0x10325476;\n        this.chain_[4] = 0xc3d2e1f0;\n        this.inbuf_ = 0;\n        this.total_ = 0;\n    }\n    /**\n     * Internal compress helper function.\n     * @param buf Block to compress.\n     * @param offset Offset of the block in the buffer.\n     * @private\n     */\n    compress_(buf, offset) {\n        if (!offset) {\n            offset = 0;\n        }\n        const W = this.W_;\n        // get 16 big endian words\n        if (typeof buf === 'string') {\n            for (let i = 0; i < 16; i++) {\n                // TODO(user): [bug 8140122] Recent versions of Safari for Mac OS and iOS\n                // have a bug that turns the post-increment ++ operator into pre-increment\n                // during JIT compilation.  We have code that depends heavily on SHA-1 for\n                // correctness and which is affected by this bug, so I've removed all uses\n                // of post-increment ++ in which the result value is used.  We can revert\n                // this change once the Safari bug\n                // (https://bugs.webkit.org/show_bug.cgi?id=109036) has been fixed and\n                // most clients have been updated.\n                W[i] =\n                    (buf.charCodeAt(offset) << 24) |\n                        (buf.charCodeAt(offset + 1) << 16) |\n                        (buf.charCodeAt(offset + 2) << 8) |\n                        buf.charCodeAt(offset + 3);\n                offset += 4;\n            }\n        }\n        else {\n            for (let i = 0; i < 16; i++) {\n                W[i] =\n                    (buf[offset] << 24) |\n                        (buf[offset + 1] << 16) |\n                        (buf[offset + 2] << 8) |\n                        buf[offset + 3];\n                offset += 4;\n            }\n        }\n        // expand to 80 words\n        for (let i = 16; i < 80; i++) {\n            const t = W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16];\n            W[i] = ((t << 1) | (t >>> 31)) & 0xffffffff;\n        }\n        let a = this.chain_[0];\n        let b = this.chain_[1];\n        let c = this.chain_[2];\n        let d = this.chain_[3];\n        let e = this.chain_[4];\n        let f, k;\n        // TODO(user): Try to unroll this loop to speed up the computation.\n        for (let i = 0; i < 80; i++) {\n            if (i < 40) {\n                if (i < 20) {\n                    f = d ^ (b & (c ^ d));\n                    k = 0x5a827999;\n                }\n                else {\n                    f = b ^ c ^ d;\n                    k = 0x6ed9eba1;\n                }\n            }\n            else {\n                if (i < 60) {\n                    f = (b & c) | (d & (b | c));\n                    k = 0x8f1bbcdc;\n                }\n                else {\n                    f = b ^ c ^ d;\n                    k = 0xca62c1d6;\n                }\n            }\n            const t = (((a << 5) | (a >>> 27)) + f + e + k + W[i]) & 0xffffffff;\n            e = d;\n            d = c;\n            c = ((b << 30) | (b >>> 2)) & 0xffffffff;\n            b = a;\n            a = t;\n        }\n        this.chain_[0] = (this.chain_[0] + a) & 0xffffffff;\n        this.chain_[1] = (this.chain_[1] + b) & 0xffffffff;\n        this.chain_[2] = (this.chain_[2] + c) & 0xffffffff;\n        this.chain_[3] = (this.chain_[3] + d) & 0xffffffff;\n        this.chain_[4] = (this.chain_[4] + e) & 0xffffffff;\n    }\n    update(bytes, length) {\n        // TODO(johnlenz): tighten the function signature and remove this check\n        if (bytes == null) {\n            return;\n        }\n        if (length === undefined) {\n            length = bytes.length;\n        }\n        const lengthMinusBlock = length - this.blockSize;\n        let n = 0;\n        // Using local instead of member variables gives ~5% speedup on Firefox 16.\n        const buf = this.buf_;\n        let inbuf = this.inbuf_;\n        // The outer while loop should execute at most twice.\n        while (n < length) {\n            // When we have no data in the block to top up, we can directly process the\n            // input buffer (assuming it contains sufficient data). This gives ~25%\n            // speedup on Chrome 23 and ~15% speedup on Firefox 16, but requires that\n            // the data is provided in large chunks (or in multiples of 64 bytes).\n            if (inbuf === 0) {\n                while (n <= lengthMinusBlock) {\n                    this.compress_(bytes, n);\n                    n += this.blockSize;\n                }\n            }\n            if (typeof bytes === 'string') {\n                while (n < length) {\n                    buf[inbuf] = bytes.charCodeAt(n);\n                    ++inbuf;\n                    ++n;\n                    if (inbuf === this.blockSize) {\n                        this.compress_(buf);\n                        inbuf = 0;\n                        // Jump to the outer loop so we use the full-block optimization.\n                        break;\n                    }\n                }\n            }\n            else {\n                while (n < length) {\n                    buf[inbuf] = bytes[n];\n                    ++inbuf;\n                    ++n;\n                    if (inbuf === this.blockSize) {\n                        this.compress_(buf);\n                        inbuf = 0;\n                        // Jump to the outer loop so we use the full-block optimization.\n                        break;\n                    }\n                }\n            }\n        }\n        this.inbuf_ = inbuf;\n        this.total_ += length;\n    }\n    /** @override */\n    digest() {\n        const digest = [];\n        let totalBits = this.total_ * 8;\n        // Add pad 0x80 0x00*.\n        if (this.inbuf_ < 56) {\n            this.update(this.pad_, 56 - this.inbuf_);\n        }\n        else {\n            this.update(this.pad_, this.blockSize - (this.inbuf_ - 56));\n        }\n        // Add # bits.\n        for (let i = this.blockSize - 1; i >= 56; i--) {\n            this.buf_[i] = totalBits & 255;\n            totalBits /= 256; // Don't use bit-shifting here!\n        }\n        this.compress_(this.buf_);\n        let n = 0;\n        for (let i = 0; i < 5; i++) {\n            for (let j = 24; j >= 0; j -= 8) {\n                digest[n] = (this.chain_[i] >> j) & 255;\n                ++n;\n            }\n        }\n        return digest;\n    }\n}\n\n/**\n * Helper to make a Subscribe function (just like Promise helps make a\n * Thenable).\n *\n * @param executor Function which can make calls to a single Observer\n *     as a proxy.\n * @param onNoObservers Callback when count of Observers goes to zero.\n */\nfunction createSubscribe(executor, onNoObservers) {\n    const proxy = new ObserverProxy(executor, onNoObservers);\n    return proxy.subscribe.bind(proxy);\n}\n/**\n * Implement fan-out for any number of Observers attached via a subscribe\n * function.\n */\nclass ObserverProxy {\n    /**\n     * @param executor Function which can make calls to a single Observer\n     *     as a proxy.\n     * @param onNoObservers Callback when count of Observers goes to zero.\n     */\n    constructor(executor, onNoObservers) {\n        this.observers = [];\n        this.unsubscribes = [];\n        this.observerCount = 0;\n        // Micro-task scheduling by calling task.then().\n        this.task = Promise.resolve();\n        this.finalized = false;\n        this.onNoObservers = onNoObservers;\n        // Call the executor asynchronously so subscribers that are called\n        // synchronously after the creation of the subscribe function\n        // can still receive the very first value generated in the executor.\n        this.task\n            .then(() => {\n            executor(this);\n        })\n            .catch(e => {\n            this.error(e);\n        });\n    }\n    next(value) {\n        this.forEachObserver((observer) => {\n            observer.next(value);\n        });\n    }\n    error(error) {\n        this.forEachObserver((observer) => {\n            observer.error(error);\n        });\n        this.close(error);\n    }\n    complete() {\n        this.forEachObserver((observer) => {\n            observer.complete();\n        });\n        this.close();\n    }\n    /**\n     * Subscribe function that can be used to add an Observer to the fan-out list.\n     *\n     * - We require that no event is sent to a subscriber synchronously to their\n     *   call to subscribe().\n     */\n    subscribe(nextOrObserver, error, complete) {\n        let observer;\n        if (nextOrObserver === undefined &&\n            error === undefined &&\n            complete === undefined) {\n            throw new Error('Missing Observer.');\n        }\n        // Assemble an Observer object when passed as callback functions.\n        if (implementsAnyMethods(nextOrObserver, [\n            'next',\n            'error',\n            'complete'\n        ])) {\n            observer = nextOrObserver;\n        }\n        else {\n            observer = {\n                next: nextOrObserver,\n                error,\n                complete\n            };\n        }\n        if (observer.next === undefined) {\n            observer.next = noop;\n        }\n        if (observer.error === undefined) {\n            observer.error = noop;\n        }\n        if (observer.complete === undefined) {\n            observer.complete = noop;\n        }\n        const unsub = this.unsubscribeOne.bind(this, this.observers.length);\n        // Attempt to subscribe to a terminated Observable - we\n        // just respond to the Observer with the final error or complete\n        // event.\n        if (this.finalized) {\n            // eslint-disable-next-line @typescript-eslint/no-floating-promises\n            this.task.then(() => {\n                try {\n                    if (this.finalError) {\n                        observer.error(this.finalError);\n                    }\n                    else {\n                        observer.complete();\n                    }\n                }\n                catch (e) {\n                    // nothing\n                }\n                return;\n            });\n        }\n        this.observers.push(observer);\n        return unsub;\n    }\n    // Unsubscribe is synchronous - we guarantee that no events are sent to\n    // any unsubscribed Observer.\n    unsubscribeOne(i) {\n        if (this.observers === undefined || this.observers[i] === undefined) {\n            return;\n        }\n        delete this.observers[i];\n        this.observerCount -= 1;\n        if (this.observerCount === 0 && this.onNoObservers !== undefined) {\n            this.onNoObservers(this);\n        }\n    }\n    forEachObserver(fn) {\n        if (this.finalized) {\n            // Already closed by previous event....just eat the additional values.\n            return;\n        }\n        // Since sendOne calls asynchronously - there is no chance that\n        // this.observers will become undefined.\n        for (let i = 0; i < this.observers.length; i++) {\n            this.sendOne(i, fn);\n        }\n    }\n    // Call the Observer via one of it's callback function. We are careful to\n    // confirm that the observe has not been unsubscribed since this asynchronous\n    // function had been queued.\n    sendOne(i, fn) {\n        // Execute the callback asynchronously\n        // eslint-disable-next-line @typescript-eslint/no-floating-promises\n        this.task.then(() => {\n            if (this.observers !== undefined && this.observers[i] !== undefined) {\n                try {\n                    fn(this.observers[i]);\n                }\n                catch (e) {\n                    // Ignore exceptions raised in Observers or missing methods of an\n                    // Observer.\n                    // Log error to console. b/31404806\n                    if (typeof console !== 'undefined' && console.error) {\n                        console.error(e);\n                    }\n                }\n            }\n        });\n    }\n    close(err) {\n        if (this.finalized) {\n            return;\n        }\n        this.finalized = true;\n        if (err !== undefined) {\n            this.finalError = err;\n        }\n        // Proxy is no longer needed - garbage collect references\n        // eslint-disable-next-line @typescript-eslint/no-floating-promises\n        this.task.then(() => {\n            this.observers = undefined;\n            this.onNoObservers = undefined;\n        });\n    }\n}\n/** Turn synchronous function into one called asynchronously. */\n// eslint-disable-next-line @typescript-eslint/ban-types\nfunction async(fn, onError) {\n    return (...args) => {\n        Promise.resolve(true)\n            .then(() => {\n            fn(...args);\n        })\n            .catch((error) => {\n            if (onError) {\n                onError(error);\n            }\n        });\n    };\n}\n/**\n * Return true if the object passed in implements any of the named methods.\n */\nfunction implementsAnyMethods(obj, methods) {\n    if (typeof obj !== 'object' || obj === null) {\n        return false;\n    }\n    for (const method of methods) {\n        if (method in obj && typeof obj[method] === 'function') {\n            return true;\n        }\n    }\n    return false;\n}\nfunction noop() {\n    // do nothing\n}\n\n/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Check to make sure the appropriate number of arguments are provided for a public function.\n * Throws an error if it fails.\n *\n * @param fnName The function name\n * @param minCount The minimum number of arguments to allow for the function call\n * @param maxCount The maximum number of argument to allow for the function call\n * @param argCount The actual number of arguments provided.\n */\nconst validateArgCount = function (fnName, minCount, maxCount, argCount) {\n    let argError;\n    if (argCount < minCount) {\n        argError = 'at least ' + minCount;\n    }\n    else if (argCount > maxCount) {\n        argError = maxCount === 0 ? 'none' : 'no more than ' + maxCount;\n    }\n    if (argError) {\n        const error = fnName +\n            ' failed: Was called with ' +\n            argCount +\n            (argCount === 1 ? ' argument.' : ' arguments.') +\n            ' Expects ' +\n            argError +\n            '.';\n        throw new Error(error);\n    }\n};\n/**\n * Generates a string to prefix an error message about failed argument validation\n *\n * @param fnName The function name\n * @param argName The name of the argument\n * @return The prefix to add to the error thrown for validation.\n */\nfunction errorPrefix(fnName, argName) {\n    return `${fnName} failed: ${argName} argument `;\n}\n/**\n * @param fnName\n * @param argumentNumber\n * @param namespace\n * @param optional\n */\nfunction validateNamespace(fnName, namespace, optional) {\n    if (optional && !namespace) {\n        return;\n    }\n    if (typeof namespace !== 'string') {\n        //TODO: I should do more validation here. We only allow certain chars in namespaces.\n        throw new Error(errorPrefix(fnName, 'namespace') + 'must be a valid firebase namespace.');\n    }\n}\nfunction validateCallback(fnName, argumentName, \n// eslint-disable-next-line @typescript-eslint/ban-types\ncallback, optional) {\n    if (optional && !callback) {\n        return;\n    }\n    if (typeof callback !== 'function') {\n        throw new Error(errorPrefix(fnName, argumentName) + 'must be a valid function.');\n    }\n}\nfunction validateContextObject(fnName, argumentName, context, optional) {\n    if (optional && !context) {\n        return;\n    }\n    if (typeof context !== 'object' || context === null) {\n        throw new Error(errorPrefix(fnName, argumentName) + 'must be a valid context object.');\n    }\n}\n\n/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n// Code originally came from goog.crypt.stringToUtf8ByteArray, but for some reason they\n// automatically replaced '\\r\\n' with '\\n', and they didn't handle surrogate pairs,\n// so it's been modified.\n// Note that not all Unicode characters appear as single characters in JavaScript strings.\n// fromCharCode returns the UTF-16 encoding of a character - so some Unicode characters\n// use 2 characters in JavaScript.  All 4-byte UTF-8 characters begin with a first\n// character in the range 0xD800 - 0xDBFF (the first character of a so-called surrogate\n// pair).\n// See http://www.ecma-international.org/ecma-262/5.1/#sec-15.1.3\n/**\n * @param {string} str\n * @return {Array}\n */\nconst stringToByteArray = function (str) {\n    const out = [];\n    let p = 0;\n    for (let i = 0; i < str.length; i++) {\n        let c = str.charCodeAt(i);\n        // Is this the lead surrogate in a surrogate pair?\n        if (c >= 0xd800 && c <= 0xdbff) {\n            const high = c - 0xd800; // the high 10 bits.\n            i++;\n            assert(i < str.length, 'Surrogate pair missing trail surrogate.');\n            const low = str.charCodeAt(i) - 0xdc00; // the low 10 bits.\n            c = 0x10000 + (high << 10) + low;\n        }\n        if (c < 128) {\n            out[p++] = c;\n        }\n        else if (c < 2048) {\n            out[p++] = (c >> 6) | 192;\n            out[p++] = (c & 63) | 128;\n        }\n        else if (c < 65536) {\n            out[p++] = (c >> 12) | 224;\n            out[p++] = ((c >> 6) & 63) | 128;\n            out[p++] = (c & 63) | 128;\n        }\n        else {\n            out[p++] = (c >> 18) | 240;\n            out[p++] = ((c >> 12) & 63) | 128;\n            out[p++] = ((c >> 6) & 63) | 128;\n            out[p++] = (c & 63) | 128;\n        }\n    }\n    return out;\n};\n/**\n * Calculate length without actually converting; useful for doing cheaper validation.\n * @param {string} str\n * @return {number}\n */\nconst stringLength = function (str) {\n    let p = 0;\n    for (let i = 0; i < str.length; i++) {\n        const c = str.charCodeAt(i);\n        if (c < 128) {\n            p++;\n        }\n        else if (c < 2048) {\n            p += 2;\n        }\n        else if (c >= 0xd800 && c <= 0xdbff) {\n            // Lead surrogate of a surrogate pair.  The pair together will take 4 bytes to represent.\n            p += 4;\n            i++; // skip trail surrogate.\n        }\n        else {\n            p += 3;\n        }\n    }\n    return p;\n};\n\n/**\n * @license\n * Copyright 2022 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Copied from https://stackoverflow.com/a/2117523\n * Generates a new uuid.\n * @public\n */\nconst uuidv4 = function () {\n    return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, c => {\n        const r = (Math.random() * 16) | 0, v = c === 'x' ? r : (r & 0x3) | 0x8;\n        return v.toString(16);\n    });\n};\n\n/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * The amount of milliseconds to exponentially increase.\n */\nconst DEFAULT_INTERVAL_MILLIS = 1000;\n/**\n * The factor to backoff by.\n * Should be a number greater than 1.\n */\nconst DEFAULT_BACKOFF_FACTOR = 2;\n/**\n * The maximum milliseconds to increase to.\n *\n * <p>Visible for testing\n */\nconst MAX_VALUE_MILLIS = 4 * 60 * 60 * 1000; // Four hours, like iOS and Android.\n/**\n * The percentage of backoff time to randomize by.\n * See\n * http://go/safe-client-behavior#step-1-determine-the-appropriate-retry-interval-to-handle-spike-traffic\n * for context.\n *\n * <p>Visible for testing\n */\nconst RANDOM_FACTOR = 0.5;\n/**\n * Based on the backoff method from\n * https://github.com/google/closure-library/blob/master/closure/goog/math/exponentialbackoff.js.\n * Extracted here so we don't need to pass metadata and a stateful ExponentialBackoff object around.\n */\nfunction calculateBackoffMillis(backoffCount, intervalMillis = DEFAULT_INTERVAL_MILLIS, backoffFactor = DEFAULT_BACKOFF_FACTOR) {\n    // Calculates an exponentially increasing value.\n    // Deviation: calculates value from count and a constant interval, so we only need to save value\n    // and count to restore state.\n    const currBaseValue = intervalMillis * Math.pow(backoffFactor, backoffCount);\n    // A random \"fuzz\" to avoid waves of retries.\n    // Deviation: randomFactor is required.\n    const randomWait = Math.round(\n    // A fraction of the backoff value to add/subtract.\n    // Deviation: changes multiplication order to improve readability.\n    RANDOM_FACTOR *\n        currBaseValue *\n        // A random float (rounded to int by Math.round above) in the range [-1, 1]. Determines\n        // if we add or subtract.\n        (Math.random() - 0.5) *\n        2);\n    // Limits backoff to max to avoid effectively permanent backoff.\n    return Math.min(MAX_VALUE_MILLIS, currBaseValue + randomWait);\n}\n\n/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Provide English ordinal letters after a number\n */\nfunction ordinal(i) {\n    if (!Number.isFinite(i)) {\n        return `${i}`;\n    }\n    return i + indicator(i);\n}\nfunction indicator(i) {\n    i = Math.abs(i);\n    const cent = i % 100;\n    if (cent >= 10 && cent <= 20) {\n        return 'th';\n    }\n    const dec = i % 10;\n    if (dec === 1) {\n        return 'st';\n    }\n    if (dec === 2) {\n        return 'nd';\n    }\n    if (dec === 3) {\n        return 'rd';\n    }\n    return 'th';\n}\n\n/**\n * @license\n * Copyright 2021 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nfunction getModularInstance(service) {\n    if (service && service._delegate) {\n        return service._delegate;\n    }\n    else {\n        return service;\n    }\n}\n\nexport { CONSTANTS, DecodeBase64StringError, Deferred, ErrorFactory, FirebaseError, MAX_VALUE_MILLIS, RANDOM_FACTOR, Sha1, areCookiesEnabled, assert, assertionError, async, base64, base64Decode, base64Encode, base64urlEncodeWithoutPadding, calculateBackoffMillis, contains, createMockUserToken, createSubscribe, decode, deepCopy, deepEqual, deepExtend, errorPrefix, extractQuerystring, getDefaultAppConfig, getDefaultEmulatorHost, getDefaultEmulatorHostnameAndPort, getDefaults, getExperimentalSetting, getGlobal, getModularInstance, getUA, isAdmin, isBrowser, isBrowserExtension, isCloudflareWorker, isElectron, isEmpty, isIE, isIndexedDBAvailable, isMobileCordova, isNode, isNodeSdk, isReactNative, isSafari, isUWP, isValidFormat, isValidTimestamp, isWebWorker, issuedAtTime, jsonEval, map, ordinal, promiseWithTimeout, querystring, querystringDecode, safeGet, stringLength, stringToByteArray, stringify, uuidv4, validateArgCount, validateCallback, validateContextObject, validateIndexedDBOpenable, validateNamespace };\n//# sourceMappingURL=index.esm2017.js.map\n","function n(n){for(var r=arguments.length,t=Array(r>1?r-1:0),e=1;e<r;e++)t[e-1]=arguments[e];if(\"production\"!==process.env.NODE_ENV){var i=Y[n],o=i?\"function\"==typeof i?i.apply(null,t):i:\"unknown error nr: \"+n;throw Error(\"[Immer] \"+o)}throw Error(\"[Immer] minified error nr: \"+n+(t.length?\" \"+t.map((function(n){return\"'\"+n+\"'\"})).join(\",\"):\"\")+\". Find the full error at: https://bit.ly/3cXEKWf\")}function r(n){return!!n&&!!n[Q]}function t(n){var r;return!!n&&(function(n){if(!n||\"object\"!=typeof n)return!1;var r=Object.getPrototypeOf(n);if(null===r)return!0;var t=Object.hasOwnProperty.call(r,\"constructor\")&&r.constructor;return t===Object||\"function\"==typeof t&&Function.toString.call(t)===Z}(n)||Array.isArray(n)||!!n[L]||!!(null===(r=n.constructor)||void 0===r?void 0:r[L])||s(n)||v(n))}function e(t){return r(t)||n(23,t),t[Q].t}function i(n,r,t){void 0===t&&(t=!1),0===o(n)?(t?Object.keys:nn)(n).forEach((function(e){t&&\"symbol\"==typeof e||r(e,n[e],n)})):n.forEach((function(t,e){return r(e,t,n)}))}function o(n){var r=n[Q];return r?r.i>3?r.i-4:r.i:Array.isArray(n)?1:s(n)?2:v(n)?3:0}function u(n,r){return 2===o(n)?n.has(r):Object.prototype.hasOwnProperty.call(n,r)}function a(n,r){return 2===o(n)?n.get(r):n[r]}function f(n,r,t){var e=o(n);2===e?n.set(r,t):3===e?n.add(t):n[r]=t}function c(n,r){return n===r?0!==n||1/n==1/r:n!=n&&r!=r}function s(n){return X&&n instanceof Map}function v(n){return q&&n instanceof Set}function p(n){return n.o||n.t}function l(n){if(Array.isArray(n))return Array.prototype.slice.call(n);var r=rn(n);delete r[Q];for(var t=nn(r),e=0;e<t.length;e++){var i=t[e],o=r[i];!1===o.writable&&(o.writable=!0,o.configurable=!0),(o.get||o.set)&&(r[i]={configurable:!0,writable:!0,enumerable:o.enumerable,value:n[i]})}return Object.create(Object.getPrototypeOf(n),r)}function d(n,e){return void 0===e&&(e=!1),y(n)||r(n)||!t(n)||(o(n)>1&&(n.set=n.add=n.clear=n.delete=h),Object.freeze(n),e&&i(n,(function(n,r){return d(r,!0)}),!0)),n}function h(){n(2)}function y(n){return null==n||\"object\"!=typeof n||Object.isFrozen(n)}function b(r){var t=tn[r];return t||n(18,r),t}function m(n,r){tn[n]||(tn[n]=r)}function _(){return\"production\"===process.env.NODE_ENV||U||n(0),U}function j(n,r){r&&(b(\"Patches\"),n.u=[],n.s=[],n.v=r)}function g(n){O(n),n.p.forEach(S),n.p=null}function O(n){n===U&&(U=n.l)}function w(n){return U={p:[],l:U,h:n,m:!0,_:0}}function S(n){var r=n[Q];0===r.i||1===r.i?r.j():r.g=!0}function P(r,e){e._=e.p.length;var i=e.p[0],o=void 0!==r&&r!==i;return e.h.O||b(\"ES5\").S(e,r,o),o?(i[Q].P&&(g(e),n(4)),t(r)&&(r=M(e,r),e.l||x(e,r)),e.u&&b(\"Patches\").M(i[Q].t,r,e.u,e.s)):r=M(e,i,[]),g(e),e.u&&e.v(e.u,e.s),r!==H?r:void 0}function M(n,r,t){if(y(r))return r;var e=r[Q];if(!e)return i(r,(function(i,o){return A(n,e,r,i,o,t)}),!0),r;if(e.A!==n)return r;if(!e.P)return x(n,e.t,!0),e.t;if(!e.I){e.I=!0,e.A._--;var o=4===e.i||5===e.i?e.o=l(e.k):e.o,u=o,a=!1;3===e.i&&(u=new Set(o),o.clear(),a=!0),i(u,(function(r,i){return A(n,e,o,r,i,t,a)})),x(n,o,!1),t&&n.u&&b(\"Patches\").N(e,t,n.u,n.s)}return e.o}function A(e,i,o,a,c,s,v){if(\"production\"!==process.env.NODE_ENV&&c===o&&n(5),r(c)){var p=M(e,c,s&&i&&3!==i.i&&!u(i.R,a)?s.concat(a):void 0);if(f(o,a,p),!r(p))return;e.m=!1}else v&&o.add(c);if(t(c)&&!y(c)){if(!e.h.D&&e._<1)return;M(e,c),i&&i.A.l||x(e,c)}}function x(n,r,t){void 0===t&&(t=!1),!n.l&&n.h.D&&n.m&&d(r,t)}function z(n,r){var t=n[Q];return(t?p(t):n)[r]}function I(n,r){if(r in n)for(var t=Object.getPrototypeOf(n);t;){var e=Object.getOwnPropertyDescriptor(t,r);if(e)return e;t=Object.getPrototypeOf(t)}}function k(n){n.P||(n.P=!0,n.l&&k(n.l))}function E(n){n.o||(n.o=l(n.t))}function N(n,r,t){var e=s(r)?b(\"MapSet\").F(r,t):v(r)?b(\"MapSet\").T(r,t):n.O?function(n,r){var t=Array.isArray(n),e={i:t?1:0,A:r?r.A:_(),P:!1,I:!1,R:{},l:r,t:n,k:null,o:null,j:null,C:!1},i=e,o=en;t&&(i=[e],o=on);var u=Proxy.revocable(i,o),a=u.revoke,f=u.proxy;return e.k=f,e.j=a,f}(r,t):b(\"ES5\").J(r,t);return(t?t.A:_()).p.push(e),e}function R(e){return r(e)||n(22,e),function n(r){if(!t(r))return r;var e,u=r[Q],c=o(r);if(u){if(!u.P&&(u.i<4||!b(\"ES5\").K(u)))return u.t;u.I=!0,e=D(r,c),u.I=!1}else e=D(r,c);return i(e,(function(r,t){u&&a(u.t,r)===t||f(e,r,n(t))})),3===c?new Set(e):e}(e)}function D(n,r){switch(r){case 2:return new Map(n);case 3:return Array.from(n)}return l(n)}function F(){function t(n,r){var t=s[n];return t?t.enumerable=r:s[n]=t={configurable:!0,enumerable:r,get:function(){var r=this[Q];return\"production\"!==process.env.NODE_ENV&&f(r),en.get(r,n)},set:function(r){var t=this[Q];\"production\"!==process.env.NODE_ENV&&f(t),en.set(t,n,r)}},t}function e(n){for(var r=n.length-1;r>=0;r--){var t=n[r][Q];if(!t.P)switch(t.i){case 5:a(t)&&k(t);break;case 4:o(t)&&k(t)}}}function o(n){for(var r=n.t,t=n.k,e=nn(t),i=e.length-1;i>=0;i--){var o=e[i];if(o!==Q){var a=r[o];if(void 0===a&&!u(r,o))return!0;var f=t[o],s=f&&f[Q];if(s?s.t!==a:!c(f,a))return!0}}var v=!!r[Q];return e.length!==nn(r).length+(v?0:1)}function a(n){var r=n.k;if(r.length!==n.t.length)return!0;var t=Object.getOwnPropertyDescriptor(r,r.length-1);if(t&&!t.get)return!0;for(var e=0;e<r.length;e++)if(!r.hasOwnProperty(e))return!0;return!1}function f(r){r.g&&n(3,JSON.stringify(p(r)))}var s={};m(\"ES5\",{J:function(n,r){var e=Array.isArray(n),i=function(n,r){if(n){for(var e=Array(r.length),i=0;i<r.length;i++)Object.defineProperty(e,\"\"+i,t(i,!0));return e}var o=rn(r);delete o[Q];for(var u=nn(o),a=0;a<u.length;a++){var f=u[a];o[f]=t(f,n||!!o[f].enumerable)}return Object.create(Object.getPrototypeOf(r),o)}(e,n),o={i:e?5:4,A:r?r.A:_(),P:!1,I:!1,R:{},l:r,t:n,k:i,o:null,g:!1,C:!1};return Object.defineProperty(i,Q,{value:o,writable:!0}),i},S:function(n,t,o){o?r(t)&&t[Q].A===n&&e(n.p):(n.u&&function n(r){if(r&&\"object\"==typeof r){var t=r[Q];if(t){var e=t.t,o=t.k,f=t.R,c=t.i;if(4===c)i(o,(function(r){r!==Q&&(void 0!==e[r]||u(e,r)?f[r]||n(o[r]):(f[r]=!0,k(t)))})),i(e,(function(n){void 0!==o[n]||u(o,n)||(f[n]=!1,k(t))}));else if(5===c){if(a(t)&&(k(t),f.length=!0),o.length<e.length)for(var s=o.length;s<e.length;s++)f[s]=!1;else for(var v=e.length;v<o.length;v++)f[v]=!0;for(var p=Math.min(o.length,e.length),l=0;l<p;l++)o.hasOwnProperty(l)||(f[l]=!0),void 0===f[l]&&n(o[l])}}}}(n.p[0]),e(n.p))},K:function(n){return 4===n.i?o(n):a(n)}})}function T(){function e(n){if(!t(n))return n;if(Array.isArray(n))return n.map(e);if(s(n))return new Map(Array.from(n.entries()).map((function(n){return[n[0],e(n[1])]})));if(v(n))return new Set(Array.from(n).map(e));var r=Object.create(Object.getPrototypeOf(n));for(var i in n)r[i]=e(n[i]);return u(n,L)&&(r[L]=n[L]),r}function f(n){return r(n)?e(n):n}var c=\"add\";m(\"Patches\",{$:function(r,t){return t.forEach((function(t){for(var i=t.path,u=t.op,f=r,s=0;s<i.length-1;s++){var v=o(f),p=i[s];\"string\"!=typeof p&&\"number\"!=typeof p&&(p=\"\"+p),0!==v&&1!==v||\"__proto__\"!==p&&\"constructor\"!==p||n(24),\"function\"==typeof f&&\"prototype\"===p&&n(24),\"object\"!=typeof(f=a(f,p))&&n(15,i.join(\"/\"))}var l=o(f),d=e(t.value),h=i[i.length-1];switch(u){case\"replace\":switch(l){case 2:return f.set(h,d);case 3:n(16);default:return f[h]=d}case c:switch(l){case 1:return\"-\"===h?f.push(d):f.splice(h,0,d);case 2:return f.set(h,d);case 3:return f.add(d);default:return f[h]=d}case\"remove\":switch(l){case 1:return f.splice(h,1);case 2:return f.delete(h);case 3:return f.delete(t.value);default:return delete f[h]}default:n(17,u)}})),r},N:function(n,r,t,e){switch(n.i){case 0:case 4:case 2:return function(n,r,t,e){var o=n.t,s=n.o;i(n.R,(function(n,i){var v=a(o,n),p=a(s,n),l=i?u(o,n)?\"replace\":c:\"remove\";if(v!==p||\"replace\"!==l){var d=r.concat(n);t.push(\"remove\"===l?{op:l,path:d}:{op:l,path:d,value:p}),e.push(l===c?{op:\"remove\",path:d}:\"remove\"===l?{op:c,path:d,value:f(v)}:{op:\"replace\",path:d,value:f(v)})}}))}(n,r,t,e);case 5:case 1:return function(n,r,t,e){var i=n.t,o=n.R,u=n.o;if(u.length<i.length){var a=[u,i];i=a[0],u=a[1];var s=[e,t];t=s[0],e=s[1]}for(var v=0;v<i.length;v++)if(o[v]&&u[v]!==i[v]){var p=r.concat([v]);t.push({op:\"replace\",path:p,value:f(u[v])}),e.push({op:\"replace\",path:p,value:f(i[v])})}for(var l=i.length;l<u.length;l++){var d=r.concat([l]);t.push({op:c,path:d,value:f(u[l])})}i.length<u.length&&e.push({op:\"replace\",path:r.concat([\"length\"]),value:i.length})}(n,r,t,e);case 3:return function(n,r,t,e){var i=n.t,o=n.o,u=0;i.forEach((function(n){if(!o.has(n)){var i=r.concat([u]);t.push({op:\"remove\",path:i,value:n}),e.unshift({op:c,path:i,value:n})}u++})),u=0,o.forEach((function(n){if(!i.has(n)){var o=r.concat([u]);t.push({op:c,path:o,value:n}),e.unshift({op:\"remove\",path:o,value:n})}u++}))}(n,r,t,e)}},M:function(n,r,t,e){t.push({op:\"replace\",path:[],value:r===H?void 0:r}),e.push({op:\"replace\",path:[],value:n})}})}function C(){function r(n,r){function t(){this.constructor=n}a(n,r),n.prototype=(t.prototype=r.prototype,new t)}function e(n){n.o||(n.R=new Map,n.o=new Map(n.t))}function o(n){n.o||(n.o=new Set,n.t.forEach((function(r){if(t(r)){var e=N(n.A.h,r,n);n.p.set(r,e),n.o.add(e)}else n.o.add(r)})))}function u(r){r.g&&n(3,JSON.stringify(p(r)))}var a=function(n,r){return(a=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,r){n.__proto__=r}||function(n,r){for(var t in r)r.hasOwnProperty(t)&&(n[t]=r[t])})(n,r)},f=function(){function n(n,r){return this[Q]={i:2,l:r,A:r?r.A:_(),P:!1,I:!1,o:void 0,R:void 0,t:n,k:this,C:!1,g:!1},this}r(n,Map);var o=n.prototype;return Object.defineProperty(o,\"size\",{get:function(){return p(this[Q]).size}}),o.has=function(n){return p(this[Q]).has(n)},o.set=function(n,r){var t=this[Q];return u(t),p(t).has(n)&&p(t).get(n)===r||(e(t),k(t),t.R.set(n,!0),t.o.set(n,r),t.R.set(n,!0)),this},o.delete=function(n){if(!this.has(n))return!1;var r=this[Q];return u(r),e(r),k(r),r.t.has(n)?r.R.set(n,!1):r.R.delete(n),r.o.delete(n),!0},o.clear=function(){var n=this[Q];u(n),p(n).size&&(e(n),k(n),n.R=new Map,i(n.t,(function(r){n.R.set(r,!1)})),n.o.clear())},o.forEach=function(n,r){var t=this;p(this[Q]).forEach((function(e,i){n.call(r,t.get(i),i,t)}))},o.get=function(n){var r=this[Q];u(r);var i=p(r).get(n);if(r.I||!t(i))return i;if(i!==r.t.get(n))return i;var o=N(r.A.h,i,r);return e(r),r.o.set(n,o),o},o.keys=function(){return p(this[Q]).keys()},o.values=function(){var n,r=this,t=this.keys();return(n={})[V]=function(){return r.values()},n.next=function(){var n=t.next();return n.done?n:{done:!1,value:r.get(n.value)}},n},o.entries=function(){var n,r=this,t=this.keys();return(n={})[V]=function(){return r.entries()},n.next=function(){var n=t.next();if(n.done)return n;var e=r.get(n.value);return{done:!1,value:[n.value,e]}},n},o[V]=function(){return this.entries()},n}(),c=function(){function n(n,r){return this[Q]={i:3,l:r,A:r?r.A:_(),P:!1,I:!1,o:void 0,t:n,k:this,p:new Map,g:!1,C:!1},this}r(n,Set);var t=n.prototype;return Object.defineProperty(t,\"size\",{get:function(){return p(this[Q]).size}}),t.has=function(n){var r=this[Q];return u(r),r.o?!!r.o.has(n)||!(!r.p.has(n)||!r.o.has(r.p.get(n))):r.t.has(n)},t.add=function(n){var r=this[Q];return u(r),this.has(n)||(o(r),k(r),r.o.add(n)),this},t.delete=function(n){if(!this.has(n))return!1;var r=this[Q];return u(r),o(r),k(r),r.o.delete(n)||!!r.p.has(n)&&r.o.delete(r.p.get(n))},t.clear=function(){var n=this[Q];u(n),p(n).size&&(o(n),k(n),n.o.clear())},t.values=function(){var n=this[Q];return u(n),o(n),n.o.values()},t.entries=function(){var n=this[Q];return u(n),o(n),n.o.entries()},t.keys=function(){return this.values()},t[V]=function(){return this.values()},t.forEach=function(n,r){for(var t=this.values(),e=t.next();!e.done;)n.call(r,e.value,e.value,this),e=t.next()},n}();m(\"MapSet\",{F:function(n,r){return new f(n,r)},T:function(n,r){return new c(n,r)}})}function J(){F(),C(),T()}function K(n){return n}function $(n){return n}var G,U,W=\"undefined\"!=typeof Symbol&&\"symbol\"==typeof Symbol(\"x\"),X=\"undefined\"!=typeof Map,q=\"undefined\"!=typeof Set,B=\"undefined\"!=typeof Proxy&&void 0!==Proxy.revocable&&\"undefined\"!=typeof Reflect,H=W?Symbol.for(\"immer-nothing\"):((G={})[\"immer-nothing\"]=!0,G),L=W?Symbol.for(\"immer-draftable\"):\"__$immer_draftable\",Q=W?Symbol.for(\"immer-state\"):\"__$immer_state\",V=\"undefined\"!=typeof Symbol&&Symbol.iterator||\"@@iterator\",Y={0:\"Illegal state\",1:\"Immer drafts cannot have computed properties\",2:\"This object has been frozen and should not be mutated\",3:function(n){return\"Cannot use a proxy that has been revoked. Did you pass an object from inside an immer function to an async process? \"+n},4:\"An immer producer returned a new value *and* modified its draft. Either return a new value *or* modify the draft.\",5:\"Immer forbids circular references\",6:\"The first or second argument to `produce` must be a function\",7:\"The third argument to `produce` must be a function or undefined\",8:\"First argument to `createDraft` must be a plain object, an array, or an immerable object\",9:\"First argument to `finishDraft` must be a draft returned by `createDraft`\",10:\"The given draft is already finalized\",11:\"Object.defineProperty() cannot be used on an Immer draft\",12:\"Object.setPrototypeOf() cannot be used on an Immer draft\",13:\"Immer only supports deleting array indices\",14:\"Immer only supports setting array indices and the 'length' property\",15:function(n){return\"Cannot apply patch, path doesn't resolve: \"+n},16:'Sets cannot have \"replace\" patches.',17:function(n){return\"Unsupported patch operation: \"+n},18:function(n){return\"The plugin for '\"+n+\"' has not been loaded into Immer. To enable the plugin, import and call `enable\"+n+\"()` when initializing your application.\"},20:\"Cannot use proxies if Proxy, Proxy.revocable or Reflect are not available\",21:function(n){return\"produce can only be called on things that are draftable: plain objects, arrays, Map, Set or classes that are marked with '[immerable]: true'. Got '\"+n+\"'\"},22:function(n){return\"'current' expects a draft, got: \"+n},23:function(n){return\"'original' expects a draft, got: \"+n},24:\"Patching reserved attributes like __proto__, prototype and constructor is not allowed\"},Z=\"\"+Object.prototype.constructor,nn=\"undefined\"!=typeof Reflect&&Reflect.ownKeys?Reflect.ownKeys:void 0!==Object.getOwnPropertySymbols?function(n){return Object.getOwnPropertyNames(n).concat(Object.getOwnPropertySymbols(n))}:Object.getOwnPropertyNames,rn=Object.getOwnPropertyDescriptors||function(n){var r={};return nn(n).forEach((function(t){r[t]=Object.getOwnPropertyDescriptor(n,t)})),r},tn={},en={get:function(n,r){if(r===Q)return n;var e=p(n);if(!u(e,r))return function(n,r,t){var e,i=I(r,t);return i?\"value\"in i?i.value:null===(e=i.get)||void 0===e?void 0:e.call(n.k):void 0}(n,e,r);var i=e[r];return n.I||!t(i)?i:i===z(n.t,r)?(E(n),n.o[r]=N(n.A.h,i,n)):i},has:function(n,r){return r in p(n)},ownKeys:function(n){return Reflect.ownKeys(p(n))},set:function(n,r,t){var e=I(p(n),r);if(null==e?void 0:e.set)return e.set.call(n.k,t),!0;if(!n.P){var i=z(p(n),r),o=null==i?void 0:i[Q];if(o&&o.t===t)return n.o[r]=t,n.R[r]=!1,!0;if(c(t,i)&&(void 0!==t||u(n.t,r)))return!0;E(n),k(n)}return n.o[r]===t&&(void 0!==t||r in n.o)||Number.isNaN(t)&&Number.isNaN(n.o[r])||(n.o[r]=t,n.R[r]=!0),!0},deleteProperty:function(n,r){return void 0!==z(n.t,r)||r in n.t?(n.R[r]=!1,E(n),k(n)):delete n.R[r],n.o&&delete n.o[r],!0},getOwnPropertyDescriptor:function(n,r){var t=p(n),e=Reflect.getOwnPropertyDescriptor(t,r);return e?{writable:!0,configurable:1!==n.i||\"length\"!==r,enumerable:e.enumerable,value:t[r]}:e},defineProperty:function(){n(11)},getPrototypeOf:function(n){return Object.getPrototypeOf(n.t)},setPrototypeOf:function(){n(12)}},on={};i(en,(function(n,r){on[n]=function(){return arguments[0]=arguments[0][0],r.apply(this,arguments)}})),on.deleteProperty=function(r,t){return\"production\"!==process.env.NODE_ENV&&isNaN(parseInt(t))&&n(13),on.set.call(this,r,t,void 0)},on.set=function(r,t,e){return\"production\"!==process.env.NODE_ENV&&\"length\"!==t&&isNaN(parseInt(t))&&n(14),en.set.call(this,r[0],t,e,r[0])};var un=function(){function e(r){var e=this;this.O=B,this.D=!0,this.produce=function(r,i,o){if(\"function\"==typeof r&&\"function\"!=typeof i){var u=i;i=r;var a=e;return function(n){var r=this;void 0===n&&(n=u);for(var t=arguments.length,e=Array(t>1?t-1:0),o=1;o<t;o++)e[o-1]=arguments[o];return a.produce(n,(function(n){var t;return(t=i).call.apply(t,[r,n].concat(e))}))}}var f;if(\"function\"!=typeof i&&n(6),void 0!==o&&\"function\"!=typeof o&&n(7),t(r)){var c=w(e),s=N(e,r,void 0),v=!0;try{f=i(s),v=!1}finally{v?g(c):O(c)}return\"undefined\"!=typeof Promise&&f instanceof Promise?f.then((function(n){return j(c,o),P(n,c)}),(function(n){throw g(c),n})):(j(c,o),P(f,c))}if(!r||\"object\"!=typeof r){if(void 0===(f=i(r))&&(f=r),f===H&&(f=void 0),e.D&&d(f,!0),o){var p=[],l=[];b(\"Patches\").M(r,f,p,l),o(p,l)}return f}n(21,r)},this.produceWithPatches=function(n,r){if(\"function\"==typeof n)return function(r){for(var t=arguments.length,i=Array(t>1?t-1:0),o=1;o<t;o++)i[o-1]=arguments[o];return e.produceWithPatches(r,(function(r){return n.apply(void 0,[r].concat(i))}))};var t,i,o=e.produce(n,r,(function(n,r){t=n,i=r}));return\"undefined\"!=typeof Promise&&o instanceof Promise?o.then((function(n){return[n,t,i]})):[o,t,i]},\"boolean\"==typeof(null==r?void 0:r.useProxies)&&this.setUseProxies(r.useProxies),\"boolean\"==typeof(null==r?void 0:r.autoFreeze)&&this.setAutoFreeze(r.autoFreeze)}var i=e.prototype;return i.createDraft=function(e){t(e)||n(8),r(e)&&(e=R(e));var i=w(this),o=N(this,e,void 0);return o[Q].C=!0,O(i),o},i.finishDraft=function(r,t){var e=r&&r[Q];\"production\"!==process.env.NODE_ENV&&(e&&e.C||n(9),e.I&&n(10));var i=e.A;return j(i,t),P(void 0,i)},i.setAutoFreeze=function(n){this.D=n},i.setUseProxies=function(r){r&&!B&&n(20),this.O=r},i.applyPatches=function(n,t){var e;for(e=t.length-1;e>=0;e--){var i=t[e];if(0===i.path.length&&\"replace\"===i.op){n=i.value;break}}e>-1&&(t=t.slice(e+1));var o=b(\"Patches\").$;return r(n)?o(n,t):this.produce(n,(function(n){return o(n,t)}))},e}(),an=new un,fn=an.produce,cn=an.produceWithPatches.bind(an),sn=an.setAutoFreeze.bind(an),vn=an.setUseProxies.bind(an),pn=an.applyPatches.bind(an),ln=an.createDraft.bind(an),dn=an.finishDraft.bind(an);export default fn;export{un as Immer,pn as applyPatches,K as castDraft,$ as castImmutable,ln as createDraft,R as current,J as enableAllPlugins,F as enableES5,C as enableMapSet,T as enablePatches,dn as finishDraft,d as freeze,L as immerable,r as isDraft,t as isDraftable,H as nothing,e as original,fn as produce,cn as produceWithPatches,sn as setAutoFreeze,vn as setUseProxies};\n//# sourceMappingURL=immer.esm.js.map\n","var __extends = (this && this.__extends) || (function () {\r\n    var extendStatics = function (d, b) {\r\n        extendStatics = Object.setPrototypeOf ||\r\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n        return extendStatics(d, b);\r\n    };\r\n    return function (d, b) {\r\n        if (typeof b !== \"function\" && b !== null)\r\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n        extendStatics(d, b);\r\n        function __() { this.constructor = d; }\r\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n    };\r\n})();\r\nvar __generator = (this && this.__generator) || function (thisArg, body) {\r\n    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n    return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n    function verb(n) { return function (v) { return step([n, v]); }; }\r\n    function step(op) {\r\n        if (f) throw new TypeError(\"Generator is already executing.\");\r\n        while (_) try {\r\n            if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n            if (y = 0, t) op = [op[0] & 2, t.value];\r\n            switch (op[0]) {\r\n                case 0: case 1: t = op; break;\r\n                case 4: _.label++; return { value: op[1], done: false };\r\n                case 5: _.label++; y = op[1]; op = [0]; continue;\r\n                case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n                default:\r\n                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n                    if (t[2]) _.ops.pop();\r\n                    _.trys.pop(); continue;\r\n            }\r\n            op = body.call(thisArg, _);\r\n        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n        if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n    }\r\n};\r\nvar __spreadArray = (this && this.__spreadArray) || function (to, from) {\r\n    for (var i = 0, il = from.length, j = to.length; i < il; i++, j++)\r\n        to[j] = from[i];\r\n    return to;\r\n};\r\nvar __defProp = Object.defineProperty;\r\nvar __defProps = Object.defineProperties;\r\nvar __getOwnPropDescs = Object.getOwnPropertyDescriptors;\r\nvar __getOwnPropSymbols = Object.getOwnPropertySymbols;\r\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\r\nvar __propIsEnum = Object.prototype.propertyIsEnumerable;\r\nvar __defNormalProp = function (obj, key, value) { return key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value: value }) : obj[key] = value; };\r\nvar __spreadValues = function (a, b) {\r\n    for (var prop in b || (b = {}))\r\n        if (__hasOwnProp.call(b, prop))\r\n            __defNormalProp(a, prop, b[prop]);\r\n    if (__getOwnPropSymbols)\r\n        for (var _i = 0, _c = __getOwnPropSymbols(b); _i < _c.length; _i++) {\r\n            var prop = _c[_i];\r\n            if (__propIsEnum.call(b, prop))\r\n                __defNormalProp(a, prop, b[prop]);\r\n        }\r\n    return a;\r\n};\r\nvar __spreadProps = function (a, b) { return __defProps(a, __getOwnPropDescs(b)); };\r\nvar __async = function (__this, __arguments, generator) {\r\n    return new Promise(function (resolve, reject) {\r\n        var fulfilled = function (value) {\r\n            try {\r\n                step(generator.next(value));\r\n            }\r\n            catch (e) {\r\n                reject(e);\r\n            }\r\n        };\r\n        var rejected = function (value) {\r\n            try {\r\n                step(generator.throw(value));\r\n            }\r\n            catch (e) {\r\n                reject(e);\r\n            }\r\n        };\r\n        var step = function (x) { return x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected); };\r\n        step((generator = generator.apply(__this, __arguments)).next());\r\n    });\r\n};\r\n// src/index.ts\r\nimport { enableES5 } from \"immer\";\r\nexport * from \"redux\";\r\nimport { default as default2, current as current2, freeze, original, isDraft as isDraft4 } from \"immer\";\r\nimport { createSelector as createSelector2 } from \"reselect\";\r\n// src/createDraftSafeSelector.ts\r\nimport { current, isDraft } from \"immer\";\r\nimport { createSelector } from \"reselect\";\r\nvar createDraftSafeSelector = function () {\r\n    var args = [];\r\n    for (var _i = 0; _i < arguments.length; _i++) {\r\n        args[_i] = arguments[_i];\r\n    }\r\n    var selector = createSelector.apply(void 0, args);\r\n    var wrappedSelector = function (value) {\r\n        var rest = [];\r\n        for (var _i = 1; _i < arguments.length; _i++) {\r\n            rest[_i - 1] = arguments[_i];\r\n        }\r\n        return selector.apply(void 0, __spreadArray([isDraft(value) ? current(value) : value], rest));\r\n    };\r\n    return wrappedSelector;\r\n};\r\n// src/configureStore.ts\r\nimport { createStore, compose as compose2, applyMiddleware, combineReducers } from \"redux\";\r\n// src/devtoolsExtension.ts\r\nimport { compose } from \"redux\";\r\nvar composeWithDevTools = typeof window !== \"undefined\" && window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ ? window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ : function () {\r\n    if (arguments.length === 0)\r\n        return void 0;\r\n    if (typeof arguments[0] === \"object\")\r\n        return compose;\r\n    return compose.apply(null, arguments);\r\n};\r\nvar devToolsEnhancer = typeof window !== \"undefined\" && window.__REDUX_DEVTOOLS_EXTENSION__ ? window.__REDUX_DEVTOOLS_EXTENSION__ : function () {\r\n    return function (noop2) {\r\n        return noop2;\r\n    };\r\n};\r\n// src/isPlainObject.ts\r\nfunction isPlainObject(value) {\r\n    if (typeof value !== \"object\" || value === null)\r\n        return false;\r\n    var proto = Object.getPrototypeOf(value);\r\n    if (proto === null)\r\n        return true;\r\n    var baseProto = proto;\r\n    while (Object.getPrototypeOf(baseProto) !== null) {\r\n        baseProto = Object.getPrototypeOf(baseProto);\r\n    }\r\n    return proto === baseProto;\r\n}\r\n// src/getDefaultMiddleware.ts\r\nimport thunkMiddleware from \"redux-thunk\";\r\n// src/tsHelpers.ts\r\nvar hasMatchFunction = function (v) {\r\n    return v && typeof v.match === \"function\";\r\n};\r\n// src/createAction.ts\r\nfunction createAction(type, prepareAction) {\r\n    function actionCreator() {\r\n        var args = [];\r\n        for (var _i = 0; _i < arguments.length; _i++) {\r\n            args[_i] = arguments[_i];\r\n        }\r\n        if (prepareAction) {\r\n            var prepared = prepareAction.apply(void 0, args);\r\n            if (!prepared) {\r\n                throw new Error(\"prepareAction did not return an object\");\r\n            }\r\n            return __spreadValues(__spreadValues({\r\n                type: type,\r\n                payload: prepared.payload\r\n            }, \"meta\" in prepared && { meta: prepared.meta }), \"error\" in prepared && { error: prepared.error });\r\n        }\r\n        return { type: type, payload: args[0] };\r\n    }\r\n    actionCreator.toString = function () { return \"\" + type; };\r\n    actionCreator.type = type;\r\n    actionCreator.match = function (action) { return action.type === type; };\r\n    return actionCreator;\r\n}\r\nfunction isAction(action) {\r\n    return isPlainObject(action) && \"type\" in action;\r\n}\r\nfunction isActionCreator(action) {\r\n    return typeof action === \"function\" && \"type\" in action && hasMatchFunction(action);\r\n}\r\nfunction isFSA(action) {\r\n    return isAction(action) && typeof action.type === \"string\" && Object.keys(action).every(isValidKey);\r\n}\r\nfunction isValidKey(key) {\r\n    return [\"type\", \"payload\", \"error\", \"meta\"].indexOf(key) > -1;\r\n}\r\nfunction getType(actionCreator) {\r\n    return \"\" + actionCreator;\r\n}\r\n// src/actionCreatorInvariantMiddleware.ts\r\nfunction getMessage(type) {\r\n    var splitType = type ? (\"\" + type).split(\"/\") : [];\r\n    var actionName = splitType[splitType.length - 1] || \"actionCreator\";\r\n    return \"Detected an action creator with type \\\"\" + (type || \"unknown\") + \"\\\" being dispatched. \\nMake sure you're calling the action creator before dispatching, i.e. `dispatch(\" + actionName + \"())` instead of `dispatch(\" + actionName + \")`. This is necessary even if the action has no payload.\";\r\n}\r\nfunction createActionCreatorInvariantMiddleware(options) {\r\n    if (options === void 0) { options = {}; }\r\n    if (process.env.NODE_ENV === \"production\") {\r\n        return function () { return function (next) { return function (action) { return next(action); }; }; };\r\n    }\r\n    var _c = options.isActionCreator, isActionCreator2 = _c === void 0 ? isActionCreator : _c;\r\n    return function () { return function (next) { return function (action) {\r\n        if (isActionCreator2(action)) {\r\n            console.warn(getMessage(action.type));\r\n        }\r\n        return next(action);\r\n    }; }; };\r\n}\r\n// src/utils.ts\r\nimport createNextState, { isDraftable } from \"immer\";\r\nfunction getTimeMeasureUtils(maxDelay, fnName) {\r\n    var elapsed = 0;\r\n    return {\r\n        measureTime: function (fn) {\r\n            var started = Date.now();\r\n            try {\r\n                return fn();\r\n            }\r\n            finally {\r\n                var finished = Date.now();\r\n                elapsed += finished - started;\r\n            }\r\n        },\r\n        warnIfExceeded: function () {\r\n            if (elapsed > maxDelay) {\r\n                console.warn(fnName + \" took \" + elapsed + \"ms, which is more than the warning threshold of \" + maxDelay + \"ms. \\nIf your state or actions are very large, you may want to disable the middleware as it might cause too much of a slowdown in development mode. See https://redux-toolkit.js.org/api/getDefaultMiddleware for instructions.\\nIt is disabled in production builds, so you don't need to worry about that.\");\r\n            }\r\n        }\r\n    };\r\n}\r\nvar MiddlewareArray = /** @class */ (function (_super) {\r\n    __extends(MiddlewareArray, _super);\r\n    function MiddlewareArray() {\r\n        var args = [];\r\n        for (var _i = 0; _i < arguments.length; _i++) {\r\n            args[_i] = arguments[_i];\r\n        }\r\n        var _this = _super.apply(this, args) || this;\r\n        Object.setPrototypeOf(_this, MiddlewareArray.prototype);\r\n        return _this;\r\n    }\r\n    Object.defineProperty(MiddlewareArray, Symbol.species, {\r\n        get: function () {\r\n            return MiddlewareArray;\r\n        },\r\n        enumerable: false,\r\n        configurable: true\r\n    });\r\n    MiddlewareArray.prototype.concat = function () {\r\n        var arr = [];\r\n        for (var _i = 0; _i < arguments.length; _i++) {\r\n            arr[_i] = arguments[_i];\r\n        }\r\n        return _super.prototype.concat.apply(this, arr);\r\n    };\r\n    MiddlewareArray.prototype.prepend = function () {\r\n        var arr = [];\r\n        for (var _i = 0; _i < arguments.length; _i++) {\r\n            arr[_i] = arguments[_i];\r\n        }\r\n        if (arr.length === 1 && Array.isArray(arr[0])) {\r\n            return new (MiddlewareArray.bind.apply(MiddlewareArray, __spreadArray([void 0], arr[0].concat(this))))();\r\n        }\r\n        return new (MiddlewareArray.bind.apply(MiddlewareArray, __spreadArray([void 0], arr.concat(this))))();\r\n    };\r\n    return MiddlewareArray;\r\n}(Array));\r\nvar EnhancerArray = /** @class */ (function (_super) {\r\n    __extends(EnhancerArray, _super);\r\n    function EnhancerArray() {\r\n        var args = [];\r\n        for (var _i = 0; _i < arguments.length; _i++) {\r\n            args[_i] = arguments[_i];\r\n        }\r\n        var _this = _super.apply(this, args) || this;\r\n        Object.setPrototypeOf(_this, EnhancerArray.prototype);\r\n        return _this;\r\n    }\r\n    Object.defineProperty(EnhancerArray, Symbol.species, {\r\n        get: function () {\r\n            return EnhancerArray;\r\n        },\r\n        enumerable: false,\r\n        configurable: true\r\n    });\r\n    EnhancerArray.prototype.concat = function () {\r\n        var arr = [];\r\n        for (var _i = 0; _i < arguments.length; _i++) {\r\n            arr[_i] = arguments[_i];\r\n        }\r\n        return _super.prototype.concat.apply(this, arr);\r\n    };\r\n    EnhancerArray.prototype.prepend = function () {\r\n        var arr = [];\r\n        for (var _i = 0; _i < arguments.length; _i++) {\r\n            arr[_i] = arguments[_i];\r\n        }\r\n        if (arr.length === 1 && Array.isArray(arr[0])) {\r\n            return new (EnhancerArray.bind.apply(EnhancerArray, __spreadArray([void 0], arr[0].concat(this))))();\r\n        }\r\n        return new (EnhancerArray.bind.apply(EnhancerArray, __spreadArray([void 0], arr.concat(this))))();\r\n    };\r\n    return EnhancerArray;\r\n}(Array));\r\nfunction freezeDraftable(val) {\r\n    return isDraftable(val) ? createNextState(val, function () {\r\n    }) : val;\r\n}\r\n// src/immutableStateInvariantMiddleware.ts\r\nvar isProduction = process.env.NODE_ENV === \"production\";\r\nvar prefix = \"Invariant failed\";\r\nfunction invariant(condition, message) {\r\n    if (condition) {\r\n        return;\r\n    }\r\n    if (isProduction) {\r\n        throw new Error(prefix);\r\n    }\r\n    throw new Error(prefix + \": \" + (message || \"\"));\r\n}\r\nfunction stringify(obj, serializer, indent, decycler) {\r\n    return JSON.stringify(obj, getSerialize(serializer, decycler), indent);\r\n}\r\nfunction getSerialize(serializer, decycler) {\r\n    var stack = [], keys = [];\r\n    if (!decycler)\r\n        decycler = function (_, value) {\r\n            if (stack[0] === value)\r\n                return \"[Circular ~]\";\r\n            return \"[Circular ~.\" + keys.slice(0, stack.indexOf(value)).join(\".\") + \"]\";\r\n        };\r\n    return function (key, value) {\r\n        if (stack.length > 0) {\r\n            var thisPos = stack.indexOf(this);\r\n            ~thisPos ? stack.splice(thisPos + 1) : stack.push(this);\r\n            ~thisPos ? keys.splice(thisPos, Infinity, key) : keys.push(key);\r\n            if (~stack.indexOf(value))\r\n                value = decycler.call(this, key, value);\r\n        }\r\n        else\r\n            stack.push(value);\r\n        return serializer == null ? value : serializer.call(this, key, value);\r\n    };\r\n}\r\nfunction isImmutableDefault(value) {\r\n    return typeof value !== \"object\" || value == null || Object.isFrozen(value);\r\n}\r\nfunction trackForMutations(isImmutable, ignorePaths, obj) {\r\n    var trackedProperties = trackProperties(isImmutable, ignorePaths, obj);\r\n    return {\r\n        detectMutations: function () {\r\n            return detectMutations(isImmutable, ignorePaths, trackedProperties, obj);\r\n        }\r\n    };\r\n}\r\nfunction trackProperties(isImmutable, ignorePaths, obj, path, checkedObjects) {\r\n    if (ignorePaths === void 0) { ignorePaths = []; }\r\n    if (path === void 0) { path = \"\"; }\r\n    if (checkedObjects === void 0) { checkedObjects = new Set(); }\r\n    var tracked = { value: obj };\r\n    if (!isImmutable(obj) && !checkedObjects.has(obj)) {\r\n        checkedObjects.add(obj);\r\n        tracked.children = {};\r\n        for (var key in obj) {\r\n            var childPath = path ? path + \".\" + key : key;\r\n            if (ignorePaths.length && ignorePaths.indexOf(childPath) !== -1) {\r\n                continue;\r\n            }\r\n            tracked.children[key] = trackProperties(isImmutable, ignorePaths, obj[key], childPath);\r\n        }\r\n    }\r\n    return tracked;\r\n}\r\nfunction detectMutations(isImmutable, ignoredPaths, trackedProperty, obj, sameParentRef, path) {\r\n    if (ignoredPaths === void 0) { ignoredPaths = []; }\r\n    if (sameParentRef === void 0) { sameParentRef = false; }\r\n    if (path === void 0) { path = \"\"; }\r\n    var prevObj = trackedProperty ? trackedProperty.value : void 0;\r\n    var sameRef = prevObj === obj;\r\n    if (sameParentRef && !sameRef && !Number.isNaN(obj)) {\r\n        return { wasMutated: true, path: path };\r\n    }\r\n    if (isImmutable(prevObj) || isImmutable(obj)) {\r\n        return { wasMutated: false };\r\n    }\r\n    var keysToDetect = {};\r\n    for (var key in trackedProperty.children) {\r\n        keysToDetect[key] = true;\r\n    }\r\n    for (var key in obj) {\r\n        keysToDetect[key] = true;\r\n    }\r\n    var hasIgnoredPaths = ignoredPaths.length > 0;\r\n    var _loop_1 = function (key) {\r\n        var nestedPath = path ? path + \".\" + key : key;\r\n        if (hasIgnoredPaths) {\r\n            var hasMatches = ignoredPaths.some(function (ignored) {\r\n                if (ignored instanceof RegExp) {\r\n                    return ignored.test(nestedPath);\r\n                }\r\n                return nestedPath === ignored;\r\n            });\r\n            if (hasMatches) {\r\n                return \"continue\";\r\n            }\r\n        }\r\n        var result = detectMutations(isImmutable, ignoredPaths, trackedProperty.children[key], obj[key], sameRef, nestedPath);\r\n        if (result.wasMutated) {\r\n            return { value: result };\r\n        }\r\n    };\r\n    for (var key in keysToDetect) {\r\n        var state_1 = _loop_1(key);\r\n        if (typeof state_1 === \"object\")\r\n            return state_1.value;\r\n    }\r\n    return { wasMutated: false };\r\n}\r\nfunction createImmutableStateInvariantMiddleware(options) {\r\n    if (options === void 0) { options = {}; }\r\n    if (process.env.NODE_ENV === \"production\") {\r\n        return function () { return function (next) { return function (action) { return next(action); }; }; };\r\n    }\r\n    var _c = options.isImmutable, isImmutable = _c === void 0 ? isImmutableDefault : _c, ignoredPaths = options.ignoredPaths, _d = options.warnAfter, warnAfter = _d === void 0 ? 32 : _d, ignore = options.ignore;\r\n    ignoredPaths = ignoredPaths || ignore;\r\n    var track = trackForMutations.bind(null, isImmutable, ignoredPaths);\r\n    return function (_c) {\r\n        var getState = _c.getState;\r\n        var state = getState();\r\n        var tracker = track(state);\r\n        var result;\r\n        return function (next) { return function (action) {\r\n            var measureUtils = getTimeMeasureUtils(warnAfter, \"ImmutableStateInvariantMiddleware\");\r\n            measureUtils.measureTime(function () {\r\n                state = getState();\r\n                result = tracker.detectMutations();\r\n                tracker = track(state);\r\n                invariant(!result.wasMutated, \"A state mutation was detected between dispatches, in the path '\" + (result.path || \"\") + \"'.  This may cause incorrect behavior. (https://redux.js.org/style-guide/style-guide#do-not-mutate-state)\");\r\n            });\r\n            var dispatchedAction = next(action);\r\n            measureUtils.measureTime(function () {\r\n                state = getState();\r\n                result = tracker.detectMutations();\r\n                tracker = track(state);\r\n                result.wasMutated && invariant(!result.wasMutated, \"A state mutation was detected inside a dispatch, in the path: \" + (result.path || \"\") + \". Take a look at the reducer(s) handling the action \" + stringify(action) + \". (https://redux.js.org/style-guide/style-guide#do-not-mutate-state)\");\r\n            });\r\n            measureUtils.warnIfExceeded();\r\n            return dispatchedAction;\r\n        }; };\r\n    };\r\n}\r\n// src/serializableStateInvariantMiddleware.ts\r\nfunction isPlain(val) {\r\n    var type = typeof val;\r\n    return val == null || type === \"string\" || type === \"boolean\" || type === \"number\" || Array.isArray(val) || isPlainObject(val);\r\n}\r\nfunction findNonSerializableValue(value, path, isSerializable, getEntries, ignoredPaths, cache) {\r\n    if (path === void 0) { path = \"\"; }\r\n    if (isSerializable === void 0) { isSerializable = isPlain; }\r\n    if (ignoredPaths === void 0) { ignoredPaths = []; }\r\n    var foundNestedSerializable;\r\n    if (!isSerializable(value)) {\r\n        return {\r\n            keyPath: path || \"<root>\",\r\n            value: value\r\n        };\r\n    }\r\n    if (typeof value !== \"object\" || value === null) {\r\n        return false;\r\n    }\r\n    if (cache == null ? void 0 : cache.has(value))\r\n        return false;\r\n    var entries = getEntries != null ? getEntries(value) : Object.entries(value);\r\n    var hasIgnoredPaths = ignoredPaths.length > 0;\r\n    var _loop_2 = function (key, nestedValue) {\r\n        var nestedPath = path ? path + \".\" + key : key;\r\n        if (hasIgnoredPaths) {\r\n            var hasMatches = ignoredPaths.some(function (ignored) {\r\n                if (ignored instanceof RegExp) {\r\n                    return ignored.test(nestedPath);\r\n                }\r\n                return nestedPath === ignored;\r\n            });\r\n            if (hasMatches) {\r\n                return \"continue\";\r\n            }\r\n        }\r\n        if (!isSerializable(nestedValue)) {\r\n            return { value: {\r\n                    keyPath: nestedPath,\r\n                    value: nestedValue\r\n                } };\r\n        }\r\n        if (typeof nestedValue === \"object\") {\r\n            foundNestedSerializable = findNonSerializableValue(nestedValue, nestedPath, isSerializable, getEntries, ignoredPaths, cache);\r\n            if (foundNestedSerializable) {\r\n                return { value: foundNestedSerializable };\r\n            }\r\n        }\r\n    };\r\n    for (var _i = 0, entries_1 = entries; _i < entries_1.length; _i++) {\r\n        var _c = entries_1[_i], key = _c[0], nestedValue = _c[1];\r\n        var state_2 = _loop_2(key, nestedValue);\r\n        if (typeof state_2 === \"object\")\r\n            return state_2.value;\r\n    }\r\n    if (cache && isNestedFrozen(value))\r\n        cache.add(value);\r\n    return false;\r\n}\r\nfunction isNestedFrozen(value) {\r\n    if (!Object.isFrozen(value))\r\n        return false;\r\n    for (var _i = 0, _c = Object.values(value); _i < _c.length; _i++) {\r\n        var nestedValue = _c[_i];\r\n        if (typeof nestedValue !== \"object\" || nestedValue === null)\r\n            continue;\r\n        if (!isNestedFrozen(nestedValue))\r\n            return false;\r\n    }\r\n    return true;\r\n}\r\nfunction createSerializableStateInvariantMiddleware(options) {\r\n    if (options === void 0) { options = {}; }\r\n    if (process.env.NODE_ENV === \"production\") {\r\n        return function () { return function (next) { return function (action) { return next(action); }; }; };\r\n    }\r\n    var _c = options.isSerializable, isSerializable = _c === void 0 ? isPlain : _c, getEntries = options.getEntries, _d = options.ignoredActions, ignoredActions = _d === void 0 ? [] : _d, _e = options.ignoredActionPaths, ignoredActionPaths = _e === void 0 ? [\"meta.arg\", \"meta.baseQueryMeta\"] : _e, _f = options.ignoredPaths, ignoredPaths = _f === void 0 ? [] : _f, _g = options.warnAfter, warnAfter = _g === void 0 ? 32 : _g, _h = options.ignoreState, ignoreState = _h === void 0 ? false : _h, _j = options.ignoreActions, ignoreActions = _j === void 0 ? false : _j, _k = options.disableCache, disableCache = _k === void 0 ? false : _k;\r\n    var cache = !disableCache && WeakSet ? new WeakSet() : void 0;\r\n    return function (storeAPI) { return function (next) { return function (action) {\r\n        var result = next(action);\r\n        var measureUtils = getTimeMeasureUtils(warnAfter, \"SerializableStateInvariantMiddleware\");\r\n        if (!ignoreActions && !(ignoredActions.length && ignoredActions.indexOf(action.type) !== -1)) {\r\n            measureUtils.measureTime(function () {\r\n                var foundActionNonSerializableValue = findNonSerializableValue(action, \"\", isSerializable, getEntries, ignoredActionPaths, cache);\r\n                if (foundActionNonSerializableValue) {\r\n                    var keyPath = foundActionNonSerializableValue.keyPath, value = foundActionNonSerializableValue.value;\r\n                    console.error(\"A non-serializable value was detected in an action, in the path: `\" + keyPath + \"`. Value:\", value, \"\\nTake a look at the logic that dispatched this action: \", action, \"\\n(See https://redux.js.org/faq/actions#why-should-type-be-a-string-or-at-least-serializable-why-should-my-action-types-be-constants)\", \"\\n(To allow non-serializable values see: https://redux-toolkit.js.org/usage/usage-guide#working-with-non-serializable-data)\");\r\n                }\r\n            });\r\n        }\r\n        if (!ignoreState) {\r\n            measureUtils.measureTime(function () {\r\n                var state = storeAPI.getState();\r\n                var foundStateNonSerializableValue = findNonSerializableValue(state, \"\", isSerializable, getEntries, ignoredPaths, cache);\r\n                if (foundStateNonSerializableValue) {\r\n                    var keyPath = foundStateNonSerializableValue.keyPath, value = foundStateNonSerializableValue.value;\r\n                    console.error(\"A non-serializable value was detected in the state, in the path: `\" + keyPath + \"`. Value:\", value, \"\\nTake a look at the reducer(s) handling this action type: \" + action.type + \".\\n(See https://redux.js.org/faq/organizing-state#can-i-put-functions-promises-or-other-non-serializable-items-in-my-store-state)\");\r\n                }\r\n            });\r\n            measureUtils.warnIfExceeded();\r\n        }\r\n        return result;\r\n    }; }; };\r\n}\r\n// src/getDefaultMiddleware.ts\r\nfunction isBoolean(x) {\r\n    return typeof x === \"boolean\";\r\n}\r\nfunction curryGetDefaultMiddleware() {\r\n    return function curriedGetDefaultMiddleware(options) {\r\n        return getDefaultMiddleware(options);\r\n    };\r\n}\r\nfunction getDefaultMiddleware(options) {\r\n    if (options === void 0) { options = {}; }\r\n    var _c = options.thunk, thunk = _c === void 0 ? true : _c, _d = options.immutableCheck, immutableCheck = _d === void 0 ? true : _d, _e = options.serializableCheck, serializableCheck = _e === void 0 ? true : _e, _f = options.actionCreatorCheck, actionCreatorCheck = _f === void 0 ? true : _f;\r\n    var middlewareArray = new MiddlewareArray();\r\n    if (thunk) {\r\n        if (isBoolean(thunk)) {\r\n            middlewareArray.push(thunkMiddleware);\r\n        }\r\n        else {\r\n            middlewareArray.push(thunkMiddleware.withExtraArgument(thunk.extraArgument));\r\n        }\r\n    }\r\n    if (process.env.NODE_ENV !== \"production\") {\r\n        if (immutableCheck) {\r\n            var immutableOptions = {};\r\n            if (!isBoolean(immutableCheck)) {\r\n                immutableOptions = immutableCheck;\r\n            }\r\n            middlewareArray.unshift(createImmutableStateInvariantMiddleware(immutableOptions));\r\n        }\r\n        if (serializableCheck) {\r\n            var serializableOptions = {};\r\n            if (!isBoolean(serializableCheck)) {\r\n                serializableOptions = serializableCheck;\r\n            }\r\n            middlewareArray.push(createSerializableStateInvariantMiddleware(serializableOptions));\r\n        }\r\n        if (actionCreatorCheck) {\r\n            var actionCreatorOptions = {};\r\n            if (!isBoolean(actionCreatorCheck)) {\r\n                actionCreatorOptions = actionCreatorCheck;\r\n            }\r\n            middlewareArray.unshift(createActionCreatorInvariantMiddleware(actionCreatorOptions));\r\n        }\r\n    }\r\n    return middlewareArray;\r\n}\r\n// src/configureStore.ts\r\nvar IS_PRODUCTION = process.env.NODE_ENV === \"production\";\r\nfunction configureStore(options) {\r\n    var curriedGetDefaultMiddleware = curryGetDefaultMiddleware();\r\n    var _c = options || {}, _d = _c.reducer, reducer = _d === void 0 ? void 0 : _d, _e = _c.middleware, middleware = _e === void 0 ? curriedGetDefaultMiddleware() : _e, _f = _c.devTools, devTools = _f === void 0 ? true : _f, _g = _c.preloadedState, preloadedState = _g === void 0 ? void 0 : _g, _h = _c.enhancers, enhancers = _h === void 0 ? void 0 : _h;\r\n    var rootReducer;\r\n    if (typeof reducer === \"function\") {\r\n        rootReducer = reducer;\r\n    }\r\n    else if (isPlainObject(reducer)) {\r\n        rootReducer = combineReducers(reducer);\r\n    }\r\n    else {\r\n        throw new Error('\"reducer\" is a required argument, and must be a function or an object of functions that can be passed to combineReducers');\r\n    }\r\n    var finalMiddleware = middleware;\r\n    if (typeof finalMiddleware === \"function\") {\r\n        finalMiddleware = finalMiddleware(curriedGetDefaultMiddleware);\r\n        if (!IS_PRODUCTION && !Array.isArray(finalMiddleware)) {\r\n            throw new Error(\"when using a middleware builder function, an array of middleware must be returned\");\r\n        }\r\n    }\r\n    if (!IS_PRODUCTION && finalMiddleware.some(function (item) { return typeof item !== \"function\"; })) {\r\n        throw new Error(\"each middleware provided to configureStore must be a function\");\r\n    }\r\n    var middlewareEnhancer = applyMiddleware.apply(void 0, finalMiddleware);\r\n    var finalCompose = compose2;\r\n    if (devTools) {\r\n        finalCompose = composeWithDevTools(__spreadValues({\r\n            trace: !IS_PRODUCTION\r\n        }, typeof devTools === \"object\" && devTools));\r\n    }\r\n    var defaultEnhancers = new EnhancerArray(middlewareEnhancer);\r\n    var storeEnhancers = defaultEnhancers;\r\n    if (Array.isArray(enhancers)) {\r\n        storeEnhancers = __spreadArray([middlewareEnhancer], enhancers);\r\n    }\r\n    else if (typeof enhancers === \"function\") {\r\n        storeEnhancers = enhancers(defaultEnhancers);\r\n    }\r\n    var composedEnhancer = finalCompose.apply(void 0, storeEnhancers);\r\n    return createStore(rootReducer, preloadedState, composedEnhancer);\r\n}\r\n// src/createReducer.ts\r\nimport createNextState2, { isDraft as isDraft2, isDraftable as isDraftable2 } from \"immer\";\r\n// src/mapBuilders.ts\r\nfunction executeReducerBuilderCallback(builderCallback) {\r\n    var actionsMap = {};\r\n    var actionMatchers = [];\r\n    var defaultCaseReducer;\r\n    var builder = {\r\n        addCase: function (typeOrActionCreator, reducer) {\r\n            if (process.env.NODE_ENV !== \"production\") {\r\n                if (actionMatchers.length > 0) {\r\n                    throw new Error(\"`builder.addCase` should only be called before calling `builder.addMatcher`\");\r\n                }\r\n                if (defaultCaseReducer) {\r\n                    throw new Error(\"`builder.addCase` should only be called before calling `builder.addDefaultCase`\");\r\n                }\r\n            }\r\n            var type = typeof typeOrActionCreator === \"string\" ? typeOrActionCreator : typeOrActionCreator.type;\r\n            if (!type) {\r\n                throw new Error(\"`builder.addCase` cannot be called with an empty action type\");\r\n            }\r\n            if (type in actionsMap) {\r\n                throw new Error(\"`builder.addCase` cannot be called with two reducers for the same action type\");\r\n            }\r\n            actionsMap[type] = reducer;\r\n            return builder;\r\n        },\r\n        addMatcher: function (matcher, reducer) {\r\n            if (process.env.NODE_ENV !== \"production\") {\r\n                if (defaultCaseReducer) {\r\n                    throw new Error(\"`builder.addMatcher` should only be called before calling `builder.addDefaultCase`\");\r\n                }\r\n            }\r\n            actionMatchers.push({ matcher: matcher, reducer: reducer });\r\n            return builder;\r\n        },\r\n        addDefaultCase: function (reducer) {\r\n            if (process.env.NODE_ENV !== \"production\") {\r\n                if (defaultCaseReducer) {\r\n                    throw new Error(\"`builder.addDefaultCase` can only be called once\");\r\n                }\r\n            }\r\n            defaultCaseReducer = reducer;\r\n            return builder;\r\n        }\r\n    };\r\n    builderCallback(builder);\r\n    return [actionsMap, actionMatchers, defaultCaseReducer];\r\n}\r\n// src/createReducer.ts\r\nfunction isStateFunction(x) {\r\n    return typeof x === \"function\";\r\n}\r\nvar hasWarnedAboutObjectNotation = false;\r\nfunction createReducer(initialState, mapOrBuilderCallback, actionMatchers, defaultCaseReducer) {\r\n    if (actionMatchers === void 0) { actionMatchers = []; }\r\n    if (process.env.NODE_ENV !== \"production\") {\r\n        if (typeof mapOrBuilderCallback === \"object\") {\r\n            if (!hasWarnedAboutObjectNotation) {\r\n                hasWarnedAboutObjectNotation = true;\r\n                console.warn(\"The object notation for `createReducer` is deprecated, and will be removed in RTK 2.0. Please use the 'builder callback' notation instead: https://redux-toolkit.js.org/api/createReducer\");\r\n            }\r\n        }\r\n    }\r\n    var _c = typeof mapOrBuilderCallback === \"function\" ? executeReducerBuilderCallback(mapOrBuilderCallback) : [mapOrBuilderCallback, actionMatchers, defaultCaseReducer], actionsMap = _c[0], finalActionMatchers = _c[1], finalDefaultCaseReducer = _c[2];\r\n    var getInitialState;\r\n    if (isStateFunction(initialState)) {\r\n        getInitialState = function () { return freezeDraftable(initialState()); };\r\n    }\r\n    else {\r\n        var frozenInitialState_1 = freezeDraftable(initialState);\r\n        getInitialState = function () { return frozenInitialState_1; };\r\n    }\r\n    function reducer(state, action) {\r\n        if (state === void 0) { state = getInitialState(); }\r\n        var caseReducers = __spreadArray([\r\n            actionsMap[action.type]\r\n        ], finalActionMatchers.filter(function (_c) {\r\n            var matcher = _c.matcher;\r\n            return matcher(action);\r\n        }).map(function (_c) {\r\n            var reducer2 = _c.reducer;\r\n            return reducer2;\r\n        }));\r\n        if (caseReducers.filter(function (cr) { return !!cr; }).length === 0) {\r\n            caseReducers = [finalDefaultCaseReducer];\r\n        }\r\n        return caseReducers.reduce(function (previousState, caseReducer) {\r\n            if (caseReducer) {\r\n                if (isDraft2(previousState)) {\r\n                    var draft = previousState;\r\n                    var result = caseReducer(draft, action);\r\n                    if (result === void 0) {\r\n                        return previousState;\r\n                    }\r\n                    return result;\r\n                }\r\n                else if (!isDraftable2(previousState)) {\r\n                    var result = caseReducer(previousState, action);\r\n                    if (result === void 0) {\r\n                        if (previousState === null) {\r\n                            return previousState;\r\n                        }\r\n                        throw Error(\"A case reducer on a non-draftable value must not return undefined\");\r\n                    }\r\n                    return result;\r\n                }\r\n                else {\r\n                    return createNextState2(previousState, function (draft) {\r\n                        return caseReducer(draft, action);\r\n                    });\r\n                }\r\n            }\r\n            return previousState;\r\n        }, state);\r\n    }\r\n    reducer.getInitialState = getInitialState;\r\n    return reducer;\r\n}\r\n// src/createSlice.ts\r\nvar hasWarnedAboutObjectNotation2 = false;\r\nfunction getType2(slice, actionKey) {\r\n    return slice + \"/\" + actionKey;\r\n}\r\nfunction createSlice(options) {\r\n    var name = options.name;\r\n    if (!name) {\r\n        throw new Error(\"`name` is a required option for createSlice\");\r\n    }\r\n    if (typeof process !== \"undefined\" && process.env.NODE_ENV === \"development\") {\r\n        if (options.initialState === void 0) {\r\n            console.error(\"You must provide an `initialState` value that is not `undefined`. You may have misspelled `initialState`\");\r\n        }\r\n    }\r\n    var initialState = typeof options.initialState == \"function\" ? options.initialState : freezeDraftable(options.initialState);\r\n    var reducers = options.reducers || {};\r\n    var reducerNames = Object.keys(reducers);\r\n    var sliceCaseReducersByName = {};\r\n    var sliceCaseReducersByType = {};\r\n    var actionCreators = {};\r\n    reducerNames.forEach(function (reducerName) {\r\n        var maybeReducerWithPrepare = reducers[reducerName];\r\n        var type = getType2(name, reducerName);\r\n        var caseReducer;\r\n        var prepareCallback;\r\n        if (\"reducer\" in maybeReducerWithPrepare) {\r\n            caseReducer = maybeReducerWithPrepare.reducer;\r\n            prepareCallback = maybeReducerWithPrepare.prepare;\r\n        }\r\n        else {\r\n            caseReducer = maybeReducerWithPrepare;\r\n        }\r\n        sliceCaseReducersByName[reducerName] = caseReducer;\r\n        sliceCaseReducersByType[type] = caseReducer;\r\n        actionCreators[reducerName] = prepareCallback ? createAction(type, prepareCallback) : createAction(type);\r\n    });\r\n    function buildReducer() {\r\n        if (process.env.NODE_ENV !== \"production\") {\r\n            if (typeof options.extraReducers === \"object\") {\r\n                if (!hasWarnedAboutObjectNotation2) {\r\n                    hasWarnedAboutObjectNotation2 = true;\r\n                    console.warn(\"The object notation for `createSlice.extraReducers` is deprecated, and will be removed in RTK 2.0. Please use the 'builder callback' notation instead: https://redux-toolkit.js.org/api/createSlice\");\r\n                }\r\n            }\r\n        }\r\n        var _c = typeof options.extraReducers === \"function\" ? executeReducerBuilderCallback(options.extraReducers) : [options.extraReducers], _d = _c[0], extraReducers = _d === void 0 ? {} : _d, _e = _c[1], actionMatchers = _e === void 0 ? [] : _e, _f = _c[2], defaultCaseReducer = _f === void 0 ? void 0 : _f;\r\n        var finalCaseReducers = __spreadValues(__spreadValues({}, extraReducers), sliceCaseReducersByType);\r\n        return createReducer(initialState, function (builder) {\r\n            for (var key in finalCaseReducers) {\r\n                builder.addCase(key, finalCaseReducers[key]);\r\n            }\r\n            for (var _i = 0, actionMatchers_1 = actionMatchers; _i < actionMatchers_1.length; _i++) {\r\n                var m = actionMatchers_1[_i];\r\n                builder.addMatcher(m.matcher, m.reducer);\r\n            }\r\n            if (defaultCaseReducer) {\r\n                builder.addDefaultCase(defaultCaseReducer);\r\n            }\r\n        });\r\n    }\r\n    var _reducer;\r\n    return {\r\n        name: name,\r\n        reducer: function (state, action) {\r\n            if (!_reducer)\r\n                _reducer = buildReducer();\r\n            return _reducer(state, action);\r\n        },\r\n        actions: actionCreators,\r\n        caseReducers: sliceCaseReducersByName,\r\n        getInitialState: function () {\r\n            if (!_reducer)\r\n                _reducer = buildReducer();\r\n            return _reducer.getInitialState();\r\n        }\r\n    };\r\n}\r\n// src/entities/entity_state.ts\r\nfunction getInitialEntityState() {\r\n    return {\r\n        ids: [],\r\n        entities: {}\r\n    };\r\n}\r\nfunction createInitialStateFactory() {\r\n    function getInitialState(additionalState) {\r\n        if (additionalState === void 0) { additionalState = {}; }\r\n        return Object.assign(getInitialEntityState(), additionalState);\r\n    }\r\n    return { getInitialState: getInitialState };\r\n}\r\n// src/entities/state_selectors.ts\r\nfunction createSelectorsFactory() {\r\n    function getSelectors(selectState) {\r\n        var selectIds = function (state) { return state.ids; };\r\n        var selectEntities = function (state) { return state.entities; };\r\n        var selectAll = createDraftSafeSelector(selectIds, selectEntities, function (ids, entities) { return ids.map(function (id) { return entities[id]; }); });\r\n        var selectId = function (_, id) { return id; };\r\n        var selectById = function (entities, id) { return entities[id]; };\r\n        var selectTotal = createDraftSafeSelector(selectIds, function (ids) { return ids.length; });\r\n        if (!selectState) {\r\n            return {\r\n                selectIds: selectIds,\r\n                selectEntities: selectEntities,\r\n                selectAll: selectAll,\r\n                selectTotal: selectTotal,\r\n                selectById: createDraftSafeSelector(selectEntities, selectId, selectById)\r\n            };\r\n        }\r\n        var selectGlobalizedEntities = createDraftSafeSelector(selectState, selectEntities);\r\n        return {\r\n            selectIds: createDraftSafeSelector(selectState, selectIds),\r\n            selectEntities: selectGlobalizedEntities,\r\n            selectAll: createDraftSafeSelector(selectState, selectAll),\r\n            selectTotal: createDraftSafeSelector(selectState, selectTotal),\r\n            selectById: createDraftSafeSelector(selectGlobalizedEntities, selectId, selectById)\r\n        };\r\n    }\r\n    return { getSelectors: getSelectors };\r\n}\r\n// src/entities/state_adapter.ts\r\nimport createNextState3, { isDraft as isDraft3 } from \"immer\";\r\nfunction createSingleArgumentStateOperator(mutator) {\r\n    var operator = createStateOperator(function (_, state) { return mutator(state); });\r\n    return function operation(state) {\r\n        return operator(state, void 0);\r\n    };\r\n}\r\nfunction createStateOperator(mutator) {\r\n    return function operation(state, arg) {\r\n        function isPayloadActionArgument(arg2) {\r\n            return isFSA(arg2);\r\n        }\r\n        var runMutator = function (draft) {\r\n            if (isPayloadActionArgument(arg)) {\r\n                mutator(arg.payload, draft);\r\n            }\r\n            else {\r\n                mutator(arg, draft);\r\n            }\r\n        };\r\n        if (isDraft3(state)) {\r\n            runMutator(state);\r\n            return state;\r\n        }\r\n        else {\r\n            return createNextState3(state, runMutator);\r\n        }\r\n    };\r\n}\r\n// src/entities/utils.ts\r\nfunction selectIdValue(entity, selectId) {\r\n    var key = selectId(entity);\r\n    if (process.env.NODE_ENV !== \"production\" && key === void 0) {\r\n        console.warn(\"The entity passed to the `selectId` implementation returned undefined.\", \"You should probably provide your own `selectId` implementation.\", \"The entity that was passed:\", entity, \"The `selectId` implementation:\", selectId.toString());\r\n    }\r\n    return key;\r\n}\r\nfunction ensureEntitiesArray(entities) {\r\n    if (!Array.isArray(entities)) {\r\n        entities = Object.values(entities);\r\n    }\r\n    return entities;\r\n}\r\nfunction splitAddedUpdatedEntities(newEntities, selectId, state) {\r\n    newEntities = ensureEntitiesArray(newEntities);\r\n    var added = [];\r\n    var updated = [];\r\n    for (var _i = 0, newEntities_1 = newEntities; _i < newEntities_1.length; _i++) {\r\n        var entity = newEntities_1[_i];\r\n        var id = selectIdValue(entity, selectId);\r\n        if (id in state.entities) {\r\n            updated.push({ id: id, changes: entity });\r\n        }\r\n        else {\r\n            added.push(entity);\r\n        }\r\n    }\r\n    return [added, updated];\r\n}\r\n// src/entities/unsorted_state_adapter.ts\r\nfunction createUnsortedStateAdapter(selectId) {\r\n    function addOneMutably(entity, state) {\r\n        var key = selectIdValue(entity, selectId);\r\n        if (key in state.entities) {\r\n            return;\r\n        }\r\n        state.ids.push(key);\r\n        state.entities[key] = entity;\r\n    }\r\n    function addManyMutably(newEntities, state) {\r\n        newEntities = ensureEntitiesArray(newEntities);\r\n        for (var _i = 0, newEntities_2 = newEntities; _i < newEntities_2.length; _i++) {\r\n            var entity = newEntities_2[_i];\r\n            addOneMutably(entity, state);\r\n        }\r\n    }\r\n    function setOneMutably(entity, state) {\r\n        var key = selectIdValue(entity, selectId);\r\n        if (!(key in state.entities)) {\r\n            state.ids.push(key);\r\n        }\r\n        state.entities[key] = entity;\r\n    }\r\n    function setManyMutably(newEntities, state) {\r\n        newEntities = ensureEntitiesArray(newEntities);\r\n        for (var _i = 0, newEntities_3 = newEntities; _i < newEntities_3.length; _i++) {\r\n            var entity = newEntities_3[_i];\r\n            setOneMutably(entity, state);\r\n        }\r\n    }\r\n    function setAllMutably(newEntities, state) {\r\n        newEntities = ensureEntitiesArray(newEntities);\r\n        state.ids = [];\r\n        state.entities = {};\r\n        addManyMutably(newEntities, state);\r\n    }\r\n    function removeOneMutably(key, state) {\r\n        return removeManyMutably([key], state);\r\n    }\r\n    function removeManyMutably(keys, state) {\r\n        var didMutate = false;\r\n        keys.forEach(function (key) {\r\n            if (key in state.entities) {\r\n                delete state.entities[key];\r\n                didMutate = true;\r\n            }\r\n        });\r\n        if (didMutate) {\r\n            state.ids = state.ids.filter(function (id) { return id in state.entities; });\r\n        }\r\n    }\r\n    function removeAllMutably(state) {\r\n        Object.assign(state, {\r\n            ids: [],\r\n            entities: {}\r\n        });\r\n    }\r\n    function takeNewKey(keys, update, state) {\r\n        var original2 = state.entities[update.id];\r\n        var updated = Object.assign({}, original2, update.changes);\r\n        var newKey = selectIdValue(updated, selectId);\r\n        var hasNewKey = newKey !== update.id;\r\n        if (hasNewKey) {\r\n            keys[update.id] = newKey;\r\n            delete state.entities[update.id];\r\n        }\r\n        state.entities[newKey] = updated;\r\n        return hasNewKey;\r\n    }\r\n    function updateOneMutably(update, state) {\r\n        return updateManyMutably([update], state);\r\n    }\r\n    function updateManyMutably(updates, state) {\r\n        var newKeys = {};\r\n        var updatesPerEntity = {};\r\n        updates.forEach(function (update) {\r\n            if (update.id in state.entities) {\r\n                updatesPerEntity[update.id] = {\r\n                    id: update.id,\r\n                    changes: __spreadValues(__spreadValues({}, updatesPerEntity[update.id] ? updatesPerEntity[update.id].changes : null), update.changes)\r\n                };\r\n            }\r\n        });\r\n        updates = Object.values(updatesPerEntity);\r\n        var didMutateEntities = updates.length > 0;\r\n        if (didMutateEntities) {\r\n            var didMutateIds = updates.filter(function (update) { return takeNewKey(newKeys, update, state); }).length > 0;\r\n            if (didMutateIds) {\r\n                state.ids = Object.keys(state.entities);\r\n            }\r\n        }\r\n    }\r\n    function upsertOneMutably(entity, state) {\r\n        return upsertManyMutably([entity], state);\r\n    }\r\n    function upsertManyMutably(newEntities, state) {\r\n        var _c = splitAddedUpdatedEntities(newEntities, selectId, state), added = _c[0], updated = _c[1];\r\n        updateManyMutably(updated, state);\r\n        addManyMutably(added, state);\r\n    }\r\n    return {\r\n        removeAll: createSingleArgumentStateOperator(removeAllMutably),\r\n        addOne: createStateOperator(addOneMutably),\r\n        addMany: createStateOperator(addManyMutably),\r\n        setOne: createStateOperator(setOneMutably),\r\n        setMany: createStateOperator(setManyMutably),\r\n        setAll: createStateOperator(setAllMutably),\r\n        updateOne: createStateOperator(updateOneMutably),\r\n        updateMany: createStateOperator(updateManyMutably),\r\n        upsertOne: createStateOperator(upsertOneMutably),\r\n        upsertMany: createStateOperator(upsertManyMutably),\r\n        removeOne: createStateOperator(removeOneMutably),\r\n        removeMany: createStateOperator(removeManyMutably)\r\n    };\r\n}\r\n// src/entities/sorted_state_adapter.ts\r\nfunction createSortedStateAdapter(selectId, sort) {\r\n    var _c = createUnsortedStateAdapter(selectId), removeOne = _c.removeOne, removeMany = _c.removeMany, removeAll = _c.removeAll;\r\n    function addOneMutably(entity, state) {\r\n        return addManyMutably([entity], state);\r\n    }\r\n    function addManyMutably(newEntities, state) {\r\n        newEntities = ensureEntitiesArray(newEntities);\r\n        var models = newEntities.filter(function (model) { return !(selectIdValue(model, selectId) in state.entities); });\r\n        if (models.length !== 0) {\r\n            merge(models, state);\r\n        }\r\n    }\r\n    function setOneMutably(entity, state) {\r\n        return setManyMutably([entity], state);\r\n    }\r\n    function setManyMutably(newEntities, state) {\r\n        newEntities = ensureEntitiesArray(newEntities);\r\n        if (newEntities.length !== 0) {\r\n            merge(newEntities, state);\r\n        }\r\n    }\r\n    function setAllMutably(newEntities, state) {\r\n        newEntities = ensureEntitiesArray(newEntities);\r\n        state.entities = {};\r\n        state.ids = [];\r\n        addManyMutably(newEntities, state);\r\n    }\r\n    function updateOneMutably(update, state) {\r\n        return updateManyMutably([update], state);\r\n    }\r\n    function updateManyMutably(updates, state) {\r\n        var appliedUpdates = false;\r\n        for (var _i = 0, updates_1 = updates; _i < updates_1.length; _i++) {\r\n            var update = updates_1[_i];\r\n            var entity = state.entities[update.id];\r\n            if (!entity) {\r\n                continue;\r\n            }\r\n            appliedUpdates = true;\r\n            Object.assign(entity, update.changes);\r\n            var newId = selectId(entity);\r\n            if (update.id !== newId) {\r\n                delete state.entities[update.id];\r\n                state.entities[newId] = entity;\r\n            }\r\n        }\r\n        if (appliedUpdates) {\r\n            resortEntities(state);\r\n        }\r\n    }\r\n    function upsertOneMutably(entity, state) {\r\n        return upsertManyMutably([entity], state);\r\n    }\r\n    function upsertManyMutably(newEntities, state) {\r\n        var _c = splitAddedUpdatedEntities(newEntities, selectId, state), added = _c[0], updated = _c[1];\r\n        updateManyMutably(updated, state);\r\n        addManyMutably(added, state);\r\n    }\r\n    function areArraysEqual(a, b) {\r\n        if (a.length !== b.length) {\r\n            return false;\r\n        }\r\n        for (var i = 0; i < a.length && i < b.length; i++) {\r\n            if (a[i] === b[i]) {\r\n                continue;\r\n            }\r\n            return false;\r\n        }\r\n        return true;\r\n    }\r\n    function merge(models, state) {\r\n        models.forEach(function (model) {\r\n            state.entities[selectId(model)] = model;\r\n        });\r\n        resortEntities(state);\r\n    }\r\n    function resortEntities(state) {\r\n        var allEntities = Object.values(state.entities);\r\n        allEntities.sort(sort);\r\n        var newSortedIds = allEntities.map(selectId);\r\n        var ids = state.ids;\r\n        if (!areArraysEqual(ids, newSortedIds)) {\r\n            state.ids = newSortedIds;\r\n        }\r\n    }\r\n    return {\r\n        removeOne: removeOne,\r\n        removeMany: removeMany,\r\n        removeAll: removeAll,\r\n        addOne: createStateOperator(addOneMutably),\r\n        updateOne: createStateOperator(updateOneMutably),\r\n        upsertOne: createStateOperator(upsertOneMutably),\r\n        setOne: createStateOperator(setOneMutably),\r\n        setMany: createStateOperator(setManyMutably),\r\n        setAll: createStateOperator(setAllMutably),\r\n        addMany: createStateOperator(addManyMutably),\r\n        updateMany: createStateOperator(updateManyMutably),\r\n        upsertMany: createStateOperator(upsertManyMutably)\r\n    };\r\n}\r\n// src/entities/create_adapter.ts\r\nfunction createEntityAdapter(options) {\r\n    if (options === void 0) { options = {}; }\r\n    var _c = __spreadValues({\r\n        sortComparer: false,\r\n        selectId: function (instance) { return instance.id; }\r\n    }, options), selectId = _c.selectId, sortComparer = _c.sortComparer;\r\n    var stateFactory = createInitialStateFactory();\r\n    var selectorsFactory = createSelectorsFactory();\r\n    var stateAdapter = sortComparer ? createSortedStateAdapter(selectId, sortComparer) : createUnsortedStateAdapter(selectId);\r\n    return __spreadValues(__spreadValues(__spreadValues({\r\n        selectId: selectId,\r\n        sortComparer: sortComparer\r\n    }, stateFactory), selectorsFactory), stateAdapter);\r\n}\r\n// src/nanoid.ts\r\nvar urlAlphabet = \"ModuleSymbhasOwnPr-0123456789ABCDEFGHNRVfgctiUvz_KqYTJkLxpZXIjQW\";\r\nvar nanoid = function (size) {\r\n    if (size === void 0) { size = 21; }\r\n    var id = \"\";\r\n    var i = size;\r\n    while (i--) {\r\n        id += urlAlphabet[Math.random() * 64 | 0];\r\n    }\r\n    return id;\r\n};\r\n// src/createAsyncThunk.ts\r\nvar commonProperties = [\r\n    \"name\",\r\n    \"message\",\r\n    \"stack\",\r\n    \"code\"\r\n];\r\nvar RejectWithValue = /** @class */ (function () {\r\n    function RejectWithValue(payload, meta) {\r\n        this.payload = payload;\r\n        this.meta = meta;\r\n    }\r\n    return RejectWithValue;\r\n}());\r\nvar FulfillWithMeta = /** @class */ (function () {\r\n    function FulfillWithMeta(payload, meta) {\r\n        this.payload = payload;\r\n        this.meta = meta;\r\n    }\r\n    return FulfillWithMeta;\r\n}());\r\nvar miniSerializeError = function (value) {\r\n    if (typeof value === \"object\" && value !== null) {\r\n        var simpleError = {};\r\n        for (var _i = 0, commonProperties_1 = commonProperties; _i < commonProperties_1.length; _i++) {\r\n            var property = commonProperties_1[_i];\r\n            if (typeof value[property] === \"string\") {\r\n                simpleError[property] = value[property];\r\n            }\r\n        }\r\n        return simpleError;\r\n    }\r\n    return { message: String(value) };\r\n};\r\nvar createAsyncThunk = (function () {\r\n    function createAsyncThunk2(typePrefix, payloadCreator, options) {\r\n        var fulfilled = createAction(typePrefix + \"/fulfilled\", function (payload, requestId, arg, meta) { return ({\r\n            payload: payload,\r\n            meta: __spreadProps(__spreadValues({}, meta || {}), {\r\n                arg: arg,\r\n                requestId: requestId,\r\n                requestStatus: \"fulfilled\"\r\n            })\r\n        }); });\r\n        var pending = createAction(typePrefix + \"/pending\", function (requestId, arg, meta) { return ({\r\n            payload: void 0,\r\n            meta: __spreadProps(__spreadValues({}, meta || {}), {\r\n                arg: arg,\r\n                requestId: requestId,\r\n                requestStatus: \"pending\"\r\n            })\r\n        }); });\r\n        var rejected = createAction(typePrefix + \"/rejected\", function (error, requestId, arg, payload, meta) { return ({\r\n            payload: payload,\r\n            error: (options && options.serializeError || miniSerializeError)(error || \"Rejected\"),\r\n            meta: __spreadProps(__spreadValues({}, meta || {}), {\r\n                arg: arg,\r\n                requestId: requestId,\r\n                rejectedWithValue: !!payload,\r\n                requestStatus: \"rejected\",\r\n                aborted: (error == null ? void 0 : error.name) === \"AbortError\",\r\n                condition: (error == null ? void 0 : error.name) === \"ConditionError\"\r\n            })\r\n        }); });\r\n        var displayedWarning = false;\r\n        var AC = typeof AbortController !== \"undefined\" ? AbortController : /** @class */ (function () {\r\n            function class_1() {\r\n                this.signal = {\r\n                    aborted: false,\r\n                    addEventListener: function () {\r\n                    },\r\n                    dispatchEvent: function () {\r\n                        return false;\r\n                    },\r\n                    onabort: function () {\r\n                    },\r\n                    removeEventListener: function () {\r\n                    },\r\n                    reason: void 0,\r\n                    throwIfAborted: function () {\r\n                    }\r\n                };\r\n            }\r\n            class_1.prototype.abort = function () {\r\n                if (process.env.NODE_ENV !== \"production\") {\r\n                    if (!displayedWarning) {\r\n                        displayedWarning = true;\r\n                        console.info(\"This platform does not implement AbortController. \\nIf you want to use the AbortController to react to `abort` events, please consider importing a polyfill like 'abortcontroller-polyfill/dist/abortcontroller-polyfill-only'.\");\r\n                    }\r\n                }\r\n            };\r\n            return class_1;\r\n        }());\r\n        function actionCreator(arg) {\r\n            return function (dispatch, getState, extra) {\r\n                var requestId = (options == null ? void 0 : options.idGenerator) ? options.idGenerator(arg) : nanoid();\r\n                var abortController = new AC();\r\n                var abortReason;\r\n                var started = false;\r\n                function abort(reason) {\r\n                    abortReason = reason;\r\n                    abortController.abort();\r\n                }\r\n                var promise2 = function () {\r\n                    return __async(this, null, function () {\r\n                        var _a, _b, finalAction, conditionResult, abortedPromise, err_1, skipDispatch;\r\n                        return __generator(this, function (_c) {\r\n                            switch (_c.label) {\r\n                                case 0:\r\n                                    _c.trys.push([0, 4, , 5]);\r\n                                    conditionResult = (_a = options == null ? void 0 : options.condition) == null ? void 0 : _a.call(options, arg, { getState: getState, extra: extra });\r\n                                    if (!isThenable(conditionResult)) return [3 /*break*/, 2];\r\n                                    return [4 /*yield*/, conditionResult];\r\n                                case 1:\r\n                                    conditionResult = _c.sent();\r\n                                    _c.label = 2;\r\n                                case 2:\r\n                                    if (conditionResult === false || abortController.signal.aborted) {\r\n                                        throw {\r\n                                            name: \"ConditionError\",\r\n                                            message: \"Aborted due to condition callback returning false.\"\r\n                                        };\r\n                                    }\r\n                                    started = true;\r\n                                    abortedPromise = new Promise(function (_, reject) { return abortController.signal.addEventListener(\"abort\", function () { return reject({\r\n                                        name: \"AbortError\",\r\n                                        message: abortReason || \"Aborted\"\r\n                                    }); }); });\r\n                                    dispatch(pending(requestId, arg, (_b = options == null ? void 0 : options.getPendingMeta) == null ? void 0 : _b.call(options, { requestId: requestId, arg: arg }, { getState: getState, extra: extra })));\r\n                                    return [4 /*yield*/, Promise.race([\r\n                                            abortedPromise,\r\n                                            Promise.resolve(payloadCreator(arg, {\r\n                                                dispatch: dispatch,\r\n                                                getState: getState,\r\n                                                extra: extra,\r\n                                                requestId: requestId,\r\n                                                signal: abortController.signal,\r\n                                                abort: abort,\r\n                                                rejectWithValue: function (value, meta) {\r\n                                                    return new RejectWithValue(value, meta);\r\n                                                },\r\n                                                fulfillWithValue: function (value, meta) {\r\n                                                    return new FulfillWithMeta(value, meta);\r\n                                                }\r\n                                            })).then(function (result) {\r\n                                                if (result instanceof RejectWithValue) {\r\n                                                    throw result;\r\n                                                }\r\n                                                if (result instanceof FulfillWithMeta) {\r\n                                                    return fulfilled(result.payload, requestId, arg, result.meta);\r\n                                                }\r\n                                                return fulfilled(result, requestId, arg);\r\n                                            })\r\n                                        ])];\r\n                                case 3:\r\n                                    finalAction = _c.sent();\r\n                                    return [3 /*break*/, 5];\r\n                                case 4:\r\n                                    err_1 = _c.sent();\r\n                                    finalAction = err_1 instanceof RejectWithValue ? rejected(null, requestId, arg, err_1.payload, err_1.meta) : rejected(err_1, requestId, arg);\r\n                                    return [3 /*break*/, 5];\r\n                                case 5:\r\n                                    skipDispatch = options && !options.dispatchConditionRejection && rejected.match(finalAction) && finalAction.meta.condition;\r\n                                    if (!skipDispatch) {\r\n                                        dispatch(finalAction);\r\n                                    }\r\n                                    return [2 /*return*/, finalAction];\r\n                            }\r\n                        });\r\n                    });\r\n                }();\r\n                return Object.assign(promise2, {\r\n                    abort: abort,\r\n                    requestId: requestId,\r\n                    arg: arg,\r\n                    unwrap: function () {\r\n                        return promise2.then(unwrapResult);\r\n                    }\r\n                });\r\n            };\r\n        }\r\n        return Object.assign(actionCreator, {\r\n            pending: pending,\r\n            rejected: rejected,\r\n            fulfilled: fulfilled,\r\n            typePrefix: typePrefix\r\n        });\r\n    }\r\n    createAsyncThunk2.withTypes = function () { return createAsyncThunk2; };\r\n    return createAsyncThunk2;\r\n})();\r\nfunction unwrapResult(action) {\r\n    if (action.meta && action.meta.rejectedWithValue) {\r\n        throw action.payload;\r\n    }\r\n    if (action.error) {\r\n        throw action.error;\r\n    }\r\n    return action.payload;\r\n}\r\nfunction isThenable(value) {\r\n    return value !== null && typeof value === \"object\" && typeof value.then === \"function\";\r\n}\r\n// src/matchers.ts\r\nvar matches = function (matcher, action) {\r\n    if (hasMatchFunction(matcher)) {\r\n        return matcher.match(action);\r\n    }\r\n    else {\r\n        return matcher(action);\r\n    }\r\n};\r\nfunction isAnyOf() {\r\n    var matchers = [];\r\n    for (var _i = 0; _i < arguments.length; _i++) {\r\n        matchers[_i] = arguments[_i];\r\n    }\r\n    return function (action) {\r\n        return matchers.some(function (matcher) { return matches(matcher, action); });\r\n    };\r\n}\r\nfunction isAllOf() {\r\n    var matchers = [];\r\n    for (var _i = 0; _i < arguments.length; _i++) {\r\n        matchers[_i] = arguments[_i];\r\n    }\r\n    return function (action) {\r\n        return matchers.every(function (matcher) { return matches(matcher, action); });\r\n    };\r\n}\r\nfunction hasExpectedRequestMetadata(action, validStatus) {\r\n    if (!action || !action.meta)\r\n        return false;\r\n    var hasValidRequestId = typeof action.meta.requestId === \"string\";\r\n    var hasValidRequestStatus = validStatus.indexOf(action.meta.requestStatus) > -1;\r\n    return hasValidRequestId && hasValidRequestStatus;\r\n}\r\nfunction isAsyncThunkArray(a) {\r\n    return typeof a[0] === \"function\" && \"pending\" in a[0] && \"fulfilled\" in a[0] && \"rejected\" in a[0];\r\n}\r\nfunction isPending() {\r\n    var asyncThunks = [];\r\n    for (var _i = 0; _i < arguments.length; _i++) {\r\n        asyncThunks[_i] = arguments[_i];\r\n    }\r\n    if (asyncThunks.length === 0) {\r\n        return function (action) { return hasExpectedRequestMetadata(action, [\"pending\"]); };\r\n    }\r\n    if (!isAsyncThunkArray(asyncThunks)) {\r\n        return isPending()(asyncThunks[0]);\r\n    }\r\n    return function (action) {\r\n        var matchers = asyncThunks.map(function (asyncThunk) { return asyncThunk.pending; });\r\n        var combinedMatcher = isAnyOf.apply(void 0, matchers);\r\n        return combinedMatcher(action);\r\n    };\r\n}\r\nfunction isRejected() {\r\n    var asyncThunks = [];\r\n    for (var _i = 0; _i < arguments.length; _i++) {\r\n        asyncThunks[_i] = arguments[_i];\r\n    }\r\n    if (asyncThunks.length === 0) {\r\n        return function (action) { return hasExpectedRequestMetadata(action, [\"rejected\"]); };\r\n    }\r\n    if (!isAsyncThunkArray(asyncThunks)) {\r\n        return isRejected()(asyncThunks[0]);\r\n    }\r\n    return function (action) {\r\n        var matchers = asyncThunks.map(function (asyncThunk) { return asyncThunk.rejected; });\r\n        var combinedMatcher = isAnyOf.apply(void 0, matchers);\r\n        return combinedMatcher(action);\r\n    };\r\n}\r\nfunction isRejectedWithValue() {\r\n    var asyncThunks = [];\r\n    for (var _i = 0; _i < arguments.length; _i++) {\r\n        asyncThunks[_i] = arguments[_i];\r\n    }\r\n    var hasFlag = function (action) {\r\n        return action && action.meta && action.meta.rejectedWithValue;\r\n    };\r\n    if (asyncThunks.length === 0) {\r\n        return function (action) {\r\n            var combinedMatcher = isAllOf(isRejected.apply(void 0, asyncThunks), hasFlag);\r\n            return combinedMatcher(action);\r\n        };\r\n    }\r\n    if (!isAsyncThunkArray(asyncThunks)) {\r\n        return isRejectedWithValue()(asyncThunks[0]);\r\n    }\r\n    return function (action) {\r\n        var combinedMatcher = isAllOf(isRejected.apply(void 0, asyncThunks), hasFlag);\r\n        return combinedMatcher(action);\r\n    };\r\n}\r\nfunction isFulfilled() {\r\n    var asyncThunks = [];\r\n    for (var _i = 0; _i < arguments.length; _i++) {\r\n        asyncThunks[_i] = arguments[_i];\r\n    }\r\n    if (asyncThunks.length === 0) {\r\n        return function (action) { return hasExpectedRequestMetadata(action, [\"fulfilled\"]); };\r\n    }\r\n    if (!isAsyncThunkArray(asyncThunks)) {\r\n        return isFulfilled()(asyncThunks[0]);\r\n    }\r\n    return function (action) {\r\n        var matchers = asyncThunks.map(function (asyncThunk) { return asyncThunk.fulfilled; });\r\n        var combinedMatcher = isAnyOf.apply(void 0, matchers);\r\n        return combinedMatcher(action);\r\n    };\r\n}\r\nfunction isAsyncThunkAction() {\r\n    var asyncThunks = [];\r\n    for (var _i = 0; _i < arguments.length; _i++) {\r\n        asyncThunks[_i] = arguments[_i];\r\n    }\r\n    if (asyncThunks.length === 0) {\r\n        return function (action) { return hasExpectedRequestMetadata(action, [\"pending\", \"fulfilled\", \"rejected\"]); };\r\n    }\r\n    if (!isAsyncThunkArray(asyncThunks)) {\r\n        return isAsyncThunkAction()(asyncThunks[0]);\r\n    }\r\n    return function (action) {\r\n        var matchers = [];\r\n        for (var _i = 0, asyncThunks_1 = asyncThunks; _i < asyncThunks_1.length; _i++) {\r\n            var asyncThunk = asyncThunks_1[_i];\r\n            matchers.push(asyncThunk.pending, asyncThunk.rejected, asyncThunk.fulfilled);\r\n        }\r\n        var combinedMatcher = isAnyOf.apply(void 0, matchers);\r\n        return combinedMatcher(action);\r\n    };\r\n}\r\n// src/listenerMiddleware/utils.ts\r\nvar assertFunction = function (func, expected) {\r\n    if (typeof func !== \"function\") {\r\n        throw new TypeError(expected + \" is not a function\");\r\n    }\r\n};\r\nvar noop = function () {\r\n};\r\nvar catchRejection = function (promise2, onError) {\r\n    if (onError === void 0) { onError = noop; }\r\n    promise2.catch(onError);\r\n    return promise2;\r\n};\r\nvar addAbortSignalListener = function (abortSignal, callback) {\r\n    abortSignal.addEventListener(\"abort\", callback, { once: true });\r\n    return function () { return abortSignal.removeEventListener(\"abort\", callback); };\r\n};\r\nvar abortControllerWithReason = function (abortController, reason) {\r\n    var signal = abortController.signal;\r\n    if (signal.aborted) {\r\n        return;\r\n    }\r\n    if (!(\"reason\" in signal)) {\r\n        Object.defineProperty(signal, \"reason\", {\r\n            enumerable: true,\r\n            value: reason,\r\n            configurable: true,\r\n            writable: true\r\n        });\r\n    }\r\n    ;\r\n    abortController.abort(reason);\r\n};\r\n// src/listenerMiddleware/exceptions.ts\r\nvar task = \"task\";\r\nvar listener = \"listener\";\r\nvar completed = \"completed\";\r\nvar cancelled = \"cancelled\";\r\nvar taskCancelled = \"task-\" + cancelled;\r\nvar taskCompleted = \"task-\" + completed;\r\nvar listenerCancelled = listener + \"-\" + cancelled;\r\nvar listenerCompleted = listener + \"-\" + completed;\r\nvar TaskAbortError = /** @class */ (function () {\r\n    function TaskAbortError(code) {\r\n        this.code = code;\r\n        this.name = \"TaskAbortError\";\r\n        this.message = task + \" \" + cancelled + \" (reason: \" + code + \")\";\r\n    }\r\n    return TaskAbortError;\r\n}());\r\n// src/listenerMiddleware/task.ts\r\nvar validateActive = function (signal) {\r\n    if (signal.aborted) {\r\n        throw new TaskAbortError(signal.reason);\r\n    }\r\n};\r\nfunction raceWithSignal(signal, promise2) {\r\n    var cleanup = noop;\r\n    return new Promise(function (resolve, reject) {\r\n        var notifyRejection = function () { return reject(new TaskAbortError(signal.reason)); };\r\n        if (signal.aborted) {\r\n            notifyRejection();\r\n            return;\r\n        }\r\n        cleanup = addAbortSignalListener(signal, notifyRejection);\r\n        promise2.finally(function () { return cleanup(); }).then(resolve, reject);\r\n    }).finally(function () {\r\n        cleanup = noop;\r\n    });\r\n}\r\nvar runTask = function (task2, cleanUp) { return __async(void 0, null, function () {\r\n    var value, error_1;\r\n    return __generator(this, function (_c) {\r\n        switch (_c.label) {\r\n            case 0:\r\n                _c.trys.push([0, 3, 4, 5]);\r\n                return [4 /*yield*/, Promise.resolve()];\r\n            case 1:\r\n                _c.sent();\r\n                return [4 /*yield*/, task2()];\r\n            case 2:\r\n                value = _c.sent();\r\n                return [2 /*return*/, {\r\n                        status: \"ok\",\r\n                        value: value\r\n                    }];\r\n            case 3:\r\n                error_1 = _c.sent();\r\n                return [2 /*return*/, {\r\n                        status: error_1 instanceof TaskAbortError ? \"cancelled\" : \"rejected\",\r\n                        error: error_1\r\n                    }];\r\n            case 4:\r\n                cleanUp == null ? void 0 : cleanUp();\r\n                return [7 /*endfinally*/];\r\n            case 5: return [2 /*return*/];\r\n        }\r\n    });\r\n}); };\r\nvar createPause = function (signal) {\r\n    return function (promise2) {\r\n        return catchRejection(raceWithSignal(signal, promise2).then(function (output) {\r\n            validateActive(signal);\r\n            return output;\r\n        }));\r\n    };\r\n};\r\nvar createDelay = function (signal) {\r\n    var pause = createPause(signal);\r\n    return function (timeoutMs) {\r\n        return pause(new Promise(function (resolve) { return setTimeout(resolve, timeoutMs); }));\r\n    };\r\n};\r\n// src/listenerMiddleware/index.ts\r\nvar assign = Object.assign;\r\nvar INTERNAL_NIL_TOKEN = {};\r\nvar alm = \"listenerMiddleware\";\r\nvar createFork = function (parentAbortSignal, parentBlockingPromises) {\r\n    var linkControllers = function (controller) { return addAbortSignalListener(parentAbortSignal, function () { return abortControllerWithReason(controller, parentAbortSignal.reason); }); };\r\n    return function (taskExecutor, opts) {\r\n        assertFunction(taskExecutor, \"taskExecutor\");\r\n        var childAbortController = new AbortController();\r\n        linkControllers(childAbortController);\r\n        var result = runTask(function () { return __async(void 0, null, function () {\r\n            var result2;\r\n            return __generator(this, function (_c) {\r\n                switch (_c.label) {\r\n                    case 0:\r\n                        validateActive(parentAbortSignal);\r\n                        validateActive(childAbortController.signal);\r\n                        return [4 /*yield*/, taskExecutor({\r\n                                pause: createPause(childAbortController.signal),\r\n                                delay: createDelay(childAbortController.signal),\r\n                                signal: childAbortController.signal\r\n                            })];\r\n                    case 1:\r\n                        result2 = _c.sent();\r\n                        validateActive(childAbortController.signal);\r\n                        return [2 /*return*/, result2];\r\n                }\r\n            });\r\n        }); }, function () { return abortControllerWithReason(childAbortController, taskCompleted); });\r\n        if (opts == null ? void 0 : opts.autoJoin) {\r\n            parentBlockingPromises.push(result);\r\n        }\r\n        return {\r\n            result: createPause(parentAbortSignal)(result),\r\n            cancel: function () {\r\n                abortControllerWithReason(childAbortController, taskCancelled);\r\n            }\r\n        };\r\n    };\r\n};\r\nvar createTakePattern = function (startListening, signal) {\r\n    var take = function (predicate, timeout) { return __async(void 0, null, function () {\r\n        var unsubscribe, tuplePromise, promises, output;\r\n        return __generator(this, function (_c) {\r\n            switch (_c.label) {\r\n                case 0:\r\n                    validateActive(signal);\r\n                    unsubscribe = function () {\r\n                    };\r\n                    tuplePromise = new Promise(function (resolve, reject) {\r\n                        var stopListening = startListening({\r\n                            predicate: predicate,\r\n                            effect: function (action, listenerApi) {\r\n                                listenerApi.unsubscribe();\r\n                                resolve([\r\n                                    action,\r\n                                    listenerApi.getState(),\r\n                                    listenerApi.getOriginalState()\r\n                                ]);\r\n                            }\r\n                        });\r\n                        unsubscribe = function () {\r\n                            stopListening();\r\n                            reject();\r\n                        };\r\n                    });\r\n                    promises = [\r\n                        tuplePromise\r\n                    ];\r\n                    if (timeout != null) {\r\n                        promises.push(new Promise(function (resolve) { return setTimeout(resolve, timeout, null); }));\r\n                    }\r\n                    _c.label = 1;\r\n                case 1:\r\n                    _c.trys.push([1, , 3, 4]);\r\n                    return [4 /*yield*/, raceWithSignal(signal, Promise.race(promises))];\r\n                case 2:\r\n                    output = _c.sent();\r\n                    validateActive(signal);\r\n                    return [2 /*return*/, output];\r\n                case 3:\r\n                    unsubscribe();\r\n                    return [7 /*endfinally*/];\r\n                case 4: return [2 /*return*/];\r\n            }\r\n        });\r\n    }); };\r\n    return function (predicate, timeout) { return catchRejection(take(predicate, timeout)); };\r\n};\r\nvar getListenerEntryPropsFrom = function (options) {\r\n    var type = options.type, actionCreator = options.actionCreator, matcher = options.matcher, predicate = options.predicate, effect = options.effect;\r\n    if (type) {\r\n        predicate = createAction(type).match;\r\n    }\r\n    else if (actionCreator) {\r\n        type = actionCreator.type;\r\n        predicate = actionCreator.match;\r\n    }\r\n    else if (matcher) {\r\n        predicate = matcher;\r\n    }\r\n    else if (predicate) {\r\n    }\r\n    else {\r\n        throw new Error(\"Creating or removing a listener requires one of the known fields for matching an action\");\r\n    }\r\n    assertFunction(effect, \"options.listener\");\r\n    return { predicate: predicate, type: type, effect: effect };\r\n};\r\nvar createListenerEntry = function (options) {\r\n    var _c = getListenerEntryPropsFrom(options), type = _c.type, predicate = _c.predicate, effect = _c.effect;\r\n    var id = nanoid();\r\n    var entry = {\r\n        id: id,\r\n        effect: effect,\r\n        type: type,\r\n        predicate: predicate,\r\n        pending: new Set(),\r\n        unsubscribe: function () {\r\n            throw new Error(\"Unsubscribe not initialized\");\r\n        }\r\n    };\r\n    return entry;\r\n};\r\nvar cancelActiveListeners = function (entry) {\r\n    entry.pending.forEach(function (controller) {\r\n        abortControllerWithReason(controller, listenerCancelled);\r\n    });\r\n};\r\nvar createClearListenerMiddleware = function (listenerMap) {\r\n    return function () {\r\n        listenerMap.forEach(cancelActiveListeners);\r\n        listenerMap.clear();\r\n    };\r\n};\r\nvar safelyNotifyError = function (errorHandler, errorToNotify, errorInfo) {\r\n    try {\r\n        errorHandler(errorToNotify, errorInfo);\r\n    }\r\n    catch (errorHandlerError) {\r\n        setTimeout(function () {\r\n            throw errorHandlerError;\r\n        }, 0);\r\n    }\r\n};\r\nvar addListener = createAction(alm + \"/add\");\r\nvar clearAllListeners = createAction(alm + \"/removeAll\");\r\nvar removeListener = createAction(alm + \"/remove\");\r\nvar defaultErrorHandler = function () {\r\n    var args = [];\r\n    for (var _i = 0; _i < arguments.length; _i++) {\r\n        args[_i] = arguments[_i];\r\n    }\r\n    console.error.apply(console, __spreadArray([alm + \"/error\"], args));\r\n};\r\nfunction createListenerMiddleware(middlewareOptions) {\r\n    var _this = this;\r\n    if (middlewareOptions === void 0) { middlewareOptions = {}; }\r\n    var listenerMap = new Map();\r\n    var extra = middlewareOptions.extra, _c = middlewareOptions.onError, onError = _c === void 0 ? defaultErrorHandler : _c;\r\n    assertFunction(onError, \"onError\");\r\n    var insertEntry = function (entry) {\r\n        entry.unsubscribe = function () { return listenerMap.delete(entry.id); };\r\n        listenerMap.set(entry.id, entry);\r\n        return function (cancelOptions) {\r\n            entry.unsubscribe();\r\n            if (cancelOptions == null ? void 0 : cancelOptions.cancelActive) {\r\n                cancelActiveListeners(entry);\r\n            }\r\n        };\r\n    };\r\n    var findListenerEntry = function (comparator) {\r\n        for (var _i = 0, _c = Array.from(listenerMap.values()); _i < _c.length; _i++) {\r\n            var entry = _c[_i];\r\n            if (comparator(entry)) {\r\n                return entry;\r\n            }\r\n        }\r\n        return void 0;\r\n    };\r\n    var startListening = function (options) {\r\n        var entry = findListenerEntry(function (existingEntry) { return existingEntry.effect === options.effect; });\r\n        if (!entry) {\r\n            entry = createListenerEntry(options);\r\n        }\r\n        return insertEntry(entry);\r\n    };\r\n    var stopListening = function (options) {\r\n        var _c = getListenerEntryPropsFrom(options), type = _c.type, effect = _c.effect, predicate = _c.predicate;\r\n        var entry = findListenerEntry(function (entry2) {\r\n            var matchPredicateOrType = typeof type === \"string\" ? entry2.type === type : entry2.predicate === predicate;\r\n            return matchPredicateOrType && entry2.effect === effect;\r\n        });\r\n        if (entry) {\r\n            entry.unsubscribe();\r\n            if (options.cancelActive) {\r\n                cancelActiveListeners(entry);\r\n            }\r\n        }\r\n        return !!entry;\r\n    };\r\n    var notifyListener = function (entry, action, api, getOriginalState) { return __async(_this, null, function () {\r\n        var internalTaskController, take, autoJoinPromises, listenerError_1;\r\n        return __generator(this, function (_c) {\r\n            switch (_c.label) {\r\n                case 0:\r\n                    internalTaskController = new AbortController();\r\n                    take = createTakePattern(startListening, internalTaskController.signal);\r\n                    autoJoinPromises = [];\r\n                    _c.label = 1;\r\n                case 1:\r\n                    _c.trys.push([1, 3, 4, 6]);\r\n                    entry.pending.add(internalTaskController);\r\n                    return [4 /*yield*/, Promise.resolve(entry.effect(action, assign({}, api, {\r\n                            getOriginalState: getOriginalState,\r\n                            condition: function (predicate, timeout) { return take(predicate, timeout).then(Boolean); },\r\n                            take: take,\r\n                            delay: createDelay(internalTaskController.signal),\r\n                            pause: createPause(internalTaskController.signal),\r\n                            extra: extra,\r\n                            signal: internalTaskController.signal,\r\n                            fork: createFork(internalTaskController.signal, autoJoinPromises),\r\n                            unsubscribe: entry.unsubscribe,\r\n                            subscribe: function () {\r\n                                listenerMap.set(entry.id, entry);\r\n                            },\r\n                            cancelActiveListeners: function () {\r\n                                entry.pending.forEach(function (controller, _, set) {\r\n                                    if (controller !== internalTaskController) {\r\n                                        abortControllerWithReason(controller, listenerCancelled);\r\n                                        set.delete(controller);\r\n                                    }\r\n                                });\r\n                            }\r\n                        })))];\r\n                case 2:\r\n                    _c.sent();\r\n                    return [3 /*break*/, 6];\r\n                case 3:\r\n                    listenerError_1 = _c.sent();\r\n                    if (!(listenerError_1 instanceof TaskAbortError)) {\r\n                        safelyNotifyError(onError, listenerError_1, {\r\n                            raisedBy: \"effect\"\r\n                        });\r\n                    }\r\n                    return [3 /*break*/, 6];\r\n                case 4: return [4 /*yield*/, Promise.allSettled(autoJoinPromises)];\r\n                case 5:\r\n                    _c.sent();\r\n                    abortControllerWithReason(internalTaskController, listenerCompleted);\r\n                    entry.pending.delete(internalTaskController);\r\n                    return [7 /*endfinally*/];\r\n                case 6: return [2 /*return*/];\r\n            }\r\n        });\r\n    }); };\r\n    var clearListenerMiddleware = createClearListenerMiddleware(listenerMap);\r\n    var middleware = function (api) { return function (next) { return function (action) {\r\n        if (!isAction(action)) {\r\n            return next(action);\r\n        }\r\n        if (addListener.match(action)) {\r\n            return startListening(action.payload);\r\n        }\r\n        if (clearAllListeners.match(action)) {\r\n            clearListenerMiddleware();\r\n            return;\r\n        }\r\n        if (removeListener.match(action)) {\r\n            return stopListening(action.payload);\r\n        }\r\n        var originalState = api.getState();\r\n        var getOriginalState = function () {\r\n            if (originalState === INTERNAL_NIL_TOKEN) {\r\n                throw new Error(alm + \": getOriginalState can only be called synchronously\");\r\n            }\r\n            return originalState;\r\n        };\r\n        var result;\r\n        try {\r\n            result = next(action);\r\n            if (listenerMap.size > 0) {\r\n                var currentState = api.getState();\r\n                var listenerEntries = Array.from(listenerMap.values());\r\n                for (var _i = 0, listenerEntries_1 = listenerEntries; _i < listenerEntries_1.length; _i++) {\r\n                    var entry = listenerEntries_1[_i];\r\n                    var runListener = false;\r\n                    try {\r\n                        runListener = entry.predicate(action, currentState, originalState);\r\n                    }\r\n                    catch (predicateError) {\r\n                        runListener = false;\r\n                        safelyNotifyError(onError, predicateError, {\r\n                            raisedBy: \"predicate\"\r\n                        });\r\n                    }\r\n                    if (!runListener) {\r\n                        continue;\r\n                    }\r\n                    notifyListener(entry, action, api, getOriginalState);\r\n                }\r\n            }\r\n        }\r\n        finally {\r\n            originalState = INTERNAL_NIL_TOKEN;\r\n        }\r\n        return result;\r\n    }; }; };\r\n    return {\r\n        middleware: middleware,\r\n        startListening: startListening,\r\n        stopListening: stopListening,\r\n        clearListeners: clearListenerMiddleware\r\n    };\r\n}\r\n// src/autoBatchEnhancer.ts\r\nvar SHOULD_AUTOBATCH = \"RTK_autoBatch\";\r\nvar prepareAutoBatched = function () { return function (payload) {\r\n    var _c;\r\n    return ({\r\n        payload: payload,\r\n        meta: (_c = {}, _c[SHOULD_AUTOBATCH] = true, _c)\r\n    });\r\n}; };\r\nvar promise;\r\nvar queueMicrotaskShim = typeof queueMicrotask === \"function\" ? queueMicrotask.bind(typeof window !== \"undefined\" ? window : typeof global !== \"undefined\" ? global : globalThis) : function (cb) { return (promise || (promise = Promise.resolve())).then(cb).catch(function (err) { return setTimeout(function () {\r\n    throw err;\r\n}, 0); }); };\r\nvar createQueueWithTimer = function (timeout) {\r\n    return function (notify) {\r\n        setTimeout(notify, timeout);\r\n    };\r\n};\r\nvar rAF = typeof window !== \"undefined\" && window.requestAnimationFrame ? window.requestAnimationFrame : createQueueWithTimer(10);\r\nvar autoBatchEnhancer = function (options) {\r\n    if (options === void 0) { options = { type: \"raf\" }; }\r\n    return function (next) { return function () {\r\n        var args = [];\r\n        for (var _i = 0; _i < arguments.length; _i++) {\r\n            args[_i] = arguments[_i];\r\n        }\r\n        var store = next.apply(void 0, args);\r\n        var notifying = true;\r\n        var shouldNotifyAtEndOfTick = false;\r\n        var notificationQueued = false;\r\n        var listeners = new Set();\r\n        var queueCallback = options.type === \"tick\" ? queueMicrotaskShim : options.type === \"raf\" ? rAF : options.type === \"callback\" ? options.queueNotification : createQueueWithTimer(options.timeout);\r\n        var notifyListeners = function () {\r\n            notificationQueued = false;\r\n            if (shouldNotifyAtEndOfTick) {\r\n                shouldNotifyAtEndOfTick = false;\r\n                listeners.forEach(function (l) { return l(); });\r\n            }\r\n        };\r\n        return Object.assign({}, store, {\r\n            subscribe: function (listener2) {\r\n                var wrappedListener = function () { return notifying && listener2(); };\r\n                var unsubscribe = store.subscribe(wrappedListener);\r\n                listeners.add(listener2);\r\n                return function () {\r\n                    unsubscribe();\r\n                    listeners.delete(listener2);\r\n                };\r\n            },\r\n            dispatch: function (action) {\r\n                var _a;\r\n                try {\r\n                    notifying = !((_a = action == null ? void 0 : action.meta) == null ? void 0 : _a[SHOULD_AUTOBATCH]);\r\n                    shouldNotifyAtEndOfTick = !notifying;\r\n                    if (shouldNotifyAtEndOfTick) {\r\n                        if (!notificationQueued) {\r\n                            notificationQueued = true;\r\n                            queueCallback(notifyListeners);\r\n                        }\r\n                    }\r\n                    return store.dispatch(action);\r\n                }\r\n                finally {\r\n                    notifying = true;\r\n                }\r\n            }\r\n        });\r\n    }; };\r\n};\r\n// src/index.ts\r\nenableES5();\r\nexport { EnhancerArray, MiddlewareArray, SHOULD_AUTOBATCH, TaskAbortError, addListener, autoBatchEnhancer, clearAllListeners, configureStore, createAction, createActionCreatorInvariantMiddleware, createAsyncThunk, createDraftSafeSelector, createEntityAdapter, createImmutableStateInvariantMiddleware, createListenerMiddleware, default2 as createNextState, createReducer, createSelector2 as createSelector, createSerializableStateInvariantMiddleware, createSlice, current2 as current, findNonSerializableValue, freeze, getDefaultMiddleware, getType, isAction, isActionCreator, isAllOf, isAnyOf, isAsyncThunkAction, isDraft4 as isDraft, isFSA as isFluxStandardAction, isFulfilled, isImmutableDefault, isPending, isPlain, isPlainObject, isRejected, isRejectedWithValue, miniSerializeError, nanoid, original, prepareAutoBatched, removeListener, unwrapResult };\r\n//# sourceMappingURL=redux-toolkit.esm.js.map","/**\n * @remix-run/router v1.13.0\n *\n * Copyright (c) Remix Software Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE.md file in the root directory of this source tree.\n *\n * @license MIT\n */\nfunction _extends() {\n  _extends = Object.assign ? Object.assign.bind() : function (target) {\n    for (var i = 1; i < arguments.length; i++) {\n      var source = arguments[i];\n      for (var key in source) {\n        if (Object.prototype.hasOwnProperty.call(source, key)) {\n          target[key] = source[key];\n        }\n      }\n    }\n    return target;\n  };\n  return _extends.apply(this, arguments);\n}\n\n////////////////////////////////////////////////////////////////////////////////\n//#region Types and Constants\n////////////////////////////////////////////////////////////////////////////////\n/**\n * Actions represent the type of change to a location value.\n */\nvar Action;\n(function (Action) {\n  /**\n   * A POP indicates a change to an arbitrary index in the history stack, such\n   * as a back or forward navigation. It does not describe the direction of the\n   * navigation, only that the current index changed.\n   *\n   * Note: This is the default action for newly created history objects.\n   */\n  Action[\"Pop\"] = \"POP\";\n  /**\n   * A PUSH indicates a new entry being added to the history stack, such as when\n   * a link is clicked and a new page loads. When this happens, all subsequent\n   * entries in the stack are lost.\n   */\n  Action[\"Push\"] = \"PUSH\";\n  /**\n   * A REPLACE indicates the entry at the current index in the history stack\n   * being replaced by a new one.\n   */\n  Action[\"Replace\"] = \"REPLACE\";\n})(Action || (Action = {}));\nconst PopStateEventType = \"popstate\";\n/**\n * Memory history stores the current location in memory. It is designed for use\n * in stateful non-browser environments like tests and React Native.\n */\nfunction createMemoryHistory(options) {\n  if (options === void 0) {\n    options = {};\n  }\n  let {\n    initialEntries = [\"/\"],\n    initialIndex,\n    v5Compat = false\n  } = options;\n  let entries; // Declare so we can access from createMemoryLocation\n  entries = initialEntries.map((entry, index) => createMemoryLocation(entry, typeof entry === \"string\" ? null : entry.state, index === 0 ? \"default\" : undefined));\n  let index = clampIndex(initialIndex == null ? entries.length - 1 : initialIndex);\n  let action = Action.Pop;\n  let listener = null;\n  function clampIndex(n) {\n    return Math.min(Math.max(n, 0), entries.length - 1);\n  }\n  function getCurrentLocation() {\n    return entries[index];\n  }\n  function createMemoryLocation(to, state, key) {\n    if (state === void 0) {\n      state = null;\n    }\n    let location = createLocation(entries ? getCurrentLocation().pathname : \"/\", to, state, key);\n    warning(location.pathname.charAt(0) === \"/\", \"relative pathnames are not supported in memory history: \" + JSON.stringify(to));\n    return location;\n  }\n  function createHref(to) {\n    return typeof to === \"string\" ? to : createPath(to);\n  }\n  let history = {\n    get index() {\n      return index;\n    },\n    get action() {\n      return action;\n    },\n    get location() {\n      return getCurrentLocation();\n    },\n    createHref,\n    createURL(to) {\n      return new URL(createHref(to), \"http://localhost\");\n    },\n    encodeLocation(to) {\n      let path = typeof to === \"string\" ? parsePath(to) : to;\n      return {\n        pathname: path.pathname || \"\",\n        search: path.search || \"\",\n        hash: path.hash || \"\"\n      };\n    },\n    push(to, state) {\n      action = Action.Push;\n      let nextLocation = createMemoryLocation(to, state);\n      index += 1;\n      entries.splice(index, entries.length, nextLocation);\n      if (v5Compat && listener) {\n        listener({\n          action,\n          location: nextLocation,\n          delta: 1\n        });\n      }\n    },\n    replace(to, state) {\n      action = Action.Replace;\n      let nextLocation = createMemoryLocation(to, state);\n      entries[index] = nextLocation;\n      if (v5Compat && listener) {\n        listener({\n          action,\n          location: nextLocation,\n          delta: 0\n        });\n      }\n    },\n    go(delta) {\n      action = Action.Pop;\n      let nextIndex = clampIndex(index + delta);\n      let nextLocation = entries[nextIndex];\n      index = nextIndex;\n      if (listener) {\n        listener({\n          action,\n          location: nextLocation,\n          delta\n        });\n      }\n    },\n    listen(fn) {\n      listener = fn;\n      return () => {\n        listener = null;\n      };\n    }\n  };\n  return history;\n}\n/**\n * Browser history stores the location in regular URLs. This is the standard for\n * most web apps, but it requires some configuration on the server to ensure you\n * serve the same app at multiple URLs.\n *\n * @see https://github.com/remix-run/history/tree/main/docs/api-reference.md#createbrowserhistory\n */\nfunction createBrowserHistory(options) {\n  if (options === void 0) {\n    options = {};\n  }\n  function createBrowserLocation(window, globalHistory) {\n    let {\n      pathname,\n      search,\n      hash\n    } = window.location;\n    return createLocation(\"\", {\n      pathname,\n      search,\n      hash\n    },\n    // state defaults to `null` because `window.history.state` does\n    globalHistory.state && globalHistory.state.usr || null, globalHistory.state && globalHistory.state.key || \"default\");\n  }\n  function createBrowserHref(window, to) {\n    return typeof to === \"string\" ? to : createPath(to);\n  }\n  return getUrlBasedHistory(createBrowserLocation, createBrowserHref, null, options);\n}\n/**\n * Hash history stores the location in window.location.hash. This makes it ideal\n * for situations where you don't want to send the location to the server for\n * some reason, either because you do cannot configure it or the URL space is\n * reserved for something else.\n *\n * @see https://github.com/remix-run/history/tree/main/docs/api-reference.md#createhashhistory\n */\nfunction createHashHistory(options) {\n  if (options === void 0) {\n    options = {};\n  }\n  function createHashLocation(window, globalHistory) {\n    let {\n      pathname = \"/\",\n      search = \"\",\n      hash = \"\"\n    } = parsePath(window.location.hash.substr(1));\n    // Hash URL should always have a leading / just like window.location.pathname\n    // does, so if an app ends up at a route like /#something then we add a\n    // leading slash so all of our path-matching behaves the same as if it would\n    // in a browser router.  This is particularly important when there exists a\n    // root splat route (<Route path=\"*\">) since that matches internally against\n    // \"/*\" and we'd expect /#something to 404 in a hash router app.\n    if (!pathname.startsWith(\"/\") && !pathname.startsWith(\".\")) {\n      pathname = \"/\" + pathname;\n    }\n    return createLocation(\"\", {\n      pathname,\n      search,\n      hash\n    },\n    // state defaults to `null` because `window.history.state` does\n    globalHistory.state && globalHistory.state.usr || null, globalHistory.state && globalHistory.state.key || \"default\");\n  }\n  function createHashHref(window, to) {\n    let base = window.document.querySelector(\"base\");\n    let href = \"\";\n    if (base && base.getAttribute(\"href\")) {\n      let url = window.location.href;\n      let hashIndex = url.indexOf(\"#\");\n      href = hashIndex === -1 ? url : url.slice(0, hashIndex);\n    }\n    return href + \"#\" + (typeof to === \"string\" ? to : createPath(to));\n  }\n  function validateHashLocation(location, to) {\n    warning(location.pathname.charAt(0) === \"/\", \"relative pathnames are not supported in hash history.push(\" + JSON.stringify(to) + \")\");\n  }\n  return getUrlBasedHistory(createHashLocation, createHashHref, validateHashLocation, options);\n}\nfunction invariant(value, message) {\n  if (value === false || value === null || typeof value === \"undefined\") {\n    throw new Error(message);\n  }\n}\nfunction warning(cond, message) {\n  if (!cond) {\n    // eslint-disable-next-line no-console\n    if (typeof console !== \"undefined\") console.warn(message);\n    try {\n      // Welcome to debugging history!\n      //\n      // This error is thrown as a convenience, so you can more easily\n      // find the source for a warning that appears in the console by\n      // enabling \"pause on exceptions\" in your JavaScript debugger.\n      throw new Error(message);\n      // eslint-disable-next-line no-empty\n    } catch (e) {}\n  }\n}\nfunction createKey() {\n  return Math.random().toString(36).substr(2, 8);\n}\n/**\n * For browser-based histories, we combine the state and key into an object\n */\nfunction getHistoryState(location, index) {\n  return {\n    usr: location.state,\n    key: location.key,\n    idx: index\n  };\n}\n/**\n * Creates a Location object with a unique key from the given Path\n */\nfunction createLocation(current, to, state, key) {\n  if (state === void 0) {\n    state = null;\n  }\n  let location = _extends({\n    pathname: typeof current === \"string\" ? current : current.pathname,\n    search: \"\",\n    hash: \"\"\n  }, typeof to === \"string\" ? parsePath(to) : to, {\n    state,\n    // TODO: This could be cleaned up.  push/replace should probably just take\n    // full Locations now and avoid the need to run through this flow at all\n    // But that's a pretty big refactor to the current test suite so going to\n    // keep as is for the time being and just let any incoming keys take precedence\n    key: to && to.key || key || createKey()\n  });\n  return location;\n}\n/**\n * Creates a string URL path from the given pathname, search, and hash components.\n */\nfunction createPath(_ref) {\n  let {\n    pathname = \"/\",\n    search = \"\",\n    hash = \"\"\n  } = _ref;\n  if (search && search !== \"?\") pathname += search.charAt(0) === \"?\" ? search : \"?\" + search;\n  if (hash && hash !== \"#\") pathname += hash.charAt(0) === \"#\" ? hash : \"#\" + hash;\n  return pathname;\n}\n/**\n * Parses a string URL path into its separate pathname, search, and hash components.\n */\nfunction parsePath(path) {\n  let parsedPath = {};\n  if (path) {\n    let hashIndex = path.indexOf(\"#\");\n    if (hashIndex >= 0) {\n      parsedPath.hash = path.substr(hashIndex);\n      path = path.substr(0, hashIndex);\n    }\n    let searchIndex = path.indexOf(\"?\");\n    if (searchIndex >= 0) {\n      parsedPath.search = path.substr(searchIndex);\n      path = path.substr(0, searchIndex);\n    }\n    if (path) {\n      parsedPath.pathname = path;\n    }\n  }\n  return parsedPath;\n}\nfunction getUrlBasedHistory(getLocation, createHref, validateLocation, options) {\n  if (options === void 0) {\n    options = {};\n  }\n  let {\n    window = document.defaultView,\n    v5Compat = false\n  } = options;\n  let globalHistory = window.history;\n  let action = Action.Pop;\n  let listener = null;\n  let index = getIndex();\n  // Index should only be null when we initialize. If not, it's because the\n  // user called history.pushState or history.replaceState directly, in which\n  // case we should log a warning as it will result in bugs.\n  if (index == null) {\n    index = 0;\n    globalHistory.replaceState(_extends({}, globalHistory.state, {\n      idx: index\n    }), \"\");\n  }\n  function getIndex() {\n    let state = globalHistory.state || {\n      idx: null\n    };\n    return state.idx;\n  }\n  function handlePop() {\n    action = Action.Pop;\n    let nextIndex = getIndex();\n    let delta = nextIndex == null ? null : nextIndex - index;\n    index = nextIndex;\n    if (listener) {\n      listener({\n        action,\n        location: history.location,\n        delta\n      });\n    }\n  }\n  function push(to, state) {\n    action = Action.Push;\n    let location = createLocation(history.location, to, state);\n    if (validateLocation) validateLocation(location, to);\n    index = getIndex() + 1;\n    let historyState = getHistoryState(location, index);\n    let url = history.createHref(location);\n    // try...catch because iOS limits us to 100 pushState calls :/\n    try {\n      globalHistory.pushState(historyState, \"\", url);\n    } catch (error) {\n      // If the exception is because `state` can't be serialized, let that throw\n      // outwards just like a replace call would so the dev knows the cause\n      // https://html.spec.whatwg.org/multipage/nav-history-apis.html#shared-history-push/replace-state-steps\n      // https://html.spec.whatwg.org/multipage/structured-data.html#structuredserializeinternal\n      if (error instanceof DOMException && error.name === \"DataCloneError\") {\n        throw error;\n      }\n      // They are going to lose state here, but there is no real\n      // way to warn them about it since the page will refresh...\n      window.location.assign(url);\n    }\n    if (v5Compat && listener) {\n      listener({\n        action,\n        location: history.location,\n        delta: 1\n      });\n    }\n  }\n  function replace(to, state) {\n    action = Action.Replace;\n    let location = createLocation(history.location, to, state);\n    if (validateLocation) validateLocation(location, to);\n    index = getIndex();\n    let historyState = getHistoryState(location, index);\n    let url = history.createHref(location);\n    globalHistory.replaceState(historyState, \"\", url);\n    if (v5Compat && listener) {\n      listener({\n        action,\n        location: history.location,\n        delta: 0\n      });\n    }\n  }\n  function createURL(to) {\n    // window.location.origin is \"null\" (the literal string value) in Firefox\n    // under certain conditions, notably when serving from a local HTML file\n    // See https://bugzilla.mozilla.org/show_bug.cgi?id=878297\n    let base = window.location.origin !== \"null\" ? window.location.origin : window.location.href;\n    let href = typeof to === \"string\" ? to : createPath(to);\n    invariant(base, \"No window.location.(origin|href) available to create URL for href: \" + href);\n    return new URL(href, base);\n  }\n  let history = {\n    get action() {\n      return action;\n    },\n    get location() {\n      return getLocation(window, globalHistory);\n    },\n    listen(fn) {\n      if (listener) {\n        throw new Error(\"A history only accepts one active listener\");\n      }\n      window.addEventListener(PopStateEventType, handlePop);\n      listener = fn;\n      return () => {\n        window.removeEventListener(PopStateEventType, handlePop);\n        listener = null;\n      };\n    },\n    createHref(to) {\n      return createHref(window, to);\n    },\n    createURL,\n    encodeLocation(to) {\n      // Encode a Location the same way window.location would\n      let url = createURL(to);\n      return {\n        pathname: url.pathname,\n        search: url.search,\n        hash: url.hash\n      };\n    },\n    push,\n    replace,\n    go(n) {\n      return globalHistory.go(n);\n    }\n  };\n  return history;\n}\n//#endregion\n\nvar ResultType;\n(function (ResultType) {\n  ResultType[\"data\"] = \"data\";\n  ResultType[\"deferred\"] = \"deferred\";\n  ResultType[\"redirect\"] = \"redirect\";\n  ResultType[\"error\"] = \"error\";\n})(ResultType || (ResultType = {}));\nconst immutableRouteKeys = new Set([\"lazy\", \"caseSensitive\", \"path\", \"id\", \"index\", \"children\"]);\nfunction isIndexRoute(route) {\n  return route.index === true;\n}\n// Walk the route tree generating unique IDs where necessary, so we are working\n// solely with AgnosticDataRouteObject's within the Router\nfunction convertRoutesToDataRoutes(routes, mapRouteProperties, parentPath, manifest) {\n  if (parentPath === void 0) {\n    parentPath = [];\n  }\n  if (manifest === void 0) {\n    manifest = {};\n  }\n  return routes.map((route, index) => {\n    let treePath = [...parentPath, index];\n    let id = typeof route.id === \"string\" ? route.id : treePath.join(\"-\");\n    invariant(route.index !== true || !route.children, \"Cannot specify children on an index route\");\n    invariant(!manifest[id], \"Found a route id collision on id \\\"\" + id + \"\\\".  Route \" + \"id's must be globally unique within Data Router usages\");\n    if (isIndexRoute(route)) {\n      let indexRoute = _extends({}, route, mapRouteProperties(route), {\n        id\n      });\n      manifest[id] = indexRoute;\n      return indexRoute;\n    } else {\n      let pathOrLayoutRoute = _extends({}, route, mapRouteProperties(route), {\n        id,\n        children: undefined\n      });\n      manifest[id] = pathOrLayoutRoute;\n      if (route.children) {\n        pathOrLayoutRoute.children = convertRoutesToDataRoutes(route.children, mapRouteProperties, treePath, manifest);\n      }\n      return pathOrLayoutRoute;\n    }\n  });\n}\n/**\n * Matches the given routes to a location and returns the match data.\n *\n * @see https://reactrouter.com/utils/match-routes\n */\nfunction matchRoutes(routes, locationArg, basename) {\n  if (basename === void 0) {\n    basename = \"/\";\n  }\n  let location = typeof locationArg === \"string\" ? parsePath(locationArg) : locationArg;\n  let pathname = stripBasename(location.pathname || \"/\", basename);\n  if (pathname == null) {\n    return null;\n  }\n  let branches = flattenRoutes(routes);\n  rankRouteBranches(branches);\n  let matches = null;\n  for (let i = 0; matches == null && i < branches.length; ++i) {\n    matches = matchRouteBranch(branches[i],\n    // Incoming pathnames are generally encoded from either window.location\n    // or from router.navigate, but we want to match against the unencoded\n    // paths in the route definitions.  Memory router locations won't be\n    // encoded here but there also shouldn't be anything to decode so this\n    // should be a safe operation.  This avoids needing matchRoutes to be\n    // history-aware.\n    safelyDecodeURI(pathname));\n  }\n  return matches;\n}\nfunction convertRouteMatchToUiMatch(match, loaderData) {\n  let {\n    route,\n    pathname,\n    params\n  } = match;\n  return {\n    id: route.id,\n    pathname,\n    params,\n    data: loaderData[route.id],\n    handle: route.handle\n  };\n}\nfunction flattenRoutes(routes, branches, parentsMeta, parentPath) {\n  if (branches === void 0) {\n    branches = [];\n  }\n  if (parentsMeta === void 0) {\n    parentsMeta = [];\n  }\n  if (parentPath === void 0) {\n    parentPath = \"\";\n  }\n  let flattenRoute = (route, index, relativePath) => {\n    let meta = {\n      relativePath: relativePath === undefined ? route.path || \"\" : relativePath,\n      caseSensitive: route.caseSensitive === true,\n      childrenIndex: index,\n      route\n    };\n    if (meta.relativePath.startsWith(\"/\")) {\n      invariant(meta.relativePath.startsWith(parentPath), \"Absolute route path \\\"\" + meta.relativePath + \"\\\" nested under path \" + (\"\\\"\" + parentPath + \"\\\" is not valid. An absolute child route path \") + \"must start with the combined path of all its parent routes.\");\n      meta.relativePath = meta.relativePath.slice(parentPath.length);\n    }\n    let path = joinPaths([parentPath, meta.relativePath]);\n    let routesMeta = parentsMeta.concat(meta);\n    // Add the children before adding this route to the array, so we traverse the\n    // route tree depth-first and child routes appear before their parents in\n    // the \"flattened\" version.\n    if (route.children && route.children.length > 0) {\n      invariant(\n      // Our types know better, but runtime JS may not!\n      // @ts-expect-error\n      route.index !== true, \"Index routes must not have child routes. Please remove \" + (\"all child routes from route path \\\"\" + path + \"\\\".\"));\n      flattenRoutes(route.children, branches, routesMeta, path);\n    }\n    // Routes without a path shouldn't ever match by themselves unless they are\n    // index routes, so don't add them to the list of possible branches.\n    if (route.path == null && !route.index) {\n      return;\n    }\n    branches.push({\n      path,\n      score: computeScore(path, route.index),\n      routesMeta\n    });\n  };\n  routes.forEach((route, index) => {\n    var _route$path;\n    // coarse-grain check for optional params\n    if (route.path === \"\" || !((_route$path = route.path) != null && _route$path.includes(\"?\"))) {\n      flattenRoute(route, index);\n    } else {\n      for (let exploded of explodeOptionalSegments(route.path)) {\n        flattenRoute(route, index, exploded);\n      }\n    }\n  });\n  return branches;\n}\n/**\n * Computes all combinations of optional path segments for a given path,\n * excluding combinations that are ambiguous and of lower priority.\n *\n * For example, `/one/:two?/three/:four?/:five?` explodes to:\n * - `/one/three`\n * - `/one/:two/three`\n * - `/one/three/:four`\n * - `/one/three/:five`\n * - `/one/:two/three/:four`\n * - `/one/:two/three/:five`\n * - `/one/three/:four/:five`\n * - `/one/:two/three/:four/:five`\n */\nfunction explodeOptionalSegments(path) {\n  let segments = path.split(\"/\");\n  if (segments.length === 0) return [];\n  let [first, ...rest] = segments;\n  // Optional path segments are denoted by a trailing `?`\n  let isOptional = first.endsWith(\"?\");\n  // Compute the corresponding required segment: `foo?` -> `foo`\n  let required = first.replace(/\\?$/, \"\");\n  if (rest.length === 0) {\n    // Intepret empty string as omitting an optional segment\n    // `[\"one\", \"\", \"three\"]` corresponds to omitting `:two` from `/one/:two?/three` -> `/one/three`\n    return isOptional ? [required, \"\"] : [required];\n  }\n  let restExploded = explodeOptionalSegments(rest.join(\"/\"));\n  let result = [];\n  // All child paths with the prefix.  Do this for all children before the\n  // optional version for all children, so we get consistent ordering where the\n  // parent optional aspect is preferred as required.  Otherwise, we can get\n  // child sections interspersed where deeper optional segments are higher than\n  // parent optional segments, where for example, /:two would explode _earlier_\n  // then /:one.  By always including the parent as required _for all children_\n  // first, we avoid this issue\n  result.push(...restExploded.map(subpath => subpath === \"\" ? required : [required, subpath].join(\"/\")));\n  // Then, if this is an optional value, add all child versions without\n  if (isOptional) {\n    result.push(...restExploded);\n  }\n  // for absolute paths, ensure `/` instead of empty segment\n  return result.map(exploded => path.startsWith(\"/\") && exploded === \"\" ? \"/\" : exploded);\n}\nfunction rankRouteBranches(branches) {\n  branches.sort((a, b) => a.score !== b.score ? b.score - a.score // Higher score first\n  : compareIndexes(a.routesMeta.map(meta => meta.childrenIndex), b.routesMeta.map(meta => meta.childrenIndex)));\n}\nconst paramRe = /^:\\w+$/;\nconst dynamicSegmentValue = 3;\nconst indexRouteValue = 2;\nconst emptySegmentValue = 1;\nconst staticSegmentValue = 10;\nconst splatPenalty = -2;\nconst isSplat = s => s === \"*\";\nfunction computeScore(path, index) {\n  let segments = path.split(\"/\");\n  let initialScore = segments.length;\n  if (segments.some(isSplat)) {\n    initialScore += splatPenalty;\n  }\n  if (index) {\n    initialScore += indexRouteValue;\n  }\n  return segments.filter(s => !isSplat(s)).reduce((score, segment) => score + (paramRe.test(segment) ? dynamicSegmentValue : segment === \"\" ? emptySegmentValue : staticSegmentValue), initialScore);\n}\nfunction compareIndexes(a, b) {\n  let siblings = a.length === b.length && a.slice(0, -1).every((n, i) => n === b[i]);\n  return siblings ?\n  // If two routes are siblings, we should try to match the earlier sibling\n  // first. This allows people to have fine-grained control over the matching\n  // behavior by simply putting routes with identical paths in the order they\n  // want them tried.\n  a[a.length - 1] - b[b.length - 1] :\n  // Otherwise, it doesn't really make sense to rank non-siblings by index,\n  // so they sort equally.\n  0;\n}\nfunction matchRouteBranch(branch, pathname) {\n  let {\n    routesMeta\n  } = branch;\n  let matchedParams = {};\n  let matchedPathname = \"/\";\n  let matches = [];\n  for (let i = 0; i < routesMeta.length; ++i) {\n    let meta = routesMeta[i];\n    let end = i === routesMeta.length - 1;\n    let remainingPathname = matchedPathname === \"/\" ? pathname : pathname.slice(matchedPathname.length) || \"/\";\n    let match = matchPath({\n      path: meta.relativePath,\n      caseSensitive: meta.caseSensitive,\n      end\n    }, remainingPathname);\n    if (!match) return null;\n    Object.assign(matchedParams, match.params);\n    let route = meta.route;\n    matches.push({\n      // TODO: Can this as be avoided?\n      params: matchedParams,\n      pathname: joinPaths([matchedPathname, match.pathname]),\n      pathnameBase: normalizePathname(joinPaths([matchedPathname, match.pathnameBase])),\n      route\n    });\n    if (match.pathnameBase !== \"/\") {\n      matchedPathname = joinPaths([matchedPathname, match.pathnameBase]);\n    }\n  }\n  return matches;\n}\n/**\n * Returns a path with params interpolated.\n *\n * @see https://reactrouter.com/utils/generate-path\n */\nfunction generatePath(originalPath, params) {\n  if (params === void 0) {\n    params = {};\n  }\n  let path = originalPath;\n  if (path.endsWith(\"*\") && path !== \"*\" && !path.endsWith(\"/*\")) {\n    warning(false, \"Route path \\\"\" + path + \"\\\" will be treated as if it were \" + (\"\\\"\" + path.replace(/\\*$/, \"/*\") + \"\\\" because the `*` character must \") + \"always follow a `/` in the pattern. To get rid of this warning, \" + (\"please change the route path to \\\"\" + path.replace(/\\*$/, \"/*\") + \"\\\".\"));\n    path = path.replace(/\\*$/, \"/*\");\n  }\n  // ensure `/` is added at the beginning if the path is absolute\n  const prefix = path.startsWith(\"/\") ? \"/\" : \"\";\n  const stringify = p => p == null ? \"\" : typeof p === \"string\" ? p : String(p);\n  const segments = path.split(/\\/+/).map((segment, index, array) => {\n    const isLastSegment = index === array.length - 1;\n    // only apply the splat if it's the last segment\n    if (isLastSegment && segment === \"*\") {\n      const star = \"*\";\n      // Apply the splat\n      return stringify(params[star]);\n    }\n    const keyMatch = segment.match(/^:(\\w+)(\\??)$/);\n    if (keyMatch) {\n      const [, key, optional] = keyMatch;\n      let param = params[key];\n      invariant(optional === \"?\" || param != null, \"Missing \\\":\" + key + \"\\\" param\");\n      return stringify(param);\n    }\n    // Remove any optional markers from optional static segments\n    return segment.replace(/\\?$/g, \"\");\n  })\n  // Remove empty segments\n  .filter(segment => !!segment);\n  return prefix + segments.join(\"/\");\n}\n/**\n * Performs pattern matching on a URL pathname and returns information about\n * the match.\n *\n * @see https://reactrouter.com/utils/match-path\n */\nfunction matchPath(pattern, pathname) {\n  if (typeof pattern === \"string\") {\n    pattern = {\n      path: pattern,\n      caseSensitive: false,\n      end: true\n    };\n  }\n  let [matcher, compiledParams] = compilePath(pattern.path, pattern.caseSensitive, pattern.end);\n  let match = pathname.match(matcher);\n  if (!match) return null;\n  let matchedPathname = match[0];\n  let pathnameBase = matchedPathname.replace(/(.)\\/+$/, \"$1\");\n  let captureGroups = match.slice(1);\n  let params = compiledParams.reduce((memo, _ref, index) => {\n    let {\n      paramName,\n      isOptional\n    } = _ref;\n    // We need to compute the pathnameBase here using the raw splat value\n    // instead of using params[\"*\"] later because it will be decoded then\n    if (paramName === \"*\") {\n      let splatValue = captureGroups[index] || \"\";\n      pathnameBase = matchedPathname.slice(0, matchedPathname.length - splatValue.length).replace(/(.)\\/+$/, \"$1\");\n    }\n    const value = captureGroups[index];\n    if (isOptional && !value) {\n      memo[paramName] = undefined;\n    } else {\n      memo[paramName] = safelyDecodeURIComponent(value || \"\", paramName);\n    }\n    return memo;\n  }, {});\n  return {\n    params,\n    pathname: matchedPathname,\n    pathnameBase,\n    pattern\n  };\n}\nfunction compilePath(path, caseSensitive, end) {\n  if (caseSensitive === void 0) {\n    caseSensitive = false;\n  }\n  if (end === void 0) {\n    end = true;\n  }\n  warning(path === \"*\" || !path.endsWith(\"*\") || path.endsWith(\"/*\"), \"Route path \\\"\" + path + \"\\\" will be treated as if it were \" + (\"\\\"\" + path.replace(/\\*$/, \"/*\") + \"\\\" because the `*` character must \") + \"always follow a `/` in the pattern. To get rid of this warning, \" + (\"please change the route path to \\\"\" + path.replace(/\\*$/, \"/*\") + \"\\\".\"));\n  let params = [];\n  let regexpSource = \"^\" + path.replace(/\\/*\\*?$/, \"\") // Ignore trailing / and /*, we'll handle it below\n  .replace(/^\\/*/, \"/\") // Make sure it has a leading /\n  .replace(/[\\\\.*+^${}|()[\\]]/g, \"\\\\$&\") // Escape special regex chars\n  .replace(/\\/:(\\w+)(\\?)?/g, (_, paramName, isOptional) => {\n    params.push({\n      paramName,\n      isOptional: isOptional != null\n    });\n    return isOptional ? \"/?([^\\\\/]+)?\" : \"/([^\\\\/]+)\";\n  });\n  if (path.endsWith(\"*\")) {\n    params.push({\n      paramName: \"*\"\n    });\n    regexpSource += path === \"*\" || path === \"/*\" ? \"(.*)$\" // Already matched the initial /, just match the rest\n    : \"(?:\\\\/(.+)|\\\\/*)$\"; // Don't include the / in params[\"*\"]\n  } else if (end) {\n    // When matching to the end, ignore trailing slashes\n    regexpSource += \"\\\\/*$\";\n  } else if (path !== \"\" && path !== \"/\") {\n    // If our path is non-empty and contains anything beyond an initial slash,\n    // then we have _some_ form of path in our regex, so we should expect to\n    // match only if we find the end of this path segment.  Look for an optional\n    // non-captured trailing slash (to match a portion of the URL) or the end\n    // of the path (if we've matched to the end).  We used to do this with a\n    // word boundary but that gives false positives on routes like\n    // /user-preferences since `-` counts as a word boundary.\n    regexpSource += \"(?:(?=\\\\/|$))\";\n  } else ;\n  let matcher = new RegExp(regexpSource, caseSensitive ? undefined : \"i\");\n  return [matcher, params];\n}\nfunction safelyDecodeURI(value) {\n  try {\n    return decodeURI(value);\n  } catch (error) {\n    warning(false, \"The URL path \\\"\" + value + \"\\\" could not be decoded because it is is a \" + \"malformed URL segment. This is probably due to a bad percent \" + (\"encoding (\" + error + \").\"));\n    return value;\n  }\n}\nfunction safelyDecodeURIComponent(value, paramName) {\n  try {\n    return decodeURIComponent(value);\n  } catch (error) {\n    warning(false, \"The value for the URL param \\\"\" + paramName + \"\\\" will not be decoded because\" + (\" the string \\\"\" + value + \"\\\" is a malformed URL segment. This is probably\") + (\" due to a bad percent encoding (\" + error + \").\"));\n    return value;\n  }\n}\n/**\n * @private\n */\nfunction stripBasename(pathname, basename) {\n  if (basename === \"/\") return pathname;\n  if (!pathname.toLowerCase().startsWith(basename.toLowerCase())) {\n    return null;\n  }\n  // We want to leave trailing slash behavior in the user's control, so if they\n  // specify a basename with a trailing slash, we should support it\n  let startIndex = basename.endsWith(\"/\") ? basename.length - 1 : basename.length;\n  let nextChar = pathname.charAt(startIndex);\n  if (nextChar && nextChar !== \"/\") {\n    // pathname does not start with basename/\n    return null;\n  }\n  return pathname.slice(startIndex) || \"/\";\n}\n/**\n * Returns a resolved path object relative to the given pathname.\n *\n * @see https://reactrouter.com/utils/resolve-path\n */\nfunction resolvePath(to, fromPathname) {\n  if (fromPathname === void 0) {\n    fromPathname = \"/\";\n  }\n  let {\n    pathname: toPathname,\n    search = \"\",\n    hash = \"\"\n  } = typeof to === \"string\" ? parsePath(to) : to;\n  let pathname = toPathname ? toPathname.startsWith(\"/\") ? toPathname : resolvePathname(toPathname, fromPathname) : fromPathname;\n  return {\n    pathname,\n    search: normalizeSearch(search),\n    hash: normalizeHash(hash)\n  };\n}\nfunction resolvePathname(relativePath, fromPathname) {\n  let segments = fromPathname.replace(/\\/+$/, \"\").split(\"/\");\n  let relativeSegments = relativePath.split(\"/\");\n  relativeSegments.forEach(segment => {\n    if (segment === \"..\") {\n      // Keep the root \"\" segment so the pathname starts at /\n      if (segments.length > 1) segments.pop();\n    } else if (segment !== \".\") {\n      segments.push(segment);\n    }\n  });\n  return segments.length > 1 ? segments.join(\"/\") : \"/\";\n}\nfunction getInvalidPathError(char, field, dest, path) {\n  return \"Cannot include a '\" + char + \"' character in a manually specified \" + (\"`to.\" + field + \"` field [\" + JSON.stringify(path) + \"].  Please separate it out to the \") + (\"`to.\" + dest + \"` field. Alternatively you may provide the full path as \") + \"a string in <Link to=\\\"...\\\"> and the router will parse it for you.\";\n}\n/**\n * @private\n *\n * When processing relative navigation we want to ignore ancestor routes that\n * do not contribute to the path, such that index/pathless layout routes don't\n * interfere.\n *\n * For example, when moving a route element into an index route and/or a\n * pathless layout route, relative link behavior contained within should stay\n * the same.  Both of the following examples should link back to the root:\n *\n *   <Route path=\"/\">\n *     <Route path=\"accounts\" element={<Link to=\"..\"}>\n *   </Route>\n *\n *   <Route path=\"/\">\n *     <Route path=\"accounts\">\n *       <Route element={<AccountsLayout />}>       // <-- Does not contribute\n *         <Route index element={<Link to=\"..\"} />  // <-- Does not contribute\n *       </Route\n *     </Route>\n *   </Route>\n */\nfunction getPathContributingMatches(matches) {\n  return matches.filter((match, index) => index === 0 || match.route.path && match.route.path.length > 0);\n}\n// Return the array of pathnames for the current route matches - used to\n// generate the routePathnames input for resolveTo()\nfunction getResolveToMatches(matches) {\n  // Use the full pathname for the leaf match so we include splat values for \".\" links\n  return getPathContributingMatches(matches).map((match, idx) => idx === matches.length - 1 ? match.pathname : match.pathnameBase);\n}\n/**\n * @private\n */\nfunction resolveTo(toArg, routePathnames, locationPathname, isPathRelative) {\n  if (isPathRelative === void 0) {\n    isPathRelative = false;\n  }\n  let to;\n  if (typeof toArg === \"string\") {\n    to = parsePath(toArg);\n  } else {\n    to = _extends({}, toArg);\n    invariant(!to.pathname || !to.pathname.includes(\"?\"), getInvalidPathError(\"?\", \"pathname\", \"search\", to));\n    invariant(!to.pathname || !to.pathname.includes(\"#\"), getInvalidPathError(\"#\", \"pathname\", \"hash\", to));\n    invariant(!to.search || !to.search.includes(\"#\"), getInvalidPathError(\"#\", \"search\", \"hash\", to));\n  }\n  let isEmptyPath = toArg === \"\" || to.pathname === \"\";\n  let toPathname = isEmptyPath ? \"/\" : to.pathname;\n  let from;\n  // Routing is relative to the current pathname if explicitly requested.\n  //\n  // If a pathname is explicitly provided in `to`, it should be relative to the\n  // route context. This is explained in `Note on `<Link to>` values` in our\n  // migration guide from v5 as a means of disambiguation between `to` values\n  // that begin with `/` and those that do not. However, this is problematic for\n  // `to` values that do not provide a pathname. `to` can simply be a search or\n  // hash string, in which case we should assume that the navigation is relative\n  // to the current location's pathname and *not* the route pathname.\n  if (toPathname == null) {\n    from = locationPathname;\n  } else if (isPathRelative) {\n    let fromSegments = routePathnames[routePathnames.length - 1].replace(/^\\//, \"\").split(\"/\");\n    if (toPathname.startsWith(\"..\")) {\n      let toSegments = toPathname.split(\"/\");\n      // With relative=\"path\", each leading .. segment means \"go up one URL segment\"\n      while (toSegments[0] === \"..\") {\n        toSegments.shift();\n        fromSegments.pop();\n      }\n      to.pathname = toSegments.join(\"/\");\n    }\n    from = \"/\" + fromSegments.join(\"/\");\n  } else {\n    let routePathnameIndex = routePathnames.length - 1;\n    if (toPathname.startsWith(\"..\")) {\n      let toSegments = toPathname.split(\"/\");\n      // With relative=\"route\" (the default), each leading .. segment means\n      // \"go up one route\" instead of \"go up one URL segment\".  This is a key\n      // difference from how <a href> works and a major reason we call this a\n      // \"to\" value instead of a \"href\".\n      while (toSegments[0] === \"..\") {\n        toSegments.shift();\n        routePathnameIndex -= 1;\n      }\n      to.pathname = toSegments.join(\"/\");\n    }\n    // If there are more \"..\" segments than parent routes, resolve relative to\n    // the root / URL.\n    from = routePathnameIndex >= 0 ? routePathnames[routePathnameIndex] : \"/\";\n  }\n  let path = resolvePath(to, from);\n  // Ensure the pathname has a trailing slash if the original \"to\" had one\n  let hasExplicitTrailingSlash = toPathname && toPathname !== \"/\" && toPathname.endsWith(\"/\");\n  // Or if this was a link to the current path which has a trailing slash\n  let hasCurrentTrailingSlash = (isEmptyPath || toPathname === \".\") && locationPathname.endsWith(\"/\");\n  if (!path.pathname.endsWith(\"/\") && (hasExplicitTrailingSlash || hasCurrentTrailingSlash)) {\n    path.pathname += \"/\";\n  }\n  return path;\n}\n/**\n * @private\n */\nfunction getToPathname(to) {\n  // Empty strings should be treated the same as / paths\n  return to === \"\" || to.pathname === \"\" ? \"/\" : typeof to === \"string\" ? parsePath(to).pathname : to.pathname;\n}\n/**\n * @private\n */\nconst joinPaths = paths => paths.join(\"/\").replace(/\\/\\/+/g, \"/\");\n/**\n * @private\n */\nconst normalizePathname = pathname => pathname.replace(/\\/+$/, \"\").replace(/^\\/*/, \"/\");\n/**\n * @private\n */\nconst normalizeSearch = search => !search || search === \"?\" ? \"\" : search.startsWith(\"?\") ? search : \"?\" + search;\n/**\n * @private\n */\nconst normalizeHash = hash => !hash || hash === \"#\" ? \"\" : hash.startsWith(\"#\") ? hash : \"#\" + hash;\n/**\n * This is a shortcut for creating `application/json` responses. Converts `data`\n * to JSON and sets the `Content-Type` header.\n */\nconst json = function json(data, init) {\n  if (init === void 0) {\n    init = {};\n  }\n  let responseInit = typeof init === \"number\" ? {\n    status: init\n  } : init;\n  let headers = new Headers(responseInit.headers);\n  if (!headers.has(\"Content-Type\")) {\n    headers.set(\"Content-Type\", \"application/json; charset=utf-8\");\n  }\n  return new Response(JSON.stringify(data), _extends({}, responseInit, {\n    headers\n  }));\n};\nclass AbortedDeferredError extends Error {}\nclass DeferredData {\n  constructor(data, responseInit) {\n    this.pendingKeysSet = new Set();\n    this.subscribers = new Set();\n    this.deferredKeys = [];\n    invariant(data && typeof data === \"object\" && !Array.isArray(data), \"defer() only accepts plain objects\");\n    // Set up an AbortController + Promise we can race against to exit early\n    // cancellation\n    let reject;\n    this.abortPromise = new Promise((_, r) => reject = r);\n    this.controller = new AbortController();\n    let onAbort = () => reject(new AbortedDeferredError(\"Deferred data aborted\"));\n    this.unlistenAbortSignal = () => this.controller.signal.removeEventListener(\"abort\", onAbort);\n    this.controller.signal.addEventListener(\"abort\", onAbort);\n    this.data = Object.entries(data).reduce((acc, _ref2) => {\n      let [key, value] = _ref2;\n      return Object.assign(acc, {\n        [key]: this.trackPromise(key, value)\n      });\n    }, {});\n    if (this.done) {\n      // All incoming values were resolved\n      this.unlistenAbortSignal();\n    }\n    this.init = responseInit;\n  }\n  trackPromise(key, value) {\n    if (!(value instanceof Promise)) {\n      return value;\n    }\n    this.deferredKeys.push(key);\n    this.pendingKeysSet.add(key);\n    // We store a little wrapper promise that will be extended with\n    // _data/_error props upon resolve/reject\n    let promise = Promise.race([value, this.abortPromise]).then(data => this.onSettle(promise, key, undefined, data), error => this.onSettle(promise, key, error));\n    // Register rejection listeners to avoid uncaught promise rejections on\n    // errors or aborted deferred values\n    promise.catch(() => {});\n    Object.defineProperty(promise, \"_tracked\", {\n      get: () => true\n    });\n    return promise;\n  }\n  onSettle(promise, key, error, data) {\n    if (this.controller.signal.aborted && error instanceof AbortedDeferredError) {\n      this.unlistenAbortSignal();\n      Object.defineProperty(promise, \"_error\", {\n        get: () => error\n      });\n      return Promise.reject(error);\n    }\n    this.pendingKeysSet.delete(key);\n    if (this.done) {\n      // Nothing left to abort!\n      this.unlistenAbortSignal();\n    }\n    // If the promise was resolved/rejected with undefined, we'll throw an error as you\n    // should always resolve with a value or null\n    if (error === undefined && data === undefined) {\n      let undefinedError = new Error(\"Deferred data for key \\\"\" + key + \"\\\" resolved/rejected with `undefined`, \" + \"you must resolve/reject with a value or `null`.\");\n      Object.defineProperty(promise, \"_error\", {\n        get: () => undefinedError\n      });\n      this.emit(false, key);\n      return Promise.reject(undefinedError);\n    }\n    if (data === undefined) {\n      Object.defineProperty(promise, \"_error\", {\n        get: () => error\n      });\n      this.emit(false, key);\n      return Promise.reject(error);\n    }\n    Object.defineProperty(promise, \"_data\", {\n      get: () => data\n    });\n    this.emit(false, key);\n    return data;\n  }\n  emit(aborted, settledKey) {\n    this.subscribers.forEach(subscriber => subscriber(aborted, settledKey));\n  }\n  subscribe(fn) {\n    this.subscribers.add(fn);\n    return () => this.subscribers.delete(fn);\n  }\n  cancel() {\n    this.controller.abort();\n    this.pendingKeysSet.forEach((v, k) => this.pendingKeysSet.delete(k));\n    this.emit(true);\n  }\n  async resolveData(signal) {\n    let aborted = false;\n    if (!this.done) {\n      let onAbort = () => this.cancel();\n      signal.addEventListener(\"abort\", onAbort);\n      aborted = await new Promise(resolve => {\n        this.subscribe(aborted => {\n          signal.removeEventListener(\"abort\", onAbort);\n          if (aborted || this.done) {\n            resolve(aborted);\n          }\n        });\n      });\n    }\n    return aborted;\n  }\n  get done() {\n    return this.pendingKeysSet.size === 0;\n  }\n  get unwrappedData() {\n    invariant(this.data !== null && this.done, \"Can only unwrap data on initialized and settled deferreds\");\n    return Object.entries(this.data).reduce((acc, _ref3) => {\n      let [key, value] = _ref3;\n      return Object.assign(acc, {\n        [key]: unwrapTrackedPromise(value)\n      });\n    }, {});\n  }\n  get pendingKeys() {\n    return Array.from(this.pendingKeysSet);\n  }\n}\nfunction isTrackedPromise(value) {\n  return value instanceof Promise && value._tracked === true;\n}\nfunction unwrapTrackedPromise(value) {\n  if (!isTrackedPromise(value)) {\n    return value;\n  }\n  if (value._error) {\n    throw value._error;\n  }\n  return value._data;\n}\nconst defer = function defer(data, init) {\n  if (init === void 0) {\n    init = {};\n  }\n  let responseInit = typeof init === \"number\" ? {\n    status: init\n  } : init;\n  return new DeferredData(data, responseInit);\n};\n/**\n * A redirect response. Sets the status code and the `Location` header.\n * Defaults to \"302 Found\".\n */\nconst redirect = function redirect(url, init) {\n  if (init === void 0) {\n    init = 302;\n  }\n  let responseInit = init;\n  if (typeof responseInit === \"number\") {\n    responseInit = {\n      status: responseInit\n    };\n  } else if (typeof responseInit.status === \"undefined\") {\n    responseInit.status = 302;\n  }\n  let headers = new Headers(responseInit.headers);\n  headers.set(\"Location\", url);\n  return new Response(null, _extends({}, responseInit, {\n    headers\n  }));\n};\n/**\n * A redirect response that will force a document reload to the new location.\n * Sets the status code and the `Location` header.\n * Defaults to \"302 Found\".\n */\nconst redirectDocument = (url, init) => {\n  let response = redirect(url, init);\n  response.headers.set(\"X-Remix-Reload-Document\", \"true\");\n  return response;\n};\n/**\n * @private\n * Utility class we use to hold auto-unwrapped 4xx/5xx Response bodies\n *\n * We don't export the class for public use since it's an implementation\n * detail, but we export the interface above so folks can build their own\n * abstractions around instances via isRouteErrorResponse()\n */\nclass ErrorResponseImpl {\n  constructor(status, statusText, data, internal) {\n    if (internal === void 0) {\n      internal = false;\n    }\n    this.status = status;\n    this.statusText = statusText || \"\";\n    this.internal = internal;\n    if (data instanceof Error) {\n      this.data = data.toString();\n      this.error = data;\n    } else {\n      this.data = data;\n    }\n  }\n}\n/**\n * Check if the given error is an ErrorResponse generated from a 4xx/5xx\n * Response thrown from an action/loader\n */\nfunction isRouteErrorResponse(error) {\n  return error != null && typeof error.status === \"number\" && typeof error.statusText === \"string\" && typeof error.internal === \"boolean\" && \"data\" in error;\n}\n\nconst validMutationMethodsArr = [\"post\", \"put\", \"patch\", \"delete\"];\nconst validMutationMethods = new Set(validMutationMethodsArr);\nconst validRequestMethodsArr = [\"get\", ...validMutationMethodsArr];\nconst validRequestMethods = new Set(validRequestMethodsArr);\nconst redirectStatusCodes = new Set([301, 302, 303, 307, 308]);\nconst redirectPreserveMethodStatusCodes = new Set([307, 308]);\nconst IDLE_NAVIGATION = {\n  state: \"idle\",\n  location: undefined,\n  formMethod: undefined,\n  formAction: undefined,\n  formEncType: undefined,\n  formData: undefined,\n  json: undefined,\n  text: undefined\n};\nconst IDLE_FETCHER = {\n  state: \"idle\",\n  data: undefined,\n  formMethod: undefined,\n  formAction: undefined,\n  formEncType: undefined,\n  formData: undefined,\n  json: undefined,\n  text: undefined\n};\nconst IDLE_BLOCKER = {\n  state: \"unblocked\",\n  proceed: undefined,\n  reset: undefined,\n  location: undefined\n};\nconst ABSOLUTE_URL_REGEX = /^(?:[a-z][a-z0-9+.-]*:|\\/\\/)/i;\nconst defaultMapRouteProperties = route => ({\n  hasErrorBoundary: Boolean(route.hasErrorBoundary)\n});\nconst TRANSITIONS_STORAGE_KEY = \"remix-router-transitions\";\n//#endregion\n////////////////////////////////////////////////////////////////////////////////\n//#region createRouter\n////////////////////////////////////////////////////////////////////////////////\n/**\n * Create a router and listen to history POP navigations\n */\nfunction createRouter(init) {\n  const routerWindow = init.window ? init.window : typeof window !== \"undefined\" ? window : undefined;\n  const isBrowser = typeof routerWindow !== \"undefined\" && typeof routerWindow.document !== \"undefined\" && typeof routerWindow.document.createElement !== \"undefined\";\n  const isServer = !isBrowser;\n  invariant(init.routes.length > 0, \"You must provide a non-empty routes array to createRouter\");\n  let mapRouteProperties;\n  if (init.mapRouteProperties) {\n    mapRouteProperties = init.mapRouteProperties;\n  } else if (init.detectErrorBoundary) {\n    // If they are still using the deprecated version, wrap it with the new API\n    let detectErrorBoundary = init.detectErrorBoundary;\n    mapRouteProperties = route => ({\n      hasErrorBoundary: detectErrorBoundary(route)\n    });\n  } else {\n    mapRouteProperties = defaultMapRouteProperties;\n  }\n  // Routes keyed by ID\n  let manifest = {};\n  // Routes in tree format for matching\n  let dataRoutes = convertRoutesToDataRoutes(init.routes, mapRouteProperties, undefined, manifest);\n  let inFlightDataRoutes;\n  let basename = init.basename || \"/\";\n  // Config driven behavior flags\n  let future = _extends({\n    v7_fetcherPersist: false,\n    v7_normalizeFormMethod: false,\n    v7_prependBasename: false\n  }, init.future);\n  // Cleanup function for history\n  let unlistenHistory = null;\n  // Externally-provided functions to call on all state changes\n  let subscribers = new Set();\n  // Externally-provided object to hold scroll restoration locations during routing\n  let savedScrollPositions = null;\n  // Externally-provided function to get scroll restoration keys\n  let getScrollRestorationKey = null;\n  // Externally-provided function to get current scroll position\n  let getScrollPosition = null;\n  // One-time flag to control the initial hydration scroll restoration.  Because\n  // we don't get the saved positions from <ScrollRestoration /> until _after_\n  // the initial render, we need to manually trigger a separate updateState to\n  // send along the restoreScrollPosition\n  // Set to true if we have `hydrationData` since we assume we were SSR'd and that\n  // SSR did the initial scroll restoration.\n  let initialScrollRestored = init.hydrationData != null;\n  let initialMatches = matchRoutes(dataRoutes, init.history.location, basename);\n  let initialErrors = null;\n  if (initialMatches == null) {\n    // If we do not match a user-provided-route, fall back to the root\n    // to allow the error boundary to take over\n    let error = getInternalRouterError(404, {\n      pathname: init.history.location.pathname\n    });\n    let {\n      matches,\n      route\n    } = getShortCircuitMatches(dataRoutes);\n    initialMatches = matches;\n    initialErrors = {\n      [route.id]: error\n    };\n  }\n  let initialized =\n  // All initialMatches need to be loaded before we're ready.  If we have lazy\n  // functions around still then we'll need to run them in initialize()\n  !initialMatches.some(m => m.route.lazy) && (\n  // And we have to either have no loaders or have been provided hydrationData\n  !initialMatches.some(m => m.route.loader) || init.hydrationData != null);\n  let router;\n  let state = {\n    historyAction: init.history.action,\n    location: init.history.location,\n    matches: initialMatches,\n    initialized,\n    navigation: IDLE_NAVIGATION,\n    // Don't restore on initial updateState() if we were SSR'd\n    restoreScrollPosition: init.hydrationData != null ? false : null,\n    preventScrollReset: false,\n    revalidation: \"idle\",\n    loaderData: init.hydrationData && init.hydrationData.loaderData || {},\n    actionData: init.hydrationData && init.hydrationData.actionData || null,\n    errors: init.hydrationData && init.hydrationData.errors || initialErrors,\n    fetchers: new Map(),\n    blockers: new Map()\n  };\n  // -- Stateful internal variables to manage navigations --\n  // Current navigation in progress (to be committed in completeNavigation)\n  let pendingAction = Action.Pop;\n  // Should the current navigation prevent the scroll reset if scroll cannot\n  // be restored?\n  let pendingPreventScrollReset = false;\n  // AbortController for the active navigation\n  let pendingNavigationController;\n  // Should the current navigation enable document.startViewTransition?\n  let pendingViewTransitionEnabled = false;\n  // Store applied view transitions so we can apply them on POP\n  let appliedViewTransitions = new Map();\n  // Cleanup function for persisting applied transitions to sessionStorage\n  let removePageHideEventListener = null;\n  // We use this to avoid touching history in completeNavigation if a\n  // revalidation is entirely uninterrupted\n  let isUninterruptedRevalidation = false;\n  // Use this internal flag to force revalidation of all loaders:\n  //  - submissions (completed or interrupted)\n  //  - useRevalidator()\n  //  - X-Remix-Revalidate (from redirect)\n  let isRevalidationRequired = false;\n  // Use this internal array to capture routes that require revalidation due\n  // to a cancelled deferred on action submission\n  let cancelledDeferredRoutes = [];\n  // Use this internal array to capture fetcher loads that were cancelled by an\n  // action navigation and require revalidation\n  let cancelledFetcherLoads = [];\n  // AbortControllers for any in-flight fetchers\n  let fetchControllers = new Map();\n  // Track loads based on the order in which they started\n  let incrementingLoadId = 0;\n  // Track the outstanding pending navigation data load to be compared against\n  // the globally incrementing load when a fetcher load lands after a completed\n  // navigation\n  let pendingNavigationLoadId = -1;\n  // Fetchers that triggered data reloads as a result of their actions\n  let fetchReloadIds = new Map();\n  // Fetchers that triggered redirect navigations\n  let fetchRedirectIds = new Set();\n  // Most recent href/match for fetcher.load calls for fetchers\n  let fetchLoadMatches = new Map();\n  // Ref-count mounted fetchers so we know when it's ok to clean them up\n  let activeFetchers = new Map();\n  // Fetchers that have requested a delete when using v7_fetcherPersist,\n  // they'll be officially removed after they return to idle\n  let deletedFetchers = new Set();\n  // Store DeferredData instances for active route matches.  When a\n  // route loader returns defer() we stick one in here.  Then, when a nested\n  // promise resolves we update loaderData.  If a new navigation starts we\n  // cancel active deferreds for eliminated routes.\n  let activeDeferreds = new Map();\n  // Store blocker functions in a separate Map outside of router state since\n  // we don't need to update UI state if they change\n  let blockerFunctions = new Map();\n  // Flag to ignore the next history update, so we can revert the URL change on\n  // a POP navigation that was blocked by the user without touching router state\n  let ignoreNextHistoryUpdate = false;\n  // Initialize the router, all side effects should be kicked off from here.\n  // Implemented as a Fluent API for ease of:\n  //   let router = createRouter(init).initialize();\n  function initialize() {\n    // If history informs us of a POP navigation, start the navigation but do not update\n    // state.  We'll update our own state once the navigation completes\n    unlistenHistory = init.history.listen(_ref => {\n      let {\n        action: historyAction,\n        location,\n        delta\n      } = _ref;\n      // Ignore this event if it was just us resetting the URL from a\n      // blocked POP navigation\n      if (ignoreNextHistoryUpdate) {\n        ignoreNextHistoryUpdate = false;\n        return;\n      }\n      warning(blockerFunctions.size === 0 || delta != null, \"You are trying to use a blocker on a POP navigation to a location \" + \"that was not created by @remix-run/router. This will fail silently in \" + \"production. This can happen if you are navigating outside the router \" + \"via `window.history.pushState`/`window.location.hash` instead of using \" + \"router navigation APIs.  This can also happen if you are using \" + \"createHashRouter and the user manually changes the URL.\");\n      let blockerKey = shouldBlockNavigation({\n        currentLocation: state.location,\n        nextLocation: location,\n        historyAction\n      });\n      if (blockerKey && delta != null) {\n        // Restore the URL to match the current UI, but don't update router state\n        ignoreNextHistoryUpdate = true;\n        init.history.go(delta * -1);\n        // Put the blocker into a blocked state\n        updateBlocker(blockerKey, {\n          state: \"blocked\",\n          location,\n          proceed() {\n            updateBlocker(blockerKey, {\n              state: \"proceeding\",\n              proceed: undefined,\n              reset: undefined,\n              location\n            });\n            // Re-do the same POP navigation we just blocked\n            init.history.go(delta);\n          },\n          reset() {\n            let blockers = new Map(state.blockers);\n            blockers.set(blockerKey, IDLE_BLOCKER);\n            updateState({\n              blockers\n            });\n          }\n        });\n        return;\n      }\n      return startNavigation(historyAction, location);\n    });\n    if (isBrowser) {\n      // FIXME: This feels gross.  How can we cleanup the lines between\n      // scrollRestoration/appliedTransitions persistance?\n      restoreAppliedTransitions(routerWindow, appliedViewTransitions);\n      let _saveAppliedTransitions = () => persistAppliedTransitions(routerWindow, appliedViewTransitions);\n      routerWindow.addEventListener(\"pagehide\", _saveAppliedTransitions);\n      removePageHideEventListener = () => routerWindow.removeEventListener(\"pagehide\", _saveAppliedTransitions);\n    }\n    // Kick off initial data load if needed.  Use Pop to avoid modifying history\n    // Note we don't do any handling of lazy here.  For SPA's it'll get handled\n    // in the normal navigation flow.  For SSR it's expected that lazy modules are\n    // resolved prior to router creation since we can't go into a fallbackElement\n    // UI for SSR'd apps\n    if (!state.initialized) {\n      startNavigation(Action.Pop, state.location);\n    }\n    return router;\n  }\n  // Clean up a router and it's side effects\n  function dispose() {\n    if (unlistenHistory) {\n      unlistenHistory();\n    }\n    if (removePageHideEventListener) {\n      removePageHideEventListener();\n    }\n    subscribers.clear();\n    pendingNavigationController && pendingNavigationController.abort();\n    state.fetchers.forEach((_, key) => deleteFetcher(key));\n    state.blockers.forEach((_, key) => deleteBlocker(key));\n  }\n  // Subscribe to state updates for the router\n  function subscribe(fn) {\n    subscribers.add(fn);\n    return () => subscribers.delete(fn);\n  }\n  // Update our state and notify the calling context of the change\n  function updateState(newState, opts) {\n    if (opts === void 0) {\n      opts = {};\n    }\n    state = _extends({}, state, newState);\n    // Prep fetcher cleanup so we can tell the UI which fetcher data entries\n    // can be removed\n    let completedFetchers = [];\n    let deletedFetchersKeys = [];\n    if (future.v7_fetcherPersist) {\n      state.fetchers.forEach((fetcher, key) => {\n        if (fetcher.state === \"idle\") {\n          if (deletedFetchers.has(key)) {\n            // Unmounted from the UI and can be totally removed\n            deletedFetchersKeys.push(key);\n          } else {\n            // Returned to idle but still mounted in the UI, so semi-remains for\n            // revalidations and such\n            completedFetchers.push(key);\n          }\n        }\n      });\n    }\n    // Iterate over a local copy so that if flushSync is used and we end up\n    // removing and adding a new subscriber due to the useCallback dependencies,\n    // we don't get ourselves into a loop calling the new subscriber immediately\n    [...subscribers].forEach(subscriber => subscriber(state, {\n      deletedFetchers: deletedFetchersKeys,\n      unstable_viewTransitionOpts: opts.viewTransitionOpts,\n      unstable_flushSync: opts.flushSync === true\n    }));\n    // Remove idle fetchers from state since we only care about in-flight fetchers.\n    if (future.v7_fetcherPersist) {\n      completedFetchers.forEach(key => state.fetchers.delete(key));\n      deletedFetchersKeys.forEach(key => deleteFetcher(key));\n    }\n  }\n  // Complete a navigation returning the state.navigation back to the IDLE_NAVIGATION\n  // and setting state.[historyAction/location/matches] to the new route.\n  // - Location is a required param\n  // - Navigation will always be set to IDLE_NAVIGATION\n  // - Can pass any other state in newState\n  function completeNavigation(location, newState, _temp) {\n    var _location$state, _location$state2;\n    let {\n      flushSync\n    } = _temp === void 0 ? {} : _temp;\n    // Deduce if we're in a loading/actionReload state:\n    // - We have committed actionData in the store\n    // - The current navigation was a mutation submission\n    // - We're past the submitting state and into the loading state\n    // - The location being loaded is not the result of a redirect\n    let isActionReload = state.actionData != null && state.navigation.formMethod != null && isMutationMethod(state.navigation.formMethod) && state.navigation.state === \"loading\" && ((_location$state = location.state) == null ? void 0 : _location$state._isRedirect) !== true;\n    let actionData;\n    if (newState.actionData) {\n      if (Object.keys(newState.actionData).length > 0) {\n        actionData = newState.actionData;\n      } else {\n        // Empty actionData -> clear prior actionData due to an action error\n        actionData = null;\n      }\n    } else if (isActionReload) {\n      // Keep the current data if we're wrapping up the action reload\n      actionData = state.actionData;\n    } else {\n      // Clear actionData on any other completed navigations\n      actionData = null;\n    }\n    // Always preserve any existing loaderData from re-used routes\n    let loaderData = newState.loaderData ? mergeLoaderData(state.loaderData, newState.loaderData, newState.matches || [], newState.errors) : state.loaderData;\n    // On a successful navigation we can assume we got through all blockers\n    // so we can start fresh\n    let blockers = state.blockers;\n    if (blockers.size > 0) {\n      blockers = new Map(blockers);\n      blockers.forEach((_, k) => blockers.set(k, IDLE_BLOCKER));\n    }\n    // Always respect the user flag.  Otherwise don't reset on mutation\n    // submission navigations unless they redirect\n    let preventScrollReset = pendingPreventScrollReset === true || state.navigation.formMethod != null && isMutationMethod(state.navigation.formMethod) && ((_location$state2 = location.state) == null ? void 0 : _location$state2._isRedirect) !== true;\n    if (inFlightDataRoutes) {\n      dataRoutes = inFlightDataRoutes;\n      inFlightDataRoutes = undefined;\n    }\n    if (isUninterruptedRevalidation) ; else if (pendingAction === Action.Pop) ; else if (pendingAction === Action.Push) {\n      init.history.push(location, location.state);\n    } else if (pendingAction === Action.Replace) {\n      init.history.replace(location, location.state);\n    }\n    let viewTransitionOpts;\n    // On POP, enable transitions if they were enabled on the original navigation\n    if (pendingAction === Action.Pop) {\n      // Forward takes precedence so they behave like the original navigation\n      let priorPaths = appliedViewTransitions.get(state.location.pathname);\n      if (priorPaths && priorPaths.has(location.pathname)) {\n        viewTransitionOpts = {\n          currentLocation: state.location,\n          nextLocation: location\n        };\n      } else if (appliedViewTransitions.has(location.pathname)) {\n        // If we don't have a previous forward nav, assume we're popping back to\n        // the new location and enable if that location previously enabled\n        viewTransitionOpts = {\n          currentLocation: location,\n          nextLocation: state.location\n        };\n      }\n    } else if (pendingViewTransitionEnabled) {\n      // Store the applied transition on PUSH/REPLACE\n      let toPaths = appliedViewTransitions.get(state.location.pathname);\n      if (toPaths) {\n        toPaths.add(location.pathname);\n      } else {\n        toPaths = new Set([location.pathname]);\n        appliedViewTransitions.set(state.location.pathname, toPaths);\n      }\n      viewTransitionOpts = {\n        currentLocation: state.location,\n        nextLocation: location\n      };\n    }\n    updateState(_extends({}, newState, {\n      actionData,\n      loaderData,\n      historyAction: pendingAction,\n      location,\n      initialized: true,\n      navigation: IDLE_NAVIGATION,\n      revalidation: \"idle\",\n      restoreScrollPosition: getSavedScrollPosition(location, newState.matches || state.matches),\n      preventScrollReset,\n      blockers\n    }), {\n      viewTransitionOpts,\n      flushSync: flushSync === true\n    });\n    // Reset stateful navigation vars\n    pendingAction = Action.Pop;\n    pendingPreventScrollReset = false;\n    pendingViewTransitionEnabled = false;\n    isUninterruptedRevalidation = false;\n    isRevalidationRequired = false;\n    cancelledDeferredRoutes = [];\n    cancelledFetcherLoads = [];\n  }\n  // Trigger a navigation event, which can either be a numerical POP or a PUSH\n  // replace with an optional submission\n  async function navigate(to, opts) {\n    if (typeof to === \"number\") {\n      init.history.go(to);\n      return;\n    }\n    let normalizedPath = normalizeTo(state.location, state.matches, basename, future.v7_prependBasename, to, opts == null ? void 0 : opts.fromRouteId, opts == null ? void 0 : opts.relative);\n    let {\n      path,\n      submission,\n      error\n    } = normalizeNavigateOptions(future.v7_normalizeFormMethod, false, normalizedPath, opts);\n    let currentLocation = state.location;\n    let nextLocation = createLocation(state.location, path, opts && opts.state);\n    // When using navigate as a PUSH/REPLACE we aren't reading an already-encoded\n    // URL from window.location, so we need to encode it here so the behavior\n    // remains the same as POP and non-data-router usages.  new URL() does all\n    // the same encoding we'd get from a history.pushState/window.location read\n    // without having to touch history\n    nextLocation = _extends({}, nextLocation, init.history.encodeLocation(nextLocation));\n    let userReplace = opts && opts.replace != null ? opts.replace : undefined;\n    let historyAction = Action.Push;\n    if (userReplace === true) {\n      historyAction = Action.Replace;\n    } else if (userReplace === false) ; else if (submission != null && isMutationMethod(submission.formMethod) && submission.formAction === state.location.pathname + state.location.search) {\n      // By default on submissions to the current location we REPLACE so that\n      // users don't have to double-click the back button to get to the prior\n      // location.  If the user redirects to a different location from the\n      // action/loader this will be ignored and the redirect will be a PUSH\n      historyAction = Action.Replace;\n    }\n    let preventScrollReset = opts && \"preventScrollReset\" in opts ? opts.preventScrollReset === true : undefined;\n    let flushSync = (opts && opts.unstable_flushSync) === true;\n    let blockerKey = shouldBlockNavigation({\n      currentLocation,\n      nextLocation,\n      historyAction\n    });\n    if (blockerKey) {\n      // Put the blocker into a blocked state\n      updateBlocker(blockerKey, {\n        state: \"blocked\",\n        location: nextLocation,\n        proceed() {\n          updateBlocker(blockerKey, {\n            state: \"proceeding\",\n            proceed: undefined,\n            reset: undefined,\n            location: nextLocation\n          });\n          // Send the same navigation through\n          navigate(to, opts);\n        },\n        reset() {\n          let blockers = new Map(state.blockers);\n          blockers.set(blockerKey, IDLE_BLOCKER);\n          updateState({\n            blockers\n          });\n        }\n      });\n      return;\n    }\n    return await startNavigation(historyAction, nextLocation, {\n      submission,\n      // Send through the formData serialization error if we have one so we can\n      // render at the right error boundary after we match routes\n      pendingError: error,\n      preventScrollReset,\n      replace: opts && opts.replace,\n      enableViewTransition: opts && opts.unstable_viewTransition,\n      flushSync\n    });\n  }\n  // Revalidate all current loaders.  If a navigation is in progress or if this\n  // is interrupted by a navigation, allow this to \"succeed\" by calling all\n  // loaders during the next loader round\n  function revalidate() {\n    interruptActiveLoads();\n    updateState({\n      revalidation: \"loading\"\n    });\n    // If we're currently submitting an action, we don't need to start a new\n    // navigation, we'll just let the follow up loader execution call all loaders\n    if (state.navigation.state === \"submitting\") {\n      return;\n    }\n    // If we're currently in an idle state, start a new navigation for the current\n    // action/location and mark it as uninterrupted, which will skip the history\n    // update in completeNavigation\n    if (state.navigation.state === \"idle\") {\n      startNavigation(state.historyAction, state.location, {\n        startUninterruptedRevalidation: true\n      });\n      return;\n    }\n    // Otherwise, if we're currently in a loading state, just start a new\n    // navigation to the navigation.location but do not trigger an uninterrupted\n    // revalidation so that history correctly updates once the navigation completes\n    startNavigation(pendingAction || state.historyAction, state.navigation.location, {\n      overrideNavigation: state.navigation\n    });\n  }\n  // Start a navigation to the given action/location.  Can optionally provide a\n  // overrideNavigation which will override the normalLoad in the case of a redirect\n  // navigation\n  async function startNavigation(historyAction, location, opts) {\n    // Abort any in-progress navigations and start a new one. Unset any ongoing\n    // uninterrupted revalidations unless told otherwise, since we want this\n    // new navigation to update history normally\n    pendingNavigationController && pendingNavigationController.abort();\n    pendingNavigationController = null;\n    pendingAction = historyAction;\n    isUninterruptedRevalidation = (opts && opts.startUninterruptedRevalidation) === true;\n    // Save the current scroll position every time we start a new navigation,\n    // and track whether we should reset scroll on completion\n    saveScrollPosition(state.location, state.matches);\n    pendingPreventScrollReset = (opts && opts.preventScrollReset) === true;\n    pendingViewTransitionEnabled = (opts && opts.enableViewTransition) === true;\n    let routesToUse = inFlightDataRoutes || dataRoutes;\n    let loadingNavigation = opts && opts.overrideNavigation;\n    let matches = matchRoutes(routesToUse, location, basename);\n    let flushSync = (opts && opts.flushSync) === true;\n    // Short circuit with a 404 on the root error boundary if we match nothing\n    if (!matches) {\n      let error = getInternalRouterError(404, {\n        pathname: location.pathname\n      });\n      let {\n        matches: notFoundMatches,\n        route\n      } = getShortCircuitMatches(routesToUse);\n      // Cancel all pending deferred on 404s since we don't keep any routes\n      cancelActiveDeferreds();\n      completeNavigation(location, {\n        matches: notFoundMatches,\n        loaderData: {},\n        errors: {\n          [route.id]: error\n        }\n      }, {\n        flushSync\n      });\n      return;\n    }\n    // Short circuit if it's only a hash change and not a revalidation or\n    // mutation submission.\n    //\n    // Ignore on initial page loads because since the initial load will always\n    // be \"same hash\".  For example, on /page#hash and submit a <Form method=\"post\">\n    // which will default to a navigation to /page\n    if (state.initialized && !isRevalidationRequired && isHashChangeOnly(state.location, location) && !(opts && opts.submission && isMutationMethod(opts.submission.formMethod))) {\n      completeNavigation(location, {\n        matches\n      }, {\n        flushSync\n      });\n      return;\n    }\n    // Create a controller/Request for this navigation\n    pendingNavigationController = new AbortController();\n    let request = createClientSideRequest(init.history, location, pendingNavigationController.signal, opts && opts.submission);\n    let pendingActionData;\n    let pendingError;\n    if (opts && opts.pendingError) {\n      // If we have a pendingError, it means the user attempted a GET submission\n      // with binary FormData so assign here and skip to handleLoaders.  That\n      // way we handle calling loaders above the boundary etc.  It's not really\n      // different from an actionError in that sense.\n      pendingError = {\n        [findNearestBoundary(matches).route.id]: opts.pendingError\n      };\n    } else if (opts && opts.submission && isMutationMethod(opts.submission.formMethod)) {\n      // Call action if we received an action submission\n      let actionOutput = await handleAction(request, location, opts.submission, matches, {\n        replace: opts.replace,\n        flushSync\n      });\n      if (actionOutput.shortCircuited) {\n        return;\n      }\n      pendingActionData = actionOutput.pendingActionData;\n      pendingError = actionOutput.pendingActionError;\n      loadingNavigation = getLoadingNavigation(location, opts.submission);\n      flushSync = false;\n      // Create a GET request for the loaders\n      request = new Request(request.url, {\n        signal: request.signal\n      });\n    }\n    // Call loaders\n    let {\n      shortCircuited,\n      loaderData,\n      errors\n    } = await handleLoaders(request, location, matches, loadingNavigation, opts && opts.submission, opts && opts.fetcherSubmission, opts && opts.replace, flushSync, pendingActionData, pendingError);\n    if (shortCircuited) {\n      return;\n    }\n    // Clean up now that the action/loaders have completed.  Don't clean up if\n    // we short circuited because pendingNavigationController will have already\n    // been assigned to a new controller for the next navigation\n    pendingNavigationController = null;\n    completeNavigation(location, _extends({\n      matches\n    }, pendingActionData ? {\n      actionData: pendingActionData\n    } : {}, {\n      loaderData,\n      errors\n    }));\n  }\n  // Call the action matched by the leaf route for this navigation and handle\n  // redirects/errors\n  async function handleAction(request, location, submission, matches, opts) {\n    if (opts === void 0) {\n      opts = {};\n    }\n    interruptActiveLoads();\n    // Put us in a submitting state\n    let navigation = getSubmittingNavigation(location, submission);\n    updateState({\n      navigation\n    }, {\n      flushSync: opts.flushSync === true\n    });\n    // Call our action and get the result\n    let result;\n    let actionMatch = getTargetMatch(matches, location);\n    if (!actionMatch.route.action && !actionMatch.route.lazy) {\n      result = {\n        type: ResultType.error,\n        error: getInternalRouterError(405, {\n          method: request.method,\n          pathname: location.pathname,\n          routeId: actionMatch.route.id\n        })\n      };\n    } else {\n      result = await callLoaderOrAction(\"action\", request, actionMatch, matches, manifest, mapRouteProperties, basename);\n      if (request.signal.aborted) {\n        return {\n          shortCircuited: true\n        };\n      }\n    }\n    if (isRedirectResult(result)) {\n      let replace;\n      if (opts && opts.replace != null) {\n        replace = opts.replace;\n      } else {\n        // If the user didn't explicity indicate replace behavior, replace if\n        // we redirected to the exact same location we're currently at to avoid\n        // double back-buttons\n        replace = result.location === state.location.pathname + state.location.search;\n      }\n      await startRedirectNavigation(state, result, {\n        submission,\n        replace\n      });\n      return {\n        shortCircuited: true\n      };\n    }\n    if (isErrorResult(result)) {\n      // Store off the pending error - we use it to determine which loaders\n      // to call and will commit it when we complete the navigation\n      let boundaryMatch = findNearestBoundary(matches, actionMatch.route.id);\n      // By default, all submissions are REPLACE navigations, but if the\n      // action threw an error that'll be rendered in an errorElement, we fall\n      // back to PUSH so that the user can use the back button to get back to\n      // the pre-submission form location to try again\n      if ((opts && opts.replace) !== true) {\n        pendingAction = Action.Push;\n      }\n      return {\n        // Send back an empty object we can use to clear out any prior actionData\n        pendingActionData: {},\n        pendingActionError: {\n          [boundaryMatch.route.id]: result.error\n        }\n      };\n    }\n    if (isDeferredResult(result)) {\n      throw getInternalRouterError(400, {\n        type: \"defer-action\"\n      });\n    }\n    return {\n      pendingActionData: {\n        [actionMatch.route.id]: result.data\n      }\n    };\n  }\n  // Call all applicable loaders for the given matches, handling redirects,\n  // errors, etc.\n  async function handleLoaders(request, location, matches, overrideNavigation, submission, fetcherSubmission, replace, flushSync, pendingActionData, pendingError) {\n    // Figure out the right navigation we want to use for data loading\n    let loadingNavigation = overrideNavigation || getLoadingNavigation(location, submission);\n    // If this was a redirect from an action we don't have a \"submission\" but\n    // we have it on the loading navigation so use that if available\n    let activeSubmission = submission || fetcherSubmission || getSubmissionFromNavigation(loadingNavigation);\n    let routesToUse = inFlightDataRoutes || dataRoutes;\n    let [matchesToLoad, revalidatingFetchers] = getMatchesToLoad(init.history, state, matches, activeSubmission, location, isRevalidationRequired, cancelledDeferredRoutes, cancelledFetcherLoads, deletedFetchers, fetchLoadMatches, fetchRedirectIds, routesToUse, basename, pendingActionData, pendingError);\n    // Cancel pending deferreds for no-longer-matched routes or routes we're\n    // about to reload.  Note that if this is an action reload we would have\n    // already cancelled all pending deferreds so this would be a no-op\n    cancelActiveDeferreds(routeId => !(matches && matches.some(m => m.route.id === routeId)) || matchesToLoad && matchesToLoad.some(m => m.route.id === routeId));\n    pendingNavigationLoadId = ++incrementingLoadId;\n    // Short circuit if we have no loaders to run\n    if (matchesToLoad.length === 0 && revalidatingFetchers.length === 0) {\n      let updatedFetchers = markFetchRedirectsDone();\n      completeNavigation(location, _extends({\n        matches,\n        loaderData: {},\n        // Commit pending error if we're short circuiting\n        errors: pendingError || null\n      }, pendingActionData ? {\n        actionData: pendingActionData\n      } : {}, updatedFetchers ? {\n        fetchers: new Map(state.fetchers)\n      } : {}), {\n        flushSync\n      });\n      return {\n        shortCircuited: true\n      };\n    }\n    // If this is an uninterrupted revalidation, we remain in our current idle\n    // state.  If not, we need to switch to our loading state and load data,\n    // preserving any new action data or existing action data (in the case of\n    // a revalidation interrupting an actionReload)\n    if (!isUninterruptedRevalidation) {\n      revalidatingFetchers.forEach(rf => {\n        let fetcher = state.fetchers.get(rf.key);\n        let revalidatingFetcher = getLoadingFetcher(undefined, fetcher ? fetcher.data : undefined);\n        state.fetchers.set(rf.key, revalidatingFetcher);\n      });\n      let actionData = pendingActionData || state.actionData;\n      updateState(_extends({\n        navigation: loadingNavigation\n      }, actionData ? Object.keys(actionData).length === 0 ? {\n        actionData: null\n      } : {\n        actionData\n      } : {}, revalidatingFetchers.length > 0 ? {\n        fetchers: new Map(state.fetchers)\n      } : {}), {\n        flushSync\n      });\n    }\n    revalidatingFetchers.forEach(rf => {\n      if (fetchControllers.has(rf.key)) {\n        abortFetcher(rf.key);\n      }\n      if (rf.controller) {\n        // Fetchers use an independent AbortController so that aborting a fetcher\n        // (via deleteFetcher) does not abort the triggering navigation that\n        // triggered the revalidation\n        fetchControllers.set(rf.key, rf.controller);\n      }\n    });\n    // Proxy navigation abort through to revalidation fetchers\n    let abortPendingFetchRevalidations = () => revalidatingFetchers.forEach(f => abortFetcher(f.key));\n    if (pendingNavigationController) {\n      pendingNavigationController.signal.addEventListener(\"abort\", abortPendingFetchRevalidations);\n    }\n    let {\n      results,\n      loaderResults,\n      fetcherResults\n    } = await callLoadersAndMaybeResolveData(state.matches, matches, matchesToLoad, revalidatingFetchers, request);\n    if (request.signal.aborted) {\n      return {\n        shortCircuited: true\n      };\n    }\n    // Clean up _after_ loaders have completed.  Don't clean up if we short\n    // circuited because fetchControllers would have been aborted and\n    // reassigned to new controllers for the next navigation\n    if (pendingNavigationController) {\n      pendingNavigationController.signal.removeEventListener(\"abort\", abortPendingFetchRevalidations);\n    }\n    revalidatingFetchers.forEach(rf => fetchControllers.delete(rf.key));\n    // If any loaders returned a redirect Response, start a new REPLACE navigation\n    let redirect = findRedirect(results);\n    if (redirect) {\n      if (redirect.idx >= matchesToLoad.length) {\n        // If this redirect came from a fetcher make sure we mark it in\n        // fetchRedirectIds so it doesn't get revalidated on the next set of\n        // loader executions\n        let fetcherKey = revalidatingFetchers[redirect.idx - matchesToLoad.length].key;\n        fetchRedirectIds.add(fetcherKey);\n      }\n      await startRedirectNavigation(state, redirect.result, {\n        replace\n      });\n      return {\n        shortCircuited: true\n      };\n    }\n    // Process and commit output from loaders\n    let {\n      loaderData,\n      errors\n    } = processLoaderData(state, matches, matchesToLoad, loaderResults, pendingError, revalidatingFetchers, fetcherResults, activeDeferreds);\n    // Wire up subscribers to update loaderData as promises settle\n    activeDeferreds.forEach((deferredData, routeId) => {\n      deferredData.subscribe(aborted => {\n        // Note: No need to updateState here since the TrackedPromise on\n        // loaderData is stable across resolve/reject\n        // Remove this instance if we were aborted or if promises have settled\n        if (aborted || deferredData.done) {\n          activeDeferreds.delete(routeId);\n        }\n      });\n    });\n    let updatedFetchers = markFetchRedirectsDone();\n    let didAbortFetchLoads = abortStaleFetchLoads(pendingNavigationLoadId);\n    let shouldUpdateFetchers = updatedFetchers || didAbortFetchLoads || revalidatingFetchers.length > 0;\n    return _extends({\n      loaderData,\n      errors\n    }, shouldUpdateFetchers ? {\n      fetchers: new Map(state.fetchers)\n    } : {});\n  }\n  // Trigger a fetcher load/submit for the given fetcher key\n  function fetch(key, routeId, href, opts) {\n    if (isServer) {\n      throw new Error(\"router.fetch() was called during the server render, but it shouldn't be. \" + \"You are likely calling a useFetcher() method in the body of your component. \" + \"Try moving it to a useEffect or a callback.\");\n    }\n    if (fetchControllers.has(key)) abortFetcher(key);\n    let flushSync = (opts && opts.unstable_flushSync) === true;\n    let routesToUse = inFlightDataRoutes || dataRoutes;\n    let normalizedPath = normalizeTo(state.location, state.matches, basename, future.v7_prependBasename, href, routeId, opts == null ? void 0 : opts.relative);\n    let matches = matchRoutes(routesToUse, normalizedPath, basename);\n    if (!matches) {\n      setFetcherError(key, routeId, getInternalRouterError(404, {\n        pathname: normalizedPath\n      }), {\n        flushSync\n      });\n      return;\n    }\n    let {\n      path,\n      submission,\n      error\n    } = normalizeNavigateOptions(future.v7_normalizeFormMethod, true, normalizedPath, opts);\n    if (error) {\n      setFetcherError(key, routeId, error, {\n        flushSync\n      });\n      return;\n    }\n    let match = getTargetMatch(matches, path);\n    pendingPreventScrollReset = (opts && opts.preventScrollReset) === true;\n    if (submission && isMutationMethod(submission.formMethod)) {\n      handleFetcherAction(key, routeId, path, match, matches, flushSync, submission);\n      return;\n    }\n    // Store off the match so we can call it's shouldRevalidate on subsequent\n    // revalidations\n    fetchLoadMatches.set(key, {\n      routeId,\n      path\n    });\n    handleFetcherLoader(key, routeId, path, match, matches, flushSync, submission);\n  }\n  // Call the action for the matched fetcher.submit(), and then handle redirects,\n  // errors, and revalidation\n  async function handleFetcherAction(key, routeId, path, match, requestMatches, flushSync, submission) {\n    interruptActiveLoads();\n    fetchLoadMatches.delete(key);\n    if (!match.route.action && !match.route.lazy) {\n      let error = getInternalRouterError(405, {\n        method: submission.formMethod,\n        pathname: path,\n        routeId: routeId\n      });\n      setFetcherError(key, routeId, error, {\n        flushSync\n      });\n      return;\n    }\n    // Put this fetcher into it's submitting state\n    let existingFetcher = state.fetchers.get(key);\n    updateFetcherState(key, getSubmittingFetcher(submission, existingFetcher), {\n      flushSync\n    });\n    // Call the action for the fetcher\n    let abortController = new AbortController();\n    let fetchRequest = createClientSideRequest(init.history, path, abortController.signal, submission);\n    fetchControllers.set(key, abortController);\n    let originatingLoadId = incrementingLoadId;\n    let actionResult = await callLoaderOrAction(\"action\", fetchRequest, match, requestMatches, manifest, mapRouteProperties, basename);\n    if (fetchRequest.signal.aborted) {\n      // We can delete this so long as we weren't aborted by our own fetcher\n      // re-submit which would have put _new_ controller is in fetchControllers\n      if (fetchControllers.get(key) === abortController) {\n        fetchControllers.delete(key);\n      }\n      return;\n    }\n    if (deletedFetchers.has(key)) {\n      updateFetcherState(key, getDoneFetcher(undefined));\n      return;\n    }\n    if (isRedirectResult(actionResult)) {\n      fetchControllers.delete(key);\n      if (pendingNavigationLoadId > originatingLoadId) {\n        // A new navigation was kicked off after our action started, so that\n        // should take precedence over this redirect navigation.  We already\n        // set isRevalidationRequired so all loaders for the new route should\n        // fire unless opted out via shouldRevalidate\n        updateFetcherState(key, getDoneFetcher(undefined));\n        return;\n      } else {\n        fetchRedirectIds.add(key);\n        updateFetcherState(key, getLoadingFetcher(submission));\n        return startRedirectNavigation(state, actionResult, {\n          fetcherSubmission: submission\n        });\n      }\n    }\n    // Process any non-redirect errors thrown\n    if (isErrorResult(actionResult)) {\n      setFetcherError(key, routeId, actionResult.error);\n      return;\n    }\n    if (isDeferredResult(actionResult)) {\n      throw getInternalRouterError(400, {\n        type: \"defer-action\"\n      });\n    }\n    // Start the data load for current matches, or the next location if we're\n    // in the middle of a navigation\n    let nextLocation = state.navigation.location || state.location;\n    let revalidationRequest = createClientSideRequest(init.history, nextLocation, abortController.signal);\n    let routesToUse = inFlightDataRoutes || dataRoutes;\n    let matches = state.navigation.state !== \"idle\" ? matchRoutes(routesToUse, state.navigation.location, basename) : state.matches;\n    invariant(matches, \"Didn't find any matches after fetcher action\");\n    let loadId = ++incrementingLoadId;\n    fetchReloadIds.set(key, loadId);\n    let loadFetcher = getLoadingFetcher(submission, actionResult.data);\n    state.fetchers.set(key, loadFetcher);\n    let [matchesToLoad, revalidatingFetchers] = getMatchesToLoad(init.history, state, matches, submission, nextLocation, isRevalidationRequired, cancelledDeferredRoutes, cancelledFetcherLoads, deletedFetchers, fetchLoadMatches, fetchRedirectIds, routesToUse, basename, {\n      [match.route.id]: actionResult.data\n    }, undefined // No need to send through errors since we short circuit above\n    );\n    // Put all revalidating fetchers into the loading state, except for the\n    // current fetcher which we want to keep in it's current loading state which\n    // contains it's action submission info + action data\n    revalidatingFetchers.filter(rf => rf.key !== key).forEach(rf => {\n      let staleKey = rf.key;\n      let existingFetcher = state.fetchers.get(staleKey);\n      let revalidatingFetcher = getLoadingFetcher(undefined, existingFetcher ? existingFetcher.data : undefined);\n      state.fetchers.set(staleKey, revalidatingFetcher);\n      if (fetchControllers.has(staleKey)) {\n        abortFetcher(staleKey);\n      }\n      if (rf.controller) {\n        fetchControllers.set(staleKey, rf.controller);\n      }\n    });\n    updateState({\n      fetchers: new Map(state.fetchers)\n    });\n    let abortPendingFetchRevalidations = () => revalidatingFetchers.forEach(rf => abortFetcher(rf.key));\n    abortController.signal.addEventListener(\"abort\", abortPendingFetchRevalidations);\n    let {\n      results,\n      loaderResults,\n      fetcherResults\n    } = await callLoadersAndMaybeResolveData(state.matches, matches, matchesToLoad, revalidatingFetchers, revalidationRequest);\n    if (abortController.signal.aborted) {\n      return;\n    }\n    abortController.signal.removeEventListener(\"abort\", abortPendingFetchRevalidations);\n    fetchReloadIds.delete(key);\n    fetchControllers.delete(key);\n    revalidatingFetchers.forEach(r => fetchControllers.delete(r.key));\n    let redirect = findRedirect(results);\n    if (redirect) {\n      if (redirect.idx >= matchesToLoad.length) {\n        // If this redirect came from a fetcher make sure we mark it in\n        // fetchRedirectIds so it doesn't get revalidated on the next set of\n        // loader executions\n        let fetcherKey = revalidatingFetchers[redirect.idx - matchesToLoad.length].key;\n        fetchRedirectIds.add(fetcherKey);\n      }\n      return startRedirectNavigation(state, redirect.result);\n    }\n    // Process and commit output from loaders\n    let {\n      loaderData,\n      errors\n    } = processLoaderData(state, state.matches, matchesToLoad, loaderResults, undefined, revalidatingFetchers, fetcherResults, activeDeferreds);\n    // Since we let revalidations complete even if the submitting fetcher was\n    // deleted, only put it back to idle if it hasn't been deleted\n    if (state.fetchers.has(key)) {\n      let doneFetcher = getDoneFetcher(actionResult.data);\n      state.fetchers.set(key, doneFetcher);\n    }\n    abortStaleFetchLoads(loadId);\n    // If we are currently in a navigation loading state and this fetcher is\n    // more recent than the navigation, we want the newer data so abort the\n    // navigation and complete it with the fetcher data\n    if (state.navigation.state === \"loading\" && loadId > pendingNavigationLoadId) {\n      invariant(pendingAction, \"Expected pending action\");\n      pendingNavigationController && pendingNavigationController.abort();\n      completeNavigation(state.navigation.location, {\n        matches,\n        loaderData,\n        errors,\n        fetchers: new Map(state.fetchers)\n      });\n    } else {\n      // otherwise just update with the fetcher data, preserving any existing\n      // loaderData for loaders that did not need to reload.  We have to\n      // manually merge here since we aren't going through completeNavigation\n      updateState({\n        errors,\n        loaderData: mergeLoaderData(state.loaderData, loaderData, matches, errors),\n        fetchers: new Map(state.fetchers)\n      });\n      isRevalidationRequired = false;\n    }\n  }\n  // Call the matched loader for fetcher.load(), handling redirects, errors, etc.\n  async function handleFetcherLoader(key, routeId, path, match, matches, flushSync, submission) {\n    let existingFetcher = state.fetchers.get(key);\n    updateFetcherState(key, getLoadingFetcher(submission, existingFetcher ? existingFetcher.data : undefined), {\n      flushSync\n    });\n    // Call the loader for this fetcher route match\n    let abortController = new AbortController();\n    let fetchRequest = createClientSideRequest(init.history, path, abortController.signal);\n    fetchControllers.set(key, abortController);\n    let originatingLoadId = incrementingLoadId;\n    let result = await callLoaderOrAction(\"loader\", fetchRequest, match, matches, manifest, mapRouteProperties, basename);\n    // Deferred isn't supported for fetcher loads, await everything and treat it\n    // as a normal load.  resolveDeferredData will return undefined if this\n    // fetcher gets aborted, so we just leave result untouched and short circuit\n    // below if that happens\n    if (isDeferredResult(result)) {\n      result = (await resolveDeferredData(result, fetchRequest.signal, true)) || result;\n    }\n    // We can delete this so long as we weren't aborted by our our own fetcher\n    // re-load which would have put _new_ controller is in fetchControllers\n    if (fetchControllers.get(key) === abortController) {\n      fetchControllers.delete(key);\n    }\n    if (fetchRequest.signal.aborted) {\n      return;\n    }\n    if (deletedFetchers.has(key)) {\n      updateFetcherState(key, getDoneFetcher(undefined));\n      return;\n    }\n    // If the loader threw a redirect Response, start a new REPLACE navigation\n    if (isRedirectResult(result)) {\n      if (pendingNavigationLoadId > originatingLoadId) {\n        // A new navigation was kicked off after our loader started, so that\n        // should take precedence over this redirect navigation\n        updateFetcherState(key, getDoneFetcher(undefined));\n        return;\n      } else {\n        fetchRedirectIds.add(key);\n        await startRedirectNavigation(state, result);\n        return;\n      }\n    }\n    // Process any non-redirect errors thrown\n    if (isErrorResult(result)) {\n      setFetcherError(key, routeId, result.error);\n      return;\n    }\n    invariant(!isDeferredResult(result), \"Unhandled fetcher deferred data\");\n    // Put the fetcher back into an idle state\n    updateFetcherState(key, getDoneFetcher(result.data));\n  }\n  /**\n   * Utility function to handle redirects returned from an action or loader.\n   * Normally, a redirect \"replaces\" the navigation that triggered it.  So, for\n   * example:\n   *\n   *  - user is on /a\n   *  - user clicks a link to /b\n   *  - loader for /b redirects to /c\n   *\n   * In a non-JS app the browser would track the in-flight navigation to /b and\n   * then replace it with /c when it encountered the redirect response.  In\n   * the end it would only ever update the URL bar with /c.\n   *\n   * In client-side routing using pushState/replaceState, we aim to emulate\n   * this behavior and we also do not update history until the end of the\n   * navigation (including processed redirects).  This means that we never\n   * actually touch history until we've processed redirects, so we just use\n   * the history action from the original navigation (PUSH or REPLACE).\n   */\n  async function startRedirectNavigation(state, redirect, _temp2) {\n    let {\n      submission,\n      fetcherSubmission,\n      replace\n    } = _temp2 === void 0 ? {} : _temp2;\n    if (redirect.revalidate) {\n      isRevalidationRequired = true;\n    }\n    let redirectLocation = createLocation(state.location, redirect.location, {\n      _isRedirect: true\n    });\n    invariant(redirectLocation, \"Expected a location on the redirect navigation\");\n    if (isBrowser) {\n      let isDocumentReload = false;\n      if (redirect.reloadDocument) {\n        // Hard reload if the response contained X-Remix-Reload-Document\n        isDocumentReload = true;\n      } else if (ABSOLUTE_URL_REGEX.test(redirect.location)) {\n        const url = init.history.createURL(redirect.location);\n        isDocumentReload =\n        // Hard reload if it's an absolute URL to a new origin\n        url.origin !== routerWindow.location.origin ||\n        // Hard reload if it's an absolute URL that does not match our basename\n        stripBasename(url.pathname, basename) == null;\n      }\n      if (isDocumentReload) {\n        if (replace) {\n          routerWindow.location.replace(redirect.location);\n        } else {\n          routerWindow.location.assign(redirect.location);\n        }\n        return;\n      }\n    }\n    // There's no need to abort on redirects, since we don't detect the\n    // redirect until the action/loaders have settled\n    pendingNavigationController = null;\n    let redirectHistoryAction = replace === true ? Action.Replace : Action.Push;\n    // Use the incoming submission if provided, fallback on the active one in\n    // state.navigation\n    let {\n      formMethod,\n      formAction,\n      formEncType\n    } = state.navigation;\n    if (!submission && !fetcherSubmission && formMethod && formAction && formEncType) {\n      submission = getSubmissionFromNavigation(state.navigation);\n    }\n    // If this was a 307/308 submission we want to preserve the HTTP method and\n    // re-submit the GET/POST/PUT/PATCH/DELETE as a submission navigation to the\n    // redirected location\n    let activeSubmission = submission || fetcherSubmission;\n    if (redirectPreserveMethodStatusCodes.has(redirect.status) && activeSubmission && isMutationMethod(activeSubmission.formMethod)) {\n      await startNavigation(redirectHistoryAction, redirectLocation, {\n        submission: _extends({}, activeSubmission, {\n          formAction: redirect.location\n        }),\n        // Preserve this flag across redirects\n        preventScrollReset: pendingPreventScrollReset\n      });\n    } else {\n      // If we have a navigation submission, we will preserve it through the\n      // redirect navigation\n      let overrideNavigation = getLoadingNavigation(redirectLocation, submission);\n      await startNavigation(redirectHistoryAction, redirectLocation, {\n        overrideNavigation,\n        // Send fetcher submissions through for shouldRevalidate\n        fetcherSubmission,\n        // Preserve this flag across redirects\n        preventScrollReset: pendingPreventScrollReset\n      });\n    }\n  }\n  async function callLoadersAndMaybeResolveData(currentMatches, matches, matchesToLoad, fetchersToLoad, request) {\n    // Call all navigation loaders and revalidating fetcher loaders in parallel,\n    // then slice off the results into separate arrays so we can handle them\n    // accordingly\n    let results = await Promise.all([...matchesToLoad.map(match => callLoaderOrAction(\"loader\", request, match, matches, manifest, mapRouteProperties, basename)), ...fetchersToLoad.map(f => {\n      if (f.matches && f.match && f.controller) {\n        return callLoaderOrAction(\"loader\", createClientSideRequest(init.history, f.path, f.controller.signal), f.match, f.matches, manifest, mapRouteProperties, basename);\n      } else {\n        let error = {\n          type: ResultType.error,\n          error: getInternalRouterError(404, {\n            pathname: f.path\n          })\n        };\n        return error;\n      }\n    })]);\n    let loaderResults = results.slice(0, matchesToLoad.length);\n    let fetcherResults = results.slice(matchesToLoad.length);\n    await Promise.all([resolveDeferredResults(currentMatches, matchesToLoad, loaderResults, loaderResults.map(() => request.signal), false, state.loaderData), resolveDeferredResults(currentMatches, fetchersToLoad.map(f => f.match), fetcherResults, fetchersToLoad.map(f => f.controller ? f.controller.signal : null), true)]);\n    return {\n      results,\n      loaderResults,\n      fetcherResults\n    };\n  }\n  function interruptActiveLoads() {\n    // Every interruption triggers a revalidation\n    isRevalidationRequired = true;\n    // Cancel pending route-level deferreds and mark cancelled routes for\n    // revalidation\n    cancelledDeferredRoutes.push(...cancelActiveDeferreds());\n    // Abort in-flight fetcher loads\n    fetchLoadMatches.forEach((_, key) => {\n      if (fetchControllers.has(key)) {\n        cancelledFetcherLoads.push(key);\n        abortFetcher(key);\n      }\n    });\n  }\n  function updateFetcherState(key, fetcher, opts) {\n    if (opts === void 0) {\n      opts = {};\n    }\n    state.fetchers.set(key, fetcher);\n    updateState({\n      fetchers: new Map(state.fetchers)\n    }, {\n      flushSync: (opts && opts.flushSync) === true\n    });\n  }\n  function setFetcherError(key, routeId, error, opts) {\n    if (opts === void 0) {\n      opts = {};\n    }\n    let boundaryMatch = findNearestBoundary(state.matches, routeId);\n    deleteFetcher(key);\n    updateState({\n      errors: {\n        [boundaryMatch.route.id]: error\n      },\n      fetchers: new Map(state.fetchers)\n    }, {\n      flushSync: (opts && opts.flushSync) === true\n    });\n  }\n  function getFetcher(key) {\n    if (future.v7_fetcherPersist) {\n      activeFetchers.set(key, (activeFetchers.get(key) || 0) + 1);\n      // If this fetcher was previously marked for deletion, unmark it since we\n      // have a new instance\n      if (deletedFetchers.has(key)) {\n        deletedFetchers.delete(key);\n      }\n    }\n    return state.fetchers.get(key) || IDLE_FETCHER;\n  }\n  function deleteFetcher(key) {\n    let fetcher = state.fetchers.get(key);\n    // Don't abort the controller if this is a deletion of a fetcher.submit()\n    // in it's loading phase since - we don't want to abort the corresponding\n    // revalidation and want them to complete and land\n    if (fetchControllers.has(key) && !(fetcher && fetcher.state === \"loading\" && fetchReloadIds.has(key))) {\n      abortFetcher(key);\n    }\n    fetchLoadMatches.delete(key);\n    fetchReloadIds.delete(key);\n    fetchRedirectIds.delete(key);\n    deletedFetchers.delete(key);\n    state.fetchers.delete(key);\n  }\n  function deleteFetcherAndUpdateState(key) {\n    if (future.v7_fetcherPersist) {\n      let count = (activeFetchers.get(key) || 0) - 1;\n      if (count <= 0) {\n        activeFetchers.delete(key);\n        deletedFetchers.add(key);\n      } else {\n        activeFetchers.set(key, count);\n      }\n    } else {\n      deleteFetcher(key);\n    }\n    updateState({\n      fetchers: new Map(state.fetchers)\n    });\n  }\n  function abortFetcher(key) {\n    let controller = fetchControllers.get(key);\n    invariant(controller, \"Expected fetch controller: \" + key);\n    controller.abort();\n    fetchControllers.delete(key);\n  }\n  function markFetchersDone(keys) {\n    for (let key of keys) {\n      let fetcher = getFetcher(key);\n      let doneFetcher = getDoneFetcher(fetcher.data);\n      state.fetchers.set(key, doneFetcher);\n    }\n  }\n  function markFetchRedirectsDone() {\n    let doneKeys = [];\n    let updatedFetchers = false;\n    for (let key of fetchRedirectIds) {\n      let fetcher = state.fetchers.get(key);\n      invariant(fetcher, \"Expected fetcher: \" + key);\n      if (fetcher.state === \"loading\") {\n        fetchRedirectIds.delete(key);\n        doneKeys.push(key);\n        updatedFetchers = true;\n      }\n    }\n    markFetchersDone(doneKeys);\n    return updatedFetchers;\n  }\n  function abortStaleFetchLoads(landedId) {\n    let yeetedKeys = [];\n    for (let [key, id] of fetchReloadIds) {\n      if (id < landedId) {\n        let fetcher = state.fetchers.get(key);\n        invariant(fetcher, \"Expected fetcher: \" + key);\n        if (fetcher.state === \"loading\") {\n          abortFetcher(key);\n          fetchReloadIds.delete(key);\n          yeetedKeys.push(key);\n        }\n      }\n    }\n    markFetchersDone(yeetedKeys);\n    return yeetedKeys.length > 0;\n  }\n  function getBlocker(key, fn) {\n    let blocker = state.blockers.get(key) || IDLE_BLOCKER;\n    if (blockerFunctions.get(key) !== fn) {\n      blockerFunctions.set(key, fn);\n    }\n    return blocker;\n  }\n  function deleteBlocker(key) {\n    state.blockers.delete(key);\n    blockerFunctions.delete(key);\n  }\n  // Utility function to update blockers, ensuring valid state transitions\n  function updateBlocker(key, newBlocker) {\n    let blocker = state.blockers.get(key) || IDLE_BLOCKER;\n    // Poor mans state machine :)\n    // https://mermaid.live/edit#pako:eNqVkc9OwzAMxl8l8nnjAYrEtDIOHEBIgwvKJTReGy3_lDpIqO27k6awMG0XcrLlnz87nwdonESogKXXBuE79rq75XZO3-yHds0RJVuv70YrPlUrCEe2HfrORS3rubqZfuhtpg5C9wk5tZ4VKcRUq88q9Z8RS0-48cE1iHJkL0ugbHuFLus9L6spZy8nX9MP2CNdomVaposqu3fGayT8T8-jJQwhepo_UtpgBQaDEUom04dZhAN1aJBDlUKJBxE1ceB2Smj0Mln-IBW5AFU2dwUiktt_2Qaq2dBfaKdEup85UV7Yd-dKjlnkabl2Pvr0DTkTreM\n    invariant(blocker.state === \"unblocked\" && newBlocker.state === \"blocked\" || blocker.state === \"blocked\" && newBlocker.state === \"blocked\" || blocker.state === \"blocked\" && newBlocker.state === \"proceeding\" || blocker.state === \"blocked\" && newBlocker.state === \"unblocked\" || blocker.state === \"proceeding\" && newBlocker.state === \"unblocked\", \"Invalid blocker state transition: \" + blocker.state + \" -> \" + newBlocker.state);\n    let blockers = new Map(state.blockers);\n    blockers.set(key, newBlocker);\n    updateState({\n      blockers\n    });\n  }\n  function shouldBlockNavigation(_ref2) {\n    let {\n      currentLocation,\n      nextLocation,\n      historyAction\n    } = _ref2;\n    if (blockerFunctions.size === 0) {\n      return;\n    }\n    // We ony support a single active blocker at the moment since we don't have\n    // any compelling use cases for multi-blocker yet\n    if (blockerFunctions.size > 1) {\n      warning(false, \"A router only supports one blocker at a time\");\n    }\n    let entries = Array.from(blockerFunctions.entries());\n    let [blockerKey, blockerFunction] = entries[entries.length - 1];\n    let blocker = state.blockers.get(blockerKey);\n    if (blocker && blocker.state === \"proceeding\") {\n      // If the blocker is currently proceeding, we don't need to re-check\n      // it and can let this navigation continue\n      return;\n    }\n    // At this point, we know we're unblocked/blocked so we need to check the\n    // user-provided blocker function\n    if (blockerFunction({\n      currentLocation,\n      nextLocation,\n      historyAction\n    })) {\n      return blockerKey;\n    }\n  }\n  function cancelActiveDeferreds(predicate) {\n    let cancelledRouteIds = [];\n    activeDeferreds.forEach((dfd, routeId) => {\n      if (!predicate || predicate(routeId)) {\n        // Cancel the deferred - but do not remove from activeDeferreds here -\n        // we rely on the subscribers to do that so our tests can assert proper\n        // cleanup via _internalActiveDeferreds\n        dfd.cancel();\n        cancelledRouteIds.push(routeId);\n        activeDeferreds.delete(routeId);\n      }\n    });\n    return cancelledRouteIds;\n  }\n  // Opt in to capturing and reporting scroll positions during navigations,\n  // used by the <ScrollRestoration> component\n  function enableScrollRestoration(positions, getPosition, getKey) {\n    savedScrollPositions = positions;\n    getScrollPosition = getPosition;\n    getScrollRestorationKey = getKey || null;\n    // Perform initial hydration scroll restoration, since we miss the boat on\n    // the initial updateState() because we've not yet rendered <ScrollRestoration/>\n    // and therefore have no savedScrollPositions available\n    if (!initialScrollRestored && state.navigation === IDLE_NAVIGATION) {\n      initialScrollRestored = true;\n      let y = getSavedScrollPosition(state.location, state.matches);\n      if (y != null) {\n        updateState({\n          restoreScrollPosition: y\n        });\n      }\n    }\n    return () => {\n      savedScrollPositions = null;\n      getScrollPosition = null;\n      getScrollRestorationKey = null;\n    };\n  }\n  function getScrollKey(location, matches) {\n    if (getScrollRestorationKey) {\n      let key = getScrollRestorationKey(location, matches.map(m => convertRouteMatchToUiMatch(m, state.loaderData)));\n      return key || location.key;\n    }\n    return location.key;\n  }\n  function saveScrollPosition(location, matches) {\n    if (savedScrollPositions && getScrollPosition) {\n      let key = getScrollKey(location, matches);\n      savedScrollPositions[key] = getScrollPosition();\n    }\n  }\n  function getSavedScrollPosition(location, matches) {\n    if (savedScrollPositions) {\n      let key = getScrollKey(location, matches);\n      let y = savedScrollPositions[key];\n      if (typeof y === \"number\") {\n        return y;\n      }\n    }\n    return null;\n  }\n  function _internalSetRoutes(newRoutes) {\n    manifest = {};\n    inFlightDataRoutes = convertRoutesToDataRoutes(newRoutes, mapRouteProperties, undefined, manifest);\n  }\n  router = {\n    get basename() {\n      return basename;\n    },\n    get state() {\n      return state;\n    },\n    get routes() {\n      return dataRoutes;\n    },\n    get window() {\n      return routerWindow;\n    },\n    initialize,\n    subscribe,\n    enableScrollRestoration,\n    navigate,\n    fetch,\n    revalidate,\n    // Passthrough to history-aware createHref used by useHref so we get proper\n    // hash-aware URLs in DOM paths\n    createHref: to => init.history.createHref(to),\n    encodeLocation: to => init.history.encodeLocation(to),\n    getFetcher,\n    deleteFetcher: deleteFetcherAndUpdateState,\n    dispose,\n    getBlocker,\n    deleteBlocker,\n    _internalFetchControllers: fetchControllers,\n    _internalActiveDeferreds: activeDeferreds,\n    // TODO: Remove setRoutes, it's temporary to avoid dealing with\n    // updating the tree while validating the update algorithm.\n    _internalSetRoutes\n  };\n  return router;\n}\n//#endregion\n////////////////////////////////////////////////////////////////////////////////\n//#region createStaticHandler\n////////////////////////////////////////////////////////////////////////////////\nconst UNSAFE_DEFERRED_SYMBOL = Symbol(\"deferred\");\nfunction createStaticHandler(routes, opts) {\n  invariant(routes.length > 0, \"You must provide a non-empty routes array to createStaticHandler\");\n  let manifest = {};\n  let basename = (opts ? opts.basename : null) || \"/\";\n  let mapRouteProperties;\n  if (opts != null && opts.mapRouteProperties) {\n    mapRouteProperties = opts.mapRouteProperties;\n  } else if (opts != null && opts.detectErrorBoundary) {\n    // If they are still using the deprecated version, wrap it with the new API\n    let detectErrorBoundary = opts.detectErrorBoundary;\n    mapRouteProperties = route => ({\n      hasErrorBoundary: detectErrorBoundary(route)\n    });\n  } else {\n    mapRouteProperties = defaultMapRouteProperties;\n  }\n  let dataRoutes = convertRoutesToDataRoutes(routes, mapRouteProperties, undefined, manifest);\n  /**\n   * The query() method is intended for document requests, in which we want to\n   * call an optional action and potentially multiple loaders for all nested\n   * routes.  It returns a StaticHandlerContext object, which is very similar\n   * to the router state (location, loaderData, actionData, errors, etc.) and\n   * also adds SSR-specific information such as the statusCode and headers\n   * from action/loaders Responses.\n   *\n   * It _should_ never throw and should report all errors through the\n   * returned context.errors object, properly associating errors to their error\n   * boundary.  Additionally, it tracks _deepestRenderedBoundaryId which can be\n   * used to emulate React error boundaries during SSr by performing a second\n   * pass only down to the boundaryId.\n   *\n   * The one exception where we do not return a StaticHandlerContext is when a\n   * redirect response is returned or thrown from any action/loader.  We\n   * propagate that out and return the raw Response so the HTTP server can\n   * return it directly.\n   */\n  async function query(request, _temp3) {\n    let {\n      requestContext\n    } = _temp3 === void 0 ? {} : _temp3;\n    let url = new URL(request.url);\n    let method = request.method;\n    let location = createLocation(\"\", createPath(url), null, \"default\");\n    let matches = matchRoutes(dataRoutes, location, basename);\n    // SSR supports HEAD requests while SPA doesn't\n    if (!isValidMethod(method) && method !== \"HEAD\") {\n      let error = getInternalRouterError(405, {\n        method\n      });\n      let {\n        matches: methodNotAllowedMatches,\n        route\n      } = getShortCircuitMatches(dataRoutes);\n      return {\n        basename,\n        location,\n        matches: methodNotAllowedMatches,\n        loaderData: {},\n        actionData: null,\n        errors: {\n          [route.id]: error\n        },\n        statusCode: error.status,\n        loaderHeaders: {},\n        actionHeaders: {},\n        activeDeferreds: null\n      };\n    } else if (!matches) {\n      let error = getInternalRouterError(404, {\n        pathname: location.pathname\n      });\n      let {\n        matches: notFoundMatches,\n        route\n      } = getShortCircuitMatches(dataRoutes);\n      return {\n        basename,\n        location,\n        matches: notFoundMatches,\n        loaderData: {},\n        actionData: null,\n        errors: {\n          [route.id]: error\n        },\n        statusCode: error.status,\n        loaderHeaders: {},\n        actionHeaders: {},\n        activeDeferreds: null\n      };\n    }\n    let result = await queryImpl(request, location, matches, requestContext);\n    if (isResponse(result)) {\n      return result;\n    }\n    // When returning StaticHandlerContext, we patch back in the location here\n    // since we need it for React Context.  But this helps keep our submit and\n    // loadRouteData operating on a Request instead of a Location\n    return _extends({\n      location,\n      basename\n    }, result);\n  }\n  /**\n   * The queryRoute() method is intended for targeted route requests, either\n   * for fetch ?_data requests or resource route requests.  In this case, we\n   * are only ever calling a single action or loader, and we are returning the\n   * returned value directly.  In most cases, this will be a Response returned\n   * from the action/loader, but it may be a primitive or other value as well -\n   * and in such cases the calling context should handle that accordingly.\n   *\n   * We do respect the throw/return differentiation, so if an action/loader\n   * throws, then this method will throw the value.  This is important so we\n   * can do proper boundary identification in Remix where a thrown Response\n   * must go to the Catch Boundary but a returned Response is happy-path.\n   *\n   * One thing to note is that any Router-initiated Errors that make sense\n   * to associate with a status code will be thrown as an ErrorResponse\n   * instance which include the raw Error, such that the calling context can\n   * serialize the error as they see fit while including the proper response\n   * code.  Examples here are 404 and 405 errors that occur prior to reaching\n   * any user-defined loaders.\n   */\n  async function queryRoute(request, _temp4) {\n    let {\n      routeId,\n      requestContext\n    } = _temp4 === void 0 ? {} : _temp4;\n    let url = new URL(request.url);\n    let method = request.method;\n    let location = createLocation(\"\", createPath(url), null, \"default\");\n    let matches = matchRoutes(dataRoutes, location, basename);\n    // SSR supports HEAD requests while SPA doesn't\n    if (!isValidMethod(method) && method !== \"HEAD\" && method !== \"OPTIONS\") {\n      throw getInternalRouterError(405, {\n        method\n      });\n    } else if (!matches) {\n      throw getInternalRouterError(404, {\n        pathname: location.pathname\n      });\n    }\n    let match = routeId ? matches.find(m => m.route.id === routeId) : getTargetMatch(matches, location);\n    if (routeId && !match) {\n      throw getInternalRouterError(403, {\n        pathname: location.pathname,\n        routeId\n      });\n    } else if (!match) {\n      // This should never hit I don't think?\n      throw getInternalRouterError(404, {\n        pathname: location.pathname\n      });\n    }\n    let result = await queryImpl(request, location, matches, requestContext, match);\n    if (isResponse(result)) {\n      return result;\n    }\n    let error = result.errors ? Object.values(result.errors)[0] : undefined;\n    if (error !== undefined) {\n      // If we got back result.errors, that means the loader/action threw\n      // _something_ that wasn't a Response, but it's not guaranteed/required\n      // to be an `instanceof Error` either, so we have to use throw here to\n      // preserve the \"error\" state outside of queryImpl.\n      throw error;\n    }\n    // Pick off the right state value to return\n    if (result.actionData) {\n      return Object.values(result.actionData)[0];\n    }\n    if (result.loaderData) {\n      var _result$activeDeferre;\n      let data = Object.values(result.loaderData)[0];\n      if ((_result$activeDeferre = result.activeDeferreds) != null && _result$activeDeferre[match.route.id]) {\n        data[UNSAFE_DEFERRED_SYMBOL] = result.activeDeferreds[match.route.id];\n      }\n      return data;\n    }\n    return undefined;\n  }\n  async function queryImpl(request, location, matches, requestContext, routeMatch) {\n    invariant(request.signal, \"query()/queryRoute() requests must contain an AbortController signal\");\n    try {\n      if (isMutationMethod(request.method.toLowerCase())) {\n        let result = await submit(request, matches, routeMatch || getTargetMatch(matches, location), requestContext, routeMatch != null);\n        return result;\n      }\n      let result = await loadRouteData(request, matches, requestContext, routeMatch);\n      return isResponse(result) ? result : _extends({}, result, {\n        actionData: null,\n        actionHeaders: {}\n      });\n    } catch (e) {\n      // If the user threw/returned a Response in callLoaderOrAction, we throw\n      // it to bail out and then return or throw here based on whether the user\n      // returned or threw\n      if (isQueryRouteResponse(e)) {\n        if (e.type === ResultType.error) {\n          throw e.response;\n        }\n        return e.response;\n      }\n      // Redirects are always returned since they don't propagate to catch\n      // boundaries\n      if (isRedirectResponse(e)) {\n        return e;\n      }\n      throw e;\n    }\n  }\n  async function submit(request, matches, actionMatch, requestContext, isRouteRequest) {\n    let result;\n    if (!actionMatch.route.action && !actionMatch.route.lazy) {\n      let error = getInternalRouterError(405, {\n        method: request.method,\n        pathname: new URL(request.url).pathname,\n        routeId: actionMatch.route.id\n      });\n      if (isRouteRequest) {\n        throw error;\n      }\n      result = {\n        type: ResultType.error,\n        error\n      };\n    } else {\n      result = await callLoaderOrAction(\"action\", request, actionMatch, matches, manifest, mapRouteProperties, basename, {\n        isStaticRequest: true,\n        isRouteRequest,\n        requestContext\n      });\n      if (request.signal.aborted) {\n        let method = isRouteRequest ? \"queryRoute\" : \"query\";\n        throw new Error(method + \"() call aborted: \" + request.method + \" \" + request.url);\n      }\n    }\n    if (isRedirectResult(result)) {\n      // Uhhhh - this should never happen, we should always throw these from\n      // callLoaderOrAction, but the type narrowing here keeps TS happy and we\n      // can get back on the \"throw all redirect responses\" train here should\n      // this ever happen :/\n      throw new Response(null, {\n        status: result.status,\n        headers: {\n          Location: result.location\n        }\n      });\n    }\n    if (isDeferredResult(result)) {\n      let error = getInternalRouterError(400, {\n        type: \"defer-action\"\n      });\n      if (isRouteRequest) {\n        throw error;\n      }\n      result = {\n        type: ResultType.error,\n        error\n      };\n    }\n    if (isRouteRequest) {\n      // Note: This should only be non-Response values if we get here, since\n      // isRouteRequest should throw any Response received in callLoaderOrAction\n      if (isErrorResult(result)) {\n        throw result.error;\n      }\n      return {\n        matches: [actionMatch],\n        loaderData: {},\n        actionData: {\n          [actionMatch.route.id]: result.data\n        },\n        errors: null,\n        // Note: statusCode + headers are unused here since queryRoute will\n        // return the raw Response or value\n        statusCode: 200,\n        loaderHeaders: {},\n        actionHeaders: {},\n        activeDeferreds: null\n      };\n    }\n    if (isErrorResult(result)) {\n      // Store off the pending error - we use it to determine which loaders\n      // to call and will commit it when we complete the navigation\n      let boundaryMatch = findNearestBoundary(matches, actionMatch.route.id);\n      let context = await loadRouteData(request, matches, requestContext, undefined, {\n        [boundaryMatch.route.id]: result.error\n      });\n      // action status codes take precedence over loader status codes\n      return _extends({}, context, {\n        statusCode: isRouteErrorResponse(result.error) ? result.error.status : 500,\n        actionData: null,\n        actionHeaders: _extends({}, result.headers ? {\n          [actionMatch.route.id]: result.headers\n        } : {})\n      });\n    }\n    // Create a GET request for the loaders\n    let loaderRequest = new Request(request.url, {\n      headers: request.headers,\n      redirect: request.redirect,\n      signal: request.signal\n    });\n    let context = await loadRouteData(loaderRequest, matches, requestContext);\n    return _extends({}, context, result.statusCode ? {\n      statusCode: result.statusCode\n    } : {}, {\n      actionData: {\n        [actionMatch.route.id]: result.data\n      },\n      actionHeaders: _extends({}, result.headers ? {\n        [actionMatch.route.id]: result.headers\n      } : {})\n    });\n  }\n  async function loadRouteData(request, matches, requestContext, routeMatch, pendingActionError) {\n    let isRouteRequest = routeMatch != null;\n    // Short circuit if we have no loaders to run (queryRoute())\n    if (isRouteRequest && !(routeMatch != null && routeMatch.route.loader) && !(routeMatch != null && routeMatch.route.lazy)) {\n      throw getInternalRouterError(400, {\n        method: request.method,\n        pathname: new URL(request.url).pathname,\n        routeId: routeMatch == null ? void 0 : routeMatch.route.id\n      });\n    }\n    let requestMatches = routeMatch ? [routeMatch] : getLoaderMatchesUntilBoundary(matches, Object.keys(pendingActionError || {})[0]);\n    let matchesToLoad = requestMatches.filter(m => m.route.loader || m.route.lazy);\n    // Short circuit if we have no loaders to run (query())\n    if (matchesToLoad.length === 0) {\n      return {\n        matches,\n        // Add a null for all matched routes for proper revalidation on the client\n        loaderData: matches.reduce((acc, m) => Object.assign(acc, {\n          [m.route.id]: null\n        }), {}),\n        errors: pendingActionError || null,\n        statusCode: 200,\n        loaderHeaders: {},\n        activeDeferreds: null\n      };\n    }\n    let results = await Promise.all([...matchesToLoad.map(match => callLoaderOrAction(\"loader\", request, match, matches, manifest, mapRouteProperties, basename, {\n      isStaticRequest: true,\n      isRouteRequest,\n      requestContext\n    }))]);\n    if (request.signal.aborted) {\n      let method = isRouteRequest ? \"queryRoute\" : \"query\";\n      throw new Error(method + \"() call aborted: \" + request.method + \" \" + request.url);\n    }\n    // Process and commit output from loaders\n    let activeDeferreds = new Map();\n    let context = processRouteLoaderData(matches, matchesToLoad, results, pendingActionError, activeDeferreds);\n    // Add a null for any non-loader matches for proper revalidation on the client\n    let executedLoaders = new Set(matchesToLoad.map(match => match.route.id));\n    matches.forEach(match => {\n      if (!executedLoaders.has(match.route.id)) {\n        context.loaderData[match.route.id] = null;\n      }\n    });\n    return _extends({}, context, {\n      matches,\n      activeDeferreds: activeDeferreds.size > 0 ? Object.fromEntries(activeDeferreds.entries()) : null\n    });\n  }\n  return {\n    dataRoutes,\n    query,\n    queryRoute\n  };\n}\n//#endregion\n////////////////////////////////////////////////////////////////////////////////\n//#region Helpers\n////////////////////////////////////////////////////////////////////////////////\n/**\n * Given an existing StaticHandlerContext and an error thrown at render time,\n * provide an updated StaticHandlerContext suitable for a second SSR render\n */\nfunction getStaticContextFromError(routes, context, error) {\n  let newContext = _extends({}, context, {\n    statusCode: 500,\n    errors: {\n      [context._deepestRenderedBoundaryId || routes[0].id]: error\n    }\n  });\n  return newContext;\n}\nfunction isSubmissionNavigation(opts) {\n  return opts != null && (\"formData\" in opts && opts.formData != null || \"body\" in opts && opts.body !== undefined);\n}\nfunction normalizeTo(location, matches, basename, prependBasename, to, fromRouteId, relative) {\n  let contextualMatches;\n  let activeRouteMatch;\n  if (fromRouteId) {\n    // Grab matches up to the calling route so our route-relative logic is\n    // relative to the correct source route\n    contextualMatches = [];\n    for (let match of matches) {\n      contextualMatches.push(match);\n      if (match.route.id === fromRouteId) {\n        activeRouteMatch = match;\n        break;\n      }\n    }\n  } else {\n    contextualMatches = matches;\n    activeRouteMatch = matches[matches.length - 1];\n  }\n  // Resolve the relative path\n  let path = resolveTo(to ? to : \".\", getResolveToMatches(contextualMatches), stripBasename(location.pathname, basename) || location.pathname, relative === \"path\");\n  // When `to` is not specified we inherit search/hash from the current\n  // location, unlike when to=\".\" and we just inherit the path.\n  // See https://github.com/remix-run/remix/issues/927\n  if (to == null) {\n    path.search = location.search;\n    path.hash = location.hash;\n  }\n  // Add an ?index param for matched index routes if we don't already have one\n  if ((to == null || to === \"\" || to === \".\") && activeRouteMatch && activeRouteMatch.route.index && !hasNakedIndexQuery(path.search)) {\n    path.search = path.search ? path.search.replace(/^\\?/, \"?index&\") : \"?index\";\n  }\n  // If we're operating within a basename, prepend it to the pathname.  If\n  // this is a root navigation, then just use the raw basename which allows\n  // the basename to have full control over the presence of a trailing slash\n  // on root actions\n  if (prependBasename && basename !== \"/\") {\n    path.pathname = path.pathname === \"/\" ? basename : joinPaths([basename, path.pathname]);\n  }\n  return createPath(path);\n}\n// Normalize navigation options by converting formMethod=GET formData objects to\n// URLSearchParams so they behave identically to links with query params\nfunction normalizeNavigateOptions(normalizeFormMethod, isFetcher, path, opts) {\n  // Return location verbatim on non-submission navigations\n  if (!opts || !isSubmissionNavigation(opts)) {\n    return {\n      path\n    };\n  }\n  if (opts.formMethod && !isValidMethod(opts.formMethod)) {\n    return {\n      path,\n      error: getInternalRouterError(405, {\n        method: opts.formMethod\n      })\n    };\n  }\n  let getInvalidBodyError = () => ({\n    path,\n    error: getInternalRouterError(400, {\n      type: \"invalid-body\"\n    })\n  });\n  // Create a Submission on non-GET navigations\n  let rawFormMethod = opts.formMethod || \"get\";\n  let formMethod = normalizeFormMethod ? rawFormMethod.toUpperCase() : rawFormMethod.toLowerCase();\n  let formAction = stripHashFromPath(path);\n  if (opts.body !== undefined) {\n    if (opts.formEncType === \"text/plain\") {\n      // text only support POST/PUT/PATCH/DELETE submissions\n      if (!isMutationMethod(formMethod)) {\n        return getInvalidBodyError();\n      }\n      let text = typeof opts.body === \"string\" ? opts.body : opts.body instanceof FormData || opts.body instanceof URLSearchParams ?\n      // https://html.spec.whatwg.org/multipage/form-control-infrastructure.html#plain-text-form-data\n      Array.from(opts.body.entries()).reduce((acc, _ref3) => {\n        let [name, value] = _ref3;\n        return \"\" + acc + name + \"=\" + value + \"\\n\";\n      }, \"\") : String(opts.body);\n      return {\n        path,\n        submission: {\n          formMethod,\n          formAction,\n          formEncType: opts.formEncType,\n          formData: undefined,\n          json: undefined,\n          text\n        }\n      };\n    } else if (opts.formEncType === \"application/json\") {\n      // json only supports POST/PUT/PATCH/DELETE submissions\n      if (!isMutationMethod(formMethod)) {\n        return getInvalidBodyError();\n      }\n      try {\n        let json = typeof opts.body === \"string\" ? JSON.parse(opts.body) : opts.body;\n        return {\n          path,\n          submission: {\n            formMethod,\n            formAction,\n            formEncType: opts.formEncType,\n            formData: undefined,\n            json,\n            text: undefined\n          }\n        };\n      } catch (e) {\n        return getInvalidBodyError();\n      }\n    }\n  }\n  invariant(typeof FormData === \"function\", \"FormData is not available in this environment\");\n  let searchParams;\n  let formData;\n  if (opts.formData) {\n    searchParams = convertFormDataToSearchParams(opts.formData);\n    formData = opts.formData;\n  } else if (opts.body instanceof FormData) {\n    searchParams = convertFormDataToSearchParams(opts.body);\n    formData = opts.body;\n  } else if (opts.body instanceof URLSearchParams) {\n    searchParams = opts.body;\n    formData = convertSearchParamsToFormData(searchParams);\n  } else if (opts.body == null) {\n    searchParams = new URLSearchParams();\n    formData = new FormData();\n  } else {\n    try {\n      searchParams = new URLSearchParams(opts.body);\n      formData = convertSearchParamsToFormData(searchParams);\n    } catch (e) {\n      return getInvalidBodyError();\n    }\n  }\n  let submission = {\n    formMethod,\n    formAction,\n    formEncType: opts && opts.formEncType || \"application/x-www-form-urlencoded\",\n    formData,\n    json: undefined,\n    text: undefined\n  };\n  if (isMutationMethod(submission.formMethod)) {\n    return {\n      path,\n      submission\n    };\n  }\n  // Flatten submission onto URLSearchParams for GET submissions\n  let parsedPath = parsePath(path);\n  // On GET navigation submissions we can drop the ?index param from the\n  // resulting location since all loaders will run.  But fetcher GET submissions\n  // only run a single loader so we need to preserve any incoming ?index params\n  if (isFetcher && parsedPath.search && hasNakedIndexQuery(parsedPath.search)) {\n    searchParams.append(\"index\", \"\");\n  }\n  parsedPath.search = \"?\" + searchParams;\n  return {\n    path: createPath(parsedPath),\n    submission\n  };\n}\n// Filter out all routes below any caught error as they aren't going to\n// render so we don't need to load them\nfunction getLoaderMatchesUntilBoundary(matches, boundaryId) {\n  let boundaryMatches = matches;\n  if (boundaryId) {\n    let index = matches.findIndex(m => m.route.id === boundaryId);\n    if (index >= 0) {\n      boundaryMatches = matches.slice(0, index);\n    }\n  }\n  return boundaryMatches;\n}\nfunction getMatchesToLoad(history, state, matches, submission, location, isRevalidationRequired, cancelledDeferredRoutes, cancelledFetcherLoads, deletedFetchers, fetchLoadMatches, fetchRedirectIds, routesToUse, basename, pendingActionData, pendingError) {\n  let actionResult = pendingError ? Object.values(pendingError)[0] : pendingActionData ? Object.values(pendingActionData)[0] : undefined;\n  let currentUrl = history.createURL(state.location);\n  let nextUrl = history.createURL(location);\n  // Pick navigation matches that are net-new or qualify for revalidation\n  let boundaryId = pendingError ? Object.keys(pendingError)[0] : undefined;\n  let boundaryMatches = getLoaderMatchesUntilBoundary(matches, boundaryId);\n  let navigationMatches = boundaryMatches.filter((match, index) => {\n    if (match.route.lazy) {\n      // We haven't loaded this route yet so we don't know if it's got a loader!\n      return true;\n    }\n    if (match.route.loader == null) {\n      return false;\n    }\n    // Always call the loader on new route instances and pending defer cancellations\n    if (isNewLoader(state.loaderData, state.matches[index], match) || cancelledDeferredRoutes.some(id => id === match.route.id)) {\n      return true;\n    }\n    // This is the default implementation for when we revalidate.  If the route\n    // provides it's own implementation, then we give them full control but\n    // provide this value so they can leverage it if needed after they check\n    // their own specific use cases\n    let currentRouteMatch = state.matches[index];\n    let nextRouteMatch = match;\n    return shouldRevalidateLoader(match, _extends({\n      currentUrl,\n      currentParams: currentRouteMatch.params,\n      nextUrl,\n      nextParams: nextRouteMatch.params\n    }, submission, {\n      actionResult,\n      defaultShouldRevalidate:\n      // Forced revalidation due to submission, useRevalidator, or X-Remix-Revalidate\n      isRevalidationRequired ||\n      // Clicked the same link, resubmitted a GET form\n      currentUrl.pathname + currentUrl.search === nextUrl.pathname + nextUrl.search ||\n      // Search params affect all loaders\n      currentUrl.search !== nextUrl.search || isNewRouteInstance(currentRouteMatch, nextRouteMatch)\n    }));\n  });\n  // Pick fetcher.loads that need to be revalidated\n  let revalidatingFetchers = [];\n  fetchLoadMatches.forEach((f, key) => {\n    // Don't revalidate if fetcher won't be present in the subsequent render\n    if (!matches.some(m => m.route.id === f.routeId) || deletedFetchers.has(key)) {\n      return;\n    }\n    let fetcherMatches = matchRoutes(routesToUse, f.path, basename);\n    // If the fetcher path no longer matches, push it in with null matches so\n    // we can trigger a 404 in callLoadersAndMaybeResolveData.  Note this is\n    // currently only a use-case for Remix HMR where the route tree can change\n    // at runtime and remove a route previously loaded via a fetcher\n    if (!fetcherMatches) {\n      revalidatingFetchers.push({\n        key,\n        routeId: f.routeId,\n        path: f.path,\n        matches: null,\n        match: null,\n        controller: null\n      });\n      return;\n    }\n    // Revalidating fetchers are decoupled from the route matches since they\n    // load from a static href.  They revalidate based on explicit revalidation\n    // (submission, useRevalidator, or X-Remix-Revalidate)\n    let fetcher = state.fetchers.get(key);\n    let fetcherMatch = getTargetMatch(fetcherMatches, f.path);\n    let shouldRevalidate = false;\n    if (fetchRedirectIds.has(key)) {\n      // Never trigger a revalidation of an actively redirecting fetcher\n      shouldRevalidate = false;\n    } else if (cancelledFetcherLoads.includes(key)) {\n      // Always revalidate if the fetcher was cancelled\n      shouldRevalidate = true;\n    } else if (fetcher && fetcher.state !== \"idle\" && fetcher.data === undefined) {\n      // If the fetcher hasn't ever completed loading yet, then this isn't a\n      // revalidation, it would just be a brand new load if an explicit\n      // revalidation is required\n      shouldRevalidate = isRevalidationRequired;\n    } else {\n      // Otherwise fall back on any user-defined shouldRevalidate, defaulting\n      // to explicit revalidations only\n      shouldRevalidate = shouldRevalidateLoader(fetcherMatch, _extends({\n        currentUrl,\n        currentParams: state.matches[state.matches.length - 1].params,\n        nextUrl,\n        nextParams: matches[matches.length - 1].params\n      }, submission, {\n        actionResult,\n        defaultShouldRevalidate: isRevalidationRequired\n      }));\n    }\n    if (shouldRevalidate) {\n      revalidatingFetchers.push({\n        key,\n        routeId: f.routeId,\n        path: f.path,\n        matches: fetcherMatches,\n        match: fetcherMatch,\n        controller: new AbortController()\n      });\n    }\n  });\n  return [navigationMatches, revalidatingFetchers];\n}\nfunction isNewLoader(currentLoaderData, currentMatch, match) {\n  let isNew =\n  // [a] -> [a, b]\n  !currentMatch ||\n  // [a, b] -> [a, c]\n  match.route.id !== currentMatch.route.id;\n  // Handle the case that we don't have data for a re-used route, potentially\n  // from a prior error or from a cancelled pending deferred\n  let isMissingData = currentLoaderData[match.route.id] === undefined;\n  // Always load if this is a net-new route or we don't yet have data\n  return isNew || isMissingData;\n}\nfunction isNewRouteInstance(currentMatch, match) {\n  let currentPath = currentMatch.route.path;\n  return (\n    // param change for this match, /users/123 -> /users/456\n    currentMatch.pathname !== match.pathname ||\n    // splat param changed, which is not present in match.path\n    // e.g. /files/images/avatar.jpg -> files/finances.xls\n    currentPath != null && currentPath.endsWith(\"*\") && currentMatch.params[\"*\"] !== match.params[\"*\"]\n  );\n}\nfunction shouldRevalidateLoader(loaderMatch, arg) {\n  if (loaderMatch.route.shouldRevalidate) {\n    let routeChoice = loaderMatch.route.shouldRevalidate(arg);\n    if (typeof routeChoice === \"boolean\") {\n      return routeChoice;\n    }\n  }\n  return arg.defaultShouldRevalidate;\n}\n/**\n * Execute route.lazy() methods to lazily load route modules (loader, action,\n * shouldRevalidate) and update the routeManifest in place which shares objects\n * with dataRoutes so those get updated as well.\n */\nasync function loadLazyRouteModule(route, mapRouteProperties, manifest) {\n  if (!route.lazy) {\n    return;\n  }\n  let lazyRoute = await route.lazy();\n  // If the lazy route function was executed and removed by another parallel\n  // call then we can return - first lazy() to finish wins because the return\n  // value of lazy is expected to be static\n  if (!route.lazy) {\n    return;\n  }\n  let routeToUpdate = manifest[route.id];\n  invariant(routeToUpdate, \"No route found in manifest\");\n  // Update the route in place.  This should be safe because there's no way\n  // we could yet be sitting on this route as we can't get there without\n  // resolving lazy() first.\n  //\n  // This is different than the HMR \"update\" use-case where we may actively be\n  // on the route being updated.  The main concern boils down to \"does this\n  // mutation affect any ongoing navigations or any current state.matches\n  // values?\".  If not, it should be safe to update in place.\n  let routeUpdates = {};\n  for (let lazyRouteProperty in lazyRoute) {\n    let staticRouteValue = routeToUpdate[lazyRouteProperty];\n    let isPropertyStaticallyDefined = staticRouteValue !== undefined &&\n    // This property isn't static since it should always be updated based\n    // on the route updates\n    lazyRouteProperty !== \"hasErrorBoundary\";\n    warning(!isPropertyStaticallyDefined, \"Route \\\"\" + routeToUpdate.id + \"\\\" has a static property \\\"\" + lazyRouteProperty + \"\\\" \" + \"defined but its lazy function is also returning a value for this property. \" + (\"The lazy route property \\\"\" + lazyRouteProperty + \"\\\" will be ignored.\"));\n    if (!isPropertyStaticallyDefined && !immutableRouteKeys.has(lazyRouteProperty)) {\n      routeUpdates[lazyRouteProperty] = lazyRoute[lazyRouteProperty];\n    }\n  }\n  // Mutate the route with the provided updates.  Do this first so we pass\n  // the updated version to mapRouteProperties\n  Object.assign(routeToUpdate, routeUpdates);\n  // Mutate the `hasErrorBoundary` property on the route based on the route\n  // updates and remove the `lazy` function so we don't resolve the lazy\n  // route again.\n  Object.assign(routeToUpdate, _extends({}, mapRouteProperties(routeToUpdate), {\n    lazy: undefined\n  }));\n}\nasync function callLoaderOrAction(type, request, match, matches, manifest, mapRouteProperties, basename, opts) {\n  if (opts === void 0) {\n    opts = {};\n  }\n  let resultType;\n  let result;\n  let onReject;\n  let runHandler = handler => {\n    // Setup a promise we can race against so that abort signals short circuit\n    let reject;\n    let abortPromise = new Promise((_, r) => reject = r);\n    onReject = () => reject();\n    request.signal.addEventListener(\"abort\", onReject);\n    return Promise.race([handler({\n      request,\n      params: match.params,\n      context: opts.requestContext\n    }), abortPromise]);\n  };\n  try {\n    let handler = match.route[type];\n    if (match.route.lazy) {\n      if (handler) {\n        // Run statically defined handler in parallel with lazy()\n        let handlerError;\n        let values = await Promise.all([\n        // If the handler throws, don't let it immediately bubble out,\n        // since we need to let the lazy() execution finish so we know if this\n        // route has a boundary that can handle the error\n        runHandler(handler).catch(e => {\n          handlerError = e;\n        }), loadLazyRouteModule(match.route, mapRouteProperties, manifest)]);\n        if (handlerError) {\n          throw handlerError;\n        }\n        result = values[0];\n      } else {\n        // Load lazy route module, then run any returned handler\n        await loadLazyRouteModule(match.route, mapRouteProperties, manifest);\n        handler = match.route[type];\n        if (handler) {\n          // Handler still run even if we got interrupted to maintain consistency\n          // with un-abortable behavior of handler execution on non-lazy or\n          // previously-lazy-loaded routes\n          result = await runHandler(handler);\n        } else if (type === \"action\") {\n          let url = new URL(request.url);\n          let pathname = url.pathname + url.search;\n          throw getInternalRouterError(405, {\n            method: request.method,\n            pathname,\n            routeId: match.route.id\n          });\n        } else {\n          // lazy() route has no loader to run.  Short circuit here so we don't\n          // hit the invariant below that errors on returning undefined.\n          return {\n            type: ResultType.data,\n            data: undefined\n          };\n        }\n      }\n    } else if (!handler) {\n      let url = new URL(request.url);\n      let pathname = url.pathname + url.search;\n      throw getInternalRouterError(404, {\n        pathname\n      });\n    } else {\n      result = await runHandler(handler);\n    }\n    invariant(result !== undefined, \"You defined \" + (type === \"action\" ? \"an action\" : \"a loader\") + \" for route \" + (\"\\\"\" + match.route.id + \"\\\" but didn't return anything from your `\" + type + \"` \") + \"function. Please return a value or `null`.\");\n  } catch (e) {\n    resultType = ResultType.error;\n    result = e;\n  } finally {\n    if (onReject) {\n      request.signal.removeEventListener(\"abort\", onReject);\n    }\n  }\n  if (isResponse(result)) {\n    let status = result.status;\n    // Process redirects\n    if (redirectStatusCodes.has(status)) {\n      let location = result.headers.get(\"Location\");\n      invariant(location, \"Redirects returned/thrown from loaders/actions must have a Location header\");\n      // Support relative routing in internal redirects\n      if (!ABSOLUTE_URL_REGEX.test(location)) {\n        location = normalizeTo(new URL(request.url), matches.slice(0, matches.indexOf(match) + 1), basename, true, location);\n      } else if (!opts.isStaticRequest) {\n        // Strip off the protocol+origin for same-origin + same-basename absolute\n        // redirects. If this is a static request, we can let it go back to the\n        // browser as-is\n        let currentUrl = new URL(request.url);\n        let url = location.startsWith(\"//\") ? new URL(currentUrl.protocol + location) : new URL(location);\n        let isSameBasename = stripBasename(url.pathname, basename) != null;\n        if (url.origin === currentUrl.origin && isSameBasename) {\n          location = url.pathname + url.search + url.hash;\n        }\n      }\n      // Don't process redirects in the router during static requests requests.\n      // Instead, throw the Response and let the server handle it with an HTTP\n      // redirect.  We also update the Location header in place in this flow so\n      // basename and relative routing is taken into account\n      if (opts.isStaticRequest) {\n        result.headers.set(\"Location\", location);\n        throw result;\n      }\n      return {\n        type: ResultType.redirect,\n        status,\n        location,\n        revalidate: result.headers.get(\"X-Remix-Revalidate\") !== null,\n        reloadDocument: result.headers.get(\"X-Remix-Reload-Document\") !== null\n      };\n    }\n    // For SSR single-route requests, we want to hand Responses back directly\n    // without unwrapping.  We do this with the QueryRouteResponse wrapper\n    // interface so we can know whether it was returned or thrown\n    if (opts.isRouteRequest) {\n      let queryRouteResponse = {\n        type: resultType === ResultType.error ? ResultType.error : ResultType.data,\n        response: result\n      };\n      throw queryRouteResponse;\n    }\n    let data;\n    let contentType = result.headers.get(\"Content-Type\");\n    // Check between word boundaries instead of startsWith() due to the last\n    // paragraph of https://httpwg.org/specs/rfc9110.html#field.content-type\n    if (contentType && /\\bapplication\\/json\\b/.test(contentType)) {\n      data = await result.json();\n    } else {\n      data = await result.text();\n    }\n    if (resultType === ResultType.error) {\n      return {\n        type: resultType,\n        error: new ErrorResponseImpl(status, result.statusText, data),\n        headers: result.headers\n      };\n    }\n    return {\n      type: ResultType.data,\n      data,\n      statusCode: result.status,\n      headers: result.headers\n    };\n  }\n  if (resultType === ResultType.error) {\n    return {\n      type: resultType,\n      error: result\n    };\n  }\n  if (isDeferredData(result)) {\n    var _result$init, _result$init2;\n    return {\n      type: ResultType.deferred,\n      deferredData: result,\n      statusCode: (_result$init = result.init) == null ? void 0 : _result$init.status,\n      headers: ((_result$init2 = result.init) == null ? void 0 : _result$init2.headers) && new Headers(result.init.headers)\n    };\n  }\n  return {\n    type: ResultType.data,\n    data: result\n  };\n}\n// Utility method for creating the Request instances for loaders/actions during\n// client-side navigations and fetches.  During SSR we will always have a\n// Request instance from the static handler (query/queryRoute)\nfunction createClientSideRequest(history, location, signal, submission) {\n  let url = history.createURL(stripHashFromPath(location)).toString();\n  let init = {\n    signal\n  };\n  if (submission && isMutationMethod(submission.formMethod)) {\n    let {\n      formMethod,\n      formEncType\n    } = submission;\n    // Didn't think we needed this but it turns out unlike other methods, patch\n    // won't be properly normalized to uppercase and results in a 405 error.\n    // See: https://fetch.spec.whatwg.org/#concept-method\n    init.method = formMethod.toUpperCase();\n    if (formEncType === \"application/json\") {\n      init.headers = new Headers({\n        \"Content-Type\": formEncType\n      });\n      init.body = JSON.stringify(submission.json);\n    } else if (formEncType === \"text/plain\") {\n      // Content-Type is inferred (https://fetch.spec.whatwg.org/#dom-request)\n      init.body = submission.text;\n    } else if (formEncType === \"application/x-www-form-urlencoded\" && submission.formData) {\n      // Content-Type is inferred (https://fetch.spec.whatwg.org/#dom-request)\n      init.body = convertFormDataToSearchParams(submission.formData);\n    } else {\n      // Content-Type is inferred (https://fetch.spec.whatwg.org/#dom-request)\n      init.body = submission.formData;\n    }\n  }\n  return new Request(url, init);\n}\nfunction convertFormDataToSearchParams(formData) {\n  let searchParams = new URLSearchParams();\n  for (let [key, value] of formData.entries()) {\n    // https://html.spec.whatwg.org/multipage/form-control-infrastructure.html#converting-an-entry-list-to-a-list-of-name-value-pairs\n    searchParams.append(key, typeof value === \"string\" ? value : value.name);\n  }\n  return searchParams;\n}\nfunction convertSearchParamsToFormData(searchParams) {\n  let formData = new FormData();\n  for (let [key, value] of searchParams.entries()) {\n    formData.append(key, value);\n  }\n  return formData;\n}\nfunction processRouteLoaderData(matches, matchesToLoad, results, pendingError, activeDeferreds) {\n  // Fill in loaderData/errors from our loaders\n  let loaderData = {};\n  let errors = null;\n  let statusCode;\n  let foundError = false;\n  let loaderHeaders = {};\n  // Process loader results into state.loaderData/state.errors\n  results.forEach((result, index) => {\n    let id = matchesToLoad[index].route.id;\n    invariant(!isRedirectResult(result), \"Cannot handle redirect results in processLoaderData\");\n    if (isErrorResult(result)) {\n      // Look upwards from the matched route for the closest ancestor\n      // error boundary, defaulting to the root match\n      let boundaryMatch = findNearestBoundary(matches, id);\n      let error = result.error;\n      // If we have a pending action error, we report it at the highest-route\n      // that throws a loader error, and then clear it out to indicate that\n      // it was consumed\n      if (pendingError) {\n        error = Object.values(pendingError)[0];\n        pendingError = undefined;\n      }\n      errors = errors || {};\n      // Prefer higher error values if lower errors bubble to the same boundary\n      if (errors[boundaryMatch.route.id] == null) {\n        errors[boundaryMatch.route.id] = error;\n      }\n      // Clear our any prior loaderData for the throwing route\n      loaderData[id] = undefined;\n      // Once we find our first (highest) error, we set the status code and\n      // prevent deeper status codes from overriding\n      if (!foundError) {\n        foundError = true;\n        statusCode = isRouteErrorResponse(result.error) ? result.error.status : 500;\n      }\n      if (result.headers) {\n        loaderHeaders[id] = result.headers;\n      }\n    } else {\n      if (isDeferredResult(result)) {\n        activeDeferreds.set(id, result.deferredData);\n        loaderData[id] = result.deferredData.data;\n      } else {\n        loaderData[id] = result.data;\n      }\n      // Error status codes always override success status codes, but if all\n      // loaders are successful we take the deepest status code.\n      if (result.statusCode != null && result.statusCode !== 200 && !foundError) {\n        statusCode = result.statusCode;\n      }\n      if (result.headers) {\n        loaderHeaders[id] = result.headers;\n      }\n    }\n  });\n  // If we didn't consume the pending action error (i.e., all loaders\n  // resolved), then consume it here.  Also clear out any loaderData for the\n  // throwing route\n  if (pendingError) {\n    errors = pendingError;\n    loaderData[Object.keys(pendingError)[0]] = undefined;\n  }\n  return {\n    loaderData,\n    errors,\n    statusCode: statusCode || 200,\n    loaderHeaders\n  };\n}\nfunction processLoaderData(state, matches, matchesToLoad, results, pendingError, revalidatingFetchers, fetcherResults, activeDeferreds) {\n  let {\n    loaderData,\n    errors\n  } = processRouteLoaderData(matches, matchesToLoad, results, pendingError, activeDeferreds);\n  // Process results from our revalidating fetchers\n  for (let index = 0; index < revalidatingFetchers.length; index++) {\n    let {\n      key,\n      match,\n      controller\n    } = revalidatingFetchers[index];\n    invariant(fetcherResults !== undefined && fetcherResults[index] !== undefined, \"Did not find corresponding fetcher result\");\n    let result = fetcherResults[index];\n    // Process fetcher non-redirect errors\n    if (controller && controller.signal.aborted) {\n      // Nothing to do for aborted fetchers\n      continue;\n    } else if (isErrorResult(result)) {\n      let boundaryMatch = findNearestBoundary(state.matches, match == null ? void 0 : match.route.id);\n      if (!(errors && errors[boundaryMatch.route.id])) {\n        errors = _extends({}, errors, {\n          [boundaryMatch.route.id]: result.error\n        });\n      }\n      state.fetchers.delete(key);\n    } else if (isRedirectResult(result)) {\n      // Should never get here, redirects should get processed above, but we\n      // keep this to type narrow to a success result in the else\n      invariant(false, \"Unhandled fetcher revalidation redirect\");\n    } else if (isDeferredResult(result)) {\n      // Should never get here, deferred data should be awaited for fetchers\n      // in resolveDeferredResults\n      invariant(false, \"Unhandled fetcher deferred data\");\n    } else {\n      let doneFetcher = getDoneFetcher(result.data);\n      state.fetchers.set(key, doneFetcher);\n    }\n  }\n  return {\n    loaderData,\n    errors\n  };\n}\nfunction mergeLoaderData(loaderData, newLoaderData, matches, errors) {\n  let mergedLoaderData = _extends({}, newLoaderData);\n  for (let match of matches) {\n    let id = match.route.id;\n    if (newLoaderData.hasOwnProperty(id)) {\n      if (newLoaderData[id] !== undefined) {\n        mergedLoaderData[id] = newLoaderData[id];\n      }\n    } else if (loaderData[id] !== undefined && match.route.loader) {\n      // Preserve existing keys not included in newLoaderData and where a loader\n      // wasn't removed by HMR\n      mergedLoaderData[id] = loaderData[id];\n    }\n    if (errors && errors.hasOwnProperty(id)) {\n      // Don't keep any loader data below the boundary\n      break;\n    }\n  }\n  return mergedLoaderData;\n}\n// Find the nearest error boundary, looking upwards from the leaf route (or the\n// route specified by routeId) for the closest ancestor error boundary,\n// defaulting to the root match\nfunction findNearestBoundary(matches, routeId) {\n  let eligibleMatches = routeId ? matches.slice(0, matches.findIndex(m => m.route.id === routeId) + 1) : [...matches];\n  return eligibleMatches.reverse().find(m => m.route.hasErrorBoundary === true) || matches[0];\n}\nfunction getShortCircuitMatches(routes) {\n  // Prefer a root layout route if present, otherwise shim in a route object\n  let route = routes.length === 1 ? routes[0] : routes.find(r => r.index || !r.path || r.path === \"/\") || {\n    id: \"__shim-error-route__\"\n  };\n  return {\n    matches: [{\n      params: {},\n      pathname: \"\",\n      pathnameBase: \"\",\n      route\n    }],\n    route\n  };\n}\nfunction getInternalRouterError(status, _temp5) {\n  let {\n    pathname,\n    routeId,\n    method,\n    type\n  } = _temp5 === void 0 ? {} : _temp5;\n  let statusText = \"Unknown Server Error\";\n  let errorMessage = \"Unknown @remix-run/router error\";\n  if (status === 400) {\n    statusText = \"Bad Request\";\n    if (method && pathname && routeId) {\n      errorMessage = \"You made a \" + method + \" request to \\\"\" + pathname + \"\\\" but \" + (\"did not provide a `loader` for route \\\"\" + routeId + \"\\\", \") + \"so there is no way to handle the request.\";\n    } else if (type === \"defer-action\") {\n      errorMessage = \"defer() is not supported in actions\";\n    } else if (type === \"invalid-body\") {\n      errorMessage = \"Unable to encode submission body\";\n    }\n  } else if (status === 403) {\n    statusText = \"Forbidden\";\n    errorMessage = \"Route \\\"\" + routeId + \"\\\" does not match URL \\\"\" + pathname + \"\\\"\";\n  } else if (status === 404) {\n    statusText = \"Not Found\";\n    errorMessage = \"No route matches URL \\\"\" + pathname + \"\\\"\";\n  } else if (status === 405) {\n    statusText = \"Method Not Allowed\";\n    if (method && pathname && routeId) {\n      errorMessage = \"You made a \" + method.toUpperCase() + \" request to \\\"\" + pathname + \"\\\" but \" + (\"did not provide an `action` for route \\\"\" + routeId + \"\\\", \") + \"so there is no way to handle the request.\";\n    } else if (method) {\n      errorMessage = \"Invalid request method \\\"\" + method.toUpperCase() + \"\\\"\";\n    }\n  }\n  return new ErrorResponseImpl(status || 500, statusText, new Error(errorMessage), true);\n}\n// Find any returned redirect errors, starting from the lowest match\nfunction findRedirect(results) {\n  for (let i = results.length - 1; i >= 0; i--) {\n    let result = results[i];\n    if (isRedirectResult(result)) {\n      return {\n        result,\n        idx: i\n      };\n    }\n  }\n}\nfunction stripHashFromPath(path) {\n  let parsedPath = typeof path === \"string\" ? parsePath(path) : path;\n  return createPath(_extends({}, parsedPath, {\n    hash: \"\"\n  }));\n}\nfunction isHashChangeOnly(a, b) {\n  if (a.pathname !== b.pathname || a.search !== b.search) {\n    return false;\n  }\n  if (a.hash === \"\") {\n    // /page -> /page#hash\n    return b.hash !== \"\";\n  } else if (a.hash === b.hash) {\n    // /page#hash -> /page#hash\n    return true;\n  } else if (b.hash !== \"\") {\n    // /page#hash -> /page#other\n    return true;\n  }\n  // If the hash is removed the browser will re-perform a request to the server\n  // /page#hash -> /page\n  return false;\n}\nfunction isDeferredResult(result) {\n  return result.type === ResultType.deferred;\n}\nfunction isErrorResult(result) {\n  return result.type === ResultType.error;\n}\nfunction isRedirectResult(result) {\n  return (result && result.type) === ResultType.redirect;\n}\nfunction isDeferredData(value) {\n  let deferred = value;\n  return deferred && typeof deferred === \"object\" && typeof deferred.data === \"object\" && typeof deferred.subscribe === \"function\" && typeof deferred.cancel === \"function\" && typeof deferred.resolveData === \"function\";\n}\nfunction isResponse(value) {\n  return value != null && typeof value.status === \"number\" && typeof value.statusText === \"string\" && typeof value.headers === \"object\" && typeof value.body !== \"undefined\";\n}\nfunction isRedirectResponse(result) {\n  if (!isResponse(result)) {\n    return false;\n  }\n  let status = result.status;\n  let location = result.headers.get(\"Location\");\n  return status >= 300 && status <= 399 && location != null;\n}\nfunction isQueryRouteResponse(obj) {\n  return obj && isResponse(obj.response) && (obj.type === ResultType.data || obj.type === ResultType.error);\n}\nfunction isValidMethod(method) {\n  return validRequestMethods.has(method.toLowerCase());\n}\nfunction isMutationMethod(method) {\n  return validMutationMethods.has(method.toLowerCase());\n}\nasync function resolveDeferredResults(currentMatches, matchesToLoad, results, signals, isFetcher, currentLoaderData) {\n  for (let index = 0; index < results.length; index++) {\n    let result = results[index];\n    let match = matchesToLoad[index];\n    // If we don't have a match, then we can have a deferred result to do\n    // anything with.  This is for revalidating fetchers where the route was\n    // removed during HMR\n    if (!match) {\n      continue;\n    }\n    let currentMatch = currentMatches.find(m => m.route.id === match.route.id);\n    let isRevalidatingLoader = currentMatch != null && !isNewRouteInstance(currentMatch, match) && (currentLoaderData && currentLoaderData[match.route.id]) !== undefined;\n    if (isDeferredResult(result) && (isFetcher || isRevalidatingLoader)) {\n      // Note: we do not have to touch activeDeferreds here since we race them\n      // against the signal in resolveDeferredData and they'll get aborted\n      // there if needed\n      let signal = signals[index];\n      invariant(signal, \"Expected an AbortSignal for revalidating fetcher deferred result\");\n      await resolveDeferredData(result, signal, isFetcher).then(result => {\n        if (result) {\n          results[index] = result || results[index];\n        }\n      });\n    }\n  }\n}\nasync function resolveDeferredData(result, signal, unwrap) {\n  if (unwrap === void 0) {\n    unwrap = false;\n  }\n  let aborted = await result.deferredData.resolveData(signal);\n  if (aborted) {\n    return;\n  }\n  if (unwrap) {\n    try {\n      return {\n        type: ResultType.data,\n        data: result.deferredData.unwrappedData\n      };\n    } catch (e) {\n      // Handle any TrackedPromise._error values encountered while unwrapping\n      return {\n        type: ResultType.error,\n        error: e\n      };\n    }\n  }\n  return {\n    type: ResultType.data,\n    data: result.deferredData.data\n  };\n}\nfunction hasNakedIndexQuery(search) {\n  return new URLSearchParams(search).getAll(\"index\").some(v => v === \"\");\n}\nfunction getTargetMatch(matches, location) {\n  let search = typeof location === \"string\" ? parsePath(location).search : location.search;\n  if (matches[matches.length - 1].route.index && hasNakedIndexQuery(search || \"\")) {\n    // Return the leaf index route when index is present\n    return matches[matches.length - 1];\n  }\n  // Otherwise grab the deepest \"path contributing\" match (ignoring index and\n  // pathless layout routes)\n  let pathMatches = getPathContributingMatches(matches);\n  return pathMatches[pathMatches.length - 1];\n}\nfunction getSubmissionFromNavigation(navigation) {\n  let {\n    formMethod,\n    formAction,\n    formEncType,\n    text,\n    formData,\n    json\n  } = navigation;\n  if (!formMethod || !formAction || !formEncType) {\n    return;\n  }\n  if (text != null) {\n    return {\n      formMethod,\n      formAction,\n      formEncType,\n      formData: undefined,\n      json: undefined,\n      text\n    };\n  } else if (formData != null) {\n    return {\n      formMethod,\n      formAction,\n      formEncType,\n      formData,\n      json: undefined,\n      text: undefined\n    };\n  } else if (json !== undefined) {\n    return {\n      formMethod,\n      formAction,\n      formEncType,\n      formData: undefined,\n      json,\n      text: undefined\n    };\n  }\n}\nfunction getLoadingNavigation(location, submission) {\n  if (submission) {\n    let navigation = {\n      state: \"loading\",\n      location,\n      formMethod: submission.formMethod,\n      formAction: submission.formAction,\n      formEncType: submission.formEncType,\n      formData: submission.formData,\n      json: submission.json,\n      text: submission.text\n    };\n    return navigation;\n  } else {\n    let navigation = {\n      state: \"loading\",\n      location,\n      formMethod: undefined,\n      formAction: undefined,\n      formEncType: undefined,\n      formData: undefined,\n      json: undefined,\n      text: undefined\n    };\n    return navigation;\n  }\n}\nfunction getSubmittingNavigation(location, submission) {\n  let navigation = {\n    state: \"submitting\",\n    location,\n    formMethod: submission.formMethod,\n    formAction: submission.formAction,\n    formEncType: submission.formEncType,\n    formData: submission.formData,\n    json: submission.json,\n    text: submission.text\n  };\n  return navigation;\n}\nfunction getLoadingFetcher(submission, data) {\n  if (submission) {\n    let fetcher = {\n      state: \"loading\",\n      formMethod: submission.formMethod,\n      formAction: submission.formAction,\n      formEncType: submission.formEncType,\n      formData: submission.formData,\n      json: submission.json,\n      text: submission.text,\n      data\n    };\n    return fetcher;\n  } else {\n    let fetcher = {\n      state: \"loading\",\n      formMethod: undefined,\n      formAction: undefined,\n      formEncType: undefined,\n      formData: undefined,\n      json: undefined,\n      text: undefined,\n      data\n    };\n    return fetcher;\n  }\n}\nfunction getSubmittingFetcher(submission, existingFetcher) {\n  let fetcher = {\n    state: \"submitting\",\n    formMethod: submission.formMethod,\n    formAction: submission.formAction,\n    formEncType: submission.formEncType,\n    formData: submission.formData,\n    json: submission.json,\n    text: submission.text,\n    data: existingFetcher ? existingFetcher.data : undefined\n  };\n  return fetcher;\n}\nfunction getDoneFetcher(data) {\n  let fetcher = {\n    state: \"idle\",\n    formMethod: undefined,\n    formAction: undefined,\n    formEncType: undefined,\n    formData: undefined,\n    json: undefined,\n    text: undefined,\n    data\n  };\n  return fetcher;\n}\nfunction restoreAppliedTransitions(_window, transitions) {\n  try {\n    let sessionPositions = _window.sessionStorage.getItem(TRANSITIONS_STORAGE_KEY);\n    if (sessionPositions) {\n      let json = JSON.parse(sessionPositions);\n      for (let [k, v] of Object.entries(json || {})) {\n        if (v && Array.isArray(v)) {\n          transitions.set(k, new Set(v || []));\n        }\n      }\n    }\n  } catch (e) {\n    // no-op, use default empty object\n  }\n}\nfunction persistAppliedTransitions(_window, transitions) {\n  if (transitions.size > 0) {\n    let json = {};\n    for (let [k, v] of transitions) {\n      json[k] = [...v];\n    }\n    try {\n      _window.sessionStorage.setItem(TRANSITIONS_STORAGE_KEY, JSON.stringify(json));\n    } catch (error) {\n      warning(false, \"Failed to save applied view transitions in sessionStorage (\" + error + \").\");\n    }\n  }\n}\n//#endregion\n\nexport { AbortedDeferredError, Action, IDLE_BLOCKER, IDLE_FETCHER, IDLE_NAVIGATION, UNSAFE_DEFERRED_SYMBOL, DeferredData as UNSAFE_DeferredData, ErrorResponseImpl as UNSAFE_ErrorResponseImpl, convertRouteMatchToUiMatch as UNSAFE_convertRouteMatchToUiMatch, convertRoutesToDataRoutes as UNSAFE_convertRoutesToDataRoutes, getResolveToMatches as UNSAFE_getResolveToMatches, invariant as UNSAFE_invariant, warning as UNSAFE_warning, createBrowserHistory, createHashHistory, createMemoryHistory, createPath, createRouter, createStaticHandler, defer, generatePath, getStaticContextFromError, getToPathname, isDeferredData, isRouteErrorResponse, joinPaths, json, matchPath, matchRoutes, normalizePathname, parsePath, redirect, redirectDocument, resolvePath, resolveTo, stripBasename };\n//# sourceMappingURL=router.js.map\n","/*!\n\tCopyright (c) 2018 Jed Watson.\n\tLicensed under the MIT License (MIT), see\n\thttp://jedwatson.github.io/classnames\n*/\n/* global define */\n\n(function () {\n\t'use strict';\n\n\tvar hasOwn = {}.hasOwnProperty;\n\tvar nativeCodeString = '[native code]';\n\n\tfunction classNames() {\n\t\tvar classes = [];\n\n\t\tfor (var i = 0; i < arguments.length; i++) {\n\t\t\tvar arg = arguments[i];\n\t\t\tif (!arg) continue;\n\n\t\t\tvar argType = typeof arg;\n\n\t\t\tif (argType === 'string' || argType === 'number') {\n\t\t\t\tclasses.push(arg);\n\t\t\t} else if (Array.isArray(arg)) {\n\t\t\t\tif (arg.length) {\n\t\t\t\t\tvar inner = classNames.apply(null, arg);\n\t\t\t\t\tif (inner) {\n\t\t\t\t\t\tclasses.push(inner);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else if (argType === 'object') {\n\t\t\t\tif (arg.toString !== Object.prototype.toString && !arg.toString.toString().includes('[native code]')) {\n\t\t\t\t\tclasses.push(arg.toString());\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tfor (var key in arg) {\n\t\t\t\t\tif (hasOwn.call(arg, key) && arg[key]) {\n\t\t\t\t\t\tclasses.push(key);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn classes.join(' ');\n\t}\n\n\tif (typeof module !== 'undefined' && module.exports) {\n\t\tclassNames.default = classNames;\n\t\tmodule.exports = classNames;\n\t} else if (typeof define === 'function' && typeof define.amd === 'object' && define.amd) {\n\t\t// register as 'classnames', consistent with npm package name\n\t\tdefine('classnames', [], function () {\n\t\t\treturn classNames;\n\t\t});\n\t} else {\n\t\twindow.classNames = classNames;\n\t}\n}());\n","var e10 = Math.sqrt(50),\n    e5 = Math.sqrt(10),\n    e2 = Math.sqrt(2);\n\nexport default function(start, stop, count) {\n  var reverse,\n      i = -1,\n      n,\n      ticks,\n      step;\n\n  stop = +stop, start = +start, count = +count;\n  if (start === stop && count > 0) return [start];\n  if (reverse = stop < start) n = start, start = stop, stop = n;\n  if ((step = tickIncrement(start, stop, count)) === 0 || !isFinite(step)) return [];\n\n  if (step > 0) {\n    let r0 = Math.round(start / step), r1 = Math.round(stop / step);\n    if (r0 * step < start) ++r0;\n    if (r1 * step > stop) --r1;\n    ticks = new Array(n = r1 - r0 + 1);\n    while (++i < n) ticks[i] = (r0 + i) * step;\n  } else {\n    step = -step;\n    let r0 = Math.round(start * step), r1 = Math.round(stop * step);\n    if (r0 / step < start) ++r0;\n    if (r1 / step > stop) --r1;\n    ticks = new Array(n = r1 - r0 + 1);\n    while (++i < n) ticks[i] = (r0 + i) / step;\n  }\n\n  if (reverse) ticks.reverse();\n\n  return ticks;\n}\n\nexport function tickIncrement(start, stop, count) {\n  var step = (stop - start) / Math.max(0, count),\n      power = Math.floor(Math.log(step) / Math.LN10),\n      error = step / Math.pow(10, power);\n  return power >= 0\n      ? (error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1) * Math.pow(10, power)\n      : -Math.pow(10, -power) / (error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1);\n}\n\nexport function tickStep(start, stop, count) {\n  var step0 = Math.abs(stop - start) / Math.max(0, count),\n      step1 = Math.pow(10, Math.floor(Math.log(step0) / Math.LN10)),\n      error = step0 / step1;\n  if (error >= e10) step1 *= 10;\n  else if (error >= e5) step1 *= 5;\n  else if (error >= e2) step1 *= 2;\n  return stop < start ? -step1 : step1;\n}\n","export default function addLeadingZeros(number, targetLength) {\n  var sign = number < 0 ? '-' : '';\n  var output = Math.abs(number).toString();\n  while (output.length < targetLength) {\n    output = '0' + output;\n  }\n  return sign + output;\n}","export default function assign(target, object) {\n  if (target == null) {\n    throw new TypeError('assign requires that input parameter not be null or undefined');\n  }\n  for (var property in object) {\n    if (Object.prototype.hasOwnProperty.call(object, property)) {\n      ;\n      target[property] = object[property];\n    }\n  }\n  return target;\n}","import assign from \"../assign/index.js\";\nexport default function cloneObject(object) {\n  return assign({}, object);\n}","import defaultLocale from \"../../locale/en-US/index.js\";\nexport default defaultLocale;","var defaultOptions = {};\nexport function getDefaultOptions() {\n  return defaultOptions;\n}\nexport function setDefaultOptions(newOptions) {\n  defaultOptions = newOptions;\n}","import addLeadingZeros from \"../../addLeadingZeros/index.js\";\n/*\n * |     | Unit                           |     | Unit                           |\n * |-----|--------------------------------|-----|--------------------------------|\n * |  a  | AM, PM                         |  A* |                                |\n * |  d  | Day of month                   |  D  |                                |\n * |  h  | Hour [1-12]                    |  H  | Hour [0-23]                    |\n * |  m  | Minute                         |  M  | Month                          |\n * |  s  | Second                         |  S  | Fraction of second             |\n * |  y  | Year (abs)                     |  Y  |                                |\n *\n * Letters marked by * are not implemented but reserved by Unicode standard.\n */\nvar formatters = {\n  // Year\n  y: function y(date, token) {\n    // From http://www.unicode.org/reports/tr35/tr35-31/tr35-dates.html#Date_Format_tokens\n    // | Year     |     y | yy |   yyy |  yyyy | yyyyy |\n    // |----------|-------|----|-------|-------|-------|\n    // | AD 1     |     1 | 01 |   001 |  0001 | 00001 |\n    // | AD 12    |    12 | 12 |   012 |  0012 | 00012 |\n    // | AD 123   |   123 | 23 |   123 |  0123 | 00123 |\n    // | AD 1234  |  1234 | 34 |  1234 |  1234 | 01234 |\n    // | AD 12345 | 12345 | 45 | 12345 | 12345 | 12345 |\n\n    var signedYear = date.getUTCFullYear();\n    // Returns 1 for 1 BC (which is year 0 in JavaScript)\n    var year = signedYear > 0 ? signedYear : 1 - signedYear;\n    return addLeadingZeros(token === 'yy' ? year % 100 : year, token.length);\n  },\n  // Month\n  M: function M(date, token) {\n    var month = date.getUTCMonth();\n    return token === 'M' ? String(month + 1) : addLeadingZeros(month + 1, 2);\n  },\n  // Day of the month\n  d: function d(date, token) {\n    return addLeadingZeros(date.getUTCDate(), token.length);\n  },\n  // AM or PM\n  a: function a(date, token) {\n    var dayPeriodEnumValue = date.getUTCHours() / 12 >= 1 ? 'pm' : 'am';\n    switch (token) {\n      case 'a':\n      case 'aa':\n        return dayPeriodEnumValue.toUpperCase();\n      case 'aaa':\n        return dayPeriodEnumValue;\n      case 'aaaaa':\n        return dayPeriodEnumValue[0];\n      case 'aaaa':\n      default:\n        return dayPeriodEnumValue === 'am' ? 'a.m.' : 'p.m.';\n    }\n  },\n  // Hour [1-12]\n  h: function h(date, token) {\n    return addLeadingZeros(date.getUTCHours() % 12 || 12, token.length);\n  },\n  // Hour [0-23]\n  H: function H(date, token) {\n    return addLeadingZeros(date.getUTCHours(), token.length);\n  },\n  // Minute\n  m: function m(date, token) {\n    return addLeadingZeros(date.getUTCMinutes(), token.length);\n  },\n  // Second\n  s: function s(date, token) {\n    return addLeadingZeros(date.getUTCSeconds(), token.length);\n  },\n  // Fraction of second\n  S: function S(date, token) {\n    var numberOfDigits = token.length;\n    var milliseconds = date.getUTCMilliseconds();\n    var fractionalSeconds = Math.floor(milliseconds * Math.pow(10, numberOfDigits - 3));\n    return addLeadingZeros(fractionalSeconds, token.length);\n  }\n};\nexport default formatters;","var dateLongFormatter = function dateLongFormatter(pattern, formatLong) {\n  switch (pattern) {\n    case 'P':\n      return formatLong.date({\n        width: 'short'\n      });\n    case 'PP':\n      return formatLong.date({\n        width: 'medium'\n      });\n    case 'PPP':\n      return formatLong.date({\n        width: 'long'\n      });\n    case 'PPPP':\n    default:\n      return formatLong.date({\n        width: 'full'\n      });\n  }\n};\nvar timeLongFormatter = function timeLongFormatter(pattern, formatLong) {\n  switch (pattern) {\n    case 'p':\n      return formatLong.time({\n        width: 'short'\n      });\n    case 'pp':\n      return formatLong.time({\n        width: 'medium'\n      });\n    case 'ppp':\n      return formatLong.time({\n        width: 'long'\n      });\n    case 'pppp':\n    default:\n      return formatLong.time({\n        width: 'full'\n      });\n  }\n};\nvar dateTimeLongFormatter = function dateTimeLongFormatter(pattern, formatLong) {\n  var matchResult = pattern.match(/(P+)(p+)?/) || [];\n  var datePattern = matchResult[1];\n  var timePattern = matchResult[2];\n  if (!timePattern) {\n    return dateLongFormatter(pattern, formatLong);\n  }\n  var dateTimeFormat;\n  switch (datePattern) {\n    case 'P':\n      dateTimeFormat = formatLong.dateTime({\n        width: 'short'\n      });\n      break;\n    case 'PP':\n      dateTimeFormat = formatLong.dateTime({\n        width: 'medium'\n      });\n      break;\n    case 'PPP':\n      dateTimeFormat = formatLong.dateTime({\n        width: 'long'\n      });\n      break;\n    case 'PPPP':\n    default:\n      dateTimeFormat = formatLong.dateTime({\n        width: 'full'\n      });\n      break;\n  }\n  return dateTimeFormat.replace('{{date}}', dateLongFormatter(datePattern, formatLong)).replace('{{time}}', timeLongFormatter(timePattern, formatLong));\n};\nvar longFormatters = {\n  p: timeLongFormatter,\n  P: dateTimeLongFormatter\n};\nexport default longFormatters;","/**\n * Google Chrome as of 67.0.3396.87 introduced timezones with offset that includes seconds.\n * They usually appear for dates that denote time before the timezones were introduced\n * (e.g. for 'Europe/Prague' timezone the offset is GMT+00:57:44 before 1 October 1891\n * and GMT+01:00:00 after that date)\n *\n * Date#getTimezoneOffset returns the offset in minutes and would return 57 for the example above,\n * which would lead to incorrect calculations.\n *\n * This function returns the timezone offset in milliseconds that takes seconds in account.\n */\nexport default function getTimezoneOffsetInMilliseconds(date) {\n  var utcDate = new Date(Date.UTC(date.getFullYear(), date.getMonth(), date.getDate(), date.getHours(), date.getMinutes(), date.getSeconds(), date.getMilliseconds()));\n  utcDate.setUTCFullYear(date.getFullYear());\n  return date.getTime() - utcDate.getTime();\n}","import toDate from \"../../toDate/index.js\";\nimport startOfUTCISOWeek from \"../startOfUTCISOWeek/index.js\";\nimport startOfUTCISOWeekYear from \"../startOfUTCISOWeekYear/index.js\";\nimport requiredArgs from \"../requiredArgs/index.js\";\nvar MILLISECONDS_IN_WEEK = 604800000;\nexport default function getUTCISOWeek(dirtyDate) {\n  requiredArgs(1, arguments);\n  var date = toDate(dirtyDate);\n  var diff = startOfUTCISOWeek(date).getTime() - startOfUTCISOWeekYear(date).getTime();\n\n  // Round the number of days to the nearest integer\n  // because the number of milliseconds in a week is not constant\n  // (e.g. it's different in the week of the daylight saving time clock shift)\n  return Math.round(diff / MILLISECONDS_IN_WEEK) + 1;\n}","import getUTCISOWeekYear from \"../getUTCISOWeekYear/index.js\";\nimport startOfUTCISOWeek from \"../startOfUTCISOWeek/index.js\";\nimport requiredArgs from \"../requiredArgs/index.js\";\nexport default function startOfUTCISOWeekYear(dirtyDate) {\n  requiredArgs(1, arguments);\n  var year = getUTCISOWeekYear(dirtyDate);\n  var fourthOfJanuary = new Date(0);\n  fourthOfJanuary.setUTCFullYear(year, 0, 4);\n  fourthOfJanuary.setUTCHours(0, 0, 0, 0);\n  var date = startOfUTCISOWeek(fourthOfJanuary);\n  return date;\n}","import toDate from \"../../toDate/index.js\";\nimport requiredArgs from \"../requiredArgs/index.js\";\nimport startOfUTCISOWeek from \"../startOfUTCISOWeek/index.js\";\nexport default function getUTCISOWeekYear(dirtyDate) {\n  requiredArgs(1, arguments);\n  var date = toDate(dirtyDate);\n  var year = date.getUTCFullYear();\n  var fourthOfJanuaryOfNextYear = new Date(0);\n  fourthOfJanuaryOfNextYear.setUTCFullYear(year + 1, 0, 4);\n  fourthOfJanuaryOfNextYear.setUTCHours(0, 0, 0, 0);\n  var startOfNextYear = startOfUTCISOWeek(fourthOfJanuaryOfNextYear);\n  var fourthOfJanuaryOfThisYear = new Date(0);\n  fourthOfJanuaryOfThisYear.setUTCFullYear(year, 0, 4);\n  fourthOfJanuaryOfThisYear.setUTCHours(0, 0, 0, 0);\n  var startOfThisYear = startOfUTCISOWeek(fourthOfJanuaryOfThisYear);\n  if (date.getTime() >= startOfNextYear.getTime()) {\n    return year + 1;\n  } else if (date.getTime() >= startOfThisYear.getTime()) {\n    return year;\n  } else {\n    return year - 1;\n  }\n}","import toDate from \"../../toDate/index.js\";\nimport startOfUTCWeek from \"../startOfUTCWeek/index.js\";\nimport startOfUTCWeekYear from \"../startOfUTCWeekYear/index.js\";\nimport requiredArgs from \"../requiredArgs/index.js\";\nvar MILLISECONDS_IN_WEEK = 604800000;\nexport default function getUTCWeek(dirtyDate, options) {\n  requiredArgs(1, arguments);\n  var date = toDate(dirtyDate);\n  var diff = startOfUTCWeek(date, options).getTime() - startOfUTCWeekYear(date, options).getTime();\n\n  // Round the number of days to the nearest integer\n  // because the number of milliseconds in a week is not constant\n  // (e.g. it's different in the week of the daylight saving time clock shift)\n  return Math.round(diff / MILLISECONDS_IN_WEEK) + 1;\n}","import getUTCWeekYear from \"../getUTCWeekYear/index.js\";\nimport requiredArgs from \"../requiredArgs/index.js\";\nimport startOfUTCWeek from \"../startOfUTCWeek/index.js\";\nimport toInteger from \"../toInteger/index.js\";\nimport { getDefaultOptions } from \"../defaultOptions/index.js\";\nexport default function startOfUTCWeekYear(dirtyDate, options) {\n  var _ref, _ref2, _ref3, _options$firstWeekCon, _options$locale, _options$locale$optio, _defaultOptions$local, _defaultOptions$local2;\n  requiredArgs(1, arguments);\n  var defaultOptions = getDefaultOptions();\n  var firstWeekContainsDate = toInteger((_ref = (_ref2 = (_ref3 = (_options$firstWeekCon = options === null || options === void 0 ? void 0 : options.firstWeekContainsDate) !== null && _options$firstWeekCon !== void 0 ? _options$firstWeekCon : options === null || options === void 0 ? void 0 : (_options$locale = options.locale) === null || _options$locale === void 0 ? void 0 : (_options$locale$optio = _options$locale.options) === null || _options$locale$optio === void 0 ? void 0 : _options$locale$optio.firstWeekContainsDate) !== null && _ref3 !== void 0 ? _ref3 : defaultOptions.firstWeekContainsDate) !== null && _ref2 !== void 0 ? _ref2 : (_defaultOptions$local = defaultOptions.locale) === null || _defaultOptions$local === void 0 ? void 0 : (_defaultOptions$local2 = _defaultOptions$local.options) === null || _defaultOptions$local2 === void 0 ? void 0 : _defaultOptions$local2.firstWeekContainsDate) !== null && _ref !== void 0 ? _ref : 1);\n  var year = getUTCWeekYear(dirtyDate, options);\n  var firstWeek = new Date(0);\n  firstWeek.setUTCFullYear(year, 0, firstWeekContainsDate);\n  firstWeek.setUTCHours(0, 0, 0, 0);\n  var date = startOfUTCWeek(firstWeek, options);\n  return date;\n}","import toDate from \"../../toDate/index.js\";\nimport requiredArgs from \"../requiredArgs/index.js\";\nimport startOfUTCWeek from \"../startOfUTCWeek/index.js\";\nimport toInteger from \"../toInteger/index.js\";\nimport { getDefaultOptions } from \"../defaultOptions/index.js\";\nexport default function getUTCWeekYear(dirtyDate, options) {\n  var _ref, _ref2, _ref3, _options$firstWeekCon, _options$locale, _options$locale$optio, _defaultOptions$local, _defaultOptions$local2;\n  requiredArgs(1, arguments);\n  var date = toDate(dirtyDate);\n  var year = date.getUTCFullYear();\n  var defaultOptions = getDefaultOptions();\n  var firstWeekContainsDate = toInteger((_ref = (_ref2 = (_ref3 = (_options$firstWeekCon = options === null || options === void 0 ? void 0 : options.firstWeekContainsDate) !== null && _options$firstWeekCon !== void 0 ? _options$firstWeekCon : options === null || options === void 0 ? void 0 : (_options$locale = options.locale) === null || _options$locale === void 0 ? void 0 : (_options$locale$optio = _options$locale.options) === null || _options$locale$optio === void 0 ? void 0 : _options$locale$optio.firstWeekContainsDate) !== null && _ref3 !== void 0 ? _ref3 : defaultOptions.firstWeekContainsDate) !== null && _ref2 !== void 0 ? _ref2 : (_defaultOptions$local = defaultOptions.locale) === null || _defaultOptions$local === void 0 ? void 0 : (_defaultOptions$local2 = _defaultOptions$local.options) === null || _defaultOptions$local2 === void 0 ? void 0 : _defaultOptions$local2.firstWeekContainsDate) !== null && _ref !== void 0 ? _ref : 1);\n\n  // Test if weekStartsOn is between 1 and 7 _and_ is not NaN\n  if (!(firstWeekContainsDate >= 1 && firstWeekContainsDate <= 7)) {\n    throw new RangeError('firstWeekContainsDate must be between 1 and 7 inclusively');\n  }\n  var firstWeekOfNextYear = new Date(0);\n  firstWeekOfNextYear.setUTCFullYear(year + 1, 0, firstWeekContainsDate);\n  firstWeekOfNextYear.setUTCHours(0, 0, 0, 0);\n  var startOfNextYear = startOfUTCWeek(firstWeekOfNextYear, options);\n  var firstWeekOfThisYear = new Date(0);\n  firstWeekOfThisYear.setUTCFullYear(year, 0, firstWeekContainsDate);\n  firstWeekOfThisYear.setUTCHours(0, 0, 0, 0);\n  var startOfThisYear = startOfUTCWeek(firstWeekOfThisYear, options);\n  if (date.getTime() >= startOfNextYear.getTime()) {\n    return year + 1;\n  } else if (date.getTime() >= startOfThisYear.getTime()) {\n    return year;\n  } else {\n    return year - 1;\n  }\n}","var protectedDayOfYearTokens = ['D', 'DD'];\nvar protectedWeekYearTokens = ['YY', 'YYYY'];\nexport function isProtectedDayOfYearToken(token) {\n  return protectedDayOfYearTokens.indexOf(token) !== -1;\n}\nexport function isProtectedWeekYearToken(token) {\n  return protectedWeekYearTokens.indexOf(token) !== -1;\n}\nexport function throwProtectedError(token, format, input) {\n  if (token === 'YYYY') {\n    throw new RangeError(\"Use `yyyy` instead of `YYYY` (in `\".concat(format, \"`) for formatting years to the input `\").concat(input, \"`; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\"));\n  } else if (token === 'YY') {\n    throw new RangeError(\"Use `yy` instead of `YY` (in `\".concat(format, \"`) for formatting years to the input `\").concat(input, \"`; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\"));\n  } else if (token === 'D') {\n    throw new RangeError(\"Use `d` instead of `D` (in `\".concat(format, \"`) for formatting days of the month to the input `\").concat(input, \"`; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\"));\n  } else if (token === 'DD') {\n    throw new RangeError(\"Use `dd` instead of `DD` (in `\".concat(format, \"`) for formatting days of the month to the input `\").concat(input, \"`; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\"));\n  }\n}","export default function requiredArgs(required, args) {\n  if (args.length < required) {\n    throw new TypeError(required + ' argument' + (required > 1 ? 's' : '') + ' required, but only ' + args.length + ' present');\n  }\n}","var roundingMap = {\n  ceil: Math.ceil,\n  round: Math.round,\n  floor: Math.floor,\n  trunc: function trunc(value) {\n    return value < 0 ? Math.ceil(value) : Math.floor(value);\n  } // Math.trunc is not supported by IE\n};\n\nvar defaultRoundingMethod = 'trunc';\nexport function getRoundingMethod(method) {\n  return method ? roundingMap[method] : roundingMap[defaultRoundingMethod];\n}","import toDate from \"../../toDate/index.js\";\nimport requiredArgs from \"../requiredArgs/index.js\";\nimport toInteger from \"../toInteger/index.js\";\nimport { getDefaultOptions } from \"../defaultOptions/index.js\";\nexport default function setUTCDay(dirtyDate, dirtyDay, options) {\n  var _ref, _ref2, _ref3, _options$weekStartsOn, _options$locale, _options$locale$optio, _defaultOptions$local, _defaultOptions$local2;\n  requiredArgs(2, arguments);\n  var defaultOptions = getDefaultOptions();\n  var weekStartsOn = toInteger((_ref = (_ref2 = (_ref3 = (_options$weekStartsOn = options === null || options === void 0 ? void 0 : options.weekStartsOn) !== null && _options$weekStartsOn !== void 0 ? _options$weekStartsOn : options === null || options === void 0 ? void 0 : (_options$locale = options.locale) === null || _options$locale === void 0 ? void 0 : (_options$locale$optio = _options$locale.options) === null || _options$locale$optio === void 0 ? void 0 : _options$locale$optio.weekStartsOn) !== null && _ref3 !== void 0 ? _ref3 : defaultOptions.weekStartsOn) !== null && _ref2 !== void 0 ? _ref2 : (_defaultOptions$local = defaultOptions.locale) === null || _defaultOptions$local === void 0 ? void 0 : (_defaultOptions$local2 = _defaultOptions$local.options) === null || _defaultOptions$local2 === void 0 ? void 0 : _defaultOptions$local2.weekStartsOn) !== null && _ref !== void 0 ? _ref : 0);\n\n  // Test if weekStartsOn is between 0 and 6 _and_ is not NaN\n  if (!(weekStartsOn >= 0 && weekStartsOn <= 6)) {\n    throw new RangeError('weekStartsOn must be between 0 and 6 inclusively');\n  }\n  var date = toDate(dirtyDate);\n  var day = toInteger(dirtyDay);\n  var currentDay = date.getUTCDay();\n  var remainder = day % 7;\n  var dayIndex = (remainder + 7) % 7;\n  var diff = (dayIndex < weekStartsOn ? 7 : 0) + day - currentDay;\n  date.setUTCDate(date.getUTCDate() + diff);\n  return date;\n}","import toDate from \"../../toDate/index.js\";\nimport requiredArgs from \"../requiredArgs/index.js\";\nimport toInteger from \"../toInteger/index.js\";\nexport default function setUTCISODay(dirtyDate, dirtyDay) {\n  requiredArgs(2, arguments);\n  var day = toInteger(dirtyDay);\n  if (day % 7 === 0) {\n    day = day - 7;\n  }\n  var weekStartsOn = 1;\n  var date = toDate(dirtyDate);\n  var currentDay = date.getUTCDay();\n  var remainder = day % 7;\n  var dayIndex = (remainder + 7) % 7;\n  var diff = (dayIndex < weekStartsOn ? 7 : 0) + day - currentDay;\n  date.setUTCDate(date.getUTCDate() + diff);\n  return date;\n}","import toInteger from \"../toInteger/index.js\";\nimport toDate from \"../../toDate/index.js\";\nimport getUTCISOWeek from \"../getUTCISOWeek/index.js\";\nimport requiredArgs from \"../requiredArgs/index.js\";\nexport default function setUTCISOWeek(dirtyDate, dirtyISOWeek) {\n  requiredArgs(2, arguments);\n  var date = toDate(dirtyDate);\n  var isoWeek = toInteger(dirtyISOWeek);\n  var diff = getUTCISOWeek(date) - isoWeek;\n  date.setUTCDate(date.getUTCDate() - diff * 7);\n  return date;\n}","import toInteger from \"../toInteger/index.js\";\nimport toDate from \"../../toDate/index.js\";\nimport getUTCWeek from \"../getUTCWeek/index.js\";\nimport requiredArgs from \"../requiredArgs/index.js\";\nexport default function setUTCWeek(dirtyDate, dirtyWeek, options) {\n  requiredArgs(2, arguments);\n  var date = toDate(dirtyDate);\n  var week = toInteger(dirtyWeek);\n  var diff = getUTCWeek(date, options) - week;\n  date.setUTCDate(date.getUTCDate() - diff * 7);\n  return date;\n}","import toDate from \"../../toDate/index.js\";\nimport requiredArgs from \"../requiredArgs/index.js\";\nexport default function startOfUTCISOWeek(dirtyDate) {\n  requiredArgs(1, arguments);\n  var weekStartsOn = 1;\n  var date = toDate(dirtyDate);\n  var day = date.getUTCDay();\n  var diff = (day < weekStartsOn ? 7 : 0) + day - weekStartsOn;\n  date.setUTCDate(date.getUTCDate() - diff);\n  date.setUTCHours(0, 0, 0, 0);\n  return date;\n}","import toDate from \"../../toDate/index.js\";\nimport requiredArgs from \"../requiredArgs/index.js\";\nimport toInteger from \"../toInteger/index.js\";\nimport { getDefaultOptions } from \"../defaultOptions/index.js\";\nexport default function startOfUTCWeek(dirtyDate, options) {\n  var _ref, _ref2, _ref3, _options$weekStartsOn, _options$locale, _options$locale$optio, _defaultOptions$local, _defaultOptions$local2;\n  requiredArgs(1, arguments);\n  var defaultOptions = getDefaultOptions();\n  var weekStartsOn = toInteger((_ref = (_ref2 = (_ref3 = (_options$weekStartsOn = options === null || options === void 0 ? void 0 : options.weekStartsOn) !== null && _options$weekStartsOn !== void 0 ? _options$weekStartsOn : options === null || options === void 0 ? void 0 : (_options$locale = options.locale) === null || _options$locale === void 0 ? void 0 : (_options$locale$optio = _options$locale.options) === null || _options$locale$optio === void 0 ? void 0 : _options$locale$optio.weekStartsOn) !== null && _ref3 !== void 0 ? _ref3 : defaultOptions.weekStartsOn) !== null && _ref2 !== void 0 ? _ref2 : (_defaultOptions$local = defaultOptions.locale) === null || _defaultOptions$local === void 0 ? void 0 : (_defaultOptions$local2 = _defaultOptions$local.options) === null || _defaultOptions$local2 === void 0 ? void 0 : _defaultOptions$local2.weekStartsOn) !== null && _ref !== void 0 ? _ref : 0);\n\n  // Test if weekStartsOn is between 0 and 6 _and_ is not NaN\n  if (!(weekStartsOn >= 0 && weekStartsOn <= 6)) {\n    throw new RangeError('weekStartsOn must be between 0 and 6 inclusively');\n  }\n  var date = toDate(dirtyDate);\n  var day = date.getUTCDay();\n  var diff = (day < weekStartsOn ? 7 : 0) + day - weekStartsOn;\n  date.setUTCDate(date.getUTCDate() - diff);\n  date.setUTCHours(0, 0, 0, 0);\n  return date;\n}","export default function toInteger(dirtyNumber) {\n  if (dirtyNumber === null || dirtyNumber === true || dirtyNumber === false) {\n    return NaN;\n  }\n  var number = Number(dirtyNumber);\n  if (isNaN(number)) {\n    return number;\n  }\n  return number < 0 ? Math.ceil(number) : Math.floor(number);\n}","import _typeof from \"@babel/runtime/helpers/esm/typeof\";\nimport addDays from \"../addDays/index.js\";\nimport addMonths from \"../addMonths/index.js\";\nimport toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\nimport toInteger from \"../_lib/toInteger/index.js\";\n/**\n * @name add\n * @category Common Helpers\n * @summary Add the specified years, months, weeks, days, hours, minutes and seconds to the given date.\n *\n * @description\n * Add the specified years, months, weeks, days, hours, minutes and seconds to the given date.\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Duration} duration - the object with years, months, weeks, days, hours, minutes and seconds to be added. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`.\n *\n * | Key            | Description                        |\n * |----------------|------------------------------------|\n * | years          | Amount of years to be added        |\n * | months         | Amount of months to be added       |\n * | weeks          | Amount of weeks to be added        |\n * | days           | Amount of days to be added         |\n * | hours          | Amount of hours to be added        |\n * | minutes        | Amount of minutes to be added      |\n * | seconds        | Amount of seconds to be added      |\n *\n * All values default to 0\n *\n * @returns {Date} the new date with the seconds added\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Add the following duration to 1 September 2014, 10:19:50\n * const result = add(new Date(2014, 8, 1, 10, 19, 50), {\n *   years: 2,\n *   months: 9,\n *   weeks: 1,\n *   days: 7,\n *   hours: 5,\n *   minutes: 9,\n *   seconds: 30,\n * })\n * //=> Thu Jun 15 2017 15:29:20\n */\nexport default function add(dirtyDate, duration) {\n  requiredArgs(2, arguments);\n  if (!duration || _typeof(duration) !== 'object') return new Date(NaN);\n  var years = duration.years ? toInteger(duration.years) : 0;\n  var months = duration.months ? toInteger(duration.months) : 0;\n  var weeks = duration.weeks ? toInteger(duration.weeks) : 0;\n  var days = duration.days ? toInteger(duration.days) : 0;\n  var hours = duration.hours ? toInteger(duration.hours) : 0;\n  var minutes = duration.minutes ? toInteger(duration.minutes) : 0;\n  var seconds = duration.seconds ? toInteger(duration.seconds) : 0;\n\n  // Add years and months\n  var date = toDate(dirtyDate);\n  var dateWithMonths = months || years ? addMonths(date, months + years * 12) : date;\n\n  // Add weeks and days\n  var dateWithDays = days || weeks ? addDays(dateWithMonths, days + weeks * 7) : dateWithMonths;\n\n  // Add days, hours, minutes and seconds\n  var minutesToAdd = minutes + hours * 60;\n  var secondsToAdd = seconds + minutesToAdd * 60;\n  var msToAdd = secondsToAdd * 1000;\n  var finalDate = new Date(dateWithDays.getTime() + msToAdd);\n  return finalDate;\n}","import isWeekend from \"../isWeekend/index.js\";\nimport toDate from \"../toDate/index.js\";\nimport toInteger from \"../_lib/toInteger/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\nimport isSunday from \"../isSunday/index.js\";\nimport isSaturday from \"../isSaturday/index.js\";\n/**\n * @name addBusinessDays\n * @category Day Helpers\n * @summary Add the specified number of business days (mon - fri) to the given date.\n *\n * @description\n * Add the specified number of business days (mon - fri) to the given date, ignoring weekends.\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of business days to be added. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`.\n * @returns {Date} the new date with the business days added\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Add 10 business days to 1 September 2014:\n * const result = addBusinessDays(new Date(2014, 8, 1), 10)\n * //=> Mon Sep 15 2014 00:00:00 (skipped weekend days)\n */\nexport default function addBusinessDays(dirtyDate, dirtyAmount) {\n  requiredArgs(2, arguments);\n  var date = toDate(dirtyDate);\n  var startedOnWeekend = isWeekend(date);\n  var amount = toInteger(dirtyAmount);\n  if (isNaN(amount)) return new Date(NaN);\n  var hours = date.getHours();\n  var sign = amount < 0 ? -1 : 1;\n  var fullWeeks = toInteger(amount / 5);\n  date.setDate(date.getDate() + fullWeeks * 7);\n\n  // Get remaining days not part of a full week\n  var restDays = Math.abs(amount % 5);\n\n  // Loops over remaining days\n  while (restDays > 0) {\n    date.setDate(date.getDate() + sign);\n    if (!isWeekend(date)) restDays -= 1;\n  }\n\n  // If the date is a weekend day and we reduce a dividable of\n  // 5 from it, we land on a weekend date.\n  // To counter this, we add days accordingly to land on the next business day\n  if (startedOnWeekend && isWeekend(date) && amount !== 0) {\n    // If we're reducing days, we want to add days until we land on a weekday\n    // If we're adding days we want to reduce days until we land on a weekday\n    if (isSaturday(date)) date.setDate(date.getDate() + (sign < 0 ? 2 : -1));\n    if (isSunday(date)) date.setDate(date.getDate() + (sign < 0 ? 1 : -2));\n  }\n\n  // Restore hours to avoid DST lag\n  date.setHours(hours);\n  return date;\n}","import toInteger from \"../_lib/toInteger/index.js\";\nimport toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name addDays\n * @category Day Helpers\n * @summary Add the specified number of days to the given date.\n *\n * @description\n * Add the specified number of days to the given date.\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of days to be added. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`.\n * @returns {Date} - the new date with the days added\n * @throws {TypeError} - 2 arguments required\n *\n * @example\n * // Add 10 days to 1 September 2014:\n * const result = addDays(new Date(2014, 8, 1), 10)\n * //=> Thu Sep 11 2014 00:00:00\n */\nexport default function addDays(dirtyDate, dirtyAmount) {\n  requiredArgs(2, arguments);\n  var date = toDate(dirtyDate);\n  var amount = toInteger(dirtyAmount);\n  if (isNaN(amount)) {\n    return new Date(NaN);\n  }\n  if (!amount) {\n    // If 0 days, no-op to avoid changing times in the hour before end of DST\n    return date;\n  }\n  date.setDate(date.getDate() + amount);\n  return date;\n}","import toInteger from \"../_lib/toInteger/index.js\";\nimport addMilliseconds from \"../addMilliseconds/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\nvar MILLISECONDS_IN_HOUR = 3600000;\n\n/**\n * @name addHours\n * @category Hour Helpers\n * @summary Add the specified number of hours to the given date.\n *\n * @description\n * Add the specified number of hours to the given date.\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of hours to be added. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`.\n * @returns {Date} the new date with the hours added\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Add 2 hours to 10 July 2014 23:00:00:\n * const result = addHours(new Date(2014, 6, 10, 23, 0), 2)\n * //=> Fri Jul 11 2014 01:00:00\n */\nexport default function addHours(dirtyDate, dirtyAmount) {\n  requiredArgs(2, arguments);\n  var amount = toInteger(dirtyAmount);\n  return addMilliseconds(dirtyDate, amount * MILLISECONDS_IN_HOUR);\n}","import toInteger from \"../_lib/toInteger/index.js\";\nimport getISOWeekYear from \"../getISOWeekYear/index.js\";\nimport setISOWeekYear from \"../setISOWeekYear/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name addISOWeekYears\n * @category ISO Week-Numbering Year Helpers\n * @summary Add the specified number of ISO week-numbering years to the given date.\n *\n * @description\n * Add the specified number of ISO week-numbering years to the given date.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of ISO week-numbering years to be added. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`.\n * @returns {Date} the new date with the ISO week-numbering years added\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Add 5 ISO week-numbering years to 2 July 2010:\n * const result = addISOWeekYears(new Date(2010, 6, 2), 5)\n * //=> Fri Jun 26 2015 00:00:00\n */\nexport default function addISOWeekYears(dirtyDate, dirtyAmount) {\n  requiredArgs(2, arguments);\n  var amount = toInteger(dirtyAmount);\n  return setISOWeekYear(dirtyDate, getISOWeekYear(dirtyDate) + amount);\n}","import toInteger from \"../_lib/toInteger/index.js\";\nimport toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name addMilliseconds\n * @category Millisecond Helpers\n * @summary Add the specified number of milliseconds to the given date.\n *\n * @description\n * Add the specified number of milliseconds to the given date.\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of milliseconds to be added. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`.\n * @returns {Date} the new date with the milliseconds added\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Add 750 milliseconds to 10 July 2014 12:45:30.000:\n * const result = addMilliseconds(new Date(2014, 6, 10, 12, 45, 30, 0), 750)\n * //=> Thu Jul 10 2014 12:45:30.750\n */\nexport default function addMilliseconds(dirtyDate, dirtyAmount) {\n  requiredArgs(2, arguments);\n  var timestamp = toDate(dirtyDate).getTime();\n  var amount = toInteger(dirtyAmount);\n  return new Date(timestamp + amount);\n}","import toInteger from \"../_lib/toInteger/index.js\";\nimport addMilliseconds from \"../addMilliseconds/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\nvar MILLISECONDS_IN_MINUTE = 60000;\n\n/**\n * @name addMinutes\n * @category Minute Helpers\n * @summary Add the specified number of minutes to the given date.\n *\n * @description\n * Add the specified number of minutes to the given date.\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of minutes to be added. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`.\n * @returns {Date} the new date with the minutes added\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Add 30 minutes to 10 July 2014 12:00:00:\n * const result = addMinutes(new Date(2014, 6, 10, 12, 0), 30)\n * //=> Thu Jul 10 2014 12:30:00\n */\nexport default function addMinutes(dirtyDate, dirtyAmount) {\n  requiredArgs(2, arguments);\n  var amount = toInteger(dirtyAmount);\n  return addMilliseconds(dirtyDate, amount * MILLISECONDS_IN_MINUTE);\n}","import toInteger from \"../_lib/toInteger/index.js\";\nimport toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name addMonths\n * @category Month Helpers\n * @summary Add the specified number of months to the given date.\n *\n * @description\n * Add the specified number of months to the given date.\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of months to be added. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`.\n * @returns {Date} the new date with the months added\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Add 5 months to 1 September 2014:\n * const result = addMonths(new Date(2014, 8, 1), 5)\n * //=> Sun Feb 01 2015 00:00:00\n */\nexport default function addMonths(dirtyDate, dirtyAmount) {\n  requiredArgs(2, arguments);\n  var date = toDate(dirtyDate);\n  var amount = toInteger(dirtyAmount);\n  if (isNaN(amount)) {\n    return new Date(NaN);\n  }\n  if (!amount) {\n    // If 0 months, no-op to avoid changing times in the hour before end of DST\n    return date;\n  }\n  var dayOfMonth = date.getDate();\n\n  // The JS Date object supports date math by accepting out-of-bounds values for\n  // month, day, etc. For example, new Date(2020, 0, 0) returns 31 Dec 2019 and\n  // new Date(2020, 13, 1) returns 1 Feb 2021.  This is *almost* the behavior we\n  // want except that dates will wrap around the end of a month, meaning that\n  // new Date(2020, 13, 31) will return 3 Mar 2021 not 28 Feb 2021 as desired. So\n  // we'll default to the end of the desired month by adding 1 to the desired\n  // month and using a date of 0 to back up one day to the end of the desired\n  // month.\n  var endOfDesiredMonth = new Date(date.getTime());\n  endOfDesiredMonth.setMonth(date.getMonth() + amount + 1, 0);\n  var daysInMonth = endOfDesiredMonth.getDate();\n  if (dayOfMonth >= daysInMonth) {\n    // If we're already at the end of the month, then this is the correct date\n    // and we're done.\n    return endOfDesiredMonth;\n  } else {\n    // Otherwise, we now know that setting the original day-of-month value won't\n    // cause an overflow, so set the desired day-of-month. Note that we can't\n    // just set the date of `endOfDesiredMonth` because that object may have had\n    // its time changed in the unusual case where where a DST transition was on\n    // the last day of the month and its local time was in the hour skipped or\n    // repeated next to a DST transition.  So we use `date` instead which is\n    // guaranteed to still have the original time.\n    date.setFullYear(endOfDesiredMonth.getFullYear(), endOfDesiredMonth.getMonth(), dayOfMonth);\n    return date;\n  }\n}","import toInteger from \"../_lib/toInteger/index.js\";\nimport addMonths from \"../addMonths/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name addQuarters\n * @category Quarter Helpers\n * @summary Add the specified number of year quarters to the given date.\n *\n * @description\n * Add the specified number of year quarters to the given date.\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of quarters to be added. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`.\n * @returns {Date} the new date with the quarters added\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Add 1 quarter to 1 September 2014:\n * const result = addQuarters(new Date(2014, 8, 1), 1)\n * //=> Mon Dec 01 2014 00:00:00\n */\nexport default function addQuarters(dirtyDate, dirtyAmount) {\n  requiredArgs(2, arguments);\n  var amount = toInteger(dirtyAmount);\n  var months = amount * 3;\n  return addMonths(dirtyDate, months);\n}","import toInteger from \"../_lib/toInteger/index.js\";\nimport addMilliseconds from \"../addMilliseconds/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name addSeconds\n * @category Second Helpers\n * @summary Add the specified number of seconds to the given date.\n *\n * @description\n * Add the specified number of seconds to the given date.\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of seconds to be added. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`.\n * @returns {Date} the new date with the seconds added\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Add 30 seconds to 10 July 2014 12:45:00:\n * const result = addSeconds(new Date(2014, 6, 10, 12, 45, 0), 30)\n * //=> Thu Jul 10 2014 12:45:30\n */\nexport default function addSeconds(dirtyDate, dirtyAmount) {\n  requiredArgs(2, arguments);\n  var amount = toInteger(dirtyAmount);\n  return addMilliseconds(dirtyDate, amount * 1000);\n}","import toInteger from \"../_lib/toInteger/index.js\";\nimport addDays from \"../addDays/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name addWeeks\n * @category Week Helpers\n * @summary Add the specified number of weeks to the given date.\n *\n * @description\n * Add the specified number of week to the given date.\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of weeks to be added. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`.\n * @returns {Date} the new date with the weeks added\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Add 4 weeks to 1 September 2014:\n * const result = addWeeks(new Date(2014, 8, 1), 4)\n * //=> Mon Sep 29 2014 00:00:00\n */\nexport default function addWeeks(dirtyDate, dirtyAmount) {\n  requiredArgs(2, arguments);\n  var amount = toInteger(dirtyAmount);\n  var days = amount * 7;\n  return addDays(dirtyDate, days);\n}","import toInteger from \"../_lib/toInteger/index.js\";\nimport addMonths from \"../addMonths/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name addYears\n * @category Year Helpers\n * @summary Add the specified number of years to the given date.\n *\n * @description\n * Add the specified number of years to the given date.\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of years to be added. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`.\n * @returns {Date} the new date with the years added\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Add 5 years to 1 September 2014:\n * const result = addYears(new Date(2014, 8, 1), 5)\n * //=> Sun Sep 01 2019 00:00:00\n */\nexport default function addYears(dirtyDate, dirtyAmount) {\n  requiredArgs(2, arguments);\n  var amount = toInteger(dirtyAmount);\n  return addMonths(dirtyDate, amount * 12);\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name areIntervalsOverlapping\n * @category Interval Helpers\n * @summary Is the given time interval overlapping with another time interval?\n *\n * @description\n * Is the given time interval overlapping with another time interval? Adjacent intervals do not count as overlapping.\n *\n * @param {Interval} intervalLeft - the first interval to compare. See [Interval]{@link https://date-fns.org/docs/Interval}\n * @param {Interval} intervalRight - the second interval to compare. See [Interval]{@link https://date-fns.org/docs/Interval}\n * @param {Object} [options] - the object with options\n * @param {Boolean} [options.inclusive=false] - whether the comparison is inclusive or not\n * @returns {Boolean} whether the time intervals are overlapping\n * @throws {TypeError} 2 arguments required\n * @throws {RangeError} The start of an interval cannot be after its end\n * @throws {RangeError} Date in interval cannot be `Invalid Date`\n *\n * @example\n * // For overlapping time intervals:\n * areIntervalsOverlapping(\n *   { start: new Date(2014, 0, 10), end: new Date(2014, 0, 20) },\n *   { start: new Date(2014, 0, 17), end: new Date(2014, 0, 21) }\n * )\n * //=> true\n *\n * @example\n * // For non-overlapping time intervals:\n * areIntervalsOverlapping(\n *   { start: new Date(2014, 0, 10), end: new Date(2014, 0, 20) },\n *   { start: new Date(2014, 0, 21), end: new Date(2014, 0, 22) }\n * )\n * //=> false\n *\n * @example\n * // For adjacent time intervals:\n * areIntervalsOverlapping(\n *   { start: new Date(2014, 0, 10), end: new Date(2014, 0, 20) },\n *   { start: new Date(2014, 0, 20), end: new Date(2014, 0, 30) }\n * )\n * //=> false\n *\n * @example\n * // Using the inclusive option:\n * areIntervalsOverlapping(\n *   { start: new Date(2014, 0, 10), end: new Date(2014, 0, 20) },\n *   { start: new Date(2014, 0, 20), end: new Date(2014, 0, 24) }\n * )\n * //=> false\n * areIntervalsOverlapping(\n *   { start: new Date(2014, 0, 10), end: new Date(2014, 0, 20) },\n *   { start: new Date(2014, 0, 20), end: new Date(2014, 0, 24) },\n *   { inclusive: true }\n * )\n * //=> true\n */\nexport default function areIntervalsOverlapping(intervalLeft, intervalRight, options) {\n  requiredArgs(2, arguments);\n  var leftStartTime = toDate(intervalLeft === null || intervalLeft === void 0 ? void 0 : intervalLeft.start).getTime();\n  var leftEndTime = toDate(intervalLeft === null || intervalLeft === void 0 ? void 0 : intervalLeft.end).getTime();\n  var rightStartTime = toDate(intervalRight === null || intervalRight === void 0 ? void 0 : intervalRight.start).getTime();\n  var rightEndTime = toDate(intervalRight === null || intervalRight === void 0 ? void 0 : intervalRight.end).getTime();\n\n  // Throw an exception if start date is after end date or if any date is `Invalid Date`\n  if (!(leftStartTime <= leftEndTime && rightStartTime <= rightEndTime)) {\n    throw new RangeError('Invalid interval');\n  }\n  if (options !== null && options !== void 0 && options.inclusive) {\n    return leftStartTime <= rightEndTime && rightStartTime <= leftEndTime;\n  }\n  return leftStartTime < rightEndTime && rightStartTime < leftEndTime;\n}","import max from \"../max/index.js\";\nimport min from \"../min/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name clamp\n * @category Interval Helpers\n * @summary Return a date bounded by the start and the end of the given interval\n *\n * @description\n * Clamps a date to the lower bound with the start of the interval and the upper\n * bound with the end of the interval.\n *\n * - When the date is less than the start of the interval, the start is returned.\n * - When the date is greater than the end of the interval, the end is returned.\n * - Otherwise the date is returned.\n *\n * @example\n * // What is Mar, 21, 2021 bounded to an interval starting at Mar, 22, 2021 and ending at Apr, 01, 2021\n * const result = clamp(new Date(2021, 2, 21), {\n *   start: new Date(2021, 2, 22),\n *   end: new Date(2021, 3, 1),\n * })\n * //=> Mon Mar 22 2021 00:00:00\n *\n * @param {Date | Number} date - the date to be bounded\n * @param {Interval} interval - the interval to bound to\n * @returns {Date} the date bounded by the start and the end of the interval\n * @throws {TypeError} 2 arguments required\n */\nexport default function clamp(date, _ref) {\n  var start = _ref.start,\n    end = _ref.end;\n  requiredArgs(2, arguments);\n  return min([max([date, start]), end]);\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name closestIndexTo\n * @category Common Helpers\n * @summary Return an index of the closest date from the array comparing to the given date.\n *\n * @description\n * Return an index of the closest date from the array comparing to the given date.\n *\n * @param {Date | Number} dateToCompare - the date to compare with\n * @param {Array<Date> | Array<number>} datesArray - the array to search\n * @returns {Number | undefined} an index of the date closest to the given date or undefined if no valid value is given\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Which date is closer to 6 September 2015?\n * const dateToCompare = new Date(2015, 8, 6)\n * const datesArray = [\n *   new Date(2015, 0, 1),\n *   new Date(2016, 0, 1),\n *   new Date(2017, 0, 1)\n * ]\n * const result = closestIndexTo(dateToCompare, datesArray)\n * //=> 1\n */\nexport default function closestIndexTo(dirtyDateToCompare, dirtyDatesArray) {\n  requiredArgs(2, arguments);\n  var dateToCompare = toDate(dirtyDateToCompare);\n  if (isNaN(Number(dateToCompare))) return NaN;\n  var timeToCompare = dateToCompare.getTime();\n  var datesArray;\n  // `dirtyDatesArray` is undefined or null\n  if (dirtyDatesArray == null) {\n    datesArray = [];\n\n    // `dirtyDatesArray` is Array, Set or Map, or object with custom `forEach` method\n  } else if (typeof dirtyDatesArray.forEach === 'function') {\n    datesArray = dirtyDatesArray;\n\n    // If `dirtyDatesArray` is Array-like Object, convert to Array. Otherwise, make it empty Array\n  } else {\n    datesArray = Array.prototype.slice.call(dirtyDatesArray);\n  }\n  var result;\n  var minDistance;\n  datesArray.forEach(function (dirtyDate, index) {\n    var currentDate = toDate(dirtyDate);\n    if (isNaN(Number(currentDate))) {\n      result = NaN;\n      minDistance = NaN;\n      return;\n    }\n    var distance = Math.abs(timeToCompare - currentDate.getTime());\n    if (result == null || distance < Number(minDistance)) {\n      result = index;\n      minDistance = distance;\n    }\n  });\n  return result;\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name closestTo\n * @category Common Helpers\n * @summary Return a date from the array closest to the given date.\n *\n * @description\n * Return a date from the array closest to the given date.\n *\n * @param {Date | Number} dateToCompare - the date to compare with\n * @param {Array<Date> | Array<number>} datesArray - the array to search\n * @returns {Date | undefined} the date from the array closest to the given date or undefined if no valid value is given\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Which date is closer to 6 September 2015: 1 January 2000 or 1 January 2030?\n * const dateToCompare = new Date(2015, 8, 6)\n * const result = closestTo(dateToCompare, [\n *   new Date(2000, 0, 1),\n *   new Date(2030, 0, 1)\n * ])\n * //=> Tue Jan 01 2030 00:00:00\n */\nexport default function closestTo(dirtyDateToCompare, dirtyDatesArray) {\n  requiredArgs(2, arguments);\n  var dateToCompare = toDate(dirtyDateToCompare);\n  if (isNaN(Number(dateToCompare))) return new Date(NaN);\n  var timeToCompare = dateToCompare.getTime();\n  var datesArray;\n  // `dirtyDatesArray` is undefined or null\n  if (dirtyDatesArray == null) {\n    datesArray = [];\n\n    // `dirtyDatesArray` is Array, Set or Map, or object with custom `forEach` method\n  } else if (typeof dirtyDatesArray.forEach === 'function') {\n    datesArray = dirtyDatesArray;\n\n    // If `dirtyDatesArray` is Array-like Object, convert to Array. Otherwise, make it empty Array\n  } else {\n    datesArray = Array.prototype.slice.call(dirtyDatesArray);\n  }\n  var result;\n  var minDistance;\n  datesArray.forEach(function (dirtyDate) {\n    var currentDate = toDate(dirtyDate);\n    if (isNaN(Number(currentDate))) {\n      result = new Date(NaN);\n      minDistance = NaN;\n      return;\n    }\n    var distance = Math.abs(timeToCompare - currentDate.getTime());\n    if (result == null || distance < Number(minDistance)) {\n      result = currentDate;\n      minDistance = distance;\n    }\n  });\n  return result;\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name compareAsc\n * @category Common Helpers\n * @summary Compare the two dates and return -1, 0 or 1.\n *\n * @description\n * Compare the two dates and return 1 if the first date is after the second,\n * -1 if the first date is before the second or 0 if dates are equal.\n *\n * @param {Date|Number} dateLeft - the first date to compare\n * @param {Date|Number} dateRight - the second date to compare\n * @returns {Number} the result of the comparison\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Compare 11 February 1987 and 10 July 1989:\n * const result = compareAsc(new Date(1987, 1, 11), new Date(1989, 6, 10))\n * //=> -1\n *\n * @example\n * // Sort the array of dates:\n * const result = [\n *   new Date(1995, 6, 2),\n *   new Date(1987, 1, 11),\n *   new Date(1989, 6, 10)\n * ].sort(compareAsc)\n * //=> [\n * //   Wed Feb 11 1987 00:00:00,\n * //   Mon Jul 10 1989 00:00:00,\n * //   Sun Jul 02 1995 00:00:00\n * // ]\n */\nexport default function compareAsc(dirtyDateLeft, dirtyDateRight) {\n  requiredArgs(2, arguments);\n  var dateLeft = toDate(dirtyDateLeft);\n  var dateRight = toDate(dirtyDateRight);\n  var diff = dateLeft.getTime() - dateRight.getTime();\n  if (diff < 0) {\n    return -1;\n  } else if (diff > 0) {\n    return 1;\n    // Return 0 if diff is 0; return NaN if diff is NaN\n  } else {\n    return diff;\n  }\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name compareDesc\n * @category Common Helpers\n * @summary Compare the two dates reverse chronologically and return -1, 0 or 1.\n *\n * @description\n * Compare the two dates and return -1 if the first date is after the second,\n * 1 if the first date is before the second or 0 if dates are equal.\n *\n * @param {Date|Number} dateLeft - the first date to compare\n * @param {Date|Number} dateRight - the second date to compare\n * @returns {Number} the result of the comparison\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Compare 11 February 1987 and 10 July 1989 reverse chronologically:\n * const result = compareDesc(new Date(1987, 1, 11), new Date(1989, 6, 10))\n * //=> 1\n *\n * @example\n * // Sort the array of dates in reverse chronological order:\n * const result = [\n *   new Date(1995, 6, 2),\n *   new Date(1987, 1, 11),\n *   new Date(1989, 6, 10)\n * ].sort(compareDesc)\n * //=> [\n * //   Sun Jul 02 1995 00:00:00,\n * //   Mon Jul 10 1989 00:00:00,\n * //   Wed Feb 11 1987 00:00:00\n * // ]\n */\nexport default function compareDesc(dirtyDateLeft, dirtyDateRight) {\n  requiredArgs(2, arguments);\n  var dateLeft = toDate(dirtyDateLeft);\n  var dateRight = toDate(dirtyDateRight);\n  var diff = dateLeft.getTime() - dateRight.getTime();\n  if (diff > 0) {\n    return -1;\n  } else if (diff < 0) {\n    return 1;\n    // Return 0 if diff is 0; return NaN if diff is NaN\n  } else {\n    return diff;\n  }\n}","/**\n * Days in 1 week.\n *\n * @name daysInWeek\n * @constant\n * @type {number}\n * @default\n */\nexport var daysInWeek = 7;\n\n/**\n * Days in 1 year\n * One years equals 365.2425 days according to the formula:\n *\n * > Leap year occures every 4 years, except for years that are divisable by 100 and not divisable by 400.\n * > 1 mean year = (365+1/4-1/100+1/400) days = 365.2425 days\n *\n * @name daysInYear\n * @constant\n * @type {number}\n * @default\n */\nexport var daysInYear = 365.2425;\n\n/**\n * Maximum allowed time.\n *\n * @name maxTime\n * @constant\n * @type {number}\n * @default\n */\nexport var maxTime = Math.pow(10, 8) * 24 * 60 * 60 * 1000;\n\n/**\n * Milliseconds in 1 minute\n *\n * @name millisecondsInMinute\n * @constant\n * @type {number}\n * @default\n */\nexport var millisecondsInMinute = 60000;\n\n/**\n * Milliseconds in 1 hour\n *\n * @name millisecondsInHour\n * @constant\n * @type {number}\n * @default\n */\nexport var millisecondsInHour = 3600000;\n\n/**\n * Milliseconds in 1 second\n *\n * @name millisecondsInSecond\n * @constant\n * @type {number}\n * @default\n */\nexport var millisecondsInSecond = 1000;\n\n/**\n * Minimum allowed time.\n *\n * @name minTime\n * @constant\n * @type {number}\n * @default\n */\nexport var minTime = -maxTime;\n\n/**\n * Minutes in 1 hour\n *\n * @name minutesInHour\n * @constant\n * @type {number}\n * @default\n */\nexport var minutesInHour = 60;\n\n/**\n * Months in 1 quarter\n *\n * @name monthsInQuarter\n * @constant\n * @type {number}\n * @default\n */\nexport var monthsInQuarter = 3;\n\n/**\n * Months in 1 year\n *\n * @name monthsInYear\n * @constant\n * @type {number}\n * @default\n */\nexport var monthsInYear = 12;\n\n/**\n * Quarters in 1 year\n *\n * @name quartersInYear\n * @constant\n * @type {number}\n * @default\n */\nexport var quartersInYear = 4;\n\n/**\n * Seconds in 1 hour\n *\n * @name secondsInHour\n * @constant\n * @type {number}\n * @default\n */\nexport var secondsInHour = 3600;\n\n/**\n * Seconds in 1 minute\n *\n * @name secondsInMinute\n * @constant\n * @type {number}\n * @default\n */\nexport var secondsInMinute = 60;\n\n/**\n * Seconds in 1 day\n *\n * @name secondsInDay\n * @constant\n * @type {number}\n * @default\n */\nexport var secondsInDay = secondsInHour * 24;\n\n/**\n * Seconds in 1 week\n *\n * @name secondsInWeek\n * @constant\n * @type {number}\n * @default\n */\nexport var secondsInWeek = secondsInDay * 7;\n\n/**\n * Seconds in 1 year\n *\n * @name secondsInYear\n * @constant\n * @type {number}\n * @default\n */\nexport var secondsInYear = secondsInDay * daysInYear;\n\n/**\n * Seconds in 1 month\n *\n * @name secondsInMonth\n * @constant\n * @type {number}\n * @default\n */\nexport var secondsInMonth = secondsInYear / 12;\n\n/**\n * Seconds in 1 quarter\n *\n * @name secondsInQuarter\n * @constant\n * @type {number}\n * @default\n */\nexport var secondsInQuarter = secondsInMonth * 3;","import requiredArgs from \"../_lib/requiredArgs/index.js\";\nimport { daysInWeek } from \"../constants/index.js\";\n/**\n * @name daysToWeeks\n * @category Conversion Helpers\n * @summary Convert days to weeks.\n *\n * @description\n * Convert a number of days to a full number of weeks.\n *\n * @param {number} days - number of days to be converted\n *\n * @returns {number} the number of days converted in weeks\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Convert 14 days to weeks:\n * const result = daysToWeeks(14)\n * //=> 2\n *\n * @example\n * // It uses floor rounding:\n * const result = daysToWeeks(13)\n * //=> 1\n */\nexport default function daysToWeeks(days) {\n  requiredArgs(1, arguments);\n  var weeks = days / daysInWeek;\n  return Math.floor(weeks);\n}","import addDays from \"../addDays/index.js\";\nimport differenceInCalendarDays from \"../differenceInCalendarDays/index.js\";\nimport isSameDay from \"../isSameDay/index.js\";\nimport isValid from \"../isValid/index.js\";\nimport isWeekend from \"../isWeekend/index.js\";\nimport toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\nimport toInteger from \"../_lib/toInteger/index.js\";\n/**\n * @name differenceInBusinessDays\n * @category Day Helpers\n * @summary Get the number of business days between the given dates.\n *\n * @description\n * Get the number of business day periods between the given dates.\n * Business days being days that arent in the weekend.\n * Like `differenceInCalendarDays`, the function removes the times from\n * the dates before calculating the difference.\n *\n * @param {Date|Number} dateLeft - the later date\n * @param {Date|Number} dateRight - the earlier date\n * @returns {Number} the number of business days\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // How many business days are between\n * // 10 January 2014 and 20 July 2014?\n * const result = differenceInBusinessDays(\n *   new Date(2014, 6, 20),\n *   new Date(2014, 0, 10)\n * )\n * //=> 136\n *\n * // How many business days are between\n * // 30 November 2021 and 1 November 2021?\n * const result = differenceInBusinessDays(\n *   new Date(2021, 10, 30),\n *   new Date(2021, 10, 1)\n * )\n * //=> 21\n *\n * // How many business days are between\n * // 1 November 2021 and 1 December 2021?\n * const result = differenceInBusinessDays(\n *   new Date(2021, 10, 1),\n *   new Date(2021, 11, 1)\n * )\n * //=> -22\n *\n * // How many business days are between\n * // 1 November 2021 and 1 November 2021 ?\n * const result = differenceInBusinessDays(\n *   new Date(2021, 10, 1),\n *   new Date(2021, 10, 1)\n * )\n * //=> 0\n */\nexport default function differenceInBusinessDays(dirtyDateLeft, dirtyDateRight) {\n  requiredArgs(2, arguments);\n  var dateLeft = toDate(dirtyDateLeft);\n  var dateRight = toDate(dirtyDateRight);\n  if (!isValid(dateLeft) || !isValid(dateRight)) return NaN;\n  var calendarDifference = differenceInCalendarDays(dateLeft, dateRight);\n  var sign = calendarDifference < 0 ? -1 : 1;\n  var weeks = toInteger(calendarDifference / 7);\n  var result = weeks * 5;\n  dateRight = addDays(dateRight, weeks * 7);\n\n  // the loop below will run at most 6 times to account for the remaining days that don't makeup a full week\n  while (!isSameDay(dateLeft, dateRight)) {\n    // sign is used to account for both negative and positive differences\n    result += isWeekend(dateRight) ? 0 : sign;\n    dateRight = addDays(dateRight, sign);\n  }\n  return result === 0 ? 0 : result;\n}","import getTimezoneOffsetInMilliseconds from \"../_lib/getTimezoneOffsetInMilliseconds/index.js\";\nimport startOfDay from \"../startOfDay/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\nvar MILLISECONDS_IN_DAY = 86400000;\n\n/**\n * @name differenceInCalendarDays\n * @category Day Helpers\n * @summary Get the number of calendar days between the given dates.\n *\n * @description\n * Get the number of calendar days between the given dates. This means that the times are removed\n * from the dates and then the difference in days is calculated.\n *\n * @param {Date|Number} dateLeft - the later date\n * @param {Date|Number} dateRight - the earlier date\n * @returns {Number} the number of calendar days\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // How many calendar days are between\n * // 2 July 2011 23:00:00 and 2 July 2012 00:00:00?\n * const result = differenceInCalendarDays(\n *   new Date(2012, 6, 2, 0, 0),\n *   new Date(2011, 6, 2, 23, 0)\n * )\n * //=> 366\n * // How many calendar days are between\n * // 2 July 2011 23:59:00 and 3 July 2011 00:01:00?\n * const result = differenceInCalendarDays(\n *   new Date(2011, 6, 3, 0, 1),\n *   new Date(2011, 6, 2, 23, 59)\n * )\n * //=> 1\n */\nexport default function differenceInCalendarDays(dirtyDateLeft, dirtyDateRight) {\n  requiredArgs(2, arguments);\n  var startOfDayLeft = startOfDay(dirtyDateLeft);\n  var startOfDayRight = startOfDay(dirtyDateRight);\n  var timestampLeft = startOfDayLeft.getTime() - getTimezoneOffsetInMilliseconds(startOfDayLeft);\n  var timestampRight = startOfDayRight.getTime() - getTimezoneOffsetInMilliseconds(startOfDayRight);\n\n  // Round the number of days to the nearest integer\n  // because the number of milliseconds in a day is not constant\n  // (e.g. it's different in the day of the daylight saving time clock shift)\n  return Math.round((timestampLeft - timestampRight) / MILLISECONDS_IN_DAY);\n}","import getISOWeekYear from \"../getISOWeekYear/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name differenceInCalendarISOWeekYears\n * @category ISO Week-Numbering Year Helpers\n * @summary Get the number of calendar ISO week-numbering years between the given dates.\n *\n * @description\n * Get the number of calendar ISO week-numbering years between the given dates.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * @param {Date|Number} dateLeft - the later date\n * @param {Date|Number} dateRight - the earlier date\n * @returns {Number} the number of calendar ISO week-numbering years\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // How many calendar ISO week-numbering years are 1 January 2010 and 1 January 2012?\n * const result = differenceInCalendarISOWeekYears(\n *   new Date(2012, 0, 1),\n *   new Date(2010, 0, 1)\n * )\n * //=> 2\n */\nexport default function differenceInCalendarISOWeekYears(dirtyDateLeft, dirtyDateRight) {\n  requiredArgs(2, arguments);\n  return getISOWeekYear(dirtyDateLeft) - getISOWeekYear(dirtyDateRight);\n}","import getTimezoneOffsetInMilliseconds from \"../_lib/getTimezoneOffsetInMilliseconds/index.js\";\nimport startOfISOWeek from \"../startOfISOWeek/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\nvar MILLISECONDS_IN_WEEK = 604800000;\n\n/**\n * @name differenceInCalendarISOWeeks\n * @category ISO Week Helpers\n * @summary Get the number of calendar ISO weeks between the given dates.\n *\n * @description\n * Get the number of calendar ISO weeks between the given dates.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * @param {Date|Number} dateLeft - the later date\n * @param {Date|Number} dateRight - the earlier date\n * @returns {Number} the number of calendar ISO weeks\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // How many calendar ISO weeks are between 6 July 2014 and 21 July 2014?\n * const result = differenceInCalendarISOWeeks(\n *   new Date(2014, 6, 21),\n *   new Date(2014, 6, 6)\n * )\n * //=> 3\n */\nexport default function differenceInCalendarISOWeeks(dirtyDateLeft, dirtyDateRight) {\n  requiredArgs(2, arguments);\n  var startOfISOWeekLeft = startOfISOWeek(dirtyDateLeft);\n  var startOfISOWeekRight = startOfISOWeek(dirtyDateRight);\n  var timestampLeft = startOfISOWeekLeft.getTime() - getTimezoneOffsetInMilliseconds(startOfISOWeekLeft);\n  var timestampRight = startOfISOWeekRight.getTime() - getTimezoneOffsetInMilliseconds(startOfISOWeekRight);\n\n  // Round the number of days to the nearest integer\n  // because the number of milliseconds in a week is not constant\n  // (e.g. it's different in the week of the daylight saving time clock shift)\n  return Math.round((timestampLeft - timestampRight) / MILLISECONDS_IN_WEEK);\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name differenceInCalendarMonths\n * @category Month Helpers\n * @summary Get the number of calendar months between the given dates.\n *\n * @description\n * Get the number of calendar months between the given dates.\n *\n * @param {Date|Number} dateLeft - the later date\n * @param {Date|Number} dateRight - the earlier date\n * @returns {Number} the number of calendar months\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // How many calendar months are between 31 January 2014 and 1 September 2014?\n * const result = differenceInCalendarMonths(\n *   new Date(2014, 8, 1),\n *   new Date(2014, 0, 31)\n * )\n * //=> 8\n */\nexport default function differenceInCalendarMonths(dirtyDateLeft, dirtyDateRight) {\n  requiredArgs(2, arguments);\n  var dateLeft = toDate(dirtyDateLeft);\n  var dateRight = toDate(dirtyDateRight);\n  var yearDiff = dateLeft.getFullYear() - dateRight.getFullYear();\n  var monthDiff = dateLeft.getMonth() - dateRight.getMonth();\n  return yearDiff * 12 + monthDiff;\n}","import getQuarter from \"../getQuarter/index.js\";\nimport toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name differenceInCalendarQuarters\n * @category Quarter Helpers\n * @summary Get the number of calendar quarters between the given dates.\n *\n * @description\n * Get the number of calendar quarters between the given dates.\n *\n * @param {Date|Number} dateLeft - the later date\n * @param {Date|Number} dateRight - the earlier date\n * @returns {Number} the number of calendar quarters\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // How many calendar quarters are between 31 December 2013 and 2 July 2014?\n * const result = differenceInCalendarQuarters(\n *   new Date(2014, 6, 2),\n *   new Date(2013, 11, 31)\n * )\n * //=> 3\n */\nexport default function differenceInCalendarQuarters(dirtyDateLeft, dirtyDateRight) {\n  requiredArgs(2, arguments);\n  var dateLeft = toDate(dirtyDateLeft);\n  var dateRight = toDate(dirtyDateRight);\n  var yearDiff = dateLeft.getFullYear() - dateRight.getFullYear();\n  var quarterDiff = getQuarter(dateLeft) - getQuarter(dateRight);\n  return yearDiff * 4 + quarterDiff;\n}","import startOfWeek from \"../startOfWeek/index.js\";\nimport getTimezoneOffsetInMilliseconds from \"../_lib/getTimezoneOffsetInMilliseconds/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\nvar MILLISECONDS_IN_WEEK = 604800000;\n\n/**\n * @name differenceInCalendarWeeks\n * @category Week Helpers\n * @summary Get the number of calendar weeks between the given dates.\n *\n * @description\n * Get the number of calendar weeks between the given dates.\n *\n * @param {Date|Number} dateLeft - the later date\n * @param {Date|Number} dateRight - the earlier date\n * @param {Object} [options] - an object with options.\n * @param {Locale} [options.locale=defaultLocale] - the locale object. See [Locale]{@link https://date-fns.org/docs/Locale}\n * @param {0|1|2|3|4|5|6} [options.weekStartsOn=0] - the index of the first day of the week (0 - Sunday)\n * @returns {Number} the number of calendar weeks\n * @throws {TypeError} 2 arguments required\n * @throws {RangeError} `options.weekStartsOn` must be between 0 and 6\n *\n * @example\n * // How many calendar weeks are between 5 July 2014 and 20 July 2014?\n * const result = differenceInCalendarWeeks(\n *   new Date(2014, 6, 20),\n *   new Date(2014, 6, 5)\n * )\n * //=> 3\n *\n * @example\n * // If the week starts on Monday,\n * // how many calendar weeks are between 5 July 2014 and 20 July 2014?\n * const result = differenceInCalendarWeeks(\n *   new Date(2014, 6, 20),\n *   new Date(2014, 6, 5),\n *   { weekStartsOn: 1 }\n * )\n * //=> 2\n */\nexport default function differenceInCalendarWeeks(dirtyDateLeft, dirtyDateRight, options) {\n  requiredArgs(2, arguments);\n  var startOfWeekLeft = startOfWeek(dirtyDateLeft, options);\n  var startOfWeekRight = startOfWeek(dirtyDateRight, options);\n  var timestampLeft = startOfWeekLeft.getTime() - getTimezoneOffsetInMilliseconds(startOfWeekLeft);\n  var timestampRight = startOfWeekRight.getTime() - getTimezoneOffsetInMilliseconds(startOfWeekRight);\n\n  // Round the number of days to the nearest integer\n  // because the number of milliseconds in a week is not constant\n  // (e.g. it's different in the week of the daylight saving time clock shift)\n  return Math.round((timestampLeft - timestampRight) / MILLISECONDS_IN_WEEK);\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name differenceInCalendarYears\n * @category Year Helpers\n * @summary Get the number of calendar years between the given dates.\n *\n * @description\n * Get the number of calendar years between the given dates.\n *\n * @param {Date|Number} dateLeft - the later date\n * @param {Date|Number} dateRight - the earlier date\n * @returns {Number} the number of calendar years\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // How many calendar years are between 31 December 2013 and 11 February 2015?\n * const result = differenceInCalendarYears(\n *   new Date(2015, 1, 11),\n *   new Date(2013, 11, 31)\n * )\n * //=> 2\n */\nexport default function differenceInCalendarYears(dirtyDateLeft, dirtyDateRight) {\n  requiredArgs(2, arguments);\n  var dateLeft = toDate(dirtyDateLeft);\n  var dateRight = toDate(dirtyDateRight);\n  return dateLeft.getFullYear() - dateRight.getFullYear();\n}","import toDate from \"../toDate/index.js\";\nimport differenceInCalendarDays from \"../differenceInCalendarDays/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\"; // Like `compareAsc` but uses local time not UTC, which is needed\n// for accurate equality comparisons of UTC timestamps that end up\n// having the same representation in local time, e.g. one hour before\n// DST ends vs. the instant that DST ends.\nfunction compareLocalAsc(dateLeft, dateRight) {\n  var diff = dateLeft.getFullYear() - dateRight.getFullYear() || dateLeft.getMonth() - dateRight.getMonth() || dateLeft.getDate() - dateRight.getDate() || dateLeft.getHours() - dateRight.getHours() || dateLeft.getMinutes() - dateRight.getMinutes() || dateLeft.getSeconds() - dateRight.getSeconds() || dateLeft.getMilliseconds() - dateRight.getMilliseconds();\n  if (diff < 0) {\n    return -1;\n  } else if (diff > 0) {\n    return 1;\n    // Return 0 if diff is 0; return NaN if diff is NaN\n  } else {\n    return diff;\n  }\n}\n\n/**\n * @name differenceInDays\n * @category Day Helpers\n * @summary Get the number of full days between the given dates.\n *\n * @description\n * Get the number of full day periods between two dates. Fractional days are\n * truncated towards zero.\n *\n * One \"full day\" is the distance between a local time in one day to the same\n * local time on the next or previous day. A full day can sometimes be less than\n * or more than 24 hours if a daylight savings change happens between two dates.\n *\n * To ignore DST and only measure exact 24-hour periods, use this instead:\n * `Math.floor(differenceInHours(dateLeft, dateRight)/24)|0`.\n *\n *\n * @param {Date|Number} dateLeft - the later date\n * @param {Date|Number} dateRight - the earlier date\n * @returns {Number} the number of full days according to the local timezone\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // How many full days are between\n * // 2 July 2011 23:00:00 and 2 July 2012 00:00:00?\n * const result = differenceInDays(\n *   new Date(2012, 6, 2, 0, 0),\n *   new Date(2011, 6, 2, 23, 0)\n * )\n * //=> 365\n * // How many full days are between\n * // 2 July 2011 23:59:00 and 3 July 2011 00:01:00?\n * const result = differenceInDays(\n *   new Date(2011, 6, 3, 0, 1),\n *   new Date(2011, 6, 2, 23, 59)\n * )\n * //=> 0\n * // How many full days are between\n * // 1 March 2020 0:00 and 1 June 2020 0:00 ?\n * // Note: because local time is used, the\n * // result will always be 92 days, even in\n * // time zones where DST starts and the\n * // period has only 92*24-1 hours.\n * const result = differenceInDays(\n *   new Date(2020, 5, 1),\n *   new Date(2020, 2, 1)\n * )\n//=> 92\n */\nexport default function differenceInDays(dirtyDateLeft, dirtyDateRight) {\n  requiredArgs(2, arguments);\n  var dateLeft = toDate(dirtyDateLeft);\n  var dateRight = toDate(dirtyDateRight);\n  var sign = compareLocalAsc(dateLeft, dateRight);\n  var difference = Math.abs(differenceInCalendarDays(dateLeft, dateRight));\n  dateLeft.setDate(dateLeft.getDate() - sign * difference);\n\n  // Math.abs(diff in full days - diff in calendar days) === 1 if last calendar day is not full\n  // If so, result must be decreased by 1 in absolute value\n  var isLastDayNotFull = Number(compareLocalAsc(dateLeft, dateRight) === -sign);\n  var result = sign * (difference - isLastDayNotFull);\n  // Prevent negative zero\n  return result === 0 ? 0 : result;\n}","import { millisecondsInHour } from \"../constants/index.js\";\nimport differenceInMilliseconds from \"../differenceInMilliseconds/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\nimport { getRoundingMethod } from \"../_lib/roundingMethods/index.js\";\n/**\n * @name differenceInHours\n * @category Hour Helpers\n * @summary Get the number of hours between the given dates.\n *\n * @description\n * Get the number of hours between the given dates.\n *\n * @param {Date|Number} dateLeft - the later date\n * @param {Date|Number} dateRight - the earlier date\n * @param {Object} [options] - an object with options.\n * @param {String} [options.roundingMethod='trunc'] - a rounding method (`ceil`, `floor`, `round` or `trunc`)\n * @returns {Number} the number of hours\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // How many hours are between 2 July 2014 06:50:00 and 2 July 2014 19:00:00?\n * const result = differenceInHours(\n *   new Date(2014, 6, 2, 19, 0),\n *   new Date(2014, 6, 2, 6, 50)\n * )\n * //=> 12\n */\nexport default function differenceInHours(dateLeft, dateRight, options) {\n  requiredArgs(2, arguments);\n  var diff = differenceInMilliseconds(dateLeft, dateRight) / millisecondsInHour;\n  return getRoundingMethod(options === null || options === void 0 ? void 0 : options.roundingMethod)(diff);\n}","import toDate from \"../toDate/index.js\";\nimport differenceInCalendarISOWeekYears from \"../differenceInCalendarISOWeekYears/index.js\";\nimport compareAsc from \"../compareAsc/index.js\";\nimport subISOWeekYears from \"../subISOWeekYears/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name differenceInISOWeekYears\n * @category ISO Week-Numbering Year Helpers\n * @summary Get the number of full ISO week-numbering years between the given dates.\n *\n * @description\n * Get the number of full ISO week-numbering years between the given dates.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * @param {Date|Number} dateLeft - the later date\n * @param {Date|Number} dateRight - the earlier date\n * @returns {Number} the number of full ISO week-numbering years\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // How many full ISO week-numbering years are between 1 January 2010 and 1 January 2012?\n * const result = differenceInISOWeekYears(\n *   new Date(2012, 0, 1),\n *   new Date(2010, 0, 1)\n * )\n * //=> 1\n */\nexport default function differenceInISOWeekYears(dirtyDateLeft, dirtyDateRight) {\n  requiredArgs(2, arguments);\n  var dateLeft = toDate(dirtyDateLeft);\n  var dateRight = toDate(dirtyDateRight);\n  var sign = compareAsc(dateLeft, dateRight);\n  var difference = Math.abs(differenceInCalendarISOWeekYears(dateLeft, dateRight));\n  dateLeft = subISOWeekYears(dateLeft, sign * difference);\n\n  // Math.abs(diff in full ISO years - diff in calendar ISO years) === 1\n  // if last calendar ISO year is not full\n  // If so, result must be decreased by 1 in absolute value\n  var isLastISOWeekYearNotFull = Number(compareAsc(dateLeft, dateRight) === -sign);\n  var result = sign * (difference - isLastISOWeekYearNotFull);\n  // Prevent negative zero\n  return result === 0 ? 0 : result;\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name differenceInMilliseconds\n * @category Millisecond Helpers\n * @summary Get the number of milliseconds between the given dates.\n *\n * @description\n * Get the number of milliseconds between the given dates.\n *\n * @param {Date|Number} dateLeft - the later date\n * @param {Date|Number} dateRight - the earlier date\n * @returns {Number} the number of milliseconds\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // How many milliseconds are between\n * // 2 July 2014 12:30:20.600 and 2 July 2014 12:30:21.700?\n * const result = differenceInMilliseconds(\n *   new Date(2014, 6, 2, 12, 30, 21, 700),\n *   new Date(2014, 6, 2, 12, 30, 20, 600)\n * )\n * //=> 1100\n */\nexport default function differenceInMilliseconds(dateLeft, dateRight) {\n  requiredArgs(2, arguments);\n  return toDate(dateLeft).getTime() - toDate(dateRight).getTime();\n}","import { millisecondsInMinute } from \"../constants/index.js\";\nimport differenceInMilliseconds from \"../differenceInMilliseconds/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\nimport { getRoundingMethod } from \"../_lib/roundingMethods/index.js\";\n/**\n * @name differenceInMinutes\n * @category Minute Helpers\n * @summary Get the number of minutes between the given dates.\n *\n * @description\n * Get the signed number of full (rounded towards 0) minutes between the given dates.\n *\n * @param {Date|Number} dateLeft - the later date\n * @param {Date|Number} dateRight - the earlier date\n * @param {Object} [options] - an object with options.\n * @param {String} [options.roundingMethod='trunc'] - a rounding method (`ceil`, `floor`, `round` or `trunc`)\n * @returns {Number} the number of minutes\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // How many minutes are between 2 July 2014 12:07:59 and 2 July 2014 12:20:00?\n * const result = differenceInMinutes(\n *   new Date(2014, 6, 2, 12, 20, 0),\n *   new Date(2014, 6, 2, 12, 7, 59)\n * )\n * //=> 12\n *\n * @example\n * // How many minutes are between 10:01:59 and 10:00:00\n * const result = differenceInMinutes(\n *   new Date(2000, 0, 1, 10, 0, 0),\n *   new Date(2000, 0, 1, 10, 1, 59)\n * )\n * //=> -1\n */\nexport default function differenceInMinutes(dateLeft, dateRight, options) {\n  requiredArgs(2, arguments);\n  var diff = differenceInMilliseconds(dateLeft, dateRight) / millisecondsInMinute;\n  return getRoundingMethod(options === null || options === void 0 ? void 0 : options.roundingMethod)(diff);\n}","import toDate from \"../toDate/index.js\";\nimport differenceInCalendarMonths from \"../differenceInCalendarMonths/index.js\";\nimport compareAsc from \"../compareAsc/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\nimport isLastDayOfMonth from \"../isLastDayOfMonth/index.js\";\n/**\n * @name differenceInMonths\n * @category Month Helpers\n * @summary Get the number of full months between the given dates.\n *\n * @description\n * Get the number of full months between the given dates using trunc as a default rounding method.\n *\n * @param {Date|Number} dateLeft - the later date\n * @param {Date|Number} dateRight - the earlier date\n * @returns {Number} the number of full months\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // How many full months are between 31 January 2014 and 1 September 2014?\n * const result = differenceInMonths(new Date(2014, 8, 1), new Date(2014, 0, 31))\n * //=> 7\n */\nexport default function differenceInMonths(dirtyDateLeft, dirtyDateRight) {\n  requiredArgs(2, arguments);\n  var dateLeft = toDate(dirtyDateLeft);\n  var dateRight = toDate(dirtyDateRight);\n  var sign = compareAsc(dateLeft, dateRight);\n  var difference = Math.abs(differenceInCalendarMonths(dateLeft, dateRight));\n  var result;\n\n  // Check for the difference of less than month\n  if (difference < 1) {\n    result = 0;\n  } else {\n    if (dateLeft.getMonth() === 1 && dateLeft.getDate() > 27) {\n      // This will check if the date is end of Feb and assign a higher end of month date\n      // to compare it with Jan\n      dateLeft.setDate(30);\n    }\n    dateLeft.setMonth(dateLeft.getMonth() - sign * difference);\n\n    // Math.abs(diff in full months - diff in calendar months) === 1 if last calendar month is not full\n    // If so, result must be decreased by 1 in absolute value\n    var isLastMonthNotFull = compareAsc(dateLeft, dateRight) === -sign;\n\n    // Check for cases of one full calendar month\n    if (isLastDayOfMonth(toDate(dirtyDateLeft)) && difference === 1 && compareAsc(dirtyDateLeft, dateRight) === 1) {\n      isLastMonthNotFull = false;\n    }\n    result = sign * (difference - Number(isLastMonthNotFull));\n  }\n\n  // Prevent negative zero\n  return result === 0 ? 0 : result;\n}","import differenceInMonths from \"../differenceInMonths/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\nimport { getRoundingMethod } from \"../_lib/roundingMethods/index.js\";\n/**\n * @name differenceInQuarters\n * @category Quarter Helpers\n * @summary Get the number of quarters between the given dates.\n *\n * @description\n * Get the number of quarters between the given dates.\n *\n * @param {Date|Number} dateLeft - the later date\n * @param {Date|Number} dateRight - the earlier date\n * @param {Object} [options] - an object with options.\n * @param {String} [options.roundingMethod='trunc'] - a rounding method (`ceil`, `floor`, `round` or `trunc`)\n * @returns {Number} the number of full quarters\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // How many full quarters are between 31 December 2013 and 2 July 2014?\n * const result = differenceInQuarters(new Date(2014, 6, 2), new Date(2013, 11, 31))\n * //=> 2\n */\nexport default function differenceInQuarters(dateLeft, dateRight, options) {\n  requiredArgs(2, arguments);\n  var diff = differenceInMonths(dateLeft, dateRight) / 3;\n  return getRoundingMethod(options === null || options === void 0 ? void 0 : options.roundingMethod)(diff);\n}","import differenceInMilliseconds from \"../differenceInMilliseconds/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\nimport { getRoundingMethod } from \"../_lib/roundingMethods/index.js\";\n/**\n * @name differenceInSeconds\n * @category Second Helpers\n * @summary Get the number of seconds between the given dates.\n *\n * @description\n * Get the number of seconds between the given dates.\n *\n * @param {Date|Number} dateLeft - the later date\n * @param {Date|Number} dateRight - the earlier date\n * @param {Object} [options] - an object with options.\n * @param {String} [options.roundingMethod='trunc'] - a rounding method (`ceil`, `floor`, `round` or `trunc`)\n * @returns {Number} the number of seconds\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // How many seconds are between\n * // 2 July 2014 12:30:07.999 and 2 July 2014 12:30:20.000?\n * const result = differenceInSeconds(\n *   new Date(2014, 6, 2, 12, 30, 20, 0),\n *   new Date(2014, 6, 2, 12, 30, 7, 999)\n * )\n * //=> 12\n */\nexport default function differenceInSeconds(dateLeft, dateRight, options) {\n  requiredArgs(2, arguments);\n  var diff = differenceInMilliseconds(dateLeft, dateRight) / 1000;\n  return getRoundingMethod(options === null || options === void 0 ? void 0 : options.roundingMethod)(diff);\n}","import differenceInDays from \"../differenceInDays/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\nimport { getRoundingMethod } from \"../_lib/roundingMethods/index.js\";\n/**\n * @name differenceInWeeks\n * @category Week Helpers\n * @summary Get the number of full weeks between the given dates.\n *\n * @description\n * Get the number of full weeks between two dates. Fractional weeks are\n * truncated towards zero by default.\n *\n * One \"full week\" is the distance between a local time in one day to the same\n * local time 7 days earlier or later. A full week can sometimes be less than\n * or more than 7*24 hours if a daylight savings change happens between two dates.\n *\n * To ignore DST and only measure exact 7*24-hour periods, use this instead:\n * `Math.floor(differenceInHours(dateLeft, dateRight)/(7*24))|0`.\n *\n *\n * @param {Date|Number} dateLeft - the later date\n * @param {Date|Number} dateRight - the earlier date\n * @param {Object} [options] - an object with options.\n * @param {String} [options.roundingMethod='trunc'] - a rounding method (`ceil`, `floor`, `round` or `trunc`)\n * @returns {Number} the number of full weeks\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // How many full weeks are between 5 July 2014 and 20 July 2014?\n * const result = differenceInWeeks(new Date(2014, 6, 20), new Date(2014, 6, 5))\n * //=> 2\n *\n * // How many full weeks are between\n * // 1 March 2020 0:00 and 6 June 2020 0:00 ?\n * // Note: because local time is used, the\n * // result will always be 8 weeks (54 days),\n * // even if DST starts and the period has\n * // only 54*24-1 hours.\n * const result = differenceInWeeks(\n *   new Date(2020, 5, 1),\n *   new Date(2020, 2, 6)\n * )\n * //=> 8\n */\nexport default function differenceInWeeks(dateLeft, dateRight, options) {\n  requiredArgs(2, arguments);\n  var diff = differenceInDays(dateLeft, dateRight) / 7;\n  return getRoundingMethod(options === null || options === void 0 ? void 0 : options.roundingMethod)(diff);\n}","import toDate from \"../toDate/index.js\";\nimport differenceInCalendarYears from \"../differenceInCalendarYears/index.js\";\nimport compareAsc from \"../compareAsc/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name differenceInYears\n * @category Year Helpers\n * @summary Get the number of full years between the given dates.\n *\n * @description\n * Get the number of full years between the given dates.\n *\n * @param {Date|Number} dateLeft - the later date\n * @param {Date|Number} dateRight - the earlier date\n * @returns {Number} the number of full years\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // How many full years are between 31 December 2013 and 11 February 2015?\n * const result = differenceInYears(new Date(2015, 1, 11), new Date(2013, 11, 31))\n * //=> 1\n */\nexport default function differenceInYears(dirtyDateLeft, dirtyDateRight) {\n  requiredArgs(2, arguments);\n  var dateLeft = toDate(dirtyDateLeft);\n  var dateRight = toDate(dirtyDateRight);\n  var sign = compareAsc(dateLeft, dateRight);\n  var difference = Math.abs(differenceInCalendarYears(dateLeft, dateRight));\n\n  // Set both dates to a valid leap year for accurate comparison when dealing\n  // with leap days\n  dateLeft.setFullYear(1584);\n  dateRight.setFullYear(1584);\n\n  // Math.abs(diff in full years - diff in calendar years) === 1 if last calendar year is not full\n  // If so, result must be decreased by 1 in absolute value\n  var isLastYearNotFull = compareAsc(dateLeft, dateRight) === -sign;\n  var result = sign * (difference - Number(isLastYearNotFull));\n  // Prevent negative zero\n  return result === 0 ? 0 : result;\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name eachDayOfInterval\n * @category Interval Helpers\n * @summary Return the array of dates within the specified time interval.\n *\n * @description\n * Return the array of dates within the specified time interval.\n *\n * @param {Interval} interval - the interval. See [Interval]{@link https://date-fns.org/docs/Interval}\n * @param {Object} [options] - an object with options.\n * @param {Number} [options.step=1] - the step to increment by. The value should be more than 1.\n * @returns {Date[]} the array with starts of days from the day of the interval start to the day of the interval end\n * @throws {TypeError} 1 argument required\n * @throws {RangeError} `options.step` must be a number greater than 1\n * @throws {RangeError} The start of an interval cannot be after its end\n * @throws {RangeError} Date in interval cannot be `Invalid Date`\n *\n * @example\n * // Each day between 6 October 2014 and 10 October 2014:\n * const result = eachDayOfInterval({\n *   start: new Date(2014, 9, 6),\n *   end: new Date(2014, 9, 10)\n * })\n * //=> [\n * //   Mon Oct 06 2014 00:00:00,\n * //   Tue Oct 07 2014 00:00:00,\n * //   Wed Oct 08 2014 00:00:00,\n * //   Thu Oct 09 2014 00:00:00,\n * //   Fri Oct 10 2014 00:00:00\n * // ]\n */\nexport default function eachDayOfInterval(dirtyInterval, options) {\n  var _options$step;\n  requiredArgs(1, arguments);\n  var interval = dirtyInterval || {};\n  var startDate = toDate(interval.start);\n  var endDate = toDate(interval.end);\n  var endTime = endDate.getTime();\n\n  // Throw an exception if start date is after end date or if any date is `Invalid Date`\n  if (!(startDate.getTime() <= endTime)) {\n    throw new RangeError('Invalid interval');\n  }\n  var dates = [];\n  var currentDate = startDate;\n  currentDate.setHours(0, 0, 0, 0);\n  var step = Number((_options$step = options === null || options === void 0 ? void 0 : options.step) !== null && _options$step !== void 0 ? _options$step : 1);\n  if (step < 1 || isNaN(step)) throw new RangeError('`options.step` must be a number greater than 1');\n  while (currentDate.getTime() <= endTime) {\n    dates.push(toDate(currentDate));\n    currentDate.setDate(currentDate.getDate() + step);\n    currentDate.setHours(0, 0, 0, 0);\n  }\n  return dates;\n}","import addHours from \"../addHours/index.js\";\nimport toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name eachHourOfInterval\n * @category Interval Helpers\n * @summary Return the array of hours within the specified time interval.\n *\n * @description\n * Return the array of hours within the specified time interval.\n *\n * @param {Interval} interval - the interval. See [Interval]{@link https://date-fns.org/docs/Interval}\n * @param {Object} [options] - an object with options.\n * @param {Number} [options.step=1] - the step to increment by. The value should be more than 1.\n * @returns {Date[]} the array with starts of hours from the hour of the interval start to the hour of the interval end\n * @throws {TypeError} 1 argument required\n * @throws {RangeError} `options.step` must be a number greater than 1\n * @throws {RangeError} The start of an interval cannot be after its end\n * @throws {RangeError} Date in interval cannot be `Invalid Date`\n *\n * @example\n * // Each hour between 6 October 2014, 12:00 and 6 October 2014, 15:00\n * const result = eachHourOfInterval({\n *   start: new Date(2014, 9, 6, 12),\n *   end: new Date(2014, 9, 6, 15)\n * })\n * //=> [\n * //   Mon Oct 06 2014 12:00:00,\n * //   Mon Oct 06 2014 13:00:00,\n * //   Mon Oct 06 2014 14:00:00,\n * //   Mon Oct 06 2014 15:00:00\n * // ]\n */\nexport default function eachHourOfInterval(dirtyInterval, options) {\n  var _options$step;\n  requiredArgs(1, arguments);\n  var interval = dirtyInterval || {};\n  var startDate = toDate(interval.start);\n  var endDate = toDate(interval.end);\n  var startTime = startDate.getTime();\n  var endTime = endDate.getTime();\n\n  // Throw an exception if start date is after end date or if any date is `Invalid Date`\n  if (!(startTime <= endTime)) {\n    throw new RangeError('Invalid interval');\n  }\n  var dates = [];\n  var currentDate = startDate;\n  currentDate.setMinutes(0, 0, 0);\n  var step = Number((_options$step = options === null || options === void 0 ? void 0 : options.step) !== null && _options$step !== void 0 ? _options$step : 1);\n  if (step < 1 || isNaN(step)) throw new RangeError('`options.step` must be a number greater than 1');\n  while (currentDate.getTime() <= endTime) {\n    dates.push(toDate(currentDate));\n    currentDate = addHours(currentDate, step);\n  }\n  return dates;\n}","import addMinutes from \"../addMinutes/index.js\";\nimport toDate from \"../toDate/index.js\";\nimport startOfMinute from \"../startOfMinute/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name eachMinuteOfInterval\n * @category Interval Helpers\n * @summary Return the array of minutes within the specified time interval.\n *\n * @description\n * Returns the array of minutes within the specified time interval.\n *\n * @param {Interval} interval - the interval. See [Interval]{@link https://date-fns.org/docs/Interval}\n * @param {Object} [options] - an object with options.\n * @param {Number} [options.step=1] - the step to increment by. The step must be equal to or greater than 1\n * @throws {TypeError} 1 argument required\n * @returns {Date[]} the array with starts of minutes from the minute of the interval start to the minute of the interval end\n * @throws {RangeError} `options.step` must be a number equal to or greater than 1\n * @throws {RangeError} The start of an interval cannot be after its end\n * @throws {RangeError} Date in interval cannot be `Invalid Date`\n *\n * @example\n * // Each minute between 14 October 2020, 13:00 and 14 October 2020, 13:03\n * const result = eachMinuteOfInterval({\n *   start: new Date(2014, 9, 14, 13),\n *   end: new Date(2014, 9, 14, 13, 3)\n * })\n * //=> [\n * //   Wed Oct 14 2014 13:00:00,\n * //   Wed Oct 14 2014 13:01:00,\n * //   Wed Oct 14 2014 13:02:00,\n * //   Wed Oct 14 2014 13:03:00\n * // ]\n */\nexport default function eachMinuteOfInterval(interval, options) {\n  var _options$step;\n  requiredArgs(1, arguments);\n  var startDate = startOfMinute(toDate(interval.start));\n  var endDate = toDate(interval.end);\n  var startTime = startDate.getTime();\n  var endTime = endDate.getTime();\n  if (startTime >= endTime) {\n    throw new RangeError('Invalid interval');\n  }\n  var dates = [];\n  var currentDate = startDate;\n  var step = Number((_options$step = options === null || options === void 0 ? void 0 : options.step) !== null && _options$step !== void 0 ? _options$step : 1);\n  if (step < 1 || isNaN(step)) throw new RangeError('`options.step` must be a number equal to or greater than 1');\n  while (currentDate.getTime() <= endTime) {\n    dates.push(toDate(currentDate));\n    currentDate = addMinutes(currentDate, step);\n  }\n  return dates;\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name eachMonthOfInterval\n * @category Interval Helpers\n * @summary Return the array of months within the specified time interval.\n *\n * @description\n * Return the array of months within the specified time interval.\n *\n * @param {Interval} interval - the interval. See [Interval]{@link https://date-fns.org/docs/Interval}\n * @returns {Date[]} the array with starts of months from the month of the interval start to the month of the interval end\n * @throws {TypeError} 1 argument required\n * @throws {RangeError} The start of an interval cannot be after its end\n * @throws {RangeError} Date in interval cannot be `Invalid Date`\n *\n * @example\n * // Each month between 6 February 2014 and 10 August 2014:\n * const result = eachMonthOfInterval({\n *   start: new Date(2014, 1, 6),\n *   end: new Date(2014, 7, 10)\n * })\n * //=> [\n * //   Sat Feb 01 2014 00:00:00,\n * //   Sat Mar 01 2014 00:00:00,\n * //   Tue Apr 01 2014 00:00:00,\n * //   Thu May 01 2014 00:00:00,\n * //   Sun Jun 01 2014 00:00:00,\n * //   Tue Jul 01 2014 00:00:00,\n * //   Fri Aug 01 2014 00:00:00\n * // ]\n */\nexport default function eachMonthOfInterval(dirtyInterval) {\n  requiredArgs(1, arguments);\n  var interval = dirtyInterval || {};\n  var startDate = toDate(interval.start);\n  var endDate = toDate(interval.end);\n  var endTime = endDate.getTime();\n  var dates = [];\n\n  // Throw an exception if start date is after end date or if any date is `Invalid Date`\n  if (!(startDate.getTime() <= endTime)) {\n    throw new RangeError('Invalid interval');\n  }\n  var currentDate = startDate;\n  currentDate.setHours(0, 0, 0, 0);\n  currentDate.setDate(1);\n  while (currentDate.getTime() <= endTime) {\n    dates.push(toDate(currentDate));\n    currentDate.setMonth(currentDate.getMonth() + 1);\n  }\n  return dates;\n}","import addQuarters from \"../addQuarters/index.js\";\nimport startOfQuarter from \"../startOfQuarter/index.js\";\nimport toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name eachQuarterOfInterval\n * @category Interval Helpers\n * @summary Return the array of quarters within the specified time interval.\n *\n * @description\n * Return the array of quarters within the specified time interval.\n *\n * @param {Interval} interval - the interval. See [Interval]{@link https://date-fns.org/docs/Interval}\n * @returns {Date[]} the array with starts of quarters from the quarter of the interval start to the quarter of the interval end\n * @throws {TypeError} 1 argument required\n * @throws {RangeError} The start of an interval cannot be after its end\n * @throws {RangeError} Date in interval cannot be `Invalid Date`\n *\n * @example\n * // Each quarter within interval 6 February 2014 - 10 August 2014:\n * const result = eachQuarterOfInterval({\n *   start: new Date(2014, 1, 6),\n *   end: new Date(2014, 7, 10)\n * })\n * //=> [\n * //   Wed Jan 01 2014 00:00:00,\n * //   Tue Apr 01 2014 00:00:00,\n * //   Tue Jul 01 2014 00:00:00,\n * // ]\n */\nexport default function eachQuarterOfInterval(dirtyInterval) {\n  requiredArgs(1, arguments);\n  var interval = dirtyInterval || {};\n  var startDate = toDate(interval.start);\n  var endDate = toDate(interval.end);\n  var endTime = endDate.getTime();\n\n  // Throw an exception if start date is after end date or if any date is `Invalid Date`\n  if (!(startDate.getTime() <= endTime)) {\n    throw new RangeError('Invalid interval');\n  }\n  var startDateQuarter = startOfQuarter(startDate);\n  var endDateQuarter = startOfQuarter(endDate);\n  endTime = endDateQuarter.getTime();\n  var quarters = [];\n  var currentQuarter = startDateQuarter;\n  while (currentQuarter.getTime() <= endTime) {\n    quarters.push(toDate(currentQuarter));\n    currentQuarter = addQuarters(currentQuarter, 1);\n  }\n  return quarters;\n}","import addWeeks from \"../addWeeks/index.js\";\nimport startOfWeek from \"../startOfWeek/index.js\";\nimport toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name eachWeekOfInterval\n * @category Interval Helpers\n * @summary Return the array of weeks within the specified time interval.\n *\n * @description\n * Return the array of weeks within the specified time interval.\n *\n * @param {Interval} interval - the interval. See [Interval]{@link https://date-fns.org/docs/Interval}\n * @param {Object} [options] - an object with options.\n * @param {Locale} [options.locale=defaultLocale] - the locale object. See [Locale]{@link https://date-fns.org/docs/Locale}\n * @param {0|1|2|3|4|5|6} [options.weekStartsOn=0] - the index of the first day of the week (0 - Sunday)\n * @returns {Date[]} the array with starts of weeks from the week of the interval start to the week of the interval end\n * @throws {TypeError} 1 argument required\n * @throws {RangeError} `options.weekStartsOn` must be 0, 1, ..., 6\n * @throws {RangeError} The start of an interval cannot be after its end\n * @throws {RangeError} Date in interval cannot be `Invalid Date`\n *\n * @example\n * // Each week within interval 6 October 2014 - 23 November 2014:\n * const result = eachWeekOfInterval({\n *   start: new Date(2014, 9, 6),\n *   end: new Date(2014, 10, 23)\n * })\n * //=> [\n * //   Sun Oct 05 2014 00:00:00,\n * //   Sun Oct 12 2014 00:00:00,\n * //   Sun Oct 19 2014 00:00:00,\n * //   Sun Oct 26 2014 00:00:00,\n * //   Sun Nov 02 2014 00:00:00,\n * //   Sun Nov 09 2014 00:00:00,\n * //   Sun Nov 16 2014 00:00:00,\n * //   Sun Nov 23 2014 00:00:00\n * // ]\n */\nexport default function eachWeekOfInterval(dirtyInterval, options) {\n  requiredArgs(1, arguments);\n  var interval = dirtyInterval || {};\n  var startDate = toDate(interval.start);\n  var endDate = toDate(interval.end);\n  var endTime = endDate.getTime();\n\n  // Throw an exception if start date is after end date or if any date is `Invalid Date`\n  if (!(startDate.getTime() <= endTime)) {\n    throw new RangeError('Invalid interval');\n  }\n  var startDateWeek = startOfWeek(startDate, options);\n  var endDateWeek = startOfWeek(endDate, options);\n\n  // Some timezones switch DST at midnight, making start of day unreliable in these timezones, 3pm is a safe bet\n  startDateWeek.setHours(15);\n  endDateWeek.setHours(15);\n  endTime = endDateWeek.getTime();\n  var weeks = [];\n  var currentWeek = startDateWeek;\n  while (currentWeek.getTime() <= endTime) {\n    currentWeek.setHours(0);\n    weeks.push(toDate(currentWeek));\n    currentWeek = addWeeks(currentWeek, 1);\n    currentWeek.setHours(15);\n  }\n  return weeks;\n}","import eachDayOfInterval from \"../eachDayOfInterval/index.js\";\nimport isSunday from \"../isSunday/index.js\";\nimport isWeekend from \"../isWeekend/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name eachWeekendOfInterval\n * @category Interval Helpers\n * @summary List all the Saturdays and Sundays in the given date interval.\n *\n * @description\n * Get all the Saturdays and Sundays in the given date interval.\n *\n * @param {Interval} interval - the given interval. See [Interval]{@link https://date-fns.org/docs/Interval}\n * @returns {Date[]} an array containing all the Saturdays and Sundays\n * @throws {TypeError} 1 argument required\n * @throws {RangeError} The start of an interval cannot be after its end\n * @throws {RangeError} Date in interval cannot be `Invalid Date`\n *\n * @example\n * // Lists all Saturdays and Sundays in the given date interval\n * const result = eachWeekendOfInterval({\n *   start: new Date(2018, 8, 17),\n *   end: new Date(2018, 8, 30)\n * })\n * //=> [\n * //   Sat Sep 22 2018 00:00:00,\n * //   Sun Sep 23 2018 00:00:00,\n * //   Sat Sep 29 2018 00:00:00,\n * //   Sun Sep 30 2018 00:00:00\n * // ]\n */\nexport default function eachWeekendOfInterval(interval) {\n  requiredArgs(1, arguments);\n  var dateInterval = eachDayOfInterval(interval);\n  var weekends = [];\n  var index = 0;\n  while (index < dateInterval.length) {\n    var date = dateInterval[index++];\n    if (isWeekend(date)) {\n      weekends.push(date);\n      if (isSunday(date)) index = index + 5;\n    }\n  }\n  return weekends;\n}","import eachWeekendOfInterval from \"../eachWeekendOfInterval/index.js\";\nimport startOfMonth from \"../startOfMonth/index.js\";\nimport endOfMonth from \"../endOfMonth/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name eachWeekendOfMonth\n * @category Month Helpers\n * @summary List all the Saturdays and Sundays in the given month.\n *\n * @description\n * Get all the Saturdays and Sundays in the given month.\n *\n * @param {Date|Number} date - the given month\n * @returns {Date[]} an array containing all the Saturdays and Sundays\n * @throws {TypeError} 1 argument required\n * @throws {RangeError} The passed date is invalid\n *\n * @example\n * // Lists all Saturdays and Sundays in the given month\n * const result = eachWeekendOfMonth(new Date(2022, 1, 1))\n * //=> [\n * //   Sat Feb 05 2022 00:00:00,\n * //   Sun Feb 06 2022 00:00:00,\n * //   Sat Feb 12 2022 00:00:00,\n * //   Sun Feb 13 2022 00:00:00,\n * //   Sat Feb 19 2022 00:00:00,\n * //   Sun Feb 20 2022 00:00:00,\n * //   Sat Feb 26 2022 00:00:00,\n * //   Sun Feb 27 2022 00:00:00\n * // ]\n */\nexport default function eachWeekendOfMonth(dirtyDate) {\n  requiredArgs(1, arguments);\n  var startDate = startOfMonth(dirtyDate);\n  if (isNaN(startDate.getTime())) throw new RangeError('The passed date is invalid');\n  var endDate = endOfMonth(dirtyDate);\n  return eachWeekendOfInterval({\n    start: startDate,\n    end: endDate\n  });\n}","import eachWeekendOfInterval from \"../eachWeekendOfInterval/index.js\";\nimport endOfYear from \"../endOfYear/index.js\";\nimport startOfYear from \"../startOfYear/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name eachWeekendOfYear\n * @category Year Helpers\n * @summary List all the Saturdays and Sundays in the year.\n *\n * @description\n * Get all the Saturdays and Sundays in the year.\n *\n * @param {Date|Number} date - the given year\n * @returns {Date[]} an array containing all the Saturdays and Sundays\n * @throws {TypeError} 1 argument required\n * @throws {RangeError} The passed date is invalid\n *\n * @example\n * // Lists all Saturdays and Sundays in the year\n * const result = eachWeekendOfYear(new Date(2020, 1, 1))\n * //=> [\n * //   Sat Jan 03 2020 00:00:00,\n * //   Sun Jan 04 2020 00:00:00,\n * //   ...\n * //   Sun Dec 27 2020 00:00:00\n * // ]\n * ]\n */\nexport default function eachWeekendOfYear(dirtyDate) {\n  requiredArgs(1, arguments);\n  var startDate = startOfYear(dirtyDate);\n  var endDate = endOfYear(dirtyDate);\n  return eachWeekendOfInterval({\n    start: startDate,\n    end: endDate\n  });\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name eachYearOfInterval\n * @category Interval Helpers\n * @summary Return the array of yearly timestamps within the specified time interval.\n *\n * @description\n * Return the array of yearly timestamps within the specified time interval.\n *\n * @param {Interval} interval - the interval. See [Interval]{@link https://date-fns.org/docs/Interval}\n * @returns {Date[]} the array with starts of yearly timestamps from the month of the interval start to the month of the interval end\n * @throws {TypeError} 1 argument required\n * @throws {RangeError} The start of an interval cannot be after its end\n * @throws {RangeError} Date in interval cannot be `Invalid Date`\n *\n * @example\n * // Each year between 6 February 2014 and 10 August 2017:\n * const result = eachYearOfInterval({\n *   start: new Date(2014, 1, 6),\n *   end: new Date(2017, 7, 10)\n * })\n * //=> [\n * //   Wed Jan 01 2014 00:00:00,\n * //   Thu Jan 01 2015 00:00:00,\n * //   Fri Jan 01 2016 00:00:00,\n * //   Sun Jan 01 2017 00:00:00\n * // ]\n */\nexport default function eachYearOfInterval(dirtyInterval) {\n  requiredArgs(1, arguments);\n  var interval = dirtyInterval || {};\n  var startDate = toDate(interval.start);\n  var endDate = toDate(interval.end);\n  var endTime = endDate.getTime();\n\n  // Throw an exception if start date is after end date or if any date is `Invalid Date`\n  if (!(startDate.getTime() <= endTime)) {\n    throw new RangeError('Invalid interval');\n  }\n  var dates = [];\n  var currentDate = startDate;\n  currentDate.setHours(0, 0, 0, 0);\n  currentDate.setMonth(0, 1);\n  while (currentDate.getTime() <= endTime) {\n    dates.push(toDate(currentDate));\n    currentDate.setFullYear(currentDate.getFullYear() + 1);\n  }\n  return dates;\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name endOfDay\n * @category Day Helpers\n * @summary Return the end of a day for the given date.\n *\n * @description\n * Return the end of a day for the given date.\n * The result will be in the local timezone.\n *\n * @param {Date|Number} date - the original date\n * @returns {Date} the end of a day\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // The end of a day for 2 September 2014 11:55:00:\n * const result = endOfDay(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Tue Sep 02 2014 23:59:59.999\n */\nexport default function endOfDay(dirtyDate) {\n  requiredArgs(1, arguments);\n  var date = toDate(dirtyDate);\n  date.setHours(23, 59, 59, 999);\n  return date;\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name endOfDecade\n * @category Decade Helpers\n * @summary Return the end of a decade for the given date.\n *\n * @description\n * Return the end of a decade for the given date.\n *\n * @param {Date|Number} date - the original date\n * @returns {Date} the end of a decade\n * @param {Object} [options] - an object with options.\n * @param {0|1|2} [options.additionalDigits=2] - passed to `toDate`. See [toDate]{@link https://date-fns.org/docs/toDate}\n * @throws {TypeError} 1 argument required\n * @throws {RangeError} `options.additionalDigits` must be 0, 1 or 2\n *\n * @example\n * // The end of a decade for 12 May 1984 00:00:00:\n * const result = endOfDecade(new Date(1984, 4, 12, 00, 00, 00))\n * //=> Dec 31 1989 23:59:59.999\n */\nexport default function endOfDecade(dirtyDate) {\n  requiredArgs(1, arguments);\n  var date = toDate(dirtyDate);\n  var year = date.getFullYear();\n  var decade = 9 + Math.floor(year / 10) * 10;\n  date.setFullYear(decade, 11, 31);\n  date.setHours(23, 59, 59, 999);\n  return date;\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name endOfHour\n * @category Hour Helpers\n * @summary Return the end of an hour for the given date.\n *\n * @description\n * Return the end of an hour for the given date.\n * The result will be in the local timezone.\n *\n * @param {Date|Number} date - the original date\n * @returns {Date} the end of an hour\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // The end of an hour for 2 September 2014 11:55:00:\n * const result = endOfHour(new Date(2014, 8, 2, 11, 55))\n * //=> Tue Sep 02 2014 11:59:59.999\n */\nexport default function endOfHour(dirtyDate) {\n  requiredArgs(1, arguments);\n  var date = toDate(dirtyDate);\n  date.setMinutes(59, 59, 999);\n  return date;\n}","import endOfWeek from \"../endOfWeek/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name endOfISOWeek\n * @category ISO Week Helpers\n * @summary Return the end of an ISO week for the given date.\n *\n * @description\n * Return the end of an ISO week for the given date.\n * The result will be in the local timezone.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * @param {Date|Number} date - the original date\n * @returns {Date} the end of an ISO week\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // The end of an ISO week for 2 September 2014 11:55:00:\n * const result = endOfISOWeek(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Sun Sep 07 2014 23:59:59.999\n */\nexport default function endOfISOWeek(dirtyDate) {\n  requiredArgs(1, arguments);\n  return endOfWeek(dirtyDate, {\n    weekStartsOn: 1\n  });\n}","import getISOWeekYear from \"../getISOWeekYear/index.js\";\nimport startOfISOWeek from \"../startOfISOWeek/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name endOfISOWeekYear\n * @category ISO Week-Numbering Year Helpers\n * @summary Return the end of an ISO week-numbering year for the given date.\n *\n * @description\n * Return the end of an ISO week-numbering year,\n * which always starts 3 days before the year's first Thursday.\n * The result will be in the local timezone.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * @param {Date|Number} date - the original date\n * @returns {Date} the end of an ISO week-numbering year\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // The end of an ISO week-numbering year for 2 July 2005:\n * const result = endOfISOWeekYear(new Date(2005, 6, 2))\n * //=> Sun Jan 01 2006 23:59:59.999\n */\nexport default function endOfISOWeekYear(dirtyDate) {\n  requiredArgs(1, arguments);\n  var year = getISOWeekYear(dirtyDate);\n  var fourthOfJanuaryOfNextYear = new Date(0);\n  fourthOfJanuaryOfNextYear.setFullYear(year + 1, 0, 4);\n  fourthOfJanuaryOfNextYear.setHours(0, 0, 0, 0);\n  var date = startOfISOWeek(fourthOfJanuaryOfNextYear);\n  date.setMilliseconds(date.getMilliseconds() - 1);\n  return date;\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name endOfMinute\n * @category Minute Helpers\n * @summary Return the end of a minute for the given date.\n *\n * @description\n * Return the end of a minute for the given date.\n * The result will be in the local timezone.\n *\n * @param {Date|Number} date - the original date\n * @returns {Date} the end of a minute\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // The end of a minute for 1 December 2014 22:15:45.400:\n * const result = endOfMinute(new Date(2014, 11, 1, 22, 15, 45, 400))\n * //=> Mon Dec 01 2014 22:15:59.999\n */\nexport default function endOfMinute(dirtyDate) {\n  requiredArgs(1, arguments);\n  var date = toDate(dirtyDate);\n  date.setSeconds(59, 999);\n  return date;\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name endOfMonth\n * @category Month Helpers\n * @summary Return the end of a month for the given date.\n *\n * @description\n * Return the end of a month for the given date.\n * The result will be in the local timezone.\n *\n * @param {Date|Number} date - the original date\n * @returns {Date} the end of a month\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // The end of a month for 2 September 2014 11:55:00:\n * const result = endOfMonth(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Tue Sep 30 2014 23:59:59.999\n */\nexport default function endOfMonth(dirtyDate) {\n  requiredArgs(1, arguments);\n  var date = toDate(dirtyDate);\n  var month = date.getMonth();\n  date.setFullYear(date.getFullYear(), month + 1, 0);\n  date.setHours(23, 59, 59, 999);\n  return date;\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name endOfQuarter\n * @category Quarter Helpers\n * @summary Return the end of a year quarter for the given date.\n *\n * @description\n * Return the end of a year quarter for the given date.\n * The result will be in the local timezone.\n *\n * @param {Date|Number} date - the original date\n * @returns {Date} the end of a quarter\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // The end of a quarter for 2 September 2014 11:55:00:\n * const result = endOfQuarter(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Tue Sep 30 2014 23:59:59.999\n */\nexport default function endOfQuarter(dirtyDate) {\n  requiredArgs(1, arguments);\n  var date = toDate(dirtyDate);\n  var currentMonth = date.getMonth();\n  var month = currentMonth - currentMonth % 3 + 3;\n  date.setMonth(month, 0);\n  date.setHours(23, 59, 59, 999);\n  return date;\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name endOfSecond\n * @category Second Helpers\n * @summary Return the end of a second for the given date.\n *\n * @description\n * Return the end of a second for the given date.\n * The result will be in the local timezone.\n *\n * @param {Date|Number} date - the original date\n * @returns {Date} the end of a second\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // The end of a second for 1 December 2014 22:15:45.400:\n * const result = endOfSecond(new Date(2014, 11, 1, 22, 15, 45, 400))\n * //=> Mon Dec 01 2014 22:15:45.999\n */\nexport default function endOfSecond(dirtyDate) {\n  requiredArgs(1, arguments);\n  var date = toDate(dirtyDate);\n  date.setMilliseconds(999);\n  return date;\n}","import endOfDay from \"../endOfDay/index.js\";\n/**\n * @name endOfToday\n * @category Day Helpers\n * @summary Return the end of today.\n * @pure false\n *\n * @description\n * Return the end of today.\n *\n * > ⚠️ Please note that this function is not present in the FP submodule as\n * > it uses `Date.now()` internally hence impure and can't be safely curried.\n *\n * @returns {Date} the end of today\n *\n * @example\n * // If today is 6 October 2014:\n * const result = endOfToday()\n * //=> Mon Oct 6 2014 23:59:59.999\n */\nexport default function endOfToday() {\n  return endOfDay(Date.now());\n}","/**\n * @name endOfTomorrow\n * @category Day Helpers\n * @summary Return the end of tomorrow.\n * @pure false\n *\n * @description\n * Return the end of tomorrow.\n *\n * > ⚠️ Please note that this function is not present in the FP submodule as\n * > it uses `new Date()` internally hence impure and can't be safely curried.\n *\n * @returns {Date} the end of tomorrow\n *\n * @example\n * // If today is 6 October 2014:\n * const result = endOfTomorrow()\n * //=> Tue Oct 7 2014 23:59:59.999\n */\nexport default function endOfTomorrow() {\n  var now = new Date();\n  var year = now.getFullYear();\n  var month = now.getMonth();\n  var day = now.getDate();\n  var date = new Date(0);\n  date.setFullYear(year, month, day + 1);\n  date.setHours(23, 59, 59, 999);\n  return date;\n}","import { getDefaultOptions } from \"../_lib/defaultOptions/index.js\";\nimport toDate from \"../toDate/index.js\";\nimport toInteger from \"../_lib/toInteger/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name endOfWeek\n * @category Week Helpers\n * @summary Return the end of a week for the given date.\n *\n * @description\n * Return the end of a week for the given date.\n * The result will be in the local timezone.\n *\n * @param {Date|Number} date - the original date\n * @param {Object} [options] - an object with options.\n * @param {Locale} [options.locale=defaultLocale] - the locale object. See [Locale]{@link https://date-fns.org/docs/Locale}\n * @param {0|1|2|3|4|5|6} [options.weekStartsOn=0] - the index of the first day of the week (0 - Sunday)\n * @returns {Date} the end of a week\n * @throws {TypeError} 1 argument required\n * @throws {RangeError} `options.weekStartsOn` must be between 0 and 6\n *\n * @example\n * // The end of a week for 2 September 2014 11:55:00:\n * const result = endOfWeek(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Sat Sep 06 2014 23:59:59.999\n *\n * @example\n * // If the week starts on Monday, the end of the week for 2 September 2014 11:55:00:\n * const result = endOfWeek(new Date(2014, 8, 2, 11, 55, 0), { weekStartsOn: 1 })\n * //=> Sun Sep 07 2014 23:59:59.999\n */\nexport default function endOfWeek(dirtyDate, options) {\n  var _ref, _ref2, _ref3, _options$weekStartsOn, _options$locale, _options$locale$optio, _defaultOptions$local, _defaultOptions$local2;\n  requiredArgs(1, arguments);\n  var defaultOptions = getDefaultOptions();\n  var weekStartsOn = toInteger((_ref = (_ref2 = (_ref3 = (_options$weekStartsOn = options === null || options === void 0 ? void 0 : options.weekStartsOn) !== null && _options$weekStartsOn !== void 0 ? _options$weekStartsOn : options === null || options === void 0 ? void 0 : (_options$locale = options.locale) === null || _options$locale === void 0 ? void 0 : (_options$locale$optio = _options$locale.options) === null || _options$locale$optio === void 0 ? void 0 : _options$locale$optio.weekStartsOn) !== null && _ref3 !== void 0 ? _ref3 : defaultOptions.weekStartsOn) !== null && _ref2 !== void 0 ? _ref2 : (_defaultOptions$local = defaultOptions.locale) === null || _defaultOptions$local === void 0 ? void 0 : (_defaultOptions$local2 = _defaultOptions$local.options) === null || _defaultOptions$local2 === void 0 ? void 0 : _defaultOptions$local2.weekStartsOn) !== null && _ref !== void 0 ? _ref : 0);\n\n  // Test if weekStartsOn is between 0 and 6 _and_ is not NaN\n  if (!(weekStartsOn >= 0 && weekStartsOn <= 6)) {\n    throw new RangeError('weekStartsOn must be between 0 and 6 inclusively');\n  }\n  var date = toDate(dirtyDate);\n  var day = date.getDay();\n  var diff = (day < weekStartsOn ? -7 : 0) + 6 - (day - weekStartsOn);\n  date.setDate(date.getDate() + diff);\n  date.setHours(23, 59, 59, 999);\n  return date;\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name endOfYear\n * @category Year Helpers\n * @summary Return the end of a year for the given date.\n *\n * @description\n * Return the end of a year for the given date.\n * The result will be in the local timezone.\n *\n * @param {Date|Number} date - the original date\n * @returns {Date} the end of a year\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // The end of a year for 2 September 2014 11:55:00:\n * const result = endOfYear(new Date(2014, 8, 2, 11, 55, 00))\n * //=> Wed Dec 31 2014 23:59:59.999\n */\nexport default function endOfYear(dirtyDate) {\n  requiredArgs(1, arguments);\n  var date = toDate(dirtyDate);\n  var year = date.getFullYear();\n  date.setFullYear(year + 1, 0, 0);\n  date.setHours(23, 59, 59, 999);\n  return date;\n}","/**\n * @name endOfYesterday\n * @category Day Helpers\n * @summary Return the end of yesterday.\n * @pure false\n *\n * @description\n * Return the end of yesterday.\n *\n * > ⚠️ Please note that this function is not present in the FP submodule as\n * > it uses `new Date()` internally hence impure and can't be safely curried.\n *\n * @returns {Date} the end of yesterday\n *\n * @example\n * // If today is 6 October 2014:\n * const result = endOfYesterday()\n * //=> Sun Oct 5 2014 23:59:59.999\n */\nexport default function endOfYesterday() {\n  var now = new Date();\n  var year = now.getFullYear();\n  var month = now.getMonth();\n  var day = now.getDate();\n  var date = new Date(0);\n  date.setFullYear(year, month, day - 1);\n  date.setHours(23, 59, 59, 999);\n  return date;\n}","import getUTCDayOfYear from \"../../../_lib/getUTCDayOfYear/index.js\";\nimport getUTCISOWeek from \"../../../_lib/getUTCISOWeek/index.js\";\nimport getUTCISOWeekYear from \"../../../_lib/getUTCISOWeekYear/index.js\";\nimport getUTCWeek from \"../../../_lib/getUTCWeek/index.js\";\nimport getUTCWeekYear from \"../../../_lib/getUTCWeekYear/index.js\";\nimport addLeadingZeros from \"../../addLeadingZeros/index.js\";\nimport lightFormatters from \"../lightFormatters/index.js\";\nvar dayPeriodEnum = {\n  am: 'am',\n  pm: 'pm',\n  midnight: 'midnight',\n  noon: 'noon',\n  morning: 'morning',\n  afternoon: 'afternoon',\n  evening: 'evening',\n  night: 'night'\n};\n/*\n * |     | Unit                           |     | Unit                           |\n * |-----|--------------------------------|-----|--------------------------------|\n * |  a  | AM, PM                         |  A* | Milliseconds in day            |\n * |  b  | AM, PM, noon, midnight         |  B  | Flexible day period            |\n * |  c  | Stand-alone local day of week  |  C* | Localized hour w/ day period   |\n * |  d  | Day of month                   |  D  | Day of year                    |\n * |  e  | Local day of week              |  E  | Day of week                    |\n * |  f  |                                |  F* | Day of week in month           |\n * |  g* | Modified Julian day            |  G  | Era                            |\n * |  h  | Hour [1-12]                    |  H  | Hour [0-23]                    |\n * |  i! | ISO day of week                |  I! | ISO week of year               |\n * |  j* | Localized hour w/ day period   |  J* | Localized hour w/o day period  |\n * |  k  | Hour [1-24]                    |  K  | Hour [0-11]                    |\n * |  l* | (deprecated)                   |  L  | Stand-alone month              |\n * |  m  | Minute                         |  M  | Month                          |\n * |  n  |                                |  N  |                                |\n * |  o! | Ordinal number modifier        |  O  | Timezone (GMT)                 |\n * |  p! | Long localized time            |  P! | Long localized date            |\n * |  q  | Stand-alone quarter            |  Q  | Quarter                        |\n * |  r* | Related Gregorian year         |  R! | ISO week-numbering year        |\n * |  s  | Second                         |  S  | Fraction of second             |\n * |  t! | Seconds timestamp              |  T! | Milliseconds timestamp         |\n * |  u  | Extended year                  |  U* | Cyclic year                    |\n * |  v* | Timezone (generic non-locat.)  |  V* | Timezone (location)            |\n * |  w  | Local week of year             |  W* | Week of month                  |\n * |  x  | Timezone (ISO-8601 w/o Z)      |  X  | Timezone (ISO-8601)            |\n * |  y  | Year (abs)                     |  Y  | Local week-numbering year      |\n * |  z  | Timezone (specific non-locat.) |  Z* | Timezone (aliases)             |\n *\n * Letters marked by * are not implemented but reserved by Unicode standard.\n *\n * Letters marked by ! are non-standard, but implemented by date-fns:\n * - `o` modifies the previous token to turn it into an ordinal (see `format` docs)\n * - `i` is ISO day of week. For `i` and `ii` is returns numeric ISO week days,\n *   i.e. 7 for Sunday, 1 for Monday, etc.\n * - `I` is ISO week of year, as opposed to `w` which is local week of year.\n * - `R` is ISO week-numbering year, as opposed to `Y` which is local week-numbering year.\n *   `R` is supposed to be used in conjunction with `I` and `i`\n *   for universal ISO week-numbering date, whereas\n *   `Y` is supposed to be used in conjunction with `w` and `e`\n *   for week-numbering date specific to the locale.\n * - `P` is long localized date format\n * - `p` is long localized time format\n */\n\nvar formatters = {\n  // Era\n  G: function G(date, token, localize) {\n    var era = date.getUTCFullYear() > 0 ? 1 : 0;\n    switch (token) {\n      // AD, BC\n      case 'G':\n      case 'GG':\n      case 'GGG':\n        return localize.era(era, {\n          width: 'abbreviated'\n        });\n      // A, B\n      case 'GGGGG':\n        return localize.era(era, {\n          width: 'narrow'\n        });\n      // Anno Domini, Before Christ\n      case 'GGGG':\n      default:\n        return localize.era(era, {\n          width: 'wide'\n        });\n    }\n  },\n  // Year\n  y: function y(date, token, localize) {\n    // Ordinal number\n    if (token === 'yo') {\n      var signedYear = date.getUTCFullYear();\n      // Returns 1 for 1 BC (which is year 0 in JavaScript)\n      var year = signedYear > 0 ? signedYear : 1 - signedYear;\n      return localize.ordinalNumber(year, {\n        unit: 'year'\n      });\n    }\n    return lightFormatters.y(date, token);\n  },\n  // Local week-numbering year\n  Y: function Y(date, token, localize, options) {\n    var signedWeekYear = getUTCWeekYear(date, options);\n    // Returns 1 for 1 BC (which is year 0 in JavaScript)\n    var weekYear = signedWeekYear > 0 ? signedWeekYear : 1 - signedWeekYear;\n\n    // Two digit year\n    if (token === 'YY') {\n      var twoDigitYear = weekYear % 100;\n      return addLeadingZeros(twoDigitYear, 2);\n    }\n\n    // Ordinal number\n    if (token === 'Yo') {\n      return localize.ordinalNumber(weekYear, {\n        unit: 'year'\n      });\n    }\n\n    // Padding\n    return addLeadingZeros(weekYear, token.length);\n  },\n  // ISO week-numbering year\n  R: function R(date, token) {\n    var isoWeekYear = getUTCISOWeekYear(date);\n\n    // Padding\n    return addLeadingZeros(isoWeekYear, token.length);\n  },\n  // Extended year. This is a single number designating the year of this calendar system.\n  // The main difference between `y` and `u` localizers are B.C. years:\n  // | Year | `y` | `u` |\n  // |------|-----|-----|\n  // | AC 1 |   1 |   1 |\n  // | BC 1 |   1 |   0 |\n  // | BC 2 |   2 |  -1 |\n  // Also `yy` always returns the last two digits of a year,\n  // while `uu` pads single digit years to 2 characters and returns other years unchanged.\n  u: function u(date, token) {\n    var year = date.getUTCFullYear();\n    return addLeadingZeros(year, token.length);\n  },\n  // Quarter\n  Q: function Q(date, token, localize) {\n    var quarter = Math.ceil((date.getUTCMonth() + 1) / 3);\n    switch (token) {\n      // 1, 2, 3, 4\n      case 'Q':\n        return String(quarter);\n      // 01, 02, 03, 04\n      case 'QQ':\n        return addLeadingZeros(quarter, 2);\n      // 1st, 2nd, 3rd, 4th\n      case 'Qo':\n        return localize.ordinalNumber(quarter, {\n          unit: 'quarter'\n        });\n      // Q1, Q2, Q3, Q4\n      case 'QQQ':\n        return localize.quarter(quarter, {\n          width: 'abbreviated',\n          context: 'formatting'\n        });\n      // 1, 2, 3, 4 (narrow quarter; could be not numerical)\n      case 'QQQQQ':\n        return localize.quarter(quarter, {\n          width: 'narrow',\n          context: 'formatting'\n        });\n      // 1st quarter, 2nd quarter, ...\n      case 'QQQQ':\n      default:\n        return localize.quarter(quarter, {\n          width: 'wide',\n          context: 'formatting'\n        });\n    }\n  },\n  // Stand-alone quarter\n  q: function q(date, token, localize) {\n    var quarter = Math.ceil((date.getUTCMonth() + 1) / 3);\n    switch (token) {\n      // 1, 2, 3, 4\n      case 'q':\n        return String(quarter);\n      // 01, 02, 03, 04\n      case 'qq':\n        return addLeadingZeros(quarter, 2);\n      // 1st, 2nd, 3rd, 4th\n      case 'qo':\n        return localize.ordinalNumber(quarter, {\n          unit: 'quarter'\n        });\n      // Q1, Q2, Q3, Q4\n      case 'qqq':\n        return localize.quarter(quarter, {\n          width: 'abbreviated',\n          context: 'standalone'\n        });\n      // 1, 2, 3, 4 (narrow quarter; could be not numerical)\n      case 'qqqqq':\n        return localize.quarter(quarter, {\n          width: 'narrow',\n          context: 'standalone'\n        });\n      // 1st quarter, 2nd quarter, ...\n      case 'qqqq':\n      default:\n        return localize.quarter(quarter, {\n          width: 'wide',\n          context: 'standalone'\n        });\n    }\n  },\n  // Month\n  M: function M(date, token, localize) {\n    var month = date.getUTCMonth();\n    switch (token) {\n      case 'M':\n      case 'MM':\n        return lightFormatters.M(date, token);\n      // 1st, 2nd, ..., 12th\n      case 'Mo':\n        return localize.ordinalNumber(month + 1, {\n          unit: 'month'\n        });\n      // Jan, Feb, ..., Dec\n      case 'MMM':\n        return localize.month(month, {\n          width: 'abbreviated',\n          context: 'formatting'\n        });\n      // J, F, ..., D\n      case 'MMMMM':\n        return localize.month(month, {\n          width: 'narrow',\n          context: 'formatting'\n        });\n      // January, February, ..., December\n      case 'MMMM':\n      default:\n        return localize.month(month, {\n          width: 'wide',\n          context: 'formatting'\n        });\n    }\n  },\n  // Stand-alone month\n  L: function L(date, token, localize) {\n    var month = date.getUTCMonth();\n    switch (token) {\n      // 1, 2, ..., 12\n      case 'L':\n        return String(month + 1);\n      // 01, 02, ..., 12\n      case 'LL':\n        return addLeadingZeros(month + 1, 2);\n      // 1st, 2nd, ..., 12th\n      case 'Lo':\n        return localize.ordinalNumber(month + 1, {\n          unit: 'month'\n        });\n      // Jan, Feb, ..., Dec\n      case 'LLL':\n        return localize.month(month, {\n          width: 'abbreviated',\n          context: 'standalone'\n        });\n      // J, F, ..., D\n      case 'LLLLL':\n        return localize.month(month, {\n          width: 'narrow',\n          context: 'standalone'\n        });\n      // January, February, ..., December\n      case 'LLLL':\n      default:\n        return localize.month(month, {\n          width: 'wide',\n          context: 'standalone'\n        });\n    }\n  },\n  // Local week of year\n  w: function w(date, token, localize, options) {\n    var week = getUTCWeek(date, options);\n    if (token === 'wo') {\n      return localize.ordinalNumber(week, {\n        unit: 'week'\n      });\n    }\n    return addLeadingZeros(week, token.length);\n  },\n  // ISO week of year\n  I: function I(date, token, localize) {\n    var isoWeek = getUTCISOWeek(date);\n    if (token === 'Io') {\n      return localize.ordinalNumber(isoWeek, {\n        unit: 'week'\n      });\n    }\n    return addLeadingZeros(isoWeek, token.length);\n  },\n  // Day of the month\n  d: function d(date, token, localize) {\n    if (token === 'do') {\n      return localize.ordinalNumber(date.getUTCDate(), {\n        unit: 'date'\n      });\n    }\n    return lightFormatters.d(date, token);\n  },\n  // Day of year\n  D: function D(date, token, localize) {\n    var dayOfYear = getUTCDayOfYear(date);\n    if (token === 'Do') {\n      return localize.ordinalNumber(dayOfYear, {\n        unit: 'dayOfYear'\n      });\n    }\n    return addLeadingZeros(dayOfYear, token.length);\n  },\n  // Day of week\n  E: function E(date, token, localize) {\n    var dayOfWeek = date.getUTCDay();\n    switch (token) {\n      // Tue\n      case 'E':\n      case 'EE':\n      case 'EEE':\n        return localize.day(dayOfWeek, {\n          width: 'abbreviated',\n          context: 'formatting'\n        });\n      // T\n      case 'EEEEE':\n        return localize.day(dayOfWeek, {\n          width: 'narrow',\n          context: 'formatting'\n        });\n      // Tu\n      case 'EEEEEE':\n        return localize.day(dayOfWeek, {\n          width: 'short',\n          context: 'formatting'\n        });\n      // Tuesday\n      case 'EEEE':\n      default:\n        return localize.day(dayOfWeek, {\n          width: 'wide',\n          context: 'formatting'\n        });\n    }\n  },\n  // Local day of week\n  e: function e(date, token, localize, options) {\n    var dayOfWeek = date.getUTCDay();\n    var localDayOfWeek = (dayOfWeek - options.weekStartsOn + 8) % 7 || 7;\n    switch (token) {\n      // Numerical value (Nth day of week with current locale or weekStartsOn)\n      case 'e':\n        return String(localDayOfWeek);\n      // Padded numerical value\n      case 'ee':\n        return addLeadingZeros(localDayOfWeek, 2);\n      // 1st, 2nd, ..., 7th\n      case 'eo':\n        return localize.ordinalNumber(localDayOfWeek, {\n          unit: 'day'\n        });\n      case 'eee':\n        return localize.day(dayOfWeek, {\n          width: 'abbreviated',\n          context: 'formatting'\n        });\n      // T\n      case 'eeeee':\n        return localize.day(dayOfWeek, {\n          width: 'narrow',\n          context: 'formatting'\n        });\n      // Tu\n      case 'eeeeee':\n        return localize.day(dayOfWeek, {\n          width: 'short',\n          context: 'formatting'\n        });\n      // Tuesday\n      case 'eeee':\n      default:\n        return localize.day(dayOfWeek, {\n          width: 'wide',\n          context: 'formatting'\n        });\n    }\n  },\n  // Stand-alone local day of week\n  c: function c(date, token, localize, options) {\n    var dayOfWeek = date.getUTCDay();\n    var localDayOfWeek = (dayOfWeek - options.weekStartsOn + 8) % 7 || 7;\n    switch (token) {\n      // Numerical value (same as in `e`)\n      case 'c':\n        return String(localDayOfWeek);\n      // Padded numerical value\n      case 'cc':\n        return addLeadingZeros(localDayOfWeek, token.length);\n      // 1st, 2nd, ..., 7th\n      case 'co':\n        return localize.ordinalNumber(localDayOfWeek, {\n          unit: 'day'\n        });\n      case 'ccc':\n        return localize.day(dayOfWeek, {\n          width: 'abbreviated',\n          context: 'standalone'\n        });\n      // T\n      case 'ccccc':\n        return localize.day(dayOfWeek, {\n          width: 'narrow',\n          context: 'standalone'\n        });\n      // Tu\n      case 'cccccc':\n        return localize.day(dayOfWeek, {\n          width: 'short',\n          context: 'standalone'\n        });\n      // Tuesday\n      case 'cccc':\n      default:\n        return localize.day(dayOfWeek, {\n          width: 'wide',\n          context: 'standalone'\n        });\n    }\n  },\n  // ISO day of week\n  i: function i(date, token, localize) {\n    var dayOfWeek = date.getUTCDay();\n    var isoDayOfWeek = dayOfWeek === 0 ? 7 : dayOfWeek;\n    switch (token) {\n      // 2\n      case 'i':\n        return String(isoDayOfWeek);\n      // 02\n      case 'ii':\n        return addLeadingZeros(isoDayOfWeek, token.length);\n      // 2nd\n      case 'io':\n        return localize.ordinalNumber(isoDayOfWeek, {\n          unit: 'day'\n        });\n      // Tue\n      case 'iii':\n        return localize.day(dayOfWeek, {\n          width: 'abbreviated',\n          context: 'formatting'\n        });\n      // T\n      case 'iiiii':\n        return localize.day(dayOfWeek, {\n          width: 'narrow',\n          context: 'formatting'\n        });\n      // Tu\n      case 'iiiiii':\n        return localize.day(dayOfWeek, {\n          width: 'short',\n          context: 'formatting'\n        });\n      // Tuesday\n      case 'iiii':\n      default:\n        return localize.day(dayOfWeek, {\n          width: 'wide',\n          context: 'formatting'\n        });\n    }\n  },\n  // AM or PM\n  a: function a(date, token, localize) {\n    var hours = date.getUTCHours();\n    var dayPeriodEnumValue = hours / 12 >= 1 ? 'pm' : 'am';\n    switch (token) {\n      case 'a':\n      case 'aa':\n        return localize.dayPeriod(dayPeriodEnumValue, {\n          width: 'abbreviated',\n          context: 'formatting'\n        });\n      case 'aaa':\n        return localize.dayPeriod(dayPeriodEnumValue, {\n          width: 'abbreviated',\n          context: 'formatting'\n        }).toLowerCase();\n      case 'aaaaa':\n        return localize.dayPeriod(dayPeriodEnumValue, {\n          width: 'narrow',\n          context: 'formatting'\n        });\n      case 'aaaa':\n      default:\n        return localize.dayPeriod(dayPeriodEnumValue, {\n          width: 'wide',\n          context: 'formatting'\n        });\n    }\n  },\n  // AM, PM, midnight, noon\n  b: function b(date, token, localize) {\n    var hours = date.getUTCHours();\n    var dayPeriodEnumValue;\n    if (hours === 12) {\n      dayPeriodEnumValue = dayPeriodEnum.noon;\n    } else if (hours === 0) {\n      dayPeriodEnumValue = dayPeriodEnum.midnight;\n    } else {\n      dayPeriodEnumValue = hours / 12 >= 1 ? 'pm' : 'am';\n    }\n    switch (token) {\n      case 'b':\n      case 'bb':\n        return localize.dayPeriod(dayPeriodEnumValue, {\n          width: 'abbreviated',\n          context: 'formatting'\n        });\n      case 'bbb':\n        return localize.dayPeriod(dayPeriodEnumValue, {\n          width: 'abbreviated',\n          context: 'formatting'\n        }).toLowerCase();\n      case 'bbbbb':\n        return localize.dayPeriod(dayPeriodEnumValue, {\n          width: 'narrow',\n          context: 'formatting'\n        });\n      case 'bbbb':\n      default:\n        return localize.dayPeriod(dayPeriodEnumValue, {\n          width: 'wide',\n          context: 'formatting'\n        });\n    }\n  },\n  // in the morning, in the afternoon, in the evening, at night\n  B: function B(date, token, localize) {\n    var hours = date.getUTCHours();\n    var dayPeriodEnumValue;\n    if (hours >= 17) {\n      dayPeriodEnumValue = dayPeriodEnum.evening;\n    } else if (hours >= 12) {\n      dayPeriodEnumValue = dayPeriodEnum.afternoon;\n    } else if (hours >= 4) {\n      dayPeriodEnumValue = dayPeriodEnum.morning;\n    } else {\n      dayPeriodEnumValue = dayPeriodEnum.night;\n    }\n    switch (token) {\n      case 'B':\n      case 'BB':\n      case 'BBB':\n        return localize.dayPeriod(dayPeriodEnumValue, {\n          width: 'abbreviated',\n          context: 'formatting'\n        });\n      case 'BBBBB':\n        return localize.dayPeriod(dayPeriodEnumValue, {\n          width: 'narrow',\n          context: 'formatting'\n        });\n      case 'BBBB':\n      default:\n        return localize.dayPeriod(dayPeriodEnumValue, {\n          width: 'wide',\n          context: 'formatting'\n        });\n    }\n  },\n  // Hour [1-12]\n  h: function h(date, token, localize) {\n    if (token === 'ho') {\n      var hours = date.getUTCHours() % 12;\n      if (hours === 0) hours = 12;\n      return localize.ordinalNumber(hours, {\n        unit: 'hour'\n      });\n    }\n    return lightFormatters.h(date, token);\n  },\n  // Hour [0-23]\n  H: function H(date, token, localize) {\n    if (token === 'Ho') {\n      return localize.ordinalNumber(date.getUTCHours(), {\n        unit: 'hour'\n      });\n    }\n    return lightFormatters.H(date, token);\n  },\n  // Hour [0-11]\n  K: function K(date, token, localize) {\n    var hours = date.getUTCHours() % 12;\n    if (token === 'Ko') {\n      return localize.ordinalNumber(hours, {\n        unit: 'hour'\n      });\n    }\n    return addLeadingZeros(hours, token.length);\n  },\n  // Hour [1-24]\n  k: function k(date, token, localize) {\n    var hours = date.getUTCHours();\n    if (hours === 0) hours = 24;\n    if (token === 'ko') {\n      return localize.ordinalNumber(hours, {\n        unit: 'hour'\n      });\n    }\n    return addLeadingZeros(hours, token.length);\n  },\n  // Minute\n  m: function m(date, token, localize) {\n    if (token === 'mo') {\n      return localize.ordinalNumber(date.getUTCMinutes(), {\n        unit: 'minute'\n      });\n    }\n    return lightFormatters.m(date, token);\n  },\n  // Second\n  s: function s(date, token, localize) {\n    if (token === 'so') {\n      return localize.ordinalNumber(date.getUTCSeconds(), {\n        unit: 'second'\n      });\n    }\n    return lightFormatters.s(date, token);\n  },\n  // Fraction of second\n  S: function S(date, token) {\n    return lightFormatters.S(date, token);\n  },\n  // Timezone (ISO-8601. If offset is 0, output is always `'Z'`)\n  X: function X(date, token, _localize, options) {\n    var originalDate = options._originalDate || date;\n    var timezoneOffset = originalDate.getTimezoneOffset();\n    if (timezoneOffset === 0) {\n      return 'Z';\n    }\n    switch (token) {\n      // Hours and optional minutes\n      case 'X':\n        return formatTimezoneWithOptionalMinutes(timezoneOffset);\n\n      // Hours, minutes and optional seconds without `:` delimiter\n      // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets\n      // so this token always has the same output as `XX`\n      case 'XXXX':\n      case 'XX':\n        // Hours and minutes without `:` delimiter\n        return formatTimezone(timezoneOffset);\n\n      // Hours, minutes and optional seconds with `:` delimiter\n      // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets\n      // so this token always has the same output as `XXX`\n      case 'XXXXX':\n      case 'XXX': // Hours and minutes with `:` delimiter\n      default:\n        return formatTimezone(timezoneOffset, ':');\n    }\n  },\n  // Timezone (ISO-8601. If offset is 0, output is `'+00:00'` or equivalent)\n  x: function x(date, token, _localize, options) {\n    var originalDate = options._originalDate || date;\n    var timezoneOffset = originalDate.getTimezoneOffset();\n    switch (token) {\n      // Hours and optional minutes\n      case 'x':\n        return formatTimezoneWithOptionalMinutes(timezoneOffset);\n\n      // Hours, minutes and optional seconds without `:` delimiter\n      // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets\n      // so this token always has the same output as `xx`\n      case 'xxxx':\n      case 'xx':\n        // Hours and minutes without `:` delimiter\n        return formatTimezone(timezoneOffset);\n\n      // Hours, minutes and optional seconds with `:` delimiter\n      // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets\n      // so this token always has the same output as `xxx`\n      case 'xxxxx':\n      case 'xxx': // Hours and minutes with `:` delimiter\n      default:\n        return formatTimezone(timezoneOffset, ':');\n    }\n  },\n  // Timezone (GMT)\n  O: function O(date, token, _localize, options) {\n    var originalDate = options._originalDate || date;\n    var timezoneOffset = originalDate.getTimezoneOffset();\n    switch (token) {\n      // Short\n      case 'O':\n      case 'OO':\n      case 'OOO':\n        return 'GMT' + formatTimezoneShort(timezoneOffset, ':');\n      // Long\n      case 'OOOO':\n      default:\n        return 'GMT' + formatTimezone(timezoneOffset, ':');\n    }\n  },\n  // Timezone (specific non-location)\n  z: function z(date, token, _localize, options) {\n    var originalDate = options._originalDate || date;\n    var timezoneOffset = originalDate.getTimezoneOffset();\n    switch (token) {\n      // Short\n      case 'z':\n      case 'zz':\n      case 'zzz':\n        return 'GMT' + formatTimezoneShort(timezoneOffset, ':');\n      // Long\n      case 'zzzz':\n      default:\n        return 'GMT' + formatTimezone(timezoneOffset, ':');\n    }\n  },\n  // Seconds timestamp\n  t: function t(date, token, _localize, options) {\n    var originalDate = options._originalDate || date;\n    var timestamp = Math.floor(originalDate.getTime() / 1000);\n    return addLeadingZeros(timestamp, token.length);\n  },\n  // Milliseconds timestamp\n  T: function T(date, token, _localize, options) {\n    var originalDate = options._originalDate || date;\n    var timestamp = originalDate.getTime();\n    return addLeadingZeros(timestamp, token.length);\n  }\n};\nfunction formatTimezoneShort(offset, dirtyDelimiter) {\n  var sign = offset > 0 ? '-' : '+';\n  var absOffset = Math.abs(offset);\n  var hours = Math.floor(absOffset / 60);\n  var minutes = absOffset % 60;\n  if (minutes === 0) {\n    return sign + String(hours);\n  }\n  var delimiter = dirtyDelimiter || '';\n  return sign + String(hours) + delimiter + addLeadingZeros(minutes, 2);\n}\nfunction formatTimezoneWithOptionalMinutes(offset, dirtyDelimiter) {\n  if (offset % 60 === 0) {\n    var sign = offset > 0 ? '-' : '+';\n    return sign + addLeadingZeros(Math.abs(offset) / 60, 2);\n  }\n  return formatTimezone(offset, dirtyDelimiter);\n}\nfunction formatTimezone(offset, dirtyDelimiter) {\n  var delimiter = dirtyDelimiter || '';\n  var sign = offset > 0 ? '-' : '+';\n  var absOffset = Math.abs(offset);\n  var hours = addLeadingZeros(Math.floor(absOffset / 60), 2);\n  var minutes = addLeadingZeros(absOffset % 60, 2);\n  return sign + hours + delimiter + minutes;\n}\nexport default formatters;","import toDate from \"../../toDate/index.js\";\nimport requiredArgs from \"../requiredArgs/index.js\";\nvar MILLISECONDS_IN_DAY = 86400000;\nexport default function getUTCDayOfYear(dirtyDate) {\n  requiredArgs(1, arguments);\n  var date = toDate(dirtyDate);\n  var timestamp = date.getTime();\n  date.setUTCMonth(0, 1);\n  date.setUTCHours(0, 0, 0, 0);\n  var startOfYearTimestamp = date.getTime();\n  var difference = timestamp - startOfYearTimestamp;\n  return Math.floor(difference / MILLISECONDS_IN_DAY) + 1;\n}","import isValid from \"../isValid/index.js\";\nimport subMilliseconds from \"../subMilliseconds/index.js\";\nimport toDate from \"../toDate/index.js\";\nimport formatters from \"../_lib/format/formatters/index.js\";\nimport longFormatters from \"../_lib/format/longFormatters/index.js\";\nimport getTimezoneOffsetInMilliseconds from \"../_lib/getTimezoneOffsetInMilliseconds/index.js\";\nimport { isProtectedDayOfYearToken, isProtectedWeekYearToken, throwProtectedError } from \"../_lib/protectedTokens/index.js\";\nimport toInteger from \"../_lib/toInteger/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\nimport { getDefaultOptions } from \"../_lib/defaultOptions/index.js\";\nimport defaultLocale from \"../_lib/defaultLocale/index.js\"; // This RegExp consists of three parts separated by `|`:\n// - [yYQqMLwIdDecihHKkms]o matches any available ordinal number token\n//   (one of the certain letters followed by `o`)\n// - (\\w)\\1* matches any sequences of the same letter\n// - '' matches two quote characters in a row\n// - '(''|[^'])+('|$) matches anything surrounded by two quote characters ('),\n//   except a single quote symbol, which ends the sequence.\n//   Two quote characters do not end the sequence.\n//   If there is no matching single quote\n//   then the sequence will continue until the end of the string.\n// - . matches any single character unmatched by previous parts of the RegExps\nvar formattingTokensRegExp = /[yYQqMLwIdDecihHKkms]o|(\\w)\\1*|''|'(''|[^'])+('|$)|./g;\n\n// This RegExp catches symbols escaped by quotes, and also\n// sequences of symbols P, p, and the combinations like `PPPPPPPppppp`\nvar longFormattingTokensRegExp = /P+p+|P+|p+|''|'(''|[^'])+('|$)|./g;\nvar escapedStringRegExp = /^'([^]*?)'?$/;\nvar doubleQuoteRegExp = /''/g;\nvar unescapedLatinCharacterRegExp = /[a-zA-Z]/;\n\n/**\n * @name format\n * @category Common Helpers\n * @summary Format the date.\n *\n * @description\n * Return the formatted date string in the given format. The result may vary by locale.\n *\n * > ⚠️ Please note that the `format` tokens differ from Moment.js and other libraries.\n * > See: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n *\n * The characters wrapped between two single quotes characters (') are escaped.\n * Two single quotes in a row, whether inside or outside a quoted sequence, represent a 'real' single quote.\n * (see the last example)\n *\n * Format of the string is based on Unicode Technical Standard #35:\n * https://www.unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table\n * with a few additions (see note 7 below the table).\n *\n * Accepted patterns:\n * | Unit                            | Pattern | Result examples                   | Notes |\n * |---------------------------------|---------|-----------------------------------|-------|\n * | Era                             | G..GGG  | AD, BC                            |       |\n * |                                 | GGGG    | Anno Domini, Before Christ        | 2     |\n * |                                 | GGGGG   | A, B                              |       |\n * | Calendar year                   | y       | 44, 1, 1900, 2017                 | 5     |\n * |                                 | yo      | 44th, 1st, 0th, 17th              | 5,7   |\n * |                                 | yy      | 44, 01, 00, 17                    | 5     |\n * |                                 | yyy     | 044, 001, 1900, 2017              | 5     |\n * |                                 | yyyy    | 0044, 0001, 1900, 2017            | 5     |\n * |                                 | yyyyy   | ...                               | 3,5   |\n * | Local week-numbering year       | Y       | 44, 1, 1900, 2017                 | 5     |\n * |                                 | Yo      | 44th, 1st, 1900th, 2017th         | 5,7   |\n * |                                 | YY      | 44, 01, 00, 17                    | 5,8   |\n * |                                 | YYY     | 044, 001, 1900, 2017              | 5     |\n * |                                 | YYYY    | 0044, 0001, 1900, 2017            | 5,8   |\n * |                                 | YYYYY   | ...                               | 3,5   |\n * | ISO week-numbering year         | R       | -43, 0, 1, 1900, 2017             | 5,7   |\n * |                                 | RR      | -43, 00, 01, 1900, 2017           | 5,7   |\n * |                                 | RRR     | -043, 000, 001, 1900, 2017        | 5,7   |\n * |                                 | RRRR    | -0043, 0000, 0001, 1900, 2017     | 5,7   |\n * |                                 | RRRRR   | ...                               | 3,5,7 |\n * | Extended year                   | u       | -43, 0, 1, 1900, 2017             | 5     |\n * |                                 | uu      | -43, 01, 1900, 2017               | 5     |\n * |                                 | uuu     | -043, 001, 1900, 2017             | 5     |\n * |                                 | uuuu    | -0043, 0001, 1900, 2017           | 5     |\n * |                                 | uuuuu   | ...                               | 3,5   |\n * | Quarter (formatting)            | Q       | 1, 2, 3, 4                        |       |\n * |                                 | Qo      | 1st, 2nd, 3rd, 4th                | 7     |\n * |                                 | QQ      | 01, 02, 03, 04                    |       |\n * |                                 | QQQ     | Q1, Q2, Q3, Q4                    |       |\n * |                                 | QQQQ    | 1st quarter, 2nd quarter, ...     | 2     |\n * |                                 | QQQQQ   | 1, 2, 3, 4                        | 4     |\n * | Quarter (stand-alone)           | q       | 1, 2, 3, 4                        |       |\n * |                                 | qo      | 1st, 2nd, 3rd, 4th                | 7     |\n * |                                 | qq      | 01, 02, 03, 04                    |       |\n * |                                 | qqq     | Q1, Q2, Q3, Q4                    |       |\n * |                                 | qqqq    | 1st quarter, 2nd quarter, ...     | 2     |\n * |                                 | qqqqq   | 1, 2, 3, 4                        | 4     |\n * | Month (formatting)              | M       | 1, 2, ..., 12                     |       |\n * |                                 | Mo      | 1st, 2nd, ..., 12th               | 7     |\n * |                                 | MM      | 01, 02, ..., 12                   |       |\n * |                                 | MMM     | Jan, Feb, ..., Dec                |       |\n * |                                 | MMMM    | January, February, ..., December  | 2     |\n * |                                 | MMMMM   | J, F, ..., D                      |       |\n * | Month (stand-alone)             | L       | 1, 2, ..., 12                     |       |\n * |                                 | Lo      | 1st, 2nd, ..., 12th               | 7     |\n * |                                 | LL      | 01, 02, ..., 12                   |       |\n * |                                 | LLL     | Jan, Feb, ..., Dec                |       |\n * |                                 | LLLL    | January, February, ..., December  | 2     |\n * |                                 | LLLLL   | J, F, ..., D                      |       |\n * | Local week of year              | w       | 1, 2, ..., 53                     |       |\n * |                                 | wo      | 1st, 2nd, ..., 53th               | 7     |\n * |                                 | ww      | 01, 02, ..., 53                   |       |\n * | ISO week of year                | I       | 1, 2, ..., 53                     | 7     |\n * |                                 | Io      | 1st, 2nd, ..., 53th               | 7     |\n * |                                 | II      | 01, 02, ..., 53                   | 7     |\n * | Day of month                    | d       | 1, 2, ..., 31                     |       |\n * |                                 | do      | 1st, 2nd, ..., 31st               | 7     |\n * |                                 | dd      | 01, 02, ..., 31                   |       |\n * | Day of year                     | D       | 1, 2, ..., 365, 366               | 9     |\n * |                                 | Do      | 1st, 2nd, ..., 365th, 366th       | 7     |\n * |                                 | DD      | 01, 02, ..., 365, 366             | 9     |\n * |                                 | DDD     | 001, 002, ..., 365, 366           |       |\n * |                                 | DDDD    | ...                               | 3     |\n * | Day of week (formatting)        | E..EEE  | Mon, Tue, Wed, ..., Sun           |       |\n * |                                 | EEEE    | Monday, Tuesday, ..., Sunday      | 2     |\n * |                                 | EEEEE   | M, T, W, T, F, S, S               |       |\n * |                                 | EEEEEE  | Mo, Tu, We, Th, Fr, Sa, Su        |       |\n * | ISO day of week (formatting)    | i       | 1, 2, 3, ..., 7                   | 7     |\n * |                                 | io      | 1st, 2nd, ..., 7th                | 7     |\n * |                                 | ii      | 01, 02, ..., 07                   | 7     |\n * |                                 | iii     | Mon, Tue, Wed, ..., Sun           | 7     |\n * |                                 | iiii    | Monday, Tuesday, ..., Sunday      | 2,7   |\n * |                                 | iiiii   | M, T, W, T, F, S, S               | 7     |\n * |                                 | iiiiii  | Mo, Tu, We, Th, Fr, Sa, Su        | 7     |\n * | Local day of week (formatting)  | e       | 2, 3, 4, ..., 1                   |       |\n * |                                 | eo      | 2nd, 3rd, ..., 1st                | 7     |\n * |                                 | ee      | 02, 03, ..., 01                   |       |\n * |                                 | eee     | Mon, Tue, Wed, ..., Sun           |       |\n * |                                 | eeee    | Monday, Tuesday, ..., Sunday      | 2     |\n * |                                 | eeeee   | M, T, W, T, F, S, S               |       |\n * |                                 | eeeeee  | Mo, Tu, We, Th, Fr, Sa, Su        |       |\n * | Local day of week (stand-alone) | c       | 2, 3, 4, ..., 1                   |       |\n * |                                 | co      | 2nd, 3rd, ..., 1st                | 7     |\n * |                                 | cc      | 02, 03, ..., 01                   |       |\n * |                                 | ccc     | Mon, Tue, Wed, ..., Sun           |       |\n * |                                 | cccc    | Monday, Tuesday, ..., Sunday      | 2     |\n * |                                 | ccccc   | M, T, W, T, F, S, S               |       |\n * |                                 | cccccc  | Mo, Tu, We, Th, Fr, Sa, Su        |       |\n * | AM, PM                          | a..aa   | AM, PM                            |       |\n * |                                 | aaa     | am, pm                            |       |\n * |                                 | aaaa    | a.m., p.m.                        | 2     |\n * |                                 | aaaaa   | a, p                              |       |\n * | AM, PM, noon, midnight          | b..bb   | AM, PM, noon, midnight            |       |\n * |                                 | bbb     | am, pm, noon, midnight            |       |\n * |                                 | bbbb    | a.m., p.m., noon, midnight        | 2     |\n * |                                 | bbbbb   | a, p, n, mi                       |       |\n * | Flexible day period             | B..BBB  | at night, in the morning, ...     |       |\n * |                                 | BBBB    | at night, in the morning, ...     | 2     |\n * |                                 | BBBBB   | at night, in the morning, ...     |       |\n * | Hour [1-12]                     | h       | 1, 2, ..., 11, 12                 |       |\n * |                                 | ho      | 1st, 2nd, ..., 11th, 12th         | 7     |\n * |                                 | hh      | 01, 02, ..., 11, 12               |       |\n * | Hour [0-23]                     | H       | 0, 1, 2, ..., 23                  |       |\n * |                                 | Ho      | 0th, 1st, 2nd, ..., 23rd          | 7     |\n * |                                 | HH      | 00, 01, 02, ..., 23               |       |\n * | Hour [0-11]                     | K       | 1, 2, ..., 11, 0                  |       |\n * |                                 | Ko      | 1st, 2nd, ..., 11th, 0th          | 7     |\n * |                                 | KK      | 01, 02, ..., 11, 00               |       |\n * | Hour [1-24]                     | k       | 24, 1, 2, ..., 23                 |       |\n * |                                 | ko      | 24th, 1st, 2nd, ..., 23rd         | 7     |\n * |                                 | kk      | 24, 01, 02, ..., 23               |       |\n * | Minute                          | m       | 0, 1, ..., 59                     |       |\n * |                                 | mo      | 0th, 1st, ..., 59th               | 7     |\n * |                                 | mm      | 00, 01, ..., 59                   |       |\n * | Second                          | s       | 0, 1, ..., 59                     |       |\n * |                                 | so      | 0th, 1st, ..., 59th               | 7     |\n * |                                 | ss      | 00, 01, ..., 59                   |       |\n * | Fraction of second              | S       | 0, 1, ..., 9                      |       |\n * |                                 | SS      | 00, 01, ..., 99                   |       |\n * |                                 | SSS     | 000, 001, ..., 999                |       |\n * |                                 | SSSS    | ...                               | 3     |\n * | Timezone (ISO-8601 w/ Z)        | X       | -08, +0530, Z                     |       |\n * |                                 | XX      | -0800, +0530, Z                   |       |\n * |                                 | XXX     | -08:00, +05:30, Z                 |       |\n * |                                 | XXXX    | -0800, +0530, Z, +123456          | 2     |\n * |                                 | XXXXX   | -08:00, +05:30, Z, +12:34:56      |       |\n * | Timezone (ISO-8601 w/o Z)       | x       | -08, +0530, +00                   |       |\n * |                                 | xx      | -0800, +0530, +0000               |       |\n * |                                 | xxx     | -08:00, +05:30, +00:00            | 2     |\n * |                                 | xxxx    | -0800, +0530, +0000, +123456      |       |\n * |                                 | xxxxx   | -08:00, +05:30, +00:00, +12:34:56 |       |\n * | Timezone (GMT)                  | O...OOO | GMT-8, GMT+5:30, GMT+0            |       |\n * |                                 | OOOO    | GMT-08:00, GMT+05:30, GMT+00:00   | 2     |\n * | Timezone (specific non-locat.)  | z...zzz | GMT-8, GMT+5:30, GMT+0            | 6     |\n * |                                 | zzzz    | GMT-08:00, GMT+05:30, GMT+00:00   | 2,6   |\n * | Seconds timestamp               | t       | 512969520                         | 7     |\n * |                                 | tt      | ...                               | 3,7   |\n * | Milliseconds timestamp          | T       | 512969520900                      | 7     |\n * |                                 | TT      | ...                               | 3,7   |\n * | Long localized date             | P       | 04/29/1453                        | 7     |\n * |                                 | PP      | Apr 29, 1453                      | 7     |\n * |                                 | PPP     | April 29th, 1453                  | 7     |\n * |                                 | PPPP    | Friday, April 29th, 1453          | 2,7   |\n * | Long localized time             | p       | 12:00 AM                          | 7     |\n * |                                 | pp      | 12:00:00 AM                       | 7     |\n * |                                 | ppp     | 12:00:00 AM GMT+2                 | 7     |\n * |                                 | pppp    | 12:00:00 AM GMT+02:00             | 2,7   |\n * | Combination of date and time    | Pp      | 04/29/1453, 12:00 AM              | 7     |\n * |                                 | PPpp    | Apr 29, 1453, 12:00:00 AM         | 7     |\n * |                                 | PPPppp  | April 29th, 1453 at ...           | 7     |\n * |                                 | PPPPpppp| Friday, April 29th, 1453 at ...   | 2,7   |\n * Notes:\n * 1. \"Formatting\" units (e.g. formatting quarter) in the default en-US locale\n *    are the same as \"stand-alone\" units, but are different in some languages.\n *    \"Formatting\" units are declined according to the rules of the language\n *    in the context of a date. \"Stand-alone\" units are always nominative singular:\n *\n *    `format(new Date(2017, 10, 6), 'do LLLL', {locale: cs}) //=> '6. listopad'`\n *\n *    `format(new Date(2017, 10, 6), 'do MMMM', {locale: cs}) //=> '6. listopadu'`\n *\n * 2. Any sequence of the identical letters is a pattern, unless it is escaped by\n *    the single quote characters (see below).\n *    If the sequence is longer than listed in table (e.g. `EEEEEEEEEEE`)\n *    the output will be the same as default pattern for this unit, usually\n *    the longest one (in case of ISO weekdays, `EEEE`). Default patterns for units\n *    are marked with \"2\" in the last column of the table.\n *\n *    `format(new Date(2017, 10, 6), 'MMM') //=> 'Nov'`\n *\n *    `format(new Date(2017, 10, 6), 'MMMM') //=> 'November'`\n *\n *    `format(new Date(2017, 10, 6), 'MMMMM') //=> 'N'`\n *\n *    `format(new Date(2017, 10, 6), 'MMMMMM') //=> 'November'`\n *\n *    `format(new Date(2017, 10, 6), 'MMMMMMM') //=> 'November'`\n *\n * 3. Some patterns could be unlimited length (such as `yyyyyyyy`).\n *    The output will be padded with zeros to match the length of the pattern.\n *\n *    `format(new Date(2017, 10, 6), 'yyyyyyyy') //=> '00002017'`\n *\n * 4. `QQQQQ` and `qqqqq` could be not strictly numerical in some locales.\n *    These tokens represent the shortest form of the quarter.\n *\n * 5. The main difference between `y` and `u` patterns are B.C. years:\n *\n *    | Year | `y` | `u` |\n *    |------|-----|-----|\n *    | AC 1 |   1 |   1 |\n *    | BC 1 |   1 |   0 |\n *    | BC 2 |   2 |  -1 |\n *\n *    Also `yy` always returns the last two digits of a year,\n *    while `uu` pads single digit years to 2 characters and returns other years unchanged:\n *\n *    | Year | `yy` | `uu` |\n *    |------|------|------|\n *    | 1    |   01 |   01 |\n *    | 14   |   14 |   14 |\n *    | 376  |   76 |  376 |\n *    | 1453 |   53 | 1453 |\n *\n *    The same difference is true for local and ISO week-numbering years (`Y` and `R`),\n *    except local week-numbering years are dependent on `options.weekStartsOn`\n *    and `options.firstWeekContainsDate` (compare [getISOWeekYear]{@link https://date-fns.org/docs/getISOWeekYear}\n *    and [getWeekYear]{@link https://date-fns.org/docs/getWeekYear}).\n *\n * 6. Specific non-location timezones are currently unavailable in `date-fns`,\n *    so right now these tokens fall back to GMT timezones.\n *\n * 7. These patterns are not in the Unicode Technical Standard #35:\n *    - `i`: ISO day of week\n *    - `I`: ISO week of year\n *    - `R`: ISO week-numbering year\n *    - `t`: seconds timestamp\n *    - `T`: milliseconds timestamp\n *    - `o`: ordinal number modifier\n *    - `P`: long localized date\n *    - `p`: long localized time\n *\n * 8. `YY` and `YYYY` tokens represent week-numbering years but they are often confused with years.\n *    You should enable `options.useAdditionalWeekYearTokens` to use them. See: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n *\n * 9. `D` and `DD` tokens represent days of the year but they are often confused with days of the month.\n *    You should enable `options.useAdditionalDayOfYearTokens` to use them. See: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n *\n * @param {Date|Number} date - the original date\n * @param {String} format - the string of tokens\n * @param {Object} [options] - an object with options.\n * @param {Locale} [options.locale=defaultLocale] - the locale object. See [Locale]{@link https://date-fns.org/docs/Locale}\n * @param {0|1|2|3|4|5|6} [options.weekStartsOn=0] - the index of the first day of the week (0 - Sunday)\n * @param {Number} [options.firstWeekContainsDate=1] - the day of January, which is\n * @param {Boolean} [options.useAdditionalWeekYearTokens=false] - if true, allows usage of the week-numbering year tokens `YY` and `YYYY`;\n *   see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n * @param {Boolean} [options.useAdditionalDayOfYearTokens=false] - if true, allows usage of the day of year tokens `D` and `DD`;\n *   see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n * @returns {String} the formatted date string\n * @throws {TypeError} 2 arguments required\n * @throws {RangeError} `date` must not be Invalid Date\n * @throws {RangeError} `options.locale` must contain `localize` property\n * @throws {RangeError} `options.locale` must contain `formatLong` property\n * @throws {RangeError} `options.weekStartsOn` must be between 0 and 6\n * @throws {RangeError} `options.firstWeekContainsDate` must be between 1 and 7\n * @throws {RangeError} use `yyyy` instead of `YYYY` for formatting years using [format provided] to the input [input provided]; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n * @throws {RangeError} use `yy` instead of `YY` for formatting years using [format provided] to the input [input provided]; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n * @throws {RangeError} use `d` instead of `D` for formatting days of the month using [format provided] to the input [input provided]; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n * @throws {RangeError} use `dd` instead of `DD` for formatting days of the month using [format provided] to the input [input provided]; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n * @throws {RangeError} format string contains an unescaped latin alphabet character\n *\n * @example\n * // Represent 11 February 2014 in middle-endian format:\n * const result = format(new Date(2014, 1, 11), 'MM/dd/yyyy')\n * //=> '02/11/2014'\n *\n * @example\n * // Represent 2 July 2014 in Esperanto:\n * import { eoLocale } from 'date-fns/locale/eo'\n * const result = format(new Date(2014, 6, 2), \"do 'de' MMMM yyyy\", {\n *   locale: eoLocale\n * })\n * //=> '2-a de julio 2014'\n *\n * @example\n * // Escape string by single quote characters:\n * const result = format(new Date(2014, 6, 2, 15), \"h 'o''clock'\")\n * //=> \"3 o'clock\"\n */\n\nexport default function format(dirtyDate, dirtyFormatStr, options) {\n  var _ref, _options$locale, _ref2, _ref3, _ref4, _options$firstWeekCon, _options$locale2, _options$locale2$opti, _defaultOptions$local, _defaultOptions$local2, _ref5, _ref6, _ref7, _options$weekStartsOn, _options$locale3, _options$locale3$opti, _defaultOptions$local3, _defaultOptions$local4;\n  requiredArgs(2, arguments);\n  var formatStr = String(dirtyFormatStr);\n  var defaultOptions = getDefaultOptions();\n  var locale = (_ref = (_options$locale = options === null || options === void 0 ? void 0 : options.locale) !== null && _options$locale !== void 0 ? _options$locale : defaultOptions.locale) !== null && _ref !== void 0 ? _ref : defaultLocale;\n  var firstWeekContainsDate = toInteger((_ref2 = (_ref3 = (_ref4 = (_options$firstWeekCon = options === null || options === void 0 ? void 0 : options.firstWeekContainsDate) !== null && _options$firstWeekCon !== void 0 ? _options$firstWeekCon : options === null || options === void 0 ? void 0 : (_options$locale2 = options.locale) === null || _options$locale2 === void 0 ? void 0 : (_options$locale2$opti = _options$locale2.options) === null || _options$locale2$opti === void 0 ? void 0 : _options$locale2$opti.firstWeekContainsDate) !== null && _ref4 !== void 0 ? _ref4 : defaultOptions.firstWeekContainsDate) !== null && _ref3 !== void 0 ? _ref3 : (_defaultOptions$local = defaultOptions.locale) === null || _defaultOptions$local === void 0 ? void 0 : (_defaultOptions$local2 = _defaultOptions$local.options) === null || _defaultOptions$local2 === void 0 ? void 0 : _defaultOptions$local2.firstWeekContainsDate) !== null && _ref2 !== void 0 ? _ref2 : 1);\n\n  // Test if weekStartsOn is between 1 and 7 _and_ is not NaN\n  if (!(firstWeekContainsDate >= 1 && firstWeekContainsDate <= 7)) {\n    throw new RangeError('firstWeekContainsDate must be between 1 and 7 inclusively');\n  }\n  var weekStartsOn = toInteger((_ref5 = (_ref6 = (_ref7 = (_options$weekStartsOn = options === null || options === void 0 ? void 0 : options.weekStartsOn) !== null && _options$weekStartsOn !== void 0 ? _options$weekStartsOn : options === null || options === void 0 ? void 0 : (_options$locale3 = options.locale) === null || _options$locale3 === void 0 ? void 0 : (_options$locale3$opti = _options$locale3.options) === null || _options$locale3$opti === void 0 ? void 0 : _options$locale3$opti.weekStartsOn) !== null && _ref7 !== void 0 ? _ref7 : defaultOptions.weekStartsOn) !== null && _ref6 !== void 0 ? _ref6 : (_defaultOptions$local3 = defaultOptions.locale) === null || _defaultOptions$local3 === void 0 ? void 0 : (_defaultOptions$local4 = _defaultOptions$local3.options) === null || _defaultOptions$local4 === void 0 ? void 0 : _defaultOptions$local4.weekStartsOn) !== null && _ref5 !== void 0 ? _ref5 : 0);\n\n  // Test if weekStartsOn is between 0 and 6 _and_ is not NaN\n  if (!(weekStartsOn >= 0 && weekStartsOn <= 6)) {\n    throw new RangeError('weekStartsOn must be between 0 and 6 inclusively');\n  }\n  if (!locale.localize) {\n    throw new RangeError('locale must contain localize property');\n  }\n  if (!locale.formatLong) {\n    throw new RangeError('locale must contain formatLong property');\n  }\n  var originalDate = toDate(dirtyDate);\n  if (!isValid(originalDate)) {\n    throw new RangeError('Invalid time value');\n  }\n\n  // Convert the date in system timezone to the same date in UTC+00:00 timezone.\n  // This ensures that when UTC functions will be implemented, locales will be compatible with them.\n  // See an issue about UTC functions: https://github.com/date-fns/date-fns/issues/376\n  var timezoneOffset = getTimezoneOffsetInMilliseconds(originalDate);\n  var utcDate = subMilliseconds(originalDate, timezoneOffset);\n  var formatterOptions = {\n    firstWeekContainsDate: firstWeekContainsDate,\n    weekStartsOn: weekStartsOn,\n    locale: locale,\n    _originalDate: originalDate\n  };\n  var result = formatStr.match(longFormattingTokensRegExp).map(function (substring) {\n    var firstCharacter = substring[0];\n    if (firstCharacter === 'p' || firstCharacter === 'P') {\n      var longFormatter = longFormatters[firstCharacter];\n      return longFormatter(substring, locale.formatLong);\n    }\n    return substring;\n  }).join('').match(formattingTokensRegExp).map(function (substring) {\n    // Replace two single quote characters with one single quote character\n    if (substring === \"''\") {\n      return \"'\";\n    }\n    var firstCharacter = substring[0];\n    if (firstCharacter === \"'\") {\n      return cleanEscapedString(substring);\n    }\n    var formatter = formatters[firstCharacter];\n    if (formatter) {\n      if (!(options !== null && options !== void 0 && options.useAdditionalWeekYearTokens) && isProtectedWeekYearToken(substring)) {\n        throwProtectedError(substring, dirtyFormatStr, String(dirtyDate));\n      }\n      if (!(options !== null && options !== void 0 && options.useAdditionalDayOfYearTokens) && isProtectedDayOfYearToken(substring)) {\n        throwProtectedError(substring, dirtyFormatStr, String(dirtyDate));\n      }\n      return formatter(utcDate, substring, locale.localize, formatterOptions);\n    }\n    if (firstCharacter.match(unescapedLatinCharacterRegExp)) {\n      throw new RangeError('Format string contains an unescaped latin alphabet character `' + firstCharacter + '`');\n    }\n    return substring;\n  }).join('');\n  return result;\n}\nfunction cleanEscapedString(input) {\n  var matched = input.match(escapedStringRegExp);\n  if (!matched) {\n    return input;\n  }\n  return matched[1].replace(doubleQuoteRegExp, \"'\");\n}","import { getDefaultOptions } from \"../_lib/defaultOptions/index.js\";\nimport compareAsc from \"../compareAsc/index.js\";\nimport differenceInMonths from \"../differenceInMonths/index.js\";\nimport differenceInSeconds from \"../differenceInSeconds/index.js\";\nimport defaultLocale from \"../_lib/defaultLocale/index.js\";\nimport toDate from \"../toDate/index.js\";\nimport cloneObject from \"../_lib/cloneObject/index.js\";\nimport assign from \"../_lib/assign/index.js\";\nimport getTimezoneOffsetInMilliseconds from \"../_lib/getTimezoneOffsetInMilliseconds/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\nvar MINUTES_IN_DAY = 1440;\nvar MINUTES_IN_ALMOST_TWO_DAYS = 2520;\nvar MINUTES_IN_MONTH = 43200;\nvar MINUTES_IN_TWO_MONTHS = 86400;\n\n/**\n * @name formatDistance\n * @category Common Helpers\n * @summary Return the distance between the given dates in words.\n *\n * @description\n * Return the distance between the given dates in words.\n *\n * | Distance between dates                                            | Result              |\n * |-------------------------------------------------------------------|---------------------|\n * | 0 ... 30 secs                                                     | less than a minute  |\n * | 30 secs ... 1 min 30 secs                                         | 1 minute            |\n * | 1 min 30 secs ... 44 mins 30 secs                                 | [2..44] minutes     |\n * | 44 mins ... 30 secs ... 89 mins 30 secs                           | about 1 hour        |\n * | 89 mins 30 secs ... 23 hrs 59 mins 30 secs                        | about [2..24] hours |\n * | 23 hrs 59 mins 30 secs ... 41 hrs 59 mins 30 secs                 | 1 day               |\n * | 41 hrs 59 mins 30 secs ... 29 days 23 hrs 59 mins 30 secs         | [2..30] days        |\n * | 29 days 23 hrs 59 mins 30 secs ... 44 days 23 hrs 59 mins 30 secs | about 1 month       |\n * | 44 days 23 hrs 59 mins 30 secs ... 59 days 23 hrs 59 mins 30 secs | about 2 months      |\n * | 59 days 23 hrs 59 mins 30 secs ... 1 yr                           | [2..12] months      |\n * | 1 yr ... 1 yr 3 months                                            | about 1 year        |\n * | 1 yr 3 months ... 1 yr 9 month s                                  | over 1 year         |\n * | 1 yr 9 months ... 2 yrs                                           | almost 2 years      |\n * | N yrs ... N yrs 3 months                                          | about N years       |\n * | N yrs 3 months ... N yrs 9 months                                 | over N years        |\n * | N yrs 9 months ... N+1 yrs                                        | almost N+1 years    |\n *\n * With `options.includeSeconds == true`:\n * | Distance between dates | Result               |\n * |------------------------|----------------------|\n * | 0 secs ... 5 secs      | less than 5 seconds  |\n * | 5 secs ... 10 secs     | less than 10 seconds |\n * | 10 secs ... 20 secs    | less than 20 seconds |\n * | 20 secs ... 40 secs    | half a minute        |\n * | 40 secs ... 60 secs    | less than a minute   |\n * | 60 secs ... 90 secs    | 1 minute             |\n *\n * @param {Date|Number} date - the date\n * @param {Date|Number} baseDate - the date to compare with\n * @param {Object} [options] - an object with options.\n * @param {Boolean} [options.includeSeconds=false] - distances less than a minute are more detailed\n * @param {Boolean} [options.addSuffix=false] - result indicates if the second date is earlier or later than the first\n * @param {Locale} [options.locale=defaultLocale] - the locale object. See [Locale]{@link https://date-fns.org/docs/Locale}\n * @returns {String} the distance in words\n * @throws {TypeError} 2 arguments required\n * @throws {RangeError} `date` must not be Invalid Date\n * @throws {RangeError} `baseDate` must not be Invalid Date\n * @throws {RangeError} `options.locale` must contain `formatDistance` property\n *\n * @example\n * // What is the distance between 2 July 2014 and 1 January 2015?\n * const result = formatDistance(new Date(2014, 6, 2), new Date(2015, 0, 1))\n * //=> '6 months'\n *\n * @example\n * // What is the distance between 1 January 2015 00:00:15\n * // and 1 January 2015 00:00:00, including seconds?\n * const result = formatDistance(\n *   new Date(2015, 0, 1, 0, 0, 15),\n *   new Date(2015, 0, 1, 0, 0, 0),\n *   { includeSeconds: true }\n * )\n * //=> 'less than 20 seconds'\n *\n * @example\n * // What is the distance from 1 January 2016\n * // to 1 January 2015, with a suffix?\n * const result = formatDistance(new Date(2015, 0, 1), new Date(2016, 0, 1), {\n *   addSuffix: true\n * })\n * //=> 'about 1 year ago'\n *\n * @example\n * // What is the distance between 1 August 2016 and 1 January 2015 in Esperanto?\n * import { eoLocale } from 'date-fns/locale/eo'\n * const result = formatDistance(new Date(2016, 7, 1), new Date(2015, 0, 1), {\n *   locale: eoLocale\n * })\n * //=> 'pli ol 1 jaro'\n */\n\nexport default function formatDistance(dirtyDate, dirtyBaseDate, options) {\n  var _ref, _options$locale;\n  requiredArgs(2, arguments);\n  var defaultOptions = getDefaultOptions();\n  var locale = (_ref = (_options$locale = options === null || options === void 0 ? void 0 : options.locale) !== null && _options$locale !== void 0 ? _options$locale : defaultOptions.locale) !== null && _ref !== void 0 ? _ref : defaultLocale;\n  if (!locale.formatDistance) {\n    throw new RangeError('locale must contain formatDistance property');\n  }\n  var comparison = compareAsc(dirtyDate, dirtyBaseDate);\n  if (isNaN(comparison)) {\n    throw new RangeError('Invalid time value');\n  }\n  var localizeOptions = assign(cloneObject(options), {\n    addSuffix: Boolean(options === null || options === void 0 ? void 0 : options.addSuffix),\n    comparison: comparison\n  });\n  var dateLeft;\n  var dateRight;\n  if (comparison > 0) {\n    dateLeft = toDate(dirtyBaseDate);\n    dateRight = toDate(dirtyDate);\n  } else {\n    dateLeft = toDate(dirtyDate);\n    dateRight = toDate(dirtyBaseDate);\n  }\n  var seconds = differenceInSeconds(dateRight, dateLeft);\n  var offsetInSeconds = (getTimezoneOffsetInMilliseconds(dateRight) - getTimezoneOffsetInMilliseconds(dateLeft)) / 1000;\n  var minutes = Math.round((seconds - offsetInSeconds) / 60);\n  var months;\n\n  // 0 up to 2 mins\n  if (minutes < 2) {\n    if (options !== null && options !== void 0 && options.includeSeconds) {\n      if (seconds < 5) {\n        return locale.formatDistance('lessThanXSeconds', 5, localizeOptions);\n      } else if (seconds < 10) {\n        return locale.formatDistance('lessThanXSeconds', 10, localizeOptions);\n      } else if (seconds < 20) {\n        return locale.formatDistance('lessThanXSeconds', 20, localizeOptions);\n      } else if (seconds < 40) {\n        return locale.formatDistance('halfAMinute', 0, localizeOptions);\n      } else if (seconds < 60) {\n        return locale.formatDistance('lessThanXMinutes', 1, localizeOptions);\n      } else {\n        return locale.formatDistance('xMinutes', 1, localizeOptions);\n      }\n    } else {\n      if (minutes === 0) {\n        return locale.formatDistance('lessThanXMinutes', 1, localizeOptions);\n      } else {\n        return locale.formatDistance('xMinutes', minutes, localizeOptions);\n      }\n    }\n\n    // 2 mins up to 0.75 hrs\n  } else if (minutes < 45) {\n    return locale.formatDistance('xMinutes', minutes, localizeOptions);\n\n    // 0.75 hrs up to 1.5 hrs\n  } else if (minutes < 90) {\n    return locale.formatDistance('aboutXHours', 1, localizeOptions);\n\n    // 1.5 hrs up to 24 hrs\n  } else if (minutes < MINUTES_IN_DAY) {\n    var hours = Math.round(minutes / 60);\n    return locale.formatDistance('aboutXHours', hours, localizeOptions);\n\n    // 1 day up to 1.75 days\n  } else if (minutes < MINUTES_IN_ALMOST_TWO_DAYS) {\n    return locale.formatDistance('xDays', 1, localizeOptions);\n\n    // 1.75 days up to 30 days\n  } else if (minutes < MINUTES_IN_MONTH) {\n    var days = Math.round(minutes / MINUTES_IN_DAY);\n    return locale.formatDistance('xDays', days, localizeOptions);\n\n    // 1 month up to 2 months\n  } else if (minutes < MINUTES_IN_TWO_MONTHS) {\n    months = Math.round(minutes / MINUTES_IN_MONTH);\n    return locale.formatDistance('aboutXMonths', months, localizeOptions);\n  }\n  months = differenceInMonths(dateRight, dateLeft);\n\n  // 2 months up to 12 months\n  if (months < 12) {\n    var nearestMonth = Math.round(minutes / MINUTES_IN_MONTH);\n    return locale.formatDistance('xMonths', nearestMonth, localizeOptions);\n\n    // 1 year up to max Date\n  } else {\n    var monthsSinceStartOfYear = months % 12;\n    var years = Math.floor(months / 12);\n\n    // N years up to 1 years 3 months\n    if (monthsSinceStartOfYear < 3) {\n      return locale.formatDistance('aboutXYears', years, localizeOptions);\n\n      // N years 3 months up to N years 9 months\n    } else if (monthsSinceStartOfYear < 9) {\n      return locale.formatDistance('overXYears', years, localizeOptions);\n\n      // N years 9 months up to N year 12 months\n    } else {\n      return locale.formatDistance('almostXYears', years + 1, localizeOptions);\n    }\n  }\n}","import { getDefaultOptions } from \"../_lib/defaultOptions/index.js\";\nimport getTimezoneOffsetInMilliseconds from \"../_lib/getTimezoneOffsetInMilliseconds/index.js\";\nimport compareAsc from \"../compareAsc/index.js\";\nimport toDate from \"../toDate/index.js\";\nimport cloneObject from \"../_lib/cloneObject/index.js\";\nimport assign from \"../_lib/assign/index.js\";\nimport defaultLocale from \"../_lib/defaultLocale/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\nvar MILLISECONDS_IN_MINUTE = 1000 * 60;\nvar MINUTES_IN_DAY = 60 * 24;\nvar MINUTES_IN_MONTH = MINUTES_IN_DAY * 30;\nvar MINUTES_IN_YEAR = MINUTES_IN_DAY * 365;\n\n/**\n * @name formatDistanceStrict\n * @category Common Helpers\n * @summary Return the distance between the given dates in words.\n *\n * @description\n * Return the distance between the given dates in words, using strict units.\n * This is like `formatDistance`, but does not use helpers like 'almost', 'over',\n * 'less than' and the like.\n *\n * | Distance between dates | Result              |\n * |------------------------|---------------------|\n * | 0 ... 59 secs          | [0..59] seconds     |\n * | 1 ... 59 mins          | [1..59] minutes     |\n * | 1 ... 23 hrs           | [1..23] hours       |\n * | 1 ... 29 days          | [1..29] days        |\n * | 1 ... 11 months        | [1..11] months      |\n * | 1 ... N years          | [1..N]  years       |\n *\n * @param {Date|Number} date - the date\n * @param {Date|Number} baseDate - the date to compare with\n * @param {Object} [options] - an object with options.\n * @param {Boolean} [options.addSuffix=false] - result indicates if the second date is earlier or later than the first\n * @param {'second'|'minute'|'hour'|'day'|'month'|'year'} [options.unit] - if specified, will force a unit\n * @param {'floor'|'ceil'|'round'} [options.roundingMethod='round'] - which way to round partial units\n * @param {Locale} [options.locale=defaultLocale] - the locale object. See [Locale]{@link https://date-fns.org/docs/Locale}\n * @returns {String} the distance in words\n * @throws {TypeError} 2 arguments required\n * @throws {RangeError} `date` must not be Invalid Date\n * @throws {RangeError} `baseDate` must not be Invalid Date\n * @throws {RangeError} `options.roundingMethod` must be 'floor', 'ceil' or 'round'\n * @throws {RangeError} `options.unit` must be 'second', 'minute', 'hour', 'day', 'month' or 'year'\n * @throws {RangeError} `options.locale` must contain `formatDistance` property\n *\n * @example\n * // What is the distance between 2 July 2014 and 1 January 2015?\n * const result = formatDistanceStrict(new Date(2014, 6, 2), new Date(2015, 0, 2))\n * //=> '6 months'\n *\n * @example\n * // What is the distance between 1 January 2015 00:00:15\n * // and 1 January 2015 00:00:00?\n * const result = formatDistanceStrict(\n *   new Date(2015, 0, 1, 0, 0, 15),\n *   new Date(2015, 0, 1, 0, 0, 0)\n * )\n * //=> '15 seconds'\n *\n * @example\n * // What is the distance from 1 January 2016\n * // to 1 January 2015, with a suffix?\n * const result = formatDistanceStrict(new Date(2015, 0, 1), new Date(2016, 0, 1), {\n *   addSuffix: true\n * })\n * //=> '1 year ago'\n *\n * @example\n * // What is the distance from 1 January 2016\n * // to 1 January 2015, in minutes?\n * const result = formatDistanceStrict(new Date(2016, 0, 1), new Date(2015, 0, 1), {\n *   unit: 'minute'\n * })\n * //=> '525600 minutes'\n *\n * @example\n * // What is the distance from 1 January 2015\n * // to 28 January 2015, in months, rounded up?\n * const result = formatDistanceStrict(new Date(2015, 0, 28), new Date(2015, 0, 1), {\n *   unit: 'month',\n *   roundingMethod: 'ceil'\n * })\n * //=> '1 month'\n *\n * @example\n * // What is the distance between 1 August 2016 and 1 January 2015 in Esperanto?\n * import { eoLocale } from 'date-fns/locale/eo'\n * const result = formatDistanceStrict(new Date(2016, 7, 1), new Date(2015, 0, 1), {\n *   locale: eoLocale\n * })\n * //=> '1 jaro'\n */\n\nexport default function formatDistanceStrict(dirtyDate, dirtyBaseDate, options) {\n  var _ref, _options$locale, _options$roundingMeth;\n  requiredArgs(2, arguments);\n  var defaultOptions = getDefaultOptions();\n  var locale = (_ref = (_options$locale = options === null || options === void 0 ? void 0 : options.locale) !== null && _options$locale !== void 0 ? _options$locale : defaultOptions.locale) !== null && _ref !== void 0 ? _ref : defaultLocale;\n  if (!locale.formatDistance) {\n    throw new RangeError('locale must contain localize.formatDistance property');\n  }\n  var comparison = compareAsc(dirtyDate, dirtyBaseDate);\n  if (isNaN(comparison)) {\n    throw new RangeError('Invalid time value');\n  }\n  var localizeOptions = assign(cloneObject(options), {\n    addSuffix: Boolean(options === null || options === void 0 ? void 0 : options.addSuffix),\n    comparison: comparison\n  });\n  var dateLeft;\n  var dateRight;\n  if (comparison > 0) {\n    dateLeft = toDate(dirtyBaseDate);\n    dateRight = toDate(dirtyDate);\n  } else {\n    dateLeft = toDate(dirtyDate);\n    dateRight = toDate(dirtyBaseDate);\n  }\n  var roundingMethod = String((_options$roundingMeth = options === null || options === void 0 ? void 0 : options.roundingMethod) !== null && _options$roundingMeth !== void 0 ? _options$roundingMeth : 'round');\n  var roundingMethodFn;\n  if (roundingMethod === 'floor') {\n    roundingMethodFn = Math.floor;\n  } else if (roundingMethod === 'ceil') {\n    roundingMethodFn = Math.ceil;\n  } else if (roundingMethod === 'round') {\n    roundingMethodFn = Math.round;\n  } else {\n    throw new RangeError(\"roundingMethod must be 'floor', 'ceil' or 'round'\");\n  }\n  var milliseconds = dateRight.getTime() - dateLeft.getTime();\n  var minutes = milliseconds / MILLISECONDS_IN_MINUTE;\n  var timezoneOffset = getTimezoneOffsetInMilliseconds(dateRight) - getTimezoneOffsetInMilliseconds(dateLeft);\n\n  // Use DST-normalized difference in minutes for years, months and days;\n  // use regular difference in minutes for hours, minutes and seconds.\n  var dstNormalizedMinutes = (milliseconds - timezoneOffset) / MILLISECONDS_IN_MINUTE;\n  var defaultUnit = options === null || options === void 0 ? void 0 : options.unit;\n  var unit;\n  if (!defaultUnit) {\n    if (minutes < 1) {\n      unit = 'second';\n    } else if (minutes < 60) {\n      unit = 'minute';\n    } else if (minutes < MINUTES_IN_DAY) {\n      unit = 'hour';\n    } else if (dstNormalizedMinutes < MINUTES_IN_MONTH) {\n      unit = 'day';\n    } else if (dstNormalizedMinutes < MINUTES_IN_YEAR) {\n      unit = 'month';\n    } else {\n      unit = 'year';\n    }\n  } else {\n    unit = String(defaultUnit);\n  }\n\n  // 0 up to 60 seconds\n  if (unit === 'second') {\n    var seconds = roundingMethodFn(milliseconds / 1000);\n    return locale.formatDistance('xSeconds', seconds, localizeOptions);\n\n    // 1 up to 60 mins\n  } else if (unit === 'minute') {\n    var roundedMinutes = roundingMethodFn(minutes);\n    return locale.formatDistance('xMinutes', roundedMinutes, localizeOptions);\n\n    // 1 up to 24 hours\n  } else if (unit === 'hour') {\n    var hours = roundingMethodFn(minutes / 60);\n    return locale.formatDistance('xHours', hours, localizeOptions);\n\n    // 1 up to 30 days\n  } else if (unit === 'day') {\n    var days = roundingMethodFn(dstNormalizedMinutes / MINUTES_IN_DAY);\n    return locale.formatDistance('xDays', days, localizeOptions);\n\n    // 1 up to 12 months\n  } else if (unit === 'month') {\n    var months = roundingMethodFn(dstNormalizedMinutes / MINUTES_IN_MONTH);\n    return months === 12 && defaultUnit !== 'month' ? locale.formatDistance('xYears', 1, localizeOptions) : locale.formatDistance('xMonths', months, localizeOptions);\n\n    // 1 year up to max Date\n  } else if (unit === 'year') {\n    var years = roundingMethodFn(dstNormalizedMinutes / MINUTES_IN_YEAR);\n    return locale.formatDistance('xYears', years, localizeOptions);\n  }\n  throw new RangeError(\"unit must be 'second', 'minute', 'hour', 'day', 'month' or 'year'\");\n}","import distanceInWords from \"../formatDistance/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name formatDistanceToNow\n * @category Common Helpers\n * @summary Return the distance between the given date and now in words.\n * @pure false\n *\n * @description\n * Return the distance between the given date and now in words.\n *\n * | Distance to now                                                   | Result              |\n * |-------------------------------------------------------------------|---------------------|\n * | 0 ... 30 secs                                                     | less than a minute  |\n * | 30 secs ... 1 min 30 secs                                         | 1 minute            |\n * | 1 min 30 secs ... 44 mins 30 secs                                 | [2..44] minutes     |\n * | 44 mins ... 30 secs ... 89 mins 30 secs                           | about 1 hour        |\n * | 89 mins 30 secs ... 23 hrs 59 mins 30 secs                        | about [2..24] hours |\n * | 23 hrs 59 mins 30 secs ... 41 hrs 59 mins 30 secs                 | 1 day               |\n * | 41 hrs 59 mins 30 secs ... 29 days 23 hrs 59 mins 30 secs         | [2..30] days        |\n * | 29 days 23 hrs 59 mins 30 secs ... 44 days 23 hrs 59 mins 30 secs | about 1 month       |\n * | 44 days 23 hrs 59 mins 30 secs ... 59 days 23 hrs 59 mins 30 secs | about 2 months      |\n * | 59 days 23 hrs 59 mins 30 secs ... 1 yr                           | [2..12] months      |\n * | 1 yr ... 1 yr 3 months                                            | about 1 year        |\n * | 1 yr 3 months ... 1 yr 9 month s                                  | over 1 year         |\n * | 1 yr 9 months ... 2 yrs                                           | almost 2 years      |\n * | N yrs ... N yrs 3 months                                          | about N years       |\n * | N yrs 3 months ... N yrs 9 months                                 | over N years        |\n * | N yrs 9 months ... N+1 yrs                                        | almost N+1 years    |\n *\n * With `options.includeSeconds == true`:\n * | Distance to now     | Result               |\n * |---------------------|----------------------|\n * | 0 secs ... 5 secs   | less than 5 seconds  |\n * | 5 secs ... 10 secs  | less than 10 seconds |\n * | 10 secs ... 20 secs | less than 20 seconds |\n * | 20 secs ... 40 secs | half a minute        |\n * | 40 secs ... 60 secs | less than a minute   |\n * | 60 secs ... 90 secs | 1 minute             |\n *\n * > ⚠️ Please note that this function is not present in the FP submodule as\n * > it uses `Date.now()` internally hence impure and can't be safely curried.\n *\n * @param {Date|Number} date - the given date\n * @param {Object} [options] - the object with options\n * @param {Boolean} [options.includeSeconds=false] - distances less than a minute are more detailed\n * @param {Boolean} [options.addSuffix=false] - result specifies if now is earlier or later than the passed date\n * @param {Locale} [options.locale=defaultLocale] - the locale object. See [Locale]{@link https://date-fns.org/docs/Locale}\n * @returns {String} the distance in words\n * @throws {TypeError} 1 argument required\n * @throws {RangeError} `date` must not be Invalid Date\n * @throws {RangeError} `options.locale` must contain `formatDistance` property\n *\n * @example\n * // If today is 1 January 2015, what is the distance to 2 July 2014?\n * const result = formatDistanceToNow(\n *   new Date(2014, 6, 2)\n * )\n * //=> '6 months'\n *\n * @example\n * // If now is 1 January 2015 00:00:00,\n * // what is the distance to 1 January 2015 00:00:15, including seconds?\n * const result = formatDistanceToNow(\n *   new Date(2015, 0, 1, 0, 0, 15),\n *   {includeSeconds: true}\n * )\n * //=> 'less than 20 seconds'\n *\n * @example\n * // If today is 1 January 2015,\n * // what is the distance to 1 January 2016, with a suffix?\n * const result = formatDistanceToNow(\n *   new Date(2016, 0, 1),\n *   {addSuffix: true}\n * )\n * //=> 'in about 1 year'\n *\n * @example\n * // If today is 1 January 2015,\n * // what is the distance to 1 August 2016 in Esperanto?\n * const eoLocale = require('date-fns/locale/eo')\n * const result = formatDistanceToNow(\n *   new Date(2016, 7, 1),\n *   {locale: eoLocale}\n * )\n * //=> 'pli ol 1 jaro'\n */\nexport default function formatDistanceToNow(dirtyDate, options) {\n  requiredArgs(1, arguments);\n  return distanceInWords(dirtyDate, Date.now(), options);\n}","import formatDistanceStrict from \"../formatDistanceStrict/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name formatDistanceToNowStrict\n * @category Common Helpers\n * @summary Return the distance between the given date and now in words.\n * @pure false\n *\n * @description\n * Return the distance between the given dates in words, using strict units.\n * This is like `formatDistance`, but does not use helpers like 'almost', 'over',\n * 'less than' and the like.\n *\n * | Distance between dates | Result              |\n * |------------------------|---------------------|\n * | 0 ... 59 secs          | [0..59] seconds     |\n * | 1 ... 59 mins          | [1..59] minutes     |\n * | 1 ... 23 hrs           | [1..23] hours       |\n * | 1 ... 29 days          | [1..29] days        |\n * | 1 ... 11 months        | [1..11] months      |\n * | 1 ... N years          | [1..N]  years       |\n *\n * @param {Date|Number} date - the given date\n * @param {Object} [options] - an object with options.\n * @param {Boolean} [options.addSuffix=false] - result indicates if the second date is earlier or later than the first\n * @param {'second'|'minute'|'hour'|'day'|'month'|'year'} [options.unit] - if specified, will force a unit\n * @param {'floor'|'ceil'|'round'} [options.roundingMethod='round'] - which way to round partial units\n * @param {Locale} [options.locale=defaultLocale] - the locale object. See [Locale]{@link https://date-fns.org/docs/Locale}\n * @returns {String} the distance in words\n * @throws {TypeError} 1 argument required\n * @throws {RangeError} `date` must not be Invalid Date\n * @throws {RangeError} `options.locale` must contain `formatDistance` property\n *\n * @example\n * // If today is 1 January 2015, what is the distance to 2 July 2014?\n * const result = formatDistanceToNowStrict(\n *   new Date(2014, 6, 2)\n * )\n * //=> '6 months'\n *\n * @example\n * // If now is 1 January 2015 00:00:00,\n * // what is the distance to 1 January 2015 00:00:15, including seconds?\n * const result = formatDistanceToNowStrict(\n *   new Date(2015, 0, 1, 0, 0, 15)\n * )\n * //=> '15 seconds'\n *\n * @example\n * // If today is 1 January 2015,\n * // what is the distance to 1 January 2016, with a suffix?\n * const result = formatDistanceToNowStrict(\n *   new Date(2016, 0, 1),\n *   {addSuffix: true}\n * )\n * //=> 'in 1 year'\n *\n * @example\n * // If today is 28 January 2015,\n * // what is the distance to 1 January 2015, in months, rounded up??\n * const result = formatDistanceToNowStrict(new Date(2015, 0, 1), {\n *   unit: 'month',\n *   roundingMethod: 'ceil'\n * })\n * //=> '1 month'\n *\n * @example\n * // If today is 1 January 2015,\n * // what is the distance to 1 January 2016 in Esperanto?\n * const eoLocale = require('date-fns/locale/eo')\n * const result = formatDistanceToNowStrict(\n *   new Date(2016, 0, 1),\n *   {locale: eoLocale}\n * )\n * //=> '1 jaro'\n */\nexport default function formatDistanceToNowStrict(dirtyDate, options) {\n  requiredArgs(1, arguments);\n  return formatDistanceStrict(dirtyDate, Date.now(), options);\n}","import { getDefaultOptions } from \"../_lib/defaultOptions/index.js\";\nimport defaultLocale from \"../_lib/defaultLocale/index.js\";\nvar defaultFormat = ['years', 'months', 'weeks', 'days', 'hours', 'minutes', 'seconds'];\n\n/**\n * @name formatDuration\n * @category Common Helpers\n * @summary Formats a duration in human-readable format\n *\n * @description\n * Return human-readable duration string i.e. \"9 months 2 days\"\n *\n * @param {Duration} duration - the duration to format\n * @param {Object} [options] - an object with options.\n * @param {string[]} [options.format=['years', 'months', 'weeks', 'days', 'hours', 'minutes', 'seconds']] - the array of units to format\n * @param {boolean} [options.zero=false] - should zeros be included in the output?\n * @param {string} [options.delimiter=' '] - delimiter string\n * @param {Locale} [options.locale=defaultLocale] - the locale object. See [Locale]{@link https://date-fns.org/docs/Locale}\n * @returns {string} the formatted date string\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Format full duration\n * formatDuration({\n *   years: 2,\n *   months: 9,\n *   weeks: 1,\n *   days: 7,\n *   hours: 5,\n *   minutes: 9,\n *   seconds: 30\n * })\n * //=> '2 years 9 months 1 week 7 days 5 hours 9 minutes 30 seconds'\n *\n * @example\n * // Format partial duration\n * formatDuration({ months: 9, days: 2 })\n * //=> '9 months 2 days'\n *\n * @example\n * // Customize the format\n * formatDuration(\n *   {\n *     years: 2,\n *     months: 9,\n *     weeks: 1,\n *     days: 7,\n *     hours: 5,\n *     minutes: 9,\n *     seconds: 30\n *   },\n *   { format: ['months', 'weeks'] }\n * ) === '9 months 1 week'\n *\n * @example\n * // Customize the zeros presence\n * formatDuration({ years: 0, months: 9 })\n * //=> '9 months'\n * formatDuration({ years: 0, months: 9 }, { zero: true })\n * //=> '0 years 9 months'\n *\n * @example\n * // Customize the delimiter\n * formatDuration({ years: 2, months: 9, weeks: 3 }, { delimiter: ', ' })\n * //=> '2 years, 9 months, 3 weeks'\n */\nexport default function formatDuration(duration, options) {\n  var _ref, _options$locale, _options$format, _options$zero, _options$delimiter;\n  if (arguments.length < 1) {\n    throw new TypeError(\"1 argument required, but only \".concat(arguments.length, \" present\"));\n  }\n  var defaultOptions = getDefaultOptions();\n  var locale = (_ref = (_options$locale = options === null || options === void 0 ? void 0 : options.locale) !== null && _options$locale !== void 0 ? _options$locale : defaultOptions.locale) !== null && _ref !== void 0 ? _ref : defaultLocale;\n  var format = (_options$format = options === null || options === void 0 ? void 0 : options.format) !== null && _options$format !== void 0 ? _options$format : defaultFormat;\n  var zero = (_options$zero = options === null || options === void 0 ? void 0 : options.zero) !== null && _options$zero !== void 0 ? _options$zero : false;\n  var delimiter = (_options$delimiter = options === null || options === void 0 ? void 0 : options.delimiter) !== null && _options$delimiter !== void 0 ? _options$delimiter : ' ';\n  if (!locale.formatDistance) {\n    return '';\n  }\n  var result = format.reduce(function (acc, unit) {\n    var token = \"x\".concat(unit.replace(/(^.)/, function (m) {\n      return m.toUpperCase();\n    }));\n    var value = duration[unit];\n    if (typeof value === 'number' && (zero || duration[unit])) {\n      return acc.concat(locale.formatDistance(token, value));\n    }\n    return acc;\n  }, []).join(delimiter);\n  return result;\n}","import toDate from \"../toDate/index.js\";\nimport addLeadingZeros from \"../_lib/addLeadingZeros/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name formatISO\n * @category Common Helpers\n * @summary Format the date according to the ISO 8601 standard (https://support.sas.com/documentation/cdl/en/lrdict/64316/HTML/default/viewer.htm#a003169814.htm).\n *\n * @description\n * Return the formatted date string in ISO 8601 format. Options may be passed to control the parts and notations of the date.\n *\n * @param {Date|Number} date - the original date\n * @param {Object} [options] - an object with options.\n * @param {'extended'|'basic'} [options.format='extended'] - if 'basic', hide delimiters between date and time values.\n * @param {'complete'|'date'|'time'} [options.representation='complete'] - format date, time with local time zone, or both.\n * @returns {String} the formatted date string (in local time zone)\n * @throws {TypeError} 1 argument required\n * @throws {RangeError} `date` must not be Invalid Date\n * @throws {RangeError} `options.format` must be 'extended' or 'basic'\n * @throws {RangeError} `options.representation` must be 'date', 'time' or 'complete'\n *\n * @example\n * // Represent 18 September 2019 in ISO 8601 format (local time zone is UTC):\n * const result = formatISO(new Date(2019, 8, 18, 19, 0, 52))\n * //=> '2019-09-18T19:00:52Z'\n *\n * @example\n * // Represent 18 September 2019 in ISO 8601, short format (local time zone is UTC):\n * const result = formatISO(new Date(2019, 8, 18, 19, 0, 52), { format: 'basic' })\n * //=> '20190918T190052'\n *\n * @example\n * // Represent 18 September 2019 in ISO 8601 format, date only:\n * const result = formatISO(new Date(2019, 8, 18, 19, 0, 52), { representation: 'date' })\n * //=> '2019-09-18'\n *\n * @example\n * // Represent 18 September 2019 in ISO 8601 format, time only (local time zone is UTC):\n * const result = formatISO(new Date(2019, 8, 18, 19, 0, 52), { representation: 'time' })\n * //=> '19:00:52Z'\n */\nexport default function formatISO(date, options) {\n  var _options$format, _options$representati;\n  requiredArgs(1, arguments);\n  var originalDate = toDate(date);\n  if (isNaN(originalDate.getTime())) {\n    throw new RangeError('Invalid time value');\n  }\n  var format = String((_options$format = options === null || options === void 0 ? void 0 : options.format) !== null && _options$format !== void 0 ? _options$format : 'extended');\n  var representation = String((_options$representati = options === null || options === void 0 ? void 0 : options.representation) !== null && _options$representati !== void 0 ? _options$representati : 'complete');\n  if (format !== 'extended' && format !== 'basic') {\n    throw new RangeError(\"format must be 'extended' or 'basic'\");\n  }\n  if (representation !== 'date' && representation !== 'time' && representation !== 'complete') {\n    throw new RangeError(\"representation must be 'date', 'time', or 'complete'\");\n  }\n  var result = '';\n  var tzOffset = '';\n  var dateDelimiter = format === 'extended' ? '-' : '';\n  var timeDelimiter = format === 'extended' ? ':' : '';\n\n  // Representation is either 'date' or 'complete'\n  if (representation !== 'time') {\n    var day = addLeadingZeros(originalDate.getDate(), 2);\n    var month = addLeadingZeros(originalDate.getMonth() + 1, 2);\n    var year = addLeadingZeros(originalDate.getFullYear(), 4);\n\n    // yyyyMMdd or yyyy-MM-dd.\n    result = \"\".concat(year).concat(dateDelimiter).concat(month).concat(dateDelimiter).concat(day);\n  }\n\n  // Representation is either 'time' or 'complete'\n  if (representation !== 'date') {\n    // Add the timezone.\n    var offset = originalDate.getTimezoneOffset();\n    if (offset !== 0) {\n      var absoluteOffset = Math.abs(offset);\n      var hourOffset = addLeadingZeros(Math.floor(absoluteOffset / 60), 2);\n      var minuteOffset = addLeadingZeros(absoluteOffset % 60, 2);\n      // If less than 0, the sign is +, because it is ahead of time.\n      var sign = offset < 0 ? '+' : '-';\n      tzOffset = \"\".concat(sign).concat(hourOffset, \":\").concat(minuteOffset);\n    } else {\n      tzOffset = 'Z';\n    }\n    var hour = addLeadingZeros(originalDate.getHours(), 2);\n    var minute = addLeadingZeros(originalDate.getMinutes(), 2);\n    var second = addLeadingZeros(originalDate.getSeconds(), 2);\n\n    // If there's also date, separate it with time with 'T'\n    var separator = result === '' ? '' : 'T';\n\n    // Creates a time string consisting of hour, minute, and second, separated by delimiters, if defined.\n    var time = [hour, minute, second].join(timeDelimiter);\n\n    // HHmmss or HH:mm:ss.\n    result = \"\".concat(result).concat(separator).concat(time).concat(tzOffset);\n  }\n  return result;\n}","import toDate from \"../toDate/index.js\";\nimport isValid from \"../isValid/index.js\";\nimport addLeadingZeros from \"../_lib/addLeadingZeros/index.js\";\n/**\n * @name formatISO9075\n * @category Common Helpers\n * @summary Format the date according to the ISO 9075 standard (https://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html#function_get-format).\n *\n * @description\n * Return the formatted date string in ISO 9075 format. Options may be passed to control the parts and notations of the date.\n *\n * @param {Date|Number} date - the original date\n * @param {Object} [options] - an object with options.\n * @param {'extended'|'basic'} [options.format='extended'] - if 'basic', hide delimiters between date and time values.\n * @param {'complete'|'date'|'time'} [options.representation='complete'] - format date, time, or both.\n * @returns {String} the formatted date string\n * @throws {TypeError} 1 argument required\n * @throws {RangeError} `date` must not be Invalid Date\n * @throws {RangeError} `options.format` must be 'extended' or 'basic'\n * @throws {RangeError} `options.representation` must be 'date', 'time' or 'complete'\n *\n * @example\n * // Represent 18 September 2019 in ISO 9075 format:\n * const result = formatISO9075(new Date(2019, 8, 18, 19, 0, 52))\n * //=> '2019-09-18 19:00:52'\n *\n * @example\n * // Represent 18 September 2019 in ISO 9075, short format:\n * const result = formatISO9075(new Date(2019, 8, 18, 19, 0, 52), { format: 'basic' })\n * //=> '20190918 190052'\n *\n * @example\n * // Represent 18 September 2019 in ISO 9075 format, date only:\n * const result = formatISO9075(new Date(2019, 8, 18, 19, 0, 52), { representation: 'date' })\n * //=> '2019-09-18'\n *\n * @example\n * // Represent 18 September 2019 in ISO 9075 format, time only:\n * const result = formatISO9075(new Date(2019, 8, 18, 19, 0, 52), { representation: 'time' })\n * //=> '19:00:52'\n */\nexport default function formatISO9075(dirtyDate, options) {\n  var _options$format, _options$representati;\n  if (arguments.length < 1) {\n    throw new TypeError(\"1 argument required, but only \".concat(arguments.length, \" present\"));\n  }\n  var originalDate = toDate(dirtyDate);\n  if (!isValid(originalDate)) {\n    throw new RangeError('Invalid time value');\n  }\n  var format = String((_options$format = options === null || options === void 0 ? void 0 : options.format) !== null && _options$format !== void 0 ? _options$format : 'extended');\n  var representation = String((_options$representati = options === null || options === void 0 ? void 0 : options.representation) !== null && _options$representati !== void 0 ? _options$representati : 'complete');\n  if (format !== 'extended' && format !== 'basic') {\n    throw new RangeError(\"format must be 'extended' or 'basic'\");\n  }\n  if (representation !== 'date' && representation !== 'time' && representation !== 'complete') {\n    throw new RangeError(\"representation must be 'date', 'time', or 'complete'\");\n  }\n  var result = '';\n  var dateDelimiter = format === 'extended' ? '-' : '';\n  var timeDelimiter = format === 'extended' ? ':' : '';\n\n  // Representation is either 'date' or 'complete'\n  if (representation !== 'time') {\n    var day = addLeadingZeros(originalDate.getDate(), 2);\n    var month = addLeadingZeros(originalDate.getMonth() + 1, 2);\n    var year = addLeadingZeros(originalDate.getFullYear(), 4);\n\n    // yyyyMMdd or yyyy-MM-dd.\n    result = \"\".concat(year).concat(dateDelimiter).concat(month).concat(dateDelimiter).concat(day);\n  }\n\n  // Representation is either 'time' or 'complete'\n  if (representation !== 'date') {\n    var hour = addLeadingZeros(originalDate.getHours(), 2);\n    var minute = addLeadingZeros(originalDate.getMinutes(), 2);\n    var second = addLeadingZeros(originalDate.getSeconds(), 2);\n\n    // If there's also date, separate it with time with a space\n    var separator = result === '' ? '' : ' ';\n\n    // HHmmss or HH:mm:ss.\n    result = \"\".concat(result).concat(separator).concat(hour).concat(timeDelimiter).concat(minute).concat(timeDelimiter).concat(second);\n  }\n  return result;\n}","import _typeof from \"@babel/runtime/helpers/esm/typeof\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name formatISODuration\n * @category Common Helpers\n * @summary Format a duration object according as ISO 8601 duration string\n *\n * @description\n * Format a duration object according to the ISO 8601 duration standard (https://www.digi.com/resources/documentation/digidocs/90001437-13/reference/r_iso_8601_duration_format.htm)\n *\n * @param {Duration} duration - the duration to format\n *\n * @returns {String} The ISO 8601 duration string\n * @throws {TypeError} Requires 1 argument\n * @throws {Error} Argument must be an object\n *\n * @example\n * // Format the given duration as ISO 8601 string\n * const result = formatISODuration({\n *   years: 39,\n *   months: 2,\n *   days: 20,\n *   hours: 7,\n *   minutes: 5,\n *   seconds: 0\n * })\n * //=> 'P39Y2M20DT0H0M0S'\n */\nexport default function formatISODuration(duration) {\n  requiredArgs(1, arguments);\n  if (_typeof(duration) !== 'object') throw new Error('Duration must be an object');\n  var _duration$years = duration.years,\n    years = _duration$years === void 0 ? 0 : _duration$years,\n    _duration$months = duration.months,\n    months = _duration$months === void 0 ? 0 : _duration$months,\n    _duration$days = duration.days,\n    days = _duration$days === void 0 ? 0 : _duration$days,\n    _duration$hours = duration.hours,\n    hours = _duration$hours === void 0 ? 0 : _duration$hours,\n    _duration$minutes = duration.minutes,\n    minutes = _duration$minutes === void 0 ? 0 : _duration$minutes,\n    _duration$seconds = duration.seconds,\n    seconds = _duration$seconds === void 0 ? 0 : _duration$seconds;\n  return \"P\".concat(years, \"Y\").concat(months, \"M\").concat(days, \"DT\").concat(hours, \"H\").concat(minutes, \"M\").concat(seconds, \"S\");\n}","import toDate from \"../toDate/index.js\";\nimport isValid from \"../isValid/index.js\";\nimport addLeadingZeros from \"../_lib/addLeadingZeros/index.js\";\nimport toInteger from \"../_lib/toInteger/index.js\";\n/**\n * @name formatRFC3339\n * @category Common Helpers\n * @summary Format the date according to the RFC 3339 standard (https://tools.ietf.org/html/rfc3339#section-5.6).\n *\n * @description\n * Return the formatted date string in RFC 3339 format. Options may be passed to control the parts and notations of the date.\n *\n * @param {Date|Number} date - the original date\n * @param {Object} [options] - an object with options.\n * @param {0|1|2|3} [options.fractionDigits=0] - number of digits after the decimal point after seconds\n * @returns {String} the formatted date string\n * @throws {TypeError} 1 argument required\n * @throws {RangeError} `date` must not be Invalid Date\n * @throws {RangeError} `options.fractionDigits` must be between 0 and 3\n *\n * @example\n * // Represent 18 September 2019 in RFC 3339 format:\n * const result = formatRFC3339(new Date(2019, 8, 18, 19, 0, 52))\n * //=> '2019-09-18T19:00:52Z'\n *\n * @example\n * // Represent 18 September 2019 in RFC 3339 format, 2 digits of second fraction:\n * const result = formatRFC3339(new Date(2019, 8, 18, 19, 0, 52, 234), { fractionDigits: 2 })\n * //=> '2019-09-18T19:00:52.23Z'\n *\n * @example\n * // Represent 18 September 2019 in RFC 3339 format, 3 digits of second fraction\n * const result = formatRFC3339(new Date(2019, 8, 18, 19, 0, 52, 234), { fractionDigits: 3 })\n * //=> '2019-09-18T19:00:52.234Z'\n */\nexport default function formatRFC3339(dirtyDate, options) {\n  var _options$fractionDigi;\n  if (arguments.length < 1) {\n    throw new TypeError(\"1 arguments required, but only \".concat(arguments.length, \" present\"));\n  }\n  var originalDate = toDate(dirtyDate);\n  if (!isValid(originalDate)) {\n    throw new RangeError('Invalid time value');\n  }\n  var fractionDigits = Number((_options$fractionDigi = options === null || options === void 0 ? void 0 : options.fractionDigits) !== null && _options$fractionDigi !== void 0 ? _options$fractionDigi : 0);\n\n  // Test if fractionDigits is between 0 and 3 _and_ is not NaN\n  if (!(fractionDigits >= 0 && fractionDigits <= 3)) {\n    throw new RangeError('fractionDigits must be between 0 and 3 inclusively');\n  }\n  var day = addLeadingZeros(originalDate.getDate(), 2);\n  var month = addLeadingZeros(originalDate.getMonth() + 1, 2);\n  var year = originalDate.getFullYear();\n  var hour = addLeadingZeros(originalDate.getHours(), 2);\n  var minute = addLeadingZeros(originalDate.getMinutes(), 2);\n  var second = addLeadingZeros(originalDate.getSeconds(), 2);\n  var fractionalSecond = '';\n  if (fractionDigits > 0) {\n    var milliseconds = originalDate.getMilliseconds();\n    var fractionalSeconds = Math.floor(milliseconds * Math.pow(10, fractionDigits - 3));\n    fractionalSecond = '.' + addLeadingZeros(fractionalSeconds, fractionDigits);\n  }\n  var offset = '';\n  var tzOffset = originalDate.getTimezoneOffset();\n  if (tzOffset !== 0) {\n    var absoluteOffset = Math.abs(tzOffset);\n    var hourOffset = addLeadingZeros(toInteger(absoluteOffset / 60), 2);\n    var minuteOffset = addLeadingZeros(absoluteOffset % 60, 2);\n    // If less than 0, the sign is +, because it is ahead of time.\n    var sign = tzOffset < 0 ? '+' : '-';\n    offset = \"\".concat(sign).concat(hourOffset, \":\").concat(minuteOffset);\n  } else {\n    offset = 'Z';\n  }\n  return \"\".concat(year, \"-\").concat(month, \"-\").concat(day, \"T\").concat(hour, \":\").concat(minute, \":\").concat(second).concat(fractionalSecond).concat(offset);\n}","import toDate from \"../toDate/index.js\";\nimport isValid from \"../isValid/index.js\";\nimport addLeadingZeros from \"../_lib/addLeadingZeros/index.js\";\nvar days = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'];\nvar months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];\n\n/**\n * @name formatRFC7231\n * @category Common Helpers\n * @summary Format the date according to the RFC 7231 standard (https://tools.ietf.org/html/rfc7231#section-7.1.1.1).\n *\n * @description\n * Return the formatted date string in RFC 7231 format.\n * The result will always be in UTC timezone.\n *\n * @param {Date|Number} date - the original date\n * @returns {String} the formatted date string\n * @throws {TypeError} 1 argument required\n * @throws {RangeError} `date` must not be Invalid Date\n *\n * @example\n * // Represent 18 September 2019 in RFC 7231 format:\n * const result = formatRFC7231(new Date(2019, 8, 18, 19, 0, 52))\n * //=> 'Wed, 18 Sep 2019 19:00:52 GMT'\n */\nexport default function formatRFC7231(dirtyDate) {\n  if (arguments.length < 1) {\n    throw new TypeError(\"1 arguments required, but only \".concat(arguments.length, \" present\"));\n  }\n  var originalDate = toDate(dirtyDate);\n  if (!isValid(originalDate)) {\n    throw new RangeError('Invalid time value');\n  }\n  var dayName = days[originalDate.getUTCDay()];\n  var dayOfMonth = addLeadingZeros(originalDate.getUTCDate(), 2);\n  var monthName = months[originalDate.getUTCMonth()];\n  var year = originalDate.getUTCFullYear();\n  var hour = addLeadingZeros(originalDate.getUTCHours(), 2);\n  var minute = addLeadingZeros(originalDate.getUTCMinutes(), 2);\n  var second = addLeadingZeros(originalDate.getUTCSeconds(), 2);\n\n  // Result variables.\n  return \"\".concat(dayName, \", \").concat(dayOfMonth, \" \").concat(monthName, \" \").concat(year, \" \").concat(hour, \":\").concat(minute, \":\").concat(second, \" GMT\");\n}","import { getDefaultOptions } from \"../_lib/defaultOptions/index.js\";\nimport differenceInCalendarDays from \"../differenceInCalendarDays/index.js\";\nimport format from \"../format/index.js\";\nimport defaultLocale from \"../_lib/defaultLocale/index.js\";\nimport subMilliseconds from \"../subMilliseconds/index.js\";\nimport toDate from \"../toDate/index.js\";\nimport getTimezoneOffsetInMilliseconds from \"../_lib/getTimezoneOffsetInMilliseconds/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\nimport toInteger from \"../_lib/toInteger/index.js\";\n/**\n * @name formatRelative\n * @category Common Helpers\n * @summary Represent the date in words relative to the given base date.\n *\n * @description\n * Represent the date in words relative to the given base date.\n *\n * | Distance to the base date | Result                    |\n * |---------------------------|---------------------------|\n * | Previous 6 days           | last Sunday at 04:30 AM   |\n * | Last day                  | yesterday at 04:30 AM     |\n * | Same day                  | today at 04:30 AM         |\n * | Next day                  | tomorrow at 04:30 AM      |\n * | Next 6 days               | Sunday at 04:30 AM        |\n * | Other                     | 12/31/2017                |\n *\n * @param {Date|Number} date - the date to format\n * @param {Date|Number} baseDate - the date to compare with\n * @param {Object} [options] - an object with options.\n * @param {Locale} [options.locale=defaultLocale] - the locale object. See [Locale]{@link https://date-fns.org/docs/Locale}\n * @param {0|1|2|3|4|5|6} [options.weekStartsOn=0] - the index of the first day of the week (0 - Sunday)\n * @returns {String} the date in words\n * @throws {TypeError} 2 arguments required\n * @throws {RangeError} `date` must not be Invalid Date\n * @throws {RangeError} `baseDate` must not be Invalid Date\n * @throws {RangeError} `options.weekStartsOn` must be between 0 and 6\n * @throws {RangeError} `options.locale` must contain `localize` property\n * @throws {RangeError} `options.locale` must contain `formatLong` property\n * @throws {RangeError} `options.locale` must contain `formatRelative` property\n *\n * @example\n * // Represent the date of 6 days ago in words relative to the given base date. In this example, today is Wednesday\n * const result = formatRelative(addDays(new Date(), -6), new Date())\n * //=> \"last Thursday at 12:45 AM\"\n */\nexport default function formatRelative(dirtyDate, dirtyBaseDate, options) {\n  var _ref, _options$locale, _ref2, _ref3, _ref4, _options$weekStartsOn, _options$locale2, _options$locale2$opti, _defaultOptions$local, _defaultOptions$local2;\n  requiredArgs(2, arguments);\n  var date = toDate(dirtyDate);\n  var baseDate = toDate(dirtyBaseDate);\n  var defaultOptions = getDefaultOptions();\n  var locale = (_ref = (_options$locale = options === null || options === void 0 ? void 0 : options.locale) !== null && _options$locale !== void 0 ? _options$locale : defaultOptions.locale) !== null && _ref !== void 0 ? _ref : defaultLocale;\n  var weekStartsOn = toInteger((_ref2 = (_ref3 = (_ref4 = (_options$weekStartsOn = options === null || options === void 0 ? void 0 : options.weekStartsOn) !== null && _options$weekStartsOn !== void 0 ? _options$weekStartsOn : options === null || options === void 0 ? void 0 : (_options$locale2 = options.locale) === null || _options$locale2 === void 0 ? void 0 : (_options$locale2$opti = _options$locale2.options) === null || _options$locale2$opti === void 0 ? void 0 : _options$locale2$opti.weekStartsOn) !== null && _ref4 !== void 0 ? _ref4 : defaultOptions.weekStartsOn) !== null && _ref3 !== void 0 ? _ref3 : (_defaultOptions$local = defaultOptions.locale) === null || _defaultOptions$local === void 0 ? void 0 : (_defaultOptions$local2 = _defaultOptions$local.options) === null || _defaultOptions$local2 === void 0 ? void 0 : _defaultOptions$local2.weekStartsOn) !== null && _ref2 !== void 0 ? _ref2 : 0);\n  if (!locale.localize) {\n    throw new RangeError('locale must contain localize property');\n  }\n  if (!locale.formatLong) {\n    throw new RangeError('locale must contain formatLong property');\n  }\n  if (!locale.formatRelative) {\n    throw new RangeError('locale must contain formatRelative property');\n  }\n  var diff = differenceInCalendarDays(date, baseDate);\n  if (isNaN(diff)) {\n    throw new RangeError('Invalid time value');\n  }\n  var token;\n  if (diff < -6) {\n    token = 'other';\n  } else if (diff < -1) {\n    token = 'lastWeek';\n  } else if (diff < 0) {\n    token = 'yesterday';\n  } else if (diff < 1) {\n    token = 'today';\n  } else if (diff < 2) {\n    token = 'tomorrow';\n  } else if (diff < 7) {\n    token = 'nextWeek';\n  } else {\n    token = 'other';\n  }\n  var utcDate = subMilliseconds(date, getTimezoneOffsetInMilliseconds(date));\n  var utcBaseDate = subMilliseconds(baseDate, getTimezoneOffsetInMilliseconds(baseDate));\n  var formatStr = locale.formatRelative(token, utcDate, utcBaseDate, {\n    locale: locale,\n    weekStartsOn: weekStartsOn\n  });\n  return format(date, formatStr, {\n    locale: locale,\n    weekStartsOn: weekStartsOn\n  });\n}","import toDate from \"../toDate/index.js\";\nimport toInteger from \"../_lib/toInteger/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name fromUnixTime\n * @category Timestamp Helpers\n * @summary Create a date from a Unix timestamp.\n *\n * @description\n * Create a date from a Unix timestamp (in seconds). Decimal values will be discarded.\n *\n * @param {Number} unixTime - the given Unix timestamp (in seconds)\n * @returns {Date} the date\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Create the date 29 February 2012 11:45:05:\n * const result = fromUnixTime(1330515905)\n * //=> Wed Feb 29 2012 11:45:05\n */\nexport default function fromUnixTime(dirtyUnixTime) {\n  requiredArgs(1, arguments);\n  var unixTime = toInteger(dirtyUnixTime);\n  return toDate(unixTime * 1000);\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name getDate\n * @category Day Helpers\n * @summary Get the day of the month of the given date.\n *\n * @description\n * Get the day of the month of the given date.\n *\n * @param {Date|Number} date - the given date\n * @returns {Number} the day of month\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Which day of the month is 29 February 2012?\n * const result = getDate(new Date(2012, 1, 29))\n * //=> 29\n */\nexport default function getDate(dirtyDate) {\n  requiredArgs(1, arguments);\n  var date = toDate(dirtyDate);\n  var dayOfMonth = date.getDate();\n  return dayOfMonth;\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name getDay\n * @category Weekday Helpers\n * @summary Get the day of the week of the given date.\n *\n * @description\n * Get the day of the week of the given date.\n *\n * @param {Date|Number} date - the given date\n * @returns {0|1|2|3|4|5|6} the day of week, 0 represents Sunday\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Which day of the week is 29 February 2012?\n * const result = getDay(new Date(2012, 1, 29))\n * //=> 3\n */\nexport default function getDay(dirtyDate) {\n  requiredArgs(1, arguments);\n  var date = toDate(dirtyDate);\n  var day = date.getDay();\n  return day;\n}","import toDate from \"../toDate/index.js\";\nimport startOfYear from \"../startOfYear/index.js\";\nimport differenceInCalendarDays from \"../differenceInCalendarDays/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name getDayOfYear\n * @category Day Helpers\n * @summary Get the day of the year of the given date.\n *\n * @description\n * Get the day of the year of the given date.\n *\n * @param {Date|Number} date - the given date\n * @returns {Number} the day of year\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Which day of the year is 2 July 2014?\n * const result = getDayOfYear(new Date(2014, 6, 2))\n * //=> 183\n */\nexport default function getDayOfYear(dirtyDate) {\n  requiredArgs(1, arguments);\n  var date = toDate(dirtyDate);\n  var diff = differenceInCalendarDays(date, startOfYear(date));\n  var dayOfYear = diff + 1;\n  return dayOfYear;\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name getDaysInMonth\n * @category Month Helpers\n * @summary Get the number of days in a month of the given date.\n *\n * @description\n * Get the number of days in a month of the given date.\n *\n * @param {Date|Number} date - the given date\n * @returns {Number} the number of days in a month\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // How many days are in February 2000?\n * const result = getDaysInMonth(new Date(2000, 1))\n * //=> 29\n */\nexport default function getDaysInMonth(dirtyDate) {\n  requiredArgs(1, arguments);\n  var date = toDate(dirtyDate);\n  var year = date.getFullYear();\n  var monthIndex = date.getMonth();\n  var lastDayOfMonth = new Date(0);\n  lastDayOfMonth.setFullYear(year, monthIndex + 1, 0);\n  lastDayOfMonth.setHours(0, 0, 0, 0);\n  return lastDayOfMonth.getDate();\n}","import toDate from \"../toDate/index.js\";\nimport isLeapYear from \"../isLeapYear/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name getDaysInYear\n * @category Year Helpers\n * @summary Get the number of days in a year of the given date.\n *\n * @description\n * Get the number of days in a year of the given date.\n *\n * @param {Date|Number} date - the given date\n * @returns {Number} the number of days in a year\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // How many days are in 2012?\n * const result = getDaysInYear(new Date(2012, 0, 1))\n * //=> 366\n */\nexport default function getDaysInYear(dirtyDate) {\n  requiredArgs(1, arguments);\n  var date = toDate(dirtyDate);\n  if (String(new Date(date)) === 'Invalid Date') {\n    return NaN;\n  }\n  return isLeapYear(date) ? 366 : 365;\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name getDecade\n * @category Decade Helpers\n * @summary Get the decade of the given date.\n *\n * @description\n * Get the decade of the given date.\n *\n * @param {Date|Number} date - the given date\n * @returns {Number} the year of decade\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Which decade belongs 27 November 1942?\n * const result = getDecade(new Date(1942, 10, 27))\n * //=> 1940\n */\nexport default function getDecade(dirtyDate) {\n  requiredArgs(1, arguments);\n  var date = toDate(dirtyDate);\n  var year = date.getFullYear();\n  var decade = Math.floor(year / 10) * 10;\n  return decade;\n}","import { getDefaultOptions as getInternalDefaultOptions } from \"../_lib/defaultOptions/index.js\";\nimport assign from \"../_lib/assign/index.js\";\n/**\n * @name getDefaultOptions\n * @category Common Helpers\n * @summary Get default options.\n * @pure false\n *\n * @description\n * Returns an object that contains defaults for\n * `options.locale`, `options.weekStartsOn` and `options.firstWeekContainsDate`\n * arguments for all functions.\n *\n * You can change these with [setDefaultOptions]{@link https://date-fns.org/docs/setDefaultOptions}.\n *\n * @returns {Object} default options\n *\n * @example\n * const result = getDefaultOptions()\n * //=> {}\n *\n * @example\n * setDefaultOptions({ weekStarsOn: 1, firstWeekContainsDate: 4 })\n * const result = getDefaultOptions()\n * //=> { weekStarsOn: 1, firstWeekContainsDate: 4 }\n */\nexport default function getDefaultOptions() {\n  return assign({}, getInternalDefaultOptions());\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name getHours\n * @category Hour Helpers\n * @summary Get the hours of the given date.\n *\n * @description\n * Get the hours of the given date.\n *\n * @param {Date|Number} date - the given date\n * @returns {Number} the hours\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Get the hours of 29 February 2012 11:45:00:\n * const result = getHours(new Date(2012, 1, 29, 11, 45))\n * //=> 11\n */\nexport default function getHours(dirtyDate) {\n  requiredArgs(1, arguments);\n  var date = toDate(dirtyDate);\n  var hours = date.getHours();\n  return hours;\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name getISODay\n * @category Weekday Helpers\n * @summary Get the day of the ISO week of the given date.\n *\n * @description\n * Get the day of the ISO week of the given date,\n * which is 7 for Sunday, 1 for Monday etc.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * @param {Date|Number} date - the given date\n * @returns {Number} the day of ISO week\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Which day of the ISO week is 26 February 2012?\n * const result = getISODay(new Date(2012, 1, 26))\n * //=> 7\n */\nexport default function getISODay(dirtyDate) {\n  requiredArgs(1, arguments);\n  var date = toDate(dirtyDate);\n  var day = date.getDay();\n  if (day === 0) {\n    day = 7;\n  }\n  return day;\n}","import toDate from \"../toDate/index.js\";\nimport startOfISOWeek from \"../startOfISOWeek/index.js\";\nimport startOfISOWeekYear from \"../startOfISOWeekYear/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\nvar MILLISECONDS_IN_WEEK = 604800000;\n\n/**\n * @name getISOWeek\n * @category ISO Week Helpers\n * @summary Get the ISO week of the given date.\n *\n * @description\n * Get the ISO week of the given date.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * @param {Date|Number} date - the given date\n * @returns {Number} the ISO week\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Which week of the ISO-week numbering year is 2 January 2005?\n * const result = getISOWeek(new Date(2005, 0, 2))\n * //=> 53\n */\nexport default function getISOWeek(dirtyDate) {\n  requiredArgs(1, arguments);\n  var date = toDate(dirtyDate);\n  var diff = startOfISOWeek(date).getTime() - startOfISOWeekYear(date).getTime();\n\n  // Round the number of days to the nearest integer\n  // because the number of milliseconds in a week is not constant\n  // (e.g. it's different in the week of the daylight saving time clock shift)\n  return Math.round(diff / MILLISECONDS_IN_WEEK) + 1;\n}","import toDate from \"../toDate/index.js\";\nimport startOfISOWeek from \"../startOfISOWeek/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name getISOWeekYear\n * @category ISO Week-Numbering Year Helpers\n * @summary Get the ISO week-numbering year of the given date.\n *\n * @description\n * Get the ISO week-numbering year of the given date,\n * which always starts 3 days before the year's first Thursday.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * @param {Date|Number} date - the given date\n * @returns {Number} the ISO week-numbering year\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Which ISO-week numbering year is 2 January 2005?\n * const result = getISOWeekYear(new Date(2005, 0, 2))\n * //=> 2004\n */\nexport default function getISOWeekYear(dirtyDate) {\n  requiredArgs(1, arguments);\n  var date = toDate(dirtyDate);\n  var year = date.getFullYear();\n  var fourthOfJanuaryOfNextYear = new Date(0);\n  fourthOfJanuaryOfNextYear.setFullYear(year + 1, 0, 4);\n  fourthOfJanuaryOfNextYear.setHours(0, 0, 0, 0);\n  var startOfNextYear = startOfISOWeek(fourthOfJanuaryOfNextYear);\n  var fourthOfJanuaryOfThisYear = new Date(0);\n  fourthOfJanuaryOfThisYear.setFullYear(year, 0, 4);\n  fourthOfJanuaryOfThisYear.setHours(0, 0, 0, 0);\n  var startOfThisYear = startOfISOWeek(fourthOfJanuaryOfThisYear);\n  if (date.getTime() >= startOfNextYear.getTime()) {\n    return year + 1;\n  } else if (date.getTime() >= startOfThisYear.getTime()) {\n    return year;\n  } else {\n    return year - 1;\n  }\n}","import startOfISOWeekYear from \"../startOfISOWeekYear/index.js\";\nimport addWeeks from \"../addWeeks/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\nvar MILLISECONDS_IN_WEEK = 604800000;\n\n/**\n * @name getISOWeeksInYear\n * @category ISO Week-Numbering Year Helpers\n * @summary Get the number of weeks in an ISO week-numbering year of the given date.\n *\n * @description\n * Get the number of weeks in an ISO week-numbering year of the given date.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * @param {Date|Number} date - the given date\n * @returns {Number} the number of ISO weeks in a year\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // How many weeks are in ISO week-numbering year 2015?\n * const result = getISOWeeksInYear(new Date(2015, 1, 11))\n * //=> 53\n */\nexport default function getISOWeeksInYear(dirtyDate) {\n  requiredArgs(1, arguments);\n  var thisYear = startOfISOWeekYear(dirtyDate);\n  var nextYear = startOfISOWeekYear(addWeeks(thisYear, 60));\n  var diff = nextYear.valueOf() - thisYear.valueOf();\n  // Round the number of weeks to the nearest integer\n  // because the number of milliseconds in a week is not constant\n  // (e.g. it's different in the week of the daylight saving time clock shift)\n  return Math.round(diff / MILLISECONDS_IN_WEEK);\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name getMilliseconds\n * @category Millisecond Helpers\n * @summary Get the milliseconds of the given date.\n *\n * @description\n * Get the milliseconds of the given date.\n *\n * @param {Date|Number} date - the given date\n * @returns {Number} the milliseconds\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Get the milliseconds of 29 February 2012 11:45:05.123:\n * const result = getMilliseconds(new Date(2012, 1, 29, 11, 45, 5, 123))\n * //=> 123\n */\nexport default function getMilliseconds(dirtyDate) {\n  requiredArgs(1, arguments);\n  var date = toDate(dirtyDate);\n  var milliseconds = date.getMilliseconds();\n  return milliseconds;\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name getMinutes\n * @category Minute Helpers\n * @summary Get the minutes of the given date.\n *\n * @description\n * Get the minutes of the given date.\n *\n * @param {Date|Number} date - the given date\n * @returns {Number} the minutes\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Get the minutes of 29 February 2012 11:45:05:\n * const result = getMinutes(new Date(2012, 1, 29, 11, 45, 5))\n * //=> 45\n */\nexport default function getMinutes(dirtyDate) {\n  requiredArgs(1, arguments);\n  var date = toDate(dirtyDate);\n  var minutes = date.getMinutes();\n  return minutes;\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name getMonth\n * @category Month Helpers\n * @summary Get the month of the given date.\n *\n * @description\n * Get the month of the given date.\n *\n * @param {Date|Number} date - the given date\n * @returns {Number} the month\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Which month is 29 February 2012?\n * const result = getMonth(new Date(2012, 1, 29))\n * //=> 1\n */\nexport default function getMonth(dirtyDate) {\n  requiredArgs(1, arguments);\n  var date = toDate(dirtyDate);\n  var month = date.getMonth();\n  return month;\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\nvar MILLISECONDS_IN_DAY = 24 * 60 * 60 * 1000;\n\n/**\n * @name getOverlappingDaysInIntervals\n * @category Interval Helpers\n * @summary Get the number of days that overlap in two time intervals\n *\n * @description\n * Get the number of days that overlap in two time intervals\n *\n * @param {Interval} intervalLeft - the first interval to compare. See [Interval]{@link docs/Interval}\n * @param {Interval} intervalRight - the second interval to compare. See [Interval]{@link docs/Interval}\n * @returns {Number} the number of days that overlap in two time intervals\n * @throws {TypeError} 2 arguments required\n * @throws {RangeError} The start of an interval cannot be after its end\n * @throws {RangeError} Date in interval cannot be `Invalid Date`\n *\n * @example\n * // For overlapping time intervals adds 1 for each started overlapping day:\n * getOverlappingDaysInIntervals(\n *   { start: new Date(2014, 0, 10), end: new Date(2014, 0, 20) },\n *   { start: new Date(2014, 0, 17), end: new Date(2014, 0, 21) }\n * )\n * //=> 3\n *\n * @example\n * // For non-overlapping time intervals returns 0:\n * getOverlappingDaysInIntervals(\n *   { start: new Date(2014, 0, 10), end: new Date(2014, 0, 20) },\n *   { start: new Date(2014, 0, 21), end: new Date(2014, 0, 22) }\n * )\n * //=> 0\n */\n\nexport default function getOverlappingDaysInIntervals(dirtyIntervalLeft, dirtyIntervalRight) {\n  requiredArgs(2, arguments);\n  var intervalLeft = dirtyIntervalLeft || {};\n  var intervalRight = dirtyIntervalRight || {};\n  var leftStartTime = toDate(intervalLeft.start).getTime();\n  var leftEndTime = toDate(intervalLeft.end).getTime();\n  var rightStartTime = toDate(intervalRight.start).getTime();\n  var rightEndTime = toDate(intervalRight.end).getTime();\n\n  // Throw an exception if start date is after end date or if any date is `Invalid Date`\n  if (!(leftStartTime <= leftEndTime && rightStartTime <= rightEndTime)) {\n    throw new RangeError('Invalid interval');\n  }\n  var isOverlapping = leftStartTime < rightEndTime && rightStartTime < leftEndTime;\n  if (!isOverlapping) {\n    return 0;\n  }\n  var overlapStartDate = rightStartTime < leftStartTime ? leftStartTime : rightStartTime;\n  var overlapEndDate = rightEndTime > leftEndTime ? leftEndTime : rightEndTime;\n  var differenceInMs = overlapEndDate - overlapStartDate;\n  return Math.ceil(differenceInMs / MILLISECONDS_IN_DAY);\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name getQuarter\n * @category Quarter Helpers\n * @summary Get the year quarter of the given date.\n *\n * @description\n * Get the year quarter of the given date.\n *\n * @param {Date|Number} date - the given date\n * @returns {Number} the quarter\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Which quarter is 2 July 2014?\n * const result = getQuarter(new Date(2014, 6, 2))\n * //=> 3\n */\nexport default function getQuarter(dirtyDate) {\n  requiredArgs(1, arguments);\n  var date = toDate(dirtyDate);\n  var quarter = Math.floor(date.getMonth() / 3) + 1;\n  return quarter;\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name getSeconds\n * @category Second Helpers\n * @summary Get the seconds of the given date.\n *\n * @description\n * Get the seconds of the given date.\n *\n * @param {Date|Number} date - the given date\n * @returns {Number} the seconds\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Get the seconds of 29 February 2012 11:45:05.123:\n * const result = getSeconds(new Date(2012, 1, 29, 11, 45, 5, 123))\n * //=> 5\n */\nexport default function getSeconds(dirtyDate) {\n  requiredArgs(1, arguments);\n  var date = toDate(dirtyDate);\n  var seconds = date.getSeconds();\n  return seconds;\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name getTime\n * @category Timestamp Helpers\n * @summary Get the milliseconds timestamp of the given date.\n *\n * @description\n * Get the milliseconds timestamp of the given date.\n *\n * @param {Date|Number} date - the given date\n * @returns {Number} the timestamp\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Get the timestamp of 29 February 2012 11:45:05.123:\n * const result = getTime(new Date(2012, 1, 29, 11, 45, 5, 123))\n * //=> 1330515905123\n */\nexport default function getTime(dirtyDate) {\n  requiredArgs(1, arguments);\n  var date = toDate(dirtyDate);\n  var timestamp = date.getTime();\n  return timestamp;\n}","import getTime from \"../getTime/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name getUnixTime\n * @category Timestamp Helpers\n * @summary Get the seconds timestamp of the given date.\n *\n * @description\n * Get the seconds timestamp of the given date.\n *\n * @param {Date|Number} date - the given date\n * @returns {Number} the timestamp\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Get the timestamp of 29 February 2012 11:45:05 CET:\n * const result = getUnixTime(new Date(2012, 1, 29, 11, 45, 5))\n * //=> 1330512305\n */\nexport default function getUnixTime(dirtyDate) {\n  requiredArgs(1, arguments);\n  return Math.floor(getTime(dirtyDate) / 1000);\n}","import startOfWeek from \"../startOfWeek/index.js\";\nimport startOfWeekYear from \"../startOfWeekYear/index.js\";\nimport toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\nvar MILLISECONDS_IN_WEEK = 604800000;\n\n/**\n * @name getWeek\n * @category Week Helpers\n * @summary Get the local week index of the given date.\n *\n * @description\n * Get the local week index of the given date.\n * The exact calculation depends on the values of\n * `options.weekStartsOn` (which is the index of the first day of the week)\n * and `options.firstWeekContainsDate` (which is the day of January, which is always in\n * the first week of the week-numbering year)\n *\n * Week numbering: https://en.wikipedia.org/wiki/Week#Week_numbering\n *\n * @param {Date|Number} date - the given date\n * @param {Object} [options] - an object with options.\n * @param {Locale} [options.locale=defaultLocale] - the locale object. See [Locale]{@link https://date-fns.org/docs/Locale}\n * @param {0|1|2|3|4|5|6} [options.weekStartsOn=0] - the index of the first day of the week (0 - Sunday)\n * @param {1|2|3|4|5|6|7} [options.firstWeekContainsDate=1] - the day of January, which is always in the first week of the year\n * @returns {Number} the week\n * @throws {TypeError} 1 argument required\n * @throws {RangeError} `options.weekStartsOn` must be between 0 and 6\n * @throws {RangeError} `options.firstWeekContainsDate` must be between 1 and 7\n *\n * @example\n * // Which week of the local week numbering year is 2 January 2005 with default options?\n * const result = getWeek(new Date(2005, 0, 2))\n * //=> 2\n *\n * // Which week of the local week numbering year is 2 January 2005,\n * // if Monday is the first day of the week,\n * // and the first week of the year always contains 4 January?\n * const result = getWeek(new Date(2005, 0, 2), {\n *   weekStartsOn: 1,\n *   firstWeekContainsDate: 4\n * })\n * //=> 53\n */\n\nexport default function getWeek(dirtyDate, options) {\n  requiredArgs(1, arguments);\n  var date = toDate(dirtyDate);\n  var diff = startOfWeek(date, options).getTime() - startOfWeekYear(date, options).getTime();\n\n  // Round the number of days to the nearest integer\n  // because the number of milliseconds in a week is not constant\n  // (e.g. it's different in the week of the daylight saving time clock shift)\n  return Math.round(diff / MILLISECONDS_IN_WEEK) + 1;\n}","import { getDefaultOptions } from \"../_lib/defaultOptions/index.js\";\nimport getDate from \"../getDate/index.js\";\nimport getDay from \"../getDay/index.js\";\nimport startOfMonth from \"../startOfMonth/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\nimport toInteger from \"../_lib/toInteger/index.js\";\n/**\n * @name getWeekOfMonth\n * @category Week Helpers\n * @summary Get the week of the month of the given date.\n *\n * @description\n * Get the week of the month of the given date.\n *\n * @param {Date|Number} date - the given date\n * @param {Object} [options] - an object with options.\n * @param {Locale} [options.locale=defaultLocale] - the locale object. See [Locale]{@link https://date-fns.org/docs/Locale}\n * @param {0|1|2|3|4|5|6} [options.weekStartsOn=0] - the index of the first day of the week (0 - Sunday)\n * @returns {Number} the week of month\n * @throws {TypeError} 1 argument required\n * @throws {RangeError} `options.weekStartsOn` must be between 0 and 6 inclusively\n *\n * @example\n * // Which week of the month is 9 November 2017?\n * const result = getWeekOfMonth(new Date(2017, 10, 9))\n * //=> 2\n */\nexport default function getWeekOfMonth(date, options) {\n  var _ref, _ref2, _ref3, _options$weekStartsOn, _options$locale, _options$locale$optio, _defaultOptions$local, _defaultOptions$local2;\n  requiredArgs(1, arguments);\n  var defaultOptions = getDefaultOptions();\n  var weekStartsOn = toInteger((_ref = (_ref2 = (_ref3 = (_options$weekStartsOn = options === null || options === void 0 ? void 0 : options.weekStartsOn) !== null && _options$weekStartsOn !== void 0 ? _options$weekStartsOn : options === null || options === void 0 ? void 0 : (_options$locale = options.locale) === null || _options$locale === void 0 ? void 0 : (_options$locale$optio = _options$locale.options) === null || _options$locale$optio === void 0 ? void 0 : _options$locale$optio.weekStartsOn) !== null && _ref3 !== void 0 ? _ref3 : defaultOptions.weekStartsOn) !== null && _ref2 !== void 0 ? _ref2 : (_defaultOptions$local = defaultOptions.locale) === null || _defaultOptions$local === void 0 ? void 0 : (_defaultOptions$local2 = _defaultOptions$local.options) === null || _defaultOptions$local2 === void 0 ? void 0 : _defaultOptions$local2.weekStartsOn) !== null && _ref !== void 0 ? _ref : 0);\n  if (!(weekStartsOn >= 0 && weekStartsOn <= 6)) {\n    throw new RangeError('weekStartsOn must be between 0 and 6 inclusively');\n  }\n  var currentDayOfMonth = getDate(date);\n  if (isNaN(currentDayOfMonth)) return NaN;\n  var startWeekDay = getDay(startOfMonth(date));\n  var lastDayOfFirstWeek = weekStartsOn - startWeekDay;\n  if (lastDayOfFirstWeek <= 0) lastDayOfFirstWeek += 7;\n  var remainingDaysAfterFirstWeek = currentDayOfMonth - lastDayOfFirstWeek;\n  return Math.ceil(remainingDaysAfterFirstWeek / 7) + 1;\n}","import startOfWeek from \"../startOfWeek/index.js\";\nimport toDate from \"../toDate/index.js\";\nimport toInteger from \"../_lib/toInteger/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\nimport { getDefaultOptions } from \"../_lib/defaultOptions/index.js\";\n/**\n * @name getWeekYear\n * @category Week-Numbering Year Helpers\n * @summary Get the local week-numbering year of the given date.\n *\n * @description\n * Get the local week-numbering year of the given date.\n * The exact calculation depends on the values of\n * `options.weekStartsOn` (which is the index of the first day of the week)\n * and `options.firstWeekContainsDate` (which is the day of January, which is always in\n * the first week of the week-numbering year)\n *\n * Week numbering: https://en.wikipedia.org/wiki/Week#Week_numbering\n *\n * @param {Date|Number} date - the given date\n * @param {Object} [options] - an object with options.\n * @param {Locale} [options.locale=defaultLocale] - the locale object. See [Locale]{@link https://date-fns.org/docs/Locale}\n * @param {0|1|2|3|4|5|6} [options.weekStartsOn=0] - the index of the first day of the week (0 - Sunday)\n * @param {1|2|3|4|5|6|7} [options.firstWeekContainsDate=1] - the day of January, which is always in the first week of the year\n * @returns {Number} the local week-numbering year\n * @throws {TypeError} 1 argument required\n * @throws {RangeError} `options.weekStartsOn` must be between 0 and 6\n * @throws {RangeError} `options.firstWeekContainsDate` must be between 1 and 7\n *\n * @example\n * // Which week numbering year is 26 December 2004 with the default settings?\n * const result = getWeekYear(new Date(2004, 11, 26))\n * //=> 2005\n *\n * @example\n * // Which week numbering year is 26 December 2004 if week starts on Saturday?\n * const result = getWeekYear(new Date(2004, 11, 26), { weekStartsOn: 6 })\n * //=> 2004\n *\n * @example\n * // Which week numbering year is 26 December 2004 if the first week contains 4 January?\n * const result = getWeekYear(new Date(2004, 11, 26), { firstWeekContainsDate: 4 })\n * //=> 2004\n */\nexport default function getWeekYear(dirtyDate, options) {\n  var _ref, _ref2, _ref3, _options$firstWeekCon, _options$locale, _options$locale$optio, _defaultOptions$local, _defaultOptions$local2;\n  requiredArgs(1, arguments);\n  var date = toDate(dirtyDate);\n  var year = date.getFullYear();\n  var defaultOptions = getDefaultOptions();\n  var firstWeekContainsDate = toInteger((_ref = (_ref2 = (_ref3 = (_options$firstWeekCon = options === null || options === void 0 ? void 0 : options.firstWeekContainsDate) !== null && _options$firstWeekCon !== void 0 ? _options$firstWeekCon : options === null || options === void 0 ? void 0 : (_options$locale = options.locale) === null || _options$locale === void 0 ? void 0 : (_options$locale$optio = _options$locale.options) === null || _options$locale$optio === void 0 ? void 0 : _options$locale$optio.firstWeekContainsDate) !== null && _ref3 !== void 0 ? _ref3 : defaultOptions.firstWeekContainsDate) !== null && _ref2 !== void 0 ? _ref2 : (_defaultOptions$local = defaultOptions.locale) === null || _defaultOptions$local === void 0 ? void 0 : (_defaultOptions$local2 = _defaultOptions$local.options) === null || _defaultOptions$local2 === void 0 ? void 0 : _defaultOptions$local2.firstWeekContainsDate) !== null && _ref !== void 0 ? _ref : 1);\n\n  // Test if weekStartsOn is between 1 and 7 _and_ is not NaN\n  if (!(firstWeekContainsDate >= 1 && firstWeekContainsDate <= 7)) {\n    throw new RangeError('firstWeekContainsDate must be between 1 and 7 inclusively');\n  }\n  var firstWeekOfNextYear = new Date(0);\n  firstWeekOfNextYear.setFullYear(year + 1, 0, firstWeekContainsDate);\n  firstWeekOfNextYear.setHours(0, 0, 0, 0);\n  var startOfNextYear = startOfWeek(firstWeekOfNextYear, options);\n  var firstWeekOfThisYear = new Date(0);\n  firstWeekOfThisYear.setFullYear(year, 0, firstWeekContainsDate);\n  firstWeekOfThisYear.setHours(0, 0, 0, 0);\n  var startOfThisYear = startOfWeek(firstWeekOfThisYear, options);\n  if (date.getTime() >= startOfNextYear.getTime()) {\n    return year + 1;\n  } else if (date.getTime() >= startOfThisYear.getTime()) {\n    return year;\n  } else {\n    return year - 1;\n  }\n}","import differenceInCalendarWeeks from \"../differenceInCalendarWeeks/index.js\";\nimport lastDayOfMonth from \"../lastDayOfMonth/index.js\";\nimport startOfMonth from \"../startOfMonth/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name getWeeksInMonth\n * @category Week Helpers\n * @summary Get the number of calendar weeks a month spans.\n *\n * @description\n * Get the number of calendar weeks the month in the given date spans.\n *\n * @param {Date|Number} date - the given date\n * @param {Object} [options] - an object with options.\n * @param {Locale} [options.locale=defaultLocale] - the locale object. See [Locale]{@link https://date-fns.org/docs/Locale}\n * @param {0|1|2|3|4|5|6} [options.weekStartsOn=0] - the index of the first day of the week (0 - Sunday)\n * @returns {Number} the number of calendar weeks\n * @throws {TypeError} 2 arguments required\n * @throws {RangeError} `options.weekStartsOn` must be between 0 and 6\n *\n * @example\n * // How many calendar weeks does February 2015 span?\n * const result = getWeeksInMonth(new Date(2015, 1, 8))\n * //=> 4\n *\n * @example\n * // If the week starts on Monday,\n * // how many calendar weeks does July 2017 span?\n * const result = getWeeksInMonth(new Date(2017, 6, 5), { weekStartsOn: 1 })\n * //=> 6\n */\nexport default function getWeeksInMonth(date, options) {\n  requiredArgs(1, arguments);\n  return differenceInCalendarWeeks(lastDayOfMonth(date), startOfMonth(date), options) + 1;\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name getYear\n * @category Year Helpers\n * @summary Get the year of the given date.\n *\n * @description\n * Get the year of the given date.\n *\n * @param {Date|Number} date - the given date\n * @returns {Number} the year\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Which year is 2 July 2014?\n * const result = getYear(new Date(2014, 6, 2))\n * //=> 2014\n */\nexport default function getYear(dirtyDate) {\n  requiredArgs(1, arguments);\n  return toDate(dirtyDate).getFullYear();\n}","import requiredArgs from \"../_lib/requiredArgs/index.js\";\nimport { millisecondsInHour } from \"../constants/index.js\";\n/**\n * @name hoursToMilliseconds\n * @category  Conversion Helpers\n * @summary Convert hours to milliseconds.\n *\n * @description\n * Convert a number of hours to a full number of milliseconds.\n *\n * @param {number} hours - number of hours to be converted\n *\n * @returns {number} the number of hours converted to milliseconds\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Convert 2 hours to milliseconds:\n * const result = hoursToMilliseconds(2)\n * //=> 7200000\n */\nexport default function hoursToMilliseconds(hours) {\n  requiredArgs(1, arguments);\n  return Math.floor(hours * millisecondsInHour);\n}","import requiredArgs from \"../_lib/requiredArgs/index.js\";\nimport { minutesInHour } from \"../constants/index.js\";\n/**\n * @name hoursToMinutes\n * @category Conversion Helpers\n * @summary Convert hours to minutes.\n *\n * @description\n * Convert a number of hours to a full number of minutes.\n *\n * @param {number} hours - number of hours to be converted\n *\n * @returns {number} the number of hours converted in minutes\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Convert 2 hours to minutes:\n * const result = hoursToMinutes(2)\n * //=> 120\n */\nexport default function hoursToMinutes(hours) {\n  requiredArgs(1, arguments);\n  return Math.floor(hours * minutesInHour);\n}","import requiredArgs from \"../_lib/requiredArgs/index.js\";\nimport { secondsInHour } from \"../constants/index.js\";\n/**\n * @name hoursToSeconds\n * @category Conversion Helpers\n * @summary Convert hours to seconds.\n *\n * @description\n * Convert a number of hours to a full number of seconds.\n *\n * @param {number} hours - number of hours to be converted\n *\n * @returns {number} the number of hours converted in seconds\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Convert 2 hours to seconds:\n * const result = hoursToSeconds(2)\n * //=> 7200\n */\nexport default function hoursToSeconds(hours) {\n  requiredArgs(1, arguments);\n  return Math.floor(hours * secondsInHour);\n}","import compareAsc from \"../compareAsc/index.js\";\nimport add from \"../add/index.js\";\nimport differenceInDays from \"../differenceInDays/index.js\";\nimport differenceInHours from \"../differenceInHours/index.js\";\nimport differenceInMinutes from \"../differenceInMinutes/index.js\";\nimport differenceInMonths from \"../differenceInMonths/index.js\";\nimport differenceInSeconds from \"../differenceInSeconds/index.js\";\nimport differenceInYears from \"../differenceInYears/index.js\";\nimport toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name intervalToDuration\n * @category Common Helpers\n * @summary Convert interval to duration\n *\n * @description\n * Convert a interval object to a duration object.\n *\n * @param {Interval} interval - the interval to convert to duration\n *\n * @returns {Duration} The duration Object\n * @throws {TypeError} Requires 2 arguments\n * @throws {RangeError} `start` must not be Invalid Date\n * @throws {RangeError} `end` must not be Invalid Date\n *\n * @example\n * // Get the duration between January 15, 1929 and April 4, 1968.\n * intervalToDuration({\n *   start: new Date(1929, 0, 15, 12, 0, 0),\n *   end: new Date(1968, 3, 4, 19, 5, 0)\n * })\n * // => { years: 39, months: 2, days: 20, hours: 7, minutes: 5, seconds: 0 }\n */\nexport default function intervalToDuration(interval) {\n  requiredArgs(1, arguments);\n  var start = toDate(interval.start);\n  var end = toDate(interval.end);\n  if (isNaN(start.getTime())) throw new RangeError('Start Date is invalid');\n  if (isNaN(end.getTime())) throw new RangeError('End Date is invalid');\n  var duration = {};\n  duration.years = Math.abs(differenceInYears(end, start));\n  var sign = compareAsc(end, start);\n  var remainingMonths = add(start, {\n    years: sign * duration.years\n  });\n  duration.months = Math.abs(differenceInMonths(end, remainingMonths));\n  var remainingDays = add(remainingMonths, {\n    months: sign * duration.months\n  });\n  duration.days = Math.abs(differenceInDays(end, remainingDays));\n  var remainingHours = add(remainingDays, {\n    days: sign * duration.days\n  });\n  duration.hours = Math.abs(differenceInHours(end, remainingHours));\n  var remainingMinutes = add(remainingHours, {\n    hours: sign * duration.hours\n  });\n  duration.minutes = Math.abs(differenceInMinutes(end, remainingMinutes));\n  var remainingSeconds = add(remainingMinutes, {\n    minutes: sign * duration.minutes\n  });\n  duration.seconds = Math.abs(differenceInSeconds(end, remainingSeconds));\n  return duration;\n}","import requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name intlFormat\n * @category Common Helpers\n * @summary  Format the date with Intl.DateTimeFormat (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat).\n *\n * @description\n * Return the formatted date string in the given format.\n * The method uses [`Intl.DateTimeFormat`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat) inside.\n * formatOptions are the same as [`Intl.DateTimeFormat` options](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat#using_options)\n *\n * > ⚠️ Please note that before Node version 13.0.0, only the locale data for en-US is available by default.\n *\n * @param {Date|Number} argument - the original date.\n * @param {Object} [formatOptions] - an object with options.\n * @param {'lookup'|'best fit'} [formatOptions.localeMatcher='best fit'] - locale selection algorithm.\n * @param {'narrow'|'short'|'long'} [formatOptions.weekday] - representation the days of the week.\n * @param {'narrow'|'short'|'long'} [formatOptions.era] - representation of eras.\n * @param {'numeric'|'2-digit'} [formatOptions.year] - representation of years.\n * @param {'numeric'|'2-digit'|'narrow'|'short'|'long'} [formatOptions.month='numeric'] - representation of month.\n * @param {'numeric'|'2-digit'} [formatOptions.day='numeric'] - representation of day.\n * @param {'numeric'|'2-digit'} [formatOptions.hour='numeric'] - representation of hours.\n * @param {'numeric'|'2-digit'} [formatOptions.minute] - representation of minutes.\n * @param {'numeric'|'2-digit'} [formatOptions.second] - representation of seconds.\n * @param {'short'|'long'} [formatOptions.timeZoneName] - representation of names of time zones.\n * @param {'basic'|'best fit'} [formatOptions.formatMatcher='best fit'] - format selection algorithm.\n * @param {Boolean} [formatOptions.hour12] - determines whether to use 12-hour time format.\n * @param {String} [formatOptions.timeZone] - the time zone to use.\n * @param {Object} [localeOptions] - an object with locale.\n * @param {String|String[]} [localeOptions.locale] - the locale code\n * @returns {String} the formatted date string.\n * @throws {TypeError} 1 argument required.\n * @throws {RangeError} `date` must not be Invalid Date\n *\n * @example\n * // Represent 10 October 2019 in German.\n * // Convert the date with format's options and locale's options.\n * const result = intlFormat(new Date(2019, 9, 4, 12, 30, 13, 456), {\n *      weekday: 'long',\n *      year: 'numeric',\n *      month: 'long',\n *      day: 'numeric',\n *    }, {\n *      locale: 'de-DE',\n *  })\n * //=> Freitag, 4. Oktober 2019\n *\n * @example\n * // Represent 10 October 2019.\n * // Convert the date with format's options.\n * const result = intlFormat.default(new Date(2019, 9, 4, 12, 30, 13, 456), {\n *      year: 'numeric',\n *      month: 'numeric',\n *      day: 'numeric',\n *      hour: 'numeric',\n *  })\n * //=> 10/4/2019, 12 PM\n *\n * @example\n * // Represent 10 October 2019 in Korean.\n * // Convert the date with locale's options.\n * const result = intlFormat(new Date(2019, 9, 4, 12, 30, 13, 456), {\n *      locale: 'ko-KR',\n *  })\n * //=> 2019. 10. 4.\n *\n * @example\n * // Represent 10 October 2019 in middle-endian format:\n * const result = intlFormat(new Date(2019, 9, 4, 12, 30, 13, 456))\n * //=> 10/4/2019\n */\nexport default function intlFormat(date, formatOrLocale, localeOptions) {\n  var _localeOptions;\n  requiredArgs(1, arguments);\n  var formatOptions;\n  if (isFormatOptions(formatOrLocale)) {\n    formatOptions = formatOrLocale;\n  } else {\n    localeOptions = formatOrLocale;\n  }\n  return new Intl.DateTimeFormat((_localeOptions = localeOptions) === null || _localeOptions === void 0 ? void 0 : _localeOptions.locale, formatOptions).format(date);\n}\nfunction isFormatOptions(opts) {\n  return opts !== undefined && !('locale' in opts);\n}","import { secondsInDay, secondsInHour, secondsInMinute, secondsInMonth, secondsInQuarter, secondsInWeek, secondsInYear } from \"../constants/index.js\";\nimport differenceInCalendarDays from \"../differenceInCalendarDays/index.js\";\nimport differenceInCalendarMonths from \"../differenceInCalendarMonths/index.js\";\nimport differenceInCalendarQuarters from \"../differenceInCalendarQuarters/index.js\";\nimport differenceInCalendarWeeks from \"../differenceInCalendarWeeks/index.js\";\nimport differenceInCalendarYears from \"../differenceInCalendarYears/index.js\";\nimport differenceInHours from \"../differenceInHours/index.js\";\nimport differenceInMinutes from \"../differenceInMinutes/index.js\";\nimport differenceInSeconds from \"../differenceInSeconds/index.js\";\nimport toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name intlFormatDistance\n * @category Common Helpers\n * @summary Formats distance between two dates in a human-readable format\n * @description\n * The function calculates the difference between two dates and formats it as a human-readable string.\n *\n * The function will pick the most appropriate unit depending on the distance between dates. For example, if the distance is a few hours, it might return `x hours`. If the distance is a few months, it might return `x months`.\n *\n * You can also specify a unit to force using it regardless of the distance to get a result like `123456 hours`.\n *\n * See the table below for the unit picking logic:\n *\n * | Distance between dates | Result (past)  | Result (future) |\n * | ---------------------- | -------------- | --------------- |\n * | 0 seconds              | now            | now             |\n * | 1-59 seconds           | X seconds ago  | in X seconds    |\n * | 1-59 minutes           | X minutes ago  | in X minutes    |\n * | 1-23 hours             | X hours ago    | in X hours      |\n * | 1 day                  | yesterday      | tomorrow        |\n * | 2-6 days               | X days ago     | in X days       |\n * | 7 days                 | last week      | next week       |\n * | 8 days-1 month         | X weeks ago    | in X weeks      |\n * | 1 month                | last month     | next month      |\n * | 2-3 months             | X months ago   | in X months     |\n * | 1 quarter              | last quarter   | next quarter    |\n * | 2-3 quarters           | X quarters ago | in X quarters   |\n * | 1 year                 | last year      | next year       |\n * | 2+ years               | X years ago    | in X years      |\n *\n * @param {Date|Number} date - the date\n * @param {Date|Number} baseDate - the date to compare with.\n * @param {Object} [options] - an object with options.\n * @param {String} [options.unit] - formats the distance with the given unit ('year', 'quarter', 'month', 'week', 'day', 'hour', 'minute', 'second').\n * @param {String|String[]} [options.locale] - the locale to use.\n * @param {String} [options.localeMatcher='best fit'] - the locale matching algorithm to use. Other value: 'lookup'.\n * See MDN for details [Locale identification and negotiation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl#locale_identification_and_negotiation)\n * @param {String} [options.numeric='auto'] - the output message format. The values are 'auto' (e.g. `yesterday`), 'always'(e.g. `1 day ago`).\n * @param {String} [options.style='long'] - the length of the result. The values are: 'long' (e.g. `1 month`), 'short' (e.g. 'in 1 mo.'), 'narrow' (e.g. 'in 1 mo.').\n * The narrow one could be similar to the short one for some locales.\n * @returns {String} the distance in words according to language-sensitive relative time formatting.\n * @throws {TypeError} 2 arguments required\n * @throws {RangeError} `date` must not be Invalid Date\n * @throws {RangeError} `baseDate` must not be Invalid Date\n * @throws {RangeError} `options.unit` must not be invalid Unit\n * @throws {RangeError} `options.locale` must not be invalid locale\n * @throws {RangeError} `options.localeMatcher` must not be invalid localeMatcher\n * @throws {RangeError} `options.numeric` must not be invalid numeric\n * @throws {RangeError} `options.style` must not be invalid style\n *\n * @example\n * // What is the distance between the dates when the fist date is after the second?\n * intlFormatDistance(\n *   new Date(1986, 3, 4, 11, 30, 0),\n *   new Date(1986, 3, 4, 10, 30, 0)\n * )\n * //=> 'in 1 hour'\n *\n * // What is the distance between the dates when the fist date is before the second?\n * intlFormatDistance(\n *   new Date(1986, 3, 4, 10, 30, 0),\n *   new Date(1986, 3, 4, 11, 30, 0)\n * )\n * //=> '1 hour ago'\n *\n * @example\n * // Use the unit option to force the function to output the result in quarters. Without setting it, the example would return \"next year\"\n * intlFormatDistance(\n *   new Date(1987, 6, 4, 10, 30, 0),\n *   new Date(1986, 3, 4, 10, 30, 0),\n *   { unit: 'quarter' }\n * )\n * //=> 'in 5 quarters'\n *\n * @example\n * // Use the locale option to get the result in Spanish. Without setting it, the example would return \"in 1 hour\".\n * intlFormatDistance(\n *   new Date(1986, 3, 4, 11, 30, 0),\n *   new Date(1986, 3, 4, 10, 30, 0),\n *   { locale: 'es' }\n * )\n * //=> 'dentro de 1 hora'\n *\n * @example\n * // Use the numeric option to force the function to use numeric values. Without setting it, the example would return \"tomorrow\".\n * intlFormatDistance(\n *   new Date(1986, 3, 5, 11, 30, 0),\n *   new Date(1986, 3, 4, 11, 30, 0),\n *   { numeric: 'always' }\n * )\n * //=> 'in 1 day'\n *\n * @example\n * // Use the style option to force the function to use short values. Without setting it, the example would return \"in 2 years\".\n * intlFormatDistance(\n *   new Date(1988, 3, 4, 11, 30, 0),\n *   new Date(1986, 3, 4, 11, 30, 0),\n *   { style: 'short' }\n * )\n * //=> 'in 2 yr'\n */\nexport default function intlFormatDistance(date, baseDate, options) {\n  requiredArgs(2, arguments);\n  var value = 0;\n  var unit;\n  var dateLeft = toDate(date);\n  var dateRight = toDate(baseDate);\n  if (!(options !== null && options !== void 0 && options.unit)) {\n    // Get the unit based on diffInSeconds calculations if no unit is specified\n    var diffInSeconds = differenceInSeconds(dateLeft, dateRight); // The smallest unit\n\n    if (Math.abs(diffInSeconds) < secondsInMinute) {\n      value = differenceInSeconds(dateLeft, dateRight);\n      unit = 'second';\n    } else if (Math.abs(diffInSeconds) < secondsInHour) {\n      value = differenceInMinutes(dateLeft, dateRight);\n      unit = 'minute';\n    } else if (Math.abs(diffInSeconds) < secondsInDay && Math.abs(differenceInCalendarDays(dateLeft, dateRight)) < 1) {\n      value = differenceInHours(dateLeft, dateRight);\n      unit = 'hour';\n    } else if (Math.abs(diffInSeconds) < secondsInWeek && (value = differenceInCalendarDays(dateLeft, dateRight)) && Math.abs(value) < 7) {\n      unit = 'day';\n    } else if (Math.abs(diffInSeconds) < secondsInMonth) {\n      value = differenceInCalendarWeeks(dateLeft, dateRight);\n      unit = 'week';\n    } else if (Math.abs(diffInSeconds) < secondsInQuarter) {\n      value = differenceInCalendarMonths(dateLeft, dateRight);\n      unit = 'month';\n    } else if (Math.abs(diffInSeconds) < secondsInYear) {\n      if (differenceInCalendarQuarters(dateLeft, dateRight) < 4) {\n        // To filter out cases that are less than a year but match 4 quarters\n        value = differenceInCalendarQuarters(dateLeft, dateRight);\n        unit = 'quarter';\n      } else {\n        value = differenceInCalendarYears(dateLeft, dateRight);\n        unit = 'year';\n      }\n    } else {\n      value = differenceInCalendarYears(dateLeft, dateRight);\n      unit = 'year';\n    }\n  } else {\n    // Get the value if unit is specified\n    unit = options === null || options === void 0 ? void 0 : options.unit;\n    if (unit === 'second') {\n      value = differenceInSeconds(dateLeft, dateRight);\n    } else if (unit === 'minute') {\n      value = differenceInMinutes(dateLeft, dateRight);\n    } else if (unit === 'hour') {\n      value = differenceInHours(dateLeft, dateRight);\n    } else if (unit === 'day') {\n      value = differenceInCalendarDays(dateLeft, dateRight);\n    } else if (unit === 'week') {\n      value = differenceInCalendarWeeks(dateLeft, dateRight);\n    } else if (unit === 'month') {\n      value = differenceInCalendarMonths(dateLeft, dateRight);\n    } else if (unit === 'quarter') {\n      value = differenceInCalendarQuarters(dateLeft, dateRight);\n    } else if (unit === 'year') {\n      value = differenceInCalendarYears(dateLeft, dateRight);\n    }\n  }\n  var rtf = new Intl.RelativeTimeFormat(options === null || options === void 0 ? void 0 : options.locale, {\n    localeMatcher: options === null || options === void 0 ? void 0 : options.localeMatcher,\n    numeric: (options === null || options === void 0 ? void 0 : options.numeric) || 'auto',\n    style: options === null || options === void 0 ? void 0 : options.style\n  });\n  return rtf.format(value, unit);\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name isAfter\n * @category Common Helpers\n * @summary Is the first date after the second one?\n *\n * @description\n * Is the first date after the second one?\n *\n * @param {Date|Number} date - the date that should be after the other one to return true\n * @param {Date|Number} dateToCompare - the date to compare with\n * @returns {Boolean} the first date is after the second date\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Is 10 July 1989 after 11 February 1987?\n * const result = isAfter(new Date(1989, 6, 10), new Date(1987, 1, 11))\n * //=> true\n */\nexport default function isAfter(dirtyDate, dirtyDateToCompare) {\n  requiredArgs(2, arguments);\n  var date = toDate(dirtyDate);\n  var dateToCompare = toDate(dirtyDateToCompare);\n  return date.getTime() > dateToCompare.getTime();\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name isBefore\n * @category Common Helpers\n * @summary Is the first date before the second one?\n *\n * @description\n * Is the first date before the second one?\n *\n * @param {Date|Number} date - the date that should be before the other one to return true\n * @param {Date|Number} dateToCompare - the date to compare with\n * @returns {Boolean} the first date is before the second date\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Is 10 July 1989 before 11 February 1987?\n * const result = isBefore(new Date(1989, 6, 10), new Date(1987, 1, 11))\n * //=> false\n */\nexport default function isBefore(dirtyDate, dirtyDateToCompare) {\n  requiredArgs(2, arguments);\n  var date = toDate(dirtyDate);\n  var dateToCompare = toDate(dirtyDateToCompare);\n  return date.getTime() < dateToCompare.getTime();\n}","import _typeof from \"@babel/runtime/helpers/esm/typeof\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name isDate\n * @category Common Helpers\n * @summary Is the given value a date?\n *\n * @description\n * Returns true if the given value is an instance of Date. The function works for dates transferred across iframes.\n *\n * @param {*} value - the value to check\n * @returns {boolean} true if the given value is a date\n * @throws {TypeError} 1 arguments required\n *\n * @example\n * // For a valid date:\n * const result = isDate(new Date())\n * //=> true\n *\n * @example\n * // For an invalid date:\n * const result = isDate(new Date(NaN))\n * //=> true\n *\n * @example\n * // For some value:\n * const result = isDate('2014-02-31')\n * //=> false\n *\n * @example\n * // For an object:\n * const result = isDate({})\n * //=> false\n */\nexport default function isDate(value) {\n  requiredArgs(1, arguments);\n  return value instanceof Date || _typeof(value) === 'object' && Object.prototype.toString.call(value) === '[object Date]';\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name isEqual\n * @category Common Helpers\n * @summary Are the given dates equal?\n *\n * @description\n * Are the given dates equal?\n *\n * @param {Date|Number} dateLeft - the first date to compare\n * @param {Date|Number} dateRight - the second date to compare\n * @returns {Boolean} the dates are equal\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Are 2 July 2014 06:30:45.000 and 2 July 2014 06:30:45.500 equal?\n * const result = isEqual(\n *   new Date(2014, 6, 2, 6, 30, 45, 0),\n *   new Date(2014, 6, 2, 6, 30, 45, 500)\n * )\n * //=> false\n */\nexport default function isEqual(dirtyLeftDate, dirtyRightDate) {\n  requiredArgs(2, arguments);\n  var dateLeft = toDate(dirtyLeftDate);\n  var dateRight = toDate(dirtyRightDate);\n  return dateLeft.getTime() === dateRight.getTime();\n}","/**\n * @name isExists\n * @category Common Helpers\n * @summary Is the given date exists?\n *\n * @description\n * Checks if the given arguments convert to an existing date.\n *\n * @param {Number} year of the date to check\n * @param {Number} month of the date to check\n * @param {Number} day of the date to check\n * @returns {Boolean} the date exists\n * @throws {TypeError} 3 arguments required\n *\n * @example\n * // For the valid date:\n * const result = isExists(2018, 0, 31)\n * //=> true\n *\n * @example\n * // For the invalid date:\n * const result = isExists(2018, 1, 31)\n * //=> false\n */\nexport default function isExists(year, month, day) {\n  if (arguments.length < 3) {\n    throw new TypeError('3 argument required, but only ' + arguments.length + ' present');\n  }\n  var date = new Date(year, month, day);\n  return date.getFullYear() === year && date.getMonth() === month && date.getDate() === day;\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name isFirstDayOfMonth\n * @category Month Helpers\n * @summary Is the given date the first day of a month?\n *\n * @description\n * Is the given date the first day of a month?\n *\n * @param {Date|Number} date - the date to check\n * @returns {Boolean} the date is the first day of a month\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Is 1 September 2014 the first day of a month?\n * const result = isFirstDayOfMonth(new Date(2014, 8, 1))\n * //=> true\n */\nexport default function isFirstDayOfMonth(dirtyDate) {\n  requiredArgs(1, arguments);\n  return toDate(dirtyDate).getDate() === 1;\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name isFriday\n * @category Weekday Helpers\n * @summary Is the given date Friday?\n *\n * @description\n * Is the given date Friday?\n *\n * @param {Date|Number} date - the date to check\n * @returns {Boolean} the date is Friday\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Is 26 September 2014 Friday?\n * const result = isFriday(new Date(2014, 8, 26))\n * //=> true\n */\nexport default function isFriday(dirtyDate) {\n  requiredArgs(1, arguments);\n  return toDate(dirtyDate).getDay() === 5;\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name isFuture\n * @category Common Helpers\n * @summary Is the given date in the future?\n * @pure false\n *\n * @description\n * Is the given date in the future?\n *\n * > ⚠️ Please note that this function is not present in the FP submodule as\n * > it uses `Date.now()` internally hence impure and can't be safely curried.\n *\n * @param {Date|Number} date - the date to check\n * @returns {Boolean} the date is in the future\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // If today is 6 October 2014, is 31 December 2014 in the future?\n * const result = isFuture(new Date(2014, 11, 31))\n * //=> true\n */\nexport default function isFuture(dirtyDate) {\n  requiredArgs(1, arguments);\n  return toDate(dirtyDate).getTime() > Date.now();\n}","import toDate from \"../toDate/index.js\";\nimport endOfDay from \"../endOfDay/index.js\";\nimport endOfMonth from \"../endOfMonth/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name isLastDayOfMonth\n * @category Month Helpers\n * @summary Is the given date the last day of a month?\n *\n * @description\n * Is the given date the last day of a month?\n *\n * @param {Date|Number} date - the date to check\n * @returns {Boolean} the date is the last day of a month\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Is 28 February 2014 the last day of a month?\n * const result = isLastDayOfMonth(new Date(2014, 1, 28))\n * //=> true\n */\nexport default function isLastDayOfMonth(dirtyDate) {\n  requiredArgs(1, arguments);\n  var date = toDate(dirtyDate);\n  return endOfDay(date).getTime() === endOfMonth(date).getTime();\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name isLeapYear\n * @category Year Helpers\n * @summary Is the given date in the leap year?\n *\n * @description\n * Is the given date in the leap year?\n *\n * @param {Date|Number} date - the date to check\n * @returns {Boolean} the date is in the leap year\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Is 1 September 2012 in the leap year?\n * const result = isLeapYear(new Date(2012, 8, 1))\n * //=> true\n */\nexport default function isLeapYear(dirtyDate) {\n  requiredArgs(1, arguments);\n  var date = toDate(dirtyDate);\n  var year = date.getFullYear();\n  return year % 400 === 0 || year % 4 === 0 && year % 100 !== 0;\n}","import parse from \"../parse/index.js\";\nimport isValid from \"../isValid/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name isMatch\n * @category Common Helpers\n * @summary validates the date string against given formats\n *\n * @description\n * Return the true if given date is string correct against the given format else\n * will return false.\n *\n * > ⚠️ Please note that the `format` tokens differ from Moment.js and other libraries.\n * > See: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n *\n * The characters in the format string wrapped between two single quotes characters (') are escaped.\n * Two single quotes in a row, whether inside or outside a quoted sequence, represent a 'real' single quote.\n *\n * Format of the format string is based on Unicode Technical Standard #35:\n * https://www.unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table\n * with a few additions (see note 5 below the table).\n *\n * Not all tokens are compatible. Combinations that don't make sense or could lead to bugs are prohibited\n * and will throw `RangeError`. For example usage of 24-hour format token with AM/PM token will throw an exception:\n *\n * ```javascript\n * isMatch('23 AM', 'HH a')\n * //=> RangeError: The format string mustn't contain `HH` and `a` at the same time\n * ```\n *\n * See the compatibility table: https://docs.google.com/spreadsheets/d/e/2PACX-1vQOPU3xUhplll6dyoMmVUXHKl_8CRDs6_ueLmex3SoqwhuolkuN3O05l4rqx5h1dKX8eb46Ul-CCSrq/pubhtml?gid=0&single=true\n *\n * Accepted format string patterns:\n * | Unit                            |Prior| Pattern | Result examples                   | Notes |\n * |---------------------------------|-----|---------|-----------------------------------|-------|\n * | Era                             | 140 | G..GGG  | AD, BC                            |       |\n * |                                 |     | GGGG    | Anno Domini, Before Christ        | 2     |\n * |                                 |     | GGGGG   | A, B                              |       |\n * | Calendar year                   | 130 | y       | 44, 1, 1900, 2017, 9999           | 4     |\n * |                                 |     | yo      | 44th, 1st, 1900th, 9999999th      | 4,5   |\n * |                                 |     | yy      | 44, 01, 00, 17                    | 4     |\n * |                                 |     | yyy     | 044, 001, 123, 999                | 4     |\n * |                                 |     | yyyy    | 0044, 0001, 1900, 2017            | 4     |\n * |                                 |     | yyyyy   | ...                               | 2,4   |\n * | Local week-numbering year       | 130 | Y       | 44, 1, 1900, 2017, 9000           | 4     |\n * |                                 |     | Yo      | 44th, 1st, 1900th, 9999999th      | 4,5   |\n * |                                 |     | YY      | 44, 01, 00, 17                    | 4,6   |\n * |                                 |     | YYY     | 044, 001, 123, 999                | 4     |\n * |                                 |     | YYYY    | 0044, 0001, 1900, 2017            | 4,6   |\n * |                                 |     | YYYYY   | ...                               | 2,4   |\n * | ISO week-numbering year         | 130 | R       | -43, 1, 1900, 2017, 9999, -9999   | 4,5   |\n * |                                 |     | RR      | -43, 01, 00, 17                   | 4,5   |\n * |                                 |     | RRR     | -043, 001, 123, 999, -999         | 4,5   |\n * |                                 |     | RRRR    | -0043, 0001, 2017, 9999, -9999    | 4,5   |\n * |                                 |     | RRRRR   | ...                               | 2,4,5 |\n * | Extended year                   | 130 | u       | -43, 1, 1900, 2017, 9999, -999    | 4     |\n * |                                 |     | uu      | -43, 01, 99, -99                  | 4     |\n * |                                 |     | uuu     | -043, 001, 123, 999, -999         | 4     |\n * |                                 |     | uuuu    | -0043, 0001, 2017, 9999, -9999    | 4     |\n * |                                 |     | uuuuu   | ...                               | 2,4   |\n * | Quarter (formatting)            | 120 | Q       | 1, 2, 3, 4                        |       |\n * |                                 |     | Qo      | 1st, 2nd, 3rd, 4th                | 5     |\n * |                                 |     | QQ      | 01, 02, 03, 04                    |       |\n * |                                 |     | QQQ     | Q1, Q2, Q3, Q4                    |       |\n * |                                 |     | QQQQ    | 1st quarter, 2nd quarter, ...     | 2     |\n * |                                 |     | QQQQQ   | 1, 2, 3, 4                        | 4     |\n * | Quarter (stand-alone)           | 120 | q       | 1, 2, 3, 4                        |       |\n * |                                 |     | qo      | 1st, 2nd, 3rd, 4th                | 5     |\n * |                                 |     | qq      | 01, 02, 03, 04                    |       |\n * |                                 |     | qqq     | Q1, Q2, Q3, Q4                    |       |\n * |                                 |     | qqqq    | 1st quarter, 2nd quarter, ...     | 2     |\n * |                                 |     | qqqqq   | 1, 2, 3, 4                        | 3     |\n * | Month (formatting)              | 110 | M       | 1, 2, ..., 12                     |       |\n * |                                 |     | Mo      | 1st, 2nd, ..., 12th               | 5     |\n * |                                 |     | MM      | 01, 02, ..., 12                   |       |\n * |                                 |     | MMM     | Jan, Feb, ..., Dec                |       |\n * |                                 |     | MMMM    | January, February, ..., December  | 2     |\n * |                                 |     | MMMMM   | J, F, ..., D                      |       |\n * | Month (stand-alone)             | 110 | L       | 1, 2, ..., 12                     |       |\n * |                                 |     | Lo      | 1st, 2nd, ..., 12th               | 5     |\n * |                                 |     | LL      | 01, 02, ..., 12                   |       |\n * |                                 |     | LLL     | Jan, Feb, ..., Dec                |       |\n * |                                 |     | LLLL    | January, February, ..., December  | 2     |\n * |                                 |     | LLLLL   | J, F, ..., D                      |       |\n * | Local week of year              | 100 | w       | 1, 2, ..., 53                     |       |\n * |                                 |     | wo      | 1st, 2nd, ..., 53th               | 5     |\n * |                                 |     | ww      | 01, 02, ..., 53                   |       |\n * | ISO week of year                | 100 | I       | 1, 2, ..., 53                     | 5     |\n * |                                 |     | Io      | 1st, 2nd, ..., 53th               | 5     |\n * |                                 |     | II      | 01, 02, ..., 53                   | 5     |\n * | Day of month                    |  90 | d       | 1, 2, ..., 31                     |       |\n * |                                 |     | do      | 1st, 2nd, ..., 31st               | 5     |\n * |                                 |     | dd      | 01, 02, ..., 31                   |       |\n * | Day of year                     |  90 | D       | 1, 2, ..., 365, 366               | 7     |\n * |                                 |     | Do      | 1st, 2nd, ..., 365th, 366th       | 5     |\n * |                                 |     | DD      | 01, 02, ..., 365, 366             | 7     |\n * |                                 |     | DDD     | 001, 002, ..., 365, 366           |       |\n * |                                 |     | DDDD    | ...                               | 2     |\n * | Day of week (formatting)        |  90 | E..EEE  | Mon, Tue, Wed, ..., Su            |       |\n * |                                 |     | EEEE    | Monday, Tuesday, ..., Sunday      | 2     |\n * |                                 |     | EEEEE   | M, T, W, T, F, S, S               |       |\n * |                                 |     | EEEEEE  | Mo, Tu, We, Th, Fr, Sa, Su        |       |\n * | ISO day of week (formatting)    |  90 | i       | 1, 2, 3, ..., 7                   | 5     |\n * |                                 |     | io      | 1st, 2nd, ..., 7th                | 5     |\n * |                                 |     | ii      | 01, 02, ..., 07                   | 5     |\n * |                                 |     | iii     | Mon, Tue, Wed, ..., Su            | 5     |\n * |                                 |     | iiii    | Monday, Tuesday, ..., Sunday      | 2,5   |\n * |                                 |     | iiiii   | M, T, W, T, F, S, S               | 5     |\n * |                                 |     | iiiiii  | Mo, Tu, We, Th, Fr, Sa, Su        | 5     |\n * | Local day of week (formatting)  |  90 | e       | 2, 3, 4, ..., 1                   |       |\n * |                                 |     | eo      | 2nd, 3rd, ..., 1st                | 5     |\n * |                                 |     | ee      | 02, 03, ..., 01                   |       |\n * |                                 |     | eee     | Mon, Tue, Wed, ..., Su            |       |\n * |                                 |     | eeee    | Monday, Tuesday, ..., Sunday      | 2     |\n * |                                 |     | eeeee   | M, T, W, T, F, S, S               |       |\n * |                                 |     | eeeeee  | Mo, Tu, We, Th, Fr, Sa, Su        |       |\n * | Local day of week (stand-alone) |  90 | c       | 2, 3, 4, ..., 1                   |       |\n * |                                 |     | co      | 2nd, 3rd, ..., 1st                | 5     |\n * |                                 |     | cc      | 02, 03, ..., 01                   |       |\n * |                                 |     | ccc     | Mon, Tue, Wed, ..., Su            |       |\n * |                                 |     | cccc    | Monday, Tuesday, ..., Sunday      | 2     |\n * |                                 |     | ccccc   | M, T, W, T, F, S, S               |       |\n * |                                 |     | cccccc  | Mo, Tu, We, Th, Fr, Sa, Su        |       |\n * | AM, PM                          |  80 | a..aaa  | AM, PM                            |       |\n * |                                 |     | aaaa    | a.m., p.m.                        | 2     |\n * |                                 |     | aaaaa   | a, p                              |       |\n * | AM, PM, noon, midnight          |  80 | b..bbb  | AM, PM, noon, midnight            |       |\n * |                                 |     | bbbb    | a.m., p.m., noon, midnight        | 2     |\n * |                                 |     | bbbbb   | a, p, n, mi                       |       |\n * | Flexible day period             |  80 | B..BBB  | at night, in the morning, ...     |       |\n * |                                 |     | BBBB    | at night, in the morning, ...     | 2     |\n * |                                 |     | BBBBB   | at night, in the morning, ...     |       |\n * | Hour [1-12]                     |  70 | h       | 1, 2, ..., 11, 12                 |       |\n * |                                 |     | ho      | 1st, 2nd, ..., 11th, 12th         | 5     |\n * |                                 |     | hh      | 01, 02, ..., 11, 12               |       |\n * | Hour [0-23]                     |  70 | H       | 0, 1, 2, ..., 23                  |       |\n * |                                 |     | Ho      | 0th, 1st, 2nd, ..., 23rd          | 5     |\n * |                                 |     | HH      | 00, 01, 02, ..., 23               |       |\n * | Hour [0-11]                     |  70 | K       | 1, 2, ..., 11, 0                  |       |\n * |                                 |     | Ko      | 1st, 2nd, ..., 11th, 0th          | 5     |\n * |                                 |     | KK      | 01, 02, ..., 11, 00               |       |\n * | Hour [1-24]                     |  70 | k       | 24, 1, 2, ..., 23                 |       |\n * |                                 |     | ko      | 24th, 1st, 2nd, ..., 23rd         | 5     |\n * |                                 |     | kk      | 24, 01, 02, ..., 23               |       |\n * | Minute                          |  60 | m       | 0, 1, ..., 59                     |       |\n * |                                 |     | mo      | 0th, 1st, ..., 59th               | 5     |\n * |                                 |     | mm      | 00, 01, ..., 59                   |       |\n * | Second                          |  50 | s       | 0, 1, ..., 59                     |       |\n * |                                 |     | so      | 0th, 1st, ..., 59th               | 5     |\n * |                                 |     | ss      | 00, 01, ..., 59                   |       |\n * | Seconds timestamp               |  40 | t       | 512969520                         |       |\n * |                                 |     | tt      | ...                               | 2     |\n * | Fraction of second              |  30 | S       | 0, 1, ..., 9                      |       |\n * |                                 |     | SS      | 00, 01, ..., 99                   |       |\n * |                                 |     | SSS     | 000, 001, ..., 999                |       |\n * |                                 |     | SSSS    | ...                               | 2     |\n * | Milliseconds timestamp          |  20 | T       | 512969520900                      |       |\n * |                                 |     | TT      | ...                               | 2     |\n * | Timezone (ISO-8601 w/ Z)        |  10 | X       | -08, +0530, Z                     |       |\n * |                                 |     | XX      | -0800, +0530, Z                   |       |\n * |                                 |     | XXX     | -08:00, +05:30, Z                 |       |\n * |                                 |     | XXXX    | -0800, +0530, Z, +123456          | 2     |\n * |                                 |     | XXXXX   | -08:00, +05:30, Z, +12:34:56      |       |\n * | Timezone (ISO-8601 w/o Z)       |  10 | x       | -08, +0530, +00                   |       |\n * |                                 |     | xx      | -0800, +0530, +0000               |       |\n * |                                 |     | xxx     | -08:00, +05:30, +00:00            | 2     |\n * |                                 |     | xxxx    | -0800, +0530, +0000, +123456      |       |\n * |                                 |     | xxxxx   | -08:00, +05:30, +00:00, +12:34:56 |       |\n * | Long localized date             |  NA | P       | 05/29/1453                        | 5,8   |\n * |                                 |     | PP      | May 29, 1453                      |       |\n * |                                 |     | PPP     | May 29th, 1453                    |       |\n * |                                 |     | PPPP    | Sunday, May 29th, 1453            | 2,5,8 |\n * | Long localized time             |  NA | p       | 12:00 AM                          | 5,8   |\n * |                                 |     | pp      | 12:00:00 AM                       |       |\n * | Combination of date and time    |  NA | Pp      | 05/29/1453, 12:00 AM              |       |\n * |                                 |     | PPpp    | May 29, 1453, 12:00:00 AM         |       |\n * |                                 |     | PPPpp   | May 29th, 1453 at ...             |       |\n * |                                 |     | PPPPpp  | Sunday, May 29th, 1453 at ...     | 2,5,8 |\n * Notes:\n * 1. \"Formatting\" units (e.g. formatting quarter) in the default en-US locale\n *    are the same as \"stand-alone\" units, but are different in some languages.\n *    \"Formatting\" units are declined according to the rules of the language\n *    in the context of a date. \"Stand-alone\" units are always nominative singular.\n *    In `format` function, they will produce different result:\n *\n *    `format(new Date(2017, 10, 6), 'do LLLL', {locale: cs}) //=> '6. listopad'`\n *\n *    `format(new Date(2017, 10, 6), 'do MMMM', {locale: cs}) //=> '6. listopadu'`\n *\n *    `isMatch` will try to match both formatting and stand-alone units interchangably.\n *\n * 2. Any sequence of the identical letters is a pattern, unless it is escaped by\n *    the single quote characters (see below).\n *    If the sequence is longer than listed in table:\n *    - for numerical units (`yyyyyyyy`) `isMatch` will try to match a number\n *      as wide as the sequence\n *    - for text units (`MMMMMMMM`) `isMatch` will try to match the widest variation of the unit.\n *      These variations are marked with \"2\" in the last column of the table.\n *\n * 3. `QQQQQ` and `qqqqq` could be not strictly numerical in some locales.\n *    These tokens represent the shortest form of the quarter.\n *\n * 4. The main difference between `y` and `u` patterns are B.C. years:\n *\n *    | Year | `y` | `u` |\n *    |------|-----|-----|\n *    | AC 1 |   1 |   1 |\n *    | BC 1 |   1 |   0 |\n *    | BC 2 |   2 |  -1 |\n *\n *    Also `yy` will try to guess the century of two digit year by proximity with `referenceDate`:\n *\n *    `isMatch('50', 'yy') //=> true`\n *\n *    `isMatch('75', 'yy') //=> true`\n *\n *    while `uu` will use the year as is:\n *\n *    `isMatch('50', 'uu') //=> true`\n *\n *    `isMatch('75', 'uu') //=> true`\n *\n *    The same difference is true for local and ISO week-numbering years (`Y` and `R`),\n *    except local week-numbering years are dependent on `options.weekStartsOn`\n *    and `options.firstWeekContainsDate` (compare [setISOWeekYear]{@link https://date-fns.org/docs/setISOWeekYear}\n *    and [setWeekYear]{@link https://date-fns.org/docs/setWeekYear}).\n *\n * 5. These patterns are not in the Unicode Technical Standard #35:\n *    - `i`: ISO day of week\n *    - `I`: ISO week of year\n *    - `R`: ISO week-numbering year\n *    - `o`: ordinal number modifier\n *    - `P`: long localized date\n *    - `p`: long localized time\n *\n * 6. `YY` and `YYYY` tokens represent week-numbering years but they are often confused with years.\n *    You should enable `options.useAdditionalWeekYearTokens` to use them. See: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n *\n * 7. `D` and `DD` tokens represent days of the year but they are ofthen confused with days of the month.\n *    You should enable `options.useAdditionalDayOfYearTokens` to use them. See: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n *\n * 8. `P+` tokens do not have a defined priority since they are merely aliases to other tokens based\n *    on the given locale.\n *\n *    using `en-US` locale: `P` => `MM/dd/yyyy`\n *    using `en-US` locale: `p` => `hh:mm a`\n *    using `pt-BR` locale: `P` => `dd/MM/yyyy`\n *    using `pt-BR` locale: `p` => `HH:mm`\n *\n * Values will be checked in the descending order of its unit's priority.\n * Units of an equal priority overwrite each other in the order of appearance.\n *\n * If no values of higher priority are matched (e.g. when matching string 'January 1st' without a year),\n * the values will be taken from today's using `new Date()` date which works as a context of parsing.\n *\n * The result may vary by locale.\n *\n * If `formatString` matches with `dateString` but does not provides tokens, `referenceDate` will be returned.\n *\n *\n *\n * @param {String} dateString - the date string to verify\n * @param {String} formatString - the string of tokens\n * @param {Object} [options] - an object with options.\n * @param {Locale} [options.locale=defaultLocale] - the locale object. See [Locale]{@link https://date-fns.org/docs/Locale}\n * @param {0|1|2|3|4|5|6} [options.weekStartsOn=0] - the index of the first day of the week (0 - Sunday)\n * @param {1|2|3|4|5|6|7} [options.firstWeekContainsDate=1] - the day of January, which is always in the first week of the year\n * @param {Boolean} [options.useAdditionalWeekYearTokens=false] - if true, allows usage of the week-numbering year tokens `YY` and `YYYY`;\n *   see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n * @param {Boolean} [options.useAdditionalDayOfYearTokens=false] - if true, allows usage of the day of year tokens `D` and `DD`;\n *   see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n * @returns {Boolean}\n * @throws {TypeError} 2 arguments required\n * @throws {RangeError} `options.weekStartsOn` must be between 0 and 6\n * @throws {RangeError} `options.firstWeekContainsDate` must be between 1 and 7\n * @throws {RangeError} `options.locale` must contain `match` property\n * @throws {RangeError} use `yyyy` instead of `YYYY` for formatting years; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n * @throws {RangeError} use `yy` instead of `YY` for formatting years; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n * @throws {RangeError} use `d` instead of `D` for formatting days of the month; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n * @throws {RangeError} use `dd` instead of `DD` for formatting days of the month; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n * @throws {RangeError} format string contains an unescaped latin alphabet character\n *\n * @example\n * // Match 11 February 2014 from middle-endian format:\n * const result = isMatch('02/11/2014', 'MM/dd/yyyy')\n * //=> true\n *\n * @example\n * // Match 28th of February in Esperanto locale in the context of 2010 year:\n * import eo from 'date-fns/locale/eo'\n * const result = isMatch('28-a de februaro', \"do 'de' MMMM\", {\n *   locale: eo\n * })\n * //=> true\n */\nexport default function isMatch(dateString, formatString, options) {\n  requiredArgs(2, arguments);\n  return isValid(parse(dateString, formatString, new Date(), options));\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name isMonday\n * @category Weekday Helpers\n * @summary Is the given date Monday?\n *\n * @description\n * Is the given date Monday?\n *\n * @param {Date|Number} date - the date to check\n * @returns {Boolean} the date is Monday\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Is 22 September 2014 Monday?\n * const result = isMonday(new Date(2014, 8, 22))\n * //=> true\n */\nexport default function isMonday(date) {\n  requiredArgs(1, arguments);\n  return toDate(date).getDay() === 1;\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name isPast\n * @category Common Helpers\n * @summary Is the given date in the past?\n * @pure false\n *\n * @description\n * Is the given date in the past?\n *\n * > ⚠️ Please note that this function is not present in the FP submodule as\n * > it uses `Date.now()` internally hence impure and can't be safely curried.\n *\n * @param {Date|Number} date - the date to check\n * @returns {Boolean} the date is in the past\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // If today is 6 October 2014, is 2 July 2014 in the past?\n * const result = isPast(new Date(2014, 6, 2))\n * //=> true\n */\nexport default function isPast(dirtyDate) {\n  requiredArgs(1, arguments);\n  return toDate(dirtyDate).getTime() < Date.now();\n}","import startOfDay from \"../startOfDay/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name isSameDay\n * @category Day Helpers\n * @summary Are the given dates in the same day (and year and month)?\n *\n * @description\n * Are the given dates in the same day (and year and month)?\n *\n * @param {Date|Number} dateLeft - the first date to check\n * @param {Date|Number} dateRight - the second date to check\n * @returns {Boolean} the dates are in the same day (and year and month)\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Are 4 September 06:00:00 and 4 September 18:00:00 in the same day?\n * const result = isSameDay(new Date(2014, 8, 4, 6, 0), new Date(2014, 8, 4, 18, 0))\n * //=> true\n *\n * @example\n * // Are 4 September and 4 October in the same day?\n * const result = isSameDay(new Date(2014, 8, 4), new Date(2014, 9, 4))\n * //=> false\n *\n * @example\n * // Are 4 September, 2014 and 4 September, 2015 in the same day?\n * const result = isSameDay(new Date(2014, 8, 4), new Date(2015, 8, 4))\n * //=> false\n */\nexport default function isSameDay(dirtyDateLeft, dirtyDateRight) {\n  requiredArgs(2, arguments);\n  var dateLeftStartOfDay = startOfDay(dirtyDateLeft);\n  var dateRightStartOfDay = startOfDay(dirtyDateRight);\n  return dateLeftStartOfDay.getTime() === dateRightStartOfDay.getTime();\n}","import startOfHour from \"../startOfHour/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name isSameHour\n * @category Hour Helpers\n * @summary Are the given dates in the same hour (and same day)?\n *\n * @description\n * Are the given dates in the same hour (and same day)?\n *\n * @param {Date|Number} dateLeft - the first date to check\n * @param {Date|Number} dateRight - the second date to check\n * @returns {Boolean} the dates are in the same hour (and same day)\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Are 4 September 2014 06:00:00 and 4 September 06:30:00 in the same hour?\n * const result = isSameHour(new Date(2014, 8, 4, 6, 0), new Date(2014, 8, 4, 6, 30))\n * //=> true\n *\n * @example\n * // Are 4 September 2014 06:00:00 and 5 September 06:00:00 in the same hour?\n * const result = isSameHour(new Date(2014, 8, 4, 6, 0), new Date(2014, 8, 5, 6, 0))\n * //=> false\n */\nexport default function isSameHour(dirtyDateLeft, dirtyDateRight) {\n  requiredArgs(2, arguments);\n  var dateLeftStartOfHour = startOfHour(dirtyDateLeft);\n  var dateRightStartOfHour = startOfHour(dirtyDateRight);\n  return dateLeftStartOfHour.getTime() === dateRightStartOfHour.getTime();\n}","import isSameWeek from \"../isSameWeek/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name isSameISOWeek\n * @category ISO Week Helpers\n * @summary Are the given dates in the same ISO week (and year)?\n *\n * @description\n * Are the given dates in the same ISO week (and year)?\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * @param {Date|Number} dateLeft - the first date to check\n * @param {Date|Number} dateRight - the second date to check\n * @returns {Boolean} the dates are in the same ISO week (and year)\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Are 1 September 2014 and 7 September 2014 in the same ISO week?\n * const result = isSameISOWeek(new Date(2014, 8, 1), new Date(2014, 8, 7))\n * //=> true\n *\n * @example\n * // Are 1 September 2014 and 1 September 2015 in the same ISO week?\n * const result = isSameISOWeek(new Date(2014, 8, 1), new Date(2015, 8, 1))\n * //=> false\n */\nexport default function isSameISOWeek(dirtyDateLeft, dirtyDateRight) {\n  requiredArgs(2, arguments);\n  return isSameWeek(dirtyDateLeft, dirtyDateRight, {\n    weekStartsOn: 1\n  });\n}","import startOfISOWeekYear from \"../startOfISOWeekYear/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name isSameISOWeekYear\n * @category ISO Week-Numbering Year Helpers\n * @summary Are the given dates in the same ISO week-numbering year?\n *\n * @description\n * Are the given dates in the same ISO week-numbering year?\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * @param {Date|Number} dateLeft - the first date to check\n * @param {Date|Number} dateRight - the second date to check\n * @returns {Boolean} the dates are in the same ISO week-numbering year\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Are 29 December 2003 and 2 January 2005 in the same ISO week-numbering year?\n * const result = isSameISOWeekYear(new Date(2003, 11, 29), new Date(2005, 0, 2))\n * //=> true\n */\nexport default function isSameISOWeekYear(dirtyDateLeft, dirtyDateRight) {\n  requiredArgs(2, arguments);\n  var dateLeftStartOfYear = startOfISOWeekYear(dirtyDateLeft);\n  var dateRightStartOfYear = startOfISOWeekYear(dirtyDateRight);\n  return dateLeftStartOfYear.getTime() === dateRightStartOfYear.getTime();\n}","import startOfMinute from \"../startOfMinute/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name isSameMinute\n * @category Minute Helpers\n * @summary Are the given dates in the same minute (and hour and day)?\n *\n * @description\n * Are the given dates in the same minute (and hour and day)?\n *\n * @param {Date|Number} dateLeft - the first date to check\n * @param {Date|Number} dateRight - the second date to check\n * @returns {Boolean} the dates are in the same minute (and hour and day)\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Are 4 September 2014 06:30:00 and 4 September 2014 06:30:15 in the same minute?\n * const result = isSameMinute(\n *   new Date(2014, 8, 4, 6, 30),\n *   new Date(2014, 8, 4, 6, 30, 15)\n * )\n * //=> true\n *\n * @example\n * // Are 4 September 2014 06:30:00 and 5 September 2014 06:30:00 in the same minute?\n * const result = isSameMinute(\n *   new Date(2014, 8, 4, 6, 30),\n *   new Date(2014, 8, 5, 6, 30)\n * )\n * //=> false\n */\nexport default function isSameMinute(dirtyDateLeft, dirtyDateRight) {\n  requiredArgs(2, arguments);\n  var dateLeftStartOfMinute = startOfMinute(dirtyDateLeft);\n  var dateRightStartOfMinute = startOfMinute(dirtyDateRight);\n  return dateLeftStartOfMinute.getTime() === dateRightStartOfMinute.getTime();\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name isSameMonth\n * @category Month Helpers\n * @summary Are the given dates in the same month (and year)?\n *\n * @description\n * Are the given dates in the same month (and year)?\n *\n * @param {Date|Number} dateLeft - the first date to check\n * @param {Date|Number} dateRight - the second date to check\n * @returns {Boolean} the dates are in the same month (and year)\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Are 2 September 2014 and 25 September 2014 in the same month?\n * const result = isSameMonth(new Date(2014, 8, 2), new Date(2014, 8, 25))\n * //=> true\n *\n * @example\n * // Are 2 September 2014 and 25 September 2015 in the same month?\n * const result = isSameMonth(new Date(2014, 8, 2), new Date(2015, 8, 25))\n * //=> false\n */\nexport default function isSameMonth(dirtyDateLeft, dirtyDateRight) {\n  requiredArgs(2, arguments);\n  var dateLeft = toDate(dirtyDateLeft);\n  var dateRight = toDate(dirtyDateRight);\n  return dateLeft.getFullYear() === dateRight.getFullYear() && dateLeft.getMonth() === dateRight.getMonth();\n}","import startOfQuarter from \"../startOfQuarter/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name isSameQuarter\n * @category Quarter Helpers\n * @summary Are the given dates in the same quarter (and year)?\n *\n * @description\n * Are the given dates in the same quarter (and year)?\n *\n * @param {Date|Number} dateLeft - the first date to check\n * @param {Date|Number} dateRight - the second date to check\n * @returns {Boolean} the dates are in the same quarter (and year)\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Are 1 January 2014 and 8 March 2014 in the same quarter?\n * const result = isSameQuarter(new Date(2014, 0, 1), new Date(2014, 2, 8))\n * //=> true\n *\n * @example\n * // Are 1 January 2014 and 1 January 2015 in the same quarter?\n * const result = isSameQuarter(new Date(2014, 0, 1), new Date(2015, 0, 1))\n * //=> false\n */\nexport default function isSameQuarter(dirtyDateLeft, dirtyDateRight) {\n  requiredArgs(2, arguments);\n  var dateLeftStartOfQuarter = startOfQuarter(dirtyDateLeft);\n  var dateRightStartOfQuarter = startOfQuarter(dirtyDateRight);\n  return dateLeftStartOfQuarter.getTime() === dateRightStartOfQuarter.getTime();\n}","import startOfSecond from \"../startOfSecond/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name isSameSecond\n * @category Second Helpers\n * @summary Are the given dates in the same second (and hour and day)?\n *\n * @description\n * Are the given dates in the same second (and hour and day)?\n *\n * @param {Date|Number} dateLeft - the first date to check\n * @param {Date|Number} dateRight - the second date to check\n * @returns {Boolean} the dates are in the same second (and hour and day)\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Are 4 September 2014 06:30:15.000 and 4 September 2014 06:30.15.500 in the same second?\n * const result = isSameSecond(\n *   new Date(2014, 8, 4, 6, 30, 15),\n *   new Date(2014, 8, 4, 6, 30, 15, 500)\n * )\n * //=> true\n *\n * @example\n * // Are 4 September 2014 06:00:15.000 and 4 September 2014 06:01.15.000 in the same second?\n * const result = isSameSecond(\n *   new Date(2014, 8, 4, 6, 0, 15),\n *   new Date(2014, 8, 4, 6, 1, 15)\n * )\n * //=> false\n *\n * @example\n * // Are 4 September 2014 06:00:15.000 and 5 September 2014 06:00.15.000 in the same second?\n * const result = isSameSecond(\n *   new Date(2014, 8, 4, 6, 0, 15),\n *   new Date(2014, 8, 5, 6, 0, 15)\n * )\n * //=> false\n */\nexport default function isSameSecond(dirtyDateLeft, dirtyDateRight) {\n  requiredArgs(2, arguments);\n  var dateLeftStartOfSecond = startOfSecond(dirtyDateLeft);\n  var dateRightStartOfSecond = startOfSecond(dirtyDateRight);\n  return dateLeftStartOfSecond.getTime() === dateRightStartOfSecond.getTime();\n}","import startOfWeek from \"../startOfWeek/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name isSameWeek\n * @category Week Helpers\n * @summary Are the given dates in the same week (and month and year)?\n *\n * @description\n * Are the given dates in the same week (and month and year)?\n *\n * @param {Date|Number} dateLeft - the first date to check\n * @param {Date|Number} dateRight - the second date to check\n * @param {Object} [options] - an object with options.\n * @param {Locale} [options.locale=defaultLocale] - the locale object. See [Locale]{@link https://date-fns.org/docs/Locale}\n * @param {0|1|2|3|4|5|6} [options.weekStartsOn=0] - the index of the first day of the week (0 - Sunday)\n * @returns {Boolean} the dates are in the same week (and month and year)\n * @throws {TypeError} 2 arguments required\n * @throws {RangeError} `options.weekStartsOn` must be between 0 and 6\n *\n * @example\n * // Are 31 August 2014 and 4 September 2014 in the same week?\n * const result = isSameWeek(new Date(2014, 7, 31), new Date(2014, 8, 4))\n * //=> true\n *\n * @example\n * // If week starts with Monday,\n * // are 31 August 2014 and 4 September 2014 in the same week?\n * const result = isSameWeek(new Date(2014, 7, 31), new Date(2014, 8, 4), {\n *   weekStartsOn: 1\n * })\n * //=> false\n *\n * @example\n * // Are 1 January 2014 and 1 January 2015 in the same week?\n * const result = isSameWeek(new Date(2014, 0, 1), new Date(2015, 0, 1))\n * //=> false\n */\nexport default function isSameWeek(dirtyDateLeft, dirtyDateRight, options) {\n  requiredArgs(2, arguments);\n  var dateLeftStartOfWeek = startOfWeek(dirtyDateLeft, options);\n  var dateRightStartOfWeek = startOfWeek(dirtyDateRight, options);\n  return dateLeftStartOfWeek.getTime() === dateRightStartOfWeek.getTime();\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name isSameYear\n * @category Year Helpers\n * @summary Are the given dates in the same year?\n *\n * @description\n * Are the given dates in the same year?\n *\n * @param {Date|Number} dateLeft - the first date to check\n * @param {Date|Number} dateRight - the second date to check\n * @returns {Boolean} the dates are in the same year\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Are 2 September 2014 and 25 September 2014 in the same year?\n * const result = isSameYear(new Date(2014, 8, 2), new Date(2014, 8, 25))\n * //=> true\n */\nexport default function isSameYear(dirtyDateLeft, dirtyDateRight) {\n  requiredArgs(2, arguments);\n  var dateLeft = toDate(dirtyDateLeft);\n  var dateRight = toDate(dirtyDateRight);\n  return dateLeft.getFullYear() === dateRight.getFullYear();\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name isSaturday\n * @category Weekday Helpers\n * @summary Is the given date Saturday?\n *\n * @description\n * Is the given date Saturday?\n *\n * @param {Date|Number} date - the date to check\n * @returns {Boolean} the date is Saturday\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Is 27 September 2014 Saturday?\n * const result = isSaturday(new Date(2014, 8, 27))\n * //=> true\n */\nexport default function isSaturday(dirtyDate) {\n  requiredArgs(1, arguments);\n  return toDate(dirtyDate).getDay() === 6;\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name isSunday\n * @category Weekday Helpers\n * @summary Is the given date Sunday?\n *\n * @description\n * Is the given date Sunday?\n *\n * @param {Date|Number} date - the date to check\n * @returns {Boolean} the date is Sunday\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Is 21 September 2014 Sunday?\n * const result = isSunday(new Date(2014, 8, 21))\n * //=> true\n */\nexport default function isSunday(dirtyDate) {\n  requiredArgs(1, arguments);\n  return toDate(dirtyDate).getDay() === 0;\n}","import isSameHour from \"../isSameHour/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name isThisHour\n * @category Hour Helpers\n * @summary Is the given date in the same hour as the current date?\n * @pure false\n *\n * @description\n * Is the given date in the same hour as the current date?\n *\n * > ⚠️ Please note that this function is not present in the FP submodule as\n * > it uses `Date.now()` internally hence impure and can't be safely curried.\n *\n * @param {Date|Number} date - the date to check\n * @returns {Boolean} the date is in this hour\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // If now is 25 September 2014 18:30:15.500,\n * // is 25 September 2014 18:00:00 in this hour?\n * const result = isThisHour(new Date(2014, 8, 25, 18))\n * //=> true\n */\nexport default function isThisHour(dirtyDate) {\n  requiredArgs(1, arguments);\n  return isSameHour(Date.now(), dirtyDate);\n}","import isSameISOWeek from \"../isSameISOWeek/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name isThisISOWeek\n * @category ISO Week Helpers\n * @summary Is the given date in the same ISO week as the current date?\n * @pure false\n *\n * @description\n * Is the given date in the same ISO week as the current date?\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * > ⚠️ Please note that this function is not present in the FP submodule as\n * > it uses `Date.now()` internally hence impure and can't be safely curried.\n *\n * @param {Date|Number} date - the date to check\n * @returns {Boolean} the date is in this ISO week\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // If today is 25 September 2014, is 22 September 2014 in this ISO week?\n * const result = isThisISOWeek(new Date(2014, 8, 22))\n * //=> true\n */\nexport default function isThisISOWeek(dirtyDate) {\n  requiredArgs(1, arguments);\n  return isSameISOWeek(dirtyDate, Date.now());\n}","import isSameMinute from \"../isSameMinute/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name isThisMinute\n * @category Minute Helpers\n * @summary Is the given date in the same minute as the current date?\n * @pure false\n *\n * @description\n * Is the given date in the same minute as the current date?\n *\n * > ⚠️ Please note that this function is not present in the FP submodule as\n * > it uses `Date.now()` internally hence impure and can't be safely curried.\n *\n * @param {Date|Number} date - the date to check\n * @returns {Boolean} the date is in this minute\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // If now is 25 September 2014 18:30:15.500,\n * // is 25 September 2014 18:30:00 in this minute?\n * const result = isThisMinute(new Date(2014, 8, 25, 18, 30))\n * //=> true\n */\nexport default function isThisMinute(dirtyDate) {\n  requiredArgs(1, arguments);\n  return isSameMinute(Date.now(), dirtyDate);\n}","import isSameMonth from \"../isSameMonth/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name isThisMonth\n * @category Month Helpers\n * @summary Is the given date in the same month as the current date?\n * @pure false\n *\n * @description\n * Is the given date in the same month as the current date?\n *\n * > ⚠️ Please note that this function is not present in the FP submodule as\n * > it uses `Date.now()` internally hence impure and can't be safely curried.\n *\n * @param {Date|Number} date - the date to check\n * @returns {Boolean} the date is in this month\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // If today is 25 September 2014, is 15 September 2014 in this month?\n * const result = isThisMonth(new Date(2014, 8, 15))\n * //=> true\n */\nexport default function isThisMonth(dirtyDate) {\n  requiredArgs(1, arguments);\n  return isSameMonth(Date.now(), dirtyDate);\n}","import isSameQuarter from \"../isSameQuarter/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name isThisQuarter\n * @category Quarter Helpers\n * @summary Is the given date in the same quarter as the current date?\n * @pure false\n *\n * @description\n * Is the given date in the same quarter as the current date?\n *\n * > ⚠️ Please note that this function is not present in the FP submodule as\n * > it uses `Date.now()` internally hence impure and can't be safely curried.\n *\n * @param {Date|Number} date - the date to check\n * @returns {Boolean} the date is in this quarter\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // If today is 25 September 2014, is 2 July 2014 in this quarter?\n * const result = isThisQuarter(new Date(2014, 6, 2))\n * //=> true\n */\nexport default function isThisQuarter(dirtyDate) {\n  requiredArgs(1, arguments);\n  return isSameQuarter(Date.now(), dirtyDate);\n}","import isSameSecond from \"../isSameSecond/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name isThisSecond\n * @category Second Helpers\n * @summary Is the given date in the same second as the current date?\n * @pure false\n *\n * @description\n * Is the given date in the same second as the current date?\n *\n * > ⚠️ Please note that this function is not present in the FP submodule as\n * > it uses `Date.now()` internally hence impure and can't be safely curried.\n *\n * @param {Date|Number} date - the date to check\n * @returns {Boolean} the date is in this second\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // If now is 25 September 2014 18:30:15.500,\n * // is 25 September 2014 18:30:15.000 in this second?\n * const result = isThisSecond(new Date(2014, 8, 25, 18, 30, 15))\n * //=> true\n */\nexport default function isThisSecond(dirtyDate) {\n  requiredArgs(1, arguments);\n  return isSameSecond(Date.now(), dirtyDate);\n}","import isSameWeek from \"../isSameWeek/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name isThisWeek\n * @category Week Helpers\n * @summary Is the given date in the same week as the current date?\n * @pure false\n *\n * @description\n * Is the given date in the same week as the current date?\n *\n * > ⚠️ Please note that this function is not present in the FP submodule as\n * > it uses `Date.now()` internally hence impure and can't be safely curried.\n *\n * @param {Date|Number} date - the date to check\n * @param {Object} [options] - the object with options\n * @param {Locale} [options.locale=defaultLocale] - the locale object. See [Locale]{@link https://date-fns.org/docs/Locale}\n * @param {0|1|2|3|4|5|6} [options.weekStartsOn=0] - the index of the first day of the week (0 - Sunday)\n * @returns {Boolean} the date is in this week\n * @throws {TypeError} 1 argument required\n * @throws {RangeError} `options.weekStartsOn` must be between 0 and 6\n *\n * @example\n * // If today is 25 September 2014, is 21 September 2014 in this week?\n * const result = isThisWeek(new Date(2014, 8, 21))\n * //=> true\n *\n * @example\n * // If today is 25 September 2014 and week starts with Monday\n * // is 21 September 2014 in this week?\n * const result = isThisWeek(new Date(2014, 8, 21), { weekStartsOn: 1 })\n * //=> false\n */\n\nexport default function isThisWeek(dirtyDate, options) {\n  requiredArgs(1, arguments);\n  return isSameWeek(dirtyDate, Date.now(), options);\n}","import isSameYear from \"../isSameYear/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name isThisYear\n * @category Year Helpers\n * @summary Is the given date in the same year as the current date?\n * @pure false\n *\n * @description\n * Is the given date in the same year as the current date?\n *\n * > ⚠️ Please note that this function is not present in the FP submodule as\n * > it uses `Date.now()` internally hence impure and can't be safely curried.\n *\n * @param {Date|Number} date - the date to check\n * @returns {Boolean} the date is in this year\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // If today is 25 September 2014, is 2 July 2014 in this year?\n * const result = isThisYear(new Date(2014, 6, 2))\n * //=> true\n */\nexport default function isThisYear(dirtyDate) {\n  requiredArgs(1, arguments);\n  return isSameYear(dirtyDate, Date.now());\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name isThursday\n * @category Weekday Helpers\n * @summary Is the given date Thursday?\n *\n * @description\n * Is the given date Thursday?\n *\n * @param {Date|Number} date - the date to check\n * @returns {Boolean} the date is Thursday\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Is 25 September 2014 Thursday?\n * const result = isThursday(new Date(2014, 8, 25))\n * //=> true\n */\nexport default function isThursday(dirtyDate) {\n  requiredArgs(1, arguments);\n  return toDate(dirtyDate).getDay() === 4;\n}","import isSameDay from \"../isSameDay/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name isToday\n * @category Day Helpers\n * @summary Is the given date today?\n * @pure false\n *\n * @description\n * Is the given date today?\n *\n * > ⚠️ Please note that this function is not present in the FP submodule as\n * > it uses `Date.now()` internally hence impure and can't be safely curried.\n *\n * @param {Date|Number} date - the date to check\n * @returns {Boolean} the date is today\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // If today is 6 October 2014, is 6 October 14:00:00 today?\n * const result = isToday(new Date(2014, 9, 6, 14, 0))\n * //=> true\n */\nexport default function isToday(dirtyDate) {\n  requiredArgs(1, arguments);\n  return isSameDay(dirtyDate, Date.now());\n}","import addDays from \"../addDays/index.js\";\nimport isSameDay from \"../isSameDay/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name isTomorrow\n * @category Day Helpers\n * @summary Is the given date tomorrow?\n * @pure false\n *\n * @description\n * Is the given date tomorrow?\n *\n * > ⚠️ Please note that this function is not present in the FP submodule as\n * > it uses `Date.now()` internally hence impure and can't be safely curried.\n *\n * @param {Date|Number} date - the date to check\n * @returns {Boolean} the date is tomorrow\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // If today is 6 October 2014, is 7 October 14:00:00 tomorrow?\n * const result = isTomorrow(new Date(2014, 9, 7, 14, 0))\n * //=> true\n */\nexport default function isTomorrow(dirtyDate) {\n  requiredArgs(1, arguments);\n  return isSameDay(dirtyDate, addDays(Date.now(), 1));\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name isTuesday\n * @category Weekday Helpers\n * @summary Is the given date Tuesday?\n *\n * @description\n * Is the given date Tuesday?\n *\n * @param {Date|Number} date - the date to check\n * @returns {Boolean} the date is Tuesday\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Is 23 September 2014 Tuesday?\n * const result = isTuesday(new Date(2014, 8, 23))\n * //=> true\n */\nexport default function isTuesday(dirtyDate) {\n  requiredArgs(1, arguments);\n  return toDate(dirtyDate).getDay() === 2;\n}","import isDate from \"../isDate/index.js\";\nimport toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name isValid\n * @category Common Helpers\n * @summary Is the given date valid?\n *\n * @description\n * Returns false if argument is Invalid Date and true otherwise.\n * Argument is converted to Date using `toDate`. See [toDate]{@link https://date-fns.org/docs/toDate}\n * Invalid Date is a Date, whose time value is NaN.\n *\n * Time value of Date: http://es5.github.io/#x15.9.1.1\n *\n * @param {*} date - the date to check\n * @returns {Boolean} the date is valid\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // For the valid date:\n * const result = isValid(new Date(2014, 1, 31))\n * //=> true\n *\n * @example\n * // For the value, convertable into a date:\n * const result = isValid(1393804800000)\n * //=> true\n *\n * @example\n * // For the invalid date:\n * const result = isValid(new Date(''))\n * //=> false\n */\nexport default function isValid(dirtyDate) {\n  requiredArgs(1, arguments);\n  if (!isDate(dirtyDate) && typeof dirtyDate !== 'number') {\n    return false;\n  }\n  var date = toDate(dirtyDate);\n  return !isNaN(Number(date));\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name isWednesday\n * @category Weekday Helpers\n * @summary Is the given date Wednesday?\n *\n * @description\n * Is the given date Wednesday?\n *\n * @param {Date|Number} date - the date to check\n * @returns {Boolean} the date is Wednesday\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Is 24 September 2014 Wednesday?\n * const result = isWednesday(new Date(2014, 8, 24))\n * //=> true\n */\nexport default function isWednesday(dirtyDate) {\n  requiredArgs(1, arguments);\n  return toDate(dirtyDate).getDay() === 3;\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name isWeekend\n * @category Weekday Helpers\n * @summary Does the given date fall on a weekend?\n *\n * @description\n * Does the given date fall on a weekend?\n *\n * @param {Date|Number} date - the date to check\n * @returns {Boolean} the date falls on a weekend\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Does 5 October 2014 fall on a weekend?\n * const result = isWeekend(new Date(2014, 9, 5))\n * //=> true\n */\nexport default function isWeekend(dirtyDate) {\n  requiredArgs(1, arguments);\n  var date = toDate(dirtyDate);\n  var day = date.getDay();\n  return day === 0 || day === 6;\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name isWithinInterval\n * @category Interval Helpers\n * @summary Is the given date within the interval?\n *\n * @description\n * Is the given date within the interval? (Including start and end.)\n *\n * @param {Date|Number} date - the date to check\n * @param {Interval} interval - the interval to check\n * @returns {Boolean} the date is within the interval\n * @throws {TypeError} 2 arguments required\n * @throws {RangeError} The start of an interval cannot be after its end\n * @throws {RangeError} Date in interval cannot be `Invalid Date`\n *\n * @example\n * // For the date within the interval:\n * isWithinInterval(new Date(2014, 0, 3), {\n *   start: new Date(2014, 0, 1),\n *   end: new Date(2014, 0, 7)\n * })\n * //=> true\n *\n * @example\n * // For the date outside of the interval:\n * isWithinInterval(new Date(2014, 0, 10), {\n *   start: new Date(2014, 0, 1),\n *   end: new Date(2014, 0, 7)\n * })\n * //=> false\n *\n * @example\n * // For date equal to interval start:\n * isWithinInterval(date, { start, end: date }) // => true\n *\n * @example\n * // For date equal to interval end:\n * isWithinInterval(date, { start: date, end }) // => true\n */\nexport default function isWithinInterval(dirtyDate, interval) {\n  requiredArgs(2, arguments);\n  var time = toDate(dirtyDate).getTime();\n  var startTime = toDate(interval.start).getTime();\n  var endTime = toDate(interval.end).getTime();\n\n  // Throw an exception if start date is after end date or if any date is `Invalid Date`\n  if (!(startTime <= endTime)) {\n    throw new RangeError('Invalid interval');\n  }\n  return time >= startTime && time <= endTime;\n}","import isSameDay from \"../isSameDay/index.js\";\nimport subDays from \"../subDays/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name isYesterday\n * @category Day Helpers\n * @summary Is the given date yesterday?\n * @pure false\n *\n * @description\n * Is the given date yesterday?\n *\n * > ⚠️ Please note that this function is not present in the FP submodule as\n * > it uses `Date.now()` internally hence impure and can't be safely curried.\n *\n * @param {Date|Number} date - the date to check\n * @returns {Boolean} the date is yesterday\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // If today is 6 October 2014, is 5 October 14:00:00 yesterday?\n * const result = isYesterday(new Date(2014, 9, 5, 14, 0))\n * //=> true\n */\nexport default function isYesterday(dirtyDate) {\n  requiredArgs(1, arguments);\n  return isSameDay(dirtyDate, subDays(Date.now(), 1));\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name lastDayOfDecade\n * @category Decade Helpers\n * @summary Return the last day of a decade for the given date.\n *\n * @description\n * Return the last day of a decade for the given date.\n *\n * @param {Date|Number} date - the original date\n * @returns {Date} the last day of a decade\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // The last day of a decade for 21 December 2012 21:12:00:\n * const result = lastDayOfDecade(new Date(2012, 11, 21, 21, 12, 00))\n * //=> Wed Dec 31 2019 00:00:00\n */\nexport default function lastDayOfDecade(dirtyDate) {\n  requiredArgs(1, arguments);\n  var date = toDate(dirtyDate);\n  var year = date.getFullYear();\n  var decade = 9 + Math.floor(year / 10) * 10;\n  date.setFullYear(decade + 1, 0, 0);\n  date.setHours(0, 0, 0, 0);\n  return date;\n}","import lastDayOfWeek from \"../lastDayOfWeek/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name lastDayOfISOWeek\n * @category ISO Week Helpers\n * @summary Return the last day of an ISO week for the given date.\n *\n * @description\n * Return the last day of an ISO week for the given date.\n * The result will be in the local timezone.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * @param {Date|Number} date - the original date\n * @returns {Date} the last day of an ISO week\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // The last day of an ISO week for 2 September 2014 11:55:00:\n * const result = lastDayOfISOWeek(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Sun Sep 07 2014 00:00:00\n */\nexport default function lastDayOfISOWeek(dirtyDate) {\n  requiredArgs(1, arguments);\n  return lastDayOfWeek(dirtyDate, {\n    weekStartsOn: 1\n  });\n}","import getISOWeekYear from \"../getISOWeekYear/index.js\";\nimport startOfISOWeek from \"../startOfISOWeek/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name lastDayOfISOWeekYear\n * @category ISO Week-Numbering Year Helpers\n * @summary Return the last day of an ISO week-numbering year for the given date.\n *\n * @description\n * Return the last day of an ISO week-numbering year,\n * which always starts 3 days before the year's first Thursday.\n * The result will be in the local timezone.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * @param {Date|Number} date - the original date\n * @returns {Date} the end of an ISO week-numbering year\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // The last day of an ISO week-numbering year for 2 July 2005:\n * const result = lastDayOfISOWeekYear(new Date(2005, 6, 2))\n * //=> Sun Jan 01 2006 00:00:00\n */\nexport default function lastDayOfISOWeekYear(dirtyDate) {\n  requiredArgs(1, arguments);\n  var year = getISOWeekYear(dirtyDate);\n  var fourthOfJanuary = new Date(0);\n  fourthOfJanuary.setFullYear(year + 1, 0, 4);\n  fourthOfJanuary.setHours(0, 0, 0, 0);\n  var date = startOfISOWeek(fourthOfJanuary);\n  date.setDate(date.getDate() - 1);\n  return date;\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name lastDayOfMonth\n * @category Month Helpers\n * @summary Return the last day of a month for the given date.\n *\n * @description\n * Return the last day of a month for the given date.\n * The result will be in the local timezone.\n *\n * @param {Date|Number} date - the original date\n * @returns {Date} the last day of a month\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // The last day of a month for 2 September 2014 11:55:00:\n * const result = lastDayOfMonth(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Tue Sep 30 2014 00:00:00\n */\nexport default function lastDayOfMonth(dirtyDate) {\n  requiredArgs(1, arguments);\n  var date = toDate(dirtyDate);\n  var month = date.getMonth();\n  date.setFullYear(date.getFullYear(), month + 1, 0);\n  date.setHours(0, 0, 0, 0);\n  return date;\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name lastDayOfQuarter\n * @category Quarter Helpers\n * @summary Return the last day of a year quarter for the given date.\n *\n * @description\n * Return the last day of a year quarter for the given date.\n * The result will be in the local timezone.\n *\n * @param {Date|Number} date - the original date\n * @param {Object} [options] - an object with options.\n * @param {0|1|2} [options.additionalDigits=2] - passed to `toDate`. See [toDate]{@link https://date-fns.org/docs/toDate}\n * @returns {Date} the last day of a quarter\n * @throws {TypeError} 1 argument required\n * @throws {RangeError} `options.additionalDigits` must be 0, 1 or 2\n *\n * @example\n * // The last day of a quarter for 2 September 2014 11:55:00:\n * const result = lastDayOfQuarter(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Tue Sep 30 2014 00:00:00\n */\nexport default function lastDayOfQuarter(dirtyDate) {\n  requiredArgs(1, arguments);\n  var date = toDate(dirtyDate);\n  var currentMonth = date.getMonth();\n  var month = currentMonth - currentMonth % 3 + 3;\n  date.setMonth(month, 0);\n  date.setHours(0, 0, 0, 0);\n  return date;\n}","import toDate from \"../toDate/index.js\";\nimport toInteger from \"../_lib/toInteger/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\nimport { getDefaultOptions } from \"../_lib/defaultOptions/index.js\";\n/**\n * @name lastDayOfWeek\n * @category Week Helpers\n * @summary Return the last day of a week for the given date.\n *\n * @description\n * Return the last day of a week for the given date.\n * The result will be in the local timezone.\n *\n * @param {Date|Number} date - the original date\n * @param {Object} [options] - an object with options.\n * @param {Locale} [options.locale=defaultLocale] - the locale object. See [Locale]{@link https://date-fns.org/docs/Locale}\n * @param {0|1|2|3|4|5|6} [options.weekStartsOn=0] - the index of the first day of the week (0 - Sunday)\n * @returns {Date} the last day of a week\n * @throws {TypeError} 1 argument required\n * @throws {RangeError} `options.weekStartsOn` must be between 0 and 6\n *\n * @example\n * // The last day of a week for 2 September 2014 11:55:00:\n * const result = lastDayOfWeek(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Sat Sep 06 2014 00:00:00\n *\n * @example\n * // If the week starts on Monday, the last day of the week for 2 September 2014 11:55:00:\n * const result = lastDayOfWeek(new Date(2014, 8, 2, 11, 55, 0), { weekStartsOn: 1 })\n * //=> Sun Sep 07 2014 00:00:00\n */\nexport default function lastDayOfWeek(dirtyDate, options) {\n  var _ref, _ref2, _ref3, _options$weekStartsOn, _options$locale, _options$locale$optio, _defaultOptions$local, _defaultOptions$local2;\n  requiredArgs(1, arguments);\n  var defaultOptions = getDefaultOptions();\n  var weekStartsOn = toInteger((_ref = (_ref2 = (_ref3 = (_options$weekStartsOn = options === null || options === void 0 ? void 0 : options.weekStartsOn) !== null && _options$weekStartsOn !== void 0 ? _options$weekStartsOn : options === null || options === void 0 ? void 0 : (_options$locale = options.locale) === null || _options$locale === void 0 ? void 0 : (_options$locale$optio = _options$locale.options) === null || _options$locale$optio === void 0 ? void 0 : _options$locale$optio.weekStartsOn) !== null && _ref3 !== void 0 ? _ref3 : defaultOptions.weekStartsOn) !== null && _ref2 !== void 0 ? _ref2 : (_defaultOptions$local = defaultOptions.locale) === null || _defaultOptions$local === void 0 ? void 0 : (_defaultOptions$local2 = _defaultOptions$local.options) === null || _defaultOptions$local2 === void 0 ? void 0 : _defaultOptions$local2.weekStartsOn) !== null && _ref !== void 0 ? _ref : 0);\n\n  // Test if weekStartsOn is between 0 and 6 _and_ is not NaN\n  if (!(weekStartsOn >= 0 && weekStartsOn <= 6)) {\n    throw new RangeError('weekStartsOn must be between 0 and 6');\n  }\n  var date = toDate(dirtyDate);\n  var day = date.getDay();\n  var diff = (day < weekStartsOn ? -7 : 0) + 6 - (day - weekStartsOn);\n  date.setHours(0, 0, 0, 0);\n  date.setDate(date.getDate() + diff);\n  return date;\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name lastDayOfYear\n * @category Year Helpers\n * @summary Return the last day of a year for the given date.\n *\n * @description\n * Return the last day of a year for the given date.\n * The result will be in the local timezone.\n *\n * @param {Date|Number} date - the original date\n * @returns {Date} the last day of a year\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // The last day of a year for 2 September 2014 11:55:00:\n * const result = lastDayOfYear(new Date(2014, 8, 2, 11, 55, 00))\n * //=> Wed Dec 31 2014 00:00:00\n */\nexport default function lastDayOfYear(dirtyDate) {\n  requiredArgs(1, arguments);\n  var date = toDate(dirtyDate);\n  var year = date.getFullYear();\n  date.setFullYear(year + 1, 0, 0);\n  date.setHours(0, 0, 0, 0);\n  return date;\n}","import toDate from \"../toDate/index.js\";\nimport formatters from \"../_lib/format/lightFormatters/index.js\";\nimport getTimezoneOffsetInMilliseconds from \"../_lib/getTimezoneOffsetInMilliseconds/index.js\";\nimport isValid from \"../isValid/index.js\";\nimport subMilliseconds from \"../subMilliseconds/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\"; // This RegExp consists of three parts separated by `|`:\n// - (\\w)\\1* matches any sequences of the same letter\n// - '' matches two quote characters in a row\n// - '(''|[^'])+('|$) matches anything surrounded by two quote characters ('),\n//   except a single quote symbol, which ends the sequence.\n//   Two quote characters do not end the sequence.\n//   If there is no matching single quote\n//   then the sequence will continue until the end of the string.\n// - . matches any single character unmatched by previous parts of the RegExps\nvar formattingTokensRegExp = /(\\w)\\1*|''|'(''|[^'])+('|$)|./g;\nvar escapedStringRegExp = /^'([^]*?)'?$/;\nvar doubleQuoteRegExp = /''/g;\nvar unescapedLatinCharacterRegExp = /[a-zA-Z]/;\n\n/**\n * @name lightFormat\n * @category Common Helpers\n * @summary Format the date.\n *\n * @description\n * Return the formatted date string in the given format. Unlike `format`,\n * `lightFormat` doesn't use locales and outputs date using the most popular tokens.\n *\n * > ⚠️ Please note that the `lightFormat` tokens differ from Moment.js and other libraries.\n * > See: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n *\n * The characters wrapped between two single quotes characters (') are escaped.\n * Two single quotes in a row, whether inside or outside a quoted sequence, represent a 'real' single quote.\n *\n * Format of the string is based on Unicode Technical Standard #35:\n * https://www.unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table\n *\n * Accepted patterns:\n * | Unit                            | Pattern | Result examples                   |\n * |---------------------------------|---------|-----------------------------------|\n * | AM, PM                          | a..aaa  | AM, PM                            |\n * |                                 | aaaa    | a.m., p.m.                        |\n * |                                 | aaaaa   | a, p                              |\n * | Calendar year                   | y       | 44, 1, 1900, 2017                 |\n * |                                 | yy      | 44, 01, 00, 17                    |\n * |                                 | yyy     | 044, 001, 000, 017                |\n * |                                 | yyyy    | 0044, 0001, 1900, 2017            |\n * | Month (formatting)              | M       | 1, 2, ..., 12                     |\n * |                                 | MM      | 01, 02, ..., 12                   |\n * | Day of month                    | d       | 1, 2, ..., 31                     |\n * |                                 | dd      | 01, 02, ..., 31                   |\n * | Hour [1-12]                     | h       | 1, 2, ..., 11, 12                 |\n * |                                 | hh      | 01, 02, ..., 11, 12               |\n * | Hour [0-23]                     | H       | 0, 1, 2, ..., 23                  |\n * |                                 | HH      | 00, 01, 02, ..., 23               |\n * | Minute                          | m       | 0, 1, ..., 59                     |\n * |                                 | mm      | 00, 01, ..., 59                   |\n * | Second                          | s       | 0, 1, ..., 59                     |\n * |                                 | ss      | 00, 01, ..., 59                   |\n * | Fraction of second              | S       | 0, 1, ..., 9                      |\n * |                                 | SS      | 00, 01, ..., 99                   |\n * |                                 | SSS     | 000, 001, ..., 999                |\n * |                                 | SSSS    | ...                               |\n *\n * @param {Date|Number} date - the original date\n * @param {String} format - the string of tokens\n * @returns {String} the formatted date string\n * @throws {TypeError} 2 arguments required\n * @throws {RangeError} format string contains an unescaped latin alphabet character\n *\n * @example\n * const result = lightFormat(new Date(2014, 1, 11), 'yyyy-MM-dd')\n * //=> '2014-02-11'\n */\n\nexport default function lightFormat(dirtyDate, formatStr) {\n  requiredArgs(2, arguments);\n  var originalDate = toDate(dirtyDate);\n  if (!isValid(originalDate)) {\n    throw new RangeError('Invalid time value');\n  }\n\n  // Convert the date in system timezone to the same date in UTC+00:00 timezone.\n  // This ensures that when UTC functions will be implemented, locales will be compatible with them.\n  // See an issue about UTC functions: https://github.com/date-fns/date-fns/issues/376\n  var timezoneOffset = getTimezoneOffsetInMilliseconds(originalDate);\n  var utcDate = subMilliseconds(originalDate, timezoneOffset);\n  var tokens = formatStr.match(formattingTokensRegExp);\n\n  // The only case when formattingTokensRegExp doesn't match the string is when it's empty\n  if (!tokens) return '';\n  var result = tokens.map(function (substring) {\n    // Replace two single quote characters with one single quote character\n    if (substring === \"''\") {\n      return \"'\";\n    }\n    var firstCharacter = substring[0];\n    if (firstCharacter === \"'\") {\n      return cleanEscapedString(substring);\n    }\n    var formatter = formatters[firstCharacter];\n    if (formatter) {\n      return formatter(utcDate, substring);\n    }\n    if (firstCharacter.match(unescapedLatinCharacterRegExp)) {\n      throw new RangeError('Format string contains an unescaped latin alphabet character `' + firstCharacter + '`');\n    }\n    return substring;\n  }).join('');\n  return result;\n}\nfunction cleanEscapedString(input) {\n  var matches = input.match(escapedStringRegExp);\n  if (!matches) {\n    return input;\n  }\n  return matches[1].replace(doubleQuoteRegExp, \"'\");\n}","export default function buildFormatLongFn(args) {\n  return function () {\n    var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n    // TODO: Remove String()\n    var width = options.width ? String(options.width) : args.defaultWidth;\n    var format = args.formats[width] || args.formats[args.defaultWidth];\n    return format;\n  };\n}","export default function buildLocalizeFn(args) {\n  return function (dirtyIndex, options) {\n    var context = options !== null && options !== void 0 && options.context ? String(options.context) : 'standalone';\n    var valuesArray;\n    if (context === 'formatting' && args.formattingValues) {\n      var defaultWidth = args.defaultFormattingWidth || args.defaultWidth;\n      var width = options !== null && options !== void 0 && options.width ? String(options.width) : defaultWidth;\n      valuesArray = args.formattingValues[width] || args.formattingValues[defaultWidth];\n    } else {\n      var _defaultWidth = args.defaultWidth;\n      var _width = options !== null && options !== void 0 && options.width ? String(options.width) : args.defaultWidth;\n      valuesArray = args.values[_width] || args.values[_defaultWidth];\n    }\n    var index = args.argumentCallback ? args.argumentCallback(dirtyIndex) : dirtyIndex;\n    // @ts-ignore: For some reason TypeScript just don't want to match it, no matter how hard we try. I challenge you to try to remove it!\n    return valuesArray[index];\n  };\n}","export default function buildMatchFn(args) {\n  return function (string) {\n    var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n    var width = options.width;\n    var matchPattern = width && args.matchPatterns[width] || args.matchPatterns[args.defaultMatchWidth];\n    var matchResult = string.match(matchPattern);\n    if (!matchResult) {\n      return null;\n    }\n    var matchedString = matchResult[0];\n    var parsePatterns = width && args.parsePatterns[width] || args.parsePatterns[args.defaultParseWidth];\n    var key = Array.isArray(parsePatterns) ? findIndex(parsePatterns, function (pattern) {\n      return pattern.test(matchedString);\n    }) : findKey(parsePatterns, function (pattern) {\n      return pattern.test(matchedString);\n    });\n    var value;\n    value = args.valueCallback ? args.valueCallback(key) : key;\n    value = options.valueCallback ? options.valueCallback(value) : value;\n    var rest = string.slice(matchedString.length);\n    return {\n      value: value,\n      rest: rest\n    };\n  };\n}\nfunction findKey(object, predicate) {\n  for (var key in object) {\n    if (object.hasOwnProperty(key) && predicate(object[key])) {\n      return key;\n    }\n  }\n  return undefined;\n}\nfunction findIndex(array, predicate) {\n  for (var key = 0; key < array.length; key++) {\n    if (predicate(array[key])) {\n      return key;\n    }\n  }\n  return undefined;\n}","export default function buildMatchPatternFn(args) {\n  return function (string) {\n    var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n    var matchResult = string.match(args.matchPattern);\n    if (!matchResult) return null;\n    var matchedString = matchResult[0];\n    var parseResult = string.match(args.parsePattern);\n    if (!parseResult) return null;\n    var value = args.valueCallback ? args.valueCallback(parseResult[0]) : parseResult[0];\n    value = options.valueCallback ? options.valueCallback(value) : value;\n    var rest = string.slice(matchedString.length);\n    return {\n      value: value,\n      rest: rest\n    };\n  };\n}","var formatDistanceLocale = {\n  lessThanXSeconds: {\n    one: 'less than a second',\n    other: 'less than {{count}} seconds'\n  },\n  xSeconds: {\n    one: '1 second',\n    other: '{{count}} seconds'\n  },\n  halfAMinute: 'half a minute',\n  lessThanXMinutes: {\n    one: 'less than a minute',\n    other: 'less than {{count}} minutes'\n  },\n  xMinutes: {\n    one: '1 minute',\n    other: '{{count}} minutes'\n  },\n  aboutXHours: {\n    one: 'about 1 hour',\n    other: 'about {{count}} hours'\n  },\n  xHours: {\n    one: '1 hour',\n    other: '{{count}} hours'\n  },\n  xDays: {\n    one: '1 day',\n    other: '{{count}} days'\n  },\n  aboutXWeeks: {\n    one: 'about 1 week',\n    other: 'about {{count}} weeks'\n  },\n  xWeeks: {\n    one: '1 week',\n    other: '{{count}} weeks'\n  },\n  aboutXMonths: {\n    one: 'about 1 month',\n    other: 'about {{count}} months'\n  },\n  xMonths: {\n    one: '1 month',\n    other: '{{count}} months'\n  },\n  aboutXYears: {\n    one: 'about 1 year',\n    other: 'about {{count}} years'\n  },\n  xYears: {\n    one: '1 year',\n    other: '{{count}} years'\n  },\n  overXYears: {\n    one: 'over 1 year',\n    other: 'over {{count}} years'\n  },\n  almostXYears: {\n    one: 'almost 1 year',\n    other: 'almost {{count}} years'\n  }\n};\nvar formatDistance = function formatDistance(token, count, options) {\n  var result;\n  var tokenValue = formatDistanceLocale[token];\n  if (typeof tokenValue === 'string') {\n    result = tokenValue;\n  } else if (count === 1) {\n    result = tokenValue.one;\n  } else {\n    result = tokenValue.other.replace('{{count}}', count.toString());\n  }\n  if (options !== null && options !== void 0 && options.addSuffix) {\n    if (options.comparison && options.comparison > 0) {\n      return 'in ' + result;\n    } else {\n      return result + ' ago';\n    }\n  }\n  return result;\n};\nexport default formatDistance;","import buildFormatLongFn from \"../../../_lib/buildFormatLongFn/index.js\";\nvar dateFormats = {\n  full: 'EEEE, MMMM do, y',\n  long: 'MMMM do, y',\n  medium: 'MMM d, y',\n  short: 'MM/dd/yyyy'\n};\nvar timeFormats = {\n  full: 'h:mm:ss a zzzz',\n  long: 'h:mm:ss a z',\n  medium: 'h:mm:ss a',\n  short: 'h:mm a'\n};\nvar dateTimeFormats = {\n  full: \"{{date}} 'at' {{time}}\",\n  long: \"{{date}} 'at' {{time}}\",\n  medium: '{{date}}, {{time}}',\n  short: '{{date}}, {{time}}'\n};\nvar formatLong = {\n  date: buildFormatLongFn({\n    formats: dateFormats,\n    defaultWidth: 'full'\n  }),\n  time: buildFormatLongFn({\n    formats: timeFormats,\n    defaultWidth: 'full'\n  }),\n  dateTime: buildFormatLongFn({\n    formats: dateTimeFormats,\n    defaultWidth: 'full'\n  })\n};\nexport default formatLong;","var formatRelativeLocale = {\n  lastWeek: \"'last' eeee 'at' p\",\n  yesterday: \"'yesterday at' p\",\n  today: \"'today at' p\",\n  tomorrow: \"'tomorrow at' p\",\n  nextWeek: \"eeee 'at' p\",\n  other: 'P'\n};\nvar formatRelative = function formatRelative(token, _date, _baseDate, _options) {\n  return formatRelativeLocale[token];\n};\nexport default formatRelative;","import buildLocalizeFn from \"../../../_lib/buildLocalizeFn/index.js\";\nvar eraValues = {\n  narrow: ['B', 'A'],\n  abbreviated: ['BC', 'AD'],\n  wide: ['Before Christ', 'Anno Domini']\n};\nvar quarterValues = {\n  narrow: ['1', '2', '3', '4'],\n  abbreviated: ['Q1', 'Q2', 'Q3', 'Q4'],\n  wide: ['1st quarter', '2nd quarter', '3rd quarter', '4th quarter']\n};\n\n// Note: in English, the names of days of the week and months are capitalized.\n// If you are making a new locale based on this one, check if the same is true for the language you're working on.\n// Generally, formatted dates should look like they are in the middle of a sentence,\n// e.g. in Spanish language the weekdays and months should be in the lowercase.\nvar monthValues = {\n  narrow: ['J', 'F', 'M', 'A', 'M', 'J', 'J', 'A', 'S', 'O', 'N', 'D'],\n  abbreviated: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],\n  wide: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December']\n};\nvar dayValues = {\n  narrow: ['S', 'M', 'T', 'W', 'T', 'F', 'S'],\n  short: ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa'],\n  abbreviated: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],\n  wide: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday']\n};\nvar dayPeriodValues = {\n  narrow: {\n    am: 'a',\n    pm: 'p',\n    midnight: 'mi',\n    noon: 'n',\n    morning: 'morning',\n    afternoon: 'afternoon',\n    evening: 'evening',\n    night: 'night'\n  },\n  abbreviated: {\n    am: 'AM',\n    pm: 'PM',\n    midnight: 'midnight',\n    noon: 'noon',\n    morning: 'morning',\n    afternoon: 'afternoon',\n    evening: 'evening',\n    night: 'night'\n  },\n  wide: {\n    am: 'a.m.',\n    pm: 'p.m.',\n    midnight: 'midnight',\n    noon: 'noon',\n    morning: 'morning',\n    afternoon: 'afternoon',\n    evening: 'evening',\n    night: 'night'\n  }\n};\nvar formattingDayPeriodValues = {\n  narrow: {\n    am: 'a',\n    pm: 'p',\n    midnight: 'mi',\n    noon: 'n',\n    morning: 'in the morning',\n    afternoon: 'in the afternoon',\n    evening: 'in the evening',\n    night: 'at night'\n  },\n  abbreviated: {\n    am: 'AM',\n    pm: 'PM',\n    midnight: 'midnight',\n    noon: 'noon',\n    morning: 'in the morning',\n    afternoon: 'in the afternoon',\n    evening: 'in the evening',\n    night: 'at night'\n  },\n  wide: {\n    am: 'a.m.',\n    pm: 'p.m.',\n    midnight: 'midnight',\n    noon: 'noon',\n    morning: 'in the morning',\n    afternoon: 'in the afternoon',\n    evening: 'in the evening',\n    night: 'at night'\n  }\n};\nvar ordinalNumber = function ordinalNumber(dirtyNumber, _options) {\n  var number = Number(dirtyNumber);\n\n  // If ordinal numbers depend on context, for example,\n  // if they are different for different grammatical genders,\n  // use `options.unit`.\n  //\n  // `unit` can be 'year', 'quarter', 'month', 'week', 'date', 'dayOfYear',\n  // 'day', 'hour', 'minute', 'second'.\n\n  var rem100 = number % 100;\n  if (rem100 > 20 || rem100 < 10) {\n    switch (rem100 % 10) {\n      case 1:\n        return number + 'st';\n      case 2:\n        return number + 'nd';\n      case 3:\n        return number + 'rd';\n    }\n  }\n  return number + 'th';\n};\nvar localize = {\n  ordinalNumber: ordinalNumber,\n  era: buildLocalizeFn({\n    values: eraValues,\n    defaultWidth: 'wide'\n  }),\n  quarter: buildLocalizeFn({\n    values: quarterValues,\n    defaultWidth: 'wide',\n    argumentCallback: function argumentCallback(quarter) {\n      return quarter - 1;\n    }\n  }),\n  month: buildLocalizeFn({\n    values: monthValues,\n    defaultWidth: 'wide'\n  }),\n  day: buildLocalizeFn({\n    values: dayValues,\n    defaultWidth: 'wide'\n  }),\n  dayPeriod: buildLocalizeFn({\n    values: dayPeriodValues,\n    defaultWidth: 'wide',\n    formattingValues: formattingDayPeriodValues,\n    defaultFormattingWidth: 'wide'\n  })\n};\nexport default localize;","import formatDistance from \"./_lib/formatDistance/index.js\";\nimport formatLong from \"./_lib/formatLong/index.js\";\nimport formatRelative from \"./_lib/formatRelative/index.js\";\nimport localize from \"./_lib/localize/index.js\";\nimport match from \"./_lib/match/index.js\";\n/**\n * @type {Locale}\n * @category Locales\n * @summary English locale (United States).\n * @language English\n * @iso-639-2 eng\n * @author Sasha Koss [@kossnocorp]{@link https://github.com/kossnocorp}\n * @author Lesha Koss [@leshakoss]{@link https://github.com/leshakoss}\n */\nvar locale = {\n  code: 'en-US',\n  formatDistance: formatDistance,\n  formatLong: formatLong,\n  formatRelative: formatRelative,\n  localize: localize,\n  match: match,\n  options: {\n    weekStartsOn: 0 /* Sunday */,\n    firstWeekContainsDate: 1\n  }\n};\nexport default locale;","import buildMatchFn from \"../../../_lib/buildMatchFn/index.js\";\nimport buildMatchPatternFn from \"../../../_lib/buildMatchPatternFn/index.js\";\nvar matchOrdinalNumberPattern = /^(\\d+)(th|st|nd|rd)?/i;\nvar parseOrdinalNumberPattern = /\\d+/i;\nvar matchEraPatterns = {\n  narrow: /^(b|a)/i,\n  abbreviated: /^(b\\.?\\s?c\\.?|b\\.?\\s?c\\.?\\s?e\\.?|a\\.?\\s?d\\.?|c\\.?\\s?e\\.?)/i,\n  wide: /^(before christ|before common era|anno domini|common era)/i\n};\nvar parseEraPatterns = {\n  any: [/^b/i, /^(a|c)/i]\n};\nvar matchQuarterPatterns = {\n  narrow: /^[1234]/i,\n  abbreviated: /^q[1234]/i,\n  wide: /^[1234](th|st|nd|rd)? quarter/i\n};\nvar parseQuarterPatterns = {\n  any: [/1/i, /2/i, /3/i, /4/i]\n};\nvar matchMonthPatterns = {\n  narrow: /^[jfmasond]/i,\n  abbreviated: /^(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)/i,\n  wide: /^(january|february|march|april|may|june|july|august|september|october|november|december)/i\n};\nvar parseMonthPatterns = {\n  narrow: [/^j/i, /^f/i, /^m/i, /^a/i, /^m/i, /^j/i, /^j/i, /^a/i, /^s/i, /^o/i, /^n/i, /^d/i],\n  any: [/^ja/i, /^f/i, /^mar/i, /^ap/i, /^may/i, /^jun/i, /^jul/i, /^au/i, /^s/i, /^o/i, /^n/i, /^d/i]\n};\nvar matchDayPatterns = {\n  narrow: /^[smtwf]/i,\n  short: /^(su|mo|tu|we|th|fr|sa)/i,\n  abbreviated: /^(sun|mon|tue|wed|thu|fri|sat)/i,\n  wide: /^(sunday|monday|tuesday|wednesday|thursday|friday|saturday)/i\n};\nvar parseDayPatterns = {\n  narrow: [/^s/i, /^m/i, /^t/i, /^w/i, /^t/i, /^f/i, /^s/i],\n  any: [/^su/i, /^m/i, /^tu/i, /^w/i, /^th/i, /^f/i, /^sa/i]\n};\nvar matchDayPeriodPatterns = {\n  narrow: /^(a|p|mi|n|(in the|at) (morning|afternoon|evening|night))/i,\n  any: /^([ap]\\.?\\s?m\\.?|midnight|noon|(in the|at) (morning|afternoon|evening|night))/i\n};\nvar parseDayPeriodPatterns = {\n  any: {\n    am: /^a/i,\n    pm: /^p/i,\n    midnight: /^mi/i,\n    noon: /^no/i,\n    morning: /morning/i,\n    afternoon: /afternoon/i,\n    evening: /evening/i,\n    night: /night/i\n  }\n};\nvar match = {\n  ordinalNumber: buildMatchPatternFn({\n    matchPattern: matchOrdinalNumberPattern,\n    parsePattern: parseOrdinalNumberPattern,\n    valueCallback: function valueCallback(value) {\n      return parseInt(value, 10);\n    }\n  }),\n  era: buildMatchFn({\n    matchPatterns: matchEraPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseEraPatterns,\n    defaultParseWidth: 'any'\n  }),\n  quarter: buildMatchFn({\n    matchPatterns: matchQuarterPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseQuarterPatterns,\n    defaultParseWidth: 'any',\n    valueCallback: function valueCallback(index) {\n      return index + 1;\n    }\n  }),\n  month: buildMatchFn({\n    matchPatterns: matchMonthPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseMonthPatterns,\n    defaultParseWidth: 'any'\n  }),\n  day: buildMatchFn({\n    matchPatterns: matchDayPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseDayPatterns,\n    defaultParseWidth: 'any'\n  }),\n  dayPeriod: buildMatchFn({\n    matchPatterns: matchDayPeriodPatterns,\n    defaultMatchWidth: 'any',\n    parsePatterns: parseDayPeriodPatterns,\n    defaultParseWidth: 'any'\n  })\n};\nexport default match;","var formatDistanceLocale = {\n  lessThanXSeconds: {\n    one: 'menos de un segundo',\n    other: 'menos de {{count}} segundos'\n  },\n  xSeconds: {\n    one: '1 segundo',\n    other: '{{count}} segundos'\n  },\n  halfAMinute: 'medio minuto',\n  lessThanXMinutes: {\n    one: 'menos de un minuto',\n    other: 'menos de {{count}} minutos'\n  },\n  xMinutes: {\n    one: '1 minuto',\n    other: '{{count}} minutos'\n  },\n  aboutXHours: {\n    one: 'alrededor de 1 hora',\n    other: 'alrededor de {{count}} horas'\n  },\n  xHours: {\n    one: '1 hora',\n    other: '{{count}} horas'\n  },\n  xDays: {\n    one: '1 día',\n    other: '{{count}} días'\n  },\n  aboutXWeeks: {\n    one: 'alrededor de 1 semana',\n    other: 'alrededor de {{count}} semanas'\n  },\n  xWeeks: {\n    one: '1 semana',\n    other: '{{count}} semanas'\n  },\n  aboutXMonths: {\n    one: 'alrededor de 1 mes',\n    other: 'alrededor de {{count}} meses'\n  },\n  xMonths: {\n    one: '1 mes',\n    other: '{{count}} meses'\n  },\n  aboutXYears: {\n    one: 'alrededor de 1 año',\n    other: 'alrededor de {{count}} años'\n  },\n  xYears: {\n    one: '1 año',\n    other: '{{count}} años'\n  },\n  overXYears: {\n    one: 'más de 1 año',\n    other: 'más de {{count}} años'\n  },\n  almostXYears: {\n    one: 'casi 1 año',\n    other: 'casi {{count}} años'\n  }\n};\nvar formatDistance = function formatDistance(token, count, options) {\n  var result;\n  var tokenValue = formatDistanceLocale[token];\n  if (typeof tokenValue === 'string') {\n    result = tokenValue;\n  } else if (count === 1) {\n    result = tokenValue.one;\n  } else {\n    result = tokenValue.other.replace('{{count}}', count.toString());\n  }\n  if (options !== null && options !== void 0 && options.addSuffix) {\n    if (options.comparison && options.comparison > 0) {\n      return 'en ' + result;\n    } else {\n      return 'hace ' + result;\n    }\n  }\n  return result;\n};\nexport default formatDistance;","import buildFormatLongFn from \"../../../_lib/buildFormatLongFn/index.js\";\nvar dateFormats = {\n  full: \"EEEE, d 'de' MMMM 'de' y\",\n  long: \"d 'de' MMMM 'de' y\",\n  medium: 'd MMM y',\n  short: 'dd/MM/y'\n};\nvar timeFormats = {\n  full: 'HH:mm:ss zzzz',\n  long: 'HH:mm:ss z',\n  medium: 'HH:mm:ss',\n  short: 'HH:mm'\n};\nvar dateTimeFormats = {\n  full: \"{{date}} 'a las' {{time}}\",\n  long: \"{{date}} 'a las' {{time}}\",\n  medium: '{{date}}, {{time}}',\n  short: '{{date}}, {{time}}'\n};\nvar formatLong = {\n  date: buildFormatLongFn({\n    formats: dateFormats,\n    defaultWidth: 'full'\n  }),\n  time: buildFormatLongFn({\n    formats: timeFormats,\n    defaultWidth: 'full'\n  }),\n  dateTime: buildFormatLongFn({\n    formats: dateTimeFormats,\n    defaultWidth: 'full'\n  })\n};\nexport default formatLong;","var formatRelativeLocale = {\n  lastWeek: \"'el' eeee 'pasado a la' p\",\n  yesterday: \"'ayer a la' p\",\n  today: \"'hoy a la' p\",\n  tomorrow: \"'mañana a la' p\",\n  nextWeek: \"eeee 'a la' p\",\n  other: 'P'\n};\nvar formatRelativeLocalePlural = {\n  lastWeek: \"'el' eeee 'pasado a las' p\",\n  yesterday: \"'ayer a las' p\",\n  today: \"'hoy a las' p\",\n  tomorrow: \"'mañana a las' p\",\n  nextWeek: \"eeee 'a las' p\",\n  other: 'P'\n};\nvar formatRelative = function formatRelative(token, date, _baseDate, _options) {\n  if (date.getUTCHours() !== 1) {\n    return formatRelativeLocalePlural[token];\n  } else {\n    return formatRelativeLocale[token];\n  }\n};\nexport default formatRelative;","import buildLocalizeFn from \"../../../_lib/buildLocalizeFn/index.js\";\nvar eraValues = {\n  narrow: ['AC', 'DC'],\n  abbreviated: ['AC', 'DC'],\n  wide: ['antes de cristo', 'después de cristo']\n};\nvar quarterValues = {\n  narrow: ['1', '2', '3', '4'],\n  abbreviated: ['T1', 'T2', 'T3', 'T4'],\n  wide: ['1º trimestre', '2º trimestre', '3º trimestre', '4º trimestre']\n};\nvar monthValues = {\n  narrow: ['e', 'f', 'm', 'a', 'm', 'j', 'j', 'a', 's', 'o', 'n', 'd'],\n  abbreviated: ['ene', 'feb', 'mar', 'abr', 'may', 'jun', 'jul', 'ago', 'sep', 'oct', 'nov', 'dic'],\n  wide: ['enero', 'febrero', 'marzo', 'abril', 'mayo', 'junio', 'julio', 'agosto', 'septiembre', 'octubre', 'noviembre', 'diciembre']\n};\nvar dayValues = {\n  narrow: ['d', 'l', 'm', 'm', 'j', 'v', 's'],\n  short: ['do', 'lu', 'ma', 'mi', 'ju', 'vi', 'sá'],\n  abbreviated: ['dom', 'lun', 'mar', 'mié', 'jue', 'vie', 'sáb'],\n  wide: ['domingo', 'lunes', 'martes', 'miércoles', 'jueves', 'viernes', 'sábado']\n};\nvar dayPeriodValues = {\n  narrow: {\n    am: 'a',\n    pm: 'p',\n    midnight: 'mn',\n    noon: 'md',\n    morning: 'mañana',\n    afternoon: 'tarde',\n    evening: 'tarde',\n    night: 'noche'\n  },\n  abbreviated: {\n    am: 'AM',\n    pm: 'PM',\n    midnight: 'medianoche',\n    noon: 'mediodia',\n    morning: 'mañana',\n    afternoon: 'tarde',\n    evening: 'tarde',\n    night: 'noche'\n  },\n  wide: {\n    am: 'a.m.',\n    pm: 'p.m.',\n    midnight: 'medianoche',\n    noon: 'mediodia',\n    morning: 'mañana',\n    afternoon: 'tarde',\n    evening: 'tarde',\n    night: 'noche'\n  }\n};\nvar formattingDayPeriodValues = {\n  narrow: {\n    am: 'a',\n    pm: 'p',\n    midnight: 'mn',\n    noon: 'md',\n    morning: 'de la mañana',\n    afternoon: 'de la tarde',\n    evening: 'de la tarde',\n    night: 'de la noche'\n  },\n  abbreviated: {\n    am: 'AM',\n    pm: 'PM',\n    midnight: 'medianoche',\n    noon: 'mediodia',\n    morning: 'de la mañana',\n    afternoon: 'de la tarde',\n    evening: 'de la tarde',\n    night: 'de la noche'\n  },\n  wide: {\n    am: 'a.m.',\n    pm: 'p.m.',\n    midnight: 'medianoche',\n    noon: 'mediodia',\n    morning: 'de la mañana',\n    afternoon: 'de la tarde',\n    evening: 'de la tarde',\n    night: 'de la noche'\n  }\n};\nvar ordinalNumber = function ordinalNumber(dirtyNumber, _options) {\n  var number = Number(dirtyNumber);\n  return number + 'º';\n};\nvar localize = {\n  ordinalNumber: ordinalNumber,\n  era: buildLocalizeFn({\n    values: eraValues,\n    defaultWidth: 'wide'\n  }),\n  quarter: buildLocalizeFn({\n    values: quarterValues,\n    defaultWidth: 'wide',\n    argumentCallback: function argumentCallback(quarter) {\n      return Number(quarter) - 1;\n    }\n  }),\n  month: buildLocalizeFn({\n    values: monthValues,\n    defaultWidth: 'wide'\n  }),\n  day: buildLocalizeFn({\n    values: dayValues,\n    defaultWidth: 'wide'\n  }),\n  dayPeriod: buildLocalizeFn({\n    values: dayPeriodValues,\n    defaultWidth: 'wide',\n    formattingValues: formattingDayPeriodValues,\n    defaultFormattingWidth: 'wide'\n  })\n};\nexport default localize;","import formatDistance from \"./_lib/formatDistance/index.js\";\nimport formatLong from \"./_lib/formatLong/index.js\";\nimport formatRelative from \"./_lib/formatRelative/index.js\";\nimport localize from \"./_lib/localize/index.js\";\nimport match from \"./_lib/match/index.js\";\n/**\n * @type {Locale}\n * @category Locales\n * @summary Spanish locale.\n * @language Spanish\n * @iso-639-2 spa\n * @author Juan Angosto [@juanangosto]{@link https://github.com/juanangosto}\n * @author Guillermo Grau [@guigrpa]{@link https://github.com/guigrpa}\n * @author Fernando Agüero [@fjaguero]{@link https://github.com/fjaguero}\n * @author Gastón Haro [@harogaston]{@link https://github.com/harogaston}\n * @author Yago Carballo [@YagoCarballo]{@link https://github.com/YagoCarballo}\n */\nvar locale = {\n  code: 'es',\n  formatDistance: formatDistance,\n  formatLong: formatLong,\n  formatRelative: formatRelative,\n  localize: localize,\n  match: match,\n  options: {\n    weekStartsOn: 1 /* Monday */,\n    firstWeekContainsDate: 1\n  }\n};\nexport default locale;","import buildMatchPatternFn from \"../../../_lib/buildMatchPatternFn/index.js\";\nimport buildMatchFn from \"../../../_lib/buildMatchFn/index.js\";\nvar matchOrdinalNumberPattern = /^(\\d+)(º)?/i;\nvar parseOrdinalNumberPattern = /\\d+/i;\nvar matchEraPatterns = {\n  narrow: /^(ac|dc|a|d)/i,\n  abbreviated: /^(a\\.?\\s?c\\.?|a\\.?\\s?e\\.?\\s?c\\.?|d\\.?\\s?c\\.?|e\\.?\\s?c\\.?)/i,\n  wide: /^(antes de cristo|antes de la era com[uú]n|despu[eé]s de cristo|era com[uú]n)/i\n};\nvar parseEraPatterns = {\n  any: [/^ac/i, /^dc/i],\n  wide: [/^(antes de cristo|antes de la era com[uú]n)/i, /^(despu[eé]s de cristo|era com[uú]n)/i]\n};\nvar matchQuarterPatterns = {\n  narrow: /^[1234]/i,\n  abbreviated: /^T[1234]/i,\n  wide: /^[1234](º)? trimestre/i\n};\nvar parseQuarterPatterns = {\n  any: [/1/i, /2/i, /3/i, /4/i]\n};\nvar matchMonthPatterns = {\n  narrow: /^[efmajsond]/i,\n  abbreviated: /^(ene|feb|mar|abr|may|jun|jul|ago|sep|oct|nov|dic)/i,\n  wide: /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i\n};\nvar parseMonthPatterns = {\n  narrow: [/^e/i, /^f/i, /^m/i, /^a/i, /^m/i, /^j/i, /^j/i, /^a/i, /^s/i, /^o/i, /^n/i, /^d/i],\n  any: [/^en/i, /^feb/i, /^mar/i, /^abr/i, /^may/i, /^jun/i, /^jul/i, /^ago/i, /^sep/i, /^oct/i, /^nov/i, /^dic/i]\n};\nvar matchDayPatterns = {\n  narrow: /^[dlmjvs]/i,\n  short: /^(do|lu|ma|mi|ju|vi|s[áa])/i,\n  abbreviated: /^(dom|lun|mar|mi[ée]|jue|vie|s[áa]b)/i,\n  wide: /^(domingo|lunes|martes|mi[ée]rcoles|jueves|viernes|s[áa]bado)/i\n};\nvar parseDayPatterns = {\n  narrow: [/^d/i, /^l/i, /^m/i, /^m/i, /^j/i, /^v/i, /^s/i],\n  any: [/^do/i, /^lu/i, /^ma/i, /^mi/i, /^ju/i, /^vi/i, /^sa/i]\n};\nvar matchDayPeriodPatterns = {\n  narrow: /^(a|p|mn|md|(de la|a las) (mañana|tarde|noche))/i,\n  any: /^([ap]\\.?\\s?m\\.?|medianoche|mediodia|(de la|a las) (mañana|tarde|noche))/i\n};\nvar parseDayPeriodPatterns = {\n  any: {\n    am: /^a/i,\n    pm: /^p/i,\n    midnight: /^mn/i,\n    noon: /^md/i,\n    morning: /mañana/i,\n    afternoon: /tarde/i,\n    evening: /tarde/i,\n    night: /noche/i\n  }\n};\nvar match = {\n  ordinalNumber: buildMatchPatternFn({\n    matchPattern: matchOrdinalNumberPattern,\n    parsePattern: parseOrdinalNumberPattern,\n    valueCallback: function valueCallback(value) {\n      return parseInt(value, 10);\n    }\n  }),\n  era: buildMatchFn({\n    matchPatterns: matchEraPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseEraPatterns,\n    defaultParseWidth: 'any'\n  }),\n  quarter: buildMatchFn({\n    matchPatterns: matchQuarterPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseQuarterPatterns,\n    defaultParseWidth: 'any',\n    valueCallback: function valueCallback(index) {\n      return index + 1;\n    }\n  }),\n  month: buildMatchFn({\n    matchPatterns: matchMonthPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseMonthPatterns,\n    defaultParseWidth: 'any'\n  }),\n  day: buildMatchFn({\n    matchPatterns: matchDayPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseDayPatterns,\n    defaultParseWidth: 'any'\n  }),\n  dayPeriod: buildMatchFn({\n    matchPatterns: matchDayPeriodPatterns,\n    defaultMatchWidth: 'any',\n    parsePatterns: parseDayPeriodPatterns,\n    defaultParseWidth: 'any'\n  })\n};\nexport default match;","import _typeof from \"@babel/runtime/helpers/esm/typeof\";\nimport toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name max\n * @category Common Helpers\n * @summary Return the latest of the given dates.\n *\n * @description\n * Return the latest of the given dates.\n *\n * @param {Date[]|Number[]} datesArray - the dates to compare\n * @returns {Date} the latest of the dates\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Which of these dates is the latest?\n * const result = max([\n *   new Date(1989, 6, 10),\n *   new Date(1987, 1, 11),\n *   new Date(1995, 6, 2),\n *   new Date(1990, 0, 1)\n * ])\n * //=> Sun Jul 02 1995 00:00:00\n */\nexport default function max(dirtyDatesArray) {\n  requiredArgs(1, arguments);\n  var datesArray;\n  // `dirtyDatesArray` is Array, Set or Map, or object with custom `forEach` method\n  if (dirtyDatesArray && typeof dirtyDatesArray.forEach === 'function') {\n    datesArray = dirtyDatesArray;\n\n    // If `dirtyDatesArray` is Array-like Object, convert to Array.\n  } else if (_typeof(dirtyDatesArray) === 'object' && dirtyDatesArray !== null) {\n    datesArray = Array.prototype.slice.call(dirtyDatesArray);\n  } else {\n    // `dirtyDatesArray` is non-iterable, return Invalid Date\n    return new Date(NaN);\n  }\n  var result;\n  datesArray.forEach(function (dirtyDate) {\n    var currentDate = toDate(dirtyDate);\n    if (result === undefined || result < currentDate || isNaN(Number(currentDate))) {\n      result = currentDate;\n    }\n  });\n  return result || new Date(NaN);\n}","import requiredArgs from \"../_lib/requiredArgs/index.js\";\n// Leap year occures every 4 years, except for years that are divisable by 100 and not divisable by 400.\n// 1 mean year = (365+1/4-1/100+1/400) days = 365.2425 days\nvar daysInYear = 365.2425;\n\n/**\n * @name milliseconds\n * @category Millisecond Helpers\n * @summary\n * Returns the number of milliseconds in the specified, years, months, weeks, days, hours, minutes and seconds.\n *\n * @description\n * Returns the number of milliseconds in the specified, years, months, weeks, days, hours, minutes and seconds.\n *\n * One years equals 365.2425 days according to the formula:\n *\n * > Leap year occures every 4 years, except for years that are divisable by 100 and not divisable by 400.\n * > 1 mean year = (365+1/4-1/100+1/400) days = 365.2425 days\n *\n * One month is a year divided by 12.\n *\n * @param {Duration} duration - the object with years, months, weeks, days, hours, minutes and seconds to be added. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`.\n * @returns {number} the milliseconds\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // 1 year in milliseconds\n * milliseconds({ years: 1 })\n * //=> 31556952000\n *\n * // 3 months in milliseconds\n * milliseconds({ months: 3 })\n * //=> 7889238000\n */\nexport default function milliseconds(_ref) {\n  var years = _ref.years,\n    months = _ref.months,\n    weeks = _ref.weeks,\n    days = _ref.days,\n    hours = _ref.hours,\n    minutes = _ref.minutes,\n    seconds = _ref.seconds;\n  requiredArgs(1, arguments);\n  var totalDays = 0;\n  if (years) totalDays += years * daysInYear;\n  if (months) totalDays += months * (daysInYear / 12);\n  if (weeks) totalDays += weeks * 7;\n  if (days) totalDays += days;\n  var totalSeconds = totalDays * 24 * 60 * 60;\n  if (hours) totalSeconds += hours * 60 * 60;\n  if (minutes) totalSeconds += minutes * 60;\n  if (seconds) totalSeconds += seconds;\n  return Math.round(totalSeconds * 1000);\n}","import requiredArgs from \"../_lib/requiredArgs/index.js\";\nimport { millisecondsInHour } from \"../constants/index.js\";\n/**\n * @name millisecondsToHours\n * @category Conversion Helpers\n * @summary Convert milliseconds to hours.\n *\n * @description\n * Convert a number of milliseconds to a full number of hours.\n *\n * @param {number} milliseconds - number of milliseconds to be converted\n *\n * @returns {number} the number of milliseconds converted in hours\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Convert 7200000 milliseconds to hours:\n * const result = millisecondsToHours(7200000)\n * //=> 2\n *\n * @example\n * // It uses floor rounding:\n * const result = millisecondsToHours(7199999)\n * //=> 1\n */\nexport default function millisecondsToHours(milliseconds) {\n  requiredArgs(1, arguments);\n  var hours = milliseconds / millisecondsInHour;\n  return Math.floor(hours);\n}","import requiredArgs from \"../_lib/requiredArgs/index.js\";\nimport { millisecondsInMinute } from \"../constants/index.js\";\n/**\n * @name millisecondsToMinutes\n * @category Conversion Helpers\n * @summary Convert milliseconds to minutes.\n *\n * @description\n * Convert a number of milliseconds to a full number of minutes.\n *\n * @param {number} milliseconds - number of milliseconds to be converted.\n *\n * @returns {number} the number of milliseconds converted in minutes\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Convert 60000 milliseconds to minutes:\n * const result = millisecondsToMinutes(60000)\n * //=> 1\n *\n * @example\n * // It uses floor rounding:\n * const result = millisecondsToMinutes(119999)\n * //=> 1\n */\nexport default function millisecondsToMinutes(milliseconds) {\n  requiredArgs(1, arguments);\n  var minutes = milliseconds / millisecondsInMinute;\n  return Math.floor(minutes);\n}","import requiredArgs from \"../_lib/requiredArgs/index.js\";\nimport { millisecondsInSecond } from \"../constants/index.js\";\n/**\n * @name millisecondsToSeconds\n * @category Conversion Helpers\n * @summary Convert milliseconds to seconds.\n *\n * @description\n * Convert a number of milliseconds to a full number of seconds.\n *\n * @param {number} milliseconds - number of milliseconds to be converted\n *\n * @returns {number} the number of milliseconds converted in seconds\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Convert 1000 miliseconds to seconds:\n * const result = millisecondsToSeconds(1000)\n * //=> 1\n *\n * @example\n * // It uses floor rounding:\n * const result = millisecondsToSeconds(1999)\n * //=> 1\n */\nexport default function millisecondsToSeconds(milliseconds) {\n  requiredArgs(1, arguments);\n  var seconds = milliseconds / millisecondsInSecond;\n  return Math.floor(seconds);\n}","import _typeof from \"@babel/runtime/helpers/esm/typeof\";\nimport toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name min\n * @category Common Helpers\n * @summary Returns the earliest of the given dates.\n *\n * @description\n * Returns the earliest of the given dates.\n *\n * @param {Date[]|Number[]} datesArray - the dates to compare\n * @returns {Date} - the earliest of the dates\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Which of these dates is the earliest?\n * const result = min([\n *   new Date(1989, 6, 10),\n *   new Date(1987, 1, 11),\n *   new Date(1995, 6, 2),\n *   new Date(1990, 0, 1)\n * ])\n * //=> Wed Feb 11 1987 00:00:00\n */\nexport default function min(dirtyDatesArray) {\n  requiredArgs(1, arguments);\n  var datesArray;\n  // `dirtyDatesArray` is Array, Set or Map, or object with custom `forEach` method\n  if (dirtyDatesArray && typeof dirtyDatesArray.forEach === 'function') {\n    datesArray = dirtyDatesArray;\n    // If `dirtyDatesArray` is Array-like Object, convert to Array.\n  } else if (_typeof(dirtyDatesArray) === 'object' && dirtyDatesArray !== null) {\n    datesArray = Array.prototype.slice.call(dirtyDatesArray);\n  } else {\n    // `dirtyDatesArray` is non-iterable, return Invalid Date\n    return new Date(NaN);\n  }\n  var result;\n  datesArray.forEach(function (dirtyDate) {\n    var currentDate = toDate(dirtyDate);\n    if (result === undefined || result > currentDate || isNaN(currentDate.getDate())) {\n      result = currentDate;\n    }\n  });\n  return result || new Date(NaN);\n}","import requiredArgs from \"../_lib/requiredArgs/index.js\";\nimport { minutesInHour } from \"../constants/index.js\";\n/**\n * @name minutesToHours\n * @category Conversion Helpers\n * @summary Convert minutes to hours.\n *\n * @description\n * Convert a number of minutes to a full number of hours.\n *\n * @param {number} minutes - number of minutes to be converted\n *\n * @returns {number} the number of minutes converted in hours\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Convert 140 minutes to hours:\n * const result = minutesToHours(120)\n * //=> 2\n *\n * @example\n * // It uses floor rounding:\n * const result = minutesToHours(179)\n * //=> 2\n */\nexport default function minutesToHours(minutes) {\n  requiredArgs(1, arguments);\n  var hours = minutes / minutesInHour;\n  return Math.floor(hours);\n}","import requiredArgs from \"../_lib/requiredArgs/index.js\";\nimport { millisecondsInMinute } from \"../constants/index.js\";\n/**\n * @name minutesToMilliseconds\n * @category Conversion Helpers\n * @summary Convert minutes to milliseconds.\n *\n * @description\n * Convert a number of minutes to a full number of milliseconds.\n *\n * @param {number} minutes - number of minutes to be converted\n *\n * @returns {number} the number of minutes converted in milliseconds\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Convert 2 minutes to milliseconds\n * const result = minutesToMilliseconds(2)\n * //=> 120000\n */\nexport default function minutesToMilliseconds(minutes) {\n  requiredArgs(1, arguments);\n  return Math.floor(minutes * millisecondsInMinute);\n}","import requiredArgs from \"../_lib/requiredArgs/index.js\";\nimport { secondsInMinute } from \"../constants/index.js\";\n/**\n * @name minutesToSeconds\n * @category Conversion Helpers\n * @summary Convert minutes to seconds.\n *\n * @description\n * Convert a number of minutes to a full number of seconds.\n *\n * @param { number } minutes - number of minutes to be converted\n *\n * @returns {number} the number of minutes converted in seconds\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Convert 2 minutes to seconds\n * const result = minutesToSeconds(2)\n * //=> 120\n */\nexport default function minutesToSeconds(minutes) {\n  requiredArgs(1, arguments);\n  return Math.floor(minutes * secondsInMinute);\n}","import requiredArgs from \"../_lib/requiredArgs/index.js\";\nimport { monthsInQuarter } from \"../constants/index.js\";\n/**\n * @name monthsToQuarters\n * @category Conversion Helpers\n * @summary Convert number of months to quarters.\n *\n * @description\n * Convert a number of months to a full number of quarters.\n *\n * @param {number} months - number of months to be converted.\n *\n * @returns {number} the number of months converted in quarters\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Convert 6 months to quarters:\n * const result = monthsToQuarters(6)\n * //=> 2\n *\n * @example\n * // It uses floor rounding:\n * const result = monthsToQuarters(7)\n * //=> 2\n */\nexport default function monthsToQuarters(months) {\n  requiredArgs(1, arguments);\n  var quarters = months / monthsInQuarter;\n  return Math.floor(quarters);\n}","import requiredArgs from \"../_lib/requiredArgs/index.js\";\nimport { monthsInYear } from \"../constants/index.js\";\n/**\n * @name monthsToYears\n * @category Conversion Helpers\n * @summary Convert number of months to years.\n *\n * @description\n * Convert a number of months to a full number of years.\n *\n * @param {number} months - number of months to be converted\n *\n * @returns {number} the number of months converted in years\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Convert 36 months to years:\n * const result = monthsToYears(36)\n * //=> 3\n *\n * // It uses floor rounding:\n * const result = monthsToYears(40)\n * //=> 3\n */\nexport default function monthsToYears(months) {\n  requiredArgs(1, arguments);\n  var years = months / monthsInYear;\n  return Math.floor(years);\n}","import addDays from \"../addDays/index.js\";\nimport getDay from \"../getDay/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name nextDay\n * @category Weekday Helpers\n * @summary When is the next day of the week?\n *\n * @description\n * When is the next day of the week? 0-6 the day of the week, 0 represents Sunday.\n *\n * @param {Date | number} date - the date to check\n * @param {Day} day - day of the week\n * @returns {Date} - the date is the next day of week\n * @throws {TypeError} - 2 arguments required\n *\n * @example\n * // When is the next Monday after Mar, 20, 2020?\n * const result = nextDay(new Date(2020, 2, 20), 1)\n * //=> Mon Mar 23 2020 00:00:00\n *\n * @example\n * // When is the next Tuesday after Mar, 21, 2020?\n * const result = nextDay(new Date(2020, 2, 21), 2)\n * //=> Tue Mar 24 2020 00:00:00\n */\nexport default function nextDay(date, day) {\n  requiredArgs(2, arguments);\n  var delta = day - getDay(date);\n  if (delta <= 0) delta += 7;\n  return addDays(date, delta);\n}","import nextDay from \"../nextDay/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name nextFriday\n * @category Weekday Helpers\n * @summary When is the next Friday?\n *\n * @description\n * When is the next Friday?\n *\n * @param {Date | number} date - the date to start counting from\n * @returns {Date} the next Friday\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // When is the next Friday after Mar, 22, 2020?\n * const result = nextFriday(new Date(2020, 2, 22))\n * //=> Fri Mar 27 2020 00:00:00\n */\nexport default function nextFriday(date) {\n  requiredArgs(1, arguments);\n  return nextDay(date, 5);\n}","import nextDay from \"../nextDay/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name nextMonday\n * @category Weekday Helpers\n * @summary When is the next Monday?\n *\n * @description\n * When is the next Monday?\n *\n * @param {Date | number} date - the date to start counting from\n * @returns {Date} the next Monday\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // When is the next Monday after Mar, 22, 2020?\n * const result = nextMonday(new Date(2020, 2, 22))\n * //=> Mon Mar 23 2020 00:00:00\n */\nexport default function nextMonday(date) {\n  requiredArgs(1, arguments);\n  return nextDay(date, 1);\n}","import nextDay from \"../nextDay/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name nextSaturday\n * @category Weekday Helpers\n * @summary When is the next Saturday?\n *\n * @description\n * When is the next Saturday?\n *\n * @param {Date | number} date - the date to start counting from\n * @returns {Date} the next Saturday\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // When is the next Saturday after Mar, 22, 2020?\n * const result = nextSaturday(new Date(2020, 2, 22))\n * //=> Sat Mar 28 2020 00:00:00\n */\nexport default function nextSaturday(date) {\n  requiredArgs(1, arguments);\n  return nextDay(date, 6);\n}","import nextDay from \"../nextDay/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name nextSunday\n * @category Weekday Helpers\n * @summary When is the next Sunday?\n *\n * @description\n * When is the next Sunday?\n *\n * @param {Date | number} date - the date to start counting from\n * @returns {Date} the next Sunday\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // When is the next Sunday after Mar, 22, 2020?\n * const result = nextSunday(new Date(2020, 2, 22))\n * //=> Sun Mar 29 2020 00:00:00\n */\nexport default function nextSunday(date) {\n  requiredArgs(1, arguments);\n  return nextDay(date, 0);\n}","import nextDay from \"../nextDay/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name nextThursday\n * @category Weekday Helpers\n * @summary When is the next Thursday?\n *\n * @description\n * When is the next Thursday?\n *\n * @param {Date | number} date - the date to start counting from\n * @returns {Date} the next Thursday\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // When is the next Thursday after Mar, 22, 2020?\n * const result = nextThursday(new Date(2020, 2, 22))\n * //=> Thur Mar 26 2020 00:00:00\n */\nexport default function nextThursday(date) {\n  requiredArgs(1, arguments);\n  return nextDay(date, 4);\n}","import nextDay from \"../nextDay/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name nextTuesday\n * @category Weekday Helpers\n * @summary When is the next Tuesday?\n *\n * @description\n * When is the next Tuesday?\n *\n * @param {Date | number} date - the date to start counting from\n * @returns {Date} the next Tuesday\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // When is the next Tuesday after Mar, 22, 2020?\n * const result = nextTuesday(new Date(2020, 2, 22))\n * //=> Tue Mar 24 2020 00:00:00\n */\nexport default function nextTuesday(date) {\n  requiredArgs(1, arguments);\n  return nextDay(date, 2);\n}","import nextDay from \"../nextDay/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name nextWednesday\n * @category Weekday Helpers\n * @summary When is the next Wednesday?\n *\n * @description\n * When is the next Wednesday?\n *\n * @param {Date | number} date - the date to start counting from\n * @returns {Date} the next Wednesday\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // When is the next Wednesday after Mar, 22, 2020?\n * const result = nextWednesday(new Date(2020, 2, 22))\n * //=> Wed Mar 25 2020 00:00:00\n */\nexport default function nextWednesday(date) {\n  requiredArgs(1, arguments);\n  return nextDay(date, 3);\n}","import _classCallCheck from \"@babel/runtime/helpers/esm/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/esm/createClass\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport { ValueSetter } from \"./Setter.js\";\nexport var Parser = /*#__PURE__*/function () {\n  function Parser() {\n    _classCallCheck(this, Parser);\n    _defineProperty(this, \"incompatibleTokens\", void 0);\n    _defineProperty(this, \"priority\", void 0);\n    _defineProperty(this, \"subPriority\", void 0);\n  }\n  _createClass(Parser, [{\n    key: \"run\",\n    value: function run(dateString, token, match, options) {\n      var result = this.parse(dateString, token, match, options);\n      if (!result) {\n        return null;\n      }\n      return {\n        setter: new ValueSetter(result.value, this.validate, this.set, this.priority, this.subPriority),\n        rest: result.rest\n      };\n    }\n  }, {\n    key: \"validate\",\n    value: function validate(_utcDate, _value, _options) {\n      return true;\n    }\n  }]);\n  return Parser;\n}();","import _assertThisInitialized from \"@babel/runtime/helpers/esm/assertThisInitialized\";\nimport _inherits from \"@babel/runtime/helpers/esm/inherits\";\nimport _createSuper from \"@babel/runtime/helpers/esm/createSuper\";\nimport _classCallCheck from \"@babel/runtime/helpers/esm/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/esm/createClass\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nvar TIMEZONE_UNIT_PRIORITY = 10;\nexport var Setter = /*#__PURE__*/function () {\n  function Setter() {\n    _classCallCheck(this, Setter);\n    _defineProperty(this, \"priority\", void 0);\n    _defineProperty(this, \"subPriority\", 0);\n  }\n  _createClass(Setter, [{\n    key: \"validate\",\n    value: function validate(_utcDate, _options) {\n      return true;\n    }\n  }]);\n  return Setter;\n}();\nexport var ValueSetter = /*#__PURE__*/function (_Setter) {\n  _inherits(ValueSetter, _Setter);\n  var _super = _createSuper(ValueSetter);\n  function ValueSetter(value, validateValue, setValue, priority, subPriority) {\n    var _this;\n    _classCallCheck(this, ValueSetter);\n    _this = _super.call(this);\n    _this.value = value;\n    _this.validateValue = validateValue;\n    _this.setValue = setValue;\n    _this.priority = priority;\n    if (subPriority) {\n      _this.subPriority = subPriority;\n    }\n    return _this;\n  }\n  _createClass(ValueSetter, [{\n    key: \"validate\",\n    value: function validate(utcDate, options) {\n      return this.validateValue(utcDate, this.value, options);\n    }\n  }, {\n    key: \"set\",\n    value: function set(utcDate, flags, options) {\n      return this.setValue(utcDate, flags, this.value, options);\n    }\n  }]);\n  return ValueSetter;\n}(Setter);\nexport var DateToSystemTimezoneSetter = /*#__PURE__*/function (_Setter2) {\n  _inherits(DateToSystemTimezoneSetter, _Setter2);\n  var _super2 = _createSuper(DateToSystemTimezoneSetter);\n  function DateToSystemTimezoneSetter() {\n    var _this2;\n    _classCallCheck(this, DateToSystemTimezoneSetter);\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n    _this2 = _super2.call.apply(_super2, [this].concat(args));\n    _defineProperty(_assertThisInitialized(_this2), \"priority\", TIMEZONE_UNIT_PRIORITY);\n    _defineProperty(_assertThisInitialized(_this2), \"subPriority\", -1);\n    return _this2;\n  }\n  _createClass(DateToSystemTimezoneSetter, [{\n    key: \"set\",\n    value: function set(date, flags) {\n      if (flags.timestampIsSet) {\n        return date;\n      }\n      var convertedDate = new Date(0);\n      convertedDate.setFullYear(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate());\n      convertedDate.setHours(date.getUTCHours(), date.getUTCMinutes(), date.getUTCSeconds(), date.getUTCMilliseconds());\n      return convertedDate;\n    }\n  }]);\n  return DateToSystemTimezoneSetter;\n}(Setter);","export var numericPatterns = {\n  month: /^(1[0-2]|0?\\d)/,\n  // 0 to 12\n  date: /^(3[0-1]|[0-2]?\\d)/,\n  // 0 to 31\n  dayOfYear: /^(36[0-6]|3[0-5]\\d|[0-2]?\\d?\\d)/,\n  // 0 to 366\n  week: /^(5[0-3]|[0-4]?\\d)/,\n  // 0 to 53\n  hour23h: /^(2[0-3]|[0-1]?\\d)/,\n  // 0 to 23\n  hour24h: /^(2[0-4]|[0-1]?\\d)/,\n  // 0 to 24\n  hour11h: /^(1[0-1]|0?\\d)/,\n  // 0 to 11\n  hour12h: /^(1[0-2]|0?\\d)/,\n  // 0 to 12\n  minute: /^[0-5]?\\d/,\n  // 0 to 59\n  second: /^[0-5]?\\d/,\n  // 0 to 59\n\n  singleDigit: /^\\d/,\n  // 0 to 9\n  twoDigits: /^\\d{1,2}/,\n  // 0 to 99\n  threeDigits: /^\\d{1,3}/,\n  // 0 to 999\n  fourDigits: /^\\d{1,4}/,\n  // 0 to 9999\n\n  anyDigitsSigned: /^-?\\d+/,\n  singleDigitSigned: /^-?\\d/,\n  // 0 to 9, -0 to -9\n  twoDigitsSigned: /^-?\\d{1,2}/,\n  // 0 to 99, -0 to -99\n  threeDigitsSigned: /^-?\\d{1,3}/,\n  // 0 to 999, -0 to -999\n  fourDigitsSigned: /^-?\\d{1,4}/ // 0 to 9999, -0 to -9999\n};\n\nexport var timezonePatterns = {\n  basicOptionalMinutes: /^([+-])(\\d{2})(\\d{2})?|Z/,\n  basic: /^([+-])(\\d{2})(\\d{2})|Z/,\n  basicOptionalSeconds: /^([+-])(\\d{2})(\\d{2})((\\d{2}))?|Z/,\n  extended: /^([+-])(\\d{2}):(\\d{2})|Z/,\n  extendedOptionalSeconds: /^([+-])(\\d{2}):(\\d{2})(:(\\d{2}))?|Z/\n};","import _classCallCheck from \"@babel/runtime/helpers/esm/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/esm/createClass\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/esm/assertThisInitialized\";\nimport _inherits from \"@babel/runtime/helpers/esm/inherits\";\nimport _createSuper from \"@babel/runtime/helpers/esm/createSuper\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport { Parser } from \"../Parser.js\";\nexport var EraParser = /*#__PURE__*/function (_Parser) {\n  _inherits(EraParser, _Parser);\n  var _super = _createSuper(EraParser);\n  function EraParser() {\n    var _this;\n    _classCallCheck(this, EraParser);\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n    _this = _super.call.apply(_super, [this].concat(args));\n    _defineProperty(_assertThisInitialized(_this), \"priority\", 140);\n    _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['R', 'u', 't', 'T']);\n    return _this;\n  }\n  _createClass(EraParser, [{\n    key: \"parse\",\n    value: function parse(dateString, token, match) {\n      switch (token) {\n        // AD, BC\n        case 'G':\n        case 'GG':\n        case 'GGG':\n          return match.era(dateString, {\n            width: 'abbreviated'\n          }) || match.era(dateString, {\n            width: 'narrow'\n          });\n        // A, B\n        case 'GGGGG':\n          return match.era(dateString, {\n            width: 'narrow'\n          });\n        // Anno Domini, Before Christ\n        case 'GGGG':\n        default:\n          return match.era(dateString, {\n            width: 'wide'\n          }) || match.era(dateString, {\n            width: 'abbreviated'\n          }) || match.era(dateString, {\n            width: 'narrow'\n          });\n      }\n    }\n  }, {\n    key: \"set\",\n    value: function set(date, flags, value) {\n      flags.era = value;\n      date.setUTCFullYear(value, 0, 1);\n      date.setUTCHours(0, 0, 0, 0);\n      return date;\n    }\n  }]);\n  return EraParser;\n}(Parser);","import _classCallCheck from \"@babel/runtime/helpers/esm/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/esm/createClass\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/esm/assertThisInitialized\";\nimport _inherits from \"@babel/runtime/helpers/esm/inherits\";\nimport _createSuper from \"@babel/runtime/helpers/esm/createSuper\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport { Parser } from \"../Parser.js\";\nimport { mapValue, normalizeTwoDigitYear, parseNDigits } from \"../utils.js\";\n// From http://www.unicode.org/reports/tr35/tr35-31/tr35-dates.html#Date_Format_Patterns\n// | Year     |     y | yy |   yyy |  yyyy | yyyyy |\n// |----------|-------|----|-------|-------|-------|\n// | AD 1     |     1 | 01 |   001 |  0001 | 00001 |\n// | AD 12    |    12 | 12 |   012 |  0012 | 00012 |\n// | AD 123   |   123 | 23 |   123 |  0123 | 00123 |\n// | AD 1234  |  1234 | 34 |  1234 |  1234 | 01234 |\n// | AD 12345 | 12345 | 45 | 12345 | 12345 | 12345 |\nexport var YearParser = /*#__PURE__*/function (_Parser) {\n  _inherits(YearParser, _Parser);\n  var _super = _createSuper(YearParser);\n  function YearParser() {\n    var _this;\n    _classCallCheck(this, YearParser);\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n    _this = _super.call.apply(_super, [this].concat(args));\n    _defineProperty(_assertThisInitialized(_this), \"priority\", 130);\n    _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['Y', 'R', 'u', 'w', 'I', 'i', 'e', 'c', 't', 'T']);\n    return _this;\n  }\n  _createClass(YearParser, [{\n    key: \"parse\",\n    value: function parse(dateString, token, match) {\n      var valueCallback = function valueCallback(year) {\n        return {\n          year: year,\n          isTwoDigitYear: token === 'yy'\n        };\n      };\n      switch (token) {\n        case 'y':\n          return mapValue(parseNDigits(4, dateString), valueCallback);\n        case 'yo':\n          return mapValue(match.ordinalNumber(dateString, {\n            unit: 'year'\n          }), valueCallback);\n        default:\n          return mapValue(parseNDigits(token.length, dateString), valueCallback);\n      }\n    }\n  }, {\n    key: \"validate\",\n    value: function validate(_date, value) {\n      return value.isTwoDigitYear || value.year > 0;\n    }\n  }, {\n    key: \"set\",\n    value: function set(date, flags, value) {\n      var currentYear = date.getUTCFullYear();\n      if (value.isTwoDigitYear) {\n        var normalizedTwoDigitYear = normalizeTwoDigitYear(value.year, currentYear);\n        date.setUTCFullYear(normalizedTwoDigitYear, 0, 1);\n        date.setUTCHours(0, 0, 0, 0);\n        return date;\n      }\n      var year = !('era' in flags) || flags.era === 1 ? value.year : 1 - value.year;\n      date.setUTCFullYear(year, 0, 1);\n      date.setUTCHours(0, 0, 0, 0);\n      return date;\n    }\n  }]);\n  return YearParser;\n}(Parser);","import _classCallCheck from \"@babel/runtime/helpers/esm/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/esm/createClass\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/esm/assertThisInitialized\";\nimport _inherits from \"@babel/runtime/helpers/esm/inherits\";\nimport _createSuper from \"@babel/runtime/helpers/esm/createSuper\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport { Parser } from \"../Parser.js\";\nimport { parseNDigits, normalizeTwoDigitYear, mapValue } from \"../utils.js\";\nimport getUTCWeekYear from \"../../../_lib/getUTCWeekYear/index.js\";\nimport startOfUTCWeek from \"../../../_lib/startOfUTCWeek/index.js\";\n// Local week-numbering year\nexport var LocalWeekYearParser = /*#__PURE__*/function (_Parser) {\n  _inherits(LocalWeekYearParser, _Parser);\n  var _super = _createSuper(LocalWeekYearParser);\n  function LocalWeekYearParser() {\n    var _this;\n    _classCallCheck(this, LocalWeekYearParser);\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n    _this = _super.call.apply(_super, [this].concat(args));\n    _defineProperty(_assertThisInitialized(_this), \"priority\", 130);\n    _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['y', 'R', 'u', 'Q', 'q', 'M', 'L', 'I', 'd', 'D', 'i', 't', 'T']);\n    return _this;\n  }\n  _createClass(LocalWeekYearParser, [{\n    key: \"parse\",\n    value: function parse(dateString, token, match) {\n      var valueCallback = function valueCallback(year) {\n        return {\n          year: year,\n          isTwoDigitYear: token === 'YY'\n        };\n      };\n      switch (token) {\n        case 'Y':\n          return mapValue(parseNDigits(4, dateString), valueCallback);\n        case 'Yo':\n          return mapValue(match.ordinalNumber(dateString, {\n            unit: 'year'\n          }), valueCallback);\n        default:\n          return mapValue(parseNDigits(token.length, dateString), valueCallback);\n      }\n    }\n  }, {\n    key: \"validate\",\n    value: function validate(_date, value) {\n      return value.isTwoDigitYear || value.year > 0;\n    }\n  }, {\n    key: \"set\",\n    value: function set(date, flags, value, options) {\n      var currentYear = getUTCWeekYear(date, options);\n      if (value.isTwoDigitYear) {\n        var normalizedTwoDigitYear = normalizeTwoDigitYear(value.year, currentYear);\n        date.setUTCFullYear(normalizedTwoDigitYear, 0, options.firstWeekContainsDate);\n        date.setUTCHours(0, 0, 0, 0);\n        return startOfUTCWeek(date, options);\n      }\n      var year = !('era' in flags) || flags.era === 1 ? value.year : 1 - value.year;\n      date.setUTCFullYear(year, 0, options.firstWeekContainsDate);\n      date.setUTCHours(0, 0, 0, 0);\n      return startOfUTCWeek(date, options);\n    }\n  }]);\n  return LocalWeekYearParser;\n}(Parser);","import _classCallCheck from \"@babel/runtime/helpers/esm/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/esm/createClass\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/esm/assertThisInitialized\";\nimport _inherits from \"@babel/runtime/helpers/esm/inherits\";\nimport _createSuper from \"@babel/runtime/helpers/esm/createSuper\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport { Parser } from \"../Parser.js\";\nimport { parseNDigitsSigned } from \"../utils.js\";\nimport startOfUTCISOWeek from \"../../../_lib/startOfUTCISOWeek/index.js\"; // ISO week-numbering year\nexport var ISOWeekYearParser = /*#__PURE__*/function (_Parser) {\n  _inherits(ISOWeekYearParser, _Parser);\n  var _super = _createSuper(ISOWeekYearParser);\n  function ISOWeekYearParser() {\n    var _this;\n    _classCallCheck(this, ISOWeekYearParser);\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n    _this = _super.call.apply(_super, [this].concat(args));\n    _defineProperty(_assertThisInitialized(_this), \"priority\", 130);\n    _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['G', 'y', 'Y', 'u', 'Q', 'q', 'M', 'L', 'w', 'd', 'D', 'e', 'c', 't', 'T']);\n    return _this;\n  }\n  _createClass(ISOWeekYearParser, [{\n    key: \"parse\",\n    value: function parse(dateString, token) {\n      if (token === 'R') {\n        return parseNDigitsSigned(4, dateString);\n      }\n      return parseNDigitsSigned(token.length, dateString);\n    }\n  }, {\n    key: \"set\",\n    value: function set(_date, _flags, value) {\n      var firstWeekOfYear = new Date(0);\n      firstWeekOfYear.setUTCFullYear(value, 0, 4);\n      firstWeekOfYear.setUTCHours(0, 0, 0, 0);\n      return startOfUTCISOWeek(firstWeekOfYear);\n    }\n  }]);\n  return ISOWeekYearParser;\n}(Parser);","import _classCallCheck from \"@babel/runtime/helpers/esm/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/esm/createClass\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/esm/assertThisInitialized\";\nimport _inherits from \"@babel/runtime/helpers/esm/inherits\";\nimport _createSuper from \"@babel/runtime/helpers/esm/createSuper\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport { Parser } from \"../Parser.js\";\nimport { parseNDigitsSigned } from \"../utils.js\";\nexport var ExtendedYearParser = /*#__PURE__*/function (_Parser) {\n  _inherits(ExtendedYearParser, _Parser);\n  var _super = _createSuper(ExtendedYearParser);\n  function ExtendedYearParser() {\n    var _this;\n    _classCallCheck(this, ExtendedYearParser);\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n    _this = _super.call.apply(_super, [this].concat(args));\n    _defineProperty(_assertThisInitialized(_this), \"priority\", 130);\n    _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['G', 'y', 'Y', 'R', 'w', 'I', 'i', 'e', 'c', 't', 'T']);\n    return _this;\n  }\n  _createClass(ExtendedYearParser, [{\n    key: \"parse\",\n    value: function parse(dateString, token) {\n      if (token === 'u') {\n        return parseNDigitsSigned(4, dateString);\n      }\n      return parseNDigitsSigned(token.length, dateString);\n    }\n  }, {\n    key: \"set\",\n    value: function set(date, _flags, value) {\n      date.setUTCFullYear(value, 0, 1);\n      date.setUTCHours(0, 0, 0, 0);\n      return date;\n    }\n  }]);\n  return ExtendedYearParser;\n}(Parser);","import _classCallCheck from \"@babel/runtime/helpers/esm/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/esm/createClass\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/esm/assertThisInitialized\";\nimport _inherits from \"@babel/runtime/helpers/esm/inherits\";\nimport _createSuper from \"@babel/runtime/helpers/esm/createSuper\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport { Parser } from \"../Parser.js\";\nimport { parseNDigits } from \"../utils.js\";\nexport var QuarterParser = /*#__PURE__*/function (_Parser) {\n  _inherits(QuarterParser, _Parser);\n  var _super = _createSuper(QuarterParser);\n  function QuarterParser() {\n    var _this;\n    _classCallCheck(this, QuarterParser);\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n    _this = _super.call.apply(_super, [this].concat(args));\n    _defineProperty(_assertThisInitialized(_this), \"priority\", 120);\n    _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['Y', 'R', 'q', 'M', 'L', 'w', 'I', 'd', 'D', 'i', 'e', 'c', 't', 'T']);\n    return _this;\n  }\n  _createClass(QuarterParser, [{\n    key: \"parse\",\n    value: function parse(dateString, token, match) {\n      switch (token) {\n        // 1, 2, 3, 4\n        case 'Q':\n        case 'QQ':\n          // 01, 02, 03, 04\n          return parseNDigits(token.length, dateString);\n        // 1st, 2nd, 3rd, 4th\n        case 'Qo':\n          return match.ordinalNumber(dateString, {\n            unit: 'quarter'\n          });\n        // Q1, Q2, Q3, Q4\n        case 'QQQ':\n          return match.quarter(dateString, {\n            width: 'abbreviated',\n            context: 'formatting'\n          }) || match.quarter(dateString, {\n            width: 'narrow',\n            context: 'formatting'\n          });\n        // 1, 2, 3, 4 (narrow quarter; could be not numerical)\n        case 'QQQQQ':\n          return match.quarter(dateString, {\n            width: 'narrow',\n            context: 'formatting'\n          });\n        // 1st quarter, 2nd quarter, ...\n        case 'QQQQ':\n        default:\n          return match.quarter(dateString, {\n            width: 'wide',\n            context: 'formatting'\n          }) || match.quarter(dateString, {\n            width: 'abbreviated',\n            context: 'formatting'\n          }) || match.quarter(dateString, {\n            width: 'narrow',\n            context: 'formatting'\n          });\n      }\n    }\n  }, {\n    key: \"validate\",\n    value: function validate(_date, value) {\n      return value >= 1 && value <= 4;\n    }\n  }, {\n    key: \"set\",\n    value: function set(date, _flags, value) {\n      date.setUTCMonth((value - 1) * 3, 1);\n      date.setUTCHours(0, 0, 0, 0);\n      return date;\n    }\n  }]);\n  return QuarterParser;\n}(Parser);","import _classCallCheck from \"@babel/runtime/helpers/esm/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/esm/createClass\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/esm/assertThisInitialized\";\nimport _inherits from \"@babel/runtime/helpers/esm/inherits\";\nimport _createSuper from \"@babel/runtime/helpers/esm/createSuper\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport { Parser } from \"../Parser.js\";\nimport { parseNDigits } from \"../utils.js\";\nexport var StandAloneQuarterParser = /*#__PURE__*/function (_Parser) {\n  _inherits(StandAloneQuarterParser, _Parser);\n  var _super = _createSuper(StandAloneQuarterParser);\n  function StandAloneQuarterParser() {\n    var _this;\n    _classCallCheck(this, StandAloneQuarterParser);\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n    _this = _super.call.apply(_super, [this].concat(args));\n    _defineProperty(_assertThisInitialized(_this), \"priority\", 120);\n    _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['Y', 'R', 'Q', 'M', 'L', 'w', 'I', 'd', 'D', 'i', 'e', 'c', 't', 'T']);\n    return _this;\n  }\n  _createClass(StandAloneQuarterParser, [{\n    key: \"parse\",\n    value: function parse(dateString, token, match) {\n      switch (token) {\n        // 1, 2, 3, 4\n        case 'q':\n        case 'qq':\n          // 01, 02, 03, 04\n          return parseNDigits(token.length, dateString);\n        // 1st, 2nd, 3rd, 4th\n        case 'qo':\n          return match.ordinalNumber(dateString, {\n            unit: 'quarter'\n          });\n        // Q1, Q2, Q3, Q4\n        case 'qqq':\n          return match.quarter(dateString, {\n            width: 'abbreviated',\n            context: 'standalone'\n          }) || match.quarter(dateString, {\n            width: 'narrow',\n            context: 'standalone'\n          });\n        // 1, 2, 3, 4 (narrow quarter; could be not numerical)\n        case 'qqqqq':\n          return match.quarter(dateString, {\n            width: 'narrow',\n            context: 'standalone'\n          });\n        // 1st quarter, 2nd quarter, ...\n        case 'qqqq':\n        default:\n          return match.quarter(dateString, {\n            width: 'wide',\n            context: 'standalone'\n          }) || match.quarter(dateString, {\n            width: 'abbreviated',\n            context: 'standalone'\n          }) || match.quarter(dateString, {\n            width: 'narrow',\n            context: 'standalone'\n          });\n      }\n    }\n  }, {\n    key: \"validate\",\n    value: function validate(_date, value) {\n      return value >= 1 && value <= 4;\n    }\n  }, {\n    key: \"set\",\n    value: function set(date, _flags, value) {\n      date.setUTCMonth((value - 1) * 3, 1);\n      date.setUTCHours(0, 0, 0, 0);\n      return date;\n    }\n  }]);\n  return StandAloneQuarterParser;\n}(Parser);","import _classCallCheck from \"@babel/runtime/helpers/esm/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/esm/createClass\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/esm/assertThisInitialized\";\nimport _inherits from \"@babel/runtime/helpers/esm/inherits\";\nimport _createSuper from \"@babel/runtime/helpers/esm/createSuper\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport { mapValue, parseNDigits, parseNumericPattern } from \"../utils.js\";\nimport { Parser } from \"../Parser.js\";\nimport { numericPatterns } from \"../constants.js\";\nexport var MonthParser = /*#__PURE__*/function (_Parser) {\n  _inherits(MonthParser, _Parser);\n  var _super = _createSuper(MonthParser);\n  function MonthParser() {\n    var _this;\n    _classCallCheck(this, MonthParser);\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n    _this = _super.call.apply(_super, [this].concat(args));\n    _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['Y', 'R', 'q', 'Q', 'L', 'w', 'I', 'D', 'i', 'e', 'c', 't', 'T']);\n    _defineProperty(_assertThisInitialized(_this), \"priority\", 110);\n    return _this;\n  }\n  _createClass(MonthParser, [{\n    key: \"parse\",\n    value: function parse(dateString, token, match) {\n      var valueCallback = function valueCallback(value) {\n        return value - 1;\n      };\n      switch (token) {\n        // 1, 2, ..., 12\n        case 'M':\n          return mapValue(parseNumericPattern(numericPatterns.month, dateString), valueCallback);\n        // 01, 02, ..., 12\n        case 'MM':\n          return mapValue(parseNDigits(2, dateString), valueCallback);\n        // 1st, 2nd, ..., 12th\n        case 'Mo':\n          return mapValue(match.ordinalNumber(dateString, {\n            unit: 'month'\n          }), valueCallback);\n        // Jan, Feb, ..., Dec\n        case 'MMM':\n          return match.month(dateString, {\n            width: 'abbreviated',\n            context: 'formatting'\n          }) || match.month(dateString, {\n            width: 'narrow',\n            context: 'formatting'\n          });\n        // J, F, ..., D\n        case 'MMMMM':\n          return match.month(dateString, {\n            width: 'narrow',\n            context: 'formatting'\n          });\n        // January, February, ..., December\n        case 'MMMM':\n        default:\n          return match.month(dateString, {\n            width: 'wide',\n            context: 'formatting'\n          }) || match.month(dateString, {\n            width: 'abbreviated',\n            context: 'formatting'\n          }) || match.month(dateString, {\n            width: 'narrow',\n            context: 'formatting'\n          });\n      }\n    }\n  }, {\n    key: \"validate\",\n    value: function validate(_date, value) {\n      return value >= 0 && value <= 11;\n    }\n  }, {\n    key: \"set\",\n    value: function set(date, _flags, value) {\n      date.setUTCMonth(value, 1);\n      date.setUTCHours(0, 0, 0, 0);\n      return date;\n    }\n  }]);\n  return MonthParser;\n}(Parser);","import _classCallCheck from \"@babel/runtime/helpers/esm/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/esm/createClass\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/esm/assertThisInitialized\";\nimport _inherits from \"@babel/runtime/helpers/esm/inherits\";\nimport _createSuper from \"@babel/runtime/helpers/esm/createSuper\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport { Parser } from \"../Parser.js\";\nimport { numericPatterns } from \"../constants.js\";\nimport { parseNumericPattern, parseNDigits, mapValue } from \"../utils.js\";\nexport var StandAloneMonthParser = /*#__PURE__*/function (_Parser) {\n  _inherits(StandAloneMonthParser, _Parser);\n  var _super = _createSuper(StandAloneMonthParser);\n  function StandAloneMonthParser() {\n    var _this;\n    _classCallCheck(this, StandAloneMonthParser);\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n    _this = _super.call.apply(_super, [this].concat(args));\n    _defineProperty(_assertThisInitialized(_this), \"priority\", 110);\n    _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['Y', 'R', 'q', 'Q', 'M', 'w', 'I', 'D', 'i', 'e', 'c', 't', 'T']);\n    return _this;\n  }\n  _createClass(StandAloneMonthParser, [{\n    key: \"parse\",\n    value: function parse(dateString, token, match) {\n      var valueCallback = function valueCallback(value) {\n        return value - 1;\n      };\n      switch (token) {\n        // 1, 2, ..., 12\n        case 'L':\n          return mapValue(parseNumericPattern(numericPatterns.month, dateString), valueCallback);\n        // 01, 02, ..., 12\n        case 'LL':\n          return mapValue(parseNDigits(2, dateString), valueCallback);\n        // 1st, 2nd, ..., 12th\n        case 'Lo':\n          return mapValue(match.ordinalNumber(dateString, {\n            unit: 'month'\n          }), valueCallback);\n        // Jan, Feb, ..., Dec\n        case 'LLL':\n          return match.month(dateString, {\n            width: 'abbreviated',\n            context: 'standalone'\n          }) || match.month(dateString, {\n            width: 'narrow',\n            context: 'standalone'\n          });\n        // J, F, ..., D\n        case 'LLLLL':\n          return match.month(dateString, {\n            width: 'narrow',\n            context: 'standalone'\n          });\n        // January, February, ..., December\n        case 'LLLL':\n        default:\n          return match.month(dateString, {\n            width: 'wide',\n            context: 'standalone'\n          }) || match.month(dateString, {\n            width: 'abbreviated',\n            context: 'standalone'\n          }) || match.month(dateString, {\n            width: 'narrow',\n            context: 'standalone'\n          });\n      }\n    }\n  }, {\n    key: \"validate\",\n    value: function validate(_date, value) {\n      return value >= 0 && value <= 11;\n    }\n  }, {\n    key: \"set\",\n    value: function set(date, _flags, value) {\n      date.setUTCMonth(value, 1);\n      date.setUTCHours(0, 0, 0, 0);\n      return date;\n    }\n  }]);\n  return StandAloneMonthParser;\n}(Parser);","import _classCallCheck from \"@babel/runtime/helpers/esm/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/esm/createClass\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/esm/assertThisInitialized\";\nimport _inherits from \"@babel/runtime/helpers/esm/inherits\";\nimport _createSuper from \"@babel/runtime/helpers/esm/createSuper\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport { Parser } from \"../Parser.js\";\nimport { numericPatterns } from \"../constants.js\";\nimport { parseNumericPattern, parseNDigits } from \"../utils.js\";\nimport setUTCWeek from \"../../../_lib/setUTCWeek/index.js\";\nimport startOfUTCWeek from \"../../../_lib/startOfUTCWeek/index.js\"; // Local week of year\nexport var LocalWeekParser = /*#__PURE__*/function (_Parser) {\n  _inherits(LocalWeekParser, _Parser);\n  var _super = _createSuper(LocalWeekParser);\n  function LocalWeekParser() {\n    var _this;\n    _classCallCheck(this, LocalWeekParser);\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n    _this = _super.call.apply(_super, [this].concat(args));\n    _defineProperty(_assertThisInitialized(_this), \"priority\", 100);\n    _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['y', 'R', 'u', 'q', 'Q', 'M', 'L', 'I', 'd', 'D', 'i', 't', 'T']);\n    return _this;\n  }\n  _createClass(LocalWeekParser, [{\n    key: \"parse\",\n    value: function parse(dateString, token, match) {\n      switch (token) {\n        case 'w':\n          return parseNumericPattern(numericPatterns.week, dateString);\n        case 'wo':\n          return match.ordinalNumber(dateString, {\n            unit: 'week'\n          });\n        default:\n          return parseNDigits(token.length, dateString);\n      }\n    }\n  }, {\n    key: \"validate\",\n    value: function validate(_date, value) {\n      return value >= 1 && value <= 53;\n    }\n  }, {\n    key: \"set\",\n    value: function set(date, _flags, value, options) {\n      return startOfUTCWeek(setUTCWeek(date, value, options), options);\n    }\n  }]);\n  return LocalWeekParser;\n}(Parser);","import _classCallCheck from \"@babel/runtime/helpers/esm/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/esm/createClass\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/esm/assertThisInitialized\";\nimport _inherits from \"@babel/runtime/helpers/esm/inherits\";\nimport _createSuper from \"@babel/runtime/helpers/esm/createSuper\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport { Parser } from \"../Parser.js\";\nimport { numericPatterns } from \"../constants.js\";\nimport { parseNumericPattern, parseNDigits } from \"../utils.js\";\nimport setUTCISOWeek from \"../../../_lib/setUTCISOWeek/index.js\";\nimport startOfUTCISOWeek from \"../../../_lib/startOfUTCISOWeek/index.js\"; // ISO week of year\nexport var ISOWeekParser = /*#__PURE__*/function (_Parser) {\n  _inherits(ISOWeekParser, _Parser);\n  var _super = _createSuper(ISOWeekParser);\n  function ISOWeekParser() {\n    var _this;\n    _classCallCheck(this, ISOWeekParser);\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n    _this = _super.call.apply(_super, [this].concat(args));\n    _defineProperty(_assertThisInitialized(_this), \"priority\", 100);\n    _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['y', 'Y', 'u', 'q', 'Q', 'M', 'L', 'w', 'd', 'D', 'e', 'c', 't', 'T']);\n    return _this;\n  }\n  _createClass(ISOWeekParser, [{\n    key: \"parse\",\n    value: function parse(dateString, token, match) {\n      switch (token) {\n        case 'I':\n          return parseNumericPattern(numericPatterns.week, dateString);\n        case 'Io':\n          return match.ordinalNumber(dateString, {\n            unit: 'week'\n          });\n        default:\n          return parseNDigits(token.length, dateString);\n      }\n    }\n  }, {\n    key: \"validate\",\n    value: function validate(_date, value) {\n      return value >= 1 && value <= 53;\n    }\n  }, {\n    key: \"set\",\n    value: function set(date, _flags, value) {\n      return startOfUTCISOWeek(setUTCISOWeek(date, value));\n    }\n  }]);\n  return ISOWeekParser;\n}(Parser);","import _classCallCheck from \"@babel/runtime/helpers/esm/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/esm/createClass\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/esm/assertThisInitialized\";\nimport _inherits from \"@babel/runtime/helpers/esm/inherits\";\nimport _createSuper from \"@babel/runtime/helpers/esm/createSuper\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport { isLeapYearIndex, parseNDigits, parseNumericPattern } from \"../utils.js\";\nimport { Parser } from \"../Parser.js\";\nimport { numericPatterns } from \"../constants.js\";\nvar DAYS_IN_MONTH = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];\nvar DAYS_IN_MONTH_LEAP_YEAR = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];\n\n// Day of the month\nexport var DateParser = /*#__PURE__*/function (_Parser) {\n  _inherits(DateParser, _Parser);\n  var _super = _createSuper(DateParser);\n  function DateParser() {\n    var _this;\n    _classCallCheck(this, DateParser);\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n    _this = _super.call.apply(_super, [this].concat(args));\n    _defineProperty(_assertThisInitialized(_this), \"priority\", 90);\n    _defineProperty(_assertThisInitialized(_this), \"subPriority\", 1);\n    _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['Y', 'R', 'q', 'Q', 'w', 'I', 'D', 'i', 'e', 'c', 't', 'T']);\n    return _this;\n  }\n  _createClass(DateParser, [{\n    key: \"parse\",\n    value: function parse(dateString, token, match) {\n      switch (token) {\n        case 'd':\n          return parseNumericPattern(numericPatterns.date, dateString);\n        case 'do':\n          return match.ordinalNumber(dateString, {\n            unit: 'date'\n          });\n        default:\n          return parseNDigits(token.length, dateString);\n      }\n    }\n  }, {\n    key: \"validate\",\n    value: function validate(date, value) {\n      var year = date.getUTCFullYear();\n      var isLeapYear = isLeapYearIndex(year);\n      var month = date.getUTCMonth();\n      if (isLeapYear) {\n        return value >= 1 && value <= DAYS_IN_MONTH_LEAP_YEAR[month];\n      } else {\n        return value >= 1 && value <= DAYS_IN_MONTH[month];\n      }\n    }\n  }, {\n    key: \"set\",\n    value: function set(date, _flags, value) {\n      date.setUTCDate(value);\n      date.setUTCHours(0, 0, 0, 0);\n      return date;\n    }\n  }]);\n  return DateParser;\n}(Parser);","import _classCallCheck from \"@babel/runtime/helpers/esm/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/esm/createClass\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/esm/assertThisInitialized\";\nimport _inherits from \"@babel/runtime/helpers/esm/inherits\";\nimport _createSuper from \"@babel/runtime/helpers/esm/createSuper\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport { Parser } from \"../Parser.js\";\nimport { numericPatterns } from \"../constants.js\";\nimport { parseNumericPattern, parseNDigits, isLeapYearIndex } from \"../utils.js\";\nexport var DayOfYearParser = /*#__PURE__*/function (_Parser) {\n  _inherits(DayOfYearParser, _Parser);\n  var _super = _createSuper(DayOfYearParser);\n  function DayOfYearParser() {\n    var _this;\n    _classCallCheck(this, DayOfYearParser);\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n    _this = _super.call.apply(_super, [this].concat(args));\n    _defineProperty(_assertThisInitialized(_this), \"priority\", 90);\n    _defineProperty(_assertThisInitialized(_this), \"subpriority\", 1);\n    _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['Y', 'R', 'q', 'Q', 'M', 'L', 'w', 'I', 'd', 'E', 'i', 'e', 'c', 't', 'T']);\n    return _this;\n  }\n  _createClass(DayOfYearParser, [{\n    key: \"parse\",\n    value: function parse(dateString, token, match) {\n      switch (token) {\n        case 'D':\n        case 'DD':\n          return parseNumericPattern(numericPatterns.dayOfYear, dateString);\n        case 'Do':\n          return match.ordinalNumber(dateString, {\n            unit: 'date'\n          });\n        default:\n          return parseNDigits(token.length, dateString);\n      }\n    }\n  }, {\n    key: \"validate\",\n    value: function validate(date, value) {\n      var year = date.getUTCFullYear();\n      var isLeapYear = isLeapYearIndex(year);\n      if (isLeapYear) {\n        return value >= 1 && value <= 366;\n      } else {\n        return value >= 1 && value <= 365;\n      }\n    }\n  }, {\n    key: \"set\",\n    value: function set(date, _flags, value) {\n      date.setUTCMonth(0, value);\n      date.setUTCHours(0, 0, 0, 0);\n      return date;\n    }\n  }]);\n  return DayOfYearParser;\n}(Parser);","import _classCallCheck from \"@babel/runtime/helpers/esm/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/esm/createClass\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/esm/assertThisInitialized\";\nimport _inherits from \"@babel/runtime/helpers/esm/inherits\";\nimport _createSuper from \"@babel/runtime/helpers/esm/createSuper\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport { Parser } from \"../Parser.js\";\nimport setUTCDay from \"../../../_lib/setUTCDay/index.js\"; // Day of week\nexport var DayParser = /*#__PURE__*/function (_Parser) {\n  _inherits(DayParser, _Parser);\n  var _super = _createSuper(DayParser);\n  function DayParser() {\n    var _this;\n    _classCallCheck(this, DayParser);\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n    _this = _super.call.apply(_super, [this].concat(args));\n    _defineProperty(_assertThisInitialized(_this), \"priority\", 90);\n    _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['D', 'i', 'e', 'c', 't', 'T']);\n    return _this;\n  }\n  _createClass(DayParser, [{\n    key: \"parse\",\n    value: function parse(dateString, token, match) {\n      switch (token) {\n        // Tue\n        case 'E':\n        case 'EE':\n        case 'EEE':\n          return match.day(dateString, {\n            width: 'abbreviated',\n            context: 'formatting'\n          }) || match.day(dateString, {\n            width: 'short',\n            context: 'formatting'\n          }) || match.day(dateString, {\n            width: 'narrow',\n            context: 'formatting'\n          });\n        // T\n        case 'EEEEE':\n          return match.day(dateString, {\n            width: 'narrow',\n            context: 'formatting'\n          });\n        // Tu\n        case 'EEEEEE':\n          return match.day(dateString, {\n            width: 'short',\n            context: 'formatting'\n          }) || match.day(dateString, {\n            width: 'narrow',\n            context: 'formatting'\n          });\n        // Tuesday\n        case 'EEEE':\n        default:\n          return match.day(dateString, {\n            width: 'wide',\n            context: 'formatting'\n          }) || match.day(dateString, {\n            width: 'abbreviated',\n            context: 'formatting'\n          }) || match.day(dateString, {\n            width: 'short',\n            context: 'formatting'\n          }) || match.day(dateString, {\n            width: 'narrow',\n            context: 'formatting'\n          });\n      }\n    }\n  }, {\n    key: \"validate\",\n    value: function validate(_date, value) {\n      return value >= 0 && value <= 6;\n    }\n  }, {\n    key: \"set\",\n    value: function set(date, _flags, value, options) {\n      date = setUTCDay(date, value, options);\n      date.setUTCHours(0, 0, 0, 0);\n      return date;\n    }\n  }]);\n  return DayParser;\n}(Parser);","import _classCallCheck from \"@babel/runtime/helpers/esm/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/esm/createClass\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/esm/assertThisInitialized\";\nimport _inherits from \"@babel/runtime/helpers/esm/inherits\";\nimport _createSuper from \"@babel/runtime/helpers/esm/createSuper\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport { Parser } from \"../Parser.js\";\nimport { mapValue, parseNDigits } from \"../utils.js\";\nimport setUTCDay from \"../../../_lib/setUTCDay/index.js\"; // Local day of week\nexport var LocalDayParser = /*#__PURE__*/function (_Parser) {\n  _inherits(LocalDayParser, _Parser);\n  var _super = _createSuper(LocalDayParser);\n  function LocalDayParser() {\n    var _this;\n    _classCallCheck(this, LocalDayParser);\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n    _this = _super.call.apply(_super, [this].concat(args));\n    _defineProperty(_assertThisInitialized(_this), \"priority\", 90);\n    _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['y', 'R', 'u', 'q', 'Q', 'M', 'L', 'I', 'd', 'D', 'E', 'i', 'c', 't', 'T']);\n    return _this;\n  }\n  _createClass(LocalDayParser, [{\n    key: \"parse\",\n    value: function parse(dateString, token, match, options) {\n      var valueCallback = function valueCallback(value) {\n        var wholeWeekDays = Math.floor((value - 1) / 7) * 7;\n        return (value + options.weekStartsOn + 6) % 7 + wholeWeekDays;\n      };\n      switch (token) {\n        // 3\n        case 'e':\n        case 'ee':\n          // 03\n          return mapValue(parseNDigits(token.length, dateString), valueCallback);\n        // 3rd\n        case 'eo':\n          return mapValue(match.ordinalNumber(dateString, {\n            unit: 'day'\n          }), valueCallback);\n        // Tue\n        case 'eee':\n          return match.day(dateString, {\n            width: 'abbreviated',\n            context: 'formatting'\n          }) || match.day(dateString, {\n            width: 'short',\n            context: 'formatting'\n          }) || match.day(dateString, {\n            width: 'narrow',\n            context: 'formatting'\n          });\n        // T\n        case 'eeeee':\n          return match.day(dateString, {\n            width: 'narrow',\n            context: 'formatting'\n          });\n        // Tu\n        case 'eeeeee':\n          return match.day(dateString, {\n            width: 'short',\n            context: 'formatting'\n          }) || match.day(dateString, {\n            width: 'narrow',\n            context: 'formatting'\n          });\n        // Tuesday\n        case 'eeee':\n        default:\n          return match.day(dateString, {\n            width: 'wide',\n            context: 'formatting'\n          }) || match.day(dateString, {\n            width: 'abbreviated',\n            context: 'formatting'\n          }) || match.day(dateString, {\n            width: 'short',\n            context: 'formatting'\n          }) || match.day(dateString, {\n            width: 'narrow',\n            context: 'formatting'\n          });\n      }\n    }\n  }, {\n    key: \"validate\",\n    value: function validate(_date, value) {\n      return value >= 0 && value <= 6;\n    }\n  }, {\n    key: \"set\",\n    value: function set(date, _flags, value, options) {\n      date = setUTCDay(date, value, options);\n      date.setUTCHours(0, 0, 0, 0);\n      return date;\n    }\n  }]);\n  return LocalDayParser;\n}(Parser);","import _classCallCheck from \"@babel/runtime/helpers/esm/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/esm/createClass\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/esm/assertThisInitialized\";\nimport _inherits from \"@babel/runtime/helpers/esm/inherits\";\nimport _createSuper from \"@babel/runtime/helpers/esm/createSuper\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport { Parser } from \"../Parser.js\";\nimport { mapValue, parseNDigits } from \"../utils.js\";\nimport setUTCDay from \"../../../_lib/setUTCDay/index.js\"; // Stand-alone local day of week\nexport var StandAloneLocalDayParser = /*#__PURE__*/function (_Parser) {\n  _inherits(StandAloneLocalDayParser, _Parser);\n  var _super = _createSuper(StandAloneLocalDayParser);\n  function StandAloneLocalDayParser() {\n    var _this;\n    _classCallCheck(this, StandAloneLocalDayParser);\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n    _this = _super.call.apply(_super, [this].concat(args));\n    _defineProperty(_assertThisInitialized(_this), \"priority\", 90);\n    _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['y', 'R', 'u', 'q', 'Q', 'M', 'L', 'I', 'd', 'D', 'E', 'i', 'e', 't', 'T']);\n    return _this;\n  }\n  _createClass(StandAloneLocalDayParser, [{\n    key: \"parse\",\n    value: function parse(dateString, token, match, options) {\n      var valueCallback = function valueCallback(value) {\n        var wholeWeekDays = Math.floor((value - 1) / 7) * 7;\n        return (value + options.weekStartsOn + 6) % 7 + wholeWeekDays;\n      };\n      switch (token) {\n        // 3\n        case 'c':\n        case 'cc':\n          // 03\n          return mapValue(parseNDigits(token.length, dateString), valueCallback);\n        // 3rd\n        case 'co':\n          return mapValue(match.ordinalNumber(dateString, {\n            unit: 'day'\n          }), valueCallback);\n        // Tue\n        case 'ccc':\n          return match.day(dateString, {\n            width: 'abbreviated',\n            context: 'standalone'\n          }) || match.day(dateString, {\n            width: 'short',\n            context: 'standalone'\n          }) || match.day(dateString, {\n            width: 'narrow',\n            context: 'standalone'\n          });\n        // T\n        case 'ccccc':\n          return match.day(dateString, {\n            width: 'narrow',\n            context: 'standalone'\n          });\n        // Tu\n        case 'cccccc':\n          return match.day(dateString, {\n            width: 'short',\n            context: 'standalone'\n          }) || match.day(dateString, {\n            width: 'narrow',\n            context: 'standalone'\n          });\n        // Tuesday\n        case 'cccc':\n        default:\n          return match.day(dateString, {\n            width: 'wide',\n            context: 'standalone'\n          }) || match.day(dateString, {\n            width: 'abbreviated',\n            context: 'standalone'\n          }) || match.day(dateString, {\n            width: 'short',\n            context: 'standalone'\n          }) || match.day(dateString, {\n            width: 'narrow',\n            context: 'standalone'\n          });\n      }\n    }\n  }, {\n    key: \"validate\",\n    value: function validate(_date, value) {\n      return value >= 0 && value <= 6;\n    }\n  }, {\n    key: \"set\",\n    value: function set(date, _flags, value, options) {\n      date = setUTCDay(date, value, options);\n      date.setUTCHours(0, 0, 0, 0);\n      return date;\n    }\n  }]);\n  return StandAloneLocalDayParser;\n}(Parser);","import _classCallCheck from \"@babel/runtime/helpers/esm/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/esm/createClass\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/esm/assertThisInitialized\";\nimport _inherits from \"@babel/runtime/helpers/esm/inherits\";\nimport _createSuper from \"@babel/runtime/helpers/esm/createSuper\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport { Parser } from \"../Parser.js\";\nimport { mapValue, parseNDigits } from \"../utils.js\";\nimport setUTCISODay from \"../../../_lib/setUTCISODay/index.js\"; // ISO day of week\nexport var ISODayParser = /*#__PURE__*/function (_Parser) {\n  _inherits(ISODayParser, _Parser);\n  var _super = _createSuper(ISODayParser);\n  function ISODayParser() {\n    var _this;\n    _classCallCheck(this, ISODayParser);\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n    _this = _super.call.apply(_super, [this].concat(args));\n    _defineProperty(_assertThisInitialized(_this), \"priority\", 90);\n    _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['y', 'Y', 'u', 'q', 'Q', 'M', 'L', 'w', 'd', 'D', 'E', 'e', 'c', 't', 'T']);\n    return _this;\n  }\n  _createClass(ISODayParser, [{\n    key: \"parse\",\n    value: function parse(dateString, token, match) {\n      var valueCallback = function valueCallback(value) {\n        if (value === 0) {\n          return 7;\n        }\n        return value;\n      };\n      switch (token) {\n        // 2\n        case 'i':\n        case 'ii':\n          // 02\n          return parseNDigits(token.length, dateString);\n        // 2nd\n        case 'io':\n          return match.ordinalNumber(dateString, {\n            unit: 'day'\n          });\n        // Tue\n        case 'iii':\n          return mapValue(match.day(dateString, {\n            width: 'abbreviated',\n            context: 'formatting'\n          }) || match.day(dateString, {\n            width: 'short',\n            context: 'formatting'\n          }) || match.day(dateString, {\n            width: 'narrow',\n            context: 'formatting'\n          }), valueCallback);\n        // T\n        case 'iiiii':\n          return mapValue(match.day(dateString, {\n            width: 'narrow',\n            context: 'formatting'\n          }), valueCallback);\n        // Tu\n        case 'iiiiii':\n          return mapValue(match.day(dateString, {\n            width: 'short',\n            context: 'formatting'\n          }) || match.day(dateString, {\n            width: 'narrow',\n            context: 'formatting'\n          }), valueCallback);\n        // Tuesday\n        case 'iiii':\n        default:\n          return mapValue(match.day(dateString, {\n            width: 'wide',\n            context: 'formatting'\n          }) || match.day(dateString, {\n            width: 'abbreviated',\n            context: 'formatting'\n          }) || match.day(dateString, {\n            width: 'short',\n            context: 'formatting'\n          }) || match.day(dateString, {\n            width: 'narrow',\n            context: 'formatting'\n          }), valueCallback);\n      }\n    }\n  }, {\n    key: \"validate\",\n    value: function validate(_date, value) {\n      return value >= 1 && value <= 7;\n    }\n  }, {\n    key: \"set\",\n    value: function set(date, _flags, value) {\n      date = setUTCISODay(date, value);\n      date.setUTCHours(0, 0, 0, 0);\n      return date;\n    }\n  }]);\n  return ISODayParser;\n}(Parser);","import _classCallCheck from \"@babel/runtime/helpers/esm/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/esm/createClass\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/esm/assertThisInitialized\";\nimport _inherits from \"@babel/runtime/helpers/esm/inherits\";\nimport _createSuper from \"@babel/runtime/helpers/esm/createSuper\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport { Parser } from \"../Parser.js\";\nimport { dayPeriodEnumToHours } from \"../utils.js\";\nexport var AMPMParser = /*#__PURE__*/function (_Parser) {\n  _inherits(AMPMParser, _Parser);\n  var _super = _createSuper(AMPMParser);\n  function AMPMParser() {\n    var _this;\n    _classCallCheck(this, AMPMParser);\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n    _this = _super.call.apply(_super, [this].concat(args));\n    _defineProperty(_assertThisInitialized(_this), \"priority\", 80);\n    _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['b', 'B', 'H', 'k', 't', 'T']);\n    return _this;\n  }\n  _createClass(AMPMParser, [{\n    key: \"parse\",\n    value: function parse(dateString, token, match) {\n      switch (token) {\n        case 'a':\n        case 'aa':\n        case 'aaa':\n          return match.dayPeriod(dateString, {\n            width: 'abbreviated',\n            context: 'formatting'\n          }) || match.dayPeriod(dateString, {\n            width: 'narrow',\n            context: 'formatting'\n          });\n        case 'aaaaa':\n          return match.dayPeriod(dateString, {\n            width: 'narrow',\n            context: 'formatting'\n          });\n        case 'aaaa':\n        default:\n          return match.dayPeriod(dateString, {\n            width: 'wide',\n            context: 'formatting'\n          }) || match.dayPeriod(dateString, {\n            width: 'abbreviated',\n            context: 'formatting'\n          }) || match.dayPeriod(dateString, {\n            width: 'narrow',\n            context: 'formatting'\n          });\n      }\n    }\n  }, {\n    key: \"set\",\n    value: function set(date, _flags, value) {\n      date.setUTCHours(dayPeriodEnumToHours(value), 0, 0, 0);\n      return date;\n    }\n  }]);\n  return AMPMParser;\n}(Parser);","import _classCallCheck from \"@babel/runtime/helpers/esm/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/esm/createClass\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/esm/assertThisInitialized\";\nimport _inherits from \"@babel/runtime/helpers/esm/inherits\";\nimport _createSuper from \"@babel/runtime/helpers/esm/createSuper\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport { Parser } from \"../Parser.js\";\nimport { dayPeriodEnumToHours } from \"../utils.js\";\nexport var AMPMMidnightParser = /*#__PURE__*/function (_Parser) {\n  _inherits(AMPMMidnightParser, _Parser);\n  var _super = _createSuper(AMPMMidnightParser);\n  function AMPMMidnightParser() {\n    var _this;\n    _classCallCheck(this, AMPMMidnightParser);\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n    _this = _super.call.apply(_super, [this].concat(args));\n    _defineProperty(_assertThisInitialized(_this), \"priority\", 80);\n    _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['a', 'B', 'H', 'k', 't', 'T']);\n    return _this;\n  }\n  _createClass(AMPMMidnightParser, [{\n    key: \"parse\",\n    value: function parse(dateString, token, match) {\n      switch (token) {\n        case 'b':\n        case 'bb':\n        case 'bbb':\n          return match.dayPeriod(dateString, {\n            width: 'abbreviated',\n            context: 'formatting'\n          }) || match.dayPeriod(dateString, {\n            width: 'narrow',\n            context: 'formatting'\n          });\n        case 'bbbbb':\n          return match.dayPeriod(dateString, {\n            width: 'narrow',\n            context: 'formatting'\n          });\n        case 'bbbb':\n        default:\n          return match.dayPeriod(dateString, {\n            width: 'wide',\n            context: 'formatting'\n          }) || match.dayPeriod(dateString, {\n            width: 'abbreviated',\n            context: 'formatting'\n          }) || match.dayPeriod(dateString, {\n            width: 'narrow',\n            context: 'formatting'\n          });\n      }\n    }\n  }, {\n    key: \"set\",\n    value: function set(date, _flags, value) {\n      date.setUTCHours(dayPeriodEnumToHours(value), 0, 0, 0);\n      return date;\n    }\n  }]);\n  return AMPMMidnightParser;\n}(Parser);","import _classCallCheck from \"@babel/runtime/helpers/esm/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/esm/createClass\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/esm/assertThisInitialized\";\nimport _inherits from \"@babel/runtime/helpers/esm/inherits\";\nimport _createSuper from \"@babel/runtime/helpers/esm/createSuper\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport { Parser } from \"../Parser.js\";\nimport { dayPeriodEnumToHours } from \"../utils.js\"; // in the morning, in the afternoon, in the evening, at night\nexport var DayPeriodParser = /*#__PURE__*/function (_Parser) {\n  _inherits(DayPeriodParser, _Parser);\n  var _super = _createSuper(DayPeriodParser);\n  function DayPeriodParser() {\n    var _this;\n    _classCallCheck(this, DayPeriodParser);\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n    _this = _super.call.apply(_super, [this].concat(args));\n    _defineProperty(_assertThisInitialized(_this), \"priority\", 80);\n    _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['a', 'b', 't', 'T']);\n    return _this;\n  }\n  _createClass(DayPeriodParser, [{\n    key: \"parse\",\n    value: function parse(dateString, token, match) {\n      switch (token) {\n        case 'B':\n        case 'BB':\n        case 'BBB':\n          return match.dayPeriod(dateString, {\n            width: 'abbreviated',\n            context: 'formatting'\n          }) || match.dayPeriod(dateString, {\n            width: 'narrow',\n            context: 'formatting'\n          });\n        case 'BBBBB':\n          return match.dayPeriod(dateString, {\n            width: 'narrow',\n            context: 'formatting'\n          });\n        case 'BBBB':\n        default:\n          return match.dayPeriod(dateString, {\n            width: 'wide',\n            context: 'formatting'\n          }) || match.dayPeriod(dateString, {\n            width: 'abbreviated',\n            context: 'formatting'\n          }) || match.dayPeriod(dateString, {\n            width: 'narrow',\n            context: 'formatting'\n          });\n      }\n    }\n  }, {\n    key: \"set\",\n    value: function set(date, _flags, value) {\n      date.setUTCHours(dayPeriodEnumToHours(value), 0, 0, 0);\n      return date;\n    }\n  }]);\n  return DayPeriodParser;\n}(Parser);","import _classCallCheck from \"@babel/runtime/helpers/esm/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/esm/createClass\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/esm/assertThisInitialized\";\nimport _inherits from \"@babel/runtime/helpers/esm/inherits\";\nimport _createSuper from \"@babel/runtime/helpers/esm/createSuper\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport { Parser } from \"../Parser.js\";\nimport { numericPatterns } from \"../constants.js\";\nimport { parseNumericPattern, parseNDigits } from \"../utils.js\";\nexport var Hour1to12Parser = /*#__PURE__*/function (_Parser) {\n  _inherits(Hour1to12Parser, _Parser);\n  var _super = _createSuper(Hour1to12Parser);\n  function Hour1to12Parser() {\n    var _this;\n    _classCallCheck(this, Hour1to12Parser);\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n    _this = _super.call.apply(_super, [this].concat(args));\n    _defineProperty(_assertThisInitialized(_this), \"priority\", 70);\n    _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['H', 'K', 'k', 't', 'T']);\n    return _this;\n  }\n  _createClass(Hour1to12Parser, [{\n    key: \"parse\",\n    value: function parse(dateString, token, match) {\n      switch (token) {\n        case 'h':\n          return parseNumericPattern(numericPatterns.hour12h, dateString);\n        case 'ho':\n          return match.ordinalNumber(dateString, {\n            unit: 'hour'\n          });\n        default:\n          return parseNDigits(token.length, dateString);\n      }\n    }\n  }, {\n    key: \"validate\",\n    value: function validate(_date, value) {\n      return value >= 1 && value <= 12;\n    }\n  }, {\n    key: \"set\",\n    value: function set(date, _flags, value) {\n      var isPM = date.getUTCHours() >= 12;\n      if (isPM && value < 12) {\n        date.setUTCHours(value + 12, 0, 0, 0);\n      } else if (!isPM && value === 12) {\n        date.setUTCHours(0, 0, 0, 0);\n      } else {\n        date.setUTCHours(value, 0, 0, 0);\n      }\n      return date;\n    }\n  }]);\n  return Hour1to12Parser;\n}(Parser);","import _classCallCheck from \"@babel/runtime/helpers/esm/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/esm/createClass\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/esm/assertThisInitialized\";\nimport _inherits from \"@babel/runtime/helpers/esm/inherits\";\nimport _createSuper from \"@babel/runtime/helpers/esm/createSuper\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport { Parser } from \"../Parser.js\";\nimport { numericPatterns } from \"../constants.js\";\nimport { parseNumericPattern, parseNDigits } from \"../utils.js\";\nexport var Hour0to23Parser = /*#__PURE__*/function (_Parser) {\n  _inherits(Hour0to23Parser, _Parser);\n  var _super = _createSuper(Hour0to23Parser);\n  function Hour0to23Parser() {\n    var _this;\n    _classCallCheck(this, Hour0to23Parser);\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n    _this = _super.call.apply(_super, [this].concat(args));\n    _defineProperty(_assertThisInitialized(_this), \"priority\", 70);\n    _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['a', 'b', 'h', 'K', 'k', 't', 'T']);\n    return _this;\n  }\n  _createClass(Hour0to23Parser, [{\n    key: \"parse\",\n    value: function parse(dateString, token, match) {\n      switch (token) {\n        case 'H':\n          return parseNumericPattern(numericPatterns.hour23h, dateString);\n        case 'Ho':\n          return match.ordinalNumber(dateString, {\n            unit: 'hour'\n          });\n        default:\n          return parseNDigits(token.length, dateString);\n      }\n    }\n  }, {\n    key: \"validate\",\n    value: function validate(_date, value) {\n      return value >= 0 && value <= 23;\n    }\n  }, {\n    key: \"set\",\n    value: function set(date, _flags, value) {\n      date.setUTCHours(value, 0, 0, 0);\n      return date;\n    }\n  }]);\n  return Hour0to23Parser;\n}(Parser);","import _classCallCheck from \"@babel/runtime/helpers/esm/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/esm/createClass\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/esm/assertThisInitialized\";\nimport _inherits from \"@babel/runtime/helpers/esm/inherits\";\nimport _createSuper from \"@babel/runtime/helpers/esm/createSuper\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport { Parser } from \"../Parser.js\";\nimport { numericPatterns } from \"../constants.js\";\nimport { parseNumericPattern, parseNDigits } from \"../utils.js\";\nexport var Hour0To11Parser = /*#__PURE__*/function (_Parser) {\n  _inherits(Hour0To11Parser, _Parser);\n  var _super = _createSuper(Hour0To11Parser);\n  function Hour0To11Parser() {\n    var _this;\n    _classCallCheck(this, Hour0To11Parser);\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n    _this = _super.call.apply(_super, [this].concat(args));\n    _defineProperty(_assertThisInitialized(_this), \"priority\", 70);\n    _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['h', 'H', 'k', 't', 'T']);\n    return _this;\n  }\n  _createClass(Hour0To11Parser, [{\n    key: \"parse\",\n    value: function parse(dateString, token, match) {\n      switch (token) {\n        case 'K':\n          return parseNumericPattern(numericPatterns.hour11h, dateString);\n        case 'Ko':\n          return match.ordinalNumber(dateString, {\n            unit: 'hour'\n          });\n        default:\n          return parseNDigits(token.length, dateString);\n      }\n    }\n  }, {\n    key: \"validate\",\n    value: function validate(_date, value) {\n      return value >= 0 && value <= 11;\n    }\n  }, {\n    key: \"set\",\n    value: function set(date, _flags, value) {\n      var isPM = date.getUTCHours() >= 12;\n      if (isPM && value < 12) {\n        date.setUTCHours(value + 12, 0, 0, 0);\n      } else {\n        date.setUTCHours(value, 0, 0, 0);\n      }\n      return date;\n    }\n  }]);\n  return Hour0To11Parser;\n}(Parser);","import _classCallCheck from \"@babel/runtime/helpers/esm/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/esm/createClass\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/esm/assertThisInitialized\";\nimport _inherits from \"@babel/runtime/helpers/esm/inherits\";\nimport _createSuper from \"@babel/runtime/helpers/esm/createSuper\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport { Parser } from \"../Parser.js\";\nimport { numericPatterns } from \"../constants.js\";\nimport { parseNumericPattern, parseNDigits } from \"../utils.js\";\nexport var Hour1To24Parser = /*#__PURE__*/function (_Parser) {\n  _inherits(Hour1To24Parser, _Parser);\n  var _super = _createSuper(Hour1To24Parser);\n  function Hour1To24Parser() {\n    var _this;\n    _classCallCheck(this, Hour1To24Parser);\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n    _this = _super.call.apply(_super, [this].concat(args));\n    _defineProperty(_assertThisInitialized(_this), \"priority\", 70);\n    _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['a', 'b', 'h', 'H', 'K', 't', 'T']);\n    return _this;\n  }\n  _createClass(Hour1To24Parser, [{\n    key: \"parse\",\n    value: function parse(dateString, token, match) {\n      switch (token) {\n        case 'k':\n          return parseNumericPattern(numericPatterns.hour24h, dateString);\n        case 'ko':\n          return match.ordinalNumber(dateString, {\n            unit: 'hour'\n          });\n        default:\n          return parseNDigits(token.length, dateString);\n      }\n    }\n  }, {\n    key: \"validate\",\n    value: function validate(_date, value) {\n      return value >= 1 && value <= 24;\n    }\n  }, {\n    key: \"set\",\n    value: function set(date, _flags, value) {\n      var hours = value <= 24 ? value % 24 : value;\n      date.setUTCHours(hours, 0, 0, 0);\n      return date;\n    }\n  }]);\n  return Hour1To24Parser;\n}(Parser);","import _classCallCheck from \"@babel/runtime/helpers/esm/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/esm/createClass\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/esm/assertThisInitialized\";\nimport _inherits from \"@babel/runtime/helpers/esm/inherits\";\nimport _createSuper from \"@babel/runtime/helpers/esm/createSuper\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport { Parser } from \"../Parser.js\";\nimport { numericPatterns } from \"../constants.js\";\nimport { parseNumericPattern, parseNDigits } from \"../utils.js\";\nexport var MinuteParser = /*#__PURE__*/function (_Parser) {\n  _inherits(MinuteParser, _Parser);\n  var _super = _createSuper(MinuteParser);\n  function MinuteParser() {\n    var _this;\n    _classCallCheck(this, MinuteParser);\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n    _this = _super.call.apply(_super, [this].concat(args));\n    _defineProperty(_assertThisInitialized(_this), \"priority\", 60);\n    _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['t', 'T']);\n    return _this;\n  }\n  _createClass(MinuteParser, [{\n    key: \"parse\",\n    value: function parse(dateString, token, match) {\n      switch (token) {\n        case 'm':\n          return parseNumericPattern(numericPatterns.minute, dateString);\n        case 'mo':\n          return match.ordinalNumber(dateString, {\n            unit: 'minute'\n          });\n        default:\n          return parseNDigits(token.length, dateString);\n      }\n    }\n  }, {\n    key: \"validate\",\n    value: function validate(_date, value) {\n      return value >= 0 && value <= 59;\n    }\n  }, {\n    key: \"set\",\n    value: function set(date, _flags, value) {\n      date.setUTCMinutes(value, 0, 0);\n      return date;\n    }\n  }]);\n  return MinuteParser;\n}(Parser);","import _classCallCheck from \"@babel/runtime/helpers/esm/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/esm/createClass\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/esm/assertThisInitialized\";\nimport _inherits from \"@babel/runtime/helpers/esm/inherits\";\nimport _createSuper from \"@babel/runtime/helpers/esm/createSuper\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport { Parser } from \"../Parser.js\";\nimport { numericPatterns } from \"../constants.js\";\nimport { parseNumericPattern, parseNDigits } from \"../utils.js\";\nexport var SecondParser = /*#__PURE__*/function (_Parser) {\n  _inherits(SecondParser, _Parser);\n  var _super = _createSuper(SecondParser);\n  function SecondParser() {\n    var _this;\n    _classCallCheck(this, SecondParser);\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n    _this = _super.call.apply(_super, [this].concat(args));\n    _defineProperty(_assertThisInitialized(_this), \"priority\", 50);\n    _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['t', 'T']);\n    return _this;\n  }\n  _createClass(SecondParser, [{\n    key: \"parse\",\n    value: function parse(dateString, token, match) {\n      switch (token) {\n        case 's':\n          return parseNumericPattern(numericPatterns.second, dateString);\n        case 'so':\n          return match.ordinalNumber(dateString, {\n            unit: 'second'\n          });\n        default:\n          return parseNDigits(token.length, dateString);\n      }\n    }\n  }, {\n    key: \"validate\",\n    value: function validate(_date, value) {\n      return value >= 0 && value <= 59;\n    }\n  }, {\n    key: \"set\",\n    value: function set(date, _flags, value) {\n      date.setUTCSeconds(value, 0);\n      return date;\n    }\n  }]);\n  return SecondParser;\n}(Parser);","import _classCallCheck from \"@babel/runtime/helpers/esm/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/esm/createClass\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/esm/assertThisInitialized\";\nimport _inherits from \"@babel/runtime/helpers/esm/inherits\";\nimport _createSuper from \"@babel/runtime/helpers/esm/createSuper\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport { Parser } from \"../Parser.js\";\nimport { mapValue, parseNDigits } from \"../utils.js\";\nexport var FractionOfSecondParser = /*#__PURE__*/function (_Parser) {\n  _inherits(FractionOfSecondParser, _Parser);\n  var _super = _createSuper(FractionOfSecondParser);\n  function FractionOfSecondParser() {\n    var _this;\n    _classCallCheck(this, FractionOfSecondParser);\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n    _this = _super.call.apply(_super, [this].concat(args));\n    _defineProperty(_assertThisInitialized(_this), \"priority\", 30);\n    _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['t', 'T']);\n    return _this;\n  }\n  _createClass(FractionOfSecondParser, [{\n    key: \"parse\",\n    value: function parse(dateString, token) {\n      var valueCallback = function valueCallback(value) {\n        return Math.floor(value * Math.pow(10, -token.length + 3));\n      };\n      return mapValue(parseNDigits(token.length, dateString), valueCallback);\n    }\n  }, {\n    key: \"set\",\n    value: function set(date, _flags, value) {\n      date.setUTCMilliseconds(value);\n      return date;\n    }\n  }]);\n  return FractionOfSecondParser;\n}(Parser);","import _classCallCheck from \"@babel/runtime/helpers/esm/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/esm/createClass\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/esm/assertThisInitialized\";\nimport _inherits from \"@babel/runtime/helpers/esm/inherits\";\nimport _createSuper from \"@babel/runtime/helpers/esm/createSuper\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport { Parser } from \"../Parser.js\";\nimport { timezonePatterns } from \"../constants.js\";\nimport { parseTimezonePattern } from \"../utils.js\"; // Timezone (ISO-8601. +00:00 is `'Z'`)\nexport var ISOTimezoneWithZParser = /*#__PURE__*/function (_Parser) {\n  _inherits(ISOTimezoneWithZParser, _Parser);\n  var _super = _createSuper(ISOTimezoneWithZParser);\n  function ISOTimezoneWithZParser() {\n    var _this;\n    _classCallCheck(this, ISOTimezoneWithZParser);\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n    _this = _super.call.apply(_super, [this].concat(args));\n    _defineProperty(_assertThisInitialized(_this), \"priority\", 10);\n    _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['t', 'T', 'x']);\n    return _this;\n  }\n  _createClass(ISOTimezoneWithZParser, [{\n    key: \"parse\",\n    value: function parse(dateString, token) {\n      switch (token) {\n        case 'X':\n          return parseTimezonePattern(timezonePatterns.basicOptionalMinutes, dateString);\n        case 'XX':\n          return parseTimezonePattern(timezonePatterns.basic, dateString);\n        case 'XXXX':\n          return parseTimezonePattern(timezonePatterns.basicOptionalSeconds, dateString);\n        case 'XXXXX':\n          return parseTimezonePattern(timezonePatterns.extendedOptionalSeconds, dateString);\n        case 'XXX':\n        default:\n          return parseTimezonePattern(timezonePatterns.extended, dateString);\n      }\n    }\n  }, {\n    key: \"set\",\n    value: function set(date, flags, value) {\n      if (flags.timestampIsSet) {\n        return date;\n      }\n      return new Date(date.getTime() - value);\n    }\n  }]);\n  return ISOTimezoneWithZParser;\n}(Parser);","import _classCallCheck from \"@babel/runtime/helpers/esm/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/esm/createClass\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/esm/assertThisInitialized\";\nimport _inherits from \"@babel/runtime/helpers/esm/inherits\";\nimport _createSuper from \"@babel/runtime/helpers/esm/createSuper\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport { Parser } from \"../Parser.js\";\nimport { timezonePatterns } from \"../constants.js\";\nimport { parseTimezonePattern } from \"../utils.js\"; // Timezone (ISO-8601)\nexport var ISOTimezoneParser = /*#__PURE__*/function (_Parser) {\n  _inherits(ISOTimezoneParser, _Parser);\n  var _super = _createSuper(ISOTimezoneParser);\n  function ISOTimezoneParser() {\n    var _this;\n    _classCallCheck(this, ISOTimezoneParser);\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n    _this = _super.call.apply(_super, [this].concat(args));\n    _defineProperty(_assertThisInitialized(_this), \"priority\", 10);\n    _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", ['t', 'T', 'X']);\n    return _this;\n  }\n  _createClass(ISOTimezoneParser, [{\n    key: \"parse\",\n    value: function parse(dateString, token) {\n      switch (token) {\n        case 'x':\n          return parseTimezonePattern(timezonePatterns.basicOptionalMinutes, dateString);\n        case 'xx':\n          return parseTimezonePattern(timezonePatterns.basic, dateString);\n        case 'xxxx':\n          return parseTimezonePattern(timezonePatterns.basicOptionalSeconds, dateString);\n        case 'xxxxx':\n          return parseTimezonePattern(timezonePatterns.extendedOptionalSeconds, dateString);\n        case 'xxx':\n        default:\n          return parseTimezonePattern(timezonePatterns.extended, dateString);\n      }\n    }\n  }, {\n    key: \"set\",\n    value: function set(date, flags, value) {\n      if (flags.timestampIsSet) {\n        return date;\n      }\n      return new Date(date.getTime() - value);\n    }\n  }]);\n  return ISOTimezoneParser;\n}(Parser);","import _classCallCheck from \"@babel/runtime/helpers/esm/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/esm/createClass\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/esm/assertThisInitialized\";\nimport _inherits from \"@babel/runtime/helpers/esm/inherits\";\nimport _createSuper from \"@babel/runtime/helpers/esm/createSuper\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport { Parser } from \"../Parser.js\";\nimport { parseAnyDigitsSigned } from \"../utils.js\";\nexport var TimestampSecondsParser = /*#__PURE__*/function (_Parser) {\n  _inherits(TimestampSecondsParser, _Parser);\n  var _super = _createSuper(TimestampSecondsParser);\n  function TimestampSecondsParser() {\n    var _this;\n    _classCallCheck(this, TimestampSecondsParser);\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n    _this = _super.call.apply(_super, [this].concat(args));\n    _defineProperty(_assertThisInitialized(_this), \"priority\", 40);\n    _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", '*');\n    return _this;\n  }\n  _createClass(TimestampSecondsParser, [{\n    key: \"parse\",\n    value: function parse(dateString) {\n      return parseAnyDigitsSigned(dateString);\n    }\n  }, {\n    key: \"set\",\n    value: function set(_date, _flags, value) {\n      return [new Date(value * 1000), {\n        timestampIsSet: true\n      }];\n    }\n  }]);\n  return TimestampSecondsParser;\n}(Parser);","import _classCallCheck from \"@babel/runtime/helpers/esm/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/esm/createClass\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/esm/assertThisInitialized\";\nimport _inherits from \"@babel/runtime/helpers/esm/inherits\";\nimport _createSuper from \"@babel/runtime/helpers/esm/createSuper\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport { Parser } from \"../Parser.js\";\nimport { parseAnyDigitsSigned } from \"../utils.js\";\nexport var TimestampMillisecondsParser = /*#__PURE__*/function (_Parser) {\n  _inherits(TimestampMillisecondsParser, _Parser);\n  var _super = _createSuper(TimestampMillisecondsParser);\n  function TimestampMillisecondsParser() {\n    var _this;\n    _classCallCheck(this, TimestampMillisecondsParser);\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n    _this = _super.call.apply(_super, [this].concat(args));\n    _defineProperty(_assertThisInitialized(_this), \"priority\", 20);\n    _defineProperty(_assertThisInitialized(_this), \"incompatibleTokens\", '*');\n    return _this;\n  }\n  _createClass(TimestampMillisecondsParser, [{\n    key: \"parse\",\n    value: function parse(dateString) {\n      return parseAnyDigitsSigned(dateString);\n    }\n  }, {\n    key: \"set\",\n    value: function set(_date, _flags, value) {\n      return [new Date(value), {\n        timestampIsSet: true\n      }];\n    }\n  }]);\n  return TimestampMillisecondsParser;\n}(Parser);","import { EraParser } from \"./EraParser.js\";\nimport { YearParser } from \"./YearParser.js\";\nimport { LocalWeekYearParser } from \"./LocalWeekYearParser.js\";\nimport { ISOWeekYearParser } from \"./ISOWeekYearParser.js\";\nimport { ExtendedYearParser } from \"./ExtendedYearParser.js\";\nimport { QuarterParser } from \"./QuarterParser.js\";\nimport { StandAloneQuarterParser } from \"./StandAloneQuarterParser.js\";\nimport { MonthParser } from \"./MonthParser.js\";\nimport { StandAloneMonthParser } from \"./StandAloneMonthParser.js\";\nimport { LocalWeekParser } from \"./LocalWeekParser.js\";\nimport { ISOWeekParser } from \"./ISOWeekParser.js\";\nimport { DateParser } from \"./DateParser.js\";\nimport { DayOfYearParser } from \"./DayOfYearParser.js\";\nimport { DayParser } from \"./DayParser.js\";\nimport { LocalDayParser } from \"./LocalDayParser.js\";\nimport { StandAloneLocalDayParser } from \"./StandAloneLocalDayParser.js\";\nimport { ISODayParser } from \"./ISODayParser.js\";\nimport { AMPMParser } from \"./AMPMParser.js\";\nimport { AMPMMidnightParser } from \"./AMPMMidnightParser.js\";\nimport { DayPeriodParser } from \"./DayPeriodParser.js\";\nimport { Hour1to12Parser } from \"./Hour1to12Parser.js\";\nimport { Hour0to23Parser } from \"./Hour0to23Parser.js\";\nimport { Hour0To11Parser } from \"./Hour0To11Parser.js\";\nimport { Hour1To24Parser } from \"./Hour1To24Parser.js\";\nimport { MinuteParser } from \"./MinuteParser.js\";\nimport { SecondParser } from \"./SecondParser.js\";\nimport { FractionOfSecondParser } from \"./FractionOfSecondParser.js\";\nimport { ISOTimezoneWithZParser } from \"./ISOTimezoneWithZParser.js\";\nimport { ISOTimezoneParser } from \"./ISOTimezoneParser.js\";\nimport { TimestampSecondsParser } from \"./TimestampSecondsParser.js\";\nimport { TimestampMillisecondsParser } from \"./TimestampMillisecondsParser.js\";\n/*\n * |     | Unit                           |     | Unit                           |\n * |-----|--------------------------------|-----|--------------------------------|\n * |  a  | AM, PM                         |  A* | Milliseconds in day            |\n * |  b  | AM, PM, noon, midnight         |  B  | Flexible day period            |\n * |  c  | Stand-alone local day of week  |  C* | Localized hour w/ day period   |\n * |  d  | Day of month                   |  D  | Day of year                    |\n * |  e  | Local day of week              |  E  | Day of week                    |\n * |  f  |                                |  F* | Day of week in month           |\n * |  g* | Modified Julian day            |  G  | Era                            |\n * |  h  | Hour [1-12]                    |  H  | Hour [0-23]                    |\n * |  i! | ISO day of week                |  I! | ISO week of year               |\n * |  j* | Localized hour w/ day period   |  J* | Localized hour w/o day period  |\n * |  k  | Hour [1-24]                    |  K  | Hour [0-11]                    |\n * |  l* | (deprecated)                   |  L  | Stand-alone month              |\n * |  m  | Minute                         |  M  | Month                          |\n * |  n  |                                |  N  |                                |\n * |  o! | Ordinal number modifier        |  O* | Timezone (GMT)                 |\n * |  p  |                                |  P  |                                |\n * |  q  | Stand-alone quarter            |  Q  | Quarter                        |\n * |  r* | Related Gregorian year         |  R! | ISO week-numbering year        |\n * |  s  | Second                         |  S  | Fraction of second             |\n * |  t! | Seconds timestamp              |  T! | Milliseconds timestamp         |\n * |  u  | Extended year                  |  U* | Cyclic year                    |\n * |  v* | Timezone (generic non-locat.)  |  V* | Timezone (location)            |\n * |  w  | Local week of year             |  W* | Week of month                  |\n * |  x  | Timezone (ISO-8601 w/o Z)      |  X  | Timezone (ISO-8601)            |\n * |  y  | Year (abs)                     |  Y  | Local week-numbering year      |\n * |  z* | Timezone (specific non-locat.) |  Z* | Timezone (aliases)             |\n *\n * Letters marked by * are not implemented but reserved by Unicode standard.\n *\n * Letters marked by ! are non-standard, but implemented by date-fns:\n * - `o` modifies the previous token to turn it into an ordinal (see `parse` docs)\n * - `i` is ISO day of week. For `i` and `ii` is returns numeric ISO week days,\n *   i.e. 7 for Sunday, 1 for Monday, etc.\n * - `I` is ISO week of year, as opposed to `w` which is local week of year.\n * - `R` is ISO week-numbering year, as opposed to `Y` which is local week-numbering year.\n *   `R` is supposed to be used in conjunction with `I` and `i`\n *   for universal ISO week-numbering date, whereas\n *   `Y` is supposed to be used in conjunction with `w` and `e`\n *   for week-numbering date specific to the locale.\n */\nexport var parsers = {\n  G: new EraParser(),\n  y: new YearParser(),\n  Y: new LocalWeekYearParser(),\n  R: new ISOWeekYearParser(),\n  u: new ExtendedYearParser(),\n  Q: new QuarterParser(),\n  q: new StandAloneQuarterParser(),\n  M: new MonthParser(),\n  L: new StandAloneMonthParser(),\n  w: new LocalWeekParser(),\n  I: new ISOWeekParser(),\n  d: new DateParser(),\n  D: new DayOfYearParser(),\n  E: new DayParser(),\n  e: new LocalDayParser(),\n  c: new StandAloneLocalDayParser(),\n  i: new ISODayParser(),\n  a: new AMPMParser(),\n  b: new AMPMMidnightParser(),\n  B: new DayPeriodParser(),\n  h: new Hour1to12Parser(),\n  H: new Hour0to23Parser(),\n  K: new Hour0To11Parser(),\n  k: new Hour1To24Parser(),\n  m: new MinuteParser(),\n  s: new SecondParser(),\n  S: new FractionOfSecondParser(),\n  X: new ISOTimezoneWithZParser(),\n  x: new ISOTimezoneParser(),\n  t: new TimestampSecondsParser(),\n  T: new TimestampMillisecondsParser()\n};","import { millisecondsInHour, millisecondsInMinute, millisecondsInSecond } from \"../../constants/index.js\";\nimport { numericPatterns } from \"./constants.js\";\nexport function mapValue(parseFnResult, mapFn) {\n  if (!parseFnResult) {\n    return parseFnResult;\n  }\n  return {\n    value: mapFn(parseFnResult.value),\n    rest: parseFnResult.rest\n  };\n}\nexport function parseNumericPattern(pattern, dateString) {\n  var matchResult = dateString.match(pattern);\n  if (!matchResult) {\n    return null;\n  }\n  return {\n    value: parseInt(matchResult[0], 10),\n    rest: dateString.slice(matchResult[0].length)\n  };\n}\nexport function parseTimezonePattern(pattern, dateString) {\n  var matchResult = dateString.match(pattern);\n  if (!matchResult) {\n    return null;\n  }\n\n  // Input is 'Z'\n  if (matchResult[0] === 'Z') {\n    return {\n      value: 0,\n      rest: dateString.slice(1)\n    };\n  }\n  var sign = matchResult[1] === '+' ? 1 : -1;\n  var hours = matchResult[2] ? parseInt(matchResult[2], 10) : 0;\n  var minutes = matchResult[3] ? parseInt(matchResult[3], 10) : 0;\n  var seconds = matchResult[5] ? parseInt(matchResult[5], 10) : 0;\n  return {\n    value: sign * (hours * millisecondsInHour + minutes * millisecondsInMinute + seconds * millisecondsInSecond),\n    rest: dateString.slice(matchResult[0].length)\n  };\n}\nexport function parseAnyDigitsSigned(dateString) {\n  return parseNumericPattern(numericPatterns.anyDigitsSigned, dateString);\n}\nexport function parseNDigits(n, dateString) {\n  switch (n) {\n    case 1:\n      return parseNumericPattern(numericPatterns.singleDigit, dateString);\n    case 2:\n      return parseNumericPattern(numericPatterns.twoDigits, dateString);\n    case 3:\n      return parseNumericPattern(numericPatterns.threeDigits, dateString);\n    case 4:\n      return parseNumericPattern(numericPatterns.fourDigits, dateString);\n    default:\n      return parseNumericPattern(new RegExp('^\\\\d{1,' + n + '}'), dateString);\n  }\n}\nexport function parseNDigitsSigned(n, dateString) {\n  switch (n) {\n    case 1:\n      return parseNumericPattern(numericPatterns.singleDigitSigned, dateString);\n    case 2:\n      return parseNumericPattern(numericPatterns.twoDigitsSigned, dateString);\n    case 3:\n      return parseNumericPattern(numericPatterns.threeDigitsSigned, dateString);\n    case 4:\n      return parseNumericPattern(numericPatterns.fourDigitsSigned, dateString);\n    default:\n      return parseNumericPattern(new RegExp('^-?\\\\d{1,' + n + '}'), dateString);\n  }\n}\nexport function dayPeriodEnumToHours(dayPeriod) {\n  switch (dayPeriod) {\n    case 'morning':\n      return 4;\n    case 'evening':\n      return 17;\n    case 'pm':\n    case 'noon':\n    case 'afternoon':\n      return 12;\n    case 'am':\n    case 'midnight':\n    case 'night':\n    default:\n      return 0;\n  }\n}\nexport function normalizeTwoDigitYear(twoDigitYear, currentYear) {\n  var isCommonEra = currentYear > 0;\n  // Absolute number of the current year:\n  // 1 -> 1 AC\n  // 0 -> 1 BC\n  // -1 -> 2 BC\n  var absCurrentYear = isCommonEra ? currentYear : 1 - currentYear;\n  var result;\n  if (absCurrentYear <= 50) {\n    result = twoDigitYear || 100;\n  } else {\n    var rangeEnd = absCurrentYear + 50;\n    var rangeEndCentury = Math.floor(rangeEnd / 100) * 100;\n    var isPreviousCentury = twoDigitYear >= rangeEnd % 100;\n    result = twoDigitYear + rangeEndCentury - (isPreviousCentury ? 100 : 0);\n  }\n  return isCommonEra ? result : 1 - result;\n}\nexport function isLeapYearIndex(year) {\n  return year % 400 === 0 || year % 4 === 0 && year % 100 !== 0;\n}","import _typeof from \"@babel/runtime/helpers/esm/typeof\";\nimport _createForOfIteratorHelper from \"@babel/runtime/helpers/esm/createForOfIteratorHelper\";\nimport defaultLocale from \"../_lib/defaultLocale/index.js\";\nimport subMilliseconds from \"../subMilliseconds/index.js\";\nimport toDate from \"../toDate/index.js\";\nimport assign from \"../_lib/assign/index.js\";\nimport longFormatters from \"../_lib/format/longFormatters/index.js\";\nimport getTimezoneOffsetInMilliseconds from \"../_lib/getTimezoneOffsetInMilliseconds/index.js\";\nimport { isProtectedDayOfYearToken, isProtectedWeekYearToken, throwProtectedError } from \"../_lib/protectedTokens/index.js\";\nimport toInteger from \"../_lib/toInteger/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\nimport { DateToSystemTimezoneSetter } from \"./_lib/Setter.js\";\nimport { parsers } from \"./_lib/parsers/index.js\";\nimport { getDefaultOptions } from \"../_lib/defaultOptions/index.js\"; // This RegExp consists of three parts separated by `|`:\n// - [yYQqMLwIdDecihHKkms]o matches any available ordinal number token\n//   (one of the certain letters followed by `o`)\n// - (\\w)\\1* matches any sequences of the same letter\n// - '' matches two quote characters in a row\n// - '(''|[^'])+('|$) matches anything surrounded by two quote characters ('),\n//   except a single quote symbol, which ends the sequence.\n//   Two quote characters do not end the sequence.\n//   If there is no matching single quote\n//   then the sequence will continue until the end of the string.\n// - . matches any single character unmatched by previous parts of the RegExps\nvar formattingTokensRegExp = /[yYQqMLwIdDecihHKkms]o|(\\w)\\1*|''|'(''|[^'])+('|$)|./g;\n\n// This RegExp catches symbols escaped by quotes, and also\n// sequences of symbols P, p, and the combinations like `PPPPPPPppppp`\nvar longFormattingTokensRegExp = /P+p+|P+|p+|''|'(''|[^'])+('|$)|./g;\nvar escapedStringRegExp = /^'([^]*?)'?$/;\nvar doubleQuoteRegExp = /''/g;\nvar notWhitespaceRegExp = /\\S/;\nvar unescapedLatinCharacterRegExp = /[a-zA-Z]/;\n\n/**\n * @name parse\n * @category Common Helpers\n * @summary Parse the date.\n *\n * @description\n * Return the date parsed from string using the given format string.\n *\n * > ⚠️ Please note that the `format` tokens differ from Moment.js and other libraries.\n * > See: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n *\n * The characters in the format string wrapped between two single quotes characters (') are escaped.\n * Two single quotes in a row, whether inside or outside a quoted sequence, represent a 'real' single quote.\n *\n * Format of the format string is based on Unicode Technical Standard #35:\n * https://www.unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table\n * with a few additions (see note 5 below the table).\n *\n * Not all tokens are compatible. Combinations that don't make sense or could lead to bugs are prohibited\n * and will throw `RangeError`. For example usage of 24-hour format token with AM/PM token will throw an exception:\n *\n * ```javascript\n * parse('23 AM', 'HH a', new Date())\n * //=> RangeError: The format string mustn't contain `HH` and `a` at the same time\n * ```\n *\n * See the compatibility table: https://docs.google.com/spreadsheets/d/e/2PACX-1vQOPU3xUhplll6dyoMmVUXHKl_8CRDs6_ueLmex3SoqwhuolkuN3O05l4rqx5h1dKX8eb46Ul-CCSrq/pubhtml?gid=0&single=true\n *\n * Accepted format string patterns:\n * | Unit                            |Prior| Pattern | Result examples                   | Notes |\n * |---------------------------------|-----|---------|-----------------------------------|-------|\n * | Era                             | 140 | G..GGG  | AD, BC                            |       |\n * |                                 |     | GGGG    | Anno Domini, Before Christ        | 2     |\n * |                                 |     | GGGGG   | A, B                              |       |\n * | Calendar year                   | 130 | y       | 44, 1, 1900, 2017, 9999           | 4     |\n * |                                 |     | yo      | 44th, 1st, 1900th, 9999999th      | 4,5   |\n * |                                 |     | yy      | 44, 01, 00, 17                    | 4     |\n * |                                 |     | yyy     | 044, 001, 123, 999                | 4     |\n * |                                 |     | yyyy    | 0044, 0001, 1900, 2017            | 4     |\n * |                                 |     | yyyyy   | ...                               | 2,4   |\n * | Local week-numbering year       | 130 | Y       | 44, 1, 1900, 2017, 9000           | 4     |\n * |                                 |     | Yo      | 44th, 1st, 1900th, 9999999th      | 4,5   |\n * |                                 |     | YY      | 44, 01, 00, 17                    | 4,6   |\n * |                                 |     | YYY     | 044, 001, 123, 999                | 4     |\n * |                                 |     | YYYY    | 0044, 0001, 1900, 2017            | 4,6   |\n * |                                 |     | YYYYY   | ...                               | 2,4   |\n * | ISO week-numbering year         | 130 | R       | -43, 1, 1900, 2017, 9999, -9999   | 4,5   |\n * |                                 |     | RR      | -43, 01, 00, 17                   | 4,5   |\n * |                                 |     | RRR     | -043, 001, 123, 999, -999         | 4,5   |\n * |                                 |     | RRRR    | -0043, 0001, 2017, 9999, -9999    | 4,5   |\n * |                                 |     | RRRRR   | ...                               | 2,4,5 |\n * | Extended year                   | 130 | u       | -43, 1, 1900, 2017, 9999, -999    | 4     |\n * |                                 |     | uu      | -43, 01, 99, -99                  | 4     |\n * |                                 |     | uuu     | -043, 001, 123, 999, -999         | 4     |\n * |                                 |     | uuuu    | -0043, 0001, 2017, 9999, -9999    | 4     |\n * |                                 |     | uuuuu   | ...                               | 2,4   |\n * | Quarter (formatting)            | 120 | Q       | 1, 2, 3, 4                        |       |\n * |                                 |     | Qo      | 1st, 2nd, 3rd, 4th                | 5     |\n * |                                 |     | QQ      | 01, 02, 03, 04                    |       |\n * |                                 |     | QQQ     | Q1, Q2, Q3, Q4                    |       |\n * |                                 |     | QQQQ    | 1st quarter, 2nd quarter, ...     | 2     |\n * |                                 |     | QQQQQ   | 1, 2, 3, 4                        | 4     |\n * | Quarter (stand-alone)           | 120 | q       | 1, 2, 3, 4                        |       |\n * |                                 |     | qo      | 1st, 2nd, 3rd, 4th                | 5     |\n * |                                 |     | qq      | 01, 02, 03, 04                    |       |\n * |                                 |     | qqq     | Q1, Q2, Q3, Q4                    |       |\n * |                                 |     | qqqq    | 1st quarter, 2nd quarter, ...     | 2     |\n * |                                 |     | qqqqq   | 1, 2, 3, 4                        | 3     |\n * | Month (formatting)              | 110 | M       | 1, 2, ..., 12                     |       |\n * |                                 |     | Mo      | 1st, 2nd, ..., 12th               | 5     |\n * |                                 |     | MM      | 01, 02, ..., 12                   |       |\n * |                                 |     | MMM     | Jan, Feb, ..., Dec                |       |\n * |                                 |     | MMMM    | January, February, ..., December  | 2     |\n * |                                 |     | MMMMM   | J, F, ..., D                      |       |\n * | Month (stand-alone)             | 110 | L       | 1, 2, ..., 12                     |       |\n * |                                 |     | Lo      | 1st, 2nd, ..., 12th               | 5     |\n * |                                 |     | LL      | 01, 02, ..., 12                   |       |\n * |                                 |     | LLL     | Jan, Feb, ..., Dec                |       |\n * |                                 |     | LLLL    | January, February, ..., December  | 2     |\n * |                                 |     | LLLLL   | J, F, ..., D                      |       |\n * | Local week of year              | 100 | w       | 1, 2, ..., 53                     |       |\n * |                                 |     | wo      | 1st, 2nd, ..., 53th               | 5     |\n * |                                 |     | ww      | 01, 02, ..., 53                   |       |\n * | ISO week of year                | 100 | I       | 1, 2, ..., 53                     | 5     |\n * |                                 |     | Io      | 1st, 2nd, ..., 53th               | 5     |\n * |                                 |     | II      | 01, 02, ..., 53                   | 5     |\n * | Day of month                    |  90 | d       | 1, 2, ..., 31                     |       |\n * |                                 |     | do      | 1st, 2nd, ..., 31st               | 5     |\n * |                                 |     | dd      | 01, 02, ..., 31                   |       |\n * | Day of year                     |  90 | D       | 1, 2, ..., 365, 366               | 7     |\n * |                                 |     | Do      | 1st, 2nd, ..., 365th, 366th       | 5     |\n * |                                 |     | DD      | 01, 02, ..., 365, 366             | 7     |\n * |                                 |     | DDD     | 001, 002, ..., 365, 366           |       |\n * |                                 |     | DDDD    | ...                               | 2     |\n * | Day of week (formatting)        |  90 | E..EEE  | Mon, Tue, Wed, ..., Sun           |       |\n * |                                 |     | EEEE    | Monday, Tuesday, ..., Sunday      | 2     |\n * |                                 |     | EEEEE   | M, T, W, T, F, S, S               |       |\n * |                                 |     | EEEEEE  | Mo, Tu, We, Th, Fr, Sa, Su        |       |\n * | ISO day of week (formatting)    |  90 | i       | 1, 2, 3, ..., 7                   | 5     |\n * |                                 |     | io      | 1st, 2nd, ..., 7th                | 5     |\n * |                                 |     | ii      | 01, 02, ..., 07                   | 5     |\n * |                                 |     | iii     | Mon, Tue, Wed, ..., Sun           | 5     |\n * |                                 |     | iiii    | Monday, Tuesday, ..., Sunday      | 2,5   |\n * |                                 |     | iiiii   | M, T, W, T, F, S, S               | 5     |\n * |                                 |     | iiiiii  | Mo, Tu, We, Th, Fr, Sa, Su        | 5     |\n * | Local day of week (formatting)  |  90 | e       | 2, 3, 4, ..., 1                   |       |\n * |                                 |     | eo      | 2nd, 3rd, ..., 1st                | 5     |\n * |                                 |     | ee      | 02, 03, ..., 01                   |       |\n * |                                 |     | eee     | Mon, Tue, Wed, ..., Sun           |       |\n * |                                 |     | eeee    | Monday, Tuesday, ..., Sunday      | 2     |\n * |                                 |     | eeeee   | M, T, W, T, F, S, S               |       |\n * |                                 |     | eeeeee  | Mo, Tu, We, Th, Fr, Sa, Su        |       |\n * | Local day of week (stand-alone) |  90 | c       | 2, 3, 4, ..., 1                   |       |\n * |                                 |     | co      | 2nd, 3rd, ..., 1st                | 5     |\n * |                                 |     | cc      | 02, 03, ..., 01                   |       |\n * |                                 |     | ccc     | Mon, Tue, Wed, ..., Sun           |       |\n * |                                 |     | cccc    | Monday, Tuesday, ..., Sunday      | 2     |\n * |                                 |     | ccccc   | M, T, W, T, F, S, S               |       |\n * |                                 |     | cccccc  | Mo, Tu, We, Th, Fr, Sa, Su        |       |\n * | AM, PM                          |  80 | a..aaa  | AM, PM                            |       |\n * |                                 |     | aaaa    | a.m., p.m.                        | 2     |\n * |                                 |     | aaaaa   | a, p                              |       |\n * | AM, PM, noon, midnight          |  80 | b..bbb  | AM, PM, noon, midnight            |       |\n * |                                 |     | bbbb    | a.m., p.m., noon, midnight        | 2     |\n * |                                 |     | bbbbb   | a, p, n, mi                       |       |\n * | Flexible day period             |  80 | B..BBB  | at night, in the morning, ...     |       |\n * |                                 |     | BBBB    | at night, in the morning, ...     | 2     |\n * |                                 |     | BBBBB   | at night, in the morning, ...     |       |\n * | Hour [1-12]                     |  70 | h       | 1, 2, ..., 11, 12                 |       |\n * |                                 |     | ho      | 1st, 2nd, ..., 11th, 12th         | 5     |\n * |                                 |     | hh      | 01, 02, ..., 11, 12               |       |\n * | Hour [0-23]                     |  70 | H       | 0, 1, 2, ..., 23                  |       |\n * |                                 |     | Ho      | 0th, 1st, 2nd, ..., 23rd          | 5     |\n * |                                 |     | HH      | 00, 01, 02, ..., 23               |       |\n * | Hour [0-11]                     |  70 | K       | 1, 2, ..., 11, 0                  |       |\n * |                                 |     | Ko      | 1st, 2nd, ..., 11th, 0th          | 5     |\n * |                                 |     | KK      | 01, 02, ..., 11, 00               |       |\n * | Hour [1-24]                     |  70 | k       | 24, 1, 2, ..., 23                 |       |\n * |                                 |     | ko      | 24th, 1st, 2nd, ..., 23rd         | 5     |\n * |                                 |     | kk      | 24, 01, 02, ..., 23               |       |\n * | Minute                          |  60 | m       | 0, 1, ..., 59                     |       |\n * |                                 |     | mo      | 0th, 1st, ..., 59th               | 5     |\n * |                                 |     | mm      | 00, 01, ..., 59                   |       |\n * | Second                          |  50 | s       | 0, 1, ..., 59                     |       |\n * |                                 |     | so      | 0th, 1st, ..., 59th               | 5     |\n * |                                 |     | ss      | 00, 01, ..., 59                   |       |\n * | Seconds timestamp               |  40 | t       | 512969520                         |       |\n * |                                 |     | tt      | ...                               | 2     |\n * | Fraction of second              |  30 | S       | 0, 1, ..., 9                      |       |\n * |                                 |     | SS      | 00, 01, ..., 99                   |       |\n * |                                 |     | SSS     | 000, 001, ..., 999                |       |\n * |                                 |     | SSSS    | ...                               | 2     |\n * | Milliseconds timestamp          |  20 | T       | 512969520900                      |       |\n * |                                 |     | TT      | ...                               | 2     |\n * | Timezone (ISO-8601 w/ Z)        |  10 | X       | -08, +0530, Z                     |       |\n * |                                 |     | XX      | -0800, +0530, Z                   |       |\n * |                                 |     | XXX     | -08:00, +05:30, Z                 |       |\n * |                                 |     | XXXX    | -0800, +0530, Z, +123456          | 2     |\n * |                                 |     | XXXXX   | -08:00, +05:30, Z, +12:34:56      |       |\n * | Timezone (ISO-8601 w/o Z)       |  10 | x       | -08, +0530, +00                   |       |\n * |                                 |     | xx      | -0800, +0530, +0000               |       |\n * |                                 |     | xxx     | -08:00, +05:30, +00:00            | 2     |\n * |                                 |     | xxxx    | -0800, +0530, +0000, +123456      |       |\n * |                                 |     | xxxxx   | -08:00, +05:30, +00:00, +12:34:56 |       |\n * | Long localized date             |  NA | P       | 05/29/1453                        | 5,8   |\n * |                                 |     | PP      | May 29, 1453                      |       |\n * |                                 |     | PPP     | May 29th, 1453                    |       |\n * |                                 |     | PPPP    | Sunday, May 29th, 1453            | 2,5,8 |\n * | Long localized time             |  NA | p       | 12:00 AM                          | 5,8   |\n * |                                 |     | pp      | 12:00:00 AM                       |       |\n * | Combination of date and time    |  NA | Pp      | 05/29/1453, 12:00 AM              |       |\n * |                                 |     | PPpp    | May 29, 1453, 12:00:00 AM         |       |\n * |                                 |     | PPPpp   | May 29th, 1453 at ...             |       |\n * |                                 |     | PPPPpp  | Sunday, May 29th, 1453 at ...     | 2,5,8 |\n * Notes:\n * 1. \"Formatting\" units (e.g. formatting quarter) in the default en-US locale\n *    are the same as \"stand-alone\" units, but are different in some languages.\n *    \"Formatting\" units are declined according to the rules of the language\n *    in the context of a date. \"Stand-alone\" units are always nominative singular.\n *    In `format` function, they will produce different result:\n *\n *    `format(new Date(2017, 10, 6), 'do LLLL', {locale: cs}) //=> '6. listopad'`\n *\n *    `format(new Date(2017, 10, 6), 'do MMMM', {locale: cs}) //=> '6. listopadu'`\n *\n *    `parse` will try to match both formatting and stand-alone units interchangably.\n *\n * 2. Any sequence of the identical letters is a pattern, unless it is escaped by\n *    the single quote characters (see below).\n *    If the sequence is longer than listed in table:\n *    - for numerical units (`yyyyyyyy`) `parse` will try to match a number\n *      as wide as the sequence\n *    - for text units (`MMMMMMMM`) `parse` will try to match the widest variation of the unit.\n *      These variations are marked with \"2\" in the last column of the table.\n *\n * 3. `QQQQQ` and `qqqqq` could be not strictly numerical in some locales.\n *    These tokens represent the shortest form of the quarter.\n *\n * 4. The main difference between `y` and `u` patterns are B.C. years:\n *\n *    | Year | `y` | `u` |\n *    |------|-----|-----|\n *    | AC 1 |   1 |   1 |\n *    | BC 1 |   1 |   0 |\n *    | BC 2 |   2 |  -1 |\n *\n *    Also `yy` will try to guess the century of two digit year by proximity with `referenceDate`:\n *\n *    `parse('50', 'yy', new Date(2018, 0, 1)) //=> Sat Jan 01 2050 00:00:00`\n *\n *    `parse('75', 'yy', new Date(2018, 0, 1)) //=> Wed Jan 01 1975 00:00:00`\n *\n *    while `uu` will just assign the year as is:\n *\n *    `parse('50', 'uu', new Date(2018, 0, 1)) //=> Sat Jan 01 0050 00:00:00`\n *\n *    `parse('75', 'uu', new Date(2018, 0, 1)) //=> Tue Jan 01 0075 00:00:00`\n *\n *    The same difference is true for local and ISO week-numbering years (`Y` and `R`),\n *    except local week-numbering years are dependent on `options.weekStartsOn`\n *    and `options.firstWeekContainsDate` (compare [setISOWeekYear]{@link https://date-fns.org/docs/setISOWeekYear}\n *    and [setWeekYear]{@link https://date-fns.org/docs/setWeekYear}).\n *\n * 5. These patterns are not in the Unicode Technical Standard #35:\n *    - `i`: ISO day of week\n *    - `I`: ISO week of year\n *    - `R`: ISO week-numbering year\n *    - `o`: ordinal number modifier\n *    - `P`: long localized date\n *    - `p`: long localized time\n *\n * 6. `YY` and `YYYY` tokens represent week-numbering years but they are often confused with years.\n *    You should enable `options.useAdditionalWeekYearTokens` to use them. See: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n *\n * 7. `D` and `DD` tokens represent days of the year but they are ofthen confused with days of the month.\n *    You should enable `options.useAdditionalDayOfYearTokens` to use them. See: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n *\n * 8. `P+` tokens do not have a defined priority since they are merely aliases to other tokens based\n *    on the given locale.\n *\n *    using `en-US` locale: `P` => `MM/dd/yyyy`\n *    using `en-US` locale: `p` => `hh:mm a`\n *    using `pt-BR` locale: `P` => `dd/MM/yyyy`\n *    using `pt-BR` locale: `p` => `HH:mm`\n *\n * Values will be assigned to the date in the descending order of its unit's priority.\n * Units of an equal priority overwrite each other in the order of appearance.\n *\n * If no values of higher priority are parsed (e.g. when parsing string 'January 1st' without a year),\n * the values will be taken from 3rd argument `referenceDate` which works as a context of parsing.\n *\n * `referenceDate` must be passed for correct work of the function.\n * If you're not sure which `referenceDate` to supply, create a new instance of Date:\n * `parse('02/11/2014', 'MM/dd/yyyy', new Date())`\n * In this case parsing will be done in the context of the current date.\n * If `referenceDate` is `Invalid Date` or a value not convertible to valid `Date`,\n * then `Invalid Date` will be returned.\n *\n * The result may vary by locale.\n *\n * If `formatString` matches with `dateString` but does not provides tokens, `referenceDate` will be returned.\n *\n * If parsing failed, `Invalid Date` will be returned.\n * Invalid Date is a Date, whose time value is NaN.\n * Time value of Date: http://es5.github.io/#x15.9.1.1\n *\n * @param {String} dateString - the string to parse\n * @param {String} formatString - the string of tokens\n * @param {Date|Number} referenceDate - defines values missing from the parsed dateString\n * @param {Object} [options] - an object with options.\n * @param {Locale} [options.locale=defaultLocale] - the locale object. See [Locale]{@link https://date-fns.org/docs/Locale}\n * @param {0|1|2|3|4|5|6} [options.weekStartsOn=0] - the index of the first day of the week (0 - Sunday)\n * @param {1|2|3|4|5|6|7} [options.firstWeekContainsDate=1] - the day of January, which is always in the first week of the year\n * @param {Boolean} [options.useAdditionalWeekYearTokens=false] - if true, allows usage of the week-numbering year tokens `YY` and `YYYY`;\n *   see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n * @param {Boolean} [options.useAdditionalDayOfYearTokens=false] - if true, allows usage of the day of year tokens `D` and `DD`;\n *   see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n * @returns {Date} the parsed date\n * @throws {TypeError} 3 arguments required\n * @throws {RangeError} `options.weekStartsOn` must be between 0 and 6\n * @throws {RangeError} `options.firstWeekContainsDate` must be between 1 and 7\n * @throws {RangeError} `options.locale` must contain `match` property\n * @throws {RangeError} use `yyyy` instead of `YYYY` for formatting years using [format provided] to the input [input provided]; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n * @throws {RangeError} use `yy` instead of `YY` for formatting years using [format provided] to the input [input provided]; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n * @throws {RangeError} use `d` instead of `D` for formatting days of the month using [format provided] to the input [input provided]; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n * @throws {RangeError} use `dd` instead of `DD` for formatting days of the month using [format provided] to the input [input provided]; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n * @throws {RangeError} format string contains an unescaped latin alphabet character\n *\n * @example\n * // Parse 11 February 2014 from middle-endian format:\n * var result = parse('02/11/2014', 'MM/dd/yyyy', new Date())\n * //=> Tue Feb 11 2014 00:00:00\n *\n * @example\n * // Parse 28th of February in Esperanto locale in the context of 2010 year:\n * import eo from 'date-fns/locale/eo'\n * var result = parse('28-a de februaro', \"do 'de' MMMM\", new Date(2010, 0, 1), {\n *   locale: eo\n * })\n * //=> Sun Feb 28 2010 00:00:00\n */\nexport default function parse(dirtyDateString, dirtyFormatString, dirtyReferenceDate, options) {\n  var _ref, _options$locale, _ref2, _ref3, _ref4, _options$firstWeekCon, _options$locale2, _options$locale2$opti, _defaultOptions$local, _defaultOptions$local2, _ref5, _ref6, _ref7, _options$weekStartsOn, _options$locale3, _options$locale3$opti, _defaultOptions$local3, _defaultOptions$local4;\n  requiredArgs(3, arguments);\n  var dateString = String(dirtyDateString);\n  var formatString = String(dirtyFormatString);\n  var defaultOptions = getDefaultOptions();\n  var locale = (_ref = (_options$locale = options === null || options === void 0 ? void 0 : options.locale) !== null && _options$locale !== void 0 ? _options$locale : defaultOptions.locale) !== null && _ref !== void 0 ? _ref : defaultLocale;\n  if (!locale.match) {\n    throw new RangeError('locale must contain match property');\n  }\n  var firstWeekContainsDate = toInteger((_ref2 = (_ref3 = (_ref4 = (_options$firstWeekCon = options === null || options === void 0 ? void 0 : options.firstWeekContainsDate) !== null && _options$firstWeekCon !== void 0 ? _options$firstWeekCon : options === null || options === void 0 ? void 0 : (_options$locale2 = options.locale) === null || _options$locale2 === void 0 ? void 0 : (_options$locale2$opti = _options$locale2.options) === null || _options$locale2$opti === void 0 ? void 0 : _options$locale2$opti.firstWeekContainsDate) !== null && _ref4 !== void 0 ? _ref4 : defaultOptions.firstWeekContainsDate) !== null && _ref3 !== void 0 ? _ref3 : (_defaultOptions$local = defaultOptions.locale) === null || _defaultOptions$local === void 0 ? void 0 : (_defaultOptions$local2 = _defaultOptions$local.options) === null || _defaultOptions$local2 === void 0 ? void 0 : _defaultOptions$local2.firstWeekContainsDate) !== null && _ref2 !== void 0 ? _ref2 : 1);\n\n  // Test if weekStartsOn is between 1 and 7 _and_ is not NaN\n  if (!(firstWeekContainsDate >= 1 && firstWeekContainsDate <= 7)) {\n    throw new RangeError('firstWeekContainsDate must be between 1 and 7 inclusively');\n  }\n  var weekStartsOn = toInteger((_ref5 = (_ref6 = (_ref7 = (_options$weekStartsOn = options === null || options === void 0 ? void 0 : options.weekStartsOn) !== null && _options$weekStartsOn !== void 0 ? _options$weekStartsOn : options === null || options === void 0 ? void 0 : (_options$locale3 = options.locale) === null || _options$locale3 === void 0 ? void 0 : (_options$locale3$opti = _options$locale3.options) === null || _options$locale3$opti === void 0 ? void 0 : _options$locale3$opti.weekStartsOn) !== null && _ref7 !== void 0 ? _ref7 : defaultOptions.weekStartsOn) !== null && _ref6 !== void 0 ? _ref6 : (_defaultOptions$local3 = defaultOptions.locale) === null || _defaultOptions$local3 === void 0 ? void 0 : (_defaultOptions$local4 = _defaultOptions$local3.options) === null || _defaultOptions$local4 === void 0 ? void 0 : _defaultOptions$local4.weekStartsOn) !== null && _ref5 !== void 0 ? _ref5 : 0);\n\n  // Test if weekStartsOn is between 0 and 6 _and_ is not NaN\n  if (!(weekStartsOn >= 0 && weekStartsOn <= 6)) {\n    throw new RangeError('weekStartsOn must be between 0 and 6 inclusively');\n  }\n  if (formatString === '') {\n    if (dateString === '') {\n      return toDate(dirtyReferenceDate);\n    } else {\n      return new Date(NaN);\n    }\n  }\n  var subFnOptions = {\n    firstWeekContainsDate: firstWeekContainsDate,\n    weekStartsOn: weekStartsOn,\n    locale: locale\n  };\n\n  // If timezone isn't specified, it will be set to the system timezone\n  var setters = [new DateToSystemTimezoneSetter()];\n  var tokens = formatString.match(longFormattingTokensRegExp).map(function (substring) {\n    var firstCharacter = substring[0];\n    if (firstCharacter in longFormatters) {\n      var longFormatter = longFormatters[firstCharacter];\n      return longFormatter(substring, locale.formatLong);\n    }\n    return substring;\n  }).join('').match(formattingTokensRegExp);\n  var usedTokens = [];\n  var _iterator = _createForOfIteratorHelper(tokens),\n    _step;\n  try {\n    var _loop = function _loop() {\n      var token = _step.value;\n      if (!(options !== null && options !== void 0 && options.useAdditionalWeekYearTokens) && isProtectedWeekYearToken(token)) {\n        throwProtectedError(token, formatString, dirtyDateString);\n      }\n      if (!(options !== null && options !== void 0 && options.useAdditionalDayOfYearTokens) && isProtectedDayOfYearToken(token)) {\n        throwProtectedError(token, formatString, dirtyDateString);\n      }\n      var firstCharacter = token[0];\n      var parser = parsers[firstCharacter];\n      if (parser) {\n        var incompatibleTokens = parser.incompatibleTokens;\n        if (Array.isArray(incompatibleTokens)) {\n          var incompatibleToken = usedTokens.find(function (usedToken) {\n            return incompatibleTokens.includes(usedToken.token) || usedToken.token === firstCharacter;\n          });\n          if (incompatibleToken) {\n            throw new RangeError(\"The format string mustn't contain `\".concat(incompatibleToken.fullToken, \"` and `\").concat(token, \"` at the same time\"));\n          }\n        } else if (parser.incompatibleTokens === '*' && usedTokens.length > 0) {\n          throw new RangeError(\"The format string mustn't contain `\".concat(token, \"` and any other token at the same time\"));\n        }\n        usedTokens.push({\n          token: firstCharacter,\n          fullToken: token\n        });\n        var parseResult = parser.run(dateString, token, locale.match, subFnOptions);\n        if (!parseResult) {\n          return {\n            v: new Date(NaN)\n          };\n        }\n        setters.push(parseResult.setter);\n        dateString = parseResult.rest;\n      } else {\n        if (firstCharacter.match(unescapedLatinCharacterRegExp)) {\n          throw new RangeError('Format string contains an unescaped latin alphabet character `' + firstCharacter + '`');\n        }\n\n        // Replace two single quote characters with one single quote character\n        if (token === \"''\") {\n          token = \"'\";\n        } else if (firstCharacter === \"'\") {\n          token = cleanEscapedString(token);\n        }\n\n        // Cut token from string, or, if string doesn't match the token, return Invalid Date\n        if (dateString.indexOf(token) === 0) {\n          dateString = dateString.slice(token.length);\n        } else {\n          return {\n            v: new Date(NaN)\n          };\n        }\n      }\n    };\n    for (_iterator.s(); !(_step = _iterator.n()).done;) {\n      var _ret = _loop();\n      if (_typeof(_ret) === \"object\") return _ret.v;\n    }\n\n    // Check if the remaining input contains something other than whitespace\n  } catch (err) {\n    _iterator.e(err);\n  } finally {\n    _iterator.f();\n  }\n  if (dateString.length > 0 && notWhitespaceRegExp.test(dateString)) {\n    return new Date(NaN);\n  }\n  var uniquePrioritySetters = setters.map(function (setter) {\n    return setter.priority;\n  }).sort(function (a, b) {\n    return b - a;\n  }).filter(function (priority, index, array) {\n    return array.indexOf(priority) === index;\n  }).map(function (priority) {\n    return setters.filter(function (setter) {\n      return setter.priority === priority;\n    }).sort(function (a, b) {\n      return b.subPriority - a.subPriority;\n    });\n  }).map(function (setterArray) {\n    return setterArray[0];\n  });\n  var date = toDate(dirtyReferenceDate);\n  if (isNaN(date.getTime())) {\n    return new Date(NaN);\n  }\n\n  // Convert the date in system timezone to the same date in UTC+00:00 timezone.\n  var utcDate = subMilliseconds(date, getTimezoneOffsetInMilliseconds(date));\n  var flags = {};\n  var _iterator2 = _createForOfIteratorHelper(uniquePrioritySetters),\n    _step2;\n  try {\n    for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n      var setter = _step2.value;\n      if (!setter.validate(utcDate, subFnOptions)) {\n        return new Date(NaN);\n      }\n      var result = setter.set(utcDate, flags, subFnOptions);\n      // Result is tuple (date, flags)\n      if (Array.isArray(result)) {\n        utcDate = result[0];\n        assign(flags, result[1]);\n        // Result is date\n      } else {\n        utcDate = result;\n      }\n    }\n  } catch (err) {\n    _iterator2.e(err);\n  } finally {\n    _iterator2.f();\n  }\n  return utcDate;\n}\nfunction cleanEscapedString(input) {\n  return input.match(escapedStringRegExp)[1].replace(doubleQuoteRegExp, \"'\");\n}","import { millisecondsInHour, millisecondsInMinute } from \"../constants/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\nimport toInteger from \"../_lib/toInteger/index.js\";\n/**\n * @name parseISO\n * @category Common Helpers\n * @summary Parse ISO string\n *\n * @description\n * Parse the given string in ISO 8601 format and return an instance of Date.\n *\n * Function accepts complete ISO 8601 formats as well as partial implementations.\n * ISO 8601: http://en.wikipedia.org/wiki/ISO_8601\n *\n * If the argument isn't a string, the function cannot parse the string or\n * the values are invalid, it returns Invalid Date.\n *\n * @param {String} argument - the value to convert\n * @param {Object} [options] - an object with options.\n * @param {0|1|2} [options.additionalDigits=2] - the additional number of digits in the extended year format\n * @returns {Date} the parsed date in the local time zone\n * @throws {TypeError} 1 argument required\n * @throws {RangeError} `options.additionalDigits` must be 0, 1 or 2\n *\n * @example\n * // Convert string '2014-02-11T11:30:30' to date:\n * const result = parseISO('2014-02-11T11:30:30')\n * //=> Tue Feb 11 2014 11:30:30\n *\n * @example\n * // Convert string '+02014101' to date,\n * // if the additional number of digits in the extended year format is 1:\n * const result = parseISO('+02014101', { additionalDigits: 1 })\n * //=> Fri Apr 11 2014 00:00:00\n */\nexport default function parseISO(argument, options) {\n  var _options$additionalDi;\n  requiredArgs(1, arguments);\n  var additionalDigits = toInteger((_options$additionalDi = options === null || options === void 0 ? void 0 : options.additionalDigits) !== null && _options$additionalDi !== void 0 ? _options$additionalDi : 2);\n  if (additionalDigits !== 2 && additionalDigits !== 1 && additionalDigits !== 0) {\n    throw new RangeError('additionalDigits must be 0, 1 or 2');\n  }\n  if (!(typeof argument === 'string' || Object.prototype.toString.call(argument) === '[object String]')) {\n    return new Date(NaN);\n  }\n  var dateStrings = splitDateString(argument);\n  var date;\n  if (dateStrings.date) {\n    var parseYearResult = parseYear(dateStrings.date, additionalDigits);\n    date = parseDate(parseYearResult.restDateString, parseYearResult.year);\n  }\n  if (!date || isNaN(date.getTime())) {\n    return new Date(NaN);\n  }\n  var timestamp = date.getTime();\n  var time = 0;\n  var offset;\n  if (dateStrings.time) {\n    time = parseTime(dateStrings.time);\n    if (isNaN(time)) {\n      return new Date(NaN);\n    }\n  }\n  if (dateStrings.timezone) {\n    offset = parseTimezone(dateStrings.timezone);\n    if (isNaN(offset)) {\n      return new Date(NaN);\n    }\n  } else {\n    var dirtyDate = new Date(timestamp + time);\n    // js parsed string assuming it's in UTC timezone\n    // but we need it to be parsed in our timezone\n    // so we use utc values to build date in our timezone.\n    // Year values from 0 to 99 map to the years 1900 to 1999\n    // so set year explicitly with setFullYear.\n    var result = new Date(0);\n    result.setFullYear(dirtyDate.getUTCFullYear(), dirtyDate.getUTCMonth(), dirtyDate.getUTCDate());\n    result.setHours(dirtyDate.getUTCHours(), dirtyDate.getUTCMinutes(), dirtyDate.getUTCSeconds(), dirtyDate.getUTCMilliseconds());\n    return result;\n  }\n  return new Date(timestamp + time + offset);\n}\nvar patterns = {\n  dateTimeDelimiter: /[T ]/,\n  timeZoneDelimiter: /[Z ]/i,\n  timezone: /([Z+-].*)$/\n};\nvar dateRegex = /^-?(?:(\\d{3})|(\\d{2})(?:-?(\\d{2}))?|W(\\d{2})(?:-?(\\d{1}))?|)$/;\nvar timeRegex = /^(\\d{2}(?:[.,]\\d*)?)(?::?(\\d{2}(?:[.,]\\d*)?))?(?::?(\\d{2}(?:[.,]\\d*)?))?$/;\nvar timezoneRegex = /^([+-])(\\d{2})(?::?(\\d{2}))?$/;\nfunction splitDateString(dateString) {\n  var dateStrings = {};\n  var array = dateString.split(patterns.dateTimeDelimiter);\n  var timeString;\n\n  // The regex match should only return at maximum two array elements.\n  // [date], [time], or [date, time].\n  if (array.length > 2) {\n    return dateStrings;\n  }\n  if (/:/.test(array[0])) {\n    timeString = array[0];\n  } else {\n    dateStrings.date = array[0];\n    timeString = array[1];\n    if (patterns.timeZoneDelimiter.test(dateStrings.date)) {\n      dateStrings.date = dateString.split(patterns.timeZoneDelimiter)[0];\n      timeString = dateString.substr(dateStrings.date.length, dateString.length);\n    }\n  }\n  if (timeString) {\n    var token = patterns.timezone.exec(timeString);\n    if (token) {\n      dateStrings.time = timeString.replace(token[1], '');\n      dateStrings.timezone = token[1];\n    } else {\n      dateStrings.time = timeString;\n    }\n  }\n  return dateStrings;\n}\nfunction parseYear(dateString, additionalDigits) {\n  var regex = new RegExp('^(?:(\\\\d{4}|[+-]\\\\d{' + (4 + additionalDigits) + '})|(\\\\d{2}|[+-]\\\\d{' + (2 + additionalDigits) + '})$)');\n  var captures = dateString.match(regex);\n  // Invalid ISO-formatted year\n  if (!captures) return {\n    year: NaN,\n    restDateString: ''\n  };\n  var year = captures[1] ? parseInt(captures[1]) : null;\n  var century = captures[2] ? parseInt(captures[2]) : null;\n\n  // either year or century is null, not both\n  return {\n    year: century === null ? year : century * 100,\n    restDateString: dateString.slice((captures[1] || captures[2]).length)\n  };\n}\nfunction parseDate(dateString, year) {\n  // Invalid ISO-formatted year\n  if (year === null) return new Date(NaN);\n  var captures = dateString.match(dateRegex);\n  // Invalid ISO-formatted string\n  if (!captures) return new Date(NaN);\n  var isWeekDate = !!captures[4];\n  var dayOfYear = parseDateUnit(captures[1]);\n  var month = parseDateUnit(captures[2]) - 1;\n  var day = parseDateUnit(captures[3]);\n  var week = parseDateUnit(captures[4]);\n  var dayOfWeek = parseDateUnit(captures[5]) - 1;\n  if (isWeekDate) {\n    if (!validateWeekDate(year, week, dayOfWeek)) {\n      return new Date(NaN);\n    }\n    return dayOfISOWeekYear(year, week, dayOfWeek);\n  } else {\n    var date = new Date(0);\n    if (!validateDate(year, month, day) || !validateDayOfYearDate(year, dayOfYear)) {\n      return new Date(NaN);\n    }\n    date.setUTCFullYear(year, month, Math.max(dayOfYear, day));\n    return date;\n  }\n}\nfunction parseDateUnit(value) {\n  return value ? parseInt(value) : 1;\n}\nfunction parseTime(timeString) {\n  var captures = timeString.match(timeRegex);\n  if (!captures) return NaN; // Invalid ISO-formatted time\n\n  var hours = parseTimeUnit(captures[1]);\n  var minutes = parseTimeUnit(captures[2]);\n  var seconds = parseTimeUnit(captures[3]);\n  if (!validateTime(hours, minutes, seconds)) {\n    return NaN;\n  }\n  return hours * millisecondsInHour + minutes * millisecondsInMinute + seconds * 1000;\n}\nfunction parseTimeUnit(value) {\n  return value && parseFloat(value.replace(',', '.')) || 0;\n}\nfunction parseTimezone(timezoneString) {\n  if (timezoneString === 'Z') return 0;\n  var captures = timezoneString.match(timezoneRegex);\n  if (!captures) return 0;\n  var sign = captures[1] === '+' ? -1 : 1;\n  var hours = parseInt(captures[2]);\n  var minutes = captures[3] && parseInt(captures[3]) || 0;\n  if (!validateTimezone(hours, minutes)) {\n    return NaN;\n  }\n  return sign * (hours * millisecondsInHour + minutes * millisecondsInMinute);\n}\nfunction dayOfISOWeekYear(isoWeekYear, week, day) {\n  var date = new Date(0);\n  date.setUTCFullYear(isoWeekYear, 0, 4);\n  var fourthOfJanuaryDay = date.getUTCDay() || 7;\n  var diff = (week - 1) * 7 + day + 1 - fourthOfJanuaryDay;\n  date.setUTCDate(date.getUTCDate() + diff);\n  return date;\n}\n\n// Validation functions\n\n// February is null to handle the leap year (using ||)\nvar daysInMonths = [31, null, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];\nfunction isLeapYearIndex(year) {\n  return year % 400 === 0 || year % 4 === 0 && year % 100 !== 0;\n}\nfunction validateDate(year, month, date) {\n  return month >= 0 && month <= 11 && date >= 1 && date <= (daysInMonths[month] || (isLeapYearIndex(year) ? 29 : 28));\n}\nfunction validateDayOfYearDate(year, dayOfYear) {\n  return dayOfYear >= 1 && dayOfYear <= (isLeapYearIndex(year) ? 366 : 365);\n}\nfunction validateWeekDate(_year, week, day) {\n  return week >= 1 && week <= 53 && day >= 0 && day <= 6;\n}\nfunction validateTime(hours, minutes, seconds) {\n  if (hours === 24) {\n    return minutes === 0 && seconds === 0;\n  }\n  return seconds >= 0 && seconds < 60 && minutes >= 0 && minutes < 60 && hours >= 0 && hours < 25;\n}\nfunction validateTimezone(_hours, minutes) {\n  return minutes >= 0 && minutes <= 59;\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name parseJSON\n * @category Common Helpers\n * @summary Parse a JSON date string\n *\n * @description\n * Converts a complete ISO date string in UTC time, the typical format for transmitting\n * a date in JSON, to a JavaScript `Date` instance.\n *\n * This is a minimal implementation for converting dates retrieved from a JSON API to\n * a `Date` instance which can be used with other functions in the `date-fns` library.\n * The following formats are supported:\n *\n * - `2000-03-15T05:20:10.123Z`: The output of `.toISOString()` and `JSON.stringify(new Date())`\n * - `2000-03-15T05:20:10Z`: Without milliseconds\n * - `2000-03-15T05:20:10+00:00`: With a zero offset, the default JSON encoded format in some other languages\n * - `2000-03-15T05:20:10+05:45`: With a positive or negative offset, the default JSON encoded format in some other languages\n * - `2000-03-15T05:20:10+0000`: With a zero offset without a colon\n * - `2000-03-15T05:20:10`: Without a trailing 'Z' symbol\n * - `2000-03-15T05:20:10.1234567`: Up to 7 digits in milliseconds field. Only first 3 are taken into account since JS does not allow fractional milliseconds\n * - `2000-03-15 05:20:10`: With a space instead of a 'T' separator for APIs returning a SQL date without reformatting\n *\n * For convenience and ease of use these other input types are also supported\n * via [toDate]{@link https://date-fns.org/docs/toDate}:\n *\n * - A `Date` instance will be cloned\n * - A `number` will be treated as a timestamp\n *\n * Any other input type or invalid date strings will return an `Invalid Date`.\n *\n * @param {String|Number|Date} argument A fully formed ISO8601 date string to convert\n * @returns {Date} the parsed date in the local time zone\n * @throws {TypeError} 1 argument required\n */\nexport default function parseJSON(argument) {\n  requiredArgs(1, arguments);\n  if (typeof argument === 'string') {\n    var parts = argument.match(/(\\d{4})-(\\d{2})-(\\d{2})[T ](\\d{2}):(\\d{2}):(\\d{2})(?:\\.(\\d{0,7}))?(?:Z|(.)(\\d{2}):?(\\d{2})?)?/);\n    if (parts) {\n      // Group 8 matches the sign\n      return new Date(Date.UTC(+parts[1], +parts[2] - 1, +parts[3], +parts[4] - (+parts[9] || 0) * (parts[8] == '-' ? -1 : 1), +parts[5] - (+parts[10] || 0) * (parts[8] == '-' ? -1 : 1), +parts[6], +((parts[7] || '0') + '00').substring(0, 3)));\n    }\n    return new Date(NaN);\n  }\n  return toDate(argument);\n}","import requiredArgs from \"../_lib/requiredArgs/index.js\";\nimport getDay from \"../getDay/index.js\";\nimport subDays from \"../subDays/index.js\";\n/**\n * @name previousDay\n * @category Weekday Helpers\n * @summary When is the previous day of the week?\n *\n * @description\n * When is the previous day of the week? 0-6 the day of the week, 0 represents Sunday.\n *\n * @param {Date | number} date - the date to check\n * @param {number} day - day of the week\n * @returns {Date} - the date is the previous day of week\n * @throws {TypeError} - 2 arguments required\n *\n * @example\n * // When is the previous Monday before Mar, 20, 2020?\n * const result = previousDay(new Date(2020, 2, 20), 1)\n * //=> Mon Mar 16 2020 00:00:00\n *\n * @example\n * // When is the previous Tuesday before Mar, 21, 2020?\n * const result = previousDay(new Date(2020, 2, 21), 2)\n * //=> Tue Mar 17 2020 00:00:00\n */\nexport default function previousDay(date, day) {\n  requiredArgs(2, arguments);\n  var delta = getDay(date) - day;\n  if (delta <= 0) delta += 7;\n  return subDays(date, delta);\n}","import requiredArgs from \"../_lib/requiredArgs/index.js\";\nimport previousDay from \"../previousDay/index.js\";\n/**\n * @name previousFriday\n * @category Weekday Helpers\n * @summary When is the previous Friday?\n *\n * @description\n * When is the previous Friday?\n *\n * @param {Date | number} date - the date to start counting from\n * @returns {Date} the previous Friday\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // When is the previous Friday before Jun, 19, 2021?\n * const result = previousFriday(new Date(2021, 5, 19))\n * //=> Fri June 18 2021 00:00:00\n */\nexport default function previousFriday(date) {\n  requiredArgs(1, arguments);\n  return previousDay(date, 5);\n}","import requiredArgs from \"../_lib/requiredArgs/index.js\";\nimport previousDay from \"../previousDay/index.js\";\n/**\n * @name previousMonday\n * @category Weekday Helpers\n * @summary When is the previous Monday?\n *\n * @description\n * When is the previous Monday?\n *\n * @param {Date | number} date - the date to start counting from\n * @returns {Date} the previous Monday\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // When is the previous Monday before Jun, 18, 2021?\n * const result = previousMonday(new Date(2021, 5, 18))\n * //=> Mon June 14 2021 00:00:00\n */\nexport default function previousMonday(date) {\n  requiredArgs(1, arguments);\n  return previousDay(date, 1);\n}","import requiredArgs from \"../_lib/requiredArgs/index.js\";\nimport previousDay from \"../previousDay/index.js\";\n/**\n * @name previousSaturday\n * @category Weekday Helpers\n * @summary When is the previous Saturday?\n *\n * @description\n * When is the previous Saturday?\n *\n * @param {Date | number} date - the date to start counting from\n * @returns {Date} the previous Saturday\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // When is the previous Saturday before Jun, 20, 2021?\n * const result = previousSaturday(new Date(2021, 5, 20))\n * //=> Sat June 19 2021 00:00:00\n */\nexport default function previousSaturday(date) {\n  requiredArgs(1, arguments);\n  return previousDay(date, 6);\n}","import requiredArgs from \"../_lib/requiredArgs/index.js\";\nimport previousDay from \"../previousDay/index.js\";\n/**\n * @name previousSunday\n * @category Weekday Helpers\n * @summary When is the previous Sunday?\n *\n * @description\n * When is the previous Sunday?\n *\n * @param {Date | number} date - the date to start counting from\n * @returns {Date} the previous Sunday\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // When is the previous Sunday before Jun, 21, 2021?\n * const result = previousSunday(new Date(2021, 5, 21))\n * //=> Sun June 20 2021 00:00:00\n */\nexport default function previousSunday(date) {\n  requiredArgs(1, arguments);\n  return previousDay(date, 0);\n}","import requiredArgs from \"../_lib/requiredArgs/index.js\";\nimport previousDay from \"../previousDay/index.js\";\n/**\n * @name previousThursday\n * @category Weekday Helpers\n * @summary When is the previous Thursday?\n *\n * @description\n * When is the previous Thursday?\n *\n * @param {Date | number} date - the date to start counting from\n * @returns {Date} the previous Thursday\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // When is the previous Thursday before Jun, 18, 2021?\n * const result = previousThursday(new Date(2021, 5, 18))\n * //=> Thu June 17 2021 00:00:00\n */\nexport default function previousThursday(date) {\n  requiredArgs(1, arguments);\n  return previousDay(date, 4);\n}","import requiredArgs from \"../_lib/requiredArgs/index.js\";\nimport previousDay from \"../previousDay/index.js\";\n/**\n * @name previousTuesday\n * @category Weekday Helpers\n * @summary When is the previous Tuesday?\n *\n * @description\n * When is the previous Tuesday?\n *\n * @param {Date | number} date - the date to start counting from\n * @returns {Date} the previous Tuesday\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // When is the previous Tuesday before Jun, 18, 2021?\n * const result = previousTuesday(new Date(2021, 5, 18))\n * //=> Tue June 15 2021 00:00:00\n */\nexport default function previousTuesday(date) {\n  requiredArgs(1, arguments);\n  return previousDay(date, 2);\n}","import requiredArgs from \"../_lib/requiredArgs/index.js\";\nimport previousDay from \"../previousDay/index.js\";\n/**\n * @name previousWednesday\n * @category Weekday Helpers\n * @summary When is the previous Wednesday?\n *\n * @description\n * When is the previous Wednesday?\n *\n * @param {Date | number} date - the date to start counting from\n * @returns {Date} the previous Wednesday\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // When is the previous Wednesday before Jun, 18, 2021?\n * const result = previousWednesday(new Date(2021, 5, 18))\n * //=> Wed June 16 2021 00:00:00\n */\nexport default function previousWednesday(date) {\n  requiredArgs(1, arguments);\n  return previousDay(date, 3);\n}","import requiredArgs from \"../_lib/requiredArgs/index.js\";\nimport { monthsInQuarter } from \"../constants/index.js\";\n/**\n * @name quartersToMonths\n * @category Conversion Helpers\n * @summary Convert number of quarters to months.\n *\n * @description\n * Convert a number of quarters to a full number of months.\n *\n * @param {number} quarters - number of quarters to be converted\n *\n * @returns {number} the number of quarters converted in months\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Convert 2 quarters to months\n * const result = quartersToMonths(2)\n * //=> 6\n */\nexport default function quartersToMonths(quarters) {\n  requiredArgs(1, arguments);\n  return Math.floor(quarters * monthsInQuarter);\n}","import requiredArgs from \"../_lib/requiredArgs/index.js\";\nimport { quartersInYear } from \"../constants/index.js\";\n/**\n * @name quartersToYears\n * @category Conversion Helpers\n * @summary Convert number of quarters to years.\n *\n * @description\n * Convert a number of quarters to a full number of years.\n *\n * @param {number} quarters - number of quarters to be converted\n *\n * @returns {number} the number of quarters converted in years\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Convert 8 quarters to years\n * const result = quartersToYears(8)\n * //=> 2\n *\n * @example\n * // It uses floor rounding:\n * const result = quartersToYears(11)\n * //=> 2\n */\nexport default function quartersToYears(quarters) {\n  requiredArgs(1, arguments);\n  var years = quarters / quartersInYear;\n  return Math.floor(years);\n}","import toDate from \"../toDate/index.js\";\nimport { getRoundingMethod } from \"../_lib/roundingMethods/index.js\";\nimport toInteger from \"../_lib/toInteger/index.js\";\n/**\n * @name roundToNearestMinutes\n * @category Minute Helpers\n * @summary Rounds the given date to the nearest minute\n *\n * @description\n * Rounds the given date to the nearest minute (or number of minutes).\n * Rounds up when the given date is exactly between the nearest round minutes.\n *\n * @param {Date|Number} date - the date to round\n * @param {Object} [options] - an object with options.\n * @param {Number} [options.nearestTo=1] - nearest number of minutes to round to. E.g. `15` to round to quarter hours.\n * @param {String} [options.roundingMethod='trunc'] - a rounding method (`ceil`, `floor`, `round` or `trunc`)\n * @returns {Date} the new date rounded to the closest minute\n * @throws {TypeError} 1 argument required\n * @throws {RangeError} `options.nearestTo` must be between 1 and 30\n *\n * @example\n * // Round 10 July 2014 12:12:34 to nearest minute:\n * const result = roundToNearestMinutes(new Date(2014, 6, 10, 12, 12, 34))\n * //=> Thu Jul 10 2014 12:13:00\n *\n * @example\n * // Round 10 July 2014 12:07:30 to nearest quarter hour:\n * const result = roundToNearestMinutes(new Date(2014, 6, 10, 12, 12, 34), { nearestTo: 15 })\n * // rounds up because given date is exactly between 12:00:00 and 12:15:00\n * //=> Thu Jul 10 2014 12:15:00\n */\nexport default function roundToNearestMinutes(dirtyDate, options) {\n  var _options$nearestTo;\n  if (arguments.length < 1) {\n    throw new TypeError('1 argument required, but only none provided present');\n  }\n  var nearestTo = toInteger((_options$nearestTo = options === null || options === void 0 ? void 0 : options.nearestTo) !== null && _options$nearestTo !== void 0 ? _options$nearestTo : 1);\n  if (nearestTo < 1 || nearestTo > 30) {\n    throw new RangeError('`options.nearestTo` must be between 1 and 30');\n  }\n  var date = toDate(dirtyDate);\n  var seconds = date.getSeconds(); // relevant if nearestTo is 1, which is the default case\n  var minutes = date.getMinutes() + seconds / 60;\n  var roundingMethod = getRoundingMethod(options === null || options === void 0 ? void 0 : options.roundingMethod);\n  var roundedMinutes = roundingMethod(minutes / nearestTo) * nearestTo;\n  var remainderMinutes = minutes % nearestTo;\n  var addedMinutes = Math.round(remainderMinutes / nearestTo) * nearestTo;\n  return new Date(date.getFullYear(), date.getMonth(), date.getDate(), date.getHours(), roundedMinutes + addedMinutes);\n}","import requiredArgs from \"../_lib/requiredArgs/index.js\";\nimport { secondsInHour } from \"../constants/index.js\";\n/**\n * @name secondsToHours\n * @category Conversion Helpers\n * @summary Convert seconds to hours.\n *\n * @description\n * Convert a number of seconds to a full number of hours.\n *\n * @param {number} seconds - number of seconds to be converted\n *\n * @returns {number} the number of seconds converted in hours\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Convert 7200 seconds into hours\n * const result = secondsToHours(7200)\n * //=> 2\n *\n * @example\n * // It uses floor rounding:\n * const result = secondsToHours(7199)\n * //=> 1\n */\nexport default function secondsToHours(seconds) {\n  requiredArgs(1, arguments);\n  var hours = seconds / secondsInHour;\n  return Math.floor(hours);\n}","import requiredArgs from \"../_lib/requiredArgs/index.js\";\nimport { millisecondsInSecond } from \"../constants/index.js\";\n/**\n * @name secondsToMilliseconds\n * @category Conversion Helpers\n * @summary Convert seconds to milliseconds.\n *\n * @description\n * Convert a number of seconds to a full number of milliseconds.\n *\n * @param {number} seconds - number of seconds to be converted\n *\n * @returns {number} the number of seconds converted in milliseconds\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Convert 2 seconds into milliseconds\n * const result = secondsToMilliseconds(2)\n * //=> 2000\n */\nexport default function secondsToMilliseconds(seconds) {\n  requiredArgs(1, arguments);\n  return seconds * millisecondsInSecond;\n}","import requiredArgs from \"../_lib/requiredArgs/index.js\";\nimport { secondsInMinute } from \"../constants/index.js\";\n/**\n * @name secondsToMinutes\n * @category Conversion Helpers\n * @summary Convert seconds to minutes.\n *\n * @description\n * Convert a number of seconds to a full number of minutes.\n *\n * @param {number} seconds - number of seconds to be converted\n *\n * @returns {number} the number of seconds converted in minutes\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Convert 120 seconds into minutes\n * const result = secondsToMinutes(120)\n * //=> 2\n *\n * @example\n * // It uses floor rounding:\n * const result = secondsToMinutes(119)\n * //=> 1\n */\nexport default function secondsToMinutes(seconds) {\n  requiredArgs(1, arguments);\n  var minutes = seconds / secondsInMinute;\n  return Math.floor(minutes);\n}","import _typeof from \"@babel/runtime/helpers/esm/typeof\";\nimport toDate from \"../toDate/index.js\";\nimport setMonth from \"../setMonth/index.js\";\nimport toInteger from \"../_lib/toInteger/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name set\n * @category Common Helpers\n * @summary Set date values to a given date.\n *\n * @description\n * Set date values to a given date.\n *\n * Sets time values to date from object `values`.\n * A value is not set if it is undefined or null or doesn't exist in `values`.\n *\n * Note about bundle size: `set` does not internally use `setX` functions from date-fns but instead opts\n * to use native `Date#setX` methods. If you use this function, you may not want to include the\n * other `setX` functions that date-fns provides if you are concerned about the bundle size.\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Object} values - an object with options\n * @param {Number} [values.year] - the number of years to be set\n * @param {Number} [values.month] - the number of months to be set\n * @param {Number} [values.date] - the number of days to be set\n * @param {Number} [values.hours] - the number of hours to be set\n * @param {Number} [values.minutes] - the number of minutes to be set\n * @param {Number} [values.seconds] - the number of seconds to be set\n * @param {Number} [values.milliseconds] - the number of milliseconds to be set\n * @returns {Date} the new date with options set\n * @throws {TypeError} 2 arguments required\n * @throws {RangeError} `values` must be an object\n *\n * @example\n * // Transform 1 September 2014 into 20 October 2015 in a single line:\n * const result = set(new Date(2014, 8, 20), { year: 2015, month: 9, date: 20 })\n * //=> Tue Oct 20 2015 00:00:00\n *\n * @example\n * // Set 12 PM to 1 September 2014 01:23:45 to 1 September 2014 12:00:00:\n * const result = set(new Date(2014, 8, 1, 1, 23, 45), { hours: 12 })\n * //=> Mon Sep 01 2014 12:23:45\n */\nexport default function set(dirtyDate, values) {\n  requiredArgs(2, arguments);\n  if (_typeof(values) !== 'object' || values === null) {\n    throw new RangeError('values parameter must be an object');\n  }\n  var date = toDate(dirtyDate);\n\n  // Check if date is Invalid Date because Date.prototype.setFullYear ignores the value of Invalid Date\n  if (isNaN(date.getTime())) {\n    return new Date(NaN);\n  }\n  if (values.year != null) {\n    date.setFullYear(values.year);\n  }\n  if (values.month != null) {\n    date = setMonth(date, values.month);\n  }\n  if (values.date != null) {\n    date.setDate(toInteger(values.date));\n  }\n  if (values.hours != null) {\n    date.setHours(toInteger(values.hours));\n  }\n  if (values.minutes != null) {\n    date.setMinutes(toInteger(values.minutes));\n  }\n  if (values.seconds != null) {\n    date.setSeconds(toInteger(values.seconds));\n  }\n  if (values.milliseconds != null) {\n    date.setMilliseconds(toInteger(values.milliseconds));\n  }\n  return date;\n}","import toInteger from \"../_lib/toInteger/index.js\";\nimport toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name setDate\n * @category Day Helpers\n * @summary Set the day of the month to the given date.\n *\n * @description\n * Set the day of the month to the given date.\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} dayOfMonth - the day of the month of the new date\n * @returns {Date} the new date with the day of the month set\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Set the 30th day of the month to 1 September 2014:\n * const result = setDate(new Date(2014, 8, 1), 30)\n * //=> Tue Sep 30 2014 00:00:00\n */\nexport default function setDate(dirtyDate, dirtyDayOfMonth) {\n  requiredArgs(2, arguments);\n  var date = toDate(dirtyDate);\n  var dayOfMonth = toInteger(dirtyDayOfMonth);\n  date.setDate(dayOfMonth);\n  return date;\n}","import addDays from \"../addDays/index.js\";\nimport toDate from \"../toDate/index.js\";\nimport toInteger from \"../_lib/toInteger/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\nimport { getDefaultOptions } from \"../_lib/defaultOptions/index.js\";\n/**\n * @name setDay\n * @category Weekday Helpers\n * @summary Set the day of the week to the given date.\n *\n * @description\n * Set the day of the week to the given date.\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} day - the day of the week of the new date\n * @param {Object} [options] - an object with options.\n * @param {Locale} [options.locale=defaultLocale] - the locale object. See [Locale]{@link https://date-fns.org/docs/Locale}\n * @param {0|1|2|3|4|5|6} [options.weekStartsOn=0] - the index of the first day of the week (0 - Sunday)\n * @returns {Date} the new date with the day of the week set\n * @throws {TypeError} 2 arguments required\n * @throws {RangeError} `options.weekStartsOn` must be between 0 and 6\n *\n * @example\n * // Set week day to Sunday, with the default weekStartsOn of Sunday:\n * const result = setDay(new Date(2014, 8, 1), 0)\n * //=> Sun Aug 31 2014 00:00:00\n *\n * @example\n * // Set week day to Sunday, with a weekStartsOn of Monday:\n * const result = setDay(new Date(2014, 8, 1), 0, { weekStartsOn: 1 })\n * //=> Sun Sep 07 2014 00:00:00\n */\nexport default function setDay(dirtyDate, dirtyDay, options) {\n  var _ref, _ref2, _ref3, _options$weekStartsOn, _options$locale, _options$locale$optio, _defaultOptions$local, _defaultOptions$local2;\n  requiredArgs(2, arguments);\n  var defaultOptions = getDefaultOptions();\n  var weekStartsOn = toInteger((_ref = (_ref2 = (_ref3 = (_options$weekStartsOn = options === null || options === void 0 ? void 0 : options.weekStartsOn) !== null && _options$weekStartsOn !== void 0 ? _options$weekStartsOn : options === null || options === void 0 ? void 0 : (_options$locale = options.locale) === null || _options$locale === void 0 ? void 0 : (_options$locale$optio = _options$locale.options) === null || _options$locale$optio === void 0 ? void 0 : _options$locale$optio.weekStartsOn) !== null && _ref3 !== void 0 ? _ref3 : defaultOptions.weekStartsOn) !== null && _ref2 !== void 0 ? _ref2 : (_defaultOptions$local = defaultOptions.locale) === null || _defaultOptions$local === void 0 ? void 0 : (_defaultOptions$local2 = _defaultOptions$local.options) === null || _defaultOptions$local2 === void 0 ? void 0 : _defaultOptions$local2.weekStartsOn) !== null && _ref !== void 0 ? _ref : 0);\n\n  // Test if weekStartsOn is between 0 and 6 _and_ is not NaN\n  if (!(weekStartsOn >= 0 && weekStartsOn <= 6)) {\n    throw new RangeError('weekStartsOn must be between 0 and 6 inclusively');\n  }\n  var date = toDate(dirtyDate);\n  var day = toInteger(dirtyDay);\n  var currentDay = date.getDay();\n  var remainder = day % 7;\n  var dayIndex = (remainder + 7) % 7;\n  var delta = 7 - weekStartsOn;\n  var diff = day < 0 || day > 6 ? day - (currentDay + delta) % 7 : (dayIndex + delta) % 7 - (currentDay + delta) % 7;\n  return addDays(date, diff);\n}","import toInteger from \"../_lib/toInteger/index.js\";\nimport toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name setDayOfYear\n * @category Day Helpers\n * @summary Set the day of the year to the given date.\n *\n * @description\n * Set the day of the year to the given date.\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} dayOfYear - the day of the year of the new date\n * @returns {Date} the new date with the day of the year set\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Set the 2nd day of the year to 2 July 2014:\n * const result = setDayOfYear(new Date(2014, 6, 2), 2)\n * //=> Thu Jan 02 2014 00:00:00\n */\nexport default function setDayOfYear(dirtyDate, dirtyDayOfYear) {\n  requiredArgs(2, arguments);\n  var date = toDate(dirtyDate);\n  var dayOfYear = toInteger(dirtyDayOfYear);\n  date.setMonth(0);\n  date.setDate(dayOfYear);\n  return date;\n}","import { getDefaultOptions, setDefaultOptions as setInternalDefaultOptions } from \"../_lib/defaultOptions/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name setDefaultOptions\n * @category Common Helpers\n * @summary Set default options including locale.\n * @pure false\n *\n * @description\n * Sets the defaults for\n * `options.locale`, `options.weekStartsOn` and `options.firstWeekContainsDate`\n * arguments for all functions.\n *\n * @param {Object} newOptions - an object with options.\n * @param {Locale} [newOptions.locale] - the locale object. See [Locale]{@link https://date-fns.org/docs/Locale}\n * @param {0|1|2|3|4|5|6} [newOptions.weekStartsOn] - the index of the first day of the week (0 - Sunday)\n * @param {1|2|3|4|5|6|7} [newOptions.firstWeekContainsDate] - the day of January, which is always in the first week of the year\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Set global locale:\n * import { es } from 'date-fns/locale'\n * setDefaultOptions({ locale: es })\n * const result = format(new Date(2014, 8, 2), 'PPPP')\n * //=> 'martes, 2 de septiembre de 2014'\n *\n * @example\n * // Start of the week for 2 September 2014:\n * const result = startOfWeek(new Date(2014, 8, 2))\n * //=> Sun Aug 31 2014 00:00:00\n *\n * @example\n * // Start of the week for 2 September 2014,\n * // when we set that week starts on Monday by default:\n * setDefaultOptions({ weekStartsOn: 1 })\n * const result = startOfWeek(new Date(2014, 8, 2))\n * //=> Mon Sep 01 2014 00:00:00\n *\n * @example\n * // Manually set options take priority over default options:\n * setDefaultOptions({ weekStartsOn: 1 })\n * const result = startOfWeek(new Date(2014, 8, 2), { weekStartsOn: 0 })\n * //=> Sun Aug 31 2014 00:00:00\n *\n * @example\n * // Remove the option by setting it to `undefined`:\n * setDefaultOptions({ weekStartsOn: 1 })\n * setDefaultOptions({ weekStartsOn: undefined })\n * const result = startOfWeek(new Date(2014, 8, 2))\n * //=> Sun Aug 31 2014 00:00:00\n */\nexport default function setDefaultOptions(newOptions) {\n  requiredArgs(1, arguments);\n  var result = {};\n  var defaultOptions = getDefaultOptions();\n  for (var property in defaultOptions) {\n    if (Object.prototype.hasOwnProperty.call(defaultOptions, property)) {\n      ;\n      result[property] = defaultOptions[property];\n    }\n  }\n  for (var _property in newOptions) {\n    if (Object.prototype.hasOwnProperty.call(newOptions, _property)) {\n      if (newOptions[_property] === undefined) {\n        delete result[_property];\n      } else {\n        ;\n        result[_property] = newOptions[_property];\n      }\n    }\n  }\n  setInternalDefaultOptions(result);\n}","import toInteger from \"../_lib/toInteger/index.js\";\nimport toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name setHours\n * @category Hour Helpers\n * @summary Set the hours to the given date.\n *\n * @description\n * Set the hours to the given date.\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} hours - the hours of the new date\n * @returns {Date} the new date with the hours set\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Set 4 hours to 1 September 2014 11:30:00:\n * const result = setHours(new Date(2014, 8, 1, 11, 30), 4)\n * //=> Mon Sep 01 2014 04:30:00\n */\nexport default function setHours(dirtyDate, dirtyHours) {\n  requiredArgs(2, arguments);\n  var date = toDate(dirtyDate);\n  var hours = toInteger(dirtyHours);\n  date.setHours(hours);\n  return date;\n}","import toInteger from \"../_lib/toInteger/index.js\";\nimport toDate from \"../toDate/index.js\";\nimport addDays from \"../addDays/index.js\";\nimport getISODay from \"../getISODay/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name setISODay\n * @category Weekday Helpers\n * @summary Set the day of the ISO week to the given date.\n *\n * @description\n * Set the day of the ISO week to the given date.\n * ISO week starts with Monday.\n * 7 is the index of Sunday, 1 is the index of Monday etc.\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} day - the day of the ISO week of the new date\n * @returns {Date} the new date with the day of the ISO week set\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Set Sunday to 1 September 2014:\n * const result = setISODay(new Date(2014, 8, 1), 7)\n * //=> Sun Sep 07 2014 00:00:00\n */\nexport default function setISODay(dirtyDate, dirtyDay) {\n  requiredArgs(2, arguments);\n  var date = toDate(dirtyDate);\n  var day = toInteger(dirtyDay);\n  var currentDay = getISODay(date);\n  var diff = day - currentDay;\n  return addDays(date, diff);\n}","import toInteger from \"../_lib/toInteger/index.js\";\nimport toDate from \"../toDate/index.js\";\nimport getISOWeek from \"../getISOWeek/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name setISOWeek\n * @category ISO Week Helpers\n * @summary Set the ISO week to the given date.\n *\n * @description\n * Set the ISO week to the given date, saving the weekday number.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} isoWeek - the ISO week of the new date\n * @returns {Date} the new date with the ISO week set\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Set the 53rd ISO week to 7 August 2004:\n * const result = setISOWeek(new Date(2004, 7, 7), 53)\n * //=> Sat Jan 01 2005 00:00:00\n */\nexport default function setISOWeek(dirtyDate, dirtyISOWeek) {\n  requiredArgs(2, arguments);\n  var date = toDate(dirtyDate);\n  var isoWeek = toInteger(dirtyISOWeek);\n  var diff = getISOWeek(date) - isoWeek;\n  date.setDate(date.getDate() - diff * 7);\n  return date;\n}","import toInteger from \"../_lib/toInteger/index.js\";\nimport toDate from \"../toDate/index.js\";\nimport startOfISOWeekYear from \"../startOfISOWeekYear/index.js\";\nimport differenceInCalendarDays from \"../differenceInCalendarDays/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name setISOWeekYear\n * @category ISO Week-Numbering Year Helpers\n * @summary Set the ISO week-numbering year to the given date.\n *\n * @description\n * Set the ISO week-numbering year to the given date,\n * saving the week number and the weekday number.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} isoWeekYear - the ISO week-numbering year of the new date\n * @returns {Date} the new date with the ISO week-numbering year set\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Set ISO week-numbering year 2007 to 29 December 2008:\n * const result = setISOWeekYear(new Date(2008, 11, 29), 2007)\n * //=> Mon Jan 01 2007 00:00:00\n */\nexport default function setISOWeekYear(dirtyDate, dirtyISOWeekYear) {\n  requiredArgs(2, arguments);\n  var date = toDate(dirtyDate);\n  var isoWeekYear = toInteger(dirtyISOWeekYear);\n  var diff = differenceInCalendarDays(date, startOfISOWeekYear(date));\n  var fourthOfJanuary = new Date(0);\n  fourthOfJanuary.setFullYear(isoWeekYear, 0, 4);\n  fourthOfJanuary.setHours(0, 0, 0, 0);\n  date = startOfISOWeekYear(fourthOfJanuary);\n  date.setDate(date.getDate() + diff);\n  return date;\n}","import toInteger from \"../_lib/toInteger/index.js\";\nimport toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name setMilliseconds\n * @category Millisecond Helpers\n * @summary Set the milliseconds to the given date.\n *\n * @description\n * Set the milliseconds to the given date.\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} milliseconds - the milliseconds of the new date\n * @returns {Date} the new date with the milliseconds set\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Set 300 milliseconds to 1 September 2014 11:30:40.500:\n * const result = setMilliseconds(new Date(2014, 8, 1, 11, 30, 40, 500), 300)\n * //=> Mon Sep 01 2014 11:30:40.300\n */\nexport default function setMilliseconds(dirtyDate, dirtyMilliseconds) {\n  requiredArgs(2, arguments);\n  var date = toDate(dirtyDate);\n  var milliseconds = toInteger(dirtyMilliseconds);\n  date.setMilliseconds(milliseconds);\n  return date;\n}","import toInteger from \"../_lib/toInteger/index.js\";\nimport toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name setMinutes\n * @category Minute Helpers\n * @summary Set the minutes to the given date.\n *\n * @description\n * Set the minutes to the given date.\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} minutes - the minutes of the new date\n * @returns {Date} the new date with the minutes set\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Set 45 minutes to 1 September 2014 11:30:40:\n * const result = setMinutes(new Date(2014, 8, 1, 11, 30, 40), 45)\n * //=> Mon Sep 01 2014 11:45:40\n */\nexport default function setMinutes(dirtyDate, dirtyMinutes) {\n  requiredArgs(2, arguments);\n  var date = toDate(dirtyDate);\n  var minutes = toInteger(dirtyMinutes);\n  date.setMinutes(minutes);\n  return date;\n}","import toInteger from \"../_lib/toInteger/index.js\";\nimport toDate from \"../toDate/index.js\";\nimport getDaysInMonth from \"../getDaysInMonth/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name setMonth\n * @category Month Helpers\n * @summary Set the month to the given date.\n *\n * @description\n * Set the month to the given date.\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} month - the month of the new date\n * @returns {Date} the new date with the month set\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Set February to 1 September 2014:\n * const result = setMonth(new Date(2014, 8, 1), 1)\n * //=> Sat Feb 01 2014 00:00:00\n */\nexport default function setMonth(dirtyDate, dirtyMonth) {\n  requiredArgs(2, arguments);\n  var date = toDate(dirtyDate);\n  var month = toInteger(dirtyMonth);\n  var year = date.getFullYear();\n  var day = date.getDate();\n  var dateWithDesiredMonth = new Date(0);\n  dateWithDesiredMonth.setFullYear(year, month, 15);\n  dateWithDesiredMonth.setHours(0, 0, 0, 0);\n  var daysInMonth = getDaysInMonth(dateWithDesiredMonth);\n  // Set the last day of the new month\n  // if the original date was the last day of the longer month\n  date.setMonth(month, Math.min(day, daysInMonth));\n  return date;\n}","import toInteger from \"../_lib/toInteger/index.js\";\nimport toDate from \"../toDate/index.js\";\nimport setMonth from \"../setMonth/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name setQuarter\n * @category Quarter Helpers\n * @summary Set the year quarter to the given date.\n *\n * @description\n * Set the year quarter to the given date.\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} quarter - the quarter of the new date\n * @returns {Date} the new date with the quarter set\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Set the 2nd quarter to 2 July 2014:\n * const result = setQuarter(new Date(2014, 6, 2), 2)\n * //=> Wed Apr 02 2014 00:00:00\n */\nexport default function setQuarter(dirtyDate, dirtyQuarter) {\n  requiredArgs(2, arguments);\n  var date = toDate(dirtyDate);\n  var quarter = toInteger(dirtyQuarter);\n  var oldQuarter = Math.floor(date.getMonth() / 3) + 1;\n  var diff = quarter - oldQuarter;\n  return setMonth(date, date.getMonth() + diff * 3);\n}","import toInteger from \"../_lib/toInteger/index.js\";\nimport toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name setSeconds\n * @category Second Helpers\n * @summary Set the seconds to the given date.\n *\n * @description\n * Set the seconds to the given date.\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} seconds - the seconds of the new date\n * @returns {Date} the new date with the seconds set\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Set 45 seconds to 1 September 2014 11:30:40:\n * const result = setSeconds(new Date(2014, 8, 1, 11, 30, 40), 45)\n * //=> Mon Sep 01 2014 11:30:45\n */\nexport default function setSeconds(dirtyDate, dirtySeconds) {\n  requiredArgs(2, arguments);\n  var date = toDate(dirtyDate);\n  var seconds = toInteger(dirtySeconds);\n  date.setSeconds(seconds);\n  return date;\n}","import getWeek from \"../getWeek/index.js\";\nimport toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\nimport toInteger from \"../_lib/toInteger/index.js\";\n/**\n * @name setWeek\n * @category Week Helpers\n * @summary Set the local week to the given date.\n *\n * @description\n * Set the local week to the given date, saving the weekday number.\n * The exact calculation depends on the values of\n * `options.weekStartsOn` (which is the index of the first day of the week)\n * and `options.firstWeekContainsDate` (which is the day of January, which is always in\n * the first week of the week-numbering year)\n *\n * Week numbering: https://en.wikipedia.org/wiki/Week#Week_numbering\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} week - the week of the new date\n * @param {Object} [options] - an object with options.\n * @param {Locale} [options.locale=defaultLocale] - the locale object. See [Locale]{@link https://date-fns.org/docs/Locale}\n * @param {0|1|2|3|4|5|6} [options.weekStartsOn=0] - the index of the first day of the week (0 - Sunday)\n * @param {1|2|3|4|5|6|7} [options.firstWeekContainsDate=1] - the day of January, which is always in the first week of the year\n * @returns {Date} the new date with the local week set\n * @throws {TypeError} 2 arguments required\n * @throws {RangeError} `options.weekStartsOn` must be between 0 and 6\n * @throws {RangeError} `options.firstWeekContainsDate` must be between 1 and 7\n *\n * @example\n * // Set the 1st week to 2 January 2005 with default options:\n * const result = setWeek(new Date(2005, 0, 2), 1)\n * //=> Sun Dec 26 2004 00:00:00\n *\n * @example\n * // Set the 1st week to 2 January 2005,\n * // if Monday is the first day of the week,\n * // and the first week of the year always contains 4 January:\n * const result = setWeek(new Date(2005, 0, 2), 1, {\n *   weekStartsOn: 1,\n *   firstWeekContainsDate: 4\n * })\n * //=> Sun Jan 4 2004 00:00:00\n */\nexport default function setWeek(dirtyDate, dirtyWeek, options) {\n  requiredArgs(2, arguments);\n  var date = toDate(dirtyDate);\n  var week = toInteger(dirtyWeek);\n  var diff = getWeek(date, options) - week;\n  date.setDate(date.getDate() - diff * 7);\n  return date;\n}","import differenceInCalendarDays from \"../differenceInCalendarDays/index.js\";\nimport startOfWeekYear from \"../startOfWeekYear/index.js\";\nimport toDate from \"../toDate/index.js\";\nimport toInteger from \"../_lib/toInteger/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\nimport { getDefaultOptions } from \"../_lib/defaultOptions/index.js\";\n/**\n * @name setWeekYear\n * @category Week-Numbering Year Helpers\n * @summary Set the local week-numbering year to the given date.\n *\n * @description\n * Set the local week-numbering year to the given date,\n * saving the week number and the weekday number.\n * The exact calculation depends on the values of\n * `options.weekStartsOn` (which is the index of the first day of the week)\n * and `options.firstWeekContainsDate` (which is the day of January, which is always in\n * the first week of the week-numbering year)\n *\n * Week numbering: https://en.wikipedia.org/wiki/Week#Week_numbering\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} weekYear - the local week-numbering year of the new date\n * @param {Object} [options] - an object with options.\n * @param {Locale} [options.locale=defaultLocale] - the locale object. See [Locale]{@link https://date-fns.org/docs/Locale}\n * @param {0|1|2|3|4|5|6} [options.weekStartsOn=0] - the index of the first day of the week (0 - Sunday)\n * @param {1|2|3|4|5|6|7} [options.firstWeekContainsDate=1] - the day of January, which is always in the first week of the year\n * @returns {Date} the new date with the local week-numbering year set\n * @throws {TypeError} 2 arguments required\n * @throws {RangeError} `options.weekStartsOn` must be between 0 and 6\n * @throws {RangeError} `options.firstWeekContainsDate` must be between 1 and 7\n *\n * @example\n * // Set the local week-numbering year 2004 to 2 January 2010 with default options:\n * const result = setWeekYear(new Date(2010, 0, 2), 2004)\n * //=> Sat Jan 03 2004 00:00:00\n *\n * @example\n * // Set the local week-numbering year 2004 to 2 January 2010,\n * // if Monday is the first day of week\n * // and 4 January is always in the first week of the year:\n * const result = setWeekYear(new Date(2010, 0, 2), 2004, {\n *   weekStartsOn: 1,\n *   firstWeekContainsDate: 4\n * })\n * //=> Sat Jan 01 2005 00:00:00\n */\nexport default function setWeekYear(dirtyDate, dirtyWeekYear, options) {\n  var _ref, _ref2, _ref3, _options$firstWeekCon, _options$locale, _options$locale$optio, _defaultOptions$local, _defaultOptions$local2;\n  requiredArgs(2, arguments);\n  var defaultOptions = getDefaultOptions();\n  var firstWeekContainsDate = toInteger((_ref = (_ref2 = (_ref3 = (_options$firstWeekCon = options === null || options === void 0 ? void 0 : options.firstWeekContainsDate) !== null && _options$firstWeekCon !== void 0 ? _options$firstWeekCon : options === null || options === void 0 ? void 0 : (_options$locale = options.locale) === null || _options$locale === void 0 ? void 0 : (_options$locale$optio = _options$locale.options) === null || _options$locale$optio === void 0 ? void 0 : _options$locale$optio.firstWeekContainsDate) !== null && _ref3 !== void 0 ? _ref3 : defaultOptions.firstWeekContainsDate) !== null && _ref2 !== void 0 ? _ref2 : (_defaultOptions$local = defaultOptions.locale) === null || _defaultOptions$local === void 0 ? void 0 : (_defaultOptions$local2 = _defaultOptions$local.options) === null || _defaultOptions$local2 === void 0 ? void 0 : _defaultOptions$local2.firstWeekContainsDate) !== null && _ref !== void 0 ? _ref : 1);\n  var date = toDate(dirtyDate);\n  var weekYear = toInteger(dirtyWeekYear);\n  var diff = differenceInCalendarDays(date, startOfWeekYear(date, options));\n  var firstWeek = new Date(0);\n  firstWeek.setFullYear(weekYear, 0, firstWeekContainsDate);\n  firstWeek.setHours(0, 0, 0, 0);\n  date = startOfWeekYear(firstWeek, options);\n  date.setDate(date.getDate() + diff);\n  return date;\n}","import toInteger from \"../_lib/toInteger/index.js\";\nimport toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name setYear\n * @category Year Helpers\n * @summary Set the year to the given date.\n *\n * @description\n * Set the year to the given date.\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} year - the year of the new date\n * @returns {Date} the new date with the year set\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Set year 2013 to 1 September 2014:\n * const result = setYear(new Date(2014, 8, 1), 2013)\n * //=> Sun Sep 01 2013 00:00:00\n */\nexport default function setYear(dirtyDate, dirtyYear) {\n  requiredArgs(2, arguments);\n  var date = toDate(dirtyDate);\n  var year = toInteger(dirtyYear);\n\n  // Check if date is Invalid Date because Date.prototype.setFullYear ignores the value of Invalid Date\n  if (isNaN(date.getTime())) {\n    return new Date(NaN);\n  }\n  date.setFullYear(year);\n  return date;\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name startOfDay\n * @category Day Helpers\n * @summary Return the start of a day for the given date.\n *\n * @description\n * Return the start of a day for the given date.\n * The result will be in the local timezone.\n *\n * @param {Date|Number} date - the original date\n * @returns {Date} the start of a day\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // The start of a day for 2 September 2014 11:55:00:\n * const result = startOfDay(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Tue Sep 02 2014 00:00:00\n */\nexport default function startOfDay(dirtyDate) {\n  requiredArgs(1, arguments);\n  var date = toDate(dirtyDate);\n  date.setHours(0, 0, 0, 0);\n  return date;\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name startOfDecade\n * @category Decade Helpers\n * @summary Return the start of a decade for the given date.\n *\n * @description\n * Return the start of a decade for the given date.\n *\n * @param {Date|Number} date - the original date\n * @returns {Date} the start of a decade\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // The start of a decade for 21 October 2015 00:00:00:\n * const result = startOfDecade(new Date(2015, 9, 21, 00, 00, 00))\n * //=> Jan 01 2010 00:00:00\n */\nexport default function startOfDecade(dirtyDate) {\n  requiredArgs(1, arguments);\n  var date = toDate(dirtyDate);\n  var year = date.getFullYear();\n  var decade = Math.floor(year / 10) * 10;\n  date.setFullYear(decade, 0, 1);\n  date.setHours(0, 0, 0, 0);\n  return date;\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name startOfHour\n * @category Hour Helpers\n * @summary Return the start of an hour for the given date.\n *\n * @description\n * Return the start of an hour for the given date.\n * The result will be in the local timezone.\n *\n * @param {Date|Number} date - the original date\n * @returns {Date} the start of an hour\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // The start of an hour for 2 September 2014 11:55:00:\n * const result = startOfHour(new Date(2014, 8, 2, 11, 55))\n * //=> Tue Sep 02 2014 11:00:00\n */\nexport default function startOfHour(dirtyDate) {\n  requiredArgs(1, arguments);\n  var date = toDate(dirtyDate);\n  date.setMinutes(0, 0, 0);\n  return date;\n}","import startOfWeek from \"../startOfWeek/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name startOfISOWeek\n * @category ISO Week Helpers\n * @summary Return the start of an ISO week for the given date.\n *\n * @description\n * Return the start of an ISO week for the given date.\n * The result will be in the local timezone.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * @param {Date|Number} date - the original date\n * @returns {Date} the start of an ISO week\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // The start of an ISO week for 2 September 2014 11:55:00:\n * const result = startOfISOWeek(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Mon Sep 01 2014 00:00:00\n */\nexport default function startOfISOWeek(dirtyDate) {\n  requiredArgs(1, arguments);\n  return startOfWeek(dirtyDate, {\n    weekStartsOn: 1\n  });\n}","import getISOWeekYear from \"../getISOWeekYear/index.js\";\nimport startOfISOWeek from \"../startOfISOWeek/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name startOfISOWeekYear\n * @category ISO Week-Numbering Year Helpers\n * @summary Return the start of an ISO week-numbering year for the given date.\n *\n * @description\n * Return the start of an ISO week-numbering year,\n * which always starts 3 days before the year's first Thursday.\n * The result will be in the local timezone.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * @param {Date|Number} date - the original date\n * @returns {Date} the start of an ISO week-numbering year\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // The start of an ISO week-numbering year for 2 July 2005:\n * const result = startOfISOWeekYear(new Date(2005, 6, 2))\n * //=> Mon Jan 03 2005 00:00:00\n */\nexport default function startOfISOWeekYear(dirtyDate) {\n  requiredArgs(1, arguments);\n  var year = getISOWeekYear(dirtyDate);\n  var fourthOfJanuary = new Date(0);\n  fourthOfJanuary.setFullYear(year, 0, 4);\n  fourthOfJanuary.setHours(0, 0, 0, 0);\n  var date = startOfISOWeek(fourthOfJanuary);\n  return date;\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name startOfMinute\n * @category Minute Helpers\n * @summary Return the start of a minute for the given date.\n *\n * @description\n * Return the start of a minute for the given date.\n * The result will be in the local timezone.\n *\n * @param {Date|Number} date - the original date\n * @returns {Date} the start of a minute\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // The start of a minute for 1 December 2014 22:15:45.400:\n * const result = startOfMinute(new Date(2014, 11, 1, 22, 15, 45, 400))\n * //=> Mon Dec 01 2014 22:15:00\n */\nexport default function startOfMinute(dirtyDate) {\n  requiredArgs(1, arguments);\n  var date = toDate(dirtyDate);\n  date.setSeconds(0, 0);\n  return date;\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name startOfMonth\n * @category Month Helpers\n * @summary Return the start of a month for the given date.\n *\n * @description\n * Return the start of a month for the given date.\n * The result will be in the local timezone.\n *\n * @param {Date|Number} date - the original date\n * @returns {Date} the start of a month\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // The start of a month for 2 September 2014 11:55:00:\n * const result = startOfMonth(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Mon Sep 01 2014 00:00:00\n */\nexport default function startOfMonth(dirtyDate) {\n  requiredArgs(1, arguments);\n  var date = toDate(dirtyDate);\n  date.setDate(1);\n  date.setHours(0, 0, 0, 0);\n  return date;\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name startOfQuarter\n * @category Quarter Helpers\n * @summary Return the start of a year quarter for the given date.\n *\n * @description\n * Return the start of a year quarter for the given date.\n * The result will be in the local timezone.\n *\n * @param {Date|Number} date - the original date\n * @returns {Date} the start of a quarter\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // The start of a quarter for 2 September 2014 11:55:00:\n * const result = startOfQuarter(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Tue Jul 01 2014 00:00:00\n */\nexport default function startOfQuarter(dirtyDate) {\n  requiredArgs(1, arguments);\n  var date = toDate(dirtyDate);\n  var currentMonth = date.getMonth();\n  var month = currentMonth - currentMonth % 3;\n  date.setMonth(month, 1);\n  date.setHours(0, 0, 0, 0);\n  return date;\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name startOfSecond\n * @category Second Helpers\n * @summary Return the start of a second for the given date.\n *\n * @description\n * Return the start of a second for the given date.\n * The result will be in the local timezone.\n *\n * @param {Date|Number} date - the original date\n * @returns {Date} the start of a second\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // The start of a second for 1 December 2014 22:15:45.400:\n * const result = startOfSecond(new Date(2014, 11, 1, 22, 15, 45, 400))\n * //=> Mon Dec 01 2014 22:15:45.000\n */\nexport default function startOfSecond(dirtyDate) {\n  requiredArgs(1, arguments);\n  var date = toDate(dirtyDate);\n  date.setMilliseconds(0);\n  return date;\n}","import startOfDay from \"../startOfDay/index.js\";\n/**\n * @name startOfToday\n * @category Day Helpers\n * @summary Return the start of today.\n * @pure false\n *\n * @description\n * Return the start of today.\n *\n * > ⚠️ Please note that this function is not present in the FP submodule as\n * > it uses `Date.now()` internally hence impure and can't be safely curried.\n *\n * @returns {Date} the start of today\n *\n * @example\n * // If today is 6 October 2014:\n * const result = startOfToday()\n * //=> Mon Oct 6 2014 00:00:00\n */\nexport default function startOfToday() {\n  return startOfDay(Date.now());\n}","/**\n * @name startOfTomorrow\n * @category Day Helpers\n * @summary Return the start of tomorrow.\n * @pure false\n *\n * @description\n * Return the start of tomorrow.\n *\n * > ⚠️ Please note that this function is not present in the FP submodule as\n * > it uses `new Date()` internally hence impure and can't be safely curried.\n *\n * @returns {Date} the start of tomorrow\n *\n * @example\n * // If today is 6 October 2014:\n * const result = startOfTomorrow()\n * //=> Tue Oct 7 2014 00:00:00\n */\nexport default function startOfTomorrow() {\n  var now = new Date();\n  var year = now.getFullYear();\n  var month = now.getMonth();\n  var day = now.getDate();\n  var date = new Date(0);\n  date.setFullYear(year, month, day + 1);\n  date.setHours(0, 0, 0, 0);\n  return date;\n}","import toDate from \"../toDate/index.js\";\nimport toInteger from \"../_lib/toInteger/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\nimport { getDefaultOptions } from \"../_lib/defaultOptions/index.js\";\n/**\n * @name startOfWeek\n * @category Week Helpers\n * @summary Return the start of a week for the given date.\n *\n * @description\n * Return the start of a week for the given date.\n * The result will be in the local timezone.\n *\n * @param {Date|Number} date - the original date\n * @param {Object} [options] - an object with options.\n * @param {Locale} [options.locale=defaultLocale] - the locale object. See [Locale]{@link https://date-fns.org/docs/Locale}\n * @param {0|1|2|3|4|5|6} [options.weekStartsOn=0] - the index of the first day of the week (0 - Sunday)\n * @returns {Date} the start of a week\n * @throws {TypeError} 1 argument required\n * @throws {RangeError} `options.weekStartsOn` must be between 0 and 6\n *\n * @example\n * // The start of a week for 2 September 2014 11:55:00:\n * const result = startOfWeek(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Sun Aug 31 2014 00:00:00\n *\n * @example\n * // If the week starts on Monday, the start of the week for 2 September 2014 11:55:00:\n * const result = startOfWeek(new Date(2014, 8, 2, 11, 55, 0), { weekStartsOn: 1 })\n * //=> Mon Sep 01 2014 00:00:00\n */\nexport default function startOfWeek(dirtyDate, options) {\n  var _ref, _ref2, _ref3, _options$weekStartsOn, _options$locale, _options$locale$optio, _defaultOptions$local, _defaultOptions$local2;\n  requiredArgs(1, arguments);\n  var defaultOptions = getDefaultOptions();\n  var weekStartsOn = toInteger((_ref = (_ref2 = (_ref3 = (_options$weekStartsOn = options === null || options === void 0 ? void 0 : options.weekStartsOn) !== null && _options$weekStartsOn !== void 0 ? _options$weekStartsOn : options === null || options === void 0 ? void 0 : (_options$locale = options.locale) === null || _options$locale === void 0 ? void 0 : (_options$locale$optio = _options$locale.options) === null || _options$locale$optio === void 0 ? void 0 : _options$locale$optio.weekStartsOn) !== null && _ref3 !== void 0 ? _ref3 : defaultOptions.weekStartsOn) !== null && _ref2 !== void 0 ? _ref2 : (_defaultOptions$local = defaultOptions.locale) === null || _defaultOptions$local === void 0 ? void 0 : (_defaultOptions$local2 = _defaultOptions$local.options) === null || _defaultOptions$local2 === void 0 ? void 0 : _defaultOptions$local2.weekStartsOn) !== null && _ref !== void 0 ? _ref : 0);\n\n  // Test if weekStartsOn is between 0 and 6 _and_ is not NaN\n  if (!(weekStartsOn >= 0 && weekStartsOn <= 6)) {\n    throw new RangeError('weekStartsOn must be between 0 and 6 inclusively');\n  }\n  var date = toDate(dirtyDate);\n  var day = date.getDay();\n  var diff = (day < weekStartsOn ? 7 : 0) + day - weekStartsOn;\n  date.setDate(date.getDate() - diff);\n  date.setHours(0, 0, 0, 0);\n  return date;\n}","import getWeekYear from \"../getWeekYear/index.js\";\nimport startOfWeek from \"../startOfWeek/index.js\";\nimport toInteger from \"../_lib/toInteger/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\nimport { getDefaultOptions } from \"../_lib/defaultOptions/index.js\";\n/**\n * @name startOfWeekYear\n * @category Week-Numbering Year Helpers\n * @summary Return the start of a local week-numbering year for the given date.\n *\n * @description\n * Return the start of a local week-numbering year.\n * The exact calculation depends on the values of\n * `options.weekStartsOn` (which is the index of the first day of the week)\n * and `options.firstWeekContainsDate` (which is the day of January, which is always in\n * the first week of the week-numbering year)\n *\n * Week numbering: https://en.wikipedia.org/wiki/Week#Week_numbering\n *\n * @param {Date|Number} date - the original date\n * @param {Object} [options] - an object with options.\n * @param {Locale} [options.locale=defaultLocale] - the locale object. See [Locale]{@link https://date-fns.org/docs/Locale}\n * @param {0|1|2|3|4|5|6} [options.weekStartsOn=0] - the index of the first day of the week (0 - Sunday)\n * @param {1|2|3|4|5|6|7} [options.firstWeekContainsDate=1] - the day of January, which is always in the first week of the year\n * @returns {Date} the start of a week-numbering year\n * @throws {TypeError} 1 argument required\n * @throws {RangeError} `options.weekStartsOn` must be between 0 and 6\n * @throws {RangeError} `options.firstWeekContainsDate` must be between 1 and 7\n *\n * @example\n * // The start of an a week-numbering year for 2 July 2005 with default settings:\n * const result = startOfWeekYear(new Date(2005, 6, 2))\n * //=> Sun Dec 26 2004 00:00:00\n *\n * @example\n * // The start of a week-numbering year for 2 July 2005\n * // if Monday is the first day of week\n * // and 4 January is always in the first week of the year:\n * const result = startOfWeekYear(new Date(2005, 6, 2), {\n *   weekStartsOn: 1,\n *   firstWeekContainsDate: 4\n * })\n * //=> Mon Jan 03 2005 00:00:00\n */\nexport default function startOfWeekYear(dirtyDate, options) {\n  var _ref, _ref2, _ref3, _options$firstWeekCon, _options$locale, _options$locale$optio, _defaultOptions$local, _defaultOptions$local2;\n  requiredArgs(1, arguments);\n  var defaultOptions = getDefaultOptions();\n  var firstWeekContainsDate = toInteger((_ref = (_ref2 = (_ref3 = (_options$firstWeekCon = options === null || options === void 0 ? void 0 : options.firstWeekContainsDate) !== null && _options$firstWeekCon !== void 0 ? _options$firstWeekCon : options === null || options === void 0 ? void 0 : (_options$locale = options.locale) === null || _options$locale === void 0 ? void 0 : (_options$locale$optio = _options$locale.options) === null || _options$locale$optio === void 0 ? void 0 : _options$locale$optio.firstWeekContainsDate) !== null && _ref3 !== void 0 ? _ref3 : defaultOptions.firstWeekContainsDate) !== null && _ref2 !== void 0 ? _ref2 : (_defaultOptions$local = defaultOptions.locale) === null || _defaultOptions$local === void 0 ? void 0 : (_defaultOptions$local2 = _defaultOptions$local.options) === null || _defaultOptions$local2 === void 0 ? void 0 : _defaultOptions$local2.firstWeekContainsDate) !== null && _ref !== void 0 ? _ref : 1);\n  var year = getWeekYear(dirtyDate, options);\n  var firstWeek = new Date(0);\n  firstWeek.setFullYear(year, 0, firstWeekContainsDate);\n  firstWeek.setHours(0, 0, 0, 0);\n  var date = startOfWeek(firstWeek, options);\n  return date;\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name startOfYear\n * @category Year Helpers\n * @summary Return the start of a year for the given date.\n *\n * @description\n * Return the start of a year for the given date.\n * The result will be in the local timezone.\n *\n * @param {Date|Number} date - the original date\n * @returns {Date} the start of a year\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // The start of a year for 2 September 2014 11:55:00:\n * const result = startOfYear(new Date(2014, 8, 2, 11, 55, 00))\n * //=> Wed Jan 01 2014 00:00:00\n */\nexport default function startOfYear(dirtyDate) {\n  requiredArgs(1, arguments);\n  var cleanDate = toDate(dirtyDate);\n  var date = new Date(0);\n  date.setFullYear(cleanDate.getFullYear(), 0, 1);\n  date.setHours(0, 0, 0, 0);\n  return date;\n}","/**\n * @name startOfYesterday\n * @category Day Helpers\n * @summary Return the start of yesterday.\n * @pure false\n *\n * @description\n * Return the start of yesterday.\n *\n * > ⚠️ Please note that this function is not present in the FP submodule as\n * > it uses `new Date()` internally hence impure and can't be safely curried.\n *\n * @returns {Date} the start of yesterday\n *\n * @example\n * // If today is 6 October 2014:\n * const result = startOfYesterday()\n * //=> Sun Oct 5 2014 00:00:00\n */\nexport default function startOfYesterday() {\n  var now = new Date();\n  var year = now.getFullYear();\n  var month = now.getMonth();\n  var day = now.getDate();\n  var date = new Date(0);\n  date.setFullYear(year, month, day - 1);\n  date.setHours(0, 0, 0, 0);\n  return date;\n}","import _typeof from \"@babel/runtime/helpers/esm/typeof\";\nimport subDays from \"../subDays/index.js\";\nimport subMonths from \"../subMonths/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\nimport toInteger from \"../_lib/toInteger/index.js\";\n/**\n * @name sub\n * @category Common Helpers\n * @summary Subtract the specified years, months, weeks, days, hours, minutes and seconds from the given date.\n *\n * @description\n * Subtract the specified years, months, weeks, days, hours, minutes and seconds from the given date.\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Duration} duration - the object with years, months, weeks, days, hours, minutes and seconds to be subtracted\n *\n * | Key     | Description                        |\n * |---------|------------------------------------|\n * | years   | Amount of years to be subtracted   |\n * | months  | Amount of months to be subtracted  |\n * | weeks   | Amount of weeks to be subtracted   |\n * | days    | Amount of days to be subtracted    |\n * | hours   | Amount of hours to be subtracted   |\n * | minutes | Amount of minutes to be subtracted |\n * | seconds | Amount of seconds to be subtracted |\n *\n * All values default to 0\n *\n * @returns {Date} the new date with the seconds subtracted\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Subtract the following duration from 15 June 2017 15:29:20\n * const result = sub(new Date(2017, 5, 15, 15, 29, 20), {\n *   years: 2,\n *   months: 9,\n *   weeks: 1,\n *   days: 7,\n *   hours: 5,\n *   minutes: 9,\n *   seconds: 30\n * })\n * //=> Mon Sep 1 2014 10:19:50\n */\nexport default function sub(date, duration) {\n  requiredArgs(2, arguments);\n  if (!duration || _typeof(duration) !== 'object') return new Date(NaN);\n  var years = duration.years ? toInteger(duration.years) : 0;\n  var months = duration.months ? toInteger(duration.months) : 0;\n  var weeks = duration.weeks ? toInteger(duration.weeks) : 0;\n  var days = duration.days ? toInteger(duration.days) : 0;\n  var hours = duration.hours ? toInteger(duration.hours) : 0;\n  var minutes = duration.minutes ? toInteger(duration.minutes) : 0;\n  var seconds = duration.seconds ? toInteger(duration.seconds) : 0;\n\n  // Subtract years and months\n  var dateWithoutMonths = subMonths(date, months + years * 12);\n\n  // Subtract weeks and days\n  var dateWithoutDays = subDays(dateWithoutMonths, days + weeks * 7);\n\n  // Subtract hours, minutes and seconds\n  var minutestoSub = minutes + hours * 60;\n  var secondstoSub = seconds + minutestoSub * 60;\n  var mstoSub = secondstoSub * 1000;\n  var finalDate = new Date(dateWithoutDays.getTime() - mstoSub);\n  return finalDate;\n}","import addBusinessDays from \"../addBusinessDays/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\nimport toInteger from \"../_lib/toInteger/index.js\";\n/**\n * @name subBusinessDays\n * @category Day Helpers\n * @summary Substract the specified number of business days (mon - fri) to the given date.\n *\n * @description\n * Substract the specified number of business days (mon - fri) to the given date, ignoring weekends.\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of business days to be subtracted. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`.\n * @returns {Date} the new date with the business days subtracted\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Substract 10 business days from 1 September 2014:\n * const result = subBusinessDays(new Date(2014, 8, 1), 10)\n * //=> Mon Aug 18 2014 00:00:00 (skipped weekend days)\n */\nexport default function subBusinessDays(dirtyDate, dirtyAmount) {\n  requiredArgs(2, arguments);\n  var amount = toInteger(dirtyAmount);\n  return addBusinessDays(dirtyDate, -amount);\n}","import addDays from \"../addDays/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\nimport toInteger from \"../_lib/toInteger/index.js\";\n/**\n * @name subDays\n * @category Day Helpers\n * @summary Subtract the specified number of days from the given date.\n *\n * @description\n * Subtract the specified number of days from the given date.\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of days to be subtracted. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`.\n * @returns {Date} the new date with the days subtracted\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Subtract 10 days from 1 September 2014:\n * const result = subDays(new Date(2014, 8, 1), 10)\n * //=> Fri Aug 22 2014 00:00:00\n */\nexport default function subDays(dirtyDate, dirtyAmount) {\n  requiredArgs(2, arguments);\n  var amount = toInteger(dirtyAmount);\n  return addDays(dirtyDate, -amount);\n}","import addHours from \"../addHours/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\nimport toInteger from \"../_lib/toInteger/index.js\";\n/**\n * @name subHours\n * @category Hour Helpers\n * @summary Subtract the specified number of hours from the given date.\n *\n * @description\n * Subtract the specified number of hours from the given date.\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of hours to be subtracted. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`.\n * @returns {Date} the new date with the hours subtracted\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Subtract 2 hours from 11 July 2014 01:00:00:\n * const result = subHours(new Date(2014, 6, 11, 1, 0), 2)\n * //=> Thu Jul 10 2014 23:00:00\n */\nexport default function subHours(dirtyDate, dirtyAmount) {\n  requiredArgs(2, arguments);\n  var amount = toInteger(dirtyAmount);\n  return addHours(dirtyDate, -amount);\n}","import addISOWeekYears from \"../addISOWeekYears/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\nimport toInteger from \"../_lib/toInteger/index.js\";\n/**\n * @name subISOWeekYears\n * @category ISO Week-Numbering Year Helpers\n * @summary Subtract the specified number of ISO week-numbering years from the given date.\n *\n * @description\n * Subtract the specified number of ISO week-numbering years from the given date.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of ISO week-numbering years to be subtracted. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`.\n * @returns {Date} the new date with the ISO week-numbering years subtracted\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Subtract 5 ISO week-numbering years from 1 September 2014:\n * const result = subISOWeekYears(new Date(2014, 8, 1), 5)\n * //=> Mon Aug 31 2009 00:00:00\n */\nexport default function subISOWeekYears(dirtyDate, dirtyAmount) {\n  requiredArgs(2, arguments);\n  var amount = toInteger(dirtyAmount);\n  return addISOWeekYears(dirtyDate, -amount);\n}","import addMilliseconds from \"../addMilliseconds/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\nimport toInteger from \"../_lib/toInteger/index.js\";\n/**\n * @name subMilliseconds\n * @category Millisecond Helpers\n * @summary Subtract the specified number of milliseconds from the given date.\n *\n * @description\n * Subtract the specified number of milliseconds from the given date.\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of milliseconds to be subtracted. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`.\n * @returns {Date} the new date with the milliseconds subtracted\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Subtract 750 milliseconds from 10 July 2014 12:45:30.000:\n * const result = subMilliseconds(new Date(2014, 6, 10, 12, 45, 30, 0), 750)\n * //=> Thu Jul 10 2014 12:45:29.250\n */\nexport default function subMilliseconds(dirtyDate, dirtyAmount) {\n  requiredArgs(2, arguments);\n  var amount = toInteger(dirtyAmount);\n  return addMilliseconds(dirtyDate, -amount);\n}","import addMinutes from \"../addMinutes/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\nimport toInteger from \"../_lib/toInteger/index.js\";\n/**\n * @name subMinutes\n * @category Minute Helpers\n * @summary Subtract the specified number of minutes from the given date.\n *\n * @description\n * Subtract the specified number of minutes from the given date.\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of minutes to be subtracted. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`.\n * @returns {Date} the new date with the minutes subtracted\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Subtract 30 minutes from 10 July 2014 12:00:00:\n * const result = subMinutes(new Date(2014, 6, 10, 12, 0), 30)\n * //=> Thu Jul 10 2014 11:30:00\n */\nexport default function subMinutes(dirtyDate, dirtyAmount) {\n  requiredArgs(2, arguments);\n  var amount = toInteger(dirtyAmount);\n  return addMinutes(dirtyDate, -amount);\n}","import toInteger from \"../_lib/toInteger/index.js\";\nimport addMonths from \"../addMonths/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name subMonths\n * @category Month Helpers\n * @summary Subtract the specified number of months from the given date.\n *\n * @description\n * Subtract the specified number of months from the given date.\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of months to be subtracted. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`.\n * @returns {Date} the new date with the months subtracted\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Subtract 5 months from 1 February 2015:\n * const result = subMonths(new Date(2015, 1, 1), 5)\n * //=> Mon Sep 01 2014 00:00:00\n */\nexport default function subMonths(dirtyDate, dirtyAmount) {\n  requiredArgs(2, arguments);\n  var amount = toInteger(dirtyAmount);\n  return addMonths(dirtyDate, -amount);\n}","import toInteger from \"../_lib/toInteger/index.js\";\nimport addQuarters from \"../addQuarters/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name subQuarters\n * @category Quarter Helpers\n * @summary Subtract the specified number of year quarters from the given date.\n *\n * @description\n * Subtract the specified number of year quarters from the given date.\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of quarters to be subtracted. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`.\n * @returns {Date} the new date with the quarters subtracted\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Subtract 3 quarters from 1 September 2014:\n * const result = subQuarters(new Date(2014, 8, 1), 3)\n * //=> Sun Dec 01 2013 00:00:00\n */\nexport default function subQuarters(dirtyDate, dirtyAmount) {\n  requiredArgs(2, arguments);\n  var amount = toInteger(dirtyAmount);\n  return addQuarters(dirtyDate, -amount);\n}","import toInteger from \"../_lib/toInteger/index.js\";\nimport addSeconds from \"../addSeconds/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name subSeconds\n * @category Second Helpers\n * @summary Subtract the specified number of seconds from the given date.\n *\n * @description\n * Subtract the specified number of seconds from the given date.\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of seconds to be subtracted. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`.\n * @returns {Date} the new date with the seconds subtracted\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Subtract 30 seconds from 10 July 2014 12:45:00:\n * const result = subSeconds(new Date(2014, 6, 10, 12, 45, 0), 30)\n * //=> Thu Jul 10 2014 12:44:30\n */\nexport default function subSeconds(dirtyDate, dirtyAmount) {\n  requiredArgs(2, arguments);\n  var amount = toInteger(dirtyAmount);\n  return addSeconds(dirtyDate, -amount);\n}","import toInteger from \"../_lib/toInteger/index.js\";\nimport addWeeks from \"../addWeeks/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name subWeeks\n * @category Week Helpers\n * @summary Subtract the specified number of weeks from the given date.\n *\n * @description\n * Subtract the specified number of weeks from the given date.\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of weeks to be subtracted. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`.\n * @returns {Date} the new date with the weeks subtracted\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Subtract 4 weeks from 1 September 2014:\n * const result = subWeeks(new Date(2014, 8, 1), 4)\n * //=> Mon Aug 04 2014 00:00:00\n */\nexport default function subWeeks(dirtyDate, dirtyAmount) {\n  requiredArgs(2, arguments);\n  var amount = toInteger(dirtyAmount);\n  return addWeeks(dirtyDate, -amount);\n}","import toInteger from \"../_lib/toInteger/index.js\";\nimport addYears from \"../addYears/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name subYears\n * @category Year Helpers\n * @summary Subtract the specified number of years from the given date.\n *\n * @description\n * Subtract the specified number of years from the given date.\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of years to be subtracted. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`.\n * @returns {Date} the new date with the years subtracted\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Subtract 5 years from 1 September 2014:\n * const result = subYears(new Date(2014, 8, 1), 5)\n * //=> Tue Sep 01 2009 00:00:00\n */\nexport default function subYears(dirtyDate, dirtyAmount) {\n  requiredArgs(2, arguments);\n  var amount = toInteger(dirtyAmount);\n  return addYears(dirtyDate, -amount);\n}","import _typeof from \"@babel/runtime/helpers/esm/typeof\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name toDate\n * @category Common Helpers\n * @summary Convert the given argument to an instance of Date.\n *\n * @description\n * Convert the given argument to an instance of Date.\n *\n * If the argument is an instance of Date, the function returns its clone.\n *\n * If the argument is a number, it is treated as a timestamp.\n *\n * If the argument is none of the above, the function returns Invalid Date.\n *\n * **Note**: *all* Date arguments passed to any *date-fns* function is processed by `toDate`.\n *\n * @param {Date|Number} argument - the value to convert\n * @returns {Date} the parsed date in the local time zone\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Clone the date:\n * const result = toDate(new Date(2014, 1, 11, 11, 30, 30))\n * //=> Tue Feb 11 2014 11:30:30\n *\n * @example\n * // Convert the timestamp to date:\n * const result = toDate(1392098430000)\n * //=> Tue Feb 11 2014 11:30:30\n */\nexport default function toDate(argument) {\n  requiredArgs(1, arguments);\n  var argStr = Object.prototype.toString.call(argument);\n\n  // Clone the date\n  if (argument instanceof Date || _typeof(argument) === 'object' && argStr === '[object Date]') {\n    // Prevent the date to lose the milliseconds when passed to new Date() in IE10\n    return new Date(argument.getTime());\n  } else if (typeof argument === 'number' || argStr === '[object Number]') {\n    return new Date(argument);\n  } else {\n    if ((typeof argument === 'string' || argStr === '[object String]') && typeof console !== 'undefined') {\n      // eslint-disable-next-line no-console\n      console.warn(\"Starting with v2.0.0-beta.1 date-fns doesn't accept strings as date arguments. Please use `parseISO` to parse strings. See: https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#string-arguments\");\n      // eslint-disable-next-line no-console\n      console.warn(new Error().stack);\n    }\n    return new Date(NaN);\n  }\n}","import requiredArgs from \"../_lib/requiredArgs/index.js\";\nimport { daysInWeek } from \"../constants/index.js\";\n/**\n * @name weeksToDays\n * @category Conversion Helpers\n * @summary Convert weeks to days.\n *\n * @description\n * Convert a number of weeks to a full number of days.\n *\n * @param {number} weeks - number of weeks to be converted\n *\n * @returns {number} the number of weeks converted in days\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Convert 2 weeks into days\n * const result = weeksToDays(2)\n * //=> 14\n */\nexport default function weeksToDays(weeks) {\n  requiredArgs(1, arguments);\n  return Math.floor(weeks * daysInWeek);\n}","import requiredArgs from \"../_lib/requiredArgs/index.js\";\nimport { monthsInYear } from \"../constants/index.js\";\n/**\n * @name yearsToMonths\n * @category Conversion Helpers\n * @summary Convert years to months.\n *\n * @description\n * Convert a number of years to a full number of months.\n *\n * @param {number} years - number of years to be converted\n *\n * @returns {number} the number of years converted in months\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Convert 2 years into months\n * const result = yearsToMonths(2)\n * //=> 24\n */\nexport default function yearsToMonths(years) {\n  requiredArgs(1, arguments);\n  return Math.floor(years * monthsInYear);\n}","import requiredArgs from \"../_lib/requiredArgs/index.js\";\nimport { quartersInYear } from \"../constants/index.js\";\n/**\n * @name yearsToQuarters\n * @category Conversion Helpers\n * @summary Convert years to quarters.\n *\n * @description\n * Convert a number of years to a full number of quarters.\n *\n * @param {number} years - number of years to be converted\n *\n * @returns {number} the number of years converted in quarters\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Convert 2 years to quarters\n * const result = yearsToQuarters(2)\n * //=> 8\n */\nexport default function yearsToQuarters(years) {\n  requiredArgs(1, arguments);\n  return Math.floor(years * quartersInYear);\n}","'use strict';\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    var desc = Object.getOwnPropertyDescriptor(m, k);\n    if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n      desc = { enumerable: true, get: function() { return m[k]; } };\n    }\n    Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n    Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n    o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n    if (mod && mod.__esModule) return mod;\n    var result = {};\n    if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n    __setModuleDefault(result, mod);\n    return result;\n};\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n    for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.deepKeysFromList = exports.deepKeys = void 0;\nconst utils = __importStar(require(\"./utils\"));\n__exportStar(require(\"./types\"), exports);\n/**\n * Return the deep keys list for a single document\n * @param object\n * @param options\n * @returns {Array}\n */\nfunction deepKeys(object, options) {\n    const parsedOptions = mergeOptions(options);\n    if (typeof object === 'object' && object !== null) {\n        return generateDeepKeysList('', object, parsedOptions);\n    }\n    return [];\n}\nexports.deepKeys = deepKeys;\n/**\n * Return the deep keys list for all documents in the provided list\n * @param list\n * @param options\n * @returns Array[Array[String]]\n */\nfunction deepKeysFromList(list, options) {\n    const parsedOptions = mergeOptions(options);\n    return list.map((document) => {\n        if (typeof document === 'object' && document !== null) {\n            // if the data at the key is a document, then we retrieve the subHeading starting with an empty string heading and the doc\n            return deepKeys(document, parsedOptions);\n        }\n        return [];\n    });\n}\nexports.deepKeysFromList = deepKeysFromList;\nfunction generateDeepKeysList(heading, data, options) {\n    const keys = Object.keys(data).map((currentKey) => {\n        // If the given heading is empty, then we set the heading to be the subKey, otherwise set it as a nested heading w/ a dot\n        const keyName = buildKeyName(heading, escapeNestedDotsIfSpecified(currentKey, options));\n        // If we have another nested document, recur on the sub-document to retrieve the full key name\n        if (options.expandNestedObjects && utils.isDocumentToRecurOn(data[currentKey])) {\n            return generateDeepKeysList(keyName, data[currentKey], options);\n        }\n        else if (options.expandArrayObjects && Array.isArray(data[currentKey])) {\n            // If we have a nested array that we need to recur on\n            return processArrayKeys(data[currentKey], keyName, options);\n        }\n        else if (options.ignoreEmptyArrays && Array.isArray(data[currentKey]) && !data[currentKey].length) {\n            return [];\n        }\n        // Otherwise return this key name since we don't have a sub document\n        return keyName;\n    });\n    return utils.flatten(keys);\n}\n/**\n * Helper function to handle the processing of arrays when the expandArrayObjects\n * option is specified.\n * @param subArray\n * @param currentKeyPath\n * @param options\n * @returns {*}\n */\nfunction processArrayKeys(subArray, currentKeyPath, options) {\n    let subArrayKeys = deepKeysFromList(subArray, options);\n    if (!subArray.length) {\n        return options.ignoreEmptyArraysWhenExpanding ? [] : [currentKeyPath];\n    }\n    else if (subArray.length && utils.flatten(subArrayKeys).length === 0) {\n        // Has items in the array, but no objects\n        return [currentKeyPath];\n    }\n    else {\n        subArrayKeys = subArrayKeys.map((schemaKeys) => {\n            if (Array.isArray(schemaKeys) && schemaKeys.length === 0) {\n                return [currentKeyPath];\n            }\n            return schemaKeys.map((subKey) => buildKeyName(currentKeyPath, escapeNestedDotsIfSpecified(subKey, options)));\n        });\n        return utils.unique(utils.flatten(subArrayKeys));\n    }\n}\nfunction escapeNestedDotsIfSpecified(key, options) {\n    if (options.escapeNestedDots) {\n        return key.replace(/\\./g, '\\\\.');\n    }\n    return key;\n}\n/**\n * Function used to generate the key path\n * @param upperKeyName String accumulated key path\n * @param currentKeyName String current key name\n * @returns String\n */\nfunction buildKeyName(upperKeyName, currentKeyName) {\n    if (upperKeyName) {\n        return upperKeyName + '.' + currentKeyName;\n    }\n    return currentKeyName;\n}\nfunction mergeOptions(options) {\n    return {\n        expandNestedObjects: true,\n        expandArrayObjects: false,\n        ignoreEmptyArraysWhenExpanding: false,\n        escapeNestedDots: false,\n        ignoreEmptyArrays: false,\n        ...(options ?? {})\n    };\n}\n","'use strict';\nObject.defineProperty(exports, \"__esModule\", { value: true });\n","'use strict';\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.isDocumentToRecurOn = exports.flatten = exports.unique = void 0;\nfunction unique(array) {\n    return [...new Set(array)];\n}\nexports.unique = unique;\nfunction flatten(array) {\n    return [].concat(...array);\n}\nexports.flatten = flatten;\n/**\n * Returns whether this value is a document to recur on or not\n * @param val Any item whose type will be evaluated\n * @returns {boolean}\n */\nfunction isDocumentToRecurOn(val) {\n    return typeof val === 'object' && val !== null && !Array.isArray(val) && Object.keys(val).length;\n}\nexports.isDocumentToRecurOn = isDocumentToRecurOn;\n","/**\n * @license MIT\n * doc-path <https://github.com/mrodrig/doc-path>\n * Copyright (c) 2015-present, Michael Rodrigues.\n */\n'use strict';\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.setPath = exports.evaluatePath = void 0;\n/**\n * Main function that evaluates the path in a particular object\n * @throws {Error} possible error if call stack size is exceeded\n */\nfunction evaluatePath(obj, kp) {\n    if (!obj) {\n        return null;\n    }\n    const { dotIndex, key, remaining } = state(kp);\n    const kpVal = typeof obj === 'object' && kp in obj ? obj[kp] : undefined;\n    const keyVal = typeof obj === 'object' && key in obj ? obj[key] : undefined;\n    // If there is a '.' in the key path and the key path doesn't appear in the object, recur on the subobject\n    if (dotIndex >= 0 && typeof obj === 'object' && !(kp in obj)) {\n        // If there's an array at the current key in the object, then iterate over those items evaluating the remaining path\n        if (Array.isArray(keyVal)) {\n            return keyVal.map((doc) => evaluatePath(doc, remaining));\n        }\n        // Otherwise, we can just recur\n        return evaluatePath(keyVal, remaining);\n    }\n    else if (Array.isArray(obj)) {\n        // If this object is actually an array, then iterate over those items evaluating the path\n        return obj.map((doc) => evaluatePath(doc, kp));\n    }\n    else if (dotIndex >= 0 && kp !== key && typeof obj === 'object' && key in obj) {\n        // If there's a field with a non-nested dot, then recur into that sub-value\n        return evaluatePath(keyVal, remaining);\n    }\n    else if (dotIndex === -1 && typeof obj === 'object' && key in obj && !(kp in obj)) {\n        // If the field is here, but the key was escaped\n        return keyVal;\n    }\n    // Otherwise, we can just return value directly\n    return kpVal;\n}\nexports.evaluatePath = evaluatePath;\n/**\n * Main function that performs validation before passing off to _sp\n * @throws {Error} possible error if call stack size is exceeded\n */\nfunction setPath(obj, kp, v) {\n    if (!obj) {\n        throw new Error('No object was provided.');\n    }\n    else if (!kp) {\n        throw new Error('No keyPath was provided.');\n    }\n    return _sp(obj, kp, v);\n}\nexports.setPath = setPath;\n// Helper function that will set the value in the provided object/array.\nfunction _sp(obj, kp, v) {\n    const { dotIndex, key, remaining } = state(kp);\n    // If this is clearly a prototype pollution attempt, then refuse to modify the path\n    if (kp.startsWith('__proto__') || kp.startsWith('constructor') || kp.startsWith('prototype')) {\n        return obj;\n    }\n    if (dotIndex >= 0) {\n        // If there is a '.' in the key path, recur on the subdoc and ...\n        if (typeof obj === 'object' && obj !== null && !(key in obj) && Array.isArray(obj)) {\n            // If this is an array and there are multiple levels of keys to iterate over, recur.\n            obj.forEach((doc) => _sp(doc, kp, v));\n            return obj;\n        }\n        else if (typeof obj === 'object' && obj !== null && !(key in obj) && !Array.isArray(obj)) {\n            // If the current key doesn't exist yet, populate it\n            obj[key] = {};\n        }\n        _sp(obj[key], remaining, v);\n    }\n    else if (Array.isArray(obj)) {\n        // If this \"obj\" is actually an array, then we can loop over each of the values and set the path\n        obj.forEach((doc) => _sp(doc, remaining, v));\n        return obj;\n    }\n    else {\n        // Otherwise, we can set the path directly\n        obj[key] = v;\n    }\n    return obj;\n}\n// Helper function that returns some information necessary to evaluate or set a path  based on the provided keyPath value\nfunction state(kp) {\n    const dotIndex = findFirstNonEscapedDotIndex(kp);\n    return {\n        dotIndex,\n        key: kp.slice(0, dotIndex >= 0 ? dotIndex : undefined).replace(/\\\\./g, '.'),\n        remaining: kp.slice(dotIndex + 1)\n    };\n}\nfunction findFirstNonEscapedDotIndex(kp) {\n    for (let i = 0; i < kp.length; i++) {\n        const previousChar = i > 0 ? kp[i - 1] : '', currentChar = kp[i];\n        if (currentChar === '.' && previousChar !== '\\\\')\n            return i;\n    }\n    return -1;\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Doctype = exports.CDATA = exports.Tag = exports.Style = exports.Script = exports.Comment = exports.Directive = exports.Text = exports.Root = exports.isTag = exports.ElementType = void 0;\n/** Types of elements found in htmlparser2's DOM */\nvar ElementType;\n(function (ElementType) {\n    /** Type for the root element of a document */\n    ElementType[\"Root\"] = \"root\";\n    /** Type for Text */\n    ElementType[\"Text\"] = \"text\";\n    /** Type for <? ... ?> */\n    ElementType[\"Directive\"] = \"directive\";\n    /** Type for <!-- ... --> */\n    ElementType[\"Comment\"] = \"comment\";\n    /** Type for <script> tags */\n    ElementType[\"Script\"] = \"script\";\n    /** Type for <style> tags */\n    ElementType[\"Style\"] = \"style\";\n    /** Type for Any tag */\n    ElementType[\"Tag\"] = \"tag\";\n    /** Type for <![CDATA[ ... ]]> */\n    ElementType[\"CDATA\"] = \"cdata\";\n    /** Type for <!doctype ...> */\n    ElementType[\"Doctype\"] = \"doctype\";\n})(ElementType = exports.ElementType || (exports.ElementType = {}));\n/**\n * Tests whether an element is a tag or not.\n *\n * @param elem Element to test\n */\nfunction isTag(elem) {\n    return (elem.type === ElementType.Tag ||\n        elem.type === ElementType.Script ||\n        elem.type === ElementType.Style);\n}\nexports.isTag = isTag;\n// Exports for backwards compatibility\n/** Type for the root element of a document */\nexports.Root = ElementType.Root;\n/** Type for Text */\nexports.Text = ElementType.Text;\n/** Type for <? ... ?> */\nexports.Directive = ElementType.Directive;\n/** Type for <!-- ... --> */\nexports.Comment = ElementType.Comment;\n/** Type for <script> tags */\nexports.Script = ElementType.Script;\n/** Type for <style> tags */\nexports.Style = ElementType.Style;\n/** Type for Any tag */\nexports.Tag = ElementType.Tag;\n/** Type for <![CDATA[ ... ]]> */\nexports.CDATA = ElementType.CDATA;\n/** Type for <!doctype ...> */\nexports.Doctype = ElementType.Doctype;\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    var desc = Object.getOwnPropertyDescriptor(m, k);\n    if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n      desc = { enumerable: true, get: function() { return m[k]; } };\n    }\n    Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    o[k2] = m[k];\n}));\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n    for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.DomHandler = void 0;\nvar domelementtype_1 = require(\"domelementtype\");\nvar node_js_1 = require(\"./node.js\");\n__exportStar(require(\"./node.js\"), exports);\n// Default options\nvar defaultOpts = {\n    withStartIndices: false,\n    withEndIndices: false,\n    xmlMode: false,\n};\nvar DomHandler = /** @class */ (function () {\n    /**\n     * @param callback Called once parsing has completed.\n     * @param options Settings for the handler.\n     * @param elementCB Callback whenever a tag is closed.\n     */\n    function DomHandler(callback, options, elementCB) {\n        /** The elements of the DOM */\n        this.dom = [];\n        /** The root element for the DOM */\n        this.root = new node_js_1.Document(this.dom);\n        /** Indicated whether parsing has been completed. */\n        this.done = false;\n        /** Stack of open tags. */\n        this.tagStack = [this.root];\n        /** A data node that is still being written to. */\n        this.lastNode = null;\n        /** Reference to the parser instance. Used for location information. */\n        this.parser = null;\n        // Make it possible to skip arguments, for backwards-compatibility\n        if (typeof options === \"function\") {\n            elementCB = options;\n            options = defaultOpts;\n        }\n        if (typeof callback === \"object\") {\n            options = callback;\n            callback = undefined;\n        }\n        this.callback = callback !== null && callback !== void 0 ? callback : null;\n        this.options = options !== null && options !== void 0 ? options : defaultOpts;\n        this.elementCB = elementCB !== null && elementCB !== void 0 ? elementCB : null;\n    }\n    DomHandler.prototype.onparserinit = function (parser) {\n        this.parser = parser;\n    };\n    // Resets the handler back to starting state\n    DomHandler.prototype.onreset = function () {\n        this.dom = [];\n        this.root = new node_js_1.Document(this.dom);\n        this.done = false;\n        this.tagStack = [this.root];\n        this.lastNode = null;\n        this.parser = null;\n    };\n    // Signals the handler that parsing is done\n    DomHandler.prototype.onend = function () {\n        if (this.done)\n            return;\n        this.done = true;\n        this.parser = null;\n        this.handleCallback(null);\n    };\n    DomHandler.prototype.onerror = function (error) {\n        this.handleCallback(error);\n    };\n    DomHandler.prototype.onclosetag = function () {\n        this.lastNode = null;\n        var elem = this.tagStack.pop();\n        if (this.options.withEndIndices) {\n            elem.endIndex = this.parser.endIndex;\n        }\n        if (this.elementCB)\n            this.elementCB(elem);\n    };\n    DomHandler.prototype.onopentag = function (name, attribs) {\n        var type = this.options.xmlMode ? domelementtype_1.ElementType.Tag : undefined;\n        var element = new node_js_1.Element(name, attribs, undefined, type);\n        this.addNode(element);\n        this.tagStack.push(element);\n    };\n    DomHandler.prototype.ontext = function (data) {\n        var lastNode = this.lastNode;\n        if (lastNode && lastNode.type === domelementtype_1.ElementType.Text) {\n            lastNode.data += data;\n            if (this.options.withEndIndices) {\n                lastNode.endIndex = this.parser.endIndex;\n            }\n        }\n        else {\n            var node = new node_js_1.Text(data);\n            this.addNode(node);\n            this.lastNode = node;\n        }\n    };\n    DomHandler.prototype.oncomment = function (data) {\n        if (this.lastNode && this.lastNode.type === domelementtype_1.ElementType.Comment) {\n            this.lastNode.data += data;\n            return;\n        }\n        var node = new node_js_1.Comment(data);\n        this.addNode(node);\n        this.lastNode = node;\n    };\n    DomHandler.prototype.oncommentend = function () {\n        this.lastNode = null;\n    };\n    DomHandler.prototype.oncdatastart = function () {\n        var text = new node_js_1.Text(\"\");\n        var node = new node_js_1.CDATA([text]);\n        this.addNode(node);\n        text.parent = node;\n        this.lastNode = text;\n    };\n    DomHandler.prototype.oncdataend = function () {\n        this.lastNode = null;\n    };\n    DomHandler.prototype.onprocessinginstruction = function (name, data) {\n        var node = new node_js_1.ProcessingInstruction(name, data);\n        this.addNode(node);\n    };\n    DomHandler.prototype.handleCallback = function (error) {\n        if (typeof this.callback === \"function\") {\n            this.callback(error, this.dom);\n        }\n        else if (error) {\n            throw error;\n        }\n    };\n    DomHandler.prototype.addNode = function (node) {\n        var parent = this.tagStack[this.tagStack.length - 1];\n        var previousSibling = parent.children[parent.children.length - 1];\n        if (this.options.withStartIndices) {\n            node.startIndex = this.parser.startIndex;\n        }\n        if (this.options.withEndIndices) {\n            node.endIndex = this.parser.endIndex;\n        }\n        parent.children.push(node);\n        if (previousSibling) {\n            node.prev = previousSibling;\n            previousSibling.next = node;\n        }\n        node.parent = parent;\n        this.lastNode = null;\n    };\n    return DomHandler;\n}());\nexports.DomHandler = DomHandler;\nexports.default = DomHandler;\n","\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __assign = (this && this.__assign) || function () {\n    __assign = Object.assign || function(t) {\n        for (var s, i = 1, n = arguments.length; i < n; i++) {\n            s = arguments[i];\n            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n                t[p] = s[p];\n        }\n        return t;\n    };\n    return __assign.apply(this, arguments);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.cloneNode = exports.hasChildren = exports.isDocument = exports.isDirective = exports.isComment = exports.isText = exports.isCDATA = exports.isTag = exports.Element = exports.Document = exports.CDATA = exports.NodeWithChildren = exports.ProcessingInstruction = exports.Comment = exports.Text = exports.DataNode = exports.Node = void 0;\nvar domelementtype_1 = require(\"domelementtype\");\n/**\n * This object will be used as the prototype for Nodes when creating a\n * DOM-Level-1-compliant structure.\n */\nvar Node = /** @class */ (function () {\n    function Node() {\n        /** Parent of the node */\n        this.parent = null;\n        /** Previous sibling */\n        this.prev = null;\n        /** Next sibling */\n        this.next = null;\n        /** The start index of the node. Requires `withStartIndices` on the handler to be `true. */\n        this.startIndex = null;\n        /** The end index of the node. Requires `withEndIndices` on the handler to be `true. */\n        this.endIndex = null;\n    }\n    Object.defineProperty(Node.prototype, \"parentNode\", {\n        // Read-write aliases for properties\n        /**\n         * Same as {@link parent}.\n         * [DOM spec](https://dom.spec.whatwg.org)-compatible alias.\n         */\n        get: function () {\n            return this.parent;\n        },\n        set: function (parent) {\n            this.parent = parent;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(Node.prototype, \"previousSibling\", {\n        /**\n         * Same as {@link prev}.\n         * [DOM spec](https://dom.spec.whatwg.org)-compatible alias.\n         */\n        get: function () {\n            return this.prev;\n        },\n        set: function (prev) {\n            this.prev = prev;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(Node.prototype, \"nextSibling\", {\n        /**\n         * Same as {@link next}.\n         * [DOM spec](https://dom.spec.whatwg.org)-compatible alias.\n         */\n        get: function () {\n            return this.next;\n        },\n        set: function (next) {\n            this.next = next;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    /**\n     * Clone this node, and optionally its children.\n     *\n     * @param recursive Clone child nodes as well.\n     * @returns A clone of the node.\n     */\n    Node.prototype.cloneNode = function (recursive) {\n        if (recursive === void 0) { recursive = false; }\n        return cloneNode(this, recursive);\n    };\n    return Node;\n}());\nexports.Node = Node;\n/**\n * A node that contains some data.\n */\nvar DataNode = /** @class */ (function (_super) {\n    __extends(DataNode, _super);\n    /**\n     * @param data The content of the data node\n     */\n    function DataNode(data) {\n        var _this = _super.call(this) || this;\n        _this.data = data;\n        return _this;\n    }\n    Object.defineProperty(DataNode.prototype, \"nodeValue\", {\n        /**\n         * Same as {@link data}.\n         * [DOM spec](https://dom.spec.whatwg.org)-compatible alias.\n         */\n        get: function () {\n            return this.data;\n        },\n        set: function (data) {\n            this.data = data;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    return DataNode;\n}(Node));\nexports.DataNode = DataNode;\n/**\n * Text within the document.\n */\nvar Text = /** @class */ (function (_super) {\n    __extends(Text, _super);\n    function Text() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        _this.type = domelementtype_1.ElementType.Text;\n        return _this;\n    }\n    Object.defineProperty(Text.prototype, \"nodeType\", {\n        get: function () {\n            return 3;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    return Text;\n}(DataNode));\nexports.Text = Text;\n/**\n * Comments within the document.\n */\nvar Comment = /** @class */ (function (_super) {\n    __extends(Comment, _super);\n    function Comment() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        _this.type = domelementtype_1.ElementType.Comment;\n        return _this;\n    }\n    Object.defineProperty(Comment.prototype, \"nodeType\", {\n        get: function () {\n            return 8;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    return Comment;\n}(DataNode));\nexports.Comment = Comment;\n/**\n * Processing instructions, including doc types.\n */\nvar ProcessingInstruction = /** @class */ (function (_super) {\n    __extends(ProcessingInstruction, _super);\n    function ProcessingInstruction(name, data) {\n        var _this = _super.call(this, data) || this;\n        _this.name = name;\n        _this.type = domelementtype_1.ElementType.Directive;\n        return _this;\n    }\n    Object.defineProperty(ProcessingInstruction.prototype, \"nodeType\", {\n        get: function () {\n            return 1;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    return ProcessingInstruction;\n}(DataNode));\nexports.ProcessingInstruction = ProcessingInstruction;\n/**\n * A `Node` that can have children.\n */\nvar NodeWithChildren = /** @class */ (function (_super) {\n    __extends(NodeWithChildren, _super);\n    /**\n     * @param children Children of the node. Only certain node types can have children.\n     */\n    function NodeWithChildren(children) {\n        var _this = _super.call(this) || this;\n        _this.children = children;\n        return _this;\n    }\n    Object.defineProperty(NodeWithChildren.prototype, \"firstChild\", {\n        // Aliases\n        /** First child of the node. */\n        get: function () {\n            var _a;\n            return (_a = this.children[0]) !== null && _a !== void 0 ? _a : null;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(NodeWithChildren.prototype, \"lastChild\", {\n        /** Last child of the node. */\n        get: function () {\n            return this.children.length > 0\n                ? this.children[this.children.length - 1]\n                : null;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(NodeWithChildren.prototype, \"childNodes\", {\n        /**\n         * Same as {@link children}.\n         * [DOM spec](https://dom.spec.whatwg.org)-compatible alias.\n         */\n        get: function () {\n            return this.children;\n        },\n        set: function (children) {\n            this.children = children;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    return NodeWithChildren;\n}(Node));\nexports.NodeWithChildren = NodeWithChildren;\nvar CDATA = /** @class */ (function (_super) {\n    __extends(CDATA, _super);\n    function CDATA() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        _this.type = domelementtype_1.ElementType.CDATA;\n        return _this;\n    }\n    Object.defineProperty(CDATA.prototype, \"nodeType\", {\n        get: function () {\n            return 4;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    return CDATA;\n}(NodeWithChildren));\nexports.CDATA = CDATA;\n/**\n * The root node of the document.\n */\nvar Document = /** @class */ (function (_super) {\n    __extends(Document, _super);\n    function Document() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        _this.type = domelementtype_1.ElementType.Root;\n        return _this;\n    }\n    Object.defineProperty(Document.prototype, \"nodeType\", {\n        get: function () {\n            return 9;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    return Document;\n}(NodeWithChildren));\nexports.Document = Document;\n/**\n * An element within the DOM.\n */\nvar Element = /** @class */ (function (_super) {\n    __extends(Element, _super);\n    /**\n     * @param name Name of the tag, eg. `div`, `span`.\n     * @param attribs Object mapping attribute names to attribute values.\n     * @param children Children of the node.\n     */\n    function Element(name, attribs, children, type) {\n        if (children === void 0) { children = []; }\n        if (type === void 0) { type = name === \"script\"\n            ? domelementtype_1.ElementType.Script\n            : name === \"style\"\n                ? domelementtype_1.ElementType.Style\n                : domelementtype_1.ElementType.Tag; }\n        var _this = _super.call(this, children) || this;\n        _this.name = name;\n        _this.attribs = attribs;\n        _this.type = type;\n        return _this;\n    }\n    Object.defineProperty(Element.prototype, \"nodeType\", {\n        get: function () {\n            return 1;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(Element.prototype, \"tagName\", {\n        // DOM Level 1 aliases\n        /**\n         * Same as {@link name}.\n         * [DOM spec](https://dom.spec.whatwg.org)-compatible alias.\n         */\n        get: function () {\n            return this.name;\n        },\n        set: function (name) {\n            this.name = name;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(Element.prototype, \"attributes\", {\n        get: function () {\n            var _this = this;\n            return Object.keys(this.attribs).map(function (name) {\n                var _a, _b;\n                return ({\n                    name: name,\n                    value: _this.attribs[name],\n                    namespace: (_a = _this[\"x-attribsNamespace\"]) === null || _a === void 0 ? void 0 : _a[name],\n                    prefix: (_b = _this[\"x-attribsPrefix\"]) === null || _b === void 0 ? void 0 : _b[name],\n                });\n            });\n        },\n        enumerable: false,\n        configurable: true\n    });\n    return Element;\n}(NodeWithChildren));\nexports.Element = Element;\n/**\n * @param node Node to check.\n * @returns `true` if the node is a `Element`, `false` otherwise.\n */\nfunction isTag(node) {\n    return (0, domelementtype_1.isTag)(node);\n}\nexports.isTag = isTag;\n/**\n * @param node Node to check.\n * @returns `true` if the node has the type `CDATA`, `false` otherwise.\n */\nfunction isCDATA(node) {\n    return node.type === domelementtype_1.ElementType.CDATA;\n}\nexports.isCDATA = isCDATA;\n/**\n * @param node Node to check.\n * @returns `true` if the node has the type `Text`, `false` otherwise.\n */\nfunction isText(node) {\n    return node.type === domelementtype_1.ElementType.Text;\n}\nexports.isText = isText;\n/**\n * @param node Node to check.\n * @returns `true` if the node has the type `Comment`, `false` otherwise.\n */\nfunction isComment(node) {\n    return node.type === domelementtype_1.ElementType.Comment;\n}\nexports.isComment = isComment;\n/**\n * @param node Node to check.\n * @returns `true` if the node has the type `ProcessingInstruction`, `false` otherwise.\n */\nfunction isDirective(node) {\n    return node.type === domelementtype_1.ElementType.Directive;\n}\nexports.isDirective = isDirective;\n/**\n * @param node Node to check.\n * @returns `true` if the node has the type `ProcessingInstruction`, `false` otherwise.\n */\nfunction isDocument(node) {\n    return node.type === domelementtype_1.ElementType.Root;\n}\nexports.isDocument = isDocument;\n/**\n * @param node Node to check.\n * @returns `true` if the node has children, `false` otherwise.\n */\nfunction hasChildren(node) {\n    return Object.prototype.hasOwnProperty.call(node, \"children\");\n}\nexports.hasChildren = hasChildren;\n/**\n * Clone a node, and optionally its children.\n *\n * @param recursive Clone child nodes as well.\n * @returns A clone of the node.\n */\nfunction cloneNode(node, recursive) {\n    if (recursive === void 0) { recursive = false; }\n    var result;\n    if (isText(node)) {\n        result = new Text(node.data);\n    }\n    else if (isComment(node)) {\n        result = new Comment(node.data);\n    }\n    else if (isTag(node)) {\n        var children = recursive ? cloneChildren(node.children) : [];\n        var clone_1 = new Element(node.name, __assign({}, node.attribs), children);\n        children.forEach(function (child) { return (child.parent = clone_1); });\n        if (node.namespace != null) {\n            clone_1.namespace = node.namespace;\n        }\n        if (node[\"x-attribsNamespace\"]) {\n            clone_1[\"x-attribsNamespace\"] = __assign({}, node[\"x-attribsNamespace\"]);\n        }\n        if (node[\"x-attribsPrefix\"]) {\n            clone_1[\"x-attribsPrefix\"] = __assign({}, node[\"x-attribsPrefix\"]);\n        }\n        result = clone_1;\n    }\n    else if (isCDATA(node)) {\n        var children = recursive ? cloneChildren(node.children) : [];\n        var clone_2 = new CDATA(children);\n        children.forEach(function (child) { return (child.parent = clone_2); });\n        result = clone_2;\n    }\n    else if (isDocument(node)) {\n        var children = recursive ? cloneChildren(node.children) : [];\n        var clone_3 = new Document(children);\n        children.forEach(function (child) { return (child.parent = clone_3); });\n        if (node[\"x-mode\"]) {\n            clone_3[\"x-mode\"] = node[\"x-mode\"];\n        }\n        result = clone_3;\n    }\n    else if (isDirective(node)) {\n        var instruction = new ProcessingInstruction(node.name, node.data);\n        if (node[\"x-name\"] != null) {\n            instruction[\"x-name\"] = node[\"x-name\"];\n            instruction[\"x-publicId\"] = node[\"x-publicId\"];\n            instruction[\"x-systemId\"] = node[\"x-systemId\"];\n        }\n        result = instruction;\n    }\n    else {\n        throw new Error(\"Not implemented yet: \".concat(node.type));\n    }\n    result.startIndex = node.startIndex;\n    result.endIndex = node.endIndex;\n    if (node.sourceCodeLocation != null) {\n        result.sourceCodeLocation = node.sourceCodeLocation;\n    }\n    return result;\n}\nexports.cloneNode = cloneNode;\nfunction cloneChildren(childs) {\n    var children = childs.map(function (child) { return cloneNode(child, true); });\n    for (var i = 1; i < children.length; i++) {\n        children[i].prev = children[i - 1];\n        children[i - 1].next = children[i];\n    }\n    return children;\n}\n","'use strict';\n\nvar hasOwn = Object.prototype.hasOwnProperty;\nvar toStr = Object.prototype.toString;\nvar defineProperty = Object.defineProperty;\nvar gOPD = Object.getOwnPropertyDescriptor;\n\nvar isArray = function isArray(arr) {\n\tif (typeof Array.isArray === 'function') {\n\t\treturn Array.isArray(arr);\n\t}\n\n\treturn toStr.call(arr) === '[object Array]';\n};\n\nvar isPlainObject = function isPlainObject(obj) {\n\tif (!obj || toStr.call(obj) !== '[object Object]') {\n\t\treturn false;\n\t}\n\n\tvar hasOwnConstructor = hasOwn.call(obj, 'constructor');\n\tvar hasIsPrototypeOf = obj.constructor && obj.constructor.prototype && hasOwn.call(obj.constructor.prototype, 'isPrototypeOf');\n\t// Not own constructor property must be Object\n\tif (obj.constructor && !hasOwnConstructor && !hasIsPrototypeOf) {\n\t\treturn false;\n\t}\n\n\t// Own properties are enumerated firstly, so to speed up,\n\t// if last one is own, then all properties are own.\n\tvar key;\n\tfor (key in obj) { /**/ }\n\n\treturn typeof key === 'undefined' || hasOwn.call(obj, key);\n};\n\n// If name is '__proto__', and Object.defineProperty is available, define __proto__ as an own property on target\nvar setProperty = function setProperty(target, options) {\n\tif (defineProperty && options.name === '__proto__') {\n\t\tdefineProperty(target, options.name, {\n\t\t\tenumerable: true,\n\t\t\tconfigurable: true,\n\t\t\tvalue: options.newValue,\n\t\t\twritable: true\n\t\t});\n\t} else {\n\t\ttarget[options.name] = options.newValue;\n\t}\n};\n\n// Return undefined instead of __proto__ if '__proto__' is not an own property\nvar getProperty = function getProperty(obj, name) {\n\tif (name === '__proto__') {\n\t\tif (!hasOwn.call(obj, name)) {\n\t\t\treturn void 0;\n\t\t} else if (gOPD) {\n\t\t\t// In early versions of node, obj['__proto__'] is buggy when obj has\n\t\t\t// __proto__ as an own property. Object.getOwnPropertyDescriptor() works.\n\t\t\treturn gOPD(obj, name).value;\n\t\t}\n\t}\n\n\treturn obj[name];\n};\n\nmodule.exports = function extend() {\n\tvar options, name, src, copy, copyIsArray, clone;\n\tvar target = arguments[0];\n\tvar i = 1;\n\tvar length = arguments.length;\n\tvar deep = false;\n\n\t// Handle a deep copy situation\n\tif (typeof target === 'boolean') {\n\t\tdeep = target;\n\t\ttarget = arguments[1] || {};\n\t\t// skip the boolean and the target\n\t\ti = 2;\n\t}\n\tif (target == null || (typeof target !== 'object' && typeof target !== 'function')) {\n\t\ttarget = {};\n\t}\n\n\tfor (; i < length; ++i) {\n\t\toptions = arguments[i];\n\t\t// Only deal with non-null/undefined values\n\t\tif (options != null) {\n\t\t\t// Extend the base object\n\t\t\tfor (name in options) {\n\t\t\t\tsrc = getProperty(target, name);\n\t\t\t\tcopy = getProperty(options, name);\n\n\t\t\t\t// Prevent never-ending loop\n\t\t\t\tif (target !== copy) {\n\t\t\t\t\t// Recurse if we're merging plain objects or arrays\n\t\t\t\t\tif (deep && copy && (isPlainObject(copy) || (copyIsArray = isArray(copy)))) {\n\t\t\t\t\t\tif (copyIsArray) {\n\t\t\t\t\t\t\tcopyIsArray = false;\n\t\t\t\t\t\t\tclone = src && isArray(src) ? src : [];\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tclone = src && isPlainObject(src) ? src : {};\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Never move original objects, clone them\n\t\t\t\t\t\tsetProperty(target, { name: name, newValue: extend(deep, clone, copy) });\n\n\t\t\t\t\t// Don't bring in undefined values\n\t\t\t\t\t} else if (typeof copy !== 'undefined') {\n\t\t\t\t\t\tsetProperty(target, { name: name, newValue: copy });\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Return the modified object\n\treturn target;\n};\n","/*\n* Fingerprintjs2 2.1.4 - Modern & flexible browser fingerprint library v2\n* https://github.com/fingerprintjs/fingerprintjs\n* Copyright (c) 2020 Valentin Vasilyev (valentin@fingerprintjs.com)\n* Licensed under the MIT (http://www.opensource.org/licenses/mit-license.php) license.\n*\n* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n* ARE DISCLAIMED. IN NO EVENT SHALL VALENTIN VASILYEV BE LIABLE FOR ANY\n* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n/*\n* This software contains code from open-source projects:\n* MurmurHash3 by Karan Lyons (https://github.com/karanlyons/murmurHash3.js)\n*/\n\n/* global define */\n(function (name, context, definition) {\n  'use strict'\n  if (typeof window !== 'undefined' && typeof define === 'function' && define.amd) { define(definition) } else if (typeof module !== 'undefined' && module.exports) { module.exports = definition() } else if (context.exports) { context.exports = definition() } else { context[name] = definition() }\n})('Fingerprint2', this, function () {\n  'use strict'\n\n  // detect if object is array\n  // only implement if no native implementation is available\n  if (typeof Array.isArray === 'undefined') {\n    Array.isArray = function (obj) {\n      return Object.prototype.toString.call(obj) === '[object Array]'\n    }\n  };\n\n  /// MurmurHash3 related functions\n\n  //\n  // Given two 64bit ints (as an array of two 32bit ints) returns the two\n  // added together as a 64bit int (as an array of two 32bit ints).\n  //\n  var x64Add = function (m, n) {\n    m = [m[0] >>> 16, m[0] & 0xffff, m[1] >>> 16, m[1] & 0xffff]\n    n = [n[0] >>> 16, n[0] & 0xffff, n[1] >>> 16, n[1] & 0xffff]\n    var o = [0, 0, 0, 0]\n    o[3] += m[3] + n[3]\n    o[2] += o[3] >>> 16\n    o[3] &= 0xffff\n    o[2] += m[2] + n[2]\n    o[1] += o[2] >>> 16\n    o[2] &= 0xffff\n    o[1] += m[1] + n[1]\n    o[0] += o[1] >>> 16\n    o[1] &= 0xffff\n    o[0] += m[0] + n[0]\n    o[0] &= 0xffff\n    return [(o[0] << 16) | o[1], (o[2] << 16) | o[3]]\n  }\n\n  //\n  // Given two 64bit ints (as an array of two 32bit ints) returns the two\n  // multiplied together as a 64bit int (as an array of two 32bit ints).\n  //\n  var x64Multiply = function (m, n) {\n    m = [m[0] >>> 16, m[0] & 0xffff, m[1] >>> 16, m[1] & 0xffff]\n    n = [n[0] >>> 16, n[0] & 0xffff, n[1] >>> 16, n[1] & 0xffff]\n    var o = [0, 0, 0, 0]\n    o[3] += m[3] * n[3]\n    o[2] += o[3] >>> 16\n    o[3] &= 0xffff\n    o[2] += m[2] * n[3]\n    o[1] += o[2] >>> 16\n    o[2] &= 0xffff\n    o[2] += m[3] * n[2]\n    o[1] += o[2] >>> 16\n    o[2] &= 0xffff\n    o[1] += m[1] * n[3]\n    o[0] += o[1] >>> 16\n    o[1] &= 0xffff\n    o[1] += m[2] * n[2]\n    o[0] += o[1] >>> 16\n    o[1] &= 0xffff\n    o[1] += m[3] * n[1]\n    o[0] += o[1] >>> 16\n    o[1] &= 0xffff\n    o[0] += (m[0] * n[3]) + (m[1] * n[2]) + (m[2] * n[1]) + (m[3] * n[0])\n    o[0] &= 0xffff\n    return [(o[0] << 16) | o[1], (o[2] << 16) | o[3]]\n  }\n  //\n  // Given a 64bit int (as an array of two 32bit ints) and an int\n  // representing a number of bit positions, returns the 64bit int (as an\n  // array of two 32bit ints) rotated left by that number of positions.\n  //\n  var x64Rotl = function (m, n) {\n    n %= 64\n    if (n === 32) {\n      return [m[1], m[0]]\n    } else if (n < 32) {\n      return [(m[0] << n) | (m[1] >>> (32 - n)), (m[1] << n) | (m[0] >>> (32 - n))]\n    } else {\n      n -= 32\n      return [(m[1] << n) | (m[0] >>> (32 - n)), (m[0] << n) | (m[1] >>> (32 - n))]\n    }\n  }\n  //\n  // Given a 64bit int (as an array of two 32bit ints) and an int\n  // representing a number of bit positions, returns the 64bit int (as an\n  // array of two 32bit ints) shifted left by that number of positions.\n  //\n  var x64LeftShift = function (m, n) {\n    n %= 64\n    if (n === 0) {\n      return m\n    } else if (n < 32) {\n      return [(m[0] << n) | (m[1] >>> (32 - n)), m[1] << n]\n    } else {\n      return [m[1] << (n - 32), 0]\n    }\n  }\n  //\n  // Given two 64bit ints (as an array of two 32bit ints) returns the two\n  // xored together as a 64bit int (as an array of two 32bit ints).\n  //\n  var x64Xor = function (m, n) {\n    return [m[0] ^ n[0], m[1] ^ n[1]]\n  }\n  //\n  // Given a block, returns murmurHash3's final x64 mix of that block.\n  // (`[0, h[0] >>> 1]` is a 33 bit unsigned right shift. This is the\n  // only place where we need to right shift 64bit ints.)\n  //\n  var x64Fmix = function (h) {\n    h = x64Xor(h, [0, h[0] >>> 1])\n    h = x64Multiply(h, [0xff51afd7, 0xed558ccd])\n    h = x64Xor(h, [0, h[0] >>> 1])\n    h = x64Multiply(h, [0xc4ceb9fe, 0x1a85ec53])\n    h = x64Xor(h, [0, h[0] >>> 1])\n    return h\n  }\n\n  //\n  // Given a string and an optional seed as an int, returns a 128 bit\n  // hash using the x64 flavor of MurmurHash3, as an unsigned hex.\n  //\n  var x64hash128 = function (key, seed) {\n    key = key || ''\n    seed = seed || 0\n    var remainder = key.length % 16\n    var bytes = key.length - remainder\n    var h1 = [0, seed]\n    var h2 = [0, seed]\n    var k1 = [0, 0]\n    var k2 = [0, 0]\n    var c1 = [0x87c37b91, 0x114253d5]\n    var c2 = [0x4cf5ad43, 0x2745937f]\n    for (var i = 0; i < bytes; i = i + 16) {\n      k1 = [((key.charCodeAt(i + 4) & 0xff)) | ((key.charCodeAt(i + 5) & 0xff) << 8) | ((key.charCodeAt(i + 6) & 0xff) << 16) | ((key.charCodeAt(i + 7) & 0xff) << 24), ((key.charCodeAt(i) & 0xff)) | ((key.charCodeAt(i + 1) & 0xff) << 8) | ((key.charCodeAt(i + 2) & 0xff) << 16) | ((key.charCodeAt(i + 3) & 0xff) << 24)]\n      k2 = [((key.charCodeAt(i + 12) & 0xff)) | ((key.charCodeAt(i + 13) & 0xff) << 8) | ((key.charCodeAt(i + 14) & 0xff) << 16) | ((key.charCodeAt(i + 15) & 0xff) << 24), ((key.charCodeAt(i + 8) & 0xff)) | ((key.charCodeAt(i + 9) & 0xff) << 8) | ((key.charCodeAt(i + 10) & 0xff) << 16) | ((key.charCodeAt(i + 11) & 0xff) << 24)]\n      k1 = x64Multiply(k1, c1)\n      k1 = x64Rotl(k1, 31)\n      k1 = x64Multiply(k1, c2)\n      h1 = x64Xor(h1, k1)\n      h1 = x64Rotl(h1, 27)\n      h1 = x64Add(h1, h2)\n      h1 = x64Add(x64Multiply(h1, [0, 5]), [0, 0x52dce729])\n      k2 = x64Multiply(k2, c2)\n      k2 = x64Rotl(k2, 33)\n      k2 = x64Multiply(k2, c1)\n      h2 = x64Xor(h2, k2)\n      h2 = x64Rotl(h2, 31)\n      h2 = x64Add(h2, h1)\n      h2 = x64Add(x64Multiply(h2, [0, 5]), [0, 0x38495ab5])\n    }\n    k1 = [0, 0]\n    k2 = [0, 0]\n    switch (remainder) {\n      case 15:\n        k2 = x64Xor(k2, x64LeftShift([0, key.charCodeAt(i + 14)], 48))\n      // fallthrough\n      case 14:\n        k2 = x64Xor(k2, x64LeftShift([0, key.charCodeAt(i + 13)], 40))\n      // fallthrough\n      case 13:\n        k2 = x64Xor(k2, x64LeftShift([0, key.charCodeAt(i + 12)], 32))\n      // fallthrough\n      case 12:\n        k2 = x64Xor(k2, x64LeftShift([0, key.charCodeAt(i + 11)], 24))\n      // fallthrough\n      case 11:\n        k2 = x64Xor(k2, x64LeftShift([0, key.charCodeAt(i + 10)], 16))\n      // fallthrough\n      case 10:\n        k2 = x64Xor(k2, x64LeftShift([0, key.charCodeAt(i + 9)], 8))\n      // fallthrough\n      case 9:\n        k2 = x64Xor(k2, [0, key.charCodeAt(i + 8)])\n        k2 = x64Multiply(k2, c2)\n        k2 = x64Rotl(k2, 33)\n        k2 = x64Multiply(k2, c1)\n        h2 = x64Xor(h2, k2)\n      // fallthrough\n      case 8:\n        k1 = x64Xor(k1, x64LeftShift([0, key.charCodeAt(i + 7)], 56))\n      // fallthrough\n      case 7:\n        k1 = x64Xor(k1, x64LeftShift([0, key.charCodeAt(i + 6)], 48))\n      // fallthrough\n      case 6:\n        k1 = x64Xor(k1, x64LeftShift([0, key.charCodeAt(i + 5)], 40))\n      // fallthrough\n      case 5:\n        k1 = x64Xor(k1, x64LeftShift([0, key.charCodeAt(i + 4)], 32))\n      // fallthrough\n      case 4:\n        k1 = x64Xor(k1, x64LeftShift([0, key.charCodeAt(i + 3)], 24))\n      // fallthrough\n      case 3:\n        k1 = x64Xor(k1, x64LeftShift([0, key.charCodeAt(i + 2)], 16))\n      // fallthrough\n      case 2:\n        k1 = x64Xor(k1, x64LeftShift([0, key.charCodeAt(i + 1)], 8))\n      // fallthrough\n      case 1:\n        k1 = x64Xor(k1, [0, key.charCodeAt(i)])\n        k1 = x64Multiply(k1, c1)\n        k1 = x64Rotl(k1, 31)\n        k1 = x64Multiply(k1, c2)\n        h1 = x64Xor(h1, k1)\n      // fallthrough\n    }\n    h1 = x64Xor(h1, [0, key.length])\n    h2 = x64Xor(h2, [0, key.length])\n    h1 = x64Add(h1, h2)\n    h2 = x64Add(h2, h1)\n    h1 = x64Fmix(h1)\n    h2 = x64Fmix(h2)\n    h1 = x64Add(h1, h2)\n    h2 = x64Add(h2, h1)\n    return ('00000000' + (h1[0] >>> 0).toString(16)).slice(-8) + ('00000000' + (h1[1] >>> 0).toString(16)).slice(-8) + ('00000000' + (h2[0] >>> 0).toString(16)).slice(-8) + ('00000000' + (h2[1] >>> 0).toString(16)).slice(-8)\n  }\n\n  var defaultOptions = {\n    preprocessor: null,\n    audio: {\n      timeout: 1000,\n      // On iOS 11, audio context can only be used in response to user interaction.\n      // We require users to explicitly enable audio fingerprinting on iOS 11.\n      // See https://stackoverflow.com/questions/46363048/onaudioprocess-not-called-on-ios11#46534088\n      excludeIOS11: true\n    },\n    fonts: {\n      swfContainerId: 'fingerprintjs2',\n      swfPath: 'flash/compiled/FontList.swf',\n      userDefinedFonts: [],\n      extendedJsFonts: false\n    },\n    screen: {\n      // To ensure consistent fingerprints when users rotate their mobile devices\n      detectScreenOrientation: true\n    },\n    plugins: {\n      sortPluginsFor: [/palemoon/i],\n      excludeIE: false\n    },\n    extraComponents: [],\n    excludes: {\n      // Unreliable on Windows, see https://github.com/fingerprintjs/fingerprintjs/issues/375\n      'enumerateDevices': true,\n      // devicePixelRatio depends on browser zoom, and it's impossible to detect browser zoom\n      'pixelRatio': true,\n      // DNT depends on incognito mode for some browsers (Chrome) and it's impossible to detect incognito mode\n      'doNotTrack': true,\n      // uses js fonts already\n      'fontsFlash': true,\n      // Extensions (including AdBlock) are disabled by default in Incognito mod of Chrome and Firefox\n      // See https://github.com/fingerprintjs/fingerprintjs/issues/405\n      'adBlock': true\n    },\n    NOT_AVAILABLE: 'not available',\n    ERROR: 'error',\n    EXCLUDED: 'excluded'\n  }\n\n  var each = function (obj, iterator) {\n    if (Array.prototype.forEach && obj.forEach === Array.prototype.forEach) {\n      obj.forEach(iterator)\n    } else if (obj.length === +obj.length) {\n      for (var i = 0, l = obj.length; i < l; i++) {\n        iterator(obj[i], i, obj)\n      }\n    } else {\n      for (var key in obj) {\n        if (obj.hasOwnProperty(key)) {\n          iterator(obj[key], key, obj)\n        }\n      }\n    }\n  }\n\n  var map = function (obj, iterator) {\n    var results = []\n    // Not using strict equality so that this acts as a\n    // shortcut to checking for `null` and `undefined`.\n    if (obj == null) {\n      return results\n    }\n    if (Array.prototype.map && obj.map === Array.prototype.map) { return obj.map(iterator) }\n    each(obj, function (value, index, list) {\n      results.push(iterator(value, index, list))\n    })\n    return results\n  }\n\n  var extendSoft = function (target, source) {\n    if (source == null) { return target }\n    var value\n    var key\n    for (key in source) {\n      value = source[key]\n      if (value != null && !(Object.prototype.hasOwnProperty.call(target, key))) {\n        target[key] = value\n      }\n    }\n    return target\n  }\n\n  // https://developer.mozilla.org/en-US/docs/Web/API/MediaDevices/enumerateDevices\n  var enumerateDevicesKey = function (done, options) {\n    if (!isEnumerateDevicesSupported()) {\n      return done(options.NOT_AVAILABLE)\n    }\n    navigator.mediaDevices.enumerateDevices().then(function (devices) {\n      done(devices.map(function (device) {\n        return 'id=' + device.deviceId + ';gid=' + device.groupId + ';' + device.kind + ';' + device.label\n      }))\n    }).catch(function (error) {\n      done(error)\n    })\n  }\n\n  var isEnumerateDevicesSupported = function () {\n    return (navigator.mediaDevices && navigator.mediaDevices.enumerateDevices)\n  }\n  // Inspired by and based on https://github.com/cozylife/audio-fingerprint\n  var audioKey = function (done, options) {\n    var audioOptions = options.audio\n    if (audioOptions.excludeIOS11 && navigator.userAgent.match(/OS 11.+Version\\/11.+Safari/)) {\n      // See comment for excludeUserAgent and https://stackoverflow.com/questions/46363048/onaudioprocess-not-called-on-ios11#46534088\n      return done(options.EXCLUDED)\n    }\n\n    var AudioContext = window.OfflineAudioContext || window.webkitOfflineAudioContext\n\n    if (AudioContext == null) {\n      return done(options.NOT_AVAILABLE)\n    }\n\n    var context = new AudioContext(1, 44100, 44100)\n\n    var oscillator = context.createOscillator()\n    oscillator.type = 'triangle'\n    oscillator.frequency.setValueAtTime(10000, context.currentTime)\n\n    var compressor = context.createDynamicsCompressor()\n    each([\n      ['threshold', -50],\n      ['knee', 40],\n      ['ratio', 12],\n      ['reduction', -20],\n      ['attack', 0],\n      ['release', 0.25]\n    ], function (item) {\n      if (compressor[item[0]] !== undefined && typeof compressor[item[0]].setValueAtTime === 'function') {\n        compressor[item[0]].setValueAtTime(item[1], context.currentTime)\n      }\n    })\n\n    oscillator.connect(compressor)\n    compressor.connect(context.destination)\n    oscillator.start(0)\n    context.startRendering()\n\n    var audioTimeoutId = setTimeout(function () {\n      console.warn('Audio fingerprint timed out. Please report bug at https://github.com/fingerprintjs/fingerprintjs with your user agent: \"' + navigator.userAgent + '\".')\n      context.oncomplete = function () { }\n      context = null\n      return done('audioTimeout')\n    }, audioOptions.timeout)\n\n    context.oncomplete = function (event) {\n      var fingerprint\n      try {\n        clearTimeout(audioTimeoutId)\n        fingerprint = event.renderedBuffer.getChannelData(0)\n          .slice(4500, 5000)\n          .reduce(function (acc, val) { return acc + Math.abs(val) }, 0)\n          .toString()\n        oscillator.disconnect()\n        compressor.disconnect()\n      } catch (error) {\n        done(error)\n        return\n      }\n      done(fingerprint)\n    }\n  }\n  var UserAgent = function (done) {\n    done(navigator.userAgent)\n  }\n  var webdriver = function (done, options) {\n    done(navigator.webdriver == null ? options.NOT_AVAILABLE : navigator.webdriver)\n  }\n  var languageKey = function (done, options) {\n    done(navigator.language || navigator.userLanguage || navigator.browserLanguage || navigator.systemLanguage || options.NOT_AVAILABLE)\n  }\n  var colorDepthKey = function (done, options) {\n    done(window.screen.colorDepth || options.NOT_AVAILABLE)\n  }\n  var deviceMemoryKey = function (done, options) {\n    done(navigator.deviceMemory || options.NOT_AVAILABLE)\n  }\n  var pixelRatioKey = function (done, options) {\n    done(window.devicePixelRatio || options.NOT_AVAILABLE)\n  }\n  var screenResolutionKey = function (done, options) {\n    done(getScreenResolution(options))\n  }\n  var getScreenResolution = function (options) {\n    var resolution = [window.screen.width, window.screen.height]\n    if (options.screen.detectScreenOrientation) {\n      resolution.sort().reverse()\n    }\n    return resolution\n  }\n  var availableScreenResolutionKey = function (done, options) {\n    done(getAvailableScreenResolution(options))\n  }\n  var getAvailableScreenResolution = function (options) {\n    if (window.screen.availWidth && window.screen.availHeight) {\n      var available = [window.screen.availHeight, window.screen.availWidth]\n      if (options.screen.detectScreenOrientation) {\n        available.sort().reverse()\n      }\n      return available\n    }\n    // headless browsers\n    return options.NOT_AVAILABLE\n  }\n  var timezoneOffset = function (done) {\n    done(new Date().getTimezoneOffset())\n  }\n  var timezone = function (done, options) {\n    if (window.Intl && window.Intl.DateTimeFormat) {\n      done(new window.Intl.DateTimeFormat().resolvedOptions().timeZone || options.NOT_AVAILABLE)\n      return\n    }\n    done(options.NOT_AVAILABLE)\n  }\n  var sessionStorageKey = function (done, options) {\n    done(hasSessionStorage(options))\n  }\n  var localStorageKey = function (done, options) {\n    done(hasLocalStorage(options))\n  }\n  var indexedDbKey = function (done, options) {\n    done(hasIndexedDB(options))\n  }\n  var addBehaviorKey = function (done) {\n    done(!!window.HTMLElement.prototype.addBehavior)\n  }\n  var openDatabaseKey = function (done) {\n    done(!!window.openDatabase)\n  }\n  var cpuClassKey = function (done, options) {\n    done(getNavigatorCpuClass(options))\n  }\n  var platformKey = function (done, options) {\n    done(getNavigatorPlatform(options))\n  }\n  var doNotTrackKey = function (done, options) {\n    done(getDoNotTrack(options))\n  }\n  var canvasKey = function (done, options) {\n    if (isCanvasSupported()) {\n      done(getCanvasFp(options))\n      return\n    }\n    done(options.NOT_AVAILABLE)\n  }\n  var webglKey = function (done, options) {\n    if (isWebGlSupported()) {\n      done(getWebglFp())\n      return\n    }\n    done(options.NOT_AVAILABLE)\n  }\n  var webglVendorAndRendererKey = function (done) {\n    if (isWebGlSupported()) {\n      done(getWebglVendorAndRenderer())\n      return\n    }\n    done()\n  }\n  var adBlockKey = function (done) {\n    done(getAdBlock())\n  }\n  var hasLiedLanguagesKey = function (done) {\n    done(getHasLiedLanguages())\n  }\n  var hasLiedResolutionKey = function (done) {\n    done(getHasLiedResolution())\n  }\n  var hasLiedOsKey = function (done) {\n    done(getHasLiedOs())\n  }\n  var hasLiedBrowserKey = function (done) {\n    done(getHasLiedBrowser())\n  }\n  // flash fonts (will increase fingerprinting time 20X to ~ 130-150ms)\n  var flashFontsKey = function (done, options) {\n    // we do flash if swfobject is loaded\n    if (!hasSwfObjectLoaded()) {\n      return done('swf object not loaded')\n    }\n    if (!hasMinFlashInstalled()) {\n      return done('flash not installed')\n    }\n    if (!options.fonts.swfPath) {\n      return done('missing options.fonts.swfPath')\n    }\n    loadSwfAndDetectFonts(function (fonts) {\n      done(fonts)\n    }, options)\n  }\n  // kudos to http://www.lalit.org/lab/javascript-css-font-detect/\n  var jsFontsKey = function (done, options) {\n    // a font will be compared against all the three default fonts.\n    // and if it doesn't match all 3 then that font is not available.\n    var baseFonts = ['monospace', 'sans-serif', 'serif']\n\n    var fontList = [\n      'Andale Mono', 'Arial', 'Arial Black', 'Arial Hebrew', 'Arial MT', 'Arial Narrow', 'Arial Rounded MT Bold', 'Arial Unicode MS',\n      'Bitstream Vera Sans Mono', 'Book Antiqua', 'Bookman Old Style',\n      'Calibri', 'Cambria', 'Cambria Math', 'Century', 'Century Gothic', 'Century Schoolbook', 'Comic Sans', 'Comic Sans MS', 'Consolas', 'Courier', 'Courier New',\n      'Geneva', 'Georgia',\n      'Helvetica', 'Helvetica Neue',\n      'Impact',\n      'Lucida Bright', 'Lucida Calligraphy', 'Lucida Console', 'Lucida Fax', 'LUCIDA GRANDE', 'Lucida Handwriting', 'Lucida Sans', 'Lucida Sans Typewriter', 'Lucida Sans Unicode',\n      'Microsoft Sans Serif', 'Monaco', 'Monotype Corsiva', 'MS Gothic', 'MS Outlook', 'MS PGothic', 'MS Reference Sans Serif', 'MS Sans Serif', 'MS Serif', 'MYRIAD', 'MYRIAD PRO',\n      'Palatino', 'Palatino Linotype',\n      'Segoe Print', 'Segoe Script', 'Segoe UI', 'Segoe UI Light', 'Segoe UI Semibold', 'Segoe UI Symbol',\n      'Tahoma', 'Times', 'Times New Roman', 'Times New Roman PS', 'Trebuchet MS',\n      'Verdana', 'Wingdings', 'Wingdings 2', 'Wingdings 3'\n    ]\n\n    if (options.fonts.extendedJsFonts) {\n      var extendedFontList = [\n        'Abadi MT Condensed Light', 'Academy Engraved LET', 'ADOBE CASLON PRO', 'Adobe Garamond', 'ADOBE GARAMOND PRO', 'Agency FB', 'Aharoni', 'Albertus Extra Bold', 'Albertus Medium', 'Algerian', 'Amazone BT', 'American Typewriter',\n        'American Typewriter Condensed', 'AmerType Md BT', 'Andalus', 'Angsana New', 'AngsanaUPC', 'Antique Olive', 'Aparajita', 'Apple Chancery', 'Apple Color Emoji', 'Apple SD Gothic Neo', 'Arabic Typesetting', 'ARCHER',\n        'ARNO PRO', 'Arrus BT', 'Aurora Cn BT', 'AvantGarde Bk BT', 'AvantGarde Md BT', 'AVENIR', 'Ayuthaya', 'Bandy', 'Bangla Sangam MN', 'Bank Gothic', 'BankGothic Md BT', 'Baskerville',\n        'Baskerville Old Face', 'Batang', 'BatangChe', 'Bauer Bodoni', 'Bauhaus 93', 'Bazooka', 'Bell MT', 'Bembo', 'Benguiat Bk BT', 'Berlin Sans FB', 'Berlin Sans FB Demi', 'Bernard MT Condensed', 'BernhardFashion BT', 'BernhardMod BT', 'Big Caslon', 'BinnerD',\n        'Blackadder ITC', 'BlairMdITC TT', 'Bodoni 72', 'Bodoni 72 Oldstyle', 'Bodoni 72 Smallcaps', 'Bodoni MT', 'Bodoni MT Black', 'Bodoni MT Condensed', 'Bodoni MT Poster Compressed',\n        'Bookshelf Symbol 7', 'Boulder', 'Bradley Hand', 'Bradley Hand ITC', 'Bremen Bd BT', 'Britannic Bold', 'Broadway', 'Browallia New', 'BrowalliaUPC', 'Brush Script MT', 'Californian FB', 'Calisto MT', 'Calligrapher', 'Candara',\n        'CaslonOpnface BT', 'Castellar', 'Centaur', 'Cezanne', 'CG Omega', 'CG Times', 'Chalkboard', 'Chalkboard SE', 'Chalkduster', 'Charlesworth', 'Charter Bd BT', 'Charter BT', 'Chaucer',\n        'ChelthmITC Bk BT', 'Chiller', 'Clarendon', 'Clarendon Condensed', 'CloisterBlack BT', 'Cochin', 'Colonna MT', 'Constantia', 'Cooper Black', 'Copperplate', 'Copperplate Gothic', 'Copperplate Gothic Bold',\n        'Copperplate Gothic Light', 'CopperplGoth Bd BT', 'Corbel', 'Cordia New', 'CordiaUPC', 'Cornerstone', 'Coronet', 'Cuckoo', 'Curlz MT', 'DaunPenh', 'Dauphin', 'David', 'DB LCD Temp', 'DELICIOUS', 'Denmark',\n        'DFKai-SB', 'Didot', 'DilleniaUPC', 'DIN', 'DokChampa', 'Dotum', 'DotumChe', 'Ebrima', 'Edwardian Script ITC', 'Elephant', 'English 111 Vivace BT', 'Engravers MT', 'EngraversGothic BT', 'Eras Bold ITC', 'Eras Demi ITC', 'Eras Light ITC', 'Eras Medium ITC',\n        'EucrosiaUPC', 'Euphemia', 'Euphemia UCAS', 'EUROSTILE', 'Exotc350 Bd BT', 'FangSong', 'Felix Titling', 'Fixedsys', 'FONTIN', 'Footlight MT Light', 'Forte',\n        'FrankRuehl', 'Fransiscan', 'Freefrm721 Blk BT', 'FreesiaUPC', 'Freestyle Script', 'French Script MT', 'FrnkGothITC Bk BT', 'Fruitger', 'FRUTIGER',\n        'Futura', 'Futura Bk BT', 'Futura Lt BT', 'Futura Md BT', 'Futura ZBlk BT', 'FuturaBlack BT', 'Gabriola', 'Galliard BT', 'Gautami', 'Geeza Pro', 'Geometr231 BT', 'Geometr231 Hv BT', 'Geometr231 Lt BT', 'GeoSlab 703 Lt BT',\n        'GeoSlab 703 XBd BT', 'Gigi', 'Gill Sans', 'Gill Sans MT', 'Gill Sans MT Condensed', 'Gill Sans MT Ext Condensed Bold', 'Gill Sans Ultra Bold', 'Gill Sans Ultra Bold Condensed', 'Gisha', 'Gloucester MT Extra Condensed', 'GOTHAM', 'GOTHAM BOLD',\n        'Goudy Old Style', 'Goudy Stout', 'GoudyHandtooled BT', 'GoudyOLSt BT', 'Gujarati Sangam MN', 'Gulim', 'GulimChe', 'Gungsuh', 'GungsuhChe', 'Gurmukhi MN', 'Haettenschweiler', 'Harlow Solid Italic', 'Harrington', 'Heather', 'Heiti SC', 'Heiti TC', 'HELV',\n        'Herald', 'High Tower Text', 'Hiragino Kaku Gothic ProN', 'Hiragino Mincho ProN', 'Hoefler Text', 'Humanst 521 Cn BT', 'Humanst521 BT', 'Humanst521 Lt BT', 'Imprint MT Shadow', 'Incised901 Bd BT', 'Incised901 BT',\n        'Incised901 Lt BT', 'INCONSOLATA', 'Informal Roman', 'Informal011 BT', 'INTERSTATE', 'IrisUPC', 'Iskoola Pota', 'JasmineUPC', 'Jazz LET', 'Jenson', 'Jester', 'Jokerman', 'Juice ITC', 'Kabel Bk BT', 'Kabel Ult BT', 'Kailasa', 'KaiTi', 'Kalinga', 'Kannada Sangam MN',\n        'Kartika', 'Kaufmann Bd BT', 'Kaufmann BT', 'Khmer UI', 'KodchiangUPC', 'Kokila', 'Korinna BT', 'Kristen ITC', 'Krungthep', 'Kunstler Script', 'Lao UI', 'Latha', 'Leelawadee', 'Letter Gothic', 'Levenim MT', 'LilyUPC', 'Lithograph', 'Lithograph Light', 'Long Island',\n        'Lydian BT', 'Magneto', 'Maiandra GD', 'Malayalam Sangam MN', 'Malgun Gothic',\n        'Mangal', 'Marigold', 'Marion', 'Marker Felt', 'Market', 'Marlett', 'Matisse ITC', 'Matura MT Script Capitals', 'Meiryo', 'Meiryo UI', 'Microsoft Himalaya', 'Microsoft JhengHei', 'Microsoft New Tai Lue', 'Microsoft PhagsPa', 'Microsoft Tai Le',\n        'Microsoft Uighur', 'Microsoft YaHei', 'Microsoft Yi Baiti', 'MingLiU', 'MingLiU_HKSCS', 'MingLiU_HKSCS-ExtB', 'MingLiU-ExtB', 'Minion', 'Minion Pro', 'Miriam', 'Miriam Fixed', 'Mistral', 'Modern', 'Modern No. 20', 'Mona Lisa Solid ITC TT', 'Mongolian Baiti',\n        'MONO', 'MoolBoran', 'Mrs Eaves', 'MS LineDraw', 'MS Mincho', 'MS PMincho', 'MS Reference Specialty', 'MS UI Gothic', 'MT Extra', 'MUSEO', 'MV Boli',\n        'Nadeem', 'Narkisim', 'NEVIS', 'News Gothic', 'News GothicMT', 'NewsGoth BT', 'Niagara Engraved', 'Niagara Solid', 'Noteworthy', 'NSimSun', 'Nyala', 'OCR A Extended', 'Old Century', 'Old English Text MT', 'Onyx', 'Onyx BT', 'OPTIMA', 'Oriya Sangam MN',\n        'OSAKA', 'OzHandicraft BT', 'Palace Script MT', 'Papyrus', 'Parchment', 'Party LET', 'Pegasus', 'Perpetua', 'Perpetua Titling MT', 'PetitaBold', 'Pickwick', 'Plantagenet Cherokee', 'Playbill', 'PMingLiU', 'PMingLiU-ExtB',\n        'Poor Richard', 'Poster', 'PosterBodoni BT', 'PRINCETOWN LET', 'Pristina', 'PTBarnum BT', 'Pythagoras', 'Raavi', 'Rage Italic', 'Ravie', 'Ribbon131 Bd BT', 'Rockwell', 'Rockwell Condensed', 'Rockwell Extra Bold', 'Rod', 'Roman', 'Sakkal Majalla',\n        'Santa Fe LET', 'Savoye LET', 'Sceptre', 'Script', 'Script MT Bold', 'SCRIPTINA', 'Serifa', 'Serifa BT', 'Serifa Th BT', 'ShelleyVolante BT', 'Sherwood',\n        'Shonar Bangla', 'Showcard Gothic', 'Shruti', 'Signboard', 'SILKSCREEN', 'SimHei', 'Simplified Arabic', 'Simplified Arabic Fixed', 'SimSun', 'SimSun-ExtB', 'Sinhala Sangam MN', 'Sketch Rockwell', 'Skia', 'Small Fonts', 'Snap ITC', 'Snell Roundhand', 'Socket',\n        'Souvenir Lt BT', 'Staccato222 BT', 'Steamer', 'Stencil', 'Storybook', 'Styllo', 'Subway', 'Swis721 BlkEx BT', 'Swiss911 XCm BT', 'Sylfaen', 'Synchro LET', 'System', 'Tamil Sangam MN', 'Technical', 'Teletype', 'Telugu Sangam MN', 'Tempus Sans ITC',\n        'Terminal', 'Thonburi', 'Traditional Arabic', 'Trajan', 'TRAJAN PRO', 'Tristan', 'Tubular', 'Tunga', 'Tw Cen MT', 'Tw Cen MT Condensed', 'Tw Cen MT Condensed Extra Bold',\n        'TypoUpright BT', 'Unicorn', 'Univers', 'Univers CE 55 Medium', 'Univers Condensed', 'Utsaah', 'Vagabond', 'Vani', 'Vijaya', 'Viner Hand ITC', 'VisualUI', 'Vivaldi', 'Vladimir Script', 'Vrinda', 'Westminster', 'WHITNEY', 'Wide Latin',\n        'ZapfEllipt BT', 'ZapfHumnst BT', 'ZapfHumnst Dm BT', 'Zapfino', 'Zurich BlkEx BT', 'Zurich Ex BT', 'ZWAdobeF']\n      fontList = fontList.concat(extendedFontList)\n    }\n\n    fontList = fontList.concat(options.fonts.userDefinedFonts)\n\n    // remove duplicate fonts\n    fontList = fontList.filter(function (font, position) {\n      return fontList.indexOf(font) === position\n    })\n\n    // we use m or w because these two characters take up the maximum width.\n    // And we use a LLi so that the same matching fonts can get separated\n    var testString = 'mmmmmmmmmmlli'\n\n    // we test using 72px font size, we may use any size. I guess larger the better.\n    var testSize = '72px'\n\n    var h = document.getElementsByTagName('body')[0]\n\n    // div to load spans for the base fonts\n    var baseFontsDiv = document.createElement('div')\n\n    // div to load spans for the fonts to detect\n    var fontsDiv = document.createElement('div')\n\n    var defaultWidth = {}\n    var defaultHeight = {}\n\n    // creates a span where the fonts will be loaded\n    var createSpan = function () {\n      var s = document.createElement('span')\n      /*\n       * We need this css as in some weird browser this\n       * span elements shows up for a microSec which creates a\n       * bad user experience\n       */\n      s.style.position = 'absolute'\n      s.style.left = '-9999px'\n      s.style.fontSize = testSize\n\n      // css font reset to reset external styles\n      s.style.fontStyle = 'normal'\n      s.style.fontWeight = 'normal'\n      s.style.letterSpacing = 'normal'\n      s.style.lineBreak = 'auto'\n      s.style.lineHeight = 'normal'\n      s.style.textTransform = 'none'\n      s.style.textAlign = 'left'\n      s.style.textDecoration = 'none'\n      s.style.textShadow = 'none'\n      s.style.whiteSpace = 'normal'\n      s.style.wordBreak = 'normal'\n      s.style.wordSpacing = 'normal'\n\n      s.innerHTML = testString\n      return s\n    }\n\n    // creates a span and load the font to detect and a base font for fallback\n    var createSpanWithFonts = function (fontToDetect, baseFont) {\n      var s = createSpan()\n      s.style.fontFamily = \"'\" + fontToDetect + \"',\" + baseFont\n      return s\n    }\n\n    // creates spans for the base fonts and adds them to baseFontsDiv\n    var initializeBaseFontsSpans = function () {\n      var spans = []\n      for (var index = 0, length = baseFonts.length; index < length; index++) {\n        var s = createSpan()\n        s.style.fontFamily = baseFonts[index]\n        baseFontsDiv.appendChild(s)\n        spans.push(s)\n      }\n      return spans\n    }\n\n    // creates spans for the fonts to detect and adds them to fontsDiv\n    var initializeFontsSpans = function () {\n      var spans = {}\n      for (var i = 0, l = fontList.length; i < l; i++) {\n        var fontSpans = []\n        for (var j = 0, numDefaultFonts = baseFonts.length; j < numDefaultFonts; j++) {\n          var s = createSpanWithFonts(fontList[i], baseFonts[j])\n          fontsDiv.appendChild(s)\n          fontSpans.push(s)\n        }\n        spans[fontList[i]] = fontSpans // Stores {fontName : [spans for that font]}\n      }\n      return spans\n    }\n\n    // checks if a font is available\n    var isFontAvailable = function (fontSpans) {\n      var detected = false\n      for (var i = 0; i < baseFonts.length; i++) {\n        detected = (fontSpans[i].offsetWidth !== defaultWidth[baseFonts[i]] || fontSpans[i].offsetHeight !== defaultHeight[baseFonts[i]])\n        if (detected) {\n          return detected\n        }\n      }\n      return detected\n    }\n\n    // create spans for base fonts\n    var baseFontsSpans = initializeBaseFontsSpans()\n\n    // add the spans to the DOM\n    h.appendChild(baseFontsDiv)\n\n    // get the default width for the three base fonts\n    for (var index = 0, length = baseFonts.length; index < length; index++) {\n      defaultWidth[baseFonts[index]] = baseFontsSpans[index].offsetWidth // width for the default font\n      defaultHeight[baseFonts[index]] = baseFontsSpans[index].offsetHeight // height for the default font\n    }\n\n    // create spans for fonts to detect\n    var fontsSpans = initializeFontsSpans()\n\n    // add all the spans to the DOM\n    h.appendChild(fontsDiv)\n\n    // check available fonts\n    var available = []\n    for (var i = 0, l = fontList.length; i < l; i++) {\n      if (isFontAvailable(fontsSpans[fontList[i]])) {\n        available.push(fontList[i])\n      }\n    }\n\n    // remove spans from DOM\n    h.removeChild(fontsDiv)\n    h.removeChild(baseFontsDiv)\n    done(available)\n  }\n  var pluginsComponent = function (done, options) {\n    if (isIE()) {\n      if (!options.plugins.excludeIE) {\n        done(getIEPlugins(options))\n      } else {\n        done(options.EXCLUDED)\n      }\n    } else {\n      done(getRegularPlugins(options))\n    }\n  }\n  var getRegularPlugins = function (options) {\n    if (navigator.plugins == null) {\n      return options.NOT_AVAILABLE\n    }\n\n    var plugins = []\n    // plugins isn't defined in Node envs.\n    for (var i = 0, l = navigator.plugins.length; i < l; i++) {\n      if (navigator.plugins[i]) { plugins.push(navigator.plugins[i]) }\n    }\n\n    // sorting plugins only for those user agents, that we know randomize the plugins\n    // every time we try to enumerate them\n    if (pluginsShouldBeSorted(options)) {\n      plugins = plugins.sort(function (a, b) {\n        if (a.name > b.name) { return 1 }\n        if (a.name < b.name) { return -1 }\n        return 0\n      })\n    }\n    return map(plugins, function (p) {\n      var mimeTypes = map(p, function (mt) {\n        return [mt.type, mt.suffixes]\n      })\n      return [p.name, p.description, mimeTypes]\n    })\n  }\n  var getIEPlugins = function (options) {\n    var result = []\n    if ((Object.getOwnPropertyDescriptor && Object.getOwnPropertyDescriptor(window, 'ActiveXObject')) || ('ActiveXObject' in window)) {\n      var names = [\n        'AcroPDF.PDF', // Adobe PDF reader 7+\n        'Adodb.Stream',\n        'AgControl.AgControl', // Silverlight\n        'DevalVRXCtrl.DevalVRXCtrl.1',\n        'MacromediaFlashPaper.MacromediaFlashPaper',\n        'Msxml2.DOMDocument',\n        'Msxml2.XMLHTTP',\n        'PDF.PdfCtrl', // Adobe PDF reader 6 and earlier, brrr\n        'QuickTime.QuickTime', // QuickTime\n        'QuickTimeCheckObject.QuickTimeCheck.1',\n        'RealPlayer',\n        'RealPlayer.RealPlayer(tm) ActiveX Control (32-bit)',\n        'RealVideo.RealVideo(tm) ActiveX Control (32-bit)',\n        'Scripting.Dictionary',\n        'SWCtl.SWCtl', // ShockWave player\n        'Shell.UIHelper',\n        'ShockwaveFlash.ShockwaveFlash', // flash plugin\n        'Skype.Detection',\n        'TDCCtl.TDCCtl',\n        'WMPlayer.OCX', // Windows media player\n        'rmocx.RealPlayer G2 Control',\n        'rmocx.RealPlayer G2 Control.1'\n      ]\n      // starting to detect plugins in IE\n      result = map(names, function (name) {\n        try {\n          // eslint-disable-next-line no-new\n          new window.ActiveXObject(name)\n          return name\n        } catch (e) {\n          return options.ERROR\n        }\n      })\n    } else {\n      result.push(options.NOT_AVAILABLE)\n    }\n    if (navigator.plugins) {\n      result = result.concat(getRegularPlugins(options))\n    }\n    return result\n  }\n  var pluginsShouldBeSorted = function (options) {\n    var should = false\n    for (var i = 0, l = options.plugins.sortPluginsFor.length; i < l; i++) {\n      var re = options.plugins.sortPluginsFor[i]\n      if (navigator.userAgent.match(re)) {\n        should = true\n        break\n      }\n    }\n    return should\n  }\n  var touchSupportKey = function (done) {\n    done(getTouchSupport())\n  }\n  var hardwareConcurrencyKey = function (done, options) {\n    done(getHardwareConcurrency(options))\n  }\n  var hasSessionStorage = function (options) {\n    try {\n      return !!window.sessionStorage\n    } catch (e) {\n      return options.ERROR // SecurityError when referencing it means it exists\n    }\n  }\n\n  // https://bugzilla.mozilla.org/show_bug.cgi?id=781447\n  var hasLocalStorage = function (options) {\n    try {\n      return !!window.localStorage\n    } catch (e) {\n      return options.ERROR // SecurityError when referencing it means it exists\n    }\n  }\n  var hasIndexedDB = function (options) {\n    // IE and Edge don't allow accessing indexedDB in private mode, therefore IE and Edge will have different\n    // fingerprints in normal and private modes.\n    if (isIEOrOldEdge()) {\n      return options.EXCLUDED\n    }\n    try {\n      return !!window.indexedDB\n    } catch (e) {\n      return options.ERROR // SecurityError when referencing it means it exists\n    }\n  }\n  var getHardwareConcurrency = function (options) {\n    if (navigator.hardwareConcurrency) {\n      return navigator.hardwareConcurrency\n    }\n    return options.NOT_AVAILABLE\n  }\n  var getNavigatorCpuClass = function (options) {\n    return navigator.cpuClass || options.NOT_AVAILABLE\n  }\n  var getNavigatorPlatform = function (options) {\n    if (navigator.platform) {\n      return navigator.platform\n    } else {\n      return options.NOT_AVAILABLE\n    }\n  }\n  var getDoNotTrack = function (options) {\n    if (navigator.doNotTrack) {\n      return navigator.doNotTrack\n    } else if (navigator.msDoNotTrack) {\n      return navigator.msDoNotTrack\n    } else if (window.doNotTrack) {\n      return window.doNotTrack\n    } else {\n      return options.NOT_AVAILABLE\n    }\n  }\n  // This is a crude and primitive touch screen detection.\n  // It's not possible to currently reliably detect the  availability of a touch screen\n  // with a JS, without actually subscribing to a touch event.\n  // http://www.stucox.com/blog/you-cant-detect-a-touchscreen/\n  // https://github.com/Modernizr/Modernizr/issues/548\n  // method returns an array of 3 values:\n  // maxTouchPoints, the success or failure of creating a TouchEvent,\n  // and the availability of the 'ontouchstart' property\n\n  var getTouchSupport = function () {\n    var maxTouchPoints = 0\n    var touchEvent\n    if (typeof navigator.maxTouchPoints !== 'undefined') {\n      maxTouchPoints = navigator.maxTouchPoints\n    } else if (typeof navigator.msMaxTouchPoints !== 'undefined') {\n      maxTouchPoints = navigator.msMaxTouchPoints\n    }\n    try {\n      document.createEvent('TouchEvent')\n      touchEvent = true\n    } catch (_) {\n      touchEvent = false\n    }\n    var touchStart = 'ontouchstart' in window\n    return [maxTouchPoints, touchEvent, touchStart]\n  }\n  // https://www.browserleaks.com/canvas#how-does-it-work\n\n  var getCanvasFp = function (options) {\n    var result = []\n    // Very simple now, need to make it more complex (geo shapes etc)\n    var canvas = document.createElement('canvas')\n    canvas.width = 2000\n    canvas.height = 200\n    canvas.style.display = 'inline'\n    var ctx = canvas.getContext('2d')\n    // detect browser support of canvas winding\n    // http://blogs.adobe.com/webplatform/2013/01/30/winding-rules-in-canvas/\n    // https://github.com/Modernizr/Modernizr/blob/master/feature-detects/canvas/winding.js\n    ctx.rect(0, 0, 10, 10)\n    ctx.rect(2, 2, 6, 6)\n    result.push('canvas winding:' + ((ctx.isPointInPath(5, 5, 'evenodd') === false) ? 'yes' : 'no'))\n\n    ctx.textBaseline = 'alphabetic'\n    ctx.fillStyle = '#f60'\n    ctx.fillRect(125, 1, 62, 20)\n    ctx.fillStyle = '#069'\n    // https://github.com/fingerprintjs/fingerprintjs/issues/66\n    if (options.dontUseFakeFontInCanvas) {\n      ctx.font = '11pt Arial'\n    } else {\n      ctx.font = '11pt no-real-font-123'\n    }\n    ctx.fillText('Cwm fjordbank glyphs vext quiz, \\ud83d\\ude03', 2, 15)\n    ctx.fillStyle = 'rgba(102, 204, 0, 0.2)'\n    ctx.font = '18pt Arial'\n    ctx.fillText('Cwm fjordbank glyphs vext quiz, \\ud83d\\ude03', 4, 45)\n\n    // canvas blending\n    // http://blogs.adobe.com/webplatform/2013/01/28/blending-features-in-canvas/\n    // http://jsfiddle.net/NDYV8/16/\n    ctx.globalCompositeOperation = 'multiply'\n    ctx.fillStyle = 'rgb(255,0,255)'\n    ctx.beginPath()\n    ctx.arc(50, 50, 50, 0, Math.PI * 2, true)\n    ctx.closePath()\n    ctx.fill()\n    ctx.fillStyle = 'rgb(0,255,255)'\n    ctx.beginPath()\n    ctx.arc(100, 50, 50, 0, Math.PI * 2, true)\n    ctx.closePath()\n    ctx.fill()\n    ctx.fillStyle = 'rgb(255,255,0)'\n    ctx.beginPath()\n    ctx.arc(75, 100, 50, 0, Math.PI * 2, true)\n    ctx.closePath()\n    ctx.fill()\n    ctx.fillStyle = 'rgb(255,0,255)'\n    // canvas winding\n    // http://blogs.adobe.com/webplatform/2013/01/30/winding-rules-in-canvas/\n    // http://jsfiddle.net/NDYV8/19/\n    ctx.arc(75, 75, 75, 0, Math.PI * 2, true)\n    ctx.arc(75, 75, 25, 0, Math.PI * 2, true)\n    ctx.fill('evenodd')\n\n    if (canvas.toDataURL) { result.push('canvas fp:' + canvas.toDataURL()) }\n    return result\n  }\n  var getWebglFp = function () {\n    var gl\n    var fa2s = function (fa) {\n      gl.clearColor(0.0, 0.0, 0.0, 1.0)\n      gl.enable(gl.DEPTH_TEST)\n      gl.depthFunc(gl.LEQUAL)\n      gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT)\n      return '[' + fa[0] + ', ' + fa[1] + ']'\n    }\n    var maxAnisotropy = function (gl) {\n      var ext = gl.getExtension('EXT_texture_filter_anisotropic') || gl.getExtension('WEBKIT_EXT_texture_filter_anisotropic') || gl.getExtension('MOZ_EXT_texture_filter_anisotropic')\n      if (ext) {\n        var anisotropy = gl.getParameter(ext.MAX_TEXTURE_MAX_ANISOTROPY_EXT)\n        if (anisotropy === 0) {\n          anisotropy = 2\n        }\n        return anisotropy\n      } else {\n        return null\n      }\n    }\n\n    gl = getWebglCanvas()\n    if (!gl) { return null }\n    // WebGL fingerprinting is a combination of techniques, found in MaxMind antifraud script & Augur fingerprinting.\n    // First it draws a gradient object with shaders and convers the image to the Base64 string.\n    // Then it enumerates all WebGL extensions & capabilities and appends them to the Base64 string, resulting in a huge WebGL string, potentially very unique on each device\n    // Since iOS supports webgl starting from version 8.1 and 8.1 runs on several graphics chips, the results may be different across ios devices, but we need to verify it.\n    var result = []\n    var vShaderTemplate = 'attribute vec2 attrVertex;varying vec2 varyinTexCoordinate;uniform vec2 uniformOffset;void main(){varyinTexCoordinate=attrVertex+uniformOffset;gl_Position=vec4(attrVertex,0,1);}'\n    var fShaderTemplate = 'precision mediump float;varying vec2 varyinTexCoordinate;void main() {gl_FragColor=vec4(varyinTexCoordinate,0,1);}'\n    var vertexPosBuffer = gl.createBuffer()\n    gl.bindBuffer(gl.ARRAY_BUFFER, vertexPosBuffer)\n    var vertices = new Float32Array([-0.2, -0.9, 0, 0.4, -0.26, 0, 0, 0.732134444, 0])\n    gl.bufferData(gl.ARRAY_BUFFER, vertices, gl.STATIC_DRAW)\n    vertexPosBuffer.itemSize = 3\n    vertexPosBuffer.numItems = 3\n    var program = gl.createProgram()\n    var vshader = gl.createShader(gl.VERTEX_SHADER)\n    gl.shaderSource(vshader, vShaderTemplate)\n    gl.compileShader(vshader)\n    var fshader = gl.createShader(gl.FRAGMENT_SHADER)\n    gl.shaderSource(fshader, fShaderTemplate)\n    gl.compileShader(fshader)\n    gl.attachShader(program, vshader)\n    gl.attachShader(program, fshader)\n    gl.linkProgram(program)\n    gl.useProgram(program)\n    program.vertexPosAttrib = gl.getAttribLocation(program, 'attrVertex')\n    program.offsetUniform = gl.getUniformLocation(program, 'uniformOffset')\n    gl.enableVertexAttribArray(program.vertexPosArray)\n    gl.vertexAttribPointer(program.vertexPosAttrib, vertexPosBuffer.itemSize, gl.FLOAT, !1, 0, 0)\n    gl.uniform2f(program.offsetUniform, 1, 1)\n    gl.drawArrays(gl.TRIANGLE_STRIP, 0, vertexPosBuffer.numItems)\n    try {\n      result.push(gl.canvas.toDataURL())\n    } catch (e) {\n      /* .toDataURL may be absent or broken (blocked by extension) */\n    }\n    result.push('extensions:' + (gl.getSupportedExtensions() || []).join(';'))\n    result.push('webgl aliased line width range:' + fa2s(gl.getParameter(gl.ALIASED_LINE_WIDTH_RANGE)))\n    result.push('webgl aliased point size range:' + fa2s(gl.getParameter(gl.ALIASED_POINT_SIZE_RANGE)))\n    result.push('webgl alpha bits:' + gl.getParameter(gl.ALPHA_BITS))\n    result.push('webgl antialiasing:' + (gl.getContextAttributes().antialias ? 'yes' : 'no'))\n    result.push('webgl blue bits:' + gl.getParameter(gl.BLUE_BITS))\n    result.push('webgl depth bits:' + gl.getParameter(gl.DEPTH_BITS))\n    result.push('webgl green bits:' + gl.getParameter(gl.GREEN_BITS))\n    result.push('webgl max anisotropy:' + maxAnisotropy(gl))\n    result.push('webgl max combined texture image units:' + gl.getParameter(gl.MAX_COMBINED_TEXTURE_IMAGE_UNITS))\n    result.push('webgl max cube map texture size:' + gl.getParameter(gl.MAX_CUBE_MAP_TEXTURE_SIZE))\n    result.push('webgl max fragment uniform vectors:' + gl.getParameter(gl.MAX_FRAGMENT_UNIFORM_VECTORS))\n    result.push('webgl max render buffer size:' + gl.getParameter(gl.MAX_RENDERBUFFER_SIZE))\n    result.push('webgl max texture image units:' + gl.getParameter(gl.MAX_TEXTURE_IMAGE_UNITS))\n    result.push('webgl max texture size:' + gl.getParameter(gl.MAX_TEXTURE_SIZE))\n    result.push('webgl max varying vectors:' + gl.getParameter(gl.MAX_VARYING_VECTORS))\n    result.push('webgl max vertex attribs:' + gl.getParameter(gl.MAX_VERTEX_ATTRIBS))\n    result.push('webgl max vertex texture image units:' + gl.getParameter(gl.MAX_VERTEX_TEXTURE_IMAGE_UNITS))\n    result.push('webgl max vertex uniform vectors:' + gl.getParameter(gl.MAX_VERTEX_UNIFORM_VECTORS))\n    result.push('webgl max viewport dims:' + fa2s(gl.getParameter(gl.MAX_VIEWPORT_DIMS)))\n    result.push('webgl red bits:' + gl.getParameter(gl.RED_BITS))\n    result.push('webgl renderer:' + gl.getParameter(gl.RENDERER))\n    result.push('webgl shading language version:' + gl.getParameter(gl.SHADING_LANGUAGE_VERSION))\n    result.push('webgl stencil bits:' + gl.getParameter(gl.STENCIL_BITS))\n    result.push('webgl vendor:' + gl.getParameter(gl.VENDOR))\n    result.push('webgl version:' + gl.getParameter(gl.VERSION))\n\n    try {\n      // Add the unmasked vendor and unmasked renderer if the debug_renderer_info extension is available\n      var extensionDebugRendererInfo = gl.getExtension('WEBGL_debug_renderer_info')\n      if (extensionDebugRendererInfo) {\n        result.push('webgl unmasked vendor:' + gl.getParameter(extensionDebugRendererInfo.UNMASKED_VENDOR_WEBGL))\n        result.push('webgl unmasked renderer:' + gl.getParameter(extensionDebugRendererInfo.UNMASKED_RENDERER_WEBGL))\n      }\n    } catch (e) { /* squelch */ }\n\n    if (!gl.getShaderPrecisionFormat) {\n      loseWebglContext(gl)\n      return result\n    }\n\n    each(['FLOAT', 'INT'], function (numType) {\n      each(['VERTEX', 'FRAGMENT'], function (shader) {\n        each(['HIGH', 'MEDIUM', 'LOW'], function (numSize) {\n          each(['precision', 'rangeMin', 'rangeMax'], function (key) {\n            var format = gl.getShaderPrecisionFormat(gl[shader + '_SHADER'], gl[numSize + '_' + numType])[key]\n            if (key !== 'precision') {\n              key = 'precision ' + key\n            }\n            var line = ['webgl ', shader.toLowerCase(), ' shader ', numSize.toLowerCase(), ' ', numType.toLowerCase(), ' ', key, ':', format].join('')\n            result.push(line)\n          })\n        })\n      })\n    })\n    loseWebglContext(gl)\n    return result\n  }\n  var getWebglVendorAndRenderer = function () {\n    /* This a subset of the WebGL fingerprint with a lot of entropy, while being reasonably browser-independent */\n    try {\n      var glContext = getWebglCanvas()\n      var extensionDebugRendererInfo = glContext.getExtension('WEBGL_debug_renderer_info')\n      var params = glContext.getParameter(extensionDebugRendererInfo.UNMASKED_VENDOR_WEBGL) + '~' + glContext.getParameter(extensionDebugRendererInfo.UNMASKED_RENDERER_WEBGL)\n      loseWebglContext(glContext)\n      return params\n    } catch (e) {\n      return null\n    }\n  }\n  var getAdBlock = function () {\n    var ads = document.createElement('div')\n    ads.innerHTML = '&nbsp;'\n    ads.className = 'adsbox'\n    var result = false\n    try {\n      // body may not exist, that's why we need try/catch\n      document.body.appendChild(ads)\n      result = document.getElementsByClassName('adsbox')[0].offsetHeight === 0\n      document.body.removeChild(ads)\n    } catch (e) {\n      result = false\n    }\n    return result\n  }\n  var getHasLiedLanguages = function () {\n    // We check if navigator.language is equal to the first language of navigator.languages\n    // navigator.languages is undefined on IE11 (and potentially older IEs)\n    if (typeof navigator.languages !== 'undefined') {\n      try {\n        var firstLanguages = navigator.languages[0].substr(0, 2)\n        if (firstLanguages !== navigator.language.substr(0, 2)) {\n          return true\n        }\n      } catch (err) {\n        return true\n      }\n    }\n    return false\n  }\n  var getHasLiedResolution = function () {\n    return window.screen.width < window.screen.availWidth || window.screen.height < window.screen.availHeight\n  }\n  var getHasLiedOs = function () {\n    var userAgent = navigator.userAgent.toLowerCase()\n    var oscpu = navigator.oscpu\n    var platform = navigator.platform.toLowerCase()\n    var os\n    // We extract the OS from the user agent (respect the order of the if else if statement)\n    if (userAgent.indexOf('windows phone') >= 0) {\n      os = 'Windows Phone'\n    } else if (userAgent.indexOf('windows') >= 0 || userAgent.indexOf('win16') >= 0 || userAgent.indexOf('win32') >= 0 || userAgent.indexOf('win64') >= 0 || userAgent.indexOf('win95') >= 0 || userAgent.indexOf('win98') >= 0 || userAgent.indexOf('winnt') >= 0 || userAgent.indexOf('wow64') >= 0) {\n      os = 'Windows'\n    } else if (userAgent.indexOf('android') >= 0) {\n      os = 'Android'\n    } else if (userAgent.indexOf('linux') >= 0 || userAgent.indexOf('cros') >= 0 || userAgent.indexOf('x11') >= 0) {\n      os = 'Linux'\n    } else if (userAgent.indexOf('iphone') >= 0 || userAgent.indexOf('ipad') >= 0 || userAgent.indexOf('ipod') >= 0 || userAgent.indexOf('crios') >= 0 || userAgent.indexOf('fxios') >= 0) {\n      os = 'iOS'\n    } else if (userAgent.indexOf('macintosh') >= 0 || userAgent.indexOf('mac_powerpc)') >= 0) {\n      os = 'Mac'\n    } else {\n      os = 'Other'\n    }\n    // We detect if the person uses a touch device\n    var mobileDevice = (('ontouchstart' in window) ||\n      (navigator.maxTouchPoints > 0) ||\n      (navigator.msMaxTouchPoints > 0))\n\n    if (mobileDevice && os !== 'Windows' && os !== 'Windows Phone' && os !== 'Android' && os !== 'iOS' && os !== 'Other' && userAgent.indexOf('cros') === -1) {\n      return true\n    }\n\n    // We compare oscpu with the OS extracted from the UA\n    if (typeof oscpu !== 'undefined') {\n      oscpu = oscpu.toLowerCase()\n      if (oscpu.indexOf('win') >= 0 && os !== 'Windows' && os !== 'Windows Phone') {\n        return true\n      } else if (oscpu.indexOf('linux') >= 0 && os !== 'Linux' && os !== 'Android') {\n        return true\n      } else if (oscpu.indexOf('mac') >= 0 && os !== 'Mac' && os !== 'iOS') {\n        return true\n      } else if ((oscpu.indexOf('win') === -1 && oscpu.indexOf('linux') === -1 && oscpu.indexOf('mac') === -1) !== (os === 'Other')) {\n        return true\n      }\n    }\n\n    // We compare platform with the OS extracted from the UA\n    if (platform.indexOf('win') >= 0 && os !== 'Windows' && os !== 'Windows Phone') {\n      return true\n    } else if ((platform.indexOf('linux') >= 0 || platform.indexOf('android') >= 0 || platform.indexOf('pike') >= 0) && os !== 'Linux' && os !== 'Android') {\n      return true\n    } else if ((platform.indexOf('mac') >= 0 || platform.indexOf('ipad') >= 0 || platform.indexOf('ipod') >= 0 || platform.indexOf('iphone') >= 0) && os !== 'Mac' && os !== 'iOS') {\n      return true\n    } else if (platform.indexOf('arm') >= 0 && os === 'Windows Phone') {\n      return false\n    } else if (platform.indexOf('pike') >= 0 && userAgent.indexOf('opera mini') >= 0) {\n      return false\n    } else {\n      var platformIsOther = platform.indexOf('win') < 0 &&\n        platform.indexOf('linux') < 0 &&\n        platform.indexOf('mac') < 0 &&\n        platform.indexOf('iphone') < 0 &&\n        platform.indexOf('ipad') < 0 &&\n        platform.indexOf('ipod') < 0\n      if (platformIsOther !== (os === 'Other')) {\n        return true\n      }\n    }\n\n    return typeof navigator.plugins === 'undefined' && os !== 'Windows' && os !== 'Windows Phone'\n  }\n  var getHasLiedBrowser = function () {\n    var userAgent = navigator.userAgent.toLowerCase()\n    var productSub = navigator.productSub\n\n    // we extract the browser from the user agent (respect the order of the tests)\n    var browser\n    if (userAgent.indexOf('edge/') >= 0 || userAgent.indexOf('iemobile/') >= 0) {\n      // Unreliable, different versions use EdgeHTML, Webkit, Blink, etc.\n      return false\n    } else if (userAgent.indexOf('opera mini') >= 0) {\n      // Unreliable, different modes use Presto, WebView, Webkit, etc.\n      return false\n    } else if (userAgent.indexOf('firefox/') >= 0) {\n      browser = 'Firefox'\n    } else if (userAgent.indexOf('opera/') >= 0 || userAgent.indexOf(' opr/') >= 0) {\n      browser = 'Opera'\n    } else if (userAgent.indexOf('chrome/') >= 0) {\n      browser = 'Chrome'\n    } else if (userAgent.indexOf('safari/') >= 0) {\n      if (userAgent.indexOf('android 1.') >= 0 || userAgent.indexOf('android 2.') >= 0 || userAgent.indexOf('android 3.') >= 0 || userAgent.indexOf('android 4.') >= 0) {\n        browser = 'AOSP'\n      } else {\n        browser = 'Safari'\n      }\n    } else if (userAgent.indexOf('trident/') >= 0) {\n      browser = 'Internet Explorer'\n    } else {\n      browser = 'Other'\n    }\n\n    if ((browser === 'Chrome' || browser === 'Safari' || browser === 'Opera') && productSub !== '20030107') {\n      return true\n    }\n\n    // eslint-disable-next-line no-eval\n    var tempRes = eval.toString().length\n    if (tempRes === 37 && browser !== 'Safari' && browser !== 'Firefox' && browser !== 'Other') {\n      return true\n    } else if (tempRes === 39 && browser !== 'Internet Explorer' && browser !== 'Other') {\n      return true\n    } else if (tempRes === 33 && browser !== 'Chrome' && browser !== 'AOSP' && browser !== 'Opera' && browser !== 'Other') {\n      return true\n    }\n\n    // We create an error to see how it is handled\n    var errFirefox\n    try {\n      // eslint-disable-next-line no-throw-literal\n      throw 'a'\n    } catch (err) {\n      try {\n        err.toSource()\n        errFirefox = true\n      } catch (errOfErr) {\n        errFirefox = false\n      }\n    }\n    return errFirefox && browser !== 'Firefox' && browser !== 'Other'\n  }\n  var isCanvasSupported = function () {\n    var elem = document.createElement('canvas')\n    return !!(elem.getContext && elem.getContext('2d'))\n  }\n  var isWebGlSupported = function () {\n    // code taken from Modernizr\n    if (!isCanvasSupported()) {\n      return false\n    }\n\n    var glContext = getWebglCanvas()\n    var isSupported = !!window.WebGLRenderingContext && !!glContext\n    loseWebglContext(glContext)\n    return isSupported\n  }\n  var isIE = function () {\n    if (navigator.appName === 'Microsoft Internet Explorer') {\n      return true\n    } else if (navigator.appName === 'Netscape' && /Trident/.test(navigator.userAgent)) { // IE 11\n      return true\n    }\n    return false\n  }\n  var isIEOrOldEdge = function () {\n    // The properties are checked to be in IE 10, IE 11 and Edge 18 and not to be in other browsers\n    return ('msWriteProfilerMark' in window) + ('msLaunchUri' in navigator) + ('msSaveBlob' in navigator) >= 2\n  }\n  var hasSwfObjectLoaded = function () {\n    return typeof window.swfobject !== 'undefined'\n  }\n  var hasMinFlashInstalled = function () {\n    return window.swfobject.hasFlashPlayerVersion('9.0.0')\n  }\n  var addFlashDivNode = function (options) {\n    var node = document.createElement('div')\n    node.setAttribute('id', options.fonts.swfContainerId)\n    document.body.appendChild(node)\n  }\n  var loadSwfAndDetectFonts = function (done, options) {\n    var hiddenCallback = '___fp_swf_loaded'\n    window[hiddenCallback] = function (fonts) {\n      done(fonts)\n    }\n    var id = options.fonts.swfContainerId\n    addFlashDivNode()\n    var flashvars = { onReady: hiddenCallback }\n    var flashparams = { allowScriptAccess: 'always', menu: 'false' }\n    window.swfobject.embedSWF(options.fonts.swfPath, id, '1', '1', '9.0.0', false, flashvars, flashparams, {})\n  }\n  var getWebglCanvas = function () {\n    var canvas = document.createElement('canvas')\n    var gl = null\n    try {\n      gl = canvas.getContext('webgl') || canvas.getContext('experimental-webgl')\n    } catch (e) { /* squelch */ }\n    if (!gl) { gl = null }\n    return gl\n  }\n  var loseWebglContext = function (context) {\n    var loseContextExtension = context.getExtension('WEBGL_lose_context')\n    if (loseContextExtension != null) {\n      loseContextExtension.loseContext()\n    }\n  }\n\n  var components = [\n    { key: 'userAgent', getData: UserAgent },\n    { key: 'webdriver', getData: webdriver },\n    { key: 'language', getData: languageKey },\n    { key: 'colorDepth', getData: colorDepthKey },\n    { key: 'deviceMemory', getData: deviceMemoryKey },\n    { key: 'pixelRatio', getData: pixelRatioKey },\n    { key: 'hardwareConcurrency', getData: hardwareConcurrencyKey },\n    { key: 'screenResolution', getData: screenResolutionKey },\n    { key: 'availableScreenResolution', getData: availableScreenResolutionKey },\n    { key: 'timezoneOffset', getData: timezoneOffset },\n    { key: 'timezone', getData: timezone },\n    { key: 'sessionStorage', getData: sessionStorageKey },\n    { key: 'localStorage', getData: localStorageKey },\n    { key: 'indexedDb', getData: indexedDbKey },\n    { key: 'addBehavior', getData: addBehaviorKey },\n    { key: 'openDatabase', getData: openDatabaseKey },\n    { key: 'cpuClass', getData: cpuClassKey },\n    { key: 'platform', getData: platformKey },\n    { key: 'doNotTrack', getData: doNotTrackKey },\n    { key: 'plugins', getData: pluginsComponent },\n    { key: 'canvas', getData: canvasKey },\n    { key: 'webgl', getData: webglKey },\n    { key: 'webglVendorAndRenderer', getData: webglVendorAndRendererKey },\n    { key: 'adBlock', getData: adBlockKey },\n    { key: 'hasLiedLanguages', getData: hasLiedLanguagesKey },\n    { key: 'hasLiedResolution', getData: hasLiedResolutionKey },\n    { key: 'hasLiedOs', getData: hasLiedOsKey },\n    { key: 'hasLiedBrowser', getData: hasLiedBrowserKey },\n    { key: 'touchSupport', getData: touchSupportKey },\n    { key: 'fonts', getData: jsFontsKey, pauseBefore: true },\n    { key: 'fontsFlash', getData: flashFontsKey, pauseBefore: true },\n    { key: 'audio', getData: audioKey },\n    { key: 'enumerateDevices', getData: enumerateDevicesKey }\n  ]\n\n  var Fingerprint2 = function (options) {\n    throw new Error(\"'new Fingerprint()' is deprecated, see https://github.com/fingerprintjs/fingerprintjs#upgrade-guide-from-182-to-200\")\n  }\n\n  Fingerprint2.get = function (options, callback) {\n    if (!callback) {\n      callback = options\n      options = {}\n    } else if (!options) {\n      options = {}\n    }\n    extendSoft(options, defaultOptions)\n    options.components = options.extraComponents.concat(components)\n\n    var keys = {\n      data: [],\n      addPreprocessedComponent: function (key, value) {\n        if (typeof options.preprocessor === 'function') {\n          value = options.preprocessor(key, value)\n        }\n        keys.data.push({ key: key, value: value })\n      }\n    }\n\n    var i = -1\n    var chainComponents = function (alreadyWaited) {\n      i += 1\n      if (i >= options.components.length) { // on finish\n        callback(keys.data)\n        return\n      }\n      var component = options.components[i]\n\n      if (options.excludes[component.key]) {\n        chainComponents(false) // skip\n        return\n      }\n\n      if (!alreadyWaited && component.pauseBefore) {\n        i -= 1\n        setTimeout(function () {\n          chainComponents(true)\n        }, 1)\n        return\n      }\n\n      try {\n        component.getData(function (value) {\n          keys.addPreprocessedComponent(component.key, value)\n          chainComponents(false)\n        }, options)\n      } catch (error) {\n        // main body error\n        keys.addPreprocessedComponent(component.key, String(error))\n        chainComponents(false)\n      }\n    }\n\n    chainComponents(false)\n  }\n\n  Fingerprint2.getPromise = function (options) {\n    return new Promise(function (resolve, reject) {\n      Fingerprint2.get(options, resolve)\n    })\n  }\n\n  Fingerprint2.getV18 = function (options, callback) {\n    if (callback == null) {\n      callback = options\n      options = {}\n    }\n    return Fingerprint2.get(options, function (components) {\n      var newComponents = []\n      for (var i = 0; i < components.length; i++) {\n        var component = components[i]\n        if (component.value === (options.NOT_AVAILABLE || 'not available')) {\n          newComponents.push({ key: component.key, value: 'unknown' })\n        } else if (component.key === 'plugins') {\n          newComponents.push({\n            key: 'plugins',\n            value: map(component.value, function (p) {\n              var mimeTypes = map(p[2], function (mt) {\n                if (mt.join) { return mt.join('~') }\n                return mt\n              }).join(',')\n              return [p[0], p[1], mimeTypes].join('::')\n            })\n          })\n        } else if (['canvas', 'webgl'].indexOf(component.key) !== -1 && Array.isArray(component.value)) {\n          // sometimes WebGL returns error in headless browsers (during CI testing for example)\n          // so we need to join only if the values are array\n          newComponents.push({ key: component.key, value: component.value.join('~') })\n        } else if (['sessionStorage', 'localStorage', 'indexedDb', 'addBehavior', 'openDatabase'].indexOf(component.key) !== -1) {\n          if (component.value) {\n            newComponents.push({ key: component.key, value: 1 })\n          } else {\n            // skip\n            continue\n          }\n        } else {\n          if (component.value) {\n            newComponents.push(component.value.join ? { key: component.key, value: component.value.join(';') } : component)\n          } else {\n            newComponents.push({ key: component.key, value: component.value })\n          }\n        }\n      }\n      var murmur = x64hash128(map(newComponents, function (component) { return component.value }).join('~~~'), 31)\n      callback(murmur, newComponents)\n    })\n  }\n\n  Fingerprint2.x64hash128 = x64hash128\n  Fingerprint2.VERSION = '2.1.4'\n  return Fingerprint2\n})\n","// http://www.w3.org/TR/CSS21/grammar.html\n// https://github.com/visionmedia/css-parse/pull/49#issuecomment-30088027\nvar COMMENT_REGEX = /\\/\\*[^*]*\\*+([^/*][^*]*\\*+)*\\//g;\n\nvar NEWLINE_REGEX = /\\n/g;\nvar WHITESPACE_REGEX = /^\\s*/;\n\n// declaration\nvar PROPERTY_REGEX = /^(\\*?[-#/*\\\\\\w]+(\\[[0-9a-z_-]+\\])?)\\s*/;\nvar COLON_REGEX = /^:\\s*/;\nvar VALUE_REGEX = /^((?:'(?:\\\\'|.)*?'|\"(?:\\\\\"|.)*?\"|\\([^)]*?\\)|[^};])+)/;\nvar SEMICOLON_REGEX = /^[;\\s]*/;\n\n// https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String/Trim#Polyfill\nvar TRIM_REGEX = /^\\s+|\\s+$/g;\n\n// strings\nvar NEWLINE = '\\n';\nvar FORWARD_SLASH = '/';\nvar ASTERISK = '*';\nvar EMPTY_STRING = '';\n\n// types\nvar TYPE_COMMENT = 'comment';\nvar TYPE_DECLARATION = 'declaration';\n\n/**\n * @param {String} style\n * @param {Object} [options]\n * @return {Object[]}\n * @throws {TypeError}\n * @throws {Error}\n */\nmodule.exports = function (style, options) {\n  if (typeof style !== 'string') {\n    throw new TypeError('First argument must be a string');\n  }\n\n  if (!style) return [];\n\n  options = options || {};\n\n  /**\n   * Positional.\n   */\n  var lineno = 1;\n  var column = 1;\n\n  /**\n   * Update lineno and column based on `str`.\n   *\n   * @param {String} str\n   */\n  function updatePosition(str) {\n    var lines = str.match(NEWLINE_REGEX);\n    if (lines) lineno += lines.length;\n    var i = str.lastIndexOf(NEWLINE);\n    column = ~i ? str.length - i : column + str.length;\n  }\n\n  /**\n   * Mark position and patch `node.position`.\n   *\n   * @return {Function}\n   */\n  function position() {\n    var start = { line: lineno, column: column };\n    return function (node) {\n      node.position = new Position(start);\n      whitespace();\n      return node;\n    };\n  }\n\n  /**\n   * Store position information for a node.\n   *\n   * @constructor\n   * @property {Object} start\n   * @property {Object} end\n   * @property {undefined|String} source\n   */\n  function Position(start) {\n    this.start = start;\n    this.end = { line: lineno, column: column };\n    this.source = options.source;\n  }\n\n  /**\n   * Non-enumerable source string.\n   */\n  Position.prototype.content = style;\n\n  var errorsList = [];\n\n  /**\n   * Error `msg`.\n   *\n   * @param {String} msg\n   * @throws {Error}\n   */\n  function error(msg) {\n    var err = new Error(\n      options.source + ':' + lineno + ':' + column + ': ' + msg\n    );\n    err.reason = msg;\n    err.filename = options.source;\n    err.line = lineno;\n    err.column = column;\n    err.source = style;\n\n    if (options.silent) {\n      errorsList.push(err);\n    } else {\n      throw err;\n    }\n  }\n\n  /**\n   * Match `re` and return captures.\n   *\n   * @param {RegExp} re\n   * @return {undefined|Array}\n   */\n  function match(re) {\n    var m = re.exec(style);\n    if (!m) return;\n    var str = m[0];\n    updatePosition(str);\n    style = style.slice(str.length);\n    return m;\n  }\n\n  /**\n   * Parse whitespace.\n   */\n  function whitespace() {\n    match(WHITESPACE_REGEX);\n  }\n\n  /**\n   * Parse comments.\n   *\n   * @param {Object[]} [rules]\n   * @return {Object[]}\n   */\n  function comments(rules) {\n    var c;\n    rules = rules || [];\n    while ((c = comment())) {\n      if (c !== false) {\n        rules.push(c);\n      }\n    }\n    return rules;\n  }\n\n  /**\n   * Parse comment.\n   *\n   * @return {Object}\n   * @throws {Error}\n   */\n  function comment() {\n    var pos = position();\n    if (FORWARD_SLASH != style.charAt(0) || ASTERISK != style.charAt(1)) return;\n\n    var i = 2;\n    while (\n      EMPTY_STRING != style.charAt(i) &&\n      (ASTERISK != style.charAt(i) || FORWARD_SLASH != style.charAt(i + 1))\n    ) {\n      ++i;\n    }\n    i += 2;\n\n    if (EMPTY_STRING === style.charAt(i - 1)) {\n      return error('End of comment missing');\n    }\n\n    var str = style.slice(2, i - 2);\n    column += 2;\n    updatePosition(str);\n    style = style.slice(i);\n    column += 2;\n\n    return pos({\n      type: TYPE_COMMENT,\n      comment: str\n    });\n  }\n\n  /**\n   * Parse declaration.\n   *\n   * @return {Object}\n   * @throws {Error}\n   */\n  function declaration() {\n    var pos = position();\n\n    // prop\n    var prop = match(PROPERTY_REGEX);\n    if (!prop) return;\n    comment();\n\n    // :\n    if (!match(COLON_REGEX)) return error(\"property missing ':'\");\n\n    // val\n    var val = match(VALUE_REGEX);\n\n    var ret = pos({\n      type: TYPE_DECLARATION,\n      property: trim(prop[0].replace(COMMENT_REGEX, EMPTY_STRING)),\n      value: val\n        ? trim(val[0].replace(COMMENT_REGEX, EMPTY_STRING))\n        : EMPTY_STRING\n    });\n\n    // ;\n    match(SEMICOLON_REGEX);\n\n    return ret;\n  }\n\n  /**\n   * Parse declarations.\n   *\n   * @return {Object[]}\n   */\n  function declarations() {\n    var decls = [];\n\n    comments(decls);\n\n    // declarations\n    var decl;\n    while ((decl = declaration())) {\n      if (decl !== false) {\n        decls.push(decl);\n        comments(decls);\n      }\n    }\n\n    return decls;\n  }\n\n  whitespace();\n  return declarations();\n};\n\n/**\n * Trim `str`.\n *\n * @param {String} str\n * @return {String}\n */\nfunction trim(str) {\n  return str ? str.replace(TRIM_REGEX, EMPTY_STRING) : EMPTY_STRING;\n}\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n    return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.default = StyleToObject;\nvar inline_style_parser_1 = __importDefault(require(\"inline-style-parser\"));\n/**\n * Parses inline style to object.\n *\n * @param style - Inline style.\n * @param iterator - Iterator.\n * @returns - Style object or null.\n *\n * @example Parsing inline style to object:\n *\n * ```js\n * import parse from 'style-to-object';\n * parse('line-height: 42;'); // { 'line-height': '42' }\n * ```\n */\nfunction StyleToObject(style, iterator) {\n    var styleObject = null;\n    if (!style || typeof style !== 'string') {\n        return styleObject;\n    }\n    var declarations = (0, inline_style_parser_1.default)(style);\n    var hasIterator = typeof iterator === 'function';\n    declarations.forEach(function (declaration) {\n        if (declaration.type !== 'declaration') {\n            return;\n        }\n        var property = declaration.property, value = declaration.value;\n        if (hasIterator) {\n            iterator(property, value, declaration);\n        }\n        else if (value) {\n            styleObject = styleObject || {};\n            styleObject[property] = value;\n        }\n    });\n    return styleObject;\n}\n//# sourceMappingURL=index.js.map","'use strict';\n\nvar reactIs = require('react-is');\n\n/**\n * Copyright 2015, Yahoo! Inc.\n * Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms.\n */\nvar REACT_STATICS = {\n  childContextTypes: true,\n  contextType: true,\n  contextTypes: true,\n  defaultProps: true,\n  displayName: true,\n  getDefaultProps: true,\n  getDerivedStateFromError: true,\n  getDerivedStateFromProps: true,\n  mixins: true,\n  propTypes: true,\n  type: true\n};\nvar KNOWN_STATICS = {\n  name: true,\n  length: true,\n  prototype: true,\n  caller: true,\n  callee: true,\n  arguments: true,\n  arity: true\n};\nvar FORWARD_REF_STATICS = {\n  '$$typeof': true,\n  render: true,\n  defaultProps: true,\n  displayName: true,\n  propTypes: true\n};\nvar MEMO_STATICS = {\n  '$$typeof': true,\n  compare: true,\n  defaultProps: true,\n  displayName: true,\n  propTypes: true,\n  type: true\n};\nvar TYPE_STATICS = {};\nTYPE_STATICS[reactIs.ForwardRef] = FORWARD_REF_STATICS;\nTYPE_STATICS[reactIs.Memo] = MEMO_STATICS;\n\nfunction getStatics(component) {\n  // React v16.11 and below\n  if (reactIs.isMemo(component)) {\n    return MEMO_STATICS;\n  } // React v16.12 and above\n\n\n  return TYPE_STATICS[component['$$typeof']] || REACT_STATICS;\n}\n\nvar defineProperty = Object.defineProperty;\nvar getOwnPropertyNames = Object.getOwnPropertyNames;\nvar getOwnPropertySymbols = Object.getOwnPropertySymbols;\nvar getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\nvar getPrototypeOf = Object.getPrototypeOf;\nvar objectPrototype = Object.prototype;\nfunction hoistNonReactStatics(targetComponent, sourceComponent, blacklist) {\n  if (typeof sourceComponent !== 'string') {\n    // don't hoist over string (html) components\n    if (objectPrototype) {\n      var inheritedComponent = getPrototypeOf(sourceComponent);\n\n      if (inheritedComponent && inheritedComponent !== objectPrototype) {\n        hoistNonReactStatics(targetComponent, inheritedComponent, blacklist);\n      }\n    }\n\n    var keys = getOwnPropertyNames(sourceComponent);\n\n    if (getOwnPropertySymbols) {\n      keys = keys.concat(getOwnPropertySymbols(sourceComponent));\n    }\n\n    var targetStatics = getStatics(targetComponent);\n    var sourceStatics = getStatics(sourceComponent);\n\n    for (var i = 0; i < keys.length; ++i) {\n      var key = keys[i];\n\n      if (!KNOWN_STATICS[key] && !(blacklist && blacklist[key]) && !(sourceStatics && sourceStatics[key]) && !(targetStatics && targetStatics[key])) {\n        var descriptor = getOwnPropertyDescriptor(sourceComponent, key);\n\n        try {\n          // Avoid failures from read-only properties\n          defineProperty(targetComponent, key, descriptor);\n        } catch (e) {}\n      }\n    }\n  }\n\n  return targetComponent;\n}\n\nmodule.exports = hoistNonReactStatics;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.CASE_SENSITIVE_TAG_NAMES_MAP = exports.CASE_SENSITIVE_TAG_NAMES = void 0;\n/**\n * SVG elements are case-sensitive.\n *\n * @see https://developer.mozilla.org/docs/Web/SVG/Element#svg_elements_a_to_z\n */\nexports.CASE_SENSITIVE_TAG_NAMES = [\n    'animateMotion',\n    'animateTransform',\n    'clipPath',\n    'feBlend',\n    'feColorMatrix',\n    'feComponentTransfer',\n    'feComposite',\n    'feConvolveMatrix',\n    'feDiffuseLighting',\n    'feDisplacementMap',\n    'feDropShadow',\n    'feFlood',\n    'feFuncA',\n    'feFuncB',\n    'feFuncG',\n    'feFuncR',\n    'feGaussianBlur',\n    'feImage',\n    'feMerge',\n    'feMergeNode',\n    'feMorphology',\n    'feOffset',\n    'fePointLight',\n    'feSpecularLighting',\n    'feSpotLight',\n    'feTile',\n    'feTurbulence',\n    'foreignObject',\n    'linearGradient',\n    'radialGradient',\n    'textPath',\n];\nexports.CASE_SENSITIVE_TAG_NAMES_MAP = exports.CASE_SENSITIVE_TAG_NAMES.reduce(function (accumulator, tagName) {\n    accumulator[tagName.toLowerCase()] = tagName;\n    return accumulator;\n}, {});\n//# sourceMappingURL=constants.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n// constants\nvar HTML = 'html';\nvar HEAD = 'head';\nvar BODY = 'body';\nvar FIRST_TAG_REGEX = /<([a-zA-Z]+[0-9]?)/; // e.g., <h1>\n// match-all-characters in case of newlines (DOTALL)\nvar HEAD_TAG_REGEX = /<head[^]*>/i;\nvar BODY_TAG_REGEX = /<body[^]*>/i;\n// falls back to `parseFromString` if `createHTMLDocument` cannot be used\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nvar parseFromDocument = function (html, tagName) {\n    /* istanbul ignore next */\n    throw new Error('This browser does not support `document.implementation.createHTMLDocument`');\n};\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nvar parseFromString = function (html, tagName) {\n    /* istanbul ignore next */\n    throw new Error('This browser does not support `DOMParser.prototype.parseFromString`');\n};\nvar DOMParser = typeof window === 'object' && window.DOMParser;\n/**\n * DOMParser (performance: slow).\n *\n * @see https://developer.mozilla.org/docs/Web/API/DOMParser#Parsing_an_SVG_or_HTML_document\n */\nif (typeof DOMParser === 'function') {\n    var domParser_1 = new DOMParser();\n    var mimeType_1 = 'text/html';\n    /**\n     * Creates an HTML document using `DOMParser.parseFromString`.\n     *\n     * @param html - The HTML string.\n     * @param tagName - The element to render the HTML (with 'body' as fallback).\n     * @returns - Document.\n     */\n    parseFromString = function (html, tagName) {\n        if (tagName) {\n            /* istanbul ignore next */\n            html = \"<\".concat(tagName, \">\").concat(html, \"</\").concat(tagName, \">\");\n        }\n        return domParser_1.parseFromString(html, mimeType_1);\n    };\n    parseFromDocument = parseFromString;\n}\n/**\n * DOMImplementation (performance: fair).\n *\n * @see https://developer.mozilla.org/docs/Web/API/DOMImplementation/createHTMLDocument\n */\nif (typeof document === 'object' && document.implementation) {\n    var htmlDocument_1 = document.implementation.createHTMLDocument();\n    /**\n     * Use HTML document created by `document.implementation.createHTMLDocument`.\n     *\n     * @param html - The HTML string.\n     * @param tagName - The element to render the HTML (with 'body' as fallback).\n     * @returns - Document\n     */\n    parseFromDocument = function (html, tagName) {\n        if (tagName) {\n            var element = htmlDocument_1.documentElement.querySelector(tagName);\n            if (element) {\n                element.innerHTML = html;\n            }\n            return htmlDocument_1;\n        }\n        htmlDocument_1.documentElement.innerHTML = html;\n        return htmlDocument_1;\n    };\n}\n/**\n * Template (performance: fast).\n *\n * @see https://developer.mozilla.org/docs/Web/HTML/Element/template\n */\nvar template = typeof document === 'object' && document.createElement('template');\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nvar parseFromTemplate;\nif (template && template.content) {\n    /**\n     * Uses a template element (content fragment) to parse HTML.\n     *\n     * @param html - HTML string.\n     * @returns - Nodes.\n     */\n    parseFromTemplate = function (html) {\n        template.innerHTML = html;\n        return template.content.childNodes;\n    };\n}\n/**\n * Parses HTML string to DOM nodes.\n *\n * @param html - HTML markup.\n * @returns - DOM nodes.\n */\nfunction domparser(html) {\n    var _a, _b;\n    var match = html.match(FIRST_TAG_REGEX);\n    var firstTagName = match && match[1] ? match[1].toLowerCase() : '';\n    switch (firstTagName) {\n        case HTML: {\n            var doc = parseFromString(html);\n            // the created document may come with filler head/body elements,\n            // so make sure to remove them if they don't actually exist\n            if (!HEAD_TAG_REGEX.test(html)) {\n                var element = doc.querySelector(HEAD);\n                (_a = element === null || element === void 0 ? void 0 : element.parentNode) === null || _a === void 0 ? void 0 : _a.removeChild(element);\n            }\n            if (!BODY_TAG_REGEX.test(html)) {\n                var element = doc.querySelector(BODY);\n                (_b = element === null || element === void 0 ? void 0 : element.parentNode) === null || _b === void 0 ? void 0 : _b.removeChild(element);\n            }\n            return doc.querySelectorAll(HTML);\n        }\n        case HEAD:\n        case BODY: {\n            var elements = parseFromDocument(html).querySelectorAll(firstTagName);\n            // if there's a sibling element, then return both elements\n            if (BODY_TAG_REGEX.test(html) && HEAD_TAG_REGEX.test(html)) {\n                return elements[0].parentNode.childNodes;\n            }\n            return elements;\n        }\n        // low-level tag or text\n        default: {\n            if (parseFromTemplate) {\n                return parseFromTemplate(html);\n            }\n            var element = parseFromDocument(html, BODY).querySelector(BODY);\n            return element.childNodes;\n        }\n    }\n}\nexports.default = domparser;\n//# sourceMappingURL=domparser.js.map","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n    return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar domparser_1 = __importDefault(require(\"./domparser\"));\nvar utilities_1 = require(\"./utilities\");\nvar DIRECTIVE_REGEX = /<(![a-zA-Z\\s]+)>/; // e.g., <!doctype html>\n/**\n * Parses HTML string to DOM nodes in browser.\n *\n * @param html - HTML markup.\n * @returns - DOM elements.\n */\nfunction HTMLDOMParser(html) {\n    if (typeof html !== 'string') {\n        throw new TypeError('First argument must be a string');\n    }\n    if (!html) {\n        return [];\n    }\n    // match directive\n    var match = html.match(DIRECTIVE_REGEX);\n    var directive = match ? match[1] : undefined;\n    return (0, utilities_1.formatDOM)((0, domparser_1.default)(html), null, directive);\n}\nexports.default = HTMLDOMParser;\n//# sourceMappingURL=html-to-dom.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.formatDOM = exports.formatAttributes = void 0;\nvar domhandler_1 = require(\"domhandler\");\nvar constants_1 = require(\"./constants\");\n/**\n * Gets case-sensitive tag name.\n *\n * @param tagName - Tag name in lowercase.\n * @returns - Case-sensitive tag name.\n */\nfunction getCaseSensitiveTagName(tagName) {\n    return constants_1.CASE_SENSITIVE_TAG_NAMES_MAP[tagName];\n}\n/**\n * Formats DOM attributes to a hash map.\n *\n * @param attributes - List of attributes.\n * @returns - Map of attribute name to value.\n */\nfunction formatAttributes(attributes) {\n    var map = {};\n    var index = 0;\n    var attributesLength = attributes.length;\n    // `NamedNodeMap` is array-like\n    for (; index < attributesLength; index++) {\n        var attribute = attributes[index];\n        map[attribute.name] = attribute.value;\n    }\n    return map;\n}\nexports.formatAttributes = formatAttributes;\n/**\n * Corrects the tag name if it is case-sensitive (SVG).\n * Otherwise, returns the lowercase tag name (HTML).\n *\n * @param tagName - Lowercase tag name.\n * @returns - Formatted tag name.\n */\nfunction formatTagName(tagName) {\n    tagName = tagName.toLowerCase();\n    var caseSensitiveTagName = getCaseSensitiveTagName(tagName);\n    if (caseSensitiveTagName) {\n        return caseSensitiveTagName;\n    }\n    return tagName;\n}\n/**\n * Transforms DOM nodes to `domhandler` nodes.\n *\n * @param nodes - DOM nodes.\n * @param parent - Parent node.\n * @param directive - Directive.\n * @returns - Nodes.\n */\nfunction formatDOM(nodes, parent, directive) {\n    if (parent === void 0) { parent = null; }\n    var domNodes = [];\n    var current;\n    var index = 0;\n    var nodesLength = nodes.length;\n    for (; index < nodesLength; index++) {\n        var node = nodes[index];\n        // set the node data given the type\n        switch (node.nodeType) {\n            case 1: {\n                var tagName = formatTagName(node.nodeName);\n                // script, style, or tag\n                current = new domhandler_1.Element(tagName, formatAttributes(node.attributes));\n                current.children = formatDOM(\n                // template children are on content\n                tagName === 'template'\n                    ? node.content.childNodes\n                    : node.childNodes, current);\n                break;\n            }\n            case 3:\n                current = new domhandler_1.Text(node.nodeValue);\n                break;\n            case 8:\n                current = new domhandler_1.Comment(node.nodeValue);\n                break;\n            default:\n                continue;\n        }\n        // set previous node next\n        var prev = domNodes[index - 1] || null;\n        if (prev) {\n            prev.next = current;\n        }\n        // set properties for current node\n        current.parent = parent;\n        current.prev = prev;\n        current.next = null;\n        domNodes.push(current);\n    }\n    if (directive) {\n        current = new domhandler_1.ProcessingInstruction(directive.substring(0, directive.indexOf(' ')).toLowerCase(), directive);\n        current.next = domNodes[0] || null;\n        current.parent = parent;\n        domNodes.unshift(current);\n        if (domNodes[1]) {\n            domNodes[1].prev = domNodes[0];\n        }\n    }\n    return domNodes;\n}\nexports.formatDOM = formatDOM;\n//# sourceMappingURL=utilities.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar react_property_1 = require(\"react-property\");\nvar utilities_1 = require(\"./utilities\");\n// https://react.dev/learn/sharing-state-between-components#controlled-and-uncontrolled-components\n// https://developer.mozilla.org/docs/Web/HTML/Attributes\nvar UNCONTROLLED_COMPONENT_ATTRIBUTES = ['checked', 'value'];\nvar UNCONTROLLED_COMPONENT_NAMES = ['input', 'select', 'textarea'];\nvar valueOnlyInputs = {\n    reset: true,\n    submit: true,\n};\n/**\n * Converts HTML/SVG DOM attributes to React props.\n *\n * @param attributes - HTML/SVG DOM attributes.\n * @param nodeName - DOM node name.\n * @returns - React props.\n */\nfunction attributesToProps(attributes, nodeName) {\n    if (attributes === void 0) { attributes = {}; }\n    var props = {};\n    var isInputValueOnly = Boolean(attributes.type && valueOnlyInputs[attributes.type]);\n    for (var attributeName in attributes) {\n        var attributeValue = attributes[attributeName];\n        // ARIA (aria-*) or custom data (data-*) attribute\n        if ((0, react_property_1.isCustomAttribute)(attributeName)) {\n            props[attributeName] = attributeValue;\n            continue;\n        }\n        // convert HTML/SVG attribute to React prop\n        var attributeNameLowerCased = attributeName.toLowerCase();\n        var propName = getPropName(attributeNameLowerCased);\n        if (propName) {\n            var propertyInfo = (0, react_property_1.getPropertyInfo)(propName);\n            // convert attribute to uncontrolled component prop (e.g., `value` to `defaultValue`)\n            if (UNCONTROLLED_COMPONENT_ATTRIBUTES.includes(propName) &&\n                UNCONTROLLED_COMPONENT_NAMES.includes(nodeName) &&\n                !isInputValueOnly) {\n                propName = getPropName('default' + attributeNameLowerCased);\n            }\n            props[propName] = attributeValue;\n            switch (propertyInfo && propertyInfo.type) {\n                case react_property_1.BOOLEAN:\n                    props[propName] = true;\n                    break;\n                case react_property_1.OVERLOADED_BOOLEAN:\n                    if (attributeValue === '') {\n                        props[propName] = true;\n                    }\n                    break;\n            }\n            continue;\n        }\n        // preserve custom attribute if React >=16\n        if (utilities_1.PRESERVE_CUSTOM_ATTRIBUTES) {\n            props[attributeName] = attributeValue;\n        }\n    }\n    // transform inline style to object\n    (0, utilities_1.setStyleProp)(attributes.style, props);\n    return props;\n}\nexports.default = attributesToProps;\n/**\n * Gets prop name from lowercased attribute name.\n *\n * @param attributeName - Lowercased attribute name.\n * @returns - Prop name.\n */\nfunction getPropName(attributeName) {\n    return react_property_1.possibleStandardNames[attributeName];\n}\n//# sourceMappingURL=attributes-to-props.js.map","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n    return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar react_1 = require(\"react\");\nvar attributes_to_props_1 = __importDefault(require(\"./attributes-to-props\"));\nvar utilities_1 = require(\"./utilities\");\nvar React = {\n    cloneElement: react_1.cloneElement,\n    createElement: react_1.createElement,\n    isValidElement: react_1.isValidElement,\n};\n/**\n * Converts DOM nodes to JSX element(s).\n *\n * @param nodes - DOM nodes.\n * @param options - Options.\n * @returns - String or JSX element(s).\n */\nfunction domToReact(nodes, options) {\n    if (options === void 0) { options = {}; }\n    var reactElements = [];\n    var hasReplace = typeof options.replace === 'function';\n    var transform = options.transform || utilities_1.returnFirstArg;\n    var _a = options.library || React, cloneElement = _a.cloneElement, createElement = _a.createElement, isValidElement = _a.isValidElement;\n    var nodesLength = nodes.length;\n    for (var index = 0; index < nodesLength; index++) {\n        var node = nodes[index];\n        // replace with custom React element (if present)\n        if (hasReplace) {\n            var replaceElement = options.replace(node, index);\n            if (isValidElement(replaceElement)) {\n                // set \"key\" prop for sibling elements\n                // https://react.dev/learn/rendering-lists#rules-of-keys\n                if (nodesLength > 1) {\n                    replaceElement = cloneElement(replaceElement, {\n                        key: replaceElement.key || index,\n                    });\n                }\n                reactElements.push(transform(replaceElement, node, index));\n                continue;\n            }\n        }\n        if (node.type === 'text') {\n            var isWhitespace = !node.data.trim().length;\n            // We have a whitespace node that can't be nested in its parent\n            // so skip it\n            if (isWhitespace &&\n                node.parent &&\n                !(0, utilities_1.canTextBeChildOfNode)(node.parent)) {\n                continue;\n            }\n            // Trim is enabled and we have a whitespace node\n            // so skip it\n            if (options.trim && isWhitespace) {\n                continue;\n            }\n            // We have a text node that's not whitespace and it can be nested\n            // in its parent so add it to the results\n            reactElements.push(transform(node.data, node, index));\n            continue;\n        }\n        var element = node;\n        var props = {};\n        if (skipAttributesToProps(element)) {\n            (0, utilities_1.setStyleProp)(element.attribs.style, element.attribs);\n            props = element.attribs;\n        }\n        else if (element.attribs) {\n            props = (0, attributes_to_props_1.default)(element.attribs, element.name);\n        }\n        var children = void 0;\n        switch (node.type) {\n            case 'script':\n            case 'style':\n                // prevent text in <script> or <style> from being escaped\n                // https://react.dev/reference/react-dom/components/common#dangerously-setting-the-inner-html\n                if (node.children[0]) {\n                    props.dangerouslySetInnerHTML = {\n                        __html: node.children[0].data,\n                    };\n                }\n                break;\n            case 'tag':\n                // setting textarea value in children is an antipattern in React\n                // https://react.dev/reference/react-dom/components/textarea#caveats\n                if (node.name === 'textarea' && node.children[0]) {\n                    props.defaultValue = node.children[0].data;\n                }\n                else if (node.children && node.children.length) {\n                    // continue recursion of creating React elements (if applicable)\n                    children = domToReact(node.children, options);\n                }\n                break;\n            // skip all other cases (e.g., comment)\n            default:\n                continue;\n        }\n        // set \"key\" prop for sibling elements\n        // https://react.dev/learn/rendering-lists#rules-of-keys\n        if (nodesLength > 1) {\n            props.key = index;\n        }\n        reactElements.push(transform(createElement(node.name, props, children), node, index));\n    }\n    return reactElements.length === 1 ? reactElements[0] : reactElements;\n}\nexports.default = domToReact;\n/**\n * Determines whether DOM element attributes should be transformed to props.\n * Web Components should not have their attributes transformed except for `style`.\n *\n * @param node - Element node.\n * @returns - Whether the node attributes should be converted to props.\n */\nfunction skipAttributesToProps(node) {\n    return (utilities_1.PRESERVE_CUSTOM_ATTRIBUTES &&\n        node.type === 'tag' &&\n        (0, utilities_1.isCustomComponent)(node.name, node.attribs));\n}\n//# sourceMappingURL=dom-to-react.js.map","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n    return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.htmlToDOM = exports.domToReact = exports.attributesToProps = exports.Text = exports.ProcessingInstruction = exports.Element = exports.Comment = void 0;\nvar html_dom_parser_1 = __importDefault(require(\"html-dom-parser\"));\nexports.htmlToDOM = html_dom_parser_1.default;\nvar attributes_to_props_1 = __importDefault(require(\"./attributes-to-props\"));\nexports.attributesToProps = attributes_to_props_1.default;\nvar dom_to_react_1 = __importDefault(require(\"./dom-to-react\"));\nexports.domToReact = dom_to_react_1.default;\nvar domhandler_1 = require(\"domhandler\");\nObject.defineProperty(exports, \"Comment\", { enumerable: true, get: function () { return domhandler_1.Comment; } });\nObject.defineProperty(exports, \"Element\", { enumerable: true, get: function () { return domhandler_1.Element; } });\nObject.defineProperty(exports, \"ProcessingInstruction\", { enumerable: true, get: function () { return domhandler_1.ProcessingInstruction; } });\nObject.defineProperty(exports, \"Text\", { enumerable: true, get: function () { return domhandler_1.Text; } });\nvar domParserOptions = { lowerCaseAttributeNames: false };\n/**\n * Converts HTML string to React elements.\n *\n * @param html - HTML string.\n * @param options - Parser options.\n * @returns - React element(s), empty array, or string.\n */\nfunction HTMLReactParser(html, options) {\n    if (typeof html !== 'string') {\n        throw new TypeError('First argument must be a string');\n    }\n    if (!html) {\n        return [];\n    }\n    return (0, dom_to_react_1.default)((0, html_dom_parser_1.default)(html, (options === null || options === void 0 ? void 0 : options.htmlparser2) || domParserOptions), options);\n}\nexports.default = HTMLReactParser;\n//# sourceMappingURL=index.js.map","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n    return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.returnFirstArg = exports.canTextBeChildOfNode = exports.ELEMENTS_WITH_NO_TEXT_CHILDREN = exports.PRESERVE_CUSTOM_ATTRIBUTES = exports.setStyleProp = exports.isCustomComponent = void 0;\nvar react_1 = require(\"react\");\nvar style_to_js_1 = __importDefault(require(\"style-to-js\"));\nvar RESERVED_SVG_MATHML_ELEMENTS = new Set([\n    'annotation-xml',\n    'color-profile',\n    'font-face',\n    'font-face-src',\n    'font-face-uri',\n    'font-face-format',\n    'font-face-name',\n    'missing-glyph',\n]);\n/**\n * Check if a tag is a custom component.\n *\n * @see {@link https://github.com/facebook/react/blob/v16.6.3/packages/react-dom/src/shared/isCustomComponent.js}\n *\n * @param tagName - Tag name.\n * @param props - Props passed to the element.\n * @returns - Whether the tag is custom component.\n */\nfunction isCustomComponent(tagName, props) {\n    if (!tagName.includes('-')) {\n        return Boolean(props && typeof props.is === 'string');\n    }\n    // These are reserved SVG and MathML elements.\n    // We don't mind this whitelist too much because we expect it to never grow.\n    // The alternative is to track the namespace in a few places which is convoluted.\n    // https://w3c.github.io/webcomponents/spec/custom/#custom-elements-core-concepts\n    if (RESERVED_SVG_MATHML_ELEMENTS.has(tagName)) {\n        return false;\n    }\n    return true;\n}\nexports.isCustomComponent = isCustomComponent;\nvar styleOptions = {\n    reactCompat: true,\n};\n/**\n * Sets style prop.\n *\n * @param style - Inline style.\n * @param props - Props object.\n */\nfunction setStyleProp(style, props) {\n    if (typeof style !== 'string') {\n        return;\n    }\n    if (!style.trim()) {\n        props.style = {};\n        return;\n    }\n    try {\n        props.style = (0, style_to_js_1.default)(style, styleOptions);\n    }\n    catch (error) {\n        props.style = {};\n    }\n}\nexports.setStyleProp = setStyleProp;\n/**\n * @see https://reactjs.org/blog/2017/09/08/dom-attributes-in-react-16.html\n */\nexports.PRESERVE_CUSTOM_ATTRIBUTES = Number(react_1.version.split('.')[0]) >= 16;\n/**\n * @see https://github.com/facebook/react/blob/cae635054e17a6f107a39d328649137b83f25972/packages/react-dom/src/client/validateDOMNesting.js#L213\n */\nexports.ELEMENTS_WITH_NO_TEXT_CHILDREN = new Set([\n    'tr',\n    'tbody',\n    'thead',\n    'tfoot',\n    'colgroup',\n    'table',\n    'head',\n    'html',\n    'frameset',\n]);\n/**\n * Checks if the given node can contain text nodes\n *\n * @param node - Element node.\n * @returns - Whether the node can contain text nodes.\n */\nvar canTextBeChildOfNode = function (node) {\n    return !exports.ELEMENTS_WITH_NO_TEXT_CHILDREN.has(node.name);\n};\nexports.canTextBeChildOfNode = canTextBeChildOfNode;\n/**\n * Returns the first argument as is.\n *\n * @param arg - The argument to be returned.\n * @returns - The input argument `arg`.\n */\nvar returnFirstArg = function (arg) { return arg; };\nexports.returnFirstArg = returnFirstArg;\n//# sourceMappingURL=utilities.js.map","// http://www.w3.org/TR/CSS21/grammar.html\n// https://github.com/visionmedia/css-parse/pull/49#issuecomment-30088027\nvar COMMENT_REGEX = /\\/\\*[^*]*\\*+([^/*][^*]*\\*+)*\\//g;\n\nvar NEWLINE_REGEX = /\\n/g;\nvar WHITESPACE_REGEX = /^\\s*/;\n\n// declaration\nvar PROPERTY_REGEX = /^(\\*?[-#/*\\\\\\w]+(\\[[0-9a-z_-]+\\])?)\\s*/;\nvar COLON_REGEX = /^:\\s*/;\nvar VALUE_REGEX = /^((?:'(?:\\\\'|.)*?'|\"(?:\\\\\"|.)*?\"|\\([^)]*?\\)|[^};])+)/;\nvar SEMICOLON_REGEX = /^[;\\s]*/;\n\n// https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String/Trim#Polyfill\nvar TRIM_REGEX = /^\\s+|\\s+$/g;\n\n// strings\nvar NEWLINE = '\\n';\nvar FORWARD_SLASH = '/';\nvar ASTERISK = '*';\nvar EMPTY_STRING = '';\n\n// types\nvar TYPE_COMMENT = 'comment';\nvar TYPE_DECLARATION = 'declaration';\n\n/**\n * @param {String} style\n * @param {Object} [options]\n * @return {Object[]}\n * @throws {TypeError}\n * @throws {Error}\n */\nmodule.exports = function (style, options) {\n  if (typeof style !== 'string') {\n    throw new TypeError('First argument must be a string');\n  }\n\n  if (!style) return [];\n\n  options = options || {};\n\n  /**\n   * Positional.\n   */\n  var lineno = 1;\n  var column = 1;\n\n  /**\n   * Update lineno and column based on `str`.\n   *\n   * @param {String} str\n   */\n  function updatePosition(str) {\n    var lines = str.match(NEWLINE_REGEX);\n    if (lines) lineno += lines.length;\n    var i = str.lastIndexOf(NEWLINE);\n    column = ~i ? str.length - i : column + str.length;\n  }\n\n  /**\n   * Mark position and patch `node.position`.\n   *\n   * @return {Function}\n   */\n  function position() {\n    var start = { line: lineno, column: column };\n    return function (node) {\n      node.position = new Position(start);\n      whitespace();\n      return node;\n    };\n  }\n\n  /**\n   * Store position information for a node.\n   *\n   * @constructor\n   * @property {Object} start\n   * @property {Object} end\n   * @property {undefined|String} source\n   */\n  function Position(start) {\n    this.start = start;\n    this.end = { line: lineno, column: column };\n    this.source = options.source;\n  }\n\n  /**\n   * Non-enumerable source string.\n   */\n  Position.prototype.content = style;\n\n  var errorsList = [];\n\n  /**\n   * Error `msg`.\n   *\n   * @param {String} msg\n   * @throws {Error}\n   */\n  function error(msg) {\n    var err = new Error(\n      options.source + ':' + lineno + ':' + column + ': ' + msg\n    );\n    err.reason = msg;\n    err.filename = options.source;\n    err.line = lineno;\n    err.column = column;\n    err.source = style;\n\n    if (options.silent) {\n      errorsList.push(err);\n    } else {\n      throw err;\n    }\n  }\n\n  /**\n   * Match `re` and return captures.\n   *\n   * @param {RegExp} re\n   * @return {undefined|Array}\n   */\n  function match(re) {\n    var m = re.exec(style);\n    if (!m) return;\n    var str = m[0];\n    updatePosition(str);\n    style = style.slice(str.length);\n    return m;\n  }\n\n  /**\n   * Parse whitespace.\n   */\n  function whitespace() {\n    match(WHITESPACE_REGEX);\n  }\n\n  /**\n   * Parse comments.\n   *\n   * @param {Object[]} [rules]\n   * @return {Object[]}\n   */\n  function comments(rules) {\n    var c;\n    rules = rules || [];\n    while ((c = comment())) {\n      if (c !== false) {\n        rules.push(c);\n      }\n    }\n    return rules;\n  }\n\n  /**\n   * Parse comment.\n   *\n   * @return {Object}\n   * @throws {Error}\n   */\n  function comment() {\n    var pos = position();\n    if (FORWARD_SLASH != style.charAt(0) || ASTERISK != style.charAt(1)) return;\n\n    var i = 2;\n    while (\n      EMPTY_STRING != style.charAt(i) &&\n      (ASTERISK != style.charAt(i) || FORWARD_SLASH != style.charAt(i + 1))\n    ) {\n      ++i;\n    }\n    i += 2;\n\n    if (EMPTY_STRING === style.charAt(i - 1)) {\n      return error('End of comment missing');\n    }\n\n    var str = style.slice(2, i - 2);\n    column += 2;\n    updatePosition(str);\n    style = style.slice(i);\n    column += 2;\n\n    return pos({\n      type: TYPE_COMMENT,\n      comment: str\n    });\n  }\n\n  /**\n   * Parse declaration.\n   *\n   * @return {Object}\n   * @throws {Error}\n   */\n  function declaration() {\n    var pos = position();\n\n    // prop\n    var prop = match(PROPERTY_REGEX);\n    if (!prop) return;\n    comment();\n\n    // :\n    if (!match(COLON_REGEX)) return error(\"property missing ':'\");\n\n    // val\n    var val = match(VALUE_REGEX);\n\n    var ret = pos({\n      type: TYPE_DECLARATION,\n      property: trim(prop[0].replace(COMMENT_REGEX, EMPTY_STRING)),\n      value: val\n        ? trim(val[0].replace(COMMENT_REGEX, EMPTY_STRING))\n        : EMPTY_STRING\n    });\n\n    // ;\n    match(SEMICOLON_REGEX);\n\n    return ret;\n  }\n\n  /**\n   * Parse declarations.\n   *\n   * @return {Object[]}\n   */\n  function declarations() {\n    var decls = [];\n\n    comments(decls);\n\n    // declarations\n    var decl;\n    while ((decl = declaration())) {\n      if (decl !== false) {\n        decls.push(decl);\n        comments(decls);\n      }\n    }\n\n    return decls;\n  }\n\n  whitespace();\n  return declarations();\n};\n\n/**\n * Trim `str`.\n *\n * @param {String} str\n * @return {String}\n */\nfunction trim(str) {\n  return str ? str.replace(TRIM_REGEX, EMPTY_STRING) : EMPTY_STRING;\n}\n","'use strict';\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.excelBOM = exports.defaultCsv2JsonOptions = exports.defaultJson2CsvOptions = exports.errors = void 0;\nexports.errors = {\n    optionsRequired: 'Options were not passed and are required.',\n    json2csv: {\n        cannotCallOn: 'Cannot call json2csv on',\n        dataCheckFailure: 'Data provided was not an array of documents.',\n        notSameSchema: 'Not all documents have the same schema.'\n    },\n    csv2json: {\n        cannotCallOn: 'Cannot call csv2json on',\n        dataCheckFailure: 'CSV is not a string.'\n    }\n};\nexports.defaultJson2CsvOptions = {\n    checkSchemaDifferences: false,\n    delimiter: {\n        field: ',',\n        wrap: '\"',\n        eol: '\\n'\n    },\n    emptyFieldValue: undefined,\n    excelBOM: false,\n    excludeKeys: [],\n    expandNestedObjects: true,\n    expandArrayObjects: false,\n    prependHeader: true,\n    preventCsvInjection: false,\n    sortHeader: false,\n    trimFieldValues: false,\n    trimHeaderFields: false,\n    unwindArrays: false,\n    useDateIso8601Format: false,\n    useLocaleFormat: false,\n    wrapBooleans: false,\n};\nexports.defaultCsv2JsonOptions = {\n    delimiter: {\n        field: ',',\n        wrap: '\"',\n        eol: '\\n'\n    },\n    excelBOM: false,\n    preventCsvInjection: false,\n    trimFieldValues: false,\n    trimHeaderFields: false,\n    wrapBooleans: false,\n};\nexports.excelBOM = '\\ufeff';\n","'use strict';\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.csv2json = exports.json2csv = void 0;\nconst constants_1 = require(\"./constants\");\nconst json2csv_1 = require(\"./json2csv\");\nconst csv2json_1 = require(\"./csv2json\");\nconst utils_1 = require(\"./utils\");\nfunction json2csv(data, options) {\n    const builtOptions = (0, utils_1.buildJ2COptions)(options ?? {});\n    // Validate the parameters before calling the converter's convert function\n    (0, utils_1.validate)(data, utils_1.isObject, constants_1.errors.json2csv);\n    return (0, json2csv_1.Json2Csv)(builtOptions).convert(data);\n}\nexports.json2csv = json2csv;\nfunction csv2json(data, options) {\n    const builtOptions = (0, utils_1.buildC2JOptions)(options ?? {});\n    // Validate the parameters before calling the converter's convert function\n    (0, utils_1.validate)(data, utils_1.isString, constants_1.errors.csv2json);\n    return (0, csv2json_1.Csv2Json)(builtOptions).convert(data);\n}\nexports.csv2json = csv2json;\n","'use strict';\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    var desc = Object.getOwnPropertyDescriptor(m, k);\n    if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n      desc = { enumerable: true, get: function() { return m[k]; } };\n    }\n    Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n    Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n    o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n    if (mod && mod.__esModule) return mod;\n    var result = {};\n    if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n    __setModuleDefault(result, mod);\n    return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Csv2Json = void 0;\nconst doc_path_1 = require(\"doc-path\");\nconst constants_1 = require(\"./constants\");\nconst utils = __importStar(require(\"./utils\"));\nconst Csv2Json = function (options) {\n    const escapedWrapDelimiterRegex = new RegExp(options.delimiter.wrap + options.delimiter.wrap, 'g'), excelBOMRegex = new RegExp('^' + constants_1.excelBOM), valueParserFn = options.parseValue && typeof options.parseValue === 'function' ? options.parseValue : JSON.parse;\n    /**\n     * Trims the header key, if specified by the user via the provided options\n     */\n    function processHeaderKey(headerKey) {\n        headerKey = removeWrapDelimitersFromValue(headerKey);\n        if (options.trimHeaderFields) {\n            return headerKey.split('.')\n                .map((component) => component.trim())\n                .join('.');\n        }\n        return headerKey;\n    }\n    /**\n     * Generate the JSON heading from the CSV\n     */\n    function retrieveHeading(lines) {\n        let headerFields = [];\n        if (options.headerFields) {\n            headerFields = options.headerFields.map((headerField, index) => ({\n                value: processHeaderKey(headerField),\n                index\n            }));\n        }\n        else {\n            // Generate and return the heading keys\n            const headerRow = lines[0];\n            headerFields = headerRow.map((headerKey, index) => ({\n                value: processHeaderKey(headerKey),\n                index\n            }));\n            // If the user provided keys, filter the generated keys to just the user provided keys so we also have the key index\n            if (options.keys) {\n                const keys = options.keys; // TypeScript type checking work around to get it to recognize the option is not undefined\n                headerFields = headerFields.filter((headerKey) => keys.includes(headerKey.value));\n            }\n        }\n        return {\n            lines,\n            headerFields,\n            recordLines: [],\n        };\n    }\n    /**\n     * Removes the Excel BOM value, if specified by the options object\n     */\n    function stripExcelBOM(csv) {\n        if (options.excelBOM) {\n            return csv.replace(excelBOMRegex, '');\n        }\n        return csv;\n    }\n    /**\n     * Helper function that splits a line so that we can handle wrapped fields\n     */\n    function splitLines(csv) {\n        // Parse out the line...\n        const lines = [], lastCharacterIndex = csv.length - 1, eolDelimiterLength = options.delimiter.eol.length, stateVariables = {\n            insideWrapDelimiter: false,\n            parsingValue: true,\n            justParsedDoubleQuote: false,\n            startIndex: 0\n        };\n        let splitLine = [], character, charBefore, charAfter, nextNChar, index = 0;\n        // Loop through each character in the line to identify where to split the values\n        while (index < csv.length) {\n            // Current character\n            character = csv[index];\n            // Previous character\n            charBefore = index ? csv[index - 1] : '';\n            // Next character\n            charAfter = index < lastCharacterIndex ? csv[index + 1] : '';\n            // Next n characters, including the current character, where n = length(EOL delimiter)\n            // This allows for the checking of an EOL delimiter when if it is more than a single character (eg. '\\r\\n')\n            nextNChar = utils.getNCharacters(csv, index, eolDelimiterLength);\n            if ((nextNChar === options.delimiter.eol && !stateVariables.insideWrapDelimiter ||\n                index === lastCharacterIndex) && charBefore === options.delimiter.field) {\n                // If we reached an EOL delimiter or the end of the csv and the previous character is a field delimiter...\n                // If the start index is the current index (and since the previous character is a comma),\n                //   then the value being parsed is an empty value accordingly, add an empty string\n                if (nextNChar === options.delimiter.eol && stateVariables.startIndex === index) {\n                    splitLine.push('');\n                }\n                else if (character === options.delimiter.field) {\n                    // If we reached the end of the CSV, there's no new line, and the current character is a comma\n                    // then add an empty string for the current value\n                    splitLine.push('');\n                }\n                else {\n                    // Otherwise, there's a valid value, and the start index isn't the current index, grab the whole value\n                    splitLine.push(csv.substr(stateVariables.startIndex));\n                }\n                // Since the last character is a comma, there's still an additional implied field value trailing the comma.\n                //   Since this value is empty, we push an extra empty value\n                splitLine.push('');\n                // Finally, push the split line values into the lines array and clear the split line\n                lines.push(splitLine);\n                splitLine = [];\n                stateVariables.startIndex = index + eolDelimiterLength;\n                stateVariables.parsingValue = true;\n                stateVariables.insideWrapDelimiter = charAfter === options.delimiter.wrap;\n            }\n            else if (index === lastCharacterIndex && character === options.delimiter.field) {\n                // If we reach the end of the CSV and the current character is a field delimiter\n                // Parse the previously seen value and add it to the line\n                const parsedValue = csv.substring(stateVariables.startIndex, index);\n                splitLine.push(parsedValue);\n                // Then add an empty string to the line since the last character being a field delimiter indicates an empty field\n                splitLine.push('');\n                lines.push(splitLine);\n            }\n            else if (index === lastCharacterIndex || nextNChar === options.delimiter.eol &&\n                // if we aren't inside wrap delimiters or if we are but the character before was a wrap delimiter and we didn't just see two\n                (!stateVariables.insideWrapDelimiter ||\n                    stateVariables.insideWrapDelimiter && charBefore === options.delimiter.wrap && !stateVariables.justParsedDoubleQuote)) {\n                // Otherwise if we reached the end of the line or csv (and current character is not a field delimiter)\n                const toIndex = index !== lastCharacterIndex || charBefore === options.delimiter.wrap ? index : undefined;\n                // Retrieve the remaining value and add it to the split line list of values\n                splitLine.push(csv.substring(stateVariables.startIndex, toIndex));\n                // Finally, push the split line values into the lines array and clear the split line\n                lines.push(splitLine);\n                splitLine = [];\n                stateVariables.startIndex = index + eolDelimiterLength;\n                stateVariables.parsingValue = true;\n                stateVariables.insideWrapDelimiter = charAfter === options.delimiter.wrap;\n            }\n            else if (character === options.delimiter.wrap && charBefore === options.delimiter.field &&\n                !stateVariables.insideWrapDelimiter && !stateVariables.parsingValue) {\n                // If we reached a wrap delimiter after a comma and we aren't inside a wrap delimiter\n                stateVariables.startIndex = index;\n                stateVariables.insideWrapDelimiter = true;\n                stateVariables.parsingValue = true;\n                // If the next character(s) are an EOL delimiter, then skip them so we don't parse what we've seen as another value\n                if (utils.getNCharacters(csv, index + 1, eolDelimiterLength) === options.delimiter.eol) {\n                    index += options.delimiter.eol.length + 1; // Skip past EOL\n                }\n            }\n            else if ((charBefore !== options.delimiter.wrap || stateVariables.justParsedDoubleQuote && charBefore === options.delimiter.wrap) &&\n                character === options.delimiter.wrap && utils.getNCharacters(csv, index + 1, eolDelimiterLength) === options.delimiter.eol) {\n                // If we reach a wrap which is not preceded by a wrap delim and the next character is an EOL delim (ie. *\"\\n)\n                stateVariables.insideWrapDelimiter = false;\n                stateVariables.parsingValue = false;\n                // Next iteration will substring, add the value to the line, and push the line onto the array of lines\n            }\n            else if (character === options.delimiter.wrap && (index === 0 || utils.getNCharacters(csv, index - eolDelimiterLength, eolDelimiterLength) === options.delimiter.eol && !stateVariables.insideWrapDelimiter)) {\n                // If the line starts with a wrap delimiter (ie. \"*)\n                stateVariables.insideWrapDelimiter = true;\n                stateVariables.parsingValue = true;\n                stateVariables.startIndex = index;\n            }\n            else if (character === options.delimiter.wrap && charAfter === options.delimiter.field) {\n                // If we reached a wrap delimiter with a field delimiter after it (ie. *\",)\n                splitLine.push(csv.substring(stateVariables.startIndex, index + 1));\n                stateVariables.startIndex = index + 2; // next value starts after the field delimiter\n                stateVariables.insideWrapDelimiter = false;\n                stateVariables.parsingValue = false;\n            }\n            else if (character === options.delimiter.wrap && charBefore === options.delimiter.field &&\n                !stateVariables.insideWrapDelimiter && stateVariables.parsingValue) {\n                // If we reached a wrap delimiter with a field delimiter after it (ie. ,\"*)\n                splitLine.push(csv.substring(stateVariables.startIndex, index - 1));\n                stateVariables.insideWrapDelimiter = true;\n                stateVariables.parsingValue = true;\n                stateVariables.startIndex = index;\n            }\n            else if (character === options.delimiter.wrap && charAfter === options.delimiter.wrap && index !== stateVariables.startIndex) {\n                // If we run into an escaped quote (ie. \"\") skip past the second quote\n                index += 2;\n                stateVariables.justParsedDoubleQuote = true;\n                continue;\n            }\n            else if (character === options.delimiter.field && charBefore !== options.delimiter.wrap &&\n                charAfter !== options.delimiter.wrap && !stateVariables.insideWrapDelimiter &&\n                stateVariables.parsingValue) {\n                // If we reached a field delimiter and are not inside the wrap delimiters (ie. *,*)\n                splitLine.push(csv.substring(stateVariables.startIndex, index));\n                stateVariables.startIndex = index + 1;\n            }\n            else if (character === options.delimiter.field && charBefore === options.delimiter.wrap &&\n                charAfter !== options.delimiter.wrap && !stateVariables.parsingValue) {\n                // If we reached a field delimiter, the previous character was a wrap delimiter, and the\n                //   next character is not a wrap delimiter (ie. \",*)\n                stateVariables.insideWrapDelimiter = false;\n                stateVariables.parsingValue = true;\n                stateVariables.startIndex = index + 1;\n            }\n            // Otherwise increment to the next character\n            index++;\n            // Reset the double quote state variable\n            stateVariables.justParsedDoubleQuote = false;\n        }\n        return lines;\n    }\n    /**\n     * Retrieves the record lines from the split CSV lines and sets it on the params object\n     */\n    function retrieveRecordLines(params) {\n        if (options.headerFields) { // This option is passed for instances where the CSV has no header line\n            params.recordLines = params.lines;\n        }\n        else { // All lines except for the header line\n            params.recordLines = params.lines.splice(1);\n        }\n        return params;\n    }\n    /**\n     * Retrieves the value for the record from the line at the provided key.\n     */\n    function retrieveRecordValueFromLine(headerField, line) {\n        // If there is a value at the key's index, use it; otherwise, null\n        const value = line[headerField.index];\n        // Perform any necessary value conversions on the record value\n        return processRecordValue(value);\n    }\n    /**\n     * Processes the record's value by parsing the data to ensure the CSV is\n     * converted to the JSON that created it.\n     */\n    function processRecordValue(fieldValue) {\n        // If the value is an array representation, convert it\n        const parsedJson = parseValue(fieldValue);\n        // If parsedJson is anything aside from an error, then we want to use the parsed value\n        // This allows us to interpret values like 'null' --> null, 'false' --> false\n        if (!utils.isError(parsedJson) && !utils.isInvalid(parsedJson)) {\n            return parsedJson;\n        }\n        else if (fieldValue === 'undefined') {\n            return undefined;\n        }\n        return fieldValue;\n    }\n    /**\n     * Trims the record value, if specified by the user via the options object\n     */\n    function trimRecordValue(fieldValue) {\n        if (options.trimFieldValues && fieldValue !== null) {\n            return fieldValue.trim();\n        }\n        return fieldValue;\n    }\n    /**\n     * Create a JSON document with the given keys (designated by the CSV header)\n     *   and the values (from the given line)\n     * @returns {Object} created json document\n     */\n    function createDocument(headerFields, line) {\n        // Reduce the keys into a JSON document representing the given line\n        return headerFields.reduce((document, headerField) => {\n            // If there is a value at the key's index in the line, set the value; otherwise null\n            const value = retrieveRecordValueFromLine(headerField, line);\n            try {\n                // Otherwise add the key and value to the document\n                return (0, doc_path_1.setPath)(document, headerField.value, value);\n            }\n            catch (error) {\n                // Catch any errors where key paths are null or '' and continue\n                return document;\n            }\n        }, {});\n    }\n    /**\n     * Removes the outermost wrap delimiters from a value, if they are present\n     * Otherwise, the non-wrapped value is returned as is\n     */\n    function removeWrapDelimitersFromValue(fieldValue) {\n        const firstChar = fieldValue[0], lastIndex = fieldValue.length - 1, lastChar = fieldValue[lastIndex];\n        // If the field starts and ends with a wrap delimiter\n        if (firstChar === options.delimiter.wrap && lastChar === options.delimiter.wrap) {\n            return fieldValue.substr(1, lastIndex - 1);\n        }\n        return fieldValue;\n    }\n    /**\n     * Unescapes wrap delimiters by replacing duplicates with a single (eg. \"\" -> \")\n     * This is done in order to parse RFC 4180 compliant CSV back to JSON\n     */\n    function unescapeWrapDelimiterInField(fieldValue) {\n        return fieldValue.replace(escapedWrapDelimiterRegex, options.delimiter.wrap);\n    }\n    /**\n     * Main helper function to convert the CSV to the JSON document array\n     */\n    function transformRecordLines(params) {\n        // For each line, create the document and add it to the array of documents\n        return params.recordLines.reduce((generatedJsonObjects, line) => {\n            line = line.map((fieldValue) => {\n                // Perform the necessary operations on each line\n                fieldValue = removeWrapDelimitersFromValue(fieldValue);\n                fieldValue = unescapeWrapDelimiterInField(fieldValue);\n                fieldValue = trimRecordValue(fieldValue);\n                return fieldValue;\n            });\n            const generatedDocument = createDocument(params.headerFields, line);\n            return generatedJsonObjects.concat(generatedDocument);\n        }, []);\n    }\n    /**\n     * Attempts to parse the provided value. If it is not parsable, then an error is returned\n     */\n    function parseValue(value) {\n        try {\n            if (utils.isStringRepresentation(value, options) && !utils.isDateRepresentation(value)) {\n                return value;\n            }\n            const parsedJson = valueParserFn(value);\n            // If the parsed value is an array, then we also need to trim record values, if specified\n            if (Array.isArray(parsedJson)) {\n                return parsedJson.map(trimRecordValue);\n            }\n            return parsedJson;\n        }\n        catch (err) {\n            return err;\n        }\n    }\n    /**\n     * Internally exported csv2json function\n     */\n    function convert(data) {\n        // Split the CSV into lines using the specified EOL option\n        const stripped = stripExcelBOM(data);\n        const split = splitLines(stripped);\n        const heading = retrieveHeading(split); // Retrieve the headings from the CSV, unless the user specified the keys\n        const lines = retrieveRecordLines(heading); // Retrieve the record lines from the CSV\n        return transformRecordLines(lines); // Retrieve the JSON document array\n    }\n    return {\n        convert,\n    };\n};\nexports.Csv2Json = Csv2Json;\n","'use strict';\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    var desc = Object.getOwnPropertyDescriptor(m, k);\n    if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n      desc = { enumerable: true, get: function() { return m[k]; } };\n    }\n    Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n    Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n    o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n    if (mod && mod.__esModule) return mod;\n    var result = {};\n    if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n    __setModuleDefault(result, mod);\n    return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Json2Csv = void 0;\nconst doc_path_1 = require(\"doc-path\");\nconst deeks_1 = require(\"deeks\");\nconst constants_1 = require(\"./constants\");\nconst utils = __importStar(require(\"./utils\"));\nconst Json2Csv = function (options) {\n    const wrapDelimiterCheckRegex = new RegExp(options.delimiter.wrap, 'g'), crlfSearchRegex = /\\r?\\n|\\r/, customValueParser = options.parseValue && typeof options.parseValue === 'function' ? options.parseValue : null, expandingWithoutUnwinding = options.expandArrayObjects && !options.unwindArrays, deeksOptions = {\n        expandNestedObjects: options.expandNestedObjects,\n        expandArrayObjects: expandingWithoutUnwinding,\n        ignoreEmptyArraysWhenExpanding: expandingWithoutUnwinding,\n        escapeNestedDots: true\n    };\n    /** HEADER FIELD FUNCTIONS **/\n    /**\n     * Returns the list of data field names of all documents in the provided list\n     */\n    function getFieldNameList(data) {\n        // If keys weren't specified, then we'll use the list of keys generated by the deeks module\n        return (0, deeks_1.deepKeysFromList)(data, deeksOptions);\n    }\n    /**\n     * Processes the schemas by checking for schema differences, if so desired.\n     * If schema differences are not to be checked, then it resolves the unique\n     * list of field names.\n     */\n    function processSchemas(documentSchemas) {\n        // If the user wants to check for the same schema (regardless of schema ordering)\n        if (options.checkSchemaDifferences) {\n            return checkSchemaDifferences(documentSchemas);\n        }\n        else {\n            // Otherwise, we do not care if the schemas are different, so we should get the unique list of keys\n            const uniqueFieldNames = utils.unique(utils.flatten(documentSchemas));\n            return uniqueFieldNames;\n        }\n    }\n    /**\n     * This function performs the schema difference check, if the user specifies that it should be checked.\n     * If there are no field names, then there are no differences.\n     * Otherwise, we get the first schema and the remaining list of schemas\n     */\n    function checkSchemaDifferences(documentSchemas) {\n        // have multiple documents - ensure only one schema (regardless of field ordering)\n        const firstDocSchema = documentSchemas[0], restOfDocumentSchemas = documentSchemas.slice(1), schemaDifferences = computeNumberOfSchemaDifferences(firstDocSchema, restOfDocumentSchemas);\n        // If there are schema inconsistencies, throw a schema not the same error\n        if (schemaDifferences) {\n            throw new Error(constants_1.errors.json2csv.notSameSchema);\n        }\n        return firstDocSchema;\n    }\n    /**\n     * Computes the number of schema differences\n     */\n    function computeNumberOfSchemaDifferences(firstDocSchema, restOfDocumentSchemas) {\n        return restOfDocumentSchemas.reduce((schemaDifferences, documentSchema) => {\n            // If there is a difference between the schemas, increment the counter of schema inconsistencies\n            const numberOfDifferences = utils.computeSchemaDifferences(firstDocSchema, documentSchema).length;\n            return numberOfDifferences > 0\n                ? schemaDifferences + 1\n                : schemaDifferences;\n        }, 0);\n    }\n    /**\n     * If so specified, this filters the detected key paths to exclude any keys that have been specified\n     */\n    function filterExcludedKeys(keyPaths) {\n        if (options.excludeKeys) {\n            return keyPaths.filter((keyPath) => {\n                return !options.excludeKeys.includes(keyPath);\n            });\n        }\n        return keyPaths;\n    }\n    /**\n     * If so specified, this sorts the header field names alphabetically\n     */\n    function sortHeaderFields(fieldNames) {\n        if (options.sortHeader && typeof options.sortHeader === 'function') {\n            return fieldNames.sort(options.sortHeader);\n        }\n        else if (options.sortHeader) {\n            return fieldNames.sort();\n        }\n        return fieldNames;\n    }\n    /**\n     * Trims the header fields, if the user desires them to be trimmed.\n     */\n    function trimHeaderFields(params) {\n        if (options.trimHeaderFields) {\n            params.headerFields = params.headerFields.map((field) => field.split('.')\n                .map((component) => component.trim())\n                .join('.'));\n        }\n        return params;\n    }\n    /**\n     * Wrap the headings, if desired by the user.\n     */\n    function wrapHeaderFields(params) {\n        // only perform this if we are actually prepending the header\n        if (options.prependHeader) {\n            params.headerFields = params.headerFields.map(function (headingKey) {\n                return wrapFieldValueIfNecessary(headingKey);\n            });\n        }\n        return params;\n    }\n    /**\n     * Generates the CSV header string by joining the headerFields by the field delimiter\n     */\n    function generateCsvHeader(params) {\n        // #185 - generate a keys list to avoid finding native Map() methods\n        const fieldTitleMapKeys = Object.keys(options.fieldTitleMap);\n        params.header = params.headerFields\n            .map(function (field) {\n            const headerKey = fieldTitleMapKeys.includes(field) ? options.fieldTitleMap[field] : field;\n            return wrapFieldValueIfNecessary(headerKey);\n        })\n            .join(options.delimiter.field);\n        return params;\n    }\n    function convertKeysToHeaderFields() {\n        if (!options.keys)\n            return [];\n        return options.keys.map((key) => {\n            if (typeof key === 'object' && 'field' in key) {\n                options.fieldTitleMap[key.field] = key.title ?? key.field;\n                return key.field;\n            }\n            return key;\n        });\n    }\n    /**\n     * Retrieve the headings for all documents and return it.\n     * This checks that all documents have the same schema.\n     */\n    function retrieveHeaderFields(data) {\n        const keyStrings = convertKeysToHeaderFields();\n        if (options.keys) {\n            options.keys = keyStrings;\n            if (!options.unwindArrays) {\n                const filtered = filterExcludedKeys(keyStrings);\n                return sortHeaderFields(filtered);\n            }\n        }\n        const fieldNames = getFieldNameList(data);\n        const processed = processSchemas(fieldNames);\n        const filtered = filterExcludedKeys(processed);\n        return sortHeaderFields(filtered);\n    }\n    /** RECORD FIELD FUNCTIONS **/\n    /**\n     * Unwinds objects in arrays within record objects if the user specifies the\n     * expandArrayObjects option. If not specified, this passes the params\n     * argument through to the next function in the promise chain.\n     *\n     * The `finalPass` parameter is used to trigger one last pass to ensure no more\n     * arrays need to be expanded\n     */\n    function unwindRecordsIfNecessary(params, finalPass = false) {\n        if (options.unwindArrays) {\n            const originalRecordsLength = params.records.length;\n            // Unwind each of the documents at the given headerField\n            params.headerFields.forEach((headerField) => {\n                params.records = utils.unwind(params.records, headerField);\n            });\n            const headerFields = retrieveHeaderFields(params.records);\n            params.headerFields = headerFields;\n            // If we were able to unwind more arrays, then try unwinding again...\n            if (originalRecordsLength !== params.records.length) {\n                return unwindRecordsIfNecessary(params);\n            }\n            // Otherwise, we didn't unwind any additional arrays, so continue...\n            // Run a final time in case the earlier unwinding exposed additional\n            // arrays to unwind...\n            if (!finalPass) {\n                return unwindRecordsIfNecessary(params, true);\n            }\n            // If keys were provided, set the headerFields back to the provided keys after unwinding:\n            if (options.keys) {\n                const userSelectedFields = convertKeysToHeaderFields();\n                params.headerFields = filterExcludedKeys(userSelectedFields);\n            }\n            return params;\n        }\n        return params;\n    }\n    /**\n     * Main function which handles the processing of a record, or document to be converted to CSV format\n     * This function specifies and performs the necessary operations in the necessary order\n     * in order to obtain the data and convert it to CSV form while maintaining RFC 4180 compliance.\n     * * Order of operations:\n     * - Get fields from provided key list (as array of actual values)\n     * - Convert the values to csv/string representation [possible option here for custom converters?]\n     * - Trim fields\n     * - Determine if they need to be wrapped (& wrap if necessary)\n     * - Combine values for each line (by joining by field delimiter)\n     */\n    function processRecords(params) {\n        params.recordString = params.records.map((record) => {\n            // Retrieve data for each of the headerFields from this record\n            const recordFieldData = retrieveRecordFieldData(record, params.headerFields), \n            // Process the data in this record and return the\n            processedRecordData = recordFieldData.map((fieldValue) => {\n                fieldValue = trimRecordFieldValue(fieldValue);\n                fieldValue = preventCsvInjection(fieldValue);\n                let stringified = customValueParser ? customValueParser(fieldValue, recordFieldValueToString) : recordFieldValueToString(fieldValue);\n                stringified = wrapFieldValueIfNecessary(stringified);\n                return stringified;\n            });\n            // Join the record data by the field delimiter\n            return generateCsvRowFromRecord(processedRecordData);\n        }).join(options.delimiter.eol);\n        return params;\n    }\n    /**\n     * Helper function intended to process *just* array values when the expandArrayObjects setting is set to true\n     */\n    function processRecordFieldDataForExpandedArrayObject(recordFieldValue) {\n        const filteredRecordFieldValue = utils.removeEmptyFields(recordFieldValue);\n        // If we have an array and it's either empty of full of empty values, then use an empty value representation\n        if (!recordFieldValue.length || !filteredRecordFieldValue.length) {\n            return options.emptyFieldValue || '';\n        }\n        else if (filteredRecordFieldValue.length === 1) {\n            // Otherwise, we have an array of actual values...\n            // Since we are expanding array objects, we will want to key in on values of objects.\n            return filteredRecordFieldValue[0]; // Extract the single value in the array\n        }\n        return recordFieldValue;\n    }\n    /**\n     * Gets all field values from a particular record for the given list of fields\n     */\n    function retrieveRecordFieldData(record, fields) {\n        const recordValues = [];\n        fields.forEach((field) => {\n            let recordFieldValue = (0, doc_path_1.evaluatePath)(record, field);\n            if (!utils.isUndefined(options.emptyFieldValue) && utils.isEmptyField(recordFieldValue)) {\n                recordFieldValue = options.emptyFieldValue;\n            }\n            else if (options.expandArrayObjects && Array.isArray(recordFieldValue)) {\n                recordFieldValue = processRecordFieldDataForExpandedArrayObject(recordFieldValue);\n            }\n            recordValues.push(recordFieldValue);\n        });\n        return recordValues;\n    }\n    /**\n     * Converts a record field value to its string representation\n     */\n    function recordFieldValueToString(fieldValue) {\n        const isDate = fieldValue instanceof Date; // store to avoid checking twice\n        if (fieldValue === null || Array.isArray(fieldValue) || typeof fieldValue === 'object' && !isDate) {\n            return JSON.stringify(fieldValue);\n        }\n        else if (typeof fieldValue === 'undefined') {\n            return 'undefined';\n        }\n        else if (isDate && options.useDateIso8601Format) {\n            return fieldValue.toISOString();\n        }\n        else {\n            return !options.useLocaleFormat ? fieldValue.toString() : fieldValue.toLocaleString();\n        }\n    }\n    /**\n     * Trims the record field value, if specified by the user's provided options\n     */\n    function trimRecordFieldValue(fieldValue) {\n        if (options.trimFieldValues) {\n            if (Array.isArray(fieldValue)) {\n                return fieldValue.map(trimRecordFieldValue);\n            }\n            else if (typeof fieldValue === 'string') {\n                return fieldValue.trim();\n            }\n            return fieldValue;\n        }\n        return fieldValue;\n    }\n    /**\n     * Prevent CSV injection on strings if specified by the user's provided options.\n     * Mitigation will be done by ensuring that the first character doesn't being with:\n     * Equals (=), Plus (+), Minus (-), At (@), Tab (0x09), Carriage return (0x0D).\n     * More info: https://owasp.org/www-community/attacks/CSV_Injection\n     */\n    function preventCsvInjection(fieldValue) {\n        if (options.preventCsvInjection) {\n            if (Array.isArray(fieldValue)) {\n                return fieldValue.map(preventCsvInjection);\n            }\n            else if (typeof fieldValue === 'string' && !utils.isNumber(fieldValue)) {\n                return fieldValue.replace(/^[=+\\-@\\t\\r]+/g, '');\n            }\n            return fieldValue;\n        }\n        return fieldValue;\n    }\n    /**\n     * Escapes quotation marks in the field value, if necessary, and appropriately\n     * wraps the record field value if it contains a comma (field delimiter),\n     * quotation mark (wrap delimiter), or a line break (CRLF)\n     */\n    function wrapFieldValueIfNecessary(fieldValue) {\n        const wrapDelimiter = options.delimiter.wrap;\n        // eg. includes quotation marks (default delimiter)\n        if (fieldValue.includes(options.delimiter.wrap)) {\n            // add an additional quotation mark before each quotation mark appearing in the field value\n            fieldValue = fieldValue.replace(wrapDelimiterCheckRegex, wrapDelimiter + wrapDelimiter);\n        }\n        // if the field contains a comma (field delimiter), quotation mark (wrap delimiter), line break, or CRLF\n        //   then enclose it in quotation marks (wrap delimiter)\n        if (fieldValue.includes(options.delimiter.field) ||\n            fieldValue.includes(options.delimiter.wrap) ||\n            fieldValue.match(crlfSearchRegex) ||\n            options.wrapBooleans && (fieldValue === 'true' || fieldValue === 'false')) {\n            // wrap the field's value in a wrap delimiter (quotation marks by default)\n            fieldValue = wrapDelimiter + fieldValue + wrapDelimiter;\n        }\n        return fieldValue;\n    }\n    /**\n     * Generates the CSV record string by joining the field values together by the field delimiter\n     */\n    function generateCsvRowFromRecord(recordFieldValues) {\n        return recordFieldValues.join(options.delimiter.field);\n    }\n    /** CSV COMPONENT COMBINER/FINAL PROCESSOR **/\n    /**\n     * Performs the final CSV construction by combining the fields in the appropriate\n     * order depending on the provided options values and sends the generated CSV\n     * back to the user\n     */\n    function generateCsvFromComponents(params) {\n        const header = params.header, records = params.recordString, \n        // If we are prepending the header, then add an EOL, otherwise just return the records\n        csv = (options.excelBOM ? constants_1.excelBOM : '') +\n            (options.prependHeader ? header + options.delimiter.eol : '') +\n            records;\n        return csv;\n    }\n    /** MAIN CONVERTER FUNCTION **/\n    /**\n     * Internally exported json2csv function\n     */\n    function convert(data) {\n        // Single document, not an array\n        if (utils.isObject(data) && !data.length) {\n            data = [data]; // Convert to an array of the given document\n        }\n        // Retrieve the heading and then generate the CSV with the keys that are identified\n        const headerFields = {\n            headerFields: retrieveHeaderFields(data),\n            records: data,\n            header: '',\n            recordString: '',\n        };\n        const unwinded = unwindRecordsIfNecessary(headerFields);\n        const processed = processRecords(unwinded);\n        const wrapped = wrapHeaderFields(processed);\n        const trimmed = trimHeaderFields(wrapped);\n        const generated = generateCsvHeader(trimmed);\n        return generateCsvFromComponents(generated);\n    }\n    return {\n        convert,\n    };\n};\nexports.Json2Csv = Json2Csv;\n","'use strict';\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.isInvalid = exports.flatten = exports.unique = exports.arrayDifference = exports.isError = exports.isUndefined = exports.isNull = exports.isObject = exports.isString = exports.isNumber = exports.unwind = exports.getNCharacters = exports.removeEmptyFields = exports.isEmptyField = exports.computeSchemaDifferences = exports.isDateRepresentation = exports.isStringRepresentation = exports.deepCopy = exports.validate = exports.buildC2JOptions = exports.buildJ2COptions = void 0;\nconst doc_path_1 = require(\"doc-path\");\nconst constants_1 = require(\"./constants\");\nconst dateStringRegex = /\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}.\\d{3}Z/, MAX_ARRAY_LENGTH = 100000;\n/**\n * Build the options to be passed to the appropriate function\n * If a user does not provide custom options, then we use our default\n * If options are provided, then we set each valid key that was passed\n */\nfunction buildJ2COptions(opts) {\n    return {\n        ...constants_1.defaultJson2CsvOptions,\n        ...opts,\n        delimiter: {\n            field: opts?.delimiter?.field ?? constants_1.defaultJson2CsvOptions.delimiter.field,\n            wrap: opts?.delimiter?.wrap || constants_1.defaultJson2CsvOptions.delimiter.wrap,\n            eol: opts?.delimiter?.eol || constants_1.defaultJson2CsvOptions.delimiter.eol,\n        },\n        fieldTitleMap: Object.create({}),\n    };\n}\nexports.buildJ2COptions = buildJ2COptions;\n/**\n * Build the options to be passed to the appropriate function\n * If a user does not provide custom options, then we use our default\n * If options are provided, then we set each valid key that was passed\n */\nfunction buildC2JOptions(opts) {\n    return {\n        ...constants_1.defaultCsv2JsonOptions,\n        ...opts,\n        delimiter: {\n            field: opts?.delimiter?.field ?? constants_1.defaultCsv2JsonOptions.delimiter.field,\n            wrap: opts?.delimiter?.wrap || constants_1.defaultCsv2JsonOptions.delimiter.wrap,\n            eol: opts?.delimiter?.eol || constants_1.defaultCsv2JsonOptions.delimiter.eol,\n        },\n    };\n}\nexports.buildC2JOptions = buildC2JOptions;\nfunction validate(data, validationFn, errorMessages) {\n    if (!data)\n        throw new Error(`${errorMessages.cannotCallOn} ${data}.`);\n    if (!validationFn(data))\n        throw new Error(errorMessages.dataCheckFailure);\n    return true;\n}\nexports.validate = validate;\n/**\n * Utility function to deep copy an object, used by the module tests\n */\nfunction deepCopy(obj) {\n    return JSON.parse(JSON.stringify(obj));\n}\nexports.deepCopy = deepCopy;\n/**\n * Helper function that determines whether the provided value is a representation\n *   of a string. Given the RFC4180 requirements, that means that the value is\n *   wrapped in value wrap delimiters (usually a quotation mark on each side).\n */\nfunction isStringRepresentation(fieldValue, options) {\n    const firstChar = fieldValue[0], lastIndex = fieldValue.length - 1, lastChar = fieldValue[lastIndex];\n    // If the field starts and ends with a wrap delimiter\n    return firstChar === options.delimiter.wrap && lastChar === options.delimiter.wrap;\n}\nexports.isStringRepresentation = isStringRepresentation;\n/**\n * Helper function that determines whether the provided value is a representation\n *   of a date.\n */\nfunction isDateRepresentation(fieldValue) {\n    return dateStringRegex.test(fieldValue);\n}\nexports.isDateRepresentation = isDateRepresentation;\n/**\n * Helper function that determines the schema differences between two objects.\n */\nfunction computeSchemaDifferences(schemaA, schemaB) {\n    return arrayDifference(schemaA, schemaB)\n        .concat(arrayDifference(schemaB, schemaA));\n}\nexports.computeSchemaDifferences = computeSchemaDifferences;\n/**\n * Utility function to check if a field is considered empty so that the emptyFieldValue can be used instead\n */\nfunction isEmptyField(fieldValue) {\n    return isUndefined(fieldValue) || isNull(fieldValue) || fieldValue === '';\n}\nexports.isEmptyField = isEmptyField;\n/**\n * Helper function that removes empty field values from an array.\n */\nfunction removeEmptyFields(fields) {\n    return fields.filter((field) => !isEmptyField(field));\n}\nexports.removeEmptyFields = removeEmptyFields;\n/**\n * Helper function that retrieves the next n characters from the start index in\n *   the string including the character at the start index. This is used to\n *   check if are currently at an EOL value, since it could be multiple\n *   characters in length (eg. '\\r\\n')\n */\nfunction getNCharacters(str, start, n) {\n    return str.substring(start, start + n);\n}\nexports.getNCharacters = getNCharacters;\n/**\n * The following unwind functionality is a heavily modified version of @edwincen's\n * unwind extension for lodash. Since lodash is a large package to require in,\n * and all of the required functionality was already being imported, either\n * natively or with doc-path, I decided to rewrite the majority of the logic\n * so that an additional dependency would not be required. The original code\n * with the lodash dependency can be found here:\n *\n * https://github.com/edwincen/unwind/blob/master/index.js\n */\n/**\n * Core function that unwinds an item at the provided path\n */\nfunction unwindItem(accumulator, item, fieldPath) {\n    const valueToUnwind = (0, doc_path_1.evaluatePath)(item, fieldPath);\n    let cloned = deepCopy(item);\n    if (Array.isArray(valueToUnwind) && valueToUnwind.length) {\n        valueToUnwind.forEach((val) => {\n            cloned = deepCopy(item);\n            accumulator.push((0, doc_path_1.setPath)(cloned, fieldPath, val));\n        });\n    }\n    else if (Array.isArray(valueToUnwind) && valueToUnwind.length === 0) {\n        // Push an empty string so the value is empty since there are no values\n        (0, doc_path_1.setPath)(cloned, fieldPath, '');\n        accumulator.push(cloned);\n    }\n    else {\n        accumulator.push(cloned);\n    }\n}\n/**\n * Main unwind function which takes an array and a field to unwind.\n */\nfunction unwind(array, field) {\n    const result = [];\n    array.forEach((item) => {\n        unwindItem(result, item, field);\n    });\n    return result;\n}\nexports.unwind = unwind;\n/**\n * Checks whether value can be converted to a number\n */\nfunction isNumber(value) {\n    return !isNaN(Number(value));\n}\nexports.isNumber = isNumber;\n/*\n * Helper functions which were created to remove underscorejs from this package.\n */\nfunction isString(value) {\n    return typeof value === 'string';\n}\nexports.isString = isString;\nfunction isObject(value) {\n    return typeof value === 'object';\n}\nexports.isObject = isObject;\nfunction isNull(value) {\n    return value === null;\n}\nexports.isNull = isNull;\nfunction isUndefined(value) {\n    return typeof value === 'undefined';\n}\nexports.isUndefined = isUndefined;\nfunction isError(value) {\n    // TODO(mrodrig): test this possible change\n    // return value instanceof Error;\n    return Object.prototype.toString.call(value) === '[object Error]';\n}\nexports.isError = isError;\nfunction arrayDifference(a, b) {\n    return a.filter((x) => !b.includes(x));\n}\nexports.arrayDifference = arrayDifference;\nfunction unique(array) {\n    return [...new Set(array)];\n}\nexports.unique = unique;\nfunction flatten(array) {\n    // Node 11+ - use the native array flattening function\n    if (array.flat) {\n        return array.flat();\n    }\n    // #167 - allow browsers to flatten very long 200k+ element arrays\n    if (array.length > MAX_ARRAY_LENGTH) {\n        let safeArray = [];\n        for (let a = 0; a < array.length; a += MAX_ARRAY_LENGTH) {\n            safeArray = safeArray.concat(...array.slice(a, a + MAX_ARRAY_LENGTH));\n        }\n        return safeArray;\n    }\n    return array.reduce((accumulator, value) => accumulator.concat(value), []);\n}\nexports.flatten = flatten;\n/**\n * Used to help avoid incorrect values returned by JSON.parse when converting\n * CSV back to JSON, such as '39e1804' which JSON.parse converts to Infinity\n */\nfunction isInvalid(parsedJson) {\n    return parsedJson === Infinity ||\n        parsedJson === -Infinity;\n}\nexports.isInvalid = isInvalid;\n","/**\n * lodash (Custom Build) <https://lodash.com/>\n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright jQuery Foundation and other contributors <https://jquery.org/>\n * Released under MIT license <https://lodash.com/license>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/** Used to match words composed of alphanumeric characters. */\nvar reAsciiWord = /[^\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\x7f]+/g;\n\n/** Used to match Latin Unicode letters (excluding mathematical operators). */\nvar reLatin = /[\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\xff\\u0100-\\u017f]/g;\n\n/** Used to compose unicode character classes. */\nvar rsAstralRange = '\\\\ud800-\\\\udfff',\n    rsComboMarksRange = '\\\\u0300-\\\\u036f\\\\ufe20-\\\\ufe23',\n    rsComboSymbolsRange = '\\\\u20d0-\\\\u20f0',\n    rsDingbatRange = '\\\\u2700-\\\\u27bf',\n    rsLowerRange = 'a-z\\\\xdf-\\\\xf6\\\\xf8-\\\\xff',\n    rsMathOpRange = '\\\\xac\\\\xb1\\\\xd7\\\\xf7',\n    rsNonCharRange = '\\\\x00-\\\\x2f\\\\x3a-\\\\x40\\\\x5b-\\\\x60\\\\x7b-\\\\xbf',\n    rsPunctuationRange = '\\\\u2000-\\\\u206f',\n    rsSpaceRange = ' \\\\t\\\\x0b\\\\f\\\\xa0\\\\ufeff\\\\n\\\\r\\\\u2028\\\\u2029\\\\u1680\\\\u180e\\\\u2000\\\\u2001\\\\u2002\\\\u2003\\\\u2004\\\\u2005\\\\u2006\\\\u2007\\\\u2008\\\\u2009\\\\u200a\\\\u202f\\\\u205f\\\\u3000',\n    rsUpperRange = 'A-Z\\\\xc0-\\\\xd6\\\\xd8-\\\\xde',\n    rsVarRange = '\\\\ufe0e\\\\ufe0f',\n    rsBreakRange = rsMathOpRange + rsNonCharRange + rsPunctuationRange + rsSpaceRange;\n\n/** Used to compose unicode capture groups. */\nvar rsApos = \"['\\u2019]\",\n    rsAstral = '[' + rsAstralRange + ']',\n    rsBreak = '[' + rsBreakRange + ']',\n    rsCombo = '[' + rsComboMarksRange + rsComboSymbolsRange + ']',\n    rsDigits = '\\\\d+',\n    rsDingbat = '[' + rsDingbatRange + ']',\n    rsLower = '[' + rsLowerRange + ']',\n    rsMisc = '[^' + rsAstralRange + rsBreakRange + rsDigits + rsDingbatRange + rsLowerRange + rsUpperRange + ']',\n    rsFitz = '\\\\ud83c[\\\\udffb-\\\\udfff]',\n    rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')',\n    rsNonAstral = '[^' + rsAstralRange + ']',\n    rsRegional = '(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}',\n    rsSurrPair = '[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff]',\n    rsUpper = '[' + rsUpperRange + ']',\n    rsZWJ = '\\\\u200d';\n\n/** Used to compose unicode regexes. */\nvar rsLowerMisc = '(?:' + rsLower + '|' + rsMisc + ')',\n    rsUpperMisc = '(?:' + rsUpper + '|' + rsMisc + ')',\n    rsOptLowerContr = '(?:' + rsApos + '(?:d|ll|m|re|s|t|ve))?',\n    rsOptUpperContr = '(?:' + rsApos + '(?:D|LL|M|RE|S|T|VE))?',\n    reOptMod = rsModifier + '?',\n    rsOptVar = '[' + rsVarRange + ']?',\n    rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*',\n    rsSeq = rsOptVar + reOptMod + rsOptJoin,\n    rsEmoji = '(?:' + [rsDingbat, rsRegional, rsSurrPair].join('|') + ')' + rsSeq,\n    rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')';\n\n/** Used to match apostrophes. */\nvar reApos = RegExp(rsApos, 'g');\n\n/**\n * Used to match [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks) and\n * [combining diacritical marks for symbols](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks_for_Symbols).\n */\nvar reComboMark = RegExp(rsCombo, 'g');\n\n/** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */\nvar reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g');\n\n/** Used to match complex or compound words. */\nvar reUnicodeWord = RegExp([\n  rsUpper + '?' + rsLower + '+' + rsOptLowerContr + '(?=' + [rsBreak, rsUpper, '$'].join('|') + ')',\n  rsUpperMisc + '+' + rsOptUpperContr + '(?=' + [rsBreak, rsUpper + rsLowerMisc, '$'].join('|') + ')',\n  rsUpper + '?' + rsLowerMisc + '+' + rsOptLowerContr,\n  rsUpper + '+' + rsOptUpperContr,\n  rsDigits,\n  rsEmoji\n].join('|'), 'g');\n\n/** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */\nvar reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange  + rsComboMarksRange + rsComboSymbolsRange + rsVarRange + ']');\n\n/** Used to detect strings that need a more robust regexp to match words. */\nvar reHasUnicodeWord = /[a-z][A-Z]|[A-Z]{2,}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/;\n\n/** Used to map Latin Unicode letters to basic Latin letters. */\nvar deburredLetters = {\n  // Latin-1 Supplement block.\n  '\\xc0': 'A',  '\\xc1': 'A', '\\xc2': 'A', '\\xc3': 'A', '\\xc4': 'A', '\\xc5': 'A',\n  '\\xe0': 'a',  '\\xe1': 'a', '\\xe2': 'a', '\\xe3': 'a', '\\xe4': 'a', '\\xe5': 'a',\n  '\\xc7': 'C',  '\\xe7': 'c',\n  '\\xd0': 'D',  '\\xf0': 'd',\n  '\\xc8': 'E',  '\\xc9': 'E', '\\xca': 'E', '\\xcb': 'E',\n  '\\xe8': 'e',  '\\xe9': 'e', '\\xea': 'e', '\\xeb': 'e',\n  '\\xcc': 'I',  '\\xcd': 'I', '\\xce': 'I', '\\xcf': 'I',\n  '\\xec': 'i',  '\\xed': 'i', '\\xee': 'i', '\\xef': 'i',\n  '\\xd1': 'N',  '\\xf1': 'n',\n  '\\xd2': 'O',  '\\xd3': 'O', '\\xd4': 'O', '\\xd5': 'O', '\\xd6': 'O', '\\xd8': 'O',\n  '\\xf2': 'o',  '\\xf3': 'o', '\\xf4': 'o', '\\xf5': 'o', '\\xf6': 'o', '\\xf8': 'o',\n  '\\xd9': 'U',  '\\xda': 'U', '\\xdb': 'U', '\\xdc': 'U',\n  '\\xf9': 'u',  '\\xfa': 'u', '\\xfb': 'u', '\\xfc': 'u',\n  '\\xdd': 'Y',  '\\xfd': 'y', '\\xff': 'y',\n  '\\xc6': 'Ae', '\\xe6': 'ae',\n  '\\xde': 'Th', '\\xfe': 'th',\n  '\\xdf': 'ss',\n  // Latin Extended-A block.\n  '\\u0100': 'A',  '\\u0102': 'A', '\\u0104': 'A',\n  '\\u0101': 'a',  '\\u0103': 'a', '\\u0105': 'a',\n  '\\u0106': 'C',  '\\u0108': 'C', '\\u010a': 'C', '\\u010c': 'C',\n  '\\u0107': 'c',  '\\u0109': 'c', '\\u010b': 'c', '\\u010d': 'c',\n  '\\u010e': 'D',  '\\u0110': 'D', '\\u010f': 'd', '\\u0111': 'd',\n  '\\u0112': 'E',  '\\u0114': 'E', '\\u0116': 'E', '\\u0118': 'E', '\\u011a': 'E',\n  '\\u0113': 'e',  '\\u0115': 'e', '\\u0117': 'e', '\\u0119': 'e', '\\u011b': 'e',\n  '\\u011c': 'G',  '\\u011e': 'G', '\\u0120': 'G', '\\u0122': 'G',\n  '\\u011d': 'g',  '\\u011f': 'g', '\\u0121': 'g', '\\u0123': 'g',\n  '\\u0124': 'H',  '\\u0126': 'H', '\\u0125': 'h', '\\u0127': 'h',\n  '\\u0128': 'I',  '\\u012a': 'I', '\\u012c': 'I', '\\u012e': 'I', '\\u0130': 'I',\n  '\\u0129': 'i',  '\\u012b': 'i', '\\u012d': 'i', '\\u012f': 'i', '\\u0131': 'i',\n  '\\u0134': 'J',  '\\u0135': 'j',\n  '\\u0136': 'K',  '\\u0137': 'k', '\\u0138': 'k',\n  '\\u0139': 'L',  '\\u013b': 'L', '\\u013d': 'L', '\\u013f': 'L', '\\u0141': 'L',\n  '\\u013a': 'l',  '\\u013c': 'l', '\\u013e': 'l', '\\u0140': 'l', '\\u0142': 'l',\n  '\\u0143': 'N',  '\\u0145': 'N', '\\u0147': 'N', '\\u014a': 'N',\n  '\\u0144': 'n',  '\\u0146': 'n', '\\u0148': 'n', '\\u014b': 'n',\n  '\\u014c': 'O',  '\\u014e': 'O', '\\u0150': 'O',\n  '\\u014d': 'o',  '\\u014f': 'o', '\\u0151': 'o',\n  '\\u0154': 'R',  '\\u0156': 'R', '\\u0158': 'R',\n  '\\u0155': 'r',  '\\u0157': 'r', '\\u0159': 'r',\n  '\\u015a': 'S',  '\\u015c': 'S', '\\u015e': 'S', '\\u0160': 'S',\n  '\\u015b': 's',  '\\u015d': 's', '\\u015f': 's', '\\u0161': 's',\n  '\\u0162': 'T',  '\\u0164': 'T', '\\u0166': 'T',\n  '\\u0163': 't',  '\\u0165': 't', '\\u0167': 't',\n  '\\u0168': 'U',  '\\u016a': 'U', '\\u016c': 'U', '\\u016e': 'U', '\\u0170': 'U', '\\u0172': 'U',\n  '\\u0169': 'u',  '\\u016b': 'u', '\\u016d': 'u', '\\u016f': 'u', '\\u0171': 'u', '\\u0173': 'u',\n  '\\u0174': 'W',  '\\u0175': 'w',\n  '\\u0176': 'Y',  '\\u0177': 'y', '\\u0178': 'Y',\n  '\\u0179': 'Z',  '\\u017b': 'Z', '\\u017d': 'Z',\n  '\\u017a': 'z',  '\\u017c': 'z', '\\u017e': 'z',\n  '\\u0132': 'IJ', '\\u0133': 'ij',\n  '\\u0152': 'Oe', '\\u0153': 'oe',\n  '\\u0149': \"'n\", '\\u017f': 'ss'\n};\n\n/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\n/**\n * A specialized version of `_.reduce` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @param {boolean} [initAccum] Specify using the first element of `array` as\n *  the initial value.\n * @returns {*} Returns the accumulated value.\n */\nfunction arrayReduce(array, iteratee, accumulator, initAccum) {\n  var index = -1,\n      length = array ? array.length : 0;\n\n  if (initAccum && length) {\n    accumulator = array[++index];\n  }\n  while (++index < length) {\n    accumulator = iteratee(accumulator, array[index], index, array);\n  }\n  return accumulator;\n}\n\n/**\n * Converts an ASCII `string` to an array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the converted array.\n */\nfunction asciiToArray(string) {\n  return string.split('');\n}\n\n/**\n * Splits an ASCII `string` into an array of its words.\n *\n * @private\n * @param {string} The string to inspect.\n * @returns {Array} Returns the words of `string`.\n */\nfunction asciiWords(string) {\n  return string.match(reAsciiWord) || [];\n}\n\n/**\n * The base implementation of `_.propertyOf` without support for deep paths.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Function} Returns the new accessor function.\n */\nfunction basePropertyOf(object) {\n  return function(key) {\n    return object == null ? undefined : object[key];\n  };\n}\n\n/**\n * Used by `_.deburr` to convert Latin-1 Supplement and Latin Extended-A\n * letters to basic Latin letters.\n *\n * @private\n * @param {string} letter The matched letter to deburr.\n * @returns {string} Returns the deburred letter.\n */\nvar deburrLetter = basePropertyOf(deburredLetters);\n\n/**\n * Checks if `string` contains Unicode symbols.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {boolean} Returns `true` if a symbol is found, else `false`.\n */\nfunction hasUnicode(string) {\n  return reHasUnicode.test(string);\n}\n\n/**\n * Checks if `string` contains a word composed of Unicode symbols.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {boolean} Returns `true` if a word is found, else `false`.\n */\nfunction hasUnicodeWord(string) {\n  return reHasUnicodeWord.test(string);\n}\n\n/**\n * Converts `string` to an array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the converted array.\n */\nfunction stringToArray(string) {\n  return hasUnicode(string)\n    ? unicodeToArray(string)\n    : asciiToArray(string);\n}\n\n/**\n * Converts a Unicode `string` to an array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the converted array.\n */\nfunction unicodeToArray(string) {\n  return string.match(reUnicode) || [];\n}\n\n/**\n * Splits a Unicode `string` into an array of its words.\n *\n * @private\n * @param {string} The string to inspect.\n * @returns {Array} Returns the words of `string`.\n */\nfunction unicodeWords(string) {\n  return string.match(reUnicodeWord) || [];\n}\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n    symbolToString = symbolProto ? symbolProto.toString : undefined;\n\n/**\n * The base implementation of `_.slice` without an iteratee call guard.\n *\n * @private\n * @param {Array} array The array to slice.\n * @param {number} [start=0] The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns the slice of `array`.\n */\nfunction baseSlice(array, start, end) {\n  var index = -1,\n      length = array.length;\n\n  if (start < 0) {\n    start = -start > length ? 0 : (length + start);\n  }\n  end = end > length ? length : end;\n  if (end < 0) {\n    end += length;\n  }\n  length = start > end ? 0 : ((end - start) >>> 0);\n  start >>>= 0;\n\n  var result = Array(length);\n  while (++index < length) {\n    result[index] = array[index + start];\n  }\n  return result;\n}\n\n/**\n * The base implementation of `_.toString` which doesn't convert nullish\n * values to empty strings.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n */\nfunction baseToString(value) {\n  // Exit early for strings to avoid a performance hit in some environments.\n  if (typeof value == 'string') {\n    return value;\n  }\n  if (isSymbol(value)) {\n    return symbolToString ? symbolToString.call(value) : '';\n  }\n  var result = (value + '');\n  return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\n/**\n * Casts `array` to a slice if it's needed.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {number} start The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns the cast slice.\n */\nfunction castSlice(array, start, end) {\n  var length = array.length;\n  end = end === undefined ? length : end;\n  return (!start && end >= length) ? array : baseSlice(array, start, end);\n}\n\n/**\n * Creates a function like `_.lowerFirst`.\n *\n * @private\n * @param {string} methodName The name of the `String` case method to use.\n * @returns {Function} Returns the new case function.\n */\nfunction createCaseFirst(methodName) {\n  return function(string) {\n    string = toString(string);\n\n    var strSymbols = hasUnicode(string)\n      ? stringToArray(string)\n      : undefined;\n\n    var chr = strSymbols\n      ? strSymbols[0]\n      : string.charAt(0);\n\n    var trailing = strSymbols\n      ? castSlice(strSymbols, 1).join('')\n      : string.slice(1);\n\n    return chr[methodName]() + trailing;\n  };\n}\n\n/**\n * Creates a function like `_.camelCase`.\n *\n * @private\n * @param {Function} callback The function to combine each word.\n * @returns {Function} Returns the new compounder function.\n */\nfunction createCompounder(callback) {\n  return function(string) {\n    return arrayReduce(words(deburr(string).replace(reApos, '')), callback, '');\n  };\n}\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n  return !!value && typeof value == 'object';\n}\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n  return typeof value == 'symbol' ||\n    (isObjectLike(value) && objectToString.call(value) == symbolTag);\n}\n\n/**\n * Converts `value` to a string. An empty string is returned for `null`\n * and `undefined` values. The sign of `-0` is preserved.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n * @example\n *\n * _.toString(null);\n * // => ''\n *\n * _.toString(-0);\n * // => '-0'\n *\n * _.toString([1, 2, 3]);\n * // => '1,2,3'\n */\nfunction toString(value) {\n  return value == null ? '' : baseToString(value);\n}\n\n/**\n * Converts `string` to [camel case](https://en.wikipedia.org/wiki/CamelCase).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the camel cased string.\n * @example\n *\n * _.camelCase('Foo Bar');\n * // => 'fooBar'\n *\n * _.camelCase('--foo-bar--');\n * // => 'fooBar'\n *\n * _.camelCase('__FOO_BAR__');\n * // => 'fooBar'\n */\nvar camelCase = createCompounder(function(result, word, index) {\n  word = word.toLowerCase();\n  return result + (index ? capitalize(word) : word);\n});\n\n/**\n * Converts the first character of `string` to upper case and the remaining\n * to lower case.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to capitalize.\n * @returns {string} Returns the capitalized string.\n * @example\n *\n * _.capitalize('FRED');\n * // => 'Fred'\n */\nfunction capitalize(string) {\n  return upperFirst(toString(string).toLowerCase());\n}\n\n/**\n * Deburrs `string` by converting\n * [Latin-1 Supplement](https://en.wikipedia.org/wiki/Latin-1_Supplement_(Unicode_block)#Character_table)\n * and [Latin Extended-A](https://en.wikipedia.org/wiki/Latin_Extended-A)\n * letters to basic Latin letters and removing\n * [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to deburr.\n * @returns {string} Returns the deburred string.\n * @example\n *\n * _.deburr('déjà vu');\n * // => 'deja vu'\n */\nfunction deburr(string) {\n  string = toString(string);\n  return string && string.replace(reLatin, deburrLetter).replace(reComboMark, '');\n}\n\n/**\n * Converts the first character of `string` to upper case.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.upperFirst('fred');\n * // => 'Fred'\n *\n * _.upperFirst('FRED');\n * // => 'FRED'\n */\nvar upperFirst = createCaseFirst('toUpperCase');\n\n/**\n * Splits `string` into an array of its words.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to inspect.\n * @param {RegExp|string} [pattern] The pattern to match words.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the words of `string`.\n * @example\n *\n * _.words('fred, barney, & pebbles');\n * // => ['fred', 'barney', 'pebbles']\n *\n * _.words('fred, barney, & pebbles', /[^, ]+/g);\n * // => ['fred', 'barney', '&', 'pebbles']\n */\nfunction words(string, pattern, guard) {\n  string = toString(string);\n  pattern = guard ? undefined : pattern;\n\n  if (pattern === undefined) {\n    return hasUnicodeWord(string) ? unicodeWords(string) : asciiWords(string);\n  }\n  return string.match(pattern) || [];\n}\n\nmodule.exports = camelCase;\n","/**\n * lodash (Custom Build) <https://lodash.com/>\n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright jQuery Foundation and other contributors <https://jquery.org/>\n * Released under MIT license <https://lodash.com/license>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** Used as the `TypeError` message for \"Functions\" methods. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/** Used as references for various `Number` constants. */\nvar NAN = 0 / 0;\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/** Used to match leading and trailing whitespace. */\nvar reTrim = /^\\s+|\\s+$/g;\n\n/** Used to detect bad signed hexadecimal string values. */\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n/** Used to detect binary string values. */\nvar reIsBinary = /^0b[01]+$/i;\n\n/** Used to detect octal string values. */\nvar reIsOctal = /^0o[0-7]+$/i;\n\n/** Built-in method references without a dependency on `root`. */\nvar freeParseInt = parseInt;\n\n/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objectToString = objectProto.toString;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max,\n    nativeMin = Math.min;\n\n/**\n * Gets the timestamp of the number of milliseconds that have elapsed since\n * the Unix epoch (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Date\n * @returns {number} Returns the timestamp.\n * @example\n *\n * _.defer(function(stamp) {\n *   console.log(_.now() - stamp);\n * }, _.now());\n * // => Logs the number of milliseconds it took for the deferred invocation.\n */\nvar now = function() {\n  return root.Date.now();\n};\n\n/**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed `func` invocations and a `flush` method to immediately invoke them.\n * Provide `options` to indicate whether `func` should be invoked on the\n * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n * with the last arguments provided to the debounced function. Subsequent\n * calls to the debounced function return the result of the last `func`\n * invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the debounced function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=false]\n *  Specify invoking on the leading edge of the timeout.\n * @param {number} [options.maxWait]\n *  The maximum time `func` is allowed to be delayed before it's invoked.\n * @param {boolean} [options.trailing=true]\n *  Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // Avoid costly calculations while the window size is in flux.\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n * jQuery(element).on('click', _.debounce(sendMail, 300, {\n *   'leading': true,\n *   'trailing': false\n * }));\n *\n * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', debounced);\n *\n * // Cancel the trailing debounced invocation.\n * jQuery(window).on('popstate', debounced.cancel);\n */\nfunction debounce(func, wait, options) {\n  var lastArgs,\n      lastThis,\n      maxWait,\n      result,\n      timerId,\n      lastCallTime,\n      lastInvokeTime = 0,\n      leading = false,\n      maxing = false,\n      trailing = true;\n\n  if (typeof func != 'function') {\n    throw new TypeError(FUNC_ERROR_TEXT);\n  }\n  wait = toNumber(wait) || 0;\n  if (isObject(options)) {\n    leading = !!options.leading;\n    maxing = 'maxWait' in options;\n    maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n    trailing = 'trailing' in options ? !!options.trailing : trailing;\n  }\n\n  function invokeFunc(time) {\n    var args = lastArgs,\n        thisArg = lastThis;\n\n    lastArgs = lastThis = undefined;\n    lastInvokeTime = time;\n    result = func.apply(thisArg, args);\n    return result;\n  }\n\n  function leadingEdge(time) {\n    // Reset any `maxWait` timer.\n    lastInvokeTime = time;\n    // Start the timer for the trailing edge.\n    timerId = setTimeout(timerExpired, wait);\n    // Invoke the leading edge.\n    return leading ? invokeFunc(time) : result;\n  }\n\n  function remainingWait(time) {\n    var timeSinceLastCall = time - lastCallTime,\n        timeSinceLastInvoke = time - lastInvokeTime,\n        result = wait - timeSinceLastCall;\n\n    return maxing ? nativeMin(result, maxWait - timeSinceLastInvoke) : result;\n  }\n\n  function shouldInvoke(time) {\n    var timeSinceLastCall = time - lastCallTime,\n        timeSinceLastInvoke = time - lastInvokeTime;\n\n    // Either this is the first call, activity has stopped and we're at the\n    // trailing edge, the system time has gone backwards and we're treating\n    // it as the trailing edge, or we've hit the `maxWait` limit.\n    return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n      (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n  }\n\n  function timerExpired() {\n    var time = now();\n    if (shouldInvoke(time)) {\n      return trailingEdge(time);\n    }\n    // Restart the timer.\n    timerId = setTimeout(timerExpired, remainingWait(time));\n  }\n\n  function trailingEdge(time) {\n    timerId = undefined;\n\n    // Only invoke if we have `lastArgs` which means `func` has been\n    // debounced at least once.\n    if (trailing && lastArgs) {\n      return invokeFunc(time);\n    }\n    lastArgs = lastThis = undefined;\n    return result;\n  }\n\n  function cancel() {\n    if (timerId !== undefined) {\n      clearTimeout(timerId);\n    }\n    lastInvokeTime = 0;\n    lastArgs = lastCallTime = lastThis = timerId = undefined;\n  }\n\n  function flush() {\n    return timerId === undefined ? result : trailingEdge(now());\n  }\n\n  function debounced() {\n    var time = now(),\n        isInvoking = shouldInvoke(time);\n\n    lastArgs = arguments;\n    lastThis = this;\n    lastCallTime = time;\n\n    if (isInvoking) {\n      if (timerId === undefined) {\n        return leadingEdge(lastCallTime);\n      }\n      if (maxing) {\n        // Handle invocations in a tight loop.\n        timerId = setTimeout(timerExpired, wait);\n        return invokeFunc(lastCallTime);\n      }\n    }\n    if (timerId === undefined) {\n      timerId = setTimeout(timerExpired, wait);\n    }\n    return result;\n  }\n  debounced.cancel = cancel;\n  debounced.flush = flush;\n  return debounced;\n}\n\n/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n  var type = typeof value;\n  return !!value && (type == 'object' || type == 'function');\n}\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n  return !!value && typeof value == 'object';\n}\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n  return typeof value == 'symbol' ||\n    (isObjectLike(value) && objectToString.call(value) == symbolTag);\n}\n\n/**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\nfunction toNumber(value) {\n  if (typeof value == 'number') {\n    return value;\n  }\n  if (isSymbol(value)) {\n    return NAN;\n  }\n  if (isObject(value)) {\n    var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n    value = isObject(other) ? (other + '') : other;\n  }\n  if (typeof value != 'string') {\n    return value === 0 ? value : +value;\n  }\n  value = value.replace(reTrim, '');\n  var isBinary = reIsBinary.test(value);\n  return (isBinary || reIsOctal.test(value))\n    ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n    : (reIsBadHex.test(value) ? NAN : +value);\n}\n\nmodule.exports = debounce;\n","/**\n * lodash (Custom Build) <https://lodash.com/>\n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright jQuery Foundation and other contributors <https://jquery.org/>\n * Released under MIT license <https://lodash.com/license>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/** Used to match words composed of alphanumeric characters. */\nvar reAsciiWord = /[^\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\x7f]+/g;\n\n/** Used to match Latin Unicode letters (excluding mathematical operators). */\nvar reLatin = /[\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\xff\\u0100-\\u017f]/g;\n\n/** Used to compose unicode character classes. */\nvar rsAstralRange = '\\\\ud800-\\\\udfff',\n    rsComboMarksRange = '\\\\u0300-\\\\u036f\\\\ufe20-\\\\ufe23',\n    rsComboSymbolsRange = '\\\\u20d0-\\\\u20f0',\n    rsDingbatRange = '\\\\u2700-\\\\u27bf',\n    rsLowerRange = 'a-z\\\\xdf-\\\\xf6\\\\xf8-\\\\xff',\n    rsMathOpRange = '\\\\xac\\\\xb1\\\\xd7\\\\xf7',\n    rsNonCharRange = '\\\\x00-\\\\x2f\\\\x3a-\\\\x40\\\\x5b-\\\\x60\\\\x7b-\\\\xbf',\n    rsPunctuationRange = '\\\\u2000-\\\\u206f',\n    rsSpaceRange = ' \\\\t\\\\x0b\\\\f\\\\xa0\\\\ufeff\\\\n\\\\r\\\\u2028\\\\u2029\\\\u1680\\\\u180e\\\\u2000\\\\u2001\\\\u2002\\\\u2003\\\\u2004\\\\u2005\\\\u2006\\\\u2007\\\\u2008\\\\u2009\\\\u200a\\\\u202f\\\\u205f\\\\u3000',\n    rsUpperRange = 'A-Z\\\\xc0-\\\\xd6\\\\xd8-\\\\xde',\n    rsVarRange = '\\\\ufe0e\\\\ufe0f',\n    rsBreakRange = rsMathOpRange + rsNonCharRange + rsPunctuationRange + rsSpaceRange;\n\n/** Used to compose unicode capture groups. */\nvar rsApos = \"['\\u2019]\",\n    rsBreak = '[' + rsBreakRange + ']',\n    rsCombo = '[' + rsComboMarksRange + rsComboSymbolsRange + ']',\n    rsDigits = '\\\\d+',\n    rsDingbat = '[' + rsDingbatRange + ']',\n    rsLower = '[' + rsLowerRange + ']',\n    rsMisc = '[^' + rsAstralRange + rsBreakRange + rsDigits + rsDingbatRange + rsLowerRange + rsUpperRange + ']',\n    rsFitz = '\\\\ud83c[\\\\udffb-\\\\udfff]',\n    rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')',\n    rsNonAstral = '[^' + rsAstralRange + ']',\n    rsRegional = '(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}',\n    rsSurrPair = '[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff]',\n    rsUpper = '[' + rsUpperRange + ']',\n    rsZWJ = '\\\\u200d';\n\n/** Used to compose unicode regexes. */\nvar rsLowerMisc = '(?:' + rsLower + '|' + rsMisc + ')',\n    rsUpperMisc = '(?:' + rsUpper + '|' + rsMisc + ')',\n    rsOptLowerContr = '(?:' + rsApos + '(?:d|ll|m|re|s|t|ve))?',\n    rsOptUpperContr = '(?:' + rsApos + '(?:D|LL|M|RE|S|T|VE))?',\n    reOptMod = rsModifier + '?',\n    rsOptVar = '[' + rsVarRange + ']?',\n    rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*',\n    rsSeq = rsOptVar + reOptMod + rsOptJoin,\n    rsEmoji = '(?:' + [rsDingbat, rsRegional, rsSurrPair].join('|') + ')' + rsSeq;\n\n/** Used to match apostrophes. */\nvar reApos = RegExp(rsApos, 'g');\n\n/**\n * Used to match [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks) and\n * [combining diacritical marks for symbols](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks_for_Symbols).\n */\nvar reComboMark = RegExp(rsCombo, 'g');\n\n/** Used to match complex or compound words. */\nvar reUnicodeWord = RegExp([\n  rsUpper + '?' + rsLower + '+' + rsOptLowerContr + '(?=' + [rsBreak, rsUpper, '$'].join('|') + ')',\n  rsUpperMisc + '+' + rsOptUpperContr + '(?=' + [rsBreak, rsUpper + rsLowerMisc, '$'].join('|') + ')',\n  rsUpper + '?' + rsLowerMisc + '+' + rsOptLowerContr,\n  rsUpper + '+' + rsOptUpperContr,\n  rsDigits,\n  rsEmoji\n].join('|'), 'g');\n\n/** Used to detect strings that need a more robust regexp to match words. */\nvar reHasUnicodeWord = /[a-z][A-Z]|[A-Z]{2,}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/;\n\n/** Used to map Latin Unicode letters to basic Latin letters. */\nvar deburredLetters = {\n  // Latin-1 Supplement block.\n  '\\xc0': 'A',  '\\xc1': 'A', '\\xc2': 'A', '\\xc3': 'A', '\\xc4': 'A', '\\xc5': 'A',\n  '\\xe0': 'a',  '\\xe1': 'a', '\\xe2': 'a', '\\xe3': 'a', '\\xe4': 'a', '\\xe5': 'a',\n  '\\xc7': 'C',  '\\xe7': 'c',\n  '\\xd0': 'D',  '\\xf0': 'd',\n  '\\xc8': 'E',  '\\xc9': 'E', '\\xca': 'E', '\\xcb': 'E',\n  '\\xe8': 'e',  '\\xe9': 'e', '\\xea': 'e', '\\xeb': 'e',\n  '\\xcc': 'I',  '\\xcd': 'I', '\\xce': 'I', '\\xcf': 'I',\n  '\\xec': 'i',  '\\xed': 'i', '\\xee': 'i', '\\xef': 'i',\n  '\\xd1': 'N',  '\\xf1': 'n',\n  '\\xd2': 'O',  '\\xd3': 'O', '\\xd4': 'O', '\\xd5': 'O', '\\xd6': 'O', '\\xd8': 'O',\n  '\\xf2': 'o',  '\\xf3': 'o', '\\xf4': 'o', '\\xf5': 'o', '\\xf6': 'o', '\\xf8': 'o',\n  '\\xd9': 'U',  '\\xda': 'U', '\\xdb': 'U', '\\xdc': 'U',\n  '\\xf9': 'u',  '\\xfa': 'u', '\\xfb': 'u', '\\xfc': 'u',\n  '\\xdd': 'Y',  '\\xfd': 'y', '\\xff': 'y',\n  '\\xc6': 'Ae', '\\xe6': 'ae',\n  '\\xde': 'Th', '\\xfe': 'th',\n  '\\xdf': 'ss',\n  // Latin Extended-A block.\n  '\\u0100': 'A',  '\\u0102': 'A', '\\u0104': 'A',\n  '\\u0101': 'a',  '\\u0103': 'a', '\\u0105': 'a',\n  '\\u0106': 'C',  '\\u0108': 'C', '\\u010a': 'C', '\\u010c': 'C',\n  '\\u0107': 'c',  '\\u0109': 'c', '\\u010b': 'c', '\\u010d': 'c',\n  '\\u010e': 'D',  '\\u0110': 'D', '\\u010f': 'd', '\\u0111': 'd',\n  '\\u0112': 'E',  '\\u0114': 'E', '\\u0116': 'E', '\\u0118': 'E', '\\u011a': 'E',\n  '\\u0113': 'e',  '\\u0115': 'e', '\\u0117': 'e', '\\u0119': 'e', '\\u011b': 'e',\n  '\\u011c': 'G',  '\\u011e': 'G', '\\u0120': 'G', '\\u0122': 'G',\n  '\\u011d': 'g',  '\\u011f': 'g', '\\u0121': 'g', '\\u0123': 'g',\n  '\\u0124': 'H',  '\\u0126': 'H', '\\u0125': 'h', '\\u0127': 'h',\n  '\\u0128': 'I',  '\\u012a': 'I', '\\u012c': 'I', '\\u012e': 'I', '\\u0130': 'I',\n  '\\u0129': 'i',  '\\u012b': 'i', '\\u012d': 'i', '\\u012f': 'i', '\\u0131': 'i',\n  '\\u0134': 'J',  '\\u0135': 'j',\n  '\\u0136': 'K',  '\\u0137': 'k', '\\u0138': 'k',\n  '\\u0139': 'L',  '\\u013b': 'L', '\\u013d': 'L', '\\u013f': 'L', '\\u0141': 'L',\n  '\\u013a': 'l',  '\\u013c': 'l', '\\u013e': 'l', '\\u0140': 'l', '\\u0142': 'l',\n  '\\u0143': 'N',  '\\u0145': 'N', '\\u0147': 'N', '\\u014a': 'N',\n  '\\u0144': 'n',  '\\u0146': 'n', '\\u0148': 'n', '\\u014b': 'n',\n  '\\u014c': 'O',  '\\u014e': 'O', '\\u0150': 'O',\n  '\\u014d': 'o',  '\\u014f': 'o', '\\u0151': 'o',\n  '\\u0154': 'R',  '\\u0156': 'R', '\\u0158': 'R',\n  '\\u0155': 'r',  '\\u0157': 'r', '\\u0159': 'r',\n  '\\u015a': 'S',  '\\u015c': 'S', '\\u015e': 'S', '\\u0160': 'S',\n  '\\u015b': 's',  '\\u015d': 's', '\\u015f': 's', '\\u0161': 's',\n  '\\u0162': 'T',  '\\u0164': 'T', '\\u0166': 'T',\n  '\\u0163': 't',  '\\u0165': 't', '\\u0167': 't',\n  '\\u0168': 'U',  '\\u016a': 'U', '\\u016c': 'U', '\\u016e': 'U', '\\u0170': 'U', '\\u0172': 'U',\n  '\\u0169': 'u',  '\\u016b': 'u', '\\u016d': 'u', '\\u016f': 'u', '\\u0171': 'u', '\\u0173': 'u',\n  '\\u0174': 'W',  '\\u0175': 'w',\n  '\\u0176': 'Y',  '\\u0177': 'y', '\\u0178': 'Y',\n  '\\u0179': 'Z',  '\\u017b': 'Z', '\\u017d': 'Z',\n  '\\u017a': 'z',  '\\u017c': 'z', '\\u017e': 'z',\n  '\\u0132': 'IJ', '\\u0133': 'ij',\n  '\\u0152': 'Oe', '\\u0153': 'oe',\n  '\\u0149': \"'n\", '\\u017f': 'ss'\n};\n\n/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\n/**\n * A specialized version of `_.reduce` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @param {boolean} [initAccum] Specify using the first element of `array` as\n *  the initial value.\n * @returns {*} Returns the accumulated value.\n */\nfunction arrayReduce(array, iteratee, accumulator, initAccum) {\n  var index = -1,\n      length = array ? array.length : 0;\n\n  if (initAccum && length) {\n    accumulator = array[++index];\n  }\n  while (++index < length) {\n    accumulator = iteratee(accumulator, array[index], index, array);\n  }\n  return accumulator;\n}\n\n/**\n * Splits an ASCII `string` into an array of its words.\n *\n * @private\n * @param {string} The string to inspect.\n * @returns {Array} Returns the words of `string`.\n */\nfunction asciiWords(string) {\n  return string.match(reAsciiWord) || [];\n}\n\n/**\n * The base implementation of `_.propertyOf` without support for deep paths.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Function} Returns the new accessor function.\n */\nfunction basePropertyOf(object) {\n  return function(key) {\n    return object == null ? undefined : object[key];\n  };\n}\n\n/**\n * Used by `_.deburr` to convert Latin-1 Supplement and Latin Extended-A\n * letters to basic Latin letters.\n *\n * @private\n * @param {string} letter The matched letter to deburr.\n * @returns {string} Returns the deburred letter.\n */\nvar deburrLetter = basePropertyOf(deburredLetters);\n\n/**\n * Checks if `string` contains a word composed of Unicode symbols.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {boolean} Returns `true` if a word is found, else `false`.\n */\nfunction hasUnicodeWord(string) {\n  return reHasUnicodeWord.test(string);\n}\n\n/**\n * Splits a Unicode `string` into an array of its words.\n *\n * @private\n * @param {string} The string to inspect.\n * @returns {Array} Returns the words of `string`.\n */\nfunction unicodeWords(string) {\n  return string.match(reUnicodeWord) || [];\n}\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n    symbolToString = symbolProto ? symbolProto.toString : undefined;\n\n/**\n * The base implementation of `_.toString` which doesn't convert nullish\n * values to empty strings.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n */\nfunction baseToString(value) {\n  // Exit early for strings to avoid a performance hit in some environments.\n  if (typeof value == 'string') {\n    return value;\n  }\n  if (isSymbol(value)) {\n    return symbolToString ? symbolToString.call(value) : '';\n  }\n  var result = (value + '');\n  return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\n/**\n * Creates a function like `_.camelCase`.\n *\n * @private\n * @param {Function} callback The function to combine each word.\n * @returns {Function} Returns the new compounder function.\n */\nfunction createCompounder(callback) {\n  return function(string) {\n    return arrayReduce(words(deburr(string).replace(reApos, '')), callback, '');\n  };\n}\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n  return !!value && typeof value == 'object';\n}\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n  return typeof value == 'symbol' ||\n    (isObjectLike(value) && objectToString.call(value) == symbolTag);\n}\n\n/**\n * Converts `value` to a string. An empty string is returned for `null`\n * and `undefined` values. The sign of `-0` is preserved.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n * @example\n *\n * _.toString(null);\n * // => ''\n *\n * _.toString(-0);\n * // => '-0'\n *\n * _.toString([1, 2, 3]);\n * // => '1,2,3'\n */\nfunction toString(value) {\n  return value == null ? '' : baseToString(value);\n}\n\n/**\n * Deburrs `string` by converting\n * [Latin-1 Supplement](https://en.wikipedia.org/wiki/Latin-1_Supplement_(Unicode_block)#Character_table)\n * and [Latin Extended-A](https://en.wikipedia.org/wiki/Latin_Extended-A)\n * letters to basic Latin letters and removing\n * [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to deburr.\n * @returns {string} Returns the deburred string.\n * @example\n *\n * _.deburr('déjà vu');\n * // => 'deja vu'\n */\nfunction deburr(string) {\n  string = toString(string);\n  return string && string.replace(reLatin, deburrLetter).replace(reComboMark, '');\n}\n\n/**\n * Converts `string`, as space separated words, to lower case.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the lower cased string.\n * @example\n *\n * _.lowerCase('--Foo-Bar--');\n * // => 'foo bar'\n *\n * _.lowerCase('fooBar');\n * // => 'foo bar'\n *\n * _.lowerCase('__FOO_BAR__');\n * // => 'foo bar'\n */\nvar lowerCase = createCompounder(function(result, word, index) {\n  return result + (index ? ' ' : '') + word.toLowerCase();\n});\n\n/**\n * Splits `string` into an array of its words.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to inspect.\n * @param {RegExp|string} [pattern] The pattern to match words.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the words of `string`.\n * @example\n *\n * _.words('fred, barney, & pebbles');\n * // => ['fred', 'barney', 'pebbles']\n *\n * _.words('fred, barney, & pebbles', /[^, ]+/g);\n * // => ['fred', 'barney', '&', 'pebbles']\n */\nfunction words(string, pattern, guard) {\n  string = toString(string);\n  pattern = guard ? undefined : pattern;\n\n  if (pattern === undefined) {\n    return hasUnicodeWord(string) ? unicodeWords(string) : asciiWords(string);\n  }\n  return string.match(pattern) || [];\n}\n\nmodule.exports = lowerCase;\n","/**\n * lodash (Custom Build) <https://lodash.com/>\n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright jQuery Foundation and other contributors <https://jquery.org/>\n * Released under MIT license <https://lodash.com/license>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/** Used to match words composed of alphanumeric characters. */\nvar reAsciiWord = /[^\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\x7f]+/g;\n\n/** Used to match Latin Unicode letters (excluding mathematical operators). */\nvar reLatin = /[\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\xff\\u0100-\\u017f]/g;\n\n/** Used to compose unicode character classes. */\nvar rsAstralRange = '\\\\ud800-\\\\udfff',\n    rsComboMarksRange = '\\\\u0300-\\\\u036f\\\\ufe20-\\\\ufe23',\n    rsComboSymbolsRange = '\\\\u20d0-\\\\u20f0',\n    rsDingbatRange = '\\\\u2700-\\\\u27bf',\n    rsLowerRange = 'a-z\\\\xdf-\\\\xf6\\\\xf8-\\\\xff',\n    rsMathOpRange = '\\\\xac\\\\xb1\\\\xd7\\\\xf7',\n    rsNonCharRange = '\\\\x00-\\\\x2f\\\\x3a-\\\\x40\\\\x5b-\\\\x60\\\\x7b-\\\\xbf',\n    rsPunctuationRange = '\\\\u2000-\\\\u206f',\n    rsSpaceRange = ' \\\\t\\\\x0b\\\\f\\\\xa0\\\\ufeff\\\\n\\\\r\\\\u2028\\\\u2029\\\\u1680\\\\u180e\\\\u2000\\\\u2001\\\\u2002\\\\u2003\\\\u2004\\\\u2005\\\\u2006\\\\u2007\\\\u2008\\\\u2009\\\\u200a\\\\u202f\\\\u205f\\\\u3000',\n    rsUpperRange = 'A-Z\\\\xc0-\\\\xd6\\\\xd8-\\\\xde',\n    rsVarRange = '\\\\ufe0e\\\\ufe0f',\n    rsBreakRange = rsMathOpRange + rsNonCharRange + rsPunctuationRange + rsSpaceRange;\n\n/** Used to compose unicode capture groups. */\nvar rsApos = \"['\\u2019]\",\n    rsBreak = '[' + rsBreakRange + ']',\n    rsCombo = '[' + rsComboMarksRange + rsComboSymbolsRange + ']',\n    rsDigits = '\\\\d+',\n    rsDingbat = '[' + rsDingbatRange + ']',\n    rsLower = '[' + rsLowerRange + ']',\n    rsMisc = '[^' + rsAstralRange + rsBreakRange + rsDigits + rsDingbatRange + rsLowerRange + rsUpperRange + ']',\n    rsFitz = '\\\\ud83c[\\\\udffb-\\\\udfff]',\n    rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')',\n    rsNonAstral = '[^' + rsAstralRange + ']',\n    rsRegional = '(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}',\n    rsSurrPair = '[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff]',\n    rsUpper = '[' + rsUpperRange + ']',\n    rsZWJ = '\\\\u200d';\n\n/** Used to compose unicode regexes. */\nvar rsLowerMisc = '(?:' + rsLower + '|' + rsMisc + ')',\n    rsUpperMisc = '(?:' + rsUpper + '|' + rsMisc + ')',\n    rsOptLowerContr = '(?:' + rsApos + '(?:d|ll|m|re|s|t|ve))?',\n    rsOptUpperContr = '(?:' + rsApos + '(?:D|LL|M|RE|S|T|VE))?',\n    reOptMod = rsModifier + '?',\n    rsOptVar = '[' + rsVarRange + ']?',\n    rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*',\n    rsSeq = rsOptVar + reOptMod + rsOptJoin,\n    rsEmoji = '(?:' + [rsDingbat, rsRegional, rsSurrPair].join('|') + ')' + rsSeq;\n\n/** Used to match apostrophes. */\nvar reApos = RegExp(rsApos, 'g');\n\n/**\n * Used to match [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks) and\n * [combining diacritical marks for symbols](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks_for_Symbols).\n */\nvar reComboMark = RegExp(rsCombo, 'g');\n\n/** Used to match complex or compound words. */\nvar reUnicodeWord = RegExp([\n  rsUpper + '?' + rsLower + '+' + rsOptLowerContr + '(?=' + [rsBreak, rsUpper, '$'].join('|') + ')',\n  rsUpperMisc + '+' + rsOptUpperContr + '(?=' + [rsBreak, rsUpper + rsLowerMisc, '$'].join('|') + ')',\n  rsUpper + '?' + rsLowerMisc + '+' + rsOptLowerContr,\n  rsUpper + '+' + rsOptUpperContr,\n  rsDigits,\n  rsEmoji\n].join('|'), 'g');\n\n/** Used to detect strings that need a more robust regexp to match words. */\nvar reHasUnicodeWord = /[a-z][A-Z]|[A-Z]{2,}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/;\n\n/** Used to map Latin Unicode letters to basic Latin letters. */\nvar deburredLetters = {\n  // Latin-1 Supplement block.\n  '\\xc0': 'A',  '\\xc1': 'A', '\\xc2': 'A', '\\xc3': 'A', '\\xc4': 'A', '\\xc5': 'A',\n  '\\xe0': 'a',  '\\xe1': 'a', '\\xe2': 'a', '\\xe3': 'a', '\\xe4': 'a', '\\xe5': 'a',\n  '\\xc7': 'C',  '\\xe7': 'c',\n  '\\xd0': 'D',  '\\xf0': 'd',\n  '\\xc8': 'E',  '\\xc9': 'E', '\\xca': 'E', '\\xcb': 'E',\n  '\\xe8': 'e',  '\\xe9': 'e', '\\xea': 'e', '\\xeb': 'e',\n  '\\xcc': 'I',  '\\xcd': 'I', '\\xce': 'I', '\\xcf': 'I',\n  '\\xec': 'i',  '\\xed': 'i', '\\xee': 'i', '\\xef': 'i',\n  '\\xd1': 'N',  '\\xf1': 'n',\n  '\\xd2': 'O',  '\\xd3': 'O', '\\xd4': 'O', '\\xd5': 'O', '\\xd6': 'O', '\\xd8': 'O',\n  '\\xf2': 'o',  '\\xf3': 'o', '\\xf4': 'o', '\\xf5': 'o', '\\xf6': 'o', '\\xf8': 'o',\n  '\\xd9': 'U',  '\\xda': 'U', '\\xdb': 'U', '\\xdc': 'U',\n  '\\xf9': 'u',  '\\xfa': 'u', '\\xfb': 'u', '\\xfc': 'u',\n  '\\xdd': 'Y',  '\\xfd': 'y', '\\xff': 'y',\n  '\\xc6': 'Ae', '\\xe6': 'ae',\n  '\\xde': 'Th', '\\xfe': 'th',\n  '\\xdf': 'ss',\n  // Latin Extended-A block.\n  '\\u0100': 'A',  '\\u0102': 'A', '\\u0104': 'A',\n  '\\u0101': 'a',  '\\u0103': 'a', '\\u0105': 'a',\n  '\\u0106': 'C',  '\\u0108': 'C', '\\u010a': 'C', '\\u010c': 'C',\n  '\\u0107': 'c',  '\\u0109': 'c', '\\u010b': 'c', '\\u010d': 'c',\n  '\\u010e': 'D',  '\\u0110': 'D', '\\u010f': 'd', '\\u0111': 'd',\n  '\\u0112': 'E',  '\\u0114': 'E', '\\u0116': 'E', '\\u0118': 'E', '\\u011a': 'E',\n  '\\u0113': 'e',  '\\u0115': 'e', '\\u0117': 'e', '\\u0119': 'e', '\\u011b': 'e',\n  '\\u011c': 'G',  '\\u011e': 'G', '\\u0120': 'G', '\\u0122': 'G',\n  '\\u011d': 'g',  '\\u011f': 'g', '\\u0121': 'g', '\\u0123': 'g',\n  '\\u0124': 'H',  '\\u0126': 'H', '\\u0125': 'h', '\\u0127': 'h',\n  '\\u0128': 'I',  '\\u012a': 'I', '\\u012c': 'I', '\\u012e': 'I', '\\u0130': 'I',\n  '\\u0129': 'i',  '\\u012b': 'i', '\\u012d': 'i', '\\u012f': 'i', '\\u0131': 'i',\n  '\\u0134': 'J',  '\\u0135': 'j',\n  '\\u0136': 'K',  '\\u0137': 'k', '\\u0138': 'k',\n  '\\u0139': 'L',  '\\u013b': 'L', '\\u013d': 'L', '\\u013f': 'L', '\\u0141': 'L',\n  '\\u013a': 'l',  '\\u013c': 'l', '\\u013e': 'l', '\\u0140': 'l', '\\u0142': 'l',\n  '\\u0143': 'N',  '\\u0145': 'N', '\\u0147': 'N', '\\u014a': 'N',\n  '\\u0144': 'n',  '\\u0146': 'n', '\\u0148': 'n', '\\u014b': 'n',\n  '\\u014c': 'O',  '\\u014e': 'O', '\\u0150': 'O',\n  '\\u014d': 'o',  '\\u014f': 'o', '\\u0151': 'o',\n  '\\u0154': 'R',  '\\u0156': 'R', '\\u0158': 'R',\n  '\\u0155': 'r',  '\\u0157': 'r', '\\u0159': 'r',\n  '\\u015a': 'S',  '\\u015c': 'S', '\\u015e': 'S', '\\u0160': 'S',\n  '\\u015b': 's',  '\\u015d': 's', '\\u015f': 's', '\\u0161': 's',\n  '\\u0162': 'T',  '\\u0164': 'T', '\\u0166': 'T',\n  '\\u0163': 't',  '\\u0165': 't', '\\u0167': 't',\n  '\\u0168': 'U',  '\\u016a': 'U', '\\u016c': 'U', '\\u016e': 'U', '\\u0170': 'U', '\\u0172': 'U',\n  '\\u0169': 'u',  '\\u016b': 'u', '\\u016d': 'u', '\\u016f': 'u', '\\u0171': 'u', '\\u0173': 'u',\n  '\\u0174': 'W',  '\\u0175': 'w',\n  '\\u0176': 'Y',  '\\u0177': 'y', '\\u0178': 'Y',\n  '\\u0179': 'Z',  '\\u017b': 'Z', '\\u017d': 'Z',\n  '\\u017a': 'z',  '\\u017c': 'z', '\\u017e': 'z',\n  '\\u0132': 'IJ', '\\u0133': 'ij',\n  '\\u0152': 'Oe', '\\u0153': 'oe',\n  '\\u0149': \"'n\", '\\u017f': 'ss'\n};\n\n/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\n/**\n * A specialized version of `_.reduce` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @param {boolean} [initAccum] Specify using the first element of `array` as\n *  the initial value.\n * @returns {*} Returns the accumulated value.\n */\nfunction arrayReduce(array, iteratee, accumulator, initAccum) {\n  var index = -1,\n      length = array ? array.length : 0;\n\n  if (initAccum && length) {\n    accumulator = array[++index];\n  }\n  while (++index < length) {\n    accumulator = iteratee(accumulator, array[index], index, array);\n  }\n  return accumulator;\n}\n\n/**\n * Splits an ASCII `string` into an array of its words.\n *\n * @private\n * @param {string} The string to inspect.\n * @returns {Array} Returns the words of `string`.\n */\nfunction asciiWords(string) {\n  return string.match(reAsciiWord) || [];\n}\n\n/**\n * The base implementation of `_.propertyOf` without support for deep paths.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Function} Returns the new accessor function.\n */\nfunction basePropertyOf(object) {\n  return function(key) {\n    return object == null ? undefined : object[key];\n  };\n}\n\n/**\n * Used by `_.deburr` to convert Latin-1 Supplement and Latin Extended-A\n * letters to basic Latin letters.\n *\n * @private\n * @param {string} letter The matched letter to deburr.\n * @returns {string} Returns the deburred letter.\n */\nvar deburrLetter = basePropertyOf(deburredLetters);\n\n/**\n * Checks if `string` contains a word composed of Unicode symbols.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {boolean} Returns `true` if a word is found, else `false`.\n */\nfunction hasUnicodeWord(string) {\n  return reHasUnicodeWord.test(string);\n}\n\n/**\n * Splits a Unicode `string` into an array of its words.\n *\n * @private\n * @param {string} The string to inspect.\n * @returns {Array} Returns the words of `string`.\n */\nfunction unicodeWords(string) {\n  return string.match(reUnicodeWord) || [];\n}\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n    symbolToString = symbolProto ? symbolProto.toString : undefined;\n\n/**\n * The base implementation of `_.toString` which doesn't convert nullish\n * values to empty strings.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n */\nfunction baseToString(value) {\n  // Exit early for strings to avoid a performance hit in some environments.\n  if (typeof value == 'string') {\n    return value;\n  }\n  if (isSymbol(value)) {\n    return symbolToString ? symbolToString.call(value) : '';\n  }\n  var result = (value + '');\n  return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\n/**\n * Creates a function like `_.camelCase`.\n *\n * @private\n * @param {Function} callback The function to combine each word.\n * @returns {Function} Returns the new compounder function.\n */\nfunction createCompounder(callback) {\n  return function(string) {\n    return arrayReduce(words(deburr(string).replace(reApos, '')), callback, '');\n  };\n}\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n  return !!value && typeof value == 'object';\n}\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n  return typeof value == 'symbol' ||\n    (isObjectLike(value) && objectToString.call(value) == symbolTag);\n}\n\n/**\n * Converts `value` to a string. An empty string is returned for `null`\n * and `undefined` values. The sign of `-0` is preserved.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n * @example\n *\n * _.toString(null);\n * // => ''\n *\n * _.toString(-0);\n * // => '-0'\n *\n * _.toString([1, 2, 3]);\n * // => '1,2,3'\n */\nfunction toString(value) {\n  return value == null ? '' : baseToString(value);\n}\n\n/**\n * Deburrs `string` by converting\n * [Latin-1 Supplement](https://en.wikipedia.org/wiki/Latin-1_Supplement_(Unicode_block)#Character_table)\n * and [Latin Extended-A](https://en.wikipedia.org/wiki/Latin_Extended-A)\n * letters to basic Latin letters and removing\n * [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to deburr.\n * @returns {string} Returns the deburred string.\n * @example\n *\n * _.deburr('déjà vu');\n * // => 'deja vu'\n */\nfunction deburr(string) {\n  string = toString(string);\n  return string && string.replace(reLatin, deburrLetter).replace(reComboMark, '');\n}\n\n/**\n * Converts `string` to\n * [snake case](https://en.wikipedia.org/wiki/Snake_case).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the snake cased string.\n * @example\n *\n * _.snakeCase('Foo Bar');\n * // => 'foo_bar'\n *\n * _.snakeCase('fooBar');\n * // => 'foo_bar'\n *\n * _.snakeCase('--FOO-BAR--');\n * // => 'foo_bar'\n */\nvar snakeCase = createCompounder(function(result, word, index) {\n  return result + (index ? '_' : '') + word.toLowerCase();\n});\n\n/**\n * Splits `string` into an array of its words.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to inspect.\n * @param {RegExp|string} [pattern] The pattern to match words.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the words of `string`.\n * @example\n *\n * _.words('fred, barney, & pebbles');\n * // => ['fred', 'barney', 'pebbles']\n *\n * _.words('fred, barney, & pebbles', /[^, ]+/g);\n * // => ['fred', 'barney', '&', 'pebbles']\n */\nfunction words(string, pattern, guard) {\n  string = toString(string);\n  pattern = guard ? undefined : pattern;\n\n  if (pattern === undefined) {\n    return hasUnicodeWord(string) ? unicodeWords(string) : asciiWords(string);\n  }\n  return string.match(pattern) || [];\n}\n\nmodule.exports = snakeCase;\n","var getNative = require('./_getNative'),\n    root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar DataView = getNative(root, 'DataView');\n\nmodule.exports = DataView;\n","var hashClear = require('./_hashClear'),\n    hashDelete = require('./_hashDelete'),\n    hashGet = require('./_hashGet'),\n    hashHas = require('./_hashHas'),\n    hashSet = require('./_hashSet');\n\n/**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Hash(entries) {\n  var index = -1,\n      length = entries == null ? 0 : entries.length;\n\n  this.clear();\n  while (++index < length) {\n    var entry = entries[index];\n    this.set(entry[0], entry[1]);\n  }\n}\n\n// Add methods to `Hash`.\nHash.prototype.clear = hashClear;\nHash.prototype['delete'] = hashDelete;\nHash.prototype.get = hashGet;\nHash.prototype.has = hashHas;\nHash.prototype.set = hashSet;\n\nmodule.exports = Hash;\n","var listCacheClear = require('./_listCacheClear'),\n    listCacheDelete = require('./_listCacheDelete'),\n    listCacheGet = require('./_listCacheGet'),\n    listCacheHas = require('./_listCacheHas'),\n    listCacheSet = require('./_listCacheSet');\n\n/**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction ListCache(entries) {\n  var index = -1,\n      length = entries == null ? 0 : entries.length;\n\n  this.clear();\n  while (++index < length) {\n    var entry = entries[index];\n    this.set(entry[0], entry[1]);\n  }\n}\n\n// Add methods to `ListCache`.\nListCache.prototype.clear = listCacheClear;\nListCache.prototype['delete'] = listCacheDelete;\nListCache.prototype.get = listCacheGet;\nListCache.prototype.has = listCacheHas;\nListCache.prototype.set = listCacheSet;\n\nmodule.exports = ListCache;\n","var getNative = require('./_getNative'),\n    root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar Map = getNative(root, 'Map');\n\nmodule.exports = Map;\n","var mapCacheClear = require('./_mapCacheClear'),\n    mapCacheDelete = require('./_mapCacheDelete'),\n    mapCacheGet = require('./_mapCacheGet'),\n    mapCacheHas = require('./_mapCacheHas'),\n    mapCacheSet = require('./_mapCacheSet');\n\n/**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction MapCache(entries) {\n  var index = -1,\n      length = entries == null ? 0 : entries.length;\n\n  this.clear();\n  while (++index < length) {\n    var entry = entries[index];\n    this.set(entry[0], entry[1]);\n  }\n}\n\n// Add methods to `MapCache`.\nMapCache.prototype.clear = mapCacheClear;\nMapCache.prototype['delete'] = mapCacheDelete;\nMapCache.prototype.get = mapCacheGet;\nMapCache.prototype.has = mapCacheHas;\nMapCache.prototype.set = mapCacheSet;\n\nmodule.exports = MapCache;\n","var getNative = require('./_getNative'),\n    root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar Promise = getNative(root, 'Promise');\n\nmodule.exports = Promise;\n","var getNative = require('./_getNative'),\n    root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar Set = getNative(root, 'Set');\n\nmodule.exports = Set;\n","var ListCache = require('./_ListCache'),\n    stackClear = require('./_stackClear'),\n    stackDelete = require('./_stackDelete'),\n    stackGet = require('./_stackGet'),\n    stackHas = require('./_stackHas'),\n    stackSet = require('./_stackSet');\n\n/**\n * Creates a stack cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Stack(entries) {\n  var data = this.__data__ = new ListCache(entries);\n  this.size = data.size;\n}\n\n// Add methods to `Stack`.\nStack.prototype.clear = stackClear;\nStack.prototype['delete'] = stackDelete;\nStack.prototype.get = stackGet;\nStack.prototype.has = stackHas;\nStack.prototype.set = stackSet;\n\nmodule.exports = Stack;\n","var root = require('./_root');\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\nmodule.exports = Symbol;\n","var root = require('./_root');\n\n/** Built-in value references. */\nvar Uint8Array = root.Uint8Array;\n\nmodule.exports = Uint8Array;\n","var getNative = require('./_getNative'),\n    root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar WeakMap = getNative(root, 'WeakMap');\n\nmodule.exports = WeakMap;\n","/**\n * A specialized version of `_.forEach` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns `array`.\n */\nfunction arrayEach(array, iteratee) {\n  var index = -1,\n      length = array == null ? 0 : array.length;\n\n  while (++index < length) {\n    if (iteratee(array[index], index, array) === false) {\n      break;\n    }\n  }\n  return array;\n}\n\nmodule.exports = arrayEach;\n","/**\n * A specialized version of `_.filter` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */\nfunction arrayFilter(array, predicate) {\n  var index = -1,\n      length = array == null ? 0 : array.length,\n      resIndex = 0,\n      result = [];\n\n  while (++index < length) {\n    var value = array[index];\n    if (predicate(value, index, array)) {\n      result[resIndex++] = value;\n    }\n  }\n  return result;\n}\n\nmodule.exports = arrayFilter;\n","var baseTimes = require('./_baseTimes'),\n    isArguments = require('./isArguments'),\n    isArray = require('./isArray'),\n    isBuffer = require('./isBuffer'),\n    isIndex = require('./_isIndex'),\n    isTypedArray = require('./isTypedArray');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Creates an array of the enumerable property names of the array-like `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @param {boolean} inherited Specify returning inherited property names.\n * @returns {Array} Returns the array of property names.\n */\nfunction arrayLikeKeys(value, inherited) {\n  var isArr = isArray(value),\n      isArg = !isArr && isArguments(value),\n      isBuff = !isArr && !isArg && isBuffer(value),\n      isType = !isArr && !isArg && !isBuff && isTypedArray(value),\n      skipIndexes = isArr || isArg || isBuff || isType,\n      result = skipIndexes ? baseTimes(value.length, String) : [],\n      length = result.length;\n\n  for (var key in value) {\n    if ((inherited || hasOwnProperty.call(value, key)) &&\n        !(skipIndexes && (\n           // Safari 9 has enumerable `arguments.length` in strict mode.\n           key == 'length' ||\n           // Node.js 0.10 has enumerable non-index properties on buffers.\n           (isBuff && (key == 'offset' || key == 'parent')) ||\n           // PhantomJS 2 has enumerable non-index properties on typed arrays.\n           (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||\n           // Skip index properties.\n           isIndex(key, length)\n        ))) {\n      result.push(key);\n    }\n  }\n  return result;\n}\n\nmodule.exports = arrayLikeKeys;\n","/**\n * Appends the elements of `values` to `array`.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {Array} values The values to append.\n * @returns {Array} Returns `array`.\n */\nfunction arrayPush(array, values) {\n  var index = -1,\n      length = values.length,\n      offset = array.length;\n\n  while (++index < length) {\n    array[offset + index] = values[index];\n  }\n  return array;\n}\n\nmodule.exports = arrayPush;\n","var baseAssignValue = require('./_baseAssignValue'),\n    eq = require('./eq');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Assigns `value` to `key` of `object` if the existing value is not equivalent\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction assignValue(object, key, value) {\n  var objValue = object[key];\n  if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||\n      (value === undefined && !(key in object))) {\n    baseAssignValue(object, key, value);\n  }\n}\n\nmodule.exports = assignValue;\n","var eq = require('./eq');\n\n/**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction assocIndexOf(array, key) {\n  var length = array.length;\n  while (length--) {\n    if (eq(array[length][0], key)) {\n      return length;\n    }\n  }\n  return -1;\n}\n\nmodule.exports = assocIndexOf;\n","var copyObject = require('./_copyObject'),\n    keys = require('./keys');\n\n/**\n * The base implementation of `_.assign` without support for multiple sources\n * or `customizer` functions.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @returns {Object} Returns `object`.\n */\nfunction baseAssign(object, source) {\n  return object && copyObject(source, keys(source), object);\n}\n\nmodule.exports = baseAssign;\n","var copyObject = require('./_copyObject'),\n    keysIn = require('./keysIn');\n\n/**\n * The base implementation of `_.assignIn` without support for multiple sources\n * or `customizer` functions.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @returns {Object} Returns `object`.\n */\nfunction baseAssignIn(object, source) {\n  return object && copyObject(source, keysIn(source), object);\n}\n\nmodule.exports = baseAssignIn;\n","var defineProperty = require('./_defineProperty');\n\n/**\n * The base implementation of `assignValue` and `assignMergeValue` without\n * value checks.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction baseAssignValue(object, key, value) {\n  if (key == '__proto__' && defineProperty) {\n    defineProperty(object, key, {\n      'configurable': true,\n      'enumerable': true,\n      'value': value,\n      'writable': true\n    });\n  } else {\n    object[key] = value;\n  }\n}\n\nmodule.exports = baseAssignValue;\n","var Stack = require('./_Stack'),\n    arrayEach = require('./_arrayEach'),\n    assignValue = require('./_assignValue'),\n    baseAssign = require('./_baseAssign'),\n    baseAssignIn = require('./_baseAssignIn'),\n    cloneBuffer = require('./_cloneBuffer'),\n    copyArray = require('./_copyArray'),\n    copySymbols = require('./_copySymbols'),\n    copySymbolsIn = require('./_copySymbolsIn'),\n    getAllKeys = require('./_getAllKeys'),\n    getAllKeysIn = require('./_getAllKeysIn'),\n    getTag = require('./_getTag'),\n    initCloneArray = require('./_initCloneArray'),\n    initCloneByTag = require('./_initCloneByTag'),\n    initCloneObject = require('./_initCloneObject'),\n    isArray = require('./isArray'),\n    isBuffer = require('./isBuffer'),\n    isMap = require('./isMap'),\n    isObject = require('./isObject'),\n    isSet = require('./isSet'),\n    keys = require('./keys'),\n    keysIn = require('./keysIn');\n\n/** Used to compose bitmasks for cloning. */\nvar CLONE_DEEP_FLAG = 1,\n    CLONE_FLAT_FLAG = 2,\n    CLONE_SYMBOLS_FLAG = 4;\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n    arrayTag = '[object Array]',\n    boolTag = '[object Boolean]',\n    dateTag = '[object Date]',\n    errorTag = '[object Error]',\n    funcTag = '[object Function]',\n    genTag = '[object GeneratorFunction]',\n    mapTag = '[object Map]',\n    numberTag = '[object Number]',\n    objectTag = '[object Object]',\n    regexpTag = '[object RegExp]',\n    setTag = '[object Set]',\n    stringTag = '[object String]',\n    symbolTag = '[object Symbol]',\n    weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n    dataViewTag = '[object DataView]',\n    float32Tag = '[object Float32Array]',\n    float64Tag = '[object Float64Array]',\n    int8Tag = '[object Int8Array]',\n    int16Tag = '[object Int16Array]',\n    int32Tag = '[object Int32Array]',\n    uint8Tag = '[object Uint8Array]',\n    uint8ClampedTag = '[object Uint8ClampedArray]',\n    uint16Tag = '[object Uint16Array]',\n    uint32Tag = '[object Uint32Array]';\n\n/** Used to identify `toStringTag` values supported by `_.clone`. */\nvar cloneableTags = {};\ncloneableTags[argsTag] = cloneableTags[arrayTag] =\ncloneableTags[arrayBufferTag] = cloneableTags[dataViewTag] =\ncloneableTags[boolTag] = cloneableTags[dateTag] =\ncloneableTags[float32Tag] = cloneableTags[float64Tag] =\ncloneableTags[int8Tag] = cloneableTags[int16Tag] =\ncloneableTags[int32Tag] = cloneableTags[mapTag] =\ncloneableTags[numberTag] = cloneableTags[objectTag] =\ncloneableTags[regexpTag] = cloneableTags[setTag] =\ncloneableTags[stringTag] = cloneableTags[symbolTag] =\ncloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] =\ncloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true;\ncloneableTags[errorTag] = cloneableTags[funcTag] =\ncloneableTags[weakMapTag] = false;\n\n/**\n * The base implementation of `_.clone` and `_.cloneDeep` which tracks\n * traversed objects.\n *\n * @private\n * @param {*} value The value to clone.\n * @param {boolean} bitmask The bitmask flags.\n *  1 - Deep clone\n *  2 - Flatten inherited properties\n *  4 - Clone symbols\n * @param {Function} [customizer] The function to customize cloning.\n * @param {string} [key] The key of `value`.\n * @param {Object} [object] The parent object of `value`.\n * @param {Object} [stack] Tracks traversed objects and their clone counterparts.\n * @returns {*} Returns the cloned value.\n */\nfunction baseClone(value, bitmask, customizer, key, object, stack) {\n  var result,\n      isDeep = bitmask & CLONE_DEEP_FLAG,\n      isFlat = bitmask & CLONE_FLAT_FLAG,\n      isFull = bitmask & CLONE_SYMBOLS_FLAG;\n\n  if (customizer) {\n    result = object ? customizer(value, key, object, stack) : customizer(value);\n  }\n  if (result !== undefined) {\n    return result;\n  }\n  if (!isObject(value)) {\n    return value;\n  }\n  var isArr = isArray(value);\n  if (isArr) {\n    result = initCloneArray(value);\n    if (!isDeep) {\n      return copyArray(value, result);\n    }\n  } else {\n    var tag = getTag(value),\n        isFunc = tag == funcTag || tag == genTag;\n\n    if (isBuffer(value)) {\n      return cloneBuffer(value, isDeep);\n    }\n    if (tag == objectTag || tag == argsTag || (isFunc && !object)) {\n      result = (isFlat || isFunc) ? {} : initCloneObject(value);\n      if (!isDeep) {\n        return isFlat\n          ? copySymbolsIn(value, baseAssignIn(result, value))\n          : copySymbols(value, baseAssign(result, value));\n      }\n    } else {\n      if (!cloneableTags[tag]) {\n        return object ? value : {};\n      }\n      result = initCloneByTag(value, tag, isDeep);\n    }\n  }\n  // Check for circular references and return its corresponding clone.\n  stack || (stack = new Stack);\n  var stacked = stack.get(value);\n  if (stacked) {\n    return stacked;\n  }\n  stack.set(value, result);\n\n  if (isSet(value)) {\n    value.forEach(function(subValue) {\n      result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack));\n    });\n  } else if (isMap(value)) {\n    value.forEach(function(subValue, key) {\n      result.set(key, baseClone(subValue, bitmask, customizer, key, value, stack));\n    });\n  }\n\n  var keysFunc = isFull\n    ? (isFlat ? getAllKeysIn : getAllKeys)\n    : (isFlat ? keysIn : keys);\n\n  var props = isArr ? undefined : keysFunc(value);\n  arrayEach(props || value, function(subValue, key) {\n    if (props) {\n      key = subValue;\n      subValue = value[key];\n    }\n    // Recursively populate clone (susceptible to call stack limits).\n    assignValue(result, key, baseClone(subValue, bitmask, customizer, key, value, stack));\n  });\n  return result;\n}\n\nmodule.exports = baseClone;\n","var isObject = require('./isObject');\n\n/** Built-in value references. */\nvar objectCreate = Object.create;\n\n/**\n * The base implementation of `_.create` without support for assigning\n * properties to the created object.\n *\n * @private\n * @param {Object} proto The object to inherit from.\n * @returns {Object} Returns the new object.\n */\nvar baseCreate = (function() {\n  function object() {}\n  return function(proto) {\n    if (!isObject(proto)) {\n      return {};\n    }\n    if (objectCreate) {\n      return objectCreate(proto);\n    }\n    object.prototype = proto;\n    var result = new object;\n    object.prototype = undefined;\n    return result;\n  };\n}());\n\nmodule.exports = baseCreate;\n","var arrayPush = require('./_arrayPush'),\n    isArray = require('./isArray');\n\n/**\n * The base implementation of `getAllKeys` and `getAllKeysIn` which uses\n * `keysFunc` and `symbolsFunc` to get the enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @param {Function} symbolsFunc The function to get the symbols of `object`.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction baseGetAllKeys(object, keysFunc, symbolsFunc) {\n  var result = keysFunc(object);\n  return isArray(object) ? result : arrayPush(result, symbolsFunc(object));\n}\n\nmodule.exports = baseGetAllKeys;\n","var Symbol = require('./_Symbol'),\n    getRawTag = require('./_getRawTag'),\n    objectToString = require('./_objectToString');\n\n/** `Object#toString` result references. */\nvar nullTag = '[object Null]',\n    undefinedTag = '[object Undefined]';\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n  if (value == null) {\n    return value === undefined ? undefinedTag : nullTag;\n  }\n  return (symToStringTag && symToStringTag in Object(value))\n    ? getRawTag(value)\n    : objectToString(value);\n}\n\nmodule.exports = baseGetTag;\n","var baseGetTag = require('./_baseGetTag'),\n    isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]';\n\n/**\n * The base implementation of `_.isArguments`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n */\nfunction baseIsArguments(value) {\n  return isObjectLike(value) && baseGetTag(value) == argsTag;\n}\n\nmodule.exports = baseIsArguments;\n","var getTag = require('./_getTag'),\n    isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar mapTag = '[object Map]';\n\n/**\n * The base implementation of `_.isMap` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n */\nfunction baseIsMap(value) {\n  return isObjectLike(value) && getTag(value) == mapTag;\n}\n\nmodule.exports = baseIsMap;\n","var isFunction = require('./isFunction'),\n    isMasked = require('./_isMasked'),\n    isObject = require('./isObject'),\n    toSource = require('./_toSource');\n\n/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\n/** Used to detect host constructors (Safari). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/** Used for built-in method references. */\nvar funcProto = Function.prototype,\n    objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n  funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n  .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n *  else `false`.\n */\nfunction baseIsNative(value) {\n  if (!isObject(value) || isMasked(value)) {\n    return false;\n  }\n  var pattern = isFunction(value) ? reIsNative : reIsHostCtor;\n  return pattern.test(toSource(value));\n}\n\nmodule.exports = baseIsNative;\n","var getTag = require('./_getTag'),\n    isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar setTag = '[object Set]';\n\n/**\n * The base implementation of `_.isSet` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n */\nfunction baseIsSet(value) {\n  return isObjectLike(value) && getTag(value) == setTag;\n}\n\nmodule.exports = baseIsSet;\n","var baseGetTag = require('./_baseGetTag'),\n    isLength = require('./isLength'),\n    isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n    arrayTag = '[object Array]',\n    boolTag = '[object Boolean]',\n    dateTag = '[object Date]',\n    errorTag = '[object Error]',\n    funcTag = '[object Function]',\n    mapTag = '[object Map]',\n    numberTag = '[object Number]',\n    objectTag = '[object Object]',\n    regexpTag = '[object RegExp]',\n    setTag = '[object Set]',\n    stringTag = '[object String]',\n    weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n    dataViewTag = '[object DataView]',\n    float32Tag = '[object Float32Array]',\n    float64Tag = '[object Float64Array]',\n    int8Tag = '[object Int8Array]',\n    int16Tag = '[object Int16Array]',\n    int32Tag = '[object Int32Array]',\n    uint8Tag = '[object Uint8Array]',\n    uint8ClampedTag = '[object Uint8ClampedArray]',\n    uint16Tag = '[object Uint16Array]',\n    uint32Tag = '[object Uint32Array]';\n\n/** Used to identify `toStringTag` values of typed arrays. */\nvar typedArrayTags = {};\ntypedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\ntypedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\ntypedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\ntypedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\ntypedArrayTags[uint32Tag] = true;\ntypedArrayTags[argsTag] = typedArrayTags[arrayTag] =\ntypedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\ntypedArrayTags[dataViewTag] = typedArrayTags[dateTag] =\ntypedArrayTags[errorTag] = typedArrayTags[funcTag] =\ntypedArrayTags[mapTag] = typedArrayTags[numberTag] =\ntypedArrayTags[objectTag] = typedArrayTags[regexpTag] =\ntypedArrayTags[setTag] = typedArrayTags[stringTag] =\ntypedArrayTags[weakMapTag] = false;\n\n/**\n * The base implementation of `_.isTypedArray` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n */\nfunction baseIsTypedArray(value) {\n  return isObjectLike(value) &&\n    isLength(value.length) && !!typedArrayTags[baseGetTag(value)];\n}\n\nmodule.exports = baseIsTypedArray;\n","var isPrototype = require('./_isPrototype'),\n    nativeKeys = require('./_nativeKeys');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeys(object) {\n  if (!isPrototype(object)) {\n    return nativeKeys(object);\n  }\n  var result = [];\n  for (var key in Object(object)) {\n    if (hasOwnProperty.call(object, key) && key != 'constructor') {\n      result.push(key);\n    }\n  }\n  return result;\n}\n\nmodule.exports = baseKeys;\n","var isObject = require('./isObject'),\n    isPrototype = require('./_isPrototype'),\n    nativeKeysIn = require('./_nativeKeysIn');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeysIn(object) {\n  if (!isObject(object)) {\n    return nativeKeysIn(object);\n  }\n  var isProto = isPrototype(object),\n      result = [];\n\n  for (var key in object) {\n    if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {\n      result.push(key);\n    }\n  }\n  return result;\n}\n\nmodule.exports = baseKeysIn;\n","/**\n * The base implementation of `_.times` without support for iteratee shorthands\n * or max array length checks.\n *\n * @private\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n */\nfunction baseTimes(n, iteratee) {\n  var index = -1,\n      result = Array(n);\n\n  while (++index < n) {\n    result[index] = iteratee(index);\n  }\n  return result;\n}\n\nmodule.exports = baseTimes;\n","var trimmedEndIndex = require('./_trimmedEndIndex');\n\n/** Used to match leading whitespace. */\nvar reTrimStart = /^\\s+/;\n\n/**\n * The base implementation of `_.trim`.\n *\n * @private\n * @param {string} string The string to trim.\n * @returns {string} Returns the trimmed string.\n */\nfunction baseTrim(string) {\n  return string\n    ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '')\n    : string;\n}\n\nmodule.exports = baseTrim;\n","/**\n * The base implementation of `_.unary` without support for storing metadata.\n *\n * @private\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n */\nfunction baseUnary(func) {\n  return function(value) {\n    return func(value);\n  };\n}\n\nmodule.exports = baseUnary;\n","var Uint8Array = require('./_Uint8Array');\n\n/**\n * Creates a clone of `arrayBuffer`.\n *\n * @private\n * @param {ArrayBuffer} arrayBuffer The array buffer to clone.\n * @returns {ArrayBuffer} Returns the cloned array buffer.\n */\nfunction cloneArrayBuffer(arrayBuffer) {\n  var result = new arrayBuffer.constructor(arrayBuffer.byteLength);\n  new Uint8Array(result).set(new Uint8Array(arrayBuffer));\n  return result;\n}\n\nmodule.exports = cloneArrayBuffer;\n","var root = require('./_root');\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Built-in value references. */\nvar Buffer = moduleExports ? root.Buffer : undefined,\n    allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined;\n\n/**\n * Creates a clone of  `buffer`.\n *\n * @private\n * @param {Buffer} buffer The buffer to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Buffer} Returns the cloned buffer.\n */\nfunction cloneBuffer(buffer, isDeep) {\n  if (isDeep) {\n    return buffer.slice();\n  }\n  var length = buffer.length,\n      result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length);\n\n  buffer.copy(result);\n  return result;\n}\n\nmodule.exports = cloneBuffer;\n","var cloneArrayBuffer = require('./_cloneArrayBuffer');\n\n/**\n * Creates a clone of `dataView`.\n *\n * @private\n * @param {Object} dataView The data view to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned data view.\n */\nfunction cloneDataView(dataView, isDeep) {\n  var buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer;\n  return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength);\n}\n\nmodule.exports = cloneDataView;\n","/** Used to match `RegExp` flags from their coerced string values. */\nvar reFlags = /\\w*$/;\n\n/**\n * Creates a clone of `regexp`.\n *\n * @private\n * @param {Object} regexp The regexp to clone.\n * @returns {Object} Returns the cloned regexp.\n */\nfunction cloneRegExp(regexp) {\n  var result = new regexp.constructor(regexp.source, reFlags.exec(regexp));\n  result.lastIndex = regexp.lastIndex;\n  return result;\n}\n\nmodule.exports = cloneRegExp;\n","var Symbol = require('./_Symbol');\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n    symbolValueOf = symbolProto ? symbolProto.valueOf : undefined;\n\n/**\n * Creates a clone of the `symbol` object.\n *\n * @private\n * @param {Object} symbol The symbol object to clone.\n * @returns {Object} Returns the cloned symbol object.\n */\nfunction cloneSymbol(symbol) {\n  return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {};\n}\n\nmodule.exports = cloneSymbol;\n","var cloneArrayBuffer = require('./_cloneArrayBuffer');\n\n/**\n * Creates a clone of `typedArray`.\n *\n * @private\n * @param {Object} typedArray The typed array to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned typed array.\n */\nfunction cloneTypedArray(typedArray, isDeep) {\n  var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer;\n  return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length);\n}\n\nmodule.exports = cloneTypedArray;\n","/**\n * Copies the values of `source` to `array`.\n *\n * @private\n * @param {Array} source The array to copy values from.\n * @param {Array} [array=[]] The array to copy values to.\n * @returns {Array} Returns `array`.\n */\nfunction copyArray(source, array) {\n  var index = -1,\n      length = source.length;\n\n  array || (array = Array(length));\n  while (++index < length) {\n    array[index] = source[index];\n  }\n  return array;\n}\n\nmodule.exports = copyArray;\n","var assignValue = require('./_assignValue'),\n    baseAssignValue = require('./_baseAssignValue');\n\n/**\n * Copies properties of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy properties from.\n * @param {Array} props The property identifiers to copy.\n * @param {Object} [object={}] The object to copy properties to.\n * @param {Function} [customizer] The function to customize copied values.\n * @returns {Object} Returns `object`.\n */\nfunction copyObject(source, props, object, customizer) {\n  var isNew = !object;\n  object || (object = {});\n\n  var index = -1,\n      length = props.length;\n\n  while (++index < length) {\n    var key = props[index];\n\n    var newValue = customizer\n      ? customizer(object[key], source[key], key, object, source)\n      : undefined;\n\n    if (newValue === undefined) {\n      newValue = source[key];\n    }\n    if (isNew) {\n      baseAssignValue(object, key, newValue);\n    } else {\n      assignValue(object, key, newValue);\n    }\n  }\n  return object;\n}\n\nmodule.exports = copyObject;\n","var copyObject = require('./_copyObject'),\n    getSymbols = require('./_getSymbols');\n\n/**\n * Copies own symbols of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy symbols from.\n * @param {Object} [object={}] The object to copy symbols to.\n * @returns {Object} Returns `object`.\n */\nfunction copySymbols(source, object) {\n  return copyObject(source, getSymbols(source), object);\n}\n\nmodule.exports = copySymbols;\n","var copyObject = require('./_copyObject'),\n    getSymbolsIn = require('./_getSymbolsIn');\n\n/**\n * Copies own and inherited symbols of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy symbols from.\n * @param {Object} [object={}] The object to copy symbols to.\n * @returns {Object} Returns `object`.\n */\nfunction copySymbolsIn(source, object) {\n  return copyObject(source, getSymbolsIn(source), object);\n}\n\nmodule.exports = copySymbolsIn;\n","var root = require('./_root');\n\n/** Used to detect overreaching core-js shims. */\nvar coreJsData = root['__core-js_shared__'];\n\nmodule.exports = coreJsData;\n","var getNative = require('./_getNative');\n\nvar defineProperty = (function() {\n  try {\n    var func = getNative(Object, 'defineProperty');\n    func({}, '', {});\n    return func;\n  } catch (e) {}\n}());\n\nmodule.exports = defineProperty;\n","/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nmodule.exports = freeGlobal;\n","var baseGetAllKeys = require('./_baseGetAllKeys'),\n    getSymbols = require('./_getSymbols'),\n    keys = require('./keys');\n\n/**\n * Creates an array of own enumerable property names and symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction getAllKeys(object) {\n  return baseGetAllKeys(object, keys, getSymbols);\n}\n\nmodule.exports = getAllKeys;\n","var baseGetAllKeys = require('./_baseGetAllKeys'),\n    getSymbolsIn = require('./_getSymbolsIn'),\n    keysIn = require('./keysIn');\n\n/**\n * Creates an array of own and inherited enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction getAllKeysIn(object) {\n  return baseGetAllKeys(object, keysIn, getSymbolsIn);\n}\n\nmodule.exports = getAllKeysIn;\n","var isKeyable = require('./_isKeyable');\n\n/**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\nfunction getMapData(map, key) {\n  var data = map.__data__;\n  return isKeyable(key)\n    ? data[typeof key == 'string' ? 'string' : 'hash']\n    : data.map;\n}\n\nmodule.exports = getMapData;\n","var baseIsNative = require('./_baseIsNative'),\n    getValue = require('./_getValue');\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n  var value = getValue(object, key);\n  return baseIsNative(value) ? value : undefined;\n}\n\nmodule.exports = getNative;\n","var overArg = require('./_overArg');\n\n/** Built-in value references. */\nvar getPrototype = overArg(Object.getPrototypeOf, Object);\n\nmodule.exports = getPrototype;\n","var Symbol = require('./_Symbol');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n  var isOwn = hasOwnProperty.call(value, symToStringTag),\n      tag = value[symToStringTag];\n\n  try {\n    value[symToStringTag] = undefined;\n    var unmasked = true;\n  } catch (e) {}\n\n  var result = nativeObjectToString.call(value);\n  if (unmasked) {\n    if (isOwn) {\n      value[symToStringTag] = tag;\n    } else {\n      delete value[symToStringTag];\n    }\n  }\n  return result;\n}\n\nmodule.exports = getRawTag;\n","var arrayFilter = require('./_arrayFilter'),\n    stubArray = require('./stubArray');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Built-in value references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeGetSymbols = Object.getOwnPropertySymbols;\n\n/**\n * Creates an array of the own enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\nvar getSymbols = !nativeGetSymbols ? stubArray : function(object) {\n  if (object == null) {\n    return [];\n  }\n  object = Object(object);\n  return arrayFilter(nativeGetSymbols(object), function(symbol) {\n    return propertyIsEnumerable.call(object, symbol);\n  });\n};\n\nmodule.exports = getSymbols;\n","var arrayPush = require('./_arrayPush'),\n    getPrototype = require('./_getPrototype'),\n    getSymbols = require('./_getSymbols'),\n    stubArray = require('./stubArray');\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeGetSymbols = Object.getOwnPropertySymbols;\n\n/**\n * Creates an array of the own and inherited enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\nvar getSymbolsIn = !nativeGetSymbols ? stubArray : function(object) {\n  var result = [];\n  while (object) {\n    arrayPush(result, getSymbols(object));\n    object = getPrototype(object);\n  }\n  return result;\n};\n\nmodule.exports = getSymbolsIn;\n","var DataView = require('./_DataView'),\n    Map = require('./_Map'),\n    Promise = require('./_Promise'),\n    Set = require('./_Set'),\n    WeakMap = require('./_WeakMap'),\n    baseGetTag = require('./_baseGetTag'),\n    toSource = require('./_toSource');\n\n/** `Object#toString` result references. */\nvar mapTag = '[object Map]',\n    objectTag = '[object Object]',\n    promiseTag = '[object Promise]',\n    setTag = '[object Set]',\n    weakMapTag = '[object WeakMap]';\n\nvar dataViewTag = '[object DataView]';\n\n/** Used to detect maps, sets, and weakmaps. */\nvar dataViewCtorString = toSource(DataView),\n    mapCtorString = toSource(Map),\n    promiseCtorString = toSource(Promise),\n    setCtorString = toSource(Set),\n    weakMapCtorString = toSource(WeakMap);\n\n/**\n * Gets the `toStringTag` of `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nvar getTag = baseGetTag;\n\n// Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6.\nif ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||\n    (Map && getTag(new Map) != mapTag) ||\n    (Promise && getTag(Promise.resolve()) != promiseTag) ||\n    (Set && getTag(new Set) != setTag) ||\n    (WeakMap && getTag(new WeakMap) != weakMapTag)) {\n  getTag = function(value) {\n    var result = baseGetTag(value),\n        Ctor = result == objectTag ? value.constructor : undefined,\n        ctorString = Ctor ? toSource(Ctor) : '';\n\n    if (ctorString) {\n      switch (ctorString) {\n        case dataViewCtorString: return dataViewTag;\n        case mapCtorString: return mapTag;\n        case promiseCtorString: return promiseTag;\n        case setCtorString: return setTag;\n        case weakMapCtorString: return weakMapTag;\n      }\n    }\n    return result;\n  };\n}\n\nmodule.exports = getTag;\n","/**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction getValue(object, key) {\n  return object == null ? undefined : object[key];\n}\n\nmodule.exports = getValue;\n","var nativeCreate = require('./_nativeCreate');\n\n/**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\nfunction hashClear() {\n  this.__data__ = nativeCreate ? nativeCreate(null) : {};\n  this.size = 0;\n}\n\nmodule.exports = hashClear;\n","/**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction hashDelete(key) {\n  var result = this.has(key) && delete this.__data__[key];\n  this.size -= result ? 1 : 0;\n  return result;\n}\n\nmodule.exports = hashDelete;\n","var nativeCreate = require('./_nativeCreate');\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction hashGet(key) {\n  var data = this.__data__;\n  if (nativeCreate) {\n    var result = data[key];\n    return result === HASH_UNDEFINED ? undefined : result;\n  }\n  return hasOwnProperty.call(data, key) ? data[key] : undefined;\n}\n\nmodule.exports = hashGet;\n","var nativeCreate = require('./_nativeCreate');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction hashHas(key) {\n  var data = this.__data__;\n  return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key);\n}\n\nmodule.exports = hashHas;\n","var nativeCreate = require('./_nativeCreate');\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\nfunction hashSet(key, value) {\n  var data = this.__data__;\n  this.size += this.has(key) ? 0 : 1;\n  data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n  return this;\n}\n\nmodule.exports = hashSet;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Initializes an array clone.\n *\n * @private\n * @param {Array} array The array to clone.\n * @returns {Array} Returns the initialized clone.\n */\nfunction initCloneArray(array) {\n  var length = array.length,\n      result = new array.constructor(length);\n\n  // Add properties assigned by `RegExp#exec`.\n  if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) {\n    result.index = array.index;\n    result.input = array.input;\n  }\n  return result;\n}\n\nmodule.exports = initCloneArray;\n","var cloneArrayBuffer = require('./_cloneArrayBuffer'),\n    cloneDataView = require('./_cloneDataView'),\n    cloneRegExp = require('./_cloneRegExp'),\n    cloneSymbol = require('./_cloneSymbol'),\n    cloneTypedArray = require('./_cloneTypedArray');\n\n/** `Object#toString` result references. */\nvar boolTag = '[object Boolean]',\n    dateTag = '[object Date]',\n    mapTag = '[object Map]',\n    numberTag = '[object Number]',\n    regexpTag = '[object RegExp]',\n    setTag = '[object Set]',\n    stringTag = '[object String]',\n    symbolTag = '[object Symbol]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n    dataViewTag = '[object DataView]',\n    float32Tag = '[object Float32Array]',\n    float64Tag = '[object Float64Array]',\n    int8Tag = '[object Int8Array]',\n    int16Tag = '[object Int16Array]',\n    int32Tag = '[object Int32Array]',\n    uint8Tag = '[object Uint8Array]',\n    uint8ClampedTag = '[object Uint8ClampedArray]',\n    uint16Tag = '[object Uint16Array]',\n    uint32Tag = '[object Uint32Array]';\n\n/**\n * Initializes an object clone based on its `toStringTag`.\n *\n * **Note:** This function only supports cloning values with tags of\n * `Boolean`, `Date`, `Error`, `Map`, `Number`, `RegExp`, `Set`, or `String`.\n *\n * @private\n * @param {Object} object The object to clone.\n * @param {string} tag The `toStringTag` of the object to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the initialized clone.\n */\nfunction initCloneByTag(object, tag, isDeep) {\n  var Ctor = object.constructor;\n  switch (tag) {\n    case arrayBufferTag:\n      return cloneArrayBuffer(object);\n\n    case boolTag:\n    case dateTag:\n      return new Ctor(+object);\n\n    case dataViewTag:\n      return cloneDataView(object, isDeep);\n\n    case float32Tag: case float64Tag:\n    case int8Tag: case int16Tag: case int32Tag:\n    case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag:\n      return cloneTypedArray(object, isDeep);\n\n    case mapTag:\n      return new Ctor;\n\n    case numberTag:\n    case stringTag:\n      return new Ctor(object);\n\n    case regexpTag:\n      return cloneRegExp(object);\n\n    case setTag:\n      return new Ctor;\n\n    case symbolTag:\n      return cloneSymbol(object);\n  }\n}\n\nmodule.exports = initCloneByTag;\n","var baseCreate = require('./_baseCreate'),\n    getPrototype = require('./_getPrototype'),\n    isPrototype = require('./_isPrototype');\n\n/**\n * Initializes an object clone.\n *\n * @private\n * @param {Object} object The object to clone.\n * @returns {Object} Returns the initialized clone.\n */\nfunction initCloneObject(object) {\n  return (typeof object.constructor == 'function' && !isPrototype(object))\n    ? baseCreate(getPrototype(object))\n    : {};\n}\n\nmodule.exports = initCloneObject;\n","/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/** Used to detect unsigned integer values. */\nvar reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\nfunction isIndex(value, length) {\n  var type = typeof value;\n  length = length == null ? MAX_SAFE_INTEGER : length;\n\n  return !!length &&\n    (type == 'number' ||\n      (type != 'symbol' && reIsUint.test(value))) &&\n        (value > -1 && value % 1 == 0 && value < length);\n}\n\nmodule.exports = isIndex;\n","/**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\nfunction isKeyable(value) {\n  var type = typeof value;\n  return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n    ? (value !== '__proto__')\n    : (value === null);\n}\n\nmodule.exports = isKeyable;\n","var coreJsData = require('./_coreJsData');\n\n/** Used to detect methods masquerading as native. */\nvar maskSrcKey = (function() {\n  var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n  return uid ? ('Symbol(src)_1.' + uid) : '';\n}());\n\n/**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\nfunction isMasked(func) {\n  return !!maskSrcKey && (maskSrcKey in func);\n}\n\nmodule.exports = isMasked;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Checks if `value` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n */\nfunction isPrototype(value) {\n  var Ctor = value && value.constructor,\n      proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n  return value === proto;\n}\n\nmodule.exports = isPrototype;\n","/**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\nfunction listCacheClear() {\n  this.__data__ = [];\n  this.size = 0;\n}\n\nmodule.exports = listCacheClear;\n","var assocIndexOf = require('./_assocIndexOf');\n\n/** Used for built-in method references. */\nvar arrayProto = Array.prototype;\n\n/** Built-in value references. */\nvar splice = arrayProto.splice;\n\n/**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction listCacheDelete(key) {\n  var data = this.__data__,\n      index = assocIndexOf(data, key);\n\n  if (index < 0) {\n    return false;\n  }\n  var lastIndex = data.length - 1;\n  if (index == lastIndex) {\n    data.pop();\n  } else {\n    splice.call(data, index, 1);\n  }\n  --this.size;\n  return true;\n}\n\nmodule.exports = listCacheDelete;\n","var assocIndexOf = require('./_assocIndexOf');\n\n/**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction listCacheGet(key) {\n  var data = this.__data__,\n      index = assocIndexOf(data, key);\n\n  return index < 0 ? undefined : data[index][1];\n}\n\nmodule.exports = listCacheGet;\n","var assocIndexOf = require('./_assocIndexOf');\n\n/**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction listCacheHas(key) {\n  return assocIndexOf(this.__data__, key) > -1;\n}\n\nmodule.exports = listCacheHas;\n","var assocIndexOf = require('./_assocIndexOf');\n\n/**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\nfunction listCacheSet(key, value) {\n  var data = this.__data__,\n      index = assocIndexOf(data, key);\n\n  if (index < 0) {\n    ++this.size;\n    data.push([key, value]);\n  } else {\n    data[index][1] = value;\n  }\n  return this;\n}\n\nmodule.exports = listCacheSet;\n","var Hash = require('./_Hash'),\n    ListCache = require('./_ListCache'),\n    Map = require('./_Map');\n\n/**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\nfunction mapCacheClear() {\n  this.size = 0;\n  this.__data__ = {\n    'hash': new Hash,\n    'map': new (Map || ListCache),\n    'string': new Hash\n  };\n}\n\nmodule.exports = mapCacheClear;\n","var getMapData = require('./_getMapData');\n\n/**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction mapCacheDelete(key) {\n  var result = getMapData(this, key)['delete'](key);\n  this.size -= result ? 1 : 0;\n  return result;\n}\n\nmodule.exports = mapCacheDelete;\n","var getMapData = require('./_getMapData');\n\n/**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction mapCacheGet(key) {\n  return getMapData(this, key).get(key);\n}\n\nmodule.exports = mapCacheGet;\n","var getMapData = require('./_getMapData');\n\n/**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction mapCacheHas(key) {\n  return getMapData(this, key).has(key);\n}\n\nmodule.exports = mapCacheHas;\n","var getMapData = require('./_getMapData');\n\n/**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\nfunction mapCacheSet(key, value) {\n  var data = getMapData(this, key),\n      size = data.size;\n\n  data.set(key, value);\n  this.size += data.size == size ? 0 : 1;\n  return this;\n}\n\nmodule.exports = mapCacheSet;\n","var getNative = require('./_getNative');\n\n/* Built-in method references that are verified to be native. */\nvar nativeCreate = getNative(Object, 'create');\n\nmodule.exports = nativeCreate;\n","var overArg = require('./_overArg');\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeKeys = overArg(Object.keys, Object);\n\nmodule.exports = nativeKeys;\n","/**\n * This function is like\n * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * except that it includes inherited enumerable properties.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction nativeKeysIn(object) {\n  var result = [];\n  if (object != null) {\n    for (var key in Object(object)) {\n      result.push(key);\n    }\n  }\n  return result;\n}\n\nmodule.exports = nativeKeysIn;\n","var freeGlobal = require('./_freeGlobal');\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Detect free variable `process` from Node.js. */\nvar freeProcess = moduleExports && freeGlobal.process;\n\n/** Used to access faster Node.js helpers. */\nvar nodeUtil = (function() {\n  try {\n    // Use `util.types` for Node.js 10+.\n    var types = freeModule && freeModule.require && freeModule.require('util').types;\n\n    if (types) {\n      return types;\n    }\n\n    // Legacy `process.binding('util')` for Node.js < 10.\n    return freeProcess && freeProcess.binding && freeProcess.binding('util');\n  } catch (e) {}\n}());\n\nmodule.exports = nodeUtil;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n  return nativeObjectToString.call(value);\n}\n\nmodule.exports = objectToString;\n","/**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\nfunction overArg(func, transform) {\n  return function(arg) {\n    return func(transform(arg));\n  };\n}\n\nmodule.exports = overArg;\n","var freeGlobal = require('./_freeGlobal');\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\nmodule.exports = root;\n","var ListCache = require('./_ListCache');\n\n/**\n * Removes all key-value entries from the stack.\n *\n * @private\n * @name clear\n * @memberOf Stack\n */\nfunction stackClear() {\n  this.__data__ = new ListCache;\n  this.size = 0;\n}\n\nmodule.exports = stackClear;\n","/**\n * Removes `key` and its value from the stack.\n *\n * @private\n * @name delete\n * @memberOf Stack\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction stackDelete(key) {\n  var data = this.__data__,\n      result = data['delete'](key);\n\n  this.size = data.size;\n  return result;\n}\n\nmodule.exports = stackDelete;\n","/**\n * Gets the stack value for `key`.\n *\n * @private\n * @name get\n * @memberOf Stack\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction stackGet(key) {\n  return this.__data__.get(key);\n}\n\nmodule.exports = stackGet;\n","/**\n * Checks if a stack value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Stack\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction stackHas(key) {\n  return this.__data__.has(key);\n}\n\nmodule.exports = stackHas;\n","var ListCache = require('./_ListCache'),\n    Map = require('./_Map'),\n    MapCache = require('./_MapCache');\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\n\n/**\n * Sets the stack `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Stack\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the stack cache instance.\n */\nfunction stackSet(key, value) {\n  var data = this.__data__;\n  if (data instanceof ListCache) {\n    var pairs = data.__data__;\n    if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {\n      pairs.push([key, value]);\n      this.size = ++data.size;\n      return this;\n    }\n    data = this.__data__ = new MapCache(pairs);\n  }\n  data.set(key, value);\n  this.size = data.size;\n  return this;\n}\n\nmodule.exports = stackSet;\n","/** Used for built-in method references. */\nvar funcProto = Function.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to convert.\n * @returns {string} Returns the source code.\n */\nfunction toSource(func) {\n  if (func != null) {\n    try {\n      return funcToString.call(func);\n    } catch (e) {}\n    try {\n      return (func + '');\n    } catch (e) {}\n  }\n  return '';\n}\n\nmodule.exports = toSource;\n","/** Used to match a single whitespace character. */\nvar reWhitespace = /\\s/;\n\n/**\n * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace\n * character of `string`.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {number} Returns the index of the last non-whitespace character.\n */\nfunction trimmedEndIndex(string) {\n  var index = string.length;\n\n  while (index-- && reWhitespace.test(string.charAt(index))) {}\n  return index;\n}\n\nmodule.exports = trimmedEndIndex;\n","var toInteger = require('./toInteger');\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/**\n * Creates a function that invokes `func`, with the `this` binding and arguments\n * of the created function, while it's called less than `n` times. Subsequent\n * calls to the created function return the result of the last `func` invocation.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Function\n * @param {number} n The number of calls at which `func` is no longer invoked.\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new restricted function.\n * @example\n *\n * jQuery(element).on('click', _.before(5, addContactToList));\n * // => Allows adding up to 4 contacts to the list.\n */\nfunction before(n, func) {\n  var result;\n  if (typeof func != 'function') {\n    throw new TypeError(FUNC_ERROR_TEXT);\n  }\n  n = toInteger(n);\n  return function() {\n    if (--n > 0) {\n      result = func.apply(this, arguments);\n    }\n    if (n <= 1) {\n      func = undefined;\n    }\n    return result;\n  };\n}\n\nmodule.exports = before;\n","var baseClone = require('./_baseClone');\n\n/** Used to compose bitmasks for cloning. */\nvar CLONE_DEEP_FLAG = 1,\n    CLONE_SYMBOLS_FLAG = 4;\n\n/**\n * This method is like `_.clone` except that it recursively clones `value`.\n *\n * @static\n * @memberOf _\n * @since 1.0.0\n * @category Lang\n * @param {*} value The value to recursively clone.\n * @returns {*} Returns the deep cloned value.\n * @see _.clone\n * @example\n *\n * var objects = [{ 'a': 1 }, { 'b': 2 }];\n *\n * var deep = _.cloneDeep(objects);\n * console.log(deep[0] === objects[0]);\n * // => false\n */\nfunction cloneDeep(value) {\n  return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG);\n}\n\nmodule.exports = cloneDeep;\n","var isObject = require('./isObject'),\n    now = require('./now'),\n    toNumber = require('./toNumber');\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max,\n    nativeMin = Math.min;\n\n/**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed `func` invocations and a `flush` method to immediately invoke them.\n * Provide `options` to indicate whether `func` should be invoked on the\n * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n * with the last arguments provided to the debounced function. Subsequent\n * calls to the debounced function return the result of the last `func`\n * invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the debounced function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=false]\n *  Specify invoking on the leading edge of the timeout.\n * @param {number} [options.maxWait]\n *  The maximum time `func` is allowed to be delayed before it's invoked.\n * @param {boolean} [options.trailing=true]\n *  Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // Avoid costly calculations while the window size is in flux.\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n * jQuery(element).on('click', _.debounce(sendMail, 300, {\n *   'leading': true,\n *   'trailing': false\n * }));\n *\n * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', debounced);\n *\n * // Cancel the trailing debounced invocation.\n * jQuery(window).on('popstate', debounced.cancel);\n */\nfunction debounce(func, wait, options) {\n  var lastArgs,\n      lastThis,\n      maxWait,\n      result,\n      timerId,\n      lastCallTime,\n      lastInvokeTime = 0,\n      leading = false,\n      maxing = false,\n      trailing = true;\n\n  if (typeof func != 'function') {\n    throw new TypeError(FUNC_ERROR_TEXT);\n  }\n  wait = toNumber(wait) || 0;\n  if (isObject(options)) {\n    leading = !!options.leading;\n    maxing = 'maxWait' in options;\n    maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n    trailing = 'trailing' in options ? !!options.trailing : trailing;\n  }\n\n  function invokeFunc(time) {\n    var args = lastArgs,\n        thisArg = lastThis;\n\n    lastArgs = lastThis = undefined;\n    lastInvokeTime = time;\n    result = func.apply(thisArg, args);\n    return result;\n  }\n\n  function leadingEdge(time) {\n    // Reset any `maxWait` timer.\n    lastInvokeTime = time;\n    // Start the timer for the trailing edge.\n    timerId = setTimeout(timerExpired, wait);\n    // Invoke the leading edge.\n    return leading ? invokeFunc(time) : result;\n  }\n\n  function remainingWait(time) {\n    var timeSinceLastCall = time - lastCallTime,\n        timeSinceLastInvoke = time - lastInvokeTime,\n        timeWaiting = wait - timeSinceLastCall;\n\n    return maxing\n      ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke)\n      : timeWaiting;\n  }\n\n  function shouldInvoke(time) {\n    var timeSinceLastCall = time - lastCallTime,\n        timeSinceLastInvoke = time - lastInvokeTime;\n\n    // Either this is the first call, activity has stopped and we're at the\n    // trailing edge, the system time has gone backwards and we're treating\n    // it as the trailing edge, or we've hit the `maxWait` limit.\n    return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n      (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n  }\n\n  function timerExpired() {\n    var time = now();\n    if (shouldInvoke(time)) {\n      return trailingEdge(time);\n    }\n    // Restart the timer.\n    timerId = setTimeout(timerExpired, remainingWait(time));\n  }\n\n  function trailingEdge(time) {\n    timerId = undefined;\n\n    // Only invoke if we have `lastArgs` which means `func` has been\n    // debounced at least once.\n    if (trailing && lastArgs) {\n      return invokeFunc(time);\n    }\n    lastArgs = lastThis = undefined;\n    return result;\n  }\n\n  function cancel() {\n    if (timerId !== undefined) {\n      clearTimeout(timerId);\n    }\n    lastInvokeTime = 0;\n    lastArgs = lastCallTime = lastThis = timerId = undefined;\n  }\n\n  function flush() {\n    return timerId === undefined ? result : trailingEdge(now());\n  }\n\n  function debounced() {\n    var time = now(),\n        isInvoking = shouldInvoke(time);\n\n    lastArgs = arguments;\n    lastThis = this;\n    lastCallTime = time;\n\n    if (isInvoking) {\n      if (timerId === undefined) {\n        return leadingEdge(lastCallTime);\n      }\n      if (maxing) {\n        // Handle invocations in a tight loop.\n        clearTimeout(timerId);\n        timerId = setTimeout(timerExpired, wait);\n        return invokeFunc(lastCallTime);\n      }\n    }\n    if (timerId === undefined) {\n      timerId = setTimeout(timerExpired, wait);\n    }\n    return result;\n  }\n  debounced.cancel = cancel;\n  debounced.flush = flush;\n  return debounced;\n}\n\nmodule.exports = debounce;\n","/**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\nfunction eq(value, other) {\n  return value === other || (value !== value && other !== other);\n}\n\nmodule.exports = eq;\n","var _ = require('./lodash.min').runInContext();\nmodule.exports = require('./fp/_baseConvert')(_, _);\n","var mapping = require('./_mapping'),\n    fallbackHolder = require('./placeholder');\n\n/** Built-in value reference. */\nvar push = Array.prototype.push;\n\n/**\n * Creates a function, with an arity of `n`, that invokes `func` with the\n * arguments it receives.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {number} n The arity of the new function.\n * @returns {Function} Returns the new function.\n */\nfunction baseArity(func, n) {\n  return n == 2\n    ? function(a, b) { return func.apply(undefined, arguments); }\n    : function(a) { return func.apply(undefined, arguments); };\n}\n\n/**\n * Creates a function that invokes `func`, with up to `n` arguments, ignoring\n * any additional arguments.\n *\n * @private\n * @param {Function} func The function to cap arguments for.\n * @param {number} n The arity cap.\n * @returns {Function} Returns the new function.\n */\nfunction baseAry(func, n) {\n  return n == 2\n    ? function(a, b) { return func(a, b); }\n    : function(a) { return func(a); };\n}\n\n/**\n * Creates a clone of `array`.\n *\n * @private\n * @param {Array} array The array to clone.\n * @returns {Array} Returns the cloned array.\n */\nfunction cloneArray(array) {\n  var length = array ? array.length : 0,\n      result = Array(length);\n\n  while (length--) {\n    result[length] = array[length];\n  }\n  return result;\n}\n\n/**\n * Creates a function that clones a given object using the assignment `func`.\n *\n * @private\n * @param {Function} func The assignment function.\n * @returns {Function} Returns the new cloner function.\n */\nfunction createCloner(func) {\n  return function(object) {\n    return func({}, object);\n  };\n}\n\n/**\n * A specialized version of `_.spread` which flattens the spread array into\n * the arguments of the invoked `func`.\n *\n * @private\n * @param {Function} func The function to spread arguments over.\n * @param {number} start The start position of the spread.\n * @returns {Function} Returns the new function.\n */\nfunction flatSpread(func, start) {\n  return function() {\n    var length = arguments.length,\n        lastIndex = length - 1,\n        args = Array(length);\n\n    while (length--) {\n      args[length] = arguments[length];\n    }\n    var array = args[start],\n        otherArgs = args.slice(0, start);\n\n    if (array) {\n      push.apply(otherArgs, array);\n    }\n    if (start != lastIndex) {\n      push.apply(otherArgs, args.slice(start + 1));\n    }\n    return func.apply(this, otherArgs);\n  };\n}\n\n/**\n * Creates a function that wraps `func` and uses `cloner` to clone the first\n * argument it receives.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} cloner The function to clone arguments.\n * @returns {Function} Returns the new immutable function.\n */\nfunction wrapImmutable(func, cloner) {\n  return function() {\n    var length = arguments.length;\n    if (!length) {\n      return;\n    }\n    var args = Array(length);\n    while (length--) {\n      args[length] = arguments[length];\n    }\n    var result = args[0] = cloner.apply(undefined, args);\n    func.apply(undefined, args);\n    return result;\n  };\n}\n\n/**\n * The base implementation of `convert` which accepts a `util` object of methods\n * required to perform conversions.\n *\n * @param {Object} util The util object.\n * @param {string} name The name of the function to convert.\n * @param {Function} func The function to convert.\n * @param {Object} [options] The options object.\n * @param {boolean} [options.cap=true] Specify capping iteratee arguments.\n * @param {boolean} [options.curry=true] Specify currying.\n * @param {boolean} [options.fixed=true] Specify fixed arity.\n * @param {boolean} [options.immutable=true] Specify immutable operations.\n * @param {boolean} [options.rearg=true] Specify rearranging arguments.\n * @returns {Function|Object} Returns the converted function or object.\n */\nfunction baseConvert(util, name, func, options) {\n  var isLib = typeof name == 'function',\n      isObj = name === Object(name);\n\n  if (isObj) {\n    options = func;\n    func = name;\n    name = undefined;\n  }\n  if (func == null) {\n    throw new TypeError;\n  }\n  options || (options = {});\n\n  var config = {\n    'cap': 'cap' in options ? options.cap : true,\n    'curry': 'curry' in options ? options.curry : true,\n    'fixed': 'fixed' in options ? options.fixed : true,\n    'immutable': 'immutable' in options ? options.immutable : true,\n    'rearg': 'rearg' in options ? options.rearg : true\n  };\n\n  var defaultHolder = isLib ? func : fallbackHolder,\n      forceCurry = ('curry' in options) && options.curry,\n      forceFixed = ('fixed' in options) && options.fixed,\n      forceRearg = ('rearg' in options) && options.rearg,\n      pristine = isLib ? func.runInContext() : undefined;\n\n  var helpers = isLib ? func : {\n    'ary': util.ary,\n    'assign': util.assign,\n    'clone': util.clone,\n    'curry': util.curry,\n    'forEach': util.forEach,\n    'isArray': util.isArray,\n    'isError': util.isError,\n    'isFunction': util.isFunction,\n    'isWeakMap': util.isWeakMap,\n    'iteratee': util.iteratee,\n    'keys': util.keys,\n    'rearg': util.rearg,\n    'toInteger': util.toInteger,\n    'toPath': util.toPath\n  };\n\n  var ary = helpers.ary,\n      assign = helpers.assign,\n      clone = helpers.clone,\n      curry = helpers.curry,\n      each = helpers.forEach,\n      isArray = helpers.isArray,\n      isError = helpers.isError,\n      isFunction = helpers.isFunction,\n      isWeakMap = helpers.isWeakMap,\n      keys = helpers.keys,\n      rearg = helpers.rearg,\n      toInteger = helpers.toInteger,\n      toPath = helpers.toPath;\n\n  var aryMethodKeys = keys(mapping.aryMethod);\n\n  var wrappers = {\n    'castArray': function(castArray) {\n      return function() {\n        var value = arguments[0];\n        return isArray(value)\n          ? castArray(cloneArray(value))\n          : castArray.apply(undefined, arguments);\n      };\n    },\n    'iteratee': function(iteratee) {\n      return function() {\n        var func = arguments[0],\n            arity = arguments[1],\n            result = iteratee(func, arity),\n            length = result.length;\n\n        if (config.cap && typeof arity == 'number') {\n          arity = arity > 2 ? (arity - 2) : 1;\n          return (length && length <= arity) ? result : baseAry(result, arity);\n        }\n        return result;\n      };\n    },\n    'mixin': function(mixin) {\n      return function(source) {\n        var func = this;\n        if (!isFunction(func)) {\n          return mixin(func, Object(source));\n        }\n        var pairs = [];\n        each(keys(source), function(key) {\n          if (isFunction(source[key])) {\n            pairs.push([key, func.prototype[key]]);\n          }\n        });\n\n        mixin(func, Object(source));\n\n        each(pairs, function(pair) {\n          var value = pair[1];\n          if (isFunction(value)) {\n            func.prototype[pair[0]] = value;\n          } else {\n            delete func.prototype[pair[0]];\n          }\n        });\n        return func;\n      };\n    },\n    'nthArg': function(nthArg) {\n      return function(n) {\n        var arity = n < 0 ? 1 : (toInteger(n) + 1);\n        return curry(nthArg(n), arity);\n      };\n    },\n    'rearg': function(rearg) {\n      return function(func, indexes) {\n        var arity = indexes ? indexes.length : 0;\n        return curry(rearg(func, indexes), arity);\n      };\n    },\n    'runInContext': function(runInContext) {\n      return function(context) {\n        return baseConvert(util, runInContext(context), options);\n      };\n    }\n  };\n\n  /*--------------------------------------------------------------------------*/\n\n  /**\n   * Casts `func` to a function with an arity capped iteratee if needed.\n   *\n   * @private\n   * @param {string} name The name of the function to inspect.\n   * @param {Function} func The function to inspect.\n   * @returns {Function} Returns the cast function.\n   */\n  function castCap(name, func) {\n    if (config.cap) {\n      var indexes = mapping.iterateeRearg[name];\n      if (indexes) {\n        return iterateeRearg(func, indexes);\n      }\n      var n = !isLib && mapping.iterateeAry[name];\n      if (n) {\n        return iterateeAry(func, n);\n      }\n    }\n    return func;\n  }\n\n  /**\n   * Casts `func` to a curried function if needed.\n   *\n   * @private\n   * @param {string} name The name of the function to inspect.\n   * @param {Function} func The function to inspect.\n   * @param {number} n The arity of `func`.\n   * @returns {Function} Returns the cast function.\n   */\n  function castCurry(name, func, n) {\n    return (forceCurry || (config.curry && n > 1))\n      ? curry(func, n)\n      : func;\n  }\n\n  /**\n   * Casts `func` to a fixed arity function if needed.\n   *\n   * @private\n   * @param {string} name The name of the function to inspect.\n   * @param {Function} func The function to inspect.\n   * @param {number} n The arity cap.\n   * @returns {Function} Returns the cast function.\n   */\n  function castFixed(name, func, n) {\n    if (config.fixed && (forceFixed || !mapping.skipFixed[name])) {\n      var data = mapping.methodSpread[name],\n          start = data && data.start;\n\n      return start  === undefined ? ary(func, n) : flatSpread(func, start);\n    }\n    return func;\n  }\n\n  /**\n   * Casts `func` to an rearged function if needed.\n   *\n   * @private\n   * @param {string} name The name of the function to inspect.\n   * @param {Function} func The function to inspect.\n   * @param {number} n The arity of `func`.\n   * @returns {Function} Returns the cast function.\n   */\n  function castRearg(name, func, n) {\n    return (config.rearg && n > 1 && (forceRearg || !mapping.skipRearg[name]))\n      ? rearg(func, mapping.methodRearg[name] || mapping.aryRearg[n])\n      : func;\n  }\n\n  /**\n   * Creates a clone of `object` by `path`.\n   *\n   * @private\n   * @param {Object} object The object to clone.\n   * @param {Array|string} path The path to clone by.\n   * @returns {Object} Returns the cloned object.\n   */\n  function cloneByPath(object, path) {\n    path = toPath(path);\n\n    var index = -1,\n        length = path.length,\n        lastIndex = length - 1,\n        result = clone(Object(object)),\n        nested = result;\n\n    while (nested != null && ++index < length) {\n      var key = path[index],\n          value = nested[key];\n\n      if (value != null &&\n          !(isFunction(value) || isError(value) || isWeakMap(value))) {\n        nested[key] = clone(index == lastIndex ? value : Object(value));\n      }\n      nested = nested[key];\n    }\n    return result;\n  }\n\n  /**\n   * Converts `lodash` to an immutable auto-curried iteratee-first data-last\n   * version with conversion `options` applied.\n   *\n   * @param {Object} [options] The options object. See `baseConvert` for more details.\n   * @returns {Function} Returns the converted `lodash`.\n   */\n  function convertLib(options) {\n    return _.runInContext.convert(options)(undefined);\n  }\n\n  /**\n   * Create a converter function for `func` of `name`.\n   *\n   * @param {string} name The name of the function to convert.\n   * @param {Function} func The function to convert.\n   * @returns {Function} Returns the new converter function.\n   */\n  function createConverter(name, func) {\n    var realName = mapping.aliasToReal[name] || name,\n        methodName = mapping.remap[realName] || realName,\n        oldOptions = options;\n\n    return function(options) {\n      var newUtil = isLib ? pristine : helpers,\n          newFunc = isLib ? pristine[methodName] : func,\n          newOptions = assign(assign({}, oldOptions), options);\n\n      return baseConvert(newUtil, realName, newFunc, newOptions);\n    };\n  }\n\n  /**\n   * Creates a function that wraps `func` to invoke its iteratee, with up to `n`\n   * arguments, ignoring any additional arguments.\n   *\n   * @private\n   * @param {Function} func The function to cap iteratee arguments for.\n   * @param {number} n The arity cap.\n   * @returns {Function} Returns the new function.\n   */\n  function iterateeAry(func, n) {\n    return overArg(func, function(func) {\n      return typeof func == 'function' ? baseAry(func, n) : func;\n    });\n  }\n\n  /**\n   * Creates a function that wraps `func` to invoke its iteratee with arguments\n   * arranged according to the specified `indexes` where the argument value at\n   * the first index is provided as the first argument, the argument value at\n   * the second index is provided as the second argument, and so on.\n   *\n   * @private\n   * @param {Function} func The function to rearrange iteratee arguments for.\n   * @param {number[]} indexes The arranged argument indexes.\n   * @returns {Function} Returns the new function.\n   */\n  function iterateeRearg(func, indexes) {\n    return overArg(func, function(func) {\n      var n = indexes.length;\n      return baseArity(rearg(baseAry(func, n), indexes), n);\n    });\n  }\n\n  /**\n   * Creates a function that invokes `func` with its first argument transformed.\n   *\n   * @private\n   * @param {Function} func The function to wrap.\n   * @param {Function} transform The argument transform.\n   * @returns {Function} Returns the new function.\n   */\n  function overArg(func, transform) {\n    return function() {\n      var length = arguments.length;\n      if (!length) {\n        return func();\n      }\n      var args = Array(length);\n      while (length--) {\n        args[length] = arguments[length];\n      }\n      var index = config.rearg ? 0 : (length - 1);\n      args[index] = transform(args[index]);\n      return func.apply(undefined, args);\n    };\n  }\n\n  /**\n   * Creates a function that wraps `func` and applys the conversions\n   * rules by `name`.\n   *\n   * @private\n   * @param {string} name The name of the function to wrap.\n   * @param {Function} func The function to wrap.\n   * @returns {Function} Returns the converted function.\n   */\n  function wrap(name, func, placeholder) {\n    var result,\n        realName = mapping.aliasToReal[name] || name,\n        wrapped = func,\n        wrapper = wrappers[realName];\n\n    if (wrapper) {\n      wrapped = wrapper(func);\n    }\n    else if (config.immutable) {\n      if (mapping.mutate.array[realName]) {\n        wrapped = wrapImmutable(func, cloneArray);\n      }\n      else if (mapping.mutate.object[realName]) {\n        wrapped = wrapImmutable(func, createCloner(func));\n      }\n      else if (mapping.mutate.set[realName]) {\n        wrapped = wrapImmutable(func, cloneByPath);\n      }\n    }\n    each(aryMethodKeys, function(aryKey) {\n      each(mapping.aryMethod[aryKey], function(otherName) {\n        if (realName == otherName) {\n          var data = mapping.methodSpread[realName],\n              afterRearg = data && data.afterRearg;\n\n          result = afterRearg\n            ? castFixed(realName, castRearg(realName, wrapped, aryKey), aryKey)\n            : castRearg(realName, castFixed(realName, wrapped, aryKey), aryKey);\n\n          result = castCap(realName, result);\n          result = castCurry(realName, result, aryKey);\n          return false;\n        }\n      });\n      return !result;\n    });\n\n    result || (result = wrapped);\n    if (result == func) {\n      result = forceCurry ? curry(result, 1) : function() {\n        return func.apply(this, arguments);\n      };\n    }\n    result.convert = createConverter(realName, func);\n    result.placeholder = func.placeholder = placeholder;\n\n    return result;\n  }\n\n  /*--------------------------------------------------------------------------*/\n\n  if (!isObj) {\n    return wrap(name, func, defaultHolder);\n  }\n  var _ = func;\n\n  // Convert methods by ary cap.\n  var pairs = [];\n  each(aryMethodKeys, function(aryKey) {\n    each(mapping.aryMethod[aryKey], function(key) {\n      var func = _[mapping.remap[key] || key];\n      if (func) {\n        pairs.push([key, wrap(key, func, _)]);\n      }\n    });\n  });\n\n  // Convert remaining methods.\n  each(keys(_), function(key) {\n    var func = _[key];\n    if (typeof func == 'function') {\n      var length = pairs.length;\n      while (length--) {\n        if (pairs[length][0] == key) {\n          return;\n        }\n      }\n      func.convert = createConverter(key, func);\n      pairs.push([key, func]);\n    }\n  });\n\n  // Assign to `_` leaving `_.prototype` unchanged to allow chaining.\n  each(pairs, function(pair) {\n    _[pair[0]] = pair[1];\n  });\n\n  _.convert = convertLib;\n  _.placeholder = _;\n\n  // Assign aliases.\n  each(keys(_), function(key) {\n    each(mapping.realToAlias[key] || [], function(alias) {\n      _[alias] = _[key];\n    });\n  });\n\n  return _;\n}\n\nmodule.exports = baseConvert;\n","/** Used to map aliases to their real names. */\nexports.aliasToReal = {\n\n  // Lodash aliases.\n  'each': 'forEach',\n  'eachRight': 'forEachRight',\n  'entries': 'toPairs',\n  'entriesIn': 'toPairsIn',\n  'extend': 'assignIn',\n  'extendAll': 'assignInAll',\n  'extendAllWith': 'assignInAllWith',\n  'extendWith': 'assignInWith',\n  'first': 'head',\n\n  // Methods that are curried variants of others.\n  'conforms': 'conformsTo',\n  'matches': 'isMatch',\n  'property': 'get',\n\n  // Ramda aliases.\n  '__': 'placeholder',\n  'F': 'stubFalse',\n  'T': 'stubTrue',\n  'all': 'every',\n  'allPass': 'overEvery',\n  'always': 'constant',\n  'any': 'some',\n  'anyPass': 'overSome',\n  'apply': 'spread',\n  'assoc': 'set',\n  'assocPath': 'set',\n  'complement': 'negate',\n  'compose': 'flowRight',\n  'contains': 'includes',\n  'dissoc': 'unset',\n  'dissocPath': 'unset',\n  'dropLast': 'dropRight',\n  'dropLastWhile': 'dropRightWhile',\n  'equals': 'isEqual',\n  'identical': 'eq',\n  'indexBy': 'keyBy',\n  'init': 'initial',\n  'invertObj': 'invert',\n  'juxt': 'over',\n  'omitAll': 'omit',\n  'nAry': 'ary',\n  'path': 'get',\n  'pathEq': 'matchesProperty',\n  'pathOr': 'getOr',\n  'paths': 'at',\n  'pickAll': 'pick',\n  'pipe': 'flow',\n  'pluck': 'map',\n  'prop': 'get',\n  'propEq': 'matchesProperty',\n  'propOr': 'getOr',\n  'props': 'at',\n  'symmetricDifference': 'xor',\n  'symmetricDifferenceBy': 'xorBy',\n  'symmetricDifferenceWith': 'xorWith',\n  'takeLast': 'takeRight',\n  'takeLastWhile': 'takeRightWhile',\n  'unapply': 'rest',\n  'unnest': 'flatten',\n  'useWith': 'overArgs',\n  'where': 'conformsTo',\n  'whereEq': 'isMatch',\n  'zipObj': 'zipObject'\n};\n\n/** Used to map ary to method names. */\nexports.aryMethod = {\n  '1': [\n    'assignAll', 'assignInAll', 'attempt', 'castArray', 'ceil', 'create',\n    'curry', 'curryRight', 'defaultsAll', 'defaultsDeepAll', 'floor', 'flow',\n    'flowRight', 'fromPairs', 'invert', 'iteratee', 'memoize', 'method', 'mergeAll',\n    'methodOf', 'mixin', 'nthArg', 'over', 'overEvery', 'overSome','rest', 'reverse',\n    'round', 'runInContext', 'spread', 'template', 'trim', 'trimEnd', 'trimStart',\n    'uniqueId', 'words', 'zipAll'\n  ],\n  '2': [\n    'add', 'after', 'ary', 'assign', 'assignAllWith', 'assignIn', 'assignInAllWith',\n    'at', 'before', 'bind', 'bindAll', 'bindKey', 'chunk', 'cloneDeepWith',\n    'cloneWith', 'concat', 'conformsTo', 'countBy', 'curryN', 'curryRightN',\n    'debounce', 'defaults', 'defaultsDeep', 'defaultTo', 'delay', 'difference',\n    'divide', 'drop', 'dropRight', 'dropRightWhile', 'dropWhile', 'endsWith', 'eq',\n    'every', 'filter', 'find', 'findIndex', 'findKey', 'findLast', 'findLastIndex',\n    'findLastKey', 'flatMap', 'flatMapDeep', 'flattenDepth', 'forEach',\n    'forEachRight', 'forIn', 'forInRight', 'forOwn', 'forOwnRight', 'get',\n    'groupBy', 'gt', 'gte', 'has', 'hasIn', 'includes', 'indexOf', 'intersection',\n    'invertBy', 'invoke', 'invokeMap', 'isEqual', 'isMatch', 'join', 'keyBy',\n    'lastIndexOf', 'lt', 'lte', 'map', 'mapKeys', 'mapValues', 'matchesProperty',\n    'maxBy', 'meanBy', 'merge', 'mergeAllWith', 'minBy', 'multiply', 'nth', 'omit',\n    'omitBy', 'overArgs', 'pad', 'padEnd', 'padStart', 'parseInt', 'partial',\n    'partialRight', 'partition', 'pick', 'pickBy', 'propertyOf', 'pull', 'pullAll',\n    'pullAt', 'random', 'range', 'rangeRight', 'rearg', 'reject', 'remove',\n    'repeat', 'restFrom', 'result', 'sampleSize', 'some', 'sortBy', 'sortedIndex',\n    'sortedIndexOf', 'sortedLastIndex', 'sortedLastIndexOf', 'sortedUniqBy',\n    'split', 'spreadFrom', 'startsWith', 'subtract', 'sumBy', 'take', 'takeRight',\n    'takeRightWhile', 'takeWhile', 'tap', 'throttle', 'thru', 'times', 'trimChars',\n    'trimCharsEnd', 'trimCharsStart', 'truncate', 'union', 'uniqBy', 'uniqWith',\n    'unset', 'unzipWith', 'without', 'wrap', 'xor', 'zip', 'zipObject',\n    'zipObjectDeep'\n  ],\n  '3': [\n    'assignInWith', 'assignWith', 'clamp', 'differenceBy', 'differenceWith',\n    'findFrom', 'findIndexFrom', 'findLastFrom', 'findLastIndexFrom', 'getOr',\n    'includesFrom', 'indexOfFrom', 'inRange', 'intersectionBy', 'intersectionWith',\n    'invokeArgs', 'invokeArgsMap', 'isEqualWith', 'isMatchWith', 'flatMapDepth',\n    'lastIndexOfFrom', 'mergeWith', 'orderBy', 'padChars', 'padCharsEnd',\n    'padCharsStart', 'pullAllBy', 'pullAllWith', 'rangeStep', 'rangeStepRight',\n    'reduce', 'reduceRight', 'replace', 'set', 'slice', 'sortedIndexBy',\n    'sortedLastIndexBy', 'transform', 'unionBy', 'unionWith', 'update', 'xorBy',\n    'xorWith', 'zipWith'\n  ],\n  '4': [\n    'fill', 'setWith', 'updateWith'\n  ]\n};\n\n/** Used to map ary to rearg configs. */\nexports.aryRearg = {\n  '2': [1, 0],\n  '3': [2, 0, 1],\n  '4': [3, 2, 0, 1]\n};\n\n/** Used to map method names to their iteratee ary. */\nexports.iterateeAry = {\n  'dropRightWhile': 1,\n  'dropWhile': 1,\n  'every': 1,\n  'filter': 1,\n  'find': 1,\n  'findFrom': 1,\n  'findIndex': 1,\n  'findIndexFrom': 1,\n  'findKey': 1,\n  'findLast': 1,\n  'findLastFrom': 1,\n  'findLastIndex': 1,\n  'findLastIndexFrom': 1,\n  'findLastKey': 1,\n  'flatMap': 1,\n  'flatMapDeep': 1,\n  'flatMapDepth': 1,\n  'forEach': 1,\n  'forEachRight': 1,\n  'forIn': 1,\n  'forInRight': 1,\n  'forOwn': 1,\n  'forOwnRight': 1,\n  'map': 1,\n  'mapKeys': 1,\n  'mapValues': 1,\n  'partition': 1,\n  'reduce': 2,\n  'reduceRight': 2,\n  'reject': 1,\n  'remove': 1,\n  'some': 1,\n  'takeRightWhile': 1,\n  'takeWhile': 1,\n  'times': 1,\n  'transform': 2\n};\n\n/** Used to map method names to iteratee rearg configs. */\nexports.iterateeRearg = {\n  'mapKeys': [1],\n  'reduceRight': [1, 0]\n};\n\n/** Used to map method names to rearg configs. */\nexports.methodRearg = {\n  'assignInAllWith': [1, 0],\n  'assignInWith': [1, 2, 0],\n  'assignAllWith': [1, 0],\n  'assignWith': [1, 2, 0],\n  'differenceBy': [1, 2, 0],\n  'differenceWith': [1, 2, 0],\n  'getOr': [2, 1, 0],\n  'intersectionBy': [1, 2, 0],\n  'intersectionWith': [1, 2, 0],\n  'isEqualWith': [1, 2, 0],\n  'isMatchWith': [2, 1, 0],\n  'mergeAllWith': [1, 0],\n  'mergeWith': [1, 2, 0],\n  'padChars': [2, 1, 0],\n  'padCharsEnd': [2, 1, 0],\n  'padCharsStart': [2, 1, 0],\n  'pullAllBy': [2, 1, 0],\n  'pullAllWith': [2, 1, 0],\n  'rangeStep': [1, 2, 0],\n  'rangeStepRight': [1, 2, 0],\n  'setWith': [3, 1, 2, 0],\n  'sortedIndexBy': [2, 1, 0],\n  'sortedLastIndexBy': [2, 1, 0],\n  'unionBy': [1, 2, 0],\n  'unionWith': [1, 2, 0],\n  'updateWith': [3, 1, 2, 0],\n  'xorBy': [1, 2, 0],\n  'xorWith': [1, 2, 0],\n  'zipWith': [1, 2, 0]\n};\n\n/** Used to map method names to spread configs. */\nexports.methodSpread = {\n  'assignAll': { 'start': 0 },\n  'assignAllWith': { 'start': 0 },\n  'assignInAll': { 'start': 0 },\n  'assignInAllWith': { 'start': 0 },\n  'defaultsAll': { 'start': 0 },\n  'defaultsDeepAll': { 'start': 0 },\n  'invokeArgs': { 'start': 2 },\n  'invokeArgsMap': { 'start': 2 },\n  'mergeAll': { 'start': 0 },\n  'mergeAllWith': { 'start': 0 },\n  'partial': { 'start': 1 },\n  'partialRight': { 'start': 1 },\n  'without': { 'start': 1 },\n  'zipAll': { 'start': 0 }\n};\n\n/** Used to identify methods which mutate arrays or objects. */\nexports.mutate = {\n  'array': {\n    'fill': true,\n    'pull': true,\n    'pullAll': true,\n    'pullAllBy': true,\n    'pullAllWith': true,\n    'pullAt': true,\n    'remove': true,\n    'reverse': true\n  },\n  'object': {\n    'assign': true,\n    'assignAll': true,\n    'assignAllWith': true,\n    'assignIn': true,\n    'assignInAll': true,\n    'assignInAllWith': true,\n    'assignInWith': true,\n    'assignWith': true,\n    'defaults': true,\n    'defaultsAll': true,\n    'defaultsDeep': true,\n    'defaultsDeepAll': true,\n    'merge': true,\n    'mergeAll': true,\n    'mergeAllWith': true,\n    'mergeWith': true,\n  },\n  'set': {\n    'set': true,\n    'setWith': true,\n    'unset': true,\n    'update': true,\n    'updateWith': true\n  }\n};\n\n/** Used to map real names to their aliases. */\nexports.realToAlias = (function() {\n  var hasOwnProperty = Object.prototype.hasOwnProperty,\n      object = exports.aliasToReal,\n      result = {};\n\n  for (var key in object) {\n    var value = object[key];\n    if (hasOwnProperty.call(result, value)) {\n      result[value].push(key);\n    } else {\n      result[value] = [key];\n    }\n  }\n  return result;\n}());\n\n/** Used to map method names to other names. */\nexports.remap = {\n  'assignAll': 'assign',\n  'assignAllWith': 'assignWith',\n  'assignInAll': 'assignIn',\n  'assignInAllWith': 'assignInWith',\n  'curryN': 'curry',\n  'curryRightN': 'curryRight',\n  'defaultsAll': 'defaults',\n  'defaultsDeepAll': 'defaultsDeep',\n  'findFrom': 'find',\n  'findIndexFrom': 'findIndex',\n  'findLastFrom': 'findLast',\n  'findLastIndexFrom': 'findLastIndex',\n  'getOr': 'get',\n  'includesFrom': 'includes',\n  'indexOfFrom': 'indexOf',\n  'invokeArgs': 'invoke',\n  'invokeArgsMap': 'invokeMap',\n  'lastIndexOfFrom': 'lastIndexOf',\n  'mergeAll': 'merge',\n  'mergeAllWith': 'mergeWith',\n  'padChars': 'pad',\n  'padCharsEnd': 'padEnd',\n  'padCharsStart': 'padStart',\n  'propertyOf': 'get',\n  'rangeStep': 'range',\n  'rangeStepRight': 'rangeRight',\n  'restFrom': 'rest',\n  'spreadFrom': 'spread',\n  'trimChars': 'trim',\n  'trimCharsEnd': 'trimEnd',\n  'trimCharsStart': 'trimStart',\n  'zipAll': 'zip'\n};\n\n/** Used to track methods that skip fixing their arity. */\nexports.skipFixed = {\n  'castArray': true,\n  'flow': true,\n  'flowRight': true,\n  'iteratee': true,\n  'mixin': true,\n  'rearg': true,\n  'runInContext': true\n};\n\n/** Used to track methods that skip rearranging arguments. */\nexports.skipRearg = {\n  'add': true,\n  'assign': true,\n  'assignIn': true,\n  'bind': true,\n  'bindKey': true,\n  'concat': true,\n  'difference': true,\n  'divide': true,\n  'eq': true,\n  'gt': true,\n  'gte': true,\n  'isEqual': true,\n  'lt': true,\n  'lte': true,\n  'matchesProperty': true,\n  'merge': true,\n  'multiply': true,\n  'overArgs': true,\n  'partial': true,\n  'partialRight': true,\n  'propertyOf': true,\n  'random': true,\n  'range': true,\n  'rangeRight': true,\n  'subtract': true,\n  'zip': true,\n  'zipObject': true,\n  'zipObjectDeep': true\n};\n","/**\n * The default argument placeholder value for methods.\n *\n * @type {Object}\n */\nmodule.exports = {};\n","var baseIsArguments = require('./_baseIsArguments'),\n    isObjectLike = require('./isObjectLike');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Built-in value references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n *  else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\nvar isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {\n  return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&\n    !propertyIsEnumerable.call(value, 'callee');\n};\n\nmodule.exports = isArguments;\n","/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\nmodule.exports = isArray;\n","var isFunction = require('./isFunction'),\n    isLength = require('./isLength');\n\n/**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\nfunction isArrayLike(value) {\n  return value != null && isLength(value.length) && !isFunction(value);\n}\n\nmodule.exports = isArrayLike;\n","var root = require('./_root'),\n    stubFalse = require('./stubFalse');\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Built-in value references. */\nvar Buffer = moduleExports ? root.Buffer : undefined;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined;\n\n/**\n * Checks if `value` is a buffer.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.\n * @example\n *\n * _.isBuffer(new Buffer(2));\n * // => true\n *\n * _.isBuffer(new Uint8Array(2));\n * // => false\n */\nvar isBuffer = nativeIsBuffer || stubFalse;\n\nmodule.exports = isBuffer;\n","var baseGetTag = require('./_baseGetTag'),\n    isObject = require('./isObject');\n\n/** `Object#toString` result references. */\nvar asyncTag = '[object AsyncFunction]',\n    funcTag = '[object Function]',\n    genTag = '[object GeneratorFunction]',\n    proxyTag = '[object Proxy]';\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n  if (!isObject(value)) {\n    return false;\n  }\n  // The use of `Object#toString` avoids issues with the `typeof` operator\n  // in Safari 9 which returns 'object' for typed arrays and other constructors.\n  var tag = baseGetTag(value);\n  return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n}\n\nmodule.exports = isFunction;\n","/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\nfunction isLength(value) {\n  return typeof value == 'number' &&\n    value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\nmodule.exports = isLength;\n","var baseIsMap = require('./_baseIsMap'),\n    baseUnary = require('./_baseUnary'),\n    nodeUtil = require('./_nodeUtil');\n\n/* Node.js helper references. */\nvar nodeIsMap = nodeUtil && nodeUtil.isMap;\n\n/**\n * Checks if `value` is classified as a `Map` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n * @example\n *\n * _.isMap(new Map);\n * // => true\n *\n * _.isMap(new WeakMap);\n * // => false\n */\nvar isMap = nodeIsMap ? baseUnary(nodeIsMap) : baseIsMap;\n\nmodule.exports = isMap;\n","/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n  var type = typeof value;\n  return value != null && (type == 'object' || type == 'function');\n}\n\nmodule.exports = isObject;\n","/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n  return value != null && typeof value == 'object';\n}\n\nmodule.exports = isObjectLike;\n","var baseIsSet = require('./_baseIsSet'),\n    baseUnary = require('./_baseUnary'),\n    nodeUtil = require('./_nodeUtil');\n\n/* Node.js helper references. */\nvar nodeIsSet = nodeUtil && nodeUtil.isSet;\n\n/**\n * Checks if `value` is classified as a `Set` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n * @example\n *\n * _.isSet(new Set);\n * // => true\n *\n * _.isSet(new WeakSet);\n * // => false\n */\nvar isSet = nodeIsSet ? baseUnary(nodeIsSet) : baseIsSet;\n\nmodule.exports = isSet;\n","var baseGetTag = require('./_baseGetTag'),\n    isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n  return typeof value == 'symbol' ||\n    (isObjectLike(value) && baseGetTag(value) == symbolTag);\n}\n\nmodule.exports = isSymbol;\n","var baseIsTypedArray = require('./_baseIsTypedArray'),\n    baseUnary = require('./_baseUnary'),\n    nodeUtil = require('./_nodeUtil');\n\n/* Node.js helper references. */\nvar nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\n\n/**\n * Checks if `value` is classified as a typed array.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n * @example\n *\n * _.isTypedArray(new Uint8Array);\n * // => true\n *\n * _.isTypedArray([]);\n * // => false\n */\nvar isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\n\nmodule.exports = isTypedArray;\n","var arrayLikeKeys = require('./_arrayLikeKeys'),\n    baseKeys = require('./_baseKeys'),\n    isArrayLike = require('./isArrayLike');\n\n/**\n * Creates an array of the own enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects. See the\n * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * for more details.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n *   this.a = 1;\n *   this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keys(new Foo);\n * // => ['a', 'b'] (iteration order is not guaranteed)\n *\n * _.keys('hi');\n * // => ['0', '1']\n */\nfunction keys(object) {\n  return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n}\n\nmodule.exports = keys;\n","var arrayLikeKeys = require('./_arrayLikeKeys'),\n    baseKeysIn = require('./_baseKeysIn'),\n    isArrayLike = require('./isArrayLike');\n\n/**\n * Creates an array of the own and inherited enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n *   this.a = 1;\n *   this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keysIn(new Foo);\n * // => ['a', 'b', 'c'] (iteration order is not guaranteed)\n */\nfunction keysIn(object) {\n  return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object);\n}\n\nmodule.exports = keysIn;\n","/**\n * @license\n * Lodash <https://lodash.com/>\n * Copyright OpenJS Foundation and other contributors <https://openjsf.org/>\n * Released under MIT license <https://lodash.com/license>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n(function(){function n(n,t,r){switch(r.length){case 0:return n.call(t);case 1:return n.call(t,r[0]);case 2:return n.call(t,r[0],r[1]);case 3:return n.call(t,r[0],r[1],r[2])}return n.apply(t,r)}function t(n,t,r,e){for(var u=-1,i=null==n?0:n.length;++u<i;){var o=n[u];t(e,o,r(o),n)}return e}function r(n,t){for(var r=-1,e=null==n?0:n.length;++r<e&&t(n[r],r,n)!==!1;);return n}function e(n,t){for(var r=null==n?0:n.length;r--&&t(n[r],r,n)!==!1;);return n}function u(n,t){for(var r=-1,e=null==n?0:n.length;++r<e;)if(!t(n[r],r,n))return!1;\nreturn!0}function i(n,t){for(var r=-1,e=null==n?0:n.length,u=0,i=[];++r<e;){var o=n[r];t(o,r,n)&&(i[u++]=o)}return i}function o(n,t){return!!(null==n?0:n.length)&&y(n,t,0)>-1}function f(n,t,r){for(var e=-1,u=null==n?0:n.length;++e<u;)if(r(t,n[e]))return!0;return!1}function c(n,t){for(var r=-1,e=null==n?0:n.length,u=Array(e);++r<e;)u[r]=t(n[r],r,n);return u}function a(n,t){for(var r=-1,e=t.length,u=n.length;++r<e;)n[u+r]=t[r];return n}function l(n,t,r,e){var u=-1,i=null==n?0:n.length;for(e&&i&&(r=n[++u]);++u<i;)r=t(r,n[u],u,n);\nreturn r}function s(n,t,r,e){var u=null==n?0:n.length;for(e&&u&&(r=n[--u]);u--;)r=t(r,n[u],u,n);return r}function h(n,t){for(var r=-1,e=null==n?0:n.length;++r<e;)if(t(n[r],r,n))return!0;return!1}function p(n){return n.split(\"\")}function _(n){return n.match($t)||[]}function v(n,t,r){var e;return r(n,function(n,r,u){if(t(n,r,u))return e=r,!1}),e}function g(n,t,r,e){for(var u=n.length,i=r+(e?1:-1);e?i--:++i<u;)if(t(n[i],i,n))return i;return-1}function y(n,t,r){return t===t?Z(n,t,r):g(n,b,r)}function d(n,t,r,e){\nfor(var u=r-1,i=n.length;++u<i;)if(e(n[u],t))return u;return-1}function b(n){return n!==n}function w(n,t){var r=null==n?0:n.length;return r?k(n,t)/r:Cn}function m(n){return function(t){return null==t?X:t[n]}}function x(n){return function(t){return null==n?X:n[t]}}function j(n,t,r,e,u){return u(n,function(n,u,i){r=e?(e=!1,n):t(r,n,u,i)}),r}function A(n,t){var r=n.length;for(n.sort(t);r--;)n[r]=n[r].value;return n}function k(n,t){for(var r,e=-1,u=n.length;++e<u;){var i=t(n[e]);i!==X&&(r=r===X?i:r+i);\n}return r}function O(n,t){for(var r=-1,e=Array(n);++r<n;)e[r]=t(r);return e}function I(n,t){return c(t,function(t){return[t,n[t]]})}function R(n){return n?n.slice(0,H(n)+1).replace(Lt,\"\"):n}function z(n){return function(t){return n(t)}}function E(n,t){return c(t,function(t){return n[t]})}function S(n,t){return n.has(t)}function W(n,t){for(var r=-1,e=n.length;++r<e&&y(t,n[r],0)>-1;);return r}function L(n,t){for(var r=n.length;r--&&y(t,n[r],0)>-1;);return r}function C(n,t){for(var r=n.length,e=0;r--;)n[r]===t&&++e;\nreturn e}function U(n){return\"\\\\\"+Yr[n]}function B(n,t){return null==n?X:n[t]}function T(n){return Nr.test(n)}function $(n){return Pr.test(n)}function D(n){for(var t,r=[];!(t=n.next()).done;)r.push(t.value);return r}function M(n){var t=-1,r=Array(n.size);return n.forEach(function(n,e){r[++t]=[e,n]}),r}function F(n,t){return function(r){return n(t(r))}}function N(n,t){for(var r=-1,e=n.length,u=0,i=[];++r<e;){var o=n[r];o!==t&&o!==cn||(n[r]=cn,i[u++]=r)}return i}function P(n){var t=-1,r=Array(n.size);\nreturn n.forEach(function(n){r[++t]=n}),r}function q(n){var t=-1,r=Array(n.size);return n.forEach(function(n){r[++t]=[n,n]}),r}function Z(n,t,r){for(var e=r-1,u=n.length;++e<u;)if(n[e]===t)return e;return-1}function K(n,t,r){for(var e=r+1;e--;)if(n[e]===t)return e;return e}function V(n){return T(n)?J(n):_e(n)}function G(n){return T(n)?Y(n):p(n)}function H(n){for(var t=n.length;t--&&Ct.test(n.charAt(t)););return t}function J(n){for(var t=Mr.lastIndex=0;Mr.test(n);)++t;return t}function Y(n){return n.match(Mr)||[];\n}function Q(n){return n.match(Fr)||[]}var X,nn=\"4.17.21\",tn=200,rn=\"Unsupported core-js use. Try https://npms.io/search?q=ponyfill.\",en=\"Expected a function\",un=\"Invalid `variable` option passed into `_.template`\",on=\"__lodash_hash_undefined__\",fn=500,cn=\"__lodash_placeholder__\",an=1,ln=2,sn=4,hn=1,pn=2,_n=1,vn=2,gn=4,yn=8,dn=16,bn=32,wn=64,mn=128,xn=256,jn=512,An=30,kn=\"...\",On=800,In=16,Rn=1,zn=2,En=3,Sn=1/0,Wn=9007199254740991,Ln=1.7976931348623157e308,Cn=NaN,Un=4294967295,Bn=Un-1,Tn=Un>>>1,$n=[[\"ary\",mn],[\"bind\",_n],[\"bindKey\",vn],[\"curry\",yn],[\"curryRight\",dn],[\"flip\",jn],[\"partial\",bn],[\"partialRight\",wn],[\"rearg\",xn]],Dn=\"[object Arguments]\",Mn=\"[object Array]\",Fn=\"[object AsyncFunction]\",Nn=\"[object Boolean]\",Pn=\"[object Date]\",qn=\"[object DOMException]\",Zn=\"[object Error]\",Kn=\"[object Function]\",Vn=\"[object GeneratorFunction]\",Gn=\"[object Map]\",Hn=\"[object Number]\",Jn=\"[object Null]\",Yn=\"[object Object]\",Qn=\"[object Promise]\",Xn=\"[object Proxy]\",nt=\"[object RegExp]\",tt=\"[object Set]\",rt=\"[object String]\",et=\"[object Symbol]\",ut=\"[object Undefined]\",it=\"[object WeakMap]\",ot=\"[object WeakSet]\",ft=\"[object ArrayBuffer]\",ct=\"[object DataView]\",at=\"[object Float32Array]\",lt=\"[object Float64Array]\",st=\"[object Int8Array]\",ht=\"[object Int16Array]\",pt=\"[object Int32Array]\",_t=\"[object Uint8Array]\",vt=\"[object Uint8ClampedArray]\",gt=\"[object Uint16Array]\",yt=\"[object Uint32Array]\",dt=/\\b__p \\+= '';/g,bt=/\\b(__p \\+=) '' \\+/g,wt=/(__e\\(.*?\\)|\\b__t\\)) \\+\\n'';/g,mt=/&(?:amp|lt|gt|quot|#39);/g,xt=/[&<>\"']/g,jt=RegExp(mt.source),At=RegExp(xt.source),kt=/<%-([\\s\\S]+?)%>/g,Ot=/<%([\\s\\S]+?)%>/g,It=/<%=([\\s\\S]+?)%>/g,Rt=/\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,zt=/^\\w*$/,Et=/[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g,St=/[\\\\^$.*+?()[\\]{}|]/g,Wt=RegExp(St.source),Lt=/^\\s+/,Ct=/\\s/,Ut=/\\{(?:\\n\\/\\* \\[wrapped with .+\\] \\*\\/)?\\n?/,Bt=/\\{\\n\\/\\* \\[wrapped with (.+)\\] \\*/,Tt=/,? & /,$t=/[^\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\x7f]+/g,Dt=/[()=,{}\\[\\]\\/\\s]/,Mt=/\\\\(\\\\)?/g,Ft=/\\$\\{([^\\\\}]*(?:\\\\.[^\\\\}]*)*)\\}/g,Nt=/\\w*$/,Pt=/^[-+]0x[0-9a-f]+$/i,qt=/^0b[01]+$/i,Zt=/^\\[object .+?Constructor\\]$/,Kt=/^0o[0-7]+$/i,Vt=/^(?:0|[1-9]\\d*)$/,Gt=/[\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\xff\\u0100-\\u017f]/g,Ht=/($^)/,Jt=/['\\n\\r\\u2028\\u2029\\\\]/g,Yt=\"\\\\ud800-\\\\udfff\",Qt=\"\\\\u0300-\\\\u036f\",Xt=\"\\\\ufe20-\\\\ufe2f\",nr=\"\\\\u20d0-\\\\u20ff\",tr=Qt+Xt+nr,rr=\"\\\\u2700-\\\\u27bf\",er=\"a-z\\\\xdf-\\\\xf6\\\\xf8-\\\\xff\",ur=\"\\\\xac\\\\xb1\\\\xd7\\\\xf7\",ir=\"\\\\x00-\\\\x2f\\\\x3a-\\\\x40\\\\x5b-\\\\x60\\\\x7b-\\\\xbf\",or=\"\\\\u2000-\\\\u206f\",fr=\" \\\\t\\\\x0b\\\\f\\\\xa0\\\\ufeff\\\\n\\\\r\\\\u2028\\\\u2029\\\\u1680\\\\u180e\\\\u2000\\\\u2001\\\\u2002\\\\u2003\\\\u2004\\\\u2005\\\\u2006\\\\u2007\\\\u2008\\\\u2009\\\\u200a\\\\u202f\\\\u205f\\\\u3000\",cr=\"A-Z\\\\xc0-\\\\xd6\\\\xd8-\\\\xde\",ar=\"\\\\ufe0e\\\\ufe0f\",lr=ur+ir+or+fr,sr=\"['\\u2019]\",hr=\"[\"+Yt+\"]\",pr=\"[\"+lr+\"]\",_r=\"[\"+tr+\"]\",vr=\"\\\\d+\",gr=\"[\"+rr+\"]\",yr=\"[\"+er+\"]\",dr=\"[^\"+Yt+lr+vr+rr+er+cr+\"]\",br=\"\\\\ud83c[\\\\udffb-\\\\udfff]\",wr=\"(?:\"+_r+\"|\"+br+\")\",mr=\"[^\"+Yt+\"]\",xr=\"(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}\",jr=\"[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff]\",Ar=\"[\"+cr+\"]\",kr=\"\\\\u200d\",Or=\"(?:\"+yr+\"|\"+dr+\")\",Ir=\"(?:\"+Ar+\"|\"+dr+\")\",Rr=\"(?:\"+sr+\"(?:d|ll|m|re|s|t|ve))?\",zr=\"(?:\"+sr+\"(?:D|LL|M|RE|S|T|VE))?\",Er=wr+\"?\",Sr=\"[\"+ar+\"]?\",Wr=\"(?:\"+kr+\"(?:\"+[mr,xr,jr].join(\"|\")+\")\"+Sr+Er+\")*\",Lr=\"\\\\d*(?:1st|2nd|3rd|(?![123])\\\\dth)(?=\\\\b|[A-Z_])\",Cr=\"\\\\d*(?:1ST|2ND|3RD|(?![123])\\\\dTH)(?=\\\\b|[a-z_])\",Ur=Sr+Er+Wr,Br=\"(?:\"+[gr,xr,jr].join(\"|\")+\")\"+Ur,Tr=\"(?:\"+[mr+_r+\"?\",_r,xr,jr,hr].join(\"|\")+\")\",$r=RegExp(sr,\"g\"),Dr=RegExp(_r,\"g\"),Mr=RegExp(br+\"(?=\"+br+\")|\"+Tr+Ur,\"g\"),Fr=RegExp([Ar+\"?\"+yr+\"+\"+Rr+\"(?=\"+[pr,Ar,\"$\"].join(\"|\")+\")\",Ir+\"+\"+zr+\"(?=\"+[pr,Ar+Or,\"$\"].join(\"|\")+\")\",Ar+\"?\"+Or+\"+\"+Rr,Ar+\"+\"+zr,Cr,Lr,vr,Br].join(\"|\"),\"g\"),Nr=RegExp(\"[\"+kr+Yt+tr+ar+\"]\"),Pr=/[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/,qr=[\"Array\",\"Buffer\",\"DataView\",\"Date\",\"Error\",\"Float32Array\",\"Float64Array\",\"Function\",\"Int8Array\",\"Int16Array\",\"Int32Array\",\"Map\",\"Math\",\"Object\",\"Promise\",\"RegExp\",\"Set\",\"String\",\"Symbol\",\"TypeError\",\"Uint8Array\",\"Uint8ClampedArray\",\"Uint16Array\",\"Uint32Array\",\"WeakMap\",\"_\",\"clearTimeout\",\"isFinite\",\"parseInt\",\"setTimeout\"],Zr=-1,Kr={};\nKr[at]=Kr[lt]=Kr[st]=Kr[ht]=Kr[pt]=Kr[_t]=Kr[vt]=Kr[gt]=Kr[yt]=!0,Kr[Dn]=Kr[Mn]=Kr[ft]=Kr[Nn]=Kr[ct]=Kr[Pn]=Kr[Zn]=Kr[Kn]=Kr[Gn]=Kr[Hn]=Kr[Yn]=Kr[nt]=Kr[tt]=Kr[rt]=Kr[it]=!1;var Vr={};Vr[Dn]=Vr[Mn]=Vr[ft]=Vr[ct]=Vr[Nn]=Vr[Pn]=Vr[at]=Vr[lt]=Vr[st]=Vr[ht]=Vr[pt]=Vr[Gn]=Vr[Hn]=Vr[Yn]=Vr[nt]=Vr[tt]=Vr[rt]=Vr[et]=Vr[_t]=Vr[vt]=Vr[gt]=Vr[yt]=!0,Vr[Zn]=Vr[Kn]=Vr[it]=!1;var Gr={\"\\xc0\":\"A\",\"\\xc1\":\"A\",\"\\xc2\":\"A\",\"\\xc3\":\"A\",\"\\xc4\":\"A\",\"\\xc5\":\"A\",\"\\xe0\":\"a\",\"\\xe1\":\"a\",\"\\xe2\":\"a\",\"\\xe3\":\"a\",\"\\xe4\":\"a\",\"\\xe5\":\"a\",\n\"\\xc7\":\"C\",\"\\xe7\":\"c\",\"\\xd0\":\"D\",\"\\xf0\":\"d\",\"\\xc8\":\"E\",\"\\xc9\":\"E\",\"\\xca\":\"E\",\"\\xcb\":\"E\",\"\\xe8\":\"e\",\"\\xe9\":\"e\",\"\\xea\":\"e\",\"\\xeb\":\"e\",\"\\xcc\":\"I\",\"\\xcd\":\"I\",\"\\xce\":\"I\",\"\\xcf\":\"I\",\"\\xec\":\"i\",\"\\xed\":\"i\",\"\\xee\":\"i\",\"\\xef\":\"i\",\"\\xd1\":\"N\",\"\\xf1\":\"n\",\"\\xd2\":\"O\",\"\\xd3\":\"O\",\"\\xd4\":\"O\",\"\\xd5\":\"O\",\"\\xd6\":\"O\",\"\\xd8\":\"O\",\"\\xf2\":\"o\",\"\\xf3\":\"o\",\"\\xf4\":\"o\",\"\\xf5\":\"o\",\"\\xf6\":\"o\",\"\\xf8\":\"o\",\"\\xd9\":\"U\",\"\\xda\":\"U\",\"\\xdb\":\"U\",\"\\xdc\":\"U\",\"\\xf9\":\"u\",\"\\xfa\":\"u\",\"\\xfb\":\"u\",\"\\xfc\":\"u\",\"\\xdd\":\"Y\",\"\\xfd\":\"y\",\"\\xff\":\"y\",\"\\xc6\":\"Ae\",\n\"\\xe6\":\"ae\",\"\\xde\":\"Th\",\"\\xfe\":\"th\",\"\\xdf\":\"ss\",\"\\u0100\":\"A\",\"\\u0102\":\"A\",\"\\u0104\":\"A\",\"\\u0101\":\"a\",\"\\u0103\":\"a\",\"\\u0105\":\"a\",\"\\u0106\":\"C\",\"\\u0108\":\"C\",\"\\u010a\":\"C\",\"\\u010c\":\"C\",\"\\u0107\":\"c\",\"\\u0109\":\"c\",\"\\u010b\":\"c\",\"\\u010d\":\"c\",\"\\u010e\":\"D\",\"\\u0110\":\"D\",\"\\u010f\":\"d\",\"\\u0111\":\"d\",\"\\u0112\":\"E\",\"\\u0114\":\"E\",\"\\u0116\":\"E\",\"\\u0118\":\"E\",\"\\u011a\":\"E\",\"\\u0113\":\"e\",\"\\u0115\":\"e\",\"\\u0117\":\"e\",\"\\u0119\":\"e\",\"\\u011b\":\"e\",\"\\u011c\":\"G\",\"\\u011e\":\"G\",\"\\u0120\":\"G\",\"\\u0122\":\"G\",\"\\u011d\":\"g\",\"\\u011f\":\"g\",\"\\u0121\":\"g\",\n\"\\u0123\":\"g\",\"\\u0124\":\"H\",\"\\u0126\":\"H\",\"\\u0125\":\"h\",\"\\u0127\":\"h\",\"\\u0128\":\"I\",\"\\u012a\":\"I\",\"\\u012c\":\"I\",\"\\u012e\":\"I\",\"\\u0130\":\"I\",\"\\u0129\":\"i\",\"\\u012b\":\"i\",\"\\u012d\":\"i\",\"\\u012f\":\"i\",\"\\u0131\":\"i\",\"\\u0134\":\"J\",\"\\u0135\":\"j\",\"\\u0136\":\"K\",\"\\u0137\":\"k\",\"\\u0138\":\"k\",\"\\u0139\":\"L\",\"\\u013b\":\"L\",\"\\u013d\":\"L\",\"\\u013f\":\"L\",\"\\u0141\":\"L\",\"\\u013a\":\"l\",\"\\u013c\":\"l\",\"\\u013e\":\"l\",\"\\u0140\":\"l\",\"\\u0142\":\"l\",\"\\u0143\":\"N\",\"\\u0145\":\"N\",\"\\u0147\":\"N\",\"\\u014a\":\"N\",\"\\u0144\":\"n\",\"\\u0146\":\"n\",\"\\u0148\":\"n\",\"\\u014b\":\"n\",\"\\u014c\":\"O\",\n\"\\u014e\":\"O\",\"\\u0150\":\"O\",\"\\u014d\":\"o\",\"\\u014f\":\"o\",\"\\u0151\":\"o\",\"\\u0154\":\"R\",\"\\u0156\":\"R\",\"\\u0158\":\"R\",\"\\u0155\":\"r\",\"\\u0157\":\"r\",\"\\u0159\":\"r\",\"\\u015a\":\"S\",\"\\u015c\":\"S\",\"\\u015e\":\"S\",\"\\u0160\":\"S\",\"\\u015b\":\"s\",\"\\u015d\":\"s\",\"\\u015f\":\"s\",\"\\u0161\":\"s\",\"\\u0162\":\"T\",\"\\u0164\":\"T\",\"\\u0166\":\"T\",\"\\u0163\":\"t\",\"\\u0165\":\"t\",\"\\u0167\":\"t\",\"\\u0168\":\"U\",\"\\u016a\":\"U\",\"\\u016c\":\"U\",\"\\u016e\":\"U\",\"\\u0170\":\"U\",\"\\u0172\":\"U\",\"\\u0169\":\"u\",\"\\u016b\":\"u\",\"\\u016d\":\"u\",\"\\u016f\":\"u\",\"\\u0171\":\"u\",\"\\u0173\":\"u\",\"\\u0174\":\"W\",\"\\u0175\":\"w\",\n\"\\u0176\":\"Y\",\"\\u0177\":\"y\",\"\\u0178\":\"Y\",\"\\u0179\":\"Z\",\"\\u017b\":\"Z\",\"\\u017d\":\"Z\",\"\\u017a\":\"z\",\"\\u017c\":\"z\",\"\\u017e\":\"z\",\"\\u0132\":\"IJ\",\"\\u0133\":\"ij\",\"\\u0152\":\"Oe\",\"\\u0153\":\"oe\",\"\\u0149\":\"'n\",\"\\u017f\":\"s\"},Hr={\"&\":\"&amp;\",\"<\":\"&lt;\",\">\":\"&gt;\",'\"':\"&quot;\",\"'\":\"&#39;\"},Jr={\"&amp;\":\"&\",\"&lt;\":\"<\",\"&gt;\":\">\",\"&quot;\":'\"',\"&#39;\":\"'\"},Yr={\"\\\\\":\"\\\\\",\"'\":\"'\",\"\\n\":\"n\",\"\\r\":\"r\",\"\\u2028\":\"u2028\",\"\\u2029\":\"u2029\"},Qr=parseFloat,Xr=parseInt,ne=\"object\"==typeof global&&global&&global.Object===Object&&global,te=\"object\"==typeof self&&self&&self.Object===Object&&self,re=ne||te||Function(\"return this\")(),ee=\"object\"==typeof exports&&exports&&!exports.nodeType&&exports,ue=ee&&\"object\"==typeof module&&module&&!module.nodeType&&module,ie=ue&&ue.exports===ee,oe=ie&&ne.process,fe=function(){\ntry{var n=ue&&ue.require&&ue.require(\"util\").types;return n?n:oe&&oe.binding&&oe.binding(\"util\")}catch(n){}}(),ce=fe&&fe.isArrayBuffer,ae=fe&&fe.isDate,le=fe&&fe.isMap,se=fe&&fe.isRegExp,he=fe&&fe.isSet,pe=fe&&fe.isTypedArray,_e=m(\"length\"),ve=x(Gr),ge=x(Hr),ye=x(Jr),de=function p(x){function Z(n){if(cc(n)&&!bh(n)&&!(n instanceof Ct)){if(n instanceof Y)return n;if(bl.call(n,\"__wrapped__\"))return eo(n)}return new Y(n)}function J(){}function Y(n,t){this.__wrapped__=n,this.__actions__=[],this.__chain__=!!t,\nthis.__index__=0,this.__values__=X}function Ct(n){this.__wrapped__=n,this.__actions__=[],this.__dir__=1,this.__filtered__=!1,this.__iteratees__=[],this.__takeCount__=Un,this.__views__=[]}function $t(){var n=new Ct(this.__wrapped__);return n.__actions__=Tu(this.__actions__),n.__dir__=this.__dir__,n.__filtered__=this.__filtered__,n.__iteratees__=Tu(this.__iteratees__),n.__takeCount__=this.__takeCount__,n.__views__=Tu(this.__views__),n}function Yt(){if(this.__filtered__){var n=new Ct(this);n.__dir__=-1,\nn.__filtered__=!0}else n=this.clone(),n.__dir__*=-1;return n}function Qt(){var n=this.__wrapped__.value(),t=this.__dir__,r=bh(n),e=t<0,u=r?n.length:0,i=Oi(0,u,this.__views__),o=i.start,f=i.end,c=f-o,a=e?f:o-1,l=this.__iteratees__,s=l.length,h=0,p=Hl(c,this.__takeCount__);if(!r||!e&&u==c&&p==c)return wu(n,this.__actions__);var _=[];n:for(;c--&&h<p;){a+=t;for(var v=-1,g=n[a];++v<s;){var y=l[v],d=y.iteratee,b=y.type,w=d(g);if(b==zn)g=w;else if(!w){if(b==Rn)continue n;break n}}_[h++]=g}return _}function Xt(n){\nvar t=-1,r=null==n?0:n.length;for(this.clear();++t<r;){var e=n[t];this.set(e[0],e[1])}}function nr(){this.__data__=is?is(null):{},this.size=0}function tr(n){var t=this.has(n)&&delete this.__data__[n];return this.size-=t?1:0,t}function rr(n){var t=this.__data__;if(is){var r=t[n];return r===on?X:r}return bl.call(t,n)?t[n]:X}function er(n){var t=this.__data__;return is?t[n]!==X:bl.call(t,n)}function ur(n,t){var r=this.__data__;return this.size+=this.has(n)?0:1,r[n]=is&&t===X?on:t,this}function ir(n){\nvar t=-1,r=null==n?0:n.length;for(this.clear();++t<r;){var e=n[t];this.set(e[0],e[1])}}function or(){this.__data__=[],this.size=0}function fr(n){var t=this.__data__,r=Wr(t,n);return!(r<0)&&(r==t.length-1?t.pop():Ll.call(t,r,1),--this.size,!0)}function cr(n){var t=this.__data__,r=Wr(t,n);return r<0?X:t[r][1]}function ar(n){return Wr(this.__data__,n)>-1}function lr(n,t){var r=this.__data__,e=Wr(r,n);return e<0?(++this.size,r.push([n,t])):r[e][1]=t,this}function sr(n){var t=-1,r=null==n?0:n.length;for(this.clear();++t<r;){\nvar e=n[t];this.set(e[0],e[1])}}function hr(){this.size=0,this.__data__={hash:new Xt,map:new(ts||ir),string:new Xt}}function pr(n){var t=xi(this,n).delete(n);return this.size-=t?1:0,t}function _r(n){return xi(this,n).get(n)}function vr(n){return xi(this,n).has(n)}function gr(n,t){var r=xi(this,n),e=r.size;return r.set(n,t),this.size+=r.size==e?0:1,this}function yr(n){var t=-1,r=null==n?0:n.length;for(this.__data__=new sr;++t<r;)this.add(n[t])}function dr(n){return this.__data__.set(n,on),this}function br(n){\nreturn this.__data__.has(n)}function wr(n){this.size=(this.__data__=new ir(n)).size}function mr(){this.__data__=new ir,this.size=0}function xr(n){var t=this.__data__,r=t.delete(n);return this.size=t.size,r}function jr(n){return this.__data__.get(n)}function Ar(n){return this.__data__.has(n)}function kr(n,t){var r=this.__data__;if(r instanceof ir){var e=r.__data__;if(!ts||e.length<tn-1)return e.push([n,t]),this.size=++r.size,this;r=this.__data__=new sr(e)}return r.set(n,t),this.size=r.size,this}function Or(n,t){\nvar r=bh(n),e=!r&&dh(n),u=!r&&!e&&mh(n),i=!r&&!e&&!u&&Oh(n),o=r||e||u||i,f=o?O(n.length,hl):[],c=f.length;for(var a in n)!t&&!bl.call(n,a)||o&&(\"length\"==a||u&&(\"offset\"==a||\"parent\"==a)||i&&(\"buffer\"==a||\"byteLength\"==a||\"byteOffset\"==a)||Ci(a,c))||f.push(a);return f}function Ir(n){var t=n.length;return t?n[tu(0,t-1)]:X}function Rr(n,t){return Xi(Tu(n),Mr(t,0,n.length))}function zr(n){return Xi(Tu(n))}function Er(n,t,r){(r===X||Gf(n[t],r))&&(r!==X||t in n)||Br(n,t,r)}function Sr(n,t,r){var e=n[t];\nbl.call(n,t)&&Gf(e,r)&&(r!==X||t in n)||Br(n,t,r)}function Wr(n,t){for(var r=n.length;r--;)if(Gf(n[r][0],t))return r;return-1}function Lr(n,t,r,e){return ys(n,function(n,u,i){t(e,n,r(n),i)}),e}function Cr(n,t){return n&&$u(t,Pc(t),n)}function Ur(n,t){return n&&$u(t,qc(t),n)}function Br(n,t,r){\"__proto__\"==t&&Tl?Tl(n,t,{configurable:!0,enumerable:!0,value:r,writable:!0}):n[t]=r}function Tr(n,t){for(var r=-1,e=t.length,u=il(e),i=null==n;++r<e;)u[r]=i?X:Mc(n,t[r]);return u}function Mr(n,t,r){return n===n&&(r!==X&&(n=n<=r?n:r),\nt!==X&&(n=n>=t?n:t)),n}function Fr(n,t,e,u,i,o){var f,c=t&an,a=t&ln,l=t&sn;if(e&&(f=i?e(n,u,i,o):e(n)),f!==X)return f;if(!fc(n))return n;var s=bh(n);if(s){if(f=zi(n),!c)return Tu(n,f)}else{var h=zs(n),p=h==Kn||h==Vn;if(mh(n))return Iu(n,c);if(h==Yn||h==Dn||p&&!i){if(f=a||p?{}:Ei(n),!c)return a?Mu(n,Ur(f,n)):Du(n,Cr(f,n))}else{if(!Vr[h])return i?n:{};f=Si(n,h,c)}}o||(o=new wr);var _=o.get(n);if(_)return _;o.set(n,f),kh(n)?n.forEach(function(r){f.add(Fr(r,t,e,r,n,o))}):jh(n)&&n.forEach(function(r,u){\nf.set(u,Fr(r,t,e,u,n,o))});var v=l?a?di:yi:a?qc:Pc,g=s?X:v(n);return r(g||n,function(r,u){g&&(u=r,r=n[u]),Sr(f,u,Fr(r,t,e,u,n,o))}),f}function Nr(n){var t=Pc(n);return function(r){return Pr(r,n,t)}}function Pr(n,t,r){var e=r.length;if(null==n)return!e;for(n=ll(n);e--;){var u=r[e],i=t[u],o=n[u];if(o===X&&!(u in n)||!i(o))return!1}return!0}function Gr(n,t,r){if(\"function\"!=typeof n)throw new pl(en);return Ws(function(){n.apply(X,r)},t)}function Hr(n,t,r,e){var u=-1,i=o,a=!0,l=n.length,s=[],h=t.length;\nif(!l)return s;r&&(t=c(t,z(r))),e?(i=f,a=!1):t.length>=tn&&(i=S,a=!1,t=new yr(t));n:for(;++u<l;){var p=n[u],_=null==r?p:r(p);if(p=e||0!==p?p:0,a&&_===_){for(var v=h;v--;)if(t[v]===_)continue n;s.push(p)}else i(t,_,e)||s.push(p)}return s}function Jr(n,t){var r=!0;return ys(n,function(n,e,u){return r=!!t(n,e,u)}),r}function Yr(n,t,r){for(var e=-1,u=n.length;++e<u;){var i=n[e],o=t(i);if(null!=o&&(f===X?o===o&&!bc(o):r(o,f)))var f=o,c=i}return c}function ne(n,t,r,e){var u=n.length;for(r=kc(r),r<0&&(r=-r>u?0:u+r),\ne=e===X||e>u?u:kc(e),e<0&&(e+=u),e=r>e?0:Oc(e);r<e;)n[r++]=t;return n}function te(n,t){var r=[];return ys(n,function(n,e,u){t(n,e,u)&&r.push(n)}),r}function ee(n,t,r,e,u){var i=-1,o=n.length;for(r||(r=Li),u||(u=[]);++i<o;){var f=n[i];t>0&&r(f)?t>1?ee(f,t-1,r,e,u):a(u,f):e||(u[u.length]=f)}return u}function ue(n,t){return n&&bs(n,t,Pc)}function oe(n,t){return n&&ws(n,t,Pc)}function fe(n,t){return i(t,function(t){return uc(n[t])})}function _e(n,t){t=ku(t,n);for(var r=0,e=t.length;null!=n&&r<e;)n=n[no(t[r++])];\nreturn r&&r==e?n:X}function de(n,t,r){var e=t(n);return bh(n)?e:a(e,r(n))}function we(n){return null==n?n===X?ut:Jn:Bl&&Bl in ll(n)?ki(n):Ki(n)}function me(n,t){return n>t}function xe(n,t){return null!=n&&bl.call(n,t)}function je(n,t){return null!=n&&t in ll(n)}function Ae(n,t,r){return n>=Hl(t,r)&&n<Gl(t,r)}function ke(n,t,r){for(var e=r?f:o,u=n[0].length,i=n.length,a=i,l=il(i),s=1/0,h=[];a--;){var p=n[a];a&&t&&(p=c(p,z(t))),s=Hl(p.length,s),l[a]=!r&&(t||u>=120&&p.length>=120)?new yr(a&&p):X}p=n[0];\nvar _=-1,v=l[0];n:for(;++_<u&&h.length<s;){var g=p[_],y=t?t(g):g;if(g=r||0!==g?g:0,!(v?S(v,y):e(h,y,r))){for(a=i;--a;){var d=l[a];if(!(d?S(d,y):e(n[a],y,r)))continue n}v&&v.push(y),h.push(g)}}return h}function Oe(n,t,r,e){return ue(n,function(n,u,i){t(e,r(n),u,i)}),e}function Ie(t,r,e){r=ku(r,t),t=Gi(t,r);var u=null==t?t:t[no(jo(r))];return null==u?X:n(u,t,e)}function Re(n){return cc(n)&&we(n)==Dn}function ze(n){return cc(n)&&we(n)==ft}function Ee(n){return cc(n)&&we(n)==Pn}function Se(n,t,r,e,u){\nreturn n===t||(null==n||null==t||!cc(n)&&!cc(t)?n!==n&&t!==t:We(n,t,r,e,Se,u))}function We(n,t,r,e,u,i){var o=bh(n),f=bh(t),c=o?Mn:zs(n),a=f?Mn:zs(t);c=c==Dn?Yn:c,a=a==Dn?Yn:a;var l=c==Yn,s=a==Yn,h=c==a;if(h&&mh(n)){if(!mh(t))return!1;o=!0,l=!1}if(h&&!l)return i||(i=new wr),o||Oh(n)?pi(n,t,r,e,u,i):_i(n,t,c,r,e,u,i);if(!(r&hn)){var p=l&&bl.call(n,\"__wrapped__\"),_=s&&bl.call(t,\"__wrapped__\");if(p||_){var v=p?n.value():n,g=_?t.value():t;return i||(i=new wr),u(v,g,r,e,i)}}return!!h&&(i||(i=new wr),vi(n,t,r,e,u,i));\n}function Le(n){return cc(n)&&zs(n)==Gn}function Ce(n,t,r,e){var u=r.length,i=u,o=!e;if(null==n)return!i;for(n=ll(n);u--;){var f=r[u];if(o&&f[2]?f[1]!==n[f[0]]:!(f[0]in n))return!1}for(;++u<i;){f=r[u];var c=f[0],a=n[c],l=f[1];if(o&&f[2]){if(a===X&&!(c in n))return!1}else{var s=new wr;if(e)var h=e(a,l,c,n,t,s);if(!(h===X?Se(l,a,hn|pn,e,s):h))return!1}}return!0}function Ue(n){return!(!fc(n)||Di(n))&&(uc(n)?kl:Zt).test(to(n))}function Be(n){return cc(n)&&we(n)==nt}function Te(n){return cc(n)&&zs(n)==tt;\n}function $e(n){return cc(n)&&oc(n.length)&&!!Kr[we(n)]}function De(n){return\"function\"==typeof n?n:null==n?La:\"object\"==typeof n?bh(n)?Ze(n[0],n[1]):qe(n):Fa(n)}function Me(n){if(!Mi(n))return Vl(n);var t=[];for(var r in ll(n))bl.call(n,r)&&\"constructor\"!=r&&t.push(r);return t}function Fe(n){if(!fc(n))return Zi(n);var t=Mi(n),r=[];for(var e in n)(\"constructor\"!=e||!t&&bl.call(n,e))&&r.push(e);return r}function Ne(n,t){return n<t}function Pe(n,t){var r=-1,e=Hf(n)?il(n.length):[];return ys(n,function(n,u,i){\ne[++r]=t(n,u,i)}),e}function qe(n){var t=ji(n);return 1==t.length&&t[0][2]?Ni(t[0][0],t[0][1]):function(r){return r===n||Ce(r,n,t)}}function Ze(n,t){return Bi(n)&&Fi(t)?Ni(no(n),t):function(r){var e=Mc(r,n);return e===X&&e===t?Nc(r,n):Se(t,e,hn|pn)}}function Ke(n,t,r,e,u){n!==t&&bs(t,function(i,o){if(u||(u=new wr),fc(i))Ve(n,t,o,r,Ke,e,u);else{var f=e?e(Ji(n,o),i,o+\"\",n,t,u):X;f===X&&(f=i),Er(n,o,f)}},qc)}function Ve(n,t,r,e,u,i,o){var f=Ji(n,r),c=Ji(t,r),a=o.get(c);if(a)return Er(n,r,a),X;var l=i?i(f,c,r+\"\",n,t,o):X,s=l===X;\nif(s){var h=bh(c),p=!h&&mh(c),_=!h&&!p&&Oh(c);l=c,h||p||_?bh(f)?l=f:Jf(f)?l=Tu(f):p?(s=!1,l=Iu(c,!0)):_?(s=!1,l=Wu(c,!0)):l=[]:gc(c)||dh(c)?(l=f,dh(f)?l=Rc(f):fc(f)&&!uc(f)||(l=Ei(c))):s=!1}s&&(o.set(c,l),u(l,c,e,i,o),o.delete(c)),Er(n,r,l)}function Ge(n,t){var r=n.length;if(r)return t+=t<0?r:0,Ci(t,r)?n[t]:X}function He(n,t,r){t=t.length?c(t,function(n){return bh(n)?function(t){return _e(t,1===n.length?n[0]:n)}:n}):[La];var e=-1;return t=c(t,z(mi())),A(Pe(n,function(n,r,u){return{criteria:c(t,function(t){\nreturn t(n)}),index:++e,value:n}}),function(n,t){return Cu(n,t,r)})}function Je(n,t){return Ye(n,t,function(t,r){return Nc(n,r)})}function Ye(n,t,r){for(var e=-1,u=t.length,i={};++e<u;){var o=t[e],f=_e(n,o);r(f,o)&&fu(i,ku(o,n),f)}return i}function Qe(n){return function(t){return _e(t,n)}}function Xe(n,t,r,e){var u=e?d:y,i=-1,o=t.length,f=n;for(n===t&&(t=Tu(t)),r&&(f=c(n,z(r)));++i<o;)for(var a=0,l=t[i],s=r?r(l):l;(a=u(f,s,a,e))>-1;)f!==n&&Ll.call(f,a,1),Ll.call(n,a,1);return n}function nu(n,t){for(var r=n?t.length:0,e=r-1;r--;){\nvar u=t[r];if(r==e||u!==i){var i=u;Ci(u)?Ll.call(n,u,1):yu(n,u)}}return n}function tu(n,t){return n+Nl(Ql()*(t-n+1))}function ru(n,t,r,e){for(var u=-1,i=Gl(Fl((t-n)/(r||1)),0),o=il(i);i--;)o[e?i:++u]=n,n+=r;return o}function eu(n,t){var r=\"\";if(!n||t<1||t>Wn)return r;do t%2&&(r+=n),t=Nl(t/2),t&&(n+=n);while(t);return r}function uu(n,t){return Ls(Vi(n,t,La),n+\"\")}function iu(n){return Ir(ra(n))}function ou(n,t){var r=ra(n);return Xi(r,Mr(t,0,r.length))}function fu(n,t,r,e){if(!fc(n))return n;t=ku(t,n);\nfor(var u=-1,i=t.length,o=i-1,f=n;null!=f&&++u<i;){var c=no(t[u]),a=r;if(\"__proto__\"===c||\"constructor\"===c||\"prototype\"===c)return n;if(u!=o){var l=f[c];a=e?e(l,c,f):X,a===X&&(a=fc(l)?l:Ci(t[u+1])?[]:{})}Sr(f,c,a),f=f[c]}return n}function cu(n){return Xi(ra(n))}function au(n,t,r){var e=-1,u=n.length;t<0&&(t=-t>u?0:u+t),r=r>u?u:r,r<0&&(r+=u),u=t>r?0:r-t>>>0,t>>>=0;for(var i=il(u);++e<u;)i[e]=n[e+t];return i}function lu(n,t){var r;return ys(n,function(n,e,u){return r=t(n,e,u),!r}),!!r}function su(n,t,r){\nvar e=0,u=null==n?e:n.length;if(\"number\"==typeof t&&t===t&&u<=Tn){for(;e<u;){var i=e+u>>>1,o=n[i];null!==o&&!bc(o)&&(r?o<=t:o<t)?e=i+1:u=i}return u}return hu(n,t,La,r)}function hu(n,t,r,e){var u=0,i=null==n?0:n.length;if(0===i)return 0;t=r(t);for(var o=t!==t,f=null===t,c=bc(t),a=t===X;u<i;){var l=Nl((u+i)/2),s=r(n[l]),h=s!==X,p=null===s,_=s===s,v=bc(s);if(o)var g=e||_;else g=a?_&&(e||h):f?_&&h&&(e||!p):c?_&&h&&!p&&(e||!v):!p&&!v&&(e?s<=t:s<t);g?u=l+1:i=l}return Hl(i,Bn)}function pu(n,t){for(var r=-1,e=n.length,u=0,i=[];++r<e;){\nvar o=n[r],f=t?t(o):o;if(!r||!Gf(f,c)){var c=f;i[u++]=0===o?0:o}}return i}function _u(n){return\"number\"==typeof n?n:bc(n)?Cn:+n}function vu(n){if(\"string\"==typeof n)return n;if(bh(n))return c(n,vu)+\"\";if(bc(n))return vs?vs.call(n):\"\";var t=n+\"\";return\"0\"==t&&1/n==-Sn?\"-0\":t}function gu(n,t,r){var e=-1,u=o,i=n.length,c=!0,a=[],l=a;if(r)c=!1,u=f;else if(i>=tn){var s=t?null:ks(n);if(s)return P(s);c=!1,u=S,l=new yr}else l=t?[]:a;n:for(;++e<i;){var h=n[e],p=t?t(h):h;if(h=r||0!==h?h:0,c&&p===p){for(var _=l.length;_--;)if(l[_]===p)continue n;\nt&&l.push(p),a.push(h)}else u(l,p,r)||(l!==a&&l.push(p),a.push(h))}return a}function yu(n,t){return t=ku(t,n),n=Gi(n,t),null==n||delete n[no(jo(t))]}function du(n,t,r,e){return fu(n,t,r(_e(n,t)),e)}function bu(n,t,r,e){for(var u=n.length,i=e?u:-1;(e?i--:++i<u)&&t(n[i],i,n););return r?au(n,e?0:i,e?i+1:u):au(n,e?i+1:0,e?u:i)}function wu(n,t){var r=n;return r instanceof Ct&&(r=r.value()),l(t,function(n,t){return t.func.apply(t.thisArg,a([n],t.args))},r)}function mu(n,t,r){var e=n.length;if(e<2)return e?gu(n[0]):[];\nfor(var u=-1,i=il(e);++u<e;)for(var o=n[u],f=-1;++f<e;)f!=u&&(i[u]=Hr(i[u]||o,n[f],t,r));return gu(ee(i,1),t,r)}function xu(n,t,r){for(var e=-1,u=n.length,i=t.length,o={};++e<u;){r(o,n[e],e<i?t[e]:X)}return o}function ju(n){return Jf(n)?n:[]}function Au(n){return\"function\"==typeof n?n:La}function ku(n,t){return bh(n)?n:Bi(n,t)?[n]:Cs(Ec(n))}function Ou(n,t,r){var e=n.length;return r=r===X?e:r,!t&&r>=e?n:au(n,t,r)}function Iu(n,t){if(t)return n.slice();var r=n.length,e=zl?zl(r):new n.constructor(r);\nreturn n.copy(e),e}function Ru(n){var t=new n.constructor(n.byteLength);return new Rl(t).set(new Rl(n)),t}function zu(n,t){return new n.constructor(t?Ru(n.buffer):n.buffer,n.byteOffset,n.byteLength)}function Eu(n){var t=new n.constructor(n.source,Nt.exec(n));return t.lastIndex=n.lastIndex,t}function Su(n){return _s?ll(_s.call(n)):{}}function Wu(n,t){return new n.constructor(t?Ru(n.buffer):n.buffer,n.byteOffset,n.length)}function Lu(n,t){if(n!==t){var r=n!==X,e=null===n,u=n===n,i=bc(n),o=t!==X,f=null===t,c=t===t,a=bc(t);\nif(!f&&!a&&!i&&n>t||i&&o&&c&&!f&&!a||e&&o&&c||!r&&c||!u)return 1;if(!e&&!i&&!a&&n<t||a&&r&&u&&!e&&!i||f&&r&&u||!o&&u||!c)return-1}return 0}function Cu(n,t,r){for(var e=-1,u=n.criteria,i=t.criteria,o=u.length,f=r.length;++e<o;){var c=Lu(u[e],i[e]);if(c){if(e>=f)return c;return c*(\"desc\"==r[e]?-1:1)}}return n.index-t.index}function Uu(n,t,r,e){for(var u=-1,i=n.length,o=r.length,f=-1,c=t.length,a=Gl(i-o,0),l=il(c+a),s=!e;++f<c;)l[f]=t[f];for(;++u<o;)(s||u<i)&&(l[r[u]]=n[u]);for(;a--;)l[f++]=n[u++];return l;\n}function Bu(n,t,r,e){for(var u=-1,i=n.length,o=-1,f=r.length,c=-1,a=t.length,l=Gl(i-f,0),s=il(l+a),h=!e;++u<l;)s[u]=n[u];for(var p=u;++c<a;)s[p+c]=t[c];for(;++o<f;)(h||u<i)&&(s[p+r[o]]=n[u++]);return s}function Tu(n,t){var r=-1,e=n.length;for(t||(t=il(e));++r<e;)t[r]=n[r];return t}function $u(n,t,r,e){var u=!r;r||(r={});for(var i=-1,o=t.length;++i<o;){var f=t[i],c=e?e(r[f],n[f],f,r,n):X;c===X&&(c=n[f]),u?Br(r,f,c):Sr(r,f,c)}return r}function Du(n,t){return $u(n,Is(n),t)}function Mu(n,t){return $u(n,Rs(n),t);\n}function Fu(n,r){return function(e,u){var i=bh(e)?t:Lr,o=r?r():{};return i(e,n,mi(u,2),o)}}function Nu(n){return uu(function(t,r){var e=-1,u=r.length,i=u>1?r[u-1]:X,o=u>2?r[2]:X;for(i=n.length>3&&\"function\"==typeof i?(u--,i):X,o&&Ui(r[0],r[1],o)&&(i=u<3?X:i,u=1),t=ll(t);++e<u;){var f=r[e];f&&n(t,f,e,i)}return t})}function Pu(n,t){return function(r,e){if(null==r)return r;if(!Hf(r))return n(r,e);for(var u=r.length,i=t?u:-1,o=ll(r);(t?i--:++i<u)&&e(o[i],i,o)!==!1;);return r}}function qu(n){return function(t,r,e){\nfor(var u=-1,i=ll(t),o=e(t),f=o.length;f--;){var c=o[n?f:++u];if(r(i[c],c,i)===!1)break}return t}}function Zu(n,t,r){function e(){return(this&&this!==re&&this instanceof e?i:n).apply(u?r:this,arguments)}var u=t&_n,i=Gu(n);return e}function Ku(n){return function(t){t=Ec(t);var r=T(t)?G(t):X,e=r?r[0]:t.charAt(0),u=r?Ou(r,1).join(\"\"):t.slice(1);return e[n]()+u}}function Vu(n){return function(t){return l(Ra(ca(t).replace($r,\"\")),n,\"\")}}function Gu(n){return function(){var t=arguments;switch(t.length){\ncase 0:return new n;case 1:return new n(t[0]);case 2:return new n(t[0],t[1]);case 3:return new n(t[0],t[1],t[2]);case 4:return new n(t[0],t[1],t[2],t[3]);case 5:return new n(t[0],t[1],t[2],t[3],t[4]);case 6:return new n(t[0],t[1],t[2],t[3],t[4],t[5]);case 7:return new n(t[0],t[1],t[2],t[3],t[4],t[5],t[6])}var r=gs(n.prototype),e=n.apply(r,t);return fc(e)?e:r}}function Hu(t,r,e){function u(){for(var o=arguments.length,f=il(o),c=o,a=wi(u);c--;)f[c]=arguments[c];var l=o<3&&f[0]!==a&&f[o-1]!==a?[]:N(f,a);\nreturn o-=l.length,o<e?oi(t,r,Qu,u.placeholder,X,f,l,X,X,e-o):n(this&&this!==re&&this instanceof u?i:t,this,f)}var i=Gu(t);return u}function Ju(n){return function(t,r,e){var u=ll(t);if(!Hf(t)){var i=mi(r,3);t=Pc(t),r=function(n){return i(u[n],n,u)}}var o=n(t,r,e);return o>-1?u[i?t[o]:o]:X}}function Yu(n){return gi(function(t){var r=t.length,e=r,u=Y.prototype.thru;for(n&&t.reverse();e--;){var i=t[e];if(\"function\"!=typeof i)throw new pl(en);if(u&&!o&&\"wrapper\"==bi(i))var o=new Y([],!0)}for(e=o?e:r;++e<r;){\ni=t[e];var f=bi(i),c=\"wrapper\"==f?Os(i):X;o=c&&$i(c[0])&&c[1]==(mn|yn|bn|xn)&&!c[4].length&&1==c[9]?o[bi(c[0])].apply(o,c[3]):1==i.length&&$i(i)?o[f]():o.thru(i)}return function(){var n=arguments,e=n[0];if(o&&1==n.length&&bh(e))return o.plant(e).value();for(var u=0,i=r?t[u].apply(this,n):e;++u<r;)i=t[u].call(this,i);return i}})}function Qu(n,t,r,e,u,i,o,f,c,a){function l(){for(var y=arguments.length,d=il(y),b=y;b--;)d[b]=arguments[b];if(_)var w=wi(l),m=C(d,w);if(e&&(d=Uu(d,e,u,_)),i&&(d=Bu(d,i,o,_)),\ny-=m,_&&y<a){return oi(n,t,Qu,l.placeholder,r,d,N(d,w),f,c,a-y)}var x=h?r:this,j=p?x[n]:n;return y=d.length,f?d=Hi(d,f):v&&y>1&&d.reverse(),s&&c<y&&(d.length=c),this&&this!==re&&this instanceof l&&(j=g||Gu(j)),j.apply(x,d)}var s=t&mn,h=t&_n,p=t&vn,_=t&(yn|dn),v=t&jn,g=p?X:Gu(n);return l}function Xu(n,t){return function(r,e){return Oe(r,n,t(e),{})}}function ni(n,t){return function(r,e){var u;if(r===X&&e===X)return t;if(r!==X&&(u=r),e!==X){if(u===X)return e;\"string\"==typeof r||\"string\"==typeof e?(r=vu(r),\ne=vu(e)):(r=_u(r),e=_u(e)),u=n(r,e)}return u}}function ti(t){return gi(function(r){return r=c(r,z(mi())),uu(function(e){var u=this;return t(r,function(t){return n(t,u,e)})})})}function ri(n,t){t=t===X?\" \":vu(t);var r=t.length;if(r<2)return r?eu(t,n):t;var e=eu(t,Fl(n/V(t)));return T(t)?Ou(G(e),0,n).join(\"\"):e.slice(0,n)}function ei(t,r,e,u){function i(){for(var r=-1,c=arguments.length,a=-1,l=u.length,s=il(l+c),h=this&&this!==re&&this instanceof i?f:t;++a<l;)s[a]=u[a];for(;c--;)s[a++]=arguments[++r];\nreturn n(h,o?e:this,s)}var o=r&_n,f=Gu(t);return i}function ui(n){return function(t,r,e){return e&&\"number\"!=typeof e&&Ui(t,r,e)&&(r=e=X),t=Ac(t),r===X?(r=t,t=0):r=Ac(r),e=e===X?t<r?1:-1:Ac(e),ru(t,r,e,n)}}function ii(n){return function(t,r){return\"string\"==typeof t&&\"string\"==typeof r||(t=Ic(t),r=Ic(r)),n(t,r)}}function oi(n,t,r,e,u,i,o,f,c,a){var l=t&yn,s=l?o:X,h=l?X:o,p=l?i:X,_=l?X:i;t|=l?bn:wn,t&=~(l?wn:bn),t&gn||(t&=~(_n|vn));var v=[n,t,u,p,s,_,h,f,c,a],g=r.apply(X,v);return $i(n)&&Ss(g,v),g.placeholder=e,\nYi(g,n,t)}function fi(n){var t=al[n];return function(n,r){if(n=Ic(n),r=null==r?0:Hl(kc(r),292),r&&Zl(n)){var e=(Ec(n)+\"e\").split(\"e\");return e=(Ec(t(e[0]+\"e\"+(+e[1]+r)))+\"e\").split(\"e\"),+(e[0]+\"e\"+(+e[1]-r))}return t(n)}}function ci(n){return function(t){var r=zs(t);return r==Gn?M(t):r==tt?q(t):I(t,n(t))}}function ai(n,t,r,e,u,i,o,f){var c=t&vn;if(!c&&\"function\"!=typeof n)throw new pl(en);var a=e?e.length:0;if(a||(t&=~(bn|wn),e=u=X),o=o===X?o:Gl(kc(o),0),f=f===X?f:kc(f),a-=u?u.length:0,t&wn){var l=e,s=u;\ne=u=X}var h=c?X:Os(n),p=[n,t,r,e,u,l,s,i,o,f];if(h&&qi(p,h),n=p[0],t=p[1],r=p[2],e=p[3],u=p[4],f=p[9]=p[9]===X?c?0:n.length:Gl(p[9]-a,0),!f&&t&(yn|dn)&&(t&=~(yn|dn)),t&&t!=_n)_=t==yn||t==dn?Hu(n,t,f):t!=bn&&t!=(_n|bn)||u.length?Qu.apply(X,p):ei(n,t,r,e);else var _=Zu(n,t,r);return Yi((h?ms:Ss)(_,p),n,t)}function li(n,t,r,e){return n===X||Gf(n,gl[r])&&!bl.call(e,r)?t:n}function si(n,t,r,e,u,i){return fc(n)&&fc(t)&&(i.set(t,n),Ke(n,t,X,si,i),i.delete(t)),n}function hi(n){return gc(n)?X:n}function pi(n,t,r,e,u,i){\nvar o=r&hn,f=n.length,c=t.length;if(f!=c&&!(o&&c>f))return!1;var a=i.get(n),l=i.get(t);if(a&&l)return a==t&&l==n;var s=-1,p=!0,_=r&pn?new yr:X;for(i.set(n,t),i.set(t,n);++s<f;){var v=n[s],g=t[s];if(e)var y=o?e(g,v,s,t,n,i):e(v,g,s,n,t,i);if(y!==X){if(y)continue;p=!1;break}if(_){if(!h(t,function(n,t){if(!S(_,t)&&(v===n||u(v,n,r,e,i)))return _.push(t)})){p=!1;break}}else if(v!==g&&!u(v,g,r,e,i)){p=!1;break}}return i.delete(n),i.delete(t),p}function _i(n,t,r,e,u,i,o){switch(r){case ct:if(n.byteLength!=t.byteLength||n.byteOffset!=t.byteOffset)return!1;\nn=n.buffer,t=t.buffer;case ft:return!(n.byteLength!=t.byteLength||!i(new Rl(n),new Rl(t)));case Nn:case Pn:case Hn:return Gf(+n,+t);case Zn:return n.name==t.name&&n.message==t.message;case nt:case rt:return n==t+\"\";case Gn:var f=M;case tt:var c=e&hn;if(f||(f=P),n.size!=t.size&&!c)return!1;var a=o.get(n);if(a)return a==t;e|=pn,o.set(n,t);var l=pi(f(n),f(t),e,u,i,o);return o.delete(n),l;case et:if(_s)return _s.call(n)==_s.call(t)}return!1}function vi(n,t,r,e,u,i){var o=r&hn,f=yi(n),c=f.length;if(c!=yi(t).length&&!o)return!1;\nfor(var a=c;a--;){var l=f[a];if(!(o?l in t:bl.call(t,l)))return!1}var s=i.get(n),h=i.get(t);if(s&&h)return s==t&&h==n;var p=!0;i.set(n,t),i.set(t,n);for(var _=o;++a<c;){l=f[a];var v=n[l],g=t[l];if(e)var y=o?e(g,v,l,t,n,i):e(v,g,l,n,t,i);if(!(y===X?v===g||u(v,g,r,e,i):y)){p=!1;break}_||(_=\"constructor\"==l)}if(p&&!_){var d=n.constructor,b=t.constructor;d!=b&&\"constructor\"in n&&\"constructor\"in t&&!(\"function\"==typeof d&&d instanceof d&&\"function\"==typeof b&&b instanceof b)&&(p=!1)}return i.delete(n),\ni.delete(t),p}function gi(n){return Ls(Vi(n,X,_o),n+\"\")}function yi(n){return de(n,Pc,Is)}function di(n){return de(n,qc,Rs)}function bi(n){for(var t=n.name+\"\",r=fs[t],e=bl.call(fs,t)?r.length:0;e--;){var u=r[e],i=u.func;if(null==i||i==n)return u.name}return t}function wi(n){return(bl.call(Z,\"placeholder\")?Z:n).placeholder}function mi(){var n=Z.iteratee||Ca;return n=n===Ca?De:n,arguments.length?n(arguments[0],arguments[1]):n}function xi(n,t){var r=n.__data__;return Ti(t)?r[\"string\"==typeof t?\"string\":\"hash\"]:r.map;\n}function ji(n){for(var t=Pc(n),r=t.length;r--;){var e=t[r],u=n[e];t[r]=[e,u,Fi(u)]}return t}function Ai(n,t){var r=B(n,t);return Ue(r)?r:X}function ki(n){var t=bl.call(n,Bl),r=n[Bl];try{n[Bl]=X;var e=!0}catch(n){}var u=xl.call(n);return e&&(t?n[Bl]=r:delete n[Bl]),u}function Oi(n,t,r){for(var e=-1,u=r.length;++e<u;){var i=r[e],o=i.size;switch(i.type){case\"drop\":n+=o;break;case\"dropRight\":t-=o;break;case\"take\":t=Hl(t,n+o);break;case\"takeRight\":n=Gl(n,t-o)}}return{start:n,end:t}}function Ii(n){var t=n.match(Bt);\nreturn t?t[1].split(Tt):[]}function Ri(n,t,r){t=ku(t,n);for(var e=-1,u=t.length,i=!1;++e<u;){var o=no(t[e]);if(!(i=null!=n&&r(n,o)))break;n=n[o]}return i||++e!=u?i:(u=null==n?0:n.length,!!u&&oc(u)&&Ci(o,u)&&(bh(n)||dh(n)))}function zi(n){var t=n.length,r=new n.constructor(t);return t&&\"string\"==typeof n[0]&&bl.call(n,\"index\")&&(r.index=n.index,r.input=n.input),r}function Ei(n){return\"function\"!=typeof n.constructor||Mi(n)?{}:gs(El(n))}function Si(n,t,r){var e=n.constructor;switch(t){case ft:return Ru(n);\ncase Nn:case Pn:return new e(+n);case ct:return zu(n,r);case at:case lt:case st:case ht:case pt:case _t:case vt:case gt:case yt:return Wu(n,r);case Gn:return new e;case Hn:case rt:return new e(n);case nt:return Eu(n);case tt:return new e;case et:return Su(n)}}function Wi(n,t){var r=t.length;if(!r)return n;var e=r-1;return t[e]=(r>1?\"& \":\"\")+t[e],t=t.join(r>2?\", \":\" \"),n.replace(Ut,\"{\\n/* [wrapped with \"+t+\"] */\\n\")}function Li(n){return bh(n)||dh(n)||!!(Cl&&n&&n[Cl])}function Ci(n,t){var r=typeof n;\nreturn t=null==t?Wn:t,!!t&&(\"number\"==r||\"symbol\"!=r&&Vt.test(n))&&n>-1&&n%1==0&&n<t}function Ui(n,t,r){if(!fc(r))return!1;var e=typeof t;return!!(\"number\"==e?Hf(r)&&Ci(t,r.length):\"string\"==e&&t in r)&&Gf(r[t],n)}function Bi(n,t){if(bh(n))return!1;var r=typeof n;return!(\"number\"!=r&&\"symbol\"!=r&&\"boolean\"!=r&&null!=n&&!bc(n))||(zt.test(n)||!Rt.test(n)||null!=t&&n in ll(t))}function Ti(n){var t=typeof n;return\"string\"==t||\"number\"==t||\"symbol\"==t||\"boolean\"==t?\"__proto__\"!==n:null===n}function $i(n){\nvar t=bi(n),r=Z[t];if(\"function\"!=typeof r||!(t in Ct.prototype))return!1;if(n===r)return!0;var e=Os(r);return!!e&&n===e[0]}function Di(n){return!!ml&&ml in n}function Mi(n){var t=n&&n.constructor;return n===(\"function\"==typeof t&&t.prototype||gl)}function Fi(n){return n===n&&!fc(n)}function Ni(n,t){return function(r){return null!=r&&(r[n]===t&&(t!==X||n in ll(r)))}}function Pi(n){var t=Cf(n,function(n){return r.size===fn&&r.clear(),n}),r=t.cache;return t}function qi(n,t){var r=n[1],e=t[1],u=r|e,i=u<(_n|vn|mn),o=e==mn&&r==yn||e==mn&&r==xn&&n[7].length<=t[8]||e==(mn|xn)&&t[7].length<=t[8]&&r==yn;\nif(!i&&!o)return n;e&_n&&(n[2]=t[2],u|=r&_n?0:gn);var f=t[3];if(f){var c=n[3];n[3]=c?Uu(c,f,t[4]):f,n[4]=c?N(n[3],cn):t[4]}return f=t[5],f&&(c=n[5],n[5]=c?Bu(c,f,t[6]):f,n[6]=c?N(n[5],cn):t[6]),f=t[7],f&&(n[7]=f),e&mn&&(n[8]=null==n[8]?t[8]:Hl(n[8],t[8])),null==n[9]&&(n[9]=t[9]),n[0]=t[0],n[1]=u,n}function Zi(n){var t=[];if(null!=n)for(var r in ll(n))t.push(r);return t}function Ki(n){return xl.call(n)}function Vi(t,r,e){return r=Gl(r===X?t.length-1:r,0),function(){for(var u=arguments,i=-1,o=Gl(u.length-r,0),f=il(o);++i<o;)f[i]=u[r+i];\ni=-1;for(var c=il(r+1);++i<r;)c[i]=u[i];return c[r]=e(f),n(t,this,c)}}function Gi(n,t){return t.length<2?n:_e(n,au(t,0,-1))}function Hi(n,t){for(var r=n.length,e=Hl(t.length,r),u=Tu(n);e--;){var i=t[e];n[e]=Ci(i,r)?u[i]:X}return n}function Ji(n,t){if((\"constructor\"!==t||\"function\"!=typeof n[t])&&\"__proto__\"!=t)return n[t]}function Yi(n,t,r){var e=t+\"\";return Ls(n,Wi(e,ro(Ii(e),r)))}function Qi(n){var t=0,r=0;return function(){var e=Jl(),u=In-(e-r);if(r=e,u>0){if(++t>=On)return arguments[0]}else t=0;\nreturn n.apply(X,arguments)}}function Xi(n,t){var r=-1,e=n.length,u=e-1;for(t=t===X?e:t;++r<t;){var i=tu(r,u),o=n[i];n[i]=n[r],n[r]=o}return n.length=t,n}function no(n){if(\"string\"==typeof n||bc(n))return n;var t=n+\"\";return\"0\"==t&&1/n==-Sn?\"-0\":t}function to(n){if(null!=n){try{return dl.call(n)}catch(n){}try{return n+\"\"}catch(n){}}return\"\"}function ro(n,t){return r($n,function(r){var e=\"_.\"+r[0];t&r[1]&&!o(n,e)&&n.push(e)}),n.sort()}function eo(n){if(n instanceof Ct)return n.clone();var t=new Y(n.__wrapped__,n.__chain__);\nreturn t.__actions__=Tu(n.__actions__),t.__index__=n.__index__,t.__values__=n.__values__,t}function uo(n,t,r){t=(r?Ui(n,t,r):t===X)?1:Gl(kc(t),0);var e=null==n?0:n.length;if(!e||t<1)return[];for(var u=0,i=0,o=il(Fl(e/t));u<e;)o[i++]=au(n,u,u+=t);return o}function io(n){for(var t=-1,r=null==n?0:n.length,e=0,u=[];++t<r;){var i=n[t];i&&(u[e++]=i)}return u}function oo(){var n=arguments.length;if(!n)return[];for(var t=il(n-1),r=arguments[0],e=n;e--;)t[e-1]=arguments[e];return a(bh(r)?Tu(r):[r],ee(t,1));\n}function fo(n,t,r){var e=null==n?0:n.length;return e?(t=r||t===X?1:kc(t),au(n,t<0?0:t,e)):[]}function co(n,t,r){var e=null==n?0:n.length;return e?(t=r||t===X?1:kc(t),t=e-t,au(n,0,t<0?0:t)):[]}function ao(n,t){return n&&n.length?bu(n,mi(t,3),!0,!0):[]}function lo(n,t){return n&&n.length?bu(n,mi(t,3),!0):[]}function so(n,t,r,e){var u=null==n?0:n.length;return u?(r&&\"number\"!=typeof r&&Ui(n,t,r)&&(r=0,e=u),ne(n,t,r,e)):[]}function ho(n,t,r){var e=null==n?0:n.length;if(!e)return-1;var u=null==r?0:kc(r);\nreturn u<0&&(u=Gl(e+u,0)),g(n,mi(t,3),u)}function po(n,t,r){var e=null==n?0:n.length;if(!e)return-1;var u=e-1;return r!==X&&(u=kc(r),u=r<0?Gl(e+u,0):Hl(u,e-1)),g(n,mi(t,3),u,!0)}function _o(n){return(null==n?0:n.length)?ee(n,1):[]}function vo(n){return(null==n?0:n.length)?ee(n,Sn):[]}function go(n,t){return(null==n?0:n.length)?(t=t===X?1:kc(t),ee(n,t)):[]}function yo(n){for(var t=-1,r=null==n?0:n.length,e={};++t<r;){var u=n[t];e[u[0]]=u[1]}return e}function bo(n){return n&&n.length?n[0]:X}function wo(n,t,r){\nvar e=null==n?0:n.length;if(!e)return-1;var u=null==r?0:kc(r);return u<0&&(u=Gl(e+u,0)),y(n,t,u)}function mo(n){return(null==n?0:n.length)?au(n,0,-1):[]}function xo(n,t){return null==n?\"\":Kl.call(n,t)}function jo(n){var t=null==n?0:n.length;return t?n[t-1]:X}function Ao(n,t,r){var e=null==n?0:n.length;if(!e)return-1;var u=e;return r!==X&&(u=kc(r),u=u<0?Gl(e+u,0):Hl(u,e-1)),t===t?K(n,t,u):g(n,b,u,!0)}function ko(n,t){return n&&n.length?Ge(n,kc(t)):X}function Oo(n,t){return n&&n.length&&t&&t.length?Xe(n,t):n;\n}function Io(n,t,r){return n&&n.length&&t&&t.length?Xe(n,t,mi(r,2)):n}function Ro(n,t,r){return n&&n.length&&t&&t.length?Xe(n,t,X,r):n}function zo(n,t){var r=[];if(!n||!n.length)return r;var e=-1,u=[],i=n.length;for(t=mi(t,3);++e<i;){var o=n[e];t(o,e,n)&&(r.push(o),u.push(e))}return nu(n,u),r}function Eo(n){return null==n?n:Xl.call(n)}function So(n,t,r){var e=null==n?0:n.length;return e?(r&&\"number\"!=typeof r&&Ui(n,t,r)?(t=0,r=e):(t=null==t?0:kc(t),r=r===X?e:kc(r)),au(n,t,r)):[]}function Wo(n,t){\nreturn su(n,t)}function Lo(n,t,r){return hu(n,t,mi(r,2))}function Co(n,t){var r=null==n?0:n.length;if(r){var e=su(n,t);if(e<r&&Gf(n[e],t))return e}return-1}function Uo(n,t){return su(n,t,!0)}function Bo(n,t,r){return hu(n,t,mi(r,2),!0)}function To(n,t){if(null==n?0:n.length){var r=su(n,t,!0)-1;if(Gf(n[r],t))return r}return-1}function $o(n){return n&&n.length?pu(n):[]}function Do(n,t){return n&&n.length?pu(n,mi(t,2)):[]}function Mo(n){var t=null==n?0:n.length;return t?au(n,1,t):[]}function Fo(n,t,r){\nreturn n&&n.length?(t=r||t===X?1:kc(t),au(n,0,t<0?0:t)):[]}function No(n,t,r){var e=null==n?0:n.length;return e?(t=r||t===X?1:kc(t),t=e-t,au(n,t<0?0:t,e)):[]}function Po(n,t){return n&&n.length?bu(n,mi(t,3),!1,!0):[]}function qo(n,t){return n&&n.length?bu(n,mi(t,3)):[]}function Zo(n){return n&&n.length?gu(n):[]}function Ko(n,t){return n&&n.length?gu(n,mi(t,2)):[]}function Vo(n,t){return t=\"function\"==typeof t?t:X,n&&n.length?gu(n,X,t):[]}function Go(n){if(!n||!n.length)return[];var t=0;return n=i(n,function(n){\nif(Jf(n))return t=Gl(n.length,t),!0}),O(t,function(t){return c(n,m(t))})}function Ho(t,r){if(!t||!t.length)return[];var e=Go(t);return null==r?e:c(e,function(t){return n(r,X,t)})}function Jo(n,t){return xu(n||[],t||[],Sr)}function Yo(n,t){return xu(n||[],t||[],fu)}function Qo(n){var t=Z(n);return t.__chain__=!0,t}function Xo(n,t){return t(n),n}function nf(n,t){return t(n)}function tf(){return Qo(this)}function rf(){return new Y(this.value(),this.__chain__)}function ef(){this.__values__===X&&(this.__values__=jc(this.value()));\nvar n=this.__index__>=this.__values__.length;return{done:n,value:n?X:this.__values__[this.__index__++]}}function uf(){return this}function of(n){for(var t,r=this;r instanceof J;){var e=eo(r);e.__index__=0,e.__values__=X,t?u.__wrapped__=e:t=e;var u=e;r=r.__wrapped__}return u.__wrapped__=n,t}function ff(){var n=this.__wrapped__;if(n instanceof Ct){var t=n;return this.__actions__.length&&(t=new Ct(this)),t=t.reverse(),t.__actions__.push({func:nf,args:[Eo],thisArg:X}),new Y(t,this.__chain__)}return this.thru(Eo);\n}function cf(){return wu(this.__wrapped__,this.__actions__)}function af(n,t,r){var e=bh(n)?u:Jr;return r&&Ui(n,t,r)&&(t=X),e(n,mi(t,3))}function lf(n,t){return(bh(n)?i:te)(n,mi(t,3))}function sf(n,t){return ee(yf(n,t),1)}function hf(n,t){return ee(yf(n,t),Sn)}function pf(n,t,r){return r=r===X?1:kc(r),ee(yf(n,t),r)}function _f(n,t){return(bh(n)?r:ys)(n,mi(t,3))}function vf(n,t){return(bh(n)?e:ds)(n,mi(t,3))}function gf(n,t,r,e){n=Hf(n)?n:ra(n),r=r&&!e?kc(r):0;var u=n.length;return r<0&&(r=Gl(u+r,0)),\ndc(n)?r<=u&&n.indexOf(t,r)>-1:!!u&&y(n,t,r)>-1}function yf(n,t){return(bh(n)?c:Pe)(n,mi(t,3))}function df(n,t,r,e){return null==n?[]:(bh(t)||(t=null==t?[]:[t]),r=e?X:r,bh(r)||(r=null==r?[]:[r]),He(n,t,r))}function bf(n,t,r){var e=bh(n)?l:j,u=arguments.length<3;return e(n,mi(t,4),r,u,ys)}function wf(n,t,r){var e=bh(n)?s:j,u=arguments.length<3;return e(n,mi(t,4),r,u,ds)}function mf(n,t){return(bh(n)?i:te)(n,Uf(mi(t,3)))}function xf(n){return(bh(n)?Ir:iu)(n)}function jf(n,t,r){return t=(r?Ui(n,t,r):t===X)?1:kc(t),\n(bh(n)?Rr:ou)(n,t)}function Af(n){return(bh(n)?zr:cu)(n)}function kf(n){if(null==n)return 0;if(Hf(n))return dc(n)?V(n):n.length;var t=zs(n);return t==Gn||t==tt?n.size:Me(n).length}function Of(n,t,r){var e=bh(n)?h:lu;return r&&Ui(n,t,r)&&(t=X),e(n,mi(t,3))}function If(n,t){if(\"function\"!=typeof t)throw new pl(en);return n=kc(n),function(){if(--n<1)return t.apply(this,arguments)}}function Rf(n,t,r){return t=r?X:t,t=n&&null==t?n.length:t,ai(n,mn,X,X,X,X,t)}function zf(n,t){var r;if(\"function\"!=typeof t)throw new pl(en);\nreturn n=kc(n),function(){return--n>0&&(r=t.apply(this,arguments)),n<=1&&(t=X),r}}function Ef(n,t,r){t=r?X:t;var e=ai(n,yn,X,X,X,X,X,t);return e.placeholder=Ef.placeholder,e}function Sf(n,t,r){t=r?X:t;var e=ai(n,dn,X,X,X,X,X,t);return e.placeholder=Sf.placeholder,e}function Wf(n,t,r){function e(t){var r=h,e=p;return h=p=X,d=t,v=n.apply(e,r)}function u(n){return d=n,g=Ws(f,t),b?e(n):v}function i(n){var r=n-y,e=n-d,u=t-r;return w?Hl(u,_-e):u}function o(n){var r=n-y,e=n-d;return y===X||r>=t||r<0||w&&e>=_;\n}function f(){var n=fh();return o(n)?c(n):(g=Ws(f,i(n)),X)}function c(n){return g=X,m&&h?e(n):(h=p=X,v)}function a(){g!==X&&As(g),d=0,h=y=p=g=X}function l(){return g===X?v:c(fh())}function s(){var n=fh(),r=o(n);if(h=arguments,p=this,y=n,r){if(g===X)return u(y);if(w)return As(g),g=Ws(f,t),e(y)}return g===X&&(g=Ws(f,t)),v}var h,p,_,v,g,y,d=0,b=!1,w=!1,m=!0;if(\"function\"!=typeof n)throw new pl(en);return t=Ic(t)||0,fc(r)&&(b=!!r.leading,w=\"maxWait\"in r,_=w?Gl(Ic(r.maxWait)||0,t):_,m=\"trailing\"in r?!!r.trailing:m),\ns.cancel=a,s.flush=l,s}function Lf(n){return ai(n,jn)}function Cf(n,t){if(\"function\"!=typeof n||null!=t&&\"function\"!=typeof t)throw new pl(en);var r=function(){var e=arguments,u=t?t.apply(this,e):e[0],i=r.cache;if(i.has(u))return i.get(u);var o=n.apply(this,e);return r.cache=i.set(u,o)||i,o};return r.cache=new(Cf.Cache||sr),r}function Uf(n){if(\"function\"!=typeof n)throw new pl(en);return function(){var t=arguments;switch(t.length){case 0:return!n.call(this);case 1:return!n.call(this,t[0]);case 2:\nreturn!n.call(this,t[0],t[1]);case 3:return!n.call(this,t[0],t[1],t[2])}return!n.apply(this,t)}}function Bf(n){return zf(2,n)}function Tf(n,t){if(\"function\"!=typeof n)throw new pl(en);return t=t===X?t:kc(t),uu(n,t)}function $f(t,r){if(\"function\"!=typeof t)throw new pl(en);return r=null==r?0:Gl(kc(r),0),uu(function(e){var u=e[r],i=Ou(e,0,r);return u&&a(i,u),n(t,this,i)})}function Df(n,t,r){var e=!0,u=!0;if(\"function\"!=typeof n)throw new pl(en);return fc(r)&&(e=\"leading\"in r?!!r.leading:e,u=\"trailing\"in r?!!r.trailing:u),\nWf(n,t,{leading:e,maxWait:t,trailing:u})}function Mf(n){return Rf(n,1)}function Ff(n,t){return ph(Au(t),n)}function Nf(){if(!arguments.length)return[];var n=arguments[0];return bh(n)?n:[n]}function Pf(n){return Fr(n,sn)}function qf(n,t){return t=\"function\"==typeof t?t:X,Fr(n,sn,t)}function Zf(n){return Fr(n,an|sn)}function Kf(n,t){return t=\"function\"==typeof t?t:X,Fr(n,an|sn,t)}function Vf(n,t){return null==t||Pr(n,t,Pc(t))}function Gf(n,t){return n===t||n!==n&&t!==t}function Hf(n){return null!=n&&oc(n.length)&&!uc(n);\n}function Jf(n){return cc(n)&&Hf(n)}function Yf(n){return n===!0||n===!1||cc(n)&&we(n)==Nn}function Qf(n){return cc(n)&&1===n.nodeType&&!gc(n)}function Xf(n){if(null==n)return!0;if(Hf(n)&&(bh(n)||\"string\"==typeof n||\"function\"==typeof n.splice||mh(n)||Oh(n)||dh(n)))return!n.length;var t=zs(n);if(t==Gn||t==tt)return!n.size;if(Mi(n))return!Me(n).length;for(var r in n)if(bl.call(n,r))return!1;return!0}function nc(n,t){return Se(n,t)}function tc(n,t,r){r=\"function\"==typeof r?r:X;var e=r?r(n,t):X;return e===X?Se(n,t,X,r):!!e;\n}function rc(n){if(!cc(n))return!1;var t=we(n);return t==Zn||t==qn||\"string\"==typeof n.message&&\"string\"==typeof n.name&&!gc(n)}function ec(n){return\"number\"==typeof n&&Zl(n)}function uc(n){if(!fc(n))return!1;var t=we(n);return t==Kn||t==Vn||t==Fn||t==Xn}function ic(n){return\"number\"==typeof n&&n==kc(n)}function oc(n){return\"number\"==typeof n&&n>-1&&n%1==0&&n<=Wn}function fc(n){var t=typeof n;return null!=n&&(\"object\"==t||\"function\"==t)}function cc(n){return null!=n&&\"object\"==typeof n}function ac(n,t){\nreturn n===t||Ce(n,t,ji(t))}function lc(n,t,r){return r=\"function\"==typeof r?r:X,Ce(n,t,ji(t),r)}function sc(n){return vc(n)&&n!=+n}function hc(n){if(Es(n))throw new fl(rn);return Ue(n)}function pc(n){return null===n}function _c(n){return null==n}function vc(n){return\"number\"==typeof n||cc(n)&&we(n)==Hn}function gc(n){if(!cc(n)||we(n)!=Yn)return!1;var t=El(n);if(null===t)return!0;var r=bl.call(t,\"constructor\")&&t.constructor;return\"function\"==typeof r&&r instanceof r&&dl.call(r)==jl}function yc(n){\nreturn ic(n)&&n>=-Wn&&n<=Wn}function dc(n){return\"string\"==typeof n||!bh(n)&&cc(n)&&we(n)==rt}function bc(n){return\"symbol\"==typeof n||cc(n)&&we(n)==et}function wc(n){return n===X}function mc(n){return cc(n)&&zs(n)==it}function xc(n){return cc(n)&&we(n)==ot}function jc(n){if(!n)return[];if(Hf(n))return dc(n)?G(n):Tu(n);if(Ul&&n[Ul])return D(n[Ul]());var t=zs(n);return(t==Gn?M:t==tt?P:ra)(n)}function Ac(n){if(!n)return 0===n?n:0;if(n=Ic(n),n===Sn||n===-Sn){return(n<0?-1:1)*Ln}return n===n?n:0}function kc(n){\nvar t=Ac(n),r=t%1;return t===t?r?t-r:t:0}function Oc(n){return n?Mr(kc(n),0,Un):0}function Ic(n){if(\"number\"==typeof n)return n;if(bc(n))return Cn;if(fc(n)){var t=\"function\"==typeof n.valueOf?n.valueOf():n;n=fc(t)?t+\"\":t}if(\"string\"!=typeof n)return 0===n?n:+n;n=R(n);var r=qt.test(n);return r||Kt.test(n)?Xr(n.slice(2),r?2:8):Pt.test(n)?Cn:+n}function Rc(n){return $u(n,qc(n))}function zc(n){return n?Mr(kc(n),-Wn,Wn):0===n?n:0}function Ec(n){return null==n?\"\":vu(n)}function Sc(n,t){var r=gs(n);return null==t?r:Cr(r,t);\n}function Wc(n,t){return v(n,mi(t,3),ue)}function Lc(n,t){return v(n,mi(t,3),oe)}function Cc(n,t){return null==n?n:bs(n,mi(t,3),qc)}function Uc(n,t){return null==n?n:ws(n,mi(t,3),qc)}function Bc(n,t){return n&&ue(n,mi(t,3))}function Tc(n,t){return n&&oe(n,mi(t,3))}function $c(n){return null==n?[]:fe(n,Pc(n))}function Dc(n){return null==n?[]:fe(n,qc(n))}function Mc(n,t,r){var e=null==n?X:_e(n,t);return e===X?r:e}function Fc(n,t){return null!=n&&Ri(n,t,xe)}function Nc(n,t){return null!=n&&Ri(n,t,je);\n}function Pc(n){return Hf(n)?Or(n):Me(n)}function qc(n){return Hf(n)?Or(n,!0):Fe(n)}function Zc(n,t){var r={};return t=mi(t,3),ue(n,function(n,e,u){Br(r,t(n,e,u),n)}),r}function Kc(n,t){var r={};return t=mi(t,3),ue(n,function(n,e,u){Br(r,e,t(n,e,u))}),r}function Vc(n,t){return Gc(n,Uf(mi(t)))}function Gc(n,t){if(null==n)return{};var r=c(di(n),function(n){return[n]});return t=mi(t),Ye(n,r,function(n,r){return t(n,r[0])})}function Hc(n,t,r){t=ku(t,n);var e=-1,u=t.length;for(u||(u=1,n=X);++e<u;){var i=null==n?X:n[no(t[e])];\ni===X&&(e=u,i=r),n=uc(i)?i.call(n):i}return n}function Jc(n,t,r){return null==n?n:fu(n,t,r)}function Yc(n,t,r,e){return e=\"function\"==typeof e?e:X,null==n?n:fu(n,t,r,e)}function Qc(n,t,e){var u=bh(n),i=u||mh(n)||Oh(n);if(t=mi(t,4),null==e){var o=n&&n.constructor;e=i?u?new o:[]:fc(n)&&uc(o)?gs(El(n)):{}}return(i?r:ue)(n,function(n,r,u){return t(e,n,r,u)}),e}function Xc(n,t){return null==n||yu(n,t)}function na(n,t,r){return null==n?n:du(n,t,Au(r))}function ta(n,t,r,e){return e=\"function\"==typeof e?e:X,\nnull==n?n:du(n,t,Au(r),e)}function ra(n){return null==n?[]:E(n,Pc(n))}function ea(n){return null==n?[]:E(n,qc(n))}function ua(n,t,r){return r===X&&(r=t,t=X),r!==X&&(r=Ic(r),r=r===r?r:0),t!==X&&(t=Ic(t),t=t===t?t:0),Mr(Ic(n),t,r)}function ia(n,t,r){return t=Ac(t),r===X?(r=t,t=0):r=Ac(r),n=Ic(n),Ae(n,t,r)}function oa(n,t,r){if(r&&\"boolean\"!=typeof r&&Ui(n,t,r)&&(t=r=X),r===X&&(\"boolean\"==typeof t?(r=t,t=X):\"boolean\"==typeof n&&(r=n,n=X)),n===X&&t===X?(n=0,t=1):(n=Ac(n),t===X?(t=n,n=0):t=Ac(t)),n>t){\nvar e=n;n=t,t=e}if(r||n%1||t%1){var u=Ql();return Hl(n+u*(t-n+Qr(\"1e-\"+((u+\"\").length-1))),t)}return tu(n,t)}function fa(n){return Qh(Ec(n).toLowerCase())}function ca(n){return n=Ec(n),n&&n.replace(Gt,ve).replace(Dr,\"\")}function aa(n,t,r){n=Ec(n),t=vu(t);var e=n.length;r=r===X?e:Mr(kc(r),0,e);var u=r;return r-=t.length,r>=0&&n.slice(r,u)==t}function la(n){return n=Ec(n),n&&At.test(n)?n.replace(xt,ge):n}function sa(n){return n=Ec(n),n&&Wt.test(n)?n.replace(St,\"\\\\$&\"):n}function ha(n,t,r){n=Ec(n),t=kc(t);\nvar e=t?V(n):0;if(!t||e>=t)return n;var u=(t-e)/2;return ri(Nl(u),r)+n+ri(Fl(u),r)}function pa(n,t,r){n=Ec(n),t=kc(t);var e=t?V(n):0;return t&&e<t?n+ri(t-e,r):n}function _a(n,t,r){n=Ec(n),t=kc(t);var e=t?V(n):0;return t&&e<t?ri(t-e,r)+n:n}function va(n,t,r){return r||null==t?t=0:t&&(t=+t),Yl(Ec(n).replace(Lt,\"\"),t||0)}function ga(n,t,r){return t=(r?Ui(n,t,r):t===X)?1:kc(t),eu(Ec(n),t)}function ya(){var n=arguments,t=Ec(n[0]);return n.length<3?t:t.replace(n[1],n[2])}function da(n,t,r){return r&&\"number\"!=typeof r&&Ui(n,t,r)&&(t=r=X),\n(r=r===X?Un:r>>>0)?(n=Ec(n),n&&(\"string\"==typeof t||null!=t&&!Ah(t))&&(t=vu(t),!t&&T(n))?Ou(G(n),0,r):n.split(t,r)):[]}function ba(n,t,r){return n=Ec(n),r=null==r?0:Mr(kc(r),0,n.length),t=vu(t),n.slice(r,r+t.length)==t}function wa(n,t,r){var e=Z.templateSettings;r&&Ui(n,t,r)&&(t=X),n=Ec(n),t=Sh({},t,e,li);var u,i,o=Sh({},t.imports,e.imports,li),f=Pc(o),c=E(o,f),a=0,l=t.interpolate||Ht,s=\"__p += '\",h=sl((t.escape||Ht).source+\"|\"+l.source+\"|\"+(l===It?Ft:Ht).source+\"|\"+(t.evaluate||Ht).source+\"|$\",\"g\"),p=\"//# sourceURL=\"+(bl.call(t,\"sourceURL\")?(t.sourceURL+\"\").replace(/\\s/g,\" \"):\"lodash.templateSources[\"+ ++Zr+\"]\")+\"\\n\";\nn.replace(h,function(t,r,e,o,f,c){return e||(e=o),s+=n.slice(a,c).replace(Jt,U),r&&(u=!0,s+=\"' +\\n__e(\"+r+\") +\\n'\"),f&&(i=!0,s+=\"';\\n\"+f+\";\\n__p += '\"),e&&(s+=\"' +\\n((__t = (\"+e+\")) == null ? '' : __t) +\\n'\"),a=c+t.length,t}),s+=\"';\\n\";var _=bl.call(t,\"variable\")&&t.variable;if(_){if(Dt.test(_))throw new fl(un)}else s=\"with (obj) {\\n\"+s+\"\\n}\\n\";s=(i?s.replace(dt,\"\"):s).replace(bt,\"$1\").replace(wt,\"$1;\"),s=\"function(\"+(_||\"obj\")+\") {\\n\"+(_?\"\":\"obj || (obj = {});\\n\")+\"var __t, __p = ''\"+(u?\", __e = _.escape\":\"\")+(i?\", __j = Array.prototype.join;\\nfunction print() { __p += __j.call(arguments, '') }\\n\":\";\\n\")+s+\"return __p\\n}\";\nvar v=Xh(function(){return cl(f,p+\"return \"+s).apply(X,c)});if(v.source=s,rc(v))throw v;return v}function ma(n){return Ec(n).toLowerCase()}function xa(n){return Ec(n).toUpperCase()}function ja(n,t,r){if(n=Ec(n),n&&(r||t===X))return R(n);if(!n||!(t=vu(t)))return n;var e=G(n),u=G(t);return Ou(e,W(e,u),L(e,u)+1).join(\"\")}function Aa(n,t,r){if(n=Ec(n),n&&(r||t===X))return n.slice(0,H(n)+1);if(!n||!(t=vu(t)))return n;var e=G(n);return Ou(e,0,L(e,G(t))+1).join(\"\")}function ka(n,t,r){if(n=Ec(n),n&&(r||t===X))return n.replace(Lt,\"\");\nif(!n||!(t=vu(t)))return n;var e=G(n);return Ou(e,W(e,G(t))).join(\"\")}function Oa(n,t){var r=An,e=kn;if(fc(t)){var u=\"separator\"in t?t.separator:u;r=\"length\"in t?kc(t.length):r,e=\"omission\"in t?vu(t.omission):e}n=Ec(n);var i=n.length;if(T(n)){var o=G(n);i=o.length}if(r>=i)return n;var f=r-V(e);if(f<1)return e;var c=o?Ou(o,0,f).join(\"\"):n.slice(0,f);if(u===X)return c+e;if(o&&(f+=c.length-f),Ah(u)){if(n.slice(f).search(u)){var a,l=c;for(u.global||(u=sl(u.source,Ec(Nt.exec(u))+\"g\")),u.lastIndex=0;a=u.exec(l);)var s=a.index;\nc=c.slice(0,s===X?f:s)}}else if(n.indexOf(vu(u),f)!=f){var h=c.lastIndexOf(u);h>-1&&(c=c.slice(0,h))}return c+e}function Ia(n){return n=Ec(n),n&&jt.test(n)?n.replace(mt,ye):n}function Ra(n,t,r){return n=Ec(n),t=r?X:t,t===X?$(n)?Q(n):_(n):n.match(t)||[]}function za(t){var r=null==t?0:t.length,e=mi();return t=r?c(t,function(n){if(\"function\"!=typeof n[1])throw new pl(en);return[e(n[0]),n[1]]}):[],uu(function(e){for(var u=-1;++u<r;){var i=t[u];if(n(i[0],this,e))return n(i[1],this,e)}})}function Ea(n){\nreturn Nr(Fr(n,an))}function Sa(n){return function(){return n}}function Wa(n,t){return null==n||n!==n?t:n}function La(n){return n}function Ca(n){return De(\"function\"==typeof n?n:Fr(n,an))}function Ua(n){return qe(Fr(n,an))}function Ba(n,t){return Ze(n,Fr(t,an))}function Ta(n,t,e){var u=Pc(t),i=fe(t,u);null!=e||fc(t)&&(i.length||!u.length)||(e=t,t=n,n=this,i=fe(t,Pc(t)));var o=!(fc(e)&&\"chain\"in e&&!e.chain),f=uc(n);return r(i,function(r){var e=t[r];n[r]=e,f&&(n.prototype[r]=function(){var t=this.__chain__;\nif(o||t){var r=n(this.__wrapped__);return(r.__actions__=Tu(this.__actions__)).push({func:e,args:arguments,thisArg:n}),r.__chain__=t,r}return e.apply(n,a([this.value()],arguments))})}),n}function $a(){return re._===this&&(re._=Al),this}function Da(){}function Ma(n){return n=kc(n),uu(function(t){return Ge(t,n)})}function Fa(n){return Bi(n)?m(no(n)):Qe(n)}function Na(n){return function(t){return null==n?X:_e(n,t)}}function Pa(){return[]}function qa(){return!1}function Za(){return{}}function Ka(){return\"\";\n}function Va(){return!0}function Ga(n,t){if(n=kc(n),n<1||n>Wn)return[];var r=Un,e=Hl(n,Un);t=mi(t),n-=Un;for(var u=O(e,t);++r<n;)t(r);return u}function Ha(n){return bh(n)?c(n,no):bc(n)?[n]:Tu(Cs(Ec(n)))}function Ja(n){var t=++wl;return Ec(n)+t}function Ya(n){return n&&n.length?Yr(n,La,me):X}function Qa(n,t){return n&&n.length?Yr(n,mi(t,2),me):X}function Xa(n){return w(n,La)}function nl(n,t){return w(n,mi(t,2))}function tl(n){return n&&n.length?Yr(n,La,Ne):X}function rl(n,t){return n&&n.length?Yr(n,mi(t,2),Ne):X;\n}function el(n){return n&&n.length?k(n,La):0}function ul(n,t){return n&&n.length?k(n,mi(t,2)):0}x=null==x?re:be.defaults(re.Object(),x,be.pick(re,qr));var il=x.Array,ol=x.Date,fl=x.Error,cl=x.Function,al=x.Math,ll=x.Object,sl=x.RegExp,hl=x.String,pl=x.TypeError,_l=il.prototype,vl=cl.prototype,gl=ll.prototype,yl=x[\"__core-js_shared__\"],dl=vl.toString,bl=gl.hasOwnProperty,wl=0,ml=function(){var n=/[^.]+$/.exec(yl&&yl.keys&&yl.keys.IE_PROTO||\"\");return n?\"Symbol(src)_1.\"+n:\"\"}(),xl=gl.toString,jl=dl.call(ll),Al=re._,kl=sl(\"^\"+dl.call(bl).replace(St,\"\\\\$&\").replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g,\"$1.*?\")+\"$\"),Ol=ie?x.Buffer:X,Il=x.Symbol,Rl=x.Uint8Array,zl=Ol?Ol.allocUnsafe:X,El=F(ll.getPrototypeOf,ll),Sl=ll.create,Wl=gl.propertyIsEnumerable,Ll=_l.splice,Cl=Il?Il.isConcatSpreadable:X,Ul=Il?Il.iterator:X,Bl=Il?Il.toStringTag:X,Tl=function(){\ntry{var n=Ai(ll,\"defineProperty\");return n({},\"\",{}),n}catch(n){}}(),$l=x.clearTimeout!==re.clearTimeout&&x.clearTimeout,Dl=ol&&ol.now!==re.Date.now&&ol.now,Ml=x.setTimeout!==re.setTimeout&&x.setTimeout,Fl=al.ceil,Nl=al.floor,Pl=ll.getOwnPropertySymbols,ql=Ol?Ol.isBuffer:X,Zl=x.isFinite,Kl=_l.join,Vl=F(ll.keys,ll),Gl=al.max,Hl=al.min,Jl=ol.now,Yl=x.parseInt,Ql=al.random,Xl=_l.reverse,ns=Ai(x,\"DataView\"),ts=Ai(x,\"Map\"),rs=Ai(x,\"Promise\"),es=Ai(x,\"Set\"),us=Ai(x,\"WeakMap\"),is=Ai(ll,\"create\"),os=us&&new us,fs={},cs=to(ns),as=to(ts),ls=to(rs),ss=to(es),hs=to(us),ps=Il?Il.prototype:X,_s=ps?ps.valueOf:X,vs=ps?ps.toString:X,gs=function(){\nfunction n(){}return function(t){if(!fc(t))return{};if(Sl)return Sl(t);n.prototype=t;var r=new n;return n.prototype=X,r}}();Z.templateSettings={escape:kt,evaluate:Ot,interpolate:It,variable:\"\",imports:{_:Z}},Z.prototype=J.prototype,Z.prototype.constructor=Z,Y.prototype=gs(J.prototype),Y.prototype.constructor=Y,Ct.prototype=gs(J.prototype),Ct.prototype.constructor=Ct,Xt.prototype.clear=nr,Xt.prototype.delete=tr,Xt.prototype.get=rr,Xt.prototype.has=er,Xt.prototype.set=ur,ir.prototype.clear=or,ir.prototype.delete=fr,\nir.prototype.get=cr,ir.prototype.has=ar,ir.prototype.set=lr,sr.prototype.clear=hr,sr.prototype.delete=pr,sr.prototype.get=_r,sr.prototype.has=vr,sr.prototype.set=gr,yr.prototype.add=yr.prototype.push=dr,yr.prototype.has=br,wr.prototype.clear=mr,wr.prototype.delete=xr,wr.prototype.get=jr,wr.prototype.has=Ar,wr.prototype.set=kr;var ys=Pu(ue),ds=Pu(oe,!0),bs=qu(),ws=qu(!0),ms=os?function(n,t){return os.set(n,t),n}:La,xs=Tl?function(n,t){return Tl(n,\"toString\",{configurable:!0,enumerable:!1,value:Sa(t),\nwritable:!0})}:La,js=uu,As=$l||function(n){return re.clearTimeout(n)},ks=es&&1/P(new es([,-0]))[1]==Sn?function(n){return new es(n)}:Da,Os=os?function(n){return os.get(n)}:Da,Is=Pl?function(n){return null==n?[]:(n=ll(n),i(Pl(n),function(t){return Wl.call(n,t)}))}:Pa,Rs=Pl?function(n){for(var t=[];n;)a(t,Is(n)),n=El(n);return t}:Pa,zs=we;(ns&&zs(new ns(new ArrayBuffer(1)))!=ct||ts&&zs(new ts)!=Gn||rs&&zs(rs.resolve())!=Qn||es&&zs(new es)!=tt||us&&zs(new us)!=it)&&(zs=function(n){var t=we(n),r=t==Yn?n.constructor:X,e=r?to(r):\"\";\nif(e)switch(e){case cs:return ct;case as:return Gn;case ls:return Qn;case ss:return tt;case hs:return it}return t});var Es=yl?uc:qa,Ss=Qi(ms),Ws=Ml||function(n,t){return re.setTimeout(n,t)},Ls=Qi(xs),Cs=Pi(function(n){var t=[];return 46===n.charCodeAt(0)&&t.push(\"\"),n.replace(Et,function(n,r,e,u){t.push(e?u.replace(Mt,\"$1\"):r||n)}),t}),Us=uu(function(n,t){return Jf(n)?Hr(n,ee(t,1,Jf,!0)):[]}),Bs=uu(function(n,t){var r=jo(t);return Jf(r)&&(r=X),Jf(n)?Hr(n,ee(t,1,Jf,!0),mi(r,2)):[]}),Ts=uu(function(n,t){\nvar r=jo(t);return Jf(r)&&(r=X),Jf(n)?Hr(n,ee(t,1,Jf,!0),X,r):[]}),$s=uu(function(n){var t=c(n,ju);return t.length&&t[0]===n[0]?ke(t):[]}),Ds=uu(function(n){var t=jo(n),r=c(n,ju);return t===jo(r)?t=X:r.pop(),r.length&&r[0]===n[0]?ke(r,mi(t,2)):[]}),Ms=uu(function(n){var t=jo(n),r=c(n,ju);return t=\"function\"==typeof t?t:X,t&&r.pop(),r.length&&r[0]===n[0]?ke(r,X,t):[]}),Fs=uu(Oo),Ns=gi(function(n,t){var r=null==n?0:n.length,e=Tr(n,t);return nu(n,c(t,function(n){return Ci(n,r)?+n:n}).sort(Lu)),e}),Ps=uu(function(n){\nreturn gu(ee(n,1,Jf,!0))}),qs=uu(function(n){var t=jo(n);return Jf(t)&&(t=X),gu(ee(n,1,Jf,!0),mi(t,2))}),Zs=uu(function(n){var t=jo(n);return t=\"function\"==typeof t?t:X,gu(ee(n,1,Jf,!0),X,t)}),Ks=uu(function(n,t){return Jf(n)?Hr(n,t):[]}),Vs=uu(function(n){return mu(i(n,Jf))}),Gs=uu(function(n){var t=jo(n);return Jf(t)&&(t=X),mu(i(n,Jf),mi(t,2))}),Hs=uu(function(n){var t=jo(n);return t=\"function\"==typeof t?t:X,mu(i(n,Jf),X,t)}),Js=uu(Go),Ys=uu(function(n){var t=n.length,r=t>1?n[t-1]:X;return r=\"function\"==typeof r?(n.pop(),\nr):X,Ho(n,r)}),Qs=gi(function(n){var t=n.length,r=t?n[0]:0,e=this.__wrapped__,u=function(t){return Tr(t,n)};return!(t>1||this.__actions__.length)&&e instanceof Ct&&Ci(r)?(e=e.slice(r,+r+(t?1:0)),e.__actions__.push({func:nf,args:[u],thisArg:X}),new Y(e,this.__chain__).thru(function(n){return t&&!n.length&&n.push(X),n})):this.thru(u)}),Xs=Fu(function(n,t,r){bl.call(n,r)?++n[r]:Br(n,r,1)}),nh=Ju(ho),th=Ju(po),rh=Fu(function(n,t,r){bl.call(n,r)?n[r].push(t):Br(n,r,[t])}),eh=uu(function(t,r,e){var u=-1,i=\"function\"==typeof r,o=Hf(t)?il(t.length):[];\nreturn ys(t,function(t){o[++u]=i?n(r,t,e):Ie(t,r,e)}),o}),uh=Fu(function(n,t,r){Br(n,r,t)}),ih=Fu(function(n,t,r){n[r?0:1].push(t)},function(){return[[],[]]}),oh=uu(function(n,t){if(null==n)return[];var r=t.length;return r>1&&Ui(n,t[0],t[1])?t=[]:r>2&&Ui(t[0],t[1],t[2])&&(t=[t[0]]),He(n,ee(t,1),[])}),fh=Dl||function(){return re.Date.now()},ch=uu(function(n,t,r){var e=_n;if(r.length){var u=N(r,wi(ch));e|=bn}return ai(n,e,t,r,u)}),ah=uu(function(n,t,r){var e=_n|vn;if(r.length){var u=N(r,wi(ah));e|=bn;\n}return ai(t,e,n,r,u)}),lh=uu(function(n,t){return Gr(n,1,t)}),sh=uu(function(n,t,r){return Gr(n,Ic(t)||0,r)});Cf.Cache=sr;var hh=js(function(t,r){r=1==r.length&&bh(r[0])?c(r[0],z(mi())):c(ee(r,1),z(mi()));var e=r.length;return uu(function(u){for(var i=-1,o=Hl(u.length,e);++i<o;)u[i]=r[i].call(this,u[i]);return n(t,this,u)})}),ph=uu(function(n,t){return ai(n,bn,X,t,N(t,wi(ph)))}),_h=uu(function(n,t){return ai(n,wn,X,t,N(t,wi(_h)))}),vh=gi(function(n,t){return ai(n,xn,X,X,X,t)}),gh=ii(me),yh=ii(function(n,t){\nreturn n>=t}),dh=Re(function(){return arguments}())?Re:function(n){return cc(n)&&bl.call(n,\"callee\")&&!Wl.call(n,\"callee\")},bh=il.isArray,wh=ce?z(ce):ze,mh=ql||qa,xh=ae?z(ae):Ee,jh=le?z(le):Le,Ah=se?z(se):Be,kh=he?z(he):Te,Oh=pe?z(pe):$e,Ih=ii(Ne),Rh=ii(function(n,t){return n<=t}),zh=Nu(function(n,t){if(Mi(t)||Hf(t))return $u(t,Pc(t),n),X;for(var r in t)bl.call(t,r)&&Sr(n,r,t[r])}),Eh=Nu(function(n,t){$u(t,qc(t),n)}),Sh=Nu(function(n,t,r,e){$u(t,qc(t),n,e)}),Wh=Nu(function(n,t,r,e){$u(t,Pc(t),n,e);\n}),Lh=gi(Tr),Ch=uu(function(n,t){n=ll(n);var r=-1,e=t.length,u=e>2?t[2]:X;for(u&&Ui(t[0],t[1],u)&&(e=1);++r<e;)for(var i=t[r],o=qc(i),f=-1,c=o.length;++f<c;){var a=o[f],l=n[a];(l===X||Gf(l,gl[a])&&!bl.call(n,a))&&(n[a]=i[a])}return n}),Uh=uu(function(t){return t.push(X,si),n(Mh,X,t)}),Bh=Xu(function(n,t,r){null!=t&&\"function\"!=typeof t.toString&&(t=xl.call(t)),n[t]=r},Sa(La)),Th=Xu(function(n,t,r){null!=t&&\"function\"!=typeof t.toString&&(t=xl.call(t)),bl.call(n,t)?n[t].push(r):n[t]=[r]},mi),$h=uu(Ie),Dh=Nu(function(n,t,r){\nKe(n,t,r)}),Mh=Nu(function(n,t,r,e){Ke(n,t,r,e)}),Fh=gi(function(n,t){var r={};if(null==n)return r;var e=!1;t=c(t,function(t){return t=ku(t,n),e||(e=t.length>1),t}),$u(n,di(n),r),e&&(r=Fr(r,an|ln|sn,hi));for(var u=t.length;u--;)yu(r,t[u]);return r}),Nh=gi(function(n,t){return null==n?{}:Je(n,t)}),Ph=ci(Pc),qh=ci(qc),Zh=Vu(function(n,t,r){return t=t.toLowerCase(),n+(r?fa(t):t)}),Kh=Vu(function(n,t,r){return n+(r?\"-\":\"\")+t.toLowerCase()}),Vh=Vu(function(n,t,r){return n+(r?\" \":\"\")+t.toLowerCase()}),Gh=Ku(\"toLowerCase\"),Hh=Vu(function(n,t,r){\nreturn n+(r?\"_\":\"\")+t.toLowerCase()}),Jh=Vu(function(n,t,r){return n+(r?\" \":\"\")+Qh(t)}),Yh=Vu(function(n,t,r){return n+(r?\" \":\"\")+t.toUpperCase()}),Qh=Ku(\"toUpperCase\"),Xh=uu(function(t,r){try{return n(t,X,r)}catch(n){return rc(n)?n:new fl(n)}}),np=gi(function(n,t){return r(t,function(t){t=no(t),Br(n,t,ch(n[t],n))}),n}),tp=Yu(),rp=Yu(!0),ep=uu(function(n,t){return function(r){return Ie(r,n,t)}}),up=uu(function(n,t){return function(r){return Ie(n,r,t)}}),ip=ti(c),op=ti(u),fp=ti(h),cp=ui(),ap=ui(!0),lp=ni(function(n,t){\nreturn n+t},0),sp=fi(\"ceil\"),hp=ni(function(n,t){return n/t},1),pp=fi(\"floor\"),_p=ni(function(n,t){return n*t},1),vp=fi(\"round\"),gp=ni(function(n,t){return n-t},0);return Z.after=If,Z.ary=Rf,Z.assign=zh,Z.assignIn=Eh,Z.assignInWith=Sh,Z.assignWith=Wh,Z.at=Lh,Z.before=zf,Z.bind=ch,Z.bindAll=np,Z.bindKey=ah,Z.castArray=Nf,Z.chain=Qo,Z.chunk=uo,Z.compact=io,Z.concat=oo,Z.cond=za,Z.conforms=Ea,Z.constant=Sa,Z.countBy=Xs,Z.create=Sc,Z.curry=Ef,Z.curryRight=Sf,Z.debounce=Wf,Z.defaults=Ch,Z.defaultsDeep=Uh,\nZ.defer=lh,Z.delay=sh,Z.difference=Us,Z.differenceBy=Bs,Z.differenceWith=Ts,Z.drop=fo,Z.dropRight=co,Z.dropRightWhile=ao,Z.dropWhile=lo,Z.fill=so,Z.filter=lf,Z.flatMap=sf,Z.flatMapDeep=hf,Z.flatMapDepth=pf,Z.flatten=_o,Z.flattenDeep=vo,Z.flattenDepth=go,Z.flip=Lf,Z.flow=tp,Z.flowRight=rp,Z.fromPairs=yo,Z.functions=$c,Z.functionsIn=Dc,Z.groupBy=rh,Z.initial=mo,Z.intersection=$s,Z.intersectionBy=Ds,Z.intersectionWith=Ms,Z.invert=Bh,Z.invertBy=Th,Z.invokeMap=eh,Z.iteratee=Ca,Z.keyBy=uh,Z.keys=Pc,Z.keysIn=qc,\nZ.map=yf,Z.mapKeys=Zc,Z.mapValues=Kc,Z.matches=Ua,Z.matchesProperty=Ba,Z.memoize=Cf,Z.merge=Dh,Z.mergeWith=Mh,Z.method=ep,Z.methodOf=up,Z.mixin=Ta,Z.negate=Uf,Z.nthArg=Ma,Z.omit=Fh,Z.omitBy=Vc,Z.once=Bf,Z.orderBy=df,Z.over=ip,Z.overArgs=hh,Z.overEvery=op,Z.overSome=fp,Z.partial=ph,Z.partialRight=_h,Z.partition=ih,Z.pick=Nh,Z.pickBy=Gc,Z.property=Fa,Z.propertyOf=Na,Z.pull=Fs,Z.pullAll=Oo,Z.pullAllBy=Io,Z.pullAllWith=Ro,Z.pullAt=Ns,Z.range=cp,Z.rangeRight=ap,Z.rearg=vh,Z.reject=mf,Z.remove=zo,Z.rest=Tf,\nZ.reverse=Eo,Z.sampleSize=jf,Z.set=Jc,Z.setWith=Yc,Z.shuffle=Af,Z.slice=So,Z.sortBy=oh,Z.sortedUniq=$o,Z.sortedUniqBy=Do,Z.split=da,Z.spread=$f,Z.tail=Mo,Z.take=Fo,Z.takeRight=No,Z.takeRightWhile=Po,Z.takeWhile=qo,Z.tap=Xo,Z.throttle=Df,Z.thru=nf,Z.toArray=jc,Z.toPairs=Ph,Z.toPairsIn=qh,Z.toPath=Ha,Z.toPlainObject=Rc,Z.transform=Qc,Z.unary=Mf,Z.union=Ps,Z.unionBy=qs,Z.unionWith=Zs,Z.uniq=Zo,Z.uniqBy=Ko,Z.uniqWith=Vo,Z.unset=Xc,Z.unzip=Go,Z.unzipWith=Ho,Z.update=na,Z.updateWith=ta,Z.values=ra,Z.valuesIn=ea,\nZ.without=Ks,Z.words=Ra,Z.wrap=Ff,Z.xor=Vs,Z.xorBy=Gs,Z.xorWith=Hs,Z.zip=Js,Z.zipObject=Jo,Z.zipObjectDeep=Yo,Z.zipWith=Ys,Z.entries=Ph,Z.entriesIn=qh,Z.extend=Eh,Z.extendWith=Sh,Ta(Z,Z),Z.add=lp,Z.attempt=Xh,Z.camelCase=Zh,Z.capitalize=fa,Z.ceil=sp,Z.clamp=ua,Z.clone=Pf,Z.cloneDeep=Zf,Z.cloneDeepWith=Kf,Z.cloneWith=qf,Z.conformsTo=Vf,Z.deburr=ca,Z.defaultTo=Wa,Z.divide=hp,Z.endsWith=aa,Z.eq=Gf,Z.escape=la,Z.escapeRegExp=sa,Z.every=af,Z.find=nh,Z.findIndex=ho,Z.findKey=Wc,Z.findLast=th,Z.findLastIndex=po,\nZ.findLastKey=Lc,Z.floor=pp,Z.forEach=_f,Z.forEachRight=vf,Z.forIn=Cc,Z.forInRight=Uc,Z.forOwn=Bc,Z.forOwnRight=Tc,Z.get=Mc,Z.gt=gh,Z.gte=yh,Z.has=Fc,Z.hasIn=Nc,Z.head=bo,Z.identity=La,Z.includes=gf,Z.indexOf=wo,Z.inRange=ia,Z.invoke=$h,Z.isArguments=dh,Z.isArray=bh,Z.isArrayBuffer=wh,Z.isArrayLike=Hf,Z.isArrayLikeObject=Jf,Z.isBoolean=Yf,Z.isBuffer=mh,Z.isDate=xh,Z.isElement=Qf,Z.isEmpty=Xf,Z.isEqual=nc,Z.isEqualWith=tc,Z.isError=rc,Z.isFinite=ec,Z.isFunction=uc,Z.isInteger=ic,Z.isLength=oc,Z.isMap=jh,\nZ.isMatch=ac,Z.isMatchWith=lc,Z.isNaN=sc,Z.isNative=hc,Z.isNil=_c,Z.isNull=pc,Z.isNumber=vc,Z.isObject=fc,Z.isObjectLike=cc,Z.isPlainObject=gc,Z.isRegExp=Ah,Z.isSafeInteger=yc,Z.isSet=kh,Z.isString=dc,Z.isSymbol=bc,Z.isTypedArray=Oh,Z.isUndefined=wc,Z.isWeakMap=mc,Z.isWeakSet=xc,Z.join=xo,Z.kebabCase=Kh,Z.last=jo,Z.lastIndexOf=Ao,Z.lowerCase=Vh,Z.lowerFirst=Gh,Z.lt=Ih,Z.lte=Rh,Z.max=Ya,Z.maxBy=Qa,Z.mean=Xa,Z.meanBy=nl,Z.min=tl,Z.minBy=rl,Z.stubArray=Pa,Z.stubFalse=qa,Z.stubObject=Za,Z.stubString=Ka,\nZ.stubTrue=Va,Z.multiply=_p,Z.nth=ko,Z.noConflict=$a,Z.noop=Da,Z.now=fh,Z.pad=ha,Z.padEnd=pa,Z.padStart=_a,Z.parseInt=va,Z.random=oa,Z.reduce=bf,Z.reduceRight=wf,Z.repeat=ga,Z.replace=ya,Z.result=Hc,Z.round=vp,Z.runInContext=p,Z.sample=xf,Z.size=kf,Z.snakeCase=Hh,Z.some=Of,Z.sortedIndex=Wo,Z.sortedIndexBy=Lo,Z.sortedIndexOf=Co,Z.sortedLastIndex=Uo,Z.sortedLastIndexBy=Bo,Z.sortedLastIndexOf=To,Z.startCase=Jh,Z.startsWith=ba,Z.subtract=gp,Z.sum=el,Z.sumBy=ul,Z.template=wa,Z.times=Ga,Z.toFinite=Ac,Z.toInteger=kc,\nZ.toLength=Oc,Z.toLower=ma,Z.toNumber=Ic,Z.toSafeInteger=zc,Z.toString=Ec,Z.toUpper=xa,Z.trim=ja,Z.trimEnd=Aa,Z.trimStart=ka,Z.truncate=Oa,Z.unescape=Ia,Z.uniqueId=Ja,Z.upperCase=Yh,Z.upperFirst=Qh,Z.each=_f,Z.eachRight=vf,Z.first=bo,Ta(Z,function(){var n={};return ue(Z,function(t,r){bl.call(Z.prototype,r)||(n[r]=t)}),n}(),{chain:!1}),Z.VERSION=nn,r([\"bind\",\"bindKey\",\"curry\",\"curryRight\",\"partial\",\"partialRight\"],function(n){Z[n].placeholder=Z}),r([\"drop\",\"take\"],function(n,t){Ct.prototype[n]=function(r){\nr=r===X?1:Gl(kc(r),0);var e=this.__filtered__&&!t?new Ct(this):this.clone();return e.__filtered__?e.__takeCount__=Hl(r,e.__takeCount__):e.__views__.push({size:Hl(r,Un),type:n+(e.__dir__<0?\"Right\":\"\")}),e},Ct.prototype[n+\"Right\"]=function(t){return this.reverse()[n](t).reverse()}}),r([\"filter\",\"map\",\"takeWhile\"],function(n,t){var r=t+1,e=r==Rn||r==En;Ct.prototype[n]=function(n){var t=this.clone();return t.__iteratees__.push({iteratee:mi(n,3),type:r}),t.__filtered__=t.__filtered__||e,t}}),r([\"head\",\"last\"],function(n,t){\nvar r=\"take\"+(t?\"Right\":\"\");Ct.prototype[n]=function(){return this[r](1).value()[0]}}),r([\"initial\",\"tail\"],function(n,t){var r=\"drop\"+(t?\"\":\"Right\");Ct.prototype[n]=function(){return this.__filtered__?new Ct(this):this[r](1)}}),Ct.prototype.compact=function(){return this.filter(La)},Ct.prototype.find=function(n){return this.filter(n).head()},Ct.prototype.findLast=function(n){return this.reverse().find(n)},Ct.prototype.invokeMap=uu(function(n,t){return\"function\"==typeof n?new Ct(this):this.map(function(r){\nreturn Ie(r,n,t)})}),Ct.prototype.reject=function(n){return this.filter(Uf(mi(n)))},Ct.prototype.slice=function(n,t){n=kc(n);var r=this;return r.__filtered__&&(n>0||t<0)?new Ct(r):(n<0?r=r.takeRight(-n):n&&(r=r.drop(n)),t!==X&&(t=kc(t),r=t<0?r.dropRight(-t):r.take(t-n)),r)},Ct.prototype.takeRightWhile=function(n){return this.reverse().takeWhile(n).reverse()},Ct.prototype.toArray=function(){return this.take(Un)},ue(Ct.prototype,function(n,t){var r=/^(?:filter|find|map|reject)|While$/.test(t),e=/^(?:head|last)$/.test(t),u=Z[e?\"take\"+(\"last\"==t?\"Right\":\"\"):t],i=e||/^find/.test(t);\nu&&(Z.prototype[t]=function(){var t=this.__wrapped__,o=e?[1]:arguments,f=t instanceof Ct,c=o[0],l=f||bh(t),s=function(n){var t=u.apply(Z,a([n],o));return e&&h?t[0]:t};l&&r&&\"function\"==typeof c&&1!=c.length&&(f=l=!1);var h=this.__chain__,p=!!this.__actions__.length,_=i&&!h,v=f&&!p;if(!i&&l){t=v?t:new Ct(this);var g=n.apply(t,o);return g.__actions__.push({func:nf,args:[s],thisArg:X}),new Y(g,h)}return _&&v?n.apply(this,o):(g=this.thru(s),_?e?g.value()[0]:g.value():g)})}),r([\"pop\",\"push\",\"shift\",\"sort\",\"splice\",\"unshift\"],function(n){\nvar t=_l[n],r=/^(?:push|sort|unshift)$/.test(n)?\"tap\":\"thru\",e=/^(?:pop|shift)$/.test(n);Z.prototype[n]=function(){var n=arguments;if(e&&!this.__chain__){var u=this.value();return t.apply(bh(u)?u:[],n)}return this[r](function(r){return t.apply(bh(r)?r:[],n)})}}),ue(Ct.prototype,function(n,t){var r=Z[t];if(r){var e=r.name+\"\";bl.call(fs,e)||(fs[e]=[]),fs[e].push({name:t,func:r})}}),fs[Qu(X,vn).name]=[{name:\"wrapper\",func:X}],Ct.prototype.clone=$t,Ct.prototype.reverse=Yt,Ct.prototype.value=Qt,Z.prototype.at=Qs,\nZ.prototype.chain=tf,Z.prototype.commit=rf,Z.prototype.next=ef,Z.prototype.plant=of,Z.prototype.reverse=ff,Z.prototype.toJSON=Z.prototype.valueOf=Z.prototype.value=cf,Z.prototype.first=Z.prototype.head,Ul&&(Z.prototype[Ul]=uf),Z},be=de();\"function\"==typeof define&&\"object\"==typeof define.amd&&define.amd?(re._=be,define(function(){return be})):ue?((ue.exports=be)._=be,ee._=be):re._=be}).call(this);","var root = require('./_root');\n\n/**\n * Gets the timestamp of the number of milliseconds that have elapsed since\n * the Unix epoch (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Date\n * @returns {number} Returns the timestamp.\n * @example\n *\n * _.defer(function(stamp) {\n *   console.log(_.now() - stamp);\n * }, _.now());\n * // => Logs the number of milliseconds it took for the deferred invocation.\n */\nvar now = function() {\n  return root.Date.now();\n};\n\nmodule.exports = now;\n","var before = require('./before');\n\n/**\n * Creates a function that is restricted to invoking `func` once. Repeat calls\n * to the function return the value of the first invocation. The `func` is\n * invoked with the `this` binding and arguments of the created function.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new restricted function.\n * @example\n *\n * var initialize = _.once(createApplication);\n * initialize();\n * initialize();\n * // => `createApplication` is invoked once\n */\nfunction once(func) {\n  return before(2, func);\n}\n\nmodule.exports = once;\n","/**\n * This method returns a new empty array.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {Array} Returns the new empty array.\n * @example\n *\n * var arrays = _.times(2, _.stubArray);\n *\n * console.log(arrays);\n * // => [[], []]\n *\n * console.log(arrays[0] === arrays[1]);\n * // => false\n */\nfunction stubArray() {\n  return [];\n}\n\nmodule.exports = stubArray;\n","/**\n * This method returns `false`.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {boolean} Returns `false`.\n * @example\n *\n * _.times(2, _.stubFalse);\n * // => [false, false]\n */\nfunction stubFalse() {\n  return false;\n}\n\nmodule.exports = stubFalse;\n","var toNumber = require('./toNumber');\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0,\n    MAX_INTEGER = 1.7976931348623157e+308;\n\n/**\n * Converts `value` to a finite number.\n *\n * @static\n * @memberOf _\n * @since 4.12.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted number.\n * @example\n *\n * _.toFinite(3.2);\n * // => 3.2\n *\n * _.toFinite(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toFinite(Infinity);\n * // => 1.7976931348623157e+308\n *\n * _.toFinite('3.2');\n * // => 3.2\n */\nfunction toFinite(value) {\n  if (!value) {\n    return value === 0 ? value : 0;\n  }\n  value = toNumber(value);\n  if (value === INFINITY || value === -INFINITY) {\n    var sign = (value < 0 ? -1 : 1);\n    return sign * MAX_INTEGER;\n  }\n  return value === value ? value : 0;\n}\n\nmodule.exports = toFinite;\n","var toFinite = require('./toFinite');\n\n/**\n * Converts `value` to an integer.\n *\n * **Note:** This method is loosely based on\n * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted integer.\n * @example\n *\n * _.toInteger(3.2);\n * // => 3\n *\n * _.toInteger(Number.MIN_VALUE);\n * // => 0\n *\n * _.toInteger(Infinity);\n * // => 1.7976931348623157e+308\n *\n * _.toInteger('3.2');\n * // => 3\n */\nfunction toInteger(value) {\n  var result = toFinite(value),\n      remainder = result % 1;\n\n  return result === result ? (remainder ? result - remainder : result) : 0;\n}\n\nmodule.exports = toInteger;\n","var baseTrim = require('./_baseTrim'),\n    isObject = require('./isObject'),\n    isSymbol = require('./isSymbol');\n\n/** Used as references for various `Number` constants. */\nvar NAN = 0 / 0;\n\n/** Used to detect bad signed hexadecimal string values. */\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n/** Used to detect binary string values. */\nvar reIsBinary = /^0b[01]+$/i;\n\n/** Used to detect octal string values. */\nvar reIsOctal = /^0o[0-7]+$/i;\n\n/** Built-in method references without a dependency on `root`. */\nvar freeParseInt = parseInt;\n\n/**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\nfunction toNumber(value) {\n  if (typeof value == 'number') {\n    return value;\n  }\n  if (isSymbol(value)) {\n    return NAN;\n  }\n  if (isObject(value)) {\n    var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n    value = isObject(other) ? (other + '') : other;\n  }\n  if (typeof value != 'string') {\n    return value === 0 ? value : +value;\n  }\n  value = baseTrim(value);\n  var isBinary = reIsBinary.test(value);\n  return (isBinary || reIsOctal.test(value))\n    ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n    : (reIsBadHex.test(value) ? NAN : +value);\n}\n\nmodule.exports = toNumber;\n","'use strict';\n\nvar Config = {\n    DEBUG: false,\n    LIB_VERSION: '2.48.1'\n};\n\n// since es6 imports are static and we run unit tests from the console, window won't be defined when importing this file\nvar window$1;\nif (typeof(window) === 'undefined') {\n    var loc = {\n        hostname: ''\n    };\n    window$1 = {\n        navigator: { userAgent: '' },\n        document: {\n            location: loc,\n            referrer: ''\n        },\n        screen: { width: 0, height: 0 },\n        location: loc\n    };\n} else {\n    window$1 = window;\n}\n\n/*\n * Saved references to long variable names, so that closure compiler can\n * minimize file size.\n */\n\nvar ArrayProto = Array.prototype;\nvar FuncProto = Function.prototype;\nvar ObjProto = Object.prototype;\nvar slice = ArrayProto.slice;\nvar toString = ObjProto.toString;\nvar hasOwnProperty = ObjProto.hasOwnProperty;\nvar windowConsole = window$1.console;\nvar navigator = window$1.navigator;\nvar document$1 = window$1.document;\nvar windowOpera = window$1.opera;\nvar screen = window$1.screen;\nvar userAgent = navigator.userAgent;\nvar nativeBind = FuncProto.bind;\nvar nativeForEach = ArrayProto.forEach;\nvar nativeIndexOf = ArrayProto.indexOf;\nvar nativeMap = ArrayProto.map;\nvar nativeIsArray = Array.isArray;\nvar breaker = {};\nvar _ = {\n    trim: function(str) {\n        // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/Trim#Polyfill\n        return str.replace(/^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g, '');\n    }\n};\n\n// Console override\nvar console = {\n    /** @type {function(...*)} */\n    log: function() {\n        if (Config.DEBUG && !_.isUndefined(windowConsole) && windowConsole) {\n            try {\n                windowConsole.log.apply(windowConsole, arguments);\n            } catch (err) {\n                _.each(arguments, function(arg) {\n                    windowConsole.log(arg);\n                });\n            }\n        }\n    },\n    /** @type {function(...*)} */\n    warn: function() {\n        if (Config.DEBUG && !_.isUndefined(windowConsole) && windowConsole) {\n            var args = ['Mixpanel warning:'].concat(_.toArray(arguments));\n            try {\n                windowConsole.warn.apply(windowConsole, args);\n            } catch (err) {\n                _.each(args, function(arg) {\n                    windowConsole.warn(arg);\n                });\n            }\n        }\n    },\n    /** @type {function(...*)} */\n    error: function() {\n        if (Config.DEBUG && !_.isUndefined(windowConsole) && windowConsole) {\n            var args = ['Mixpanel error:'].concat(_.toArray(arguments));\n            try {\n                windowConsole.error.apply(windowConsole, args);\n            } catch (err) {\n                _.each(args, function(arg) {\n                    windowConsole.error(arg);\n                });\n            }\n        }\n    },\n    /** @type {function(...*)} */\n    critical: function() {\n        if (!_.isUndefined(windowConsole) && windowConsole) {\n            var args = ['Mixpanel error:'].concat(_.toArray(arguments));\n            try {\n                windowConsole.error.apply(windowConsole, args);\n            } catch (err) {\n                _.each(args, function(arg) {\n                    windowConsole.error(arg);\n                });\n            }\n        }\n    }\n};\n\nvar log_func_with_prefix = function(func, prefix) {\n    return function() {\n        arguments[0] = '[' + prefix + '] ' + arguments[0];\n        return func.apply(console, arguments);\n    };\n};\nvar console_with_prefix = function(prefix) {\n    return {\n        log: log_func_with_prefix(console.log, prefix),\n        error: log_func_with_prefix(console.error, prefix),\n        critical: log_func_with_prefix(console.critical, prefix)\n    };\n};\n\n\n// UNDERSCORE\n// Embed part of the Underscore Library\n_.bind = function(func, context) {\n    var args, bound;\n    if (nativeBind && func.bind === nativeBind) {\n        return nativeBind.apply(func, slice.call(arguments, 1));\n    }\n    if (!_.isFunction(func)) {\n        throw new TypeError();\n    }\n    args = slice.call(arguments, 2);\n    bound = function() {\n        if (!(this instanceof bound)) {\n            return func.apply(context, args.concat(slice.call(arguments)));\n        }\n        var ctor = {};\n        ctor.prototype = func.prototype;\n        var self = new ctor();\n        ctor.prototype = null;\n        var result = func.apply(self, args.concat(slice.call(arguments)));\n        if (Object(result) === result) {\n            return result;\n        }\n        return self;\n    };\n    return bound;\n};\n\n/**\n * @param {*=} obj\n * @param {function(...*)=} iterator\n * @param {Object=} context\n */\n_.each = function(obj, iterator, context) {\n    if (obj === null || obj === undefined) {\n        return;\n    }\n    if (nativeForEach && obj.forEach === nativeForEach) {\n        obj.forEach(iterator, context);\n    } else if (obj.length === +obj.length) {\n        for (var i = 0, l = obj.length; i < l; i++) {\n            if (i in obj && iterator.call(context, obj[i], i, obj) === breaker) {\n                return;\n            }\n        }\n    } else {\n        for (var key in obj) {\n            if (hasOwnProperty.call(obj, key)) {\n                if (iterator.call(context, obj[key], key, obj) === breaker) {\n                    return;\n                }\n            }\n        }\n    }\n};\n\n_.extend = function(obj) {\n    _.each(slice.call(arguments, 1), function(source) {\n        for (var prop in source) {\n            if (source[prop] !== void 0) {\n                obj[prop] = source[prop];\n            }\n        }\n    });\n    return obj;\n};\n\n_.isArray = nativeIsArray || function(obj) {\n    return toString.call(obj) === '[object Array]';\n};\n\n// from a comment on http://dbj.org/dbj/?p=286\n// fails on only one very rare and deliberate custom object:\n// var bomb = { toString : undefined, valueOf: function(o) { return \"function BOMBA!\"; }};\n_.isFunction = function(f) {\n    try {\n        return /^\\s*\\bfunction\\b/.test(f);\n    } catch (x) {\n        return false;\n    }\n};\n\n_.isArguments = function(obj) {\n    return !!(obj && hasOwnProperty.call(obj, 'callee'));\n};\n\n_.toArray = function(iterable) {\n    if (!iterable) {\n        return [];\n    }\n    if (iterable.toArray) {\n        return iterable.toArray();\n    }\n    if (_.isArray(iterable)) {\n        return slice.call(iterable);\n    }\n    if (_.isArguments(iterable)) {\n        return slice.call(iterable);\n    }\n    return _.values(iterable);\n};\n\n_.map = function(arr, callback, context) {\n    if (nativeMap && arr.map === nativeMap) {\n        return arr.map(callback, context);\n    } else {\n        var results = [];\n        _.each(arr, function(item) {\n            results.push(callback.call(context, item));\n        });\n        return results;\n    }\n};\n\n_.keys = function(obj) {\n    var results = [];\n    if (obj === null) {\n        return results;\n    }\n    _.each(obj, function(value, key) {\n        results[results.length] = key;\n    });\n    return results;\n};\n\n_.values = function(obj) {\n    var results = [];\n    if (obj === null) {\n        return results;\n    }\n    _.each(obj, function(value) {\n        results[results.length] = value;\n    });\n    return results;\n};\n\n_.include = function(obj, target) {\n    var found = false;\n    if (obj === null) {\n        return found;\n    }\n    if (nativeIndexOf && obj.indexOf === nativeIndexOf) {\n        return obj.indexOf(target) != -1;\n    }\n    _.each(obj, function(value) {\n        if (found || (found = (value === target))) {\n            return breaker;\n        }\n    });\n    return found;\n};\n\n_.includes = function(str, needle) {\n    return str.indexOf(needle) !== -1;\n};\n\n// Underscore Addons\n_.inherit = function(subclass, superclass) {\n    subclass.prototype = new superclass();\n    subclass.prototype.constructor = subclass;\n    subclass.superclass = superclass.prototype;\n    return subclass;\n};\n\n_.isObject = function(obj) {\n    return (obj === Object(obj) && !_.isArray(obj));\n};\n\n_.isEmptyObject = function(obj) {\n    if (_.isObject(obj)) {\n        for (var key in obj) {\n            if (hasOwnProperty.call(obj, key)) {\n                return false;\n            }\n        }\n        return true;\n    }\n    return false;\n};\n\n_.isUndefined = function(obj) {\n    return obj === void 0;\n};\n\n_.isString = function(obj) {\n    return toString.call(obj) == '[object String]';\n};\n\n_.isDate = function(obj) {\n    return toString.call(obj) == '[object Date]';\n};\n\n_.isNumber = function(obj) {\n    return toString.call(obj) == '[object Number]';\n};\n\n_.isElement = function(obj) {\n    return !!(obj && obj.nodeType === 1);\n};\n\n_.encodeDates = function(obj) {\n    _.each(obj, function(v, k) {\n        if (_.isDate(v)) {\n            obj[k] = _.formatDate(v);\n        } else if (_.isObject(v)) {\n            obj[k] = _.encodeDates(v); // recurse\n        }\n    });\n    return obj;\n};\n\n_.timestamp = function() {\n    Date.now = Date.now || function() {\n        return +new Date;\n    };\n    return Date.now();\n};\n\n_.formatDate = function(d) {\n    // YYYY-MM-DDTHH:MM:SS in UTC\n    function pad(n) {\n        return n < 10 ? '0' + n : n;\n    }\n    return d.getUTCFullYear() + '-' +\n        pad(d.getUTCMonth() + 1) + '-' +\n        pad(d.getUTCDate()) + 'T' +\n        pad(d.getUTCHours()) + ':' +\n        pad(d.getUTCMinutes()) + ':' +\n        pad(d.getUTCSeconds());\n};\n\n_.strip_empty_properties = function(p) {\n    var ret = {};\n    _.each(p, function(v, k) {\n        if (_.isString(v) && v.length > 0) {\n            ret[k] = v;\n        }\n    });\n    return ret;\n};\n\n/*\n * this function returns a copy of object after truncating it.  If\n * passed an Array or Object it will iterate through obj and\n * truncate all the values recursively.\n */\n_.truncate = function(obj, length) {\n    var ret;\n\n    if (typeof(obj) === 'string') {\n        ret = obj.slice(0, length);\n    } else if (_.isArray(obj)) {\n        ret = [];\n        _.each(obj, function(val) {\n            ret.push(_.truncate(val, length));\n        });\n    } else if (_.isObject(obj)) {\n        ret = {};\n        _.each(obj, function(val, key) {\n            ret[key] = _.truncate(val, length);\n        });\n    } else {\n        ret = obj;\n    }\n\n    return ret;\n};\n\n_.JSONEncode = (function() {\n    return function(mixed_val) {\n        var value = mixed_val;\n        var quote = function(string) {\n            var escapable = /[\\\\\"\\x00-\\x1f\\x7f-\\x9f\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/g; // eslint-disable-line no-control-regex\n            var meta = { // table of character substitutions\n                '\\b': '\\\\b',\n                '\\t': '\\\\t',\n                '\\n': '\\\\n',\n                '\\f': '\\\\f',\n                '\\r': '\\\\r',\n                '\"': '\\\\\"',\n                '\\\\': '\\\\\\\\'\n            };\n\n            escapable.lastIndex = 0;\n            return escapable.test(string) ?\n                '\"' + string.replace(escapable, function(a) {\n                    var c = meta[a];\n                    return typeof c === 'string' ? c :\n                        '\\\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4);\n                }) + '\"' :\n                '\"' + string + '\"';\n        };\n\n        var str = function(key, holder) {\n            var gap = '';\n            var indent = '    ';\n            var i = 0; // The loop counter.\n            var k = ''; // The member key.\n            var v = ''; // The member value.\n            var length = 0;\n            var mind = gap;\n            var partial = [];\n            var value = holder[key];\n\n            // If the value has a toJSON method, call it to obtain a replacement value.\n            if (value && typeof value === 'object' &&\n                typeof value.toJSON === 'function') {\n                value = value.toJSON(key);\n            }\n\n            // What happens next depends on the value's type.\n            switch (typeof value) {\n                case 'string':\n                    return quote(value);\n\n                case 'number':\n                    // JSON numbers must be finite. Encode non-finite numbers as null.\n                    return isFinite(value) ? String(value) : 'null';\n\n                case 'boolean':\n                case 'null':\n                    // If the value is a boolean or null, convert it to a string. Note:\n                    // typeof null does not produce 'null'. The case is included here in\n                    // the remote chance that this gets fixed someday.\n\n                    return String(value);\n\n                case 'object':\n                    // If the type is 'object', we might be dealing with an object or an array or\n                    // null.\n                    // Due to a specification blunder in ECMAScript, typeof null is 'object',\n                    // so watch out for that case.\n                    if (!value) {\n                        return 'null';\n                    }\n\n                    // Make an array to hold the partial results of stringifying this object value.\n                    gap += indent;\n                    partial = [];\n\n                    // Is the value an array?\n                    if (toString.apply(value) === '[object Array]') {\n                        // The value is an array. Stringify every element. Use null as a placeholder\n                        // for non-JSON values.\n\n                        length = value.length;\n                        for (i = 0; i < length; i += 1) {\n                            partial[i] = str(i, value) || 'null';\n                        }\n\n                        // Join all of the elements together, separated with commas, and wrap them in\n                        // brackets.\n                        v = partial.length === 0 ? '[]' :\n                            gap ? '[\\n' + gap +\n                            partial.join(',\\n' + gap) + '\\n' +\n                            mind + ']' :\n                                '[' + partial.join(',') + ']';\n                        gap = mind;\n                        return v;\n                    }\n\n                    // Iterate through all of the keys in the object.\n                    for (k in value) {\n                        if (hasOwnProperty.call(value, k)) {\n                            v = str(k, value);\n                            if (v) {\n                                partial.push(quote(k) + (gap ? ': ' : ':') + v);\n                            }\n                        }\n                    }\n\n                    // Join all of the member texts together, separated with commas,\n                    // and wrap them in braces.\n                    v = partial.length === 0 ? '{}' :\n                        gap ? '{' + partial.join(',') + '' +\n                        mind + '}' : '{' + partial.join(',') + '}';\n                    gap = mind;\n                    return v;\n            }\n        };\n\n        // Make a fake root object containing our value under the key of ''.\n        // Return the result of stringifying the value.\n        return str('', {\n            '': value\n        });\n    };\n})();\n\n/**\n * From https://github.com/douglascrockford/JSON-js/blob/master/json_parse.js\n * Slightly modified to throw a real Error rather than a POJO\n */\n_.JSONDecode = (function() {\n    var at, // The index of the current character\n        ch, // The current character\n        escapee = {\n            '\"': '\"',\n            '\\\\': '\\\\',\n            '/': '/',\n            'b': '\\b',\n            'f': '\\f',\n            'n': '\\n',\n            'r': '\\r',\n            't': '\\t'\n        },\n        text,\n        error = function(m) {\n            var e = new SyntaxError(m);\n            e.at = at;\n            e.text = text;\n            throw e;\n        },\n        next = function(c) {\n            // If a c parameter is provided, verify that it matches the current character.\n            if (c && c !== ch) {\n                error('Expected \\'' + c + '\\' instead of \\'' + ch + '\\'');\n            }\n            // Get the next character. When there are no more characters,\n            // return the empty string.\n            ch = text.charAt(at);\n            at += 1;\n            return ch;\n        },\n        number = function() {\n            // Parse a number value.\n            var number,\n                string = '';\n\n            if (ch === '-') {\n                string = '-';\n                next('-');\n            }\n            while (ch >= '0' && ch <= '9') {\n                string += ch;\n                next();\n            }\n            if (ch === '.') {\n                string += '.';\n                while (next() && ch >= '0' && ch <= '9') {\n                    string += ch;\n                }\n            }\n            if (ch === 'e' || ch === 'E') {\n                string += ch;\n                next();\n                if (ch === '-' || ch === '+') {\n                    string += ch;\n                    next();\n                }\n                while (ch >= '0' && ch <= '9') {\n                    string += ch;\n                    next();\n                }\n            }\n            number = +string;\n            if (!isFinite(number)) {\n                error('Bad number');\n            } else {\n                return number;\n            }\n        },\n\n        string = function() {\n            // Parse a string value.\n            var hex,\n                i,\n                string = '',\n                uffff;\n            // When parsing for string values, we must look for \" and \\ characters.\n            if (ch === '\"') {\n                while (next()) {\n                    if (ch === '\"') {\n                        next();\n                        return string;\n                    }\n                    if (ch === '\\\\') {\n                        next();\n                        if (ch === 'u') {\n                            uffff = 0;\n                            for (i = 0; i < 4; i += 1) {\n                                hex = parseInt(next(), 16);\n                                if (!isFinite(hex)) {\n                                    break;\n                                }\n                                uffff = uffff * 16 + hex;\n                            }\n                            string += String.fromCharCode(uffff);\n                        } else if (typeof escapee[ch] === 'string') {\n                            string += escapee[ch];\n                        } else {\n                            break;\n                        }\n                    } else {\n                        string += ch;\n                    }\n                }\n            }\n            error('Bad string');\n        },\n        white = function() {\n            // Skip whitespace.\n            while (ch && ch <= ' ') {\n                next();\n            }\n        },\n        word = function() {\n            // true, false, or null.\n            switch (ch) {\n                case 't':\n                    next('t');\n                    next('r');\n                    next('u');\n                    next('e');\n                    return true;\n                case 'f':\n                    next('f');\n                    next('a');\n                    next('l');\n                    next('s');\n                    next('e');\n                    return false;\n                case 'n':\n                    next('n');\n                    next('u');\n                    next('l');\n                    next('l');\n                    return null;\n            }\n            error('Unexpected \"' + ch + '\"');\n        },\n        value, // Placeholder for the value function.\n        array = function() {\n            // Parse an array value.\n            var array = [];\n\n            if (ch === '[') {\n                next('[');\n                white();\n                if (ch === ']') {\n                    next(']');\n                    return array; // empty array\n                }\n                while (ch) {\n                    array.push(value());\n                    white();\n                    if (ch === ']') {\n                        next(']');\n                        return array;\n                    }\n                    next(',');\n                    white();\n                }\n            }\n            error('Bad array');\n        },\n        object = function() {\n            // Parse an object value.\n            var key,\n                object = {};\n\n            if (ch === '{') {\n                next('{');\n                white();\n                if (ch === '}') {\n                    next('}');\n                    return object; // empty object\n                }\n                while (ch) {\n                    key = string();\n                    white();\n                    next(':');\n                    if (Object.hasOwnProperty.call(object, key)) {\n                        error('Duplicate key \"' + key + '\"');\n                    }\n                    object[key] = value();\n                    white();\n                    if (ch === '}') {\n                        next('}');\n                        return object;\n                    }\n                    next(',');\n                    white();\n                }\n            }\n            error('Bad object');\n        };\n\n    value = function() {\n        // Parse a JSON value. It could be an object, an array, a string,\n        // a number, or a word.\n        white();\n        switch (ch) {\n            case '{':\n                return object();\n            case '[':\n                return array();\n            case '\"':\n                return string();\n            case '-':\n                return number();\n            default:\n                return ch >= '0' && ch <= '9' ? number() : word();\n        }\n    };\n\n    // Return the json_parse function. It will have access to all of the\n    // above functions and variables.\n    return function(source) {\n        var result;\n\n        text = source;\n        at = 0;\n        ch = ' ';\n        result = value();\n        white();\n        if (ch) {\n            error('Syntax error');\n        }\n\n        return result;\n    };\n})();\n\n_.base64Encode = function(data) {\n    var b64 = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\n    var o1, o2, o3, h1, h2, h3, h4, bits, i = 0,\n        ac = 0,\n        enc = '',\n        tmp_arr = [];\n\n    if (!data) {\n        return data;\n    }\n\n    data = _.utf8Encode(data);\n\n    do { // pack three octets into four hexets\n        o1 = data.charCodeAt(i++);\n        o2 = data.charCodeAt(i++);\n        o3 = data.charCodeAt(i++);\n\n        bits = o1 << 16 | o2 << 8 | o3;\n\n        h1 = bits >> 18 & 0x3f;\n        h2 = bits >> 12 & 0x3f;\n        h3 = bits >> 6 & 0x3f;\n        h4 = bits & 0x3f;\n\n        // use hexets to index into b64, and append result to encoded string\n        tmp_arr[ac++] = b64.charAt(h1) + b64.charAt(h2) + b64.charAt(h3) + b64.charAt(h4);\n    } while (i < data.length);\n\n    enc = tmp_arr.join('');\n\n    switch (data.length % 3) {\n        case 1:\n            enc = enc.slice(0, -2) + '==';\n            break;\n        case 2:\n            enc = enc.slice(0, -1) + '=';\n            break;\n    }\n\n    return enc;\n};\n\n_.utf8Encode = function(string) {\n    string = (string + '').replace(/\\r\\n/g, '\\n').replace(/\\r/g, '\\n');\n\n    var utftext = '',\n        start,\n        end;\n    var stringl = 0,\n        n;\n\n    start = end = 0;\n    stringl = string.length;\n\n    for (n = 0; n < stringl; n++) {\n        var c1 = string.charCodeAt(n);\n        var enc = null;\n\n        if (c1 < 128) {\n            end++;\n        } else if ((c1 > 127) && (c1 < 2048)) {\n            enc = String.fromCharCode((c1 >> 6) | 192, (c1 & 63) | 128);\n        } else {\n            enc = String.fromCharCode((c1 >> 12) | 224, ((c1 >> 6) & 63) | 128, (c1 & 63) | 128);\n        }\n        if (enc !== null) {\n            if (end > start) {\n                utftext += string.substring(start, end);\n            }\n            utftext += enc;\n            start = end = n + 1;\n        }\n    }\n\n    if (end > start) {\n        utftext += string.substring(start, string.length);\n    }\n\n    return utftext;\n};\n\n_.UUID = (function() {\n\n    // Time-based entropy\n    var T = function() {\n        var time = 1 * new Date(); // cross-browser version of Date.now()\n        var ticks;\n        if (window$1.performance && window$1.performance.now) {\n            ticks = window$1.performance.now();\n        } else {\n            // fall back to busy loop\n            ticks = 0;\n\n            // this while loop figures how many browser ticks go by\n            // before 1*new Date() returns a new number, ie the amount\n            // of ticks that go by per millisecond\n            while (time == 1 * new Date()) {\n                ticks++;\n            }\n        }\n        return time.toString(16) + Math.floor(ticks).toString(16);\n    };\n\n    // Math.Random entropy\n    var R = function() {\n        return Math.random().toString(16).replace('.', '');\n    };\n\n    // User agent entropy\n    // This function takes the user agent string, and then xors\n    // together each sequence of 8 bytes.  This produces a final\n    // sequence of 8 bytes which it returns as hex.\n    var UA = function() {\n        var ua = userAgent,\n            i, ch, buffer = [],\n            ret = 0;\n\n        function xor(result, byte_array) {\n            var j, tmp = 0;\n            for (j = 0; j < byte_array.length; j++) {\n                tmp |= (buffer[j] << j * 8);\n            }\n            return result ^ tmp;\n        }\n\n        for (i = 0; i < ua.length; i++) {\n            ch = ua.charCodeAt(i);\n            buffer.unshift(ch & 0xFF);\n            if (buffer.length >= 4) {\n                ret = xor(ret, buffer);\n                buffer = [];\n            }\n        }\n\n        if (buffer.length > 0) {\n            ret = xor(ret, buffer);\n        }\n\n        return ret.toString(16);\n    };\n\n    return function() {\n        var se = (screen.height * screen.width).toString(16);\n        return (T() + '-' + R() + '-' + UA() + '-' + se + '-' + T());\n    };\n})();\n\n// _.isBlockedUA()\n// This is to block various web spiders from executing our JS and\n// sending false tracking data\nvar BLOCKED_UA_STRS = [\n    'ahrefsbot',\n    'baiduspider',\n    'bingbot',\n    'bingpreview',\n    'chrome-lighthouse',\n    'facebookexternal',\n    'petalbot',\n    'pinterest',\n    'screaming frog',\n    'yahoo! slurp',\n    'yandexbot',\n\n    // a whole bunch of goog-specific crawlers\n    // https://developers.google.com/search/docs/advanced/crawling/overview-google-crawlers\n    'adsbot-google',\n    'apis-google',\n    'duplexweb-google',\n    'feedfetcher-google',\n    'google favicon',\n    'google web preview',\n    'google-read-aloud',\n    'googlebot',\n    'googleweblight',\n    'mediapartners-google',\n    'storebot-google'\n];\n_.isBlockedUA = function(ua) {\n    var i;\n    ua = ua.toLowerCase();\n    for (i = 0; i < BLOCKED_UA_STRS.length; i++) {\n        if (ua.indexOf(BLOCKED_UA_STRS[i]) !== -1) {\n            return true;\n        }\n    }\n    return false;\n};\n\n/**\n * @param {Object=} formdata\n * @param {string=} arg_separator\n */\n_.HTTPBuildQuery = function(formdata, arg_separator) {\n    var use_val, use_key, tmp_arr = [];\n\n    if (_.isUndefined(arg_separator)) {\n        arg_separator = '&';\n    }\n\n    _.each(formdata, function(val, key) {\n        use_val = encodeURIComponent(val.toString());\n        use_key = encodeURIComponent(key);\n        tmp_arr[tmp_arr.length] = use_key + '=' + use_val;\n    });\n\n    return tmp_arr.join(arg_separator);\n};\n\n_.getQueryParam = function(url, param) {\n    // Expects a raw URL\n\n    param = param.replace(/[[]/, '\\\\[').replace(/[\\]]/, '\\\\]');\n    var regexS = '[\\\\?&]' + param + '=([^&#]*)',\n        regex = new RegExp(regexS),\n        results = regex.exec(url);\n    if (results === null || (results && typeof(results[1]) !== 'string' && results[1].length)) {\n        return '';\n    } else {\n        var result = results[1];\n        try {\n            result = decodeURIComponent(result);\n        } catch(err) {\n            console.error('Skipping decoding for malformed query param: ' + result);\n        }\n        return result.replace(/\\+/g, ' ');\n    }\n};\n\n\n// _.cookie\n// Methods partially borrowed from quirksmode.org/js/cookies.html\n_.cookie = {\n    get: function(name) {\n        var nameEQ = name + '=';\n        var ca = document$1.cookie.split(';');\n        for (var i = 0; i < ca.length; i++) {\n            var c = ca[i];\n            while (c.charAt(0) == ' ') {\n                c = c.substring(1, c.length);\n            }\n            if (c.indexOf(nameEQ) === 0) {\n                return decodeURIComponent(c.substring(nameEQ.length, c.length));\n            }\n        }\n        return null;\n    },\n\n    parse: function(name) {\n        var cookie;\n        try {\n            cookie = _.JSONDecode(_.cookie.get(name)) || {};\n        } catch (err) {\n            // noop\n        }\n        return cookie;\n    },\n\n    set_seconds: function(name, value, seconds, is_cross_subdomain, is_secure, is_cross_site, domain_override) {\n        var cdomain = '',\n            expires = '',\n            secure = '';\n\n        if (domain_override) {\n            cdomain = '; domain=' + domain_override;\n        } else if (is_cross_subdomain) {\n            var domain = extract_domain(document$1.location.hostname);\n            cdomain = domain ? '; domain=.' + domain : '';\n        }\n\n        if (seconds) {\n            var date = new Date();\n            date.setTime(date.getTime() + (seconds * 1000));\n            expires = '; expires=' + date.toGMTString();\n        }\n\n        if (is_cross_site) {\n            is_secure = true;\n            secure = '; SameSite=None';\n        }\n        if (is_secure) {\n            secure += '; secure';\n        }\n\n        document$1.cookie = name + '=' + encodeURIComponent(value) + expires + '; path=/' + cdomain + secure;\n    },\n\n    set: function(name, value, days, is_cross_subdomain, is_secure, is_cross_site, domain_override) {\n        var cdomain = '', expires = '', secure = '';\n\n        if (domain_override) {\n            cdomain = '; domain=' + domain_override;\n        } else if (is_cross_subdomain) {\n            var domain = extract_domain(document$1.location.hostname);\n            cdomain = domain ? '; domain=.' + domain : '';\n        }\n\n        if (days) {\n            var date = new Date();\n            date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));\n            expires = '; expires=' + date.toGMTString();\n        }\n\n        if (is_cross_site) {\n            is_secure = true;\n            secure = '; SameSite=None';\n        }\n        if (is_secure) {\n            secure += '; secure';\n        }\n\n        var new_cookie_val = name + '=' + encodeURIComponent(value) + expires + '; path=/' + cdomain + secure;\n        document$1.cookie = new_cookie_val;\n        return new_cookie_val;\n    },\n\n    remove: function(name, is_cross_subdomain, domain_override) {\n        _.cookie.set(name, '', -1, is_cross_subdomain, false, false, domain_override);\n    }\n};\n\nvar _localStorageSupported = null;\nvar localStorageSupported = function(storage, forceCheck) {\n    if (_localStorageSupported !== null && !forceCheck) {\n        return _localStorageSupported;\n    }\n\n    var supported = true;\n    try {\n        storage = storage || window.localStorage;\n        var key = '__mplss_' + cheap_guid(8),\n            val = 'xyz';\n        storage.setItem(key, val);\n        if (storage.getItem(key) !== val) {\n            supported = false;\n        }\n        storage.removeItem(key);\n    } catch (err) {\n        supported = false;\n    }\n\n    _localStorageSupported = supported;\n    return supported;\n};\n\n// _.localStorage\n_.localStorage = {\n    is_supported: function(force_check) {\n        var supported = localStorageSupported(null, force_check);\n        if (!supported) {\n            console.error('localStorage unsupported; falling back to cookie store');\n        }\n        return supported;\n    },\n\n    error: function(msg) {\n        console.error('localStorage error: ' + msg);\n    },\n\n    get: function(name) {\n        try {\n            return window.localStorage.getItem(name);\n        } catch (err) {\n            _.localStorage.error(err);\n        }\n        return null;\n    },\n\n    parse: function(name) {\n        try {\n            return _.JSONDecode(_.localStorage.get(name)) || {};\n        } catch (err) {\n            // noop\n        }\n        return null;\n    },\n\n    set: function(name, value) {\n        try {\n            window.localStorage.setItem(name, value);\n        } catch (err) {\n            _.localStorage.error(err);\n        }\n    },\n\n    remove: function(name) {\n        try {\n            window.localStorage.removeItem(name);\n        } catch (err) {\n            _.localStorage.error(err);\n        }\n    }\n};\n\n_.register_event = (function() {\n    // written by Dean Edwards, 2005\n    // with input from Tino Zijdel - crisp@xs4all.nl\n    // with input from Carl Sverre - mail@carlsverre.com\n    // with input from Mixpanel\n    // http://dean.edwards.name/weblog/2005/10/add-event/\n    // https://gist.github.com/1930440\n\n    /**\n     * @param {Object} element\n     * @param {string} type\n     * @param {function(...*)} handler\n     * @param {boolean=} oldSchool\n     * @param {boolean=} useCapture\n     */\n    var register_event = function(element, type, handler, oldSchool, useCapture) {\n        if (!element) {\n            console.error('No valid element provided to register_event');\n            return;\n        }\n\n        if (element.addEventListener && !oldSchool) {\n            element.addEventListener(type, handler, !!useCapture);\n        } else {\n            var ontype = 'on' + type;\n            var old_handler = element[ontype]; // can be undefined\n            element[ontype] = makeHandler(element, handler, old_handler);\n        }\n    };\n\n    function makeHandler(element, new_handler, old_handlers) {\n        var handler = function(event) {\n            event = event || fixEvent(window.event);\n\n            // this basically happens in firefox whenever another script\n            // overwrites the onload callback and doesn't pass the event\n            // object to previously defined callbacks.  All the browsers\n            // that don't define window.event implement addEventListener\n            // so the dom_loaded handler will still be fired as usual.\n            if (!event) {\n                return undefined;\n            }\n\n            var ret = true;\n            var old_result, new_result;\n\n            if (_.isFunction(old_handlers)) {\n                old_result = old_handlers(event);\n            }\n            new_result = new_handler.call(element, event);\n\n            if ((false === old_result) || (false === new_result)) {\n                ret = false;\n            }\n\n            return ret;\n        };\n\n        return handler;\n    }\n\n    function fixEvent(event) {\n        if (event) {\n            event.preventDefault = fixEvent.preventDefault;\n            event.stopPropagation = fixEvent.stopPropagation;\n        }\n        return event;\n    }\n    fixEvent.preventDefault = function() {\n        this.returnValue = false;\n    };\n    fixEvent.stopPropagation = function() {\n        this.cancelBubble = true;\n    };\n\n    return register_event;\n})();\n\n\nvar TOKEN_MATCH_REGEX = new RegExp('^(\\\\w*)\\\\[(\\\\w+)([=~\\\\|\\\\^\\\\$\\\\*]?)=?\"?([^\\\\]\"]*)\"?\\\\]$');\n\n_.dom_query = (function() {\n    /* document.getElementsBySelector(selector)\n    - returns an array of element objects from the current document\n    matching the CSS selector. Selectors can contain element names,\n    class names and ids and can be nested. For example:\n\n    elements = document.getElementsBySelector('div#main p a.external')\n\n    Will return an array of all 'a' elements with 'external' in their\n    class attribute that are contained inside 'p' elements that are\n    contained inside the 'div' element which has id=\"main\"\n\n    New in version 0.4: Support for CSS2 and CSS3 attribute selectors:\n    See http://www.w3.org/TR/css3-selectors/#attribute-selectors\n\n    Version 0.4 - Simon Willison, March 25th 2003\n    -- Works in Phoenix 0.5, Mozilla 1.3, Opera 7, Internet Explorer 6, Internet Explorer 5 on Windows\n    -- Opera 7 fails\n\n    Version 0.5 - Carl Sverre, Jan 7th 2013\n    -- Now uses jQuery-esque `hasClass` for testing class name\n    equality.  This fixes a bug related to '-' characters being\n    considered not part of a 'word' in regex.\n    */\n\n    function getAllChildren(e) {\n        // Returns all children of element. Workaround required for IE5/Windows. Ugh.\n        return e.all ? e.all : e.getElementsByTagName('*');\n    }\n\n    var bad_whitespace = /[\\t\\r\\n]/g;\n\n    function hasClass(elem, selector) {\n        var className = ' ' + selector + ' ';\n        return ((' ' + elem.className + ' ').replace(bad_whitespace, ' ').indexOf(className) >= 0);\n    }\n\n    function getElementsBySelector(selector) {\n        // Attempt to fail gracefully in lesser browsers\n        if (!document$1.getElementsByTagName) {\n            return [];\n        }\n        // Split selector in to tokens\n        var tokens = selector.split(' ');\n        var token, bits, tagName, found, foundCount, i, j, k, elements, currentContextIndex;\n        var currentContext = [document$1];\n        for (i = 0; i < tokens.length; i++) {\n            token = tokens[i].replace(/^\\s+/, '').replace(/\\s+$/, '');\n            if (token.indexOf('#') > -1) {\n                // Token is an ID selector\n                bits = token.split('#');\n                tagName = bits[0];\n                var id = bits[1];\n                var element = document$1.getElementById(id);\n                if (!element || (tagName && element.nodeName.toLowerCase() != tagName)) {\n                    // element not found or tag with that ID not found, return false\n                    return [];\n                }\n                // Set currentContext to contain just this element\n                currentContext = [element];\n                continue; // Skip to next token\n            }\n            if (token.indexOf('.') > -1) {\n                // Token contains a class selector\n                bits = token.split('.');\n                tagName = bits[0];\n                var className = bits[1];\n                if (!tagName) {\n                    tagName = '*';\n                }\n                // Get elements matching tag, filter them for class selector\n                found = [];\n                foundCount = 0;\n                for (j = 0; j < currentContext.length; j++) {\n                    if (tagName == '*') {\n                        elements = getAllChildren(currentContext[j]);\n                    } else {\n                        elements = currentContext[j].getElementsByTagName(tagName);\n                    }\n                    for (k = 0; k < elements.length; k++) {\n                        found[foundCount++] = elements[k];\n                    }\n                }\n                currentContext = [];\n                currentContextIndex = 0;\n                for (j = 0; j < found.length; j++) {\n                    if (found[j].className &&\n                        _.isString(found[j].className) && // some SVG elements have classNames which are not strings\n                        hasClass(found[j], className)\n                    ) {\n                        currentContext[currentContextIndex++] = found[j];\n                    }\n                }\n                continue; // Skip to next token\n            }\n            // Code to deal with attribute selectors\n            var token_match = token.match(TOKEN_MATCH_REGEX);\n            if (token_match) {\n                tagName = token_match[1];\n                var attrName = token_match[2];\n                var attrOperator = token_match[3];\n                var attrValue = token_match[4];\n                if (!tagName) {\n                    tagName = '*';\n                }\n                // Grab all of the tagName elements within current context\n                found = [];\n                foundCount = 0;\n                for (j = 0; j < currentContext.length; j++) {\n                    if (tagName == '*') {\n                        elements = getAllChildren(currentContext[j]);\n                    } else {\n                        elements = currentContext[j].getElementsByTagName(tagName);\n                    }\n                    for (k = 0; k < elements.length; k++) {\n                        found[foundCount++] = elements[k];\n                    }\n                }\n                currentContext = [];\n                currentContextIndex = 0;\n                var checkFunction; // This function will be used to filter the elements\n                switch (attrOperator) {\n                    case '=': // Equality\n                        checkFunction = function(e) {\n                            return (e.getAttribute(attrName) == attrValue);\n                        };\n                        break;\n                    case '~': // Match one of space seperated words\n                        checkFunction = function(e) {\n                            return (e.getAttribute(attrName).match(new RegExp('\\\\b' + attrValue + '\\\\b')));\n                        };\n                        break;\n                    case '|': // Match start with value followed by optional hyphen\n                        checkFunction = function(e) {\n                            return (e.getAttribute(attrName).match(new RegExp('^' + attrValue + '-?')));\n                        };\n                        break;\n                    case '^': // Match starts with value\n                        checkFunction = function(e) {\n                            return (e.getAttribute(attrName).indexOf(attrValue) === 0);\n                        };\n                        break;\n                    case '$': // Match ends with value - fails with \"Warning\" in Opera 7\n                        checkFunction = function(e) {\n                            return (e.getAttribute(attrName).lastIndexOf(attrValue) == e.getAttribute(attrName).length - attrValue.length);\n                        };\n                        break;\n                    case '*': // Match ends with value\n                        checkFunction = function(e) {\n                            return (e.getAttribute(attrName).indexOf(attrValue) > -1);\n                        };\n                        break;\n                    default:\n                        // Just test for existence of attribute\n                        checkFunction = function(e) {\n                            return e.getAttribute(attrName);\n                        };\n                }\n                currentContext = [];\n                currentContextIndex = 0;\n                for (j = 0; j < found.length; j++) {\n                    if (checkFunction(found[j])) {\n                        currentContext[currentContextIndex++] = found[j];\n                    }\n                }\n                // alert('Attribute Selector: '+tagName+' '+attrName+' '+attrOperator+' '+attrValue);\n                continue; // Skip to next token\n            }\n            // If we get here, token is JUST an element (not a class or ID selector)\n            tagName = token;\n            found = [];\n            foundCount = 0;\n            for (j = 0; j < currentContext.length; j++) {\n                elements = currentContext[j].getElementsByTagName(tagName);\n                for (k = 0; k < elements.length; k++) {\n                    found[foundCount++] = elements[k];\n                }\n            }\n            currentContext = found;\n        }\n        return currentContext;\n    }\n\n    return function(query) {\n        if (_.isElement(query)) {\n            return [query];\n        } else if (_.isObject(query) && !_.isUndefined(query.length)) {\n            return query;\n        } else {\n            return getElementsBySelector.call(this, query);\n        }\n    };\n})();\n\nvar CAMPAIGN_KEYWORDS = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_content', 'utm_term'];\nvar CLICK_IDS = ['dclid', 'fbclid', 'gclid', 'ko_click_id', 'li_fat_id', 'msclkid', 'ttclid', 'twclid', 'wbraid'];\n\n_.info = {\n    campaignParams: function(default_value) {\n        var kw = '',\n            params = {};\n        _.each(CAMPAIGN_KEYWORDS, function(kwkey) {\n            kw = _.getQueryParam(document$1.URL, kwkey);\n            if (kw.length) {\n                params[kwkey] = kw;\n            } else if (default_value !== undefined) {\n                params[kwkey] = default_value;\n            }\n        });\n\n        return params;\n    },\n\n    clickParams: function() {\n        var id = '',\n            params = {};\n        _.each(CLICK_IDS, function(idkey) {\n            id = _.getQueryParam(document$1.URL, idkey);\n            if (id.length) {\n                params[idkey] = id;\n            }\n        });\n\n        return params;\n    },\n\n    marketingParams: function() {\n        return _.extend(_.info.campaignParams(), _.info.clickParams());\n    },\n\n    searchEngine: function(referrer) {\n        if (referrer.search('https?://(.*)google.([^/?]*)') === 0) {\n            return 'google';\n        } else if (referrer.search('https?://(.*)bing.com') === 0) {\n            return 'bing';\n        } else if (referrer.search('https?://(.*)yahoo.com') === 0) {\n            return 'yahoo';\n        } else if (referrer.search('https?://(.*)duckduckgo.com') === 0) {\n            return 'duckduckgo';\n        } else {\n            return null;\n        }\n    },\n\n    searchInfo: function(referrer) {\n        var search = _.info.searchEngine(referrer),\n            param = (search != 'yahoo') ? 'q' : 'p',\n            ret = {};\n\n        if (search !== null) {\n            ret['$search_engine'] = search;\n\n            var keyword = _.getQueryParam(referrer, param);\n            if (keyword.length) {\n                ret['mp_keyword'] = keyword;\n            }\n        }\n\n        return ret;\n    },\n\n    /**\n     * This function detects which browser is running this script.\n     * The order of the checks are important since many user agents\n     * include key words used in later checks.\n     */\n    browser: function(user_agent, vendor, opera) {\n        vendor = vendor || ''; // vendor is undefined for at least IE9\n        if (opera || _.includes(user_agent, ' OPR/')) {\n            if (_.includes(user_agent, 'Mini')) {\n                return 'Opera Mini';\n            }\n            return 'Opera';\n        } else if (/(BlackBerry|PlayBook|BB10)/i.test(user_agent)) {\n            return 'BlackBerry';\n        } else if (_.includes(user_agent, 'IEMobile') || _.includes(user_agent, 'WPDesktop')) {\n            return 'Internet Explorer Mobile';\n        } else if (_.includes(user_agent, 'SamsungBrowser/')) {\n            // https://developer.samsung.com/internet/user-agent-string-format\n            return 'Samsung Internet';\n        } else if (_.includes(user_agent, 'Edge') || _.includes(user_agent, 'Edg/')) {\n            return 'Microsoft Edge';\n        } else if (_.includes(user_agent, 'FBIOS')) {\n            return 'Facebook Mobile';\n        } else if (_.includes(user_agent, 'Chrome')) {\n            return 'Chrome';\n        } else if (_.includes(user_agent, 'CriOS')) {\n            return 'Chrome iOS';\n        } else if (_.includes(user_agent, 'UCWEB') || _.includes(user_agent, 'UCBrowser')) {\n            return 'UC Browser';\n        } else if (_.includes(user_agent, 'FxiOS')) {\n            return 'Firefox iOS';\n        } else if (_.includes(vendor, 'Apple')) {\n            if (_.includes(user_agent, 'Mobile')) {\n                return 'Mobile Safari';\n            }\n            return 'Safari';\n        } else if (_.includes(user_agent, 'Android')) {\n            return 'Android Mobile';\n        } else if (_.includes(user_agent, 'Konqueror')) {\n            return 'Konqueror';\n        } else if (_.includes(user_agent, 'Firefox')) {\n            return 'Firefox';\n        } else if (_.includes(user_agent, 'MSIE') || _.includes(user_agent, 'Trident/')) {\n            return 'Internet Explorer';\n        } else if (_.includes(user_agent, 'Gecko')) {\n            return 'Mozilla';\n        } else {\n            return '';\n        }\n    },\n\n    /**\n     * This function detects which browser version is running this script,\n     * parsing major and minor version (e.g., 42.1). User agent strings from:\n     * http://www.useragentstring.com/pages/useragentstring.php\n     */\n    browserVersion: function(userAgent, vendor, opera) {\n        var browser = _.info.browser(userAgent, vendor, opera);\n        var versionRegexs = {\n            'Internet Explorer Mobile': /rv:(\\d+(\\.\\d+)?)/,\n            'Microsoft Edge': /Edge?\\/(\\d+(\\.\\d+)?)/,\n            'Chrome': /Chrome\\/(\\d+(\\.\\d+)?)/,\n            'Chrome iOS': /CriOS\\/(\\d+(\\.\\d+)?)/,\n            'UC Browser' : /(UCBrowser|UCWEB)\\/(\\d+(\\.\\d+)?)/,\n            'Safari': /Version\\/(\\d+(\\.\\d+)?)/,\n            'Mobile Safari': /Version\\/(\\d+(\\.\\d+)?)/,\n            'Opera': /(Opera|OPR)\\/(\\d+(\\.\\d+)?)/,\n            'Firefox': /Firefox\\/(\\d+(\\.\\d+)?)/,\n            'Firefox iOS': /FxiOS\\/(\\d+(\\.\\d+)?)/,\n            'Konqueror': /Konqueror:(\\d+(\\.\\d+)?)/,\n            'BlackBerry': /BlackBerry (\\d+(\\.\\d+)?)/,\n            'Android Mobile': /android\\s(\\d+(\\.\\d+)?)/,\n            'Samsung Internet': /SamsungBrowser\\/(\\d+(\\.\\d+)?)/,\n            'Internet Explorer': /(rv:|MSIE )(\\d+(\\.\\d+)?)/,\n            'Mozilla': /rv:(\\d+(\\.\\d+)?)/\n        };\n        var regex = versionRegexs[browser];\n        if (regex === undefined) {\n            return null;\n        }\n        var matches = userAgent.match(regex);\n        if (!matches) {\n            return null;\n        }\n        return parseFloat(matches[matches.length - 2]);\n    },\n\n    os: function() {\n        var a = userAgent;\n        if (/Windows/i.test(a)) {\n            if (/Phone/.test(a) || /WPDesktop/.test(a)) {\n                return 'Windows Phone';\n            }\n            return 'Windows';\n        } else if (/(iPhone|iPad|iPod)/.test(a)) {\n            return 'iOS';\n        } else if (/Android/.test(a)) {\n            return 'Android';\n        } else if (/(BlackBerry|PlayBook|BB10)/i.test(a)) {\n            return 'BlackBerry';\n        } else if (/Mac/i.test(a)) {\n            return 'Mac OS X';\n        } else if (/Linux/.test(a)) {\n            return 'Linux';\n        } else if (/CrOS/.test(a)) {\n            return 'Chrome OS';\n        } else {\n            return '';\n        }\n    },\n\n    device: function(user_agent) {\n        if (/Windows Phone/i.test(user_agent) || /WPDesktop/.test(user_agent)) {\n            return 'Windows Phone';\n        } else if (/iPad/.test(user_agent)) {\n            return 'iPad';\n        } else if (/iPod/.test(user_agent)) {\n            return 'iPod Touch';\n        } else if (/iPhone/.test(user_agent)) {\n            return 'iPhone';\n        } else if (/(BlackBerry|PlayBook|BB10)/i.test(user_agent)) {\n            return 'BlackBerry';\n        } else if (/Android/.test(user_agent)) {\n            return 'Android';\n        } else {\n            return '';\n        }\n    },\n\n    referringDomain: function(referrer) {\n        var split = referrer.split('/');\n        if (split.length >= 3) {\n            return split[2];\n        }\n        return '';\n    },\n\n    properties: function() {\n        return _.extend(_.strip_empty_properties({\n            '$os': _.info.os(),\n            '$browser': _.info.browser(userAgent, navigator.vendor, windowOpera),\n            '$referrer': document$1.referrer,\n            '$referring_domain': _.info.referringDomain(document$1.referrer),\n            '$device': _.info.device(userAgent)\n        }), {\n            '$current_url': window$1.location.href,\n            '$browser_version': _.info.browserVersion(userAgent, navigator.vendor, windowOpera),\n            '$screen_height': screen.height,\n            '$screen_width': screen.width,\n            'mp_lib': 'web',\n            '$lib_version': Config.LIB_VERSION,\n            '$insert_id': cheap_guid(),\n            'time': _.timestamp() / 1000 // epoch time in seconds\n        });\n    },\n\n    people_properties: function() {\n        return _.extend(_.strip_empty_properties({\n            '$os': _.info.os(),\n            '$browser': _.info.browser(userAgent, navigator.vendor, windowOpera)\n        }), {\n            '$browser_version': _.info.browserVersion(userAgent, navigator.vendor, windowOpera)\n        });\n    },\n\n    mpPageViewProperties: function() {\n        return _.strip_empty_properties({\n            'current_page_title': document$1.title,\n            'current_domain': window$1.location.hostname,\n            'current_url_path': window$1.location.pathname,\n            'current_url_protocol': window$1.location.protocol,\n            'current_url_search': window$1.location.search\n        });\n    }\n};\n\nvar cheap_guid = function(maxlen) {\n    var guid = Math.random().toString(36).substring(2, 10) + Math.random().toString(36).substring(2, 10);\n    return maxlen ? guid.substring(0, maxlen) : guid;\n};\n\n// naive way to extract domain name (example.com) from full hostname (my.sub.example.com)\nvar SIMPLE_DOMAIN_MATCH_REGEX = /[a-z0-9][a-z0-9-]*\\.[a-z]+$/i;\n// this next one attempts to account for some ccSLDs, e.g. extracting oxford.ac.uk from www.oxford.ac.uk\nvar DOMAIN_MATCH_REGEX = /[a-z0-9][a-z0-9-]+\\.[a-z.]{2,6}$/i;\n/**\n * Attempts to extract main domain name from full hostname, using a few blunt heuristics. For\n * common TLDs like .com/.org that always have a simple SLD.TLD structure (example.com), we\n * simply extract the last two .-separated parts of the hostname (SIMPLE_DOMAIN_MATCH_REGEX).\n * For others, we attempt to account for short ccSLD+TLD combos (.ac.uk) with the legacy\n * DOMAIN_MATCH_REGEX (kept to maintain backwards compatibility with existing Mixpanel\n * integrations). The only _reliable_ way to extract domain from hostname is with an up-to-date\n * list like at https://publicsuffix.org/ so for cases that this helper fails at, the SDK\n * offers the 'cookie_domain' config option to set it explicitly.\n * @example\n * extract_domain('my.sub.example.com')\n * // 'example.com'\n */\nvar extract_domain = function(hostname) {\n    var domain_regex = DOMAIN_MATCH_REGEX;\n    var parts = hostname.split('.');\n    var tld = parts[parts.length - 1];\n    if (tld.length > 4 || tld === 'com' || tld === 'org') {\n        domain_regex = SIMPLE_DOMAIN_MATCH_REGEX;\n    }\n    var matches = hostname.match(domain_regex);\n    return matches ? matches[0] : '';\n};\n\nvar JSONStringify = null;\nvar JSONParse = null;\nif (typeof JSON !== 'undefined') {\n    JSONStringify = JSON.stringify;\n    JSONParse = JSON.parse;\n}\nJSONStringify = JSONStringify || _.JSONEncode;\nJSONParse = JSONParse || _.JSONDecode;\n\n// EXPORTS (for closure compiler)\n_['toArray']                = _.toArray;\n_['isObject']               = _.isObject;\n_['JSONEncode']             = _.JSONEncode;\n_['JSONDecode']             = _.JSONDecode;\n_['isBlockedUA']            = _.isBlockedUA;\n_['isEmptyObject']          = _.isEmptyObject;\n_['info']                   = _.info;\n_['info']['device']         = _.info.device;\n_['info']['browser']        = _.info.browser;\n_['info']['browserVersion'] = _.info.browserVersion;\n_['info']['properties']     = _.info.properties;\n\n/**\n * DomTracker Object\n * @constructor\n */\nvar DomTracker = function() {};\n\n\n// interface\nDomTracker.prototype.create_properties = function() {};\nDomTracker.prototype.event_handler = function() {};\nDomTracker.prototype.after_track_handler = function() {};\n\nDomTracker.prototype.init = function(mixpanel_instance) {\n    this.mp = mixpanel_instance;\n    return this;\n};\n\n/**\n * @param {Object|string} query\n * @param {string} event_name\n * @param {Object=} properties\n * @param {function=} user_callback\n */\nDomTracker.prototype.track = function(query, event_name, properties, user_callback) {\n    var that = this;\n    var elements = _.dom_query(query);\n\n    if (elements.length === 0) {\n        console.error('The DOM query (' + query + ') returned 0 elements');\n        return;\n    }\n\n    _.each(elements, function(element) {\n        _.register_event(element, this.override_event, function(e) {\n            var options = {};\n            var props = that.create_properties(properties, this);\n            var timeout = that.mp.get_config('track_links_timeout');\n\n            that.event_handler(e, this, options);\n\n            // in case the mixpanel servers don't get back to us in time\n            window.setTimeout(that.track_callback(user_callback, props, options, true), timeout);\n\n            // fire the tracking event\n            that.mp.track(event_name, props, that.track_callback(user_callback, props, options));\n        });\n    }, this);\n\n    return true;\n};\n\n/**\n * @param {function} user_callback\n * @param {Object} props\n * @param {boolean=} timeout_occured\n */\nDomTracker.prototype.track_callback = function(user_callback, props, options, timeout_occured) {\n    timeout_occured = timeout_occured || false;\n    var that = this;\n\n    return function() {\n        // options is referenced from both callbacks, so we can have\n        // a 'lock' of sorts to ensure only one fires\n        if (options.callback_fired) { return; }\n        options.callback_fired = true;\n\n        if (user_callback && user_callback(timeout_occured, props) === false) {\n            // user can prevent the default functionality by\n            // returning false from their callback\n            return;\n        }\n\n        that.after_track_handler(props, options, timeout_occured);\n    };\n};\n\nDomTracker.prototype.create_properties = function(properties, element) {\n    var props;\n\n    if (typeof(properties) === 'function') {\n        props = properties(element);\n    } else {\n        props = _.extend({}, properties);\n    }\n\n    return props;\n};\n\n/**\n * LinkTracker Object\n * @constructor\n * @extends DomTracker\n */\nvar LinkTracker = function() {\n    this.override_event = 'click';\n};\n_.inherit(LinkTracker, DomTracker);\n\nLinkTracker.prototype.create_properties = function(properties, element) {\n    var props = LinkTracker.superclass.create_properties.apply(this, arguments);\n\n    if (element.href) { props['url'] = element.href; }\n\n    return props;\n};\n\nLinkTracker.prototype.event_handler = function(evt, element, options) {\n    options.new_tab = (\n        evt.which === 2 ||\n        evt.metaKey ||\n        evt.ctrlKey ||\n        element.target === '_blank'\n    );\n    options.href = element.href;\n\n    if (!options.new_tab) {\n        evt.preventDefault();\n    }\n};\n\nLinkTracker.prototype.after_track_handler = function(props, options) {\n    if (options.new_tab) { return; }\n\n    setTimeout(function() {\n        window.location = options.href;\n    }, 0);\n};\n\n/**\n * FormTracker Object\n * @constructor\n * @extends DomTracker\n */\nvar FormTracker = function() {\n    this.override_event = 'submit';\n};\n_.inherit(FormTracker, DomTracker);\n\nFormTracker.prototype.event_handler = function(evt, element, options) {\n    options.element = element;\n    evt.preventDefault();\n};\n\nFormTracker.prototype.after_track_handler = function(props, options) {\n    setTimeout(function() {\n        options.element.submit();\n    }, 0);\n};\n\n// eslint-disable-line camelcase\n\nvar logger$2 = console_with_prefix('lock');\n\n/**\n * SharedLock: a mutex built on HTML5 localStorage, to ensure that only one browser\n * window/tab at a time will be able to access shared resources.\n *\n * Based on the Alur and Taubenfeld fast lock\n * (http://www.cs.rochester.edu/research/synchronization/pseudocode/fastlock.html)\n * with an added timeout to ensure there will be eventual progress in the event\n * that a window is closed in the middle of the callback.\n *\n * Implementation based on the original version by David Wolever (https://github.com/wolever)\n * at https://gist.github.com/wolever/5fd7573d1ef6166e8f8c4af286a69432.\n *\n * @example\n * const myLock = new SharedLock('some-key');\n * myLock.withLock(function() {\n *   console.log('I hold the mutex!');\n * });\n *\n * @constructor\n */\nvar SharedLock = function(key, options) {\n    options = options || {};\n\n    this.storageKey = key;\n    this.storage = options.storage || window.localStorage;\n    this.pollIntervalMS = options.pollIntervalMS || 100;\n    this.timeoutMS = options.timeoutMS || 2000;\n};\n\n// pass in a specific pid to test contention scenarios; otherwise\n// it is chosen randomly for each acquisition attempt\nSharedLock.prototype.withLock = function(lockedCB, errorCB, pid) {\n    if (!pid && typeof errorCB !== 'function') {\n        pid = errorCB;\n        errorCB = null;\n    }\n\n    var i = pid || (new Date().getTime() + '|' + Math.random());\n    var startTime = new Date().getTime();\n\n    var key = this.storageKey;\n    var pollIntervalMS = this.pollIntervalMS;\n    var timeoutMS = this.timeoutMS;\n    var storage = this.storage;\n\n    var keyX = key + ':X';\n    var keyY = key + ':Y';\n    var keyZ = key + ':Z';\n\n    var reportError = function(err) {\n        errorCB && errorCB(err);\n    };\n\n    var delay = function(cb) {\n        if (new Date().getTime() - startTime > timeoutMS) {\n            logger$2.error('Timeout waiting for mutex on ' + key + '; clearing lock. [' + i + ']');\n            storage.removeItem(keyZ);\n            storage.removeItem(keyY);\n            loop();\n            return;\n        }\n        setTimeout(function() {\n            try {\n                cb();\n            } catch(err) {\n                reportError(err);\n            }\n        }, pollIntervalMS * (Math.random() + 0.1));\n    };\n\n    var waitFor = function(predicate, cb) {\n        if (predicate()) {\n            cb();\n        } else {\n            delay(function() {\n                waitFor(predicate, cb);\n            });\n        }\n    };\n\n    var getSetY = function() {\n        var valY = storage.getItem(keyY);\n        if (valY && valY !== i) { // if Y == i then this process already has the lock (useful for test cases)\n            return false;\n        } else {\n            storage.setItem(keyY, i);\n            if (storage.getItem(keyY) === i) {\n                return true;\n            } else {\n                if (!localStorageSupported(storage, true)) {\n                    throw new Error('localStorage support dropped while acquiring lock');\n                }\n                return false;\n            }\n        }\n    };\n\n    var loop = function() {\n        storage.setItem(keyX, i);\n\n        waitFor(getSetY, function() {\n            if (storage.getItem(keyX) === i) {\n                criticalSection();\n                return;\n            }\n\n            delay(function() {\n                if (storage.getItem(keyY) !== i) {\n                    loop();\n                    return;\n                }\n                waitFor(function() {\n                    return !storage.getItem(keyZ);\n                }, criticalSection);\n            });\n        });\n    };\n\n    var criticalSection = function() {\n        storage.setItem(keyZ, '1');\n        try {\n            lockedCB();\n        } finally {\n            storage.removeItem(keyZ);\n            if (storage.getItem(keyY) === i) {\n                storage.removeItem(keyY);\n            }\n            if (storage.getItem(keyX) === i) {\n                storage.removeItem(keyX);\n            }\n        }\n    };\n\n    try {\n        if (localStorageSupported(storage, true)) {\n            loop();\n        } else {\n            throw new Error('localStorage support check failed');\n        }\n    } catch(err) {\n        reportError(err);\n    }\n};\n\n// eslint-disable-line camelcase\n\nvar logger$1 = console_with_prefix('batch');\n\n/**\n * RequestQueue: queue for batching API requests with localStorage backup for retries.\n * Maintains an in-memory queue which represents the source of truth for the current\n * page, but also writes all items out to a copy in the browser's localStorage, which\n * can be read on subsequent pageloads and retried. For batchability, all the request\n * items in the queue should be of the same type (events, people updates, group updates)\n * so they can be sent in a single request to the same API endpoint.\n *\n * LocalStorage keying and locking: In order for reloads and subsequent pageloads of\n * the same site to access the same persisted data, they must share the same localStorage\n * key (for instance based on project token and queue type). Therefore access to the\n * localStorage entry is guarded by an asynchronous mutex (SharedLock) to prevent\n * simultaneously open windows/tabs from overwriting each other's data (which would lead\n * to data loss in some situations).\n * @constructor\n */\nvar RequestQueue = function(storageKey, options) {\n    options = options || {};\n    this.storageKey = storageKey;\n    this.storage = options.storage || window.localStorage;\n    this.reportError = options.errorReporter || _.bind(logger$1.error, logger$1);\n    this.lock = new SharedLock(storageKey, {storage: this.storage});\n\n    this.pid = options.pid || null; // pass pid to test out storage lock contention scenarios\n\n    this.memQueue = [];\n};\n\n/**\n * Add one item to queues (memory and localStorage). The queued entry includes\n * the given item along with an auto-generated ID and a \"flush-after\" timestamp.\n * It is expected that the item will be sent over the network and dequeued\n * before the flush-after time; if this doesn't happen it is considered orphaned\n * (e.g., the original tab where it was enqueued got closed before it could be\n * sent) and the item can be sent by any tab that finds it in localStorage.\n *\n * The final callback param is called with a param indicating success or\n * failure of the enqueue operation; it is asynchronous because the localStorage\n * lock is asynchronous.\n */\nRequestQueue.prototype.enqueue = function(item, flushInterval, cb) {\n    var queueEntry = {\n        'id': cheap_guid(),\n        'flushAfter': new Date().getTime() + flushInterval * 2,\n        'payload': item\n    };\n\n    this.lock.withLock(_.bind(function lockAcquired() {\n        var succeeded;\n        try {\n            var storedQueue = this.readFromStorage();\n            storedQueue.push(queueEntry);\n            succeeded = this.saveToStorage(storedQueue);\n            if (succeeded) {\n                // only add to in-memory queue when storage succeeds\n                this.memQueue.push(queueEntry);\n            }\n        } catch(err) {\n            this.reportError('Error enqueueing item', item);\n            succeeded = false;\n        }\n        if (cb) {\n            cb(succeeded);\n        }\n    }, this), _.bind(function lockFailure(err) {\n        this.reportError('Error acquiring storage lock', err);\n        if (cb) {\n            cb(false);\n        }\n    }, this), this.pid);\n};\n\n/**\n * Read out the given number of queue entries. If this.memQueue\n * has fewer than batchSize items, then look for \"orphaned\" items\n * in the persisted queue (items where the 'flushAfter' time has\n * already passed).\n */\nRequestQueue.prototype.fillBatch = function(batchSize) {\n    var batch = this.memQueue.slice(0, batchSize);\n    if (batch.length < batchSize) {\n        // don't need lock just to read events; localStorage is thread-safe\n        // and the worst that could happen is a duplicate send of some\n        // orphaned events, which will be deduplicated on the server side\n        var storedQueue = this.readFromStorage();\n        if (storedQueue.length) {\n            // item IDs already in batch; don't duplicate out of storage\n            var idsInBatch = {}; // poor man's Set\n            _.each(batch, function(item) { idsInBatch[item['id']] = true; });\n\n            for (var i = 0; i < storedQueue.length; i++) {\n                var item = storedQueue[i];\n                if (new Date().getTime() > item['flushAfter'] && !idsInBatch[item['id']]) {\n                    item.orphaned = true;\n                    batch.push(item);\n                    if (batch.length >= batchSize) {\n                        break;\n                    }\n                }\n            }\n        }\n    }\n    return batch;\n};\n\n/**\n * Remove items with matching 'id' from array (immutably)\n * also remove any item without a valid id (e.g., malformed\n * storage entries).\n */\nvar filterOutIDsAndInvalid = function(items, idSet) {\n    var filteredItems = [];\n    _.each(items, function(item) {\n        if (item['id'] && !idSet[item['id']]) {\n            filteredItems.push(item);\n        }\n    });\n    return filteredItems;\n};\n\n/**\n * Remove items with matching IDs from both in-memory queue\n * and persisted queue\n */\nRequestQueue.prototype.removeItemsByID = function(ids, cb) {\n    var idSet = {}; // poor man's Set\n    _.each(ids, function(id) { idSet[id] = true; });\n\n    this.memQueue = filterOutIDsAndInvalid(this.memQueue, idSet);\n\n    var removeFromStorage = _.bind(function() {\n        var succeeded;\n        try {\n            var storedQueue = this.readFromStorage();\n            storedQueue = filterOutIDsAndInvalid(storedQueue, idSet);\n            succeeded = this.saveToStorage(storedQueue);\n\n            // an extra check: did storage report success but somehow\n            // the items are still there?\n            if (succeeded) {\n                storedQueue = this.readFromStorage();\n                for (var i = 0; i < storedQueue.length; i++) {\n                    var item = storedQueue[i];\n                    if (item['id'] && !!idSet[item['id']]) {\n                        this.reportError('Item not removed from storage');\n                        return false;\n                    }\n                }\n            }\n        } catch(err) {\n            this.reportError('Error removing items', ids);\n            succeeded = false;\n        }\n        return succeeded;\n    }, this);\n\n    this.lock.withLock(function lockAcquired() {\n        var succeeded = removeFromStorage();\n        if (cb) {\n            cb(succeeded);\n        }\n    }, _.bind(function lockFailure(err) {\n        var succeeded = false;\n        this.reportError('Error acquiring storage lock', err);\n        if (!localStorageSupported(this.storage, true)) {\n            // Looks like localStorage writes have stopped working sometime after\n            // initialization (probably full), and so nobody can acquire locks\n            // anymore. Consider it temporarily safe to remove items without the\n            // lock, since nobody's writing successfully anyway.\n            succeeded = removeFromStorage();\n            if (!succeeded) {\n                // OK, we couldn't even write out the smaller queue. Try clearing it\n                // entirely.\n                try {\n                    this.storage.removeItem(this.storageKey);\n                } catch(err) {\n                    this.reportError('Error clearing queue', err);\n                }\n            }\n        }\n        if (cb) {\n            cb(succeeded);\n        }\n    }, this), this.pid);\n};\n\n// internal helper for RequestQueue.updatePayloads\nvar updatePayloads = function(existingItems, itemsToUpdate) {\n    var newItems = [];\n    _.each(existingItems, function(item) {\n        var id = item['id'];\n        if (id in itemsToUpdate) {\n            var newPayload = itemsToUpdate[id];\n            if (newPayload !== null) {\n                item['payload'] = newPayload;\n                newItems.push(item);\n            }\n        } else {\n            // no update\n            newItems.push(item);\n        }\n    });\n    return newItems;\n};\n\n/**\n * Update payloads of given items in both in-memory queue and\n * persisted queue. Items set to null are removed from queues.\n */\nRequestQueue.prototype.updatePayloads = function(itemsToUpdate, cb) {\n    this.memQueue = updatePayloads(this.memQueue, itemsToUpdate);\n    this.lock.withLock(_.bind(function lockAcquired() {\n        var succeeded;\n        try {\n            var storedQueue = this.readFromStorage();\n            storedQueue = updatePayloads(storedQueue, itemsToUpdate);\n            succeeded = this.saveToStorage(storedQueue);\n        } catch(err) {\n            this.reportError('Error updating items', itemsToUpdate);\n            succeeded = false;\n        }\n        if (cb) {\n            cb(succeeded);\n        }\n    }, this), _.bind(function lockFailure(err) {\n        this.reportError('Error acquiring storage lock', err);\n        if (cb) {\n            cb(false);\n        }\n    }, this), this.pid);\n};\n\n/**\n * Read and parse items array from localStorage entry, handling\n * malformed/missing data if necessary.\n */\nRequestQueue.prototype.readFromStorage = function() {\n    var storageEntry;\n    try {\n        storageEntry = this.storage.getItem(this.storageKey);\n        if (storageEntry) {\n            storageEntry = JSONParse(storageEntry);\n            if (!_.isArray(storageEntry)) {\n                this.reportError('Invalid storage entry:', storageEntry);\n                storageEntry = null;\n            }\n        }\n    } catch (err) {\n        this.reportError('Error retrieving queue', err);\n        storageEntry = null;\n    }\n    return storageEntry || [];\n};\n\n/**\n * Serialize the given items array to localStorage.\n */\nRequestQueue.prototype.saveToStorage = function(queue) {\n    try {\n        this.storage.setItem(this.storageKey, JSONStringify(queue));\n        return true;\n    } catch (err) {\n        this.reportError('Error saving queue', err);\n        return false;\n    }\n};\n\n/**\n * Clear out queues (memory and localStorage).\n */\nRequestQueue.prototype.clear = function() {\n    this.memQueue = [];\n    this.storage.removeItem(this.storageKey);\n};\n\n// eslint-disable-line camelcase\n\n// maximum interval between request retries after exponential backoff\nvar MAX_RETRY_INTERVAL_MS = 10 * 60 * 1000; // 10 minutes\n\nvar logger = console_with_prefix('batch');\n\n/**\n * RequestBatcher: manages the queueing, flushing, retry etc of requests of one\n * type (events, people, groups).\n * Uses RequestQueue to manage the backing store.\n * @constructor\n */\nvar RequestBatcher = function(storageKey, options) {\n    this.errorReporter = options.errorReporter;\n    this.queue = new RequestQueue(storageKey, {\n        errorReporter: _.bind(this.reportError, this),\n        storage: options.storage\n    });\n\n    this.libConfig = options.libConfig;\n    this.sendRequest = options.sendRequestFunc;\n    this.beforeSendHook = options.beforeSendHook;\n    this.stopAllBatching = options.stopAllBatchingFunc;\n\n    // seed variable batch size + flush interval with configured values\n    this.batchSize = this.libConfig['batch_size'];\n    this.flushInterval = this.libConfig['batch_flush_interval_ms'];\n\n    this.stopped = !this.libConfig['batch_autostart'];\n    this.consecutiveRemovalFailures = 0;\n\n    // extra client-side dedupe\n    this.itemIdsSentSuccessfully = {};\n};\n\n/**\n * Add one item to queue.\n */\nRequestBatcher.prototype.enqueue = function(item, cb) {\n    this.queue.enqueue(item, this.flushInterval, cb);\n};\n\n/**\n * Start flushing batches at the configured time interval. Must call\n * this method upon SDK init in order to send anything over the network.\n */\nRequestBatcher.prototype.start = function() {\n    this.stopped = false;\n    this.consecutiveRemovalFailures = 0;\n    this.flush();\n};\n\n/**\n * Stop flushing batches. Can be restarted by calling start().\n */\nRequestBatcher.prototype.stop = function() {\n    this.stopped = true;\n    if (this.timeoutID) {\n        clearTimeout(this.timeoutID);\n        this.timeoutID = null;\n    }\n};\n\n/**\n * Clear out queue.\n */\nRequestBatcher.prototype.clear = function() {\n    this.queue.clear();\n};\n\n/**\n * Restore batch size configuration to whatever is set in the main SDK.\n */\nRequestBatcher.prototype.resetBatchSize = function() {\n    this.batchSize = this.libConfig['batch_size'];\n};\n\n/**\n * Restore flush interval time configuration to whatever is set in the main SDK.\n */\nRequestBatcher.prototype.resetFlush = function() {\n    this.scheduleFlush(this.libConfig['batch_flush_interval_ms']);\n};\n\n/**\n * Schedule the next flush in the given number of milliseconds.\n */\nRequestBatcher.prototype.scheduleFlush = function(flushMS) {\n    this.flushInterval = flushMS;\n    if (!this.stopped) { // don't schedule anymore if batching has been stopped\n        this.timeoutID = setTimeout(_.bind(this.flush, this), this.flushInterval);\n    }\n};\n\n/**\n * Flush one batch to network. Depending on success/failure modes, it will either\n * remove the batch from the queue or leave it in for retry, and schedule the next\n * flush. In cases of most network or API failures, it will back off exponentially\n * when retrying.\n * @param {Object} [options]\n * @param {boolean} [options.sendBeacon] - whether to send batch with\n * navigator.sendBeacon (only useful for sending batches before page unloads, as\n * sendBeacon offers no callbacks or status indications)\n */\nRequestBatcher.prototype.flush = function(options) {\n    try {\n\n        if (this.requestInProgress) {\n            logger.log('Flush: Request already in progress');\n            return;\n        }\n\n        options = options || {};\n        var timeoutMS = this.libConfig['batch_request_timeout_ms'];\n        var startTime = new Date().getTime();\n        var currentBatchSize = this.batchSize;\n        var batch = this.queue.fillBatch(currentBatchSize);\n        var dataForRequest = [];\n        var transformedItems = {};\n        _.each(batch, function(item) {\n            var payload = item['payload'];\n            if (this.beforeSendHook && !item.orphaned) {\n                payload = this.beforeSendHook(payload);\n            }\n            if (payload) {\n                // mp_sent_by_lib_version prop captures which lib version actually\n                // sends each event (regardless of which version originally queued\n                // it for sending)\n                if (payload['event'] && payload['properties']) {\n                    payload['properties'] = _.extend(\n                        {},\n                        payload['properties'],\n                        {'mp_sent_by_lib_version': Config.LIB_VERSION}\n                    );\n                }\n                var addPayload = true;\n                var itemId = item['id'];\n                if (itemId) {\n                    if ((this.itemIdsSentSuccessfully[itemId] || 0) > 5) {\n                        this.reportError('[dupe] item ID sent too many times, not sending', {\n                            item: item,\n                            batchSize: batch.length,\n                            timesSent: this.itemIdsSentSuccessfully[itemId]\n                        });\n                        addPayload = false;\n                    }\n                } else {\n                    this.reportError('[dupe] found item with no ID', {item: item});\n                }\n\n                if (addPayload) {\n                    dataForRequest.push(payload);\n                }\n            }\n            transformedItems[item['id']] = payload;\n        }, this);\n        if (dataForRequest.length < 1) {\n            this.resetFlush();\n            return; // nothing to do\n        }\n\n        this.requestInProgress = true;\n\n        var batchSendCallback = _.bind(function(res) {\n            this.requestInProgress = false;\n\n            try {\n\n                // handle API response in a try-catch to make sure we can reset the\n                // flush operation if something goes wrong\n\n                var removeItemsFromQueue = false;\n                if (options.unloading) {\n                    // update persisted data to include hook transformations\n                    this.queue.updatePayloads(transformedItems);\n                } else if (\n                    _.isObject(res) &&\n                    res.error === 'timeout' &&\n                    new Date().getTime() - startTime >= timeoutMS\n                ) {\n                    this.reportError('Network timeout; retrying');\n                    this.flush();\n                } else if (\n                    _.isObject(res) &&\n                    res.xhr_req &&\n                    (res.xhr_req['status'] >= 500 || res.xhr_req['status'] === 429 || res.error === 'timeout')\n                ) {\n                    // network or API error, or 429 Too Many Requests, retry\n                    var retryMS = this.flushInterval * 2;\n                    var headers = res.xhr_req['responseHeaders'];\n                    if (headers) {\n                        var retryAfter = headers['Retry-After'];\n                        if (retryAfter) {\n                            retryMS = (parseInt(retryAfter, 10) * 1000) || retryMS;\n                        }\n                    }\n                    retryMS = Math.min(MAX_RETRY_INTERVAL_MS, retryMS);\n                    this.reportError('Error; retry in ' + retryMS + ' ms');\n                    this.scheduleFlush(retryMS);\n                } else if (_.isObject(res) && res.xhr_req && res.xhr_req['status'] === 413) {\n                    // 413 Payload Too Large\n                    if (batch.length > 1) {\n                        var halvedBatchSize = Math.max(1, Math.floor(currentBatchSize / 2));\n                        this.batchSize = Math.min(this.batchSize, halvedBatchSize, batch.length - 1);\n                        this.reportError('413 response; reducing batch size to ' + this.batchSize);\n                        this.resetFlush();\n                    } else {\n                        this.reportError('Single-event request too large; dropping', batch);\n                        this.resetBatchSize();\n                        removeItemsFromQueue = true;\n                    }\n                } else {\n                    // successful network request+response; remove each item in batch from queue\n                    // (even if it was e.g. a 400, in which case retrying won't help)\n                    removeItemsFromQueue = true;\n                }\n\n                if (removeItemsFromQueue) {\n                    this.queue.removeItemsByID(\n                        _.map(batch, function(item) { return item['id']; }),\n                        _.bind(function(succeeded) {\n                            if (succeeded) {\n                                this.consecutiveRemovalFailures = 0;\n                                this.flush(); // handle next batch if the queue isn't empty\n                            } else {\n                                this.reportError('Failed to remove items from queue');\n                                if (++this.consecutiveRemovalFailures > 5) {\n                                    this.reportError('Too many queue failures; disabling batching system.');\n                                    this.stopAllBatching();\n                                } else {\n                                    this.resetFlush();\n                                }\n                            }\n                        }, this)\n                    );\n\n                    // client-side dedupe\n                    _.each(batch, _.bind(function(item) {\n                        var itemId = item['id'];\n                        if (itemId) {\n                            this.itemIdsSentSuccessfully[itemId] = this.itemIdsSentSuccessfully[itemId] || 0;\n                            this.itemIdsSentSuccessfully[itemId]++;\n                            if (this.itemIdsSentSuccessfully[itemId] > 5) {\n                                this.reportError('[dupe] item ID sent too many times', {\n                                    item: item,\n                                    batchSize: batch.length,\n                                    timesSent: this.itemIdsSentSuccessfully[itemId]\n                                });\n                            }\n                        } else {\n                            this.reportError('[dupe] found item with no ID while removing', {item: item});\n                        }\n                    }, this));\n                }\n\n            } catch(err) {\n                this.reportError('Error handling API response', err);\n                this.resetFlush();\n            }\n        }, this);\n        var requestOptions = {\n            method: 'POST',\n            verbose: true,\n            ignore_json_errors: true, // eslint-disable-line camelcase\n            timeout_ms: timeoutMS // eslint-disable-line camelcase\n        };\n        if (options.unloading) {\n            requestOptions.transport = 'sendBeacon';\n        }\n        logger.log('MIXPANEL REQUEST:', dataForRequest);\n        this.sendRequest(dataForRequest, requestOptions, batchSendCallback);\n\n    } catch(err) {\n        this.reportError('Error flushing request queue', err);\n        this.resetFlush();\n    }\n};\n\n/**\n * Log error to global logger and optional user-defined logger.\n */\nRequestBatcher.prototype.reportError = function(msg, err) {\n    logger.error.apply(logger.error, arguments);\n    if (this.errorReporter) {\n        try {\n            if (!(err instanceof Error)) {\n                err = new Error(msg);\n            }\n            this.errorReporter(msg, err);\n        } catch(err) {\n            logger.error(err);\n        }\n    }\n};\n\n/**\n * A function used to track a Mixpanel event (e.g. MixpanelLib.track)\n * @callback trackFunction\n * @param {String} event_name The name of the event. This can be anything the user does - 'Button Click', 'Sign Up', 'Item Purchased', etc.\n * @param {Object} [properties] A set of properties to include with the event you're sending. These describe the user who did the event or details about the event itself.\n * @param {Function} [callback] If provided, the callback function will be called after tracking the event.\n */\n\n/** Public **/\n\nvar GDPR_DEFAULT_PERSISTENCE_PREFIX = '__mp_opt_in_out_';\n\n/**\n * Opt the user in to data tracking and cookies/localstorage for the given token\n * @param {string} token - Mixpanel project tracking token\n * @param {Object} [options]\n * @param {trackFunction} [options.track] - function used for tracking a Mixpanel event to record the opt-in action\n * @param {string} [options.trackEventName] - event name to be used for tracking the opt-in action\n * @param {Object} [options.trackProperties] - set of properties to be tracked along with the opt-in action\n * @param {string} [options.persistenceType] Persistence mechanism used - cookie or localStorage\n * @param {string} [options.persistencePrefix=__mp_opt_in_out] - custom prefix to be used in the cookie/localstorage name\n * @param {Number} [options.cookieExpiration] - number of days until the opt-in cookie expires\n * @param {string} [options.cookieDomain] - custom cookie domain\n * @param {boolean} [options.crossSiteCookie] - whether the opt-in cookie is set as cross-site-enabled\n * @param {boolean} [options.crossSubdomainCookie] - whether the opt-in cookie is set as cross-subdomain or not\n * @param {boolean} [options.secureCookie] - whether the opt-in cookie is set as secure or not\n */\nfunction optIn(token, options) {\n    _optInOut(true, token, options);\n}\n\n/**\n * Opt the user out of data tracking and cookies/localstorage for the given token\n * @param {string} token - Mixpanel project tracking token\n * @param {Object} [options]\n * @param {string} [options.persistenceType] Persistence mechanism used - cookie or localStorage\n * @param {string} [options.persistencePrefix=__mp_opt_in_out] - custom prefix to be used in the cookie/localstorage name\n * @param {Number} [options.cookieExpiration] - number of days until the opt-out cookie expires\n * @param {string} [options.cookieDomain] - custom cookie domain\n * @param {boolean} [options.crossSiteCookie] - whether the opt-in cookie is set as cross-site-enabled\n * @param {boolean} [options.crossSubdomainCookie] - whether the opt-out cookie is set as cross-subdomain or not\n * @param {boolean} [options.secureCookie] - whether the opt-out cookie is set as secure or not\n */\nfunction optOut(token, options) {\n    _optInOut(false, token, options);\n}\n\n/**\n * Check whether the user has opted in to data tracking and cookies/localstorage for the given token\n * @param {string} token - Mixpanel project tracking token\n * @param {Object} [options]\n * @param {string} [options.persistenceType] Persistence mechanism used - cookie or localStorage\n * @param {string} [options.persistencePrefix=__mp_opt_in_out] - custom prefix to be used in the cookie/localstorage name\n * @returns {boolean} whether the user has opted in to the given opt type\n */\nfunction hasOptedIn(token, options) {\n    return _getStorageValue(token, options) === '1';\n}\n\n/**\n * Check whether the user has opted out of data tracking and cookies/localstorage for the given token\n * @param {string} token - Mixpanel project tracking token\n * @param {Object} [options]\n * @param {string} [options.persistenceType] Persistence mechanism used - cookie or localStorage\n * @param {string} [options.persistencePrefix=__mp_opt_in_out] - custom prefix to be used in the cookie/localstorage name\n * @param {boolean} [options.ignoreDnt] - flag to ignore browser DNT settings and always return false\n * @returns {boolean} whether the user has opted out of the given opt type\n */\nfunction hasOptedOut(token, options) {\n    if (_hasDoNotTrackFlagOn(options)) {\n        console.warn('This browser has \"Do Not Track\" enabled. This will prevent the Mixpanel SDK from sending any data. To ignore the \"Do Not Track\" browser setting, initialize the Mixpanel instance with the config \"ignore_dnt: true\"');\n        return true;\n    }\n    var optedOut = _getStorageValue(token, options) === '0';\n    if (optedOut) {\n        console.warn('You are opted out of Mixpanel tracking. This will prevent the Mixpanel SDK from sending any data.');\n    }\n    return optedOut;\n}\n\n/**\n * Wrap a MixpanelLib method with a check for whether the user is opted out of data tracking and cookies/localstorage for the given token\n * If the user has opted out, return early instead of executing the method.\n * If a callback argument was provided, execute it passing the 0 error code.\n * @param {function} method - wrapped method to be executed if the user has not opted out\n * @returns {*} the result of executing method OR undefined if the user has opted out\n */\nfunction addOptOutCheckMixpanelLib(method) {\n    return _addOptOutCheck(method, function(name) {\n        return this.get_config(name);\n    });\n}\n\n/**\n * Wrap a MixpanelPeople method with a check for whether the user is opted out of data tracking and cookies/localstorage for the given token\n * If the user has opted out, return early instead of executing the method.\n * If a callback argument was provided, execute it passing the 0 error code.\n * @param {function} method - wrapped method to be executed if the user has not opted out\n * @returns {*} the result of executing method OR undefined if the user has opted out\n */\nfunction addOptOutCheckMixpanelPeople(method) {\n    return _addOptOutCheck(method, function(name) {\n        return this._get_config(name);\n    });\n}\n\n/**\n * Wrap a MixpanelGroup method with a check for whether the user is opted out of data tracking and cookies/localstorage for the given token\n * If the user has opted out, return early instead of executing the method.\n * If a callback argument was provided, execute it passing the 0 error code.\n * @param {function} method - wrapped method to be executed if the user has not opted out\n * @returns {*} the result of executing method OR undefined if the user has opted out\n */\nfunction addOptOutCheckMixpanelGroup(method) {\n    return _addOptOutCheck(method, function(name) {\n        return this._get_config(name);\n    });\n}\n\n/**\n * Clear the user's opt in/out status of data tracking and cookies/localstorage for the given token\n * @param {string} token - Mixpanel project tracking token\n * @param {Object} [options]\n * @param {string} [options.persistenceType] Persistence mechanism used - cookie or localStorage\n * @param {string} [options.persistencePrefix=__mp_opt_in_out] - custom prefix to be used in the cookie/localstorage name\n * @param {Number} [options.cookieExpiration] - number of days until the opt-in cookie expires\n * @param {string} [options.cookieDomain] - custom cookie domain\n * @param {boolean} [options.crossSiteCookie] - whether the opt-in cookie is set as cross-site-enabled\n * @param {boolean} [options.crossSubdomainCookie] - whether the opt-in cookie is set as cross-subdomain or not\n * @param {boolean} [options.secureCookie] - whether the opt-in cookie is set as secure or not\n */\nfunction clearOptInOut(token, options) {\n    options = options || {};\n    _getStorage(options).remove(\n        _getStorageKey(token, options), !!options.crossSubdomainCookie, options.cookieDomain\n    );\n}\n\n/** Private **/\n\n/**\n * Get storage util\n * @param {Object} [options]\n * @param {string} [options.persistenceType]\n * @returns {object} either _.cookie or _.localstorage\n */\nfunction _getStorage(options) {\n    options = options || {};\n    return options.persistenceType === 'localStorage' ? _.localStorage : _.cookie;\n}\n\n/**\n * Get the name of the cookie that is used for the given opt type (tracking, cookie, etc.)\n * @param {string} token - Mixpanel project tracking token\n * @param {Object} [options]\n * @param {string} [options.persistencePrefix=__mp_opt_in_out] - custom prefix to be used in the cookie/localstorage name\n * @returns {string} the name of the cookie for the given opt type\n */\nfunction _getStorageKey(token, options) {\n    options = options || {};\n    return (options.persistencePrefix || GDPR_DEFAULT_PERSISTENCE_PREFIX) + token;\n}\n\n/**\n * Get the value of the cookie that is used for the given opt type (tracking, cookie, etc.)\n * @param {string} token - Mixpanel project tracking token\n * @param {Object} [options]\n * @param {string} [options.persistencePrefix=__mp_opt_in_out] - custom prefix to be used in the cookie/localstorage name\n * @returns {string} the value of the cookie for the given opt type\n */\nfunction _getStorageValue(token, options) {\n    return _getStorage(options).get(_getStorageKey(token, options));\n}\n\n/**\n * Check whether the user has set the DNT/doNotTrack setting to true in their browser\n * @param {Object} [options]\n * @param {string} [options.window] - alternate window object to check; used to force various DNT settings in browser tests\n * @param {boolean} [options.ignoreDnt] - flag to ignore browser DNT settings and always return false\n * @returns {boolean} whether the DNT setting is true\n */\nfunction _hasDoNotTrackFlagOn(options) {\n    if (options && options.ignoreDnt) {\n        return false;\n    }\n    var win = (options && options.window) || window$1;\n    var nav = win['navigator'] || {};\n    var hasDntOn = false;\n\n    _.each([\n        nav['doNotTrack'], // standard\n        nav['msDoNotTrack'],\n        win['doNotTrack']\n    ], function(dntValue) {\n        if (_.includes([true, 1, '1', 'yes'], dntValue)) {\n            hasDntOn = true;\n        }\n    });\n\n    return hasDntOn;\n}\n\n/**\n * Set cookie/localstorage for the user indicating that they are opted in or out for the given opt type\n * @param {boolean} optValue - whether to opt the user in or out for the given opt type\n * @param {string} token - Mixpanel project tracking token\n * @param {Object} [options]\n * @param {trackFunction} [options.track] - function used for tracking a Mixpanel event to record the opt-in action\n * @param {string} [options.trackEventName] - event name to be used for tracking the opt-in action\n * @param {Object} [options.trackProperties] - set of properties to be tracked along with the opt-in action\n * @param {string} [options.persistencePrefix=__mp_opt_in_out] - custom prefix to be used in the cookie/localstorage name\n * @param {Number} [options.cookieExpiration] - number of days until the opt-in cookie expires\n * @param {string} [options.cookieDomain] - custom cookie domain\n * @param {boolean} [options.crossSiteCookie] - whether the opt-in cookie is set as cross-site-enabled\n * @param {boolean} [options.crossSubdomainCookie] - whether the opt-in cookie is set as cross-subdomain or not\n * @param {boolean} [options.secureCookie] - whether the opt-in cookie is set as secure or not\n */\nfunction _optInOut(optValue, token, options) {\n    if (!_.isString(token) || !token.length) {\n        console.error('gdpr.' + (optValue ? 'optIn' : 'optOut') + ' called with an invalid token');\n        return;\n    }\n\n    options = options || {};\n\n    _getStorage(options).set(\n        _getStorageKey(token, options),\n        optValue ? 1 : 0,\n        _.isNumber(options.cookieExpiration) ? options.cookieExpiration : null,\n        !!options.crossSubdomainCookie,\n        !!options.secureCookie,\n        !!options.crossSiteCookie,\n        options.cookieDomain\n    );\n\n    if (options.track && optValue) { // only track event if opting in (optValue=true)\n        options.track(options.trackEventName || '$opt_in', options.trackProperties, {\n            'send_immediately': true\n        });\n    }\n}\n\n/**\n * Wrap a method with a check for whether the user is opted out of data tracking and cookies/localstorage for the given token\n * If the user has opted out, return early instead of executing the method.\n * If a callback argument was provided, execute it passing the 0 error code.\n * @param {function} method - wrapped method to be executed if the user has not opted out\n * @param {function} getConfigValue - getter function for the Mixpanel API token and other options to be used with opt-out check\n * @returns {*} the result of executing method OR undefined if the user has opted out\n */\nfunction _addOptOutCheck(method, getConfigValue) {\n    return function() {\n        var optedOut = false;\n\n        try {\n            var token = getConfigValue.call(this, 'token');\n            var ignoreDnt = getConfigValue.call(this, 'ignore_dnt');\n            var persistenceType = getConfigValue.call(this, 'opt_out_tracking_persistence_type');\n            var persistencePrefix = getConfigValue.call(this, 'opt_out_tracking_cookie_prefix');\n            var win = getConfigValue.call(this, 'window'); // used to override window during browser tests\n\n            if (token) { // if there was an issue getting the token, continue method execution as normal\n                optedOut = hasOptedOut(token, {\n                    ignoreDnt: ignoreDnt,\n                    persistenceType: persistenceType,\n                    persistencePrefix: persistencePrefix,\n                    window: win\n                });\n            }\n        } catch(err) {\n            console.error('Unexpected error when checking tracking opt-out status: ' + err);\n        }\n\n        if (!optedOut) {\n            return method.apply(this, arguments);\n        }\n\n        var callback = arguments[arguments.length - 1];\n        if (typeof(callback) === 'function') {\n            callback(0);\n        }\n\n        return;\n    };\n}\n\n/** @const */ var SET_ACTION      = '$set';\n/** @const */ var SET_ONCE_ACTION = '$set_once';\n/** @const */ var UNSET_ACTION    = '$unset';\n/** @const */ var ADD_ACTION      = '$add';\n/** @const */ var APPEND_ACTION   = '$append';\n/** @const */ var UNION_ACTION    = '$union';\n/** @const */ var REMOVE_ACTION   = '$remove';\n/** @const */ var DELETE_ACTION   = '$delete';\n\n// Common internal methods for mixpanel.people and mixpanel.group APIs.\n// These methods shouldn't involve network I/O.\nvar apiActions = {\n    set_action: function(prop, to) {\n        var data = {};\n        var $set = {};\n        if (_.isObject(prop)) {\n            _.each(prop, function(v, k) {\n                if (!this._is_reserved_property(k)) {\n                    $set[k] = v;\n                }\n            }, this);\n        } else {\n            $set[prop] = to;\n        }\n\n        data[SET_ACTION] = $set;\n        return data;\n    },\n\n    unset_action: function(prop) {\n        var data = {};\n        var $unset = [];\n        if (!_.isArray(prop)) {\n            prop = [prop];\n        }\n\n        _.each(prop, function(k) {\n            if (!this._is_reserved_property(k)) {\n                $unset.push(k);\n            }\n        }, this);\n\n        data[UNSET_ACTION] = $unset;\n        return data;\n    },\n\n    set_once_action: function(prop, to) {\n        var data = {};\n        var $set_once = {};\n        if (_.isObject(prop)) {\n            _.each(prop, function(v, k) {\n                if (!this._is_reserved_property(k)) {\n                    $set_once[k] = v;\n                }\n            }, this);\n        } else {\n            $set_once[prop] = to;\n        }\n        data[SET_ONCE_ACTION] = $set_once;\n        return data;\n    },\n\n    union_action: function(list_name, values) {\n        var data = {};\n        var $union = {};\n        if (_.isObject(list_name)) {\n            _.each(list_name, function(v, k) {\n                if (!this._is_reserved_property(k)) {\n                    $union[k] = _.isArray(v) ? v : [v];\n                }\n            }, this);\n        } else {\n            $union[list_name] = _.isArray(values) ? values : [values];\n        }\n        data[UNION_ACTION] = $union;\n        return data;\n    },\n\n    append_action: function(list_name, value) {\n        var data = {};\n        var $append = {};\n        if (_.isObject(list_name)) {\n            _.each(list_name, function(v, k) {\n                if (!this._is_reserved_property(k)) {\n                    $append[k] = v;\n                }\n            }, this);\n        } else {\n            $append[list_name] = value;\n        }\n        data[APPEND_ACTION] = $append;\n        return data;\n    },\n\n    remove_action: function(list_name, value) {\n        var data = {};\n        var $remove = {};\n        if (_.isObject(list_name)) {\n            _.each(list_name, function(v, k) {\n                if (!this._is_reserved_property(k)) {\n                    $remove[k] = v;\n                }\n            }, this);\n        } else {\n            $remove[list_name] = value;\n        }\n        data[REMOVE_ACTION] = $remove;\n        return data;\n    },\n\n    delete_action: function() {\n        var data = {};\n        data[DELETE_ACTION] = '';\n        return data;\n    }\n};\n\n/**\n * Mixpanel Group Object\n * @constructor\n */\nvar MixpanelGroup = function() {};\n\n_.extend(MixpanelGroup.prototype, apiActions);\n\nMixpanelGroup.prototype._init = function(mixpanel_instance, group_key, group_id) {\n    this._mixpanel = mixpanel_instance;\n    this._group_key = group_key;\n    this._group_id = group_id;\n};\n\n/**\n * Set properties on a group.\n *\n * ### Usage:\n *\n *     mixpanel.get_group('company', 'mixpanel').set('Location', '405 Howard');\n *\n *     // or set multiple properties at once\n *     mixpanel.get_group('company', 'mixpanel').set({\n *          'Location': '405 Howard',\n *          'Founded' : 2009,\n *     });\n *     // properties can be strings, integers, dates, or lists\n *\n * @param {Object|String} prop If a string, this is the name of the property. If an object, this is an associative array of names and values.\n * @param {*} [to] A value to set on the given property name\n * @param {Function} [callback] If provided, the callback will be called after the tracking event\n */\nMixpanelGroup.prototype.set = addOptOutCheckMixpanelGroup(function(prop, to, callback) {\n    var data = this.set_action(prop, to);\n    if (_.isObject(prop)) {\n        callback = to;\n    }\n    return this._send_request(data, callback);\n});\n\n/**\n * Set properties on a group, only if they do not yet exist.\n * This will not overwrite previous group property values, unlike\n * group.set().\n *\n * ### Usage:\n *\n *     mixpanel.get_group('company', 'mixpanel').set_once('Location', '405 Howard');\n *\n *     // or set multiple properties at once\n *     mixpanel.get_group('company', 'mixpanel').set_once({\n *          'Location': '405 Howard',\n *          'Founded' : 2009,\n *     });\n *     // properties can be strings, integers, lists or dates\n *\n * @param {Object|String} prop If a string, this is the name of the property. If an object, this is an associative array of names and values.\n * @param {*} [to] A value to set on the given property name\n * @param {Function} [callback] If provided, the callback will be called after the tracking event\n */\nMixpanelGroup.prototype.set_once = addOptOutCheckMixpanelGroup(function(prop, to, callback) {\n    var data = this.set_once_action(prop, to);\n    if (_.isObject(prop)) {\n        callback = to;\n    }\n    return this._send_request(data, callback);\n});\n\n/**\n * Unset properties on a group permanently.\n *\n * ### Usage:\n *\n *     mixpanel.get_group('company', 'mixpanel').unset('Founded');\n *\n * @param {String} prop The name of the property.\n * @param {Function} [callback] If provided, the callback will be called after the tracking event\n */\nMixpanelGroup.prototype.unset = addOptOutCheckMixpanelGroup(function(prop, callback) {\n    var data = this.unset_action(prop);\n    return this._send_request(data, callback);\n});\n\n/**\n * Merge a given list with a list-valued group property, excluding duplicate values.\n *\n * ### Usage:\n *\n *     // merge a value to a list, creating it if needed\n *     mixpanel.get_group('company', 'mixpanel').union('Location', ['San Francisco', 'London']);\n *\n * @param {String} list_name Name of the property.\n * @param {Array} values Values to merge with the given property\n * @param {Function} [callback] If provided, the callback will be called after the tracking event\n */\nMixpanelGroup.prototype.union = addOptOutCheckMixpanelGroup(function(list_name, values, callback) {\n    if (_.isObject(list_name)) {\n        callback = values;\n    }\n    var data = this.union_action(list_name, values);\n    return this._send_request(data, callback);\n});\n\n/**\n * Permanently delete a group.\n *\n * ### Usage:\n *\n *     mixpanel.get_group('company', 'mixpanel').delete();\n *\n * @param {Function} [callback] If provided, the callback will be called after the tracking event\n */\nMixpanelGroup.prototype['delete'] = addOptOutCheckMixpanelGroup(function(callback) {\n    // bracket notation above prevents a minification error related to reserved words\n    var data = this.delete_action();\n    return this._send_request(data, callback);\n});\n\n/**\n * Remove a property from a group. The value will be ignored if doesn't exist.\n *\n * ### Usage:\n *\n *     mixpanel.get_group('company', 'mixpanel').remove('Location', 'London');\n *\n * @param {String} list_name Name of the property.\n * @param {Object} value Value to remove from the given group property\n * @param {Function} [callback] If provided, the callback will be called after the tracking event\n */\nMixpanelGroup.prototype.remove = addOptOutCheckMixpanelGroup(function(list_name, value, callback) {\n    var data = this.remove_action(list_name, value);\n    return this._send_request(data, callback);\n});\n\nMixpanelGroup.prototype._send_request = function(data, callback) {\n    data['$group_key'] = this._group_key;\n    data['$group_id'] = this._group_id;\n    data['$token'] = this._get_config('token');\n\n    var date_encoded_data = _.encodeDates(data);\n    return this._mixpanel._track_or_batch({\n        type: 'groups',\n        data: date_encoded_data,\n        endpoint: this._get_config('api_host') + '/' +  this._get_config('api_routes')['groups'],\n        batcher: this._mixpanel.request_batchers.groups\n    }, callback);\n};\n\nMixpanelGroup.prototype._is_reserved_property = function(prop) {\n    return prop === '$group_key' || prop === '$group_id';\n};\n\nMixpanelGroup.prototype._get_config = function(conf) {\n    return this._mixpanel.get_config(conf);\n};\n\nMixpanelGroup.prototype.toString = function() {\n    return this._mixpanel.toString() + '.group.' + this._group_key + '.' + this._group_id;\n};\n\n// MixpanelGroup Exports\nMixpanelGroup.prototype['remove']   = MixpanelGroup.prototype.remove;\nMixpanelGroup.prototype['set']      = MixpanelGroup.prototype.set;\nMixpanelGroup.prototype['set_once'] = MixpanelGroup.prototype.set_once;\nMixpanelGroup.prototype['union']    = MixpanelGroup.prototype.union;\nMixpanelGroup.prototype['unset']    = MixpanelGroup.prototype.unset;\nMixpanelGroup.prototype['toString'] = MixpanelGroup.prototype.toString;\n\n/**\n * Mixpanel People Object\n * @constructor\n */\nvar MixpanelPeople = function() {};\n\n_.extend(MixpanelPeople.prototype, apiActions);\n\nMixpanelPeople.prototype._init = function(mixpanel_instance) {\n    this._mixpanel = mixpanel_instance;\n};\n\n/*\n* Set properties on a user record.\n*\n* ### Usage:\n*\n*     mixpanel.people.set('gender', 'm');\n*\n*     // or set multiple properties at once\n*     mixpanel.people.set({\n*         'Company': 'Acme',\n*         'Plan': 'Premium',\n*         'Upgrade date': new Date()\n*     });\n*     // properties can be strings, integers, dates, or lists\n*\n* @param {Object|String} prop If a string, this is the name of the property. If an object, this is an associative array of names and values.\n* @param {*} [to] A value to set on the given property name\n* @param {Function} [callback] If provided, the callback will be called after tracking the event.\n*/\nMixpanelPeople.prototype.set = addOptOutCheckMixpanelPeople(function(prop, to, callback) {\n    var data = this.set_action(prop, to);\n    if (_.isObject(prop)) {\n        callback = to;\n    }\n    // make sure that the referrer info has been updated and saved\n    if (this._get_config('save_referrer')) {\n        this._mixpanel['persistence'].update_referrer_info(document.referrer);\n    }\n\n    // update $set object with default people properties\n    data[SET_ACTION] = _.extend(\n        {},\n        _.info.people_properties(),\n        this._mixpanel['persistence'].get_referrer_info(),\n        data[SET_ACTION]\n    );\n    return this._send_request(data, callback);\n});\n\n/*\n* Set properties on a user record, only if they do not yet exist.\n* This will not overwrite previous people property values, unlike\n* people.set().\n*\n* ### Usage:\n*\n*     mixpanel.people.set_once('First Login Date', new Date());\n*\n*     // or set multiple properties at once\n*     mixpanel.people.set_once({\n*         'First Login Date': new Date(),\n*         'Starting Plan': 'Premium'\n*     });\n*\n*     // properties can be strings, integers or dates\n*\n* @param {Object|String} prop If a string, this is the name of the property. If an object, this is an associative array of names and values.\n* @param {*} [to] A value to set on the given property name\n* @param {Function} [callback] If provided, the callback will be called after tracking the event.\n*/\nMixpanelPeople.prototype.set_once = addOptOutCheckMixpanelPeople(function(prop, to, callback) {\n    var data = this.set_once_action(prop, to);\n    if (_.isObject(prop)) {\n        callback = to;\n    }\n    return this._send_request(data, callback);\n});\n\n/*\n* Unset properties on a user record (permanently removes the properties and their values from a profile).\n*\n* ### Usage:\n*\n*     mixpanel.people.unset('gender');\n*\n*     // or unset multiple properties at once\n*     mixpanel.people.unset(['gender', 'Company']);\n*\n* @param {Array|String} prop If a string, this is the name of the property. If an array, this is a list of property names.\n* @param {Function} [callback] If provided, the callback will be called after tracking the event.\n*/\nMixpanelPeople.prototype.unset = addOptOutCheckMixpanelPeople(function(prop, callback) {\n    var data = this.unset_action(prop);\n    return this._send_request(data, callback);\n});\n\n/*\n* Increment/decrement numeric people analytics properties.\n*\n* ### Usage:\n*\n*     mixpanel.people.increment('page_views', 1);\n*\n*     // or, for convenience, if you're just incrementing a counter by\n*     // 1, you can simply do\n*     mixpanel.people.increment('page_views');\n*\n*     // to decrement a counter, pass a negative number\n*     mixpanel.people.increment('credits_left', -1);\n*\n*     // like mixpanel.people.set(), you can increment multiple\n*     // properties at once:\n*     mixpanel.people.increment({\n*         counter1: 1,\n*         counter2: 6\n*     });\n*\n* @param {Object|String} prop If a string, this is the name of the property. If an object, this is an associative array of names and numeric values.\n* @param {Number} [by] An amount to increment the given property\n* @param {Function} [callback] If provided, the callback will be called after tracking the event.\n*/\nMixpanelPeople.prototype.increment = addOptOutCheckMixpanelPeople(function(prop, by, callback) {\n    var data = {};\n    var $add = {};\n    if (_.isObject(prop)) {\n        _.each(prop, function(v, k) {\n            if (!this._is_reserved_property(k)) {\n                if (isNaN(parseFloat(v))) {\n                    console.error('Invalid increment value passed to mixpanel.people.increment - must be a number');\n                    return;\n                } else {\n                    $add[k] = v;\n                }\n            }\n        }, this);\n        callback = by;\n    } else {\n        // convenience: mixpanel.people.increment('property'); will\n        // increment 'property' by 1\n        if (_.isUndefined(by)) {\n            by = 1;\n        }\n        $add[prop] = by;\n    }\n    data[ADD_ACTION] = $add;\n\n    return this._send_request(data, callback);\n});\n\n/*\n* Append a value to a list-valued people analytics property.\n*\n* ### Usage:\n*\n*     // append a value to a list, creating it if needed\n*     mixpanel.people.append('pages_visited', 'homepage');\n*\n*     // like mixpanel.people.set(), you can append multiple\n*     // properties at once:\n*     mixpanel.people.append({\n*         list1: 'bob',\n*         list2: 123\n*     });\n*\n* @param {Object|String} list_name If a string, this is the name of the property. If an object, this is an associative array of names and values.\n* @param {*} [value] value An item to append to the list\n* @param {Function} [callback] If provided, the callback will be called after tracking the event.\n*/\nMixpanelPeople.prototype.append = addOptOutCheckMixpanelPeople(function(list_name, value, callback) {\n    if (_.isObject(list_name)) {\n        callback = value;\n    }\n    var data = this.append_action(list_name, value);\n    return this._send_request(data, callback);\n});\n\n/*\n* Remove a value from a list-valued people analytics property.\n*\n* ### Usage:\n*\n*     mixpanel.people.remove('School', 'UCB');\n*\n* @param {Object|String} list_name If a string, this is the name of the property. If an object, this is an associative array of names and values.\n* @param {*} [value] value Item to remove from the list\n* @param {Function} [callback] If provided, the callback will be called after tracking the event.\n*/\nMixpanelPeople.prototype.remove = addOptOutCheckMixpanelPeople(function(list_name, value, callback) {\n    if (_.isObject(list_name)) {\n        callback = value;\n    }\n    var data = this.remove_action(list_name, value);\n    return this._send_request(data, callback);\n});\n\n/*\n* Merge a given list with a list-valued people analytics property,\n* excluding duplicate values.\n*\n* ### Usage:\n*\n*     // merge a value to a list, creating it if needed\n*     mixpanel.people.union('pages_visited', 'homepage');\n*\n*     // like mixpanel.people.set(), you can append multiple\n*     // properties at once:\n*     mixpanel.people.union({\n*         list1: 'bob',\n*         list2: 123\n*     });\n*\n*     // like mixpanel.people.append(), you can append multiple\n*     // values to the same list:\n*     mixpanel.people.union({\n*         list1: ['bob', 'billy']\n*     });\n*\n* @param {Object|String} list_name If a string, this is the name of the property. If an object, this is an associative array of names and values.\n* @param {*} [value] Value / values to merge with the given property\n* @param {Function} [callback] If provided, the callback will be called after tracking the event.\n*/\nMixpanelPeople.prototype.union = addOptOutCheckMixpanelPeople(function(list_name, values, callback) {\n    if (_.isObject(list_name)) {\n        callback = values;\n    }\n    var data = this.union_action(list_name, values);\n    return this._send_request(data, callback);\n});\n\n/*\n * Record that you have charged the current user a certain amount\n * of money. Charges recorded with track_charge() will appear in the\n * Mixpanel revenue report.\n *\n * ### Usage:\n *\n *     // charge a user $50\n *     mixpanel.people.track_charge(50);\n *\n *     // charge a user $30.50 on the 2nd of january\n *     mixpanel.people.track_charge(30.50, {\n *         '$time': new Date('jan 1 2012')\n *     });\n *\n * @param {Number} amount The amount of money charged to the current user\n * @param {Object} [properties] An associative array of properties associated with the charge\n * @param {Function} [callback] If provided, the callback will be called when the server responds\n * @deprecated\n */\nMixpanelPeople.prototype.track_charge = addOptOutCheckMixpanelPeople(function(amount, properties, callback) {\n    if (!_.isNumber(amount)) {\n        amount = parseFloat(amount);\n        if (isNaN(amount)) {\n            console.error('Invalid value passed to mixpanel.people.track_charge - must be a number');\n            return;\n        }\n    }\n\n    return this.append('$transactions', _.extend({\n        '$amount': amount\n    }, properties), callback);\n});\n\n/*\n * Permanently clear all revenue report transactions from the\n * current user's people analytics profile.\n *\n * ### Usage:\n *\n *     mixpanel.people.clear_charges();\n *\n * @param {Function} [callback] If provided, the callback will be called after tracking the event.\n * @deprecated\n */\nMixpanelPeople.prototype.clear_charges = function(callback) {\n    return this.set('$transactions', [], callback);\n};\n\n/*\n* Permanently deletes the current people analytics profile from\n* Mixpanel (using the current distinct_id).\n*\n* ### Usage:\n*\n*     // remove the all data you have stored about the current user\n*     mixpanel.people.delete_user();\n*\n*/\nMixpanelPeople.prototype.delete_user = function() {\n    if (!this._identify_called()) {\n        console.error('mixpanel.people.delete_user() requires you to call identify() first');\n        return;\n    }\n    var data = {'$delete': this._mixpanel.get_distinct_id()};\n    return this._send_request(data);\n};\n\nMixpanelPeople.prototype.toString = function() {\n    return this._mixpanel.toString() + '.people';\n};\n\nMixpanelPeople.prototype._send_request = function(data, callback) {\n    data['$token'] = this._get_config('token');\n    data['$distinct_id'] = this._mixpanel.get_distinct_id();\n    var device_id = this._mixpanel.get_property('$device_id');\n    var user_id = this._mixpanel.get_property('$user_id');\n    var had_persisted_distinct_id = this._mixpanel.get_property('$had_persisted_distinct_id');\n    if (device_id) {\n        data['$device_id'] = device_id;\n    }\n    if (user_id) {\n        data['$user_id'] = user_id;\n    }\n    if (had_persisted_distinct_id) {\n        data['$had_persisted_distinct_id'] = had_persisted_distinct_id;\n    }\n\n    var date_encoded_data = _.encodeDates(data);\n\n    if (!this._identify_called()) {\n        this._enqueue(data);\n        if (!_.isUndefined(callback)) {\n            if (this._get_config('verbose')) {\n                callback({status: -1, error: null});\n            } else {\n                callback(-1);\n            }\n        }\n        return _.truncate(date_encoded_data, 255);\n    }\n\n    return this._mixpanel._track_or_batch({\n        type: 'people',\n        data: date_encoded_data,\n        endpoint: this._get_config('api_host') + '/' +  this._get_config('api_routes')['engage'],\n        batcher: this._mixpanel.request_batchers.people\n    }, callback);\n};\n\nMixpanelPeople.prototype._get_config = function(conf_var) {\n    return this._mixpanel.get_config(conf_var);\n};\n\nMixpanelPeople.prototype._identify_called = function() {\n    return this._mixpanel._flags.identify_called === true;\n};\n\n// Queue up engage operations if identify hasn't been called yet.\nMixpanelPeople.prototype._enqueue = function(data) {\n    if (SET_ACTION in data) {\n        this._mixpanel['persistence']._add_to_people_queue(SET_ACTION, data);\n    } else if (SET_ONCE_ACTION in data) {\n        this._mixpanel['persistence']._add_to_people_queue(SET_ONCE_ACTION, data);\n    } else if (UNSET_ACTION in data) {\n        this._mixpanel['persistence']._add_to_people_queue(UNSET_ACTION, data);\n    } else if (ADD_ACTION in data) {\n        this._mixpanel['persistence']._add_to_people_queue(ADD_ACTION, data);\n    } else if (APPEND_ACTION in data) {\n        this._mixpanel['persistence']._add_to_people_queue(APPEND_ACTION, data);\n    } else if (REMOVE_ACTION in data) {\n        this._mixpanel['persistence']._add_to_people_queue(REMOVE_ACTION, data);\n    } else if (UNION_ACTION in data) {\n        this._mixpanel['persistence']._add_to_people_queue(UNION_ACTION, data);\n    } else {\n        console.error('Invalid call to _enqueue():', data);\n    }\n};\n\nMixpanelPeople.prototype._flush_one_queue = function(action, action_method, callback, queue_to_params_fn) {\n    var _this = this;\n    var queued_data = _.extend({}, this._mixpanel['persistence'].load_queue(action));\n    var action_params = queued_data;\n\n    if (!_.isUndefined(queued_data) && _.isObject(queued_data) && !_.isEmptyObject(queued_data)) {\n        _this._mixpanel['persistence']._pop_from_people_queue(action, queued_data);\n        _this._mixpanel['persistence'].save();\n        if (queue_to_params_fn) {\n            action_params = queue_to_params_fn(queued_data);\n        }\n        action_method.call(_this, action_params, function(response, data) {\n            // on bad response, we want to add it back to the queue\n            if (response === 0) {\n                _this._mixpanel['persistence']._add_to_people_queue(action, queued_data);\n            }\n            if (!_.isUndefined(callback)) {\n                callback(response, data);\n            }\n        });\n    }\n};\n\n// Flush queued engage operations - order does not matter,\n// and there are network level race conditions anyway\nMixpanelPeople.prototype._flush = function(\n    _set_callback, _add_callback, _append_callback, _set_once_callback, _union_callback, _unset_callback, _remove_callback\n) {\n    var _this = this;\n\n    this._flush_one_queue(SET_ACTION, this.set, _set_callback);\n    this._flush_one_queue(SET_ONCE_ACTION, this.set_once, _set_once_callback);\n    this._flush_one_queue(UNSET_ACTION, this.unset, _unset_callback, function(queue) { return _.keys(queue); });\n    this._flush_one_queue(ADD_ACTION, this.increment, _add_callback);\n    this._flush_one_queue(UNION_ACTION, this.union, _union_callback);\n\n    // we have to fire off each $append individually since there is\n    // no concat method server side\n    var $append_queue = this._mixpanel['persistence'].load_queue(APPEND_ACTION);\n    if (!_.isUndefined($append_queue) && _.isArray($append_queue) && $append_queue.length) {\n        var $append_item;\n        var append_callback = function(response, data) {\n            if (response === 0) {\n                _this._mixpanel['persistence']._add_to_people_queue(APPEND_ACTION, $append_item);\n            }\n            if (!_.isUndefined(_append_callback)) {\n                _append_callback(response, data);\n            }\n        };\n        for (var i = $append_queue.length - 1; i >= 0; i--) {\n            $append_queue = this._mixpanel['persistence'].load_queue(APPEND_ACTION);\n            $append_item = $append_queue.pop();\n            _this._mixpanel['persistence'].save();\n            if (!_.isEmptyObject($append_item)) {\n                _this.append($append_item, append_callback);\n            }\n        }\n    }\n\n    // same for $remove\n    var $remove_queue = this._mixpanel['persistence'].load_queue(REMOVE_ACTION);\n    if (!_.isUndefined($remove_queue) && _.isArray($remove_queue) && $remove_queue.length) {\n        var $remove_item;\n        var remove_callback = function(response, data) {\n            if (response === 0) {\n                _this._mixpanel['persistence']._add_to_people_queue(REMOVE_ACTION, $remove_item);\n            }\n            if (!_.isUndefined(_remove_callback)) {\n                _remove_callback(response, data);\n            }\n        };\n        for (var j = $remove_queue.length - 1; j >= 0; j--) {\n            $remove_queue = this._mixpanel['persistence'].load_queue(REMOVE_ACTION);\n            $remove_item = $remove_queue.pop();\n            _this._mixpanel['persistence'].save();\n            if (!_.isEmptyObject($remove_item)) {\n                _this.remove($remove_item, remove_callback);\n            }\n        }\n    }\n};\n\nMixpanelPeople.prototype._is_reserved_property = function(prop) {\n    return prop === '$distinct_id' || prop === '$token' || prop === '$device_id' || prop === '$user_id' || prop === '$had_persisted_distinct_id';\n};\n\n// MixpanelPeople Exports\nMixpanelPeople.prototype['set']           = MixpanelPeople.prototype.set;\nMixpanelPeople.prototype['set_once']      = MixpanelPeople.prototype.set_once;\nMixpanelPeople.prototype['unset']         = MixpanelPeople.prototype.unset;\nMixpanelPeople.prototype['increment']     = MixpanelPeople.prototype.increment;\nMixpanelPeople.prototype['append']        = MixpanelPeople.prototype.append;\nMixpanelPeople.prototype['remove']        = MixpanelPeople.prototype.remove;\nMixpanelPeople.prototype['union']         = MixpanelPeople.prototype.union;\nMixpanelPeople.prototype['track_charge']  = MixpanelPeople.prototype.track_charge;\nMixpanelPeople.prototype['clear_charges'] = MixpanelPeople.prototype.clear_charges;\nMixpanelPeople.prototype['delete_user']   = MixpanelPeople.prototype.delete_user;\nMixpanelPeople.prototype['toString']      = MixpanelPeople.prototype.toString;\n\n/*\n * Constants\n */\n/** @const */ var SET_QUEUE_KEY          = '__mps';\n/** @const */ var SET_ONCE_QUEUE_KEY     = '__mpso';\n/** @const */ var UNSET_QUEUE_KEY        = '__mpus';\n/** @const */ var ADD_QUEUE_KEY          = '__mpa';\n/** @const */ var APPEND_QUEUE_KEY       = '__mpap';\n/** @const */ var REMOVE_QUEUE_KEY       = '__mpr';\n/** @const */ var UNION_QUEUE_KEY        = '__mpu';\n// This key is deprecated, but we want to check for it to see whether aliasing is allowed.\n/** @const */ var PEOPLE_DISTINCT_ID_KEY = '$people_distinct_id';\n/** @const */ var ALIAS_ID_KEY           = '__alias';\n/** @const */ var EVENT_TIMERS_KEY       = '__timers';\n/** @const */ var RESERVED_PROPERTIES = [\n    SET_QUEUE_KEY,\n    SET_ONCE_QUEUE_KEY,\n    UNSET_QUEUE_KEY,\n    ADD_QUEUE_KEY,\n    APPEND_QUEUE_KEY,\n    REMOVE_QUEUE_KEY,\n    UNION_QUEUE_KEY,\n    PEOPLE_DISTINCT_ID_KEY,\n    ALIAS_ID_KEY,\n    EVENT_TIMERS_KEY\n];\n\n/**\n * Mixpanel Persistence Object\n * @constructor\n */\nvar MixpanelPersistence = function(config) {\n    this['props'] = {};\n    this.campaign_params_saved = false;\n\n    if (config['persistence_name']) {\n        this.name = 'mp_' + config['persistence_name'];\n    } else {\n        this.name = 'mp_' + config['token'] + '_mixpanel';\n    }\n\n    var storage_type = config['persistence'];\n    if (storage_type !== 'cookie' && storage_type !== 'localStorage') {\n        console.critical('Unknown persistence type ' + storage_type + '; falling back to cookie');\n        storage_type = config['persistence'] = 'cookie';\n    }\n\n    if (storage_type === 'localStorage' && _.localStorage.is_supported()) {\n        this.storage = _.localStorage;\n    } else {\n        this.storage = _.cookie;\n    }\n\n    this.load();\n    this.update_config(config);\n    this.upgrade(config);\n    this.save();\n};\n\nMixpanelPersistence.prototype.properties = function() {\n    var p = {};\n\n    this.load();\n\n    // Filter out reserved properties\n    _.each(this['props'], function(v, k) {\n        if (!_.include(RESERVED_PROPERTIES, k)) {\n            p[k] = v;\n        }\n    });\n    return p;\n};\n\nMixpanelPersistence.prototype.load = function() {\n    if (this.disabled) { return; }\n\n    var entry = this.storage.parse(this.name);\n\n    if (entry) {\n        this['props'] = _.extend({}, entry);\n    }\n};\n\nMixpanelPersistence.prototype.upgrade = function(config) {\n    var upgrade_from_old_lib = config['upgrade'],\n        old_cookie_name,\n        old_cookie;\n\n    if (upgrade_from_old_lib) {\n        old_cookie_name = 'mp_super_properties';\n        // Case where they had a custom cookie name before.\n        if (typeof(upgrade_from_old_lib) === 'string') {\n            old_cookie_name = upgrade_from_old_lib;\n        }\n\n        old_cookie = this.storage.parse(old_cookie_name);\n\n        // remove the cookie\n        this.storage.remove(old_cookie_name);\n        this.storage.remove(old_cookie_name, true);\n\n        if (old_cookie) {\n            this['props'] = _.extend(\n                this['props'],\n                old_cookie['all'],\n                old_cookie['events']\n            );\n        }\n    }\n\n    if (!config['cookie_name'] && config['name'] !== 'mixpanel') {\n        // special case to handle people with cookies of the form\n        // mp_TOKEN_INSTANCENAME from the first release of this library\n        old_cookie_name = 'mp_' + config['token'] + '_' + config['name'];\n        old_cookie = this.storage.parse(old_cookie_name);\n\n        if (old_cookie) {\n            this.storage.remove(old_cookie_name);\n            this.storage.remove(old_cookie_name, true);\n\n            // Save the prop values that were in the cookie from before -\n            // this should only happen once as we delete the old one.\n            this.register_once(old_cookie);\n        }\n    }\n\n    if (this.storage === _.localStorage) {\n        old_cookie = _.cookie.parse(this.name);\n\n        _.cookie.remove(this.name);\n        _.cookie.remove(this.name, true);\n\n        if (old_cookie) {\n            this.register_once(old_cookie);\n        }\n    }\n};\n\nMixpanelPersistence.prototype.save = function() {\n    if (this.disabled) { return; }\n\n    this.storage.set(\n        this.name,\n        _.JSONEncode(this['props']),\n        this.expire_days,\n        this.cross_subdomain,\n        this.secure,\n        this.cross_site,\n        this.cookie_domain\n    );\n};\n\nMixpanelPersistence.prototype.load_prop = function(key) {\n    this.load();\n    return this['props'][key];\n};\n\nMixpanelPersistence.prototype.remove = function() {\n    // remove both domain and subdomain cookies\n    this.storage.remove(this.name, false, this.cookie_domain);\n    this.storage.remove(this.name, true, this.cookie_domain);\n};\n\n// removes the storage entry and deletes all loaded data\n// forced name for tests\nMixpanelPersistence.prototype.clear = function() {\n    this.remove();\n    this['props'] = {};\n};\n\n/**\n* @param {Object} props\n* @param {*=} default_value\n* @param {number=} days\n*/\nMixpanelPersistence.prototype.register_once = function(props, default_value, days) {\n    if (_.isObject(props)) {\n        if (typeof(default_value) === 'undefined') { default_value = 'None'; }\n        this.expire_days = (typeof(days) === 'undefined') ? this.default_expiry : days;\n\n        this.load();\n\n        _.each(props, function(val, prop) {\n            if (!this['props'].hasOwnProperty(prop) || this['props'][prop] === default_value) {\n                this['props'][prop] = val;\n            }\n        }, this);\n\n        this.save();\n\n        return true;\n    }\n    return false;\n};\n\n/**\n* @param {Object} props\n* @param {number=} days\n*/\nMixpanelPersistence.prototype.register = function(props, days) {\n    if (_.isObject(props)) {\n        this.expire_days = (typeof(days) === 'undefined') ? this.default_expiry : days;\n\n        this.load();\n        _.extend(this['props'], props);\n        this.save();\n\n        return true;\n    }\n    return false;\n};\n\nMixpanelPersistence.prototype.unregister = function(prop) {\n    this.load();\n    if (prop in this['props']) {\n        delete this['props'][prop];\n        this.save();\n    }\n};\n\nMixpanelPersistence.prototype.update_search_keyword = function(referrer) {\n    this.register(_.info.searchInfo(referrer));\n};\n\n// EXPORTED METHOD, we test this directly.\nMixpanelPersistence.prototype.update_referrer_info = function(referrer) {\n    // If referrer doesn't exist, we want to note the fact that it was type-in traffic.\n    this.register_once({\n        '$initial_referrer': referrer || '$direct',\n        '$initial_referring_domain': _.info.referringDomain(referrer) || '$direct'\n    }, '');\n};\n\nMixpanelPersistence.prototype.get_referrer_info = function() {\n    return _.strip_empty_properties({\n        '$initial_referrer': this['props']['$initial_referrer'],\n        '$initial_referring_domain': this['props']['$initial_referring_domain']\n    });\n};\n\nMixpanelPersistence.prototype.update_config = function(config) {\n    this.default_expiry = this.expire_days = config['cookie_expiration'];\n    this.set_disabled(config['disable_persistence']);\n    this.set_cookie_domain(config['cookie_domain']);\n    this.set_cross_site(config['cross_site_cookie']);\n    this.set_cross_subdomain(config['cross_subdomain_cookie']);\n    this.set_secure(config['secure_cookie']);\n};\n\nMixpanelPersistence.prototype.set_disabled = function(disabled) {\n    this.disabled = disabled;\n    if (this.disabled) {\n        this.remove();\n    } else {\n        this.save();\n    }\n};\n\nMixpanelPersistence.prototype.set_cookie_domain = function(cookie_domain) {\n    if (cookie_domain !== this.cookie_domain) {\n        this.remove();\n        this.cookie_domain = cookie_domain;\n        this.save();\n    }\n};\n\nMixpanelPersistence.prototype.set_cross_site = function(cross_site) {\n    if (cross_site !== this.cross_site) {\n        this.cross_site = cross_site;\n        this.remove();\n        this.save();\n    }\n};\n\nMixpanelPersistence.prototype.set_cross_subdomain = function(cross_subdomain) {\n    if (cross_subdomain !== this.cross_subdomain) {\n        this.cross_subdomain = cross_subdomain;\n        this.remove();\n        this.save();\n    }\n};\n\nMixpanelPersistence.prototype.get_cross_subdomain = function() {\n    return this.cross_subdomain;\n};\n\nMixpanelPersistence.prototype.set_secure = function(secure) {\n    if (secure !== this.secure) {\n        this.secure = secure ? true : false;\n        this.remove();\n        this.save();\n    }\n};\n\nMixpanelPersistence.prototype._add_to_people_queue = function(queue, data) {\n    var q_key = this._get_queue_key(queue),\n        q_data = data[queue],\n        set_q = this._get_or_create_queue(SET_ACTION),\n        set_once_q = this._get_or_create_queue(SET_ONCE_ACTION),\n        unset_q = this._get_or_create_queue(UNSET_ACTION),\n        add_q = this._get_or_create_queue(ADD_ACTION),\n        union_q = this._get_or_create_queue(UNION_ACTION),\n        remove_q = this._get_or_create_queue(REMOVE_ACTION, []),\n        append_q = this._get_or_create_queue(APPEND_ACTION, []);\n\n    if (q_key === SET_QUEUE_KEY) {\n        // Update the set queue - we can override any existing values\n        _.extend(set_q, q_data);\n        // if there was a pending increment, override it\n        // with the set.\n        this._pop_from_people_queue(ADD_ACTION, q_data);\n        // if there was a pending union, override it\n        // with the set.\n        this._pop_from_people_queue(UNION_ACTION, q_data);\n        this._pop_from_people_queue(UNSET_ACTION, q_data);\n    } else if (q_key === SET_ONCE_QUEUE_KEY) {\n        // only queue the data if there is not already a set_once call for it.\n        _.each(q_data, function(v, k) {\n            if (!(k in set_once_q)) {\n                set_once_q[k] = v;\n            }\n        });\n        this._pop_from_people_queue(UNSET_ACTION, q_data);\n    } else if (q_key === UNSET_QUEUE_KEY) {\n        _.each(q_data, function(prop) {\n\n            // undo previously-queued actions on this key\n            _.each([set_q, set_once_q, add_q, union_q], function(enqueued_obj) {\n                if (prop in enqueued_obj) {\n                    delete enqueued_obj[prop];\n                }\n            });\n            _.each(append_q, function(append_obj) {\n                if (prop in append_obj) {\n                    delete append_obj[prop];\n                }\n            });\n\n            unset_q[prop] = true;\n\n        });\n    } else if (q_key === ADD_QUEUE_KEY) {\n        _.each(q_data, function(v, k) {\n            // If it exists in the set queue, increment\n            // the value\n            if (k in set_q) {\n                set_q[k] += v;\n            } else {\n                // If it doesn't exist, update the add\n                // queue\n                if (!(k in add_q)) {\n                    add_q[k] = 0;\n                }\n                add_q[k] += v;\n            }\n        }, this);\n        this._pop_from_people_queue(UNSET_ACTION, q_data);\n    } else if (q_key === UNION_QUEUE_KEY) {\n        _.each(q_data, function(v, k) {\n            if (_.isArray(v)) {\n                if (!(k in union_q)) {\n                    union_q[k] = [];\n                }\n                // We may send duplicates, the server will dedup them.\n                union_q[k] = union_q[k].concat(v);\n            }\n        });\n        this._pop_from_people_queue(UNSET_ACTION, q_data);\n    } else if (q_key === REMOVE_QUEUE_KEY) {\n        remove_q.push(q_data);\n        this._pop_from_people_queue(APPEND_ACTION, q_data);\n    } else if (q_key === APPEND_QUEUE_KEY) {\n        append_q.push(q_data);\n        this._pop_from_people_queue(UNSET_ACTION, q_data);\n    }\n\n    console.log('MIXPANEL PEOPLE REQUEST (QUEUED, PENDING IDENTIFY):');\n    console.log(data);\n\n    this.save();\n};\n\nMixpanelPersistence.prototype._pop_from_people_queue = function(queue, data) {\n    var q = this['props'][this._get_queue_key(queue)];\n    if (!_.isUndefined(q)) {\n        _.each(data, function(v, k) {\n            if (queue === APPEND_ACTION || queue === REMOVE_ACTION) {\n                // list actions: only remove if both k+v match\n                // e.g. remove should not override append in a case like\n                // append({foo: 'bar'}); remove({foo: 'qux'})\n                _.each(q, function(queued_action) {\n                    if (queued_action[k] === v) {\n                        delete queued_action[k];\n                    }\n                });\n            } else {\n                delete q[k];\n            }\n        }, this);\n    }\n};\n\nMixpanelPersistence.prototype.load_queue = function(queue) {\n    return this.load_prop(this._get_queue_key(queue));\n};\n\nMixpanelPersistence.prototype._get_queue_key = function(queue) {\n    if (queue === SET_ACTION) {\n        return SET_QUEUE_KEY;\n    } else if (queue === SET_ONCE_ACTION) {\n        return SET_ONCE_QUEUE_KEY;\n    } else if (queue === UNSET_ACTION) {\n        return UNSET_QUEUE_KEY;\n    } else if (queue === ADD_ACTION) {\n        return ADD_QUEUE_KEY;\n    } else if (queue === APPEND_ACTION) {\n        return APPEND_QUEUE_KEY;\n    } else if (queue === REMOVE_ACTION) {\n        return REMOVE_QUEUE_KEY;\n    } else if (queue === UNION_ACTION) {\n        return UNION_QUEUE_KEY;\n    } else {\n        console.error('Invalid queue:', queue);\n    }\n};\n\nMixpanelPersistence.prototype._get_or_create_queue = function(queue, default_val) {\n    var key = this._get_queue_key(queue);\n    default_val = _.isUndefined(default_val) ? {} : default_val;\n    return this['props'][key] || (this['props'][key] = default_val);\n};\n\nMixpanelPersistence.prototype.set_event_timer = function(event_name, timestamp) {\n    var timers = this.load_prop(EVENT_TIMERS_KEY) || {};\n    timers[event_name] = timestamp;\n    this['props'][EVENT_TIMERS_KEY] = timers;\n    this.save();\n};\n\nMixpanelPersistence.prototype.remove_event_timer = function(event_name) {\n    var timers = this.load_prop(EVENT_TIMERS_KEY) || {};\n    var timestamp = timers[event_name];\n    if (!_.isUndefined(timestamp)) {\n        delete this['props'][EVENT_TIMERS_KEY][event_name];\n        this.save();\n    }\n    return timestamp;\n};\n\n/*\n * Mixpanel JS Library\n *\n * Copyright 2012, Mixpanel, Inc. All Rights Reserved\n * http://mixpanel.com/\n *\n * Includes portions of Underscore.js\n * http://documentcloud.github.com/underscore/\n * (c) 2011 Jeremy Ashkenas, DocumentCloud Inc.\n * Released under the MIT License.\n */\n\n// ==ClosureCompiler==\n// @compilation_level ADVANCED_OPTIMIZATIONS\n// @output_file_name mixpanel-2.8.min.js\n// ==/ClosureCompiler==\n\n/*\nSIMPLE STYLE GUIDE:\n\nthis.x === public function\nthis._x === internal - only use within this file\nthis.__x === private - only use within the class\n\nGlobals should be all caps\n*/\n\nvar init_type;       // MODULE or SNIPPET loader\nvar mixpanel_master; // main mixpanel instance / object\nvar INIT_MODULE  = 0;\nvar INIT_SNIPPET = 1;\n\nvar IDENTITY_FUNC = function(x) {return x;};\nvar NOOP_FUNC = function() {};\n\n/** @const */ var PRIMARY_INSTANCE_NAME = 'mixpanel';\n/** @const */ var PAYLOAD_TYPE_BASE64   = 'base64';\n/** @const */ var PAYLOAD_TYPE_JSON     = 'json';\n/** @const */ var DEVICE_ID_PREFIX      = '$device:';\n\n\n/*\n * Dynamic... constants? Is that an oxymoron?\n */\n// http://hacks.mozilla.org/2009/07/cross-site-xmlhttprequest-with-cors/\n// https://developer.mozilla.org/en-US/docs/DOM/XMLHttpRequest#withCredentials\nvar USE_XHR = (window$1.XMLHttpRequest && 'withCredentials' in new XMLHttpRequest());\n\n// IE<10 does not support cross-origin XHR's but script tags\n// with defer won't block window.onload; ENQUEUE_REQUESTS\n// should only be true for Opera<12\nvar ENQUEUE_REQUESTS = !USE_XHR && (userAgent.indexOf('MSIE') === -1) && (userAgent.indexOf('Mozilla') === -1);\n\n// save reference to navigator.sendBeacon so it can be minified\nvar sendBeacon = null;\nif (navigator['sendBeacon']) {\n    sendBeacon = function() {\n        // late reference to navigator.sendBeacon to allow patching/spying\n        return navigator['sendBeacon'].apply(navigator, arguments);\n    };\n}\n\nvar DEFAULT_API_ROUTES = {\n    'track': 'track/',\n    'engage': 'engage/',\n    'groups': 'groups/'\n};\n\n/*\n * Module-level globals\n */\nvar DEFAULT_CONFIG = {\n    'api_host':                          'https://api-js.mixpanel.com',\n    'api_routes':                        DEFAULT_API_ROUTES,\n    'api_method':                        'POST',\n    'api_transport':                     'XHR',\n    'api_payload_format':                PAYLOAD_TYPE_BASE64,\n    'app_host':                          'https://mixpanel.com',\n    'cdn':                               'https://cdn.mxpnl.com',\n    'cross_site_cookie':                 false,\n    'cross_subdomain_cookie':            true,\n    'error_reporter':                    NOOP_FUNC,\n    'persistence':                       'cookie',\n    'persistence_name':                  '',\n    'cookie_domain':                     '',\n    'cookie_name':                       '',\n    'loaded':                            NOOP_FUNC,\n    'track_marketing':                   true,\n    'track_pageview':                    false,\n    'skip_first_touch_marketing':        false,\n    'store_google':                      true,\n    'save_referrer':                     true,\n    'test':                              false,\n    'verbose':                           false,\n    'img':                               false,\n    'debug':                             false,\n    'track_links_timeout':               300,\n    'cookie_expiration':                 365,\n    'upgrade':                           false,\n    'disable_persistence':               false,\n    'disable_cookie':                    false,\n    'secure_cookie':                     false,\n    'ip':                                true,\n    'opt_out_tracking_by_default':       false,\n    'opt_out_persistence_by_default':    false,\n    'opt_out_tracking_persistence_type': 'localStorage',\n    'opt_out_tracking_cookie_prefix':    null,\n    'property_blacklist':                [],\n    'xhr_headers':                       {}, // { header: value, header2: value }\n    'ignore_dnt':                        false,\n    'batch_requests':                    true,\n    'batch_size':                        50,\n    'batch_flush_interval_ms':           5000,\n    'batch_request_timeout_ms':          90000,\n    'batch_autostart':                   true,\n    'hooks':                             {}\n};\n\nvar DOM_LOADED = false;\n\n/**\n * Mixpanel Library Object\n * @constructor\n */\nvar MixpanelLib = function() {};\n\n\n/**\n * create_mplib(token:string, config:object, name:string)\n *\n * This function is used by the init method of MixpanelLib objects\n * as well as the main initializer at the end of the JSLib (that\n * initializes document.mixpanel as well as any additional instances\n * declared before this file has loaded).\n */\nvar create_mplib = function(token, config, name) {\n    var instance,\n        target = (name === PRIMARY_INSTANCE_NAME) ? mixpanel_master : mixpanel_master[name];\n\n    if (target && init_type === INIT_MODULE) {\n        instance = target;\n    } else {\n        if (target && !_.isArray(target)) {\n            console.error('You have already initialized ' + name);\n            return;\n        }\n        instance = new MixpanelLib();\n    }\n\n    instance._cached_groups = {}; // cache groups in a pool\n\n    instance._init(token, config, name);\n\n    instance['people'] = new MixpanelPeople();\n    instance['people']._init(instance);\n\n    if (!instance.get_config('skip_first_touch_marketing')) {\n        // We need null UTM params in the object because\n        // UTM parameters act as a tuple. If any UTM param\n        // is present, then we set all UTM params including\n        // empty ones together\n        var utm_params = _.info.campaignParams(null);\n        var initial_utm_params = {};\n        var has_utm = false;\n        _.each(utm_params, function(utm_value, utm_key) {\n            initial_utm_params['initial_' + utm_key] = utm_value;\n            if (utm_value) {\n                has_utm = true;\n            }\n        });\n        if (has_utm) {\n            instance['people'].set_once(initial_utm_params);\n        }\n    }\n\n    // if any instance on the page has debug = true, we set the\n    // global debug to be true\n    Config.DEBUG = Config.DEBUG || instance.get_config('debug');\n\n    // if target is not defined, we called init after the lib already\n    // loaded, so there won't be an array of things to execute\n    if (!_.isUndefined(target) && _.isArray(target)) {\n        // Crunch through the people queue first - we queue this data up &\n        // flush on identify, so it's better to do all these operations first\n        instance._execute_array.call(instance['people'], target['people']);\n        instance._execute_array(target);\n    }\n\n    return instance;\n};\n\n// Initialization methods\n\n/**\n * This function initializes a new instance of the Mixpanel tracking object.\n * All new instances are added to the main mixpanel object as sub properties (such as\n * mixpanel.library_name) and also returned by this function. To define a\n * second instance on the page, you would call:\n *\n *     mixpanel.init('new token', { your: 'config' }, 'library_name');\n *\n * and use it like so:\n *\n *     mixpanel.library_name.track(...);\n *\n * @param {String} token   Your Mixpanel API token\n * @param {Object} [config]  A dictionary of config options to override. <a href=\"https://github.com/mixpanel/mixpanel-js/blob/v2.46.0/src/mixpanel-core.js#L88-L127\">See a list of default config options</a>.\n * @param {String} [name]    The name for the new mixpanel instance that you want created\n */\nMixpanelLib.prototype.init = function (token, config, name) {\n    if (_.isUndefined(name)) {\n        this.report_error('You must name your new library: init(token, config, name)');\n        return;\n    }\n    if (name === PRIMARY_INSTANCE_NAME) {\n        this.report_error('You must initialize the main mixpanel object right after you include the Mixpanel js snippet');\n        return;\n    }\n\n    var instance = create_mplib(token, config, name);\n    mixpanel_master[name] = instance;\n    instance._loaded();\n\n    return instance;\n};\n\n// mixpanel._init(token:string, config:object, name:string)\n//\n// This function sets up the current instance of the mixpanel\n// library.  The difference between this method and the init(...)\n// method is this one initializes the actual instance, whereas the\n// init(...) method sets up a new library and calls _init on it.\n//\nMixpanelLib.prototype._init = function(token, config, name) {\n    config = config || {};\n\n    this['__loaded'] = true;\n    this['config'] = {};\n\n    var variable_features = {};\n\n    // default to JSON payload for standard mixpanel.com API hosts\n    if (!('api_payload_format' in config)) {\n        var api_host = config['api_host'] || DEFAULT_CONFIG['api_host'];\n        if (api_host.match(/\\.mixpanel\\.com/)) {\n            variable_features['api_payload_format'] = PAYLOAD_TYPE_JSON;\n        }\n    }\n\n    this.set_config(_.extend({}, DEFAULT_CONFIG, variable_features, config, {\n        'name': name,\n        'token': token,\n        'callback_fn': ((name === PRIMARY_INSTANCE_NAME) ? name : PRIMARY_INSTANCE_NAME + '.' + name) + '._jsc'\n    }));\n\n    this['_jsc'] = NOOP_FUNC;\n\n    this.__dom_loaded_queue = [];\n    this.__request_queue = [];\n    this.__disabled_events = [];\n    this._flags = {\n        'disable_all_events': false,\n        'identify_called': false\n    };\n\n    // set up request queueing/batching\n    this.request_batchers = {};\n    this._batch_requests = this.get_config('batch_requests');\n    if (this._batch_requests) {\n        if (!_.localStorage.is_supported(true) || !USE_XHR) {\n            this._batch_requests = false;\n            console.log('Turning off Mixpanel request-queueing; needs XHR and localStorage support');\n            _.each(this.get_batcher_configs(), function(batcher_config) {\n                console.log('Clearing batch queue ' + batcher_config.queue_key);\n                _.localStorage.remove(batcher_config.queue_key);\n            });\n        } else {\n            this.init_batchers();\n            if (sendBeacon && window$1.addEventListener) {\n                // Before page closes or hides (user tabs away etc), attempt to flush any events\n                // queued up via navigator.sendBeacon. Since sendBeacon doesn't report success/failure,\n                // events will not be removed from the persistent store; if the site is loaded again,\n                // the events will be flushed again on startup and deduplicated on the Mixpanel server\n                // side.\n                // There is no reliable way to capture only page close events, so we lean on the\n                // visibilitychange and pagehide events as recommended at\n                // https://developer.mozilla.org/en-US/docs/Web/API/Window/unload_event#usage_notes.\n                // These events fire when the user clicks away from the current page/tab, so will occur\n                // more frequently than page unload, but are the only mechanism currently for capturing\n                // this scenario somewhat reliably.\n                var flush_on_unload = _.bind(function() {\n                    if (!this.request_batchers.events.stopped) {\n                        this.request_batchers.events.flush({unloading: true});\n                    }\n                }, this);\n                window$1.addEventListener('pagehide', function(ev) {\n                    if (ev['persisted']) {\n                        flush_on_unload();\n                    }\n                });\n                window$1.addEventListener('visibilitychange', function() {\n                    if (document$1['visibilityState'] === 'hidden') {\n                        flush_on_unload();\n                    }\n                });\n            }\n        }\n    }\n\n    this['persistence'] = this['cookie'] = new MixpanelPersistence(this['config']);\n    this.unpersisted_superprops = {};\n    this._gdpr_init();\n\n    var uuid = _.UUID();\n    if (!this.get_distinct_id()) {\n        // There is no need to set the distinct id\n        // or the device id if something was already stored\n        // in the persitence\n        this.register_once({\n            'distinct_id': DEVICE_ID_PREFIX + uuid,\n            '$device_id': uuid\n        }, '');\n    }\n\n    if (this.get_config('track_pageview')) {\n        this.track_pageview();\n    }\n};\n\n// Private methods\n\nMixpanelLib.prototype._loaded = function() {\n    this.get_config('loaded')(this);\n    this._set_default_superprops();\n};\n\n// update persistence with info on referrer, UTM params, etc\nMixpanelLib.prototype._set_default_superprops = function() {\n    this['persistence'].update_search_keyword(document$1.referrer);\n    if (this.get_config('store_google')) {\n        this.register(_.info.campaignParams());\n    }\n    if (this.get_config('save_referrer')) {\n        this['persistence'].update_referrer_info(document$1.referrer);\n    }\n};\n\nMixpanelLib.prototype._dom_loaded = function() {\n    _.each(this.__dom_loaded_queue, function(item) {\n        this._track_dom.apply(this, item);\n    }, this);\n\n    if (!this.has_opted_out_tracking()) {\n        _.each(this.__request_queue, function(item) {\n            this._send_request.apply(this, item);\n        }, this);\n    }\n\n    delete this.__dom_loaded_queue;\n    delete this.__request_queue;\n};\n\nMixpanelLib.prototype._track_dom = function(DomClass, args) {\n    if (this.get_config('img')) {\n        this.report_error('You can\\'t use DOM tracking functions with img = true.');\n        return false;\n    }\n\n    if (!DOM_LOADED) {\n        this.__dom_loaded_queue.push([DomClass, args]);\n        return false;\n    }\n\n    var dt = new DomClass().init(this);\n    return dt.track.apply(dt, args);\n};\n\n/**\n * _prepare_callback() should be called by callers of _send_request for use\n * as the callback argument.\n *\n * If there is no callback, this returns null.\n * If we are going to make XHR/XDR requests, this returns a function.\n * If we are going to use script tags, this returns a string to use as the\n * callback GET param.\n */\nMixpanelLib.prototype._prepare_callback = function(callback, data) {\n    if (_.isUndefined(callback)) {\n        return null;\n    }\n\n    if (USE_XHR) {\n        var callback_function = function(response) {\n            callback(response, data);\n        };\n        return callback_function;\n    } else {\n        // if the user gives us a callback, we store as a random\n        // property on this instances jsc function and update our\n        // callback string to reflect that.\n        var jsc = this['_jsc'];\n        var randomized_cb = '' + Math.floor(Math.random() * 100000000);\n        var callback_string = this.get_config('callback_fn') + '[' + randomized_cb + ']';\n        jsc[randomized_cb] = function(response) {\n            delete jsc[randomized_cb];\n            callback(response, data);\n        };\n        return callback_string;\n    }\n};\n\nMixpanelLib.prototype._send_request = function(url, data, options, callback) {\n    var succeeded = true;\n\n    if (ENQUEUE_REQUESTS) {\n        this.__request_queue.push(arguments);\n        return succeeded;\n    }\n\n    var DEFAULT_OPTIONS = {\n        method: this.get_config('api_method'),\n        transport: this.get_config('api_transport'),\n        verbose: this.get_config('verbose')\n    };\n    var body_data = null;\n\n    if (!callback && (_.isFunction(options) || typeof options === 'string')) {\n        callback = options;\n        options = null;\n    }\n    options = _.extend(DEFAULT_OPTIONS, options || {});\n    if (!USE_XHR) {\n        options.method = 'GET';\n    }\n    var use_post = options.method === 'POST';\n    var use_sendBeacon = sendBeacon && use_post && options.transport.toLowerCase() === 'sendbeacon';\n\n    // needed to correctly format responses\n    var verbose_mode = options.verbose;\n    if (data['verbose']) { verbose_mode = true; }\n\n    if (this.get_config('test')) { data['test'] = 1; }\n    if (verbose_mode) { data['verbose'] = 1; }\n    if (this.get_config('img')) { data['img'] = 1; }\n    if (!USE_XHR) {\n        if (callback) {\n            data['callback'] = callback;\n        } else if (verbose_mode || this.get_config('test')) {\n            // Verbose output (from verbose mode, or an error in test mode) is a json blob,\n            // which by itself is not valid javascript. Without a callback, this verbose output will\n            // cause an error when returned via jsonp, so we force a no-op callback param.\n            // See the ECMA script spec: http://www.ecma-international.org/ecma-262/5.1/#sec-12.4\n            data['callback'] = '(function(){})';\n        }\n    }\n\n    data['ip'] = this.get_config('ip')?1:0;\n    data['_'] = new Date().getTime().toString();\n\n    if (use_post) {\n        body_data = 'data=' + encodeURIComponent(data['data']);\n        delete data['data'];\n    }\n\n    url += '?' + _.HTTPBuildQuery(data);\n\n    var lib = this;\n    if ('img' in data) {\n        var img = document$1.createElement('img');\n        img.src = url;\n        document$1.body.appendChild(img);\n    } else if (use_sendBeacon) {\n        try {\n            succeeded = sendBeacon(url, body_data);\n        } catch (e) {\n            lib.report_error(e);\n            succeeded = false;\n        }\n        try {\n            if (callback) {\n                callback(succeeded ? 1 : 0);\n            }\n        } catch (e) {\n            lib.report_error(e);\n        }\n    } else if (USE_XHR) {\n        try {\n            var req = new XMLHttpRequest();\n            req.open(options.method, url, true);\n\n            var headers = this.get_config('xhr_headers');\n            if (use_post) {\n                headers['Content-Type'] = 'application/x-www-form-urlencoded';\n            }\n            _.each(headers, function(headerValue, headerName) {\n                req.setRequestHeader(headerName, headerValue);\n            });\n\n            if (options.timeout_ms && typeof req.timeout !== 'undefined') {\n                req.timeout = options.timeout_ms;\n                var start_time = new Date().getTime();\n            }\n\n            // send the mp_optout cookie\n            // withCredentials cannot be modified until after calling .open on Android and Mobile Safari\n            req.withCredentials = true;\n            req.onreadystatechange = function () {\n                if (req.readyState === 4) { // XMLHttpRequest.DONE == 4, except in safari 4\n                    if (req.status === 200) {\n                        if (callback) {\n                            if (verbose_mode) {\n                                var response;\n                                try {\n                                    response = _.JSONDecode(req.responseText);\n                                } catch (e) {\n                                    lib.report_error(e);\n                                    if (options.ignore_json_errors) {\n                                        response = req.responseText;\n                                    } else {\n                                        return;\n                                    }\n                                }\n                                callback(response);\n                            } else {\n                                callback(Number(req.responseText));\n                            }\n                        }\n                    } else {\n                        var error;\n                        if (\n                            req.timeout &&\n                            !req.status &&\n                            new Date().getTime() - start_time >= req.timeout\n                        ) {\n                            error = 'timeout';\n                        } else {\n                            error = 'Bad HTTP status: ' + req.status + ' ' + req.statusText;\n                        }\n                        lib.report_error(error);\n                        if (callback) {\n                            if (verbose_mode) {\n                                callback({status: 0, error: error, xhr_req: req});\n                            } else {\n                                callback(0);\n                            }\n                        }\n                    }\n                }\n            };\n            req.send(body_data);\n        } catch (e) {\n            lib.report_error(e);\n            succeeded = false;\n        }\n    } else {\n        var script = document$1.createElement('script');\n        script.type = 'text/javascript';\n        script.async = true;\n        script.defer = true;\n        script.src = url;\n        var s = document$1.getElementsByTagName('script')[0];\n        s.parentNode.insertBefore(script, s);\n    }\n\n    return succeeded;\n};\n\n/**\n * _execute_array() deals with processing any mixpanel function\n * calls that were called before the Mixpanel library were loaded\n * (and are thus stored in an array so they can be called later)\n *\n * Note: we fire off all the mixpanel function calls && user defined\n * functions BEFORE we fire off mixpanel tracking calls. This is so\n * identify/register/set_config calls can properly modify early\n * tracking calls.\n *\n * @param {Array} array\n */\nMixpanelLib.prototype._execute_array = function(array) {\n    var fn_name, alias_calls = [], other_calls = [], tracking_calls = [];\n    _.each(array, function(item) {\n        if (item) {\n            fn_name = item[0];\n            if (_.isArray(fn_name)) {\n                tracking_calls.push(item); // chained call e.g. mixpanel.get_group().set()\n            } else if (typeof(item) === 'function') {\n                item.call(this);\n            } else if (_.isArray(item) && fn_name === 'alias') {\n                alias_calls.push(item);\n            } else if (_.isArray(item) && fn_name.indexOf('track') !== -1 && typeof(this[fn_name]) === 'function') {\n                tracking_calls.push(item);\n            } else {\n                other_calls.push(item);\n            }\n        }\n    }, this);\n\n    var execute = function(calls, context) {\n        _.each(calls, function(item) {\n            if (_.isArray(item[0])) {\n                // chained call\n                var caller = context;\n                _.each(item, function(call) {\n                    caller = caller[call[0]].apply(caller, call.slice(1));\n                });\n            } else {\n                this[item[0]].apply(this, item.slice(1));\n            }\n        }, context);\n    };\n\n    execute(alias_calls, this);\n    execute(other_calls, this);\n    execute(tracking_calls, this);\n};\n\n// request queueing utils\n\nMixpanelLib.prototype.are_batchers_initialized = function() {\n    return !!this.request_batchers.events;\n};\n\nMixpanelLib.prototype.get_batcher_configs = function() {\n    var queue_prefix = '__mpq_' + this.get_config('token');\n    var api_routes = this.get_config('api_routes');\n    this._batcher_configs = this._batcher_configs || {\n        events: {type: 'events', endpoint: '/' + api_routes['track'], queue_key: queue_prefix + '_ev'},\n        people: {type: 'people', endpoint: '/' + api_routes['engage'], queue_key: queue_prefix + '_pp'},\n        groups: {type: 'groups', endpoint: '/' + api_routes['groups'], queue_key: queue_prefix + '_gr'}\n    };\n    return this._batcher_configs;\n};\n\nMixpanelLib.prototype.init_batchers = function() {\n    if (!this.are_batchers_initialized()) {\n        var batcher_for = _.bind(function(attrs) {\n            return new RequestBatcher(\n                attrs.queue_key,\n                {\n                    libConfig: this['config'],\n                    sendRequestFunc: _.bind(function(data, options, cb) {\n                        this._send_request(\n                            this.get_config('api_host') + attrs.endpoint,\n                            this._encode_data_for_request(data),\n                            options,\n                            this._prepare_callback(cb, data)\n                        );\n                    }, this),\n                    beforeSendHook: _.bind(function(item) {\n                        return this._run_hook('before_send_' + attrs.type, item);\n                    }, this),\n                    errorReporter: this.get_config('error_reporter'),\n                    stopAllBatchingFunc: _.bind(this.stop_batch_senders, this)\n                }\n            );\n        }, this);\n        var batcher_configs = this.get_batcher_configs();\n        this.request_batchers = {\n            events: batcher_for(batcher_configs.events),\n            people: batcher_for(batcher_configs.people),\n            groups: batcher_for(batcher_configs.groups)\n        };\n    }\n    if (this.get_config('batch_autostart')) {\n        this.start_batch_senders();\n    }\n};\n\nMixpanelLib.prototype.start_batch_senders = function() {\n    this._batchers_were_started = true;\n    if (this.are_batchers_initialized()) {\n        this._batch_requests = true;\n        _.each(this.request_batchers, function(batcher) {\n            batcher.start();\n        });\n    }\n};\n\nMixpanelLib.prototype.stop_batch_senders = function() {\n    this._batch_requests = false;\n    _.each(this.request_batchers, function(batcher) {\n        batcher.stop();\n        batcher.clear();\n    });\n};\n\n/**\n * push() keeps the standard async-array-push\n * behavior around after the lib is loaded.\n * This is only useful for external integrations that\n * do not wish to rely on our convenience methods\n * (created in the snippet).\n *\n * ### Usage:\n *     mixpanel.push(['register', { a: 'b' }]);\n *\n * @param {Array} item A [function_name, args...] array to be executed\n */\nMixpanelLib.prototype.push = function(item) {\n    this._execute_array([item]);\n};\n\n/**\n * Disable events on the Mixpanel object. If passed no arguments,\n * this function disables tracking of any event. If passed an\n * array of event names, those events will be disabled, but other\n * events will continue to be tracked.\n *\n * Note: this function does not stop other mixpanel functions from\n * firing, such as register() or people.set().\n *\n * @param {Array} [events] An array of event names to disable\n */\nMixpanelLib.prototype.disable = function(events) {\n    if (typeof(events) === 'undefined') {\n        this._flags.disable_all_events = true;\n    } else {\n        this.__disabled_events = this.__disabled_events.concat(events);\n    }\n};\n\nMixpanelLib.prototype._encode_data_for_request = function(data) {\n    var encoded_data = _.JSONEncode(data);\n    if (this.get_config('api_payload_format') === PAYLOAD_TYPE_BASE64) {\n        encoded_data = _.base64Encode(encoded_data);\n    }\n    return {'data': encoded_data};\n};\n\n// internal method for handling track vs batch-enqueue logic\nMixpanelLib.prototype._track_or_batch = function(options, callback) {\n    var truncated_data = _.truncate(options.data, 255);\n    var endpoint = options.endpoint;\n    var batcher = options.batcher;\n    var should_send_immediately = options.should_send_immediately;\n    var send_request_options = options.send_request_options || {};\n    callback = callback || NOOP_FUNC;\n\n    var request_enqueued_or_initiated = true;\n    var send_request_immediately = _.bind(function() {\n        if (!send_request_options.skip_hooks) {\n            truncated_data = this._run_hook('before_send_' + options.type, truncated_data);\n        }\n        if (truncated_data) {\n            console.log('MIXPANEL REQUEST:');\n            console.log(truncated_data);\n            return this._send_request(\n                endpoint,\n                this._encode_data_for_request(truncated_data),\n                send_request_options,\n                this._prepare_callback(callback, truncated_data)\n            );\n        } else {\n            return null;\n        }\n    }, this);\n\n    if (this._batch_requests && !should_send_immediately) {\n        batcher.enqueue(truncated_data, function(succeeded) {\n            if (succeeded) {\n                callback(1, truncated_data);\n            } else {\n                send_request_immediately();\n            }\n        });\n    } else {\n        request_enqueued_or_initiated = send_request_immediately();\n    }\n\n    return request_enqueued_or_initiated && truncated_data;\n};\n\n/**\n * Track an event. This is the most important and\n * frequently used Mixpanel function.\n *\n * ### Usage:\n *\n *     // track an event named 'Registered'\n *     mixpanel.track('Registered', {'Gender': 'Male', 'Age': 21});\n *\n *     // track an event using navigator.sendBeacon\n *     mixpanel.track('Left page', {'duration_seconds': 35}, {transport: 'sendBeacon'});\n *\n * To track link clicks or form submissions, see track_links() or track_forms().\n *\n * @param {String} event_name The name of the event. This can be anything the user does - 'Button Click', 'Sign Up', 'Item Purchased', etc.\n * @param {Object} [properties] A set of properties to include with the event you're sending. These describe the user who did the event or details about the event itself.\n * @param {Object} [options] Optional configuration for this track request.\n * @param {String} [options.transport] Transport method for network request ('xhr' or 'sendBeacon').\n * @param {Boolean} [options.send_immediately] Whether to bypass batching/queueing and send track request immediately.\n * @param {Function} [callback] If provided, the callback function will be called after tracking the event.\n * @returns {Boolean|Object} If the tracking request was successfully initiated/queued, an object\n * with the tracking payload sent to the API server is returned; otherwise false.\n */\nMixpanelLib.prototype.track = addOptOutCheckMixpanelLib(function(event_name, properties, options, callback) {\n    if (!callback && typeof options === 'function') {\n        callback = options;\n        options = null;\n    }\n    options = options || {};\n    var transport = options['transport']; // external API, don't minify 'transport' prop\n    if (transport) {\n        options.transport = transport; // 'transport' prop name can be minified internally\n    }\n    var should_send_immediately = options['send_immediately'];\n    if (typeof callback !== 'function') {\n        callback = NOOP_FUNC;\n    }\n\n    if (_.isUndefined(event_name)) {\n        this.report_error('No event name provided to mixpanel.track');\n        return;\n    }\n\n    if (this._event_is_disabled(event_name)) {\n        callback(0);\n        return;\n    }\n\n    // set defaults\n    properties = _.extend({}, properties);\n    properties['token'] = this.get_config('token');\n\n    // set $duration if time_event was previously called for this event\n    var start_timestamp = this['persistence'].remove_event_timer(event_name);\n    if (!_.isUndefined(start_timestamp)) {\n        var duration_in_ms = new Date().getTime() - start_timestamp;\n        properties['$duration'] = parseFloat((duration_in_ms / 1000).toFixed(3));\n    }\n\n    this._set_default_superprops();\n\n    var marketing_properties = this.get_config('track_marketing')\n        ? _.info.marketingParams()\n        : {};\n\n    // note: extend writes to the first object, so lets make sure we\n    // don't write to the persistence properties object and info\n    // properties object by passing in a new object\n\n    // update properties with pageview info and super-properties\n    properties = _.extend(\n        {},\n        _.info.properties(),\n        marketing_properties,\n        this['persistence'].properties(),\n        this.unpersisted_superprops,\n        properties\n    );\n\n    var property_blacklist = this.get_config('property_blacklist');\n    if (_.isArray(property_blacklist)) {\n        _.each(property_blacklist, function(blacklisted_prop) {\n            delete properties[blacklisted_prop];\n        });\n    } else {\n        this.report_error('Invalid value for property_blacklist config: ' + property_blacklist);\n    }\n\n    var data = {\n        'event': event_name,\n        'properties': properties\n    };\n    var ret = this._track_or_batch({\n        type: 'events',\n        data: data,\n        endpoint: this.get_config('api_host') + '/' + this.get_config('api_routes')['track'],\n        batcher: this.request_batchers.events,\n        should_send_immediately: should_send_immediately,\n        send_request_options: options\n    }, callback);\n\n    return ret;\n});\n\n/**\n * Register the current user into one/many groups.\n *\n * ### Usage:\n *\n *      mixpanel.set_group('company', ['mixpanel', 'google']) // an array of IDs\n *      mixpanel.set_group('company', 'mixpanel')\n *      mixpanel.set_group('company', 128746312)\n *\n * @param {String} group_key Group key\n * @param {Array|String|Number} group_ids An array of group IDs, or a singular group ID\n * @param {Function} [callback] If provided, the callback will be called after tracking the event.\n *\n */\nMixpanelLib.prototype.set_group = addOptOutCheckMixpanelLib(function(group_key, group_ids, callback) {\n    if (!_.isArray(group_ids)) {\n        group_ids = [group_ids];\n    }\n    var prop = {};\n    prop[group_key] = group_ids;\n    this.register(prop);\n    return this['people'].set(group_key, group_ids, callback);\n});\n\n/**\n * Add a new group for this user.\n *\n * ### Usage:\n *\n *      mixpanel.add_group('company', 'mixpanel')\n *\n * @param {String} group_key Group key\n * @param {*} group_id A valid Mixpanel property type\n * @param {Function} [callback] If provided, the callback will be called after tracking the event.\n */\nMixpanelLib.prototype.add_group = addOptOutCheckMixpanelLib(function(group_key, group_id, callback) {\n    var old_values = this.get_property(group_key);\n    var prop = {};\n    if (old_values === undefined) {\n        prop[group_key] = [group_id];\n        this.register(prop);\n    } else {\n        if (old_values.indexOf(group_id) === -1) {\n            old_values.push(group_id);\n            prop[group_key] = old_values;\n            this.register(prop);\n        }\n    }\n    return this['people'].union(group_key, group_id, callback);\n});\n\n/**\n * Remove a group from this user.\n *\n * ### Usage:\n *\n *      mixpanel.remove_group('company', 'mixpanel')\n *\n * @param {String} group_key Group key\n * @param {*} group_id A valid Mixpanel property type\n * @param {Function} [callback] If provided, the callback will be called after tracking the event.\n */\nMixpanelLib.prototype.remove_group = addOptOutCheckMixpanelLib(function(group_key, group_id, callback) {\n    var old_value = this.get_property(group_key);\n    // if the value doesn't exist, the persistent store is unchanged\n    if (old_value !== undefined) {\n        var idx = old_value.indexOf(group_id);\n        if (idx > -1) {\n            old_value.splice(idx, 1);\n            this.register({group_key: old_value});\n        }\n        if (old_value.length === 0) {\n            this.unregister(group_key);\n        }\n    }\n    return this['people'].remove(group_key, group_id, callback);\n});\n\n/**\n * Track an event with specific groups.\n *\n * ### Usage:\n *\n *      mixpanel.track_with_groups('purchase', {'product': 'iphone'}, {'University': ['UCB', 'UCLA']})\n *\n * @param {String} event_name The name of the event (see `mixpanel.track()`)\n * @param {Object=} properties A set of properties to include with the event you're sending (see `mixpanel.track()`)\n * @param {Object=} groups An object mapping group name keys to one or more values\n * @param {Function} [callback] If provided, the callback will be called after tracking the event.\n */\nMixpanelLib.prototype.track_with_groups = addOptOutCheckMixpanelLib(function(event_name, properties, groups, callback) {\n    var tracking_props = _.extend({}, properties || {});\n    _.each(groups, function(v, k) {\n        if (v !== null && v !== undefined) {\n            tracking_props[k] = v;\n        }\n    });\n    return this.track(event_name, tracking_props, callback);\n});\n\nMixpanelLib.prototype._create_map_key = function (group_key, group_id) {\n    return group_key + '_' + JSON.stringify(group_id);\n};\n\nMixpanelLib.prototype._remove_group_from_cache = function (group_key, group_id) {\n    delete this._cached_groups[this._create_map_key(group_key, group_id)];\n};\n\n/**\n * Look up reference to a Mixpanel group\n *\n * ### Usage:\n *\n *       mixpanel.get_group(group_key, group_id)\n *\n * @param {String} group_key Group key\n * @param {Object} group_id A valid Mixpanel property type\n * @returns {Object} A MixpanelGroup identifier\n */\nMixpanelLib.prototype.get_group = function (group_key, group_id) {\n    var map_key = this._create_map_key(group_key, group_id);\n    var group = this._cached_groups[map_key];\n    if (group === undefined || group._group_key !== group_key || group._group_id !== group_id) {\n        group = new MixpanelGroup();\n        group._init(this, group_key, group_id);\n        this._cached_groups[map_key] = group;\n    }\n    return group;\n};\n\n/**\n * Track a default Mixpanel page view event, which includes extra default event properties to\n * improve page view data. The `config.track_pageview` option for <a href=\"#mixpanelinit\">mixpanel.init()</a>\n * may be turned on for tracking page loads automatically.\n *\n * ### Usage\n *\n *     // track a default $mp_web_page_view event\n *     mixpanel.track_pageview();\n *\n *     // track a page view event with additional event properties\n *     mixpanel.track_pageview({'ab_test_variant': 'card-layout-b'});\n *\n *     // example approach to track page views on different page types as event properties\n *     mixpanel.track_pageview({'page': 'pricing'});\n *     mixpanel.track_pageview({'page': 'homepage'});\n *\n *     // UNCOMMON: Tracking a page view event with a custom event_name option. NOT expected to be used for\n *     // individual pages on the same site or product. Use cases for custom event_name may be page\n *     // views on different products or internal applications that are considered completely separate\n *     mixpanel.track_pageview({'page': 'customer-search'}, {'event_name': '[internal] Admin Page View'});\n *\n * @param {Object} [properties] An optional set of additional properties to send with the page view event\n * @param {Object} [options] Page view tracking options\n * @param {String} [options.event_name] - Alternate name for the tracking event\n * @returns {Boolean|Object} If the tracking request was successfully initiated/queued, an object\n * with the tracking payload sent to the API server is returned; otherwise false.\n */\nMixpanelLib.prototype.track_pageview = addOptOutCheckMixpanelLib(function(properties, options) {\n    if (typeof properties !== 'object') {\n        properties = {};\n    }\n    options = options || {};\n    var event_name = options['event_name'] || '$mp_web_page_view';\n\n    var default_page_properties = _.extend(\n        _.info.mpPageViewProperties(),\n        _.info.campaignParams(),\n        _.info.clickParams()\n    );\n\n    var event_properties = _.extend(\n        {},\n        default_page_properties,\n        properties\n    );\n\n    return this.track(event_name, event_properties);\n});\n\n/**\n * Track clicks on a set of document elements. Selector must be a\n * valid query. Elements must exist on the page at the time track_links is called.\n *\n * ### Usage:\n *\n *     // track click for link id #nav\n *     mixpanel.track_links('#nav', 'Clicked Nav Link');\n *\n * ### Notes:\n *\n * This function will wait up to 300 ms for the Mixpanel\n * servers to respond. If they have not responded by that time\n * it will head to the link without ensuring that your event\n * has been tracked.  To configure this timeout please see the\n * set_config() documentation below.\n *\n * If you pass a function in as the properties argument, the\n * function will receive the DOMElement that triggered the\n * event as an argument.  You are expected to return an object\n * from the function; any properties defined on this object\n * will be sent to mixpanel as event properties.\n *\n * @type {Function}\n * @param {Object|String} query A valid DOM query, element or jQuery-esque list\n * @param {String} event_name The name of the event to track\n * @param {Object|Function} [properties] A properties object or function that returns a dictionary of properties when passed a DOMElement\n */\nMixpanelLib.prototype.track_links = function() {\n    return this._track_dom.call(this, LinkTracker, arguments);\n};\n\n/**\n * Track form submissions. Selector must be a valid query.\n *\n * ### Usage:\n *\n *     // track submission for form id 'register'\n *     mixpanel.track_forms('#register', 'Created Account');\n *\n * ### Notes:\n *\n * This function will wait up to 300 ms for the mixpanel\n * servers to respond, if they have not responded by that time\n * it will head to the link without ensuring that your event\n * has been tracked.  To configure this timeout please see the\n * set_config() documentation below.\n *\n * If you pass a function in as the properties argument, the\n * function will receive the DOMElement that triggered the\n * event as an argument.  You are expected to return an object\n * from the function; any properties defined on this object\n * will be sent to mixpanel as event properties.\n *\n * @type {Function}\n * @param {Object|String} query A valid DOM query, element or jQuery-esque list\n * @param {String} event_name The name of the event to track\n * @param {Object|Function} [properties] This can be a set of properties, or a function that returns a set of properties after being passed a DOMElement\n */\nMixpanelLib.prototype.track_forms = function() {\n    return this._track_dom.call(this, FormTracker, arguments);\n};\n\n/**\n * Time an event by including the time between this call and a\n * later 'track' call for the same event in the properties sent\n * with the event.\n *\n * ### Usage:\n *\n *     // time an event named 'Registered'\n *     mixpanel.time_event('Registered');\n *     mixpanel.track('Registered', {'Gender': 'Male', 'Age': 21});\n *\n * When called for a particular event name, the next track call for that event\n * name will include the elapsed time between the 'time_event' and 'track'\n * calls. This value is stored as seconds in the '$duration' property.\n *\n * @param {String} event_name The name of the event.\n */\nMixpanelLib.prototype.time_event = function(event_name) {\n    if (_.isUndefined(event_name)) {\n        this.report_error('No event name provided to mixpanel.time_event');\n        return;\n    }\n\n    if (this._event_is_disabled(event_name)) {\n        return;\n    }\n\n    this['persistence'].set_event_timer(event_name,  new Date().getTime());\n};\n\nvar REGISTER_DEFAULTS = {\n    'persistent': true\n};\n/**\n * Helper to parse options param for register methods, maintaining\n * legacy support for plain \"days\" param instead of options object\n * @param {Number|Object} [days_or_options] 'days' option (Number), or Options object for register methods\n * @returns {Object} options object\n */\nvar options_for_register = function(days_or_options) {\n    var options;\n    if (_.isObject(days_or_options)) {\n        options = days_or_options;\n    } else if (!_.isUndefined(days_or_options)) {\n        options = {'days': days_or_options};\n    } else {\n        options = {};\n    }\n    return _.extend({}, REGISTER_DEFAULTS, options);\n};\n\n/**\n * Register a set of super properties, which are included with all\n * events. This will overwrite previous super property values.\n *\n * ### Usage:\n *\n *     // register 'Gender' as a super property\n *     mixpanel.register({'Gender': 'Female'});\n *\n *     // register several super properties when a user signs up\n *     mixpanel.register({\n *         'Email': 'jdoe@example.com',\n *         'Account Type': 'Free'\n *     });\n *\n *     // register only for the current pageload\n *     mixpanel.register({'Name': 'Pat'}, {persistent: false});\n *\n * @param {Object} properties An associative array of properties to store about the user\n * @param {Number|Object} [days_or_options] Options object or number of days since the user's last visit to store the super properties (only valid for persisted props)\n * @param {boolean} [days_or_options.days] - number of days since the user's last visit to store the super properties (only valid for persisted props)\n * @param {boolean} [days_or_options.persistent=true] - whether to put in persistent storage (cookie/localStorage)\n */\nMixpanelLib.prototype.register = function(props, days_or_options) {\n    var options = options_for_register(days_or_options);\n    if (options['persistent']) {\n        this['persistence'].register(props, options['days']);\n    } else {\n        _.extend(this.unpersisted_superprops, props);\n    }\n};\n\n/**\n * Register a set of super properties only once. This will not\n * overwrite previous super property values, unlike register().\n *\n * ### Usage:\n *\n *     // register a super property for the first time only\n *     mixpanel.register_once({\n *         'First Login Date': new Date().toISOString()\n *     });\n *\n *     // register once, only for the current pageload\n *     mixpanel.register_once({\n *         'First interaction time': new Date().toISOString()\n *     }, 'None', {persistent: false});\n *\n * ### Notes:\n *\n * If default_value is specified, current super properties\n * with that value will be overwritten.\n *\n * @param {Object} properties An associative array of properties to store about the user\n * @param {*} [default_value] Value to override if already set in super properties (ex: 'False') Default: 'None'\n * @param {Number|Object} [days_or_options] Options object or number of days since the user's last visit to store the super properties (only valid for persisted props)\n * @param {boolean} [days_or_options.days] - number of days since the user's last visit to store the super properties (only valid for persisted props)\n * @param {boolean} [days_or_options.persistent=true] - whether to put in persistent storage (cookie/localStorage)\n */\nMixpanelLib.prototype.register_once = function(props, default_value, days_or_options) {\n    var options = options_for_register(days_or_options);\n    if (options['persistent']) {\n        this['persistence'].register_once(props, default_value, options['days']);\n    } else {\n        if (typeof(default_value) === 'undefined') {\n            default_value = 'None';\n        }\n        _.each(props, function(val, prop) {\n            if (!this.unpersisted_superprops.hasOwnProperty(prop) || this.unpersisted_superprops[prop] === default_value) {\n                this.unpersisted_superprops[prop] = val;\n            }\n        }, this);\n    }\n};\n\n/**\n * Delete a super property stored with the current user.\n *\n * @param {String} property The name of the super property to remove\n * @param {Object} [options]\n * @param {boolean} [options.persistent=true] - whether to look in persistent storage (cookie/localStorage)\n */\nMixpanelLib.prototype.unregister = function(property, options) {\n    options = options_for_register(options);\n    if (options['persistent']) {\n        this['persistence'].unregister(property);\n    } else {\n        delete this.unpersisted_superprops[property];\n    }\n};\n\nMixpanelLib.prototype._register_single = function(prop, value) {\n    var props = {};\n    props[prop] = value;\n    this.register(props);\n};\n\n/**\n * Identify a user with a unique ID to track user activity across\n * devices, tie a user to their events, and create a user profile.\n * If you never call this method, unique visitors are tracked using\n * a UUID generated the first time they visit the site.\n *\n * Call identify when you know the identity of the current user,\n * typically after login or signup. We recommend against using\n * identify for anonymous visitors to your site.\n *\n * ### Notes:\n * If your project has\n * <a href=\"https://help.mixpanel.com/hc/en-us/articles/360039133851\">ID Merge</a>\n * enabled, the identify method will connect pre- and\n * post-authentication events when appropriate.\n *\n * If your project does not have ID Merge enabled, identify will\n * change the user's local distinct_id to the unique ID you pass.\n * Events tracked prior to authentication will not be connected\n * to the same user identity. If ID Merge is disabled, alias can\n * be used to connect pre- and post-registration events.\n *\n * @param {String} [unique_id] A string that uniquely identifies a user. If not provided, the distinct_id currently in the persistent store (cookie or localStorage) will be used.\n */\nMixpanelLib.prototype.identify = function(\n    new_distinct_id, _set_callback, _add_callback, _append_callback, _set_once_callback, _union_callback, _unset_callback, _remove_callback\n) {\n    // Optional Parameters\n    //  _set_callback:function  A callback to be run if and when the People set queue is flushed\n    //  _add_callback:function  A callback to be run if and when the People add queue is flushed\n    //  _append_callback:function  A callback to be run if and when the People append queue is flushed\n    //  _set_once_callback:function  A callback to be run if and when the People set_once queue is flushed\n    //  _union_callback:function  A callback to be run if and when the People union queue is flushed\n    //  _unset_callback:function  A callback to be run if and when the People unset queue is flushed\n\n    var previous_distinct_id = this.get_distinct_id();\n    if (new_distinct_id && previous_distinct_id !== new_distinct_id) {\n        // we allow the following condition if previous distinct_id is same as new_distinct_id\n        // so that you can force flush people updates for anonymous profiles.\n        if (typeof new_distinct_id === 'string' && new_distinct_id.indexOf(DEVICE_ID_PREFIX) === 0) {\n            this.report_error('distinct_id cannot have $device: prefix');\n            return -1;\n        }\n        this.register({'$user_id': new_distinct_id});\n    }\n\n    if (!this.get_property('$device_id')) {\n        // The persisted distinct id might not actually be a device id at all\n        // it might be a distinct id of the user from before\n        var device_id = previous_distinct_id;\n        this.register_once({\n            '$had_persisted_distinct_id': true,\n            '$device_id': device_id\n        }, '');\n    }\n\n    // identify only changes the distinct id if it doesn't match either the existing or the alias;\n    // if it's new, blow away the alias as well.\n    if (new_distinct_id !== previous_distinct_id && new_distinct_id !== this.get_property(ALIAS_ID_KEY)) {\n        this.unregister(ALIAS_ID_KEY);\n        this.register({'distinct_id': new_distinct_id});\n    }\n    this._flags.identify_called = true;\n    // Flush any queued up people requests\n    this['people']._flush(_set_callback, _add_callback, _append_callback, _set_once_callback, _union_callback, _unset_callback, _remove_callback);\n\n    // send an $identify event any time the distinct_id is changing - logic on the server\n    // will determine whether or not to do anything with it.\n    if (new_distinct_id !== previous_distinct_id) {\n        this.track('$identify', {\n            'distinct_id': new_distinct_id,\n            '$anon_distinct_id': previous_distinct_id\n        }, {skip_hooks: true});\n    }\n};\n\n/**\n * Clears super properties and generates a new random distinct_id for this instance.\n * Useful for clearing data when a user logs out.\n */\nMixpanelLib.prototype.reset = function() {\n    this['persistence'].clear();\n    this._flags.identify_called = false;\n    var uuid = _.UUID();\n    this.register_once({\n        'distinct_id': DEVICE_ID_PREFIX + uuid,\n        '$device_id': uuid\n    }, '');\n};\n\n/**\n * Returns the current distinct id of the user. This is either the id automatically\n * generated by the library or the id that has been passed by a call to identify().\n *\n * ### Notes:\n *\n * get_distinct_id() can only be called after the Mixpanel library has finished loading.\n * init() has a loaded function available to handle this automatically. For example:\n *\n *     // set distinct_id after the mixpanel library has loaded\n *     mixpanel.init('YOUR PROJECT TOKEN', {\n *         loaded: function(mixpanel) {\n *             distinct_id = mixpanel.get_distinct_id();\n *         }\n *     });\n */\nMixpanelLib.prototype.get_distinct_id = function() {\n    return this.get_property('distinct_id');\n};\n\n/**\n * The alias method creates an alias which Mixpanel will use to\n * remap one id to another. Multiple aliases can point to the\n * same identifier.\n *\n * The following is a valid use of alias:\n *\n *     mixpanel.alias('new_id', 'existing_id');\n *     // You can add multiple id aliases to the existing ID\n *     mixpanel.alias('newer_id', 'existing_id');\n *\n * Aliases can also be chained - the following is a valid example:\n *\n *     mixpanel.alias('new_id', 'existing_id');\n *     // chain newer_id - new_id - existing_id\n *     mixpanel.alias('newer_id', 'new_id');\n *\n * Aliases cannot point to multiple identifiers - the following\n * example will not work:\n *\n *     mixpanel.alias('new_id', 'existing_id');\n *     // this is invalid as 'new_id' already points to 'existing_id'\n *     mixpanel.alias('new_id', 'newer_id');\n *\n * ### Notes:\n *\n * If your project does not have\n * <a href=\"https://help.mixpanel.com/hc/en-us/articles/360039133851\">ID Merge</a>\n * enabled, the best practice is to call alias once when a unique\n * ID is first created for a user (e.g., when a user first registers\n * for an account). Do not use alias multiple times for a single\n * user without ID Merge enabled.\n *\n * @param {String} alias A unique identifier that you want to use for this user in the future.\n * @param {String} [original] The current identifier being used for this user.\n */\nMixpanelLib.prototype.alias = function(alias, original) {\n    // If the $people_distinct_id key exists in persistence, there has been a previous\n    // mixpanel.people.identify() call made for this user. It is VERY BAD to make an alias with\n    // this ID, as it will duplicate users.\n    if (alias === this.get_property(PEOPLE_DISTINCT_ID_KEY)) {\n        this.report_error('Attempting to create alias for existing People user - aborting.');\n        return -2;\n    }\n\n    var _this = this;\n    if (_.isUndefined(original)) {\n        original = this.get_distinct_id();\n    }\n    if (alias !== original) {\n        this._register_single(ALIAS_ID_KEY, alias);\n        return this.track('$create_alias', {\n            'alias': alias,\n            'distinct_id': original\n        }, {\n            skip_hooks: true\n        }, function() {\n            // Flush the people queue\n            _this.identify(alias);\n        });\n    } else {\n        this.report_error('alias matches current distinct_id - skipping api call.');\n        this.identify(alias);\n        return -1;\n    }\n};\n\n/**\n * Provide a string to recognize the user by. The string passed to\n * this method will appear in the Mixpanel Streams product rather\n * than an automatically generated name. Name tags do not have to\n * be unique.\n *\n * This value will only be included in Streams data.\n *\n * @param {String} name_tag A human readable name for the user\n * @deprecated\n */\nMixpanelLib.prototype.name_tag = function(name_tag) {\n    this._register_single('mp_name_tag', name_tag);\n};\n\n/**\n * Update the configuration of a mixpanel library instance.\n *\n * The default config is:\n *\n *     {\n *       // host for requests (customizable for e.g. a local proxy)\n *       api_host: 'https://api-js.mixpanel.com',\n *\n *       // endpoints for different types of requests\n *       api_routes: {\n *         track: 'track/',\n *         engage: 'engage/',\n *         groups: 'groups/',\n *       }\n *\n *       // HTTP method for tracking requests\n *       api_method: 'POST'\n *\n *       // transport for sending requests ('XHR' or 'sendBeacon')\n *       // NB: sendBeacon should only be used for scenarios such as\n *       // page unload where a \"best-effort\" attempt to send is\n *       // acceptable; the sendBeacon API does not support callbacks\n *       // or any way to know the result of the request. Mixpanel\n *       // tracking via sendBeacon will not support any event-\n *       // batching or retry mechanisms.\n *       api_transport: 'XHR'\n *\n *       // request-batching/queueing/retry\n *       batch_requests: true,\n *\n *       // maximum number of events/updates to send in a single\n *       // network request\n *       batch_size: 50,\n *\n *       // milliseconds to wait between sending batch requests\n *       batch_flush_interval_ms: 5000,\n *\n *       // milliseconds to wait for network responses to batch requests\n *       // before they are considered timed-out and retried\n *       batch_request_timeout_ms: 90000,\n *\n *       // override value for cookie domain, only useful for ensuring\n *       // correct cross-subdomain cookies on unusual domains like\n *       // subdomain.mainsite.avocat.fr; NB this cannot be used to\n *       // set cookies on a different domain than the current origin\n *       cookie_domain: ''\n *\n *       // super properties cookie expiration (in days)\n *       cookie_expiration: 365\n *\n *       // if true, cookie will be set with SameSite=None; Secure\n *       // this is only useful in special situations, like embedded\n *       // 3rd-party iframes that set up a Mixpanel instance\n *       cross_site_cookie: false\n *\n *       // super properties span subdomains\n *       cross_subdomain_cookie: true\n *\n *       // debug mode\n *       debug: false\n *\n *       // if this is true, the mixpanel cookie or localStorage entry\n *       // will be deleted, and no user persistence will take place\n *       disable_persistence: false\n *\n *       // if this is true, Mixpanel will automatically determine\n *       // City, Region and Country data using the IP address of\n *       //the client\n *       ip: true\n *\n *       // opt users out of tracking by this Mixpanel instance by default\n *       opt_out_tracking_by_default: false\n *\n *       // opt users out of browser data storage by this Mixpanel instance by default\n *       opt_out_persistence_by_default: false\n *\n *       // persistence mechanism used by opt-in/opt-out methods - cookie\n *       // or localStorage - falls back to cookie if localStorage is unavailable\n *       opt_out_tracking_persistence_type: 'localStorage'\n *\n *       // customize the name of cookie/localStorage set by opt-in/opt-out methods\n *       opt_out_tracking_cookie_prefix: null\n *\n *       // type of persistent store for super properties (cookie/\n *       // localStorage) if set to 'localStorage', any existing\n *       // mixpanel cookie value with the same persistence_name\n *       // will be transferred to localStorage and deleted\n *       persistence: 'cookie'\n *\n *       // name for super properties persistent store\n *       persistence_name: ''\n *\n *       // names of properties/superproperties which should never\n *       // be sent with track() calls\n *       property_blacklist: []\n *\n *       // if this is true, mixpanel cookies will be marked as\n *       // secure, meaning they will only be transmitted over https\n *       secure_cookie: false\n *\n *       // disables enriching user profiles with first touch marketing data\n *       skip_first_touch_marketing: false\n *\n *       // the amount of time track_links will\n *       // wait for Mixpanel's servers to respond\n *       track_links_timeout: 300\n *\n *       // adds any UTM parameters and click IDs present on the page to any events fired\n *       track_marketing: true\n *\n *       // enables automatic page view tracking using default page view events through\n *       // the track_pageview() method\n *       track_pageview: false\n *\n *       // if you set upgrade to be true, the library will check for\n *       // a cookie from our old js library and import super\n *       // properties from it, then the old cookie is deleted\n *       // The upgrade config option only works in the initialization,\n *       // so make sure you set it when you create the library.\n *       upgrade: false\n *\n *       // extra HTTP request headers to set for each API request, in\n *       // the format {'Header-Name': value}\n *       xhr_headers: {}\n *\n *       // whether to ignore or respect the web browser's Do Not Track setting\n *       ignore_dnt: false\n *     }\n *\n *\n * @param {Object} config A dictionary of new configuration values to update\n */\nMixpanelLib.prototype.set_config = function(config) {\n    if (_.isObject(config)) {\n        _.extend(this['config'], config);\n\n        var new_batch_size = config['batch_size'];\n        if (new_batch_size) {\n            _.each(this.request_batchers, function(batcher) {\n                batcher.resetBatchSize();\n            });\n        }\n\n        if (!this.get_config('persistence_name')) {\n            this['config']['persistence_name'] = this['config']['cookie_name'];\n        }\n        if (!this.get_config('disable_persistence')) {\n            this['config']['disable_persistence'] = this['config']['disable_cookie'];\n        }\n\n        if (this['persistence']) {\n            this['persistence'].update_config(this['config']);\n        }\n        Config.DEBUG = Config.DEBUG || this.get_config('debug');\n    }\n};\n\n/**\n * returns the current config object for the library.\n */\nMixpanelLib.prototype.get_config = function(prop_name) {\n    return this['config'][prop_name];\n};\n\n/**\n * Fetch a hook function from config, with safe default, and run it\n * against the given arguments\n * @param {string} hook_name which hook to retrieve\n * @returns {any|null} return value of user-provided hook, or null if nothing was returned\n */\nMixpanelLib.prototype._run_hook = function(hook_name) {\n    var ret = (this['config']['hooks'][hook_name] || IDENTITY_FUNC).apply(this, slice.call(arguments, 1));\n    if (typeof ret === 'undefined') {\n        this.report_error(hook_name + ' hook did not return a value');\n        ret = null;\n    }\n    return ret;\n};\n\n/**\n * Returns the value of the super property named property_name. If no such\n * property is set, get_property() will return the undefined value.\n *\n * ### Notes:\n *\n * get_property() can only be called after the Mixpanel library has finished loading.\n * init() has a loaded function available to handle this automatically. For example:\n *\n *     // grab value for 'user_id' after the mixpanel library has loaded\n *     mixpanel.init('YOUR PROJECT TOKEN', {\n *         loaded: function(mixpanel) {\n *             user_id = mixpanel.get_property('user_id');\n *         }\n *     });\n *\n * @param {String} property_name The name of the super property you want to retrieve\n */\nMixpanelLib.prototype.get_property = function(property_name) {\n    return this['persistence'].load_prop([property_name]);\n};\n\nMixpanelLib.prototype.toString = function() {\n    var name = this.get_config('name');\n    if (name !== PRIMARY_INSTANCE_NAME) {\n        name = PRIMARY_INSTANCE_NAME + '.' + name;\n    }\n    return name;\n};\n\nMixpanelLib.prototype._event_is_disabled = function(event_name) {\n    return _.isBlockedUA(userAgent) ||\n        this._flags.disable_all_events ||\n        _.include(this.__disabled_events, event_name);\n};\n\n// perform some housekeeping around GDPR opt-in/out state\nMixpanelLib.prototype._gdpr_init = function() {\n    var is_localStorage_requested = this.get_config('opt_out_tracking_persistence_type') === 'localStorage';\n\n    // try to convert opt-in/out cookies to localStorage if possible\n    if (is_localStorage_requested && _.localStorage.is_supported()) {\n        if (!this.has_opted_in_tracking() && this.has_opted_in_tracking({'persistence_type': 'cookie'})) {\n            this.opt_in_tracking({'enable_persistence': false});\n        }\n        if (!this.has_opted_out_tracking() && this.has_opted_out_tracking({'persistence_type': 'cookie'})) {\n            this.opt_out_tracking({'clear_persistence': false});\n        }\n        this.clear_opt_in_out_tracking({\n            'persistence_type': 'cookie',\n            'enable_persistence': false\n        });\n    }\n\n    // check whether the user has already opted out - if so, clear & disable persistence\n    if (this.has_opted_out_tracking()) {\n        this._gdpr_update_persistence({'clear_persistence': true});\n\n    // check whether we should opt out by default\n    // note: we don't clear persistence here by default since opt-out default state is often\n    //       used as an initial state while GDPR information is being collected\n    } else if (!this.has_opted_in_tracking() && (\n        this.get_config('opt_out_tracking_by_default') || _.cookie.get('mp_optout')\n    )) {\n        _.cookie.remove('mp_optout');\n        this.opt_out_tracking({\n            'clear_persistence': this.get_config('opt_out_persistence_by_default')\n        });\n    }\n};\n\n/**\n * Enable or disable persistence based on options\n * only enable/disable if persistence is not already in this state\n * @param {boolean} [options.clear_persistence] If true, will delete all data stored by the sdk in persistence and disable it\n * @param {boolean} [options.enable_persistence] If true, will re-enable sdk persistence\n */\nMixpanelLib.prototype._gdpr_update_persistence = function(options) {\n    var disabled;\n    if (options && options['clear_persistence']) {\n        disabled = true;\n    } else if (options && options['enable_persistence']) {\n        disabled = false;\n    } else {\n        return;\n    }\n\n    if (!this.get_config('disable_persistence') && this['persistence'].disabled !== disabled) {\n        this['persistence'].set_disabled(disabled);\n    }\n\n    if (disabled) {\n        this.stop_batch_senders();\n    } else {\n        // only start batchers after opt-in if they have previously been started\n        // in order to avoid unintentionally starting up batching for the first time\n        if (this._batchers_were_started) {\n            this.start_batch_senders();\n        }\n    }\n};\n\n// call a base gdpr function after constructing the appropriate token and options args\nMixpanelLib.prototype._gdpr_call_func = function(func, options) {\n    options = _.extend({\n        'track': _.bind(this.track, this),\n        'persistence_type': this.get_config('opt_out_tracking_persistence_type'),\n        'cookie_prefix': this.get_config('opt_out_tracking_cookie_prefix'),\n        'cookie_expiration': this.get_config('cookie_expiration'),\n        'cross_site_cookie': this.get_config('cross_site_cookie'),\n        'cross_subdomain_cookie': this.get_config('cross_subdomain_cookie'),\n        'cookie_domain': this.get_config('cookie_domain'),\n        'secure_cookie': this.get_config('secure_cookie'),\n        'ignore_dnt': this.get_config('ignore_dnt')\n    }, options);\n\n    // check if localStorage can be used for recording opt out status, fall back to cookie if not\n    if (!_.localStorage.is_supported()) {\n        options['persistence_type'] = 'cookie';\n    }\n\n    return func(this.get_config('token'), {\n        track: options['track'],\n        trackEventName: options['track_event_name'],\n        trackProperties: options['track_properties'],\n        persistenceType: options['persistence_type'],\n        persistencePrefix: options['cookie_prefix'],\n        cookieDomain: options['cookie_domain'],\n        cookieExpiration: options['cookie_expiration'],\n        crossSiteCookie: options['cross_site_cookie'],\n        crossSubdomainCookie: options['cross_subdomain_cookie'],\n        secureCookie: options['secure_cookie'],\n        ignoreDnt: options['ignore_dnt']\n    });\n};\n\n/**\n * Opt the user in to data tracking and cookies/localstorage for this Mixpanel instance\n *\n * ### Usage\n *\n *     // opt user in\n *     mixpanel.opt_in_tracking();\n *\n *     // opt user in with specific event name, properties, cookie configuration\n *     mixpanel.opt_in_tracking({\n *         track_event_name: 'User opted in',\n *         track_event_properties: {\n *             'Email': 'jdoe@example.com'\n *         },\n *         cookie_expiration: 30,\n *         secure_cookie: true\n *     });\n *\n * @param {Object} [options] A dictionary of config options to override\n * @param {function} [options.track] Function used for tracking a Mixpanel event to record the opt-in action (default is this Mixpanel instance's track method)\n * @param {string} [options.track_event_name=$opt_in] Event name to be used for tracking the opt-in action\n * @param {Object} [options.track_properties] Set of properties to be tracked along with the opt-in action\n * @param {boolean} [options.enable_persistence=true] If true, will re-enable sdk persistence\n * @param {string} [options.persistence_type=localStorage] Persistence mechanism used - cookie or localStorage - falls back to cookie if localStorage is unavailable\n * @param {string} [options.cookie_prefix=__mp_opt_in_out] Custom prefix to be used in the cookie/localstorage name\n * @param {Number} [options.cookie_expiration] Number of days until the opt-in cookie expires (overrides value specified in this Mixpanel instance's config)\n * @param {string} [options.cookie_domain] Custom cookie domain (overrides value specified in this Mixpanel instance's config)\n * @param {boolean} [options.cross_site_cookie] Whether the opt-in cookie is set as cross-site-enabled (overrides value specified in this Mixpanel instance's config)\n * @param {boolean} [options.cross_subdomain_cookie] Whether the opt-in cookie is set as cross-subdomain or not (overrides value specified in this Mixpanel instance's config)\n * @param {boolean} [options.secure_cookie] Whether the opt-in cookie is set as secure or not (overrides value specified in this Mixpanel instance's config)\n */\nMixpanelLib.prototype.opt_in_tracking = function(options) {\n    options = _.extend({\n        'enable_persistence': true\n    }, options);\n\n    this._gdpr_call_func(optIn, options);\n    this._gdpr_update_persistence(options);\n};\n\n/**\n * Opt the user out of data tracking and cookies/localstorage for this Mixpanel instance\n *\n * ### Usage\n *\n *     // opt user out\n *     mixpanel.opt_out_tracking();\n *\n *     // opt user out with different cookie configuration from Mixpanel instance\n *     mixpanel.opt_out_tracking({\n *         cookie_expiration: 30,\n *         secure_cookie: true\n *     });\n *\n * @param {Object} [options] A dictionary of config options to override\n * @param {boolean} [options.delete_user=true] If true, will delete the currently identified user's profile and clear all charges after opting the user out\n * @param {boolean} [options.clear_persistence=true] If true, will delete all data stored by the sdk in persistence\n * @param {string} [options.persistence_type=localStorage] Persistence mechanism used - cookie or localStorage - falls back to cookie if localStorage is unavailable\n * @param {string} [options.cookie_prefix=__mp_opt_in_out] Custom prefix to be used in the cookie/localstorage name\n * @param {Number} [options.cookie_expiration] Number of days until the opt-in cookie expires (overrides value specified in this Mixpanel instance's config)\n * @param {string} [options.cookie_domain] Custom cookie domain (overrides value specified in this Mixpanel instance's config)\n * @param {boolean} [options.cross_site_cookie] Whether the opt-in cookie is set as cross-site-enabled (overrides value specified in this Mixpanel instance's config)\n * @param {boolean} [options.cross_subdomain_cookie] Whether the opt-in cookie is set as cross-subdomain or not (overrides value specified in this Mixpanel instance's config)\n * @param {boolean} [options.secure_cookie] Whether the opt-in cookie is set as secure or not (overrides value specified in this Mixpanel instance's config)\n */\nMixpanelLib.prototype.opt_out_tracking = function(options) {\n    options = _.extend({\n        'clear_persistence': true,\n        'delete_user': true\n    }, options);\n\n    // delete user and clear charges since these methods may be disabled by opt-out\n    if (options['delete_user'] && this['people'] && this['people']._identify_called()) {\n        this['people'].delete_user();\n        this['people'].clear_charges();\n    }\n\n    this._gdpr_call_func(optOut, options);\n    this._gdpr_update_persistence(options);\n};\n\n/**\n * Check whether the user has opted in to data tracking and cookies/localstorage for this Mixpanel instance\n *\n * ### Usage\n *\n *     var has_opted_in = mixpanel.has_opted_in_tracking();\n *     // use has_opted_in value\n *\n * @param {Object} [options] A dictionary of config options to override\n * @param {string} [options.persistence_type=localStorage] Persistence mechanism used - cookie or localStorage - falls back to cookie if localStorage is unavailable\n * @param {string} [options.cookie_prefix=__mp_opt_in_out] Custom prefix to be used in the cookie/localstorage name\n * @returns {boolean} current opt-in status\n */\nMixpanelLib.prototype.has_opted_in_tracking = function(options) {\n    return this._gdpr_call_func(hasOptedIn, options);\n};\n\n/**\n * Check whether the user has opted out of data tracking and cookies/localstorage for this Mixpanel instance\n *\n * ### Usage\n *\n *     var has_opted_out = mixpanel.has_opted_out_tracking();\n *     // use has_opted_out value\n *\n * @param {Object} [options] A dictionary of config options to override\n * @param {string} [options.persistence_type=localStorage] Persistence mechanism used - cookie or localStorage - falls back to cookie if localStorage is unavailable\n * @param {string} [options.cookie_prefix=__mp_opt_in_out] Custom prefix to be used in the cookie/localstorage name\n * @returns {boolean} current opt-out status\n */\nMixpanelLib.prototype.has_opted_out_tracking = function(options) {\n    return this._gdpr_call_func(hasOptedOut, options);\n};\n\n/**\n * Clear the user's opt in/out status of data tracking and cookies/localstorage for this Mixpanel instance\n *\n * ### Usage\n *\n *     // clear user's opt-in/out status\n *     mixpanel.clear_opt_in_out_tracking();\n *\n *     // clear user's opt-in/out status with specific cookie configuration - should match\n *     // configuration used when opt_in_tracking/opt_out_tracking methods were called.\n *     mixpanel.clear_opt_in_out_tracking({\n *         cookie_expiration: 30,\n *         secure_cookie: true\n *     });\n *\n * @param {Object} [options] A dictionary of config options to override\n * @param {boolean} [options.enable_persistence=true] If true, will re-enable sdk persistence\n * @param {string} [options.persistence_type=localStorage] Persistence mechanism used - cookie or localStorage - falls back to cookie if localStorage is unavailable\n * @param {string} [options.cookie_prefix=__mp_opt_in_out] Custom prefix to be used in the cookie/localstorage name\n * @param {Number} [options.cookie_expiration] Number of days until the opt-in cookie expires (overrides value specified in this Mixpanel instance's config)\n * @param {string} [options.cookie_domain] Custom cookie domain (overrides value specified in this Mixpanel instance's config)\n * @param {boolean} [options.cross_site_cookie] Whether the opt-in cookie is set as cross-site-enabled (overrides value specified in this Mixpanel instance's config)\n * @param {boolean} [options.cross_subdomain_cookie] Whether the opt-in cookie is set as cross-subdomain or not (overrides value specified in this Mixpanel instance's config)\n * @param {boolean} [options.secure_cookie] Whether the opt-in cookie is set as secure or not (overrides value specified in this Mixpanel instance's config)\n */\nMixpanelLib.prototype.clear_opt_in_out_tracking = function(options) {\n    options = _.extend({\n        'enable_persistence': true\n    }, options);\n\n    this._gdpr_call_func(clearOptInOut, options);\n    this._gdpr_update_persistence(options);\n};\n\nMixpanelLib.prototype.report_error = function(msg, err) {\n    console.error.apply(console.error, arguments);\n    try {\n        if (!err && !(msg instanceof Error)) {\n            msg = new Error(msg);\n        }\n        this.get_config('error_reporter')(msg, err);\n    } catch(err) {\n        console.error(err);\n    }\n};\n\n// EXPORTS (for closure compiler)\n\n// MixpanelLib Exports\nMixpanelLib.prototype['init']                      = MixpanelLib.prototype.init;\nMixpanelLib.prototype['reset']                     = MixpanelLib.prototype.reset;\nMixpanelLib.prototype['disable']                   = MixpanelLib.prototype.disable;\nMixpanelLib.prototype['time_event']                = MixpanelLib.prototype.time_event;\nMixpanelLib.prototype['track']                     = MixpanelLib.prototype.track;\nMixpanelLib.prototype['track_links']               = MixpanelLib.prototype.track_links;\nMixpanelLib.prototype['track_forms']               = MixpanelLib.prototype.track_forms;\nMixpanelLib.prototype['track_pageview']            = MixpanelLib.prototype.track_pageview;\nMixpanelLib.prototype['register']                  = MixpanelLib.prototype.register;\nMixpanelLib.prototype['register_once']             = MixpanelLib.prototype.register_once;\nMixpanelLib.prototype['unregister']                = MixpanelLib.prototype.unregister;\nMixpanelLib.prototype['identify']                  = MixpanelLib.prototype.identify;\nMixpanelLib.prototype['alias']                     = MixpanelLib.prototype.alias;\nMixpanelLib.prototype['name_tag']                  = MixpanelLib.prototype.name_tag;\nMixpanelLib.prototype['set_config']                = MixpanelLib.prototype.set_config;\nMixpanelLib.prototype['get_config']                = MixpanelLib.prototype.get_config;\nMixpanelLib.prototype['get_property']              = MixpanelLib.prototype.get_property;\nMixpanelLib.prototype['get_distinct_id']           = MixpanelLib.prototype.get_distinct_id;\nMixpanelLib.prototype['toString']                  = MixpanelLib.prototype.toString;\nMixpanelLib.prototype['opt_out_tracking']          = MixpanelLib.prototype.opt_out_tracking;\nMixpanelLib.prototype['opt_in_tracking']           = MixpanelLib.prototype.opt_in_tracking;\nMixpanelLib.prototype['has_opted_out_tracking']    = MixpanelLib.prototype.has_opted_out_tracking;\nMixpanelLib.prototype['has_opted_in_tracking']     = MixpanelLib.prototype.has_opted_in_tracking;\nMixpanelLib.prototype['clear_opt_in_out_tracking'] = MixpanelLib.prototype.clear_opt_in_out_tracking;\nMixpanelLib.prototype['get_group']                 = MixpanelLib.prototype.get_group;\nMixpanelLib.prototype['set_group']                 = MixpanelLib.prototype.set_group;\nMixpanelLib.prototype['add_group']                 = MixpanelLib.prototype.add_group;\nMixpanelLib.prototype['remove_group']              = MixpanelLib.prototype.remove_group;\nMixpanelLib.prototype['track_with_groups']         = MixpanelLib.prototype.track_with_groups;\nMixpanelLib.prototype['start_batch_senders']       = MixpanelLib.prototype.start_batch_senders;\nMixpanelLib.prototype['stop_batch_senders']        = MixpanelLib.prototype.stop_batch_senders;\nMixpanelLib.prototype['DEFAULT_API_ROUTES']        = DEFAULT_API_ROUTES;\n\n// MixpanelPersistence Exports\nMixpanelPersistence.prototype['properties']            = MixpanelPersistence.prototype.properties;\nMixpanelPersistence.prototype['update_search_keyword'] = MixpanelPersistence.prototype.update_search_keyword;\nMixpanelPersistence.prototype['update_referrer_info']  = MixpanelPersistence.prototype.update_referrer_info;\nMixpanelPersistence.prototype['get_cross_subdomain']   = MixpanelPersistence.prototype.get_cross_subdomain;\nMixpanelPersistence.prototype['clear']                 = MixpanelPersistence.prototype.clear;\n\n\nvar instances = {};\nvar extend_mp = function() {\n    // add all the sub mixpanel instances\n    _.each(instances, function(instance, name) {\n        if (name !== PRIMARY_INSTANCE_NAME) { mixpanel_master[name] = instance; }\n    });\n\n    // add private functions as _\n    mixpanel_master['_'] = _;\n};\n\nvar override_mp_init_func = function() {\n    // we override the snippets init function to handle the case where a\n    // user initializes the mixpanel library after the script loads & runs\n    mixpanel_master['init'] = function(token, config, name) {\n        if (name) {\n            // initialize a sub library\n            if (!mixpanel_master[name]) {\n                mixpanel_master[name] = instances[name] = create_mplib(token, config, name);\n                mixpanel_master[name]._loaded();\n            }\n            return mixpanel_master[name];\n        } else {\n            var instance = mixpanel_master;\n\n            if (instances[PRIMARY_INSTANCE_NAME]) {\n                // main mixpanel lib already initialized\n                instance = instances[PRIMARY_INSTANCE_NAME];\n            } else if (token) {\n                // intialize the main mixpanel lib\n                instance = create_mplib(token, config, PRIMARY_INSTANCE_NAME);\n                instance._loaded();\n                instances[PRIMARY_INSTANCE_NAME] = instance;\n            }\n\n            mixpanel_master = instance;\n            if (init_type === INIT_SNIPPET) {\n                window$1[PRIMARY_INSTANCE_NAME] = mixpanel_master;\n            }\n            extend_mp();\n        }\n    };\n};\n\nvar add_dom_loaded_handler = function() {\n    // Cross browser DOM Loaded support\n    function dom_loaded_handler() {\n        // function flag since we only want to execute this once\n        if (dom_loaded_handler.done) { return; }\n        dom_loaded_handler.done = true;\n\n        DOM_LOADED = true;\n        ENQUEUE_REQUESTS = false;\n\n        _.each(instances, function(inst) {\n            inst._dom_loaded();\n        });\n    }\n\n    function do_scroll_check() {\n        try {\n            document$1.documentElement.doScroll('left');\n        } catch(e) {\n            setTimeout(do_scroll_check, 1);\n            return;\n        }\n\n        dom_loaded_handler();\n    }\n\n    if (document$1.addEventListener) {\n        if (document$1.readyState === 'complete') {\n            // safari 4 can fire the DOMContentLoaded event before loading all\n            // external JS (including this file). you will see some copypasta\n            // on the internet that checks for 'complete' and 'loaded', but\n            // 'loaded' is an IE thing\n            dom_loaded_handler();\n        } else {\n            document$1.addEventListener('DOMContentLoaded', dom_loaded_handler, false);\n        }\n    } else if (document$1.attachEvent) {\n        // IE\n        document$1.attachEvent('onreadystatechange', dom_loaded_handler);\n\n        // check to make sure we arn't in a frame\n        var toplevel = false;\n        try {\n            toplevel = window$1.frameElement === null;\n        } catch(e) {\n            // noop\n        }\n\n        if (document$1.documentElement.doScroll && toplevel) {\n            do_scroll_check();\n        }\n    }\n\n    // fallback handler, always will work\n    _.register_event(window$1, 'load', dom_loaded_handler, true);\n};\n\nfunction init_as_module() {\n    init_type = INIT_MODULE;\n    mixpanel_master = new MixpanelLib();\n\n    override_mp_init_func();\n    mixpanel_master['init']();\n    add_dom_loaded_handler();\n\n    return mixpanel_master;\n}\n\nvar mixpanel = init_as_module();\n\nmodule.exports = mixpanel;","!function(e){\"function\"==typeof define&&define.amd?define(e):e()}((function(){\"use strict\";\n/*! *****************************************************************************\n    Copyright (c) Microsoft Corporation.\n\n    Permission to use, copy, modify, and/or distribute this software for any\n    purpose with or without fee is hereby granted.\n\n    THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\n    REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\n    AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\n    INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\n    LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\n    OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\n    PERFORMANCE OF THIS SOFTWARE.\n    ***************************************************************************** */var e=function(){return(e=Object.assign||function(e){for(var t,n=1,o=arguments.length;n<o;n++)for(var r in t=arguments[n])Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=t[r]);return e}).apply(this,arguments)};function t(e,t,n,o){return new(n||(n=Promise))((function(r,i){function u(e){try{s(o.next(e))}catch(e){i(e)}}function a(e){try{s(o.throw(e))}catch(e){i(e)}}function s(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(u,a)}s((o=o.apply(e,t||[])).next())}))}function n(e,t){var n,o,r,i,u={label:0,sent:function(){if(1&r[0])throw r[1];return r[1]},trys:[],ops:[]};return i={next:a(0),throw:a(1),return:a(2)},\"function\"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function a(i){return function(a){return function(i){if(n)throw new TypeError(\"Generator is already executing.\");for(;u;)try{if(n=1,o&&(r=2&i[0]?o.return:i[0]?o.throw||((r=o.return)&&r.call(o),0):o.next)&&!(r=r.call(o,i[1])).done)return r;switch(o=0,r&&(i=[2&i[0],r.value]),i[0]){case 0:case 1:r=i;break;case 4:return u.label++,{value:i[1],done:!1};case 5:u.label++,o=i[1],i=[0];continue;case 7:i=u.ops.pop(),u.trys.pop();continue;default:if(!(r=u.trys,(r=r.length>0&&r[r.length-1])||6!==i[0]&&2!==i[0])){u=0;continue}if(3===i[0]&&(!r||i[1]>r[0]&&i[1]<r[3])){u.label=i[1];break}if(6===i[0]&&u.label<r[1]){u.label=r[1],r=i;break}if(r&&u.label<r[2]){u.label=r[2],u.ops.push(i);break}r[2]&&u.ops.pop(),u.trys.pop();continue}i=t.call(e,u)}catch(e){i=[6,e],o=0}finally{n=r=0}if(5&i[0])throw i[1];return{value:i[0]?i[1]:void 0,done:!0}}([i,a])}}}function o(e,t){var n=\"function\"==typeof Symbol&&e[Symbol.iterator];if(!n)return e;var o,r,i=n.call(e),u=[];try{for(;(void 0===t||t-- >0)&&!(o=i.next()).done;)u.push(o.value)}catch(e){r={error:e}}finally{try{o&&!o.done&&(n=i.return)&&n.call(i)}finally{if(r)throw r.error}}return u}function r(e,t){for(var n=0,o=t.length,r=e.length;n<o;n++,r++)e[r]=t[n];return e}var i=function(){function e(e){var t=this,n=e.key,o=e.heartBeatIntervalTime,r=void 0===o?1e3:o,i=e.heartBeatDetectIntervalTime,u=void 0===i?2e3:i;this._heartBeatIntervalId=null,this._heartBeatDetectIntervalId=null,this._key=n,this._heartBeatIntervalTime=r,this._heartBeatDetectIntervalTime=u,window.addEventListener(\"unload\",(function(){t.destroy()}))}return e.prototype.start=function(){var e=this;this._heartBeatIntervalId=setInterval((function(){e._setLocalTime()}),this._heartBeatIntervalTime)},e.prototype.destroy=function(){this._heartBeatIntervalId&&clearInterval(this._heartBeatIntervalId),this._heartBeatDetectIntervalId&&clearInterval(this._heartBeatDetectIntervalId)},e.prototype._setLocalTime=function(){window.localStorage.setItem(this._key,Date.now().toString())},e.prototype.detect=function(e){this._heartBeatDetectIntervalId=setInterval((function(){e()}),this._heartBeatDetectIntervalTime)},e}();function u(e,t){window.localStorage.setItem(e,t),function(e,t){var n=new Event(e);n.value=t,n.key=e,document.dispatchEvent(n)}(e,t)}function a(e){return window.localStorage.getItem(e)}function s(e,o){var r=function(){return t(this,void 0,void 0,(function(){return n(this,(function(t){switch(t.label){case 0:return[4,o()];case 1:return t.sent()&&document.removeEventListener(e,r),[2]}}))}))};document.addEventListener(e,r,!1);var i=function(r){return t(this,void 0,void 0,(function(){return n(this,(function(t){switch(t.label){case 0:return r.storageArea!==localStorage||r.key!==e?[3,2]:[4,o()];case 1:t.sent()&&window.removeEventListener(\"storage\",i),t.label=2;case 2:return[2]}}))}))};window.addEventListener(\"storage\",i,!1)}var c,l={EXCLUSIVE:\"exclusive\",SHARED:\"shared\"};function d(){return(new Date).getTime()+\"-\"+String(Math.random()).substring(2)}!function(e){e.REQUEST_QUEUE_MAP=\"$navigator.locks-requestQueueMap\",e.HELD_LOCK_SET=\"$navigator.locks-heldLockSet\",e.CLIENT_IDS=\"$navigator.locks-clientIds\"}(c||(c={}));var h=function(){function h(){this._defaultOptions={mode:l.EXCLUSIVE,ifAvailable:!1,steal:!1},this._clientId=\"$navigator.locks-clientId-\"+d(),this._init()}return h.prototype._init=function(){var e=this;this._storeThisClientId();var t=new i({key:this._clientId});t.start(),t.detect((function(){return e._cleanUnliveClientLocks()})),this._onUnload()},h.prototype._getClientIds=function(){var e=a(c.CLIENT_IDS);return e&&JSON.parse(e)||[]},h.prototype._storeClientIds=function(e){u(c.CLIENT_IDS,JSON.stringify(e))},h.prototype._storeThisClientId=function(){var e=r(r([],o(this._getClientIds())),[this._clientId]);this._storeClientIds(e)},h.prototype.request=function(){for(var e=[],o=0;o<arguments.length;o++)e[o]=arguments[o];return t(this,void 0,void 0,(function(){var o;return n(this,(function(r){return o=this,[2,new Promise((function(r,i){return t(this,void 0,void 0,(function(){var t,u,a,s,c,h,f,p,v;return n(this,(function(n){if(!(t=o._handleRequestArgs(e,i)))return[2];if(u=t.cb,a=t._options,s=e[0],c={name:s,mode:a.mode,clientId:o._clientId,uuid:s+\"-\"+d(),resolve:r,reject:i},h=o._resolveWithCB(u,r,i),f=o._heldLockSet(),p=f.find((function(e){return e.name===c.name})),v=o._requestLockQueueMap()[c.name]||[],!0===a.steal){if(!o._handleExceptionWhenStealIsTrue(a,i))return[2];f=f.filter((function(e){return e.name!==c.name})),p=f.find((function(e){return e.name===c.name}))}else{if(!0===a.ifAvailable)return p&&(p.mode!==l.SHARED||c.mode!==l.SHARED)||v.length?[2,h(null)]:[2,o._handleNewHeldLock(c,h)];if(void 0!==a.signal&&!o._handleSignalExisted(a,i,c))return[2]}return o._handleHeldLockAndRequest(p,c,h,v,f),[2]}))}))}))]}))}))},h.prototype.query=function(){return t(this,void 0,void 0,(function(){return n(this,(function(e){return[2,this._query()]}))}))},h.prototype._pushToLockRequestQueueMap=function(e){var t=this._requestLockQueueMap(),n=t[e.name]||[];return t[e.name]=r(r([],o(n)),[e]),this._storeRequestLockQueueMap(t),e},h.prototype._pushToHeldLockSet=function(e,t){void 0===t&&(t=this._heldLockSet());var n=r(r([],o(t)),[e]);return this._storeHeldLockSet(n),e},h.prototype._requestLockQueueMap=function(){var e=a(c.REQUEST_QUEUE_MAP);return e&&JSON.parse(e)||{}},h.prototype._heldLockSet=function(){var e=a(c.HELD_LOCK_SET);return e&&JSON.parse(e)||[]},h.prototype._updateHeldAndRequestLocks=function(e){var t=this._heldLockSet(),n=t.findIndex((function(t){return t.uuid===e.uuid}));if(-1!==n){t.splice(n,1);var i=this._requestLockQueueMap(),u=i[e.name]||[],a=o(u),s=a[0],c=a.slice(1);if(s){if(s.mode===l.EXCLUSIVE||0===c.length)t.push(s),i[e.name]=c;else if(s.mode===l.SHARED){var d=u.findIndex((function(e){return e.mode!==l.SHARED}));-1===d&&(d=u.length),t=r(r([],o(t)),o(u.splice(0,d)))}return this._storeHeldLockSetAndRequestLockQueueMap(t,i),s}this._storeHeldLockSet(t)}else console.log(\"this held lock which uuid is \"+e.uuid+\" had been steal\")},h.prototype._handleSignalExisted=function(e,t,n){return e.signal instanceof AbortSignal?e.signal.aborted?(t(new DOMException(\"Failed to execute 'request' on 'LockManager': The request was aborted.\")),!1):(this._signalOnabort(e.signal,n),!0):(t(new TypeError(\"Failed to execute 'request' on 'LockManager': member signal is not of type AbortSignal.\")),!1)},h.prototype._handleExceptionWhenStealIsTrue=function(e,t){return e.mode!==l.EXCLUSIVE?(t(new DOMException(\"Failed to execute 'request' on 'LockManager': The 'steal' option may only be used with 'exclusive' locks.\")),!1):!0!==e.ifAvailable||(t(new DOMException(\"Failed to execute 'request' on 'LockManager': The 'steal' and 'ifAvailable' options cannot be used together.\")),!1)},h.prototype._handleRequestArgs=function(t,n){var o,r,i=t.length;if(i<2)return n(new TypeError(\"Failed to execute 'request' on 'LockManager': 2 arguments required, but only \"+t.length+\" present.\")),null;if(2===i){if(\"function\"!=typeof t[1])return n(new TypeError(\"Failed to execute 'request' on 'LockManager': parameter 2 is not of type 'Function'.\")),null;o=t[1],r=this._defaultOptions}else{if(\"function\"!=typeof t[2])return n(new TypeError(\"Failed to execute 'request' on 'LockManager': parameter 3 is not of type 'Function'.\")),null;o=t[2],r=e(e({},this._defaultOptions),t[1])}return Object.values(l).indexOf(r.mode)<0?(n(new TypeError(\"Failed to execute 'request' on 'LockManager': The provided value '\"+r.mode+\"' is not a valid enum value of type LockMode.\")),null):\"-\"===t[0][0]?(n(new DOMException(\"Failed to execute 'request' on 'LockManager': Names cannot start with '-'.\")),null):{cb:o,_options:r}},h.prototype._handleHeldLockAndRequest=function(e,t,n,o,r){e?e.mode===l.EXCLUSIVE?this._handleNewLockRequest(t,n):e.mode===l.SHARED&&(t.mode===l.SHARED&&0===o.length?this._handleNewHeldLock(t,n,r):this._handleNewLockRequest(t,n)):this._handleNewHeldLock(t,n,r)},h.prototype._signalOnabort=function(e,t){var n=this,o=t.name,r=t.uuid;e.onabort=function(){var e=n._requestLockQueueMap(),t=e[o].findIndex((function(e){return e.uuid===r}));-1!==t&&(e[o].splice(t,1),n._storeRequestLockQueueMap(e))}},h.prototype._resolveWithCB=function(e,o,r){var i=this;return function(u){return new Promise((function(a){new Promise((function(e){return e(\"\")})).then((function(){return t(i,void 0,void 0,(function(){var t,i;return n(this,(function(n){switch(n.label){case 0:return n.trys.push([0,2,,3]),[4,e(u)];case 1:return t=n.sent(),a(t),o(t),[3,3];case 2:return i=n.sent(),a(i),r(i),[3,3];case 3:return[2]}}))}))}))}))}},h.prototype._handleNewHeldLock=function(e,o,r){return t(this,void 0,void 0,(function(){var t,i,u,a=this;return n(this,(function(n){return this._pushToHeldLockSet(e,r),t=!1,i=!1,u=function(){return!(t||i||a._isInHeldLockSet(e.uuid))&&(a._handleHeldLockBeSteal(e),i=!0,!0)},s(c.HELD_LOCK_SET,u),o({name:e.name,mode:e.mode}).then((function(){t=!0,a._updateHeldAndRequestLocks(e)})),[2]}))}))},h.prototype._handleHeldLockBeSteal=function(e){e.reject(new DOMException(\"Lock broken by another request with the 'steal' option.\"))},h.prototype._storeHeldLockSet=function(e){u(c.HELD_LOCK_SET,JSON.stringify(e))},h.prototype._storeRequestLockQueueMap=function(e){u(c.REQUEST_QUEUE_MAP,JSON.stringify(e))},h.prototype._isInHeldLockSet=function(e){return this._heldLockSet().some((function(t){return t.uuid===e}))},h.prototype._handleNewLockRequest=function(e,o){var r=this;this._pushToLockRequestQueueMap(e);var i=!1;s(c.HELD_LOCK_SET,(function(){return t(r,void 0,void 0,(function(){return n(this,(function(t){switch(t.label){case 0:return i||!this._isInHeldLockSet(e.uuid)?[3,5]:(i=!0,[4,o({name:e.name,mode:e.mode})]);case 1:return t.sent(),this._isInHeldLockSet(e.uuid)||this._handleHeldLockBeSteal(e),e.mode!==l.EXCLUSIVE?[3,2]:(this._updateHeldAndRequestLocks(e),[3,4]);case 2:return e.mode!==l.SHARED?[3,4]:[4,this._handleSharedLockFromListener(e)];case 3:t.sent(),t.label=4;case 4:return[2,!0];case 5:return[2,!1]}}))}))}))},h.prototype._handleSharedLockFromListener=function(e){return t(this,void 0,void 0,(function(){var t;return n(this,(function(n){switch(n.label){case 0:return[4,(o=Math.floor(1e3*Math.random()),new Promise((function(e){return setTimeout(e,o)})))];case 1:return n.sent(),(t=this._heldLockSet().filter((function(t){return t.name===e.name&&t.uuid!==e.uuid&&t.mode===l.SHARED}))).length?this._storeHeldLockSet(t):this._updateHeldAndRequestLocks(e),[2]}var o}))}))},h.prototype._storeHeldLockSetAndRequestLockQueueMap=function(e,t){this._storeHeldLockSet(e),this._storeRequestLockQueueMap(t)},h.prototype._query=function(){var e={held:this._heldLockSet(),pending:[]},t=this._requestLockQueueMap();for(var n in t){var o=t[n];e.pending=e.pending.concat(o)}return e},h.prototype._onUnload=function(){var e=this;window.addEventListener(\"unload\",(function(t){e._cleanClientLocksByClientId(e._clientId)}))},h.prototype._cleanClientLocksByClientId=function(e){var t=this._requestLockQueueMap();this._cleanRequestLockQueueByClientId(t,e);var n=this._cleanHeldLockSetByClientId(t,e);this._storeHeldLockSetAndRequestLockQueueMap(n,t)},h.prototype._cleanHeldLockSetByClientId=function(e,t){var n=this._heldLockSet(),i=[];return n.forEach((function(n){if(n.clientId!==t)i.push(n);else{var u=e[n.name]||[],a=o(u),s=a[0],c=a.slice(1);if(s)if(s.mode===l.EXCLUSIVE||0===c.length)i.push(s),e[n.name]=c;else if(s.mode===l.SHARED){var d=u.findIndex((function(e){return e.mode!==l.SHARED}));-1===d&&(d=u.length),i=r(r([],o(i)),o(u.splice(0,d)))}}})),i},h.prototype._cleanRequestLockQueueByClientId=function(e,t){for(var n in e){var o=e[n];e[n]=o.filter((function(e){return e.clientId!==t}))}},h.prototype._cleanUnliveClientLocks=function(){var e=this,t=r([],o(new Set(this._getClientIds())));if(t.length){var n=[];t.forEach((function(t){var o,r=a(t);!r||Date.now()-Number(r)>3100?(o=t,window.localStorage.removeItem(o),e._cleanClientLocksByClientId(t)):n.push(t)})),JSON.stringify(t)!==JSON.stringify(n)&&this._storeClientIds(n)}else this._storeClientIds([])},h}();!function(){if(\"undefined\"!=typeof window){var e=window.navigator;if(e&&!e.locks){var t=new h;Object.defineProperty(e,\"locks\",{value:t})}}}()}));\n","module.exports = require('./src/normalizeWheel.js');\n","/**\n * Copyright (c) 2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ExecutionEnvironment\n */\n\n/*jslint evil: true */\n\n'use strict';\n\nvar canUseDOM = !!(\n  typeof window !== 'undefined' &&\n  window.document &&\n  window.document.createElement\n);\n\n/**\n * Simple, lightweight module assisting with the detection and context of\n * Worker. Helps avoid circular dependencies and allows code to reason about\n * whether or not they are in a Worker, even if they never include the main\n * `ReactWorker` dependency.\n */\nvar ExecutionEnvironment = {\n\n  canUseDOM: canUseDOM,\n\n  canUseWorkers: typeof Worker !== 'undefined',\n\n  canUseEventListeners:\n    canUseDOM && !!(window.addEventListener || window.attachEvent),\n\n  canUseViewport: canUseDOM && !!window.screen,\n\n  isInWorker: !canUseDOM // For now, this is true - might change in the future.\n\n};\n\nmodule.exports = ExecutionEnvironment;\n","/**\n * Copyright 2004-present Facebook. All Rights Reserved.\n *\n * @providesModule UserAgent_DEPRECATED\n */\n\n/**\n *  Provides entirely client-side User Agent and OS detection. You should prefer\n *  the non-deprecated UserAgent module when possible, which exposes our\n *  authoritative server-side PHP-based detection to the client.\n *\n *  Usage is straightforward:\n *\n *    if (UserAgent_DEPRECATED.ie()) {\n *      //  IE\n *    }\n *\n *  You can also do version checks:\n *\n *    if (UserAgent_DEPRECATED.ie() >= 7) {\n *      //  IE7 or better\n *    }\n *\n *  The browser functions will return NaN if the browser does not match, so\n *  you can also do version compares the other way:\n *\n *    if (UserAgent_DEPRECATED.ie() < 7) {\n *      //  IE6 or worse\n *    }\n *\n *  Note that the version is a float and may include a minor version number,\n *  so you should always use range operators to perform comparisons, not\n *  strict equality.\n *\n *  **Note:** You should **strongly** prefer capability detection to browser\n *  version detection where it's reasonable:\n *\n *    http://www.quirksmode.org/js/support.html\n *\n *  Further, we have a large number of mature wrapper functions and classes\n *  which abstract away many browser irregularities. Check the documentation,\n *  grep for things, or ask on javascript@lists.facebook.com before writing yet\n *  another copy of \"event || window.event\".\n *\n */\n\nvar _populated = false;\n\n// Browsers\nvar _ie, _firefox, _opera, _webkit, _chrome;\n\n// Actual IE browser for compatibility mode\nvar _ie_real_version;\n\n// Platforms\nvar _osx, _windows, _linux, _android;\n\n// Architectures\nvar _win64;\n\n// Devices\nvar _iphone, _ipad, _native;\n\nvar _mobile;\n\nfunction _populate() {\n  if (_populated) {\n    return;\n  }\n\n  _populated = true;\n\n  // To work around buggy JS libraries that can't handle multi-digit\n  // version numbers, Opera 10's user agent string claims it's Opera\n  // 9, then later includes a Version/X.Y field:\n  //\n  // Opera/9.80 (foo) Presto/2.2.15 Version/10.10\n  var uas = navigator.userAgent;\n  var agent = /(?:MSIE.(\\d+\\.\\d+))|(?:(?:Firefox|GranParadiso|Iceweasel).(\\d+\\.\\d+))|(?:Opera(?:.+Version.|.)(\\d+\\.\\d+))|(?:AppleWebKit.(\\d+(?:\\.\\d+)?))|(?:Trident\\/\\d+\\.\\d+.*rv:(\\d+\\.\\d+))/.exec(uas);\n  var os    = /(Mac OS X)|(Windows)|(Linux)/.exec(uas);\n\n  _iphone = /\\b(iPhone|iP[ao]d)/.exec(uas);\n  _ipad = /\\b(iP[ao]d)/.exec(uas);\n  _android = /Android/i.exec(uas);\n  _native = /FBAN\\/\\w+;/i.exec(uas);\n  _mobile = /Mobile/i.exec(uas);\n\n  // Note that the IE team blog would have you believe you should be checking\n  // for 'Win64; x64'.  But MSDN then reveals that you can actually be coming\n  // from either x64 or ia64;  so ultimately, you should just check for Win64\n  // as in indicator of whether you're in 64-bit IE.  32-bit IE on 64-bit\n  // Windows will send 'WOW64' instead.\n  _win64 = !!(/Win64/.exec(uas));\n\n  if (agent) {\n    _ie = agent[1] ? parseFloat(agent[1]) : (\n          agent[5] ? parseFloat(agent[5]) : NaN);\n    // IE compatibility mode\n    if (_ie && document && document.documentMode) {\n      _ie = document.documentMode;\n    }\n    // grab the \"true\" ie version from the trident token if available\n    var trident = /(?:Trident\\/(\\d+.\\d+))/.exec(uas);\n    _ie_real_version = trident ? parseFloat(trident[1]) + 4 : _ie;\n\n    _firefox = agent[2] ? parseFloat(agent[2]) : NaN;\n    _opera   = agent[3] ? parseFloat(agent[3]) : NaN;\n    _webkit  = agent[4] ? parseFloat(agent[4]) : NaN;\n    if (_webkit) {\n      // We do not add the regexp to the above test, because it will always\n      // match 'safari' only since 'AppleWebKit' appears before 'Chrome' in\n      // the userAgent string.\n      agent = /(?:Chrome\\/(\\d+\\.\\d+))/.exec(uas);\n      _chrome = agent && agent[1] ? parseFloat(agent[1]) : NaN;\n    } else {\n      _chrome = NaN;\n    }\n  } else {\n    _ie = _firefox = _opera = _chrome = _webkit = NaN;\n  }\n\n  if (os) {\n    if (os[1]) {\n      // Detect OS X version.  If no version number matches, set _osx to true.\n      // Version examples:  10, 10_6_1, 10.7\n      // Parses version number as a float, taking only first two sets of\n      // digits.  If only one set of digits is found, returns just the major\n      // version number.\n      var ver = /(?:Mac OS X (\\d+(?:[._]\\d+)?))/.exec(uas);\n\n      _osx = ver ? parseFloat(ver[1].replace('_', '.')) : true;\n    } else {\n      _osx = false;\n    }\n    _windows = !!os[2];\n    _linux   = !!os[3];\n  } else {\n    _osx = _windows = _linux = false;\n  }\n}\n\nvar UserAgent_DEPRECATED = {\n\n  /**\n   *  Check if the UA is Internet Explorer.\n   *\n   *\n   *  @return float|NaN Version number (if match) or NaN.\n   */\n  ie: function() {\n    return _populate() || _ie;\n  },\n\n  /**\n   * Check if we're in Internet Explorer compatibility mode.\n   *\n   * @return bool true if in compatibility mode, false if\n   * not compatibility mode or not ie\n   */\n  ieCompatibilityMode: function() {\n    return _populate() || (_ie_real_version > _ie);\n  },\n\n\n  /**\n   * Whether the browser is 64-bit IE.  Really, this is kind of weak sauce;  we\n   * only need this because Skype can't handle 64-bit IE yet.  We need to remove\n   * this when we don't need it -- tracked by #601957.\n   */\n  ie64: function() {\n    return UserAgent_DEPRECATED.ie() && _win64;\n  },\n\n  /**\n   *  Check if the UA is Firefox.\n   *\n   *\n   *  @return float|NaN Version number (if match) or NaN.\n   */\n  firefox: function() {\n    return _populate() || _firefox;\n  },\n\n\n  /**\n   *  Check if the UA is Opera.\n   *\n   *\n   *  @return float|NaN Version number (if match) or NaN.\n   */\n  opera: function() {\n    return _populate() || _opera;\n  },\n\n\n  /**\n   *  Check if the UA is WebKit.\n   *\n   *\n   *  @return float|NaN Version number (if match) or NaN.\n   */\n  webkit: function() {\n    return _populate() || _webkit;\n  },\n\n  /**\n   *  For Push\n   *  WILL BE REMOVED VERY SOON. Use UserAgent_DEPRECATED.webkit\n   */\n  safari: function() {\n    return UserAgent_DEPRECATED.webkit();\n  },\n\n  /**\n   *  Check if the UA is a Chrome browser.\n   *\n   *\n   *  @return float|NaN Version number (if match) or NaN.\n   */\n  chrome : function() {\n    return _populate() || _chrome;\n  },\n\n\n  /**\n   *  Check if the user is running Windows.\n   *\n   *  @return bool `true' if the user's OS is Windows.\n   */\n  windows: function() {\n    return _populate() || _windows;\n  },\n\n\n  /**\n   *  Check if the user is running Mac OS X.\n   *\n   *  @return float|bool   Returns a float if a version number is detected,\n   *                       otherwise true/false.\n   */\n  osx: function() {\n    return _populate() || _osx;\n  },\n\n  /**\n   * Check if the user is running Linux.\n   *\n   * @return bool `true' if the user's OS is some flavor of Linux.\n   */\n  linux: function() {\n    return _populate() || _linux;\n  },\n\n  /**\n   * Check if the user is running on an iPhone or iPod platform.\n   *\n   * @return bool `true' if the user is running some flavor of the\n   *    iPhone OS.\n   */\n  iphone: function() {\n    return _populate() || _iphone;\n  },\n\n  mobile: function() {\n    return _populate() || (_iphone || _ipad || _android || _mobile);\n  },\n\n  nativeApp: function() {\n    // webviews inside of the native apps\n    return _populate() || _native;\n  },\n\n  android: function() {\n    return _populate() || _android;\n  },\n\n  ipad: function() {\n    return _populate() || _ipad;\n  }\n};\n\nmodule.exports = UserAgent_DEPRECATED;\n","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule isEventSupported\n */\n\n'use strict';\n\nvar ExecutionEnvironment = require('./ExecutionEnvironment');\n\nvar useHasFeature;\nif (ExecutionEnvironment.canUseDOM) {\n  useHasFeature =\n    document.implementation &&\n    document.implementation.hasFeature &&\n    // always returns true in newer browsers as per the standard.\n    // @see http://dom.spec.whatwg.org/#dom-domimplementation-hasfeature\n    document.implementation.hasFeature('', '') !== true;\n}\n\n/**\n * Checks if an event is supported in the current execution environment.\n *\n * NOTE: This will not work correctly for non-generic events such as `change`,\n * `reset`, `load`, `error`, and `select`.\n *\n * Borrows from Modernizr.\n *\n * @param {string} eventNameSuffix Event name, e.g. \"click\".\n * @param {?boolean} capture Check if the capture phase is supported.\n * @return {boolean} True if the event is supported.\n * @internal\n * @license Modernizr 3.0.0pre (Custom Build) | MIT\n */\nfunction isEventSupported(eventNameSuffix, capture) {\n  if (!ExecutionEnvironment.canUseDOM ||\n      capture && !('addEventListener' in document)) {\n    return false;\n  }\n\n  var eventName = 'on' + eventNameSuffix;\n  var isSupported = eventName in document;\n\n  if (!isSupported) {\n    var element = document.createElement('div');\n    element.setAttribute(eventName, 'return;');\n    isSupported = typeof element[eventName] === 'function';\n  }\n\n  if (!isSupported && useHasFeature && eventNameSuffix === 'wheel') {\n    // This is the only way to test support for the `wheel` event in IE9+.\n    isSupported = document.implementation.hasFeature('Events.wheel', '3.0');\n  }\n\n  return isSupported;\n}\n\nmodule.exports = isEventSupported;\n","/**\n * Copyright (c) 2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule normalizeWheel\n * @typechecks\n */\n\n'use strict';\n\nvar UserAgent_DEPRECATED = require('./UserAgent_DEPRECATED');\n\nvar isEventSupported = require('./isEventSupported');\n\n\n// Reasonable defaults\nvar PIXEL_STEP  = 10;\nvar LINE_HEIGHT = 40;\nvar PAGE_HEIGHT = 800;\n\n/**\n * Mouse wheel (and 2-finger trackpad) support on the web sucks.  It is\n * complicated, thus this doc is long and (hopefully) detailed enough to answer\n * your questions.\n *\n * If you need to react to the mouse wheel in a predictable way, this code is\n * like your bestest friend. * hugs *\n *\n * As of today, there are 4 DOM event types you can listen to:\n *\n *   'wheel'                -- Chrome(31+), FF(17+), IE(9+)\n *   'mousewheel'           -- Chrome, IE(6+), Opera, Safari\n *   'MozMousePixelScroll'  -- FF(3.5 only!) (2010-2013) -- don't bother!\n *   'DOMMouseScroll'       -- FF(0.9.7+) since 2003\n *\n * So what to do?  The is the best:\n *\n *   normalizeWheel.getEventType();\n *\n * In your event callback, use this code to get sane interpretation of the\n * deltas.  This code will return an object with properties:\n *\n *   spinX   -- normalized spin speed (use for zoom) - x plane\n *   spinY   -- \" - y plane\n *   pixelX  -- normalized distance (to pixels) - x plane\n *   pixelY  -- \" - y plane\n *\n * Wheel values are provided by the browser assuming you are using the wheel to\n * scroll a web page by a number of lines or pixels (or pages).  Values can vary\n * significantly on different platforms and browsers, forgetting that you can\n * scroll at different speeds.  Some devices (like trackpads) emit more events\n * at smaller increments with fine granularity, and some emit massive jumps with\n * linear speed or acceleration.\n *\n * This code does its best to normalize the deltas for you:\n *\n *   - spin is trying to normalize how far the wheel was spun (or trackpad\n *     dragged).  This is super useful for zoom support where you want to\n *     throw away the chunky scroll steps on the PC and make those equal to\n *     the slow and smooth tiny steps on the Mac. Key data: This code tries to\n *     resolve a single slow step on a wheel to 1.\n *\n *   - pixel is normalizing the desired scroll delta in pixel units.  You'll\n *     get the crazy differences between browsers, but at least it'll be in\n *     pixels!\n *\n *   - positive value indicates scrolling DOWN/RIGHT, negative UP/LEFT.  This\n *     should translate to positive value zooming IN, negative zooming OUT.\n *     This matches the newer 'wheel' event.\n *\n * Why are there spinX, spinY (or pixels)?\n *\n *   - spinX is a 2-finger side drag on the trackpad, and a shift + wheel turn\n *     with a mouse.  It results in side-scrolling in the browser by default.\n *\n *   - spinY is what you expect -- it's the classic axis of a mouse wheel.\n *\n *   - I dropped spinZ/pixelZ.  It is supported by the DOM 3 'wheel' event and\n *     probably is by browsers in conjunction with fancy 3D controllers .. but\n *     you know.\n *\n * Implementation info:\n *\n * Examples of 'wheel' event if you scroll slowly (down) by one step with an\n * average mouse:\n *\n *   OS X + Chrome  (mouse)     -    4   pixel delta  (wheelDelta -120)\n *   OS X + Safari  (mouse)     -  N/A   pixel delta  (wheelDelta  -12)\n *   OS X + Firefox (mouse)     -    0.1 line  delta  (wheelDelta  N/A)\n *   Win8 + Chrome  (mouse)     -  100   pixel delta  (wheelDelta -120)\n *   Win8 + Firefox (mouse)     -    3   line  delta  (wheelDelta -120)\n *\n * On the trackpad:\n *\n *   OS X + Chrome  (trackpad)  -    2   pixel delta  (wheelDelta   -6)\n *   OS X + Firefox (trackpad)  -    1   pixel delta  (wheelDelta  N/A)\n *\n * On other/older browsers.. it's more complicated as there can be multiple and\n * also missing delta values.\n *\n * The 'wheel' event is more standard:\n *\n * http://www.w3.org/TR/DOM-Level-3-Events/#events-wheelevents\n *\n * The basics is that it includes a unit, deltaMode (pixels, lines, pages), and\n * deltaX, deltaY and deltaZ.  Some browsers provide other values to maintain\n * backward compatibility with older events.  Those other values help us\n * better normalize spin speed.  Example of what the browsers provide:\n *\n *                          | event.wheelDelta | event.detail\n *        ------------------+------------------+--------------\n *          Safari v5/OS X  |       -120       |       0\n *          Safari v5/Win7  |       -120       |       0\n *         Chrome v17/OS X  |       -120       |       0\n *         Chrome v17/Win7  |       -120       |       0\n *                IE9/Win7  |       -120       |   undefined\n *         Firefox v4/OS X  |     undefined    |       1\n *         Firefox v4/Win7  |     undefined    |       3\n *\n */\nfunction normalizeWheel(/*object*/ event) /*object*/ {\n  var sX = 0, sY = 0,       // spinX, spinY\n      pX = 0, pY = 0;       // pixelX, pixelY\n\n  // Legacy\n  if ('detail'      in event) { sY = event.detail; }\n  if ('wheelDelta'  in event) { sY = -event.wheelDelta / 120; }\n  if ('wheelDeltaY' in event) { sY = -event.wheelDeltaY / 120; }\n  if ('wheelDeltaX' in event) { sX = -event.wheelDeltaX / 120; }\n\n  // side scrolling on FF with DOMMouseScroll\n  if ( 'axis' in event && event.axis === event.HORIZONTAL_AXIS ) {\n    sX = sY;\n    sY = 0;\n  }\n\n  pX = sX * PIXEL_STEP;\n  pY = sY * PIXEL_STEP;\n\n  if ('deltaY' in event) { pY = event.deltaY; }\n  if ('deltaX' in event) { pX = event.deltaX; }\n\n  if ((pX || pY) && event.deltaMode) {\n    if (event.deltaMode == 1) {          // delta in LINE units\n      pX *= LINE_HEIGHT;\n      pY *= LINE_HEIGHT;\n    } else {                             // delta in PAGE units\n      pX *= PAGE_HEIGHT;\n      pY *= PAGE_HEIGHT;\n    }\n  }\n\n  // Fall-back if spin cannot be determined\n  if (pX && !sX) { sX = (pX < 1) ? -1 : 1; }\n  if (pY && !sY) { sY = (pY < 1) ? -1 : 1; }\n\n  return { spinX  : sX,\n           spinY  : sY,\n           pixelX : pX,\n           pixelY : pY };\n}\n\n\n/**\n * The best combination if you prefer spinX + spinY normalization.  It favors\n * the older DOMMouseScroll for Firefox, as FF does not include wheelDelta with\n * 'wheel' event, making spin speed determination impossible.\n */\nnormalizeWheel.getEventType = function() /*string*/ {\n  return (UserAgent_DEPRECATED.firefox())\n           ? 'DOMMouseScroll'\n           : (isEventSupported('wheel'))\n               ? 'wheel'\n               : 'mousewheel';\n};\n\nmodule.exports = normalizeWheel;\n","/*\nobject-assign\n(c) Sindre Sorhus\n@license MIT\n*/\n\n'use strict';\n/* eslint-disable no-unused-vars */\nvar getOwnPropertySymbols = Object.getOwnPropertySymbols;\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\nvar propIsEnumerable = Object.prototype.propertyIsEnumerable;\n\nfunction toObject(val) {\n\tif (val === null || val === undefined) {\n\t\tthrow new TypeError('Object.assign cannot be called with null or undefined');\n\t}\n\n\treturn Object(val);\n}\n\nfunction shouldUseNative() {\n\ttry {\n\t\tif (!Object.assign) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Detect buggy property enumeration order in older V8 versions.\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=4118\n\t\tvar test1 = new String('abc');  // eslint-disable-line no-new-wrappers\n\t\ttest1[5] = 'de';\n\t\tif (Object.getOwnPropertyNames(test1)[0] === '5') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test2 = {};\n\t\tfor (var i = 0; i < 10; i++) {\n\t\t\ttest2['_' + String.fromCharCode(i)] = i;\n\t\t}\n\t\tvar order2 = Object.getOwnPropertyNames(test2).map(function (n) {\n\t\t\treturn test2[n];\n\t\t});\n\t\tif (order2.join('') !== '0123456789') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test3 = {};\n\t\t'abcdefghijklmnopqrst'.split('').forEach(function (letter) {\n\t\t\ttest3[letter] = letter;\n\t\t});\n\t\tif (Object.keys(Object.assign({}, test3)).join('') !==\n\t\t\t\t'abcdefghijklmnopqrst') {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn true;\n\t} catch (err) {\n\t\t// We don't expect any of the above to throw, but better to be safe.\n\t\treturn false;\n\t}\n}\n\nmodule.exports = shouldUseNative() ? Object.assign : function (target, source) {\n\tvar from;\n\tvar to = toObject(target);\n\tvar symbols;\n\n\tfor (var s = 1; s < arguments.length; s++) {\n\t\tfrom = Object(arguments[s]);\n\n\t\tfor (var key in from) {\n\t\t\tif (hasOwnProperty.call(from, key)) {\n\t\t\t\tto[key] = from[key];\n\t\t\t}\n\t\t}\n\n\t\tif (getOwnPropertySymbols) {\n\t\t\tsymbols = getOwnPropertySymbols(from);\n\t\t\tfor (var i = 0; i < symbols.length; i++) {\n\t\t\t\tif (propIsEnumerable.call(from, symbols[i])) {\n\t\t\t\t\tto[symbols[i]] = from[symbols[i]];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn to;\n};\n","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\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\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _propTypes = require('prop-types');\n\nvar _propTypes2 = _interopRequireDefault(_propTypes);\n\nvar _once = require('lodash/once');\n\nvar _once2 = _interopRequireDefault(_once);\n\nvar _fp = require('lodash/fp');\n\nvar _uuid = require('uuid');\n\nvar _uuid2 = _interopRequireDefault(_uuid);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar OTPublisher = function (_Component) {\n  _inherits(OTPublisher, _Component);\n\n  function OTPublisher(props, context) {\n    _classCallCheck(this, OTPublisher);\n\n    var _this = _possibleConstructorReturn(this, (OTPublisher.__proto__ || Object.getPrototypeOf(OTPublisher)).call(this, props));\n\n    _this.sessionConnectedHandler = function () {\n      _this.publishToSession(_this.state.publisher);\n    };\n\n    _this.streamCreatedHandler = function (event) {\n      _this.setState({ lastStreamId: event.stream.id });\n    };\n\n    _this.state = {\n      publisher: null,\n      lastStreamId: '',\n      session: props.session || context.session || null\n    };\n    return _this;\n  }\n\n  _createClass(OTPublisher, [{\n    key: 'componentDidMount',\n    value: function componentDidMount() {\n      this.createPublisher();\n    }\n  }, {\n    key: 'componentDidUpdate',\n    value: function componentDidUpdate(prevProps, prevState) {\n      var _this2 = this;\n\n      var useDefault = function useDefault(value, defaultValue) {\n        return value === undefined ? defaultValue : value;\n      };\n\n      var shouldUpdate = function shouldUpdate(key, defaultValue) {\n        var previous = useDefault(prevProps.properties[key], defaultValue);\n        var current = useDefault(_this2.props.properties[key], defaultValue);\n        return previous !== current;\n      };\n\n      var updatePublisherProperty = function updatePublisherProperty(key, defaultValue) {\n        if (shouldUpdate(key, defaultValue)) {\n          var value = useDefault(_this2.props.properties[key], defaultValue);\n          _this2.state.publisher[key](value);\n        }\n      };\n\n      if (shouldUpdate('videoSource', undefined)) {\n        this.destroyPublisher();\n        this.createPublisher();\n        return;\n      }\n\n      updatePublisherProperty('publishAudio', true);\n      updatePublisherProperty('publishVideo', true);\n\n      if (this.state.session !== prevState.session) {\n        this.destroyPublisher(prevState.session);\n        this.createPublisher();\n      }\n    }\n  }, {\n    key: 'componentWillUnmount',\n    value: function componentWillUnmount() {\n      if (this.state.session) {\n        this.state.session.off('sessionConnected', this.sessionConnectedHandler);\n      }\n\n      this.destroyPublisher();\n    }\n  }, {\n    key: 'getPublisher',\n    value: function getPublisher() {\n      return this.state.publisher;\n    }\n  }, {\n    key: 'destroyPublisher',\n    value: function destroyPublisher() {\n      var _this3 = this;\n\n      var session = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.state.session;\n\n      delete this.publisherId;\n\n      if (this.state.publisher) {\n        this.state.publisher.off('streamCreated', this.streamCreatedHandler);\n\n        if (this.props.eventHandlers && _typeof(this.props.eventHandlers) === 'object') {\n          this.state.publisher.once('destroyed', function () {\n            _this3.state.publisher.off(_this3.props.eventHandlers);\n          });\n        }\n\n        if (session) {\n          session.unpublish(this.state.publisher);\n        }\n        this.state.publisher.destroy();\n      }\n    }\n  }, {\n    key: 'publishToSession',\n    value: function publishToSession(publisher) {\n      var _this4 = this;\n\n      var publisherId = this.publisherId;\n\n\n      this.state.session.publish(publisher, function (err) {\n        if (publisherId !== _this4.publisherId) {\n          // Either this publisher has been recreated or the\n          // component unmounted so don't invoke any callbacks\n          return;\n        }\n        if (err) {\n          _this4.errorHandler(err);\n        } else if (typeof _this4.props.onPublish === 'function') {\n          _this4.props.onPublish();\n        }\n      });\n    }\n  }, {\n    key: 'createPublisher',\n    value: function createPublisher() {\n      var _this5 = this;\n\n      if (!this.state.session) {\n        this.setState({ publisher: null, lastStreamId: '' });\n        return;\n      }\n\n      var properties = this.props.properties || {};\n      var container = void 0;\n\n      if (properties.insertDefaultUI !== false) {\n        container = document.createElement('div');\n        container.setAttribute('class', 'OTPublisherContainer');\n        this.node.appendChild(container);\n      }\n\n      this.publisherId = (0, _uuid2.default)();\n      var publisherId = this.publisherId;\n\n\n      this.errorHandler = (0, _once2.default)(function (err) {\n        if (publisherId !== _this5.publisherId) {\n          // Either this publisher has been recreated or the\n          // component unmounted so don't invoke any callbacks\n          return;\n        }\n        if (typeof _this5.props.onError === 'function') {\n          _this5.props.onError(err);\n        }\n      });\n\n      var publisher = OT.initPublisher(container, properties, function (err) {\n        if (publisherId !== _this5.publisherId) {\n          // Either this publisher has been recreated or the\n          // component unmounted so don't invoke any callbacks\n          return;\n        }\n        if (err) {\n          _this5.errorHandler(err);\n        } else if (typeof _this5.props.onInit === 'function') {\n          _this5.props.onInit();\n        }\n      });\n      publisher.on('streamCreated', this.streamCreatedHandler);\n\n      if (this.props.eventHandlers && _typeof(this.props.eventHandlers) === 'object') {\n        var handles = (0, _fp.omitBy)(_fp.isNil)(this.props.eventHandlers);\n        publisher.on(handles);\n      }\n\n      if (this.state.session.connection) {\n        this.publishToSession(publisher);\n      } else {\n        this.state.session.once('sessionConnected', this.sessionConnectedHandler);\n      }\n\n      this.setState({ publisher: publisher, lastStreamId: '' });\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      var _this6 = this;\n\n      var _props = this.props,\n          className = _props.className,\n          style = _props.style;\n\n      return _react2.default.createElement('div', { className: className, style: style, ref: function ref(node) {\n          _this6.node = node;\n        } });\n    }\n  }]);\n\n  return OTPublisher;\n}(_react.Component);\n\nexports.default = OTPublisher;\n\n\nOTPublisher.propTypes = {\n  session: _propTypes2.default.shape({\n    connection: _propTypes2.default.shape({\n      connectionId: _propTypes2.default.string\n    }),\n    once: _propTypes2.default.func,\n    off: _propTypes2.default.func,\n    publish: _propTypes2.default.func,\n    unpublish: _propTypes2.default.func\n  }),\n  className: _propTypes2.default.string,\n  style: _propTypes2.default.object, // eslint-disable-line react/forbid-prop-types\n  properties: _propTypes2.default.object, // eslint-disable-line react/forbid-prop-types\n  eventHandlers: _propTypes2.default.objectOf(_propTypes2.default.func),\n  onInit: _propTypes2.default.func,\n  onPublish: _propTypes2.default.func,\n  onError: _propTypes2.default.func\n};\n\nOTPublisher.defaultProps = {\n  session: null,\n  className: '',\n  style: {},\n  properties: {},\n  eventHandlers: null,\n  onInit: null,\n  onPublish: null,\n  onError: null\n};\n\nOTPublisher.contextTypes = {\n  session: _propTypes2.default.shape({\n    connection: _propTypes2.default.shape({\n      connectionId: _propTypes2.default.string\n    }),\n    once: _propTypes2.default.func,\n    off: _propTypes2.default.func,\n    publish: _propTypes2.default.func,\n    unpublish: _propTypes2.default.func\n  })\n};","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\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\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _propTypes = require('prop-types');\n\nvar _propTypes2 = _interopRequireDefault(_propTypes);\n\nvar _createSession2 = require('./createSession');\n\nvar _createSession3 = _interopRequireDefault(_createSession2);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar OTSession = function (_Component) {\n  _inherits(OTSession, _Component);\n\n  function OTSession(props) {\n    _classCallCheck(this, OTSession);\n\n    var _this = _possibleConstructorReturn(this, (OTSession.__proto__ || Object.getPrototypeOf(OTSession)).call(this, props));\n\n    _this.state = {\n      streams: []\n    };\n    return _this;\n  }\n\n  _createClass(OTSession, [{\n    key: 'getChildContext',\n    value: function getChildContext() {\n      return { session: this.sessionHelper.session, streams: this.state.streams };\n    }\n  }, {\n    key: 'componentWillMount',\n    value: function componentWillMount() {\n      this.createSession();\n    }\n  }, {\n    key: 'componentDidUpdate',\n    value: function componentDidUpdate(prevProps) {\n      if (prevProps.apiKey !== this.props.apiKey || prevProps.sessionId !== this.props.sessionId || prevProps.token !== this.props.token) {\n        this.createSession();\n      }\n    }\n  }, {\n    key: 'componentWillUnmount',\n    value: function componentWillUnmount() {\n      this.destroySession();\n    }\n  }, {\n    key: 'createSession',\n    value: function createSession() {\n      var _this2 = this;\n\n      this.destroySession();\n\n      this.sessionHelper = (0, _createSession3.default)({\n        apiKey: this.props.apiKey,\n        sessionId: this.props.sessionId,\n        token: this.props.token,\n        onStreamsUpdated: function onStreamsUpdated(streams) {\n          _this2.setState({ streams: streams });\n        },\n        onConnect: this.props.onConnect,\n        onError: this.props.onError,\n        options: this.props.options\n      });\n\n      if (this.props.eventHandlers && _typeof(this.props.eventHandlers) === 'object') {\n        this.sessionHelper.session.on(this.props.eventHandlers);\n      }\n\n      var streams = this.sessionHelper.streams;\n\n      this.setState({ streams: streams });\n    }\n  }, {\n    key: 'destroySession',\n    value: function destroySession() {\n      if (this.sessionHelper) {\n        if (this.props.eventHandlers && _typeof(this.props.eventHandlers) === 'object') {\n          this.sessionHelper.session.off(this.props.eventHandlers);\n        }\n        this.sessionHelper.disconnect();\n      }\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      return _react2.default.createElement(\n        'div',\n        null,\n        this.props.children\n      );\n    }\n  }]);\n\n  return OTSession;\n}(_react.Component);\n\nexports.default = OTSession;\n\n\nOTSession.propTypes = {\n  children: _propTypes2.default.oneOfType([_propTypes2.default.element, _propTypes2.default.arrayOf(_propTypes2.default.element)]).isRequired,\n  apiKey: _propTypes2.default.string.isRequired,\n  sessionId: _propTypes2.default.string.isRequired,\n  token: _propTypes2.default.string.isRequired,\n  eventHandlers: _propTypes2.default.objectOf(_propTypes2.default.func),\n  onConnect: _propTypes2.default.func,\n  onError: _propTypes2.default.func,\n  options: _propTypes2.default.object\n};\n\nOTSession.defaultProps = {\n  eventHandlers: null,\n  onConnect: null,\n  onError: null,\n  options: {}\n};\n\nOTSession.childContextTypes = {\n  streams: _propTypes2.default.arrayOf(_propTypes2.default.object),\n  session: _propTypes2.default.shape({\n    subscribe: _propTypes2.default.func,\n    unsubscribe: _propTypes2.default.func\n  })\n};","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = OTStreams;\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _propTypes = require('prop-types');\n\nvar _propTypes2 = _interopRequireDefault(_propTypes);\n\nvar _OTSubscriberContext = require('./OTSubscriberContext');\n\nvar _OTSubscriberContext2 = _interopRequireDefault(_OTSubscriberContext);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction OTStreams(props, context) {\n  var session = props.session || context.session || null;\n  var streams = props.streams || context.streams || null;\n\n  if (!session) {\n    return _react2.default.createElement('div', null);\n  }\n\n  var child = _react.Children.only(props.children);\n\n  var childrenWithContextWrapper = Array.isArray(streams) ? streams.map(function (stream) {\n    return child ? _react2.default.createElement(\n      _OTSubscriberContext2.default,\n      { stream: stream, key: stream.id },\n      (0, _react.cloneElement)(child)\n    ) : child;\n  }) : null;\n\n  return _react2.default.createElement(\n    'div',\n    null,\n    childrenWithContextWrapper\n  );\n}\n\nOTStreams.propTypes = {\n  children: _propTypes2.default.element.isRequired,\n  session: _propTypes2.default.shape({ publish: _propTypes2.default.func, subscribe: _propTypes2.default.func }),\n  streams: _propTypes2.default.arrayOf(_propTypes2.default.object)\n};\n\nOTStreams.defaultProps = {\n  session: null,\n  streams: null\n};\n\nOTStreams.contextTypes = {\n  session: _propTypes2.default.shape({ publish: _propTypes2.default.func, subscribe: _propTypes2.default.func }),\n  streams: _propTypes2.default.arrayOf(_propTypes2.default.object)\n};","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\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\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _propTypes = require('prop-types');\n\nvar _propTypes2 = _interopRequireDefault(_propTypes);\n\nvar _uuid = require('uuid');\n\nvar _uuid2 = _interopRequireDefault(_uuid);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar OTSubscriber = function (_Component) {\n  _inherits(OTSubscriber, _Component);\n\n  function OTSubscriber(props, context) {\n    _classCallCheck(this, OTSubscriber);\n\n    var _this = _possibleConstructorReturn(this, (OTSubscriber.__proto__ || Object.getPrototypeOf(OTSubscriber)).call(this, props));\n\n    _this.state = {\n      subscriber: null,\n      stream: props.stream || context.stream || null,\n      session: props.session || context.session || null,\n      currentRetryAttempt: 0\n    };\n    _this.maxRetryAttempts = props.maxRetryAttempts || 5;\n    _this.retryAttemptTimeout = props.retryAttemptTimeout || 1000;\n    return _this;\n  }\n\n  _createClass(OTSubscriber, [{\n    key: 'componentDidMount',\n    value: function componentDidMount() {\n      this.createSubscriber();\n    }\n  }, {\n    key: 'componentDidUpdate',\n    value: function componentDidUpdate(prevProps, prevState) {\n      var _this2 = this;\n\n      var cast = function cast(value, Type, defaultValue) {\n        return value === undefined ? defaultValue : Type(value);\n      };\n\n      var updateSubscriberProperty = function updateSubscriberProperty(key) {\n        var previous = cast(prevProps.properties[key], Boolean, true);\n        var current = cast(_this2.props.properties[key], Boolean, true);\n        if (previous !== current) {\n          _this2.state.subscriber[key](current);\n        }\n      };\n\n      updateSubscriberProperty('subscribeToAudio');\n      updateSubscriberProperty('subscribeToVideo');\n\n      if (prevState.session !== this.state.session || prevState.stream !== this.state.stream) {\n        this.destroySubscriber(prevState.session);\n        this.createSubscriber();\n      }\n    }\n  }, {\n    key: 'componentWillUnmount',\n    value: function componentWillUnmount() {\n      this.destroySubscriber();\n    }\n  }, {\n    key: 'getSubscriber',\n    value: function getSubscriber() {\n      return this.state.subscriber;\n    }\n  }, {\n    key: 'createSubscriber',\n    value: function createSubscriber() {\n      var _this3 = this;\n\n      if (!this.state.session || !this.state.stream) {\n        this.setState({ subscriber: null });\n        return;\n      }\n      var properties = this.props.properties || {};\n      var container = void 0;\n      if (properties.insertDefaultUI !== false) {\n        container = document.createElement('div');\n        container.setAttribute('class', 'OTSubscriberContainer');\n        this.node.appendChild(container);\n      }\n\n      this.subscriberId = (0, _uuid2.default)();\n      var subscriberId = this.subscriberId;\n\n\n      var subscriber = this.state.session.subscribe(this.state.stream, container, this.props.properties, function (err) {\n        if (subscriberId !== _this3.subscriberId) {\n          // Either this subscriber has been recreated or the\n          // component unmounted so don't invoke any callbacks\n          return;\n        }\n        if (err && _this3.props.retry && _this3.state.currentRetryAttempt < _this3.maxRetryAttempts - 1) {\n          // Error during subscribe function\n          _this3.handleRetrySubscriber();\n          // If there is a retry action, do we want to execute the onError props function?\n          // return;\n        }\n        if (err && typeof _this3.props.onError === 'function') {\n          _this3.props.onError(err);\n        } else if (!err && typeof _this3.props.onSubscribe === 'function') {\n          _this3.props.onSubscribe();\n        }\n      });\n\n      if (this.props.eventHandlers && _typeof(this.props.eventHandlers) === 'object') {\n        subscriber.on(this.props.eventHandlers);\n      }\n\n      this.setState({ subscriber: subscriber });\n    }\n  }, {\n    key: 'handleRetrySubscriber',\n    value: function handleRetrySubscriber() {\n      var _this4 = this;\n\n      setTimeout(function () {\n        _this4.setState(function (state) {\n          return {\n            currentRetryAttempt: state.currentRetryAttempt + 1,\n            subscriber: null\n          };\n        });\n        _this4.createSubscriber();\n      }, this.retryAttemptTimeout);\n    }\n  }, {\n    key: 'destroySubscriber',\n    value: function destroySubscriber() {\n      var _this5 = this;\n\n      var session = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.props.session;\n\n      delete this.subscriberId;\n\n      if (this.state.subscriber) {\n        if (this.props.eventHandlers && _typeof(this.props.eventHandlers) === 'object') {\n          this.state.subscriber.once('destroyed', function () {\n            _this5.state.subscriber.off(_this5.props.eventHandlers);\n          });\n        }\n\n        if (session) {\n          session.unsubscribe(this.state.subscriber);\n        }\n      }\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      var _this6 = this;\n\n      var _props = this.props,\n          className = _props.className,\n          style = _props.style;\n\n      return _react2.default.createElement('div', { className: className, style: style, ref: function ref(node) {\n          _this6.node = node;\n        } });\n    }\n  }]);\n\n  return OTSubscriber;\n}(_react.Component);\n\nexports.default = OTSubscriber;\n\n\nOTSubscriber.propTypes = {\n  stream: _propTypes2.default.shape({\n    streamId: _propTypes2.default.string\n  }),\n  session: _propTypes2.default.shape({\n    subscribe: _propTypes2.default.func,\n    unsubscribe: _propTypes2.default.func\n  }),\n  className: _propTypes2.default.string,\n  style: _propTypes2.default.object, // eslint-disable-line react/forbid-prop-types\n  properties: _propTypes2.default.object, // eslint-disable-line react/forbid-prop-types\n  retry: _propTypes2.default.bool,\n  maxRetryAttempts: _propTypes2.default.number,\n  retryAttemptTimeout: _propTypes2.default.number,\n  eventHandlers: _propTypes2.default.objectOf(_propTypes2.default.func),\n  onSubscribe: _propTypes2.default.func,\n  onError: _propTypes2.default.func\n};\n\nOTSubscriber.defaultProps = {\n  stream: null,\n  session: null,\n  className: '',\n  style: {},\n  properties: {},\n  retry: false,\n  maxRetryAttempts: 5,\n  retryAttemptTimeout: 1000,\n  eventHandlers: null,\n  onSubscribe: null,\n  onError: null\n};\n\nOTSubscriber.contextTypes = {\n  stream: _propTypes2.default.shape({\n    streamId: _propTypes2.default.string\n  }),\n  session: _propTypes2.default.shape({\n    subscribe: _propTypes2.default.func,\n    unsubscribe: _propTypes2.default.func\n  })\n};","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\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\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _propTypes = require('prop-types');\n\nvar _propTypes2 = _interopRequireDefault(_propTypes);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\n// This is a wrapper class that establishes context for an OTSubscriber\n// instance.  This allows stream to be passed to the\n// OTSubscriber without requiring each child element to pas through props.\n// There should be a 1:1 ratio between OTSubscriberContext's and OTSubscriber's.\n// In general, OTSubscriberContext's are generated by the OTStreams component\n\nvar OTSubscriberContext = function (_Component) {\n  _inherits(OTSubscriberContext, _Component);\n\n  function OTSubscriberContext() {\n    _classCallCheck(this, OTSubscriberContext);\n\n    return _possibleConstructorReturn(this, (OTSubscriberContext.__proto__ || Object.getPrototypeOf(OTSubscriberContext)).apply(this, arguments));\n  }\n\n  _createClass(OTSubscriberContext, [{\n    key: 'getChildContext',\n    value: function getChildContext() {\n      return { stream: this.props.stream };\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      return _react2.default.createElement(\n        'div',\n        null,\n        this.props.children\n      );\n    }\n  }]);\n\n  return OTSubscriberContext;\n}(_react.Component);\n\nexports.default = OTSubscriberContext;\n\n\nOTSubscriberContext.propTypes = {\n  children: _propTypes2.default.element.isRequired,\n  stream: _propTypes2.default.shape({\n    streamId: _propTypes2.default.string\n  }).isRequired\n};\n\nOTSubscriberContext.childContextTypes = {\n  stream: _propTypes2.default.shape({\n    streamId: _propTypes2.default.string\n  })\n};","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = createSession;\nfunction createSession() {\n  var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n      apiKey = _ref.apiKey,\n      sessionId = _ref.sessionId,\n      token = _ref.token,\n      onStreamsUpdated = _ref.onStreamsUpdated,\n      onConnect = _ref.onConnect,\n      onError = _ref.onError,\n      options = _ref.options;\n\n  if (!apiKey) {\n    throw new Error('Missing apiKey');\n  }\n\n  if (!sessionId) {\n    throw new Error('Missing sessionId');\n  }\n\n  if (!token) {\n    throw new Error('Missing token');\n  }\n\n  var streams = [];\n\n  var onStreamCreated = function onStreamCreated(event) {\n    var index = streams.findIndex(function (stream) {\n      return stream.id === event.stream.id;\n    });\n    if (index < 0) {\n      streams.push(event.stream);\n      onStreamsUpdated(streams);\n    }\n  };\n\n  var onStreamDestroyed = function onStreamDestroyed(event) {\n    var index = streams.findIndex(function (stream) {\n      return stream.id === event.stream.id;\n    });\n    if (index >= 0) {\n      streams.splice(index, 1);\n      onStreamsUpdated(streams);\n    }\n  };\n\n  var eventHandlers = {\n    streamCreated: onStreamCreated,\n    streamDestroyed: onStreamDestroyed\n  };\n\n  var session = OT.initSession(apiKey, sessionId, options);\n  session.on(eventHandlers);\n  session.connect(token, function (err) {\n    if (!session) {\n      // Either this session has been disconnected or OTSession\n      // has been unmounted so don't invoke any callbacks\n      return;\n    }\n    if (err && typeof onError === 'function') {\n      onError(err);\n    } else if (!err && typeof onConnect === 'function') {\n      onConnect();\n    }\n  });\n\n  return {\n    session: session,\n    streams: streams,\n    disconnect: function disconnect() {\n      if (session) {\n        session.off(eventHandlers);\n        session.disconnect();\n      }\n\n      streams = null;\n      onStreamCreated = null;\n      onStreamDestroyed = null;\n      eventHandlers = null;\n      session = null;\n\n      this.session = null;\n      this.streams = null;\n    }\n  };\n}","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.preloadScript = exports.createSession = exports.OTSubscriber = exports.OTStreams = exports.OTPublisher = exports.OTSession = undefined;\n\nvar _OTSession = require('./OTSession');\n\nvar _OTSession2 = _interopRequireDefault(_OTSession);\n\nvar _OTPublisher = require('./OTPublisher');\n\nvar _OTPublisher2 = _interopRequireDefault(_OTPublisher);\n\nvar _OTStreams = require('./OTStreams');\n\nvar _OTStreams2 = _interopRequireDefault(_OTStreams);\n\nvar _OTSubscriber = require('./OTSubscriber');\n\nvar _OTSubscriber2 = _interopRequireDefault(_OTSubscriber);\n\nvar _createSession = require('./createSession');\n\nvar _createSession2 = _interopRequireDefault(_createSession);\n\nvar _preloadScript = require('./preloadScript');\n\nvar _preloadScript2 = _interopRequireDefault(_preloadScript);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = {\n  OTSession: _OTSession2.default,\n  OTPublisher: _OTPublisher2.default,\n  OTStreams: _OTStreams2.default,\n  OTSubscriber: _OTSubscriber2.default,\n  createSession: _createSession2.default,\n  preloadScript: _preloadScript2.default\n};\nexports.OTSession = _OTSession2.default;\nexports.OTPublisher = _OTPublisher2.default;\nexports.OTStreams = _OTStreams2.default;\nexports.OTSubscriber = _OTSubscriber2.default;\nexports.createSession = _createSession2.default;\nexports.preloadScript = _preloadScript2.default;","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\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\nexports.default = preloadScript;\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _propTypes = require('prop-types');\n\nvar _propTypes2 = _interopRequireDefault(_propTypes);\n\nvar _reactDisplayName = require('react-display-name');\n\nvar _reactDisplayName2 = _interopRequireDefault(_reactDisplayName);\n\nvar _scriptjs = require('scriptjs');\n\nvar _scriptjs2 = _interopRequireDefault(_scriptjs);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar DEFAULT_SCRIPT_URL = 'https://static.opentok.com/v2/js/opentok.min.js';\n\n/*\nThis higher-order component will load the OpenTok client thru a script tag.\nIt will render its inner component only when the OpenTok client has loaded.\nIn the meantime, it will render a loading element chosen by the developer.\n*/\nfunction preloadScript(InnerComponent) {\n  var PreloadScript = function (_Component) {\n    _inherits(PreloadScript, _Component);\n\n    function PreloadScript(props) {\n      _classCallCheck(this, PreloadScript);\n\n      var _this = _possibleConstructorReturn(this, (PreloadScript.__proto__ || Object.getPrototypeOf(PreloadScript)).call(this, props));\n\n      _this.onScriptLoad = function () {\n        if (_this.isPresent) {\n          _this.setState({ scriptLoaded: true });\n        }\n      };\n\n      _this.state = {\n        scriptLoaded: typeof OT !== 'undefined'\n      };\n      _this.isPresent = false;\n      return _this;\n    }\n\n    _createClass(PreloadScript, [{\n      key: 'componentDidMount',\n      value: function componentDidMount() {\n        this.isPresent = true;\n\n        if (this.scriptLoading || this.state.scriptLoaded) {\n          return;\n        }\n\n        this.scriptLoading = true;\n\n        var scriptUrl = this.props.opentokClientUrl;\n        (0, _scriptjs2.default)(scriptUrl, this.onScriptLoad);\n      }\n    }, {\n      key: 'componentWillUnmount',\n      value: function componentWillUnmount() {\n        this.isPresent = false;\n      }\n    }, {\n      key: 'render',\n      value: function render() {\n        var _props = this.props,\n            opentokClientUrl = _props.opentokClientUrl,\n            loadingDelegate = _props.loadingDelegate,\n            restProps = _objectWithoutProperties(_props, ['opentokClientUrl', 'loadingDelegate']);\n\n        if (this.state.scriptLoaded) {\n          return _react2.default.createElement(InnerComponent, restProps);\n        }\n\n        return loadingDelegate;\n      }\n    }]);\n\n    return PreloadScript;\n  }(_react.Component);\n\n  PreloadScript.displayName = 'preloadScript(' + (0, _reactDisplayName2.default)(InnerComponent) + ')';\n  PreloadScript.propTypes = {\n    opentokClientUrl: _propTypes2.default.string,\n    loadingDelegate: _propTypes2.default.node\n  };\n  PreloadScript.defaultProps = {\n    opentokClientUrl: DEFAULT_SCRIPT_URL,\n    loadingDelegate: _react2.default.createElement('div', null)\n  };\n\n  return PreloadScript;\n}","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nvar ReactPropTypesSecret = require('./lib/ReactPropTypesSecret');\n\nfunction emptyFunction() {}\nfunction emptyFunctionWithReset() {}\nemptyFunctionWithReset.resetWarningCache = emptyFunction;\n\nmodule.exports = function() {\n  function shim(props, propName, componentName, location, propFullName, secret) {\n    if (secret === ReactPropTypesSecret) {\n      // It is still safe when called from React.\n      return;\n    }\n    var err = new Error(\n      'Calling PropTypes validators directly is not supported by the `prop-types` package. ' +\n      'Use PropTypes.checkPropTypes() to call them. ' +\n      'Read more at http://fb.me/use-check-prop-types'\n    );\n    err.name = 'Invariant Violation';\n    throw err;\n  };\n  shim.isRequired = shim;\n  function getShim() {\n    return shim;\n  };\n  // Important!\n  // Keep this list in sync with production version in `./factoryWithTypeCheckers.js`.\n  var ReactPropTypes = {\n    array: shim,\n    bool: shim,\n    func: shim,\n    number: shim,\n    object: shim,\n    string: shim,\n    symbol: shim,\n\n    any: shim,\n    arrayOf: getShim,\n    element: shim,\n    elementType: shim,\n    instanceOf: getShim,\n    node: shim,\n    objectOf: getShim,\n    oneOf: getShim,\n    oneOfType: getShim,\n    shape: getShim,\n    exact: getShim,\n\n    checkPropTypes: emptyFunctionWithReset,\n    resetWarningCache: emptyFunction\n  };\n\n  ReactPropTypes.PropTypes = ReactPropTypes;\n\n  return ReactPropTypes;\n};\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nif (process.env.NODE_ENV !== 'production') {\n  var ReactIs = require('react-is');\n\n  // By explicitly using `prop-types` you are opting into new development behavior.\n  // http://fb.me/prop-types-in-prod\n  var throwOnDirectAccess = true;\n  module.exports = require('./factoryWithTypeCheckers')(ReactIs.isElement, throwOnDirectAccess);\n} else {\n  // By explicitly using `prop-types` you are opting into new production behavior.\n  // http://fb.me/prop-types-in-prod\n  module.exports = require('./factoryWithThrowingShims')();\n}\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nvar ReactPropTypesSecret = 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED';\n\nmodule.exports = ReactPropTypesSecret;\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nvar ReactPropTypesSecret = require('./lib/ReactPropTypesSecret');\n\nfunction emptyFunction() {}\nfunction emptyFunctionWithReset() {}\nemptyFunctionWithReset.resetWarningCache = emptyFunction;\n\nmodule.exports = function() {\n  function shim(props, propName, componentName, location, propFullName, secret) {\n    if (secret === ReactPropTypesSecret) {\n      // It is still safe when called from React.\n      return;\n    }\n    var err = new Error(\n      'Calling PropTypes validators directly is not supported by the `prop-types` package. ' +\n      'Use PropTypes.checkPropTypes() to call them. ' +\n      'Read more at http://fb.me/use-check-prop-types'\n    );\n    err.name = 'Invariant Violation';\n    throw err;\n  };\n  shim.isRequired = shim;\n  function getShim() {\n    return shim;\n  };\n  // Important!\n  // Keep this list in sync with production version in `./factoryWithTypeCheckers.js`.\n  var ReactPropTypes = {\n    array: shim,\n    bigint: shim,\n    bool: shim,\n    func: shim,\n    number: shim,\n    object: shim,\n    string: shim,\n    symbol: shim,\n\n    any: shim,\n    arrayOf: getShim,\n    element: shim,\n    elementType: shim,\n    instanceOf: getShim,\n    node: shim,\n    objectOf: getShim,\n    oneOf: getShim,\n    oneOfType: getShim,\n    shape: getShim,\n    exact: getShim,\n\n    checkPropTypes: emptyFunctionWithReset,\n    resetWarningCache: emptyFunction\n  };\n\n  ReactPropTypes.PropTypes = ReactPropTypes;\n\n  return ReactPropTypes;\n};\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nif (process.env.NODE_ENV !== 'production') {\n  var ReactIs = require('react-is');\n\n  // By explicitly using `prop-types` you are opting into new development behavior.\n  // http://fb.me/prop-types-in-prod\n  var throwOnDirectAccess = true;\n  module.exports = require('./factoryWithTypeCheckers')(ReactIs.isElement, throwOnDirectAccess);\n} else {\n  // By explicitly using `prop-types` you are opting into new production behavior.\n  // http://fb.me/prop-types-in-prod\n  module.exports = require('./factoryWithThrowingShims')();\n}\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nvar ReactPropTypesSecret = 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED';\n\nmodule.exports = ReactPropTypesSecret;\n","!function(e,t){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=t():\"function\"==typeof define&&define.amd?define(t):(e=\"undefined\"!=typeof globalThis?globalThis:e||self).PubNub=t()}(this,(function(){\"use strict\";var e=\"undefined\"!=typeof globalThis?globalThis:\"undefined\"!=typeof window?window:\"undefined\"!=typeof global?global:\"undefined\"!=typeof self?self:{};function t(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,\"default\")?e.default:e}var s={exports:{}};!function(t){!function(e,s){var n=Math.pow(2,-24),r=Math.pow(2,32),i=Math.pow(2,53);var o={encode:function(e){var t,n=new ArrayBuffer(256),o=new DataView(n),a=0;function c(e){for(var s=n.byteLength,r=a+e;s<r;)s*=2;if(s!==n.byteLength){var i=o;n=new ArrayBuffer(s),o=new DataView(n);for(var c=a+3>>2,u=0;u<c;++u)o.setUint32(4*u,i.getUint32(4*u))}return t=e,o}function u(){a+=t}function l(e){u(c(1).setUint8(a,e))}function h(e){for(var t=c(e.length),s=0;s<e.length;++s)t.setUint8(a+s,e[s]);u()}function d(e,t){t<24?l(e<<5|t):t<256?(l(e<<5|24),l(t)):t<65536?(l(e<<5|25),function(e){u(c(2).setUint16(a,e))}(t)):t<4294967296?(l(e<<5|26),function(e){u(c(4).setUint32(a,e))}(t)):(l(e<<5|27),function(e){var t=e%r,s=(e-t)/r,n=c(8);n.setUint32(a,s),n.setUint32(a+4,t),u()}(t))}if(function e(t){var n;if(!1===t)return l(244);if(!0===t)return l(245);if(null===t)return l(246);if(t===s)return l(247);switch(typeof t){case\"number\":if(Math.floor(t)===t){if(0<=t&&t<=i)return d(0,t);if(-i<=t&&t<0)return d(1,-(t+1))}return l(251),function(e){u(c(8).setFloat64(a,e))}(t);case\"string\":var r=[];for(n=0;n<t.length;++n){var o=t.charCodeAt(n);o<128?r.push(o):o<2048?(r.push(192|o>>6),r.push(128|63&o)):o<55296?(r.push(224|o>>12),r.push(128|o>>6&63),r.push(128|63&o)):(o=(1023&o)<<10,o|=1023&t.charCodeAt(++n),o+=65536,r.push(240|o>>18),r.push(128|o>>12&63),r.push(128|o>>6&63),r.push(128|63&o))}return d(3,r.length),h(r);default:var p;if(Array.isArray(t))for(d(4,p=t.length),n=0;n<p;++n)e(t[n]);else if(t instanceof Uint8Array)d(2,t.length),h(t);else{var g=Object.keys(t);for(d(5,p=g.length),n=0;n<p;++n){var y=g[n];e(y),e(t[y])}}}}(e),\"slice\"in n)return n.slice(0,a);for(var p=new ArrayBuffer(a),g=new DataView(p),y=0;y<a;++y)g.setUint8(y,o.getUint8(y));return p},decode:function(e,t,i){var o=new DataView(e),a=0;function c(e,t){return a+=t,e}function u(t){return c(new Uint8Array(e,a,t),t)}function l(){return c(o.getUint8(a),1)}function h(){return c(o.getUint16(a),2)}function d(){return c(o.getUint32(a),4)}function p(){return 255===o.getUint8(a)&&(a+=1,!0)}function g(e){if(e<24)return e;if(24===e)return l();if(25===e)return h();if(26===e)return d();if(27===e)return d()*r+d();if(31===e)return-1;throw\"Invalid length encoding\"}function y(e){var t=l();if(255===t)return-1;var s=g(31&t);if(s<0||t>>5!==e)throw\"Invalid indefinite length element\";return s}function f(e,t){for(var s=0;s<t;++s){var n=l();128&n&&(n<224?(n=(31&n)<<6|63&l(),t-=1):n<240?(n=(15&n)<<12|(63&l())<<6|63&l(),t-=2):(n=(15&n)<<18|(63&l())<<12|(63&l())<<6|63&l(),t-=3)),n<65536?e.push(n):(n-=65536,e.push(55296|n>>10),e.push(56320|1023&n))}}\"function\"!=typeof t&&(t=function(e){return e}),\"function\"!=typeof i&&(i=function(){return s});var m=function e(){var r,d,m=l(),b=m>>5,v=31&m;if(7===b)switch(v){case 25:return function(){var e=new ArrayBuffer(4),t=new DataView(e),s=h(),r=32768&s,i=31744&s,o=1023&s;if(31744===i)i=261120;else if(0!==i)i+=114688;else if(0!==o)return o*n;return t.setUint32(0,r<<16|i<<13|o<<13),t.getFloat32(0)}();case 26:return c(o.getFloat32(a),4);case 27:return c(o.getFloat64(a),8)}if((d=g(v))<0&&(b<2||6<b))throw\"Invalid length\";switch(b){case 0:return d;case 1:return-1-d;case 2:if(d<0){for(var w=[],S=0;(d=y(b))>=0;)S+=d,w.push(u(d));var k=new Uint8Array(S),E=0;for(r=0;r<w.length;++r)k.set(w[r],E),E+=w[r].length;return k}return u(d);case 3:var O=[];if(d<0)for(;(d=y(b))>=0;)f(O,d);else f(O,d);return String.fromCharCode.apply(null,O);case 4:var C;if(d<0)for(C=[];!p();)C.push(e());else for(C=new Array(d),r=0;r<d;++r)C[r]=e();return C;case 5:var N={};for(r=0;r<d||d<0&&!p();++r){N[e()]=e()}return N;case 6:return t(e(),d);case 7:switch(d){case 20:return!1;case 21:return!0;case 22:return null;case 23:return s;default:return i(d)}}}();if(a!==e.byteLength)throw\"Remaining bytes\";return m}};t.exports?t.exports=o:e.CBOR||(e.CBOR=o)}(e)}(s);var n=t(s.exports);function r(e,t){var s={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&t.indexOf(n)<0&&(s[n]=e[n]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var r=0;for(n=Object.getOwnPropertySymbols(e);r<n.length;r++)t.indexOf(n[r])<0&&Object.prototype.propertyIsEnumerable.call(e,n[r])&&(s[n[r]]=e[n[r]])}return s}function i(e,t,s,n){return new(s||(s=Promise))((function(r,i){function o(e){try{c(n.next(e))}catch(e){i(e)}}function a(e){try{c(n.throw(e))}catch(e){i(e)}}function c(e){var t;e.done?r(e.value):(t=e.value,t instanceof s?t:new s((function(e){e(t)}))).then(o,a)}c((n=n.apply(e,t||[])).next())}))}\"function\"==typeof SuppressedError&&SuppressedError;class o{static legacyCryptoModule(e){throw new Error(\"Should be implemented by concrete crypto module implementation.\")}static aesCbcCryptoModule(e){throw new Error(\"Should be implemented by concrete crypto module implementation.\")}constructor(e){var t;this.defaultCryptor=e.default,this.cryptors=null!==(t=e.cryptors)&&void 0!==t?t:[]}getAllCryptors(){return[this.defaultCryptor,...this.cryptors]}}o.encoder=new TextEncoder,o.decoder=new TextDecoder;class a{static create(e){return new a(e)}constructor(e){let t,s,n,r;if(e instanceof File)r=e,n=e.name,s=e.type,t=e.size;else if(\"data\"in e){const i=e.data;s=e.mimeType,n=e.name,r=new File([i],n,{type:s}),t=r.size}if(void 0===r)throw new Error(\"Couldn't construct a file out of supplied options.\");if(void 0===n)throw new Error(\"Couldn't guess filename out of the options. Please provide one.\");t&&(this.contentLength=t),this.mimeType=s,this.data=r,this.name=n}toBuffer(){return i(this,void 0,void 0,(function*(){throw new Error(\"This feature is only supported in Node.js environments.\")}))}toArrayBuffer(){return i(this,void 0,void 0,(function*(){return new Promise(((e,t)=>{const s=new FileReader;s.addEventListener(\"load\",(()=>{if(s.result instanceof ArrayBuffer)return e(s.result)})),s.addEventListener(\"error\",(()=>t(s.error))),s.readAsArrayBuffer(this.data)}))}))}toString(){return i(this,void 0,void 0,(function*(){return new Promise(((e,t)=>{const s=new FileReader;s.addEventListener(\"load\",(()=>{if(\"string\"==typeof s.result)return e(s.result)})),s.addEventListener(\"error\",(()=>{t(s.error)})),s.readAsBinaryString(this.data)}))}))}toStream(){return i(this,void 0,void 0,(function*(){throw new Error(\"This feature is only supported in Node.js environments.\")}))}toFile(){return i(this,void 0,void 0,(function*(){return this.data}))}toFileUri(){return i(this,void 0,void 0,(function*(){throw new Error(\"This feature is only supported in React Native environments.\")}))}toBlob(){return i(this,void 0,void 0,(function*(){return this.data}))}}a.supportsBlob=\"undefined\"!=typeof Blob,a.supportsFile=\"undefined\"!=typeof File,a.supportsBuffer=!1,a.supportsStream=!1,a.supportsString=!0,a.supportsArrayBuffer=!0,a.supportsEncryptFile=!0,a.supportsFileUri=!1;function c(e){const t=e.replace(/==?$/,\"\"),s=Math.floor(t.length/4*3),n=new ArrayBuffer(s),r=new Uint8Array(n);let i=0;function o(){const e=t.charAt(i++),s=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\".indexOf(e);if(-1===s)throw new Error(`Illegal character at ${i}: ${t.charAt(i-1)}`);return s}for(let e=0;e<s;e+=3){const t=o(),s=o(),n=o(),i=o(),a=(63&t)<<2|s>>4,c=(15&s)<<4|n>>2,u=(3&n)<<6|i;r[e]=a,64!=n&&(r[e+1]=c),64!=i&&(r[e+2]=u)}return n}function u(e){let t=\"\";const s=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\",n=new Uint8Array(e),r=n.byteLength,i=r%3,o=r-i;let a,c,u,l,h;for(let e=0;e<o;e+=3)h=n[e]<<16|n[e+1]<<8|n[e+2],a=(16515072&h)>>18,c=(258048&h)>>12,u=(4032&h)>>6,l=63&h,t+=s[a]+s[c]+s[u]+s[l];return 1==i?(h=n[o],a=(252&h)>>2,c=(3&h)<<4,t+=s[a]+s[c]+\"==\"):2==i&&(h=n[o]<<8|n[o+1],a=(64512&h)>>10,c=(1008&h)>>4,u=(15&h)<<2,t+=s[a]+s[c]+s[u]+\"=\"),t}var l;!function(e){e.PNNetworkIssuesCategory=\"PNNetworkIssuesCategory\",e.PNTimeoutCategory=\"PNTimeoutCategory\",e.PNCancelledCategory=\"PNCancelledCategory\",e.PNBadRequestCategory=\"PNBadRequestCategory\",e.PNAccessDeniedCategory=\"PNAccessDeniedCategory\",e.PNValidationErrorCategory=\"PNValidationErrorCategory\",e.PNAcknowledgmentCategory=\"PNAcknowledgmentCategory\",e.PNUnknownCategory=\"PNUnknownCategory\",e.PNNetworkUpCategory=\"PNNetworkUpCategory\",e.PNNetworkDownCategory=\"PNNetworkDownCategory\",e.PNReconnectedCategory=\"PNReconnectedCategory\",e.PNConnectedCategory=\"PNConnectedCategory\",e.PNRequestMessageCountExceededCategory=\"PNRequestMessageCountExceededCategory\",e.PNDisconnectedCategory=\"PNDisconnectedCategory\",e.PNConnectionErrorCategory=\"PNConnectionErrorCategory\",e.PNDisconnectedUnexpectedlyCategory=\"PNDisconnectedUnexpectedlyCategory\"}(l||(l={}));var h=l;class d extends Error{constructor(e,t){super(e),this.status=t,this.name=\"PubNubError\",this.message=e,Object.setPrototypeOf(this,new.target.prototype)}}function p(e,t){return s=Object.assign({message:e},void 0!==t?{statusCode:t}:{}),null!==(n=s.statusCode)&&void 0!==n||(s.statusCode=0),Object.assign(Object.assign({},s),{statusCode:s.statusCode,category:h.PNValidationErrorCategory,error:!0});var s,n}var g,y,f,m,b,v=v||function(e,t){var s={},n=s.lib={},r=function(){},i=n.Base={extend:function(e){r.prototype=this;var t=new r;return e&&t.mixIn(e),t.hasOwnProperty(\"init\")||(t.init=function(){t.$super.init.apply(this,arguments)}),t.init.prototype=t,t.$super=this,t},create:function(){var e=this.extend();return e.init.apply(e,arguments),e},init:function(){},mixIn:function(e){for(var t in e)e.hasOwnProperty(t)&&(this[t]=e[t]);e.hasOwnProperty(\"toString\")&&(this.toString=e.toString)},clone:function(){return this.init.prototype.extend(this)}},o=n.WordArray=i.extend({init:function(e,t){e=this.words=e||[],this.sigBytes=null!=t?t:4*e.length},toString:function(e){return(e||c).stringify(this)},concat:function(e){var t=this.words,s=e.words,n=this.sigBytes;if(e=e.sigBytes,this.clamp(),n%4)for(var r=0;r<e;r++)t[n+r>>>2]|=(s[r>>>2]>>>24-r%4*8&255)<<24-(n+r)%4*8;else if(65535<s.length)for(r=0;r<e;r+=4)t[n+r>>>2]=s[r>>>2];else t.push.apply(t,s);return this.sigBytes+=e,this},clamp:function(){var t=this.words,s=this.sigBytes;t[s>>>2]&=4294967295<<32-s%4*8,t.length=e.ceil(s/4)},clone:function(){var e=i.clone.call(this);return e.words=this.words.slice(0),e},random:function(t){for(var s=[],n=0;n<t;n+=4)s.push(4294967296*e.random()|0);return new o.init(s,t)}}),a=s.enc={},c=a.Hex={stringify:function(e){var t=e.words;e=e.sigBytes;for(var s=[],n=0;n<e;n++){var r=t[n>>>2]>>>24-n%4*8&255;s.push((r>>>4).toString(16)),s.push((15&r).toString(16))}return s.join(\"\")},parse:function(e){for(var t=e.length,s=[],n=0;n<t;n+=2)s[n>>>3]|=parseInt(e.substr(n,2),16)<<24-n%8*4;return new o.init(s,t/2)}},u=a.Latin1={stringify:function(e){var t=e.words;e=e.sigBytes;for(var s=[],n=0;n<e;n++)s.push(String.fromCharCode(t[n>>>2]>>>24-n%4*8&255));return s.join(\"\")},parse:function(e){for(var t=e.length,s=[],n=0;n<t;n++)s[n>>>2]|=(255&e.charCodeAt(n))<<24-n%4*8;return new o.init(s,t)}},l=a.Utf8={stringify:function(e){try{return decodeURIComponent(escape(u.stringify(e)))}catch(e){throw Error(\"Malformed UTF-8 data\")}},parse:function(e){return u.parse(unescape(encodeURIComponent(e)))}},h=n.BufferedBlockAlgorithm=i.extend({reset:function(){this._data=new o.init,this._nDataBytes=0},_append:function(e){\"string\"==typeof e&&(e=l.parse(e)),this._data.concat(e),this._nDataBytes+=e.sigBytes},_process:function(t){var s=this._data,n=s.words,r=s.sigBytes,i=this.blockSize,a=r/(4*i);if(t=(a=t?e.ceil(a):e.max((0|a)-this._minBufferSize,0))*i,r=e.min(4*t,r),t){for(var c=0;c<t;c+=i)this._doProcessBlock(n,c);c=n.splice(0,t),s.sigBytes-=r}return new o.init(c,r)},clone:function(){var e=i.clone.call(this);return e._data=this._data.clone(),e},_minBufferSize:0});n.Hasher=h.extend({cfg:i.extend(),init:function(e){this.cfg=this.cfg.extend(e),this.reset()},reset:function(){h.reset.call(this),this._doReset()},update:function(e){return this._append(e),this._process(),this},finalize:function(e){return e&&this._append(e),this._doFinalize()},blockSize:16,_createHelper:function(e){return function(t,s){return new e.init(s).finalize(t)}},_createHmacHelper:function(e){return function(t,s){return new d.HMAC.init(e,s).finalize(t)}}});var d=s.algo={};return s}(Math);!function(e){for(var t=v,s=(r=t.lib).WordArray,n=r.Hasher,r=t.algo,i=[],o=[],a=function(e){return 4294967296*(e-(0|e))|0},c=2,u=0;64>u;){var l;e:{l=c;for(var h=e.sqrt(l),d=2;d<=h;d++)if(!(l%d)){l=!1;break e}l=!0}l&&(8>u&&(i[u]=a(e.pow(c,.5))),o[u]=a(e.pow(c,1/3)),u++),c++}var p=[];r=r.SHA256=n.extend({_doReset:function(){this._hash=new s.init(i.slice(0))},_doProcessBlock:function(e,t){for(var s=this._hash.words,n=s[0],r=s[1],i=s[2],a=s[3],c=s[4],u=s[5],l=s[6],h=s[7],d=0;64>d;d++){if(16>d)p[d]=0|e[t+d];else{var g=p[d-15],y=p[d-2];p[d]=((g<<25|g>>>7)^(g<<14|g>>>18)^g>>>3)+p[d-7]+((y<<15|y>>>17)^(y<<13|y>>>19)^y>>>10)+p[d-16]}g=h+((c<<26|c>>>6)^(c<<21|c>>>11)^(c<<7|c>>>25))+(c&u^~c&l)+o[d]+p[d],y=((n<<30|n>>>2)^(n<<19|n>>>13)^(n<<10|n>>>22))+(n&r^n&i^r&i),h=l,l=u,u=c,c=a+g|0,a=i,i=r,r=n,n=g+y|0}s[0]=s[0]+n|0,s[1]=s[1]+r|0,s[2]=s[2]+i|0,s[3]=s[3]+a|0,s[4]=s[4]+c|0,s[5]=s[5]+u|0,s[6]=s[6]+l|0,s[7]=s[7]+h|0},_doFinalize:function(){var t=this._data,s=t.words,n=8*this._nDataBytes,r=8*t.sigBytes;return s[r>>>5]|=128<<24-r%32,s[14+(r+64>>>9<<4)]=e.floor(n/4294967296),s[15+(r+64>>>9<<4)]=n,t.sigBytes=4*s.length,this._process(),this._hash},clone:function(){var e=n.clone.call(this);return e._hash=this._hash.clone(),e}});t.SHA256=n._createHelper(r),t.HmacSHA256=n._createHmacHelper(r)}(Math),y=(g=v).enc.Utf8,g.algo.HMAC=g.lib.Base.extend({init:function(e,t){e=this._hasher=new e.init,\"string\"==typeof t&&(t=y.parse(t));var s=e.blockSize,n=4*s;t.sigBytes>n&&(t=e.finalize(t)),t.clamp();for(var r=this._oKey=t.clone(),i=this._iKey=t.clone(),o=r.words,a=i.words,c=0;c<s;c++)o[c]^=1549556828,a[c]^=909522486;r.sigBytes=i.sigBytes=n,this.reset()},reset:function(){var e=this._hasher;e.reset(),e.update(this._iKey)},update:function(e){return this._hasher.update(e),this},finalize:function(e){var t=this._hasher;return e=t.finalize(e),t.reset(),t.finalize(this._oKey.clone().concat(e))}}),m=(f=v).lib.WordArray,f.enc.Base64={stringify:function(e){var t=e.words,s=e.sigBytes,n=this._map;e.clamp(),e=[];for(var r=0;r<s;r+=3)for(var i=(t[r>>>2]>>>24-r%4*8&255)<<16|(t[r+1>>>2]>>>24-(r+1)%4*8&255)<<8|t[r+2>>>2]>>>24-(r+2)%4*8&255,o=0;4>o&&r+.75*o<s;o++)e.push(n.charAt(i>>>6*(3-o)&63));if(t=n.charAt(64))for(;e.length%4;)e.push(t);return e.join(\"\")},parse:function(e){var t=e.length,s=this._map;(n=s.charAt(64))&&-1!=(n=e.indexOf(n))&&(t=n);for(var n=[],r=0,i=0;i<t;i++)if(i%4){var o=s.indexOf(e.charAt(i-1))<<i%4*2,a=s.indexOf(e.charAt(i))>>>6-i%4*2;n[r>>>2]|=(o|a)<<24-r%4*8,r++}return m.create(n,r)},_map:\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\"},function(e){function t(e,t,s,n,r,i,o){return((e=e+(t&s|~t&n)+r+o)<<i|e>>>32-i)+t}function s(e,t,s,n,r,i,o){return((e=e+(t&n|s&~n)+r+o)<<i|e>>>32-i)+t}function n(e,t,s,n,r,i,o){return((e=e+(t^s^n)+r+o)<<i|e>>>32-i)+t}function r(e,t,s,n,r,i,o){return((e=e+(s^(t|~n))+r+o)<<i|e>>>32-i)+t}for(var i=v,o=(c=i.lib).WordArray,a=c.Hasher,c=i.algo,u=[],l=0;64>l;l++)u[l]=4294967296*e.abs(e.sin(l+1))|0;c=c.MD5=a.extend({_doReset:function(){this._hash=new o.init([1732584193,4023233417,2562383102,271733878])},_doProcessBlock:function(e,i){for(var o=0;16>o;o++){var a=e[c=i+o];e[c]=16711935&(a<<8|a>>>24)|4278255360&(a<<24|a>>>8)}o=this._hash.words;var c=e[i+0],l=(a=e[i+1],e[i+2]),h=e[i+3],d=e[i+4],p=e[i+5],g=e[i+6],y=e[i+7],f=e[i+8],m=e[i+9],b=e[i+10],v=e[i+11],w=e[i+12],S=e[i+13],k=e[i+14],E=e[i+15],O=t(O=o[0],P=o[1],N=o[2],C=o[3],c,7,u[0]),C=t(C,O,P,N,a,12,u[1]),N=t(N,C,O,P,l,17,u[2]),P=t(P,N,C,O,h,22,u[3]);O=t(O,P,N,C,d,7,u[4]),C=t(C,O,P,N,p,12,u[5]),N=t(N,C,O,P,g,17,u[6]),P=t(P,N,C,O,y,22,u[7]),O=t(O,P,N,C,f,7,u[8]),C=t(C,O,P,N,m,12,u[9]),N=t(N,C,O,P,b,17,u[10]),P=t(P,N,C,O,v,22,u[11]),O=t(O,P,N,C,w,7,u[12]),C=t(C,O,P,N,S,12,u[13]),N=t(N,C,O,P,k,17,u[14]),O=s(O,P=t(P,N,C,O,E,22,u[15]),N,C,a,5,u[16]),C=s(C,O,P,N,g,9,u[17]),N=s(N,C,O,P,v,14,u[18]),P=s(P,N,C,O,c,20,u[19]),O=s(O,P,N,C,p,5,u[20]),C=s(C,O,P,N,b,9,u[21]),N=s(N,C,O,P,E,14,u[22]),P=s(P,N,C,O,d,20,u[23]),O=s(O,P,N,C,m,5,u[24]),C=s(C,O,P,N,k,9,u[25]),N=s(N,C,O,P,h,14,u[26]),P=s(P,N,C,O,f,20,u[27]),O=s(O,P,N,C,S,5,u[28]),C=s(C,O,P,N,l,9,u[29]),N=s(N,C,O,P,y,14,u[30]),O=n(O,P=s(P,N,C,O,w,20,u[31]),N,C,p,4,u[32]),C=n(C,O,P,N,f,11,u[33]),N=n(N,C,O,P,v,16,u[34]),P=n(P,N,C,O,k,23,u[35]),O=n(O,P,N,C,a,4,u[36]),C=n(C,O,P,N,d,11,u[37]),N=n(N,C,O,P,y,16,u[38]),P=n(P,N,C,O,b,23,u[39]),O=n(O,P,N,C,S,4,u[40]),C=n(C,O,P,N,c,11,u[41]),N=n(N,C,O,P,h,16,u[42]),P=n(P,N,C,O,g,23,u[43]),O=n(O,P,N,C,m,4,u[44]),C=n(C,O,P,N,w,11,u[45]),N=n(N,C,O,P,E,16,u[46]),O=r(O,P=n(P,N,C,O,l,23,u[47]),N,C,c,6,u[48]),C=r(C,O,P,N,y,10,u[49]),N=r(N,C,O,P,k,15,u[50]),P=r(P,N,C,O,p,21,u[51]),O=r(O,P,N,C,w,6,u[52]),C=r(C,O,P,N,h,10,u[53]),N=r(N,C,O,P,b,15,u[54]),P=r(P,N,C,O,a,21,u[55]),O=r(O,P,N,C,f,6,u[56]),C=r(C,O,P,N,E,10,u[57]),N=r(N,C,O,P,g,15,u[58]),P=r(P,N,C,O,S,21,u[59]),O=r(O,P,N,C,d,6,u[60]),C=r(C,O,P,N,v,10,u[61]),N=r(N,C,O,P,l,15,u[62]),P=r(P,N,C,O,m,21,u[63]);o[0]=o[0]+O|0,o[1]=o[1]+P|0,o[2]=o[2]+N|0,o[3]=o[3]+C|0},_doFinalize:function(){var t=this._data,s=t.words,n=8*this._nDataBytes,r=8*t.sigBytes;s[r>>>5]|=128<<24-r%32;var i=e.floor(n/4294967296);for(s[15+(r+64>>>9<<4)]=16711935&(i<<8|i>>>24)|4278255360&(i<<24|i>>>8),s[14+(r+64>>>9<<4)]=16711935&(n<<8|n>>>24)|4278255360&(n<<24|n>>>8),t.sigBytes=4*(s.length+1),this._process(),s=(t=this._hash).words,n=0;4>n;n++)r=s[n],s[n]=16711935&(r<<8|r>>>24)|4278255360&(r<<24|r>>>8);return t},clone:function(){var e=a.clone.call(this);return e._hash=this._hash.clone(),e}}),i.MD5=a._createHelper(c),i.HmacMD5=a._createHmacHelper(c)}(Math),function(){var e,t=v,s=(e=t.lib).Base,n=e.WordArray,r=(e=t.algo).EvpKDF=s.extend({cfg:s.extend({keySize:4,hasher:e.MD5,iterations:1}),init:function(e){this.cfg=this.cfg.extend(e)},compute:function(e,t){for(var s=(a=this.cfg).hasher.create(),r=n.create(),i=r.words,o=a.keySize,a=a.iterations;i.length<o;){c&&s.update(c);var c=s.update(e).finalize(t);s.reset();for(var u=1;u<a;u++)c=s.finalize(c),s.reset();r.concat(c)}return r.sigBytes=4*o,r}});t.EvpKDF=function(e,t,s){return r.create(s).compute(e,t)}}(),v.lib.Cipher||function(e){var t=(p=v).lib,s=t.Base,n=t.WordArray,r=t.BufferedBlockAlgorithm,i=p.enc.Base64,o=p.algo.EvpKDF,a=t.Cipher=r.extend({cfg:s.extend(),createEncryptor:function(e,t){return this.create(this._ENC_XFORM_MODE,e,t)},createDecryptor:function(e,t){return this.create(this._DEC_XFORM_MODE,e,t)},init:function(e,t,s){this.cfg=this.cfg.extend(s),this._xformMode=e,this._key=t,this.reset()},reset:function(){r.reset.call(this),this._doReset()},process:function(e){return this._append(e),this._process()},finalize:function(e){return e&&this._append(e),this._doFinalize()},keySize:4,ivSize:4,_ENC_XFORM_MODE:1,_DEC_XFORM_MODE:2,_createHelper:function(e){return{encrypt:function(t,s,n){return(\"string\"==typeof s?g:d).encrypt(e,t,s,n)},decrypt:function(t,s,n){return(\"string\"==typeof s?g:d).decrypt(e,t,s,n)}}}});t.StreamCipher=a.extend({_doFinalize:function(){return this._process(!0)},blockSize:1});var c=p.mode={},u=function(e,t,s){var n=this._iv;n?this._iv=undefined:n=this._prevBlock;for(var r=0;r<s;r++)e[t+r]^=n[r]},l=(t.BlockCipherMode=s.extend({createEncryptor:function(e,t){return this.Encryptor.create(e,t)},createDecryptor:function(e,t){return this.Decryptor.create(e,t)},init:function(e,t){this._cipher=e,this._iv=t}})).extend();l.Encryptor=l.extend({processBlock:function(e,t){var s=this._cipher,n=s.blockSize;u.call(this,e,t,n),s.encryptBlock(e,t),this._prevBlock=e.slice(t,t+n)}}),l.Decryptor=l.extend({processBlock:function(e,t){var s=this._cipher,n=s.blockSize,r=e.slice(t,t+n);s.decryptBlock(e,t),u.call(this,e,t,n),this._prevBlock=r}}),c=c.CBC=l,l=(p.pad={}).Pkcs7={pad:function(e,t){for(var s,r=(s=(s=4*t)-e.sigBytes%s)<<24|s<<16|s<<8|s,i=[],o=0;o<s;o+=4)i.push(r);s=n.create(i,s),e.concat(s)},unpad:function(e){e.sigBytes-=255&e.words[e.sigBytes-1>>>2]}},t.BlockCipher=a.extend({cfg:a.cfg.extend({mode:c,padding:l}),reset:function(){a.reset.call(this);var e=(t=this.cfg).iv,t=t.mode;if(this._xformMode==this._ENC_XFORM_MODE)var s=t.createEncryptor;else s=t.createDecryptor,this._minBufferSize=1;this._mode=s.call(t,this,e&&e.words)},_doProcessBlock:function(e,t){this._mode.processBlock(e,t)},_doFinalize:function(){var e=this.cfg.padding;if(this._xformMode==this._ENC_XFORM_MODE){e.pad(this._data,this.blockSize);var t=this._process(!0)}else t=this._process(!0),e.unpad(t);return t},blockSize:4});var h=t.CipherParams=s.extend({init:function(e){this.mixIn(e)},toString:function(e){return(e||this.formatter).stringify(this)}}),d=(c=(p.format={}).OpenSSL={stringify:function(e){var t=e.ciphertext;return((e=e.salt)?n.create([1398893684,1701076831]).concat(e).concat(t):t).toString(i)},parse:function(e){var t=(e=i.parse(e)).words;if(1398893684==t[0]&&1701076831==t[1]){var s=n.create(t.slice(2,4));t.splice(0,4),e.sigBytes-=16}return h.create({ciphertext:e,salt:s})}},t.SerializableCipher=s.extend({cfg:s.extend({format:c}),encrypt:function(e,t,s,n){n=this.cfg.extend(n);var r=e.createEncryptor(s,n);return t=r.finalize(t),r=r.cfg,h.create({ciphertext:t,key:s,iv:r.iv,algorithm:e,mode:r.mode,padding:r.padding,blockSize:e.blockSize,formatter:n.format})},decrypt:function(e,t,s,n){return n=this.cfg.extend(n),t=this._parse(t,n.format),e.createDecryptor(s,n).finalize(t.ciphertext)},_parse:function(e,t){return\"string\"==typeof e?t.parse(e,this):e}})),p=(p.kdf={}).OpenSSL={execute:function(e,t,s,r){return r||(r=n.random(8)),e=o.create({keySize:t+s}).compute(e,r),s=n.create(e.words.slice(t),4*s),e.sigBytes=4*t,h.create({key:e,iv:s,salt:r})}},g=t.PasswordBasedCipher=d.extend({cfg:d.cfg.extend({kdf:p}),encrypt:function(e,t,s,n){return s=(n=this.cfg.extend(n)).kdf.execute(s,e.keySize,e.ivSize),n.iv=s.iv,(e=d.encrypt.call(this,e,t,s.key,n)).mixIn(s),e},decrypt:function(e,t,s,n){return n=this.cfg.extend(n),t=this._parse(t,n.format),s=n.kdf.execute(s,e.keySize,e.ivSize,t.salt),n.iv=s.iv,d.decrypt.call(this,e,t,s.key,n)}})}(),function(){for(var e=v,t=e.lib.BlockCipher,s=e.algo,n=[],r=[],i=[],o=[],a=[],c=[],u=[],l=[],h=[],d=[],p=[],g=0;256>g;g++)p[g]=128>g?g<<1:g<<1^283;var y=0,f=0;for(g=0;256>g;g++){var m=(m=f^f<<1^f<<2^f<<3^f<<4)>>>8^255&m^99;n[y]=m,r[m]=y;var b=p[y],w=p[b],S=p[w],k=257*p[m]^16843008*m;i[y]=k<<24|k>>>8,o[y]=k<<16|k>>>16,a[y]=k<<8|k>>>24,c[y]=k,k=16843009*S^65537*w^257*b^16843008*y,u[m]=k<<24|k>>>8,l[m]=k<<16|k>>>16,h[m]=k<<8|k>>>24,d[m]=k,y?(y=b^p[p[p[S^b]]],f^=p[p[f]]):y=f=1}var E=[0,1,2,4,8,16,32,64,128,27,54];s=s.AES=t.extend({_doReset:function(){for(var e=(s=this._key).words,t=s.sigBytes/4,s=4*((this._nRounds=t+6)+1),r=this._keySchedule=[],i=0;i<s;i++)if(i<t)r[i]=e[i];else{var o=r[i-1];i%t?6<t&&4==i%t&&(o=n[o>>>24]<<24|n[o>>>16&255]<<16|n[o>>>8&255]<<8|n[255&o]):(o=n[(o=o<<8|o>>>24)>>>24]<<24|n[o>>>16&255]<<16|n[o>>>8&255]<<8|n[255&o],o^=E[i/t|0]<<24),r[i]=r[i-t]^o}for(e=this._invKeySchedule=[],t=0;t<s;t++)i=s-t,o=t%4?r[i]:r[i-4],e[t]=4>t||4>=i?o:u[n[o>>>24]]^l[n[o>>>16&255]]^h[n[o>>>8&255]]^d[n[255&o]]},encryptBlock:function(e,t){this._doCryptBlock(e,t,this._keySchedule,i,o,a,c,n)},decryptBlock:function(e,t){var s=e[t+1];e[t+1]=e[t+3],e[t+3]=s,this._doCryptBlock(e,t,this._invKeySchedule,u,l,h,d,r),s=e[t+1],e[t+1]=e[t+3],e[t+3]=s},_doCryptBlock:function(e,t,s,n,r,i,o,a){for(var c=this._nRounds,u=e[t]^s[0],l=e[t+1]^s[1],h=e[t+2]^s[2],d=e[t+3]^s[3],p=4,g=1;g<c;g++){var y=n[u>>>24]^r[l>>>16&255]^i[h>>>8&255]^o[255&d]^s[p++],f=n[l>>>24]^r[h>>>16&255]^i[d>>>8&255]^o[255&u]^s[p++],m=n[h>>>24]^r[d>>>16&255]^i[u>>>8&255]^o[255&l]^s[p++];d=n[d>>>24]^r[u>>>16&255]^i[l>>>8&255]^o[255&h]^s[p++],u=y,l=f,h=m}y=(a[u>>>24]<<24|a[l>>>16&255]<<16|a[h>>>8&255]<<8|a[255&d])^s[p++],f=(a[l>>>24]<<24|a[h>>>16&255]<<16|a[d>>>8&255]<<8|a[255&u])^s[p++],m=(a[h>>>24]<<24|a[d>>>16&255]<<16|a[u>>>8&255]<<8|a[255&l])^s[p++],d=(a[d>>>24]<<24|a[u>>>16&255]<<16|a[l>>>8&255]<<8|a[255&h])^s[p++],e[t]=y,e[t+1]=f,e[t+2]=m,e[t+3]=d},keySize:8});e.AES=t._createHelper(s)}(),v.mode.ECB=((b=v.lib.BlockCipherMode.extend()).Encryptor=b.extend({processBlock:function(e,t){this._cipher.encryptBlock(e,t)}}),b.Decryptor=b.extend({processBlock:function(e,t){this._cipher.decryptBlock(e,t)}}),b);var w=t(v);class S{constructor({cipherKey:e}){this.cipherKey=e,this.CryptoJS=w,this.encryptedKey=this.CryptoJS.SHA256(e)}encrypt(e){if(0===(\"string\"==typeof e?e:S.decoder.decode(e)).length)throw new Error(\"encryption error. empty content\");const t=this.getIv();return{metadata:t,data:c(this.CryptoJS.AES.encrypt(e,this.encryptedKey,{iv:this.bufferToWordArray(t),mode:this.CryptoJS.mode.CBC}).ciphertext.toString(this.CryptoJS.enc.Base64))}}encryptFileData(e){return i(this,void 0,void 0,(function*(){const t=yield this.getKey(),s=this.getIv();return{data:yield crypto.subtle.encrypt({name:this.algo,iv:s},t,e),metadata:s}}))}decrypt(e){if(\"string\"==typeof e.data)throw new Error(\"Decryption error: data for decryption should be ArrayBuffed.\");const t=this.bufferToWordArray(new Uint8ClampedArray(e.metadata)),s=this.bufferToWordArray(new Uint8ClampedArray(e.data));return S.encoder.encode(this.CryptoJS.AES.decrypt({ciphertext:s},this.encryptedKey,{iv:t,mode:this.CryptoJS.mode.CBC}).toString(this.CryptoJS.enc.Utf8)).buffer}decryptFileData(e){return i(this,void 0,void 0,(function*(){if(\"string\"==typeof e.data)throw new Error(\"Decryption error: data for decryption should be ArrayBuffed.\");const t=yield this.getKey();return crypto.subtle.decrypt({name:this.algo,iv:e.metadata},t,e.data)}))}get identifier(){return\"ACRH\"}get algo(){return\"AES-CBC\"}getIv(){return crypto.getRandomValues(new Uint8Array(S.BLOCK_SIZE))}getKey(){return i(this,void 0,void 0,(function*(){const e=S.encoder.encode(this.cipherKey),t=yield crypto.subtle.digest(\"SHA-256\",e.buffer);return crypto.subtle.importKey(\"raw\",t,this.algo,!0,[\"encrypt\",\"decrypt\"])}))}bufferToWordArray(e){const t=[];let s;for(s=0;s<e.length;s+=1)t[s/4|0]|=e[s]<<24-8*s;return this.CryptoJS.lib.WordArray.create(t,e.length)}}function k(e){const t=[];let s;for(s=0;s<e.length;s+=1)t[s/4|0]|=e[s]<<24-8*s;return w.lib.WordArray.create(t,e.length)}S.BLOCK_SIZE=16,S.encoder=new TextEncoder,S.decoder=new TextDecoder;class E{constructor(e){this.configuration=e,this.iv=\"0123456789012345\",this.allowedKeyEncodings=[\"hex\",\"utf8\",\"base64\",\"binary\"],this.allowedKeyLengths=[128,256],this.allowedModes=[\"ecb\",\"cbc\"],this.defaultOptions={encryptKey:!0,keyEncoding:\"utf8\",keyLength:256,mode:\"cbc\"}}HMACSHA256(e){return w.HmacSHA256(e,this.configuration.secretKey).toString(w.enc.Base64)}SHA256(e){return w.SHA256(e).toString(w.enc.Hex)}encrypt(e,t,s){return this.configuration.customEncrypt?this.configuration.customEncrypt(e):this.pnEncrypt(e,t,s)}decrypt(e,t,s){return this.configuration.customDecrypt?this.configuration.customDecrypt(e):this.pnDecrypt(e,t,s)}pnEncrypt(e,t,s){const n=null!=t?t:this.configuration.cipherKey;if(!n)return e;s=this.parseOptions(s);const r=this.getMode(s),i=this.getPaddedKey(n,s);if(this.configuration.useRandomIVs){const t=this.getRandomIV(),s=w.AES.encrypt(e,i,{iv:t,mode:r}).ciphertext;return t.clone().concat(s.clone()).toString(w.enc.Base64)}const o=this.getIV(s);return w.AES.encrypt(e,i,{iv:o,mode:r}).ciphertext.toString(w.enc.Base64)||e}pnDecrypt(e,t,s){const n=null!=t?t:this.configuration.cipherKey;if(!n)return e;s=this.parseOptions(s);const r=this.getMode(s),i=this.getPaddedKey(n,s);if(this.configuration.useRandomIVs){const t=new Uint8ClampedArray(c(e)),s=k(t.slice(0,16)),n=k(t.slice(16));try{const e=w.AES.decrypt({ciphertext:n},i,{iv:s,mode:r}).toString(w.enc.Utf8);return JSON.parse(e)}catch(e){return null}}else{const t=this.getIV(s);try{const s=w.enc.Base64.parse(e),n=w.AES.decrypt({ciphertext:s},i,{iv:t,mode:r}).toString(w.enc.Utf8);return JSON.parse(n)}catch(e){return null}}}parseOptions(e){var t,s,n,r;if(!e)return this.defaultOptions;const i={encryptKey:null!==(t=e.encryptKey)&&void 0!==t?t:this.defaultOptions.encryptKey,keyEncoding:null!==(s=e.keyEncoding)&&void 0!==s?s:this.defaultOptions.keyEncoding,keyLength:null!==(n=e.keyLength)&&void 0!==n?n:this.defaultOptions.keyLength,mode:null!==(r=e.mode)&&void 0!==r?r:this.defaultOptions.mode};return-1===this.allowedKeyEncodings.indexOf(i.keyEncoding.toLowerCase())&&(i.keyEncoding=this.defaultOptions.keyEncoding),-1===this.allowedKeyLengths.indexOf(i.keyLength)&&(i.keyLength=this.defaultOptions.keyLength),-1===this.allowedModes.indexOf(i.mode.toLowerCase())&&(i.mode=this.defaultOptions.mode),i}decodeKey(e,t){return\"base64\"===t.keyEncoding?w.enc.Base64.parse(e):\"hex\"===t.keyEncoding?w.enc.Hex.parse(e):e}getPaddedKey(e,t){return e=this.decodeKey(e,t),t.encryptKey?w.enc.Utf8.parse(this.SHA256(e).slice(0,32)):e}getMode(e){return\"ecb\"===e.mode?w.mode.ECB:w.mode.CBC}getIV(e){return\"cbc\"===e.mode?w.enc.Utf8.parse(this.iv):null}getRandomIV(){return w.lib.WordArray.random(16)}}function O(e,t){const s=new Uint8Array(e.byteLength+t.byteLength);return s.set(new Uint8Array(e),0),s.set(new Uint8Array(t),e.byteLength),s.buffer}class C{encrypt(e,t){return i(this,void 0,void 0,(function*(){if(!(t instanceof ArrayBuffer)&&\"string\"!=typeof t)throw new Error(\"Cannot encrypt this file. In browsers file encryption supports only string or ArrayBuffer\");const s=yield this.getKey(e);return t instanceof ArrayBuffer?this.encryptArrayBuffer(s,t):this.encryptString(s,t)}))}encryptArrayBuffer(e,t){return i(this,void 0,void 0,(function*(){const s=crypto.getRandomValues(new Uint8Array(16));return O(s.buffer,yield crypto.subtle.encrypt({name:\"AES-CBC\",iv:s},e,t))}))}encryptString(e,t){return i(this,void 0,void 0,(function*(){const s=crypto.getRandomValues(new Uint8Array(16)),n=C.encoder.encode(t).buffer,r=yield crypto.subtle.encrypt({name:\"AES-CBC\",iv:s},e,n),i=O(s.buffer,r);return C.decoder.decode(i)}))}encryptFile(e,t,s){return i(this,void 0,void 0,(function*(){var n,r;if((null!==(n=t.contentLength)&&void 0!==n?n:0)<=0)throw new Error(\"encryption error. empty content\");const i=yield this.getKey(e),o=yield t.toArrayBuffer(),a=yield this.encryptArrayBuffer(i,o);return s.create({name:t.name,mimeType:null!==(r=t.mimeType)&&void 0!==r?r:\"application/octet-stream\",data:a})}))}decrypt(e,t){return i(this,void 0,void 0,(function*(){if(!(t instanceof ArrayBuffer)&&\"string\"!=typeof t)throw new Error(\"Cannot decrypt this file. In browsers file decryption supports only string or ArrayBuffer\");const s=yield this.getKey(e);return t instanceof ArrayBuffer?this.decryptArrayBuffer(s,t):this.decryptString(s,t)}))}decryptArrayBuffer(e,t){return i(this,void 0,void 0,(function*(){const s=t.slice(0,16);if(t.slice(C.IV_LENGTH).byteLength<=0)throw new Error(\"decryption error: empty content\");return yield crypto.subtle.decrypt({name:\"AES-CBC\",iv:s},e,t.slice(C.IV_LENGTH))}))}decryptString(e,t){return i(this,void 0,void 0,(function*(){const s=C.encoder.encode(t).buffer,n=s.slice(0,16),r=s.slice(16),i=yield crypto.subtle.decrypt({name:\"AES-CBC\",iv:n},e,r);return C.decoder.decode(i)}))}decryptFile(e,t,s){return i(this,void 0,void 0,(function*(){const n=yield this.getKey(e),r=yield t.toArrayBuffer(),i=yield this.decryptArrayBuffer(n,r);return s.create({name:t.name,mimeType:t.mimeType,data:i})}))}getKey(e){return i(this,void 0,void 0,(function*(){const t=yield crypto.subtle.digest(\"SHA-256\",C.encoder.encode(e)),s=Array.from(new Uint8Array(t)).map((e=>e.toString(16).padStart(2,\"0\"))).join(\"\"),n=C.encoder.encode(s.slice(0,32)).buffer;return crypto.subtle.importKey(\"raw\",n,\"AES-CBC\",!0,[\"encrypt\",\"decrypt\"])}))}}C.IV_LENGTH=16,C.encoder=new TextEncoder,C.decoder=new TextDecoder;class N{constructor(e){this.config=e,this.cryptor=new E(Object.assign({},e)),this.fileCryptor=new C}encrypt(e){const t=\"string\"==typeof e?e:N.decoder.decode(e);return{data:this.cryptor.encrypt(t),metadata:null}}encryptFile(e,t){return i(this,void 0,void 0,(function*(){var s;if(!this.config.cipherKey)throw new d(\"File encryption error: cipher key not set.\");return this.fileCryptor.encryptFile(null===(s=this.config)||void 0===s?void 0:s.cipherKey,e,t)}))}decrypt(e){const t=\"string\"==typeof e.data?e.data:u(e.data);return this.cryptor.decrypt(t)}decryptFile(e,t){return i(this,void 0,void 0,(function*(){if(!this.config.cipherKey)throw new d(\"File encryption error: cipher key not set.\");return this.fileCryptor.decryptFile(this.config.cipherKey,e,t)}))}get identifier(){return\"\"}}N.encoder=new TextEncoder,N.decoder=new TextDecoder;class P extends o{static legacyCryptoModule(e){var t;if(!e.cipherKey)throw new d(\"Crypto module error: cipher key not set.\");return new P({default:new N(Object.assign(Object.assign({},e),{useRandomIVs:null===(t=e.useRandomIVs)||void 0===t||t})),cryptors:[new S({cipherKey:e.cipherKey})]})}static aesCbcCryptoModule(e){var t;if(!e.cipherKey)throw new d(\"Crypto module error: cipher key not set.\");return new P({default:new S({cipherKey:e.cipherKey}),cryptors:[new N(Object.assign(Object.assign({},e),{useRandomIVs:null===(t=e.useRandomIVs)||void 0===t||t}))]})}static withDefaultCryptor(e){return new this({default:e})}encrypt(e){const t=e instanceof ArrayBuffer&&this.defaultCryptor.identifier===P.LEGACY_IDENTIFIER?this.defaultCryptor.encrypt(P.decoder.decode(e)):this.defaultCryptor.encrypt(e);if(!t.metadata)return t.data;if(\"string\"==typeof t.data)throw new Error(\"Encryption error: encrypted data should be ArrayBuffed.\");const s=this.getHeaderData(t);return this.concatArrayBuffer(s,t.data)}encryptFile(e,t){return i(this,void 0,void 0,(function*(){if(this.defaultCryptor.identifier===M.LEGACY_IDENTIFIER)return this.defaultCryptor.encryptFile(e,t);const s=yield this.getFileData(e),n=yield this.defaultCryptor.encryptFileData(s);if(\"string\"==typeof n.data)throw new Error(\"Encryption error: encrypted data should be ArrayBuffed.\");return t.create({name:e.name,mimeType:\"application/octet-stream\",data:this.concatArrayBuffer(this.getHeaderData(n),n.data)})}))}decrypt(e){const t=\"string\"==typeof e?c(e):e,s=M.tryParse(t),n=this.getCryptor(s),r=s.length>0?t.slice(s.length-s.metadataLength,s.length):null;if(t.slice(s.length).byteLength<=0)throw new Error(\"Decryption error: empty content\");return n.decrypt({data:t.slice(s.length),metadata:r})}decryptFile(e,t){return i(this,void 0,void 0,(function*(){const s=yield e.data.arrayBuffer(),n=M.tryParse(s),r=this.getCryptor(n);if((null==r?void 0:r.identifier)===M.LEGACY_IDENTIFIER)return r.decryptFile(e,t);const i=(yield this.getFileData(s)).slice(n.length-n.metadataLength,n.length);return t.create({name:e.name,data:yield this.defaultCryptor.decryptFileData({data:s.slice(n.length),metadata:i})})}))}getCryptorFromId(e){const t=this.getAllCryptors().find((t=>e===t.identifier));if(t)return t;throw Error(\"Unknown cryptor error\")}getCryptor(e){if(\"string\"==typeof e){const t=this.getAllCryptors().find((t=>t.identifier===e));if(t)return t;throw new Error(\"Unknown cryptor error\")}if(e instanceof _)return this.getCryptorFromId(e.identifier)}getHeaderData(e){if(!e.metadata)return;const t=M.from(this.defaultCryptor.identifier,e.metadata),s=new Uint8Array(t.length);let n=0;return s.set(t.data,n),n+=t.length-e.metadata.byteLength,s.set(new Uint8Array(e.metadata),n),s.buffer}concatArrayBuffer(e,t){const s=new Uint8Array(e.byteLength+t.byteLength);return s.set(new Uint8Array(e),0),s.set(new Uint8Array(t),e.byteLength),s.buffer}getFileData(e){return i(this,void 0,void 0,(function*(){if(e instanceof ArrayBuffer)return e;if(e instanceof a)return e.toArrayBuffer();throw new Error(\"Cannot decrypt/encrypt file. In browsers file encrypt/decrypt supported for string, ArrayBuffer or Blob\")}))}}P.LEGACY_IDENTIFIER=\"\";class M{static from(e,t){if(e!==M.LEGACY_IDENTIFIER)return new _(e,t.byteLength)}static tryParse(e){const t=new Uint8Array(e);let s,n,r=null;if(t.byteLength>=4&&(s=t.slice(0,4),this.decoder.decode(s)!==M.SENTINEL))return P.LEGACY_IDENTIFIER;if(!(t.byteLength>=5))throw new Error(\"Decryption error: invalid header version\");if(r=t[4],r>M.MAX_VERSION)throw new Error(\"Decryption error: Unknown cryptor error\");let i=5+M.IDENTIFIER_LENGTH;if(!(t.byteLength>=i))throw new Error(\"Decryption error: invalid crypto identifier\");n=t.slice(5,i);let o=null;if(!(t.byteLength>=i+1))throw new Error(\"Decryption error: invalid metadata length\");return o=t[i],i+=1,255===o&&t.byteLength>=i+2&&(o=new Uint16Array(t.slice(i,i+2)).reduce(((e,t)=>(e<<8)+t),0)),new _(this.decoder.decode(n),o)}}M.SENTINEL=\"PNED\",M.LEGACY_IDENTIFIER=\"\",M.IDENTIFIER_LENGTH=4,M.VERSION=1,M.MAX_VERSION=1,M.decoder=new TextDecoder;class _{constructor(e,t){this._identifier=e,this._metadataLength=t}get identifier(){return this._identifier}set identifier(e){this._identifier=e}get metadataLength(){return this._metadataLength}set metadataLength(e){this._metadataLength=e}get version(){return M.VERSION}get length(){return M.SENTINEL.length+1+M.IDENTIFIER_LENGTH+(this.metadataLength<255?1:3)+this.metadataLength}get data(){let e=0;const t=new Uint8Array(this.length),s=new TextEncoder;t.set(s.encode(M.SENTINEL)),e+=M.SENTINEL.length,t[e]=this.version,e++,this.identifier&&t.set(s.encode(this.identifier),e);const n=this.metadataLength;return e+=M.IDENTIFIER_LENGTH,n<255?t[e]=n:t.set([255,n>>8,255&n],e),t}}_.IDENTIFIER_LENGTH=4,_.SENTINEL=\"PNED\";class A extends Error{static create(e,t){return e instanceof Error?A.createFromError(e):A.createFromServiceResponse(e,t)}static createFromError(e){let t=h.PNUnknownCategory,s=\"Unknown error\",n=\"Error\";if(!e)return new A(s,t,0);if(e instanceof A)return e;if(e instanceof Error&&(s=e.message,n=e.name),\"AbortError\"===n||-1!==s.indexOf(\"Aborted\"))t=h.PNCancelledCategory,s=\"Request cancelled\";else if(-1!==s.indexOf(\"timeout\"))t=h.PNTimeoutCategory,s=\"Request timeout\";else if(-1!==s.indexOf(\"network\"))t=h.PNNetworkIssuesCategory,s=\"Network issues\";else if(\"TypeError\"===n)t=h.PNBadRequestCategory;else if(\"FetchError\"===n){const n=e.code;[\"ECONNREFUSED\",\"ENETUNREACH\",\"ENOTFOUND\",\"ECONNRESET\",\"EAI_AGAIN\"].includes(n)&&(t=h.PNNetworkIssuesCategory),\"ECONNREFUSED\"===n?s=\"Connection refused\":\"ENETUNREACH\"===n?s=\"Network not reachable\":\"ENOTFOUND\"===n?s=\"Server not found\":\"ECONNRESET\"===n?s=\"Connection reset by peer\":\"EAI_AGAIN\"===n?s=\"Name resolution error\":\"ETIMEDOUT\"===n?(t=h.PNTimeoutCategory,s=\"Request timeout\"):s=`Unknown system error: ${e}`}else\"Request timeout\"===s&&(t=h.PNTimeoutCategory);return new A(s,t,0,e)}static createFromServiceResponse(e,t){let s,n=h.PNUnknownCategory,r=\"Unknown error\",{status:i}=e;if(null!=t||(t=e.body),402===i?r=\"Not available for used key set. Contact support@pubnub.com\":400===i?(n=h.PNBadRequestCategory,r=\"Bad request\"):403===i&&(n=h.PNAccessDeniedCategory,r=\"Access denied\"),t&&t.byteLength>0){const n=(new TextDecoder).decode(t);if(-1!==e.headers[\"content-type\"].indexOf(\"text/javascript\")||-1!==e.headers[\"content-type\"].indexOf(\"application/json\"))try{const e=JSON.parse(n);\"object\"!=typeof e||Array.isArray(e)||(\"error\"in e&&(1===e.error||!0===e.error)&&\"status\"in e&&\"number\"==typeof e.status&&\"message\"in e&&\"service\"in e?(s=e,i=e.status):s=e,\"error\"in e&&e.error instanceof Error&&(s=e.error))}catch(e){s=n}else if(-1!==e.headers[\"content-type\"].indexOf(\"xml\")){const e=/<Message>(.*)<\\/Message>/gi.exec(n);r=e?`Upload to bucket failed: ${e[1]}`:\"Upload to bucket failed.\"}else s=n}return new A(r,n,i,s)}constructor(e,t,s,n){super(e),this.category=t,this.statusCode=s,this.errorData=n,this.name=\"PubNubAPIError\"}toStatus(e){return{error:!0,category:this.category,operation:e,statusCode:this.statusCode,errorData:this.errorData}}toPubNubError(e,t){return new d(null!=t?t:this.message,this.toStatus(e))}}class j{constructor(e){this.configuration=e,this.subscriptionWorkerReady=!1,this.workerEventsQueue=[],this.callbacks=new Map,this.setupSubscriptionWorker()}makeSendable(e){if(!e.path.startsWith(\"/v2/subscribe\")&&!e.path.endsWith(\"/leave\"))return this.configuration.transport.makeSendable(e);let t;const s={type:\"send-request\",clientIdentifier:this.configuration.clientIdentifier,subscriptionKey:this.configuration.subscriptionKey,logVerbosity:this.configuration.logVerbosity,request:e};return e.cancellable&&(t={abort:()=>{const t={type:\"cancel-request\",clientIdentifier:this.configuration.clientIdentifier,subscriptionKey:this.configuration.subscriptionKey,logVerbosity:this.configuration.logVerbosity,identifier:e.identifier};this.scheduleEventPost(t)}}),[new Promise(((t,n)=>{this.callbacks.set(e.identifier,{resolve:t,reject:n}),this.scheduleEventPost(s)})),t]}request(e){return e}scheduleEventPost(e,t=!1){const s=this.sharedSubscriptionWorker;s?s.port.postMessage(e):t?this.workerEventsQueue.splice(0,0,e):this.workerEventsQueue.push(e)}flushScheduledEvents(){const e=this.sharedSubscriptionWorker;if(!e||0===this.workerEventsQueue.length)return;const t=[];for(let e=0;e<this.workerEventsQueue.length;e++){const s=this.workerEventsQueue[e];if(\"cancel-request\"===s.type&&0!==e)for(let n=0;n<e;n++){const e=this.workerEventsQueue[n];if(\"send-request\"===e.type&&e.request.identifier===s.identifier){t.push(s,e);break}}}this.workerEventsQueue=this.workerEventsQueue.filter((e=>!t.includes(e))),this.workerEventsQueue.forEach((t=>e.port.postMessage(t))),this.workerEventsQueue=[]}get sharedSubscriptionWorker(){return this.subscriptionWorkerReady?this.subscriptionWorker:null}setupSubscriptionWorker(){\"undefined\"!=typeof SharedWorker&&(this.subscriptionWorker=new SharedWorker(this.configuration.workerUrl,`/pubnub-${this.configuration.sdkVersion}`),this.subscriptionWorker.port.start(),this.scheduleEventPost({type:\"client-register\",clientIdentifier:this.configuration.clientIdentifier,subscriptionKey:this.configuration.subscriptionKey,userId:this.configuration.userId,logVerbosity:this.configuration.logVerbosity,workerLogVerbosity:this.configuration.workerLogVerbosity},!0),this.subscriptionWorker.port.onmessage=e=>this.handleWorkerEvent(e))}handleWorkerEvent(e){const{data:t}=e;if(\"shared-worker-ping\"===t.type||\"shared-worker-connected\"===t.type||\"shared-worker-console-log\"===t.type||\"shared-worker-console-dir\"===t.type||t.clientIdentifier===this.configuration.clientIdentifier)if(\"shared-worker-connected\"===t.type)this.subscriptionWorkerReady=!0,this.flushScheduledEvents();else if(\"shared-worker-console-log\"===t.type)console.log(`[SharedWorker] ${t.message}`);else if(\"shared-worker-console-dir\"===t.type)t.message&&console.log(`[SharedWorker] ${t.message}`),console.dir(t.data);else if(\"shared-worker-ping\"===t.type){const{logVerbosity:e,subscriptionKey:t,clientIdentifier:s}=this.configuration;this.scheduleEventPost({type:\"client-pong\",subscriptionKey:t,clientIdentifier:s,logVerbosity:e})}else if(\"request-progress-start\"===t.type||\"request-progress-end\"===t.type)this.logRequestProgress(t);else if(\"request-process-success\"===t.type||\"request-process-error\"===t.type){const{resolve:e,reject:s}=this.callbacks.get(t.identifier);if(\"request-process-success\"===t.type)e({status:t.response.status,url:t.url,headers:t.response.headers,body:t.response.body});else{let e=h.PNUnknownCategory,n=\"Unknown error\";if(t.error)\"NETWORK_ISSUE\"===t.error.type?e=h.PNNetworkIssuesCategory:\"TIMEOUT\"===t.error.type?e=h.PNTimeoutCategory:\"ABORTED\"===t.error.type&&(e=h.PNCancelledCategory),n=`${t.error.message} (${t.identifier})`;else if(t.response)return s(A.create({url:t.url,headers:t.response.headers,body:t.response.body,status:t.response.status},t.response.body));s(new A(n,e,0,new Error(n)))}}}logRequestProgress(e){var t,s;\"request-progress-start\"===e.type?(console.log(\"<<<<<\"),console.log(`[${e.timestamp}] ${e.url}\\n${JSON.stringify(null!==(t=e.query)&&void 0!==t?t:{})}`),console.log(\"-----\")):(console.log(\">>>>>>\"),console.log(`[${e.timestamp} / ${e.duration}] ${e.url}\\n${JSON.stringify(null!==(s=e.query)&&void 0!==s?s:{})}\\n${e.response}`),console.log(\"-----\"))}}const I=e=>encodeURIComponent(e).replace(/[!~*'()]/g,(e=>`%${e.charCodeAt(0).toString(16).toUpperCase()}`)),R=(e,t)=>{const s=e.map((e=>I(e)));return s.length?s.join(\",\"):null!=t?t:\"\"},U=(e,t)=>{const s=Object.fromEntries(t.map((e=>[e,!1])));return e.filter((e=>!(t.includes(e)&&!s[e])||(s[e]=!0,!1)))},T=(e,t)=>[...e].filter((s=>t.includes(s)&&e.indexOf(s)===e.lastIndexOf(s)&&t.indexOf(s)===t.lastIndexOf(s)));class F{constructor(e=!1,t){this.keepAlive=e,this.logVerbosity=t}makeSendable(e){let t,s;return e.cancellable&&(s=new AbortController,t={abortController:s,abort:()=>null==s?void 0:s.abort()}),[this.requestFromTransportRequest(e).then((t=>{const n=(new Date).getTime();this.logRequestProcessProgress(t);const r=new Promise(((t,s)=>{const n=setTimeout((()=>{clearTimeout(n),s(new Error(\"Request timeout\"))}),1e3*e.timeout)}));return Promise.race([fetch(t,{signal:null==s?void 0:s.signal}),r]).then((e=>e.arrayBuffer().then((t=>[e,t])))).then((e=>{const s=e[1].byteLength>0?e[1]:void 0,{status:r,headers:i}=e[0],o={};i.forEach(((e,t)=>o[t]=e.toLowerCase()));const a={status:r,url:t.url,headers:o,body:s};if(r>=400)throw A.create(a);return this.logRequestProcessProgress(t,(new Date).getTime()-n,s),a})).catch((e=>{throw A.create(e)}))})),t]}request(e){return e}requestFromTransportRequest(e){return i(this,void 0,void 0,(function*(){let t,s=e.path;if(e.formData&&e.formData.length>0){e.queryParameters={};const s=e.body,n=new FormData;for(const{key:t,value:s}of e.formData)n.append(t,s);try{const e=yield s.toArrayBuffer();n.append(\"file\",new Blob([e],{type:\"application/octet-stream\"}),s.name)}catch(e){try{const e=yield s.toFileUri();n.append(\"file\",e,s.name)}catch(e){}}t=n}else e.body&&(\"string\"==typeof e.body||e.body instanceof ArrayBuffer)&&(t=e.body);var n;return e.queryParameters&&0!==Object.keys(e.queryParameters).length&&(s=`${s}?${n=e.queryParameters,Object.keys(n).map((e=>{const t=n[e];return Array.isArray(t)?t.map((t=>`${e}=${I(t)}`)).join(\"&\"):`${e}=${I(t)}`})).join(\"&\")}`),new Request(`${e.origin}${s}`,{method:e.method,headers:e.headers,redirect:\"follow\",body:t})}))}logRequestProcessProgress(e,t,s){if(!this.logVerbosity)return;const{protocol:n,host:r,pathname:i,search:o}=new URL(e.url),a=(new Date).toISOString();if(t){const e=s?F.decoder.decode(s):void 0;console.log(\">>>>>>\"),console.log(`[${a} / ${t}]`,`\\n${n}//${r}${i}`,`\\n${o}`,`\\n${e}`),console.log(\"-----\")}else console.log(\"<<<<<\"),console.log(`[${a}]`,`\\n${n}//${r}${i}`,`\\n${o}`),console.log(\"-----\")}}function x(e){const t=e=>\"object\"==typeof e&&null!==e&&e.constructor===Object,s=e=>\"number\"==typeof e&&isFinite(e);if(!t(e))return e;const n={};return Object.keys(e).forEach((r=>{const i=(e=>\"string\"==typeof e||e instanceof String)(r);let o=r;const a=e[r];if(i&&r.indexOf(\",\")>=0){o=r.split(\",\").map(Number).reduce(((e,t)=>e+String.fromCharCode(t)),\"\")}else(s(r)||i&&!isNaN(Number(r)))&&(o=String.fromCharCode(s(r)?r:parseInt(r,10)));n[o]=t(a)?x(a):a})),n}F.decoder=new TextDecoder;const D=e=>{var t,s,n;return e.subscriptionWorkerUrl&&\"undefined\"==typeof SharedWorker&&(e.subscriptionWorkerUrl=null),Object.assign(Object.assign({},(e=>{var t,s,n,r,i,o,a,c,u,l,h,p,g,y;const f=Object.assign({},e);if(null!==(t=f.logVerbosity)&&void 0!==t||(f.logVerbosity=!1),null!==(s=f.ssl)&&void 0!==s||(f.ssl=!0),null!==(n=f.transactionalRequestTimeout)&&void 0!==n||(f.transactionalRequestTimeout=15),null!==(r=f.subscribeRequestTimeout)&&void 0!==r||(f.subscribeRequestTimeout=310),null!==(i=f.restore)&&void 0!==i||(f.restore=!1),null!==(o=f.useInstanceId)&&void 0!==o||(f.useInstanceId=!1),null!==(a=f.suppressLeaveEvents)&&void 0!==a||(f.suppressLeaveEvents=!1),null!==(c=f.requestMessageCountThreshold)&&void 0!==c||(f.requestMessageCountThreshold=100),null!==(u=f.autoNetworkDetection)&&void 0!==u||(f.autoNetworkDetection=!1),null!==(l=f.enableEventEngine)&&void 0!==l||(f.enableEventEngine=!1),null!==(h=f.maintainPresenceState)&&void 0!==h||(f.maintainPresenceState=!0),null!==(p=f.keepAlive)&&void 0!==p||(f.keepAlive=!1),f.userId&&f.uuid)throw new d(\"PubNub client configuration error: use only 'userId'\");if(null!==(g=f.userId)&&void 0!==g||(f.userId=f.uuid),!f.userId)throw new d(\"PubNub client configuration error: 'userId' not set\");if(0===(null===(y=f.userId)||void 0===y?void 0:y.trim().length))throw new d(\"PubNub client configuration error: 'userId' is empty\");f.origin||(f.origin=Array.from({length:20},((e,t)=>`ps${t+1}.pndsn.com`)));const m={subscribeKey:f.subscribeKey,publishKey:f.publishKey,secretKey:f.secretKey};void 0!==f.presenceTimeout&&f.presenceTimeout<20&&(f.presenceTimeout=20,console.log(\"WARNING: Presence timeout is less than the minimum. Using minimum value: \",20)),void 0!==f.presenceTimeout?f.heartbeatInterval=f.presenceTimeout/2-1:f.presenceTimeout=300;let b=!1,v=!0,w=5,S=!1,k=!0;return void 0!==f.dedupeOnSubscribe&&\"boolean\"==typeof f.dedupeOnSubscribe&&(S=f.dedupeOnSubscribe),void 0!==f.useRequestId&&\"boolean\"==typeof f.useRequestId&&(k=f.useRequestId),void 0!==f.announceSuccessfulHeartbeats&&\"boolean\"==typeof f.announceSuccessfulHeartbeats&&(b=f.announceSuccessfulHeartbeats),void 0!==f.announceFailedHeartbeats&&\"boolean\"==typeof f.announceFailedHeartbeats&&(v=f.announceFailedHeartbeats),void 0!==f.fileUploadPublishRetryLimit&&\"number\"==typeof f.fileUploadPublishRetryLimit&&(w=f.fileUploadPublishRetryLimit),Object.assign(Object.assign({},f),{keySet:m,dedupeOnSubscribe:S,maximumCacheSize:100,useRequestId:k,announceSuccessfulHeartbeats:b,announceFailedHeartbeats:v,fileUploadPublishRetryLimit:w})})(e)),{listenToBrowserNetworkEvents:null===(t=e.listenToBrowserNetworkEvents)||void 0===t||t,subscriptionWorkerUrl:e.subscriptionWorkerUrl,subscriptionWorkerLogVerbosity:null!==(s=e.subscriptionWorkerLogVerbosity)&&void 0!==s&&s,keepAlive:null===(n=e.keepAlive)||void 0===n||n})};var q={exports:{}};\n/*! lil-uuid - v0.1 - MIT License - https://github.com/lil-js/uuid */!function(e,t){!function(e){var t=\"0.1.0\",s={3:/^[0-9A-F]{8}-[0-9A-F]{4}-3[0-9A-F]{3}-[0-9A-F]{4}-[0-9A-F]{12}$/i,4:/^[0-9A-F]{8}-[0-9A-F]{4}-4[0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$/i,5:/^[0-9A-F]{8}-[0-9A-F]{4}-5[0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$/i,all:/^[0-9A-F]{8}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{12}$/i};function n(){var e,t,s=\"\";for(e=0;e<32;e++)t=16*Math.random()|0,8!==e&&12!==e&&16!==e&&20!==e||(s+=\"-\"),s+=(12===e?4:16===e?3&t|8:t).toString(16);return s}function r(e,t){var n=s[t||\"all\"];return n&&n.test(e)||!1}n.isUUID=r,n.VERSION=t,e.uuid=n,e.isUUID=r}(t),null!==e&&(e.exports=t.uuid)}(q,q.exports);var G=t(q.exports),K={createUUID:()=>G.uuid?G.uuid():G()};const $=(e,t)=>{var s,n,r;null===(s=e.retryConfiguration)||void 0===s||s.validate(),null!==(n=e.useRandomIVs)&&void 0!==n||(e.useRandomIVs=true),e.origin=L(null!==(r=e.ssl)&&void 0!==r&&r,e.origin);const i=e.cryptoModule;i&&delete e.cryptoModule;const o=Object.assign(Object.assign({},e),{_pnsdkSuffix:{},_instanceId:`pn-${K.createUUID()}`,_cryptoModule:void 0,_cipherKey:void 0,_setupCryptoModule:t,get instanceId(){if(this.useInstanceId)return this._instanceId},getUserId(){return this.userId},setUserId(e){if(!e||\"string\"!=typeof e||0===e.trim().length)throw new Error(\"Missing or invalid userId parameter. Provide a valid string userId\");this.userId=e},getAuthKey(){return this.authKey},setAuthKey(e){this.authKey=e},getFilterExpression(){return this.filterExpression},setFilterExpression(e){this.filterExpression=e},getCipherKey(){return this._cipherKey},setCipherKey(t){this._cipherKey=t,t||!this._cryptoModule?t&&this._setupCryptoModule&&(this._cryptoModule=this._setupCryptoModule({cipherKey:t,useRandomIVs:e.useRandomIVs,customEncrypt:this.getCustomEncrypt(),customDecrypt:this.getCustomDecrypt()})):this._cryptoModule=void 0},getCryptoModule(){return this._cryptoModule},getUseRandomIVs:()=>e.useRandomIVs,setPresenceTimeout(e){this.heartbeatInterval=e/2-1,this.presenceTimeout=e},getPresenceTimeout(){return this.presenceTimeout},getHeartbeatInterval(){return this.heartbeatInterval},setHeartbeatInterval(e){this.heartbeatInterval=e},getTransactionTimeout(){return this.transactionalRequestTimeout},getSubscribeTimeout(){return this.subscribeRequestTimeout},get PubNubFile(){return e.PubNubFile},get version(){return\"8.2.4\"},getVersion(){return this.version},_addPnsdkSuffix(e,t){this._pnsdkSuffix[e]=`${t}`},_getPnsdkSuffix(e){const t=Object.values(this._pnsdkSuffix).join(e);return t.length>0?e+t:\"\"},getUUID(){return this.getUserId()},setUUID(e){this.setUserId(e)},getCustomEncrypt:()=>e.customEncrypt,getCustomDecrypt:()=>e.customDecrypt});return e.cipherKey?o.setCipherKey(e.cipherKey):i&&(o._cryptoModule=i),o},L=(e,t)=>{const s=e?\"https://\":\"http://\";return\"string\"==typeof t?`${s}${t}`:`${s}${t[Math.floor(Math.random()*t.length)]}`};class B{constructor(e){this.cbor=e}setToken(e){e&&e.length>0?this.token=e:this.token=void 0}getToken(){return this.token}parseToken(e){const t=this.cbor.decodeToken(e);if(void 0!==t){const e=t.res.uuid?Object.keys(t.res.uuid):[],s=Object.keys(t.res.chan),n=Object.keys(t.res.grp),r=t.pat.uuid?Object.keys(t.pat.uuid):[],i=Object.keys(t.pat.chan),o=Object.keys(t.pat.grp),a={version:t.v,timestamp:t.t,ttl:t.ttl,authorized_uuid:t.uuid,signature:t.sig},c=e.length>0,u=s.length>0,l=n.length>0;if(c||u||l){if(a.resources={},c){const s=a.resources.uuids={};e.forEach((e=>s[e]=this.extractPermissions(t.res.uuid[e])))}if(u){const e=a.resources.channels={};s.forEach((s=>e[s]=this.extractPermissions(t.res.chan[s])))}if(l){const e=a.resources.groups={};n.forEach((s=>e[s]=this.extractPermissions(t.res.grp[s])))}}const h=r.length>0,d=i.length>0,p=o.length>0;if(h||d||p){if(a.patterns={},h){const e=a.patterns.uuids={};r.forEach((s=>e[s]=this.extractPermissions(t.pat.uuid[s])))}if(d){const e=a.patterns.channels={};i.forEach((s=>e[s]=this.extractPermissions(t.pat.chan[s])))}if(p){const e=a.patterns.groups={};o.forEach((s=>e[s]=this.extractPermissions(t.pat.grp[s])))}}return t.meta&&Object.keys(t.meta).length>0&&(a.meta=t.meta),a}}extractPermissions(e){const t={read:!1,write:!1,manage:!1,delete:!1,get:!1,update:!1,join:!1};return 128&~e||(t.join=!0),64&~e||(t.update=!0),32&~e||(t.get=!0),8&~e||(t.delete=!0),4&~e||(t.manage=!0),2&~e||(t.write=!0),1&~e||(t.read=!0),t}}var H;!function(e){e.GET=\"GET\",e.POST=\"POST\",e.PATCH=\"PATCH\",e.DELETE=\"DELETE\",e.LOCAL=\"LOCAL\"}(H||(H={}));class z{constructor(e,t,s){this.publishKey=e,this.secretKey=t,this.hasher=s}signature(e){const t=e.path.startsWith(\"/publish\")?H.GET:e.method;let s=`${t}\\n${this.publishKey}\\n${e.path}\\n${this.queryParameters(e.queryParameters)}\\n`;if(t===H.POST||t===H.PATCH){const t=e.body;let n;t&&t instanceof ArrayBuffer?n=z.textDecoder.decode(t):t&&\"object\"!=typeof t&&(n=t),n&&(s+=n)}return`v2.${this.hasher(s,this.secretKey)}`.replace(/\\+/g,\"-\").replace(/\\//g,\"_\").replace(/=+$/,\"\")}queryParameters(e){return Object.keys(e).sort().map((t=>{const s=e[t];return Array.isArray(s)?s.sort().map((e=>`${t}=${I(e)}`)).join(\"&\"):`${t}=${I(s)}`})).join(\"&\")}}z.textDecoder=new TextDecoder(\"utf-8\");class V{constructor(e){this.configuration=e;const{clientConfiguration:{keySet:t},shaHMAC:s}=e;t.secretKey&&s&&(this.signatureGenerator=new z(t.publishKey,t.secretKey,s))}makeSendable(e){return this.configuration.transport.makeSendable(this.request(e))}request(e){var t;const{clientConfiguration:s}=this.configuration;return(e=this.configuration.transport.request(e)).queryParameters||(e.queryParameters={}),s.useInstanceId&&(e.queryParameters.instanceid=s.instanceId),e.queryParameters.uuid||(e.queryParameters.uuid=s.userId),s.useRequestId&&(e.queryParameters.requestid=e.identifier),e.queryParameters.pnsdk=this.generatePNSDK(),null!==(t=e.origin)&&void 0!==t||(e.origin=s.origin),this.authenticateRequest(e),this.signRequest(e),e}authenticateRequest(e){var t;if(e.path.startsWith(\"/v2/auth/\")||e.path.startsWith(\"/v3/pam/\")||e.path.startsWith(\"/time\"))return;const{clientConfiguration:s,tokenManager:n}=this.configuration,r=null!==(t=n&&n.getToken())&&void 0!==t?t:s.authKey;r&&(e.queryParameters.auth=r)}signRequest(e){this.signatureGenerator&&!e.path.startsWith(\"/time\")&&(e.queryParameters.timestamp=String(Math.floor((new Date).getTime()/1e3)),e.queryParameters.signature=this.signatureGenerator.signature(e))}generatePNSDK(){const{clientConfiguration:e}=this.configuration;if(e.sdkName)return e.sdkName;let t=`PubNub-JS-${e.sdkFamily}`;e.partnerId&&(t+=`-${e.partnerId}`),t+=`/${e.getVersion()}`;const s=e._getPnsdkSuffix(\" \");return s.length>0&&(t+=s),t}}class W{constructor(){this.listeners=[]}addListener(e){this.listeners.includes(e)||this.listeners.push(e)}removeListener(e){this.listeners=this.listeners.filter((t=>t!==e))}removeAllListeners(){this.listeners=[]}announceStatus(e){this.listeners.forEach((t=>{t.status&&t.status(e)}))}announcePresence(e){this.listeners.forEach((t=>{t.presence&&t.presence(e)}))}announceMessage(e){this.listeners.forEach((t=>{t.message&&t.message(e)}))}announceSignal(e){this.listeners.forEach((t=>{t.signal&&t.signal(e)}))}announceMessageAction(e){this.listeners.forEach((t=>{t.messageAction&&t.messageAction(e)}))}announceFile(e){this.listeners.forEach((t=>{t.file&&t.file(e)}))}announceObjects(e){this.listeners.forEach((t=>{t.objects&&t.objects(e)}))}announceNetworkUp(){this.listeners.forEach((e=>{e.status&&e.status({category:h.PNNetworkUpCategory})}))}announceNetworkDown(){this.listeners.forEach((e=>{e.status&&e.status({category:h.PNNetworkDownCategory})}))}announceUser(e){this.listeners.forEach((t=>{t.user&&t.user(e)}))}announceSpace(e){this.listeners.forEach((t=>{t.space&&t.space(e)}))}announceMembership(e){this.listeners.forEach((t=>{t.membership&&t.membership(e)}))}}class J{constructor(e){this.time=e}onReconnect(e){this.callback=e}startPolling(){this.timeTimer=setInterval((()=>this.callTime()),3e3)}stopPolling(){this.timeTimer&&clearInterval(this.timeTimer),this.timeTimer=null}callTime(){this.time((e=>{e.error||(this.stopPolling(),this.callback&&this.callback())}))}}class Q{_config;hashHistory;constructor({config:e}){this.hashHistory=[],this._config=e}getKey(e){const t=(e=>{let t=0;if(0===e.length)return t;for(let s=0;s<e.length;s+=1)t=(t<<5)-t+e.charCodeAt(s),t|=0;return t})(JSON.stringify(e.message)).toString();return`${e.timetoken}-${t}`}isDuplicate(e){return this.hashHistory.includes(this.getKey(e))}addEntry(e){this.hashHistory.length>=this._config.maximumCacheSize&&this.hashHistory.shift(),this.hashHistory.push(this.getKey(e))}clearHistory(){this.hashHistory=[]}}class Y{constructor(e,t,s,n,r,i,o){this.configuration=e,this.listenerManager=t,this.eventEmitter=s,this.subscribeCall=n,this.heartbeatCall=r,this.leaveCall=i,this.reconnectionManager=new J(o),this.dedupingManager=new Q({config:this.configuration}),this.heartbeatChannelGroups={},this.heartbeatChannels={},this.presenceChannelGroups={},this.presenceChannels={},this.heartbeatTimer=null,this.presenceState={},this.pendingChannelGroupSubscriptions=new Set,this.pendingChannelSubscriptions=new Set,this.channelGroups={},this.channels={},this.currentTimetoken=\"0\",this.lastTimetoken=\"0\",this.storedTimetoken=null,this.subscriptionStatusAnnounced=!1,this.isOnline=!0}get subscribedChannels(){return Object.keys(this.channels)}get subscribedChannelGroups(){return Object.keys(this.channelGroups)}get abort(){return this._subscribeAbort}set abort(e){this._subscribeAbort=e}disconnect(){this.stopSubscribeLoop(),this.stopHeartbeatTimer(),this.reconnectionManager.stopPolling()}reconnect(){this.startSubscribeLoop(),this.startHeartbeatTimer()}subscribe(e){const{channels:t,channelGroups:s,timetoken:n,withPresence:r=!1,withHeartbeats:i=!1}=e;n&&(this.lastTimetoken=this.currentTimetoken,this.currentTimetoken=n),\"0\"!==this.currentTimetoken&&0!==this.currentTimetoken&&(this.storedTimetoken=this.currentTimetoken,this.currentTimetoken=0),null==t||t.forEach((e=>{this.pendingChannelSubscriptions.add(e),this.channels[e]={},r&&(this.presenceChannels[e]={}),(i||this.configuration.getHeartbeatInterval())&&(this.heartbeatChannels[e]={})})),null==s||s.forEach((e=>{this.pendingChannelGroupSubscriptions.add(e),this.channelGroups[e]={},r&&(this.presenceChannelGroups[e]={}),(i||this.configuration.getHeartbeatInterval())&&(this.heartbeatChannelGroups[e]={})})),this.subscriptionStatusAnnounced=!1,this.reconnect()}unsubscribe(e,t){let{channels:s,channelGroups:n}=e;const i=new Set,o=new Set;null==s||s.forEach((e=>{e in this.channels&&(delete this.channels[e],o.add(e),e in this.heartbeatChannels&&delete this.heartbeatChannels[e]),e in this.presenceState&&delete this.presenceState[e],e in this.presenceChannels&&(delete this.presenceChannels[e],o.add(e))})),null==n||n.forEach((e=>{e in this.channelGroups&&(delete this.channelGroups[e],i.add(e),e in this.heartbeatChannelGroups&&delete this.heartbeatChannelGroups[e]),e in this.presenceState&&delete this.presenceState[e],e in this.presenceChannelGroups&&(delete this.presenceChannelGroups[e],i.add(e))})),0===o.size&&0===i.size||(!1!==this.configuration.suppressLeaveEvents||t||(n=Array.from(i),s=Array.from(o),this.leaveCall({channels:s,channelGroups:n},(e=>{const{error:t}=e,i=r(e,[\"error\"]);let o;t&&(e.errorData&&\"object\"==typeof e.errorData&&\"message\"in e.errorData&&\"string\"==typeof e.errorData.message?o=e.errorData.message:\"message\"in e&&\"string\"==typeof e.message&&(o=e.message)),this.listenerManager.announceStatus(Object.assign(Object.assign({},i),{error:null!=o&&o,affectedChannels:s,affectedChannelGroups:n,currentTimetoken:this.currentTimetoken,lastTimetoken:this.lastTimetoken}))}))),0===Object.keys(this.channels).length&&0===Object.keys(this.presenceChannels).length&&0===Object.keys(this.channelGroups).length&&0===Object.keys(this.presenceChannelGroups).length&&(this.lastTimetoken=0,this.currentTimetoken=0,this.storedTimetoken=null,this.region=null,this.reconnectionManager.stopPolling()),this.reconnect())}unsubscribeAll(e){this.unsubscribe({channels:this.subscribedChannels,channelGroups:this.subscribedChannelGroups},e)}startSubscribeLoop(){this.stopSubscribeLoop();const e=[...Object.keys(this.channelGroups)],t=[...Object.keys(this.channels)];Object.keys(this.presenceChannelGroups).forEach((t=>e.push(`${t}-pnpres`))),Object.keys(this.presenceChannels).forEach((e=>t.push(`${e}-pnpres`))),0===t.length&&0===e.length||this.subscribeCall({channels:t,channelGroups:e,state:this.presenceState,heartbeat:this.configuration.getPresenceTimeout(),timetoken:this.currentTimetoken,region:null!==this.region?this.region:void 0,filterExpression:this.configuration.filterExpression},((e,t)=>{this.processSubscribeResponse(e,t)}))}stopSubscribeLoop(){this._subscribeAbort&&(this._subscribeAbort(),this._subscribeAbort=null)}processSubscribeResponse(e,t){if(e.error){if(\"object\"==typeof e.errorData&&\"name\"in e.errorData&&\"AbortError\"===e.errorData.name||e.category===h.PNCancelledCategory)return;return void(e.category===h.PNTimeoutCategory?this.startSubscribeLoop():e.category===h.PNNetworkIssuesCategory?(this.disconnect(),e.error&&this.configuration.autoNetworkDetection&&this.isOnline&&(this.isOnline=!1,this.listenerManager.announceNetworkDown()),this.reconnectionManager.onReconnect((()=>{this.configuration.autoNetworkDetection&&!this.isOnline&&(this.isOnline=!0,this.listenerManager.announceNetworkUp()),this.reconnect(),this.subscriptionStatusAnnounced=!0;const t={category:h.PNReconnectedCategory,operation:e.operation,lastTimetoken:this.lastTimetoken,currentTimetoken:this.currentTimetoken};this.listenerManager.announceStatus(t)})),this.reconnectionManager.startPolling(),this.listenerManager.announceStatus(e)):e.category===h.PNBadRequestCategory?(this.stopHeartbeatTimer(),this.listenerManager.announceStatus(e)):this.listenerManager.announceStatus(e))}if(this.storedTimetoken?(this.currentTimetoken=this.storedTimetoken,this.storedTimetoken=null):(this.lastTimetoken=this.currentTimetoken,this.currentTimetoken=t.cursor.timetoken),!this.subscriptionStatusAnnounced){const t={category:h.PNConnectedCategory,operation:e.operation,affectedChannels:Array.from(this.pendingChannelSubscriptions),subscribedChannels:this.subscribedChannels,affectedChannelGroups:Array.from(this.pendingChannelGroupSubscriptions),lastTimetoken:this.lastTimetoken,currentTimetoken:this.currentTimetoken};this.subscriptionStatusAnnounced=!0,this.listenerManager.announceStatus(t),this.pendingChannelGroupSubscriptions.clear(),this.pendingChannelSubscriptions.clear()}const{messages:s}=t,{requestMessageCountThreshold:n,dedupeOnSubscribe:r}=this.configuration;n&&s.length>=n&&this.listenerManager.announceStatus({category:h.PNRequestMessageCountExceededCategory,operation:e.operation});try{s.forEach((e=>{if(r){if(this.dedupingManager.isDuplicate(e.data))return;this.dedupingManager.addEntry(e.data)}this.eventEmitter.emitEvent(e)}))}catch(e){const t={error:!0,category:h.PNUnknownCategory,errorData:e,statusCode:0};this.listenerManager.announceStatus(t)}this.region=t.cursor.region,this.startSubscribeLoop()}setState(e){const{state:t,channels:s,channelGroups:n}=e;null==s||s.forEach((e=>e in this.channels&&(this.presenceState[e]=t))),null==n||n.forEach((e=>e in this.channelGroups&&(this.presenceState[e]=t)))}changePresence(e){const{connected:t,channels:s,channelGroups:n}=e;t?(null==s||s.forEach((e=>this.heartbeatChannels[e]={})),null==n||n.forEach((e=>this.heartbeatChannelGroups[e]={}))):(null==s||s.forEach((e=>{e in this.heartbeatChannels&&delete this.heartbeatChannels[e]})),null==n||n.forEach((e=>{e in this.heartbeatChannelGroups&&delete this.heartbeatChannelGroups[e]})),!1===this.configuration.suppressLeaveEvents&&this.leaveCall({channels:s,channelGroups:n},(e=>this.listenerManager.announceStatus(e)))),this.reconnect()}startHeartbeatTimer(){this.stopHeartbeatTimer();const e=this.configuration.getHeartbeatInterval();e&&0!==e&&(this.sendHeartbeat(),this.heartbeatTimer=setInterval((()=>this.sendHeartbeat()),1e3*e))}stopHeartbeatTimer(){this.heartbeatTimer&&(clearInterval(this.heartbeatTimer),this.heartbeatTimer=null)}sendHeartbeat(){const e=Object.keys(this.heartbeatChannelGroups),t=Object.keys(this.heartbeatChannels);0===t.length&&0===e.length||this.heartbeatCall({channels:t,channelGroups:e,heartbeat:this.configuration.getPresenceTimeout(),state:this.presenceState},(e=>{e.error&&this.configuration.announceFailedHeartbeats&&this.listenerManager.announceStatus(e),e.error&&this.configuration.autoNetworkDetection&&this.isOnline&&(this.isOnline=!1,this.disconnect(),this.listenerManager.announceNetworkDown(),this.reconnect()),!e.error&&this.configuration.announceSuccessfulHeartbeats&&this.listenerManager.announceStatus(e)}))}}class X{constructor(e,t,s){this._payload=e,this.setDefaultPayloadStructure(),this.title=t,this.body=s}get payload(){return this._payload}set title(e){this._title=e}set subtitle(e){this._subtitle=e}set body(e){this._body=e}set badge(e){this._badge=e}set sound(e){this._sound=e}setDefaultPayloadStructure(){}toObject(){return{}}}class Z extends X{constructor(){super(...arguments),this._apnsPushType=\"apns\",this._isSilent=!1}get payload(){return this._payload}set configurations(e){e&&e.length&&(this._configurations=e)}get notification(){return this.payload.aps}get title(){return this._title}set title(e){e&&e.length&&(this.payload.aps.alert.title=e,this._title=e)}get subtitle(){return this._subtitle}set subtitle(e){e&&e.length&&(this.payload.aps.alert.subtitle=e,this._subtitle=e)}get body(){return this._body}set body(e){e&&e.length&&(this.payload.aps.alert.body=e,this._body=e)}get badge(){return this._badge}set badge(e){null!=e&&(this.payload.aps.badge=e,this._badge=e)}get sound(){return this._sound}set sound(e){e&&e.length&&(this.payload.aps.sound=e,this._sound=e)}set silent(e){this._isSilent=e}setDefaultPayloadStructure(){this.payload.aps={alert:{}}}toObject(){const e=Object.assign({},this.payload),{aps:t}=e;let{alert:s}=t;if(this._isSilent&&(t[\"content-available\"]=1),\"apns2\"===this._apnsPushType){if(!this._configurations||!this._configurations.length)throw new ReferenceError(\"APNS2 configuration is missing\");const t=[];this._configurations.forEach((e=>{t.push(this.objectFromAPNS2Configuration(e))})),t.length&&(e.pn_push=t)}return s&&Object.keys(s).length||delete t.alert,this._isSilent&&(delete t.alert,delete t.badge,delete t.sound,s={}),this._isSilent||s&&Object.keys(s).length?e:null}objectFromAPNS2Configuration(e){if(!e.targets||!e.targets.length)throw new ReferenceError(\"At least one APNS2 target should be provided\");const{collapseId:t,expirationDate:s}=e,n={auth_method:\"token\",targets:e.targets.map((e=>this.objectFromAPNSTarget(e))),version:\"v2\"};return t&&t.length&&(n.collapse_id=t),s&&(n.expiration=s.toISOString()),n}objectFromAPNSTarget(e){if(!e.topic||!e.topic.length)throw new TypeError(\"Target 'topic' undefined.\");const{topic:t,environment:s=\"development\",excludedDevices:n=[]}=e,r={topic:t,environment:s};return n.length&&(r.excluded_devices=n),r}}class ee extends X{get payload(){return this._payload}get notification(){return this.payload.notification}get data(){return this.payload.data}get title(){return this._title}set title(e){e&&e.length&&(this.payload.notification.title=e,this._title=e)}get body(){return this._body}set body(e){e&&e.length&&(this.payload.notification.body=e,this._body=e)}get sound(){return this._sound}set sound(e){e&&e.length&&(this.payload.notification.sound=e,this._sound=e)}get icon(){return this._icon}set icon(e){e&&e.length&&(this.payload.notification.icon=e,this._icon=e)}get tag(){return this._tag}set tag(e){e&&e.length&&(this.payload.notification.tag=e,this._tag=e)}set silent(e){this._isSilent=e}setDefaultPayloadStructure(){this.payload.notification={},this.payload.data={}}toObject(){let e=Object.assign({},this.payload.data),t=null;const s={};if(Object.keys(this.payload).length>2){const t=r(this.payload,[\"notification\",\"data\"]);e=Object.assign(Object.assign({},e),t)}return this._isSilent?e.notification=this.payload.notification:t=this.payload.notification,Object.keys(e).length&&(s.data=e),t&&Object.keys(t).length&&(s.notification=t),Object.keys(s).length?s:null}}class te{constructor(e,t){this._payload={apns:{},fcm:{}},this._title=e,this._body=t,this.apns=new Z(this._payload.apns,e,t),this.fcm=new ee(this._payload.fcm,e,t)}set debugging(e){this._debugging=e}get title(){return this._title}get subtitle(){return this._subtitle}set subtitle(e){this._subtitle=e,this.apns.subtitle=e,this.fcm.subtitle=e}get body(){return this._body}get badge(){return this._badge}set badge(e){this._badge=e,this.apns.badge=e,this.fcm.badge=e}get sound(){return this._sound}set sound(e){this._sound=e,this.apns.sound=e,this.fcm.sound=e}buildPayload(e){const t={};if(e.includes(\"apns\")||e.includes(\"apns2\")){this.apns._apnsPushType=e.includes(\"apns\")?\"apns\":\"apns2\";const s=this.apns.toObject();s&&Object.keys(s).length&&(t.pn_apns=s)}if(e.includes(\"fcm\")){const e=this.fcm.toObject();e&&Object.keys(e).length&&(t.pn_gcm=e)}return Object.keys(t).length&&this._debugging&&(t.pn_debug=!0),t}}class se{constructor(e){this.params=e,this.requestIdentifier=K.createUUID(),this._cancellationController=null}get cancellationController(){return this._cancellationController}set cancellationController(e){this._cancellationController=e}abort(){this&&this.cancellationController&&this.cancellationController.abort()}operation(){throw Error(\"Should be implemented by subclass.\")}validate(){}parse(e){return i(this,void 0,void 0,(function*(){throw Error(\"Should be implemented by subclass.\")}))}request(){var e,t,s,n;const r={method:null!==(t=null===(e=this.params)||void 0===e?void 0:e.method)&&void 0!==t?t:H.GET,path:this.path,queryParameters:this.queryParameters,cancellable:null!==(n=null===(s=this.params)||void 0===s?void 0:s.cancellable)&&void 0!==n&&n,timeout:1e4,identifier:this.requestIdentifier},i=this.headers;if(i&&(r.headers=i),r.method===H.POST||r.method===H.PATCH){const[e,t]=[this.body,this.formData];t&&(r.formData=t),e&&(r.body=e)}return r}get headers(){}get path(){throw Error(\"`path` getter should be implemented by subclass.\")}get queryParameters(){return{}}get formData(){}get body(){}deserializeResponse(e){const t=e.headers[\"content-type\"];if(!t||-1===t.indexOf(\"javascript\")&&-1===t.indexOf(\"json\"))return;const s=se.decoder.decode(e.body);try{return JSON.parse(s)}catch(e){return void console.error(\"Error parsing JSON response:\",e)}}}var ne;se.decoder=new TextDecoder,function(e){e.PNPublishOperation=\"PNPublishOperation\",e.PNSignalOperation=\"PNSignalOperation\",e.PNSubscribeOperation=\"PNSubscribeOperation\",e.PNUnsubscribeOperation=\"PNUnsubscribeOperation\",e.PNWhereNowOperation=\"PNWhereNowOperation\",e.PNHereNowOperation=\"PNHereNowOperation\",e.PNGlobalHereNowOperation=\"PNGlobalHereNowOperation\",e.PNSetStateOperation=\"PNSetStateOperation\",e.PNGetStateOperation=\"PNGetStateOperation\",e.PNHeartbeatOperation=\"PNHeartbeatOperation\",e.PNAddMessageActionOperation=\"PNAddActionOperation\",e.PNRemoveMessageActionOperation=\"PNRemoveMessageActionOperation\",e.PNGetMessageActionsOperation=\"PNGetMessageActionsOperation\",e.PNTimeOperation=\"PNTimeOperation\",e.PNHistoryOperation=\"PNHistoryOperation\",e.PNDeleteMessagesOperation=\"PNDeleteMessagesOperation\",e.PNFetchMessagesOperation=\"PNFetchMessagesOperation\",e.PNMessageCounts=\"PNMessageCountsOperation\",e.PNGetAllUUIDMetadataOperation=\"PNGetAllUUIDMetadataOperation\",e.PNGetUUIDMetadataOperation=\"PNGetUUIDMetadataOperation\",e.PNSetUUIDMetadataOperation=\"PNSetUUIDMetadataOperation\",e.PNRemoveUUIDMetadataOperation=\"PNRemoveUUIDMetadataOperation\",e.PNGetAllChannelMetadataOperation=\"PNGetAllChannelMetadataOperation\",e.PNGetChannelMetadataOperation=\"PNGetChannelMetadataOperation\",e.PNSetChannelMetadataOperation=\"PNSetChannelMetadataOperation\",e.PNRemoveChannelMetadataOperation=\"PNRemoveChannelMetadataOperation\",e.PNGetMembersOperation=\"PNGetMembersOperation\",e.PNSetMembersOperation=\"PNSetMembersOperation\",e.PNGetMembershipsOperation=\"PNGetMembershipsOperation\",e.PNSetMembershipsOperation=\"PNSetMembershipsOperation\",e.PNListFilesOperation=\"PNListFilesOperation\",e.PNGenerateUploadUrlOperation=\"PNGenerateUploadUrlOperation\",e.PNPublishFileOperation=\"PNPublishFileOperation\",e.PNPublishFileMessageOperation=\"PNPublishFileMessageOperation\",e.PNGetFileUrlOperation=\"PNGetFileUrlOperation\",e.PNDownloadFileOperation=\"PNDownloadFileOperation\",e.PNDeleteFileOperation=\"PNDeleteFileOperation\",e.PNAddPushNotificationEnabledChannelsOperation=\"PNAddPushNotificationEnabledChannelsOperation\",e.PNRemovePushNotificationEnabledChannelsOperation=\"PNRemovePushNotificationEnabledChannelsOperation\",e.PNPushNotificationEnabledChannelsOperation=\"PNPushNotificationEnabledChannelsOperation\",e.PNRemoveAllPushNotificationsOperation=\"PNRemoveAllPushNotificationsOperation\",e.PNChannelGroupsOperation=\"PNChannelGroupsOperation\",e.PNRemoveGroupOperation=\"PNRemoveGroupOperation\",e.PNChannelsForGroupOperation=\"PNChannelsForGroupOperation\",e.PNAddChannelsToGroupOperation=\"PNAddChannelsToGroupOperation\",e.PNRemoveChannelsFromGroupOperation=\"PNRemoveChannelsFromGroupOperation\",e.PNAccessManagerGrant=\"PNAccessManagerGrant\",e.PNAccessManagerGrantToken=\"PNAccessManagerGrantToken\",e.PNAccessManagerAudit=\"PNAccessManagerAudit\",e.PNAccessManagerRevokeToken=\"PNAccessManagerRevokeToken\",e.PNHandshakeOperation=\"PNHandshakeOperation\",e.PNReceiveMessagesOperation=\"PNReceiveMessagesOperation\"}(ne||(ne={}));var re=ne;var ie;!function(e){e[e.Presence=-2]=\"Presence\",e[e.Message=-1]=\"Message\",e[e.Signal=1]=\"Signal\",e[e.AppContext=2]=\"AppContext\",e[e.MessageAction=3]=\"MessageAction\",e[e.Files=4]=\"Files\"}(ie||(ie={}));class oe extends se{constructor(e){var t,s,n,r,i,o;super({cancellable:!0}),this.parameters=e,null!==(t=(r=this.parameters).withPresence)&&void 0!==t||(r.withPresence=false),null!==(s=(i=this.parameters).channelGroups)&&void 0!==s||(i.channelGroups=[]),null!==(n=(o=this.parameters).channels)&&void 0!==n||(o.channels=[])}operation(){return re.PNSubscribeOperation}validate(){const{keySet:{subscribeKey:e},channels:t,channelGroups:s}=this.parameters;return e?t||s?void 0:\"`channels` and `channelGroups` both should not be empty\":\"Missing Subscribe Key\"}parse(e){return i(this,void 0,void 0,(function*(){let t;try{const s=se.decoder.decode(e.body);t=JSON.parse(s)}catch(e){console.error(\"Error parsing JSON response:\",e)}if(!t)throw new d(\"Service response error, check status for details\",p(\"Unable to deserialize service response\"));const s=t.m.map((e=>{let{e:t}=e;return null!=t||(t=e.c.endsWith(\"-pnpres\")?ie.Presence:ie.Message),\"string\"==typeof e.d?t==ie.Message?{type:ie.Message,data:this.messageFromEnvelope(e)}:{type:ie.Files,data:this.fileFromEnvelope(e)}:t==ie.Message?{type:ie.Message,data:this.messageFromEnvelope(e)}:t===ie.Presence?{type:ie.Presence,data:this.presenceEventFromEnvelope(e)}:t==ie.Signal?{type:ie.Signal,data:this.signalFromEnvelope(e)}:t===ie.AppContext?{type:ie.AppContext,data:this.appContextFromEnvelope(e)}:t===ie.MessageAction?{type:ie.MessageAction,data:this.messageActionFromEnvelope(e)}:{type:ie.Files,data:this.fileFromEnvelope(e)}}));return{cursor:{timetoken:t.t.t,region:t.t.r},messages:s}}))}get headers(){return{accept:\"text/javascript\"}}presenceEventFromEnvelope(e){const{d:t}=e,[s,n]=this.subscriptionChannelFromEnvelope(e),r=s.replace(\"-pnpres\",\"\"),i=null!==n?r:null,o=null!==n?n:r;return\"string\"!=typeof t&&\"data\"in t&&(t.state=t.data,delete t.data),Object.assign({channel:r,subscription:n,actualChannel:i,subscribedChannel:o,timetoken:e.p.t},t)}messageFromEnvelope(e){const[t,s]=this.subscriptionChannelFromEnvelope(e),[n,r]=this.decryptedData(e.d),i={channel:t,subscription:s,actualChannel:null!==s?t:null,subscribedChannel:null!==s?s:t,timetoken:e.p.t,publisher:e.i,message:n};return e.u&&(i.userMetadata=e.u),r&&(i.error=r),i}signalFromEnvelope(e){const[t,s]=this.subscriptionChannelFromEnvelope(e),n={channel:t,subscription:s,timetoken:e.p.t,publisher:e.i,message:e.d};return e.u&&(n.userMetadata=e.u),n}messageActionFromEnvelope(e){const[t,s]=this.subscriptionChannelFromEnvelope(e),n=e.d;return{channel:t,subscription:s,timetoken:e.p.t,publisher:e.i,event:n.event,data:Object.assign(Object.assign({},n.data),{uuid:e.i})}}appContextFromEnvelope(e){const[t,s]=this.subscriptionChannelFromEnvelope(e),n=e.d;return{channel:t,subscription:s,timetoken:e.p.t,message:n}}fileFromEnvelope(e){const[t,s]=this.subscriptionChannelFromEnvelope(e),[n,r]=this.decryptedData(e.d);let i=r;const o={channel:t,subscription:s,timetoken:e.p.t,publisher:e.i};return e.u&&(o.userMetadata=e.u),n?\"string\"==typeof n?null!=i||(i=\"Unexpected file information payload data type.\"):(o.message=n.message,n.file&&(o.file={id:n.file.id,name:n.file.name,url:this.parameters.getFileUrl({id:n.file.id,name:n.file.name,channel:t})})):null!=i||(i=\"File information payload is missing.\"),i&&(o.error=i),o}subscriptionChannelFromEnvelope(e){return[e.c,void 0===e.b?e.c:e.b]}decryptedData(e){if(!this.parameters.crypto||\"string\"!=typeof e)return[e,void 0];let t,s;try{const s=this.parameters.crypto.decrypt(e);t=s instanceof ArrayBuffer?JSON.parse(ae.decoder.decode(s)):s}catch(e){t=null,s=`Error while decrypting message content: ${e.message}`}return[null!=t?t:e,s]}}class ae extends oe{get path(){var e;const{keySet:{subscribeKey:t},channels:s}=this.parameters;return`/v2/subscribe/${t}/${R(null!==(e=null==s?void 0:s.sort())&&void 0!==e?e:[],\",\")}/0`}get queryParameters(){const{channelGroups:e,filterExpression:t,heartbeat:s,state:n,timetoken:r,region:i}=this.parameters,o={};return e&&e.length>0&&(o[\"channel-group\"]=e.sort().join(\",\")),t&&t.length>0&&(o[\"filter-expr\"]=t),s&&(o.heartbeat=s),n&&Object.keys(n).length>0&&(o.state=JSON.stringify(n)),void 0!==r&&\"string\"==typeof r?r.length>0&&\"0\"!==r&&(o.tt=r):void 0!==r&&r>0&&(o.tt=r),i&&(o.tr=i),o}}class ce{constructor(e){this.listenerManager=e,this.channelListenerMap=new Map,this.groupListenerMap=new Map}emitEvent(e){if(e.type===ie.Message)this.listenerManager.announceMessage(e.data),this.announce(\"message\",e.data,e.data.channel,e.data.subscription);else if(e.type===ie.Signal)this.listenerManager.announceSignal(e.data),this.announce(\"signal\",e.data,e.data.channel,e.data.subscription);else if(e.type===ie.Presence)this.listenerManager.announcePresence(e.data),this.announce(\"presence\",e.data,e.data.channel,e.data.subscription);else if(e.type===ie.AppContext){const{data:t}=e,{message:s}=t;if(this.listenerManager.announceObjects(t),this.announce(\"objects\",t,t.channel,t.subscription),\"uuid\"===s.type){const{message:e,channel:n}=t,i=r(t,[\"message\",\"channel\"]),{event:o,type:a}=s,c=r(s,[\"event\",\"type\"]),u=Object.assign(Object.assign({},i),{spaceId:n,message:Object.assign(Object.assign({},c),{event:\"set\"===o?\"updated\":\"removed\",type:\"user\"})});this.listenerManager.announceUser(u),this.announce(\"user\",u,u.spaceId,u.subscription)}else if(\"channel\"===s.type){const{message:e,channel:n}=t,i=r(t,[\"message\",\"channel\"]),{event:o,type:a}=s,c=r(s,[\"event\",\"type\"]),u=Object.assign(Object.assign({},i),{spaceId:n,message:Object.assign(Object.assign({},c),{event:\"set\"===o?\"updated\":\"removed\",type:\"space\"})});this.listenerManager.announceSpace(u),this.announce(\"space\",u,u.spaceId,u.subscription)}else if(\"membership\"===s.type){const{message:e,channel:n}=t,i=r(t,[\"message\",\"channel\"]),{event:o,data:a}=s,c=r(s,[\"event\",\"data\"]),{uuid:u,channel:l}=a,h=r(a,[\"uuid\",\"channel\"]),d=Object.assign(Object.assign({},i),{spaceId:n,message:Object.assign(Object.assign({},c),{event:\"set\"===o?\"updated\":\"removed\",data:Object.assign(Object.assign({},h),{user:u,space:l})})});this.listenerManager.announceMembership(d),this.announce(\"membership\",d,d.spaceId,d.subscription)}}else e.type===ie.MessageAction?(this.listenerManager.announceMessageAction(e.data),this.announce(\"messageAction\",e.data,e.data.channel,e.data.subscription)):e.type===ie.Files&&(this.listenerManager.announceFile(e.data),this.announce(\"file\",e.data,e.data.channel,e.data.subscription))}addListener(e,t,s){t&&s?(null==t||t.forEach((t=>{if(this.channelListenerMap.has(t)){const s=this.channelListenerMap.get(t);s.includes(e)||s.push(e)}else this.channelListenerMap.set(t,[e])})),null==s||s.forEach((t=>{if(this.groupListenerMap.has(t)){const s=this.groupListenerMap.get(t);s.includes(e)||s.push(e)}else this.groupListenerMap.set(t,[e])}))):this.listenerManager.addListener(e)}removeListener(e,t,s){t&&s?(null==t||t.forEach((t=>{this.channelListenerMap.has(t)&&this.channelListenerMap.set(t,this.channelListenerMap.get(t).filter((t=>t!==e)))})),null==s||s.forEach((t=>{this.groupListenerMap.has(t)&&this.groupListenerMap.set(t,this.groupListenerMap.get(t).filter((t=>t!==e)))}))):this.listenerManager.removeListener(e)}removeAllListeners(){this.listenerManager.removeAllListeners(),this.channelListenerMap.clear(),this.groupListenerMap.clear()}announce(e,t,s,n){t&&this.channelListenerMap.has(s)&&this.channelListenerMap.get(s).forEach((s=>{const n=s[e];n&&n(t)})),n&&this.groupListenerMap.has(n)&&this.groupListenerMap.get(n).forEach((s=>{const n=s[e];n&&n(t)}))}}class ue{constructor(e=!1){this.sync=e,this.listeners=new Set}subscribe(e){return this.listeners.add(e),()=>{this.listeners.delete(e)}}notify(e){const t=()=>{this.listeners.forEach((t=>{t(e)}))};this.sync?t():setTimeout(t,0)}}class le{transition(e,t){var s;if(this.transitionMap.has(t.type))return null===(s=this.transitionMap.get(t.type))||void 0===s?void 0:s(e,t)}constructor(e){this.label=e,this.transitionMap=new Map,this.enterEffects=[],this.exitEffects=[]}on(e,t){return this.transitionMap.set(e,t),this}with(e,t){return[this,e,null!=t?t:[]]}onEnter(e){return this.enterEffects.push(e),this}onExit(e){return this.exitEffects.push(e),this}}class he extends ue{describe(e){return new le(e)}start(e,t){this.currentState=e,this.currentContext=t,this.notify({type:\"engineStarted\",state:e,context:t})}transition(e){if(!this.currentState)throw new Error(\"Start the engine first\");this.notify({type:\"eventReceived\",event:e});const t=this.currentState.transition(this.currentContext,e);if(t){const[s,n,r]=t;for(const e of this.currentState.exitEffects)this.notify({type:\"invocationDispatched\",invocation:e(this.currentContext)});const i=this.currentState;this.currentState=s;const o=this.currentContext;this.currentContext=n,this.notify({type:\"transitionDone\",fromState:i,fromContext:o,toState:s,toContext:n,event:e});for(const e of r)this.notify({type:\"invocationDispatched\",invocation:e});for(const e of this.currentState.enterEffects)this.notify({type:\"invocationDispatched\",invocation:e(this.currentContext)})}}}class de{constructor(e){this.dependencies=e,this.instances=new Map,this.handlers=new Map}on(e,t){this.handlers.set(e,t)}dispatch(e){if(\"CANCEL\"===e.type){if(this.instances.has(e.payload)){const t=this.instances.get(e.payload);null==t||t.cancel(),this.instances.delete(e.payload)}return}const t=this.handlers.get(e.type);if(!t)throw new Error(`Unhandled invocation '${e.type}'`);const s=t(e.payload,this.dependencies);e.managed&&this.instances.set(e.type,s),s.start()}dispose(){for(const[e,t]of this.instances.entries())t.cancel(),this.instances.delete(e)}}function pe(e,t){const s=function(...s){return{type:e,payload:null==t?void 0:t(...s)}};return s.type=e,s}function ge(e,t){const s=(...s)=>({type:e,payload:t(...s),managed:!1});return s.type=e,s}function ye(e,t){const s=(...s)=>({type:e,payload:t(...s),managed:!0});return s.type=e,s.cancel={type:\"CANCEL\",payload:e,managed:!1},s}class fe extends Error{constructor(){super(\"The operation was aborted.\"),this.name=\"AbortError\",Object.setPrototypeOf(this,new.target.prototype)}}class me extends ue{constructor(){super(...arguments),this._aborted=!1}get aborted(){return this._aborted}throwIfAborted(){if(this._aborted)throw new fe}abort(){this._aborted=!0,this.notify(new fe)}}class be{constructor(e,t){this.payload=e,this.dependencies=t}}class ve extends be{constructor(e,t,s){super(e,t),this.asyncFunction=s,this.abortSignal=new me}start(){this.asyncFunction(this.payload,this.abortSignal,this.dependencies).catch((e=>{}))}cancel(){this.abortSignal.abort()}}const we=e=>(t,s)=>new ve(t,s,e),Se=pe(\"RECONNECT\",(()=>({}))),ke=pe(\"DISCONNECT\",(()=>({}))),Ee=pe(\"JOINED\",((e,t)=>({channels:e,groups:t}))),Oe=pe(\"LEFT\",((e,t)=>({channels:e,groups:t}))),Ce=pe(\"LEFT_ALL\",(()=>({}))),Ne=pe(\"HEARTBEAT_SUCCESS\",(e=>({statusCode:e}))),Pe=pe(\"HEARTBEAT_FAILURE\",(e=>e)),Me=pe(\"HEARTBEAT_GIVEUP\",(()=>({}))),_e=pe(\"TIMES_UP\",(()=>({}))),Ae=ge(\"HEARTBEAT\",((e,t)=>({channels:e,groups:t}))),je=ge(\"LEAVE\",((e,t)=>({channels:e,groups:t}))),Ie=ge(\"EMIT_STATUS\",(e=>e)),Re=ye(\"WAIT\",(()=>({}))),Ue=ye(\"DELAYED_HEARTBEAT\",(e=>e));class Te extends de{constructor(e,t){super(t),this.on(Ae.type,we(((t,s,n)=>i(this,[t,s,n],void 0,(function*(t,s,{heartbeat:n,presenceState:r,config:i}){try{yield n(Object.assign(Object.assign({channels:t.channels,channelGroups:t.groups},i.maintainPresenceState&&{state:r}),{heartbeat:i.presenceTimeout}));e.transition(Ne(200))}catch(t){if(t instanceof d){if(t.status&&t.status.category==h.PNCancelledCategory)return;return e.transition(Pe(t))}}}))))),this.on(je.type,we(((e,t,s)=>i(this,[e,t,s],void 0,(function*(e,t,{leave:s,config:n}){if(!n.suppressLeaveEvents)try{s({channels:e.channels,channelGroups:e.groups})}catch(e){}}))))),this.on(Re.type,we(((t,s,n)=>i(this,[t,s,n],void 0,(function*(t,s,{heartbeatDelay:n}){return s.throwIfAborted(),yield n(),s.throwIfAborted(),e.transition(_e())}))))),this.on(Ue.type,we(((t,s,n)=>i(this,[t,s,n],void 0,(function*(t,s,{heartbeat:n,retryDelay:r,presenceState:i,config:o}){if(!o.retryConfiguration||!o.retryConfiguration.shouldRetry(t.reason,t.attempts))return e.transition(Me());s.throwIfAborted(),yield r(o.retryConfiguration.getDelay(t.attempts,t.reason)),s.throwIfAborted();try{yield n(Object.assign(Object.assign({channels:t.channels,channelGroups:t.groups},o.maintainPresenceState&&{state:i}),{heartbeat:o.presenceTimeout}));return e.transition(Ne(200))}catch(t){if(t instanceof d){if(t.status&&t.status.category==h.PNCancelledCategory)return;return e.transition(Pe(t))}}}))))),this.on(Ie.type,we(((e,t,s)=>i(this,[e,t,s],void 0,(function*(e,t,{emitStatus:s,config:n}){var r;n.announceFailedHeartbeats&&!0===(null===(r=null==e?void 0:e.status)||void 0===r?void 0:r.error)?s(e.status):n.announceSuccessfulHeartbeats&&200===e.statusCode&&s(Object.assign(Object.assign({},e),{operation:re.PNHeartbeatOperation,error:!1}))})))))}}const Fe=new le(\"HEARTBEAT_STOPPED\");Fe.on(Ee.type,((e,t)=>Fe.with({channels:[...e.channels,...t.payload.channels],groups:[...e.groups,...t.payload.groups]}))),Fe.on(Oe.type,((e,t)=>Fe.with({channels:e.channels.filter((e=>!t.payload.channels.includes(e))),groups:e.groups.filter((e=>!t.payload.groups.includes(e)))}))),Fe.on(Se.type,((e,t)=>Ge.with({channels:e.channels,groups:e.groups}))),Fe.on(Ce.type,((e,t)=>Ke.with(void 0)));const xe=new le(\"HEARTBEAT_COOLDOWN\");xe.onEnter((()=>Re())),xe.onExit((()=>Re.cancel)),xe.on(_e.type,((e,t)=>Ge.with({channels:e.channels,groups:e.groups}))),xe.on(Ee.type,((e,t)=>Ge.with({channels:[...e.channels,...t.payload.channels],groups:[...e.groups,...t.payload.groups]}))),xe.on(Oe.type,((e,t)=>Ge.with({channels:e.channels.filter((e=>!t.payload.channels.includes(e))),groups:e.groups.filter((e=>!t.payload.groups.includes(e)))},[je(t.payload.channels,t.payload.groups)]))),xe.on(ke.type,(e=>Fe.with({channels:e.channels,groups:e.groups},[je(e.channels,e.groups)]))),xe.on(Ce.type,((e,t)=>Ke.with(void 0,[je(e.channels,e.groups)])));const De=new le(\"HEARTBEAT_FAILED\");De.on(Ee.type,((e,t)=>Ge.with({channels:[...e.channels,...t.payload.channels],groups:[...e.groups,...t.payload.groups]}))),De.on(Oe.type,((e,t)=>Ge.with({channels:e.channels.filter((e=>!t.payload.channels.includes(e))),groups:e.groups.filter((e=>!t.payload.groups.includes(e)))},[je(t.payload.channels,t.payload.groups)]))),De.on(Se.type,((e,t)=>Ge.with({channels:e.channels,groups:e.groups}))),De.on(ke.type,((e,t)=>Fe.with({channels:e.channels,groups:e.groups},[je(e.channels,e.groups)]))),De.on(Ce.type,((e,t)=>Ke.with(void 0,[je(e.channels,e.groups)])));const qe=new le(\"HEARBEAT_RECONNECTING\");qe.onEnter((e=>Ue(e))),qe.onExit((()=>Ue.cancel)),qe.on(Ee.type,((e,t)=>Ge.with({channels:[...e.channels,...t.payload.channels],groups:[...e.groups,...t.payload.groups]}))),qe.on(Oe.type,((e,t)=>Ge.with({channels:e.channels.filter((e=>!t.payload.channels.includes(e))),groups:e.groups.filter((e=>!t.payload.groups.includes(e)))},[je(t.payload.channels,t.payload.groups)]))),qe.on(ke.type,((e,t)=>{Fe.with({channels:e.channels,groups:e.groups},[je(e.channels,e.groups)])})),qe.on(Ne.type,((e,t)=>xe.with({channels:e.channels,groups:e.groups}))),qe.on(Pe.type,((e,t)=>qe.with(Object.assign(Object.assign({},e),{attempts:e.attempts+1,reason:t.payload})))),qe.on(Me.type,((e,t)=>De.with({channels:e.channels,groups:e.groups}))),qe.on(Ce.type,((e,t)=>Ke.with(void 0,[je(e.channels,e.groups)])));const Ge=new le(\"HEARTBEATING\");Ge.onEnter((e=>Ae(e.channels,e.groups))),Ge.on(Ne.type,((e,t)=>xe.with({channels:e.channels,groups:e.groups}))),Ge.on(Ee.type,((e,t)=>Ge.with({channels:[...e.channels,...t.payload.channels],groups:[...e.groups,...t.payload.groups]}))),Ge.on(Oe.type,((e,t)=>Ge.with({channels:e.channels.filter((e=>!t.payload.channels.includes(e))),groups:e.groups.filter((e=>!t.payload.groups.includes(e)))},[je(t.payload.channels,t.payload.groups)]))),Ge.on(Pe.type,((e,t)=>qe.with(Object.assign(Object.assign({},e),{attempts:0,reason:t.payload})))),Ge.on(ke.type,(e=>Fe.with({channels:e.channels,groups:e.groups},[je(e.channels,e.groups)]))),Ge.on(Ce.type,((e,t)=>Ke.with(void 0,[je(e.channels,e.groups)])));const Ke=new le(\"HEARTBEAT_INACTIVE\");Ke.on(Ee.type,((e,t)=>Ge.with({channels:t.payload.channels,groups:t.payload.groups})));class $e{get _engine(){return this.engine}constructor(e){this.dependencies=e,this.engine=new he,this.channels=[],this.groups=[],this.dispatcher=new Te(this.engine,e),this._unsubscribeEngine=this.engine.subscribe((e=>{\"invocationDispatched\"===e.type&&this.dispatcher.dispatch(e.invocation)})),this.engine.start(Ke,void 0)}join({channels:e,groups:t}){this.channels=[...this.channels,...null!=e?e:[]],this.groups=[...this.groups,...null!=t?t:[]],this.engine.transition(Ee(this.channels.slice(0),this.groups.slice(0)))}leave({channels:e,groups:t}){this.dependencies.presenceState&&(null==e||e.forEach((e=>delete this.dependencies.presenceState[e])),null==t||t.forEach((e=>delete this.dependencies.presenceState[e]))),this.engine.transition(Oe(null!=e?e:[],null!=t?t:[]))}leaveAll(){this.engine.transition(Ce())}dispose(){this._unsubscribeEngine(),this.dispatcher.dispose()}}class Le{static LinearRetryPolicy(e){return{delay:e.delay,maximumRetry:e.maximumRetry,shouldRetry(e,t){var s;return 403!==(null===(s=null==e?void 0:e.status)||void 0===s?void 0:s.statusCode)&&this.maximumRetry>t},getDelay(e,t){var s;return 1e3*((null!==(s=t.retryAfter)&&void 0!==s?s:this.delay)+Math.random())},getGiveupReason(e,t){var s;return this.maximumRetry<=t?\"retry attempts exhaused.\":403===(null===(s=null==e?void 0:e.status)||void 0===s?void 0:s.statusCode)?\"forbidden operation.\":\"unknown error\"},validate(){if(this.maximumRetry>10)throw new Error(\"Maximum retry for linear retry policy can not be more than 10\")}}}static ExponentialRetryPolicy(e){return{minimumDelay:e.minimumDelay,maximumDelay:e.maximumDelay,maximumRetry:e.maximumRetry,shouldRetry(e,t){var s;return 403!==(null===(s=null==e?void 0:e.status)||void 0===s?void 0:s.statusCode)&&this.maximumRetry>t},getDelay(e,t){var s;return 1e3*((null!==(s=t.retryAfter)&&void 0!==s?s:Math.min(Math.pow(2,e),this.maximumDelay))+Math.random())},getGiveupReason(e,t){var s;return this.maximumRetry<=t?\"retry attempts exhausted.\":403===(null===(s=null==e?void 0:e.status)||void 0===s?void 0:s.statusCode)?\"forbidden operation.\":\"unknown error\"},validate(){if(this.minimumDelay<2)throw new Error(\"Minimum delay can not be set less than 2 seconds for retry\");if(this.maximumDelay)throw new Error(\"Maximum delay can not be set more than 150 seconds for retry\");if(this.maximumRetry>6)throw new Error(\"Maximum retry for exponential retry policy can not be more than 6\")}}}}const Be=ye(\"HANDSHAKE\",((e,t)=>({channels:e,groups:t}))),He=ye(\"RECEIVE_MESSAGES\",((e,t,s)=>({channels:e,groups:t,cursor:s}))),ze=ge(\"EMIT_MESSAGES\",(e=>e)),Ve=ge(\"EMIT_STATUS\",(e=>e)),We=ye(\"RECEIVE_RECONNECT\",(e=>e)),Je=ye(\"HANDSHAKE_RECONNECT\",(e=>e)),Qe=pe(\"SUBSCRIPTION_CHANGED\",((e,t)=>({channels:e,groups:t}))),Ye=pe(\"SUBSCRIPTION_RESTORED\",((e,t,s,n)=>({channels:e,groups:t,cursor:{timetoken:s,region:null!=n?n:0}}))),Xe=pe(\"HANDSHAKE_SUCCESS\",(e=>e)),Ze=pe(\"HANDSHAKE_FAILURE\",(e=>e)),et=pe(\"HANDSHAKE_RECONNECT_SUCCESS\",(e=>({cursor:e}))),tt=pe(\"HANDSHAKE_RECONNECT_FAILURE\",(e=>e)),st=pe(\"HANDSHAKE_RECONNECT_GIVEUP\",(e=>e)),nt=pe(\"RECEIVE_SUCCESS\",((e,t)=>({cursor:e,events:t}))),rt=pe(\"RECEIVE_FAILURE\",(e=>e)),it=pe(\"RECEIVE_RECONNECT_SUCCESS\",((e,t)=>({cursor:e,events:t}))),ot=pe(\"RECEIVE_RECONNECT_FAILURE\",(e=>e)),at=pe(\"RECEIVING_RECONNECT_GIVEUP\",(e=>e)),ct=pe(\"DISCONNECT\",(()=>({}))),ut=pe(\"RECONNECT\",((e,t)=>({cursor:{timetoken:null!=e?e:\"\",region:null!=t?t:0}}))),lt=pe(\"UNSUBSCRIBE_ALL\",(()=>({})));class ht extends de{constructor(e,t){super(t),this.on(Be.type,we(((t,s,n)=>i(this,[t,s,n],void 0,(function*(t,s,{handshake:n,presenceState:r,config:i}){s.throwIfAborted();try{const o=yield n(Object.assign({abortSignal:s,channels:t.channels,channelGroups:t.groups,filterExpression:i.filterExpression},i.maintainPresenceState&&{state:r}));return e.transition(Xe(o))}catch(t){if(t instanceof d){if(t.status&&t.status.category==h.PNCancelledCategory)return;return e.transition(Ze(t))}}}))))),this.on(He.type,we(((t,s,n)=>i(this,[t,s,n],void 0,(function*(t,s,{receiveMessages:n,config:r}){s.throwIfAborted();try{const i=yield n({abortSignal:s,channels:t.channels,channelGroups:t.groups,timetoken:t.cursor.timetoken,region:t.cursor.region,filterExpression:r.filterExpression});e.transition(nt(i.cursor,i.messages))}catch(t){if(t instanceof d){if(t.status&&t.status.category==h.PNCancelledCategory)return;if(!s.aborted)return e.transition(rt(t))}}}))))),this.on(ze.type,we(((e,t,s)=>i(this,[e,t,s],void 0,(function*(e,t,{emitMessages:s}){e.length>0&&s(e)}))))),this.on(Ve.type,we(((e,t,s)=>i(this,[e,t,s],void 0,(function*(e,t,{emitStatus:s}){s(e)}))))),this.on(We.type,we(((t,s,n)=>i(this,[t,s,n],void 0,(function*(t,s,{receiveMessages:n,delay:r,config:i}){if(!i.retryConfiguration||!i.retryConfiguration.shouldRetry(t.reason,t.attempts))return e.transition(at(new d(i.retryConfiguration?i.retryConfiguration.getGiveupReason(t.reason,t.attempts):\"Unable to complete subscribe messages receive.\")));s.throwIfAborted(),yield r(i.retryConfiguration.getDelay(t.attempts,t.reason)),s.throwIfAborted();try{const r=yield n({abortSignal:s,channels:t.channels,channelGroups:t.groups,timetoken:t.cursor.timetoken,region:t.cursor.region,filterExpression:i.filterExpression});return e.transition(it(r.cursor,r.messages))}catch(t){if(t instanceof d){if(t.status&&t.status.category==h.PNCancelledCategory)return;return e.transition(ot(t))}}}))))),this.on(Je.type,we(((t,s,n)=>i(this,[t,s,n],void 0,(function*(t,s,{handshake:n,delay:r,presenceState:i,config:o}){if(!o.retryConfiguration||!o.retryConfiguration.shouldRetry(t.reason,t.attempts))return e.transition(st(new d(o.retryConfiguration?o.retryConfiguration.getGiveupReason(t.reason,t.attempts):\"Unable to complete subscribe handshake\")));s.throwIfAborted(),yield r(o.retryConfiguration.getDelay(t.attempts,t.reason)),s.throwIfAborted();try{const r=yield n(Object.assign({abortSignal:s,channels:t.channels,channelGroups:t.groups,filterExpression:o.filterExpression},o.maintainPresenceState&&{state:i}));return e.transition(et(r))}catch(t){if(t instanceof d){if(t.status&&t.status.category==h.PNCancelledCategory)return;return e.transition(tt(t))}}})))))}}const dt=new le(\"HANDSHAKE_FAILED\");dt.on(Qe.type,((e,t)=>vt.with({channels:t.payload.channels,groups:t.payload.groups,cursor:e.cursor}))),dt.on(ut.type,((e,t)=>vt.with({channels:e.channels,groups:e.groups,cursor:t.payload.cursor||e.cursor}))),dt.on(Ye.type,((e,t)=>{var s,n;return vt.with({channels:t.payload.channels,groups:t.payload.groups,cursor:{timetoken:t.payload.cursor.timetoken,region:t.payload.cursor.region?t.payload.cursor.region:null!==(n=null===(s=null==e?void 0:e.cursor)||void 0===s?void 0:s.region)&&void 0!==n?n:0}})})),dt.on(lt.type,(e=>wt.with()));const pt=new le(\"HANDSHAKE_STOPPED\");pt.on(Qe.type,((e,t)=>pt.with({channels:t.payload.channels,groups:t.payload.groups,cursor:e.cursor}))),pt.on(ut.type,((e,t)=>vt.with(Object.assign(Object.assign({},e),{cursor:t.payload.cursor||e.cursor})))),pt.on(Ye.type,((e,t)=>{var s;return pt.with({channels:t.payload.channels,groups:t.payload.groups,cursor:{timetoken:t.payload.cursor.timetoken,region:t.payload.cursor.region||(null===(s=null==e?void 0:e.cursor)||void 0===s?void 0:s.region)||0}})})),pt.on(lt.type,(e=>wt.with()));const gt=new le(\"RECEIVE_FAILED\");gt.on(ut.type,((e,t)=>{var s;return vt.with({channels:e.channels,groups:e.groups,cursor:{timetoken:t.payload.cursor.timetoken?null===(s=t.payload.cursor)||void 0===s?void 0:s.timetoken:e.cursor.timetoken,region:t.payload.cursor.region||e.cursor.region}})})),gt.on(Qe.type,((e,t)=>vt.with({channels:t.payload.channels,groups:t.payload.groups,cursor:e.cursor}))),gt.on(Ye.type,((e,t)=>vt.with({channels:t.payload.channels,groups:t.payload.groups,cursor:{timetoken:t.payload.cursor.timetoken,region:t.payload.cursor.region||e.cursor.region}}))),gt.on(lt.type,(e=>wt.with(void 0)));const yt=new le(\"RECEIVE_STOPPED\");yt.on(Qe.type,((e,t)=>yt.with({channels:t.payload.channels,groups:t.payload.groups,cursor:e.cursor}))),yt.on(Ye.type,((e,t)=>yt.with({channels:t.payload.channels,groups:t.payload.groups,cursor:{timetoken:t.payload.cursor.timetoken,region:t.payload.cursor.region||e.cursor.region}}))),yt.on(ut.type,((e,t)=>{var s;return vt.with({channels:e.channels,groups:e.groups,cursor:{timetoken:t.payload.cursor.timetoken?null===(s=t.payload.cursor)||void 0===s?void 0:s.timetoken:e.cursor.timetoken,region:t.payload.cursor.region||e.cursor.region}})})),yt.on(lt.type,(()=>wt.with(void 0)));const ft=new le(\"RECEIVE_RECONNECTING\");ft.onEnter((e=>We(e))),ft.onExit((()=>We.cancel)),ft.on(it.type,((e,t)=>mt.with({channels:e.channels,groups:e.groups,cursor:t.payload.cursor},[ze(t.payload.events)]))),ft.on(ot.type,((e,t)=>ft.with(Object.assign(Object.assign({},e),{attempts:e.attempts+1,reason:t.payload})))),ft.on(at.type,((e,t)=>{var s;return gt.with({groups:e.groups,channels:e.channels,cursor:e.cursor,reason:t.payload},[Ve({category:h.PNDisconnectedUnexpectedlyCategory,error:null===(s=t.payload)||void 0===s?void 0:s.message})])})),ft.on(ct.type,(e=>yt.with({channels:e.channels,groups:e.groups,cursor:e.cursor},[Ve({category:h.PNDisconnectedCategory})]))),ft.on(Ye.type,((e,t)=>mt.with({channels:t.payload.channels,groups:t.payload.groups,cursor:{timetoken:t.payload.cursor.timetoken,region:t.payload.cursor.region||e.cursor.region}}))),ft.on(Qe.type,((e,t)=>mt.with({channels:t.payload.channels,groups:t.payload.groups,cursor:e.cursor}))),ft.on(lt.type,(e=>wt.with(void 0,[Ve({category:h.PNDisconnectedCategory})])));const mt=new le(\"RECEIVING\");mt.onEnter((e=>He(e.channels,e.groups,e.cursor))),mt.onExit((()=>He.cancel)),mt.on(nt.type,((e,t)=>mt.with({channels:e.channels,groups:e.groups,cursor:t.payload.cursor},[ze(t.payload.events)]))),mt.on(Qe.type,((e,t)=>0===t.payload.channels.length&&0===t.payload.groups.length?wt.with(void 0):mt.with({cursor:e.cursor,channels:t.payload.channels,groups:t.payload.groups}))),mt.on(Ye.type,((e,t)=>0===t.payload.channels.length&&0===t.payload.groups.length?wt.with(void 0):mt.with({channels:t.payload.channels,groups:t.payload.groups,cursor:{timetoken:t.payload.cursor.timetoken,region:t.payload.cursor.region||e.cursor.region}}))),mt.on(rt.type,((e,t)=>ft.with(Object.assign(Object.assign({},e),{attempts:0,reason:t.payload})))),mt.on(ct.type,(e=>yt.with({channels:e.channels,groups:e.groups,cursor:e.cursor},[Ve({category:h.PNDisconnectedCategory})]))),mt.on(lt.type,(e=>wt.with(void 0,[Ve({category:h.PNDisconnectedCategory})])));const bt=new le(\"HANDSHAKE_RECONNECTING\");bt.onEnter((e=>Je(e))),bt.onExit((()=>Je.cancel)),bt.on(et.type,((e,t)=>{var s,n;const r={timetoken:(null===(s=e.cursor)||void 0===s?void 0:s.timetoken)?null===(n=e.cursor)||void 0===n?void 0:n.timetoken:t.payload.cursor.timetoken,region:t.payload.cursor.region};return mt.with({channels:e.channels,groups:e.groups,cursor:r},[Ve({category:h.PNConnectedCategory})])})),bt.on(tt.type,((e,t)=>bt.with(Object.assign(Object.assign({},e),{attempts:e.attempts+1,reason:t.payload})))),bt.on(st.type,((e,t)=>{var s;return dt.with({groups:e.groups,channels:e.channels,cursor:e.cursor,reason:t.payload},[Ve({category:h.PNConnectionErrorCategory,error:null===(s=t.payload)||void 0===s?void 0:s.message})])})),bt.on(ct.type,(e=>pt.with({channels:e.channels,groups:e.groups,cursor:e.cursor}))),bt.on(Qe.type,((e,t)=>vt.with({channels:t.payload.channels,groups:t.payload.groups,cursor:e.cursor}))),bt.on(Ye.type,((e,t)=>{var s,n;return vt.with({channels:t.payload.channels,groups:t.payload.groups,cursor:{timetoken:t.payload.cursor.timetoken,region:(null===(s=t.payload.cursor)||void 0===s?void 0:s.region)||(null===(n=null==e?void 0:e.cursor)||void 0===n?void 0:n.region)||0}})})),bt.on(lt.type,(e=>wt.with(void 0)));const vt=new le(\"HANDSHAKING\");vt.onEnter((e=>Be(e.channels,e.groups))),vt.onExit((()=>Be.cancel)),vt.on(Qe.type,((e,t)=>0===t.payload.channels.length&&0===t.payload.groups.length?wt.with(void 0):vt.with({channels:t.payload.channels,groups:t.payload.groups,cursor:e.cursor}))),vt.on(Xe.type,((e,t)=>{var s,n;return mt.with({channels:e.channels,groups:e.groups,cursor:{timetoken:(null===(s=null==e?void 0:e.cursor)||void 0===s?void 0:s.timetoken)?null===(n=null==e?void 0:e.cursor)||void 0===n?void 0:n.timetoken:t.payload.timetoken,region:t.payload.region}},[Ve({category:h.PNConnectedCategory})])})),vt.on(Ze.type,((e,t)=>bt.with({channels:e.channels,groups:e.groups,cursor:e.cursor,attempts:0,reason:t.payload}))),vt.on(ct.type,(e=>pt.with({channels:e.channels,groups:e.groups,cursor:e.cursor}))),vt.on(Ye.type,((e,t)=>{var s;return vt.with({channels:t.payload.channels,groups:t.payload.groups,cursor:{timetoken:t.payload.cursor.timetoken,region:t.payload.cursor.region||(null===(s=null==e?void 0:e.cursor)||void 0===s?void 0:s.region)||0}})})),vt.on(lt.type,(e=>wt.with()));const wt=new le(\"UNSUBSCRIBED\");wt.on(Qe.type,((e,t)=>vt.with({channels:t.payload.channels,groups:t.payload.groups}))),wt.on(Ye.type,((e,t)=>vt.with({channels:t.payload.channels,groups:t.payload.groups,cursor:t.payload.cursor})));class St{get _engine(){return this.engine}constructor(e){this.engine=new he,this.channels=[],this.groups=[],this.dependencies=e,this.dispatcher=new ht(this.engine,e),this._unsubscribeEngine=this.engine.subscribe((e=>{\"invocationDispatched\"===e.type&&this.dispatcher.dispatch(e.invocation)})),this.engine.start(wt,void 0)}subscribe({channels:e,channelGroups:t,timetoken:s,withPresence:n}){this.channels=[...this.channels,...null!=e?e:[]],this.groups=[...this.groups,...null!=t?t:[]],n&&(this.channels.map((e=>this.channels.push(`${e}-pnpres`))),this.groups.map((e=>this.groups.push(`${e}-pnpres`)))),s?this.engine.transition(Ye(Array.from(new Set([...this.channels,...null!=e?e:[]])),Array.from(new Set([...this.groups,...null!=t?t:[]])),s)):this.engine.transition(Qe(Array.from(new Set([...this.channels,...null!=e?e:[]])),Array.from(new Set([...this.groups,...null!=t?t:[]])))),this.dependencies.join&&this.dependencies.join({channels:Array.from(new Set(this.channels.filter((e=>!e.endsWith(\"-pnpres\"))))),groups:Array.from(new Set(this.groups.filter((e=>!e.endsWith(\"-pnpres\")))))})}unsubscribe({channels:e=[],channelGroups:t=[]}){const s=U(this.channels,[...e,...e.map((e=>`${e}-pnpres`))]),n=U(this.groups,[...t,...t.map((e=>`${e}-pnpres`))]);if(new Set(this.channels).size!==new Set(s).size||new Set(this.groups).size!==new Set(n).size){const r=T(this.channels,e),i=T(this.groups,t);this.dependencies.presenceState&&(null==r||r.forEach((e=>delete this.dependencies.presenceState[e])),null==i||i.forEach((e=>delete this.dependencies.presenceState[e]))),this.channels=s,this.groups=n,this.engine.transition(Qe(Array.from(new Set(this.channels.slice(0))),Array.from(new Set(this.groups.slice(0))))),this.dependencies.leave&&this.dependencies.leave({channels:r.slice(0),groups:i.slice(0)})}}unsubscribeAll(){this.channels=[],this.groups=[],this.dependencies.presenceState&&Object.keys(this.dependencies.presenceState).forEach((e=>{delete this.dependencies.presenceState[e]})),this.engine.transition(Qe(this.channels.slice(0),this.groups.slice(0))),this.dependencies.leaveAll&&this.dependencies.leaveAll()}reconnect({timetoken:e,region:t}){this.engine.transition(ut(e,t))}disconnect(){this.engine.transition(ct()),this.dependencies.leaveAll&&this.dependencies.leaveAll()}getSubscribedChannels(){return Array.from(new Set(this.channels.slice(0)))}getSubscribedChannelGroups(){return Array.from(new Set(this.groups.slice(0)))}dispose(){this.disconnect(),this._unsubscribeEngine(),this.dispatcher.dispose()}}class kt extends se{constructor(e){var t,s;super({method:e.sendByPost?H.POST:H.GET}),this.parameters=e,null!==(t=(s=this.parameters).sendByPost)&&void 0!==t||(s.sendByPost=false)}operation(){return re.PNPublishOperation}validate(){const{message:e,channel:t,keySet:{publishKey:s}}=this.parameters;return t?e?s?void 0:\"Missing 'publishKey'\":\"Missing 'message'\":\"Missing 'channel'\"}parse(e){return i(this,void 0,void 0,(function*(){const t=this.deserializeResponse(e);if(!t)throw new d(\"Service response error, check status for details\",p(\"Unable to deserialize service response\"));return{timetoken:t[2]}}))}get path(){const{message:e,channel:t,keySet:s}=this.parameters,n=this.prepareMessagePayload(e);return`/publish/${s.publishKey}/${s.subscribeKey}/0/${I(t)}/0${this.parameters.sendByPost?\"\":`/${I(n)}`}`}get queryParameters(){const{meta:e,replicate:t,storeInHistory:s,ttl:n}=this.parameters,r={};return void 0!==s&&(r.store=s?\"1\":\"0\"),void 0!==n&&(r.ttl=n),void 0===t||t||(r.norep=\"true\"),e&&\"object\"==typeof e&&(r.meta=JSON.stringify(e)),r}get headers(){return{\"Content-Type\":\"application/json\"}}get body(){return this.prepareMessagePayload(this.parameters.message)}prepareMessagePayload(e){const{crypto:t}=this.parameters;if(!t)return JSON.stringify(e)||\"\";const s=t.encrypt(JSON.stringify(e));return JSON.stringify(\"string\"==typeof s?s:u(s))}}class Et extends se{constructor(e){super(),this.parameters=e}operation(){return re.PNSignalOperation}validate(){const{message:e,channel:t,keySet:{publishKey:s}}=this.parameters;return t?e?s?void 0:\"Missing 'publishKey'\":\"Missing 'message'\":\"Missing 'channel'\"}parse(e){return i(this,void 0,void 0,(function*(){const t=this.deserializeResponse(e);if(!t)throw new d(\"Service response error, check status for details\",p(\"Unable to deserialize service response\"));return{timetoken:t[2]}}))}get path(){const{keySet:{publishKey:e,subscribeKey:t},channel:s,message:n}=this.parameters,r=JSON.stringify(n);return`/signal/${e}/${t}/0/${I(s)}/0/${I(r)}`}}class Ot extends oe{operation(){return re.PNReceiveMessagesOperation}validate(){const e=super.validate();return e||(this.parameters.timetoken?this.parameters.region?void 0:\"region can not be empty\":\"timetoken can not be empty\")}get path(){const{keySet:{subscribeKey:e},channels:t=[]}=this.parameters;return`/v2/subscribe/${e}/${R(t.sort(),\",\")}/0`}get queryParameters(){const{channelGroups:e,filterExpression:t,timetoken:s,region:n}=this.parameters,r={ee:\"\"};return e&&e.length>0&&(r[\"channel-group\"]=e.sort().join(\",\")),t&&t.length>0&&(r[\"filter-expr\"]=t),\"string\"==typeof s?s&&s.length>0&&(r.tt=s):s&&s>0&&(r.tt=s),n&&(r.tr=n),r}}class Ct extends oe{operation(){return re.PNHandshakeOperation}get path(){const{keySet:{subscribeKey:e},channels:t=[]}=this.parameters;return`/v2/subscribe/${e}/${R(t.sort(),\",\")}/0`}get queryParameters(){const{channelGroups:e,filterExpression:t,state:s}=this.parameters,n={tt:0,ee:\"\"};return e&&e.length>0&&(n[\"channel-group\"]=e.sort().join(\",\")),t&&t.length>0&&(n[\"filter-expr\"]=t),s&&Object.keys(s).length>0&&(n.state=JSON.stringify(s)),n}}class Nt extends se{constructor(e){var t,s,n,r;super(),this.parameters=e,null!==(t=(n=this.parameters).channels)&&void 0!==t||(n.channels=[]),null!==(s=(r=this.parameters).channelGroups)&&void 0!==s||(r.channelGroups=[])}operation(){return re.PNGetStateOperation}validate(){const{keySet:{subscribeKey:e},channels:t,channelGroups:s}=this.parameters;if(!e)return\"Missing Subscribe Key\"}parse(e){return i(this,void 0,void 0,(function*(){const t=this.deserializeResponse(e);if(!t)throw new d(\"Service response error, check status for details\",p(\"Unable to deserialize service response\"));if(t.status>=400)throw A.create(e);const{channels:s=[],channelGroups:n=[]}=this.parameters,r={channels:{}};return 1===s.length&&0===n.length?r.channels[s[0]]=t.payload:r.channels=t.payload,r}))}get path(){const{keySet:{subscribeKey:e},uuid:t,channels:s}=this.parameters;return`/v2/presence/sub-key/${e}/channel/${R(null!=s?s:[],\",\")}/uuid/${t}`}get queryParameters(){const{channelGroups:e}=this.parameters;return e&&0!==e.length?{\"channel-group\":e.join(\",\")}:{}}}class Pt extends se{constructor(e){super(),this.parameters=e}operation(){return re.PNSetStateOperation}validate(){const{keySet:{subscribeKey:e},state:t,channels:s=[],channelGroups:n=[]}=this.parameters;return e?t?0===(null==s?void 0:s.length)&&0===(null==n?void 0:n.length)?\"Please provide a list of channels and/or channel-groups\":void 0:\"Missing State\":\"Missing Subscribe Key\"}parse(e){return i(this,void 0,void 0,(function*(){const t=this.deserializeResponse(e);if(!t)throw new d(\"Service response error, check status for details\",p(\"Unable to deserialize service response\"));if(t.status>=400)throw A.create(e);return{state:t.payload}}))}get path(){const{keySet:{subscribeKey:e},uuid:t,channels:s}=this.parameters;return`/v2/presence/sub-key/${e}/channel/${R(null!=s?s:[],\",\")}/uuid/${I(t)}/data`}get queryParameters(){const{channelGroups:e,state:t}=this.parameters,s={state:JSON.stringify(t)};return e&&0!==e.length&&(s[\"channel-group\"]=e.join(\",\")),s}}class Mt extends se{constructor(e){super(),this.parameters=e}operation(){return re.PNHeartbeatOperation}validate(){const{keySet:{subscribeKey:e},channels:t=[],channelGroups:s=[]}=this.parameters;return e?0===t.length&&0===s.length?\"Please provide a list of channels and/or channel-groups\":void 0:\"Missing Subscribe Key\"}parse(e){return i(this,void 0,void 0,(function*(){const t=this.deserializeResponse(e);if(!t)throw new d(\"Service response error, check status for details\",p(\"Unable to deserialize service response\"));if(t.status>=400)throw A.create(e);return{}}))}get path(){const{keySet:{subscribeKey:e},channels:t}=this.parameters;return`/v2/presence/sub-key/${e}/channel/${R(null!=t?t:[],\",\")}/heartbeat`}get queryParameters(){const{channelGroups:e,state:t,heartbeat:s}=this.parameters,n={heartbeat:`${s}`};return e&&0!==e.length&&(n[\"channel-group\"]=e.join(\",\")),t&&(n.state=JSON.stringify(t)),n}}class _t extends se{constructor(e){super(),this.parameters=e,this.parameters.channelGroups&&(this.parameters.channelGroups=Array.from(new Set(this.parameters.channelGroups))),this.parameters.channels&&(this.parameters.channels=Array.from(new Set(this.parameters.channels)))}operation(){return re.PNUnsubscribeOperation}validate(){const{keySet:{subscribeKey:e},channels:t=[],channelGroups:s=[]}=this.parameters;return e?0===t.length&&0===s.length?\"At least one `channel` or `channel group` should be provided.\":void 0:\"Missing Subscribe Key\"}parse(e){return i(this,void 0,void 0,(function*(){const t=this.deserializeResponse(e);if(!t)throw new d(\"Service response error, check status for details\",p(\"Unable to deserialize service response\"));if(t.status>=400)throw A.create(e);return{}}))}get path(){var e;const{keySet:{subscribeKey:t},channels:s}=this.parameters;return`/v2/presence/sub-key/${t}/channel/${R(null!==(e=null==s?void 0:s.sort())&&void 0!==e?e:[],\",\")}/leave`}get queryParameters(){const{channelGroups:e}=this.parameters;return e&&0!==e.length?{\"channel-group\":e.sort().join(\",\")}:{}}}class At extends se{constructor(e){super(),this.parameters=e}operation(){return re.PNWhereNowOperation}validate(){if(!this.parameters.keySet.subscribeKey)return\"Missing Subscribe Key\"}parse(e){return i(this,void 0,void 0,(function*(){const t=this.deserializeResponse(e);if(!t)throw new d(\"Service response error, check status for details\",p(\"Unable to deserialize service response\"));if(t.status>=400)throw A.create(e);return t.payload?{channels:t.payload.channels}:{channels:[]}}))}get path(){const{keySet:{subscribeKey:e},uuid:t}=this.parameters;return`/v2/presence/sub-key/${e}/uuid/${I(t)}`}}class jt extends se{constructor(e){var t,s,n,r,i,o;super(),this.parameters=e,null!==(t=(r=this.parameters).queryParameters)&&void 0!==t||(r.queryParameters={}),null!==(s=(i=this.parameters).includeUUIDs)&&void 0!==s||(i.includeUUIDs=true),null!==(n=(o=this.parameters).includeState)&&void 0!==n||(o.includeState=false)}operation(){const{channels:e=[],channelGroups:t=[]}=this.parameters;return 0===e.length&&0===t.length?re.PNGlobalHereNowOperation:re.PNHereNowOperation}validate(){if(!this.parameters.keySet.subscribeKey)return\"Missing Subscribe Key\"}parse(e){return i(this,void 0,void 0,(function*(){var t,s;const n=this.deserializeResponse(e);if(!n)throw new d(\"Service response error, check status for details\",p(\"Unable to deserialize service response\"));if(n.status>=400)throw A.create(e);const r=\"occupancy\"in n?1:n.payload.total_channels,i=\"occupancy\"in n?n.occupancy:n.payload.total_channels,o={};let a={};if(\"occupancy\"in n){const e=this.parameters.channels[0];a[e]={uuids:null!==(t=n.uuids)&&void 0!==t?t:[],occupancy:i}}else a=null!==(s=n.payload.channels)&&void 0!==s?s:{};return Object.keys(a).forEach((e=>{const t=a[e];o[e]={occupants:this.parameters.includeUUIDs?t.uuids.map((e=>\"string\"==typeof e?{uuid:e,state:null}:e)):[],name:e,occupancy:t.occupancy}})),{totalChannels:r,totalOccupancy:i,channels:o}}))}get path(){const{keySet:{subscribeKey:e},channels:t,channelGroups:s}=this.parameters;let n=`/v2/presence/sub-key/${e}`;return(t&&t.length>0||s&&s.length>0)&&(n+=`/channel/${R(null!=t?t:[],\",\")}`),n}get queryParameters(){const{channelGroups:e,includeUUIDs:t,includeState:s,queryParameters:n}=this.parameters;return Object.assign(Object.assign(Object.assign(Object.assign({},t?{}:{disable_uuids:\"1\"}),null!=s&&s?{state:\"1\"}:{}),e&&e.length>0?{\"channel-group\":e.join(\",\")}:{}),n)}}class It extends se{constructor(e){super({method:H.DELETE}),this.parameters=e}operation(){return re.PNDeleteMessagesOperation}validate(){return this.parameters.keySet.subscribeKey?this.parameters.channel?void 0:\"Missing channel\":\"Missing Subscribe Key\"}parse(e){return i(this,void 0,void 0,(function*(){const t=this.deserializeResponse(e);if(!t)throw new d(\"Service response error, check status for details\",p(\"Unable to deserialize service response\"));if(t.status>=400)throw A.create(e);return{}}))}get path(){const{keySet:{subscribeKey:e},channel:t}=this.parameters;return`/v3/history/sub-key/${e}/channel/${I(t)}`}get queryParameters(){const{start:e,end:t}=this.parameters;return Object.assign(Object.assign({},e?{start:e}:{}),t?{end:t}:{})}}class Rt extends se{constructor(e){super(),this.parameters=e}operation(){return re.PNMessageCounts}validate(){const{keySet:{subscribeKey:e},channels:t,timetoken:s,channelTimetokens:n}=this.parameters;return e?t?s&&n?\"`timetoken` and `channelTimetokens` are incompatible together\":s||n?n&&n.length>1&&n.length!==t.length?\"Length of `channelTimetokens` and `channels` do not match\":void 0:\"`timetoken` or `channelTimetokens` need to be set\":\"Missing channels\":\"Missing Subscribe Key\"}parse(e){return i(this,void 0,void 0,(function*(){const t=this.deserializeResponse(e);if(!t)throw new d(\"Service response error, check status for details\",p(\"Unable to deserialize service response\"));if(t.status>=400)throw A.create(e);return{channels:t.channels}}))}get path(){return`/v3/history/sub-key/${this.parameters.keySet.subscribeKey}/message-counts/${R(this.parameters.channels)}`}get queryParameters(){let{channelTimetokens:e}=this.parameters;return this.parameters.timetoken&&(e=[this.parameters.timetoken]),Object.assign(Object.assign({},1===e.length?{timetoken:e[0]}:{}),e.length>1?{channelsTimetoken:e.join(\",\")}:{})}}class Ut extends se{constructor(e){var t,s,n;super(),this.parameters=e,e.count?e.count=Math.min(e.count,100):e.count=100,null!==(t=e.stringifiedTimeToken)&&void 0!==t||(e.stringifiedTimeToken=false),null!==(s=e.includeMeta)&&void 0!==s||(e.includeMeta=false),null!==(n=e.logVerbosity)&&void 0!==n||(e.logVerbosity=false)}operation(){return re.PNHistoryOperation}validate(){return this.parameters.keySet.subscribeKey?this.parameters.channel?void 0:\"Missing channel\":\"Missing Subscribe Key\"}parse(e){return i(this,void 0,void 0,(function*(){const t=this.deserializeResponse(e);if(!t)throw new d(\"Service response error, check status for details\",p(\"Unable to deserialize service response\"));const s=t[0],n=t[1],r=t[2];return Array.isArray(s)?{messages:s.map((e=>{const t=this.processPayload(e.message),s={entry:t.payload,timetoken:e.timetoken};return t.error&&(s.error=t.error),e.meta&&(s.meta=e.meta),s})),startTimeToken:n,endTimeToken:r}:{messages:[],startTimeToken:n,endTimeToken:r}}))}get path(){const{keySet:{subscribeKey:e},channel:t}=this.parameters;return`/v2/history/sub-key/${e}/channel/${I(t)}`}get queryParameters(){const{start:e,end:t,reverse:s,count:n,stringifiedTimeToken:r,includeMeta:i}=this.parameters;return Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({count:n,include_token:\"true\"},e?{start:e}:{}),t?{end:t}:{}),r?{string_message_token:\"true\"}:{}),null!=s?{reverse:s.toString()}:{}),i?{include_meta:\"true\"}:{})}processPayload(e){const{crypto:t,logVerbosity:s}=this.parameters;if(!t||\"string\"!=typeof e)return{payload:e};let n,r;try{const s=t.decrypt(e);n=s instanceof ArrayBuffer?JSON.parse(Ut.decoder.decode(s)):s}catch(t){s&&console.log(\"decryption error\",t.message),n=e,r=`Error while decrypting message content: ${t.message}`}return{payload:n,error:r}}}var Tt;!function(e){e[e.Message=-1]=\"Message\",e[e.Files=4]=\"Files\"}(Tt||(Tt={}));class Ft extends se{constructor(e){var t,s,n,r,i;super(),this.parameters=e;const o=null!==(t=e.includeMessageActions)&&void 0!==t&&t,a=e.channels.length>1||o?25:100;e.count?e.count=Math.min(e.count,a):e.count=a,e.includeUuid?e.includeUUID=e.includeUuid:null!==(s=e.includeUUID)&&void 0!==s||(e.includeUUID=true),null!==(n=e.stringifiedTimeToken)&&void 0!==n||(e.stringifiedTimeToken=false),null!==(r=e.includeMessageType)&&void 0!==r||(e.includeMessageType=true),null!==(i=e.logVerbosity)&&void 0!==i||(e.logVerbosity=false)}operation(){return re.PNFetchMessagesOperation}validate(){const{keySet:{subscribeKey:e},channels:t,includeMessageActions:s}=this.parameters;return e?t?void 0!==s&&s&&t.length>1?\"History can return actions data for a single channel only. Either pass a single channel or disable the includeMessageActions flag.\":void 0:\"Missing channels\":\"Missing Subscribe Key\"}parse(e){return i(this,void 0,void 0,(function*(){var t;const s=this.deserializeResponse(e);if(!s)throw new d(\"Service response error, check status for details\",p(\"Unable to deserialize service response\"));if(s.status>=400)throw A.create(e);const n=null!==(t=s.channels)&&void 0!==t?t:{},r={};return Object.keys(n).forEach((e=>{r[e]=n[e].map((t=>{null===t.message_type&&(t.message_type=Tt.Message);const s=this.processPayload(e,t),n={channel:e,timetoken:t.timetoken,message:s.payload,messageType:t.message_type,uuid:t.uuid};if(t.actions){const e=n;e.actions=t.actions,e.data=t.actions}return t.meta&&(n.meta=t.meta),s.error&&(n.error=s.error),n}))})),s.more?{channels:r,more:s.more}:{channels:r}}))}get path(){const{keySet:{subscribeKey:e},channels:t,includeMessageActions:s}=this.parameters;return`/v3/${s?\"history-with-actions\":\"history\"}/sub-key/${e}/channel/${R(t)}`}get queryParameters(){const{start:e,end:t,count:s,includeMessageType:n,includeMeta:r,includeUUID:i,stringifiedTimeToken:o}=this.parameters;return Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({max:s},e?{start:e}:{}),t?{end:t}:{}),o?{string_message_token:\"true\"}:{}),void 0!==r&&r?{include_meta:\"true\"}:{}),i?{include_uuid:\"true\"}:{}),n?{include_message_type:\"true\"}:{})}processPayload(e,t){const{crypto:s,logVerbosity:n}=this.parameters;if(!s||\"string\"!=typeof t.message)return{payload:t.message};let r,i;try{const e=s.decrypt(t.message);r=e instanceof ArrayBuffer?JSON.parse(Ft.decoder.decode(e)):e}catch(e){n&&console.log(\"decryption error\",e.message),r=t.message,i=`Error while decrypting message content: ${e.message}`}if(!i&&r&&t.message_type==Tt.Files&&\"object\"==typeof r&&this.isFileMessage(r)){const t=r;return{payload:{message:t.message,file:Object.assign(Object.assign({},t.file),{url:this.parameters.getFileUrl({channel:e,id:t.file.id,name:t.file.name})})},error:i}}return{payload:r,error:i}}isFileMessage(e){return void 0!==e.file}}class xt extends se{constructor(e){super(),this.parameters=e}operation(){return re.PNGetMessageActionsOperation}validate(){return this.parameters.keySet.subscribeKey?this.parameters.channel?void 0:\"Missing message channel\":\"Missing Subscribe Key\"}parse(e){return i(this,void 0,void 0,(function*(){const t=this.deserializeResponse(e);if(!t)throw new d(\"Service response error, check status for details\",p(\"Unable to deserialize service response\"));if(t.status>=400)throw A.create(e);let s=null,n=null;return t.data.length>0&&(s=t.data[0].actionTimetoken,n=t.data[t.data.length-1].actionTimetoken),{data:t.data,more:t.more,start:s,end:n}}))}get path(){const{keySet:{subscribeKey:e},channel:t}=this.parameters;return`/v1/message-actions/${e}/channel/${I(t)}`}get queryParameters(){const{limit:e,start:t,end:s}=this.parameters;return Object.assign(Object.assign(Object.assign({},t?{start:t}:{}),s?{end:s}:{}),e?{limit:e}:{})}}class Dt extends se{constructor(e){super({method:H.POST}),this.parameters=e}operation(){return re.PNAddMessageActionOperation}validate(){const{keySet:{subscribeKey:e},action:t,channel:s,messageTimetoken:n}=this.parameters;return e?s?n?t?t.value?t.type?t.type.length>15?\"Action.type value exceed maximum length of 15\":void 0:\"Missing Action.type\":\"Missing Action.value\":\"Missing Action\":\"Missing message timetoken\":\"Missing message channel\":\"Missing Subscribe Key\"}parse(e){return i(this,void 0,void 0,(function*(){const t=this.deserializeResponse(e);if(!t)throw new d(\"Service response error, check status for details\",p(\"Unable to deserialize service response\"));if(t.status>=400)throw A.create(e);return{data:t.data}}))}get path(){const{keySet:{subscribeKey:e},channel:t,messageTimetoken:s}=this.parameters;return`/v1/message-actions/${e}/channel/${I(t)}/message/${s}`}get headers(){return{\"Content-Type\":\"application/json\"}}get body(){return JSON.stringify(this.parameters.action)}}class qt extends se{constructor(e){super({method:H.DELETE}),this.parameters=e}operation(){return re.PNRemoveMessageActionOperation}validate(){const{keySet:{subscribeKey:e},channel:t,messageTimetoken:s,actionTimetoken:n}=this.parameters;return e?t?s?n?void 0:\"Missing action timetoken\":\"Missing message timetoken\":\"Missing message action channel\":\"Missing Subscribe Key\"}parse(e){return i(this,void 0,void 0,(function*(){const t=this.deserializeResponse(e);if(!t)throw new d(\"Service response error, check status for details\",p(\"Unable to deserialize service response\"));if(t.status>=400)throw A.create(e);return{data:t.data}}))}get path(){const{keySet:{subscribeKey:e},channel:t,actionTimetoken:s,messageTimetoken:n}=this.parameters;return`/v1/message-actions/${e}/channel/${I(t)}/message/${n}/action/${s}`}}class Gt extends se{constructor(e){var t,s;super(),this.parameters=e,null!==(t=(s=this.parameters).storeInHistory)&&void 0!==t||(s.storeInHistory=true)}operation(){return re.PNPublishFileMessageOperation}validate(){const{channel:e,fileId:t,fileName:s}=this.parameters;return e?t?s?void 0:\"file name can't be empty\":\"file id can't be empty\":\"channel can't be empty\"}parse(e){return i(this,void 0,void 0,(function*(){const t=this.deserializeResponse(e);if(!t)throw new d(\"Service response error, check status for details\",p(\"Unable to deserialize service response\"));return{timetoken:t[2]}}))}get path(){const{message:e,channel:t,keySet:{publishKey:s,subscribeKey:n},fileId:r,fileName:i}=this.parameters,o=Object.assign({file:{name:i,id:r}},e?{message:e}:{});return`/v1/files/publish-file/${s}/${n}/0/${I(t)}/0/${I(this.prepareMessagePayload(o))}`}get queryParameters(){const{storeInHistory:e,ttl:t,meta:s}=this.parameters;return Object.assign(Object.assign({store:e?\"1\":\"0\"},t?{ttl:t}:{}),s&&\"object\"==typeof s?{meta:JSON.stringify(s)}:{})}prepareMessagePayload(e){const{crypto:t}=this.parameters;if(!t)return JSON.stringify(e)||\"\";const s=t.encrypt(JSON.stringify(e));return JSON.stringify(\"string\"==typeof s?s:u(s))}}class Kt extends se{constructor(e){super({method:H.LOCAL}),this.parameters=e}operation(){return re.PNGetFileUrlOperation}validate(){const{channel:e,id:t,name:s}=this.parameters;return e?t?s?void 0:\"file name can't be empty\":\"file id can't be empty\":\"channel can't be empty\"}parse(e){return i(this,void 0,void 0,(function*(){return e.url}))}get path(){const{channel:e,id:t,name:s,keySet:{subscribeKey:n}}=this.parameters;return`/v1/files/${n}/channels/${I(e)}/files/${t}/${s}`}}class $t extends se{constructor(e){super({method:H.DELETE}),this.parameters=e}operation(){return re.PNDeleteFileOperation}validate(){const{channel:e,id:t,name:s}=this.parameters;return e?t?s?void 0:\"file name can't be empty\":\"file id can't be empty\":\"channel can't be empty\"}parse(e){return i(this,void 0,void 0,(function*(){const t=this.deserializeResponse(e);if(!t)throw new d(\"Service response error, check status for details\",p(\"Unable to deserialize service response\"));if(t.status>=400)throw A.create(e);return t}))}get path(){const{keySet:{subscribeKey:e},id:t,channel:s,name:n}=this.parameters;return`/v1/files/${e}/channels/${I(s)}/files/${t}/${n}`}}class Lt extends se{constructor(e){var t,s;super(),this.parameters=e,null!==(t=(s=this.parameters).limit)&&void 0!==t||(s.limit=100)}operation(){return re.PNListFilesOperation}validate(){if(!this.parameters.channel)return\"channel can't be empty\"}parse(e){return i(this,void 0,void 0,(function*(){const t=this.deserializeResponse(e);if(!t)throw new d(\"Service response error, check status for details\",p(\"Unable to deserialize service response\"));if(t.status>=400)throw A.create(e);return t}))}get path(){const{keySet:{subscribeKey:e},channel:t}=this.parameters;return`/v1/files/${e}/channels/${I(t)}/files`}get queryParameters(){const{limit:e,next:t}=this.parameters;return Object.assign({limit:e},t?{next:t}:{})}}class Bt extends se{constructor(e){super({method:H.POST}),this.parameters=e}operation(){return re.PNGenerateUploadUrlOperation}validate(){return this.parameters.channel?this.parameters.name?void 0:\"'name' can't be empty\":\"channel can't be empty\"}parse(e){return i(this,void 0,void 0,(function*(){const t=this.deserializeResponse(e);if(!t)throw new d(\"Service response error, check status for details\",p(\"Unable to deserialize service response\"));if(t.status>=400)throw A.create(e);return{id:t.data.id,name:t.data.name,url:t.file_upload_request.url,formFields:t.file_upload_request.form_fields}}))}get path(){const{keySet:{subscribeKey:e},channel:t}=this.parameters;return`/v1/files/${e}/channels/${I(t)}/generate-upload-url`}get headers(){return{\"Content-Type\":\"application/json\"}}get body(){return JSON.stringify({name:this.parameters.name})}}class Ht extends se{constructor(e){super({method:H.POST}),this.parameters=e;const t=e.file.mimeType;t&&(e.formFields=e.formFields.map((e=>\"Content-Type\"===e.name?{name:e.name,value:t}:e)))}operation(){return re.PNPublishFileOperation}validate(){const{fileId:e,fileName:t,file:s,uploadUrl:n}=this.parameters;return e?t?s?n?void 0:\"Validation failed: file upload 'url' can't be empty\":\"Validation failed: 'file' can't be empty\":\"Validation failed: file 'name' can't be empty\":\"Validation failed: file 'id' can't be empty\"}parse(e){return i(this,void 0,void 0,(function*(){return{status:e.status,message:e.body?Ht.decoder.decode(e.body):\"OK\"}}))}request(){return Object.assign(Object.assign({},super.request()),{origin:new URL(this.parameters.uploadUrl).origin,timeout:300})}get path(){const{pathname:e,search:t}=new URL(this.parameters.uploadUrl);return`${e}${t}`}get body(){return this.parameters.file}get formData(){return this.parameters.formFields}}class zt{constructor(e){var t;if(this.parameters=e,this.file=null===(t=this.parameters.PubNubFile)||void 0===t?void 0:t.create(e.file),!this.file)throw new Error(\"File upload error: unable to create File object.\")}process(){return i(this,void 0,void 0,(function*(){let e,t;return this.generateFileUploadUrl().then((s=>(e=s.name,t=s.id,this.uploadFile(s)))).then((e=>{if(204!==e.status)throw new d(\"Upload to bucket was unsuccessful\",{error:!0,statusCode:e.status,category:h.PNUnknownCategory,operation:re.PNPublishFileOperation,errorData:{message:e.message}})})).then((()=>this.publishFileMessage(t,e))).catch((e=>{if(e instanceof d)throw e;const t=e instanceof A?e:A.create(e);throw new d(\"File upload error.\",t.toStatus(re.PNPublishFileOperation))}))}))}generateFileUploadUrl(){return i(this,void 0,void 0,(function*(){const e=new Bt(Object.assign(Object.assign({},this.parameters),{name:this.file.name,keySet:this.parameters.keySet}));return this.parameters.sendRequest(e)}))}uploadFile(e){return i(this,void 0,void 0,(function*(){const{cipherKey:t,PubNubFile:s,crypto:n,cryptography:r}=this.parameters,{id:i,name:o,url:a,formFields:c}=e;return this.parameters.PubNubFile.supportsEncryptFile&&(!t&&n?this.file=yield n.encryptFile(this.file,s):t&&r&&(this.file=yield r.encryptFile(t,this.file,s))),this.parameters.sendRequest(new Ht({fileId:i,fileName:o,file:this.file,uploadUrl:a,formFields:c}))}))}publishFileMessage(e,t){return i(this,void 0,void 0,(function*(){var s,n,r,i;let o,a={timetoken:\"0\"},c=this.parameters.fileUploadPublishRetryLimit,u=!1;do{try{a=yield this.parameters.publishFile(Object.assign(Object.assign({},this.parameters),{fileId:e,fileName:t})),u=!0}catch(e){e instanceof d&&(o=e),c-=1}}while(!u&&c>0);if(u)return{status:200,timetoken:a.timetoken,id:e,name:t};throw new d(\"Publish failed. You may want to execute that operation manually using pubnub.publishFile\",{error:!0,category:null!==(n=null===(s=o.status)||void 0===s?void 0:s.category)&&void 0!==n?n:h.PNUnknownCategory,statusCode:null!==(i=null===(r=o.status)||void 0===r?void 0:r.statusCode)&&void 0!==i?i:0,channel:this.parameters.channel,id:e,name:t})}))}}class Vt{subscribe(e){const t=null==e?void 0:e.timetoken;this.pubnub.subscribe(Object.assign({channels:this.channelNames,channelGroups:this.groupNames},null!==t&&\"\"!==t&&{timetoken:t}))}unsubscribe(){this.pubnub.unsubscribe({channels:this.channelNames.filter((e=>!e.endsWith(\"-pnpres\"))),channelGroups:this.groupNames.filter((e=>!e.endsWith(\"-pnpres\")))})}set onMessage(e){this.listener.message=e}set onPresence(e){this.listener.presence=e}set onSignal(e){this.listener.signal=e}set onObjects(e){this.listener.objects=e}set onMessageAction(e){this.listener.messageAction=e}set onFile(e){this.listener.file=e}addListener(e){this.eventEmitter.addListener(e,this.channelNames.filter((e=>!e.endsWith(\"-pnpres\"))),this.groupNames.filter((e=>!e.endsWith(\"-pnpres\"))))}removeListener(e){this.eventEmitter.removeListener(e,this.channelNames,this.groupNames)}get channels(){return this.channelNames.slice(0)}get channelGroups(){return this.groupNames.slice(0)}}class Wt extends Vt{constructor({channels:e=[],channelGroups:t=[],subscriptionOptions:s,eventEmitter:n,pubnub:r}){super(),this.channelNames=[],this.groupNames=[],this.subscriptionList=[],this.options=s,this.eventEmitter=n,this.pubnub=r,e.filter((e=>!e.endsWith(\"-pnpres\"))).forEach((e=>{const t=this.pubnub.channel(e).subscription(this.options);this.channelNames=[...this.channelNames,...t.channels],this.subscriptionList.push(t)})),t.filter((e=>!e.endsWith(\"-pnpres\"))).forEach((e=>{const t=this.pubnub.channelGroup(e).subscription(this.options);this.groupNames=[...this.groupNames,...t.channelGroups],this.subscriptionList.push(t)})),this.listener={},n.addListener(this.listener,this.channelNames.filter((e=>!e.endsWith(\"-pnpres\"))),this.groupNames.filter((e=>!e.endsWith(\"-pnpres\"))))}addSubscription(e){this.subscriptionList.push(e),this.channelNames=[...this.channelNames,...e.channels],this.groupNames=[...this.groupNames,...e.channelGroups],this.eventEmitter.addListener(this.listener,e.channels,e.channelGroups)}removeSubscription(e){const t=e.channels,s=e.channelGroups;this.channelNames=this.channelNames.filter((e=>!t.includes(e))),this.groupNames=this.groupNames.filter((e=>!s.includes(e))),this.subscriptionList=this.subscriptionList.filter((t=>t!==e)),this.eventEmitter.removeListener(this.listener,t,s)}addSubscriptionSet(e){this.subscriptionList=[...this.subscriptionList,...e.subscriptions],this.channelNames=[...this.channelNames,...e.channels],this.groupNames=[...this.groupNames,...e.channelGroups],this.eventEmitter.addListener(this.listener,e.channels,e.channelGroups)}removeSubscriptionSet(e){const t=e.channels,s=e.channelGroups;this.channelNames=this.channelNames.filter((e=>!t.includes(e))),this.groupNames=this.groupNames.filter((e=>!s.includes(e))),this.subscriptionList=this.subscriptionList.filter((t=>!e.subscriptions.includes(t))),this.eventEmitter.removeListener(this.listener,t,s)}get subscriptions(){return this.subscriptionList.slice(0)}}class Jt extends Vt{constructor({channels:e,channelGroups:t,subscriptionOptions:s,eventEmitter:n,pubnub:r}){super(),this.channelNames=[],this.groupNames=[],this.channelNames=e,this.groupNames=t,this.options=s,this.pubnub=r,this.eventEmitter=n,this.listener={},n.addListener(this.listener,this.channelNames.filter((e=>!e.endsWith(\"-pnpres\"))),this.groupNames.filter((e=>!e.endsWith(\"-pnpres\"))))}addSubscription(e){return new Wt({channels:[...this.channelNames,...e.channels],channelGroups:[...this.groupNames,...e.channelGroups],subscriptionOptions:Object.assign(Object.assign({},this.options),null==e?void 0:e.options),eventEmitter:this.eventEmitter,pubnub:this.pubnub})}}class Qt{constructor(e,t,s){this.id=e,this.eventEmitter=t,this.pubnub=s}subscription(e){return new Jt({channels:[this.id],channelGroups:[],subscriptionOptions:e,eventEmitter:this.eventEmitter,pubnub:this.pubnub})}}class Yt{constructor(e,t,s){this.eventEmitter=t,this.pubnub=s,this.name=e}subscription(e){return new Jt({channels:[],channelGroups:(null==e?void 0:e.receivePresenceEvents)?[this.name,`${this.name}-pnpres`]:[this.name],subscriptionOptions:e,eventEmitter:this.eventEmitter,pubnub:this.pubnub})}}class Xt{constructor(e,t,s){this.id=e,this.eventEmitter=t,this.pubnub=s}subscription(e){return new Jt({channels:[this.id],channelGroups:[],subscriptionOptions:e,eventEmitter:this.eventEmitter,pubnub:this.pubnub})}}class Zt{constructor(e,t,s){this.eventEmitter=t,this.pubnub=s,this.name=e}subscription(e){return new Jt({channels:(null==e?void 0:e.receivePresenceEvents)?[this.name,`${this.name}-pnpres`]:[this.name],channelGroups:[],subscriptionOptions:e,eventEmitter:this.eventEmitter,pubnub:this.pubnub})}}class es extends se{constructor(e){super(),this.parameters=e}operation(){return re.PNRemoveChannelsFromGroupOperation}validate(){const{keySet:{subscribeKey:e},channels:t,channelGroup:s}=this.parameters;return e?s?t?void 0:\"Missing channels\":\"Missing Channel Group\":\"Missing Subscribe Key\"}parse(e){return i(this,void 0,void 0,(function*(){const t=this.deserializeResponse(e);if(!t)throw new d(\"Service response error, check status for details\",p(\"Unable to deserialize service response\"));if(t.status>=400)throw A.create(e);return{}}))}get path(){const{keySet:{subscribeKey:e},channelGroup:t}=this.parameters;return`/v1/channel-registration/sub-key/${e}/channel-group/${I(t)}`}get queryParameters(){return{remove:this.parameters.channels.join(\",\")}}}class ts extends se{constructor(e){super(),this.parameters=e}operation(){return re.PNAddChannelsToGroupOperation}validate(){const{keySet:{subscribeKey:e},channels:t,channelGroup:s}=this.parameters;return e?s?t?void 0:\"Missing channels\":\"Missing Channel Group\":\"Missing Subscribe Key\"}parse(e){return i(this,void 0,void 0,(function*(){const t=this.deserializeResponse(e);if(!t)throw new d(\"Service response error, check status for details\",p(\"Unable to deserialize service response\"));if(t.status>=400)throw A.create(e);return{}}))}get path(){const{keySet:{subscribeKey:e},channelGroup:t}=this.parameters;return`/v1/channel-registration/sub-key/${e}/channel-group/${I(t)}`}get queryParameters(){return{add:this.parameters.channels.join(\",\")}}}class ss extends se{constructor(e){super(),this.parameters=e}operation(){return re.PNChannelsForGroupOperation}validate(){return this.parameters.keySet.subscribeKey?this.parameters.channelGroup?void 0:\"Missing Channel Group\":\"Missing Subscribe Key\"}parse(e){return i(this,void 0,void 0,(function*(){const t=this.deserializeResponse(e);if(!t)throw new d(\"Service response error, check status for details\",p(\"Unable to deserialize service response\"));if(t.status>=400)throw A.create(e);return{channels:t.payload.channels}}))}get path(){const{keySet:{subscribeKey:e},channelGroup:t}=this.parameters;return`/v1/channel-registration/sub-key/${e}/channel-group/${I(t)}`}}class ns extends se{constructor(e){super(),this.parameters=e}operation(){return re.PNRemoveGroupOperation}validate(){return this.parameters.keySet.subscribeKey?this.parameters.channelGroup?void 0:\"Missing Channel Group\":\"Missing Subscribe Key\"}parse(e){return i(this,void 0,void 0,(function*(){const t=this.deserializeResponse(e);if(!t)throw new d(\"Service response error, check status for details\",p(\"Unable to deserialize service response\"));if(t.status>=400)throw A.create(e);return{}}))}get path(){const{keySet:{subscribeKey:e},channelGroup:t}=this.parameters;return`/v1/channel-registration/sub-key/${e}/channel-group/${I(t)}/remove`}}class rs extends se{constructor(e){super(),this.parameters=e}operation(){return re.PNChannelGroupsOperation}validate(){if(!this.parameters.keySet.subscribeKey)return\"Missing Subscribe Key\"}parse(e){return i(this,void 0,void 0,(function*(){const t=this.deserializeResponse(e);if(!t)throw new d(\"Service response error, check status for details\",p(\"Unable to deserialize service response\"));if(t.status>=400)throw A.create(e);return{groups:t.payload.groups}}))}get path(){return`/v1/channel-registration/sub-key/${this.parameters.keySet.subscribeKey}/channel-group`}}class is{constructor(e,t){this.keySet=e,this.sendRequest=t}listChannels(e,t){return i(this,void 0,void 0,(function*(){const s=new ss(Object.assign(Object.assign({},e),{keySet:this.keySet}));return t?this.sendRequest(s,t):this.sendRequest(s)}))}listGroups(e){return i(this,void 0,void 0,(function*(){const t=new rs({keySet:this.keySet});return e?this.sendRequest(t,e):this.sendRequest(t)}))}addChannels(e,t){return i(this,void 0,void 0,(function*(){const s=new ts(Object.assign(Object.assign({},e),{keySet:this.keySet}));return t?this.sendRequest(s,t):this.sendRequest(s)}))}removeChannels(e,t){return i(this,void 0,void 0,(function*(){const s=new es(Object.assign(Object.assign({},e),{keySet:this.keySet}));return t?this.sendRequest(s,t):this.sendRequest(s)}))}deleteGroup(e,t){return i(this,void 0,void 0,(function*(){const s=new ns(Object.assign(Object.assign({},e),{keySet:this.keySet}));return t?this.sendRequest(s,t):this.sendRequest(s)}))}}class os extends se{constructor(e){var t,s;super(),this.parameters=e,\"apns2\"===this.parameters.pushGateway&&(null!==(t=(s=this.parameters).environment)&&void 0!==t||(s.environment=\"development\")),this.parameters.count&&this.parameters.count>1e3&&(this.parameters.count=1e3)}operation(){throw Error(\"Should be implemented in subclass.\")}validate(){const{keySet:{subscribeKey:e},action:t,device:s,pushGateway:n}=this.parameters;return e?s?\"add\"!==t&&\"remove\"!==t||\"channels\"in this.parameters&&0!==this.parameters.channels.length?n?\"apns2\"!==this.parameters.pushGateway||this.parameters.topic?void 0:\"Missing APNS2 topic\":\"Missing GW Type (pushGateway: gcm or apns2)\":\"Missing Channels\":\"Missing Device ID (device)\":\"Missing Subscribe Key\"}parse(e){return i(this,void 0,void 0,(function*(){throw Error(\"Should be implemented in subclass.\")}))}get path(){const{keySet:{subscribeKey:e},action:t,device:s,pushGateway:n}=this.parameters;let r=\"apns2\"===n?`/v2/push/sub-key/${e}/devices-apns2/${s}`:`/v1/push/sub-key/${e}/devices/${s}`;return\"remove-device\"===t&&(r=`${r}/remove`),r}get queryParameters(){const{start:e,count:t}=this.parameters;let s=Object.assign(Object.assign({type:this.parameters.pushGateway},e?{start:e}:{}),t&&t>0?{count:t}:{});if(\"channels\"in this.parameters&&(s[this.parameters.action]=this.parameters.channels.join(\",\")),\"apns2\"===this.parameters.pushGateway){const{environment:e,topic:t}=this.parameters;s=Object.assign(Object.assign({},s),{environment:e,topic:t})}return s}}class as extends os{constructor(e){super(Object.assign(Object.assign({},e),{action:\"remove\"}))}operation(){return re.PNRemovePushNotificationEnabledChannelsOperation}parse(e){return i(this,void 0,void 0,(function*(){if(!this.deserializeResponse(e))throw new d(\"Service response error, check status for details\",p(\"Unable to deserialize service response\"));return{}}))}}class cs extends os{constructor(e){super(Object.assign(Object.assign({},e),{action:\"list\"}))}operation(){return re.PNPushNotificationEnabledChannelsOperation}parse(e){return i(this,void 0,void 0,(function*(){const t=this.deserializeResponse(e);if(!t)throw new d(\"Service response error, check status for details\",p(\"Unable to deserialize service response\"));return{channels:t}}))}}class us extends os{constructor(e){super(Object.assign(Object.assign({},e),{action:\"add\"}))}operation(){return re.PNAddPushNotificationEnabledChannelsOperation}parse(e){return i(this,void 0,void 0,(function*(){if(!this.deserializeResponse(e))throw new d(\"Service response error, check status for details\",p(\"Unable to deserialize service response\"));return{}}))}}class ls extends os{constructor(e){super(Object.assign(Object.assign({},e),{action:\"remove-device\"}))}operation(){return re.PNRemoveAllPushNotificationsOperation}parse(e){return i(this,void 0,void 0,(function*(){if(!this.deserializeResponse(e))throw new d(\"Service response error, check status for details\",p(\"Unable to deserialize service response\"));return{}}))}}class hs{constructor(e,t){this.keySet=e,this.sendRequest=t}listChannels(e,t){return i(this,void 0,void 0,(function*(){const s=new cs(Object.assign(Object.assign({},e),{keySet:this.keySet}));return t?this.sendRequest(s,t):this.sendRequest(s)}))}addChannels(e,t){return i(this,void 0,void 0,(function*(){const s=new us(Object.assign(Object.assign({},e),{keySet:this.keySet}));return t?this.sendRequest(s,t):this.sendRequest(s)}))}removeChannels(e,t){return i(this,void 0,void 0,(function*(){const s=new as(Object.assign(Object.assign({},e),{keySet:this.keySet}));return t?this.sendRequest(s,t):this.sendRequest(s)}))}deleteDevice(e,t){return i(this,void 0,void 0,(function*(){const s=new ls(Object.assign(Object.assign({},e),{keySet:this.keySet}));return t?this.sendRequest(s,t):this.sendRequest(s)}))}}class ds extends se{constructor(e){var t,s,n,r,i,o;super(),this.parameters=e,null!==(t=e.include)&&void 0!==t||(e.include={}),null!==(s=(i=e.include).customFields)&&void 0!==s||(i.customFields=false),null!==(n=(o=e.include).totalCount)&&void 0!==n||(o.totalCount=false),null!==(r=e.limit)&&void 0!==r||(e.limit=100)}operation(){return re.PNGetAllChannelMetadataOperation}parse(e){return i(this,void 0,void 0,(function*(){const t=this.deserializeResponse(e);if(!t)throw new d(\"Service response error, check status for details\",p(\"Unable to deserialize service response\"));if(t.status>=400)throw A.create(e);return t}))}get path(){return`/v2/objects/${this.parameters.keySet.subscribeKey}/channels`}get queryParameters(){const{include:e,page:t,filter:s,sort:n,limit:r}=this.parameters;let i=\"\";return i=\"string\"==typeof n?n:Object.entries(null!=n?n:{}).map((([e,t])=>null!==t?`${e}:${t}`:e)),Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({include:[\"status\",\"type\",...e.customFields?[\"custom\"]:[]].join(\",\"),count:`${e.totalCount}`},s?{filter:s}:{}),(null==t?void 0:t.next)?{start:t.next}:{}),(null==t?void 0:t.prev)?{end:t.prev}:{}),r?{limit:r}:{}),i.length?{sort:i}:{})}}class ps extends se{constructor(e){super({method:H.DELETE}),this.parameters=e}operation(){return re.PNRemoveChannelMetadataOperation}validate(){if(!this.parameters.channel)return\"Channel cannot be empty\"}parse(e){return i(this,void 0,void 0,(function*(){const t=this.deserializeResponse(e);if(!t)throw new d(\"Service response error, check status for details\",p(\"Unable to deserialize service response\"));if(t.status>=400)throw A.create(e);return t}))}get path(){const{keySet:{subscribeKey:e},channel:t}=this.parameters;return`/v2/objects/${e}/channels/${I(t)}`}}class gs extends se{constructor(e){var t,s,n,r,i,o,a,c,u,l,h,d,p,g,y,f;super(),this.parameters=e,null!==(t=e.include)&&void 0!==t||(e.include={}),null!==(s=(l=e.include).customFields)&&void 0!==s||(l.customFields=false),null!==(n=(h=e.include).totalCount)&&void 0!==n||(h.totalCount=false),null!==(r=(d=e.include).statusField)&&void 0!==r||(d.statusField=false),null!==(i=(p=e.include).channelFields)&&void 0!==i||(p.channelFields=false),null!==(o=(g=e.include).customChannelFields)&&void 0!==o||(g.customChannelFields=false),null!==(a=(y=e.include).channelStatusField)&&void 0!==a||(y.channelStatusField=false),null!==(c=(f=e.include).channelTypeField)&&void 0!==c||(f.channelTypeField=false),null!==(u=e.limit)&&void 0!==u||(e.limit=100),this.parameters.userId&&(this.parameters.uuid=this.parameters.userId)}operation(){return re.PNGetMembershipsOperation}validate(){if(!this.parameters.uuid)return\"'uuid' cannot be empty\"}parse(e){return i(this,void 0,void 0,(function*(){const t=this.deserializeResponse(e);if(!t)throw new d(\"Service response error, check status for details\",p(\"Unable to deserialize service response\"));if(t.status>=400)throw A.create(e);return t}))}get path(){const{keySet:{subscribeKey:e},uuid:t}=this.parameters;return`/v2/objects/${e}/uuids/${I(t)}/channels`}get queryParameters(){const{include:e,page:t,filter:s,sort:n,limit:r}=this.parameters;let i=\"\";i=\"string\"==typeof n?n:Object.entries(null!=n?n:{}).map((([e,t])=>null!==t?`${e}:${t}`:e));const o=[];return e.statusField&&o.push(\"status\"),e.customFields&&o.push(\"custom\"),e.channelFields&&o.push(\"channel\"),e.channelStatusField&&o.push(\"channel.status\"),e.channelTypeField&&o.push(\"channel.type\"),e.customChannelFields&&o.push(\"channel.custom\"),Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({count:`${e.totalCount}`},o.length>0?{include:o.join(\",\")}:{}),s?{filter:s}:{}),(null==t?void 0:t.next)?{start:t.next}:{}),(null==t?void 0:t.prev)?{end:t.prev}:{}),r?{limit:r}:{}),i.length?{sort:i}:{})}}class ys extends se{constructor(e){var t,s,n,r,i,o,a,c,u,l;super({method:H.PATCH}),this.parameters=e,null!==(t=e.include)&&void 0!==t||(e.include={}),null!==(s=(a=e.include).customFields)&&void 0!==s||(a.customFields=false),null!==(n=(c=e.include).totalCount)&&void 0!==n||(c.totalCount=false),null!==(r=(u=e.include).channelFields)&&void 0!==r||(u.channelFields=false),null!==(i=(l=e.include).customChannelFields)&&void 0!==i||(l.customChannelFields=false),null!==(o=e.limit)&&void 0!==o||(e.limit=100),this.parameters.userId&&(this.parameters.uuid=this.parameters.userId)}operation(){return re.PNSetMembershipsOperation}validate(){const{uuid:e,channels:t}=this.parameters;return e?t&&0!==t.length?void 0:\"Channels cannot be empty\":\"'uuid' cannot be empty\"}parse(e){return i(this,void 0,void 0,(function*(){const t=this.deserializeResponse(e);if(!t)throw new d(\"Service response error, check status for details\",p(\"Unable to deserialize service response\"));if(t.status>=400)throw A.create(e);return t}))}get path(){const{keySet:{subscribeKey:e},uuid:t}=this.parameters;return`/v2/objects/${e}/uuids/${I(t)}/channels`}get queryParameters(){const{include:e,page:t,filter:s,sort:n,limit:r}=this.parameters;let i=\"\";i=\"string\"==typeof n?n:Object.entries(null!=n?n:{}).map((([e,t])=>null!==t?`${e}:${t}`:e));const o=[\"channel.status\",\"channel.type\",\"status\"];return e.customFields&&o.push(\"custom\"),e.channelFields&&o.push(\"channel\"),e.customChannelFields&&o.push(\"channel.custom\"),Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({count:`${e.totalCount}`},o.length>0?{include:o.join(\",\")}:{}),s?{filter:s}:{}),(null==t?void 0:t.next)?{start:t.next}:{}),(null==t?void 0:t.prev)?{end:t.prev}:{}),r?{limit:r}:{}),i.length?{sort:i}:{})}get body(){const{channels:e,type:t}=this.parameters;return JSON.stringify({[`${t}`]:e.map((e=>\"string\"==typeof e?{channel:{id:e}}:{channel:{id:e.id},status:e.status,custom:e.custom}))})}}class fs extends se{constructor(e){var t,s,n,r;super(),this.parameters=e,null!==(t=e.include)&&void 0!==t||(e.include={}),null!==(s=(r=e.include).customFields)&&void 0!==s||(r.customFields=false),null!==(n=e.limit)&&void 0!==n||(e.limit=100)}operation(){return re.PNGetAllUUIDMetadataOperation}parse(e){return i(this,void 0,void 0,(function*(){const t=this.deserializeResponse(e);if(!t)throw new d(\"Service response error, check status for details\",p(\"Unable to deserialize service response\"));if(t.status>=400)throw A.create(e);return t}))}get path(){return`/v2/objects/${this.parameters.keySet.subscribeKey}/uuids`}get queryParameters(){const{include:e,page:t,filter:s,sort:n,limit:r}=this.parameters;let i=\"\";return i=\"string\"==typeof n?n:Object.entries(null!=n?n:{}).map((([e,t])=>null!==t?`${e}:${t}`:e)),Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({include:[\"status\",\"type\",...e.customFields?[\"custom\"]:[]].join(\",\")},void 0!==e.totalCount?{count:`${e.totalCount}`}:{}),s?{filter:s}:{}),(null==t?void 0:t.next)?{start:t.next}:{}),(null==t?void 0:t.prev)?{end:t.prev}:{}),r?{limit:r}:{}),i.length?{sort:i}:{})}}class ms extends se{constructor(e){var t,s,n;super(),this.parameters=e,null!==(t=e.include)&&void 0!==t||(e.include={}),null!==(s=(n=e.include).customFields)&&void 0!==s||(n.customFields=true)}operation(){return re.PNGetChannelMetadataOperation}validate(){if(!this.parameters.channel)return\"Channel cannot be empty\"}parse(e){return i(this,void 0,void 0,(function*(){const t=this.deserializeResponse(e);if(!t)throw new d(\"Service response error, check status for details\",p(\"Unable to deserialize service response\"));if(t.status>=400)throw A.create(e);return t}))}get path(){const{keySet:{subscribeKey:e},channel:t}=this.parameters;return`/v2/objects/${e}/channels/${I(t)}`}get queryParameters(){return{include:[\"status\",\"type\",...this.parameters.include.customFields?[\"custom\"]:[]].join(\",\")}}}class bs extends se{constructor(e){var t,s,n;super({method:H.PATCH}),this.parameters=e,null!==(t=e.include)&&void 0!==t||(e.include={}),null!==(s=(n=e.include).customFields)&&void 0!==s||(n.customFields=true)}operation(){return re.PNSetChannelMetadataOperation}validate(){return this.parameters.channel?this.parameters.data?void 0:\"Data cannot be empty\":\"Channel cannot be empty\"}parse(e){return i(this,void 0,void 0,(function*(){const t=this.deserializeResponse(e);if(!t)throw new d(\"Service response error, check status for details\",p(\"Unable to deserialize service response\"));if(t.status>=400)throw A.create(e);return t}))}get path(){const{keySet:{subscribeKey:e},channel:t}=this.parameters;return`/v2/objects/${e}/channels/${I(t)}`}get queryParameters(){return{include:[\"status\",\"type\",...this.parameters.include.customFields?[\"custom\"]:[]].join(\",\")}}get body(){return JSON.stringify(this.parameters.data)}}class vs extends se{constructor(e){super({method:H.DELETE}),this.parameters=e,this.parameters.userId&&(this.parameters.uuid=this.parameters.userId)}operation(){return re.PNRemoveUUIDMetadataOperation}validate(){if(!this.parameters.uuid)return\"'uuid' cannot be empty\"}parse(e){return i(this,void 0,void 0,(function*(){const t=this.deserializeResponse(e);if(!t)throw new d(\"Service response error, check status for details\",p(\"Unable to deserialize service response\"));if(t.status>=400)throw A.create(e);return t}))}get path(){const{keySet:{subscribeKey:e},uuid:t}=this.parameters;return`/v2/objects/${e}/uuids/${I(t)}`}}class ws extends se{constructor(e){var t,s,n,r,i,o,a,c,u,l,h,d,p,g,y,f;super(),this.parameters=e,null!==(t=e.include)&&void 0!==t||(e.include={}),null!==(s=(l=e.include).customFields)&&void 0!==s||(l.customFields=false),null!==(n=(h=e.include).totalCount)&&void 0!==n||(h.totalCount=false),null!==(r=(d=e.include).statusField)&&void 0!==r||(d.statusField=false),null!==(i=(p=e.include).UUIDFields)&&void 0!==i||(p.UUIDFields=false),null!==(o=(g=e.include).customUUIDFields)&&void 0!==o||(g.customUUIDFields=false),null!==(a=(y=e.include).UUIDStatusField)&&void 0!==a||(y.UUIDStatusField=false),null!==(c=(f=e.include).UUIDTypeField)&&void 0!==c||(f.UUIDTypeField=false),null!==(u=e.limit)&&void 0!==u||(e.limit=100)}operation(){return re.PNSetMembersOperation}validate(){if(!this.parameters.channel)return\"Channel cannot be empty\"}parse(e){return i(this,void 0,void 0,(function*(){const t=this.deserializeResponse(e);if(!t)throw new d(\"Service response error, check status for details\",p(\"Unable to deserialize service response\"));if(t.status>=400)throw A.create(e);return t}))}get path(){const{keySet:{subscribeKey:e},channel:t}=this.parameters;return`/v2/objects/${e}/channels/${I(t)}/uuids`}get queryParameters(){const{include:e,page:t,filter:s,sort:n,limit:r}=this.parameters;let i=\"\";i=\"string\"==typeof n?n:Object.entries(null!=n?n:{}).map((([e,t])=>null!==t?`${e}:${t}`:e));const o=[];return e.statusField&&o.push(\"status\"),e.customFields&&o.push(\"custom\"),e.UUIDFields&&o.push(\"uuid\"),e.UUIDStatusField&&o.push(\"uuid.status\"),e.UUIDTypeField&&o.push(\"uuid.type\"),e.customUUIDFields&&o.push(\"uuid.custom\"),Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({count:`${e.totalCount}`},o.length>0?{include:o.join(\",\")}:{}),s?{filter:s}:{}),(null==t?void 0:t.next)?{start:t.next}:{}),(null==t?void 0:t.prev)?{end:t.prev}:{}),r?{limit:r}:{}),i.length?{sort:i}:{})}}class Ss extends se{constructor(e){var t,s,n,r,i,o,a,c,u,l;super({method:H.PATCH}),this.parameters=e,null!==(t=e.include)&&void 0!==t||(e.include={}),null!==(s=(a=e.include).customFields)&&void 0!==s||(a.customFields=false),null!==(n=(c=e.include).totalCount)&&void 0!==n||(c.totalCount=false),null!==(r=(u=e.include).UUIDFields)&&void 0!==r||(u.UUIDFields=false),null!==(i=(l=e.include).customUUIDFields)&&void 0!==i||(l.customUUIDFields=false),null!==(o=e.limit)&&void 0!==o||(e.limit=100)}operation(){return re.PNSetMembersOperation}validate(){const{channel:e,uuids:t}=this.parameters;return e?t&&0!==t.length?void 0:\"UUIDs cannot be empty\":\"Channel cannot be empty\"}parse(e){return i(this,void 0,void 0,(function*(){const t=this.deserializeResponse(e);if(!t)throw new d(\"Service response error, check status for details\",p(\"Unable to deserialize service response\"));if(t.status>=400)throw A.create(e);return t}))}get path(){const{keySet:{subscribeKey:e},channel:t}=this.parameters;return`/v2/objects/${e}/channels/${I(t)}/uuids`}get queryParameters(){const{include:e,page:t,filter:s,sort:n,limit:r}=this.parameters;let i=\"\";i=\"string\"==typeof n?n:Object.entries(null!=n?n:{}).map((([e,t])=>null!==t?`${e}:${t}`:e));const o=[\"uuid.status\",\"uuid.type\",\"type\"];return e.customFields&&o.push(\"custom\"),e.UUIDFields&&o.push(\"uuid\"),e.customUUIDFields&&o.push(\"uuid.custom\"),Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({count:`${e.totalCount}`},o.length>0?{include:o.join(\",\")}:{}),s?{filter:s}:{}),(null==t?void 0:t.next)?{start:t.next}:{}),(null==t?void 0:t.prev)?{end:t.prev}:{}),r?{limit:r}:{}),i.length?{sort:i}:{})}get body(){const{uuids:e,type:t}=this.parameters;return JSON.stringify({[`${t}`]:e.map((e=>\"string\"==typeof e?{uuid:{id:e}}:{uuid:{id:e.id},status:e.status,custom:e.custom}))})}}class ks extends se{constructor(e){var t,s,n;super(),this.parameters=e,null!==(t=e.include)&&void 0!==t||(e.include={}),null!==(s=(n=e.include).customFields)&&void 0!==s||(n.customFields=true),this.parameters.userId&&(this.parameters.uuid=this.parameters.userId)}operation(){return re.PNGetUUIDMetadataOperation}validate(){if(!this.parameters.uuid)return\"'uuid' cannot be empty\"}parse(e){return i(this,void 0,void 0,(function*(){const t=this.deserializeResponse(e);if(!t)throw new d(\"Service response error, check status for details\",p(\"Unable to deserialize service response\"));if(t.status>=400)throw A.create(e);return t}))}get path(){const{keySet:{subscribeKey:e},uuid:t}=this.parameters;return`/v2/objects/${e}/uuids/${I(t)}`}get queryParameters(){const{include:e}=this.parameters;return{include:[\"status\",\"type\",...e.customFields?[\"custom\"]:[]].join(\",\")}}}class Es extends se{constructor(e){var t,s,n;super({method:H.PATCH}),this.parameters=e,null!==(t=e.include)&&void 0!==t||(e.include={}),null!==(s=(n=e.include).customFields)&&void 0!==s||(n.customFields=true),this.parameters.userId&&(this.parameters.uuid=this.parameters.userId)}operation(){return re.PNSetUUIDMetadataOperation}validate(){return this.parameters.uuid?this.parameters.data?void 0:\"Data cannot be empty\":\"'uuid' cannot be empty\"}parse(e){return i(this,void 0,void 0,(function*(){const t=this.deserializeResponse(e);if(!t)throw new d(\"Service response error, check status for details\",p(\"Unable to deserialize service response\"));if(t.status>=400)throw A.create(e);return t}))}get path(){const{keySet:{subscribeKey:e},uuid:t}=this.parameters;return`/v2/objects/${e}/uuids/${I(t)}`}get queryParameters(){return{include:[\"status\",\"type\",...this.parameters.include.customFields?[\"custom\"]:[]].join(\",\")}}get body(){return JSON.stringify(this.parameters.data)}}class Os{constructor(e,t){this.configuration=e,this.sendRequest=t,this.keySet=e.keySet}getAllUUIDMetadata(e,t){return i(this,void 0,void 0,(function*(){return this._getAllUUIDMetadata(e,t)}))}_getAllUUIDMetadata(e,t){return i(this,void 0,void 0,(function*(){const s=e&&\"function\"!=typeof e?e:{};null!=t||(t=\"function\"==typeof e?e:void 0);const n=new fs(Object.assign(Object.assign({},s),{keySet:this.keySet}));return t?this.sendRequest(n,t):this.sendRequest(n)}))}getUUIDMetadata(e,t){return i(this,void 0,void 0,(function*(){return this._getUUIDMetadata(e,t)}))}_getUUIDMetadata(e,t){return i(this,void 0,void 0,(function*(){var s;const n=e&&\"function\"!=typeof e?e:{};null!=t||(t=\"function\"==typeof e?e:void 0),n.userId&&(n.uuid=n.userId),null!==(s=n.uuid)&&void 0!==s||(n.uuid=this.configuration.userId);const r=new ks(Object.assign(Object.assign({},n),{keySet:this.keySet}));return t?this.sendRequest(r,t):this.sendRequest(r)}))}setUUIDMetadata(e,t){return i(this,void 0,void 0,(function*(){return this._setUUIDMetadata(e,t)}))}_setUUIDMetadata(e,t){return i(this,void 0,void 0,(function*(){var s;e.userId&&(e.uuid=e.userId),null!==(s=e.uuid)&&void 0!==s||(e.uuid=this.configuration.userId);const n=new Es(Object.assign(Object.assign({},e),{keySet:this.keySet}));return t?this.sendRequest(n,t):this.sendRequest(n)}))}removeUUIDMetadata(e,t){return i(this,void 0,void 0,(function*(){return this._removeUUIDMetadata(e,t)}))}_removeUUIDMetadata(e,t){return i(this,void 0,void 0,(function*(){var s;const n=e&&\"function\"!=typeof e?e:{};null!=t||(t=\"function\"==typeof e?e:void 0),n.userId&&(n.uuid=n.userId),null!==(s=n.uuid)&&void 0!==s||(n.uuid=this.configuration.userId);const r=new vs(Object.assign(Object.assign({},n),{keySet:this.keySet}));return t?this.sendRequest(r,t):this.sendRequest(r)}))}getAllChannelMetadata(e,t){return i(this,void 0,void 0,(function*(){return this._getAllChannelMetadata(e,t)}))}_getAllChannelMetadata(e,t){return i(this,void 0,void 0,(function*(){const s=e&&\"function\"!=typeof e?e:{};null!=t||(t=\"function\"==typeof e?e:void 0);const n=new ds(Object.assign(Object.assign({},s),{keySet:this.keySet}));return t?this.sendRequest(n,t):this.sendRequest(n)}))}getChannelMetadata(e,t){return i(this,void 0,void 0,(function*(){return this._getChannelMetadata(e,t)}))}_getChannelMetadata(e,t){return i(this,void 0,void 0,(function*(){const s=new ms(Object.assign(Object.assign({},e),{keySet:this.keySet}));return t?this.sendRequest(s,t):this.sendRequest(s)}))}setChannelMetadata(e,t){return i(this,void 0,void 0,(function*(){return this._setChannelMetadata(e,t)}))}_setChannelMetadata(e,t){return i(this,void 0,void 0,(function*(){const s=new bs(Object.assign(Object.assign({},e),{keySet:this.keySet}));return t?this.sendRequest(s,t):this.sendRequest(s)}))}removeChannelMetadata(e,t){return i(this,void 0,void 0,(function*(){return this._removeChannelMetadata(e,t)}))}_removeChannelMetadata(e,t){return i(this,void 0,void 0,(function*(){const s=new ps(Object.assign(Object.assign({},e),{keySet:this.keySet}));return t?this.sendRequest(s,t):this.sendRequest(s)}))}getChannelMembers(e,t){return i(this,void 0,void 0,(function*(){const s=new ws(Object.assign(Object.assign({},e),{keySet:this.keySet}));return t?this.sendRequest(s,t):this.sendRequest(s)}))}setChannelMembers(e,t){return i(this,void 0,void 0,(function*(){const s=new Ss(Object.assign(Object.assign({},e),{type:\"set\",keySet:this.keySet}));return t?this.sendRequest(s,t):this.sendRequest(s)}))}removeChannelMembers(e,t){return i(this,void 0,void 0,(function*(){const s=new Ss(Object.assign(Object.assign({},e),{type:\"delete\",keySet:this.keySet}));return t?this.sendRequest(s,t):this.sendRequest(s)}))}getMemberships(e,t){return i(this,void 0,void 0,(function*(){var s;const n=e&&\"function\"!=typeof e?e:{};null!=t||(t=\"function\"==typeof e?e:void 0),n.userId&&(n.uuid=n.userId),null!==(s=n.uuid)&&void 0!==s||(n.uuid=this.configuration.userId);const r=new gs(Object.assign(Object.assign({},n),{keySet:this.keySet}));return t?this.sendRequest(r,t):this.sendRequest(r)}))}setMemberships(e,t){return i(this,void 0,void 0,(function*(){var s;e.userId&&(e.uuid=e.userId),null!==(s=e.uuid)&&void 0!==s||(e.uuid=this.configuration.userId);const n=new ys(Object.assign(Object.assign({},e),{type:\"set\",keySet:this.keySet}));return t?this.sendRequest(n,t):this.sendRequest(n)}))}removeMemberships(e,t){return i(this,void 0,void 0,(function*(){var s;e.userId&&(e.uuid=e.userId),null!==(s=e.uuid)&&void 0!==s||(e.uuid=this.configuration.userId);const n=new ys(Object.assign(Object.assign({},e),{type:\"delete\",keySet:this.keySet}));return t?this.sendRequest(n,t):this.sendRequest(n)}))}fetchMemberships(e,t){return i(this,void 0,void 0,(function*(){var s,n;if(\"spaceId\"in e){const n=e,r={channel:null!==(s=n.spaceId)&&void 0!==s?s:n.channel,filter:n.filter,limit:n.limit,page:n.page,include:Object.assign({},n.include),sort:n.sort?Object.fromEntries(Object.entries(n.sort).map((([e,t])=>[e.replace(\"user\",\"uuid\"),t]))):void 0},i=e=>({status:e.status,data:e.data.map((e=>({user:e.uuid,custom:e.custom,updated:e.updated,eTag:e.eTag}))),totalCount:e.totalCount,next:e.next,prev:e.prev});return t?this.getChannelMembers(r,((e,s)=>{t(e,s?i(s):s)})):this.getChannelMembers(r).then(i)}const r=e,i={uuid:null!==(n=r.userId)&&void 0!==n?n:r.uuid,filter:r.filter,limit:r.limit,page:r.page,include:Object.assign({},r.include),sort:r.sort?Object.fromEntries(Object.entries(r.sort).map((([e,t])=>[e.replace(\"space\",\"channel\"),t]))):void 0},o=e=>({status:e.status,data:e.data.map((e=>({space:e.channel,custom:e.custom,updated:e.updated,eTag:e.eTag}))),totalCount:e.totalCount,next:e.next,prev:e.prev});return t?this.getMemberships(i,((e,s)=>{t(e,s?o(s):s)})):this.getMemberships(i).then(o)}))}addMemberships(e,t){return i(this,void 0,void 0,(function*(){var s,n,r,i,o,a;if(\"spaceId\"in e){const i=e,o={channel:null!==(s=i.spaceId)&&void 0!==s?s:i.channel,uuids:null!==(r=null===(n=i.users)||void 0===n?void 0:n.map((e=>\"string\"==typeof e?e:(e.userId,{id:e.userId,custom:e.custom}))))&&void 0!==r?r:i.uuids,limit:0};return t?this.setChannelMembers(o,t):this.setChannelMembers(o)}const c=e,u={uuid:null!==(i=c.userId)&&void 0!==i?i:c.uuid,channels:null!==(a=null===(o=c.spaces)||void 0===o?void 0:o.map((e=>\"string\"==typeof e?e:{id:e.spaceId,custom:e.custom})))&&void 0!==a?a:c.channels,limit:0};return t?this.setMemberships(u,t):this.setMemberships(u)}))}}class Cs extends se{constructor(){super()}operation(){return re.PNTimeOperation}parse(e){return i(this,void 0,void 0,(function*(){const t=this.deserializeResponse(e);if(!t)throw new d(\"Service response error, check status for details\",p(\"Unable to deserialize service response\"));return{timetoken:t[0]}}))}get path(){return\"/time/0\"}}class Ns extends se{constructor(e){super(),this.parameters=e}operation(){return re.PNDownloadFileOperation}validate(){const{channel:e,id:t,name:s}=this.parameters;return e?t?s?void 0:\"file name can't be empty\":\"file id can't be empty\":\"channel can't be empty\"}parse(e){return i(this,void 0,void 0,(function*(){const{cipherKey:t,crypto:s,cryptography:n,name:r,PubNubFile:i}=this.parameters,o=e.headers[\"content-type\"];let a,c=e.body;return i.supportsEncryptFile&&(t||s)&&(t&&n?c=yield n.decrypt(t,c):!t&&s&&(a=yield s.decryptFile(i.create({data:c,name:r,mimeType:o}),i))),a||i.create({data:c,name:r,mimeType:o})}))}get path(){const{keySet:{subscribeKey:e},channel:t,id:s,name:n}=this.parameters;return`/v1/files/${e}/channels/${I(t)}/files/${s}/${n}`}}class Ps{static notificationPayload(e,t){return new te(e,t)}static generateUUID(){return K.createUUID()}constructor(e){if(this._configuration=e.configuration,this.cryptography=e.cryptography,this.tokenManager=e.tokenManager,this.transport=e.transport,this.crypto=e.crypto,this._objects=new Os(this._configuration,this.sendRequest.bind(this)),this._channelGroups=new is(this._configuration.keySet,this.sendRequest.bind(this)),this._push=new hs(this._configuration.keySet,this.sendRequest.bind(this)),this.listenerManager=new W,this.eventEmitter=new ce(this.listenerManager),this._configuration.enableEventEngine){let e=this._configuration.getHeartbeatInterval();this.presenceState={},e&&(this.presenceEventEngine=new $e({heartbeat:this.heartbeat.bind(this),leave:e=>this.makeUnsubscribe(e,(()=>{})),heartbeatDelay:()=>new Promise(((t,s)=>{e=this._configuration.getHeartbeatInterval(),e?setTimeout(t,1e3*e):s(new d(\"Heartbeat interval has been reset.\"))})),retryDelay:e=>new Promise((t=>setTimeout(t,e))),emitStatus:e=>this.listenerManager.announceStatus(e),config:this._configuration,presenceState:this.presenceState})),this.eventEngine=new St({handshake:this.subscribeHandshake.bind(this),receiveMessages:this.subscribeReceiveMessages.bind(this),delay:e=>new Promise((t=>setTimeout(t,e))),join:this.join.bind(this),leave:this.leave.bind(this),leaveAll:this.leaveAll.bind(this),presenceState:this.presenceState,config:this._configuration,emitMessages:e=>{try{e.forEach((e=>this.eventEmitter.emitEvent(e)))}catch(e){const t={error:!0,category:h.PNUnknownCategory,errorData:e,statusCode:0};this.listenerManager.announceStatus(t)}},emitStatus:e=>this.listenerManager.announceStatus(e)})}else this.subscriptionManager=new Y(this._configuration,this.listenerManager,this.eventEmitter,this.makeSubscribe.bind(this),this.heartbeat.bind(this),this.makeUnsubscribe.bind(this),this.time.bind(this))}get configuration(){return this._configuration}get _config(){return this.configuration}get authKey(){var e;return null!==(e=this._configuration.authKey)&&void 0!==e?e:void 0}getAuthKey(){return this.authKey}setAuthKey(e){this._configuration.setAuthKey(e)}get userId(){return this._configuration.userId}set userId(e){if(!e||\"string\"!=typeof e||0===e.trim().length)throw new Error(\"Missing or invalid userId parameter. Provide a valid string userId\");this._configuration.userId=e}getUserId(){return this._configuration.userId}setUserId(e){if(!e||\"string\"!=typeof e||0===e.trim().length)throw new Error(\"Missing or invalid userId parameter. Provide a valid string userId\");this._configuration.userId=e}get filterExpression(){var e;return null!==(e=this._configuration.getFilterExpression())&&void 0!==e?e:void 0}getFilterExpression(){return this.filterExpression}set filterExpression(e){this._configuration.setFilterExpression(e)}setFilterExpression(e){this.filterExpression=e}get cipherKey(){return this._configuration.getCipherKey()}set cipherKey(e){this._configuration.setCipherKey(e)}setCipherKey(e){this.cipherKey=e}set heartbeatInterval(e){this._configuration.setHeartbeatInterval(e)}setHeartbeatInterval(e){this.heartbeatInterval=e}getVersion(){return this._configuration.getVersion()}_addPnsdkSuffix(e,t){this._configuration._addPnsdkSuffix(e,t)}getUUID(){return this.userId}setUUID(e){this.userId=e}get customEncrypt(){return this._configuration.getCustomEncrypt()}get customDecrypt(){return this._configuration.getCustomDecrypt()}channel(e){return new Zt(e,this.eventEmitter,this)}channelGroup(e){return new Yt(e,this.eventEmitter,this)}channelMetadata(e){return new Qt(e,this.eventEmitter,this)}userMetadata(e){return new Xt(e,this.eventEmitter,this)}subscriptionSet(e){return new Wt(Object.assign(Object.assign({},e),{eventEmitter:this.eventEmitter,pubnub:this}))}sendRequest(e,t){return i(this,void 0,void 0,(function*(){const s=e.validate();if(s){if(t)return t(p(s),null);throw new d(\"Validation failed, check status for details\",p(s))}const n=e.request();n.formData&&n.formData.length>0?n.timeout=300:e.operation()===re.PNSubscribeOperation?n.timeout=this._configuration.getSubscribeTimeout():n.timeout=this._configuration.getTransactionTimeout();const r={error:!1,operation:e.operation(),category:h.PNAcknowledgmentCategory,statusCode:0},[i,o]=this.transport.makeSendable(n);return e.cancellationController=o||null,i.then((t=>{if(r.statusCode=t.status,200!==t.status&&204!==t.status){const e=t.headers[\"content-type\"];if(e||-1!==e.indexOf(\"javascript\")||-1!==e.indexOf(\"json\")){const e=JSON.parse(Ps.decoder.decode(t.body));\"object\"==typeof e&&\"error\"in e&&e.error&&\"object\"==typeof e.error&&(r.errorData=e.error)}}return e.parse(t)})).then((e=>t?t(r,e):e)).catch((s=>{const n=s instanceof A?s:A.create(s);if(t)return t(n.toStatus(e.operation()),null);throw n.toPubNubError(e.operation(),\"REST API request processing error, check status for details\")}))}))}destroy(e){this.subscriptionManager?(this.subscriptionManager.unsubscribeAll(e),this.subscriptionManager.disconnect()):this.eventEngine&&this.eventEngine.dispose()}stop(){this.destroy()}addListener(e){this.listenerManager.addListener(e)}removeListener(e){this.listenerManager.removeListener(e)}removeAllListeners(){this.listenerManager.removeAllListeners()}publish(e,t){return i(this,void 0,void 0,(function*(){{const s=new kt(Object.assign(Object.assign({},e),{keySet:this._configuration.keySet,crypto:this._configuration.getCryptoModule()}));return t?this.sendRequest(s,t):this.sendRequest(s)}}))}signal(e,t){return i(this,void 0,void 0,(function*(){{const s=new Et(Object.assign(Object.assign({},e),{keySet:this._configuration.keySet}));return t?this.sendRequest(s,t):this.sendRequest(s)}}))}fire(e,t){return i(this,void 0,void 0,(function*(){return null!=t||(t=()=>{}),this.publish(Object.assign(Object.assign({},e),{replicate:!1,storeInHistory:!1}),t)}))}getSubscribedChannels(){return this.subscriptionManager?this.subscriptionManager.subscribedChannels:this.eventEngine?this.eventEngine.getSubscribedChannels():[]}getSubscribedChannelGroups(){return this.subscriptionManager?this.subscriptionManager.subscribedChannelGroups:this.eventEngine?this.eventEngine.getSubscribedChannelGroups():[]}subscribe(e){this.subscriptionManager?this.subscriptionManager.subscribe(e):this.eventEngine&&this.eventEngine.subscribe(e)}makeSubscribe(e,t){{const s=new ae(Object.assign(Object.assign({},e),{keySet:this._configuration.keySet,crypto:this._configuration.getCryptoModule(),getFileUrl:this.getFileUrl.bind(this)}));if(this.sendRequest(s,((e,n)=>{var r;this.subscriptionManager&&(null===(r=this.subscriptionManager.abort)||void 0===r?void 0:r.identifier)===s.requestIdentifier&&(this.subscriptionManager.abort=null),t(e,n)})),this.subscriptionManager){const e=()=>s.abort();e.identifier=s.requestIdentifier,this.subscriptionManager.abort=e}}}unsubscribe(e){this.subscriptionManager?this.subscriptionManager.unsubscribe(e):this.eventEngine&&this.eventEngine.unsubscribe(e)}makeUnsubscribe(e,t){this.sendRequest(new _t(Object.assign(Object.assign({},e),{keySet:this._configuration.keySet})),t)}unsubscribeAll(){this.subscriptionManager?this.subscriptionManager.unsubscribeAll():this.eventEngine&&this.eventEngine.unsubscribeAll()}disconnect(){this.subscriptionManager?this.subscriptionManager.disconnect():this.eventEngine&&this.eventEngine.disconnect()}reconnect(e){this.subscriptionManager?this.subscriptionManager.reconnect():this.eventEngine&&this.eventEngine.reconnect(null!=e?e:{})}subscribeHandshake(e){return i(this,void 0,void 0,(function*(){{const t=new Ct(Object.assign(Object.assign({},e),{keySet:this._configuration.keySet,crypto:this._configuration.getCryptoModule(),getFileUrl:this.getFileUrl.bind(this)})),s=e.abortSignal.subscribe((e=>{t.abort()}));return this.sendRequest(t).then((e=>(s(),e.cursor)))}}))}subscribeReceiveMessages(e){return i(this,void 0,void 0,(function*(){{const t=new Ot(Object.assign(Object.assign({},e),{keySet:this._configuration.keySet,crypto:this._configuration.getCryptoModule(),getFileUrl:this.getFileUrl.bind(this)})),s=e.abortSignal.subscribe((e=>{t.abort()}));return this.sendRequest(t).then((e=>(s(),e)))}}))}getMessageActions(e,t){return i(this,void 0,void 0,(function*(){{const s=new xt(Object.assign(Object.assign({},e),{keySet:this._configuration.keySet}));return t?this.sendRequest(s,t):this.sendRequest(s)}}))}addMessageAction(e,t){return i(this,void 0,void 0,(function*(){{const s=new Dt(Object.assign(Object.assign({},e),{keySet:this._configuration.keySet}));return t?this.sendRequest(s,t):this.sendRequest(s)}}))}removeMessageAction(e,t){return i(this,void 0,void 0,(function*(){{const s=new qt(Object.assign(Object.assign({},e),{keySet:this._configuration.keySet}));return t?this.sendRequest(s,t):this.sendRequest(s)}}))}fetchMessages(e,t){return i(this,void 0,void 0,(function*(){{const s=new Ft(Object.assign(Object.assign({},e),{keySet:this._configuration.keySet,crypto:this._configuration.getCryptoModule(),getFileUrl:this.getFileUrl.bind(this)}));return t?this.sendRequest(s,t):this.sendRequest(s)}}))}deleteMessages(e,t){return i(this,void 0,void 0,(function*(){{const s=new It(Object.assign(Object.assign({},e),{keySet:this._configuration.keySet}));return t?this.sendRequest(s,t):this.sendRequest(s)}}))}messageCounts(e,t){return i(this,void 0,void 0,(function*(){{const s=new Rt(Object.assign(Object.assign({},e),{keySet:this._configuration.keySet}));return t?this.sendRequest(s,t):this.sendRequest(s)}}))}history(e,t){return i(this,void 0,void 0,(function*(){{const s=new Ut(Object.assign(Object.assign({},e),{keySet:this._configuration.keySet,crypto:this._configuration.getCryptoModule()}));return t?this.sendRequest(s,t):this.sendRequest(s)}}))}hereNow(e,t){return i(this,void 0,void 0,(function*(){{const s=new jt(Object.assign(Object.assign({},e),{keySet:this._configuration.keySet}));return t?this.sendRequest(s,t):this.sendRequest(s)}}))}whereNow(e,t){return i(this,void 0,void 0,(function*(){var s;{const n=new At({uuid:null!==(s=e.uuid)&&void 0!==s?s:this._configuration.userId,keySet:this._configuration.keySet});return t?this.sendRequest(n,t):this.sendRequest(n)}}))}getState(e,t){return i(this,void 0,void 0,(function*(){var s;{const n=new Nt(Object.assign(Object.assign({},e),{uuid:null!==(s=e.uuid)&&void 0!==s?s:this._configuration.userId,keySet:this._configuration.keySet}));return t?this.sendRequest(n,t):this.sendRequest(n)}}))}setState(e,t){return i(this,void 0,void 0,(function*(){var s,n;{const{keySet:r,userId:i}=this._configuration,o=this._configuration.getPresenceTimeout();let a;if(this._configuration.enableEventEngine&&this.presenceState){const t=this.presenceState;null===(s=e.channels)||void 0===s||s.forEach((s=>t[s]=e.state)),\"channelGroups\"in e&&(null===(n=e.channelGroups)||void 0===n||n.forEach((s=>t[s]=e.state)))}return a=\"withHeartbeat\"in e?new Mt(Object.assign(Object.assign({},e),{keySet:r,heartbeat:o})):new Pt(Object.assign(Object.assign({},e),{keySet:r,uuid:i})),this.subscriptionManager&&this.subscriptionManager.setState(e),t?this.sendRequest(a,t):this.sendRequest(a)}}))}presence(e){var t;null===(t=this.subscriptionManager)||void 0===t||t.changePresence(e)}heartbeat(e,t){return i(this,void 0,void 0,(function*(){{const s=new Mt(Object.assign(Object.assign({},e),{keySet:this._configuration.keySet}));return t?this.sendRequest(s,t):this.sendRequest(s)}}))}join(e){var t;null===(t=this.presenceEventEngine)||void 0===t||t.join(e)}leave(e){var t;null===(t=this.presenceEventEngine)||void 0===t||t.leave(e)}leaveAll(){var e;null===(e=this.presenceEventEngine)||void 0===e||e.leaveAll()}grantToken(e,t){return i(this,void 0,void 0,(function*(){throw new Error(\"Grant Token error: PAM module disabled\")}))}revokeToken(e,t){return i(this,void 0,void 0,(function*(){throw new Error(\"Revoke Token error: PAM module disabled\")}))}get token(){return this.tokenManager&&this.tokenManager.getToken()}getToken(){return this.token}set token(e){this.tokenManager&&this.tokenManager.setToken(e)}setToken(e){this.token=e}parseToken(e){return this.tokenManager&&this.tokenManager.parseToken(e)}grant(e,t){return i(this,void 0,void 0,(function*(){throw new Error(\"Grant error: PAM module disabled\")}))}audit(e,t){return i(this,void 0,void 0,(function*(){throw new Error(\"Grant Permissions error: PAM module disabled\")}))}get objects(){return this._objects}fetchUsers(e,t){return i(this,void 0,void 0,(function*(){return this.objects._getAllUUIDMetadata(e,t)}))}fetchUser(e,t){return i(this,void 0,void 0,(function*(){return this.objects._getUUIDMetadata(e,t)}))}createUser(e,t){return i(this,void 0,void 0,(function*(){return this.objects._setUUIDMetadata(e,t)}))}updateUser(e,t){return i(this,void 0,void 0,(function*(){return this.objects._setUUIDMetadata(e,t)}))}removeUser(e,t){return i(this,void 0,void 0,(function*(){return this.objects._removeUUIDMetadata(e,t)}))}fetchSpaces(e,t){return i(this,void 0,void 0,(function*(){return this.objects._getAllChannelMetadata(e,t)}))}fetchSpace(e,t){return i(this,void 0,void 0,(function*(){return this.objects._getChannelMetadata(e,t)}))}createSpace(e,t){return i(this,void 0,void 0,(function*(){return this.objects._setChannelMetadata(e,t)}))}updateSpace(e,t){return i(this,void 0,void 0,(function*(){return this.objects._setChannelMetadata(e,t)}))}removeSpace(e,t){return i(this,void 0,void 0,(function*(){return this.objects._removeChannelMetadata(e,t)}))}fetchMemberships(e,t){return i(this,void 0,void 0,(function*(){return this.objects.fetchMemberships(e,t)}))}addMemberships(e,t){return i(this,void 0,void 0,(function*(){return this.objects.addMemberships(e,t)}))}updateMemberships(e,t){return i(this,void 0,void 0,(function*(){return this.objects.addMemberships(e,t)}))}removeMemberships(e,t){return i(this,void 0,void 0,(function*(){var s,n,r;{if(\"spaceId\"in e){const r=e,i={channel:null!==(s=r.spaceId)&&void 0!==s?s:r.channel,uuids:null!==(n=r.userIds)&&void 0!==n?n:r.uuids,limit:0};return t?this.objects.removeChannelMembers(i,t):this.objects.removeChannelMembers(i)}const i=e,o={uuid:i.userId,channels:null!==(r=i.spaceIds)&&void 0!==r?r:i.channels,limit:0};return t?this.objects.removeMemberships(o,t):this.objects.removeMemberships(o)}}))}get channelGroups(){return this._channelGroups}get push(){return this._push}sendFile(e,t){return i(this,void 0,void 0,(function*(){{if(!this._configuration.PubNubFile)throw new Error(\"Validation failed: 'PubNubFile' not configured or file upload not supported by the platform.\");const s=new zt(Object.assign(Object.assign({},e),{keySet:this._configuration.keySet,PubNubFile:this._configuration.PubNubFile,fileUploadPublishRetryLimit:this._configuration.fileUploadPublishRetryLimit,file:e.file,sendRequest:this.sendRequest.bind(this),publishFile:this.publishFile.bind(this),crypto:this._configuration.getCryptoModule(),cryptography:this.cryptography?this.cryptography:void 0})),n={error:!1,operation:re.PNPublishFileOperation,category:h.PNAcknowledgmentCategory,statusCode:0};return s.process().then((e=>(n.statusCode=e.status,t?t(n,e):e))).catch((e=>{let s;throw e instanceof d?s=e.status:e instanceof A&&(s=e.toStatus(n.operation)),t&&s&&t(s,null),new d(\"REST API request processing error, check status for details\",s)}))}}))}publishFile(e,t){return i(this,void 0,void 0,(function*(){{if(!this._configuration.PubNubFile)throw new Error(\"Validation failed: 'PubNubFile' not configured or file upload not supported by the platform.\");const s=new Gt(Object.assign(Object.assign({},e),{keySet:this._configuration.keySet,crypto:this._configuration.getCryptoModule()}));return t?this.sendRequest(s,t):this.sendRequest(s)}}))}listFiles(e,t){return i(this,void 0,void 0,(function*(){{const s=new Lt(Object.assign(Object.assign({},e),{keySet:this._configuration.keySet}));return t?this.sendRequest(s,t):this.sendRequest(s)}}))}getFileUrl(e){var t;{const s=this.transport.request(new Kt(Object.assign(Object.assign({},e),{keySet:this._configuration.keySet})).request()),n=null!==(t=s.queryParameters)&&void 0!==t?t:{},r=Object.keys(n).map((e=>{const t=n[e];return Array.isArray(t)?t.map((t=>`${e}=${I(t)}`)).join(\"&\"):`${e}=${I(t)}`})).join(\"&\");return`${s.origin}${s.path}?${r}`}}downloadFile(e,t){return i(this,void 0,void 0,(function*(){{if(!this._configuration.PubNubFile)throw new Error(\"Validation failed: 'PubNubFile' not configured or file upload not supported by the platform.\");const s=new Ns(Object.assign(Object.assign({},e),{keySet:this._configuration.keySet,PubNubFile:this._configuration.PubNubFile,cryptography:this.cryptography?this.cryptography:void 0,crypto:this._configuration.getCryptoModule()}));return t?this.sendRequest(s,t):yield this.sendRequest(s)}}))}deleteFile(e,t){return i(this,void 0,void 0,(function*(){{const s=new $t(Object.assign(Object.assign({},e),{keySet:this._configuration.keySet}));return t?this.sendRequest(s,t):this.sendRequest(s)}}))}time(e){return i(this,void 0,void 0,(function*(){const t=new Cs;return e?this.sendRequest(t,e):this.sendRequest(t)}))}encrypt(e,t){const s=this._configuration.getCryptoModule();if(!t&&s&&\"string\"==typeof e){const t=s.encrypt(e);return\"string\"==typeof t?t:u(t)}if(!this.crypto)throw new Error(\"Encryption error: cypher key not set\");return this.crypto.encrypt(e,t)}decrypt(e,t){const s=this._configuration.getCryptoModule();if(!t&&s){const t=s.decrypt(e);return t instanceof ArrayBuffer?JSON.parse((new TextDecoder).decode(t)):t}if(!this.crypto)throw new Error(\"Decryption error: cypher key not set\");return this.crypto.decrypt(e,t)}encryptFile(e,t){return i(this,void 0,void 0,(function*(){var s;if(\"string\"!=typeof e&&(t=e),!t)throw new Error(\"File encryption error. Source file is missing.\");if(!this._configuration.PubNubFile)throw new Error(\"File encryption error. File constructor not configured.\");if(\"string\"!=typeof e&&!this._configuration.getCryptoModule())throw new Error(\"File encryption error. Crypto module not configured.\");if(\"string\"==typeof e){if(!this.cryptography)throw new Error(\"File encryption error. File encryption not available\");return this.cryptography.encryptFile(e,t,this._configuration.PubNubFile)}return null===(s=this._configuration.getCryptoModule())||void 0===s?void 0:s.encryptFile(t,this._configuration.PubNubFile)}))}decryptFile(e,t){return i(this,void 0,void 0,(function*(){var s;if(\"string\"!=typeof e&&(t=e),!t)throw new Error(\"File encryption error. Source file is missing.\");if(!this._configuration.PubNubFile)throw new Error(\"File decryption error. File constructor not configured.\");if(\"string\"==typeof e&&!this._configuration.getCryptoModule())throw new Error(\"File decryption error. Crypto module not configured.\");if(\"string\"==typeof e){if(!this.cryptography)throw new Error(\"File decryption error. File decryption not available\");return this.cryptography.decryptFile(e,t,this._configuration.PubNubFile)}return null===(s=this._configuration.getCryptoModule())||void 0===s?void 0:s.decryptFile(t,this._configuration.PubNubFile)}))}}Ps.decoder=new TextDecoder,Ps.OPERATIONS=re,Ps.CATEGORIES=h,Ps.ExponentialRetryPolicy=Le.ExponentialRetryPolicy,Ps.LinearRetryPolicy=Le.LinearRetryPolicy;class Ms{constructor(e,t){this.decode=e,this.base64ToBinary=t}decodeToken(e){let t=\"\";e.length%4==3?t=\"=\":e.length%4==2&&(t=\"==\");const s=e.replace(/-/gi,\"+\").replace(/_/gi,\"/\")+t,n=this.decode(this.base64ToBinary(s));return\"object\"==typeof n?n:void 0}}class _s extends Ps{constructor(e){var t;const s=D(e),r=Object.assign(Object.assign({},s),{sdkFamily:\"Web\"});r.PubNubFile=a;const i=$(r,(e=>{if(e.cipherKey)return new P({default:new N(Object.assign({},e)),cryptors:[new S({cipherKey:e.cipherKey})]})}));let o,u,l;o=new B(new Ms((e=>x(n.decode(e))),c)),(i.getCipherKey()||i.secretKey)&&(u=new E({secretKey:i.secretKey,cipherKey:i.getCipherKey(),useRandomIVs:i.getUseRandomIVs(),customEncrypt:i.getCustomEncrypt(),customDecrypt:i.getCustomDecrypt()})),l=new C;let h=new F(i.keepAlive,i.logVerbosity);s.subscriptionWorkerUrl&&(h=new j({clientIdentifier:i._instanceId,subscriptionKey:i.subscribeKey,userId:i.getUserId(),workerUrl:s.subscriptionWorkerUrl,sdkVersion:i.getVersion(),logVerbosity:i.logVerbosity,workerLogVerbosity:r.subscriptionWorkerLogVerbosity,transport:h}));super({configuration:i,transport:new V({clientConfiguration:i,tokenManager:o,transport:h}),cryptography:l,tokenManager:o,crypto:u}),(null===(t=e.listenToBrowserNetworkEvents)||void 0===t||t)&&(window.addEventListener(\"offline\",(()=>{this.networkDownDetected()})),window.addEventListener(\"online\",(()=>{this.networkUpDetected()})))}networkDownDetected(){this.listenerManager.announceNetworkDown(),this._configuration.restore?this.disconnect():this.destroy(!0)}networkUpDetected(){this.listenerManager.announceNetworkUp(),this.reconnect()}}return _s.CryptoModule=P,_s}));\n","var mode = require('./mode');\n\nfunction QR8bitByte(data) {\n\tthis.mode = mode.MODE_8BIT_BYTE;\n\tthis.data = data;\n}\n\nQR8bitByte.prototype = {\n\n\tgetLength : function(buffer) {\n\t\treturn this.data.length;\n\t},\n\t\n\twrite : function(buffer) {\n\t\tfor (var i = 0; i < this.data.length; i++) {\n\t\t\t// not JIS ...\n\t\t\tbuffer.put(this.data.charCodeAt(i), 8);\n\t\t}\n\t}\n};\n\nmodule.exports = QR8bitByte;\n\n","function QRBitBuffer() {\n\tthis.buffer = new Array();\n\tthis.length = 0;\n}\n\nQRBitBuffer.prototype = {\n\n\tget : function(index) {\n\t\tvar bufIndex = Math.floor(index / 8);\n\t\treturn ( (this.buffer[bufIndex] >>> (7 - index % 8) ) & 1) == 1;\n\t},\n\t\n\tput : function(num, length) {\n\t\tfor (var i = 0; i < length; i++) {\n\t\t\tthis.putBit( ( (num >>> (length - i - 1) ) & 1) == 1);\n\t\t}\n\t},\n\t\n\tgetLengthInBits : function() {\n\t\treturn this.length;\n\t},\n\t\n\tputBit : function(bit) {\n\t\n\t\tvar bufIndex = Math.floor(this.length / 8);\n\t\tif (this.buffer.length <= bufIndex) {\n\t\t\tthis.buffer.push(0);\n\t\t}\n\t\n\t\tif (bit) {\n\t\t\tthis.buffer[bufIndex] |= (0x80 >>> (this.length % 8) );\n\t\t}\n\t\n\t\tthis.length++;\n\t}\n};\n\nmodule.exports = QRBitBuffer;\n","module.exports = {\n\tL : 1,\n\tM : 0,\n\tQ : 3,\n\tH : 2\n};\n\n","var math = require('./math');\n\nfunction QRPolynomial(num, shift) {\n\n\tif (num.length == undefined) {\n\t\tthrow new Error(num.length + \"/\" + shift);\n\t}\n\n\tvar offset = 0;\n\n\twhile (offset < num.length && num[offset] == 0) {\n\t\toffset++;\n\t}\n\n\tthis.num = new Array(num.length - offset + shift);\n\tfor (var i = 0; i < num.length - offset; i++) {\n\t\tthis.num[i] = num[i + offset];\n\t}\n}\n\nQRPolynomial.prototype = {\n\n\tget : function(index) {\n\t\treturn this.num[index];\n\t},\n\t\n\tgetLength : function() {\n\t\treturn this.num.length;\n\t},\n\t\n\tmultiply : function(e) {\n\t\n\t\tvar num = new Array(this.getLength() + e.getLength() - 1);\n\t\n\t\tfor (var i = 0; i < this.getLength(); i++) {\n\t\t\tfor (var j = 0; j < e.getLength(); j++) {\n\t\t\t\tnum[i + j] ^= math.gexp(math.glog(this.get(i) ) + math.glog(e.get(j) ) );\n\t\t\t}\n\t\t}\n\t\n\t\treturn new QRPolynomial(num, 0);\n\t},\n\t\n\tmod : function(e) {\n\t\n\t\tif (this.getLength() - e.getLength() < 0) {\n\t\t\treturn this;\n\t\t}\n\t\n\t\tvar ratio = math.glog(this.get(0) ) - math.glog(e.get(0) );\n\t\n\t\tvar num = new Array(this.getLength() );\n\t\t\n\t\tfor (var i = 0; i < this.getLength(); i++) {\n\t\t\tnum[i] = this.get(i);\n\t\t}\n\t\t\n\t\tfor (var i = 0; i < e.getLength(); i++) {\n\t\t\tnum[i] ^= math.gexp(math.glog(e.get(i) ) + ratio);\n\t\t}\n\t\n\t\t// recursive call\n\t\treturn new QRPolynomial(num, 0).mod(e);\n\t}\n};\n\nmodule.exports = QRPolynomial;\n","var BitByte = require('./8BitByte');\nvar RSBlock = require('./RSBlock');\nvar BitBuffer = require('./BitBuffer');\nvar util = require('./util');\nvar Polynomial = require('./Polynomial');\n\nfunction QRCode(typeNumber, errorCorrectLevel) {\n\tthis.typeNumber = typeNumber;\n\tthis.errorCorrectLevel = errorCorrectLevel;\n\tthis.modules = null;\n\tthis.moduleCount = 0;\n\tthis.dataCache = null;\n\tthis.dataList = [];\n}\n\n// for client side minification\nvar proto = QRCode.prototype;\n\nproto.addData = function(data) {\n\tvar newData = new BitByte(data);\n\tthis.dataList.push(newData);\n\tthis.dataCache = null;\n};\n\nproto.isDark = function(row, col) {\n\tif (row < 0 || this.moduleCount <= row || col < 0 || this.moduleCount <= col) {\n\t\tthrow new Error(row + \",\" + col);\n\t}\n\treturn this.modules[row][col];\n};\n\nproto.getModuleCount = function() {\n\treturn this.moduleCount;\n};\n\nproto.make = function() {\n\t// Calculate automatically typeNumber if provided is < 1\n\tif (this.typeNumber < 1 ){\n\t\tvar typeNumber = 1;\n\t\tfor (typeNumber = 1; typeNumber < 40; typeNumber++) {\n\t\t\tvar rsBlocks = RSBlock.getRSBlocks(typeNumber, this.errorCorrectLevel);\n\n\t\t\tvar buffer = new BitBuffer();\n\t\t\tvar totalDataCount = 0;\n\t\t\tfor (var i = 0; i < rsBlocks.length; i++) {\n\t\t\t\ttotalDataCount += rsBlocks[i].dataCount;\n\t\t\t}\n\n\t\t\tfor (var i = 0; i < this.dataList.length; i++) {\n\t\t\t\tvar data = this.dataList[i];\n\t\t\t\tbuffer.put(data.mode, 4);\n\t\t\t\tbuffer.put(data.getLength(), util.getLengthInBits(data.mode, typeNumber) );\n\t\t\t\tdata.write(buffer);\n\t\t\t}\n\t\t\tif (buffer.getLengthInBits() <= totalDataCount * 8)\n\t\t\t\tbreak;\n\t\t}\n\t\tthis.typeNumber = typeNumber;\n\t}\n\tthis.makeImpl(false, this.getBestMaskPattern() );\n};\n\nproto.makeImpl = function(test, maskPattern) {\n\t\n\tthis.moduleCount = this.typeNumber * 4 + 17;\n\tthis.modules = new Array(this.moduleCount);\n\t\n\tfor (var row = 0; row < this.moduleCount; row++) {\n\t\t\n\t\tthis.modules[row] = new Array(this.moduleCount);\n\t\t\n\t\tfor (var col = 0; col < this.moduleCount; col++) {\n\t\t\tthis.modules[row][col] = null;//(col + row) % 3;\n\t\t}\n\t}\n\n\tthis.setupPositionProbePattern(0, 0);\n\tthis.setupPositionProbePattern(this.moduleCount - 7, 0);\n\tthis.setupPositionProbePattern(0, this.moduleCount - 7);\n\tthis.setupPositionAdjustPattern();\n\tthis.setupTimingPattern();\n\tthis.setupTypeInfo(test, maskPattern);\n\t\n\tif (this.typeNumber >= 7) {\n\t\tthis.setupTypeNumber(test);\n\t}\n\n\tif (this.dataCache == null) {\n\t\tthis.dataCache = QRCode.createData(this.typeNumber, this.errorCorrectLevel, this.dataList);\n\t}\n\n\tthis.mapData(this.dataCache, maskPattern);\n};\n\nproto.setupPositionProbePattern = function(row, col)  {\n\t\n\tfor (var r = -1; r <= 7; r++) {\n\t\t\n\t\tif (row + r <= -1 || this.moduleCount <= row + r) continue;\n\t\t\n\t\tfor (var c = -1; c <= 7; c++) {\n\t\t\t\n\t\t\tif (col + c <= -1 || this.moduleCount <= col + c) continue;\n\t\t\t\n\t\t\tif ( (0 <= r && r <= 6 && (c == 0 || c == 6) )\n\t\t\t\t\t|| (0 <= c && c <= 6 && (r == 0 || r == 6) )\n\t\t\t\t\t|| (2 <= r && r <= 4 && 2 <= c && c <= 4) ) {\n\t\t\t\tthis.modules[row + r][col + c] = true;\n\t\t\t} else {\n\t\t\t\tthis.modules[row + r][col + c] = false;\n\t\t\t}\n\t\t}\t\t\n\t}\t\t\n};\n\nproto.getBestMaskPattern = function() {\n\n\tvar minLostPoint = 0;\n\tvar pattern = 0;\n\n\tfor (var i = 0; i < 8; i++) {\n\t\t\n\t\tthis.makeImpl(true, i);\n\n\t\tvar lostPoint = util.getLostPoint(this);\n\n\t\tif (i == 0 || minLostPoint >  lostPoint) {\n\t\t\tminLostPoint = lostPoint;\n\t\t\tpattern = i;\n\t\t}\n\t}\n\n\treturn pattern;\n};\n\nproto.createMovieClip = function(target_mc, instance_name, depth) {\n\n\tvar qr_mc = target_mc.createEmptyMovieClip(instance_name, depth);\n\tvar cs = 1;\n\n\tthis.make();\n\n\tfor (var row = 0; row < this.modules.length; row++) {\n\t\t\n\t\tvar y = row * cs;\n\t\t\n\t\tfor (var col = 0; col < this.modules[row].length; col++) {\n\n\t\t\tvar x = col * cs;\n\t\t\tvar dark = this.modules[row][col];\n\t\t\n\t\t\tif (dark) {\n\t\t\t\tqr_mc.beginFill(0, 100);\n\t\t\t\tqr_mc.moveTo(x, y);\n\t\t\t\tqr_mc.lineTo(x + cs, y);\n\t\t\t\tqr_mc.lineTo(x + cs, y + cs);\n\t\t\t\tqr_mc.lineTo(x, y + cs);\n\t\t\t\tqr_mc.endFill();\n\t\t\t}\n\t\t}\n\t}\n\t\n\treturn qr_mc;\n};\n\nproto.setupTimingPattern = function() {\n\t\n\tfor (var r = 8; r < this.moduleCount - 8; r++) {\n\t\tif (this.modules[r][6] != null) {\n\t\t\tcontinue;\n\t\t}\n\t\tthis.modules[r][6] = (r % 2 == 0);\n\t}\n\n\tfor (var c = 8; c < this.moduleCount - 8; c++) {\n\t\tif (this.modules[6][c] != null) {\n\t\t\tcontinue;\n\t\t}\n\t\tthis.modules[6][c] = (c % 2 == 0);\n\t}\n};\n\nproto.setupPositionAdjustPattern = function() {\n\n\tvar pos = util.getPatternPosition(this.typeNumber);\n\t\n\tfor (var i = 0; i < pos.length; i++) {\n\t\n\t\tfor (var j = 0; j < pos.length; j++) {\n\t\t\n\t\t\tvar row = pos[i];\n\t\t\tvar col = pos[j];\n\t\t\t\n\t\t\tif (this.modules[row][col] != null) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\t\n\t\t\tfor (var r = -2; r <= 2; r++) {\n\t\t\t\n\t\t\t\tfor (var c = -2; c <= 2; c++) {\n\t\t\t\t\n\t\t\t\t\tif (r == -2 || r == 2 || c == -2 || c == 2\n\t\t\t\t\t\t\t|| (r == 0 && c == 0) ) {\n\t\t\t\t\t\tthis.modules[row + r][col + c] = true;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.modules[row + r][col + c] = false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n};\n\nproto.setupTypeNumber = function(test) {\n\n\tvar bits = util.getBCHTypeNumber(this.typeNumber);\n\n\tfor (var i = 0; i < 18; i++) {\n\t\tvar mod = (!test && ( (bits >> i) & 1) == 1);\n\t\tthis.modules[Math.floor(i / 3)][i % 3 + this.moduleCount - 8 - 3] = mod;\n\t}\n\n\tfor (var i = 0; i < 18; i++) {\n\t\tvar mod = (!test && ( (bits >> i) & 1) == 1);\n\t\tthis.modules[i % 3 + this.moduleCount - 8 - 3][Math.floor(i / 3)] = mod;\n\t}\n};\n\nproto.setupTypeInfo = function(test, maskPattern) {\n\n\tvar data = (this.errorCorrectLevel << 3) | maskPattern;\n\tvar bits = util.getBCHTypeInfo(data);\n\n\t// vertical\t\t\n\tfor (var i = 0; i < 15; i++) {\n\n\t\tvar mod = (!test && ( (bits >> i) & 1) == 1);\n\n\t\tif (i < 6) {\n\t\t\tthis.modules[i][8] = mod;\n\t\t} else if (i < 8) {\n\t\t\tthis.modules[i + 1][8] = mod;\n\t\t} else {\n\t\t\tthis.modules[this.moduleCount - 15 + i][8] = mod;\n\t\t}\n\t}\n\n\t// horizontal\n\tfor (var i = 0; i < 15; i++) {\n\n\t\tvar mod = (!test && ( (bits >> i) & 1) == 1);\n\t\t\n\t\tif (i < 8) {\n\t\t\tthis.modules[8][this.moduleCount - i - 1] = mod;\n\t\t} else if (i < 9) {\n\t\t\tthis.modules[8][15 - i - 1 + 1] = mod;\n\t\t} else {\n\t\t\tthis.modules[8][15 - i - 1] = mod;\n\t\t}\n\t}\n\n\t// fixed module\n\tthis.modules[this.moduleCount - 8][8] = (!test);\n};\n\nproto.mapData = function(data, maskPattern) {\n\t\n\tvar inc = -1;\n\tvar row = this.moduleCount - 1;\n\tvar bitIndex = 7;\n\tvar byteIndex = 0;\n\t\n\tfor (var col = this.moduleCount - 1; col > 0; col -= 2) {\n\n\t\tif (col == 6) col--;\n\n\t\twhile (true) {\n\n\t\t\tfor (var c = 0; c < 2; c++) {\n\t\t\t\t\n\t\t\t\tif (this.modules[row][col - c] == null) {\n\t\t\t\t\t\n\t\t\t\t\tvar dark = false;\n\n\t\t\t\t\tif (byteIndex < data.length) {\n\t\t\t\t\t\tdark = ( ( (data[byteIndex] >>> bitIndex) & 1) == 1);\n\t\t\t\t\t}\n\n\t\t\t\t\tvar mask = util.getMask(maskPattern, row, col - c);\n\n\t\t\t\t\tif (mask) {\n\t\t\t\t\t\tdark = !dark;\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tthis.modules[row][col - c] = dark;\n\t\t\t\t\tbitIndex--;\n\n\t\t\t\t\tif (bitIndex == -1) {\n\t\t\t\t\t\tbyteIndex++;\n\t\t\t\t\t\tbitIndex = 7;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t\t\t\t\t\n\t\t\trow += inc;\n\n\t\t\tif (row < 0 || this.moduleCount <= row) {\n\t\t\t\trow -= inc;\n\t\t\t\tinc = -inc;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n};\n\nQRCode.PAD0 = 0xEC;\nQRCode.PAD1 = 0x11;\n\nQRCode.createData = function(typeNumber, errorCorrectLevel, dataList) {\n\t\n\tvar rsBlocks = RSBlock.getRSBlocks(typeNumber, errorCorrectLevel);\n\t\n\tvar buffer = new BitBuffer();\n\t\n\tfor (var i = 0; i < dataList.length; i++) {\n\t\tvar data = dataList[i];\n\t\tbuffer.put(data.mode, 4);\n\t\tbuffer.put(data.getLength(), util.getLengthInBits(data.mode, typeNumber) );\n\t\tdata.write(buffer);\n\t}\n\n\t// calc num max data.\n\tvar totalDataCount = 0;\n\tfor (var i = 0; i < rsBlocks.length; i++) {\n\t\ttotalDataCount += rsBlocks[i].dataCount;\n\t}\n\n\tif (buffer.getLengthInBits() > totalDataCount * 8) {\n\t\tthrow new Error(\"code length overflow. (\"\n\t\t\t+ buffer.getLengthInBits()\n\t\t\t+ \">\"\n\t\t\t+  totalDataCount * 8\n\t\t\t+ \")\");\n\t}\n\n\t// end code\n\tif (buffer.getLengthInBits() + 4 <= totalDataCount * 8) {\n\t\tbuffer.put(0, 4);\n\t}\n\n\t// padding\n\twhile (buffer.getLengthInBits() % 8 != 0) {\n\t\tbuffer.putBit(false);\n\t}\n\n\t// padding\n\twhile (true) {\n\t\t\n\t\tif (buffer.getLengthInBits() >= totalDataCount * 8) {\n\t\t\tbreak;\n\t\t}\n\t\tbuffer.put(QRCode.PAD0, 8);\n\t\t\n\t\tif (buffer.getLengthInBits() >= totalDataCount * 8) {\n\t\t\tbreak;\n\t\t}\n\t\tbuffer.put(QRCode.PAD1, 8);\n\t}\n\n\treturn QRCode.createBytes(buffer, rsBlocks);\n};\n\nQRCode.createBytes = function(buffer, rsBlocks) {\n\n\tvar offset = 0;\n\t\n\tvar maxDcCount = 0;\n\tvar maxEcCount = 0;\n\t\n\tvar dcdata = new Array(rsBlocks.length);\n\tvar ecdata = new Array(rsBlocks.length);\n\t\n\tfor (var r = 0; r < rsBlocks.length; r++) {\n\n\t\tvar dcCount = rsBlocks[r].dataCount;\n\t\tvar ecCount = rsBlocks[r].totalCount - dcCount;\n\n\t\tmaxDcCount = Math.max(maxDcCount, dcCount);\n\t\tmaxEcCount = Math.max(maxEcCount, ecCount);\n\t\t\n\t\tdcdata[r] = new Array(dcCount);\n\t\t\n\t\tfor (var i = 0; i < dcdata[r].length; i++) {\n\t\t\tdcdata[r][i] = 0xff & buffer.buffer[i + offset];\n\t\t}\n\t\toffset += dcCount;\n\t\t\n\t\tvar rsPoly = util.getErrorCorrectPolynomial(ecCount);\n\t\tvar rawPoly = new Polynomial(dcdata[r], rsPoly.getLength() - 1);\n\n\t\tvar modPoly = rawPoly.mod(rsPoly);\n\t\tecdata[r] = new Array(rsPoly.getLength() - 1);\n\t\tfor (var i = 0; i < ecdata[r].length; i++) {\n            var modIndex = i + modPoly.getLength() - ecdata[r].length;\n\t\t\tecdata[r][i] = (modIndex >= 0)? modPoly.get(modIndex) : 0;\n\t\t}\n\n\t}\n\t\n\tvar totalCodeCount = 0;\n\tfor (var i = 0; i < rsBlocks.length; i++) {\n\t\ttotalCodeCount += rsBlocks[i].totalCount;\n\t}\n\n\tvar data = new Array(totalCodeCount);\n\tvar index = 0;\n\n\tfor (var i = 0; i < maxDcCount; i++) {\n\t\tfor (var r = 0; r < rsBlocks.length; r++) {\n\t\t\tif (i < dcdata[r].length) {\n\t\t\t\tdata[index++] = dcdata[r][i];\n\t\t\t}\n\t\t}\n\t}\n\n\tfor (var i = 0; i < maxEcCount; i++) {\n\t\tfor (var r = 0; r < rsBlocks.length; r++) {\n\t\t\tif (i < ecdata[r].length) {\n\t\t\t\tdata[index++] = ecdata[r][i];\n\t\t\t}\n\t\t}\n\t}\n\n\treturn data;\n};\n\nmodule.exports = QRCode;\n\n","// ErrorCorrectLevel\nvar ECL = require('./ErrorCorrectLevel');\n\nfunction QRRSBlock(totalCount, dataCount) {\n\tthis.totalCount = totalCount;\n\tthis.dataCount  = dataCount;\n}\n\nQRRSBlock.RS_BLOCK_TABLE = [\n\n\t// L\n\t// M\n\t// Q\n\t// H\n\n\t// 1\n\t[1, 26, 19],\n\t[1, 26, 16],\n\t[1, 26, 13],\n\t[1, 26, 9],\n\t\n\t// 2\n\t[1, 44, 34],\n\t[1, 44, 28],\n\t[1, 44, 22],\n\t[1, 44, 16],\n\n\t// 3\n\t[1, 70, 55],\n\t[1, 70, 44],\n\t[2, 35, 17],\n\t[2, 35, 13],\n\n\t// 4\t\t\n\t[1, 100, 80],\n\t[2, 50, 32],\n\t[2, 50, 24],\n\t[4, 25, 9],\n\t\n\t// 5\n\t[1, 134, 108],\n\t[2, 67, 43],\n\t[2, 33, 15, 2, 34, 16],\n\t[2, 33, 11, 2, 34, 12],\n\t\n\t// 6\n\t[2, 86, 68],\n\t[4, 43, 27],\n\t[4, 43, 19],\n\t[4, 43, 15],\n\t\n\t// 7\t\t\n\t[2, 98, 78],\n\t[4, 49, 31],\n\t[2, 32, 14, 4, 33, 15],\n\t[4, 39, 13, 1, 40, 14],\n\t\n\t// 8\n\t[2, 121, 97],\n\t[2, 60, 38, 2, 61, 39],\n\t[4, 40, 18, 2, 41, 19],\n\t[4, 40, 14, 2, 41, 15],\n\t\n\t// 9\n\t[2, 146, 116],\n\t[3, 58, 36, 2, 59, 37],\n\t[4, 36, 16, 4, 37, 17],\n\t[4, 36, 12, 4, 37, 13],\n\t\n\t// 10\t\t\n\t[2, 86, 68, 2, 87, 69],\n\t[4, 69, 43, 1, 70, 44],\n\t[6, 43, 19, 2, 44, 20],\n\t[6, 43, 15, 2, 44, 16],\n\n\t// 11\n\t[4, 101, 81],\n\t[1, 80, 50, 4, 81, 51],\n\t[4, 50, 22, 4, 51, 23],\n\t[3, 36, 12, 8, 37, 13],\n\n\t// 12\n\t[2, 116, 92, 2, 117, 93],\n\t[6, 58, 36, 2, 59, 37],\n\t[4, 46, 20, 6, 47, 21],\n\t[7, 42, 14, 4, 43, 15],\n\n\t// 13\n\t[4, 133, 107],\n\t[8, 59, 37, 1, 60, 38],\n\t[8, 44, 20, 4, 45, 21],\n\t[12, 33, 11, 4, 34, 12],\n\n\t// 14\n\t[3, 145, 115, 1, 146, 116],\n\t[4, 64, 40, 5, 65, 41],\n\t[11, 36, 16, 5, 37, 17],\n\t[11, 36, 12, 5, 37, 13],\n\n\t// 15\n\t[5, 109, 87, 1, 110, 88],\n\t[5, 65, 41, 5, 66, 42],\n\t[5, 54, 24, 7, 55, 25],\n\t[11, 36, 12],\n\n\t// 16\n\t[5, 122, 98, 1, 123, 99],\n\t[7, 73, 45, 3, 74, 46],\n\t[15, 43, 19, 2, 44, 20],\n\t[3, 45, 15, 13, 46, 16],\n\n\t// 17\n\t[1, 135, 107, 5, 136, 108],\n\t[10, 74, 46, 1, 75, 47],\n\t[1, 50, 22, 15, 51, 23],\n\t[2, 42, 14, 17, 43, 15],\n\n\t// 18\n\t[5, 150, 120, 1, 151, 121],\n\t[9, 69, 43, 4, 70, 44],\n\t[17, 50, 22, 1, 51, 23],\n\t[2, 42, 14, 19, 43, 15],\n\n\t// 19\n\t[3, 141, 113, 4, 142, 114],\n\t[3, 70, 44, 11, 71, 45],\n\t[17, 47, 21, 4, 48, 22],\n\t[9, 39, 13, 16, 40, 14],\n\n\t// 20\n\t[3, 135, 107, 5, 136, 108],\n\t[3, 67, 41, 13, 68, 42],\n\t[15, 54, 24, 5, 55, 25],\n\t[15, 43, 15, 10, 44, 16],\n\n\t// 21\n\t[4, 144, 116, 4, 145, 117],\n\t[17, 68, 42],\n\t[17, 50, 22, 6, 51, 23],\n\t[19, 46, 16, 6, 47, 17],\n\n\t// 22\n\t[2, 139, 111, 7, 140, 112],\n\t[17, 74, 46],\n\t[7, 54, 24, 16, 55, 25],\n\t[34, 37, 13],\n\n\t// 23\n\t[4, 151, 121, 5, 152, 122],\n\t[4, 75, 47, 14, 76, 48],\n\t[11, 54, 24, 14, 55, 25],\n\t[16, 45, 15, 14, 46, 16],\n\n\t// 24\n\t[6, 147, 117, 4, 148, 118],\n\t[6, 73, 45, 14, 74, 46],\n\t[11, 54, 24, 16, 55, 25],\n\t[30, 46, 16, 2, 47, 17],\n\n\t// 25\n\t[8, 132, 106, 4, 133, 107],\n\t[8, 75, 47, 13, 76, 48],\n\t[7, 54, 24, 22, 55, 25],\n\t[22, 45, 15, 13, 46, 16],\n\n\t// 26\n\t[10, 142, 114, 2, 143, 115],\n\t[19, 74, 46, 4, 75, 47],\n\t[28, 50, 22, 6, 51, 23],\n\t[33, 46, 16, 4, 47, 17],\n\n\t// 27\n\t[8, 152, 122, 4, 153, 123],\n\t[22, 73, 45, 3, 74, 46],\n\t[8, 53, 23, 26, 54, 24],\n\t[12, 45, 15, 28, 46, 16],\n\n\t// 28\n\t[3, 147, 117, 10, 148, 118],\n\t[3, 73, 45, 23, 74, 46],\n\t[4, 54, 24, 31, 55, 25],\n\t[11, 45, 15, 31, 46, 16],\n\n\t// 29\n\t[7, 146, 116, 7, 147, 117],\n\t[21, 73, 45, 7, 74, 46],\n\t[1, 53, 23, 37, 54, 24],\n\t[19, 45, 15, 26, 46, 16],\n\n\t// 30\n\t[5, 145, 115, 10, 146, 116],\n\t[19, 75, 47, 10, 76, 48],\n\t[15, 54, 24, 25, 55, 25],\n\t[23, 45, 15, 25, 46, 16],\n\n\t// 31\n\t[13, 145, 115, 3, 146, 116],\n\t[2, 74, 46, 29, 75, 47],\n\t[42, 54, 24, 1, 55, 25],\n\t[23, 45, 15, 28, 46, 16],\n\n\t// 32\n\t[17, 145, 115],\n\t[10, 74, 46, 23, 75, 47],\n\t[10, 54, 24, 35, 55, 25],\n\t[19, 45, 15, 35, 46, 16],\n\n\t// 33\n\t[17, 145, 115, 1, 146, 116],\n\t[14, 74, 46, 21, 75, 47],\n\t[29, 54, 24, 19, 55, 25],\n\t[11, 45, 15, 46, 46, 16],\n\n\t// 34\n\t[13, 145, 115, 6, 146, 116],\n\t[14, 74, 46, 23, 75, 47],\n\t[44, 54, 24, 7, 55, 25],\n\t[59, 46, 16, 1, 47, 17],\n\n\t// 35\n\t[12, 151, 121, 7, 152, 122],\n\t[12, 75, 47, 26, 76, 48],\n\t[39, 54, 24, 14, 55, 25],\n\t[22, 45, 15, 41, 46, 16],\n\n\t// 36\n\t[6, 151, 121, 14, 152, 122],\n\t[6, 75, 47, 34, 76, 48],\n\t[46, 54, 24, 10, 55, 25],\n\t[2, 45, 15, 64, 46, 16],\n\n\t// 37\n\t[17, 152, 122, 4, 153, 123],\n\t[29, 74, 46, 14, 75, 47],\n\t[49, 54, 24, 10, 55, 25],\n\t[24, 45, 15, 46, 46, 16],\n\n\t// 38\n\t[4, 152, 122, 18, 153, 123],\n\t[13, 74, 46, 32, 75, 47],\n\t[48, 54, 24, 14, 55, 25],\n\t[42, 45, 15, 32, 46, 16],\n\n\t// 39\n\t[20, 147, 117, 4, 148, 118],\n\t[40, 75, 47, 7, 76, 48],\n\t[43, 54, 24, 22, 55, 25],\n\t[10, 45, 15, 67, 46, 16],\n\n\t// 40\n\t[19, 148, 118, 6, 149, 119],\n\t[18, 75, 47, 31, 76, 48],\n\t[34, 54, 24, 34, 55, 25],\n\t[20, 45, 15, 61, 46, 16]\n];\n\nQRRSBlock.getRSBlocks = function(typeNumber, errorCorrectLevel) {\n\t\n\tvar rsBlock = QRRSBlock.getRsBlockTable(typeNumber, errorCorrectLevel);\n\t\n\tif (rsBlock == undefined) {\n\t\tthrow new Error(\"bad rs block @ typeNumber:\" + typeNumber + \"/errorCorrectLevel:\" + errorCorrectLevel);\n\t}\n\n\tvar length = rsBlock.length / 3;\n\t\n\tvar list = new Array();\n\t\n\tfor (var i = 0; i < length; i++) {\n\n\t\tvar count = rsBlock[i * 3 + 0];\n\t\tvar totalCount = rsBlock[i * 3 + 1];\n\t\tvar dataCount  = rsBlock[i * 3 + 2];\n\n\t\tfor (var j = 0; j < count; j++) {\n\t\t\tlist.push(new QRRSBlock(totalCount, dataCount) );\t\n\t\t}\n\t}\n\t\n\treturn list;\n}\n\nQRRSBlock.getRsBlockTable = function(typeNumber, errorCorrectLevel) {\n\n\tswitch(errorCorrectLevel) {\n\tcase ECL.L :\n\t\treturn QRRSBlock.RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 0];\n\tcase ECL.M :\n\t\treturn QRRSBlock.RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 1];\n\tcase ECL.Q :\n\t\treturn QRRSBlock.RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 2];\n\tcase ECL.H :\n\t\treturn QRRSBlock.RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 3];\n\tdefault :\n\t\treturn undefined;\n\t}\n}\n\nmodule.exports = QRRSBlock;\n","var QRMath = {\n\n\tglog : function(n) {\n\t\n\t\tif (n < 1) {\n\t\t\tthrow new Error(\"glog(\" + n + \")\");\n\t\t}\n\t\t\n\t\treturn QRMath.LOG_TABLE[n];\n\t},\n\t\n\tgexp : function(n) {\n\t\n\t\twhile (n < 0) {\n\t\t\tn += 255;\n\t\t}\n\t\n\t\twhile (n >= 256) {\n\t\t\tn -= 255;\n\t\t}\n\t\n\t\treturn QRMath.EXP_TABLE[n];\n\t},\n\t\n\tEXP_TABLE : new Array(256),\n\t\n\tLOG_TABLE : new Array(256)\n\n};\n\t\nfor (var i = 0; i < 8; i++) {\n\tQRMath.EXP_TABLE[i] = 1 << i;\n}\nfor (var i = 8; i < 256; i++) {\n\tQRMath.EXP_TABLE[i] = QRMath.EXP_TABLE[i - 4]\n\t\t^ QRMath.EXP_TABLE[i - 5]\n\t\t^ QRMath.EXP_TABLE[i - 6]\n\t\t^ QRMath.EXP_TABLE[i - 8];\n}\nfor (var i = 0; i < 255; i++) {\n\tQRMath.LOG_TABLE[QRMath.EXP_TABLE[i] ] = i;\n}\n\nmodule.exports = QRMath;\n","module.exports = {\n\tMODE_NUMBER :\t\t1 << 0,\n\tMODE_ALPHA_NUM : \t1 << 1,\n\tMODE_8BIT_BYTE : \t1 << 2,\n\tMODE_KANJI :\t\t1 << 3\n};\n","var Mode = require('./mode');\nvar Polynomial = require('./Polynomial');\nvar math = require('./math');\n\nvar QRMaskPattern = {\n\tPATTERN000 : 0,\n\tPATTERN001 : 1,\n\tPATTERN010 : 2,\n\tPATTERN011 : 3,\n\tPATTERN100 : 4,\n\tPATTERN101 : 5,\n\tPATTERN110 : 6,\n\tPATTERN111 : 7\n};\n\nvar QRUtil = {\n\n    PATTERN_POSITION_TABLE : [\n\t    [],\n\t    [6, 18],\n\t    [6, 22],\n\t    [6, 26],\n\t    [6, 30],\n\t    [6, 34],\n\t    [6, 22, 38],\n\t    [6, 24, 42],\n\t    [6, 26, 46],\n\t    [6, 28, 50],\n\t    [6, 30, 54],\t\t\n\t    [6, 32, 58],\n\t    [6, 34, 62],\n\t    [6, 26, 46, 66],\n\t    [6, 26, 48, 70],\n\t    [6, 26, 50, 74],\n\t    [6, 30, 54, 78],\n\t    [6, 30, 56, 82],\n\t    [6, 30, 58, 86],\n\t    [6, 34, 62, 90],\n\t    [6, 28, 50, 72, 94],\n\t    [6, 26, 50, 74, 98],\n\t    [6, 30, 54, 78, 102],\n\t    [6, 28, 54, 80, 106],\n\t    [6, 32, 58, 84, 110],\n\t    [6, 30, 58, 86, 114],\n\t    [6, 34, 62, 90, 118],\n\t    [6, 26, 50, 74, 98, 122],\n\t    [6, 30, 54, 78, 102, 126],\n\t    [6, 26, 52, 78, 104, 130],\n\t    [6, 30, 56, 82, 108, 134],\n\t    [6, 34, 60, 86, 112, 138],\n\t    [6, 30, 58, 86, 114, 142],\n\t    [6, 34, 62, 90, 118, 146],\n\t    [6, 30, 54, 78, 102, 126, 150],\n\t    [6, 24, 50, 76, 102, 128, 154],\n\t    [6, 28, 54, 80, 106, 132, 158],\n\t    [6, 32, 58, 84, 110, 136, 162],\n\t    [6, 26, 54, 82, 110, 138, 166],\n\t    [6, 30, 58, 86, 114, 142, 170]\n    ],\n\n    G15 : (1 << 10) | (1 << 8) | (1 << 5) | (1 << 4) | (1 << 2) | (1 << 1) | (1 << 0),\n    G18 : (1 << 12) | (1 << 11) | (1 << 10) | (1 << 9) | (1 << 8) | (1 << 5) | (1 << 2) | (1 << 0),\n    G15_MASK : (1 << 14) | (1 << 12) | (1 << 10)\t| (1 << 4) | (1 << 1),\n\n    getBCHTypeInfo : function(data) {\n\t    var d = data << 10;\n\t    while (QRUtil.getBCHDigit(d) - QRUtil.getBCHDigit(QRUtil.G15) >= 0) {\n\t\t    d ^= (QRUtil.G15 << (QRUtil.getBCHDigit(d) - QRUtil.getBCHDigit(QRUtil.G15) ) ); \t\n\t    }\n\t    return ( (data << 10) | d) ^ QRUtil.G15_MASK;\n    },\n\n    getBCHTypeNumber : function(data) {\n\t    var d = data << 12;\n\t    while (QRUtil.getBCHDigit(d) - QRUtil.getBCHDigit(QRUtil.G18) >= 0) {\n\t\t    d ^= (QRUtil.G18 << (QRUtil.getBCHDigit(d) - QRUtil.getBCHDigit(QRUtil.G18) ) ); \t\n\t    }\n\t    return (data << 12) | d;\n    },\n\n    getBCHDigit : function(data) {\n\n\t    var digit = 0;\n\n\t    while (data != 0) {\n\t\t    digit++;\n\t\t    data >>>= 1;\n\t    }\n\n\t    return digit;\n    },\n\n    getPatternPosition : function(typeNumber) {\n\t    return QRUtil.PATTERN_POSITION_TABLE[typeNumber - 1];\n    },\n\n    getMask : function(maskPattern, i, j) {\n\t    \n\t    switch (maskPattern) {\n\t\t    \n\t    case QRMaskPattern.PATTERN000 : return (i + j) % 2 == 0;\n\t    case QRMaskPattern.PATTERN001 : return i % 2 == 0;\n\t    case QRMaskPattern.PATTERN010 : return j % 3 == 0;\n\t    case QRMaskPattern.PATTERN011 : return (i + j) % 3 == 0;\n\t    case QRMaskPattern.PATTERN100 : return (Math.floor(i / 2) + Math.floor(j / 3) ) % 2 == 0;\n\t    case QRMaskPattern.PATTERN101 : return (i * j) % 2 + (i * j) % 3 == 0;\n\t    case QRMaskPattern.PATTERN110 : return ( (i * j) % 2 + (i * j) % 3) % 2 == 0;\n\t    case QRMaskPattern.PATTERN111 : return ( (i * j) % 3 + (i + j) % 2) % 2 == 0;\n\n\t    default :\n\t\t    throw new Error(\"bad maskPattern:\" + maskPattern);\n\t    }\n    },\n\n    getErrorCorrectPolynomial : function(errorCorrectLength) {\n\n\t    var a = new Polynomial([1], 0);\n\n\t    for (var i = 0; i < errorCorrectLength; i++) {\n\t\t    a = a.multiply(new Polynomial([1, math.gexp(i)], 0) );\n\t    }\n\n\t    return a;\n    },\n\n    getLengthInBits : function(mode, type) {\n\n\t    if (1 <= type && type < 10) {\n\n\t\t    // 1 - 9\n\n\t\t    switch(mode) {\n\t\t    case Mode.MODE_NUMBER \t: return 10;\n\t\t    case Mode.MODE_ALPHA_NUM \t: return 9;\n\t\t    case Mode.MODE_8BIT_BYTE\t: return 8;\n\t\t    case Mode.MODE_KANJI  \t: return 8;\n\t\t    default :\n\t\t\t    throw new Error(\"mode:\" + mode);\n\t\t    }\n\n\t    } else if (type < 27) {\n\n\t\t    // 10 - 26\n\n\t\t    switch(mode) {\n\t\t    case Mode.MODE_NUMBER \t: return 12;\n\t\t    case Mode.MODE_ALPHA_NUM \t: return 11;\n\t\t    case Mode.MODE_8BIT_BYTE\t: return 16;\n\t\t    case Mode.MODE_KANJI  \t: return 10;\n\t\t    default :\n\t\t\t    throw new Error(\"mode:\" + mode);\n\t\t    }\n\n\t    } else if (type < 41) {\n\n\t\t    // 27 - 40\n\n\t\t    switch(mode) {\n\t\t    case Mode.MODE_NUMBER \t: return 14;\n\t\t    case Mode.MODE_ALPHA_NUM\t: return 13;\n\t\t    case Mode.MODE_8BIT_BYTE\t: return 16;\n\t\t    case Mode.MODE_KANJI  \t: return 12;\n\t\t    default :\n\t\t\t    throw new Error(\"mode:\" + mode);\n\t\t    }\n\n\t    } else {\n\t\t    throw new Error(\"type:\" + type);\n\t    }\n    },\n\n    getLostPoint : function(qrCode) {\n\t    \n\t    var moduleCount = qrCode.getModuleCount();\n\t    \n\t    var lostPoint = 0;\n\t    \n\t    // LEVEL1\n\t    \n\t    for (var row = 0; row < moduleCount; row++) {\n\n\t\t    for (var col = 0; col < moduleCount; col++) {\n\n\t\t\t    var sameCount = 0;\n\t\t\t    var dark = qrCode.isDark(row, col);\n\n\t\t\t\tfor (var r = -1; r <= 1; r++) {\n\n\t\t\t\t    if (row + r < 0 || moduleCount <= row + r) {\n\t\t\t\t\t    continue;\n\t\t\t\t    }\n\n\t\t\t\t    for (var c = -1; c <= 1; c++) {\n\n\t\t\t\t\t    if (col + c < 0 || moduleCount <= col + c) {\n\t\t\t\t\t\t    continue;\n\t\t\t\t\t    }\n\n\t\t\t\t\t    if (r == 0 && c == 0) {\n\t\t\t\t\t\t    continue;\n\t\t\t\t\t    }\n\n\t\t\t\t\t    if (dark == qrCode.isDark(row + r, col + c) ) {\n\t\t\t\t\t\t    sameCount++;\n\t\t\t\t\t    }\n\t\t\t\t    }\n\t\t\t    }\n\n\t\t\t    if (sameCount > 5) {\n\t\t\t\t    lostPoint += (3 + sameCount - 5);\n\t\t\t    }\n\t\t    }\n\t    }\n\n\t    // LEVEL2\n\n\t    for (var row = 0; row < moduleCount - 1; row++) {\n\t\t    for (var col = 0; col < moduleCount - 1; col++) {\n\t\t\t    var count = 0;\n\t\t\t    if (qrCode.isDark(row,     col    ) ) count++;\n\t\t\t    if (qrCode.isDark(row + 1, col    ) ) count++;\n\t\t\t    if (qrCode.isDark(row,     col + 1) ) count++;\n\t\t\t    if (qrCode.isDark(row + 1, col + 1) ) count++;\n\t\t\t    if (count == 0 || count == 4) {\n\t\t\t\t    lostPoint += 3;\n\t\t\t    }\n\t\t    }\n\t    }\n\n\t    // LEVEL3\n\n\t    for (var row = 0; row < moduleCount; row++) {\n\t\t    for (var col = 0; col < moduleCount - 6; col++) {\n\t\t\t    if (qrCode.isDark(row, col)\n\t\t\t\t\t    && !qrCode.isDark(row, col + 1)\n\t\t\t\t\t    &&  qrCode.isDark(row, col + 2)\n\t\t\t\t\t    &&  qrCode.isDark(row, col + 3)\n\t\t\t\t\t    &&  qrCode.isDark(row, col + 4)\n\t\t\t\t\t    && !qrCode.isDark(row, col + 5)\n\t\t\t\t\t    &&  qrCode.isDark(row, col + 6) ) {\n\t\t\t\t    lostPoint += 40;\n\t\t\t    }\n\t\t    }\n\t    }\n\n\t    for (var col = 0; col < moduleCount; col++) {\n\t\t    for (var row = 0; row < moduleCount - 6; row++) {\n\t\t\t    if (qrCode.isDark(row, col)\n\t\t\t\t\t    && !qrCode.isDark(row + 1, col)\n\t\t\t\t\t    &&  qrCode.isDark(row + 2, col)\n\t\t\t\t\t    &&  qrCode.isDark(row + 3, col)\n\t\t\t\t\t    &&  qrCode.isDark(row + 4, col)\n\t\t\t\t\t    && !qrCode.isDark(row + 5, col)\n\t\t\t\t\t    &&  qrCode.isDark(row + 6, col) ) {\n\t\t\t\t    lostPoint += 40;\n\t\t\t    }\n\t\t    }\n\t    }\n\n\t    // LEVEL4\n\t    \n\t    var darkCount = 0;\n\n\t    for (var col = 0; col < moduleCount; col++) {\n\t\t    for (var row = 0; row < moduleCount; row++) {\n\t\t\t    if (qrCode.isDark(row, col) ) {\n\t\t\t\t    darkCount++;\n\t\t\t    }\n\t\t    }\n\t    }\n\t    \n\t    var ratio = Math.abs(100 * darkCount / moduleCount / moduleCount - 50) / 5;\n\t    lostPoint += ratio * 10;\n\n\t    return lostPoint;\t\t\n    }\n};\n\nmodule.exports = QRUtil;\n","import warning from 'warning';\nimport React, { Component, PureComponent, isValidElement } from 'react';\nimport { ticks } from 'd3-array';\n\nfunction ownKeys(object, enumerableOnly) {\n  var keys = Object.keys(object);\n\n  if (Object.getOwnPropertySymbols) {\n    var symbols = Object.getOwnPropertySymbols(object);\n    enumerableOnly && (symbols = symbols.filter(function (sym) {\n      return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n    })), keys.push.apply(keys, symbols);\n  }\n\n  return keys;\n}\n\nfunction _objectSpread2(target) {\n  for (var i = 1; i < arguments.length; i++) {\n    var source = null != arguments[i] ? arguments[i] : {};\n    i % 2 ? ownKeys(Object(source), !0).forEach(function (key) {\n      _defineProperty(target, key, source[key]);\n    }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) {\n      Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n    });\n  }\n\n  return target;\n}\n\nfunction _classCallCheck(instance, Constructor) {\n  if (!(instance instanceof Constructor)) {\n    throw new TypeError(\"Cannot call a class as a function\");\n  }\n}\n\nfunction _defineProperties(target, props) {\n  for (var i = 0; i < props.length; i++) {\n    var descriptor = props[i];\n    descriptor.enumerable = descriptor.enumerable || false;\n    descriptor.configurable = true;\n    if (\"value\" in descriptor) descriptor.writable = true;\n    Object.defineProperty(target, descriptor.key, descriptor);\n  }\n}\n\nfunction _createClass(Constructor, protoProps, staticProps) {\n  if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n  if (staticProps) _defineProperties(Constructor, staticProps);\n  Object.defineProperty(Constructor, \"prototype\", {\n    writable: false\n  });\n  return Constructor;\n}\n\nfunction _defineProperty(obj, key, value) {\n  if (key in obj) {\n    Object.defineProperty(obj, key, {\n      value: value,\n      enumerable: true,\n      configurable: true,\n      writable: true\n    });\n  } else {\n    obj[key] = value;\n  }\n\n  return obj;\n}\n\nfunction _inherits(subClass, superClass) {\n  if (typeof superClass !== \"function\" && superClass !== null) {\n    throw new TypeError(\"Super expression must either be null or a function\");\n  }\n\n  subClass.prototype = Object.create(superClass && superClass.prototype, {\n    constructor: {\n      value: subClass,\n      writable: true,\n      configurable: true\n    }\n  });\n  Object.defineProperty(subClass, \"prototype\", {\n    writable: false\n  });\n  if (superClass) _setPrototypeOf(subClass, superClass);\n}\n\nfunction _getPrototypeOf(o) {\n  _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) {\n    return o.__proto__ || Object.getPrototypeOf(o);\n  };\n  return _getPrototypeOf(o);\n}\n\nfunction _setPrototypeOf(o, p) {\n  _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) {\n    o.__proto__ = p;\n    return o;\n  };\n  return _setPrototypeOf(o, p);\n}\n\nfunction _isNativeReflectConstruct() {\n  if (typeof Reflect === \"undefined\" || !Reflect.construct) return false;\n  if (Reflect.construct.sham) return false;\n  if (typeof Proxy === \"function\") return true;\n\n  try {\n    Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {}));\n    return true;\n  } catch (e) {\n    return false;\n  }\n}\n\nfunction _assertThisInitialized(self) {\n  if (self === void 0) {\n    throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n  }\n\n  return self;\n}\n\nfunction _possibleConstructorReturn(self, call) {\n  if (call && (typeof call === \"object\" || typeof call === \"function\")) {\n    return call;\n  } else if (call !== void 0) {\n    throw new TypeError(\"Derived constructors may only return object or undefined\");\n  }\n\n  return _assertThisInitialized(self);\n}\n\nfunction _createSuper(Derived) {\n  var hasNativeReflectConstruct = _isNativeReflectConstruct();\n\n  return function _createSuperInternal() {\n    var Super = _getPrototypeOf(Derived),\n        result;\n\n    if (hasNativeReflectConstruct) {\n      var NewTarget = _getPrototypeOf(this).constructor;\n\n      result = Reflect.construct(Super, arguments, NewTarget);\n    } else {\n      result = Super.apply(this, arguments);\n    }\n\n    return _possibleConstructorReturn(this, result);\n  };\n}\n\nfunction _slicedToArray(arr, i) {\n  return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest();\n}\n\nfunction _toConsumableArray(arr) {\n  return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();\n}\n\nfunction _arrayWithoutHoles(arr) {\n  if (Array.isArray(arr)) return _arrayLikeToArray(arr);\n}\n\nfunction _arrayWithHoles(arr) {\n  if (Array.isArray(arr)) return arr;\n}\n\nfunction _iterableToArray(iter) {\n  if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter);\n}\n\nfunction _iterableToArrayLimit(arr, i) {\n  var _i = arr == null ? null : typeof Symbol !== \"undefined\" && arr[Symbol.iterator] || arr[\"@@iterator\"];\n\n  if (_i == null) return;\n  var _arr = [];\n  var _n = true;\n  var _d = false;\n\n  var _s, _e;\n\n  try {\n    for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) {\n      _arr.push(_s.value);\n\n      if (i && _arr.length === i) break;\n    }\n  } catch (err) {\n    _d = true;\n    _e = err;\n  } finally {\n    try {\n      if (!_n && _i[\"return\"] != null) _i[\"return\"]();\n    } finally {\n      if (_d) throw _e;\n    }\n  }\n\n  return _arr;\n}\n\nfunction _unsupportedIterableToArray(o, minLen) {\n  if (!o) return;\n  if (typeof o === \"string\") return _arrayLikeToArray(o, minLen);\n  var n = Object.prototype.toString.call(o).slice(8, -1);\n  if (n === \"Object\" && o.constructor) n = o.constructor.name;\n  if (n === \"Map\" || n === \"Set\") return Array.from(o);\n  if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);\n}\n\nfunction _arrayLikeToArray(arr, len) {\n  if (len == null || len > arr.length) len = arr.length;\n\n  for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];\n\n  return arr2;\n}\n\nfunction _nonIterableSpread() {\n  throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\n\nfunction _nonIterableRest() {\n  throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\n\nvar prfx = 'react-compound-slider:';\nfunction getSortByVal() {\n  var reversed = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n  return function sortByVal(a, b) {\n    if (a.val > b.val) {\n      return reversed ? -1 : 1;\n    }\n\n    if (b.val > a.val) {\n      return reversed ? 1 : -1;\n    }\n\n    return 0;\n  };\n}\nfunction getUpdatedHandles(handles, updateKey, updateValue) {\n  var reversed = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n  var index = handles.findIndex(function (v) {\n    return v.key === updateKey;\n  });\n\n  if (index !== -1) {\n    var _handles$index = handles[index],\n        key = _handles$index.key,\n        val = _handles$index.val;\n\n    if (val === updateValue) {\n      return handles;\n    }\n\n    return [].concat(_toConsumableArray(handles.slice(0, index)), [{\n      key: key,\n      val: updateValue\n    }], _toConsumableArray(handles.slice(index + 1))).sort(getSortByVal(reversed));\n  }\n\n  return handles;\n}\nfunction getSliderDomain(slider, vertical) {\n  if (!slider) {\n    return [0, 0];\n  }\n\n  var s = slider.getBoundingClientRect();\n  var d0 = vertical ? s.top : s.left;\n  var d1 = vertical ? s.bottom : s.right;\n  return [d0, d1];\n}\nfunction isNotValidTouch(_ref) {\n  var _ref$type = _ref.type,\n      type = _ref$type === void 0 ? '' : _ref$type,\n      touches = _ref.touches;\n  return !touches || touches.length > 1 || type.toLowerCase() === 'touchend' && touches.length > 0;\n}\nfunction getTouchPosition(vertical, e) {\n  return vertical ? e.touches[0].clientY : e.touches[0].pageX;\n}\nfunction getHandles() {\n  var values = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n  var reversed = arguments.length > 1 ? arguments[1] : undefined;\n  var valueToStep = arguments.length > 2 ? arguments[2] : undefined;\n  var warn = arguments.length > 3 ? arguments[3] : undefined;\n  var changes = 0;\n  var handles = values.map(function (x) {\n    var val = valueToStep.getValue(x);\n\n    if (x !== val) {\n      changes += 1;\n      warning(!warn, \"\".concat(prfx, \" Invalid value encountered. Changing \").concat(x, \" to \").concat(val, \".\"));\n    }\n\n    return val;\n  }).map(function (val, i) {\n    return {\n      key: \"$$-\".concat(i),\n      val: val\n    };\n  }).sort(getSortByVal(reversed));\n  return {\n    handles: handles,\n    changes: changes\n  };\n}\n\n// default mode\nfunction mode1(_, next) {\n  return next;\n} // prevent duplicate values and crossing\n\nfunction mode2(curr, next) {\n  for (var i = 0; i < curr.length; i++) {\n    if (curr[i].key !== next[i].key) {\n      return curr;\n    }\n\n    if (next[i + 1] && next[i].val === next[i + 1].val) {\n      return curr;\n    }\n  }\n\n  return next;\n} // pushable mode\n\nfunction mode3(curr, next, step, reversed, getValue) {\n  var indexForMovingHandle = -1;\n  var handleMoveIsPositive = true;\n\n  for (var i = 0; i < curr.length; i++) {\n    var c = curr[i];\n    var n = next[i]; // make sure keys are in same order if not return curr\n\n    if (!n || n.key !== c.key) {\n      return curr;\n    } else if (n.val !== c.val) {\n      indexForMovingHandle = i;\n      handleMoveIsPositive = n.val - c.val > 0;\n    }\n  } // nothing has changed (shouldn't happen but just in case).\n\n\n  if (indexForMovingHandle === -1) {\n    return curr;\n  } else {\n    var increment = handleMoveIsPositive ? step : -step;\n\n    for (var _i = 0; _i < next.length; _i++) {\n      var n0 = next[_i];\n      var n1 = next[_i + 1];\n\n      if (n1 && n0.val === n1.val) {\n        if (_i === indexForMovingHandle) {\n          var newStep = n1.val + increment;\n\n          if (getValue(newStep) === newStep) {\n            var clone = getUpdatedHandles(next, n1.key, n1.val + increment, reversed);\n            var check = mode3(next, clone, step, reversed, getValue);\n\n            if (check === next) {\n              return curr;\n            } else {\n              return check;\n            }\n          } else {\n            return curr;\n          }\n        } else {\n          var _newStep = n0.val + increment;\n\n          if (getValue(_newStep) === _newStep) {\n            var _clone = getUpdatedHandles(next, n0.key, n0.val + increment, reversed);\n\n            var _check = mode3(next, _clone, step, reversed, getValue);\n\n            if (_check === next) {\n              return curr;\n            } else {\n              return _check;\n            }\n          } else {\n            return curr;\n          }\n        }\n      }\n    }\n  }\n\n  return next;\n}\n\nfunction callAll() {\n  for (var _len = arguments.length, fns = new Array(_len), _key = 0; _key < _len; _key++) {\n    fns[_key] = arguments[_key];\n  }\n\n  return function (e) {\n    return fns.forEach(function (fn) {\n      return fn && fn(e);\n    });\n  };\n}\n\nvar NOOP = function NOOP() {\n  return {\n    value: 0,\n    percent: 0\n  };\n};\n\nvar Rail = /*#__PURE__*/function (_Component) {\n  _inherits(Rail, _Component);\n\n  var _super = _createSuper(Rail);\n\n  function Rail() {\n    var _this;\n\n    _classCallCheck(this, Rail);\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    _this = _super.call.apply(_super, [this].concat(args));\n\n    _this.getRailProps = function () {\n      var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n      var _this$props = _this.props,\n          emitMouse = _this$props.emitMouse,\n          emitTouch = _this$props.emitTouch;\n      return _objectSpread2(_objectSpread2({}, props), {}, {\n        onMouseDown: callAll(props && props.onMouseDown, emitMouse),\n        onTouchStart: callAll(props && props.onTouchStart, emitTouch)\n      });\n    };\n\n    return _this;\n  }\n\n  _createClass(Rail, [{\n    key: \"render\",\n    value: function render() {\n      var getRailProps = this.getRailProps,\n          _this$props2 = this.props,\n          getEventData = _this$props2.getEventData,\n          _this$props2$activeHa = _this$props2.activeHandleID,\n          activeHandleID = _this$props2$activeHa === void 0 ? '' : _this$props2$activeHa,\n          children = _this$props2.children;\n      var renderedChildren = children({\n        getEventData: getEventData || NOOP,\n        activeHandleID: activeHandleID,\n        getRailProps: getRailProps\n      });\n      return renderedChildren && React.Children.only(renderedChildren);\n    }\n  }]);\n\n  return Rail;\n}(Component);\n\nvar Handles = /*#__PURE__*/function (_Component) {\n  _inherits(Handles, _Component);\n\n  var _super = _createSuper(Handles);\n\n  function Handles() {\n    var _this;\n\n    _classCallCheck(this, Handles);\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    _this = _super.call.apply(_super, [this].concat(args));\n\n    _this.autofocus = function (e) {\n      if (e.target instanceof HTMLElement) {\n        e.target.focus();\n      }\n    };\n\n    _this.getHandleProps = function (id) {\n      var props = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n      var _this$props = _this.props,\n          emitKeyboard = _this$props.emitKeyboard,\n          emitMouse = _this$props.emitMouse,\n          emitTouch = _this$props.emitTouch;\n      return _objectSpread2(_objectSpread2({}, props), {}, {\n        onKeyDown: callAll(props && props.onKeyDown, function (e) {\n          return emitKeyboard && emitKeyboard(e, id);\n        }),\n        onMouseDown: callAll(props && props.onMouseDown, _this.autofocus, function (e) {\n          return emitMouse && emitMouse(e, id);\n        }),\n        onTouchStart: callAll(props && props.onTouchStart, function (e) {\n          return emitTouch && emitTouch(e, id);\n        })\n      });\n    };\n\n    return _this;\n  }\n\n  _createClass(Handles, [{\n    key: \"render\",\n    value: function render() {\n      var getHandleProps = this.getHandleProps,\n          _this$props2 = this.props,\n          _this$props2$activeHa = _this$props2.activeHandleID,\n          activeHandleID = _this$props2$activeHa === void 0 ? '' : _this$props2$activeHa,\n          children = _this$props2.children,\n          _this$props2$handles = _this$props2.handles,\n          handles = _this$props2$handles === void 0 ? [] : _this$props2$handles;\n      var renderedChildren = children({\n        handles: handles,\n        activeHandleID: activeHandleID,\n        getHandleProps: getHandleProps\n      });\n      return renderedChildren && React.Children.only(renderedChildren);\n    }\n  }]);\n\n  return Handles;\n}(Component);\n\nvar LinearScale = /*#__PURE__*/function () {\n  function LinearScale() {\n    _classCallCheck(this, LinearScale);\n\n    this.interpolator = void 0;\n    this.domain = [0, 1];\n    this.range = [0, 1];\n    this.domain = [0, 1];\n    this.range = [0, 1];\n    this.interpolator = null;\n  }\n\n  _createClass(LinearScale, [{\n    key: \"createInterpolator\",\n    value: function createInterpolator(domain, range) {\n      var _this = this;\n\n      var d0 = domain[0];\n      var d1 = domain[1];\n      var r0 = range[0];\n      var r1 = range[1];\n\n      if (d1 < d0) {\n        return function (x) {\n          return _this.interpolateValue(r1, r0)(_this.deinterpolateValue(d1, d0)(x));\n        };\n      } else {\n        return function (x) {\n          return _this.interpolateValue(r0, r1)(_this.deinterpolateValue(d0, d1)(x));\n        };\n      }\n    }\n  }, {\n    key: \"interpolateValue\",\n    value: function interpolateValue(a, b) {\n      return a = +a, b -= a, function i(t) {\n        return a + b * t;\n      };\n    }\n  }, {\n    key: \"deinterpolateValue\",\n    value: function deinterpolateValue(a, b) {\n      return (b -= a = +a) ? function (x) {\n        return (x - a) / b;\n      } : function () {\n        return b;\n      };\n    }\n  }, {\n    key: \"rescale\",\n    value: function rescale() {\n      this.interpolator = null;\n      return this;\n    }\n  }, {\n    key: \"getValue\",\n    value: function getValue(x) {\n      var domain = this.domain,\n          range = this.range;\n      return (this.interpolator || (this.interpolator = this.createInterpolator(domain, range)))(+x);\n    }\n  }, {\n    key: \"setDomain\",\n    value: function setDomain(val) {\n      this.domain = [val[0], val[1]];\n      this.rescale();\n      return this;\n    }\n  }, {\n    key: \"getDomain\",\n    value: function getDomain() {\n      return this.domain;\n    }\n  }, {\n    key: \"setRange\",\n    value: function setRange(val) {\n      this.range = [val[0], val[1]];\n      return this;\n    }\n  }, {\n    key: \"getRange\",\n    value: function getRange() {\n      return this.range;\n    }\n  }, {\n    key: \"getTicks\",\n    value: function getTicks(count) {\n      var d = this.domain;\n      return ticks(d[0], d[d.length - 1], count ? count : 10);\n    }\n  }]);\n\n  return LinearScale;\n}();\n\nvar defaultGetEventData$1 = function defaultGetEventData() {\n  return {\n    value: 0,\n    percent: 0\n  };\n};\n\nvar Ticks = /*#__PURE__*/function (_Component) {\n  _inherits(Ticks, _Component);\n\n  var _super = _createSuper(Ticks);\n\n  function Ticks() {\n    _classCallCheck(this, Ticks);\n\n    return _super.apply(this, arguments);\n  }\n\n  _createClass(Ticks, [{\n    key: \"render\",\n    value: function render() {\n      var _this$props = this.props,\n          children = _this$props.children,\n          values = _this$props.values,\n          _this$props$scale = _this$props.scale,\n          scale = _this$props$scale === void 0 ? new LinearScale() : _this$props$scale,\n          _this$props$count = _this$props.count,\n          count = _this$props$count === void 0 ? 10 : _this$props$count,\n          _this$props$getEventD = _this$props.getEventData,\n          getEventData = _this$props$getEventD === void 0 ? defaultGetEventData$1 : _this$props$getEventD,\n          _this$props$activeHan = _this$props.activeHandleID,\n          activeHandleID = _this$props$activeHan === void 0 ? '' : _this$props$activeHan;\n      var ticks = (values ? values : scale.getTicks(count)).map(function (value) {\n        return {\n          id: \"$$-\".concat(value),\n          value: value,\n          percent: scale.getValue(value)\n        };\n      });\n      var renderedChildren = children({\n        getEventData: getEventData,\n        activeHandleID: activeHandleID,\n        ticks: ticks\n      });\n      return renderedChildren && React.Children.only(renderedChildren);\n    }\n  }]);\n\n  return Ticks;\n}(Component);\n\nvar defaultGetEventData = function defaultGetEventData() {\n  return {\n    value: 0,\n    percent: 0\n  };\n};\n\nvar Tracks = /*#__PURE__*/function (_Component) {\n  _inherits(Tracks, _Component);\n\n  var _super = _createSuper(Tracks);\n\n  function Tracks() {\n    var _this;\n\n    _classCallCheck(this, Tracks);\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    _this = _super.call.apply(_super, [this].concat(args));\n\n    _this.getTrackProps = function (props) {\n      var _this$props = _this.props,\n          emitMouse = _this$props.emitMouse,\n          emitTouch = _this$props.emitTouch;\n      return _objectSpread2(_objectSpread2({}, props || {}), {}, {\n        onMouseDown: callAll(props && props.onMouseDown, emitMouse),\n        onTouchStart: callAll(props && props.onTouchStart, emitTouch)\n      });\n    };\n\n    return _this;\n  }\n\n  _createClass(Tracks, [{\n    key: \"render\",\n    value: function render() {\n      var getTrackProps = this.getTrackProps,\n          _this$props2 = this.props,\n          children = _this$props2.children,\n          _this$props2$left = _this$props2.left,\n          left = _this$props2$left === void 0 ? true : _this$props2$left,\n          _this$props2$right = _this$props2.right,\n          right = _this$props2$right === void 0 ? true : _this$props2$right,\n          _this$props2$scale = _this$props2.scale,\n          scale = _this$props2$scale === void 0 ? new LinearScale() : _this$props2$scale,\n          _this$props2$handles = _this$props2.handles,\n          handles = _this$props2$handles === void 0 ? [] : _this$props2$handles,\n          _this$props2$getEvent = _this$props2.getEventData,\n          getEventData = _this$props2$getEvent === void 0 ? defaultGetEventData : _this$props2$getEvent,\n          _this$props2$activeHa = _this$props2.activeHandleID,\n          activeHandleID = _this$props2$activeHa === void 0 ? '' : _this$props2$activeHa;\n      var domain = scale.getDomain();\n      var tracks = [];\n\n      for (var i = 0; i < handles.length + 1; i++) {\n        var source = handles[i - 1];\n        var target = handles[i];\n\n        if (i === 0 && left === true) {\n          source = {\n            id: '$',\n            value: domain[0],\n            percent: 0\n          };\n        } else if (i === handles.length && right === true) {\n          target = {\n            id: '$',\n            value: domain[1],\n            percent: 100\n          };\n        }\n\n        if (source && target) {\n          tracks.push({\n            id: \"\".concat(source.id, \"-\").concat(target.id),\n            source: source,\n            target: target\n          });\n        }\n      }\n\n      var renderedChildren = children({\n        getEventData: getEventData,\n        activeHandleID: activeHandleID,\n        tracks: tracks,\n        getTrackProps: getTrackProps\n      });\n      return renderedChildren && React.Children.only(renderedChildren);\n    }\n  }]);\n\n  return Tracks;\n}(Component);\n\nfunction clamp(value, min, max) {\n  return Math.min(Math.max(value, min), max);\n}\n\nvar DiscreteScale = /*#__PURE__*/_createClass(function DiscreteScale() {\n  var _this = this;\n\n  _classCallCheck(this, DiscreteScale);\n\n  this.step = 1;\n  this.domain = [0, 1];\n  this.range = [0, 1];\n\n  this.setDomain = function (val) {\n    _this.domain = [val[0], val[1]];\n    return _this;\n  };\n\n  this.setRange = function (val) {\n    _this.range = [val[0], val[1]];\n    return _this;\n  };\n\n  this.setStep = function (val) {\n    _this.step = val;\n    return _this;\n  };\n\n  this.getValue = function (x) {\n    var _this$domain = _slicedToArray(_this.domain, 2),\n        d0 = _this$domain[0],\n        d1 = _this$domain[1],\n        _this$range = _slicedToArray(_this.range, 2),\n        r0 = _this$range[0],\n        r1 = _this$range[1],\n        step = _this.step;\n\n    var p = (clamp(x, d0, d1) - d0) / (d1 - d0);\n    var b = step * Math.round(p * (r1 - r0) / step) + r0;\n    return clamp(b, r0 < r1 ? r0 : r1, r1 > r0 ? r1 : r0);\n  };\n});\n\nvar isBrowser = typeof window !== 'undefined' && typeof document !== 'undefined';\n\nvar noop = function noop() {};\n\nvar compare = function compare(b) {\n  return function (m, d, i) {\n    return m && b[i] === d;\n  };\n};\n\nvar equal = function equal(a, b) {\n  return a === b || a.length === b.length && a.reduce(compare(b), true);\n};\n\nvar isRCSComponent = function isRCSComponent(item) {\n  if (! /*#__PURE__*/isValidElement(item)) {\n    return false;\n  }\n\n  var type = item.type;\n  var name = type ? type.name : '';\n  return name === Handles.name || name === Rail.name || name === Ticks.name || name === Tracks.name;\n};\n\nvar getNextValue = function getNextValue(curr, step, domain, reversed) {\n  var newVal = reversed ? curr - step : curr + step;\n  return reversed ? Math.max(domain[0], newVal) : Math.min(domain[1], newVal);\n};\n\nvar getPrevValue = function getPrevValue(curr, step, domain, reversed) {\n  var newVal = reversed ? curr + step : curr - step;\n  return reversed ? Math.min(domain[1], newVal) : Math.max(domain[0], newVal);\n};\n\nvar defaultDomain = [0, 100];\nvar Slider = /*#__PURE__*/function (_PureComponent) {\n  _inherits(Slider, _PureComponent);\n\n  var _super = _createSuper(Slider);\n\n  function Slider() {\n    var _this;\n\n    _classCallCheck(this, Slider);\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    _this = _super.call.apply(_super, [this].concat(args));\n    _this.state = {\n      step: 0.1,\n      values: [],\n      domain: defaultDomain,\n      handles: [],\n      reversed: false,\n      activeHandleID: '',\n      valueToPerc: null,\n      valueToStep: null,\n      pixelToStep: null\n    };\n    _this.slider = /*#__PURE__*/React.createRef();\n\n    _this.onKeyDown = function (e, handleID) {\n      var validUpKeys = ['ArrowRight', 'ArrowUp'];\n      var validDownKeys = ['ArrowDown', 'ArrowLeft'];\n\n      var _assertThisInitialize = _assertThisInitialized(_this),\n          handles = _assertThisInitialize.state.handles,\n          _assertThisInitialize2 = _assertThisInitialize.props,\n          _assertThisInitialize3 = _assertThisInitialize2.step,\n          step = _assertThisInitialize3 === void 0 ? 0.1 : _assertThisInitialize3,\n          _assertThisInitialize4 = _assertThisInitialize2.reversed,\n          reversed = _assertThisInitialize4 === void 0 ? false : _assertThisInitialize4,\n          _assertThisInitialize5 = _assertThisInitialize2.vertical,\n          vertical = _assertThisInitialize5 === void 0 ? false : _assertThisInitialize5,\n          _assertThisInitialize6 = _assertThisInitialize2.domain,\n          domain = _assertThisInitialize6 === void 0 ? [0, 100] : _assertThisInitialize6;\n\n      var key = e.key || \"\".concat(e.keyCode);\n\n      if (!validUpKeys.concat(validDownKeys).includes(key)) {\n        return;\n      }\n\n      if (vertical) {\n        var _ref = [validDownKeys, validUpKeys];\n        validUpKeys = _ref[0];\n        validDownKeys = _ref[1];\n      }\n\n      e.stopPropagation && e.stopPropagation();\n      e.preventDefault && e.preventDefault();\n      var found = handles.find(function (value) {\n        return value.key === handleID;\n      });\n\n      if (!found) {\n        return;\n      }\n\n      var currVal = found.val;\n      var newVal = currVal;\n\n      if (validUpKeys.includes(key)) {\n        newVal = getNextValue(currVal, step, domain, reversed);\n      } else if (validDownKeys.includes(key)) {\n        newVal = getPrevValue(currVal, step, domain, reversed);\n      }\n\n      var nextHandles = handles.map(function (v) {\n        return v.key === handleID ? {\n          key: v.key,\n          val: newVal\n        } : v;\n      });\n\n      _this.submitUpdate(nextHandles, true);\n    };\n\n    _this.onMouseDown = function (e, handleID) {\n      _this.onStart(e, handleID, false);\n    };\n\n    _this.onTouchStart = function (e, handleID) {\n      if (isNotValidTouch(e)) {\n        return;\n      }\n\n      _this.onStart(e, handleID, true);\n    };\n\n    _this.getEventData = function (e, isTouch) {\n      var _assertThisInitialize7 = _assertThisInitialized(_this),\n          _assertThisInitialize8 = _assertThisInitialize7.state,\n          pixelToStep = _assertThisInitialize8.pixelToStep,\n          valueToPerc = _assertThisInitialize8.valueToPerc,\n          vertical = _assertThisInitialize7.props.vertical; // double check the dimensions of the slider\n      // @ts-ignore\n\n\n      pixelToStep.setDomain(getSliderDomain(_this.slider.current, vertical));\n      var value;\n\n      if (isTouch && e instanceof TouchEvent) {\n        // @ts-ignore\n        value = pixelToStep.getValue(getTouchPosition(vertical, e));\n      } else if (e instanceof MouseEvent) {\n        // @ts-ignore\n        value = pixelToStep.getValue(vertical ? e.clientY : e.pageX);\n      }\n\n      return {\n        value: value,\n        // @ts-ignore\n        percent: valueToPerc.getValue(value)\n      };\n    };\n\n    _this.onMouseMove = function (e) {\n      var _assertThisInitialize9 = _assertThisInitialized(_this),\n          _assertThisInitialize10 = _assertThisInitialize9.state,\n          curr = _assertThisInitialize10.handles,\n          pixelToStep = _assertThisInitialize10.pixelToStep,\n          _assertThisInitialize11 = _assertThisInitialize10.activeHandleID,\n          activeHandleID = _assertThisInitialize11 === void 0 ? '' : _assertThisInitialize11,\n          _assertThisInitialize12 = _assertThisInitialize9.props,\n          vertical = _assertThisInitialize12.vertical,\n          _assertThisInitialize13 = _assertThisInitialize12.reversed,\n          reversed = _assertThisInitialize13 === void 0 ? false : _assertThisInitialize13; // double check the dimensions of the slider\n      // @ts-ignore\n\n\n      pixelToStep.setDomain(getSliderDomain(_this.slider.current, vertical)); // find the closest value (aka step) to the event location\n      // @ts-ignore\n\n      var updateValue = pixelToStep.getValue(vertical ? e.clientY : e.pageX); // generate a \"candidate\" set of values - a suggestion of what to do\n\n      var nextHandles = getUpdatedHandles(curr, activeHandleID, updateValue, reversed); // submit the candidate values\n\n      _this.submitUpdate(nextHandles);\n    };\n\n    _this.onTouchMove = function (e) {\n      var _assertThisInitialize14 = _assertThisInitialized(_this),\n          _assertThisInitialize15 = _assertThisInitialize14.state,\n          curr = _assertThisInitialize15.handles,\n          pixelToStep = _assertThisInitialize15.pixelToStep,\n          activeHandleID = _assertThisInitialize15.activeHandleID,\n          _assertThisInitialize16 = _assertThisInitialize14.props,\n          vertical = _assertThisInitialize16.vertical,\n          reversed = _assertThisInitialize16.reversed;\n\n      if (pixelToStep === null || isNotValidTouch(e)) {\n        return;\n      } // double check the dimensions of the slider\n      // @ts-ignore\n\n\n      pixelToStep.setDomain(getSliderDomain(_this.slider.current, vertical)); // find the closest value (aka step) to the event location\n      // @ts-ignore\n\n      var updateValue = pixelToStep.getValue(getTouchPosition(vertical, e)); // generate a \"candidate\" set of values - a suggestion of what to do\n\n      var nextHandles = getUpdatedHandles(curr, activeHandleID, updateValue, reversed); // submit the candidate values\n\n      _this.submitUpdate(nextHandles);\n    };\n\n    _this.onMouseUp = function () {\n      var _assertThisInitialize17 = _assertThisInitialized(_this),\n          _assertThisInitialize18 = _assertThisInitialize17.state,\n          _assertThisInitialize19 = _assertThisInitialize18.handles,\n          handles = _assertThisInitialize19 === void 0 ? [] : _assertThisInitialize19,\n          activeHandleID = _assertThisInitialize18.activeHandleID,\n          _assertThisInitialize20 = _assertThisInitialize17.props,\n          _assertThisInitialize21 = _assertThisInitialize20.onChange,\n          onChange = _assertThisInitialize21 === void 0 ? noop : _assertThisInitialize21,\n          _assertThisInitialize22 = _assertThisInitialize20.onSlideEnd,\n          onSlideEnd = _assertThisInitialize22 === void 0 ? noop : _assertThisInitialize22;\n\n      onChange(handles.map(function (d) {\n        return d.val;\n      }));\n      onSlideEnd(handles.map(function (d) {\n        return d.val;\n      }), {\n        activeHandleID: activeHandleID\n      });\n\n      _this.setState({\n        activeHandleID: ''\n      });\n\n      if (isBrowser) {\n        document.removeEventListener('mousemove', _this.onMouseMove);\n        document.removeEventListener('mouseup', _this.onMouseUp);\n      }\n    };\n\n    _this.onTouchEnd = function () {\n      var _assertThisInitialize23 = _assertThisInitialized(_this),\n          _assertThisInitialize24 = _assertThisInitialize23.state,\n          handles = _assertThisInitialize24.handles,\n          activeHandleID = _assertThisInitialize24.activeHandleID,\n          _assertThisInitialize25 = _assertThisInitialize23.props,\n          _assertThisInitialize26 = _assertThisInitialize25.onChange,\n          onChange = _assertThisInitialize26 === void 0 ? noop : _assertThisInitialize26,\n          _assertThisInitialize27 = _assertThisInitialize25.onSlideEnd,\n          onSlideEnd = _assertThisInitialize27 === void 0 ? noop : _assertThisInitialize27;\n\n      onChange(handles.map(function (d) {\n        return d.val;\n      }));\n      onSlideEnd(handles.map(function (d) {\n        return d.val;\n      }), {\n        activeHandleID: activeHandleID\n      });\n\n      _this.setState({\n        activeHandleID: ''\n      });\n\n      if (isBrowser) {\n        document.removeEventListener('touchmove', _this.onTouchMove);\n        document.removeEventListener('touchend', _this.onTouchEnd);\n      }\n    };\n\n    return _this;\n  }\n\n  _createClass(Slider, [{\n    key: \"componentDidMount\",\n    value: function componentDidMount() {\n      var pixelToStep = this.state.pixelToStep;\n      var vertical = this.props.vertical; // @ts-ignore\n\n      pixelToStep.setDomain(getSliderDomain(this.slider.current, vertical));\n    }\n  }, {\n    key: \"componentWillUnmount\",\n    value: function componentWillUnmount() {\n      this.removeListeners();\n    }\n  }, {\n    key: \"removeListeners\",\n    value: function removeListeners() {\n      if (isBrowser) {\n        document.removeEventListener('mousemove', this.onMouseMove);\n        document.removeEventListener('mouseup', this.onMouseUp);\n        document.removeEventListener('touchmove', this.onTouchMove);\n        document.removeEventListener('touchend', this.onTouchEnd);\n      }\n    }\n  }, {\n    key: \"onStart\",\n    value: function onStart(e, handleID, isTouch) {\n      var handles = this.state.handles,\n          _this$props$onSlideSt = this.props.onSlideStart,\n          onSlideStart = _this$props$onSlideSt === void 0 ? noop : _this$props$onSlideSt;\n\n      if (!isTouch) {\n        e.preventDefault && e.preventDefault();\n      }\n\n      e.stopPropagation && e.stopPropagation();\n      var found = handles.find(function (value) {\n        return value.key === handleID;\n      });\n\n      if (found) {\n        this.setState({\n          activeHandleID: handleID\n        });\n        onSlideStart(handles.map(function (d) {\n          return d.val;\n        }), {\n          activeHandleID: handleID\n        });\n        isTouch ? this.addTouchEvents() : this.addMouseEvents();\n      } else {\n        this.setState({\n          activeHandleID: ''\n        });\n        this.handleRailAndTrackClicks(e, isTouch);\n      }\n    }\n  }, {\n    key: \"handleRailAndTrackClicks\",\n    value: function handleRailAndTrackClicks(e, isTouch) {\n      var _this2 = this;\n\n      var _this$state = this.state,\n          curr = _this$state.handles,\n          pixelToStep = _this$state.pixelToStep,\n          _this$props = this.props,\n          vertical = _this$props.vertical,\n          _this$props$reversed = _this$props.reversed,\n          reversed = _this$props$reversed === void 0 ? false : _this$props$reversed;\n      var slider = this.slider; // double check the dimensions of the slider\n      // @ts-ignore\n\n      pixelToStep.setDomain(getSliderDomain(slider.current, vertical)); // find the closest value (aka step) to the event location\n\n      var updateValue;\n\n      if (isTouch) {\n        // @ts-ignore\n        updateValue = pixelToStep.getValue(getTouchPosition(vertical, e));\n      } else {\n        // @ts-ignore\n        updateValue = pixelToStep.getValue(vertical ? e.clientY : e.pageX);\n      } // find the closest handle key\n\n\n      var updateKey = '';\n      var minDiff = Infinity;\n\n      for (var i = 0; i < curr.length; i++) {\n        var _curr$i = curr[i],\n            key = _curr$i.key,\n            val = _curr$i.val;\n        var diff = Math.abs(val - updateValue);\n\n        if (diff < minDiff) {\n          updateKey = key;\n          minDiff = diff;\n        }\n      } // generate a \"candidate\" set of values - a suggestion of what to do\n\n\n      var nextHandles = getUpdatedHandles(curr, updateKey, updateValue, reversed); // submit the candidate values\n\n      this.setState({\n        activeHandleID: updateKey\n      }, function () {\n        _this2.submitUpdate(nextHandles, true);\n\n        isTouch ? _this2.addTouchEvents() : _this2.addMouseEvents();\n      });\n    }\n  }, {\n    key: \"addMouseEvents\",\n    value: function addMouseEvents() {\n      if (isBrowser) {\n        document.addEventListener('mousemove', this.onMouseMove);\n        document.addEventListener('mouseup', this.onMouseUp);\n      }\n    }\n  }, {\n    key: \"addTouchEvents\",\n    value: function addTouchEvents() {\n      if (isBrowser) {\n        document.addEventListener('touchmove', this.onTouchMove);\n        document.addEventListener('touchend', this.onTouchEnd);\n      }\n    }\n  }, {\n    key: \"submitUpdate\",\n    value: function submitUpdate(next) {\n      var callOnChange = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n      var _this$props2 = this.props,\n          _this$props2$mode = _this$props2.mode,\n          mode = _this$props2$mode === void 0 ? 1 : _this$props2$mode,\n          _this$props2$step = _this$props2.step,\n          step = _this$props2$step === void 0 ? 0.1 : _this$props2$step,\n          _this$props2$onUpdate = _this$props2.onUpdate,\n          onUpdate = _this$props2$onUpdate === void 0 ? noop : _this$props2$onUpdate,\n          _this$props2$onChange = _this$props2.onChange,\n          onChange = _this$props2$onChange === void 0 ? noop : _this$props2$onChange,\n          _this$props2$reversed = _this$props2.reversed,\n          reversed = _this$props2$reversed === void 0 ? false : _this$props2$reversed; //@ts-ignore\n\n      var getValue = this.state.valueToStep.getValue;\n      this.setState(function (_ref2) {\n        var curr = _ref2.handles;\n        var handles = []; // given the current handles and a candidate set, decide what to do\n\n        if (typeof mode === 'function') {\n          handles = mode(curr, next, step, reversed, getValue);\n          warning(Array.isArray(handles), 'Custom mode function did not return an array.');\n        } else {\n          switch (mode) {\n            case 1:\n              handles = mode1(curr, next);\n              break;\n\n            case 2:\n              handles = mode2(curr, next);\n              break;\n\n            case 3:\n              handles = mode3(curr, next, step, reversed, getValue);\n              break;\n\n            default:\n              handles = next;\n              warning(false, \"\".concat(prfx, \" Invalid mode value.\"));\n          }\n        }\n\n        onUpdate(handles.map(function (d) {\n          return d.val;\n        }));\n\n        if (callOnChange) {\n          onChange(handles.map(function (d) {\n            return d.val;\n          }));\n        }\n\n        return {\n          handles: handles\n        };\n      });\n    }\n  }, {\n    key: \"render\",\n    value: function render() {\n      var _this3 = this;\n\n      var _this$state2 = this.state,\n          handles = _this$state2.handles,\n          valueToPerc = _this$state2.valueToPerc,\n          activeHandleID = _this$state2.activeHandleID,\n          _this$props3 = this.props,\n          className = _this$props3.className,\n          _this$props3$rootStyl = _this$props3.rootStyle,\n          rootStyle = _this$props3$rootStyl === void 0 ? {} : _this$props3$rootStyl,\n          _this$props3$rootProp = _this$props3.rootProps,\n          rootProps = _this$props3$rootProp === void 0 ? {} : _this$props3$rootProp,\n          _this$props3$componen = _this$props3.component,\n          Comp = _this$props3$componen === void 0 ? 'div' : _this$props3$componen,\n          _this$props3$disabled = _this$props3.disabled,\n          disabled = _this$props3$disabled === void 0 ? false : _this$props3$disabled,\n          _this$props3$flatten = _this$props3.flatten,\n          flatten = _this$props3$flatten === void 0 ? false : _this$props3$flatten;\n      var mappedHandles = handles.map(function (_ref3) {\n        var key = _ref3.key,\n            val = _ref3.val;\n        // @ts-ignore\n        return {\n          id: key,\n          value: val,\n          percent: valueToPerc.getValue(val)\n        };\n      });\n      var children = React.Children.map(this.props.children, function (child) {\n        if (isRCSComponent(child) === true) {\n          return /*#__PURE__*/React.cloneElement(child, {\n            scale: valueToPerc,\n            handles: mappedHandles,\n            activeHandleID: activeHandleID,\n            getEventData: _this3.getEventData,\n            emitKeyboard: disabled ? noop : _this3.onKeyDown,\n            emitMouse: disabled ? noop : _this3.onMouseDown,\n            emitTouch: disabled ? noop : _this3.onTouchStart\n          });\n        } else {\n          return child;\n        }\n      });\n      return flatten ? /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Comp, _objectSpread2(_objectSpread2({}, rootProps), {}, {\n        style: rootStyle,\n        className: className,\n        ref: this.slider\n      })), children) : /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Comp, _objectSpread2(_objectSpread2({}, rootProps), {}, {\n        style: rootStyle,\n        className: className,\n        ref: this.slider\n      }), children));\n    }\n  }], [{\n    key: \"getDerivedStateFromProps\",\n    value: function getDerivedStateFromProps(nextProps, prevState) {\n      var _nextProps$step = nextProps.step,\n          step = _nextProps$step === void 0 ? 0.1 : _nextProps$step,\n          values = nextProps.values,\n          _nextProps$domain = nextProps.domain,\n          domain = _nextProps$domain === void 0 ? defaultDomain : _nextProps$domain,\n          _nextProps$reversed = nextProps.reversed,\n          reversed = _nextProps$reversed === void 0 ? false : _nextProps$reversed,\n          _nextProps$onUpdate = nextProps.onUpdate,\n          onUpdate = _nextProps$onUpdate === void 0 ? noop : _nextProps$onUpdate,\n          _nextProps$onChange = nextProps.onChange,\n          onChange = _nextProps$onChange === void 0 ? noop : _nextProps$onChange,\n          _nextProps$warnOnChan = nextProps.warnOnChanges,\n          warnOnChanges = _nextProps$warnOnChan === void 0 ? false : _nextProps$warnOnChan;\n      var valueToPerc = prevState.valueToPerc;\n      var valueToStep = prevState.valueToStep;\n      var pixelToStep = prevState.pixelToStep;\n      var nextState = {};\n\n      if (!valueToPerc || !valueToStep || !pixelToStep) {\n        valueToPerc = new LinearScale();\n        valueToStep = new DiscreteScale();\n        pixelToStep = new DiscreteScale();\n        nextState.valueToPerc = valueToPerc;\n        nextState.valueToStep = valueToStep;\n        nextState.pixelToStep = pixelToStep;\n      }\n\n      if (prevState.domain === defaultDomain || prevState.step === null || prevState.domain === null || prevState.reversed === null || step !== prevState.step || domain[0] !== prevState.domain[0] || domain[1] !== prevState.domain[1] || reversed !== prevState.reversed) {\n        var _domain = _slicedToArray(domain, 2),\n            min = _domain[0],\n            max = _domain[1];\n\n        valueToStep.setStep(step).setRange([min, max]).setDomain([min, max]);\n\n        if (reversed === true) {\n          valueToPerc.setDomain([min, max]).setRange([100, 0]);\n          pixelToStep.setStep(step).setRange([max, min]);\n        } else {\n          valueToPerc.setDomain([min, max]).setRange([0, 100]);\n          pixelToStep.setStep(step).setRange([min, max]);\n        }\n\n        warning(max > min, \"\".concat(prfx, \" Max must be greater than min (even if reversed). Max is \").concat(max, \". Min is \").concat(min, \".\"));\n\n        var _getHandles = getHandles(values || prevState.values, reversed, valueToStep, warnOnChanges),\n            handles = _getHandles.handles,\n            changes = _getHandles.changes;\n\n        if (changes || values === undefined || values === prevState.values) {\n          onUpdate(handles.map(function (d) {\n            return d.val;\n          }));\n          onChange(handles.map(function (d) {\n            return d.val;\n          }));\n        }\n\n        nextState.step = step;\n        nextState.values = values;\n        nextState.domain = domain === defaultDomain ? _toConsumableArray(domain) : domain;\n        nextState.handles = handles;\n        nextState.reversed = reversed;\n      } else if (!equal(values, prevState.values)) {\n        var _getHandles2 = getHandles(values, reversed, valueToStep, warnOnChanges),\n            _handles = _getHandles2.handles,\n            _changes = _getHandles2.changes;\n\n        if (_changes) {\n          onUpdate(_handles.map(function (d) {\n            return d.val;\n          }));\n          onChange(_handles.map(function (d) {\n            return d.val;\n          }));\n        }\n\n        nextState.values = values;\n        nextState.handles = _handles;\n      }\n\n      if (Object.keys(nextState).length) {\n        return nextState;\n      }\n\n      return null;\n    }\n  }]);\n\n  return Slider;\n}(PureComponent);\n\nexport { Handles, Rail, Slider, Ticks, Tracks, mode1, mode2, mode3 };\n//# sourceMappingURL=rcs.esm.js.map\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nfunction _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; }\n\nvar React = require('react');\nvar React__default = _interopDefault(React);\n\nvar UAParser = require('ua-parser-js/dist/ua-parser.min');\n\nvar ClientUAInstance = new UAParser();\nvar browser = ClientUAInstance.getBrowser();\nvar cpu = ClientUAInstance.getCPU();\nvar device = ClientUAInstance.getDevice();\nvar engine = ClientUAInstance.getEngine();\nvar os = ClientUAInstance.getOS();\nvar ua = ClientUAInstance.getUA();\nvar setUa = function setUa(userAgentString) {\n  return ClientUAInstance.setUA(userAgentString);\n};\nvar parseUserAgent = function parseUserAgent(userAgent) {\n  if (!userAgent) {\n    console.error('No userAgent string was provided');\n    return;\n  }\n\n  var UserAgentInstance = new UAParser(userAgent);\n  return {\n    UA: UserAgentInstance,\n    browser: UserAgentInstance.getBrowser(),\n    cpu: UserAgentInstance.getCPU(),\n    device: UserAgentInstance.getDevice(),\n    engine: UserAgentInstance.getEngine(),\n    os: UserAgentInstance.getOS(),\n    ua: UserAgentInstance.getUA(),\n    setUserAgent: function setUserAgent(userAgentString) {\n      return UserAgentInstance.setUA(userAgentString);\n    }\n  };\n};\n\nvar UAHelper = /*#__PURE__*/Object.freeze({\n  ClientUAInstance: ClientUAInstance,\n  browser: browser,\n  cpu: cpu,\n  device: device,\n  engine: engine,\n  os: os,\n  ua: ua,\n  setUa: setUa,\n  parseUserAgent: parseUserAgent\n});\n\nfunction ownKeys(object, enumerableOnly) {\n  var keys = Object.keys(object);\n\n  if (Object.getOwnPropertySymbols) {\n    var symbols = Object.getOwnPropertySymbols(object);\n\n    if (enumerableOnly) {\n      symbols = symbols.filter(function (sym) {\n        return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n      });\n    }\n\n    keys.push.apply(keys, symbols);\n  }\n\n  return keys;\n}\n\nfunction _objectSpread2(target) {\n  for (var i = 1; i < arguments.length; i++) {\n    var source = arguments[i] != null ? arguments[i] : {};\n\n    if (i % 2) {\n      ownKeys(Object(source), true).forEach(function (key) {\n        _defineProperty(target, key, source[key]);\n      });\n    } else if (Object.getOwnPropertyDescriptors) {\n      Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n    } else {\n      ownKeys(Object(source)).forEach(function (key) {\n        Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n      });\n    }\n  }\n\n  return target;\n}\n\nfunction _typeof(obj) {\n  \"@babel/helpers - typeof\";\n\n  if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n    _typeof = function (obj) {\n      return typeof obj;\n    };\n  } else {\n    _typeof = function (obj) {\n      return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n    };\n  }\n\n  return _typeof(obj);\n}\n\nfunction _classCallCheck(instance, Constructor) {\n  if (!(instance instanceof Constructor)) {\n    throw new TypeError(\"Cannot call a class as a function\");\n  }\n}\n\nfunction _defineProperties(target, props) {\n  for (var i = 0; i < props.length; i++) {\n    var descriptor = props[i];\n    descriptor.enumerable = descriptor.enumerable || false;\n    descriptor.configurable = true;\n    if (\"value\" in descriptor) descriptor.writable = true;\n    Object.defineProperty(target, descriptor.key, descriptor);\n  }\n}\n\nfunction _createClass(Constructor, protoProps, staticProps) {\n  if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n  if (staticProps) _defineProperties(Constructor, staticProps);\n  return Constructor;\n}\n\nfunction _defineProperty(obj, key, value) {\n  if (key in obj) {\n    Object.defineProperty(obj, key, {\n      value: value,\n      enumerable: true,\n      configurable: true,\n      writable: true\n    });\n  } else {\n    obj[key] = value;\n  }\n\n  return obj;\n}\n\nfunction _extends() {\n  _extends = Object.assign || function (target) {\n    for (var i = 1; i < arguments.length; i++) {\n      var source = arguments[i];\n\n      for (var key in source) {\n        if (Object.prototype.hasOwnProperty.call(source, key)) {\n          target[key] = source[key];\n        }\n      }\n    }\n\n    return target;\n  };\n\n  return _extends.apply(this, arguments);\n}\n\nfunction _inherits(subClass, superClass) {\n  if (typeof superClass !== \"function\" && superClass !== null) {\n    throw new TypeError(\"Super expression must either be null or a function\");\n  }\n\n  subClass.prototype = Object.create(superClass && superClass.prototype, {\n    constructor: {\n      value: subClass,\n      writable: true,\n      configurable: true\n    }\n  });\n  if (superClass) _setPrototypeOf(subClass, superClass);\n}\n\nfunction _getPrototypeOf(o) {\n  _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n    return o.__proto__ || Object.getPrototypeOf(o);\n  };\n  return _getPrototypeOf(o);\n}\n\nfunction _setPrototypeOf(o, p) {\n  _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n    o.__proto__ = p;\n    return o;\n  };\n\n  return _setPrototypeOf(o, p);\n}\n\nfunction _objectWithoutPropertiesLoose(source, excluded) {\n  if (source == null) return {};\n  var target = {};\n  var sourceKeys = Object.keys(source);\n  var key, i;\n\n  for (i = 0; i < sourceKeys.length; i++) {\n    key = sourceKeys[i];\n    if (excluded.indexOf(key) >= 0) continue;\n    target[key] = source[key];\n  }\n\n  return target;\n}\n\nfunction _objectWithoutProperties(source, excluded) {\n  if (source == null) return {};\n\n  var target = _objectWithoutPropertiesLoose(source, excluded);\n\n  var key, i;\n\n  if (Object.getOwnPropertySymbols) {\n    var sourceSymbolKeys = Object.getOwnPropertySymbols(source);\n\n    for (i = 0; i < sourceSymbolKeys.length; i++) {\n      key = sourceSymbolKeys[i];\n      if (excluded.indexOf(key) >= 0) continue;\n      if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;\n      target[key] = source[key];\n    }\n  }\n\n  return target;\n}\n\nfunction _assertThisInitialized(self) {\n  if (self === void 0) {\n    throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n  }\n\n  return self;\n}\n\nfunction _possibleConstructorReturn(self, call) {\n  if (call && (typeof call === \"object\" || typeof call === \"function\")) {\n    return call;\n  } else if (call !== void 0) {\n    throw new TypeError(\"Derived constructors may only return object or undefined\");\n  }\n\n  return _assertThisInitialized(self);\n}\n\nfunction _slicedToArray(arr, i) {\n  return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest();\n}\n\nfunction _arrayWithHoles(arr) {\n  if (Array.isArray(arr)) return arr;\n}\n\nfunction _iterableToArrayLimit(arr, i) {\n  var _i = arr == null ? null : typeof Symbol !== \"undefined\" && arr[Symbol.iterator] || arr[\"@@iterator\"];\n\n  if (_i == null) return;\n  var _arr = [];\n  var _n = true;\n  var _d = false;\n\n  var _s, _e;\n\n  try {\n    for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) {\n      _arr.push(_s.value);\n\n      if (i && _arr.length === i) break;\n    }\n  } catch (err) {\n    _d = true;\n    _e = err;\n  } finally {\n    try {\n      if (!_n && _i[\"return\"] != null) _i[\"return\"]();\n    } finally {\n      if (_d) throw _e;\n    }\n  }\n\n  return _arr;\n}\n\nfunction _unsupportedIterableToArray(o, minLen) {\n  if (!o) return;\n  if (typeof o === \"string\") return _arrayLikeToArray(o, minLen);\n  var n = Object.prototype.toString.call(o).slice(8, -1);\n  if (n === \"Object\" && o.constructor) n = o.constructor.name;\n  if (n === \"Map\" || n === \"Set\") return Array.from(o);\n  if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);\n}\n\nfunction _arrayLikeToArray(arr, len) {\n  if (len == null || len > arr.length) len = arr.length;\n\n  for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];\n\n  return arr2;\n}\n\nfunction _nonIterableRest() {\n  throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\n\nvar DeviceTypes = {\n  Mobile: 'mobile',\n  Tablet: 'tablet',\n  SmartTv: 'smarttv',\n  Console: 'console',\n  Wearable: 'wearable',\n  Embedded: 'embedded',\n  Browser: undefined\n};\nvar BrowserTypes = {\n  Chrome: 'Chrome',\n  Firefox: 'Firefox',\n  Opera: 'Opera',\n  Yandex: 'Yandex',\n  Safari: 'Safari',\n  InternetExplorer: 'Internet Explorer',\n  Edge: 'Edge',\n  Chromium: 'Chromium',\n  Ie: 'IE',\n  MobileSafari: 'Mobile Safari',\n  EdgeChromium: 'Edge Chromium',\n  MIUI: 'MIUI Browser',\n  SamsungBrowser: 'Samsung Browser'\n};\nvar OsTypes = {\n  IOS: 'iOS',\n  Android: 'Android',\n  WindowsPhone: 'Windows Phone',\n  Windows: 'Windows',\n  MAC_OS: 'Mac OS'\n};\nvar InitialDeviceTypes = {\n  isMobile: false,\n  isTablet: false,\n  isBrowser: false,\n  isSmartTV: false,\n  isConsole: false,\n  isWearable: false\n};\n\nvar checkDeviceType = function checkDeviceType(type) {\n  switch (type) {\n    case DeviceTypes.Mobile:\n      return {\n        isMobile: true\n      };\n\n    case DeviceTypes.Tablet:\n      return {\n        isTablet: true\n      };\n\n    case DeviceTypes.SmartTv:\n      return {\n        isSmartTV: true\n      };\n\n    case DeviceTypes.Console:\n      return {\n        isConsole: true\n      };\n\n    case DeviceTypes.Wearable:\n      return {\n        isWearable: true\n      };\n\n    case DeviceTypes.Browser:\n      return {\n        isBrowser: true\n      };\n\n    case DeviceTypes.Embedded:\n      return {\n        isEmbedded: true\n      };\n\n    default:\n      return InitialDeviceTypes;\n  }\n};\nvar setUserAgent = function setUserAgent(userAgent) {\n  return setUa(userAgent);\n};\nvar setDefaults = function setDefaults(p) {\n  var d = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'none';\n  return p ? p : d;\n};\nvar getNavigatorInstance = function getNavigatorInstance() {\n  if (typeof window !== 'undefined') {\n    if (window.navigator || navigator) {\n      return window.navigator || navigator;\n    }\n  }\n\n  return false;\n};\nvar isIOS13Check = function isIOS13Check(type) {\n  var nav = getNavigatorInstance();\n  return nav && nav.platform && (nav.platform.indexOf(type) !== -1 || nav.platform === 'MacIntel' && nav.maxTouchPoints > 1 && !window.MSStream);\n};\n\nvar browserPayload = function browserPayload(isBrowser, browser, engine, os, ua) {\n  return {\n    isBrowser: isBrowser,\n    browserMajorVersion: setDefaults(browser.major),\n    browserFullVersion: setDefaults(browser.version),\n    browserName: setDefaults(browser.name),\n    engineName: setDefaults(engine.name),\n    engineVersion: setDefaults(engine.version),\n    osName: setDefaults(os.name),\n    osVersion: setDefaults(os.version),\n    userAgent: setDefaults(ua)\n  };\n};\nvar mobilePayload = function mobilePayload(type, device, os, ua) {\n  return _objectSpread2({}, type, {\n    vendor: setDefaults(device.vendor),\n    model: setDefaults(device.model),\n    os: setDefaults(os.name),\n    osVersion: setDefaults(os.version),\n    ua: setDefaults(ua)\n  });\n};\nvar smartTvPayload = function smartTvPayload(isSmartTV, engine, os, ua) {\n  return {\n    isSmartTV: isSmartTV,\n    engineName: setDefaults(engine.name),\n    engineVersion: setDefaults(engine.version),\n    osName: setDefaults(os.name),\n    osVersion: setDefaults(os.version),\n    userAgent: setDefaults(ua)\n  };\n};\nvar consolePayload = function consolePayload(isConsole, engine, os, ua) {\n  return {\n    isConsole: isConsole,\n    engineName: setDefaults(engine.name),\n    engineVersion: setDefaults(engine.version),\n    osName: setDefaults(os.name),\n    osVersion: setDefaults(os.version),\n    userAgent: setDefaults(ua)\n  };\n};\nvar wearablePayload = function wearablePayload(isWearable, engine, os, ua) {\n  return {\n    isWearable: isWearable,\n    engineName: setDefaults(engine.name),\n    engineVersion: setDefaults(engine.version),\n    osName: setDefaults(os.name),\n    osVersion: setDefaults(os.version),\n    userAgent: setDefaults(ua)\n  };\n};\nvar embeddedPayload = function embeddedPayload(isEmbedded, device, engine, os, ua) {\n  return {\n    isEmbedded: isEmbedded,\n    vendor: setDefaults(device.vendor),\n    model: setDefaults(device.model),\n    engineName: setDefaults(engine.name),\n    engineVersion: setDefaults(engine.version),\n    osName: setDefaults(os.name),\n    osVersion: setDefaults(os.version),\n    userAgent: setDefaults(ua)\n  };\n};\n\nfunction deviceDetect(userAgent) {\n  var _ref = userAgent ? parseUserAgent(userAgent) : UAHelper,\n      device = _ref.device,\n      browser = _ref.browser,\n      engine = _ref.engine,\n      os = _ref.os,\n      ua = _ref.ua;\n\n  var type = checkDeviceType(device.type);\n  var isBrowser = type.isBrowser,\n      isMobile = type.isMobile,\n      isTablet = type.isTablet,\n      isSmartTV = type.isSmartTV,\n      isConsole = type.isConsole,\n      isWearable = type.isWearable,\n      isEmbedded = type.isEmbedded;\n\n  if (isBrowser) {\n    return browserPayload(isBrowser, browser, engine, os, ua);\n  }\n\n  if (isSmartTV) {\n    return smartTvPayload(isSmartTV, engine, os, ua);\n  }\n\n  if (isConsole) {\n    return consolePayload(isConsole, engine, os, ua);\n  }\n\n  if (isMobile) {\n    return mobilePayload(type, device, os, ua);\n  }\n\n  if (isTablet) {\n    return mobilePayload(type, device, os, ua);\n  }\n\n  if (isWearable) {\n    return wearablePayload(isWearable, engine, os, ua);\n  }\n\n  if (isEmbedded) {\n    return embeddedPayload(isEmbedded, device, engine, os, ua);\n  }\n}\n\nvar isMobileType = function isMobileType(_ref) {\n  var type = _ref.type;\n  return type === DeviceTypes.Mobile;\n};\nvar isTabletType = function isTabletType(_ref2) {\n  var type = _ref2.type;\n  return type === DeviceTypes.Tablet;\n};\nvar isMobileAndTabletType = function isMobileAndTabletType(_ref3) {\n  var type = _ref3.type;\n  return type === DeviceTypes.Mobile || type === DeviceTypes.Tablet;\n};\nvar isSmartTVType = function isSmartTVType(_ref4) {\n  var type = _ref4.type;\n  return type === DeviceTypes.SmartTv;\n};\nvar isBrowserType = function isBrowserType(_ref5) {\n  var type = _ref5.type;\n  return type === DeviceTypes.Browser;\n};\nvar isWearableType = function isWearableType(_ref6) {\n  var type = _ref6.type;\n  return type === DeviceTypes.Wearable;\n};\nvar isConsoleType = function isConsoleType(_ref7) {\n  var type = _ref7.type;\n  return type === DeviceTypes.Console;\n};\nvar isEmbeddedType = function isEmbeddedType(_ref8) {\n  var type = _ref8.type;\n  return type === DeviceTypes.Embedded;\n};\nvar getMobileVendor = function getMobileVendor(_ref9) {\n  var vendor = _ref9.vendor;\n  return setDefaults(vendor);\n};\nvar getMobileModel = function getMobileModel(_ref10) {\n  var model = _ref10.model;\n  return setDefaults(model);\n};\nvar getDeviceType = function getDeviceType(_ref11) {\n  var type = _ref11.type;\n  return setDefaults(type, 'browser');\n}; // os types\n\nvar isAndroidType = function isAndroidType(_ref12) {\n  var name = _ref12.name;\n  return name === OsTypes.Android;\n};\nvar isWindowsType = function isWindowsType(_ref13) {\n  var name = _ref13.name;\n  return name === OsTypes.Windows;\n};\nvar isMacOsType = function isMacOsType(_ref14) {\n  var name = _ref14.name;\n  return name === OsTypes.MAC_OS;\n};\nvar isWinPhoneType = function isWinPhoneType(_ref15) {\n  var name = _ref15.name;\n  return name === OsTypes.WindowsPhone;\n};\nvar isIOSType = function isIOSType(_ref16) {\n  var name = _ref16.name;\n  return name === OsTypes.IOS;\n};\nvar getOsVersion = function getOsVersion(_ref17) {\n  var version = _ref17.version;\n  return setDefaults(version);\n};\nvar getOsName = function getOsName(_ref18) {\n  var name = _ref18.name;\n  return setDefaults(name);\n}; // browser types\n\nvar isChromeType = function isChromeType(_ref19) {\n  var name = _ref19.name;\n  return name === BrowserTypes.Chrome;\n};\nvar isFirefoxType = function isFirefoxType(_ref20) {\n  var name = _ref20.name;\n  return name === BrowserTypes.Firefox;\n};\nvar isChromiumType = function isChromiumType(_ref21) {\n  var name = _ref21.name;\n  return name === BrowserTypes.Chromium;\n};\nvar isEdgeType = function isEdgeType(_ref22) {\n  var name = _ref22.name;\n  return name === BrowserTypes.Edge;\n};\nvar isYandexType = function isYandexType(_ref23) {\n  var name = _ref23.name;\n  return name === BrowserTypes.Yandex;\n};\nvar isSafariType = function isSafariType(_ref24) {\n  var name = _ref24.name;\n  return name === BrowserTypes.Safari || name === BrowserTypes.MobileSafari;\n};\nvar isMobileSafariType = function isMobileSafariType(_ref25) {\n  var name = _ref25.name;\n  return name === BrowserTypes.MobileSafari;\n};\nvar isOperaType = function isOperaType(_ref26) {\n  var name = _ref26.name;\n  return name === BrowserTypes.Opera;\n};\nvar isIEType = function isIEType(_ref27) {\n  var name = _ref27.name;\n  return name === BrowserTypes.InternetExplorer || name === BrowserTypes.Ie;\n};\nvar isMIUIType = function isMIUIType(_ref28) {\n  var name = _ref28.name;\n  return name === BrowserTypes.MIUI;\n};\nvar isSamsungBrowserType = function isSamsungBrowserType(_ref29) {\n  var name = _ref29.name;\n  return name === BrowserTypes.SamsungBrowser;\n};\nvar getBrowserFullVersion = function getBrowserFullVersion(_ref30) {\n  var version = _ref30.version;\n  return setDefaults(version);\n};\nvar getBrowserVersion = function getBrowserVersion(_ref31) {\n  var major = _ref31.major;\n  return setDefaults(major);\n};\nvar getBrowserName = function getBrowserName(_ref32) {\n  var name = _ref32.name;\n  return setDefaults(name);\n}; // engine types\n\nvar getEngineName = function getEngineName(_ref33) {\n  var name = _ref33.name;\n  return setDefaults(name);\n};\nvar getEngineVersion = function getEngineVersion(_ref34) {\n  var version = _ref34.version;\n  return setDefaults(version);\n};\nvar isElectronType = function isElectronType() {\n  var nav = getNavigatorInstance();\n  var ua = nav && nav.userAgent && nav.userAgent.toLowerCase();\n  return typeof ua === 'string' ? /electron/.test(ua) : false;\n};\nvar isEdgeChromiumType = function isEdgeChromiumType(ua) {\n  return typeof ua === 'string' && ua.indexOf('Edg/') !== -1;\n};\nvar getIOS13 = function getIOS13() {\n  var nav = getNavigatorInstance();\n  return nav && (/iPad|iPhone|iPod/.test(nav.platform) || nav.platform === 'MacIntel' && nav.maxTouchPoints > 1) && !window.MSStream;\n};\nvar getIPad13 = function getIPad13() {\n  return isIOS13Check('iPad');\n};\nvar getIphone13 = function getIphone13() {\n  return isIOS13Check('iPhone');\n};\nvar getIPod13 = function getIPod13() {\n  return isIOS13Check('iPod');\n};\nvar getUseragent = function getUseragent(userAg) {\n  return setDefaults(userAg);\n};\n\nfunction buildSelectorsObject(options) {\n  var _ref = options ? options : UAHelper,\n      device = _ref.device,\n      browser = _ref.browser,\n      os = _ref.os,\n      engine = _ref.engine,\n      ua = _ref.ua;\n\n  return {\n    isSmartTV: isSmartTVType(device),\n    isConsole: isConsoleType(device),\n    isWearable: isWearableType(device),\n    isEmbedded: isEmbeddedType(device),\n    isMobileSafari: isMobileSafariType(browser) || getIPad13(),\n    isChromium: isChromiumType(browser),\n    isMobile: isMobileAndTabletType(device) || getIPad13(),\n    isMobileOnly: isMobileType(device),\n    isTablet: isTabletType(device) || getIPad13(),\n    isBrowser: isBrowserType(device),\n    isDesktop: isBrowserType(device),\n    isAndroid: isAndroidType(os),\n    isWinPhone: isWinPhoneType(os),\n    isIOS: isIOSType(os) || getIPad13(),\n    isChrome: isChromeType(browser),\n    isFirefox: isFirefoxType(browser),\n    isSafari: isSafariType(browser),\n    isOpera: isOperaType(browser),\n    isIE: isIEType(browser),\n    osVersion: getOsVersion(os),\n    osName: getOsName(os),\n    fullBrowserVersion: getBrowserFullVersion(browser),\n    browserVersion: getBrowserVersion(browser),\n    browserName: getBrowserName(browser),\n    mobileVendor: getMobileVendor(device),\n    mobileModel: getMobileModel(device),\n    engineName: getEngineName(engine),\n    engineVersion: getEngineVersion(engine),\n    getUA: getUseragent(ua),\n    isEdge: isEdgeType(browser) || isEdgeChromiumType(ua),\n    isYandex: isYandexType(browser),\n    deviceType: getDeviceType(device),\n    isIOS13: getIOS13(),\n    isIPad13: getIPad13(),\n    isIPhone13: getIphone13(),\n    isIPod13: getIPod13(),\n    isElectron: isElectronType(),\n    isEdgeChromium: isEdgeChromiumType(ua),\n    isLegacyEdge: isEdgeType(browser) && !isEdgeChromiumType(ua),\n    isWindows: isWindowsType(os),\n    isMacOs: isMacOsType(os),\n    isMIUI: isMIUIType(browser),\n    isSamsungBrowser: isSamsungBrowserType(browser)\n  };\n}\n\nvar isSmartTV = isSmartTVType(device);\nvar isConsole = isConsoleType(device);\nvar isWearable = isWearableType(device);\nvar isEmbedded = isEmbeddedType(device);\nvar isMobileSafari = isMobileSafariType(browser) || getIPad13();\nvar isChromium = isChromiumType(browser);\nvar isMobile = isMobileAndTabletType(device) || getIPad13();\nvar isMobileOnly = isMobileType(device);\nvar isTablet = isTabletType(device) || getIPad13();\nvar isBrowser = isBrowserType(device);\nvar isDesktop = isBrowserType(device);\nvar isAndroid = isAndroidType(os);\nvar isWinPhone = isWinPhoneType(os);\nvar isIOS = isIOSType(os) || getIPad13();\nvar isChrome = isChromeType(browser);\nvar isFirefox = isFirefoxType(browser);\nvar isSafari = isSafariType(browser);\nvar isOpera = isOperaType(browser);\nvar isIE = isIEType(browser);\nvar osVersion = getOsVersion(os);\nvar osName = getOsName(os);\nvar fullBrowserVersion = getBrowserFullVersion(browser);\nvar browserVersion = getBrowserVersion(browser);\nvar browserName = getBrowserName(browser);\nvar mobileVendor = getMobileVendor(device);\nvar mobileModel = getMobileModel(device);\nvar engineName = getEngineName(engine);\nvar engineVersion = getEngineVersion(engine);\nvar getUA = getUseragent(ua);\nvar isEdge = isEdgeType(browser) || isEdgeChromiumType(ua);\nvar isYandex = isYandexType(browser);\nvar deviceType = getDeviceType(device);\nvar isIOS13 = getIOS13();\nvar isIPad13 = getIPad13();\nvar isIPhone13 = getIphone13();\nvar isIPod13 = getIPod13();\nvar isElectron = isElectronType();\nvar isEdgeChromium = isEdgeChromiumType(ua);\nvar isLegacyEdge = isEdgeType(browser) && !isEdgeChromiumType(ua);\nvar isWindows = isWindowsType(os);\nvar isMacOs = isMacOsType(os);\nvar isMIUI = isMIUIType(browser);\nvar isSamsungBrowser = isSamsungBrowserType(browser);\nvar getSelectorsByUserAgent = function getSelectorsByUserAgent(userAgent) {\n  if (!userAgent || typeof userAgent !== 'string') {\n    console.error('No valid user agent string was provided');\n    return;\n  }\n\n  var _UAHelper$parseUserAg = parseUserAgent(userAgent),\n      device = _UAHelper$parseUserAg.device,\n      browser = _UAHelper$parseUserAg.browser,\n      os = _UAHelper$parseUserAg.os,\n      engine = _UAHelper$parseUserAg.engine,\n      ua = _UAHelper$parseUserAg.ua;\n\n  return buildSelectorsObject({\n    device: device,\n    browser: browser,\n    os: os,\n    engine: engine,\n    ua: ua\n  });\n};\n\nvar AndroidView = function AndroidView(_ref) {\n  var renderWithFragment = _ref.renderWithFragment,\n      children = _ref.children,\n      props = _objectWithoutProperties(_ref, [\"renderWithFragment\", \"children\"]);\n\n  return isAndroid ? renderWithFragment ? React__default.createElement(React.Fragment, null, children) : React__default.createElement(\"div\", props, children) : null;\n};\nvar BrowserView = function BrowserView(_ref2) {\n  var renderWithFragment = _ref2.renderWithFragment,\n      children = _ref2.children,\n      props = _objectWithoutProperties(_ref2, [\"renderWithFragment\", \"children\"]);\n\n  return isBrowser ? renderWithFragment ? React__default.createElement(React.Fragment, null, children) : React__default.createElement(\"div\", props, children) : null;\n};\nvar IEView = function IEView(_ref3) {\n  var renderWithFragment = _ref3.renderWithFragment,\n      children = _ref3.children,\n      props = _objectWithoutProperties(_ref3, [\"renderWithFragment\", \"children\"]);\n\n  return isIE ? renderWithFragment ? React__default.createElement(React.Fragment, null, children) : React__default.createElement(\"div\", props, children) : null;\n};\nvar IOSView = function IOSView(_ref4) {\n  var renderWithFragment = _ref4.renderWithFragment,\n      children = _ref4.children,\n      props = _objectWithoutProperties(_ref4, [\"renderWithFragment\", \"children\"]);\n\n  return isIOS ? renderWithFragment ? React__default.createElement(React.Fragment, null, children) : React__default.createElement(\"div\", props, children) : null;\n};\nvar MobileView = function MobileView(_ref5) {\n  var renderWithFragment = _ref5.renderWithFragment,\n      children = _ref5.children,\n      props = _objectWithoutProperties(_ref5, [\"renderWithFragment\", \"children\"]);\n\n  return isMobile ? renderWithFragment ? React__default.createElement(React.Fragment, null, children) : React__default.createElement(\"div\", props, children) : null;\n};\nvar TabletView = function TabletView(_ref6) {\n  var renderWithFragment = _ref6.renderWithFragment,\n      children = _ref6.children,\n      props = _objectWithoutProperties(_ref6, [\"renderWithFragment\", \"children\"]);\n\n  return isTablet ? renderWithFragment ? React__default.createElement(React.Fragment, null, children) : React__default.createElement(\"div\", props, children) : null;\n};\nvar WinPhoneView = function WinPhoneView(_ref7) {\n  var renderWithFragment = _ref7.renderWithFragment,\n      children = _ref7.children,\n      props = _objectWithoutProperties(_ref7, [\"renderWithFragment\", \"children\"]);\n\n  return isWinPhone ? renderWithFragment ? React__default.createElement(React.Fragment, null, children) : React__default.createElement(\"div\", props, children) : null;\n};\nvar MobileOnlyView = function MobileOnlyView(_ref8) {\n  var renderWithFragment = _ref8.renderWithFragment,\n      children = _ref8.children,\n      viewClassName = _ref8.viewClassName,\n      style = _ref8.style,\n      props = _objectWithoutProperties(_ref8, [\"renderWithFragment\", \"children\", \"viewClassName\", \"style\"]);\n\n  return isMobileOnly ? renderWithFragment ? React__default.createElement(React.Fragment, null, children) : React__default.createElement(\"div\", props, children) : null;\n};\nvar SmartTVView = function SmartTVView(_ref9) {\n  var renderWithFragment = _ref9.renderWithFragment,\n      children = _ref9.children,\n      props = _objectWithoutProperties(_ref9, [\"renderWithFragment\", \"children\"]);\n\n  return isSmartTV ? renderWithFragment ? React__default.createElement(React.Fragment, null, children) : React__default.createElement(\"div\", props, children) : null;\n};\nvar ConsoleView = function ConsoleView(_ref10) {\n  var renderWithFragment = _ref10.renderWithFragment,\n      children = _ref10.children,\n      props = _objectWithoutProperties(_ref10, [\"renderWithFragment\", \"children\"]);\n\n  return isConsole ? renderWithFragment ? React__default.createElement(React.Fragment, null, children) : React__default.createElement(\"div\", props, children) : null;\n};\nvar WearableView = function WearableView(_ref11) {\n  var renderWithFragment = _ref11.renderWithFragment,\n      children = _ref11.children,\n      props = _objectWithoutProperties(_ref11, [\"renderWithFragment\", \"children\"]);\n\n  return isWearable ? renderWithFragment ? React__default.createElement(React.Fragment, null, children) : React__default.createElement(\"div\", props, children) : null;\n};\nvar CustomView = function CustomView(_ref12) {\n  var renderWithFragment = _ref12.renderWithFragment,\n      children = _ref12.children,\n      viewClassName = _ref12.viewClassName,\n      style = _ref12.style,\n      condition = _ref12.condition,\n      props = _objectWithoutProperties(_ref12, [\"renderWithFragment\", \"children\", \"viewClassName\", \"style\", \"condition\"]);\n\n  return condition ? renderWithFragment ? React__default.createElement(React.Fragment, null, children) : React__default.createElement(\"div\", props, children) : null;\n};\n\nfunction withOrientationChange(WrappedComponent) {\n  return /*#__PURE__*/function (_React$Component) {\n    _inherits(_class, _React$Component);\n\n    function _class(props) {\n      var _this;\n\n      _classCallCheck(this, _class);\n\n      _this = _possibleConstructorReturn(this, _getPrototypeOf(_class).call(this, props));\n      _this.isEventListenerAdded = false;\n      _this.handleOrientationChange = _this.handleOrientationChange.bind(_assertThisInitialized(_this));\n      _this.onOrientationChange = _this.onOrientationChange.bind(_assertThisInitialized(_this));\n      _this.onPageLoad = _this.onPageLoad.bind(_assertThisInitialized(_this));\n      _this.state = {\n        isLandscape: false,\n        isPortrait: false\n      };\n      return _this;\n    }\n\n    _createClass(_class, [{\n      key: \"handleOrientationChange\",\n      value: function handleOrientationChange() {\n        if (!this.isEventListenerAdded) {\n          this.isEventListenerAdded = true;\n        }\n\n        var orientation = window.innerWidth > window.innerHeight ? 90 : 0;\n        this.setState({\n          isPortrait: orientation === 0,\n          isLandscape: orientation === 90\n        });\n      }\n    }, {\n      key: \"onOrientationChange\",\n      value: function onOrientationChange() {\n        this.handleOrientationChange();\n      }\n    }, {\n      key: \"onPageLoad\",\n      value: function onPageLoad() {\n        this.handleOrientationChange();\n      }\n    }, {\n      key: \"componentDidMount\",\n      value: function componentDidMount() {\n        if ((typeof window === \"undefined\" ? \"undefined\" : _typeof(window)) !== undefined && isMobile) {\n          if (!this.isEventListenerAdded) {\n            this.handleOrientationChange();\n            window.addEventListener(\"load\", this.onPageLoad, false);\n          } else {\n            window.removeEventListener(\"load\", this.onPageLoad, false);\n          }\n\n          window.addEventListener(\"resize\", this.onOrientationChange, false);\n        }\n      }\n    }, {\n      key: \"componentWillUnmount\",\n      value: function componentWillUnmount() {\n        window.removeEventListener(\"resize\", this.onOrientationChange, false);\n      }\n    }, {\n      key: \"render\",\n      value: function render() {\n        return React__default.createElement(WrappedComponent, _extends({}, this.props, {\n          isLandscape: this.state.isLandscape,\n          isPortrait: this.state.isPortrait\n        }));\n      }\n    }]);\n\n    return _class;\n  }(React__default.Component);\n}\n\nfunction useMobileOrientation() {\n  var _useState = React.useState(function () {\n    var orientation = window.innerWidth > window.innerHeight ? 90 : 0;\n    return {\n      isPortrait: orientation === 0,\n      isLandscape: orientation === 90,\n      orientation: orientation === 0 ? 'portrait' : 'landscape'\n    };\n  }),\n      _useState2 = _slicedToArray(_useState, 2),\n      state = _useState2[0],\n      setState = _useState2[1];\n\n  var handleOrientationChange = React.useCallback(function () {\n    var orientation = window.innerWidth > window.innerHeight ? 90 : 0;\n    var next = {\n      isPortrait: orientation === 0,\n      isLandscape: orientation === 90,\n      orientation: orientation === 0 ? 'portrait' : 'landscape'\n    };\n    state.orientation !== next.orientation && setState(next);\n  }, [state.orientation]);\n  React.useEffect(function () {\n    if ((typeof window === \"undefined\" ? \"undefined\" : _typeof(window)) !== undefined && isMobile) {\n      handleOrientationChange();\n      window.addEventListener(\"load\", handleOrientationChange, false);\n      window.addEventListener(\"resize\", handleOrientationChange, false);\n    }\n\n    return function () {\n      window.removeEventListener(\"resize\", handleOrientationChange, false);\n      window.removeEventListener(\"load\", handleOrientationChange, false);\n    };\n  }, [handleOrientationChange]);\n  return state;\n}\n\nfunction useDeviceData(userAgent) {\n  var hookUserAgent = userAgent ? userAgent : window.navigator.userAgent;\n  return parseUserAgent(hookUserAgent);\n}\n\nfunction useDeviceSelectors(userAgent) {\n  var hookUserAgent = userAgent ? userAgent : window.navigator.userAgent;\n  var deviceData = useDeviceData(hookUserAgent);\n  var selectors = buildSelectorsObject(deviceData);\n  return [selectors, deviceData];\n}\n\nexports.AndroidView = AndroidView;\nexports.BrowserTypes = BrowserTypes;\nexports.BrowserView = BrowserView;\nexports.ConsoleView = ConsoleView;\nexports.CustomView = CustomView;\nexports.IEView = IEView;\nexports.IOSView = IOSView;\nexports.MobileOnlyView = MobileOnlyView;\nexports.MobileView = MobileView;\nexports.OsTypes = OsTypes;\nexports.SmartTVView = SmartTVView;\nexports.TabletView = TabletView;\nexports.WearableView = WearableView;\nexports.WinPhoneView = WinPhoneView;\nexports.browserName = browserName;\nexports.browserVersion = browserVersion;\nexports.deviceDetect = deviceDetect;\nexports.deviceType = deviceType;\nexports.engineName = engineName;\nexports.engineVersion = engineVersion;\nexports.fullBrowserVersion = fullBrowserVersion;\nexports.getSelectorsByUserAgent = getSelectorsByUserAgent;\nexports.getUA = getUA;\nexports.isAndroid = isAndroid;\nexports.isBrowser = isBrowser;\nexports.isChrome = isChrome;\nexports.isChromium = isChromium;\nexports.isConsole = isConsole;\nexports.isDesktop = isDesktop;\nexports.isEdge = isEdge;\nexports.isEdgeChromium = isEdgeChromium;\nexports.isElectron = isElectron;\nexports.isEmbedded = isEmbedded;\nexports.isFirefox = isFirefox;\nexports.isIE = isIE;\nexports.isIOS = isIOS;\nexports.isIOS13 = isIOS13;\nexports.isIPad13 = isIPad13;\nexports.isIPhone13 = isIPhone13;\nexports.isIPod13 = isIPod13;\nexports.isLegacyEdge = isLegacyEdge;\nexports.isMIUI = isMIUI;\nexports.isMacOs = isMacOs;\nexports.isMobile = isMobile;\nexports.isMobileOnly = isMobileOnly;\nexports.isMobileSafari = isMobileSafari;\nexports.isOpera = isOpera;\nexports.isSafari = isSafari;\nexports.isSamsungBrowser = isSamsungBrowser;\nexports.isSmartTV = isSmartTV;\nexports.isTablet = isTablet;\nexports.isWearable = isWearable;\nexports.isWinPhone = isWinPhone;\nexports.isWindows = isWindows;\nexports.isYandex = isYandex;\nexports.mobileModel = mobileModel;\nexports.mobileVendor = mobileVendor;\nexports.osName = osName;\nexports.osVersion = osVersion;\nexports.parseUserAgent = parseUserAgent;\nexports.setUserAgent = setUserAgent;\nexports.useDeviceData = useDeviceData;\nexports.useDeviceSelectors = useDeviceSelectors;\nexports.useMobileOrientation = useMobileOrientation;\nexports.withOrientationChange = withOrientationChange;\n","/* UAParser.js v1.0.37\n   Copyright © 2012-2021 Faisal Salman <f@faisalman.com>\n   MIT License */\n(function(window,undefined){\"use strict\";var LIBVERSION=\"1.0.37\",EMPTY=\"\",UNKNOWN=\"?\",FUNC_TYPE=\"function\",UNDEF_TYPE=\"undefined\",OBJ_TYPE=\"object\",STR_TYPE=\"string\",MAJOR=\"major\",MODEL=\"model\",NAME=\"name\",TYPE=\"type\",VENDOR=\"vendor\",VERSION=\"version\",ARCHITECTURE=\"architecture\",CONSOLE=\"console\",MOBILE=\"mobile\",TABLET=\"tablet\",SMARTTV=\"smarttv\",WEARABLE=\"wearable\",EMBEDDED=\"embedded\",UA_MAX_LENGTH=500;var AMAZON=\"Amazon\",APPLE=\"Apple\",ASUS=\"ASUS\",BLACKBERRY=\"BlackBerry\",BROWSER=\"Browser\",CHROME=\"Chrome\",EDGE=\"Edge\",FIREFOX=\"Firefox\",GOOGLE=\"Google\",HUAWEI=\"Huawei\",LG=\"LG\",MICROSOFT=\"Microsoft\",MOTOROLA=\"Motorola\",OPERA=\"Opera\",SAMSUNG=\"Samsung\",SHARP=\"Sharp\",SONY=\"Sony\",XIAOMI=\"Xiaomi\",ZEBRA=\"Zebra\",FACEBOOK=\"Facebook\",CHROMIUM_OS=\"Chromium OS\",MAC_OS=\"Mac OS\";var extend=function(regexes,extensions){var mergedRegexes={};for(var i in regexes){if(extensions[i]&&extensions[i].length%2===0){mergedRegexes[i]=extensions[i].concat(regexes[i])}else{mergedRegexes[i]=regexes[i]}}return mergedRegexes},enumerize=function(arr){var enums={};for(var i=0;i<arr.length;i++){enums[arr[i].toUpperCase()]=arr[i]}return enums},has=function(str1,str2){return typeof str1===STR_TYPE?lowerize(str2).indexOf(lowerize(str1))!==-1:false},lowerize=function(str){return str.toLowerCase()},majorize=function(version){return typeof version===STR_TYPE?version.replace(/[^\\d\\.]/g,EMPTY).split(\".\")[0]:undefined},trim=function(str,len){if(typeof str===STR_TYPE){str=str.replace(/^\\s\\s*/,EMPTY);return typeof len===UNDEF_TYPE?str:str.substring(0,UA_MAX_LENGTH)}};var rgxMapper=function(ua,arrays){var i=0,j,k,p,q,matches,match;while(i<arrays.length&&!matches){var regex=arrays[i],props=arrays[i+1];j=k=0;while(j<regex.length&&!matches){if(!regex[j]){break}matches=regex[j++].exec(ua);if(!!matches){for(p=0;p<props.length;p++){match=matches[++k];q=props[p];if(typeof q===OBJ_TYPE&&q.length>0){if(q.length===2){if(typeof q[1]==FUNC_TYPE){this[q[0]]=q[1].call(this,match)}else{this[q[0]]=q[1]}}else if(q.length===3){if(typeof q[1]===FUNC_TYPE&&!(q[1].exec&&q[1].test)){this[q[0]]=match?q[1].call(this,match,q[2]):undefined}else{this[q[0]]=match?match.replace(q[1],q[2]):undefined}}else if(q.length===4){this[q[0]]=match?q[3].call(this,match.replace(q[1],q[2])):undefined}}else{this[q]=match?match:undefined}}}}i+=2}},strMapper=function(str,map){for(var i in map){if(typeof map[i]===OBJ_TYPE&&map[i].length>0){for(var j=0;j<map[i].length;j++){if(has(map[i][j],str)){return i===UNKNOWN?undefined:i}}}else if(has(map[i],str)){return i===UNKNOWN?undefined:i}}return str};var oldSafariMap={\"1.0\":\"/8\",1.2:\"/1\",1.3:\"/3\",\"2.0\":\"/412\",\"2.0.2\":\"/416\",\"2.0.3\":\"/417\",\"2.0.4\":\"/419\",\"?\":\"/\"},windowsVersionMap={ME:\"4.90\",\"NT 3.11\":\"NT3.51\",\"NT 4.0\":\"NT4.0\",2e3:\"NT 5.0\",XP:[\"NT 5.1\",\"NT 5.2\"],Vista:\"NT 6.0\",7:\"NT 6.1\",8:\"NT 6.2\",8.1:\"NT 6.3\",10:[\"NT 6.4\",\"NT 10.0\"],RT:\"ARM\"};var regexes={browser:[[/\\b(?:crmo|crios)\\/([\\w\\.]+)/i],[VERSION,[NAME,\"Chrome\"]],[/edg(?:e|ios|a)?\\/([\\w\\.]+)/i],[VERSION,[NAME,\"Edge\"]],[/(opera mini)\\/([-\\w\\.]+)/i,/(opera [mobiletab]{3,6})\\b.+version\\/([-\\w\\.]+)/i,/(opera)(?:.+version\\/|[\\/ ]+)([\\w\\.]+)/i],[NAME,VERSION],[/opios[\\/ ]+([\\w\\.]+)/i],[VERSION,[NAME,OPERA+\" Mini\"]],[/\\bopr\\/([\\w\\.]+)/i],[VERSION,[NAME,OPERA]],[/\\bb[ai]*d(?:uhd|[ub]*[aekoprswx]{5,6})[\\/ ]?([\\w\\.]+)/i],[VERSION,[NAME,\"Baidu\"]],[/(kindle)\\/([\\w\\.]+)/i,/(lunascape|maxthon|netfront|jasmine|blazer)[\\/ ]?([\\w\\.]*)/i,/(avant|iemobile|slim)\\s?(?:browser)?[\\/ ]?([\\w\\.]*)/i,/(?:ms|\\()(ie) ([\\w\\.]+)/i,/(flock|rockmelt|midori|epiphany|silk|skyfire|bolt|iron|vivaldi|iridium|phantomjs|bowser|quark|qupzilla|falkon|rekonq|puffin|brave|whale(?!.+naver)|qqbrowserlite|qq|duckduckgo)\\/([-\\w\\.]+)/i,/(heytap|ovi)browser\\/([\\d\\.]+)/i,/(weibo)__([\\d\\.]+)/i],[NAME,VERSION],[/(?:\\buc? ?browser|(?:juc.+)ucweb)[\\/ ]?([\\w\\.]+)/i],[VERSION,[NAME,\"UC\"+BROWSER]],[/microm.+\\bqbcore\\/([\\w\\.]+)/i,/\\bqbcore\\/([\\w\\.]+).+microm/i,/micromessenger\\/([\\w\\.]+)/i],[VERSION,[NAME,\"WeChat\"]],[/konqueror\\/([\\w\\.]+)/i],[VERSION,[NAME,\"Konqueror\"]],[/trident.+rv[: ]([\\w\\.]{1,9})\\b.+like gecko/i],[VERSION,[NAME,\"IE\"]],[/ya(?:search)?browser\\/([\\w\\.]+)/i],[VERSION,[NAME,\"Yandex\"]],[/slbrowser\\/([\\w\\.]+)/i],[VERSION,[NAME,\"Smart Lenovo \"+BROWSER]],[/(avast|avg)\\/([\\w\\.]+)/i],[[NAME,/(.+)/,\"$1 Secure \"+BROWSER],VERSION],[/\\bfocus\\/([\\w\\.]+)/i],[VERSION,[NAME,FIREFOX+\" Focus\"]],[/\\bopt\\/([\\w\\.]+)/i],[VERSION,[NAME,OPERA+\" Touch\"]],[/coc_coc\\w+\\/([\\w\\.]+)/i],[VERSION,[NAME,\"Coc Coc\"]],[/dolfin\\/([\\w\\.]+)/i],[VERSION,[NAME,\"Dolphin\"]],[/coast\\/([\\w\\.]+)/i],[VERSION,[NAME,OPERA+\" Coast\"]],[/miuibrowser\\/([\\w\\.]+)/i],[VERSION,[NAME,\"MIUI \"+BROWSER]],[/fxios\\/([-\\w\\.]+)/i],[VERSION,[NAME,FIREFOX]],[/\\bqihu|(qi?ho?o?|360)browser/i],[[NAME,\"360 \"+BROWSER]],[/(oculus|sailfish|huawei|vivo)browser\\/([\\w\\.]+)/i],[[NAME,/(.+)/,\"$1 \"+BROWSER],VERSION],[/samsungbrowser\\/([\\w\\.]+)/i],[VERSION,[NAME,SAMSUNG+\" Internet\"]],[/(comodo_dragon)\\/([\\w\\.]+)/i],[[NAME,/_/g,\" \"],VERSION],[/metasr[\\/ ]?([\\d\\.]+)/i],[VERSION,[NAME,\"Sogou Explorer\"]],[/(sogou)mo\\w+\\/([\\d\\.]+)/i],[[NAME,\"Sogou Mobile\"],VERSION],[/(electron)\\/([\\w\\.]+) safari/i,/(tesla)(?: qtcarbrowser|\\/(20\\d\\d\\.[-\\w\\.]+))/i,/m?(qqbrowser|2345Explorer)[\\/ ]?([\\w\\.]+)/i],[NAME,VERSION],[/(lbbrowser)/i,/\\[(linkedin)app\\]/i],[NAME],[/((?:fban\\/fbios|fb_iab\\/fb4a)(?!.+fbav)|;fbav\\/([\\w\\.]+);)/i],[[NAME,FACEBOOK],VERSION],[/(Klarna)\\/([\\w\\.]+)/i,/(kakao(?:talk|story))[\\/ ]([\\w\\.]+)/i,/(naver)\\(.*?(\\d+\\.[\\w\\.]+).*\\)/i,/safari (line)\\/([\\w\\.]+)/i,/\\b(line)\\/([\\w\\.]+)\\/iab/i,/(alipay)client\\/([\\w\\.]+)/i,/(chromium|instagram|snapchat)[\\/ ]([-\\w\\.]+)/i],[NAME,VERSION],[/\\bgsa\\/([\\w\\.]+) .*safari\\//i],[VERSION,[NAME,\"GSA\"]],[/musical_ly(?:.+app_?version\\/|_)([\\w\\.]+)/i],[VERSION,[NAME,\"TikTok\"]],[/headlesschrome(?:\\/([\\w\\.]+)| )/i],[VERSION,[NAME,CHROME+\" Headless\"]],[/ wv\\).+(chrome)\\/([\\w\\.]+)/i],[[NAME,CHROME+\" WebView\"],VERSION],[/droid.+ version\\/([\\w\\.]+)\\b.+(?:mobile safari|safari)/i],[VERSION,[NAME,\"Android \"+BROWSER]],[/(chrome|omniweb|arora|[tizenoka]{5} ?browser)\\/v?([\\w\\.]+)/i],[NAME,VERSION],[/version\\/([\\w\\.\\,]+) .*mobile\\/\\w+ (safari)/i],[VERSION,[NAME,\"Mobile Safari\"]],[/version\\/([\\w(\\.|\\,)]+) .*(mobile ?safari|safari)/i],[VERSION,NAME],[/webkit.+?(mobile ?safari|safari)(\\/[\\w\\.]+)/i],[NAME,[VERSION,strMapper,oldSafariMap]],[/(webkit|khtml)\\/([\\w\\.]+)/i],[NAME,VERSION],[/(navigator|netscape\\d?)\\/([-\\w\\.]+)/i],[[NAME,\"Netscape\"],VERSION],[/mobile vr; rv:([\\w\\.]+)\\).+firefox/i],[VERSION,[NAME,FIREFOX+\" Reality\"]],[/ekiohf.+(flow)\\/([\\w\\.]+)/i,/(swiftfox)/i,/(icedragon|iceweasel|camino|chimera|fennec|maemo browser|minimo|conkeror|klar)[\\/ ]?([\\w\\.\\+]+)/i,/(seamonkey|k-meleon|icecat|iceape|firebird|phoenix|palemoon|basilisk|waterfox)\\/([-\\w\\.]+)$/i,/(firefox)\\/([\\w\\.]+)/i,/(mozilla)\\/([\\w\\.]+) .+rv\\:.+gecko\\/\\d+/i,/(polaris|lynx|dillo|icab|doris|amaya|w3m|netsurf|sleipnir|obigo|mosaic|(?:go|ice|up)[\\. ]?browser)[-\\/ ]?v?([\\w\\.]+)/i,/(links) \\(([\\w\\.]+)/i,/panasonic;(viera)/i],[NAME,VERSION],[/(cobalt)\\/([\\w\\.]+)/i],[NAME,[VERSION,/master.|lts./,\"\"]]],cpu:[[/(?:(amd|x(?:(?:86|64)[-_])?|wow|win)64)[;\\)]/i],[[ARCHITECTURE,\"amd64\"]],[/(ia32(?=;))/i],[[ARCHITECTURE,lowerize]],[/((?:i[346]|x)86)[;\\)]/i],[[ARCHITECTURE,\"ia32\"]],[/\\b(aarch64|arm(v?8e?l?|_?64))\\b/i],[[ARCHITECTURE,\"arm64\"]],[/\\b(arm(?:v[67])?ht?n?[fl]p?)\\b/i],[[ARCHITECTURE,\"armhf\"]],[/windows (ce|mobile); ppc;/i],[[ARCHITECTURE,\"arm\"]],[/((?:ppc|powerpc)(?:64)?)(?: mac|;|\\))/i],[[ARCHITECTURE,/ower/,EMPTY,lowerize]],[/(sun4\\w)[;\\)]/i],[[ARCHITECTURE,\"sparc\"]],[/((?:avr32|ia64(?=;))|68k(?=\\))|\\barm(?=v(?:[1-7]|[5-7]1)l?|;|eabi)|(?=atmel )avr|(?:irix|mips|sparc)(?:64)?\\b|pa-risc)/i],[[ARCHITECTURE,lowerize]]],device:[[/\\b(sch-i[89]0\\d|shw-m380s|sm-[ptx]\\w{2,4}|gt-[pn]\\d{2,4}|sgh-t8[56]9|nexus 10)/i],[MODEL,[VENDOR,SAMSUNG],[TYPE,TABLET]],[/\\b((?:s[cgp]h|gt|sm)-\\w+|sc[g-]?[\\d]+a?|galaxy nexus)/i,/samsung[- ]([-\\w]+)/i,/sec-(sgh\\w+)/i],[MODEL,[VENDOR,SAMSUNG],[TYPE,MOBILE]],[/(?:\\/|\\()(ip(?:hone|od)[\\w, ]*)(?:\\/|;)/i],[MODEL,[VENDOR,APPLE],[TYPE,MOBILE]],[/\\((ipad);[-\\w\\),; ]+apple/i,/applecoremedia\\/[\\w\\.]+ \\((ipad)/i,/\\b(ipad)\\d\\d?,\\d\\d?[;\\]].+ios/i],[MODEL,[VENDOR,APPLE],[TYPE,TABLET]],[/(macintosh);/i],[MODEL,[VENDOR,APPLE]],[/\\b(sh-?[altvz]?\\d\\d[a-ekm]?)/i],[MODEL,[VENDOR,SHARP],[TYPE,MOBILE]],[/\\b((?:ag[rs][23]?|bah2?|sht?|btv)-a?[lw]\\d{2})\\b(?!.+d\\/s)/i],[MODEL,[VENDOR,HUAWEI],[TYPE,TABLET]],[/(?:huawei|honor)([-\\w ]+)[;\\)]/i,/\\b(nexus 6p|\\w{2,4}e?-[atu]?[ln][\\dx][012359c][adn]?)\\b(?!.+d\\/s)/i],[MODEL,[VENDOR,HUAWEI],[TYPE,MOBILE]],[/\\b(poco[\\w ]+|m2\\d{3}j\\d\\d[a-z]{2})(?: bui|\\))/i,/\\b; (\\w+) build\\/hm\\1/i,/\\b(hm[-_ ]?note?[_ ]?(?:\\d\\w)?) bui/i,/\\b(redmi[\\-_ ]?(?:note|k)?[\\w_ ]+)(?: bui|\\))/i,/oid[^\\)]+; (m?[12][0-389][01]\\w{3,6}[c-y])( bui|; wv|\\))/i,/\\b(mi[-_ ]?(?:a\\d|one|one[_ ]plus|note lte|max|cc)?[_ ]?(?:\\d?\\w?)[_ ]?(?:plus|se|lite)?)(?: bui|\\))/i],[[MODEL,/_/g,\" \"],[VENDOR,XIAOMI],[TYPE,MOBILE]],[/oid[^\\)]+; (2\\d{4}(283|rpbf)[cgl])( bui|\\))/i,/\\b(mi[-_ ]?(?:pad)(?:[\\w_ ]+))(?: bui|\\))/i],[[MODEL,/_/g,\" \"],[VENDOR,XIAOMI],[TYPE,TABLET]],[/; (\\w+) bui.+ oppo/i,/\\b(cph[12]\\d{3}|p(?:af|c[al]|d\\w|e[ar])[mt]\\d0|x9007|a101op)\\b/i],[MODEL,[VENDOR,\"OPPO\"],[TYPE,MOBILE]],[/vivo (\\w+)(?: bui|\\))/i,/\\b(v[12]\\d{3}\\w?[at])(?: bui|;)/i],[MODEL,[VENDOR,\"Vivo\"],[TYPE,MOBILE]],[/\\b(rmx[1-3]\\d{3})(?: bui|;|\\))/i],[MODEL,[VENDOR,\"Realme\"],[TYPE,MOBILE]],[/\\b(milestone|droid(?:[2-4x]| (?:bionic|x2|pro|razr))?:?( 4g)?)\\b[\\w ]+build\\//i,/\\bmot(?:orola)?[- ](\\w*)/i,/((?:moto[\\w\\(\\) ]+|xt\\d{3,4}|nexus 6)(?= bui|\\)))/i],[MODEL,[VENDOR,MOTOROLA],[TYPE,MOBILE]],[/\\b(mz60\\d|xoom[2 ]{0,2}) build\\//i],[MODEL,[VENDOR,MOTOROLA],[TYPE,TABLET]],[/((?=lg)?[vl]k\\-?\\d{3}) bui| 3\\.[-\\w; ]{10}lg?-([06cv9]{3,4})/i],[MODEL,[VENDOR,LG],[TYPE,TABLET]],[/(lm(?:-?f100[nv]?|-[\\w\\.]+)(?= bui|\\))|nexus [45])/i,/\\blg[-e;\\/ ]+((?!browser|netcast|android tv)\\w+)/i,/\\blg-?([\\d\\w]+) bui/i],[MODEL,[VENDOR,LG],[TYPE,MOBILE]],[/(ideatab[-\\w ]+)/i,/lenovo ?(s[56]000[-\\w]+|tab(?:[\\w ]+)|yt[-\\d\\w]{6}|tb[-\\d\\w]{6})/i],[MODEL,[VENDOR,\"Lenovo\"],[TYPE,TABLET]],[/(?:maemo|nokia).*(n900|lumia \\d+)/i,/nokia[-_ ]?([-\\w\\.]*)/i],[[MODEL,/_/g,\" \"],[VENDOR,\"Nokia\"],[TYPE,MOBILE]],[/(pixel c)\\b/i],[MODEL,[VENDOR,GOOGLE],[TYPE,TABLET]],[/droid.+; (pixel[\\daxl ]{0,6})(?: bui|\\))/i],[MODEL,[VENDOR,GOOGLE],[TYPE,MOBILE]],[/droid.+ (a?\\d[0-2]{2}so|[c-g]\\d{4}|so[-gl]\\w+|xq-a\\w[4-7][12])(?= bui|\\).+chrome\\/(?![1-6]{0,1}\\d\\.))/i],[MODEL,[VENDOR,SONY],[TYPE,MOBILE]],[/sony tablet [ps]/i,/\\b(?:sony)?sgp\\w+(?: bui|\\))/i],[[MODEL,\"Xperia Tablet\"],[VENDOR,SONY],[TYPE,TABLET]],[/ (kb2005|in20[12]5|be20[12][59])\\b/i,/(?:one)?(?:plus)? (a\\d0\\d\\d)(?: b|\\))/i],[MODEL,[VENDOR,\"OnePlus\"],[TYPE,MOBILE]],[/(alexa)webm/i,/(kf[a-z]{2}wi|aeo[c-r]{2})( bui|\\))/i,/(kf[a-z]+)( bui|\\)).+silk\\//i],[MODEL,[VENDOR,AMAZON],[TYPE,TABLET]],[/((?:sd|kf)[0349hijorstuw]+)( bui|\\)).+silk\\//i],[[MODEL,/(.+)/g,\"Fire Phone $1\"],[VENDOR,AMAZON],[TYPE,MOBILE]],[/(playbook);[-\\w\\),; ]+(rim)/i],[MODEL,VENDOR,[TYPE,TABLET]],[/\\b((?:bb[a-f]|st[hv])100-\\d)/i,/\\(bb10; (\\w+)/i],[MODEL,[VENDOR,BLACKBERRY],[TYPE,MOBILE]],[/(?:\\b|asus_)(transfo[prime ]{4,10} \\w+|eeepc|slider \\w+|nexus 7|padfone|p00[cj])/i],[MODEL,[VENDOR,ASUS],[TYPE,TABLET]],[/ (z[bes]6[027][012][km][ls]|zenfone \\d\\w?)\\b/i],[MODEL,[VENDOR,ASUS],[TYPE,MOBILE]],[/(nexus 9)/i],[MODEL,[VENDOR,\"HTC\"],[TYPE,TABLET]],[/(htc)[-;_ ]{1,2}([\\w ]+(?=\\)| bui)|\\w+)/i,/(zte)[- ]([\\w ]+?)(?: bui|\\/|\\))/i,/(alcatel|geeksphone|nexian|panasonic(?!(?:;|\\.))|sony(?!-bra))[-_ ]?([-\\w]*)/i],[VENDOR,[MODEL,/_/g,\" \"],[TYPE,MOBILE]],[/droid.+; ([ab][1-7]-?[0178a]\\d\\d?)/i],[MODEL,[VENDOR,\"Acer\"],[TYPE,TABLET]],[/droid.+; (m[1-5] note) bui/i,/\\bmz-([-\\w]{2,})/i],[MODEL,[VENDOR,\"Meizu\"],[TYPE,MOBILE]],[/; ((?:power )?armor(?:[\\w ]{0,8}))(?: bui|\\))/i],[MODEL,[VENDOR,\"Ulefone\"],[TYPE,MOBILE]],[/(blackberry|benq|palm(?=\\-)|sonyericsson|acer|asus|dell|meizu|motorola|polytron|infinix|tecno)[-_ ]?([-\\w]*)/i,/(hp) ([\\w ]+\\w)/i,/(asus)-?(\\w+)/i,/(microsoft); (lumia[\\w ]+)/i,/(lenovo)[-_ ]?([-\\w]+)/i,/(jolla)/i,/(oppo) ?([\\w ]+) bui/i],[VENDOR,MODEL,[TYPE,MOBILE]],[/(kobo)\\s(ereader|touch)/i,/(archos) (gamepad2?)/i,/(hp).+(touchpad(?!.+tablet)|tablet)/i,/(kindle)\\/([\\w\\.]+)/i,/(nook)[\\w ]+build\\/(\\w+)/i,/(dell) (strea[kpr\\d ]*[\\dko])/i,/(le[- ]+pan)[- ]+(\\w{1,9}) bui/i,/(trinity)[- ]*(t\\d{3}) bui/i,/(gigaset)[- ]+(q\\w{1,9}) bui/i,/(vodafone) ([\\w ]+)(?:\\)| bui)/i],[VENDOR,MODEL,[TYPE,TABLET]],[/(surface duo)/i],[MODEL,[VENDOR,MICROSOFT],[TYPE,TABLET]],[/droid [\\d\\.]+; (fp\\du?)(?: b|\\))/i],[MODEL,[VENDOR,\"Fairphone\"],[TYPE,MOBILE]],[/(u304aa)/i],[MODEL,[VENDOR,\"AT&T\"],[TYPE,MOBILE]],[/\\bsie-(\\w*)/i],[MODEL,[VENDOR,\"Siemens\"],[TYPE,MOBILE]],[/\\b(rct\\w+) b/i],[MODEL,[VENDOR,\"RCA\"],[TYPE,TABLET]],[/\\b(venue[\\d ]{2,7}) b/i],[MODEL,[VENDOR,\"Dell\"],[TYPE,TABLET]],[/\\b(q(?:mv|ta)\\w+) b/i],[MODEL,[VENDOR,\"Verizon\"],[TYPE,TABLET]],[/\\b(?:barnes[& ]+noble |bn[rt])([\\w\\+ ]*) b/i],[MODEL,[VENDOR,\"Barnes & Noble\"],[TYPE,TABLET]],[/\\b(tm\\d{3}\\w+) b/i],[MODEL,[VENDOR,\"NuVision\"],[TYPE,TABLET]],[/\\b(k88) b/i],[MODEL,[VENDOR,\"ZTE\"],[TYPE,TABLET]],[/\\b(nx\\d{3}j) b/i],[MODEL,[VENDOR,\"ZTE\"],[TYPE,MOBILE]],[/\\b(gen\\d{3}) b.+49h/i],[MODEL,[VENDOR,\"Swiss\"],[TYPE,MOBILE]],[/\\b(zur\\d{3}) b/i],[MODEL,[VENDOR,\"Swiss\"],[TYPE,TABLET]],[/\\b((zeki)?tb.*\\b) b/i],[MODEL,[VENDOR,\"Zeki\"],[TYPE,TABLET]],[/\\b([yr]\\d{2}) b/i,/\\b(dragon[- ]+touch |dt)(\\w{5}) b/i],[[VENDOR,\"Dragon Touch\"],MODEL,[TYPE,TABLET]],[/\\b(ns-?\\w{0,9}) b/i],[MODEL,[VENDOR,\"Insignia\"],[TYPE,TABLET]],[/\\b((nxa|next)-?\\w{0,9}) b/i],[MODEL,[VENDOR,\"NextBook\"],[TYPE,TABLET]],[/\\b(xtreme\\_)?(v(1[045]|2[015]|[3469]0|7[05])) b/i],[[VENDOR,\"Voice\"],MODEL,[TYPE,MOBILE]],[/\\b(lvtel\\-)?(v1[12]) b/i],[[VENDOR,\"LvTel\"],MODEL,[TYPE,MOBILE]],[/\\b(ph-1) /i],[MODEL,[VENDOR,\"Essential\"],[TYPE,MOBILE]],[/\\b(v(100md|700na|7011|917g).*\\b) b/i],[MODEL,[VENDOR,\"Envizen\"],[TYPE,TABLET]],[/\\b(trio[-\\w\\. ]+) b/i],[MODEL,[VENDOR,\"MachSpeed\"],[TYPE,TABLET]],[/\\btu_(1491) b/i],[MODEL,[VENDOR,\"Rotor\"],[TYPE,TABLET]],[/(shield[\\w ]+) b/i],[MODEL,[VENDOR,\"Nvidia\"],[TYPE,TABLET]],[/(sprint) (\\w+)/i],[VENDOR,MODEL,[TYPE,MOBILE]],[/(kin\\.[onetw]{3})/i],[[MODEL,/\\./g,\" \"],[VENDOR,MICROSOFT],[TYPE,MOBILE]],[/droid.+; (cc6666?|et5[16]|mc[239][23]x?|vc8[03]x?)\\)/i],[MODEL,[VENDOR,ZEBRA],[TYPE,TABLET]],[/droid.+; (ec30|ps20|tc[2-8]\\d[kx])\\)/i],[MODEL,[VENDOR,ZEBRA],[TYPE,MOBILE]],[/smart-tv.+(samsung)/i],[VENDOR,[TYPE,SMARTTV]],[/hbbtv.+maple;(\\d+)/i],[[MODEL,/^/,\"SmartTV\"],[VENDOR,SAMSUNG],[TYPE,SMARTTV]],[/(nux; netcast.+smarttv|lg (netcast\\.tv-201\\d|android tv))/i],[[VENDOR,LG],[TYPE,SMARTTV]],[/(apple) ?tv/i],[VENDOR,[MODEL,APPLE+\" TV\"],[TYPE,SMARTTV]],[/crkey/i],[[MODEL,CHROME+\"cast\"],[VENDOR,GOOGLE],[TYPE,SMARTTV]],[/droid.+aft(\\w+)( bui|\\))/i],[MODEL,[VENDOR,AMAZON],[TYPE,SMARTTV]],[/\\(dtv[\\);].+(aquos)/i,/(aquos-tv[\\w ]+)\\)/i],[MODEL,[VENDOR,SHARP],[TYPE,SMARTTV]],[/(bravia[\\w ]+)( bui|\\))/i],[MODEL,[VENDOR,SONY],[TYPE,SMARTTV]],[/(mitv-\\w{5}) bui/i],[MODEL,[VENDOR,XIAOMI],[TYPE,SMARTTV]],[/Hbbtv.*(technisat) (.*);/i],[VENDOR,MODEL,[TYPE,SMARTTV]],[/\\b(roku)[\\dx]*[\\)\\/]((?:dvp-)?[\\d\\.]*)/i,/hbbtv\\/\\d+\\.\\d+\\.\\d+ +\\([\\w\\+ ]*; *([\\w\\d][^;]*);([^;]*)/i],[[VENDOR,trim],[MODEL,trim],[TYPE,SMARTTV]],[/\\b(android tv|smart[- ]?tv|opera tv|tv; rv:)\\b/i],[[TYPE,SMARTTV]],[/(ouya)/i,/(nintendo) ([wids3utch]+)/i],[VENDOR,MODEL,[TYPE,CONSOLE]],[/droid.+; (shield) bui/i],[MODEL,[VENDOR,\"Nvidia\"],[TYPE,CONSOLE]],[/(playstation [345portablevi]+)/i],[MODEL,[VENDOR,SONY],[TYPE,CONSOLE]],[/\\b(xbox(?: one)?(?!; xbox))[\\); ]/i],[MODEL,[VENDOR,MICROSOFT],[TYPE,CONSOLE]],[/((pebble))app/i],[VENDOR,MODEL,[TYPE,WEARABLE]],[/(watch)(?: ?os[,\\/]|\\d,\\d\\/)[\\d\\.]+/i],[MODEL,[VENDOR,APPLE],[TYPE,WEARABLE]],[/droid.+; (glass) \\d/i],[MODEL,[VENDOR,GOOGLE],[TYPE,WEARABLE]],[/droid.+; (wt63?0{2,3})\\)/i],[MODEL,[VENDOR,ZEBRA],[TYPE,WEARABLE]],[/(quest( 2| pro)?)/i],[MODEL,[VENDOR,FACEBOOK],[TYPE,WEARABLE]],[/(tesla)(?: qtcarbrowser|\\/[-\\w\\.]+)/i],[VENDOR,[TYPE,EMBEDDED]],[/(aeobc)\\b/i],[MODEL,[VENDOR,AMAZON],[TYPE,EMBEDDED]],[/droid .+?; ([^;]+?)(?: bui|; wv\\)|\\) applew).+? mobile safari/i],[MODEL,[TYPE,MOBILE]],[/droid .+?; ([^;]+?)(?: bui|\\) applew).+?(?! mobile) safari/i],[MODEL,[TYPE,TABLET]],[/\\b((tablet|tab)[;\\/]|focus\\/\\d(?!.+mobile))/i],[[TYPE,TABLET]],[/(phone|mobile(?:[;\\/]| [ \\w\\/\\.]*safari)|pda(?=.+windows ce))/i],[[TYPE,MOBILE]],[/(android[-\\w\\. ]{0,9});.+buil/i],[MODEL,[VENDOR,\"Generic\"]]],engine:[[/windows.+ edge\\/([\\w\\.]+)/i],[VERSION,[NAME,EDGE+\"HTML\"]],[/webkit\\/537\\.36.+chrome\\/(?!27)([\\w\\.]+)/i],[VERSION,[NAME,\"Blink\"]],[/(presto)\\/([\\w\\.]+)/i,/(webkit|trident|netfront|netsurf|amaya|lynx|w3m|goanna)\\/([\\w\\.]+)/i,/ekioh(flow)\\/([\\w\\.]+)/i,/(khtml|tasman|links)[\\/ ]\\(?([\\w\\.]+)/i,/(icab)[\\/ ]([23]\\.[\\d\\.]+)/i,/\\b(libweb)/i],[NAME,VERSION],[/rv\\:([\\w\\.]{1,9})\\b.+(gecko)/i],[VERSION,NAME]],os:[[/microsoft (windows) (vista|xp)/i],[NAME,VERSION],[/(windows (?:phone(?: os)?|mobile))[\\/ ]?([\\d\\.\\w ]*)/i],[NAME,[VERSION,strMapper,windowsVersionMap]],[/windows nt 6\\.2; (arm)/i,/windows[\\/ ]?([ntce\\d\\. ]+\\w)(?!.+xbox)/i,/(?:win(?=3|9|n)|win 9x )([nt\\d\\.]+)/i],[[VERSION,strMapper,windowsVersionMap],[NAME,\"Windows\"]],[/ip[honead]{2,4}\\b(?:.*os ([\\w]+) like mac|; opera)/i,/(?:ios;fbsv\\/|iphone.+ios[\\/ ])([\\d\\.]+)/i,/cfnetwork\\/.+darwin/i],[[VERSION,/_/g,\".\"],[NAME,\"iOS\"]],[/(mac os x) ?([\\w\\. ]*)/i,/(macintosh|mac_powerpc\\b)(?!.+haiku)/i],[[NAME,MAC_OS],[VERSION,/_/g,\".\"]],[/droid ([\\w\\.]+)\\b.+(android[- ]x86|harmonyos)/i],[VERSION,NAME],[/(android|webos|qnx|bada|rim tablet os|maemo|meego|sailfish)[-\\/ ]?([\\w\\.]*)/i,/(blackberry)\\w*\\/([\\w\\.]*)/i,/(tizen|kaios)[\\/ ]([\\w\\.]+)/i,/\\((series40);/i],[NAME,VERSION],[/\\(bb(10);/i],[VERSION,[NAME,BLACKBERRY]],[/(?:symbian ?os|symbos|s60(?=;)|series60)[-\\/ ]?([\\w\\.]*)/i],[VERSION,[NAME,\"Symbian\"]],[/mozilla\\/[\\d\\.]+ \\((?:mobile|tablet|tv|mobile; [\\w ]+); rv:.+ gecko\\/([\\w\\.]+)/i],[VERSION,[NAME,FIREFOX+\" OS\"]],[/web0s;.+rt(tv)/i,/\\b(?:hp)?wos(?:browser)?\\/([\\w\\.]+)/i],[VERSION,[NAME,\"webOS\"]],[/watch(?: ?os[,\\/]|\\d,\\d\\/)([\\d\\.]+)/i],[VERSION,[NAME,\"watchOS\"]],[/crkey\\/([\\d\\.]+)/i],[VERSION,[NAME,CHROME+\"cast\"]],[/(cros) [\\w]+(?:\\)| ([\\w\\.]+)\\b)/i],[[NAME,CHROMIUM_OS],VERSION],[/panasonic;(viera)/i,/(netrange)mmh/i,/(nettv)\\/(\\d+\\.[\\w\\.]+)/i,/(nintendo|playstation) ([wids345portablevuch]+)/i,/(xbox); +xbox ([^\\);]+)/i,/\\b(joli|palm)\\b ?(?:os)?\\/?([\\w\\.]*)/i,/(mint)[\\/\\(\\) ]?(\\w*)/i,/(mageia|vectorlinux)[; ]/i,/([kxln]?ubuntu|debian|suse|opensuse|gentoo|arch(?= linux)|slackware|fedora|mandriva|centos|pclinuxos|red ?hat|zenwalk|linpus|raspbian|plan 9|minix|risc os|contiki|deepin|manjaro|elementary os|sabayon|linspire)(?: gnu\\/linux)?(?: enterprise)?(?:[- ]linux)?(?:-gnu)?[-\\/ ]?(?!chrom|package)([-\\w\\.]*)/i,/(hurd|linux) ?([\\w\\.]*)/i,/(gnu) ?([\\w\\.]*)/i,/\\b([-frentopcghs]{0,5}bsd|dragonfly)[\\/ ]?(?!amd|[ix346]{1,2}86)([\\w\\.]*)/i,/(haiku) (\\w+)/i],[NAME,VERSION],[/(sunos) ?([\\w\\.\\d]*)/i],[[NAME,\"Solaris\"],VERSION],[/((?:open)?solaris)[-\\/ ]?([\\w\\.]*)/i,/(aix) ((\\d)(?=\\.|\\)| )[\\w\\.])*/i,/\\b(beos|os\\/2|amigaos|morphos|openvms|fuchsia|hp-ux|serenityos)/i,/(unix) ?([\\w\\.]*)/i],[NAME,VERSION]]};var UAParser=function(ua,extensions){if(typeof ua===OBJ_TYPE){extensions=ua;ua=undefined}if(!(this instanceof UAParser)){return new UAParser(ua,extensions).getResult()}var _navigator=typeof window!==UNDEF_TYPE&&window.navigator?window.navigator:undefined;var _ua=ua||(_navigator&&_navigator.userAgent?_navigator.userAgent:EMPTY);var _uach=_navigator&&_navigator.userAgentData?_navigator.userAgentData:undefined;var _rgxmap=extensions?extend(regexes,extensions):regexes;var _isSelfNav=_navigator&&_navigator.userAgent==_ua;this.getBrowser=function(){var _browser={};_browser[NAME]=undefined;_browser[VERSION]=undefined;rgxMapper.call(_browser,_ua,_rgxmap.browser);_browser[MAJOR]=majorize(_browser[VERSION]);if(_isSelfNav&&_navigator&&_navigator.brave&&typeof _navigator.brave.isBrave==FUNC_TYPE){_browser[NAME]=\"Brave\"}return _browser};this.getCPU=function(){var _cpu={};_cpu[ARCHITECTURE]=undefined;rgxMapper.call(_cpu,_ua,_rgxmap.cpu);return _cpu};this.getDevice=function(){var _device={};_device[VENDOR]=undefined;_device[MODEL]=undefined;_device[TYPE]=undefined;rgxMapper.call(_device,_ua,_rgxmap.device);if(_isSelfNav&&!_device[TYPE]&&_uach&&_uach.mobile){_device[TYPE]=MOBILE}if(_isSelfNav&&_device[MODEL]==\"Macintosh\"&&_navigator&&typeof _navigator.standalone!==UNDEF_TYPE&&_navigator.maxTouchPoints&&_navigator.maxTouchPoints>2){_device[MODEL]=\"iPad\";_device[TYPE]=TABLET}return _device};this.getEngine=function(){var _engine={};_engine[NAME]=undefined;_engine[VERSION]=undefined;rgxMapper.call(_engine,_ua,_rgxmap.engine);return _engine};this.getOS=function(){var _os={};_os[NAME]=undefined;_os[VERSION]=undefined;rgxMapper.call(_os,_ua,_rgxmap.os);if(_isSelfNav&&!_os[NAME]&&_uach&&_uach.platform!=\"Unknown\"){_os[NAME]=_uach.platform.replace(/chrome os/i,CHROMIUM_OS).replace(/macos/i,MAC_OS)}return _os};this.getResult=function(){return{ua:this.getUA(),browser:this.getBrowser(),engine:this.getEngine(),os:this.getOS(),device:this.getDevice(),cpu:this.getCPU()}};this.getUA=function(){return _ua};this.setUA=function(ua){_ua=typeof ua===STR_TYPE&&ua.length>UA_MAX_LENGTH?trim(ua,UA_MAX_LENGTH):ua;return this};this.setUA(_ua);return this};UAParser.VERSION=LIBVERSION;UAParser.BROWSER=enumerize([NAME,VERSION,MAJOR]);UAParser.CPU=enumerize([ARCHITECTURE]);UAParser.DEVICE=enumerize([MODEL,VENDOR,TYPE,CONSOLE,MOBILE,SMARTTV,TABLET,WEARABLE,EMBEDDED]);UAParser.ENGINE=UAParser.OS=enumerize([NAME,VERSION]);if(typeof exports!==UNDEF_TYPE){if(typeof module!==UNDEF_TYPE&&module.exports){exports=module.exports=UAParser}exports.UAParser=UAParser}else{if(typeof define===FUNC_TYPE&&define.amd){define(function(){return UAParser})}else if(typeof window!==UNDEF_TYPE){window.UAParser=UAParser}}var $=typeof window!==UNDEF_TYPE&&(window.jQuery||window.Zepto);if($&&!$.ua){var parser=new UAParser;$.ua=parser.getResult();$.ua.get=function(){return parser.getUA()};$.ua.set=function(ua){parser.setUA(ua);var result=parser.getResult();for(var prop in result){$.ua[prop]=result[prop]}}}})(typeof window===\"object\"?window:this);","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = getDisplayName;\nfunction getDisplayName(Component) {\n  return Component.displayName || Component.name || (typeof Component === 'string' && Component.length > 0 ? Component : 'Unknown');\n}","/**\n * @license React\n * react-dom.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n/*\n Modernizr 3.0.0pre (Custom Build) | MIT\n*/\n'use strict';var aa=require(\"react\"),ca=require(\"scheduler\");function p(a){for(var b=\"https://reactjs.org/docs/error-decoder.html?invariant=\"+a,c=1;c<arguments.length;c++)b+=\"&args[]=\"+encodeURIComponent(arguments[c]);return\"Minified React error #\"+a+\"; visit \"+b+\" for the full message or use the non-minified dev environment for full errors and additional helpful warnings.\"}var da=new Set,ea={};function fa(a,b){ha(a,b);ha(a+\"Capture\",b)}\nfunction ha(a,b){ea[a]=b;for(a=0;a<b.length;a++)da.add(b[a])}\nvar ia=!(\"undefined\"===typeof window||\"undefined\"===typeof window.document||\"undefined\"===typeof window.document.createElement),ja=Object.prototype.hasOwnProperty,ka=/^[:A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD][:A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]*$/,la=\n{},ma={};function oa(a){if(ja.call(ma,a))return!0;if(ja.call(la,a))return!1;if(ka.test(a))return ma[a]=!0;la[a]=!0;return!1}function pa(a,b,c,d){if(null!==c&&0===c.type)return!1;switch(typeof b){case \"function\":case \"symbol\":return!0;case \"boolean\":if(d)return!1;if(null!==c)return!c.acceptsBooleans;a=a.toLowerCase().slice(0,5);return\"data-\"!==a&&\"aria-\"!==a;default:return!1}}\nfunction qa(a,b,c,d){if(null===b||\"undefined\"===typeof b||pa(a,b,c,d))return!0;if(d)return!1;if(null!==c)switch(c.type){case 3:return!b;case 4:return!1===b;case 5:return isNaN(b);case 6:return isNaN(b)||1>b}return!1}function v(a,b,c,d,e,f,g){this.acceptsBooleans=2===b||3===b||4===b;this.attributeName=d;this.attributeNamespace=e;this.mustUseProperty=c;this.propertyName=a;this.type=b;this.sanitizeURL=f;this.removeEmptyString=g}var z={};\n\"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style\".split(\" \").forEach(function(a){z[a]=new v(a,0,!1,a,null,!1,!1)});[[\"acceptCharset\",\"accept-charset\"],[\"className\",\"class\"],[\"htmlFor\",\"for\"],[\"httpEquiv\",\"http-equiv\"]].forEach(function(a){var b=a[0];z[b]=new v(b,1,!1,a[1],null,!1,!1)});[\"contentEditable\",\"draggable\",\"spellCheck\",\"value\"].forEach(function(a){z[a]=new v(a,2,!1,a.toLowerCase(),null,!1,!1)});\n[\"autoReverse\",\"externalResourcesRequired\",\"focusable\",\"preserveAlpha\"].forEach(function(a){z[a]=new v(a,2,!1,a,null,!1,!1)});\"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope\".split(\" \").forEach(function(a){z[a]=new v(a,3,!1,a.toLowerCase(),null,!1,!1)});\n[\"checked\",\"multiple\",\"muted\",\"selected\"].forEach(function(a){z[a]=new v(a,3,!0,a,null,!1,!1)});[\"capture\",\"download\"].forEach(function(a){z[a]=new v(a,4,!1,a,null,!1,!1)});[\"cols\",\"rows\",\"size\",\"span\"].forEach(function(a){z[a]=new v(a,6,!1,a,null,!1,!1)});[\"rowSpan\",\"start\"].forEach(function(a){z[a]=new v(a,5,!1,a.toLowerCase(),null,!1,!1)});var ra=/[\\-:]([a-z])/g;function sa(a){return a[1].toUpperCase()}\n\"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height\".split(\" \").forEach(function(a){var b=a.replace(ra,\nsa);z[b]=new v(b,1,!1,a,null,!1,!1)});\"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type\".split(\" \").forEach(function(a){var b=a.replace(ra,sa);z[b]=new v(b,1,!1,a,\"http://www.w3.org/1999/xlink\",!1,!1)});[\"xml:base\",\"xml:lang\",\"xml:space\"].forEach(function(a){var b=a.replace(ra,sa);z[b]=new v(b,1,!1,a,\"http://www.w3.org/XML/1998/namespace\",!1,!1)});[\"tabIndex\",\"crossOrigin\"].forEach(function(a){z[a]=new v(a,1,!1,a.toLowerCase(),null,!1,!1)});\nz.xlinkHref=new v(\"xlinkHref\",1,!1,\"xlink:href\",\"http://www.w3.org/1999/xlink\",!0,!1);[\"src\",\"href\",\"action\",\"formAction\"].forEach(function(a){z[a]=new v(a,1,!1,a.toLowerCase(),null,!0,!0)});\nfunction ta(a,b,c,d){var e=z.hasOwnProperty(b)?z[b]:null;if(null!==e?0!==e.type:d||!(2<b.length)||\"o\"!==b[0]&&\"O\"!==b[0]||\"n\"!==b[1]&&\"N\"!==b[1])qa(b,c,e,d)&&(c=null),d||null===e?oa(b)&&(null===c?a.removeAttribute(b):a.setAttribute(b,\"\"+c)):e.mustUseProperty?a[e.propertyName]=null===c?3===e.type?!1:\"\":c:(b=e.attributeName,d=e.attributeNamespace,null===c?a.removeAttribute(b):(e=e.type,c=3===e||4===e&&!0===c?\"\":\"\"+c,d?a.setAttributeNS(d,b,c):a.setAttribute(b,c)))}\nvar ua=aa.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED,va=Symbol.for(\"react.element\"),wa=Symbol.for(\"react.portal\"),ya=Symbol.for(\"react.fragment\"),za=Symbol.for(\"react.strict_mode\"),Aa=Symbol.for(\"react.profiler\"),Ba=Symbol.for(\"react.provider\"),Ca=Symbol.for(\"react.context\"),Da=Symbol.for(\"react.forward_ref\"),Ea=Symbol.for(\"react.suspense\"),Fa=Symbol.for(\"react.suspense_list\"),Ga=Symbol.for(\"react.memo\"),Ha=Symbol.for(\"react.lazy\");Symbol.for(\"react.scope\");Symbol.for(\"react.debug_trace_mode\");\nvar Ia=Symbol.for(\"react.offscreen\");Symbol.for(\"react.legacy_hidden\");Symbol.for(\"react.cache\");Symbol.for(\"react.tracing_marker\");var Ja=Symbol.iterator;function Ka(a){if(null===a||\"object\"!==typeof a)return null;a=Ja&&a[Ja]||a[\"@@iterator\"];return\"function\"===typeof a?a:null}var A=Object.assign,La;function Ma(a){if(void 0===La)try{throw Error();}catch(c){var b=c.stack.trim().match(/\\n( *(at )?)/);La=b&&b[1]||\"\"}return\"\\n\"+La+a}var Na=!1;\nfunction Oa(a,b){if(!a||Na)return\"\";Na=!0;var c=Error.prepareStackTrace;Error.prepareStackTrace=void 0;try{if(b)if(b=function(){throw Error();},Object.defineProperty(b.prototype,\"props\",{set:function(){throw Error();}}),\"object\"===typeof Reflect&&Reflect.construct){try{Reflect.construct(b,[])}catch(l){var d=l}Reflect.construct(a,[],b)}else{try{b.call()}catch(l){d=l}a.call(b.prototype)}else{try{throw Error();}catch(l){d=l}a()}}catch(l){if(l&&d&&\"string\"===typeof l.stack){for(var e=l.stack.split(\"\\n\"),\nf=d.stack.split(\"\\n\"),g=e.length-1,h=f.length-1;1<=g&&0<=h&&e[g]!==f[h];)h--;for(;1<=g&&0<=h;g--,h--)if(e[g]!==f[h]){if(1!==g||1!==h){do if(g--,h--,0>h||e[g]!==f[h]){var k=\"\\n\"+e[g].replace(\" at new \",\" at \");a.displayName&&k.includes(\"<anonymous>\")&&(k=k.replace(\"<anonymous>\",a.displayName));return k}while(1<=g&&0<=h)}break}}}finally{Na=!1,Error.prepareStackTrace=c}return(a=a?a.displayName||a.name:\"\")?Ma(a):\"\"}\nfunction Pa(a){switch(a.tag){case 5:return Ma(a.type);case 16:return Ma(\"Lazy\");case 13:return Ma(\"Suspense\");case 19:return Ma(\"SuspenseList\");case 0:case 2:case 15:return a=Oa(a.type,!1),a;case 11:return a=Oa(a.type.render,!1),a;case 1:return a=Oa(a.type,!0),a;default:return\"\"}}\nfunction Qa(a){if(null==a)return null;if(\"function\"===typeof a)return a.displayName||a.name||null;if(\"string\"===typeof a)return a;switch(a){case ya:return\"Fragment\";case wa:return\"Portal\";case Aa:return\"Profiler\";case za:return\"StrictMode\";case Ea:return\"Suspense\";case Fa:return\"SuspenseList\"}if(\"object\"===typeof a)switch(a.$$typeof){case Ca:return(a.displayName||\"Context\")+\".Consumer\";case Ba:return(a._context.displayName||\"Context\")+\".Provider\";case Da:var b=a.render;a=a.displayName;a||(a=b.displayName||\nb.name||\"\",a=\"\"!==a?\"ForwardRef(\"+a+\")\":\"ForwardRef\");return a;case Ga:return b=a.displayName||null,null!==b?b:Qa(a.type)||\"Memo\";case Ha:b=a._payload;a=a._init;try{return Qa(a(b))}catch(c){}}return null}\nfunction Ra(a){var b=a.type;switch(a.tag){case 24:return\"Cache\";case 9:return(b.displayName||\"Context\")+\".Consumer\";case 10:return(b._context.displayName||\"Context\")+\".Provider\";case 18:return\"DehydratedFragment\";case 11:return a=b.render,a=a.displayName||a.name||\"\",b.displayName||(\"\"!==a?\"ForwardRef(\"+a+\")\":\"ForwardRef\");case 7:return\"Fragment\";case 5:return b;case 4:return\"Portal\";case 3:return\"Root\";case 6:return\"Text\";case 16:return Qa(b);case 8:return b===za?\"StrictMode\":\"Mode\";case 22:return\"Offscreen\";\ncase 12:return\"Profiler\";case 21:return\"Scope\";case 13:return\"Suspense\";case 19:return\"SuspenseList\";case 25:return\"TracingMarker\";case 1:case 0:case 17:case 2:case 14:case 15:if(\"function\"===typeof b)return b.displayName||b.name||null;if(\"string\"===typeof b)return b}return null}function Sa(a){switch(typeof a){case \"boolean\":case \"number\":case \"string\":case \"undefined\":return a;case \"object\":return a;default:return\"\"}}\nfunction Ta(a){var b=a.type;return(a=a.nodeName)&&\"input\"===a.toLowerCase()&&(\"checkbox\"===b||\"radio\"===b)}\nfunction Ua(a){var b=Ta(a)?\"checked\":\"value\",c=Object.getOwnPropertyDescriptor(a.constructor.prototype,b),d=\"\"+a[b];if(!a.hasOwnProperty(b)&&\"undefined\"!==typeof c&&\"function\"===typeof c.get&&\"function\"===typeof c.set){var e=c.get,f=c.set;Object.defineProperty(a,b,{configurable:!0,get:function(){return e.call(this)},set:function(a){d=\"\"+a;f.call(this,a)}});Object.defineProperty(a,b,{enumerable:c.enumerable});return{getValue:function(){return d},setValue:function(a){d=\"\"+a},stopTracking:function(){a._valueTracker=\nnull;delete a[b]}}}}function Va(a){a._valueTracker||(a._valueTracker=Ua(a))}function Wa(a){if(!a)return!1;var b=a._valueTracker;if(!b)return!0;var c=b.getValue();var d=\"\";a&&(d=Ta(a)?a.checked?\"true\":\"false\":a.value);a=d;return a!==c?(b.setValue(a),!0):!1}function Xa(a){a=a||(\"undefined\"!==typeof document?document:void 0);if(\"undefined\"===typeof a)return null;try{return a.activeElement||a.body}catch(b){return a.body}}\nfunction Ya(a,b){var c=b.checked;return A({},b,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:null!=c?c:a._wrapperState.initialChecked})}function Za(a,b){var c=null==b.defaultValue?\"\":b.defaultValue,d=null!=b.checked?b.checked:b.defaultChecked;c=Sa(null!=b.value?b.value:c);a._wrapperState={initialChecked:d,initialValue:c,controlled:\"checkbox\"===b.type||\"radio\"===b.type?null!=b.checked:null!=b.value}}function ab(a,b){b=b.checked;null!=b&&ta(a,\"checked\",b,!1)}\nfunction bb(a,b){ab(a,b);var c=Sa(b.value),d=b.type;if(null!=c)if(\"number\"===d){if(0===c&&\"\"===a.value||a.value!=c)a.value=\"\"+c}else a.value!==\"\"+c&&(a.value=\"\"+c);else if(\"submit\"===d||\"reset\"===d){a.removeAttribute(\"value\");return}b.hasOwnProperty(\"value\")?cb(a,b.type,c):b.hasOwnProperty(\"defaultValue\")&&cb(a,b.type,Sa(b.defaultValue));null==b.checked&&null!=b.defaultChecked&&(a.defaultChecked=!!b.defaultChecked)}\nfunction db(a,b,c){if(b.hasOwnProperty(\"value\")||b.hasOwnProperty(\"defaultValue\")){var d=b.type;if(!(\"submit\"!==d&&\"reset\"!==d||void 0!==b.value&&null!==b.value))return;b=\"\"+a._wrapperState.initialValue;c||b===a.value||(a.value=b);a.defaultValue=b}c=a.name;\"\"!==c&&(a.name=\"\");a.defaultChecked=!!a._wrapperState.initialChecked;\"\"!==c&&(a.name=c)}\nfunction cb(a,b,c){if(\"number\"!==b||Xa(a.ownerDocument)!==a)null==c?a.defaultValue=\"\"+a._wrapperState.initialValue:a.defaultValue!==\"\"+c&&(a.defaultValue=\"\"+c)}var eb=Array.isArray;\nfunction fb(a,b,c,d){a=a.options;if(b){b={};for(var e=0;e<c.length;e++)b[\"$\"+c[e]]=!0;for(c=0;c<a.length;c++)e=b.hasOwnProperty(\"$\"+a[c].value),a[c].selected!==e&&(a[c].selected=e),e&&d&&(a[c].defaultSelected=!0)}else{c=\"\"+Sa(c);b=null;for(e=0;e<a.length;e++){if(a[e].value===c){a[e].selected=!0;d&&(a[e].defaultSelected=!0);return}null!==b||a[e].disabled||(b=a[e])}null!==b&&(b.selected=!0)}}\nfunction gb(a,b){if(null!=b.dangerouslySetInnerHTML)throw Error(p(91));return A({},b,{value:void 0,defaultValue:void 0,children:\"\"+a._wrapperState.initialValue})}function hb(a,b){var c=b.value;if(null==c){c=b.children;b=b.defaultValue;if(null!=c){if(null!=b)throw Error(p(92));if(eb(c)){if(1<c.length)throw Error(p(93));c=c[0]}b=c}null==b&&(b=\"\");c=b}a._wrapperState={initialValue:Sa(c)}}\nfunction ib(a,b){var c=Sa(b.value),d=Sa(b.defaultValue);null!=c&&(c=\"\"+c,c!==a.value&&(a.value=c),null==b.defaultValue&&a.defaultValue!==c&&(a.defaultValue=c));null!=d&&(a.defaultValue=\"\"+d)}function jb(a){var b=a.textContent;b===a._wrapperState.initialValue&&\"\"!==b&&null!==b&&(a.value=b)}function kb(a){switch(a){case \"svg\":return\"http://www.w3.org/2000/svg\";case \"math\":return\"http://www.w3.org/1998/Math/MathML\";default:return\"http://www.w3.org/1999/xhtml\"}}\nfunction lb(a,b){return null==a||\"http://www.w3.org/1999/xhtml\"===a?kb(b):\"http://www.w3.org/2000/svg\"===a&&\"foreignObject\"===b?\"http://www.w3.org/1999/xhtml\":a}\nvar mb,nb=function(a){return\"undefined\"!==typeof MSApp&&MSApp.execUnsafeLocalFunction?function(b,c,d,e){MSApp.execUnsafeLocalFunction(function(){return a(b,c,d,e)})}:a}(function(a,b){if(\"http://www.w3.org/2000/svg\"!==a.namespaceURI||\"innerHTML\"in a)a.innerHTML=b;else{mb=mb||document.createElement(\"div\");mb.innerHTML=\"<svg>\"+b.valueOf().toString()+\"</svg>\";for(b=mb.firstChild;a.firstChild;)a.removeChild(a.firstChild);for(;b.firstChild;)a.appendChild(b.firstChild)}});\nfunction ob(a,b){if(b){var c=a.firstChild;if(c&&c===a.lastChild&&3===c.nodeType){c.nodeValue=b;return}}a.textContent=b}\nvar pb={animationIterationCount:!0,aspectRatio:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,\nzoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},qb=[\"Webkit\",\"ms\",\"Moz\",\"O\"];Object.keys(pb).forEach(function(a){qb.forEach(function(b){b=b+a.charAt(0).toUpperCase()+a.substring(1);pb[b]=pb[a]})});function rb(a,b,c){return null==b||\"boolean\"===typeof b||\"\"===b?\"\":c||\"number\"!==typeof b||0===b||pb.hasOwnProperty(a)&&pb[a]?(\"\"+b).trim():b+\"px\"}\nfunction sb(a,b){a=a.style;for(var c in b)if(b.hasOwnProperty(c)){var d=0===c.indexOf(\"--\"),e=rb(c,b[c],d);\"float\"===c&&(c=\"cssFloat\");d?a.setProperty(c,e):a[c]=e}}var tb=A({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});\nfunction ub(a,b){if(b){if(tb[a]&&(null!=b.children||null!=b.dangerouslySetInnerHTML))throw Error(p(137,a));if(null!=b.dangerouslySetInnerHTML){if(null!=b.children)throw Error(p(60));if(\"object\"!==typeof b.dangerouslySetInnerHTML||!(\"__html\"in b.dangerouslySetInnerHTML))throw Error(p(61));}if(null!=b.style&&\"object\"!==typeof b.style)throw Error(p(62));}}\nfunction vb(a,b){if(-1===a.indexOf(\"-\"))return\"string\"===typeof b.is;switch(a){case \"annotation-xml\":case \"color-profile\":case \"font-face\":case \"font-face-src\":case \"font-face-uri\":case \"font-face-format\":case \"font-face-name\":case \"missing-glyph\":return!1;default:return!0}}var wb=null;function xb(a){a=a.target||a.srcElement||window;a.correspondingUseElement&&(a=a.correspondingUseElement);return 3===a.nodeType?a.parentNode:a}var yb=null,zb=null,Ab=null;\nfunction Bb(a){if(a=Cb(a)){if(\"function\"!==typeof yb)throw Error(p(280));var b=a.stateNode;b&&(b=Db(b),yb(a.stateNode,a.type,b))}}function Eb(a){zb?Ab?Ab.push(a):Ab=[a]:zb=a}function Fb(){if(zb){var a=zb,b=Ab;Ab=zb=null;Bb(a);if(b)for(a=0;a<b.length;a++)Bb(b[a])}}function Gb(a,b){return a(b)}function Hb(){}var Ib=!1;function Jb(a,b,c){if(Ib)return a(b,c);Ib=!0;try{return Gb(a,b,c)}finally{if(Ib=!1,null!==zb||null!==Ab)Hb(),Fb()}}\nfunction Kb(a,b){var c=a.stateNode;if(null===c)return null;var d=Db(c);if(null===d)return null;c=d[b];a:switch(b){case \"onClick\":case \"onClickCapture\":case \"onDoubleClick\":case \"onDoubleClickCapture\":case \"onMouseDown\":case \"onMouseDownCapture\":case \"onMouseMove\":case \"onMouseMoveCapture\":case \"onMouseUp\":case \"onMouseUpCapture\":case \"onMouseEnter\":(d=!d.disabled)||(a=a.type,d=!(\"button\"===a||\"input\"===a||\"select\"===a||\"textarea\"===a));a=!d;break a;default:a=!1}if(a)return null;if(c&&\"function\"!==\ntypeof c)throw Error(p(231,b,typeof c));return c}var Lb=!1;if(ia)try{var Mb={};Object.defineProperty(Mb,\"passive\",{get:function(){Lb=!0}});window.addEventListener(\"test\",Mb,Mb);window.removeEventListener(\"test\",Mb,Mb)}catch(a){Lb=!1}function Nb(a,b,c,d,e,f,g,h,k){var l=Array.prototype.slice.call(arguments,3);try{b.apply(c,l)}catch(m){this.onError(m)}}var Ob=!1,Pb=null,Qb=!1,Rb=null,Sb={onError:function(a){Ob=!0;Pb=a}};function Tb(a,b,c,d,e,f,g,h,k){Ob=!1;Pb=null;Nb.apply(Sb,arguments)}\nfunction Ub(a,b,c,d,e,f,g,h,k){Tb.apply(this,arguments);if(Ob){if(Ob){var l=Pb;Ob=!1;Pb=null}else throw Error(p(198));Qb||(Qb=!0,Rb=l)}}function Vb(a){var b=a,c=a;if(a.alternate)for(;b.return;)b=b.return;else{a=b;do b=a,0!==(b.flags&4098)&&(c=b.return),a=b.return;while(a)}return 3===b.tag?c:null}function Wb(a){if(13===a.tag){var b=a.memoizedState;null===b&&(a=a.alternate,null!==a&&(b=a.memoizedState));if(null!==b)return b.dehydrated}return null}function Xb(a){if(Vb(a)!==a)throw Error(p(188));}\nfunction Yb(a){var b=a.alternate;if(!b){b=Vb(a);if(null===b)throw Error(p(188));return b!==a?null:a}for(var c=a,d=b;;){var e=c.return;if(null===e)break;var f=e.alternate;if(null===f){d=e.return;if(null!==d){c=d;continue}break}if(e.child===f.child){for(f=e.child;f;){if(f===c)return Xb(e),a;if(f===d)return Xb(e),b;f=f.sibling}throw Error(p(188));}if(c.return!==d.return)c=e,d=f;else{for(var g=!1,h=e.child;h;){if(h===c){g=!0;c=e;d=f;break}if(h===d){g=!0;d=e;c=f;break}h=h.sibling}if(!g){for(h=f.child;h;){if(h===\nc){g=!0;c=f;d=e;break}if(h===d){g=!0;d=f;c=e;break}h=h.sibling}if(!g)throw Error(p(189));}}if(c.alternate!==d)throw Error(p(190));}if(3!==c.tag)throw Error(p(188));return c.stateNode.current===c?a:b}function Zb(a){a=Yb(a);return null!==a?$b(a):null}function $b(a){if(5===a.tag||6===a.tag)return a;for(a=a.child;null!==a;){var b=$b(a);if(null!==b)return b;a=a.sibling}return null}\nvar ac=ca.unstable_scheduleCallback,bc=ca.unstable_cancelCallback,cc=ca.unstable_shouldYield,dc=ca.unstable_requestPaint,B=ca.unstable_now,ec=ca.unstable_getCurrentPriorityLevel,fc=ca.unstable_ImmediatePriority,gc=ca.unstable_UserBlockingPriority,hc=ca.unstable_NormalPriority,ic=ca.unstable_LowPriority,jc=ca.unstable_IdlePriority,kc=null,lc=null;function mc(a){if(lc&&\"function\"===typeof lc.onCommitFiberRoot)try{lc.onCommitFiberRoot(kc,a,void 0,128===(a.current.flags&128))}catch(b){}}\nvar oc=Math.clz32?Math.clz32:nc,pc=Math.log,qc=Math.LN2;function nc(a){a>>>=0;return 0===a?32:31-(pc(a)/qc|0)|0}var rc=64,sc=4194304;\nfunction tc(a){switch(a&-a){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return a&4194240;case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:return a&130023424;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 1073741824;\ndefault:return a}}function uc(a,b){var c=a.pendingLanes;if(0===c)return 0;var d=0,e=a.suspendedLanes,f=a.pingedLanes,g=c&268435455;if(0!==g){var h=g&~e;0!==h?d=tc(h):(f&=g,0!==f&&(d=tc(f)))}else g=c&~e,0!==g?d=tc(g):0!==f&&(d=tc(f));if(0===d)return 0;if(0!==b&&b!==d&&0===(b&e)&&(e=d&-d,f=b&-b,e>=f||16===e&&0!==(f&4194240)))return b;0!==(d&4)&&(d|=c&16);b=a.entangledLanes;if(0!==b)for(a=a.entanglements,b&=d;0<b;)c=31-oc(b),e=1<<c,d|=a[c],b&=~e;return d}\nfunction vc(a,b){switch(a){case 1:case 2:case 4:return b+250;case 8:case 16:case 32:case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return b+5E3;case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:return-1;case 134217728:case 268435456:case 536870912:case 1073741824:return-1;default:return-1}}\nfunction wc(a,b){for(var c=a.suspendedLanes,d=a.pingedLanes,e=a.expirationTimes,f=a.pendingLanes;0<f;){var g=31-oc(f),h=1<<g,k=e[g];if(-1===k){if(0===(h&c)||0!==(h&d))e[g]=vc(h,b)}else k<=b&&(a.expiredLanes|=h);f&=~h}}function xc(a){a=a.pendingLanes&-1073741825;return 0!==a?a:a&1073741824?1073741824:0}function yc(){var a=rc;rc<<=1;0===(rc&4194240)&&(rc=64);return a}function zc(a){for(var b=[],c=0;31>c;c++)b.push(a);return b}\nfunction Ac(a,b,c){a.pendingLanes|=b;536870912!==b&&(a.suspendedLanes=0,a.pingedLanes=0);a=a.eventTimes;b=31-oc(b);a[b]=c}function Bc(a,b){var c=a.pendingLanes&~b;a.pendingLanes=b;a.suspendedLanes=0;a.pingedLanes=0;a.expiredLanes&=b;a.mutableReadLanes&=b;a.entangledLanes&=b;b=a.entanglements;var d=a.eventTimes;for(a=a.expirationTimes;0<c;){var e=31-oc(c),f=1<<e;b[e]=0;d[e]=-1;a[e]=-1;c&=~f}}\nfunction Cc(a,b){var c=a.entangledLanes|=b;for(a=a.entanglements;c;){var d=31-oc(c),e=1<<d;e&b|a[d]&b&&(a[d]|=b);c&=~e}}var C=0;function Dc(a){a&=-a;return 1<a?4<a?0!==(a&268435455)?16:536870912:4:1}var Ec,Fc,Gc,Hc,Ic,Jc=!1,Kc=[],Lc=null,Mc=null,Nc=null,Oc=new Map,Pc=new Map,Qc=[],Rc=\"mousedown mouseup touchcancel touchend touchstart auxclick dblclick pointercancel pointerdown pointerup dragend dragstart drop compositionend compositionstart keydown keypress keyup input textInput copy cut paste click change contextmenu reset submit\".split(\" \");\nfunction Sc(a,b){switch(a){case \"focusin\":case \"focusout\":Lc=null;break;case \"dragenter\":case \"dragleave\":Mc=null;break;case \"mouseover\":case \"mouseout\":Nc=null;break;case \"pointerover\":case \"pointerout\":Oc.delete(b.pointerId);break;case \"gotpointercapture\":case \"lostpointercapture\":Pc.delete(b.pointerId)}}\nfunction Tc(a,b,c,d,e,f){if(null===a||a.nativeEvent!==f)return a={blockedOn:b,domEventName:c,eventSystemFlags:d,nativeEvent:f,targetContainers:[e]},null!==b&&(b=Cb(b),null!==b&&Fc(b)),a;a.eventSystemFlags|=d;b=a.targetContainers;null!==e&&-1===b.indexOf(e)&&b.push(e);return a}\nfunction Uc(a,b,c,d,e){switch(b){case \"focusin\":return Lc=Tc(Lc,a,b,c,d,e),!0;case \"dragenter\":return Mc=Tc(Mc,a,b,c,d,e),!0;case \"mouseover\":return Nc=Tc(Nc,a,b,c,d,e),!0;case \"pointerover\":var f=e.pointerId;Oc.set(f,Tc(Oc.get(f)||null,a,b,c,d,e));return!0;case \"gotpointercapture\":return f=e.pointerId,Pc.set(f,Tc(Pc.get(f)||null,a,b,c,d,e)),!0}return!1}\nfunction Vc(a){var b=Wc(a.target);if(null!==b){var c=Vb(b);if(null!==c)if(b=c.tag,13===b){if(b=Wb(c),null!==b){a.blockedOn=b;Ic(a.priority,function(){Gc(c)});return}}else if(3===b&&c.stateNode.current.memoizedState.isDehydrated){a.blockedOn=3===c.tag?c.stateNode.containerInfo:null;return}}a.blockedOn=null}\nfunction Xc(a){if(null!==a.blockedOn)return!1;for(var b=a.targetContainers;0<b.length;){var c=Yc(a.domEventName,a.eventSystemFlags,b[0],a.nativeEvent);if(null===c){c=a.nativeEvent;var d=new c.constructor(c.type,c);wb=d;c.target.dispatchEvent(d);wb=null}else return b=Cb(c),null!==b&&Fc(b),a.blockedOn=c,!1;b.shift()}return!0}function Zc(a,b,c){Xc(a)&&c.delete(b)}function $c(){Jc=!1;null!==Lc&&Xc(Lc)&&(Lc=null);null!==Mc&&Xc(Mc)&&(Mc=null);null!==Nc&&Xc(Nc)&&(Nc=null);Oc.forEach(Zc);Pc.forEach(Zc)}\nfunction ad(a,b){a.blockedOn===b&&(a.blockedOn=null,Jc||(Jc=!0,ca.unstable_scheduleCallback(ca.unstable_NormalPriority,$c)))}\nfunction bd(a){function b(b){return ad(b,a)}if(0<Kc.length){ad(Kc[0],a);for(var c=1;c<Kc.length;c++){var d=Kc[c];d.blockedOn===a&&(d.blockedOn=null)}}null!==Lc&&ad(Lc,a);null!==Mc&&ad(Mc,a);null!==Nc&&ad(Nc,a);Oc.forEach(b);Pc.forEach(b);for(c=0;c<Qc.length;c++)d=Qc[c],d.blockedOn===a&&(d.blockedOn=null);for(;0<Qc.length&&(c=Qc[0],null===c.blockedOn);)Vc(c),null===c.blockedOn&&Qc.shift()}var cd=ua.ReactCurrentBatchConfig,dd=!0;\nfunction ed(a,b,c,d){var e=C,f=cd.transition;cd.transition=null;try{C=1,fd(a,b,c,d)}finally{C=e,cd.transition=f}}function gd(a,b,c,d){var e=C,f=cd.transition;cd.transition=null;try{C=4,fd(a,b,c,d)}finally{C=e,cd.transition=f}}\nfunction fd(a,b,c,d){if(dd){var e=Yc(a,b,c,d);if(null===e)hd(a,b,d,id,c),Sc(a,d);else if(Uc(e,a,b,c,d))d.stopPropagation();else if(Sc(a,d),b&4&&-1<Rc.indexOf(a)){for(;null!==e;){var f=Cb(e);null!==f&&Ec(f);f=Yc(a,b,c,d);null===f&&hd(a,b,d,id,c);if(f===e)break;e=f}null!==e&&d.stopPropagation()}else hd(a,b,d,null,c)}}var id=null;\nfunction Yc(a,b,c,d){id=null;a=xb(d);a=Wc(a);if(null!==a)if(b=Vb(a),null===b)a=null;else if(c=b.tag,13===c){a=Wb(b);if(null!==a)return a;a=null}else if(3===c){if(b.stateNode.current.memoizedState.isDehydrated)return 3===b.tag?b.stateNode.containerInfo:null;a=null}else b!==a&&(a=null);id=a;return null}\nfunction jd(a){switch(a){case \"cancel\":case \"click\":case \"close\":case \"contextmenu\":case \"copy\":case \"cut\":case \"auxclick\":case \"dblclick\":case \"dragend\":case \"dragstart\":case \"drop\":case \"focusin\":case \"focusout\":case \"input\":case \"invalid\":case \"keydown\":case \"keypress\":case \"keyup\":case \"mousedown\":case \"mouseup\":case \"paste\":case \"pause\":case \"play\":case \"pointercancel\":case \"pointerdown\":case \"pointerup\":case \"ratechange\":case \"reset\":case \"resize\":case \"seeked\":case \"submit\":case \"touchcancel\":case \"touchend\":case \"touchstart\":case \"volumechange\":case \"change\":case \"selectionchange\":case \"textInput\":case \"compositionstart\":case \"compositionend\":case \"compositionupdate\":case \"beforeblur\":case \"afterblur\":case \"beforeinput\":case \"blur\":case \"fullscreenchange\":case \"focus\":case \"hashchange\":case \"popstate\":case \"select\":case \"selectstart\":return 1;case \"drag\":case \"dragenter\":case \"dragexit\":case \"dragleave\":case \"dragover\":case \"mousemove\":case \"mouseout\":case \"mouseover\":case \"pointermove\":case \"pointerout\":case \"pointerover\":case \"scroll\":case \"toggle\":case \"touchmove\":case \"wheel\":case \"mouseenter\":case \"mouseleave\":case \"pointerenter\":case \"pointerleave\":return 4;\ncase \"message\":switch(ec()){case fc:return 1;case gc:return 4;case hc:case ic:return 16;case jc:return 536870912;default:return 16}default:return 16}}var kd=null,ld=null,md=null;function nd(){if(md)return md;var a,b=ld,c=b.length,d,e=\"value\"in kd?kd.value:kd.textContent,f=e.length;for(a=0;a<c&&b[a]===e[a];a++);var g=c-a;for(d=1;d<=g&&b[c-d]===e[f-d];d++);return md=e.slice(a,1<d?1-d:void 0)}\nfunction od(a){var b=a.keyCode;\"charCode\"in a?(a=a.charCode,0===a&&13===b&&(a=13)):a=b;10===a&&(a=13);return 32<=a||13===a?a:0}function pd(){return!0}function qd(){return!1}\nfunction rd(a){function b(b,d,e,f,g){this._reactName=b;this._targetInst=e;this.type=d;this.nativeEvent=f;this.target=g;this.currentTarget=null;for(var c in a)a.hasOwnProperty(c)&&(b=a[c],this[c]=b?b(f):f[c]);this.isDefaultPrevented=(null!=f.defaultPrevented?f.defaultPrevented:!1===f.returnValue)?pd:qd;this.isPropagationStopped=qd;return this}A(b.prototype,{preventDefault:function(){this.defaultPrevented=!0;var a=this.nativeEvent;a&&(a.preventDefault?a.preventDefault():\"unknown\"!==typeof a.returnValue&&\n(a.returnValue=!1),this.isDefaultPrevented=pd)},stopPropagation:function(){var a=this.nativeEvent;a&&(a.stopPropagation?a.stopPropagation():\"unknown\"!==typeof a.cancelBubble&&(a.cancelBubble=!0),this.isPropagationStopped=pd)},persist:function(){},isPersistent:pd});return b}\nvar sd={eventPhase:0,bubbles:0,cancelable:0,timeStamp:function(a){return a.timeStamp||Date.now()},defaultPrevented:0,isTrusted:0},td=rd(sd),ud=A({},sd,{view:0,detail:0}),vd=rd(ud),wd,xd,yd,Ad=A({},ud,{screenX:0,screenY:0,clientX:0,clientY:0,pageX:0,pageY:0,ctrlKey:0,shiftKey:0,altKey:0,metaKey:0,getModifierState:zd,button:0,buttons:0,relatedTarget:function(a){return void 0===a.relatedTarget?a.fromElement===a.srcElement?a.toElement:a.fromElement:a.relatedTarget},movementX:function(a){if(\"movementX\"in\na)return a.movementX;a!==yd&&(yd&&\"mousemove\"===a.type?(wd=a.screenX-yd.screenX,xd=a.screenY-yd.screenY):xd=wd=0,yd=a);return wd},movementY:function(a){return\"movementY\"in a?a.movementY:xd}}),Bd=rd(Ad),Cd=A({},Ad,{dataTransfer:0}),Dd=rd(Cd),Ed=A({},ud,{relatedTarget:0}),Fd=rd(Ed),Gd=A({},sd,{animationName:0,elapsedTime:0,pseudoElement:0}),Hd=rd(Gd),Id=A({},sd,{clipboardData:function(a){return\"clipboardData\"in a?a.clipboardData:window.clipboardData}}),Jd=rd(Id),Kd=A({},sd,{data:0}),Ld=rd(Kd),Md={Esc:\"Escape\",\nSpacebar:\" \",Left:\"ArrowLeft\",Up:\"ArrowUp\",Right:\"ArrowRight\",Down:\"ArrowDown\",Del:\"Delete\",Win:\"OS\",Menu:\"ContextMenu\",Apps:\"ContextMenu\",Scroll:\"ScrollLock\",MozPrintableKey:\"Unidentified\"},Nd={8:\"Backspace\",9:\"Tab\",12:\"Clear\",13:\"Enter\",16:\"Shift\",17:\"Control\",18:\"Alt\",19:\"Pause\",20:\"CapsLock\",27:\"Escape\",32:\" \",33:\"PageUp\",34:\"PageDown\",35:\"End\",36:\"Home\",37:\"ArrowLeft\",38:\"ArrowUp\",39:\"ArrowRight\",40:\"ArrowDown\",45:\"Insert\",46:\"Delete\",112:\"F1\",113:\"F2\",114:\"F3\",115:\"F4\",116:\"F5\",117:\"F6\",118:\"F7\",\n119:\"F8\",120:\"F9\",121:\"F10\",122:\"F11\",123:\"F12\",144:\"NumLock\",145:\"ScrollLock\",224:\"Meta\"},Od={Alt:\"altKey\",Control:\"ctrlKey\",Meta:\"metaKey\",Shift:\"shiftKey\"};function Pd(a){var b=this.nativeEvent;return b.getModifierState?b.getModifierState(a):(a=Od[a])?!!b[a]:!1}function zd(){return Pd}\nvar Qd=A({},ud,{key:function(a){if(a.key){var b=Md[a.key]||a.key;if(\"Unidentified\"!==b)return b}return\"keypress\"===a.type?(a=od(a),13===a?\"Enter\":String.fromCharCode(a)):\"keydown\"===a.type||\"keyup\"===a.type?Nd[a.keyCode]||\"Unidentified\":\"\"},code:0,location:0,ctrlKey:0,shiftKey:0,altKey:0,metaKey:0,repeat:0,locale:0,getModifierState:zd,charCode:function(a){return\"keypress\"===a.type?od(a):0},keyCode:function(a){return\"keydown\"===a.type||\"keyup\"===a.type?a.keyCode:0},which:function(a){return\"keypress\"===\na.type?od(a):\"keydown\"===a.type||\"keyup\"===a.type?a.keyCode:0}}),Rd=rd(Qd),Sd=A({},Ad,{pointerId:0,width:0,height:0,pressure:0,tangentialPressure:0,tiltX:0,tiltY:0,twist:0,pointerType:0,isPrimary:0}),Td=rd(Sd),Ud=A({},ud,{touches:0,targetTouches:0,changedTouches:0,altKey:0,metaKey:0,ctrlKey:0,shiftKey:0,getModifierState:zd}),Vd=rd(Ud),Wd=A({},sd,{propertyName:0,elapsedTime:0,pseudoElement:0}),Xd=rd(Wd),Yd=A({},Ad,{deltaX:function(a){return\"deltaX\"in a?a.deltaX:\"wheelDeltaX\"in a?-a.wheelDeltaX:0},\ndeltaY:function(a){return\"deltaY\"in a?a.deltaY:\"wheelDeltaY\"in a?-a.wheelDeltaY:\"wheelDelta\"in a?-a.wheelDelta:0},deltaZ:0,deltaMode:0}),Zd=rd(Yd),$d=[9,13,27,32],ae=ia&&\"CompositionEvent\"in window,be=null;ia&&\"documentMode\"in document&&(be=document.documentMode);var ce=ia&&\"TextEvent\"in window&&!be,de=ia&&(!ae||be&&8<be&&11>=be),ee=String.fromCharCode(32),fe=!1;\nfunction ge(a,b){switch(a){case \"keyup\":return-1!==$d.indexOf(b.keyCode);case \"keydown\":return 229!==b.keyCode;case \"keypress\":case \"mousedown\":case \"focusout\":return!0;default:return!1}}function he(a){a=a.detail;return\"object\"===typeof a&&\"data\"in a?a.data:null}var ie=!1;function je(a,b){switch(a){case \"compositionend\":return he(b);case \"keypress\":if(32!==b.which)return null;fe=!0;return ee;case \"textInput\":return a=b.data,a===ee&&fe?null:a;default:return null}}\nfunction ke(a,b){if(ie)return\"compositionend\"===a||!ae&&ge(a,b)?(a=nd(),md=ld=kd=null,ie=!1,a):null;switch(a){case \"paste\":return null;case \"keypress\":if(!(b.ctrlKey||b.altKey||b.metaKey)||b.ctrlKey&&b.altKey){if(b.char&&1<b.char.length)return b.char;if(b.which)return String.fromCharCode(b.which)}return null;case \"compositionend\":return de&&\"ko\"!==b.locale?null:b.data;default:return null}}\nvar le={color:!0,date:!0,datetime:!0,\"datetime-local\":!0,email:!0,month:!0,number:!0,password:!0,range:!0,search:!0,tel:!0,text:!0,time:!0,url:!0,week:!0};function me(a){var b=a&&a.nodeName&&a.nodeName.toLowerCase();return\"input\"===b?!!le[a.type]:\"textarea\"===b?!0:!1}function ne(a,b,c,d){Eb(d);b=oe(b,\"onChange\");0<b.length&&(c=new td(\"onChange\",\"change\",null,c,d),a.push({event:c,listeners:b}))}var pe=null,qe=null;function re(a){se(a,0)}function te(a){var b=ue(a);if(Wa(b))return a}\nfunction ve(a,b){if(\"change\"===a)return b}var we=!1;if(ia){var xe;if(ia){var ye=\"oninput\"in document;if(!ye){var ze=document.createElement(\"div\");ze.setAttribute(\"oninput\",\"return;\");ye=\"function\"===typeof ze.oninput}xe=ye}else xe=!1;we=xe&&(!document.documentMode||9<document.documentMode)}function Ae(){pe&&(pe.detachEvent(\"onpropertychange\",Be),qe=pe=null)}function Be(a){if(\"value\"===a.propertyName&&te(qe)){var b=[];ne(b,qe,a,xb(a));Jb(re,b)}}\nfunction Ce(a,b,c){\"focusin\"===a?(Ae(),pe=b,qe=c,pe.attachEvent(\"onpropertychange\",Be)):\"focusout\"===a&&Ae()}function De(a){if(\"selectionchange\"===a||\"keyup\"===a||\"keydown\"===a)return te(qe)}function Ee(a,b){if(\"click\"===a)return te(b)}function Fe(a,b){if(\"input\"===a||\"change\"===a)return te(b)}function Ge(a,b){return a===b&&(0!==a||1/a===1/b)||a!==a&&b!==b}var He=\"function\"===typeof Object.is?Object.is:Ge;\nfunction Ie(a,b){if(He(a,b))return!0;if(\"object\"!==typeof a||null===a||\"object\"!==typeof b||null===b)return!1;var c=Object.keys(a),d=Object.keys(b);if(c.length!==d.length)return!1;for(d=0;d<c.length;d++){var e=c[d];if(!ja.call(b,e)||!He(a[e],b[e]))return!1}return!0}function Je(a){for(;a&&a.firstChild;)a=a.firstChild;return a}\nfunction Ke(a,b){var c=Je(a);a=0;for(var d;c;){if(3===c.nodeType){d=a+c.textContent.length;if(a<=b&&d>=b)return{node:c,offset:b-a};a=d}a:{for(;c;){if(c.nextSibling){c=c.nextSibling;break a}c=c.parentNode}c=void 0}c=Je(c)}}function Le(a,b){return a&&b?a===b?!0:a&&3===a.nodeType?!1:b&&3===b.nodeType?Le(a,b.parentNode):\"contains\"in a?a.contains(b):a.compareDocumentPosition?!!(a.compareDocumentPosition(b)&16):!1:!1}\nfunction Me(){for(var a=window,b=Xa();b instanceof a.HTMLIFrameElement;){try{var c=\"string\"===typeof b.contentWindow.location.href}catch(d){c=!1}if(c)a=b.contentWindow;else break;b=Xa(a.document)}return b}function Ne(a){var b=a&&a.nodeName&&a.nodeName.toLowerCase();return b&&(\"input\"===b&&(\"text\"===a.type||\"search\"===a.type||\"tel\"===a.type||\"url\"===a.type||\"password\"===a.type)||\"textarea\"===b||\"true\"===a.contentEditable)}\nfunction Oe(a){var b=Me(),c=a.focusedElem,d=a.selectionRange;if(b!==c&&c&&c.ownerDocument&&Le(c.ownerDocument.documentElement,c)){if(null!==d&&Ne(c))if(b=d.start,a=d.end,void 0===a&&(a=b),\"selectionStart\"in c)c.selectionStart=b,c.selectionEnd=Math.min(a,c.value.length);else if(a=(b=c.ownerDocument||document)&&b.defaultView||window,a.getSelection){a=a.getSelection();var e=c.textContent.length,f=Math.min(d.start,e);d=void 0===d.end?f:Math.min(d.end,e);!a.extend&&f>d&&(e=d,d=f,f=e);e=Ke(c,f);var g=Ke(c,\nd);e&&g&&(1!==a.rangeCount||a.anchorNode!==e.node||a.anchorOffset!==e.offset||a.focusNode!==g.node||a.focusOffset!==g.offset)&&(b=b.createRange(),b.setStart(e.node,e.offset),a.removeAllRanges(),f>d?(a.addRange(b),a.extend(g.node,g.offset)):(b.setEnd(g.node,g.offset),a.addRange(b)))}b=[];for(a=c;a=a.parentNode;)1===a.nodeType&&b.push({element:a,left:a.scrollLeft,top:a.scrollTop});\"function\"===typeof c.focus&&c.focus();for(c=0;c<b.length;c++)a=b[c],a.element.scrollLeft=a.left,a.element.scrollTop=a.top}}\nvar Pe=ia&&\"documentMode\"in document&&11>=document.documentMode,Qe=null,Re=null,Se=null,Te=!1;\nfunction Ue(a,b,c){var d=c.window===c?c.document:9===c.nodeType?c:c.ownerDocument;Te||null==Qe||Qe!==Xa(d)||(d=Qe,\"selectionStart\"in d&&Ne(d)?d={start:d.selectionStart,end:d.selectionEnd}:(d=(d.ownerDocument&&d.ownerDocument.defaultView||window).getSelection(),d={anchorNode:d.anchorNode,anchorOffset:d.anchorOffset,focusNode:d.focusNode,focusOffset:d.focusOffset}),Se&&Ie(Se,d)||(Se=d,d=oe(Re,\"onSelect\"),0<d.length&&(b=new td(\"onSelect\",\"select\",null,b,c),a.push({event:b,listeners:d}),b.target=Qe)))}\nfunction Ve(a,b){var c={};c[a.toLowerCase()]=b.toLowerCase();c[\"Webkit\"+a]=\"webkit\"+b;c[\"Moz\"+a]=\"moz\"+b;return c}var We={animationend:Ve(\"Animation\",\"AnimationEnd\"),animationiteration:Ve(\"Animation\",\"AnimationIteration\"),animationstart:Ve(\"Animation\",\"AnimationStart\"),transitionend:Ve(\"Transition\",\"TransitionEnd\")},Xe={},Ye={};\nia&&(Ye=document.createElement(\"div\").style,\"AnimationEvent\"in window||(delete We.animationend.animation,delete We.animationiteration.animation,delete We.animationstart.animation),\"TransitionEvent\"in window||delete We.transitionend.transition);function Ze(a){if(Xe[a])return Xe[a];if(!We[a])return a;var b=We[a],c;for(c in b)if(b.hasOwnProperty(c)&&c in Ye)return Xe[a]=b[c];return a}var $e=Ze(\"animationend\"),af=Ze(\"animationiteration\"),bf=Ze(\"animationstart\"),cf=Ze(\"transitionend\"),df=new Map,ef=\"abort auxClick cancel canPlay canPlayThrough click close contextMenu copy cut drag dragEnd dragEnter dragExit dragLeave dragOver dragStart drop durationChange emptied encrypted ended error gotPointerCapture input invalid keyDown keyPress keyUp load loadedData loadedMetadata loadStart lostPointerCapture mouseDown mouseMove mouseOut mouseOver mouseUp paste pause play playing pointerCancel pointerDown pointerMove pointerOut pointerOver pointerUp progress rateChange reset resize seeked seeking stalled submit suspend timeUpdate touchCancel touchEnd touchStart volumeChange scroll toggle touchMove waiting wheel\".split(\" \");\nfunction ff(a,b){df.set(a,b);fa(b,[a])}for(var gf=0;gf<ef.length;gf++){var hf=ef[gf],jf=hf.toLowerCase(),kf=hf[0].toUpperCase()+hf.slice(1);ff(jf,\"on\"+kf)}ff($e,\"onAnimationEnd\");ff(af,\"onAnimationIteration\");ff(bf,\"onAnimationStart\");ff(\"dblclick\",\"onDoubleClick\");ff(\"focusin\",\"onFocus\");ff(\"focusout\",\"onBlur\");ff(cf,\"onTransitionEnd\");ha(\"onMouseEnter\",[\"mouseout\",\"mouseover\"]);ha(\"onMouseLeave\",[\"mouseout\",\"mouseover\"]);ha(\"onPointerEnter\",[\"pointerout\",\"pointerover\"]);\nha(\"onPointerLeave\",[\"pointerout\",\"pointerover\"]);fa(\"onChange\",\"change click focusin focusout input keydown keyup selectionchange\".split(\" \"));fa(\"onSelect\",\"focusout contextmenu dragend focusin keydown keyup mousedown mouseup selectionchange\".split(\" \"));fa(\"onBeforeInput\",[\"compositionend\",\"keypress\",\"textInput\",\"paste\"]);fa(\"onCompositionEnd\",\"compositionend focusout keydown keypress keyup mousedown\".split(\" \"));fa(\"onCompositionStart\",\"compositionstart focusout keydown keypress keyup mousedown\".split(\" \"));\nfa(\"onCompositionUpdate\",\"compositionupdate focusout keydown keypress keyup mousedown\".split(\" \"));var lf=\"abort canplay canplaythrough durationchange emptied encrypted ended error loadeddata loadedmetadata loadstart pause play playing progress ratechange resize seeked seeking stalled suspend timeupdate volumechange waiting\".split(\" \"),mf=new Set(\"cancel close invalid load scroll toggle\".split(\" \").concat(lf));\nfunction nf(a,b,c){var d=a.type||\"unknown-event\";a.currentTarget=c;Ub(d,b,void 0,a);a.currentTarget=null}\nfunction se(a,b){b=0!==(b&4);for(var c=0;c<a.length;c++){var d=a[c],e=d.event;d=d.listeners;a:{var f=void 0;if(b)for(var g=d.length-1;0<=g;g--){var h=d[g],k=h.instance,l=h.currentTarget;h=h.listener;if(k!==f&&e.isPropagationStopped())break a;nf(e,h,l);f=k}else for(g=0;g<d.length;g++){h=d[g];k=h.instance;l=h.currentTarget;h=h.listener;if(k!==f&&e.isPropagationStopped())break a;nf(e,h,l);f=k}}}if(Qb)throw a=Rb,Qb=!1,Rb=null,a;}\nfunction D(a,b){var c=b[of];void 0===c&&(c=b[of]=new Set);var d=a+\"__bubble\";c.has(d)||(pf(b,a,2,!1),c.add(d))}function qf(a,b,c){var d=0;b&&(d|=4);pf(c,a,d,b)}var rf=\"_reactListening\"+Math.random().toString(36).slice(2);function sf(a){if(!a[rf]){a[rf]=!0;da.forEach(function(b){\"selectionchange\"!==b&&(mf.has(b)||qf(b,!1,a),qf(b,!0,a))});var b=9===a.nodeType?a:a.ownerDocument;null===b||b[rf]||(b[rf]=!0,qf(\"selectionchange\",!1,b))}}\nfunction pf(a,b,c,d){switch(jd(b)){case 1:var e=ed;break;case 4:e=gd;break;default:e=fd}c=e.bind(null,b,c,a);e=void 0;!Lb||\"touchstart\"!==b&&\"touchmove\"!==b&&\"wheel\"!==b||(e=!0);d?void 0!==e?a.addEventListener(b,c,{capture:!0,passive:e}):a.addEventListener(b,c,!0):void 0!==e?a.addEventListener(b,c,{passive:e}):a.addEventListener(b,c,!1)}\nfunction hd(a,b,c,d,e){var f=d;if(0===(b&1)&&0===(b&2)&&null!==d)a:for(;;){if(null===d)return;var g=d.tag;if(3===g||4===g){var h=d.stateNode.containerInfo;if(h===e||8===h.nodeType&&h.parentNode===e)break;if(4===g)for(g=d.return;null!==g;){var k=g.tag;if(3===k||4===k)if(k=g.stateNode.containerInfo,k===e||8===k.nodeType&&k.parentNode===e)return;g=g.return}for(;null!==h;){g=Wc(h);if(null===g)return;k=g.tag;if(5===k||6===k){d=f=g;continue a}h=h.parentNode}}d=d.return}Jb(function(){var d=f,e=xb(c),g=[];\na:{var h=df.get(a);if(void 0!==h){var k=td,n=a;switch(a){case \"keypress\":if(0===od(c))break a;case \"keydown\":case \"keyup\":k=Rd;break;case \"focusin\":n=\"focus\";k=Fd;break;case \"focusout\":n=\"blur\";k=Fd;break;case \"beforeblur\":case \"afterblur\":k=Fd;break;case \"click\":if(2===c.button)break a;case \"auxclick\":case \"dblclick\":case \"mousedown\":case \"mousemove\":case \"mouseup\":case \"mouseout\":case \"mouseover\":case \"contextmenu\":k=Bd;break;case \"drag\":case \"dragend\":case \"dragenter\":case \"dragexit\":case \"dragleave\":case \"dragover\":case \"dragstart\":case \"drop\":k=\nDd;break;case \"touchcancel\":case \"touchend\":case \"touchmove\":case \"touchstart\":k=Vd;break;case $e:case af:case bf:k=Hd;break;case cf:k=Xd;break;case \"scroll\":k=vd;break;case \"wheel\":k=Zd;break;case \"copy\":case \"cut\":case \"paste\":k=Jd;break;case \"gotpointercapture\":case \"lostpointercapture\":case \"pointercancel\":case \"pointerdown\":case \"pointermove\":case \"pointerout\":case \"pointerover\":case \"pointerup\":k=Td}var t=0!==(b&4),J=!t&&\"scroll\"===a,x=t?null!==h?h+\"Capture\":null:h;t=[];for(var w=d,u;null!==\nw;){u=w;var F=u.stateNode;5===u.tag&&null!==F&&(u=F,null!==x&&(F=Kb(w,x),null!=F&&t.push(tf(w,F,u))));if(J)break;w=w.return}0<t.length&&(h=new k(h,n,null,c,e),g.push({event:h,listeners:t}))}}if(0===(b&7)){a:{h=\"mouseover\"===a||\"pointerover\"===a;k=\"mouseout\"===a||\"pointerout\"===a;if(h&&c!==wb&&(n=c.relatedTarget||c.fromElement)&&(Wc(n)||n[uf]))break a;if(k||h){h=e.window===e?e:(h=e.ownerDocument)?h.defaultView||h.parentWindow:window;if(k){if(n=c.relatedTarget||c.toElement,k=d,n=n?Wc(n):null,null!==\nn&&(J=Vb(n),n!==J||5!==n.tag&&6!==n.tag))n=null}else k=null,n=d;if(k!==n){t=Bd;F=\"onMouseLeave\";x=\"onMouseEnter\";w=\"mouse\";if(\"pointerout\"===a||\"pointerover\"===a)t=Td,F=\"onPointerLeave\",x=\"onPointerEnter\",w=\"pointer\";J=null==k?h:ue(k);u=null==n?h:ue(n);h=new t(F,w+\"leave\",k,c,e);h.target=J;h.relatedTarget=u;F=null;Wc(e)===d&&(t=new t(x,w+\"enter\",n,c,e),t.target=u,t.relatedTarget=J,F=t);J=F;if(k&&n)b:{t=k;x=n;w=0;for(u=t;u;u=vf(u))w++;u=0;for(F=x;F;F=vf(F))u++;for(;0<w-u;)t=vf(t),w--;for(;0<u-w;)x=\nvf(x),u--;for(;w--;){if(t===x||null!==x&&t===x.alternate)break b;t=vf(t);x=vf(x)}t=null}else t=null;null!==k&&wf(g,h,k,t,!1);null!==n&&null!==J&&wf(g,J,n,t,!0)}}}a:{h=d?ue(d):window;k=h.nodeName&&h.nodeName.toLowerCase();if(\"select\"===k||\"input\"===k&&\"file\"===h.type)var na=ve;else if(me(h))if(we)na=Fe;else{na=De;var xa=Ce}else(k=h.nodeName)&&\"input\"===k.toLowerCase()&&(\"checkbox\"===h.type||\"radio\"===h.type)&&(na=Ee);if(na&&(na=na(a,d))){ne(g,na,c,e);break a}xa&&xa(a,h,d);\"focusout\"===a&&(xa=h._wrapperState)&&\nxa.controlled&&\"number\"===h.type&&cb(h,\"number\",h.value)}xa=d?ue(d):window;switch(a){case \"focusin\":if(me(xa)||\"true\"===xa.contentEditable)Qe=xa,Re=d,Se=null;break;case \"focusout\":Se=Re=Qe=null;break;case \"mousedown\":Te=!0;break;case \"contextmenu\":case \"mouseup\":case \"dragend\":Te=!1;Ue(g,c,e);break;case \"selectionchange\":if(Pe)break;case \"keydown\":case \"keyup\":Ue(g,c,e)}var $a;if(ae)b:{switch(a){case \"compositionstart\":var ba=\"onCompositionStart\";break b;case \"compositionend\":ba=\"onCompositionEnd\";\nbreak b;case \"compositionupdate\":ba=\"onCompositionUpdate\";break b}ba=void 0}else ie?ge(a,c)&&(ba=\"onCompositionEnd\"):\"keydown\"===a&&229===c.keyCode&&(ba=\"onCompositionStart\");ba&&(de&&\"ko\"!==c.locale&&(ie||\"onCompositionStart\"!==ba?\"onCompositionEnd\"===ba&&ie&&($a=nd()):(kd=e,ld=\"value\"in kd?kd.value:kd.textContent,ie=!0)),xa=oe(d,ba),0<xa.length&&(ba=new Ld(ba,a,null,c,e),g.push({event:ba,listeners:xa}),$a?ba.data=$a:($a=he(c),null!==$a&&(ba.data=$a))));if($a=ce?je(a,c):ke(a,c))d=oe(d,\"onBeforeInput\"),\n0<d.length&&(e=new Ld(\"onBeforeInput\",\"beforeinput\",null,c,e),g.push({event:e,listeners:d}),e.data=$a)}se(g,b)})}function tf(a,b,c){return{instance:a,listener:b,currentTarget:c}}function oe(a,b){for(var c=b+\"Capture\",d=[];null!==a;){var e=a,f=e.stateNode;5===e.tag&&null!==f&&(e=f,f=Kb(a,c),null!=f&&d.unshift(tf(a,f,e)),f=Kb(a,b),null!=f&&d.push(tf(a,f,e)));a=a.return}return d}function vf(a){if(null===a)return null;do a=a.return;while(a&&5!==a.tag);return a?a:null}\nfunction wf(a,b,c,d,e){for(var f=b._reactName,g=[];null!==c&&c!==d;){var h=c,k=h.alternate,l=h.stateNode;if(null!==k&&k===d)break;5===h.tag&&null!==l&&(h=l,e?(k=Kb(c,f),null!=k&&g.unshift(tf(c,k,h))):e||(k=Kb(c,f),null!=k&&g.push(tf(c,k,h))));c=c.return}0!==g.length&&a.push({event:b,listeners:g})}var xf=/\\r\\n?/g,yf=/\\u0000|\\uFFFD/g;function zf(a){return(\"string\"===typeof a?a:\"\"+a).replace(xf,\"\\n\").replace(yf,\"\")}function Af(a,b,c){b=zf(b);if(zf(a)!==b&&c)throw Error(p(425));}function Bf(){}\nvar Cf=null,Df=null;function Ef(a,b){return\"textarea\"===a||\"noscript\"===a||\"string\"===typeof b.children||\"number\"===typeof b.children||\"object\"===typeof b.dangerouslySetInnerHTML&&null!==b.dangerouslySetInnerHTML&&null!=b.dangerouslySetInnerHTML.__html}\nvar Ff=\"function\"===typeof setTimeout?setTimeout:void 0,Gf=\"function\"===typeof clearTimeout?clearTimeout:void 0,Hf=\"function\"===typeof Promise?Promise:void 0,Jf=\"function\"===typeof queueMicrotask?queueMicrotask:\"undefined\"!==typeof Hf?function(a){return Hf.resolve(null).then(a).catch(If)}:Ff;function If(a){setTimeout(function(){throw a;})}\nfunction Kf(a,b){var c=b,d=0;do{var e=c.nextSibling;a.removeChild(c);if(e&&8===e.nodeType)if(c=e.data,\"/$\"===c){if(0===d){a.removeChild(e);bd(b);return}d--}else\"$\"!==c&&\"$?\"!==c&&\"$!\"!==c||d++;c=e}while(c);bd(b)}function Lf(a){for(;null!=a;a=a.nextSibling){var b=a.nodeType;if(1===b||3===b)break;if(8===b){b=a.data;if(\"$\"===b||\"$!\"===b||\"$?\"===b)break;if(\"/$\"===b)return null}}return a}\nfunction Mf(a){a=a.previousSibling;for(var b=0;a;){if(8===a.nodeType){var c=a.data;if(\"$\"===c||\"$!\"===c||\"$?\"===c){if(0===b)return a;b--}else\"/$\"===c&&b++}a=a.previousSibling}return null}var Nf=Math.random().toString(36).slice(2),Of=\"__reactFiber$\"+Nf,Pf=\"__reactProps$\"+Nf,uf=\"__reactContainer$\"+Nf,of=\"__reactEvents$\"+Nf,Qf=\"__reactListeners$\"+Nf,Rf=\"__reactHandles$\"+Nf;\nfunction Wc(a){var b=a[Of];if(b)return b;for(var c=a.parentNode;c;){if(b=c[uf]||c[Of]){c=b.alternate;if(null!==b.child||null!==c&&null!==c.child)for(a=Mf(a);null!==a;){if(c=a[Of])return c;a=Mf(a)}return b}a=c;c=a.parentNode}return null}function Cb(a){a=a[Of]||a[uf];return!a||5!==a.tag&&6!==a.tag&&13!==a.tag&&3!==a.tag?null:a}function ue(a){if(5===a.tag||6===a.tag)return a.stateNode;throw Error(p(33));}function Db(a){return a[Pf]||null}var Sf=[],Tf=-1;function Uf(a){return{current:a}}\nfunction E(a){0>Tf||(a.current=Sf[Tf],Sf[Tf]=null,Tf--)}function G(a,b){Tf++;Sf[Tf]=a.current;a.current=b}var Vf={},H=Uf(Vf),Wf=Uf(!1),Xf=Vf;function Yf(a,b){var c=a.type.contextTypes;if(!c)return Vf;var d=a.stateNode;if(d&&d.__reactInternalMemoizedUnmaskedChildContext===b)return d.__reactInternalMemoizedMaskedChildContext;var e={},f;for(f in c)e[f]=b[f];d&&(a=a.stateNode,a.__reactInternalMemoizedUnmaskedChildContext=b,a.__reactInternalMemoizedMaskedChildContext=e);return e}\nfunction Zf(a){a=a.childContextTypes;return null!==a&&void 0!==a}function $f(){E(Wf);E(H)}function ag(a,b,c){if(H.current!==Vf)throw Error(p(168));G(H,b);G(Wf,c)}function bg(a,b,c){var d=a.stateNode;b=b.childContextTypes;if(\"function\"!==typeof d.getChildContext)return c;d=d.getChildContext();for(var e in d)if(!(e in b))throw Error(p(108,Ra(a)||\"Unknown\",e));return A({},c,d)}\nfunction cg(a){a=(a=a.stateNode)&&a.__reactInternalMemoizedMergedChildContext||Vf;Xf=H.current;G(H,a);G(Wf,Wf.current);return!0}function dg(a,b,c){var d=a.stateNode;if(!d)throw Error(p(169));c?(a=bg(a,b,Xf),d.__reactInternalMemoizedMergedChildContext=a,E(Wf),E(H),G(H,a)):E(Wf);G(Wf,c)}var eg=null,fg=!1,gg=!1;function hg(a){null===eg?eg=[a]:eg.push(a)}function ig(a){fg=!0;hg(a)}\nfunction jg(){if(!gg&&null!==eg){gg=!0;var a=0,b=C;try{var c=eg;for(C=1;a<c.length;a++){var d=c[a];do d=d(!0);while(null!==d)}eg=null;fg=!1}catch(e){throw null!==eg&&(eg=eg.slice(a+1)),ac(fc,jg),e;}finally{C=b,gg=!1}}return null}var kg=[],lg=0,mg=null,ng=0,og=[],pg=0,qg=null,rg=1,sg=\"\";function tg(a,b){kg[lg++]=ng;kg[lg++]=mg;mg=a;ng=b}\nfunction ug(a,b,c){og[pg++]=rg;og[pg++]=sg;og[pg++]=qg;qg=a;var d=rg;a=sg;var e=32-oc(d)-1;d&=~(1<<e);c+=1;var f=32-oc(b)+e;if(30<f){var g=e-e%5;f=(d&(1<<g)-1).toString(32);d>>=g;e-=g;rg=1<<32-oc(b)+e|c<<e|d;sg=f+a}else rg=1<<f|c<<e|d,sg=a}function vg(a){null!==a.return&&(tg(a,1),ug(a,1,0))}function wg(a){for(;a===mg;)mg=kg[--lg],kg[lg]=null,ng=kg[--lg],kg[lg]=null;for(;a===qg;)qg=og[--pg],og[pg]=null,sg=og[--pg],og[pg]=null,rg=og[--pg],og[pg]=null}var xg=null,yg=null,I=!1,zg=null;\nfunction Ag(a,b){var c=Bg(5,null,null,0);c.elementType=\"DELETED\";c.stateNode=b;c.return=a;b=a.deletions;null===b?(a.deletions=[c],a.flags|=16):b.push(c)}\nfunction Cg(a,b){switch(a.tag){case 5:var c=a.type;b=1!==b.nodeType||c.toLowerCase()!==b.nodeName.toLowerCase()?null:b;return null!==b?(a.stateNode=b,xg=a,yg=Lf(b.firstChild),!0):!1;case 6:return b=\"\"===a.pendingProps||3!==b.nodeType?null:b,null!==b?(a.stateNode=b,xg=a,yg=null,!0):!1;case 13:return b=8!==b.nodeType?null:b,null!==b?(c=null!==qg?{id:rg,overflow:sg}:null,a.memoizedState={dehydrated:b,treeContext:c,retryLane:1073741824},c=Bg(18,null,null,0),c.stateNode=b,c.return=a,a.child=c,xg=a,yg=\nnull,!0):!1;default:return!1}}function Dg(a){return 0!==(a.mode&1)&&0===(a.flags&128)}function Eg(a){if(I){var b=yg;if(b){var c=b;if(!Cg(a,b)){if(Dg(a))throw Error(p(418));b=Lf(c.nextSibling);var d=xg;b&&Cg(a,b)?Ag(d,c):(a.flags=a.flags&-4097|2,I=!1,xg=a)}}else{if(Dg(a))throw Error(p(418));a.flags=a.flags&-4097|2;I=!1;xg=a}}}function Fg(a){for(a=a.return;null!==a&&5!==a.tag&&3!==a.tag&&13!==a.tag;)a=a.return;xg=a}\nfunction Gg(a){if(a!==xg)return!1;if(!I)return Fg(a),I=!0,!1;var b;(b=3!==a.tag)&&!(b=5!==a.tag)&&(b=a.type,b=\"head\"!==b&&\"body\"!==b&&!Ef(a.type,a.memoizedProps));if(b&&(b=yg)){if(Dg(a))throw Hg(),Error(p(418));for(;b;)Ag(a,b),b=Lf(b.nextSibling)}Fg(a);if(13===a.tag){a=a.memoizedState;a=null!==a?a.dehydrated:null;if(!a)throw Error(p(317));a:{a=a.nextSibling;for(b=0;a;){if(8===a.nodeType){var c=a.data;if(\"/$\"===c){if(0===b){yg=Lf(a.nextSibling);break a}b--}else\"$\"!==c&&\"$!\"!==c&&\"$?\"!==c||b++}a=a.nextSibling}yg=\nnull}}else yg=xg?Lf(a.stateNode.nextSibling):null;return!0}function Hg(){for(var a=yg;a;)a=Lf(a.nextSibling)}function Ig(){yg=xg=null;I=!1}function Jg(a){null===zg?zg=[a]:zg.push(a)}var Kg=ua.ReactCurrentBatchConfig;function Lg(a,b){if(a&&a.defaultProps){b=A({},b);a=a.defaultProps;for(var c in a)void 0===b[c]&&(b[c]=a[c]);return b}return b}var Mg=Uf(null),Ng=null,Og=null,Pg=null;function Qg(){Pg=Og=Ng=null}function Rg(a){var b=Mg.current;E(Mg);a._currentValue=b}\nfunction Sg(a,b,c){for(;null!==a;){var d=a.alternate;(a.childLanes&b)!==b?(a.childLanes|=b,null!==d&&(d.childLanes|=b)):null!==d&&(d.childLanes&b)!==b&&(d.childLanes|=b);if(a===c)break;a=a.return}}function Tg(a,b){Ng=a;Pg=Og=null;a=a.dependencies;null!==a&&null!==a.firstContext&&(0!==(a.lanes&b)&&(Ug=!0),a.firstContext=null)}\nfunction Vg(a){var b=a._currentValue;if(Pg!==a)if(a={context:a,memoizedValue:b,next:null},null===Og){if(null===Ng)throw Error(p(308));Og=a;Ng.dependencies={lanes:0,firstContext:a}}else Og=Og.next=a;return b}var Wg=null;function Xg(a){null===Wg?Wg=[a]:Wg.push(a)}function Yg(a,b,c,d){var e=b.interleaved;null===e?(c.next=c,Xg(b)):(c.next=e.next,e.next=c);b.interleaved=c;return Zg(a,d)}\nfunction Zg(a,b){a.lanes|=b;var c=a.alternate;null!==c&&(c.lanes|=b);c=a;for(a=a.return;null!==a;)a.childLanes|=b,c=a.alternate,null!==c&&(c.childLanes|=b),c=a,a=a.return;return 3===c.tag?c.stateNode:null}var $g=!1;function ah(a){a.updateQueue={baseState:a.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,interleaved:null,lanes:0},effects:null}}\nfunction bh(a,b){a=a.updateQueue;b.updateQueue===a&&(b.updateQueue={baseState:a.baseState,firstBaseUpdate:a.firstBaseUpdate,lastBaseUpdate:a.lastBaseUpdate,shared:a.shared,effects:a.effects})}function ch(a,b){return{eventTime:a,lane:b,tag:0,payload:null,callback:null,next:null}}\nfunction dh(a,b,c){var d=a.updateQueue;if(null===d)return null;d=d.shared;if(0!==(K&2)){var e=d.pending;null===e?b.next=b:(b.next=e.next,e.next=b);d.pending=b;return Zg(a,c)}e=d.interleaved;null===e?(b.next=b,Xg(d)):(b.next=e.next,e.next=b);d.interleaved=b;return Zg(a,c)}function eh(a,b,c){b=b.updateQueue;if(null!==b&&(b=b.shared,0!==(c&4194240))){var d=b.lanes;d&=a.pendingLanes;c|=d;b.lanes=c;Cc(a,c)}}\nfunction fh(a,b){var c=a.updateQueue,d=a.alternate;if(null!==d&&(d=d.updateQueue,c===d)){var e=null,f=null;c=c.firstBaseUpdate;if(null!==c){do{var g={eventTime:c.eventTime,lane:c.lane,tag:c.tag,payload:c.payload,callback:c.callback,next:null};null===f?e=f=g:f=f.next=g;c=c.next}while(null!==c);null===f?e=f=b:f=f.next=b}else e=f=b;c={baseState:d.baseState,firstBaseUpdate:e,lastBaseUpdate:f,shared:d.shared,effects:d.effects};a.updateQueue=c;return}a=c.lastBaseUpdate;null===a?c.firstBaseUpdate=b:a.next=\nb;c.lastBaseUpdate=b}\nfunction gh(a,b,c,d){var e=a.updateQueue;$g=!1;var f=e.firstBaseUpdate,g=e.lastBaseUpdate,h=e.shared.pending;if(null!==h){e.shared.pending=null;var k=h,l=k.next;k.next=null;null===g?f=l:g.next=l;g=k;var m=a.alternate;null!==m&&(m=m.updateQueue,h=m.lastBaseUpdate,h!==g&&(null===h?m.firstBaseUpdate=l:h.next=l,m.lastBaseUpdate=k))}if(null!==f){var q=e.baseState;g=0;m=l=k=null;h=f;do{var r=h.lane,y=h.eventTime;if((d&r)===r){null!==m&&(m=m.next={eventTime:y,lane:0,tag:h.tag,payload:h.payload,callback:h.callback,\nnext:null});a:{var n=a,t=h;r=b;y=c;switch(t.tag){case 1:n=t.payload;if(\"function\"===typeof n){q=n.call(y,q,r);break a}q=n;break a;case 3:n.flags=n.flags&-65537|128;case 0:n=t.payload;r=\"function\"===typeof n?n.call(y,q,r):n;if(null===r||void 0===r)break a;q=A({},q,r);break a;case 2:$g=!0}}null!==h.callback&&0!==h.lane&&(a.flags|=64,r=e.effects,null===r?e.effects=[h]:r.push(h))}else y={eventTime:y,lane:r,tag:h.tag,payload:h.payload,callback:h.callback,next:null},null===m?(l=m=y,k=q):m=m.next=y,g|=r;\nh=h.next;if(null===h)if(h=e.shared.pending,null===h)break;else r=h,h=r.next,r.next=null,e.lastBaseUpdate=r,e.shared.pending=null}while(1);null===m&&(k=q);e.baseState=k;e.firstBaseUpdate=l;e.lastBaseUpdate=m;b=e.shared.interleaved;if(null!==b){e=b;do g|=e.lane,e=e.next;while(e!==b)}else null===f&&(e.shared.lanes=0);hh|=g;a.lanes=g;a.memoizedState=q}}\nfunction ih(a,b,c){a=b.effects;b.effects=null;if(null!==a)for(b=0;b<a.length;b++){var d=a[b],e=d.callback;if(null!==e){d.callback=null;d=c;if(\"function\"!==typeof e)throw Error(p(191,e));e.call(d)}}}var jh=(new aa.Component).refs;function kh(a,b,c,d){b=a.memoizedState;c=c(d,b);c=null===c||void 0===c?b:A({},b,c);a.memoizedState=c;0===a.lanes&&(a.updateQueue.baseState=c)}\nvar nh={isMounted:function(a){return(a=a._reactInternals)?Vb(a)===a:!1},enqueueSetState:function(a,b,c){a=a._reactInternals;var d=L(),e=lh(a),f=ch(d,e);f.payload=b;void 0!==c&&null!==c&&(f.callback=c);b=dh(a,f,e);null!==b&&(mh(b,a,e,d),eh(b,a,e))},enqueueReplaceState:function(a,b,c){a=a._reactInternals;var d=L(),e=lh(a),f=ch(d,e);f.tag=1;f.payload=b;void 0!==c&&null!==c&&(f.callback=c);b=dh(a,f,e);null!==b&&(mh(b,a,e,d),eh(b,a,e))},enqueueForceUpdate:function(a,b){a=a._reactInternals;var c=L(),d=\nlh(a),e=ch(c,d);e.tag=2;void 0!==b&&null!==b&&(e.callback=b);b=dh(a,e,d);null!==b&&(mh(b,a,d,c),eh(b,a,d))}};function oh(a,b,c,d,e,f,g){a=a.stateNode;return\"function\"===typeof a.shouldComponentUpdate?a.shouldComponentUpdate(d,f,g):b.prototype&&b.prototype.isPureReactComponent?!Ie(c,d)||!Ie(e,f):!0}\nfunction ph(a,b,c){var d=!1,e=Vf;var f=b.contextType;\"object\"===typeof f&&null!==f?f=Vg(f):(e=Zf(b)?Xf:H.current,d=b.contextTypes,f=(d=null!==d&&void 0!==d)?Yf(a,e):Vf);b=new b(c,f);a.memoizedState=null!==b.state&&void 0!==b.state?b.state:null;b.updater=nh;a.stateNode=b;b._reactInternals=a;d&&(a=a.stateNode,a.__reactInternalMemoizedUnmaskedChildContext=e,a.__reactInternalMemoizedMaskedChildContext=f);return b}\nfunction qh(a,b,c,d){a=b.state;\"function\"===typeof b.componentWillReceiveProps&&b.componentWillReceiveProps(c,d);\"function\"===typeof b.UNSAFE_componentWillReceiveProps&&b.UNSAFE_componentWillReceiveProps(c,d);b.state!==a&&nh.enqueueReplaceState(b,b.state,null)}\nfunction rh(a,b,c,d){var e=a.stateNode;e.props=c;e.state=a.memoizedState;e.refs=jh;ah(a);var f=b.contextType;\"object\"===typeof f&&null!==f?e.context=Vg(f):(f=Zf(b)?Xf:H.current,e.context=Yf(a,f));e.state=a.memoizedState;f=b.getDerivedStateFromProps;\"function\"===typeof f&&(kh(a,b,f,c),e.state=a.memoizedState);\"function\"===typeof b.getDerivedStateFromProps||\"function\"===typeof e.getSnapshotBeforeUpdate||\"function\"!==typeof e.UNSAFE_componentWillMount&&\"function\"!==typeof e.componentWillMount||(b=e.state,\n\"function\"===typeof e.componentWillMount&&e.componentWillMount(),\"function\"===typeof e.UNSAFE_componentWillMount&&e.UNSAFE_componentWillMount(),b!==e.state&&nh.enqueueReplaceState(e,e.state,null),gh(a,c,e,d),e.state=a.memoizedState);\"function\"===typeof e.componentDidMount&&(a.flags|=4194308)}\nfunction sh(a,b,c){a=c.ref;if(null!==a&&\"function\"!==typeof a&&\"object\"!==typeof a){if(c._owner){c=c._owner;if(c){if(1!==c.tag)throw Error(p(309));var d=c.stateNode}if(!d)throw Error(p(147,a));var e=d,f=\"\"+a;if(null!==b&&null!==b.ref&&\"function\"===typeof b.ref&&b.ref._stringRef===f)return b.ref;b=function(a){var b=e.refs;b===jh&&(b=e.refs={});null===a?delete b[f]:b[f]=a};b._stringRef=f;return b}if(\"string\"!==typeof a)throw Error(p(284));if(!c._owner)throw Error(p(290,a));}return a}\nfunction th(a,b){a=Object.prototype.toString.call(b);throw Error(p(31,\"[object Object]\"===a?\"object with keys {\"+Object.keys(b).join(\", \")+\"}\":a));}function uh(a){var b=a._init;return b(a._payload)}\nfunction vh(a){function b(b,c){if(a){var d=b.deletions;null===d?(b.deletions=[c],b.flags|=16):d.push(c)}}function c(c,d){if(!a)return null;for(;null!==d;)b(c,d),d=d.sibling;return null}function d(a,b){for(a=new Map;null!==b;)null!==b.key?a.set(b.key,b):a.set(b.index,b),b=b.sibling;return a}function e(a,b){a=wh(a,b);a.index=0;a.sibling=null;return a}function f(b,c,d){b.index=d;if(!a)return b.flags|=1048576,c;d=b.alternate;if(null!==d)return d=d.index,d<c?(b.flags|=2,c):d;b.flags|=2;return c}function g(b){a&&\nnull===b.alternate&&(b.flags|=2);return b}function h(a,b,c,d){if(null===b||6!==b.tag)return b=xh(c,a.mode,d),b.return=a,b;b=e(b,c);b.return=a;return b}function k(a,b,c,d){var f=c.type;if(f===ya)return m(a,b,c.props.children,d,c.key);if(null!==b&&(b.elementType===f||\"object\"===typeof f&&null!==f&&f.$$typeof===Ha&&uh(f)===b.type))return d=e(b,c.props),d.ref=sh(a,b,c),d.return=a,d;d=yh(c.type,c.key,c.props,null,a.mode,d);d.ref=sh(a,b,c);d.return=a;return d}function l(a,b,c,d){if(null===b||4!==b.tag||\nb.stateNode.containerInfo!==c.containerInfo||b.stateNode.implementation!==c.implementation)return b=zh(c,a.mode,d),b.return=a,b;b=e(b,c.children||[]);b.return=a;return b}function m(a,b,c,d,f){if(null===b||7!==b.tag)return b=Ah(c,a.mode,d,f),b.return=a,b;b=e(b,c);b.return=a;return b}function q(a,b,c){if(\"string\"===typeof b&&\"\"!==b||\"number\"===typeof b)return b=xh(\"\"+b,a.mode,c),b.return=a,b;if(\"object\"===typeof b&&null!==b){switch(b.$$typeof){case va:return c=yh(b.type,b.key,b.props,null,a.mode,c),\nc.ref=sh(a,null,b),c.return=a,c;case wa:return b=zh(b,a.mode,c),b.return=a,b;case Ha:var d=b._init;return q(a,d(b._payload),c)}if(eb(b)||Ka(b))return b=Ah(b,a.mode,c,null),b.return=a,b;th(a,b)}return null}function r(a,b,c,d){var e=null!==b?b.key:null;if(\"string\"===typeof c&&\"\"!==c||\"number\"===typeof c)return null!==e?null:h(a,b,\"\"+c,d);if(\"object\"===typeof c&&null!==c){switch(c.$$typeof){case va:return c.key===e?k(a,b,c,d):null;case wa:return c.key===e?l(a,b,c,d):null;case Ha:return e=c._init,r(a,\nb,e(c._payload),d)}if(eb(c)||Ka(c))return null!==e?null:m(a,b,c,d,null);th(a,c)}return null}function y(a,b,c,d,e){if(\"string\"===typeof d&&\"\"!==d||\"number\"===typeof d)return a=a.get(c)||null,h(b,a,\"\"+d,e);if(\"object\"===typeof d&&null!==d){switch(d.$$typeof){case va:return a=a.get(null===d.key?c:d.key)||null,k(b,a,d,e);case wa:return a=a.get(null===d.key?c:d.key)||null,l(b,a,d,e);case Ha:var f=d._init;return y(a,b,c,f(d._payload),e)}if(eb(d)||Ka(d))return a=a.get(c)||null,m(b,a,d,e,null);th(b,d)}return null}\nfunction n(e,g,h,k){for(var l=null,m=null,u=g,w=g=0,x=null;null!==u&&w<h.length;w++){u.index>w?(x=u,u=null):x=u.sibling;var n=r(e,u,h[w],k);if(null===n){null===u&&(u=x);break}a&&u&&null===n.alternate&&b(e,u);g=f(n,g,w);null===m?l=n:m.sibling=n;m=n;u=x}if(w===h.length)return c(e,u),I&&tg(e,w),l;if(null===u){for(;w<h.length;w++)u=q(e,h[w],k),null!==u&&(g=f(u,g,w),null===m?l=u:m.sibling=u,m=u);I&&tg(e,w);return l}for(u=d(e,u);w<h.length;w++)x=y(u,e,w,h[w],k),null!==x&&(a&&null!==x.alternate&&u.delete(null===\nx.key?w:x.key),g=f(x,g,w),null===m?l=x:m.sibling=x,m=x);a&&u.forEach(function(a){return b(e,a)});I&&tg(e,w);return l}function t(e,g,h,k){var l=Ka(h);if(\"function\"!==typeof l)throw Error(p(150));h=l.call(h);if(null==h)throw Error(p(151));for(var u=l=null,m=g,w=g=0,x=null,n=h.next();null!==m&&!n.done;w++,n=h.next()){m.index>w?(x=m,m=null):x=m.sibling;var t=r(e,m,n.value,k);if(null===t){null===m&&(m=x);break}a&&m&&null===t.alternate&&b(e,m);g=f(t,g,w);null===u?l=t:u.sibling=t;u=t;m=x}if(n.done)return c(e,\nm),I&&tg(e,w),l;if(null===m){for(;!n.done;w++,n=h.next())n=q(e,n.value,k),null!==n&&(g=f(n,g,w),null===u?l=n:u.sibling=n,u=n);I&&tg(e,w);return l}for(m=d(e,m);!n.done;w++,n=h.next())n=y(m,e,w,n.value,k),null!==n&&(a&&null!==n.alternate&&m.delete(null===n.key?w:n.key),g=f(n,g,w),null===u?l=n:u.sibling=n,u=n);a&&m.forEach(function(a){return b(e,a)});I&&tg(e,w);return l}function J(a,d,f,h){\"object\"===typeof f&&null!==f&&f.type===ya&&null===f.key&&(f=f.props.children);if(\"object\"===typeof f&&null!==f){switch(f.$$typeof){case va:a:{for(var k=\nf.key,l=d;null!==l;){if(l.key===k){k=f.type;if(k===ya){if(7===l.tag){c(a,l.sibling);d=e(l,f.props.children);d.return=a;a=d;break a}}else if(l.elementType===k||\"object\"===typeof k&&null!==k&&k.$$typeof===Ha&&uh(k)===l.type){c(a,l.sibling);d=e(l,f.props);d.ref=sh(a,l,f);d.return=a;a=d;break a}c(a,l);break}else b(a,l);l=l.sibling}f.type===ya?(d=Ah(f.props.children,a.mode,h,f.key),d.return=a,a=d):(h=yh(f.type,f.key,f.props,null,a.mode,h),h.ref=sh(a,d,f),h.return=a,a=h)}return g(a);case wa:a:{for(l=f.key;null!==\nd;){if(d.key===l)if(4===d.tag&&d.stateNode.containerInfo===f.containerInfo&&d.stateNode.implementation===f.implementation){c(a,d.sibling);d=e(d,f.children||[]);d.return=a;a=d;break a}else{c(a,d);break}else b(a,d);d=d.sibling}d=zh(f,a.mode,h);d.return=a;a=d}return g(a);case Ha:return l=f._init,J(a,d,l(f._payload),h)}if(eb(f))return n(a,d,f,h);if(Ka(f))return t(a,d,f,h);th(a,f)}return\"string\"===typeof f&&\"\"!==f||\"number\"===typeof f?(f=\"\"+f,null!==d&&6===d.tag?(c(a,d.sibling),d=e(d,f),d.return=a,a=d):\n(c(a,d),d=xh(f,a.mode,h),d.return=a,a=d),g(a)):c(a,d)}return J}var Bh=vh(!0),Ch=vh(!1),Dh={},Eh=Uf(Dh),Fh=Uf(Dh),Gh=Uf(Dh);function Hh(a){if(a===Dh)throw Error(p(174));return a}function Ih(a,b){G(Gh,b);G(Fh,a);G(Eh,Dh);a=b.nodeType;switch(a){case 9:case 11:b=(b=b.documentElement)?b.namespaceURI:lb(null,\"\");break;default:a=8===a?b.parentNode:b,b=a.namespaceURI||null,a=a.tagName,b=lb(b,a)}E(Eh);G(Eh,b)}function Jh(){E(Eh);E(Fh);E(Gh)}\nfunction Kh(a){Hh(Gh.current);var b=Hh(Eh.current);var c=lb(b,a.type);b!==c&&(G(Fh,a),G(Eh,c))}function Lh(a){Fh.current===a&&(E(Eh),E(Fh))}var M=Uf(0);\nfunction Mh(a){for(var b=a;null!==b;){if(13===b.tag){var c=b.memoizedState;if(null!==c&&(c=c.dehydrated,null===c||\"$?\"===c.data||\"$!\"===c.data))return b}else if(19===b.tag&&void 0!==b.memoizedProps.revealOrder){if(0!==(b.flags&128))return b}else if(null!==b.child){b.child.return=b;b=b.child;continue}if(b===a)break;for(;null===b.sibling;){if(null===b.return||b.return===a)return null;b=b.return}b.sibling.return=b.return;b=b.sibling}return null}var Nh=[];\nfunction Oh(){for(var a=0;a<Nh.length;a++)Nh[a]._workInProgressVersionPrimary=null;Nh.length=0}var Ph=ua.ReactCurrentDispatcher,Qh=ua.ReactCurrentBatchConfig,Rh=0,N=null,O=null,P=null,Sh=!1,Th=!1,Uh=0,Vh=0;function Q(){throw Error(p(321));}function Wh(a,b){if(null===b)return!1;for(var c=0;c<b.length&&c<a.length;c++)if(!He(a[c],b[c]))return!1;return!0}\nfunction Xh(a,b,c,d,e,f){Rh=f;N=b;b.memoizedState=null;b.updateQueue=null;b.lanes=0;Ph.current=null===a||null===a.memoizedState?Yh:Zh;a=c(d,e);if(Th){f=0;do{Th=!1;Uh=0;if(25<=f)throw Error(p(301));f+=1;P=O=null;b.updateQueue=null;Ph.current=$h;a=c(d,e)}while(Th)}Ph.current=ai;b=null!==O&&null!==O.next;Rh=0;P=O=N=null;Sh=!1;if(b)throw Error(p(300));return a}function bi(){var a=0!==Uh;Uh=0;return a}\nfunction ci(){var a={memoizedState:null,baseState:null,baseQueue:null,queue:null,next:null};null===P?N.memoizedState=P=a:P=P.next=a;return P}function di(){if(null===O){var a=N.alternate;a=null!==a?a.memoizedState:null}else a=O.next;var b=null===P?N.memoizedState:P.next;if(null!==b)P=b,O=a;else{if(null===a)throw Error(p(310));O=a;a={memoizedState:O.memoizedState,baseState:O.baseState,baseQueue:O.baseQueue,queue:O.queue,next:null};null===P?N.memoizedState=P=a:P=P.next=a}return P}\nfunction ei(a,b){return\"function\"===typeof b?b(a):b}\nfunction fi(a){var b=di(),c=b.queue;if(null===c)throw Error(p(311));c.lastRenderedReducer=a;var d=O,e=d.baseQueue,f=c.pending;if(null!==f){if(null!==e){var g=e.next;e.next=f.next;f.next=g}d.baseQueue=e=f;c.pending=null}if(null!==e){f=e.next;d=d.baseState;var h=g=null,k=null,l=f;do{var m=l.lane;if((Rh&m)===m)null!==k&&(k=k.next={lane:0,action:l.action,hasEagerState:l.hasEagerState,eagerState:l.eagerState,next:null}),d=l.hasEagerState?l.eagerState:a(d,l.action);else{var q={lane:m,action:l.action,hasEagerState:l.hasEagerState,\neagerState:l.eagerState,next:null};null===k?(h=k=q,g=d):k=k.next=q;N.lanes|=m;hh|=m}l=l.next}while(null!==l&&l!==f);null===k?g=d:k.next=h;He(d,b.memoizedState)||(Ug=!0);b.memoizedState=d;b.baseState=g;b.baseQueue=k;c.lastRenderedState=d}a=c.interleaved;if(null!==a){e=a;do f=e.lane,N.lanes|=f,hh|=f,e=e.next;while(e!==a)}else null===e&&(c.lanes=0);return[b.memoizedState,c.dispatch]}\nfunction gi(a){var b=di(),c=b.queue;if(null===c)throw Error(p(311));c.lastRenderedReducer=a;var d=c.dispatch,e=c.pending,f=b.memoizedState;if(null!==e){c.pending=null;var g=e=e.next;do f=a(f,g.action),g=g.next;while(g!==e);He(f,b.memoizedState)||(Ug=!0);b.memoizedState=f;null===b.baseQueue&&(b.baseState=f);c.lastRenderedState=f}return[f,d]}function hi(){}\nfunction ii(a,b){var c=N,d=di(),e=b(),f=!He(d.memoizedState,e);f&&(d.memoizedState=e,Ug=!0);d=d.queue;ji(ki.bind(null,c,d,a),[a]);if(d.getSnapshot!==b||f||null!==P&&P.memoizedState.tag&1){c.flags|=2048;li(9,mi.bind(null,c,d,e,b),void 0,null);if(null===R)throw Error(p(349));0!==(Rh&30)||ni(c,b,e)}return e}function ni(a,b,c){a.flags|=16384;a={getSnapshot:b,value:c};b=N.updateQueue;null===b?(b={lastEffect:null,stores:null},N.updateQueue=b,b.stores=[a]):(c=b.stores,null===c?b.stores=[a]:c.push(a))}\nfunction mi(a,b,c,d){b.value=c;b.getSnapshot=d;oi(b)&&pi(a)}function ki(a,b,c){return c(function(){oi(b)&&pi(a)})}function oi(a){var b=a.getSnapshot;a=a.value;try{var c=b();return!He(a,c)}catch(d){return!0}}function pi(a){var b=Zg(a,1);null!==b&&mh(b,a,1,-1)}\nfunction qi(a){var b=ci();\"function\"===typeof a&&(a=a());b.memoizedState=b.baseState=a;a={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:ei,lastRenderedState:a};b.queue=a;a=a.dispatch=ri.bind(null,N,a);return[b.memoizedState,a]}\nfunction li(a,b,c,d){a={tag:a,create:b,destroy:c,deps:d,next:null};b=N.updateQueue;null===b?(b={lastEffect:null,stores:null},N.updateQueue=b,b.lastEffect=a.next=a):(c=b.lastEffect,null===c?b.lastEffect=a.next=a:(d=c.next,c.next=a,a.next=d,b.lastEffect=a));return a}function si(){return di().memoizedState}function ti(a,b,c,d){var e=ci();N.flags|=a;e.memoizedState=li(1|b,c,void 0,void 0===d?null:d)}\nfunction ui(a,b,c,d){var e=di();d=void 0===d?null:d;var f=void 0;if(null!==O){var g=O.memoizedState;f=g.destroy;if(null!==d&&Wh(d,g.deps)){e.memoizedState=li(b,c,f,d);return}}N.flags|=a;e.memoizedState=li(1|b,c,f,d)}function vi(a,b){return ti(8390656,8,a,b)}function ji(a,b){return ui(2048,8,a,b)}function wi(a,b){return ui(4,2,a,b)}function xi(a,b){return ui(4,4,a,b)}\nfunction yi(a,b){if(\"function\"===typeof b)return a=a(),b(a),function(){b(null)};if(null!==b&&void 0!==b)return a=a(),b.current=a,function(){b.current=null}}function zi(a,b,c){c=null!==c&&void 0!==c?c.concat([a]):null;return ui(4,4,yi.bind(null,b,a),c)}function Ai(){}function Bi(a,b){var c=di();b=void 0===b?null:b;var d=c.memoizedState;if(null!==d&&null!==b&&Wh(b,d[1]))return d[0];c.memoizedState=[a,b];return a}\nfunction Ci(a,b){var c=di();b=void 0===b?null:b;var d=c.memoizedState;if(null!==d&&null!==b&&Wh(b,d[1]))return d[0];a=a();c.memoizedState=[a,b];return a}function Di(a,b,c){if(0===(Rh&21))return a.baseState&&(a.baseState=!1,Ug=!0),a.memoizedState=c;He(c,b)||(c=yc(),N.lanes|=c,hh|=c,a.baseState=!0);return b}function Ei(a,b){var c=C;C=0!==c&&4>c?c:4;a(!0);var d=Qh.transition;Qh.transition={};try{a(!1),b()}finally{C=c,Qh.transition=d}}function Fi(){return di().memoizedState}\nfunction Gi(a,b,c){var d=lh(a);c={lane:d,action:c,hasEagerState:!1,eagerState:null,next:null};if(Hi(a))Ii(b,c);else if(c=Yg(a,b,c,d),null!==c){var e=L();mh(c,a,d,e);Ji(c,b,d)}}\nfunction ri(a,b,c){var d=lh(a),e={lane:d,action:c,hasEagerState:!1,eagerState:null,next:null};if(Hi(a))Ii(b,e);else{var f=a.alternate;if(0===a.lanes&&(null===f||0===f.lanes)&&(f=b.lastRenderedReducer,null!==f))try{var g=b.lastRenderedState,h=f(g,c);e.hasEagerState=!0;e.eagerState=h;if(He(h,g)){var k=b.interleaved;null===k?(e.next=e,Xg(b)):(e.next=k.next,k.next=e);b.interleaved=e;return}}catch(l){}finally{}c=Yg(a,b,e,d);null!==c&&(e=L(),mh(c,a,d,e),Ji(c,b,d))}}\nfunction Hi(a){var b=a.alternate;return a===N||null!==b&&b===N}function Ii(a,b){Th=Sh=!0;var c=a.pending;null===c?b.next=b:(b.next=c.next,c.next=b);a.pending=b}function Ji(a,b,c){if(0!==(c&4194240)){var d=b.lanes;d&=a.pendingLanes;c|=d;b.lanes=c;Cc(a,c)}}\nvar ai={readContext:Vg,useCallback:Q,useContext:Q,useEffect:Q,useImperativeHandle:Q,useInsertionEffect:Q,useLayoutEffect:Q,useMemo:Q,useReducer:Q,useRef:Q,useState:Q,useDebugValue:Q,useDeferredValue:Q,useTransition:Q,useMutableSource:Q,useSyncExternalStore:Q,useId:Q,unstable_isNewReconciler:!1},Yh={readContext:Vg,useCallback:function(a,b){ci().memoizedState=[a,void 0===b?null:b];return a},useContext:Vg,useEffect:vi,useImperativeHandle:function(a,b,c){c=null!==c&&void 0!==c?c.concat([a]):null;return ti(4194308,\n4,yi.bind(null,b,a),c)},useLayoutEffect:function(a,b){return ti(4194308,4,a,b)},useInsertionEffect:function(a,b){return ti(4,2,a,b)},useMemo:function(a,b){var c=ci();b=void 0===b?null:b;a=a();c.memoizedState=[a,b];return a},useReducer:function(a,b,c){var d=ci();b=void 0!==c?c(b):b;d.memoizedState=d.baseState=b;a={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:a,lastRenderedState:b};d.queue=a;a=a.dispatch=Gi.bind(null,N,a);return[d.memoizedState,a]},useRef:function(a){var b=\nci();a={current:a};return b.memoizedState=a},useState:qi,useDebugValue:Ai,useDeferredValue:function(a){return ci().memoizedState=a},useTransition:function(){var a=qi(!1),b=a[0];a=Ei.bind(null,a[1]);ci().memoizedState=a;return[b,a]},useMutableSource:function(){},useSyncExternalStore:function(a,b,c){var d=N,e=ci();if(I){if(void 0===c)throw Error(p(407));c=c()}else{c=b();if(null===R)throw Error(p(349));0!==(Rh&30)||ni(d,b,c)}e.memoizedState=c;var f={value:c,getSnapshot:b};e.queue=f;vi(ki.bind(null,d,\nf,a),[a]);d.flags|=2048;li(9,mi.bind(null,d,f,c,b),void 0,null);return c},useId:function(){var a=ci(),b=R.identifierPrefix;if(I){var c=sg;var d=rg;c=(d&~(1<<32-oc(d)-1)).toString(32)+c;b=\":\"+b+\"R\"+c;c=Uh++;0<c&&(b+=\"H\"+c.toString(32));b+=\":\"}else c=Vh++,b=\":\"+b+\"r\"+c.toString(32)+\":\";return a.memoizedState=b},unstable_isNewReconciler:!1},Zh={readContext:Vg,useCallback:Bi,useContext:Vg,useEffect:ji,useImperativeHandle:zi,useInsertionEffect:wi,useLayoutEffect:xi,useMemo:Ci,useReducer:fi,useRef:si,useState:function(){return fi(ei)},\nuseDebugValue:Ai,useDeferredValue:function(a){var b=di();return Di(b,O.memoizedState,a)},useTransition:function(){var a=fi(ei)[0],b=di().memoizedState;return[a,b]},useMutableSource:hi,useSyncExternalStore:ii,useId:Fi,unstable_isNewReconciler:!1},$h={readContext:Vg,useCallback:Bi,useContext:Vg,useEffect:ji,useImperativeHandle:zi,useInsertionEffect:wi,useLayoutEffect:xi,useMemo:Ci,useReducer:gi,useRef:si,useState:function(){return gi(ei)},useDebugValue:Ai,useDeferredValue:function(a){var b=di();return null===\nO?b.memoizedState=a:Di(b,O.memoizedState,a)},useTransition:function(){var a=gi(ei)[0],b=di().memoizedState;return[a,b]},useMutableSource:hi,useSyncExternalStore:ii,useId:Fi,unstable_isNewReconciler:!1};function Ki(a,b){try{var c=\"\",d=b;do c+=Pa(d),d=d.return;while(d);var e=c}catch(f){e=\"\\nError generating stack: \"+f.message+\"\\n\"+f.stack}return{value:a,source:b,stack:e,digest:null}}function Li(a,b,c){return{value:a,source:null,stack:null!=c?c:null,digest:null!=b?b:null}}\nfunction Mi(a,b){try{console.error(b.value)}catch(c){setTimeout(function(){throw c;})}}var Ni=\"function\"===typeof WeakMap?WeakMap:Map;function Oi(a,b,c){c=ch(-1,c);c.tag=3;c.payload={element:null};var d=b.value;c.callback=function(){Pi||(Pi=!0,Qi=d);Mi(a,b)};return c}\nfunction Ri(a,b,c){c=ch(-1,c);c.tag=3;var d=a.type.getDerivedStateFromError;if(\"function\"===typeof d){var e=b.value;c.payload=function(){return d(e)};c.callback=function(){Mi(a,b)}}var f=a.stateNode;null!==f&&\"function\"===typeof f.componentDidCatch&&(c.callback=function(){Mi(a,b);\"function\"!==typeof d&&(null===Si?Si=new Set([this]):Si.add(this));var c=b.stack;this.componentDidCatch(b.value,{componentStack:null!==c?c:\"\"})});return c}\nfunction Ti(a,b,c){var d=a.pingCache;if(null===d){d=a.pingCache=new Ni;var e=new Set;d.set(b,e)}else e=d.get(b),void 0===e&&(e=new Set,d.set(b,e));e.has(c)||(e.add(c),a=Ui.bind(null,a,b,c),b.then(a,a))}function Vi(a){do{var b;if(b=13===a.tag)b=a.memoizedState,b=null!==b?null!==b.dehydrated?!0:!1:!0;if(b)return a;a=a.return}while(null!==a);return null}\nfunction Wi(a,b,c,d,e){if(0===(a.mode&1))return a===b?a.flags|=65536:(a.flags|=128,c.flags|=131072,c.flags&=-52805,1===c.tag&&(null===c.alternate?c.tag=17:(b=ch(-1,1),b.tag=2,dh(c,b,1))),c.lanes|=1),a;a.flags|=65536;a.lanes=e;return a}var Xi=ua.ReactCurrentOwner,Ug=!1;function Yi(a,b,c,d){b.child=null===a?Ch(b,null,c,d):Bh(b,a.child,c,d)}\nfunction Zi(a,b,c,d,e){c=c.render;var f=b.ref;Tg(b,e);d=Xh(a,b,c,d,f,e);c=bi();if(null!==a&&!Ug)return b.updateQueue=a.updateQueue,b.flags&=-2053,a.lanes&=~e,$i(a,b,e);I&&c&&vg(b);b.flags|=1;Yi(a,b,d,e);return b.child}\nfunction aj(a,b,c,d,e){if(null===a){var f=c.type;if(\"function\"===typeof f&&!bj(f)&&void 0===f.defaultProps&&null===c.compare&&void 0===c.defaultProps)return b.tag=15,b.type=f,cj(a,b,f,d,e);a=yh(c.type,null,d,b,b.mode,e);a.ref=b.ref;a.return=b;return b.child=a}f=a.child;if(0===(a.lanes&e)){var g=f.memoizedProps;c=c.compare;c=null!==c?c:Ie;if(c(g,d)&&a.ref===b.ref)return $i(a,b,e)}b.flags|=1;a=wh(f,d);a.ref=b.ref;a.return=b;return b.child=a}\nfunction cj(a,b,c,d,e){if(null!==a){var f=a.memoizedProps;if(Ie(f,d)&&a.ref===b.ref)if(Ug=!1,b.pendingProps=d=f,0!==(a.lanes&e))0!==(a.flags&131072)&&(Ug=!0);else return b.lanes=a.lanes,$i(a,b,e)}return dj(a,b,c,d,e)}\nfunction ej(a,b,c){var d=b.pendingProps,e=d.children,f=null!==a?a.memoizedState:null;if(\"hidden\"===d.mode)if(0===(b.mode&1))b.memoizedState={baseLanes:0,cachePool:null,transitions:null},G(fj,gj),gj|=c;else{if(0===(c&1073741824))return a=null!==f?f.baseLanes|c:c,b.lanes=b.childLanes=1073741824,b.memoizedState={baseLanes:a,cachePool:null,transitions:null},b.updateQueue=null,G(fj,gj),gj|=a,null;b.memoizedState={baseLanes:0,cachePool:null,transitions:null};d=null!==f?f.baseLanes:c;G(fj,gj);gj|=d}else null!==\nf?(d=f.baseLanes|c,b.memoizedState=null):d=c,G(fj,gj),gj|=d;Yi(a,b,e,c);return b.child}function hj(a,b){var c=b.ref;if(null===a&&null!==c||null!==a&&a.ref!==c)b.flags|=512,b.flags|=2097152}function dj(a,b,c,d,e){var f=Zf(c)?Xf:H.current;f=Yf(b,f);Tg(b,e);c=Xh(a,b,c,d,f,e);d=bi();if(null!==a&&!Ug)return b.updateQueue=a.updateQueue,b.flags&=-2053,a.lanes&=~e,$i(a,b,e);I&&d&&vg(b);b.flags|=1;Yi(a,b,c,e);return b.child}\nfunction ij(a,b,c,d,e){if(Zf(c)){var f=!0;cg(b)}else f=!1;Tg(b,e);if(null===b.stateNode)jj(a,b),ph(b,c,d),rh(b,c,d,e),d=!0;else if(null===a){var g=b.stateNode,h=b.memoizedProps;g.props=h;var k=g.context,l=c.contextType;\"object\"===typeof l&&null!==l?l=Vg(l):(l=Zf(c)?Xf:H.current,l=Yf(b,l));var m=c.getDerivedStateFromProps,q=\"function\"===typeof m||\"function\"===typeof g.getSnapshotBeforeUpdate;q||\"function\"!==typeof g.UNSAFE_componentWillReceiveProps&&\"function\"!==typeof g.componentWillReceiveProps||\n(h!==d||k!==l)&&qh(b,g,d,l);$g=!1;var r=b.memoizedState;g.state=r;gh(b,d,g,e);k=b.memoizedState;h!==d||r!==k||Wf.current||$g?(\"function\"===typeof m&&(kh(b,c,m,d),k=b.memoizedState),(h=$g||oh(b,c,h,d,r,k,l))?(q||\"function\"!==typeof g.UNSAFE_componentWillMount&&\"function\"!==typeof g.componentWillMount||(\"function\"===typeof g.componentWillMount&&g.componentWillMount(),\"function\"===typeof g.UNSAFE_componentWillMount&&g.UNSAFE_componentWillMount()),\"function\"===typeof g.componentDidMount&&(b.flags|=4194308)):\n(\"function\"===typeof g.componentDidMount&&(b.flags|=4194308),b.memoizedProps=d,b.memoizedState=k),g.props=d,g.state=k,g.context=l,d=h):(\"function\"===typeof g.componentDidMount&&(b.flags|=4194308),d=!1)}else{g=b.stateNode;bh(a,b);h=b.memoizedProps;l=b.type===b.elementType?h:Lg(b.type,h);g.props=l;q=b.pendingProps;r=g.context;k=c.contextType;\"object\"===typeof k&&null!==k?k=Vg(k):(k=Zf(c)?Xf:H.current,k=Yf(b,k));var y=c.getDerivedStateFromProps;(m=\"function\"===typeof y||\"function\"===typeof g.getSnapshotBeforeUpdate)||\n\"function\"!==typeof g.UNSAFE_componentWillReceiveProps&&\"function\"!==typeof g.componentWillReceiveProps||(h!==q||r!==k)&&qh(b,g,d,k);$g=!1;r=b.memoizedState;g.state=r;gh(b,d,g,e);var n=b.memoizedState;h!==q||r!==n||Wf.current||$g?(\"function\"===typeof y&&(kh(b,c,y,d),n=b.memoizedState),(l=$g||oh(b,c,l,d,r,n,k)||!1)?(m||\"function\"!==typeof g.UNSAFE_componentWillUpdate&&\"function\"!==typeof g.componentWillUpdate||(\"function\"===typeof g.componentWillUpdate&&g.componentWillUpdate(d,n,k),\"function\"===typeof g.UNSAFE_componentWillUpdate&&\ng.UNSAFE_componentWillUpdate(d,n,k)),\"function\"===typeof g.componentDidUpdate&&(b.flags|=4),\"function\"===typeof g.getSnapshotBeforeUpdate&&(b.flags|=1024)):(\"function\"!==typeof g.componentDidUpdate||h===a.memoizedProps&&r===a.memoizedState||(b.flags|=4),\"function\"!==typeof g.getSnapshotBeforeUpdate||h===a.memoizedProps&&r===a.memoizedState||(b.flags|=1024),b.memoizedProps=d,b.memoizedState=n),g.props=d,g.state=n,g.context=k,d=l):(\"function\"!==typeof g.componentDidUpdate||h===a.memoizedProps&&r===\na.memoizedState||(b.flags|=4),\"function\"!==typeof g.getSnapshotBeforeUpdate||h===a.memoizedProps&&r===a.memoizedState||(b.flags|=1024),d=!1)}return kj(a,b,c,d,f,e)}\nfunction kj(a,b,c,d,e,f){hj(a,b);var g=0!==(b.flags&128);if(!d&&!g)return e&&dg(b,c,!1),$i(a,b,f);d=b.stateNode;Xi.current=b;var h=g&&\"function\"!==typeof c.getDerivedStateFromError?null:d.render();b.flags|=1;null!==a&&g?(b.child=Bh(b,a.child,null,f),b.child=Bh(b,null,h,f)):Yi(a,b,h,f);b.memoizedState=d.state;e&&dg(b,c,!0);return b.child}function lj(a){var b=a.stateNode;b.pendingContext?ag(a,b.pendingContext,b.pendingContext!==b.context):b.context&&ag(a,b.context,!1);Ih(a,b.containerInfo)}\nfunction mj(a,b,c,d,e){Ig();Jg(e);b.flags|=256;Yi(a,b,c,d);return b.child}var nj={dehydrated:null,treeContext:null,retryLane:0};function oj(a){return{baseLanes:a,cachePool:null,transitions:null}}\nfunction pj(a,b,c){var d=b.pendingProps,e=M.current,f=!1,g=0!==(b.flags&128),h;(h=g)||(h=null!==a&&null===a.memoizedState?!1:0!==(e&2));if(h)f=!0,b.flags&=-129;else if(null===a||null!==a.memoizedState)e|=1;G(M,e&1);if(null===a){Eg(b);a=b.memoizedState;if(null!==a&&(a=a.dehydrated,null!==a))return 0===(b.mode&1)?b.lanes=1:\"$!\"===a.data?b.lanes=8:b.lanes=1073741824,null;g=d.children;a=d.fallback;return f?(d=b.mode,f=b.child,g={mode:\"hidden\",children:g},0===(d&1)&&null!==f?(f.childLanes=0,f.pendingProps=\ng):f=qj(g,d,0,null),a=Ah(a,d,c,null),f.return=b,a.return=b,f.sibling=a,b.child=f,b.child.memoizedState=oj(c),b.memoizedState=nj,a):rj(b,g)}e=a.memoizedState;if(null!==e&&(h=e.dehydrated,null!==h))return sj(a,b,g,d,h,e,c);if(f){f=d.fallback;g=b.mode;e=a.child;h=e.sibling;var k={mode:\"hidden\",children:d.children};0===(g&1)&&b.child!==e?(d=b.child,d.childLanes=0,d.pendingProps=k,b.deletions=null):(d=wh(e,k),d.subtreeFlags=e.subtreeFlags&14680064);null!==h?f=wh(h,f):(f=Ah(f,g,c,null),f.flags|=2);f.return=\nb;d.return=b;d.sibling=f;b.child=d;d=f;f=b.child;g=a.child.memoizedState;g=null===g?oj(c):{baseLanes:g.baseLanes|c,cachePool:null,transitions:g.transitions};f.memoizedState=g;f.childLanes=a.childLanes&~c;b.memoizedState=nj;return d}f=a.child;a=f.sibling;d=wh(f,{mode:\"visible\",children:d.children});0===(b.mode&1)&&(d.lanes=c);d.return=b;d.sibling=null;null!==a&&(c=b.deletions,null===c?(b.deletions=[a],b.flags|=16):c.push(a));b.child=d;b.memoizedState=null;return d}\nfunction rj(a,b){b=qj({mode:\"visible\",children:b},a.mode,0,null);b.return=a;return a.child=b}function tj(a,b,c,d){null!==d&&Jg(d);Bh(b,a.child,null,c);a=rj(b,b.pendingProps.children);a.flags|=2;b.memoizedState=null;return a}\nfunction sj(a,b,c,d,e,f,g){if(c){if(b.flags&256)return b.flags&=-257,d=Li(Error(p(422))),tj(a,b,g,d);if(null!==b.memoizedState)return b.child=a.child,b.flags|=128,null;f=d.fallback;e=b.mode;d=qj({mode:\"visible\",children:d.children},e,0,null);f=Ah(f,e,g,null);f.flags|=2;d.return=b;f.return=b;d.sibling=f;b.child=d;0!==(b.mode&1)&&Bh(b,a.child,null,g);b.child.memoizedState=oj(g);b.memoizedState=nj;return f}if(0===(b.mode&1))return tj(a,b,g,null);if(\"$!\"===e.data){d=e.nextSibling&&e.nextSibling.dataset;\nif(d)var h=d.dgst;d=h;f=Error(p(419));d=Li(f,d,void 0);return tj(a,b,g,d)}h=0!==(g&a.childLanes);if(Ug||h){d=R;if(null!==d){switch(g&-g){case 4:e=2;break;case 16:e=8;break;case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:e=32;break;case 536870912:e=268435456;break;default:e=0}e=0!==(e&(d.suspendedLanes|g))?0:e;\n0!==e&&e!==f.retryLane&&(f.retryLane=e,Zg(a,e),mh(d,a,e,-1))}uj();d=Li(Error(p(421)));return tj(a,b,g,d)}if(\"$?\"===e.data)return b.flags|=128,b.child=a.child,b=vj.bind(null,a),e._reactRetry=b,null;a=f.treeContext;yg=Lf(e.nextSibling);xg=b;I=!0;zg=null;null!==a&&(og[pg++]=rg,og[pg++]=sg,og[pg++]=qg,rg=a.id,sg=a.overflow,qg=b);b=rj(b,d.children);b.flags|=4096;return b}function wj(a,b,c){a.lanes|=b;var d=a.alternate;null!==d&&(d.lanes|=b);Sg(a.return,b,c)}\nfunction xj(a,b,c,d,e){var f=a.memoizedState;null===f?a.memoizedState={isBackwards:b,rendering:null,renderingStartTime:0,last:d,tail:c,tailMode:e}:(f.isBackwards=b,f.rendering=null,f.renderingStartTime=0,f.last=d,f.tail=c,f.tailMode=e)}\nfunction yj(a,b,c){var d=b.pendingProps,e=d.revealOrder,f=d.tail;Yi(a,b,d.children,c);d=M.current;if(0!==(d&2))d=d&1|2,b.flags|=128;else{if(null!==a&&0!==(a.flags&128))a:for(a=b.child;null!==a;){if(13===a.tag)null!==a.memoizedState&&wj(a,c,b);else if(19===a.tag)wj(a,c,b);else if(null!==a.child){a.child.return=a;a=a.child;continue}if(a===b)break a;for(;null===a.sibling;){if(null===a.return||a.return===b)break a;a=a.return}a.sibling.return=a.return;a=a.sibling}d&=1}G(M,d);if(0===(b.mode&1))b.memoizedState=\nnull;else switch(e){case \"forwards\":c=b.child;for(e=null;null!==c;)a=c.alternate,null!==a&&null===Mh(a)&&(e=c),c=c.sibling;c=e;null===c?(e=b.child,b.child=null):(e=c.sibling,c.sibling=null);xj(b,!1,e,c,f);break;case \"backwards\":c=null;e=b.child;for(b.child=null;null!==e;){a=e.alternate;if(null!==a&&null===Mh(a)){b.child=e;break}a=e.sibling;e.sibling=c;c=e;e=a}xj(b,!0,c,null,f);break;case \"together\":xj(b,!1,null,null,void 0);break;default:b.memoizedState=null}return b.child}\nfunction jj(a,b){0===(b.mode&1)&&null!==a&&(a.alternate=null,b.alternate=null,b.flags|=2)}function $i(a,b,c){null!==a&&(b.dependencies=a.dependencies);hh|=b.lanes;if(0===(c&b.childLanes))return null;if(null!==a&&b.child!==a.child)throw Error(p(153));if(null!==b.child){a=b.child;c=wh(a,a.pendingProps);b.child=c;for(c.return=b;null!==a.sibling;)a=a.sibling,c=c.sibling=wh(a,a.pendingProps),c.return=b;c.sibling=null}return b.child}\nfunction zj(a,b,c){switch(b.tag){case 3:lj(b);Ig();break;case 5:Kh(b);break;case 1:Zf(b.type)&&cg(b);break;case 4:Ih(b,b.stateNode.containerInfo);break;case 10:var d=b.type._context,e=b.memoizedProps.value;G(Mg,d._currentValue);d._currentValue=e;break;case 13:d=b.memoizedState;if(null!==d){if(null!==d.dehydrated)return G(M,M.current&1),b.flags|=128,null;if(0!==(c&b.child.childLanes))return pj(a,b,c);G(M,M.current&1);a=$i(a,b,c);return null!==a?a.sibling:null}G(M,M.current&1);break;case 19:d=0!==(c&\nb.childLanes);if(0!==(a.flags&128)){if(d)return yj(a,b,c);b.flags|=128}e=b.memoizedState;null!==e&&(e.rendering=null,e.tail=null,e.lastEffect=null);G(M,M.current);if(d)break;else return null;case 22:case 23:return b.lanes=0,ej(a,b,c)}return $i(a,b,c)}var Aj,Bj,Cj,Dj;\nAj=function(a,b){for(var c=b.child;null!==c;){if(5===c.tag||6===c.tag)a.appendChild(c.stateNode);else if(4!==c.tag&&null!==c.child){c.child.return=c;c=c.child;continue}if(c===b)break;for(;null===c.sibling;){if(null===c.return||c.return===b)return;c=c.return}c.sibling.return=c.return;c=c.sibling}};Bj=function(){};\nCj=function(a,b,c,d){var e=a.memoizedProps;if(e!==d){a=b.stateNode;Hh(Eh.current);var f=null;switch(c){case \"input\":e=Ya(a,e);d=Ya(a,d);f=[];break;case \"select\":e=A({},e,{value:void 0});d=A({},d,{value:void 0});f=[];break;case \"textarea\":e=gb(a,e);d=gb(a,d);f=[];break;default:\"function\"!==typeof e.onClick&&\"function\"===typeof d.onClick&&(a.onclick=Bf)}ub(c,d);var g;c=null;for(l in e)if(!d.hasOwnProperty(l)&&e.hasOwnProperty(l)&&null!=e[l])if(\"style\"===l){var h=e[l];for(g in h)h.hasOwnProperty(g)&&\n(c||(c={}),c[g]=\"\")}else\"dangerouslySetInnerHTML\"!==l&&\"children\"!==l&&\"suppressContentEditableWarning\"!==l&&\"suppressHydrationWarning\"!==l&&\"autoFocus\"!==l&&(ea.hasOwnProperty(l)?f||(f=[]):(f=f||[]).push(l,null));for(l in d){var k=d[l];h=null!=e?e[l]:void 0;if(d.hasOwnProperty(l)&&k!==h&&(null!=k||null!=h))if(\"style\"===l)if(h){for(g in h)!h.hasOwnProperty(g)||k&&k.hasOwnProperty(g)||(c||(c={}),c[g]=\"\");for(g in k)k.hasOwnProperty(g)&&h[g]!==k[g]&&(c||(c={}),c[g]=k[g])}else c||(f||(f=[]),f.push(l,\nc)),c=k;else\"dangerouslySetInnerHTML\"===l?(k=k?k.__html:void 0,h=h?h.__html:void 0,null!=k&&h!==k&&(f=f||[]).push(l,k)):\"children\"===l?\"string\"!==typeof k&&\"number\"!==typeof k||(f=f||[]).push(l,\"\"+k):\"suppressContentEditableWarning\"!==l&&\"suppressHydrationWarning\"!==l&&(ea.hasOwnProperty(l)?(null!=k&&\"onScroll\"===l&&D(\"scroll\",a),f||h===k||(f=[])):(f=f||[]).push(l,k))}c&&(f=f||[]).push(\"style\",c);var l=f;if(b.updateQueue=l)b.flags|=4}};Dj=function(a,b,c,d){c!==d&&(b.flags|=4)};\nfunction Ej(a,b){if(!I)switch(a.tailMode){case \"hidden\":b=a.tail;for(var c=null;null!==b;)null!==b.alternate&&(c=b),b=b.sibling;null===c?a.tail=null:c.sibling=null;break;case \"collapsed\":c=a.tail;for(var d=null;null!==c;)null!==c.alternate&&(d=c),c=c.sibling;null===d?b||null===a.tail?a.tail=null:a.tail.sibling=null:d.sibling=null}}\nfunction S(a){var b=null!==a.alternate&&a.alternate.child===a.child,c=0,d=0;if(b)for(var e=a.child;null!==e;)c|=e.lanes|e.childLanes,d|=e.subtreeFlags&14680064,d|=e.flags&14680064,e.return=a,e=e.sibling;else for(e=a.child;null!==e;)c|=e.lanes|e.childLanes,d|=e.subtreeFlags,d|=e.flags,e.return=a,e=e.sibling;a.subtreeFlags|=d;a.childLanes=c;return b}\nfunction Fj(a,b,c){var d=b.pendingProps;wg(b);switch(b.tag){case 2:case 16:case 15:case 0:case 11:case 7:case 8:case 12:case 9:case 14:return S(b),null;case 1:return Zf(b.type)&&$f(),S(b),null;case 3:d=b.stateNode;Jh();E(Wf);E(H);Oh();d.pendingContext&&(d.context=d.pendingContext,d.pendingContext=null);if(null===a||null===a.child)Gg(b)?b.flags|=4:null===a||a.memoizedState.isDehydrated&&0===(b.flags&256)||(b.flags|=1024,null!==zg&&(Gj(zg),zg=null));Bj(a,b);S(b);return null;case 5:Lh(b);var e=Hh(Gh.current);\nc=b.type;if(null!==a&&null!=b.stateNode)Cj(a,b,c,d,e),a.ref!==b.ref&&(b.flags|=512,b.flags|=2097152);else{if(!d){if(null===b.stateNode)throw Error(p(166));S(b);return null}a=Hh(Eh.current);if(Gg(b)){d=b.stateNode;c=b.type;var f=b.memoizedProps;d[Of]=b;d[Pf]=f;a=0!==(b.mode&1);switch(c){case \"dialog\":D(\"cancel\",d);D(\"close\",d);break;case \"iframe\":case \"object\":case \"embed\":D(\"load\",d);break;case \"video\":case \"audio\":for(e=0;e<lf.length;e++)D(lf[e],d);break;case \"source\":D(\"error\",d);break;case \"img\":case \"image\":case \"link\":D(\"error\",\nd);D(\"load\",d);break;case \"details\":D(\"toggle\",d);break;case \"input\":Za(d,f);D(\"invalid\",d);break;case \"select\":d._wrapperState={wasMultiple:!!f.multiple};D(\"invalid\",d);break;case \"textarea\":hb(d,f),D(\"invalid\",d)}ub(c,f);e=null;for(var g in f)if(f.hasOwnProperty(g)){var h=f[g];\"children\"===g?\"string\"===typeof h?d.textContent!==h&&(!0!==f.suppressHydrationWarning&&Af(d.textContent,h,a),e=[\"children\",h]):\"number\"===typeof h&&d.textContent!==\"\"+h&&(!0!==f.suppressHydrationWarning&&Af(d.textContent,\nh,a),e=[\"children\",\"\"+h]):ea.hasOwnProperty(g)&&null!=h&&\"onScroll\"===g&&D(\"scroll\",d)}switch(c){case \"input\":Va(d);db(d,f,!0);break;case \"textarea\":Va(d);jb(d);break;case \"select\":case \"option\":break;default:\"function\"===typeof f.onClick&&(d.onclick=Bf)}d=e;b.updateQueue=d;null!==d&&(b.flags|=4)}else{g=9===e.nodeType?e:e.ownerDocument;\"http://www.w3.org/1999/xhtml\"===a&&(a=kb(c));\"http://www.w3.org/1999/xhtml\"===a?\"script\"===c?(a=g.createElement(\"div\"),a.innerHTML=\"<script>\\x3c/script>\",a=a.removeChild(a.firstChild)):\n\"string\"===typeof d.is?a=g.createElement(c,{is:d.is}):(a=g.createElement(c),\"select\"===c&&(g=a,d.multiple?g.multiple=!0:d.size&&(g.size=d.size))):a=g.createElementNS(a,c);a[Of]=b;a[Pf]=d;Aj(a,b,!1,!1);b.stateNode=a;a:{g=vb(c,d);switch(c){case \"dialog\":D(\"cancel\",a);D(\"close\",a);e=d;break;case \"iframe\":case \"object\":case \"embed\":D(\"load\",a);e=d;break;case \"video\":case \"audio\":for(e=0;e<lf.length;e++)D(lf[e],a);e=d;break;case \"source\":D(\"error\",a);e=d;break;case \"img\":case \"image\":case \"link\":D(\"error\",\na);D(\"load\",a);e=d;break;case \"details\":D(\"toggle\",a);e=d;break;case \"input\":Za(a,d);e=Ya(a,d);D(\"invalid\",a);break;case \"option\":e=d;break;case \"select\":a._wrapperState={wasMultiple:!!d.multiple};e=A({},d,{value:void 0});D(\"invalid\",a);break;case \"textarea\":hb(a,d);e=gb(a,d);D(\"invalid\",a);break;default:e=d}ub(c,e);h=e;for(f in h)if(h.hasOwnProperty(f)){var k=h[f];\"style\"===f?sb(a,k):\"dangerouslySetInnerHTML\"===f?(k=k?k.__html:void 0,null!=k&&nb(a,k)):\"children\"===f?\"string\"===typeof k?(\"textarea\"!==\nc||\"\"!==k)&&ob(a,k):\"number\"===typeof k&&ob(a,\"\"+k):\"suppressContentEditableWarning\"!==f&&\"suppressHydrationWarning\"!==f&&\"autoFocus\"!==f&&(ea.hasOwnProperty(f)?null!=k&&\"onScroll\"===f&&D(\"scroll\",a):null!=k&&ta(a,f,k,g))}switch(c){case \"input\":Va(a);db(a,d,!1);break;case \"textarea\":Va(a);jb(a);break;case \"option\":null!=d.value&&a.setAttribute(\"value\",\"\"+Sa(d.value));break;case \"select\":a.multiple=!!d.multiple;f=d.value;null!=f?fb(a,!!d.multiple,f,!1):null!=d.defaultValue&&fb(a,!!d.multiple,d.defaultValue,\n!0);break;default:\"function\"===typeof e.onClick&&(a.onclick=Bf)}switch(c){case \"button\":case \"input\":case \"select\":case \"textarea\":d=!!d.autoFocus;break a;case \"img\":d=!0;break a;default:d=!1}}d&&(b.flags|=4)}null!==b.ref&&(b.flags|=512,b.flags|=2097152)}S(b);return null;case 6:if(a&&null!=b.stateNode)Dj(a,b,a.memoizedProps,d);else{if(\"string\"!==typeof d&&null===b.stateNode)throw Error(p(166));c=Hh(Gh.current);Hh(Eh.current);if(Gg(b)){d=b.stateNode;c=b.memoizedProps;d[Of]=b;if(f=d.nodeValue!==c)if(a=\nxg,null!==a)switch(a.tag){case 3:Af(d.nodeValue,c,0!==(a.mode&1));break;case 5:!0!==a.memoizedProps.suppressHydrationWarning&&Af(d.nodeValue,c,0!==(a.mode&1))}f&&(b.flags|=4)}else d=(9===c.nodeType?c:c.ownerDocument).createTextNode(d),d[Of]=b,b.stateNode=d}S(b);return null;case 13:E(M);d=b.memoizedState;if(null===a||null!==a.memoizedState&&null!==a.memoizedState.dehydrated){if(I&&null!==yg&&0!==(b.mode&1)&&0===(b.flags&128))Hg(),Ig(),b.flags|=98560,f=!1;else if(f=Gg(b),null!==d&&null!==d.dehydrated){if(null===\na){if(!f)throw Error(p(318));f=b.memoizedState;f=null!==f?f.dehydrated:null;if(!f)throw Error(p(317));f[Of]=b}else Ig(),0===(b.flags&128)&&(b.memoizedState=null),b.flags|=4;S(b);f=!1}else null!==zg&&(Gj(zg),zg=null),f=!0;if(!f)return b.flags&65536?b:null}if(0!==(b.flags&128))return b.lanes=c,b;d=null!==d;d!==(null!==a&&null!==a.memoizedState)&&d&&(b.child.flags|=8192,0!==(b.mode&1)&&(null===a||0!==(M.current&1)?0===T&&(T=3):uj()));null!==b.updateQueue&&(b.flags|=4);S(b);return null;case 4:return Jh(),\nBj(a,b),null===a&&sf(b.stateNode.containerInfo),S(b),null;case 10:return Rg(b.type._context),S(b),null;case 17:return Zf(b.type)&&$f(),S(b),null;case 19:E(M);f=b.memoizedState;if(null===f)return S(b),null;d=0!==(b.flags&128);g=f.rendering;if(null===g)if(d)Ej(f,!1);else{if(0!==T||null!==a&&0!==(a.flags&128))for(a=b.child;null!==a;){g=Mh(a);if(null!==g){b.flags|=128;Ej(f,!1);d=g.updateQueue;null!==d&&(b.updateQueue=d,b.flags|=4);b.subtreeFlags=0;d=c;for(c=b.child;null!==c;)f=c,a=d,f.flags&=14680066,\ng=f.alternate,null===g?(f.childLanes=0,f.lanes=a,f.child=null,f.subtreeFlags=0,f.memoizedProps=null,f.memoizedState=null,f.updateQueue=null,f.dependencies=null,f.stateNode=null):(f.childLanes=g.childLanes,f.lanes=g.lanes,f.child=g.child,f.subtreeFlags=0,f.deletions=null,f.memoizedProps=g.memoizedProps,f.memoizedState=g.memoizedState,f.updateQueue=g.updateQueue,f.type=g.type,a=g.dependencies,f.dependencies=null===a?null:{lanes:a.lanes,firstContext:a.firstContext}),c=c.sibling;G(M,M.current&1|2);return b.child}a=\na.sibling}null!==f.tail&&B()>Hj&&(b.flags|=128,d=!0,Ej(f,!1),b.lanes=4194304)}else{if(!d)if(a=Mh(g),null!==a){if(b.flags|=128,d=!0,c=a.updateQueue,null!==c&&(b.updateQueue=c,b.flags|=4),Ej(f,!0),null===f.tail&&\"hidden\"===f.tailMode&&!g.alternate&&!I)return S(b),null}else 2*B()-f.renderingStartTime>Hj&&1073741824!==c&&(b.flags|=128,d=!0,Ej(f,!1),b.lanes=4194304);f.isBackwards?(g.sibling=b.child,b.child=g):(c=f.last,null!==c?c.sibling=g:b.child=g,f.last=g)}if(null!==f.tail)return b=f.tail,f.rendering=\nb,f.tail=b.sibling,f.renderingStartTime=B(),b.sibling=null,c=M.current,G(M,d?c&1|2:c&1),b;S(b);return null;case 22:case 23:return Ij(),d=null!==b.memoizedState,null!==a&&null!==a.memoizedState!==d&&(b.flags|=8192),d&&0!==(b.mode&1)?0!==(gj&1073741824)&&(S(b),b.subtreeFlags&6&&(b.flags|=8192)):S(b),null;case 24:return null;case 25:return null}throw Error(p(156,b.tag));}\nfunction Jj(a,b){wg(b);switch(b.tag){case 1:return Zf(b.type)&&$f(),a=b.flags,a&65536?(b.flags=a&-65537|128,b):null;case 3:return Jh(),E(Wf),E(H),Oh(),a=b.flags,0!==(a&65536)&&0===(a&128)?(b.flags=a&-65537|128,b):null;case 5:return Lh(b),null;case 13:E(M);a=b.memoizedState;if(null!==a&&null!==a.dehydrated){if(null===b.alternate)throw Error(p(340));Ig()}a=b.flags;return a&65536?(b.flags=a&-65537|128,b):null;case 19:return E(M),null;case 4:return Jh(),null;case 10:return Rg(b.type._context),null;case 22:case 23:return Ij(),\nnull;case 24:return null;default:return null}}var Kj=!1,U=!1,Lj=\"function\"===typeof WeakSet?WeakSet:Set,V=null;function Mj(a,b){var c=a.ref;if(null!==c)if(\"function\"===typeof c)try{c(null)}catch(d){W(a,b,d)}else c.current=null}function Nj(a,b,c){try{c()}catch(d){W(a,b,d)}}var Oj=!1;\nfunction Pj(a,b){Cf=dd;a=Me();if(Ne(a)){if(\"selectionStart\"in a)var c={start:a.selectionStart,end:a.selectionEnd};else a:{c=(c=a.ownerDocument)&&c.defaultView||window;var d=c.getSelection&&c.getSelection();if(d&&0!==d.rangeCount){c=d.anchorNode;var e=d.anchorOffset,f=d.focusNode;d=d.focusOffset;try{c.nodeType,f.nodeType}catch(F){c=null;break a}var g=0,h=-1,k=-1,l=0,m=0,q=a,r=null;b:for(;;){for(var y;;){q!==c||0!==e&&3!==q.nodeType||(h=g+e);q!==f||0!==d&&3!==q.nodeType||(k=g+d);3===q.nodeType&&(g+=\nq.nodeValue.length);if(null===(y=q.firstChild))break;r=q;q=y}for(;;){if(q===a)break b;r===c&&++l===e&&(h=g);r===f&&++m===d&&(k=g);if(null!==(y=q.nextSibling))break;q=r;r=q.parentNode}q=y}c=-1===h||-1===k?null:{start:h,end:k}}else c=null}c=c||{start:0,end:0}}else c=null;Df={focusedElem:a,selectionRange:c};dd=!1;for(V=b;null!==V;)if(b=V,a=b.child,0!==(b.subtreeFlags&1028)&&null!==a)a.return=b,V=a;else for(;null!==V;){b=V;try{var n=b.alternate;if(0!==(b.flags&1024))switch(b.tag){case 0:case 11:case 15:break;\ncase 1:if(null!==n){var t=n.memoizedProps,J=n.memoizedState,x=b.stateNode,w=x.getSnapshotBeforeUpdate(b.elementType===b.type?t:Lg(b.type,t),J);x.__reactInternalSnapshotBeforeUpdate=w}break;case 3:var u=b.stateNode.containerInfo;1===u.nodeType?u.textContent=\"\":9===u.nodeType&&u.documentElement&&u.removeChild(u.documentElement);break;case 5:case 6:case 4:case 17:break;default:throw Error(p(163));}}catch(F){W(b,b.return,F)}a=b.sibling;if(null!==a){a.return=b.return;V=a;break}V=b.return}n=Oj;Oj=!1;return n}\nfunction Qj(a,b,c){var d=b.updateQueue;d=null!==d?d.lastEffect:null;if(null!==d){var e=d=d.next;do{if((e.tag&a)===a){var f=e.destroy;e.destroy=void 0;void 0!==f&&Nj(b,c,f)}e=e.next}while(e!==d)}}function Rj(a,b){b=b.updateQueue;b=null!==b?b.lastEffect:null;if(null!==b){var c=b=b.next;do{if((c.tag&a)===a){var d=c.create;c.destroy=d()}c=c.next}while(c!==b)}}function Sj(a){var b=a.ref;if(null!==b){var c=a.stateNode;switch(a.tag){case 5:a=c;break;default:a=c}\"function\"===typeof b?b(a):b.current=a}}\nfunction Tj(a){var b=a.alternate;null!==b&&(a.alternate=null,Tj(b));a.child=null;a.deletions=null;a.sibling=null;5===a.tag&&(b=a.stateNode,null!==b&&(delete b[Of],delete b[Pf],delete b[of],delete b[Qf],delete b[Rf]));a.stateNode=null;a.return=null;a.dependencies=null;a.memoizedProps=null;a.memoizedState=null;a.pendingProps=null;a.stateNode=null;a.updateQueue=null}function Uj(a){return 5===a.tag||3===a.tag||4===a.tag}\nfunction Vj(a){a:for(;;){for(;null===a.sibling;){if(null===a.return||Uj(a.return))return null;a=a.return}a.sibling.return=a.return;for(a=a.sibling;5!==a.tag&&6!==a.tag&&18!==a.tag;){if(a.flags&2)continue a;if(null===a.child||4===a.tag)continue a;else a.child.return=a,a=a.child}if(!(a.flags&2))return a.stateNode}}\nfunction Wj(a,b,c){var d=a.tag;if(5===d||6===d)a=a.stateNode,b?8===c.nodeType?c.parentNode.insertBefore(a,b):c.insertBefore(a,b):(8===c.nodeType?(b=c.parentNode,b.insertBefore(a,c)):(b=c,b.appendChild(a)),c=c._reactRootContainer,null!==c&&void 0!==c||null!==b.onclick||(b.onclick=Bf));else if(4!==d&&(a=a.child,null!==a))for(Wj(a,b,c),a=a.sibling;null!==a;)Wj(a,b,c),a=a.sibling}\nfunction Xj(a,b,c){var d=a.tag;if(5===d||6===d)a=a.stateNode,b?c.insertBefore(a,b):c.appendChild(a);else if(4!==d&&(a=a.child,null!==a))for(Xj(a,b,c),a=a.sibling;null!==a;)Xj(a,b,c),a=a.sibling}var X=null,Yj=!1;function Zj(a,b,c){for(c=c.child;null!==c;)ak(a,b,c),c=c.sibling}\nfunction ak(a,b,c){if(lc&&\"function\"===typeof lc.onCommitFiberUnmount)try{lc.onCommitFiberUnmount(kc,c)}catch(h){}switch(c.tag){case 5:U||Mj(c,b);case 6:var d=X,e=Yj;X=null;Zj(a,b,c);X=d;Yj=e;null!==X&&(Yj?(a=X,c=c.stateNode,8===a.nodeType?a.parentNode.removeChild(c):a.removeChild(c)):X.removeChild(c.stateNode));break;case 18:null!==X&&(Yj?(a=X,c=c.stateNode,8===a.nodeType?Kf(a.parentNode,c):1===a.nodeType&&Kf(a,c),bd(a)):Kf(X,c.stateNode));break;case 4:d=X;e=Yj;X=c.stateNode.containerInfo;Yj=!0;\nZj(a,b,c);X=d;Yj=e;break;case 0:case 11:case 14:case 15:if(!U&&(d=c.updateQueue,null!==d&&(d=d.lastEffect,null!==d))){e=d=d.next;do{var f=e,g=f.destroy;f=f.tag;void 0!==g&&(0!==(f&2)?Nj(c,b,g):0!==(f&4)&&Nj(c,b,g));e=e.next}while(e!==d)}Zj(a,b,c);break;case 1:if(!U&&(Mj(c,b),d=c.stateNode,\"function\"===typeof d.componentWillUnmount))try{d.props=c.memoizedProps,d.state=c.memoizedState,d.componentWillUnmount()}catch(h){W(c,b,h)}Zj(a,b,c);break;case 21:Zj(a,b,c);break;case 22:c.mode&1?(U=(d=U)||null!==\nc.memoizedState,Zj(a,b,c),U=d):Zj(a,b,c);break;default:Zj(a,b,c)}}function bk(a){var b=a.updateQueue;if(null!==b){a.updateQueue=null;var c=a.stateNode;null===c&&(c=a.stateNode=new Lj);b.forEach(function(b){var d=ck.bind(null,a,b);c.has(b)||(c.add(b),b.then(d,d))})}}\nfunction dk(a,b){var c=b.deletions;if(null!==c)for(var d=0;d<c.length;d++){var e=c[d];try{var f=a,g=b,h=g;a:for(;null!==h;){switch(h.tag){case 5:X=h.stateNode;Yj=!1;break a;case 3:X=h.stateNode.containerInfo;Yj=!0;break a;case 4:X=h.stateNode.containerInfo;Yj=!0;break a}h=h.return}if(null===X)throw Error(p(160));ak(f,g,e);X=null;Yj=!1;var k=e.alternate;null!==k&&(k.return=null);e.return=null}catch(l){W(e,b,l)}}if(b.subtreeFlags&12854)for(b=b.child;null!==b;)ek(b,a),b=b.sibling}\nfunction ek(a,b){var c=a.alternate,d=a.flags;switch(a.tag){case 0:case 11:case 14:case 15:dk(b,a);fk(a);if(d&4){try{Qj(3,a,a.return),Rj(3,a)}catch(t){W(a,a.return,t)}try{Qj(5,a,a.return)}catch(t){W(a,a.return,t)}}break;case 1:dk(b,a);fk(a);d&512&&null!==c&&Mj(c,c.return);break;case 5:dk(b,a);fk(a);d&512&&null!==c&&Mj(c,c.return);if(a.flags&32){var e=a.stateNode;try{ob(e,\"\")}catch(t){W(a,a.return,t)}}if(d&4&&(e=a.stateNode,null!=e)){var f=a.memoizedProps,g=null!==c?c.memoizedProps:f,h=a.type,k=a.updateQueue;\na.updateQueue=null;if(null!==k)try{\"input\"===h&&\"radio\"===f.type&&null!=f.name&&ab(e,f);vb(h,g);var l=vb(h,f);for(g=0;g<k.length;g+=2){var m=k[g],q=k[g+1];\"style\"===m?sb(e,q):\"dangerouslySetInnerHTML\"===m?nb(e,q):\"children\"===m?ob(e,q):ta(e,m,q,l)}switch(h){case \"input\":bb(e,f);break;case \"textarea\":ib(e,f);break;case \"select\":var r=e._wrapperState.wasMultiple;e._wrapperState.wasMultiple=!!f.multiple;var y=f.value;null!=y?fb(e,!!f.multiple,y,!1):r!==!!f.multiple&&(null!=f.defaultValue?fb(e,!!f.multiple,\nf.defaultValue,!0):fb(e,!!f.multiple,f.multiple?[]:\"\",!1))}e[Pf]=f}catch(t){W(a,a.return,t)}}break;case 6:dk(b,a);fk(a);if(d&4){if(null===a.stateNode)throw Error(p(162));e=a.stateNode;f=a.memoizedProps;try{e.nodeValue=f}catch(t){W(a,a.return,t)}}break;case 3:dk(b,a);fk(a);if(d&4&&null!==c&&c.memoizedState.isDehydrated)try{bd(b.containerInfo)}catch(t){W(a,a.return,t)}break;case 4:dk(b,a);fk(a);break;case 13:dk(b,a);fk(a);e=a.child;e.flags&8192&&(f=null!==e.memoizedState,e.stateNode.isHidden=f,!f||\nnull!==e.alternate&&null!==e.alternate.memoizedState||(gk=B()));d&4&&bk(a);break;case 22:m=null!==c&&null!==c.memoizedState;a.mode&1?(U=(l=U)||m,dk(b,a),U=l):dk(b,a);fk(a);if(d&8192){l=null!==a.memoizedState;if((a.stateNode.isHidden=l)&&!m&&0!==(a.mode&1))for(V=a,m=a.child;null!==m;){for(q=V=m;null!==V;){r=V;y=r.child;switch(r.tag){case 0:case 11:case 14:case 15:Qj(4,r,r.return);break;case 1:Mj(r,r.return);var n=r.stateNode;if(\"function\"===typeof n.componentWillUnmount){d=r;c=r.return;try{b=d,n.props=\nb.memoizedProps,n.state=b.memoizedState,n.componentWillUnmount()}catch(t){W(d,c,t)}}break;case 5:Mj(r,r.return);break;case 22:if(null!==r.memoizedState){hk(q);continue}}null!==y?(y.return=r,V=y):hk(q)}m=m.sibling}a:for(m=null,q=a;;){if(5===q.tag){if(null===m){m=q;try{e=q.stateNode,l?(f=e.style,\"function\"===typeof f.setProperty?f.setProperty(\"display\",\"none\",\"important\"):f.display=\"none\"):(h=q.stateNode,k=q.memoizedProps.style,g=void 0!==k&&null!==k&&k.hasOwnProperty(\"display\")?k.display:null,h.style.display=\nrb(\"display\",g))}catch(t){W(a,a.return,t)}}}else if(6===q.tag){if(null===m)try{q.stateNode.nodeValue=l?\"\":q.memoizedProps}catch(t){W(a,a.return,t)}}else if((22!==q.tag&&23!==q.tag||null===q.memoizedState||q===a)&&null!==q.child){q.child.return=q;q=q.child;continue}if(q===a)break a;for(;null===q.sibling;){if(null===q.return||q.return===a)break a;m===q&&(m=null);q=q.return}m===q&&(m=null);q.sibling.return=q.return;q=q.sibling}}break;case 19:dk(b,a);fk(a);d&4&&bk(a);break;case 21:break;default:dk(b,\na),fk(a)}}function fk(a){var b=a.flags;if(b&2){try{a:{for(var c=a.return;null!==c;){if(Uj(c)){var d=c;break a}c=c.return}throw Error(p(160));}switch(d.tag){case 5:var e=d.stateNode;d.flags&32&&(ob(e,\"\"),d.flags&=-33);var f=Vj(a);Xj(a,f,e);break;case 3:case 4:var g=d.stateNode.containerInfo,h=Vj(a);Wj(a,h,g);break;default:throw Error(p(161));}}catch(k){W(a,a.return,k)}a.flags&=-3}b&4096&&(a.flags&=-4097)}function ik(a,b,c){V=a;jk(a,b,c)}\nfunction jk(a,b,c){for(var d=0!==(a.mode&1);null!==V;){var e=V,f=e.child;if(22===e.tag&&d){var g=null!==e.memoizedState||Kj;if(!g){var h=e.alternate,k=null!==h&&null!==h.memoizedState||U;h=Kj;var l=U;Kj=g;if((U=k)&&!l)for(V=e;null!==V;)g=V,k=g.child,22===g.tag&&null!==g.memoizedState?kk(e):null!==k?(k.return=g,V=k):kk(e);for(;null!==f;)V=f,jk(f,b,c),f=f.sibling;V=e;Kj=h;U=l}lk(a,b,c)}else 0!==(e.subtreeFlags&8772)&&null!==f?(f.return=e,V=f):lk(a,b,c)}}\nfunction lk(a){for(;null!==V;){var b=V;if(0!==(b.flags&8772)){var c=b.alternate;try{if(0!==(b.flags&8772))switch(b.tag){case 0:case 11:case 15:U||Rj(5,b);break;case 1:var d=b.stateNode;if(b.flags&4&&!U)if(null===c)d.componentDidMount();else{var e=b.elementType===b.type?c.memoizedProps:Lg(b.type,c.memoizedProps);d.componentDidUpdate(e,c.memoizedState,d.__reactInternalSnapshotBeforeUpdate)}var f=b.updateQueue;null!==f&&ih(b,f,d);break;case 3:var g=b.updateQueue;if(null!==g){c=null;if(null!==b.child)switch(b.child.tag){case 5:c=\nb.child.stateNode;break;case 1:c=b.child.stateNode}ih(b,g,c)}break;case 5:var h=b.stateNode;if(null===c&&b.flags&4){c=h;var k=b.memoizedProps;switch(b.type){case \"button\":case \"input\":case \"select\":case \"textarea\":k.autoFocus&&c.focus();break;case \"img\":k.src&&(c.src=k.src)}}break;case 6:break;case 4:break;case 12:break;case 13:if(null===b.memoizedState){var l=b.alternate;if(null!==l){var m=l.memoizedState;if(null!==m){var q=m.dehydrated;null!==q&&bd(q)}}}break;case 19:case 17:case 21:case 22:case 23:case 25:break;\ndefault:throw Error(p(163));}U||b.flags&512&&Sj(b)}catch(r){W(b,b.return,r)}}if(b===a){V=null;break}c=b.sibling;if(null!==c){c.return=b.return;V=c;break}V=b.return}}function hk(a){for(;null!==V;){var b=V;if(b===a){V=null;break}var c=b.sibling;if(null!==c){c.return=b.return;V=c;break}V=b.return}}\nfunction kk(a){for(;null!==V;){var b=V;try{switch(b.tag){case 0:case 11:case 15:var c=b.return;try{Rj(4,b)}catch(k){W(b,c,k)}break;case 1:var d=b.stateNode;if(\"function\"===typeof d.componentDidMount){var e=b.return;try{d.componentDidMount()}catch(k){W(b,e,k)}}var f=b.return;try{Sj(b)}catch(k){W(b,f,k)}break;case 5:var g=b.return;try{Sj(b)}catch(k){W(b,g,k)}}}catch(k){W(b,b.return,k)}if(b===a){V=null;break}var h=b.sibling;if(null!==h){h.return=b.return;V=h;break}V=b.return}}\nvar mk=Math.ceil,nk=ua.ReactCurrentDispatcher,ok=ua.ReactCurrentOwner,pk=ua.ReactCurrentBatchConfig,K=0,R=null,Y=null,Z=0,gj=0,fj=Uf(0),T=0,qk=null,hh=0,rk=0,sk=0,tk=null,uk=null,gk=0,Hj=Infinity,vk=null,Pi=!1,Qi=null,Si=null,wk=!1,xk=null,yk=0,zk=0,Ak=null,Bk=-1,Ck=0;function L(){return 0!==(K&6)?B():-1!==Bk?Bk:Bk=B()}\nfunction lh(a){if(0===(a.mode&1))return 1;if(0!==(K&2)&&0!==Z)return Z&-Z;if(null!==Kg.transition)return 0===Ck&&(Ck=yc()),Ck;a=C;if(0!==a)return a;a=window.event;a=void 0===a?16:jd(a.type);return a}function mh(a,b,c,d){if(50<zk)throw zk=0,Ak=null,Error(p(185));Ac(a,c,d);if(0===(K&2)||a!==R)a===R&&(0===(K&2)&&(rk|=c),4===T&&Dk(a,Z)),Ek(a,d),1===c&&0===K&&0===(b.mode&1)&&(Hj=B()+500,fg&&jg())}\nfunction Ek(a,b){var c=a.callbackNode;wc(a,b);var d=uc(a,a===R?Z:0);if(0===d)null!==c&&bc(c),a.callbackNode=null,a.callbackPriority=0;else if(b=d&-d,a.callbackPriority!==b){null!=c&&bc(c);if(1===b)0===a.tag?ig(Fk.bind(null,a)):hg(Fk.bind(null,a)),Jf(function(){0===(K&6)&&jg()}),c=null;else{switch(Dc(d)){case 1:c=fc;break;case 4:c=gc;break;case 16:c=hc;break;case 536870912:c=jc;break;default:c=hc}c=Gk(c,Hk.bind(null,a))}a.callbackPriority=b;a.callbackNode=c}}\nfunction Hk(a,b){Bk=-1;Ck=0;if(0!==(K&6))throw Error(p(327));var c=a.callbackNode;if(Ik()&&a.callbackNode!==c)return null;var d=uc(a,a===R?Z:0);if(0===d)return null;if(0!==(d&30)||0!==(d&a.expiredLanes)||b)b=Jk(a,d);else{b=d;var e=K;K|=2;var f=Kk();if(R!==a||Z!==b)vk=null,Hj=B()+500,Lk(a,b);do try{Mk();break}catch(h){Nk(a,h)}while(1);Qg();nk.current=f;K=e;null!==Y?b=0:(R=null,Z=0,b=T)}if(0!==b){2===b&&(e=xc(a),0!==e&&(d=e,b=Ok(a,e)));if(1===b)throw c=qk,Lk(a,0),Dk(a,d),Ek(a,B()),c;if(6===b)Dk(a,d);\nelse{e=a.current.alternate;if(0===(d&30)&&!Pk(e)&&(b=Jk(a,d),2===b&&(f=xc(a),0!==f&&(d=f,b=Ok(a,f))),1===b))throw c=qk,Lk(a,0),Dk(a,d),Ek(a,B()),c;a.finishedWork=e;a.finishedLanes=d;switch(b){case 0:case 1:throw Error(p(345));case 2:Qk(a,uk,vk);break;case 3:Dk(a,d);if((d&130023424)===d&&(b=gk+500-B(),10<b)){if(0!==uc(a,0))break;e=a.suspendedLanes;if((e&d)!==d){L();a.pingedLanes|=a.suspendedLanes&e;break}a.timeoutHandle=Ff(Qk.bind(null,a,uk,vk),b);break}Qk(a,uk,vk);break;case 4:Dk(a,d);if((d&4194240)===\nd)break;b=a.eventTimes;for(e=-1;0<d;){var g=31-oc(d);f=1<<g;g=b[g];g>e&&(e=g);d&=~f}d=e;d=B()-d;d=(120>d?120:480>d?480:1080>d?1080:1920>d?1920:3E3>d?3E3:4320>d?4320:1960*mk(d/1960))-d;if(10<d){a.timeoutHandle=Ff(Qk.bind(null,a,uk,vk),d);break}Qk(a,uk,vk);break;case 5:Qk(a,uk,vk);break;default:throw Error(p(329));}}}Ek(a,B());return a.callbackNode===c?Hk.bind(null,a):null}\nfunction Ok(a,b){var c=tk;a.current.memoizedState.isDehydrated&&(Lk(a,b).flags|=256);a=Jk(a,b);2!==a&&(b=uk,uk=c,null!==b&&Gj(b));return a}function Gj(a){null===uk?uk=a:uk.push.apply(uk,a)}\nfunction Pk(a){for(var b=a;;){if(b.flags&16384){var c=b.updateQueue;if(null!==c&&(c=c.stores,null!==c))for(var d=0;d<c.length;d++){var e=c[d],f=e.getSnapshot;e=e.value;try{if(!He(f(),e))return!1}catch(g){return!1}}}c=b.child;if(b.subtreeFlags&16384&&null!==c)c.return=b,b=c;else{if(b===a)break;for(;null===b.sibling;){if(null===b.return||b.return===a)return!0;b=b.return}b.sibling.return=b.return;b=b.sibling}}return!0}\nfunction Dk(a,b){b&=~sk;b&=~rk;a.suspendedLanes|=b;a.pingedLanes&=~b;for(a=a.expirationTimes;0<b;){var c=31-oc(b),d=1<<c;a[c]=-1;b&=~d}}function Fk(a){if(0!==(K&6))throw Error(p(327));Ik();var b=uc(a,0);if(0===(b&1))return Ek(a,B()),null;var c=Jk(a,b);if(0!==a.tag&&2===c){var d=xc(a);0!==d&&(b=d,c=Ok(a,d))}if(1===c)throw c=qk,Lk(a,0),Dk(a,b),Ek(a,B()),c;if(6===c)throw Error(p(345));a.finishedWork=a.current.alternate;a.finishedLanes=b;Qk(a,uk,vk);Ek(a,B());return null}\nfunction Rk(a,b){var c=K;K|=1;try{return a(b)}finally{K=c,0===K&&(Hj=B()+500,fg&&jg())}}function Sk(a){null!==xk&&0===xk.tag&&0===(K&6)&&Ik();var b=K;K|=1;var c=pk.transition,d=C;try{if(pk.transition=null,C=1,a)return a()}finally{C=d,pk.transition=c,K=b,0===(K&6)&&jg()}}function Ij(){gj=fj.current;E(fj)}\nfunction Lk(a,b){a.finishedWork=null;a.finishedLanes=0;var c=a.timeoutHandle;-1!==c&&(a.timeoutHandle=-1,Gf(c));if(null!==Y)for(c=Y.return;null!==c;){var d=c;wg(d);switch(d.tag){case 1:d=d.type.childContextTypes;null!==d&&void 0!==d&&$f();break;case 3:Jh();E(Wf);E(H);Oh();break;case 5:Lh(d);break;case 4:Jh();break;case 13:E(M);break;case 19:E(M);break;case 10:Rg(d.type._context);break;case 22:case 23:Ij()}c=c.return}R=a;Y=a=wh(a.current,null);Z=gj=b;T=0;qk=null;sk=rk=hh=0;uk=tk=null;if(null!==Wg){for(b=\n0;b<Wg.length;b++)if(c=Wg[b],d=c.interleaved,null!==d){c.interleaved=null;var e=d.next,f=c.pending;if(null!==f){var g=f.next;f.next=e;d.next=g}c.pending=d}Wg=null}return a}\nfunction Nk(a,b){do{var c=Y;try{Qg();Ph.current=ai;if(Sh){for(var d=N.memoizedState;null!==d;){var e=d.queue;null!==e&&(e.pending=null);d=d.next}Sh=!1}Rh=0;P=O=N=null;Th=!1;Uh=0;ok.current=null;if(null===c||null===c.return){T=1;qk=b;Y=null;break}a:{var f=a,g=c.return,h=c,k=b;b=Z;h.flags|=32768;if(null!==k&&\"object\"===typeof k&&\"function\"===typeof k.then){var l=k,m=h,q=m.tag;if(0===(m.mode&1)&&(0===q||11===q||15===q)){var r=m.alternate;r?(m.updateQueue=r.updateQueue,m.memoizedState=r.memoizedState,\nm.lanes=r.lanes):(m.updateQueue=null,m.memoizedState=null)}var y=Vi(g);if(null!==y){y.flags&=-257;Wi(y,g,h,f,b);y.mode&1&&Ti(f,l,b);b=y;k=l;var n=b.updateQueue;if(null===n){var t=new Set;t.add(k);b.updateQueue=t}else n.add(k);break a}else{if(0===(b&1)){Ti(f,l,b);uj();break a}k=Error(p(426))}}else if(I&&h.mode&1){var J=Vi(g);if(null!==J){0===(J.flags&65536)&&(J.flags|=256);Wi(J,g,h,f,b);Jg(Ki(k,h));break a}}f=k=Ki(k,h);4!==T&&(T=2);null===tk?tk=[f]:tk.push(f);f=g;do{switch(f.tag){case 3:f.flags|=65536;\nb&=-b;f.lanes|=b;var x=Oi(f,k,b);fh(f,x);break a;case 1:h=k;var w=f.type,u=f.stateNode;if(0===(f.flags&128)&&(\"function\"===typeof w.getDerivedStateFromError||null!==u&&\"function\"===typeof u.componentDidCatch&&(null===Si||!Si.has(u)))){f.flags|=65536;b&=-b;f.lanes|=b;var F=Ri(f,h,b);fh(f,F);break a}}f=f.return}while(null!==f)}Tk(c)}catch(na){b=na;Y===c&&null!==c&&(Y=c=c.return);continue}break}while(1)}function Kk(){var a=nk.current;nk.current=ai;return null===a?ai:a}\nfunction uj(){if(0===T||3===T||2===T)T=4;null===R||0===(hh&268435455)&&0===(rk&268435455)||Dk(R,Z)}function Jk(a,b){var c=K;K|=2;var d=Kk();if(R!==a||Z!==b)vk=null,Lk(a,b);do try{Uk();break}catch(e){Nk(a,e)}while(1);Qg();K=c;nk.current=d;if(null!==Y)throw Error(p(261));R=null;Z=0;return T}function Uk(){for(;null!==Y;)Vk(Y)}function Mk(){for(;null!==Y&&!cc();)Vk(Y)}function Vk(a){var b=Wk(a.alternate,a,gj);a.memoizedProps=a.pendingProps;null===b?Tk(a):Y=b;ok.current=null}\nfunction Tk(a){var b=a;do{var c=b.alternate;a=b.return;if(0===(b.flags&32768)){if(c=Fj(c,b,gj),null!==c){Y=c;return}}else{c=Jj(c,b);if(null!==c){c.flags&=32767;Y=c;return}if(null!==a)a.flags|=32768,a.subtreeFlags=0,a.deletions=null;else{T=6;Y=null;return}}b=b.sibling;if(null!==b){Y=b;return}Y=b=a}while(null!==b);0===T&&(T=5)}function Qk(a,b,c){var d=C,e=pk.transition;try{pk.transition=null,C=1,Xk(a,b,c,d)}finally{pk.transition=e,C=d}return null}\nfunction Xk(a,b,c,d){do Ik();while(null!==xk);if(0!==(K&6))throw Error(p(327));c=a.finishedWork;var e=a.finishedLanes;if(null===c)return null;a.finishedWork=null;a.finishedLanes=0;if(c===a.current)throw Error(p(177));a.callbackNode=null;a.callbackPriority=0;var f=c.lanes|c.childLanes;Bc(a,f);a===R&&(Y=R=null,Z=0);0===(c.subtreeFlags&2064)&&0===(c.flags&2064)||wk||(wk=!0,Gk(hc,function(){Ik();return null}));f=0!==(c.flags&15990);if(0!==(c.subtreeFlags&15990)||f){f=pk.transition;pk.transition=null;\nvar g=C;C=1;var h=K;K|=4;ok.current=null;Pj(a,c);ek(c,a);Oe(Df);dd=!!Cf;Df=Cf=null;a.current=c;ik(c,a,e);dc();K=h;C=g;pk.transition=f}else a.current=c;wk&&(wk=!1,xk=a,yk=e);f=a.pendingLanes;0===f&&(Si=null);mc(c.stateNode,d);Ek(a,B());if(null!==b)for(d=a.onRecoverableError,c=0;c<b.length;c++)e=b[c],d(e.value,{componentStack:e.stack,digest:e.digest});if(Pi)throw Pi=!1,a=Qi,Qi=null,a;0!==(yk&1)&&0!==a.tag&&Ik();f=a.pendingLanes;0!==(f&1)?a===Ak?zk++:(zk=0,Ak=a):zk=0;jg();return null}\nfunction Ik(){if(null!==xk){var a=Dc(yk),b=pk.transition,c=C;try{pk.transition=null;C=16>a?16:a;if(null===xk)var d=!1;else{a=xk;xk=null;yk=0;if(0!==(K&6))throw Error(p(331));var e=K;K|=4;for(V=a.current;null!==V;){var f=V,g=f.child;if(0!==(V.flags&16)){var h=f.deletions;if(null!==h){for(var k=0;k<h.length;k++){var l=h[k];for(V=l;null!==V;){var m=V;switch(m.tag){case 0:case 11:case 15:Qj(8,m,f)}var q=m.child;if(null!==q)q.return=m,V=q;else for(;null!==V;){m=V;var r=m.sibling,y=m.return;Tj(m);if(m===\nl){V=null;break}if(null!==r){r.return=y;V=r;break}V=y}}}var n=f.alternate;if(null!==n){var t=n.child;if(null!==t){n.child=null;do{var J=t.sibling;t.sibling=null;t=J}while(null!==t)}}V=f}}if(0!==(f.subtreeFlags&2064)&&null!==g)g.return=f,V=g;else b:for(;null!==V;){f=V;if(0!==(f.flags&2048))switch(f.tag){case 0:case 11:case 15:Qj(9,f,f.return)}var x=f.sibling;if(null!==x){x.return=f.return;V=x;break b}V=f.return}}var w=a.current;for(V=w;null!==V;){g=V;var u=g.child;if(0!==(g.subtreeFlags&2064)&&null!==\nu)u.return=g,V=u;else b:for(g=w;null!==V;){h=V;if(0!==(h.flags&2048))try{switch(h.tag){case 0:case 11:case 15:Rj(9,h)}}catch(na){W(h,h.return,na)}if(h===g){V=null;break b}var F=h.sibling;if(null!==F){F.return=h.return;V=F;break b}V=h.return}}K=e;jg();if(lc&&\"function\"===typeof lc.onPostCommitFiberRoot)try{lc.onPostCommitFiberRoot(kc,a)}catch(na){}d=!0}return d}finally{C=c,pk.transition=b}}return!1}function Yk(a,b,c){b=Ki(c,b);b=Oi(a,b,1);a=dh(a,b,1);b=L();null!==a&&(Ac(a,1,b),Ek(a,b))}\nfunction W(a,b,c){if(3===a.tag)Yk(a,a,c);else for(;null!==b;){if(3===b.tag){Yk(b,a,c);break}else if(1===b.tag){var d=b.stateNode;if(\"function\"===typeof b.type.getDerivedStateFromError||\"function\"===typeof d.componentDidCatch&&(null===Si||!Si.has(d))){a=Ki(c,a);a=Ri(b,a,1);b=dh(b,a,1);a=L();null!==b&&(Ac(b,1,a),Ek(b,a));break}}b=b.return}}\nfunction Ui(a,b,c){var d=a.pingCache;null!==d&&d.delete(b);b=L();a.pingedLanes|=a.suspendedLanes&c;R===a&&(Z&c)===c&&(4===T||3===T&&(Z&130023424)===Z&&500>B()-gk?Lk(a,0):sk|=c);Ek(a,b)}function Zk(a,b){0===b&&(0===(a.mode&1)?b=1:(b=sc,sc<<=1,0===(sc&130023424)&&(sc=4194304)));var c=L();a=Zg(a,b);null!==a&&(Ac(a,b,c),Ek(a,c))}function vj(a){var b=a.memoizedState,c=0;null!==b&&(c=b.retryLane);Zk(a,c)}\nfunction ck(a,b){var c=0;switch(a.tag){case 13:var d=a.stateNode;var e=a.memoizedState;null!==e&&(c=e.retryLane);break;case 19:d=a.stateNode;break;default:throw Error(p(314));}null!==d&&d.delete(b);Zk(a,c)}var Wk;\nWk=function(a,b,c){if(null!==a)if(a.memoizedProps!==b.pendingProps||Wf.current)Ug=!0;else{if(0===(a.lanes&c)&&0===(b.flags&128))return Ug=!1,zj(a,b,c);Ug=0!==(a.flags&131072)?!0:!1}else Ug=!1,I&&0!==(b.flags&1048576)&&ug(b,ng,b.index);b.lanes=0;switch(b.tag){case 2:var d=b.type;jj(a,b);a=b.pendingProps;var e=Yf(b,H.current);Tg(b,c);e=Xh(null,b,d,a,e,c);var f=bi();b.flags|=1;\"object\"===typeof e&&null!==e&&\"function\"===typeof e.render&&void 0===e.$$typeof?(b.tag=1,b.memoizedState=null,b.updateQueue=\nnull,Zf(d)?(f=!0,cg(b)):f=!1,b.memoizedState=null!==e.state&&void 0!==e.state?e.state:null,ah(b),e.updater=nh,b.stateNode=e,e._reactInternals=b,rh(b,d,a,c),b=kj(null,b,d,!0,f,c)):(b.tag=0,I&&f&&vg(b),Yi(null,b,e,c),b=b.child);return b;case 16:d=b.elementType;a:{jj(a,b);a=b.pendingProps;e=d._init;d=e(d._payload);b.type=d;e=b.tag=$k(d);a=Lg(d,a);switch(e){case 0:b=dj(null,b,d,a,c);break a;case 1:b=ij(null,b,d,a,c);break a;case 11:b=Zi(null,b,d,a,c);break a;case 14:b=aj(null,b,d,Lg(d.type,a),c);break a}throw Error(p(306,\nd,\"\"));}return b;case 0:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:Lg(d,e),dj(a,b,d,e,c);case 1:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:Lg(d,e),ij(a,b,d,e,c);case 3:a:{lj(b);if(null===a)throw Error(p(387));d=b.pendingProps;f=b.memoizedState;e=f.element;bh(a,b);gh(b,d,null,c);var g=b.memoizedState;d=g.element;if(f.isDehydrated)if(f={element:d,isDehydrated:!1,cache:g.cache,pendingSuspenseBoundaries:g.pendingSuspenseBoundaries,transitions:g.transitions},b.updateQueue.baseState=\nf,b.memoizedState=f,b.flags&256){e=Ki(Error(p(423)),b);b=mj(a,b,d,c,e);break a}else if(d!==e){e=Ki(Error(p(424)),b);b=mj(a,b,d,c,e);break a}else for(yg=Lf(b.stateNode.containerInfo.firstChild),xg=b,I=!0,zg=null,c=Ch(b,null,d,c),b.child=c;c;)c.flags=c.flags&-3|4096,c=c.sibling;else{Ig();if(d===e){b=$i(a,b,c);break a}Yi(a,b,d,c)}b=b.child}return b;case 5:return Kh(b),null===a&&Eg(b),d=b.type,e=b.pendingProps,f=null!==a?a.memoizedProps:null,g=e.children,Ef(d,e)?g=null:null!==f&&Ef(d,f)&&(b.flags|=32),\nhj(a,b),Yi(a,b,g,c),b.child;case 6:return null===a&&Eg(b),null;case 13:return pj(a,b,c);case 4:return Ih(b,b.stateNode.containerInfo),d=b.pendingProps,null===a?b.child=Bh(b,null,d,c):Yi(a,b,d,c),b.child;case 11:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:Lg(d,e),Zi(a,b,d,e,c);case 7:return Yi(a,b,b.pendingProps,c),b.child;case 8:return Yi(a,b,b.pendingProps.children,c),b.child;case 12:return Yi(a,b,b.pendingProps.children,c),b.child;case 10:a:{d=b.type._context;e=b.pendingProps;f=b.memoizedProps;\ng=e.value;G(Mg,d._currentValue);d._currentValue=g;if(null!==f)if(He(f.value,g)){if(f.children===e.children&&!Wf.current){b=$i(a,b,c);break a}}else for(f=b.child,null!==f&&(f.return=b);null!==f;){var h=f.dependencies;if(null!==h){g=f.child;for(var k=h.firstContext;null!==k;){if(k.context===d){if(1===f.tag){k=ch(-1,c&-c);k.tag=2;var l=f.updateQueue;if(null!==l){l=l.shared;var m=l.pending;null===m?k.next=k:(k.next=m.next,m.next=k);l.pending=k}}f.lanes|=c;k=f.alternate;null!==k&&(k.lanes|=c);Sg(f.return,\nc,b);h.lanes|=c;break}k=k.next}}else if(10===f.tag)g=f.type===b.type?null:f.child;else if(18===f.tag){g=f.return;if(null===g)throw Error(p(341));g.lanes|=c;h=g.alternate;null!==h&&(h.lanes|=c);Sg(g,c,b);g=f.sibling}else g=f.child;if(null!==g)g.return=f;else for(g=f;null!==g;){if(g===b){g=null;break}f=g.sibling;if(null!==f){f.return=g.return;g=f;break}g=g.return}f=g}Yi(a,b,e.children,c);b=b.child}return b;case 9:return e=b.type,d=b.pendingProps.children,Tg(b,c),e=Vg(e),d=d(e),b.flags|=1,Yi(a,b,d,c),\nb.child;case 14:return d=b.type,e=Lg(d,b.pendingProps),e=Lg(d.type,e),aj(a,b,d,e,c);case 15:return cj(a,b,b.type,b.pendingProps,c);case 17:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:Lg(d,e),jj(a,b),b.tag=1,Zf(d)?(a=!0,cg(b)):a=!1,Tg(b,c),ph(b,d,e),rh(b,d,e,c),kj(null,b,d,!0,a,c);case 19:return yj(a,b,c);case 22:return ej(a,b,c)}throw Error(p(156,b.tag));};function Gk(a,b){return ac(a,b)}\nfunction al(a,b,c,d){this.tag=a;this.key=c;this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null;this.index=0;this.ref=null;this.pendingProps=b;this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null;this.mode=d;this.subtreeFlags=this.flags=0;this.deletions=null;this.childLanes=this.lanes=0;this.alternate=null}function Bg(a,b,c,d){return new al(a,b,c,d)}function bj(a){a=a.prototype;return!(!a||!a.isReactComponent)}\nfunction $k(a){if(\"function\"===typeof a)return bj(a)?1:0;if(void 0!==a&&null!==a){a=a.$$typeof;if(a===Da)return 11;if(a===Ga)return 14}return 2}\nfunction wh(a,b){var c=a.alternate;null===c?(c=Bg(a.tag,b,a.key,a.mode),c.elementType=a.elementType,c.type=a.type,c.stateNode=a.stateNode,c.alternate=a,a.alternate=c):(c.pendingProps=b,c.type=a.type,c.flags=0,c.subtreeFlags=0,c.deletions=null);c.flags=a.flags&14680064;c.childLanes=a.childLanes;c.lanes=a.lanes;c.child=a.child;c.memoizedProps=a.memoizedProps;c.memoizedState=a.memoizedState;c.updateQueue=a.updateQueue;b=a.dependencies;c.dependencies=null===b?null:{lanes:b.lanes,firstContext:b.firstContext};\nc.sibling=a.sibling;c.index=a.index;c.ref=a.ref;return c}\nfunction yh(a,b,c,d,e,f){var g=2;d=a;if(\"function\"===typeof a)bj(a)&&(g=1);else if(\"string\"===typeof a)g=5;else a:switch(a){case ya:return Ah(c.children,e,f,b);case za:g=8;e|=8;break;case Aa:return a=Bg(12,c,b,e|2),a.elementType=Aa,a.lanes=f,a;case Ea:return a=Bg(13,c,b,e),a.elementType=Ea,a.lanes=f,a;case Fa:return a=Bg(19,c,b,e),a.elementType=Fa,a.lanes=f,a;case Ia:return qj(c,e,f,b);default:if(\"object\"===typeof a&&null!==a)switch(a.$$typeof){case Ba:g=10;break a;case Ca:g=9;break a;case Da:g=11;\nbreak a;case Ga:g=14;break a;case Ha:g=16;d=null;break a}throw Error(p(130,null==a?a:typeof a,\"\"));}b=Bg(g,c,b,e);b.elementType=a;b.type=d;b.lanes=f;return b}function Ah(a,b,c,d){a=Bg(7,a,d,b);a.lanes=c;return a}function qj(a,b,c,d){a=Bg(22,a,d,b);a.elementType=Ia;a.lanes=c;a.stateNode={isHidden:!1};return a}function xh(a,b,c){a=Bg(6,a,null,b);a.lanes=c;return a}\nfunction zh(a,b,c){b=Bg(4,null!==a.children?a.children:[],a.key,b);b.lanes=c;b.stateNode={containerInfo:a.containerInfo,pendingChildren:null,implementation:a.implementation};return b}\nfunction bl(a,b,c,d,e){this.tag=b;this.containerInfo=a;this.finishedWork=this.pingCache=this.current=this.pendingChildren=null;this.timeoutHandle=-1;this.callbackNode=this.pendingContext=this.context=null;this.callbackPriority=0;this.eventTimes=zc(0);this.expirationTimes=zc(-1);this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0;this.entanglements=zc(0);this.identifierPrefix=d;this.onRecoverableError=e;this.mutableSourceEagerHydrationData=\nnull}function cl(a,b,c,d,e,f,g,h,k){a=new bl(a,b,c,h,k);1===b?(b=1,!0===f&&(b|=8)):b=0;f=Bg(3,null,null,b);a.current=f;f.stateNode=a;f.memoizedState={element:d,isDehydrated:c,cache:null,transitions:null,pendingSuspenseBoundaries:null};ah(f);return a}function dl(a,b,c){var d=3<arguments.length&&void 0!==arguments[3]?arguments[3]:null;return{$$typeof:wa,key:null==d?null:\"\"+d,children:a,containerInfo:b,implementation:c}}\nfunction el(a){if(!a)return Vf;a=a._reactInternals;a:{if(Vb(a)!==a||1!==a.tag)throw Error(p(170));var b=a;do{switch(b.tag){case 3:b=b.stateNode.context;break a;case 1:if(Zf(b.type)){b=b.stateNode.__reactInternalMemoizedMergedChildContext;break a}}b=b.return}while(null!==b);throw Error(p(171));}if(1===a.tag){var c=a.type;if(Zf(c))return bg(a,c,b)}return b}\nfunction fl(a,b,c,d,e,f,g,h,k){a=cl(c,d,!0,a,e,f,g,h,k);a.context=el(null);c=a.current;d=L();e=lh(c);f=ch(d,e);f.callback=void 0!==b&&null!==b?b:null;dh(c,f,e);a.current.lanes=e;Ac(a,e,d);Ek(a,d);return a}function gl(a,b,c,d){var e=b.current,f=L(),g=lh(e);c=el(c);null===b.context?b.context=c:b.pendingContext=c;b=ch(f,g);b.payload={element:a};d=void 0===d?null:d;null!==d&&(b.callback=d);a=dh(e,b,g);null!==a&&(mh(a,e,g,f),eh(a,e,g));return g}\nfunction hl(a){a=a.current;if(!a.child)return null;switch(a.child.tag){case 5:return a.child.stateNode;default:return a.child.stateNode}}function il(a,b){a=a.memoizedState;if(null!==a&&null!==a.dehydrated){var c=a.retryLane;a.retryLane=0!==c&&c<b?c:b}}function jl(a,b){il(a,b);(a=a.alternate)&&il(a,b)}function kl(){return null}var ll=\"function\"===typeof reportError?reportError:function(a){console.error(a)};function ml(a){this._internalRoot=a}\nnl.prototype.render=ml.prototype.render=function(a){var b=this._internalRoot;if(null===b)throw Error(p(409));gl(a,b,null,null)};nl.prototype.unmount=ml.prototype.unmount=function(){var a=this._internalRoot;if(null!==a){this._internalRoot=null;var b=a.containerInfo;Sk(function(){gl(null,a,null,null)});b[uf]=null}};function nl(a){this._internalRoot=a}\nnl.prototype.unstable_scheduleHydration=function(a){if(a){var b=Hc();a={blockedOn:null,target:a,priority:b};for(var c=0;c<Qc.length&&0!==b&&b<Qc[c].priority;c++);Qc.splice(c,0,a);0===c&&Vc(a)}};function ol(a){return!(!a||1!==a.nodeType&&9!==a.nodeType&&11!==a.nodeType)}function pl(a){return!(!a||1!==a.nodeType&&9!==a.nodeType&&11!==a.nodeType&&(8!==a.nodeType||\" react-mount-point-unstable \"!==a.nodeValue))}function ql(){}\nfunction rl(a,b,c,d,e){if(e){if(\"function\"===typeof d){var f=d;d=function(){var a=hl(g);f.call(a)}}var g=fl(b,d,a,0,null,!1,!1,\"\",ql);a._reactRootContainer=g;a[uf]=g.current;sf(8===a.nodeType?a.parentNode:a);Sk();return g}for(;e=a.lastChild;)a.removeChild(e);if(\"function\"===typeof d){var h=d;d=function(){var a=hl(k);h.call(a)}}var k=cl(a,0,!1,null,null,!1,!1,\"\",ql);a._reactRootContainer=k;a[uf]=k.current;sf(8===a.nodeType?a.parentNode:a);Sk(function(){gl(b,k,c,d)});return k}\nfunction sl(a,b,c,d,e){var f=c._reactRootContainer;if(f){var g=f;if(\"function\"===typeof e){var h=e;e=function(){var a=hl(g);h.call(a)}}gl(b,g,a,e)}else g=rl(c,b,a,e,d);return hl(g)}Ec=function(a){switch(a.tag){case 3:var b=a.stateNode;if(b.current.memoizedState.isDehydrated){var c=tc(b.pendingLanes);0!==c&&(Cc(b,c|1),Ek(b,B()),0===(K&6)&&(Hj=B()+500,jg()))}break;case 13:Sk(function(){var b=Zg(a,1);if(null!==b){var c=L();mh(b,a,1,c)}}),jl(a,1)}};\nFc=function(a){if(13===a.tag){var b=Zg(a,134217728);if(null!==b){var c=L();mh(b,a,134217728,c)}jl(a,134217728)}};Gc=function(a){if(13===a.tag){var b=lh(a),c=Zg(a,b);if(null!==c){var d=L();mh(c,a,b,d)}jl(a,b)}};Hc=function(){return C};Ic=function(a,b){var c=C;try{return C=a,b()}finally{C=c}};\nyb=function(a,b,c){switch(b){case \"input\":bb(a,c);b=c.name;if(\"radio\"===c.type&&null!=b){for(c=a;c.parentNode;)c=c.parentNode;c=c.querySelectorAll(\"input[name=\"+JSON.stringify(\"\"+b)+'][type=\"radio\"]');for(b=0;b<c.length;b++){var d=c[b];if(d!==a&&d.form===a.form){var e=Db(d);if(!e)throw Error(p(90));Wa(d);bb(d,e)}}}break;case \"textarea\":ib(a,c);break;case \"select\":b=c.value,null!=b&&fb(a,!!c.multiple,b,!1)}};Gb=Rk;Hb=Sk;\nvar tl={usingClientEntryPoint:!1,Events:[Cb,ue,Db,Eb,Fb,Rk]},ul={findFiberByHostInstance:Wc,bundleType:0,version:\"18.2.0\",rendererPackageName:\"react-dom\"};\nvar vl={bundleType:ul.bundleType,version:ul.version,rendererPackageName:ul.rendererPackageName,rendererConfig:ul.rendererConfig,overrideHookState:null,overrideHookStateDeletePath:null,overrideHookStateRenamePath:null,overrideProps:null,overridePropsDeletePath:null,overridePropsRenamePath:null,setErrorHandler:null,setSuspenseHandler:null,scheduleUpdate:null,currentDispatcherRef:ua.ReactCurrentDispatcher,findHostInstanceByFiber:function(a){a=Zb(a);return null===a?null:a.stateNode},findFiberByHostInstance:ul.findFiberByHostInstance||\nkl,findHostInstancesForRefresh:null,scheduleRefresh:null,scheduleRoot:null,setRefreshHandler:null,getCurrentFiber:null,reconcilerVersion:\"18.2.0-next-9e3b772b8-20220608\"};if(\"undefined\"!==typeof __REACT_DEVTOOLS_GLOBAL_HOOK__){var wl=__REACT_DEVTOOLS_GLOBAL_HOOK__;if(!wl.isDisabled&&wl.supportsFiber)try{kc=wl.inject(vl),lc=wl}catch(a){}}exports.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED=tl;\nexports.createPortal=function(a,b){var c=2<arguments.length&&void 0!==arguments[2]?arguments[2]:null;if(!ol(b))throw Error(p(200));return dl(a,b,null,c)};exports.createRoot=function(a,b){if(!ol(a))throw Error(p(299));var c=!1,d=\"\",e=ll;null!==b&&void 0!==b&&(!0===b.unstable_strictMode&&(c=!0),void 0!==b.identifierPrefix&&(d=b.identifierPrefix),void 0!==b.onRecoverableError&&(e=b.onRecoverableError));b=cl(a,1,!1,null,null,c,!1,d,e);a[uf]=b.current;sf(8===a.nodeType?a.parentNode:a);return new ml(b)};\nexports.findDOMNode=function(a){if(null==a)return null;if(1===a.nodeType)return a;var b=a._reactInternals;if(void 0===b){if(\"function\"===typeof a.render)throw Error(p(188));a=Object.keys(a).join(\",\");throw Error(p(268,a));}a=Zb(b);a=null===a?null:a.stateNode;return a};exports.flushSync=function(a){return Sk(a)};exports.hydrate=function(a,b,c){if(!pl(b))throw Error(p(200));return sl(null,a,b,!0,c)};\nexports.hydrateRoot=function(a,b,c){if(!ol(a))throw Error(p(405));var d=null!=c&&c.hydratedSources||null,e=!1,f=\"\",g=ll;null!==c&&void 0!==c&&(!0===c.unstable_strictMode&&(e=!0),void 0!==c.identifierPrefix&&(f=c.identifierPrefix),void 0!==c.onRecoverableError&&(g=c.onRecoverableError));b=fl(b,null,a,1,null!=c?c:null,e,!1,f,g);a[uf]=b.current;sf(a);if(d)for(a=0;a<d.length;a++)c=d[a],e=c._getVersion,e=e(c._source),null==b.mutableSourceEagerHydrationData?b.mutableSourceEagerHydrationData=[c,e]:b.mutableSourceEagerHydrationData.push(c,\ne);return new nl(b)};exports.render=function(a,b,c){if(!pl(b))throw Error(p(200));return sl(null,a,b,!1,c)};exports.unmountComponentAtNode=function(a){if(!pl(a))throw Error(p(40));return a._reactRootContainer?(Sk(function(){sl(null,null,a,!1,function(){a._reactRootContainer=null;a[uf]=null})}),!0):!1};exports.unstable_batchedUpdates=Rk;\nexports.unstable_renderSubtreeIntoContainer=function(a,b,c,d){if(!pl(c))throw Error(p(200));if(null==a||void 0===a._reactInternals)throw Error(p(38));return sl(a,b,c,!1,d)};exports.version=\"18.2.0-next-9e3b772b8-20220608\";\n","'use strict';\n\nvar m = require('react-dom');\nif (process.env.NODE_ENV === 'production') {\n  exports.createRoot = m.createRoot;\n  exports.hydrateRoot = m.hydrateRoot;\n} else {\n  var i = m.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;\n  exports.createRoot = function(c, o) {\n    i.usingClientEntryPoint = true;\n    try {\n      return m.createRoot(c, o);\n    } finally {\n      i.usingClientEntryPoint = false;\n    }\n  };\n  exports.hydrateRoot = function(c, h, o) {\n    i.usingClientEntryPoint = true;\n    try {\n      return m.hydrateRoot(c, h, o);\n    } finally {\n      i.usingClientEntryPoint = false;\n    }\n  };\n}\n","'use strict';\n\nfunction checkDCE() {\n  /* global __REACT_DEVTOOLS_GLOBAL_HOOK__ */\n  if (\n    typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ === 'undefined' ||\n    typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE !== 'function'\n  ) {\n    return;\n  }\n  if (process.env.NODE_ENV !== 'production') {\n    // This branch is unreachable because this function is only called\n    // in production, but the condition is true only in development.\n    // Therefore if the branch is still here, dead code elimination wasn't\n    // properly applied.\n    // Don't change the message. React DevTools relies on it. Also make sure\n    // this message doesn't occur elsewhere in this function, or it will cause\n    // a false positive.\n    throw new Error('^_^');\n  }\n  try {\n    // Verify that the code above has been dead code eliminated (DCE'd).\n    __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(checkDCE);\n  } catch (err) {\n    // DevTools shouldn't crash React, no matter what.\n    // We should still report in case we break this code.\n    console.error(err);\n  }\n}\n\nif (process.env.NODE_ENV === 'production') {\n  // DCE check should happen before ReactDOM bundle executes so that\n  // DevTools can report bad minification during injection.\n  checkDCE();\n  module.exports = require('./cjs/react-dom.production.min.js');\n} else {\n  module.exports = require('./cjs/react-dom.development.js');\n}\n","/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n    extendStatics = Object.setPrototypeOf ||\r\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n        function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n    return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n    extendStatics(d, b);\r\n    function __() { this.constructor = d; }\r\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n    __assign = Object.assign || function __assign(t) {\r\n        for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n            s = arguments[i];\r\n            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n        }\r\n        return t;\r\n    }\r\n    return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n    var t = {};\r\n    for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n        t[p] = s[p];\r\n    if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n        for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n            if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n                t[p[i]] = s[p[i]];\r\n        }\r\n    return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n    return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n    return new (P || (P = Promise))(function (resolve, reject) {\r\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n    });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n    return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n    function verb(n) { return function (v) { return step([n, v]); }; }\r\n    function step(op) {\r\n        if (f) throw new TypeError(\"Generator is already executing.\");\r\n        while (_) try {\r\n            if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n            if (y = 0, t) op = [op[0] & 2, t.value];\r\n            switch (op[0]) {\r\n                case 0: case 1: t = op; break;\r\n                case 4: _.label++; return { value: op[1], done: false };\r\n                case 5: _.label++; y = op[1]; op = [0]; continue;\r\n                case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n                default:\r\n                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n                    if (t[2]) _.ops.pop();\r\n                    _.trys.pop(); continue;\r\n            }\r\n            op = body.call(thisArg, _);\r\n        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n        if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n    }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n    if (k2 === undefined) k2 = k;\r\n    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\r\n}) : (function(o, m, k, k2) {\r\n    if (k2 === undefined) k2 = k;\r\n    o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n    for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n    var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n    if (m) return m.call(o);\r\n    if (o && typeof o.length === \"number\") return {\r\n        next: function () {\r\n            if (o && i >= o.length) o = void 0;\r\n            return { value: o && o[i++], done: !o };\r\n        }\r\n    };\r\n    throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n    var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n    if (!m) return o;\r\n    var i = m.call(o), r, ar = [], e;\r\n    try {\r\n        while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n    }\r\n    catch (error) { e = { error: error }; }\r\n    finally {\r\n        try {\r\n            if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n        }\r\n        finally { if (e) throw e.error; }\r\n    }\r\n    return ar;\r\n}\r\n\r\nexport function __spread() {\r\n    for (var ar = [], i = 0; i < arguments.length; i++)\r\n        ar = ar.concat(__read(arguments[i]));\r\n    return ar;\r\n}\r\n\r\nexport function __spreadArrays() {\r\n    for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n    for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n        for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n            r[k] = a[j];\r\n    return r;\r\n};\r\n\r\nexport function __await(v) {\r\n    return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n    if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n    var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n    return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n    function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n    function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n    function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n    function fulfill(value) { resume(\"next\", value); }\r\n    function reject(value) { resume(\"throw\", value); }\r\n    function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n    var i, p;\r\n    return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n    function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n    if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n    var m = o[Symbol.asyncIterator], i;\r\n    return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n    function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n    function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n    if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n    return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n    Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n    o[\"default\"] = v;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n    if (mod && mod.__esModule) return mod;\r\n    var result = {};\r\n    if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n    __setModuleDefault(result, mod);\r\n    return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n    return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, privateMap) {\r\n    if (!privateMap.has(receiver)) {\r\n        throw new TypeError(\"attempted to get private field on non-instance\");\r\n    }\r\n    return privateMap.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, privateMap, value) {\r\n    if (!privateMap.has(receiver)) {\r\n        throw new TypeError(\"attempted to set private field on non-instance\");\r\n    }\r\n    privateMap.set(receiver, value);\r\n    return value;\r\n}\r\n","import { __assign, __extends } from 'tslib';\nimport React from 'react';\nimport normalizeWheel from 'normalize-wheel';\n\n/**\r\n * Compute the dimension of the crop area based on media size,\r\n * aspect ratio and optionally rotation\r\n */\nfunction getCropSize(mediaWidth, mediaHeight, containerWidth, containerHeight, aspect, rotation) {\n  if (rotation === void 0) {\n    rotation = 0;\n  }\n  var _a = rotateSize(mediaWidth, mediaHeight, rotation),\n    width = _a.width,\n    height = _a.height;\n  var fittingWidth = Math.min(width, containerWidth);\n  var fittingHeight = Math.min(height, containerHeight);\n  if (fittingWidth > fittingHeight * aspect) {\n    return {\n      width: fittingHeight * aspect,\n      height: fittingHeight\n    };\n  }\n  return {\n    width: fittingWidth,\n    height: fittingWidth / aspect\n  };\n}\n/**\r\n * Compute media zoom.\r\n * We fit the media into the container with \"max-width: 100%; max-height: 100%;\"\r\n */\nfunction getMediaZoom(mediaSize) {\n  // Take the axis with more pixels to improve accuracy\n  return mediaSize.width > mediaSize.height ? mediaSize.width / mediaSize.naturalWidth : mediaSize.height / mediaSize.naturalHeight;\n}\n/**\r\n * Ensure a new media position stays in the crop area.\r\n */\nfunction restrictPosition(position, mediaSize, cropSize, zoom, rotation) {\n  if (rotation === void 0) {\n    rotation = 0;\n  }\n  var _a = rotateSize(mediaSize.width, mediaSize.height, rotation),\n    width = _a.width,\n    height = _a.height;\n  return {\n    x: restrictPositionCoord(position.x, width, cropSize.width, zoom),\n    y: restrictPositionCoord(position.y, height, cropSize.height, zoom)\n  };\n}\nfunction restrictPositionCoord(position, mediaSize, cropSize, zoom) {\n  var maxPosition = mediaSize * zoom / 2 - cropSize / 2;\n  return clamp(position, -maxPosition, maxPosition);\n}\nfunction getDistanceBetweenPoints(pointA, pointB) {\n  return Math.sqrt(Math.pow(pointA.y - pointB.y, 2) + Math.pow(pointA.x - pointB.x, 2));\n}\nfunction getRotationBetweenPoints(pointA, pointB) {\n  return Math.atan2(pointB.y - pointA.y, pointB.x - pointA.x) * 180 / Math.PI;\n}\n/**\r\n * Compute the output cropped area of the media in percentages and pixels.\r\n * x/y are the top-left coordinates on the src media\r\n */\nfunction computeCroppedArea(crop, mediaSize, cropSize, aspect, zoom, rotation, restrictPosition) {\n  if (rotation === void 0) {\n    rotation = 0;\n  }\n  if (restrictPosition === void 0) {\n    restrictPosition = true;\n  }\n  // if the media is rotated by the user, we cannot limit the position anymore\n  // as it might need to be negative.\n  var limitAreaFn = restrictPosition ? limitArea : noOp;\n  var mediaBBoxSize = rotateSize(mediaSize.width, mediaSize.height, rotation);\n  var mediaNaturalBBoxSize = rotateSize(mediaSize.naturalWidth, mediaSize.naturalHeight, rotation);\n  // calculate the crop area in percentages\n  // in the rotated space\n  var croppedAreaPercentages = {\n    x: limitAreaFn(100, ((mediaBBoxSize.width - cropSize.width / zoom) / 2 - crop.x / zoom) / mediaBBoxSize.width * 100),\n    y: limitAreaFn(100, ((mediaBBoxSize.height - cropSize.height / zoom) / 2 - crop.y / zoom) / mediaBBoxSize.height * 100),\n    width: limitAreaFn(100, cropSize.width / mediaBBoxSize.width * 100 / zoom),\n    height: limitAreaFn(100, cropSize.height / mediaBBoxSize.height * 100 / zoom)\n  };\n  // we compute the pixels size naively\n  var widthInPixels = Math.round(limitAreaFn(mediaNaturalBBoxSize.width, croppedAreaPercentages.width * mediaNaturalBBoxSize.width / 100));\n  var heightInPixels = Math.round(limitAreaFn(mediaNaturalBBoxSize.height, croppedAreaPercentages.height * mediaNaturalBBoxSize.height / 100));\n  var isImgWiderThanHigh = mediaNaturalBBoxSize.width >= mediaNaturalBBoxSize.height * aspect;\n  // then we ensure the width and height exactly match the aspect (to avoid rounding approximations)\n  // if the media is wider than high, when zoom is 0, the crop height will be equals to image height\n  // thus we want to compute the width from the height and aspect for accuracy.\n  // Otherwise, we compute the height from width and aspect.\n  var sizePixels = isImgWiderThanHigh ? {\n    width: Math.round(heightInPixels * aspect),\n    height: heightInPixels\n  } : {\n    width: widthInPixels,\n    height: Math.round(widthInPixels / aspect)\n  };\n  var croppedAreaPixels = __assign(__assign({}, sizePixels), {\n    x: Math.round(limitAreaFn(mediaNaturalBBoxSize.width - sizePixels.width, croppedAreaPercentages.x * mediaNaturalBBoxSize.width / 100)),\n    y: Math.round(limitAreaFn(mediaNaturalBBoxSize.height - sizePixels.height, croppedAreaPercentages.y * mediaNaturalBBoxSize.height / 100))\n  });\n  return {\n    croppedAreaPercentages: croppedAreaPercentages,\n    croppedAreaPixels: croppedAreaPixels\n  };\n}\n/**\r\n * Ensure the returned value is between 0 and max\r\n */\nfunction limitArea(max, value) {\n  return Math.min(max, Math.max(0, value));\n}\nfunction noOp(_max, value) {\n  return value;\n}\n/**\r\n * Compute crop and zoom from the croppedAreaPercentages.\r\n */\nfunction getInitialCropFromCroppedAreaPercentages(croppedAreaPercentages, mediaSize, rotation, cropSize, minZoom, maxZoom) {\n  var mediaBBoxSize = rotateSize(mediaSize.width, mediaSize.height, rotation);\n  // This is the inverse process of computeCroppedArea\n  var zoom = clamp(cropSize.width / mediaBBoxSize.width * (100 / croppedAreaPercentages.width), minZoom, maxZoom);\n  var crop = {\n    x: zoom * mediaBBoxSize.width / 2 - cropSize.width / 2 - mediaBBoxSize.width * zoom * (croppedAreaPercentages.x / 100),\n    y: zoom * mediaBBoxSize.height / 2 - cropSize.height / 2 - mediaBBoxSize.height * zoom * (croppedAreaPercentages.y / 100)\n  };\n  return {\n    crop: crop,\n    zoom: zoom\n  };\n}\n/**\r\n * Compute zoom from the croppedAreaPixels\r\n */\nfunction getZoomFromCroppedAreaPixels(croppedAreaPixels, mediaSize, cropSize) {\n  var mediaZoom = getMediaZoom(mediaSize);\n  return cropSize.height > cropSize.width ? cropSize.height / (croppedAreaPixels.height * mediaZoom) : cropSize.width / (croppedAreaPixels.width * mediaZoom);\n}\n/**\r\n * Compute crop and zoom from the croppedAreaPixels\r\n */\nfunction getInitialCropFromCroppedAreaPixels(croppedAreaPixels, mediaSize, rotation, cropSize, minZoom, maxZoom) {\n  if (rotation === void 0) {\n    rotation = 0;\n  }\n  var mediaNaturalBBoxSize = rotateSize(mediaSize.naturalWidth, mediaSize.naturalHeight, rotation);\n  var zoom = clamp(getZoomFromCroppedAreaPixels(croppedAreaPixels, mediaSize, cropSize), minZoom, maxZoom);\n  var cropZoom = cropSize.height > cropSize.width ? cropSize.height / croppedAreaPixels.height : cropSize.width / croppedAreaPixels.width;\n  var crop = {\n    x: ((mediaNaturalBBoxSize.width - croppedAreaPixels.width) / 2 - croppedAreaPixels.x) * cropZoom,\n    y: ((mediaNaturalBBoxSize.height - croppedAreaPixels.height) / 2 - croppedAreaPixels.y) * cropZoom\n  };\n  return {\n    crop: crop,\n    zoom: zoom\n  };\n}\n/**\r\n * Return the point that is the center of point a and b\r\n */\nfunction getCenter(a, b) {\n  return {\n    x: (b.x + a.x) / 2,\n    y: (b.y + a.y) / 2\n  };\n}\nfunction getRadianAngle(degreeValue) {\n  return degreeValue * Math.PI / 180;\n}\n/**\r\n * Returns the new bounding area of a rotated rectangle.\r\n */\nfunction rotateSize(width, height, rotation) {\n  var rotRad = getRadianAngle(rotation);\n  return {\n    width: Math.abs(Math.cos(rotRad) * width) + Math.abs(Math.sin(rotRad) * height),\n    height: Math.abs(Math.sin(rotRad) * width) + Math.abs(Math.cos(rotRad) * height)\n  };\n}\n/**\r\n * Clamp value between min and max\r\n */\nfunction clamp(value, min, max) {\n  return Math.min(Math.max(value, min), max);\n}\n/**\r\n * Combine multiple class names into a single string.\r\n */\nfunction classNames() {\n  var args = [];\n  for (var _i = 0; _i < arguments.length; _i++) {\n    args[_i] = arguments[_i];\n  }\n  return args.filter(function (value) {\n    if (typeof value === 'string' && value.length > 0) {\n      return true;\n    }\n    return false;\n  }).join(' ').trim();\n}\n\nvar css_248z = \".reactEasyCrop_Container {\\n  position: absolute;\\n  top: 0;\\n  left: 0;\\n  right: 0;\\n  bottom: 0;\\n  overflow: hidden;\\n  user-select: none;\\n  touch-action: none;\\n  cursor: move;\\n  display: flex;\\n  justify-content: center;\\n  align-items: center;\\n}\\n\\n.reactEasyCrop_Image,\\n.reactEasyCrop_Video {\\n  will-change: transform; /* this improves performances and prevent painting issues on iOS Chrome */\\n}\\n\\n.reactEasyCrop_Contain {\\n  max-width: 100%;\\n  max-height: 100%;\\n  margin: auto;\\n  position: absolute;\\n  top: 0;\\n  bottom: 0;\\n  left: 0;\\n  right: 0;\\n}\\n.reactEasyCrop_Cover_Horizontal {\\n  width: 100%;\\n  height: auto;\\n}\\n.reactEasyCrop_Cover_Vertical {\\n  width: auto;\\n  height: 100%;\\n}\\n\\n.reactEasyCrop_CropArea {\\n  position: absolute;\\n  left: 50%;\\n  top: 50%;\\n  transform: translate(-50%, -50%);\\n  border: 1px solid rgba(255, 255, 255, 0.5);\\n  box-sizing: border-box;\\n  box-shadow: 0 0 0 9999em;\\n  color: rgba(0, 0, 0, 0.5);\\n  overflow: hidden;\\n}\\n\\n.reactEasyCrop_CropAreaRound {\\n  border-radius: 50%;\\n}\\n\\n.reactEasyCrop_CropAreaGrid::before {\\n  content: ' ';\\n  box-sizing: border-box;\\n  position: absolute;\\n  border: 1px solid rgba(255, 255, 255, 0.5);\\n  top: 0;\\n  bottom: 0;\\n  left: 33.33%;\\n  right: 33.33%;\\n  border-top: 0;\\n  border-bottom: 0;\\n}\\n\\n.reactEasyCrop_CropAreaGrid::after {\\n  content: ' ';\\n  box-sizing: border-box;\\n  position: absolute;\\n  border: 1px solid rgba(255, 255, 255, 0.5);\\n  top: 33.33%;\\n  bottom: 33.33%;\\n  left: 0;\\n  right: 0;\\n  border-left: 0;\\n  border-right: 0;\\n}\\n\";\n\nvar MIN_ZOOM = 1;\nvar MAX_ZOOM = 3;\nvar Cropper = /** @class */function (_super) {\n  __extends(Cropper, _super);\n  function Cropper() {\n    var _this = _super !== null && _super.apply(this, arguments) || this;\n    _this.imageRef = React.createRef();\n    _this.videoRef = React.createRef();\n    _this.containerPosition = {\n      x: 0,\n      y: 0\n    };\n    _this.containerRef = null;\n    _this.styleRef = null;\n    _this.containerRect = null;\n    _this.mediaSize = {\n      width: 0,\n      height: 0,\n      naturalWidth: 0,\n      naturalHeight: 0\n    };\n    _this.dragStartPosition = {\n      x: 0,\n      y: 0\n    };\n    _this.dragStartCrop = {\n      x: 0,\n      y: 0\n    };\n    _this.gestureZoomStart = 0;\n    _this.gestureRotationStart = 0;\n    _this.isTouching = false;\n    _this.lastPinchDistance = 0;\n    _this.lastPinchRotation = 0;\n    _this.rafDragTimeout = null;\n    _this.rafPinchTimeout = null;\n    _this.wheelTimer = null;\n    _this.currentDoc = typeof document !== 'undefined' ? document : null;\n    _this.currentWindow = typeof window !== 'undefined' ? window : null;\n    _this.resizeObserver = null;\n    _this.state = {\n      cropSize: null,\n      hasWheelJustStarted: false\n    };\n    _this.initResizeObserver = function () {\n      if (typeof window.ResizeObserver === 'undefined' || !_this.containerRef) {\n        return;\n      }\n      var isFirstResize = true;\n      _this.resizeObserver = new window.ResizeObserver(function (entries) {\n        if (isFirstResize) {\n          isFirstResize = false; // observe() is called on mount, we don't want to trigger a recompute on mount\n          return;\n        }\n        _this.computeSizes();\n      });\n      _this.resizeObserver.observe(_this.containerRef);\n    };\n    // this is to prevent Safari on iOS >= 10 to zoom the page\n    _this.preventZoomSafari = function (e) {\n      return e.preventDefault();\n    };\n    _this.cleanEvents = function () {\n      if (!_this.currentDoc) return;\n      _this.currentDoc.removeEventListener('mousemove', _this.onMouseMove);\n      _this.currentDoc.removeEventListener('mouseup', _this.onDragStopped);\n      _this.currentDoc.removeEventListener('touchmove', _this.onTouchMove);\n      _this.currentDoc.removeEventListener('touchend', _this.onDragStopped);\n      _this.currentDoc.removeEventListener('gesturemove', _this.onGestureMove);\n      _this.currentDoc.removeEventListener('gestureend', _this.onGestureEnd);\n      _this.currentDoc.removeEventListener('scroll', _this.onScroll);\n    };\n    _this.clearScrollEvent = function () {\n      if (_this.containerRef) _this.containerRef.removeEventListener('wheel', _this.onWheel);\n      if (_this.wheelTimer) {\n        clearTimeout(_this.wheelTimer);\n      }\n    };\n    _this.onMediaLoad = function () {\n      var cropSize = _this.computeSizes();\n      if (cropSize) {\n        _this.emitCropData();\n        _this.setInitialCrop(cropSize);\n      }\n      if (_this.props.onMediaLoaded) {\n        _this.props.onMediaLoaded(_this.mediaSize);\n      }\n    };\n    _this.setInitialCrop = function (cropSize) {\n      if (_this.props.initialCroppedAreaPercentages) {\n        var _a = getInitialCropFromCroppedAreaPercentages(_this.props.initialCroppedAreaPercentages, _this.mediaSize, _this.props.rotation, cropSize, _this.props.minZoom, _this.props.maxZoom),\n          crop = _a.crop,\n          zoom = _a.zoom;\n        _this.props.onCropChange(crop);\n        _this.props.onZoomChange && _this.props.onZoomChange(zoom);\n      } else if (_this.props.initialCroppedAreaPixels) {\n        var _b = getInitialCropFromCroppedAreaPixels(_this.props.initialCroppedAreaPixels, _this.mediaSize, _this.props.rotation, cropSize, _this.props.minZoom, _this.props.maxZoom),\n          crop = _b.crop,\n          zoom = _b.zoom;\n        _this.props.onCropChange(crop);\n        _this.props.onZoomChange && _this.props.onZoomChange(zoom);\n      }\n    };\n    _this.computeSizes = function () {\n      var _a, _b, _c, _d, _e, _f;\n      var mediaRef = _this.imageRef.current || _this.videoRef.current;\n      if (mediaRef && _this.containerRef) {\n        _this.containerRect = _this.containerRef.getBoundingClientRect();\n        _this.saveContainerPosition();\n        var containerAspect = _this.containerRect.width / _this.containerRect.height;\n        var naturalWidth = ((_a = _this.imageRef.current) === null || _a === void 0 ? void 0 : _a.naturalWidth) || ((_b = _this.videoRef.current) === null || _b === void 0 ? void 0 : _b.videoWidth) || 0;\n        var naturalHeight = ((_c = _this.imageRef.current) === null || _c === void 0 ? void 0 : _c.naturalHeight) || ((_d = _this.videoRef.current) === null || _d === void 0 ? void 0 : _d.videoHeight) || 0;\n        var isMediaScaledDown = mediaRef.offsetWidth < naturalWidth || mediaRef.offsetHeight < naturalHeight;\n        var mediaAspect = naturalWidth / naturalHeight;\n        // We do not rely on the offsetWidth/offsetHeight if the media is scaled down\n        // as the values they report are rounded. That will result in precision losses\n        // when calculating zoom. We use the fact that the media is positionned relative\n        // to the container. That allows us to use the container's dimensions\n        // and natural aspect ratio of the media to calculate accurate media size.\n        // However, for this to work, the container should not be rotated\n        var renderedMediaSize = void 0;\n        if (isMediaScaledDown) {\n          var objectFit = _this.getObjectFit();\n          switch (objectFit) {\n            default:\n            case 'contain':\n              renderedMediaSize = containerAspect > mediaAspect ? {\n                width: _this.containerRect.height * mediaAspect,\n                height: _this.containerRect.height\n              } : {\n                width: _this.containerRect.width,\n                height: _this.containerRect.width / mediaAspect\n              };\n              break;\n            case 'horizontal-cover':\n              renderedMediaSize = {\n                width: _this.containerRect.width,\n                height: _this.containerRect.width / mediaAspect\n              };\n              break;\n            case 'vertical-cover':\n              renderedMediaSize = {\n                width: _this.containerRect.height * mediaAspect,\n                height: _this.containerRect.height\n              };\n              break;\n          }\n        } else {\n          renderedMediaSize = {\n            width: mediaRef.offsetWidth,\n            height: mediaRef.offsetHeight\n          };\n        }\n        _this.mediaSize = __assign(__assign({}, renderedMediaSize), {\n          naturalWidth: naturalWidth,\n          naturalHeight: naturalHeight\n        });\n        // set media size in the parent\n        if (_this.props.setMediaSize) {\n          _this.props.setMediaSize(_this.mediaSize);\n        }\n        var cropSize = _this.props.cropSize ? _this.props.cropSize : getCropSize(_this.mediaSize.width, _this.mediaSize.height, _this.containerRect.width, _this.containerRect.height, _this.props.aspect, _this.props.rotation);\n        if (((_e = _this.state.cropSize) === null || _e === void 0 ? void 0 : _e.height) !== cropSize.height || ((_f = _this.state.cropSize) === null || _f === void 0 ? void 0 : _f.width) !== cropSize.width) {\n          _this.props.onCropSizeChange && _this.props.onCropSizeChange(cropSize);\n        }\n        _this.setState({\n          cropSize: cropSize\n        }, _this.recomputeCropPosition);\n        // pass crop size to parent\n        if (_this.props.setCropSize) {\n          _this.props.setCropSize(cropSize);\n        }\n        return cropSize;\n      }\n    };\n    _this.saveContainerPosition = function () {\n      if (_this.containerRef) {\n        var bounds = _this.containerRef.getBoundingClientRect();\n        _this.containerPosition = {\n          x: bounds.left,\n          y: bounds.top\n        };\n      }\n    };\n    _this.onMouseDown = function (e) {\n      if (!_this.currentDoc) return;\n      e.preventDefault();\n      _this.currentDoc.addEventListener('mousemove', _this.onMouseMove);\n      _this.currentDoc.addEventListener('mouseup', _this.onDragStopped);\n      _this.saveContainerPosition();\n      _this.onDragStart(Cropper.getMousePoint(e));\n    };\n    _this.onMouseMove = function (e) {\n      return _this.onDrag(Cropper.getMousePoint(e));\n    };\n    _this.onScroll = function (e) {\n      if (!_this.currentDoc) return;\n      e.preventDefault();\n      _this.saveContainerPosition();\n    };\n    _this.onTouchStart = function (e) {\n      if (!_this.currentDoc) return;\n      _this.isTouching = true;\n      if (_this.props.onTouchRequest && !_this.props.onTouchRequest(e)) {\n        return;\n      }\n      _this.currentDoc.addEventListener('touchmove', _this.onTouchMove, {\n        passive: false\n      }); // iOS 11 now defaults to passive: true\n      _this.currentDoc.addEventListener('touchend', _this.onDragStopped);\n      _this.saveContainerPosition();\n      if (e.touches.length === 2) {\n        _this.onPinchStart(e);\n      } else if (e.touches.length === 1) {\n        _this.onDragStart(Cropper.getTouchPoint(e.touches[0]));\n      }\n    };\n    _this.onTouchMove = function (e) {\n      // Prevent whole page from scrolling on iOS.\n      e.preventDefault();\n      if (e.touches.length === 2) {\n        _this.onPinchMove(e);\n      } else if (e.touches.length === 1) {\n        _this.onDrag(Cropper.getTouchPoint(e.touches[0]));\n      }\n    };\n    _this.onGestureStart = function (e) {\n      if (!_this.currentDoc) return;\n      e.preventDefault();\n      _this.currentDoc.addEventListener('gesturechange', _this.onGestureMove);\n      _this.currentDoc.addEventListener('gestureend', _this.onGestureEnd);\n      _this.gestureZoomStart = _this.props.zoom;\n      _this.gestureRotationStart = _this.props.rotation;\n    };\n    _this.onGestureMove = function (e) {\n      e.preventDefault();\n      if (_this.isTouching) {\n        // this is to avoid conflict between gesture and touch events\n        return;\n      }\n      var point = Cropper.getMousePoint(e);\n      var newZoom = _this.gestureZoomStart - 1 + e.scale;\n      _this.setNewZoom(newZoom, point, {\n        shouldUpdatePosition: true\n      });\n      if (_this.props.onRotationChange) {\n        var newRotation = _this.gestureRotationStart + e.rotation;\n        _this.props.onRotationChange(newRotation);\n      }\n    };\n    _this.onGestureEnd = function (e) {\n      _this.cleanEvents();\n    };\n    _this.onDragStart = function (_a) {\n      var _b, _c;\n      var x = _a.x,\n        y = _a.y;\n      _this.dragStartPosition = {\n        x: x,\n        y: y\n      };\n      _this.dragStartCrop = __assign({}, _this.props.crop);\n      (_c = (_b = _this.props).onInteractionStart) === null || _c === void 0 ? void 0 : _c.call(_b);\n    };\n    _this.onDrag = function (_a) {\n      var x = _a.x,\n        y = _a.y;\n      if (!_this.currentWindow) return;\n      if (_this.rafDragTimeout) _this.currentWindow.cancelAnimationFrame(_this.rafDragTimeout);\n      _this.rafDragTimeout = _this.currentWindow.requestAnimationFrame(function () {\n        if (!_this.state.cropSize) return;\n        if (x === undefined || y === undefined) return;\n        var offsetX = x - _this.dragStartPosition.x;\n        var offsetY = y - _this.dragStartPosition.y;\n        var requestedPosition = {\n          x: _this.dragStartCrop.x + offsetX,\n          y: _this.dragStartCrop.y + offsetY\n        };\n        var newPosition = _this.props.restrictPosition ? restrictPosition(requestedPosition, _this.mediaSize, _this.state.cropSize, _this.props.zoom, _this.props.rotation) : requestedPosition;\n        _this.props.onCropChange(newPosition);\n      });\n    };\n    _this.onDragStopped = function () {\n      var _a, _b;\n      _this.isTouching = false;\n      _this.cleanEvents();\n      _this.emitCropData();\n      (_b = (_a = _this.props).onInteractionEnd) === null || _b === void 0 ? void 0 : _b.call(_a);\n    };\n    _this.onWheel = function (e) {\n      if (!_this.currentWindow) return;\n      if (_this.props.onWheelRequest && !_this.props.onWheelRequest(e)) {\n        return;\n      }\n      e.preventDefault();\n      var point = Cropper.getMousePoint(e);\n      var pixelY = normalizeWheel(e).pixelY;\n      var newZoom = _this.props.zoom - pixelY * _this.props.zoomSpeed / 200;\n      _this.setNewZoom(newZoom, point, {\n        shouldUpdatePosition: true\n      });\n      if (!_this.state.hasWheelJustStarted) {\n        _this.setState({\n          hasWheelJustStarted: true\n        }, function () {\n          var _a, _b;\n          return (_b = (_a = _this.props).onInteractionStart) === null || _b === void 0 ? void 0 : _b.call(_a);\n        });\n      }\n      if (_this.wheelTimer) {\n        clearTimeout(_this.wheelTimer);\n      }\n      _this.wheelTimer = _this.currentWindow.setTimeout(function () {\n        return _this.setState({\n          hasWheelJustStarted: false\n        }, function () {\n          var _a, _b;\n          return (_b = (_a = _this.props).onInteractionEnd) === null || _b === void 0 ? void 0 : _b.call(_a);\n        });\n      }, 250);\n    };\n    _this.getPointOnContainer = function (_a, containerTopLeft) {\n      var x = _a.x,\n        y = _a.y;\n      if (!_this.containerRect) {\n        throw new Error('The Cropper is not mounted');\n      }\n      return {\n        x: _this.containerRect.width / 2 - (x - containerTopLeft.x),\n        y: _this.containerRect.height / 2 - (y - containerTopLeft.y)\n      };\n    };\n    _this.getPointOnMedia = function (_a) {\n      var x = _a.x,\n        y = _a.y;\n      var _b = _this.props,\n        crop = _b.crop,\n        zoom = _b.zoom;\n      return {\n        x: (x + crop.x) / zoom,\n        y: (y + crop.y) / zoom\n      };\n    };\n    _this.setNewZoom = function (zoom, point, _a) {\n      var _b = _a === void 0 ? {} : _a,\n        _c = _b.shouldUpdatePosition,\n        shouldUpdatePosition = _c === void 0 ? true : _c;\n      if (!_this.state.cropSize || !_this.props.onZoomChange) return;\n      var newZoom = clamp(zoom, _this.props.minZoom, _this.props.maxZoom);\n      if (shouldUpdatePosition) {\n        var zoomPoint = _this.getPointOnContainer(point, _this.containerPosition);\n        var zoomTarget = _this.getPointOnMedia(zoomPoint);\n        var requestedPosition = {\n          x: zoomTarget.x * newZoom - zoomPoint.x,\n          y: zoomTarget.y * newZoom - zoomPoint.y\n        };\n        var newPosition = _this.props.restrictPosition ? restrictPosition(requestedPosition, _this.mediaSize, _this.state.cropSize, newZoom, _this.props.rotation) : requestedPosition;\n        _this.props.onCropChange(newPosition);\n      }\n      _this.props.onZoomChange(newZoom);\n    };\n    _this.getCropData = function () {\n      if (!_this.state.cropSize) {\n        return null;\n      }\n      // this is to ensure the crop is correctly restricted after a zoom back (https://github.com/ValentinH/react-easy-crop/issues/6)\n      var restrictedPosition = _this.props.restrictPosition ? restrictPosition(_this.props.crop, _this.mediaSize, _this.state.cropSize, _this.props.zoom, _this.props.rotation) : _this.props.crop;\n      return computeCroppedArea(restrictedPosition, _this.mediaSize, _this.state.cropSize, _this.getAspect(), _this.props.zoom, _this.props.rotation, _this.props.restrictPosition);\n    };\n    _this.emitCropData = function () {\n      var cropData = _this.getCropData();\n      if (!cropData) return;\n      var croppedAreaPercentages = cropData.croppedAreaPercentages,\n        croppedAreaPixels = cropData.croppedAreaPixels;\n      if (_this.props.onCropComplete) {\n        _this.props.onCropComplete(croppedAreaPercentages, croppedAreaPixels);\n      }\n      if (_this.props.onCropAreaChange) {\n        _this.props.onCropAreaChange(croppedAreaPercentages, croppedAreaPixels);\n      }\n    };\n    _this.emitCropAreaChange = function () {\n      var cropData = _this.getCropData();\n      if (!cropData) return;\n      var croppedAreaPercentages = cropData.croppedAreaPercentages,\n        croppedAreaPixels = cropData.croppedAreaPixels;\n      if (_this.props.onCropAreaChange) {\n        _this.props.onCropAreaChange(croppedAreaPercentages, croppedAreaPixels);\n      }\n    };\n    _this.recomputeCropPosition = function () {\n      if (!_this.state.cropSize) return;\n      var newPosition = _this.props.restrictPosition ? restrictPosition(_this.props.crop, _this.mediaSize, _this.state.cropSize, _this.props.zoom, _this.props.rotation) : _this.props.crop;\n      _this.props.onCropChange(newPosition);\n      _this.emitCropData();\n    };\n    return _this;\n  }\n  Cropper.prototype.componentDidMount = function () {\n    if (!this.currentDoc || !this.currentWindow) return;\n    if (this.containerRef) {\n      if (this.containerRef.ownerDocument) {\n        this.currentDoc = this.containerRef.ownerDocument;\n      }\n      if (this.currentDoc.defaultView) {\n        this.currentWindow = this.currentDoc.defaultView;\n      }\n      this.initResizeObserver();\n      // only add window resize listener if ResizeObserver is not supported. Otherwise, it would be redundant\n      if (typeof window.ResizeObserver === 'undefined') {\n        this.currentWindow.addEventListener('resize', this.computeSizes);\n      }\n      this.props.zoomWithScroll && this.containerRef.addEventListener('wheel', this.onWheel, {\n        passive: false\n      });\n      this.containerRef.addEventListener('gesturestart', this.onGestureStart);\n    }\n    this.currentDoc.addEventListener('scroll', this.onScroll);\n    if (!this.props.disableAutomaticStylesInjection) {\n      this.styleRef = this.currentDoc.createElement('style');\n      this.styleRef.setAttribute('type', 'text/css');\n      if (this.props.nonce) {\n        this.styleRef.setAttribute('nonce', this.props.nonce);\n      }\n      this.styleRef.innerHTML = css_248z;\n      this.currentDoc.head.appendChild(this.styleRef);\n    }\n    // when rendered via SSR, the image can already be loaded and its onLoad callback will never be called\n    if (this.imageRef.current && this.imageRef.current.complete) {\n      this.onMediaLoad();\n    }\n    // set image and video refs in the parent if the callbacks exist\n    if (this.props.setImageRef) {\n      this.props.setImageRef(this.imageRef);\n    }\n    if (this.props.setVideoRef) {\n      this.props.setVideoRef(this.videoRef);\n    }\n  };\n  Cropper.prototype.componentWillUnmount = function () {\n    var _a, _b;\n    if (!this.currentDoc || !this.currentWindow) return;\n    if (typeof window.ResizeObserver === 'undefined') {\n      this.currentWindow.removeEventListener('resize', this.computeSizes);\n    }\n    (_a = this.resizeObserver) === null || _a === void 0 ? void 0 : _a.disconnect();\n    if (this.containerRef) {\n      this.containerRef.removeEventListener('gesturestart', this.preventZoomSafari);\n    }\n    if (this.styleRef) {\n      (_b = this.styleRef.parentNode) === null || _b === void 0 ? void 0 : _b.removeChild(this.styleRef);\n    }\n    this.cleanEvents();\n    this.props.zoomWithScroll && this.clearScrollEvent();\n  };\n  Cropper.prototype.componentDidUpdate = function (prevProps) {\n    var _a, _b, _c, _d, _e, _f, _g, _h, _j;\n    if (prevProps.rotation !== this.props.rotation) {\n      this.computeSizes();\n      this.recomputeCropPosition();\n    } else if (prevProps.aspect !== this.props.aspect) {\n      this.computeSizes();\n    } else if (prevProps.objectFit !== this.props.objectFit) {\n      this.computeSizes();\n    } else if (prevProps.zoom !== this.props.zoom) {\n      this.recomputeCropPosition();\n    } else if (((_a = prevProps.cropSize) === null || _a === void 0 ? void 0 : _a.height) !== ((_b = this.props.cropSize) === null || _b === void 0 ? void 0 : _b.height) || ((_c = prevProps.cropSize) === null || _c === void 0 ? void 0 : _c.width) !== ((_d = this.props.cropSize) === null || _d === void 0 ? void 0 : _d.width)) {\n      this.computeSizes();\n    } else if (((_e = prevProps.crop) === null || _e === void 0 ? void 0 : _e.x) !== ((_f = this.props.crop) === null || _f === void 0 ? void 0 : _f.x) || ((_g = prevProps.crop) === null || _g === void 0 ? void 0 : _g.y) !== ((_h = this.props.crop) === null || _h === void 0 ? void 0 : _h.y)) {\n      this.emitCropAreaChange();\n    }\n    if (prevProps.zoomWithScroll !== this.props.zoomWithScroll && this.containerRef) {\n      this.props.zoomWithScroll ? this.containerRef.addEventListener('wheel', this.onWheel, {\n        passive: false\n      }) : this.clearScrollEvent();\n    }\n    if (prevProps.video !== this.props.video) {\n      (_j = this.videoRef.current) === null || _j === void 0 ? void 0 : _j.load();\n    }\n  };\n  Cropper.prototype.getAspect = function () {\n    var _a = this.props,\n      cropSize = _a.cropSize,\n      aspect = _a.aspect;\n    if (cropSize) {\n      return cropSize.width / cropSize.height;\n    }\n    return aspect;\n  };\n  Cropper.prototype.getObjectFit = function () {\n    var _a, _b, _c, _d;\n    if (this.props.objectFit === 'cover') {\n      var mediaRef = this.imageRef.current || this.videoRef.current;\n      if (mediaRef && this.containerRef) {\n        this.containerRect = this.containerRef.getBoundingClientRect();\n        var containerAspect = this.containerRect.width / this.containerRect.height;\n        var naturalWidth = ((_a = this.imageRef.current) === null || _a === void 0 ? void 0 : _a.naturalWidth) || ((_b = this.videoRef.current) === null || _b === void 0 ? void 0 : _b.videoWidth) || 0;\n        var naturalHeight = ((_c = this.imageRef.current) === null || _c === void 0 ? void 0 : _c.naturalHeight) || ((_d = this.videoRef.current) === null || _d === void 0 ? void 0 : _d.videoHeight) || 0;\n        var mediaAspect = naturalWidth / naturalHeight;\n        return mediaAspect < containerAspect ? 'horizontal-cover' : 'vertical-cover';\n      }\n      return 'horizontal-cover';\n    }\n    return this.props.objectFit;\n  };\n  Cropper.prototype.onPinchStart = function (e) {\n    var pointA = Cropper.getTouchPoint(e.touches[0]);\n    var pointB = Cropper.getTouchPoint(e.touches[1]);\n    this.lastPinchDistance = getDistanceBetweenPoints(pointA, pointB);\n    this.lastPinchRotation = getRotationBetweenPoints(pointA, pointB);\n    this.onDragStart(getCenter(pointA, pointB));\n  };\n  Cropper.prototype.onPinchMove = function (e) {\n    var _this = this;\n    if (!this.currentDoc || !this.currentWindow) return;\n    var pointA = Cropper.getTouchPoint(e.touches[0]);\n    var pointB = Cropper.getTouchPoint(e.touches[1]);\n    var center = getCenter(pointA, pointB);\n    this.onDrag(center);\n    if (this.rafPinchTimeout) this.currentWindow.cancelAnimationFrame(this.rafPinchTimeout);\n    this.rafPinchTimeout = this.currentWindow.requestAnimationFrame(function () {\n      var distance = getDistanceBetweenPoints(pointA, pointB);\n      var newZoom = _this.props.zoom * (distance / _this.lastPinchDistance);\n      _this.setNewZoom(newZoom, center, {\n        shouldUpdatePosition: false\n      });\n      _this.lastPinchDistance = distance;\n      var rotation = getRotationBetweenPoints(pointA, pointB);\n      var newRotation = _this.props.rotation + (rotation - _this.lastPinchRotation);\n      _this.props.onRotationChange && _this.props.onRotationChange(newRotation);\n      _this.lastPinchRotation = rotation;\n    });\n  };\n  Cropper.prototype.render = function () {\n    var _this = this;\n    var _a = this.props,\n      image = _a.image,\n      video = _a.video,\n      mediaProps = _a.mediaProps,\n      transform = _a.transform,\n      _b = _a.crop,\n      x = _b.x,\n      y = _b.y,\n      rotation = _a.rotation,\n      zoom = _a.zoom,\n      cropShape = _a.cropShape,\n      showGrid = _a.showGrid,\n      _c = _a.style,\n      containerStyle = _c.containerStyle,\n      cropAreaStyle = _c.cropAreaStyle,\n      mediaStyle = _c.mediaStyle,\n      _d = _a.classes,\n      containerClassName = _d.containerClassName,\n      cropAreaClassName = _d.cropAreaClassName,\n      mediaClassName = _d.mediaClassName;\n    var objectFit = this.getObjectFit();\n    return React.createElement(\"div\", {\n      onMouseDown: this.onMouseDown,\n      onTouchStart: this.onTouchStart,\n      ref: function ref(el) {\n        return _this.containerRef = el;\n      },\n      \"data-testid\": \"container\",\n      style: containerStyle,\n      className: classNames('reactEasyCrop_Container', containerClassName)\n    }, image ? React.createElement(\"img\", __assign({\n      alt: \"\",\n      className: classNames('reactEasyCrop_Image', objectFit === 'contain' && 'reactEasyCrop_Contain', objectFit === 'horizontal-cover' && 'reactEasyCrop_Cover_Horizontal', objectFit === 'vertical-cover' && 'reactEasyCrop_Cover_Vertical', mediaClassName)\n    }, mediaProps, {\n      src: image,\n      ref: this.imageRef,\n      style: __assign(__assign({}, mediaStyle), {\n        transform: transform || \"translate(\".concat(x, \"px, \").concat(y, \"px) rotate(\").concat(rotation, \"deg) scale(\").concat(zoom, \")\")\n      }),\n      onLoad: this.onMediaLoad\n    })) : video && React.createElement(\"video\", __assign({\n      autoPlay: true,\n      loop: true,\n      muted: true,\n      className: classNames('reactEasyCrop_Video', objectFit === 'contain' && 'reactEasyCrop_Contain', objectFit === 'horizontal-cover' && 'reactEasyCrop_Cover_Horizontal', objectFit === 'vertical-cover' && 'reactEasyCrop_Cover_Vertical', mediaClassName)\n    }, mediaProps, {\n      ref: this.videoRef,\n      onLoadedMetadata: this.onMediaLoad,\n      style: __assign(__assign({}, mediaStyle), {\n        transform: transform || \"translate(\".concat(x, \"px, \").concat(y, \"px) rotate(\").concat(rotation, \"deg) scale(\").concat(zoom, \")\")\n      }),\n      controls: false\n    }), (Array.isArray(video) ? video : [{\n      src: video\n    }]).map(function (item) {\n      return React.createElement(\"source\", __assign({\n        key: item.src\n      }, item));\n    })), this.state.cropSize && React.createElement(\"div\", {\n      style: __assign(__assign({}, cropAreaStyle), {\n        width: this.state.cropSize.width,\n        height: this.state.cropSize.height\n      }),\n      \"data-testid\": \"cropper\",\n      className: classNames('reactEasyCrop_CropArea', cropShape === 'round' && 'reactEasyCrop_CropAreaRound', showGrid && 'reactEasyCrop_CropAreaGrid', cropAreaClassName)\n    }));\n  };\n  Cropper.defaultProps = {\n    zoom: 1,\n    rotation: 0,\n    aspect: 4 / 3,\n    maxZoom: MAX_ZOOM,\n    minZoom: MIN_ZOOM,\n    cropShape: 'rect',\n    objectFit: 'contain',\n    showGrid: true,\n    style: {},\n    classes: {},\n    mediaProps: {},\n    zoomSpeed: 1,\n    restrictPosition: true,\n    zoomWithScroll: true\n  };\n  Cropper.getMousePoint = function (e) {\n    return {\n      x: Number(e.clientX),\n      y: Number(e.clientY)\n    };\n  };\n  Cropper.getTouchPoint = function (touch) {\n    return {\n      x: Number(touch.clientX),\n      y: Number(touch.clientY)\n    };\n  };\n  return Cropper;\n}(React.Component);\n\nexport { Cropper as default, getInitialCropFromCroppedAreaPercentages, getInitialCropFromCroppedAreaPixels };\n//# sourceMappingURL=index.module.js.map\n","(function (global, factory) {\n  if (typeof define === \"function\" && define.amd) {\n    define(['exports', './react-swipe'], factory);\n  } else if (typeof exports !== \"undefined\") {\n    factory(exports, require('./react-swipe'));\n  } else {\n    var mod = {\n      exports: {}\n    };\n    factory(mod.exports, global.reactSwipe);\n    global.index = mod.exports;\n  }\n})(this, function (exports, _reactSwipe) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n\n  var _reactSwipe2 = _interopRequireDefault(_reactSwipe);\n\n  function _interopRequireDefault(obj) {\n    return obj && obj.__esModule ? obj : {\n      default: obj\n    };\n  }\n\n  exports.default = _reactSwipe2.default;\n});","(function (global, factory) {\n  if (typeof define === \"function\" && define.amd) {\n    define(['exports', 'react', 'prop-types'], factory);\n  } else if (typeof exports !== \"undefined\") {\n    factory(exports, require('react'), require('prop-types'));\n  } else {\n    var mod = {\n      exports: {}\n    };\n    factory(mod.exports, global.react, global.propTypes);\n    global.reactSwipe = mod.exports;\n  }\n})(this, function (exports, _react, _propTypes) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.setHasSupportToCaptureOption = setHasSupportToCaptureOption;\n\n  var _react2 = _interopRequireDefault(_react);\n\n  var _propTypes2 = _interopRequireDefault(_propTypes);\n\n  function _interopRequireDefault(obj) {\n    return obj && obj.__esModule ? obj : {\n      default: obj\n    };\n  }\n\n  var _extends = Object.assign || function (target) {\n    for (var i = 1; i < arguments.length; i++) {\n      var source = arguments[i];\n\n      for (var key in source) {\n        if (Object.prototype.hasOwnProperty.call(source, key)) {\n          target[key] = source[key];\n        }\n      }\n    }\n\n    return target;\n  };\n\n  function _objectWithoutProperties(obj, keys) {\n    var target = {};\n\n    for (var i in obj) {\n      if (keys.indexOf(i) >= 0) continue;\n      if (!Object.prototype.hasOwnProperty.call(obj, i)) continue;\n      target[i] = obj[i];\n    }\n\n    return target;\n  }\n\n  function _classCallCheck(instance, Constructor) {\n    if (!(instance instanceof Constructor)) {\n      throw new TypeError(\"Cannot call a class as a function\");\n    }\n  }\n\n  var _createClass = function () {\n    function defineProperties(target, props) {\n      for (var i = 0; i < props.length; i++) {\n        var descriptor = props[i];\n        descriptor.enumerable = descriptor.enumerable || false;\n        descriptor.configurable = true;\n        if (\"value\" in descriptor) descriptor.writable = true;\n        Object.defineProperty(target, descriptor.key, descriptor);\n      }\n    }\n\n    return function (Constructor, protoProps, staticProps) {\n      if (protoProps) defineProperties(Constructor.prototype, protoProps);\n      if (staticProps) defineProperties(Constructor, staticProps);\n      return Constructor;\n    };\n  }();\n\n  function _possibleConstructorReturn(self, call) {\n    if (!self) {\n      throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n    }\n\n    return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self;\n  }\n\n  function _inherits(subClass, superClass) {\n    if (typeof superClass !== \"function\" && superClass !== null) {\n      throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass);\n    }\n\n    subClass.prototype = Object.create(superClass && superClass.prototype, {\n      constructor: {\n        value: subClass,\n        enumerable: false,\n        writable: true,\n        configurable: true\n      }\n    });\n    if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n  }\n\n  var supportsCaptureOption = false;\n  function setHasSupportToCaptureOption(hasSupport) {\n    supportsCaptureOption = hasSupport;\n  }\n\n  try {\n    addEventListener('test', null, Object.defineProperty({}, 'capture', { get: function get() {\n        setHasSupportToCaptureOption(true);\n      } }));\n  } catch (e) {} // eslint-disable-line no-empty\n\n  function getSafeEventHandlerOpts() {\n    var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : { capture: true };\n\n    return supportsCaptureOption ? options : options.capture;\n  }\n\n  /**\n   * [getPosition returns a position element that works for mouse or touch events]\n   * @param  {[Event]} event [the received event]\n   * @return {[Object]}      [x and y coords]\n   */\n  function getPosition(event) {\n    if ('touches' in event) {\n      var _event$touches$ = event.touches[0],\n          pageX = _event$touches$.pageX,\n          pageY = _event$touches$.pageY;\n\n      return { x: pageX, y: pageY };\n    }\n\n    var screenX = event.screenX,\n        screenY = event.screenY;\n\n    return { x: screenX, y: screenY };\n  }\n\n  var ReactSwipe = function (_Component) {\n    _inherits(ReactSwipe, _Component);\n\n    function ReactSwipe() {\n      var _ref;\n\n      _classCallCheck(this, ReactSwipe);\n\n      for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n        args[_key] = arguments[_key];\n      }\n\n      var _this = _possibleConstructorReturn(this, (_ref = ReactSwipe.__proto__ || Object.getPrototypeOf(ReactSwipe)).call.apply(_ref, [this].concat(args)));\n\n      _this._handleSwipeStart = _this._handleSwipeStart.bind(_this);\n      _this._handleSwipeMove = _this._handleSwipeMove.bind(_this);\n      _this._handleSwipeEnd = _this._handleSwipeEnd.bind(_this);\n\n      _this._onMouseDown = _this._onMouseDown.bind(_this);\n      _this._onMouseMove = _this._onMouseMove.bind(_this);\n      _this._onMouseUp = _this._onMouseUp.bind(_this);\n\n      _this._setSwiperRef = _this._setSwiperRef.bind(_this);\n      return _this;\n    }\n\n    _createClass(ReactSwipe, [{\n      key: 'componentDidMount',\n      value: function componentDidMount() {\n        if (this.swiper) {\n          this.swiper.addEventListener('touchmove', this._handleSwipeMove, getSafeEventHandlerOpts({\n            capture: true,\n            passive: false\n          }));\n        }\n      }\n    }, {\n      key: 'componentWillUnmount',\n      value: function componentWillUnmount() {\n        if (this.swiper) {\n          this.swiper.removeEventListener('touchmove', this._handleSwipeMove, getSafeEventHandlerOpts({\n            capture: true,\n            passive: false\n          }));\n        }\n      }\n    }, {\n      key: '_onMouseDown',\n      value: function _onMouseDown(event) {\n        if (!this.props.allowMouseEvents) {\n          return;\n        }\n\n        this.mouseDown = true;\n\n        document.addEventListener('mouseup', this._onMouseUp);\n        document.addEventListener('mousemove', this._onMouseMove);\n\n        this._handleSwipeStart(event);\n      }\n    }, {\n      key: '_onMouseMove',\n      value: function _onMouseMove(event) {\n        if (!this.mouseDown) {\n          return;\n        }\n\n        this._handleSwipeMove(event);\n      }\n    }, {\n      key: '_onMouseUp',\n      value: function _onMouseUp(event) {\n        this.mouseDown = false;\n\n        document.removeEventListener('mouseup', this._onMouseUp);\n        document.removeEventListener('mousemove', this._onMouseMove);\n\n        this._handleSwipeEnd(event);\n      }\n    }, {\n      key: '_handleSwipeStart',\n      value: function _handleSwipeStart(event) {\n        var _getPosition = getPosition(event),\n            x = _getPosition.x,\n            y = _getPosition.y;\n\n        this.moveStart = { x: x, y: y };\n        this.props.onSwipeStart(event);\n      }\n    }, {\n      key: '_handleSwipeMove',\n      value: function _handleSwipeMove(event) {\n        if (!this.moveStart) {\n          return;\n        }\n\n        var _getPosition2 = getPosition(event),\n            x = _getPosition2.x,\n            y = _getPosition2.y;\n\n        var deltaX = x - this.moveStart.x;\n        var deltaY = y - this.moveStart.y;\n        this.moving = true;\n\n        // handling the responsability of cancelling the scroll to\n        // the component handling the event\n        var shouldPreventDefault = this.props.onSwipeMove({\n          x: deltaX,\n          y: deltaY\n        }, event);\n\n        if (shouldPreventDefault && event.cancelable) {\n          event.preventDefault();\n        }\n\n        this.movePosition = { deltaX: deltaX, deltaY: deltaY };\n      }\n    }, {\n      key: '_handleSwipeEnd',\n      value: function _handleSwipeEnd(event) {\n        this.props.onSwipeEnd(event);\n\n        var tolerance = this.props.tolerance;\n\n\n        if (this.moving && this.movePosition) {\n          if (this.movePosition.deltaX < -tolerance) {\n            this.props.onSwipeLeft(1, event);\n          } else if (this.movePosition.deltaX > tolerance) {\n            this.props.onSwipeRight(1, event);\n          }\n          if (this.movePosition.deltaY < -tolerance) {\n            this.props.onSwipeUp(1, event);\n          } else if (this.movePosition.deltaY > tolerance) {\n            this.props.onSwipeDown(1, event);\n          }\n        }\n\n        this.moveStart = null;\n        this.moving = false;\n        this.movePosition = null;\n      }\n    }, {\n      key: '_setSwiperRef',\n      value: function _setSwiperRef(node) {\n        this.swiper = node;\n        this.props.innerRef(node);\n      }\n    }, {\n      key: 'render',\n      value: function render() {\n        var _props = this.props,\n            tagName = _props.tagName,\n            className = _props.className,\n            style = _props.style,\n            children = _props.children,\n            allowMouseEvents = _props.allowMouseEvents,\n            onSwipeUp = _props.onSwipeUp,\n            onSwipeDown = _props.onSwipeDown,\n            onSwipeLeft = _props.onSwipeLeft,\n            onSwipeRight = _props.onSwipeRight,\n            onSwipeStart = _props.onSwipeStart,\n            onSwipeMove = _props.onSwipeMove,\n            onSwipeEnd = _props.onSwipeEnd,\n            innerRef = _props.innerRef,\n            tolerance = _props.tolerance,\n            props = _objectWithoutProperties(_props, ['tagName', 'className', 'style', 'children', 'allowMouseEvents', 'onSwipeUp', 'onSwipeDown', 'onSwipeLeft', 'onSwipeRight', 'onSwipeStart', 'onSwipeMove', 'onSwipeEnd', 'innerRef', 'tolerance']);\n\n        return _react2.default.createElement(\n          this.props.tagName,\n          _extends({\n            ref: this._setSwiperRef,\n            onMouseDown: this._onMouseDown,\n            onTouchStart: this._handleSwipeStart,\n            onTouchEnd: this._handleSwipeEnd,\n            className: className,\n            style: style\n          }, props),\n          children\n        );\n      }\n    }]);\n\n    return ReactSwipe;\n  }(_react.Component);\n\n  ReactSwipe.displayName = 'ReactSwipe';\n  ReactSwipe.propTypes = {\n    tagName: _propTypes2.default.string,\n    className: _propTypes2.default.string,\n    style: _propTypes2.default.object,\n    children: _propTypes2.default.node,\n    allowMouseEvents: _propTypes2.default.bool,\n    onSwipeUp: _propTypes2.default.func,\n    onSwipeDown: _propTypes2.default.func,\n    onSwipeLeft: _propTypes2.default.func,\n    onSwipeRight: _propTypes2.default.func,\n    onSwipeStart: _propTypes2.default.func,\n    onSwipeMove: _propTypes2.default.func,\n    onSwipeEnd: _propTypes2.default.func,\n    innerRef: _propTypes2.default.func,\n    tolerance: _propTypes2.default.number.isRequired\n  };\n  ReactSwipe.defaultProps = {\n    tagName: 'div',\n    allowMouseEvents: false,\n    onSwipeUp: function onSwipeUp() {},\n    onSwipeDown: function onSwipeDown() {},\n    onSwipeLeft: function onSwipeLeft() {},\n    onSwipeRight: function onSwipeRight() {},\n    onSwipeStart: function onSwipeStart() {},\n    onSwipeMove: function onSwipeMove() {},\n    onSwipeEnd: function onSwipeEnd() {},\n    innerRef: function innerRef() {},\n\n    tolerance: 0\n  };\n  exports.default = ReactSwipe;\n});","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nvar ReactPropTypesSecret = require('./lib/ReactPropTypesSecret');\n\nfunction emptyFunction() {}\nfunction emptyFunctionWithReset() {}\nemptyFunctionWithReset.resetWarningCache = emptyFunction;\n\nmodule.exports = function() {\n  function shim(props, propName, componentName, location, propFullName, secret) {\n    if (secret === ReactPropTypesSecret) {\n      // It is still safe when called from React.\n      return;\n    }\n    var err = new Error(\n      'Calling PropTypes validators directly is not supported by the `prop-types` package. ' +\n      'Use PropTypes.checkPropTypes() to call them. ' +\n      'Read more at http://fb.me/use-check-prop-types'\n    );\n    err.name = 'Invariant Violation';\n    throw err;\n  };\n  shim.isRequired = shim;\n  function getShim() {\n    return shim;\n  };\n  // Important!\n  // Keep this list in sync with production version in `./factoryWithTypeCheckers.js`.\n  var ReactPropTypes = {\n    array: shim,\n    bool: shim,\n    func: shim,\n    number: shim,\n    object: shim,\n    string: shim,\n    symbol: shim,\n\n    any: shim,\n    arrayOf: getShim,\n    element: shim,\n    elementType: shim,\n    instanceOf: getShim,\n    node: shim,\n    objectOf: getShim,\n    oneOf: getShim,\n    oneOfType: getShim,\n    shape: getShim,\n    exact: getShim,\n\n    checkPropTypes: emptyFunctionWithReset,\n    resetWarningCache: emptyFunction\n  };\n\n  ReactPropTypes.PropTypes = ReactPropTypes;\n\n  return ReactPropTypes;\n};\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nif (process.env.NODE_ENV !== 'production') {\n  var ReactIs = require('react-is');\n\n  // By explicitly using `prop-types` you are opting into new development behavior.\n  // http://fb.me/prop-types-in-prod\n  var throwOnDirectAccess = true;\n  module.exports = require('./factoryWithTypeCheckers')(ReactIs.isElement, throwOnDirectAccess);\n} else {\n  // By explicitly using `prop-types` you are opting into new production behavior.\n  // http://fb.me/prop-types-in-prod\n  module.exports = require('./factoryWithThrowingShims')();\n}\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nvar ReactPropTypesSecret = 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED';\n\nmodule.exports = ReactPropTypesSecret;\n","!function(e,t){\"object\"==typeof exports&&\"object\"==typeof module?module.exports=t(require(\"react\")):\"function\"==typeof define&&define.amd?define([\"react\"],t):\"object\"==typeof exports?exports.FacebookLogin=t(require(\"react\")):e.FacebookLogin=t(e.react)}(this,function(e){return function(e){function t(n){if(o[n])return o[n].exports;var r=o[n]={exports:{},id:n,loaded:!1};return e[n].call(r.exports,r,r.exports,t),r.loaded=!0,r.exports}var o={};return t.m=e,t.c=o,t.p=\"\",t(0)}([function(e,t,o){e.exports=o(4)},function(e,t,o){e.exports=o(6)()},function(t,o){t.exports=e},function(e,t){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t[\"default\"]=function(e,t){return decodeURIComponent(e.replace(new RegExp(\"^(?:.*[&\\\\?]\"+encodeURIComponent(t).replace(/[\\.\\+\\*]/g,\"\\\\$&\")+\"(?:\\\\=([^&]*))?)?.*$\",\"i\"),\"$1\"))}},function(e,t,o){\"use strict\";function n(e){return e&&e.__esModule?e:{\"default\":e}}function r(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}function i(e,t){if(!e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return!t||\"object\"!=typeof t&&\"function\"!=typeof t?e:t}function s(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function, not \"+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(t,\"__esModule\",{value:!0});var a=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var o=arguments[t];for(var n in o)Object.prototype.hasOwnProperty.call(o,n)&&(e[n]=o[n])}return e},c=function(){function e(e,t){for(var o=0;o<t.length;o++){var n=t[o];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}return function(t,o,n){return o&&e(t.prototype,o),n&&e(t,n),t}}(),u=o(2),d=n(u),l=o(1),p=n(l),f=o(5),b=n(f),y=o(3),h=n(y),g=function(){var e=!1;try{e=!!(window.navigator&&window.navigator.standalone||navigator.userAgent.match(\"CriOS\")||navigator.userAgent.match(/mobile/i))}catch(t){}return e},k=function(e){function t(){var e,o,n,s;r(this,t);for(var c=arguments.length,u=Array(c),d=0;d<c;d++)u[d]=arguments[d];return o=n=i(this,(e=t.__proto__||Object.getPrototypeOf(t)).call.apply(e,[this].concat(u))),n.state={isSdkLoaded:!1,isProcessing:!1},n.responseApi=function(e){window.FB.api(\"/me\",{locale:n.props.language,fields:n.props.fields},function(t){a(t,e),n.props.callback(t)})},n.checkLoginState=function(e){n.setStateIfMounted({isProcessing:!1}),e.authResponse?n.responseApi(e.authResponse):n.props.onFailure?n.props.onFailure({status:e.status}):n.props.callback({status:e.status})},n.checkLoginAfterRefresh=function(e){\"connected\"===e.status?n.checkLoginState(e):window.FB.login(function(e){return n.checkLoginState(e)},!0)},n.click=function(e){if(n.state.isSdkLoaded&&!n.state.isProcessing&&!n.props.isDisabled){n.setState({isProcessing:!0});var t=n.props,o=t.scope,r=t.appId,i=t.onClick,s=t.returnScopes,a=t.responseType,c=t.redirectUri,u=t.disableMobileRedirect,d=t.authType,l=t.state;if(\"function\"!=typeof i||(i(e),!e.defaultPrevented)){var p={client_id:r,redirect_uri:c,state:l,return_scopes:s,scope:o,response_type:a,auth_type:d};if(n.props.isMobile&&!u)window.location.href=\"https://www.facebook.com/dialog/oauth\"+(0,b[\"default\"])(p);else{if(!window.FB)return void(n.props.onFailure&&n.props.onFailure({status:\"facebookNotLoaded\"}));window.FB.login(n.checkLoginState,{scope:o,return_scopes:s,auth_type:p.auth_type})}}}},s=o,i(n,s)}return s(t,e),c(t,[{key:\"componentDidMount\",value:function(){if(this._isMounted=!0,document.getElementById(\"facebook-jssdk\"))return void this.sdkLoaded();this.setFbAsyncInit(),this.loadSdkAsynchronously();var e=document.getElementById(\"fb-root\");e||(e=document.createElement(\"div\"),e.id=\"fb-root\",document.body.appendChild(e))}},{key:\"componentWillReceiveProps\",value:function(e){this.state.isSdkLoaded&&e.autoLoad&&!this.props.autoLoad&&window.FB.getLoginStatus(this.checkLoginAfterRefresh)}},{key:\"componentWillUnmount\",value:function(){this._isMounted=!1}},{key:\"setStateIfMounted\",value:function(e){this._isMounted&&this.setState(e)}},{key:\"setFbAsyncInit\",value:function(){var e=this,t=this.props,o=t.appId,n=t.xfbml,r=t.cookie,i=t.version,s=t.autoLoad;window.fbAsyncInit=function(){window.FB.init({version:\"v\"+i,appId:o,xfbml:n,cookie:r}),e.setStateIfMounted({isSdkLoaded:!0}),(s||e.isRedirectedFromFb())&&window.FB.getLoginStatus(e.checkLoginAfterRefresh)}}},{key:\"isRedirectedFromFb\",value:function(){var e=window.location.search;return(0,h[\"default\"])(e,\"code\")||(0,h[\"default\"])(e,\"granted_scopes\")}},{key:\"sdkLoaded\",value:function(){this.setState({isSdkLoaded:!0})}},{key:\"loadSdkAsynchronously\",value:function(){var e=this.props.language;!function(t,o,n){var r=t.getElementsByTagName(o)[0],i=r,s=r;t.getElementById(n)||(s=t.createElement(o),s.id=n,s.src=\"https://connect.facebook.net/\"+e+\"/sdk.js\",i.parentNode.insertBefore(s,i))}(document,\"script\",\"facebook-jssdk\")}},{key:\"render\",value:function o(){var o=this.props.render;if(!o)throw new Error(\"ReactFacebookLogin requires a render prop to render\");var e={onClick:this.click,isDisabled:!!this.props.isDisabled,isProcessing:this.state.isProcessing,isSdkLoaded:this.state.isSdkLoaded};return this.props.render(e)}}]),t}(d[\"default\"].Component);k.propTypes={isDisabled:p[\"default\"].bool,callback:p[\"default\"].func.isRequired,appId:p[\"default\"].string.isRequired,xfbml:p[\"default\"].bool,cookie:p[\"default\"].bool,authType:p[\"default\"].string,scope:p[\"default\"].string,state:p[\"default\"].string,responseType:p[\"default\"].string,returnScopes:p[\"default\"].bool,redirectUri:p[\"default\"].string,autoLoad:p[\"default\"].bool,disableMobileRedirect:p[\"default\"].bool,isMobile:p[\"default\"].bool,fields:p[\"default\"].string,version:p[\"default\"].string,language:p[\"default\"].string,onClick:p[\"default\"].func,onFailure:p[\"default\"].func,render:p[\"default\"].func.isRequired},k.defaultProps={redirectUri:\"undefined\"!=typeof window?window.location.href:\"/\",scope:\"public_profile,email\",returnScopes:!1,xfbml:!1,cookie:!1,authType:\"\",fields:\"name\",version:\"2.3\",language:\"en_US\",disableMobileRedirect:!1,isMobile:g(),onFailure:null,state:\"facebookdirect\",responseType:\"code\"},t[\"default\"]=k},function(e,t){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t[\"default\"]=function(e){return\"?\"+Object.keys(e).map(function(t){return t+\"=\"+encodeURIComponent(e[t])}).join(\"&\")}},function(e,t,o){\"use strict\";function n(){}var r=o(7);e.exports=function(){function e(e,t,o,n,i,s){if(s!==r){var a=new Error(\"Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types\");throw a.name=\"Invariant Violation\",a}}function t(){return e}e.isRequired=e;var o={array:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:t,element:e,instanceOf:t,node:e,objectOf:t,oneOf:t,oneOfType:t,shape:t,exact:t};return o.checkPropTypes=n,o.PropTypes=o,o}},function(e,t){\"use strict\";var o=\"SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED\";e.exports=o}])});","/* global Map:readonly, Set:readonly, ArrayBuffer:readonly */\n\nvar hasElementType = typeof Element !== 'undefined';\nvar hasMap = typeof Map === 'function';\nvar hasSet = typeof Set === 'function';\nvar hasArrayBuffer = typeof ArrayBuffer === 'function' && !!ArrayBuffer.isView;\n\n// Note: We **don't** need `envHasBigInt64Array` in fde es6/index.js\n\nfunction equal(a, b) {\n  // START: fast-deep-equal es6/index.js 3.1.1\n  if (a === b) return true;\n\n  if (a && b && typeof a == 'object' && typeof b == 'object') {\n    if (a.constructor !== b.constructor) return false;\n\n    var length, i, keys;\n    if (Array.isArray(a)) {\n      length = a.length;\n      if (length != b.length) return false;\n      for (i = length; i-- !== 0;)\n        if (!equal(a[i], b[i])) return false;\n      return true;\n    }\n\n    // START: Modifications:\n    // 1. Extra `has<Type> &&` helpers in initial condition allow es6 code\n    //    to co-exist with es5.\n    // 2. Replace `for of` with es5 compliant iteration using `for`.\n    //    Basically, take:\n    //\n    //    ```js\n    //    for (i of a.entries())\n    //      if (!b.has(i[0])) return false;\n    //    ```\n    //\n    //    ... and convert to:\n    //\n    //    ```js\n    //    it = a.entries();\n    //    while (!(i = it.next()).done)\n    //      if (!b.has(i.value[0])) return false;\n    //    ```\n    //\n    //    **Note**: `i` access switches to `i.value`.\n    var it;\n    if (hasMap && (a instanceof Map) && (b instanceof Map)) {\n      if (a.size !== b.size) return false;\n      it = a.entries();\n      while (!(i = it.next()).done)\n        if (!b.has(i.value[0])) return false;\n      it = a.entries();\n      while (!(i = it.next()).done)\n        if (!equal(i.value[1], b.get(i.value[0]))) return false;\n      return true;\n    }\n\n    if (hasSet && (a instanceof Set) && (b instanceof Set)) {\n      if (a.size !== b.size) return false;\n      it = a.entries();\n      while (!(i = it.next()).done)\n        if (!b.has(i.value[0])) return false;\n      return true;\n    }\n    // END: Modifications\n\n    if (hasArrayBuffer && ArrayBuffer.isView(a) && ArrayBuffer.isView(b)) {\n      length = a.length;\n      if (length != b.length) return false;\n      for (i = length; i-- !== 0;)\n        if (a[i] !== b[i]) return false;\n      return true;\n    }\n\n    if (a.constructor === RegExp) return a.source === b.source && a.flags === b.flags;\n    if (a.valueOf !== Object.prototype.valueOf) return a.valueOf() === b.valueOf();\n    if (a.toString !== Object.prototype.toString) return a.toString() === b.toString();\n\n    keys = Object.keys(a);\n    length = keys.length;\n    if (length !== Object.keys(b).length) return false;\n\n    for (i = length; i-- !== 0;)\n      if (!Object.prototype.hasOwnProperty.call(b, keys[i])) return false;\n    // END: fast-deep-equal\n\n    // START: react-fast-compare\n    // custom handling for DOM elements\n    if (hasElementType && a instanceof Element) return false;\n\n    // custom handling for React/Preact\n    for (i = length; i-- !== 0;) {\n      if ((keys[i] === '_owner' || keys[i] === '__v' || keys[i] === '__o') && a.$$typeof) {\n        // React-specific: avoid traversing React elements' _owner\n        // Preact-specific: avoid traversing Preact elements' __v and __o\n        //    __v = $_original / $_vnode\n        //    __o = $_owner\n        // These properties contain circular references and are not needed when\n        // comparing the actual elements (and not their owners)\n        // .$$typeof and ._store on just reasonable markers of elements\n\n        continue;\n      }\n\n      // all other properties should be traversed as usual\n      if (!equal(a[keys[i]], b[keys[i]])) return false;\n    }\n    // END: react-fast-compare\n\n    // START: fast-deep-equal\n    return true;\n  }\n\n  return a !== a && b !== b;\n}\n// end fast-deep-equal\n\nmodule.exports = function isEqual(a, b) {\n  try {\n    return equal(a, b);\n  } catch (error) {\n    if (((error.message || '').match(/stack|recursion/i))) {\n      // warn on circular references, don't crash\n      // browsers give this different errors name and messages:\n      // chrome/safari: \"RangeError\", \"Maximum call stack size exceeded\"\n      // firefox: \"InternalError\", too much recursion\"\n      // edge: \"Error\", \"Out of stack space\"\n      console.warn('react-fast-compare cannot handle circular refs');\n      return false;\n    }\n    // some other error. we should definitely know about these\n    throw error;\n  }\n};\n","import PropTypes from 'prop-types';\nimport withSideEffect from 'react-side-effect';\nimport isEqual from 'react-fast-compare';\nimport React from 'react';\nimport objectAssign from 'object-assign';\n\nvar ATTRIBUTE_NAMES = {\n    BODY: \"bodyAttributes\",\n    HTML: \"htmlAttributes\",\n    TITLE: \"titleAttributes\"\n};\n\nvar TAG_NAMES = {\n    BASE: \"base\",\n    BODY: \"body\",\n    HEAD: \"head\",\n    HTML: \"html\",\n    LINK: \"link\",\n    META: \"meta\",\n    NOSCRIPT: \"noscript\",\n    SCRIPT: \"script\",\n    STYLE: \"style\",\n    TITLE: \"title\"\n};\n\nvar VALID_TAG_NAMES = Object.keys(TAG_NAMES).map(function (name) {\n    return TAG_NAMES[name];\n});\n\nvar TAG_PROPERTIES = {\n    CHARSET: \"charset\",\n    CSS_TEXT: \"cssText\",\n    HREF: \"href\",\n    HTTPEQUIV: \"http-equiv\",\n    INNER_HTML: \"innerHTML\",\n    ITEM_PROP: \"itemprop\",\n    NAME: \"name\",\n    PROPERTY: \"property\",\n    REL: \"rel\",\n    SRC: \"src\",\n    TARGET: \"target\"\n};\n\nvar REACT_TAG_MAP = {\n    accesskey: \"accessKey\",\n    charset: \"charSet\",\n    class: \"className\",\n    contenteditable: \"contentEditable\",\n    contextmenu: \"contextMenu\",\n    \"http-equiv\": \"httpEquiv\",\n    itemprop: \"itemProp\",\n    tabindex: \"tabIndex\"\n};\n\nvar HELMET_PROPS = {\n    DEFAULT_TITLE: \"defaultTitle\",\n    DEFER: \"defer\",\n    ENCODE_SPECIAL_CHARACTERS: \"encodeSpecialCharacters\",\n    ON_CHANGE_CLIENT_STATE: \"onChangeClientState\",\n    TITLE_TEMPLATE: \"titleTemplate\"\n};\n\nvar HTML_TAG_MAP = Object.keys(REACT_TAG_MAP).reduce(function (obj, key) {\n    obj[REACT_TAG_MAP[key]] = key;\n    return obj;\n}, {});\n\nvar SELF_CLOSING_TAGS = [TAG_NAMES.NOSCRIPT, TAG_NAMES.SCRIPT, TAG_NAMES.STYLE];\n\nvar HELMET_ATTRIBUTE = \"data-react-helmet\";\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) {\n  return typeof obj;\n} : function (obj) {\n  return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n};\n\nvar classCallCheck = function (instance, Constructor) {\n  if (!(instance instanceof Constructor)) {\n    throw new TypeError(\"Cannot call a class as a function\");\n  }\n};\n\nvar createClass = function () {\n  function defineProperties(target, props) {\n    for (var i = 0; i < props.length; i++) {\n      var descriptor = props[i];\n      descriptor.enumerable = descriptor.enumerable || false;\n      descriptor.configurable = true;\n      if (\"value\" in descriptor) descriptor.writable = true;\n      Object.defineProperty(target, descriptor.key, descriptor);\n    }\n  }\n\n  return function (Constructor, protoProps, staticProps) {\n    if (protoProps) defineProperties(Constructor.prototype, protoProps);\n    if (staticProps) defineProperties(Constructor, staticProps);\n    return Constructor;\n  };\n}();\n\nvar _extends = Object.assign || function (target) {\n  for (var i = 1; i < arguments.length; i++) {\n    var source = arguments[i];\n\n    for (var key in source) {\n      if (Object.prototype.hasOwnProperty.call(source, key)) {\n        target[key] = source[key];\n      }\n    }\n  }\n\n  return target;\n};\n\nvar inherits = function (subClass, superClass) {\n  if (typeof superClass !== \"function\" && superClass !== null) {\n    throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass);\n  }\n\n  subClass.prototype = Object.create(superClass && superClass.prototype, {\n    constructor: {\n      value: subClass,\n      enumerable: false,\n      writable: true,\n      configurable: true\n    }\n  });\n  if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n};\n\nvar objectWithoutProperties = function (obj, keys) {\n  var target = {};\n\n  for (var i in obj) {\n    if (keys.indexOf(i) >= 0) continue;\n    if (!Object.prototype.hasOwnProperty.call(obj, i)) continue;\n    target[i] = obj[i];\n  }\n\n  return target;\n};\n\nvar possibleConstructorReturn = function (self, call) {\n  if (!self) {\n    throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n  }\n\n  return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self;\n};\n\nvar encodeSpecialCharacters = function encodeSpecialCharacters(str) {\n    var encode = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n\n    if (encode === false) {\n        return String(str);\n    }\n\n    return String(str).replace(/&/g, \"&amp;\").replace(/</g, \"&lt;\").replace(/>/g, \"&gt;\").replace(/\"/g, \"&quot;\").replace(/'/g, \"&#x27;\");\n};\n\nvar getTitleFromPropsList = function getTitleFromPropsList(propsList) {\n    var innermostTitle = getInnermostProperty(propsList, TAG_NAMES.TITLE);\n    var innermostTemplate = getInnermostProperty(propsList, HELMET_PROPS.TITLE_TEMPLATE);\n\n    if (innermostTemplate && innermostTitle) {\n        // use function arg to avoid need to escape $ characters\n        return innermostTemplate.replace(/%s/g, function () {\n            return Array.isArray(innermostTitle) ? innermostTitle.join(\"\") : innermostTitle;\n        });\n    }\n\n    var innermostDefaultTitle = getInnermostProperty(propsList, HELMET_PROPS.DEFAULT_TITLE);\n\n    return innermostTitle || innermostDefaultTitle || undefined;\n};\n\nvar getOnChangeClientState = function getOnChangeClientState(propsList) {\n    return getInnermostProperty(propsList, HELMET_PROPS.ON_CHANGE_CLIENT_STATE) || function () {};\n};\n\nvar getAttributesFromPropsList = function getAttributesFromPropsList(tagType, propsList) {\n    return propsList.filter(function (props) {\n        return typeof props[tagType] !== \"undefined\";\n    }).map(function (props) {\n        return props[tagType];\n    }).reduce(function (tagAttrs, current) {\n        return _extends({}, tagAttrs, current);\n    }, {});\n};\n\nvar getBaseTagFromPropsList = function getBaseTagFromPropsList(primaryAttributes, propsList) {\n    return propsList.filter(function (props) {\n        return typeof props[TAG_NAMES.BASE] !== \"undefined\";\n    }).map(function (props) {\n        return props[TAG_NAMES.BASE];\n    }).reverse().reduce(function (innermostBaseTag, tag) {\n        if (!innermostBaseTag.length) {\n            var keys = Object.keys(tag);\n\n            for (var i = 0; i < keys.length; i++) {\n                var attributeKey = keys[i];\n                var lowerCaseAttributeKey = attributeKey.toLowerCase();\n\n                if (primaryAttributes.indexOf(lowerCaseAttributeKey) !== -1 && tag[lowerCaseAttributeKey]) {\n                    return innermostBaseTag.concat(tag);\n                }\n            }\n        }\n\n        return innermostBaseTag;\n    }, []);\n};\n\nvar getTagsFromPropsList = function getTagsFromPropsList(tagName, primaryAttributes, propsList) {\n    // Calculate list of tags, giving priority innermost component (end of the propslist)\n    var approvedSeenTags = {};\n\n    return propsList.filter(function (props) {\n        if (Array.isArray(props[tagName])) {\n            return true;\n        }\n        if (typeof props[tagName] !== \"undefined\") {\n            warn(\"Helmet: \" + tagName + \" should be of type \\\"Array\\\". Instead found type \\\"\" + _typeof(props[tagName]) + \"\\\"\");\n        }\n        return false;\n    }).map(function (props) {\n        return props[tagName];\n    }).reverse().reduce(function (approvedTags, instanceTags) {\n        var instanceSeenTags = {};\n\n        instanceTags.filter(function (tag) {\n            var primaryAttributeKey = void 0;\n            var keys = Object.keys(tag);\n            for (var i = 0; i < keys.length; i++) {\n                var attributeKey = keys[i];\n                var lowerCaseAttributeKey = attributeKey.toLowerCase();\n\n                // Special rule with link tags, since rel and href are both primary tags, rel takes priority\n                if (primaryAttributes.indexOf(lowerCaseAttributeKey) !== -1 && !(primaryAttributeKey === TAG_PROPERTIES.REL && tag[primaryAttributeKey].toLowerCase() === \"canonical\") && !(lowerCaseAttributeKey === TAG_PROPERTIES.REL && tag[lowerCaseAttributeKey].toLowerCase() === \"stylesheet\")) {\n                    primaryAttributeKey = lowerCaseAttributeKey;\n                }\n                // Special case for innerHTML which doesn't work lowercased\n                if (primaryAttributes.indexOf(attributeKey) !== -1 && (attributeKey === TAG_PROPERTIES.INNER_HTML || attributeKey === TAG_PROPERTIES.CSS_TEXT || attributeKey === TAG_PROPERTIES.ITEM_PROP)) {\n                    primaryAttributeKey = attributeKey;\n                }\n            }\n\n            if (!primaryAttributeKey || !tag[primaryAttributeKey]) {\n                return false;\n            }\n\n            var value = tag[primaryAttributeKey].toLowerCase();\n\n            if (!approvedSeenTags[primaryAttributeKey]) {\n                approvedSeenTags[primaryAttributeKey] = {};\n            }\n\n            if (!instanceSeenTags[primaryAttributeKey]) {\n                instanceSeenTags[primaryAttributeKey] = {};\n            }\n\n            if (!approvedSeenTags[primaryAttributeKey][value]) {\n                instanceSeenTags[primaryAttributeKey][value] = true;\n                return true;\n            }\n\n            return false;\n        }).reverse().forEach(function (tag) {\n            return approvedTags.push(tag);\n        });\n\n        // Update seen tags with tags from this instance\n        var keys = Object.keys(instanceSeenTags);\n        for (var i = 0; i < keys.length; i++) {\n            var attributeKey = keys[i];\n            var tagUnion = objectAssign({}, approvedSeenTags[attributeKey], instanceSeenTags[attributeKey]);\n\n            approvedSeenTags[attributeKey] = tagUnion;\n        }\n\n        return approvedTags;\n    }, []).reverse();\n};\n\nvar getInnermostProperty = function getInnermostProperty(propsList, property) {\n    for (var i = propsList.length - 1; i >= 0; i--) {\n        var props = propsList[i];\n\n        if (props.hasOwnProperty(property)) {\n            return props[property];\n        }\n    }\n\n    return null;\n};\n\nvar reducePropsToState = function reducePropsToState(propsList) {\n    return {\n        baseTag: getBaseTagFromPropsList([TAG_PROPERTIES.HREF, TAG_PROPERTIES.TARGET], propsList),\n        bodyAttributes: getAttributesFromPropsList(ATTRIBUTE_NAMES.BODY, propsList),\n        defer: getInnermostProperty(propsList, HELMET_PROPS.DEFER),\n        encode: getInnermostProperty(propsList, HELMET_PROPS.ENCODE_SPECIAL_CHARACTERS),\n        htmlAttributes: getAttributesFromPropsList(ATTRIBUTE_NAMES.HTML, propsList),\n        linkTags: getTagsFromPropsList(TAG_NAMES.LINK, [TAG_PROPERTIES.REL, TAG_PROPERTIES.HREF], propsList),\n        metaTags: getTagsFromPropsList(TAG_NAMES.META, [TAG_PROPERTIES.NAME, TAG_PROPERTIES.CHARSET, TAG_PROPERTIES.HTTPEQUIV, TAG_PROPERTIES.PROPERTY, TAG_PROPERTIES.ITEM_PROP], propsList),\n        noscriptTags: getTagsFromPropsList(TAG_NAMES.NOSCRIPT, [TAG_PROPERTIES.INNER_HTML], propsList),\n        onChangeClientState: getOnChangeClientState(propsList),\n        scriptTags: getTagsFromPropsList(TAG_NAMES.SCRIPT, [TAG_PROPERTIES.SRC, TAG_PROPERTIES.INNER_HTML], propsList),\n        styleTags: getTagsFromPropsList(TAG_NAMES.STYLE, [TAG_PROPERTIES.CSS_TEXT], propsList),\n        title: getTitleFromPropsList(propsList),\n        titleAttributes: getAttributesFromPropsList(ATTRIBUTE_NAMES.TITLE, propsList)\n    };\n};\n\nvar rafPolyfill = function () {\n    var clock = Date.now();\n\n    return function (callback) {\n        var currentTime = Date.now();\n\n        if (currentTime - clock > 16) {\n            clock = currentTime;\n            callback(currentTime);\n        } else {\n            setTimeout(function () {\n                rafPolyfill(callback);\n            }, 0);\n        }\n    };\n}();\n\nvar cafPolyfill = function cafPolyfill(id) {\n    return clearTimeout(id);\n};\n\nvar requestAnimationFrame = typeof window !== \"undefined\" ? window.requestAnimationFrame && window.requestAnimationFrame.bind(window) || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || rafPolyfill : global.requestAnimationFrame || rafPolyfill;\n\nvar cancelAnimationFrame = typeof window !== \"undefined\" ? window.cancelAnimationFrame || window.webkitCancelAnimationFrame || window.mozCancelAnimationFrame || cafPolyfill : global.cancelAnimationFrame || cafPolyfill;\n\nvar warn = function warn(msg) {\n    return console && typeof console.warn === \"function\" && console.warn(msg);\n};\n\nvar _helmetCallback = null;\n\nvar handleClientStateChange = function handleClientStateChange(newState) {\n    if (_helmetCallback) {\n        cancelAnimationFrame(_helmetCallback);\n    }\n\n    if (newState.defer) {\n        _helmetCallback = requestAnimationFrame(function () {\n            commitTagChanges(newState, function () {\n                _helmetCallback = null;\n            });\n        });\n    } else {\n        commitTagChanges(newState);\n        _helmetCallback = null;\n    }\n};\n\nvar commitTagChanges = function commitTagChanges(newState, cb) {\n    var baseTag = newState.baseTag,\n        bodyAttributes = newState.bodyAttributes,\n        htmlAttributes = newState.htmlAttributes,\n        linkTags = newState.linkTags,\n        metaTags = newState.metaTags,\n        noscriptTags = newState.noscriptTags,\n        onChangeClientState = newState.onChangeClientState,\n        scriptTags = newState.scriptTags,\n        styleTags = newState.styleTags,\n        title = newState.title,\n        titleAttributes = newState.titleAttributes;\n\n    updateAttributes(TAG_NAMES.BODY, bodyAttributes);\n    updateAttributes(TAG_NAMES.HTML, htmlAttributes);\n\n    updateTitle(title, titleAttributes);\n\n    var tagUpdates = {\n        baseTag: updateTags(TAG_NAMES.BASE, baseTag),\n        linkTags: updateTags(TAG_NAMES.LINK, linkTags),\n        metaTags: updateTags(TAG_NAMES.META, metaTags),\n        noscriptTags: updateTags(TAG_NAMES.NOSCRIPT, noscriptTags),\n        scriptTags: updateTags(TAG_NAMES.SCRIPT, scriptTags),\n        styleTags: updateTags(TAG_NAMES.STYLE, styleTags)\n    };\n\n    var addedTags = {};\n    var removedTags = {};\n\n    Object.keys(tagUpdates).forEach(function (tagType) {\n        var _tagUpdates$tagType = tagUpdates[tagType],\n            newTags = _tagUpdates$tagType.newTags,\n            oldTags = _tagUpdates$tagType.oldTags;\n\n\n        if (newTags.length) {\n            addedTags[tagType] = newTags;\n        }\n        if (oldTags.length) {\n            removedTags[tagType] = tagUpdates[tagType].oldTags;\n        }\n    });\n\n    cb && cb();\n\n    onChangeClientState(newState, addedTags, removedTags);\n};\n\nvar flattenArray = function flattenArray(possibleArray) {\n    return Array.isArray(possibleArray) ? possibleArray.join(\"\") : possibleArray;\n};\n\nvar updateTitle = function updateTitle(title, attributes) {\n    if (typeof title !== \"undefined\" && document.title !== title) {\n        document.title = flattenArray(title);\n    }\n\n    updateAttributes(TAG_NAMES.TITLE, attributes);\n};\n\nvar updateAttributes = function updateAttributes(tagName, attributes) {\n    var elementTag = document.getElementsByTagName(tagName)[0];\n\n    if (!elementTag) {\n        return;\n    }\n\n    var helmetAttributeString = elementTag.getAttribute(HELMET_ATTRIBUTE);\n    var helmetAttributes = helmetAttributeString ? helmetAttributeString.split(\",\") : [];\n    var attributesToRemove = [].concat(helmetAttributes);\n    var attributeKeys = Object.keys(attributes);\n\n    for (var i = 0; i < attributeKeys.length; i++) {\n        var attribute = attributeKeys[i];\n        var value = attributes[attribute] || \"\";\n\n        if (elementTag.getAttribute(attribute) !== value) {\n            elementTag.setAttribute(attribute, value);\n        }\n\n        if (helmetAttributes.indexOf(attribute) === -1) {\n            helmetAttributes.push(attribute);\n        }\n\n        var indexToSave = attributesToRemove.indexOf(attribute);\n        if (indexToSave !== -1) {\n            attributesToRemove.splice(indexToSave, 1);\n        }\n    }\n\n    for (var _i = attributesToRemove.length - 1; _i >= 0; _i--) {\n        elementTag.removeAttribute(attributesToRemove[_i]);\n    }\n\n    if (helmetAttributes.length === attributesToRemove.length) {\n        elementTag.removeAttribute(HELMET_ATTRIBUTE);\n    } else if (elementTag.getAttribute(HELMET_ATTRIBUTE) !== attributeKeys.join(\",\")) {\n        elementTag.setAttribute(HELMET_ATTRIBUTE, attributeKeys.join(\",\"));\n    }\n};\n\nvar updateTags = function updateTags(type, tags) {\n    var headElement = document.head || document.querySelector(TAG_NAMES.HEAD);\n    var tagNodes = headElement.querySelectorAll(type + \"[\" + HELMET_ATTRIBUTE + \"]\");\n    var oldTags = Array.prototype.slice.call(tagNodes);\n    var newTags = [];\n    var indexToDelete = void 0;\n\n    if (tags && tags.length) {\n        tags.forEach(function (tag) {\n            var newElement = document.createElement(type);\n\n            for (var attribute in tag) {\n                if (tag.hasOwnProperty(attribute)) {\n                    if (attribute === TAG_PROPERTIES.INNER_HTML) {\n                        newElement.innerHTML = tag.innerHTML;\n                    } else if (attribute === TAG_PROPERTIES.CSS_TEXT) {\n                        if (newElement.styleSheet) {\n                            newElement.styleSheet.cssText = tag.cssText;\n                        } else {\n                            newElement.appendChild(document.createTextNode(tag.cssText));\n                        }\n                    } else {\n                        var value = typeof tag[attribute] === \"undefined\" ? \"\" : tag[attribute];\n                        newElement.setAttribute(attribute, value);\n                    }\n                }\n            }\n\n            newElement.setAttribute(HELMET_ATTRIBUTE, \"true\");\n\n            // Remove a duplicate tag from domTagstoRemove, so it isn't cleared.\n            if (oldTags.some(function (existingTag, index) {\n                indexToDelete = index;\n                return newElement.isEqualNode(existingTag);\n            })) {\n                oldTags.splice(indexToDelete, 1);\n            } else {\n                newTags.push(newElement);\n            }\n        });\n    }\n\n    oldTags.forEach(function (tag) {\n        return tag.parentNode.removeChild(tag);\n    });\n    newTags.forEach(function (tag) {\n        return headElement.appendChild(tag);\n    });\n\n    return {\n        oldTags: oldTags,\n        newTags: newTags\n    };\n};\n\nvar generateElementAttributesAsString = function generateElementAttributesAsString(attributes) {\n    return Object.keys(attributes).reduce(function (str, key) {\n        var attr = typeof attributes[key] !== \"undefined\" ? key + \"=\\\"\" + attributes[key] + \"\\\"\" : \"\" + key;\n        return str ? str + \" \" + attr : attr;\n    }, \"\");\n};\n\nvar generateTitleAsString = function generateTitleAsString(type, title, attributes, encode) {\n    var attributeString = generateElementAttributesAsString(attributes);\n    var flattenedTitle = flattenArray(title);\n    return attributeString ? \"<\" + type + \" \" + HELMET_ATTRIBUTE + \"=\\\"true\\\" \" + attributeString + \">\" + encodeSpecialCharacters(flattenedTitle, encode) + \"</\" + type + \">\" : \"<\" + type + \" \" + HELMET_ATTRIBUTE + \"=\\\"true\\\">\" + encodeSpecialCharacters(flattenedTitle, encode) + \"</\" + type + \">\";\n};\n\nvar generateTagsAsString = function generateTagsAsString(type, tags, encode) {\n    return tags.reduce(function (str, tag) {\n        var attributeHtml = Object.keys(tag).filter(function (attribute) {\n            return !(attribute === TAG_PROPERTIES.INNER_HTML || attribute === TAG_PROPERTIES.CSS_TEXT);\n        }).reduce(function (string, attribute) {\n            var attr = typeof tag[attribute] === \"undefined\" ? attribute : attribute + \"=\\\"\" + encodeSpecialCharacters(tag[attribute], encode) + \"\\\"\";\n            return string ? string + \" \" + attr : attr;\n        }, \"\");\n\n        var tagContent = tag.innerHTML || tag.cssText || \"\";\n\n        var isSelfClosing = SELF_CLOSING_TAGS.indexOf(type) === -1;\n\n        return str + \"<\" + type + \" \" + HELMET_ATTRIBUTE + \"=\\\"true\\\" \" + attributeHtml + (isSelfClosing ? \"/>\" : \">\" + tagContent + \"</\" + type + \">\");\n    }, \"\");\n};\n\nvar convertElementAttributestoReactProps = function convertElementAttributestoReactProps(attributes) {\n    var initProps = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n    return Object.keys(attributes).reduce(function (obj, key) {\n        obj[REACT_TAG_MAP[key] || key] = attributes[key];\n        return obj;\n    }, initProps);\n};\n\nvar convertReactPropstoHtmlAttributes = function convertReactPropstoHtmlAttributes(props) {\n    var initAttributes = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n    return Object.keys(props).reduce(function (obj, key) {\n        obj[HTML_TAG_MAP[key] || key] = props[key];\n        return obj;\n    }, initAttributes);\n};\n\nvar generateTitleAsReactComponent = function generateTitleAsReactComponent(type, title, attributes) {\n    var _initProps;\n\n    // assigning into an array to define toString function on it\n    var initProps = (_initProps = {\n        key: title\n    }, _initProps[HELMET_ATTRIBUTE] = true, _initProps);\n    var props = convertElementAttributestoReactProps(attributes, initProps);\n\n    return [React.createElement(TAG_NAMES.TITLE, props, title)];\n};\n\nvar generateTagsAsReactComponent = function generateTagsAsReactComponent(type, tags) {\n    return tags.map(function (tag, i) {\n        var _mappedTag;\n\n        var mappedTag = (_mappedTag = {\n            key: i\n        }, _mappedTag[HELMET_ATTRIBUTE] = true, _mappedTag);\n\n        Object.keys(tag).forEach(function (attribute) {\n            var mappedAttribute = REACT_TAG_MAP[attribute] || attribute;\n\n            if (mappedAttribute === TAG_PROPERTIES.INNER_HTML || mappedAttribute === TAG_PROPERTIES.CSS_TEXT) {\n                var content = tag.innerHTML || tag.cssText;\n                mappedTag.dangerouslySetInnerHTML = { __html: content };\n            } else {\n                mappedTag[mappedAttribute] = tag[attribute];\n            }\n        });\n\n        return React.createElement(type, mappedTag);\n    });\n};\n\nvar getMethodsForTag = function getMethodsForTag(type, tags, encode) {\n    switch (type) {\n        case TAG_NAMES.TITLE:\n            return {\n                toComponent: function toComponent() {\n                    return generateTitleAsReactComponent(type, tags.title, tags.titleAttributes, encode);\n                },\n                toString: function toString() {\n                    return generateTitleAsString(type, tags.title, tags.titleAttributes, encode);\n                }\n            };\n        case ATTRIBUTE_NAMES.BODY:\n        case ATTRIBUTE_NAMES.HTML:\n            return {\n                toComponent: function toComponent() {\n                    return convertElementAttributestoReactProps(tags);\n                },\n                toString: function toString() {\n                    return generateElementAttributesAsString(tags);\n                }\n            };\n        default:\n            return {\n                toComponent: function toComponent() {\n                    return generateTagsAsReactComponent(type, tags);\n                },\n                toString: function toString() {\n                    return generateTagsAsString(type, tags, encode);\n                }\n            };\n    }\n};\n\nvar mapStateOnServer = function mapStateOnServer(_ref) {\n    var baseTag = _ref.baseTag,\n        bodyAttributes = _ref.bodyAttributes,\n        encode = _ref.encode,\n        htmlAttributes = _ref.htmlAttributes,\n        linkTags = _ref.linkTags,\n        metaTags = _ref.metaTags,\n        noscriptTags = _ref.noscriptTags,\n        scriptTags = _ref.scriptTags,\n        styleTags = _ref.styleTags,\n        _ref$title = _ref.title,\n        title = _ref$title === undefined ? \"\" : _ref$title,\n        titleAttributes = _ref.titleAttributes;\n    return {\n        base: getMethodsForTag(TAG_NAMES.BASE, baseTag, encode),\n        bodyAttributes: getMethodsForTag(ATTRIBUTE_NAMES.BODY, bodyAttributes, encode),\n        htmlAttributes: getMethodsForTag(ATTRIBUTE_NAMES.HTML, htmlAttributes, encode),\n        link: getMethodsForTag(TAG_NAMES.LINK, linkTags, encode),\n        meta: getMethodsForTag(TAG_NAMES.META, metaTags, encode),\n        noscript: getMethodsForTag(TAG_NAMES.NOSCRIPT, noscriptTags, encode),\n        script: getMethodsForTag(TAG_NAMES.SCRIPT, scriptTags, encode),\n        style: getMethodsForTag(TAG_NAMES.STYLE, styleTags, encode),\n        title: getMethodsForTag(TAG_NAMES.TITLE, { title: title, titleAttributes: titleAttributes }, encode)\n    };\n};\n\nvar Helmet = function Helmet(Component) {\n    var _class, _temp;\n\n    return _temp = _class = function (_React$Component) {\n        inherits(HelmetWrapper, _React$Component);\n\n        function HelmetWrapper() {\n            classCallCheck(this, HelmetWrapper);\n            return possibleConstructorReturn(this, _React$Component.apply(this, arguments));\n        }\n\n        HelmetWrapper.prototype.shouldComponentUpdate = function shouldComponentUpdate(nextProps) {\n            return !isEqual(this.props, nextProps);\n        };\n\n        HelmetWrapper.prototype.mapNestedChildrenToProps = function mapNestedChildrenToProps(child, nestedChildren) {\n            if (!nestedChildren) {\n                return null;\n            }\n\n            switch (child.type) {\n                case TAG_NAMES.SCRIPT:\n                case TAG_NAMES.NOSCRIPT:\n                    return {\n                        innerHTML: nestedChildren\n                    };\n\n                case TAG_NAMES.STYLE:\n                    return {\n                        cssText: nestedChildren\n                    };\n            }\n\n            throw new Error(\"<\" + child.type + \" /> elements are self-closing and can not contain children. Refer to our API for more information.\");\n        };\n\n        HelmetWrapper.prototype.flattenArrayTypeChildren = function flattenArrayTypeChildren(_ref) {\n            var _babelHelpers$extends;\n\n            var child = _ref.child,\n                arrayTypeChildren = _ref.arrayTypeChildren,\n                newChildProps = _ref.newChildProps,\n                nestedChildren = _ref.nestedChildren;\n\n            return _extends({}, arrayTypeChildren, (_babelHelpers$extends = {}, _babelHelpers$extends[child.type] = [].concat(arrayTypeChildren[child.type] || [], [_extends({}, newChildProps, this.mapNestedChildrenToProps(child, nestedChildren))]), _babelHelpers$extends));\n        };\n\n        HelmetWrapper.prototype.mapObjectTypeChildren = function mapObjectTypeChildren(_ref2) {\n            var _babelHelpers$extends2, _babelHelpers$extends3;\n\n            var child = _ref2.child,\n                newProps = _ref2.newProps,\n                newChildProps = _ref2.newChildProps,\n                nestedChildren = _ref2.nestedChildren;\n\n            switch (child.type) {\n                case TAG_NAMES.TITLE:\n                    return _extends({}, newProps, (_babelHelpers$extends2 = {}, _babelHelpers$extends2[child.type] = nestedChildren, _babelHelpers$extends2.titleAttributes = _extends({}, newChildProps), _babelHelpers$extends2));\n\n                case TAG_NAMES.BODY:\n                    return _extends({}, newProps, {\n                        bodyAttributes: _extends({}, newChildProps)\n                    });\n\n                case TAG_NAMES.HTML:\n                    return _extends({}, newProps, {\n                        htmlAttributes: _extends({}, newChildProps)\n                    });\n            }\n\n            return _extends({}, newProps, (_babelHelpers$extends3 = {}, _babelHelpers$extends3[child.type] = _extends({}, newChildProps), _babelHelpers$extends3));\n        };\n\n        HelmetWrapper.prototype.mapArrayTypeChildrenToProps = function mapArrayTypeChildrenToProps(arrayTypeChildren, newProps) {\n            var newFlattenedProps = _extends({}, newProps);\n\n            Object.keys(arrayTypeChildren).forEach(function (arrayChildName) {\n                var _babelHelpers$extends4;\n\n                newFlattenedProps = _extends({}, newFlattenedProps, (_babelHelpers$extends4 = {}, _babelHelpers$extends4[arrayChildName] = arrayTypeChildren[arrayChildName], _babelHelpers$extends4));\n            });\n\n            return newFlattenedProps;\n        };\n\n        HelmetWrapper.prototype.warnOnInvalidChildren = function warnOnInvalidChildren(child, nestedChildren) {\n            if (process.env.NODE_ENV !== \"production\") {\n                if (!VALID_TAG_NAMES.some(function (name) {\n                    return child.type === name;\n                })) {\n                    if (typeof child.type === \"function\") {\n                        return warn(\"You may be attempting to nest <Helmet> components within each other, which is not allowed. Refer to our API for more information.\");\n                    }\n\n                    return warn(\"Only elements types \" + VALID_TAG_NAMES.join(\", \") + \" are allowed. Helmet does not support rendering <\" + child.type + \"> elements. Refer to our API for more information.\");\n                }\n\n                if (nestedChildren && typeof nestedChildren !== \"string\" && (!Array.isArray(nestedChildren) || nestedChildren.some(function (nestedChild) {\n                    return typeof nestedChild !== \"string\";\n                }))) {\n                    throw new Error(\"Helmet expects a string as a child of <\" + child.type + \">. Did you forget to wrap your children in braces? ( <\" + child.type + \">{``}</\" + child.type + \"> ) Refer to our API for more information.\");\n                }\n            }\n\n            return true;\n        };\n\n        HelmetWrapper.prototype.mapChildrenToProps = function mapChildrenToProps(children, newProps) {\n            var _this2 = this;\n\n            var arrayTypeChildren = {};\n\n            React.Children.forEach(children, function (child) {\n                if (!child || !child.props) {\n                    return;\n                }\n\n                var _child$props = child.props,\n                    nestedChildren = _child$props.children,\n                    childProps = objectWithoutProperties(_child$props, [\"children\"]);\n\n                var newChildProps = convertReactPropstoHtmlAttributes(childProps);\n\n                _this2.warnOnInvalidChildren(child, nestedChildren);\n\n                switch (child.type) {\n                    case TAG_NAMES.LINK:\n                    case TAG_NAMES.META:\n                    case TAG_NAMES.NOSCRIPT:\n                    case TAG_NAMES.SCRIPT:\n                    case TAG_NAMES.STYLE:\n                        arrayTypeChildren = _this2.flattenArrayTypeChildren({\n                            child: child,\n                            arrayTypeChildren: arrayTypeChildren,\n                            newChildProps: newChildProps,\n                            nestedChildren: nestedChildren\n                        });\n                        break;\n\n                    default:\n                        newProps = _this2.mapObjectTypeChildren({\n                            child: child,\n                            newProps: newProps,\n                            newChildProps: newChildProps,\n                            nestedChildren: nestedChildren\n                        });\n                        break;\n                }\n            });\n\n            newProps = this.mapArrayTypeChildrenToProps(arrayTypeChildren, newProps);\n            return newProps;\n        };\n\n        HelmetWrapper.prototype.render = function render() {\n            var _props = this.props,\n                children = _props.children,\n                props = objectWithoutProperties(_props, [\"children\"]);\n\n            var newProps = _extends({}, props);\n\n            if (children) {\n                newProps = this.mapChildrenToProps(children, newProps);\n            }\n\n            return React.createElement(Component, newProps);\n        };\n\n        createClass(HelmetWrapper, null, [{\n            key: \"canUseDOM\",\n\n\n            // Component.peek comes from react-side-effect:\n            // For testing, you may use a static peek() method available on the returned component.\n            // It lets you get the current state without resetting the mounted instance stack.\n            // Don’t use it for anything other than testing.\n\n            /**\n             * @param {Object} base: {\"target\": \"_blank\", \"href\": \"http://mysite.com/\"}\n             * @param {Object} bodyAttributes: {\"className\": \"root\"}\n             * @param {String} defaultTitle: \"Default Title\"\n             * @param {Boolean} defer: true\n             * @param {Boolean} encodeSpecialCharacters: true\n             * @param {Object} htmlAttributes: {\"lang\": \"en\", \"amp\": undefined}\n             * @param {Array} link: [{\"rel\": \"canonical\", \"href\": \"http://mysite.com/example\"}]\n             * @param {Array} meta: [{\"name\": \"description\", \"content\": \"Test description\"}]\n             * @param {Array} noscript: [{\"innerHTML\": \"<img src='http://mysite.com/js/test.js'\"}]\n             * @param {Function} onChangeClientState: \"(newState) => console.log(newState)\"\n             * @param {Array} script: [{\"type\": \"text/javascript\", \"src\": \"http://mysite.com/js/test.js\"}]\n             * @param {Array} style: [{\"type\": \"text/css\", \"cssText\": \"div { display: block; color: blue; }\"}]\n             * @param {String} title: \"Title\"\n             * @param {Object} titleAttributes: {\"itemprop\": \"name\"}\n             * @param {String} titleTemplate: \"MySite.com - %s\"\n             */\n            set: function set$$1(canUseDOM) {\n                Component.canUseDOM = canUseDOM;\n            }\n        }]);\n        return HelmetWrapper;\n    }(React.Component), _class.propTypes = {\n        base: PropTypes.object,\n        bodyAttributes: PropTypes.object,\n        children: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.node), PropTypes.node]),\n        defaultTitle: PropTypes.string,\n        defer: PropTypes.bool,\n        encodeSpecialCharacters: PropTypes.bool,\n        htmlAttributes: PropTypes.object,\n        link: PropTypes.arrayOf(PropTypes.object),\n        meta: PropTypes.arrayOf(PropTypes.object),\n        noscript: PropTypes.arrayOf(PropTypes.object),\n        onChangeClientState: PropTypes.func,\n        script: PropTypes.arrayOf(PropTypes.object),\n        style: PropTypes.arrayOf(PropTypes.object),\n        title: PropTypes.string,\n        titleAttributes: PropTypes.object,\n        titleTemplate: PropTypes.string\n    }, _class.defaultProps = {\n        defer: true,\n        encodeSpecialCharacters: true\n    }, _class.peek = Component.peek, _class.rewind = function () {\n        var mappedState = Component.rewind();\n        if (!mappedState) {\n            // provide fallback if mappedState is undefined\n            mappedState = mapStateOnServer({\n                baseTag: [],\n                bodyAttributes: {},\n                encodeSpecialCharacters: true,\n                htmlAttributes: {},\n                linkTags: [],\n                metaTags: [],\n                noscriptTags: [],\n                scriptTags: [],\n                styleTags: [],\n                title: \"\",\n                titleAttributes: {}\n            });\n        }\n\n        return mappedState;\n    }, _temp;\n};\n\nvar NullComponent = function NullComponent() {\n    return null;\n};\n\nvar HelmetSideEffects = withSideEffect(reducePropsToState, handleClientStateChange, mapStateOnServer)(NullComponent);\n\nvar HelmetExport = Helmet(HelmetSideEffects);\nHelmetExport.renderStatic = HelmetExport.rewind;\n\nexport default HelmetExport;\nexport { HelmetExport as Helmet };\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nvar ReactPropTypesSecret = require('./lib/ReactPropTypesSecret');\n\nfunction emptyFunction() {}\nfunction emptyFunctionWithReset() {}\nemptyFunctionWithReset.resetWarningCache = emptyFunction;\n\nmodule.exports = function() {\n  function shim(props, propName, componentName, location, propFullName, secret) {\n    if (secret === ReactPropTypesSecret) {\n      // It is still safe when called from React.\n      return;\n    }\n    var err = new Error(\n      'Calling PropTypes validators directly is not supported by the `prop-types` package. ' +\n      'Use PropTypes.checkPropTypes() to call them. ' +\n      'Read more at http://fb.me/use-check-prop-types'\n    );\n    err.name = 'Invariant Violation';\n    throw err;\n  };\n  shim.isRequired = shim;\n  function getShim() {\n    return shim;\n  };\n  // Important!\n  // Keep this list in sync with production version in `./factoryWithTypeCheckers.js`.\n  var ReactPropTypes = {\n    array: shim,\n    bool: shim,\n    func: shim,\n    number: shim,\n    object: shim,\n    string: shim,\n    symbol: shim,\n\n    any: shim,\n    arrayOf: getShim,\n    element: shim,\n    elementType: shim,\n    instanceOf: getShim,\n    node: shim,\n    objectOf: getShim,\n    oneOf: getShim,\n    oneOfType: getShim,\n    shape: getShim,\n    exact: getShim,\n\n    checkPropTypes: emptyFunctionWithReset,\n    resetWarningCache: emptyFunction\n  };\n\n  ReactPropTypes.PropTypes = ReactPropTypes;\n\n  return ReactPropTypes;\n};\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nif (process.env.NODE_ENV !== 'production') {\n  var ReactIs = require('react-is');\n\n  // By explicitly using `prop-types` you are opting into new development behavior.\n  // http://fb.me/prop-types-in-prod\n  var throwOnDirectAccess = true;\n  module.exports = require('./factoryWithTypeCheckers')(ReactIs.isElement, throwOnDirectAccess);\n} else {\n  // By explicitly using `prop-types` you are opting into new production behavior.\n  // http://fb.me/prop-types-in-prod\n  module.exports = require('./factoryWithThrowingShims')();\n}\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nvar ReactPropTypesSecret = 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED';\n\nmodule.exports = ReactPropTypesSecret;\n","import hotjarLib from './src/react-hotjar';\n\nconst hj = (...params) => {\n\tif (!window.hj) {\n\t\tthrow new Error('Hotjar is not initialized');\n\t}\n\twindow.hj(...params);\n};\n\nexport const hotjar = {\n\tinitialize(id, sv) {\n\t\thotjarLib(id, sv);\n\t},\n\tinitialized() {\n\t\treturn typeof window !== 'undefined' && typeof window.hj === 'function';\n\t},\n\tidentify(userId, properties) {\n\t\thj('identify', userId, properties);\n\t},\n\tevent(event) {\n\t\thj('event', event);\n\t},\n\tstateChange(relativePath) {\n\t\thj('stateChange', relativePath);\n\t},\n};","module.exports = function(id, sv, debug=false) {\n\t(function(h, o, t, j, a, r) {\n\t\th.hj =\n\t\t\th.hj ||\n\t\t\tfunction() {\n\t\t\t\t(h.hj.q = h.hj.q || []).push(arguments);\n\t\t\t};\n\t\th._hjSettings = { hjid: id, hjsv: sv, hjDebug: debug };\n\t\th._scriptPath = t + h._hjSettings.hjid + j + h._hjSettings.hjsv;\n\t\tif(!document.querySelector(\n\t\t\t'script[src*=\"' + h._scriptPath + '\"]'\n\t\t)){\n\t\t\ta = o.getElementsByTagName('head')[0];\n\t\t\tr = o.createElement('script');\n\t\t\tr.async = 1;\n\t\t\tr.src = h._scriptPath;\n\t\t\ta.appendChild(r);\n\t\t}\n\t})(window, document, 'https://static.hotjar.com/c/hotjar-', '.js?sv=');\n};\n","/** @license React v16.13.1\n * react-is.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';var b=\"function\"===typeof Symbol&&Symbol.for,c=b?Symbol.for(\"react.element\"):60103,d=b?Symbol.for(\"react.portal\"):60106,e=b?Symbol.for(\"react.fragment\"):60107,f=b?Symbol.for(\"react.strict_mode\"):60108,g=b?Symbol.for(\"react.profiler\"):60114,h=b?Symbol.for(\"react.provider\"):60109,k=b?Symbol.for(\"react.context\"):60110,l=b?Symbol.for(\"react.async_mode\"):60111,m=b?Symbol.for(\"react.concurrent_mode\"):60111,n=b?Symbol.for(\"react.forward_ref\"):60112,p=b?Symbol.for(\"react.suspense\"):60113,q=b?\nSymbol.for(\"react.suspense_list\"):60120,r=b?Symbol.for(\"react.memo\"):60115,t=b?Symbol.for(\"react.lazy\"):60116,v=b?Symbol.for(\"react.block\"):60121,w=b?Symbol.for(\"react.fundamental\"):60117,x=b?Symbol.for(\"react.responder\"):60118,y=b?Symbol.for(\"react.scope\"):60119;\nfunction z(a){if(\"object\"===typeof a&&null!==a){var u=a.$$typeof;switch(u){case c:switch(a=a.type,a){case l:case m:case e:case g:case f:case p:return a;default:switch(a=a&&a.$$typeof,a){case k:case n:case t:case r:case h:return a;default:return u}}case d:return u}}}function A(a){return z(a)===m}exports.AsyncMode=l;exports.ConcurrentMode=m;exports.ContextConsumer=k;exports.ContextProvider=h;exports.Element=c;exports.ForwardRef=n;exports.Fragment=e;exports.Lazy=t;exports.Memo=r;exports.Portal=d;\nexports.Profiler=g;exports.StrictMode=f;exports.Suspense=p;exports.isAsyncMode=function(a){return A(a)||z(a)===l};exports.isConcurrentMode=A;exports.isContextConsumer=function(a){return z(a)===k};exports.isContextProvider=function(a){return z(a)===h};exports.isElement=function(a){return\"object\"===typeof a&&null!==a&&a.$$typeof===c};exports.isForwardRef=function(a){return z(a)===n};exports.isFragment=function(a){return z(a)===e};exports.isLazy=function(a){return z(a)===t};\nexports.isMemo=function(a){return z(a)===r};exports.isPortal=function(a){return z(a)===d};exports.isProfiler=function(a){return z(a)===g};exports.isStrictMode=function(a){return z(a)===f};exports.isSuspense=function(a){return z(a)===p};\nexports.isValidElementType=function(a){return\"string\"===typeof a||\"function\"===typeof a||a===e||a===m||a===g||a===f||a===p||a===q||\"object\"===typeof a&&null!==a&&(a.$$typeof===t||a.$$typeof===r||a.$$typeof===h||a.$$typeof===k||a.$$typeof===n||a.$$typeof===w||a.$$typeof===x||a.$$typeof===y||a.$$typeof===v)};exports.typeOf=z;\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n  module.exports = require('./cjs/react-is.production.min.js');\n} else {\n  module.exports = require('./cjs/react-is.development.js');\n}\n","'use strict';\n\n/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\n\n\n\n// A reserved attribute.\n// It is handled by React separately and shouldn't be written to the DOM.\nconst RESERVED = 0;\n\n// A simple string attribute.\n// Attributes that aren't in the filter are presumed to have this type.\nconst STRING = 1;\n\n// A string attribute that accepts booleans in React. In HTML, these are called\n// \"enumerated\" attributes with \"true\" and \"false\" as possible values.\n// When true, it should be set to a \"true\" string.\n// When false, it should be set to a \"false\" string.\nconst BOOLEANISH_STRING = 2;\n\n// A real boolean attribute.\n// When true, it should be present (set either to an empty string or its name).\n// When false, it should be omitted.\nconst BOOLEAN = 3;\n\n// An attribute that can be used as a flag as well as with a value.\n// When true, it should be present (set either to an empty string or its name).\n// When false, it should be omitted.\n// For any other value, should be present with that value.\nconst OVERLOADED_BOOLEAN = 4;\n\n// An attribute that must be numeric or parse as a numeric.\n// When falsy, it should be removed.\nconst NUMERIC = 5;\n\n// An attribute that must be positive numeric or parse as a positive numeric.\n// When falsy, it should be removed.\nconst POSITIVE_NUMERIC = 6;\n\nfunction getPropertyInfo(name) {\n  return properties.hasOwnProperty(name) ? properties[name] : null;\n}\n\nfunction PropertyInfoRecord(\n  name,\n  type,\n  mustUseProperty,\n  attributeName,\n  attributeNamespace,\n  sanitizeURL,\n  removeEmptyString,\n) {\n  this.acceptsBooleans =\n    type === BOOLEANISH_STRING ||\n    type === BOOLEAN ||\n    type === OVERLOADED_BOOLEAN;\n  this.attributeName = attributeName;\n  this.attributeNamespace = attributeNamespace;\n  this.mustUseProperty = mustUseProperty;\n  this.propertyName = name;\n  this.type = type;\n  this.sanitizeURL = sanitizeURL;\n  this.removeEmptyString = removeEmptyString;\n}\n\n// When adding attributes to this list, be sure to also add them to\n// the `possibleStandardNames` module to ensure casing and incorrect\n// name warnings.\nconst properties = {};\n\n// These props are reserved by React. They shouldn't be written to the DOM.\nconst reservedProps = [\n  'children',\n  'dangerouslySetInnerHTML',\n  // TODO: This prevents the assignment of defaultValue to regular\n  // elements (not just inputs). Now that ReactDOMInput assigns to the\n  // defaultValue property -- do we need this?\n  'defaultValue',\n  'defaultChecked',\n  'innerHTML',\n  'suppressContentEditableWarning',\n  'suppressHydrationWarning',\n  'style',\n];\n\nreservedProps.forEach(name => {\n  properties[name] = new PropertyInfoRecord(\n    name,\n    RESERVED,\n    false, // mustUseProperty\n    name, // attributeName\n    null, // attributeNamespace\n    false, // sanitizeURL\n    false, // removeEmptyString\n  );\n});\n\n// A few React string attributes have a different name.\n// This is a mapping from React prop names to the attribute names.\n[\n  ['acceptCharset', 'accept-charset'],\n  ['className', 'class'],\n  ['htmlFor', 'for'],\n  ['httpEquiv', 'http-equiv'],\n].forEach(([name, attributeName]) => {\n  properties[name] = new PropertyInfoRecord(\n    name,\n    STRING,\n    false, // mustUseProperty\n    attributeName, // attributeName\n    null, // attributeNamespace\n    false, // sanitizeURL\n    false, // removeEmptyString\n  );\n});\n\n// These are \"enumerated\" HTML attributes that accept \"true\" and \"false\".\n// In React, we let users pass `true` and `false` even though technically\n// these aren't boolean attributes (they are coerced to strings).\n['contentEditable', 'draggable', 'spellCheck', 'value'].forEach(name => {\n  properties[name] = new PropertyInfoRecord(\n    name,\n    BOOLEANISH_STRING,\n    false, // mustUseProperty\n    name.toLowerCase(), // attributeName\n    null, // attributeNamespace\n    false, // sanitizeURL\n    false, // removeEmptyString\n  );\n});\n\n// These are \"enumerated\" SVG attributes that accept \"true\" and \"false\".\n// In React, we let users pass `true` and `false` even though technically\n// these aren't boolean attributes (they are coerced to strings).\n// Since these are SVG attributes, their attribute names are case-sensitive.\n[\n  'autoReverse',\n  'externalResourcesRequired',\n  'focusable',\n  'preserveAlpha',\n].forEach(name => {\n  properties[name] = new PropertyInfoRecord(\n    name,\n    BOOLEANISH_STRING,\n    false, // mustUseProperty\n    name, // attributeName\n    null, // attributeNamespace\n    false, // sanitizeURL\n    false, // removeEmptyString\n  );\n});\n\n// These are HTML boolean attributes.\n[\n  'allowFullScreen',\n  'async',\n  // Note: there is a special case that prevents it from being written to the DOM\n  // on the client side because the browsers are inconsistent. Instead we call focus().\n  'autoFocus',\n  'autoPlay',\n  'controls',\n  'default',\n  'defer',\n  'disabled',\n  'disablePictureInPicture',\n  'disableRemotePlayback',\n  'formNoValidate',\n  'hidden',\n  'loop',\n  'noModule',\n  'noValidate',\n  'open',\n  'playsInline',\n  'readOnly',\n  'required',\n  'reversed',\n  'scoped',\n  'seamless',\n  // Microdata\n  'itemScope',\n].forEach(name => {\n  properties[name] = new PropertyInfoRecord(\n    name,\n    BOOLEAN,\n    false, // mustUseProperty\n    name.toLowerCase(), // attributeName\n    null, // attributeNamespace\n    false, // sanitizeURL\n    false, // removeEmptyString\n  );\n});\n\n// These are the few React props that we set as DOM properties\n// rather than attributes. These are all booleans.\n[\n  'checked',\n  // Note: `option.selected` is not updated if `select.multiple` is\n  // disabled with `removeAttribute`. We have special logic for handling this.\n  'multiple',\n  'muted',\n  'selected',\n\n  // NOTE: if you add a camelCased prop to this list,\n  // you'll need to set attributeName to name.toLowerCase()\n  // instead in the assignment below.\n].forEach(name => {\n  properties[name] = new PropertyInfoRecord(\n    name,\n    BOOLEAN,\n    true, // mustUseProperty\n    name, // attributeName\n    null, // attributeNamespace\n    false, // sanitizeURL\n    false, // removeEmptyString\n  );\n});\n\n// These are HTML attributes that are \"overloaded booleans\": they behave like\n// booleans, but can also accept a string value.\n[\n  'capture',\n  'download',\n\n  // NOTE: if you add a camelCased prop to this list,\n  // you'll need to set attributeName to name.toLowerCase()\n  // instead in the assignment below.\n].forEach(name => {\n  properties[name] = new PropertyInfoRecord(\n    name,\n    OVERLOADED_BOOLEAN,\n    false, // mustUseProperty\n    name, // attributeName\n    null, // attributeNamespace\n    false, // sanitizeURL\n    false, // removeEmptyString\n  );\n});\n\n// These are HTML attributes that must be positive numbers.\n[\n  'cols',\n  'rows',\n  'size',\n  'span',\n\n  // NOTE: if you add a camelCased prop to this list,\n  // you'll need to set attributeName to name.toLowerCase()\n  // instead in the assignment below.\n].forEach(name => {\n  properties[name] = new PropertyInfoRecord(\n    name,\n    POSITIVE_NUMERIC,\n    false, // mustUseProperty\n    name, // attributeName\n    null, // attributeNamespace\n    false, // sanitizeURL\n    false, // removeEmptyString\n  );\n});\n\n// These are HTML attributes that must be numbers.\n['rowSpan', 'start'].forEach(name => {\n  properties[name] = new PropertyInfoRecord(\n    name,\n    NUMERIC,\n    false, // mustUseProperty\n    name.toLowerCase(), // attributeName\n    null, // attributeNamespace\n    false, // sanitizeURL\n    false, // removeEmptyString\n  );\n});\n\nconst CAMELIZE = /[\\-\\:]([a-z])/g;\nconst capitalize = token => token[1].toUpperCase();\n\n// This is a list of all SVG attributes that need special casing, namespacing,\n// or boolean value assignment. Regular attributes that just accept strings\n// and have the same names are omitted, just like in the HTML attribute filter.\n// Some of these attributes can be hard to find. This list was created by\n// scraping the MDN documentation.\n[\n  'accent-height',\n  'alignment-baseline',\n  'arabic-form',\n  'baseline-shift',\n  'cap-height',\n  'clip-path',\n  'clip-rule',\n  'color-interpolation',\n  'color-interpolation-filters',\n  'color-profile',\n  'color-rendering',\n  'dominant-baseline',\n  'enable-background',\n  'fill-opacity',\n  'fill-rule',\n  'flood-color',\n  'flood-opacity',\n  'font-family',\n  'font-size',\n  'font-size-adjust',\n  'font-stretch',\n  'font-style',\n  'font-variant',\n  'font-weight',\n  'glyph-name',\n  'glyph-orientation-horizontal',\n  'glyph-orientation-vertical',\n  'horiz-adv-x',\n  'horiz-origin-x',\n  'image-rendering',\n  'letter-spacing',\n  'lighting-color',\n  'marker-end',\n  'marker-mid',\n  'marker-start',\n  'overline-position',\n  'overline-thickness',\n  'paint-order',\n  'panose-1',\n  'pointer-events',\n  'rendering-intent',\n  'shape-rendering',\n  'stop-color',\n  'stop-opacity',\n  'strikethrough-position',\n  'strikethrough-thickness',\n  'stroke-dasharray',\n  'stroke-dashoffset',\n  'stroke-linecap',\n  'stroke-linejoin',\n  'stroke-miterlimit',\n  'stroke-opacity',\n  'stroke-width',\n  'text-anchor',\n  'text-decoration',\n  'text-rendering',\n  'underline-position',\n  'underline-thickness',\n  'unicode-bidi',\n  'unicode-range',\n  'units-per-em',\n  'v-alphabetic',\n  'v-hanging',\n  'v-ideographic',\n  'v-mathematical',\n  'vector-effect',\n  'vert-adv-y',\n  'vert-origin-x',\n  'vert-origin-y',\n  'word-spacing',\n  'writing-mode',\n  'xmlns:xlink',\n  'x-height',\n\n  // NOTE: if you add a camelCased prop to this list,\n  // you'll need to set attributeName to name.toLowerCase()\n  // instead in the assignment below.\n].forEach(attributeName => {\n  const name = attributeName.replace(CAMELIZE, capitalize);\n  properties[name] = new PropertyInfoRecord(\n    name,\n    STRING,\n    false, // mustUseProperty\n    attributeName,\n    null, // attributeNamespace\n    false, // sanitizeURL\n    false, // removeEmptyString\n  );\n});\n\n// String SVG attributes with the xlink namespace.\n[\n  'xlink:actuate',\n  'xlink:arcrole',\n  'xlink:role',\n  'xlink:show',\n  'xlink:title',\n  'xlink:type',\n\n  // NOTE: if you add a camelCased prop to this list,\n  // you'll need to set attributeName to name.toLowerCase()\n  // instead in the assignment below.\n].forEach(attributeName => {\n  const name = attributeName.replace(CAMELIZE, capitalize);\n  properties[name] = new PropertyInfoRecord(\n    name,\n    STRING,\n    false, // mustUseProperty\n    attributeName,\n    'http://www.w3.org/1999/xlink',\n    false, // sanitizeURL\n    false, // removeEmptyString\n  );\n});\n\n// String SVG attributes with the xml namespace.\n[\n  'xml:base',\n  'xml:lang',\n  'xml:space',\n\n  // NOTE: if you add a camelCased prop to this list,\n  // you'll need to set attributeName to name.toLowerCase()\n  // instead in the assignment below.\n].forEach(attributeName => {\n  const name = attributeName.replace(CAMELIZE, capitalize);\n  properties[name] = new PropertyInfoRecord(\n    name,\n    STRING,\n    false, // mustUseProperty\n    attributeName,\n    'http://www.w3.org/XML/1998/namespace',\n    false, // sanitizeURL\n    false, // removeEmptyString\n  );\n});\n\n// These attribute exists both in HTML and SVG.\n// The attribute name is case-sensitive in SVG so we can't just use\n// the React name like we do for attributes that exist only in HTML.\n['tabIndex', 'crossOrigin'].forEach(attributeName => {\n  properties[attributeName] = new PropertyInfoRecord(\n    attributeName,\n    STRING,\n    false, // mustUseProperty\n    attributeName.toLowerCase(), // attributeName\n    null, // attributeNamespace\n    false, // sanitizeURL\n    false, // removeEmptyString\n  );\n});\n\n// These attributes accept URLs. These must not allow javascript: URLS.\n// These will also need to accept Trusted Types object in the future.\nconst xlinkHref = 'xlinkHref';\nproperties[xlinkHref] = new PropertyInfoRecord(\n  'xlinkHref',\n  STRING,\n  false, // mustUseProperty\n  'xlink:href',\n  'http://www.w3.org/1999/xlink',\n  true, // sanitizeURL\n  false, // removeEmptyString\n);\n\n['src', 'href', 'action', 'formAction'].forEach(attributeName => {\n  properties[attributeName] = new PropertyInfoRecord(\n    attributeName,\n    STRING,\n    false, // mustUseProperty\n    attributeName.toLowerCase(), // attributeName\n    null, // attributeNamespace\n    true, // sanitizeURL\n    true, // removeEmptyString\n  );\n});\n\n// \nconst {\n  CAMELCASE,\n  SAME,\n  possibleStandardNames: possibleStandardNamesOptimized\n} = require('../lib/possibleStandardNamesOptimized');\n\nconst ATTRIBUTE_NAME_START_CHAR =\n  ':A-Z_a-z\\\\u00C0-\\\\u00D6\\\\u00D8-\\\\u00F6\\\\u00F8-\\\\u02FF\\\\u0370-\\\\u037D\\\\u037F-\\\\u1FFF\\\\u200C-\\\\u200D\\\\u2070-\\\\u218F\\\\u2C00-\\\\u2FEF\\\\u3001-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFFD';\n\nconst ATTRIBUTE_NAME_CHAR =\n  ATTRIBUTE_NAME_START_CHAR + '\\\\-.0-9\\\\u00B7\\\\u0300-\\\\u036F\\\\u203F-\\\\u2040';\n\n/**\n * Checks whether a property name is a custom attribute.\n *\n * @see https://github.com/facebook/react/blob/15-stable/src/renderers/dom/shared/HTMLDOMPropertyConfig.js#L23-L25\n *\n * @type {(attribute: string) => boolean}\n */\nconst isCustomAttribute =\n  RegExp.prototype.test.bind(\n    // eslint-disable-next-line no-misleading-character-class\n    new RegExp('^(data|aria)-[' + ATTRIBUTE_NAME_CHAR + ']*$')\n  );\n\n/**\n * @type {Record<string, string>}\n */\nconst possibleStandardNames = Object.keys(\n  possibleStandardNamesOptimized\n).reduce((accumulator, standardName) => {\n  const propName = possibleStandardNamesOptimized[standardName];\n  if (propName === SAME) {\n    accumulator[standardName] = standardName;\n  } else if (propName === CAMELCASE) {\n    accumulator[standardName.toLowerCase()] = standardName;\n  } else {\n    accumulator[standardName] = propName;\n  }\n  return accumulator;\n}, {});\n\nexports.BOOLEAN = BOOLEAN;\nexports.BOOLEANISH_STRING = BOOLEANISH_STRING;\nexports.NUMERIC = NUMERIC;\nexports.OVERLOADED_BOOLEAN = OVERLOADED_BOOLEAN;\nexports.POSITIVE_NUMERIC = POSITIVE_NUMERIC;\nexports.RESERVED = RESERVED;\nexports.STRING = STRING;\nexports.getPropertyInfo = getPropertyInfo;\nexports.isCustomAttribute = isCustomAttribute;\nexports.possibleStandardNames = possibleStandardNames;\n","// An attribute in which the DOM/SVG standard name is the same as the React prop name (e.g., 'accept').\nvar SAME = 0;\nexports.SAME = SAME;\n\n// An attribute in which the React prop name is the camelcased version of the DOM/SVG standard name (e.g., 'acceptCharset').\nvar CAMELCASE = 1;\nexports.CAMELCASE = CAMELCASE;\n\nexports.possibleStandardNames = {\n  accept: 0,\n  acceptCharset: 1,\n  'accept-charset': 'acceptCharset',\n  accessKey: 1,\n  action: 0,\n  allowFullScreen: 1,\n  alt: 0,\n  as: 0,\n  async: 0,\n  autoCapitalize: 1,\n  autoComplete: 1,\n  autoCorrect: 1,\n  autoFocus: 1,\n  autoPlay: 1,\n  autoSave: 1,\n  capture: 0,\n  cellPadding: 1,\n  cellSpacing: 1,\n  challenge: 0,\n  charSet: 1,\n  checked: 0,\n  children: 0,\n  cite: 0,\n  class: 'className',\n  classID: 1,\n  className: 1,\n  cols: 0,\n  colSpan: 1,\n  content: 0,\n  contentEditable: 1,\n  contextMenu: 1,\n  controls: 0,\n  controlsList: 1,\n  coords: 0,\n  crossOrigin: 1,\n  dangerouslySetInnerHTML: 1,\n  data: 0,\n  dateTime: 1,\n  default: 0,\n  defaultChecked: 1,\n  defaultValue: 1,\n  defer: 0,\n  dir: 0,\n  disabled: 0,\n  disablePictureInPicture: 1,\n  disableRemotePlayback: 1,\n  download: 0,\n  draggable: 0,\n  encType: 1,\n  enterKeyHint: 1,\n  for: 'htmlFor',\n  form: 0,\n  formMethod: 1,\n  formAction: 1,\n  formEncType: 1,\n  formNoValidate: 1,\n  formTarget: 1,\n  frameBorder: 1,\n  headers: 0,\n  height: 0,\n  hidden: 0,\n  high: 0,\n  href: 0,\n  hrefLang: 1,\n  htmlFor: 1,\n  httpEquiv: 1,\n  'http-equiv': 'httpEquiv',\n  icon: 0,\n  id: 0,\n  innerHTML: 1,\n  inputMode: 1,\n  integrity: 0,\n  is: 0,\n  itemID: 1,\n  itemProp: 1,\n  itemRef: 1,\n  itemScope: 1,\n  itemType: 1,\n  keyParams: 1,\n  keyType: 1,\n  kind: 0,\n  label: 0,\n  lang: 0,\n  list: 0,\n  loop: 0,\n  low: 0,\n  manifest: 0,\n  marginWidth: 1,\n  marginHeight: 1,\n  max: 0,\n  maxLength: 1,\n  media: 0,\n  mediaGroup: 1,\n  method: 0,\n  min: 0,\n  minLength: 1,\n  multiple: 0,\n  muted: 0,\n  name: 0,\n  noModule: 1,\n  nonce: 0,\n  noValidate: 1,\n  open: 0,\n  optimum: 0,\n  pattern: 0,\n  placeholder: 0,\n  playsInline: 1,\n  poster: 0,\n  preload: 0,\n  profile: 0,\n  radioGroup: 1,\n  readOnly: 1,\n  referrerPolicy: 1,\n  rel: 0,\n  required: 0,\n  reversed: 0,\n  role: 0,\n  rows: 0,\n  rowSpan: 1,\n  sandbox: 0,\n  scope: 0,\n  scoped: 0,\n  scrolling: 0,\n  seamless: 0,\n  selected: 0,\n  shape: 0,\n  size: 0,\n  sizes: 0,\n  span: 0,\n  spellCheck: 1,\n  src: 0,\n  srcDoc: 1,\n  srcLang: 1,\n  srcSet: 1,\n  start: 0,\n  step: 0,\n  style: 0,\n  summary: 0,\n  tabIndex: 1,\n  target: 0,\n  title: 0,\n  type: 0,\n  useMap: 1,\n  value: 0,\n  width: 0,\n  wmode: 0,\n  wrap: 0,\n  about: 0,\n  accentHeight: 1,\n  'accent-height': 'accentHeight',\n  accumulate: 0,\n  additive: 0,\n  alignmentBaseline: 1,\n  'alignment-baseline': 'alignmentBaseline',\n  allowReorder: 1,\n  alphabetic: 0,\n  amplitude: 0,\n  arabicForm: 1,\n  'arabic-form': 'arabicForm',\n  ascent: 0,\n  attributeName: 1,\n  attributeType: 1,\n  autoReverse: 1,\n  azimuth: 0,\n  baseFrequency: 1,\n  baselineShift: 1,\n  'baseline-shift': 'baselineShift',\n  baseProfile: 1,\n  bbox: 0,\n  begin: 0,\n  bias: 0,\n  by: 0,\n  calcMode: 1,\n  capHeight: 1,\n  'cap-height': 'capHeight',\n  clip: 0,\n  clipPath: 1,\n  'clip-path': 'clipPath',\n  clipPathUnits: 1,\n  clipRule: 1,\n  'clip-rule': 'clipRule',\n  color: 0,\n  colorInterpolation: 1,\n  'color-interpolation': 'colorInterpolation',\n  colorInterpolationFilters: 1,\n  'color-interpolation-filters': 'colorInterpolationFilters',\n  colorProfile: 1,\n  'color-profile': 'colorProfile',\n  colorRendering: 1,\n  'color-rendering': 'colorRendering',\n  contentScriptType: 1,\n  contentStyleType: 1,\n  cursor: 0,\n  cx: 0,\n  cy: 0,\n  d: 0,\n  datatype: 0,\n  decelerate: 0,\n  descent: 0,\n  diffuseConstant: 1,\n  direction: 0,\n  display: 0,\n  divisor: 0,\n  dominantBaseline: 1,\n  'dominant-baseline': 'dominantBaseline',\n  dur: 0,\n  dx: 0,\n  dy: 0,\n  edgeMode: 1,\n  elevation: 0,\n  enableBackground: 1,\n  'enable-background': 'enableBackground',\n  end: 0,\n  exponent: 0,\n  externalResourcesRequired: 1,\n  fill: 0,\n  fillOpacity: 1,\n  'fill-opacity': 'fillOpacity',\n  fillRule: 1,\n  'fill-rule': 'fillRule',\n  filter: 0,\n  filterRes: 1,\n  filterUnits: 1,\n  floodOpacity: 1,\n  'flood-opacity': 'floodOpacity',\n  floodColor: 1,\n  'flood-color': 'floodColor',\n  focusable: 0,\n  fontFamily: 1,\n  'font-family': 'fontFamily',\n  fontSize: 1,\n  'font-size': 'fontSize',\n  fontSizeAdjust: 1,\n  'font-size-adjust': 'fontSizeAdjust',\n  fontStretch: 1,\n  'font-stretch': 'fontStretch',\n  fontStyle: 1,\n  'font-style': 'fontStyle',\n  fontVariant: 1,\n  'font-variant': 'fontVariant',\n  fontWeight: 1,\n  'font-weight': 'fontWeight',\n  format: 0,\n  from: 0,\n  fx: 0,\n  fy: 0,\n  g1: 0,\n  g2: 0,\n  glyphName: 1,\n  'glyph-name': 'glyphName',\n  glyphOrientationHorizontal: 1,\n  'glyph-orientation-horizontal': 'glyphOrientationHorizontal',\n  glyphOrientationVertical: 1,\n  'glyph-orientation-vertical': 'glyphOrientationVertical',\n  glyphRef: 1,\n  gradientTransform: 1,\n  gradientUnits: 1,\n  hanging: 0,\n  horizAdvX: 1,\n  'horiz-adv-x': 'horizAdvX',\n  horizOriginX: 1,\n  'horiz-origin-x': 'horizOriginX',\n  ideographic: 0,\n  imageRendering: 1,\n  'image-rendering': 'imageRendering',\n  in2: 0,\n  in: 0,\n  inlist: 0,\n  intercept: 0,\n  k1: 0,\n  k2: 0,\n  k3: 0,\n  k4: 0,\n  k: 0,\n  kernelMatrix: 1,\n  kernelUnitLength: 1,\n  kerning: 0,\n  keyPoints: 1,\n  keySplines: 1,\n  keyTimes: 1,\n  lengthAdjust: 1,\n  letterSpacing: 1,\n  'letter-spacing': 'letterSpacing',\n  lightingColor: 1,\n  'lighting-color': 'lightingColor',\n  limitingConeAngle: 1,\n  local: 0,\n  markerEnd: 1,\n  'marker-end': 'markerEnd',\n  markerHeight: 1,\n  markerMid: 1,\n  'marker-mid': 'markerMid',\n  markerStart: 1,\n  'marker-start': 'markerStart',\n  markerUnits: 1,\n  markerWidth: 1,\n  mask: 0,\n  maskContentUnits: 1,\n  maskUnits: 1,\n  mathematical: 0,\n  mode: 0,\n  numOctaves: 1,\n  offset: 0,\n  opacity: 0,\n  operator: 0,\n  order: 0,\n  orient: 0,\n  orientation: 0,\n  origin: 0,\n  overflow: 0,\n  overlinePosition: 1,\n  'overline-position': 'overlinePosition',\n  overlineThickness: 1,\n  'overline-thickness': 'overlineThickness',\n  paintOrder: 1,\n  'paint-order': 'paintOrder',\n  panose1: 0,\n  'panose-1': 'panose1',\n  pathLength: 1,\n  patternContentUnits: 1,\n  patternTransform: 1,\n  patternUnits: 1,\n  pointerEvents: 1,\n  'pointer-events': 'pointerEvents',\n  points: 0,\n  pointsAtX: 1,\n  pointsAtY: 1,\n  pointsAtZ: 1,\n  prefix: 0,\n  preserveAlpha: 1,\n  preserveAspectRatio: 1,\n  primitiveUnits: 1,\n  property: 0,\n  r: 0,\n  radius: 0,\n  refX: 1,\n  refY: 1,\n  renderingIntent: 1,\n  'rendering-intent': 'renderingIntent',\n  repeatCount: 1,\n  repeatDur: 1,\n  requiredExtensions: 1,\n  requiredFeatures: 1,\n  resource: 0,\n  restart: 0,\n  result: 0,\n  results: 0,\n  rotate: 0,\n  rx: 0,\n  ry: 0,\n  scale: 0,\n  security: 0,\n  seed: 0,\n  shapeRendering: 1,\n  'shape-rendering': 'shapeRendering',\n  slope: 0,\n  spacing: 0,\n  specularConstant: 1,\n  specularExponent: 1,\n  speed: 0,\n  spreadMethod: 1,\n  startOffset: 1,\n  stdDeviation: 1,\n  stemh: 0,\n  stemv: 0,\n  stitchTiles: 1,\n  stopColor: 1,\n  'stop-color': 'stopColor',\n  stopOpacity: 1,\n  'stop-opacity': 'stopOpacity',\n  strikethroughPosition: 1,\n  'strikethrough-position': 'strikethroughPosition',\n  strikethroughThickness: 1,\n  'strikethrough-thickness': 'strikethroughThickness',\n  string: 0,\n  stroke: 0,\n  strokeDasharray: 1,\n  'stroke-dasharray': 'strokeDasharray',\n  strokeDashoffset: 1,\n  'stroke-dashoffset': 'strokeDashoffset',\n  strokeLinecap: 1,\n  'stroke-linecap': 'strokeLinecap',\n  strokeLinejoin: 1,\n  'stroke-linejoin': 'strokeLinejoin',\n  strokeMiterlimit: 1,\n  'stroke-miterlimit': 'strokeMiterlimit',\n  strokeWidth: 1,\n  'stroke-width': 'strokeWidth',\n  strokeOpacity: 1,\n  'stroke-opacity': 'strokeOpacity',\n  suppressContentEditableWarning: 1,\n  suppressHydrationWarning: 1,\n  surfaceScale: 1,\n  systemLanguage: 1,\n  tableValues: 1,\n  targetX: 1,\n  targetY: 1,\n  textAnchor: 1,\n  'text-anchor': 'textAnchor',\n  textDecoration: 1,\n  'text-decoration': 'textDecoration',\n  textLength: 1,\n  textRendering: 1,\n  'text-rendering': 'textRendering',\n  to: 0,\n  transform: 0,\n  typeof: 0,\n  u1: 0,\n  u2: 0,\n  underlinePosition: 1,\n  'underline-position': 'underlinePosition',\n  underlineThickness: 1,\n  'underline-thickness': 'underlineThickness',\n  unicode: 0,\n  unicodeBidi: 1,\n  'unicode-bidi': 'unicodeBidi',\n  unicodeRange: 1,\n  'unicode-range': 'unicodeRange',\n  unitsPerEm: 1,\n  'units-per-em': 'unitsPerEm',\n  unselectable: 0,\n  vAlphabetic: 1,\n  'v-alphabetic': 'vAlphabetic',\n  values: 0,\n  vectorEffect: 1,\n  'vector-effect': 'vectorEffect',\n  version: 0,\n  vertAdvY: 1,\n  'vert-adv-y': 'vertAdvY',\n  vertOriginX: 1,\n  'vert-origin-x': 'vertOriginX',\n  vertOriginY: 1,\n  'vert-origin-y': 'vertOriginY',\n  vHanging: 1,\n  'v-hanging': 'vHanging',\n  vIdeographic: 1,\n  'v-ideographic': 'vIdeographic',\n  viewBox: 1,\n  viewTarget: 1,\n  visibility: 0,\n  vMathematical: 1,\n  'v-mathematical': 'vMathematical',\n  vocab: 0,\n  widths: 0,\n  wordSpacing: 1,\n  'word-spacing': 'wordSpacing',\n  writingMode: 1,\n  'writing-mode': 'writingMode',\n  x1: 0,\n  x2: 0,\n  x: 0,\n  xChannelSelector: 1,\n  xHeight: 1,\n  'x-height': 'xHeight',\n  xlinkActuate: 1,\n  'xlink:actuate': 'xlinkActuate',\n  xlinkArcrole: 1,\n  'xlink:arcrole': 'xlinkArcrole',\n  xlinkHref: 1,\n  'xlink:href': 'xlinkHref',\n  xlinkRole: 1,\n  'xlink:role': 'xlinkRole',\n  xlinkShow: 1,\n  'xlink:show': 'xlinkShow',\n  xlinkTitle: 1,\n  'xlink:title': 'xlinkTitle',\n  xlinkType: 1,\n  'xlink:type': 'xlinkType',\n  xmlBase: 1,\n  'xml:base': 'xmlBase',\n  xmlLang: 1,\n  'xml:lang': 'xmlLang',\n  xmlns: 0,\n  'xml:space': 'xmlSpace',\n  xmlnsXlink: 1,\n  'xmlns:xlink': 'xmlnsXlink',\n  xmlSpace: 1,\n  y1: 0,\n  y2: 0,\n  y: 0,\n  yChannelSelector: 1,\n  z: 0,\n  zoomAndPan: 1\n};\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _propTypes = require(\"prop-types\");\n\nvar _propTypes2 = _interopRequireDefault(_propTypes);\n\nvar _react = require(\"react\");\n\nvar _react2 = _interopRequireDefault(_react);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; }\n\nvar propTypes = {\n  bgColor: _propTypes2.default.oneOfType([_propTypes2.default.object, _propTypes2.default.string]).isRequired,\n  bgD: _propTypes2.default.string.isRequired,\n  fgColor: _propTypes2.default.oneOfType([_propTypes2.default.object, _propTypes2.default.string]).isRequired,\n  fgD: _propTypes2.default.string.isRequired,\n  size: _propTypes2.default.number.isRequired,\n  title: _propTypes2.default.string,\n  viewBoxSize: _propTypes2.default.number.isRequired,\n  xmlns: _propTypes2.default.string\n};\n\nvar defaultProps = {\n  title: undefined,\n  xmlns: \"http://www.w3.org/2000/svg\"\n};\n\nvar QRCodeSvg = (0, _react.forwardRef)(function (_ref, ref) {\n  var bgColor = _ref.bgColor,\n      bgD = _ref.bgD,\n      fgD = _ref.fgD,\n      fgColor = _ref.fgColor,\n      size = _ref.size,\n      title = _ref.title,\n      viewBoxSize = _ref.viewBoxSize,\n      props = _objectWithoutProperties(_ref, [\"bgColor\", \"bgD\", \"fgD\", \"fgColor\", \"size\", \"title\", \"viewBoxSize\"]);\n\n  return _react2.default.createElement(\n    \"svg\",\n    _extends({}, props, { height: size, ref: ref, viewBox: \"0 0 \" + viewBoxSize + \" \" + viewBoxSize, width: size }),\n    title ? _react2.default.createElement(\n      \"title\",\n      null,\n      title\n    ) : null,\n    _react2.default.createElement(\"path\", { d: bgD, fill: bgColor }),\n    _react2.default.createElement(\"path\", { d: fgD, fill: fgColor })\n  );\n});\n\nQRCodeSvg.displayName = \"QRCodeSvg\";\nQRCodeSvg.propTypes = propTypes;\nQRCodeSvg.defaultProps = defaultProps;\n\nexports.default = QRCodeSvg;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.QRCode = undefined;\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _QRCode = require(\"qr.js/lib/QRCode\");\n\nvar _QRCode2 = _interopRequireDefault(_QRCode);\n\nvar _ErrorCorrectLevel = require(\"qr.js/lib/ErrorCorrectLevel\");\n\nvar _ErrorCorrectLevel2 = _interopRequireDefault(_ErrorCorrectLevel);\n\nvar _propTypes = require(\"prop-types\");\n\nvar _propTypes2 = _interopRequireDefault(_propTypes);\n\nvar _react = require(\"react\");\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _QRCodeSvg = require(\"./QRCodeSvg\");\n\nvar _QRCodeSvg2 = _interopRequireDefault(_QRCodeSvg);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; } // A `qr.js` doesn't handle error level of zero (M) so we need to do it right, thus the deep require.\n\n\nvar propTypes = {\n  bgColor: _propTypes2.default.oneOfType([_propTypes2.default.object, _propTypes2.default.string]),\n  fgColor: _propTypes2.default.oneOfType([_propTypes2.default.object, _propTypes2.default.string]),\n  level: _propTypes2.default.string,\n  size: _propTypes2.default.number,\n  value: _propTypes2.default.string.isRequired\n};\n\nvar defaultProps = {\n  bgColor: \"#FFFFFF\",\n  fgColor: \"#000000\",\n  level: \"L\",\n  size: 256\n};\n\nvar QRCode = (0, _react.forwardRef)(function (_ref, ref) {\n  var bgColor = _ref.bgColor,\n      fgColor = _ref.fgColor,\n      level = _ref.level,\n      size = _ref.size,\n      value = _ref.value,\n      props = _objectWithoutProperties(_ref, [\"bgColor\", \"fgColor\", \"level\", \"size\", \"value\"]);\n\n  // Use type === -1 to automatically pick the best type.\n  var qrcode = new _QRCode2.default(-1, _ErrorCorrectLevel2.default[level]);\n  qrcode.addData(value);\n  qrcode.make();\n  var cells = qrcode.modules;\n  return _react2.default.createElement(_QRCodeSvg2.default, _extends({}, props, {\n    bgColor: bgColor,\n    bgD: cells.map(function (row, rowIndex) {\n      return row.map(function (cell, cellIndex) {\n        return !cell ? \"M \" + cellIndex + \" \" + rowIndex + \" l 1 0 0 1 -1 0 Z\" : \"\";\n      }).join(\" \");\n    }).join(\" \"),\n    fgColor: fgColor,\n    fgD: cells.map(function (row, rowIndex) {\n      return row.map(function (cell, cellIndex) {\n        return cell ? \"M \" + cellIndex + \" \" + rowIndex + \" l 1 0 0 1 -1 0 Z\" : \"\";\n      }).join(\" \");\n    }).join(\" \"),\n    ref: ref,\n    size: size,\n    viewBoxSize: cells.length\n  }));\n});\n\nexports.QRCode = QRCode;\nQRCode.displayName = \"QRCode\";\nQRCode.propTypes = propTypes;\nQRCode.defaultProps = defaultProps;\n\nexports.default = QRCode;","// Default to a dummy \"batch\" implementation that just runs the callback\nfunction defaultNoopBatch(callback) {\n  callback();\n}\n\nlet batch = defaultNoopBatch; // Allow injecting another batching function later\n\nexport const setBatch = newBatch => batch = newBatch; // Supply a getter just to skip dealing with ESM bindings\n\nexport const getBatch = () => batch;","import * as React from 'react';\nconst ContextKey = Symbol.for(`react-redux-context`);\nconst gT = typeof globalThis !== \"undefined\" ? globalThis :\n/* fall back to a per-module scope (pre-8.1 behaviour) if `globalThis` is not available */\n{};\n\nfunction getContext() {\n  var _gT$ContextKey;\n\n  if (!React.createContext) return {};\n  const contextMap = (_gT$ContextKey = gT[ContextKey]) != null ? _gT$ContextKey : gT[ContextKey] = new Map();\n  let realContext = contextMap.get(React.createContext);\n\n  if (!realContext) {\n    realContext = React.createContext(null);\n\n    if (process.env.NODE_ENV !== 'production') {\n      realContext.displayName = 'ReactRedux';\n    }\n\n    contextMap.set(React.createContext, realContext);\n  }\n\n  return realContext;\n}\n\nexport const ReactReduxContext = /*#__PURE__*/getContext();\nexport default ReactReduxContext;","import { useContext } from 'react';\nimport { ReactReduxContext } from '../components/Context';\n\n/**\r\n * Hook factory, which creates a `useReduxContext` hook bound to a given context. This is a low-level\r\n * hook that you should usually not need to call directly.\r\n *\r\n * @param {React.Context} [context=ReactReduxContext] Context passed to your `<Provider>`.\r\n * @returns {Function} A `useReduxContext` hook bound to the specified context.\r\n */\nexport function createReduxContextHook(context = ReactReduxContext) {\n  return function useReduxContext() {\n    const contextValue = useContext(context);\n\n    if (process.env.NODE_ENV !== 'production' && !contextValue) {\n      throw new Error('could not find react-redux context value; please ensure the component is wrapped in a <Provider>');\n    }\n\n    return contextValue;\n  };\n}\n/**\r\n * A hook to access the value of the `ReactReduxContext`. This is a low-level\r\n * hook that you should usually not need to call directly.\r\n *\r\n * @returns {any} the value of the `ReactReduxContext`\r\n *\r\n * @example\r\n *\r\n * import React from 'react'\r\n * import { useReduxContext } from 'react-redux'\r\n *\r\n * export const CounterComponent = () => {\r\n *   const { store } = useReduxContext()\r\n *   return <div>{store.getState()}</div>\r\n * }\r\n */\n\nexport const useReduxContext = /*#__PURE__*/createReduxContextHook();","import { useCallback, useDebugValue, useRef } from 'react';\nimport { createReduxContextHook, useReduxContext as useDefaultReduxContext } from './useReduxContext';\nimport { ReactReduxContext } from '../components/Context';\nimport { notInitialized } from '../utils/useSyncExternalStore';\nlet useSyncExternalStoreWithSelector = notInitialized;\nexport const initializeUseSelector = fn => {\n  useSyncExternalStoreWithSelector = fn;\n};\n\nconst refEquality = (a, b) => a === b;\n/**\r\n * Hook factory, which creates a `useSelector` hook bound to a given context.\r\n *\r\n * @param {React.Context} [context=ReactReduxContext] Context passed to your `<Provider>`.\r\n * @returns {Function} A `useSelector` hook bound to the specified context.\r\n */\n\n\nexport function createSelectorHook(context = ReactReduxContext) {\n  const useReduxContext = context === ReactReduxContext ? useDefaultReduxContext : createReduxContextHook(context);\n  return function useSelector(selector, equalityFnOrOptions = {}) {\n    const {\n      equalityFn = refEquality,\n      stabilityCheck = undefined,\n      noopCheck = undefined\n    } = typeof equalityFnOrOptions === 'function' ? {\n      equalityFn: equalityFnOrOptions\n    } : equalityFnOrOptions;\n\n    if (process.env.NODE_ENV !== 'production') {\n      if (!selector) {\n        throw new Error(`You must pass a selector to useSelector`);\n      }\n\n      if (typeof selector !== 'function') {\n        throw new Error(`You must pass a function as a selector to useSelector`);\n      }\n\n      if (typeof equalityFn !== 'function') {\n        throw new Error(`You must pass a function as an equality function to useSelector`);\n      }\n    }\n\n    const {\n      store,\n      subscription,\n      getServerState,\n      stabilityCheck: globalStabilityCheck,\n      noopCheck: globalNoopCheck\n    } = useReduxContext();\n    const firstRun = useRef(true);\n    const wrappedSelector = useCallback({\n      [selector.name](state) {\n        const selected = selector(state);\n\n        if (process.env.NODE_ENV !== 'production') {\n          const finalStabilityCheck = typeof stabilityCheck === 'undefined' ? globalStabilityCheck : stabilityCheck;\n\n          if (finalStabilityCheck === 'always' || finalStabilityCheck === 'once' && firstRun.current) {\n            const toCompare = selector(state);\n\n            if (!equalityFn(selected, toCompare)) {\n              let stack = undefined;\n\n              try {\n                throw new Error();\n              } catch (e) {\n                ;\n                ({\n                  stack\n                } = e);\n              }\n\n              console.warn('Selector ' + (selector.name || 'unknown') + ' returned a different result when called with the same parameters. This can lead to unnecessary rerenders.' + '\\nSelectors that return a new reference (such as an object or an array) should be memoized: https://redux.js.org/usage/deriving-data-selectors#optimizing-selectors-with-memoization', {\n                state,\n                selected,\n                selected2: toCompare,\n                stack\n              });\n            }\n          }\n\n          const finalNoopCheck = typeof noopCheck === 'undefined' ? globalNoopCheck : noopCheck;\n\n          if (finalNoopCheck === 'always' || finalNoopCheck === 'once' && firstRun.current) {\n            // @ts-ignore\n            if (selected === state) {\n              let stack = undefined;\n\n              try {\n                throw new Error();\n              } catch (e) {\n                ;\n                ({\n                  stack\n                } = e);\n              }\n\n              console.warn('Selector ' + (selector.name || 'unknown') + ' returned the root state when called. This can lead to unnecessary rerenders.' + '\\nSelectors that return the entire state are almost certainly a mistake, as they will cause a rerender whenever *anything* in state changes.', {\n                stack\n              });\n            }\n          }\n\n          if (firstRun.current) firstRun.current = false;\n        }\n\n        return selected;\n      }\n\n    }[selector.name], [selector, globalStabilityCheck, stabilityCheck]);\n    const selectedState = useSyncExternalStoreWithSelector(subscription.addNestedSub, store.getState, getServerState || store.getState, wrappedSelector, equalityFn);\n    useDebugValue(selectedState);\n    return selectedState;\n  };\n}\n/**\r\n * A hook to access the redux store's state. This hook takes a selector function\r\n * as an argument. The selector is called with the store state.\r\n *\r\n * This hook takes an optional equality comparison function as the second parameter\r\n * that allows you to customize the way the selected state is compared to determine\r\n * whether the component needs to be re-rendered.\r\n *\r\n * @param {Function} selector the selector function\r\n * @param {Function=} equalityFn the function that will be used to determine equality\r\n *\r\n * @returns {any} the selected state\r\n *\r\n * @example\r\n *\r\n * import React from 'react'\r\n * import { useSelector } from 'react-redux'\r\n *\r\n * export const CounterComponent = () => {\r\n *   const counter = useSelector(state => state.counter)\r\n *   return <div>{counter}</div>\r\n * }\r\n */\n\nexport const useSelector = /*#__PURE__*/createSelectorHook();","export default function _extends() {\n  _extends = Object.assign || function (target) {\n    for (var i = 1; i < arguments.length; i++) {\n      var source = arguments[i];\n\n      for (var key in source) {\n        if (Object.prototype.hasOwnProperty.call(source, key)) {\n          target[key] = source[key];\n        }\n      }\n    }\n\n    return target;\n  };\n\n  return _extends.apply(this, arguments);\n}","export default function _objectWithoutPropertiesLoose(source, excluded) {\n  if (source == null) return {};\n  var target = {};\n  var sourceKeys = Object.keys(source);\n  var key, i;\n\n  for (i = 0; i < sourceKeys.length; i++) {\n    key = sourceKeys[i];\n    if (excluded.indexOf(key) >= 0) continue;\n    target[key] = source[key];\n  }\n\n  return target;\n}","import _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nconst _excluded = [\"initMapStateToProps\", \"initMapDispatchToProps\", \"initMergeProps\"];\nimport verifySubselectors from './verifySubselectors';\nexport function pureFinalPropsSelectorFactory(mapStateToProps, mapDispatchToProps, mergeProps, dispatch, {\n  areStatesEqual,\n  areOwnPropsEqual,\n  areStatePropsEqual\n}) {\n  let hasRunAtLeastOnce = false;\n  let state;\n  let ownProps;\n  let stateProps;\n  let dispatchProps;\n  let mergedProps;\n\n  function handleFirstCall(firstState, firstOwnProps) {\n    state = firstState;\n    ownProps = firstOwnProps;\n    stateProps = mapStateToProps(state, ownProps);\n    dispatchProps = mapDispatchToProps(dispatch, ownProps);\n    mergedProps = mergeProps(stateProps, dispatchProps, ownProps);\n    hasRunAtLeastOnce = true;\n    return mergedProps;\n  }\n\n  function handleNewPropsAndNewState() {\n    stateProps = mapStateToProps(state, ownProps);\n    if (mapDispatchToProps.dependsOnOwnProps) dispatchProps = mapDispatchToProps(dispatch, ownProps);\n    mergedProps = mergeProps(stateProps, dispatchProps, ownProps);\n    return mergedProps;\n  }\n\n  function handleNewProps() {\n    if (mapStateToProps.dependsOnOwnProps) stateProps = mapStateToProps(state, ownProps);\n    if (mapDispatchToProps.dependsOnOwnProps) dispatchProps = mapDispatchToProps(dispatch, ownProps);\n    mergedProps = mergeProps(stateProps, dispatchProps, ownProps);\n    return mergedProps;\n  }\n\n  function handleNewState() {\n    const nextStateProps = mapStateToProps(state, ownProps);\n    const statePropsChanged = !areStatePropsEqual(nextStateProps, stateProps);\n    stateProps = nextStateProps;\n    if (statePropsChanged) mergedProps = mergeProps(stateProps, dispatchProps, ownProps);\n    return mergedProps;\n  }\n\n  function handleSubsequentCalls(nextState, nextOwnProps) {\n    const propsChanged = !areOwnPropsEqual(nextOwnProps, ownProps);\n    const stateChanged = !areStatesEqual(nextState, state, nextOwnProps, ownProps);\n    state = nextState;\n    ownProps = nextOwnProps;\n    if (propsChanged && stateChanged) return handleNewPropsAndNewState();\n    if (propsChanged) return handleNewProps();\n    if (stateChanged) return handleNewState();\n    return mergedProps;\n  }\n\n  return function pureFinalPropsSelector(nextState, nextOwnProps) {\n    return hasRunAtLeastOnce ? handleSubsequentCalls(nextState, nextOwnProps) : handleFirstCall(nextState, nextOwnProps);\n  };\n}\n// TODO: Add more comments\n// The selector returned by selectorFactory will memoize its results,\n// allowing connect's shouldComponentUpdate to return false if final\n// props have not changed.\nexport default function finalPropsSelectorFactory(dispatch, _ref) {\n  let {\n    initMapStateToProps,\n    initMapDispatchToProps,\n    initMergeProps\n  } = _ref,\n      options = _objectWithoutPropertiesLoose(_ref, _excluded);\n\n  const mapStateToProps = initMapStateToProps(dispatch, options);\n  const mapDispatchToProps = initMapDispatchToProps(dispatch, options);\n  const mergeProps = initMergeProps(dispatch, options);\n\n  if (process.env.NODE_ENV !== 'production') {\n    verifySubselectors(mapStateToProps, mapDispatchToProps, mergeProps);\n  }\n\n  return pureFinalPropsSelectorFactory(mapStateToProps, mapDispatchToProps, mergeProps, dispatch, options);\n}","import verifyPlainObject from '../utils/verifyPlainObject';\nexport function wrapMapToPropsConstant( // * Note:\n//  It seems that the dispatch argument\n//  could be a dispatch function in some cases (ex: whenMapDispatchToPropsIsMissing)\n//  and a state object in some others (ex: whenMapStateToPropsIsMissing)\n// eslint-disable-next-line no-unused-vars\ngetConstant) {\n  return function initConstantSelector(dispatch) {\n    const constant = getConstant(dispatch);\n\n    function constantSelector() {\n      return constant;\n    }\n\n    constantSelector.dependsOnOwnProps = false;\n    return constantSelector;\n  };\n} // dependsOnOwnProps is used by createMapToPropsProxy to determine whether to pass props as args\n// to the mapToProps function being wrapped. It is also used by makePurePropsSelector to determine\n// whether mapToProps needs to be invoked when props have changed.\n//\n// A length of one signals that mapToProps does not depend on props from the parent component.\n// A length of zero is assumed to mean mapToProps is getting args via arguments or ...args and\n// therefore not reporting its length accurately..\n// TODO Can this get pulled out so that we can subscribe directly to the store if we don't need ownProps?\n\nexport function getDependsOnOwnProps(mapToProps) {\n  return mapToProps.dependsOnOwnProps ? Boolean(mapToProps.dependsOnOwnProps) : mapToProps.length !== 1;\n} // Used by whenMapStateToPropsIsFunction and whenMapDispatchToPropsIsFunction,\n// this function wraps mapToProps in a proxy function which does several things:\n//\n//  * Detects whether the mapToProps function being called depends on props, which\n//    is used by selectorFactory to decide if it should reinvoke on props changes.\n//\n//  * On first call, handles mapToProps if returns another function, and treats that\n//    new function as the true mapToProps for subsequent calls.\n//\n//  * On first call, verifies the first result is a plain object, in order to warn\n//    the developer that their mapToProps function is not returning a valid result.\n//\n\nexport function wrapMapToPropsFunc(mapToProps, methodName) {\n  return function initProxySelector(dispatch, {\n    displayName\n  }) {\n    const proxy = function mapToPropsProxy(stateOrDispatch, ownProps) {\n      return proxy.dependsOnOwnProps ? proxy.mapToProps(stateOrDispatch, ownProps) : proxy.mapToProps(stateOrDispatch, undefined);\n    }; // allow detectFactoryAndVerify to get ownProps\n\n\n    proxy.dependsOnOwnProps = true;\n\n    proxy.mapToProps = function detectFactoryAndVerify(stateOrDispatch, ownProps) {\n      proxy.mapToProps = mapToProps;\n      proxy.dependsOnOwnProps = getDependsOnOwnProps(mapToProps);\n      let props = proxy(stateOrDispatch, ownProps);\n\n      if (typeof props === 'function') {\n        proxy.mapToProps = props;\n        proxy.dependsOnOwnProps = getDependsOnOwnProps(props);\n        props = proxy(stateOrDispatch, ownProps);\n      }\n\n      if (process.env.NODE_ENV !== 'production') verifyPlainObject(props, displayName, methodName);\n      return props;\n    };\n\n    return proxy;\n  };\n}","export function createInvalidArgFactory(arg, name) {\n  return (dispatch, options) => {\n    throw new Error(`Invalid value of type ${typeof arg} for ${name} argument when connecting component ${options.wrappedComponentName}.`);\n  };\n}","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport verifyPlainObject from '../utils/verifyPlainObject';\nimport { createInvalidArgFactory } from './invalidArgFactory';\nexport function defaultMergeProps(stateProps, dispatchProps, ownProps) {\n  // @ts-ignore\n  return _extends({}, ownProps, stateProps, dispatchProps);\n}\nexport function wrapMergePropsFunc(mergeProps) {\n  return function initMergePropsProxy(dispatch, {\n    displayName,\n    areMergedPropsEqual\n  }) {\n    let hasRunOnce = false;\n    let mergedProps;\n    return function mergePropsProxy(stateProps, dispatchProps, ownProps) {\n      const nextMergedProps = mergeProps(stateProps, dispatchProps, ownProps);\n\n      if (hasRunOnce) {\n        if (!areMergedPropsEqual(nextMergedProps, mergedProps)) mergedProps = nextMergedProps;\n      } else {\n        hasRunOnce = true;\n        mergedProps = nextMergedProps;\n        if (process.env.NODE_ENV !== 'production') verifyPlainObject(mergedProps, displayName, 'mergeProps');\n      }\n\n      return mergedProps;\n    };\n  };\n}\nexport function mergePropsFactory(mergeProps) {\n  return !mergeProps ? () => defaultMergeProps : typeof mergeProps === 'function' ? wrapMergePropsFunc(mergeProps) : createInvalidArgFactory(mergeProps, 'mergeProps');\n}","import { getBatch } from './batch'; // encapsulates the subscription logic for connecting a component to the redux store, as\n// well as nesting subscriptions of descendant components, so that we can ensure the\n// ancestor components re-render before descendants\n\nfunction createListenerCollection() {\n  const batch = getBatch();\n  let first = null;\n  let last = null;\n  return {\n    clear() {\n      first = null;\n      last = null;\n    },\n\n    notify() {\n      batch(() => {\n        let listener = first;\n\n        while (listener) {\n          listener.callback();\n          listener = listener.next;\n        }\n      });\n    },\n\n    get() {\n      let listeners = [];\n      let listener = first;\n\n      while (listener) {\n        listeners.push(listener);\n        listener = listener.next;\n      }\n\n      return listeners;\n    },\n\n    subscribe(callback) {\n      let isSubscribed = true;\n      let listener = last = {\n        callback,\n        next: null,\n        prev: last\n      };\n\n      if (listener.prev) {\n        listener.prev.next = listener;\n      } else {\n        first = listener;\n      }\n\n      return function unsubscribe() {\n        if (!isSubscribed || first === null) return;\n        isSubscribed = false;\n\n        if (listener.next) {\n          listener.next.prev = listener.prev;\n        } else {\n          last = listener.prev;\n        }\n\n        if (listener.prev) {\n          listener.prev.next = listener.next;\n        } else {\n          first = listener.next;\n        }\n      };\n    }\n\n  };\n}\n\nconst nullListeners = {\n  notify() {},\n\n  get: () => []\n};\nexport function createSubscription(store, parentSub) {\n  let unsubscribe;\n  let listeners = nullListeners; // Reasons to keep the subscription active\n\n  let subscriptionsAmount = 0; // Is this specific subscription subscribed (or only nested ones?)\n\n  let selfSubscribed = false;\n\n  function addNestedSub(listener) {\n    trySubscribe();\n    const cleanupListener = listeners.subscribe(listener); // cleanup nested sub\n\n    let removed = false;\n    return () => {\n      if (!removed) {\n        removed = true;\n        cleanupListener();\n        tryUnsubscribe();\n      }\n    };\n  }\n\n  function notifyNestedSubs() {\n    listeners.notify();\n  }\n\n  function handleChangeWrapper() {\n    if (subscription.onStateChange) {\n      subscription.onStateChange();\n    }\n  }\n\n  function isSubscribed() {\n    return selfSubscribed;\n  }\n\n  function trySubscribe() {\n    subscriptionsAmount++;\n\n    if (!unsubscribe) {\n      unsubscribe = parentSub ? parentSub.addNestedSub(handleChangeWrapper) : store.subscribe(handleChangeWrapper);\n      listeners = createListenerCollection();\n    }\n  }\n\n  function tryUnsubscribe() {\n    subscriptionsAmount--;\n\n    if (unsubscribe && subscriptionsAmount === 0) {\n      unsubscribe();\n      unsubscribe = undefined;\n      listeners.clear();\n      listeners = nullListeners;\n    }\n  }\n\n  function trySubscribeSelf() {\n    if (!selfSubscribed) {\n      selfSubscribed = true;\n      trySubscribe();\n    }\n  }\n\n  function tryUnsubscribeSelf() {\n    if (selfSubscribed) {\n      selfSubscribed = false;\n      tryUnsubscribe();\n    }\n  }\n\n  const subscription = {\n    addNestedSub,\n    notifyNestedSubs,\n    handleChangeWrapper,\n    isSubscribed,\n    trySubscribe: trySubscribeSelf,\n    tryUnsubscribe: tryUnsubscribeSelf,\n    getListeners: () => listeners\n  };\n  return subscription;\n}","import * as React from 'react'; // React currently throws a warning when using useLayoutEffect on the server.\n// To get around it, we can conditionally useEffect on the server (no-op) and\n// useLayoutEffect in the browser. We need useLayoutEffect to ensure the store\n// subscription callback always has the selector from the latest render commit\n// available, otherwise a store update may happen between render and the effect,\n// which may cause missed updates; we also must ensure the store subscription\n// is created synchronously, otherwise a store update may occur before the\n// subscription is created and an inconsistent state may be observed\n// Matches logic in React's `shared/ExecutionEnvironment` file\n\nexport const canUseDOM = !!(typeof window !== 'undefined' && typeof window.document !== 'undefined' && typeof window.document.createElement !== 'undefined');\nexport const useIsomorphicLayoutEffect = canUseDOM ? React.useLayoutEffect : React.useEffect;","function is(x, y) {\n  if (x === y) {\n    return x !== 0 || y !== 0 || 1 / x === 1 / y;\n  } else {\n    return x !== x && y !== y;\n  }\n}\n\nexport default function shallowEqual(objA, objB) {\n  if (is(objA, objB)) return true;\n\n  if (typeof objA !== 'object' || objA === null || typeof objB !== 'object' || objB === null) {\n    return false;\n  }\n\n  const keysA = Object.keys(objA);\n  const keysB = Object.keys(objB);\n  if (keysA.length !== keysB.length) return false;\n\n  for (let i = 0; i < keysA.length; i++) {\n    if (!Object.prototype.hasOwnProperty.call(objB, keysA[i]) || !is(objA[keysA[i]], objB[keysA[i]])) {\n      return false;\n    }\n  }\n\n  return true;\n}","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nconst _excluded = [\"reactReduxForwardedRef\"];\n\n/* eslint-disable valid-jsdoc, @typescript-eslint/no-unused-vars */\nimport hoistStatics from 'hoist-non-react-statics';\nimport * as React from 'react';\nimport { isValidElementType, isContextConsumer } from 'react-is';\nimport defaultSelectorFactory from '../connect/selectorFactory';\nimport { mapDispatchToPropsFactory } from '../connect/mapDispatchToProps';\nimport { mapStateToPropsFactory } from '../connect/mapStateToProps';\nimport { mergePropsFactory } from '../connect/mergeProps';\nimport { createSubscription } from '../utils/Subscription';\nimport { useIsomorphicLayoutEffect } from '../utils/useIsomorphicLayoutEffect';\nimport shallowEqual from '../utils/shallowEqual';\nimport warning from '../utils/warning';\nimport { ReactReduxContext } from './Context';\nimport { notInitialized } from '../utils/useSyncExternalStore';\nlet useSyncExternalStore = notInitialized;\nexport const initializeConnect = fn => {\n  useSyncExternalStore = fn;\n}; // Define some constant arrays just to avoid re-creating these\n\nconst EMPTY_ARRAY = [null, 0];\nconst NO_SUBSCRIPTION_ARRAY = [null, null]; // Attempts to stringify whatever not-really-a-component value we were given\n// for logging in an error message\n\nconst stringifyComponent = Comp => {\n  try {\n    return JSON.stringify(Comp);\n  } catch (err) {\n    return String(Comp);\n  }\n};\n\n// This is \"just\" a `useLayoutEffect`, but with two modifications:\n// - we need to fall back to `useEffect` in SSR to avoid annoying warnings\n// - we extract this to a separate function to avoid closing over values\n//   and causing memory leaks\nfunction useIsomorphicLayoutEffectWithArgs(effectFunc, effectArgs, dependencies) {\n  useIsomorphicLayoutEffect(() => effectFunc(...effectArgs), dependencies);\n} // Effect callback, extracted: assign the latest props values to refs for later usage\n\n\nfunction captureWrapperProps(lastWrapperProps, lastChildProps, renderIsScheduled, wrapperProps, // actualChildProps: unknown,\nchildPropsFromStoreUpdate, notifyNestedSubs) {\n  // We want to capture the wrapper props and child props we used for later comparisons\n  lastWrapperProps.current = wrapperProps;\n  renderIsScheduled.current = false; // If the render was from a store update, clear out that reference and cascade the subscriber update\n\n  if (childPropsFromStoreUpdate.current) {\n    childPropsFromStoreUpdate.current = null;\n    notifyNestedSubs();\n  }\n} // Effect callback, extracted: subscribe to the Redux store or nearest connected ancestor,\n// check for updates after dispatched actions, and trigger re-renders.\n\n\nfunction subscribeUpdates(shouldHandleStateChanges, store, subscription, childPropsSelector, lastWrapperProps, lastChildProps, renderIsScheduled, isMounted, childPropsFromStoreUpdate, notifyNestedSubs, // forceComponentUpdateDispatch: React.Dispatch<any>,\nadditionalSubscribeListener) {\n  // If we're not subscribed to the store, nothing to do here\n  if (!shouldHandleStateChanges) return () => {}; // Capture values for checking if and when this component unmounts\n\n  let didUnsubscribe = false;\n  let lastThrownError = null; // We'll run this callback every time a store subscription update propagates to this component\n\n  const checkForUpdates = () => {\n    if (didUnsubscribe || !isMounted.current) {\n      // Don't run stale listeners.\n      // Redux doesn't guarantee unsubscriptions happen until next dispatch.\n      return;\n    } // TODO We're currently calling getState ourselves here, rather than letting `uSES` do it\n\n\n    const latestStoreState = store.getState();\n    let newChildProps, error;\n\n    try {\n      // Actually run the selector with the most recent store state and wrapper props\n      // to determine what the child props should be\n      newChildProps = childPropsSelector(latestStoreState, lastWrapperProps.current);\n    } catch (e) {\n      error = e;\n      lastThrownError = e;\n    }\n\n    if (!error) {\n      lastThrownError = null;\n    } // If the child props haven't changed, nothing to do here - cascade the subscription update\n\n\n    if (newChildProps === lastChildProps.current) {\n      if (!renderIsScheduled.current) {\n        notifyNestedSubs();\n      }\n    } else {\n      // Save references to the new child props.  Note that we track the \"child props from store update\"\n      // as a ref instead of a useState/useReducer because we need a way to determine if that value has\n      // been processed.  If this went into useState/useReducer, we couldn't clear out the value without\n      // forcing another re-render, which we don't want.\n      lastChildProps.current = newChildProps;\n      childPropsFromStoreUpdate.current = newChildProps;\n      renderIsScheduled.current = true; // TODO This is hacky and not how `uSES` is meant to be used\n      // Trigger the React `useSyncExternalStore` subscriber\n\n      additionalSubscribeListener();\n    }\n  }; // Actually subscribe to the nearest connected ancestor (or store)\n\n\n  subscription.onStateChange = checkForUpdates;\n  subscription.trySubscribe(); // Pull data from the store after first render in case the store has\n  // changed since we began.\n\n  checkForUpdates();\n\n  const unsubscribeWrapper = () => {\n    didUnsubscribe = true;\n    subscription.tryUnsubscribe();\n    subscription.onStateChange = null;\n\n    if (lastThrownError) {\n      // It's possible that we caught an error due to a bad mapState function, but the\n      // parent re-rendered without this component and we're about to unmount.\n      // This shouldn't happen as long as we do top-down subscriptions correctly, but\n      // if we ever do those wrong, this throw will surface the error in our tests.\n      // In that case, throw the error from here so it doesn't get lost.\n      throw lastThrownError;\n    }\n  };\n\n  return unsubscribeWrapper;\n} // Reducer initial state creation for our update reducer\n\n\nconst initStateUpdates = () => EMPTY_ARRAY;\n\nfunction strictEqual(a, b) {\n  return a === b;\n}\n/**\r\n * Infers the type of props that a connector will inject into a component.\r\n */\n\n\nlet hasWarnedAboutDeprecatedPureOption = false;\n/**\r\n * Connects a React component to a Redux store.\r\n *\r\n * - Without arguments, just wraps the component, without changing the behavior / props\r\n *\r\n * - If 2 params are passed (3rd param, mergeProps, is skipped), default behavior\r\n * is to override ownProps (as stated in the docs), so what remains is everything that's\r\n * not a state or dispatch prop\r\n *\r\n * - When 3rd param is passed, we don't know if ownProps propagate and whether they\r\n * should be valid component props, because it depends on mergeProps implementation.\r\n * As such, it is the user's responsibility to extend ownProps interface from state or\r\n * dispatch props or both when applicable\r\n *\r\n * @param mapStateToProps A function that extracts values from state\r\n * @param mapDispatchToProps Setup for dispatching actions\r\n * @param mergeProps Optional callback to merge state and dispatch props together\r\n * @param options Options for configuring the connection\r\n *\r\n */\n\nfunction connect(mapStateToProps, mapDispatchToProps, mergeProps, {\n  // The `pure` option has been removed, so TS doesn't like us destructuring this to check its existence.\n  // @ts-ignore\n  pure,\n  areStatesEqual = strictEqual,\n  areOwnPropsEqual = shallowEqual,\n  areStatePropsEqual = shallowEqual,\n  areMergedPropsEqual = shallowEqual,\n  // use React's forwardRef to expose a ref of the wrapped component\n  forwardRef = false,\n  // the context consumer to use\n  context = ReactReduxContext\n} = {}) {\n  if (process.env.NODE_ENV !== 'production') {\n    if (pure !== undefined && !hasWarnedAboutDeprecatedPureOption) {\n      hasWarnedAboutDeprecatedPureOption = true;\n      warning('The `pure` option has been removed. `connect` is now always a \"pure/memoized\" component');\n    }\n  }\n\n  const Context = context;\n  const initMapStateToProps = mapStateToPropsFactory(mapStateToProps);\n  const initMapDispatchToProps = mapDispatchToPropsFactory(mapDispatchToProps);\n  const initMergeProps = mergePropsFactory(mergeProps);\n  const shouldHandleStateChanges = Boolean(mapStateToProps);\n\n  const wrapWithConnect = WrappedComponent => {\n    if (process.env.NODE_ENV !== 'production' && !isValidElementType(WrappedComponent)) {\n      throw new Error(`You must pass a component to the function returned by connect. Instead received ${stringifyComponent(WrappedComponent)}`);\n    }\n\n    const wrappedComponentName = WrappedComponent.displayName || WrappedComponent.name || 'Component';\n    const displayName = `Connect(${wrappedComponentName})`;\n    const selectorFactoryOptions = {\n      shouldHandleStateChanges,\n      displayName,\n      wrappedComponentName,\n      WrappedComponent,\n      // @ts-ignore\n      initMapStateToProps,\n      // @ts-ignore\n      initMapDispatchToProps,\n      initMergeProps,\n      areStatesEqual,\n      areStatePropsEqual,\n      areOwnPropsEqual,\n      areMergedPropsEqual\n    };\n\n    function ConnectFunction(props) {\n      const [propsContext, reactReduxForwardedRef, wrapperProps] = React.useMemo(() => {\n        // Distinguish between actual \"data\" props that were passed to the wrapper component,\n        // and values needed to control behavior (forwarded refs, alternate context instances).\n        // To maintain the wrapperProps object reference, memoize this destructuring.\n        const {\n          reactReduxForwardedRef\n        } = props,\n              wrapperProps = _objectWithoutPropertiesLoose(props, _excluded);\n\n        return [props.context, reactReduxForwardedRef, wrapperProps];\n      }, [props]);\n      const ContextToUse = React.useMemo(() => {\n        // Users may optionally pass in a custom context instance to use instead of our ReactReduxContext.\n        // Memoize the check that determines which context instance we should use.\n        return propsContext && propsContext.Consumer && // @ts-ignore\n        isContextConsumer( /*#__PURE__*/React.createElement(propsContext.Consumer, null)) ? propsContext : Context;\n      }, [propsContext, Context]); // Retrieve the store and ancestor subscription via context, if available\n\n      const contextValue = React.useContext(ContextToUse); // The store _must_ exist as either a prop or in context.\n      // We'll check to see if it _looks_ like a Redux store first.\n      // This allows us to pass through a `store` prop that is just a plain value.\n\n      const didStoreComeFromProps = Boolean(props.store) && Boolean(props.store.getState) && Boolean(props.store.dispatch);\n      const didStoreComeFromContext = Boolean(contextValue) && Boolean(contextValue.store);\n\n      if (process.env.NODE_ENV !== 'production' && !didStoreComeFromProps && !didStoreComeFromContext) {\n        throw new Error(`Could not find \"store\" in the context of ` + `\"${displayName}\". Either wrap the root component in a <Provider>, ` + `or pass a custom React context provider to <Provider> and the corresponding ` + `React context consumer to ${displayName} in connect options.`);\n      } // Based on the previous check, one of these must be true\n\n\n      const store = didStoreComeFromProps ? props.store : contextValue.store;\n      const getServerState = didStoreComeFromContext ? contextValue.getServerState : store.getState;\n      const childPropsSelector = React.useMemo(() => {\n        // The child props selector needs the store reference as an input.\n        // Re-create this selector whenever the store changes.\n        return defaultSelectorFactory(store.dispatch, selectorFactoryOptions);\n      }, [store]);\n      const [subscription, notifyNestedSubs] = React.useMemo(() => {\n        if (!shouldHandleStateChanges) return NO_SUBSCRIPTION_ARRAY; // This Subscription's source should match where store came from: props vs. context. A component\n        // connected to the store via props shouldn't use subscription from context, or vice versa.\n\n        const subscription = createSubscription(store, didStoreComeFromProps ? undefined : contextValue.subscription); // `notifyNestedSubs` is duplicated to handle the case where the component is unmounted in\n        // the middle of the notification loop, where `subscription` will then be null. This can\n        // probably be avoided if Subscription's listeners logic is changed to not call listeners\n        // that have been unsubscribed in the  middle of the notification loop.\n\n        const notifyNestedSubs = subscription.notifyNestedSubs.bind(subscription);\n        return [subscription, notifyNestedSubs];\n      }, [store, didStoreComeFromProps, contextValue]); // Determine what {store, subscription} value should be put into nested context, if necessary,\n      // and memoize that value to avoid unnecessary context updates.\n\n      const overriddenContextValue = React.useMemo(() => {\n        if (didStoreComeFromProps) {\n          // This component is directly subscribed to a store from props.\n          // We don't want descendants reading from this store - pass down whatever\n          // the existing context value is from the nearest connected ancestor.\n          return contextValue;\n        } // Otherwise, put this component's subscription instance into context, so that\n        // connected descendants won't update until after this component is done\n\n\n        return _extends({}, contextValue, {\n          subscription\n        });\n      }, [didStoreComeFromProps, contextValue, subscription]); // Set up refs to coordinate values between the subscription effect and the render logic\n\n      const lastChildProps = React.useRef();\n      const lastWrapperProps = React.useRef(wrapperProps);\n      const childPropsFromStoreUpdate = React.useRef();\n      const renderIsScheduled = React.useRef(false);\n      const isProcessingDispatch = React.useRef(false);\n      const isMounted = React.useRef(false);\n      const latestSubscriptionCallbackError = React.useRef();\n      useIsomorphicLayoutEffect(() => {\n        isMounted.current = true;\n        return () => {\n          isMounted.current = false;\n        };\n      }, []);\n      const actualChildPropsSelector = React.useMemo(() => {\n        const selector = () => {\n          // Tricky logic here:\n          // - This render may have been triggered by a Redux store update that produced new child props\n          // - However, we may have gotten new wrapper props after that\n          // If we have new child props, and the same wrapper props, we know we should use the new child props as-is.\n          // But, if we have new wrapper props, those might change the child props, so we have to recalculate things.\n          // So, we'll use the child props from store update only if the wrapper props are the same as last time.\n          if (childPropsFromStoreUpdate.current && wrapperProps === lastWrapperProps.current) {\n            return childPropsFromStoreUpdate.current;\n          } // TODO We're reading the store directly in render() here. Bad idea?\n          // This will likely cause Bad Things (TM) to happen in Concurrent Mode.\n          // Note that we do this because on renders _not_ caused by store updates, we need the latest store state\n          // to determine what the child props should be.\n\n\n          return childPropsSelector(store.getState(), wrapperProps);\n        };\n\n        return selector;\n      }, [store, wrapperProps]); // We need this to execute synchronously every time we re-render. However, React warns\n      // about useLayoutEffect in SSR, so we try to detect environment and fall back to\n      // just useEffect instead to avoid the warning, since neither will run anyway.\n\n      const subscribeForReact = React.useMemo(() => {\n        const subscribe = reactListener => {\n          if (!subscription) {\n            return () => {};\n          }\n\n          return subscribeUpdates(shouldHandleStateChanges, store, subscription, // @ts-ignore\n          childPropsSelector, lastWrapperProps, lastChildProps, renderIsScheduled, isMounted, childPropsFromStoreUpdate, notifyNestedSubs, reactListener);\n        };\n\n        return subscribe;\n      }, [subscription]);\n      useIsomorphicLayoutEffectWithArgs(captureWrapperProps, [lastWrapperProps, lastChildProps, renderIsScheduled, wrapperProps, childPropsFromStoreUpdate, notifyNestedSubs]);\n      let actualChildProps;\n\n      try {\n        actualChildProps = useSyncExternalStore( // TODO We're passing through a big wrapper that does a bunch of extra side effects besides subscribing\n        subscribeForReact, // TODO This is incredibly hacky. We've already processed the store update and calculated new child props,\n        // TODO and we're just passing that through so it triggers a re-render for us rather than relying on `uSES`.\n        actualChildPropsSelector, getServerState ? () => childPropsSelector(getServerState(), wrapperProps) : actualChildPropsSelector);\n      } catch (err) {\n        if (latestSubscriptionCallbackError.current) {\n          ;\n          err.message += `\\nThe error may be correlated with this previous error:\\n${latestSubscriptionCallbackError.current.stack}\\n\\n`;\n        }\n\n        throw err;\n      }\n\n      useIsomorphicLayoutEffect(() => {\n        latestSubscriptionCallbackError.current = undefined;\n        childPropsFromStoreUpdate.current = undefined;\n        lastChildProps.current = actualChildProps;\n      }); // Now that all that's done, we can finally try to actually render the child component.\n      // We memoize the elements for the rendered child component as an optimization.\n\n      const renderedWrappedComponent = React.useMemo(() => {\n        return (\n          /*#__PURE__*/\n          // @ts-ignore\n          React.createElement(WrappedComponent, _extends({}, actualChildProps, {\n            ref: reactReduxForwardedRef\n          }))\n        );\n      }, [reactReduxForwardedRef, WrappedComponent, actualChildProps]); // If React sees the exact same element reference as last time, it bails out of re-rendering\n      // that child, same as if it was wrapped in React.memo() or returned false from shouldComponentUpdate.\n\n      const renderedChild = React.useMemo(() => {\n        if (shouldHandleStateChanges) {\n          // If this component is subscribed to store updates, we need to pass its own\n          // subscription instance down to our descendants. That means rendering the same\n          // Context instance, and putting a different value into the context.\n          return /*#__PURE__*/React.createElement(ContextToUse.Provider, {\n            value: overriddenContextValue\n          }, renderedWrappedComponent);\n        }\n\n        return renderedWrappedComponent;\n      }, [ContextToUse, renderedWrappedComponent, overriddenContextValue]);\n      return renderedChild;\n    }\n\n    const _Connect = React.memo(ConnectFunction);\n\n    // Add a hacky cast to get the right output type\n    const Connect = _Connect;\n    Connect.WrappedComponent = WrappedComponent;\n    Connect.displayName = ConnectFunction.displayName = displayName;\n\n    if (forwardRef) {\n      const _forwarded = React.forwardRef(function forwardConnectRef(props, ref) {\n        // @ts-ignore\n        return /*#__PURE__*/React.createElement(Connect, _extends({}, props, {\n          reactReduxForwardedRef: ref\n        }));\n      });\n\n      const forwarded = _forwarded;\n      forwarded.displayName = displayName;\n      forwarded.WrappedComponent = WrappedComponent;\n      return hoistStatics(forwarded, WrappedComponent);\n    }\n\n    return hoistStatics(Connect, WrappedComponent);\n  };\n\n  return wrapWithConnect;\n}\n\nexport default connect;","import { wrapMapToPropsConstant, wrapMapToPropsFunc } from './wrapMapToProps';\nimport { createInvalidArgFactory } from './invalidArgFactory';\nexport function mapStateToPropsFactory(mapStateToProps) {\n  return !mapStateToProps ? wrapMapToPropsConstant(() => ({})) : typeof mapStateToProps === 'function' ? // @ts-ignore\n  wrapMapToPropsFunc(mapStateToProps, 'mapStateToProps') : createInvalidArgFactory(mapStateToProps, 'mapStateToProps');\n}","import bindActionCreators from '../utils/bindActionCreators';\nimport { wrapMapToPropsConstant, wrapMapToPropsFunc } from './wrapMapToProps';\nimport { createInvalidArgFactory } from './invalidArgFactory';\nexport function mapDispatchToPropsFactory(mapDispatchToProps) {\n  return mapDispatchToProps && typeof mapDispatchToProps === 'object' ? wrapMapToPropsConstant(dispatch => // @ts-ignore\n  bindActionCreators(mapDispatchToProps, dispatch)) : !mapDispatchToProps ? wrapMapToPropsConstant(dispatch => ({\n    dispatch\n  })) : typeof mapDispatchToProps === 'function' ? // @ts-ignore\n  wrapMapToPropsFunc(mapDispatchToProps, 'mapDispatchToProps') : createInvalidArgFactory(mapDispatchToProps, 'mapDispatchToProps');\n}","export default function bindActionCreators(actionCreators, dispatch) {\n  const boundActionCreators = {};\n\n  for (const key in actionCreators) {\n    const actionCreator = actionCreators[key];\n\n    if (typeof actionCreator === 'function') {\n      boundActionCreators[key] = (...args) => dispatch(actionCreator(...args));\n    }\n  }\n\n  return boundActionCreators;\n}","import * as React from 'react';\nimport { ReactReduxContext } from './Context';\nimport { createSubscription } from '../utils/Subscription';\nimport { useIsomorphicLayoutEffect } from '../utils/useIsomorphicLayoutEffect';\n\nfunction Provider({\n  store,\n  context,\n  children,\n  serverState,\n  stabilityCheck = 'once',\n  noopCheck = 'once'\n}) {\n  const contextValue = React.useMemo(() => {\n    const subscription = createSubscription(store);\n    return {\n      store,\n      subscription,\n      getServerState: serverState ? () => serverState : undefined,\n      stabilityCheck,\n      noopCheck\n    };\n  }, [store, serverState, stabilityCheck, noopCheck]);\n  const previousState = React.useMemo(() => store.getState(), [store]);\n  useIsomorphicLayoutEffect(() => {\n    const {\n      subscription\n    } = contextValue;\n    subscription.onStateChange = subscription.notifyNestedSubs;\n    subscription.trySubscribe();\n\n    if (previousState !== store.getState()) {\n      subscription.notifyNestedSubs();\n    }\n\n    return () => {\n      subscription.tryUnsubscribe();\n      subscription.onStateChange = undefined;\n    };\n  }, [contextValue, previousState]);\n  const Context = context || ReactReduxContext; // @ts-ignore 'AnyAction' is assignable to the constraint of type 'A', but 'A' could be instantiated with a different subtype\n\n  return /*#__PURE__*/React.createElement(Context.Provider, {\n    value: contextValue\n  }, children);\n}\n\nexport default Provider;","import { ReactReduxContext } from '../components/Context';\nimport { useReduxContext as useDefaultReduxContext, createReduxContextHook } from './useReduxContext';\n/**\r\n * Hook factory, which creates a `useStore` hook bound to a given context.\r\n *\r\n * @param {React.Context} [context=ReactReduxContext] Context passed to your `<Provider>`.\r\n * @returns {Function} A `useStore` hook bound to the specified context.\r\n */\n\nexport function createStoreHook(context = ReactReduxContext) {\n  const useReduxContext = // @ts-ignore\n  context === ReactReduxContext ? useDefaultReduxContext : // @ts-ignore\n  createReduxContextHook(context);\n  return function useStore() {\n    const {\n      store\n    } = useReduxContext(); // @ts-ignore\n\n    return store;\n  };\n}\n/**\r\n * A hook to access the redux store.\r\n *\r\n * @returns {any} the redux store\r\n *\r\n * @example\r\n *\r\n * import React from 'react'\r\n * import { useStore } from 'react-redux'\r\n *\r\n * export const ExampleComponent = () => {\r\n *   const store = useStore()\r\n *   return <div>{store.getState()}</div>\r\n * }\r\n */\n\nexport const useStore = /*#__PURE__*/createStoreHook();","import { ReactReduxContext } from '../components/Context';\nimport { useStore as useDefaultStore, createStoreHook } from './useStore';\n/**\r\n * Hook factory, which creates a `useDispatch` hook bound to a given context.\r\n *\r\n * @param {React.Context} [context=ReactReduxContext] Context passed to your `<Provider>`.\r\n * @returns {Function} A `useDispatch` hook bound to the specified context.\r\n */\n\nexport function createDispatchHook(context = ReactReduxContext) {\n  const useStore = // @ts-ignore\n  context === ReactReduxContext ? useDefaultStore : createStoreHook(context);\n  return function useDispatch() {\n    const store = useStore(); // @ts-ignore\n\n    return store.dispatch;\n  };\n}\n/**\r\n * A hook to access the redux `dispatch` function.\r\n *\r\n * @returns {any|function} redux store's `dispatch` function\r\n *\r\n * @example\r\n *\r\n * import React, { useCallback } from 'react'\r\n * import { useDispatch } from 'react-redux'\r\n *\r\n * export const CounterComponent = ({ value }) => {\r\n *   const dispatch = useDispatch()\r\n *   const increaseCounter = useCallback(() => dispatch({ type: 'increase-counter' }), [])\r\n *   return (\r\n *     <div>\r\n *       <span>{value}</span>\r\n *       <button onClick={increaseCounter}>Increase counter</button>\r\n *     </div>\r\n *   )\r\n * }\r\n */\n\nexport const useDispatch = /*#__PURE__*/createDispatchHook();","// The primary entry point assumes we're working with standard ReactDOM/RN, but\n// older versions that do not include `useSyncExternalStore` (React 16.9 - 17.x).\n// Because of that, the useSyncExternalStore compat shim is needed.\nimport { useSyncExternalStore } from 'use-sync-external-store/shim';\nimport { useSyncExternalStoreWithSelector } from 'use-sync-external-store/shim/with-selector';\nimport { unstable_batchedUpdates as batch } from './utils/reactBatchedUpdates';\nimport { setBatch } from './utils/batch';\nimport { initializeUseSelector } from './hooks/useSelector';\nimport { initializeConnect } from './components/connect';\ninitializeUseSelector(useSyncExternalStoreWithSelector);\ninitializeConnect(useSyncExternalStore); // Enable batched updates in our subscriptions for use\n// with standard React renderers (ReactDOM, React Native)\n\nsetBatch(batch);\nexport { batch };\nexport * from './exports';","export const notInitialized = () => {\n  throw new Error('uSES not initialized!');\n};","/**\n * @license React\n * react-is.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use strict';var b=Symbol.for(\"react.element\"),c=Symbol.for(\"react.portal\"),d=Symbol.for(\"react.fragment\"),e=Symbol.for(\"react.strict_mode\"),f=Symbol.for(\"react.profiler\"),g=Symbol.for(\"react.provider\"),h=Symbol.for(\"react.context\"),k=Symbol.for(\"react.server_context\"),l=Symbol.for(\"react.forward_ref\"),m=Symbol.for(\"react.suspense\"),n=Symbol.for(\"react.suspense_list\"),p=Symbol.for(\"react.memo\"),q=Symbol.for(\"react.lazy\"),t=Symbol.for(\"react.offscreen\"),u;u=Symbol.for(\"react.module.reference\");\nfunction v(a){if(\"object\"===typeof a&&null!==a){var r=a.$$typeof;switch(r){case b:switch(a=a.type,a){case d:case f:case e:case m:case n:return a;default:switch(a=a&&a.$$typeof,a){case k:case h:case l:case q:case p:case g:return a;default:return r}}case c:return r}}}exports.ContextConsumer=h;exports.ContextProvider=g;exports.Element=b;exports.ForwardRef=l;exports.Fragment=d;exports.Lazy=q;exports.Memo=p;exports.Portal=c;exports.Profiler=f;exports.StrictMode=e;exports.Suspense=m;\nexports.SuspenseList=n;exports.isAsyncMode=function(){return!1};exports.isConcurrentMode=function(){return!1};exports.isContextConsumer=function(a){return v(a)===h};exports.isContextProvider=function(a){return v(a)===g};exports.isElement=function(a){return\"object\"===typeof a&&null!==a&&a.$$typeof===b};exports.isForwardRef=function(a){return v(a)===l};exports.isFragment=function(a){return v(a)===d};exports.isLazy=function(a){return v(a)===q};exports.isMemo=function(a){return v(a)===p};\nexports.isPortal=function(a){return v(a)===c};exports.isProfiler=function(a){return v(a)===f};exports.isStrictMode=function(a){return v(a)===e};exports.isSuspense=function(a){return v(a)===m};exports.isSuspenseList=function(a){return v(a)===n};\nexports.isValidElementType=function(a){return\"string\"===typeof a||\"function\"===typeof a||a===d||a===f||a===e||a===m||a===n||a===t||\"object\"===typeof a&&null!==a&&(a.$$typeof===q||a.$$typeof===p||a.$$typeof===g||a.$$typeof===h||a.$$typeof===l||a.$$typeof===u||void 0!==a.getModuleId)?!0:!1};exports.typeOf=v;\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n  module.exports = require('./cjs/react-is.production.min.js');\n} else {\n  module.exports = require('./cjs/react-is.development.js');\n}\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _default = function _default(position, metric, axis) {\n  var positionPercent = position === 0 ? position : position + metric;\n  var positionCss = axis === 'horizontal' ? [positionPercent, 0, 0] : [0, positionPercent, 0];\n  var transitionProp = 'translate3d';\n  var translatedPosition = '(' + positionCss.join(',') + ')';\n  return transitionProp + translatedPosition;\n};\n\nexports.default = _default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.fadeAnimationHandler = exports.slideStopSwipingHandler = exports.slideSwipeAnimationHandler = exports.slideAnimationHandler = void 0;\n\nvar _react = require(\"react\");\n\nvar _CSSTranslate = _interopRequireDefault(require(\"../../CSSTranslate\"));\n\nvar _utils = require(\"./utils\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\n/**\n * Main animation handler for the default 'sliding' style animation\n * @param props\n * @param state\n */\nvar slideAnimationHandler = function slideAnimationHandler(props, state) {\n  var returnStyles = {};\n  var selectedItem = state.selectedItem;\n  var previousItem = selectedItem;\n  var lastPosition = _react.Children.count(props.children) - 1;\n  var needClonedSlide = props.infiniteLoop && (selectedItem < 0 || selectedItem > lastPosition); // Handle list position if it needs a clone\n\n  if (needClonedSlide) {\n    if (previousItem < 0) {\n      if (props.centerMode && props.centerSlidePercentage && props.axis === 'horizontal') {\n        returnStyles.itemListStyle = (0, _utils.setPosition)(-(lastPosition + 2) * props.centerSlidePercentage - (100 - props.centerSlidePercentage) / 2, props.axis);\n      } else {\n        returnStyles.itemListStyle = (0, _utils.setPosition)(-(lastPosition + 2) * 100, props.axis);\n      }\n    } else if (previousItem > lastPosition) {\n      returnStyles.itemListStyle = (0, _utils.setPosition)(0, props.axis);\n    }\n\n    return returnStyles;\n  }\n\n  var currentPosition = (0, _utils.getPosition)(selectedItem, props); // if 3d is available, let's take advantage of the performance of transform\n\n  var transformProp = (0, _CSSTranslate.default)(currentPosition, '%', props.axis);\n  var transitionTime = props.transitionTime + 'ms';\n  returnStyles.itemListStyle = {\n    WebkitTransform: transformProp,\n    msTransform: transformProp,\n    OTransform: transformProp,\n    transform: transformProp\n  };\n\n  if (!state.swiping) {\n    returnStyles.itemListStyle = _objectSpread(_objectSpread({}, returnStyles.itemListStyle), {}, {\n      WebkitTransitionDuration: transitionTime,\n      MozTransitionDuration: transitionTime,\n      OTransitionDuration: transitionTime,\n      transitionDuration: transitionTime,\n      msTransitionDuration: transitionTime\n    });\n  }\n\n  return returnStyles;\n};\n/**\n * Swiping animation handler for the default 'sliding' style animation\n * @param delta\n * @param props\n * @param state\n * @param setState\n */\n\n\nexports.slideAnimationHandler = slideAnimationHandler;\n\nvar slideSwipeAnimationHandler = function slideSwipeAnimationHandler(delta, props, state, setState) {\n  var returnStyles = {};\n  var isHorizontal = props.axis === 'horizontal';\n\n  var childrenLength = _react.Children.count(props.children);\n\n  var initialBoundry = 0;\n  var currentPosition = (0, _utils.getPosition)(state.selectedItem, props);\n  var finalBoundry = props.infiniteLoop ? (0, _utils.getPosition)(childrenLength - 1, props) - 100 : (0, _utils.getPosition)(childrenLength - 1, props);\n  var axisDelta = isHorizontal ? delta.x : delta.y;\n  var handledDelta = axisDelta; // prevent user from swiping left out of boundaries\n\n  if (currentPosition === initialBoundry && axisDelta > 0) {\n    handledDelta = 0;\n  } // prevent user from swiping right out of boundaries\n\n\n  if (currentPosition === finalBoundry && axisDelta < 0) {\n    handledDelta = 0;\n  }\n\n  var position = currentPosition + 100 / (state.itemSize / handledDelta);\n  var hasMoved = Math.abs(axisDelta) > props.swipeScrollTolerance;\n\n  if (props.infiniteLoop && hasMoved) {\n    // When allowing infinite loop, if we slide left from position 0 we reveal the cloned last slide that appears before it\n    // if we slide even further we need to jump to other side so it can continue - and vice versa for the last slide\n    if (state.selectedItem === 0 && position > -100) {\n      position -= childrenLength * 100;\n    } else if (state.selectedItem === childrenLength - 1 && position < -childrenLength * 100) {\n      position += childrenLength * 100;\n    }\n  }\n\n  if (!props.preventMovementUntilSwipeScrollTolerance || hasMoved || state.swipeMovementStarted) {\n    if (!state.swipeMovementStarted) {\n      setState({\n        swipeMovementStarted: true\n      });\n    }\n\n    returnStyles.itemListStyle = (0, _utils.setPosition)(position, props.axis);\n  } //allows scroll if the swipe was within the tolerance\n\n\n  if (hasMoved && !state.cancelClick) {\n    setState({\n      cancelClick: true\n    });\n  }\n\n  return returnStyles;\n};\n/**\n * Default 'sliding' style animination handler for when a swipe action stops.\n * @param props\n * @param state\n */\n\n\nexports.slideSwipeAnimationHandler = slideSwipeAnimationHandler;\n\nvar slideStopSwipingHandler = function slideStopSwipingHandler(props, state) {\n  var currentPosition = (0, _utils.getPosition)(state.selectedItem, props);\n  var itemListStyle = (0, _utils.setPosition)(currentPosition, props.axis);\n  return {\n    itemListStyle: itemListStyle\n  };\n};\n/**\n * Main animation handler for the default 'fade' style animation\n * @param props\n * @param state\n */\n\n\nexports.slideStopSwipingHandler = slideStopSwipingHandler;\n\nvar fadeAnimationHandler = function fadeAnimationHandler(props, state) {\n  var transitionTime = props.transitionTime + 'ms';\n  var transitionTimingFunction = 'ease-in-out';\n  var slideStyle = {\n    position: 'absolute',\n    display: 'block',\n    zIndex: -2,\n    minHeight: '100%',\n    opacity: 0,\n    top: 0,\n    right: 0,\n    left: 0,\n    bottom: 0,\n    transitionTimingFunction: transitionTimingFunction,\n    msTransitionTimingFunction: transitionTimingFunction,\n    MozTransitionTimingFunction: transitionTimingFunction,\n    WebkitTransitionTimingFunction: transitionTimingFunction,\n    OTransitionTimingFunction: transitionTimingFunction\n  };\n\n  if (!state.swiping) {\n    slideStyle = _objectSpread(_objectSpread({}, slideStyle), {}, {\n      WebkitTransitionDuration: transitionTime,\n      MozTransitionDuration: transitionTime,\n      OTransitionDuration: transitionTime,\n      transitionDuration: transitionTime,\n      msTransitionDuration: transitionTime\n    });\n  }\n\n  return {\n    slideStyle: slideStyle,\n    selectedStyle: _objectSpread(_objectSpread({}, slideStyle), {}, {\n      opacity: 1,\n      position: 'relative'\n    }),\n    prevStyle: _objectSpread({}, slideStyle)\n  };\n};\n\nexports.fadeAnimationHandler = fadeAnimationHandler;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireWildcard(require(\"react\"));\n\nvar _reactEasySwipe = _interopRequireDefault(require(\"react-easy-swipe\"));\n\nvar _cssClasses = _interopRequireDefault(require(\"../../cssClasses\"));\n\nvar _Thumbs = _interopRequireDefault(require(\"../Thumbs\"));\n\nvar _document = _interopRequireDefault(require(\"../../shims/document\"));\n\nvar _window = _interopRequireDefault(require(\"../../shims/window\"));\n\nvar _utils = require(\"./utils\");\n\nvar _animations = require(\"./animations\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _getRequireWildcardCache() { if (typeof WeakMap !== \"function\") return null; var cache = new WeakMap(); _getRequireWildcardCache = function _getRequireWildcardCache() { return cache; }; return cache; }\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== \"object\" && typeof obj !== \"function\") { return { default: obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }\n\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _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); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nvar Carousel = /*#__PURE__*/function (_React$Component) {\n  _inherits(Carousel, _React$Component);\n\n  var _super = _createSuper(Carousel);\n\n  // @ts-ignore\n  function Carousel(props) {\n    var _this;\n\n    _classCallCheck(this, Carousel);\n\n    _this = _super.call(this, props);\n\n    _defineProperty(_assertThisInitialized(_this), \"thumbsRef\", void 0);\n\n    _defineProperty(_assertThisInitialized(_this), \"carouselWrapperRef\", void 0);\n\n    _defineProperty(_assertThisInitialized(_this), \"listRef\", void 0);\n\n    _defineProperty(_assertThisInitialized(_this), \"itemsRef\", void 0);\n\n    _defineProperty(_assertThisInitialized(_this), \"timer\", void 0);\n\n    _defineProperty(_assertThisInitialized(_this), \"animationHandler\", void 0);\n\n    _defineProperty(_assertThisInitialized(_this), \"setThumbsRef\", function (node) {\n      _this.thumbsRef = node;\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"setCarouselWrapperRef\", function (node) {\n      _this.carouselWrapperRef = node;\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"setListRef\", function (node) {\n      _this.listRef = node;\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"setItemsRef\", function (node, index) {\n      if (!_this.itemsRef) {\n        _this.itemsRef = [];\n      }\n\n      _this.itemsRef[index] = node;\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"autoPlay\", function () {\n      if (_react.Children.count(_this.props.children) <= 1) {\n        return;\n      }\n\n      _this.clearAutoPlay();\n\n      if (!_this.props.autoPlay) {\n        return;\n      }\n\n      _this.timer = setTimeout(function () {\n        _this.increment();\n      }, _this.props.interval);\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"clearAutoPlay\", function () {\n      if (_this.timer) clearTimeout(_this.timer);\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"resetAutoPlay\", function () {\n      _this.clearAutoPlay();\n\n      _this.autoPlay();\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"stopOnHover\", function () {\n      _this.setState({\n        isMouseEntered: true\n      }, _this.clearAutoPlay);\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"startOnLeave\", function () {\n      _this.setState({\n        isMouseEntered: false\n      }, _this.autoPlay);\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"isFocusWithinTheCarousel\", function () {\n      if (!_this.carouselWrapperRef) {\n        return false;\n      }\n\n      if ((0, _document.default)().activeElement === _this.carouselWrapperRef || _this.carouselWrapperRef.contains((0, _document.default)().activeElement)) {\n        return true;\n      }\n\n      return false;\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"navigateWithKeyboard\", function (e) {\n      if (!_this.isFocusWithinTheCarousel()) {\n        return;\n      }\n\n      var axis = _this.props.axis;\n      var isHorizontal = axis === 'horizontal';\n      var keyNames = {\n        ArrowUp: 38,\n        ArrowRight: 39,\n        ArrowDown: 40,\n        ArrowLeft: 37\n      };\n      var nextKey = isHorizontal ? keyNames.ArrowRight : keyNames.ArrowDown;\n      var prevKey = isHorizontal ? keyNames.ArrowLeft : keyNames.ArrowUp;\n\n      if (nextKey === e.keyCode) {\n        _this.increment();\n      } else if (prevKey === e.keyCode) {\n        _this.decrement();\n      }\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"updateSizes\", function () {\n      if (!_this.state.initialized || !_this.itemsRef || _this.itemsRef.length === 0) {\n        return;\n      }\n\n      var isHorizontal = _this.props.axis === 'horizontal';\n      var firstItem = _this.itemsRef[0];\n\n      if (!firstItem) {\n        return;\n      }\n\n      var itemSize = isHorizontal ? firstItem.clientWidth : firstItem.clientHeight;\n\n      _this.setState({\n        itemSize: itemSize\n      });\n\n      if (_this.thumbsRef) {\n        _this.thumbsRef.updateSizes();\n      }\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"setMountState\", function () {\n      _this.setState({\n        hasMount: true\n      });\n\n      _this.updateSizes();\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"handleClickItem\", function (index, item) {\n      if (_react.Children.count(_this.props.children) === 0) {\n        return;\n      }\n\n      if (_this.state.cancelClick) {\n        _this.setState({\n          cancelClick: false\n        });\n\n        return;\n      }\n\n      _this.props.onClickItem(index, item);\n\n      if (index !== _this.state.selectedItem) {\n        _this.setState({\n          selectedItem: index\n        });\n      }\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"handleOnChange\", function (index, item) {\n      if (_react.Children.count(_this.props.children) <= 1) {\n        return;\n      }\n\n      _this.props.onChange(index, item);\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"handleClickThumb\", function (index, item) {\n      _this.props.onClickThumb(index, item);\n\n      _this.moveTo(index);\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"onSwipeStart\", function (event) {\n      _this.setState({\n        swiping: true\n      });\n\n      _this.props.onSwipeStart(event);\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"onSwipeEnd\", function (event) {\n      _this.setState({\n        swiping: false,\n        cancelClick: false,\n        swipeMovementStarted: false\n      });\n\n      _this.props.onSwipeEnd(event);\n\n      _this.clearAutoPlay();\n\n      if (_this.state.autoPlay) {\n        _this.autoPlay();\n      }\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"onSwipeMove\", function (delta, event) {\n      _this.props.onSwipeMove(event);\n\n      var animationHandlerResponse = _this.props.swipeAnimationHandler(delta, _this.props, _this.state, _this.setState.bind(_assertThisInitialized(_this)));\n\n      _this.setState(_objectSpread({}, animationHandlerResponse)); // If we have not moved, we should have an empty object returned\n      // Return false to allow scrolling when not swiping\n\n\n      return !!Object.keys(animationHandlerResponse).length;\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"decrement\", function () {\n      var positions = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 1;\n\n      _this.moveTo(_this.state.selectedItem - (typeof positions === 'number' ? positions : 1));\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"increment\", function () {\n      var positions = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 1;\n\n      _this.moveTo(_this.state.selectedItem + (typeof positions === 'number' ? positions : 1));\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"moveTo\", function (position) {\n      if (typeof position !== 'number') {\n        return;\n      }\n\n      var lastPosition = _react.Children.count(_this.props.children) - 1;\n\n      if (position < 0) {\n        position = _this.props.infiniteLoop ? lastPosition : 0;\n      }\n\n      if (position > lastPosition) {\n        position = _this.props.infiniteLoop ? 0 : lastPosition;\n      }\n\n      _this.selectItem({\n        // if it's not a slider, we don't need to set position here\n        selectedItem: position\n      }); // don't reset auto play when stop on hover is enabled, doing so will trigger a call to auto play more than once\n      // and will result in the interval function not being cleared correctly.\n\n\n      if (_this.state.autoPlay && _this.state.isMouseEntered === false) {\n        _this.resetAutoPlay();\n      }\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"onClickNext\", function () {\n      _this.increment(1);\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"onClickPrev\", function () {\n      _this.decrement(1);\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"onSwipeForward\", function () {\n      _this.increment(1);\n\n      if (_this.props.emulateTouch) {\n        _this.setState({\n          cancelClick: true\n        });\n      }\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"onSwipeBackwards\", function () {\n      _this.decrement(1);\n\n      if (_this.props.emulateTouch) {\n        _this.setState({\n          cancelClick: true\n        });\n      }\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"changeItem\", function (newIndex) {\n      return function (e) {\n        if (!(0, _utils.isKeyboardEvent)(e) || e.key === 'Enter') {\n          _this.moveTo(newIndex);\n        }\n      };\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"selectItem\", function (state) {\n      // Merge in the new state while updating updating previous item\n      _this.setState(_objectSpread({\n        previousItem: _this.state.selectedItem\n      }, state), function () {\n        // Run animation handler and update styles based on it\n        _this.setState(_this.animationHandler(_this.props, _this.state));\n      });\n\n      _this.handleOnChange(state.selectedItem, _react.Children.toArray(_this.props.children)[state.selectedItem]);\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"getInitialImage\", function () {\n      var selectedItem = _this.props.selectedItem;\n      var item = _this.itemsRef && _this.itemsRef[selectedItem];\n      var images = item && item.getElementsByTagName('img') || [];\n      return images[0];\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"getVariableItemHeight\", function (position) {\n      var item = _this.itemsRef && _this.itemsRef[position];\n\n      if (_this.state.hasMount && item && item.children.length) {\n        var slideImages = item.children[0].getElementsByTagName('img') || [];\n\n        if (slideImages.length > 0) {\n          var image = slideImages[0];\n\n          if (!image.complete) {\n            // if the image is still loading, the size won't be available so we trigger a new render after it's done\n            var onImageLoad = function onImageLoad() {\n              _this.forceUpdate();\n\n              image.removeEventListener('load', onImageLoad);\n            };\n\n            image.addEventListener('load', onImageLoad);\n          }\n        } // try to get img first, if img not there find first display tag\n\n\n        var displayItem = slideImages[0] || item.children[0];\n        var height = displayItem.clientHeight;\n        return height > 0 ? height : null;\n      }\n\n      return null;\n    });\n\n    var initState = {\n      initialized: false,\n      previousItem: props.selectedItem,\n      selectedItem: props.selectedItem,\n      hasMount: false,\n      isMouseEntered: false,\n      autoPlay: props.autoPlay,\n      swiping: false,\n      swipeMovementStarted: false,\n      cancelClick: false,\n      itemSize: 1,\n      itemListStyle: {},\n      slideStyle: {},\n      selectedStyle: {},\n      prevStyle: {}\n    };\n    _this.animationHandler = typeof props.animationHandler === 'function' && props.animationHandler || props.animationHandler === 'fade' && _animations.fadeAnimationHandler || _animations.slideAnimationHandler;\n    _this.state = _objectSpread(_objectSpread({}, initState), _this.animationHandler(props, initState));\n    return _this;\n  }\n\n  _createClass(Carousel, [{\n    key: \"componentDidMount\",\n    value: function componentDidMount() {\n      if (!this.props.children) {\n        return;\n      }\n\n      this.setupCarousel();\n    }\n  }, {\n    key: \"componentDidUpdate\",\n    value: function componentDidUpdate(prevProps, prevState) {\n      if (!prevProps.children && this.props.children && !this.state.initialized) {\n        this.setupCarousel();\n      }\n\n      if (!prevProps.autoFocus && this.props.autoFocus) {\n        this.forceFocus();\n      }\n\n      if (prevState.swiping && !this.state.swiping) {\n        // We stopped swiping, ensure we are heading to the new/current slide and not stuck\n        this.setState(_objectSpread({}, this.props.stopSwipingHandler(this.props, this.state)));\n      }\n\n      if (prevProps.selectedItem !== this.props.selectedItem || prevProps.centerMode !== this.props.centerMode) {\n        this.updateSizes();\n        this.moveTo(this.props.selectedItem);\n      }\n\n      if (prevProps.autoPlay !== this.props.autoPlay) {\n        if (this.props.autoPlay) {\n          this.setupAutoPlay();\n        } else {\n          this.destroyAutoPlay();\n        }\n\n        this.setState({\n          autoPlay: this.props.autoPlay\n        });\n      }\n    }\n  }, {\n    key: \"componentWillUnmount\",\n    value: function componentWillUnmount() {\n      this.destroyCarousel();\n    }\n  }, {\n    key: \"setupCarousel\",\n    value: function setupCarousel() {\n      var _this2 = this;\n\n      this.bindEvents();\n\n      if (this.state.autoPlay && _react.Children.count(this.props.children) > 1) {\n        this.setupAutoPlay();\n      }\n\n      if (this.props.autoFocus) {\n        this.forceFocus();\n      }\n\n      this.setState({\n        initialized: true\n      }, function () {\n        var initialImage = _this2.getInitialImage();\n\n        if (initialImage && !initialImage.complete) {\n          // if it's a carousel of images, we set the mount state after the first image is loaded\n          initialImage.addEventListener('load', _this2.setMountState);\n        } else {\n          _this2.setMountState();\n        }\n      });\n    }\n  }, {\n    key: \"destroyCarousel\",\n    value: function destroyCarousel() {\n      if (this.state.initialized) {\n        this.unbindEvents();\n        this.destroyAutoPlay();\n      }\n    }\n  }, {\n    key: \"setupAutoPlay\",\n    value: function setupAutoPlay() {\n      this.autoPlay();\n      var carouselWrapper = this.carouselWrapperRef;\n\n      if (this.props.stopOnHover && carouselWrapper) {\n        carouselWrapper.addEventListener('mouseenter', this.stopOnHover);\n        carouselWrapper.addEventListener('mouseleave', this.startOnLeave);\n      }\n    }\n  }, {\n    key: \"destroyAutoPlay\",\n    value: function destroyAutoPlay() {\n      this.clearAutoPlay();\n      var carouselWrapper = this.carouselWrapperRef;\n\n      if (this.props.stopOnHover && carouselWrapper) {\n        carouselWrapper.removeEventListener('mouseenter', this.stopOnHover);\n        carouselWrapper.removeEventListener('mouseleave', this.startOnLeave);\n      }\n    }\n  }, {\n    key: \"bindEvents\",\n    value: function bindEvents() {\n      // as the widths are calculated, we need to resize\n      // the carousel when the window is resized\n      (0, _window.default)().addEventListener('resize', this.updateSizes); // issue #2 - image loading smaller\n\n      (0, _window.default)().addEventListener('DOMContentLoaded', this.updateSizes);\n\n      if (this.props.useKeyboardArrows) {\n        (0, _document.default)().addEventListener('keydown', this.navigateWithKeyboard);\n      }\n    }\n  }, {\n    key: \"unbindEvents\",\n    value: function unbindEvents() {\n      // removing listeners\n      (0, _window.default)().removeEventListener('resize', this.updateSizes);\n      (0, _window.default)().removeEventListener('DOMContentLoaded', this.updateSizes);\n      var initialImage = this.getInitialImage();\n\n      if (initialImage) {\n        initialImage.removeEventListener('load', this.setMountState);\n      }\n\n      if (this.props.useKeyboardArrows) {\n        (0, _document.default)().removeEventListener('keydown', this.navigateWithKeyboard);\n      }\n    }\n  }, {\n    key: \"forceFocus\",\n    value: function forceFocus() {\n      var _this$carouselWrapper;\n\n      (_this$carouselWrapper = this.carouselWrapperRef) === null || _this$carouselWrapper === void 0 ? void 0 : _this$carouselWrapper.focus();\n    }\n  }, {\n    key: \"renderItems\",\n    value: function renderItems(isClone) {\n      var _this3 = this;\n\n      if (!this.props.children) {\n        return [];\n      }\n\n      return _react.Children.map(this.props.children, function (item, index) {\n        var isSelected = index === _this3.state.selectedItem;\n        var isPrevious = index === _this3.state.previousItem;\n        var style = isSelected && _this3.state.selectedStyle || isPrevious && _this3.state.prevStyle || _this3.state.slideStyle || {};\n\n        if (_this3.props.centerMode && _this3.props.axis === 'horizontal') {\n          style = _objectSpread(_objectSpread({}, style), {}, {\n            minWidth: _this3.props.centerSlidePercentage + '%'\n          });\n        }\n\n        if (_this3.state.swiping && _this3.state.swipeMovementStarted) {\n          style = _objectSpread(_objectSpread({}, style), {}, {\n            pointerEvents: 'none'\n          });\n        }\n\n        var slideProps = {\n          ref: function ref(e) {\n            return _this3.setItemsRef(e, index);\n          },\n          key: 'itemKey' + index + (isClone ? 'clone' : ''),\n          className: _cssClasses.default.ITEM(true, index === _this3.state.selectedItem, index === _this3.state.previousItem),\n          onClick: _this3.handleClickItem.bind(_this3, index, item),\n          style: style\n        };\n        return /*#__PURE__*/_react.default.createElement(\"li\", slideProps, _this3.props.renderItem(item, {\n          isSelected: index === _this3.state.selectedItem,\n          isPrevious: index === _this3.state.previousItem\n        }));\n      });\n    }\n  }, {\n    key: \"renderControls\",\n    value: function renderControls() {\n      var _this4 = this;\n\n      var _this$props = this.props,\n          showIndicators = _this$props.showIndicators,\n          labels = _this$props.labels,\n          renderIndicator = _this$props.renderIndicator,\n          children = _this$props.children;\n\n      if (!showIndicators) {\n        return null;\n      }\n\n      return /*#__PURE__*/_react.default.createElement(\"ul\", {\n        className: \"control-dots\"\n      }, _react.Children.map(children, function (_, index) {\n        return renderIndicator && renderIndicator(_this4.changeItem(index), index === _this4.state.selectedItem, index, labels.item);\n      }));\n    }\n  }, {\n    key: \"renderStatus\",\n    value: function renderStatus() {\n      if (!this.props.showStatus) {\n        return null;\n      }\n\n      return /*#__PURE__*/_react.default.createElement(\"p\", {\n        className: \"carousel-status\"\n      }, this.props.statusFormatter(this.state.selectedItem + 1, _react.Children.count(this.props.children)));\n    }\n  }, {\n    key: \"renderThumbs\",\n    value: function renderThumbs() {\n      if (!this.props.showThumbs || !this.props.children || _react.Children.count(this.props.children) === 0) {\n        return null;\n      }\n\n      return /*#__PURE__*/_react.default.createElement(_Thumbs.default, {\n        ref: this.setThumbsRef,\n        onSelectItem: this.handleClickThumb,\n        selectedItem: this.state.selectedItem,\n        transitionTime: this.props.transitionTime,\n        thumbWidth: this.props.thumbWidth,\n        labels: this.props.labels,\n        emulateTouch: this.props.emulateTouch\n      }, this.props.renderThumbs(this.props.children));\n    }\n  }, {\n    key: \"render\",\n    value: function render() {\n      var _this5 = this;\n\n      if (!this.props.children || _react.Children.count(this.props.children) === 0) {\n        return null;\n      }\n\n      var isSwipeable = this.props.swipeable && _react.Children.count(this.props.children) > 1;\n      var isHorizontal = this.props.axis === 'horizontal';\n      var canShowArrows = this.props.showArrows && _react.Children.count(this.props.children) > 1; // show left arrow?\n\n      var hasPrev = canShowArrows && (this.state.selectedItem > 0 || this.props.infiniteLoop) || false; // show right arrow\n\n      var hasNext = canShowArrows && (this.state.selectedItem < _react.Children.count(this.props.children) - 1 || this.props.infiniteLoop) || false;\n      var itemsClone = this.renderItems(true);\n      var firstClone = itemsClone.shift();\n      var lastClone = itemsClone.pop();\n      var swiperProps = {\n        className: _cssClasses.default.SLIDER(true, this.state.swiping),\n        onSwipeMove: this.onSwipeMove,\n        onSwipeStart: this.onSwipeStart,\n        onSwipeEnd: this.onSwipeEnd,\n        style: this.state.itemListStyle,\n        tolerance: this.props.swipeScrollTolerance\n      };\n      var containerStyles = {};\n\n      if (isHorizontal) {\n        swiperProps.onSwipeLeft = this.onSwipeForward;\n        swiperProps.onSwipeRight = this.onSwipeBackwards;\n\n        if (this.props.dynamicHeight) {\n          var itemHeight = this.getVariableItemHeight(this.state.selectedItem); // swiperProps.style.height = itemHeight || 'auto';\n\n          containerStyles.height = itemHeight || 'auto';\n        }\n      } else {\n        swiperProps.onSwipeUp = this.props.verticalSwipe === 'natural' ? this.onSwipeBackwards : this.onSwipeForward;\n        swiperProps.onSwipeDown = this.props.verticalSwipe === 'natural' ? this.onSwipeForward : this.onSwipeBackwards;\n        swiperProps.style = _objectSpread(_objectSpread({}, swiperProps.style), {}, {\n          height: this.state.itemSize\n        });\n        containerStyles.height = this.state.itemSize;\n      }\n\n      return /*#__PURE__*/_react.default.createElement(\"div\", {\n        \"aria-label\": this.props.ariaLabel,\n        className: _cssClasses.default.ROOT(this.props.className),\n        ref: this.setCarouselWrapperRef,\n        tabIndex: this.props.useKeyboardArrows ? 0 : undefined\n      }, /*#__PURE__*/_react.default.createElement(\"div\", {\n        className: _cssClasses.default.CAROUSEL(true),\n        style: {\n          width: this.props.width\n        }\n      }, this.renderControls(), this.props.renderArrowPrev(this.onClickPrev, hasPrev, this.props.labels.leftArrow), /*#__PURE__*/_react.default.createElement(\"div\", {\n        className: _cssClasses.default.WRAPPER(true, this.props.axis),\n        style: containerStyles\n      }, isSwipeable ? /*#__PURE__*/_react.default.createElement(_reactEasySwipe.default, _extends({\n        tagName: \"ul\",\n        innerRef: this.setListRef\n      }, swiperProps, {\n        allowMouseEvents: this.props.emulateTouch\n      }), this.props.infiniteLoop && lastClone, this.renderItems(), this.props.infiniteLoop && firstClone) : /*#__PURE__*/_react.default.createElement(\"ul\", {\n        className: _cssClasses.default.SLIDER(true, this.state.swiping),\n        ref: function ref(node) {\n          return _this5.setListRef(node);\n        },\n        style: this.state.itemListStyle || {}\n      }, this.props.infiniteLoop && lastClone, this.renderItems(), this.props.infiniteLoop && firstClone)), this.props.renderArrowNext(this.onClickNext, hasNext, this.props.labels.rightArrow), this.renderStatus()), this.renderThumbs());\n    }\n  }]);\n\n  return Carousel;\n}(_react.default.Component);\n\nexports.default = Carousel;\n\n_defineProperty(Carousel, \"displayName\", 'Carousel');\n\n_defineProperty(Carousel, \"defaultProps\", {\n  ariaLabel: undefined,\n  axis: 'horizontal',\n  centerSlidePercentage: 80,\n  interval: 3000,\n  labels: {\n    leftArrow: 'previous slide / item',\n    rightArrow: 'next slide / item',\n    item: 'slide item'\n  },\n  onClickItem: _utils.noop,\n  onClickThumb: _utils.noop,\n  onChange: _utils.noop,\n  onSwipeStart: function onSwipeStart() {},\n  onSwipeEnd: function onSwipeEnd() {},\n  onSwipeMove: function onSwipeMove() {\n    return false;\n  },\n  preventMovementUntilSwipeScrollTolerance: false,\n  renderArrowPrev: function renderArrowPrev(onClickHandler, hasPrev, label) {\n    return /*#__PURE__*/_react.default.createElement(\"button\", {\n      type: \"button\",\n      \"aria-label\": label,\n      className: _cssClasses.default.ARROW_PREV(!hasPrev),\n      onClick: onClickHandler\n    });\n  },\n  renderArrowNext: function renderArrowNext(onClickHandler, hasNext, label) {\n    return /*#__PURE__*/_react.default.createElement(\"button\", {\n      type: \"button\",\n      \"aria-label\": label,\n      className: _cssClasses.default.ARROW_NEXT(!hasNext),\n      onClick: onClickHandler\n    });\n  },\n  renderIndicator: function renderIndicator(onClickHandler, isSelected, index, label) {\n    return /*#__PURE__*/_react.default.createElement(\"li\", {\n      className: _cssClasses.default.DOT(isSelected),\n      onClick: onClickHandler,\n      onKeyDown: onClickHandler,\n      value: index,\n      key: index,\n      role: \"button\",\n      tabIndex: 0,\n      \"aria-label\": \"\".concat(label, \" \").concat(index + 1)\n    });\n  },\n  renderItem: function renderItem(item) {\n    return item;\n  },\n  renderThumbs: function renderThumbs(children) {\n    var images = _react.Children.map(children, function (item) {\n      var img = item; // if the item is not an image, try to find the first image in the item's children.\n\n      if (item.type !== 'img') {\n        img = _react.Children.toArray(item.props.children).find(function (children) {\n          return children.type === 'img';\n        });\n      }\n\n      if (!img) {\n        return undefined;\n      }\n\n      return img;\n    });\n\n    if (images.filter(function (image) {\n      return image;\n    }).length === 0) {\n      console.warn(\"No images found! Can't build the thumb list without images. If you don't need thumbs, set showThumbs={false} in the Carousel. Note that it's not possible to get images rendered inside custom components. More info at https://github.com/leandrowd/react-responsive-carousel/blob/master/TROUBLESHOOTING.md\");\n      return [];\n    }\n\n    return images;\n  },\n  statusFormatter: _utils.defaultStatusFormatter,\n  selectedItem: 0,\n  showArrows: true,\n  showIndicators: true,\n  showStatus: true,\n  showThumbs: true,\n  stopOnHover: true,\n  swipeScrollTolerance: 5,\n  swipeable: true,\n  transitionTime: 350,\n  verticalSwipe: 'standard',\n  width: '100%',\n  animationHandler: 'slide',\n  swipeAnimationHandler: _animations.slideSwipeAnimationHandler,\n  stopSwipingHandler: _animations.slideStopSwipingHandler\n});","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.setPosition = exports.getPosition = exports.isKeyboardEvent = exports.defaultStatusFormatter = exports.noop = void 0;\n\nvar _react = require(\"react\");\n\nvar _CSSTranslate = _interopRequireDefault(require(\"../../CSSTranslate\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar noop = function noop() {};\n\nexports.noop = noop;\n\nvar defaultStatusFormatter = function defaultStatusFormatter(current, total) {\n  return \"\".concat(current, \" of \").concat(total);\n};\n\nexports.defaultStatusFormatter = defaultStatusFormatter;\n\nvar isKeyboardEvent = function isKeyboardEvent(e) {\n  return e ? e.hasOwnProperty('key') : false;\n};\n/**\n * Gets the list 'position' relative to a current index\n * @param index\n */\n\n\nexports.isKeyboardEvent = isKeyboardEvent;\n\nvar getPosition = function getPosition(index, props) {\n  if (props.infiniteLoop) {\n    // index has to be added by 1 because of the first cloned slide\n    ++index;\n  }\n\n  if (index === 0) {\n    return 0;\n  }\n\n  var childrenLength = _react.Children.count(props.children);\n\n  if (props.centerMode && props.axis === 'horizontal') {\n    var currentPosition = -index * props.centerSlidePercentage;\n    var lastPosition = childrenLength - 1;\n\n    if (index && (index !== lastPosition || props.infiniteLoop)) {\n      currentPosition += (100 - props.centerSlidePercentage) / 2;\n    } else if (index === lastPosition) {\n      currentPosition += 100 - props.centerSlidePercentage;\n    }\n\n    return currentPosition;\n  }\n\n  return -index * 100;\n};\n/**\n * Sets the 'position' transform for sliding animations\n * @param position\n * @param forceReflow\n */\n\n\nexports.getPosition = getPosition;\n\nvar setPosition = function setPosition(position, axis) {\n  var style = {};\n  ['WebkitTransform', 'MozTransform', 'MsTransform', 'OTransform', 'transform', 'msTransform'].forEach(function (prop) {\n    // @ts-ignore\n    style[prop] = (0, _CSSTranslate.default)(position, '%', axis);\n  });\n  return style;\n};\n\nexports.setPosition = setPosition;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireWildcard(require(\"react\"));\n\nvar _cssClasses = _interopRequireDefault(require(\"../cssClasses\"));\n\nvar _dimensions = require(\"../dimensions\");\n\nvar _CSSTranslate = _interopRequireDefault(require(\"../CSSTranslate\"));\n\nvar _reactEasySwipe = _interopRequireDefault(require(\"react-easy-swipe\"));\n\nvar _window = _interopRequireDefault(require(\"../shims/window\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _getRequireWildcardCache() { if (typeof WeakMap !== \"function\") return null; var cache = new WeakMap(); _getRequireWildcardCache = function _getRequireWildcardCache() { return cache; }; return cache; }\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== \"object\" && typeof obj !== \"function\") { return { default: obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }\n\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _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); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nvar isKeyboardEvent = function isKeyboardEvent(e) {\n  return e.hasOwnProperty('key');\n};\n\nvar Thumbs = /*#__PURE__*/function (_Component) {\n  _inherits(Thumbs, _Component);\n\n  var _super = _createSuper(Thumbs);\n\n  function Thumbs(_props) {\n    var _this;\n\n    _classCallCheck(this, Thumbs);\n\n    _this = _super.call(this, _props);\n\n    _defineProperty(_assertThisInitialized(_this), \"itemsWrapperRef\", void 0);\n\n    _defineProperty(_assertThisInitialized(_this), \"itemsListRef\", void 0);\n\n    _defineProperty(_assertThisInitialized(_this), \"thumbsRef\", void 0);\n\n    _defineProperty(_assertThisInitialized(_this), \"setItemsWrapperRef\", function (node) {\n      _this.itemsWrapperRef = node;\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"setItemsListRef\", function (node) {\n      _this.itemsListRef = node;\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"setThumbsRef\", function (node, index) {\n      if (!_this.thumbsRef) {\n        _this.thumbsRef = [];\n      }\n\n      _this.thumbsRef[index] = node;\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"updateSizes\", function () {\n      if (!_this.props.children || !_this.itemsWrapperRef || !_this.thumbsRef) {\n        return;\n      }\n\n      var total = _react.Children.count(_this.props.children);\n\n      var wrapperSize = _this.itemsWrapperRef.clientWidth;\n      var itemSize = _this.props.thumbWidth ? _this.props.thumbWidth : (0, _dimensions.outerWidth)(_this.thumbsRef[0]);\n      var visibleItems = Math.floor(wrapperSize / itemSize);\n      var showArrows = visibleItems < total;\n      var lastPosition = showArrows ? total - visibleItems : 0;\n\n      _this.setState(function (_state, props) {\n        return {\n          itemSize: itemSize,\n          visibleItems: visibleItems,\n          firstItem: showArrows ? _this.getFirstItem(props.selectedItem) : 0,\n          lastPosition: lastPosition,\n          showArrows: showArrows\n        };\n      });\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"handleClickItem\", function (index, item, e) {\n      if (!isKeyboardEvent(e) || e.key === 'Enter') {\n        var handler = _this.props.onSelectItem;\n\n        if (typeof handler === 'function') {\n          handler(index, item);\n        }\n      }\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"onSwipeStart\", function () {\n      _this.setState({\n        swiping: true\n      });\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"onSwipeEnd\", function () {\n      _this.setState({\n        swiping: false\n      });\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"onSwipeMove\", function (delta) {\n      var deltaX = delta.x;\n\n      if (!_this.state.itemSize || !_this.itemsWrapperRef || !_this.state.visibleItems) {\n        return false;\n      }\n\n      var leftBoundary = 0;\n\n      var childrenLength = _react.Children.count(_this.props.children);\n\n      var currentPosition = -(_this.state.firstItem * 100) / _this.state.visibleItems;\n      var lastLeftItem = Math.max(childrenLength - _this.state.visibleItems, 0);\n      var lastLeftBoundary = -lastLeftItem * 100 / _this.state.visibleItems; // prevent user from swiping left out of boundaries\n\n      if (currentPosition === leftBoundary && deltaX > 0) {\n        deltaX = 0;\n      } // prevent user from swiping right out of boundaries\n\n\n      if (currentPosition === lastLeftBoundary && deltaX < 0) {\n        deltaX = 0;\n      }\n\n      var wrapperSize = _this.itemsWrapperRef.clientWidth;\n      var position = currentPosition + 100 / (wrapperSize / deltaX); // if 3d isn't available we will use left to move\n\n      if (_this.itemsListRef) {\n        ['WebkitTransform', 'MozTransform', 'MsTransform', 'OTransform', 'transform', 'msTransform'].forEach(function (prop) {\n          _this.itemsListRef.style[prop] = (0, _CSSTranslate.default)(position, '%', _this.props.axis);\n        });\n      }\n\n      return true;\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"slideRight\", function (positions) {\n      _this.moveTo(_this.state.firstItem - (typeof positions === 'number' ? positions : 1));\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"slideLeft\", function (positions) {\n      _this.moveTo(_this.state.firstItem + (typeof positions === 'number' ? positions : 1));\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"moveTo\", function (position) {\n      // position can't be lower than 0\n      position = position < 0 ? 0 : position; // position can't be higher than last postion\n\n      position = position >= _this.state.lastPosition ? _this.state.lastPosition : position;\n\n      _this.setState({\n        firstItem: position\n      });\n    });\n\n    _this.state = {\n      selectedItem: _props.selectedItem,\n      swiping: false,\n      showArrows: false,\n      firstItem: 0,\n      visibleItems: 0,\n      lastPosition: 0\n    };\n    return _this;\n  }\n\n  _createClass(Thumbs, [{\n    key: \"componentDidMount\",\n    value: function componentDidMount() {\n      this.setupThumbs();\n    }\n  }, {\n    key: \"componentDidUpdate\",\n    value: function componentDidUpdate(prevProps) {\n      if (this.props.selectedItem !== this.state.selectedItem) {\n        this.setState({\n          selectedItem: this.props.selectedItem,\n          firstItem: this.getFirstItem(this.props.selectedItem)\n        });\n      }\n\n      if (this.props.children === prevProps.children) {\n        return;\n      } // This will capture any size changes for arrow adjustments etc.\n      // usually in the same render cycle so we don't see any flickers\n\n\n      this.updateSizes();\n    }\n  }, {\n    key: \"componentWillUnmount\",\n    value: function componentWillUnmount() {\n      this.destroyThumbs();\n    }\n  }, {\n    key: \"setupThumbs\",\n    value: function setupThumbs() {\n      // as the widths are calculated, we need to resize\n      // the carousel when the window is resized\n      (0, _window.default)().addEventListener('resize', this.updateSizes); // issue #2 - image loading smaller\n\n      (0, _window.default)().addEventListener('DOMContentLoaded', this.updateSizes); // when the component is rendered we need to calculate\n      // the container size to adjust the responsive behaviour\n\n      this.updateSizes();\n    }\n  }, {\n    key: \"destroyThumbs\",\n    value: function destroyThumbs() {\n      // removing listeners\n      (0, _window.default)().removeEventListener('resize', this.updateSizes);\n      (0, _window.default)().removeEventListener('DOMContentLoaded', this.updateSizes);\n    }\n  }, {\n    key: \"getFirstItem\",\n    value: function getFirstItem(selectedItem) {\n      var firstItem = selectedItem;\n\n      if (selectedItem >= this.state.lastPosition) {\n        firstItem = this.state.lastPosition;\n      }\n\n      if (selectedItem < this.state.firstItem + this.state.visibleItems) {\n        firstItem = this.state.firstItem;\n      }\n\n      if (selectedItem < this.state.firstItem) {\n        firstItem = selectedItem;\n      }\n\n      return firstItem;\n    }\n  }, {\n    key: \"renderItems\",\n    value: function renderItems() {\n      var _this2 = this;\n\n      return this.props.children.map(function (img, index) {\n        var itemClass = _cssClasses.default.ITEM(false, index === _this2.state.selectedItem);\n\n        var thumbProps = {\n          key: index,\n          ref: function ref(e) {\n            return _this2.setThumbsRef(e, index);\n          },\n          className: itemClass,\n          onClick: _this2.handleClickItem.bind(_this2, index, _this2.props.children[index]),\n          onKeyDown: _this2.handleClickItem.bind(_this2, index, _this2.props.children[index]),\n          'aria-label': \"\".concat(_this2.props.labels.item, \" \").concat(index + 1),\n          style: {\n            width: _this2.props.thumbWidth\n          }\n        };\n        return /*#__PURE__*/_react.default.createElement(\"li\", _extends({}, thumbProps, {\n          role: \"button\",\n          tabIndex: 0\n        }), img);\n      });\n    }\n  }, {\n    key: \"render\",\n    value: function render() {\n      var _this3 = this;\n\n      if (!this.props.children) {\n        return null;\n      }\n\n      var isSwipeable = _react.Children.count(this.props.children) > 1; // show left arrow?\n\n      var hasPrev = this.state.showArrows && this.state.firstItem > 0; // show right arrow\n\n      var hasNext = this.state.showArrows && this.state.firstItem < this.state.lastPosition; // obj to hold the transformations and styles\n\n      var itemListStyles = {};\n      var currentPosition = -this.state.firstItem * (this.state.itemSize || 0);\n      var transformProp = (0, _CSSTranslate.default)(currentPosition, 'px', this.props.axis);\n      var transitionTime = this.props.transitionTime + 'ms';\n      itemListStyles = {\n        WebkitTransform: transformProp,\n        MozTransform: transformProp,\n        MsTransform: transformProp,\n        OTransform: transformProp,\n        transform: transformProp,\n        msTransform: transformProp,\n        WebkitTransitionDuration: transitionTime,\n        MozTransitionDuration: transitionTime,\n        MsTransitionDuration: transitionTime,\n        OTransitionDuration: transitionTime,\n        transitionDuration: transitionTime,\n        msTransitionDuration: transitionTime\n      };\n      return /*#__PURE__*/_react.default.createElement(\"div\", {\n        className: _cssClasses.default.CAROUSEL(false)\n      }, /*#__PURE__*/_react.default.createElement(\"div\", {\n        className: _cssClasses.default.WRAPPER(false),\n        ref: this.setItemsWrapperRef\n      }, /*#__PURE__*/_react.default.createElement(\"button\", {\n        type: \"button\",\n        className: _cssClasses.default.ARROW_PREV(!hasPrev),\n        onClick: function onClick() {\n          return _this3.slideRight();\n        },\n        \"aria-label\": this.props.labels.leftArrow\n      }), isSwipeable ? /*#__PURE__*/_react.default.createElement(_reactEasySwipe.default, {\n        tagName: \"ul\",\n        className: _cssClasses.default.SLIDER(false, this.state.swiping),\n        onSwipeLeft: this.slideLeft,\n        onSwipeRight: this.slideRight,\n        onSwipeMove: this.onSwipeMove,\n        onSwipeStart: this.onSwipeStart,\n        onSwipeEnd: this.onSwipeEnd,\n        style: itemListStyles,\n        innerRef: this.setItemsListRef,\n        allowMouseEvents: this.props.emulateTouch\n      }, this.renderItems()) : /*#__PURE__*/_react.default.createElement(\"ul\", {\n        className: _cssClasses.default.SLIDER(false, this.state.swiping),\n        ref: function ref(node) {\n          return _this3.setItemsListRef(node);\n        },\n        style: itemListStyles\n      }, this.renderItems()), /*#__PURE__*/_react.default.createElement(\"button\", {\n        type: \"button\",\n        className: _cssClasses.default.ARROW_NEXT(!hasNext),\n        onClick: function onClick() {\n          return _this3.slideLeft();\n        },\n        \"aria-label\": this.props.labels.rightArrow\n      })));\n    }\n  }]);\n\n  return Thumbs;\n}(_react.Component);\n\nexports.default = Thumbs;\n\n_defineProperty(Thumbs, \"displayName\", 'Thumbs');\n\n_defineProperty(Thumbs, \"defaultProps\", {\n  axis: 'horizontal',\n  labels: {\n    leftArrow: 'previous slide / item',\n    rightArrow: 'next slide / item',\n    item: 'slide item'\n  },\n  selectedItem: 0,\n  thumbWidth: 80,\n  transitionTime: 350\n});","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _classnames = _interopRequireDefault(require(\"classnames\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nvar _default = {\n  ROOT: function ROOT(customClassName) {\n    return (0, _classnames.default)(_defineProperty({\n      'carousel-root': true\n    }, customClassName || '', !!customClassName));\n  },\n  CAROUSEL: function CAROUSEL(isSlider) {\n    return (0, _classnames.default)({\n      carousel: true,\n      'carousel-slider': isSlider\n    });\n  },\n  WRAPPER: function WRAPPER(isSlider, axis) {\n    return (0, _classnames.default)({\n      'thumbs-wrapper': !isSlider,\n      'slider-wrapper': isSlider,\n      'axis-horizontal': axis === 'horizontal',\n      'axis-vertical': axis !== 'horizontal'\n    });\n  },\n  SLIDER: function SLIDER(isSlider, isSwiping) {\n    return (0, _classnames.default)({\n      thumbs: !isSlider,\n      slider: isSlider,\n      animated: !isSwiping\n    });\n  },\n  ITEM: function ITEM(isSlider, selected, previous) {\n    return (0, _classnames.default)({\n      thumb: !isSlider,\n      slide: isSlider,\n      selected: selected,\n      previous: previous\n    });\n  },\n  ARROW_PREV: function ARROW_PREV(disabled) {\n    return (0, _classnames.default)({\n      'control-arrow control-prev': true,\n      'control-disabled': disabled\n    });\n  },\n  ARROW_NEXT: function ARROW_NEXT(disabled) {\n    return (0, _classnames.default)({\n      'control-arrow control-next': true,\n      'control-disabled': disabled\n    });\n  },\n  DOT: function DOT(selected) {\n    return (0, _classnames.default)({\n      dot: true,\n      selected: selected\n    });\n  }\n};\nexports.default = _default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.outerWidth = void 0;\n\nvar outerWidth = function outerWidth(el) {\n  var width = el.offsetWidth;\n  var style = getComputedStyle(el);\n  width += parseInt(style.marginLeft) + parseInt(style.marginRight);\n  return width;\n};\n\nexports.outerWidth = outerWidth;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nObject.defineProperty(exports, \"Carousel\", {\n  enumerable: true,\n  get: function get() {\n    return _Carousel.default;\n  }\n});\nObject.defineProperty(exports, \"CarouselProps\", {\n  enumerable: true,\n  get: function get() {\n    return _types.CarouselProps;\n  }\n});\nObject.defineProperty(exports, \"Thumbs\", {\n  enumerable: true,\n  get: function get() {\n    return _Thumbs.default;\n  }\n});\n\nvar _Carousel = _interopRequireDefault(require(\"./components/Carousel\"));\n\nvar _types = require(\"./components/Carousel/types\");\n\nvar _Thumbs = _interopRequireDefault(require(\"./components/Thumbs\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _default = function _default() {\n  return document;\n};\n\nexports.default = _default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _default = function _default() {\n  return window;\n};\n\nexports.default = _default;","/*!\n  Copyright (c) 2018 Jed Watson.\n  Licensed under the MIT License (MIT), see\n  http://jedwatson.github.io/classnames\n*/\n/* global define */\n\n(function () {\n\t'use strict';\n\n\tvar hasOwn = {}.hasOwnProperty;\n\n\tfunction classNames() {\n\t\tvar classes = [];\n\n\t\tfor (var i = 0; i < arguments.length; i++) {\n\t\t\tvar arg = arguments[i];\n\t\t\tif (!arg) continue;\n\n\t\t\tvar argType = typeof arg;\n\n\t\t\tif (argType === 'string' || argType === 'number') {\n\t\t\t\tclasses.push(arg);\n\t\t\t} else if (Array.isArray(arg)) {\n\t\t\t\tif (arg.length) {\n\t\t\t\t\tvar inner = classNames.apply(null, arg);\n\t\t\t\t\tif (inner) {\n\t\t\t\t\t\tclasses.push(inner);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else if (argType === 'object') {\n\t\t\t\tif (arg.toString === Object.prototype.toString) {\n\t\t\t\t\tfor (var key in arg) {\n\t\t\t\t\t\tif (hasOwn.call(arg, key) && arg[key]) {\n\t\t\t\t\t\t\tclasses.push(key);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tclasses.push(arg.toString());\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn classes.join(' ');\n\t}\n\n\tif (typeof module !== 'undefined' && module.exports) {\n\t\tclassNames.default = classNames;\n\t\tmodule.exports = classNames;\n\t} else if (typeof define === 'function' && typeof define.amd === 'object' && define.amd) {\n\t\t// register as 'classnames', consistent with npm package name\n\t\tdefine('classnames', [], function () {\n\t\t\treturn classNames;\n\t\t});\n\t} else {\n\t\twindow.classNames = classNames;\n\t}\n}());\n","import{createContext as t,useContext as e,useState as n,useReducer as r,useEffect as o}from\"react\";import{jsx as a}from\"react/jsx-runtime\";import{useLocation as l}from\"react-router-dom\";const c=null,s=t(null),i=()=>Object.assign({},e(s)),p=\"SET_LAST_LOCATION\",u=(t,e)=>e.type===p?e.payload:t;const m=[\"key\",\"pathname\",\"search\",\"hash\"],y=[],O=t=>{const e=function(t,e){var n={};for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&e.indexOf(r)<0&&(n[r]=t[r]);if(null!=t&&\"function\"==typeof Object.getOwnPropertySymbols){var o=0;for(r=Object.getOwnPropertySymbols(t);o<r.length;o++)e.indexOf(r[o])<0&&Object.prototype.propertyIsEnumerable.call(t,r[o])&&(n[r[o]]=t[r[o]])}return n}(t,[\"state\"]);y.push(e)},h=t=>y.some((e=>{return n=t,r=e,m.every((t=>n[t]===r[t]));var n,r})),f=({children:t,watchOnlyPathname:e=!1})=>{const[c,i]=n(null),m=l(),[y,f]=r(u,null),v={lastLocation:y,setLastLocation:t=>{f({type:p,payload:t})}},d=()=>{null===m||m===c||e&&(null==c?void 0:c.pathname)===m.pathname||(!(t=>{var e;return Boolean(null===(e=t.state)||void 0===e?void 0:e.preventLastLocation)})(m)||h(m)?v.setLastLocation(c):O(m))};return o((()=>{d(),i(m)}),[m]),a(s.Provider,Object.assign({value:v},{children:t}))};function v(t){return e=>{const n=i();return a(t,Object.assign({},e,{lastLocation:n}))}}export{s as LastLocationContext,f as LastLocationProvider,c as initialState,i as useLastLocation,v as withLastLocation};\n","/**\n * React Router DOM v6.20.0\n *\n * Copyright (c) Remix Software Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE.md file in the root directory of this source tree.\n *\n * @license MIT\n */\nimport * as React from 'react';\nimport * as ReactDOM from 'react-dom';\nimport { UNSAFE_mapRouteProperties, UNSAFE_DataRouterContext, UNSAFE_DataRouterStateContext, Router, UNSAFE_useRoutesImpl, UNSAFE_NavigationContext, useHref, useResolvedPath, useLocation, useNavigate, createPath, UNSAFE_useRouteId, UNSAFE_RouteContext, useMatches, useNavigation, useBlocker } from 'react-router';\nexport { AbortedDeferredError, Await, MemoryRouter, Navigate, NavigationType, Outlet, Route, Router, Routes, UNSAFE_DataRouterContext, UNSAFE_DataRouterStateContext, UNSAFE_LocationContext, UNSAFE_NavigationContext, UNSAFE_RouteContext, UNSAFE_useRouteId, createMemoryRouter, createPath, createRoutesFromChildren, createRoutesFromElements, defer, generatePath, isRouteErrorResponse, json, matchPath, matchRoutes, parsePath, redirect, redirectDocument, renderMatches, resolvePath, useActionData, useAsyncError, useAsyncValue, useBlocker, useHref, useInRouterContext, useLoaderData, useLocation, useMatch, useMatches, useNavigate, useNavigation, useNavigationType, useOutlet, useOutletContext, useParams, useResolvedPath, useRevalidator, useRouteError, useRouteLoaderData, useRoutes } from 'react-router';\nimport { stripBasename, UNSAFE_warning, createRouter, createBrowserHistory, createHashHistory, UNSAFE_ErrorResponseImpl, UNSAFE_invariant, joinPaths, IDLE_FETCHER, matchPath } from '@remix-run/router';\n\nfunction _extends() {\n  _extends = Object.assign ? Object.assign.bind() : function (target) {\n    for (var i = 1; i < arguments.length; i++) {\n      var source = arguments[i];\n      for (var key in source) {\n        if (Object.prototype.hasOwnProperty.call(source, key)) {\n          target[key] = source[key];\n        }\n      }\n    }\n    return target;\n  };\n  return _extends.apply(this, arguments);\n}\nfunction _objectWithoutPropertiesLoose(source, excluded) {\n  if (source == null) return {};\n  var target = {};\n  var sourceKeys = Object.keys(source);\n  var key, i;\n  for (i = 0; i < sourceKeys.length; i++) {\n    key = sourceKeys[i];\n    if (excluded.indexOf(key) >= 0) continue;\n    target[key] = source[key];\n  }\n  return target;\n}\n\nconst defaultMethod = \"get\";\nconst defaultEncType = \"application/x-www-form-urlencoded\";\nfunction isHtmlElement(object) {\n  return object != null && typeof object.tagName === \"string\";\n}\nfunction isButtonElement(object) {\n  return isHtmlElement(object) && object.tagName.toLowerCase() === \"button\";\n}\nfunction isFormElement(object) {\n  return isHtmlElement(object) && object.tagName.toLowerCase() === \"form\";\n}\nfunction isInputElement(object) {\n  return isHtmlElement(object) && object.tagName.toLowerCase() === \"input\";\n}\nfunction isModifiedEvent(event) {\n  return !!(event.metaKey || event.altKey || event.ctrlKey || event.shiftKey);\n}\nfunction shouldProcessLinkClick(event, target) {\n  return event.button === 0 && (\n  // Ignore everything but left clicks\n  !target || target === \"_self\") &&\n  // Let browser handle \"target=_blank\" etc.\n  !isModifiedEvent(event) // Ignore clicks with modifier keys\n  ;\n}\n/**\n * Creates a URLSearchParams object using the given initializer.\n *\n * This is identical to `new URLSearchParams(init)` except it also\n * supports arrays as values in the object form of the initializer\n * instead of just strings. This is convenient when you need multiple\n * values for a given key, but don't want to use an array initializer.\n *\n * For example, instead of:\n *\n *   let searchParams = new URLSearchParams([\n *     ['sort', 'name'],\n *     ['sort', 'price']\n *   ]);\n *\n * you can do:\n *\n *   let searchParams = createSearchParams({\n *     sort: ['name', 'price']\n *   });\n */\nfunction createSearchParams(init) {\n  if (init === void 0) {\n    init = \"\";\n  }\n  return new URLSearchParams(typeof init === \"string\" || Array.isArray(init) || init instanceof URLSearchParams ? init : Object.keys(init).reduce((memo, key) => {\n    let value = init[key];\n    return memo.concat(Array.isArray(value) ? value.map(v => [key, v]) : [[key, value]]);\n  }, []));\n}\nfunction getSearchParamsForLocation(locationSearch, defaultSearchParams) {\n  let searchParams = createSearchParams(locationSearch);\n  if (defaultSearchParams) {\n    // Use `defaultSearchParams.forEach(...)` here instead of iterating of\n    // `defaultSearchParams.keys()` to work-around a bug in Firefox related to\n    // web extensions. Relevant Bugzilla tickets:\n    // https://bugzilla.mozilla.org/show_bug.cgi?id=1414602\n    // https://bugzilla.mozilla.org/show_bug.cgi?id=1023984\n    defaultSearchParams.forEach((_, key) => {\n      if (!searchParams.has(key)) {\n        defaultSearchParams.getAll(key).forEach(value => {\n          searchParams.append(key, value);\n        });\n      }\n    });\n  }\n  return searchParams;\n}\n// One-time check for submitter support\nlet _formDataSupportsSubmitter = null;\nfunction isFormDataSubmitterSupported() {\n  if (_formDataSupportsSubmitter === null) {\n    try {\n      new FormData(document.createElement(\"form\"),\n      // @ts-expect-error if FormData supports the submitter parameter, this will throw\n      0);\n      _formDataSupportsSubmitter = false;\n    } catch (e) {\n      _formDataSupportsSubmitter = true;\n    }\n  }\n  return _formDataSupportsSubmitter;\n}\nconst supportedFormEncTypes = new Set([\"application/x-www-form-urlencoded\", \"multipart/form-data\", \"text/plain\"]);\nfunction getFormEncType(encType) {\n  if (encType != null && !supportedFormEncTypes.has(encType)) {\n    process.env.NODE_ENV !== \"production\" ? UNSAFE_warning(false, \"\\\"\" + encType + \"\\\" is not a valid `encType` for `<Form>`/`<fetcher.Form>` \" + (\"and will default to \\\"\" + defaultEncType + \"\\\"\")) : void 0;\n    return null;\n  }\n  return encType;\n}\nfunction getFormSubmissionInfo(target, basename) {\n  let method;\n  let action;\n  let encType;\n  let formData;\n  let body;\n  if (isFormElement(target)) {\n    // When grabbing the action from the element, it will have had the basename\n    // prefixed to ensure non-JS scenarios work, so strip it since we'll\n    // re-prefix in the router\n    let attr = target.getAttribute(\"action\");\n    action = attr ? stripBasename(attr, basename) : null;\n    method = target.getAttribute(\"method\") || defaultMethod;\n    encType = getFormEncType(target.getAttribute(\"enctype\")) || defaultEncType;\n    formData = new FormData(target);\n  } else if (isButtonElement(target) || isInputElement(target) && (target.type === \"submit\" || target.type === \"image\")) {\n    let form = target.form;\n    if (form == null) {\n      throw new Error(\"Cannot submit a <button> or <input type=\\\"submit\\\"> without a <form>\");\n    }\n    // <button>/<input type=\"submit\"> may override attributes of <form>\n    // When grabbing the action from the element, it will have had the basename\n    // prefixed to ensure non-JS scenarios work, so strip it since we'll\n    // re-prefix in the router\n    let attr = target.getAttribute(\"formaction\") || form.getAttribute(\"action\");\n    action = attr ? stripBasename(attr, basename) : null;\n    method = target.getAttribute(\"formmethod\") || form.getAttribute(\"method\") || defaultMethod;\n    encType = getFormEncType(target.getAttribute(\"formenctype\")) || getFormEncType(form.getAttribute(\"enctype\")) || defaultEncType;\n    // Build a FormData object populated from a form and submitter\n    formData = new FormData(form, target);\n    // If this browser doesn't support the `FormData(el, submitter)` format,\n    // then tack on the submitter value at the end.  This is a lightweight\n    // solution that is not 100% spec compliant.  For complete support in older\n    // browsers, consider using the `formdata-submitter-polyfill` package\n    if (!isFormDataSubmitterSupported()) {\n      let {\n        name,\n        type,\n        value\n      } = target;\n      if (type === \"image\") {\n        let prefix = name ? name + \".\" : \"\";\n        formData.append(prefix + \"x\", \"0\");\n        formData.append(prefix + \"y\", \"0\");\n      } else if (name) {\n        formData.append(name, value);\n      }\n    }\n  } else if (isHtmlElement(target)) {\n    throw new Error(\"Cannot submit element that is not <form>, <button>, or \" + \"<input type=\\\"submit|image\\\">\");\n  } else {\n    method = defaultMethod;\n    action = null;\n    encType = defaultEncType;\n    body = target;\n  }\n  // Send body for <Form encType=\"text/plain\" so we encode it into text\n  if (formData && encType === \"text/plain\") {\n    body = formData;\n    formData = undefined;\n  }\n  return {\n    action,\n    method: method.toLowerCase(),\n    encType,\n    formData,\n    body\n  };\n}\n\nconst _excluded = [\"onClick\", \"relative\", \"reloadDocument\", \"replace\", \"state\", \"target\", \"to\", \"preventScrollReset\", \"unstable_viewTransition\"],\n  _excluded2 = [\"aria-current\", \"caseSensitive\", \"className\", \"end\", \"style\", \"to\", \"unstable_viewTransition\", \"children\"],\n  _excluded3 = [\"fetcherKey\", \"navigate\", \"reloadDocument\", \"replace\", \"state\", \"method\", \"action\", \"onSubmit\", \"relative\", \"preventScrollReset\", \"unstable_viewTransition\"];\nfunction createBrowserRouter(routes, opts) {\n  return createRouter({\n    basename: opts == null ? void 0 : opts.basename,\n    future: _extends({}, opts == null ? void 0 : opts.future, {\n      v7_prependBasename: true\n    }),\n    history: createBrowserHistory({\n      window: opts == null ? void 0 : opts.window\n    }),\n    hydrationData: (opts == null ? void 0 : opts.hydrationData) || parseHydrationData(),\n    routes,\n    mapRouteProperties: UNSAFE_mapRouteProperties,\n    window: opts == null ? void 0 : opts.window\n  }).initialize();\n}\nfunction createHashRouter(routes, opts) {\n  return createRouter({\n    basename: opts == null ? void 0 : opts.basename,\n    future: _extends({}, opts == null ? void 0 : opts.future, {\n      v7_prependBasename: true\n    }),\n    history: createHashHistory({\n      window: opts == null ? void 0 : opts.window\n    }),\n    hydrationData: (opts == null ? void 0 : opts.hydrationData) || parseHydrationData(),\n    routes,\n    mapRouteProperties: UNSAFE_mapRouteProperties,\n    window: opts == null ? void 0 : opts.window\n  }).initialize();\n}\nfunction parseHydrationData() {\n  var _window;\n  let state = (_window = window) == null ? void 0 : _window.__staticRouterHydrationData;\n  if (state && state.errors) {\n    state = _extends({}, state, {\n      errors: deserializeErrors(state.errors)\n    });\n  }\n  return state;\n}\nfunction deserializeErrors(errors) {\n  if (!errors) return null;\n  let entries = Object.entries(errors);\n  let serialized = {};\n  for (let [key, val] of entries) {\n    // Hey you!  If you change this, please change the corresponding logic in\n    // serializeErrors in react-router-dom/server.tsx :)\n    if (val && val.__type === \"RouteErrorResponse\") {\n      serialized[key] = new UNSAFE_ErrorResponseImpl(val.status, val.statusText, val.data, val.internal === true);\n    } else if (val && val.__type === \"Error\") {\n      // Attempt to reconstruct the right type of Error (i.e., ReferenceError)\n      if (val.__subType) {\n        let ErrorConstructor = window[val.__subType];\n        if (typeof ErrorConstructor === \"function\") {\n          try {\n            // @ts-expect-error\n            let error = new ErrorConstructor(val.message);\n            // Wipe away the client-side stack trace.  Nothing to fill it in with\n            // because we don't serialize SSR stack traces for security reasons\n            error.stack = \"\";\n            serialized[key] = error;\n          } catch (e) {\n            // no-op - fall through and create a normal Error\n          }\n        }\n      }\n      if (serialized[key] == null) {\n        let error = new Error(val.message);\n        // Wipe away the client-side stack trace.  Nothing to fill it in with\n        // because we don't serialize SSR stack traces for security reasons\n        error.stack = \"\";\n        serialized[key] = error;\n      }\n    } else {\n      serialized[key] = val;\n    }\n  }\n  return serialized;\n}\nconst ViewTransitionContext = /*#__PURE__*/React.createContext({\n  isTransitioning: false\n});\nif (process.env.NODE_ENV !== \"production\") {\n  ViewTransitionContext.displayName = \"ViewTransition\";\n}\nconst FetchersContext = /*#__PURE__*/React.createContext(new Map());\nif (process.env.NODE_ENV !== \"production\") {\n  FetchersContext.displayName = \"Fetchers\";\n}\n//#endregion\n////////////////////////////////////////////////////////////////////////////////\n//#region Components\n////////////////////////////////////////////////////////////////////////////////\n/**\n  Webpack + React 17 fails to compile on any of the following because webpack\n  complains that `startTransition` doesn't exist in `React`:\n  * import { startTransition } from \"react\"\n  * import * as React from from \"react\";\n    \"startTransition\" in React ? React.startTransition(() => setState()) : setState()\n  * import * as React from from \"react\";\n    \"startTransition\" in React ? React[\"startTransition\"](() => setState()) : setState()\n\n  Moving it to a constant such as the following solves the Webpack/React 17 issue:\n  * import * as React from from \"react\";\n    const START_TRANSITION = \"startTransition\";\n    START_TRANSITION in React ? React[START_TRANSITION](() => setState()) : setState()\n\n  However, that introduces webpack/terser minification issues in production builds\n  in React 18 where minification/obfuscation ends up removing the call of\n  React.startTransition entirely from the first half of the ternary.  Grabbing\n  this exported reference once up front resolves that issue.\n\n  See https://github.com/remix-run/react-router/issues/10579\n*/\nconst START_TRANSITION = \"startTransition\";\nconst startTransitionImpl = React[START_TRANSITION];\nconst FLUSH_SYNC = \"flushSync\";\nconst flushSyncImpl = ReactDOM[FLUSH_SYNC];\nfunction startTransitionSafe(cb) {\n  if (startTransitionImpl) {\n    startTransitionImpl(cb);\n  } else {\n    cb();\n  }\n}\nfunction flushSyncSafe(cb) {\n  if (flushSyncImpl) {\n    flushSyncImpl(cb);\n  } else {\n    cb();\n  }\n}\nclass Deferred {\n  constructor() {\n    this.status = \"pending\";\n    this.promise = new Promise((resolve, reject) => {\n      this.resolve = value => {\n        if (this.status === \"pending\") {\n          this.status = \"resolved\";\n          resolve(value);\n        }\n      };\n      this.reject = reason => {\n        if (this.status === \"pending\") {\n          this.status = \"rejected\";\n          reject(reason);\n        }\n      };\n    });\n  }\n}\n/**\n * Given a Remix Router instance, render the appropriate UI\n */\nfunction RouterProvider(_ref) {\n  let {\n    fallbackElement,\n    router,\n    future\n  } = _ref;\n  let [state, setStateImpl] = React.useState(router.state);\n  let [pendingState, setPendingState] = React.useState();\n  let [vtContext, setVtContext] = React.useState({\n    isTransitioning: false\n  });\n  let [renderDfd, setRenderDfd] = React.useState();\n  let [transition, setTransition] = React.useState();\n  let [interruption, setInterruption] = React.useState();\n  let fetcherData = React.useRef(new Map());\n  let {\n    v7_startTransition\n  } = future || {};\n  let optInStartTransition = React.useCallback(cb => {\n    if (v7_startTransition) {\n      startTransitionSafe(cb);\n    } else {\n      cb();\n    }\n  }, [v7_startTransition]);\n  let setState = React.useCallback((newState, _ref2) => {\n    let {\n      deletedFetchers,\n      unstable_flushSync: flushSync,\n      unstable_viewTransitionOpts: viewTransitionOpts\n    } = _ref2;\n    deletedFetchers.forEach(key => fetcherData.current.delete(key));\n    newState.fetchers.forEach((fetcher, key) => {\n      if (fetcher.data !== undefined) {\n        fetcherData.current.set(key, fetcher.data);\n      }\n    });\n    let isViewTransitionUnavailable = router.window == null || typeof router.window.document.startViewTransition !== \"function\";\n    // If this isn't a view transition or it's not available in this browser,\n    // just update and be done with it\n    if (!viewTransitionOpts || isViewTransitionUnavailable) {\n      if (flushSync) {\n        flushSyncSafe(() => setStateImpl(newState));\n      } else {\n        optInStartTransition(() => setStateImpl(newState));\n      }\n      return;\n    }\n    // flushSync + startViewTransition\n    if (flushSync) {\n      // Flush through the context to mark DOM elements as transition=ing\n      flushSyncSafe(() => {\n        // Cancel any pending transitions\n        if (transition) {\n          renderDfd && renderDfd.resolve();\n          transition.skipTransition();\n        }\n        setVtContext({\n          isTransitioning: true,\n          flushSync: true,\n          currentLocation: viewTransitionOpts.currentLocation,\n          nextLocation: viewTransitionOpts.nextLocation\n        });\n      });\n      // Update the DOM\n      let t = router.window.document.startViewTransition(() => {\n        flushSyncSafe(() => setStateImpl(newState));\n      });\n      // Clean up after the animation completes\n      t.finished.finally(() => {\n        flushSyncSafe(() => {\n          setRenderDfd(undefined);\n          setTransition(undefined);\n          setPendingState(undefined);\n          setVtContext({\n            isTransitioning: false\n          });\n        });\n      });\n      flushSyncSafe(() => setTransition(t));\n      return;\n    }\n    // startTransition + startViewTransition\n    if (transition) {\n      // Interrupting an in-progress transition, cancel and let everything flush\n      // out, and then kick off a new transition from the interruption state\n      renderDfd && renderDfd.resolve();\n      transition.skipTransition();\n      setInterruption({\n        state: newState,\n        currentLocation: viewTransitionOpts.currentLocation,\n        nextLocation: viewTransitionOpts.nextLocation\n      });\n    } else {\n      // Completed navigation update with opted-in view transitions, let 'er rip\n      setPendingState(newState);\n      setVtContext({\n        isTransitioning: true,\n        flushSync: false,\n        currentLocation: viewTransitionOpts.currentLocation,\n        nextLocation: viewTransitionOpts.nextLocation\n      });\n    }\n  }, [router.window, transition, renderDfd, fetcherData, optInStartTransition]);\n  // Need to use a layout effect here so we are subscribed early enough to\n  // pick up on any render-driven redirects/navigations (useEffect/<Navigate>)\n  React.useLayoutEffect(() => router.subscribe(setState), [router, setState]);\n  // When we start a view transition, create a Deferred we can use for the\n  // eventual \"completed\" render\n  React.useEffect(() => {\n    if (vtContext.isTransitioning && !vtContext.flushSync) {\n      setRenderDfd(new Deferred());\n    }\n  }, [vtContext]);\n  // Once the deferred is created, kick off startViewTransition() to update the\n  // DOM and then wait on the Deferred to resolve (indicating the DOM update has\n  // happened)\n  React.useEffect(() => {\n    if (renderDfd && pendingState && router.window) {\n      let newState = pendingState;\n      let renderPromise = renderDfd.promise;\n      let transition = router.window.document.startViewTransition(async () => {\n        optInStartTransition(() => setStateImpl(newState));\n        await renderPromise;\n      });\n      transition.finished.finally(() => {\n        setRenderDfd(undefined);\n        setTransition(undefined);\n        setPendingState(undefined);\n        setVtContext({\n          isTransitioning: false\n        });\n      });\n      setTransition(transition);\n    }\n  }, [optInStartTransition, pendingState, renderDfd, router.window]);\n  // When the new location finally renders and is committed to the DOM, this\n  // effect will run to resolve the transition\n  React.useEffect(() => {\n    if (renderDfd && pendingState && state.location.key === pendingState.location.key) {\n      renderDfd.resolve();\n    }\n  }, [renderDfd, transition, state.location, pendingState]);\n  // If we get interrupted with a new navigation during a transition, we skip\n  // the active transition, let it cleanup, then kick it off again here\n  React.useEffect(() => {\n    if (!vtContext.isTransitioning && interruption) {\n      setPendingState(interruption.state);\n      setVtContext({\n        isTransitioning: true,\n        flushSync: false,\n        currentLocation: interruption.currentLocation,\n        nextLocation: interruption.nextLocation\n      });\n      setInterruption(undefined);\n    }\n  }, [vtContext.isTransitioning, interruption]);\n  let navigator = React.useMemo(() => {\n    return {\n      createHref: router.createHref,\n      encodeLocation: router.encodeLocation,\n      go: n => router.navigate(n),\n      push: (to, state, opts) => router.navigate(to, {\n        state,\n        preventScrollReset: opts == null ? void 0 : opts.preventScrollReset\n      }),\n      replace: (to, state, opts) => router.navigate(to, {\n        replace: true,\n        state,\n        preventScrollReset: opts == null ? void 0 : opts.preventScrollReset\n      })\n    };\n  }, [router]);\n  let basename = router.basename || \"/\";\n  let dataRouterContext = React.useMemo(() => ({\n    router,\n    navigator,\n    static: false,\n    basename\n  }), [router, navigator, basename]);\n  // The fragment and {null} here are important!  We need them to keep React 18's\n  // useId happy when we are server-rendering since we may have a <script> here\n  // containing the hydrated server-side staticContext (from StaticRouterProvider).\n  // useId relies on the component tree structure to generate deterministic id's\n  // so we need to ensure it remains the same on the client even though\n  // we don't need the <script> tag\n  return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(UNSAFE_DataRouterContext.Provider, {\n    value: dataRouterContext\n  }, /*#__PURE__*/React.createElement(UNSAFE_DataRouterStateContext.Provider, {\n    value: state\n  }, /*#__PURE__*/React.createElement(FetchersContext.Provider, {\n    value: fetcherData.current\n  }, /*#__PURE__*/React.createElement(ViewTransitionContext.Provider, {\n    value: vtContext\n  }, /*#__PURE__*/React.createElement(Router, {\n    basename: basename,\n    location: state.location,\n    navigationType: state.historyAction,\n    navigator: navigator\n  }, state.initialized ? /*#__PURE__*/React.createElement(DataRoutes, {\n    routes: router.routes,\n    state: state\n  }) : fallbackElement))))), null);\n}\nfunction DataRoutes(_ref3) {\n  let {\n    routes,\n    state\n  } = _ref3;\n  return UNSAFE_useRoutesImpl(routes, undefined, state);\n}\n/**\n * A `<Router>` for use in web browsers. Provides the cleanest URLs.\n */\nfunction BrowserRouter(_ref4) {\n  let {\n    basename,\n    children,\n    future,\n    window\n  } = _ref4;\n  let historyRef = React.useRef();\n  if (historyRef.current == null) {\n    historyRef.current = createBrowserHistory({\n      window,\n      v5Compat: true\n    });\n  }\n  let history = historyRef.current;\n  let [state, setStateImpl] = React.useState({\n    action: history.action,\n    location: history.location\n  });\n  let {\n    v7_startTransition\n  } = future || {};\n  let setState = React.useCallback(newState => {\n    v7_startTransition && startTransitionImpl ? startTransitionImpl(() => setStateImpl(newState)) : setStateImpl(newState);\n  }, [setStateImpl, v7_startTransition]);\n  React.useLayoutEffect(() => history.listen(setState), [history, setState]);\n  return /*#__PURE__*/React.createElement(Router, {\n    basename: basename,\n    children: children,\n    location: state.location,\n    navigationType: state.action,\n    navigator: history\n  });\n}\n/**\n * A `<Router>` for use in web browsers. Stores the location in the hash\n * portion of the URL so it is not sent to the server.\n */\nfunction HashRouter(_ref5) {\n  let {\n    basename,\n    children,\n    future,\n    window\n  } = _ref5;\n  let historyRef = React.useRef();\n  if (historyRef.current == null) {\n    historyRef.current = createHashHistory({\n      window,\n      v5Compat: true\n    });\n  }\n  let history = historyRef.current;\n  let [state, setStateImpl] = React.useState({\n    action: history.action,\n    location: history.location\n  });\n  let {\n    v7_startTransition\n  } = future || {};\n  let setState = React.useCallback(newState => {\n    v7_startTransition && startTransitionImpl ? startTransitionImpl(() => setStateImpl(newState)) : setStateImpl(newState);\n  }, [setStateImpl, v7_startTransition]);\n  React.useLayoutEffect(() => history.listen(setState), [history, setState]);\n  return /*#__PURE__*/React.createElement(Router, {\n    basename: basename,\n    children: children,\n    location: state.location,\n    navigationType: state.action,\n    navigator: history\n  });\n}\n/**\n * A `<Router>` that accepts a pre-instantiated history object. It's important\n * to note that using your own history object is highly discouraged and may add\n * two versions of the history library to your bundles unless you use the same\n * version of the history library that React Router uses internally.\n */\nfunction HistoryRouter(_ref6) {\n  let {\n    basename,\n    children,\n    future,\n    history\n  } = _ref6;\n  let [state, setStateImpl] = React.useState({\n    action: history.action,\n    location: history.location\n  });\n  let {\n    v7_startTransition\n  } = future || {};\n  let setState = React.useCallback(newState => {\n    v7_startTransition && startTransitionImpl ? startTransitionImpl(() => setStateImpl(newState)) : setStateImpl(newState);\n  }, [setStateImpl, v7_startTransition]);\n  React.useLayoutEffect(() => history.listen(setState), [history, setState]);\n  return /*#__PURE__*/React.createElement(Router, {\n    basename: basename,\n    children: children,\n    location: state.location,\n    navigationType: state.action,\n    navigator: history\n  });\n}\nif (process.env.NODE_ENV !== \"production\") {\n  HistoryRouter.displayName = \"unstable_HistoryRouter\";\n}\nconst isBrowser = typeof window !== \"undefined\" && typeof window.document !== \"undefined\" && typeof window.document.createElement !== \"undefined\";\nconst ABSOLUTE_URL_REGEX = /^(?:[a-z][a-z0-9+.-]*:|\\/\\/)/i;\n/**\n * The public API for rendering a history-aware `<a>`.\n */\nconst Link = /*#__PURE__*/React.forwardRef(function LinkWithRef(_ref7, ref) {\n  let {\n      onClick,\n      relative,\n      reloadDocument,\n      replace,\n      state,\n      target,\n      to,\n      preventScrollReset,\n      unstable_viewTransition\n    } = _ref7,\n    rest = _objectWithoutPropertiesLoose(_ref7, _excluded);\n  let {\n    basename\n  } = React.useContext(UNSAFE_NavigationContext);\n  // Rendered into <a href> for absolute URLs\n  let absoluteHref;\n  let isExternal = false;\n  if (typeof to === \"string\" && ABSOLUTE_URL_REGEX.test(to)) {\n    // Render the absolute href server- and client-side\n    absoluteHref = to;\n    // Only check for external origins client-side\n    if (isBrowser) {\n      try {\n        let currentUrl = new URL(window.location.href);\n        let targetUrl = to.startsWith(\"//\") ? new URL(currentUrl.protocol + to) : new URL(to);\n        let path = stripBasename(targetUrl.pathname, basename);\n        if (targetUrl.origin === currentUrl.origin && path != null) {\n          // Strip the protocol/origin/basename for same-origin absolute URLs\n          to = path + targetUrl.search + targetUrl.hash;\n        } else {\n          isExternal = true;\n        }\n      } catch (e) {\n        // We can't do external URL detection without a valid URL\n        process.env.NODE_ENV !== \"production\" ? UNSAFE_warning(false, \"<Link to=\\\"\" + to + \"\\\"> contains an invalid URL which will probably break \" + \"when clicked - please update to a valid URL path.\") : void 0;\n      }\n    }\n  }\n  // Rendered into <a href> for relative URLs\n  let href = useHref(to, {\n    relative\n  });\n  let internalOnClick = useLinkClickHandler(to, {\n    replace,\n    state,\n    target,\n    preventScrollReset,\n    relative,\n    unstable_viewTransition\n  });\n  function handleClick(event) {\n    if (onClick) onClick(event);\n    if (!event.defaultPrevented) {\n      internalOnClick(event);\n    }\n  }\n  return (\n    /*#__PURE__*/\n    // eslint-disable-next-line jsx-a11y/anchor-has-content\n    React.createElement(\"a\", _extends({}, rest, {\n      href: absoluteHref || href,\n      onClick: isExternal || reloadDocument ? onClick : handleClick,\n      ref: ref,\n      target: target\n    }))\n  );\n});\nif (process.env.NODE_ENV !== \"production\") {\n  Link.displayName = \"Link\";\n}\n/**\n * A `<Link>` wrapper that knows if it's \"active\" or not.\n */\nconst NavLink = /*#__PURE__*/React.forwardRef(function NavLinkWithRef(_ref8, ref) {\n  let {\n      \"aria-current\": ariaCurrentProp = \"page\",\n      caseSensitive = false,\n      className: classNameProp = \"\",\n      end = false,\n      style: styleProp,\n      to,\n      unstable_viewTransition,\n      children\n    } = _ref8,\n    rest = _objectWithoutPropertiesLoose(_ref8, _excluded2);\n  let path = useResolvedPath(to, {\n    relative: rest.relative\n  });\n  let location = useLocation();\n  let routerState = React.useContext(UNSAFE_DataRouterStateContext);\n  let {\n    navigator\n  } = React.useContext(UNSAFE_NavigationContext);\n  let isTransitioning = routerState != null &&\n  // Conditional usage is OK here because the usage of a data router is static\n  // eslint-disable-next-line react-hooks/rules-of-hooks\n  useViewTransitionState(path) && unstable_viewTransition === true;\n  let toPathname = navigator.encodeLocation ? navigator.encodeLocation(path).pathname : path.pathname;\n  let locationPathname = location.pathname;\n  let nextLocationPathname = routerState && routerState.navigation && routerState.navigation.location ? routerState.navigation.location.pathname : null;\n  if (!caseSensitive) {\n    locationPathname = locationPathname.toLowerCase();\n    nextLocationPathname = nextLocationPathname ? nextLocationPathname.toLowerCase() : null;\n    toPathname = toPathname.toLowerCase();\n  }\n  // If the `to` has a trailing slash, look at that exact spot.  Otherwise,\n  // we're looking for a slash _after_ what's in `to`.  For example:\n  //\n  // <NavLink to=\"/users\"> and <NavLink to=\"/users/\">\n  // both want to look for a / at index 6 to match URL `/users/matt`\n  const endSlashPosition = toPathname !== \"/\" && toPathname.endsWith(\"/\") ? toPathname.length - 1 : toPathname.length;\n  let isActive = locationPathname === toPathname || !end && locationPathname.startsWith(toPathname) && locationPathname.charAt(endSlashPosition) === \"/\";\n  let isPending = nextLocationPathname != null && (nextLocationPathname === toPathname || !end && nextLocationPathname.startsWith(toPathname) && nextLocationPathname.charAt(toPathname.length) === \"/\");\n  let renderProps = {\n    isActive,\n    isPending,\n    isTransitioning\n  };\n  let ariaCurrent = isActive ? ariaCurrentProp : undefined;\n  let className;\n  if (typeof classNameProp === \"function\") {\n    className = classNameProp(renderProps);\n  } else {\n    // If the className prop is not a function, we use a default `active`\n    // class for <NavLink />s that are active. In v5 `active` was the default\n    // value for `activeClassName`, but we are removing that API and can still\n    // use the old default behavior for a cleaner upgrade path and keep the\n    // simple styling rules working as they currently do.\n    className = [classNameProp, isActive ? \"active\" : null, isPending ? \"pending\" : null, isTransitioning ? \"transitioning\" : null].filter(Boolean).join(\" \");\n  }\n  let style = typeof styleProp === \"function\" ? styleProp(renderProps) : styleProp;\n  return /*#__PURE__*/React.createElement(Link, _extends({}, rest, {\n    \"aria-current\": ariaCurrent,\n    className: className,\n    ref: ref,\n    style: style,\n    to: to,\n    unstable_viewTransition: unstable_viewTransition\n  }), typeof children === \"function\" ? children(renderProps) : children);\n});\nif (process.env.NODE_ENV !== \"production\") {\n  NavLink.displayName = \"NavLink\";\n}\n/**\n * A `@remix-run/router`-aware `<form>`. It behaves like a normal form except\n * that the interaction with the server is with `fetch` instead of new document\n * requests, allowing components to add nicer UX to the page as the form is\n * submitted and returns with data.\n */\nconst Form = /*#__PURE__*/React.forwardRef((_ref9, forwardedRef) => {\n  let {\n      fetcherKey,\n      navigate,\n      reloadDocument,\n      replace,\n      state,\n      method = defaultMethod,\n      action,\n      onSubmit,\n      relative,\n      preventScrollReset,\n      unstable_viewTransition\n    } = _ref9,\n    props = _objectWithoutPropertiesLoose(_ref9, _excluded3);\n  let submit = useSubmit();\n  let formAction = useFormAction(action, {\n    relative\n  });\n  let formMethod = method.toLowerCase() === \"get\" ? \"get\" : \"post\";\n  let submitHandler = event => {\n    onSubmit && onSubmit(event);\n    if (event.defaultPrevented) return;\n    event.preventDefault();\n    let submitter = event.nativeEvent.submitter;\n    let submitMethod = (submitter == null ? void 0 : submitter.getAttribute(\"formmethod\")) || method;\n    submit(submitter || event.currentTarget, {\n      fetcherKey,\n      method: submitMethod,\n      navigate,\n      replace,\n      state,\n      relative,\n      preventScrollReset,\n      unstable_viewTransition\n    });\n  };\n  return /*#__PURE__*/React.createElement(\"form\", _extends({\n    ref: forwardedRef,\n    method: formMethod,\n    action: formAction,\n    onSubmit: reloadDocument ? onSubmit : submitHandler\n  }, props));\n});\nif (process.env.NODE_ENV !== \"production\") {\n  Form.displayName = \"Form\";\n}\n/**\n * This component will emulate the browser's scroll restoration on location\n * changes.\n */\nfunction ScrollRestoration(_ref10) {\n  let {\n    getKey,\n    storageKey\n  } = _ref10;\n  useScrollRestoration({\n    getKey,\n    storageKey\n  });\n  return null;\n}\nif (process.env.NODE_ENV !== \"production\") {\n  ScrollRestoration.displayName = \"ScrollRestoration\";\n}\n//#endregion\n////////////////////////////////////////////////////////////////////////////////\n//#region Hooks\n////////////////////////////////////////////////////////////////////////////////\nvar DataRouterHook;\n(function (DataRouterHook) {\n  DataRouterHook[\"UseScrollRestoration\"] = \"useScrollRestoration\";\n  DataRouterHook[\"UseSubmit\"] = \"useSubmit\";\n  DataRouterHook[\"UseSubmitFetcher\"] = \"useSubmitFetcher\";\n  DataRouterHook[\"UseFetcher\"] = \"useFetcher\";\n  DataRouterHook[\"useViewTransitionState\"] = \"useViewTransitionState\";\n})(DataRouterHook || (DataRouterHook = {}));\nvar DataRouterStateHook;\n(function (DataRouterStateHook) {\n  DataRouterStateHook[\"UseFetcher\"] = \"useFetcher\";\n  DataRouterStateHook[\"UseFetchers\"] = \"useFetchers\";\n  DataRouterStateHook[\"UseScrollRestoration\"] = \"useScrollRestoration\";\n})(DataRouterStateHook || (DataRouterStateHook = {}));\n// Internal hooks\nfunction getDataRouterConsoleError(hookName) {\n  return hookName + \" must be used within a data router.  See https://reactrouter.com/routers/picking-a-router.\";\n}\nfunction useDataRouterContext(hookName) {\n  let ctx = React.useContext(UNSAFE_DataRouterContext);\n  !ctx ? process.env.NODE_ENV !== \"production\" ? UNSAFE_invariant(false, getDataRouterConsoleError(hookName)) : UNSAFE_invariant(false) : void 0;\n  return ctx;\n}\nfunction useDataRouterState(hookName) {\n  let state = React.useContext(UNSAFE_DataRouterStateContext);\n  !state ? process.env.NODE_ENV !== \"production\" ? UNSAFE_invariant(false, getDataRouterConsoleError(hookName)) : UNSAFE_invariant(false) : void 0;\n  return state;\n}\n// External hooks\n/**\n * Handles the click behavior for router `<Link>` components. This is useful if\n * you need to create custom `<Link>` components with the same click behavior we\n * use in our exported `<Link>`.\n */\nfunction useLinkClickHandler(to, _temp) {\n  let {\n    target,\n    replace: replaceProp,\n    state,\n    preventScrollReset,\n    relative,\n    unstable_viewTransition\n  } = _temp === void 0 ? {} : _temp;\n  let navigate = useNavigate();\n  let location = useLocation();\n  let path = useResolvedPath(to, {\n    relative\n  });\n  return React.useCallback(event => {\n    if (shouldProcessLinkClick(event, target)) {\n      event.preventDefault();\n      // If the URL hasn't changed, a regular <a> will do a replace instead of\n      // a push, so do the same here unless the replace prop is explicitly set\n      let replace = replaceProp !== undefined ? replaceProp : createPath(location) === createPath(path);\n      navigate(to, {\n        replace,\n        state,\n        preventScrollReset,\n        relative,\n        unstable_viewTransition\n      });\n    }\n  }, [location, navigate, path, replaceProp, state, target, to, preventScrollReset, relative, unstable_viewTransition]);\n}\n/**\n * A convenient wrapper for reading and writing search parameters via the\n * URLSearchParams interface.\n */\nfunction useSearchParams(defaultInit) {\n  process.env.NODE_ENV !== \"production\" ? UNSAFE_warning(typeof URLSearchParams !== \"undefined\", \"You cannot use the `useSearchParams` hook in a browser that does not \" + \"support the URLSearchParams API. If you need to support Internet \" + \"Explorer 11, we recommend you load a polyfill such as \" + \"https://github.com/ungap/url-search-params\\n\\n\" + \"If you're unsure how to load polyfills, we recommend you check out \" + \"https://polyfill.io/v3/ which provides some recommendations about how \" + \"to load polyfills only for users that need them, instead of for every \" + \"user.\") : void 0;\n  let defaultSearchParamsRef = React.useRef(createSearchParams(defaultInit));\n  let hasSetSearchParamsRef = React.useRef(false);\n  let location = useLocation();\n  let searchParams = React.useMemo(() =>\n  // Only merge in the defaults if we haven't yet called setSearchParams.\n  // Once we call that we want those to take precedence, otherwise you can't\n  // remove a param with setSearchParams({}) if it has an initial value\n  getSearchParamsForLocation(location.search, hasSetSearchParamsRef.current ? null : defaultSearchParamsRef.current), [location.search]);\n  let navigate = useNavigate();\n  let setSearchParams = React.useCallback((nextInit, navigateOptions) => {\n    const newSearchParams = createSearchParams(typeof nextInit === \"function\" ? nextInit(searchParams) : nextInit);\n    hasSetSearchParamsRef.current = true;\n    navigate(\"?\" + newSearchParams, navigateOptions);\n  }, [navigate, searchParams]);\n  return [searchParams, setSearchParams];\n}\nfunction validateClientSideSubmission() {\n  if (typeof document === \"undefined\") {\n    throw new Error(\"You are calling submit during the server render. \" + \"Try calling submit within a `useEffect` or callback instead.\");\n  }\n}\nlet fetcherId = 0;\nlet getUniqueFetcherId = () => \"__\" + String(++fetcherId) + \"__\";\n/**\n * Returns a function that may be used to programmatically submit a form (or\n * some arbitrary data) to the server.\n */\nfunction useSubmit() {\n  let {\n    router\n  } = useDataRouterContext(DataRouterHook.UseSubmit);\n  let {\n    basename\n  } = React.useContext(UNSAFE_NavigationContext);\n  let currentRouteId = UNSAFE_useRouteId();\n  return React.useCallback(function (target, options) {\n    if (options === void 0) {\n      options = {};\n    }\n    validateClientSideSubmission();\n    let {\n      action,\n      method,\n      encType,\n      formData,\n      body\n    } = getFormSubmissionInfo(target, basename);\n    if (options.navigate === false) {\n      let key = options.fetcherKey || getUniqueFetcherId();\n      router.fetch(key, currentRouteId, options.action || action, {\n        preventScrollReset: options.preventScrollReset,\n        formData,\n        body,\n        formMethod: options.method || method,\n        formEncType: options.encType || encType,\n        unstable_flushSync: options.unstable_flushSync\n      });\n    } else {\n      router.navigate(options.action || action, {\n        preventScrollReset: options.preventScrollReset,\n        formData,\n        body,\n        formMethod: options.method || method,\n        formEncType: options.encType || encType,\n        replace: options.replace,\n        state: options.state,\n        fromRouteId: currentRouteId,\n        unstable_flushSync: options.unstable_flushSync,\n        unstable_viewTransition: options.unstable_viewTransition\n      });\n    }\n  }, [router, basename, currentRouteId]);\n}\n// v7: Eventually we should deprecate this entirely in favor of using the\n// router method directly?\nfunction useFormAction(action, _temp2) {\n  let {\n    relative\n  } = _temp2 === void 0 ? {} : _temp2;\n  let {\n    basename\n  } = React.useContext(UNSAFE_NavigationContext);\n  let routeContext = React.useContext(UNSAFE_RouteContext);\n  !routeContext ? process.env.NODE_ENV !== \"production\" ? UNSAFE_invariant(false, \"useFormAction must be used inside a RouteContext\") : UNSAFE_invariant(false) : void 0;\n  let [match] = routeContext.matches.slice(-1);\n  // Shallow clone path so we can modify it below, otherwise we modify the\n  // object referenced by useMemo inside useResolvedPath\n  let path = _extends({}, useResolvedPath(action ? action : \".\", {\n    relative\n  }));\n  // If no action was specified, browsers will persist current search params\n  // when determining the path, so match that behavior\n  // https://github.com/remix-run/remix/issues/927\n  let location = useLocation();\n  if (action == null) {\n    // Safe to write to this directly here since if action was undefined, we\n    // would have called useResolvedPath(\".\") which will never include a search\n    path.search = location.search;\n    // When grabbing search params from the URL, remove any included ?index param\n    // since it might not apply to our contextual route.  We add it back based\n    // on match.route.index below\n    let params = new URLSearchParams(path.search);\n    if (params.has(\"index\") && params.get(\"index\") === \"\") {\n      params.delete(\"index\");\n      path.search = params.toString() ? \"?\" + params.toString() : \"\";\n    }\n  }\n  if ((!action || action === \".\") && match.route.index) {\n    path.search = path.search ? path.search.replace(/^\\?/, \"?index&\") : \"?index\";\n  }\n  // If we're operating within a basename, prepend it to the pathname prior\n  // to creating the form action.  If this is a root navigation, then just use\n  // the raw basename which allows the basename to have full control over the\n  // presence of a trailing slash on root actions\n  if (basename !== \"/\") {\n    path.pathname = path.pathname === \"/\" ? basename : joinPaths([basename, path.pathname]);\n  }\n  return createPath(path);\n}\n// TODO: (v7) Change the useFetcher generic default from `any` to `unknown`\n/**\n * Interacts with route loaders and actions without causing a navigation. Great\n * for any interaction that stays on the same page.\n */\nfunction useFetcher(_temp3) {\n  var _route$matches;\n  let {\n    key\n  } = _temp3 === void 0 ? {} : _temp3;\n  let {\n    router\n  } = useDataRouterContext(DataRouterHook.UseFetcher);\n  let state = useDataRouterState(DataRouterStateHook.UseFetcher);\n  let fetcherData = React.useContext(FetchersContext);\n  let route = React.useContext(UNSAFE_RouteContext);\n  let routeId = (_route$matches = route.matches[route.matches.length - 1]) == null ? void 0 : _route$matches.route.id;\n  !fetcherData ? process.env.NODE_ENV !== \"production\" ? UNSAFE_invariant(false, \"useFetcher must be used inside a FetchersContext\") : UNSAFE_invariant(false) : void 0;\n  !route ? process.env.NODE_ENV !== \"production\" ? UNSAFE_invariant(false, \"useFetcher must be used inside a RouteContext\") : UNSAFE_invariant(false) : void 0;\n  !(routeId != null) ? process.env.NODE_ENV !== \"production\" ? UNSAFE_invariant(false, \"useFetcher can only be used on routes that contain a unique \\\"id\\\"\") : UNSAFE_invariant(false) : void 0;\n  // Fetcher key handling\n  let [fetcherKey, setFetcherKey] = React.useState(key || \"\");\n  if (key && key !== fetcherKey) {\n    setFetcherKey(key);\n  } else if (!fetcherKey) {\n    setFetcherKey(getUniqueFetcherId());\n  }\n  // Registration/cleanup\n  React.useEffect(() => {\n    router.getFetcher(fetcherKey);\n    return () => {\n      // Tell the router we've unmounted - if v7_fetcherPersist is enabled this\n      // will not delete immediately but instead queue up a delete after the\n      // fetcher returns to an `idle` state\n      router.deleteFetcher(fetcherKey);\n    };\n  }, [router, fetcherKey]);\n  // Fetcher additions\n  let load = React.useCallback((href, opts) => {\n    !routeId ? process.env.NODE_ENV !== \"production\" ? UNSAFE_invariant(false, \"No routeId available for fetcher.load()\") : UNSAFE_invariant(false) : void 0;\n    router.fetch(fetcherKey, routeId, href, opts);\n  }, [fetcherKey, routeId, router]);\n  let submitImpl = useSubmit();\n  let submit = React.useCallback((target, opts) => {\n    submitImpl(target, _extends({}, opts, {\n      navigate: false,\n      fetcherKey\n    }));\n  }, [fetcherKey, submitImpl]);\n  let FetcherForm = React.useMemo(() => {\n    let FetcherForm = /*#__PURE__*/React.forwardRef((props, ref) => {\n      return /*#__PURE__*/React.createElement(Form, _extends({}, props, {\n        navigate: false,\n        fetcherKey: fetcherKey,\n        ref: ref\n      }));\n    });\n    if (process.env.NODE_ENV !== \"production\") {\n      FetcherForm.displayName = \"fetcher.Form\";\n    }\n    return FetcherForm;\n  }, [fetcherKey]);\n  // Exposed FetcherWithComponents\n  let fetcher = state.fetchers.get(fetcherKey) || IDLE_FETCHER;\n  let data = fetcherData.get(fetcherKey);\n  let fetcherWithComponents = React.useMemo(() => _extends({\n    Form: FetcherForm,\n    submit,\n    load\n  }, fetcher, {\n    data\n  }), [FetcherForm, submit, load, fetcher, data]);\n  return fetcherWithComponents;\n}\n/**\n * Provides all fetchers currently on the page. Useful for layouts and parent\n * routes that need to provide pending/optimistic UI regarding the fetch.\n */\nfunction useFetchers() {\n  let state = useDataRouterState(DataRouterStateHook.UseFetchers);\n  return Array.from(state.fetchers.entries()).map(_ref11 => {\n    let [key, fetcher] = _ref11;\n    return _extends({}, fetcher, {\n      key\n    });\n  });\n}\nconst SCROLL_RESTORATION_STORAGE_KEY = \"react-router-scroll-positions\";\nlet savedScrollPositions = {};\n/**\n * When rendered inside a RouterProvider, will restore scroll positions on navigations\n */\nfunction useScrollRestoration(_temp4) {\n  let {\n    getKey,\n    storageKey\n  } = _temp4 === void 0 ? {} : _temp4;\n  let {\n    router\n  } = useDataRouterContext(DataRouterHook.UseScrollRestoration);\n  let {\n    restoreScrollPosition,\n    preventScrollReset\n  } = useDataRouterState(DataRouterStateHook.UseScrollRestoration);\n  let {\n    basename\n  } = React.useContext(UNSAFE_NavigationContext);\n  let location = useLocation();\n  let matches = useMatches();\n  let navigation = useNavigation();\n  // Trigger manual scroll restoration while we're active\n  React.useEffect(() => {\n    window.history.scrollRestoration = \"manual\";\n    return () => {\n      window.history.scrollRestoration = \"auto\";\n    };\n  }, []);\n  // Save positions on pagehide\n  usePageHide(React.useCallback(() => {\n    if (navigation.state === \"idle\") {\n      let key = (getKey ? getKey(location, matches) : null) || location.key;\n      savedScrollPositions[key] = window.scrollY;\n    }\n    try {\n      sessionStorage.setItem(storageKey || SCROLL_RESTORATION_STORAGE_KEY, JSON.stringify(savedScrollPositions));\n    } catch (error) {\n      process.env.NODE_ENV !== \"production\" ? UNSAFE_warning(false, \"Failed to save scroll positions in sessionStorage, <ScrollRestoration /> will not work properly (\" + error + \").\") : void 0;\n    }\n    window.history.scrollRestoration = \"auto\";\n  }, [storageKey, getKey, navigation.state, location, matches]));\n  // Read in any saved scroll locations\n  if (typeof document !== \"undefined\") {\n    // eslint-disable-next-line react-hooks/rules-of-hooks\n    React.useLayoutEffect(() => {\n      try {\n        let sessionPositions = sessionStorage.getItem(storageKey || SCROLL_RESTORATION_STORAGE_KEY);\n        if (sessionPositions) {\n          savedScrollPositions = JSON.parse(sessionPositions);\n        }\n      } catch (e) {\n        // no-op, use default empty object\n      }\n    }, [storageKey]);\n    // Enable scroll restoration in the router\n    // eslint-disable-next-line react-hooks/rules-of-hooks\n    React.useLayoutEffect(() => {\n      let getKeyWithoutBasename = getKey && basename !== \"/\" ? (location, matches) => getKey( // Strip the basename to match useLocation()\n      _extends({}, location, {\n        pathname: stripBasename(location.pathname, basename) || location.pathname\n      }), matches) : getKey;\n      let disableScrollRestoration = router == null ? void 0 : router.enableScrollRestoration(savedScrollPositions, () => window.scrollY, getKeyWithoutBasename);\n      return () => disableScrollRestoration && disableScrollRestoration();\n    }, [router, basename, getKey]);\n    // Restore scrolling when state.restoreScrollPosition changes\n    // eslint-disable-next-line react-hooks/rules-of-hooks\n    React.useLayoutEffect(() => {\n      // Explicit false means don't do anything (used for submissions)\n      if (restoreScrollPosition === false) {\n        return;\n      }\n      // been here before, scroll to it\n      if (typeof restoreScrollPosition === \"number\") {\n        window.scrollTo(0, restoreScrollPosition);\n        return;\n      }\n      // try to scroll to the hash\n      if (location.hash) {\n        let el = document.getElementById(decodeURIComponent(location.hash.slice(1)));\n        if (el) {\n          el.scrollIntoView();\n          return;\n        }\n      }\n      // Don't reset if this navigation opted out\n      if (preventScrollReset === true) {\n        return;\n      }\n      // otherwise go to the top on new locations\n      window.scrollTo(0, 0);\n    }, [location, restoreScrollPosition, preventScrollReset]);\n  }\n}\n/**\n * Setup a callback to be fired on the window's `beforeunload` event. This is\n * useful for saving some data to `window.localStorage` just before the page\n * refreshes.\n *\n * Note: The `callback` argument should be a function created with\n * `React.useCallback()`.\n */\nfunction useBeforeUnload(callback, options) {\n  let {\n    capture\n  } = options || {};\n  React.useEffect(() => {\n    let opts = capture != null ? {\n      capture\n    } : undefined;\n    window.addEventListener(\"beforeunload\", callback, opts);\n    return () => {\n      window.removeEventListener(\"beforeunload\", callback, opts);\n    };\n  }, [callback, capture]);\n}\n/**\n * Setup a callback to be fired on the window's `pagehide` event. This is\n * useful for saving some data to `window.localStorage` just before the page\n * refreshes.  This event is better supported than beforeunload across browsers.\n *\n * Note: The `callback` argument should be a function created with\n * `React.useCallback()`.\n */\nfunction usePageHide(callback, options) {\n  let {\n    capture\n  } = options || {};\n  React.useEffect(() => {\n    let opts = capture != null ? {\n      capture\n    } : undefined;\n    window.addEventListener(\"pagehide\", callback, opts);\n    return () => {\n      window.removeEventListener(\"pagehide\", callback, opts);\n    };\n  }, [callback, capture]);\n}\n/**\n * Wrapper around useBlocker to show a window.confirm prompt to users instead\n * of building a custom UI with useBlocker.\n *\n * Warning: This has *a lot of rough edges* and behaves very differently (and\n * very incorrectly in some cases) across browsers if user click addition\n * back/forward navigations while the confirm is open.  Use at your own risk.\n */\nfunction usePrompt(_ref12) {\n  let {\n    when,\n    message\n  } = _ref12;\n  let blocker = useBlocker(when);\n  React.useEffect(() => {\n    if (blocker.state === \"blocked\") {\n      let proceed = window.confirm(message);\n      if (proceed) {\n        // This timeout is needed to avoid a weird \"race\" on POP navigations\n        // between the `window.history` revert navigation and the result of\n        // `window.confirm`\n        setTimeout(blocker.proceed, 0);\n      } else {\n        blocker.reset();\n      }\n    }\n  }, [blocker, message]);\n  React.useEffect(() => {\n    if (blocker.state === \"blocked\" && !when) {\n      blocker.reset();\n    }\n  }, [blocker, when]);\n}\n/**\n * Return a boolean indicating if there is an active view transition to the\n * given href.  You can use this value to render CSS classes or viewTransitionName\n * styles onto your elements\n *\n * @param href The destination href\n * @param [opts.relative] Relative routing type (\"route\" | \"path\")\n */\nfunction useViewTransitionState(to, opts) {\n  if (opts === void 0) {\n    opts = {};\n  }\n  let vtContext = React.useContext(ViewTransitionContext);\n  !(vtContext != null) ? process.env.NODE_ENV !== \"production\" ? UNSAFE_invariant(false, \"`unstable_useViewTransitionState` must be used within `react-router-dom`'s `RouterProvider`.  \" + \"Did you accidentally import `RouterProvider` from `react-router`?\") : UNSAFE_invariant(false) : void 0;\n  let {\n    basename\n  } = useDataRouterContext(DataRouterHook.useViewTransitionState);\n  let path = useResolvedPath(to, {\n    relative: opts.relative\n  });\n  if (!vtContext.isTransitioning) {\n    return false;\n  }\n  let currentPath = stripBasename(vtContext.currentLocation.pathname, basename) || vtContext.currentLocation.pathname;\n  let nextPath = stripBasename(vtContext.nextLocation.pathname, basename) || vtContext.nextLocation.pathname;\n  // Transition is active if we're going to or coming from the indicated\n  // destination.  This ensures that other PUSH navigations that reverse\n  // an indicated transition apply.  I.e., on the list view you have:\n  //\n  //   <NavLink to=\"/details/1\" unstable_viewTransition>\n  //\n  // If you click the breadcrumb back to the list view:\n  //\n  //   <NavLink to=\"/list\" unstable_viewTransition>\n  //\n  // We should apply the transition because it's indicated as active going\n  // from /list -> /details/1 and therefore should be active on the reverse\n  // (even though this isn't strictly a POP reverse)\n  return matchPath(path.pathname, nextPath) != null || matchPath(path.pathname, currentPath) != null;\n}\n//#endregion\n\nexport { BrowserRouter, Form, HashRouter, Link, NavLink, RouterProvider, ScrollRestoration, FetchersContext as UNSAFE_FetchersContext, ViewTransitionContext as UNSAFE_ViewTransitionContext, useScrollRestoration as UNSAFE_useScrollRestoration, createBrowserRouter, createHashRouter, createSearchParams, HistoryRouter as unstable_HistoryRouter, usePrompt as unstable_usePrompt, useViewTransitionState as unstable_useViewTransitionState, useBeforeUnload, useFetcher, useFetchers, useFormAction, useLinkClickHandler, useSearchParams, useSubmit };\n//# sourceMappingURL=index.js.map\n","/**\n * React Router v6.20.0\n *\n * Copyright (c) Remix Software Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE.md file in the root directory of this source tree.\n *\n * @license MIT\n */\nimport * as React from 'react';\nimport { UNSAFE_invariant, joinPaths, matchPath, UNSAFE_getResolveToMatches, UNSAFE_warning, resolveTo, parsePath, matchRoutes, Action, UNSAFE_convertRouteMatchToUiMatch, stripBasename, IDLE_BLOCKER, isRouteErrorResponse, createMemoryHistory, AbortedDeferredError, createRouter } from '@remix-run/router';\nexport { AbortedDeferredError, Action as NavigationType, createPath, defer, generatePath, isRouteErrorResponse, json, matchPath, matchRoutes, parsePath, redirect, redirectDocument, resolvePath } from '@remix-run/router';\n\nfunction _extends() {\n  _extends = Object.assign ? Object.assign.bind() : function (target) {\n    for (var i = 1; i < arguments.length; i++) {\n      var source = arguments[i];\n      for (var key in source) {\n        if (Object.prototype.hasOwnProperty.call(source, key)) {\n          target[key] = source[key];\n        }\n      }\n    }\n    return target;\n  };\n  return _extends.apply(this, arguments);\n}\n\n// Create react-specific types from the agnostic types in @remix-run/router to\n// export from react-router\nconst DataRouterContext = /*#__PURE__*/React.createContext(null);\nif (process.env.NODE_ENV !== \"production\") {\n  DataRouterContext.displayName = \"DataRouter\";\n}\nconst DataRouterStateContext = /*#__PURE__*/React.createContext(null);\nif (process.env.NODE_ENV !== \"production\") {\n  DataRouterStateContext.displayName = \"DataRouterState\";\n}\nconst AwaitContext = /*#__PURE__*/React.createContext(null);\nif (process.env.NODE_ENV !== \"production\") {\n  AwaitContext.displayName = \"Await\";\n}\n\n/**\n * A Navigator is a \"location changer\"; it's how you get to different locations.\n *\n * Every history instance conforms to the Navigator interface, but the\n * distinction is useful primarily when it comes to the low-level `<Router>` API\n * where both the location and a navigator must be provided separately in order\n * to avoid \"tearing\" that may occur in a suspense-enabled app if the action\n * and/or location were to be read directly from the history instance.\n */\n\nconst NavigationContext = /*#__PURE__*/React.createContext(null);\nif (process.env.NODE_ENV !== \"production\") {\n  NavigationContext.displayName = \"Navigation\";\n}\nconst LocationContext = /*#__PURE__*/React.createContext(null);\nif (process.env.NODE_ENV !== \"production\") {\n  LocationContext.displayName = \"Location\";\n}\nconst RouteContext = /*#__PURE__*/React.createContext({\n  outlet: null,\n  matches: [],\n  isDataRoute: false\n});\nif (process.env.NODE_ENV !== \"production\") {\n  RouteContext.displayName = \"Route\";\n}\nconst RouteErrorContext = /*#__PURE__*/React.createContext(null);\nif (process.env.NODE_ENV !== \"production\") {\n  RouteErrorContext.displayName = \"RouteError\";\n}\n\n/**\n * Returns the full href for the given \"to\" value. This is useful for building\n * custom links that are also accessible and preserve right-click behavior.\n *\n * @see https://reactrouter.com/hooks/use-href\n */\nfunction useHref(to, _temp) {\n  let {\n    relative\n  } = _temp === void 0 ? {} : _temp;\n  !useInRouterContext() ? process.env.NODE_ENV !== \"production\" ? UNSAFE_invariant(false, // TODO: This error is probably because they somehow have 2 versions of the\n  // router loaded. We can help them understand how to avoid that.\n  \"useHref() may be used only in the context of a <Router> component.\") : UNSAFE_invariant(false) : void 0;\n  let {\n    basename,\n    navigator\n  } = React.useContext(NavigationContext);\n  let {\n    hash,\n    pathname,\n    search\n  } = useResolvedPath(to, {\n    relative\n  });\n  let joinedPathname = pathname;\n\n  // If we're operating within a basename, prepend it to the pathname prior\n  // to creating the href.  If this is a root navigation, then just use the raw\n  // basename which allows the basename to have full control over the presence\n  // of a trailing slash on root links\n  if (basename !== \"/\") {\n    joinedPathname = pathname === \"/\" ? basename : joinPaths([basename, pathname]);\n  }\n  return navigator.createHref({\n    pathname: joinedPathname,\n    search,\n    hash\n  });\n}\n\n/**\n * Returns true if this component is a descendant of a `<Router>`.\n *\n * @see https://reactrouter.com/hooks/use-in-router-context\n */\nfunction useInRouterContext() {\n  return React.useContext(LocationContext) != null;\n}\n\n/**\n * Returns the current location object, which represents the current URL in web\n * browsers.\n *\n * Note: If you're using this it may mean you're doing some of your own\n * \"routing\" in your app, and we'd like to know what your use case is. We may\n * be able to provide something higher-level to better suit your needs.\n *\n * @see https://reactrouter.com/hooks/use-location\n */\nfunction useLocation() {\n  !useInRouterContext() ? process.env.NODE_ENV !== \"production\" ? UNSAFE_invariant(false, // TODO: This error is probably because they somehow have 2 versions of the\n  // router loaded. We can help them understand how to avoid that.\n  \"useLocation() may be used only in the context of a <Router> component.\") : UNSAFE_invariant(false) : void 0;\n  return React.useContext(LocationContext).location;\n}\n\n/**\n * Returns the current navigation action which describes how the router came to\n * the current location, either by a pop, push, or replace on the history stack.\n *\n * @see https://reactrouter.com/hooks/use-navigation-type\n */\nfunction useNavigationType() {\n  return React.useContext(LocationContext).navigationType;\n}\n\n/**\n * Returns a PathMatch object if the given pattern matches the current URL.\n * This is useful for components that need to know \"active\" state, e.g.\n * `<NavLink>`.\n *\n * @see https://reactrouter.com/hooks/use-match\n */\nfunction useMatch(pattern) {\n  !useInRouterContext() ? process.env.NODE_ENV !== \"production\" ? UNSAFE_invariant(false, // TODO: This error is probably because they somehow have 2 versions of the\n  // router loaded. We can help them understand how to avoid that.\n  \"useMatch() may be used only in the context of a <Router> component.\") : UNSAFE_invariant(false) : void 0;\n  let {\n    pathname\n  } = useLocation();\n  return React.useMemo(() => matchPath(pattern, pathname), [pathname, pattern]);\n}\n\n/**\n * The interface for the navigate() function returned from useNavigate().\n */\n\nconst navigateEffectWarning = \"You should call navigate() in a React.useEffect(), not when \" + \"your component is first rendered.\";\n\n// Mute warnings for calls to useNavigate in SSR environments\nfunction useIsomorphicLayoutEffect(cb) {\n  let isStatic = React.useContext(NavigationContext).static;\n  if (!isStatic) {\n    // We should be able to get rid of this once react 18.3 is released\n    // See: https://github.com/facebook/react/pull/26395\n    // eslint-disable-next-line react-hooks/rules-of-hooks\n    React.useLayoutEffect(cb);\n  }\n}\n\n/**\n * Returns an imperative method for changing the location. Used by `<Link>`s, but\n * may also be used by other elements to change the location.\n *\n * @see https://reactrouter.com/hooks/use-navigate\n */\nfunction useNavigate() {\n  let {\n    isDataRoute\n  } = React.useContext(RouteContext);\n  // Conditional usage is OK here because the usage of a data router is static\n  // eslint-disable-next-line react-hooks/rules-of-hooks\n  return isDataRoute ? useNavigateStable() : useNavigateUnstable();\n}\nfunction useNavigateUnstable() {\n  !useInRouterContext() ? process.env.NODE_ENV !== \"production\" ? UNSAFE_invariant(false, // TODO: This error is probably because they somehow have 2 versions of the\n  // router loaded. We can help them understand how to avoid that.\n  \"useNavigate() may be used only in the context of a <Router> component.\") : UNSAFE_invariant(false) : void 0;\n  let dataRouterContext = React.useContext(DataRouterContext);\n  let {\n    basename,\n    navigator\n  } = React.useContext(NavigationContext);\n  let {\n    matches\n  } = React.useContext(RouteContext);\n  let {\n    pathname: locationPathname\n  } = useLocation();\n  let routePathnamesJson = JSON.stringify(UNSAFE_getResolveToMatches(matches));\n  let activeRef = React.useRef(false);\n  useIsomorphicLayoutEffect(() => {\n    activeRef.current = true;\n  });\n  let navigate = React.useCallback(function (to, options) {\n    if (options === void 0) {\n      options = {};\n    }\n    process.env.NODE_ENV !== \"production\" ? UNSAFE_warning(activeRef.current, navigateEffectWarning) : void 0;\n\n    // Short circuit here since if this happens on first render the navigate\n    // is useless because we haven't wired up our history listener yet\n    if (!activeRef.current) return;\n    if (typeof to === \"number\") {\n      navigator.go(to);\n      return;\n    }\n    let path = resolveTo(to, JSON.parse(routePathnamesJson), locationPathname, options.relative === \"path\");\n\n    // If we're operating within a basename, prepend it to the pathname prior\n    // to handing off to history (but only if we're not in a data router,\n    // otherwise it'll prepend the basename inside of the router).\n    // If this is a root navigation, then we navigate to the raw basename\n    // which allows the basename to have full control over the presence of a\n    // trailing slash on root links\n    if (dataRouterContext == null && basename !== \"/\") {\n      path.pathname = path.pathname === \"/\" ? basename : joinPaths([basename, path.pathname]);\n    }\n    (!!options.replace ? navigator.replace : navigator.push)(path, options.state, options);\n  }, [basename, navigator, routePathnamesJson, locationPathname, dataRouterContext]);\n  return navigate;\n}\nconst OutletContext = /*#__PURE__*/React.createContext(null);\n\n/**\n * Returns the context (if provided) for the child route at this level of the route\n * hierarchy.\n * @see https://reactrouter.com/hooks/use-outlet-context\n */\nfunction useOutletContext() {\n  return React.useContext(OutletContext);\n}\n\n/**\n * Returns the element for the child route at this level of the route\n * hierarchy. Used internally by `<Outlet>` to render child routes.\n *\n * @see https://reactrouter.com/hooks/use-outlet\n */\nfunction useOutlet(context) {\n  let outlet = React.useContext(RouteContext).outlet;\n  if (outlet) {\n    return /*#__PURE__*/React.createElement(OutletContext.Provider, {\n      value: context\n    }, outlet);\n  }\n  return outlet;\n}\n\n/**\n * Returns an object of key/value pairs of the dynamic params from the current\n * URL that were matched by the route path.\n *\n * @see https://reactrouter.com/hooks/use-params\n */\nfunction useParams() {\n  let {\n    matches\n  } = React.useContext(RouteContext);\n  let routeMatch = matches[matches.length - 1];\n  return routeMatch ? routeMatch.params : {};\n}\n\n/**\n * Resolves the pathname of the given `to` value against the current location.\n *\n * @see https://reactrouter.com/hooks/use-resolved-path\n */\nfunction useResolvedPath(to, _temp2) {\n  let {\n    relative\n  } = _temp2 === void 0 ? {} : _temp2;\n  let {\n    matches\n  } = React.useContext(RouteContext);\n  let {\n    pathname: locationPathname\n  } = useLocation();\n  let routePathnamesJson = JSON.stringify(UNSAFE_getResolveToMatches(matches));\n  return React.useMemo(() => resolveTo(to, JSON.parse(routePathnamesJson), locationPathname, relative === \"path\"), [to, routePathnamesJson, locationPathname, relative]);\n}\n\n/**\n * Returns the element of the route that matched the current location, prepared\n * with the correct context to render the remainder of the route tree. Route\n * elements in the tree must render an `<Outlet>` to render their child route's\n * element.\n *\n * @see https://reactrouter.com/hooks/use-routes\n */\nfunction useRoutes(routes, locationArg) {\n  return useRoutesImpl(routes, locationArg);\n}\n\n// Internal implementation with accept optional param for RouterProvider usage\nfunction useRoutesImpl(routes, locationArg, dataRouterState) {\n  !useInRouterContext() ? process.env.NODE_ENV !== \"production\" ? UNSAFE_invariant(false, // TODO: This error is probably because they somehow have 2 versions of the\n  // router loaded. We can help them understand how to avoid that.\n  \"useRoutes() may be used only in the context of a <Router> component.\") : UNSAFE_invariant(false) : void 0;\n  let {\n    navigator\n  } = React.useContext(NavigationContext);\n  let {\n    matches: parentMatches\n  } = React.useContext(RouteContext);\n  let routeMatch = parentMatches[parentMatches.length - 1];\n  let parentParams = routeMatch ? routeMatch.params : {};\n  let parentPathname = routeMatch ? routeMatch.pathname : \"/\";\n  let parentPathnameBase = routeMatch ? routeMatch.pathnameBase : \"/\";\n  let parentRoute = routeMatch && routeMatch.route;\n  if (process.env.NODE_ENV !== \"production\") {\n    // You won't get a warning about 2 different <Routes> under a <Route>\n    // without a trailing *, but this is a best-effort warning anyway since we\n    // cannot even give the warning unless they land at the parent route.\n    //\n    // Example:\n    //\n    // <Routes>\n    //   {/* This route path MUST end with /* because otherwise\n    //       it will never match /blog/post/123 */}\n    //   <Route path=\"blog\" element={<Blog />} />\n    //   <Route path=\"blog/feed\" element={<BlogFeed />} />\n    // </Routes>\n    //\n    // function Blog() {\n    //   return (\n    //     <Routes>\n    //       <Route path=\"post/:id\" element={<Post />} />\n    //     </Routes>\n    //   );\n    // }\n    let parentPath = parentRoute && parentRoute.path || \"\";\n    warningOnce(parentPathname, !parentRoute || parentPath.endsWith(\"*\"), \"You rendered descendant <Routes> (or called `useRoutes()`) at \" + (\"\\\"\" + parentPathname + \"\\\" (under <Route path=\\\"\" + parentPath + \"\\\">) but the \") + \"parent route path has no trailing \\\"*\\\". This means if you navigate \" + \"deeper, the parent won't match anymore and therefore the child \" + \"routes will never render.\\n\\n\" + (\"Please change the parent <Route path=\\\"\" + parentPath + \"\\\"> to <Route \") + (\"path=\\\"\" + (parentPath === \"/\" ? \"*\" : parentPath + \"/*\") + \"\\\">.\"));\n  }\n  let locationFromContext = useLocation();\n  let location;\n  if (locationArg) {\n    var _parsedLocationArg$pa;\n    let parsedLocationArg = typeof locationArg === \"string\" ? parsePath(locationArg) : locationArg;\n    !(parentPathnameBase === \"/\" || ((_parsedLocationArg$pa = parsedLocationArg.pathname) == null ? void 0 : _parsedLocationArg$pa.startsWith(parentPathnameBase))) ? process.env.NODE_ENV !== \"production\" ? UNSAFE_invariant(false, \"When overriding the location using `<Routes location>` or `useRoutes(routes, location)`, \" + \"the location pathname must begin with the portion of the URL pathname that was \" + (\"matched by all parent routes. The current pathname base is \\\"\" + parentPathnameBase + \"\\\" \") + (\"but pathname \\\"\" + parsedLocationArg.pathname + \"\\\" was given in the `location` prop.\")) : UNSAFE_invariant(false) : void 0;\n    location = parsedLocationArg;\n  } else {\n    location = locationFromContext;\n  }\n  let pathname = location.pathname || \"/\";\n  let remainingPathname = parentPathnameBase === \"/\" ? pathname : pathname.slice(parentPathnameBase.length) || \"/\";\n  let matches = matchRoutes(routes, {\n    pathname: remainingPathname\n  });\n  if (process.env.NODE_ENV !== \"production\") {\n    process.env.NODE_ENV !== \"production\" ? UNSAFE_warning(parentRoute || matches != null, \"No routes matched location \\\"\" + location.pathname + location.search + location.hash + \"\\\" \") : void 0;\n    process.env.NODE_ENV !== \"production\" ? UNSAFE_warning(matches == null || matches[matches.length - 1].route.element !== undefined || matches[matches.length - 1].route.Component !== undefined, \"Matched leaf route at location \\\"\" + location.pathname + location.search + location.hash + \"\\\" \" + \"does not have an element or Component. This means it will render an <Outlet /> with a \" + \"null value by default resulting in an \\\"empty\\\" page.\") : void 0;\n  }\n  let renderedMatches = _renderMatches(matches && matches.map(match => Object.assign({}, match, {\n    params: Object.assign({}, parentParams, match.params),\n    pathname: joinPaths([parentPathnameBase,\n    // Re-encode pathnames that were decoded inside matchRoutes\n    navigator.encodeLocation ? navigator.encodeLocation(match.pathname).pathname : match.pathname]),\n    pathnameBase: match.pathnameBase === \"/\" ? parentPathnameBase : joinPaths([parentPathnameBase,\n    // Re-encode pathnames that were decoded inside matchRoutes\n    navigator.encodeLocation ? navigator.encodeLocation(match.pathnameBase).pathname : match.pathnameBase])\n  })), parentMatches, dataRouterState);\n\n  // When a user passes in a `locationArg`, the associated routes need to\n  // be wrapped in a new `LocationContext.Provider` in order for `useLocation`\n  // to use the scoped location instead of the global location.\n  if (locationArg && renderedMatches) {\n    return /*#__PURE__*/React.createElement(LocationContext.Provider, {\n      value: {\n        location: _extends({\n          pathname: \"/\",\n          search: \"\",\n          hash: \"\",\n          state: null,\n          key: \"default\"\n        }, location),\n        navigationType: Action.Pop\n      }\n    }, renderedMatches);\n  }\n  return renderedMatches;\n}\nfunction DefaultErrorComponent() {\n  let error = useRouteError();\n  let message = isRouteErrorResponse(error) ? error.status + \" \" + error.statusText : error instanceof Error ? error.message : JSON.stringify(error);\n  let stack = error instanceof Error ? error.stack : null;\n  let lightgrey = \"rgba(200,200,200, 0.5)\";\n  let preStyles = {\n    padding: \"0.5rem\",\n    backgroundColor: lightgrey\n  };\n  let codeStyles = {\n    padding: \"2px 4px\",\n    backgroundColor: lightgrey\n  };\n  let devInfo = null;\n  if (process.env.NODE_ENV !== \"production\") {\n    console.error(\"Error handled by React Router default ErrorBoundary:\", error);\n    devInfo = /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(\"p\", null, \"\\uD83D\\uDCBF Hey developer \\uD83D\\uDC4B\"), /*#__PURE__*/React.createElement(\"p\", null, \"You can provide a way better UX than this when your app throws errors by providing your own \", /*#__PURE__*/React.createElement(\"code\", {\n      style: codeStyles\n    }, \"ErrorBoundary\"), \" or\", \" \", /*#__PURE__*/React.createElement(\"code\", {\n      style: codeStyles\n    }, \"errorElement\"), \" prop on your route.\"));\n  }\n  return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(\"h2\", null, \"Unexpected Application Error!\"), /*#__PURE__*/React.createElement(\"h3\", {\n    style: {\n      fontStyle: \"italic\"\n    }\n  }, message), stack ? /*#__PURE__*/React.createElement(\"pre\", {\n    style: preStyles\n  }, stack) : null, devInfo);\n}\nconst defaultErrorElement = /*#__PURE__*/React.createElement(DefaultErrorComponent, null);\nclass RenderErrorBoundary extends React.Component {\n  constructor(props) {\n    super(props);\n    this.state = {\n      location: props.location,\n      revalidation: props.revalidation,\n      error: props.error\n    };\n  }\n  static getDerivedStateFromError(error) {\n    return {\n      error: error\n    };\n  }\n  static getDerivedStateFromProps(props, state) {\n    // When we get into an error state, the user will likely click \"back\" to the\n    // previous page that didn't have an error. Because this wraps the entire\n    // application, that will have no effect--the error page continues to display.\n    // This gives us a mechanism to recover from the error when the location changes.\n    //\n    // Whether we're in an error state or not, we update the location in state\n    // so that when we are in an error state, it gets reset when a new location\n    // comes in and the user recovers from the error.\n    if (state.location !== props.location || state.revalidation !== \"idle\" && props.revalidation === \"idle\") {\n      return {\n        error: props.error,\n        location: props.location,\n        revalidation: props.revalidation\n      };\n    }\n\n    // If we're not changing locations, preserve the location but still surface\n    // any new errors that may come through. We retain the existing error, we do\n    // this because the error provided from the app state may be cleared without\n    // the location changing.\n    return {\n      error: props.error || state.error,\n      location: state.location,\n      revalidation: props.revalidation || state.revalidation\n    };\n  }\n  componentDidCatch(error, errorInfo) {\n    console.error(\"React Router caught the following error during render\", error, errorInfo);\n  }\n  render() {\n    return this.state.error ? /*#__PURE__*/React.createElement(RouteContext.Provider, {\n      value: this.props.routeContext\n    }, /*#__PURE__*/React.createElement(RouteErrorContext.Provider, {\n      value: this.state.error,\n      children: this.props.component\n    })) : this.props.children;\n  }\n}\nfunction RenderedRoute(_ref) {\n  let {\n    routeContext,\n    match,\n    children\n  } = _ref;\n  let dataRouterContext = React.useContext(DataRouterContext);\n\n  // Track how deep we got in our render pass to emulate SSR componentDidCatch\n  // in a DataStaticRouter\n  if (dataRouterContext && dataRouterContext.static && dataRouterContext.staticContext && (match.route.errorElement || match.route.ErrorBoundary)) {\n    dataRouterContext.staticContext._deepestRenderedBoundaryId = match.route.id;\n  }\n  return /*#__PURE__*/React.createElement(RouteContext.Provider, {\n    value: routeContext\n  }, children);\n}\nfunction _renderMatches(matches, parentMatches, dataRouterState) {\n  var _dataRouterState2;\n  if (parentMatches === void 0) {\n    parentMatches = [];\n  }\n  if (dataRouterState === void 0) {\n    dataRouterState = null;\n  }\n  if (matches == null) {\n    var _dataRouterState;\n    if ((_dataRouterState = dataRouterState) != null && _dataRouterState.errors) {\n      // Don't bail if we have data router errors so we can render them in the\n      // boundary.  Use the pre-matched (or shimmed) matches\n      matches = dataRouterState.matches;\n    } else {\n      return null;\n    }\n  }\n  let renderedMatches = matches;\n\n  // If we have data errors, trim matches to the highest error boundary\n  let errors = (_dataRouterState2 = dataRouterState) == null ? void 0 : _dataRouterState2.errors;\n  if (errors != null) {\n    let errorIndex = renderedMatches.findIndex(m => m.route.id && (errors == null ? void 0 : errors[m.route.id]));\n    !(errorIndex >= 0) ? process.env.NODE_ENV !== \"production\" ? UNSAFE_invariant(false, \"Could not find a matching route for errors on route IDs: \" + Object.keys(errors).join(\",\")) : UNSAFE_invariant(false) : void 0;\n    renderedMatches = renderedMatches.slice(0, Math.min(renderedMatches.length, errorIndex + 1));\n  }\n  return renderedMatches.reduceRight((outlet, match, index) => {\n    let error = match.route.id ? errors == null ? void 0 : errors[match.route.id] : null;\n    // Only data routers handle errors\n    let errorElement = null;\n    if (dataRouterState) {\n      errorElement = match.route.errorElement || defaultErrorElement;\n    }\n    let matches = parentMatches.concat(renderedMatches.slice(0, index + 1));\n    let getChildren = () => {\n      let children;\n      if (error) {\n        children = errorElement;\n      } else if (match.route.Component) {\n        // Note: This is a de-optimized path since React won't re-use the\n        // ReactElement since it's identity changes with each new\n        // React.createElement call.  We keep this so folks can use\n        // `<Route Component={...}>` in `<Routes>` but generally `Component`\n        // usage is only advised in `RouterProvider` when we can convert it to\n        // `element` ahead of time.\n        children = /*#__PURE__*/React.createElement(match.route.Component, null);\n      } else if (match.route.element) {\n        children = match.route.element;\n      } else {\n        children = outlet;\n      }\n      return /*#__PURE__*/React.createElement(RenderedRoute, {\n        match: match,\n        routeContext: {\n          outlet,\n          matches,\n          isDataRoute: dataRouterState != null\n        },\n        children: children\n      });\n    };\n    // Only wrap in an error boundary within data router usages when we have an\n    // ErrorBoundary/errorElement on this route.  Otherwise let it bubble up to\n    // an ancestor ErrorBoundary/errorElement\n    return dataRouterState && (match.route.ErrorBoundary || match.route.errorElement || index === 0) ? /*#__PURE__*/React.createElement(RenderErrorBoundary, {\n      location: dataRouterState.location,\n      revalidation: dataRouterState.revalidation,\n      component: errorElement,\n      error: error,\n      children: getChildren(),\n      routeContext: {\n        outlet: null,\n        matches,\n        isDataRoute: true\n      }\n    }) : getChildren();\n  }, null);\n}\nvar DataRouterHook = /*#__PURE__*/function (DataRouterHook) {\n  DataRouterHook[\"UseBlocker\"] = \"useBlocker\";\n  DataRouterHook[\"UseRevalidator\"] = \"useRevalidator\";\n  DataRouterHook[\"UseNavigateStable\"] = \"useNavigate\";\n  return DataRouterHook;\n}(DataRouterHook || {});\nvar DataRouterStateHook = /*#__PURE__*/function (DataRouterStateHook) {\n  DataRouterStateHook[\"UseBlocker\"] = \"useBlocker\";\n  DataRouterStateHook[\"UseLoaderData\"] = \"useLoaderData\";\n  DataRouterStateHook[\"UseActionData\"] = \"useActionData\";\n  DataRouterStateHook[\"UseRouteError\"] = \"useRouteError\";\n  DataRouterStateHook[\"UseNavigation\"] = \"useNavigation\";\n  DataRouterStateHook[\"UseRouteLoaderData\"] = \"useRouteLoaderData\";\n  DataRouterStateHook[\"UseMatches\"] = \"useMatches\";\n  DataRouterStateHook[\"UseRevalidator\"] = \"useRevalidator\";\n  DataRouterStateHook[\"UseNavigateStable\"] = \"useNavigate\";\n  DataRouterStateHook[\"UseRouteId\"] = \"useRouteId\";\n  return DataRouterStateHook;\n}(DataRouterStateHook || {});\nfunction getDataRouterConsoleError(hookName) {\n  return hookName + \" must be used within a data router.  See https://reactrouter.com/routers/picking-a-router.\";\n}\nfunction useDataRouterContext(hookName) {\n  let ctx = React.useContext(DataRouterContext);\n  !ctx ? process.env.NODE_ENV !== \"production\" ? UNSAFE_invariant(false, getDataRouterConsoleError(hookName)) : UNSAFE_invariant(false) : void 0;\n  return ctx;\n}\nfunction useDataRouterState(hookName) {\n  let state = React.useContext(DataRouterStateContext);\n  !state ? process.env.NODE_ENV !== \"production\" ? UNSAFE_invariant(false, getDataRouterConsoleError(hookName)) : UNSAFE_invariant(false) : void 0;\n  return state;\n}\nfunction useRouteContext(hookName) {\n  let route = React.useContext(RouteContext);\n  !route ? process.env.NODE_ENV !== \"production\" ? UNSAFE_invariant(false, getDataRouterConsoleError(hookName)) : UNSAFE_invariant(false) : void 0;\n  return route;\n}\n\n// Internal version with hookName-aware debugging\nfunction useCurrentRouteId(hookName) {\n  let route = useRouteContext(hookName);\n  let thisRoute = route.matches[route.matches.length - 1];\n  !thisRoute.route.id ? process.env.NODE_ENV !== \"production\" ? UNSAFE_invariant(false, hookName + \" can only be used on routes that contain a unique \\\"id\\\"\") : UNSAFE_invariant(false) : void 0;\n  return thisRoute.route.id;\n}\n\n/**\n * Returns the ID for the nearest contextual route\n */\nfunction useRouteId() {\n  return useCurrentRouteId(DataRouterStateHook.UseRouteId);\n}\n\n/**\n * Returns the current navigation, defaulting to an \"idle\" navigation when\n * no navigation is in progress\n */\nfunction useNavigation() {\n  let state = useDataRouterState(DataRouterStateHook.UseNavigation);\n  return state.navigation;\n}\n\n/**\n * Returns a revalidate function for manually triggering revalidation, as well\n * as the current state of any manual revalidations\n */\nfunction useRevalidator() {\n  let dataRouterContext = useDataRouterContext(DataRouterHook.UseRevalidator);\n  let state = useDataRouterState(DataRouterStateHook.UseRevalidator);\n  return React.useMemo(() => ({\n    revalidate: dataRouterContext.router.revalidate,\n    state: state.revalidation\n  }), [dataRouterContext.router.revalidate, state.revalidation]);\n}\n\n/**\n * Returns the active route matches, useful for accessing loaderData for\n * parent/child routes or the route \"handle\" property\n */\nfunction useMatches() {\n  let {\n    matches,\n    loaderData\n  } = useDataRouterState(DataRouterStateHook.UseMatches);\n  return React.useMemo(() => matches.map(m => UNSAFE_convertRouteMatchToUiMatch(m, loaderData)), [matches, loaderData]);\n}\n\n/**\n * Returns the loader data for the nearest ancestor Route loader\n */\nfunction useLoaderData() {\n  let state = useDataRouterState(DataRouterStateHook.UseLoaderData);\n  let routeId = useCurrentRouteId(DataRouterStateHook.UseLoaderData);\n  if (state.errors && state.errors[routeId] != null) {\n    console.error(\"You cannot `useLoaderData` in an errorElement (routeId: \" + routeId + \")\");\n    return undefined;\n  }\n  return state.loaderData[routeId];\n}\n\n/**\n * Returns the loaderData for the given routeId\n */\nfunction useRouteLoaderData(routeId) {\n  let state = useDataRouterState(DataRouterStateHook.UseRouteLoaderData);\n  return state.loaderData[routeId];\n}\n\n/**\n * Returns the action data for the nearest ancestor Route action\n */\nfunction useActionData() {\n  let state = useDataRouterState(DataRouterStateHook.UseActionData);\n  let routeId = useCurrentRouteId(DataRouterStateHook.UseLoaderData);\n  return state.actionData ? state.actionData[routeId] : undefined;\n}\n\n/**\n * Returns the nearest ancestor Route error, which could be a loader/action\n * error or a render error.  This is intended to be called from your\n * ErrorBoundary/errorElement to display a proper error message.\n */\nfunction useRouteError() {\n  var _state$errors;\n  let error = React.useContext(RouteErrorContext);\n  let state = useDataRouterState(DataRouterStateHook.UseRouteError);\n  let routeId = useCurrentRouteId(DataRouterStateHook.UseRouteError);\n\n  // If this was a render error, we put it in a RouteError context inside\n  // of RenderErrorBoundary\n  if (error) {\n    return error;\n  }\n\n  // Otherwise look for errors from our data router state\n  return (_state$errors = state.errors) == null ? void 0 : _state$errors[routeId];\n}\n\n/**\n * Returns the happy-path data from the nearest ancestor `<Await />` value\n */\nfunction useAsyncValue() {\n  let value = React.useContext(AwaitContext);\n  return value == null ? void 0 : value._data;\n}\n\n/**\n * Returns the error from the nearest ancestor `<Await />` value\n */\nfunction useAsyncError() {\n  let value = React.useContext(AwaitContext);\n  return value == null ? void 0 : value._error;\n}\nlet blockerId = 0;\n\n/**\n * Allow the application to block navigations within the SPA and present the\n * user a confirmation dialog to confirm the navigation.  Mostly used to avoid\n * using half-filled form data.  This does not handle hard-reloads or\n * cross-origin navigations.\n */\nfunction useBlocker(shouldBlock) {\n  let {\n    router,\n    basename\n  } = useDataRouterContext(DataRouterHook.UseBlocker);\n  let state = useDataRouterState(DataRouterStateHook.UseBlocker);\n  let [blockerKey, setBlockerKey] = React.useState(\"\");\n  let blockerFunction = React.useCallback(arg => {\n    if (typeof shouldBlock !== \"function\") {\n      return !!shouldBlock;\n    }\n    if (basename === \"/\") {\n      return shouldBlock(arg);\n    }\n\n    // If they provided us a function and we've got an active basename, strip\n    // it from the locations we expose to the user to match the behavior of\n    // useLocation\n    let {\n      currentLocation,\n      nextLocation,\n      historyAction\n    } = arg;\n    return shouldBlock({\n      currentLocation: _extends({}, currentLocation, {\n        pathname: stripBasename(currentLocation.pathname, basename) || currentLocation.pathname\n      }),\n      nextLocation: _extends({}, nextLocation, {\n        pathname: stripBasename(nextLocation.pathname, basename) || nextLocation.pathname\n      }),\n      historyAction\n    });\n  }, [basename, shouldBlock]);\n\n  // This effect is in charge of blocker key assignment and deletion (which is\n  // tightly coupled to the key)\n  React.useEffect(() => {\n    let key = String(++blockerId);\n    setBlockerKey(key);\n    return () => router.deleteBlocker(key);\n  }, [router]);\n\n  // This effect handles assigning the blockerFunction.  This is to handle\n  // unstable blocker function identities, and happens only after the prior\n  // effect so we don't get an orphaned blockerFunction in the router with a\n  // key of \"\".  Until then we just have the IDLE_BLOCKER.\n  React.useEffect(() => {\n    if (blockerKey !== \"\") {\n      router.getBlocker(blockerKey, blockerFunction);\n    }\n  }, [router, blockerKey, blockerFunction]);\n\n  // Prefer the blocker from `state` not `router.state` since DataRouterContext\n  // is memoized so this ensures we update on blocker state updates\n  return blockerKey && state.blockers.has(blockerKey) ? state.blockers.get(blockerKey) : IDLE_BLOCKER;\n}\n\n/**\n * Stable version of useNavigate that is used when we are in the context of\n * a RouterProvider.\n */\nfunction useNavigateStable() {\n  let {\n    router\n  } = useDataRouterContext(DataRouterHook.UseNavigateStable);\n  let id = useCurrentRouteId(DataRouterStateHook.UseNavigateStable);\n  let activeRef = React.useRef(false);\n  useIsomorphicLayoutEffect(() => {\n    activeRef.current = true;\n  });\n  let navigate = React.useCallback(function (to, options) {\n    if (options === void 0) {\n      options = {};\n    }\n    process.env.NODE_ENV !== \"production\" ? UNSAFE_warning(activeRef.current, navigateEffectWarning) : void 0;\n\n    // Short circuit here since if this happens on first render the navigate\n    // is useless because we haven't wired up our router subscriber yet\n    if (!activeRef.current) return;\n    if (typeof to === \"number\") {\n      router.navigate(to);\n    } else {\n      router.navigate(to, _extends({\n        fromRouteId: id\n      }, options));\n    }\n  }, [router, id]);\n  return navigate;\n}\nconst alreadyWarned = {};\nfunction warningOnce(key, cond, message) {\n  if (!cond && !alreadyWarned[key]) {\n    alreadyWarned[key] = true;\n    process.env.NODE_ENV !== \"production\" ? UNSAFE_warning(false, message) : void 0;\n  }\n}\n\n/**\n  Webpack + React 17 fails to compile on any of the following because webpack\n  complains that `startTransition` doesn't exist in `React`:\n  * import { startTransition } from \"react\"\n  * import * as React from from \"react\";\n    \"startTransition\" in React ? React.startTransition(() => setState()) : setState()\n  * import * as React from from \"react\";\n    \"startTransition\" in React ? React[\"startTransition\"](() => setState()) : setState()\n\n  Moving it to a constant such as the following solves the Webpack/React 17 issue:\n  * import * as React from from \"react\";\n    const START_TRANSITION = \"startTransition\";\n    START_TRANSITION in React ? React[START_TRANSITION](() => setState()) : setState()\n\n  However, that introduces webpack/terser minification issues in production builds\n  in React 18 where minification/obfuscation ends up removing the call of\n  React.startTransition entirely from the first half of the ternary.  Grabbing\n  this exported reference once up front resolves that issue.\n\n  See https://github.com/remix-run/react-router/issues/10579\n*/\nconst START_TRANSITION = \"startTransition\";\nconst startTransitionImpl = React[START_TRANSITION];\n\n/**\n * Given a Remix Router instance, render the appropriate UI\n */\nfunction RouterProvider(_ref) {\n  let {\n    fallbackElement,\n    router,\n    future\n  } = _ref;\n  let [state, setStateImpl] = React.useState(router.state);\n  let {\n    v7_startTransition\n  } = future || {};\n  let setState = React.useCallback(newState => {\n    if (v7_startTransition && startTransitionImpl) {\n      startTransitionImpl(() => setStateImpl(newState));\n    } else {\n      setStateImpl(newState);\n    }\n  }, [setStateImpl, v7_startTransition]);\n\n  // Need to use a layout effect here so we are subscribed early enough to\n  // pick up on any render-driven redirects/navigations (useEffect/<Navigate>)\n  React.useLayoutEffect(() => router.subscribe(setState), [router, setState]);\n  let navigator = React.useMemo(() => {\n    return {\n      createHref: router.createHref,\n      encodeLocation: router.encodeLocation,\n      go: n => router.navigate(n),\n      push: (to, state, opts) => router.navigate(to, {\n        state,\n        preventScrollReset: opts == null ? void 0 : opts.preventScrollReset\n      }),\n      replace: (to, state, opts) => router.navigate(to, {\n        replace: true,\n        state,\n        preventScrollReset: opts == null ? void 0 : opts.preventScrollReset\n      })\n    };\n  }, [router]);\n  let basename = router.basename || \"/\";\n  let dataRouterContext = React.useMemo(() => ({\n    router,\n    navigator,\n    static: false,\n    basename\n  }), [router, navigator, basename]);\n\n  // The fragment and {null} here are important!  We need them to keep React 18's\n  // useId happy when we are server-rendering since we may have a <script> here\n  // containing the hydrated server-side staticContext (from StaticRouterProvider).\n  // useId relies on the component tree structure to generate deterministic id's\n  // so we need to ensure it remains the same on the client even though\n  // we don't need the <script> tag\n  return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(DataRouterContext.Provider, {\n    value: dataRouterContext\n  }, /*#__PURE__*/React.createElement(DataRouterStateContext.Provider, {\n    value: state\n  }, /*#__PURE__*/React.createElement(Router, {\n    basename: basename,\n    location: state.location,\n    navigationType: state.historyAction,\n    navigator: navigator\n  }, state.initialized ? /*#__PURE__*/React.createElement(DataRoutes, {\n    routes: router.routes,\n    state: state\n  }) : fallbackElement))), null);\n}\nfunction DataRoutes(_ref2) {\n  let {\n    routes,\n    state\n  } = _ref2;\n  return useRoutesImpl(routes, undefined, state);\n}\n/**\n * A `<Router>` that stores all entries in memory.\n *\n * @see https://reactrouter.com/router-components/memory-router\n */\nfunction MemoryRouter(_ref3) {\n  let {\n    basename,\n    children,\n    initialEntries,\n    initialIndex,\n    future\n  } = _ref3;\n  let historyRef = React.useRef();\n  if (historyRef.current == null) {\n    historyRef.current = createMemoryHistory({\n      initialEntries,\n      initialIndex,\n      v5Compat: true\n    });\n  }\n  let history = historyRef.current;\n  let [state, setStateImpl] = React.useState({\n    action: history.action,\n    location: history.location\n  });\n  let {\n    v7_startTransition\n  } = future || {};\n  let setState = React.useCallback(newState => {\n    v7_startTransition && startTransitionImpl ? startTransitionImpl(() => setStateImpl(newState)) : setStateImpl(newState);\n  }, [setStateImpl, v7_startTransition]);\n  React.useLayoutEffect(() => history.listen(setState), [history, setState]);\n  return /*#__PURE__*/React.createElement(Router, {\n    basename: basename,\n    children: children,\n    location: state.location,\n    navigationType: state.action,\n    navigator: history\n  });\n}\n/**\n * Changes the current location.\n *\n * Note: This API is mostly useful in React.Component subclasses that are not\n * able to use hooks. In functional components, we recommend you use the\n * `useNavigate` hook instead.\n *\n * @see https://reactrouter.com/components/navigate\n */\nfunction Navigate(_ref4) {\n  let {\n    to,\n    replace,\n    state,\n    relative\n  } = _ref4;\n  !useInRouterContext() ? process.env.NODE_ENV !== \"production\" ? UNSAFE_invariant(false, // TODO: This error is probably because they somehow have 2 versions of\n  // the router loaded. We can help them understand how to avoid that.\n  \"<Navigate> may be used only in the context of a <Router> component.\") : UNSAFE_invariant(false) : void 0;\n  process.env.NODE_ENV !== \"production\" ? UNSAFE_warning(!React.useContext(NavigationContext).static, \"<Navigate> must not be used on the initial render in a <StaticRouter>. \" + \"This is a no-op, but you should modify your code so the <Navigate> is \" + \"only ever rendered in response to some user interaction or state change.\") : void 0;\n  let {\n    matches\n  } = React.useContext(RouteContext);\n  let {\n    pathname: locationPathname\n  } = useLocation();\n  let navigate = useNavigate();\n\n  // Resolve the path outside of the effect so that when effects run twice in\n  // StrictMode they navigate to the same place\n  let path = resolveTo(to, UNSAFE_getResolveToMatches(matches), locationPathname, relative === \"path\");\n  let jsonPath = JSON.stringify(path);\n  React.useEffect(() => navigate(JSON.parse(jsonPath), {\n    replace,\n    state,\n    relative\n  }), [navigate, jsonPath, relative, replace, state]);\n  return null;\n}\n/**\n * Renders the child route's element, if there is one.\n *\n * @see https://reactrouter.com/components/outlet\n */\nfunction Outlet(props) {\n  return useOutlet(props.context);\n}\n/**\n * Declares an element that should be rendered at a certain URL path.\n *\n * @see https://reactrouter.com/components/route\n */\nfunction Route(_props) {\n  process.env.NODE_ENV !== \"production\" ? UNSAFE_invariant(false, \"A <Route> is only ever to be used as the child of <Routes> element, \" + \"never rendered directly. Please wrap your <Route> in a <Routes>.\") : UNSAFE_invariant(false) ;\n}\n/**\n * Provides location context for the rest of the app.\n *\n * Note: You usually won't render a `<Router>` directly. Instead, you'll render a\n * router that is more specific to your environment such as a `<BrowserRouter>`\n * in web browsers or a `<StaticRouter>` for server rendering.\n *\n * @see https://reactrouter.com/router-components/router\n */\nfunction Router(_ref5) {\n  let {\n    basename: basenameProp = \"/\",\n    children = null,\n    location: locationProp,\n    navigationType = Action.Pop,\n    navigator,\n    static: staticProp = false\n  } = _ref5;\n  !!useInRouterContext() ? process.env.NODE_ENV !== \"production\" ? UNSAFE_invariant(false, \"You cannot render a <Router> inside another <Router>.\" + \" You should never have more than one in your app.\") : UNSAFE_invariant(false) : void 0;\n\n  // Preserve trailing slashes on basename, so we can let the user control\n  // the enforcement of trailing slashes throughout the app\n  let basename = basenameProp.replace(/^\\/*/, \"/\");\n  let navigationContext = React.useMemo(() => ({\n    basename,\n    navigator,\n    static: staticProp\n  }), [basename, navigator, staticProp]);\n  if (typeof locationProp === \"string\") {\n    locationProp = parsePath(locationProp);\n  }\n  let {\n    pathname = \"/\",\n    search = \"\",\n    hash = \"\",\n    state = null,\n    key = \"default\"\n  } = locationProp;\n  let locationContext = React.useMemo(() => {\n    let trailingPathname = stripBasename(pathname, basename);\n    if (trailingPathname == null) {\n      return null;\n    }\n    return {\n      location: {\n        pathname: trailingPathname,\n        search,\n        hash,\n        state,\n        key\n      },\n      navigationType\n    };\n  }, [basename, pathname, search, hash, state, key, navigationType]);\n  process.env.NODE_ENV !== \"production\" ? UNSAFE_warning(locationContext != null, \"<Router basename=\\\"\" + basename + \"\\\"> is not able to match the URL \" + (\"\\\"\" + pathname + search + hash + \"\\\" because it does not start with the \") + \"basename, so the <Router> won't render anything.\") : void 0;\n  if (locationContext == null) {\n    return null;\n  }\n  return /*#__PURE__*/React.createElement(NavigationContext.Provider, {\n    value: navigationContext\n  }, /*#__PURE__*/React.createElement(LocationContext.Provider, {\n    children: children,\n    value: locationContext\n  }));\n}\n/**\n * A container for a nested tree of `<Route>` elements that renders the branch\n * that best matches the current location.\n *\n * @see https://reactrouter.com/components/routes\n */\nfunction Routes(_ref6) {\n  let {\n    children,\n    location\n  } = _ref6;\n  return useRoutes(createRoutesFromChildren(children), location);\n}\n/**\n * Component to use for rendering lazily loaded data from returning defer()\n * in a loader function\n */\nfunction Await(_ref7) {\n  let {\n    children,\n    errorElement,\n    resolve\n  } = _ref7;\n  return /*#__PURE__*/React.createElement(AwaitErrorBoundary, {\n    resolve: resolve,\n    errorElement: errorElement\n  }, /*#__PURE__*/React.createElement(ResolveAwait, null, children));\n}\nvar AwaitRenderStatus = /*#__PURE__*/function (AwaitRenderStatus) {\n  AwaitRenderStatus[AwaitRenderStatus[\"pending\"] = 0] = \"pending\";\n  AwaitRenderStatus[AwaitRenderStatus[\"success\"] = 1] = \"success\";\n  AwaitRenderStatus[AwaitRenderStatus[\"error\"] = 2] = \"error\";\n  return AwaitRenderStatus;\n}(AwaitRenderStatus || {});\nconst neverSettledPromise = new Promise(() => {});\nclass AwaitErrorBoundary extends React.Component {\n  constructor(props) {\n    super(props);\n    this.state = {\n      error: null\n    };\n  }\n  static getDerivedStateFromError(error) {\n    return {\n      error\n    };\n  }\n  componentDidCatch(error, errorInfo) {\n    console.error(\"<Await> caught the following error during render\", error, errorInfo);\n  }\n  render() {\n    let {\n      children,\n      errorElement,\n      resolve\n    } = this.props;\n    let promise = null;\n    let status = AwaitRenderStatus.pending;\n    if (!(resolve instanceof Promise)) {\n      // Didn't get a promise - provide as a resolved promise\n      status = AwaitRenderStatus.success;\n      promise = Promise.resolve();\n      Object.defineProperty(promise, \"_tracked\", {\n        get: () => true\n      });\n      Object.defineProperty(promise, \"_data\", {\n        get: () => resolve\n      });\n    } else if (this.state.error) {\n      // Caught a render error, provide it as a rejected promise\n      status = AwaitRenderStatus.error;\n      let renderError = this.state.error;\n      promise = Promise.reject().catch(() => {}); // Avoid unhandled rejection warnings\n      Object.defineProperty(promise, \"_tracked\", {\n        get: () => true\n      });\n      Object.defineProperty(promise, \"_error\", {\n        get: () => renderError\n      });\n    } else if (resolve._tracked) {\n      // Already tracked promise - check contents\n      promise = resolve;\n      status = promise._error !== undefined ? AwaitRenderStatus.error : promise._data !== undefined ? AwaitRenderStatus.success : AwaitRenderStatus.pending;\n    } else {\n      // Raw (untracked) promise - track it\n      status = AwaitRenderStatus.pending;\n      Object.defineProperty(resolve, \"_tracked\", {\n        get: () => true\n      });\n      promise = resolve.then(data => Object.defineProperty(resolve, \"_data\", {\n        get: () => data\n      }), error => Object.defineProperty(resolve, \"_error\", {\n        get: () => error\n      }));\n    }\n    if (status === AwaitRenderStatus.error && promise._error instanceof AbortedDeferredError) {\n      // Freeze the UI by throwing a never resolved promise\n      throw neverSettledPromise;\n    }\n    if (status === AwaitRenderStatus.error && !errorElement) {\n      // No errorElement, throw to the nearest route-level error boundary\n      throw promise._error;\n    }\n    if (status === AwaitRenderStatus.error) {\n      // Render via our errorElement\n      return /*#__PURE__*/React.createElement(AwaitContext.Provider, {\n        value: promise,\n        children: errorElement\n      });\n    }\n    if (status === AwaitRenderStatus.success) {\n      // Render children with resolved value\n      return /*#__PURE__*/React.createElement(AwaitContext.Provider, {\n        value: promise,\n        children: children\n      });\n    }\n\n    // Throw to the suspense boundary\n    throw promise;\n  }\n}\n\n/**\n * @private\n * Indirection to leverage useAsyncValue for a render-prop API on `<Await>`\n */\nfunction ResolveAwait(_ref8) {\n  let {\n    children\n  } = _ref8;\n  let data = useAsyncValue();\n  let toRender = typeof children === \"function\" ? children(data) : children;\n  return /*#__PURE__*/React.createElement(React.Fragment, null, toRender);\n}\n\n///////////////////////////////////////////////////////////////////////////////\n// UTILS\n///////////////////////////////////////////////////////////////////////////////\n\n/**\n * Creates a route config from a React \"children\" object, which is usually\n * either a `<Route>` element or an array of them. Used internally by\n * `<Routes>` to create a route config from its children.\n *\n * @see https://reactrouter.com/utils/create-routes-from-children\n */\nfunction createRoutesFromChildren(children, parentPath) {\n  if (parentPath === void 0) {\n    parentPath = [];\n  }\n  let routes = [];\n  React.Children.forEach(children, (element, index) => {\n    if (! /*#__PURE__*/React.isValidElement(element)) {\n      // Ignore non-elements. This allows people to more easily inline\n      // conditionals in their route config.\n      return;\n    }\n    let treePath = [...parentPath, index];\n    if (element.type === React.Fragment) {\n      // Transparently support React.Fragment and its children.\n      routes.push.apply(routes, createRoutesFromChildren(element.props.children, treePath));\n      return;\n    }\n    !(element.type === Route) ? process.env.NODE_ENV !== \"production\" ? UNSAFE_invariant(false, \"[\" + (typeof element.type === \"string\" ? element.type : element.type.name) + \"] is not a <Route> component. All component children of <Routes> must be a <Route> or <React.Fragment>\") : UNSAFE_invariant(false) : void 0;\n    !(!element.props.index || !element.props.children) ? process.env.NODE_ENV !== \"production\" ? UNSAFE_invariant(false, \"An index route cannot have child routes.\") : UNSAFE_invariant(false) : void 0;\n    let route = {\n      id: element.props.id || treePath.join(\"-\"),\n      caseSensitive: element.props.caseSensitive,\n      element: element.props.element,\n      Component: element.props.Component,\n      index: element.props.index,\n      path: element.props.path,\n      loader: element.props.loader,\n      action: element.props.action,\n      errorElement: element.props.errorElement,\n      ErrorBoundary: element.props.ErrorBoundary,\n      hasErrorBoundary: element.props.ErrorBoundary != null || element.props.errorElement != null,\n      shouldRevalidate: element.props.shouldRevalidate,\n      handle: element.props.handle,\n      lazy: element.props.lazy\n    };\n    if (element.props.children) {\n      route.children = createRoutesFromChildren(element.props.children, treePath);\n    }\n    routes.push(route);\n  });\n  return routes;\n}\n\n/**\n * Renders the result of `matchRoutes()` into a React element.\n */\nfunction renderMatches(matches) {\n  return _renderMatches(matches);\n}\n\nfunction mapRouteProperties(route) {\n  let updates = {\n    // Note: this check also occurs in createRoutesFromChildren so update\n    // there if you change this -- please and thank you!\n    hasErrorBoundary: route.ErrorBoundary != null || route.errorElement != null\n  };\n  if (route.Component) {\n    if (process.env.NODE_ENV !== \"production\") {\n      if (route.element) {\n        process.env.NODE_ENV !== \"production\" ? UNSAFE_warning(false, \"You should not include both `Component` and `element` on your route - \" + \"`Component` will be used.\") : void 0;\n      }\n    }\n    Object.assign(updates, {\n      element: /*#__PURE__*/React.createElement(route.Component),\n      Component: undefined\n    });\n  }\n  if (route.ErrorBoundary) {\n    if (process.env.NODE_ENV !== \"production\") {\n      if (route.errorElement) {\n        process.env.NODE_ENV !== \"production\" ? UNSAFE_warning(false, \"You should not include both `ErrorBoundary` and `errorElement` on your route - \" + \"`ErrorBoundary` will be used.\") : void 0;\n      }\n    }\n    Object.assign(updates, {\n      errorElement: /*#__PURE__*/React.createElement(route.ErrorBoundary),\n      ErrorBoundary: undefined\n    });\n  }\n  return updates;\n}\nfunction createMemoryRouter(routes, opts) {\n  return createRouter({\n    basename: opts == null ? void 0 : opts.basename,\n    future: _extends({}, opts == null ? void 0 : opts.future, {\n      v7_prependBasename: true\n    }),\n    history: createMemoryHistory({\n      initialEntries: opts == null ? void 0 : opts.initialEntries,\n      initialIndex: opts == null ? void 0 : opts.initialIndex\n    }),\n    hydrationData: opts == null ? void 0 : opts.hydrationData,\n    routes,\n    mapRouteProperties\n  }).initialize();\n}\n\nexport { Await, MemoryRouter, Navigate, Outlet, Route, Router, RouterProvider, Routes, DataRouterContext as UNSAFE_DataRouterContext, DataRouterStateContext as UNSAFE_DataRouterStateContext, LocationContext as UNSAFE_LocationContext, NavigationContext as UNSAFE_NavigationContext, RouteContext as UNSAFE_RouteContext, mapRouteProperties as UNSAFE_mapRouteProperties, useRouteId as UNSAFE_useRouteId, useRoutesImpl as UNSAFE_useRoutesImpl, createMemoryRouter, createRoutesFromChildren, createRoutesFromChildren as createRoutesFromElements, renderMatches, useActionData, useAsyncError, useAsyncValue, useBlocker, useHref, useInRouterContext, useLoaderData, useLocation, useMatch, useMatches, useNavigate, useNavigation, useNavigationType, useOutlet, useOutletContext, useParams, useResolvedPath, useRevalidator, useRouteError, useRouteLoaderData, useRoutes };\n//# sourceMappingURL=index.js.map\n","'use strict';\n\nfunction _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; }\n\nvar React = require('react');\nvar React__default = _interopDefault(React);\n\nfunction _defineProperty(obj, key, value) {\n  if (key in obj) {\n    Object.defineProperty(obj, key, {\n      value: value,\n      enumerable: true,\n      configurable: true,\n      writable: true\n    });\n  } else {\n    obj[key] = value;\n  }\n\n  return obj;\n}\n\nfunction _inheritsLoose(subClass, superClass) {\n  subClass.prototype = Object.create(superClass.prototype);\n  subClass.prototype.constructor = subClass;\n  subClass.__proto__ = superClass;\n}\n\nvar canUseDOM = !!(typeof window !== 'undefined' && window.document && window.document.createElement);\nfunction withSideEffect(reducePropsToState, handleStateChangeOnClient, mapStateOnServer) {\n  if (typeof reducePropsToState !== 'function') {\n    throw new Error('Expected reducePropsToState to be a function.');\n  }\n\n  if (typeof handleStateChangeOnClient !== 'function') {\n    throw new Error('Expected handleStateChangeOnClient to be a function.');\n  }\n\n  if (typeof mapStateOnServer !== 'undefined' && typeof mapStateOnServer !== 'function') {\n    throw new Error('Expected mapStateOnServer to either be undefined or a function.');\n  }\n\n  function getDisplayName(WrappedComponent) {\n    return WrappedComponent.displayName || WrappedComponent.name || 'Component';\n  }\n\n  return function wrap(WrappedComponent) {\n    if (typeof WrappedComponent !== 'function') {\n      throw new Error('Expected WrappedComponent to be a React component.');\n    }\n\n    var mountedInstances = [];\n    var state;\n\n    function emitChange() {\n      state = reducePropsToState(mountedInstances.map(function (instance) {\n        return instance.props;\n      }));\n\n      if (SideEffect.canUseDOM) {\n        handleStateChangeOnClient(state);\n      } else if (mapStateOnServer) {\n        state = mapStateOnServer(state);\n      }\n    }\n\n    var SideEffect =\n    /*#__PURE__*/\n    function (_PureComponent) {\n      _inheritsLoose(SideEffect, _PureComponent);\n\n      function SideEffect() {\n        return _PureComponent.apply(this, arguments) || this;\n      }\n\n      // Try to use displayName of wrapped component\n      // Expose canUseDOM so tests can monkeypatch it\n      SideEffect.peek = function peek() {\n        return state;\n      };\n\n      SideEffect.rewind = function rewind() {\n        if (SideEffect.canUseDOM) {\n          throw new Error('You may only call rewind() on the server. Call peek() to read the current state.');\n        }\n\n        var recordedState = state;\n        state = undefined;\n        mountedInstances = [];\n        return recordedState;\n      };\n\n      var _proto = SideEffect.prototype;\n\n      _proto.UNSAFE_componentWillMount = function UNSAFE_componentWillMount() {\n        mountedInstances.push(this);\n        emitChange();\n      };\n\n      _proto.componentDidUpdate = function componentDidUpdate() {\n        emitChange();\n      };\n\n      _proto.componentWillUnmount = function componentWillUnmount() {\n        var index = mountedInstances.indexOf(this);\n        mountedInstances.splice(index, 1);\n        emitChange();\n      };\n\n      _proto.render = function render() {\n        return React__default.createElement(WrappedComponent, this.props);\n      };\n\n      return SideEffect;\n    }(React.PureComponent);\n\n    _defineProperty(SideEffect, \"displayName\", \"SideEffect(\" + getDisplayName(WrappedComponent) + \")\");\n\n    _defineProperty(SideEffect, \"canUseDOM\", canUseDOM);\n\n    return SideEffect;\n  };\n}\n\nmodule.exports = withSideEffect;\n","(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"react\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"react\"], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"Webcam\"] = factory(require(\"react\"));\n\telse\n\t\troot[\"Webcam\"] = factory(root[\"React\"]);\n})(this, function(__WEBPACK_EXTERNAL_MODULE_react__) {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// define __esModule on exports\n/******/ \t__webpack_require__.r = function(exports) {\n/******/ \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n/******/ \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n/******/ \t\t}\n/******/ \t\tObject.defineProperty(exports, '__esModule', { value: true });\n/******/ \t};\n/******/\n/******/ \t// create a fake namespace object\n/******/ \t// mode & 1: value is a module id, require it\n/******/ \t// mode & 2: merge all properties of value into the ns\n/******/ \t// mode & 4: return value when already ns object\n/******/ \t// mode & 8|1: behave like require\n/******/ \t__webpack_require__.t = function(value, mode) {\n/******/ \t\tif(mode & 1) value = __webpack_require__(value);\n/******/ \t\tif(mode & 8) return value;\n/******/ \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n/******/ \t\tvar ns = Object.create(null);\n/******/ \t\t__webpack_require__.r(ns);\n/******/ \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n/******/ \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n/******/ \t\treturn ns;\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = \"./src/react-webcam.tsx\");\n/******/ })\n/************************************************************************/\n/******/ ({\n\n/***/ \"./src/react-webcam.tsx\":\n/*!******************************!*\\\n  !*** ./src/react-webcam.tsx ***!\n  \\******************************/\n/*! exports provided: default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"react\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\nvar __extends = (undefined && undefined.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __assign = (undefined && undefined.__assign) || function () {\n    __assign = Object.assign || function(t) {\n        for (var s, i = 1, n = arguments.length; i < n; i++) {\n            s = arguments[i];\n            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n                t[p] = s[p];\n        }\n        return t;\n    };\n    return __assign.apply(this, arguments);\n};\nvar __rest = (undefined && undefined.__rest) || function (s, e) {\n    var t = {};\n    for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n        t[p] = s[p];\n    if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n        for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n            if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n                t[p[i]] = s[p[i]];\n        }\n    return t;\n};\n\n// polyfill based on https://developer.mozilla.org/en-US/docs/Web/API/MediaDevices/getUserMedia\n(function polyfillGetUserMedia() {\n    if (typeof window === 'undefined') {\n        return;\n    }\n    // Older browsers might not implement mediaDevices at all, so we set an empty object first\n    if (navigator.mediaDevices === undefined) {\n        navigator.mediaDevices = {};\n    }\n    // Some browsers partially implement mediaDevices. We can't just assign an object\n    // with getUserMedia as it would overwrite existing properties.\n    // Here, we will just add the getUserMedia property if it's missing.\n    if (navigator.mediaDevices.getUserMedia === undefined) {\n        navigator.mediaDevices.getUserMedia = function (constraints) {\n            // First get ahold of the legacy getUserMedia, if present\n            var getUserMedia = navigator.getUserMedia ||\n                navigator.webkitGetUserMedia ||\n                navigator.mozGetUserMedia ||\n                navigator.msGetUserMedia;\n            // Some browsers just don't implement it - return a rejected promise with an error\n            // to keep a consistent interface\n            if (!getUserMedia) {\n                return Promise.reject(new Error(\"getUserMedia is not implemented in this browser\"));\n            }\n            // Otherwise, wrap the call to the old navigator.getUserMedia with a Promise\n            return new Promise(function (resolve, reject) {\n                getUserMedia.call(navigator, constraints, resolve, reject);\n            });\n        };\n    }\n})();\nfunction hasGetUserMedia() {\n    return !!(navigator.mediaDevices && navigator.mediaDevices.getUserMedia);\n}\nvar Webcam = /** @class */ (function (_super) {\n    __extends(Webcam, _super);\n    function Webcam(props) {\n        var _this = _super.call(this, props) || this;\n        _this.canvas = null;\n        _this.ctx = null;\n        _this.requestUserMediaId = 0;\n        _this.unmounted = false;\n        _this.state = {\n            hasUserMedia: false\n        };\n        return _this;\n    }\n    Webcam.prototype.componentDidMount = function () {\n        var _a = this, state = _a.state, props = _a.props;\n        this.unmounted = false;\n        if (!hasGetUserMedia()) {\n            props.onUserMediaError(\"getUserMedia not supported\");\n            return;\n        }\n        if (!state.hasUserMedia) {\n            this.requestUserMedia();\n        }\n        if (props.children && typeof props.children != 'function') {\n            console.warn(\"children must be a function\");\n        }\n    };\n    Webcam.prototype.componentDidUpdate = function (nextProps) {\n        var props = this.props;\n        if (!hasGetUserMedia()) {\n            props.onUserMediaError(\"getUserMedia not supported\");\n            return;\n        }\n        var audioConstraintsChanged = JSON.stringify(nextProps.audioConstraints) !==\n            JSON.stringify(props.audioConstraints);\n        var videoConstraintsChanged = JSON.stringify(nextProps.videoConstraints) !==\n            JSON.stringify(props.videoConstraints);\n        var minScreenshotWidthChanged = nextProps.minScreenshotWidth !== props.minScreenshotWidth;\n        var minScreenshotHeightChanged = nextProps.minScreenshotHeight !== props.minScreenshotHeight;\n        if (videoConstraintsChanged ||\n            minScreenshotWidthChanged ||\n            minScreenshotHeightChanged) {\n            this.canvas = null;\n            this.ctx = null;\n        }\n        if (audioConstraintsChanged || videoConstraintsChanged) {\n            this.stopAndCleanup();\n            this.requestUserMedia();\n        }\n    };\n    Webcam.prototype.componentWillUnmount = function () {\n        this.unmounted = true;\n        this.stopAndCleanup();\n    };\n    Webcam.stopMediaStream = function (stream) {\n        if (stream) {\n            if (stream.getVideoTracks && stream.getAudioTracks) {\n                stream.getVideoTracks().map(function (track) {\n                    stream.removeTrack(track);\n                    track.stop();\n                });\n                stream.getAudioTracks().map(function (track) {\n                    stream.removeTrack(track);\n                    track.stop();\n                });\n            }\n            else {\n                stream.stop();\n            }\n        }\n    };\n    Webcam.prototype.stopAndCleanup = function () {\n        var state = this.state;\n        if (state.hasUserMedia) {\n            Webcam.stopMediaStream(this.stream);\n            if (state.src) {\n                window.URL.revokeObjectURL(state.src);\n            }\n        }\n    };\n    Webcam.prototype.getScreenshot = function (screenshotDimensions) {\n        var _a = this, state = _a.state, props = _a.props;\n        if (!state.hasUserMedia)\n            return null;\n        var canvas = this.getCanvas(screenshotDimensions);\n        return (canvas &&\n            canvas.toDataURL(props.screenshotFormat, props.screenshotQuality));\n    };\n    Webcam.prototype.getCanvas = function (screenshotDimensions) {\n        var _a = this, state = _a.state, props = _a.props;\n        if (!this.video) {\n            return null;\n        }\n        if (!state.hasUserMedia || !this.video.videoHeight)\n            return null;\n        if (!this.ctx) {\n            var canvasWidth = this.video.videoWidth;\n            var canvasHeight = this.video.videoHeight;\n            if (!this.props.forceScreenshotSourceSize) {\n                var aspectRatio = canvasWidth / canvasHeight;\n                canvasWidth = props.minScreenshotWidth || this.video.clientWidth;\n                canvasHeight = canvasWidth / aspectRatio;\n                if (props.minScreenshotHeight &&\n                    canvasHeight < props.minScreenshotHeight) {\n                    canvasHeight = props.minScreenshotHeight;\n                    canvasWidth = canvasHeight * aspectRatio;\n                }\n            }\n            this.canvas = document.createElement(\"canvas\");\n            this.canvas.width = (screenshotDimensions === null || screenshotDimensions === void 0 ? void 0 : screenshotDimensions.width) || canvasWidth;\n            this.canvas.height = (screenshotDimensions === null || screenshotDimensions === void 0 ? void 0 : screenshotDimensions.height) || canvasHeight;\n            this.ctx = this.canvas.getContext(\"2d\");\n        }\n        var _b = this, ctx = _b.ctx, canvas = _b.canvas;\n        if (ctx && canvas) {\n            // adjust the height and width of the canvas to the given dimensions\n            canvas.width = (screenshotDimensions === null || screenshotDimensions === void 0 ? void 0 : screenshotDimensions.width) || canvas.width;\n            canvas.height = (screenshotDimensions === null || screenshotDimensions === void 0 ? void 0 : screenshotDimensions.height) || canvas.height;\n            // mirror the screenshot\n            if (props.mirrored) {\n                ctx.translate(canvas.width, 0);\n                ctx.scale(-1, 1);\n            }\n            ctx.imageSmoothingEnabled = props.imageSmoothing;\n            ctx.drawImage(this.video, 0, 0, (screenshotDimensions === null || screenshotDimensions === void 0 ? void 0 : screenshotDimensions.width) || canvas.width, (screenshotDimensions === null || screenshotDimensions === void 0 ? void 0 : screenshotDimensions.height) || canvas.height);\n            // invert mirroring\n            if (props.mirrored) {\n                ctx.scale(-1, 1);\n                ctx.translate(-canvas.width, 0);\n            }\n        }\n        return canvas;\n    };\n    Webcam.prototype.requestUserMedia = function () {\n        var _this = this;\n        var props = this.props;\n        var sourceSelected = function (audioConstraints, videoConstraints) {\n            var constraints = {\n                video: typeof videoConstraints !== \"undefined\" ? videoConstraints : true\n            };\n            if (props.audio) {\n                constraints.audio =\n                    typeof audioConstraints !== \"undefined\" ? audioConstraints : true;\n            }\n            _this.requestUserMediaId++;\n            var myRequestUserMediaId = _this.requestUserMediaId;\n            navigator.mediaDevices\n                .getUserMedia(constraints)\n                .then(function (stream) {\n                if (_this.unmounted || myRequestUserMediaId !== _this.requestUserMediaId) {\n                    Webcam.stopMediaStream(stream);\n                }\n                else {\n                    _this.handleUserMedia(null, stream);\n                }\n            })\n                .catch(function (e) {\n                _this.handleUserMedia(e);\n            });\n        };\n        if (\"mediaDevices\" in navigator) {\n            sourceSelected(props.audioConstraints, props.videoConstraints);\n        }\n        else {\n            var optionalSource_1 = function (id) { return ({ optional: [{ sourceId: id }] }); };\n            var constraintToSourceId_1 = function (constraint) {\n                var deviceId = constraint.deviceId;\n                if (typeof deviceId === \"string\") {\n                    return deviceId;\n                }\n                if (Array.isArray(deviceId) && deviceId.length > 0) {\n                    return deviceId[0];\n                }\n                if (typeof deviceId === \"object\" && deviceId.ideal) {\n                    return deviceId.ideal;\n                }\n                return null;\n            };\n            // @ts-ignore: deprecated api\n            MediaStreamTrack.getSources(function (sources) {\n                var audioSource = null;\n                var videoSource = null;\n                sources.forEach(function (source) {\n                    if (source.kind === \"audio\") {\n                        audioSource = source.id;\n                    }\n                    else if (source.kind === \"video\") {\n                        videoSource = source.id;\n                    }\n                });\n                var audioSourceId = constraintToSourceId_1(props.audioConstraints);\n                if (audioSourceId) {\n                    audioSource = audioSourceId;\n                }\n                var videoSourceId = constraintToSourceId_1(props.videoConstraints);\n                if (videoSourceId) {\n                    videoSource = videoSourceId;\n                }\n                sourceSelected(optionalSource_1(audioSource), optionalSource_1(videoSource));\n            });\n        }\n    };\n    Webcam.prototype.handleUserMedia = function (err, stream) {\n        var props = this.props;\n        if (err || !stream) {\n            this.setState({ hasUserMedia: false });\n            props.onUserMediaError(err);\n            return;\n        }\n        this.stream = stream;\n        try {\n            if (this.video) {\n                this.video.srcObject = stream;\n            }\n            this.setState({ hasUserMedia: true });\n        }\n        catch (error) {\n            this.setState({\n                hasUserMedia: true,\n                src: window.URL.createObjectURL(stream)\n            });\n        }\n        props.onUserMedia(stream);\n    };\n    Webcam.prototype.render = function () {\n        var _this = this;\n        var _a = this, state = _a.state, props = _a.props;\n        var audio = props.audio, forceScreenshotSourceSize = props.forceScreenshotSourceSize, disablePictureInPicture = props.disablePictureInPicture, onUserMedia = props.onUserMedia, onUserMediaError = props.onUserMediaError, screenshotFormat = props.screenshotFormat, screenshotQuality = props.screenshotQuality, minScreenshotWidth = props.minScreenshotWidth, minScreenshotHeight = props.minScreenshotHeight, audioConstraints = props.audioConstraints, videoConstraints = props.videoConstraints, imageSmoothing = props.imageSmoothing, mirrored = props.mirrored, _b = props.style, style = _b === void 0 ? {} : _b, children = props.children, rest = __rest(props, [\"audio\", \"forceScreenshotSourceSize\", \"disablePictureInPicture\", \"onUserMedia\", \"onUserMediaError\", \"screenshotFormat\", \"screenshotQuality\", \"minScreenshotWidth\", \"minScreenshotHeight\", \"audioConstraints\", \"videoConstraints\", \"imageSmoothing\", \"mirrored\", \"style\", \"children\"]);\n        var videoStyle = mirrored ? __assign(__assign({}, style), { transform: (style.transform || \"\") + \" scaleX(-1)\" }) : style;\n        var childrenProps = {\n            getScreenshot: this.getScreenshot.bind(this),\n        };\n        return (react__WEBPACK_IMPORTED_MODULE_0__[\"createElement\"](react__WEBPACK_IMPORTED_MODULE_0__[\"Fragment\"], null,\n            react__WEBPACK_IMPORTED_MODULE_0__[\"createElement\"](\"video\", __assign({ autoPlay: true, disablePictureInPicture: disablePictureInPicture, src: state.src, muted: !audio, playsInline: true, ref: function (ref) {\n                    _this.video = ref;\n                }, style: videoStyle }, rest)),\n            children && children(childrenProps)));\n    };\n    Webcam.defaultProps = {\n        audio: false,\n        disablePictureInPicture: false,\n        forceScreenshotSourceSize: false,\n        imageSmoothing: true,\n        mirrored: false,\n        onUserMedia: function () { return undefined; },\n        onUserMediaError: function () { return undefined; },\n        screenshotFormat: \"image/webp\",\n        screenshotQuality: 0.92,\n    };\n    return Webcam;\n}(react__WEBPACK_IMPORTED_MODULE_0__[\"Component\"]));\n/* harmony default export */ __webpack_exports__[\"default\"] = (Webcam);\n\n\n/***/ }),\n\n/***/ \"react\":\n/*!**************************************************************************************!*\\\n  !*** external {\"root\":\"React\",\"commonjs2\":\"react\",\"commonjs\":\"react\",\"amd\":\"react\"} ***!\n  \\**************************************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports) {\n\nmodule.exports = __WEBPACK_EXTERNAL_MODULE_react__;\n\n/***/ })\n\n/******/ })[\"default\"];\n});\n//# sourceMappingURL=react-webcam.js.map","/**\n * @license React\n * react-jsx-runtime.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use strict';var f=require(\"react\"),k=Symbol.for(\"react.element\"),l=Symbol.for(\"react.fragment\"),m=Object.prototype.hasOwnProperty,n=f.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,p={key:!0,ref:!0,__self:!0,__source:!0};\nfunction q(c,a,g){var b,d={},e=null,h=null;void 0!==g&&(e=\"\"+g);void 0!==a.key&&(e=\"\"+a.key);void 0!==a.ref&&(h=a.ref);for(b in a)m.call(a,b)&&!p.hasOwnProperty(b)&&(d[b]=a[b]);if(c&&c.defaultProps)for(b in a=c.defaultProps,a)void 0===d[b]&&(d[b]=a[b]);return{$$typeof:k,type:c,key:e,ref:h,props:d,_owner:n.current}}exports.Fragment=l;exports.jsx=q;exports.jsxs=q;\n","/**\n * @license React\n * react.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use strict';var l=Symbol.for(\"react.element\"),n=Symbol.for(\"react.portal\"),p=Symbol.for(\"react.fragment\"),q=Symbol.for(\"react.strict_mode\"),r=Symbol.for(\"react.profiler\"),t=Symbol.for(\"react.provider\"),u=Symbol.for(\"react.context\"),v=Symbol.for(\"react.forward_ref\"),w=Symbol.for(\"react.suspense\"),x=Symbol.for(\"react.memo\"),y=Symbol.for(\"react.lazy\"),z=Symbol.iterator;function A(a){if(null===a||\"object\"!==typeof a)return null;a=z&&a[z]||a[\"@@iterator\"];return\"function\"===typeof a?a:null}\nvar B={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},C=Object.assign,D={};function E(a,b,e){this.props=a;this.context=b;this.refs=D;this.updater=e||B}E.prototype.isReactComponent={};\nE.prototype.setState=function(a,b){if(\"object\"!==typeof a&&\"function\"!==typeof a&&null!=a)throw Error(\"setState(...): takes an object of state variables to update or a function which returns an object of state variables.\");this.updater.enqueueSetState(this,a,b,\"setState\")};E.prototype.forceUpdate=function(a){this.updater.enqueueForceUpdate(this,a,\"forceUpdate\")};function F(){}F.prototype=E.prototype;function G(a,b,e){this.props=a;this.context=b;this.refs=D;this.updater=e||B}var H=G.prototype=new F;\nH.constructor=G;C(H,E.prototype);H.isPureReactComponent=!0;var I=Array.isArray,J=Object.prototype.hasOwnProperty,K={current:null},L={key:!0,ref:!0,__self:!0,__source:!0};\nfunction M(a,b,e){var d,c={},k=null,h=null;if(null!=b)for(d in void 0!==b.ref&&(h=b.ref),void 0!==b.key&&(k=\"\"+b.key),b)J.call(b,d)&&!L.hasOwnProperty(d)&&(c[d]=b[d]);var g=arguments.length-2;if(1===g)c.children=e;else if(1<g){for(var f=Array(g),m=0;m<g;m++)f[m]=arguments[m+2];c.children=f}if(a&&a.defaultProps)for(d in g=a.defaultProps,g)void 0===c[d]&&(c[d]=g[d]);return{$$typeof:l,type:a,key:k,ref:h,props:c,_owner:K.current}}\nfunction N(a,b){return{$$typeof:l,type:a.type,key:b,ref:a.ref,props:a.props,_owner:a._owner}}function O(a){return\"object\"===typeof a&&null!==a&&a.$$typeof===l}function escape(a){var b={\"=\":\"=0\",\":\":\"=2\"};return\"$\"+a.replace(/[=:]/g,function(a){return b[a]})}var P=/\\/+/g;function Q(a,b){return\"object\"===typeof a&&null!==a&&null!=a.key?escape(\"\"+a.key):b.toString(36)}\nfunction R(a,b,e,d,c){var k=typeof a;if(\"undefined\"===k||\"boolean\"===k)a=null;var h=!1;if(null===a)h=!0;else switch(k){case \"string\":case \"number\":h=!0;break;case \"object\":switch(a.$$typeof){case l:case n:h=!0}}if(h)return h=a,c=c(h),a=\"\"===d?\".\"+Q(h,0):d,I(c)?(e=\"\",null!=a&&(e=a.replace(P,\"$&/\")+\"/\"),R(c,b,e,\"\",function(a){return a})):null!=c&&(O(c)&&(c=N(c,e+(!c.key||h&&h.key===c.key?\"\":(\"\"+c.key).replace(P,\"$&/\")+\"/\")+a)),b.push(c)),1;h=0;d=\"\"===d?\".\":d+\":\";if(I(a))for(var g=0;g<a.length;g++){k=\na[g];var f=d+Q(k,g);h+=R(k,b,e,f,c)}else if(f=A(a),\"function\"===typeof f)for(a=f.call(a),g=0;!(k=a.next()).done;)k=k.value,f=d+Q(k,g++),h+=R(k,b,e,f,c);else if(\"object\"===k)throw b=String(a),Error(\"Objects are not valid as a React child (found: \"+(\"[object Object]\"===b?\"object with keys {\"+Object.keys(a).join(\", \")+\"}\":b)+\"). If you meant to render a collection of children, use an array instead.\");return h}\nfunction S(a,b,e){if(null==a)return a;var d=[],c=0;R(a,d,\"\",\"\",function(a){return b.call(e,a,c++)});return d}function T(a){if(-1===a._status){var b=a._result;b=b();b.then(function(b){if(0===a._status||-1===a._status)a._status=1,a._result=b},function(b){if(0===a._status||-1===a._status)a._status=2,a._result=b});-1===a._status&&(a._status=0,a._result=b)}if(1===a._status)return a._result.default;throw a._result;}\nvar U={current:null},V={transition:null},W={ReactCurrentDispatcher:U,ReactCurrentBatchConfig:V,ReactCurrentOwner:K};exports.Children={map:S,forEach:function(a,b,e){S(a,function(){b.apply(this,arguments)},e)},count:function(a){var b=0;S(a,function(){b++});return b},toArray:function(a){return S(a,function(a){return a})||[]},only:function(a){if(!O(a))throw Error(\"React.Children.only expected to receive a single React element child.\");return a}};exports.Component=E;exports.Fragment=p;\nexports.Profiler=r;exports.PureComponent=G;exports.StrictMode=q;exports.Suspense=w;exports.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED=W;\nexports.cloneElement=function(a,b,e){if(null===a||void 0===a)throw Error(\"React.cloneElement(...): The argument must be a React element, but you passed \"+a+\".\");var d=C({},a.props),c=a.key,k=a.ref,h=a._owner;if(null!=b){void 0!==b.ref&&(k=b.ref,h=K.current);void 0!==b.key&&(c=\"\"+b.key);if(a.type&&a.type.defaultProps)var g=a.type.defaultProps;for(f in b)J.call(b,f)&&!L.hasOwnProperty(f)&&(d[f]=void 0===b[f]&&void 0!==g?g[f]:b[f])}var f=arguments.length-2;if(1===f)d.children=e;else if(1<f){g=Array(f);\nfor(var m=0;m<f;m++)g[m]=arguments[m+2];d.children=g}return{$$typeof:l,type:a.type,key:c,ref:k,props:d,_owner:h}};exports.createContext=function(a){a={$$typeof:u,_currentValue:a,_currentValue2:a,_threadCount:0,Provider:null,Consumer:null,_defaultValue:null,_globalName:null};a.Provider={$$typeof:t,_context:a};return a.Consumer=a};exports.createElement=M;exports.createFactory=function(a){var b=M.bind(null,a);b.type=a;return b};exports.createRef=function(){return{current:null}};\nexports.forwardRef=function(a){return{$$typeof:v,render:a}};exports.isValidElement=O;exports.lazy=function(a){return{$$typeof:y,_payload:{_status:-1,_result:a},_init:T}};exports.memo=function(a,b){return{$$typeof:x,type:a,compare:void 0===b?null:b}};exports.startTransition=function(a){var b=V.transition;V.transition={};try{a()}finally{V.transition=b}};exports.unstable_act=function(){throw Error(\"act(...) is not supported in production builds of React.\");};\nexports.useCallback=function(a,b){return U.current.useCallback(a,b)};exports.useContext=function(a){return U.current.useContext(a)};exports.useDebugValue=function(){};exports.useDeferredValue=function(a){return U.current.useDeferredValue(a)};exports.useEffect=function(a,b){return U.current.useEffect(a,b)};exports.useId=function(){return U.current.useId()};exports.useImperativeHandle=function(a,b,e){return U.current.useImperativeHandle(a,b,e)};\nexports.useInsertionEffect=function(a,b){return U.current.useInsertionEffect(a,b)};exports.useLayoutEffect=function(a,b){return U.current.useLayoutEffect(a,b)};exports.useMemo=function(a,b){return U.current.useMemo(a,b)};exports.useReducer=function(a,b,e){return U.current.useReducer(a,b,e)};exports.useRef=function(a){return U.current.useRef(a)};exports.useState=function(a){return U.current.useState(a)};exports.useSyncExternalStore=function(a,b,e){return U.current.useSyncExternalStore(a,b,e)};\nexports.useTransition=function(){return U.current.useTransition()};exports.version=\"18.2.0\";\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n  module.exports = require('./cjs/react.production.min.js');\n} else {\n  module.exports = require('./cjs/react.development.js');\n}\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n  module.exports = require('./cjs/react-jsx-runtime.production.min.js');\n} else {\n  module.exports = require('./cjs/react-jsx-runtime.development.js');\n}\n","!function(e,t){\"object\"==typeof exports&&\"undefined\"!=typeof module?t(exports):\"function\"==typeof define&&define.amd?define([\"exports\"],t):t(e.reduxLogger=e.reduxLogger||{})}(this,function(e){\"use strict\";function t(e,t){e.super_=t,e.prototype=Object.create(t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}})}function r(e,t){Object.defineProperty(this,\"kind\",{value:e,enumerable:!0}),t&&t.length&&Object.defineProperty(this,\"path\",{value:t,enumerable:!0})}function n(e,t,r){n.super_.call(this,\"E\",e),Object.defineProperty(this,\"lhs\",{value:t,enumerable:!0}),Object.defineProperty(this,\"rhs\",{value:r,enumerable:!0})}function o(e,t){o.super_.call(this,\"N\",e),Object.defineProperty(this,\"rhs\",{value:t,enumerable:!0})}function i(e,t){i.super_.call(this,\"D\",e),Object.defineProperty(this,\"lhs\",{value:t,enumerable:!0})}function a(e,t,r){a.super_.call(this,\"A\",e),Object.defineProperty(this,\"index\",{value:t,enumerable:!0}),Object.defineProperty(this,\"item\",{value:r,enumerable:!0})}function f(e,t,r){var n=e.slice((r||t)+1||e.length);return e.length=t<0?e.length+t:t,e.push.apply(e,n),e}function u(e){var t=\"undefined\"==typeof e?\"undefined\":N(e);return\"object\"!==t?t:e===Math?\"math\":null===e?\"null\":Array.isArray(e)?\"array\":\"[object Date]\"===Object.prototype.toString.call(e)?\"date\":\"function\"==typeof e.toString&&/^\\/.*\\//.test(e.toString())?\"regexp\":\"object\"}function l(e,t,r,c,s,d,p){s=s||[],p=p||[];var g=s.slice(0);if(\"undefined\"!=typeof d){if(c){if(\"function\"==typeof c&&c(g,d))return;if(\"object\"===(\"undefined\"==typeof c?\"undefined\":N(c))){if(c.prefilter&&c.prefilter(g,d))return;if(c.normalize){var h=c.normalize(g,d,e,t);h&&(e=h[0],t=h[1])}}}g.push(d)}\"regexp\"===u(e)&&\"regexp\"===u(t)&&(e=e.toString(),t=t.toString());var y=\"undefined\"==typeof e?\"undefined\":N(e),v=\"undefined\"==typeof t?\"undefined\":N(t),b=\"undefined\"!==y||p&&p[p.length-1].lhs&&p[p.length-1].lhs.hasOwnProperty(d),m=\"undefined\"!==v||p&&p[p.length-1].rhs&&p[p.length-1].rhs.hasOwnProperty(d);if(!b&&m)r(new o(g,t));else if(!m&&b)r(new i(g,e));else if(u(e)!==u(t))r(new n(g,e,t));else if(\"date\"===u(e)&&e-t!==0)r(new n(g,e,t));else if(\"object\"===y&&null!==e&&null!==t)if(p.filter(function(t){return t.lhs===e}).length)e!==t&&r(new n(g,e,t));else{if(p.push({lhs:e,rhs:t}),Array.isArray(e)){var w;e.length;for(w=0;w<e.length;w++)w>=t.length?r(new a(g,w,new i(void 0,e[w]))):l(e[w],t[w],r,c,g,w,p);for(;w<t.length;)r(new a(g,w,new o(void 0,t[w++])))}else{var x=Object.keys(e),S=Object.keys(t);x.forEach(function(n,o){var i=S.indexOf(n);i>=0?(l(e[n],t[n],r,c,g,n,p),S=f(S,i)):l(e[n],void 0,r,c,g,n,p)}),S.forEach(function(e){l(void 0,t[e],r,c,g,e,p)})}p.length=p.length-1}else e!==t&&(\"number\"===y&&isNaN(e)&&isNaN(t)||r(new n(g,e,t)))}function c(e,t,r,n){return n=n||[],l(e,t,function(e){e&&n.push(e)},r),n.length?n:void 0}function s(e,t,r){if(r.path&&r.path.length){var n,o=e[t],i=r.path.length-1;for(n=0;n<i;n++)o=o[r.path[n]];switch(r.kind){case\"A\":s(o[r.path[n]],r.index,r.item);break;case\"D\":delete o[r.path[n]];break;case\"E\":case\"N\":o[r.path[n]]=r.rhs}}else switch(r.kind){case\"A\":s(e[t],r.index,r.item);break;case\"D\":e=f(e,t);break;case\"E\":case\"N\":e[t]=r.rhs}return e}function d(e,t,r){if(e&&t&&r&&r.kind){for(var n=e,o=-1,i=r.path?r.path.length-1:0;++o<i;)\"undefined\"==typeof n[r.path[o]]&&(n[r.path[o]]=\"number\"==typeof r.path[o]?[]:{}),n=n[r.path[o]];switch(r.kind){case\"A\":s(r.path?n[r.path[o]]:n,r.index,r.item);break;case\"D\":delete n[r.path[o]];break;case\"E\":case\"N\":n[r.path[o]]=r.rhs}}}function p(e,t,r){if(r.path&&r.path.length){var n,o=e[t],i=r.path.length-1;for(n=0;n<i;n++)o=o[r.path[n]];switch(r.kind){case\"A\":p(o[r.path[n]],r.index,r.item);break;case\"D\":o[r.path[n]]=r.lhs;break;case\"E\":o[r.path[n]]=r.lhs;break;case\"N\":delete o[r.path[n]]}}else switch(r.kind){case\"A\":p(e[t],r.index,r.item);break;case\"D\":e[t]=r.lhs;break;case\"E\":e[t]=r.lhs;break;case\"N\":e=f(e,t)}return e}function g(e,t,r){if(e&&t&&r&&r.kind){var n,o,i=e;for(o=r.path.length-1,n=0;n<o;n++)\"undefined\"==typeof i[r.path[n]]&&(i[r.path[n]]={}),i=i[r.path[n]];switch(r.kind){case\"A\":p(i[r.path[n]],r.index,r.item);break;case\"D\":i[r.path[n]]=r.lhs;break;case\"E\":i[r.path[n]]=r.lhs;break;case\"N\":delete i[r.path[n]]}}}function h(e,t,r){if(e&&t){var n=function(n){r&&!r(e,t,n)||d(e,t,n)};l(e,t,n)}}function y(e){return\"color: \"+F[e].color+\"; font-weight: bold\"}function v(e){var t=e.kind,r=e.path,n=e.lhs,o=e.rhs,i=e.index,a=e.item;switch(t){case\"E\":return[r.join(\".\"),n,\"→\",o];case\"N\":return[r.join(\".\"),o];case\"D\":return[r.join(\".\")];case\"A\":return[r.join(\".\")+\"[\"+i+\"]\",a];default:return[]}}function b(e,t,r,n){var o=c(e,t);try{n?r.groupCollapsed(\"diff\"):r.group(\"diff\")}catch(e){r.log(\"diff\")}o?o.forEach(function(e){var t=e.kind,n=v(e);r.log.apply(r,[\"%c \"+F[t].text,y(t)].concat(P(n)))}):r.log(\"—— no diff ——\");try{r.groupEnd()}catch(e){r.log(\"—— diff end —— \")}}function m(e,t,r,n){switch(\"undefined\"==typeof e?\"undefined\":N(e)){case\"object\":return\"function\"==typeof e[n]?e[n].apply(e,P(r)):e[n];case\"function\":return e(t);default:return e}}function w(e){var t=e.timestamp,r=e.duration;return function(e,n,o){var i=[\"action\"];return i.push(\"%c\"+String(e.type)),t&&i.push(\"%c@ \"+n),r&&i.push(\"%c(in \"+o.toFixed(2)+\" ms)\"),i.join(\" \")}}function x(e,t){var r=t.logger,n=t.actionTransformer,o=t.titleFormatter,i=void 0===o?w(t):o,a=t.collapsed,f=t.colors,u=t.level,l=t.diff,c=\"undefined\"==typeof t.titleFormatter;e.forEach(function(o,s){var d=o.started,p=o.startedTime,g=o.action,h=o.prevState,y=o.error,v=o.took,w=o.nextState,x=e[s+1];x&&(w=x.prevState,v=x.started-d);var S=n(g),k=\"function\"==typeof a?a(function(){return w},g,o):a,j=D(p),E=f.title?\"color: \"+f.title(S)+\";\":\"\",A=[\"color: gray; font-weight: lighter;\"];A.push(E),t.timestamp&&A.push(\"color: gray; font-weight: lighter;\"),t.duration&&A.push(\"color: gray; font-weight: lighter;\");var O=i(S,j,v);try{k?f.title&&c?r.groupCollapsed.apply(r,[\"%c \"+O].concat(A)):r.groupCollapsed(O):f.title&&c?r.group.apply(r,[\"%c \"+O].concat(A)):r.group(O)}catch(e){r.log(O)}var N=m(u,S,[h],\"prevState\"),P=m(u,S,[S],\"action\"),C=m(u,S,[y,h],\"error\"),F=m(u,S,[w],\"nextState\");if(N)if(f.prevState){var L=\"color: \"+f.prevState(h)+\"; font-weight: bold\";r[N](\"%c prev state\",L,h)}else r[N](\"prev state\",h);if(P)if(f.action){var T=\"color: \"+f.action(S)+\"; font-weight: bold\";r[P](\"%c action    \",T,S)}else r[P](\"action    \",S);if(y&&C)if(f.error){var M=\"color: \"+f.error(y,h)+\"; font-weight: bold;\";r[C](\"%c error     \",M,y)}else r[C](\"error     \",y);if(F)if(f.nextState){var _=\"color: \"+f.nextState(w)+\"; font-weight: bold\";r[F](\"%c next state\",_,w)}else r[F](\"next state\",w);l&&b(h,w,r,k);try{r.groupEnd()}catch(e){r.log(\"—— log end ——\")}})}function S(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=Object.assign({},L,e),r=t.logger,n=t.stateTransformer,o=t.errorTransformer,i=t.predicate,a=t.logErrors,f=t.diffPredicate;if(\"undefined\"==typeof r)return function(){return function(e){return function(t){return e(t)}}};if(e.getState&&e.dispatch)return console.error(\"[redux-logger] redux-logger not installed. Make sure to pass logger instance as middleware:\\n// Logger with default options\\nimport { logger } from 'redux-logger'\\nconst store = createStore(\\n  reducer,\\n  applyMiddleware(logger)\\n)\\n// Or you can create your own logger with custom options http://bit.ly/redux-logger-options\\nimport createLogger from 'redux-logger'\\nconst logger = createLogger({\\n  // ...options\\n});\\nconst store = createStore(\\n  reducer,\\n  applyMiddleware(logger)\\n)\\n\"),function(){return function(e){return function(t){return e(t)}}};var u=[];return function(e){var r=e.getState;return function(e){return function(l){if(\"function\"==typeof i&&!i(r,l))return e(l);var c={};u.push(c),c.started=O.now(),c.startedTime=new Date,c.prevState=n(r()),c.action=l;var s=void 0;if(a)try{s=e(l)}catch(e){c.error=o(e)}else s=e(l);c.took=O.now()-c.started,c.nextState=n(r());var d=t.diff&&\"function\"==typeof f?f(r,l):t.diff;if(x(u,Object.assign({},t,{diff:d})),u.length=0,c.error)throw c.error;return s}}}}var k,j,E=function(e,t){return new Array(t+1).join(e)},A=function(e,t){return E(\"0\",t-e.toString().length)+e},D=function(e){return A(e.getHours(),2)+\":\"+A(e.getMinutes(),2)+\":\"+A(e.getSeconds(),2)+\".\"+A(e.getMilliseconds(),3)},O=\"undefined\"!=typeof performance&&null!==performance&&\"function\"==typeof performance.now?performance:Date,N=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},P=function(e){if(Array.isArray(e)){for(var t=0,r=Array(e.length);t<e.length;t++)r[t]=e[t];return r}return Array.from(e)},C=[];k=\"object\"===(\"undefined\"==typeof global?\"undefined\":N(global))&&global?global:\"undefined\"!=typeof window?window:{},j=k.DeepDiff,j&&C.push(function(){\"undefined\"!=typeof j&&k.DeepDiff===c&&(k.DeepDiff=j,j=void 0)}),t(n,r),t(o,r),t(i,r),t(a,r),Object.defineProperties(c,{diff:{value:c,enumerable:!0},observableDiff:{value:l,enumerable:!0},applyDiff:{value:h,enumerable:!0},applyChange:{value:d,enumerable:!0},revertChange:{value:g,enumerable:!0},isConflict:{value:function(){return\"undefined\"!=typeof j},enumerable:!0},noConflict:{value:function(){return C&&(C.forEach(function(e){e()}),C=null),c},enumerable:!0}});var F={E:{color:\"#2196F3\",text:\"CHANGED:\"},N:{color:\"#4CAF50\",text:\"ADDED:\"},D:{color:\"#F44336\",text:\"DELETED:\"},A:{color:\"#2196F3\",text:\"ARRAY:\"}},L={level:\"log\",logger:console,logErrors:!0,collapsed:void 0,predicate:void 0,duration:!1,timestamp:!0,stateTransformer:function(e){return e},actionTransformer:function(e){return e},errorTransformer:function(e){return e},colors:{title:function(){return\"inherit\"},prevState:function(){return\"#9E9E9E\"},action:function(){return\"#03A9F4\"},nextState:function(){return\"#4CAF50\"},error:function(){return\"#F20404\"}},diff:!1,diffPredicate:void 0,transformer:void 0},T=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.dispatch,r=e.getState;return\"function\"==typeof t||\"function\"==typeof r?S()({dispatch:t,getState:r}):void console.error(\"\\n[redux-logger v3] BREAKING CHANGE\\n[redux-logger v3] Since 3.0.0 redux-logger exports by default logger with default settings.\\n[redux-logger v3] Change\\n[redux-logger v3] import createLogger from 'redux-logger'\\n[redux-logger v3] to\\n[redux-logger v3] import { createLogger } from 'redux-logger'\\n\")};e.defaults=L,e.createLogger=S,e.logger=T,e.default=T,Object.defineProperty(e,\"__esModule\",{value:!0})});\n","/** A function that accepts a potential \"extra argument\" value to be injected later,\r\n * and returns an instance of the thunk middleware that uses that value\r\n */\nfunction createThunkMiddleware(extraArgument) {\n  // Standard Redux middleware definition pattern:\n  // See: https://redux.js.org/tutorials/fundamentals/part-4-store#writing-custom-middleware\n  var middleware = function middleware(_ref) {\n    var dispatch = _ref.dispatch,\n        getState = _ref.getState;\n    return function (next) {\n      return function (action) {\n        // The thunk middleware looks for any functions that were passed to `store.dispatch`.\n        // If this \"action\" is really a function, call it and return the result.\n        if (typeof action === 'function') {\n          // Inject the store's `dispatch` and `getState` methods, as well as any \"extra arg\"\n          return action(dispatch, getState, extraArgument);\n        } // Otherwise, pass the action down the middleware chain as usual\n\n\n        return next(action);\n      };\n    };\n  };\n\n  return middleware;\n}\n\nvar thunk = createThunkMiddleware(); // Attach the factory function so users can create a customized version\n// with whatever \"extra arg\" they want to inject into their thunks\n\nthunk.withExtraArgument = createThunkMiddleware;\nexport default thunk;","export default function _defineProperty(obj, key, value) {\n  if (key in obj) {\n    Object.defineProperty(obj, key, {\n      value: value,\n      enumerable: true,\n      configurable: true,\n      writable: true\n    });\n  } else {\n    obj[key] = value;\n  }\n\n  return obj;\n}","import defineProperty from \"./defineProperty.js\";\n\nfunction ownKeys(object, enumerableOnly) {\n  var keys = Object.keys(object);\n\n  if (Object.getOwnPropertySymbols) {\n    var symbols = Object.getOwnPropertySymbols(object);\n\n    if (enumerableOnly) {\n      symbols = symbols.filter(function (sym) {\n        return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n      });\n    }\n\n    keys.push.apply(keys, symbols);\n  }\n\n  return keys;\n}\n\nexport default function _objectSpread2(target) {\n  for (var i = 1; i < arguments.length; i++) {\n    var source = arguments[i] != null ? arguments[i] : {};\n\n    if (i % 2) {\n      ownKeys(Object(source), true).forEach(function (key) {\n        defineProperty(target, key, source[key]);\n      });\n    } else if (Object.getOwnPropertyDescriptors) {\n      Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n    } else {\n      ownKeys(Object(source)).forEach(function (key) {\n        Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n      });\n    }\n  }\n\n  return target;\n}","import _objectSpread from '@babel/runtime/helpers/esm/objectSpread2';\n\n/**\n * Adapted from React: https://github.com/facebook/react/blob/master/packages/shared/formatProdErrorMessage.js\n *\n * Do not require this module directly! Use normal throw error calls. These messages will be replaced with error codes\n * during build.\n * @param {number} code\n */\nfunction formatProdErrorMessage(code) {\n  return \"Minified Redux error #\" + code + \"; visit https://redux.js.org/Errors?code=\" + code + \" for the full message or \" + 'use the non-minified dev environment for full errors. ';\n}\n\n// Inlined version of the `symbol-observable` polyfill\nvar $$observable = (function () {\n  return typeof Symbol === 'function' && Symbol.observable || '@@observable';\n})();\n\n/**\n * These are private action types reserved by Redux.\n * For any unknown actions, you must return the current state.\n * If the current state is undefined, you must return the initial state.\n * Do not reference these action types directly in your code.\n */\nvar randomString = function randomString() {\n  return Math.random().toString(36).substring(7).split('').join('.');\n};\n\nvar ActionTypes = {\n  INIT: \"@@redux/INIT\" + randomString(),\n  REPLACE: \"@@redux/REPLACE\" + randomString(),\n  PROBE_UNKNOWN_ACTION: function PROBE_UNKNOWN_ACTION() {\n    return \"@@redux/PROBE_UNKNOWN_ACTION\" + randomString();\n  }\n};\n\n/**\n * @param {any} obj The object to inspect.\n * @returns {boolean} True if the argument appears to be a plain object.\n */\nfunction isPlainObject(obj) {\n  if (typeof obj !== 'object' || obj === null) return false;\n  var proto = obj;\n\n  while (Object.getPrototypeOf(proto) !== null) {\n    proto = Object.getPrototypeOf(proto);\n  }\n\n  return Object.getPrototypeOf(obj) === proto;\n}\n\n// Inlined / shortened version of `kindOf` from https://github.com/jonschlinkert/kind-of\nfunction miniKindOf(val) {\n  if (val === void 0) return 'undefined';\n  if (val === null) return 'null';\n  var type = typeof val;\n\n  switch (type) {\n    case 'boolean':\n    case 'string':\n    case 'number':\n    case 'symbol':\n    case 'function':\n      {\n        return type;\n      }\n  }\n\n  if (Array.isArray(val)) return 'array';\n  if (isDate(val)) return 'date';\n  if (isError(val)) return 'error';\n  var constructorName = ctorName(val);\n\n  switch (constructorName) {\n    case 'Symbol':\n    case 'Promise':\n    case 'WeakMap':\n    case 'WeakSet':\n    case 'Map':\n    case 'Set':\n      return constructorName;\n  } // other\n\n\n  return type.slice(8, -1).toLowerCase().replace(/\\s/g, '');\n}\n\nfunction ctorName(val) {\n  return typeof val.constructor === 'function' ? val.constructor.name : null;\n}\n\nfunction isError(val) {\n  return val instanceof Error || typeof val.message === 'string' && val.constructor && typeof val.constructor.stackTraceLimit === 'number';\n}\n\nfunction isDate(val) {\n  if (val instanceof Date) return true;\n  return typeof val.toDateString === 'function' && typeof val.getDate === 'function' && typeof val.setDate === 'function';\n}\n\nfunction kindOf(val) {\n  var typeOfVal = typeof val;\n\n  if (process.env.NODE_ENV !== 'production') {\n    typeOfVal = miniKindOf(val);\n  }\n\n  return typeOfVal;\n}\n\n/**\n * @deprecated\n *\n * **We recommend using the `configureStore` method\n * of the `@reduxjs/toolkit` package**, which replaces `createStore`.\n *\n * Redux Toolkit is our recommended approach for writing Redux logic today,\n * including store setup, reducers, data fetching, and more.\n *\n * **For more details, please read this Redux docs page:**\n * **https://redux.js.org/introduction/why-rtk-is-redux-today**\n *\n * `configureStore` from Redux Toolkit is an improved version of `createStore` that\n * simplifies setup and helps avoid common bugs.\n *\n * You should not be using the `redux` core package by itself today, except for learning purposes.\n * The `createStore` method from the core `redux` package will not be removed, but we encourage\n * all users to migrate to using Redux Toolkit for all Redux code.\n *\n * If you want to use `createStore` without this visual deprecation warning, use\n * the `legacy_createStore` import instead:\n *\n * `import { legacy_createStore as createStore} from 'redux'`\n *\n */\n\nfunction createStore(reducer, preloadedState, enhancer) {\n  var _ref2;\n\n  if (typeof preloadedState === 'function' && typeof enhancer === 'function' || typeof enhancer === 'function' && typeof arguments[3] === 'function') {\n    throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(0) : 'It looks like you are passing several store enhancers to ' + 'createStore(). This is not supported. Instead, compose them ' + 'together to a single function. See https://redux.js.org/tutorials/fundamentals/part-4-store#creating-a-store-with-enhancers for an example.');\n  }\n\n  if (typeof preloadedState === 'function' && typeof enhancer === 'undefined') {\n    enhancer = preloadedState;\n    preloadedState = undefined;\n  }\n\n  if (typeof enhancer !== 'undefined') {\n    if (typeof enhancer !== 'function') {\n      throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(1) : \"Expected the enhancer to be a function. Instead, received: '\" + kindOf(enhancer) + \"'\");\n    }\n\n    return enhancer(createStore)(reducer, preloadedState);\n  }\n\n  if (typeof reducer !== 'function') {\n    throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(2) : \"Expected the root reducer to be a function. Instead, received: '\" + kindOf(reducer) + \"'\");\n  }\n\n  var currentReducer = reducer;\n  var currentState = preloadedState;\n  var currentListeners = [];\n  var nextListeners = currentListeners;\n  var isDispatching = false;\n  /**\n   * This makes a shallow copy of currentListeners so we can use\n   * nextListeners as a temporary list while dispatching.\n   *\n   * This prevents any bugs around consumers calling\n   * subscribe/unsubscribe in the middle of a dispatch.\n   */\n\n  function ensureCanMutateNextListeners() {\n    if (nextListeners === currentListeners) {\n      nextListeners = currentListeners.slice();\n    }\n  }\n  /**\n   * Reads the state tree managed by the store.\n   *\n   * @returns {any} The current state tree of your application.\n   */\n\n\n  function getState() {\n    if (isDispatching) {\n      throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(3) : 'You may not call store.getState() while the reducer is executing. ' + 'The reducer has already received the state as an argument. ' + 'Pass it down from the top reducer instead of reading it from the store.');\n    }\n\n    return currentState;\n  }\n  /**\n   * Adds a change listener. It will be called any time an action is dispatched,\n   * and some part of the state tree may potentially have changed. You may then\n   * call `getState()` to read the current state tree inside the callback.\n   *\n   * You may call `dispatch()` from a change listener, with the following\n   * caveats:\n   *\n   * 1. The subscriptions are snapshotted just before every `dispatch()` call.\n   * If you subscribe or unsubscribe while the listeners are being invoked, this\n   * will not have any effect on the `dispatch()` that is currently in progress.\n   * However, the next `dispatch()` call, whether nested or not, will use a more\n   * recent snapshot of the subscription list.\n   *\n   * 2. The listener should not expect to see all state changes, as the state\n   * might have been updated multiple times during a nested `dispatch()` before\n   * the listener is called. It is, however, guaranteed that all subscribers\n   * registered before the `dispatch()` started will be called with the latest\n   * state by the time it exits.\n   *\n   * @param {Function} listener A callback to be invoked on every dispatch.\n   * @returns {Function} A function to remove this change listener.\n   */\n\n\n  function subscribe(listener) {\n    if (typeof listener !== 'function') {\n      throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(4) : \"Expected the listener to be a function. Instead, received: '\" + kindOf(listener) + \"'\");\n    }\n\n    if (isDispatching) {\n      throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(5) : 'You may not call store.subscribe() while the reducer is executing. ' + 'If you would like to be notified after the store has been updated, subscribe from a ' + 'component and invoke store.getState() in the callback to access the latest state. ' + 'See https://redux.js.org/api/store#subscribelistener for more details.');\n    }\n\n    var isSubscribed = true;\n    ensureCanMutateNextListeners();\n    nextListeners.push(listener);\n    return function unsubscribe() {\n      if (!isSubscribed) {\n        return;\n      }\n\n      if (isDispatching) {\n        throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(6) : 'You may not unsubscribe from a store listener while the reducer is executing. ' + 'See https://redux.js.org/api/store#subscribelistener for more details.');\n      }\n\n      isSubscribed = false;\n      ensureCanMutateNextListeners();\n      var index = nextListeners.indexOf(listener);\n      nextListeners.splice(index, 1);\n      currentListeners = null;\n    };\n  }\n  /**\n   * Dispatches an action. It is the only way to trigger a state change.\n   *\n   * The `reducer` function, used to create the store, will be called with the\n   * current state tree and the given `action`. Its return value will\n   * be considered the **next** state of the tree, and the change listeners\n   * will be notified.\n   *\n   * The base implementation only supports plain object actions. If you want to\n   * dispatch a Promise, an Observable, a thunk, or something else, you need to\n   * wrap your store creating function into the corresponding middleware. For\n   * example, see the documentation for the `redux-thunk` package. Even the\n   * middleware will eventually dispatch plain object actions using this method.\n   *\n   * @param {Object} action A plain object representing “what changed”. It is\n   * a good idea to keep actions serializable so you can record and replay user\n   * sessions, or use the time travelling `redux-devtools`. An action must have\n   * a `type` property which may not be `undefined`. It is a good idea to use\n   * string constants for action types.\n   *\n   * @returns {Object} For convenience, the same action object you dispatched.\n   *\n   * Note that, if you use a custom middleware, it may wrap `dispatch()` to\n   * return something else (for example, a Promise you can await).\n   */\n\n\n  function dispatch(action) {\n    if (!isPlainObject(action)) {\n      throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(7) : \"Actions must be plain objects. Instead, the actual type was: '\" + kindOf(action) + \"'. You may need to add middleware to your store setup to handle dispatching other values, such as 'redux-thunk' to handle dispatching functions. See https://redux.js.org/tutorials/fundamentals/part-4-store#middleware and https://redux.js.org/tutorials/fundamentals/part-6-async-logic#using-the-redux-thunk-middleware for examples.\");\n    }\n\n    if (typeof action.type === 'undefined') {\n      throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(8) : 'Actions may not have an undefined \"type\" property. You may have misspelled an action type string constant.');\n    }\n\n    if (isDispatching) {\n      throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(9) : 'Reducers may not dispatch actions.');\n    }\n\n    try {\n      isDispatching = true;\n      currentState = currentReducer(currentState, action);\n    } finally {\n      isDispatching = false;\n    }\n\n    var listeners = currentListeners = nextListeners;\n\n    for (var i = 0; i < listeners.length; i++) {\n      var listener = listeners[i];\n      listener();\n    }\n\n    return action;\n  }\n  /**\n   * Replaces the reducer currently used by the store to calculate the state.\n   *\n   * You might need this if your app implements code splitting and you want to\n   * load some of the reducers dynamically. You might also need this if you\n   * implement a hot reloading mechanism for Redux.\n   *\n   * @param {Function} nextReducer The reducer for the store to use instead.\n   * @returns {void}\n   */\n\n\n  function replaceReducer(nextReducer) {\n    if (typeof nextReducer !== 'function') {\n      throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(10) : \"Expected the nextReducer to be a function. Instead, received: '\" + kindOf(nextReducer));\n    }\n\n    currentReducer = nextReducer; // This action has a similiar effect to ActionTypes.INIT.\n    // Any reducers that existed in both the new and old rootReducer\n    // will receive the previous state. This effectively populates\n    // the new state tree with any relevant data from the old one.\n\n    dispatch({\n      type: ActionTypes.REPLACE\n    });\n  }\n  /**\n   * Interoperability point for observable/reactive libraries.\n   * @returns {observable} A minimal observable of state changes.\n   * For more information, see the observable proposal:\n   * https://github.com/tc39/proposal-observable\n   */\n\n\n  function observable() {\n    var _ref;\n\n    var outerSubscribe = subscribe;\n    return _ref = {\n      /**\n       * The minimal observable subscription method.\n       * @param {Object} observer Any object that can be used as an observer.\n       * The observer object should have a `next` method.\n       * @returns {subscription} An object with an `unsubscribe` method that can\n       * be used to unsubscribe the observable from the store, and prevent further\n       * emission of values from the observable.\n       */\n      subscribe: function subscribe(observer) {\n        if (typeof observer !== 'object' || observer === null) {\n          throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(11) : \"Expected the observer to be an object. Instead, received: '\" + kindOf(observer) + \"'\");\n        }\n\n        function observeState() {\n          if (observer.next) {\n            observer.next(getState());\n          }\n        }\n\n        observeState();\n        var unsubscribe = outerSubscribe(observeState);\n        return {\n          unsubscribe: unsubscribe\n        };\n      }\n    }, _ref[$$observable] = function () {\n      return this;\n    }, _ref;\n  } // When a store is created, an \"INIT\" action is dispatched so that every\n  // reducer returns their initial state. This effectively populates\n  // the initial state tree.\n\n\n  dispatch({\n    type: ActionTypes.INIT\n  });\n  return _ref2 = {\n    dispatch: dispatch,\n    subscribe: subscribe,\n    getState: getState,\n    replaceReducer: replaceReducer\n  }, _ref2[$$observable] = observable, _ref2;\n}\n/**\n * Creates a Redux store that holds the state tree.\n *\n * **We recommend using `configureStore` from the\n * `@reduxjs/toolkit` package**, which replaces `createStore`:\n * **https://redux.js.org/introduction/why-rtk-is-redux-today**\n *\n * The only way to change the data in the store is to call `dispatch()` on it.\n *\n * There should only be a single store in your app. To specify how different\n * parts of the state tree respond to actions, you may combine several reducers\n * into a single reducer function by using `combineReducers`.\n *\n * @param {Function} reducer A function that returns the next state tree, given\n * the current state tree and the action to handle.\n *\n * @param {any} [preloadedState] The initial state. You may optionally specify it\n * to hydrate the state from the server in universal apps, or to restore a\n * previously serialized user session.\n * If you use `combineReducers` to produce the root reducer function, this must be\n * an object with the same shape as `combineReducers` keys.\n *\n * @param {Function} [enhancer] The store enhancer. You may optionally specify it\n * to enhance the store with third-party capabilities such as middleware,\n * time travel, persistence, etc. The only store enhancer that ships with Redux\n * is `applyMiddleware()`.\n *\n * @returns {Store} A Redux store that lets you read the state, dispatch actions\n * and subscribe to changes.\n */\n\nvar legacy_createStore = createStore;\n\n/**\n * Prints a warning in the console if it exists.\n *\n * @param {String} message The warning message.\n * @returns {void}\n */\nfunction warning(message) {\n  /* eslint-disable no-console */\n  if (typeof console !== 'undefined' && typeof console.error === 'function') {\n    console.error(message);\n  }\n  /* eslint-enable no-console */\n\n\n  try {\n    // This error was thrown as a convenience so that if you enable\n    // \"break on all exceptions\" in your console,\n    // it would pause the execution at this line.\n    throw new Error(message);\n  } catch (e) {} // eslint-disable-line no-empty\n\n}\n\nfunction getUnexpectedStateShapeWarningMessage(inputState, reducers, action, unexpectedKeyCache) {\n  var reducerKeys = Object.keys(reducers);\n  var argumentName = action && action.type === ActionTypes.INIT ? 'preloadedState argument passed to createStore' : 'previous state received by the reducer';\n\n  if (reducerKeys.length === 0) {\n    return 'Store does not have a valid reducer. Make sure the argument passed ' + 'to combineReducers is an object whose values are reducers.';\n  }\n\n  if (!isPlainObject(inputState)) {\n    return \"The \" + argumentName + \" has unexpected type of \\\"\" + kindOf(inputState) + \"\\\". Expected argument to be an object with the following \" + (\"keys: \\\"\" + reducerKeys.join('\", \"') + \"\\\"\");\n  }\n\n  var unexpectedKeys = Object.keys(inputState).filter(function (key) {\n    return !reducers.hasOwnProperty(key) && !unexpectedKeyCache[key];\n  });\n  unexpectedKeys.forEach(function (key) {\n    unexpectedKeyCache[key] = true;\n  });\n  if (action && action.type === ActionTypes.REPLACE) return;\n\n  if (unexpectedKeys.length > 0) {\n    return \"Unexpected \" + (unexpectedKeys.length > 1 ? 'keys' : 'key') + \" \" + (\"\\\"\" + unexpectedKeys.join('\", \"') + \"\\\" found in \" + argumentName + \". \") + \"Expected to find one of the known reducer keys instead: \" + (\"\\\"\" + reducerKeys.join('\", \"') + \"\\\". Unexpected keys will be ignored.\");\n  }\n}\n\nfunction assertReducerShape(reducers) {\n  Object.keys(reducers).forEach(function (key) {\n    var reducer = reducers[key];\n    var initialState = reducer(undefined, {\n      type: ActionTypes.INIT\n    });\n\n    if (typeof initialState === 'undefined') {\n      throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(12) : \"The slice reducer for key \\\"\" + key + \"\\\" returned undefined during initialization. \" + \"If the state passed to the reducer is undefined, you must \" + \"explicitly return the initial state. The initial state may \" + \"not be undefined. If you don't want to set a value for this reducer, \" + \"you can use null instead of undefined.\");\n    }\n\n    if (typeof reducer(undefined, {\n      type: ActionTypes.PROBE_UNKNOWN_ACTION()\n    }) === 'undefined') {\n      throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(13) : \"The slice reducer for key \\\"\" + key + \"\\\" returned undefined when probed with a random type. \" + (\"Don't try to handle '\" + ActionTypes.INIT + \"' or other actions in \\\"redux/*\\\" \") + \"namespace. They are considered private. Instead, you must return the \" + \"current state for any unknown actions, unless it is undefined, \" + \"in which case you must return the initial state, regardless of the \" + \"action type. The initial state may not be undefined, but can be null.\");\n    }\n  });\n}\n/**\n * Turns an object whose values are different reducer functions, into a single\n * reducer function. It will call every child reducer, and gather their results\n * into a single state object, whose keys correspond to the keys of the passed\n * reducer functions.\n *\n * @param {Object} reducers An object whose values correspond to different\n * reducer functions that need to be combined into one. One handy way to obtain\n * it is to use ES6 `import * as reducers` syntax. The reducers may never return\n * undefined for any action. Instead, they should return their initial state\n * if the state passed to them was undefined, and the current state for any\n * unrecognized action.\n *\n * @returns {Function} A reducer function that invokes every reducer inside the\n * passed object, and builds a state object with the same shape.\n */\n\n\nfunction combineReducers(reducers) {\n  var reducerKeys = Object.keys(reducers);\n  var finalReducers = {};\n\n  for (var i = 0; i < reducerKeys.length; i++) {\n    var key = reducerKeys[i];\n\n    if (process.env.NODE_ENV !== 'production') {\n      if (typeof reducers[key] === 'undefined') {\n        warning(\"No reducer provided for key \\\"\" + key + \"\\\"\");\n      }\n    }\n\n    if (typeof reducers[key] === 'function') {\n      finalReducers[key] = reducers[key];\n    }\n  }\n\n  var finalReducerKeys = Object.keys(finalReducers); // This is used to make sure we don't warn about the same\n  // keys multiple times.\n\n  var unexpectedKeyCache;\n\n  if (process.env.NODE_ENV !== 'production') {\n    unexpectedKeyCache = {};\n  }\n\n  var shapeAssertionError;\n\n  try {\n    assertReducerShape(finalReducers);\n  } catch (e) {\n    shapeAssertionError = e;\n  }\n\n  return function combination(state, action) {\n    if (state === void 0) {\n      state = {};\n    }\n\n    if (shapeAssertionError) {\n      throw shapeAssertionError;\n    }\n\n    if (process.env.NODE_ENV !== 'production') {\n      var warningMessage = getUnexpectedStateShapeWarningMessage(state, finalReducers, action, unexpectedKeyCache);\n\n      if (warningMessage) {\n        warning(warningMessage);\n      }\n    }\n\n    var hasChanged = false;\n    var nextState = {};\n\n    for (var _i = 0; _i < finalReducerKeys.length; _i++) {\n      var _key = finalReducerKeys[_i];\n      var reducer = finalReducers[_key];\n      var previousStateForKey = state[_key];\n      var nextStateForKey = reducer(previousStateForKey, action);\n\n      if (typeof nextStateForKey === 'undefined') {\n        var actionType = action && action.type;\n        throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(14) : \"When called with an action of type \" + (actionType ? \"\\\"\" + String(actionType) + \"\\\"\" : '(unknown type)') + \", the slice reducer for key \\\"\" + _key + \"\\\" returned undefined. \" + \"To ignore an action, you must explicitly return the previous state. \" + \"If you want this reducer to hold no value, you can return null instead of undefined.\");\n      }\n\n      nextState[_key] = nextStateForKey;\n      hasChanged = hasChanged || nextStateForKey !== previousStateForKey;\n    }\n\n    hasChanged = hasChanged || finalReducerKeys.length !== Object.keys(state).length;\n    return hasChanged ? nextState : state;\n  };\n}\n\nfunction bindActionCreator(actionCreator, dispatch) {\n  return function () {\n    return dispatch(actionCreator.apply(this, arguments));\n  };\n}\n/**\n * Turns an object whose values are action creators, into an object with the\n * same keys, but with every function wrapped into a `dispatch` call so they\n * may be invoked directly. This is just a convenience method, as you can call\n * `store.dispatch(MyActionCreators.doSomething())` yourself just fine.\n *\n * For convenience, you can also pass an action creator as the first argument,\n * and get a dispatch wrapped function in return.\n *\n * @param {Function|Object} actionCreators An object whose values are action\n * creator functions. One handy way to obtain it is to use ES6 `import * as`\n * syntax. You may also pass a single function.\n *\n * @param {Function} dispatch The `dispatch` function available on your Redux\n * store.\n *\n * @returns {Function|Object} The object mimicking the original object, but with\n * every action creator wrapped into the `dispatch` call. If you passed a\n * function as `actionCreators`, the return value will also be a single\n * function.\n */\n\n\nfunction bindActionCreators(actionCreators, dispatch) {\n  if (typeof actionCreators === 'function') {\n    return bindActionCreator(actionCreators, dispatch);\n  }\n\n  if (typeof actionCreators !== 'object' || actionCreators === null) {\n    throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(16) : \"bindActionCreators expected an object or a function, but instead received: '\" + kindOf(actionCreators) + \"'. \" + \"Did you write \\\"import ActionCreators from\\\" instead of \\\"import * as ActionCreators from\\\"?\");\n  }\n\n  var boundActionCreators = {};\n\n  for (var key in actionCreators) {\n    var actionCreator = actionCreators[key];\n\n    if (typeof actionCreator === 'function') {\n      boundActionCreators[key] = bindActionCreator(actionCreator, dispatch);\n    }\n  }\n\n  return boundActionCreators;\n}\n\n/**\n * Composes single-argument functions from right to left. The rightmost\n * function can take multiple arguments as it provides the signature for\n * the resulting composite function.\n *\n * @param {...Function} funcs The functions to compose.\n * @returns {Function} A function obtained by composing the argument functions\n * from right to left. For example, compose(f, g, h) is identical to doing\n * (...args) => f(g(h(...args))).\n */\nfunction compose() {\n  for (var _len = arguments.length, funcs = new Array(_len), _key = 0; _key < _len; _key++) {\n    funcs[_key] = arguments[_key];\n  }\n\n  if (funcs.length === 0) {\n    return function (arg) {\n      return arg;\n    };\n  }\n\n  if (funcs.length === 1) {\n    return funcs[0];\n  }\n\n  return funcs.reduce(function (a, b) {\n    return function () {\n      return a(b.apply(void 0, arguments));\n    };\n  });\n}\n\n/**\n * Creates a store enhancer that applies middleware to the dispatch method\n * of the Redux store. This is handy for a variety of tasks, such as expressing\n * asynchronous actions in a concise manner, or logging every action payload.\n *\n * See `redux-thunk` package as an example of the Redux middleware.\n *\n * Because middleware is potentially asynchronous, this should be the first\n * store enhancer in the composition chain.\n *\n * Note that each middleware will be given the `dispatch` and `getState` functions\n * as named arguments.\n *\n * @param {...Function} middlewares The middleware chain to be applied.\n * @returns {Function} A store enhancer applying the middleware.\n */\n\nfunction applyMiddleware() {\n  for (var _len = arguments.length, middlewares = new Array(_len), _key = 0; _key < _len; _key++) {\n    middlewares[_key] = arguments[_key];\n  }\n\n  return function (createStore) {\n    return function () {\n      var store = createStore.apply(void 0, arguments);\n\n      var _dispatch = function dispatch() {\n        throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(15) : 'Dispatching while constructing your middleware is not allowed. ' + 'Other middleware would not be applied to this dispatch.');\n      };\n\n      var middlewareAPI = {\n        getState: store.getState,\n        dispatch: function dispatch() {\n          return _dispatch.apply(void 0, arguments);\n        }\n      };\n      var chain = middlewares.map(function (middleware) {\n        return middleware(middlewareAPI);\n      });\n      _dispatch = compose.apply(void 0, chain)(store.dispatch);\n      return _objectSpread(_objectSpread({}, store), {}, {\n        dispatch: _dispatch\n      });\n    };\n  };\n}\n\nexport { ActionTypes as __DO_NOT_USE__ActionTypes, applyMiddleware, bindActionCreators, combineReducers, compose, createStore, legacy_createStore };\n","/**\n * @license React\n * scheduler.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use strict';function f(a,b){var c=a.length;a.push(b);a:for(;0<c;){var d=c-1>>>1,e=a[d];if(0<g(e,b))a[d]=b,a[c]=e,c=d;else break a}}function h(a){return 0===a.length?null:a[0]}function k(a){if(0===a.length)return null;var b=a[0],c=a.pop();if(c!==b){a[0]=c;a:for(var d=0,e=a.length,w=e>>>1;d<w;){var m=2*(d+1)-1,C=a[m],n=m+1,x=a[n];if(0>g(C,c))n<e&&0>g(x,C)?(a[d]=x,a[n]=c,d=n):(a[d]=C,a[m]=c,d=m);else if(n<e&&0>g(x,c))a[d]=x,a[n]=c,d=n;else break a}}return b}\nfunction g(a,b){var c=a.sortIndex-b.sortIndex;return 0!==c?c:a.id-b.id}if(\"object\"===typeof performance&&\"function\"===typeof performance.now){var l=performance;exports.unstable_now=function(){return l.now()}}else{var p=Date,q=p.now();exports.unstable_now=function(){return p.now()-q}}var r=[],t=[],u=1,v=null,y=3,z=!1,A=!1,B=!1,D=\"function\"===typeof setTimeout?setTimeout:null,E=\"function\"===typeof clearTimeout?clearTimeout:null,F=\"undefined\"!==typeof setImmediate?setImmediate:null;\n\"undefined\"!==typeof navigator&&void 0!==navigator.scheduling&&void 0!==navigator.scheduling.isInputPending&&navigator.scheduling.isInputPending.bind(navigator.scheduling);function G(a){for(var b=h(t);null!==b;){if(null===b.callback)k(t);else if(b.startTime<=a)k(t),b.sortIndex=b.expirationTime,f(r,b);else break;b=h(t)}}function H(a){B=!1;G(a);if(!A)if(null!==h(r))A=!0,I(J);else{var b=h(t);null!==b&&K(H,b.startTime-a)}}\nfunction J(a,b){A=!1;B&&(B=!1,E(L),L=-1);z=!0;var c=y;try{G(b);for(v=h(r);null!==v&&(!(v.expirationTime>b)||a&&!M());){var d=v.callback;if(\"function\"===typeof d){v.callback=null;y=v.priorityLevel;var e=d(v.expirationTime<=b);b=exports.unstable_now();\"function\"===typeof e?v.callback=e:v===h(r)&&k(r);G(b)}else k(r);v=h(r)}if(null!==v)var w=!0;else{var m=h(t);null!==m&&K(H,m.startTime-b);w=!1}return w}finally{v=null,y=c,z=!1}}var N=!1,O=null,L=-1,P=5,Q=-1;\nfunction M(){return exports.unstable_now()-Q<P?!1:!0}function R(){if(null!==O){var a=exports.unstable_now();Q=a;var b=!0;try{b=O(!0,a)}finally{b?S():(N=!1,O=null)}}else N=!1}var S;if(\"function\"===typeof F)S=function(){F(R)};else if(\"undefined\"!==typeof MessageChannel){var T=new MessageChannel,U=T.port2;T.port1.onmessage=R;S=function(){U.postMessage(null)}}else S=function(){D(R,0)};function I(a){O=a;N||(N=!0,S())}function K(a,b){L=D(function(){a(exports.unstable_now())},b)}\nexports.unstable_IdlePriority=5;exports.unstable_ImmediatePriority=1;exports.unstable_LowPriority=4;exports.unstable_NormalPriority=3;exports.unstable_Profiling=null;exports.unstable_UserBlockingPriority=2;exports.unstable_cancelCallback=function(a){a.callback=null};exports.unstable_continueExecution=function(){A||z||(A=!0,I(J))};\nexports.unstable_forceFrameRate=function(a){0>a||125<a?console.error(\"forceFrameRate takes a positive int between 0 and 125, forcing frame rates higher than 125 fps is not supported\"):P=0<a?Math.floor(1E3/a):5};exports.unstable_getCurrentPriorityLevel=function(){return y};exports.unstable_getFirstCallbackNode=function(){return h(r)};exports.unstable_next=function(a){switch(y){case 1:case 2:case 3:var b=3;break;default:b=y}var c=y;y=b;try{return a()}finally{y=c}};exports.unstable_pauseExecution=function(){};\nexports.unstable_requestPaint=function(){};exports.unstable_runWithPriority=function(a,b){switch(a){case 1:case 2:case 3:case 4:case 5:break;default:a=3}var c=y;y=a;try{return b()}finally{y=c}};\nexports.unstable_scheduleCallback=function(a,b,c){var d=exports.unstable_now();\"object\"===typeof c&&null!==c?(c=c.delay,c=\"number\"===typeof c&&0<c?d+c:d):c=d;switch(a){case 1:var e=-1;break;case 2:e=250;break;case 5:e=1073741823;break;case 4:e=1E4;break;default:e=5E3}e=c+e;a={id:u++,callback:b,priorityLevel:a,startTime:c,expirationTime:e,sortIndex:-1};c>d?(a.sortIndex=c,f(t,a),null===h(r)&&a===h(t)&&(B?(E(L),L=-1):B=!0,K(H,c-d))):(a.sortIndex=e,f(r,a),A||z||(A=!0,I(J)));return a};\nexports.unstable_shouldYield=M;exports.unstable_wrapCallback=function(a){var b=y;return function(){var c=y;y=b;try{return a.apply(this,arguments)}finally{y=c}}};\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n  module.exports = require('./cjs/scheduler.production.min.js');\n} else {\n  module.exports = require('./cjs/scheduler.development.js');\n}\n","/*!\n  * $script.js JS loader & dependency manager\n  * https://github.com/ded/script.js\n  * (c) Dustin Diaz 2014 | License MIT\n  */\n\n(function (name, definition) {\n  if (typeof module != 'undefined' && module.exports) module.exports = definition()\n  else if (typeof define == 'function' && define.amd) define(definition)\n  else this[name] = definition()\n})('$script', function () {\n  var doc = document\n    , head = doc.getElementsByTagName('head')[0]\n    , s = 'string'\n    , f = false\n    , push = 'push'\n    , readyState = 'readyState'\n    , onreadystatechange = 'onreadystatechange'\n    , list = {}\n    , ids = {}\n    , delay = {}\n    , scripts = {}\n    , scriptpath\n    , urlArgs\n\n  function every(ar, fn) {\n    for (var i = 0, j = ar.length; i < j; ++i) if (!fn(ar[i])) return f\n    return 1\n  }\n  function each(ar, fn) {\n    every(ar, function (el) {\n      fn(el)\n      return 1\n    })\n  }\n\n  function $script(paths, idOrDone, optDone) {\n    paths = paths[push] ? paths : [paths]\n    var idOrDoneIsDone = idOrDone && idOrDone.call\n      , done = idOrDoneIsDone ? idOrDone : optDone\n      , id = idOrDoneIsDone ? paths.join('') : idOrDone\n      , queue = paths.length\n    function loopFn(item) {\n      return item.call ? item() : list[item]\n    }\n    function callback() {\n      if (!--queue) {\n        list[id] = 1\n        done && done()\n        for (var dset in delay) {\n          every(dset.split('|'), loopFn) && !each(delay[dset], loopFn) && (delay[dset] = [])\n        }\n      }\n    }\n    setTimeout(function () {\n      each(paths, function loading(path, force) {\n        if (path === null) return callback()\n        \n        if (!force && !/^https?:\\/\\//.test(path) && scriptpath) {\n          path = (path.indexOf('.js') === -1) ? scriptpath + path + '.js' : scriptpath + path;\n        }\n        \n        if (scripts[path]) {\n          if (id) ids[id] = 1\n          return (scripts[path] == 2) ? callback() : setTimeout(function () { loading(path, true) }, 0)\n        }\n\n        scripts[path] = 1\n        if (id) ids[id] = 1\n        create(path, callback)\n      })\n    }, 0)\n    return $script\n  }\n\n  function create(path, fn) {\n    var el = doc.createElement('script'), loaded\n    el.onload = el.onerror = el[onreadystatechange] = function () {\n      if ((el[readyState] && !(/^c|loade/.test(el[readyState]))) || loaded) return;\n      el.onload = el[onreadystatechange] = null\n      loaded = 1\n      scripts[path] = 2\n      fn()\n    }\n    el.async = 1\n    el.src = urlArgs ? path + (path.indexOf('?') === -1 ? '?' : '&') + urlArgs : path;\n    head.insertBefore(el, head.lastChild)\n  }\n\n  $script.get = create\n\n  $script.order = function (scripts, id, done) {\n    (function callback(s) {\n      s = scripts.shift()\n      !scripts.length ? $script(s, id, done) : $script(s, callback)\n    }())\n  }\n\n  $script.path = function (p) {\n    scriptpath = p\n  }\n  $script.urlArgs = function (str) {\n    urlArgs = str;\n  }\n  $script.ready = function (deps, ready, req) {\n    deps = deps[push] ? deps : [deps]\n    var missing = [];\n    !each(deps, function (dep) {\n      list[dep] || missing[push](dep);\n    }) && every(deps, function (dep) {return list[dep]}) ?\n      ready() : !function (key) {\n      delay[key] = delay[key] || []\n      delay[key][push](ready)\n      req && req(missing)\n    }(deps.join('|'))\n    return $script\n  }\n\n  $script.done = function (idOrDone) {\n    $script([null], idOrDone)\n  }\n\n  return $script\n});\n","const ANY = Symbol('SemVer ANY')\n// hoisted class for cyclic dependency\nclass Comparator {\n  static get ANY () {\n    return ANY\n  }\n\n  constructor (comp, options) {\n    options = parseOptions(options)\n\n    if (comp instanceof Comparator) {\n      if (comp.loose === !!options.loose) {\n        return comp\n      } else {\n        comp = comp.value\n      }\n    }\n\n    comp = comp.trim().split(/\\s+/).join(' ')\n    debug('comparator', comp, options)\n    this.options = options\n    this.loose = !!options.loose\n    this.parse(comp)\n\n    if (this.semver === ANY) {\n      this.value = ''\n    } else {\n      this.value = this.operator + this.semver.version\n    }\n\n    debug('comp', this)\n  }\n\n  parse (comp) {\n    const r = this.options.loose ? re[t.COMPARATORLOOSE] : re[t.COMPARATOR]\n    const m = comp.match(r)\n\n    if (!m) {\n      throw new TypeError(`Invalid comparator: ${comp}`)\n    }\n\n    this.operator = m[1] !== undefined ? m[1] : ''\n    if (this.operator === '=') {\n      this.operator = ''\n    }\n\n    // if it literally is just '>' or '' then allow anything.\n    if (!m[2]) {\n      this.semver = ANY\n    } else {\n      this.semver = new SemVer(m[2], this.options.loose)\n    }\n  }\n\n  toString () {\n    return this.value\n  }\n\n  test (version) {\n    debug('Comparator.test', version, this.options.loose)\n\n    if (this.semver === ANY || version === ANY) {\n      return true\n    }\n\n    if (typeof version === 'string') {\n      try {\n        version = new SemVer(version, this.options)\n      } catch (er) {\n        return false\n      }\n    }\n\n    return cmp(version, this.operator, this.semver, this.options)\n  }\n\n  intersects (comp, options) {\n    if (!(comp instanceof Comparator)) {\n      throw new TypeError('a Comparator is required')\n    }\n\n    if (this.operator === '') {\n      if (this.value === '') {\n        return true\n      }\n      return new Range(comp.value, options).test(this.value)\n    } else if (comp.operator === '') {\n      if (comp.value === '') {\n        return true\n      }\n      return new Range(this.value, options).test(comp.semver)\n    }\n\n    options = parseOptions(options)\n\n    // Special cases where nothing can possibly be lower\n    if (options.includePrerelease &&\n      (this.value === '<0.0.0-0' || comp.value === '<0.0.0-0')) {\n      return false\n    }\n    if (!options.includePrerelease &&\n      (this.value.startsWith('<0.0.0') || comp.value.startsWith('<0.0.0'))) {\n      return false\n    }\n\n    // Same direction increasing (> or >=)\n    if (this.operator.startsWith('>') && comp.operator.startsWith('>')) {\n      return true\n    }\n    // Same direction decreasing (< or <=)\n    if (this.operator.startsWith('<') && comp.operator.startsWith('<')) {\n      return true\n    }\n    // same SemVer and both sides are inclusive (<= or >=)\n    if (\n      (this.semver.version === comp.semver.version) &&\n      this.operator.includes('=') && comp.operator.includes('=')) {\n      return true\n    }\n    // opposite directions less than\n    if (cmp(this.semver, '<', comp.semver, options) &&\n      this.operator.startsWith('>') && comp.operator.startsWith('<')) {\n      return true\n    }\n    // opposite directions greater than\n    if (cmp(this.semver, '>', comp.semver, options) &&\n      this.operator.startsWith('<') && comp.operator.startsWith('>')) {\n      return true\n    }\n    return false\n  }\n}\n\nmodule.exports = Comparator\n\nconst parseOptions = require('../internal/parse-options')\nconst { safeRe: re, t } = require('../internal/re')\nconst cmp = require('../functions/cmp')\nconst debug = require('../internal/debug')\nconst SemVer = require('./semver')\nconst Range = require('./range')\n","const SPACE_CHARACTERS = /\\s+/g\n\n// hoisted class for cyclic dependency\nclass Range {\n  constructor (range, options) {\n    options = parseOptions(options)\n\n    if (range instanceof Range) {\n      if (\n        range.loose === !!options.loose &&\n        range.includePrerelease === !!options.includePrerelease\n      ) {\n        return range\n      } else {\n        return new Range(range.raw, options)\n      }\n    }\n\n    if (range instanceof Comparator) {\n      // just put it in the set and return\n      this.raw = range.value\n      this.set = [[range]]\n      this.formatted = undefined\n      return this\n    }\n\n    this.options = options\n    this.loose = !!options.loose\n    this.includePrerelease = !!options.includePrerelease\n\n    // First reduce all whitespace as much as possible so we do not have to rely\n    // on potentially slow regexes like \\s*. This is then stored and used for\n    // future error messages as well.\n    this.raw = range.trim().replace(SPACE_CHARACTERS, ' ')\n\n    // First, split on ||\n    this.set = this.raw\n      .split('||')\n      // map the range to a 2d array of comparators\n      .map(r => this.parseRange(r.trim()))\n      // throw out any comparator lists that are empty\n      // this generally means that it was not a valid range, which is allowed\n      // in loose mode, but will still throw if the WHOLE range is invalid.\n      .filter(c => c.length)\n\n    if (!this.set.length) {\n      throw new TypeError(`Invalid SemVer Range: ${this.raw}`)\n    }\n\n    // if we have any that are not the null set, throw out null sets.\n    if (this.set.length > 1) {\n      // keep the first one, in case they're all null sets\n      const first = this.set[0]\n      this.set = this.set.filter(c => !isNullSet(c[0]))\n      if (this.set.length === 0) {\n        this.set = [first]\n      } else if (this.set.length > 1) {\n        // if we have any that are *, then the range is just *\n        for (const c of this.set) {\n          if (c.length === 1 && isAny(c[0])) {\n            this.set = [c]\n            break\n          }\n        }\n      }\n    }\n\n    this.formatted = undefined\n  }\n\n  get range () {\n    if (this.formatted === undefined) {\n      this.formatted = ''\n      for (let i = 0; i < this.set.length; i++) {\n        if (i > 0) {\n          this.formatted += '||'\n        }\n        const comps = this.set[i]\n        for (let k = 0; k < comps.length; k++) {\n          if (k > 0) {\n            this.formatted += ' '\n          }\n          this.formatted += comps[k].toString().trim()\n        }\n      }\n    }\n    return this.formatted\n  }\n\n  format () {\n    return this.range\n  }\n\n  toString () {\n    return this.range\n  }\n\n  parseRange (range) {\n    // memoize range parsing for performance.\n    // this is a very hot path, and fully deterministic.\n    const memoOpts =\n      (this.options.includePrerelease && FLAG_INCLUDE_PRERELEASE) |\n      (this.options.loose && FLAG_LOOSE)\n    const memoKey = memoOpts + ':' + range\n    const cached = cache.get(memoKey)\n    if (cached) {\n      return cached\n    }\n\n    const loose = this.options.loose\n    // `1.2.3 - 1.2.4` => `>=1.2.3 <=1.2.4`\n    const hr = loose ? re[t.HYPHENRANGELOOSE] : re[t.HYPHENRANGE]\n    range = range.replace(hr, hyphenReplace(this.options.includePrerelease))\n    debug('hyphen replace', range)\n\n    // `> 1.2.3 < 1.2.5` => `>1.2.3 <1.2.5`\n    range = range.replace(re[t.COMPARATORTRIM], comparatorTrimReplace)\n    debug('comparator trim', range)\n\n    // `~ 1.2.3` => `~1.2.3`\n    range = range.replace(re[t.TILDETRIM], tildeTrimReplace)\n    debug('tilde trim', range)\n\n    // `^ 1.2.3` => `^1.2.3`\n    range = range.replace(re[t.CARETTRIM], caretTrimReplace)\n    debug('caret trim', range)\n\n    // At this point, the range is completely trimmed and\n    // ready to be split into comparators.\n\n    let rangeList = range\n      .split(' ')\n      .map(comp => parseComparator(comp, this.options))\n      .join(' ')\n      .split(/\\s+/)\n      // >=0.0.0 is equivalent to *\n      .map(comp => replaceGTE0(comp, this.options))\n\n    if (loose) {\n      // in loose mode, throw out any that are not valid comparators\n      rangeList = rangeList.filter(comp => {\n        debug('loose invalid filter', comp, this.options)\n        return !!comp.match(re[t.COMPARATORLOOSE])\n      })\n    }\n    debug('range list', rangeList)\n\n    // if any comparators are the null set, then replace with JUST null set\n    // if more than one comparator, remove any * comparators\n    // also, don't include the same comparator more than once\n    const rangeMap = new Map()\n    const comparators = rangeList.map(comp => new Comparator(comp, this.options))\n    for (const comp of comparators) {\n      if (isNullSet(comp)) {\n        return [comp]\n      }\n      rangeMap.set(comp.value, comp)\n    }\n    if (rangeMap.size > 1 && rangeMap.has('')) {\n      rangeMap.delete('')\n    }\n\n    const result = [...rangeMap.values()]\n    cache.set(memoKey, result)\n    return result\n  }\n\n  intersects (range, options) {\n    if (!(range instanceof Range)) {\n      throw new TypeError('a Range is required')\n    }\n\n    return this.set.some((thisComparators) => {\n      return (\n        isSatisfiable(thisComparators, options) &&\n        range.set.some((rangeComparators) => {\n          return (\n            isSatisfiable(rangeComparators, options) &&\n            thisComparators.every((thisComparator) => {\n              return rangeComparators.every((rangeComparator) => {\n                return thisComparator.intersects(rangeComparator, options)\n              })\n            })\n          )\n        })\n      )\n    })\n  }\n\n  // if ANY of the sets match ALL of its comparators, then pass\n  test (version) {\n    if (!version) {\n      return false\n    }\n\n    if (typeof version === 'string') {\n      try {\n        version = new SemVer(version, this.options)\n      } catch (er) {\n        return false\n      }\n    }\n\n    for (let i = 0; i < this.set.length; i++) {\n      if (testSet(this.set[i], version, this.options)) {\n        return true\n      }\n    }\n    return false\n  }\n}\n\nmodule.exports = Range\n\nconst LRU = require('../internal/lrucache')\nconst cache = new LRU()\n\nconst parseOptions = require('../internal/parse-options')\nconst Comparator = require('./comparator')\nconst debug = require('../internal/debug')\nconst SemVer = require('./semver')\nconst {\n  safeRe: re,\n  t,\n  comparatorTrimReplace,\n  tildeTrimReplace,\n  caretTrimReplace,\n} = require('../internal/re')\nconst { FLAG_INCLUDE_PRERELEASE, FLAG_LOOSE } = require('../internal/constants')\n\nconst isNullSet = c => c.value === '<0.0.0-0'\nconst isAny = c => c.value === ''\n\n// take a set of comparators and determine whether there\n// exists a version which can satisfy it\nconst isSatisfiable = (comparators, options) => {\n  let result = true\n  const remainingComparators = comparators.slice()\n  let testComparator = remainingComparators.pop()\n\n  while (result && remainingComparators.length) {\n    result = remainingComparators.every((otherComparator) => {\n      return testComparator.intersects(otherComparator, options)\n    })\n\n    testComparator = remainingComparators.pop()\n  }\n\n  return result\n}\n\n// comprised of xranges, tildes, stars, and gtlt's at this point.\n// already replaced the hyphen ranges\n// turn into a set of JUST comparators.\nconst parseComparator = (comp, options) => {\n  debug('comp', comp, options)\n  comp = replaceCarets(comp, options)\n  debug('caret', comp)\n  comp = replaceTildes(comp, options)\n  debug('tildes', comp)\n  comp = replaceXRanges(comp, options)\n  debug('xrange', comp)\n  comp = replaceStars(comp, options)\n  debug('stars', comp)\n  return comp\n}\n\nconst isX = id => !id || id.toLowerCase() === 'x' || id === '*'\n\n// ~, ~> --> * (any, kinda silly)\n// ~2, ~2.x, ~2.x.x, ~>2, ~>2.x ~>2.x.x --> >=2.0.0 <3.0.0-0\n// ~2.0, ~2.0.x, ~>2.0, ~>2.0.x --> >=2.0.0 <2.1.0-0\n// ~1.2, ~1.2.x, ~>1.2, ~>1.2.x --> >=1.2.0 <1.3.0-0\n// ~1.2.3, ~>1.2.3 --> >=1.2.3 <1.3.0-0\n// ~1.2.0, ~>1.2.0 --> >=1.2.0 <1.3.0-0\n// ~0.0.1 --> >=0.0.1 <0.1.0-0\nconst replaceTildes = (comp, options) => {\n  return comp\n    .trim()\n    .split(/\\s+/)\n    .map((c) => replaceTilde(c, options))\n    .join(' ')\n}\n\nconst replaceTilde = (comp, options) => {\n  const r = options.loose ? re[t.TILDELOOSE] : re[t.TILDE]\n  return comp.replace(r, (_, M, m, p, pr) => {\n    debug('tilde', comp, _, M, m, p, pr)\n    let ret\n\n    if (isX(M)) {\n      ret = ''\n    } else if (isX(m)) {\n      ret = `>=${M}.0.0 <${+M + 1}.0.0-0`\n    } else if (isX(p)) {\n      // ~1.2 == >=1.2.0 <1.3.0-0\n      ret = `>=${M}.${m}.0 <${M}.${+m + 1}.0-0`\n    } else if (pr) {\n      debug('replaceTilde pr', pr)\n      ret = `>=${M}.${m}.${p}-${pr\n      } <${M}.${+m + 1}.0-0`\n    } else {\n      // ~1.2.3 == >=1.2.3 <1.3.0-0\n      ret = `>=${M}.${m}.${p\n      } <${M}.${+m + 1}.0-0`\n    }\n\n    debug('tilde return', ret)\n    return ret\n  })\n}\n\n// ^ --> * (any, kinda silly)\n// ^2, ^2.x, ^2.x.x --> >=2.0.0 <3.0.0-0\n// ^2.0, ^2.0.x --> >=2.0.0 <3.0.0-0\n// ^1.2, ^1.2.x --> >=1.2.0 <2.0.0-0\n// ^1.2.3 --> >=1.2.3 <2.0.0-0\n// ^1.2.0 --> >=1.2.0 <2.0.0-0\n// ^0.0.1 --> >=0.0.1 <0.0.2-0\n// ^0.1.0 --> >=0.1.0 <0.2.0-0\nconst replaceCarets = (comp, options) => {\n  return comp\n    .trim()\n    .split(/\\s+/)\n    .map((c) => replaceCaret(c, options))\n    .join(' ')\n}\n\nconst replaceCaret = (comp, options) => {\n  debug('caret', comp, options)\n  const r = options.loose ? re[t.CARETLOOSE] : re[t.CARET]\n  const z = options.includePrerelease ? '-0' : ''\n  return comp.replace(r, (_, M, m, p, pr) => {\n    debug('caret', comp, _, M, m, p, pr)\n    let ret\n\n    if (isX(M)) {\n      ret = ''\n    } else if (isX(m)) {\n      ret = `>=${M}.0.0${z} <${+M + 1}.0.0-0`\n    } else if (isX(p)) {\n      if (M === '0') {\n        ret = `>=${M}.${m}.0${z} <${M}.${+m + 1}.0-0`\n      } else {\n        ret = `>=${M}.${m}.0${z} <${+M + 1}.0.0-0`\n      }\n    } else if (pr) {\n      debug('replaceCaret pr', pr)\n      if (M === '0') {\n        if (m === '0') {\n          ret = `>=${M}.${m}.${p}-${pr\n          } <${M}.${m}.${+p + 1}-0`\n        } else {\n          ret = `>=${M}.${m}.${p}-${pr\n          } <${M}.${+m + 1}.0-0`\n        }\n      } else {\n        ret = `>=${M}.${m}.${p}-${pr\n        } <${+M + 1}.0.0-0`\n      }\n    } else {\n      debug('no pr')\n      if (M === '0') {\n        if (m === '0') {\n          ret = `>=${M}.${m}.${p\n          }${z} <${M}.${m}.${+p + 1}-0`\n        } else {\n          ret = `>=${M}.${m}.${p\n          }${z} <${M}.${+m + 1}.0-0`\n        }\n      } else {\n        ret = `>=${M}.${m}.${p\n        } <${+M + 1}.0.0-0`\n      }\n    }\n\n    debug('caret return', ret)\n    return ret\n  })\n}\n\nconst replaceXRanges = (comp, options) => {\n  debug('replaceXRanges', comp, options)\n  return comp\n    .split(/\\s+/)\n    .map((c) => replaceXRange(c, options))\n    .join(' ')\n}\n\nconst replaceXRange = (comp, options) => {\n  comp = comp.trim()\n  const r = options.loose ? re[t.XRANGELOOSE] : re[t.XRANGE]\n  return comp.replace(r, (ret, gtlt, M, m, p, pr) => {\n    debug('xRange', comp, ret, gtlt, M, m, p, pr)\n    const xM = isX(M)\n    const xm = xM || isX(m)\n    const xp = xm || isX(p)\n    const anyX = xp\n\n    if (gtlt === '=' && anyX) {\n      gtlt = ''\n    }\n\n    // if we're including prereleases in the match, then we need\n    // to fix this to -0, the lowest possible prerelease value\n    pr = options.includePrerelease ? '-0' : ''\n\n    if (xM) {\n      if (gtlt === '>' || gtlt === '<') {\n        // nothing is allowed\n        ret = '<0.0.0-0'\n      } else {\n        // nothing is forbidden\n        ret = '*'\n      }\n    } else if (gtlt && anyX) {\n      // we know patch is an x, because we have any x at all.\n      // replace X with 0\n      if (xm) {\n        m = 0\n      }\n      p = 0\n\n      if (gtlt === '>') {\n        // >1 => >=2.0.0\n        // >1.2 => >=1.3.0\n        gtlt = '>='\n        if (xm) {\n          M = +M + 1\n          m = 0\n          p = 0\n        } else {\n          m = +m + 1\n          p = 0\n        }\n      } else if (gtlt === '<=') {\n        // <=0.7.x is actually <0.8.0, since any 0.7.x should\n        // pass.  Similarly, <=7.x is actually <8.0.0, etc.\n        gtlt = '<'\n        if (xm) {\n          M = +M + 1\n        } else {\n          m = +m + 1\n        }\n      }\n\n      if (gtlt === '<') {\n        pr = '-0'\n      }\n\n      ret = `${gtlt + M}.${m}.${p}${pr}`\n    } else if (xm) {\n      ret = `>=${M}.0.0${pr} <${+M + 1}.0.0-0`\n    } else if (xp) {\n      ret = `>=${M}.${m}.0${pr\n      } <${M}.${+m + 1}.0-0`\n    }\n\n    debug('xRange return', ret)\n\n    return ret\n  })\n}\n\n// Because * is AND-ed with everything else in the comparator,\n// and '' means \"any version\", just remove the *s entirely.\nconst replaceStars = (comp, options) => {\n  debug('replaceStars', comp, options)\n  // Looseness is ignored here.  star is always as loose as it gets!\n  return comp\n    .trim()\n    .replace(re[t.STAR], '')\n}\n\nconst replaceGTE0 = (comp, options) => {\n  debug('replaceGTE0', comp, options)\n  return comp\n    .trim()\n    .replace(re[options.includePrerelease ? t.GTE0PRE : t.GTE0], '')\n}\n\n// This function is passed to string.replace(re[t.HYPHENRANGE])\n// M, m, patch, prerelease, build\n// 1.2 - 3.4.5 => >=1.2.0 <=3.4.5\n// 1.2.3 - 3.4 => >=1.2.0 <3.5.0-0 Any 3.4.x will do\n// 1.2 - 3.4 => >=1.2.0 <3.5.0-0\n// TODO build?\nconst hyphenReplace = incPr => ($0,\n  from, fM, fm, fp, fpr, fb,\n  to, tM, tm, tp, tpr) => {\n  if (isX(fM)) {\n    from = ''\n  } else if (isX(fm)) {\n    from = `>=${fM}.0.0${incPr ? '-0' : ''}`\n  } else if (isX(fp)) {\n    from = `>=${fM}.${fm}.0${incPr ? '-0' : ''}`\n  } else if (fpr) {\n    from = `>=${from}`\n  } else {\n    from = `>=${from}${incPr ? '-0' : ''}`\n  }\n\n  if (isX(tM)) {\n    to = ''\n  } else if (isX(tm)) {\n    to = `<${+tM + 1}.0.0-0`\n  } else if (isX(tp)) {\n    to = `<${tM}.${+tm + 1}.0-0`\n  } else if (tpr) {\n    to = `<=${tM}.${tm}.${tp}-${tpr}`\n  } else if (incPr) {\n    to = `<${tM}.${tm}.${+tp + 1}-0`\n  } else {\n    to = `<=${to}`\n  }\n\n  return `${from} ${to}`.trim()\n}\n\nconst testSet = (set, version, options) => {\n  for (let i = 0; i < set.length; i++) {\n    if (!set[i].test(version)) {\n      return false\n    }\n  }\n\n  if (version.prerelease.length && !options.includePrerelease) {\n    // Find the set of versions that are allowed to have prereleases\n    // For example, ^1.2.3-pr.1 desugars to >=1.2.3-pr.1 <2.0.0\n    // That should allow `1.2.3-pr.2` to pass.\n    // However, `1.2.4-alpha.notready` should NOT be allowed,\n    // even though it's within the range set by the comparators.\n    for (let i = 0; i < set.length; i++) {\n      debug(set[i].semver)\n      if (set[i].semver === Comparator.ANY) {\n        continue\n      }\n\n      if (set[i].semver.prerelease.length > 0) {\n        const allowed = set[i].semver\n        if (allowed.major === version.major &&\n            allowed.minor === version.minor &&\n            allowed.patch === version.patch) {\n          return true\n        }\n      }\n    }\n\n    // Version has a -pre, but it's not one of the ones we like.\n    return false\n  }\n\n  return true\n}\n","const debug = require('../internal/debug')\nconst { MAX_LENGTH, MAX_SAFE_INTEGER } = require('../internal/constants')\nconst { safeRe: re, t } = require('../internal/re')\n\nconst parseOptions = require('../internal/parse-options')\nconst { compareIdentifiers } = require('../internal/identifiers')\nclass SemVer {\n  constructor (version, options) {\n    options = parseOptions(options)\n\n    if (version instanceof SemVer) {\n      if (version.loose === !!options.loose &&\n          version.includePrerelease === !!options.includePrerelease) {\n        return version\n      } else {\n        version = version.version\n      }\n    } else if (typeof version !== 'string') {\n      throw new TypeError(`Invalid version. Must be a string. Got type \"${typeof version}\".`)\n    }\n\n    if (version.length > MAX_LENGTH) {\n      throw new TypeError(\n        `version is longer than ${MAX_LENGTH} characters`\n      )\n    }\n\n    debug('SemVer', version, options)\n    this.options = options\n    this.loose = !!options.loose\n    // this isn't actually relevant for versions, but keep it so that we\n    // don't run into trouble passing this.options around.\n    this.includePrerelease = !!options.includePrerelease\n\n    const m = version.trim().match(options.loose ? re[t.LOOSE] : re[t.FULL])\n\n    if (!m) {\n      throw new TypeError(`Invalid Version: ${version}`)\n    }\n\n    this.raw = version\n\n    // these are actually numbers\n    this.major = +m[1]\n    this.minor = +m[2]\n    this.patch = +m[3]\n\n    if (this.major > MAX_SAFE_INTEGER || this.major < 0) {\n      throw new TypeError('Invalid major version')\n    }\n\n    if (this.minor > MAX_SAFE_INTEGER || this.minor < 0) {\n      throw new TypeError('Invalid minor version')\n    }\n\n    if (this.patch > MAX_SAFE_INTEGER || this.patch < 0) {\n      throw new TypeError('Invalid patch version')\n    }\n\n    // numberify any prerelease numeric ids\n    if (!m[4]) {\n      this.prerelease = []\n    } else {\n      this.prerelease = m[4].split('.').map((id) => {\n        if (/^[0-9]+$/.test(id)) {\n          const num = +id\n          if (num >= 0 && num < MAX_SAFE_INTEGER) {\n            return num\n          }\n        }\n        return id\n      })\n    }\n\n    this.build = m[5] ? m[5].split('.') : []\n    this.format()\n  }\n\n  format () {\n    this.version = `${this.major}.${this.minor}.${this.patch}`\n    if (this.prerelease.length) {\n      this.version += `-${this.prerelease.join('.')}`\n    }\n    return this.version\n  }\n\n  toString () {\n    return this.version\n  }\n\n  compare (other) {\n    debug('SemVer.compare', this.version, this.options, other)\n    if (!(other instanceof SemVer)) {\n      if (typeof other === 'string' && other === this.version) {\n        return 0\n      }\n      other = new SemVer(other, this.options)\n    }\n\n    if (other.version === this.version) {\n      return 0\n    }\n\n    return this.compareMain(other) || this.comparePre(other)\n  }\n\n  compareMain (other) {\n    if (!(other instanceof SemVer)) {\n      other = new SemVer(other, this.options)\n    }\n\n    return (\n      compareIdentifiers(this.major, other.major) ||\n      compareIdentifiers(this.minor, other.minor) ||\n      compareIdentifiers(this.patch, other.patch)\n    )\n  }\n\n  comparePre (other) {\n    if (!(other instanceof SemVer)) {\n      other = new SemVer(other, this.options)\n    }\n\n    // NOT having a prerelease is > having one\n    if (this.prerelease.length && !other.prerelease.length) {\n      return -1\n    } else if (!this.prerelease.length && other.prerelease.length) {\n      return 1\n    } else if (!this.prerelease.length && !other.prerelease.length) {\n      return 0\n    }\n\n    let i = 0\n    do {\n      const a = this.prerelease[i]\n      const b = other.prerelease[i]\n      debug('prerelease compare', i, a, b)\n      if (a === undefined && b === undefined) {\n        return 0\n      } else if (b === undefined) {\n        return 1\n      } else if (a === undefined) {\n        return -1\n      } else if (a === b) {\n        continue\n      } else {\n        return compareIdentifiers(a, b)\n      }\n    } while (++i)\n  }\n\n  compareBuild (other) {\n    if (!(other instanceof SemVer)) {\n      other = new SemVer(other, this.options)\n    }\n\n    let i = 0\n    do {\n      const a = this.build[i]\n      const b = other.build[i]\n      debug('build compare', i, a, b)\n      if (a === undefined && b === undefined) {\n        return 0\n      } else if (b === undefined) {\n        return 1\n      } else if (a === undefined) {\n        return -1\n      } else if (a === b) {\n        continue\n      } else {\n        return compareIdentifiers(a, b)\n      }\n    } while (++i)\n  }\n\n  // preminor will bump the version up to the next minor release, and immediately\n  // down to pre-release. premajor and prepatch work the same way.\n  inc (release, identifier, identifierBase) {\n    switch (release) {\n      case 'premajor':\n        this.prerelease.length = 0\n        this.patch = 0\n        this.minor = 0\n        this.major++\n        this.inc('pre', identifier, identifierBase)\n        break\n      case 'preminor':\n        this.prerelease.length = 0\n        this.patch = 0\n        this.minor++\n        this.inc('pre', identifier, identifierBase)\n        break\n      case 'prepatch':\n        // If this is already a prerelease, it will bump to the next version\n        // drop any prereleases that might already exist, since they are not\n        // relevant at this point.\n        this.prerelease.length = 0\n        this.inc('patch', identifier, identifierBase)\n        this.inc('pre', identifier, identifierBase)\n        break\n      // If the input is a non-prerelease version, this acts the same as\n      // prepatch.\n      case 'prerelease':\n        if (this.prerelease.length === 0) {\n          this.inc('patch', identifier, identifierBase)\n        }\n        this.inc('pre', identifier, identifierBase)\n        break\n\n      case 'major':\n        // If this is a pre-major version, bump up to the same major version.\n        // Otherwise increment major.\n        // 1.0.0-5 bumps to 1.0.0\n        // 1.1.0 bumps to 2.0.0\n        if (\n          this.minor !== 0 ||\n          this.patch !== 0 ||\n          this.prerelease.length === 0\n        ) {\n          this.major++\n        }\n        this.minor = 0\n        this.patch = 0\n        this.prerelease = []\n        break\n      case 'minor':\n        // If this is a pre-minor version, bump up to the same minor version.\n        // Otherwise increment minor.\n        // 1.2.0-5 bumps to 1.2.0\n        // 1.2.1 bumps to 1.3.0\n        if (this.patch !== 0 || this.prerelease.length === 0) {\n          this.minor++\n        }\n        this.patch = 0\n        this.prerelease = []\n        break\n      case 'patch':\n        // If this is not a pre-release version, it will increment the patch.\n        // If it is a pre-release it will bump up to the same patch version.\n        // 1.2.0-5 patches to 1.2.0\n        // 1.2.0 patches to 1.2.1\n        if (this.prerelease.length === 0) {\n          this.patch++\n        }\n        this.prerelease = []\n        break\n      // This probably shouldn't be used publicly.\n      // 1.0.0 'pre' would become 1.0.0-0 which is the wrong direction.\n      case 'pre': {\n        const base = Number(identifierBase) ? 1 : 0\n\n        if (!identifier && identifierBase === false) {\n          throw new Error('invalid increment argument: identifier is empty')\n        }\n\n        if (this.prerelease.length === 0) {\n          this.prerelease = [base]\n        } else {\n          let i = this.prerelease.length\n          while (--i >= 0) {\n            if (typeof this.prerelease[i] === 'number') {\n              this.prerelease[i]++\n              i = -2\n            }\n          }\n          if (i === -1) {\n            // didn't increment anything\n            if (identifier === this.prerelease.join('.') && identifierBase === false) {\n              throw new Error('invalid increment argument: identifier already exists')\n            }\n            this.prerelease.push(base)\n          }\n        }\n        if (identifier) {\n          // 1.2.0-beta.1 bumps to 1.2.0-beta.2,\n          // 1.2.0-beta.fooblz or 1.2.0-beta bumps to 1.2.0-beta.0\n          let prerelease = [identifier, base]\n          if (identifierBase === false) {\n            prerelease = [identifier]\n          }\n          if (compareIdentifiers(this.prerelease[0], identifier) === 0) {\n            if (isNaN(this.prerelease[1])) {\n              this.prerelease = prerelease\n            }\n          } else {\n            this.prerelease = prerelease\n          }\n        }\n        break\n      }\n      default:\n        throw new Error(`invalid increment argument: ${release}`)\n    }\n    this.raw = this.format()\n    if (this.build.length) {\n      this.raw += `+${this.build.join('.')}`\n    }\n    return this\n  }\n}\n\nmodule.exports = SemVer\n","const parse = require('./parse')\nconst clean = (version, options) => {\n  const s = parse(version.trim().replace(/^[=v]+/, ''), options)\n  return s ? s.version : null\n}\nmodule.exports = clean\n","const eq = require('./eq')\nconst neq = require('./neq')\nconst gt = require('./gt')\nconst gte = require('./gte')\nconst lt = require('./lt')\nconst lte = require('./lte')\n\nconst cmp = (a, op, b, loose) => {\n  switch (op) {\n    case '===':\n      if (typeof a === 'object') {\n        a = a.version\n      }\n      if (typeof b === 'object') {\n        b = b.version\n      }\n      return a === b\n\n    case '!==':\n      if (typeof a === 'object') {\n        a = a.version\n      }\n      if (typeof b === 'object') {\n        b = b.version\n      }\n      return a !== b\n\n    case '':\n    case '=':\n    case '==':\n      return eq(a, b, loose)\n\n    case '!=':\n      return neq(a, b, loose)\n\n    case '>':\n      return gt(a, b, loose)\n\n    case '>=':\n      return gte(a, b, loose)\n\n    case '<':\n      return lt(a, b, loose)\n\n    case '<=':\n      return lte(a, b, loose)\n\n    default:\n      throw new TypeError(`Invalid operator: ${op}`)\n  }\n}\nmodule.exports = cmp\n","const SemVer = require('../classes/semver')\nconst parse = require('./parse')\nconst { safeRe: re, t } = require('../internal/re')\n\nconst coerce = (version, options) => {\n  if (version instanceof SemVer) {\n    return version\n  }\n\n  if (typeof version === 'number') {\n    version = String(version)\n  }\n\n  if (typeof version !== 'string') {\n    return null\n  }\n\n  options = options || {}\n\n  let match = null\n  if (!options.rtl) {\n    match = version.match(options.includePrerelease ? re[t.COERCEFULL] : re[t.COERCE])\n  } else {\n    // Find the right-most coercible string that does not share\n    // a terminus with a more left-ward coercible string.\n    // Eg, '1.2.3.4' wants to coerce '2.3.4', not '3.4' or '4'\n    // With includePrerelease option set, '1.2.3.4-rc' wants to coerce '2.3.4-rc', not '2.3.4'\n    //\n    // Walk through the string checking with a /g regexp\n    // Manually set the index so as to pick up overlapping matches.\n    // Stop when we get a match that ends at the string end, since no\n    // coercible string can be more right-ward without the same terminus.\n    const coerceRtlRegex = options.includePrerelease ? re[t.COERCERTLFULL] : re[t.COERCERTL]\n    let next\n    while ((next = coerceRtlRegex.exec(version)) &&\n        (!match || match.index + match[0].length !== version.length)\n    ) {\n      if (!match ||\n            next.index + next[0].length !== match.index + match[0].length) {\n        match = next\n      }\n      coerceRtlRegex.lastIndex = next.index + next[1].length + next[2].length\n    }\n    // leave it in a clean state\n    coerceRtlRegex.lastIndex = -1\n  }\n\n  if (match === null) {\n    return null\n  }\n\n  const major = match[2]\n  const minor = match[3] || '0'\n  const patch = match[4] || '0'\n  const prerelease = options.includePrerelease && match[5] ? `-${match[5]}` : ''\n  const build = options.includePrerelease && match[6] ? `+${match[6]}` : ''\n\n  return parse(`${major}.${minor}.${patch}${prerelease}${build}`, options)\n}\nmodule.exports = coerce\n","const SemVer = require('../classes/semver')\nconst compareBuild = (a, b, loose) => {\n  const versionA = new SemVer(a, loose)\n  const versionB = new SemVer(b, loose)\n  return versionA.compare(versionB) || versionA.compareBuild(versionB)\n}\nmodule.exports = compareBuild\n","const compare = require('./compare')\nconst compareLoose = (a, b) => compare(a, b, true)\nmodule.exports = compareLoose\n","const SemVer = require('../classes/semver')\nconst compare = (a, b, loose) =>\n  new SemVer(a, loose).compare(new SemVer(b, loose))\n\nmodule.exports = compare\n","const parse = require('./parse.js')\n\nconst diff = (version1, version2) => {\n  const v1 = parse(version1, null, true)\n  const v2 = parse(version2, null, true)\n  const comparison = v1.compare(v2)\n\n  if (comparison === 0) {\n    return null\n  }\n\n  const v1Higher = comparison > 0\n  const highVersion = v1Higher ? v1 : v2\n  const lowVersion = v1Higher ? v2 : v1\n  const highHasPre = !!highVersion.prerelease.length\n  const lowHasPre = !!lowVersion.prerelease.length\n\n  if (lowHasPre && !highHasPre) {\n    // Going from prerelease -> no prerelease requires some special casing\n\n    // If the low version has only a major, then it will always be a major\n    // Some examples:\n    // 1.0.0-1 -> 1.0.0\n    // 1.0.0-1 -> 1.1.1\n    // 1.0.0-1 -> 2.0.0\n    if (!lowVersion.patch && !lowVersion.minor) {\n      return 'major'\n    }\n\n    // Otherwise it can be determined by checking the high version\n\n    if (highVersion.patch) {\n      // anything higher than a patch bump would result in the wrong version\n      return 'patch'\n    }\n\n    if (highVersion.minor) {\n      // anything higher than a minor bump would result in the wrong version\n      return 'minor'\n    }\n\n    // bumping major/minor/patch all have same result\n    return 'major'\n  }\n\n  // add the `pre` prefix if we are going to a prerelease version\n  const prefix = highHasPre ? 'pre' : ''\n\n  if (v1.major !== v2.major) {\n    return prefix + 'major'\n  }\n\n  if (v1.minor !== v2.minor) {\n    return prefix + 'minor'\n  }\n\n  if (v1.patch !== v2.patch) {\n    return prefix + 'patch'\n  }\n\n  // high and low are preleases\n  return 'prerelease'\n}\n\nmodule.exports = diff\n","const compare = require('./compare')\nconst eq = (a, b, loose) => compare(a, b, loose) === 0\nmodule.exports = eq\n","const compare = require('./compare')\nconst gt = (a, b, loose) => compare(a, b, loose) > 0\nmodule.exports = gt\n","const compare = require('./compare')\nconst gte = (a, b, loose) => compare(a, b, loose) >= 0\nmodule.exports = gte\n","const SemVer = require('../classes/semver')\n\nconst inc = (version, release, options, identifier, identifierBase) => {\n  if (typeof (options) === 'string') {\n    identifierBase = identifier\n    identifier = options\n    options = undefined\n  }\n\n  try {\n    return new SemVer(\n      version instanceof SemVer ? version.version : version,\n      options\n    ).inc(release, identifier, identifierBase).version\n  } catch (er) {\n    return null\n  }\n}\nmodule.exports = inc\n","const compare = require('./compare')\nconst lt = (a, b, loose) => compare(a, b, loose) < 0\nmodule.exports = lt\n","const compare = require('./compare')\nconst lte = (a, b, loose) => compare(a, b, loose) <= 0\nmodule.exports = lte\n","const SemVer = require('../classes/semver')\nconst major = (a, loose) => new SemVer(a, loose).major\nmodule.exports = major\n","const SemVer = require('../classes/semver')\nconst minor = (a, loose) => new SemVer(a, loose).minor\nmodule.exports = minor\n","const compare = require('./compare')\nconst neq = (a, b, loose) => compare(a, b, loose) !== 0\nmodule.exports = neq\n","const SemVer = require('../classes/semver')\nconst parse = (version, options, throwErrors = false) => {\n  if (version instanceof SemVer) {\n    return version\n  }\n  try {\n    return new SemVer(version, options)\n  } catch (er) {\n    if (!throwErrors) {\n      return null\n    }\n    throw er\n  }\n}\n\nmodule.exports = parse\n","const SemVer = require('../classes/semver')\nconst patch = (a, loose) => new SemVer(a, loose).patch\nmodule.exports = patch\n","const parse = require('./parse')\nconst prerelease = (version, options) => {\n  const parsed = parse(version, options)\n  return (parsed && parsed.prerelease.length) ? parsed.prerelease : null\n}\nmodule.exports = prerelease\n","const compare = require('./compare')\nconst rcompare = (a, b, loose) => compare(b, a, loose)\nmodule.exports = rcompare\n","const compareBuild = require('./compare-build')\nconst rsort = (list, loose) => list.sort((a, b) => compareBuild(b, a, loose))\nmodule.exports = rsort\n","const Range = require('../classes/range')\nconst satisfies = (version, range, options) => {\n  try {\n    range = new Range(range, options)\n  } catch (er) {\n    return false\n  }\n  return range.test(version)\n}\nmodule.exports = satisfies\n","const compareBuild = require('./compare-build')\nconst sort = (list, loose) => list.sort((a, b) => compareBuild(a, b, loose))\nmodule.exports = sort\n","const parse = require('./parse')\nconst valid = (version, options) => {\n  const v = parse(version, options)\n  return v ? v.version : null\n}\nmodule.exports = valid\n","// just pre-load all the stuff that index.js lazily exports\nconst internalRe = require('./internal/re')\nconst constants = require('./internal/constants')\nconst SemVer = require('./classes/semver')\nconst identifiers = require('./internal/identifiers')\nconst parse = require('./functions/parse')\nconst valid = require('./functions/valid')\nconst clean = require('./functions/clean')\nconst inc = require('./functions/inc')\nconst diff = require('./functions/diff')\nconst major = require('./functions/major')\nconst minor = require('./functions/minor')\nconst patch = require('./functions/patch')\nconst prerelease = require('./functions/prerelease')\nconst compare = require('./functions/compare')\nconst rcompare = require('./functions/rcompare')\nconst compareLoose = require('./functions/compare-loose')\nconst compareBuild = require('./functions/compare-build')\nconst sort = require('./functions/sort')\nconst rsort = require('./functions/rsort')\nconst gt = require('./functions/gt')\nconst lt = require('./functions/lt')\nconst eq = require('./functions/eq')\nconst neq = require('./functions/neq')\nconst gte = require('./functions/gte')\nconst lte = require('./functions/lte')\nconst cmp = require('./functions/cmp')\nconst coerce = require('./functions/coerce')\nconst Comparator = require('./classes/comparator')\nconst Range = require('./classes/range')\nconst satisfies = require('./functions/satisfies')\nconst toComparators = require('./ranges/to-comparators')\nconst maxSatisfying = require('./ranges/max-satisfying')\nconst minSatisfying = require('./ranges/min-satisfying')\nconst minVersion = require('./ranges/min-version')\nconst validRange = require('./ranges/valid')\nconst outside = require('./ranges/outside')\nconst gtr = require('./ranges/gtr')\nconst ltr = require('./ranges/ltr')\nconst intersects = require('./ranges/intersects')\nconst simplifyRange = require('./ranges/simplify')\nconst subset = require('./ranges/subset')\nmodule.exports = {\n  parse,\n  valid,\n  clean,\n  inc,\n  diff,\n  major,\n  minor,\n  patch,\n  prerelease,\n  compare,\n  rcompare,\n  compareLoose,\n  compareBuild,\n  sort,\n  rsort,\n  gt,\n  lt,\n  eq,\n  neq,\n  gte,\n  lte,\n  cmp,\n  coerce,\n  Comparator,\n  Range,\n  satisfies,\n  toComparators,\n  maxSatisfying,\n  minSatisfying,\n  minVersion,\n  validRange,\n  outside,\n  gtr,\n  ltr,\n  intersects,\n  simplifyRange,\n  subset,\n  SemVer,\n  re: internalRe.re,\n  src: internalRe.src,\n  tokens: internalRe.t,\n  SEMVER_SPEC_VERSION: constants.SEMVER_SPEC_VERSION,\n  RELEASE_TYPES: constants.RELEASE_TYPES,\n  compareIdentifiers: identifiers.compareIdentifiers,\n  rcompareIdentifiers: identifiers.rcompareIdentifiers,\n}\n","// Note: this is the semver.org version of the spec that it implements\n// Not necessarily the package version of this code.\nconst SEMVER_SPEC_VERSION = '2.0.0'\n\nconst MAX_LENGTH = 256\nconst MAX_SAFE_INTEGER = Number.MAX_SAFE_INTEGER ||\n/* istanbul ignore next */ 9007199254740991\n\n// Max safe segment length for coercion.\nconst MAX_SAFE_COMPONENT_LENGTH = 16\n\n// Max safe length for a build identifier. The max length minus 6 characters for\n// the shortest version with a build 0.0.0+BUILD.\nconst MAX_SAFE_BUILD_LENGTH = MAX_LENGTH - 6\n\nconst RELEASE_TYPES = [\n  'major',\n  'premajor',\n  'minor',\n  'preminor',\n  'patch',\n  'prepatch',\n  'prerelease',\n]\n\nmodule.exports = {\n  MAX_LENGTH,\n  MAX_SAFE_COMPONENT_LENGTH,\n  MAX_SAFE_BUILD_LENGTH,\n  MAX_SAFE_INTEGER,\n  RELEASE_TYPES,\n  SEMVER_SPEC_VERSION,\n  FLAG_INCLUDE_PRERELEASE: 0b001,\n  FLAG_LOOSE: 0b010,\n}\n","const debug = (\n  typeof process === 'object' &&\n  process.env &&\n  process.env.NODE_DEBUG &&\n  /\\bsemver\\b/i.test(process.env.NODE_DEBUG)\n) ? (...args) => console.error('SEMVER', ...args)\n  : () => {}\n\nmodule.exports = debug\n","const numeric = /^[0-9]+$/\nconst compareIdentifiers = (a, b) => {\n  const anum = numeric.test(a)\n  const bnum = numeric.test(b)\n\n  if (anum && bnum) {\n    a = +a\n    b = +b\n  }\n\n  return a === b ? 0\n    : (anum && !bnum) ? -1\n    : (bnum && !anum) ? 1\n    : a < b ? -1\n    : 1\n}\n\nconst rcompareIdentifiers = (a, b) => compareIdentifiers(b, a)\n\nmodule.exports = {\n  compareIdentifiers,\n  rcompareIdentifiers,\n}\n","class LRUCache {\n  constructor () {\n    this.max = 1000\n    this.map = new Map()\n  }\n\n  get (key) {\n    const value = this.map.get(key)\n    if (value === undefined) {\n      return undefined\n    } else {\n      // Remove the key from the map and add it to the end\n      this.map.delete(key)\n      this.map.set(key, value)\n      return value\n    }\n  }\n\n  delete (key) {\n    return this.map.delete(key)\n  }\n\n  set (key, value) {\n    const deleted = this.delete(key)\n\n    if (!deleted && value !== undefined) {\n      // If cache is full, delete the least recently used item\n      if (this.map.size >= this.max) {\n        const firstKey = this.map.keys().next().value\n        this.delete(firstKey)\n      }\n\n      this.map.set(key, value)\n    }\n\n    return this\n  }\n}\n\nmodule.exports = LRUCache\n","// parse out just the options we care about\nconst looseOption = Object.freeze({ loose: true })\nconst emptyOpts = Object.freeze({ })\nconst parseOptions = options => {\n  if (!options) {\n    return emptyOpts\n  }\n\n  if (typeof options !== 'object') {\n    return looseOption\n  }\n\n  return options\n}\nmodule.exports = parseOptions\n","const {\n  MAX_SAFE_COMPONENT_LENGTH,\n  MAX_SAFE_BUILD_LENGTH,\n  MAX_LENGTH,\n} = require('./constants')\nconst debug = require('./debug')\nexports = module.exports = {}\n\n// The actual regexps go on exports.re\nconst re = exports.re = []\nconst safeRe = exports.safeRe = []\nconst src = exports.src = []\nconst t = exports.t = {}\nlet R = 0\n\nconst LETTERDASHNUMBER = '[a-zA-Z0-9-]'\n\n// Replace some greedy regex tokens to prevent regex dos issues. These regex are\n// used internally via the safeRe object since all inputs in this library get\n// normalized first to trim and collapse all extra whitespace. The original\n// regexes are exported for userland consumption and lower level usage. A\n// future breaking change could export the safer regex only with a note that\n// all input should have extra whitespace removed.\nconst safeRegexReplacements = [\n  ['\\\\s', 1],\n  ['\\\\d', MAX_LENGTH],\n  [LETTERDASHNUMBER, MAX_SAFE_BUILD_LENGTH],\n]\n\nconst makeSafeRegex = (value) => {\n  for (const [token, max] of safeRegexReplacements) {\n    value = value\n      .split(`${token}*`).join(`${token}{0,${max}}`)\n      .split(`${token}+`).join(`${token}{1,${max}}`)\n  }\n  return value\n}\n\nconst createToken = (name, value, isGlobal) => {\n  const safe = makeSafeRegex(value)\n  const index = R++\n  debug(name, index, value)\n  t[name] = index\n  src[index] = value\n  re[index] = new RegExp(value, isGlobal ? 'g' : undefined)\n  safeRe[index] = new RegExp(safe, isGlobal ? 'g' : undefined)\n}\n\n// The following Regular Expressions can be used for tokenizing,\n// validating, and parsing SemVer version strings.\n\n// ## Numeric Identifier\n// A single `0`, or a non-zero digit followed by zero or more digits.\n\ncreateToken('NUMERICIDENTIFIER', '0|[1-9]\\\\d*')\ncreateToken('NUMERICIDENTIFIERLOOSE', '\\\\d+')\n\n// ## Non-numeric Identifier\n// Zero or more digits, followed by a letter or hyphen, and then zero or\n// more letters, digits, or hyphens.\n\ncreateToken('NONNUMERICIDENTIFIER', `\\\\d*[a-zA-Z-]${LETTERDASHNUMBER}*`)\n\n// ## Main Version\n// Three dot-separated numeric identifiers.\n\ncreateToken('MAINVERSION', `(${src[t.NUMERICIDENTIFIER]})\\\\.` +\n                   `(${src[t.NUMERICIDENTIFIER]})\\\\.` +\n                   `(${src[t.NUMERICIDENTIFIER]})`)\n\ncreateToken('MAINVERSIONLOOSE', `(${src[t.NUMERICIDENTIFIERLOOSE]})\\\\.` +\n                        `(${src[t.NUMERICIDENTIFIERLOOSE]})\\\\.` +\n                        `(${src[t.NUMERICIDENTIFIERLOOSE]})`)\n\n// ## Pre-release Version Identifier\n// A numeric identifier, or a non-numeric identifier.\n\ncreateToken('PRERELEASEIDENTIFIER', `(?:${src[t.NUMERICIDENTIFIER]\n}|${src[t.NONNUMERICIDENTIFIER]})`)\n\ncreateToken('PRERELEASEIDENTIFIERLOOSE', `(?:${src[t.NUMERICIDENTIFIERLOOSE]\n}|${src[t.NONNUMERICIDENTIFIER]})`)\n\n// ## Pre-release Version\n// Hyphen, followed by one or more dot-separated pre-release version\n// identifiers.\n\ncreateToken('PRERELEASE', `(?:-(${src[t.PRERELEASEIDENTIFIER]\n}(?:\\\\.${src[t.PRERELEASEIDENTIFIER]})*))`)\n\ncreateToken('PRERELEASELOOSE', `(?:-?(${src[t.PRERELEASEIDENTIFIERLOOSE]\n}(?:\\\\.${src[t.PRERELEASEIDENTIFIERLOOSE]})*))`)\n\n// ## Build Metadata Identifier\n// Any combination of digits, letters, or hyphens.\n\ncreateToken('BUILDIDENTIFIER', `${LETTERDASHNUMBER}+`)\n\n// ## Build Metadata\n// Plus sign, followed by one or more period-separated build metadata\n// identifiers.\n\ncreateToken('BUILD', `(?:\\\\+(${src[t.BUILDIDENTIFIER]\n}(?:\\\\.${src[t.BUILDIDENTIFIER]})*))`)\n\n// ## Full Version String\n// A main version, followed optionally by a pre-release version and\n// build metadata.\n\n// Note that the only major, minor, patch, and pre-release sections of\n// the version string are capturing groups.  The build metadata is not a\n// capturing group, because it should not ever be used in version\n// comparison.\n\ncreateToken('FULLPLAIN', `v?${src[t.MAINVERSION]\n}${src[t.PRERELEASE]}?${\n  src[t.BUILD]}?`)\n\ncreateToken('FULL', `^${src[t.FULLPLAIN]}$`)\n\n// like full, but allows v1.2.3 and =1.2.3, which people do sometimes.\n// also, 1.0.0alpha1 (prerelease without the hyphen) which is pretty\n// common in the npm registry.\ncreateToken('LOOSEPLAIN', `[v=\\\\s]*${src[t.MAINVERSIONLOOSE]\n}${src[t.PRERELEASELOOSE]}?${\n  src[t.BUILD]}?`)\n\ncreateToken('LOOSE', `^${src[t.LOOSEPLAIN]}$`)\n\ncreateToken('GTLT', '((?:<|>)?=?)')\n\n// Something like \"2.*\" or \"1.2.x\".\n// Note that \"x.x\" is a valid xRange identifer, meaning \"any version\"\n// Only the first item is strictly required.\ncreateToken('XRANGEIDENTIFIERLOOSE', `${src[t.NUMERICIDENTIFIERLOOSE]}|x|X|\\\\*`)\ncreateToken('XRANGEIDENTIFIER', `${src[t.NUMERICIDENTIFIER]}|x|X|\\\\*`)\n\ncreateToken('XRANGEPLAIN', `[v=\\\\s]*(${src[t.XRANGEIDENTIFIER]})` +\n                   `(?:\\\\.(${src[t.XRANGEIDENTIFIER]})` +\n                   `(?:\\\\.(${src[t.XRANGEIDENTIFIER]})` +\n                   `(?:${src[t.PRERELEASE]})?${\n                     src[t.BUILD]}?` +\n                   `)?)?`)\n\ncreateToken('XRANGEPLAINLOOSE', `[v=\\\\s]*(${src[t.XRANGEIDENTIFIERLOOSE]})` +\n                        `(?:\\\\.(${src[t.XRANGEIDENTIFIERLOOSE]})` +\n                        `(?:\\\\.(${src[t.XRANGEIDENTIFIERLOOSE]})` +\n                        `(?:${src[t.PRERELEASELOOSE]})?${\n                          src[t.BUILD]}?` +\n                        `)?)?`)\n\ncreateToken('XRANGE', `^${src[t.GTLT]}\\\\s*${src[t.XRANGEPLAIN]}$`)\ncreateToken('XRANGELOOSE', `^${src[t.GTLT]}\\\\s*${src[t.XRANGEPLAINLOOSE]}$`)\n\n// Coercion.\n// Extract anything that could conceivably be a part of a valid semver\ncreateToken('COERCEPLAIN', `${'(^|[^\\\\d])' +\n              '(\\\\d{1,'}${MAX_SAFE_COMPONENT_LENGTH}})` +\n              `(?:\\\\.(\\\\d{1,${MAX_SAFE_COMPONENT_LENGTH}}))?` +\n              `(?:\\\\.(\\\\d{1,${MAX_SAFE_COMPONENT_LENGTH}}))?`)\ncreateToken('COERCE', `${src[t.COERCEPLAIN]}(?:$|[^\\\\d])`)\ncreateToken('COERCEFULL', src[t.COERCEPLAIN] +\n              `(?:${src[t.PRERELEASE]})?` +\n              `(?:${src[t.BUILD]})?` +\n              `(?:$|[^\\\\d])`)\ncreateToken('COERCERTL', src[t.COERCE], true)\ncreateToken('COERCERTLFULL', src[t.COERCEFULL], true)\n\n// Tilde ranges.\n// Meaning is \"reasonably at or greater than\"\ncreateToken('LONETILDE', '(?:~>?)')\n\ncreateToken('TILDETRIM', `(\\\\s*)${src[t.LONETILDE]}\\\\s+`, true)\nexports.tildeTrimReplace = '$1~'\n\ncreateToken('TILDE', `^${src[t.LONETILDE]}${src[t.XRANGEPLAIN]}$`)\ncreateToken('TILDELOOSE', `^${src[t.LONETILDE]}${src[t.XRANGEPLAINLOOSE]}$`)\n\n// Caret ranges.\n// Meaning is \"at least and backwards compatible with\"\ncreateToken('LONECARET', '(?:\\\\^)')\n\ncreateToken('CARETTRIM', `(\\\\s*)${src[t.LONECARET]}\\\\s+`, true)\nexports.caretTrimReplace = '$1^'\n\ncreateToken('CARET', `^${src[t.LONECARET]}${src[t.XRANGEPLAIN]}$`)\ncreateToken('CARETLOOSE', `^${src[t.LONECARET]}${src[t.XRANGEPLAINLOOSE]}$`)\n\n// A simple gt/lt/eq thing, or just \"\" to indicate \"any version\"\ncreateToken('COMPARATORLOOSE', `^${src[t.GTLT]}\\\\s*(${src[t.LOOSEPLAIN]})$|^$`)\ncreateToken('COMPARATOR', `^${src[t.GTLT]}\\\\s*(${src[t.FULLPLAIN]})$|^$`)\n\n// An expression to strip any whitespace between the gtlt and the thing\n// it modifies, so that `> 1.2.3` ==> `>1.2.3`\ncreateToken('COMPARATORTRIM', `(\\\\s*)${src[t.GTLT]\n}\\\\s*(${src[t.LOOSEPLAIN]}|${src[t.XRANGEPLAIN]})`, true)\nexports.comparatorTrimReplace = '$1$2$3'\n\n// Something like `1.2.3 - 1.2.4`\n// Note that these all use the loose form, because they'll be\n// checked against either the strict or loose comparator form\n// later.\ncreateToken('HYPHENRANGE', `^\\\\s*(${src[t.XRANGEPLAIN]})` +\n                   `\\\\s+-\\\\s+` +\n                   `(${src[t.XRANGEPLAIN]})` +\n                   `\\\\s*$`)\n\ncreateToken('HYPHENRANGELOOSE', `^\\\\s*(${src[t.XRANGEPLAINLOOSE]})` +\n                        `\\\\s+-\\\\s+` +\n                        `(${src[t.XRANGEPLAINLOOSE]})` +\n                        `\\\\s*$`)\n\n// Star ranges basically just allow anything at all.\ncreateToken('STAR', '(<|>)?=?\\\\s*\\\\*')\n// >=0.0.0 is like a star\ncreateToken('GTE0', '^\\\\s*>=\\\\s*0\\\\.0\\\\.0\\\\s*$')\ncreateToken('GTE0PRE', '^\\\\s*>=\\\\s*0\\\\.0\\\\.0-0\\\\s*$')\n","// Determine if version is greater than all the versions possible in the range.\nconst outside = require('./outside')\nconst gtr = (version, range, options) => outside(version, range, '>', options)\nmodule.exports = gtr\n","const Range = require('../classes/range')\nconst intersects = (r1, r2, options) => {\n  r1 = new Range(r1, options)\n  r2 = new Range(r2, options)\n  return r1.intersects(r2, options)\n}\nmodule.exports = intersects\n","const outside = require('./outside')\n// Determine if version is less than all the versions possible in the range\nconst ltr = (version, range, options) => outside(version, range, '<', options)\nmodule.exports = ltr\n","const SemVer = require('../classes/semver')\nconst Range = require('../classes/range')\n\nconst maxSatisfying = (versions, range, options) => {\n  let max = null\n  let maxSV = null\n  let rangeObj = null\n  try {\n    rangeObj = new Range(range, options)\n  } catch (er) {\n    return null\n  }\n  versions.forEach((v) => {\n    if (rangeObj.test(v)) {\n      // satisfies(v, range, options)\n      if (!max || maxSV.compare(v) === -1) {\n        // compare(max, v, true)\n        max = v\n        maxSV = new SemVer(max, options)\n      }\n    }\n  })\n  return max\n}\nmodule.exports = maxSatisfying\n","const SemVer = require('../classes/semver')\nconst Range = require('../classes/range')\nconst minSatisfying = (versions, range, options) => {\n  let min = null\n  let minSV = null\n  let rangeObj = null\n  try {\n    rangeObj = new Range(range, options)\n  } catch (er) {\n    return null\n  }\n  versions.forEach((v) => {\n    if (rangeObj.test(v)) {\n      // satisfies(v, range, options)\n      if (!min || minSV.compare(v) === 1) {\n        // compare(min, v, true)\n        min = v\n        minSV = new SemVer(min, options)\n      }\n    }\n  })\n  return min\n}\nmodule.exports = minSatisfying\n","const SemVer = require('../classes/semver')\nconst Range = require('../classes/range')\nconst gt = require('../functions/gt')\n\nconst minVersion = (range, loose) => {\n  range = new Range(range, loose)\n\n  let minver = new SemVer('0.0.0')\n  if (range.test(minver)) {\n    return minver\n  }\n\n  minver = new SemVer('0.0.0-0')\n  if (range.test(minver)) {\n    return minver\n  }\n\n  minver = null\n  for (let i = 0; i < range.set.length; ++i) {\n    const comparators = range.set[i]\n\n    let setMin = null\n    comparators.forEach((comparator) => {\n      // Clone to avoid manipulating the comparator's semver object.\n      const compver = new SemVer(comparator.semver.version)\n      switch (comparator.operator) {\n        case '>':\n          if (compver.prerelease.length === 0) {\n            compver.patch++\n          } else {\n            compver.prerelease.push(0)\n          }\n          compver.raw = compver.format()\n          /* fallthrough */\n        case '':\n        case '>=':\n          if (!setMin || gt(compver, setMin)) {\n            setMin = compver\n          }\n          break\n        case '<':\n        case '<=':\n          /* Ignore maximum versions */\n          break\n        /* istanbul ignore next */\n        default:\n          throw new Error(`Unexpected operation: ${comparator.operator}`)\n      }\n    })\n    if (setMin && (!minver || gt(minver, setMin))) {\n      minver = setMin\n    }\n  }\n\n  if (minver && range.test(minver)) {\n    return minver\n  }\n\n  return null\n}\nmodule.exports = minVersion\n","const SemVer = require('../classes/semver')\nconst Comparator = require('../classes/comparator')\nconst { ANY } = Comparator\nconst Range = require('../classes/range')\nconst satisfies = require('../functions/satisfies')\nconst gt = require('../functions/gt')\nconst lt = require('../functions/lt')\nconst lte = require('../functions/lte')\nconst gte = require('../functions/gte')\n\nconst outside = (version, range, hilo, options) => {\n  version = new SemVer(version, options)\n  range = new Range(range, options)\n\n  let gtfn, ltefn, ltfn, comp, ecomp\n  switch (hilo) {\n    case '>':\n      gtfn = gt\n      ltefn = lte\n      ltfn = lt\n      comp = '>'\n      ecomp = '>='\n      break\n    case '<':\n      gtfn = lt\n      ltefn = gte\n      ltfn = gt\n      comp = '<'\n      ecomp = '<='\n      break\n    default:\n      throw new TypeError('Must provide a hilo val of \"<\" or \">\"')\n  }\n\n  // If it satisfies the range it is not outside\n  if (satisfies(version, range, options)) {\n    return false\n  }\n\n  // From now on, variable terms are as if we're in \"gtr\" mode.\n  // but note that everything is flipped for the \"ltr\" function.\n\n  for (let i = 0; i < range.set.length; ++i) {\n    const comparators = range.set[i]\n\n    let high = null\n    let low = null\n\n    comparators.forEach((comparator) => {\n      if (comparator.semver === ANY) {\n        comparator = new Comparator('>=0.0.0')\n      }\n      high = high || comparator\n      low = low || comparator\n      if (gtfn(comparator.semver, high.semver, options)) {\n        high = comparator\n      } else if (ltfn(comparator.semver, low.semver, options)) {\n        low = comparator\n      }\n    })\n\n    // If the edge version comparator has a operator then our version\n    // isn't outside it\n    if (high.operator === comp || high.operator === ecomp) {\n      return false\n    }\n\n    // If the lowest version comparator has an operator and our version\n    // is less than it then it isn't higher than the range\n    if ((!low.operator || low.operator === comp) &&\n        ltefn(version, low.semver)) {\n      return false\n    } else if (low.operator === ecomp && ltfn(version, low.semver)) {\n      return false\n    }\n  }\n  return true\n}\n\nmodule.exports = outside\n","// given a set of versions and a range, create a \"simplified\" range\n// that includes the same versions that the original range does\n// If the original range is shorter than the simplified one, return that.\nconst satisfies = require('../functions/satisfies.js')\nconst compare = require('../functions/compare.js')\nmodule.exports = (versions, range, options) => {\n  const set = []\n  let first = null\n  let prev = null\n  const v = versions.sort((a, b) => compare(a, b, options))\n  for (const version of v) {\n    const included = satisfies(version, range, options)\n    if (included) {\n      prev = version\n      if (!first) {\n        first = version\n      }\n    } else {\n      if (prev) {\n        set.push([first, prev])\n      }\n      prev = null\n      first = null\n    }\n  }\n  if (first) {\n    set.push([first, null])\n  }\n\n  const ranges = []\n  for (const [min, max] of set) {\n    if (min === max) {\n      ranges.push(min)\n    } else if (!max && min === v[0]) {\n      ranges.push('*')\n    } else if (!max) {\n      ranges.push(`>=${min}`)\n    } else if (min === v[0]) {\n      ranges.push(`<=${max}`)\n    } else {\n      ranges.push(`${min} - ${max}`)\n    }\n  }\n  const simplified = ranges.join(' || ')\n  const original = typeof range.raw === 'string' ? range.raw : String(range)\n  return simplified.length < original.length ? simplified : range\n}\n","const Range = require('../classes/range.js')\nconst Comparator = require('../classes/comparator.js')\nconst { ANY } = Comparator\nconst satisfies = require('../functions/satisfies.js')\nconst compare = require('../functions/compare.js')\n\n// Complex range `r1 || r2 || ...` is a subset of `R1 || R2 || ...` iff:\n// - Every simple range `r1, r2, ...` is a null set, OR\n// - Every simple range `r1, r2, ...` which is not a null set is a subset of\n//   some `R1, R2, ...`\n//\n// Simple range `c1 c2 ...` is a subset of simple range `C1 C2 ...` iff:\n// - If c is only the ANY comparator\n//   - If C is only the ANY comparator, return true\n//   - Else if in prerelease mode, return false\n//   - else replace c with `[>=0.0.0]`\n// - If C is only the ANY comparator\n//   - if in prerelease mode, return true\n//   - else replace C with `[>=0.0.0]`\n// - Let EQ be the set of = comparators in c\n// - If EQ is more than one, return true (null set)\n// - Let GT be the highest > or >= comparator in c\n// - Let LT be the lowest < or <= comparator in c\n// - If GT and LT, and GT.semver > LT.semver, return true (null set)\n// - If any C is a = range, and GT or LT are set, return false\n// - If EQ\n//   - If GT, and EQ does not satisfy GT, return true (null set)\n//   - If LT, and EQ does not satisfy LT, return true (null set)\n//   - If EQ satisfies every C, return true\n//   - Else return false\n// - If GT\n//   - If GT.semver is lower than any > or >= comp in C, return false\n//   - If GT is >=, and GT.semver does not satisfy every C, return false\n//   - If GT.semver has a prerelease, and not in prerelease mode\n//     - If no C has a prerelease and the GT.semver tuple, return false\n// - If LT\n//   - If LT.semver is greater than any < or <= comp in C, return false\n//   - If LT is <=, and LT.semver does not satisfy every C, return false\n//   - If GT.semver has a prerelease, and not in prerelease mode\n//     - If no C has a prerelease and the LT.semver tuple, return false\n// - Else return true\n\nconst subset = (sub, dom, options = {}) => {\n  if (sub === dom) {\n    return true\n  }\n\n  sub = new Range(sub, options)\n  dom = new Range(dom, options)\n  let sawNonNull = false\n\n  OUTER: for (const simpleSub of sub.set) {\n    for (const simpleDom of dom.set) {\n      const isSub = simpleSubset(simpleSub, simpleDom, options)\n      sawNonNull = sawNonNull || isSub !== null\n      if (isSub) {\n        continue OUTER\n      }\n    }\n    // the null set is a subset of everything, but null simple ranges in\n    // a complex range should be ignored.  so if we saw a non-null range,\n    // then we know this isn't a subset, but if EVERY simple range was null,\n    // then it is a subset.\n    if (sawNonNull) {\n      return false\n    }\n  }\n  return true\n}\n\nconst minimumVersionWithPreRelease = [new Comparator('>=0.0.0-0')]\nconst minimumVersion = [new Comparator('>=0.0.0')]\n\nconst simpleSubset = (sub, dom, options) => {\n  if (sub === dom) {\n    return true\n  }\n\n  if (sub.length === 1 && sub[0].semver === ANY) {\n    if (dom.length === 1 && dom[0].semver === ANY) {\n      return true\n    } else if (options.includePrerelease) {\n      sub = minimumVersionWithPreRelease\n    } else {\n      sub = minimumVersion\n    }\n  }\n\n  if (dom.length === 1 && dom[0].semver === ANY) {\n    if (options.includePrerelease) {\n      return true\n    } else {\n      dom = minimumVersion\n    }\n  }\n\n  const eqSet = new Set()\n  let gt, lt\n  for (const c of sub) {\n    if (c.operator === '>' || c.operator === '>=') {\n      gt = higherGT(gt, c, options)\n    } else if (c.operator === '<' || c.operator === '<=') {\n      lt = lowerLT(lt, c, options)\n    } else {\n      eqSet.add(c.semver)\n    }\n  }\n\n  if (eqSet.size > 1) {\n    return null\n  }\n\n  let gtltComp\n  if (gt && lt) {\n    gtltComp = compare(gt.semver, lt.semver, options)\n    if (gtltComp > 0) {\n      return null\n    } else if (gtltComp === 0 && (gt.operator !== '>=' || lt.operator !== '<=')) {\n      return null\n    }\n  }\n\n  // will iterate one or zero times\n  for (const eq of eqSet) {\n    if (gt && !satisfies(eq, String(gt), options)) {\n      return null\n    }\n\n    if (lt && !satisfies(eq, String(lt), options)) {\n      return null\n    }\n\n    for (const c of dom) {\n      if (!satisfies(eq, String(c), options)) {\n        return false\n      }\n    }\n\n    return true\n  }\n\n  let higher, lower\n  let hasDomLT, hasDomGT\n  // if the subset has a prerelease, we need a comparator in the superset\n  // with the same tuple and a prerelease, or it's not a subset\n  let needDomLTPre = lt &&\n    !options.includePrerelease &&\n    lt.semver.prerelease.length ? lt.semver : false\n  let needDomGTPre = gt &&\n    !options.includePrerelease &&\n    gt.semver.prerelease.length ? gt.semver : false\n  // exception: <1.2.3-0 is the same as <1.2.3\n  if (needDomLTPre && needDomLTPre.prerelease.length === 1 &&\n      lt.operator === '<' && needDomLTPre.prerelease[0] === 0) {\n    needDomLTPre = false\n  }\n\n  for (const c of dom) {\n    hasDomGT = hasDomGT || c.operator === '>' || c.operator === '>='\n    hasDomLT = hasDomLT || c.operator === '<' || c.operator === '<='\n    if (gt) {\n      if (needDomGTPre) {\n        if (c.semver.prerelease && c.semver.prerelease.length &&\n            c.semver.major === needDomGTPre.major &&\n            c.semver.minor === needDomGTPre.minor &&\n            c.semver.patch === needDomGTPre.patch) {\n          needDomGTPre = false\n        }\n      }\n      if (c.operator === '>' || c.operator === '>=') {\n        higher = higherGT(gt, c, options)\n        if (higher === c && higher !== gt) {\n          return false\n        }\n      } else if (gt.operator === '>=' && !satisfies(gt.semver, String(c), options)) {\n        return false\n      }\n    }\n    if (lt) {\n      if (needDomLTPre) {\n        if (c.semver.prerelease && c.semver.prerelease.length &&\n            c.semver.major === needDomLTPre.major &&\n            c.semver.minor === needDomLTPre.minor &&\n            c.semver.patch === needDomLTPre.patch) {\n          needDomLTPre = false\n        }\n      }\n      if (c.operator === '<' || c.operator === '<=') {\n        lower = lowerLT(lt, c, options)\n        if (lower === c && lower !== lt) {\n          return false\n        }\n      } else if (lt.operator === '<=' && !satisfies(lt.semver, String(c), options)) {\n        return false\n      }\n    }\n    if (!c.operator && (lt || gt) && gtltComp !== 0) {\n      return false\n    }\n  }\n\n  // if there was a < or >, and nothing in the dom, then must be false\n  // UNLESS it was limited by another range in the other direction.\n  // Eg, >1.0.0 <1.0.1 is still a subset of <2.0.0\n  if (gt && hasDomLT && !lt && gtltComp !== 0) {\n    return false\n  }\n\n  if (lt && hasDomGT && !gt && gtltComp !== 0) {\n    return false\n  }\n\n  // we needed a prerelease range in a specific tuple, but didn't get one\n  // then this isn't a subset.  eg >=1.2.3-pre is not a subset of >=1.0.0,\n  // because it includes prereleases in the 1.2.3 tuple\n  if (needDomGTPre || needDomLTPre) {\n    return false\n  }\n\n  return true\n}\n\n// >=1.2.3 is lower than >1.2.3\nconst higherGT = (a, b, options) => {\n  if (!a) {\n    return b\n  }\n  const comp = compare(a.semver, b.semver, options)\n  return comp > 0 ? a\n    : comp < 0 ? b\n    : b.operator === '>' && a.operator === '>=' ? b\n    : a\n}\n\n// <=1.2.3 is higher than <1.2.3\nconst lowerLT = (a, b, options) => {\n  if (!a) {\n    return b\n  }\n  const comp = compare(a.semver, b.semver, options)\n  return comp < 0 ? a\n    : comp > 0 ? b\n    : b.operator === '<' && a.operator === '<=' ? b\n    : a\n}\n\nmodule.exports = subset\n","const Range = require('../classes/range')\n\n// Mostly just for testing and legacy API reasons\nconst toComparators = (range, options) =>\n  new Range(range, options).set\n    .map(comp => comp.map(c => c.value).join(' ').trim().split(' '))\n\nmodule.exports = toComparators\n","const Range = require('../classes/range')\nconst validRange = (range, options) => {\n  try {\n    // Return '*' instead of '' so that truthiness works.\n    // This will throw if it's invalid anyway\n    return new Range(range, options).range || '*'\n  } catch (er) {\n    return null\n  }\n}\nmodule.exports = validRange\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n    return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nvar style_to_object_1 = __importDefault(require(\"style-to-object\"));\nvar utilities_1 = require(\"./utilities\");\n/**\n * Parses CSS inline style to JavaScript object (camelCased).\n */\nfunction StyleToJS(style, options) {\n    var output = {};\n    if (!style || typeof style !== 'string') {\n        return output;\n    }\n    (0, style_to_object_1.default)(style, function (property, value) {\n        // skip CSS comment\n        if (property && value) {\n            output[(0, utilities_1.camelCase)(property, options)] = value;\n        }\n    });\n    return output;\n}\nStyleToJS.default = StyleToJS;\nmodule.exports = StyleToJS;\n//# sourceMappingURL=index.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.camelCase = void 0;\nvar CUSTOM_PROPERTY_REGEX = /^--[a-zA-Z0-9-]+$/;\nvar HYPHEN_REGEX = /-([a-z])/g;\nvar NO_HYPHEN_REGEX = /^[^-]+$/;\nvar VENDOR_PREFIX_REGEX = /^-(webkit|moz|ms|o|khtml)-/;\nvar MS_VENDOR_PREFIX_REGEX = /^-(ms)-/;\n/**\n * Checks whether to skip camelCase.\n */\nvar skipCamelCase = function (property) {\n    return !property ||\n        NO_HYPHEN_REGEX.test(property) ||\n        CUSTOM_PROPERTY_REGEX.test(property);\n};\n/**\n * Replacer that capitalizes first character.\n */\nvar capitalize = function (match, character) {\n    return character.toUpperCase();\n};\n/**\n * Replacer that removes beginning hyphen of vendor prefix property.\n */\nvar trimHyphen = function (match, prefix) { return \"\".concat(prefix, \"-\"); };\n/**\n * CamelCases a CSS property.\n */\nvar camelCase = function (property, options) {\n    if (options === void 0) { options = {}; }\n    if (skipCamelCase(property)) {\n        return property;\n    }\n    property = property.toLowerCase();\n    if (options.reactCompat) {\n        // `-ms` vendor prefix should not be capitalized\n        property = property.replace(MS_VENDOR_PREFIX_REGEX, trimHyphen);\n    }\n    else {\n        // for non-React, remove first hyphen so vendor prefix is not capitalized\n        property = property.replace(VENDOR_PREFIX_REGEX, trimHyphen);\n    }\n    return property.replace(HYPHEN_REGEX, capitalize);\n};\nexports.camelCase = camelCase;\n//# sourceMappingURL=utilities.js.map","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n    return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar inline_style_parser_1 = __importDefault(require(\"inline-style-parser\"));\n/**\n * Parses inline style to object.\n *\n * @param style - Inline style.\n * @param iterator - Iterator.\n * @returns - Style object or null.\n *\n * @example Parsing inline style to object:\n *\n * ```js\n * import parse from 'style-to-object';\n * parse('line-height: 42;'); // { 'line-height': '42' }\n * ```\n */\nfunction StyleToObject(style, iterator) {\n    var styleObject = null;\n    if (!style || typeof style !== 'string') {\n        return styleObject;\n    }\n    var declarations = (0, inline_style_parser_1.default)(style);\n    var hasIterator = typeof iterator === 'function';\n    declarations.forEach(function (declaration) {\n        if (declaration.type !== 'declaration') {\n            return;\n        }\n        var property = declaration.property, value = declaration.value;\n        if (hasIterator) {\n            iterator(property, value, declaration);\n        }\n        else if (value) {\n            styleObject = styleObject || {};\n            styleObject[property] = value;\n        }\n    });\n    return styleObject;\n}\nexports.default = StyleToObject;\n//# sourceMappingURL=index.js.map","/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n    extendStatics = Object.setPrototypeOf ||\r\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n        function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n    return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n    if (typeof b !== \"function\" && b !== null)\r\n        throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n    extendStatics(d, b);\r\n    function __() { this.constructor = d; }\r\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n    __assign = Object.assign || function __assign(t) {\r\n        for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n            s = arguments[i];\r\n            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n        }\r\n        return t;\r\n    }\r\n    return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n    var t = {};\r\n    for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n        t[p] = s[p];\r\n    if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n        for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n            if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n                t[p[i]] = s[p[i]];\r\n        }\r\n    return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n    return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n    return new (P || (P = Promise))(function (resolve, reject) {\r\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n    });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n    return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n    function verb(n) { return function (v) { return step([n, v]); }; }\r\n    function step(op) {\r\n        if (f) throw new TypeError(\"Generator is already executing.\");\r\n        while (_) try {\r\n            if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n            if (y = 0, t) op = [op[0] & 2, t.value];\r\n            switch (op[0]) {\r\n                case 0: case 1: t = op; break;\r\n                case 4: _.label++; return { value: op[1], done: false };\r\n                case 5: _.label++; y = op[1]; op = [0]; continue;\r\n                case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n                default:\r\n                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n                    if (t[2]) _.ops.pop();\r\n                    _.trys.pop(); continue;\r\n            }\r\n            op = body.call(thisArg, _);\r\n        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n        if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n    }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n    if (k2 === undefined) k2 = k;\r\n    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\r\n}) : (function(o, m, k, k2) {\r\n    if (k2 === undefined) k2 = k;\r\n    o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n    for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n    var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n    if (m) return m.call(o);\r\n    if (o && typeof o.length === \"number\") return {\r\n        next: function () {\r\n            if (o && i >= o.length) o = void 0;\r\n            return { value: o && o[i++], done: !o };\r\n        }\r\n    };\r\n    throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n    var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n    if (!m) return o;\r\n    var i = m.call(o), r, ar = [], e;\r\n    try {\r\n        while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n    }\r\n    catch (error) { e = { error: error }; }\r\n    finally {\r\n        try {\r\n            if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n        }\r\n        finally { if (e) throw e.error; }\r\n    }\r\n    return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n    for (var ar = [], i = 0; i < arguments.length; i++)\r\n        ar = ar.concat(__read(arguments[i]));\r\n    return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n    for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n    for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n        for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n            r[k] = a[j];\r\n    return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n    if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n        if (ar || !(i in from)) {\r\n            if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n            ar[i] = from[i];\r\n        }\r\n    }\r\n    return to.concat(ar || from);\r\n}\r\n\r\nexport function __await(v) {\r\n    return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n    if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n    var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n    return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n    function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n    function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n    function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n    function fulfill(value) { resume(\"next\", value); }\r\n    function reject(value) { resume(\"throw\", value); }\r\n    function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n    var i, p;\r\n    return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n    function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n    if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n    var m = o[Symbol.asyncIterator], i;\r\n    return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n    function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n    function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n    if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n    return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n    Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n    o[\"default\"] = v;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n    if (mod && mod.__esModule) return mod;\r\n    var result = {};\r\n    if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n    __setModuleDefault(result, mod);\r\n    return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n    return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n    if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n    if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n    return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n    if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n    if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n    if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n    return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n","/////////////////////////////////////////////////////////////////////////////////\n/* UAParser.js v0.7.37\n   Copyright © 2012-2021 Faisal Salman <f@faisalman.com>\n   MIT License *//*\n   Detect Browser, Engine, OS, CPU, and Device type/model from User-Agent data.\n   Supports browser & node.js environment. \n   Demo   : https://faisalman.github.io/ua-parser-js\n   Source : https://github.com/faisalman/ua-parser-js */\n/////////////////////////////////////////////////////////////////////////////////\n\n(function (window, undefined) {\n\n    'use strict';\n\n    //////////////\n    // Constants\n    /////////////\n\n\n    var LIBVERSION  = '0.7.37',\n        EMPTY       = '',\n        UNKNOWN     = '?',\n        FUNC_TYPE   = 'function',\n        UNDEF_TYPE  = 'undefined',\n        OBJ_TYPE    = 'object',\n        STR_TYPE    = 'string',\n        MAJOR       = 'major',\n        MODEL       = 'model',\n        NAME        = 'name',\n        TYPE        = 'type',\n        VENDOR      = 'vendor',\n        VERSION     = 'version',\n        ARCHITECTURE= 'architecture',\n        CONSOLE     = 'console',\n        MOBILE      = 'mobile',\n        TABLET      = 'tablet',\n        SMARTTV     = 'smarttv',\n        WEARABLE    = 'wearable',\n        EMBEDDED    = 'embedded',\n        UA_MAX_LENGTH = 500;\n\n    var AMAZON  = 'Amazon',\n        APPLE   = 'Apple',\n        ASUS    = 'ASUS',\n        BLACKBERRY = 'BlackBerry',\n        BROWSER = 'Browser',\n        CHROME  = 'Chrome',\n        EDGE    = 'Edge',\n        FIREFOX = 'Firefox',\n        GOOGLE  = 'Google',\n        HUAWEI  = 'Huawei',\n        LG      = 'LG',\n        MICROSOFT = 'Microsoft',\n        MOTOROLA  = 'Motorola',\n        OPERA   = 'Opera',\n        SAMSUNG = 'Samsung',\n        SHARP   = 'Sharp',\n        SONY    = 'Sony',\n        XIAOMI  = 'Xiaomi',\n        ZEBRA   = 'Zebra',\n        FACEBOOK    = 'Facebook',\n        CHROMIUM_OS = 'Chromium OS',\n        MAC_OS  = 'Mac OS';\n\n    ///////////\n    // Helper\n    //////////\n\n    var extend = function (regexes, extensions) {\n            var mergedRegexes = {};\n            for (var i in regexes) {\n                if (extensions[i] && extensions[i].length % 2 === 0) {\n                    mergedRegexes[i] = extensions[i].concat(regexes[i]);\n                } else {\n                    mergedRegexes[i] = regexes[i];\n                }\n            }\n            return mergedRegexes;\n        },\n        enumerize = function (arr) {\n            var enums = {};\n            for (var i=0; i<arr.length; i++) {\n                enums[arr[i].toUpperCase()] = arr[i];\n            }\n            return enums;\n        },\n        has = function (str1, str2) {\n            return typeof str1 === STR_TYPE ? lowerize(str2).indexOf(lowerize(str1)) !== -1 : false;\n        },\n        lowerize = function (str) {\n            return str.toLowerCase();\n        },\n        majorize = function (version) {\n            return typeof(version) === STR_TYPE ? version.replace(/[^\\d\\.]/g, EMPTY).split('.')[0] : undefined;\n        },\n        trim = function (str, len) {\n            if (typeof(str) === STR_TYPE) {\n                str = str.replace(/^\\s\\s*/, EMPTY);\n                return typeof(len) === UNDEF_TYPE ? str : str.substring(0, UA_MAX_LENGTH);\n            }\n    };\n\n    ///////////////\n    // Map helper\n    //////////////\n\n    var rgxMapper = function (ua, arrays) {\n\n            var i = 0, j, k, p, q, matches, match;\n\n            // loop through all regexes maps\n            while (i < arrays.length && !matches) {\n\n                var regex = arrays[i],       // even sequence (0,2,4,..)\n                    props = arrays[i + 1];   // odd sequence (1,3,5,..)\n                j = k = 0;\n\n                // try matching uastring with regexes\n                while (j < regex.length && !matches) {\n\n                    if (!regex[j]) { break; }\n                    matches = regex[j++].exec(ua);\n\n                    if (!!matches) {\n                        for (p = 0; p < props.length; p++) {\n                            match = matches[++k];\n                            q = props[p];\n                            // check if given property is actually array\n                            if (typeof q === OBJ_TYPE && q.length > 0) {\n                                if (q.length === 2) {\n                                    if (typeof q[1] == FUNC_TYPE) {\n                                        // assign modified match\n                                        this[q[0]] = q[1].call(this, match);\n                                    } else {\n                                        // assign given value, ignore regex match\n                                        this[q[0]] = q[1];\n                                    }\n                                } else if (q.length === 3) {\n                                    // check whether function or regex\n                                    if (typeof q[1] === FUNC_TYPE && !(q[1].exec && q[1].test)) {\n                                        // call function (usually string mapper)\n                                        this[q[0]] = match ? q[1].call(this, match, q[2]) : undefined;\n                                    } else {\n                                        // sanitize match using given regex\n                                        this[q[0]] = match ? match.replace(q[1], q[2]) : undefined;\n                                    }\n                                } else if (q.length === 4) {\n                                        this[q[0]] = match ? q[3].call(this, match.replace(q[1], q[2])) : undefined;\n                                }\n                            } else {\n                                this[q] = match ? match : undefined;\n                            }\n                        }\n                    }\n                }\n                i += 2;\n            }\n        },\n\n        strMapper = function (str, map) {\n\n            for (var i in map) {\n                // check if current value is array\n                if (typeof map[i] === OBJ_TYPE && map[i].length > 0) {\n                    for (var j = 0; j < map[i].length; j++) {\n                        if (has(map[i][j], str)) {\n                            return (i === UNKNOWN) ? undefined : i;\n                        }\n                    }\n                } else if (has(map[i], str)) {\n                    return (i === UNKNOWN) ? undefined : i;\n                }\n            }\n            return str;\n    };\n\n    ///////////////\n    // String map\n    //////////////\n\n    // Safari < 3.0\n    var oldSafariMap = {\n            '1.0'   : '/8',\n            '1.2'   : '/1',\n            '1.3'   : '/3',\n            '2.0'   : '/412',\n            '2.0.2' : '/416',\n            '2.0.3' : '/417',\n            '2.0.4' : '/419',\n            '?'     : '/'\n        },\n        windowsVersionMap = {\n            'ME'        : '4.90',\n            'NT 3.11'   : 'NT3.51',\n            'NT 4.0'    : 'NT4.0',\n            '2000'      : 'NT 5.0',\n            'XP'        : ['NT 5.1', 'NT 5.2'],\n            'Vista'     : 'NT 6.0',\n            '7'         : 'NT 6.1',\n            '8'         : 'NT 6.2',\n            '8.1'       : 'NT 6.3',\n            '10'        : ['NT 6.4', 'NT 10.0'],\n            'RT'        : 'ARM'\n    };\n\n    //////////////\n    // Regex map\n    /////////////\n\n    var regexes = {\n\n        browser : [[\n\n            /\\b(?:crmo|crios)\\/([\\w\\.]+)/i                                      // Chrome for Android/iOS\n            ], [VERSION, [NAME, 'Chrome']], [\n            /edg(?:e|ios|a)?\\/([\\w\\.]+)/i                                       // Microsoft Edge\n            ], [VERSION, [NAME, 'Edge']], [\n\n            // Presto based\n            /(opera mini)\\/([-\\w\\.]+)/i,                                        // Opera Mini\n            /(opera [mobiletab]{3,6})\\b.+version\\/([-\\w\\.]+)/i,                 // Opera Mobi/Tablet\n            /(opera)(?:.+version\\/|[\\/ ]+)([\\w\\.]+)/i                           // Opera\n            ], [NAME, VERSION], [\n            /opios[\\/ ]+([\\w\\.]+)/i                                             // Opera mini on iphone >= 8.0\n            ], [VERSION, [NAME, OPERA+' Mini']], [\n            /\\bopr\\/([\\w\\.]+)/i                                                 // Opera Webkit\n            ], [VERSION, [NAME, OPERA]], [\n\n            // Mixed\n            /\\bb[ai]*d(?:uhd|[ub]*[aekoprswx]{5,6})[\\/ ]?([\\w\\.]+)/i            // Baidu\n            ], [VERSION, [NAME, 'Baidu']], [\n            /(kindle)\\/([\\w\\.]+)/i,                                             // Kindle\n            /(lunascape|maxthon|netfront|jasmine|blazer)[\\/ ]?([\\w\\.]*)/i,      // Lunascape/Maxthon/Netfront/Jasmine/Blazer\n            // Trident based\n            /(avant|iemobile|slim)\\s?(?:browser)?[\\/ ]?([\\w\\.]*)/i,             // Avant/IEMobile/SlimBrowser\n            /(?:ms|\\()(ie) ([\\w\\.]+)/i,                                         // Internet Explorer\n\n            // Webkit/KHTML based                                               // Flock/RockMelt/Midori/Epiphany/Silk/Skyfire/Bolt/Iron/Iridium/PhantomJS/Bowser/QupZilla/Falkon\n            /(flock|rockmelt|midori|epiphany|silk|skyfire|bolt|iron|vivaldi|iridium|phantomjs|bowser|quark|qupzilla|falkon|rekonq|puffin|brave|whale(?!.+naver)|qqbrowserlite|qq|duckduckgo)\\/([-\\w\\.]+)/i,\n                                                                                // Rekonq/Puffin/Brave/Whale/QQBrowserLite/QQ, aka ShouQ\n            /(heytap|ovi)browser\\/([\\d\\.]+)/i,                                  // Heytap/Ovi\n            /(weibo)__([\\d\\.]+)/i                                               // Weibo\n            ], [NAME, VERSION], [\n            /(?:\\buc? ?browser|(?:juc.+)ucweb)[\\/ ]?([\\w\\.]+)/i                 // UCBrowser\n            ], [VERSION, [NAME, 'UC'+BROWSER]], [\n            /microm.+\\bqbcore\\/([\\w\\.]+)/i,                                     // WeChat Desktop for Windows Built-in Browser\n            /\\bqbcore\\/([\\w\\.]+).+microm/i,\n            /micromessenger\\/([\\w\\.]+)/i                                        // WeChat\n            ], [VERSION, [NAME, 'WeChat']], [\n            /konqueror\\/([\\w\\.]+)/i                                             // Konqueror\n            ], [VERSION, [NAME, 'Konqueror']], [\n            /trident.+rv[: ]([\\w\\.]{1,9})\\b.+like gecko/i                       // IE11\n            ], [VERSION, [NAME, 'IE']], [\n            /ya(?:search)?browser\\/([\\w\\.]+)/i                                  // Yandex\n            ], [VERSION, [NAME, 'Yandex']], [\n            /slbrowser\\/([\\w\\.]+)/i                                             // Smart Lenovo Browser\n            ], [VERSION, [NAME, 'Smart Lenovo '+BROWSER]], [\n            /(avast|avg)\\/([\\w\\.]+)/i                                           // Avast/AVG Secure Browser\n            ], [[NAME, /(.+)/, '$1 Secure '+BROWSER], VERSION], [\n            /\\bfocus\\/([\\w\\.]+)/i                                               // Firefox Focus\n            ], [VERSION, [NAME, FIREFOX+' Focus']], [\n            /\\bopt\\/([\\w\\.]+)/i                                                 // Opera Touch\n            ], [VERSION, [NAME, OPERA+' Touch']], [\n            /coc_coc\\w+\\/([\\w\\.]+)/i                                            // Coc Coc Browser\n            ], [VERSION, [NAME, 'Coc Coc']], [\n            /dolfin\\/([\\w\\.]+)/i                                                // Dolphin\n            ], [VERSION, [NAME, 'Dolphin']], [\n            /coast\\/([\\w\\.]+)/i                                                 // Opera Coast\n            ], [VERSION, [NAME, OPERA+' Coast']], [\n            /miuibrowser\\/([\\w\\.]+)/i                                           // MIUI Browser\n            ], [VERSION, [NAME, 'MIUI '+BROWSER]], [\n            /fxios\\/([-\\w\\.]+)/i                                                // Firefox for iOS\n            ], [VERSION, [NAME, FIREFOX]], [\n            /\\bqihu|(qi?ho?o?|360)browser/i                                     // 360\n            ], [[NAME, '360 ' + BROWSER]], [\n            /(oculus|sailfish|huawei|vivo)browser\\/([\\w\\.]+)/i\n            ], [[NAME, /(.+)/, '$1 ' + BROWSER], VERSION], [                    // Oculus/Sailfish/HuaweiBrowser/VivoBrowser\n            /samsungbrowser\\/([\\w\\.]+)/i                                        // Samsung Internet\n            ], [VERSION, [NAME, SAMSUNG + ' Internet']], [\n            /(comodo_dragon)\\/([\\w\\.]+)/i                                       // Comodo Dragon\n            ], [[NAME, /_/g, ' '], VERSION], [\n            /metasr[\\/ ]?([\\d\\.]+)/i                                            // Sogou Explorer\n            ], [VERSION, [NAME, 'Sogou Explorer']], [\n            /(sogou)mo\\w+\\/([\\d\\.]+)/i                                          // Sogou Mobile\n            ], [[NAME, 'Sogou Mobile'], VERSION], [\n            /(electron)\\/([\\w\\.]+) safari/i,                                    // Electron-based App\n            /(tesla)(?: qtcarbrowser|\\/(20\\d\\d\\.[-\\w\\.]+))/i,                   // Tesla\n            /m?(qqbrowser|2345Explorer)[\\/ ]?([\\w\\.]+)/i                        // QQBrowser/2345 Browser\n            ], [NAME, VERSION], [\n            /(lbbrowser)/i,                                                     // LieBao Browser\n            /\\[(linkedin)app\\]/i                                                // LinkedIn App for iOS & Android\n            ], [NAME], [\n\n            // WebView\n            /((?:fban\\/fbios|fb_iab\\/fb4a)(?!.+fbav)|;fbav\\/([\\w\\.]+);)/i       // Facebook App for iOS & Android\n            ], [[NAME, FACEBOOK], VERSION], [\n            /(Klarna)\\/([\\w\\.]+)/i,                                             // Klarna Shopping Browser for iOS & Android\n            /(kakao(?:talk|story))[\\/ ]([\\w\\.]+)/i,                             // Kakao App\n            /(naver)\\(.*?(\\d+\\.[\\w\\.]+).*\\)/i,                                  // Naver InApp\n            /safari (line)\\/([\\w\\.]+)/i,                                        // Line App for iOS\n            /\\b(line)\\/([\\w\\.]+)\\/iab/i,                                        // Line App for Android\n            /(alipay)client\\/([\\w\\.]+)/i,                                       // Alipay\n            /(chromium|instagram|snapchat)[\\/ ]([-\\w\\.]+)/i                     // Chromium/Instagram/Snapchat\n            ], [NAME, VERSION], [\n            /\\bgsa\\/([\\w\\.]+) .*safari\\//i                                      // Google Search Appliance on iOS\n            ], [VERSION, [NAME, 'GSA']], [\n            /musical_ly(?:.+app_?version\\/|_)([\\w\\.]+)/i                        // TikTok\n            ], [VERSION, [NAME, 'TikTok']], [\n\n            /headlesschrome(?:\\/([\\w\\.]+)| )/i                                  // Chrome Headless\n            ], [VERSION, [NAME, CHROME+' Headless']], [\n\n            / wv\\).+(chrome)\\/([\\w\\.]+)/i                                       // Chrome WebView\n            ], [[NAME, CHROME+' WebView'], VERSION], [\n\n            /droid.+ version\\/([\\w\\.]+)\\b.+(?:mobile safari|safari)/i           // Android Browser\n            ], [VERSION, [NAME, 'Android '+BROWSER]], [\n\n            /(chrome|omniweb|arora|[tizenoka]{5} ?browser)\\/v?([\\w\\.]+)/i       // Chrome/OmniWeb/Arora/Tizen/Nokia\n            ], [NAME, VERSION], [\n\n            /version\\/([\\w\\.\\,]+) .*mobile\\/\\w+ (safari)/i                      // Mobile Safari\n            ], [VERSION, [NAME, 'Mobile Safari']], [\n            /version\\/([\\w(\\.|\\,)]+) .*(mobile ?safari|safari)/i                // Safari & Safari Mobile\n            ], [VERSION, NAME], [\n            /webkit.+?(mobile ?safari|safari)(\\/[\\w\\.]+)/i                      // Safari < 3.0\n            ], [NAME, [VERSION, strMapper, oldSafariMap]], [\n\n            /(webkit|khtml)\\/([\\w\\.]+)/i\n            ], [NAME, VERSION], [\n\n            // Gecko based\n            /(navigator|netscape\\d?)\\/([-\\w\\.]+)/i                              // Netscape\n            ], [[NAME, 'Netscape'], VERSION], [\n            /mobile vr; rv:([\\w\\.]+)\\).+firefox/i                               // Firefox Reality\n            ], [VERSION, [NAME, FIREFOX+' Reality']], [\n            /ekiohf.+(flow)\\/([\\w\\.]+)/i,                                       // Flow\n            /(swiftfox)/i,                                                      // Swiftfox\n            /(icedragon|iceweasel|camino|chimera|fennec|maemo browser|minimo|conkeror|klar)[\\/ ]?([\\w\\.\\+]+)/i,\n                                                                                // IceDragon/Iceweasel/Camino/Chimera/Fennec/Maemo/Minimo/Conkeror/Klar\n            /(seamonkey|k-meleon|icecat|iceape|firebird|phoenix|palemoon|basilisk|waterfox)\\/([-\\w\\.]+)$/i,\n                                                                                // Firefox/SeaMonkey/K-Meleon/IceCat/IceApe/Firebird/Phoenix\n            /(firefox)\\/([\\w\\.]+)/i,                                            // Other Firefox-based\n            /(mozilla)\\/([\\w\\.]+) .+rv\\:.+gecko\\/\\d+/i,                         // Mozilla\n\n            // Other\n            /(polaris|lynx|dillo|icab|doris|amaya|w3m|netsurf|sleipnir|obigo|mosaic|(?:go|ice|up)[\\. ]?browser)[-\\/ ]?v?([\\w\\.]+)/i,\n                                                                                // Polaris/Lynx/Dillo/iCab/Doris/Amaya/w3m/NetSurf/Sleipnir/Obigo/Mosaic/Go/ICE/UP.Browser\n            /(links) \\(([\\w\\.]+)/i,                                             // Links\n            /panasonic;(viera)/i                                                // Panasonic Viera\n            ], [NAME, VERSION], [\n            \n            /(cobalt)\\/([\\w\\.]+)/i                                              // Cobalt\n            ], [NAME, [VERSION, /master.|lts./, \"\"]]\n        ],\n\n        cpu : [[\n\n            /(?:(amd|x(?:(?:86|64)[-_])?|wow|win)64)[;\\)]/i                     // AMD64 (x64)\n            ], [[ARCHITECTURE, 'amd64']], [\n\n            /(ia32(?=;))/i                                                      // IA32 (quicktime)\n            ], [[ARCHITECTURE, lowerize]], [\n\n            /((?:i[346]|x)86)[;\\)]/i                                            // IA32 (x86)\n            ], [[ARCHITECTURE, 'ia32']], [\n\n            /\\b(aarch64|arm(v?8e?l?|_?64))\\b/i                                 // ARM64\n            ], [[ARCHITECTURE, 'arm64']], [\n\n            /\\b(arm(?:v[67])?ht?n?[fl]p?)\\b/i                                   // ARMHF\n            ], [[ARCHITECTURE, 'armhf']], [\n\n            // PocketPC mistakenly identified as PowerPC\n            /windows (ce|mobile); ppc;/i\n            ], [[ARCHITECTURE, 'arm']], [\n\n            /((?:ppc|powerpc)(?:64)?)(?: mac|;|\\))/i                            // PowerPC\n            ], [[ARCHITECTURE, /ower/, EMPTY, lowerize]], [\n\n            /(sun4\\w)[;\\)]/i                                                    // SPARC\n            ], [[ARCHITECTURE, 'sparc']], [\n\n            /((?:avr32|ia64(?=;))|68k(?=\\))|\\barm(?=v(?:[1-7]|[5-7]1)l?|;|eabi)|(?=atmel )avr|(?:irix|mips|sparc)(?:64)?\\b|pa-risc)/i\n                                                                                // IA64, 68K, ARM/64, AVR/32, IRIX/64, MIPS/64, SPARC/64, PA-RISC\n            ], [[ARCHITECTURE, lowerize]]\n        ],\n\n        device : [[\n\n            //////////////////////////\n            // MOBILES & TABLETS\n            /////////////////////////\n\n            // Samsung\n            /\\b(sch-i[89]0\\d|shw-m380s|sm-[ptx]\\w{2,4}|gt-[pn]\\d{2,4}|sgh-t8[56]9|nexus 10)/i\n            ], [MODEL, [VENDOR, SAMSUNG], [TYPE, TABLET]], [\n            /\\b((?:s[cgp]h|gt|sm)-\\w+|sc[g-]?[\\d]+a?|galaxy nexus)/i,\n            /samsung[- ]([-\\w]+)/i,\n            /sec-(sgh\\w+)/i\n            ], [MODEL, [VENDOR, SAMSUNG], [TYPE, MOBILE]], [\n\n            // Apple\n            /(?:\\/|\\()(ip(?:hone|od)[\\w, ]*)(?:\\/|;)/i                          // iPod/iPhone\n            ], [MODEL, [VENDOR, APPLE], [TYPE, MOBILE]], [\n            /\\((ipad);[-\\w\\),; ]+apple/i,                                       // iPad\n            /applecoremedia\\/[\\w\\.]+ \\((ipad)/i,\n            /\\b(ipad)\\d\\d?,\\d\\d?[;\\]].+ios/i\n            ], [MODEL, [VENDOR, APPLE], [TYPE, TABLET]], [\n            /(macintosh);/i\n            ], [MODEL, [VENDOR, APPLE]], [\n\n            // Sharp\n            /\\b(sh-?[altvz]?\\d\\d[a-ekm]?)/i\n            ], [MODEL, [VENDOR, SHARP], [TYPE, MOBILE]], [\n\n            // Huawei\n            /\\b((?:ag[rs][23]?|bah2?|sht?|btv)-a?[lw]\\d{2})\\b(?!.+d\\/s)/i\n            ], [MODEL, [VENDOR, HUAWEI], [TYPE, TABLET]], [\n            /(?:huawei|honor)([-\\w ]+)[;\\)]/i,\n            /\\b(nexus 6p|\\w{2,4}e?-[atu]?[ln][\\dx][012359c][adn]?)\\b(?!.+d\\/s)/i\n            ], [MODEL, [VENDOR, HUAWEI], [TYPE, MOBILE]], [\n\n            // Xiaomi\n            /\\b(poco[\\w ]+|m2\\d{3}j\\d\\d[a-z]{2})(?: bui|\\))/i,                  // Xiaomi POCO\n            /\\b; (\\w+) build\\/hm\\1/i,                                           // Xiaomi Hongmi 'numeric' models\n            /\\b(hm[-_ ]?note?[_ ]?(?:\\d\\w)?) bui/i,                             // Xiaomi Hongmi\n            /\\b(redmi[\\-_ ]?(?:note|k)?[\\w_ ]+)(?: bui|\\))/i,                   // Xiaomi Redmi\n            /oid[^\\)]+; (m?[12][0-389][01]\\w{3,6}[c-y])( bui|; wv|\\))/i,        // Xiaomi Redmi 'numeric' models\n            /\\b(mi[-_ ]?(?:a\\d|one|one[_ ]plus|note lte|max|cc)?[_ ]?(?:\\d?\\w?)[_ ]?(?:plus|se|lite)?)(?: bui|\\))/i // Xiaomi Mi\n            ], [[MODEL, /_/g, ' '], [VENDOR, XIAOMI], [TYPE, MOBILE]], [\n            /oid[^\\)]+; (2\\d{4}(283|rpbf)[cgl])( bui|\\))/i,                     // Redmi Pad\n            /\\b(mi[-_ ]?(?:pad)(?:[\\w_ ]+))(?: bui|\\))/i                        // Mi Pad tablets\n            ],[[MODEL, /_/g, ' '], [VENDOR, XIAOMI], [TYPE, TABLET]], [\n\n            // OPPO\n            /; (\\w+) bui.+ oppo/i,\n            /\\b(cph[12]\\d{3}|p(?:af|c[al]|d\\w|e[ar])[mt]\\d0|x9007|a101op)\\b/i\n            ], [MODEL, [VENDOR, 'OPPO'], [TYPE, MOBILE]], [\n\n            // Vivo\n            /vivo (\\w+)(?: bui|\\))/i,\n            /\\b(v[12]\\d{3}\\w?[at])(?: bui|;)/i\n            ], [MODEL, [VENDOR, 'Vivo'], [TYPE, MOBILE]], [\n\n            // Realme\n            /\\b(rmx[1-3]\\d{3})(?: bui|;|\\))/i\n            ], [MODEL, [VENDOR, 'Realme'], [TYPE, MOBILE]], [\n\n            // Motorola\n            /\\b(milestone|droid(?:[2-4x]| (?:bionic|x2|pro|razr))?:?( 4g)?)\\b[\\w ]+build\\//i,\n            /\\bmot(?:orola)?[- ](\\w*)/i,\n            /((?:moto[\\w\\(\\) ]+|xt\\d{3,4}|nexus 6)(?= bui|\\)))/i\n            ], [MODEL, [VENDOR, MOTOROLA], [TYPE, MOBILE]], [\n            /\\b(mz60\\d|xoom[2 ]{0,2}) build\\//i\n            ], [MODEL, [VENDOR, MOTOROLA], [TYPE, TABLET]], [\n\n            // LG\n            /((?=lg)?[vl]k\\-?\\d{3}) bui| 3\\.[-\\w; ]{10}lg?-([06cv9]{3,4})/i\n            ], [MODEL, [VENDOR, LG], [TYPE, TABLET]], [\n            /(lm(?:-?f100[nv]?|-[\\w\\.]+)(?= bui|\\))|nexus [45])/i,\n            /\\blg[-e;\\/ ]+((?!browser|netcast|android tv)\\w+)/i,\n            /\\blg-?([\\d\\w]+) bui/i\n            ], [MODEL, [VENDOR, LG], [TYPE, MOBILE]], [\n\n            // Lenovo\n            /(ideatab[-\\w ]+)/i,\n            /lenovo ?(s[56]000[-\\w]+|tab(?:[\\w ]+)|yt[-\\d\\w]{6}|tb[-\\d\\w]{6})/i\n            ], [MODEL, [VENDOR, 'Lenovo'], [TYPE, TABLET]], [\n\n            // Nokia\n            /(?:maemo|nokia).*(n900|lumia \\d+)/i,\n            /nokia[-_ ]?([-\\w\\.]*)/i\n            ], [[MODEL, /_/g, ' '], [VENDOR, 'Nokia'], [TYPE, MOBILE]], [\n\n            // Google\n            /(pixel c)\\b/i                                                      // Google Pixel C\n            ], [MODEL, [VENDOR, GOOGLE], [TYPE, TABLET]], [\n            /droid.+; (pixel[\\daxl ]{0,6})(?: bui|\\))/i                         // Google Pixel\n            ], [MODEL, [VENDOR, GOOGLE], [TYPE, MOBILE]], [\n\n            // Sony\n            /droid.+ (a?\\d[0-2]{2}so|[c-g]\\d{4}|so[-gl]\\w+|xq-a\\w[4-7][12])(?= bui|\\).+chrome\\/(?![1-6]{0,1}\\d\\.))/i\n            ], [MODEL, [VENDOR, SONY], [TYPE, MOBILE]], [\n            /sony tablet [ps]/i,\n            /\\b(?:sony)?sgp\\w+(?: bui|\\))/i\n            ], [[MODEL, 'Xperia Tablet'], [VENDOR, SONY], [TYPE, TABLET]], [\n\n            // OnePlus\n            / (kb2005|in20[12]5|be20[12][59])\\b/i,\n            /(?:one)?(?:plus)? (a\\d0\\d\\d)(?: b|\\))/i\n            ], [MODEL, [VENDOR, 'OnePlus'], [TYPE, MOBILE]], [\n\n            // Amazon\n            /(alexa)webm/i,\n            /(kf[a-z]{2}wi|aeo[c-r]{2})( bui|\\))/i,                             // Kindle Fire without Silk / Echo Show\n            /(kf[a-z]+)( bui|\\)).+silk\\//i                                      // Kindle Fire HD\n            ], [MODEL, [VENDOR, AMAZON], [TYPE, TABLET]], [\n            /((?:sd|kf)[0349hijorstuw]+)( bui|\\)).+silk\\//i                     // Fire Phone\n            ], [[MODEL, /(.+)/g, 'Fire Phone $1'], [VENDOR, AMAZON], [TYPE, MOBILE]], [\n\n            // BlackBerry\n            /(playbook);[-\\w\\),; ]+(rim)/i                                      // BlackBerry PlayBook\n            ], [MODEL, VENDOR, [TYPE, TABLET]], [\n            /\\b((?:bb[a-f]|st[hv])100-\\d)/i,\n            /\\(bb10; (\\w+)/i                                                    // BlackBerry 10\n            ], [MODEL, [VENDOR, BLACKBERRY], [TYPE, MOBILE]], [\n\n            // Asus\n            /(?:\\b|asus_)(transfo[prime ]{4,10} \\w+|eeepc|slider \\w+|nexus 7|padfone|p00[cj])/i\n            ], [MODEL, [VENDOR, ASUS], [TYPE, TABLET]], [\n            / (z[bes]6[027][012][km][ls]|zenfone \\d\\w?)\\b/i\n            ], [MODEL, [VENDOR, ASUS], [TYPE, MOBILE]], [\n\n            // HTC\n            /(nexus 9)/i                                                        // HTC Nexus 9\n            ], [MODEL, [VENDOR, 'HTC'], [TYPE, TABLET]], [\n            /(htc)[-;_ ]{1,2}([\\w ]+(?=\\)| bui)|\\w+)/i,                         // HTC\n\n            // ZTE\n            /(zte)[- ]([\\w ]+?)(?: bui|\\/|\\))/i,\n            /(alcatel|geeksphone|nexian|panasonic(?!(?:;|\\.))|sony(?!-bra))[-_ ]?([-\\w]*)/i         // Alcatel/GeeksPhone/Nexian/Panasonic/Sony\n            ], [VENDOR, [MODEL, /_/g, ' '], [TYPE, MOBILE]], [\n\n            // Acer\n            /droid.+; ([ab][1-7]-?[0178a]\\d\\d?)/i\n            ], [MODEL, [VENDOR, 'Acer'], [TYPE, TABLET]], [\n\n            // Meizu\n            /droid.+; (m[1-5] note) bui/i,\n            /\\bmz-([-\\w]{2,})/i\n            ], [MODEL, [VENDOR, 'Meizu'], [TYPE, MOBILE]], [\n                \n            // Ulefone\n            /; ((?:power )?armor(?:[\\w ]{0,8}))(?: bui|\\))/i\n            ], [MODEL, [VENDOR, 'Ulefone'], [TYPE, MOBILE]], [\n\n            // MIXED\n            /(blackberry|benq|palm(?=\\-)|sonyericsson|acer|asus|dell|meizu|motorola|polytron|infinix|tecno)[-_ ]?([-\\w]*)/i,\n                                                                                // BlackBerry/BenQ/Palm/Sony-Ericsson/Acer/Asus/Dell/Meizu/Motorola/Polytron\n            /(hp) ([\\w ]+\\w)/i,                                                 // HP iPAQ\n            /(asus)-?(\\w+)/i,                                                   // Asus\n            /(microsoft); (lumia[\\w ]+)/i,                                      // Microsoft Lumia\n            /(lenovo)[-_ ]?([-\\w]+)/i,                                          // Lenovo\n            /(jolla)/i,                                                         // Jolla\n            /(oppo) ?([\\w ]+) bui/i                                             // OPPO\n            ], [VENDOR, MODEL, [TYPE, MOBILE]], [\n\n            /(kobo)\\s(ereader|touch)/i,                                         // Kobo\n            /(archos) (gamepad2?)/i,                                            // Archos\n            /(hp).+(touchpad(?!.+tablet)|tablet)/i,                             // HP TouchPad\n            /(kindle)\\/([\\w\\.]+)/i,                                             // Kindle\n            /(nook)[\\w ]+build\\/(\\w+)/i,                                        // Nook\n            /(dell) (strea[kpr\\d ]*[\\dko])/i,                                   // Dell Streak\n            /(le[- ]+pan)[- ]+(\\w{1,9}) bui/i,                                  // Le Pan Tablets\n            /(trinity)[- ]*(t\\d{3}) bui/i,                                      // Trinity Tablets\n            /(gigaset)[- ]+(q\\w{1,9}) bui/i,                                    // Gigaset Tablets\n            /(vodafone) ([\\w ]+)(?:\\)| bui)/i                                   // Vodafone\n            ], [VENDOR, MODEL, [TYPE, TABLET]], [\n\n            /(surface duo)/i                                                    // Surface Duo\n            ], [MODEL, [VENDOR, MICROSOFT], [TYPE, TABLET]], [\n            /droid [\\d\\.]+; (fp\\du?)(?: b|\\))/i                                 // Fairphone\n            ], [MODEL, [VENDOR, 'Fairphone'], [TYPE, MOBILE]], [\n            /(u304aa)/i                                                         // AT&T\n            ], [MODEL, [VENDOR, 'AT&T'], [TYPE, MOBILE]], [\n            /\\bsie-(\\w*)/i                                                      // Siemens\n            ], [MODEL, [VENDOR, 'Siemens'], [TYPE, MOBILE]], [\n            /\\b(rct\\w+) b/i                                                     // RCA Tablets\n            ], [MODEL, [VENDOR, 'RCA'], [TYPE, TABLET]], [\n            /\\b(venue[\\d ]{2,7}) b/i                                            // Dell Venue Tablets\n            ], [MODEL, [VENDOR, 'Dell'], [TYPE, TABLET]], [\n            /\\b(q(?:mv|ta)\\w+) b/i                                              // Verizon Tablet\n            ], [MODEL, [VENDOR, 'Verizon'], [TYPE, TABLET]], [\n            /\\b(?:barnes[& ]+noble |bn[rt])([\\w\\+ ]*) b/i                       // Barnes & Noble Tablet\n            ], [MODEL, [VENDOR, 'Barnes & Noble'], [TYPE, TABLET]], [\n            /\\b(tm\\d{3}\\w+) b/i\n            ], [MODEL, [VENDOR, 'NuVision'], [TYPE, TABLET]], [\n            /\\b(k88) b/i                                                        // ZTE K Series Tablet\n            ], [MODEL, [VENDOR, 'ZTE'], [TYPE, TABLET]], [\n            /\\b(nx\\d{3}j) b/i                                                   // ZTE Nubia\n            ], [MODEL, [VENDOR, 'ZTE'], [TYPE, MOBILE]], [\n            /\\b(gen\\d{3}) b.+49h/i                                              // Swiss GEN Mobile\n            ], [MODEL, [VENDOR, 'Swiss'], [TYPE, MOBILE]], [\n            /\\b(zur\\d{3}) b/i                                                   // Swiss ZUR Tablet\n            ], [MODEL, [VENDOR, 'Swiss'], [TYPE, TABLET]], [\n            /\\b((zeki)?tb.*\\b) b/i                                              // Zeki Tablets\n            ], [MODEL, [VENDOR, 'Zeki'], [TYPE, TABLET]], [\n            /\\b([yr]\\d{2}) b/i,\n            /\\b(dragon[- ]+touch |dt)(\\w{5}) b/i                                // Dragon Touch Tablet\n            ], [[VENDOR, 'Dragon Touch'], MODEL, [TYPE, TABLET]], [\n            /\\b(ns-?\\w{0,9}) b/i                                                // Insignia Tablets\n            ], [MODEL, [VENDOR, 'Insignia'], [TYPE, TABLET]], [\n            /\\b((nxa|next)-?\\w{0,9}) b/i                                        // NextBook Tablets\n            ], [MODEL, [VENDOR, 'NextBook'], [TYPE, TABLET]], [\n            /\\b(xtreme\\_)?(v(1[045]|2[015]|[3469]0|7[05])) b/i                  // Voice Xtreme Phones\n            ], [[VENDOR, 'Voice'], MODEL, [TYPE, MOBILE]], [\n            /\\b(lvtel\\-)?(v1[12]) b/i                                           // LvTel Phones\n            ], [[VENDOR, 'LvTel'], MODEL, [TYPE, MOBILE]], [\n            /\\b(ph-1) /i                                                        // Essential PH-1\n            ], [MODEL, [VENDOR, 'Essential'], [TYPE, MOBILE]], [\n            /\\b(v(100md|700na|7011|917g).*\\b) b/i                               // Envizen Tablets\n            ], [MODEL, [VENDOR, 'Envizen'], [TYPE, TABLET]], [\n            /\\b(trio[-\\w\\. ]+) b/i                                              // MachSpeed Tablets\n            ], [MODEL, [VENDOR, 'MachSpeed'], [TYPE, TABLET]], [\n            /\\btu_(1491) b/i                                                    // Rotor Tablets\n            ], [MODEL, [VENDOR, 'Rotor'], [TYPE, TABLET]], [\n            /(shield[\\w ]+) b/i                                                 // Nvidia Shield Tablets\n            ], [MODEL, [VENDOR, 'Nvidia'], [TYPE, TABLET]], [\n            /(sprint) (\\w+)/i                                                   // Sprint Phones\n            ], [VENDOR, MODEL, [TYPE, MOBILE]], [\n            /(kin\\.[onetw]{3})/i                                                // Microsoft Kin\n            ], [[MODEL, /\\./g, ' '], [VENDOR, MICROSOFT], [TYPE, MOBILE]], [\n            /droid.+; (cc6666?|et5[16]|mc[239][23]x?|vc8[03]x?)\\)/i             // Zebra\n            ], [MODEL, [VENDOR, ZEBRA], [TYPE, TABLET]], [\n            /droid.+; (ec30|ps20|tc[2-8]\\d[kx])\\)/i\n            ], [MODEL, [VENDOR, ZEBRA], [TYPE, MOBILE]], [\n\n            ///////////////////\n            // SMARTTVS\n            ///////////////////\n\n            /smart-tv.+(samsung)/i                                              // Samsung\n            ], [VENDOR, [TYPE, SMARTTV]], [\n            /hbbtv.+maple;(\\d+)/i\n            ], [[MODEL, /^/, 'SmartTV'], [VENDOR, SAMSUNG], [TYPE, SMARTTV]], [\n            /(nux; netcast.+smarttv|lg (netcast\\.tv-201\\d|android tv))/i        // LG SmartTV\n            ], [[VENDOR, LG], [TYPE, SMARTTV]], [\n            /(apple) ?tv/i                                                      // Apple TV\n            ], [VENDOR, [MODEL, APPLE+' TV'], [TYPE, SMARTTV]], [\n            /crkey/i                                                            // Google Chromecast\n            ], [[MODEL, CHROME+'cast'], [VENDOR, GOOGLE], [TYPE, SMARTTV]], [\n            /droid.+aft(\\w+)( bui|\\))/i                                         // Fire TV\n            ], [MODEL, [VENDOR, AMAZON], [TYPE, SMARTTV]], [\n            /\\(dtv[\\);].+(aquos)/i,\n            /(aquos-tv[\\w ]+)\\)/i                                               // Sharp\n            ], [MODEL, [VENDOR, SHARP], [TYPE, SMARTTV]],[\n            /(bravia[\\w ]+)( bui|\\))/i                                              // Sony\n            ], [MODEL, [VENDOR, SONY], [TYPE, SMARTTV]], [\n            /(mitv-\\w{5}) bui/i                                                 // Xiaomi\n            ], [MODEL, [VENDOR, XIAOMI], [TYPE, SMARTTV]], [\n            /Hbbtv.*(technisat) (.*);/i                                         // TechniSAT\n            ], [VENDOR, MODEL, [TYPE, SMARTTV]], [\n            /\\b(roku)[\\dx]*[\\)\\/]((?:dvp-)?[\\d\\.]*)/i,                          // Roku\n            /hbbtv\\/\\d+\\.\\d+\\.\\d+ +\\([\\w\\+ ]*; *([\\w\\d][^;]*);([^;]*)/i         // HbbTV devices\n            ], [[VENDOR, trim], [MODEL, trim], [TYPE, SMARTTV]], [\n            /\\b(android tv|smart[- ]?tv|opera tv|tv; rv:)\\b/i                   // SmartTV from Unidentified Vendors\n            ], [[TYPE, SMARTTV]], [\n\n            ///////////////////\n            // CONSOLES\n            ///////////////////\n\n            /(ouya)/i,                                                          // Ouya\n            /(nintendo) ([wids3utch]+)/i                                        // Nintendo\n            ], [VENDOR, MODEL, [TYPE, CONSOLE]], [\n            /droid.+; (shield) bui/i                                            // Nvidia\n            ], [MODEL, [VENDOR, 'Nvidia'], [TYPE, CONSOLE]], [\n            /(playstation [345portablevi]+)/i                                   // Playstation\n            ], [MODEL, [VENDOR, SONY], [TYPE, CONSOLE]], [\n            /\\b(xbox(?: one)?(?!; xbox))[\\); ]/i                                // Microsoft Xbox\n            ], [MODEL, [VENDOR, MICROSOFT], [TYPE, CONSOLE]], [\n\n            ///////////////////\n            // WEARABLES\n            ///////////////////\n\n            /((pebble))app/i                                                    // Pebble\n            ], [VENDOR, MODEL, [TYPE, WEARABLE]], [\n            /(watch)(?: ?os[,\\/]|\\d,\\d\\/)[\\d\\.]+/i                              // Apple Watch\n            ], [MODEL, [VENDOR, APPLE], [TYPE, WEARABLE]], [\n            /droid.+; (glass) \\d/i                                              // Google Glass\n            ], [MODEL, [VENDOR, GOOGLE], [TYPE, WEARABLE]], [\n            /droid.+; (wt63?0{2,3})\\)/i\n            ], [MODEL, [VENDOR, ZEBRA], [TYPE, WEARABLE]], [\n            /(quest( 2| pro)?)/i                                                // Oculus Quest\n            ], [MODEL, [VENDOR, FACEBOOK], [TYPE, WEARABLE]], [\n\n            ///////////////////\n            // EMBEDDED\n            ///////////////////\n\n            /(tesla)(?: qtcarbrowser|\\/[-\\w\\.]+)/i                              // Tesla\n            ], [VENDOR, [TYPE, EMBEDDED]], [\n            /(aeobc)\\b/i                                                        // Echo Dot\n            ], [MODEL, [VENDOR, AMAZON], [TYPE, EMBEDDED]], [\n\n            ////////////////////\n            // MIXED (GENERIC)\n            ///////////////////\n\n            /droid .+?; ([^;]+?)(?: bui|; wv\\)|\\) applew).+? mobile safari/i    // Android Phones from Unidentified Vendors\n            ], [MODEL, [TYPE, MOBILE]], [\n            /droid .+?; ([^;]+?)(?: bui|\\) applew).+?(?! mobile) safari/i       // Android Tablets from Unidentified Vendors\n            ], [MODEL, [TYPE, TABLET]], [\n            /\\b((tablet|tab)[;\\/]|focus\\/\\d(?!.+mobile))/i                      // Unidentifiable Tablet\n            ], [[TYPE, TABLET]], [\n            /(phone|mobile(?:[;\\/]| [ \\w\\/\\.]*safari)|pda(?=.+windows ce))/i    // Unidentifiable Mobile\n            ], [[TYPE, MOBILE]], [\n            /(android[-\\w\\. ]{0,9});.+buil/i                                    // Generic Android Device\n            ], [MODEL, [VENDOR, 'Generic']]\n        ],\n\n        engine : [[\n\n            /windows.+ edge\\/([\\w\\.]+)/i                                       // EdgeHTML\n            ], [VERSION, [NAME, EDGE+'HTML']], [\n\n            /webkit\\/537\\.36.+chrome\\/(?!27)([\\w\\.]+)/i                         // Blink\n            ], [VERSION, [NAME, 'Blink']], [\n\n            /(presto)\\/([\\w\\.]+)/i,                                             // Presto\n            /(webkit|trident|netfront|netsurf|amaya|lynx|w3m|goanna)\\/([\\w\\.]+)/i, // WebKit/Trident/NetFront/NetSurf/Amaya/Lynx/w3m/Goanna\n            /ekioh(flow)\\/([\\w\\.]+)/i,                                          // Flow\n            /(khtml|tasman|links)[\\/ ]\\(?([\\w\\.]+)/i,                           // KHTML/Tasman/Links\n            /(icab)[\\/ ]([23]\\.[\\d\\.]+)/i,                                      // iCab\n            /\\b(libweb)/i\n            ], [NAME, VERSION], [\n\n            /rv\\:([\\w\\.]{1,9})\\b.+(gecko)/i                                     // Gecko\n            ], [VERSION, NAME]\n        ],\n\n        os : [[\n\n            // Windows\n            /microsoft (windows) (vista|xp)/i                                   // Windows (iTunes)\n            ], [NAME, VERSION], [\n            /(windows (?:phone(?: os)?|mobile))[\\/ ]?([\\d\\.\\w ]*)/i             // Windows Phone\n            ], [NAME, [VERSION, strMapper, windowsVersionMap]], [\n            /windows nt 6\\.2; (arm)/i,                                        // Windows RT\n            /windows[\\/ ]?([ntce\\d\\. ]+\\w)(?!.+xbox)/i,\n            /(?:win(?=3|9|n)|win 9x )([nt\\d\\.]+)/i\n            ], [[VERSION, strMapper, windowsVersionMap], [NAME, 'Windows']], [\n\n            // iOS/macOS\n            /ip[honead]{2,4}\\b(?:.*os ([\\w]+) like mac|; opera)/i,              // iOS\n            /(?:ios;fbsv\\/|iphone.+ios[\\/ ])([\\d\\.]+)/i,\n            /cfnetwork\\/.+darwin/i\n            ], [[VERSION, /_/g, '.'], [NAME, 'iOS']], [\n            /(mac os x) ?([\\w\\. ]*)/i,\n            /(macintosh|mac_powerpc\\b)(?!.+haiku)/i                             // Mac OS\n            ], [[NAME, MAC_OS], [VERSION, /_/g, '.']], [\n\n            // Mobile OSes\n            /droid ([\\w\\.]+)\\b.+(android[- ]x86|harmonyos)/i                    // Android-x86/HarmonyOS\n            ], [VERSION, NAME], [                                               // Android/WebOS/QNX/Bada/RIM/Maemo/MeeGo/Sailfish OS\n            /(android|webos|qnx|bada|rim tablet os|maemo|meego|sailfish)[-\\/ ]?([\\w\\.]*)/i,\n            /(blackberry)\\w*\\/([\\w\\.]*)/i,                                      // Blackberry\n            /(tizen|kaios)[\\/ ]([\\w\\.]+)/i,                                     // Tizen/KaiOS\n            /\\((series40);/i                                                    // Series 40\n            ], [NAME, VERSION], [\n            /\\(bb(10);/i                                                        // BlackBerry 10\n            ], [VERSION, [NAME, BLACKBERRY]], [\n            /(?:symbian ?os|symbos|s60(?=;)|series60)[-\\/ ]?([\\w\\.]*)/i         // Symbian\n            ], [VERSION, [NAME, 'Symbian']], [\n            /mozilla\\/[\\d\\.]+ \\((?:mobile|tablet|tv|mobile; [\\w ]+); rv:.+ gecko\\/([\\w\\.]+)/i // Firefox OS\n            ], [VERSION, [NAME, FIREFOX+' OS']], [\n            /web0s;.+rt(tv)/i,\n            /\\b(?:hp)?wos(?:browser)?\\/([\\w\\.]+)/i                              // WebOS\n            ], [VERSION, [NAME, 'webOS']], [\n            /watch(?: ?os[,\\/]|\\d,\\d\\/)([\\d\\.]+)/i                              // watchOS\n            ], [VERSION, [NAME, 'watchOS']], [\n\n            // Google Chromecast\n            /crkey\\/([\\d\\.]+)/i                                                 // Google Chromecast\n            ], [VERSION, [NAME, CHROME+'cast']], [\n            /(cros) [\\w]+(?:\\)| ([\\w\\.]+)\\b)/i                                  // Chromium OS\n            ], [[NAME, CHROMIUM_OS], VERSION],[\n\n            // Smart TVs\n            /panasonic;(viera)/i,                                               // Panasonic Viera\n            /(netrange)mmh/i,                                                   // Netrange\n            /(nettv)\\/(\\d+\\.[\\w\\.]+)/i,                                         // NetTV\n\n            // Console\n            /(nintendo|playstation) ([wids345portablevuch]+)/i,                 // Nintendo/Playstation\n            /(xbox); +xbox ([^\\);]+)/i,                                         // Microsoft Xbox (360, One, X, S, Series X, Series S)\n\n            // Other\n            /\\b(joli|palm)\\b ?(?:os)?\\/?([\\w\\.]*)/i,                            // Joli/Palm\n            /(mint)[\\/\\(\\) ]?(\\w*)/i,                                           // Mint\n            /(mageia|vectorlinux)[; ]/i,                                        // Mageia/VectorLinux\n            /([kxln]?ubuntu|debian|suse|opensuse|gentoo|arch(?= linux)|slackware|fedora|mandriva|centos|pclinuxos|red ?hat|zenwalk|linpus|raspbian|plan 9|minix|risc os|contiki|deepin|manjaro|elementary os|sabayon|linspire)(?: gnu\\/linux)?(?: enterprise)?(?:[- ]linux)?(?:-gnu)?[-\\/ ]?(?!chrom|package)([-\\w\\.]*)/i,\n                                                                                // Ubuntu/Debian/SUSE/Gentoo/Arch/Slackware/Fedora/Mandriva/CentOS/PCLinuxOS/RedHat/Zenwalk/Linpus/Raspbian/Plan9/Minix/RISCOS/Contiki/Deepin/Manjaro/elementary/Sabayon/Linspire\n            /(hurd|linux) ?([\\w\\.]*)/i,                                         // Hurd/Linux\n            /(gnu) ?([\\w\\.]*)/i,                                                // GNU\n            /\\b([-frentopcghs]{0,5}bsd|dragonfly)[\\/ ]?(?!amd|[ix346]{1,2}86)([\\w\\.]*)/i, // FreeBSD/NetBSD/OpenBSD/PC-BSD/GhostBSD/DragonFly\n            /(haiku) (\\w+)/i                                                    // Haiku\n            ], [NAME, VERSION], [\n            /(sunos) ?([\\w\\.\\d]*)/i                                             // Solaris\n            ], [[NAME, 'Solaris'], VERSION], [\n            /((?:open)?solaris)[-\\/ ]?([\\w\\.]*)/i,                              // Solaris\n            /(aix) ((\\d)(?=\\.|\\)| )[\\w\\.])*/i,                                  // AIX\n            /\\b(beos|os\\/2|amigaos|morphos|openvms|fuchsia|hp-ux|serenityos)/i, // BeOS/OS2/AmigaOS/MorphOS/OpenVMS/Fuchsia/HP-UX/SerenityOS\n            /(unix) ?([\\w\\.]*)/i                                                // UNIX\n            ], [NAME, VERSION]\n        ]\n    };\n\n    /////////////////\n    // Constructor\n    ////////////////\n\n    var UAParser = function (ua, extensions) {\n\n        if (typeof ua === OBJ_TYPE) {\n            extensions = ua;\n            ua = undefined;\n        }\n\n        if (!(this instanceof UAParser)) {\n            return new UAParser(ua, extensions).getResult();\n        }\n\n        var _navigator = (typeof window !== UNDEF_TYPE && window.navigator) ? window.navigator : undefined;\n        var _ua = ua || ((_navigator && _navigator.userAgent) ? _navigator.userAgent : EMPTY);\n        var _uach = (_navigator && _navigator.userAgentData) ? _navigator.userAgentData : undefined;\n        var _rgxmap = extensions ? extend(regexes, extensions) : regexes;\n        var _isSelfNav = _navigator && _navigator.userAgent == _ua;\n\n        this.getBrowser = function () {\n            var _browser = {};\n            _browser[NAME] = undefined;\n            _browser[VERSION] = undefined;\n            rgxMapper.call(_browser, _ua, _rgxmap.browser);\n            _browser[MAJOR] = majorize(_browser[VERSION]);\n            // Brave-specific detection\n            if (_isSelfNav && _navigator && _navigator.brave && typeof _navigator.brave.isBrave == FUNC_TYPE) {\n                _browser[NAME] = 'Brave';\n            }\n            return _browser;\n        };\n        this.getCPU = function () {\n            var _cpu = {};\n            _cpu[ARCHITECTURE] = undefined;\n            rgxMapper.call(_cpu, _ua, _rgxmap.cpu);\n            return _cpu;\n        };\n        this.getDevice = function () {\n            var _device = {};\n            _device[VENDOR] = undefined;\n            _device[MODEL] = undefined;\n            _device[TYPE] = undefined;\n            rgxMapper.call(_device, _ua, _rgxmap.device);\n            if (_isSelfNav && !_device[TYPE] && _uach && _uach.mobile) {\n                _device[TYPE] = MOBILE;\n            }\n            // iPadOS-specific detection: identified as Mac, but has some iOS-only properties\n            if (_isSelfNav && _device[MODEL] == 'Macintosh' && _navigator && typeof _navigator.standalone !== UNDEF_TYPE && _navigator.maxTouchPoints && _navigator.maxTouchPoints > 2) {\n                _device[MODEL] = 'iPad';\n                _device[TYPE] = TABLET;\n            }\n            return _device;\n        };\n        this.getEngine = function () {\n            var _engine = {};\n            _engine[NAME] = undefined;\n            _engine[VERSION] = undefined;\n            rgxMapper.call(_engine, _ua, _rgxmap.engine);\n            return _engine;\n        };\n        this.getOS = function () {\n            var _os = {};\n            _os[NAME] = undefined;\n            _os[VERSION] = undefined;\n            rgxMapper.call(_os, _ua, _rgxmap.os);\n            if (_isSelfNav && !_os[NAME] && _uach && _uach.platform != 'Unknown') {\n                _os[NAME] = _uach.platform  \n                                    .replace(/chrome os/i, CHROMIUM_OS)\n                                    .replace(/macos/i, MAC_OS);           // backward compatibility\n            }\n            return _os;\n        };\n        this.getResult = function () {\n            return {\n                ua      : this.getUA(),\n                browser : this.getBrowser(),\n                engine  : this.getEngine(),\n                os      : this.getOS(),\n                device  : this.getDevice(),\n                cpu     : this.getCPU()\n            };\n        };\n        this.getUA = function () {\n            return _ua;\n        };\n        this.setUA = function (ua) {\n            _ua = (typeof ua === STR_TYPE && ua.length > UA_MAX_LENGTH) ? trim(ua, UA_MAX_LENGTH) : ua;\n            return this;\n        };\n        this.setUA(_ua);\n        return this;\n    };\n\n    UAParser.VERSION = LIBVERSION;\n    UAParser.BROWSER =  enumerize([NAME, VERSION, MAJOR]);\n    UAParser.CPU = enumerize([ARCHITECTURE]);\n    UAParser.DEVICE = enumerize([MODEL, VENDOR, TYPE, CONSOLE, MOBILE, SMARTTV, TABLET, WEARABLE, EMBEDDED]);\n    UAParser.ENGINE = UAParser.OS = enumerize([NAME, VERSION]);\n\n    ///////////\n    // Export\n    //////////\n\n    // check js environment\n    if (typeof(exports) !== UNDEF_TYPE) {\n        // nodejs env\n        if (typeof module !== UNDEF_TYPE && module.exports) {\n            exports = module.exports = UAParser;\n        }\n        exports.UAParser = UAParser;\n    } else {\n        // requirejs env (optional)\n        if (typeof(define) === FUNC_TYPE && define.amd) {\n            define(function () {\n                return UAParser;\n            });\n        } else if (typeof window !== UNDEF_TYPE) {\n            // browser env\n            window.UAParser = UAParser;\n        }\n    }\n\n    // jQuery/Zepto specific (optional)\n    // Note:\n    //   In AMD env the global scope should be kept clean, but jQuery is an exception.\n    //   jQuery always exports to global scope, unless jQuery.noConflict(true) is used,\n    //   and we should catch that.\n    var $ = typeof window !== UNDEF_TYPE && (window.jQuery || window.Zepto);\n    if ($ && !$.ua) {\n        var parser = new UAParser();\n        $.ua = parser.getResult();\n        $.ua.get = function () {\n            return parser.getUA();\n        };\n        $.ua.set = function (ua) {\n            parser.setUA(ua);\n            var result = parser.getResult();\n            for (var prop in result) {\n                $.ua[prop] = result[prop];\n            }\n        };\n    }\n\n})(typeof window === 'object' ? window : this);\n","import * as cookie from 'cookie';\nexport function hasDocumentCookie() {\n    // Can we get/set cookies on document.cookie?\n    return typeof document === 'object' && typeof document.cookie === 'string';\n}\nexport function cleanCookies() {\n    document.cookie.split(';').forEach(function (c) {\n        document.cookie = c\n            .replace(/^ +/, '')\n            .replace(/=.*/, '=;expires=' + new Date().toUTCString() + ';path=/');\n    });\n}\nexport function parseCookies(cookies) {\n    if (typeof cookies === 'string') {\n        return cookie.parse(cookies);\n    }\n    else if (typeof cookies === 'object' && cookies !== null) {\n        return cookies;\n    }\n    else {\n        return {};\n    }\n}\nexport function readCookie(value, options = {}) {\n    const cleanValue = cleanupCookieValue(value);\n    if (!options.doNotParse) {\n        try {\n            return JSON.parse(cleanValue);\n        }\n        catch (e) {\n            // At least we tried\n        }\n    }\n    // Ignore clean value if we failed the deserialization\n    // It is not relevant anymore to trim those values\n    return value;\n}\nfunction cleanupCookieValue(value) {\n    // express prepend j: before serializing a cookie\n    if (value && value[0] === 'j' && value[1] === ':') {\n        return value.substr(2);\n    }\n    return value;\n}\n","import Cookies from './Cookies';\nexport default Cookies;\nexport * from './types';\n","import * as cookie from 'cookie';\nimport { hasDocumentCookie, parseCookies, readCookie } from './utils';\nexport default class Cookies {\n    constructor(cookies, defaultSetOptions = {}) {\n        this.changeListeners = [];\n        this.HAS_DOCUMENT_COOKIE = false;\n        this.update = () => {\n            if (!this.HAS_DOCUMENT_COOKIE) {\n                return;\n            }\n            const previousCookies = this.cookies;\n            this.cookies = cookie.parse(document.cookie);\n            this._checkChanges(previousCookies);\n        };\n        const domCookies = typeof document === 'undefined' ? '' : document.cookie;\n        this.cookies = parseCookies(cookies || domCookies);\n        this.defaultSetOptions = defaultSetOptions;\n        this.HAS_DOCUMENT_COOKIE = hasDocumentCookie();\n    }\n    _emitChange(params) {\n        for (let i = 0; i < this.changeListeners.length; ++i) {\n            this.changeListeners[i](params);\n        }\n    }\n    _checkChanges(newCookies) {\n        const names = new Set(Object.keys(newCookies).concat(Object.keys(this.cookies)));\n        names.forEach((name) => {\n            if (newCookies[name] !== this.cookies[name]) {\n                this._emitChange({\n                    name,\n                    value: readCookie(newCookies[name]),\n                });\n            }\n        });\n    }\n    _startPolling() {\n        this.pollingInterval = setInterval(this.update, 300);\n    }\n    _stopPolling() {\n        if (this.pollingInterval) {\n            clearInterval(this.pollingInterval);\n        }\n    }\n    get(name, options = {}) {\n        if (!options.doNotUpdate) {\n            this.update();\n        }\n        return readCookie(this.cookies[name], options);\n    }\n    getAll(options = {}) {\n        if (!options.doNotUpdate) {\n            this.update();\n        }\n        const result = {};\n        for (let name in this.cookies) {\n            result[name] = readCookie(this.cookies[name], options);\n        }\n        return result;\n    }\n    set(name, value, options) {\n        if (options) {\n            options = Object.assign(Object.assign({}, this.defaultSetOptions), options);\n        }\n        else {\n            options = this.defaultSetOptions;\n        }\n        const stringValue = typeof value === 'string' ? value : JSON.stringify(value);\n        this.cookies = Object.assign(Object.assign({}, this.cookies), { [name]: stringValue });\n        if (this.HAS_DOCUMENT_COOKIE) {\n            document.cookie = cookie.serialize(name, stringValue, options);\n        }\n        this._emitChange({ name, value, options });\n    }\n    remove(name, options) {\n        const finalOptions = (options = Object.assign(Object.assign({}, options), { expires: new Date(1970, 1, 1, 0, 0, 1), maxAge: 0 }));\n        this.cookies = Object.assign({}, this.cookies);\n        delete this.cookies[name];\n        if (this.HAS_DOCUMENT_COOKIE) {\n            document.cookie = cookie.serialize(name, '', finalOptions);\n        }\n        this._emitChange({ name, value: undefined, options });\n    }\n    addChangeListener(callback) {\n        this.changeListeners.push(callback);\n        if (this.changeListeners.length === 1) {\n            if (typeof window === 'object' && 'cookieStore' in window) {\n                window.cookieStore.addEventListener('change', this.update);\n            }\n            else {\n                this._startPolling();\n            }\n        }\n    }\n    removeChangeListener(callback) {\n        const idx = this.changeListeners.indexOf(callback);\n        if (idx >= 0) {\n            this.changeListeners.splice(idx, 1);\n        }\n        if (this.changeListeners.length === 0) {\n            if (typeof window === 'object' && 'cookieStore' in window) {\n                window.cookieStore.removeEventListener('change', this.update);\n            }\n            else {\n                this._stopPolling();\n            }\n        }\n    }\n}\n","/*!\n * cookie\n * Copyright(c) 2012-2014 Roman Shtylman\n * Copyright(c) 2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict';\n\n/**\n * Module exports.\n * @public\n */\n\nexports.parse = parse;\nexports.serialize = serialize;\n\n/**\n * Module variables.\n * @private\n */\n\nvar __toString = Object.prototype.toString\n\n/**\n * RegExp to match field-content in RFC 7230 sec 3.2\n *\n * field-content = field-vchar [ 1*( SP / HTAB ) field-vchar ]\n * field-vchar   = VCHAR / obs-text\n * obs-text      = %x80-FF\n */\n\nvar fieldContentRegExp = /^[\\u0009\\u0020-\\u007e\\u0080-\\u00ff]+$/;\n\n/**\n * Parse a cookie header.\n *\n * Parse the given cookie header string into an object\n * The object has the various cookies as keys(names) => values\n *\n * @param {string} str\n * @param {object} [options]\n * @return {object}\n * @public\n */\n\nfunction parse(str, options) {\n  if (typeof str !== 'string') {\n    throw new TypeError('argument str must be a string');\n  }\n\n  var obj = {}\n  var opt = options || {};\n  var dec = opt.decode || decode;\n\n  var index = 0\n  while (index < str.length) {\n    var eqIdx = str.indexOf('=', index)\n\n    // no more cookie pairs\n    if (eqIdx === -1) {\n      break\n    }\n\n    var endIdx = str.indexOf(';', index)\n\n    if (endIdx === -1) {\n      endIdx = str.length\n    } else if (endIdx < eqIdx) {\n      // backtrack on prior semicolon\n      index = str.lastIndexOf(';', eqIdx - 1) + 1\n      continue\n    }\n\n    var key = str.slice(index, eqIdx).trim()\n\n    // only assign once\n    if (undefined === obj[key]) {\n      var val = str.slice(eqIdx + 1, endIdx).trim()\n\n      // quoted values\n      if (val.charCodeAt(0) === 0x22) {\n        val = val.slice(1, -1)\n      }\n\n      obj[key] = tryDecode(val, dec);\n    }\n\n    index = endIdx + 1\n  }\n\n  return obj;\n}\n\n/**\n * Serialize data into a cookie header.\n *\n * Serialize the a name value pair into a cookie string suitable for\n * http headers. An optional options object specified cookie parameters.\n *\n * serialize('foo', 'bar', { httpOnly: true })\n *   => \"foo=bar; httpOnly\"\n *\n * @param {string} name\n * @param {string} val\n * @param {object} [options]\n * @return {string}\n * @public\n */\n\nfunction serialize(name, val, options) {\n  var opt = options || {};\n  var enc = opt.encode || encode;\n\n  if (typeof enc !== 'function') {\n    throw new TypeError('option encode is invalid');\n  }\n\n  if (!fieldContentRegExp.test(name)) {\n    throw new TypeError('argument name is invalid');\n  }\n\n  var value = enc(val);\n\n  if (value && !fieldContentRegExp.test(value)) {\n    throw new TypeError('argument val is invalid');\n  }\n\n  var str = name + '=' + value;\n\n  if (null != opt.maxAge) {\n    var maxAge = opt.maxAge - 0;\n\n    if (isNaN(maxAge) || !isFinite(maxAge)) {\n      throw new TypeError('option maxAge is invalid')\n    }\n\n    str += '; Max-Age=' + Math.floor(maxAge);\n  }\n\n  if (opt.domain) {\n    if (!fieldContentRegExp.test(opt.domain)) {\n      throw new TypeError('option domain is invalid');\n    }\n\n    str += '; Domain=' + opt.domain;\n  }\n\n  if (opt.path) {\n    if (!fieldContentRegExp.test(opt.path)) {\n      throw new TypeError('option path is invalid');\n    }\n\n    str += '; Path=' + opt.path;\n  }\n\n  if (opt.expires) {\n    var expires = opt.expires\n\n    if (!isDate(expires) || isNaN(expires.valueOf())) {\n      throw new TypeError('option expires is invalid');\n    }\n\n    str += '; Expires=' + expires.toUTCString()\n  }\n\n  if (opt.httpOnly) {\n    str += '; HttpOnly';\n  }\n\n  if (opt.secure) {\n    str += '; Secure';\n  }\n\n  if (opt.priority) {\n    var priority = typeof opt.priority === 'string'\n      ? opt.priority.toLowerCase()\n      : opt.priority\n\n    switch (priority) {\n      case 'low':\n        str += '; Priority=Low'\n        break\n      case 'medium':\n        str += '; Priority=Medium'\n        break\n      case 'high':\n        str += '; Priority=High'\n        break\n      default:\n        throw new TypeError('option priority is invalid')\n    }\n  }\n\n  if (opt.sameSite) {\n    var sameSite = typeof opt.sameSite === 'string'\n      ? opt.sameSite.toLowerCase() : opt.sameSite;\n\n    switch (sameSite) {\n      case true:\n        str += '; SameSite=Strict';\n        break;\n      case 'lax':\n        str += '; SameSite=Lax';\n        break;\n      case 'strict':\n        str += '; SameSite=Strict';\n        break;\n      case 'none':\n        str += '; SameSite=None';\n        break;\n      default:\n        throw new TypeError('option sameSite is invalid');\n    }\n  }\n\n  return str;\n}\n\n/**\n * URL-decode string value. Optimized to skip native call when no %.\n *\n * @param {string} str\n * @returns {string}\n */\n\nfunction decode (str) {\n  return str.indexOf('%') !== -1\n    ? decodeURIComponent(str)\n    : str\n}\n\n/**\n * URL-encode value.\n *\n * @param {string} str\n * @returns {string}\n */\n\nfunction encode (val) {\n  return encodeURIComponent(val)\n}\n\n/**\n * Determine if value is a Date.\n *\n * @param {*} val\n * @private\n */\n\nfunction isDate (val) {\n  return __toString.call(val) === '[object Date]' ||\n    val instanceof Date\n}\n\n/**\n * Try decoding a string using a decoding function.\n *\n * @param {string} str\n * @param {function} decode\n * @private\n */\n\nfunction tryDecode(str, decode) {\n  try {\n    return decode(str);\n  } catch (e) {\n    return str;\n  }\n}\n","/**\n * @license React\n * use-sync-external-store-shim.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use strict';var e=require(\"react\");function h(a,b){return a===b&&(0!==a||1/a===1/b)||a!==a&&b!==b}var k=\"function\"===typeof Object.is?Object.is:h,l=e.useState,m=e.useEffect,n=e.useLayoutEffect,p=e.useDebugValue;function q(a,b){var d=b(),f=l({inst:{value:d,getSnapshot:b}}),c=f[0].inst,g=f[1];n(function(){c.value=d;c.getSnapshot=b;r(c)&&g({inst:c})},[a,d,b]);m(function(){r(c)&&g({inst:c});return a(function(){r(c)&&g({inst:c})})},[a]);p(d);return d}\nfunction r(a){var b=a.getSnapshot;a=a.value;try{var d=b();return!k(a,d)}catch(f){return!0}}function t(a,b){return b()}var u=\"undefined\"===typeof window||\"undefined\"===typeof window.document||\"undefined\"===typeof window.document.createElement?t:q;exports.useSyncExternalStore=void 0!==e.useSyncExternalStore?e.useSyncExternalStore:u;\n","/**\n * @license React\n * use-sync-external-store-shim/with-selector.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use strict';var h=require(\"react\"),n=require(\"use-sync-external-store/shim\");function p(a,b){return a===b&&(0!==a||1/a===1/b)||a!==a&&b!==b}var q=\"function\"===typeof Object.is?Object.is:p,r=n.useSyncExternalStore,t=h.useRef,u=h.useEffect,v=h.useMemo,w=h.useDebugValue;\nexports.useSyncExternalStoreWithSelector=function(a,b,e,l,g){var c=t(null);if(null===c.current){var f={hasValue:!1,value:null};c.current=f}else f=c.current;c=v(function(){function a(a){if(!c){c=!0;d=a;a=l(a);if(void 0!==g&&f.hasValue){var b=f.value;if(g(b,a))return k=b}return k=a}b=k;if(q(d,a))return b;var e=l(a);if(void 0!==g&&g(b,e))return b;d=a;return k=e}var c=!1,d,k,m=void 0===e?null:e;return[function(){return a(b())},null===m?void 0:function(){return a(m())}]},[b,e,l,g]);var d=r(a,c[0],c[1]);\nu(function(){f.hasValue=!0;f.value=d},[d]);w(d);return d};\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n  module.exports = require('../cjs/use-sync-external-store-shim.production.min.js');\n} else {\n  module.exports = require('../cjs/use-sync-external-store-shim.development.js');\n}\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n  module.exports = require('../cjs/use-sync-external-store-shim/with-selector.production.min.js');\n} else {\n  module.exports = require('../cjs/use-sync-external-store-shim/with-selector.development.js');\n}\n","var v1 = require('./v1');\nvar v4 = require('./v4');\n\nvar uuid = v4;\nuuid.v1 = v1;\nuuid.v4 = v4;\n\nmodule.exports = uuid;\n","/**\n * Convert array of 16 byte values to UUID string format of the form:\n * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX\n */\nvar byteToHex = [];\nfor (var i = 0; i < 256; ++i) {\n  byteToHex[i] = (i + 0x100).toString(16).substr(1);\n}\n\nfunction bytesToUuid(buf, offset) {\n  var i = offset || 0;\n  var bth = byteToHex;\n  // join used to fix memory issue caused by concatenation: https://bugs.chromium.org/p/v8/issues/detail?id=3175#c4\n  return ([\n    bth[buf[i++]], bth[buf[i++]],\n    bth[buf[i++]], bth[buf[i++]], '-',\n    bth[buf[i++]], bth[buf[i++]], '-',\n    bth[buf[i++]], bth[buf[i++]], '-',\n    bth[buf[i++]], bth[buf[i++]], '-',\n    bth[buf[i++]], bth[buf[i++]],\n    bth[buf[i++]], bth[buf[i++]],\n    bth[buf[i++]], bth[buf[i++]]\n  ]).join('');\n}\n\nmodule.exports = bytesToUuid;\n","// Unique ID creation requires a high quality random # generator.  In the\n// browser this is a little complicated due to unknown quality of Math.random()\n// and inconsistent support for the `crypto` API.  We do the best we can via\n// feature-detection\n\n// getRandomValues needs to be invoked in a context where \"this\" is a Crypto\n// implementation. Also, find the complete implementation of crypto on IE11.\nvar getRandomValues = (typeof(crypto) != 'undefined' && crypto.getRandomValues && crypto.getRandomValues.bind(crypto)) ||\n                      (typeof(msCrypto) != 'undefined' && typeof window.msCrypto.getRandomValues == 'function' && msCrypto.getRandomValues.bind(msCrypto));\n\nif (getRandomValues) {\n  // WHATWG crypto RNG - http://wiki.whatwg.org/wiki/Crypto\n  var rnds8 = new Uint8Array(16); // eslint-disable-line no-undef\n\n  module.exports = function whatwgRNG() {\n    getRandomValues(rnds8);\n    return rnds8;\n  };\n} else {\n  // Math.random()-based (RNG)\n  //\n  // If all else fails, use Math.random().  It's fast, but is of unspecified\n  // quality.\n  var rnds = new Array(16);\n\n  module.exports = function mathRNG() {\n    for (var i = 0, r; i < 16; i++) {\n      if ((i & 0x03) === 0) r = Math.random() * 0x100000000;\n      rnds[i] = r >>> ((i & 0x03) << 3) & 0xff;\n    }\n\n    return rnds;\n  };\n}\n","var rng = require('./lib/rng');\nvar bytesToUuid = require('./lib/bytesToUuid');\n\n// **`v1()` - Generate time-based UUID**\n//\n// Inspired by https://github.com/LiosK/UUID.js\n// and http://docs.python.org/library/uuid.html\n\nvar _nodeId;\nvar _clockseq;\n\n// Previous uuid creation time\nvar _lastMSecs = 0;\nvar _lastNSecs = 0;\n\n// See https://github.com/uuidjs/uuid for API details\nfunction v1(options, buf, offset) {\n  var i = buf && offset || 0;\n  var b = buf || [];\n\n  options = options || {};\n  var node = options.node || _nodeId;\n  var clockseq = options.clockseq !== undefined ? options.clockseq : _clockseq;\n\n  // node and clockseq need to be initialized to random values if they're not\n  // specified.  We do this lazily to minimize issues related to insufficient\n  // system entropy.  See #189\n  if (node == null || clockseq == null) {\n    var seedBytes = rng();\n    if (node == null) {\n      // Per 4.5, create and 48-bit node id, (47 random bits + multicast bit = 1)\n      node = _nodeId = [\n        seedBytes[0] | 0x01,\n        seedBytes[1], seedBytes[2], seedBytes[3], seedBytes[4], seedBytes[5]\n      ];\n    }\n    if (clockseq == null) {\n      // Per 4.2.2, randomize (14 bit) clockseq\n      clockseq = _clockseq = (seedBytes[6] << 8 | seedBytes[7]) & 0x3fff;\n    }\n  }\n\n  // UUID timestamps are 100 nano-second units since the Gregorian epoch,\n  // (1582-10-15 00:00).  JSNumbers aren't precise enough for this, so\n  // time is handled internally as 'msecs' (integer milliseconds) and 'nsecs'\n  // (100-nanoseconds offset from msecs) since unix epoch, 1970-01-01 00:00.\n  var msecs = options.msecs !== undefined ? options.msecs : new Date().getTime();\n\n  // Per 4.2.1.2, use count of uuid's generated during the current clock\n  // cycle to simulate higher resolution clock\n  var nsecs = options.nsecs !== undefined ? options.nsecs : _lastNSecs + 1;\n\n  // Time since last uuid creation (in msecs)\n  var dt = (msecs - _lastMSecs) + (nsecs - _lastNSecs)/10000;\n\n  // Per 4.2.1.2, Bump clockseq on clock regression\n  if (dt < 0 && options.clockseq === undefined) {\n    clockseq = clockseq + 1 & 0x3fff;\n  }\n\n  // Reset nsecs if clock regresses (new clockseq) or we've moved onto a new\n  // time interval\n  if ((dt < 0 || msecs > _lastMSecs) && options.nsecs === undefined) {\n    nsecs = 0;\n  }\n\n  // Per 4.2.1.2 Throw error if too many uuids are requested\n  if (nsecs >= 10000) {\n    throw new Error('uuid.v1(): Can\\'t create more than 10M uuids/sec');\n  }\n\n  _lastMSecs = msecs;\n  _lastNSecs = nsecs;\n  _clockseq = clockseq;\n\n  // Per 4.1.4 - Convert from unix epoch to Gregorian epoch\n  msecs += 12219292800000;\n\n  // `time_low`\n  var tl = ((msecs & 0xfffffff) * 10000 + nsecs) % 0x100000000;\n  b[i++] = tl >>> 24 & 0xff;\n  b[i++] = tl >>> 16 & 0xff;\n  b[i++] = tl >>> 8 & 0xff;\n  b[i++] = tl & 0xff;\n\n  // `time_mid`\n  var tmh = (msecs / 0x100000000 * 10000) & 0xfffffff;\n  b[i++] = tmh >>> 8 & 0xff;\n  b[i++] = tmh & 0xff;\n\n  // `time_high_and_version`\n  b[i++] = tmh >>> 24 & 0xf | 0x10; // include version\n  b[i++] = tmh >>> 16 & 0xff;\n\n  // `clock_seq_hi_and_reserved` (Per 4.2.2 - include variant)\n  b[i++] = clockseq >>> 8 | 0x80;\n\n  // `clock_seq_low`\n  b[i++] = clockseq & 0xff;\n\n  // `node`\n  for (var n = 0; n < 6; ++n) {\n    b[i + n] = node[n];\n  }\n\n  return buf ? buf : bytesToUuid(b);\n}\n\nmodule.exports = v1;\n","var rng = require('./lib/rng');\nvar bytesToUuid = require('./lib/bytesToUuid');\n\nfunction v4(options, buf, offset) {\n  var i = buf && offset || 0;\n\n  if (typeof(options) == 'string') {\n    buf = options === 'binary' ? new Array(16) : null;\n    options = null;\n  }\n  options = options || {};\n\n  var rnds = options.random || (options.rng || rng)();\n\n  // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`\n  rnds[6] = (rnds[6] & 0x0f) | 0x40;\n  rnds[8] = (rnds[8] & 0x3f) | 0x80;\n\n  // Copy bytes to buffer, if provided\n  if (buf) {\n    for (var ii = 0; ii < 16; ++ii) {\n      buf[i + ii] = rnds[ii];\n    }\n  }\n\n  return buf || bytesToUuid(rnds);\n}\n\nmodule.exports = v4;\n","/**\n * This file automatically generated from `pre-publish.js`.\n * Do not manually edit.\n */\n\nmodule.exports = {\n  \"area\": true,\n  \"base\": true,\n  \"br\": true,\n  \"col\": true,\n  \"embed\": true,\n  \"hr\": true,\n  \"img\": true,\n  \"input\": true,\n  \"link\": true,\n  \"meta\": true,\n  \"param\": true,\n  \"source\": true,\n  \"track\": true,\n  \"wbr\": true\n};\n","/**\n * Copyright (c) 2014-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\n/**\n * Similar to invariant but only logs a warning if the condition is not met.\n * This can be used to log issues in development environments in critical\n * paths. Removing the logging code for production environments will keep the\n * same logic and follow the same code paths.\n */\n\nvar __DEV__ = process.env.NODE_ENV !== 'production';\n\nvar warning = function() {};\n\nif (__DEV__) {\n  var printWarning = function printWarning(format, args) {\n    var len = arguments.length;\n    args = new Array(len > 1 ? len - 1 : 0);\n    for (var key = 1; key < len; key++) {\n      args[key - 1] = arguments[key];\n    }\n    var argIndex = 0;\n    var message = 'Warning: ' +\n      format.replace(/%s/g, function() {\n        return args[argIndex++];\n      });\n    if (typeof console !== 'undefined') {\n      console.error(message);\n    }\n    try {\n      // --- Welcome to debugging React ---\n      // This error was thrown as a convenience so that you can use this stack\n      // to find the callsite that caused this warning to fire.\n      throw new Error(message);\n    } catch (x) {}\n  }\n\n  warning = function(condition, format, args) {\n    var len = arguments.length;\n    args = new Array(len > 2 ? len - 2 : 0);\n    for (var key = 2; key < len; key++) {\n      args[key - 2] = arguments[key];\n    }\n    if (format === undefined) {\n      throw new Error(\n          '`warning(condition, format, ...args)` requires a warning ' +\n          'message argument'\n      );\n    }\n    if (!condition) {\n      printWarning.apply(null, [format].concat(args));\n    }\n  };\n}\n\nmodule.exports = warning;\n","'use client';\n'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar React = require('react');\n\n/**\n * @internal\n */\nconst SkeletonThemeContext = React.createContext({});\n\n/* eslint-disable react/no-array-index-key */\nconst defaultEnableAnimation = true;\n// For performance & cleanliness, don't add any inline styles unless we have to\nfunction styleOptionsToCssProperties({ baseColor, highlightColor, width, height, borderRadius, circle, direction, duration, enableAnimation = defaultEnableAnimation, }) {\n    const style = {};\n    if (direction === 'rtl')\n        style['--animation-direction'] = 'reverse';\n    if (typeof duration === 'number')\n        style['--animation-duration'] = `${duration}s`;\n    if (!enableAnimation)\n        style['--pseudo-element-display'] = 'none';\n    if (typeof width === 'string' || typeof width === 'number')\n        style.width = width;\n    if (typeof height === 'string' || typeof height === 'number')\n        style.height = height;\n    if (typeof borderRadius === 'string' || typeof borderRadius === 'number')\n        style.borderRadius = borderRadius;\n    if (circle)\n        style.borderRadius = '50%';\n    if (typeof baseColor !== 'undefined')\n        style['--base-color'] = baseColor;\n    if (typeof highlightColor !== 'undefined')\n        style['--highlight-color'] = highlightColor;\n    return style;\n}\nfunction Skeleton({ count = 1, wrapper: Wrapper, className: customClassName, containerClassName, containerTestId, circle = false, style: styleProp, ...originalPropsStyleOptions }) {\n    var _a, _b, _c;\n    const contextStyleOptions = React.useContext(SkeletonThemeContext);\n    const propsStyleOptions = { ...originalPropsStyleOptions };\n    // DO NOT overwrite style options from the context if `propsStyleOptions`\n    // has properties explicity set to undefined\n    for (const [key, value] of Object.entries(originalPropsStyleOptions)) {\n        if (typeof value === 'undefined') {\n            delete propsStyleOptions[key];\n        }\n    }\n    // Props take priority over context\n    const styleOptions = {\n        ...contextStyleOptions,\n        ...propsStyleOptions,\n        circle,\n    };\n    // `styleProp` has the least priority out of everything\n    const style = {\n        ...styleProp,\n        ...styleOptionsToCssProperties(styleOptions),\n    };\n    let className = 'react-loading-skeleton';\n    if (customClassName)\n        className += ` ${customClassName}`;\n    const inline = (_a = styleOptions.inline) !== null && _a !== void 0 ? _a : false;\n    const elements = [];\n    const countCeil = Math.ceil(count);\n    for (let i = 0; i < countCeil; i++) {\n        let thisStyle = style;\n        if (countCeil > count && i === countCeil - 1) {\n            // count is not an integer and we've reached the last iteration of\n            // the loop, so add a \"fractional\" skeleton.\n            //\n            // For example, if count is 3.5, we've already added 3 full\n            // skeletons, so now we add one more skeleton that is 0.5 times the\n            // original width.\n            const width = (_b = thisStyle.width) !== null && _b !== void 0 ? _b : '100%'; // 100% is the default since that's what's in the CSS\n            const fractionalPart = count % 1;\n            const fractionalWidth = typeof width === 'number'\n                ? width * fractionalPart\n                : `calc(${width} * ${fractionalPart})`;\n            thisStyle = { ...thisStyle, width: fractionalWidth };\n        }\n        const skeletonSpan = (React.createElement(\"span\", { className: className, style: thisStyle, key: i }, \"\\u200C\"));\n        if (inline) {\n            elements.push(skeletonSpan);\n        }\n        else {\n            // Without the <br />, the skeleton lines will all run together if\n            // `width` is specified\n            elements.push(React.createElement(React.Fragment, { key: i },\n                skeletonSpan,\n                React.createElement(\"br\", null)));\n        }\n    }\n    return (React.createElement(\"span\", { className: containerClassName, \"data-testid\": containerTestId, \"aria-live\": \"polite\", \"aria-busy\": (_c = styleOptions.enableAnimation) !== null && _c !== void 0 ? _c : defaultEnableAnimation }, Wrapper\n        ? elements.map((el, i) => React.createElement(Wrapper, { key: i }, el))\n        : elements));\n}\n\nfunction SkeletonTheme({ children, ...styleOptions }) {\n    return (React.createElement(SkeletonThemeContext.Provider, { value: styleOptions }, children));\n}\n\nexports.SkeletonTheme = SkeletonTheme;\nexports.default = Skeleton;\n","import { Component, ComponentContainer } from '@firebase/component';\nimport { Logger, setUserLogHandler, setLogLevel as setLogLevel$1 } from '@firebase/logger';\nimport { ErrorFactory, getDefaultAppConfig, deepEqual, isBrowser, isWebWorker, FirebaseError, base64urlEncodeWithoutPadding, isIndexedDBAvailable, validateIndexedDBOpenable } from '@firebase/util';\nexport { FirebaseError } from '@firebase/util';\nimport { openDB } from 'idb';\n\n/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nclass PlatformLoggerServiceImpl {\n    constructor(container) {\n        this.container = container;\n    }\n    // In initial implementation, this will be called by installations on\n    // auth token refresh, and installations will send this string.\n    getPlatformInfoString() {\n        const providers = this.container.getProviders();\n        // Loop through providers and get library/version pairs from any that are\n        // version components.\n        return providers\n            .map(provider => {\n            if (isVersionServiceProvider(provider)) {\n                const service = provider.getImmediate();\n                return `${service.library}/${service.version}`;\n            }\n            else {\n                return null;\n            }\n        })\n            .filter(logString => logString)\n            .join(' ');\n    }\n}\n/**\n *\n * @param provider check if this provider provides a VersionService\n *\n * NOTE: Using Provider<'app-version'> is a hack to indicate that the provider\n * provides VersionService. The provider is not necessarily a 'app-version'\n * provider.\n */\nfunction isVersionServiceProvider(provider) {\n    const component = provider.getComponent();\n    return (component === null || component === void 0 ? void 0 : component.type) === \"VERSION\" /* ComponentType.VERSION */;\n}\n\nconst name$q = \"@firebase/app\";\nconst version$1 = \"0.10.16\";\n\n/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nconst logger = new Logger('@firebase/app');\n\nconst name$p = \"@firebase/app-compat\";\n\nconst name$o = \"@firebase/analytics-compat\";\n\nconst name$n = \"@firebase/analytics\";\n\nconst name$m = \"@firebase/app-check-compat\";\n\nconst name$l = \"@firebase/app-check\";\n\nconst name$k = \"@firebase/auth\";\n\nconst name$j = \"@firebase/auth-compat\";\n\nconst name$i = \"@firebase/database\";\n\nconst name$h = \"@firebase/data-connect\";\n\nconst name$g = \"@firebase/database-compat\";\n\nconst name$f = \"@firebase/functions\";\n\nconst name$e = \"@firebase/functions-compat\";\n\nconst name$d = \"@firebase/installations\";\n\nconst name$c = \"@firebase/installations-compat\";\n\nconst name$b = \"@firebase/messaging\";\n\nconst name$a = \"@firebase/messaging-compat\";\n\nconst name$9 = \"@firebase/performance\";\n\nconst name$8 = \"@firebase/performance-compat\";\n\nconst name$7 = \"@firebase/remote-config\";\n\nconst name$6 = \"@firebase/remote-config-compat\";\n\nconst name$5 = \"@firebase/storage\";\n\nconst name$4 = \"@firebase/storage-compat\";\n\nconst name$3 = \"@firebase/firestore\";\n\nconst name$2 = \"@firebase/vertexai\";\n\nconst name$1 = \"@firebase/firestore-compat\";\n\nconst name = \"firebase\";\nconst version = \"11.0.2\";\n\n/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * The default app name\n *\n * @internal\n */\nconst DEFAULT_ENTRY_NAME = '[DEFAULT]';\nconst PLATFORM_LOG_STRING = {\n    [name$q]: 'fire-core',\n    [name$p]: 'fire-core-compat',\n    [name$n]: 'fire-analytics',\n    [name$o]: 'fire-analytics-compat',\n    [name$l]: 'fire-app-check',\n    [name$m]: 'fire-app-check-compat',\n    [name$k]: 'fire-auth',\n    [name$j]: 'fire-auth-compat',\n    [name$i]: 'fire-rtdb',\n    [name$h]: 'fire-data-connect',\n    [name$g]: 'fire-rtdb-compat',\n    [name$f]: 'fire-fn',\n    [name$e]: 'fire-fn-compat',\n    [name$d]: 'fire-iid',\n    [name$c]: 'fire-iid-compat',\n    [name$b]: 'fire-fcm',\n    [name$a]: 'fire-fcm-compat',\n    [name$9]: 'fire-perf',\n    [name$8]: 'fire-perf-compat',\n    [name$7]: 'fire-rc',\n    [name$6]: 'fire-rc-compat',\n    [name$5]: 'fire-gcs',\n    [name$4]: 'fire-gcs-compat',\n    [name$3]: 'fire-fst',\n    [name$1]: 'fire-fst-compat',\n    [name$2]: 'fire-vertex',\n    'fire-js': 'fire-js', // Platform identifier for JS SDK.\n    [name]: 'fire-js-all'\n};\n\n/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * @internal\n */\nconst _apps = new Map();\n/**\n * @internal\n */\nconst _serverApps = new Map();\n/**\n * Registered components.\n *\n * @internal\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst _components = new Map();\n/**\n * @param component - the component being added to this app's container\n *\n * @internal\n */\nfunction _addComponent(app, component) {\n    try {\n        app.container.addComponent(component);\n    }\n    catch (e) {\n        logger.debug(`Component ${component.name} failed to register with FirebaseApp ${app.name}`, e);\n    }\n}\n/**\n *\n * @internal\n */\nfunction _addOrOverwriteComponent(app, component) {\n    app.container.addOrOverwriteComponent(component);\n}\n/**\n *\n * @param component - the component to register\n * @returns whether or not the component is registered successfully\n *\n * @internal\n */\nfunction _registerComponent(component) {\n    const componentName = component.name;\n    if (_components.has(componentName)) {\n        logger.debug(`There were multiple attempts to register component ${componentName}.`);\n        return false;\n    }\n    _components.set(componentName, component);\n    // add the component to existing app instances\n    for (const app of _apps.values()) {\n        _addComponent(app, component);\n    }\n    for (const serverApp of _serverApps.values()) {\n        _addComponent(serverApp, component);\n    }\n    return true;\n}\n/**\n *\n * @param app - FirebaseApp instance\n * @param name - service name\n *\n * @returns the provider for the service with the matching name\n *\n * @internal\n */\nfunction _getProvider(app, name) {\n    const heartbeatController = app.container\n        .getProvider('heartbeat')\n        .getImmediate({ optional: true });\n    if (heartbeatController) {\n        void heartbeatController.triggerHeartbeat();\n    }\n    return app.container.getProvider(name);\n}\n/**\n *\n * @param app - FirebaseApp instance\n * @param name - service name\n * @param instanceIdentifier - service instance identifier in case the service supports multiple instances\n *\n * @internal\n */\nfunction _removeServiceInstance(app, name, instanceIdentifier = DEFAULT_ENTRY_NAME) {\n    _getProvider(app, name).clearInstance(instanceIdentifier);\n}\n/**\n *\n * @param obj - an object of type FirebaseApp or FirebaseOptions.\n *\n * @returns true if the provide object is of type FirebaseApp.\n *\n * @internal\n */\nfunction _isFirebaseApp(obj) {\n    return obj.options !== undefined;\n}\n/**\n *\n * @param obj - an object of type FirebaseApp.\n *\n * @returns true if the provided object is of type FirebaseServerAppImpl.\n *\n * @internal\n */\nfunction _isFirebaseServerApp(obj) {\n    return obj.settings !== undefined;\n}\n/**\n * Test only\n *\n * @internal\n */\nfunction _clearComponents() {\n    _components.clear();\n}\n\n/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nconst ERRORS = {\n    [\"no-app\" /* AppError.NO_APP */]: \"No Firebase App '{$appName}' has been created - \" +\n        'call initializeApp() first',\n    [\"bad-app-name\" /* AppError.BAD_APP_NAME */]: \"Illegal App name: '{$appName}'\",\n    [\"duplicate-app\" /* AppError.DUPLICATE_APP */]: \"Firebase App named '{$appName}' already exists with different options or config\",\n    [\"app-deleted\" /* AppError.APP_DELETED */]: \"Firebase App named '{$appName}' already deleted\",\n    [\"server-app-deleted\" /* AppError.SERVER_APP_DELETED */]: 'Firebase Server App has been deleted',\n    [\"no-options\" /* AppError.NO_OPTIONS */]: 'Need to provide options, when not being deployed to hosting via source.',\n    [\"invalid-app-argument\" /* AppError.INVALID_APP_ARGUMENT */]: 'firebase.{$appName}() takes either no argument or a ' +\n        'Firebase App instance.',\n    [\"invalid-log-argument\" /* AppError.INVALID_LOG_ARGUMENT */]: 'First argument to `onLog` must be null or a function.',\n    [\"idb-open\" /* AppError.IDB_OPEN */]: 'Error thrown when opening IndexedDB. Original error: {$originalErrorMessage}.',\n    [\"idb-get\" /* AppError.IDB_GET */]: 'Error thrown when reading from IndexedDB. Original error: {$originalErrorMessage}.',\n    [\"idb-set\" /* AppError.IDB_WRITE */]: 'Error thrown when writing to IndexedDB. Original error: {$originalErrorMessage}.',\n    [\"idb-delete\" /* AppError.IDB_DELETE */]: 'Error thrown when deleting from IndexedDB. Original error: {$originalErrorMessage}.',\n    [\"finalization-registry-not-supported\" /* AppError.FINALIZATION_REGISTRY_NOT_SUPPORTED */]: 'FirebaseServerApp deleteOnDeref field defined but the JS runtime does not support FinalizationRegistry.',\n    [\"invalid-server-app-environment\" /* AppError.INVALID_SERVER_APP_ENVIRONMENT */]: 'FirebaseServerApp is not for use in browser environments.'\n};\nconst ERROR_FACTORY = new ErrorFactory('app', 'Firebase', ERRORS);\n\n/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nclass FirebaseAppImpl {\n    constructor(options, config, container) {\n        this._isDeleted = false;\n        this._options = Object.assign({}, options);\n        this._config = Object.assign({}, config);\n        this._name = config.name;\n        this._automaticDataCollectionEnabled =\n            config.automaticDataCollectionEnabled;\n        this._container = container;\n        this.container.addComponent(new Component('app', () => this, \"PUBLIC\" /* ComponentType.PUBLIC */));\n    }\n    get automaticDataCollectionEnabled() {\n        this.checkDestroyed();\n        return this._automaticDataCollectionEnabled;\n    }\n    set automaticDataCollectionEnabled(val) {\n        this.checkDestroyed();\n        this._automaticDataCollectionEnabled = val;\n    }\n    get name() {\n        this.checkDestroyed();\n        return this._name;\n    }\n    get options() {\n        this.checkDestroyed();\n        return this._options;\n    }\n    get config() {\n        this.checkDestroyed();\n        return this._config;\n    }\n    get container() {\n        return this._container;\n    }\n    get isDeleted() {\n        return this._isDeleted;\n    }\n    set isDeleted(val) {\n        this._isDeleted = val;\n    }\n    /**\n     * This function will throw an Error if the App has already been deleted -\n     * use before performing API actions on the App.\n     */\n    checkDestroyed() {\n        if (this.isDeleted) {\n            throw ERROR_FACTORY.create(\"app-deleted\" /* AppError.APP_DELETED */, { appName: this._name });\n        }\n    }\n}\n\n/**\n * @license\n * Copyright 2023 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nclass FirebaseServerAppImpl extends FirebaseAppImpl {\n    constructor(options, serverConfig, name, container) {\n        // Build configuration parameters for the FirebaseAppImpl base class.\n        const automaticDataCollectionEnabled = serverConfig.automaticDataCollectionEnabled !== undefined\n            ? serverConfig.automaticDataCollectionEnabled\n            : false;\n        // Create the FirebaseAppSettings object for the FirebaseAppImp constructor.\n        const config = {\n            name,\n            automaticDataCollectionEnabled\n        };\n        if (options.apiKey !== undefined) {\n            // Construct the parent FirebaseAppImp object.\n            super(options, config, container);\n        }\n        else {\n            const appImpl = options;\n            super(appImpl.options, config, container);\n        }\n        // Now construct the data for the FirebaseServerAppImpl.\n        this._serverConfig = Object.assign({ automaticDataCollectionEnabled }, serverConfig);\n        this._finalizationRegistry = null;\n        if (typeof FinalizationRegistry !== 'undefined') {\n            this._finalizationRegistry = new FinalizationRegistry(() => {\n                this.automaticCleanup();\n            });\n        }\n        this._refCount = 0;\n        this.incRefCount(this._serverConfig.releaseOnDeref);\n        // Do not retain a hard reference to the dref object, otherwise the FinalizationRegistry\n        // will never trigger.\n        this._serverConfig.releaseOnDeref = undefined;\n        serverConfig.releaseOnDeref = undefined;\n        registerVersion(name$q, version$1, 'serverapp');\n    }\n    toJSON() {\n        return undefined;\n    }\n    get refCount() {\n        return this._refCount;\n    }\n    // Increment the reference count of this server app. If an object is provided, register it\n    // with the finalization registry.\n    incRefCount(obj) {\n        if (this.isDeleted) {\n            return;\n        }\n        this._refCount++;\n        if (obj !== undefined && this._finalizationRegistry !== null) {\n            this._finalizationRegistry.register(obj, this);\n        }\n    }\n    // Decrement the reference count.\n    decRefCount() {\n        if (this.isDeleted) {\n            return 0;\n        }\n        return --this._refCount;\n    }\n    // Invoked by the FinalizationRegistry callback to note that this app should go through its\n    // reference counts and delete itself if no reference count remain. The coordinating logic that\n    // handles this is in deleteApp(...).\n    automaticCleanup() {\n        void deleteApp(this);\n    }\n    get settings() {\n        this.checkDestroyed();\n        return this._serverConfig;\n    }\n    /**\n     * This function will throw an Error if the App has already been deleted -\n     * use before performing API actions on the App.\n     */\n    checkDestroyed() {\n        if (this.isDeleted) {\n            throw ERROR_FACTORY.create(\"server-app-deleted\" /* AppError.SERVER_APP_DELETED */);\n        }\n    }\n}\n\n/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * The current SDK version.\n *\n * @public\n */\nconst SDK_VERSION = version;\nfunction initializeApp(_options, rawConfig = {}) {\n    let options = _options;\n    if (typeof rawConfig !== 'object') {\n        const name = rawConfig;\n        rawConfig = { name };\n    }\n    const config = Object.assign({ name: DEFAULT_ENTRY_NAME, automaticDataCollectionEnabled: false }, rawConfig);\n    const name = config.name;\n    if (typeof name !== 'string' || !name) {\n        throw ERROR_FACTORY.create(\"bad-app-name\" /* AppError.BAD_APP_NAME */, {\n            appName: String(name)\n        });\n    }\n    options || (options = getDefaultAppConfig());\n    if (!options) {\n        throw ERROR_FACTORY.create(\"no-options\" /* AppError.NO_OPTIONS */);\n    }\n    const existingApp = _apps.get(name);\n    if (existingApp) {\n        // return the existing app if options and config deep equal the ones in the existing app.\n        if (deepEqual(options, existingApp.options) &&\n            deepEqual(config, existingApp.config)) {\n            return existingApp;\n        }\n        else {\n            throw ERROR_FACTORY.create(\"duplicate-app\" /* AppError.DUPLICATE_APP */, { appName: name });\n        }\n    }\n    const container = new ComponentContainer(name);\n    for (const component of _components.values()) {\n        container.addComponent(component);\n    }\n    const newApp = new FirebaseAppImpl(options, config, container);\n    _apps.set(name, newApp);\n    return newApp;\n}\nfunction initializeServerApp(_options, _serverAppConfig) {\n    if (isBrowser() && !isWebWorker()) {\n        // FirebaseServerApp isn't designed to be run in browsers.\n        throw ERROR_FACTORY.create(\"invalid-server-app-environment\" /* AppError.INVALID_SERVER_APP_ENVIRONMENT */);\n    }\n    if (_serverAppConfig.automaticDataCollectionEnabled === undefined) {\n        _serverAppConfig.automaticDataCollectionEnabled = false;\n    }\n    let appOptions;\n    if (_isFirebaseApp(_options)) {\n        appOptions = _options.options;\n    }\n    else {\n        appOptions = _options;\n    }\n    // Build an app name based on a hash of the configuration options.\n    const nameObj = Object.assign(Object.assign({}, _serverAppConfig), appOptions);\n    // However, Do not mangle the name based on releaseOnDeref, since it will vary between the\n    // construction of FirebaseServerApp instances. For example, if the object is the request headers.\n    if (nameObj.releaseOnDeref !== undefined) {\n        delete nameObj.releaseOnDeref;\n    }\n    const hashCode = (s) => {\n        return [...s].reduce((hash, c) => (Math.imul(31, hash) + c.charCodeAt(0)) | 0, 0);\n    };\n    if (_serverAppConfig.releaseOnDeref !== undefined) {\n        if (typeof FinalizationRegistry === 'undefined') {\n            throw ERROR_FACTORY.create(\"finalization-registry-not-supported\" /* AppError.FINALIZATION_REGISTRY_NOT_SUPPORTED */, {});\n        }\n    }\n    const nameString = '' + hashCode(JSON.stringify(nameObj));\n    const existingApp = _serverApps.get(nameString);\n    if (existingApp) {\n        existingApp.incRefCount(_serverAppConfig.releaseOnDeref);\n        return existingApp;\n    }\n    const container = new ComponentContainer(nameString);\n    for (const component of _components.values()) {\n        container.addComponent(component);\n    }\n    const newApp = new FirebaseServerAppImpl(appOptions, _serverAppConfig, nameString, container);\n    _serverApps.set(nameString, newApp);\n    return newApp;\n}\n/**\n * Retrieves a {@link @firebase/app#FirebaseApp} instance.\n *\n * When called with no arguments, the default app is returned. When an app name\n * is provided, the app corresponding to that name is returned.\n *\n * An exception is thrown if the app being retrieved has not yet been\n * initialized.\n *\n * @example\n * ```javascript\n * // Return the default app\n * const app = getApp();\n * ```\n *\n * @example\n * ```javascript\n * // Return a named app\n * const otherApp = getApp(\"otherApp\");\n * ```\n *\n * @param name - Optional name of the app to return. If no name is\n *   provided, the default is `\"[DEFAULT]\"`.\n *\n * @returns The app corresponding to the provided app name.\n *   If no app name is provided, the default app is returned.\n *\n * @public\n */\nfunction getApp(name = DEFAULT_ENTRY_NAME) {\n    const app = _apps.get(name);\n    if (!app && name === DEFAULT_ENTRY_NAME && getDefaultAppConfig()) {\n        return initializeApp();\n    }\n    if (!app) {\n        throw ERROR_FACTORY.create(\"no-app\" /* AppError.NO_APP */, { appName: name });\n    }\n    return app;\n}\n/**\n * A (read-only) array of all initialized apps.\n * @public\n */\nfunction getApps() {\n    return Array.from(_apps.values());\n}\n/**\n * Renders this app unusable and frees the resources of all associated\n * services.\n *\n * @example\n * ```javascript\n * deleteApp(app)\n *   .then(function() {\n *     console.log(\"App deleted successfully\");\n *   })\n *   .catch(function(error) {\n *     console.log(\"Error deleting app:\", error);\n *   });\n * ```\n *\n * @public\n */\nasync function deleteApp(app) {\n    let cleanupProviders = false;\n    const name = app.name;\n    if (_apps.has(name)) {\n        cleanupProviders = true;\n        _apps.delete(name);\n    }\n    else if (_serverApps.has(name)) {\n        const firebaseServerApp = app;\n        if (firebaseServerApp.decRefCount() <= 0) {\n            _serverApps.delete(name);\n            cleanupProviders = true;\n        }\n    }\n    if (cleanupProviders) {\n        await Promise.all(app.container\n            .getProviders()\n            .map(provider => provider.delete()));\n        app.isDeleted = true;\n    }\n}\n/**\n * Registers a library's name and version for platform logging purposes.\n * @param library - Name of 1p or 3p library (e.g. firestore, angularfire)\n * @param version - Current version of that library.\n * @param variant - Bundle variant, e.g., node, rn, etc.\n *\n * @public\n */\nfunction registerVersion(libraryKeyOrName, version, variant) {\n    var _a;\n    // TODO: We can use this check to whitelist strings when/if we set up\n    // a good whitelist system.\n    let library = (_a = PLATFORM_LOG_STRING[libraryKeyOrName]) !== null && _a !== void 0 ? _a : libraryKeyOrName;\n    if (variant) {\n        library += `-${variant}`;\n    }\n    const libraryMismatch = library.match(/\\s|\\//);\n    const versionMismatch = version.match(/\\s|\\//);\n    if (libraryMismatch || versionMismatch) {\n        const warning = [\n            `Unable to register library \"${library}\" with version \"${version}\":`\n        ];\n        if (libraryMismatch) {\n            warning.push(`library name \"${library}\" contains illegal characters (whitespace or \"/\")`);\n        }\n        if (libraryMismatch && versionMismatch) {\n            warning.push('and');\n        }\n        if (versionMismatch) {\n            warning.push(`version name \"${version}\" contains illegal characters (whitespace or \"/\")`);\n        }\n        logger.warn(warning.join(' '));\n        return;\n    }\n    _registerComponent(new Component(`${library}-version`, () => ({ library, version }), \"VERSION\" /* ComponentType.VERSION */));\n}\n/**\n * Sets log handler for all Firebase SDKs.\n * @param logCallback - An optional custom log handler that executes user code whenever\n * the Firebase SDK makes a logging call.\n *\n * @public\n */\nfunction onLog(logCallback, options) {\n    if (logCallback !== null && typeof logCallback !== 'function') {\n        throw ERROR_FACTORY.create(\"invalid-log-argument\" /* AppError.INVALID_LOG_ARGUMENT */);\n    }\n    setUserLogHandler(logCallback, options);\n}\n/**\n * Sets log level for all Firebase SDKs.\n *\n * All of the log types above the current log level are captured (i.e. if\n * you set the log level to `info`, errors are logged, but `debug` and\n * `verbose` logs are not).\n *\n * @public\n */\nfunction setLogLevel(logLevel) {\n    setLogLevel$1(logLevel);\n}\n\n/**\n * @license\n * Copyright 2021 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nconst DB_NAME = 'firebase-heartbeat-database';\nconst DB_VERSION = 1;\nconst STORE_NAME = 'firebase-heartbeat-store';\nlet dbPromise = null;\nfunction getDbPromise() {\n    if (!dbPromise) {\n        dbPromise = openDB(DB_NAME, DB_VERSION, {\n            upgrade: (db, oldVersion) => {\n                // We don't use 'break' in this switch statement, the fall-through\n                // behavior is what we want, because if there are multiple versions between\n                // the old version and the current version, we want ALL the migrations\n                // that correspond to those versions to run, not only the last one.\n                // eslint-disable-next-line default-case\n                switch (oldVersion) {\n                    case 0:\n                        try {\n                            db.createObjectStore(STORE_NAME);\n                        }\n                        catch (e) {\n                            // Safari/iOS browsers throw occasional exceptions on\n                            // db.createObjectStore() that may be a bug. Avoid blocking\n                            // the rest of the app functionality.\n                            console.warn(e);\n                        }\n                }\n            }\n        }).catch(e => {\n            throw ERROR_FACTORY.create(\"idb-open\" /* AppError.IDB_OPEN */, {\n                originalErrorMessage: e.message\n            });\n        });\n    }\n    return dbPromise;\n}\nasync function readHeartbeatsFromIndexedDB(app) {\n    try {\n        const db = await getDbPromise();\n        const tx = db.transaction(STORE_NAME);\n        const result = await tx.objectStore(STORE_NAME).get(computeKey(app));\n        // We already have the value but tx.done can throw,\n        // so we need to await it here to catch errors\n        await tx.done;\n        return result;\n    }\n    catch (e) {\n        if (e instanceof FirebaseError) {\n            logger.warn(e.message);\n        }\n        else {\n            const idbGetError = ERROR_FACTORY.create(\"idb-get\" /* AppError.IDB_GET */, {\n                originalErrorMessage: e === null || e === void 0 ? void 0 : e.message\n            });\n            logger.warn(idbGetError.message);\n        }\n    }\n}\nasync function writeHeartbeatsToIndexedDB(app, heartbeatObject) {\n    try {\n        const db = await getDbPromise();\n        const tx = db.transaction(STORE_NAME, 'readwrite');\n        const objectStore = tx.objectStore(STORE_NAME);\n        await objectStore.put(heartbeatObject, computeKey(app));\n        await tx.done;\n    }\n    catch (e) {\n        if (e instanceof FirebaseError) {\n            logger.warn(e.message);\n        }\n        else {\n            const idbGetError = ERROR_FACTORY.create(\"idb-set\" /* AppError.IDB_WRITE */, {\n                originalErrorMessage: e === null || e === void 0 ? void 0 : e.message\n            });\n            logger.warn(idbGetError.message);\n        }\n    }\n}\nfunction computeKey(app) {\n    return `${app.name}!${app.options.appId}`;\n}\n\n/**\n * @license\n * Copyright 2021 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nconst MAX_HEADER_BYTES = 1024;\n// 30 days\nconst STORED_HEARTBEAT_RETENTION_MAX_MILLIS = 30 * 24 * 60 * 60 * 1000;\nclass HeartbeatServiceImpl {\n    constructor(container) {\n        this.container = container;\n        /**\n         * In-memory cache for heartbeats, used by getHeartbeatsHeader() to generate\n         * the header string.\n         * Stores one record per date. This will be consolidated into the standard\n         * format of one record per user agent string before being sent as a header.\n         * Populated from indexedDB when the controller is instantiated and should\n         * be kept in sync with indexedDB.\n         * Leave public for easier testing.\n         */\n        this._heartbeatsCache = null;\n        const app = this.container.getProvider('app').getImmediate();\n        this._storage = new HeartbeatStorageImpl(app);\n        this._heartbeatsCachePromise = this._storage.read().then(result => {\n            this._heartbeatsCache = result;\n            return result;\n        });\n    }\n    /**\n     * Called to report a heartbeat. The function will generate\n     * a HeartbeatsByUserAgent object, update heartbeatsCache, and persist it\n     * to IndexedDB.\n     * Note that we only store one heartbeat per day. So if a heartbeat for today is\n     * already logged, subsequent calls to this function in the same day will be ignored.\n     */\n    async triggerHeartbeat() {\n        var _a, _b;\n        try {\n            const platformLogger = this.container\n                .getProvider('platform-logger')\n                .getImmediate();\n            // This is the \"Firebase user agent\" string from the platform logger\n            // service, not the browser user agent.\n            const agent = platformLogger.getPlatformInfoString();\n            const date = getUTCDateString();\n            if (((_a = this._heartbeatsCache) === null || _a === void 0 ? void 0 : _a.heartbeats) == null) {\n                this._heartbeatsCache = await this._heartbeatsCachePromise;\n                // If we failed to construct a heartbeats cache, then return immediately.\n                if (((_b = this._heartbeatsCache) === null || _b === void 0 ? void 0 : _b.heartbeats) == null) {\n                    return;\n                }\n            }\n            // Do not store a heartbeat if one is already stored for this day\n            // or if a header has already been sent today.\n            if (this._heartbeatsCache.lastSentHeartbeatDate === date ||\n                this._heartbeatsCache.heartbeats.some(singleDateHeartbeat => singleDateHeartbeat.date === date)) {\n                return;\n            }\n            else {\n                // There is no entry for this date. Create one.\n                this._heartbeatsCache.heartbeats.push({ date, agent });\n            }\n            // Remove entries older than 30 days.\n            this._heartbeatsCache.heartbeats =\n                this._heartbeatsCache.heartbeats.filter(singleDateHeartbeat => {\n                    const hbTimestamp = new Date(singleDateHeartbeat.date).valueOf();\n                    const now = Date.now();\n                    return now - hbTimestamp <= STORED_HEARTBEAT_RETENTION_MAX_MILLIS;\n                });\n            return this._storage.overwrite(this._heartbeatsCache);\n        }\n        catch (e) {\n            logger.warn(e);\n        }\n    }\n    /**\n     * Returns a base64 encoded string which can be attached to the heartbeat-specific header directly.\n     * It also clears all heartbeats from memory as well as in IndexedDB.\n     *\n     * NOTE: Consuming product SDKs should not send the header if this method\n     * returns an empty string.\n     */\n    async getHeartbeatsHeader() {\n        var _a;\n        try {\n            if (this._heartbeatsCache === null) {\n                await this._heartbeatsCachePromise;\n            }\n            // If it's still null or the array is empty, there is no data to send.\n            if (((_a = this._heartbeatsCache) === null || _a === void 0 ? void 0 : _a.heartbeats) == null ||\n                this._heartbeatsCache.heartbeats.length === 0) {\n                return '';\n            }\n            const date = getUTCDateString();\n            // Extract as many heartbeats from the cache as will fit under the size limit.\n            const { heartbeatsToSend, unsentEntries } = extractHeartbeatsForHeader(this._heartbeatsCache.heartbeats);\n            const headerString = base64urlEncodeWithoutPadding(JSON.stringify({ version: 2, heartbeats: heartbeatsToSend }));\n            // Store last sent date to prevent another being logged/sent for the same day.\n            this._heartbeatsCache.lastSentHeartbeatDate = date;\n            if (unsentEntries.length > 0) {\n                // Store any unsent entries if they exist.\n                this._heartbeatsCache.heartbeats = unsentEntries;\n                // This seems more likely than emptying the array (below) to lead to some odd state\n                // since the cache isn't empty and this will be called again on the next request,\n                // and is probably safest if we await it.\n                await this._storage.overwrite(this._heartbeatsCache);\n            }\n            else {\n                this._heartbeatsCache.heartbeats = [];\n                // Do not wait for this, to reduce latency.\n                void this._storage.overwrite(this._heartbeatsCache);\n            }\n            return headerString;\n        }\n        catch (e) {\n            logger.warn(e);\n            return '';\n        }\n    }\n}\nfunction getUTCDateString() {\n    const today = new Date();\n    // Returns date format 'YYYY-MM-DD'\n    return today.toISOString().substring(0, 10);\n}\nfunction extractHeartbeatsForHeader(heartbeatsCache, maxSize = MAX_HEADER_BYTES) {\n    // Heartbeats grouped by user agent in the standard format to be sent in\n    // the header.\n    const heartbeatsToSend = [];\n    // Single date format heartbeats that are not sent.\n    let unsentEntries = heartbeatsCache.slice();\n    for (const singleDateHeartbeat of heartbeatsCache) {\n        // Look for an existing entry with the same user agent.\n        const heartbeatEntry = heartbeatsToSend.find(hb => hb.agent === singleDateHeartbeat.agent);\n        if (!heartbeatEntry) {\n            // If no entry for this user agent exists, create one.\n            heartbeatsToSend.push({\n                agent: singleDateHeartbeat.agent,\n                dates: [singleDateHeartbeat.date]\n            });\n            if (countBytes(heartbeatsToSend) > maxSize) {\n                // If the header would exceed max size, remove the added heartbeat\n                // entry and stop adding to the header.\n                heartbeatsToSend.pop();\n                break;\n            }\n        }\n        else {\n            heartbeatEntry.dates.push(singleDateHeartbeat.date);\n            // If the header would exceed max size, remove the added date\n            // and stop adding to the header.\n            if (countBytes(heartbeatsToSend) > maxSize) {\n                heartbeatEntry.dates.pop();\n                break;\n            }\n        }\n        // Pop unsent entry from queue. (Skipped if adding the entry exceeded\n        // quota and the loop breaks early.)\n        unsentEntries = unsentEntries.slice(1);\n    }\n    return {\n        heartbeatsToSend,\n        unsentEntries\n    };\n}\nclass HeartbeatStorageImpl {\n    constructor(app) {\n        this.app = app;\n        this._canUseIndexedDBPromise = this.runIndexedDBEnvironmentCheck();\n    }\n    async runIndexedDBEnvironmentCheck() {\n        if (!isIndexedDBAvailable()) {\n            return false;\n        }\n        else {\n            return validateIndexedDBOpenable()\n                .then(() => true)\n                .catch(() => false);\n        }\n    }\n    /**\n     * Read all heartbeats.\n     */\n    async read() {\n        const canUseIndexedDB = await this._canUseIndexedDBPromise;\n        if (!canUseIndexedDB) {\n            return { heartbeats: [] };\n        }\n        else {\n            const idbHeartbeatObject = await readHeartbeatsFromIndexedDB(this.app);\n            if (idbHeartbeatObject === null || idbHeartbeatObject === void 0 ? void 0 : idbHeartbeatObject.heartbeats) {\n                return idbHeartbeatObject;\n            }\n            else {\n                return { heartbeats: [] };\n            }\n        }\n    }\n    // overwrite the storage with the provided heartbeats\n    async overwrite(heartbeatsObject) {\n        var _a;\n        const canUseIndexedDB = await this._canUseIndexedDBPromise;\n        if (!canUseIndexedDB) {\n            return;\n        }\n        else {\n            const existingHeartbeatsObject = await this.read();\n            return writeHeartbeatsToIndexedDB(this.app, {\n                lastSentHeartbeatDate: (_a = heartbeatsObject.lastSentHeartbeatDate) !== null && _a !== void 0 ? _a : existingHeartbeatsObject.lastSentHeartbeatDate,\n                heartbeats: heartbeatsObject.heartbeats\n            });\n        }\n    }\n    // add heartbeats\n    async add(heartbeatsObject) {\n        var _a;\n        const canUseIndexedDB = await this._canUseIndexedDBPromise;\n        if (!canUseIndexedDB) {\n            return;\n        }\n        else {\n            const existingHeartbeatsObject = await this.read();\n            return writeHeartbeatsToIndexedDB(this.app, {\n                lastSentHeartbeatDate: (_a = heartbeatsObject.lastSentHeartbeatDate) !== null && _a !== void 0 ? _a : existingHeartbeatsObject.lastSentHeartbeatDate,\n                heartbeats: [\n                    ...existingHeartbeatsObject.heartbeats,\n                    ...heartbeatsObject.heartbeats\n                ]\n            });\n        }\n    }\n}\n/**\n * Calculate bytes of a HeartbeatsByUserAgent array after being wrapped\n * in a platform logging header JSON object, stringified, and converted\n * to base 64.\n */\nfunction countBytes(heartbeatsCache) {\n    // base64 has a restricted set of characters, all of which should be 1 byte.\n    return base64urlEncodeWithoutPadding(\n    // heartbeatsCache wrapper properties\n    JSON.stringify({ version: 2, heartbeats: heartbeatsCache })).length;\n}\n\n/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nfunction registerCoreComponents(variant) {\n    _registerComponent(new Component('platform-logger', container => new PlatformLoggerServiceImpl(container), \"PRIVATE\" /* ComponentType.PRIVATE */));\n    _registerComponent(new Component('heartbeat', container => new HeartbeatServiceImpl(container), \"PRIVATE\" /* ComponentType.PRIVATE */));\n    // Register `app` package.\n    registerVersion(name$q, version$1, variant);\n    // BUILD_TARGET will be replaced by values like esm2017, cjs2017, etc during the compilation\n    registerVersion(name$q, version$1, 'esm2017');\n    // Register platform SDK identifier (no version).\n    registerVersion('fire-js', '');\n}\n\n/**\n * Firebase App\n *\n * @remarks This package coordinates the communication between the different Firebase components\n * @packageDocumentation\n */\nregisterCoreComponents('');\n\nexport { SDK_VERSION, DEFAULT_ENTRY_NAME as _DEFAULT_ENTRY_NAME, _addComponent, _addOrOverwriteComponent, _apps, _clearComponents, _components, _getProvider, _isFirebaseApp, _isFirebaseServerApp, _registerComponent, _removeServiceInstance, _serverApps, deleteApp, getApp, getApps, initializeApp, initializeServerApp, onLog, registerVersion, setLogLevel };\n//# sourceMappingURL=index.esm2017.js.map\n","import { Deferred } from '@firebase/util';\n\n/**\n * Component for service name T, e.g. `auth`, `auth-internal`\n */\nclass Component {\n    /**\n     *\n     * @param name The public service name, e.g. app, auth, firestore, database\n     * @param instanceFactory Service factory responsible for creating the public interface\n     * @param type whether the service provided by the component is public or private\n     */\n    constructor(name, instanceFactory, type) {\n        this.name = name;\n        this.instanceFactory = instanceFactory;\n        this.type = type;\n        this.multipleInstances = false;\n        /**\n         * Properties to be added to the service namespace\n         */\n        this.serviceProps = {};\n        this.instantiationMode = \"LAZY\" /* InstantiationMode.LAZY */;\n        this.onInstanceCreated = null;\n    }\n    setInstantiationMode(mode) {\n        this.instantiationMode = mode;\n        return this;\n    }\n    setMultipleInstances(multipleInstances) {\n        this.multipleInstances = multipleInstances;\n        return this;\n    }\n    setServiceProps(props) {\n        this.serviceProps = props;\n        return this;\n    }\n    setInstanceCreatedCallback(callback) {\n        this.onInstanceCreated = callback;\n        return this;\n    }\n}\n\n/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nconst DEFAULT_ENTRY_NAME = '[DEFAULT]';\n\n/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Provider for instance for service name T, e.g. 'auth', 'auth-internal'\n * NameServiceMapping[T] is an alias for the type of the instance\n */\nclass Provider {\n    constructor(name, container) {\n        this.name = name;\n        this.container = container;\n        this.component = null;\n        this.instances = new Map();\n        this.instancesDeferred = new Map();\n        this.instancesOptions = new Map();\n        this.onInitCallbacks = new Map();\n    }\n    /**\n     * @param identifier A provider can provide multiple instances of a service\n     * if this.component.multipleInstances is true.\n     */\n    get(identifier) {\n        // if multipleInstances is not supported, use the default name\n        const normalizedIdentifier = this.normalizeInstanceIdentifier(identifier);\n        if (!this.instancesDeferred.has(normalizedIdentifier)) {\n            const deferred = new Deferred();\n            this.instancesDeferred.set(normalizedIdentifier, deferred);\n            if (this.isInitialized(normalizedIdentifier) ||\n                this.shouldAutoInitialize()) {\n                // initialize the service if it can be auto-initialized\n                try {\n                    const instance = this.getOrInitializeService({\n                        instanceIdentifier: normalizedIdentifier\n                    });\n                    if (instance) {\n                        deferred.resolve(instance);\n                    }\n                }\n                catch (e) {\n                    // when the instance factory throws an exception during get(), it should not cause\n                    // a fatal error. We just return the unresolved promise in this case.\n                }\n            }\n        }\n        return this.instancesDeferred.get(normalizedIdentifier).promise;\n    }\n    getImmediate(options) {\n        var _a;\n        // if multipleInstances is not supported, use the default name\n        const normalizedIdentifier = this.normalizeInstanceIdentifier(options === null || options === void 0 ? void 0 : options.identifier);\n        const optional = (_a = options === null || options === void 0 ? void 0 : options.optional) !== null && _a !== void 0 ? _a : false;\n        if (this.isInitialized(normalizedIdentifier) ||\n            this.shouldAutoInitialize()) {\n            try {\n                return this.getOrInitializeService({\n                    instanceIdentifier: normalizedIdentifier\n                });\n            }\n            catch (e) {\n                if (optional) {\n                    return null;\n                }\n                else {\n                    throw e;\n                }\n            }\n        }\n        else {\n            // In case a component is not initialized and should/cannot be auto-initialized at the moment, return null if the optional flag is set, or throw\n            if (optional) {\n                return null;\n            }\n            else {\n                throw Error(`Service ${this.name} is not available`);\n            }\n        }\n    }\n    getComponent() {\n        return this.component;\n    }\n    setComponent(component) {\n        if (component.name !== this.name) {\n            throw Error(`Mismatching Component ${component.name} for Provider ${this.name}.`);\n        }\n        if (this.component) {\n            throw Error(`Component for ${this.name} has already been provided`);\n        }\n        this.component = component;\n        // return early without attempting to initialize the component if the component requires explicit initialization (calling `Provider.initialize()`)\n        if (!this.shouldAutoInitialize()) {\n            return;\n        }\n        // if the service is eager, initialize the default instance\n        if (isComponentEager(component)) {\n            try {\n                this.getOrInitializeService({ instanceIdentifier: DEFAULT_ENTRY_NAME });\n            }\n            catch (e) {\n                // when the instance factory for an eager Component throws an exception during the eager\n                // initialization, it should not cause a fatal error.\n                // TODO: Investigate if we need to make it configurable, because some component may want to cause\n                // a fatal error in this case?\n            }\n        }\n        // Create service instances for the pending promises and resolve them\n        // NOTE: if this.multipleInstances is false, only the default instance will be created\n        // and all promises with resolve with it regardless of the identifier.\n        for (const [instanceIdentifier, instanceDeferred] of this.instancesDeferred.entries()) {\n            const normalizedIdentifier = this.normalizeInstanceIdentifier(instanceIdentifier);\n            try {\n                // `getOrInitializeService()` should always return a valid instance since a component is guaranteed. use ! to make typescript happy.\n                const instance = this.getOrInitializeService({\n                    instanceIdentifier: normalizedIdentifier\n                });\n                instanceDeferred.resolve(instance);\n            }\n            catch (e) {\n                // when the instance factory throws an exception, it should not cause\n                // a fatal error. We just leave the promise unresolved.\n            }\n        }\n    }\n    clearInstance(identifier = DEFAULT_ENTRY_NAME) {\n        this.instancesDeferred.delete(identifier);\n        this.instancesOptions.delete(identifier);\n        this.instances.delete(identifier);\n    }\n    // app.delete() will call this method on every provider to delete the services\n    // TODO: should we mark the provider as deleted?\n    async delete() {\n        const services = Array.from(this.instances.values());\n        await Promise.all([\n            ...services\n                .filter(service => 'INTERNAL' in service) // legacy services\n                // eslint-disable-next-line @typescript-eslint/no-explicit-any\n                .map(service => service.INTERNAL.delete()),\n            ...services\n                .filter(service => '_delete' in service) // modularized services\n                // eslint-disable-next-line @typescript-eslint/no-explicit-any\n                .map(service => service._delete())\n        ]);\n    }\n    isComponentSet() {\n        return this.component != null;\n    }\n    isInitialized(identifier = DEFAULT_ENTRY_NAME) {\n        return this.instances.has(identifier);\n    }\n    getOptions(identifier = DEFAULT_ENTRY_NAME) {\n        return this.instancesOptions.get(identifier) || {};\n    }\n    initialize(opts = {}) {\n        const { options = {} } = opts;\n        const normalizedIdentifier = this.normalizeInstanceIdentifier(opts.instanceIdentifier);\n        if (this.isInitialized(normalizedIdentifier)) {\n            throw Error(`${this.name}(${normalizedIdentifier}) has already been initialized`);\n        }\n        if (!this.isComponentSet()) {\n            throw Error(`Component ${this.name} has not been registered yet`);\n        }\n        const instance = this.getOrInitializeService({\n            instanceIdentifier: normalizedIdentifier,\n            options\n        });\n        // resolve any pending promise waiting for the service instance\n        for (const [instanceIdentifier, instanceDeferred] of this.instancesDeferred.entries()) {\n            const normalizedDeferredIdentifier = this.normalizeInstanceIdentifier(instanceIdentifier);\n            if (normalizedIdentifier === normalizedDeferredIdentifier) {\n                instanceDeferred.resolve(instance);\n            }\n        }\n        return instance;\n    }\n    /**\n     *\n     * @param callback - a function that will be invoked  after the provider has been initialized by calling provider.initialize().\n     * The function is invoked SYNCHRONOUSLY, so it should not execute any longrunning tasks in order to not block the program.\n     *\n     * @param identifier An optional instance identifier\n     * @returns a function to unregister the callback\n     */\n    onInit(callback, identifier) {\n        var _a;\n        const normalizedIdentifier = this.normalizeInstanceIdentifier(identifier);\n        const existingCallbacks = (_a = this.onInitCallbacks.get(normalizedIdentifier)) !== null && _a !== void 0 ? _a : new Set();\n        existingCallbacks.add(callback);\n        this.onInitCallbacks.set(normalizedIdentifier, existingCallbacks);\n        const existingInstance = this.instances.get(normalizedIdentifier);\n        if (existingInstance) {\n            callback(existingInstance, normalizedIdentifier);\n        }\n        return () => {\n            existingCallbacks.delete(callback);\n        };\n    }\n    /**\n     * Invoke onInit callbacks synchronously\n     * @param instance the service instance`\n     */\n    invokeOnInitCallbacks(instance, identifier) {\n        const callbacks = this.onInitCallbacks.get(identifier);\n        if (!callbacks) {\n            return;\n        }\n        for (const callback of callbacks) {\n            try {\n                callback(instance, identifier);\n            }\n            catch (_a) {\n                // ignore errors in the onInit callback\n            }\n        }\n    }\n    getOrInitializeService({ instanceIdentifier, options = {} }) {\n        let instance = this.instances.get(instanceIdentifier);\n        if (!instance && this.component) {\n            instance = this.component.instanceFactory(this.container, {\n                instanceIdentifier: normalizeIdentifierForFactory(instanceIdentifier),\n                options\n            });\n            this.instances.set(instanceIdentifier, instance);\n            this.instancesOptions.set(instanceIdentifier, options);\n            /**\n             * Invoke onInit listeners.\n             * Note this.component.onInstanceCreated is different, which is used by the component creator,\n             * while onInit listeners are registered by consumers of the provider.\n             */\n            this.invokeOnInitCallbacks(instance, instanceIdentifier);\n            /**\n             * Order is important\n             * onInstanceCreated() should be called after this.instances.set(instanceIdentifier, instance); which\n             * makes `isInitialized()` return true.\n             */\n            if (this.component.onInstanceCreated) {\n                try {\n                    this.component.onInstanceCreated(this.container, instanceIdentifier, instance);\n                }\n                catch (_a) {\n                    // ignore errors in the onInstanceCreatedCallback\n                }\n            }\n        }\n        return instance || null;\n    }\n    normalizeInstanceIdentifier(identifier = DEFAULT_ENTRY_NAME) {\n        if (this.component) {\n            return this.component.multipleInstances ? identifier : DEFAULT_ENTRY_NAME;\n        }\n        else {\n            return identifier; // assume multiple instances are supported before the component is provided.\n        }\n    }\n    shouldAutoInitialize() {\n        return (!!this.component &&\n            this.component.instantiationMode !== \"EXPLICIT\" /* InstantiationMode.EXPLICIT */);\n    }\n}\n// undefined should be passed to the service factory for the default instance\nfunction normalizeIdentifierForFactory(identifier) {\n    return identifier === DEFAULT_ENTRY_NAME ? undefined : identifier;\n}\nfunction isComponentEager(component) {\n    return component.instantiationMode === \"EAGER\" /* InstantiationMode.EAGER */;\n}\n\n/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * ComponentContainer that provides Providers for service name T, e.g. `auth`, `auth-internal`\n */\nclass ComponentContainer {\n    constructor(name) {\n        this.name = name;\n        this.providers = new Map();\n    }\n    /**\n     *\n     * @param component Component being added\n     * @param overwrite When a component with the same name has already been registered,\n     * if overwrite is true: overwrite the existing component with the new component and create a new\n     * provider with the new component. It can be useful in tests where you want to use different mocks\n     * for different tests.\n     * if overwrite is false: throw an exception\n     */\n    addComponent(component) {\n        const provider = this.getProvider(component.name);\n        if (provider.isComponentSet()) {\n            throw new Error(`Component ${component.name} has already been registered with ${this.name}`);\n        }\n        provider.setComponent(component);\n    }\n    addOrOverwriteComponent(component) {\n        const provider = this.getProvider(component.name);\n        if (provider.isComponentSet()) {\n            // delete the existing provider from the container, so we can register the new component\n            this.providers.delete(component.name);\n        }\n        this.addComponent(component);\n    }\n    /**\n     * getProvider provides a type safe interface where it can only be called with a field name\n     * present in NameServiceMapping interface.\n     *\n     * Firebase SDKs providing services should extend NameServiceMapping interface to register\n     * themselves.\n     */\n    getProvider(name) {\n        if (this.providers.has(name)) {\n            return this.providers.get(name);\n        }\n        // create a Provider for a service that hasn't registered with Firebase\n        const provider = new Provider(name, this);\n        this.providers.set(name, provider);\n        return provider;\n    }\n    getProviders() {\n        return Array.from(this.providers.values());\n    }\n}\n\nexport { Component, ComponentContainer, Provider };\n//# sourceMappingURL=index.esm2017.js.map\n","/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * A container for all of the Logger instances\n */\nconst instances = [];\n/**\n * The JS SDK supports 5 log levels and also allows a user the ability to\n * silence the logs altogether.\n *\n * The order is a follows:\n * DEBUG < VERBOSE < INFO < WARN < ERROR\n *\n * All of the log types above the current log level will be captured (i.e. if\n * you set the log level to `INFO`, errors will still be logged, but `DEBUG` and\n * `VERBOSE` logs will not)\n */\nvar LogLevel;\n(function (LogLevel) {\n    LogLevel[LogLevel[\"DEBUG\"] = 0] = \"DEBUG\";\n    LogLevel[LogLevel[\"VERBOSE\"] = 1] = \"VERBOSE\";\n    LogLevel[LogLevel[\"INFO\"] = 2] = \"INFO\";\n    LogLevel[LogLevel[\"WARN\"] = 3] = \"WARN\";\n    LogLevel[LogLevel[\"ERROR\"] = 4] = \"ERROR\";\n    LogLevel[LogLevel[\"SILENT\"] = 5] = \"SILENT\";\n})(LogLevel || (LogLevel = {}));\nconst levelStringToEnum = {\n    'debug': LogLevel.DEBUG,\n    'verbose': LogLevel.VERBOSE,\n    'info': LogLevel.INFO,\n    'warn': LogLevel.WARN,\n    'error': LogLevel.ERROR,\n    'silent': LogLevel.SILENT\n};\n/**\n * The default log level\n */\nconst defaultLogLevel = LogLevel.INFO;\n/**\n * By default, `console.debug` is not displayed in the developer console (in\n * chrome). To avoid forcing users to have to opt-in to these logs twice\n * (i.e. once for firebase, and once in the console), we are sending `DEBUG`\n * logs to the `console.log` function.\n */\nconst ConsoleMethod = {\n    [LogLevel.DEBUG]: 'log',\n    [LogLevel.VERBOSE]: 'log',\n    [LogLevel.INFO]: 'info',\n    [LogLevel.WARN]: 'warn',\n    [LogLevel.ERROR]: 'error'\n};\n/**\n * The default log handler will forward DEBUG, VERBOSE, INFO, WARN, and ERROR\n * messages on to their corresponding console counterparts (if the log method\n * is supported by the current log level)\n */\nconst defaultLogHandler = (instance, logType, ...args) => {\n    if (logType < instance.logLevel) {\n        return;\n    }\n    const now = new Date().toISOString();\n    const method = ConsoleMethod[logType];\n    if (method) {\n        console[method](`[${now}]  ${instance.name}:`, ...args);\n    }\n    else {\n        throw new Error(`Attempted to log a message with an invalid logType (value: ${logType})`);\n    }\n};\nclass Logger {\n    /**\n     * Gives you an instance of a Logger to capture messages according to\n     * Firebase's logging scheme.\n     *\n     * @param name The name that the logs will be associated with\n     */\n    constructor(name) {\n        this.name = name;\n        /**\n         * The log level of the given Logger instance.\n         */\n        this._logLevel = defaultLogLevel;\n        /**\n         * The main (internal) log handler for the Logger instance.\n         * Can be set to a new function in internal package code but not by user.\n         */\n        this._logHandler = defaultLogHandler;\n        /**\n         * The optional, additional, user-defined log handler for the Logger instance.\n         */\n        this._userLogHandler = null;\n        /**\n         * Capture the current instance for later use\n         */\n        instances.push(this);\n    }\n    get logLevel() {\n        return this._logLevel;\n    }\n    set logLevel(val) {\n        if (!(val in LogLevel)) {\n            throw new TypeError(`Invalid value \"${val}\" assigned to \\`logLevel\\``);\n        }\n        this._logLevel = val;\n    }\n    // Workaround for setter/getter having to be the same type.\n    setLogLevel(val) {\n        this._logLevel = typeof val === 'string' ? levelStringToEnum[val] : val;\n    }\n    get logHandler() {\n        return this._logHandler;\n    }\n    set logHandler(val) {\n        if (typeof val !== 'function') {\n            throw new TypeError('Value assigned to `logHandler` must be a function');\n        }\n        this._logHandler = val;\n    }\n    get userLogHandler() {\n        return this._userLogHandler;\n    }\n    set userLogHandler(val) {\n        this._userLogHandler = val;\n    }\n    /**\n     * The functions below are all based on the `console` interface\n     */\n    debug(...args) {\n        this._userLogHandler && this._userLogHandler(this, LogLevel.DEBUG, ...args);\n        this._logHandler(this, LogLevel.DEBUG, ...args);\n    }\n    log(...args) {\n        this._userLogHandler &&\n            this._userLogHandler(this, LogLevel.VERBOSE, ...args);\n        this._logHandler(this, LogLevel.VERBOSE, ...args);\n    }\n    info(...args) {\n        this._userLogHandler && this._userLogHandler(this, LogLevel.INFO, ...args);\n        this._logHandler(this, LogLevel.INFO, ...args);\n    }\n    warn(...args) {\n        this._userLogHandler && this._userLogHandler(this, LogLevel.WARN, ...args);\n        this._logHandler(this, LogLevel.WARN, ...args);\n    }\n    error(...args) {\n        this._userLogHandler && this._userLogHandler(this, LogLevel.ERROR, ...args);\n        this._logHandler(this, LogLevel.ERROR, ...args);\n    }\n}\nfunction setLogLevel(level) {\n    instances.forEach(inst => {\n        inst.setLogLevel(level);\n    });\n}\nfunction setUserLogHandler(logCallback, options) {\n    for (const instance of instances) {\n        let customLogLevel = null;\n        if (options && options.level) {\n            customLogLevel = levelStringToEnum[options.level];\n        }\n        if (logCallback === null) {\n            instance.userLogHandler = null;\n        }\n        else {\n            instance.userLogHandler = (instance, level, ...args) => {\n                const message = args\n                    .map(arg => {\n                    if (arg == null) {\n                        return null;\n                    }\n                    else if (typeof arg === 'string') {\n                        return arg;\n                    }\n                    else if (typeof arg === 'number' || typeof arg === 'boolean') {\n                        return arg.toString();\n                    }\n                    else if (arg instanceof Error) {\n                        return arg.message;\n                    }\n                    else {\n                        try {\n                            return JSON.stringify(arg);\n                        }\n                        catch (ignored) {\n                            return null;\n                        }\n                    }\n                })\n                    .filter(arg => arg)\n                    .join(' ');\n                if (level >= (customLogLevel !== null && customLogLevel !== void 0 ? customLogLevel : instance.logLevel)) {\n                    logCallback({\n                        level: LogLevel[level].toLowerCase(),\n                        message,\n                        args,\n                        type: instance.name\n                    });\n                }\n            };\n        }\n    }\n}\n\nexport { LogLevel, Logger, setLogLevel, setUserLogHandler };\n//# sourceMappingURL=index.esm2017.js.map\n","/**\n * @typedef Options\n *   Configuration for `stringify`.\n * @property {boolean} [padLeft=true]\n *   Whether to pad a space before a token.\n * @property {boolean} [padRight=false]\n *   Whether to pad a space after a token.\n */\n\n/**\n * @typedef {Options} StringifyOptions\n *   Please use `StringifyOptions` instead.\n */\n\n/**\n * Parse comma-separated tokens to an array.\n *\n * @param {string} value\n *   Comma-separated tokens.\n * @returns {Array<string>}\n *   List of tokens.\n */\nexport function parse(value) {\n  /** @type {Array<string>} */\n  const tokens = []\n  const input = String(value || '')\n  let index = input.indexOf(',')\n  let start = 0\n  /** @type {boolean} */\n  let end = false\n\n  while (!end) {\n    if (index === -1) {\n      index = input.length\n      end = true\n    }\n\n    const token = input.slice(start, index).trim()\n\n    if (token || !end) {\n      tokens.push(token)\n    }\n\n    start = index + 1\n    index = input.indexOf(',', start)\n  }\n\n  return tokens\n}\n\n/**\n * Serialize an array of strings or numbers to comma-separated tokens.\n *\n * @param {Array<string|number>} values\n *   List of tokens.\n * @param {Options} [options]\n *   Configuration for `stringify` (optional).\n * @returns {string}\n *   Comma-separated tokens.\n */\nexport function stringify(values, options) {\n  const settings = options || {}\n\n  // Ensure the last empty entry is seen.\n  const input = values[values.length - 1] === '' ? [...values, ''] : values\n\n  return input\n    .join(\n      (settings.padRight ? ' ' : '') +\n        ',' +\n        (settings.padLeft === false ? '' : ' ')\n    )\n    .trim()\n}\n","export default function _arrayLikeToArray(arr, len) {\n  if (len == null || len > arr.length) len = arr.length;\n  for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];\n  return arr2;\n}","export default function _assertThisInitialized(self) {\n  if (self === void 0) {\n    throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n  }\n  return self;\n}","export default function _classCallCheck(instance, Constructor) {\n  if (!(instance instanceof Constructor)) {\n    throw new TypeError(\"Cannot call a class as a function\");\n  }\n}","import toPropertyKey from \"./toPropertyKey.js\";\nfunction _defineProperties(target, props) {\n  for (var i = 0; i < props.length; i++) {\n    var descriptor = props[i];\n    descriptor.enumerable = descriptor.enumerable || false;\n    descriptor.configurable = true;\n    if (\"value\" in descriptor) descriptor.writable = true;\n    Object.defineProperty(target, toPropertyKey(descriptor.key), descriptor);\n  }\n}\nexport default function _createClass(Constructor, protoProps, staticProps) {\n  if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n  if (staticProps) _defineProperties(Constructor, staticProps);\n  Object.defineProperty(Constructor, \"prototype\", {\n    writable: false\n  });\n  return Constructor;\n}","import unsupportedIterableToArray from \"./unsupportedIterableToArray.js\";\nexport default function _createForOfIteratorHelper(o, allowArrayLike) {\n  var it = typeof Symbol !== \"undefined\" && o[Symbol.iterator] || o[\"@@iterator\"];\n  if (!it) {\n    if (Array.isArray(o) || (it = unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") {\n      if (it) o = it;\n      var i = 0;\n      var F = function F() {};\n      return {\n        s: F,\n        n: function n() {\n          if (i >= o.length) return {\n            done: true\n          };\n          return {\n            done: false,\n            value: o[i++]\n          };\n        },\n        e: function e(_e) {\n          throw _e;\n        },\n        f: F\n      };\n    }\n    throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n  }\n  var normalCompletion = true,\n    didErr = false,\n    err;\n  return {\n    s: function s() {\n      it = it.call(o);\n    },\n    n: function n() {\n      var step = it.next();\n      normalCompletion = step.done;\n      return step;\n    },\n    e: function e(_e2) {\n      didErr = true;\n      err = _e2;\n    },\n    f: function f() {\n      try {\n        if (!normalCompletion && it[\"return\"] != null) it[\"return\"]();\n      } finally {\n        if (didErr) throw err;\n      }\n    }\n  };\n}","import getPrototypeOf from \"./getPrototypeOf.js\";\nimport isNativeReflectConstruct from \"./isNativeReflectConstruct.js\";\nimport possibleConstructorReturn from \"./possibleConstructorReturn.js\";\nexport default function _createSuper(Derived) {\n  var hasNativeReflectConstruct = isNativeReflectConstruct();\n  return function _createSuperInternal() {\n    var Super = getPrototypeOf(Derived),\n      result;\n    if (hasNativeReflectConstruct) {\n      var NewTarget = getPrototypeOf(this).constructor;\n      result = Reflect.construct(Super, arguments, NewTarget);\n    } else {\n      result = Super.apply(this, arguments);\n    }\n    return possibleConstructorReturn(this, result);\n  };\n}","import toPropertyKey from \"./toPropertyKey.js\";\nexport default function _defineProperty(obj, key, value) {\n  key = toPropertyKey(key);\n  if (key in obj) {\n    Object.defineProperty(obj, key, {\n      value: value,\n      enumerable: true,\n      configurable: true,\n      writable: true\n    });\n  } else {\n    obj[key] = value;\n  }\n  return obj;\n}","export default function _getPrototypeOf(o) {\n  _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) {\n    return o.__proto__ || Object.getPrototypeOf(o);\n  };\n  return _getPrototypeOf(o);\n}","import setPrototypeOf from \"./setPrototypeOf.js\";\nexport default function _inherits(subClass, superClass) {\n  if (typeof superClass !== \"function\" && superClass !== null) {\n    throw new TypeError(\"Super expression must either be null or a function\");\n  }\n  subClass.prototype = Object.create(superClass && superClass.prototype, {\n    constructor: {\n      value: subClass,\n      writable: true,\n      configurable: true\n    }\n  });\n  Object.defineProperty(subClass, \"prototype\", {\n    writable: false\n  });\n  if (superClass) setPrototypeOf(subClass, superClass);\n}","export default function _isNativeReflectConstruct() {\n  if (typeof Reflect === \"undefined\" || !Reflect.construct) return false;\n  if (Reflect.construct.sham) return false;\n  if (typeof Proxy === \"function\") return true;\n  try {\n    Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {}));\n    return true;\n  } catch (e) {\n    return false;\n  }\n}","import _typeof from \"./typeof.js\";\nimport assertThisInitialized from \"./assertThisInitialized.js\";\nexport default function _possibleConstructorReturn(self, call) {\n  if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) {\n    return call;\n  } else if (call !== void 0) {\n    throw new TypeError(\"Derived constructors may only return object or undefined\");\n  }\n  return assertThisInitialized(self);\n}","export default function _setPrototypeOf(o, p) {\n  _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) {\n    o.__proto__ = p;\n    return o;\n  };\n  return _setPrototypeOf(o, p);\n}","import _typeof from \"./typeof.js\";\nexport default function _toPrimitive(input, hint) {\n  if (_typeof(input) !== \"object\" || input === null) return input;\n  var prim = input[Symbol.toPrimitive];\n  if (prim !== undefined) {\n    var res = prim.call(input, hint || \"default\");\n    if (_typeof(res) !== \"object\") return res;\n    throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n  }\n  return (hint === \"string\" ? String : Number)(input);\n}","import _typeof from \"./typeof.js\";\nimport toPrimitive from \"./toPrimitive.js\";\nexport default function _toPropertyKey(arg) {\n  var key = toPrimitive(arg, \"string\");\n  return _typeof(key) === \"symbol\" ? key : String(key);\n}","export default function _typeof(o) {\n  \"@babel/helpers - typeof\";\n\n  return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) {\n    return typeof o;\n  } : function (o) {\n    return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o;\n  }, _typeof(o);\n}","import arrayLikeToArray from \"./arrayLikeToArray.js\";\nexport default function _unsupportedIterableToArray(o, minLen) {\n  if (!o) return;\n  if (typeof o === \"string\") return arrayLikeToArray(o, minLen);\n  var n = Object.prototype.toString.call(o).slice(8, -1);\n  if (n === \"Object\" && o.constructor) n = o.constructor.name;\n  if (n === \"Map\" || n === \"Set\") return Array.from(o);\n  if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return arrayLikeToArray(o, minLen);\n}","/// <reference lib=\"dom\" />\n\n/* eslint-env browser */\n\nconst element = document.createElement('i')\n\n/**\n * @param {string} value\n * @returns {string|false}\n */\nexport function decodeNamedCharacterReference(value) {\n  const characterReference = '&' + value + ';'\n  element.innerHTML = characterReference\n  const char = element.textContent\n\n  // Some named character references do not require the closing semicolon\n  // (`&not`, for instance), which leads to situations where parsing the assumed\n  // named reference of `&notit;` will result in the string `¬it;`.\n  // When we encounter a trailing semicolon after parsing, and the character\n  // reference to decode was not a semicolon (`&semi;`), we can assume that the\n  // matching was not complete.\n  // @ts-expect-error: TypeScript is wrong that `textContent` on elements can\n  // yield `null`.\n  if (char.charCodeAt(char.length - 1) === 59 /* `;` */ && value !== 'semi') {\n    return false\n  }\n\n  // If the decoded string is equal to the input, the character reference was\n  // not valid.\n  // @ts-expect-error: TypeScript is wrong that `textContent` on elements can\n  // yield `null`.\n  return char === characterReference ? false : char\n}\n","export function deprecate(fn) {\n  return fn\n}\n\nexport function equal() {}\n\nexport function ok() {}\n\nexport function unreachable() {}\n","/**\n * @typedef Options\n *   Configuration.\n * @property {boolean | null | undefined} [jsx=false]\n *   Support JSX identifiers (default: `false`).\n */\n\nconst startRe = /[$_\\p{ID_Start}]/u\nconst contRe = /[$_\\u{200C}\\u{200D}\\p{ID_Continue}]/u\nconst contReJsx = /[-$_\\u{200C}\\u{200D}\\p{ID_Continue}]/u\nconst nameRe = /^[$_\\p{ID_Start}][$_\\u{200C}\\u{200D}\\p{ID_Continue}]*$/u\nconst nameReJsx = /^[$_\\p{ID_Start}][-$_\\u{200C}\\u{200D}\\p{ID_Continue}]*$/u\n\n/** @type {Options} */\nconst emptyOptions = {}\n\n/**\n * Checks if the given code point can start an identifier.\n *\n * @param {number | undefined} code\n *   Code point to check.\n * @returns {boolean}\n *   Whether `code` can start an identifier.\n */\n// Note: `undefined` is supported so you can pass the result from `''.codePointAt`.\nexport function start(code) {\n  return code ? startRe.test(String.fromCodePoint(code)) : false\n}\n\n/**\n * Checks if the given code point can continue an identifier.\n *\n * @param {number | undefined} code\n *   Code point to check.\n * @param {Options | null | undefined} [options]\n *   Configuration (optional).\n * @returns {boolean}\n *   Whether `code` can continue an identifier.\n */\n// Note: `undefined` is supported so you can pass the result from `''.codePointAt`.\nexport function cont(code, options) {\n  const settings = options || emptyOptions\n  const re = settings.jsx ? contReJsx : contRe\n  return code ? re.test(String.fromCodePoint(code)) : false\n}\n\n/**\n * Checks if the given value is a valid identifier name.\n *\n * @param {string} name\n *   Identifier to check.\n * @param {Options | null | undefined} [options]\n *   Configuration (optional).\n * @returns {boolean}\n *   Whether `name` can be an identifier.\n */\nexport function name(name, options) {\n  const settings = options || emptyOptions\n  const re = settings.jsx ? nameReJsx : nameRe\n  return re.test(name)\n}\n","import { registerVersion } from '@firebase/app';\nexport * from '@firebase/app';\n\nvar name = \"firebase\";\nvar version = \"11.0.2\";\n\n/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nregisterVersion(name, version, 'app');\n//# sourceMappingURL=index.esm.js.map\n","import { SDK_VERSION, _isFirebaseServerApp, _getProvider, _registerComponent, registerVersion, getApp } from '@firebase/app';\nimport { ErrorFactory, isBrowserExtension, isMobileCordova, isReactNative, FirebaseError, querystring, isCloudflareWorker, getModularInstance, base64Decode, getUA, isIE, createSubscribe, deepEqual, querystringDecode, extractQuerystring, isEmpty, getExperimentalSetting, getDefaultEmulatorHost } from '@firebase/util';\nimport { Logger, LogLevel } from '@firebase/logger';\nimport { __rest } from 'tslib';\nimport { Component } from '@firebase/component';\n\n/**\n * @license\n * Copyright 2021 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * An enum of factors that may be used for multifactor authentication.\n *\n * @public\n */\nconst FactorId = {\n    /** Phone as second factor */\n    PHONE: 'phone',\n    TOTP: 'totp'\n};\n/**\n * Enumeration of supported providers.\n *\n * @public\n */\nconst ProviderId = {\n    /** Facebook provider ID */\n    FACEBOOK: 'facebook.com',\n    /** GitHub provider ID */\n    GITHUB: 'github.com',\n    /** Google provider ID */\n    GOOGLE: 'google.com',\n    /** Password provider */\n    PASSWORD: 'password',\n    /** Phone provider */\n    PHONE: 'phone',\n    /** Twitter provider ID */\n    TWITTER: 'twitter.com'\n};\n/**\n * Enumeration of supported sign-in methods.\n *\n * @public\n */\nconst SignInMethod = {\n    /** Email link sign in method */\n    EMAIL_LINK: 'emailLink',\n    /** Email/password sign in method */\n    EMAIL_PASSWORD: 'password',\n    /** Facebook sign in method */\n    FACEBOOK: 'facebook.com',\n    /** GitHub sign in method */\n    GITHUB: 'github.com',\n    /** Google sign in method */\n    GOOGLE: 'google.com',\n    /** Phone sign in method */\n    PHONE: 'phone',\n    /** Twitter sign in method */\n    TWITTER: 'twitter.com'\n};\n/**\n * Enumeration of supported operation types.\n *\n * @public\n */\nconst OperationType = {\n    /** Operation involving linking an additional provider to an already signed-in user. */\n    LINK: 'link',\n    /** Operation involving using a provider to reauthenticate an already signed-in user. */\n    REAUTHENTICATE: 'reauthenticate',\n    /** Operation involving signing in a user. */\n    SIGN_IN: 'signIn'\n};\n/**\n * An enumeration of the possible email action types.\n *\n * @public\n */\nconst ActionCodeOperation = {\n    /** The email link sign-in action. */\n    EMAIL_SIGNIN: 'EMAIL_SIGNIN',\n    /** The password reset action. */\n    PASSWORD_RESET: 'PASSWORD_RESET',\n    /** The email revocation action. */\n    RECOVER_EMAIL: 'RECOVER_EMAIL',\n    /** The revert second factor addition email action. */\n    REVERT_SECOND_FACTOR_ADDITION: 'REVERT_SECOND_FACTOR_ADDITION',\n    /** The revert second factor addition email action. */\n    VERIFY_AND_CHANGE_EMAIL: 'VERIFY_AND_CHANGE_EMAIL',\n    /** The email verification action. */\n    VERIFY_EMAIL: 'VERIFY_EMAIL'\n};\n\n/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nfunction _debugErrorMap() {\n    return {\n        [\"admin-restricted-operation\" /* AuthErrorCode.ADMIN_ONLY_OPERATION */]: 'This operation is restricted to administrators only.',\n        [\"argument-error\" /* AuthErrorCode.ARGUMENT_ERROR */]: '',\n        [\"app-not-authorized\" /* AuthErrorCode.APP_NOT_AUTHORIZED */]: \"This app, identified by the domain where it's hosted, is not \" +\n            'authorized to use Firebase Authentication with the provided API key. ' +\n            'Review your key configuration in the Google API console.',\n        [\"app-not-installed\" /* AuthErrorCode.APP_NOT_INSTALLED */]: 'The requested mobile application corresponding to the identifier (' +\n            'Android package name or iOS bundle ID) provided is not installed on ' +\n            'this device.',\n        [\"captcha-check-failed\" /* AuthErrorCode.CAPTCHA_CHECK_FAILED */]: 'The reCAPTCHA response token provided is either invalid, expired, ' +\n            'already used or the domain associated with it does not match the list ' +\n            'of whitelisted domains.',\n        [\"code-expired\" /* AuthErrorCode.CODE_EXPIRED */]: 'The SMS code has expired. Please re-send the verification code to try ' +\n            'again.',\n        [\"cordova-not-ready\" /* AuthErrorCode.CORDOVA_NOT_READY */]: 'Cordova framework is not ready.',\n        [\"cors-unsupported\" /* AuthErrorCode.CORS_UNSUPPORTED */]: 'This browser is not supported.',\n        [\"credential-already-in-use\" /* AuthErrorCode.CREDENTIAL_ALREADY_IN_USE */]: 'This credential is already associated with a different user account.',\n        [\"custom-token-mismatch\" /* AuthErrorCode.CREDENTIAL_MISMATCH */]: 'The custom token corresponds to a different audience.',\n        [\"requires-recent-login\" /* AuthErrorCode.CREDENTIAL_TOO_OLD_LOGIN_AGAIN */]: 'This operation is sensitive and requires recent authentication. Log in ' +\n            'again before retrying this request.',\n        [\"dependent-sdk-initialized-before-auth\" /* AuthErrorCode.DEPENDENT_SDK_INIT_BEFORE_AUTH */]: 'Another Firebase SDK was initialized and is trying to use Auth before Auth is ' +\n            'initialized. Please be sure to call `initializeAuth` or `getAuth` before ' +\n            'starting any other Firebase SDK.',\n        [\"dynamic-link-not-activated\" /* AuthErrorCode.DYNAMIC_LINK_NOT_ACTIVATED */]: 'Please activate Dynamic Links in the Firebase Console and agree to the terms and ' +\n            'conditions.',\n        [\"email-change-needs-verification\" /* AuthErrorCode.EMAIL_CHANGE_NEEDS_VERIFICATION */]: 'Multi-factor users must always have a verified email.',\n        [\"email-already-in-use\" /* AuthErrorCode.EMAIL_EXISTS */]: 'The email address is already in use by another account.',\n        [\"emulator-config-failed\" /* AuthErrorCode.EMULATOR_CONFIG_FAILED */]: 'Auth instance has already been used to make a network call. Auth can ' +\n            'no longer be configured to use the emulator. Try calling ' +\n            '\"connectAuthEmulator()\" sooner.',\n        [\"expired-action-code\" /* AuthErrorCode.EXPIRED_OOB_CODE */]: 'The action code has expired.',\n        [\"cancelled-popup-request\" /* AuthErrorCode.EXPIRED_POPUP_REQUEST */]: 'This operation has been cancelled due to another conflicting popup being opened.',\n        [\"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */]: 'An internal AuthError has occurred.',\n        [\"invalid-app-credential\" /* AuthErrorCode.INVALID_APP_CREDENTIAL */]: 'The phone verification request contains an invalid application verifier.' +\n            ' The reCAPTCHA token response is either invalid or expired.',\n        [\"invalid-app-id\" /* AuthErrorCode.INVALID_APP_ID */]: 'The mobile app identifier is not registered for the current project.',\n        [\"invalid-user-token\" /* AuthErrorCode.INVALID_AUTH */]: \"This user's credential isn't valid for this project. This can happen \" +\n            \"if the user's token has been tampered with, or if the user isn't for \" +\n            'the project associated with this API key.',\n        [\"invalid-auth-event\" /* AuthErrorCode.INVALID_AUTH_EVENT */]: 'An internal AuthError has occurred.',\n        [\"invalid-verification-code\" /* AuthErrorCode.INVALID_CODE */]: 'The SMS verification code used to create the phone auth credential is ' +\n            'invalid. Please resend the verification code sms and be sure to use the ' +\n            'verification code provided by the user.',\n        [\"invalid-continue-uri\" /* AuthErrorCode.INVALID_CONTINUE_URI */]: 'The continue URL provided in the request is invalid.',\n        [\"invalid-cordova-configuration\" /* AuthErrorCode.INVALID_CORDOVA_CONFIGURATION */]: 'The following Cordova plugins must be installed to enable OAuth sign-in: ' +\n            'cordova-plugin-buildinfo, cordova-universal-links-plugin, ' +\n            'cordova-plugin-browsertab, cordova-plugin-inappbrowser and ' +\n            'cordova-plugin-customurlscheme.',\n        [\"invalid-custom-token\" /* AuthErrorCode.INVALID_CUSTOM_TOKEN */]: 'The custom token format is incorrect. Please check the documentation.',\n        [\"invalid-dynamic-link-domain\" /* AuthErrorCode.INVALID_DYNAMIC_LINK_DOMAIN */]: 'The provided dynamic link domain is not configured or authorized for the current project.',\n        [\"invalid-email\" /* AuthErrorCode.INVALID_EMAIL */]: 'The email address is badly formatted.',\n        [\"invalid-emulator-scheme\" /* AuthErrorCode.INVALID_EMULATOR_SCHEME */]: 'Emulator URL must start with a valid scheme (http:// or https://).',\n        [\"invalid-api-key\" /* AuthErrorCode.INVALID_API_KEY */]: 'Your API key is invalid, please check you have copied it correctly.',\n        [\"invalid-cert-hash\" /* AuthErrorCode.INVALID_CERT_HASH */]: 'The SHA-1 certificate hash provided is invalid.',\n        [\"invalid-credential\" /* AuthErrorCode.INVALID_CREDENTIAL */]: 'The supplied auth credential is incorrect, malformed or has expired.',\n        [\"invalid-message-payload\" /* AuthErrorCode.INVALID_MESSAGE_PAYLOAD */]: 'The email template corresponding to this action contains invalid characters in its message. ' +\n            'Please fix by going to the Auth email templates section in the Firebase Console.',\n        [\"invalid-multi-factor-session\" /* AuthErrorCode.INVALID_MFA_SESSION */]: 'The request does not contain a valid proof of first factor successful sign-in.',\n        [\"invalid-oauth-provider\" /* AuthErrorCode.INVALID_OAUTH_PROVIDER */]: 'EmailAuthProvider is not supported for this operation. This operation ' +\n            'only supports OAuth providers.',\n        [\"invalid-oauth-client-id\" /* AuthErrorCode.INVALID_OAUTH_CLIENT_ID */]: 'The OAuth client ID provided is either invalid or does not match the ' +\n            'specified API key.',\n        [\"unauthorized-domain\" /* AuthErrorCode.INVALID_ORIGIN */]: 'This domain is not authorized for OAuth operations for your Firebase ' +\n            'project. Edit the list of authorized domains from the Firebase console.',\n        [\"invalid-action-code\" /* AuthErrorCode.INVALID_OOB_CODE */]: 'The action code is invalid. This can happen if the code is malformed, ' +\n            'expired, or has already been used.',\n        [\"wrong-password\" /* AuthErrorCode.INVALID_PASSWORD */]: 'The password is invalid or the user does not have a password.',\n        [\"invalid-persistence-type\" /* AuthErrorCode.INVALID_PERSISTENCE */]: 'The specified persistence type is invalid. It can only be local, session or none.',\n        [\"invalid-phone-number\" /* AuthErrorCode.INVALID_PHONE_NUMBER */]: 'The format of the phone number provided is incorrect. Please enter the ' +\n            'phone number in a format that can be parsed into E.164 format. E.164 ' +\n            'phone numbers are written in the format [+][country code][subscriber ' +\n            'number including area code].',\n        [\"invalid-provider-id\" /* AuthErrorCode.INVALID_PROVIDER_ID */]: 'The specified provider ID is invalid.',\n        [\"invalid-recipient-email\" /* AuthErrorCode.INVALID_RECIPIENT_EMAIL */]: 'The email corresponding to this action failed to send as the provided ' +\n            'recipient email address is invalid.',\n        [\"invalid-sender\" /* AuthErrorCode.INVALID_SENDER */]: 'The email template corresponding to this action contains an invalid sender email or name. ' +\n            'Please fix by going to the Auth email templates section in the Firebase Console.',\n        [\"invalid-verification-id\" /* AuthErrorCode.INVALID_SESSION_INFO */]: 'The verification ID used to create the phone auth credential is invalid.',\n        [\"invalid-tenant-id\" /* AuthErrorCode.INVALID_TENANT_ID */]: \"The Auth instance's tenant ID is invalid.\",\n        [\"login-blocked\" /* AuthErrorCode.LOGIN_BLOCKED */]: 'Login blocked by user-provided method: {$originalMessage}',\n        [\"missing-android-pkg-name\" /* AuthErrorCode.MISSING_ANDROID_PACKAGE_NAME */]: 'An Android Package Name must be provided if the Android App is required to be installed.',\n        [\"auth-domain-config-required\" /* AuthErrorCode.MISSING_AUTH_DOMAIN */]: 'Be sure to include authDomain when calling firebase.initializeApp(), ' +\n            'by following the instructions in the Firebase console.',\n        [\"missing-app-credential\" /* AuthErrorCode.MISSING_APP_CREDENTIAL */]: 'The phone verification request is missing an application verifier ' +\n            'assertion. A reCAPTCHA response token needs to be provided.',\n        [\"missing-verification-code\" /* AuthErrorCode.MISSING_CODE */]: 'The phone auth credential was created with an empty SMS verification code.',\n        [\"missing-continue-uri\" /* AuthErrorCode.MISSING_CONTINUE_URI */]: 'A continue URL must be provided in the request.',\n        [\"missing-iframe-start\" /* AuthErrorCode.MISSING_IFRAME_START */]: 'An internal AuthError has occurred.',\n        [\"missing-ios-bundle-id\" /* AuthErrorCode.MISSING_IOS_BUNDLE_ID */]: 'An iOS Bundle ID must be provided if an App Store ID is provided.',\n        [\"missing-or-invalid-nonce\" /* AuthErrorCode.MISSING_OR_INVALID_NONCE */]: 'The request does not contain a valid nonce. This can occur if the ' +\n            'SHA-256 hash of the provided raw nonce does not match the hashed nonce ' +\n            'in the ID token payload.',\n        [\"missing-password\" /* AuthErrorCode.MISSING_PASSWORD */]: 'A non-empty password must be provided',\n        [\"missing-multi-factor-info\" /* AuthErrorCode.MISSING_MFA_INFO */]: 'No second factor identifier is provided.',\n        [\"missing-multi-factor-session\" /* AuthErrorCode.MISSING_MFA_SESSION */]: 'The request is missing proof of first factor successful sign-in.',\n        [\"missing-phone-number\" /* AuthErrorCode.MISSING_PHONE_NUMBER */]: 'To send verification codes, provide a phone number for the recipient.',\n        [\"missing-verification-id\" /* AuthErrorCode.MISSING_SESSION_INFO */]: 'The phone auth credential was created with an empty verification ID.',\n        [\"app-deleted\" /* AuthErrorCode.MODULE_DESTROYED */]: 'This instance of FirebaseApp has been deleted.',\n        [\"multi-factor-info-not-found\" /* AuthErrorCode.MFA_INFO_NOT_FOUND */]: 'The user does not have a second factor matching the identifier provided.',\n        [\"multi-factor-auth-required\" /* AuthErrorCode.MFA_REQUIRED */]: 'Proof of ownership of a second factor is required to complete sign-in.',\n        [\"account-exists-with-different-credential\" /* AuthErrorCode.NEED_CONFIRMATION */]: 'An account already exists with the same email address but different ' +\n            'sign-in credentials. Sign in using a provider associated with this ' +\n            'email address.',\n        [\"network-request-failed\" /* AuthErrorCode.NETWORK_REQUEST_FAILED */]: 'A network AuthError (such as timeout, interrupted connection or unreachable host) has occurred.',\n        [\"no-auth-event\" /* AuthErrorCode.NO_AUTH_EVENT */]: 'An internal AuthError has occurred.',\n        [\"no-such-provider\" /* AuthErrorCode.NO_SUCH_PROVIDER */]: 'User was not linked to an account with the given provider.',\n        [\"null-user\" /* AuthErrorCode.NULL_USER */]: 'A null user object was provided as the argument for an operation which ' +\n            'requires a non-null user object.',\n        [\"operation-not-allowed\" /* AuthErrorCode.OPERATION_NOT_ALLOWED */]: 'The given sign-in provider is disabled for this Firebase project. ' +\n            'Enable it in the Firebase console, under the sign-in method tab of the ' +\n            'Auth section.',\n        [\"operation-not-supported-in-this-environment\" /* AuthErrorCode.OPERATION_NOT_SUPPORTED */]: 'This operation is not supported in the environment this application is ' +\n            'running on. \"location.protocol\" must be http, https or chrome-extension' +\n            ' and web storage must be enabled.',\n        [\"popup-blocked\" /* AuthErrorCode.POPUP_BLOCKED */]: 'Unable to establish a connection with the popup. It may have been blocked by the browser.',\n        [\"popup-closed-by-user\" /* AuthErrorCode.POPUP_CLOSED_BY_USER */]: 'The popup has been closed by the user before finalizing the operation.',\n        [\"provider-already-linked\" /* AuthErrorCode.PROVIDER_ALREADY_LINKED */]: 'User can only be linked to one identity for the given provider.',\n        [\"quota-exceeded\" /* AuthErrorCode.QUOTA_EXCEEDED */]: \"The project's quota for this operation has been exceeded.\",\n        [\"redirect-cancelled-by-user\" /* AuthErrorCode.REDIRECT_CANCELLED_BY_USER */]: 'The redirect operation has been cancelled by the user before finalizing.',\n        [\"redirect-operation-pending\" /* AuthErrorCode.REDIRECT_OPERATION_PENDING */]: 'A redirect sign-in operation is already pending.',\n        [\"rejected-credential\" /* AuthErrorCode.REJECTED_CREDENTIAL */]: 'The request contains malformed or mismatching credentials.',\n        [\"second-factor-already-in-use\" /* AuthErrorCode.SECOND_FACTOR_ALREADY_ENROLLED */]: 'The second factor is already enrolled on this account.',\n        [\"maximum-second-factor-count-exceeded\" /* AuthErrorCode.SECOND_FACTOR_LIMIT_EXCEEDED */]: 'The maximum allowed number of second factors on a user has been exceeded.',\n        [\"tenant-id-mismatch\" /* AuthErrorCode.TENANT_ID_MISMATCH */]: \"The provided tenant ID does not match the Auth instance's tenant ID\",\n        [\"timeout\" /* AuthErrorCode.TIMEOUT */]: 'The operation has timed out.',\n        [\"user-token-expired\" /* AuthErrorCode.TOKEN_EXPIRED */]: \"The user's credential is no longer valid. The user must sign in again.\",\n        [\"too-many-requests\" /* AuthErrorCode.TOO_MANY_ATTEMPTS_TRY_LATER */]: 'We have blocked all requests from this device due to unusual activity. ' +\n            'Try again later.',\n        [\"unauthorized-continue-uri\" /* AuthErrorCode.UNAUTHORIZED_DOMAIN */]: 'The domain of the continue URL is not whitelisted.  Please whitelist ' +\n            'the domain in the Firebase console.',\n        [\"unsupported-first-factor\" /* AuthErrorCode.UNSUPPORTED_FIRST_FACTOR */]: 'Enrolling a second factor or signing in with a multi-factor account requires sign-in with a supported first factor.',\n        [\"unsupported-persistence-type\" /* AuthErrorCode.UNSUPPORTED_PERSISTENCE */]: 'The current environment does not support the specified persistence type.',\n        [\"unsupported-tenant-operation\" /* AuthErrorCode.UNSUPPORTED_TENANT_OPERATION */]: 'This operation is not supported in a multi-tenant context.',\n        [\"unverified-email\" /* AuthErrorCode.UNVERIFIED_EMAIL */]: 'The operation requires a verified email.',\n        [\"user-cancelled\" /* AuthErrorCode.USER_CANCELLED */]: 'The user did not grant your application the permissions it requested.',\n        [\"user-not-found\" /* AuthErrorCode.USER_DELETED */]: 'There is no user record corresponding to this identifier. The user may ' +\n            'have been deleted.',\n        [\"user-disabled\" /* AuthErrorCode.USER_DISABLED */]: 'The user account has been disabled by an administrator.',\n        [\"user-mismatch\" /* AuthErrorCode.USER_MISMATCH */]: 'The supplied credentials do not correspond to the previously signed in user.',\n        [\"user-signed-out\" /* AuthErrorCode.USER_SIGNED_OUT */]: '',\n        [\"weak-password\" /* AuthErrorCode.WEAK_PASSWORD */]: 'The password must be 6 characters long or more.',\n        [\"web-storage-unsupported\" /* AuthErrorCode.WEB_STORAGE_UNSUPPORTED */]: 'This browser is not supported or 3rd party cookies and data may be disabled.',\n        [\"already-initialized\" /* AuthErrorCode.ALREADY_INITIALIZED */]: 'initializeAuth() has already been called with ' +\n            'different options. To avoid this error, call initializeAuth() with the ' +\n            'same options as when it was originally called, or call getAuth() to return the' +\n            ' already initialized instance.',\n        [\"missing-recaptcha-token\" /* AuthErrorCode.MISSING_RECAPTCHA_TOKEN */]: 'The reCAPTCHA token is missing when sending request to the backend.',\n        [\"invalid-recaptcha-token\" /* AuthErrorCode.INVALID_RECAPTCHA_TOKEN */]: 'The reCAPTCHA token is invalid when sending request to the backend.',\n        [\"invalid-recaptcha-action\" /* AuthErrorCode.INVALID_RECAPTCHA_ACTION */]: 'The reCAPTCHA action is invalid when sending request to the backend.',\n        [\"recaptcha-not-enabled\" /* AuthErrorCode.RECAPTCHA_NOT_ENABLED */]: 'reCAPTCHA Enterprise integration is not enabled for this project.',\n        [\"missing-client-type\" /* AuthErrorCode.MISSING_CLIENT_TYPE */]: 'The reCAPTCHA client type is missing when sending request to the backend.',\n        [\"missing-recaptcha-version\" /* AuthErrorCode.MISSING_RECAPTCHA_VERSION */]: 'The reCAPTCHA version is missing when sending request to the backend.',\n        [\"invalid-req-type\" /* AuthErrorCode.INVALID_REQ_TYPE */]: 'Invalid request parameters.',\n        [\"invalid-recaptcha-version\" /* AuthErrorCode.INVALID_RECAPTCHA_VERSION */]: 'The reCAPTCHA version is invalid when sending request to the backend.',\n        [\"unsupported-password-policy-schema-version\" /* AuthErrorCode.UNSUPPORTED_PASSWORD_POLICY_SCHEMA_VERSION */]: 'The password policy received from the backend uses a schema version that is not supported by this version of the Firebase SDK.',\n        [\"password-does-not-meet-requirements\" /* AuthErrorCode.PASSWORD_DOES_NOT_MEET_REQUIREMENTS */]: 'The password does not meet the requirements.'\n    };\n}\nfunction _prodErrorMap() {\n    // We will include this one message in the prod error map since by the very\n    // nature of this error, developers will never be able to see the message\n    // using the debugErrorMap (which is installed during auth initialization).\n    return {\n        [\"dependent-sdk-initialized-before-auth\" /* AuthErrorCode.DEPENDENT_SDK_INIT_BEFORE_AUTH */]: 'Another Firebase SDK was initialized and is trying to use Auth before Auth is ' +\n            'initialized. Please be sure to call `initializeAuth` or `getAuth` before ' +\n            'starting any other Firebase SDK.'\n    };\n}\n/**\n * A verbose error map with detailed descriptions for most error codes.\n *\n * See discussion at {@link AuthErrorMap}\n *\n * @public\n */\nconst debugErrorMap = _debugErrorMap;\n/**\n * A minimal error map with all verbose error messages stripped.\n *\n * See discussion at {@link AuthErrorMap}\n *\n * @public\n */\nconst prodErrorMap = _prodErrorMap;\nconst _DEFAULT_AUTH_ERROR_FACTORY = new ErrorFactory('auth', 'Firebase', _prodErrorMap());\n/**\n * A map of potential `Auth` error codes, for easier comparison with errors\n * thrown by the SDK.\n *\n * @remarks\n * Note that you can't tree-shake individual keys\n * in the map, so by using the map you might substantially increase your\n * bundle size.\n *\n * @public\n */\nconst AUTH_ERROR_CODES_MAP_DO_NOT_USE_INTERNALLY = {\n    ADMIN_ONLY_OPERATION: 'auth/admin-restricted-operation',\n    ARGUMENT_ERROR: 'auth/argument-error',\n    APP_NOT_AUTHORIZED: 'auth/app-not-authorized',\n    APP_NOT_INSTALLED: 'auth/app-not-installed',\n    CAPTCHA_CHECK_FAILED: 'auth/captcha-check-failed',\n    CODE_EXPIRED: 'auth/code-expired',\n    CORDOVA_NOT_READY: 'auth/cordova-not-ready',\n    CORS_UNSUPPORTED: 'auth/cors-unsupported',\n    CREDENTIAL_ALREADY_IN_USE: 'auth/credential-already-in-use',\n    CREDENTIAL_MISMATCH: 'auth/custom-token-mismatch',\n    CREDENTIAL_TOO_OLD_LOGIN_AGAIN: 'auth/requires-recent-login',\n    DEPENDENT_SDK_INIT_BEFORE_AUTH: 'auth/dependent-sdk-initialized-before-auth',\n    DYNAMIC_LINK_NOT_ACTIVATED: 'auth/dynamic-link-not-activated',\n    EMAIL_CHANGE_NEEDS_VERIFICATION: 'auth/email-change-needs-verification',\n    EMAIL_EXISTS: 'auth/email-already-in-use',\n    EMULATOR_CONFIG_FAILED: 'auth/emulator-config-failed',\n    EXPIRED_OOB_CODE: 'auth/expired-action-code',\n    EXPIRED_POPUP_REQUEST: 'auth/cancelled-popup-request',\n    INTERNAL_ERROR: 'auth/internal-error',\n    INVALID_API_KEY: 'auth/invalid-api-key',\n    INVALID_APP_CREDENTIAL: 'auth/invalid-app-credential',\n    INVALID_APP_ID: 'auth/invalid-app-id',\n    INVALID_AUTH: 'auth/invalid-user-token',\n    INVALID_AUTH_EVENT: 'auth/invalid-auth-event',\n    INVALID_CERT_HASH: 'auth/invalid-cert-hash',\n    INVALID_CODE: 'auth/invalid-verification-code',\n    INVALID_CONTINUE_URI: 'auth/invalid-continue-uri',\n    INVALID_CORDOVA_CONFIGURATION: 'auth/invalid-cordova-configuration',\n    INVALID_CUSTOM_TOKEN: 'auth/invalid-custom-token',\n    INVALID_DYNAMIC_LINK_DOMAIN: 'auth/invalid-dynamic-link-domain',\n    INVALID_EMAIL: 'auth/invalid-email',\n    INVALID_EMULATOR_SCHEME: 'auth/invalid-emulator-scheme',\n    INVALID_IDP_RESPONSE: 'auth/invalid-credential',\n    INVALID_LOGIN_CREDENTIALS: 'auth/invalid-credential',\n    INVALID_MESSAGE_PAYLOAD: 'auth/invalid-message-payload',\n    INVALID_MFA_SESSION: 'auth/invalid-multi-factor-session',\n    INVALID_OAUTH_CLIENT_ID: 'auth/invalid-oauth-client-id',\n    INVALID_OAUTH_PROVIDER: 'auth/invalid-oauth-provider',\n    INVALID_OOB_CODE: 'auth/invalid-action-code',\n    INVALID_ORIGIN: 'auth/unauthorized-domain',\n    INVALID_PASSWORD: 'auth/wrong-password',\n    INVALID_PERSISTENCE: 'auth/invalid-persistence-type',\n    INVALID_PHONE_NUMBER: 'auth/invalid-phone-number',\n    INVALID_PROVIDER_ID: 'auth/invalid-provider-id',\n    INVALID_RECIPIENT_EMAIL: 'auth/invalid-recipient-email',\n    INVALID_SENDER: 'auth/invalid-sender',\n    INVALID_SESSION_INFO: 'auth/invalid-verification-id',\n    INVALID_TENANT_ID: 'auth/invalid-tenant-id',\n    MFA_INFO_NOT_FOUND: 'auth/multi-factor-info-not-found',\n    MFA_REQUIRED: 'auth/multi-factor-auth-required',\n    MISSING_ANDROID_PACKAGE_NAME: 'auth/missing-android-pkg-name',\n    MISSING_APP_CREDENTIAL: 'auth/missing-app-credential',\n    MISSING_AUTH_DOMAIN: 'auth/auth-domain-config-required',\n    MISSING_CODE: 'auth/missing-verification-code',\n    MISSING_CONTINUE_URI: 'auth/missing-continue-uri',\n    MISSING_IFRAME_START: 'auth/missing-iframe-start',\n    MISSING_IOS_BUNDLE_ID: 'auth/missing-ios-bundle-id',\n    MISSING_OR_INVALID_NONCE: 'auth/missing-or-invalid-nonce',\n    MISSING_MFA_INFO: 'auth/missing-multi-factor-info',\n    MISSING_MFA_SESSION: 'auth/missing-multi-factor-session',\n    MISSING_PHONE_NUMBER: 'auth/missing-phone-number',\n    MISSING_SESSION_INFO: 'auth/missing-verification-id',\n    MODULE_DESTROYED: 'auth/app-deleted',\n    NEED_CONFIRMATION: 'auth/account-exists-with-different-credential',\n    NETWORK_REQUEST_FAILED: 'auth/network-request-failed',\n    NULL_USER: 'auth/null-user',\n    NO_AUTH_EVENT: 'auth/no-auth-event',\n    NO_SUCH_PROVIDER: 'auth/no-such-provider',\n    OPERATION_NOT_ALLOWED: 'auth/operation-not-allowed',\n    OPERATION_NOT_SUPPORTED: 'auth/operation-not-supported-in-this-environment',\n    POPUP_BLOCKED: 'auth/popup-blocked',\n    POPUP_CLOSED_BY_USER: 'auth/popup-closed-by-user',\n    PROVIDER_ALREADY_LINKED: 'auth/provider-already-linked',\n    QUOTA_EXCEEDED: 'auth/quota-exceeded',\n    REDIRECT_CANCELLED_BY_USER: 'auth/redirect-cancelled-by-user',\n    REDIRECT_OPERATION_PENDING: 'auth/redirect-operation-pending',\n    REJECTED_CREDENTIAL: 'auth/rejected-credential',\n    SECOND_FACTOR_ALREADY_ENROLLED: 'auth/second-factor-already-in-use',\n    SECOND_FACTOR_LIMIT_EXCEEDED: 'auth/maximum-second-factor-count-exceeded',\n    TENANT_ID_MISMATCH: 'auth/tenant-id-mismatch',\n    TIMEOUT: 'auth/timeout',\n    TOKEN_EXPIRED: 'auth/user-token-expired',\n    TOO_MANY_ATTEMPTS_TRY_LATER: 'auth/too-many-requests',\n    UNAUTHORIZED_DOMAIN: 'auth/unauthorized-continue-uri',\n    UNSUPPORTED_FIRST_FACTOR: 'auth/unsupported-first-factor',\n    UNSUPPORTED_PERSISTENCE: 'auth/unsupported-persistence-type',\n    UNSUPPORTED_TENANT_OPERATION: 'auth/unsupported-tenant-operation',\n    UNVERIFIED_EMAIL: 'auth/unverified-email',\n    USER_CANCELLED: 'auth/user-cancelled',\n    USER_DELETED: 'auth/user-not-found',\n    USER_DISABLED: 'auth/user-disabled',\n    USER_MISMATCH: 'auth/user-mismatch',\n    USER_SIGNED_OUT: 'auth/user-signed-out',\n    WEAK_PASSWORD: 'auth/weak-password',\n    WEB_STORAGE_UNSUPPORTED: 'auth/web-storage-unsupported',\n    ALREADY_INITIALIZED: 'auth/already-initialized',\n    RECAPTCHA_NOT_ENABLED: 'auth/recaptcha-not-enabled',\n    MISSING_RECAPTCHA_TOKEN: 'auth/missing-recaptcha-token',\n    INVALID_RECAPTCHA_TOKEN: 'auth/invalid-recaptcha-token',\n    INVALID_RECAPTCHA_ACTION: 'auth/invalid-recaptcha-action',\n    MISSING_CLIENT_TYPE: 'auth/missing-client-type',\n    MISSING_RECAPTCHA_VERSION: 'auth/missing-recaptcha-version',\n    INVALID_RECAPTCHA_VERSION: 'auth/invalid-recaptcha-version',\n    INVALID_REQ_TYPE: 'auth/invalid-req-type'\n};\n\n/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nconst logClient = new Logger('@firebase/auth');\nfunction _logWarn(msg, ...args) {\n    if (logClient.logLevel <= LogLevel.WARN) {\n        logClient.warn(`Auth (${SDK_VERSION}): ${msg}`, ...args);\n    }\n}\nfunction _logError(msg, ...args) {\n    if (logClient.logLevel <= LogLevel.ERROR) {\n        logClient.error(`Auth (${SDK_VERSION}): ${msg}`, ...args);\n    }\n}\n\n/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nfunction _fail(authOrCode, ...rest) {\n    throw createErrorInternal(authOrCode, ...rest);\n}\nfunction _createError(authOrCode, ...rest) {\n    return createErrorInternal(authOrCode, ...rest);\n}\nfunction _errorWithCustomMessage(auth, code, message) {\n    const errorMap = Object.assign(Object.assign({}, prodErrorMap()), { [code]: message });\n    const factory = new ErrorFactory('auth', 'Firebase', errorMap);\n    return factory.create(code, {\n        appName: auth.name\n    });\n}\nfunction _serverAppCurrentUserOperationNotSupportedError(auth) {\n    return _errorWithCustomMessage(auth, \"operation-not-supported-in-this-environment\" /* AuthErrorCode.OPERATION_NOT_SUPPORTED */, 'Operations that alter the current user are not supported in conjunction with FirebaseServerApp');\n}\nfunction _assertInstanceOf(auth, object, instance) {\n    const constructorInstance = instance;\n    if (!(object instanceof constructorInstance)) {\n        if (constructorInstance.name !== object.constructor.name) {\n            _fail(auth, \"argument-error\" /* AuthErrorCode.ARGUMENT_ERROR */);\n        }\n        throw _errorWithCustomMessage(auth, \"argument-error\" /* AuthErrorCode.ARGUMENT_ERROR */, `Type of ${object.constructor.name} does not match expected instance.` +\n            `Did you pass a reference from a different Auth SDK?`);\n    }\n}\nfunction createErrorInternal(authOrCode, ...rest) {\n    if (typeof authOrCode !== 'string') {\n        const code = rest[0];\n        const fullParams = [...rest.slice(1)];\n        if (fullParams[0]) {\n            fullParams[0].appName = authOrCode.name;\n        }\n        return authOrCode._errorFactory.create(code, ...fullParams);\n    }\n    return _DEFAULT_AUTH_ERROR_FACTORY.create(authOrCode, ...rest);\n}\nfunction _assert(assertion, authOrCode, ...rest) {\n    if (!assertion) {\n        throw createErrorInternal(authOrCode, ...rest);\n    }\n}\n/**\n * Unconditionally fails, throwing an internal error with the given message.\n *\n * @param failure type of failure encountered\n * @throws Error\n */\nfunction debugFail(failure) {\n    // Log the failure in addition to throw an exception, just in case the\n    // exception is swallowed.\n    const message = `INTERNAL ASSERTION FAILED: ` + failure;\n    _logError(message);\n    // NOTE: We don't use FirebaseError here because these are internal failures\n    // that cannot be handled by the user. (Also it would create a circular\n    // dependency between the error and assert modules which doesn't work.)\n    throw new Error(message);\n}\n/**\n * Fails if the given assertion condition is false, throwing an Error with the\n * given message if it did.\n *\n * @param assertion\n * @param message\n */\nfunction debugAssert(assertion, message) {\n    if (!assertion) {\n        debugFail(message);\n    }\n}\n\n/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nfunction _getCurrentUrl() {\n    var _a;\n    return (typeof self !== 'undefined' && ((_a = self.location) === null || _a === void 0 ? void 0 : _a.href)) || '';\n}\nfunction _isHttpOrHttps() {\n    return _getCurrentScheme() === 'http:' || _getCurrentScheme() === 'https:';\n}\nfunction _getCurrentScheme() {\n    var _a;\n    return (typeof self !== 'undefined' && ((_a = self.location) === null || _a === void 0 ? void 0 : _a.protocol)) || null;\n}\n\n/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Determine whether the browser is working online\n */\nfunction _isOnline() {\n    if (typeof navigator !== 'undefined' &&\n        navigator &&\n        'onLine' in navigator &&\n        typeof navigator.onLine === 'boolean' &&\n        // Apply only for traditional web apps and Chrome extensions.\n        // This is especially true for Cordova apps which have unreliable\n        // navigator.onLine behavior unless cordova-plugin-network-information is\n        // installed which overwrites the native navigator.onLine value and\n        // defines navigator.connection.\n        (_isHttpOrHttps() || isBrowserExtension() || 'connection' in navigator)) {\n        return navigator.onLine;\n    }\n    // If we can't determine the state, assume it is online.\n    return true;\n}\nfunction _getUserLanguage() {\n    if (typeof navigator === 'undefined') {\n        return null;\n    }\n    const navigatorLanguage = navigator;\n    return (\n    // Most reliable, but only supported in Chrome/Firefox.\n    (navigatorLanguage.languages && navigatorLanguage.languages[0]) ||\n        // Supported in most browsers, but returns the language of the browser\n        // UI, not the language set in browser settings.\n        navigatorLanguage.language ||\n        // Couldn't determine language.\n        null);\n}\n\n/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * A structure to help pick between a range of long and short delay durations\n * depending on the current environment. In general, the long delay is used for\n * mobile environments whereas short delays are used for desktop environments.\n */\nclass Delay {\n    constructor(shortDelay, longDelay) {\n        this.shortDelay = shortDelay;\n        this.longDelay = longDelay;\n        // Internal error when improperly initialized.\n        debugAssert(longDelay > shortDelay, 'Short delay should be less than long delay!');\n        this.isMobile = isMobileCordova() || isReactNative();\n    }\n    get() {\n        if (!_isOnline()) {\n            // Pick the shorter timeout.\n            return Math.min(5000 /* DelayMin.OFFLINE */, this.shortDelay);\n        }\n        // If running in a mobile environment, return the long delay, otherwise\n        // return the short delay.\n        // This could be improved in the future to dynamically change based on other\n        // variables instead of just reading the current environment.\n        return this.isMobile ? this.longDelay : this.shortDelay;\n    }\n}\n\n/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nfunction _emulatorUrl(config, path) {\n    debugAssert(config.emulator, 'Emulator should always be set here');\n    const { url } = config.emulator;\n    if (!path) {\n        return url;\n    }\n    return `${url}${path.startsWith('/') ? path.slice(1) : path}`;\n}\n\n/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nclass FetchProvider {\n    static initialize(fetchImpl, headersImpl, responseImpl) {\n        this.fetchImpl = fetchImpl;\n        if (headersImpl) {\n            this.headersImpl = headersImpl;\n        }\n        if (responseImpl) {\n            this.responseImpl = responseImpl;\n        }\n    }\n    static fetch() {\n        if (this.fetchImpl) {\n            return this.fetchImpl;\n        }\n        if (typeof self !== 'undefined' && 'fetch' in self) {\n            return self.fetch;\n        }\n        if (typeof globalThis !== 'undefined' && globalThis.fetch) {\n            return globalThis.fetch;\n        }\n        if (typeof fetch !== 'undefined') {\n            return fetch;\n        }\n        debugFail('Could not find fetch implementation, make sure you call FetchProvider.initialize() with an appropriate polyfill');\n    }\n    static headers() {\n        if (this.headersImpl) {\n            return this.headersImpl;\n        }\n        if (typeof self !== 'undefined' && 'Headers' in self) {\n            return self.Headers;\n        }\n        if (typeof globalThis !== 'undefined' && globalThis.Headers) {\n            return globalThis.Headers;\n        }\n        if (typeof Headers !== 'undefined') {\n            return Headers;\n        }\n        debugFail('Could not find Headers implementation, make sure you call FetchProvider.initialize() with an appropriate polyfill');\n    }\n    static response() {\n        if (this.responseImpl) {\n            return this.responseImpl;\n        }\n        if (typeof self !== 'undefined' && 'Response' in self) {\n            return self.Response;\n        }\n        if (typeof globalThis !== 'undefined' && globalThis.Response) {\n            return globalThis.Response;\n        }\n        if (typeof Response !== 'undefined') {\n            return Response;\n        }\n        debugFail('Could not find Response implementation, make sure you call FetchProvider.initialize() with an appropriate polyfill');\n    }\n}\n\n/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Map from errors returned by the server to errors to developer visible errors\n */\nconst SERVER_ERROR_MAP = {\n    // Custom token errors.\n    [\"CREDENTIAL_MISMATCH\" /* ServerError.CREDENTIAL_MISMATCH */]: \"custom-token-mismatch\" /* AuthErrorCode.CREDENTIAL_MISMATCH */,\n    // This can only happen if the SDK sends a bad request.\n    [\"MISSING_CUSTOM_TOKEN\" /* ServerError.MISSING_CUSTOM_TOKEN */]: \"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */,\n    // Create Auth URI errors.\n    [\"INVALID_IDENTIFIER\" /* ServerError.INVALID_IDENTIFIER */]: \"invalid-email\" /* AuthErrorCode.INVALID_EMAIL */,\n    // This can only happen if the SDK sends a bad request.\n    [\"MISSING_CONTINUE_URI\" /* ServerError.MISSING_CONTINUE_URI */]: \"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */,\n    // Sign in with email and password errors (some apply to sign up too).\n    [\"INVALID_PASSWORD\" /* ServerError.INVALID_PASSWORD */]: \"wrong-password\" /* AuthErrorCode.INVALID_PASSWORD */,\n    // This can only happen if the SDK sends a bad request.\n    [\"MISSING_PASSWORD\" /* ServerError.MISSING_PASSWORD */]: \"missing-password\" /* AuthErrorCode.MISSING_PASSWORD */,\n    // Thrown if Email Enumeration Protection is enabled in the project and the email or password is\n    // invalid.\n    [\"INVALID_LOGIN_CREDENTIALS\" /* ServerError.INVALID_LOGIN_CREDENTIALS */]: \"invalid-credential\" /* AuthErrorCode.INVALID_CREDENTIAL */,\n    // Sign up with email and password errors.\n    [\"EMAIL_EXISTS\" /* ServerError.EMAIL_EXISTS */]: \"email-already-in-use\" /* AuthErrorCode.EMAIL_EXISTS */,\n    [\"PASSWORD_LOGIN_DISABLED\" /* ServerError.PASSWORD_LOGIN_DISABLED */]: \"operation-not-allowed\" /* AuthErrorCode.OPERATION_NOT_ALLOWED */,\n    // Verify assertion for sign in with credential errors:\n    [\"INVALID_IDP_RESPONSE\" /* ServerError.INVALID_IDP_RESPONSE */]: \"invalid-credential\" /* AuthErrorCode.INVALID_CREDENTIAL */,\n    [\"INVALID_PENDING_TOKEN\" /* ServerError.INVALID_PENDING_TOKEN */]: \"invalid-credential\" /* AuthErrorCode.INVALID_CREDENTIAL */,\n    [\"FEDERATED_USER_ID_ALREADY_LINKED\" /* ServerError.FEDERATED_USER_ID_ALREADY_LINKED */]: \"credential-already-in-use\" /* AuthErrorCode.CREDENTIAL_ALREADY_IN_USE */,\n    // This can only happen if the SDK sends a bad request.\n    [\"MISSING_REQ_TYPE\" /* ServerError.MISSING_REQ_TYPE */]: \"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */,\n    // Send Password reset email errors:\n    [\"EMAIL_NOT_FOUND\" /* ServerError.EMAIL_NOT_FOUND */]: \"user-not-found\" /* AuthErrorCode.USER_DELETED */,\n    [\"RESET_PASSWORD_EXCEED_LIMIT\" /* ServerError.RESET_PASSWORD_EXCEED_LIMIT */]: \"too-many-requests\" /* AuthErrorCode.TOO_MANY_ATTEMPTS_TRY_LATER */,\n    [\"EXPIRED_OOB_CODE\" /* ServerError.EXPIRED_OOB_CODE */]: \"expired-action-code\" /* AuthErrorCode.EXPIRED_OOB_CODE */,\n    [\"INVALID_OOB_CODE\" /* ServerError.INVALID_OOB_CODE */]: \"invalid-action-code\" /* AuthErrorCode.INVALID_OOB_CODE */,\n    // This can only happen if the SDK sends a bad request.\n    [\"MISSING_OOB_CODE\" /* ServerError.MISSING_OOB_CODE */]: \"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */,\n    // Operations that require ID token in request:\n    [\"CREDENTIAL_TOO_OLD_LOGIN_AGAIN\" /* ServerError.CREDENTIAL_TOO_OLD_LOGIN_AGAIN */]: \"requires-recent-login\" /* AuthErrorCode.CREDENTIAL_TOO_OLD_LOGIN_AGAIN */,\n    [\"INVALID_ID_TOKEN\" /* ServerError.INVALID_ID_TOKEN */]: \"invalid-user-token\" /* AuthErrorCode.INVALID_AUTH */,\n    [\"TOKEN_EXPIRED\" /* ServerError.TOKEN_EXPIRED */]: \"user-token-expired\" /* AuthErrorCode.TOKEN_EXPIRED */,\n    [\"USER_NOT_FOUND\" /* ServerError.USER_NOT_FOUND */]: \"user-token-expired\" /* AuthErrorCode.TOKEN_EXPIRED */,\n    // Other errors.\n    [\"TOO_MANY_ATTEMPTS_TRY_LATER\" /* ServerError.TOO_MANY_ATTEMPTS_TRY_LATER */]: \"too-many-requests\" /* AuthErrorCode.TOO_MANY_ATTEMPTS_TRY_LATER */,\n    [\"PASSWORD_DOES_NOT_MEET_REQUIREMENTS\" /* ServerError.PASSWORD_DOES_NOT_MEET_REQUIREMENTS */]: \"password-does-not-meet-requirements\" /* AuthErrorCode.PASSWORD_DOES_NOT_MEET_REQUIREMENTS */,\n    // Phone Auth related errors.\n    [\"INVALID_CODE\" /* ServerError.INVALID_CODE */]: \"invalid-verification-code\" /* AuthErrorCode.INVALID_CODE */,\n    [\"INVALID_SESSION_INFO\" /* ServerError.INVALID_SESSION_INFO */]: \"invalid-verification-id\" /* AuthErrorCode.INVALID_SESSION_INFO */,\n    [\"INVALID_TEMPORARY_PROOF\" /* ServerError.INVALID_TEMPORARY_PROOF */]: \"invalid-credential\" /* AuthErrorCode.INVALID_CREDENTIAL */,\n    [\"MISSING_SESSION_INFO\" /* ServerError.MISSING_SESSION_INFO */]: \"missing-verification-id\" /* AuthErrorCode.MISSING_SESSION_INFO */,\n    [\"SESSION_EXPIRED\" /* ServerError.SESSION_EXPIRED */]: \"code-expired\" /* AuthErrorCode.CODE_EXPIRED */,\n    // Other action code errors when additional settings passed.\n    // MISSING_CONTINUE_URI is getting mapped to INTERNAL_ERROR above.\n    // This is OK as this error will be caught by client side validation.\n    [\"MISSING_ANDROID_PACKAGE_NAME\" /* ServerError.MISSING_ANDROID_PACKAGE_NAME */]: \"missing-android-pkg-name\" /* AuthErrorCode.MISSING_ANDROID_PACKAGE_NAME */,\n    [\"UNAUTHORIZED_DOMAIN\" /* ServerError.UNAUTHORIZED_DOMAIN */]: \"unauthorized-continue-uri\" /* AuthErrorCode.UNAUTHORIZED_DOMAIN */,\n    // getProjectConfig errors when clientId is passed.\n    [\"INVALID_OAUTH_CLIENT_ID\" /* ServerError.INVALID_OAUTH_CLIENT_ID */]: \"invalid-oauth-client-id\" /* AuthErrorCode.INVALID_OAUTH_CLIENT_ID */,\n    // User actions (sign-up or deletion) disabled errors.\n    [\"ADMIN_ONLY_OPERATION\" /* ServerError.ADMIN_ONLY_OPERATION */]: \"admin-restricted-operation\" /* AuthErrorCode.ADMIN_ONLY_OPERATION */,\n    // Multi factor related errors.\n    [\"INVALID_MFA_PENDING_CREDENTIAL\" /* ServerError.INVALID_MFA_PENDING_CREDENTIAL */]: \"invalid-multi-factor-session\" /* AuthErrorCode.INVALID_MFA_SESSION */,\n    [\"MFA_ENROLLMENT_NOT_FOUND\" /* ServerError.MFA_ENROLLMENT_NOT_FOUND */]: \"multi-factor-info-not-found\" /* AuthErrorCode.MFA_INFO_NOT_FOUND */,\n    [\"MISSING_MFA_ENROLLMENT_ID\" /* ServerError.MISSING_MFA_ENROLLMENT_ID */]: \"missing-multi-factor-info\" /* AuthErrorCode.MISSING_MFA_INFO */,\n    [\"MISSING_MFA_PENDING_CREDENTIAL\" /* ServerError.MISSING_MFA_PENDING_CREDENTIAL */]: \"missing-multi-factor-session\" /* AuthErrorCode.MISSING_MFA_SESSION */,\n    [\"SECOND_FACTOR_EXISTS\" /* ServerError.SECOND_FACTOR_EXISTS */]: \"second-factor-already-in-use\" /* AuthErrorCode.SECOND_FACTOR_ALREADY_ENROLLED */,\n    [\"SECOND_FACTOR_LIMIT_EXCEEDED\" /* ServerError.SECOND_FACTOR_LIMIT_EXCEEDED */]: \"maximum-second-factor-count-exceeded\" /* AuthErrorCode.SECOND_FACTOR_LIMIT_EXCEEDED */,\n    // Blocking functions related errors.\n    [\"BLOCKING_FUNCTION_ERROR_RESPONSE\" /* ServerError.BLOCKING_FUNCTION_ERROR_RESPONSE */]: \"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */,\n    // Recaptcha related errors.\n    [\"RECAPTCHA_NOT_ENABLED\" /* ServerError.RECAPTCHA_NOT_ENABLED */]: \"recaptcha-not-enabled\" /* AuthErrorCode.RECAPTCHA_NOT_ENABLED */,\n    [\"MISSING_RECAPTCHA_TOKEN\" /* ServerError.MISSING_RECAPTCHA_TOKEN */]: \"missing-recaptcha-token\" /* AuthErrorCode.MISSING_RECAPTCHA_TOKEN */,\n    [\"INVALID_RECAPTCHA_TOKEN\" /* ServerError.INVALID_RECAPTCHA_TOKEN */]: \"invalid-recaptcha-token\" /* AuthErrorCode.INVALID_RECAPTCHA_TOKEN */,\n    [\"INVALID_RECAPTCHA_ACTION\" /* ServerError.INVALID_RECAPTCHA_ACTION */]: \"invalid-recaptcha-action\" /* AuthErrorCode.INVALID_RECAPTCHA_ACTION */,\n    [\"MISSING_CLIENT_TYPE\" /* ServerError.MISSING_CLIENT_TYPE */]: \"missing-client-type\" /* AuthErrorCode.MISSING_CLIENT_TYPE */,\n    [\"MISSING_RECAPTCHA_VERSION\" /* ServerError.MISSING_RECAPTCHA_VERSION */]: \"missing-recaptcha-version\" /* AuthErrorCode.MISSING_RECAPTCHA_VERSION */,\n    [\"INVALID_RECAPTCHA_VERSION\" /* ServerError.INVALID_RECAPTCHA_VERSION */]: \"invalid-recaptcha-version\" /* AuthErrorCode.INVALID_RECAPTCHA_VERSION */,\n    [\"INVALID_REQ_TYPE\" /* ServerError.INVALID_REQ_TYPE */]: \"invalid-req-type\" /* AuthErrorCode.INVALID_REQ_TYPE */\n};\n\n/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nconst DEFAULT_API_TIMEOUT_MS = new Delay(30000, 60000);\nfunction _addTidIfNecessary(auth, request) {\n    if (auth.tenantId && !request.tenantId) {\n        return Object.assign(Object.assign({}, request), { tenantId: auth.tenantId });\n    }\n    return request;\n}\nasync function _performApiRequest(auth, method, path, request, customErrorMap = {}) {\n    return _performFetchWithErrorHandling(auth, customErrorMap, async () => {\n        let body = {};\n        let params = {};\n        if (request) {\n            if (method === \"GET\" /* HttpMethod.GET */) {\n                params = request;\n            }\n            else {\n                body = {\n                    body: JSON.stringify(request)\n                };\n            }\n        }\n        const query = querystring(Object.assign({ key: auth.config.apiKey }, params)).slice(1);\n        const headers = await auth._getAdditionalHeaders();\n        headers[\"Content-Type\" /* HttpHeader.CONTENT_TYPE */] = 'application/json';\n        if (auth.languageCode) {\n            headers[\"X-Firebase-Locale\" /* HttpHeader.X_FIREBASE_LOCALE */] = auth.languageCode;\n        }\n        const fetchArgs = Object.assign({ method,\n            headers }, body);\n        /* Security-conscious server-side frameworks tend to have built in mitigations for referrer\n           problems\". See the Cloudflare GitHub issue #487: Error: The 'referrerPolicy' field on\n           'RequestInitializerDict' is not implemented.\"\n           https://github.com/cloudflare/next-on-pages/issues/487 */\n        if (!isCloudflareWorker()) {\n            fetchArgs.referrerPolicy = 'no-referrer';\n        }\n        return FetchProvider.fetch()(_getFinalTarget(auth, auth.config.apiHost, path, query), fetchArgs);\n    });\n}\nasync function _performFetchWithErrorHandling(auth, customErrorMap, fetchFn) {\n    auth._canInitEmulator = false;\n    const errorMap = Object.assign(Object.assign({}, SERVER_ERROR_MAP), customErrorMap);\n    try {\n        const networkTimeout = new NetworkTimeout(auth);\n        const response = await Promise.race([\n            fetchFn(),\n            networkTimeout.promise\n        ]);\n        // If we've reached this point, the fetch succeeded and the networkTimeout\n        // didn't throw; clear the network timeout delay so that Node won't hang\n        networkTimeout.clearNetworkTimeout();\n        const json = await response.json();\n        if ('needConfirmation' in json) {\n            throw _makeTaggedError(auth, \"account-exists-with-different-credential\" /* AuthErrorCode.NEED_CONFIRMATION */, json);\n        }\n        if (response.ok && !('errorMessage' in json)) {\n            return json;\n        }\n        else {\n            const errorMessage = response.ok ? json.errorMessage : json.error.message;\n            const [serverErrorCode, serverErrorMessage] = errorMessage.split(' : ');\n            if (serverErrorCode === \"FEDERATED_USER_ID_ALREADY_LINKED\" /* ServerError.FEDERATED_USER_ID_ALREADY_LINKED */) {\n                throw _makeTaggedError(auth, \"credential-already-in-use\" /* AuthErrorCode.CREDENTIAL_ALREADY_IN_USE */, json);\n            }\n            else if (serverErrorCode === \"EMAIL_EXISTS\" /* ServerError.EMAIL_EXISTS */) {\n                throw _makeTaggedError(auth, \"email-already-in-use\" /* AuthErrorCode.EMAIL_EXISTS */, json);\n            }\n            else if (serverErrorCode === \"USER_DISABLED\" /* ServerError.USER_DISABLED */) {\n                throw _makeTaggedError(auth, \"user-disabled\" /* AuthErrorCode.USER_DISABLED */, json);\n            }\n            const authError = errorMap[serverErrorCode] ||\n                serverErrorCode\n                    .toLowerCase()\n                    .replace(/[_\\s]+/g, '-');\n            if (serverErrorMessage) {\n                throw _errorWithCustomMessage(auth, authError, serverErrorMessage);\n            }\n            else {\n                _fail(auth, authError);\n            }\n        }\n    }\n    catch (e) {\n        if (e instanceof FirebaseError) {\n            throw e;\n        }\n        // Changing this to a different error code will log user out when there is a network error\n        // because we treat any error other than NETWORK_REQUEST_FAILED as token is invalid.\n        // https://github.com/firebase/firebase-js-sdk/blob/4fbc73610d70be4e0852e7de63a39cb7897e8546/packages/auth/src/core/auth/auth_impl.ts#L309-L316\n        _fail(auth, \"network-request-failed\" /* AuthErrorCode.NETWORK_REQUEST_FAILED */, { 'message': String(e) });\n    }\n}\nasync function _performSignInRequest(auth, method, path, request, customErrorMap = {}) {\n    const serverResponse = await _performApiRequest(auth, method, path, request, customErrorMap);\n    if ('mfaPendingCredential' in serverResponse) {\n        _fail(auth, \"multi-factor-auth-required\" /* AuthErrorCode.MFA_REQUIRED */, {\n            _serverResponse: serverResponse\n        });\n    }\n    return serverResponse;\n}\nfunction _getFinalTarget(auth, host, path, query) {\n    const base = `${host}${path}?${query}`;\n    if (!auth.config.emulator) {\n        return `${auth.config.apiScheme}://${base}`;\n    }\n    return _emulatorUrl(auth.config, base);\n}\nfunction _parseEnforcementState(enforcementStateStr) {\n    switch (enforcementStateStr) {\n        case 'ENFORCE':\n            return \"ENFORCE\" /* EnforcementState.ENFORCE */;\n        case 'AUDIT':\n            return \"AUDIT\" /* EnforcementState.AUDIT */;\n        case 'OFF':\n            return \"OFF\" /* EnforcementState.OFF */;\n        default:\n            return \"ENFORCEMENT_STATE_UNSPECIFIED\" /* EnforcementState.ENFORCEMENT_STATE_UNSPECIFIED */;\n    }\n}\nclass NetworkTimeout {\n    clearNetworkTimeout() {\n        clearTimeout(this.timer);\n    }\n    constructor(auth) {\n        this.auth = auth;\n        // Node timers and browser timers are fundamentally incompatible, but we\n        // don't care about the value here\n        // eslint-disable-next-line @typescript-eslint/no-explicit-any\n        this.timer = null;\n        this.promise = new Promise((_, reject) => {\n            this.timer = setTimeout(() => {\n                return reject(_createError(this.auth, \"network-request-failed\" /* AuthErrorCode.NETWORK_REQUEST_FAILED */));\n            }, DEFAULT_API_TIMEOUT_MS.get());\n        });\n    }\n}\nfunction _makeTaggedError(auth, code, response) {\n    const errorParams = {\n        appName: auth.name\n    };\n    if (response.email) {\n        errorParams.email = response.email;\n    }\n    if (response.phoneNumber) {\n        errorParams.phoneNumber = response.phoneNumber;\n    }\n    const error = _createError(auth, code, errorParams);\n    // We know customData is defined on error because errorParams is defined\n    error.customData._tokenResponse = response;\n    return error;\n}\n\n/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nfunction isV2(grecaptcha) {\n    return (grecaptcha !== undefined &&\n        grecaptcha.getResponse !== undefined);\n}\nfunction isEnterprise(grecaptcha) {\n    return (grecaptcha !== undefined &&\n        grecaptcha.enterprise !== undefined);\n}\nclass RecaptchaConfig {\n    constructor(response) {\n        /**\n         * The reCAPTCHA site key.\n         */\n        this.siteKey = '';\n        /**\n         * The list of providers and their enablement status for reCAPTCHA Enterprise.\n         */\n        this.recaptchaEnforcementState = [];\n        if (response.recaptchaKey === undefined) {\n            throw new Error('recaptchaKey undefined');\n        }\n        // Example response.recaptchaKey: \"projects/proj123/keys/sitekey123\"\n        this.siteKey = response.recaptchaKey.split('/')[3];\n        this.recaptchaEnforcementState = response.recaptchaEnforcementState;\n    }\n    /**\n     * Returns the reCAPTCHA Enterprise enforcement state for the given provider.\n     *\n     * @param providerStr - The provider whose enforcement state is to be returned.\n     * @returns The reCAPTCHA Enterprise enforcement state for the given provider.\n     */\n    getProviderEnforcementState(providerStr) {\n        if (!this.recaptchaEnforcementState ||\n            this.recaptchaEnforcementState.length === 0) {\n            return null;\n        }\n        for (const recaptchaEnforcementState of this.recaptchaEnforcementState) {\n            if (recaptchaEnforcementState.provider &&\n                recaptchaEnforcementState.provider === providerStr) {\n                return _parseEnforcementState(recaptchaEnforcementState.enforcementState);\n            }\n        }\n        return null;\n    }\n    /**\n     * Returns true if the reCAPTCHA Enterprise enforcement state for the provider is set to ENFORCE or AUDIT.\n     *\n     * @param providerStr - The provider whose enablement state is to be returned.\n     * @returns Whether or not reCAPTCHA Enterprise protection is enabled for the given provider.\n     */\n    isProviderEnabled(providerStr) {\n        return (this.getProviderEnforcementState(providerStr) ===\n            \"ENFORCE\" /* EnforcementState.ENFORCE */ ||\n            this.getProviderEnforcementState(providerStr) === \"AUDIT\" /* EnforcementState.AUDIT */);\n    }\n    /**\n     * Returns true if reCAPTCHA Enterprise protection is enabled in at least one provider, otherwise\n     * returns false.\n     *\n     * @returns Whether or not reCAPTCHA Enterprise protection is enabled for at least one provider.\n     */\n    isAnyProviderEnabled() {\n        return (this.isProviderEnabled(\"EMAIL_PASSWORD_PROVIDER\" /* RecaptchaAuthProvider.EMAIL_PASSWORD_PROVIDER */) ||\n            this.isProviderEnabled(\"PHONE_PROVIDER\" /* RecaptchaAuthProvider.PHONE_PROVIDER */));\n    }\n}\n\n/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nasync function getRecaptchaParams(auth) {\n    return ((await _performApiRequest(auth, \"GET\" /* HttpMethod.GET */, \"/v1/recaptchaParams\" /* Endpoint.GET_RECAPTCHA_PARAM */)).recaptchaSiteKey || '');\n}\nasync function getRecaptchaConfig(auth, request) {\n    return _performApiRequest(auth, \"GET\" /* HttpMethod.GET */, \"/v2/recaptchaConfig\" /* Endpoint.GET_RECAPTCHA_CONFIG */, _addTidIfNecessary(auth, request));\n}\n\n/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nasync function deleteAccount(auth, request) {\n    return _performApiRequest(auth, \"POST\" /* HttpMethod.POST */, \"/v1/accounts:delete\" /* Endpoint.DELETE_ACCOUNT */, request);\n}\nasync function deleteLinkedAccounts(auth, request) {\n    return _performApiRequest(auth, \"POST\" /* HttpMethod.POST */, \"/v1/accounts:update\" /* Endpoint.SET_ACCOUNT_INFO */, request);\n}\nasync function getAccountInfo(auth, request) {\n    return _performApiRequest(auth, \"POST\" /* HttpMethod.POST */, \"/v1/accounts:lookup\" /* Endpoint.GET_ACCOUNT_INFO */, request);\n}\n\n/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nfunction utcTimestampToDateString(utcTimestamp) {\n    if (!utcTimestamp) {\n        return undefined;\n    }\n    try {\n        // Convert to date object.\n        const date = new Date(Number(utcTimestamp));\n        // Test date is valid.\n        if (!isNaN(date.getTime())) {\n            // Convert to UTC date string.\n            return date.toUTCString();\n        }\n    }\n    catch (e) {\n        // Do nothing. undefined will be returned.\n    }\n    return undefined;\n}\n\n/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Returns a JSON Web Token (JWT) used to identify the user to a Firebase service.\n *\n * @remarks\n * Returns the current token if it has not expired or if it will not expire in the next five\n * minutes. Otherwise, this will refresh the token and return a new one.\n *\n * @param user - The user.\n * @param forceRefresh - Force refresh regardless of token expiration.\n *\n * @public\n */\nfunction getIdToken(user, forceRefresh = false) {\n    return getModularInstance(user).getIdToken(forceRefresh);\n}\n/**\n * Returns a deserialized JSON Web Token (JWT) used to identify the user to a Firebase service.\n *\n * @remarks\n * Returns the current token if it has not expired or if it will not expire in the next five\n * minutes. Otherwise, this will refresh the token and return a new one.\n *\n * @param user - The user.\n * @param forceRefresh - Force refresh regardless of token expiration.\n *\n * @public\n */\nasync function getIdTokenResult(user, forceRefresh = false) {\n    const userInternal = getModularInstance(user);\n    const token = await userInternal.getIdToken(forceRefresh);\n    const claims = _parseToken(token);\n    _assert(claims && claims.exp && claims.auth_time && claims.iat, userInternal.auth, \"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */);\n    const firebase = typeof claims.firebase === 'object' ? claims.firebase : undefined;\n    const signInProvider = firebase === null || firebase === void 0 ? void 0 : firebase['sign_in_provider'];\n    return {\n        claims,\n        token,\n        authTime: utcTimestampToDateString(secondsStringToMilliseconds(claims.auth_time)),\n        issuedAtTime: utcTimestampToDateString(secondsStringToMilliseconds(claims.iat)),\n        expirationTime: utcTimestampToDateString(secondsStringToMilliseconds(claims.exp)),\n        signInProvider: signInProvider || null,\n        signInSecondFactor: (firebase === null || firebase === void 0 ? void 0 : firebase['sign_in_second_factor']) || null\n    };\n}\nfunction secondsStringToMilliseconds(seconds) {\n    return Number(seconds) * 1000;\n}\nfunction _parseToken(token) {\n    const [algorithm, payload, signature] = token.split('.');\n    if (algorithm === undefined ||\n        payload === undefined ||\n        signature === undefined) {\n        _logError('JWT malformed, contained fewer than 3 sections');\n        return null;\n    }\n    try {\n        const decoded = base64Decode(payload);\n        if (!decoded) {\n            _logError('Failed to decode base64 JWT payload');\n            return null;\n        }\n        return JSON.parse(decoded);\n    }\n    catch (e) {\n        _logError('Caught error parsing JWT payload as JSON', e === null || e === void 0 ? void 0 : e.toString());\n        return null;\n    }\n}\n/**\n * Extract expiresIn TTL from a token by subtracting the expiration from the issuance.\n */\nfunction _tokenExpiresIn(token) {\n    const parsedToken = _parseToken(token);\n    _assert(parsedToken, \"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */);\n    _assert(typeof parsedToken.exp !== 'undefined', \"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */);\n    _assert(typeof parsedToken.iat !== 'undefined', \"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */);\n    return Number(parsedToken.exp) - Number(parsedToken.iat);\n}\n\n/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nasync function _logoutIfInvalidated(user, promise, bypassAuthState = false) {\n    if (bypassAuthState) {\n        return promise;\n    }\n    try {\n        return await promise;\n    }\n    catch (e) {\n        if (e instanceof FirebaseError && isUserInvalidated(e)) {\n            if (user.auth.currentUser === user) {\n                await user.auth.signOut();\n            }\n        }\n        throw e;\n    }\n}\nfunction isUserInvalidated({ code }) {\n    return (code === `auth/${\"user-disabled\" /* AuthErrorCode.USER_DISABLED */}` ||\n        code === `auth/${\"user-token-expired\" /* AuthErrorCode.TOKEN_EXPIRED */}`);\n}\n\n/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nclass ProactiveRefresh {\n    constructor(user) {\n        this.user = user;\n        this.isRunning = false;\n        // Node timers and browser timers return fundamentally different types.\n        // We don't actually care what the value is but TS won't accept unknown and\n        // we can't cast properly in both environments.\n        // eslint-disable-next-line @typescript-eslint/no-explicit-any\n        this.timerId = null;\n        this.errorBackoff = 30000 /* Duration.RETRY_BACKOFF_MIN */;\n    }\n    _start() {\n        if (this.isRunning) {\n            return;\n        }\n        this.isRunning = true;\n        this.schedule();\n    }\n    _stop() {\n        if (!this.isRunning) {\n            return;\n        }\n        this.isRunning = false;\n        if (this.timerId !== null) {\n            clearTimeout(this.timerId);\n        }\n    }\n    getInterval(wasError) {\n        var _a;\n        if (wasError) {\n            const interval = this.errorBackoff;\n            this.errorBackoff = Math.min(this.errorBackoff * 2, 960000 /* Duration.RETRY_BACKOFF_MAX */);\n            return interval;\n        }\n        else {\n            // Reset the error backoff\n            this.errorBackoff = 30000 /* Duration.RETRY_BACKOFF_MIN */;\n            const expTime = (_a = this.user.stsTokenManager.expirationTime) !== null && _a !== void 0 ? _a : 0;\n            const interval = expTime - Date.now() - 300000 /* Duration.OFFSET */;\n            return Math.max(0, interval);\n        }\n    }\n    schedule(wasError = false) {\n        if (!this.isRunning) {\n            // Just in case...\n            return;\n        }\n        const interval = this.getInterval(wasError);\n        this.timerId = setTimeout(async () => {\n            await this.iteration();\n        }, interval);\n    }\n    async iteration() {\n        try {\n            await this.user.getIdToken(true);\n        }\n        catch (e) {\n            // Only retry on network errors\n            if ((e === null || e === void 0 ? void 0 : e.code) ===\n                `auth/${\"network-request-failed\" /* AuthErrorCode.NETWORK_REQUEST_FAILED */}`) {\n                this.schedule(/* wasError */ true);\n            }\n            return;\n        }\n        this.schedule();\n    }\n}\n\n/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nclass UserMetadata {\n    constructor(createdAt, lastLoginAt) {\n        this.createdAt = createdAt;\n        this.lastLoginAt = lastLoginAt;\n        this._initializeTime();\n    }\n    _initializeTime() {\n        this.lastSignInTime = utcTimestampToDateString(this.lastLoginAt);\n        this.creationTime = utcTimestampToDateString(this.createdAt);\n    }\n    _copy(metadata) {\n        this.createdAt = metadata.createdAt;\n        this.lastLoginAt = metadata.lastLoginAt;\n        this._initializeTime();\n    }\n    toJSON() {\n        return {\n            createdAt: this.createdAt,\n            lastLoginAt: this.lastLoginAt\n        };\n    }\n}\n\n/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nasync function _reloadWithoutSaving(user) {\n    var _a;\n    const auth = user.auth;\n    const idToken = await user.getIdToken();\n    const response = await _logoutIfInvalidated(user, getAccountInfo(auth, { idToken }));\n    _assert(response === null || response === void 0 ? void 0 : response.users.length, auth, \"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */);\n    const coreAccount = response.users[0];\n    user._notifyReloadListener(coreAccount);\n    const newProviderData = ((_a = coreAccount.providerUserInfo) === null || _a === void 0 ? void 0 : _a.length)\n        ? extractProviderData(coreAccount.providerUserInfo)\n        : [];\n    const providerData = mergeProviderData(user.providerData, newProviderData);\n    // Preserves the non-nonymous status of the stored user, even if no more\n    // credentials (federated or email/password) are linked to the user. If\n    // the user was previously anonymous, then use provider data to update.\n    // On the other hand, if it was not anonymous before, it should never be\n    // considered anonymous now.\n    const oldIsAnonymous = user.isAnonymous;\n    const newIsAnonymous = !(user.email && coreAccount.passwordHash) && !(providerData === null || providerData === void 0 ? void 0 : providerData.length);\n    const isAnonymous = !oldIsAnonymous ? false : newIsAnonymous;\n    const updates = {\n        uid: coreAccount.localId,\n        displayName: coreAccount.displayName || null,\n        photoURL: coreAccount.photoUrl || null,\n        email: coreAccount.email || null,\n        emailVerified: coreAccount.emailVerified || false,\n        phoneNumber: coreAccount.phoneNumber || null,\n        tenantId: coreAccount.tenantId || null,\n        providerData,\n        metadata: new UserMetadata(coreAccount.createdAt, coreAccount.lastLoginAt),\n        isAnonymous\n    };\n    Object.assign(user, updates);\n}\n/**\n * Reloads user account data, if signed in.\n *\n * @param user - The user.\n *\n * @public\n */\nasync function reload(user) {\n    const userInternal = getModularInstance(user);\n    await _reloadWithoutSaving(userInternal);\n    // Even though the current user hasn't changed, update\n    // current user will trigger a persistence update w/ the\n    // new info.\n    await userInternal.auth._persistUserIfCurrent(userInternal);\n    userInternal.auth._notifyListenersIfCurrent(userInternal);\n}\nfunction mergeProviderData(original, newData) {\n    const deduped = original.filter(o => !newData.some(n => n.providerId === o.providerId));\n    return [...deduped, ...newData];\n}\nfunction extractProviderData(providers) {\n    return providers.map((_a) => {\n        var { providerId } = _a, provider = __rest(_a, [\"providerId\"]);\n        return {\n            providerId,\n            uid: provider.rawId || '',\n            displayName: provider.displayName || null,\n            email: provider.email || null,\n            phoneNumber: provider.phoneNumber || null,\n            photoURL: provider.photoUrl || null\n        };\n    });\n}\n\n/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nasync function requestStsToken(auth, refreshToken) {\n    const response = await _performFetchWithErrorHandling(auth, {}, async () => {\n        const body = querystring({\n            'grant_type': 'refresh_token',\n            'refresh_token': refreshToken\n        }).slice(1);\n        const { tokenApiHost, apiKey } = auth.config;\n        const url = _getFinalTarget(auth, tokenApiHost, \"/v1/token\" /* Endpoint.TOKEN */, `key=${apiKey}`);\n        const headers = await auth._getAdditionalHeaders();\n        headers[\"Content-Type\" /* HttpHeader.CONTENT_TYPE */] = 'application/x-www-form-urlencoded';\n        return FetchProvider.fetch()(url, {\n            method: \"POST\" /* HttpMethod.POST */,\n            headers,\n            body\n        });\n    });\n    // The response comes back in snake_case. Convert to camel:\n    return {\n        accessToken: response.access_token,\n        expiresIn: response.expires_in,\n        refreshToken: response.refresh_token\n    };\n}\nasync function revokeToken(auth, request) {\n    return _performApiRequest(auth, \"POST\" /* HttpMethod.POST */, \"/v2/accounts:revokeToken\" /* Endpoint.REVOKE_TOKEN */, _addTidIfNecessary(auth, request));\n}\n\n/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * We need to mark this class as internal explicitly to exclude it in the public typings, because\n * it references AuthInternal which has a circular dependency with UserInternal.\n *\n * @internal\n */\nclass StsTokenManager {\n    constructor() {\n        this.refreshToken = null;\n        this.accessToken = null;\n        this.expirationTime = null;\n    }\n    get isExpired() {\n        return (!this.expirationTime ||\n            Date.now() > this.expirationTime - 30000 /* Buffer.TOKEN_REFRESH */);\n    }\n    updateFromServerResponse(response) {\n        _assert(response.idToken, \"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */);\n        _assert(typeof response.idToken !== 'undefined', \"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */);\n        _assert(typeof response.refreshToken !== 'undefined', \"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */);\n        const expiresIn = 'expiresIn' in response && typeof response.expiresIn !== 'undefined'\n            ? Number(response.expiresIn)\n            : _tokenExpiresIn(response.idToken);\n        this.updateTokensAndExpiration(response.idToken, response.refreshToken, expiresIn);\n    }\n    updateFromIdToken(idToken) {\n        _assert(idToken.length !== 0, \"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */);\n        const expiresIn = _tokenExpiresIn(idToken);\n        this.updateTokensAndExpiration(idToken, null, expiresIn);\n    }\n    async getToken(auth, forceRefresh = false) {\n        if (!forceRefresh && this.accessToken && !this.isExpired) {\n            return this.accessToken;\n        }\n        _assert(this.refreshToken, auth, \"user-token-expired\" /* AuthErrorCode.TOKEN_EXPIRED */);\n        if (this.refreshToken) {\n            await this.refresh(auth, this.refreshToken);\n            return this.accessToken;\n        }\n        return null;\n    }\n    clearRefreshToken() {\n        this.refreshToken = null;\n    }\n    async refresh(auth, oldToken) {\n        const { accessToken, refreshToken, expiresIn } = await requestStsToken(auth, oldToken);\n        this.updateTokensAndExpiration(accessToken, refreshToken, Number(expiresIn));\n    }\n    updateTokensAndExpiration(accessToken, refreshToken, expiresInSec) {\n        this.refreshToken = refreshToken || null;\n        this.accessToken = accessToken || null;\n        this.expirationTime = Date.now() + expiresInSec * 1000;\n    }\n    static fromJSON(appName, object) {\n        const { refreshToken, accessToken, expirationTime } = object;\n        const manager = new StsTokenManager();\n        if (refreshToken) {\n            _assert(typeof refreshToken === 'string', \"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */, {\n                appName\n            });\n            manager.refreshToken = refreshToken;\n        }\n        if (accessToken) {\n            _assert(typeof accessToken === 'string', \"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */, {\n                appName\n            });\n            manager.accessToken = accessToken;\n        }\n        if (expirationTime) {\n            _assert(typeof expirationTime === 'number', \"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */, {\n                appName\n            });\n            manager.expirationTime = expirationTime;\n        }\n        return manager;\n    }\n    toJSON() {\n        return {\n            refreshToken: this.refreshToken,\n            accessToken: this.accessToken,\n            expirationTime: this.expirationTime\n        };\n    }\n    _assign(stsTokenManager) {\n        this.accessToken = stsTokenManager.accessToken;\n        this.refreshToken = stsTokenManager.refreshToken;\n        this.expirationTime = stsTokenManager.expirationTime;\n    }\n    _clone() {\n        return Object.assign(new StsTokenManager(), this.toJSON());\n    }\n    _performRefresh() {\n        return debugFail('not implemented');\n    }\n}\n\n/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nfunction assertStringOrUndefined(assertion, appName) {\n    _assert(typeof assertion === 'string' || typeof assertion === 'undefined', \"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */, { appName });\n}\nclass UserImpl {\n    constructor(_a) {\n        var { uid, auth, stsTokenManager } = _a, opt = __rest(_a, [\"uid\", \"auth\", \"stsTokenManager\"]);\n        // For the user object, provider is always Firebase.\n        this.providerId = \"firebase\" /* ProviderId.FIREBASE */;\n        this.proactiveRefresh = new ProactiveRefresh(this);\n        this.reloadUserInfo = null;\n        this.reloadListener = null;\n        this.uid = uid;\n        this.auth = auth;\n        this.stsTokenManager = stsTokenManager;\n        this.accessToken = stsTokenManager.accessToken;\n        this.displayName = opt.displayName || null;\n        this.email = opt.email || null;\n        this.emailVerified = opt.emailVerified || false;\n        this.phoneNumber = opt.phoneNumber || null;\n        this.photoURL = opt.photoURL || null;\n        this.isAnonymous = opt.isAnonymous || false;\n        this.tenantId = opt.tenantId || null;\n        this.providerData = opt.providerData ? [...opt.providerData] : [];\n        this.metadata = new UserMetadata(opt.createdAt || undefined, opt.lastLoginAt || undefined);\n    }\n    async getIdToken(forceRefresh) {\n        const accessToken = await _logoutIfInvalidated(this, this.stsTokenManager.getToken(this.auth, forceRefresh));\n        _assert(accessToken, this.auth, \"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */);\n        if (this.accessToken !== accessToken) {\n            this.accessToken = accessToken;\n            await this.auth._persistUserIfCurrent(this);\n            this.auth._notifyListenersIfCurrent(this);\n        }\n        return accessToken;\n    }\n    getIdTokenResult(forceRefresh) {\n        return getIdTokenResult(this, forceRefresh);\n    }\n    reload() {\n        return reload(this);\n    }\n    _assign(user) {\n        if (this === user) {\n            return;\n        }\n        _assert(this.uid === user.uid, this.auth, \"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */);\n        this.displayName = user.displayName;\n        this.photoURL = user.photoURL;\n        this.email = user.email;\n        this.emailVerified = user.emailVerified;\n        this.phoneNumber = user.phoneNumber;\n        this.isAnonymous = user.isAnonymous;\n        this.tenantId = user.tenantId;\n        this.providerData = user.providerData.map(userInfo => (Object.assign({}, userInfo)));\n        this.metadata._copy(user.metadata);\n        this.stsTokenManager._assign(user.stsTokenManager);\n    }\n    _clone(auth) {\n        const newUser = new UserImpl(Object.assign(Object.assign({}, this), { auth, stsTokenManager: this.stsTokenManager._clone() }));\n        newUser.metadata._copy(this.metadata);\n        return newUser;\n    }\n    _onReload(callback) {\n        // There should only ever be one listener, and that is a single instance of MultiFactorUser\n        _assert(!this.reloadListener, this.auth, \"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */);\n        this.reloadListener = callback;\n        if (this.reloadUserInfo) {\n            this._notifyReloadListener(this.reloadUserInfo);\n            this.reloadUserInfo = null;\n        }\n    }\n    _notifyReloadListener(userInfo) {\n        if (this.reloadListener) {\n            this.reloadListener(userInfo);\n        }\n        else {\n            // If no listener is subscribed yet, save the result so it's available when they do subscribe\n            this.reloadUserInfo = userInfo;\n        }\n    }\n    _startProactiveRefresh() {\n        this.proactiveRefresh._start();\n    }\n    _stopProactiveRefresh() {\n        this.proactiveRefresh._stop();\n    }\n    async _updateTokensIfNecessary(response, reload = false) {\n        let tokensRefreshed = false;\n        if (response.idToken &&\n            response.idToken !== this.stsTokenManager.accessToken) {\n            this.stsTokenManager.updateFromServerResponse(response);\n            tokensRefreshed = true;\n        }\n        if (reload) {\n            await _reloadWithoutSaving(this);\n        }\n        await this.auth._persistUserIfCurrent(this);\n        if (tokensRefreshed) {\n            this.auth._notifyListenersIfCurrent(this);\n        }\n    }\n    async delete() {\n        if (_isFirebaseServerApp(this.auth.app)) {\n            return Promise.reject(_serverAppCurrentUserOperationNotSupportedError(this.auth));\n        }\n        const idToken = await this.getIdToken();\n        await _logoutIfInvalidated(this, deleteAccount(this.auth, { idToken }));\n        this.stsTokenManager.clearRefreshToken();\n        // TODO: Determine if cancellable-promises are necessary to use in this class so that delete()\n        //       cancels pending actions...\n        return this.auth.signOut();\n    }\n    toJSON() {\n        return Object.assign(Object.assign({ uid: this.uid, email: this.email || undefined, emailVerified: this.emailVerified, displayName: this.displayName || undefined, isAnonymous: this.isAnonymous, photoURL: this.photoURL || undefined, phoneNumber: this.phoneNumber || undefined, tenantId: this.tenantId || undefined, providerData: this.providerData.map(userInfo => (Object.assign({}, userInfo))), stsTokenManager: this.stsTokenManager.toJSON(), \n            // Redirect event ID must be maintained in case there is a pending\n            // redirect event.\n            _redirectEventId: this._redirectEventId }, this.metadata.toJSON()), { \n            // Required for compatibility with the legacy SDK (go/firebase-auth-sdk-persistence-parsing):\n            apiKey: this.auth.config.apiKey, appName: this.auth.name });\n    }\n    get refreshToken() {\n        return this.stsTokenManager.refreshToken || '';\n    }\n    static _fromJSON(auth, object) {\n        var _a, _b, _c, _d, _e, _f, _g, _h;\n        const displayName = (_a = object.displayName) !== null && _a !== void 0 ? _a : undefined;\n        const email = (_b = object.email) !== null && _b !== void 0 ? _b : undefined;\n        const phoneNumber = (_c = object.phoneNumber) !== null && _c !== void 0 ? _c : undefined;\n        const photoURL = (_d = object.photoURL) !== null && _d !== void 0 ? _d : undefined;\n        const tenantId = (_e = object.tenantId) !== null && _e !== void 0 ? _e : undefined;\n        const _redirectEventId = (_f = object._redirectEventId) !== null && _f !== void 0 ? _f : undefined;\n        const createdAt = (_g = object.createdAt) !== null && _g !== void 0 ? _g : undefined;\n        const lastLoginAt = (_h = object.lastLoginAt) !== null && _h !== void 0 ? _h : undefined;\n        const { uid, emailVerified, isAnonymous, providerData, stsTokenManager: plainObjectTokenManager } = object;\n        _assert(uid && plainObjectTokenManager, auth, \"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */);\n        const stsTokenManager = StsTokenManager.fromJSON(this.name, plainObjectTokenManager);\n        _assert(typeof uid === 'string', auth, \"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */);\n        assertStringOrUndefined(displayName, auth.name);\n        assertStringOrUndefined(email, auth.name);\n        _assert(typeof emailVerified === 'boolean', auth, \"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */);\n        _assert(typeof isAnonymous === 'boolean', auth, \"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */);\n        assertStringOrUndefined(phoneNumber, auth.name);\n        assertStringOrUndefined(photoURL, auth.name);\n        assertStringOrUndefined(tenantId, auth.name);\n        assertStringOrUndefined(_redirectEventId, auth.name);\n        assertStringOrUndefined(createdAt, auth.name);\n        assertStringOrUndefined(lastLoginAt, auth.name);\n        const user = new UserImpl({\n            uid,\n            auth,\n            email,\n            emailVerified,\n            displayName,\n            isAnonymous,\n            photoURL,\n            phoneNumber,\n            tenantId,\n            stsTokenManager,\n            createdAt,\n            lastLoginAt\n        });\n        if (providerData && Array.isArray(providerData)) {\n            user.providerData = providerData.map(userInfo => (Object.assign({}, userInfo)));\n        }\n        if (_redirectEventId) {\n            user._redirectEventId = _redirectEventId;\n        }\n        return user;\n    }\n    /**\n     * Initialize a User from an idToken server response\n     * @param auth\n     * @param idTokenResponse\n     */\n    static async _fromIdTokenResponse(auth, idTokenResponse, isAnonymous = false) {\n        const stsTokenManager = new StsTokenManager();\n        stsTokenManager.updateFromServerResponse(idTokenResponse);\n        // Initialize the Firebase Auth user.\n        const user = new UserImpl({\n            uid: idTokenResponse.localId,\n            auth,\n            stsTokenManager,\n            isAnonymous\n        });\n        // Updates the user info and data and resolves with a user instance.\n        await _reloadWithoutSaving(user);\n        return user;\n    }\n    /**\n     * Initialize a User from an idToken server response\n     * @param auth\n     * @param idTokenResponse\n     */\n    static async _fromGetAccountInfoResponse(auth, response, idToken) {\n        const coreAccount = response.users[0];\n        _assert(coreAccount.localId !== undefined, \"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */);\n        const providerData = coreAccount.providerUserInfo !== undefined\n            ? extractProviderData(coreAccount.providerUserInfo)\n            : [];\n        const isAnonymous = !(coreAccount.email && coreAccount.passwordHash) && !(providerData === null || providerData === void 0 ? void 0 : providerData.length);\n        const stsTokenManager = new StsTokenManager();\n        stsTokenManager.updateFromIdToken(idToken);\n        // Initialize the Firebase Auth user.\n        const user = new UserImpl({\n            uid: coreAccount.localId,\n            auth,\n            stsTokenManager,\n            isAnonymous\n        });\n        // update the user with data from the GetAccountInfo response.\n        const updates = {\n            uid: coreAccount.localId,\n            displayName: coreAccount.displayName || null,\n            photoURL: coreAccount.photoUrl || null,\n            email: coreAccount.email || null,\n            emailVerified: coreAccount.emailVerified || false,\n            phoneNumber: coreAccount.phoneNumber || null,\n            tenantId: coreAccount.tenantId || null,\n            providerData,\n            metadata: new UserMetadata(coreAccount.createdAt, coreAccount.lastLoginAt),\n            isAnonymous: !(coreAccount.email && coreAccount.passwordHash) &&\n                !(providerData === null || providerData === void 0 ? void 0 : providerData.length)\n        };\n        Object.assign(user, updates);\n        return user;\n    }\n}\n\n/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nconst instanceCache = new Map();\nfunction _getInstance(cls) {\n    debugAssert(cls instanceof Function, 'Expected a class definition');\n    let instance = instanceCache.get(cls);\n    if (instance) {\n        debugAssert(instance instanceof cls, 'Instance stored in cache mismatched with class');\n        return instance;\n    }\n    instance = new cls();\n    instanceCache.set(cls, instance);\n    return instance;\n}\n\n/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nclass InMemoryPersistence {\n    constructor() {\n        this.type = \"NONE\" /* PersistenceType.NONE */;\n        this.storage = {};\n    }\n    async _isAvailable() {\n        return true;\n    }\n    async _set(key, value) {\n        this.storage[key] = value;\n    }\n    async _get(key) {\n        const value = this.storage[key];\n        return value === undefined ? null : value;\n    }\n    async _remove(key) {\n        delete this.storage[key];\n    }\n    _addListener(_key, _listener) {\n        // Listeners are not supported for in-memory storage since it cannot be shared across windows/workers\n        return;\n    }\n    _removeListener(_key, _listener) {\n        // Listeners are not supported for in-memory storage since it cannot be shared across windows/workers\n        return;\n    }\n}\nInMemoryPersistence.type = 'NONE';\n/**\n * An implementation of {@link Persistence} of type 'NONE'.\n *\n * @public\n */\nconst inMemoryPersistence = InMemoryPersistence;\n\n/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nfunction _persistenceKeyName(key, apiKey, appName) {\n    return `${\"firebase\" /* Namespace.PERSISTENCE */}:${key}:${apiKey}:${appName}`;\n}\nclass PersistenceUserManager {\n    constructor(persistence, auth, userKey) {\n        this.persistence = persistence;\n        this.auth = auth;\n        this.userKey = userKey;\n        const { config, name } = this.auth;\n        this.fullUserKey = _persistenceKeyName(this.userKey, config.apiKey, name);\n        this.fullPersistenceKey = _persistenceKeyName(\"persistence\" /* KeyName.PERSISTENCE_USER */, config.apiKey, name);\n        this.boundEventHandler = auth._onStorageEvent.bind(auth);\n        this.persistence._addListener(this.fullUserKey, this.boundEventHandler);\n    }\n    setCurrentUser(user) {\n        return this.persistence._set(this.fullUserKey, user.toJSON());\n    }\n    async getCurrentUser() {\n        const blob = await this.persistence._get(this.fullUserKey);\n        return blob ? UserImpl._fromJSON(this.auth, blob) : null;\n    }\n    removeCurrentUser() {\n        return this.persistence._remove(this.fullUserKey);\n    }\n    savePersistenceForRedirect() {\n        return this.persistence._set(this.fullPersistenceKey, this.persistence.type);\n    }\n    async setPersistence(newPersistence) {\n        if (this.persistence === newPersistence) {\n            return;\n        }\n        const currentUser = await this.getCurrentUser();\n        await this.removeCurrentUser();\n        this.persistence = newPersistence;\n        if (currentUser) {\n            return this.setCurrentUser(currentUser);\n        }\n    }\n    delete() {\n        this.persistence._removeListener(this.fullUserKey, this.boundEventHandler);\n    }\n    static async create(auth, persistenceHierarchy, userKey = \"authUser\" /* KeyName.AUTH_USER */) {\n        if (!persistenceHierarchy.length) {\n            return new PersistenceUserManager(_getInstance(inMemoryPersistence), auth, userKey);\n        }\n        // Eliminate any persistences that are not available\n        const availablePersistences = (await Promise.all(persistenceHierarchy.map(async (persistence) => {\n            if (await persistence._isAvailable()) {\n                return persistence;\n            }\n            return undefined;\n        }))).filter(persistence => persistence);\n        // Fall back to the first persistence listed, or in memory if none available\n        let selectedPersistence = availablePersistences[0] ||\n            _getInstance(inMemoryPersistence);\n        const key = _persistenceKeyName(userKey, auth.config.apiKey, auth.name);\n        // Pull out the existing user, setting the chosen persistence to that\n        // persistence if the user exists.\n        let userToMigrate = null;\n        // Note, here we check for a user in _all_ persistences, not just the\n        // ones deemed available. If we can migrate a user out of a broken\n        // persistence, we will (but only if that persistence supports migration).\n        for (const persistence of persistenceHierarchy) {\n            try {\n                const blob = await persistence._get(key);\n                if (blob) {\n                    const user = UserImpl._fromJSON(auth, blob); // throws for unparsable blob (wrong format)\n                    if (persistence !== selectedPersistence) {\n                        userToMigrate = user;\n                    }\n                    selectedPersistence = persistence;\n                    break;\n                }\n            }\n            catch (_a) { }\n        }\n        // If we find the user in a persistence that does support migration, use\n        // that migration path (of only persistences that support migration)\n        const migrationHierarchy = availablePersistences.filter(p => p._shouldAllowMigration);\n        // If the persistence does _not_ allow migration, just finish off here\n        if (!selectedPersistence._shouldAllowMigration ||\n            !migrationHierarchy.length) {\n            return new PersistenceUserManager(selectedPersistence, auth, userKey);\n        }\n        selectedPersistence = migrationHierarchy[0];\n        if (userToMigrate) {\n            // This normally shouldn't throw since chosenPersistence.isAvailable() is true, but if it does\n            // we'll just let it bubble to surface the error.\n            await selectedPersistence._set(key, userToMigrate.toJSON());\n        }\n        // Attempt to clear the key in other persistences but ignore errors. This helps prevent issues\n        // such as users getting stuck with a previous account after signing out and refreshing the tab.\n        await Promise.all(persistenceHierarchy.map(async (persistence) => {\n            if (persistence !== selectedPersistence) {\n                try {\n                    await persistence._remove(key);\n                }\n                catch (_a) { }\n            }\n        }));\n        return new PersistenceUserManager(selectedPersistence, auth, userKey);\n    }\n}\n\n/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Determine the browser for the purposes of reporting usage to the API\n */\nfunction _getBrowserName(userAgent) {\n    const ua = userAgent.toLowerCase();\n    if (ua.includes('opera/') || ua.includes('opr/') || ua.includes('opios/')) {\n        return \"Opera\" /* BrowserName.OPERA */;\n    }\n    else if (_isIEMobile(ua)) {\n        // Windows phone IEMobile browser.\n        return \"IEMobile\" /* BrowserName.IEMOBILE */;\n    }\n    else if (ua.includes('msie') || ua.includes('trident/')) {\n        return \"IE\" /* BrowserName.IE */;\n    }\n    else if (ua.includes('edge/')) {\n        return \"Edge\" /* BrowserName.EDGE */;\n    }\n    else if (_isFirefox(ua)) {\n        return \"Firefox\" /* BrowserName.FIREFOX */;\n    }\n    else if (ua.includes('silk/')) {\n        return \"Silk\" /* BrowserName.SILK */;\n    }\n    else if (_isBlackBerry(ua)) {\n        // Blackberry browser.\n        return \"Blackberry\" /* BrowserName.BLACKBERRY */;\n    }\n    else if (_isWebOS(ua)) {\n        // WebOS default browser.\n        return \"Webos\" /* BrowserName.WEBOS */;\n    }\n    else if (_isSafari(ua)) {\n        return \"Safari\" /* BrowserName.SAFARI */;\n    }\n    else if ((ua.includes('chrome/') || _isChromeIOS(ua)) &&\n        !ua.includes('edge/')) {\n        return \"Chrome\" /* BrowserName.CHROME */;\n    }\n    else if (_isAndroid(ua)) {\n        // Android stock browser.\n        return \"Android\" /* BrowserName.ANDROID */;\n    }\n    else {\n        // Most modern browsers have name/version at end of user agent string.\n        const re = /([a-zA-Z\\d\\.]+)\\/[a-zA-Z\\d\\.]*$/;\n        const matches = userAgent.match(re);\n        if ((matches === null || matches === void 0 ? void 0 : matches.length) === 2) {\n            return matches[1];\n        }\n    }\n    return \"Other\" /* BrowserName.OTHER */;\n}\nfunction _isFirefox(ua = getUA()) {\n    return /firefox\\//i.test(ua);\n}\nfunction _isSafari(userAgent = getUA()) {\n    const ua = userAgent.toLowerCase();\n    return (ua.includes('safari/') &&\n        !ua.includes('chrome/') &&\n        !ua.includes('crios/') &&\n        !ua.includes('android'));\n}\nfunction _isChromeIOS(ua = getUA()) {\n    return /crios\\//i.test(ua);\n}\nfunction _isIEMobile(ua = getUA()) {\n    return /iemobile/i.test(ua);\n}\nfunction _isAndroid(ua = getUA()) {\n    return /android/i.test(ua);\n}\nfunction _isBlackBerry(ua = getUA()) {\n    return /blackberry/i.test(ua);\n}\nfunction _isWebOS(ua = getUA()) {\n    return /webos/i.test(ua);\n}\nfunction _isIOS(ua = getUA()) {\n    return (/iphone|ipad|ipod/i.test(ua) ||\n        (/macintosh/i.test(ua) && /mobile/i.test(ua)));\n}\nfunction _isIOS7Or8(ua = getUA()) {\n    return (/(iPad|iPhone|iPod).*OS 7_\\d/i.test(ua) ||\n        /(iPad|iPhone|iPod).*OS 8_\\d/i.test(ua));\n}\nfunction _isIOSStandalone(ua = getUA()) {\n    var _a;\n    return _isIOS(ua) && !!((_a = window.navigator) === null || _a === void 0 ? void 0 : _a.standalone);\n}\nfunction _isIE10() {\n    return isIE() && document.documentMode === 10;\n}\nfunction _isMobileBrowser(ua = getUA()) {\n    // TODO: implement getBrowserName equivalent for OS.\n    return (_isIOS(ua) ||\n        _isAndroid(ua) ||\n        _isWebOS(ua) ||\n        _isBlackBerry(ua) ||\n        /windows phone/i.test(ua) ||\n        _isIEMobile(ua));\n}\n\n/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/*\n * Determine the SDK version string\n */\nfunction _getClientVersion(clientPlatform, frameworks = []) {\n    let reportedPlatform;\n    switch (clientPlatform) {\n        case \"Browser\" /* ClientPlatform.BROWSER */:\n            // In a browser environment, report the browser name.\n            reportedPlatform = _getBrowserName(getUA());\n            break;\n        case \"Worker\" /* ClientPlatform.WORKER */:\n            // Technically a worker runs from a browser but we need to differentiate a\n            // worker from a browser.\n            // For example: Chrome-Worker/JsCore/4.9.1/FirebaseCore-web.\n            reportedPlatform = `${_getBrowserName(getUA())}-${clientPlatform}`;\n            break;\n        default:\n            reportedPlatform = clientPlatform;\n    }\n    const reportedFrameworks = frameworks.length\n        ? frameworks.join(',')\n        : 'FirebaseCore-web'; /* default value if no other framework is used */\n    return `${reportedPlatform}/${\"JsCore\" /* ClientImplementation.CORE */}/${SDK_VERSION}/${reportedFrameworks}`;\n}\n\n/**\n * @license\n * Copyright 2022 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nclass AuthMiddlewareQueue {\n    constructor(auth) {\n        this.auth = auth;\n        this.queue = [];\n    }\n    pushCallback(callback, onAbort) {\n        // The callback could be sync or async. Wrap it into a\n        // function that is always async.\n        const wrappedCallback = (user) => new Promise((resolve, reject) => {\n            try {\n                const result = callback(user);\n                // Either resolve with existing promise or wrap a non-promise\n                // return value into a promise.\n                resolve(result);\n            }\n            catch (e) {\n                // Sync callback throws.\n                reject(e);\n            }\n        });\n        // Attach the onAbort if present\n        wrappedCallback.onAbort = onAbort;\n        this.queue.push(wrappedCallback);\n        const index = this.queue.length - 1;\n        return () => {\n            // Unsubscribe. Replace with no-op. Do not remove from array, or it will disturb\n            // indexing of other elements.\n            this.queue[index] = () => Promise.resolve();\n        };\n    }\n    async runMiddleware(nextUser) {\n        if (this.auth.currentUser === nextUser) {\n            return;\n        }\n        // While running the middleware, build a temporary stack of onAbort\n        // callbacks to call if one middleware callback rejects.\n        const onAbortStack = [];\n        try {\n            for (const beforeStateCallback of this.queue) {\n                await beforeStateCallback(nextUser);\n                // Only push the onAbort if the callback succeeds\n                if (beforeStateCallback.onAbort) {\n                    onAbortStack.push(beforeStateCallback.onAbort);\n                }\n            }\n        }\n        catch (e) {\n            // Run all onAbort, with separate try/catch to ignore any errors and\n            // continue\n            onAbortStack.reverse();\n            for (const onAbort of onAbortStack) {\n                try {\n                    onAbort();\n                }\n                catch (_) {\n                    /* swallow error */\n                }\n            }\n            throw this.auth._errorFactory.create(\"login-blocked\" /* AuthErrorCode.LOGIN_BLOCKED */, {\n                originalMessage: e === null || e === void 0 ? void 0 : e.message\n            });\n        }\n    }\n}\n\n/**\n * @license\n * Copyright 2023 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Fetches the password policy for the currently set tenant or the project if no tenant is set.\n *\n * @param auth Auth object.\n * @param request Password policy request.\n * @returns Password policy response.\n */\nasync function _getPasswordPolicy(auth, request = {}) {\n    return _performApiRequest(auth, \"GET\" /* HttpMethod.GET */, \"/v2/passwordPolicy\" /* Endpoint.GET_PASSWORD_POLICY */, _addTidIfNecessary(auth, request));\n}\n\n/**\n * @license\n * Copyright 2023 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n// Minimum min password length enforced by the backend, even if no minimum length is set.\nconst MINIMUM_MIN_PASSWORD_LENGTH = 6;\n/**\n * Stores password policy requirements and provides password validation against the policy.\n *\n * @internal\n */\nclass PasswordPolicyImpl {\n    constructor(response) {\n        var _a, _b, _c, _d;\n        // Only include custom strength options defined in the response.\n        const responseOptions = response.customStrengthOptions;\n        this.customStrengthOptions = {};\n        // TODO: Remove once the backend is updated to include the minimum min password length instead of undefined when there is no minimum length set.\n        this.customStrengthOptions.minPasswordLength =\n            (_a = responseOptions.minPasswordLength) !== null && _a !== void 0 ? _a : MINIMUM_MIN_PASSWORD_LENGTH;\n        if (responseOptions.maxPasswordLength) {\n            this.customStrengthOptions.maxPasswordLength =\n                responseOptions.maxPasswordLength;\n        }\n        if (responseOptions.containsLowercaseCharacter !== undefined) {\n            this.customStrengthOptions.containsLowercaseLetter =\n                responseOptions.containsLowercaseCharacter;\n        }\n        if (responseOptions.containsUppercaseCharacter !== undefined) {\n            this.customStrengthOptions.containsUppercaseLetter =\n                responseOptions.containsUppercaseCharacter;\n        }\n        if (responseOptions.containsNumericCharacter !== undefined) {\n            this.customStrengthOptions.containsNumericCharacter =\n                responseOptions.containsNumericCharacter;\n        }\n        if (responseOptions.containsNonAlphanumericCharacter !== undefined) {\n            this.customStrengthOptions.containsNonAlphanumericCharacter =\n                responseOptions.containsNonAlphanumericCharacter;\n        }\n        this.enforcementState = response.enforcementState;\n        if (this.enforcementState === 'ENFORCEMENT_STATE_UNSPECIFIED') {\n            this.enforcementState = 'OFF';\n        }\n        // Use an empty string if no non-alphanumeric characters are specified in the response.\n        this.allowedNonAlphanumericCharacters =\n            (_c = (_b = response.allowedNonAlphanumericCharacters) === null || _b === void 0 ? void 0 : _b.join('')) !== null && _c !== void 0 ? _c : '';\n        this.forceUpgradeOnSignin = (_d = response.forceUpgradeOnSignin) !== null && _d !== void 0 ? _d : false;\n        this.schemaVersion = response.schemaVersion;\n    }\n    validatePassword(password) {\n        var _a, _b, _c, _d, _e, _f;\n        const status = {\n            isValid: true,\n            passwordPolicy: this\n        };\n        // Check the password length and character options.\n        this.validatePasswordLengthOptions(password, status);\n        this.validatePasswordCharacterOptions(password, status);\n        // Combine the status into single isValid property.\n        status.isValid && (status.isValid = (_a = status.meetsMinPasswordLength) !== null && _a !== void 0 ? _a : true);\n        status.isValid && (status.isValid = (_b = status.meetsMaxPasswordLength) !== null && _b !== void 0 ? _b : true);\n        status.isValid && (status.isValid = (_c = status.containsLowercaseLetter) !== null && _c !== void 0 ? _c : true);\n        status.isValid && (status.isValid = (_d = status.containsUppercaseLetter) !== null && _d !== void 0 ? _d : true);\n        status.isValid && (status.isValid = (_e = status.containsNumericCharacter) !== null && _e !== void 0 ? _e : true);\n        status.isValid && (status.isValid = (_f = status.containsNonAlphanumericCharacter) !== null && _f !== void 0 ? _f : true);\n        return status;\n    }\n    /**\n     * Validates that the password meets the length options for the policy.\n     *\n     * @param password Password to validate.\n     * @param status Validation status.\n     */\n    validatePasswordLengthOptions(password, status) {\n        const minPasswordLength = this.customStrengthOptions.minPasswordLength;\n        const maxPasswordLength = this.customStrengthOptions.maxPasswordLength;\n        if (minPasswordLength) {\n            status.meetsMinPasswordLength = password.length >= minPasswordLength;\n        }\n        if (maxPasswordLength) {\n            status.meetsMaxPasswordLength = password.length <= maxPasswordLength;\n        }\n    }\n    /**\n     * Validates that the password meets the character options for the policy.\n     *\n     * @param password Password to validate.\n     * @param status Validation status.\n     */\n    validatePasswordCharacterOptions(password, status) {\n        // Assign statuses for requirements even if the password is an empty string.\n        this.updatePasswordCharacterOptionsStatuses(status, \n        /* containsLowercaseCharacter= */ false, \n        /* containsUppercaseCharacter= */ false, \n        /* containsNumericCharacter= */ false, \n        /* containsNonAlphanumericCharacter= */ false);\n        let passwordChar;\n        for (let i = 0; i < password.length; i++) {\n            passwordChar = password.charAt(i);\n            this.updatePasswordCharacterOptionsStatuses(status, \n            /* containsLowercaseCharacter= */ passwordChar >= 'a' &&\n                passwordChar <= 'z', \n            /* containsUppercaseCharacter= */ passwordChar >= 'A' &&\n                passwordChar <= 'Z', \n            /* containsNumericCharacter= */ passwordChar >= '0' &&\n                passwordChar <= '9', \n            /* containsNonAlphanumericCharacter= */ this.allowedNonAlphanumericCharacters.includes(passwordChar));\n        }\n    }\n    /**\n     * Updates the running validation status with the statuses for the character options.\n     * Expected to be called each time a character is processed to update each option status\n     * based on the current character.\n     *\n     * @param status Validation status.\n     * @param containsLowercaseCharacter Whether the character is a lowercase letter.\n     * @param containsUppercaseCharacter Whether the character is an uppercase letter.\n     * @param containsNumericCharacter Whether the character is a numeric character.\n     * @param containsNonAlphanumericCharacter Whether the character is a non-alphanumeric character.\n     */\n    updatePasswordCharacterOptionsStatuses(status, containsLowercaseCharacter, containsUppercaseCharacter, containsNumericCharacter, containsNonAlphanumericCharacter) {\n        if (this.customStrengthOptions.containsLowercaseLetter) {\n            status.containsLowercaseLetter || (status.containsLowercaseLetter = containsLowercaseCharacter);\n        }\n        if (this.customStrengthOptions.containsUppercaseLetter) {\n            status.containsUppercaseLetter || (status.containsUppercaseLetter = containsUppercaseCharacter);\n        }\n        if (this.customStrengthOptions.containsNumericCharacter) {\n            status.containsNumericCharacter || (status.containsNumericCharacter = containsNumericCharacter);\n        }\n        if (this.customStrengthOptions.containsNonAlphanumericCharacter) {\n            status.containsNonAlphanumericCharacter || (status.containsNonAlphanumericCharacter = containsNonAlphanumericCharacter);\n        }\n    }\n}\n\n/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nclass AuthImpl {\n    constructor(app, heartbeatServiceProvider, appCheckServiceProvider, config) {\n        this.app = app;\n        this.heartbeatServiceProvider = heartbeatServiceProvider;\n        this.appCheckServiceProvider = appCheckServiceProvider;\n        this.config = config;\n        this.currentUser = null;\n        this.emulatorConfig = null;\n        this.operations = Promise.resolve();\n        this.authStateSubscription = new Subscription(this);\n        this.idTokenSubscription = new Subscription(this);\n        this.beforeStateQueue = new AuthMiddlewareQueue(this);\n        this.redirectUser = null;\n        this.isProactiveRefreshEnabled = false;\n        this.EXPECTED_PASSWORD_POLICY_SCHEMA_VERSION = 1;\n        // Any network calls will set this to true and prevent subsequent emulator\n        // initialization\n        this._canInitEmulator = true;\n        this._isInitialized = false;\n        this._deleted = false;\n        this._initializationPromise = null;\n        this._popupRedirectResolver = null;\n        this._errorFactory = _DEFAULT_AUTH_ERROR_FACTORY;\n        this._agentRecaptchaConfig = null;\n        this._tenantRecaptchaConfigs = {};\n        this._projectPasswordPolicy = null;\n        this._tenantPasswordPolicies = {};\n        // Tracks the last notified UID for state change listeners to prevent\n        // repeated calls to the callbacks. Undefined means it's never been\n        // called, whereas null means it's been called with a signed out user\n        this.lastNotifiedUid = undefined;\n        this.languageCode = null;\n        this.tenantId = null;\n        this.settings = { appVerificationDisabledForTesting: false };\n        this.frameworks = [];\n        this.name = app.name;\n        this.clientVersion = config.sdkClientVersion;\n    }\n    _initializeWithPersistence(persistenceHierarchy, popupRedirectResolver) {\n        if (popupRedirectResolver) {\n            this._popupRedirectResolver = _getInstance(popupRedirectResolver);\n        }\n        // Have to check for app deletion throughout initialization (after each\n        // promise resolution)\n        this._initializationPromise = this.queue(async () => {\n            var _a, _b;\n            if (this._deleted) {\n                return;\n            }\n            this.persistenceManager = await PersistenceUserManager.create(this, persistenceHierarchy);\n            if (this._deleted) {\n                return;\n            }\n            // Initialize the resolver early if necessary (only applicable to web:\n            // this will cause the iframe to load immediately in certain cases)\n            if ((_a = this._popupRedirectResolver) === null || _a === void 0 ? void 0 : _a._shouldInitProactively) {\n                // If this fails, don't halt auth loading\n                try {\n                    await this._popupRedirectResolver._initialize(this);\n                }\n                catch (e) {\n                    /* Ignore the error */\n                }\n            }\n            await this.initializeCurrentUser(popupRedirectResolver);\n            this.lastNotifiedUid = ((_b = this.currentUser) === null || _b === void 0 ? void 0 : _b.uid) || null;\n            if (this._deleted) {\n                return;\n            }\n            this._isInitialized = true;\n        });\n        return this._initializationPromise;\n    }\n    /**\n     * If the persistence is changed in another window, the user manager will let us know\n     */\n    async _onStorageEvent() {\n        if (this._deleted) {\n            return;\n        }\n        const user = await this.assertedPersistence.getCurrentUser();\n        if (!this.currentUser && !user) {\n            // No change, do nothing (was signed out and remained signed out).\n            return;\n        }\n        // If the same user is to be synchronized.\n        if (this.currentUser && user && this.currentUser.uid === user.uid) {\n            // Data update, simply copy data changes.\n            this._currentUser._assign(user);\n            // If tokens changed from previous user tokens, this will trigger\n            // notifyAuthListeners_.\n            await this.currentUser.getIdToken();\n            return;\n        }\n        // Update current Auth state. Either a new login or logout.\n        // Skip blocking callbacks, they should not apply to a change in another tab.\n        await this._updateCurrentUser(user, /* skipBeforeStateCallbacks */ true);\n    }\n    async initializeCurrentUserFromIdToken(idToken) {\n        try {\n            const response = await getAccountInfo(this, { idToken });\n            const user = await UserImpl._fromGetAccountInfoResponse(this, response, idToken);\n            await this.directlySetCurrentUser(user);\n        }\n        catch (err) {\n            console.warn('FirebaseServerApp could not login user with provided authIdToken: ', err);\n            await this.directlySetCurrentUser(null);\n        }\n    }\n    async initializeCurrentUser(popupRedirectResolver) {\n        var _a;\n        if (_isFirebaseServerApp(this.app)) {\n            const idToken = this.app.settings.authIdToken;\n            if (idToken) {\n                // Start the auth operation in the next tick to allow a moment for the customer's app to\n                // attach an emulator, if desired.\n                return new Promise(resolve => {\n                    setTimeout(() => this.initializeCurrentUserFromIdToken(idToken).then(resolve, resolve));\n                });\n            }\n            else {\n                return this.directlySetCurrentUser(null);\n            }\n        }\n        // First check to see if we have a pending redirect event.\n        const previouslyStoredUser = (await this.assertedPersistence.getCurrentUser());\n        let futureCurrentUser = previouslyStoredUser;\n        let needsTocheckMiddleware = false;\n        if (popupRedirectResolver && this.config.authDomain) {\n            await this.getOrInitRedirectPersistenceManager();\n            const redirectUserEventId = (_a = this.redirectUser) === null || _a === void 0 ? void 0 : _a._redirectEventId;\n            const storedUserEventId = futureCurrentUser === null || futureCurrentUser === void 0 ? void 0 : futureCurrentUser._redirectEventId;\n            const result = await this.tryRedirectSignIn(popupRedirectResolver);\n            // If the stored user (i.e. the old \"currentUser\") has a redirectId that\n            // matches the redirect user, then we want to initially sign in with the\n            // new user object from result.\n            // TODO(samgho): More thoroughly test all of this\n            if ((!redirectUserEventId || redirectUserEventId === storedUserEventId) &&\n                (result === null || result === void 0 ? void 0 : result.user)) {\n                futureCurrentUser = result.user;\n                needsTocheckMiddleware = true;\n            }\n        }\n        // If no user in persistence, there is no current user. Set to null.\n        if (!futureCurrentUser) {\n            return this.directlySetCurrentUser(null);\n        }\n        if (!futureCurrentUser._redirectEventId) {\n            // This isn't a redirect link operation, we can reload and bail.\n            // First though, ensure that we check the middleware is happy.\n            if (needsTocheckMiddleware) {\n                try {\n                    await this.beforeStateQueue.runMiddleware(futureCurrentUser);\n                }\n                catch (e) {\n                    futureCurrentUser = previouslyStoredUser;\n                    // We know this is available since the bit is only set when the\n                    // resolver is available\n                    this._popupRedirectResolver._overrideRedirectResult(this, () => Promise.reject(e));\n                }\n            }\n            if (futureCurrentUser) {\n                return this.reloadAndSetCurrentUserOrClear(futureCurrentUser);\n            }\n            else {\n                return this.directlySetCurrentUser(null);\n            }\n        }\n        _assert(this._popupRedirectResolver, this, \"argument-error\" /* AuthErrorCode.ARGUMENT_ERROR */);\n        await this.getOrInitRedirectPersistenceManager();\n        // If the redirect user's event ID matches the current user's event ID,\n        // DO NOT reload the current user, otherwise they'll be cleared from storage.\n        // This is important for the reauthenticateWithRedirect() flow.\n        if (this.redirectUser &&\n            this.redirectUser._redirectEventId === futureCurrentUser._redirectEventId) {\n            return this.directlySetCurrentUser(futureCurrentUser);\n        }\n        return this.reloadAndSetCurrentUserOrClear(futureCurrentUser);\n    }\n    async tryRedirectSignIn(redirectResolver) {\n        // The redirect user needs to be checked (and signed in if available)\n        // during auth initialization. All of the normal sign in and link/reauth\n        // flows call back into auth and push things onto the promise queue. We\n        // need to await the result of the redirect sign in *inside the promise\n        // queue*. This presents a problem: we run into deadlock. See:\n        //    ┌> [Initialization] ─────┐\n        //    ┌> [<other queue tasks>] │\n        //    └─ [getRedirectResult] <─┘\n        //    where [] are tasks on the queue and arrows denote awaits\n        // Initialization will never complete because it's waiting on something\n        // that's waiting for initialization to complete!\n        //\n        // Instead, this method calls getRedirectResult() (stored in\n        // _completeRedirectFn) with an optional parameter that instructs all of\n        // the underlying auth operations to skip anything that mutates auth state.\n        let result = null;\n        try {\n            // We know this._popupRedirectResolver is set since redirectResolver\n            // is passed in. The _completeRedirectFn expects the unwrapped extern.\n            result = await this._popupRedirectResolver._completeRedirectFn(this, redirectResolver, true);\n        }\n        catch (e) {\n            // Swallow any errors here; the code can retrieve them in\n            // getRedirectResult().\n            await this._setRedirectUser(null);\n        }\n        return result;\n    }\n    async reloadAndSetCurrentUserOrClear(user) {\n        try {\n            await _reloadWithoutSaving(user);\n        }\n        catch (e) {\n            if ((e === null || e === void 0 ? void 0 : e.code) !==\n                `auth/${\"network-request-failed\" /* AuthErrorCode.NETWORK_REQUEST_FAILED */}`) {\n                // Something's wrong with the user's token. Log them out and remove\n                // them from storage\n                return this.directlySetCurrentUser(null);\n            }\n        }\n        return this.directlySetCurrentUser(user);\n    }\n    useDeviceLanguage() {\n        this.languageCode = _getUserLanguage();\n    }\n    async _delete() {\n        this._deleted = true;\n    }\n    async updateCurrentUser(userExtern) {\n        if (_isFirebaseServerApp(this.app)) {\n            return Promise.reject(_serverAppCurrentUserOperationNotSupportedError(this));\n        }\n        // The public updateCurrentUser method needs to make a copy of the user,\n        // and also check that the project matches\n        const user = userExtern\n            ? getModularInstance(userExtern)\n            : null;\n        if (user) {\n            _assert(user.auth.config.apiKey === this.config.apiKey, this, \"invalid-user-token\" /* AuthErrorCode.INVALID_AUTH */);\n        }\n        return this._updateCurrentUser(user && user._clone(this));\n    }\n    async _updateCurrentUser(user, skipBeforeStateCallbacks = false) {\n        if (this._deleted) {\n            return;\n        }\n        if (user) {\n            _assert(this.tenantId === user.tenantId, this, \"tenant-id-mismatch\" /* AuthErrorCode.TENANT_ID_MISMATCH */);\n        }\n        if (!skipBeforeStateCallbacks) {\n            await this.beforeStateQueue.runMiddleware(user);\n        }\n        return this.queue(async () => {\n            await this.directlySetCurrentUser(user);\n            this.notifyAuthListeners();\n        });\n    }\n    async signOut() {\n        if (_isFirebaseServerApp(this.app)) {\n            return Promise.reject(_serverAppCurrentUserOperationNotSupportedError(this));\n        }\n        // Run first, to block _setRedirectUser() if any callbacks fail.\n        await this.beforeStateQueue.runMiddleware(null);\n        // Clear the redirect user when signOut is called\n        if (this.redirectPersistenceManager || this._popupRedirectResolver) {\n            await this._setRedirectUser(null);\n        }\n        // Prevent callbacks from being called again in _updateCurrentUser, as\n        // they were already called in the first line.\n        return this._updateCurrentUser(null, /* skipBeforeStateCallbacks */ true);\n    }\n    setPersistence(persistence) {\n        if (_isFirebaseServerApp(this.app)) {\n            return Promise.reject(_serverAppCurrentUserOperationNotSupportedError(this));\n        }\n        return this.queue(async () => {\n            await this.assertedPersistence.setPersistence(_getInstance(persistence));\n        });\n    }\n    _getRecaptchaConfig() {\n        if (this.tenantId == null) {\n            return this._agentRecaptchaConfig;\n        }\n        else {\n            return this._tenantRecaptchaConfigs[this.tenantId];\n        }\n    }\n    async validatePassword(password) {\n        if (!this._getPasswordPolicyInternal()) {\n            await this._updatePasswordPolicy();\n        }\n        // Password policy will be defined after fetching.\n        const passwordPolicy = this._getPasswordPolicyInternal();\n        // Check that the policy schema version is supported by the SDK.\n        // TODO: Update this logic to use a max supported policy schema version once we have multiple schema versions.\n        if (passwordPolicy.schemaVersion !==\n            this.EXPECTED_PASSWORD_POLICY_SCHEMA_VERSION) {\n            return Promise.reject(this._errorFactory.create(\"unsupported-password-policy-schema-version\" /* AuthErrorCode.UNSUPPORTED_PASSWORD_POLICY_SCHEMA_VERSION */, {}));\n        }\n        return passwordPolicy.validatePassword(password);\n    }\n    _getPasswordPolicyInternal() {\n        if (this.tenantId === null) {\n            return this._projectPasswordPolicy;\n        }\n        else {\n            return this._tenantPasswordPolicies[this.tenantId];\n        }\n    }\n    async _updatePasswordPolicy() {\n        const response = await _getPasswordPolicy(this);\n        const passwordPolicy = new PasswordPolicyImpl(response);\n        if (this.tenantId === null) {\n            this._projectPasswordPolicy = passwordPolicy;\n        }\n        else {\n            this._tenantPasswordPolicies[this.tenantId] = passwordPolicy;\n        }\n    }\n    _getPersistence() {\n        return this.assertedPersistence.persistence.type;\n    }\n    _updateErrorMap(errorMap) {\n        this._errorFactory = new ErrorFactory('auth', 'Firebase', errorMap());\n    }\n    onAuthStateChanged(nextOrObserver, error, completed) {\n        return this.registerStateListener(this.authStateSubscription, nextOrObserver, error, completed);\n    }\n    beforeAuthStateChanged(callback, onAbort) {\n        return this.beforeStateQueue.pushCallback(callback, onAbort);\n    }\n    onIdTokenChanged(nextOrObserver, error, completed) {\n        return this.registerStateListener(this.idTokenSubscription, nextOrObserver, error, completed);\n    }\n    authStateReady() {\n        return new Promise((resolve, reject) => {\n            if (this.currentUser) {\n                resolve();\n            }\n            else {\n                const unsubscribe = this.onAuthStateChanged(() => {\n                    unsubscribe();\n                    resolve();\n                }, reject);\n            }\n        });\n    }\n    /**\n     * Revokes the given access token. Currently only supports Apple OAuth access tokens.\n     */\n    async revokeAccessToken(token) {\n        if (this.currentUser) {\n            const idToken = await this.currentUser.getIdToken();\n            // Generalize this to accept other providers once supported.\n            const request = {\n                providerId: 'apple.com',\n                tokenType: \"ACCESS_TOKEN\" /* TokenType.ACCESS_TOKEN */,\n                token,\n                idToken\n            };\n            if (this.tenantId != null) {\n                request.tenantId = this.tenantId;\n            }\n            await revokeToken(this, request);\n        }\n    }\n    toJSON() {\n        var _a;\n        return {\n            apiKey: this.config.apiKey,\n            authDomain: this.config.authDomain,\n            appName: this.name,\n            currentUser: (_a = this._currentUser) === null || _a === void 0 ? void 0 : _a.toJSON()\n        };\n    }\n    async _setRedirectUser(user, popupRedirectResolver) {\n        const redirectManager = await this.getOrInitRedirectPersistenceManager(popupRedirectResolver);\n        return user === null\n            ? redirectManager.removeCurrentUser()\n            : redirectManager.setCurrentUser(user);\n    }\n    async getOrInitRedirectPersistenceManager(popupRedirectResolver) {\n        if (!this.redirectPersistenceManager) {\n            const resolver = (popupRedirectResolver && _getInstance(popupRedirectResolver)) ||\n                this._popupRedirectResolver;\n            _assert(resolver, this, \"argument-error\" /* AuthErrorCode.ARGUMENT_ERROR */);\n            this.redirectPersistenceManager = await PersistenceUserManager.create(this, [_getInstance(resolver._redirectPersistence)], \"redirectUser\" /* KeyName.REDIRECT_USER */);\n            this.redirectUser =\n                await this.redirectPersistenceManager.getCurrentUser();\n        }\n        return this.redirectPersistenceManager;\n    }\n    async _redirectUserForId(id) {\n        var _a, _b;\n        // Make sure we've cleared any pending persistence actions if we're not in\n        // the initializer\n        if (this._isInitialized) {\n            await this.queue(async () => { });\n        }\n        if (((_a = this._currentUser) === null || _a === void 0 ? void 0 : _a._redirectEventId) === id) {\n            return this._currentUser;\n        }\n        if (((_b = this.redirectUser) === null || _b === void 0 ? void 0 : _b._redirectEventId) === id) {\n            return this.redirectUser;\n        }\n        return null;\n    }\n    async _persistUserIfCurrent(user) {\n        if (user === this.currentUser) {\n            return this.queue(async () => this.directlySetCurrentUser(user));\n        }\n    }\n    /** Notifies listeners only if the user is current */\n    _notifyListenersIfCurrent(user) {\n        if (user === this.currentUser) {\n            this.notifyAuthListeners();\n        }\n    }\n    _key() {\n        return `${this.config.authDomain}:${this.config.apiKey}:${this.name}`;\n    }\n    _startProactiveRefresh() {\n        this.isProactiveRefreshEnabled = true;\n        if (this.currentUser) {\n            this._currentUser._startProactiveRefresh();\n        }\n    }\n    _stopProactiveRefresh() {\n        this.isProactiveRefreshEnabled = false;\n        if (this.currentUser) {\n            this._currentUser._stopProactiveRefresh();\n        }\n    }\n    /** Returns the current user cast as the internal type */\n    get _currentUser() {\n        return this.currentUser;\n    }\n    notifyAuthListeners() {\n        var _a, _b;\n        if (!this._isInitialized) {\n            return;\n        }\n        this.idTokenSubscription.next(this.currentUser);\n        const currentUid = (_b = (_a = this.currentUser) === null || _a === void 0 ? void 0 : _a.uid) !== null && _b !== void 0 ? _b : null;\n        if (this.lastNotifiedUid !== currentUid) {\n            this.lastNotifiedUid = currentUid;\n            this.authStateSubscription.next(this.currentUser);\n        }\n    }\n    registerStateListener(subscription, nextOrObserver, error, completed) {\n        if (this._deleted) {\n            return () => { };\n        }\n        const cb = typeof nextOrObserver === 'function'\n            ? nextOrObserver\n            : nextOrObserver.next.bind(nextOrObserver);\n        let isUnsubscribed = false;\n        const promise = this._isInitialized\n            ? Promise.resolve()\n            : this._initializationPromise;\n        _assert(promise, this, \"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */);\n        // The callback needs to be called asynchronously per the spec.\n        // eslint-disable-next-line @typescript-eslint/no-floating-promises\n        promise.then(() => {\n            if (isUnsubscribed) {\n                return;\n            }\n            cb(this.currentUser);\n        });\n        if (typeof nextOrObserver === 'function') {\n            const unsubscribe = subscription.addObserver(nextOrObserver, error, completed);\n            return () => {\n                isUnsubscribed = true;\n                unsubscribe();\n            };\n        }\n        else {\n            const unsubscribe = subscription.addObserver(nextOrObserver);\n            return () => {\n                isUnsubscribed = true;\n                unsubscribe();\n            };\n        }\n    }\n    /**\n     * Unprotected (from race conditions) method to set the current user. This\n     * should only be called from within a queued callback. This is necessary\n     * because the queue shouldn't rely on another queued callback.\n     */\n    async directlySetCurrentUser(user) {\n        if (this.currentUser && this.currentUser !== user) {\n            this._currentUser._stopProactiveRefresh();\n        }\n        if (user && this.isProactiveRefreshEnabled) {\n            user._startProactiveRefresh();\n        }\n        this.currentUser = user;\n        if (user) {\n            await this.assertedPersistence.setCurrentUser(user);\n        }\n        else {\n            await this.assertedPersistence.removeCurrentUser();\n        }\n    }\n    queue(action) {\n        // In case something errors, the callback still should be called in order\n        // to keep the promise chain alive\n        this.operations = this.operations.then(action, action);\n        return this.operations;\n    }\n    get assertedPersistence() {\n        _assert(this.persistenceManager, this, \"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */);\n        return this.persistenceManager;\n    }\n    _logFramework(framework) {\n        if (!framework || this.frameworks.includes(framework)) {\n            return;\n        }\n        this.frameworks.push(framework);\n        // Sort alphabetically so that \"FirebaseCore-web,FirebaseUI-web\" and\n        // \"FirebaseUI-web,FirebaseCore-web\" aren't viewed as different.\n        this.frameworks.sort();\n        this.clientVersion = _getClientVersion(this.config.clientPlatform, this._getFrameworks());\n    }\n    _getFrameworks() {\n        return this.frameworks;\n    }\n    async _getAdditionalHeaders() {\n        var _a;\n        // Additional headers on every request\n        const headers = {\n            [\"X-Client-Version\" /* HttpHeader.X_CLIENT_VERSION */]: this.clientVersion\n        };\n        if (this.app.options.appId) {\n            headers[\"X-Firebase-gmpid\" /* HttpHeader.X_FIREBASE_GMPID */] = this.app.options.appId;\n        }\n        // If the heartbeat service exists, add the heartbeat string\n        const heartbeatsHeader = await ((_a = this.heartbeatServiceProvider\n            .getImmediate({\n            optional: true\n        })) === null || _a === void 0 ? void 0 : _a.getHeartbeatsHeader());\n        if (heartbeatsHeader) {\n            headers[\"X-Firebase-Client\" /* HttpHeader.X_FIREBASE_CLIENT */] = heartbeatsHeader;\n        }\n        // If the App Check service exists, add the App Check token in the headers\n        const appCheckToken = await this._getAppCheckToken();\n        if (appCheckToken) {\n            headers[\"X-Firebase-AppCheck\" /* HttpHeader.X_FIREBASE_APP_CHECK */] = appCheckToken;\n        }\n        return headers;\n    }\n    async _getAppCheckToken() {\n        var _a;\n        const appCheckTokenResult = await ((_a = this.appCheckServiceProvider\n            .getImmediate({ optional: true })) === null || _a === void 0 ? void 0 : _a.getToken());\n        if (appCheckTokenResult === null || appCheckTokenResult === void 0 ? void 0 : appCheckTokenResult.error) {\n            // Context: appCheck.getToken() will never throw even if an error happened.\n            // In the error case, a dummy token will be returned along with an error field describing\n            // the error. In general, we shouldn't care about the error condition and just use\n            // the token (actual or dummy) to send requests.\n            _logWarn(`Error while retrieving App Check token: ${appCheckTokenResult.error}`);\n        }\n        return appCheckTokenResult === null || appCheckTokenResult === void 0 ? void 0 : appCheckTokenResult.token;\n    }\n}\n/**\n * Method to be used to cast down to our private implementation of Auth.\n * It will also handle unwrapping from the compat type if necessary\n *\n * @param auth Auth object passed in from developer\n */\nfunction _castAuth(auth) {\n    return getModularInstance(auth);\n}\n/** Helper class to wrap subscriber logic */\nclass Subscription {\n    constructor(auth) {\n        this.auth = auth;\n        this.observer = null;\n        this.addObserver = createSubscribe(observer => (this.observer = observer));\n    }\n    get next() {\n        _assert(this.observer, this.auth, \"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */);\n        return this.observer.next.bind(this.observer);\n    }\n}\n\n/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nlet externalJSProvider = {\n    async loadJS() {\n        throw new Error('Unable to load external scripts');\n    },\n    recaptchaV2Script: '',\n    recaptchaEnterpriseScript: '',\n    gapiScript: ''\n};\nfunction _setExternalJSProvider(p) {\n    externalJSProvider = p;\n}\nfunction _loadJS(url) {\n    return externalJSProvider.loadJS(url);\n}\nfunction _recaptchaV2ScriptUrl() {\n    return externalJSProvider.recaptchaV2Script;\n}\nfunction _recaptchaEnterpriseScriptUrl() {\n    return externalJSProvider.recaptchaEnterpriseScript;\n}\nfunction _gapiScriptUrl() {\n    return externalJSProvider.gapiScript;\n}\nfunction _generateCallbackName(prefix) {\n    return `__${prefix}${Math.floor(Math.random() * 1000000)}`;\n}\n\n/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nconst _SOLVE_TIME_MS = 500;\nconst _EXPIRATION_TIME_MS = 60000;\nconst _WIDGET_ID_START = 1000000000000;\nclass MockReCaptcha {\n    constructor(auth) {\n        this.auth = auth;\n        this.counter = _WIDGET_ID_START;\n        this._widgets = new Map();\n    }\n    render(container, parameters) {\n        const id = this.counter;\n        this._widgets.set(id, new MockWidget(container, this.auth.name, parameters || {}));\n        this.counter++;\n        return id;\n    }\n    reset(optWidgetId) {\n        var _a;\n        const id = optWidgetId || _WIDGET_ID_START;\n        void ((_a = this._widgets.get(id)) === null || _a === void 0 ? void 0 : _a.delete());\n        this._widgets.delete(id);\n    }\n    getResponse(optWidgetId) {\n        var _a;\n        const id = optWidgetId || _WIDGET_ID_START;\n        return ((_a = this._widgets.get(id)) === null || _a === void 0 ? void 0 : _a.getResponse()) || '';\n    }\n    async execute(optWidgetId) {\n        var _a;\n        const id = optWidgetId || _WIDGET_ID_START;\n        void ((_a = this._widgets.get(id)) === null || _a === void 0 ? void 0 : _a.execute());\n        return '';\n    }\n}\nclass MockGreCAPTCHATopLevel {\n    constructor() {\n        this.enterprise = new MockGreCAPTCHA();\n    }\n    ready(callback) {\n        callback();\n    }\n    execute(\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    _siteKey, _options) {\n        return Promise.resolve('token');\n    }\n    render(\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    _container, _parameters) {\n        return '';\n    }\n}\nclass MockGreCAPTCHA {\n    ready(callback) {\n        callback();\n    }\n    execute(\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    _siteKey, _options) {\n        return Promise.resolve('token');\n    }\n    render(\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    _container, _parameters) {\n        return '';\n    }\n}\nclass MockWidget {\n    constructor(containerOrId, appName, params) {\n        this.params = params;\n        this.timerId = null;\n        this.deleted = false;\n        this.responseToken = null;\n        this.clickHandler = () => {\n            this.execute();\n        };\n        const container = typeof containerOrId === 'string'\n            ? document.getElementById(containerOrId)\n            : containerOrId;\n        _assert(container, \"argument-error\" /* AuthErrorCode.ARGUMENT_ERROR */, { appName });\n        this.container = container;\n        this.isVisible = this.params.size !== 'invisible';\n        if (this.isVisible) {\n            this.execute();\n        }\n        else {\n            this.container.addEventListener('click', this.clickHandler);\n        }\n    }\n    getResponse() {\n        this.checkIfDeleted();\n        return this.responseToken;\n    }\n    delete() {\n        this.checkIfDeleted();\n        this.deleted = true;\n        if (this.timerId) {\n            clearTimeout(this.timerId);\n            this.timerId = null;\n        }\n        this.container.removeEventListener('click', this.clickHandler);\n    }\n    execute() {\n        this.checkIfDeleted();\n        if (this.timerId) {\n            return;\n        }\n        this.timerId = window.setTimeout(() => {\n            this.responseToken = generateRandomAlphaNumericString(50);\n            const { callback, 'expired-callback': expiredCallback } = this.params;\n            if (callback) {\n                try {\n                    callback(this.responseToken);\n                }\n                catch (e) { }\n            }\n            this.timerId = window.setTimeout(() => {\n                this.timerId = null;\n                this.responseToken = null;\n                if (expiredCallback) {\n                    try {\n                        expiredCallback();\n                    }\n                    catch (e) { }\n                }\n                if (this.isVisible) {\n                    this.execute();\n                }\n            }, _EXPIRATION_TIME_MS);\n        }, _SOLVE_TIME_MS);\n    }\n    checkIfDeleted() {\n        if (this.deleted) {\n            throw new Error('reCAPTCHA mock was already deleted!');\n        }\n    }\n}\nfunction generateRandomAlphaNumericString(len) {\n    const chars = [];\n    const allowedChars = '1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';\n    for (let i = 0; i < len; i++) {\n        chars.push(allowedChars.charAt(Math.floor(Math.random() * allowedChars.length)));\n    }\n    return chars.join('');\n}\n\n/* eslint-disable @typescript-eslint/no-require-imports */\nconst RECAPTCHA_ENTERPRISE_VERIFIER_TYPE = 'recaptcha-enterprise';\nconst FAKE_TOKEN = 'NO_RECAPTCHA';\nclass RecaptchaEnterpriseVerifier {\n    /**\n     *\n     * @param authExtern - The corresponding Firebase {@link Auth} instance.\n     *\n     */\n    constructor(authExtern) {\n        /**\n         * Identifies the type of application verifier (e.g. \"recaptcha-enterprise\").\n         */\n        this.type = RECAPTCHA_ENTERPRISE_VERIFIER_TYPE;\n        this.auth = _castAuth(authExtern);\n    }\n    /**\n     * Executes the verification process.\n     *\n     * @returns A Promise for a token that can be used to assert the validity of a request.\n     */\n    async verify(action = 'verify', forceRefresh = false) {\n        async function retrieveSiteKey(auth) {\n            if (!forceRefresh) {\n                if (auth.tenantId == null && auth._agentRecaptchaConfig != null) {\n                    return auth._agentRecaptchaConfig.siteKey;\n                }\n                if (auth.tenantId != null &&\n                    auth._tenantRecaptchaConfigs[auth.tenantId] !== undefined) {\n                    return auth._tenantRecaptchaConfigs[auth.tenantId].siteKey;\n                }\n            }\n            return new Promise(async (resolve, reject) => {\n                getRecaptchaConfig(auth, {\n                    clientType: \"CLIENT_TYPE_WEB\" /* RecaptchaClientType.WEB */,\n                    version: \"RECAPTCHA_ENTERPRISE\" /* RecaptchaVersion.ENTERPRISE */\n                })\n                    .then(response => {\n                    if (response.recaptchaKey === undefined) {\n                        reject(new Error('recaptcha Enterprise site key undefined'));\n                    }\n                    else {\n                        const config = new RecaptchaConfig(response);\n                        if (auth.tenantId == null) {\n                            auth._agentRecaptchaConfig = config;\n                        }\n                        else {\n                            auth._tenantRecaptchaConfigs[auth.tenantId] = config;\n                        }\n                        return resolve(config.siteKey);\n                    }\n                })\n                    .catch(error => {\n                    reject(error);\n                });\n            });\n        }\n        function retrieveRecaptchaToken(siteKey, resolve, reject) {\n            const grecaptcha = window.grecaptcha;\n            if (isEnterprise(grecaptcha)) {\n                grecaptcha.enterprise.ready(() => {\n                    grecaptcha.enterprise\n                        .execute(siteKey, { action })\n                        .then(token => {\n                        resolve(token);\n                    })\n                        .catch(() => {\n                        resolve(FAKE_TOKEN);\n                    });\n                });\n            }\n            else {\n                reject(Error('No reCAPTCHA enterprise script loaded.'));\n            }\n        }\n        // Returns Promise for a mock token when appVerificationDisabledForTesting is true.\n        if (this.auth.settings.appVerificationDisabledForTesting) {\n            const mockRecaptcha = new MockGreCAPTCHATopLevel();\n            return mockRecaptcha.execute('siteKey', { action: 'verify' });\n        }\n        return new Promise((resolve, reject) => {\n            retrieveSiteKey(this.auth)\n                .then(siteKey => {\n                if (!forceRefresh && isEnterprise(window.grecaptcha)) {\n                    retrieveRecaptchaToken(siteKey, resolve, reject);\n                }\n                else {\n                    if (typeof window === 'undefined') {\n                        reject(new Error('RecaptchaVerifier is only supported in browser'));\n                        return;\n                    }\n                    let url = _recaptchaEnterpriseScriptUrl();\n                    if (url.length !== 0) {\n                        url += siteKey;\n                    }\n                    _loadJS(url)\n                        .then(() => {\n                        retrieveRecaptchaToken(siteKey, resolve, reject);\n                    })\n                        .catch(error => {\n                        reject(error);\n                    });\n                }\n            })\n                .catch(error => {\n                reject(error);\n            });\n        });\n    }\n}\nasync function injectRecaptchaFields(auth, request, action, isCaptchaResp = false, isFakeToken = false) {\n    const verifier = new RecaptchaEnterpriseVerifier(auth);\n    let captchaResponse;\n    if (isFakeToken) {\n        captchaResponse = FAKE_TOKEN;\n    }\n    else {\n        try {\n            captchaResponse = await verifier.verify(action);\n        }\n        catch (error) {\n            captchaResponse = await verifier.verify(action, true);\n        }\n    }\n    const newRequest = Object.assign({}, request);\n    if (action === \"mfaSmsEnrollment\" /* RecaptchaActionName.MFA_SMS_ENROLLMENT */ ||\n        action === \"mfaSmsSignIn\" /* RecaptchaActionName.MFA_SMS_SIGNIN */) {\n        if ('phoneEnrollmentInfo' in newRequest) {\n            const phoneNumber = newRequest.phoneEnrollmentInfo.phoneNumber;\n            const recaptchaToken = newRequest.phoneEnrollmentInfo.recaptchaToken;\n            Object.assign(newRequest, {\n                'phoneEnrollmentInfo': {\n                    phoneNumber,\n                    recaptchaToken,\n                    captchaResponse,\n                    'clientType': \"CLIENT_TYPE_WEB\" /* RecaptchaClientType.WEB */,\n                    'recaptchaVersion': \"RECAPTCHA_ENTERPRISE\" /* RecaptchaVersion.ENTERPRISE */\n                }\n            });\n        }\n        else if ('phoneSignInInfo' in newRequest) {\n            const recaptchaToken = newRequest.phoneSignInInfo.recaptchaToken;\n            Object.assign(newRequest, {\n                'phoneSignInInfo': {\n                    recaptchaToken,\n                    captchaResponse,\n                    'clientType': \"CLIENT_TYPE_WEB\" /* RecaptchaClientType.WEB */,\n                    'recaptchaVersion': \"RECAPTCHA_ENTERPRISE\" /* RecaptchaVersion.ENTERPRISE */\n                }\n            });\n        }\n        return newRequest;\n    }\n    if (!isCaptchaResp) {\n        Object.assign(newRequest, { captchaResponse });\n    }\n    else {\n        Object.assign(newRequest, { 'captchaResp': captchaResponse });\n    }\n    Object.assign(newRequest, { 'clientType': \"CLIENT_TYPE_WEB\" /* RecaptchaClientType.WEB */ });\n    Object.assign(newRequest, {\n        'recaptchaVersion': \"RECAPTCHA_ENTERPRISE\" /* RecaptchaVersion.ENTERPRISE */\n    });\n    return newRequest;\n}\nasync function handleRecaptchaFlow(authInstance, request, actionName, actionMethod, recaptchaAuthProvider) {\n    var _a, _b;\n    if (recaptchaAuthProvider === \"EMAIL_PASSWORD_PROVIDER\" /* RecaptchaAuthProvider.EMAIL_PASSWORD_PROVIDER */) {\n        if ((_a = authInstance\n            ._getRecaptchaConfig()) === null || _a === void 0 ? void 0 : _a.isProviderEnabled(\"EMAIL_PASSWORD_PROVIDER\" /* RecaptchaAuthProvider.EMAIL_PASSWORD_PROVIDER */)) {\n            const requestWithRecaptcha = await injectRecaptchaFields(authInstance, request, actionName, actionName === \"getOobCode\" /* RecaptchaActionName.GET_OOB_CODE */);\n            return actionMethod(authInstance, requestWithRecaptcha);\n        }\n        else {\n            return actionMethod(authInstance, request).catch(async (error) => {\n                if (error.code === `auth/${\"missing-recaptcha-token\" /* AuthErrorCode.MISSING_RECAPTCHA_TOKEN */}`) {\n                    console.log(`${actionName} is protected by reCAPTCHA Enterprise for this project. Automatically triggering the reCAPTCHA flow and restarting the flow.`);\n                    const requestWithRecaptcha = await injectRecaptchaFields(authInstance, request, actionName, actionName === \"getOobCode\" /* RecaptchaActionName.GET_OOB_CODE */);\n                    return actionMethod(authInstance, requestWithRecaptcha);\n                }\n                else {\n                    return Promise.reject(error);\n                }\n            });\n        }\n    }\n    else if (recaptchaAuthProvider === \"PHONE_PROVIDER\" /* RecaptchaAuthProvider.PHONE_PROVIDER */) {\n        if ((_b = authInstance\n            ._getRecaptchaConfig()) === null || _b === void 0 ? void 0 : _b.isProviderEnabled(\"PHONE_PROVIDER\" /* RecaptchaAuthProvider.PHONE_PROVIDER */)) {\n            const requestWithRecaptcha = await injectRecaptchaFields(authInstance, request, actionName);\n            return actionMethod(authInstance, requestWithRecaptcha).catch(async (error) => {\n                var _a;\n                if (((_a = authInstance\n                    ._getRecaptchaConfig()) === null || _a === void 0 ? void 0 : _a.getProviderEnforcementState(\"PHONE_PROVIDER\" /* RecaptchaAuthProvider.PHONE_PROVIDER */)) === \"AUDIT\" /* EnforcementState.AUDIT */) {\n                    // AUDIT mode\n                    if (error.code === `auth/${\"missing-recaptcha-token\" /* AuthErrorCode.MISSING_RECAPTCHA_TOKEN */}` ||\n                        error.code === `auth/${\"invalid-app-credential\" /* AuthErrorCode.INVALID_APP_CREDENTIAL */}`) {\n                        console.log(`Failed to verify with reCAPTCHA Enterprise. Automatically triggering the reCAPTCHA v2 flow to complete the ${actionName} flow.`);\n                        // reCAPTCHA Enterprise token is missing or reCAPTCHA Enterprise token\n                        // check fails.\n                        // Fallback to reCAPTCHA v2 flow.\n                        const requestWithRecaptchaFields = await injectRecaptchaFields(authInstance, request, actionName, false, // isCaptchaResp\n                        true // isFakeToken\n                        );\n                        // This will call the PhoneApiCaller to fetch and inject reCAPTCHA v2 token.\n                        return actionMethod(authInstance, requestWithRecaptchaFields);\n                    }\n                }\n                // ENFORCE mode or AUDIT mode with any other error.\n                return Promise.reject(error);\n            });\n        }\n        else {\n            // Do reCAPTCHA v2 flow.\n            const requestWithRecaptchaFields = await injectRecaptchaFields(authInstance, request, actionName, false, // isCaptchaResp\n            true // isFakeToken\n            );\n            // This will call the PhoneApiCaller to fetch and inject v2 token.\n            return actionMethod(authInstance, requestWithRecaptchaFields);\n        }\n    }\n    else {\n        return Promise.reject(recaptchaAuthProvider + ' provider is not supported.');\n    }\n}\nasync function _initializeRecaptchaConfig(auth) {\n    const authInternal = _castAuth(auth);\n    const response = await getRecaptchaConfig(authInternal, {\n        clientType: \"CLIENT_TYPE_WEB\" /* RecaptchaClientType.WEB */,\n        version: \"RECAPTCHA_ENTERPRISE\" /* RecaptchaVersion.ENTERPRISE */\n    });\n    const config = new RecaptchaConfig(response);\n    if (authInternal.tenantId == null) {\n        authInternal._agentRecaptchaConfig = config;\n    }\n    else {\n        authInternal._tenantRecaptchaConfigs[authInternal.tenantId] = config;\n    }\n    if (config.isAnyProviderEnabled()) {\n        const verifier = new RecaptchaEnterpriseVerifier(authInternal);\n        void verifier.verify();\n    }\n}\n\n/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Initializes an {@link Auth} instance with fine-grained control over\n * {@link Dependencies}.\n *\n * @remarks\n *\n * This function allows more control over the {@link Auth} instance than\n * {@link getAuth}. `getAuth` uses platform-specific defaults to supply\n * the {@link Dependencies}. In general, `getAuth` is the easiest way to\n * initialize Auth and works for most use cases. Use `initializeAuth` if you\n * need control over which persistence layer is used, or to minimize bundle\n * size if you're not using either `signInWithPopup` or `signInWithRedirect`.\n *\n * For example, if your app only uses anonymous accounts and you only want\n * accounts saved for the current session, initialize `Auth` with:\n *\n * ```js\n * const auth = initializeAuth(app, {\n *   persistence: browserSessionPersistence,\n *   popupRedirectResolver: undefined,\n * });\n * ```\n *\n * @public\n */\nfunction initializeAuth(app, deps) {\n    const provider = _getProvider(app, 'auth');\n    if (provider.isInitialized()) {\n        const auth = provider.getImmediate();\n        const initialOptions = provider.getOptions();\n        if (deepEqual(initialOptions, deps !== null && deps !== void 0 ? deps : {})) {\n            return auth;\n        }\n        else {\n            _fail(auth, \"already-initialized\" /* AuthErrorCode.ALREADY_INITIALIZED */);\n        }\n    }\n    const auth = provider.initialize({ options: deps });\n    return auth;\n}\nfunction _initializeAuthInstance(auth, deps) {\n    const persistence = (deps === null || deps === void 0 ? void 0 : deps.persistence) || [];\n    const hierarchy = (Array.isArray(persistence) ? persistence : [persistence]).map(_getInstance);\n    if (deps === null || deps === void 0 ? void 0 : deps.errorMap) {\n        auth._updateErrorMap(deps.errorMap);\n    }\n    // This promise is intended to float; auth initialization happens in the\n    // background, meanwhile the auth object may be used by the app.\n    // eslint-disable-next-line @typescript-eslint/no-floating-promises\n    auth._initializeWithPersistence(hierarchy, deps === null || deps === void 0 ? void 0 : deps.popupRedirectResolver);\n}\n\n/**\n * Changes the {@link Auth} instance to communicate with the Firebase Auth Emulator, instead of production\n * Firebase Auth services.\n *\n * @remarks\n * This must be called synchronously immediately following the first call to\n * {@link initializeAuth}.  Do not use with production credentials as emulator\n * traffic is not encrypted.\n *\n *\n * @example\n * ```javascript\n * connectAuthEmulator(auth, 'http://127.0.0.1:9099', { disableWarnings: true });\n * ```\n *\n * @param auth - The {@link Auth} instance.\n * @param url - The URL at which the emulator is running (eg, 'http://localhost:9099').\n * @param options - Optional. `options.disableWarnings` defaults to `false`. Set it to\n * `true` to disable the warning banner attached to the DOM.\n *\n * @public\n */\nfunction connectAuthEmulator(auth, url, options) {\n    const authInternal = _castAuth(auth);\n    _assert(authInternal._canInitEmulator, authInternal, \"emulator-config-failed\" /* AuthErrorCode.EMULATOR_CONFIG_FAILED */);\n    _assert(/^https?:\\/\\//.test(url), authInternal, \"invalid-emulator-scheme\" /* AuthErrorCode.INVALID_EMULATOR_SCHEME */);\n    const disableWarnings = !!(options === null || options === void 0 ? void 0 : options.disableWarnings);\n    const protocol = extractProtocol(url);\n    const { host, port } = extractHostAndPort(url);\n    const portStr = port === null ? '' : `:${port}`;\n    // Always replace path with \"/\" (even if input url had no path at all, or had a different one).\n    authInternal.config.emulator = { url: `${protocol}//${host}${portStr}/` };\n    authInternal.settings.appVerificationDisabledForTesting = true;\n    authInternal.emulatorConfig = Object.freeze({\n        host,\n        port,\n        protocol: protocol.replace(':', ''),\n        options: Object.freeze({ disableWarnings })\n    });\n    if (!disableWarnings) {\n        emitEmulatorWarning();\n    }\n}\nfunction extractProtocol(url) {\n    const protocolEnd = url.indexOf(':');\n    return protocolEnd < 0 ? '' : url.substr(0, protocolEnd + 1);\n}\nfunction extractHostAndPort(url) {\n    const protocol = extractProtocol(url);\n    const authority = /(\\/\\/)?([^?#/]+)/.exec(url.substr(protocol.length)); // Between // and /, ? or #.\n    if (!authority) {\n        return { host: '', port: null };\n    }\n    const hostAndPort = authority[2].split('@').pop() || ''; // Strip out \"username:password@\".\n    const bracketedIPv6 = /^(\\[[^\\]]+\\])(:|$)/.exec(hostAndPort);\n    if (bracketedIPv6) {\n        const host = bracketedIPv6[1];\n        return { host, port: parsePort(hostAndPort.substr(host.length + 1)) };\n    }\n    else {\n        const [host, port] = hostAndPort.split(':');\n        return { host, port: parsePort(port) };\n    }\n}\nfunction parsePort(portStr) {\n    if (!portStr) {\n        return null;\n    }\n    const port = Number(portStr);\n    if (isNaN(port)) {\n        return null;\n    }\n    return port;\n}\nfunction emitEmulatorWarning() {\n    function attachBanner() {\n        const el = document.createElement('p');\n        const sty = el.style;\n        el.innerText =\n            'Running in emulator mode. Do not use with production credentials.';\n        sty.position = 'fixed';\n        sty.width = '100%';\n        sty.backgroundColor = '#ffffff';\n        sty.border = '.1em solid #000000';\n        sty.color = '#b50000';\n        sty.bottom = '0px';\n        sty.left = '0px';\n        sty.margin = '0px';\n        sty.zIndex = '10000';\n        sty.textAlign = 'center';\n        el.classList.add('firebase-emulator-warning');\n        document.body.appendChild(el);\n    }\n    if (typeof console !== 'undefined' && typeof console.info === 'function') {\n        console.info('WARNING: You are using the Auth Emulator,' +\n            ' which is intended for local testing only.  Do not use with' +\n            ' production credentials.');\n    }\n    if (typeof window !== 'undefined' && typeof document !== 'undefined') {\n        if (document.readyState === 'loading') {\n            window.addEventListener('DOMContentLoaded', attachBanner);\n        }\n        else {\n            attachBanner();\n        }\n    }\n}\n\n/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Interface that represents the credentials returned by an {@link AuthProvider}.\n *\n * @remarks\n * Implementations specify the details about each auth provider's credential requirements.\n *\n * @public\n */\nclass AuthCredential {\n    /** @internal */\n    constructor(\n    /**\n     * The authentication provider ID for the credential.\n     *\n     * @remarks\n     * For example, 'facebook.com', or 'google.com'.\n     */\n    providerId, \n    /**\n     * The authentication sign in method for the credential.\n     *\n     * @remarks\n     * For example, {@link SignInMethod}.EMAIL_PASSWORD, or\n     * {@link SignInMethod}.EMAIL_LINK. This corresponds to the sign-in method\n     * identifier as returned in {@link fetchSignInMethodsForEmail}.\n     */\n    signInMethod) {\n        this.providerId = providerId;\n        this.signInMethod = signInMethod;\n    }\n    /**\n     * Returns a JSON-serializable representation of this object.\n     *\n     * @returns a JSON-serializable representation of this object.\n     */\n    toJSON() {\n        return debugFail('not implemented');\n    }\n    /** @internal */\n    _getIdTokenResponse(_auth) {\n        return debugFail('not implemented');\n    }\n    /** @internal */\n    _linkToIdToken(_auth, _idToken) {\n        return debugFail('not implemented');\n    }\n    /** @internal */\n    _getReauthenticationResolver(_auth) {\n        return debugFail('not implemented');\n    }\n}\n\n/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nasync function resetPassword(auth, request) {\n    return _performApiRequest(auth, \"POST\" /* HttpMethod.POST */, \"/v1/accounts:resetPassword\" /* Endpoint.RESET_PASSWORD */, _addTidIfNecessary(auth, request));\n}\nasync function updateEmailPassword(auth, request) {\n    return _performApiRequest(auth, \"POST\" /* HttpMethod.POST */, \"/v1/accounts:update\" /* Endpoint.SET_ACCOUNT_INFO */, request);\n}\n// Used for linking an email/password account to an existing idToken. Uses the same request/response\n// format as updateEmailPassword.\nasync function linkEmailPassword(auth, request) {\n    return _performApiRequest(auth, \"POST\" /* HttpMethod.POST */, \"/v1/accounts:signUp\" /* Endpoint.SIGN_UP */, request);\n}\nasync function applyActionCode$1(auth, request) {\n    return _performApiRequest(auth, \"POST\" /* HttpMethod.POST */, \"/v1/accounts:update\" /* Endpoint.SET_ACCOUNT_INFO */, _addTidIfNecessary(auth, request));\n}\n\n/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nasync function signInWithPassword(auth, request) {\n    return _performSignInRequest(auth, \"POST\" /* HttpMethod.POST */, \"/v1/accounts:signInWithPassword\" /* Endpoint.SIGN_IN_WITH_PASSWORD */, _addTidIfNecessary(auth, request));\n}\nasync function sendOobCode(auth, request) {\n    return _performApiRequest(auth, \"POST\" /* HttpMethod.POST */, \"/v1/accounts:sendOobCode\" /* Endpoint.SEND_OOB_CODE */, _addTidIfNecessary(auth, request));\n}\nasync function sendEmailVerification$1(auth, request) {\n    return sendOobCode(auth, request);\n}\nasync function sendPasswordResetEmail$1(auth, request) {\n    return sendOobCode(auth, request);\n}\nasync function sendSignInLinkToEmail$1(auth, request) {\n    return sendOobCode(auth, request);\n}\nasync function verifyAndChangeEmail(auth, request) {\n    return sendOobCode(auth, request);\n}\n\n/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nasync function signInWithEmailLink$1(auth, request) {\n    return _performSignInRequest(auth, \"POST\" /* HttpMethod.POST */, \"/v1/accounts:signInWithEmailLink\" /* Endpoint.SIGN_IN_WITH_EMAIL_LINK */, _addTidIfNecessary(auth, request));\n}\nasync function signInWithEmailLinkForLinking(auth, request) {\n    return _performSignInRequest(auth, \"POST\" /* HttpMethod.POST */, \"/v1/accounts:signInWithEmailLink\" /* Endpoint.SIGN_IN_WITH_EMAIL_LINK */, _addTidIfNecessary(auth, request));\n}\n\n/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Interface that represents the credentials returned by {@link EmailAuthProvider} for\n * {@link ProviderId}.PASSWORD\n *\n * @remarks\n * Covers both {@link SignInMethod}.EMAIL_PASSWORD and\n * {@link SignInMethod}.EMAIL_LINK.\n *\n * @public\n */\nclass EmailAuthCredential extends AuthCredential {\n    /** @internal */\n    constructor(\n    /** @internal */\n    _email, \n    /** @internal */\n    _password, signInMethod, \n    /** @internal */\n    _tenantId = null) {\n        super(\"password\" /* ProviderId.PASSWORD */, signInMethod);\n        this._email = _email;\n        this._password = _password;\n        this._tenantId = _tenantId;\n    }\n    /** @internal */\n    static _fromEmailAndPassword(email, password) {\n        return new EmailAuthCredential(email, password, \"password\" /* SignInMethod.EMAIL_PASSWORD */);\n    }\n    /** @internal */\n    static _fromEmailAndCode(email, oobCode, tenantId = null) {\n        return new EmailAuthCredential(email, oobCode, \"emailLink\" /* SignInMethod.EMAIL_LINK */, tenantId);\n    }\n    /** {@inheritdoc AuthCredential.toJSON} */\n    toJSON() {\n        return {\n            email: this._email,\n            password: this._password,\n            signInMethod: this.signInMethod,\n            tenantId: this._tenantId\n        };\n    }\n    /**\n     * Static method to deserialize a JSON representation of an object into an {@link  AuthCredential}.\n     *\n     * @param json - Either `object` or the stringified representation of the object. When string is\n     * provided, `JSON.parse` would be called first.\n     *\n     * @returns If the JSON input does not represent an {@link AuthCredential}, null is returned.\n     */\n    static fromJSON(json) {\n        const obj = typeof json === 'string' ? JSON.parse(json) : json;\n        if ((obj === null || obj === void 0 ? void 0 : obj.email) && (obj === null || obj === void 0 ? void 0 : obj.password)) {\n            if (obj.signInMethod === \"password\" /* SignInMethod.EMAIL_PASSWORD */) {\n                return this._fromEmailAndPassword(obj.email, obj.password);\n            }\n            else if (obj.signInMethod === \"emailLink\" /* SignInMethod.EMAIL_LINK */) {\n                return this._fromEmailAndCode(obj.email, obj.password, obj.tenantId);\n            }\n        }\n        return null;\n    }\n    /** @internal */\n    async _getIdTokenResponse(auth) {\n        switch (this.signInMethod) {\n            case \"password\" /* SignInMethod.EMAIL_PASSWORD */:\n                const request = {\n                    returnSecureToken: true,\n                    email: this._email,\n                    password: this._password,\n                    clientType: \"CLIENT_TYPE_WEB\" /* RecaptchaClientType.WEB */\n                };\n                return handleRecaptchaFlow(auth, request, \"signInWithPassword\" /* RecaptchaActionName.SIGN_IN_WITH_PASSWORD */, signInWithPassword, \"EMAIL_PASSWORD_PROVIDER\" /* RecaptchaAuthProvider.EMAIL_PASSWORD_PROVIDER */);\n            case \"emailLink\" /* SignInMethod.EMAIL_LINK */:\n                return signInWithEmailLink$1(auth, {\n                    email: this._email,\n                    oobCode: this._password\n                });\n            default:\n                _fail(auth, \"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */);\n        }\n    }\n    /** @internal */\n    async _linkToIdToken(auth, idToken) {\n        switch (this.signInMethod) {\n            case \"password\" /* SignInMethod.EMAIL_PASSWORD */:\n                const request = {\n                    idToken,\n                    returnSecureToken: true,\n                    email: this._email,\n                    password: this._password,\n                    clientType: \"CLIENT_TYPE_WEB\" /* RecaptchaClientType.WEB */\n                };\n                return handleRecaptchaFlow(auth, request, \"signUpPassword\" /* RecaptchaActionName.SIGN_UP_PASSWORD */, linkEmailPassword, \"EMAIL_PASSWORD_PROVIDER\" /* RecaptchaAuthProvider.EMAIL_PASSWORD_PROVIDER */);\n            case \"emailLink\" /* SignInMethod.EMAIL_LINK */:\n                return signInWithEmailLinkForLinking(auth, {\n                    idToken,\n                    email: this._email,\n                    oobCode: this._password\n                });\n            default:\n                _fail(auth, \"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */);\n        }\n    }\n    /** @internal */\n    _getReauthenticationResolver(auth) {\n        return this._getIdTokenResponse(auth);\n    }\n}\n\n/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nasync function signInWithIdp(auth, request) {\n    return _performSignInRequest(auth, \"POST\" /* HttpMethod.POST */, \"/v1/accounts:signInWithIdp\" /* Endpoint.SIGN_IN_WITH_IDP */, _addTidIfNecessary(auth, request));\n}\n\n/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nconst IDP_REQUEST_URI$1 = 'http://localhost';\n/**\n * Represents the OAuth credentials returned by an {@link OAuthProvider}.\n *\n * @remarks\n * Implementations specify the details about each auth provider's credential requirements.\n *\n * @public\n */\nclass OAuthCredential extends AuthCredential {\n    constructor() {\n        super(...arguments);\n        this.pendingToken = null;\n    }\n    /** @internal */\n    static _fromParams(params) {\n        const cred = new OAuthCredential(params.providerId, params.signInMethod);\n        if (params.idToken || params.accessToken) {\n            // OAuth 2 and either ID token or access token.\n            if (params.idToken) {\n                cred.idToken = params.idToken;\n            }\n            if (params.accessToken) {\n                cred.accessToken = params.accessToken;\n            }\n            // Add nonce if available and no pendingToken is present.\n            if (params.nonce && !params.pendingToken) {\n                cred.nonce = params.nonce;\n            }\n            if (params.pendingToken) {\n                cred.pendingToken = params.pendingToken;\n            }\n        }\n        else if (params.oauthToken && params.oauthTokenSecret) {\n            // OAuth 1 and OAuth token with token secret\n            cred.accessToken = params.oauthToken;\n            cred.secret = params.oauthTokenSecret;\n        }\n        else {\n            _fail(\"argument-error\" /* AuthErrorCode.ARGUMENT_ERROR */);\n        }\n        return cred;\n    }\n    /** {@inheritdoc AuthCredential.toJSON}  */\n    toJSON() {\n        return {\n            idToken: this.idToken,\n            accessToken: this.accessToken,\n            secret: this.secret,\n            nonce: this.nonce,\n            pendingToken: this.pendingToken,\n            providerId: this.providerId,\n            signInMethod: this.signInMethod\n        };\n    }\n    /**\n     * Static method to deserialize a JSON representation of an object into an\n     * {@link  AuthCredential}.\n     *\n     * @param json - Input can be either Object or the stringified representation of the object.\n     * When string is provided, JSON.parse would be called first.\n     *\n     * @returns If the JSON input does not represent an {@link  AuthCredential}, null is returned.\n     */\n    static fromJSON(json) {\n        const obj = typeof json === 'string' ? JSON.parse(json) : json;\n        const { providerId, signInMethod } = obj, rest = __rest(obj, [\"providerId\", \"signInMethod\"]);\n        if (!providerId || !signInMethod) {\n            return null;\n        }\n        const cred = new OAuthCredential(providerId, signInMethod);\n        cred.idToken = rest.idToken || undefined;\n        cred.accessToken = rest.accessToken || undefined;\n        cred.secret = rest.secret;\n        cred.nonce = rest.nonce;\n        cred.pendingToken = rest.pendingToken || null;\n        return cred;\n    }\n    /** @internal */\n    _getIdTokenResponse(auth) {\n        const request = this.buildRequest();\n        return signInWithIdp(auth, request);\n    }\n    /** @internal */\n    _linkToIdToken(auth, idToken) {\n        const request = this.buildRequest();\n        request.idToken = idToken;\n        return signInWithIdp(auth, request);\n    }\n    /** @internal */\n    _getReauthenticationResolver(auth) {\n        const request = this.buildRequest();\n        request.autoCreate = false;\n        return signInWithIdp(auth, request);\n    }\n    buildRequest() {\n        const request = {\n            requestUri: IDP_REQUEST_URI$1,\n            returnSecureToken: true\n        };\n        if (this.pendingToken) {\n            request.pendingToken = this.pendingToken;\n        }\n        else {\n            const postBody = {};\n            if (this.idToken) {\n                postBody['id_token'] = this.idToken;\n            }\n            if (this.accessToken) {\n                postBody['access_token'] = this.accessToken;\n            }\n            if (this.secret) {\n                postBody['oauth_token_secret'] = this.secret;\n            }\n            postBody['providerId'] = this.providerId;\n            if (this.nonce && !this.pendingToken) {\n                postBody['nonce'] = this.nonce;\n            }\n            request.postBody = querystring(postBody);\n        }\n        return request;\n    }\n}\n\n/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nasync function sendPhoneVerificationCode(auth, request) {\n    return _performApiRequest(auth, \"POST\" /* HttpMethod.POST */, \"/v1/accounts:sendVerificationCode\" /* Endpoint.SEND_VERIFICATION_CODE */, _addTidIfNecessary(auth, request));\n}\nasync function signInWithPhoneNumber$1(auth, request) {\n    return _performSignInRequest(auth, \"POST\" /* HttpMethod.POST */, \"/v1/accounts:signInWithPhoneNumber\" /* Endpoint.SIGN_IN_WITH_PHONE_NUMBER */, _addTidIfNecessary(auth, request));\n}\nasync function linkWithPhoneNumber$1(auth, request) {\n    const response = await _performSignInRequest(auth, \"POST\" /* HttpMethod.POST */, \"/v1/accounts:signInWithPhoneNumber\" /* Endpoint.SIGN_IN_WITH_PHONE_NUMBER */, _addTidIfNecessary(auth, request));\n    if (response.temporaryProof) {\n        throw _makeTaggedError(auth, \"account-exists-with-different-credential\" /* AuthErrorCode.NEED_CONFIRMATION */, response);\n    }\n    return response;\n}\nconst VERIFY_PHONE_NUMBER_FOR_EXISTING_ERROR_MAP_ = {\n    [\"USER_NOT_FOUND\" /* ServerError.USER_NOT_FOUND */]: \"user-not-found\" /* AuthErrorCode.USER_DELETED */\n};\nasync function verifyPhoneNumberForExisting(auth, request) {\n    const apiRequest = Object.assign(Object.assign({}, request), { operation: 'REAUTH' });\n    return _performSignInRequest(auth, \"POST\" /* HttpMethod.POST */, \"/v1/accounts:signInWithPhoneNumber\" /* Endpoint.SIGN_IN_WITH_PHONE_NUMBER */, _addTidIfNecessary(auth, apiRequest), VERIFY_PHONE_NUMBER_FOR_EXISTING_ERROR_MAP_);\n}\n\n/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Represents the credentials returned by {@link PhoneAuthProvider}.\n *\n * @public\n */\nclass PhoneAuthCredential extends AuthCredential {\n    constructor(params) {\n        super(\"phone\" /* ProviderId.PHONE */, \"phone\" /* SignInMethod.PHONE */);\n        this.params = params;\n    }\n    /** @internal */\n    static _fromVerification(verificationId, verificationCode) {\n        return new PhoneAuthCredential({ verificationId, verificationCode });\n    }\n    /** @internal */\n    static _fromTokenResponse(phoneNumber, temporaryProof) {\n        return new PhoneAuthCredential({ phoneNumber, temporaryProof });\n    }\n    /** @internal */\n    _getIdTokenResponse(auth) {\n        return signInWithPhoneNumber$1(auth, this._makeVerificationRequest());\n    }\n    /** @internal */\n    _linkToIdToken(auth, idToken) {\n        return linkWithPhoneNumber$1(auth, Object.assign({ idToken }, this._makeVerificationRequest()));\n    }\n    /** @internal */\n    _getReauthenticationResolver(auth) {\n        return verifyPhoneNumberForExisting(auth, this._makeVerificationRequest());\n    }\n    /** @internal */\n    _makeVerificationRequest() {\n        const { temporaryProof, phoneNumber, verificationId, verificationCode } = this.params;\n        if (temporaryProof && phoneNumber) {\n            return { temporaryProof, phoneNumber };\n        }\n        return {\n            sessionInfo: verificationId,\n            code: verificationCode\n        };\n    }\n    /** {@inheritdoc AuthCredential.toJSON} */\n    toJSON() {\n        const obj = {\n            providerId: this.providerId\n        };\n        if (this.params.phoneNumber) {\n            obj.phoneNumber = this.params.phoneNumber;\n        }\n        if (this.params.temporaryProof) {\n            obj.temporaryProof = this.params.temporaryProof;\n        }\n        if (this.params.verificationCode) {\n            obj.verificationCode = this.params.verificationCode;\n        }\n        if (this.params.verificationId) {\n            obj.verificationId = this.params.verificationId;\n        }\n        return obj;\n    }\n    /** Generates a phone credential based on a plain object or a JSON string. */\n    static fromJSON(json) {\n        if (typeof json === 'string') {\n            json = JSON.parse(json);\n        }\n        const { verificationId, verificationCode, phoneNumber, temporaryProof } = json;\n        if (!verificationCode &&\n            !verificationId &&\n            !phoneNumber &&\n            !temporaryProof) {\n            return null;\n        }\n        return new PhoneAuthCredential({\n            verificationId,\n            verificationCode,\n            phoneNumber,\n            temporaryProof\n        });\n    }\n}\n\n/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Maps the mode string in action code URL to Action Code Info operation.\n *\n * @param mode\n */\nfunction parseMode(mode) {\n    switch (mode) {\n        case 'recoverEmail':\n            return \"RECOVER_EMAIL\" /* ActionCodeOperation.RECOVER_EMAIL */;\n        case 'resetPassword':\n            return \"PASSWORD_RESET\" /* ActionCodeOperation.PASSWORD_RESET */;\n        case 'signIn':\n            return \"EMAIL_SIGNIN\" /* ActionCodeOperation.EMAIL_SIGNIN */;\n        case 'verifyEmail':\n            return \"VERIFY_EMAIL\" /* ActionCodeOperation.VERIFY_EMAIL */;\n        case 'verifyAndChangeEmail':\n            return \"VERIFY_AND_CHANGE_EMAIL\" /* ActionCodeOperation.VERIFY_AND_CHANGE_EMAIL */;\n        case 'revertSecondFactorAddition':\n            return \"REVERT_SECOND_FACTOR_ADDITION\" /* ActionCodeOperation.REVERT_SECOND_FACTOR_ADDITION */;\n        default:\n            return null;\n    }\n}\n/**\n * Helper to parse FDL links\n *\n * @param url\n */\nfunction parseDeepLink(url) {\n    const link = querystringDecode(extractQuerystring(url))['link'];\n    // Double link case (automatic redirect).\n    const doubleDeepLink = link\n        ? querystringDecode(extractQuerystring(link))['deep_link_id']\n        : null;\n    // iOS custom scheme links.\n    const iOSDeepLink = querystringDecode(extractQuerystring(url))['deep_link_id'];\n    const iOSDoubleDeepLink = iOSDeepLink\n        ? querystringDecode(extractQuerystring(iOSDeepLink))['link']\n        : null;\n    return iOSDoubleDeepLink || iOSDeepLink || doubleDeepLink || link || url;\n}\n/**\n * A utility class to parse email action URLs such as password reset, email verification,\n * email link sign in, etc.\n *\n * @public\n */\nclass ActionCodeURL {\n    /**\n     * @param actionLink - The link from which to extract the URL.\n     * @returns The {@link ActionCodeURL} object, or null if the link is invalid.\n     *\n     * @internal\n     */\n    constructor(actionLink) {\n        var _a, _b, _c, _d, _e, _f;\n        const searchParams = querystringDecode(extractQuerystring(actionLink));\n        const apiKey = (_a = searchParams[\"apiKey\" /* QueryField.API_KEY */]) !== null && _a !== void 0 ? _a : null;\n        const code = (_b = searchParams[\"oobCode\" /* QueryField.CODE */]) !== null && _b !== void 0 ? _b : null;\n        const operation = parseMode((_c = searchParams[\"mode\" /* QueryField.MODE */]) !== null && _c !== void 0 ? _c : null);\n        // Validate API key, code and mode.\n        _assert(apiKey && code && operation, \"argument-error\" /* AuthErrorCode.ARGUMENT_ERROR */);\n        this.apiKey = apiKey;\n        this.operation = operation;\n        this.code = code;\n        this.continueUrl = (_d = searchParams[\"continueUrl\" /* QueryField.CONTINUE_URL */]) !== null && _d !== void 0 ? _d : null;\n        this.languageCode = (_e = searchParams[\"languageCode\" /* QueryField.LANGUAGE_CODE */]) !== null && _e !== void 0 ? _e : null;\n        this.tenantId = (_f = searchParams[\"tenantId\" /* QueryField.TENANT_ID */]) !== null && _f !== void 0 ? _f : null;\n    }\n    /**\n     * Parses the email action link string and returns an {@link ActionCodeURL} if the link is valid,\n     * otherwise returns null.\n     *\n     * @param link  - The email action link string.\n     * @returns The {@link ActionCodeURL} object, or null if the link is invalid.\n     *\n     * @public\n     */\n    static parseLink(link) {\n        const actionLink = parseDeepLink(link);\n        try {\n            return new ActionCodeURL(actionLink);\n        }\n        catch (_a) {\n            return null;\n        }\n    }\n}\n/**\n * Parses the email action link string and returns an {@link ActionCodeURL} if\n * the link is valid, otherwise returns null.\n *\n * @public\n */\nfunction parseActionCodeURL(link) {\n    return ActionCodeURL.parseLink(link);\n}\n\n/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Provider for generating {@link EmailAuthCredential}.\n *\n * @public\n */\nclass EmailAuthProvider {\n    constructor() {\n        /**\n         * Always set to {@link ProviderId}.PASSWORD, even for email link.\n         */\n        this.providerId = EmailAuthProvider.PROVIDER_ID;\n    }\n    /**\n     * Initialize an {@link AuthCredential} using an email and password.\n     *\n     * @example\n     * ```javascript\n     * const authCredential = EmailAuthProvider.credential(email, password);\n     * const userCredential = await signInWithCredential(auth, authCredential);\n     * ```\n     *\n     * @example\n     * ```javascript\n     * const userCredential = await signInWithEmailAndPassword(auth, email, password);\n     * ```\n     *\n     * @param email - Email address.\n     * @param password - User account password.\n     * @returns The auth provider credential.\n     */\n    static credential(email, password) {\n        return EmailAuthCredential._fromEmailAndPassword(email, password);\n    }\n    /**\n     * Initialize an {@link AuthCredential} using an email and an email link after a sign in with\n     * email link operation.\n     *\n     * @example\n     * ```javascript\n     * const authCredential = EmailAuthProvider.credentialWithLink(auth, email, emailLink);\n     * const userCredential = await signInWithCredential(auth, authCredential);\n     * ```\n     *\n     * @example\n     * ```javascript\n     * await sendSignInLinkToEmail(auth, email);\n     * // Obtain emailLink from user.\n     * const userCredential = await signInWithEmailLink(auth, email, emailLink);\n     * ```\n     *\n     * @param auth - The {@link Auth} instance used to verify the link.\n     * @param email - Email address.\n     * @param emailLink - Sign-in email link.\n     * @returns - The auth provider credential.\n     */\n    static credentialWithLink(email, emailLink) {\n        const actionCodeUrl = ActionCodeURL.parseLink(emailLink);\n        _assert(actionCodeUrl, \"argument-error\" /* AuthErrorCode.ARGUMENT_ERROR */);\n        return EmailAuthCredential._fromEmailAndCode(email, actionCodeUrl.code, actionCodeUrl.tenantId);\n    }\n}\n/**\n * Always set to {@link ProviderId}.PASSWORD, even for email link.\n */\nEmailAuthProvider.PROVIDER_ID = \"password\" /* ProviderId.PASSWORD */;\n/**\n * Always set to {@link SignInMethod}.EMAIL_PASSWORD.\n */\nEmailAuthProvider.EMAIL_PASSWORD_SIGN_IN_METHOD = \"password\" /* SignInMethod.EMAIL_PASSWORD */;\n/**\n * Always set to {@link SignInMethod}.EMAIL_LINK.\n */\nEmailAuthProvider.EMAIL_LINK_SIGN_IN_METHOD = \"emailLink\" /* SignInMethod.EMAIL_LINK */;\n\n/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * The base class for all Federated providers (OAuth (including OIDC), SAML).\n *\n * This class is not meant to be instantiated directly.\n *\n * @public\n */\nclass FederatedAuthProvider {\n    /**\n     * Constructor for generic OAuth providers.\n     *\n     * @param providerId - Provider for which credentials should be generated.\n     */\n    constructor(providerId) {\n        this.providerId = providerId;\n        /** @internal */\n        this.defaultLanguageCode = null;\n        /** @internal */\n        this.customParameters = {};\n    }\n    /**\n     * Set the language gode.\n     *\n     * @param languageCode - language code\n     */\n    setDefaultLanguage(languageCode) {\n        this.defaultLanguageCode = languageCode;\n    }\n    /**\n     * Sets the OAuth custom parameters to pass in an OAuth request for popup and redirect sign-in\n     * operations.\n     *\n     * @remarks\n     * For a detailed list, check the reserved required OAuth 2.0 parameters such as `client_id`,\n     * `redirect_uri`, `scope`, `response_type`, and `state` are not allowed and will be ignored.\n     *\n     * @param customOAuthParameters - The custom OAuth parameters to pass in the OAuth request.\n     */\n    setCustomParameters(customOAuthParameters) {\n        this.customParameters = customOAuthParameters;\n        return this;\n    }\n    /**\n     * Retrieve the current list of {@link CustomParameters}.\n     */\n    getCustomParameters() {\n        return this.customParameters;\n    }\n}\n\n/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Common code to all OAuth providers. This is separate from the\n * {@link OAuthProvider} so that child providers (like\n * {@link GoogleAuthProvider}) don't inherit the `credential` instance method.\n * Instead, they rely on a static `credential` method.\n */\nclass BaseOAuthProvider extends FederatedAuthProvider {\n    constructor() {\n        super(...arguments);\n        /** @internal */\n        this.scopes = [];\n    }\n    /**\n     * Add an OAuth scope to the credential.\n     *\n     * @param scope - Provider OAuth scope to add.\n     */\n    addScope(scope) {\n        // If not already added, add scope to list.\n        if (!this.scopes.includes(scope)) {\n            this.scopes.push(scope);\n        }\n        return this;\n    }\n    /**\n     * Retrieve the current list of OAuth scopes.\n     */\n    getScopes() {\n        return [...this.scopes];\n    }\n}\n/**\n * Provider for generating generic {@link OAuthCredential}.\n *\n * @example\n * ```javascript\n * // Sign in using a redirect.\n * const provider = new OAuthProvider('google.com');\n * // Start a sign in process for an unauthenticated user.\n * provider.addScope('profile');\n * provider.addScope('email');\n * await signInWithRedirect(auth, provider);\n * // This will trigger a full page redirect away from your app\n *\n * // After returning from the redirect when your app initializes you can obtain the result\n * const result = await getRedirectResult(auth);\n * if (result) {\n *   // This is the signed-in user\n *   const user = result.user;\n *   // This gives you a OAuth Access Token for the provider.\n *   const credential = provider.credentialFromResult(auth, result);\n *   const token = credential.accessToken;\n * }\n * ```\n *\n * @example\n * ```javascript\n * // Sign in using a popup.\n * const provider = new OAuthProvider('google.com');\n * provider.addScope('profile');\n * provider.addScope('email');\n * const result = await signInWithPopup(auth, provider);\n *\n * // The signed-in user info.\n * const user = result.user;\n * // This gives you a OAuth Access Token for the provider.\n * const credential = provider.credentialFromResult(auth, result);\n * const token = credential.accessToken;\n * ```\n * @public\n */\nclass OAuthProvider extends BaseOAuthProvider {\n    /**\n     * Creates an {@link OAuthCredential} from a JSON string or a plain object.\n     * @param json - A plain object or a JSON string\n     */\n    static credentialFromJSON(json) {\n        const obj = typeof json === 'string' ? JSON.parse(json) : json;\n        _assert('providerId' in obj && 'signInMethod' in obj, \"argument-error\" /* AuthErrorCode.ARGUMENT_ERROR */);\n        return OAuthCredential._fromParams(obj);\n    }\n    /**\n     * Creates a {@link OAuthCredential} from a generic OAuth provider's access token or ID token.\n     *\n     * @remarks\n     * The raw nonce is required when an ID token with a nonce field is provided. The SHA-256 hash of\n     * the raw nonce must match the nonce field in the ID token.\n     *\n     * @example\n     * ```javascript\n     * // `googleUser` from the onsuccess Google Sign In callback.\n     * // Initialize a generate OAuth provider with a `google.com` providerId.\n     * const provider = new OAuthProvider('google.com');\n     * const credential = provider.credential({\n     *   idToken: googleUser.getAuthResponse().id_token,\n     * });\n     * const result = await signInWithCredential(credential);\n     * ```\n     *\n     * @param params - Either the options object containing the ID token, access token and raw nonce\n     * or the ID token string.\n     */\n    credential(params) {\n        return this._credential(Object.assign(Object.assign({}, params), { nonce: params.rawNonce }));\n    }\n    /** An internal credential method that accepts more permissive options */\n    _credential(params) {\n        _assert(params.idToken || params.accessToken, \"argument-error\" /* AuthErrorCode.ARGUMENT_ERROR */);\n        // For OAuthCredential, sign in method is same as providerId.\n        return OAuthCredential._fromParams(Object.assign(Object.assign({}, params), { providerId: this.providerId, signInMethod: this.providerId }));\n    }\n    /**\n     * Used to extract the underlying {@link OAuthCredential} from a {@link UserCredential}.\n     *\n     * @param userCredential - The user credential.\n     */\n    static credentialFromResult(userCredential) {\n        return OAuthProvider.oauthCredentialFromTaggedObject(userCredential);\n    }\n    /**\n     * Used to extract the underlying {@link OAuthCredential} from a {@link AuthError} which was\n     * thrown during a sign-in, link, or reauthenticate operation.\n     *\n     * @param userCredential - The user credential.\n     */\n    static credentialFromError(error) {\n        return OAuthProvider.oauthCredentialFromTaggedObject((error.customData || {}));\n    }\n    static oauthCredentialFromTaggedObject({ _tokenResponse: tokenResponse }) {\n        if (!tokenResponse) {\n            return null;\n        }\n        const { oauthIdToken, oauthAccessToken, oauthTokenSecret, pendingToken, nonce, providerId } = tokenResponse;\n        if (!oauthAccessToken &&\n            !oauthTokenSecret &&\n            !oauthIdToken &&\n            !pendingToken) {\n            return null;\n        }\n        if (!providerId) {\n            return null;\n        }\n        try {\n            return new OAuthProvider(providerId)._credential({\n                idToken: oauthIdToken,\n                accessToken: oauthAccessToken,\n                nonce,\n                pendingToken\n            });\n        }\n        catch (e) {\n            return null;\n        }\n    }\n}\n\n/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Provider for generating an {@link OAuthCredential} for {@link ProviderId}.FACEBOOK.\n *\n * @example\n * ```javascript\n * // Sign in using a redirect.\n * const provider = new FacebookAuthProvider();\n * // Start a sign in process for an unauthenticated user.\n * provider.addScope('user_birthday');\n * await signInWithRedirect(auth, provider);\n * // This will trigger a full page redirect away from your app\n *\n * // After returning from the redirect when your app initializes you can obtain the result\n * const result = await getRedirectResult(auth);\n * if (result) {\n *   // This is the signed-in user\n *   const user = result.user;\n *   // This gives you a Facebook Access Token.\n *   const credential = FacebookAuthProvider.credentialFromResult(result);\n *   const token = credential.accessToken;\n * }\n * ```\n *\n * @example\n * ```javascript\n * // Sign in using a popup.\n * const provider = new FacebookAuthProvider();\n * provider.addScope('user_birthday');\n * const result = await signInWithPopup(auth, provider);\n *\n * // The signed-in user info.\n * const user = result.user;\n * // This gives you a Facebook Access Token.\n * const credential = FacebookAuthProvider.credentialFromResult(result);\n * const token = credential.accessToken;\n * ```\n *\n * @public\n */\nclass FacebookAuthProvider extends BaseOAuthProvider {\n    constructor() {\n        super(\"facebook.com\" /* ProviderId.FACEBOOK */);\n    }\n    /**\n     * Creates a credential for Facebook.\n     *\n     * @example\n     * ```javascript\n     * // `event` from the Facebook auth.authResponseChange callback.\n     * const credential = FacebookAuthProvider.credential(event.authResponse.accessToken);\n     * const result = await signInWithCredential(credential);\n     * ```\n     *\n     * @param accessToken - Facebook access token.\n     */\n    static credential(accessToken) {\n        return OAuthCredential._fromParams({\n            providerId: FacebookAuthProvider.PROVIDER_ID,\n            signInMethod: FacebookAuthProvider.FACEBOOK_SIGN_IN_METHOD,\n            accessToken\n        });\n    }\n    /**\n     * Used to extract the underlying {@link OAuthCredential} from a {@link UserCredential}.\n     *\n     * @param userCredential - The user credential.\n     */\n    static credentialFromResult(userCredential) {\n        return FacebookAuthProvider.credentialFromTaggedObject(userCredential);\n    }\n    /**\n     * Used to extract the underlying {@link OAuthCredential} from a {@link AuthError} which was\n     * thrown during a sign-in, link, or reauthenticate operation.\n     *\n     * @param userCredential - The user credential.\n     */\n    static credentialFromError(error) {\n        return FacebookAuthProvider.credentialFromTaggedObject((error.customData || {}));\n    }\n    static credentialFromTaggedObject({ _tokenResponse: tokenResponse }) {\n        if (!tokenResponse || !('oauthAccessToken' in tokenResponse)) {\n            return null;\n        }\n        if (!tokenResponse.oauthAccessToken) {\n            return null;\n        }\n        try {\n            return FacebookAuthProvider.credential(tokenResponse.oauthAccessToken);\n        }\n        catch (_a) {\n            return null;\n        }\n    }\n}\n/** Always set to {@link SignInMethod}.FACEBOOK. */\nFacebookAuthProvider.FACEBOOK_SIGN_IN_METHOD = \"facebook.com\" /* SignInMethod.FACEBOOK */;\n/** Always set to {@link ProviderId}.FACEBOOK. */\nFacebookAuthProvider.PROVIDER_ID = \"facebook.com\" /* ProviderId.FACEBOOK */;\n\n/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Provider for generating an {@link OAuthCredential} for {@link ProviderId}.GOOGLE.\n *\n * @example\n * ```javascript\n * // Sign in using a redirect.\n * const provider = new GoogleAuthProvider();\n * // Start a sign in process for an unauthenticated user.\n * provider.addScope('profile');\n * provider.addScope('email');\n * await signInWithRedirect(auth, provider);\n * // This will trigger a full page redirect away from your app\n *\n * // After returning from the redirect when your app initializes you can obtain the result\n * const result = await getRedirectResult(auth);\n * if (result) {\n *   // This is the signed-in user\n *   const user = result.user;\n *   // This gives you a Google Access Token.\n *   const credential = GoogleAuthProvider.credentialFromResult(result);\n *   const token = credential.accessToken;\n * }\n * ```\n *\n * @example\n * ```javascript\n * // Sign in using a popup.\n * const provider = new GoogleAuthProvider();\n * provider.addScope('profile');\n * provider.addScope('email');\n * const result = await signInWithPopup(auth, provider);\n *\n * // The signed-in user info.\n * const user = result.user;\n * // This gives you a Google Access Token.\n * const credential = GoogleAuthProvider.credentialFromResult(result);\n * const token = credential.accessToken;\n * ```\n *\n * @public\n */\nclass GoogleAuthProvider extends BaseOAuthProvider {\n    constructor() {\n        super(\"google.com\" /* ProviderId.GOOGLE */);\n        this.addScope('profile');\n    }\n    /**\n     * Creates a credential for Google. At least one of ID token and access token is required.\n     *\n     * @example\n     * ```javascript\n     * // \\`googleUser\\` from the onsuccess Google Sign In callback.\n     * const credential = GoogleAuthProvider.credential(googleUser.getAuthResponse().id_token);\n     * const result = await signInWithCredential(credential);\n     * ```\n     *\n     * @param idToken - Google ID token.\n     * @param accessToken - Google access token.\n     */\n    static credential(idToken, accessToken) {\n        return OAuthCredential._fromParams({\n            providerId: GoogleAuthProvider.PROVIDER_ID,\n            signInMethod: GoogleAuthProvider.GOOGLE_SIGN_IN_METHOD,\n            idToken,\n            accessToken\n        });\n    }\n    /**\n     * Used to extract the underlying {@link OAuthCredential} from a {@link UserCredential}.\n     *\n     * @param userCredential - The user credential.\n     */\n    static credentialFromResult(userCredential) {\n        return GoogleAuthProvider.credentialFromTaggedObject(userCredential);\n    }\n    /**\n     * Used to extract the underlying {@link OAuthCredential} from a {@link AuthError} which was\n     * thrown during a sign-in, link, or reauthenticate operation.\n     *\n     * @param userCredential - The user credential.\n     */\n    static credentialFromError(error) {\n        return GoogleAuthProvider.credentialFromTaggedObject((error.customData || {}));\n    }\n    static credentialFromTaggedObject({ _tokenResponse: tokenResponse }) {\n        if (!tokenResponse) {\n            return null;\n        }\n        const { oauthIdToken, oauthAccessToken } = tokenResponse;\n        if (!oauthIdToken && !oauthAccessToken) {\n            // This could be an oauth 1 credential or a phone credential\n            return null;\n        }\n        try {\n            return GoogleAuthProvider.credential(oauthIdToken, oauthAccessToken);\n        }\n        catch (_a) {\n            return null;\n        }\n    }\n}\n/** Always set to {@link SignInMethod}.GOOGLE. */\nGoogleAuthProvider.GOOGLE_SIGN_IN_METHOD = \"google.com\" /* SignInMethod.GOOGLE */;\n/** Always set to {@link ProviderId}.GOOGLE. */\nGoogleAuthProvider.PROVIDER_ID = \"google.com\" /* ProviderId.GOOGLE */;\n\n/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Provider for generating an {@link OAuthCredential} for {@link ProviderId}.GITHUB.\n *\n * @remarks\n * GitHub requires an OAuth 2.0 redirect, so you can either handle the redirect directly, or use\n * the {@link signInWithPopup} handler:\n *\n * @example\n * ```javascript\n * // Sign in using a redirect.\n * const provider = new GithubAuthProvider();\n * // Start a sign in process for an unauthenticated user.\n * provider.addScope('repo');\n * await signInWithRedirect(auth, provider);\n * // This will trigger a full page redirect away from your app\n *\n * // After returning from the redirect when your app initializes you can obtain the result\n * const result = await getRedirectResult(auth);\n * if (result) {\n *   // This is the signed-in user\n *   const user = result.user;\n *   // This gives you a GitHub Access Token.\n *   const credential = GithubAuthProvider.credentialFromResult(result);\n *   const token = credential.accessToken;\n * }\n * ```\n *\n * @example\n * ```javascript\n * // Sign in using a popup.\n * const provider = new GithubAuthProvider();\n * provider.addScope('repo');\n * const result = await signInWithPopup(auth, provider);\n *\n * // The signed-in user info.\n * const user = result.user;\n * // This gives you a GitHub Access Token.\n * const credential = GithubAuthProvider.credentialFromResult(result);\n * const token = credential.accessToken;\n * ```\n * @public\n */\nclass GithubAuthProvider extends BaseOAuthProvider {\n    constructor() {\n        super(\"github.com\" /* ProviderId.GITHUB */);\n    }\n    /**\n     * Creates a credential for GitHub.\n     *\n     * @param accessToken - GitHub access token.\n     */\n    static credential(accessToken) {\n        return OAuthCredential._fromParams({\n            providerId: GithubAuthProvider.PROVIDER_ID,\n            signInMethod: GithubAuthProvider.GITHUB_SIGN_IN_METHOD,\n            accessToken\n        });\n    }\n    /**\n     * Used to extract the underlying {@link OAuthCredential} from a {@link UserCredential}.\n     *\n     * @param userCredential - The user credential.\n     */\n    static credentialFromResult(userCredential) {\n        return GithubAuthProvider.credentialFromTaggedObject(userCredential);\n    }\n    /**\n     * Used to extract the underlying {@link OAuthCredential} from a {@link AuthError} which was\n     * thrown during a sign-in, link, or reauthenticate operation.\n     *\n     * @param userCredential - The user credential.\n     */\n    static credentialFromError(error) {\n        return GithubAuthProvider.credentialFromTaggedObject((error.customData || {}));\n    }\n    static credentialFromTaggedObject({ _tokenResponse: tokenResponse }) {\n        if (!tokenResponse || !('oauthAccessToken' in tokenResponse)) {\n            return null;\n        }\n        if (!tokenResponse.oauthAccessToken) {\n            return null;\n        }\n        try {\n            return GithubAuthProvider.credential(tokenResponse.oauthAccessToken);\n        }\n        catch (_a) {\n            return null;\n        }\n    }\n}\n/** Always set to {@link SignInMethod}.GITHUB. */\nGithubAuthProvider.GITHUB_SIGN_IN_METHOD = \"github.com\" /* SignInMethod.GITHUB */;\n/** Always set to {@link ProviderId}.GITHUB. */\nGithubAuthProvider.PROVIDER_ID = \"github.com\" /* ProviderId.GITHUB */;\n\n/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nconst IDP_REQUEST_URI = 'http://localhost';\n/**\n * @public\n */\nclass SAMLAuthCredential extends AuthCredential {\n    /** @internal */\n    constructor(providerId, pendingToken) {\n        super(providerId, providerId);\n        this.pendingToken = pendingToken;\n    }\n    /** @internal */\n    _getIdTokenResponse(auth) {\n        const request = this.buildRequest();\n        return signInWithIdp(auth, request);\n    }\n    /** @internal */\n    _linkToIdToken(auth, idToken) {\n        const request = this.buildRequest();\n        request.idToken = idToken;\n        return signInWithIdp(auth, request);\n    }\n    /** @internal */\n    _getReauthenticationResolver(auth) {\n        const request = this.buildRequest();\n        request.autoCreate = false;\n        return signInWithIdp(auth, request);\n    }\n    /** {@inheritdoc AuthCredential.toJSON}  */\n    toJSON() {\n        return {\n            signInMethod: this.signInMethod,\n            providerId: this.providerId,\n            pendingToken: this.pendingToken\n        };\n    }\n    /**\n     * Static method to deserialize a JSON representation of an object into an\n     * {@link  AuthCredential}.\n     *\n     * @param json - Input can be either Object or the stringified representation of the object.\n     * When string is provided, JSON.parse would be called first.\n     *\n     * @returns If the JSON input does not represent an {@link  AuthCredential}, null is returned.\n     */\n    static fromJSON(json) {\n        const obj = typeof json === 'string' ? JSON.parse(json) : json;\n        const { providerId, signInMethod, pendingToken } = obj;\n        if (!providerId ||\n            !signInMethod ||\n            !pendingToken ||\n            providerId !== signInMethod) {\n            return null;\n        }\n        return new SAMLAuthCredential(providerId, pendingToken);\n    }\n    /**\n     * Helper static method to avoid exposing the constructor to end users.\n     *\n     * @internal\n     */\n    static _create(providerId, pendingToken) {\n        return new SAMLAuthCredential(providerId, pendingToken);\n    }\n    buildRequest() {\n        return {\n            requestUri: IDP_REQUEST_URI,\n            returnSecureToken: true,\n            pendingToken: this.pendingToken\n        };\n    }\n}\n\n/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nconst SAML_PROVIDER_PREFIX = 'saml.';\n/**\n * An {@link AuthProvider} for SAML.\n *\n * @public\n */\nclass SAMLAuthProvider extends FederatedAuthProvider {\n    /**\n     * Constructor. The providerId must start with \"saml.\"\n     * @param providerId - SAML provider ID.\n     */\n    constructor(providerId) {\n        _assert(providerId.startsWith(SAML_PROVIDER_PREFIX), \"argument-error\" /* AuthErrorCode.ARGUMENT_ERROR */);\n        super(providerId);\n    }\n    /**\n     * Generates an {@link AuthCredential} from a {@link UserCredential} after a\n     * successful SAML flow completes.\n     *\n     * @remarks\n     *\n     * For example, to get an {@link AuthCredential}, you could write the\n     * following code:\n     *\n     * ```js\n     * const userCredential = await signInWithPopup(auth, samlProvider);\n     * const credential = SAMLAuthProvider.credentialFromResult(userCredential);\n     * ```\n     *\n     * @param userCredential - The user credential.\n     */\n    static credentialFromResult(userCredential) {\n        return SAMLAuthProvider.samlCredentialFromTaggedObject(userCredential);\n    }\n    /**\n     * Used to extract the underlying {@link OAuthCredential} from a {@link AuthError} which was\n     * thrown during a sign-in, link, or reauthenticate operation.\n     *\n     * @param userCredential - The user credential.\n     */\n    static credentialFromError(error) {\n        return SAMLAuthProvider.samlCredentialFromTaggedObject((error.customData || {}));\n    }\n    /**\n     * Creates an {@link AuthCredential} from a JSON string or a plain object.\n     * @param json - A plain object or a JSON string\n     */\n    static credentialFromJSON(json) {\n        const credential = SAMLAuthCredential.fromJSON(json);\n        _assert(credential, \"argument-error\" /* AuthErrorCode.ARGUMENT_ERROR */);\n        return credential;\n    }\n    static samlCredentialFromTaggedObject({ _tokenResponse: tokenResponse }) {\n        if (!tokenResponse) {\n            return null;\n        }\n        const { pendingToken, providerId } = tokenResponse;\n        if (!pendingToken || !providerId) {\n            return null;\n        }\n        try {\n            return SAMLAuthCredential._create(providerId, pendingToken);\n        }\n        catch (e) {\n            return null;\n        }\n    }\n}\n\n/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Provider for generating an {@link OAuthCredential} for {@link ProviderId}.TWITTER.\n *\n * @example\n * ```javascript\n * // Sign in using a redirect.\n * const provider = new TwitterAuthProvider();\n * // Start a sign in process for an unauthenticated user.\n * await signInWithRedirect(auth, provider);\n * // This will trigger a full page redirect away from your app\n *\n * // After returning from the redirect when your app initializes you can obtain the result\n * const result = await getRedirectResult(auth);\n * if (result) {\n *   // This is the signed-in user\n *   const user = result.user;\n *   // This gives you a Twitter Access Token and Secret.\n *   const credential = TwitterAuthProvider.credentialFromResult(result);\n *   const token = credential.accessToken;\n *   const secret = credential.secret;\n * }\n * ```\n *\n * @example\n * ```javascript\n * // Sign in using a popup.\n * const provider = new TwitterAuthProvider();\n * const result = await signInWithPopup(auth, provider);\n *\n * // The signed-in user info.\n * const user = result.user;\n * // This gives you a Twitter Access Token and Secret.\n * const credential = TwitterAuthProvider.credentialFromResult(result);\n * const token = credential.accessToken;\n * const secret = credential.secret;\n * ```\n *\n * @public\n */\nclass TwitterAuthProvider extends BaseOAuthProvider {\n    constructor() {\n        super(\"twitter.com\" /* ProviderId.TWITTER */);\n    }\n    /**\n     * Creates a credential for Twitter.\n     *\n     * @param token - Twitter access token.\n     * @param secret - Twitter secret.\n     */\n    static credential(token, secret) {\n        return OAuthCredential._fromParams({\n            providerId: TwitterAuthProvider.PROVIDER_ID,\n            signInMethod: TwitterAuthProvider.TWITTER_SIGN_IN_METHOD,\n            oauthToken: token,\n            oauthTokenSecret: secret\n        });\n    }\n    /**\n     * Used to extract the underlying {@link OAuthCredential} from a {@link UserCredential}.\n     *\n     * @param userCredential - The user credential.\n     */\n    static credentialFromResult(userCredential) {\n        return TwitterAuthProvider.credentialFromTaggedObject(userCredential);\n    }\n    /**\n     * Used to extract the underlying {@link OAuthCredential} from a {@link AuthError} which was\n     * thrown during a sign-in, link, or reauthenticate operation.\n     *\n     * @param userCredential - The user credential.\n     */\n    static credentialFromError(error) {\n        return TwitterAuthProvider.credentialFromTaggedObject((error.customData || {}));\n    }\n    static credentialFromTaggedObject({ _tokenResponse: tokenResponse }) {\n        if (!tokenResponse) {\n            return null;\n        }\n        const { oauthAccessToken, oauthTokenSecret } = tokenResponse;\n        if (!oauthAccessToken || !oauthTokenSecret) {\n            return null;\n        }\n        try {\n            return TwitterAuthProvider.credential(oauthAccessToken, oauthTokenSecret);\n        }\n        catch (_a) {\n            return null;\n        }\n    }\n}\n/** Always set to {@link SignInMethod}.TWITTER. */\nTwitterAuthProvider.TWITTER_SIGN_IN_METHOD = \"twitter.com\" /* SignInMethod.TWITTER */;\n/** Always set to {@link ProviderId}.TWITTER. */\nTwitterAuthProvider.PROVIDER_ID = \"twitter.com\" /* ProviderId.TWITTER */;\n\n/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nasync function signUp(auth, request) {\n    return _performSignInRequest(auth, \"POST\" /* HttpMethod.POST */, \"/v1/accounts:signUp\" /* Endpoint.SIGN_UP */, _addTidIfNecessary(auth, request));\n}\n\n/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nclass UserCredentialImpl {\n    constructor(params) {\n        this.user = params.user;\n        this.providerId = params.providerId;\n        this._tokenResponse = params._tokenResponse;\n        this.operationType = params.operationType;\n    }\n    static async _fromIdTokenResponse(auth, operationType, idTokenResponse, isAnonymous = false) {\n        const user = await UserImpl._fromIdTokenResponse(auth, idTokenResponse, isAnonymous);\n        const providerId = providerIdForResponse(idTokenResponse);\n        const userCred = new UserCredentialImpl({\n            user,\n            providerId,\n            _tokenResponse: idTokenResponse,\n            operationType\n        });\n        return userCred;\n    }\n    static async _forOperation(user, operationType, response) {\n        await user._updateTokensIfNecessary(response, /* reload */ true);\n        const providerId = providerIdForResponse(response);\n        return new UserCredentialImpl({\n            user,\n            providerId,\n            _tokenResponse: response,\n            operationType\n        });\n    }\n}\nfunction providerIdForResponse(response) {\n    if (response.providerId) {\n        return response.providerId;\n    }\n    if ('phoneNumber' in response) {\n        return \"phone\" /* ProviderId.PHONE */;\n    }\n    return null;\n}\n\n/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Asynchronously signs in as an anonymous user.\n *\n * @remarks\n * If there is already an anonymous user signed in, that user will be returned; otherwise, a\n * new anonymous user identity will be created and returned.\n *\n * This method is not supported by {@link Auth} instances created with a\n * {@link @firebase/app#FirebaseServerApp}.\n *\n * @param auth - The {@link Auth} instance.\n *\n * @public\n */\nasync function signInAnonymously(auth) {\n    var _a;\n    if (_isFirebaseServerApp(auth.app)) {\n        return Promise.reject(_serverAppCurrentUserOperationNotSupportedError(auth));\n    }\n    const authInternal = _castAuth(auth);\n    await authInternal._initializationPromise;\n    if ((_a = authInternal.currentUser) === null || _a === void 0 ? void 0 : _a.isAnonymous) {\n        // If an anonymous user is already signed in, no need to sign them in again.\n        return new UserCredentialImpl({\n            user: authInternal.currentUser,\n            providerId: null,\n            operationType: \"signIn\" /* OperationType.SIGN_IN */\n        });\n    }\n    const response = await signUp(authInternal, {\n        returnSecureToken: true\n    });\n    const userCredential = await UserCredentialImpl._fromIdTokenResponse(authInternal, \"signIn\" /* OperationType.SIGN_IN */, response, true);\n    await authInternal._updateCurrentUser(userCredential.user);\n    return userCredential;\n}\n\n/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nclass MultiFactorError extends FirebaseError {\n    constructor(auth, error, operationType, user) {\n        var _a;\n        super(error.code, error.message);\n        this.operationType = operationType;\n        this.user = user;\n        // https://github.com/Microsoft/TypeScript-wiki/blob/master/Breaking-Changes.md#extending-built-ins-like-error-array-and-map-may-no-longer-work\n        Object.setPrototypeOf(this, MultiFactorError.prototype);\n        this.customData = {\n            appName: auth.name,\n            tenantId: (_a = auth.tenantId) !== null && _a !== void 0 ? _a : undefined,\n            _serverResponse: error.customData._serverResponse,\n            operationType\n        };\n    }\n    static _fromErrorAndOperation(auth, error, operationType, user) {\n        return new MultiFactorError(auth, error, operationType, user);\n    }\n}\nfunction _processCredentialSavingMfaContextIfNecessary(auth, operationType, credential, user) {\n    const idTokenProvider = operationType === \"reauthenticate\" /* OperationType.REAUTHENTICATE */\n        ? credential._getReauthenticationResolver(auth)\n        : credential._getIdTokenResponse(auth);\n    return idTokenProvider.catch(error => {\n        if (error.code === `auth/${\"multi-factor-auth-required\" /* AuthErrorCode.MFA_REQUIRED */}`) {\n            throw MultiFactorError._fromErrorAndOperation(auth, error, operationType, user);\n        }\n        throw error;\n    });\n}\n\n/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Takes a set of UserInfo provider data and converts it to a set of names\n */\nfunction providerDataAsNames(providerData) {\n    return new Set(providerData\n        .map(({ providerId }) => providerId)\n        .filter(pid => !!pid));\n}\n\n/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Unlinks a provider from a user account.\n *\n * @param user - The user.\n * @param providerId - The provider to unlink.\n *\n * @public\n */\nasync function unlink(user, providerId) {\n    const userInternal = getModularInstance(user);\n    await _assertLinkedStatus(true, userInternal, providerId);\n    const { providerUserInfo } = await deleteLinkedAccounts(userInternal.auth, {\n        idToken: await userInternal.getIdToken(),\n        deleteProvider: [providerId]\n    });\n    const providersLeft = providerDataAsNames(providerUserInfo || []);\n    userInternal.providerData = userInternal.providerData.filter(pd => providersLeft.has(pd.providerId));\n    if (!providersLeft.has(\"phone\" /* ProviderId.PHONE */)) {\n        userInternal.phoneNumber = null;\n    }\n    await userInternal.auth._persistUserIfCurrent(userInternal);\n    return userInternal;\n}\nasync function _link$1(user, credential, bypassAuthState = false) {\n    const response = await _logoutIfInvalidated(user, credential._linkToIdToken(user.auth, await user.getIdToken()), bypassAuthState);\n    return UserCredentialImpl._forOperation(user, \"link\" /* OperationType.LINK */, response);\n}\nasync function _assertLinkedStatus(expected, user, provider) {\n    await _reloadWithoutSaving(user);\n    const providerIds = providerDataAsNames(user.providerData);\n    const code = expected === false\n        ? \"provider-already-linked\" /* AuthErrorCode.PROVIDER_ALREADY_LINKED */\n        : \"no-such-provider\" /* AuthErrorCode.NO_SUCH_PROVIDER */;\n    _assert(providerIds.has(provider) === expected, user.auth, code);\n}\n\n/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nasync function _reauthenticate(user, credential, bypassAuthState = false) {\n    const { auth } = user;\n    if (_isFirebaseServerApp(auth.app)) {\n        return Promise.reject(_serverAppCurrentUserOperationNotSupportedError(auth));\n    }\n    const operationType = \"reauthenticate\" /* OperationType.REAUTHENTICATE */;\n    try {\n        const response = await _logoutIfInvalidated(user, _processCredentialSavingMfaContextIfNecessary(auth, operationType, credential, user), bypassAuthState);\n        _assert(response.idToken, auth, \"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */);\n        const parsed = _parseToken(response.idToken);\n        _assert(parsed, auth, \"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */);\n        const { sub: localId } = parsed;\n        _assert(user.uid === localId, auth, \"user-mismatch\" /* AuthErrorCode.USER_MISMATCH */);\n        return UserCredentialImpl._forOperation(user, operationType, response);\n    }\n    catch (e) {\n        // Convert user deleted error into user mismatch\n        if ((e === null || e === void 0 ? void 0 : e.code) === `auth/${\"user-not-found\" /* AuthErrorCode.USER_DELETED */}`) {\n            _fail(auth, \"user-mismatch\" /* AuthErrorCode.USER_MISMATCH */);\n        }\n        throw e;\n    }\n}\n\n/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nasync function _signInWithCredential(auth, credential, bypassAuthState = false) {\n    if (_isFirebaseServerApp(auth.app)) {\n        return Promise.reject(_serverAppCurrentUserOperationNotSupportedError(auth));\n    }\n    const operationType = \"signIn\" /* OperationType.SIGN_IN */;\n    const response = await _processCredentialSavingMfaContextIfNecessary(auth, operationType, credential);\n    const userCredential = await UserCredentialImpl._fromIdTokenResponse(auth, operationType, response);\n    if (!bypassAuthState) {\n        await auth._updateCurrentUser(userCredential.user);\n    }\n    return userCredential;\n}\n/**\n * Asynchronously signs in with the given credentials.\n *\n * @remarks\n * An {@link AuthProvider} can be used to generate the credential.\n *\n * This method is not supported by {@link Auth} instances created with a\n * {@link @firebase/app#FirebaseServerApp}.\n *\n * @param auth - The {@link Auth} instance.\n * @param credential - The auth credential.\n *\n * @public\n */\nasync function signInWithCredential(auth, credential) {\n    return _signInWithCredential(_castAuth(auth), credential);\n}\n/**\n * Links the user account with the given credentials.\n *\n * @remarks\n * An {@link AuthProvider} can be used to generate the credential.\n *\n * @param user - The user.\n * @param credential - The auth credential.\n *\n * @public\n */\nasync function linkWithCredential(user, credential) {\n    const userInternal = getModularInstance(user);\n    await _assertLinkedStatus(false, userInternal, credential.providerId);\n    return _link$1(userInternal, credential);\n}\n/**\n * Re-authenticates a user using a fresh credential.\n *\n * @remarks\n * Use before operations such as {@link updatePassword} that require tokens from recent sign-in\n * attempts. This method can be used to recover from a `CREDENTIAL_TOO_OLD_LOGIN_AGAIN` error\n * or a `TOKEN_EXPIRED` error.\n *\n * This method is not supported on any {@link User} signed in by {@link Auth} instances\n * created with a {@link @firebase/app#FirebaseServerApp}.\n *\n * @param user - The user.\n * @param credential - The auth credential.\n *\n * @public\n */\nasync function reauthenticateWithCredential(user, credential) {\n    return _reauthenticate(getModularInstance(user), credential);\n}\n\n/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nasync function signInWithCustomToken$1(auth, request) {\n    return _performSignInRequest(auth, \"POST\" /* HttpMethod.POST */, \"/v1/accounts:signInWithCustomToken\" /* Endpoint.SIGN_IN_WITH_CUSTOM_TOKEN */, _addTidIfNecessary(auth, request));\n}\n\n/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Asynchronously signs in using a custom token.\n *\n * @remarks\n * Custom tokens are used to integrate Firebase Auth with existing auth systems, and must\n * be generated by an auth backend using the\n * {@link https://firebase.google.com/docs/reference/admin/node/admin.auth.Auth#createcustomtoken | createCustomToken}\n * method in the {@link https://firebase.google.com/docs/auth/admin | Admin SDK} .\n *\n * Fails with an error if the token is invalid, expired, or not accepted by the Firebase Auth service.\n *\n * This method is not supported by {@link Auth} instances created with a\n * {@link @firebase/app#FirebaseServerApp}.\n *\n * @param auth - The {@link Auth} instance.\n * @param customToken - The custom token to sign in with.\n *\n * @public\n */\nasync function signInWithCustomToken(auth, customToken) {\n    if (_isFirebaseServerApp(auth.app)) {\n        return Promise.reject(_serverAppCurrentUserOperationNotSupportedError(auth));\n    }\n    const authInternal = _castAuth(auth);\n    const response = await signInWithCustomToken$1(authInternal, {\n        token: customToken,\n        returnSecureToken: true\n    });\n    const cred = await UserCredentialImpl._fromIdTokenResponse(authInternal, \"signIn\" /* OperationType.SIGN_IN */, response);\n    await authInternal._updateCurrentUser(cred.user);\n    return cred;\n}\n\n/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nclass MultiFactorInfoImpl {\n    constructor(factorId, response) {\n        this.factorId = factorId;\n        this.uid = response.mfaEnrollmentId;\n        this.enrollmentTime = new Date(response.enrolledAt).toUTCString();\n        this.displayName = response.displayName;\n    }\n    static _fromServerResponse(auth, enrollment) {\n        if ('phoneInfo' in enrollment) {\n            return PhoneMultiFactorInfoImpl._fromServerResponse(auth, enrollment);\n        }\n        else if ('totpInfo' in enrollment) {\n            return TotpMultiFactorInfoImpl._fromServerResponse(auth, enrollment);\n        }\n        return _fail(auth, \"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */);\n    }\n}\nclass PhoneMultiFactorInfoImpl extends MultiFactorInfoImpl {\n    constructor(response) {\n        super(\"phone\" /* FactorId.PHONE */, response);\n        this.phoneNumber = response.phoneInfo;\n    }\n    static _fromServerResponse(_auth, enrollment) {\n        return new PhoneMultiFactorInfoImpl(enrollment);\n    }\n}\nclass TotpMultiFactorInfoImpl extends MultiFactorInfoImpl {\n    constructor(response) {\n        super(\"totp\" /* FactorId.TOTP */, response);\n    }\n    static _fromServerResponse(_auth, enrollment) {\n        return new TotpMultiFactorInfoImpl(enrollment);\n    }\n}\n\n/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nfunction _setActionCodeSettingsOnRequest(auth, request, actionCodeSettings) {\n    var _a;\n    _assert(((_a = actionCodeSettings.url) === null || _a === void 0 ? void 0 : _a.length) > 0, auth, \"invalid-continue-uri\" /* AuthErrorCode.INVALID_CONTINUE_URI */);\n    _assert(typeof actionCodeSettings.dynamicLinkDomain === 'undefined' ||\n        actionCodeSettings.dynamicLinkDomain.length > 0, auth, \"invalid-dynamic-link-domain\" /* AuthErrorCode.INVALID_DYNAMIC_LINK_DOMAIN */);\n    request.continueUrl = actionCodeSettings.url;\n    request.dynamicLinkDomain = actionCodeSettings.dynamicLinkDomain;\n    request.canHandleCodeInApp = actionCodeSettings.handleCodeInApp;\n    if (actionCodeSettings.iOS) {\n        _assert(actionCodeSettings.iOS.bundleId.length > 0, auth, \"missing-ios-bundle-id\" /* AuthErrorCode.MISSING_IOS_BUNDLE_ID */);\n        request.iOSBundleId = actionCodeSettings.iOS.bundleId;\n    }\n    if (actionCodeSettings.android) {\n        _assert(actionCodeSettings.android.packageName.length > 0, auth, \"missing-android-pkg-name\" /* AuthErrorCode.MISSING_ANDROID_PACKAGE_NAME */);\n        request.androidInstallApp = actionCodeSettings.android.installApp;\n        request.androidMinimumVersionCode =\n            actionCodeSettings.android.minimumVersion;\n        request.androidPackageName = actionCodeSettings.android.packageName;\n    }\n}\n\n/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Updates the password policy cached in the {@link Auth} instance if a policy is already\n * cached for the project or tenant.\n *\n * @remarks\n * We only fetch the password policy if the password did not meet policy requirements and\n * there is an existing policy cached. A developer must call validatePassword at least\n * once for the cache to be automatically updated.\n *\n * @param auth - The {@link Auth} instance.\n *\n * @private\n */\nasync function recachePasswordPolicy(auth) {\n    const authInternal = _castAuth(auth);\n    if (authInternal._getPasswordPolicyInternal()) {\n        await authInternal._updatePasswordPolicy();\n    }\n}\n/**\n * Sends a password reset email to the given email address. This method does not throw an error when\n * there's no user account with the given email address and\n * {@link https://cloud.google.com/identity-platform/docs/admin/email-enumeration-protection | Email Enumeration Protection}\n * is enabled.\n *\n * @remarks\n * To complete the password reset, call {@link confirmPasswordReset} with the code supplied in\n * the email sent to the user, along with the new password specified by the user.\n *\n * @example\n * ```javascript\n * const actionCodeSettings = {\n *   url: 'https://www.example.com/?email=user@example.com',\n *   iOS: {\n *      bundleId: 'com.example.ios'\n *   },\n *   android: {\n *     packageName: 'com.example.android',\n *     installApp: true,\n *     minimumVersion: '12'\n *   },\n *   handleCodeInApp: true\n * };\n * await sendPasswordResetEmail(auth, 'user@example.com', actionCodeSettings);\n * // Obtain code from user.\n * await confirmPasswordReset('user@example.com', code);\n * ```\n *\n * @param auth - The {@link Auth} instance.\n * @param email - The user's email address.\n * @param actionCodeSettings - The {@link ActionCodeSettings}.\n *\n * @public\n */\nasync function sendPasswordResetEmail(auth, email, actionCodeSettings) {\n    const authInternal = _castAuth(auth);\n    const request = {\n        requestType: \"PASSWORD_RESET\" /* ActionCodeOperation.PASSWORD_RESET */,\n        email,\n        clientType: \"CLIENT_TYPE_WEB\" /* RecaptchaClientType.WEB */\n    };\n    if (actionCodeSettings) {\n        _setActionCodeSettingsOnRequest(authInternal, request, actionCodeSettings);\n    }\n    await handleRecaptchaFlow(authInternal, request, \"getOobCode\" /* RecaptchaActionName.GET_OOB_CODE */, sendPasswordResetEmail$1, \"EMAIL_PASSWORD_PROVIDER\" /* RecaptchaAuthProvider.EMAIL_PASSWORD_PROVIDER */);\n}\n/**\n * Completes the password reset process, given a confirmation code and new password.\n *\n * @param auth - The {@link Auth} instance.\n * @param oobCode - A confirmation code sent to the user.\n * @param newPassword - The new password.\n *\n * @public\n */\nasync function confirmPasswordReset(auth, oobCode, newPassword) {\n    await resetPassword(getModularInstance(auth), {\n        oobCode,\n        newPassword\n    })\n        .catch(async (error) => {\n        if (error.code ===\n            `auth/${\"password-does-not-meet-requirements\" /* AuthErrorCode.PASSWORD_DOES_NOT_MEET_REQUIREMENTS */}`) {\n            void recachePasswordPolicy(auth);\n        }\n        throw error;\n    });\n    // Do not return the email.\n}\n/**\n * Applies a verification code sent to the user by email or other out-of-band mechanism.\n *\n * @param auth - The {@link Auth} instance.\n * @param oobCode - A verification code sent to the user.\n *\n * @public\n */\nasync function applyActionCode(auth, oobCode) {\n    await applyActionCode$1(getModularInstance(auth), { oobCode });\n}\n/**\n * Checks a verification code sent to the user by email or other out-of-band mechanism.\n *\n * @returns metadata about the code.\n *\n * @param auth - The {@link Auth} instance.\n * @param oobCode - A verification code sent to the user.\n *\n * @public\n */\nasync function checkActionCode(auth, oobCode) {\n    const authModular = getModularInstance(auth);\n    const response = await resetPassword(authModular, { oobCode });\n    // Email could be empty only if the request type is EMAIL_SIGNIN or\n    // VERIFY_AND_CHANGE_EMAIL.\n    // New email should not be empty if the request type is\n    // VERIFY_AND_CHANGE_EMAIL.\n    // Multi-factor info could not be empty if the request type is\n    // REVERT_SECOND_FACTOR_ADDITION.\n    const operation = response.requestType;\n    _assert(operation, authModular, \"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */);\n    switch (operation) {\n        case \"EMAIL_SIGNIN\" /* ActionCodeOperation.EMAIL_SIGNIN */:\n            break;\n        case \"VERIFY_AND_CHANGE_EMAIL\" /* ActionCodeOperation.VERIFY_AND_CHANGE_EMAIL */:\n            _assert(response.newEmail, authModular, \"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */);\n            break;\n        case \"REVERT_SECOND_FACTOR_ADDITION\" /* ActionCodeOperation.REVERT_SECOND_FACTOR_ADDITION */:\n            _assert(response.mfaInfo, authModular, \"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */);\n        // fall through\n        default:\n            _assert(response.email, authModular, \"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */);\n    }\n    // The multi-factor info for revert second factor addition\n    let multiFactorInfo = null;\n    if (response.mfaInfo) {\n        multiFactorInfo = MultiFactorInfoImpl._fromServerResponse(_castAuth(authModular), response.mfaInfo);\n    }\n    return {\n        data: {\n            email: (response.requestType === \"VERIFY_AND_CHANGE_EMAIL\" /* ActionCodeOperation.VERIFY_AND_CHANGE_EMAIL */\n                ? response.newEmail\n                : response.email) || null,\n            previousEmail: (response.requestType === \"VERIFY_AND_CHANGE_EMAIL\" /* ActionCodeOperation.VERIFY_AND_CHANGE_EMAIL */\n                ? response.email\n                : response.newEmail) || null,\n            multiFactorInfo\n        },\n        operation\n    };\n}\n/**\n * Checks a password reset code sent to the user by email or other out-of-band mechanism.\n *\n * @returns the user's email address if valid.\n *\n * @param auth - The {@link Auth} instance.\n * @param code - A verification code sent to the user.\n *\n * @public\n */\nasync function verifyPasswordResetCode(auth, code) {\n    const { data } = await checkActionCode(getModularInstance(auth), code);\n    // Email should always be present since a code was sent to it\n    return data.email;\n}\n/**\n * Creates a new user account associated with the specified email address and password.\n *\n * @remarks\n * On successful creation of the user account, this user will also be signed in to your application.\n *\n * User account creation can fail if the account already exists or the password is invalid.\n *\n * This method is not supported on {@link Auth} instances created with a\n * {@link @firebase/app#FirebaseServerApp}.\n *\n * Note: The email address acts as a unique identifier for the user and enables an email-based\n * password reset. This function will create a new user account and set the initial user password.\n *\n * @param auth - The {@link Auth} instance.\n * @param email - The user's email address.\n * @param password - The user's chosen password.\n *\n * @public\n */\nasync function createUserWithEmailAndPassword(auth, email, password) {\n    if (_isFirebaseServerApp(auth.app)) {\n        return Promise.reject(_serverAppCurrentUserOperationNotSupportedError(auth));\n    }\n    const authInternal = _castAuth(auth);\n    const request = {\n        returnSecureToken: true,\n        email,\n        password,\n        clientType: \"CLIENT_TYPE_WEB\" /* RecaptchaClientType.WEB */\n    };\n    const signUpResponse = handleRecaptchaFlow(authInternal, request, \"signUpPassword\" /* RecaptchaActionName.SIGN_UP_PASSWORD */, signUp, \"EMAIL_PASSWORD_PROVIDER\" /* RecaptchaAuthProvider.EMAIL_PASSWORD_PROVIDER */);\n    const response = await signUpResponse.catch(error => {\n        if (error.code === `auth/${\"password-does-not-meet-requirements\" /* AuthErrorCode.PASSWORD_DOES_NOT_MEET_REQUIREMENTS */}`) {\n            void recachePasswordPolicy(auth);\n        }\n        throw error;\n    });\n    const userCredential = await UserCredentialImpl._fromIdTokenResponse(authInternal, \"signIn\" /* OperationType.SIGN_IN */, response);\n    await authInternal._updateCurrentUser(userCredential.user);\n    return userCredential;\n}\n/**\n * Asynchronously signs in using an email and password.\n *\n * @remarks\n * Fails with an error if the email address and password do not match. When\n * {@link https://cloud.google.com/identity-platform/docs/admin/email-enumeration-protection | Email Enumeration Protection}\n * is enabled, this method fails with \"auth/invalid-credential\" in case of an invalid\n * email/password.\n *\n * This method is not supported on {@link Auth} instances created with a\n * {@link @firebase/app#FirebaseServerApp}.\n *\n * Note: The user's password is NOT the password used to access the user's email account. The\n * email address serves as a unique identifier for the user, and the password is used to access\n * the user's account in your Firebase project. See also: {@link createUserWithEmailAndPassword}.\n *\n *\n * @param auth - The {@link Auth} instance.\n * @param email - The users email address.\n * @param password - The users password.\n *\n * @public\n */\nfunction signInWithEmailAndPassword(auth, email, password) {\n    if (_isFirebaseServerApp(auth.app)) {\n        return Promise.reject(_serverAppCurrentUserOperationNotSupportedError(auth));\n    }\n    return signInWithCredential(getModularInstance(auth), EmailAuthProvider.credential(email, password)).catch(async (error) => {\n        if (error.code === `auth/${\"password-does-not-meet-requirements\" /* AuthErrorCode.PASSWORD_DOES_NOT_MEET_REQUIREMENTS */}`) {\n            void recachePasswordPolicy(auth);\n        }\n        throw error;\n    });\n}\n\n/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Sends a sign-in email link to the user with the specified email.\n *\n * @remarks\n * The sign-in operation has to always be completed in the app unlike other out of band email\n * actions (password reset and email verifications). This is because, at the end of the flow,\n * the user is expected to be signed in and their Auth state persisted within the app.\n *\n * To complete sign in with the email link, call {@link signInWithEmailLink} with the email\n * address and the email link supplied in the email sent to the user.\n *\n * @example\n * ```javascript\n * const actionCodeSettings = {\n *   url: 'https://www.example.com/?email=user@example.com',\n *   iOS: {\n *      bundleId: 'com.example.ios'\n *   },\n *   android: {\n *     packageName: 'com.example.android',\n *     installApp: true,\n *     minimumVersion: '12'\n *   },\n *   handleCodeInApp: true\n * };\n * await sendSignInLinkToEmail(auth, 'user@example.com', actionCodeSettings);\n * // Obtain emailLink from the user.\n * if(isSignInWithEmailLink(auth, emailLink)) {\n *   await signInWithEmailLink(auth, 'user@example.com', emailLink);\n * }\n * ```\n *\n * @param authInternal - The {@link Auth} instance.\n * @param email - The user's email address.\n * @param actionCodeSettings - The {@link ActionCodeSettings}.\n *\n * @public\n */\nasync function sendSignInLinkToEmail(auth, email, actionCodeSettings) {\n    const authInternal = _castAuth(auth);\n    const request = {\n        requestType: \"EMAIL_SIGNIN\" /* ActionCodeOperation.EMAIL_SIGNIN */,\n        email,\n        clientType: \"CLIENT_TYPE_WEB\" /* RecaptchaClientType.WEB */\n    };\n    function setActionCodeSettings(request, actionCodeSettings) {\n        _assert(actionCodeSettings.handleCodeInApp, authInternal, \"argument-error\" /* AuthErrorCode.ARGUMENT_ERROR */);\n        if (actionCodeSettings) {\n            _setActionCodeSettingsOnRequest(authInternal, request, actionCodeSettings);\n        }\n    }\n    setActionCodeSettings(request, actionCodeSettings);\n    await handleRecaptchaFlow(authInternal, request, \"getOobCode\" /* RecaptchaActionName.GET_OOB_CODE */, sendSignInLinkToEmail$1, \"EMAIL_PASSWORD_PROVIDER\" /* RecaptchaAuthProvider.EMAIL_PASSWORD_PROVIDER */);\n}\n/**\n * Checks if an incoming link is a sign-in with email link suitable for {@link signInWithEmailLink}.\n *\n * @param auth - The {@link Auth} instance.\n * @param emailLink - The link sent to the user's email address.\n *\n * @public\n */\nfunction isSignInWithEmailLink(auth, emailLink) {\n    const actionCodeUrl = ActionCodeURL.parseLink(emailLink);\n    return (actionCodeUrl === null || actionCodeUrl === void 0 ? void 0 : actionCodeUrl.operation) === \"EMAIL_SIGNIN\" /* ActionCodeOperation.EMAIL_SIGNIN */;\n}\n/**\n * Asynchronously signs in using an email and sign-in email link.\n *\n * @remarks\n * If no link is passed, the link is inferred from the current URL.\n *\n * Fails with an error if the email address is invalid or OTP in email link expires.\n *\n * This method is not supported by {@link Auth} instances created with a\n * {@link @firebase/app#FirebaseServerApp}.\n *\n * Note: Confirm the link is a sign-in email link before calling this method firebase.auth.Auth.isSignInWithEmailLink.\n *\n * @example\n * ```javascript\n * const actionCodeSettings = {\n *   url: 'https://www.example.com/?email=user@example.com',\n *   iOS: {\n *      bundleId: 'com.example.ios'\n *   },\n *   android: {\n *     packageName: 'com.example.android',\n *     installApp: true,\n *     minimumVersion: '12'\n *   },\n *   handleCodeInApp: true\n * };\n * await sendSignInLinkToEmail(auth, 'user@example.com', actionCodeSettings);\n * // Obtain emailLink from the user.\n * if(isSignInWithEmailLink(auth, emailLink)) {\n *   await signInWithEmailLink(auth, 'user@example.com', emailLink);\n * }\n * ```\n *\n *\n * @param auth - The {@link Auth} instance.\n * @param email - The user's email address.\n * @param emailLink - The link sent to the user's email address.\n *\n * @public\n */\nasync function signInWithEmailLink(auth, email, emailLink) {\n    if (_isFirebaseServerApp(auth.app)) {\n        return Promise.reject(_serverAppCurrentUserOperationNotSupportedError(auth));\n    }\n    const authModular = getModularInstance(auth);\n    const credential = EmailAuthProvider.credentialWithLink(email, emailLink || _getCurrentUrl());\n    // Check if the tenant ID in the email link matches the tenant ID on Auth\n    // instance.\n    _assert(credential._tenantId === (authModular.tenantId || null), authModular, \"tenant-id-mismatch\" /* AuthErrorCode.TENANT_ID_MISMATCH */);\n    return signInWithCredential(authModular, credential);\n}\n\n/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nasync function createAuthUri(auth, request) {\n    return _performApiRequest(auth, \"POST\" /* HttpMethod.POST */, \"/v1/accounts:createAuthUri\" /* Endpoint.CREATE_AUTH_URI */, _addTidIfNecessary(auth, request));\n}\n\n/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Gets the list of possible sign in methods for the given email address. This method returns an\n * empty list when\n * {@link https://cloud.google.com/identity-platform/docs/admin/email-enumeration-protection | Email Enumeration Protection}\n * is enabled, irrespective of the number of authentication methods available for the given email.\n *\n * @remarks\n * This is useful to differentiate methods of sign-in for the same provider, eg.\n * {@link EmailAuthProvider} which has 2 methods of sign-in,\n * {@link SignInMethod}.EMAIL_PASSWORD and\n * {@link SignInMethod}.EMAIL_LINK.\n *\n * @param auth - The {@link Auth} instance.\n * @param email - The user's email address.\n *\n * Deprecated. Migrating off of this method is recommended as a security best-practice.\n * Learn more in the Identity Platform documentation for\n * {@link https://cloud.google.com/identity-platform/docs/admin/email-enumeration-protection | Email Enumeration Protection}.\n * @public\n */\nasync function fetchSignInMethodsForEmail(auth, email) {\n    // createAuthUri returns an error if continue URI is not http or https.\n    // For environments like Cordova, Chrome extensions, native frameworks, file\n    // systems, etc, use http://localhost as continue URL.\n    const continueUri = _isHttpOrHttps() ? _getCurrentUrl() : 'http://localhost';\n    const request = {\n        identifier: email,\n        continueUri\n    };\n    const { signinMethods } = await createAuthUri(getModularInstance(auth), request);\n    return signinMethods || [];\n}\n/**\n * Sends a verification email to a user.\n *\n * @remarks\n * The verification process is completed by calling {@link applyActionCode}.\n *\n * @example\n * ```javascript\n * const actionCodeSettings = {\n *   url: 'https://www.example.com/?email=user@example.com',\n *   iOS: {\n *      bundleId: 'com.example.ios'\n *   },\n *   android: {\n *     packageName: 'com.example.android',\n *     installApp: true,\n *     minimumVersion: '12'\n *   },\n *   handleCodeInApp: true\n * };\n * await sendEmailVerification(user, actionCodeSettings);\n * // Obtain code from the user.\n * await applyActionCode(auth, code);\n * ```\n *\n * @param user - The user.\n * @param actionCodeSettings - The {@link ActionCodeSettings}.\n *\n * @public\n */\nasync function sendEmailVerification(user, actionCodeSettings) {\n    const userInternal = getModularInstance(user);\n    const idToken = await user.getIdToken();\n    const request = {\n        requestType: \"VERIFY_EMAIL\" /* ActionCodeOperation.VERIFY_EMAIL */,\n        idToken\n    };\n    if (actionCodeSettings) {\n        _setActionCodeSettingsOnRequest(userInternal.auth, request, actionCodeSettings);\n    }\n    const { email } = await sendEmailVerification$1(userInternal.auth, request);\n    if (email !== user.email) {\n        await user.reload();\n    }\n}\n/**\n * Sends a verification email to a new email address.\n *\n * @remarks\n * The user's email will be updated to the new one after being verified.\n *\n * If you have a custom email action handler, you can complete the verification process by calling\n * {@link applyActionCode}.\n *\n * @example\n * ```javascript\n * const actionCodeSettings = {\n *   url: 'https://www.example.com/?email=user@example.com',\n *   iOS: {\n *      bundleId: 'com.example.ios'\n *   },\n *   android: {\n *     packageName: 'com.example.android',\n *     installApp: true,\n *     minimumVersion: '12'\n *   },\n *   handleCodeInApp: true\n * };\n * await verifyBeforeUpdateEmail(user, 'newemail@example.com', actionCodeSettings);\n * // Obtain code from the user.\n * await applyActionCode(auth, code);\n * ```\n *\n * @param user - The user.\n * @param newEmail - The new email address to be verified before update.\n * @param actionCodeSettings - The {@link ActionCodeSettings}.\n *\n * @public\n */\nasync function verifyBeforeUpdateEmail(user, newEmail, actionCodeSettings) {\n    const userInternal = getModularInstance(user);\n    const idToken = await user.getIdToken();\n    const request = {\n        requestType: \"VERIFY_AND_CHANGE_EMAIL\" /* ActionCodeOperation.VERIFY_AND_CHANGE_EMAIL */,\n        idToken,\n        newEmail\n    };\n    if (actionCodeSettings) {\n        _setActionCodeSettingsOnRequest(userInternal.auth, request, actionCodeSettings);\n    }\n    const { email } = await verifyAndChangeEmail(userInternal.auth, request);\n    if (email !== user.email) {\n        // If the local copy of the email on user is outdated, reload the\n        // user.\n        await user.reload();\n    }\n}\n\n/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nasync function updateProfile$1(auth, request) {\n    return _performApiRequest(auth, \"POST\" /* HttpMethod.POST */, \"/v1/accounts:update\" /* Endpoint.SET_ACCOUNT_INFO */, request);\n}\n\n/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Updates a user's profile data.\n *\n * @param user - The user.\n * @param profile - The profile's `displayName` and `photoURL` to update.\n *\n * @public\n */\nasync function updateProfile(user, { displayName, photoURL: photoUrl }) {\n    if (displayName === undefined && photoUrl === undefined) {\n        return;\n    }\n    const userInternal = getModularInstance(user);\n    const idToken = await userInternal.getIdToken();\n    const profileRequest = {\n        idToken,\n        displayName,\n        photoUrl,\n        returnSecureToken: true\n    };\n    const response = await _logoutIfInvalidated(userInternal, updateProfile$1(userInternal.auth, profileRequest));\n    userInternal.displayName = response.displayName || null;\n    userInternal.photoURL = response.photoUrl || null;\n    // Update the password provider as well\n    const passwordProvider = userInternal.providerData.find(({ providerId }) => providerId === \"password\" /* ProviderId.PASSWORD */);\n    if (passwordProvider) {\n        passwordProvider.displayName = userInternal.displayName;\n        passwordProvider.photoURL = userInternal.photoURL;\n    }\n    await userInternal._updateTokensIfNecessary(response);\n}\n/**\n * Updates the user's email address.\n *\n * @remarks\n * An email will be sent to the original email address (if it was set) that allows to revoke the\n * email address change, in order to protect them from account hijacking.\n *\n * This method is not supported on any {@link User} signed in by {@link Auth} instances\n * created with a {@link @firebase/app#FirebaseServerApp}.\n *\n * Important: this is a security sensitive operation that requires the user to have recently signed\n * in. If this requirement isn't met, ask the user to authenticate again and then call\n * {@link reauthenticateWithCredential}.\n *\n * @param user - The user.\n * @param newEmail - The new email address.\n *\n * Throws \"auth/operation-not-allowed\" error when\n * {@link https://cloud.google.com/identity-platform/docs/admin/email-enumeration-protection | Email Enumeration Protection}\n * is enabled.\n * Deprecated - Use {@link verifyBeforeUpdateEmail} instead.\n *\n * @public\n */\nfunction updateEmail(user, newEmail) {\n    const userInternal = getModularInstance(user);\n    if (_isFirebaseServerApp(userInternal.auth.app)) {\n        return Promise.reject(_serverAppCurrentUserOperationNotSupportedError(userInternal.auth));\n    }\n    return updateEmailOrPassword(userInternal, newEmail, null);\n}\n/**\n * Updates the user's password.\n *\n * @remarks\n * Important: this is a security sensitive operation that requires the user to have recently signed\n * in. If this requirement isn't met, ask the user to authenticate again and then call\n * {@link reauthenticateWithCredential}.\n *\n * @param user - The user.\n * @param newPassword - The new password.\n *\n * @public\n */\nfunction updatePassword(user, newPassword) {\n    return updateEmailOrPassword(getModularInstance(user), null, newPassword);\n}\nasync function updateEmailOrPassword(user, email, password) {\n    const { auth } = user;\n    const idToken = await user.getIdToken();\n    const request = {\n        idToken,\n        returnSecureToken: true\n    };\n    if (email) {\n        request.email = email;\n    }\n    if (password) {\n        request.password = password;\n    }\n    const response = await _logoutIfInvalidated(user, updateEmailPassword(auth, request));\n    await user._updateTokensIfNecessary(response, /* reload */ true);\n}\n\n/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Parse the `AdditionalUserInfo` from the ID token response.\n *\n */\nfunction _fromIdTokenResponse(idTokenResponse) {\n    var _a, _b;\n    if (!idTokenResponse) {\n        return null;\n    }\n    const { providerId } = idTokenResponse;\n    const profile = idTokenResponse.rawUserInfo\n        ? JSON.parse(idTokenResponse.rawUserInfo)\n        : {};\n    const isNewUser = idTokenResponse.isNewUser ||\n        idTokenResponse.kind === \"identitytoolkit#SignupNewUserResponse\" /* IdTokenResponseKind.SignupNewUser */;\n    if (!providerId && (idTokenResponse === null || idTokenResponse === void 0 ? void 0 : idTokenResponse.idToken)) {\n        const signInProvider = (_b = (_a = _parseToken(idTokenResponse.idToken)) === null || _a === void 0 ? void 0 : _a.firebase) === null || _b === void 0 ? void 0 : _b['sign_in_provider'];\n        if (signInProvider) {\n            const filteredProviderId = signInProvider !== \"anonymous\" /* ProviderId.ANONYMOUS */ &&\n                signInProvider !== \"custom\" /* ProviderId.CUSTOM */\n                ? signInProvider\n                : null;\n            // Uses generic class in accordance with the legacy SDK.\n            return new GenericAdditionalUserInfo(isNewUser, filteredProviderId);\n        }\n    }\n    if (!providerId) {\n        return null;\n    }\n    switch (providerId) {\n        case \"facebook.com\" /* ProviderId.FACEBOOK */:\n            return new FacebookAdditionalUserInfo(isNewUser, profile);\n        case \"github.com\" /* ProviderId.GITHUB */:\n            return new GithubAdditionalUserInfo(isNewUser, profile);\n        case \"google.com\" /* ProviderId.GOOGLE */:\n            return new GoogleAdditionalUserInfo(isNewUser, profile);\n        case \"twitter.com\" /* ProviderId.TWITTER */:\n            return new TwitterAdditionalUserInfo(isNewUser, profile, idTokenResponse.screenName || null);\n        case \"custom\" /* ProviderId.CUSTOM */:\n        case \"anonymous\" /* ProviderId.ANONYMOUS */:\n            return new GenericAdditionalUserInfo(isNewUser, null);\n        default:\n            return new GenericAdditionalUserInfo(isNewUser, providerId, profile);\n    }\n}\nclass GenericAdditionalUserInfo {\n    constructor(isNewUser, providerId, profile = {}) {\n        this.isNewUser = isNewUser;\n        this.providerId = providerId;\n        this.profile = profile;\n    }\n}\nclass FederatedAdditionalUserInfoWithUsername extends GenericAdditionalUserInfo {\n    constructor(isNewUser, providerId, profile, username) {\n        super(isNewUser, providerId, profile);\n        this.username = username;\n    }\n}\nclass FacebookAdditionalUserInfo extends GenericAdditionalUserInfo {\n    constructor(isNewUser, profile) {\n        super(isNewUser, \"facebook.com\" /* ProviderId.FACEBOOK */, profile);\n    }\n}\nclass GithubAdditionalUserInfo extends FederatedAdditionalUserInfoWithUsername {\n    constructor(isNewUser, profile) {\n        super(isNewUser, \"github.com\" /* ProviderId.GITHUB */, profile, typeof (profile === null || profile === void 0 ? void 0 : profile.login) === 'string' ? profile === null || profile === void 0 ? void 0 : profile.login : null);\n    }\n}\nclass GoogleAdditionalUserInfo extends GenericAdditionalUserInfo {\n    constructor(isNewUser, profile) {\n        super(isNewUser, \"google.com\" /* ProviderId.GOOGLE */, profile);\n    }\n}\nclass TwitterAdditionalUserInfo extends FederatedAdditionalUserInfoWithUsername {\n    constructor(isNewUser, profile, screenName) {\n        super(isNewUser, \"twitter.com\" /* ProviderId.TWITTER */, profile, screenName);\n    }\n}\n/**\n * Extracts provider specific {@link AdditionalUserInfo} for the given credential.\n *\n * @param userCredential - The user credential.\n *\n * @public\n */\nfunction getAdditionalUserInfo(userCredential) {\n    const { user, _tokenResponse } = userCredential;\n    if (user.isAnonymous && !_tokenResponse) {\n        // Handle the special case where signInAnonymously() gets called twice.\n        // No network call is made so there's nothing to actually fill this in\n        return {\n            providerId: null,\n            isNewUser: false,\n            profile: null\n        };\n    }\n    return _fromIdTokenResponse(_tokenResponse);\n}\n\n/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n// Non-optional auth methods.\n/**\n * Changes the type of persistence on the {@link Auth} instance for the currently saved\n * `Auth` session and applies this type of persistence for future sign-in requests, including\n * sign-in with redirect requests.\n *\n * @remarks\n * This makes it easy for a user signing in to specify whether their session should be\n * remembered or not. It also makes it easier to never persist the `Auth` state for applications\n * that are shared by other users or have sensitive data.\n *\n * This method does not work in a Node.js environment or with {@link Auth} instances created with a\n * {@link @firebase/app#FirebaseServerApp}.\n *\n * @example\n * ```javascript\n * setPersistence(auth, browserSessionPersistence);\n * ```\n *\n * @param auth - The {@link Auth} instance.\n * @param persistence - The {@link Persistence} to use.\n * @returns A `Promise` that resolves once the persistence change has completed\n *\n * @public\n */\nfunction setPersistence(auth, persistence) {\n    return getModularInstance(auth).setPersistence(persistence);\n}\n/**\n * Loads the reCAPTCHA configuration into the `Auth` instance.\n *\n * @remarks\n * This will load the reCAPTCHA config, which indicates whether the reCAPTCHA\n * verification flow should be triggered for each auth provider, into the\n * current Auth session.\n *\n * If initializeRecaptchaConfig() is not invoked, the auth flow will always start\n * without reCAPTCHA verification. If the provider is configured to require reCAPTCHA\n * verification, the SDK will transparently load the reCAPTCHA config and restart the\n * auth flows.\n *\n * Thus, by calling this optional method, you will reduce the latency of future auth flows.\n * Loading the reCAPTCHA config early will also enhance the signal collected by reCAPTCHA.\n *\n * This method does not work in a Node.js environment.\n *\n * @example\n * ```javascript\n * initializeRecaptchaConfig(auth);\n * ```\n *\n * @param auth - The {@link Auth} instance.\n *\n * @public\n */\nfunction initializeRecaptchaConfig(auth) {\n    return _initializeRecaptchaConfig(auth);\n}\n/**\n * Validates the password against the password policy configured for the project or tenant.\n *\n * @remarks\n * If no tenant ID is set on the `Auth` instance, then this method will use the password\n * policy configured for the project. Otherwise, this method will use the policy configured\n * for the tenant. If a password policy has not been configured, then the default policy\n * configured for all projects will be used.\n *\n * If an auth flow fails because a submitted password does not meet the password policy\n * requirements and this method has previously been called, then this method will use the\n * most recent policy available when called again.\n *\n * @example\n * ```javascript\n * validatePassword(auth, 'some-password');\n * ```\n *\n * @param auth The {@link Auth} instance.\n * @param password The password to validate.\n *\n * @public\n */\nasync function validatePassword(auth, password) {\n    const authInternal = _castAuth(auth);\n    return authInternal.validatePassword(password);\n}\n/**\n * Adds an observer for changes to the signed-in user's ID token.\n *\n * @remarks\n * This includes sign-in, sign-out, and token refresh events.\n * This will not be triggered automatically upon ID token expiration. Use {@link User.getIdToken} to refresh the ID token.\n *\n * @param auth - The {@link Auth} instance.\n * @param nextOrObserver - callback triggered on change.\n * @param error - Deprecated. This callback is never triggered. Errors\n * on signing in/out can be caught in promises returned from\n * sign-in/sign-out functions.\n * @param completed - Deprecated. This callback is never triggered.\n *\n * @public\n */\nfunction onIdTokenChanged(auth, nextOrObserver, error, completed) {\n    return getModularInstance(auth).onIdTokenChanged(nextOrObserver, error, completed);\n}\n/**\n * Adds a blocking callback that runs before an auth state change\n * sets a new user.\n *\n * @param auth - The {@link Auth} instance.\n * @param callback - callback triggered before new user value is set.\n *   If this throws, it blocks the user from being set.\n * @param onAbort - callback triggered if a later `beforeAuthStateChanged()`\n *   callback throws, allowing you to undo any side effects.\n */\nfunction beforeAuthStateChanged(auth, callback, onAbort) {\n    return getModularInstance(auth).beforeAuthStateChanged(callback, onAbort);\n}\n/**\n * Adds an observer for changes to the user's sign-in state.\n *\n * @remarks\n * To keep the old behavior, see {@link onIdTokenChanged}.\n *\n * @param auth - The {@link Auth} instance.\n * @param nextOrObserver - callback triggered on change.\n * @param error - Deprecated. This callback is never triggered. Errors\n * on signing in/out can be caught in promises returned from\n * sign-in/sign-out functions.\n * @param completed - Deprecated. This callback is never triggered.\n *\n * @public\n */\nfunction onAuthStateChanged(auth, nextOrObserver, error, completed) {\n    return getModularInstance(auth).onAuthStateChanged(nextOrObserver, error, completed);\n}\n/**\n * Sets the current language to the default device/browser preference.\n *\n * @param auth - The {@link Auth} instance.\n *\n * @public\n */\nfunction useDeviceLanguage(auth) {\n    getModularInstance(auth).useDeviceLanguage();\n}\n/**\n * Asynchronously sets the provided user as {@link Auth.currentUser} on the\n * {@link Auth} instance.\n *\n * @remarks\n * A new instance copy of the user provided will be made and set as currentUser.\n *\n * This will trigger {@link onAuthStateChanged} and {@link onIdTokenChanged} listeners\n * like other sign in methods.\n *\n * The operation fails with an error if the user to be updated belongs to a different Firebase\n * project.\n *\n * This method is not supported by {@link Auth} instances created with a\n * {@link @firebase/app#FirebaseServerApp}.\n *\n * @param auth - The {@link Auth} instance.\n * @param user - The new {@link User}.\n *\n * @public\n */\nfunction updateCurrentUser(auth, user) {\n    return getModularInstance(auth).updateCurrentUser(user);\n}\n/**\n * Signs out the current user.\n *\n * @remarks\n * This method is not supported by {@link Auth} instances created with a\n * {@link @firebase/app#FirebaseServerApp}.\n *\n * @param auth - The {@link Auth} instance.\n *\n * @public\n */\nfunction signOut(auth) {\n    return getModularInstance(auth).signOut();\n}\n/**\n * Revokes the given access token. Currently only supports Apple OAuth access tokens.\n *\n * @param auth - The {@link Auth} instance.\n * @param token - The Apple OAuth access token.\n *\n * @public\n */\nfunction revokeAccessToken(auth, token) {\n    const authInternal = _castAuth(auth);\n    return authInternal.revokeAccessToken(token);\n}\n/**\n * Deletes and signs out the user.\n *\n * @remarks\n * Important: this is a security-sensitive operation that requires the user to have recently\n * signed in. If this requirement isn't met, ask the user to authenticate again and then call\n * {@link reauthenticateWithCredential}.\n *\n * @param user - The user.\n *\n * @public\n */\nasync function deleteUser(user) {\n    return getModularInstance(user).delete();\n}\n\n/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nclass MultiFactorSessionImpl {\n    constructor(type, credential, user) {\n        this.type = type;\n        this.credential = credential;\n        this.user = user;\n    }\n    static _fromIdtoken(idToken, user) {\n        return new MultiFactorSessionImpl(\"enroll\" /* MultiFactorSessionType.ENROLL */, idToken, user);\n    }\n    static _fromMfaPendingCredential(mfaPendingCredential) {\n        return new MultiFactorSessionImpl(\"signin\" /* MultiFactorSessionType.SIGN_IN */, mfaPendingCredential);\n    }\n    toJSON() {\n        const key = this.type === \"enroll\" /* MultiFactorSessionType.ENROLL */\n            ? 'idToken'\n            : 'pendingCredential';\n        return {\n            multiFactorSession: {\n                [key]: this.credential\n            }\n        };\n    }\n    static fromJSON(obj) {\n        var _a, _b;\n        if (obj === null || obj === void 0 ? void 0 : obj.multiFactorSession) {\n            if ((_a = obj.multiFactorSession) === null || _a === void 0 ? void 0 : _a.pendingCredential) {\n                return MultiFactorSessionImpl._fromMfaPendingCredential(obj.multiFactorSession.pendingCredential);\n            }\n            else if ((_b = obj.multiFactorSession) === null || _b === void 0 ? void 0 : _b.idToken) {\n                return MultiFactorSessionImpl._fromIdtoken(obj.multiFactorSession.idToken);\n            }\n        }\n        return null;\n    }\n}\n\n/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nclass MultiFactorResolverImpl {\n    constructor(session, hints, signInResolver) {\n        this.session = session;\n        this.hints = hints;\n        this.signInResolver = signInResolver;\n    }\n    /** @internal */\n    static _fromError(authExtern, error) {\n        const auth = _castAuth(authExtern);\n        const serverResponse = error.customData._serverResponse;\n        const hints = (serverResponse.mfaInfo || []).map(enrollment => MultiFactorInfoImpl._fromServerResponse(auth, enrollment));\n        _assert(serverResponse.mfaPendingCredential, auth, \"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */);\n        const session = MultiFactorSessionImpl._fromMfaPendingCredential(serverResponse.mfaPendingCredential);\n        return new MultiFactorResolverImpl(session, hints, async (assertion) => {\n            const mfaResponse = await assertion._process(auth, session);\n            // Clear out the unneeded fields from the old login response\n            delete serverResponse.mfaInfo;\n            delete serverResponse.mfaPendingCredential;\n            // Use in the new token & refresh token in the old response\n            const idTokenResponse = Object.assign(Object.assign({}, serverResponse), { idToken: mfaResponse.idToken, refreshToken: mfaResponse.refreshToken });\n            // TODO: we should collapse this switch statement into UserCredentialImpl._forOperation and have it support the SIGN_IN case\n            switch (error.operationType) {\n                case \"signIn\" /* OperationType.SIGN_IN */:\n                    const userCredential = await UserCredentialImpl._fromIdTokenResponse(auth, error.operationType, idTokenResponse);\n                    await auth._updateCurrentUser(userCredential.user);\n                    return userCredential;\n                case \"reauthenticate\" /* OperationType.REAUTHENTICATE */:\n                    _assert(error.user, auth, \"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */);\n                    return UserCredentialImpl._forOperation(error.user, error.operationType, idTokenResponse);\n                default:\n                    _fail(auth, \"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */);\n            }\n        });\n    }\n    async resolveSignIn(assertionExtern) {\n        const assertion = assertionExtern;\n        return this.signInResolver(assertion);\n    }\n}\n/**\n * Provides a {@link MultiFactorResolver} suitable for completion of a\n * multi-factor flow.\n *\n * @param auth - The {@link Auth} instance.\n * @param error - The {@link MultiFactorError} raised during a sign-in, or\n * reauthentication operation.\n *\n * @public\n */\nfunction getMultiFactorResolver(auth, error) {\n    var _a;\n    const authModular = getModularInstance(auth);\n    const errorInternal = error;\n    _assert(error.customData.operationType, authModular, \"argument-error\" /* AuthErrorCode.ARGUMENT_ERROR */);\n    _assert((_a = errorInternal.customData._serverResponse) === null || _a === void 0 ? void 0 : _a.mfaPendingCredential, authModular, \"argument-error\" /* AuthErrorCode.ARGUMENT_ERROR */);\n    return MultiFactorResolverImpl._fromError(authModular, errorInternal);\n}\n\n/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nfunction startEnrollPhoneMfa(auth, request) {\n    return _performApiRequest(auth, \"POST\" /* HttpMethod.POST */, \"/v2/accounts/mfaEnrollment:start\" /* Endpoint.START_MFA_ENROLLMENT */, _addTidIfNecessary(auth, request));\n}\nfunction finalizeEnrollPhoneMfa(auth, request) {\n    return _performApiRequest(auth, \"POST\" /* HttpMethod.POST */, \"/v2/accounts/mfaEnrollment:finalize\" /* Endpoint.FINALIZE_MFA_ENROLLMENT */, _addTidIfNecessary(auth, request));\n}\nfunction startEnrollTotpMfa(auth, request) {\n    return _performApiRequest(auth, \"POST\" /* HttpMethod.POST */, \"/v2/accounts/mfaEnrollment:start\" /* Endpoint.START_MFA_ENROLLMENT */, _addTidIfNecessary(auth, request));\n}\nfunction finalizeEnrollTotpMfa(auth, request) {\n    return _performApiRequest(auth, \"POST\" /* HttpMethod.POST */, \"/v2/accounts/mfaEnrollment:finalize\" /* Endpoint.FINALIZE_MFA_ENROLLMENT */, _addTidIfNecessary(auth, request));\n}\nfunction withdrawMfa(auth, request) {\n    return _performApiRequest(auth, \"POST\" /* HttpMethod.POST */, \"/v2/accounts/mfaEnrollment:withdraw\" /* Endpoint.WITHDRAW_MFA */, _addTidIfNecessary(auth, request));\n}\n\nclass MultiFactorUserImpl {\n    constructor(user) {\n        this.user = user;\n        this.enrolledFactors = [];\n        user._onReload(userInfo => {\n            if (userInfo.mfaInfo) {\n                this.enrolledFactors = userInfo.mfaInfo.map(enrollment => MultiFactorInfoImpl._fromServerResponse(user.auth, enrollment));\n            }\n        });\n    }\n    static _fromUser(user) {\n        return new MultiFactorUserImpl(user);\n    }\n    async getSession() {\n        return MultiFactorSessionImpl._fromIdtoken(await this.user.getIdToken(), this.user);\n    }\n    async enroll(assertionExtern, displayName) {\n        const assertion = assertionExtern;\n        const session = (await this.getSession());\n        const finalizeMfaResponse = await _logoutIfInvalidated(this.user, assertion._process(this.user.auth, session, displayName));\n        // New tokens will be issued after enrollment of the new second factors.\n        // They need to be updated on the user.\n        await this.user._updateTokensIfNecessary(finalizeMfaResponse);\n        // The user needs to be reloaded to get the new multi-factor information\n        // from server. USER_RELOADED event will be triggered and `enrolledFactors`\n        // will be updated.\n        return this.user.reload();\n    }\n    async unenroll(infoOrUid) {\n        const mfaEnrollmentId = typeof infoOrUid === 'string' ? infoOrUid : infoOrUid.uid;\n        const idToken = await this.user.getIdToken();\n        try {\n            const idTokenResponse = await _logoutIfInvalidated(this.user, withdrawMfa(this.user.auth, {\n                idToken,\n                mfaEnrollmentId\n            }));\n            // Remove the second factor from the user's list.\n            this.enrolledFactors = this.enrolledFactors.filter(({ uid }) => uid !== mfaEnrollmentId);\n            // Depending on whether the backend decided to revoke the user's session,\n            // the tokenResponse may be empty. If the tokens were not updated (and they\n            // are now invalid), reloading the user will discover this and invalidate\n            // the user's state accordingly.\n            await this.user._updateTokensIfNecessary(idTokenResponse);\n            await this.user.reload();\n        }\n        catch (e) {\n            throw e;\n        }\n    }\n}\nconst multiFactorUserCache = new WeakMap();\n/**\n * The {@link MultiFactorUser} corresponding to the user.\n *\n * @remarks\n * This is used to access all multi-factor properties and operations related to the user.\n *\n * @param user - The user.\n *\n * @public\n */\nfunction multiFactor(user) {\n    const userModular = getModularInstance(user);\n    if (!multiFactorUserCache.has(userModular)) {\n        multiFactorUserCache.set(userModular, MultiFactorUserImpl._fromUser(userModular));\n    }\n    return multiFactorUserCache.get(userModular);\n}\n\nconst STORAGE_AVAILABLE_KEY = '__sak';\n\n/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n// There are two different browser persistence types: local and session.\n// Both have the same implementation but use a different underlying storage\n// object.\nclass BrowserPersistenceClass {\n    constructor(storageRetriever, type) {\n        this.storageRetriever = storageRetriever;\n        this.type = type;\n    }\n    _isAvailable() {\n        try {\n            if (!this.storage) {\n                return Promise.resolve(false);\n            }\n            this.storage.setItem(STORAGE_AVAILABLE_KEY, '1');\n            this.storage.removeItem(STORAGE_AVAILABLE_KEY);\n            return Promise.resolve(true);\n        }\n        catch (_a) {\n            return Promise.resolve(false);\n        }\n    }\n    _set(key, value) {\n        this.storage.setItem(key, JSON.stringify(value));\n        return Promise.resolve();\n    }\n    _get(key) {\n        const json = this.storage.getItem(key);\n        return Promise.resolve(json ? JSON.parse(json) : null);\n    }\n    _remove(key) {\n        this.storage.removeItem(key);\n        return Promise.resolve();\n    }\n    get storage() {\n        return this.storageRetriever();\n    }\n}\n\n/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n// The polling period in case events are not supported\nconst _POLLING_INTERVAL_MS$1 = 1000;\n// The IE 10 localStorage cross tab synchronization delay in milliseconds\nconst IE10_LOCAL_STORAGE_SYNC_DELAY = 10;\nclass BrowserLocalPersistence extends BrowserPersistenceClass {\n    constructor() {\n        super(() => window.localStorage, \"LOCAL\" /* PersistenceType.LOCAL */);\n        this.boundEventHandler = (event, poll) => this.onStorageEvent(event, poll);\n        this.listeners = {};\n        this.localCache = {};\n        // setTimeout return value is platform specific\n        // eslint-disable-next-line @typescript-eslint/no-explicit-any\n        this.pollTimer = null;\n        // Whether to use polling instead of depending on window events\n        this.fallbackToPolling = _isMobileBrowser();\n        this._shouldAllowMigration = true;\n    }\n    forAllChangedKeys(cb) {\n        // Check all keys with listeners on them.\n        for (const key of Object.keys(this.listeners)) {\n            // Get value from localStorage.\n            const newValue = this.storage.getItem(key);\n            const oldValue = this.localCache[key];\n            // If local map value does not match, trigger listener with storage event.\n            // Differentiate this simulated event from the real storage event.\n            if (newValue !== oldValue) {\n                cb(key, oldValue, newValue);\n            }\n        }\n    }\n    onStorageEvent(event, poll = false) {\n        // Key would be null in some situations, like when localStorage is cleared\n        if (!event.key) {\n            this.forAllChangedKeys((key, _oldValue, newValue) => {\n                this.notifyListeners(key, newValue);\n            });\n            return;\n        }\n        const key = event.key;\n        // Check the mechanism how this event was detected.\n        // The first event will dictate the mechanism to be used.\n        if (poll) {\n            // Environment detects storage changes via polling.\n            // Remove storage event listener to prevent possible event duplication.\n            this.detachListener();\n        }\n        else {\n            // Environment detects storage changes via storage event listener.\n            // Remove polling listener to prevent possible event duplication.\n            this.stopPolling();\n        }\n        const triggerListeners = () => {\n            // Keep local map up to date in case storage event is triggered before\n            // poll.\n            const storedValue = this.storage.getItem(key);\n            if (!poll && this.localCache[key] === storedValue) {\n                // Real storage event which has already been detected, do nothing.\n                // This seems to trigger in some IE browsers for some reason.\n                return;\n            }\n            this.notifyListeners(key, storedValue);\n        };\n        const storedValue = this.storage.getItem(key);\n        if (_isIE10() &&\n            storedValue !== event.newValue &&\n            event.newValue !== event.oldValue) {\n            // IE 10 has this weird bug where a storage event would trigger with the\n            // correct key, oldValue and newValue but localStorage.getItem(key) does\n            // not yield the updated value until a few milliseconds. This ensures\n            // this recovers from that situation.\n            setTimeout(triggerListeners, IE10_LOCAL_STORAGE_SYNC_DELAY);\n        }\n        else {\n            triggerListeners();\n        }\n    }\n    notifyListeners(key, value) {\n        this.localCache[key] = value;\n        const listeners = this.listeners[key];\n        if (listeners) {\n            for (const listener of Array.from(listeners)) {\n                listener(value ? JSON.parse(value) : value);\n            }\n        }\n    }\n    startPolling() {\n        this.stopPolling();\n        this.pollTimer = setInterval(() => {\n            this.forAllChangedKeys((key, oldValue, newValue) => {\n                this.onStorageEvent(new StorageEvent('storage', {\n                    key,\n                    oldValue,\n                    newValue\n                }), \n                /* poll */ true);\n            });\n        }, _POLLING_INTERVAL_MS$1);\n    }\n    stopPolling() {\n        if (this.pollTimer) {\n            clearInterval(this.pollTimer);\n            this.pollTimer = null;\n        }\n    }\n    attachListener() {\n        window.addEventListener('storage', this.boundEventHandler);\n    }\n    detachListener() {\n        window.removeEventListener('storage', this.boundEventHandler);\n    }\n    _addListener(key, listener) {\n        if (Object.keys(this.listeners).length === 0) {\n            // Whether browser can detect storage event when it had already been pushed to the background.\n            // This may happen in some mobile browsers. A localStorage change in the foreground window\n            // will not be detected in the background window via the storage event.\n            // This was detected in iOS 7.x mobile browsers\n            if (this.fallbackToPolling) {\n                this.startPolling();\n            }\n            else {\n                this.attachListener();\n            }\n        }\n        if (!this.listeners[key]) {\n            this.listeners[key] = new Set();\n            // Populate the cache to avoid spuriously triggering on first poll.\n            this.localCache[key] = this.storage.getItem(key);\n        }\n        this.listeners[key].add(listener);\n    }\n    _removeListener(key, listener) {\n        if (this.listeners[key]) {\n            this.listeners[key].delete(listener);\n            if (this.listeners[key].size === 0) {\n                delete this.listeners[key];\n            }\n        }\n        if (Object.keys(this.listeners).length === 0) {\n            this.detachListener();\n            this.stopPolling();\n        }\n    }\n    // Update local cache on base operations:\n    async _set(key, value) {\n        await super._set(key, value);\n        this.localCache[key] = JSON.stringify(value);\n    }\n    async _get(key) {\n        const value = await super._get(key);\n        this.localCache[key] = JSON.stringify(value);\n        return value;\n    }\n    async _remove(key) {\n        await super._remove(key);\n        delete this.localCache[key];\n    }\n}\nBrowserLocalPersistence.type = 'LOCAL';\n/**\n * An implementation of {@link Persistence} of type `LOCAL` using `localStorage`\n * for the underlying storage.\n *\n * @public\n */\nconst browserLocalPersistence = BrowserLocalPersistence;\n\n/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nclass BrowserSessionPersistence extends BrowserPersistenceClass {\n    constructor() {\n        super(() => window.sessionStorage, \"SESSION\" /* PersistenceType.SESSION */);\n    }\n    _addListener(_key, _listener) {\n        // Listeners are not supported for session storage since it cannot be shared across windows\n        return;\n    }\n    _removeListener(_key, _listener) {\n        // Listeners are not supported for session storage since it cannot be shared across windows\n        return;\n    }\n}\nBrowserSessionPersistence.type = 'SESSION';\n/**\n * An implementation of {@link Persistence} of `SESSION` using `sessionStorage`\n * for the underlying storage.\n *\n * @public\n */\nconst browserSessionPersistence = BrowserSessionPersistence;\n\n/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Shim for Promise.allSettled, note the slightly different format of `fulfilled` vs `status`.\n *\n * @param promises - Array of promises to wait on.\n */\nfunction _allSettled(promises) {\n    return Promise.all(promises.map(async (promise) => {\n        try {\n            const value = await promise;\n            return {\n                fulfilled: true,\n                value\n            };\n        }\n        catch (reason) {\n            return {\n                fulfilled: false,\n                reason\n            };\n        }\n    }));\n}\n\n/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Interface class for receiving messages.\n *\n */\nclass Receiver {\n    constructor(eventTarget) {\n        this.eventTarget = eventTarget;\n        this.handlersMap = {};\n        this.boundEventHandler = this.handleEvent.bind(this);\n    }\n    /**\n     * Obtain an instance of a Receiver for a given event target, if none exists it will be created.\n     *\n     * @param eventTarget - An event target (such as window or self) through which the underlying\n     * messages will be received.\n     */\n    static _getInstance(eventTarget) {\n        // The results are stored in an array since objects can't be keys for other\n        // objects. In addition, setting a unique property on an event target as a\n        // hash map key may not be allowed due to CORS restrictions.\n        const existingInstance = this.receivers.find(receiver => receiver.isListeningto(eventTarget));\n        if (existingInstance) {\n            return existingInstance;\n        }\n        const newInstance = new Receiver(eventTarget);\n        this.receivers.push(newInstance);\n        return newInstance;\n    }\n    isListeningto(eventTarget) {\n        return this.eventTarget === eventTarget;\n    }\n    /**\n     * Fans out a MessageEvent to the appropriate listeners.\n     *\n     * @remarks\n     * Sends an {@link Status.ACK} upon receipt and a {@link Status.DONE} once all handlers have\n     * finished processing.\n     *\n     * @param event - The MessageEvent.\n     *\n     */\n    async handleEvent(event) {\n        const messageEvent = event;\n        const { eventId, eventType, data } = messageEvent.data;\n        const handlers = this.handlersMap[eventType];\n        if (!(handlers === null || handlers === void 0 ? void 0 : handlers.size)) {\n            return;\n        }\n        messageEvent.ports[0].postMessage({\n            status: \"ack\" /* _Status.ACK */,\n            eventId,\n            eventType\n        });\n        const promises = Array.from(handlers).map(async (handler) => handler(messageEvent.origin, data));\n        const response = await _allSettled(promises);\n        messageEvent.ports[0].postMessage({\n            status: \"done\" /* _Status.DONE */,\n            eventId,\n            eventType,\n            response\n        });\n    }\n    /**\n     * Subscribe an event handler for a particular event.\n     *\n     * @param eventType - Event name to subscribe to.\n     * @param eventHandler - The event handler which should receive the events.\n     *\n     */\n    _subscribe(eventType, eventHandler) {\n        if (Object.keys(this.handlersMap).length === 0) {\n            this.eventTarget.addEventListener('message', this.boundEventHandler);\n        }\n        if (!this.handlersMap[eventType]) {\n            this.handlersMap[eventType] = new Set();\n        }\n        this.handlersMap[eventType].add(eventHandler);\n    }\n    /**\n     * Unsubscribe an event handler from a particular event.\n     *\n     * @param eventType - Event name to unsubscribe from.\n     * @param eventHandler - Optional event handler, if none provided, unsubscribe all handlers on this event.\n     *\n     */\n    _unsubscribe(eventType, eventHandler) {\n        if (this.handlersMap[eventType] && eventHandler) {\n            this.handlersMap[eventType].delete(eventHandler);\n        }\n        if (!eventHandler || this.handlersMap[eventType].size === 0) {\n            delete this.handlersMap[eventType];\n        }\n        if (Object.keys(this.handlersMap).length === 0) {\n            this.eventTarget.removeEventListener('message', this.boundEventHandler);\n        }\n    }\n}\nReceiver.receivers = [];\n\n/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nfunction _generateEventId(prefix = '', digits = 10) {\n    let random = '';\n    for (let i = 0; i < digits; i++) {\n        random += Math.floor(Math.random() * 10);\n    }\n    return prefix + random;\n}\n\n/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Interface for sending messages and waiting for a completion response.\n *\n */\nclass Sender {\n    constructor(target) {\n        this.target = target;\n        this.handlers = new Set();\n    }\n    /**\n     * Unsubscribe the handler and remove it from our tracking Set.\n     *\n     * @param handler - The handler to unsubscribe.\n     */\n    removeMessageHandler(handler) {\n        if (handler.messageChannel) {\n            handler.messageChannel.port1.removeEventListener('message', handler.onMessage);\n            handler.messageChannel.port1.close();\n        }\n        this.handlers.delete(handler);\n    }\n    /**\n     * Send a message to the Receiver located at {@link target}.\n     *\n     * @remarks\n     * We'll first wait a bit for an ACK , if we get one we will wait significantly longer until the\n     * receiver has had a chance to fully process the event.\n     *\n     * @param eventType - Type of event to send.\n     * @param data - The payload of the event.\n     * @param timeout - Timeout for waiting on an ACK from the receiver.\n     *\n     * @returns An array of settled promises from all the handlers that were listening on the receiver.\n     */\n    async _send(eventType, data, timeout = 50 /* _TimeoutDuration.ACK */) {\n        const messageChannel = typeof MessageChannel !== 'undefined' ? new MessageChannel() : null;\n        if (!messageChannel) {\n            throw new Error(\"connection_unavailable\" /* _MessageError.CONNECTION_UNAVAILABLE */);\n        }\n        // Node timers and browser timers return fundamentally different types.\n        // We don't actually care what the value is but TS won't accept unknown and\n        // we can't cast properly in both environments.\n        // eslint-disable-next-line @typescript-eslint/no-explicit-any\n        let completionTimer;\n        let handler;\n        return new Promise((resolve, reject) => {\n            const eventId = _generateEventId('', 20);\n            messageChannel.port1.start();\n            const ackTimer = setTimeout(() => {\n                reject(new Error(\"unsupported_event\" /* _MessageError.UNSUPPORTED_EVENT */));\n            }, timeout);\n            handler = {\n                messageChannel,\n                onMessage(event) {\n                    const messageEvent = event;\n                    if (messageEvent.data.eventId !== eventId) {\n                        return;\n                    }\n                    switch (messageEvent.data.status) {\n                        case \"ack\" /* _Status.ACK */:\n                            // The receiver should ACK first.\n                            clearTimeout(ackTimer);\n                            completionTimer = setTimeout(() => {\n                                reject(new Error(\"timeout\" /* _MessageError.TIMEOUT */));\n                            }, 3000 /* _TimeoutDuration.COMPLETION */);\n                            break;\n                        case \"done\" /* _Status.DONE */:\n                            // Once the receiver's handlers are finished we will get the results.\n                            clearTimeout(completionTimer);\n                            resolve(messageEvent.data.response);\n                            break;\n                        default:\n                            clearTimeout(ackTimer);\n                            clearTimeout(completionTimer);\n                            reject(new Error(\"invalid_response\" /* _MessageError.INVALID_RESPONSE */));\n                            break;\n                    }\n                }\n            };\n            this.handlers.add(handler);\n            messageChannel.port1.addEventListener('message', handler.onMessage);\n            this.target.postMessage({\n                eventType,\n                eventId,\n                data\n            }, [messageChannel.port2]);\n        }).finally(() => {\n            if (handler) {\n                this.removeMessageHandler(handler);\n            }\n        });\n    }\n}\n\n/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Lazy accessor for window, since the compat layer won't tree shake this out,\n * we need to make sure not to mess with window unless we have to\n */\nfunction _window() {\n    return window;\n}\nfunction _setWindowLocation(url) {\n    _window().location.href = url;\n}\n\n/**\n * @license\n * Copyright 2020 Google LLC.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nfunction _isWorker() {\n    return (typeof _window()['WorkerGlobalScope'] !== 'undefined' &&\n        typeof _window()['importScripts'] === 'function');\n}\nasync function _getActiveServiceWorker() {\n    if (!(navigator === null || navigator === void 0 ? void 0 : navigator.serviceWorker)) {\n        return null;\n    }\n    try {\n        const registration = await navigator.serviceWorker.ready;\n        return registration.active;\n    }\n    catch (_a) {\n        return null;\n    }\n}\nfunction _getServiceWorkerController() {\n    var _a;\n    return ((_a = navigator === null || navigator === void 0 ? void 0 : navigator.serviceWorker) === null || _a === void 0 ? void 0 : _a.controller) || null;\n}\nfunction _getWorkerGlobalScope() {\n    return _isWorker() ? self : null;\n}\n\n/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nconst DB_NAME = 'firebaseLocalStorageDb';\nconst DB_VERSION = 1;\nconst DB_OBJECTSTORE_NAME = 'firebaseLocalStorage';\nconst DB_DATA_KEYPATH = 'fbase_key';\n/**\n * Promise wrapper for IDBRequest\n *\n * Unfortunately we can't cleanly extend Promise<T> since promises are not callable in ES6\n *\n */\nclass DBPromise {\n    constructor(request) {\n        this.request = request;\n    }\n    toPromise() {\n        return new Promise((resolve, reject) => {\n            this.request.addEventListener('success', () => {\n                resolve(this.request.result);\n            });\n            this.request.addEventListener('error', () => {\n                reject(this.request.error);\n            });\n        });\n    }\n}\nfunction getObjectStore(db, isReadWrite) {\n    return db\n        .transaction([DB_OBJECTSTORE_NAME], isReadWrite ? 'readwrite' : 'readonly')\n        .objectStore(DB_OBJECTSTORE_NAME);\n}\nfunction _deleteDatabase() {\n    const request = indexedDB.deleteDatabase(DB_NAME);\n    return new DBPromise(request).toPromise();\n}\nfunction _openDatabase() {\n    const request = indexedDB.open(DB_NAME, DB_VERSION);\n    return new Promise((resolve, reject) => {\n        request.addEventListener('error', () => {\n            reject(request.error);\n        });\n        request.addEventListener('upgradeneeded', () => {\n            const db = request.result;\n            try {\n                db.createObjectStore(DB_OBJECTSTORE_NAME, { keyPath: DB_DATA_KEYPATH });\n            }\n            catch (e) {\n                reject(e);\n            }\n        });\n        request.addEventListener('success', async () => {\n            const db = request.result;\n            // Strange bug that occurs in Firefox when multiple tabs are opened at the\n            // same time. The only way to recover seems to be deleting the database\n            // and re-initializing it.\n            // https://github.com/firebase/firebase-js-sdk/issues/634\n            if (!db.objectStoreNames.contains(DB_OBJECTSTORE_NAME)) {\n                // Need to close the database or else you get a `blocked` event\n                db.close();\n                await _deleteDatabase();\n                resolve(await _openDatabase());\n            }\n            else {\n                resolve(db);\n            }\n        });\n    });\n}\nasync function _putObject(db, key, value) {\n    const request = getObjectStore(db, true).put({\n        [DB_DATA_KEYPATH]: key,\n        value\n    });\n    return new DBPromise(request).toPromise();\n}\nasync function getObject(db, key) {\n    const request = getObjectStore(db, false).get(key);\n    const data = await new DBPromise(request).toPromise();\n    return data === undefined ? null : data.value;\n}\nfunction _deleteObject(db, key) {\n    const request = getObjectStore(db, true).delete(key);\n    return new DBPromise(request).toPromise();\n}\nconst _POLLING_INTERVAL_MS = 800;\nconst _TRANSACTION_RETRY_COUNT = 3;\nclass IndexedDBLocalPersistence {\n    constructor() {\n        this.type = \"LOCAL\" /* PersistenceType.LOCAL */;\n        this._shouldAllowMigration = true;\n        this.listeners = {};\n        this.localCache = {};\n        // setTimeout return value is platform specific\n        // eslint-disable-next-line @typescript-eslint/no-explicit-any\n        this.pollTimer = null;\n        this.pendingWrites = 0;\n        this.receiver = null;\n        this.sender = null;\n        this.serviceWorkerReceiverAvailable = false;\n        this.activeServiceWorker = null;\n        // Fire & forget the service worker registration as it may never resolve\n        this._workerInitializationPromise =\n            this.initializeServiceWorkerMessaging().then(() => { }, () => { });\n    }\n    async _openDb() {\n        if (this.db) {\n            return this.db;\n        }\n        this.db = await _openDatabase();\n        return this.db;\n    }\n    async _withRetries(op) {\n        let numAttempts = 0;\n        while (true) {\n            try {\n                const db = await this._openDb();\n                return await op(db);\n            }\n            catch (e) {\n                if (numAttempts++ > _TRANSACTION_RETRY_COUNT) {\n                    throw e;\n                }\n                if (this.db) {\n                    this.db.close();\n                    this.db = undefined;\n                }\n                // TODO: consider adding exponential backoff\n            }\n        }\n    }\n    /**\n     * IndexedDB events do not propagate from the main window to the worker context.  We rely on a\n     * postMessage interface to send these events to the worker ourselves.\n     */\n    async initializeServiceWorkerMessaging() {\n        return _isWorker() ? this.initializeReceiver() : this.initializeSender();\n    }\n    /**\n     * As the worker we should listen to events from the main window.\n     */\n    async initializeReceiver() {\n        this.receiver = Receiver._getInstance(_getWorkerGlobalScope());\n        // Refresh from persistence if we receive a KeyChanged message.\n        this.receiver._subscribe(\"keyChanged\" /* _EventType.KEY_CHANGED */, async (_origin, data) => {\n            const keys = await this._poll();\n            return {\n                keyProcessed: keys.includes(data.key)\n            };\n        });\n        // Let the sender know that we are listening so they give us more timeout.\n        this.receiver._subscribe(\"ping\" /* _EventType.PING */, async (_origin, _data) => {\n            return [\"keyChanged\" /* _EventType.KEY_CHANGED */];\n        });\n    }\n    /**\n     * As the main window, we should let the worker know when keys change (set and remove).\n     *\n     * @remarks\n     * {@link https://developer.mozilla.org/en-US/docs/Web/API/ServiceWorkerContainer/ready | ServiceWorkerContainer.ready}\n     * may not resolve.\n     */\n    async initializeSender() {\n        var _a, _b;\n        // Check to see if there's an active service worker.\n        this.activeServiceWorker = await _getActiveServiceWorker();\n        if (!this.activeServiceWorker) {\n            return;\n        }\n        this.sender = new Sender(this.activeServiceWorker);\n        // Ping the service worker to check what events they can handle.\n        const results = await this.sender._send(\"ping\" /* _EventType.PING */, {}, 800 /* _TimeoutDuration.LONG_ACK */);\n        if (!results) {\n            return;\n        }\n        if (((_a = results[0]) === null || _a === void 0 ? void 0 : _a.fulfilled) &&\n            ((_b = results[0]) === null || _b === void 0 ? void 0 : _b.value.includes(\"keyChanged\" /* _EventType.KEY_CHANGED */))) {\n            this.serviceWorkerReceiverAvailable = true;\n        }\n    }\n    /**\n     * Let the worker know about a changed key, the exact key doesn't technically matter since the\n     * worker will just trigger a full sync anyway.\n     *\n     * @remarks\n     * For now, we only support one service worker per page.\n     *\n     * @param key - Storage key which changed.\n     */\n    async notifyServiceWorker(key) {\n        if (!this.sender ||\n            !this.activeServiceWorker ||\n            _getServiceWorkerController() !== this.activeServiceWorker) {\n            return;\n        }\n        try {\n            await this.sender._send(\"keyChanged\" /* _EventType.KEY_CHANGED */, { key }, \n            // Use long timeout if receiver has previously responded to a ping from us.\n            this.serviceWorkerReceiverAvailable\n                ? 800 /* _TimeoutDuration.LONG_ACK */\n                : 50 /* _TimeoutDuration.ACK */);\n        }\n        catch (_a) {\n            // This is a best effort approach. Ignore errors.\n        }\n    }\n    async _isAvailable() {\n        try {\n            if (!indexedDB) {\n                return false;\n            }\n            const db = await _openDatabase();\n            await _putObject(db, STORAGE_AVAILABLE_KEY, '1');\n            await _deleteObject(db, STORAGE_AVAILABLE_KEY);\n            return true;\n        }\n        catch (_a) { }\n        return false;\n    }\n    async _withPendingWrite(write) {\n        this.pendingWrites++;\n        try {\n            await write();\n        }\n        finally {\n            this.pendingWrites--;\n        }\n    }\n    async _set(key, value) {\n        return this._withPendingWrite(async () => {\n            await this._withRetries((db) => _putObject(db, key, value));\n            this.localCache[key] = value;\n            return this.notifyServiceWorker(key);\n        });\n    }\n    async _get(key) {\n        const obj = (await this._withRetries((db) => getObject(db, key)));\n        this.localCache[key] = obj;\n        return obj;\n    }\n    async _remove(key) {\n        return this._withPendingWrite(async () => {\n            await this._withRetries((db) => _deleteObject(db, key));\n            delete this.localCache[key];\n            return this.notifyServiceWorker(key);\n        });\n    }\n    async _poll() {\n        // TODO: check if we need to fallback if getAll is not supported\n        const result = await this._withRetries((db) => {\n            const getAllRequest = getObjectStore(db, false).getAll();\n            return new DBPromise(getAllRequest).toPromise();\n        });\n        if (!result) {\n            return [];\n        }\n        // If we have pending writes in progress abort, we'll get picked up on the next poll\n        if (this.pendingWrites !== 0) {\n            return [];\n        }\n        const keys = [];\n        const keysInResult = new Set();\n        if (result.length !== 0) {\n            for (const { fbase_key: key, value } of result) {\n                keysInResult.add(key);\n                if (JSON.stringify(this.localCache[key]) !== JSON.stringify(value)) {\n                    this.notifyListeners(key, value);\n                    keys.push(key);\n                }\n            }\n        }\n        for (const localKey of Object.keys(this.localCache)) {\n            if (this.localCache[localKey] && !keysInResult.has(localKey)) {\n                // Deleted\n                this.notifyListeners(localKey, null);\n                keys.push(localKey);\n            }\n        }\n        return keys;\n    }\n    notifyListeners(key, newValue) {\n        this.localCache[key] = newValue;\n        const listeners = this.listeners[key];\n        if (listeners) {\n            for (const listener of Array.from(listeners)) {\n                listener(newValue);\n            }\n        }\n    }\n    startPolling() {\n        this.stopPolling();\n        this.pollTimer = setInterval(async () => this._poll(), _POLLING_INTERVAL_MS);\n    }\n    stopPolling() {\n        if (this.pollTimer) {\n            clearInterval(this.pollTimer);\n            this.pollTimer = null;\n        }\n    }\n    _addListener(key, listener) {\n        if (Object.keys(this.listeners).length === 0) {\n            this.startPolling();\n        }\n        if (!this.listeners[key]) {\n            this.listeners[key] = new Set();\n            // Populate the cache to avoid spuriously triggering on first poll.\n            void this._get(key); // This can happen in the background async and we can return immediately.\n        }\n        this.listeners[key].add(listener);\n    }\n    _removeListener(key, listener) {\n        if (this.listeners[key]) {\n            this.listeners[key].delete(listener);\n            if (this.listeners[key].size === 0) {\n                delete this.listeners[key];\n            }\n        }\n        if (Object.keys(this.listeners).length === 0) {\n            this.stopPolling();\n        }\n    }\n}\nIndexedDBLocalPersistence.type = 'LOCAL';\n/**\n * An implementation of {@link Persistence} of type `LOCAL` using `indexedDB`\n * for the underlying storage.\n *\n * @public\n */\nconst indexedDBLocalPersistence = IndexedDBLocalPersistence;\n\n/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nfunction startSignInPhoneMfa(auth, request) {\n    return _performApiRequest(auth, \"POST\" /* HttpMethod.POST */, \"/v2/accounts/mfaSignIn:start\" /* Endpoint.START_MFA_SIGN_IN */, _addTidIfNecessary(auth, request));\n}\nfunction finalizeSignInPhoneMfa(auth, request) {\n    return _performApiRequest(auth, \"POST\" /* HttpMethod.POST */, \"/v2/accounts/mfaSignIn:finalize\" /* Endpoint.FINALIZE_MFA_SIGN_IN */, _addTidIfNecessary(auth, request));\n}\nfunction finalizeSignInTotpMfa(auth, request) {\n    return _performApiRequest(auth, \"POST\" /* HttpMethod.POST */, \"/v2/accounts/mfaSignIn:finalize\" /* Endpoint.FINALIZE_MFA_SIGN_IN */, _addTidIfNecessary(auth, request));\n}\n\n/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n// ReCaptcha will load using the same callback, so the callback function needs\n// to be kept around\nconst _JSLOAD_CALLBACK = _generateCallbackName('rcb');\nconst NETWORK_TIMEOUT_DELAY = new Delay(30000, 60000);\n/**\n * Loader for the GReCaptcha library. There should only ever be one of this.\n */\nclass ReCaptchaLoaderImpl {\n    constructor() {\n        var _a;\n        this.hostLanguage = '';\n        this.counter = 0;\n        /**\n         * Check for `render()` method. `window.grecaptcha` will exist if the Enterprise\n         * version of the ReCAPTCHA script was loaded by someone else (e.g. App Check) but\n         * `window.grecaptcha.render()` will not. Another load will add it.\n         */\n        this.librarySeparatelyLoaded = !!((_a = _window().grecaptcha) === null || _a === void 0 ? void 0 : _a.render);\n    }\n    load(auth, hl = '') {\n        _assert(isHostLanguageValid(hl), auth, \"argument-error\" /* AuthErrorCode.ARGUMENT_ERROR */);\n        if (this.shouldResolveImmediately(hl) && isV2(_window().grecaptcha)) {\n            return Promise.resolve(_window().grecaptcha);\n        }\n        return new Promise((resolve, reject) => {\n            const networkTimeout = _window().setTimeout(() => {\n                reject(_createError(auth, \"network-request-failed\" /* AuthErrorCode.NETWORK_REQUEST_FAILED */));\n            }, NETWORK_TIMEOUT_DELAY.get());\n            _window()[_JSLOAD_CALLBACK] = () => {\n                _window().clearTimeout(networkTimeout);\n                delete _window()[_JSLOAD_CALLBACK];\n                const recaptcha = _window().grecaptcha;\n                if (!recaptcha || !isV2(recaptcha)) {\n                    reject(_createError(auth, \"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */));\n                    return;\n                }\n                // Wrap the recaptcha render function so that we know if the developer has\n                // called it separately\n                const render = recaptcha.render;\n                recaptcha.render = (container, params) => {\n                    const widgetId = render(container, params);\n                    this.counter++;\n                    return widgetId;\n                };\n                this.hostLanguage = hl;\n                resolve(recaptcha);\n            };\n            const url = `${_recaptchaV2ScriptUrl()}?${querystring({\n                onload: _JSLOAD_CALLBACK,\n                render: 'explicit',\n                hl\n            })}`;\n            _loadJS(url).catch(() => {\n                clearTimeout(networkTimeout);\n                reject(_createError(auth, \"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */));\n            });\n        });\n    }\n    clearedOneInstance() {\n        this.counter--;\n    }\n    shouldResolveImmediately(hl) {\n        var _a;\n        // We can resolve immediately if:\n        //   • grecaptcha is already defined AND (\n        //     1. the requested language codes are the same OR\n        //     2. there exists already a ReCaptcha on the page\n        //     3. the library was already loaded by the app\n        // In cases (2) and (3), we _can't_ reload as it would break the recaptchas\n        // that are already in the page\n        return (!!((_a = _window().grecaptcha) === null || _a === void 0 ? void 0 : _a.render) &&\n            (hl === this.hostLanguage ||\n                this.counter > 0 ||\n                this.librarySeparatelyLoaded));\n    }\n}\nfunction isHostLanguageValid(hl) {\n    return hl.length <= 6 && /^\\s*[a-zA-Z0-9\\-]*\\s*$/.test(hl);\n}\nclass MockReCaptchaLoaderImpl {\n    async load(auth) {\n        return new MockReCaptcha(auth);\n    }\n    clearedOneInstance() { }\n}\n\n/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nconst RECAPTCHA_VERIFIER_TYPE = 'recaptcha';\nconst DEFAULT_PARAMS = {\n    theme: 'light',\n    type: 'image'\n};\n/**\n * An {@link https://www.google.com/recaptcha/ | reCAPTCHA}-based application verifier.\n *\n * @remarks\n * `RecaptchaVerifier` does not work in a Node.js environment.\n *\n * @public\n */\nclass RecaptchaVerifier {\n    /**\n     * @param authExtern - The corresponding Firebase {@link Auth} instance.\n     *\n     * @param containerOrId - The reCAPTCHA container parameter.\n     *\n     * @remarks\n     * This has different meaning depending on whether the reCAPTCHA is hidden or visible. For a\n     * visible reCAPTCHA the container must be empty. If a string is used, it has to correspond to\n     * an element ID. The corresponding element must also must be in the DOM at the time of\n     * initialization.\n     *\n     * @param parameters - The optional reCAPTCHA parameters.\n     *\n     * @remarks\n     * Check the reCAPTCHA docs for a comprehensive list. All parameters are accepted except for\n     * the sitekey. Firebase Auth backend provisions a reCAPTCHA for each project and will\n     * configure this upon rendering. For an invisible reCAPTCHA, a size key must have the value\n     * 'invisible'.\n     */\n    constructor(authExtern, containerOrId, parameters = Object.assign({}, DEFAULT_PARAMS)) {\n        this.parameters = parameters;\n        /**\n         * The application verifier type.\n         *\n         * @remarks\n         * For a reCAPTCHA verifier, this is 'recaptcha'.\n         */\n        this.type = RECAPTCHA_VERIFIER_TYPE;\n        this.destroyed = false;\n        this.widgetId = null;\n        this.tokenChangeListeners = new Set();\n        this.renderPromise = null;\n        this.recaptcha = null;\n        this.auth = _castAuth(authExtern);\n        this.isInvisible = this.parameters.size === 'invisible';\n        _assert(typeof document !== 'undefined', this.auth, \"operation-not-supported-in-this-environment\" /* AuthErrorCode.OPERATION_NOT_SUPPORTED */);\n        const container = typeof containerOrId === 'string'\n            ? document.getElementById(containerOrId)\n            : containerOrId;\n        _assert(container, this.auth, \"argument-error\" /* AuthErrorCode.ARGUMENT_ERROR */);\n        this.container = container;\n        this.parameters.callback = this.makeTokenCallback(this.parameters.callback);\n        this._recaptchaLoader = this.auth.settings.appVerificationDisabledForTesting\n            ? new MockReCaptchaLoaderImpl()\n            : new ReCaptchaLoaderImpl();\n        this.validateStartingState();\n        // TODO: Figure out if sdk version is needed\n    }\n    /**\n     * Waits for the user to solve the reCAPTCHA and resolves with the reCAPTCHA token.\n     *\n     * @returns A Promise for the reCAPTCHA token.\n     */\n    async verify() {\n        this.assertNotDestroyed();\n        const id = await this.render();\n        const recaptcha = this.getAssertedRecaptcha();\n        const response = recaptcha.getResponse(id);\n        if (response) {\n            return response;\n        }\n        return new Promise(resolve => {\n            const tokenChange = (token) => {\n                if (!token) {\n                    return; // Ignore token expirations.\n                }\n                this.tokenChangeListeners.delete(tokenChange);\n                resolve(token);\n            };\n            this.tokenChangeListeners.add(tokenChange);\n            if (this.isInvisible) {\n                recaptcha.execute(id);\n            }\n        });\n    }\n    /**\n     * Renders the reCAPTCHA widget on the page.\n     *\n     * @returns A Promise that resolves with the reCAPTCHA widget ID.\n     */\n    render() {\n        try {\n            this.assertNotDestroyed();\n        }\n        catch (e) {\n            // This method returns a promise. Since it's not async (we want to return the\n            // _same_ promise if rendering is still occurring), the API surface should\n            // reject with the error rather than just throw\n            return Promise.reject(e);\n        }\n        if (this.renderPromise) {\n            return this.renderPromise;\n        }\n        this.renderPromise = this.makeRenderPromise().catch(e => {\n            this.renderPromise = null;\n            throw e;\n        });\n        return this.renderPromise;\n    }\n    /** @internal */\n    _reset() {\n        this.assertNotDestroyed();\n        if (this.widgetId !== null) {\n            this.getAssertedRecaptcha().reset(this.widgetId);\n        }\n    }\n    /**\n     * Clears the reCAPTCHA widget from the page and destroys the instance.\n     */\n    clear() {\n        this.assertNotDestroyed();\n        this.destroyed = true;\n        this._recaptchaLoader.clearedOneInstance();\n        if (!this.isInvisible) {\n            this.container.childNodes.forEach(node => {\n                this.container.removeChild(node);\n            });\n        }\n    }\n    validateStartingState() {\n        _assert(!this.parameters.sitekey, this.auth, \"argument-error\" /* AuthErrorCode.ARGUMENT_ERROR */);\n        _assert(this.isInvisible || !this.container.hasChildNodes(), this.auth, \"argument-error\" /* AuthErrorCode.ARGUMENT_ERROR */);\n        _assert(typeof document !== 'undefined', this.auth, \"operation-not-supported-in-this-environment\" /* AuthErrorCode.OPERATION_NOT_SUPPORTED */);\n    }\n    makeTokenCallback(existing) {\n        return token => {\n            this.tokenChangeListeners.forEach(listener => listener(token));\n            if (typeof existing === 'function') {\n                existing(token);\n            }\n            else if (typeof existing === 'string') {\n                const globalFunc = _window()[existing];\n                if (typeof globalFunc === 'function') {\n                    globalFunc(token);\n                }\n            }\n        };\n    }\n    assertNotDestroyed() {\n        _assert(!this.destroyed, this.auth, \"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */);\n    }\n    async makeRenderPromise() {\n        await this.init();\n        if (!this.widgetId) {\n            let container = this.container;\n            if (!this.isInvisible) {\n                const guaranteedEmpty = document.createElement('div');\n                container.appendChild(guaranteedEmpty);\n                container = guaranteedEmpty;\n            }\n            this.widgetId = this.getAssertedRecaptcha().render(container, this.parameters);\n        }\n        return this.widgetId;\n    }\n    async init() {\n        _assert(_isHttpOrHttps() && !_isWorker(), this.auth, \"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */);\n        await domReady();\n        this.recaptcha = await this._recaptchaLoader.load(this.auth, this.auth.languageCode || undefined);\n        const siteKey = await getRecaptchaParams(this.auth);\n        _assert(siteKey, this.auth, \"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */);\n        this.parameters.sitekey = siteKey;\n    }\n    getAssertedRecaptcha() {\n        _assert(this.recaptcha, this.auth, \"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */);\n        return this.recaptcha;\n    }\n}\nfunction domReady() {\n    let resolver = null;\n    return new Promise(resolve => {\n        if (document.readyState === 'complete') {\n            resolve();\n            return;\n        }\n        // Document not ready, wait for load before resolving.\n        // Save resolver, so we can remove listener in case it was externally\n        // cancelled.\n        resolver = () => resolve();\n        window.addEventListener('load', resolver);\n    }).catch(e => {\n        if (resolver) {\n            window.removeEventListener('load', resolver);\n        }\n        throw e;\n    });\n}\n\n/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nclass ConfirmationResultImpl {\n    constructor(verificationId, onConfirmation) {\n        this.verificationId = verificationId;\n        this.onConfirmation = onConfirmation;\n    }\n    confirm(verificationCode) {\n        const authCredential = PhoneAuthCredential._fromVerification(this.verificationId, verificationCode);\n        return this.onConfirmation(authCredential);\n    }\n}\n/**\n * Asynchronously signs in using a phone number.\n *\n * @remarks\n * This method sends a code via SMS to the given\n * phone number, and returns a {@link ConfirmationResult}. After the user\n * provides the code sent to their phone, call {@link ConfirmationResult.confirm}\n * with the code to sign the user in.\n *\n * For abuse prevention, this method requires a {@link ApplicationVerifier}.\n * This SDK includes an implementation based on reCAPTCHA v2, {@link RecaptchaVerifier}.\n * This function can work on other platforms that do not support the\n * {@link RecaptchaVerifier} (like React Native), but you need to use a\n * third-party {@link ApplicationVerifier} implementation.\n *\n * If you've enabled project-level reCAPTCHA Enterprise bot protection in\n * Enforce mode, you can omit the {@link ApplicationVerifier}.\n *\n * This method does not work in a Node.js environment or with {@link Auth} instances created with a\n * {@link @firebase/app#FirebaseServerApp}.\n *\n * @example\n * ```javascript\n * // 'recaptcha-container' is the ID of an element in the DOM.\n * const applicationVerifier = new firebase.auth.RecaptchaVerifier('recaptcha-container');\n * const confirmationResult = await signInWithPhoneNumber(auth, phoneNumber, applicationVerifier);\n * // Obtain a verificationCode from the user.\n * const credential = await confirmationResult.confirm(verificationCode);\n * ```\n *\n * @param auth - The {@link Auth} instance.\n * @param phoneNumber - The user's phone number in E.164 format (e.g. +16505550101).\n * @param appVerifier - The {@link ApplicationVerifier}.\n *\n * @public\n */\nasync function signInWithPhoneNumber(auth, phoneNumber, appVerifier) {\n    if (_isFirebaseServerApp(auth.app)) {\n        return Promise.reject(_serverAppCurrentUserOperationNotSupportedError(auth));\n    }\n    const authInternal = _castAuth(auth);\n    const verificationId = await _verifyPhoneNumber(authInternal, phoneNumber, getModularInstance(appVerifier));\n    return new ConfirmationResultImpl(verificationId, cred => signInWithCredential(authInternal, cred));\n}\n/**\n * Links the user account with the given phone number.\n *\n * @remarks\n * This method does not work in a Node.js environment.\n *\n * @param user - The user.\n * @param phoneNumber - The user's phone number in E.164 format (e.g. +16505550101).\n * @param appVerifier - The {@link ApplicationVerifier}.\n *\n * @public\n */\nasync function linkWithPhoneNumber(user, phoneNumber, appVerifier) {\n    const userInternal = getModularInstance(user);\n    await _assertLinkedStatus(false, userInternal, \"phone\" /* ProviderId.PHONE */);\n    const verificationId = await _verifyPhoneNumber(userInternal.auth, phoneNumber, getModularInstance(appVerifier));\n    return new ConfirmationResultImpl(verificationId, cred => linkWithCredential(userInternal, cred));\n}\n/**\n * Re-authenticates a user using a fresh phone credential.\n *\n * @remarks\n * Use before operations such as {@link updatePassword} that require tokens from recent sign-in attempts.\n *\n * This method does not work in a Node.js environment or on any {@link User} signed in by\n * {@link Auth} instances created with a {@link @firebase/app#FirebaseServerApp}.\n *\n * @param user - The user.\n * @param phoneNumber - The user's phone number in E.164 format (e.g. +16505550101).\n * @param appVerifier - The {@link ApplicationVerifier}.\n *\n * @public\n */\nasync function reauthenticateWithPhoneNumber(user, phoneNumber, appVerifier) {\n    const userInternal = getModularInstance(user);\n    if (_isFirebaseServerApp(userInternal.auth.app)) {\n        return Promise.reject(_serverAppCurrentUserOperationNotSupportedError(userInternal.auth));\n    }\n    const verificationId = await _verifyPhoneNumber(userInternal.auth, phoneNumber, getModularInstance(appVerifier));\n    return new ConfirmationResultImpl(verificationId, cred => reauthenticateWithCredential(userInternal, cred));\n}\n/**\n * Returns a verification ID to be used in conjunction with the SMS code that is sent.\n *\n */\nasync function _verifyPhoneNumber(auth, options, verifier) {\n    var _a;\n    if (!auth._getRecaptchaConfig()) {\n        try {\n            await _initializeRecaptchaConfig(auth);\n        }\n        catch (error) {\n            // If an error occurs while fetching the config, there is no way to know the enablement state\n            // of Phone provider, so we proceed with recaptcha V2 verification.\n            // The error is likely \"recaptchaKey undefined\", as reCAPTCHA Enterprise is not\n            // enabled for any provider.\n            console.log('Failed to initialize reCAPTCHA Enterprise config. Triggering the reCAPTCHA v2 verification.');\n        }\n    }\n    try {\n        let phoneInfoOptions;\n        if (typeof options === 'string') {\n            phoneInfoOptions = {\n                phoneNumber: options\n            };\n        }\n        else {\n            phoneInfoOptions = options;\n        }\n        if ('session' in phoneInfoOptions) {\n            const session = phoneInfoOptions.session;\n            if ('phoneNumber' in phoneInfoOptions) {\n                _assert(session.type === \"enroll\" /* MultiFactorSessionType.ENROLL */, auth, \"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */);\n                const startPhoneMfaEnrollmentRequest = {\n                    idToken: session.credential,\n                    phoneEnrollmentInfo: {\n                        phoneNumber: phoneInfoOptions.phoneNumber,\n                        clientType: \"CLIENT_TYPE_WEB\" /* RecaptchaClientType.WEB */\n                    }\n                };\n                const startEnrollPhoneMfaActionCallback = async (authInstance, request) => {\n                    // If reCAPTCHA Enterprise token is FAKE_TOKEN, fetch reCAPTCHA v2 token and inject into request.\n                    if (request.phoneEnrollmentInfo.captchaResponse === FAKE_TOKEN) {\n                        _assert((verifier === null || verifier === void 0 ? void 0 : verifier.type) === RECAPTCHA_VERIFIER_TYPE, authInstance, \"argument-error\" /* AuthErrorCode.ARGUMENT_ERROR */);\n                        const requestWithRecaptchaV2 = await injectRecaptchaV2Token(authInstance, request, verifier);\n                        return startEnrollPhoneMfa(authInstance, requestWithRecaptchaV2);\n                    }\n                    return startEnrollPhoneMfa(authInstance, request);\n                };\n                const startPhoneMfaEnrollmentResponse = handleRecaptchaFlow(auth, startPhoneMfaEnrollmentRequest, \"mfaSmsEnrollment\" /* RecaptchaActionName.MFA_SMS_ENROLLMENT */, startEnrollPhoneMfaActionCallback, \"PHONE_PROVIDER\" /* RecaptchaAuthProvider.PHONE_PROVIDER */);\n                const response = await startPhoneMfaEnrollmentResponse.catch(error => {\n                    return Promise.reject(error);\n                });\n                return response.phoneSessionInfo.sessionInfo;\n            }\n            else {\n                _assert(session.type === \"signin\" /* MultiFactorSessionType.SIGN_IN */, auth, \"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */);\n                const mfaEnrollmentId = ((_a = phoneInfoOptions.multiFactorHint) === null || _a === void 0 ? void 0 : _a.uid) ||\n                    phoneInfoOptions.multiFactorUid;\n                _assert(mfaEnrollmentId, auth, \"missing-multi-factor-info\" /* AuthErrorCode.MISSING_MFA_INFO */);\n                const startPhoneMfaSignInRequest = {\n                    mfaPendingCredential: session.credential,\n                    mfaEnrollmentId,\n                    phoneSignInInfo: {\n                        clientType: \"CLIENT_TYPE_WEB\" /* RecaptchaClientType.WEB */\n                    }\n                };\n                const startSignInPhoneMfaActionCallback = async (authInstance, request) => {\n                    // If reCAPTCHA Enterprise token is FAKE_TOKEN, fetch reCAPTCHA v2 token and inject into request.\n                    if (request.phoneSignInInfo.captchaResponse === FAKE_TOKEN) {\n                        _assert((verifier === null || verifier === void 0 ? void 0 : verifier.type) === RECAPTCHA_VERIFIER_TYPE, authInstance, \"argument-error\" /* AuthErrorCode.ARGUMENT_ERROR */);\n                        const requestWithRecaptchaV2 = await injectRecaptchaV2Token(authInstance, request, verifier);\n                        return startSignInPhoneMfa(authInstance, requestWithRecaptchaV2);\n                    }\n                    return startSignInPhoneMfa(authInstance, request);\n                };\n                const startPhoneMfaSignInResponse = handleRecaptchaFlow(auth, startPhoneMfaSignInRequest, \"mfaSmsSignIn\" /* RecaptchaActionName.MFA_SMS_SIGNIN */, startSignInPhoneMfaActionCallback, \"PHONE_PROVIDER\" /* RecaptchaAuthProvider.PHONE_PROVIDER */);\n                const response = await startPhoneMfaSignInResponse.catch(error => {\n                    return Promise.reject(error);\n                });\n                return response.phoneResponseInfo.sessionInfo;\n            }\n        }\n        else {\n            const sendPhoneVerificationCodeRequest = {\n                phoneNumber: phoneInfoOptions.phoneNumber,\n                clientType: \"CLIENT_TYPE_WEB\" /* RecaptchaClientType.WEB */\n            };\n            const sendPhoneVerificationCodeActionCallback = async (authInstance, request) => {\n                // If reCAPTCHA Enterprise token is FAKE_TOKEN, fetch reCAPTCHA v2 token and inject into request.\n                if (request.captchaResponse === FAKE_TOKEN) {\n                    _assert((verifier === null || verifier === void 0 ? void 0 : verifier.type) === RECAPTCHA_VERIFIER_TYPE, authInstance, \"argument-error\" /* AuthErrorCode.ARGUMENT_ERROR */);\n                    const requestWithRecaptchaV2 = await injectRecaptchaV2Token(authInstance, request, verifier);\n                    return sendPhoneVerificationCode(authInstance, requestWithRecaptchaV2);\n                }\n                return sendPhoneVerificationCode(authInstance, request);\n            };\n            const sendPhoneVerificationCodeResponse = handleRecaptchaFlow(auth, sendPhoneVerificationCodeRequest, \"sendVerificationCode\" /* RecaptchaActionName.SEND_VERIFICATION_CODE */, sendPhoneVerificationCodeActionCallback, \"PHONE_PROVIDER\" /* RecaptchaAuthProvider.PHONE_PROVIDER */);\n            const response = await sendPhoneVerificationCodeResponse.catch(error => {\n                return Promise.reject(error);\n            });\n            return response.sessionInfo;\n        }\n    }\n    finally {\n        verifier === null || verifier === void 0 ? void 0 : verifier._reset();\n    }\n}\n/**\n * Updates the user's phone number.\n *\n * @remarks\n * This method does not work in a Node.js environment or on any {@link User} signed in by\n * {@link Auth} instances created with a {@link @firebase/app#FirebaseServerApp}.\n *\n * @example\n * ```\n * // 'recaptcha-container' is the ID of an element in the DOM.\n * const applicationVerifier = new RecaptchaVerifier('recaptcha-container');\n * const provider = new PhoneAuthProvider(auth);\n * const verificationId = await provider.verifyPhoneNumber('+16505550101', applicationVerifier);\n * // Obtain the verificationCode from the user.\n * const phoneCredential = PhoneAuthProvider.credential(verificationId, verificationCode);\n * await updatePhoneNumber(user, phoneCredential);\n * ```\n *\n * @param user - The user.\n * @param credential - A credential authenticating the new phone number.\n *\n * @public\n */\nasync function updatePhoneNumber(user, credential) {\n    const userInternal = getModularInstance(user);\n    if (_isFirebaseServerApp(userInternal.auth.app)) {\n        return Promise.reject(_serverAppCurrentUserOperationNotSupportedError(userInternal.auth));\n    }\n    await _link$1(userInternal, credential);\n}\n// Helper function that fetches and injects a reCAPTCHA v2 token into the request.\nasync function injectRecaptchaV2Token(auth, request, recaptchaV2Verifier) {\n    _assert(recaptchaV2Verifier.type === RECAPTCHA_VERIFIER_TYPE, auth, \"argument-error\" /* AuthErrorCode.ARGUMENT_ERROR */);\n    const recaptchaV2Token = await recaptchaV2Verifier.verify();\n    _assert(typeof recaptchaV2Token === 'string', auth, \"argument-error\" /* AuthErrorCode.ARGUMENT_ERROR */);\n    const newRequest = Object.assign({}, request);\n    if ('phoneEnrollmentInfo' in newRequest) {\n        const phoneNumber = newRequest.phoneEnrollmentInfo.phoneNumber;\n        const captchaResponse = newRequest.phoneEnrollmentInfo.captchaResponse;\n        const clientType = newRequest\n            .phoneEnrollmentInfo.clientType;\n        const recaptchaVersion = newRequest.phoneEnrollmentInfo.recaptchaVersion;\n        Object.assign(newRequest, {\n            'phoneEnrollmentInfo': {\n                phoneNumber,\n                recaptchaToken: recaptchaV2Token,\n                captchaResponse,\n                clientType,\n                recaptchaVersion\n            }\n        });\n        return newRequest;\n    }\n    else if ('phoneSignInInfo' in newRequest) {\n        const captchaResponse = newRequest.phoneSignInInfo.captchaResponse;\n        const clientType = newRequest\n            .phoneSignInInfo.clientType;\n        const recaptchaVersion = newRequest.phoneSignInInfo.recaptchaVersion;\n        Object.assign(newRequest, {\n            'phoneSignInInfo': {\n                recaptchaToken: recaptchaV2Token,\n                captchaResponse,\n                clientType,\n                recaptchaVersion\n            }\n        });\n        return newRequest;\n    }\n    else {\n        Object.assign(newRequest, { 'recaptchaToken': recaptchaV2Token });\n        return newRequest;\n    }\n}\n\n/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Provider for generating an {@link PhoneAuthCredential}.\n *\n * @remarks\n * `PhoneAuthProvider` does not work in a Node.js environment.\n *\n * @example\n * ```javascript\n * // 'recaptcha-container' is the ID of an element in the DOM.\n * const applicationVerifier = new RecaptchaVerifier('recaptcha-container');\n * const provider = new PhoneAuthProvider(auth);\n * const verificationId = await provider.verifyPhoneNumber('+16505550101', applicationVerifier);\n * // Obtain the verificationCode from the user.\n * const phoneCredential = PhoneAuthProvider.credential(verificationId, verificationCode);\n * const userCredential = await signInWithCredential(auth, phoneCredential);\n * ```\n *\n * @public\n */\nclass PhoneAuthProvider {\n    /**\n     * @param auth - The Firebase {@link Auth} instance in which sign-ins should occur.\n     *\n     */\n    constructor(auth) {\n        /** Always set to {@link ProviderId}.PHONE. */\n        this.providerId = PhoneAuthProvider.PROVIDER_ID;\n        this.auth = _castAuth(auth);\n    }\n    /**\n     *\n     * Starts a phone number authentication flow by sending a verification code to the given phone\n     * number.\n     *\n     * @example\n     * ```javascript\n     * const provider = new PhoneAuthProvider(auth);\n     * const verificationId = await provider.verifyPhoneNumber(phoneNumber, applicationVerifier);\n     * // Obtain verificationCode from the user.\n     * const authCredential = PhoneAuthProvider.credential(verificationId, verificationCode);\n     * const userCredential = await signInWithCredential(auth, authCredential);\n     * ```\n     *\n     * @example\n     * An alternative flow is provided using the `signInWithPhoneNumber` method.\n     * ```javascript\n     * const confirmationResult = signInWithPhoneNumber(auth, phoneNumber, applicationVerifier);\n     * // Obtain verificationCode from the user.\n     * const userCredential = confirmationResult.confirm(verificationCode);\n     * ```\n     *\n     * @param phoneInfoOptions - The user's {@link PhoneInfoOptions}. The phone number should be in\n     * E.164 format (e.g. +16505550101).\n     * @param applicationVerifier - An {@link ApplicationVerifier}, which prevents\n     * requests from unauthorized clients. This SDK includes an implementation\n     * based on reCAPTCHA v2, {@link RecaptchaVerifier}. If you've enabled\n     * reCAPTCHA Enterprise bot protection in Enforce mode, this parameter is\n     * optional; in all other configurations, the parameter is required.\n     *\n     * @returns A Promise for a verification ID that can be passed to\n     * {@link PhoneAuthProvider.credential} to identify this flow.\n     */\n    verifyPhoneNumber(phoneOptions, applicationVerifier) {\n        return _verifyPhoneNumber(this.auth, phoneOptions, getModularInstance(applicationVerifier));\n    }\n    /**\n     * Creates a phone auth credential, given the verification ID from\n     * {@link PhoneAuthProvider.verifyPhoneNumber} and the code that was sent to the user's\n     * mobile device.\n     *\n     * @example\n     * ```javascript\n     * const provider = new PhoneAuthProvider(auth);\n     * const verificationId = provider.verifyPhoneNumber(phoneNumber, applicationVerifier);\n     * // Obtain verificationCode from the user.\n     * const authCredential = PhoneAuthProvider.credential(verificationId, verificationCode);\n     * const userCredential = signInWithCredential(auth, authCredential);\n     * ```\n     *\n     * @example\n     * An alternative flow is provided using the `signInWithPhoneNumber` method.\n     * ```javascript\n     * const confirmationResult = await signInWithPhoneNumber(auth, phoneNumber, applicationVerifier);\n     * // Obtain verificationCode from the user.\n     * const userCredential = await confirmationResult.confirm(verificationCode);\n     * ```\n     *\n     * @param verificationId - The verification ID returned from {@link PhoneAuthProvider.verifyPhoneNumber}.\n     * @param verificationCode - The verification code sent to the user's mobile device.\n     *\n     * @returns The auth provider credential.\n     */\n    static credential(verificationId, verificationCode) {\n        return PhoneAuthCredential._fromVerification(verificationId, verificationCode);\n    }\n    /**\n     * Generates an {@link AuthCredential} from a {@link UserCredential}.\n     * @param userCredential - The user credential.\n     */\n    static credentialFromResult(userCredential) {\n        const credential = userCredential;\n        return PhoneAuthProvider.credentialFromTaggedObject(credential);\n    }\n    /**\n     * Returns an {@link AuthCredential} when passed an error.\n     *\n     * @remarks\n     *\n     * This method works for errors like\n     * `auth/account-exists-with-different-credentials`. This is useful for\n     * recovering when attempting to set a user's phone number but the number\n     * in question is already tied to another account. For example, the following\n     * code tries to update the current user's phone number, and if that\n     * fails, links the user with the account associated with that number:\n     *\n     * ```js\n     * const provider = new PhoneAuthProvider(auth);\n     * const verificationId = await provider.verifyPhoneNumber(number, verifier);\n     * try {\n     *   const code = ''; // Prompt the user for the verification code\n     *   await updatePhoneNumber(\n     *       auth.currentUser,\n     *       PhoneAuthProvider.credential(verificationId, code));\n     * } catch (e) {\n     *   if ((e as FirebaseError)?.code === 'auth/account-exists-with-different-credential') {\n     *     const cred = PhoneAuthProvider.credentialFromError(e);\n     *     await linkWithCredential(auth.currentUser, cred);\n     *   }\n     * }\n     *\n     * // At this point, auth.currentUser.phoneNumber === number.\n     * ```\n     *\n     * @param error - The error to generate a credential from.\n     */\n    static credentialFromError(error) {\n        return PhoneAuthProvider.credentialFromTaggedObject((error.customData || {}));\n    }\n    static credentialFromTaggedObject({ _tokenResponse: tokenResponse }) {\n        if (!tokenResponse) {\n            return null;\n        }\n        const { phoneNumber, temporaryProof } = tokenResponse;\n        if (phoneNumber && temporaryProof) {\n            return PhoneAuthCredential._fromTokenResponse(phoneNumber, temporaryProof);\n        }\n        return null;\n    }\n}\n/** Always set to {@link ProviderId}.PHONE. */\nPhoneAuthProvider.PROVIDER_ID = \"phone\" /* ProviderId.PHONE */;\n/** Always set to {@link SignInMethod}.PHONE. */\nPhoneAuthProvider.PHONE_SIGN_IN_METHOD = \"phone\" /* SignInMethod.PHONE */;\n\n/**\n * @license\n * Copyright 2021 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Chooses a popup/redirect resolver to use. This prefers the override (which\n * is directly passed in), and falls back to the property set on the auth\n * object. If neither are available, this function errors w/ an argument error.\n */\nfunction _withDefaultResolver(auth, resolverOverride) {\n    if (resolverOverride) {\n        return _getInstance(resolverOverride);\n    }\n    _assert(auth._popupRedirectResolver, auth, \"argument-error\" /* AuthErrorCode.ARGUMENT_ERROR */);\n    return auth._popupRedirectResolver;\n}\n\n/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nclass IdpCredential extends AuthCredential {\n    constructor(params) {\n        super(\"custom\" /* ProviderId.CUSTOM */, \"custom\" /* ProviderId.CUSTOM */);\n        this.params = params;\n    }\n    _getIdTokenResponse(auth) {\n        return signInWithIdp(auth, this._buildIdpRequest());\n    }\n    _linkToIdToken(auth, idToken) {\n        return signInWithIdp(auth, this._buildIdpRequest(idToken));\n    }\n    _getReauthenticationResolver(auth) {\n        return signInWithIdp(auth, this._buildIdpRequest());\n    }\n    _buildIdpRequest(idToken) {\n        const request = {\n            requestUri: this.params.requestUri,\n            sessionId: this.params.sessionId,\n            postBody: this.params.postBody,\n            tenantId: this.params.tenantId,\n            pendingToken: this.params.pendingToken,\n            returnSecureToken: true,\n            returnIdpCredential: true\n        };\n        if (idToken) {\n            request.idToken = idToken;\n        }\n        return request;\n    }\n}\nfunction _signIn(params) {\n    return _signInWithCredential(params.auth, new IdpCredential(params), params.bypassAuthState);\n}\nfunction _reauth(params) {\n    const { auth, user } = params;\n    _assert(user, auth, \"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */);\n    return _reauthenticate(user, new IdpCredential(params), params.bypassAuthState);\n}\nasync function _link(params) {\n    const { auth, user } = params;\n    _assert(user, auth, \"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */);\n    return _link$1(user, new IdpCredential(params), params.bypassAuthState);\n}\n\n/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Popup event manager. Handles the popup's entire lifecycle; listens to auth\n * events\n */\nclass AbstractPopupRedirectOperation {\n    constructor(auth, filter, resolver, user, bypassAuthState = false) {\n        this.auth = auth;\n        this.resolver = resolver;\n        this.user = user;\n        this.bypassAuthState = bypassAuthState;\n        this.pendingPromise = null;\n        this.eventManager = null;\n        this.filter = Array.isArray(filter) ? filter : [filter];\n    }\n    execute() {\n        return new Promise(async (resolve, reject) => {\n            this.pendingPromise = { resolve, reject };\n            try {\n                this.eventManager = await this.resolver._initialize(this.auth);\n                await this.onExecution();\n                this.eventManager.registerConsumer(this);\n            }\n            catch (e) {\n                this.reject(e);\n            }\n        });\n    }\n    async onAuthEvent(event) {\n        const { urlResponse, sessionId, postBody, tenantId, error, type } = event;\n        if (error) {\n            this.reject(error);\n            return;\n        }\n        const params = {\n            auth: this.auth,\n            requestUri: urlResponse,\n            sessionId: sessionId,\n            tenantId: tenantId || undefined,\n            postBody: postBody || undefined,\n            user: this.user,\n            bypassAuthState: this.bypassAuthState\n        };\n        try {\n            this.resolve(await this.getIdpTask(type)(params));\n        }\n        catch (e) {\n            this.reject(e);\n        }\n    }\n    onError(error) {\n        this.reject(error);\n    }\n    getIdpTask(type) {\n        switch (type) {\n            case \"signInViaPopup\" /* AuthEventType.SIGN_IN_VIA_POPUP */:\n            case \"signInViaRedirect\" /* AuthEventType.SIGN_IN_VIA_REDIRECT */:\n                return _signIn;\n            case \"linkViaPopup\" /* AuthEventType.LINK_VIA_POPUP */:\n            case \"linkViaRedirect\" /* AuthEventType.LINK_VIA_REDIRECT */:\n                return _link;\n            case \"reauthViaPopup\" /* AuthEventType.REAUTH_VIA_POPUP */:\n            case \"reauthViaRedirect\" /* AuthEventType.REAUTH_VIA_REDIRECT */:\n                return _reauth;\n            default:\n                _fail(this.auth, \"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */);\n        }\n    }\n    resolve(cred) {\n        debugAssert(this.pendingPromise, 'Pending promise was never set');\n        this.pendingPromise.resolve(cred);\n        this.unregisterAndCleanUp();\n    }\n    reject(error) {\n        debugAssert(this.pendingPromise, 'Pending promise was never set');\n        this.pendingPromise.reject(error);\n        this.unregisterAndCleanUp();\n    }\n    unregisterAndCleanUp() {\n        if (this.eventManager) {\n            this.eventManager.unregisterConsumer(this);\n        }\n        this.pendingPromise = null;\n        this.cleanUp();\n    }\n}\n\n/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nconst _POLL_WINDOW_CLOSE_TIMEOUT = new Delay(2000, 10000);\n/**\n * Authenticates a Firebase client using a popup-based OAuth authentication flow.\n *\n * @remarks\n * If succeeds, returns the signed in user along with the provider's credential. If sign in was\n * unsuccessful, returns an error object containing additional information about the error.\n *\n * This method does not work in a Node.js environment or with {@link Auth} instances created with a\n * {@link @firebase/app#FirebaseServerApp}.\n *\n * @example\n * ```javascript\n * // Sign in using a popup.\n * const provider = new FacebookAuthProvider();\n * const result = await signInWithPopup(auth, provider);\n *\n * // The signed-in user info.\n * const user = result.user;\n * // This gives you a Facebook Access Token.\n * const credential = provider.credentialFromResult(auth, result);\n * const token = credential.accessToken;\n * ```\n *\n * @param auth - The {@link Auth} instance.\n * @param provider - The provider to authenticate. The provider has to be an {@link OAuthProvider}.\n * Non-OAuth providers like {@link EmailAuthProvider} will throw an error.\n * @param resolver - An instance of {@link PopupRedirectResolver}, optional\n * if already supplied to {@link initializeAuth} or provided by {@link getAuth}.\n *\n * @public\n */\nasync function signInWithPopup(auth, provider, resolver) {\n    if (_isFirebaseServerApp(auth.app)) {\n        return Promise.reject(_createError(auth, \"operation-not-supported-in-this-environment\" /* AuthErrorCode.OPERATION_NOT_SUPPORTED */));\n    }\n    const authInternal = _castAuth(auth);\n    _assertInstanceOf(auth, provider, FederatedAuthProvider);\n    const resolverInternal = _withDefaultResolver(authInternal, resolver);\n    const action = new PopupOperation(authInternal, \"signInViaPopup\" /* AuthEventType.SIGN_IN_VIA_POPUP */, provider, resolverInternal);\n    return action.executeNotNull();\n}\n/**\n * Reauthenticates the current user with the specified {@link OAuthProvider} using a pop-up based\n * OAuth flow.\n *\n * @remarks\n * If the reauthentication is successful, the returned result will contain the user and the\n * provider's credential.\n *\n * This method does not work in a Node.js environment or on any {@link User} signed in by\n * {@link Auth} instances created with a {@link @firebase/app#FirebaseServerApp}.\n *\n * @example\n * ```javascript\n * // Sign in using a popup.\n * const provider = new FacebookAuthProvider();\n * const result = await signInWithPopup(auth, provider);\n * // Reauthenticate using a popup.\n * await reauthenticateWithPopup(result.user, provider);\n * ```\n *\n * @param user - The user.\n * @param provider - The provider to authenticate. The provider has to be an {@link OAuthProvider}.\n * Non-OAuth providers like {@link EmailAuthProvider} will throw an error.\n * @param resolver - An instance of {@link PopupRedirectResolver}, optional\n * if already supplied to {@link initializeAuth} or provided by {@link getAuth}.\n *\n * @public\n */\nasync function reauthenticateWithPopup(user, provider, resolver) {\n    const userInternal = getModularInstance(user);\n    if (_isFirebaseServerApp(userInternal.auth.app)) {\n        return Promise.reject(_createError(userInternal.auth, \"operation-not-supported-in-this-environment\" /* AuthErrorCode.OPERATION_NOT_SUPPORTED */));\n    }\n    _assertInstanceOf(userInternal.auth, provider, FederatedAuthProvider);\n    const resolverInternal = _withDefaultResolver(userInternal.auth, resolver);\n    const action = new PopupOperation(userInternal.auth, \"reauthViaPopup\" /* AuthEventType.REAUTH_VIA_POPUP */, provider, resolverInternal, userInternal);\n    return action.executeNotNull();\n}\n/**\n * Links the authenticated provider to the user account using a pop-up based OAuth flow.\n *\n * @remarks\n * If the linking is successful, the returned result will contain the user and the provider's credential.\n *\n * This method does not work in a Node.js environment.\n *\n * @example\n * ```javascript\n * // Sign in using some other provider.\n * const result = await signInWithEmailAndPassword(auth, email, password);\n * // Link using a popup.\n * const provider = new FacebookAuthProvider();\n * await linkWithPopup(result.user, provider);\n * ```\n *\n * @param user - The user.\n * @param provider - The provider to authenticate. The provider has to be an {@link OAuthProvider}.\n * Non-OAuth providers like {@link EmailAuthProvider} will throw an error.\n * @param resolver - An instance of {@link PopupRedirectResolver}, optional\n * if already supplied to {@link initializeAuth} or provided by {@link getAuth}.\n *\n * @public\n */\nasync function linkWithPopup(user, provider, resolver) {\n    const userInternal = getModularInstance(user);\n    _assertInstanceOf(userInternal.auth, provider, FederatedAuthProvider);\n    const resolverInternal = _withDefaultResolver(userInternal.auth, resolver);\n    const action = new PopupOperation(userInternal.auth, \"linkViaPopup\" /* AuthEventType.LINK_VIA_POPUP */, provider, resolverInternal, userInternal);\n    return action.executeNotNull();\n}\n/**\n * Popup event manager. Handles the popup's entire lifecycle; listens to auth\n * events\n *\n */\nclass PopupOperation extends AbstractPopupRedirectOperation {\n    constructor(auth, filter, provider, resolver, user) {\n        super(auth, filter, resolver, user);\n        this.provider = provider;\n        this.authWindow = null;\n        this.pollId = null;\n        if (PopupOperation.currentPopupAction) {\n            PopupOperation.currentPopupAction.cancel();\n        }\n        PopupOperation.currentPopupAction = this;\n    }\n    async executeNotNull() {\n        const result = await this.execute();\n        _assert(result, this.auth, \"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */);\n        return result;\n    }\n    async onExecution() {\n        debugAssert(this.filter.length === 1, 'Popup operations only handle one event');\n        const eventId = _generateEventId();\n        this.authWindow = await this.resolver._openPopup(this.auth, this.provider, this.filter[0], // There's always one, see constructor\n        eventId);\n        this.authWindow.associatedEvent = eventId;\n        // Check for web storage support and origin validation _after_ the popup is\n        // loaded. These operations are slow (~1 second or so) Rather than\n        // waiting on them before opening the window, optimistically open the popup\n        // and check for storage support at the same time. If storage support is\n        // not available, this will cause the whole thing to reject properly. It\n        // will also close the popup, but since the promise has already rejected,\n        // the popup closed by user poll will reject into the void.\n        this.resolver._originValidation(this.auth).catch(e => {\n            this.reject(e);\n        });\n        this.resolver._isIframeWebStorageSupported(this.auth, isSupported => {\n            if (!isSupported) {\n                this.reject(_createError(this.auth, \"web-storage-unsupported\" /* AuthErrorCode.WEB_STORAGE_UNSUPPORTED */));\n            }\n        });\n        // Handle user closure. Notice this does *not* use await\n        this.pollUserCancellation();\n    }\n    get eventId() {\n        var _a;\n        return ((_a = this.authWindow) === null || _a === void 0 ? void 0 : _a.associatedEvent) || null;\n    }\n    cancel() {\n        this.reject(_createError(this.auth, \"cancelled-popup-request\" /* AuthErrorCode.EXPIRED_POPUP_REQUEST */));\n    }\n    cleanUp() {\n        if (this.authWindow) {\n            this.authWindow.close();\n        }\n        if (this.pollId) {\n            window.clearTimeout(this.pollId);\n        }\n        this.authWindow = null;\n        this.pollId = null;\n        PopupOperation.currentPopupAction = null;\n    }\n    pollUserCancellation() {\n        const poll = () => {\n            var _a, _b;\n            if ((_b = (_a = this.authWindow) === null || _a === void 0 ? void 0 : _a.window) === null || _b === void 0 ? void 0 : _b.closed) {\n                // Make sure that there is sufficient time for whatever action to\n                // complete. The window could have closed but the sign in network\n                // call could still be in flight. This is specifically true for\n                // Firefox or if the opener is in an iframe, in which case the oauth\n                // helper closes the popup.\n                this.pollId = window.setTimeout(() => {\n                    this.pollId = null;\n                    this.reject(_createError(this.auth, \"popup-closed-by-user\" /* AuthErrorCode.POPUP_CLOSED_BY_USER */));\n                }, 8000 /* _Timeout.AUTH_EVENT */);\n                return;\n            }\n            this.pollId = window.setTimeout(poll, _POLL_WINDOW_CLOSE_TIMEOUT.get());\n        };\n        poll();\n    }\n}\n// Only one popup is ever shown at once. The lifecycle of the current popup\n// can be managed / cancelled by the constructor.\nPopupOperation.currentPopupAction = null;\n\n/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nconst PENDING_REDIRECT_KEY = 'pendingRedirect';\n// We only get one redirect outcome for any one auth, so just store it\n// in here.\nconst redirectOutcomeMap = new Map();\nclass RedirectAction extends AbstractPopupRedirectOperation {\n    constructor(auth, resolver, bypassAuthState = false) {\n        super(auth, [\n            \"signInViaRedirect\" /* AuthEventType.SIGN_IN_VIA_REDIRECT */,\n            \"linkViaRedirect\" /* AuthEventType.LINK_VIA_REDIRECT */,\n            \"reauthViaRedirect\" /* AuthEventType.REAUTH_VIA_REDIRECT */,\n            \"unknown\" /* AuthEventType.UNKNOWN */\n        ], resolver, undefined, bypassAuthState);\n        this.eventId = null;\n    }\n    /**\n     * Override the execute function; if we already have a redirect result, then\n     * just return it.\n     */\n    async execute() {\n        let readyOutcome = redirectOutcomeMap.get(this.auth._key());\n        if (!readyOutcome) {\n            try {\n                const hasPendingRedirect = await _getAndClearPendingRedirectStatus(this.resolver, this.auth);\n                const result = hasPendingRedirect ? await super.execute() : null;\n                readyOutcome = () => Promise.resolve(result);\n            }\n            catch (e) {\n                readyOutcome = () => Promise.reject(e);\n            }\n            redirectOutcomeMap.set(this.auth._key(), readyOutcome);\n        }\n        // If we're not bypassing auth state, the ready outcome should be set to\n        // null.\n        if (!this.bypassAuthState) {\n            redirectOutcomeMap.set(this.auth._key(), () => Promise.resolve(null));\n        }\n        return readyOutcome();\n    }\n    async onAuthEvent(event) {\n        if (event.type === \"signInViaRedirect\" /* AuthEventType.SIGN_IN_VIA_REDIRECT */) {\n            return super.onAuthEvent(event);\n        }\n        else if (event.type === \"unknown\" /* AuthEventType.UNKNOWN */) {\n            // This is a sentinel value indicating there's no pending redirect\n            this.resolve(null);\n            return;\n        }\n        if (event.eventId) {\n            const user = await this.auth._redirectUserForId(event.eventId);\n            if (user) {\n                this.user = user;\n                return super.onAuthEvent(event);\n            }\n            else {\n                this.resolve(null);\n            }\n        }\n    }\n    async onExecution() { }\n    cleanUp() { }\n}\nasync function _getAndClearPendingRedirectStatus(resolver, auth) {\n    const key = pendingRedirectKey(auth);\n    const persistence = resolverPersistence(resolver);\n    if (!(await persistence._isAvailable())) {\n        return false;\n    }\n    const hasPendingRedirect = (await persistence._get(key)) === 'true';\n    await persistence._remove(key);\n    return hasPendingRedirect;\n}\nasync function _setPendingRedirectStatus(resolver, auth) {\n    return resolverPersistence(resolver)._set(pendingRedirectKey(auth), 'true');\n}\nfunction _clearRedirectOutcomes() {\n    redirectOutcomeMap.clear();\n}\nfunction _overrideRedirectResult(auth, result) {\n    redirectOutcomeMap.set(auth._key(), result);\n}\nfunction resolverPersistence(resolver) {\n    return _getInstance(resolver._redirectPersistence);\n}\nfunction pendingRedirectKey(auth) {\n    return _persistenceKeyName(PENDING_REDIRECT_KEY, auth.config.apiKey, auth.name);\n}\n\n/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Authenticates a Firebase client using a full-page redirect flow.\n *\n * @remarks\n * To handle the results and errors for this operation, refer to {@link getRedirectResult}.\n * Follow the {@link https://firebase.google.com/docs/auth/web/redirect-best-practices\n * | best practices} when using {@link signInWithRedirect}.\n *\n * This method does not work in a Node.js environment or with {@link Auth} instances created with a\n * {@link @firebase/app#FirebaseServerApp}.\n *\n * @example\n * ```javascript\n * // Sign in using a redirect.\n * const provider = new FacebookAuthProvider();\n * // You can add additional scopes to the provider:\n * provider.addScope('user_birthday');\n * // Start a sign in process for an unauthenticated user.\n * await signInWithRedirect(auth, provider);\n * // This will trigger a full page redirect away from your app\n *\n * // After returning from the redirect when your app initializes you can obtain the result\n * const result = await getRedirectResult(auth);\n * if (result) {\n *   // This is the signed-in user\n *   const user = result.user;\n *   // This gives you a Facebook Access Token.\n *   const credential = provider.credentialFromResult(auth, result);\n *   const token = credential.accessToken;\n * }\n * // As this API can be used for sign-in, linking and reauthentication,\n * // check the operationType to determine what triggered this redirect\n * // operation.\n * const operationType = result.operationType;\n * ```\n *\n * @param auth - The {@link Auth} instance.\n * @param provider - The provider to authenticate. The provider has to be an {@link OAuthProvider}.\n * Non-OAuth providers like {@link EmailAuthProvider} will throw an error.\n * @param resolver - An instance of {@link PopupRedirectResolver}, optional\n * if already supplied to {@link initializeAuth} or provided by {@link getAuth}.\n *\n * @public\n */\nfunction signInWithRedirect(auth, provider, resolver) {\n    return _signInWithRedirect(auth, provider, resolver);\n}\nasync function _signInWithRedirect(auth, provider, resolver) {\n    if (_isFirebaseServerApp(auth.app)) {\n        return Promise.reject(_serverAppCurrentUserOperationNotSupportedError(auth));\n    }\n    const authInternal = _castAuth(auth);\n    _assertInstanceOf(auth, provider, FederatedAuthProvider);\n    // Wait for auth initialization to complete, this will process pending redirects and clear the\n    // PENDING_REDIRECT_KEY in persistence. This should be completed before starting a new\n    // redirect and creating a PENDING_REDIRECT_KEY entry.\n    await authInternal._initializationPromise;\n    const resolverInternal = _withDefaultResolver(authInternal, resolver);\n    await _setPendingRedirectStatus(resolverInternal, authInternal);\n    return resolverInternal._openRedirect(authInternal, provider, \"signInViaRedirect\" /* AuthEventType.SIGN_IN_VIA_REDIRECT */);\n}\n/**\n * Reauthenticates the current user with the specified {@link OAuthProvider} using a full-page redirect flow.\n * @remarks\n * To handle the results and errors for this operation, refer to {@link getRedirectResult}.\n * Follow the {@link https://firebase.google.com/docs/auth/web/redirect-best-practices\n * | best practices} when using {@link reauthenticateWithRedirect}.\n *\n * This method does not work in a Node.js environment or with {@link Auth} instances\n * created with a {@link @firebase/app#FirebaseServerApp}.\n *\n * @example\n * ```javascript\n * // Sign in using a redirect.\n * const provider = new FacebookAuthProvider();\n * const result = await signInWithRedirect(auth, provider);\n * // This will trigger a full page redirect away from your app\n *\n * // After returning from the redirect when your app initializes you can obtain the result\n * const result = await getRedirectResult(auth);\n * // Reauthenticate using a redirect.\n * await reauthenticateWithRedirect(result.user, provider);\n * // This will again trigger a full page redirect away from your app\n *\n * // After returning from the redirect when your app initializes you can obtain the result\n * const result = await getRedirectResult(auth);\n * ```\n *\n * @param user - The user.\n * @param provider - The provider to authenticate. The provider has to be an {@link OAuthProvider}.\n * Non-OAuth providers like {@link EmailAuthProvider} will throw an error.\n * @param resolver - An instance of {@link PopupRedirectResolver}, optional\n * if already supplied to {@link initializeAuth} or provided by {@link getAuth}.\n *\n * @public\n */\nfunction reauthenticateWithRedirect(user, provider, resolver) {\n    return _reauthenticateWithRedirect(user, provider, resolver);\n}\nasync function _reauthenticateWithRedirect(user, provider, resolver) {\n    const userInternal = getModularInstance(user);\n    _assertInstanceOf(userInternal.auth, provider, FederatedAuthProvider);\n    if (_isFirebaseServerApp(userInternal.auth.app)) {\n        return Promise.reject(_serverAppCurrentUserOperationNotSupportedError(userInternal.auth));\n    }\n    // Wait for auth initialization to complete, this will process pending redirects and clear the\n    // PENDING_REDIRECT_KEY in persistence. This should be completed before starting a new\n    // redirect and creating a PENDING_REDIRECT_KEY entry.\n    await userInternal.auth._initializationPromise;\n    // Allow the resolver to error before persisting the redirect user\n    const resolverInternal = _withDefaultResolver(userInternal.auth, resolver);\n    await _setPendingRedirectStatus(resolverInternal, userInternal.auth);\n    const eventId = await prepareUserForRedirect(userInternal);\n    return resolverInternal._openRedirect(userInternal.auth, provider, \"reauthViaRedirect\" /* AuthEventType.REAUTH_VIA_REDIRECT */, eventId);\n}\n/**\n * Links the {@link OAuthProvider} to the user account using a full-page redirect flow.\n * @remarks\n * To handle the results and errors for this operation, refer to {@link getRedirectResult}.\n * Follow the {@link https://firebase.google.com/docs/auth/web/redirect-best-practices\n * | best practices} when using {@link linkWithRedirect}.\n *\n * This method does not work in a Node.js environment or with {@link Auth} instances\n * created with a {@link @firebase/app#FirebaseServerApp}.\n *\n * @example\n * ```javascript\n * // Sign in using some other provider.\n * const result = await signInWithEmailAndPassword(auth, email, password);\n * // Link using a redirect.\n * const provider = new FacebookAuthProvider();\n * await linkWithRedirect(result.user, provider);\n * // This will trigger a full page redirect away from your app\n *\n * // After returning from the redirect when your app initializes you can obtain the result\n * const result = await getRedirectResult(auth);\n * ```\n *\n * @param user - The user.\n * @param provider - The provider to authenticate. The provider has to be an {@link OAuthProvider}.\n * Non-OAuth providers like {@link EmailAuthProvider} will throw an error.\n * @param resolver - An instance of {@link PopupRedirectResolver}, optional\n * if already supplied to {@link initializeAuth} or provided by {@link getAuth}.\n *\n * @public\n */\nfunction linkWithRedirect(user, provider, resolver) {\n    return _linkWithRedirect(user, provider, resolver);\n}\nasync function _linkWithRedirect(user, provider, resolver) {\n    const userInternal = getModularInstance(user);\n    _assertInstanceOf(userInternal.auth, provider, FederatedAuthProvider);\n    // Wait for auth initialization to complete, this will process pending redirects and clear the\n    // PENDING_REDIRECT_KEY in persistence. This should be completed before starting a new\n    // redirect and creating a PENDING_REDIRECT_KEY entry.\n    await userInternal.auth._initializationPromise;\n    // Allow the resolver to error before persisting the redirect user\n    const resolverInternal = _withDefaultResolver(userInternal.auth, resolver);\n    await _assertLinkedStatus(false, userInternal, provider.providerId);\n    await _setPendingRedirectStatus(resolverInternal, userInternal.auth);\n    const eventId = await prepareUserForRedirect(userInternal);\n    return resolverInternal._openRedirect(userInternal.auth, provider, \"linkViaRedirect\" /* AuthEventType.LINK_VIA_REDIRECT */, eventId);\n}\n/**\n * Returns a {@link UserCredential} from the redirect-based sign-in flow.\n *\n * @remarks\n * If sign-in succeeded, returns the signed in user. If sign-in was unsuccessful, fails with an\n * error. If no redirect operation was called, returns `null`.\n *\n * This method does not work in a Node.js environment or with {@link Auth} instances created with a\n * {@link @firebase/app#FirebaseServerApp}.\n *\n * @example\n * ```javascript\n * // Sign in using a redirect.\n * const provider = new FacebookAuthProvider();\n * // You can add additional scopes to the provider:\n * provider.addScope('user_birthday');\n * // Start a sign in process for an unauthenticated user.\n * await signInWithRedirect(auth, provider);\n * // This will trigger a full page redirect away from your app\n *\n * // After returning from the redirect when your app initializes you can obtain the result\n * const result = await getRedirectResult(auth);\n * if (result) {\n *   // This is the signed-in user\n *   const user = result.user;\n *   // This gives you a Facebook Access Token.\n *   const credential = provider.credentialFromResult(auth, result);\n *   const token = credential.accessToken;\n * }\n * // As this API can be used for sign-in, linking and reauthentication,\n * // check the operationType to determine what triggered this redirect\n * // operation.\n * const operationType = result.operationType;\n * ```\n *\n * @param auth - The {@link Auth} instance.\n * @param resolver - An instance of {@link PopupRedirectResolver}, optional\n * if already supplied to {@link initializeAuth} or provided by {@link getAuth}.\n *\n * @public\n */\nasync function getRedirectResult(auth, resolver) {\n    await _castAuth(auth)._initializationPromise;\n    return _getRedirectResult(auth, resolver, false);\n}\nasync function _getRedirectResult(auth, resolverExtern, bypassAuthState = false) {\n    if (_isFirebaseServerApp(auth.app)) {\n        return Promise.reject(_serverAppCurrentUserOperationNotSupportedError(auth));\n    }\n    const authInternal = _castAuth(auth);\n    const resolver = _withDefaultResolver(authInternal, resolverExtern);\n    const action = new RedirectAction(authInternal, resolver, bypassAuthState);\n    const result = await action.execute();\n    if (result && !bypassAuthState) {\n        delete result.user._redirectEventId;\n        await authInternal._persistUserIfCurrent(result.user);\n        await authInternal._setRedirectUser(null, resolverExtern);\n    }\n    return result;\n}\nasync function prepareUserForRedirect(user) {\n    const eventId = _generateEventId(`${user.uid}:::`);\n    user._redirectEventId = eventId;\n    await user.auth._setRedirectUser(user);\n    await user.auth._persistUserIfCurrent(user);\n    return eventId;\n}\n\n/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n// The amount of time to store the UIDs of seen events; this is\n// set to 10 min by default\nconst EVENT_DUPLICATION_CACHE_DURATION_MS = 10 * 60 * 1000;\nclass AuthEventManager {\n    constructor(auth) {\n        this.auth = auth;\n        this.cachedEventUids = new Set();\n        this.consumers = new Set();\n        this.queuedRedirectEvent = null;\n        this.hasHandledPotentialRedirect = false;\n        this.lastProcessedEventTime = Date.now();\n    }\n    registerConsumer(authEventConsumer) {\n        this.consumers.add(authEventConsumer);\n        if (this.queuedRedirectEvent &&\n            this.isEventForConsumer(this.queuedRedirectEvent, authEventConsumer)) {\n            this.sendToConsumer(this.queuedRedirectEvent, authEventConsumer);\n            this.saveEventToCache(this.queuedRedirectEvent);\n            this.queuedRedirectEvent = null;\n        }\n    }\n    unregisterConsumer(authEventConsumer) {\n        this.consumers.delete(authEventConsumer);\n    }\n    onEvent(event) {\n        // Check if the event has already been handled\n        if (this.hasEventBeenHandled(event)) {\n            return false;\n        }\n        let handled = false;\n        this.consumers.forEach(consumer => {\n            if (this.isEventForConsumer(event, consumer)) {\n                handled = true;\n                this.sendToConsumer(event, consumer);\n                this.saveEventToCache(event);\n            }\n        });\n        if (this.hasHandledPotentialRedirect || !isRedirectEvent(event)) {\n            // If we've already seen a redirect before, or this is a popup event,\n            // bail now\n            return handled;\n        }\n        this.hasHandledPotentialRedirect = true;\n        // If the redirect wasn't handled, hang on to it\n        if (!handled) {\n            this.queuedRedirectEvent = event;\n            handled = true;\n        }\n        return handled;\n    }\n    sendToConsumer(event, consumer) {\n        var _a;\n        if (event.error && !isNullRedirectEvent(event)) {\n            const code = ((_a = event.error.code) === null || _a === void 0 ? void 0 : _a.split('auth/')[1]) ||\n                \"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */;\n            consumer.onError(_createError(this.auth, code));\n        }\n        else {\n            consumer.onAuthEvent(event);\n        }\n    }\n    isEventForConsumer(event, consumer) {\n        const eventIdMatches = consumer.eventId === null ||\n            (!!event.eventId && event.eventId === consumer.eventId);\n        return consumer.filter.includes(event.type) && eventIdMatches;\n    }\n    hasEventBeenHandled(event) {\n        if (Date.now() - this.lastProcessedEventTime >=\n            EVENT_DUPLICATION_CACHE_DURATION_MS) {\n            this.cachedEventUids.clear();\n        }\n        return this.cachedEventUids.has(eventUid(event));\n    }\n    saveEventToCache(event) {\n        this.cachedEventUids.add(eventUid(event));\n        this.lastProcessedEventTime = Date.now();\n    }\n}\nfunction eventUid(e) {\n    return [e.type, e.eventId, e.sessionId, e.tenantId].filter(v => v).join('-');\n}\nfunction isNullRedirectEvent({ type, error }) {\n    return (type === \"unknown\" /* AuthEventType.UNKNOWN */ &&\n        (error === null || error === void 0 ? void 0 : error.code) === `auth/${\"no-auth-event\" /* AuthErrorCode.NO_AUTH_EVENT */}`);\n}\nfunction isRedirectEvent(event) {\n    switch (event.type) {\n        case \"signInViaRedirect\" /* AuthEventType.SIGN_IN_VIA_REDIRECT */:\n        case \"linkViaRedirect\" /* AuthEventType.LINK_VIA_REDIRECT */:\n        case \"reauthViaRedirect\" /* AuthEventType.REAUTH_VIA_REDIRECT */:\n            return true;\n        case \"unknown\" /* AuthEventType.UNKNOWN */:\n            return isNullRedirectEvent(event);\n        default:\n            return false;\n    }\n}\n\n/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nasync function _getProjectConfig(auth, request = {}) {\n    return _performApiRequest(auth, \"GET\" /* HttpMethod.GET */, \"/v1/projects\" /* Endpoint.GET_PROJECT_CONFIG */, request);\n}\n\n/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nconst IP_ADDRESS_REGEX = /^\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}$/;\nconst HTTP_REGEX = /^https?/;\nasync function _validateOrigin(auth) {\n    // Skip origin validation if we are in an emulated environment\n    if (auth.config.emulator) {\n        return;\n    }\n    const { authorizedDomains } = await _getProjectConfig(auth);\n    for (const domain of authorizedDomains) {\n        try {\n            if (matchDomain(domain)) {\n                return;\n            }\n        }\n        catch (_a) {\n            // Do nothing if there's a URL error; just continue searching\n        }\n    }\n    // In the old SDK, this error also provides helpful messages.\n    _fail(auth, \"unauthorized-domain\" /* AuthErrorCode.INVALID_ORIGIN */);\n}\nfunction matchDomain(expected) {\n    const currentUrl = _getCurrentUrl();\n    const { protocol, hostname } = new URL(currentUrl);\n    if (expected.startsWith('chrome-extension://')) {\n        const ceUrl = new URL(expected);\n        if (ceUrl.hostname === '' && hostname === '') {\n            // For some reason we're not parsing chrome URLs properly\n            return (protocol === 'chrome-extension:' &&\n                expected.replace('chrome-extension://', '') ===\n                    currentUrl.replace('chrome-extension://', ''));\n        }\n        return protocol === 'chrome-extension:' && ceUrl.hostname === hostname;\n    }\n    if (!HTTP_REGEX.test(protocol)) {\n        return false;\n    }\n    if (IP_ADDRESS_REGEX.test(expected)) {\n        // The domain has to be exactly equal to the pattern, as an IP domain will\n        // only contain the IP, no extra character.\n        return hostname === expected;\n    }\n    // Dots in pattern should be escaped.\n    const escapedDomainPattern = expected.replace(/\\./g, '\\\\.');\n    // Non ip address domains.\n    // domain.com = *.domain.com OR domain.com\n    const re = new RegExp('^(.+\\\\.' + escapedDomainPattern + '|' + escapedDomainPattern + ')$', 'i');\n    return re.test(hostname);\n}\n\n/**\n * @license\n * Copyright 2020 Google LLC.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nconst NETWORK_TIMEOUT = new Delay(30000, 60000);\n/**\n * Reset unloaded GApi modules. If gapi.load fails due to a network error,\n * it will stop working after a retrial. This is a hack to fix this issue.\n */\nfunction resetUnloadedGapiModules() {\n    // Clear last failed gapi.load state to force next gapi.load to first\n    // load the failed gapi.iframes module.\n    // Get gapix.beacon context.\n    const beacon = _window().___jsl;\n    // Get current hint.\n    if (beacon === null || beacon === void 0 ? void 0 : beacon.H) {\n        // Get gapi hint.\n        for (const hint of Object.keys(beacon.H)) {\n            // Requested modules.\n            beacon.H[hint].r = beacon.H[hint].r || [];\n            // Loaded modules.\n            beacon.H[hint].L = beacon.H[hint].L || [];\n            // Set requested modules to a copy of the loaded modules.\n            beacon.H[hint].r = [...beacon.H[hint].L];\n            // Clear pending callbacks.\n            if (beacon.CP) {\n                for (let i = 0; i < beacon.CP.length; i++) {\n                    // Remove all failed pending callbacks.\n                    beacon.CP[i] = null;\n                }\n            }\n        }\n    }\n}\nfunction loadGapi(auth) {\n    return new Promise((resolve, reject) => {\n        var _a, _b, _c;\n        // Function to run when gapi.load is ready.\n        function loadGapiIframe() {\n            // The developer may have tried to previously run gapi.load and failed.\n            // Run this to fix that.\n            resetUnloadedGapiModules();\n            gapi.load('gapi.iframes', {\n                callback: () => {\n                    resolve(gapi.iframes.getContext());\n                },\n                ontimeout: () => {\n                    // The above reset may be sufficient, but having this reset after\n                    // failure ensures that if the developer calls gapi.load after the\n                    // connection is re-established and before another attempt to embed\n                    // the iframe, it would work and would not be broken because of our\n                    // failed attempt.\n                    // Timeout when gapi.iframes.Iframe not loaded.\n                    resetUnloadedGapiModules();\n                    reject(_createError(auth, \"network-request-failed\" /* AuthErrorCode.NETWORK_REQUEST_FAILED */));\n                },\n                timeout: NETWORK_TIMEOUT.get()\n            });\n        }\n        if ((_b = (_a = _window().gapi) === null || _a === void 0 ? void 0 : _a.iframes) === null || _b === void 0 ? void 0 : _b.Iframe) {\n            // If gapi.iframes.Iframe available, resolve.\n            resolve(gapi.iframes.getContext());\n        }\n        else if (!!((_c = _window().gapi) === null || _c === void 0 ? void 0 : _c.load)) {\n            // Gapi loader ready, load gapi.iframes.\n            loadGapiIframe();\n        }\n        else {\n            // Create a new iframe callback when this is called so as not to overwrite\n            // any previous defined callback. This happens if this method is called\n            // multiple times in parallel and could result in the later callback\n            // overwriting the previous one. This would end up with a iframe\n            // timeout.\n            const cbName = _generateCallbackName('iframefcb');\n            // GApi loader not available, dynamically load platform.js.\n            _window()[cbName] = () => {\n                // GApi loader should be ready.\n                if (!!gapi.load) {\n                    loadGapiIframe();\n                }\n                else {\n                    // Gapi loader failed, throw error.\n                    reject(_createError(auth, \"network-request-failed\" /* AuthErrorCode.NETWORK_REQUEST_FAILED */));\n                }\n            };\n            // Load GApi loader.\n            return _loadJS(`${_gapiScriptUrl()}?onload=${cbName}`)\n                .catch(e => reject(e));\n        }\n    }).catch(error => {\n        // Reset cached promise to allow for retrial.\n        cachedGApiLoader = null;\n        throw error;\n    });\n}\nlet cachedGApiLoader = null;\nfunction _loadGapi(auth) {\n    cachedGApiLoader = cachedGApiLoader || loadGapi(auth);\n    return cachedGApiLoader;\n}\n\n/**\n * @license\n * Copyright 2020 Google LLC.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nconst PING_TIMEOUT = new Delay(5000, 15000);\nconst IFRAME_PATH = '__/auth/iframe';\nconst EMULATED_IFRAME_PATH = 'emulator/auth/iframe';\nconst IFRAME_ATTRIBUTES = {\n    style: {\n        position: 'absolute',\n        top: '-100px',\n        width: '1px',\n        height: '1px'\n    },\n    'aria-hidden': 'true',\n    tabindex: '-1'\n};\n// Map from apiHost to endpoint ID for passing into iframe. In current SDK, apiHost can be set to\n// anything (not from a list of endpoints with IDs as in legacy), so this is the closest we can get.\nconst EID_FROM_APIHOST = new Map([\n    [\"identitytoolkit.googleapis.com\" /* DefaultConfig.API_HOST */, 'p'], // production\n    ['staging-identitytoolkit.sandbox.googleapis.com', 's'], // staging\n    ['test-identitytoolkit.sandbox.googleapis.com', 't'] // test\n]);\nfunction getIframeUrl(auth) {\n    const config = auth.config;\n    _assert(config.authDomain, auth, \"auth-domain-config-required\" /* AuthErrorCode.MISSING_AUTH_DOMAIN */);\n    const url = config.emulator\n        ? _emulatorUrl(config, EMULATED_IFRAME_PATH)\n        : `https://${auth.config.authDomain}/${IFRAME_PATH}`;\n    const params = {\n        apiKey: config.apiKey,\n        appName: auth.name,\n        v: SDK_VERSION\n    };\n    const eid = EID_FROM_APIHOST.get(auth.config.apiHost);\n    if (eid) {\n        params.eid = eid;\n    }\n    const frameworks = auth._getFrameworks();\n    if (frameworks.length) {\n        params.fw = frameworks.join(',');\n    }\n    return `${url}?${querystring(params).slice(1)}`;\n}\nasync function _openIframe(auth) {\n    const context = await _loadGapi(auth);\n    const gapi = _window().gapi;\n    _assert(gapi, auth, \"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */);\n    return context.open({\n        where: document.body,\n        url: getIframeUrl(auth),\n        messageHandlersFilter: gapi.iframes.CROSS_ORIGIN_IFRAMES_FILTER,\n        attributes: IFRAME_ATTRIBUTES,\n        dontclear: true\n    }, (iframe) => new Promise(async (resolve, reject) => {\n        await iframe.restyle({\n            // Prevent iframe from closing on mouse out.\n            setHideOnLeave: false\n        });\n        const networkError = _createError(auth, \"network-request-failed\" /* AuthErrorCode.NETWORK_REQUEST_FAILED */);\n        // Confirm iframe is correctly loaded.\n        // To fallback on failure, set a timeout.\n        const networkErrorTimer = _window().setTimeout(() => {\n            reject(networkError);\n        }, PING_TIMEOUT.get());\n        // Clear timer and resolve pending iframe ready promise.\n        function clearTimerAndResolve() {\n            _window().clearTimeout(networkErrorTimer);\n            resolve(iframe);\n        }\n        // This returns an IThenable. However the reject part does not call\n        // when the iframe is not loaded.\n        iframe.ping(clearTimerAndResolve).then(clearTimerAndResolve, () => {\n            reject(networkError);\n        });\n    }));\n}\n\n/**\n * @license\n * Copyright 2020 Google LLC.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nconst BASE_POPUP_OPTIONS = {\n    location: 'yes',\n    resizable: 'yes',\n    statusbar: 'yes',\n    toolbar: 'no'\n};\nconst DEFAULT_WIDTH = 500;\nconst DEFAULT_HEIGHT = 600;\nconst TARGET_BLANK = '_blank';\nconst FIREFOX_EMPTY_URL = 'http://localhost';\nclass AuthPopup {\n    constructor(window) {\n        this.window = window;\n        this.associatedEvent = null;\n    }\n    close() {\n        if (this.window) {\n            try {\n                this.window.close();\n            }\n            catch (e) { }\n        }\n    }\n}\nfunction _open(auth, url, name, width = DEFAULT_WIDTH, height = DEFAULT_HEIGHT) {\n    const top = Math.max((window.screen.availHeight - height) / 2, 0).toString();\n    const left = Math.max((window.screen.availWidth - width) / 2, 0).toString();\n    let target = '';\n    const options = Object.assign(Object.assign({}, BASE_POPUP_OPTIONS), { width: width.toString(), height: height.toString(), top,\n        left });\n    // Chrome iOS 7 and 8 is returning an undefined popup win when target is\n    // specified, even though the popup is not necessarily blocked.\n    const ua = getUA().toLowerCase();\n    if (name) {\n        target = _isChromeIOS(ua) ? TARGET_BLANK : name;\n    }\n    if (_isFirefox(ua)) {\n        // Firefox complains when invalid URLs are popped out. Hacky way to bypass.\n        url = url || FIREFOX_EMPTY_URL;\n        // Firefox disables by default scrolling on popup windows, which can create\n        // issues when the user has many Google accounts, for instance.\n        options.scrollbars = 'yes';\n    }\n    const optionsString = Object.entries(options).reduce((accum, [key, value]) => `${accum}${key}=${value},`, '');\n    if (_isIOSStandalone(ua) && target !== '_self') {\n        openAsNewWindowIOS(url || '', target);\n        return new AuthPopup(null);\n    }\n    // about:blank getting sanitized causing browsers like IE/Edge to display\n    // brief error message before redirecting to handler.\n    const newWin = window.open(url || '', target, optionsString);\n    _assert(newWin, auth, \"popup-blocked\" /* AuthErrorCode.POPUP_BLOCKED */);\n    // Flaky on IE edge, encapsulate with a try and catch.\n    try {\n        newWin.focus();\n    }\n    catch (e) { }\n    return new AuthPopup(newWin);\n}\nfunction openAsNewWindowIOS(url, target) {\n    const el = document.createElement('a');\n    el.href = url;\n    el.target = target;\n    const click = document.createEvent('MouseEvent');\n    click.initMouseEvent('click', true, true, window, 1, 0, 0, 0, 0, false, false, false, false, 1, null);\n    el.dispatchEvent(click);\n}\n\n/**\n * @license\n * Copyright 2021 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * URL for Authentication widget which will initiate the OAuth handshake\n *\n * @internal\n */\nconst WIDGET_PATH = '__/auth/handler';\n/**\n * URL for emulated environment\n *\n * @internal\n */\nconst EMULATOR_WIDGET_PATH = 'emulator/auth/handler';\n/**\n * Fragment name for the App Check token that gets passed to the widget\n *\n * @internal\n */\nconst FIREBASE_APP_CHECK_FRAGMENT_ID = encodeURIComponent('fac');\nasync function _getRedirectUrl(auth, provider, authType, redirectUrl, eventId, additionalParams) {\n    _assert(auth.config.authDomain, auth, \"auth-domain-config-required\" /* AuthErrorCode.MISSING_AUTH_DOMAIN */);\n    _assert(auth.config.apiKey, auth, \"invalid-api-key\" /* AuthErrorCode.INVALID_API_KEY */);\n    const params = {\n        apiKey: auth.config.apiKey,\n        appName: auth.name,\n        authType,\n        redirectUrl,\n        v: SDK_VERSION,\n        eventId\n    };\n    if (provider instanceof FederatedAuthProvider) {\n        provider.setDefaultLanguage(auth.languageCode);\n        params.providerId = provider.providerId || '';\n        if (!isEmpty(provider.getCustomParameters())) {\n            params.customParameters = JSON.stringify(provider.getCustomParameters());\n        }\n        // TODO set additionalParams from the provider as well?\n        for (const [key, value] of Object.entries(additionalParams || {})) {\n            params[key] = value;\n        }\n    }\n    if (provider instanceof BaseOAuthProvider) {\n        const scopes = provider.getScopes().filter(scope => scope !== '');\n        if (scopes.length > 0) {\n            params.scopes = scopes.join(',');\n        }\n    }\n    if (auth.tenantId) {\n        params.tid = auth.tenantId;\n    }\n    // TODO: maybe set eid as endpointId\n    // TODO: maybe set fw as Frameworks.join(\",\")\n    const paramsDict = params;\n    for (const key of Object.keys(paramsDict)) {\n        if (paramsDict[key] === undefined) {\n            delete paramsDict[key];\n        }\n    }\n    // Sets the App Check token to pass to the widget\n    const appCheckToken = await auth._getAppCheckToken();\n    const appCheckTokenFragment = appCheckToken\n        ? `#${FIREBASE_APP_CHECK_FRAGMENT_ID}=${encodeURIComponent(appCheckToken)}`\n        : '';\n    // Start at index 1 to skip the leading '&' in the query string\n    return `${getHandlerBase(auth)}?${querystring(paramsDict).slice(1)}${appCheckTokenFragment}`;\n}\nfunction getHandlerBase({ config }) {\n    if (!config.emulator) {\n        return `https://${config.authDomain}/${WIDGET_PATH}`;\n    }\n    return _emulatorUrl(config, EMULATOR_WIDGET_PATH);\n}\n\n/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * The special web storage event\n *\n */\nconst WEB_STORAGE_SUPPORT_KEY = 'webStorageSupport';\nclass BrowserPopupRedirectResolver {\n    constructor() {\n        this.eventManagers = {};\n        this.iframes = {};\n        this.originValidationPromises = {};\n        this._redirectPersistence = browserSessionPersistence;\n        this._completeRedirectFn = _getRedirectResult;\n        this._overrideRedirectResult = _overrideRedirectResult;\n    }\n    // Wrapping in async even though we don't await anywhere in order\n    // to make sure errors are raised as promise rejections\n    async _openPopup(auth, provider, authType, eventId) {\n        var _a;\n        debugAssert((_a = this.eventManagers[auth._key()]) === null || _a === void 0 ? void 0 : _a.manager, '_initialize() not called before _openPopup()');\n        const url = await _getRedirectUrl(auth, provider, authType, _getCurrentUrl(), eventId);\n        return _open(auth, url, _generateEventId());\n    }\n    async _openRedirect(auth, provider, authType, eventId) {\n        await this._originValidation(auth);\n        const url = await _getRedirectUrl(auth, provider, authType, _getCurrentUrl(), eventId);\n        _setWindowLocation(url);\n        return new Promise(() => { });\n    }\n    _initialize(auth) {\n        const key = auth._key();\n        if (this.eventManagers[key]) {\n            const { manager, promise } = this.eventManagers[key];\n            if (manager) {\n                return Promise.resolve(manager);\n            }\n            else {\n                debugAssert(promise, 'If manager is not set, promise should be');\n                return promise;\n            }\n        }\n        const promise = this.initAndGetManager(auth);\n        this.eventManagers[key] = { promise };\n        // If the promise is rejected, the key should be removed so that the\n        // operation can be retried later.\n        promise.catch(() => {\n            delete this.eventManagers[key];\n        });\n        return promise;\n    }\n    async initAndGetManager(auth) {\n        const iframe = await _openIframe(auth);\n        const manager = new AuthEventManager(auth);\n        iframe.register('authEvent', (iframeEvent) => {\n            _assert(iframeEvent === null || iframeEvent === void 0 ? void 0 : iframeEvent.authEvent, auth, \"invalid-auth-event\" /* AuthErrorCode.INVALID_AUTH_EVENT */);\n            // TODO: Consider splitting redirect and popup events earlier on\n            const handled = manager.onEvent(iframeEvent.authEvent);\n            return { status: handled ? \"ACK\" /* GapiOutcome.ACK */ : \"ERROR\" /* GapiOutcome.ERROR */ };\n        }, gapi.iframes.CROSS_ORIGIN_IFRAMES_FILTER);\n        this.eventManagers[auth._key()] = { manager };\n        this.iframes[auth._key()] = iframe;\n        return manager;\n    }\n    _isIframeWebStorageSupported(auth, cb) {\n        const iframe = this.iframes[auth._key()];\n        iframe.send(WEB_STORAGE_SUPPORT_KEY, { type: WEB_STORAGE_SUPPORT_KEY }, result => {\n            var _a;\n            const isSupported = (_a = result === null || result === void 0 ? void 0 : result[0]) === null || _a === void 0 ? void 0 : _a[WEB_STORAGE_SUPPORT_KEY];\n            if (isSupported !== undefined) {\n                cb(!!isSupported);\n            }\n            _fail(auth, \"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */);\n        }, gapi.iframes.CROSS_ORIGIN_IFRAMES_FILTER);\n    }\n    _originValidation(auth) {\n        const key = auth._key();\n        if (!this.originValidationPromises[key]) {\n            this.originValidationPromises[key] = _validateOrigin(auth);\n        }\n        return this.originValidationPromises[key];\n    }\n    get _shouldInitProactively() {\n        // Mobile browsers and Safari need to optimistically initialize\n        return _isMobileBrowser() || _isSafari() || _isIOS();\n    }\n}\n/**\n * An implementation of {@link PopupRedirectResolver} suitable for browser\n * based applications.\n *\n * @remarks\n * This method does not work in a Node.js environment.\n *\n * @public\n */\nconst browserPopupRedirectResolver = BrowserPopupRedirectResolver;\n\nclass MultiFactorAssertionImpl {\n    constructor(factorId) {\n        this.factorId = factorId;\n    }\n    _process(auth, session, displayName) {\n        switch (session.type) {\n            case \"enroll\" /* MultiFactorSessionType.ENROLL */:\n                return this._finalizeEnroll(auth, session.credential, displayName);\n            case \"signin\" /* MultiFactorSessionType.SIGN_IN */:\n                return this._finalizeSignIn(auth, session.credential);\n            default:\n                return debugFail('unexpected MultiFactorSessionType');\n        }\n    }\n}\n\n/**\n * {@inheritdoc PhoneMultiFactorAssertion}\n *\n * @public\n */\nclass PhoneMultiFactorAssertionImpl extends MultiFactorAssertionImpl {\n    constructor(credential) {\n        super(\"phone\" /* FactorId.PHONE */);\n        this.credential = credential;\n    }\n    /** @internal */\n    static _fromCredential(credential) {\n        return new PhoneMultiFactorAssertionImpl(credential);\n    }\n    /** @internal */\n    _finalizeEnroll(auth, idToken, displayName) {\n        return finalizeEnrollPhoneMfa(auth, {\n            idToken,\n            displayName,\n            phoneVerificationInfo: this.credential._makeVerificationRequest()\n        });\n    }\n    /** @internal */\n    _finalizeSignIn(auth, mfaPendingCredential) {\n        return finalizeSignInPhoneMfa(auth, {\n            mfaPendingCredential,\n            phoneVerificationInfo: this.credential._makeVerificationRequest()\n        });\n    }\n}\n/**\n * Provider for generating a {@link PhoneMultiFactorAssertion}.\n *\n * @public\n */\nclass PhoneMultiFactorGenerator {\n    constructor() { }\n    /**\n     * Provides a {@link PhoneMultiFactorAssertion} to confirm ownership of the phone second factor.\n     *\n     * @remarks\n     * This method does not work in a Node.js environment.\n     *\n     * @param phoneAuthCredential - A credential provided by {@link PhoneAuthProvider.credential}.\n     * @returns A {@link PhoneMultiFactorAssertion} which can be used with\n     * {@link MultiFactorResolver.resolveSignIn}\n     */\n    static assertion(credential) {\n        return PhoneMultiFactorAssertionImpl._fromCredential(credential);\n    }\n}\n/**\n * The identifier of the phone second factor: `phone`.\n */\nPhoneMultiFactorGenerator.FACTOR_ID = 'phone';\n\n/**\n * Provider for generating a {@link TotpMultiFactorAssertion}.\n *\n * @public\n */\nclass TotpMultiFactorGenerator {\n    /**\n     * Provides a {@link TotpMultiFactorAssertion} to confirm ownership of\n     * the TOTP (time-based one-time password) second factor.\n     * This assertion is used to complete enrollment in TOTP second factor.\n     *\n     * @param secret A {@link TotpSecret} containing the shared secret key and other TOTP parameters.\n     * @param oneTimePassword One-time password from TOTP App.\n     * @returns A {@link TotpMultiFactorAssertion} which can be used with\n     * {@link MultiFactorUser.enroll}.\n     */\n    static assertionForEnrollment(secret, oneTimePassword) {\n        return TotpMultiFactorAssertionImpl._fromSecret(secret, oneTimePassword);\n    }\n    /**\n     * Provides a {@link TotpMultiFactorAssertion} to confirm ownership of the TOTP second factor.\n     * This assertion is used to complete signIn with TOTP as the second factor.\n     *\n     * @param enrollmentId identifies the enrolled TOTP second factor.\n     * @param oneTimePassword One-time password from TOTP App.\n     * @returns A {@link TotpMultiFactorAssertion} which can be used with\n     * {@link MultiFactorResolver.resolveSignIn}.\n     */\n    static assertionForSignIn(enrollmentId, oneTimePassword) {\n        return TotpMultiFactorAssertionImpl._fromEnrollmentId(enrollmentId, oneTimePassword);\n    }\n    /**\n     * Returns a promise to {@link TotpSecret} which contains the TOTP shared secret key and other parameters.\n     * Creates a TOTP secret as part of enrolling a TOTP second factor.\n     * Used for generating a QR code URL or inputting into a TOTP app.\n     * This method uses the auth instance corresponding to the user in the multiFactorSession.\n     *\n     * @param session The {@link MultiFactorSession} that the user is part of.\n     * @returns A promise to {@link TotpSecret}.\n     */\n    static async generateSecret(session) {\n        var _a;\n        const mfaSession = session;\n        _assert(typeof ((_a = mfaSession.user) === null || _a === void 0 ? void 0 : _a.auth) !== 'undefined', \"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */);\n        const response = await startEnrollTotpMfa(mfaSession.user.auth, {\n            idToken: mfaSession.credential,\n            totpEnrollmentInfo: {}\n        });\n        return TotpSecret._fromStartTotpMfaEnrollmentResponse(response, mfaSession.user.auth);\n    }\n}\n/**\n * The identifier of the TOTP second factor: `totp`.\n */\nTotpMultiFactorGenerator.FACTOR_ID = \"totp\" /* FactorId.TOTP */;\nclass TotpMultiFactorAssertionImpl extends MultiFactorAssertionImpl {\n    constructor(otp, enrollmentId, secret) {\n        super(\"totp\" /* FactorId.TOTP */);\n        this.otp = otp;\n        this.enrollmentId = enrollmentId;\n        this.secret = secret;\n    }\n    /** @internal */\n    static _fromSecret(secret, otp) {\n        return new TotpMultiFactorAssertionImpl(otp, undefined, secret);\n    }\n    /** @internal */\n    static _fromEnrollmentId(enrollmentId, otp) {\n        return new TotpMultiFactorAssertionImpl(otp, enrollmentId);\n    }\n    /** @internal */\n    async _finalizeEnroll(auth, idToken, displayName) {\n        _assert(typeof this.secret !== 'undefined', auth, \"argument-error\" /* AuthErrorCode.ARGUMENT_ERROR */);\n        return finalizeEnrollTotpMfa(auth, {\n            idToken,\n            displayName,\n            totpVerificationInfo: this.secret._makeTotpVerificationInfo(this.otp)\n        });\n    }\n    /** @internal */\n    async _finalizeSignIn(auth, mfaPendingCredential) {\n        _assert(this.enrollmentId !== undefined && this.otp !== undefined, auth, \"argument-error\" /* AuthErrorCode.ARGUMENT_ERROR */);\n        const totpVerificationInfo = { verificationCode: this.otp };\n        return finalizeSignInTotpMfa(auth, {\n            mfaPendingCredential,\n            mfaEnrollmentId: this.enrollmentId,\n            totpVerificationInfo\n        });\n    }\n}\n/**\n * Provider for generating a {@link TotpMultiFactorAssertion}.\n *\n * Stores the shared secret key and other parameters to generate time-based OTPs.\n * Implements methods to retrieve the shared secret key and generate a QR code URL.\n * @public\n */\nclass TotpSecret {\n    // The public members are declared outside the constructor so the docs can be generated.\n    constructor(secretKey, hashingAlgorithm, codeLength, codeIntervalSeconds, enrollmentCompletionDeadline, sessionInfo, auth) {\n        this.sessionInfo = sessionInfo;\n        this.auth = auth;\n        this.secretKey = secretKey;\n        this.hashingAlgorithm = hashingAlgorithm;\n        this.codeLength = codeLength;\n        this.codeIntervalSeconds = codeIntervalSeconds;\n        this.enrollmentCompletionDeadline = enrollmentCompletionDeadline;\n    }\n    /** @internal */\n    static _fromStartTotpMfaEnrollmentResponse(response, auth) {\n        return new TotpSecret(response.totpSessionInfo.sharedSecretKey, response.totpSessionInfo.hashingAlgorithm, response.totpSessionInfo.verificationCodeLength, response.totpSessionInfo.periodSec, new Date(response.totpSessionInfo.finalizeEnrollmentTime).toUTCString(), response.totpSessionInfo.sessionInfo, auth);\n    }\n    /** @internal */\n    _makeTotpVerificationInfo(otp) {\n        return { sessionInfo: this.sessionInfo, verificationCode: otp };\n    }\n    /**\n     * Returns a QR code URL as described in\n     * https://github.com/google/google-authenticator/wiki/Key-Uri-Format\n     * This can be displayed to the user as a QR code to be scanned into a TOTP app like Google Authenticator.\n     * If the optional parameters are unspecified, an accountName of <userEmail> and issuer of <firebaseAppName> are used.\n     *\n     * @param accountName the name of the account/app along with a user identifier.\n     * @param issuer issuer of the TOTP (likely the app name).\n     * @returns A QR code URL string.\n     */\n    generateQrCodeUrl(accountName, issuer) {\n        var _a;\n        let useDefaults = false;\n        if (_isEmptyString(accountName) || _isEmptyString(issuer)) {\n            useDefaults = true;\n        }\n        if (useDefaults) {\n            if (_isEmptyString(accountName)) {\n                accountName = ((_a = this.auth.currentUser) === null || _a === void 0 ? void 0 : _a.email) || 'unknownuser';\n            }\n            if (_isEmptyString(issuer)) {\n                issuer = this.auth.name;\n            }\n        }\n        return `otpauth://totp/${issuer}:${accountName}?secret=${this.secretKey}&issuer=${issuer}&algorithm=${this.hashingAlgorithm}&digits=${this.codeLength}`;\n    }\n}\n/** @internal */\nfunction _isEmptyString(input) {\n    return typeof input === 'undefined' || (input === null || input === void 0 ? void 0 : input.length) === 0;\n}\n\nvar name = \"@firebase/auth\";\nvar version = \"1.8.1\";\n\n/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nclass AuthInterop {\n    constructor(auth) {\n        this.auth = auth;\n        this.internalListeners = new Map();\n    }\n    getUid() {\n        var _a;\n        this.assertAuthConfigured();\n        return ((_a = this.auth.currentUser) === null || _a === void 0 ? void 0 : _a.uid) || null;\n    }\n    async getToken(forceRefresh) {\n        this.assertAuthConfigured();\n        await this.auth._initializationPromise;\n        if (!this.auth.currentUser) {\n            return null;\n        }\n        const accessToken = await this.auth.currentUser.getIdToken(forceRefresh);\n        return { accessToken };\n    }\n    addAuthTokenListener(listener) {\n        this.assertAuthConfigured();\n        if (this.internalListeners.has(listener)) {\n            return;\n        }\n        const unsubscribe = this.auth.onIdTokenChanged(user => {\n            listener((user === null || user === void 0 ? void 0 : user.stsTokenManager.accessToken) || null);\n        });\n        this.internalListeners.set(listener, unsubscribe);\n        this.updateProactiveRefresh();\n    }\n    removeAuthTokenListener(listener) {\n        this.assertAuthConfigured();\n        const unsubscribe = this.internalListeners.get(listener);\n        if (!unsubscribe) {\n            return;\n        }\n        this.internalListeners.delete(listener);\n        unsubscribe();\n        this.updateProactiveRefresh();\n    }\n    assertAuthConfigured() {\n        _assert(this.auth._initializationPromise, \"dependent-sdk-initialized-before-auth\" /* AuthErrorCode.DEPENDENT_SDK_INIT_BEFORE_AUTH */);\n    }\n    updateProactiveRefresh() {\n        if (this.internalListeners.size > 0) {\n            this.auth._startProactiveRefresh();\n        }\n        else {\n            this.auth._stopProactiveRefresh();\n        }\n    }\n}\n\n/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nfunction getVersionForPlatform(clientPlatform) {\n    switch (clientPlatform) {\n        case \"Node\" /* ClientPlatform.NODE */:\n            return 'node';\n        case \"ReactNative\" /* ClientPlatform.REACT_NATIVE */:\n            return 'rn';\n        case \"Worker\" /* ClientPlatform.WORKER */:\n            return 'webworker';\n        case \"Cordova\" /* ClientPlatform.CORDOVA */:\n            return 'cordova';\n        case \"WebExtension\" /* ClientPlatform.WEB_EXTENSION */:\n            return 'web-extension';\n        default:\n            return undefined;\n    }\n}\n/** @internal */\nfunction registerAuth(clientPlatform) {\n    _registerComponent(new Component(\"auth\" /* _ComponentName.AUTH */, (container, { options: deps }) => {\n        const app = container.getProvider('app').getImmediate();\n        const heartbeatServiceProvider = container.getProvider('heartbeat');\n        const appCheckServiceProvider = container.getProvider('app-check-internal');\n        const { apiKey, authDomain } = app.options;\n        _assert(apiKey && !apiKey.includes(':'), \"invalid-api-key\" /* AuthErrorCode.INVALID_API_KEY */, { appName: app.name });\n        const config = {\n            apiKey,\n            authDomain,\n            clientPlatform,\n            apiHost: \"identitytoolkit.googleapis.com\" /* DefaultConfig.API_HOST */,\n            tokenApiHost: \"securetoken.googleapis.com\" /* DefaultConfig.TOKEN_API_HOST */,\n            apiScheme: \"https\" /* DefaultConfig.API_SCHEME */,\n            sdkClientVersion: _getClientVersion(clientPlatform)\n        };\n        const authInstance = new AuthImpl(app, heartbeatServiceProvider, appCheckServiceProvider, config);\n        _initializeAuthInstance(authInstance, deps);\n        return authInstance;\n    }, \"PUBLIC\" /* ComponentType.PUBLIC */)\n        /**\n         * Auth can only be initialized by explicitly calling getAuth() or initializeAuth()\n         * For why we do this, See go/firebase-next-auth-init\n         */\n        .setInstantiationMode(\"EXPLICIT\" /* InstantiationMode.EXPLICIT */)\n        /**\n         * Because all firebase products that depend on auth depend on auth-internal directly,\n         * we need to initialize auth-internal after auth is initialized to make it available to other firebase products.\n         */\n        .setInstanceCreatedCallback((container, _instanceIdentifier, _instance) => {\n        const authInternalProvider = container.getProvider(\"auth-internal\" /* _ComponentName.AUTH_INTERNAL */);\n        authInternalProvider.initialize();\n    }));\n    _registerComponent(new Component(\"auth-internal\" /* _ComponentName.AUTH_INTERNAL */, container => {\n        const auth = _castAuth(container.getProvider(\"auth\" /* _ComponentName.AUTH */).getImmediate());\n        return (auth => new AuthInterop(auth))(auth);\n    }, \"PRIVATE\" /* ComponentType.PRIVATE */).setInstantiationMode(\"EXPLICIT\" /* InstantiationMode.EXPLICIT */));\n    registerVersion(name, version, getVersionForPlatform(clientPlatform));\n    // BUILD_TARGET will be replaced by values like esm2017, cjs2017, etc during the compilation\n    registerVersion(name, version, 'esm2017');\n}\n\n/**\n * @license\n * Copyright 2021 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nconst DEFAULT_ID_TOKEN_MAX_AGE = 5 * 60;\nconst authIdTokenMaxAge = getExperimentalSetting('authIdTokenMaxAge') || DEFAULT_ID_TOKEN_MAX_AGE;\nlet lastPostedIdToken = null;\nconst mintCookieFactory = (url) => async (user) => {\n    const idTokenResult = user && (await user.getIdTokenResult());\n    const idTokenAge = idTokenResult &&\n        (new Date().getTime() - Date.parse(idTokenResult.issuedAtTime)) / 1000;\n    if (idTokenAge && idTokenAge > authIdTokenMaxAge) {\n        return;\n    }\n    // Specifically trip null => undefined when logged out, to delete any existing cookie\n    const idToken = idTokenResult === null || idTokenResult === void 0 ? void 0 : idTokenResult.token;\n    if (lastPostedIdToken === idToken) {\n        return;\n    }\n    lastPostedIdToken = idToken;\n    await fetch(url, {\n        method: idToken ? 'POST' : 'DELETE',\n        headers: idToken\n            ? {\n                'Authorization': `Bearer ${idToken}`\n            }\n            : {}\n    });\n};\n/**\n * Returns the Auth instance associated with the provided {@link @firebase/app#FirebaseApp}.\n * If no instance exists, initializes an Auth instance with platform-specific default dependencies.\n *\n * @param app - The Firebase App.\n *\n * @public\n */\nfunction getAuth(app = getApp()) {\n    const provider = _getProvider(app, 'auth');\n    if (provider.isInitialized()) {\n        return provider.getImmediate();\n    }\n    const auth = initializeAuth(app, {\n        popupRedirectResolver: browserPopupRedirectResolver,\n        persistence: [\n            indexedDBLocalPersistence,\n            browserLocalPersistence,\n            browserSessionPersistence\n        ]\n    });\n    const authTokenSyncPath = getExperimentalSetting('authTokenSyncURL');\n    // Only do the Cookie exchange in a secure context\n    if (authTokenSyncPath &&\n        typeof isSecureContext === 'boolean' &&\n        isSecureContext) {\n        // Don't allow urls (XSS possibility), only paths on the same domain\n        const authTokenSyncUrl = new URL(authTokenSyncPath, location.origin);\n        if (location.origin === authTokenSyncUrl.origin) {\n            const mintCookie = mintCookieFactory(authTokenSyncUrl.toString());\n            beforeAuthStateChanged(auth, mintCookie, () => mintCookie(auth.currentUser));\n            onIdTokenChanged(auth, user => mintCookie(user));\n        }\n    }\n    const authEmulatorHost = getDefaultEmulatorHost('auth');\n    if (authEmulatorHost) {\n        connectAuthEmulator(auth, `http://${authEmulatorHost}`);\n    }\n    return auth;\n}\nfunction getScriptParentElement() {\n    var _a, _b;\n    return (_b = (_a = document.getElementsByTagName('head')) === null || _a === void 0 ? void 0 : _a[0]) !== null && _b !== void 0 ? _b : document;\n}\n_setExternalJSProvider({\n    loadJS(url) {\n        // TODO: consider adding timeout support & cancellation\n        return new Promise((resolve, reject) => {\n            const el = document.createElement('script');\n            el.setAttribute('src', url);\n            el.onload = resolve;\n            el.onerror = e => {\n                const error = _createError(\"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */);\n                error.customData = e;\n                reject(error);\n            };\n            el.type = 'text/javascript';\n            el.charset = 'UTF-8';\n            getScriptParentElement().appendChild(el);\n        });\n    },\n    gapiScript: 'https://apis.google.com/js/api.js',\n    recaptchaV2Script: 'https://www.google.com/recaptcha/api.js',\n    recaptchaEnterpriseScript: 'https://www.google.com/recaptcha/enterprise.js?render='\n});\nregisterAuth(\"Browser\" /* ClientPlatform.BROWSER */);\n\nexport { TwitterAuthProvider as $, ActionCodeOperation as A, updateCurrentUser as B, signOut as C, revokeAccessToken as D, deleteUser as E, FactorId as F, debugErrorMap as G, prodErrorMap as H, AUTH_ERROR_CODES_MAP_DO_NOT_USE_INTERNALLY as I, initializeAuth as J, connectAuthEmulator as K, AuthCredential as L, EmailAuthCredential as M, OAuthCredential as N, OperationType as O, PhoneAuthProvider as P, PhoneAuthCredential as Q, RecaptchaVerifier as R, SignInMethod as S, TotpMultiFactorGenerator as T, inMemoryPersistence as U, EmailAuthProvider as V, FacebookAuthProvider as W, GoogleAuthProvider as X, GithubAuthProvider as Y, OAuthProvider as Z, SAMLAuthProvider as _, browserSessionPersistence as a, signInAnonymously as a0, signInWithCredential as a1, linkWithCredential as a2, reauthenticateWithCredential as a3, signInWithCustomToken as a4, sendPasswordResetEmail as a5, confirmPasswordReset as a6, applyActionCode as a7, checkActionCode as a8, verifyPasswordResetCode as a9, _isIOS7Or8 as aA, _createError as aB, _assert as aC, AuthEventManager as aD, _getInstance as aE, _persistenceKeyName as aF, _getRedirectResult as aG, _overrideRedirectResult as aH, _clearRedirectOutcomes as aI, _castAuth as aJ, UserImpl as aK, AuthImpl as aL, _getClientVersion as aM, _generateEventId as aN, AuthPopup as aO, FetchProvider as aP, SAMLAuthCredential as aQ, createUserWithEmailAndPassword as aa, signInWithEmailAndPassword as ab, sendSignInLinkToEmail as ac, isSignInWithEmailLink as ad, signInWithEmailLink as ae, fetchSignInMethodsForEmail as af, sendEmailVerification as ag, verifyBeforeUpdateEmail as ah, ActionCodeURL as ai, parseActionCodeURL as aj, updateProfile as ak, updateEmail as al, updatePassword as am, getIdToken as an, getIdTokenResult as ao, unlink as ap, getAdditionalUserInfo as aq, reload as ar, getMultiFactorResolver as as, multiFactor as at, debugAssert as au, _isIOS as av, _isAndroid as aw, _fail as ax, _getRedirectUrl as ay, _getProjectConfig as az, browserLocalPersistence as b, signInWithPopup as c, linkWithPopup as d, reauthenticateWithPopup as e, signInWithRedirect as f, linkWithRedirect as g, reauthenticateWithRedirect as h, indexedDBLocalPersistence as i, getRedirectResult as j, browserPopupRedirectResolver as k, linkWithPhoneNumber as l, PhoneMultiFactorGenerator as m, TotpSecret as n, getAuth as o, ProviderId as p, setPersistence as q, reauthenticateWithPhoneNumber as r, signInWithPhoneNumber as s, initializeRecaptchaConfig as t, updatePhoneNumber as u, validatePassword as v, onIdTokenChanged as w, beforeAuthStateChanged as x, onAuthStateChanged as y, useDeviceLanguage as z };\n//# sourceMappingURL=index-2cab5241.js.map\n","import { _getProvider, getApp, SDK_VERSION as SDK_VERSION$1, _registerComponent, registerVersion } from '@firebase/app';\nimport { Component, ComponentContainer, Provider } from '@firebase/component';\nimport { stringify, jsonEval, contains, assert, isNodeSdk, stringToByteArray, Sha1, base64, deepCopy, base64Encode, isMobileCordova, stringLength, Deferred, safeGet, isAdmin, isValidFormat, isEmpty, isReactNative, assertionError, map, querystring, errorPrefix, getModularInstance, getDefaultEmulatorHostnameAndPort, createMockUserToken } from '@firebase/util';\nimport { Logger, LogLevel } from '@firebase/logger';\n\nconst name = \"@firebase/database\";\nconst version = \"1.0.10\";\n\n/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/** The semver (www.semver.org) version of the SDK. */\nlet SDK_VERSION = '';\n/**\n * SDK_VERSION should be set before any database instance is created\n * @internal\n */\nfunction setSDKVersion(version) {\n    SDK_VERSION = version;\n}\n\n/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Wraps a DOM Storage object and:\n * - automatically encode objects as JSON strings before storing them to allow us to store arbitrary types.\n * - prefixes names with \"firebase:\" to avoid collisions with app data.\n *\n * We automatically (see storage.js) create two such wrappers, one for sessionStorage,\n * and one for localStorage.\n *\n */\nclass DOMStorageWrapper {\n    /**\n     * @param domStorage_ - The underlying storage object (e.g. localStorage or sessionStorage)\n     */\n    constructor(domStorage_) {\n        this.domStorage_ = domStorage_;\n        // Use a prefix to avoid collisions with other stuff saved by the app.\n        this.prefix_ = 'firebase:';\n    }\n    /**\n     * @param key - The key to save the value under\n     * @param value - The value being stored, or null to remove the key.\n     */\n    set(key, value) {\n        if (value == null) {\n            this.domStorage_.removeItem(this.prefixedName_(key));\n        }\n        else {\n            this.domStorage_.setItem(this.prefixedName_(key), stringify(value));\n        }\n    }\n    /**\n     * @returns The value that was stored under this key, or null\n     */\n    get(key) {\n        const storedVal = this.domStorage_.getItem(this.prefixedName_(key));\n        if (storedVal == null) {\n            return null;\n        }\n        else {\n            return jsonEval(storedVal);\n        }\n    }\n    remove(key) {\n        this.domStorage_.removeItem(this.prefixedName_(key));\n    }\n    prefixedName_(name) {\n        return this.prefix_ + name;\n    }\n    toString() {\n        return this.domStorage_.toString();\n    }\n}\n\n/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * An in-memory storage implementation that matches the API of DOMStorageWrapper\n * (TODO: create interface for both to implement).\n */\nclass MemoryStorage {\n    constructor() {\n        this.cache_ = {};\n        this.isInMemoryStorage = true;\n    }\n    set(key, value) {\n        if (value == null) {\n            delete this.cache_[key];\n        }\n        else {\n            this.cache_[key] = value;\n        }\n    }\n    get(key) {\n        if (contains(this.cache_, key)) {\n            return this.cache_[key];\n        }\n        return null;\n    }\n    remove(key) {\n        delete this.cache_[key];\n    }\n}\n\n/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Helper to create a DOMStorageWrapper or else fall back to MemoryStorage.\n * TODO: Once MemoryStorage and DOMStorageWrapper have a shared interface this method annotation should change\n * to reflect this type\n *\n * @param domStorageName - Name of the underlying storage object\n *   (e.g. 'localStorage' or 'sessionStorage').\n * @returns Turning off type information until a common interface is defined.\n */\nconst createStoragefor = function (domStorageName) {\n    try {\n        // NOTE: just accessing \"localStorage\" or \"window['localStorage']\" may throw a security exception,\n        // so it must be inside the try/catch.\n        if (typeof window !== 'undefined' &&\n            typeof window[domStorageName] !== 'undefined') {\n            // Need to test cache. Just because it's here doesn't mean it works\n            const domStorage = window[domStorageName];\n            domStorage.setItem('firebase:sentinel', 'cache');\n            domStorage.removeItem('firebase:sentinel');\n            return new DOMStorageWrapper(domStorage);\n        }\n    }\n    catch (e) { }\n    // Failed to create wrapper.  Just return in-memory storage.\n    // TODO: log?\n    return new MemoryStorage();\n};\n/** A storage object that lasts across sessions */\nconst PersistentStorage = createStoragefor('localStorage');\n/** A storage object that only lasts one session */\nconst SessionStorage = createStoragefor('sessionStorage');\n\n/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nconst logClient = new Logger('@firebase/database');\n/**\n * Returns a locally-unique ID (generated by just incrementing up from 0 each time its called).\n */\nconst LUIDGenerator = (function () {\n    let id = 1;\n    return function () {\n        return id++;\n    };\n})();\n/**\n * Sha1 hash of the input string\n * @param str - The string to hash\n * @returns {!string} The resulting hash\n */\nconst sha1 = function (str) {\n    const utf8Bytes = stringToByteArray(str);\n    const sha1 = new Sha1();\n    sha1.update(utf8Bytes);\n    const sha1Bytes = sha1.digest();\n    return base64.encodeByteArray(sha1Bytes);\n};\nconst buildLogMessage_ = function (...varArgs) {\n    let message = '';\n    for (let i = 0; i < varArgs.length; i++) {\n        const arg = varArgs[i];\n        if (Array.isArray(arg) ||\n            (arg &&\n                typeof arg === 'object' &&\n                // eslint-disable-next-line @typescript-eslint/no-explicit-any\n                typeof arg.length === 'number')) {\n            message += buildLogMessage_.apply(null, arg);\n        }\n        else if (typeof arg === 'object') {\n            message += stringify(arg);\n        }\n        else {\n            message += arg;\n        }\n        message += ' ';\n    }\n    return message;\n};\n/**\n * Use this for all debug messages in Firebase.\n */\nlet logger = null;\n/**\n * Flag to check for log availability on first log message\n */\nlet firstLog_ = true;\n/**\n * The implementation of Firebase.enableLogging (defined here to break dependencies)\n * @param logger_ - A flag to turn on logging, or a custom logger\n * @param persistent - Whether or not to persist logging settings across refreshes\n */\nconst enableLogging$1 = function (logger_, persistent) {\n    assert(!persistent || logger_ === true || logger_ === false, \"Can't turn on custom loggers persistently.\");\n    if (logger_ === true) {\n        logClient.logLevel = LogLevel.VERBOSE;\n        logger = logClient.log.bind(logClient);\n        if (persistent) {\n            SessionStorage.set('logging_enabled', true);\n        }\n    }\n    else if (typeof logger_ === 'function') {\n        logger = logger_;\n    }\n    else {\n        logger = null;\n        SessionStorage.remove('logging_enabled');\n    }\n};\nconst log = function (...varArgs) {\n    if (firstLog_ === true) {\n        firstLog_ = false;\n        if (logger === null && SessionStorage.get('logging_enabled') === true) {\n            enableLogging$1(true);\n        }\n    }\n    if (logger) {\n        const message = buildLogMessage_.apply(null, varArgs);\n        logger(message);\n    }\n};\nconst logWrapper = function (prefix) {\n    return function (...varArgs) {\n        log(prefix, ...varArgs);\n    };\n};\nconst error = function (...varArgs) {\n    const message = 'FIREBASE INTERNAL ERROR: ' + buildLogMessage_(...varArgs);\n    logClient.error(message);\n};\nconst fatal = function (...varArgs) {\n    const message = `FIREBASE FATAL ERROR: ${buildLogMessage_(...varArgs)}`;\n    logClient.error(message);\n    throw new Error(message);\n};\nconst warn = function (...varArgs) {\n    const message = 'FIREBASE WARNING: ' + buildLogMessage_(...varArgs);\n    logClient.warn(message);\n};\n/**\n * Logs a warning if the containing page uses https. Called when a call to new Firebase\n * does not use https.\n */\nconst warnIfPageIsSecure = function () {\n    // Be very careful accessing browser globals. Who knows what may or may not exist.\n    if (typeof window !== 'undefined' &&\n        window.location &&\n        window.location.protocol &&\n        window.location.protocol.indexOf('https:') !== -1) {\n        warn('Insecure Firebase access from a secure page. ' +\n            'Please use https in calls to new Firebase().');\n    }\n};\n/**\n * Returns true if data is NaN, or +/- Infinity.\n */\nconst isInvalidJSONNumber = function (data) {\n    return (typeof data === 'number' &&\n        (data !== data || // NaN\n            data === Number.POSITIVE_INFINITY ||\n            data === Number.NEGATIVE_INFINITY));\n};\nconst executeWhenDOMReady = function (fn) {\n    if (isNodeSdk() || document.readyState === 'complete') {\n        fn();\n    }\n    else {\n        // Modeled after jQuery. Try DOMContentLoaded and onreadystatechange (which\n        // fire before onload), but fall back to onload.\n        let called = false;\n        const wrappedFn = function () {\n            if (!document.body) {\n                setTimeout(wrappedFn, Math.floor(10));\n                return;\n            }\n            if (!called) {\n                called = true;\n                fn();\n            }\n        };\n        if (document.addEventListener) {\n            document.addEventListener('DOMContentLoaded', wrappedFn, false);\n            // fallback to onload.\n            window.addEventListener('load', wrappedFn, false);\n            // eslint-disable-next-line @typescript-eslint/no-explicit-any\n        }\n        else if (document.attachEvent) {\n            // IE.\n            // eslint-disable-next-line @typescript-eslint/no-explicit-any\n            document.attachEvent('onreadystatechange', () => {\n                if (document.readyState === 'complete') {\n                    wrappedFn();\n                }\n            });\n            // fallback to onload.\n            // eslint-disable-next-line @typescript-eslint/no-explicit-any\n            window.attachEvent('onload', wrappedFn);\n            // jQuery has an extra hack for IE that we could employ (based on\n            // http://javascript.nwbox.com/IEContentLoaded/) But it looks really old.\n            // I'm hoping we don't need it.\n        }\n    }\n};\n/**\n * Minimum key name. Invalid for actual data, used as a marker to sort before any valid names\n */\nconst MIN_NAME = '[MIN_NAME]';\n/**\n * Maximum key name. Invalid for actual data, used as a marker to sort above any valid names\n */\nconst MAX_NAME = '[MAX_NAME]';\n/**\n * Compares valid Firebase key names, plus min and max name\n */\nconst nameCompare = function (a, b) {\n    if (a === b) {\n        return 0;\n    }\n    else if (a === MIN_NAME || b === MAX_NAME) {\n        return -1;\n    }\n    else if (b === MIN_NAME || a === MAX_NAME) {\n        return 1;\n    }\n    else {\n        const aAsInt = tryParseInt(a), bAsInt = tryParseInt(b);\n        if (aAsInt !== null) {\n            if (bAsInt !== null) {\n                return aAsInt - bAsInt === 0 ? a.length - b.length : aAsInt - bAsInt;\n            }\n            else {\n                return -1;\n            }\n        }\n        else if (bAsInt !== null) {\n            return 1;\n        }\n        else {\n            return a < b ? -1 : 1;\n        }\n    }\n};\n/**\n * @returns {!number} comparison result.\n */\nconst stringCompare = function (a, b) {\n    if (a === b) {\n        return 0;\n    }\n    else if (a < b) {\n        return -1;\n    }\n    else {\n        return 1;\n    }\n};\nconst requireKey = function (key, obj) {\n    if (obj && key in obj) {\n        return obj[key];\n    }\n    else {\n        throw new Error('Missing required key (' + key + ') in object: ' + stringify(obj));\n    }\n};\nconst ObjectToUniqueKey = function (obj) {\n    if (typeof obj !== 'object' || obj === null) {\n        return stringify(obj);\n    }\n    const keys = [];\n    // eslint-disable-next-line guard-for-in\n    for (const k in obj) {\n        keys.push(k);\n    }\n    // Export as json, but with the keys sorted.\n    keys.sort();\n    let key = '{';\n    for (let i = 0; i < keys.length; i++) {\n        if (i !== 0) {\n            key += ',';\n        }\n        key += stringify(keys[i]);\n        key += ':';\n        key += ObjectToUniqueKey(obj[keys[i]]);\n    }\n    key += '}';\n    return key;\n};\n/**\n * Splits a string into a number of smaller segments of maximum size\n * @param str - The string\n * @param segsize - The maximum number of chars in the string.\n * @returns The string, split into appropriately-sized chunks\n */\nconst splitStringBySize = function (str, segsize) {\n    const len = str.length;\n    if (len <= segsize) {\n        return [str];\n    }\n    const dataSegs = [];\n    for (let c = 0; c < len; c += segsize) {\n        if (c + segsize > len) {\n            dataSegs.push(str.substring(c, len));\n        }\n        else {\n            dataSegs.push(str.substring(c, c + segsize));\n        }\n    }\n    return dataSegs;\n};\n/**\n * Apply a function to each (key, value) pair in an object or\n * apply a function to each (index, value) pair in an array\n * @param obj - The object or array to iterate over\n * @param fn - The function to apply\n */\nfunction each(obj, fn) {\n    for (const key in obj) {\n        if (obj.hasOwnProperty(key)) {\n            fn(key, obj[key]);\n        }\n    }\n}\n/**\n * Borrowed from http://hg.secondlife.com/llsd/src/tip/js/typedarray.js (MIT License)\n * I made one modification at the end and removed the NaN / Infinity\n * handling (since it seemed broken [caused an overflow] and we don't need it).  See MJL comments.\n * @param v - A double\n *\n */\nconst doubleToIEEE754String = function (v) {\n    assert(!isInvalidJSONNumber(v), 'Invalid JSON number'); // MJL\n    const ebits = 11, fbits = 52;\n    const bias = (1 << (ebits - 1)) - 1;\n    let s, e, f, ln, i;\n    // Compute sign, exponent, fraction\n    // Skip NaN / Infinity handling --MJL.\n    if (v === 0) {\n        e = 0;\n        f = 0;\n        s = 1 / v === -Infinity ? 1 : 0;\n    }\n    else {\n        s = v < 0;\n        v = Math.abs(v);\n        if (v >= Math.pow(2, 1 - bias)) {\n            // Normalized\n            ln = Math.min(Math.floor(Math.log(v) / Math.LN2), bias);\n            e = ln + bias;\n            f = Math.round(v * Math.pow(2, fbits - ln) - Math.pow(2, fbits));\n        }\n        else {\n            // Denormalized\n            e = 0;\n            f = Math.round(v / Math.pow(2, 1 - bias - fbits));\n        }\n    }\n    // Pack sign, exponent, fraction\n    const bits = [];\n    for (i = fbits; i; i -= 1) {\n        bits.push(f % 2 ? 1 : 0);\n        f = Math.floor(f / 2);\n    }\n    for (i = ebits; i; i -= 1) {\n        bits.push(e % 2 ? 1 : 0);\n        e = Math.floor(e / 2);\n    }\n    bits.push(s ? 1 : 0);\n    bits.reverse();\n    const str = bits.join('');\n    // Return the data as a hex string. --MJL\n    let hexByteString = '';\n    for (i = 0; i < 64; i += 8) {\n        let hexByte = parseInt(str.substr(i, 8), 2).toString(16);\n        if (hexByte.length === 1) {\n            hexByte = '0' + hexByte;\n        }\n        hexByteString = hexByteString + hexByte;\n    }\n    return hexByteString.toLowerCase();\n};\n/**\n * Used to detect if we're in a Chrome content script (which executes in an\n * isolated environment where long-polling doesn't work).\n */\nconst isChromeExtensionContentScript = function () {\n    return !!(typeof window === 'object' &&\n        window['chrome'] &&\n        window['chrome']['extension'] &&\n        !/^chrome/.test(window.location.href));\n};\n/**\n * Used to detect if we're in a Windows 8 Store app.\n */\nconst isWindowsStoreApp = function () {\n    // Check for the presence of a couple WinRT globals\n    return typeof Windows === 'object' && typeof Windows.UI === 'object';\n};\n/**\n * Converts a server error code to a JavaScript Error\n */\nfunction errorForServerCode(code, query) {\n    let reason = 'Unknown Error';\n    if (code === 'too_big') {\n        reason =\n            'The data requested exceeds the maximum size ' +\n                'that can be accessed with a single request.';\n    }\n    else if (code === 'permission_denied') {\n        reason = \"Client doesn't have permission to access the desired data.\";\n    }\n    else if (code === 'unavailable') {\n        reason = 'The service is unavailable';\n    }\n    const error = new Error(code + ' at ' + query._path.toString() + ': ' + reason);\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    error.code = code.toUpperCase();\n    return error;\n}\n/**\n * Used to test for integer-looking strings\n */\nconst INTEGER_REGEXP_ = new RegExp('^-?(0*)\\\\d{1,10}$');\n/**\n * For use in keys, the minimum possible 32-bit integer.\n */\nconst INTEGER_32_MIN = -2147483648;\n/**\n * For use in keys, the maximum possible 32-bit integer.\n */\nconst INTEGER_32_MAX = 2147483647;\n/**\n * If the string contains a 32-bit integer, return it.  Else return null.\n */\nconst tryParseInt = function (str) {\n    if (INTEGER_REGEXP_.test(str)) {\n        const intVal = Number(str);\n        if (intVal >= INTEGER_32_MIN && intVal <= INTEGER_32_MAX) {\n            return intVal;\n        }\n    }\n    return null;\n};\n/**\n * Helper to run some code but catch any exceptions and re-throw them later.\n * Useful for preventing user callbacks from breaking internal code.\n *\n * Re-throwing the exception from a setTimeout is a little evil, but it's very\n * convenient (we don't have to try to figure out when is a safe point to\n * re-throw it), and the behavior seems reasonable:\n *\n * * If you aren't pausing on exceptions, you get an error in the console with\n *   the correct stack trace.\n * * If you're pausing on all exceptions, the debugger will pause on your\n *   exception and then again when we rethrow it.\n * * If you're only pausing on uncaught exceptions, the debugger will only pause\n *   on us re-throwing it.\n *\n * @param fn - The code to guard.\n */\nconst exceptionGuard = function (fn) {\n    try {\n        fn();\n    }\n    catch (e) {\n        // Re-throw exception when it's safe.\n        setTimeout(() => {\n            // It used to be that \"throw e\" would result in a good console error with\n            // relevant context, but as of Chrome 39, you just get the firebase.js\n            // file/line number where we re-throw it, which is useless. So we log\n            // e.stack explicitly.\n            const stack = e.stack || '';\n            warn('Exception was thrown by user callback.', stack);\n            throw e;\n        }, Math.floor(0));\n    }\n};\n/**\n * @returns {boolean} true if we think we're currently being crawled.\n */\nconst beingCrawled = function () {\n    const userAgent = (typeof window === 'object' &&\n        window['navigator'] &&\n        window['navigator']['userAgent']) ||\n        '';\n    // For now we whitelist the most popular crawlers.  We should refine this to be the set of crawlers we\n    // believe to support JavaScript/AJAX rendering.\n    // NOTE: Google Webmaster Tools doesn't really belong, but their \"This is how a visitor to your website\n    // would have seen the page\" is flaky if we don't treat it as a crawler.\n    return (userAgent.search(/googlebot|google webmaster tools|bingbot|yahoo! slurp|baiduspider|yandexbot|duckduckbot/i) >= 0);\n};\n/**\n * Same as setTimeout() except on Node.JS it will /not/ prevent the process from exiting.\n *\n * It is removed with clearTimeout() as normal.\n *\n * @param fn - Function to run.\n * @param time - Milliseconds to wait before running.\n * @returns The setTimeout() return value.\n */\nconst setTimeoutNonBlocking = function (fn, time) {\n    const timeout = setTimeout(fn, time);\n    // Note: at the time of this comment, unrefTimer is under the unstable set of APIs. Run with --unstable to enable the API.\n    if (typeof timeout === 'number' &&\n        // @ts-ignore Is only defined in Deno environments.\n        typeof Deno !== 'undefined' &&\n        // @ts-ignore Deno and unrefTimer are only defined in Deno environments.\n        Deno['unrefTimer']) {\n        // @ts-ignore Deno and unrefTimer are only defined in Deno environments.\n        Deno.unrefTimer(timeout);\n        // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    }\n    else if (typeof timeout === 'object' && timeout['unref']) {\n        // eslint-disable-next-line @typescript-eslint/no-explicit-any\n        timeout['unref']();\n    }\n    return timeout;\n};\n\n/**\n * @license\n * Copyright 2021 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Abstraction around AppCheck's token fetching capabilities.\n */\nclass AppCheckTokenProvider {\n    constructor(appName_, appCheckProvider) {\n        this.appName_ = appName_;\n        this.appCheckProvider = appCheckProvider;\n        this.appCheck = appCheckProvider === null || appCheckProvider === void 0 ? void 0 : appCheckProvider.getImmediate({ optional: true });\n        if (!this.appCheck) {\n            appCheckProvider === null || appCheckProvider === void 0 ? void 0 : appCheckProvider.get().then(appCheck => (this.appCheck = appCheck));\n        }\n    }\n    getToken(forceRefresh) {\n        if (!this.appCheck) {\n            return new Promise((resolve, reject) => {\n                // Support delayed initialization of FirebaseAppCheck. This allows our\n                // customers to initialize the RTDB SDK before initializing Firebase\n                // AppCheck and ensures that all requests are authenticated if a token\n                // becomes available before the timeout below expires.\n                setTimeout(() => {\n                    if (this.appCheck) {\n                        this.getToken(forceRefresh).then(resolve, reject);\n                    }\n                    else {\n                        resolve(null);\n                    }\n                }, 0);\n            });\n        }\n        return this.appCheck.getToken(forceRefresh);\n    }\n    addTokenChangeListener(listener) {\n        var _a;\n        (_a = this.appCheckProvider) === null || _a === void 0 ? void 0 : _a.get().then(appCheck => appCheck.addTokenListener(listener));\n    }\n    notifyForInvalidToken() {\n        warn(`Provided AppCheck credentials for the app named \"${this.appName_}\" ` +\n            'are invalid. This usually indicates your app was not initialized correctly.');\n    }\n}\n\n/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Abstraction around FirebaseApp's token fetching capabilities.\n */\nclass FirebaseAuthTokenProvider {\n    constructor(appName_, firebaseOptions_, authProvider_) {\n        this.appName_ = appName_;\n        this.firebaseOptions_ = firebaseOptions_;\n        this.authProvider_ = authProvider_;\n        this.auth_ = null;\n        this.auth_ = authProvider_.getImmediate({ optional: true });\n        if (!this.auth_) {\n            authProvider_.onInit(auth => (this.auth_ = auth));\n        }\n    }\n    getToken(forceRefresh) {\n        if (!this.auth_) {\n            return new Promise((resolve, reject) => {\n                // Support delayed initialization of FirebaseAuth. This allows our\n                // customers to initialize the RTDB SDK before initializing Firebase\n                // Auth and ensures that all requests are authenticated if a token\n                // becomes available before the timeout below expires.\n                setTimeout(() => {\n                    if (this.auth_) {\n                        this.getToken(forceRefresh).then(resolve, reject);\n                    }\n                    else {\n                        resolve(null);\n                    }\n                }, 0);\n            });\n        }\n        return this.auth_.getToken(forceRefresh).catch(error => {\n            // TODO: Need to figure out all the cases this is raised and whether\n            // this makes sense.\n            if (error && error.code === 'auth/token-not-initialized') {\n                log('Got auth/token-not-initialized error.  Treating as null token.');\n                return null;\n            }\n            else {\n                return Promise.reject(error);\n            }\n        });\n    }\n    addTokenChangeListener(listener) {\n        // TODO: We might want to wrap the listener and call it with no args to\n        // avoid a leaky abstraction, but that makes removing the listener harder.\n        if (this.auth_) {\n            this.auth_.addAuthTokenListener(listener);\n        }\n        else {\n            this.authProvider_\n                .get()\n                .then(auth => auth.addAuthTokenListener(listener));\n        }\n    }\n    removeTokenChangeListener(listener) {\n        this.authProvider_\n            .get()\n            .then(auth => auth.removeAuthTokenListener(listener));\n    }\n    notifyForInvalidToken() {\n        let errorMessage = 'Provided authentication credentials for the app named \"' +\n            this.appName_ +\n            '\" are invalid. This usually indicates your app was not ' +\n            'initialized correctly. ';\n        if ('credential' in this.firebaseOptions_) {\n            errorMessage +=\n                'Make sure the \"credential\" property provided to initializeApp() ' +\n                    'is authorized to access the specified \"databaseURL\" and is from the correct ' +\n                    'project.';\n        }\n        else if ('serviceAccount' in this.firebaseOptions_) {\n            errorMessage +=\n                'Make sure the \"serviceAccount\" property provided to initializeApp() ' +\n                    'is authorized to access the specified \"databaseURL\" and is from the correct ' +\n                    'project.';\n        }\n        else {\n            errorMessage +=\n                'Make sure the \"apiKey\" and \"databaseURL\" properties provided to ' +\n                    'initializeApp() match the values provided for your app at ' +\n                    'https://console.firebase.google.com/.';\n        }\n        warn(errorMessage);\n    }\n}\n/* AuthTokenProvider that supplies a constant token. Used by Admin SDK or mockUserToken with emulators. */\nclass EmulatorTokenProvider {\n    constructor(accessToken) {\n        this.accessToken = accessToken;\n    }\n    getToken(forceRefresh) {\n        return Promise.resolve({\n            accessToken: this.accessToken\n        });\n    }\n    addTokenChangeListener(listener) {\n        // Invoke the listener immediately to match the behavior in Firebase Auth\n        // (see packages/auth/src/auth.js#L1807)\n        listener(this.accessToken);\n    }\n    removeTokenChangeListener(listener) { }\n    notifyForInvalidToken() { }\n}\n/** A string that is treated as an admin access token by the RTDB emulator. Used by Admin SDK. */\nEmulatorTokenProvider.OWNER = 'owner';\n\n/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nconst PROTOCOL_VERSION = '5';\nconst VERSION_PARAM = 'v';\nconst TRANSPORT_SESSION_PARAM = 's';\nconst REFERER_PARAM = 'r';\nconst FORGE_REF = 'f';\n// Matches console.firebase.google.com, firebase-console-*.corp.google.com and\n// firebase.corp.google.com\nconst FORGE_DOMAIN_RE = /(console\\.firebase|firebase-console-\\w+\\.corp|firebase\\.corp)\\.google\\.com/;\nconst LAST_SESSION_PARAM = 'ls';\nconst APPLICATION_ID_PARAM = 'p';\nconst APP_CHECK_TOKEN_PARAM = 'ac';\nconst WEBSOCKET = 'websocket';\nconst LONG_POLLING = 'long_polling';\n\n/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * A class that holds metadata about a Repo object\n */\nclass RepoInfo {\n    /**\n     * @param host - Hostname portion of the url for the repo\n     * @param secure - Whether or not this repo is accessed over ssl\n     * @param namespace - The namespace represented by the repo\n     * @param webSocketOnly - Whether to prefer websockets over all other transports (used by Nest).\n     * @param nodeAdmin - Whether this instance uses Admin SDK credentials\n     * @param persistenceKey - Override the default session persistence storage key\n     */\n    constructor(host, secure, namespace, webSocketOnly, nodeAdmin = false, persistenceKey = '', includeNamespaceInQueryParams = false, isUsingEmulator = false) {\n        this.secure = secure;\n        this.namespace = namespace;\n        this.webSocketOnly = webSocketOnly;\n        this.nodeAdmin = nodeAdmin;\n        this.persistenceKey = persistenceKey;\n        this.includeNamespaceInQueryParams = includeNamespaceInQueryParams;\n        this.isUsingEmulator = isUsingEmulator;\n        this._host = host.toLowerCase();\n        this._domain = this._host.substr(this._host.indexOf('.') + 1);\n        this.internalHost =\n            PersistentStorage.get('host:' + host) || this._host;\n    }\n    isCacheableHost() {\n        return this.internalHost.substr(0, 2) === 's-';\n    }\n    isCustomHost() {\n        return (this._domain !== 'firebaseio.com' &&\n            this._domain !== 'firebaseio-demo.com');\n    }\n    get host() {\n        return this._host;\n    }\n    set host(newHost) {\n        if (newHost !== this.internalHost) {\n            this.internalHost = newHost;\n            if (this.isCacheableHost()) {\n                PersistentStorage.set('host:' + this._host, this.internalHost);\n            }\n        }\n    }\n    toString() {\n        let str = this.toURLString();\n        if (this.persistenceKey) {\n            str += '<' + this.persistenceKey + '>';\n        }\n        return str;\n    }\n    toURLString() {\n        const protocol = this.secure ? 'https://' : 'http://';\n        const query = this.includeNamespaceInQueryParams\n            ? `?ns=${this.namespace}`\n            : '';\n        return `${protocol}${this.host}/${query}`;\n    }\n}\nfunction repoInfoNeedsQueryParam(repoInfo) {\n    return (repoInfo.host !== repoInfo.internalHost ||\n        repoInfo.isCustomHost() ||\n        repoInfo.includeNamespaceInQueryParams);\n}\n/**\n * Returns the websocket URL for this repo\n * @param repoInfo - RepoInfo object\n * @param type - of connection\n * @param params - list\n * @returns The URL for this repo\n */\nfunction repoInfoConnectionURL(repoInfo, type, params) {\n    assert(typeof type === 'string', 'typeof type must == string');\n    assert(typeof params === 'object', 'typeof params must == object');\n    let connURL;\n    if (type === WEBSOCKET) {\n        connURL =\n            (repoInfo.secure ? 'wss://' : 'ws://') + repoInfo.internalHost + '/.ws?';\n    }\n    else if (type === LONG_POLLING) {\n        connURL =\n            (repoInfo.secure ? 'https://' : 'http://') +\n                repoInfo.internalHost +\n                '/.lp?';\n    }\n    else {\n        throw new Error('Unknown connection type: ' + type);\n    }\n    if (repoInfoNeedsQueryParam(repoInfo)) {\n        params['ns'] = repoInfo.namespace;\n    }\n    const pairs = [];\n    each(params, (key, value) => {\n        pairs.push(key + '=' + value);\n    });\n    return connURL + pairs.join('&');\n}\n\n/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Tracks a collection of stats.\n */\nclass StatsCollection {\n    constructor() {\n        this.counters_ = {};\n    }\n    incrementCounter(name, amount = 1) {\n        if (!contains(this.counters_, name)) {\n            this.counters_[name] = 0;\n        }\n        this.counters_[name] += amount;\n    }\n    get() {\n        return deepCopy(this.counters_);\n    }\n}\n\n/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nconst collections = {};\nconst reporters = {};\nfunction statsManagerGetCollection(repoInfo) {\n    const hashString = repoInfo.toString();\n    if (!collections[hashString]) {\n        collections[hashString] = new StatsCollection();\n    }\n    return collections[hashString];\n}\nfunction statsManagerGetOrCreateReporter(repoInfo, creatorFunction) {\n    const hashString = repoInfo.toString();\n    if (!reporters[hashString]) {\n        reporters[hashString] = creatorFunction();\n    }\n    return reporters[hashString];\n}\n\n/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * This class ensures the packets from the server arrive in order\n * This class takes data from the server and ensures it gets passed into the callbacks in order.\n */\nclass PacketReceiver {\n    /**\n     * @param onMessage_\n     */\n    constructor(onMessage_) {\n        this.onMessage_ = onMessage_;\n        this.pendingResponses = [];\n        this.currentResponseNum = 0;\n        this.closeAfterResponse = -1;\n        this.onClose = null;\n    }\n    closeAfter(responseNum, callback) {\n        this.closeAfterResponse = responseNum;\n        this.onClose = callback;\n        if (this.closeAfterResponse < this.currentResponseNum) {\n            this.onClose();\n            this.onClose = null;\n        }\n    }\n    /**\n     * Each message from the server comes with a response number, and an array of data. The responseNumber\n     * allows us to ensure that we process them in the right order, since we can't be guaranteed that all\n     * browsers will respond in the same order as the requests we sent\n     */\n    handleResponse(requestNum, data) {\n        this.pendingResponses[requestNum] = data;\n        while (this.pendingResponses[this.currentResponseNum]) {\n            const toProcess = this.pendingResponses[this.currentResponseNum];\n            delete this.pendingResponses[this.currentResponseNum];\n            for (let i = 0; i < toProcess.length; ++i) {\n                if (toProcess[i]) {\n                    exceptionGuard(() => {\n                        this.onMessage_(toProcess[i]);\n                    });\n                }\n            }\n            if (this.currentResponseNum === this.closeAfterResponse) {\n                if (this.onClose) {\n                    this.onClose();\n                    this.onClose = null;\n                }\n                break;\n            }\n            this.currentResponseNum++;\n        }\n    }\n}\n\n/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n// URL query parameters associated with longpolling\nconst FIREBASE_LONGPOLL_START_PARAM = 'start';\nconst FIREBASE_LONGPOLL_CLOSE_COMMAND = 'close';\nconst FIREBASE_LONGPOLL_COMMAND_CB_NAME = 'pLPCommand';\nconst FIREBASE_LONGPOLL_DATA_CB_NAME = 'pRTLPCB';\nconst FIREBASE_LONGPOLL_ID_PARAM = 'id';\nconst FIREBASE_LONGPOLL_PW_PARAM = 'pw';\nconst FIREBASE_LONGPOLL_SERIAL_PARAM = 'ser';\nconst FIREBASE_LONGPOLL_CALLBACK_ID_PARAM = 'cb';\nconst FIREBASE_LONGPOLL_SEGMENT_NUM_PARAM = 'seg';\nconst FIREBASE_LONGPOLL_SEGMENTS_IN_PACKET = 'ts';\nconst FIREBASE_LONGPOLL_DATA_PARAM = 'd';\nconst FIREBASE_LONGPOLL_DISCONN_FRAME_REQUEST_PARAM = 'dframe';\n//Data size constants.\n//TODO: Perf: the maximum length actually differs from browser to browser.\n// We should check what browser we're on and set accordingly.\nconst MAX_URL_DATA_SIZE = 1870;\nconst SEG_HEADER_SIZE = 30; //ie: &seg=8299234&ts=982389123&d=\nconst MAX_PAYLOAD_SIZE = MAX_URL_DATA_SIZE - SEG_HEADER_SIZE;\n/**\n * Keepalive period\n * send a fresh request at minimum every 25 seconds. Opera has a maximum request\n * length of 30 seconds that we can't exceed.\n */\nconst KEEPALIVE_REQUEST_INTERVAL = 25000;\n/**\n * How long to wait before aborting a long-polling connection attempt.\n */\nconst LP_CONNECT_TIMEOUT = 30000;\n/**\n * This class manages a single long-polling connection.\n */\nclass BrowserPollConnection {\n    /**\n     * @param connId An identifier for this connection, used for logging\n     * @param repoInfo The info for the endpoint to send data to.\n     * @param applicationId The Firebase App ID for this project.\n     * @param appCheckToken The AppCheck token for this client.\n     * @param authToken The AuthToken to use for this connection.\n     * @param transportSessionId Optional transportSessionid if we are\n     * reconnecting for an existing transport session\n     * @param lastSessionId Optional lastSessionId if the PersistentConnection has\n     * already created a connection previously\n     */\n    constructor(connId, repoInfo, applicationId, appCheckToken, authToken, transportSessionId, lastSessionId) {\n        this.connId = connId;\n        this.repoInfo = repoInfo;\n        this.applicationId = applicationId;\n        this.appCheckToken = appCheckToken;\n        this.authToken = authToken;\n        this.transportSessionId = transportSessionId;\n        this.lastSessionId = lastSessionId;\n        this.bytesSent = 0;\n        this.bytesReceived = 0;\n        this.everConnected_ = false;\n        this.log_ = logWrapper(connId);\n        this.stats_ = statsManagerGetCollection(repoInfo);\n        this.urlFn = (params) => {\n            // Always add the token if we have one.\n            if (this.appCheckToken) {\n                params[APP_CHECK_TOKEN_PARAM] = this.appCheckToken;\n            }\n            return repoInfoConnectionURL(repoInfo, LONG_POLLING, params);\n        };\n    }\n    /**\n     * @param onMessage - Callback when messages arrive\n     * @param onDisconnect - Callback with connection lost.\n     */\n    open(onMessage, onDisconnect) {\n        this.curSegmentNum = 0;\n        this.onDisconnect_ = onDisconnect;\n        this.myPacketOrderer = new PacketReceiver(onMessage);\n        this.isClosed_ = false;\n        this.connectTimeoutTimer_ = setTimeout(() => {\n            this.log_('Timed out trying to connect.');\n            // Make sure we clear the host cache\n            this.onClosed_();\n            this.connectTimeoutTimer_ = null;\n            // eslint-disable-next-line @typescript-eslint/no-explicit-any\n        }, Math.floor(LP_CONNECT_TIMEOUT));\n        // Ensure we delay the creation of the iframe until the DOM is loaded.\n        executeWhenDOMReady(() => {\n            if (this.isClosed_) {\n                return;\n            }\n            //Set up a callback that gets triggered once a connection is set up.\n            this.scriptTagHolder = new FirebaseIFrameScriptHolder((...args) => {\n                const [command, arg1, arg2, arg3, arg4] = args;\n                this.incrementIncomingBytes_(args);\n                if (!this.scriptTagHolder) {\n                    return; // we closed the connection.\n                }\n                if (this.connectTimeoutTimer_) {\n                    clearTimeout(this.connectTimeoutTimer_);\n                    this.connectTimeoutTimer_ = null;\n                }\n                this.everConnected_ = true;\n                if (command === FIREBASE_LONGPOLL_START_PARAM) {\n                    this.id = arg1;\n                    this.password = arg2;\n                }\n                else if (command === FIREBASE_LONGPOLL_CLOSE_COMMAND) {\n                    // Don't clear the host cache. We got a response from the server, so we know it's reachable\n                    if (arg1) {\n                        // We aren't expecting any more data (other than what the server's already in the process of sending us\n                        // through our already open polls), so don't send any more.\n                        this.scriptTagHolder.sendNewPolls = false;\n                        // arg1 in this case is the last response number sent by the server. We should try to receive\n                        // all of the responses up to this one before closing\n                        this.myPacketOrderer.closeAfter(arg1, () => {\n                            this.onClosed_();\n                        });\n                    }\n                    else {\n                        this.onClosed_();\n                    }\n                }\n                else {\n                    throw new Error('Unrecognized command received: ' + command);\n                }\n            }, (...args) => {\n                const [pN, data] = args;\n                this.incrementIncomingBytes_(args);\n                this.myPacketOrderer.handleResponse(pN, data);\n            }, () => {\n                this.onClosed_();\n            }, this.urlFn);\n            //Send the initial request to connect. The serial number is simply to keep the browser from pulling previous results\n            //from cache.\n            const urlParams = {};\n            urlParams[FIREBASE_LONGPOLL_START_PARAM] = 't';\n            urlParams[FIREBASE_LONGPOLL_SERIAL_PARAM] = Math.floor(Math.random() * 100000000);\n            if (this.scriptTagHolder.uniqueCallbackIdentifier) {\n                urlParams[FIREBASE_LONGPOLL_CALLBACK_ID_PARAM] =\n                    this.scriptTagHolder.uniqueCallbackIdentifier;\n            }\n            urlParams[VERSION_PARAM] = PROTOCOL_VERSION;\n            if (this.transportSessionId) {\n                urlParams[TRANSPORT_SESSION_PARAM] = this.transportSessionId;\n            }\n            if (this.lastSessionId) {\n                urlParams[LAST_SESSION_PARAM] = this.lastSessionId;\n            }\n            if (this.applicationId) {\n                urlParams[APPLICATION_ID_PARAM] = this.applicationId;\n            }\n            if (this.appCheckToken) {\n                urlParams[APP_CHECK_TOKEN_PARAM] = this.appCheckToken;\n            }\n            if (typeof location !== 'undefined' &&\n                location.hostname &&\n                FORGE_DOMAIN_RE.test(location.hostname)) {\n                urlParams[REFERER_PARAM] = FORGE_REF;\n            }\n            const connectURL = this.urlFn(urlParams);\n            this.log_('Connecting via long-poll to ' + connectURL);\n            this.scriptTagHolder.addTag(connectURL, () => {\n                /* do nothing */\n            });\n        });\n    }\n    /**\n     * Call this when a handshake has completed successfully and we want to consider the connection established\n     */\n    start() {\n        this.scriptTagHolder.startLongPoll(this.id, this.password);\n        this.addDisconnectPingFrame(this.id, this.password);\n    }\n    /**\n     * Forces long polling to be considered as a potential transport\n     */\n    static forceAllow() {\n        BrowserPollConnection.forceAllow_ = true;\n    }\n    /**\n     * Forces longpolling to not be considered as a potential transport\n     */\n    static forceDisallow() {\n        BrowserPollConnection.forceDisallow_ = true;\n    }\n    // Static method, use string literal so it can be accessed in a generic way\n    static isAvailable() {\n        if (isNodeSdk()) {\n            return false;\n        }\n        else if (BrowserPollConnection.forceAllow_) {\n            return true;\n        }\n        else {\n            // NOTE: In React-Native there's normally no 'document', but if you debug a React-Native app in\n            // the Chrome debugger, 'document' is defined, but document.createElement is null (2015/06/08).\n            return (!BrowserPollConnection.forceDisallow_ &&\n                typeof document !== 'undefined' &&\n                document.createElement != null &&\n                !isChromeExtensionContentScript() &&\n                !isWindowsStoreApp());\n        }\n    }\n    /**\n     * No-op for polling\n     */\n    markConnectionHealthy() { }\n    /**\n     * Stops polling and cleans up the iframe\n     */\n    shutdown_() {\n        this.isClosed_ = true;\n        if (this.scriptTagHolder) {\n            this.scriptTagHolder.close();\n            this.scriptTagHolder = null;\n        }\n        //remove the disconnect frame, which will trigger an XHR call to the server to tell it we're leaving.\n        if (this.myDisconnFrame) {\n            document.body.removeChild(this.myDisconnFrame);\n            this.myDisconnFrame = null;\n        }\n        if (this.connectTimeoutTimer_) {\n            clearTimeout(this.connectTimeoutTimer_);\n            this.connectTimeoutTimer_ = null;\n        }\n    }\n    /**\n     * Triggered when this transport is closed\n     */\n    onClosed_() {\n        if (!this.isClosed_) {\n            this.log_('Longpoll is closing itself');\n            this.shutdown_();\n            if (this.onDisconnect_) {\n                this.onDisconnect_(this.everConnected_);\n                this.onDisconnect_ = null;\n            }\n        }\n    }\n    /**\n     * External-facing close handler. RealTime has requested we shut down. Kill our connection and tell the server\n     * that we've left.\n     */\n    close() {\n        if (!this.isClosed_) {\n            this.log_('Longpoll is being closed.');\n            this.shutdown_();\n        }\n    }\n    /**\n     * Send the JSON object down to the server. It will need to be stringified, base64 encoded, and then\n     * broken into chunks (since URLs have a small maximum length).\n     * @param data - The JSON data to transmit.\n     */\n    send(data) {\n        const dataStr = stringify(data);\n        this.bytesSent += dataStr.length;\n        this.stats_.incrementCounter('bytes_sent', dataStr.length);\n        //first, lets get the base64-encoded data\n        const base64data = base64Encode(dataStr);\n        //We can only fit a certain amount in each URL, so we need to split this request\n        //up into multiple pieces if it doesn't fit in one request.\n        const dataSegs = splitStringBySize(base64data, MAX_PAYLOAD_SIZE);\n        //Enqueue each segment for transmission. We assign each chunk a sequential ID and a total number\n        //of segments so that we can reassemble the packet on the server.\n        for (let i = 0; i < dataSegs.length; i++) {\n            this.scriptTagHolder.enqueueSegment(this.curSegmentNum, dataSegs.length, dataSegs[i]);\n            this.curSegmentNum++;\n        }\n    }\n    /**\n     * This is how we notify the server that we're leaving.\n     * We aren't able to send requests with DHTML on a window close event, but we can\n     * trigger XHR requests in some browsers (everything but Opera basically).\n     */\n    addDisconnectPingFrame(id, pw) {\n        if (isNodeSdk()) {\n            return;\n        }\n        this.myDisconnFrame = document.createElement('iframe');\n        const urlParams = {};\n        urlParams[FIREBASE_LONGPOLL_DISCONN_FRAME_REQUEST_PARAM] = 't';\n        urlParams[FIREBASE_LONGPOLL_ID_PARAM] = id;\n        urlParams[FIREBASE_LONGPOLL_PW_PARAM] = pw;\n        this.myDisconnFrame.src = this.urlFn(urlParams);\n        this.myDisconnFrame.style.display = 'none';\n        document.body.appendChild(this.myDisconnFrame);\n    }\n    /**\n     * Used to track the bytes received by this client\n     */\n    incrementIncomingBytes_(args) {\n        // TODO: This is an annoying perf hit just to track the number of incoming bytes.  Maybe it should be opt-in.\n        const bytesReceived = stringify(args).length;\n        this.bytesReceived += bytesReceived;\n        this.stats_.incrementCounter('bytes_received', bytesReceived);\n    }\n}\n/*********************************************************************************************\n * A wrapper around an iframe that is used as a long-polling script holder.\n *********************************************************************************************/\nclass FirebaseIFrameScriptHolder {\n    /**\n     * @param commandCB - The callback to be called when control commands are received from the server.\n     * @param onMessageCB - The callback to be triggered when responses arrive from the server.\n     * @param onDisconnect - The callback to be triggered when this tag holder is closed\n     * @param urlFn - A function that provides the URL of the endpoint to send data to.\n     */\n    constructor(commandCB, onMessageCB, onDisconnect, urlFn) {\n        this.onDisconnect = onDisconnect;\n        this.urlFn = urlFn;\n        //We maintain a count of all of the outstanding requests, because if we have too many active at once it can cause\n        //problems in some browsers.\n        this.outstandingRequests = new Set();\n        //A queue of the pending segments waiting for transmission to the server.\n        this.pendingSegs = [];\n        //A serial number. We use this for two things:\n        // 1) A way to ensure the browser doesn't cache responses to polls\n        // 2) A way to make the server aware when long-polls arrive in a different order than we started them. The\n        //    server needs to release both polls in this case or it will cause problems in Opera since Opera can only execute\n        //    JSONP code in the order it was added to the iframe.\n        this.currentSerial = Math.floor(Math.random() * 100000000);\n        // This gets set to false when we're \"closing down\" the connection (e.g. we're switching transports but there's still\n        // incoming data from the server that we're waiting for).\n        this.sendNewPolls = true;\n        if (!isNodeSdk()) {\n            //Each script holder registers a couple of uniquely named callbacks with the window. These are called from the\n            //iframes where we put the long-polling script tags. We have two callbacks:\n            //   1) Command Callback - Triggered for control issues, like starting a connection.\n            //   2) Message Callback - Triggered when new data arrives.\n            this.uniqueCallbackIdentifier = LUIDGenerator();\n            window[FIREBASE_LONGPOLL_COMMAND_CB_NAME + this.uniqueCallbackIdentifier] = commandCB;\n            window[FIREBASE_LONGPOLL_DATA_CB_NAME + this.uniqueCallbackIdentifier] =\n                onMessageCB;\n            //Create an iframe for us to add script tags to.\n            this.myIFrame = FirebaseIFrameScriptHolder.createIFrame_();\n            // Set the iframe's contents.\n            let script = '';\n            // if we set a javascript url, it's IE and we need to set the document domain. The javascript url is sufficient\n            // for ie9, but ie8 needs to do it again in the document itself.\n            if (this.myIFrame.src &&\n                this.myIFrame.src.substr(0, 'javascript:'.length) === 'javascript:') {\n                const currentDomain = document.domain;\n                script = '<script>document.domain=\"' + currentDomain + '\";</script>';\n            }\n            const iframeContents = '<html><body>' + script + '</body></html>';\n            try {\n                this.myIFrame.doc.open();\n                this.myIFrame.doc.write(iframeContents);\n                this.myIFrame.doc.close();\n            }\n            catch (e) {\n                log('frame writing exception');\n                if (e.stack) {\n                    log(e.stack);\n                }\n                log(e);\n            }\n        }\n        else {\n            this.commandCB = commandCB;\n            this.onMessageCB = onMessageCB;\n        }\n    }\n    /**\n     * Each browser has its own funny way to handle iframes. Here we mush them all together into one object that I can\n     * actually use.\n     */\n    static createIFrame_() {\n        const iframe = document.createElement('iframe');\n        iframe.style.display = 'none';\n        // This is necessary in order to initialize the document inside the iframe\n        if (document.body) {\n            document.body.appendChild(iframe);\n            try {\n                // If document.domain has been modified in IE, this will throw an error, and we need to set the\n                // domain of the iframe's document manually. We can do this via a javascript: url as the src attribute\n                // Also note that we must do this *after* the iframe has been appended to the page. Otherwise it doesn't work.\n                const a = iframe.contentWindow.document;\n                if (!a) {\n                    // Apologies for the log-spam, I need to do something to keep closure from optimizing out the assignment above.\n                    log('No IE domain setting required');\n                }\n            }\n            catch (e) {\n                const domain = document.domain;\n                iframe.src =\n                    \"javascript:void((function(){document.open();document.domain='\" +\n                        domain +\n                        \"';document.close();})())\";\n            }\n        }\n        else {\n            // LongPollConnection attempts to delay initialization until the document is ready, so hopefully this\n            // never gets hit.\n            throw 'Document body has not initialized. Wait to initialize Firebase until after the document is ready.';\n        }\n        // Get the document of the iframe in a browser-specific way.\n        if (iframe.contentDocument) {\n            iframe.doc = iframe.contentDocument; // Firefox, Opera, Safari\n        }\n        else if (iframe.contentWindow) {\n            iframe.doc = iframe.contentWindow.document; // Internet Explorer\n            // eslint-disable-next-line @typescript-eslint/no-explicit-any\n        }\n        else if (iframe.document) {\n            // eslint-disable-next-line @typescript-eslint/no-explicit-any\n            iframe.doc = iframe.document; //others?\n        }\n        return iframe;\n    }\n    /**\n     * Cancel all outstanding queries and remove the frame.\n     */\n    close() {\n        //Mark this iframe as dead, so no new requests are sent.\n        this.alive = false;\n        if (this.myIFrame) {\n            //We have to actually remove all of the html inside this iframe before removing it from the\n            //window, or IE will continue loading and executing the script tags we've already added, which\n            //can lead to some errors being thrown. Setting textContent seems to be the safest way to do this.\n            this.myIFrame.doc.body.textContent = '';\n            setTimeout(() => {\n                if (this.myIFrame !== null) {\n                    document.body.removeChild(this.myIFrame);\n                    this.myIFrame = null;\n                }\n            }, Math.floor(0));\n        }\n        // Protect from being called recursively.\n        const onDisconnect = this.onDisconnect;\n        if (onDisconnect) {\n            this.onDisconnect = null;\n            onDisconnect();\n        }\n    }\n    /**\n     * Actually start the long-polling session by adding the first script tag(s) to the iframe.\n     * @param id - The ID of this connection\n     * @param pw - The password for this connection\n     */\n    startLongPoll(id, pw) {\n        this.myID = id;\n        this.myPW = pw;\n        this.alive = true;\n        //send the initial request. If there are requests queued, make sure that we transmit as many as we are currently able to.\n        while (this.newRequest_()) { }\n    }\n    /**\n     * This is called any time someone might want a script tag to be added. It adds a script tag when there aren't\n     * too many outstanding requests and we are still alive.\n     *\n     * If there are outstanding packet segments to send, it sends one. If there aren't, it sends a long-poll anyways if\n     * needed.\n     */\n    newRequest_() {\n        // We keep one outstanding request open all the time to receive data, but if we need to send data\n        // (pendingSegs.length > 0) then we create a new request to send the data.  The server will automatically\n        // close the old request.\n        if (this.alive &&\n            this.sendNewPolls &&\n            this.outstandingRequests.size < (this.pendingSegs.length > 0 ? 2 : 1)) {\n            //construct our url\n            this.currentSerial++;\n            const urlParams = {};\n            urlParams[FIREBASE_LONGPOLL_ID_PARAM] = this.myID;\n            urlParams[FIREBASE_LONGPOLL_PW_PARAM] = this.myPW;\n            urlParams[FIREBASE_LONGPOLL_SERIAL_PARAM] = this.currentSerial;\n            let theURL = this.urlFn(urlParams);\n            //Now add as much data as we can.\n            let curDataString = '';\n            let i = 0;\n            while (this.pendingSegs.length > 0) {\n                //first, lets see if the next segment will fit.\n                const nextSeg = this.pendingSegs[0];\n                if (nextSeg.d.length +\n                    SEG_HEADER_SIZE +\n                    curDataString.length <=\n                    MAX_URL_DATA_SIZE) {\n                    //great, the segment will fit. Lets append it.\n                    const theSeg = this.pendingSegs.shift();\n                    curDataString =\n                        curDataString +\n                            '&' +\n                            FIREBASE_LONGPOLL_SEGMENT_NUM_PARAM +\n                            i +\n                            '=' +\n                            theSeg.seg +\n                            '&' +\n                            FIREBASE_LONGPOLL_SEGMENTS_IN_PACKET +\n                            i +\n                            '=' +\n                            theSeg.ts +\n                            '&' +\n                            FIREBASE_LONGPOLL_DATA_PARAM +\n                            i +\n                            '=' +\n                            theSeg.d;\n                    i++;\n                }\n                else {\n                    break;\n                }\n            }\n            theURL = theURL + curDataString;\n            this.addLongPollTag_(theURL, this.currentSerial);\n            return true;\n        }\n        else {\n            return false;\n        }\n    }\n    /**\n     * Queue a packet for transmission to the server.\n     * @param segnum - A sequential id for this packet segment used for reassembly\n     * @param totalsegs - The total number of segments in this packet\n     * @param data - The data for this segment.\n     */\n    enqueueSegment(segnum, totalsegs, data) {\n        //add this to the queue of segments to send.\n        this.pendingSegs.push({ seg: segnum, ts: totalsegs, d: data });\n        //send the data immediately if there isn't already data being transmitted, unless\n        //startLongPoll hasn't been called yet.\n        if (this.alive) {\n            this.newRequest_();\n        }\n    }\n    /**\n     * Add a script tag for a regular long-poll request.\n     * @param url - The URL of the script tag.\n     * @param serial - The serial number of the request.\n     */\n    addLongPollTag_(url, serial) {\n        //remember that we sent this request.\n        this.outstandingRequests.add(serial);\n        const doNewRequest = () => {\n            this.outstandingRequests.delete(serial);\n            this.newRequest_();\n        };\n        // If this request doesn't return on its own accord (by the server sending us some data), we'll\n        // create a new one after the KEEPALIVE interval to make sure we always keep a fresh request open.\n        const keepaliveTimeout = setTimeout(doNewRequest, Math.floor(KEEPALIVE_REQUEST_INTERVAL));\n        const readyStateCB = () => {\n            // Request completed.  Cancel the keepalive.\n            clearTimeout(keepaliveTimeout);\n            // Trigger a new request so we can continue receiving data.\n            doNewRequest();\n        };\n        this.addTag(url, readyStateCB);\n    }\n    /**\n     * Add an arbitrary script tag to the iframe.\n     * @param url - The URL for the script tag source.\n     * @param loadCB - A callback to be triggered once the script has loaded.\n     */\n    addTag(url, loadCB) {\n        if (isNodeSdk()) {\n            // eslint-disable-next-line @typescript-eslint/no-explicit-any\n            this.doNodeLongPoll(url, loadCB);\n        }\n        else {\n            setTimeout(() => {\n                try {\n                    // if we're already closed, don't add this poll\n                    if (!this.sendNewPolls) {\n                        return;\n                    }\n                    const newScript = this.myIFrame.doc.createElement('script');\n                    newScript.type = 'text/javascript';\n                    newScript.async = true;\n                    newScript.src = url;\n                    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n                    newScript.onload = newScript.onreadystatechange =\n                        function () {\n                            // eslint-disable-next-line @typescript-eslint/no-explicit-any\n                            const rstate = newScript.readyState;\n                            if (!rstate || rstate === 'loaded' || rstate === 'complete') {\n                                // eslint-disable-next-line @typescript-eslint/no-explicit-any\n                                newScript.onload = newScript.onreadystatechange = null;\n                                if (newScript.parentNode) {\n                                    newScript.parentNode.removeChild(newScript);\n                                }\n                                loadCB();\n                            }\n                        };\n                    newScript.onerror = () => {\n                        log('Long-poll script failed to load: ' + url);\n                        this.sendNewPolls = false;\n                        this.close();\n                    };\n                    this.myIFrame.doc.body.appendChild(newScript);\n                }\n                catch (e) {\n                    // TODO: we should make this error visible somehow\n                }\n            }, Math.floor(1));\n        }\n    }\n}\n\n/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nconst WEBSOCKET_MAX_FRAME_SIZE = 16384;\nconst WEBSOCKET_KEEPALIVE_INTERVAL = 45000;\nlet WebSocketImpl = null;\nif (typeof MozWebSocket !== 'undefined') {\n    WebSocketImpl = MozWebSocket;\n}\nelse if (typeof WebSocket !== 'undefined') {\n    WebSocketImpl = WebSocket;\n}\n/**\n * Create a new websocket connection with the given callbacks.\n */\nclass WebSocketConnection {\n    /**\n     * @param connId identifier for this transport\n     * @param repoInfo The info for the websocket endpoint.\n     * @param applicationId The Firebase App ID for this project.\n     * @param appCheckToken The App Check Token for this client.\n     * @param authToken The Auth Token for this client.\n     * @param transportSessionId Optional transportSessionId if this is connecting\n     * to an existing transport session\n     * @param lastSessionId Optional lastSessionId if there was a previous\n     * connection\n     */\n    constructor(connId, repoInfo, applicationId, appCheckToken, authToken, transportSessionId, lastSessionId) {\n        this.connId = connId;\n        this.applicationId = applicationId;\n        this.appCheckToken = appCheckToken;\n        this.authToken = authToken;\n        this.keepaliveTimer = null;\n        this.frames = null;\n        this.totalFrames = 0;\n        this.bytesSent = 0;\n        this.bytesReceived = 0;\n        this.log_ = logWrapper(this.connId);\n        this.stats_ = statsManagerGetCollection(repoInfo);\n        this.connURL = WebSocketConnection.connectionURL_(repoInfo, transportSessionId, lastSessionId, appCheckToken, applicationId);\n        this.nodeAdmin = repoInfo.nodeAdmin;\n    }\n    /**\n     * @param repoInfo - The info for the websocket endpoint.\n     * @param transportSessionId - Optional transportSessionId if this is connecting to an existing transport\n     *                                         session\n     * @param lastSessionId - Optional lastSessionId if there was a previous connection\n     * @returns connection url\n     */\n    static connectionURL_(repoInfo, transportSessionId, lastSessionId, appCheckToken, applicationId) {\n        const urlParams = {};\n        urlParams[VERSION_PARAM] = PROTOCOL_VERSION;\n        if (!isNodeSdk() &&\n            typeof location !== 'undefined' &&\n            location.hostname &&\n            FORGE_DOMAIN_RE.test(location.hostname)) {\n            urlParams[REFERER_PARAM] = FORGE_REF;\n        }\n        if (transportSessionId) {\n            urlParams[TRANSPORT_SESSION_PARAM] = transportSessionId;\n        }\n        if (lastSessionId) {\n            urlParams[LAST_SESSION_PARAM] = lastSessionId;\n        }\n        if (appCheckToken) {\n            urlParams[APP_CHECK_TOKEN_PARAM] = appCheckToken;\n        }\n        if (applicationId) {\n            urlParams[APPLICATION_ID_PARAM] = applicationId;\n        }\n        return repoInfoConnectionURL(repoInfo, WEBSOCKET, urlParams);\n    }\n    /**\n     * @param onMessage - Callback when messages arrive\n     * @param onDisconnect - Callback with connection lost.\n     */\n    open(onMessage, onDisconnect) {\n        this.onDisconnect = onDisconnect;\n        this.onMessage = onMessage;\n        this.log_('Websocket connecting to ' + this.connURL);\n        this.everConnected_ = false;\n        // Assume failure until proven otherwise.\n        PersistentStorage.set('previous_websocket_failure', true);\n        try {\n            let options;\n            if (isNodeSdk()) {\n                const device = this.nodeAdmin ? 'AdminNode' : 'Node';\n                // UA Format: Firebase/<wire_protocol>/<sdk_version>/<platform>/<device>\n                options = {\n                    headers: {\n                        'User-Agent': `Firebase/${PROTOCOL_VERSION}/${SDK_VERSION}/${process.platform}/${device}`,\n                        'X-Firebase-GMPID': this.applicationId || ''\n                    }\n                };\n                // If using Node with admin creds, AppCheck-related checks are unnecessary.\n                // Note that we send the credentials here even if they aren't admin credentials, which is\n                // not a problem.\n                // Note that this header is just used to bypass appcheck, and the token should still be sent\n                // through the websocket connection once it is established.\n                if (this.authToken) {\n                    options.headers['Authorization'] = `Bearer ${this.authToken}`;\n                }\n                if (this.appCheckToken) {\n                    options.headers['X-Firebase-AppCheck'] = this.appCheckToken;\n                }\n                // Plumb appropriate http_proxy environment variable into faye-websocket if it exists.\n                const env = process['env'];\n                const proxy = this.connURL.indexOf('wss://') === 0\n                    ? env['HTTPS_PROXY'] || env['https_proxy']\n                    : env['HTTP_PROXY'] || env['http_proxy'];\n                if (proxy) {\n                    options['proxy'] = { origin: proxy };\n                }\n            }\n            this.mySock = new WebSocketImpl(this.connURL, [], options);\n        }\n        catch (e) {\n            this.log_('Error instantiating WebSocket.');\n            const error = e.message || e.data;\n            if (error) {\n                this.log_(error);\n            }\n            this.onClosed_();\n            return;\n        }\n        this.mySock.onopen = () => {\n            this.log_('Websocket connected.');\n            this.everConnected_ = true;\n        };\n        this.mySock.onclose = () => {\n            this.log_('Websocket connection was disconnected.');\n            this.mySock = null;\n            this.onClosed_();\n        };\n        this.mySock.onmessage = m => {\n            this.handleIncomingFrame(m);\n        };\n        this.mySock.onerror = e => {\n            this.log_('WebSocket error.  Closing connection.');\n            // eslint-disable-next-line @typescript-eslint/no-explicit-any\n            const error = e.message || e.data;\n            if (error) {\n                this.log_(error);\n            }\n            this.onClosed_();\n        };\n    }\n    /**\n     * No-op for websockets, we don't need to do anything once the connection is confirmed as open\n     */\n    start() { }\n    static forceDisallow() {\n        WebSocketConnection.forceDisallow_ = true;\n    }\n    static isAvailable() {\n        let isOldAndroid = false;\n        if (typeof navigator !== 'undefined' && navigator.userAgent) {\n            const oldAndroidRegex = /Android ([0-9]{0,}\\.[0-9]{0,})/;\n            const oldAndroidMatch = navigator.userAgent.match(oldAndroidRegex);\n            if (oldAndroidMatch && oldAndroidMatch.length > 1) {\n                if (parseFloat(oldAndroidMatch[1]) < 4.4) {\n                    isOldAndroid = true;\n                }\n            }\n        }\n        return (!isOldAndroid &&\n            WebSocketImpl !== null &&\n            !WebSocketConnection.forceDisallow_);\n    }\n    /**\n     * Returns true if we previously failed to connect with this transport.\n     */\n    static previouslyFailed() {\n        // If our persistent storage is actually only in-memory storage,\n        // we default to assuming that it previously failed to be safe.\n        return (PersistentStorage.isInMemoryStorage ||\n            PersistentStorage.get('previous_websocket_failure') === true);\n    }\n    markConnectionHealthy() {\n        PersistentStorage.remove('previous_websocket_failure');\n    }\n    appendFrame_(data) {\n        this.frames.push(data);\n        if (this.frames.length === this.totalFrames) {\n            const fullMess = this.frames.join('');\n            this.frames = null;\n            const jsonMess = jsonEval(fullMess);\n            //handle the message\n            this.onMessage(jsonMess);\n        }\n    }\n    /**\n     * @param frameCount - The number of frames we are expecting from the server\n     */\n    handleNewFrameCount_(frameCount) {\n        this.totalFrames = frameCount;\n        this.frames = [];\n    }\n    /**\n     * Attempts to parse a frame count out of some text. If it can't, assumes a value of 1\n     * @returns Any remaining data to be process, or null if there is none\n     */\n    extractFrameCount_(data) {\n        assert(this.frames === null, 'We already have a frame buffer');\n        // TODO: The server is only supposed to send up to 9999 frames (i.e. length <= 4), but that isn't being enforced\n        // currently.  So allowing larger frame counts (length <= 6).  See https://app.asana.com/0/search/8688598998380/8237608042508\n        if (data.length <= 6) {\n            const frameCount = Number(data);\n            if (!isNaN(frameCount)) {\n                this.handleNewFrameCount_(frameCount);\n                return null;\n            }\n        }\n        this.handleNewFrameCount_(1);\n        return data;\n    }\n    /**\n     * Process a websocket frame that has arrived from the server.\n     * @param mess - The frame data\n     */\n    handleIncomingFrame(mess) {\n        if (this.mySock === null) {\n            return; // Chrome apparently delivers incoming packets even after we .close() the connection sometimes.\n        }\n        const data = mess['data'];\n        this.bytesReceived += data.length;\n        this.stats_.incrementCounter('bytes_received', data.length);\n        this.resetKeepAlive();\n        if (this.frames !== null) {\n            // we're buffering\n            this.appendFrame_(data);\n        }\n        else {\n            // try to parse out a frame count, otherwise, assume 1 and process it\n            const remainingData = this.extractFrameCount_(data);\n            if (remainingData !== null) {\n                this.appendFrame_(remainingData);\n            }\n        }\n    }\n    /**\n     * Send a message to the server\n     * @param data - The JSON object to transmit\n     */\n    send(data) {\n        this.resetKeepAlive();\n        const dataStr = stringify(data);\n        this.bytesSent += dataStr.length;\n        this.stats_.incrementCounter('bytes_sent', dataStr.length);\n        //We can only fit a certain amount in each websocket frame, so we need to split this request\n        //up into multiple pieces if it doesn't fit in one request.\n        const dataSegs = splitStringBySize(dataStr, WEBSOCKET_MAX_FRAME_SIZE);\n        //Send the length header\n        if (dataSegs.length > 1) {\n            this.sendString_(String(dataSegs.length));\n        }\n        //Send the actual data in segments.\n        for (let i = 0; i < dataSegs.length; i++) {\n            this.sendString_(dataSegs[i]);\n        }\n    }\n    shutdown_() {\n        this.isClosed_ = true;\n        if (this.keepaliveTimer) {\n            clearInterval(this.keepaliveTimer);\n            this.keepaliveTimer = null;\n        }\n        if (this.mySock) {\n            this.mySock.close();\n            this.mySock = null;\n        }\n    }\n    onClosed_() {\n        if (!this.isClosed_) {\n            this.log_('WebSocket is closing itself');\n            this.shutdown_();\n            // since this is an internal close, trigger the close listener\n            if (this.onDisconnect) {\n                this.onDisconnect(this.everConnected_);\n                this.onDisconnect = null;\n            }\n        }\n    }\n    /**\n     * External-facing close handler.\n     * Close the websocket and kill the connection.\n     */\n    close() {\n        if (!this.isClosed_) {\n            this.log_('WebSocket is being closed');\n            this.shutdown_();\n        }\n    }\n    /**\n     * Kill the current keepalive timer and start a new one, to ensure that it always fires N seconds after\n     * the last activity.\n     */\n    resetKeepAlive() {\n        clearInterval(this.keepaliveTimer);\n        this.keepaliveTimer = setInterval(() => {\n            //If there has been no websocket activity for a while, send a no-op\n            if (this.mySock) {\n                this.sendString_('0');\n            }\n            this.resetKeepAlive();\n            // eslint-disable-next-line @typescript-eslint/no-explicit-any\n        }, Math.floor(WEBSOCKET_KEEPALIVE_INTERVAL));\n    }\n    /**\n     * Send a string over the websocket.\n     *\n     * @param str - String to send.\n     */\n    sendString_(str) {\n        // Firefox seems to sometimes throw exceptions (NS_ERROR_UNEXPECTED) from websocket .send()\n        // calls for some unknown reason.  We treat these as an error and disconnect.\n        // See https://app.asana.com/0/58926111402292/68021340250410\n        try {\n            this.mySock.send(str);\n        }\n        catch (e) {\n            this.log_('Exception thrown from WebSocket.send():', e.message || e.data, 'Closing connection.');\n            setTimeout(this.onClosed_.bind(this), 0);\n        }\n    }\n}\n/**\n * Number of response before we consider the connection \"healthy.\"\n */\nWebSocketConnection.responsesRequiredToBeHealthy = 2;\n/**\n * Time to wait for the connection te become healthy before giving up.\n */\nWebSocketConnection.healthyTimeout = 30000;\n\n/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Currently simplistic, this class manages what transport a Connection should use at various stages of its\n * lifecycle.\n *\n * It starts with longpolling in a browser, and httppolling on node. It then upgrades to websockets if\n * they are available.\n */\nclass TransportManager {\n    static get ALL_TRANSPORTS() {\n        return [BrowserPollConnection, WebSocketConnection];\n    }\n    /**\n     * Returns whether transport has been selected to ensure WebSocketConnection or BrowserPollConnection are not called after\n     * TransportManager has already set up transports_\n     */\n    static get IS_TRANSPORT_INITIALIZED() {\n        return this.globalTransportInitialized_;\n    }\n    /**\n     * @param repoInfo - Metadata around the namespace we're connecting to\n     */\n    constructor(repoInfo) {\n        this.initTransports_(repoInfo);\n    }\n    initTransports_(repoInfo) {\n        const isWebSocketsAvailable = WebSocketConnection && WebSocketConnection['isAvailable']();\n        let isSkipPollConnection = isWebSocketsAvailable && !WebSocketConnection.previouslyFailed();\n        if (repoInfo.webSocketOnly) {\n            if (!isWebSocketsAvailable) {\n                warn(\"wss:// URL used, but browser isn't known to support websockets.  Trying anyway.\");\n            }\n            isSkipPollConnection = true;\n        }\n        if (isSkipPollConnection) {\n            this.transports_ = [WebSocketConnection];\n        }\n        else {\n            const transports = (this.transports_ = []);\n            for (const transport of TransportManager.ALL_TRANSPORTS) {\n                if (transport && transport['isAvailable']()) {\n                    transports.push(transport);\n                }\n            }\n            TransportManager.globalTransportInitialized_ = true;\n        }\n    }\n    /**\n     * @returns The constructor for the initial transport to use\n     */\n    initialTransport() {\n        if (this.transports_.length > 0) {\n            return this.transports_[0];\n        }\n        else {\n            throw new Error('No transports available');\n        }\n    }\n    /**\n     * @returns The constructor for the next transport, or null\n     */\n    upgradeTransport() {\n        if (this.transports_.length > 1) {\n            return this.transports_[1];\n        }\n        else {\n            return null;\n        }\n    }\n}\n// Keeps track of whether the TransportManager has already chosen a transport to use\nTransportManager.globalTransportInitialized_ = false;\n\n/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n// Abort upgrade attempt if it takes longer than 60s.\nconst UPGRADE_TIMEOUT = 60000;\n// For some transports (WebSockets), we need to \"validate\" the transport by exchanging a few requests and responses.\n// If we haven't sent enough requests within 5s, we'll start sending noop ping requests.\nconst DELAY_BEFORE_SENDING_EXTRA_REQUESTS = 5000;\n// If the initial data sent triggers a lot of bandwidth (i.e. it's a large put or a listen for a large amount of data)\n// then we may not be able to exchange our ping/pong requests within the healthy timeout.  So if we reach the timeout\n// but we've sent/received enough bytes, we don't cancel the connection.\nconst BYTES_SENT_HEALTHY_OVERRIDE = 10 * 1024;\nconst BYTES_RECEIVED_HEALTHY_OVERRIDE = 100 * 1024;\nconst MESSAGE_TYPE = 't';\nconst MESSAGE_DATA = 'd';\nconst CONTROL_SHUTDOWN = 's';\nconst CONTROL_RESET = 'r';\nconst CONTROL_ERROR = 'e';\nconst CONTROL_PONG = 'o';\nconst SWITCH_ACK = 'a';\nconst END_TRANSMISSION = 'n';\nconst PING = 'p';\nconst SERVER_HELLO = 'h';\n/**\n * Creates a new real-time connection to the server using whichever method works\n * best in the current browser.\n */\nclass Connection {\n    /**\n     * @param id - an id for this connection\n     * @param repoInfo_ - the info for the endpoint to connect to\n     * @param applicationId_ - the Firebase App ID for this project\n     * @param appCheckToken_ - The App Check Token for this device.\n     * @param authToken_ - The auth token for this session.\n     * @param onMessage_ - the callback to be triggered when a server-push message arrives\n     * @param onReady_ - the callback to be triggered when this connection is ready to send messages.\n     * @param onDisconnect_ - the callback to be triggered when a connection was lost\n     * @param onKill_ - the callback to be triggered when this connection has permanently shut down.\n     * @param lastSessionId - last session id in persistent connection. is used to clean up old session in real-time server\n     */\n    constructor(id, repoInfo_, applicationId_, appCheckToken_, authToken_, onMessage_, onReady_, onDisconnect_, onKill_, lastSessionId) {\n        this.id = id;\n        this.repoInfo_ = repoInfo_;\n        this.applicationId_ = applicationId_;\n        this.appCheckToken_ = appCheckToken_;\n        this.authToken_ = authToken_;\n        this.onMessage_ = onMessage_;\n        this.onReady_ = onReady_;\n        this.onDisconnect_ = onDisconnect_;\n        this.onKill_ = onKill_;\n        this.lastSessionId = lastSessionId;\n        this.connectionCount = 0;\n        this.pendingDataMessages = [];\n        this.state_ = 0 /* RealtimeState.CONNECTING */;\n        this.log_ = logWrapper('c:' + this.id + ':');\n        this.transportManager_ = new TransportManager(repoInfo_);\n        this.log_('Connection created');\n        this.start_();\n    }\n    /**\n     * Starts a connection attempt\n     */\n    start_() {\n        const conn = this.transportManager_.initialTransport();\n        this.conn_ = new conn(this.nextTransportId_(), this.repoInfo_, this.applicationId_, this.appCheckToken_, this.authToken_, null, this.lastSessionId);\n        // For certain transports (WebSockets), we need to send and receive several messages back and forth before we\n        // can consider the transport healthy.\n        this.primaryResponsesRequired_ = conn['responsesRequiredToBeHealthy'] || 0;\n        const onMessageReceived = this.connReceiver_(this.conn_);\n        const onConnectionLost = this.disconnReceiver_(this.conn_);\n        this.tx_ = this.conn_;\n        this.rx_ = this.conn_;\n        this.secondaryConn_ = null;\n        this.isHealthy_ = false;\n        /*\n         * Firefox doesn't like when code from one iframe tries to create another iframe by way of the parent frame.\n         * This can occur in the case of a redirect, i.e. we guessed wrong on what server to connect to and received a reset.\n         * Somehow, setTimeout seems to make this ok. That doesn't make sense from a security perspective, since you should\n         * still have the context of your originating frame.\n         */\n        setTimeout(() => {\n            // this.conn_ gets set to null in some of the tests. Check to make sure it still exists before using it\n            this.conn_ && this.conn_.open(onMessageReceived, onConnectionLost);\n        }, Math.floor(0));\n        const healthyTimeoutMS = conn['healthyTimeout'] || 0;\n        if (healthyTimeoutMS > 0) {\n            this.healthyTimeout_ = setTimeoutNonBlocking(() => {\n                this.healthyTimeout_ = null;\n                if (!this.isHealthy_) {\n                    if (this.conn_ &&\n                        this.conn_.bytesReceived > BYTES_RECEIVED_HEALTHY_OVERRIDE) {\n                        this.log_('Connection exceeded healthy timeout but has received ' +\n                            this.conn_.bytesReceived +\n                            ' bytes.  Marking connection healthy.');\n                        this.isHealthy_ = true;\n                        this.conn_.markConnectionHealthy();\n                    }\n                    else if (this.conn_ &&\n                        this.conn_.bytesSent > BYTES_SENT_HEALTHY_OVERRIDE) {\n                        this.log_('Connection exceeded healthy timeout but has sent ' +\n                            this.conn_.bytesSent +\n                            ' bytes.  Leaving connection alive.');\n                        // NOTE: We don't want to mark it healthy, since we have no guarantee that the bytes have made it to\n                        // the server.\n                    }\n                    else {\n                        this.log_('Closing unhealthy connection after timeout.');\n                        this.close();\n                    }\n                }\n                // eslint-disable-next-line @typescript-eslint/no-explicit-any\n            }, Math.floor(healthyTimeoutMS));\n        }\n    }\n    nextTransportId_() {\n        return 'c:' + this.id + ':' + this.connectionCount++;\n    }\n    disconnReceiver_(conn) {\n        return everConnected => {\n            if (conn === this.conn_) {\n                this.onConnectionLost_(everConnected);\n            }\n            else if (conn === this.secondaryConn_) {\n                this.log_('Secondary connection lost.');\n                this.onSecondaryConnectionLost_();\n            }\n            else {\n                this.log_('closing an old connection');\n            }\n        };\n    }\n    connReceiver_(conn) {\n        return (message) => {\n            if (this.state_ !== 2 /* RealtimeState.DISCONNECTED */) {\n                if (conn === this.rx_) {\n                    this.onPrimaryMessageReceived_(message);\n                }\n                else if (conn === this.secondaryConn_) {\n                    this.onSecondaryMessageReceived_(message);\n                }\n                else {\n                    this.log_('message on old connection');\n                }\n            }\n        };\n    }\n    /**\n     * @param dataMsg - An arbitrary data message to be sent to the server\n     */\n    sendRequest(dataMsg) {\n        // wrap in a data message envelope and send it on\n        const msg = { t: 'd', d: dataMsg };\n        this.sendData_(msg);\n    }\n    tryCleanupConnection() {\n        if (this.tx_ === this.secondaryConn_ && this.rx_ === this.secondaryConn_) {\n            this.log_('cleaning up and promoting a connection: ' + this.secondaryConn_.connId);\n            this.conn_ = this.secondaryConn_;\n            this.secondaryConn_ = null;\n            // the server will shutdown the old connection\n        }\n    }\n    onSecondaryControl_(controlData) {\n        if (MESSAGE_TYPE in controlData) {\n            const cmd = controlData[MESSAGE_TYPE];\n            if (cmd === SWITCH_ACK) {\n                this.upgradeIfSecondaryHealthy_();\n            }\n            else if (cmd === CONTROL_RESET) {\n                // Most likely the session wasn't valid. Abandon the switch attempt\n                this.log_('Got a reset on secondary, closing it');\n                this.secondaryConn_.close();\n                // If we were already using this connection for something, than we need to fully close\n                if (this.tx_ === this.secondaryConn_ ||\n                    this.rx_ === this.secondaryConn_) {\n                    this.close();\n                }\n            }\n            else if (cmd === CONTROL_PONG) {\n                this.log_('got pong on secondary.');\n                this.secondaryResponsesRequired_--;\n                this.upgradeIfSecondaryHealthy_();\n            }\n        }\n    }\n    onSecondaryMessageReceived_(parsedData) {\n        const layer = requireKey('t', parsedData);\n        const data = requireKey('d', parsedData);\n        if (layer === 'c') {\n            this.onSecondaryControl_(data);\n        }\n        else if (layer === 'd') {\n            // got a data message, but we're still second connection. Need to buffer it up\n            this.pendingDataMessages.push(data);\n        }\n        else {\n            throw new Error('Unknown protocol layer: ' + layer);\n        }\n    }\n    upgradeIfSecondaryHealthy_() {\n        if (this.secondaryResponsesRequired_ <= 0) {\n            this.log_('Secondary connection is healthy.');\n            this.isHealthy_ = true;\n            this.secondaryConn_.markConnectionHealthy();\n            this.proceedWithUpgrade_();\n        }\n        else {\n            // Send a ping to make sure the connection is healthy.\n            this.log_('sending ping on secondary.');\n            this.secondaryConn_.send({ t: 'c', d: { t: PING, d: {} } });\n        }\n    }\n    proceedWithUpgrade_() {\n        // tell this connection to consider itself open\n        this.secondaryConn_.start();\n        // send ack\n        this.log_('sending client ack on secondary');\n        this.secondaryConn_.send({ t: 'c', d: { t: SWITCH_ACK, d: {} } });\n        // send end packet on primary transport, switch to sending on this one\n        // can receive on this one, buffer responses until end received on primary transport\n        this.log_('Ending transmission on primary');\n        this.conn_.send({ t: 'c', d: { t: END_TRANSMISSION, d: {} } });\n        this.tx_ = this.secondaryConn_;\n        this.tryCleanupConnection();\n    }\n    onPrimaryMessageReceived_(parsedData) {\n        // Must refer to parsedData properties in quotes, so closure doesn't touch them.\n        const layer = requireKey('t', parsedData);\n        const data = requireKey('d', parsedData);\n        if (layer === 'c') {\n            this.onControl_(data);\n        }\n        else if (layer === 'd') {\n            this.onDataMessage_(data);\n        }\n    }\n    onDataMessage_(message) {\n        this.onPrimaryResponse_();\n        // We don't do anything with data messages, just kick them up a level\n        this.onMessage_(message);\n    }\n    onPrimaryResponse_() {\n        if (!this.isHealthy_) {\n            this.primaryResponsesRequired_--;\n            if (this.primaryResponsesRequired_ <= 0) {\n                this.log_('Primary connection is healthy.');\n                this.isHealthy_ = true;\n                this.conn_.markConnectionHealthy();\n            }\n        }\n    }\n    onControl_(controlData) {\n        const cmd = requireKey(MESSAGE_TYPE, controlData);\n        if (MESSAGE_DATA in controlData) {\n            const payload = controlData[MESSAGE_DATA];\n            if (cmd === SERVER_HELLO) {\n                const handshakePayload = Object.assign({}, payload);\n                if (this.repoInfo_.isUsingEmulator) {\n                    // Upon connecting, the emulator will pass the hostname that it's aware of, but we prefer the user's set hostname via `connectDatabaseEmulator` over what the emulator passes.\n                    handshakePayload.h = this.repoInfo_.host;\n                }\n                this.onHandshake_(handshakePayload);\n            }\n            else if (cmd === END_TRANSMISSION) {\n                this.log_('recvd end transmission on primary');\n                this.rx_ = this.secondaryConn_;\n                for (let i = 0; i < this.pendingDataMessages.length; ++i) {\n                    this.onDataMessage_(this.pendingDataMessages[i]);\n                }\n                this.pendingDataMessages = [];\n                this.tryCleanupConnection();\n            }\n            else if (cmd === CONTROL_SHUTDOWN) {\n                // This was previously the 'onKill' callback passed to the lower-level connection\n                // payload in this case is the reason for the shutdown. Generally a human-readable error\n                this.onConnectionShutdown_(payload);\n            }\n            else if (cmd === CONTROL_RESET) {\n                // payload in this case is the host we should contact\n                this.onReset_(payload);\n            }\n            else if (cmd === CONTROL_ERROR) {\n                error('Server Error: ' + payload);\n            }\n            else if (cmd === CONTROL_PONG) {\n                this.log_('got pong on primary.');\n                this.onPrimaryResponse_();\n                this.sendPingOnPrimaryIfNecessary_();\n            }\n            else {\n                error('Unknown control packet command: ' + cmd);\n            }\n        }\n    }\n    /**\n     * @param handshake - The handshake data returned from the server\n     */\n    onHandshake_(handshake) {\n        const timestamp = handshake.ts;\n        const version = handshake.v;\n        const host = handshake.h;\n        this.sessionId = handshake.s;\n        this.repoInfo_.host = host;\n        // if we've already closed the connection, then don't bother trying to progress further\n        if (this.state_ === 0 /* RealtimeState.CONNECTING */) {\n            this.conn_.start();\n            this.onConnectionEstablished_(this.conn_, timestamp);\n            if (PROTOCOL_VERSION !== version) {\n                warn('Protocol version mismatch detected');\n            }\n            // TODO: do we want to upgrade? when? maybe a delay?\n            this.tryStartUpgrade_();\n        }\n    }\n    tryStartUpgrade_() {\n        const conn = this.transportManager_.upgradeTransport();\n        if (conn) {\n            this.startUpgrade_(conn);\n        }\n    }\n    startUpgrade_(conn) {\n        this.secondaryConn_ = new conn(this.nextTransportId_(), this.repoInfo_, this.applicationId_, this.appCheckToken_, this.authToken_, this.sessionId);\n        // For certain transports (WebSockets), we need to send and receive several messages back and forth before we\n        // can consider the transport healthy.\n        this.secondaryResponsesRequired_ =\n            conn['responsesRequiredToBeHealthy'] || 0;\n        const onMessage = this.connReceiver_(this.secondaryConn_);\n        const onDisconnect = this.disconnReceiver_(this.secondaryConn_);\n        this.secondaryConn_.open(onMessage, onDisconnect);\n        // If we haven't successfully upgraded after UPGRADE_TIMEOUT, give up and kill the secondary.\n        setTimeoutNonBlocking(() => {\n            if (this.secondaryConn_) {\n                this.log_('Timed out trying to upgrade.');\n                this.secondaryConn_.close();\n            }\n        }, Math.floor(UPGRADE_TIMEOUT));\n    }\n    onReset_(host) {\n        this.log_('Reset packet received.  New host: ' + host);\n        this.repoInfo_.host = host;\n        // TODO: if we're already \"connected\", we need to trigger a disconnect at the next layer up.\n        // We don't currently support resets after the connection has already been established\n        if (this.state_ === 1 /* RealtimeState.CONNECTED */) {\n            this.close();\n        }\n        else {\n            // Close whatever connections we have open and start again.\n            this.closeConnections_();\n            this.start_();\n        }\n    }\n    onConnectionEstablished_(conn, timestamp) {\n        this.log_('Realtime connection established.');\n        this.conn_ = conn;\n        this.state_ = 1 /* RealtimeState.CONNECTED */;\n        if (this.onReady_) {\n            this.onReady_(timestamp, this.sessionId);\n            this.onReady_ = null;\n        }\n        // If after 5 seconds we haven't sent enough requests to the server to get the connection healthy,\n        // send some pings.\n        if (this.primaryResponsesRequired_ === 0) {\n            this.log_('Primary connection is healthy.');\n            this.isHealthy_ = true;\n        }\n        else {\n            setTimeoutNonBlocking(() => {\n                this.sendPingOnPrimaryIfNecessary_();\n            }, Math.floor(DELAY_BEFORE_SENDING_EXTRA_REQUESTS));\n        }\n    }\n    sendPingOnPrimaryIfNecessary_() {\n        // If the connection isn't considered healthy yet, we'll send a noop ping packet request.\n        if (!this.isHealthy_ && this.state_ === 1 /* RealtimeState.CONNECTED */) {\n            this.log_('sending ping on primary.');\n            this.sendData_({ t: 'c', d: { t: PING, d: {} } });\n        }\n    }\n    onSecondaryConnectionLost_() {\n        const conn = this.secondaryConn_;\n        this.secondaryConn_ = null;\n        if (this.tx_ === conn || this.rx_ === conn) {\n            // we are relying on this connection already in some capacity. Therefore, a failure is real\n            this.close();\n        }\n    }\n    /**\n     * @param everConnected - Whether or not the connection ever reached a server. Used to determine if\n     * we should flush the host cache\n     */\n    onConnectionLost_(everConnected) {\n        this.conn_ = null;\n        // NOTE: IF you're seeing a Firefox error for this line, I think it might be because it's getting\n        // called on window close and RealtimeState.CONNECTING is no longer defined.  Just a guess.\n        if (!everConnected && this.state_ === 0 /* RealtimeState.CONNECTING */) {\n            this.log_('Realtime connection failed.');\n            // Since we failed to connect at all, clear any cached entry for this namespace in case the machine went away\n            if (this.repoInfo_.isCacheableHost()) {\n                PersistentStorage.remove('host:' + this.repoInfo_.host);\n                // reset the internal host to what we would show the user, i.e. <ns>.firebaseio.com\n                this.repoInfo_.internalHost = this.repoInfo_.host;\n            }\n        }\n        else if (this.state_ === 1 /* RealtimeState.CONNECTED */) {\n            this.log_('Realtime connection lost.');\n        }\n        this.close();\n    }\n    onConnectionShutdown_(reason) {\n        this.log_('Connection shutdown command received. Shutting down...');\n        if (this.onKill_) {\n            this.onKill_(reason);\n            this.onKill_ = null;\n        }\n        // We intentionally don't want to fire onDisconnect (kill is a different case),\n        // so clear the callback.\n        this.onDisconnect_ = null;\n        this.close();\n    }\n    sendData_(data) {\n        if (this.state_ !== 1 /* RealtimeState.CONNECTED */) {\n            throw 'Connection is not connected';\n        }\n        else {\n            this.tx_.send(data);\n        }\n    }\n    /**\n     * Cleans up this connection, calling the appropriate callbacks\n     */\n    close() {\n        if (this.state_ !== 2 /* RealtimeState.DISCONNECTED */) {\n            this.log_('Closing realtime connection.');\n            this.state_ = 2 /* RealtimeState.DISCONNECTED */;\n            this.closeConnections_();\n            if (this.onDisconnect_) {\n                this.onDisconnect_();\n                this.onDisconnect_ = null;\n            }\n        }\n    }\n    closeConnections_() {\n        this.log_('Shutting down all connections');\n        if (this.conn_) {\n            this.conn_.close();\n            this.conn_ = null;\n        }\n        if (this.secondaryConn_) {\n            this.secondaryConn_.close();\n            this.secondaryConn_ = null;\n        }\n        if (this.healthyTimeout_) {\n            clearTimeout(this.healthyTimeout_);\n            this.healthyTimeout_ = null;\n        }\n    }\n}\n\n/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Interface defining the set of actions that can be performed against the Firebase server\n * (basically corresponds to our wire protocol).\n *\n * @interface\n */\nclass ServerActions {\n    put(pathString, data, onComplete, hash) { }\n    merge(pathString, data, onComplete, hash) { }\n    /**\n     * Refreshes the auth token for the current connection.\n     * @param token - The authentication token\n     */\n    refreshAuthToken(token) { }\n    /**\n     * Refreshes the app check token for the current connection.\n     * @param token The app check token\n     */\n    refreshAppCheckToken(token) { }\n    onDisconnectPut(pathString, data, onComplete) { }\n    onDisconnectMerge(pathString, data, onComplete) { }\n    onDisconnectCancel(pathString, onComplete) { }\n    reportStats(stats) { }\n}\n\n/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Base class to be used if you want to emit events. Call the constructor with\n * the set of allowed event names.\n */\nclass EventEmitter {\n    constructor(allowedEvents_) {\n        this.allowedEvents_ = allowedEvents_;\n        this.listeners_ = {};\n        assert(Array.isArray(allowedEvents_) && allowedEvents_.length > 0, 'Requires a non-empty array');\n    }\n    /**\n     * To be called by derived classes to trigger events.\n     */\n    trigger(eventType, ...varArgs) {\n        if (Array.isArray(this.listeners_[eventType])) {\n            // Clone the list, since callbacks could add/remove listeners.\n            const listeners = [...this.listeners_[eventType]];\n            for (let i = 0; i < listeners.length; i++) {\n                listeners[i].callback.apply(listeners[i].context, varArgs);\n            }\n        }\n    }\n    on(eventType, callback, context) {\n        this.validateEventType_(eventType);\n        this.listeners_[eventType] = this.listeners_[eventType] || [];\n        this.listeners_[eventType].push({ callback, context });\n        const eventData = this.getInitialEvent(eventType);\n        if (eventData) {\n            callback.apply(context, eventData);\n        }\n    }\n    off(eventType, callback, context) {\n        this.validateEventType_(eventType);\n        const listeners = this.listeners_[eventType] || [];\n        for (let i = 0; i < listeners.length; i++) {\n            if (listeners[i].callback === callback &&\n                (!context || context === listeners[i].context)) {\n                listeners.splice(i, 1);\n                return;\n            }\n        }\n    }\n    validateEventType_(eventType) {\n        assert(this.allowedEvents_.find(et => {\n            return et === eventType;\n        }), 'Unknown event: ' + eventType);\n    }\n}\n\n/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Monitors online state (as reported by window.online/offline events).\n *\n * The expectation is that this could have many false positives (thinks we are online\n * when we're not), but no false negatives.  So we can safely use it to determine when\n * we definitely cannot reach the internet.\n */\nclass OnlineMonitor extends EventEmitter {\n    static getInstance() {\n        return new OnlineMonitor();\n    }\n    constructor() {\n        super(['online']);\n        this.online_ = true;\n        // We've had repeated complaints that Cordova apps can get stuck \"offline\", e.g.\n        // https://forum.ionicframework.com/t/firebase-connection-is-lost-and-never-come-back/43810\n        // It would seem that the 'online' event does not always fire consistently. So we disable it\n        // for Cordova.\n        if (typeof window !== 'undefined' &&\n            typeof window.addEventListener !== 'undefined' &&\n            !isMobileCordova()) {\n            window.addEventListener('online', () => {\n                if (!this.online_) {\n                    this.online_ = true;\n                    this.trigger('online', true);\n                }\n            }, false);\n            window.addEventListener('offline', () => {\n                if (this.online_) {\n                    this.online_ = false;\n                    this.trigger('online', false);\n                }\n            }, false);\n        }\n    }\n    getInitialEvent(eventType) {\n        assert(eventType === 'online', 'Unknown event type: ' + eventType);\n        return [this.online_];\n    }\n    currentlyOnline() {\n        return this.online_;\n    }\n}\n\n/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/** Maximum key depth. */\nconst MAX_PATH_DEPTH = 32;\n/** Maximum number of (UTF8) bytes in a Firebase path. */\nconst MAX_PATH_LENGTH_BYTES = 768;\n/**\n * An immutable object representing a parsed path.  It's immutable so that you\n * can pass them around to other functions without worrying about them changing\n * it.\n */\nclass Path {\n    /**\n     * @param pathOrString - Path string to parse, or another path, or the raw\n     * tokens array\n     */\n    constructor(pathOrString, pieceNum) {\n        if (pieceNum === void 0) {\n            this.pieces_ = pathOrString.split('/');\n            // Remove empty pieces.\n            let copyTo = 0;\n            for (let i = 0; i < this.pieces_.length; i++) {\n                if (this.pieces_[i].length > 0) {\n                    this.pieces_[copyTo] = this.pieces_[i];\n                    copyTo++;\n                }\n            }\n            this.pieces_.length = copyTo;\n            this.pieceNum_ = 0;\n        }\n        else {\n            this.pieces_ = pathOrString;\n            this.pieceNum_ = pieceNum;\n        }\n    }\n    toString() {\n        let pathString = '';\n        for (let i = this.pieceNum_; i < this.pieces_.length; i++) {\n            if (this.pieces_[i] !== '') {\n                pathString += '/' + this.pieces_[i];\n            }\n        }\n        return pathString || '/';\n    }\n}\nfunction newEmptyPath() {\n    return new Path('');\n}\nfunction pathGetFront(path) {\n    if (path.pieceNum_ >= path.pieces_.length) {\n        return null;\n    }\n    return path.pieces_[path.pieceNum_];\n}\n/**\n * @returns The number of segments in this path\n */\nfunction pathGetLength(path) {\n    return path.pieces_.length - path.pieceNum_;\n}\nfunction pathPopFront(path) {\n    let pieceNum = path.pieceNum_;\n    if (pieceNum < path.pieces_.length) {\n        pieceNum++;\n    }\n    return new Path(path.pieces_, pieceNum);\n}\nfunction pathGetBack(path) {\n    if (path.pieceNum_ < path.pieces_.length) {\n        return path.pieces_[path.pieces_.length - 1];\n    }\n    return null;\n}\nfunction pathToUrlEncodedString(path) {\n    let pathString = '';\n    for (let i = path.pieceNum_; i < path.pieces_.length; i++) {\n        if (path.pieces_[i] !== '') {\n            pathString += '/' + encodeURIComponent(String(path.pieces_[i]));\n        }\n    }\n    return pathString || '/';\n}\n/**\n * Shallow copy of the parts of the path.\n *\n */\nfunction pathSlice(path, begin = 0) {\n    return path.pieces_.slice(path.pieceNum_ + begin);\n}\nfunction pathParent(path) {\n    if (path.pieceNum_ >= path.pieces_.length) {\n        return null;\n    }\n    const pieces = [];\n    for (let i = path.pieceNum_; i < path.pieces_.length - 1; i++) {\n        pieces.push(path.pieces_[i]);\n    }\n    return new Path(pieces, 0);\n}\nfunction pathChild(path, childPathObj) {\n    const pieces = [];\n    for (let i = path.pieceNum_; i < path.pieces_.length; i++) {\n        pieces.push(path.pieces_[i]);\n    }\n    if (childPathObj instanceof Path) {\n        for (let i = childPathObj.pieceNum_; i < childPathObj.pieces_.length; i++) {\n            pieces.push(childPathObj.pieces_[i]);\n        }\n    }\n    else {\n        const childPieces = childPathObj.split('/');\n        for (let i = 0; i < childPieces.length; i++) {\n            if (childPieces[i].length > 0) {\n                pieces.push(childPieces[i]);\n            }\n        }\n    }\n    return new Path(pieces, 0);\n}\n/**\n * @returns True if there are no segments in this path\n */\nfunction pathIsEmpty(path) {\n    return path.pieceNum_ >= path.pieces_.length;\n}\n/**\n * @returns The path from outerPath to innerPath\n */\nfunction newRelativePath(outerPath, innerPath) {\n    const outer = pathGetFront(outerPath), inner = pathGetFront(innerPath);\n    if (outer === null) {\n        return innerPath;\n    }\n    else if (outer === inner) {\n        return newRelativePath(pathPopFront(outerPath), pathPopFront(innerPath));\n    }\n    else {\n        throw new Error('INTERNAL ERROR: innerPath (' +\n            innerPath +\n            ') is not within ' +\n            'outerPath (' +\n            outerPath +\n            ')');\n    }\n}\n/**\n * @returns -1, 0, 1 if left is less, equal, or greater than the right.\n */\nfunction pathCompare(left, right) {\n    const leftKeys = pathSlice(left, 0);\n    const rightKeys = pathSlice(right, 0);\n    for (let i = 0; i < leftKeys.length && i < rightKeys.length; i++) {\n        const cmp = nameCompare(leftKeys[i], rightKeys[i]);\n        if (cmp !== 0) {\n            return cmp;\n        }\n    }\n    if (leftKeys.length === rightKeys.length) {\n        return 0;\n    }\n    return leftKeys.length < rightKeys.length ? -1 : 1;\n}\n/**\n * @returns true if paths are the same.\n */\nfunction pathEquals(path, other) {\n    if (pathGetLength(path) !== pathGetLength(other)) {\n        return false;\n    }\n    for (let i = path.pieceNum_, j = other.pieceNum_; i <= path.pieces_.length; i++, j++) {\n        if (path.pieces_[i] !== other.pieces_[j]) {\n            return false;\n        }\n    }\n    return true;\n}\n/**\n * @returns True if this path is a parent of (or the same as) other\n */\nfunction pathContains(path, other) {\n    let i = path.pieceNum_;\n    let j = other.pieceNum_;\n    if (pathGetLength(path) > pathGetLength(other)) {\n        return false;\n    }\n    while (i < path.pieces_.length) {\n        if (path.pieces_[i] !== other.pieces_[j]) {\n            return false;\n        }\n        ++i;\n        ++j;\n    }\n    return true;\n}\n/**\n * Dynamic (mutable) path used to count path lengths.\n *\n * This class is used to efficiently check paths for valid\n * length (in UTF8 bytes) and depth (used in path validation).\n *\n * Throws Error exception if path is ever invalid.\n *\n * The definition of a path always begins with '/'.\n */\nclass ValidationPath {\n    /**\n     * @param path - Initial Path.\n     * @param errorPrefix_ - Prefix for any error messages.\n     */\n    constructor(path, errorPrefix_) {\n        this.errorPrefix_ = errorPrefix_;\n        this.parts_ = pathSlice(path, 0);\n        /** Initialize to number of '/' chars needed in path. */\n        this.byteLength_ = Math.max(1, this.parts_.length);\n        for (let i = 0; i < this.parts_.length; i++) {\n            this.byteLength_ += stringLength(this.parts_[i]);\n        }\n        validationPathCheckValid(this);\n    }\n}\nfunction validationPathPush(validationPath, child) {\n    // Count the needed '/'\n    if (validationPath.parts_.length > 0) {\n        validationPath.byteLength_ += 1;\n    }\n    validationPath.parts_.push(child);\n    validationPath.byteLength_ += stringLength(child);\n    validationPathCheckValid(validationPath);\n}\nfunction validationPathPop(validationPath) {\n    const last = validationPath.parts_.pop();\n    validationPath.byteLength_ -= stringLength(last);\n    // Un-count the previous '/'\n    if (validationPath.parts_.length > 0) {\n        validationPath.byteLength_ -= 1;\n    }\n}\nfunction validationPathCheckValid(validationPath) {\n    if (validationPath.byteLength_ > MAX_PATH_LENGTH_BYTES) {\n        throw new Error(validationPath.errorPrefix_ +\n            'has a key path longer than ' +\n            MAX_PATH_LENGTH_BYTES +\n            ' bytes (' +\n            validationPath.byteLength_ +\n            ').');\n    }\n    if (validationPath.parts_.length > MAX_PATH_DEPTH) {\n        throw new Error(validationPath.errorPrefix_ +\n            'path specified exceeds the maximum depth that can be written (' +\n            MAX_PATH_DEPTH +\n            ') or object contains a cycle ' +\n            validationPathToErrorString(validationPath));\n    }\n}\n/**\n * String for use in error messages - uses '.' notation for path.\n */\nfunction validationPathToErrorString(validationPath) {\n    if (validationPath.parts_.length === 0) {\n        return '';\n    }\n    return \"in property '\" + validationPath.parts_.join('.') + \"'\";\n}\n\n/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nclass VisibilityMonitor extends EventEmitter {\n    static getInstance() {\n        return new VisibilityMonitor();\n    }\n    constructor() {\n        super(['visible']);\n        let hidden;\n        let visibilityChange;\n        if (typeof document !== 'undefined' &&\n            typeof document.addEventListener !== 'undefined') {\n            if (typeof document['hidden'] !== 'undefined') {\n                // Opera 12.10 and Firefox 18 and later support\n                visibilityChange = 'visibilitychange';\n                hidden = 'hidden';\n            }\n            else if (typeof document['mozHidden'] !== 'undefined') {\n                visibilityChange = 'mozvisibilitychange';\n                hidden = 'mozHidden';\n            }\n            else if (typeof document['msHidden'] !== 'undefined') {\n                visibilityChange = 'msvisibilitychange';\n                hidden = 'msHidden';\n            }\n            else if (typeof document['webkitHidden'] !== 'undefined') {\n                visibilityChange = 'webkitvisibilitychange';\n                hidden = 'webkitHidden';\n            }\n        }\n        // Initially, we always assume we are visible. This ensures that in browsers\n        // without page visibility support or in cases where we are never visible\n        // (e.g. chrome extension), we act as if we are visible, i.e. don't delay\n        // reconnects\n        this.visible_ = true;\n        if (visibilityChange) {\n            document.addEventListener(visibilityChange, () => {\n                const visible = !document[hidden];\n                if (visible !== this.visible_) {\n                    this.visible_ = visible;\n                    this.trigger('visible', visible);\n                }\n            }, false);\n        }\n    }\n    getInitialEvent(eventType) {\n        assert(eventType === 'visible', 'Unknown event type: ' + eventType);\n        return [this.visible_];\n    }\n}\n\n/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nconst RECONNECT_MIN_DELAY = 1000;\nconst RECONNECT_MAX_DELAY_DEFAULT = 60 * 5 * 1000; // 5 minutes in milliseconds (Case: 1858)\nconst RECONNECT_MAX_DELAY_FOR_ADMINS = 30 * 1000; // 30 seconds for admin clients (likely to be a backend server)\nconst RECONNECT_DELAY_MULTIPLIER = 1.3;\nconst RECONNECT_DELAY_RESET_TIMEOUT = 30000; // Reset delay back to MIN_DELAY after being connected for 30sec.\nconst SERVER_KILL_INTERRUPT_REASON = 'server_kill';\n// If auth fails repeatedly, we'll assume something is wrong and log a warning / back off.\nconst INVALID_TOKEN_THRESHOLD = 3;\n/**\n * Firebase connection.  Abstracts wire protocol and handles reconnecting.\n *\n * NOTE: All JSON objects sent to the realtime connection must have property names enclosed\n * in quotes to make sure the closure compiler does not minify them.\n */\nclass PersistentConnection extends ServerActions {\n    /**\n     * @param repoInfo_ - Data about the namespace we are connecting to\n     * @param applicationId_ - The Firebase App ID for this project\n     * @param onDataUpdate_ - A callback for new data from the server\n     */\n    constructor(repoInfo_, applicationId_, onDataUpdate_, onConnectStatus_, onServerInfoUpdate_, authTokenProvider_, appCheckTokenProvider_, authOverride_) {\n        super();\n        this.repoInfo_ = repoInfo_;\n        this.applicationId_ = applicationId_;\n        this.onDataUpdate_ = onDataUpdate_;\n        this.onConnectStatus_ = onConnectStatus_;\n        this.onServerInfoUpdate_ = onServerInfoUpdate_;\n        this.authTokenProvider_ = authTokenProvider_;\n        this.appCheckTokenProvider_ = appCheckTokenProvider_;\n        this.authOverride_ = authOverride_;\n        // Used for diagnostic logging.\n        this.id = PersistentConnection.nextPersistentConnectionId_++;\n        this.log_ = logWrapper('p:' + this.id + ':');\n        this.interruptReasons_ = {};\n        this.listens = new Map();\n        this.outstandingPuts_ = [];\n        this.outstandingGets_ = [];\n        this.outstandingPutCount_ = 0;\n        this.outstandingGetCount_ = 0;\n        this.onDisconnectRequestQueue_ = [];\n        this.connected_ = false;\n        this.reconnectDelay_ = RECONNECT_MIN_DELAY;\n        this.maxReconnectDelay_ = RECONNECT_MAX_DELAY_DEFAULT;\n        this.securityDebugCallback_ = null;\n        this.lastSessionId = null;\n        this.establishConnectionTimer_ = null;\n        this.visible_ = false;\n        // Before we get connected, we keep a queue of pending messages to send.\n        this.requestCBHash_ = {};\n        this.requestNumber_ = 0;\n        this.realtime_ = null;\n        this.authToken_ = null;\n        this.appCheckToken_ = null;\n        this.forceTokenRefresh_ = false;\n        this.invalidAuthTokenCount_ = 0;\n        this.invalidAppCheckTokenCount_ = 0;\n        this.firstConnection_ = true;\n        this.lastConnectionAttemptTime_ = null;\n        this.lastConnectionEstablishedTime_ = null;\n        if (authOverride_ && !isNodeSdk()) {\n            throw new Error('Auth override specified in options, but not supported on non Node.js platforms');\n        }\n        VisibilityMonitor.getInstance().on('visible', this.onVisible_, this);\n        if (repoInfo_.host.indexOf('fblocal') === -1) {\n            OnlineMonitor.getInstance().on('online', this.onOnline_, this);\n        }\n    }\n    sendRequest(action, body, onResponse) {\n        const curReqNum = ++this.requestNumber_;\n        const msg = { r: curReqNum, a: action, b: body };\n        this.log_(stringify(msg));\n        assert(this.connected_, \"sendRequest call when we're not connected not allowed.\");\n        this.realtime_.sendRequest(msg);\n        if (onResponse) {\n            this.requestCBHash_[curReqNum] = onResponse;\n        }\n    }\n    get(query) {\n        this.initConnection_();\n        const deferred = new Deferred();\n        const request = {\n            p: query._path.toString(),\n            q: query._queryObject\n        };\n        const outstandingGet = {\n            action: 'g',\n            request,\n            onComplete: (message) => {\n                const payload = message['d'];\n                if (message['s'] === 'ok') {\n                    deferred.resolve(payload);\n                }\n                else {\n                    deferred.reject(payload);\n                }\n            }\n        };\n        this.outstandingGets_.push(outstandingGet);\n        this.outstandingGetCount_++;\n        const index = this.outstandingGets_.length - 1;\n        if (this.connected_) {\n            this.sendGet_(index);\n        }\n        return deferred.promise;\n    }\n    listen(query, currentHashFn, tag, onComplete) {\n        this.initConnection_();\n        const queryId = query._queryIdentifier;\n        const pathString = query._path.toString();\n        this.log_('Listen called for ' + pathString + ' ' + queryId);\n        if (!this.listens.has(pathString)) {\n            this.listens.set(pathString, new Map());\n        }\n        assert(query._queryParams.isDefault() || !query._queryParams.loadsAllData(), 'listen() called for non-default but complete query');\n        assert(!this.listens.get(pathString).has(queryId), `listen() called twice for same path/queryId.`);\n        const listenSpec = {\n            onComplete,\n            hashFn: currentHashFn,\n            query,\n            tag\n        };\n        this.listens.get(pathString).set(queryId, listenSpec);\n        if (this.connected_) {\n            this.sendListen_(listenSpec);\n        }\n    }\n    sendGet_(index) {\n        const get = this.outstandingGets_[index];\n        this.sendRequest('g', get.request, (message) => {\n            delete this.outstandingGets_[index];\n            this.outstandingGetCount_--;\n            if (this.outstandingGetCount_ === 0) {\n                this.outstandingGets_ = [];\n            }\n            if (get.onComplete) {\n                get.onComplete(message);\n            }\n        });\n    }\n    sendListen_(listenSpec) {\n        const query = listenSpec.query;\n        const pathString = query._path.toString();\n        const queryId = query._queryIdentifier;\n        this.log_('Listen on ' + pathString + ' for ' + queryId);\n        const req = { /*path*/ p: pathString };\n        const action = 'q';\n        // Only bother to send query if it's non-default.\n        if (listenSpec.tag) {\n            req['q'] = query._queryObject;\n            req['t'] = listenSpec.tag;\n        }\n        req[ /*hash*/'h'] = listenSpec.hashFn();\n        this.sendRequest(action, req, (message) => {\n            const payload = message[ /*data*/'d'];\n            const status = message[ /*status*/'s'];\n            // print warnings in any case...\n            PersistentConnection.warnOnListenWarnings_(payload, query);\n            const currentListenSpec = this.listens.get(pathString) &&\n                this.listens.get(pathString).get(queryId);\n            // only trigger actions if the listen hasn't been removed and readded\n            if (currentListenSpec === listenSpec) {\n                this.log_('listen response', message);\n                if (status !== 'ok') {\n                    this.removeListen_(pathString, queryId);\n                }\n                if (listenSpec.onComplete) {\n                    listenSpec.onComplete(status, payload);\n                }\n            }\n        });\n    }\n    static warnOnListenWarnings_(payload, query) {\n        if (payload && typeof payload === 'object' && contains(payload, 'w')) {\n            // eslint-disable-next-line @typescript-eslint/no-explicit-any\n            const warnings = safeGet(payload, 'w');\n            if (Array.isArray(warnings) && ~warnings.indexOf('no_index')) {\n                const indexSpec = '\".indexOn\": \"' + query._queryParams.getIndex().toString() + '\"';\n                const indexPath = query._path.toString();\n                warn(`Using an unspecified index. Your data will be downloaded and ` +\n                    `filtered on the client. Consider adding ${indexSpec} at ` +\n                    `${indexPath} to your security rules for better performance.`);\n            }\n        }\n    }\n    refreshAuthToken(token) {\n        this.authToken_ = token;\n        this.log_('Auth token refreshed');\n        if (this.authToken_) {\n            this.tryAuth();\n        }\n        else {\n            //If we're connected we want to let the server know to unauthenticate us. If we're not connected, simply delete\n            //the credential so we dont become authenticated next time we connect.\n            if (this.connected_) {\n                this.sendRequest('unauth', {}, () => { });\n            }\n        }\n        this.reduceReconnectDelayIfAdminCredential_(token);\n    }\n    reduceReconnectDelayIfAdminCredential_(credential) {\n        // NOTE: This isn't intended to be bulletproof (a malicious developer can always just modify the client).\n        // Additionally, we don't bother resetting the max delay back to the default if auth fails / expires.\n        const isFirebaseSecret = credential && credential.length === 40;\n        if (isFirebaseSecret || isAdmin(credential)) {\n            this.log_('Admin auth credential detected.  Reducing max reconnect time.');\n            this.maxReconnectDelay_ = RECONNECT_MAX_DELAY_FOR_ADMINS;\n        }\n    }\n    refreshAppCheckToken(token) {\n        this.appCheckToken_ = token;\n        this.log_('App check token refreshed');\n        if (this.appCheckToken_) {\n            this.tryAppCheck();\n        }\n        else {\n            //If we're connected we want to let the server know to unauthenticate us.\n            //If we're not connected, simply delete the credential so we dont become\n            // authenticated next time we connect.\n            if (this.connected_) {\n                this.sendRequest('unappeck', {}, () => { });\n            }\n        }\n    }\n    /**\n     * Attempts to authenticate with the given credentials. If the authentication attempt fails, it's triggered like\n     * a auth revoked (the connection is closed).\n     */\n    tryAuth() {\n        if (this.connected_ && this.authToken_) {\n            const token = this.authToken_;\n            const authMethod = isValidFormat(token) ? 'auth' : 'gauth';\n            const requestData = { cred: token };\n            if (this.authOverride_ === null) {\n                requestData['noauth'] = true;\n            }\n            else if (typeof this.authOverride_ === 'object') {\n                requestData['authvar'] = this.authOverride_;\n            }\n            this.sendRequest(authMethod, requestData, (res) => {\n                const status = res[ /*status*/'s'];\n                const data = res[ /*data*/'d'] || 'error';\n                if (this.authToken_ === token) {\n                    if (status === 'ok') {\n                        this.invalidAuthTokenCount_ = 0;\n                    }\n                    else {\n                        // Triggers reconnect and force refresh for auth token\n                        this.onAuthRevoked_(status, data);\n                    }\n                }\n            });\n        }\n    }\n    /**\n     * Attempts to authenticate with the given token. If the authentication\n     * attempt fails, it's triggered like the token was revoked (the connection is\n     * closed).\n     */\n    tryAppCheck() {\n        if (this.connected_ && this.appCheckToken_) {\n            this.sendRequest('appcheck', { 'token': this.appCheckToken_ }, (res) => {\n                const status = res[ /*status*/'s'];\n                const data = res[ /*data*/'d'] || 'error';\n                if (status === 'ok') {\n                    this.invalidAppCheckTokenCount_ = 0;\n                }\n                else {\n                    this.onAppCheckRevoked_(status, data);\n                }\n            });\n        }\n    }\n    /**\n     * @inheritDoc\n     */\n    unlisten(query, tag) {\n        const pathString = query._path.toString();\n        const queryId = query._queryIdentifier;\n        this.log_('Unlisten called for ' + pathString + ' ' + queryId);\n        assert(query._queryParams.isDefault() || !query._queryParams.loadsAllData(), 'unlisten() called for non-default but complete query');\n        const listen = this.removeListen_(pathString, queryId);\n        if (listen && this.connected_) {\n            this.sendUnlisten_(pathString, queryId, query._queryObject, tag);\n        }\n    }\n    sendUnlisten_(pathString, queryId, queryObj, tag) {\n        this.log_('Unlisten on ' + pathString + ' for ' + queryId);\n        const req = { /*path*/ p: pathString };\n        const action = 'n';\n        // Only bother sending queryId if it's non-default.\n        if (tag) {\n            req['q'] = queryObj;\n            req['t'] = tag;\n        }\n        this.sendRequest(action, req);\n    }\n    onDisconnectPut(pathString, data, onComplete) {\n        this.initConnection_();\n        if (this.connected_) {\n            this.sendOnDisconnect_('o', pathString, data, onComplete);\n        }\n        else {\n            this.onDisconnectRequestQueue_.push({\n                pathString,\n                action: 'o',\n                data,\n                onComplete\n            });\n        }\n    }\n    onDisconnectMerge(pathString, data, onComplete) {\n        this.initConnection_();\n        if (this.connected_) {\n            this.sendOnDisconnect_('om', pathString, data, onComplete);\n        }\n        else {\n            this.onDisconnectRequestQueue_.push({\n                pathString,\n                action: 'om',\n                data,\n                onComplete\n            });\n        }\n    }\n    onDisconnectCancel(pathString, onComplete) {\n        this.initConnection_();\n        if (this.connected_) {\n            this.sendOnDisconnect_('oc', pathString, null, onComplete);\n        }\n        else {\n            this.onDisconnectRequestQueue_.push({\n                pathString,\n                action: 'oc',\n                data: null,\n                onComplete\n            });\n        }\n    }\n    sendOnDisconnect_(action, pathString, data, onComplete) {\n        const request = { /*path*/ p: pathString, /*data*/ d: data };\n        this.log_('onDisconnect ' + action, request);\n        this.sendRequest(action, request, (response) => {\n            if (onComplete) {\n                setTimeout(() => {\n                    onComplete(response[ /*status*/'s'], response[ /* data */'d']);\n                }, Math.floor(0));\n            }\n        });\n    }\n    put(pathString, data, onComplete, hash) {\n        this.putInternal('p', pathString, data, onComplete, hash);\n    }\n    merge(pathString, data, onComplete, hash) {\n        this.putInternal('m', pathString, data, onComplete, hash);\n    }\n    putInternal(action, pathString, data, onComplete, hash) {\n        this.initConnection_();\n        const request = {\n            /*path*/ p: pathString,\n            /*data*/ d: data\n        };\n        if (hash !== undefined) {\n            request[ /*hash*/'h'] = hash;\n        }\n        // TODO: Only keep track of the most recent put for a given path?\n        this.outstandingPuts_.push({\n            action,\n            request,\n            onComplete\n        });\n        this.outstandingPutCount_++;\n        const index = this.outstandingPuts_.length - 1;\n        if (this.connected_) {\n            this.sendPut_(index);\n        }\n        else {\n            this.log_('Buffering put: ' + pathString);\n        }\n    }\n    sendPut_(index) {\n        const action = this.outstandingPuts_[index].action;\n        const request = this.outstandingPuts_[index].request;\n        const onComplete = this.outstandingPuts_[index].onComplete;\n        this.outstandingPuts_[index].queued = this.connected_;\n        this.sendRequest(action, request, (message) => {\n            this.log_(action + ' response', message);\n            delete this.outstandingPuts_[index];\n            this.outstandingPutCount_--;\n            // Clean up array occasionally.\n            if (this.outstandingPutCount_ === 0) {\n                this.outstandingPuts_ = [];\n            }\n            if (onComplete) {\n                onComplete(message[ /*status*/'s'], message[ /* data */'d']);\n            }\n        });\n    }\n    reportStats(stats) {\n        // If we're not connected, we just drop the stats.\n        if (this.connected_) {\n            const request = { /*counters*/ c: stats };\n            this.log_('reportStats', request);\n            this.sendRequest(/*stats*/ 's', request, result => {\n                const status = result[ /*status*/'s'];\n                if (status !== 'ok') {\n                    const errorReason = result[ /* data */'d'];\n                    this.log_('reportStats', 'Error sending stats: ' + errorReason);\n                }\n            });\n        }\n    }\n    onDataMessage_(message) {\n        if ('r' in message) {\n            // this is a response\n            this.log_('from server: ' + stringify(message));\n            const reqNum = message['r'];\n            const onResponse = this.requestCBHash_[reqNum];\n            if (onResponse) {\n                delete this.requestCBHash_[reqNum];\n                onResponse(message[ /*body*/'b']);\n            }\n        }\n        else if ('error' in message) {\n            throw 'A server-side error has occurred: ' + message['error'];\n        }\n        else if ('a' in message) {\n            // a and b are action and body, respectively\n            this.onDataPush_(message['a'], message['b']);\n        }\n    }\n    onDataPush_(action, body) {\n        this.log_('handleServerMessage', action, body);\n        if (action === 'd') {\n            this.onDataUpdate_(body[ /*path*/'p'], body[ /*data*/'d'], \n            /*isMerge*/ false, body['t']);\n        }\n        else if (action === 'm') {\n            this.onDataUpdate_(body[ /*path*/'p'], body[ /*data*/'d'], \n            /*isMerge=*/ true, body['t']);\n        }\n        else if (action === 'c') {\n            this.onListenRevoked_(body[ /*path*/'p'], body[ /*query*/'q']);\n        }\n        else if (action === 'ac') {\n            this.onAuthRevoked_(body[ /*status code*/'s'], body[ /* explanation */'d']);\n        }\n        else if (action === 'apc') {\n            this.onAppCheckRevoked_(body[ /*status code*/'s'], body[ /* explanation */'d']);\n        }\n        else if (action === 'sd') {\n            this.onSecurityDebugPacket_(body);\n        }\n        else {\n            error('Unrecognized action received from server: ' +\n                stringify(action) +\n                '\\nAre you using the latest client?');\n        }\n    }\n    onReady_(timestamp, sessionId) {\n        this.log_('connection ready');\n        this.connected_ = true;\n        this.lastConnectionEstablishedTime_ = new Date().getTime();\n        this.handleTimestamp_(timestamp);\n        this.lastSessionId = sessionId;\n        if (this.firstConnection_) {\n            this.sendConnectStats_();\n        }\n        this.restoreState_();\n        this.firstConnection_ = false;\n        this.onConnectStatus_(true);\n    }\n    scheduleConnect_(timeout) {\n        assert(!this.realtime_, \"Scheduling a connect when we're already connected/ing?\");\n        if (this.establishConnectionTimer_) {\n            clearTimeout(this.establishConnectionTimer_);\n        }\n        // NOTE: Even when timeout is 0, it's important to do a setTimeout to work around an infuriating \"Security Error\" in\n        // Firefox when trying to write to our long-polling iframe in some scenarios (e.g. Forge or our unit tests).\n        this.establishConnectionTimer_ = setTimeout(() => {\n            this.establishConnectionTimer_ = null;\n            this.establishConnection_();\n            // eslint-disable-next-line @typescript-eslint/no-explicit-any\n        }, Math.floor(timeout));\n    }\n    initConnection_() {\n        if (!this.realtime_ && this.firstConnection_) {\n            this.scheduleConnect_(0);\n        }\n    }\n    onVisible_(visible) {\n        // NOTE: Tabbing away and back to a window will defeat our reconnect backoff, but I think that's fine.\n        if (visible &&\n            !this.visible_ &&\n            this.reconnectDelay_ === this.maxReconnectDelay_) {\n            this.log_('Window became visible.  Reducing delay.');\n            this.reconnectDelay_ = RECONNECT_MIN_DELAY;\n            if (!this.realtime_) {\n                this.scheduleConnect_(0);\n            }\n        }\n        this.visible_ = visible;\n    }\n    onOnline_(online) {\n        if (online) {\n            this.log_('Browser went online.');\n            this.reconnectDelay_ = RECONNECT_MIN_DELAY;\n            if (!this.realtime_) {\n                this.scheduleConnect_(0);\n            }\n        }\n        else {\n            this.log_('Browser went offline.  Killing connection.');\n            if (this.realtime_) {\n                this.realtime_.close();\n            }\n        }\n    }\n    onRealtimeDisconnect_() {\n        this.log_('data client disconnected');\n        this.connected_ = false;\n        this.realtime_ = null;\n        // Since we don't know if our sent transactions succeeded or not, we need to cancel them.\n        this.cancelSentTransactions_();\n        // Clear out the pending requests.\n        this.requestCBHash_ = {};\n        if (this.shouldReconnect_()) {\n            if (!this.visible_) {\n                this.log_(\"Window isn't visible.  Delaying reconnect.\");\n                this.reconnectDelay_ = this.maxReconnectDelay_;\n                this.lastConnectionAttemptTime_ = new Date().getTime();\n            }\n            else if (this.lastConnectionEstablishedTime_) {\n                // If we've been connected long enough, reset reconnect delay to minimum.\n                const timeSinceLastConnectSucceeded = new Date().getTime() - this.lastConnectionEstablishedTime_;\n                if (timeSinceLastConnectSucceeded > RECONNECT_DELAY_RESET_TIMEOUT) {\n                    this.reconnectDelay_ = RECONNECT_MIN_DELAY;\n                }\n                this.lastConnectionEstablishedTime_ = null;\n            }\n            const timeSinceLastConnectAttempt = new Date().getTime() - this.lastConnectionAttemptTime_;\n            let reconnectDelay = Math.max(0, this.reconnectDelay_ - timeSinceLastConnectAttempt);\n            reconnectDelay = Math.random() * reconnectDelay;\n            this.log_('Trying to reconnect in ' + reconnectDelay + 'ms');\n            this.scheduleConnect_(reconnectDelay);\n            // Adjust reconnect delay for next time.\n            this.reconnectDelay_ = Math.min(this.maxReconnectDelay_, this.reconnectDelay_ * RECONNECT_DELAY_MULTIPLIER);\n        }\n        this.onConnectStatus_(false);\n    }\n    async establishConnection_() {\n        if (this.shouldReconnect_()) {\n            this.log_('Making a connection attempt');\n            this.lastConnectionAttemptTime_ = new Date().getTime();\n            this.lastConnectionEstablishedTime_ = null;\n            const onDataMessage = this.onDataMessage_.bind(this);\n            const onReady = this.onReady_.bind(this);\n            const onDisconnect = this.onRealtimeDisconnect_.bind(this);\n            const connId = this.id + ':' + PersistentConnection.nextConnectionId_++;\n            const lastSessionId = this.lastSessionId;\n            let canceled = false;\n            let connection = null;\n            const closeFn = function () {\n                if (connection) {\n                    connection.close();\n                }\n                else {\n                    canceled = true;\n                    onDisconnect();\n                }\n            };\n            const sendRequestFn = function (msg) {\n                assert(connection, \"sendRequest call when we're not connected not allowed.\");\n                connection.sendRequest(msg);\n            };\n            this.realtime_ = {\n                close: closeFn,\n                sendRequest: sendRequestFn\n            };\n            const forceRefresh = this.forceTokenRefresh_;\n            this.forceTokenRefresh_ = false;\n            try {\n                // First fetch auth and app check token, and establish connection after\n                // fetching the token was successful\n                const [authToken, appCheckToken] = await Promise.all([\n                    this.authTokenProvider_.getToken(forceRefresh),\n                    this.appCheckTokenProvider_.getToken(forceRefresh)\n                ]);\n                if (!canceled) {\n                    log('getToken() completed. Creating connection.');\n                    this.authToken_ = authToken && authToken.accessToken;\n                    this.appCheckToken_ = appCheckToken && appCheckToken.token;\n                    connection = new Connection(connId, this.repoInfo_, this.applicationId_, this.appCheckToken_, this.authToken_, onDataMessage, onReady, onDisconnect, \n                    /* onKill= */ reason => {\n                        warn(reason + ' (' + this.repoInfo_.toString() + ')');\n                        this.interrupt(SERVER_KILL_INTERRUPT_REASON);\n                    }, lastSessionId);\n                }\n                else {\n                    log('getToken() completed but was canceled');\n                }\n            }\n            catch (error) {\n                this.log_('Failed to get token: ' + error);\n                if (!canceled) {\n                    if (this.repoInfo_.nodeAdmin) {\n                        // This may be a critical error for the Admin Node.js SDK, so log a warning.\n                        // But getToken() may also just have temporarily failed, so we still want to\n                        // continue retrying.\n                        warn(error);\n                    }\n                    closeFn();\n                }\n            }\n        }\n    }\n    interrupt(reason) {\n        log('Interrupting connection for reason: ' + reason);\n        this.interruptReasons_[reason] = true;\n        if (this.realtime_) {\n            this.realtime_.close();\n        }\n        else {\n            if (this.establishConnectionTimer_) {\n                clearTimeout(this.establishConnectionTimer_);\n                this.establishConnectionTimer_ = null;\n            }\n            if (this.connected_) {\n                this.onRealtimeDisconnect_();\n            }\n        }\n    }\n    resume(reason) {\n        log('Resuming connection for reason: ' + reason);\n        delete this.interruptReasons_[reason];\n        if (isEmpty(this.interruptReasons_)) {\n            this.reconnectDelay_ = RECONNECT_MIN_DELAY;\n            if (!this.realtime_) {\n                this.scheduleConnect_(0);\n            }\n        }\n    }\n    handleTimestamp_(timestamp) {\n        const delta = timestamp - new Date().getTime();\n        this.onServerInfoUpdate_({ serverTimeOffset: delta });\n    }\n    cancelSentTransactions_() {\n        for (let i = 0; i < this.outstandingPuts_.length; i++) {\n            const put = this.outstandingPuts_[i];\n            if (put && /*hash*/ 'h' in put.request && put.queued) {\n                if (put.onComplete) {\n                    put.onComplete('disconnect');\n                }\n                delete this.outstandingPuts_[i];\n                this.outstandingPutCount_--;\n            }\n        }\n        // Clean up array occasionally.\n        if (this.outstandingPutCount_ === 0) {\n            this.outstandingPuts_ = [];\n        }\n    }\n    onListenRevoked_(pathString, query) {\n        // Remove the listen and manufacture a \"permission_denied\" error for the failed listen.\n        let queryId;\n        if (!query) {\n            queryId = 'default';\n        }\n        else {\n            queryId = query.map(q => ObjectToUniqueKey(q)).join('$');\n        }\n        const listen = this.removeListen_(pathString, queryId);\n        if (listen && listen.onComplete) {\n            listen.onComplete('permission_denied');\n        }\n    }\n    removeListen_(pathString, queryId) {\n        const normalizedPathString = new Path(pathString).toString(); // normalize path.\n        let listen;\n        if (this.listens.has(normalizedPathString)) {\n            const map = this.listens.get(normalizedPathString);\n            listen = map.get(queryId);\n            map.delete(queryId);\n            if (map.size === 0) {\n                this.listens.delete(normalizedPathString);\n            }\n        }\n        else {\n            // all listens for this path has already been removed\n            listen = undefined;\n        }\n        return listen;\n    }\n    onAuthRevoked_(statusCode, explanation) {\n        log('Auth token revoked: ' + statusCode + '/' + explanation);\n        this.authToken_ = null;\n        this.forceTokenRefresh_ = true;\n        this.realtime_.close();\n        if (statusCode === 'invalid_token' || statusCode === 'permission_denied') {\n            // We'll wait a couple times before logging the warning / increasing the\n            // retry period since oauth tokens will report as \"invalid\" if they're\n            // just expired. Plus there may be transient issues that resolve themselves.\n            this.invalidAuthTokenCount_++;\n            if (this.invalidAuthTokenCount_ >= INVALID_TOKEN_THRESHOLD) {\n                // Set a long reconnect delay because recovery is unlikely\n                this.reconnectDelay_ = RECONNECT_MAX_DELAY_FOR_ADMINS;\n                // Notify the auth token provider that the token is invalid, which will log\n                // a warning\n                this.authTokenProvider_.notifyForInvalidToken();\n            }\n        }\n    }\n    onAppCheckRevoked_(statusCode, explanation) {\n        log('App check token revoked: ' + statusCode + '/' + explanation);\n        this.appCheckToken_ = null;\n        this.forceTokenRefresh_ = true;\n        // Note: We don't close the connection as the developer may not have\n        // enforcement enabled. The backend closes connections with enforcements.\n        if (statusCode === 'invalid_token' || statusCode === 'permission_denied') {\n            // We'll wait a couple times before logging the warning / increasing the\n            // retry period since oauth tokens will report as \"invalid\" if they're\n            // just expired. Plus there may be transient issues that resolve themselves.\n            this.invalidAppCheckTokenCount_++;\n            if (this.invalidAppCheckTokenCount_ >= INVALID_TOKEN_THRESHOLD) {\n                this.appCheckTokenProvider_.notifyForInvalidToken();\n            }\n        }\n    }\n    onSecurityDebugPacket_(body) {\n        if (this.securityDebugCallback_) {\n            this.securityDebugCallback_(body);\n        }\n        else {\n            if ('msg' in body) {\n                console.log('FIREBASE: ' + body['msg'].replace('\\n', '\\nFIREBASE: '));\n            }\n        }\n    }\n    restoreState_() {\n        //Re-authenticate ourselves if we have a credential stored.\n        this.tryAuth();\n        this.tryAppCheck();\n        // Puts depend on having received the corresponding data update from the server before they complete, so we must\n        // make sure to send listens before puts.\n        for (const queries of this.listens.values()) {\n            for (const listenSpec of queries.values()) {\n                this.sendListen_(listenSpec);\n            }\n        }\n        for (let i = 0; i < this.outstandingPuts_.length; i++) {\n            if (this.outstandingPuts_[i]) {\n                this.sendPut_(i);\n            }\n        }\n        while (this.onDisconnectRequestQueue_.length) {\n            const request = this.onDisconnectRequestQueue_.shift();\n            this.sendOnDisconnect_(request.action, request.pathString, request.data, request.onComplete);\n        }\n        for (let i = 0; i < this.outstandingGets_.length; i++) {\n            if (this.outstandingGets_[i]) {\n                this.sendGet_(i);\n            }\n        }\n    }\n    /**\n     * Sends client stats for first connection\n     */\n    sendConnectStats_() {\n        const stats = {};\n        let clientName = 'js';\n        if (isNodeSdk()) {\n            if (this.repoInfo_.nodeAdmin) {\n                clientName = 'admin_node';\n            }\n            else {\n                clientName = 'node';\n            }\n        }\n        stats['sdk.' + clientName + '.' + SDK_VERSION.replace(/\\./g, '-')] = 1;\n        if (isMobileCordova()) {\n            stats['framework.cordova'] = 1;\n        }\n        else if (isReactNative()) {\n            stats['framework.reactnative'] = 1;\n        }\n        this.reportStats(stats);\n    }\n    shouldReconnect_() {\n        const online = OnlineMonitor.getInstance().currentlyOnline();\n        return isEmpty(this.interruptReasons_) && online;\n    }\n}\nPersistentConnection.nextPersistentConnectionId_ = 0;\n/**\n * Counter for number of connections created. Mainly used for tagging in the logs\n */\nPersistentConnection.nextConnectionId_ = 0;\n\n/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nclass NamedNode {\n    constructor(name, node) {\n        this.name = name;\n        this.node = node;\n    }\n    static Wrap(name, node) {\n        return new NamedNode(name, node);\n    }\n}\n\n/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nclass Index {\n    /**\n     * @returns A standalone comparison function for\n     * this index\n     */\n    getCompare() {\n        return this.compare.bind(this);\n    }\n    /**\n     * Given a before and after value for a node, determine if the indexed value has changed. Even if they are different,\n     * it's possible that the changes are isolated to parts of the snapshot that are not indexed.\n     *\n     *\n     * @returns True if the portion of the snapshot being indexed changed between oldNode and newNode\n     */\n    indexedValueChanged(oldNode, newNode) {\n        const oldWrapped = new NamedNode(MIN_NAME, oldNode);\n        const newWrapped = new NamedNode(MIN_NAME, newNode);\n        return this.compare(oldWrapped, newWrapped) !== 0;\n    }\n    /**\n     * @returns a node wrapper that will sort equal to or less than\n     * any other node wrapper, using this index\n     */\n    minPost() {\n        // eslint-disable-next-line @typescript-eslint/no-explicit-any\n        return NamedNode.MIN;\n    }\n}\n\n/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nlet __EMPTY_NODE;\nclass KeyIndex extends Index {\n    static get __EMPTY_NODE() {\n        return __EMPTY_NODE;\n    }\n    static set __EMPTY_NODE(val) {\n        __EMPTY_NODE = val;\n    }\n    compare(a, b) {\n        return nameCompare(a.name, b.name);\n    }\n    isDefinedOn(node) {\n        // We could probably return true here (since every node has a key), but it's never called\n        // so just leaving unimplemented for now.\n        throw assertionError('KeyIndex.isDefinedOn not expected to be called.');\n    }\n    indexedValueChanged(oldNode, newNode) {\n        return false; // The key for a node never changes.\n    }\n    minPost() {\n        // eslint-disable-next-line @typescript-eslint/no-explicit-any\n        return NamedNode.MIN;\n    }\n    maxPost() {\n        // TODO: This should really be created once and cached in a static property, but\n        // NamedNode isn't defined yet, so I can't use it in a static.  Bleh.\n        return new NamedNode(MAX_NAME, __EMPTY_NODE);\n    }\n    makePost(indexValue, name) {\n        assert(typeof indexValue === 'string', 'KeyIndex indexValue must always be a string.');\n        // We just use empty node, but it'll never be compared, since our comparator only looks at name.\n        return new NamedNode(indexValue, __EMPTY_NODE);\n    }\n    /**\n     * @returns String representation for inclusion in a query spec\n     */\n    toString() {\n        return '.key';\n    }\n}\nconst KEY_INDEX = new KeyIndex();\n\n/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * An iterator over an LLRBNode.\n */\nclass SortedMapIterator {\n    /**\n     * @param node - Node to iterate.\n     * @param isReverse_ - Whether or not to iterate in reverse\n     */\n    constructor(node, startKey, comparator, isReverse_, resultGenerator_ = null) {\n        this.isReverse_ = isReverse_;\n        this.resultGenerator_ = resultGenerator_;\n        this.nodeStack_ = [];\n        let cmp = 1;\n        while (!node.isEmpty()) {\n            node = node;\n            cmp = startKey ? comparator(node.key, startKey) : 1;\n            // flip the comparison if we're going in reverse\n            if (isReverse_) {\n                cmp *= -1;\n            }\n            if (cmp < 0) {\n                // This node is less than our start key. ignore it\n                if (this.isReverse_) {\n                    node = node.left;\n                }\n                else {\n                    node = node.right;\n                }\n            }\n            else if (cmp === 0) {\n                // This node is exactly equal to our start key. Push it on the stack, but stop iterating;\n                this.nodeStack_.push(node);\n                break;\n            }\n            else {\n                // This node is greater than our start key, add it to the stack and move to the next one\n                this.nodeStack_.push(node);\n                if (this.isReverse_) {\n                    node = node.right;\n                }\n                else {\n                    node = node.left;\n                }\n            }\n        }\n    }\n    getNext() {\n        if (this.nodeStack_.length === 0) {\n            return null;\n        }\n        let node = this.nodeStack_.pop();\n        let result;\n        if (this.resultGenerator_) {\n            result = this.resultGenerator_(node.key, node.value);\n        }\n        else {\n            result = { key: node.key, value: node.value };\n        }\n        if (this.isReverse_) {\n            node = node.left;\n            while (!node.isEmpty()) {\n                this.nodeStack_.push(node);\n                node = node.right;\n            }\n        }\n        else {\n            node = node.right;\n            while (!node.isEmpty()) {\n                this.nodeStack_.push(node);\n                node = node.left;\n            }\n        }\n        return result;\n    }\n    hasNext() {\n        return this.nodeStack_.length > 0;\n    }\n    peek() {\n        if (this.nodeStack_.length === 0) {\n            return null;\n        }\n        const node = this.nodeStack_[this.nodeStack_.length - 1];\n        if (this.resultGenerator_) {\n            return this.resultGenerator_(node.key, node.value);\n        }\n        else {\n            return { key: node.key, value: node.value };\n        }\n    }\n}\n/**\n * Represents a node in a Left-leaning Red-Black tree.\n */\nclass LLRBNode {\n    /**\n     * @param key - Key associated with this node.\n     * @param value - Value associated with this node.\n     * @param color - Whether this node is red.\n     * @param left - Left child.\n     * @param right - Right child.\n     */\n    constructor(key, value, color, left, right) {\n        this.key = key;\n        this.value = value;\n        this.color = color != null ? color : LLRBNode.RED;\n        this.left =\n            left != null ? left : SortedMap.EMPTY_NODE;\n        this.right =\n            right != null ? right : SortedMap.EMPTY_NODE;\n    }\n    /**\n     * Returns a copy of the current node, optionally replacing pieces of it.\n     *\n     * @param key - New key for the node, or null.\n     * @param value - New value for the node, or null.\n     * @param color - New color for the node, or null.\n     * @param left - New left child for the node, or null.\n     * @param right - New right child for the node, or null.\n     * @returns The node copy.\n     */\n    copy(key, value, color, left, right) {\n        return new LLRBNode(key != null ? key : this.key, value != null ? value : this.value, color != null ? color : this.color, left != null ? left : this.left, right != null ? right : this.right);\n    }\n    /**\n     * @returns The total number of nodes in the tree.\n     */\n    count() {\n        return this.left.count() + 1 + this.right.count();\n    }\n    /**\n     * @returns True if the tree is empty.\n     */\n    isEmpty() {\n        return false;\n    }\n    /**\n     * Traverses the tree in key order and calls the specified action function\n     * for each node.\n     *\n     * @param action - Callback function to be called for each\n     *   node.  If it returns true, traversal is aborted.\n     * @returns The first truthy value returned by action, or the last falsey\n     *   value returned by action\n     */\n    inorderTraversal(action) {\n        return (this.left.inorderTraversal(action) ||\n            !!action(this.key, this.value) ||\n            this.right.inorderTraversal(action));\n    }\n    /**\n     * Traverses the tree in reverse key order and calls the specified action function\n     * for each node.\n     *\n     * @param action - Callback function to be called for each\n     * node.  If it returns true, traversal is aborted.\n     * @returns True if traversal was aborted.\n     */\n    reverseTraversal(action) {\n        return (this.right.reverseTraversal(action) ||\n            action(this.key, this.value) ||\n            this.left.reverseTraversal(action));\n    }\n    /**\n     * @returns The minimum node in the tree.\n     */\n    min_() {\n        if (this.left.isEmpty()) {\n            return this;\n        }\n        else {\n            return this.left.min_();\n        }\n    }\n    /**\n     * @returns The maximum key in the tree.\n     */\n    minKey() {\n        return this.min_().key;\n    }\n    /**\n     * @returns The maximum key in the tree.\n     */\n    maxKey() {\n        if (this.right.isEmpty()) {\n            return this.key;\n        }\n        else {\n            return this.right.maxKey();\n        }\n    }\n    /**\n     * @param key - Key to insert.\n     * @param value - Value to insert.\n     * @param comparator - Comparator.\n     * @returns New tree, with the key/value added.\n     */\n    insert(key, value, comparator) {\n        let n = this;\n        const cmp = comparator(key, n.key);\n        if (cmp < 0) {\n            n = n.copy(null, null, null, n.left.insert(key, value, comparator), null);\n        }\n        else if (cmp === 0) {\n            n = n.copy(null, value, null, null, null);\n        }\n        else {\n            n = n.copy(null, null, null, null, n.right.insert(key, value, comparator));\n        }\n        return n.fixUp_();\n    }\n    /**\n     * @returns New tree, with the minimum key removed.\n     */\n    removeMin_() {\n        if (this.left.isEmpty()) {\n            return SortedMap.EMPTY_NODE;\n        }\n        let n = this;\n        if (!n.left.isRed_() && !n.left.left.isRed_()) {\n            n = n.moveRedLeft_();\n        }\n        n = n.copy(null, null, null, n.left.removeMin_(), null);\n        return n.fixUp_();\n    }\n    /**\n     * @param key - The key of the item to remove.\n     * @param comparator - Comparator.\n     * @returns New tree, with the specified item removed.\n     */\n    remove(key, comparator) {\n        let n, smallest;\n        n = this;\n        if (comparator(key, n.key) < 0) {\n            if (!n.left.isEmpty() && !n.left.isRed_() && !n.left.left.isRed_()) {\n                n = n.moveRedLeft_();\n            }\n            n = n.copy(null, null, null, n.left.remove(key, comparator), null);\n        }\n        else {\n            if (n.left.isRed_()) {\n                n = n.rotateRight_();\n            }\n            if (!n.right.isEmpty() && !n.right.isRed_() && !n.right.left.isRed_()) {\n                n = n.moveRedRight_();\n            }\n            if (comparator(key, n.key) === 0) {\n                if (n.right.isEmpty()) {\n                    return SortedMap.EMPTY_NODE;\n                }\n                else {\n                    smallest = n.right.min_();\n                    n = n.copy(smallest.key, smallest.value, null, null, n.right.removeMin_());\n                }\n            }\n            n = n.copy(null, null, null, null, n.right.remove(key, comparator));\n        }\n        return n.fixUp_();\n    }\n    /**\n     * @returns Whether this is a RED node.\n     */\n    isRed_() {\n        return this.color;\n    }\n    /**\n     * @returns New tree after performing any needed rotations.\n     */\n    fixUp_() {\n        let n = this;\n        if (n.right.isRed_() && !n.left.isRed_()) {\n            n = n.rotateLeft_();\n        }\n        if (n.left.isRed_() && n.left.left.isRed_()) {\n            n = n.rotateRight_();\n        }\n        if (n.left.isRed_() && n.right.isRed_()) {\n            n = n.colorFlip_();\n        }\n        return n;\n    }\n    /**\n     * @returns New tree, after moveRedLeft.\n     */\n    moveRedLeft_() {\n        let n = this.colorFlip_();\n        if (n.right.left.isRed_()) {\n            n = n.copy(null, null, null, null, n.right.rotateRight_());\n            n = n.rotateLeft_();\n            n = n.colorFlip_();\n        }\n        return n;\n    }\n    /**\n     * @returns New tree, after moveRedRight.\n     */\n    moveRedRight_() {\n        let n = this.colorFlip_();\n        if (n.left.left.isRed_()) {\n            n = n.rotateRight_();\n            n = n.colorFlip_();\n        }\n        return n;\n    }\n    /**\n     * @returns New tree, after rotateLeft.\n     */\n    rotateLeft_() {\n        const nl = this.copy(null, null, LLRBNode.RED, null, this.right.left);\n        return this.right.copy(null, null, this.color, nl, null);\n    }\n    /**\n     * @returns New tree, after rotateRight.\n     */\n    rotateRight_() {\n        const nr = this.copy(null, null, LLRBNode.RED, this.left.right, null);\n        return this.left.copy(null, null, this.color, null, nr);\n    }\n    /**\n     * @returns Newt ree, after colorFlip.\n     */\n    colorFlip_() {\n        const left = this.left.copy(null, null, !this.left.color, null, null);\n        const right = this.right.copy(null, null, !this.right.color, null, null);\n        return this.copy(null, null, !this.color, left, right);\n    }\n    /**\n     * For testing.\n     *\n     * @returns True if all is well.\n     */\n    checkMaxDepth_() {\n        const blackDepth = this.check_();\n        return Math.pow(2.0, blackDepth) <= this.count() + 1;\n    }\n    check_() {\n        if (this.isRed_() && this.left.isRed_()) {\n            throw new Error('Red node has red child(' + this.key + ',' + this.value + ')');\n        }\n        if (this.right.isRed_()) {\n            throw new Error('Right child of (' + this.key + ',' + this.value + ') is red');\n        }\n        const blackDepth = this.left.check_();\n        if (blackDepth !== this.right.check_()) {\n            throw new Error('Black depths differ');\n        }\n        else {\n            return blackDepth + (this.isRed_() ? 0 : 1);\n        }\n    }\n}\nLLRBNode.RED = true;\nLLRBNode.BLACK = false;\n/**\n * Represents an empty node (a leaf node in the Red-Black Tree).\n */\nclass LLRBEmptyNode {\n    /**\n     * Returns a copy of the current node.\n     *\n     * @returns The node copy.\n     */\n    copy(key, value, color, left, right) {\n        return this;\n    }\n    /**\n     * Returns a copy of the tree, with the specified key/value added.\n     *\n     * @param key - Key to be added.\n     * @param value - Value to be added.\n     * @param comparator - Comparator.\n     * @returns New tree, with item added.\n     */\n    insert(key, value, comparator) {\n        return new LLRBNode(key, value, null);\n    }\n    /**\n     * Returns a copy of the tree, with the specified key removed.\n     *\n     * @param key - The key to remove.\n     * @param comparator - Comparator.\n     * @returns New tree, with item removed.\n     */\n    remove(key, comparator) {\n        return this;\n    }\n    /**\n     * @returns The total number of nodes in the tree.\n     */\n    count() {\n        return 0;\n    }\n    /**\n     * @returns True if the tree is empty.\n     */\n    isEmpty() {\n        return true;\n    }\n    /**\n     * Traverses the tree in key order and calls the specified action function\n     * for each node.\n     *\n     * @param action - Callback function to be called for each\n     * node.  If it returns true, traversal is aborted.\n     * @returns True if traversal was aborted.\n     */\n    inorderTraversal(action) {\n        return false;\n    }\n    /**\n     * Traverses the tree in reverse key order and calls the specified action function\n     * for each node.\n     *\n     * @param action - Callback function to be called for each\n     * node.  If it returns true, traversal is aborted.\n     * @returns True if traversal was aborted.\n     */\n    reverseTraversal(action) {\n        return false;\n    }\n    minKey() {\n        return null;\n    }\n    maxKey() {\n        return null;\n    }\n    check_() {\n        return 0;\n    }\n    /**\n     * @returns Whether this node is red.\n     */\n    isRed_() {\n        return false;\n    }\n}\n/**\n * An immutable sorted map implementation, based on a Left-leaning Red-Black\n * tree.\n */\nclass SortedMap {\n    /**\n     * @param comparator_ - Key comparator.\n     * @param root_ - Optional root node for the map.\n     */\n    constructor(comparator_, root_ = SortedMap.EMPTY_NODE) {\n        this.comparator_ = comparator_;\n        this.root_ = root_;\n    }\n    /**\n     * Returns a copy of the map, with the specified key/value added or replaced.\n     * (TODO: We should perhaps rename this method to 'put')\n     *\n     * @param key - Key to be added.\n     * @param value - Value to be added.\n     * @returns New map, with item added.\n     */\n    insert(key, value) {\n        return new SortedMap(this.comparator_, this.root_\n            .insert(key, value, this.comparator_)\n            .copy(null, null, LLRBNode.BLACK, null, null));\n    }\n    /**\n     * Returns a copy of the map, with the specified key removed.\n     *\n     * @param key - The key to remove.\n     * @returns New map, with item removed.\n     */\n    remove(key) {\n        return new SortedMap(this.comparator_, this.root_\n            .remove(key, this.comparator_)\n            .copy(null, null, LLRBNode.BLACK, null, null));\n    }\n    /**\n     * Returns the value of the node with the given key, or null.\n     *\n     * @param key - The key to look up.\n     * @returns The value of the node with the given key, or null if the\n     * key doesn't exist.\n     */\n    get(key) {\n        let cmp;\n        let node = this.root_;\n        while (!node.isEmpty()) {\n            cmp = this.comparator_(key, node.key);\n            if (cmp === 0) {\n                return node.value;\n            }\n            else if (cmp < 0) {\n                node = node.left;\n            }\n            else if (cmp > 0) {\n                node = node.right;\n            }\n        }\n        return null;\n    }\n    /**\n     * Returns the key of the item *before* the specified key, or null if key is the first item.\n     * @param key - The key to find the predecessor of\n     * @returns The predecessor key.\n     */\n    getPredecessorKey(key) {\n        let cmp, node = this.root_, rightParent = null;\n        while (!node.isEmpty()) {\n            cmp = this.comparator_(key, node.key);\n            if (cmp === 0) {\n                if (!node.left.isEmpty()) {\n                    node = node.left;\n                    while (!node.right.isEmpty()) {\n                        node = node.right;\n                    }\n                    return node.key;\n                }\n                else if (rightParent) {\n                    return rightParent.key;\n                }\n                else {\n                    return null; // first item.\n                }\n            }\n            else if (cmp < 0) {\n                node = node.left;\n            }\n            else if (cmp > 0) {\n                rightParent = node;\n                node = node.right;\n            }\n        }\n        throw new Error('Attempted to find predecessor key for a nonexistent key.  What gives?');\n    }\n    /**\n     * @returns True if the map is empty.\n     */\n    isEmpty() {\n        return this.root_.isEmpty();\n    }\n    /**\n     * @returns The total number of nodes in the map.\n     */\n    count() {\n        return this.root_.count();\n    }\n    /**\n     * @returns The minimum key in the map.\n     */\n    minKey() {\n        return this.root_.minKey();\n    }\n    /**\n     * @returns The maximum key in the map.\n     */\n    maxKey() {\n        return this.root_.maxKey();\n    }\n    /**\n     * Traverses the map in key order and calls the specified action function\n     * for each key/value pair.\n     *\n     * @param action - Callback function to be called\n     * for each key/value pair.  If action returns true, traversal is aborted.\n     * @returns The first truthy value returned by action, or the last falsey\n     *   value returned by action\n     */\n    inorderTraversal(action) {\n        return this.root_.inorderTraversal(action);\n    }\n    /**\n     * Traverses the map in reverse key order and calls the specified action function\n     * for each key/value pair.\n     *\n     * @param action - Callback function to be called\n     * for each key/value pair.  If action returns true, traversal is aborted.\n     * @returns True if the traversal was aborted.\n     */\n    reverseTraversal(action) {\n        return this.root_.reverseTraversal(action);\n    }\n    /**\n     * Returns an iterator over the SortedMap.\n     * @returns The iterator.\n     */\n    getIterator(resultGenerator) {\n        return new SortedMapIterator(this.root_, null, this.comparator_, false, resultGenerator);\n    }\n    getIteratorFrom(key, resultGenerator) {\n        return new SortedMapIterator(this.root_, key, this.comparator_, false, resultGenerator);\n    }\n    getReverseIteratorFrom(key, resultGenerator) {\n        return new SortedMapIterator(this.root_, key, this.comparator_, true, resultGenerator);\n    }\n    getReverseIterator(resultGenerator) {\n        return new SortedMapIterator(this.root_, null, this.comparator_, true, resultGenerator);\n    }\n}\n/**\n * Always use the same empty node, to reduce memory.\n */\nSortedMap.EMPTY_NODE = new LLRBEmptyNode();\n\n/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nfunction NAME_ONLY_COMPARATOR(left, right) {\n    return nameCompare(left.name, right.name);\n}\nfunction NAME_COMPARATOR(left, right) {\n    return nameCompare(left, right);\n}\n\n/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nlet MAX_NODE$2;\nfunction setMaxNode$1(val) {\n    MAX_NODE$2 = val;\n}\nconst priorityHashText = function (priority) {\n    if (typeof priority === 'number') {\n        return 'number:' + doubleToIEEE754String(priority);\n    }\n    else {\n        return 'string:' + priority;\n    }\n};\n/**\n * Validates that a priority snapshot Node is valid.\n */\nconst validatePriorityNode = function (priorityNode) {\n    if (priorityNode.isLeafNode()) {\n        const val = priorityNode.val();\n        assert(typeof val === 'string' ||\n            typeof val === 'number' ||\n            (typeof val === 'object' && contains(val, '.sv')), 'Priority must be a string or number.');\n    }\n    else {\n        assert(priorityNode === MAX_NODE$2 || priorityNode.isEmpty(), 'priority of unexpected type.');\n    }\n    // Don't call getPriority() on MAX_NODE to avoid hitting assertion.\n    assert(priorityNode === MAX_NODE$2 || priorityNode.getPriority().isEmpty(), \"Priority nodes can't have a priority of their own.\");\n};\n\n/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nlet __childrenNodeConstructor;\n/**\n * LeafNode is a class for storing leaf nodes in a DataSnapshot.  It\n * implements Node and stores the value of the node (a string,\n * number, or boolean) accessible via getValue().\n */\nclass LeafNode {\n    static set __childrenNodeConstructor(val) {\n        __childrenNodeConstructor = val;\n    }\n    static get __childrenNodeConstructor() {\n        return __childrenNodeConstructor;\n    }\n    /**\n     * @param value_ - The value to store in this leaf node. The object type is\n     * possible in the event of a deferred value\n     * @param priorityNode_ - The priority of this node.\n     */\n    constructor(value_, priorityNode_ = LeafNode.__childrenNodeConstructor.EMPTY_NODE) {\n        this.value_ = value_;\n        this.priorityNode_ = priorityNode_;\n        this.lazyHash_ = null;\n        assert(this.value_ !== undefined && this.value_ !== null, \"LeafNode shouldn't be created with null/undefined value.\");\n        validatePriorityNode(this.priorityNode_);\n    }\n    /** @inheritDoc */\n    isLeafNode() {\n        return true;\n    }\n    /** @inheritDoc */\n    getPriority() {\n        return this.priorityNode_;\n    }\n    /** @inheritDoc */\n    updatePriority(newPriorityNode) {\n        return new LeafNode(this.value_, newPriorityNode);\n    }\n    /** @inheritDoc */\n    getImmediateChild(childName) {\n        // Hack to treat priority as a regular child\n        if (childName === '.priority') {\n            return this.priorityNode_;\n        }\n        else {\n            return LeafNode.__childrenNodeConstructor.EMPTY_NODE;\n        }\n    }\n    /** @inheritDoc */\n    getChild(path) {\n        if (pathIsEmpty(path)) {\n            return this;\n        }\n        else if (pathGetFront(path) === '.priority') {\n            return this.priorityNode_;\n        }\n        else {\n            return LeafNode.__childrenNodeConstructor.EMPTY_NODE;\n        }\n    }\n    hasChild() {\n        return false;\n    }\n    /** @inheritDoc */\n    getPredecessorChildName(childName, childNode) {\n        return null;\n    }\n    /** @inheritDoc */\n    updateImmediateChild(childName, newChildNode) {\n        if (childName === '.priority') {\n            return this.updatePriority(newChildNode);\n        }\n        else if (newChildNode.isEmpty() && childName !== '.priority') {\n            return this;\n        }\n        else {\n            return LeafNode.__childrenNodeConstructor.EMPTY_NODE.updateImmediateChild(childName, newChildNode).updatePriority(this.priorityNode_);\n        }\n    }\n    /** @inheritDoc */\n    updateChild(path, newChildNode) {\n        const front = pathGetFront(path);\n        if (front === null) {\n            return newChildNode;\n        }\n        else if (newChildNode.isEmpty() && front !== '.priority') {\n            return this;\n        }\n        else {\n            assert(front !== '.priority' || pathGetLength(path) === 1, '.priority must be the last token in a path');\n            return this.updateImmediateChild(front, LeafNode.__childrenNodeConstructor.EMPTY_NODE.updateChild(pathPopFront(path), newChildNode));\n        }\n    }\n    /** @inheritDoc */\n    isEmpty() {\n        return false;\n    }\n    /** @inheritDoc */\n    numChildren() {\n        return 0;\n    }\n    /** @inheritDoc */\n    forEachChild(index, action) {\n        return false;\n    }\n    val(exportFormat) {\n        if (exportFormat && !this.getPriority().isEmpty()) {\n            return {\n                '.value': this.getValue(),\n                '.priority': this.getPriority().val()\n            };\n        }\n        else {\n            return this.getValue();\n        }\n    }\n    /** @inheritDoc */\n    hash() {\n        if (this.lazyHash_ === null) {\n            let toHash = '';\n            if (!this.priorityNode_.isEmpty()) {\n                toHash +=\n                    'priority:' +\n                        priorityHashText(this.priorityNode_.val()) +\n                        ':';\n            }\n            const type = typeof this.value_;\n            toHash += type + ':';\n            if (type === 'number') {\n                toHash += doubleToIEEE754String(this.value_);\n            }\n            else {\n                toHash += this.value_;\n            }\n            this.lazyHash_ = sha1(toHash);\n        }\n        return this.lazyHash_;\n    }\n    /**\n     * Returns the value of the leaf node.\n     * @returns The value of the node.\n     */\n    getValue() {\n        return this.value_;\n    }\n    compareTo(other) {\n        if (other === LeafNode.__childrenNodeConstructor.EMPTY_NODE) {\n            return 1;\n        }\n        else if (other instanceof LeafNode.__childrenNodeConstructor) {\n            return -1;\n        }\n        else {\n            assert(other.isLeafNode(), 'Unknown node type');\n            return this.compareToLeafNode_(other);\n        }\n    }\n    /**\n     * Comparison specifically for two leaf nodes\n     */\n    compareToLeafNode_(otherLeaf) {\n        const otherLeafType = typeof otherLeaf.value_;\n        const thisLeafType = typeof this.value_;\n        const otherIndex = LeafNode.VALUE_TYPE_ORDER.indexOf(otherLeafType);\n        const thisIndex = LeafNode.VALUE_TYPE_ORDER.indexOf(thisLeafType);\n        assert(otherIndex >= 0, 'Unknown leaf type: ' + otherLeafType);\n        assert(thisIndex >= 0, 'Unknown leaf type: ' + thisLeafType);\n        if (otherIndex === thisIndex) {\n            // Same type, compare values\n            if (thisLeafType === 'object') {\n                // Deferred value nodes are all equal, but we should also never get to this point...\n                return 0;\n            }\n            else {\n                // Note that this works because true > false, all others are number or string comparisons\n                if (this.value_ < otherLeaf.value_) {\n                    return -1;\n                }\n                else if (this.value_ === otherLeaf.value_) {\n                    return 0;\n                }\n                else {\n                    return 1;\n                }\n            }\n        }\n        else {\n            return thisIndex - otherIndex;\n        }\n    }\n    withIndex() {\n        return this;\n    }\n    isIndexed() {\n        return true;\n    }\n    equals(other) {\n        if (other === this) {\n            return true;\n        }\n        else if (other.isLeafNode()) {\n            const otherLeaf = other;\n            return (this.value_ === otherLeaf.value_ &&\n                this.priorityNode_.equals(otherLeaf.priorityNode_));\n        }\n        else {\n            return false;\n        }\n    }\n}\n/**\n * The sort order for comparing leaf nodes of different types. If two leaf nodes have\n * the same type, the comparison falls back to their value\n */\nLeafNode.VALUE_TYPE_ORDER = ['object', 'boolean', 'number', 'string'];\n\n/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nlet nodeFromJSON$1;\nlet MAX_NODE$1;\nfunction setNodeFromJSON(val) {\n    nodeFromJSON$1 = val;\n}\nfunction setMaxNode(val) {\n    MAX_NODE$1 = val;\n}\nclass PriorityIndex extends Index {\n    compare(a, b) {\n        const aPriority = a.node.getPriority();\n        const bPriority = b.node.getPriority();\n        const indexCmp = aPriority.compareTo(bPriority);\n        if (indexCmp === 0) {\n            return nameCompare(a.name, b.name);\n        }\n        else {\n            return indexCmp;\n        }\n    }\n    isDefinedOn(node) {\n        return !node.getPriority().isEmpty();\n    }\n    indexedValueChanged(oldNode, newNode) {\n        return !oldNode.getPriority().equals(newNode.getPriority());\n    }\n    minPost() {\n        // eslint-disable-next-line @typescript-eslint/no-explicit-any\n        return NamedNode.MIN;\n    }\n    maxPost() {\n        return new NamedNode(MAX_NAME, new LeafNode('[PRIORITY-POST]', MAX_NODE$1));\n    }\n    makePost(indexValue, name) {\n        const priorityNode = nodeFromJSON$1(indexValue);\n        return new NamedNode(name, new LeafNode('[PRIORITY-POST]', priorityNode));\n    }\n    /**\n     * @returns String representation for inclusion in a query spec\n     */\n    toString() {\n        return '.priority';\n    }\n}\nconst PRIORITY_INDEX = new PriorityIndex();\n\n/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nconst LOG_2 = Math.log(2);\nclass Base12Num {\n    constructor(length) {\n        const logBase2 = (num) => \n        // eslint-disable-next-line @typescript-eslint/no-explicit-any\n        parseInt((Math.log(num) / LOG_2), 10);\n        const bitMask = (bits) => parseInt(Array(bits + 1).join('1'), 2);\n        this.count = logBase2(length + 1);\n        this.current_ = this.count - 1;\n        const mask = bitMask(this.count);\n        this.bits_ = (length + 1) & mask;\n    }\n    nextBitIsOne() {\n        //noinspection JSBitwiseOperatorUsage\n        const result = !(this.bits_ & (0x1 << this.current_));\n        this.current_--;\n        return result;\n    }\n}\n/**\n * Takes a list of child nodes and constructs a SortedSet using the given comparison\n * function\n *\n * Uses the algorithm described in the paper linked here:\n * http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.46.1458\n *\n * @param childList - Unsorted list of children\n * @param cmp - The comparison method to be used\n * @param keyFn - An optional function to extract K from a node wrapper, if K's\n * type is not NamedNode\n * @param mapSortFn - An optional override for comparator used by the generated sorted map\n */\nconst buildChildSet = function (childList, cmp, keyFn, mapSortFn) {\n    childList.sort(cmp);\n    const buildBalancedTree = function (low, high) {\n        const length = high - low;\n        let namedNode;\n        let key;\n        if (length === 0) {\n            return null;\n        }\n        else if (length === 1) {\n            namedNode = childList[low];\n            key = keyFn ? keyFn(namedNode) : namedNode;\n            return new LLRBNode(key, namedNode.node, LLRBNode.BLACK, null, null);\n        }\n        else {\n            // eslint-disable-next-line @typescript-eslint/no-explicit-any\n            const middle = parseInt((length / 2), 10) + low;\n            const left = buildBalancedTree(low, middle);\n            const right = buildBalancedTree(middle + 1, high);\n            namedNode = childList[middle];\n            key = keyFn ? keyFn(namedNode) : namedNode;\n            return new LLRBNode(key, namedNode.node, LLRBNode.BLACK, left, right);\n        }\n    };\n    const buildFrom12Array = function (base12) {\n        let node = null;\n        let root = null;\n        let index = childList.length;\n        const buildPennant = function (chunkSize, color) {\n            const low = index - chunkSize;\n            const high = index;\n            index -= chunkSize;\n            const childTree = buildBalancedTree(low + 1, high);\n            const namedNode = childList[low];\n            const key = keyFn ? keyFn(namedNode) : namedNode;\n            attachPennant(new LLRBNode(key, namedNode.node, color, null, childTree));\n        };\n        const attachPennant = function (pennant) {\n            if (node) {\n                node.left = pennant;\n                node = pennant;\n            }\n            else {\n                root = pennant;\n                node = pennant;\n            }\n        };\n        for (let i = 0; i < base12.count; ++i) {\n            const isOne = base12.nextBitIsOne();\n            // The number of nodes taken in each slice is 2^(arr.length - (i + 1))\n            const chunkSize = Math.pow(2, base12.count - (i + 1));\n            if (isOne) {\n                buildPennant(chunkSize, LLRBNode.BLACK);\n            }\n            else {\n                // current == 2\n                buildPennant(chunkSize, LLRBNode.BLACK);\n                buildPennant(chunkSize, LLRBNode.RED);\n            }\n        }\n        return root;\n    };\n    const base12 = new Base12Num(childList.length);\n    const root = buildFrom12Array(base12);\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    return new SortedMap(mapSortFn || cmp, root);\n};\n\n/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nlet _defaultIndexMap;\nconst fallbackObject = {};\nclass IndexMap {\n    /**\n     * The default IndexMap for nodes without a priority\n     */\n    static get Default() {\n        assert(fallbackObject && PRIORITY_INDEX, 'ChildrenNode.ts has not been loaded');\n        _defaultIndexMap =\n            _defaultIndexMap ||\n                new IndexMap({ '.priority': fallbackObject }, { '.priority': PRIORITY_INDEX });\n        return _defaultIndexMap;\n    }\n    constructor(indexes_, indexSet_) {\n        this.indexes_ = indexes_;\n        this.indexSet_ = indexSet_;\n    }\n    get(indexKey) {\n        const sortedMap = safeGet(this.indexes_, indexKey);\n        if (!sortedMap) {\n            throw new Error('No index defined for ' + indexKey);\n        }\n        if (sortedMap instanceof SortedMap) {\n            return sortedMap;\n        }\n        else {\n            // The index exists, but it falls back to just name comparison. Return null so that the calling code uses the\n            // regular child map\n            return null;\n        }\n    }\n    hasIndex(indexDefinition) {\n        return contains(this.indexSet_, indexDefinition.toString());\n    }\n    addIndex(indexDefinition, existingChildren) {\n        assert(indexDefinition !== KEY_INDEX, \"KeyIndex always exists and isn't meant to be added to the IndexMap.\");\n        const childList = [];\n        let sawIndexedValue = false;\n        const iter = existingChildren.getIterator(NamedNode.Wrap);\n        let next = iter.getNext();\n        while (next) {\n            sawIndexedValue =\n                sawIndexedValue || indexDefinition.isDefinedOn(next.node);\n            childList.push(next);\n            next = iter.getNext();\n        }\n        let newIndex;\n        if (sawIndexedValue) {\n            newIndex = buildChildSet(childList, indexDefinition.getCompare());\n        }\n        else {\n            newIndex = fallbackObject;\n        }\n        const indexName = indexDefinition.toString();\n        const newIndexSet = Object.assign({}, this.indexSet_);\n        newIndexSet[indexName] = indexDefinition;\n        const newIndexes = Object.assign({}, this.indexes_);\n        newIndexes[indexName] = newIndex;\n        return new IndexMap(newIndexes, newIndexSet);\n    }\n    /**\n     * Ensure that this node is properly tracked in any indexes that we're maintaining\n     */\n    addToIndexes(namedNode, existingChildren) {\n        const newIndexes = map(this.indexes_, (indexedChildren, indexName) => {\n            const index = safeGet(this.indexSet_, indexName);\n            assert(index, 'Missing index implementation for ' + indexName);\n            if (indexedChildren === fallbackObject) {\n                // Check to see if we need to index everything\n                if (index.isDefinedOn(namedNode.node)) {\n                    // We need to build this index\n                    const childList = [];\n                    const iter = existingChildren.getIterator(NamedNode.Wrap);\n                    let next = iter.getNext();\n                    while (next) {\n                        if (next.name !== namedNode.name) {\n                            childList.push(next);\n                        }\n                        next = iter.getNext();\n                    }\n                    childList.push(namedNode);\n                    return buildChildSet(childList, index.getCompare());\n                }\n                else {\n                    // No change, this remains a fallback\n                    return fallbackObject;\n                }\n            }\n            else {\n                const existingSnap = existingChildren.get(namedNode.name);\n                let newChildren = indexedChildren;\n                if (existingSnap) {\n                    newChildren = newChildren.remove(new NamedNode(namedNode.name, existingSnap));\n                }\n                return newChildren.insert(namedNode, namedNode.node);\n            }\n        });\n        return new IndexMap(newIndexes, this.indexSet_);\n    }\n    /**\n     * Create a new IndexMap instance with the given value removed\n     */\n    removeFromIndexes(namedNode, existingChildren) {\n        const newIndexes = map(this.indexes_, (indexedChildren) => {\n            if (indexedChildren === fallbackObject) {\n                // This is the fallback. Just return it, nothing to do in this case\n                return indexedChildren;\n            }\n            else {\n                const existingSnap = existingChildren.get(namedNode.name);\n                if (existingSnap) {\n                    return indexedChildren.remove(new NamedNode(namedNode.name, existingSnap));\n                }\n                else {\n                    // No record of this child\n                    return indexedChildren;\n                }\n            }\n        });\n        return new IndexMap(newIndexes, this.indexSet_);\n    }\n}\n\n/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n// TODO: For memory savings, don't store priorityNode_ if it's empty.\nlet EMPTY_NODE;\n/**\n * ChildrenNode is a class for storing internal nodes in a DataSnapshot\n * (i.e. nodes with children).  It implements Node and stores the\n * list of children in the children property, sorted by child name.\n */\nclass ChildrenNode {\n    static get EMPTY_NODE() {\n        return (EMPTY_NODE ||\n            (EMPTY_NODE = new ChildrenNode(new SortedMap(NAME_COMPARATOR), null, IndexMap.Default)));\n    }\n    /**\n     * @param children_ - List of children of this node..\n     * @param priorityNode_ - The priority of this node (as a snapshot node).\n     */\n    constructor(children_, priorityNode_, indexMap_) {\n        this.children_ = children_;\n        this.priorityNode_ = priorityNode_;\n        this.indexMap_ = indexMap_;\n        this.lazyHash_ = null;\n        /**\n         * Note: The only reason we allow null priority is for EMPTY_NODE, since we can't use\n         * EMPTY_NODE as the priority of EMPTY_NODE.  We might want to consider making EMPTY_NODE its own\n         * class instead of an empty ChildrenNode.\n         */\n        if (this.priorityNode_) {\n            validatePriorityNode(this.priorityNode_);\n        }\n        if (this.children_.isEmpty()) {\n            assert(!this.priorityNode_ || this.priorityNode_.isEmpty(), 'An empty node cannot have a priority');\n        }\n    }\n    /** @inheritDoc */\n    isLeafNode() {\n        return false;\n    }\n    /** @inheritDoc */\n    getPriority() {\n        return this.priorityNode_ || EMPTY_NODE;\n    }\n    /** @inheritDoc */\n    updatePriority(newPriorityNode) {\n        if (this.children_.isEmpty()) {\n            // Don't allow priorities on empty nodes\n            return this;\n        }\n        else {\n            return new ChildrenNode(this.children_, newPriorityNode, this.indexMap_);\n        }\n    }\n    /** @inheritDoc */\n    getImmediateChild(childName) {\n        // Hack to treat priority as a regular child\n        if (childName === '.priority') {\n            return this.getPriority();\n        }\n        else {\n            const child = this.children_.get(childName);\n            return child === null ? EMPTY_NODE : child;\n        }\n    }\n    /** @inheritDoc */\n    getChild(path) {\n        const front = pathGetFront(path);\n        if (front === null) {\n            return this;\n        }\n        return this.getImmediateChild(front).getChild(pathPopFront(path));\n    }\n    /** @inheritDoc */\n    hasChild(childName) {\n        return this.children_.get(childName) !== null;\n    }\n    /** @inheritDoc */\n    updateImmediateChild(childName, newChildNode) {\n        assert(newChildNode, 'We should always be passing snapshot nodes');\n        if (childName === '.priority') {\n            return this.updatePriority(newChildNode);\n        }\n        else {\n            const namedNode = new NamedNode(childName, newChildNode);\n            let newChildren, newIndexMap;\n            if (newChildNode.isEmpty()) {\n                newChildren = this.children_.remove(childName);\n                newIndexMap = this.indexMap_.removeFromIndexes(namedNode, this.children_);\n            }\n            else {\n                newChildren = this.children_.insert(childName, newChildNode);\n                newIndexMap = this.indexMap_.addToIndexes(namedNode, this.children_);\n            }\n            const newPriority = newChildren.isEmpty()\n                ? EMPTY_NODE\n                : this.priorityNode_;\n            return new ChildrenNode(newChildren, newPriority, newIndexMap);\n        }\n    }\n    /** @inheritDoc */\n    updateChild(path, newChildNode) {\n        const front = pathGetFront(path);\n        if (front === null) {\n            return newChildNode;\n        }\n        else {\n            assert(pathGetFront(path) !== '.priority' || pathGetLength(path) === 1, '.priority must be the last token in a path');\n            const newImmediateChild = this.getImmediateChild(front).updateChild(pathPopFront(path), newChildNode);\n            return this.updateImmediateChild(front, newImmediateChild);\n        }\n    }\n    /** @inheritDoc */\n    isEmpty() {\n        return this.children_.isEmpty();\n    }\n    /** @inheritDoc */\n    numChildren() {\n        return this.children_.count();\n    }\n    /** @inheritDoc */\n    val(exportFormat) {\n        if (this.isEmpty()) {\n            return null;\n        }\n        const obj = {};\n        let numKeys = 0, maxKey = 0, allIntegerKeys = true;\n        this.forEachChild(PRIORITY_INDEX, (key, childNode) => {\n            obj[key] = childNode.val(exportFormat);\n            numKeys++;\n            if (allIntegerKeys && ChildrenNode.INTEGER_REGEXP_.test(key)) {\n                maxKey = Math.max(maxKey, Number(key));\n            }\n            else {\n                allIntegerKeys = false;\n            }\n        });\n        if (!exportFormat && allIntegerKeys && maxKey < 2 * numKeys) {\n            // convert to array.\n            const array = [];\n            // eslint-disable-next-line guard-for-in\n            for (const key in obj) {\n                array[key] = obj[key];\n            }\n            return array;\n        }\n        else {\n            if (exportFormat && !this.getPriority().isEmpty()) {\n                obj['.priority'] = this.getPriority().val();\n            }\n            return obj;\n        }\n    }\n    /** @inheritDoc */\n    hash() {\n        if (this.lazyHash_ === null) {\n            let toHash = '';\n            if (!this.getPriority().isEmpty()) {\n                toHash +=\n                    'priority:' +\n                        priorityHashText(this.getPriority().val()) +\n                        ':';\n            }\n            this.forEachChild(PRIORITY_INDEX, (key, childNode) => {\n                const childHash = childNode.hash();\n                if (childHash !== '') {\n                    toHash += ':' + key + ':' + childHash;\n                }\n            });\n            this.lazyHash_ = toHash === '' ? '' : sha1(toHash);\n        }\n        return this.lazyHash_;\n    }\n    /** @inheritDoc */\n    getPredecessorChildName(childName, childNode, index) {\n        const idx = this.resolveIndex_(index);\n        if (idx) {\n            const predecessor = idx.getPredecessorKey(new NamedNode(childName, childNode));\n            return predecessor ? predecessor.name : null;\n        }\n        else {\n            return this.children_.getPredecessorKey(childName);\n        }\n    }\n    getFirstChildName(indexDefinition) {\n        const idx = this.resolveIndex_(indexDefinition);\n        if (idx) {\n            const minKey = idx.minKey();\n            return minKey && minKey.name;\n        }\n        else {\n            return this.children_.minKey();\n        }\n    }\n    getFirstChild(indexDefinition) {\n        const minKey = this.getFirstChildName(indexDefinition);\n        if (minKey) {\n            return new NamedNode(minKey, this.children_.get(minKey));\n        }\n        else {\n            return null;\n        }\n    }\n    /**\n     * Given an index, return the key name of the largest value we have, according to that index\n     */\n    getLastChildName(indexDefinition) {\n        const idx = this.resolveIndex_(indexDefinition);\n        if (idx) {\n            const maxKey = idx.maxKey();\n            return maxKey && maxKey.name;\n        }\n        else {\n            return this.children_.maxKey();\n        }\n    }\n    getLastChild(indexDefinition) {\n        const maxKey = this.getLastChildName(indexDefinition);\n        if (maxKey) {\n            return new NamedNode(maxKey, this.children_.get(maxKey));\n        }\n        else {\n            return null;\n        }\n    }\n    forEachChild(index, action) {\n        const idx = this.resolveIndex_(index);\n        if (idx) {\n            return idx.inorderTraversal(wrappedNode => {\n                return action(wrappedNode.name, wrappedNode.node);\n            });\n        }\n        else {\n            return this.children_.inorderTraversal(action);\n        }\n    }\n    getIterator(indexDefinition) {\n        return this.getIteratorFrom(indexDefinition.minPost(), indexDefinition);\n    }\n    getIteratorFrom(startPost, indexDefinition) {\n        const idx = this.resolveIndex_(indexDefinition);\n        if (idx) {\n            return idx.getIteratorFrom(startPost, key => key);\n        }\n        else {\n            const iterator = this.children_.getIteratorFrom(startPost.name, NamedNode.Wrap);\n            let next = iterator.peek();\n            while (next != null && indexDefinition.compare(next, startPost) < 0) {\n                iterator.getNext();\n                next = iterator.peek();\n            }\n            return iterator;\n        }\n    }\n    getReverseIterator(indexDefinition) {\n        return this.getReverseIteratorFrom(indexDefinition.maxPost(), indexDefinition);\n    }\n    getReverseIteratorFrom(endPost, indexDefinition) {\n        const idx = this.resolveIndex_(indexDefinition);\n        if (idx) {\n            return idx.getReverseIteratorFrom(endPost, key => {\n                return key;\n            });\n        }\n        else {\n            const iterator = this.children_.getReverseIteratorFrom(endPost.name, NamedNode.Wrap);\n            let next = iterator.peek();\n            while (next != null && indexDefinition.compare(next, endPost) > 0) {\n                iterator.getNext();\n                next = iterator.peek();\n            }\n            return iterator;\n        }\n    }\n    compareTo(other) {\n        if (this.isEmpty()) {\n            if (other.isEmpty()) {\n                return 0;\n            }\n            else {\n                return -1;\n            }\n        }\n        else if (other.isLeafNode() || other.isEmpty()) {\n            return 1;\n        }\n        else if (other === MAX_NODE) {\n            return -1;\n        }\n        else {\n            // Must be another node with children.\n            return 0;\n        }\n    }\n    withIndex(indexDefinition) {\n        if (indexDefinition === KEY_INDEX ||\n            this.indexMap_.hasIndex(indexDefinition)) {\n            return this;\n        }\n        else {\n            const newIndexMap = this.indexMap_.addIndex(indexDefinition, this.children_);\n            return new ChildrenNode(this.children_, this.priorityNode_, newIndexMap);\n        }\n    }\n    isIndexed(index) {\n        return index === KEY_INDEX || this.indexMap_.hasIndex(index);\n    }\n    equals(other) {\n        if (other === this) {\n            return true;\n        }\n        else if (other.isLeafNode()) {\n            return false;\n        }\n        else {\n            const otherChildrenNode = other;\n            if (!this.getPriority().equals(otherChildrenNode.getPriority())) {\n                return false;\n            }\n            else if (this.children_.count() === otherChildrenNode.children_.count()) {\n                const thisIter = this.getIterator(PRIORITY_INDEX);\n                const otherIter = otherChildrenNode.getIterator(PRIORITY_INDEX);\n                let thisCurrent = thisIter.getNext();\n                let otherCurrent = otherIter.getNext();\n                while (thisCurrent && otherCurrent) {\n                    if (thisCurrent.name !== otherCurrent.name ||\n                        !thisCurrent.node.equals(otherCurrent.node)) {\n                        return false;\n                    }\n                    thisCurrent = thisIter.getNext();\n                    otherCurrent = otherIter.getNext();\n                }\n                return thisCurrent === null && otherCurrent === null;\n            }\n            else {\n                return false;\n            }\n        }\n    }\n    /**\n     * Returns a SortedMap ordered by index, or null if the default (by-key) ordering can be used\n     * instead.\n     *\n     */\n    resolveIndex_(indexDefinition) {\n        if (indexDefinition === KEY_INDEX) {\n            return null;\n        }\n        else {\n            return this.indexMap_.get(indexDefinition.toString());\n        }\n    }\n}\nChildrenNode.INTEGER_REGEXP_ = /^(0|[1-9]\\d*)$/;\nclass MaxNode extends ChildrenNode {\n    constructor() {\n        super(new SortedMap(NAME_COMPARATOR), ChildrenNode.EMPTY_NODE, IndexMap.Default);\n    }\n    compareTo(other) {\n        if (other === this) {\n            return 0;\n        }\n        else {\n            return 1;\n        }\n    }\n    equals(other) {\n        // Not that we every compare it, but MAX_NODE is only ever equal to itself\n        return other === this;\n    }\n    getPriority() {\n        return this;\n    }\n    getImmediateChild(childName) {\n        return ChildrenNode.EMPTY_NODE;\n    }\n    isEmpty() {\n        return false;\n    }\n}\n/**\n * Marker that will sort higher than any other snapshot.\n */\nconst MAX_NODE = new MaxNode();\nObject.defineProperties(NamedNode, {\n    MIN: {\n        value: new NamedNode(MIN_NAME, ChildrenNode.EMPTY_NODE)\n    },\n    MAX: {\n        value: new NamedNode(MAX_NAME, MAX_NODE)\n    }\n});\n/**\n * Reference Extensions\n */\nKeyIndex.__EMPTY_NODE = ChildrenNode.EMPTY_NODE;\nLeafNode.__childrenNodeConstructor = ChildrenNode;\nsetMaxNode$1(MAX_NODE);\nsetMaxNode(MAX_NODE);\n\n/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nconst USE_HINZE = true;\n/**\n * Constructs a snapshot node representing the passed JSON and returns it.\n * @param json - JSON to create a node for.\n * @param priority - Optional priority to use.  This will be ignored if the\n * passed JSON contains a .priority property.\n */\nfunction nodeFromJSON(json, priority = null) {\n    if (json === null) {\n        return ChildrenNode.EMPTY_NODE;\n    }\n    if (typeof json === 'object' && '.priority' in json) {\n        priority = json['.priority'];\n    }\n    assert(priority === null ||\n        typeof priority === 'string' ||\n        typeof priority === 'number' ||\n        (typeof priority === 'object' && '.sv' in priority), 'Invalid priority type found: ' + typeof priority);\n    if (typeof json === 'object' && '.value' in json && json['.value'] !== null) {\n        json = json['.value'];\n    }\n    // Valid leaf nodes include non-objects or server-value wrapper objects\n    if (typeof json !== 'object' || '.sv' in json) {\n        const jsonLeaf = json;\n        return new LeafNode(jsonLeaf, nodeFromJSON(priority));\n    }\n    if (!(json instanceof Array) && USE_HINZE) {\n        const children = [];\n        let childrenHavePriority = false;\n        const hinzeJsonObj = json;\n        each(hinzeJsonObj, (key, child) => {\n            if (key.substring(0, 1) !== '.') {\n                // Ignore metadata nodes\n                const childNode = nodeFromJSON(child);\n                if (!childNode.isEmpty()) {\n                    childrenHavePriority =\n                        childrenHavePriority || !childNode.getPriority().isEmpty();\n                    children.push(new NamedNode(key, childNode));\n                }\n            }\n        });\n        if (children.length === 0) {\n            return ChildrenNode.EMPTY_NODE;\n        }\n        const childSet = buildChildSet(children, NAME_ONLY_COMPARATOR, namedNode => namedNode.name, NAME_COMPARATOR);\n        if (childrenHavePriority) {\n            const sortedChildSet = buildChildSet(children, PRIORITY_INDEX.getCompare());\n            return new ChildrenNode(childSet, nodeFromJSON(priority), new IndexMap({ '.priority': sortedChildSet }, { '.priority': PRIORITY_INDEX }));\n        }\n        else {\n            return new ChildrenNode(childSet, nodeFromJSON(priority), IndexMap.Default);\n        }\n    }\n    else {\n        let node = ChildrenNode.EMPTY_NODE;\n        each(json, (key, childData) => {\n            if (contains(json, key)) {\n                if (key.substring(0, 1) !== '.') {\n                    // ignore metadata nodes.\n                    const childNode = nodeFromJSON(childData);\n                    if (childNode.isLeafNode() || !childNode.isEmpty()) {\n                        node = node.updateImmediateChild(key, childNode);\n                    }\n                }\n            }\n        });\n        return node.updatePriority(nodeFromJSON(priority));\n    }\n}\nsetNodeFromJSON(nodeFromJSON);\n\n/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nclass PathIndex extends Index {\n    constructor(indexPath_) {\n        super();\n        this.indexPath_ = indexPath_;\n        assert(!pathIsEmpty(indexPath_) && pathGetFront(indexPath_) !== '.priority', \"Can't create PathIndex with empty path or .priority key\");\n    }\n    extractChild(snap) {\n        return snap.getChild(this.indexPath_);\n    }\n    isDefinedOn(node) {\n        return !node.getChild(this.indexPath_).isEmpty();\n    }\n    compare(a, b) {\n        const aChild = this.extractChild(a.node);\n        const bChild = this.extractChild(b.node);\n        const indexCmp = aChild.compareTo(bChild);\n        if (indexCmp === 0) {\n            return nameCompare(a.name, b.name);\n        }\n        else {\n            return indexCmp;\n        }\n    }\n    makePost(indexValue, name) {\n        const valueNode = nodeFromJSON(indexValue);\n        const node = ChildrenNode.EMPTY_NODE.updateChild(this.indexPath_, valueNode);\n        return new NamedNode(name, node);\n    }\n    maxPost() {\n        const node = ChildrenNode.EMPTY_NODE.updateChild(this.indexPath_, MAX_NODE);\n        return new NamedNode(MAX_NAME, node);\n    }\n    toString() {\n        return pathSlice(this.indexPath_, 0).join('/');\n    }\n}\n\n/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nclass ValueIndex extends Index {\n    compare(a, b) {\n        const indexCmp = a.node.compareTo(b.node);\n        if (indexCmp === 0) {\n            return nameCompare(a.name, b.name);\n        }\n        else {\n            return indexCmp;\n        }\n    }\n    isDefinedOn(node) {\n        return true;\n    }\n    indexedValueChanged(oldNode, newNode) {\n        return !oldNode.equals(newNode);\n    }\n    minPost() {\n        // eslint-disable-next-line @typescript-eslint/no-explicit-any\n        return NamedNode.MIN;\n    }\n    maxPost() {\n        // eslint-disable-next-line @typescript-eslint/no-explicit-any\n        return NamedNode.MAX;\n    }\n    makePost(indexValue, name) {\n        const valueNode = nodeFromJSON(indexValue);\n        return new NamedNode(name, valueNode);\n    }\n    /**\n     * @returns String representation for inclusion in a query spec\n     */\n    toString() {\n        return '.value';\n    }\n}\nconst VALUE_INDEX = new ValueIndex();\n\n/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nfunction changeValue(snapshotNode) {\n    return { type: \"value\" /* ChangeType.VALUE */, snapshotNode };\n}\nfunction changeChildAdded(childName, snapshotNode) {\n    return { type: \"child_added\" /* ChangeType.CHILD_ADDED */, snapshotNode, childName };\n}\nfunction changeChildRemoved(childName, snapshotNode) {\n    return { type: \"child_removed\" /* ChangeType.CHILD_REMOVED */, snapshotNode, childName };\n}\nfunction changeChildChanged(childName, snapshotNode, oldSnap) {\n    return {\n        type: \"child_changed\" /* ChangeType.CHILD_CHANGED */,\n        snapshotNode,\n        childName,\n        oldSnap\n    };\n}\nfunction changeChildMoved(childName, snapshotNode) {\n    return { type: \"child_moved\" /* ChangeType.CHILD_MOVED */, snapshotNode, childName };\n}\n\n/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Doesn't really filter nodes but applies an index to the node and keeps track of any changes\n */\nclass IndexedFilter {\n    constructor(index_) {\n        this.index_ = index_;\n    }\n    updateChild(snap, key, newChild, affectedPath, source, optChangeAccumulator) {\n        assert(snap.isIndexed(this.index_), 'A node must be indexed if only a child is updated');\n        const oldChild = snap.getImmediateChild(key);\n        // Check if anything actually changed.\n        if (oldChild.getChild(affectedPath).equals(newChild.getChild(affectedPath))) {\n            // There's an edge case where a child can enter or leave the view because affectedPath was set to null.\n            // In this case, affectedPath will appear null in both the old and new snapshots.  So we need\n            // to avoid treating these cases as \"nothing changed.\"\n            if (oldChild.isEmpty() === newChild.isEmpty()) {\n                // Nothing changed.\n                // This assert should be valid, but it's expensive (can dominate perf testing) so don't actually do it.\n                //assert(oldChild.equals(newChild), 'Old and new snapshots should be equal.');\n                return snap;\n            }\n        }\n        if (optChangeAccumulator != null) {\n            if (newChild.isEmpty()) {\n                if (snap.hasChild(key)) {\n                    optChangeAccumulator.trackChildChange(changeChildRemoved(key, oldChild));\n                }\n                else {\n                    assert(snap.isLeafNode(), 'A child remove without an old child only makes sense on a leaf node');\n                }\n            }\n            else if (oldChild.isEmpty()) {\n                optChangeAccumulator.trackChildChange(changeChildAdded(key, newChild));\n            }\n            else {\n                optChangeAccumulator.trackChildChange(changeChildChanged(key, newChild, oldChild));\n            }\n        }\n        if (snap.isLeafNode() && newChild.isEmpty()) {\n            return snap;\n        }\n        else {\n            // Make sure the node is indexed\n            return snap.updateImmediateChild(key, newChild).withIndex(this.index_);\n        }\n    }\n    updateFullNode(oldSnap, newSnap, optChangeAccumulator) {\n        if (optChangeAccumulator != null) {\n            if (!oldSnap.isLeafNode()) {\n                oldSnap.forEachChild(PRIORITY_INDEX, (key, childNode) => {\n                    if (!newSnap.hasChild(key)) {\n                        optChangeAccumulator.trackChildChange(changeChildRemoved(key, childNode));\n                    }\n                });\n            }\n            if (!newSnap.isLeafNode()) {\n                newSnap.forEachChild(PRIORITY_INDEX, (key, childNode) => {\n                    if (oldSnap.hasChild(key)) {\n                        const oldChild = oldSnap.getImmediateChild(key);\n                        if (!oldChild.equals(childNode)) {\n                            optChangeAccumulator.trackChildChange(changeChildChanged(key, childNode, oldChild));\n                        }\n                    }\n                    else {\n                        optChangeAccumulator.trackChildChange(changeChildAdded(key, childNode));\n                    }\n                });\n            }\n        }\n        return newSnap.withIndex(this.index_);\n    }\n    updatePriority(oldSnap, newPriority) {\n        if (oldSnap.isEmpty()) {\n            return ChildrenNode.EMPTY_NODE;\n        }\n        else {\n            return oldSnap.updatePriority(newPriority);\n        }\n    }\n    filtersNodes() {\n        return false;\n    }\n    getIndexedFilter() {\n        return this;\n    }\n    getIndex() {\n        return this.index_;\n    }\n}\n\n/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Filters nodes by range and uses an IndexFilter to track any changes after filtering the node\n */\nclass RangedFilter {\n    constructor(params) {\n        this.indexedFilter_ = new IndexedFilter(params.getIndex());\n        this.index_ = params.getIndex();\n        this.startPost_ = RangedFilter.getStartPost_(params);\n        this.endPost_ = RangedFilter.getEndPost_(params);\n        this.startIsInclusive_ = !params.startAfterSet_;\n        this.endIsInclusive_ = !params.endBeforeSet_;\n    }\n    getStartPost() {\n        return this.startPost_;\n    }\n    getEndPost() {\n        return this.endPost_;\n    }\n    matches(node) {\n        const isWithinStart = this.startIsInclusive_\n            ? this.index_.compare(this.getStartPost(), node) <= 0\n            : this.index_.compare(this.getStartPost(), node) < 0;\n        const isWithinEnd = this.endIsInclusive_\n            ? this.index_.compare(node, this.getEndPost()) <= 0\n            : this.index_.compare(node, this.getEndPost()) < 0;\n        return isWithinStart && isWithinEnd;\n    }\n    updateChild(snap, key, newChild, affectedPath, source, optChangeAccumulator) {\n        if (!this.matches(new NamedNode(key, newChild))) {\n            newChild = ChildrenNode.EMPTY_NODE;\n        }\n        return this.indexedFilter_.updateChild(snap, key, newChild, affectedPath, source, optChangeAccumulator);\n    }\n    updateFullNode(oldSnap, newSnap, optChangeAccumulator) {\n        if (newSnap.isLeafNode()) {\n            // Make sure we have a children node with the correct index, not a leaf node;\n            newSnap = ChildrenNode.EMPTY_NODE;\n        }\n        let filtered = newSnap.withIndex(this.index_);\n        // Don't support priorities on queries\n        filtered = filtered.updatePriority(ChildrenNode.EMPTY_NODE);\n        const self = this;\n        newSnap.forEachChild(PRIORITY_INDEX, (key, childNode) => {\n            if (!self.matches(new NamedNode(key, childNode))) {\n                filtered = filtered.updateImmediateChild(key, ChildrenNode.EMPTY_NODE);\n            }\n        });\n        return this.indexedFilter_.updateFullNode(oldSnap, filtered, optChangeAccumulator);\n    }\n    updatePriority(oldSnap, newPriority) {\n        // Don't support priorities on queries\n        return oldSnap;\n    }\n    filtersNodes() {\n        return true;\n    }\n    getIndexedFilter() {\n        return this.indexedFilter_;\n    }\n    getIndex() {\n        return this.index_;\n    }\n    static getStartPost_(params) {\n        if (params.hasStart()) {\n            const startName = params.getIndexStartName();\n            return params.getIndex().makePost(params.getIndexStartValue(), startName);\n        }\n        else {\n            return params.getIndex().minPost();\n        }\n    }\n    static getEndPost_(params) {\n        if (params.hasEnd()) {\n            const endName = params.getIndexEndName();\n            return params.getIndex().makePost(params.getIndexEndValue(), endName);\n        }\n        else {\n            return params.getIndex().maxPost();\n        }\n    }\n}\n\n/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Applies a limit and a range to a node and uses RangedFilter to do the heavy lifting where possible\n */\nclass LimitedFilter {\n    constructor(params) {\n        this.withinDirectionalStart = (node) => this.reverse_ ? this.withinEndPost(node) : this.withinStartPost(node);\n        this.withinDirectionalEnd = (node) => this.reverse_ ? this.withinStartPost(node) : this.withinEndPost(node);\n        this.withinStartPost = (node) => {\n            const compareRes = this.index_.compare(this.rangedFilter_.getStartPost(), node);\n            return this.startIsInclusive_ ? compareRes <= 0 : compareRes < 0;\n        };\n        this.withinEndPost = (node) => {\n            const compareRes = this.index_.compare(node, this.rangedFilter_.getEndPost());\n            return this.endIsInclusive_ ? compareRes <= 0 : compareRes < 0;\n        };\n        this.rangedFilter_ = new RangedFilter(params);\n        this.index_ = params.getIndex();\n        this.limit_ = params.getLimit();\n        this.reverse_ = !params.isViewFromLeft();\n        this.startIsInclusive_ = !params.startAfterSet_;\n        this.endIsInclusive_ = !params.endBeforeSet_;\n    }\n    updateChild(snap, key, newChild, affectedPath, source, optChangeAccumulator) {\n        if (!this.rangedFilter_.matches(new NamedNode(key, newChild))) {\n            newChild = ChildrenNode.EMPTY_NODE;\n        }\n        if (snap.getImmediateChild(key).equals(newChild)) {\n            // No change\n            return snap;\n        }\n        else if (snap.numChildren() < this.limit_) {\n            return this.rangedFilter_\n                .getIndexedFilter()\n                .updateChild(snap, key, newChild, affectedPath, source, optChangeAccumulator);\n        }\n        else {\n            return this.fullLimitUpdateChild_(snap, key, newChild, source, optChangeAccumulator);\n        }\n    }\n    updateFullNode(oldSnap, newSnap, optChangeAccumulator) {\n        let filtered;\n        if (newSnap.isLeafNode() || newSnap.isEmpty()) {\n            // Make sure we have a children node with the correct index, not a leaf node;\n            filtered = ChildrenNode.EMPTY_NODE.withIndex(this.index_);\n        }\n        else {\n            if (this.limit_ * 2 < newSnap.numChildren() &&\n                newSnap.isIndexed(this.index_)) {\n                // Easier to build up a snapshot, since what we're given has more than twice the elements we want\n                filtered = ChildrenNode.EMPTY_NODE.withIndex(this.index_);\n                // anchor to the startPost, endPost, or last element as appropriate\n                let iterator;\n                if (this.reverse_) {\n                    iterator = newSnap.getReverseIteratorFrom(this.rangedFilter_.getEndPost(), this.index_);\n                }\n                else {\n                    iterator = newSnap.getIteratorFrom(this.rangedFilter_.getStartPost(), this.index_);\n                }\n                let count = 0;\n                while (iterator.hasNext() && count < this.limit_) {\n                    const next = iterator.getNext();\n                    if (!this.withinDirectionalStart(next)) {\n                        // if we have not reached the start, skip to the next element\n                        continue;\n                    }\n                    else if (!this.withinDirectionalEnd(next)) {\n                        // if we have reached the end, stop adding elements\n                        break;\n                    }\n                    else {\n                        filtered = filtered.updateImmediateChild(next.name, next.node);\n                        count++;\n                    }\n                }\n            }\n            else {\n                // The snap contains less than twice the limit. Faster to delete from the snap than build up a new one\n                filtered = newSnap.withIndex(this.index_);\n                // Don't support priorities on queries\n                filtered = filtered.updatePriority(ChildrenNode.EMPTY_NODE);\n                let iterator;\n                if (this.reverse_) {\n                    iterator = filtered.getReverseIterator(this.index_);\n                }\n                else {\n                    iterator = filtered.getIterator(this.index_);\n                }\n                let count = 0;\n                while (iterator.hasNext()) {\n                    const next = iterator.getNext();\n                    const inRange = count < this.limit_ &&\n                        this.withinDirectionalStart(next) &&\n                        this.withinDirectionalEnd(next);\n                    if (inRange) {\n                        count++;\n                    }\n                    else {\n                        filtered = filtered.updateImmediateChild(next.name, ChildrenNode.EMPTY_NODE);\n                    }\n                }\n            }\n        }\n        return this.rangedFilter_\n            .getIndexedFilter()\n            .updateFullNode(oldSnap, filtered, optChangeAccumulator);\n    }\n    updatePriority(oldSnap, newPriority) {\n        // Don't support priorities on queries\n        return oldSnap;\n    }\n    filtersNodes() {\n        return true;\n    }\n    getIndexedFilter() {\n        return this.rangedFilter_.getIndexedFilter();\n    }\n    getIndex() {\n        return this.index_;\n    }\n    fullLimitUpdateChild_(snap, childKey, childSnap, source, changeAccumulator) {\n        // TODO: rename all cache stuff etc to general snap terminology\n        let cmp;\n        if (this.reverse_) {\n            const indexCmp = this.index_.getCompare();\n            cmp = (a, b) => indexCmp(b, a);\n        }\n        else {\n            cmp = this.index_.getCompare();\n        }\n        const oldEventCache = snap;\n        assert(oldEventCache.numChildren() === this.limit_, '');\n        const newChildNamedNode = new NamedNode(childKey, childSnap);\n        const windowBoundary = this.reverse_\n            ? oldEventCache.getFirstChild(this.index_)\n            : oldEventCache.getLastChild(this.index_);\n        const inRange = this.rangedFilter_.matches(newChildNamedNode);\n        if (oldEventCache.hasChild(childKey)) {\n            const oldChildSnap = oldEventCache.getImmediateChild(childKey);\n            let nextChild = source.getChildAfterChild(this.index_, windowBoundary, this.reverse_);\n            while (nextChild != null &&\n                (nextChild.name === childKey || oldEventCache.hasChild(nextChild.name))) {\n                // There is a weird edge case where a node is updated as part of a merge in the write tree, but hasn't\n                // been applied to the limited filter yet. Ignore this next child which will be updated later in\n                // the limited filter...\n                nextChild = source.getChildAfterChild(this.index_, nextChild, this.reverse_);\n            }\n            const compareNext = nextChild == null ? 1 : cmp(nextChild, newChildNamedNode);\n            const remainsInWindow = inRange && !childSnap.isEmpty() && compareNext >= 0;\n            if (remainsInWindow) {\n                if (changeAccumulator != null) {\n                    changeAccumulator.trackChildChange(changeChildChanged(childKey, childSnap, oldChildSnap));\n                }\n                return oldEventCache.updateImmediateChild(childKey, childSnap);\n            }\n            else {\n                if (changeAccumulator != null) {\n                    changeAccumulator.trackChildChange(changeChildRemoved(childKey, oldChildSnap));\n                }\n                const newEventCache = oldEventCache.updateImmediateChild(childKey, ChildrenNode.EMPTY_NODE);\n                const nextChildInRange = nextChild != null && this.rangedFilter_.matches(nextChild);\n                if (nextChildInRange) {\n                    if (changeAccumulator != null) {\n                        changeAccumulator.trackChildChange(changeChildAdded(nextChild.name, nextChild.node));\n                    }\n                    return newEventCache.updateImmediateChild(nextChild.name, nextChild.node);\n                }\n                else {\n                    return newEventCache;\n                }\n            }\n        }\n        else if (childSnap.isEmpty()) {\n            // we're deleting a node, but it was not in the window, so ignore it\n            return snap;\n        }\n        else if (inRange) {\n            if (cmp(windowBoundary, newChildNamedNode) >= 0) {\n                if (changeAccumulator != null) {\n                    changeAccumulator.trackChildChange(changeChildRemoved(windowBoundary.name, windowBoundary.node));\n                    changeAccumulator.trackChildChange(changeChildAdded(childKey, childSnap));\n                }\n                return oldEventCache\n                    .updateImmediateChild(childKey, childSnap)\n                    .updateImmediateChild(windowBoundary.name, ChildrenNode.EMPTY_NODE);\n            }\n            else {\n                return snap;\n            }\n        }\n        else {\n            return snap;\n        }\n    }\n}\n\n/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * This class is an immutable-from-the-public-api struct containing a set of query parameters defining a\n * range to be returned for a particular location. It is assumed that validation of parameters is done at the\n * user-facing API level, so it is not done here.\n *\n * @internal\n */\nclass QueryParams {\n    constructor() {\n        this.limitSet_ = false;\n        this.startSet_ = false;\n        this.startNameSet_ = false;\n        this.startAfterSet_ = false; // can only be true if startSet_ is true\n        this.endSet_ = false;\n        this.endNameSet_ = false;\n        this.endBeforeSet_ = false; // can only be true if endSet_ is true\n        this.limit_ = 0;\n        this.viewFrom_ = '';\n        this.indexStartValue_ = null;\n        this.indexStartName_ = '';\n        this.indexEndValue_ = null;\n        this.indexEndName_ = '';\n        this.index_ = PRIORITY_INDEX;\n    }\n    hasStart() {\n        return this.startSet_;\n    }\n    /**\n     * @returns True if it would return from left.\n     */\n    isViewFromLeft() {\n        if (this.viewFrom_ === '') {\n            // limit(), rather than limitToFirst or limitToLast was called.\n            // This means that only one of startSet_ and endSet_ is true. Use them\n            // to calculate which side of the view to anchor to. If neither is set,\n            // anchor to the end.\n            return this.startSet_;\n        }\n        else {\n            return this.viewFrom_ === \"l\" /* WIRE_PROTOCOL_CONSTANTS.VIEW_FROM_LEFT */;\n        }\n    }\n    /**\n     * Only valid to call if hasStart() returns true\n     */\n    getIndexStartValue() {\n        assert(this.startSet_, 'Only valid if start has been set');\n        return this.indexStartValue_;\n    }\n    /**\n     * Only valid to call if hasStart() returns true.\n     * Returns the starting key name for the range defined by these query parameters\n     */\n    getIndexStartName() {\n        assert(this.startSet_, 'Only valid if start has been set');\n        if (this.startNameSet_) {\n            return this.indexStartName_;\n        }\n        else {\n            return MIN_NAME;\n        }\n    }\n    hasEnd() {\n        return this.endSet_;\n    }\n    /**\n     * Only valid to call if hasEnd() returns true.\n     */\n    getIndexEndValue() {\n        assert(this.endSet_, 'Only valid if end has been set');\n        return this.indexEndValue_;\n    }\n    /**\n     * Only valid to call if hasEnd() returns true.\n     * Returns the end key name for the range defined by these query parameters\n     */\n    getIndexEndName() {\n        assert(this.endSet_, 'Only valid if end has been set');\n        if (this.endNameSet_) {\n            return this.indexEndName_;\n        }\n        else {\n            return MAX_NAME;\n        }\n    }\n    hasLimit() {\n        return this.limitSet_;\n    }\n    /**\n     * @returns True if a limit has been set and it has been explicitly anchored\n     */\n    hasAnchoredLimit() {\n        return this.limitSet_ && this.viewFrom_ !== '';\n    }\n    /**\n     * Only valid to call if hasLimit() returns true\n     */\n    getLimit() {\n        assert(this.limitSet_, 'Only valid if limit has been set');\n        return this.limit_;\n    }\n    getIndex() {\n        return this.index_;\n    }\n    loadsAllData() {\n        return !(this.startSet_ || this.endSet_ || this.limitSet_);\n    }\n    isDefault() {\n        return this.loadsAllData() && this.index_ === PRIORITY_INDEX;\n    }\n    copy() {\n        const copy = new QueryParams();\n        copy.limitSet_ = this.limitSet_;\n        copy.limit_ = this.limit_;\n        copy.startSet_ = this.startSet_;\n        copy.startAfterSet_ = this.startAfterSet_;\n        copy.indexStartValue_ = this.indexStartValue_;\n        copy.startNameSet_ = this.startNameSet_;\n        copy.indexStartName_ = this.indexStartName_;\n        copy.endSet_ = this.endSet_;\n        copy.endBeforeSet_ = this.endBeforeSet_;\n        copy.indexEndValue_ = this.indexEndValue_;\n        copy.endNameSet_ = this.endNameSet_;\n        copy.indexEndName_ = this.indexEndName_;\n        copy.index_ = this.index_;\n        copy.viewFrom_ = this.viewFrom_;\n        return copy;\n    }\n}\nfunction queryParamsGetNodeFilter(queryParams) {\n    if (queryParams.loadsAllData()) {\n        return new IndexedFilter(queryParams.getIndex());\n    }\n    else if (queryParams.hasLimit()) {\n        return new LimitedFilter(queryParams);\n    }\n    else {\n        return new RangedFilter(queryParams);\n    }\n}\nfunction queryParamsLimitToFirst(queryParams, newLimit) {\n    const newParams = queryParams.copy();\n    newParams.limitSet_ = true;\n    newParams.limit_ = newLimit;\n    newParams.viewFrom_ = \"l\" /* WIRE_PROTOCOL_CONSTANTS.VIEW_FROM_LEFT */;\n    return newParams;\n}\nfunction queryParamsLimitToLast(queryParams, newLimit) {\n    const newParams = queryParams.copy();\n    newParams.limitSet_ = true;\n    newParams.limit_ = newLimit;\n    newParams.viewFrom_ = \"r\" /* WIRE_PROTOCOL_CONSTANTS.VIEW_FROM_RIGHT */;\n    return newParams;\n}\nfunction queryParamsStartAt(queryParams, indexValue, key) {\n    const newParams = queryParams.copy();\n    newParams.startSet_ = true;\n    if (indexValue === undefined) {\n        indexValue = null;\n    }\n    newParams.indexStartValue_ = indexValue;\n    if (key != null) {\n        newParams.startNameSet_ = true;\n        newParams.indexStartName_ = key;\n    }\n    else {\n        newParams.startNameSet_ = false;\n        newParams.indexStartName_ = '';\n    }\n    return newParams;\n}\nfunction queryParamsStartAfter(queryParams, indexValue, key) {\n    let params;\n    if (queryParams.index_ === KEY_INDEX || !!key) {\n        params = queryParamsStartAt(queryParams, indexValue, key);\n    }\n    else {\n        params = queryParamsStartAt(queryParams, indexValue, MAX_NAME);\n    }\n    params.startAfterSet_ = true;\n    return params;\n}\nfunction queryParamsEndAt(queryParams, indexValue, key) {\n    const newParams = queryParams.copy();\n    newParams.endSet_ = true;\n    if (indexValue === undefined) {\n        indexValue = null;\n    }\n    newParams.indexEndValue_ = indexValue;\n    if (key !== undefined) {\n        newParams.endNameSet_ = true;\n        newParams.indexEndName_ = key;\n    }\n    else {\n        newParams.endNameSet_ = false;\n        newParams.indexEndName_ = '';\n    }\n    return newParams;\n}\nfunction queryParamsEndBefore(queryParams, indexValue, key) {\n    let params;\n    if (queryParams.index_ === KEY_INDEX || !!key) {\n        params = queryParamsEndAt(queryParams, indexValue, key);\n    }\n    else {\n        params = queryParamsEndAt(queryParams, indexValue, MIN_NAME);\n    }\n    params.endBeforeSet_ = true;\n    return params;\n}\nfunction queryParamsOrderBy(queryParams, index) {\n    const newParams = queryParams.copy();\n    newParams.index_ = index;\n    return newParams;\n}\n/**\n * Returns a set of REST query string parameters representing this query.\n *\n * @returns query string parameters\n */\nfunction queryParamsToRestQueryStringParameters(queryParams) {\n    const qs = {};\n    if (queryParams.isDefault()) {\n        return qs;\n    }\n    let orderBy;\n    if (queryParams.index_ === PRIORITY_INDEX) {\n        orderBy = \"$priority\" /* REST_QUERY_CONSTANTS.PRIORITY_INDEX */;\n    }\n    else if (queryParams.index_ === VALUE_INDEX) {\n        orderBy = \"$value\" /* REST_QUERY_CONSTANTS.VALUE_INDEX */;\n    }\n    else if (queryParams.index_ === KEY_INDEX) {\n        orderBy = \"$key\" /* REST_QUERY_CONSTANTS.KEY_INDEX */;\n    }\n    else {\n        assert(queryParams.index_ instanceof PathIndex, 'Unrecognized index type!');\n        orderBy = queryParams.index_.toString();\n    }\n    qs[\"orderBy\" /* REST_QUERY_CONSTANTS.ORDER_BY */] = stringify(orderBy);\n    if (queryParams.startSet_) {\n        const startParam = queryParams.startAfterSet_\n            ? \"startAfter\" /* REST_QUERY_CONSTANTS.START_AFTER */\n            : \"startAt\" /* REST_QUERY_CONSTANTS.START_AT */;\n        qs[startParam] = stringify(queryParams.indexStartValue_);\n        if (queryParams.startNameSet_) {\n            qs[startParam] += ',' + stringify(queryParams.indexStartName_);\n        }\n    }\n    if (queryParams.endSet_) {\n        const endParam = queryParams.endBeforeSet_\n            ? \"endBefore\" /* REST_QUERY_CONSTANTS.END_BEFORE */\n            : \"endAt\" /* REST_QUERY_CONSTANTS.END_AT */;\n        qs[endParam] = stringify(queryParams.indexEndValue_);\n        if (queryParams.endNameSet_) {\n            qs[endParam] += ',' + stringify(queryParams.indexEndName_);\n        }\n    }\n    if (queryParams.limitSet_) {\n        if (queryParams.isViewFromLeft()) {\n            qs[\"limitToFirst\" /* REST_QUERY_CONSTANTS.LIMIT_TO_FIRST */] = queryParams.limit_;\n        }\n        else {\n            qs[\"limitToLast\" /* REST_QUERY_CONSTANTS.LIMIT_TO_LAST */] = queryParams.limit_;\n        }\n    }\n    return qs;\n}\nfunction queryParamsGetQueryObject(queryParams) {\n    const obj = {};\n    if (queryParams.startSet_) {\n        obj[\"sp\" /* WIRE_PROTOCOL_CONSTANTS.INDEX_START_VALUE */] =\n            queryParams.indexStartValue_;\n        if (queryParams.startNameSet_) {\n            obj[\"sn\" /* WIRE_PROTOCOL_CONSTANTS.INDEX_START_NAME */] =\n                queryParams.indexStartName_;\n        }\n        obj[\"sin\" /* WIRE_PROTOCOL_CONSTANTS.INDEX_START_IS_INCLUSIVE */] =\n            !queryParams.startAfterSet_;\n    }\n    if (queryParams.endSet_) {\n        obj[\"ep\" /* WIRE_PROTOCOL_CONSTANTS.INDEX_END_VALUE */] = queryParams.indexEndValue_;\n        if (queryParams.endNameSet_) {\n            obj[\"en\" /* WIRE_PROTOCOL_CONSTANTS.INDEX_END_NAME */] = queryParams.indexEndName_;\n        }\n        obj[\"ein\" /* WIRE_PROTOCOL_CONSTANTS.INDEX_END_IS_INCLUSIVE */] =\n            !queryParams.endBeforeSet_;\n    }\n    if (queryParams.limitSet_) {\n        obj[\"l\" /* WIRE_PROTOCOL_CONSTANTS.LIMIT */] = queryParams.limit_;\n        let viewFrom = queryParams.viewFrom_;\n        if (viewFrom === '') {\n            if (queryParams.isViewFromLeft()) {\n                viewFrom = \"l\" /* WIRE_PROTOCOL_CONSTANTS.VIEW_FROM_LEFT */;\n            }\n            else {\n                viewFrom = \"r\" /* WIRE_PROTOCOL_CONSTANTS.VIEW_FROM_RIGHT */;\n            }\n        }\n        obj[\"vf\" /* WIRE_PROTOCOL_CONSTANTS.VIEW_FROM */] = viewFrom;\n    }\n    // For now, priority index is the default, so we only specify if it's some other index\n    if (queryParams.index_ !== PRIORITY_INDEX) {\n        obj[\"i\" /* WIRE_PROTOCOL_CONSTANTS.INDEX */] = queryParams.index_.toString();\n    }\n    return obj;\n}\n\n/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * An implementation of ServerActions that communicates with the server via REST requests.\n * This is mostly useful for compatibility with crawlers, where we don't want to spin up a full\n * persistent connection (using WebSockets or long-polling)\n */\nclass ReadonlyRestClient extends ServerActions {\n    reportStats(stats) {\n        throw new Error('Method not implemented.');\n    }\n    static getListenId_(query, tag) {\n        if (tag !== undefined) {\n            return 'tag$' + tag;\n        }\n        else {\n            assert(query._queryParams.isDefault(), \"should have a tag if it's not a default query.\");\n            return query._path.toString();\n        }\n    }\n    /**\n     * @param repoInfo_ - Data about the namespace we are connecting to\n     * @param onDataUpdate_ - A callback for new data from the server\n     */\n    constructor(repoInfo_, onDataUpdate_, authTokenProvider_, appCheckTokenProvider_) {\n        super();\n        this.repoInfo_ = repoInfo_;\n        this.onDataUpdate_ = onDataUpdate_;\n        this.authTokenProvider_ = authTokenProvider_;\n        this.appCheckTokenProvider_ = appCheckTokenProvider_;\n        /** @private {function(...[*])} */\n        this.log_ = logWrapper('p:rest:');\n        /**\n         * We don't actually need to track listens, except to prevent us calling an onComplete for a listen\n         * that's been removed. :-/\n         */\n        this.listens_ = {};\n    }\n    /** @inheritDoc */\n    listen(query, currentHashFn, tag, onComplete) {\n        const pathString = query._path.toString();\n        this.log_('Listen called for ' + pathString + ' ' + query._queryIdentifier);\n        // Mark this listener so we can tell if it's removed.\n        const listenId = ReadonlyRestClient.getListenId_(query, tag);\n        const thisListen = {};\n        this.listens_[listenId] = thisListen;\n        const queryStringParameters = queryParamsToRestQueryStringParameters(query._queryParams);\n        this.restRequest_(pathString + '.json', queryStringParameters, (error, result) => {\n            let data = result;\n            if (error === 404) {\n                data = null;\n                error = null;\n            }\n            if (error === null) {\n                this.onDataUpdate_(pathString, data, /*isMerge=*/ false, tag);\n            }\n            if (safeGet(this.listens_, listenId) === thisListen) {\n                let status;\n                if (!error) {\n                    status = 'ok';\n                }\n                else if (error === 401) {\n                    status = 'permission_denied';\n                }\n                else {\n                    status = 'rest_error:' + error;\n                }\n                onComplete(status, null);\n            }\n        });\n    }\n    /** @inheritDoc */\n    unlisten(query, tag) {\n        const listenId = ReadonlyRestClient.getListenId_(query, tag);\n        delete this.listens_[listenId];\n    }\n    get(query) {\n        const queryStringParameters = queryParamsToRestQueryStringParameters(query._queryParams);\n        const pathString = query._path.toString();\n        const deferred = new Deferred();\n        this.restRequest_(pathString + '.json', queryStringParameters, (error, result) => {\n            let data = result;\n            if (error === 404) {\n                data = null;\n                error = null;\n            }\n            if (error === null) {\n                this.onDataUpdate_(pathString, data, \n                /*isMerge=*/ false, \n                /*tag=*/ null);\n                deferred.resolve(data);\n            }\n            else {\n                deferred.reject(new Error(data));\n            }\n        });\n        return deferred.promise;\n    }\n    /** @inheritDoc */\n    refreshAuthToken(token) {\n        // no-op since we just always call getToken.\n    }\n    /**\n     * Performs a REST request to the given path, with the provided query string parameters,\n     * and any auth credentials we have.\n     */\n    restRequest_(pathString, queryStringParameters = {}, callback) {\n        queryStringParameters['format'] = 'export';\n        return Promise.all([\n            this.authTokenProvider_.getToken(/*forceRefresh=*/ false),\n            this.appCheckTokenProvider_.getToken(/*forceRefresh=*/ false)\n        ]).then(([authToken, appCheckToken]) => {\n            if (authToken && authToken.accessToken) {\n                queryStringParameters['auth'] = authToken.accessToken;\n            }\n            if (appCheckToken && appCheckToken.token) {\n                queryStringParameters['ac'] = appCheckToken.token;\n            }\n            const url = (this.repoInfo_.secure ? 'https://' : 'http://') +\n                this.repoInfo_.host +\n                pathString +\n                '?' +\n                'ns=' +\n                this.repoInfo_.namespace +\n                querystring(queryStringParameters);\n            this.log_('Sending REST request for ' + url);\n            const xhr = new XMLHttpRequest();\n            xhr.onreadystatechange = () => {\n                if (callback && xhr.readyState === 4) {\n                    this.log_('REST Response for ' + url + ' received. status:', xhr.status, 'response:', xhr.responseText);\n                    let res = null;\n                    if (xhr.status >= 200 && xhr.status < 300) {\n                        try {\n                            res = jsonEval(xhr.responseText);\n                        }\n                        catch (e) {\n                            warn('Failed to parse JSON response for ' +\n                                url +\n                                ': ' +\n                                xhr.responseText);\n                        }\n                        callback(null, res);\n                    }\n                    else {\n                        // 401 and 404 are expected.\n                        if (xhr.status !== 401 && xhr.status !== 404) {\n                            warn('Got unsuccessful REST response for ' +\n                                url +\n                                ' Status: ' +\n                                xhr.status);\n                        }\n                        callback(xhr.status);\n                    }\n                    callback = null;\n                }\n            };\n            xhr.open('GET', url, /*asynchronous=*/ true);\n            xhr.send();\n        });\n    }\n}\n\n/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Mutable object which basically just stores a reference to the \"latest\" immutable snapshot.\n */\nclass SnapshotHolder {\n    constructor() {\n        this.rootNode_ = ChildrenNode.EMPTY_NODE;\n    }\n    getNode(path) {\n        return this.rootNode_.getChild(path);\n    }\n    updateSnapshot(path, newSnapshotNode) {\n        this.rootNode_ = this.rootNode_.updateChild(path, newSnapshotNode);\n    }\n}\n\n/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nfunction newSparseSnapshotTree() {\n    return {\n        value: null,\n        children: new Map()\n    };\n}\n/**\n * Stores the given node at the specified path. If there is already a node\n * at a shallower path, it merges the new data into that snapshot node.\n *\n * @param path - Path to look up snapshot for.\n * @param data - The new data, or null.\n */\nfunction sparseSnapshotTreeRemember(sparseSnapshotTree, path, data) {\n    if (pathIsEmpty(path)) {\n        sparseSnapshotTree.value = data;\n        sparseSnapshotTree.children.clear();\n    }\n    else if (sparseSnapshotTree.value !== null) {\n        sparseSnapshotTree.value = sparseSnapshotTree.value.updateChild(path, data);\n    }\n    else {\n        const childKey = pathGetFront(path);\n        if (!sparseSnapshotTree.children.has(childKey)) {\n            sparseSnapshotTree.children.set(childKey, newSparseSnapshotTree());\n        }\n        const child = sparseSnapshotTree.children.get(childKey);\n        path = pathPopFront(path);\n        sparseSnapshotTreeRemember(child, path, data);\n    }\n}\n/**\n * Purge the data at path from the cache.\n *\n * @param path - Path to look up snapshot for.\n * @returns True if this node should now be removed.\n */\nfunction sparseSnapshotTreeForget(sparseSnapshotTree, path) {\n    if (pathIsEmpty(path)) {\n        sparseSnapshotTree.value = null;\n        sparseSnapshotTree.children.clear();\n        return true;\n    }\n    else {\n        if (sparseSnapshotTree.value !== null) {\n            if (sparseSnapshotTree.value.isLeafNode()) {\n                // We're trying to forget a node that doesn't exist\n                return false;\n            }\n            else {\n                const value = sparseSnapshotTree.value;\n                sparseSnapshotTree.value = null;\n                value.forEachChild(PRIORITY_INDEX, (key, tree) => {\n                    sparseSnapshotTreeRemember(sparseSnapshotTree, new Path(key), tree);\n                });\n                return sparseSnapshotTreeForget(sparseSnapshotTree, path);\n            }\n        }\n        else if (sparseSnapshotTree.children.size > 0) {\n            const childKey = pathGetFront(path);\n            path = pathPopFront(path);\n            if (sparseSnapshotTree.children.has(childKey)) {\n                const safeToRemove = sparseSnapshotTreeForget(sparseSnapshotTree.children.get(childKey), path);\n                if (safeToRemove) {\n                    sparseSnapshotTree.children.delete(childKey);\n                }\n            }\n            return sparseSnapshotTree.children.size === 0;\n        }\n        else {\n            return true;\n        }\n    }\n}\n/**\n * Recursively iterates through all of the stored tree and calls the\n * callback on each one.\n *\n * @param prefixPath - Path to look up node for.\n * @param func - The function to invoke for each tree.\n */\nfunction sparseSnapshotTreeForEachTree(sparseSnapshotTree, prefixPath, func) {\n    if (sparseSnapshotTree.value !== null) {\n        func(prefixPath, sparseSnapshotTree.value);\n    }\n    else {\n        sparseSnapshotTreeForEachChild(sparseSnapshotTree, (key, tree) => {\n            const path = new Path(prefixPath.toString() + '/' + key);\n            sparseSnapshotTreeForEachTree(tree, path, func);\n        });\n    }\n}\n/**\n * Iterates through each immediate child and triggers the callback.\n * Only seems to be used in tests.\n *\n * @param func - The function to invoke for each child.\n */\nfunction sparseSnapshotTreeForEachChild(sparseSnapshotTree, func) {\n    sparseSnapshotTree.children.forEach((tree, key) => {\n        func(key, tree);\n    });\n}\n\n/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Returns the delta from the previous call to get stats.\n *\n * @param collection_ - The collection to \"listen\" to.\n */\nclass StatsListener {\n    constructor(collection_) {\n        this.collection_ = collection_;\n        this.last_ = null;\n    }\n    get() {\n        const newStats = this.collection_.get();\n        const delta = Object.assign({}, newStats);\n        if (this.last_) {\n            each(this.last_, (stat, value) => {\n                delta[stat] = delta[stat] - value;\n            });\n        }\n        this.last_ = newStats;\n        return delta;\n    }\n}\n\n/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n// Assuming some apps may have a short amount of time on page, and a bulk of firebase operations probably\n// happen on page load, we try to report our first set of stats pretty quickly, but we wait at least 10\n// seconds to try to ensure the Firebase connection is established / settled.\nconst FIRST_STATS_MIN_TIME = 10 * 1000;\nconst FIRST_STATS_MAX_TIME = 30 * 1000;\n// We'll continue to report stats on average every 5 minutes.\nconst REPORT_STATS_INTERVAL = 5 * 60 * 1000;\nclass StatsReporter {\n    constructor(collection, server_) {\n        this.server_ = server_;\n        this.statsToReport_ = {};\n        this.statsListener_ = new StatsListener(collection);\n        const timeout = FIRST_STATS_MIN_TIME +\n            (FIRST_STATS_MAX_TIME - FIRST_STATS_MIN_TIME) * Math.random();\n        setTimeoutNonBlocking(this.reportStats_.bind(this), Math.floor(timeout));\n    }\n    reportStats_() {\n        const stats = this.statsListener_.get();\n        const reportedStats = {};\n        let haveStatsToReport = false;\n        each(stats, (stat, value) => {\n            if (value > 0 && contains(this.statsToReport_, stat)) {\n                reportedStats[stat] = value;\n                haveStatsToReport = true;\n            }\n        });\n        if (haveStatsToReport) {\n            this.server_.reportStats(reportedStats);\n        }\n        // queue our next run.\n        setTimeoutNonBlocking(this.reportStats_.bind(this), Math.floor(Math.random() * 2 * REPORT_STATS_INTERVAL));\n    }\n}\n\n/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n *\n * @enum\n */\nvar OperationType;\n(function (OperationType) {\n    OperationType[OperationType[\"OVERWRITE\"] = 0] = \"OVERWRITE\";\n    OperationType[OperationType[\"MERGE\"] = 1] = \"MERGE\";\n    OperationType[OperationType[\"ACK_USER_WRITE\"] = 2] = \"ACK_USER_WRITE\";\n    OperationType[OperationType[\"LISTEN_COMPLETE\"] = 3] = \"LISTEN_COMPLETE\";\n})(OperationType || (OperationType = {}));\nfunction newOperationSourceUser() {\n    return {\n        fromUser: true,\n        fromServer: false,\n        queryId: null,\n        tagged: false\n    };\n}\nfunction newOperationSourceServer() {\n    return {\n        fromUser: false,\n        fromServer: true,\n        queryId: null,\n        tagged: false\n    };\n}\nfunction newOperationSourceServerTaggedQuery(queryId) {\n    return {\n        fromUser: false,\n        fromServer: true,\n        queryId,\n        tagged: true\n    };\n}\n\n/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nclass AckUserWrite {\n    /**\n     * @param affectedTree - A tree containing true for each affected path. Affected paths can't overlap.\n     */\n    constructor(\n    /** @inheritDoc */ path, \n    /** @inheritDoc */ affectedTree, \n    /** @inheritDoc */ revert) {\n        this.path = path;\n        this.affectedTree = affectedTree;\n        this.revert = revert;\n        /** @inheritDoc */\n        this.type = OperationType.ACK_USER_WRITE;\n        /** @inheritDoc */\n        this.source = newOperationSourceUser();\n    }\n    operationForChild(childName) {\n        if (!pathIsEmpty(this.path)) {\n            assert(pathGetFront(this.path) === childName, 'operationForChild called for unrelated child.');\n            return new AckUserWrite(pathPopFront(this.path), this.affectedTree, this.revert);\n        }\n        else if (this.affectedTree.value != null) {\n            assert(this.affectedTree.children.isEmpty(), 'affectedTree should not have overlapping affected paths.');\n            // All child locations are affected as well; just return same operation.\n            return this;\n        }\n        else {\n            const childTree = this.affectedTree.subtree(new Path(childName));\n            return new AckUserWrite(newEmptyPath(), childTree, this.revert);\n        }\n    }\n}\n\n/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nclass ListenComplete {\n    constructor(source, path) {\n        this.source = source;\n        this.path = path;\n        /** @inheritDoc */\n        this.type = OperationType.LISTEN_COMPLETE;\n    }\n    operationForChild(childName) {\n        if (pathIsEmpty(this.path)) {\n            return new ListenComplete(this.source, newEmptyPath());\n        }\n        else {\n            return new ListenComplete(this.source, pathPopFront(this.path));\n        }\n    }\n}\n\n/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nclass Overwrite {\n    constructor(source, path, snap) {\n        this.source = source;\n        this.path = path;\n        this.snap = snap;\n        /** @inheritDoc */\n        this.type = OperationType.OVERWRITE;\n    }\n    operationForChild(childName) {\n        if (pathIsEmpty(this.path)) {\n            return new Overwrite(this.source, newEmptyPath(), this.snap.getImmediateChild(childName));\n        }\n        else {\n            return new Overwrite(this.source, pathPopFront(this.path), this.snap);\n        }\n    }\n}\n\n/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nclass Merge {\n    constructor(\n    /** @inheritDoc */ source, \n    /** @inheritDoc */ path, \n    /** @inheritDoc */ children) {\n        this.source = source;\n        this.path = path;\n        this.children = children;\n        /** @inheritDoc */\n        this.type = OperationType.MERGE;\n    }\n    operationForChild(childName) {\n        if (pathIsEmpty(this.path)) {\n            const childTree = this.children.subtree(new Path(childName));\n            if (childTree.isEmpty()) {\n                // This child is unaffected\n                return null;\n            }\n            else if (childTree.value) {\n                // We have a snapshot for the child in question.  This becomes an overwrite of the child.\n                return new Overwrite(this.source, newEmptyPath(), childTree.value);\n            }\n            else {\n                // This is a merge at a deeper level\n                return new Merge(this.source, newEmptyPath(), childTree);\n            }\n        }\n        else {\n            assert(pathGetFront(this.path) === childName, \"Can't get a merge for a child not on the path of the operation\");\n            return new Merge(this.source, pathPopFront(this.path), this.children);\n        }\n    }\n    toString() {\n        return ('Operation(' +\n            this.path +\n            ': ' +\n            this.source.toString() +\n            ' merge: ' +\n            this.children.toString() +\n            ')');\n    }\n}\n\n/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * A cache node only stores complete children. Additionally it holds a flag whether the node can be considered fully\n * initialized in the sense that we know at one point in time this represented a valid state of the world, e.g.\n * initialized with data from the server, or a complete overwrite by the client. The filtered flag also tracks\n * whether a node potentially had children removed due to a filter.\n */\nclass CacheNode {\n    constructor(node_, fullyInitialized_, filtered_) {\n        this.node_ = node_;\n        this.fullyInitialized_ = fullyInitialized_;\n        this.filtered_ = filtered_;\n    }\n    /**\n     * Returns whether this node was fully initialized with either server data or a complete overwrite by the client\n     */\n    isFullyInitialized() {\n        return this.fullyInitialized_;\n    }\n    /**\n     * Returns whether this node is potentially missing children due to a filter applied to the node\n     */\n    isFiltered() {\n        return this.filtered_;\n    }\n    isCompleteForPath(path) {\n        if (pathIsEmpty(path)) {\n            return this.isFullyInitialized() && !this.filtered_;\n        }\n        const childKey = pathGetFront(path);\n        return this.isCompleteForChild(childKey);\n    }\n    isCompleteForChild(key) {\n        return ((this.isFullyInitialized() && !this.filtered_) || this.node_.hasChild(key));\n    }\n    getNode() {\n        return this.node_;\n    }\n}\n\n/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * An EventGenerator is used to convert \"raw\" changes (Change) as computed by the\n * CacheDiffer into actual events (Event) that can be raised.  See generateEventsForChanges()\n * for details.\n *\n */\nclass EventGenerator {\n    constructor(query_) {\n        this.query_ = query_;\n        this.index_ = this.query_._queryParams.getIndex();\n    }\n}\n/**\n * Given a set of raw changes (no moved events and prevName not specified yet), and a set of\n * EventRegistrations that should be notified of these changes, generate the actual events to be raised.\n *\n * Notes:\n *  - child_moved events will be synthesized at this time for any child_changed events that affect\n *    our index.\n *  - prevName will be calculated based on the index ordering.\n */\nfunction eventGeneratorGenerateEventsForChanges(eventGenerator, changes, eventCache, eventRegistrations) {\n    const events = [];\n    const moves = [];\n    changes.forEach(change => {\n        if (change.type === \"child_changed\" /* ChangeType.CHILD_CHANGED */ &&\n            eventGenerator.index_.indexedValueChanged(change.oldSnap, change.snapshotNode)) {\n            moves.push(changeChildMoved(change.childName, change.snapshotNode));\n        }\n    });\n    eventGeneratorGenerateEventsForType(eventGenerator, events, \"child_removed\" /* ChangeType.CHILD_REMOVED */, changes, eventRegistrations, eventCache);\n    eventGeneratorGenerateEventsForType(eventGenerator, events, \"child_added\" /* ChangeType.CHILD_ADDED */, changes, eventRegistrations, eventCache);\n    eventGeneratorGenerateEventsForType(eventGenerator, events, \"child_moved\" /* ChangeType.CHILD_MOVED */, moves, eventRegistrations, eventCache);\n    eventGeneratorGenerateEventsForType(eventGenerator, events, \"child_changed\" /* ChangeType.CHILD_CHANGED */, changes, eventRegistrations, eventCache);\n    eventGeneratorGenerateEventsForType(eventGenerator, events, \"value\" /* ChangeType.VALUE */, changes, eventRegistrations, eventCache);\n    return events;\n}\n/**\n * Given changes of a single change type, generate the corresponding events.\n */\nfunction eventGeneratorGenerateEventsForType(eventGenerator, events, eventType, changes, registrations, eventCache) {\n    const filteredChanges = changes.filter(change => change.type === eventType);\n    filteredChanges.sort((a, b) => eventGeneratorCompareChanges(eventGenerator, a, b));\n    filteredChanges.forEach(change => {\n        const materializedChange = eventGeneratorMaterializeSingleChange(eventGenerator, change, eventCache);\n        registrations.forEach(registration => {\n            if (registration.respondsTo(change.type)) {\n                events.push(registration.createEvent(materializedChange, eventGenerator.query_));\n            }\n        });\n    });\n}\nfunction eventGeneratorMaterializeSingleChange(eventGenerator, change, eventCache) {\n    if (change.type === 'value' || change.type === 'child_removed') {\n        return change;\n    }\n    else {\n        change.prevName = eventCache.getPredecessorChildName(change.childName, change.snapshotNode, eventGenerator.index_);\n        return change;\n    }\n}\nfunction eventGeneratorCompareChanges(eventGenerator, a, b) {\n    if (a.childName == null || b.childName == null) {\n        throw assertionError('Should only compare child_ events.');\n    }\n    const aWrapped = new NamedNode(a.childName, a.snapshotNode);\n    const bWrapped = new NamedNode(b.childName, b.snapshotNode);\n    return eventGenerator.index_.compare(aWrapped, bWrapped);\n}\n\n/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nfunction newViewCache(eventCache, serverCache) {\n    return { eventCache, serverCache };\n}\nfunction viewCacheUpdateEventSnap(viewCache, eventSnap, complete, filtered) {\n    return newViewCache(new CacheNode(eventSnap, complete, filtered), viewCache.serverCache);\n}\nfunction viewCacheUpdateServerSnap(viewCache, serverSnap, complete, filtered) {\n    return newViewCache(viewCache.eventCache, new CacheNode(serverSnap, complete, filtered));\n}\nfunction viewCacheGetCompleteEventSnap(viewCache) {\n    return viewCache.eventCache.isFullyInitialized()\n        ? viewCache.eventCache.getNode()\n        : null;\n}\nfunction viewCacheGetCompleteServerSnap(viewCache) {\n    return viewCache.serverCache.isFullyInitialized()\n        ? viewCache.serverCache.getNode()\n        : null;\n}\n\n/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nlet emptyChildrenSingleton;\n/**\n * Singleton empty children collection.\n *\n */\nconst EmptyChildren = () => {\n    if (!emptyChildrenSingleton) {\n        emptyChildrenSingleton = new SortedMap(stringCompare);\n    }\n    return emptyChildrenSingleton;\n};\n/**\n * A tree with immutable elements.\n */\nclass ImmutableTree {\n    static fromObject(obj) {\n        let tree = new ImmutableTree(null);\n        each(obj, (childPath, childSnap) => {\n            tree = tree.set(new Path(childPath), childSnap);\n        });\n        return tree;\n    }\n    constructor(value, children = EmptyChildren()) {\n        this.value = value;\n        this.children = children;\n    }\n    /**\n     * True if the value is empty and there are no children\n     */\n    isEmpty() {\n        return this.value === null && this.children.isEmpty();\n    }\n    /**\n     * Given a path and predicate, return the first node and the path to that node\n     * where the predicate returns true.\n     *\n     * TODO Do a perf test -- If we're creating a bunch of `{path: value:}`\n     * objects on the way back out, it may be better to pass down a pathSoFar obj.\n     *\n     * @param relativePath - The remainder of the path\n     * @param predicate - The predicate to satisfy to return a node\n     */\n    findRootMostMatchingPathAndValue(relativePath, predicate) {\n        if (this.value != null && predicate(this.value)) {\n            return { path: newEmptyPath(), value: this.value };\n        }\n        else {\n            if (pathIsEmpty(relativePath)) {\n                return null;\n            }\n            else {\n                const front = pathGetFront(relativePath);\n                const child = this.children.get(front);\n                if (child !== null) {\n                    const childExistingPathAndValue = child.findRootMostMatchingPathAndValue(pathPopFront(relativePath), predicate);\n                    if (childExistingPathAndValue != null) {\n                        const fullPath = pathChild(new Path(front), childExistingPathAndValue.path);\n                        return { path: fullPath, value: childExistingPathAndValue.value };\n                    }\n                    else {\n                        return null;\n                    }\n                }\n                else {\n                    return null;\n                }\n            }\n        }\n    }\n    /**\n     * Find, if it exists, the shortest subpath of the given path that points a defined\n     * value in the tree\n     */\n    findRootMostValueAndPath(relativePath) {\n        return this.findRootMostMatchingPathAndValue(relativePath, () => true);\n    }\n    /**\n     * @returns The subtree at the given path\n     */\n    subtree(relativePath) {\n        if (pathIsEmpty(relativePath)) {\n            return this;\n        }\n        else {\n            const front = pathGetFront(relativePath);\n            const childTree = this.children.get(front);\n            if (childTree !== null) {\n                return childTree.subtree(pathPopFront(relativePath));\n            }\n            else {\n                return new ImmutableTree(null);\n            }\n        }\n    }\n    /**\n     * Sets a value at the specified path.\n     *\n     * @param relativePath - Path to set value at.\n     * @param toSet - Value to set.\n     * @returns Resulting tree.\n     */\n    set(relativePath, toSet) {\n        if (pathIsEmpty(relativePath)) {\n            return new ImmutableTree(toSet, this.children);\n        }\n        else {\n            const front = pathGetFront(relativePath);\n            const child = this.children.get(front) || new ImmutableTree(null);\n            const newChild = child.set(pathPopFront(relativePath), toSet);\n            const newChildren = this.children.insert(front, newChild);\n            return new ImmutableTree(this.value, newChildren);\n        }\n    }\n    /**\n     * Removes the value at the specified path.\n     *\n     * @param relativePath - Path to value to remove.\n     * @returns Resulting tree.\n     */\n    remove(relativePath) {\n        if (pathIsEmpty(relativePath)) {\n            if (this.children.isEmpty()) {\n                return new ImmutableTree(null);\n            }\n            else {\n                return new ImmutableTree(null, this.children);\n            }\n        }\n        else {\n            const front = pathGetFront(relativePath);\n            const child = this.children.get(front);\n            if (child) {\n                const newChild = child.remove(pathPopFront(relativePath));\n                let newChildren;\n                if (newChild.isEmpty()) {\n                    newChildren = this.children.remove(front);\n                }\n                else {\n                    newChildren = this.children.insert(front, newChild);\n                }\n                if (this.value === null && newChildren.isEmpty()) {\n                    return new ImmutableTree(null);\n                }\n                else {\n                    return new ImmutableTree(this.value, newChildren);\n                }\n            }\n            else {\n                return this;\n            }\n        }\n    }\n    /**\n     * Gets a value from the tree.\n     *\n     * @param relativePath - Path to get value for.\n     * @returns Value at path, or null.\n     */\n    get(relativePath) {\n        if (pathIsEmpty(relativePath)) {\n            return this.value;\n        }\n        else {\n            const front = pathGetFront(relativePath);\n            const child = this.children.get(front);\n            if (child) {\n                return child.get(pathPopFront(relativePath));\n            }\n            else {\n                return null;\n            }\n        }\n    }\n    /**\n     * Replace the subtree at the specified path with the given new tree.\n     *\n     * @param relativePath - Path to replace subtree for.\n     * @param newTree - New tree.\n     * @returns Resulting tree.\n     */\n    setTree(relativePath, newTree) {\n        if (pathIsEmpty(relativePath)) {\n            return newTree;\n        }\n        else {\n            const front = pathGetFront(relativePath);\n            const child = this.children.get(front) || new ImmutableTree(null);\n            const newChild = child.setTree(pathPopFront(relativePath), newTree);\n            let newChildren;\n            if (newChild.isEmpty()) {\n                newChildren = this.children.remove(front);\n            }\n            else {\n                newChildren = this.children.insert(front, newChild);\n            }\n            return new ImmutableTree(this.value, newChildren);\n        }\n    }\n    /**\n     * Performs a depth first fold on this tree. Transforms a tree into a single\n     * value, given a function that operates on the path to a node, an optional\n     * current value, and a map of child names to folded subtrees\n     */\n    fold(fn) {\n        return this.fold_(newEmptyPath(), fn);\n    }\n    /**\n     * Recursive helper for public-facing fold() method\n     */\n    fold_(pathSoFar, fn) {\n        const accum = {};\n        this.children.inorderTraversal((childKey, childTree) => {\n            accum[childKey] = childTree.fold_(pathChild(pathSoFar, childKey), fn);\n        });\n        return fn(pathSoFar, this.value, accum);\n    }\n    /**\n     * Find the first matching value on the given path. Return the result of applying f to it.\n     */\n    findOnPath(path, f) {\n        return this.findOnPath_(path, newEmptyPath(), f);\n    }\n    findOnPath_(pathToFollow, pathSoFar, f) {\n        const result = this.value ? f(pathSoFar, this.value) : false;\n        if (result) {\n            return result;\n        }\n        else {\n            if (pathIsEmpty(pathToFollow)) {\n                return null;\n            }\n            else {\n                const front = pathGetFront(pathToFollow);\n                const nextChild = this.children.get(front);\n                if (nextChild) {\n                    return nextChild.findOnPath_(pathPopFront(pathToFollow), pathChild(pathSoFar, front), f);\n                }\n                else {\n                    return null;\n                }\n            }\n        }\n    }\n    foreachOnPath(path, f) {\n        return this.foreachOnPath_(path, newEmptyPath(), f);\n    }\n    foreachOnPath_(pathToFollow, currentRelativePath, f) {\n        if (pathIsEmpty(pathToFollow)) {\n            return this;\n        }\n        else {\n            if (this.value) {\n                f(currentRelativePath, this.value);\n            }\n            const front = pathGetFront(pathToFollow);\n            const nextChild = this.children.get(front);\n            if (nextChild) {\n                return nextChild.foreachOnPath_(pathPopFront(pathToFollow), pathChild(currentRelativePath, front), f);\n            }\n            else {\n                return new ImmutableTree(null);\n            }\n        }\n    }\n    /**\n     * Calls the given function for each node in the tree that has a value.\n     *\n     * @param f - A function to be called with the path from the root of the tree to\n     * a node, and the value at that node. Called in depth-first order.\n     */\n    foreach(f) {\n        this.foreach_(newEmptyPath(), f);\n    }\n    foreach_(currentRelativePath, f) {\n        this.children.inorderTraversal((childName, childTree) => {\n            childTree.foreach_(pathChild(currentRelativePath, childName), f);\n        });\n        if (this.value) {\n            f(currentRelativePath, this.value);\n        }\n    }\n    foreachChild(f) {\n        this.children.inorderTraversal((childName, childTree) => {\n            if (childTree.value) {\n                f(childName, childTree.value);\n            }\n        });\n    }\n}\n\n/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * This class holds a collection of writes that can be applied to nodes in unison. It abstracts away the logic with\n * dealing with priority writes and multiple nested writes. At any given path there is only allowed to be one write\n * modifying that path. Any write to an existing path or shadowing an existing path will modify that existing write\n * to reflect the write added.\n */\nclass CompoundWrite {\n    constructor(writeTree_) {\n        this.writeTree_ = writeTree_;\n    }\n    static empty() {\n        return new CompoundWrite(new ImmutableTree(null));\n    }\n}\nfunction compoundWriteAddWrite(compoundWrite, path, node) {\n    if (pathIsEmpty(path)) {\n        return new CompoundWrite(new ImmutableTree(node));\n    }\n    else {\n        const rootmost = compoundWrite.writeTree_.findRootMostValueAndPath(path);\n        if (rootmost != null) {\n            const rootMostPath = rootmost.path;\n            let value = rootmost.value;\n            const relativePath = newRelativePath(rootMostPath, path);\n            value = value.updateChild(relativePath, node);\n            return new CompoundWrite(compoundWrite.writeTree_.set(rootMostPath, value));\n        }\n        else {\n            const subtree = new ImmutableTree(node);\n            const newWriteTree = compoundWrite.writeTree_.setTree(path, subtree);\n            return new CompoundWrite(newWriteTree);\n        }\n    }\n}\nfunction compoundWriteAddWrites(compoundWrite, path, updates) {\n    let newWrite = compoundWrite;\n    each(updates, (childKey, node) => {\n        newWrite = compoundWriteAddWrite(newWrite, pathChild(path, childKey), node);\n    });\n    return newWrite;\n}\n/**\n * Will remove a write at the given path and deeper paths. This will <em>not</em> modify a write at a higher\n * location, which must be removed by calling this method with that path.\n *\n * @param compoundWrite - The CompoundWrite to remove.\n * @param path - The path at which a write and all deeper writes should be removed\n * @returns The new CompoundWrite with the removed path\n */\nfunction compoundWriteRemoveWrite(compoundWrite, path) {\n    if (pathIsEmpty(path)) {\n        return CompoundWrite.empty();\n    }\n    else {\n        const newWriteTree = compoundWrite.writeTree_.setTree(path, new ImmutableTree(null));\n        return new CompoundWrite(newWriteTree);\n    }\n}\n/**\n * Returns whether this CompoundWrite will fully overwrite a node at a given location and can therefore be\n * considered \"complete\".\n *\n * @param compoundWrite - The CompoundWrite to check.\n * @param path - The path to check for\n * @returns Whether there is a complete write at that path\n */\nfunction compoundWriteHasCompleteWrite(compoundWrite, path) {\n    return compoundWriteGetCompleteNode(compoundWrite, path) != null;\n}\n/**\n * Returns a node for a path if and only if the node is a \"complete\" overwrite at that path. This will not aggregate\n * writes from deeper paths, but will return child nodes from a more shallow path.\n *\n * @param compoundWrite - The CompoundWrite to get the node from.\n * @param path - The path to get a complete write\n * @returns The node if complete at that path, or null otherwise.\n */\nfunction compoundWriteGetCompleteNode(compoundWrite, path) {\n    const rootmost = compoundWrite.writeTree_.findRootMostValueAndPath(path);\n    if (rootmost != null) {\n        return compoundWrite.writeTree_\n            .get(rootmost.path)\n            .getChild(newRelativePath(rootmost.path, path));\n    }\n    else {\n        return null;\n    }\n}\n/**\n * Returns all children that are guaranteed to be a complete overwrite.\n *\n * @param compoundWrite - The CompoundWrite to get children from.\n * @returns A list of all complete children.\n */\nfunction compoundWriteGetCompleteChildren(compoundWrite) {\n    const children = [];\n    const node = compoundWrite.writeTree_.value;\n    if (node != null) {\n        // If it's a leaf node, it has no children; so nothing to do.\n        if (!node.isLeafNode()) {\n            node.forEachChild(PRIORITY_INDEX, (childName, childNode) => {\n                children.push(new NamedNode(childName, childNode));\n            });\n        }\n    }\n    else {\n        compoundWrite.writeTree_.children.inorderTraversal((childName, childTree) => {\n            if (childTree.value != null) {\n                children.push(new NamedNode(childName, childTree.value));\n            }\n        });\n    }\n    return children;\n}\nfunction compoundWriteChildCompoundWrite(compoundWrite, path) {\n    if (pathIsEmpty(path)) {\n        return compoundWrite;\n    }\n    else {\n        const shadowingNode = compoundWriteGetCompleteNode(compoundWrite, path);\n        if (shadowingNode != null) {\n            return new CompoundWrite(new ImmutableTree(shadowingNode));\n        }\n        else {\n            return new CompoundWrite(compoundWrite.writeTree_.subtree(path));\n        }\n    }\n}\n/**\n * Returns true if this CompoundWrite is empty and therefore does not modify any nodes.\n * @returns Whether this CompoundWrite is empty\n */\nfunction compoundWriteIsEmpty(compoundWrite) {\n    return compoundWrite.writeTree_.isEmpty();\n}\n/**\n * Applies this CompoundWrite to a node. The node is returned with all writes from this CompoundWrite applied to the\n * node\n * @param node - The node to apply this CompoundWrite to\n * @returns The node with all writes applied\n */\nfunction compoundWriteApply(compoundWrite, node) {\n    return applySubtreeWrite(newEmptyPath(), compoundWrite.writeTree_, node);\n}\nfunction applySubtreeWrite(relativePath, writeTree, node) {\n    if (writeTree.value != null) {\n        // Since there a write is always a leaf, we're done here\n        return node.updateChild(relativePath, writeTree.value);\n    }\n    else {\n        let priorityWrite = null;\n        writeTree.children.inorderTraversal((childKey, childTree) => {\n            if (childKey === '.priority') {\n                // Apply priorities at the end so we don't update priorities for either empty nodes or forget\n                // to apply priorities to empty nodes that are later filled\n                assert(childTree.value !== null, 'Priority writes must always be leaf nodes');\n                priorityWrite = childTree.value;\n            }\n            else {\n                node = applySubtreeWrite(pathChild(relativePath, childKey), childTree, node);\n            }\n        });\n        // If there was a priority write, we only apply it if the node is not empty\n        if (!node.getChild(relativePath).isEmpty() && priorityWrite !== null) {\n            node = node.updateChild(pathChild(relativePath, '.priority'), priorityWrite);\n        }\n        return node;\n    }\n}\n\n/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Create a new WriteTreeRef for the given path. For use with a new sync point at the given path.\n *\n */\nfunction writeTreeChildWrites(writeTree, path) {\n    return newWriteTreeRef(path, writeTree);\n}\n/**\n * Record a new overwrite from user code.\n *\n * @param visible - This is set to false by some transactions. It should be excluded from event caches\n */\nfunction writeTreeAddOverwrite(writeTree, path, snap, writeId, visible) {\n    assert(writeId > writeTree.lastWriteId, 'Stacking an older write on top of newer ones');\n    if (visible === undefined) {\n        visible = true;\n    }\n    writeTree.allWrites.push({\n        path,\n        snap,\n        writeId,\n        visible\n    });\n    if (visible) {\n        writeTree.visibleWrites = compoundWriteAddWrite(writeTree.visibleWrites, path, snap);\n    }\n    writeTree.lastWriteId = writeId;\n}\n/**\n * Record a new merge from user code.\n */\nfunction writeTreeAddMerge(writeTree, path, changedChildren, writeId) {\n    assert(writeId > writeTree.lastWriteId, 'Stacking an older merge on top of newer ones');\n    writeTree.allWrites.push({\n        path,\n        children: changedChildren,\n        writeId,\n        visible: true\n    });\n    writeTree.visibleWrites = compoundWriteAddWrites(writeTree.visibleWrites, path, changedChildren);\n    writeTree.lastWriteId = writeId;\n}\nfunction writeTreeGetWrite(writeTree, writeId) {\n    for (let i = 0; i < writeTree.allWrites.length; i++) {\n        const record = writeTree.allWrites[i];\n        if (record.writeId === writeId) {\n            return record;\n        }\n    }\n    return null;\n}\n/**\n * Remove a write (either an overwrite or merge) that has been successfully acknowledge by the server. Recalculates\n * the tree if necessary.  We return true if it may have been visible, meaning views need to reevaluate.\n *\n * @returns true if the write may have been visible (meaning we'll need to reevaluate / raise\n * events as a result).\n */\nfunction writeTreeRemoveWrite(writeTree, writeId) {\n    // Note: disabling this check. It could be a transaction that preempted another transaction, and thus was applied\n    // out of order.\n    //const validClear = revert || this.allWrites_.length === 0 || writeId <= this.allWrites_[0].writeId;\n    //assert(validClear, \"Either we don't have this write, or it's the first one in the queue\");\n    const idx = writeTree.allWrites.findIndex(s => {\n        return s.writeId === writeId;\n    });\n    assert(idx >= 0, 'removeWrite called with nonexistent writeId.');\n    const writeToRemove = writeTree.allWrites[idx];\n    writeTree.allWrites.splice(idx, 1);\n    let removedWriteWasVisible = writeToRemove.visible;\n    let removedWriteOverlapsWithOtherWrites = false;\n    let i = writeTree.allWrites.length - 1;\n    while (removedWriteWasVisible && i >= 0) {\n        const currentWrite = writeTree.allWrites[i];\n        if (currentWrite.visible) {\n            if (i >= idx &&\n                writeTreeRecordContainsPath_(currentWrite, writeToRemove.path)) {\n                // The removed write was completely shadowed by a subsequent write.\n                removedWriteWasVisible = false;\n            }\n            else if (pathContains(writeToRemove.path, currentWrite.path)) {\n                // Either we're covering some writes or they're covering part of us (depending on which came first).\n                removedWriteOverlapsWithOtherWrites = true;\n            }\n        }\n        i--;\n    }\n    if (!removedWriteWasVisible) {\n        return false;\n    }\n    else if (removedWriteOverlapsWithOtherWrites) {\n        // There's some shadowing going on. Just rebuild the visible writes from scratch.\n        writeTreeResetTree_(writeTree);\n        return true;\n    }\n    else {\n        // There's no shadowing.  We can safely just remove the write(s) from visibleWrites.\n        if (writeToRemove.snap) {\n            writeTree.visibleWrites = compoundWriteRemoveWrite(writeTree.visibleWrites, writeToRemove.path);\n        }\n        else {\n            const children = writeToRemove.children;\n            each(children, (childName) => {\n                writeTree.visibleWrites = compoundWriteRemoveWrite(writeTree.visibleWrites, pathChild(writeToRemove.path, childName));\n            });\n        }\n        return true;\n    }\n}\nfunction writeTreeRecordContainsPath_(writeRecord, path) {\n    if (writeRecord.snap) {\n        return pathContains(writeRecord.path, path);\n    }\n    else {\n        for (const childName in writeRecord.children) {\n            if (writeRecord.children.hasOwnProperty(childName) &&\n                pathContains(pathChild(writeRecord.path, childName), path)) {\n                return true;\n            }\n        }\n        return false;\n    }\n}\n/**\n * Re-layer the writes and merges into a tree so we can efficiently calculate event snapshots\n */\nfunction writeTreeResetTree_(writeTree) {\n    writeTree.visibleWrites = writeTreeLayerTree_(writeTree.allWrites, writeTreeDefaultFilter_, newEmptyPath());\n    if (writeTree.allWrites.length > 0) {\n        writeTree.lastWriteId =\n            writeTree.allWrites[writeTree.allWrites.length - 1].writeId;\n    }\n    else {\n        writeTree.lastWriteId = -1;\n    }\n}\n/**\n * The default filter used when constructing the tree. Keep everything that's visible.\n */\nfunction writeTreeDefaultFilter_(write) {\n    return write.visible;\n}\n/**\n * Static method. Given an array of WriteRecords, a filter for which ones to include, and a path, construct the tree of\n * event data at that path.\n */\nfunction writeTreeLayerTree_(writes, filter, treeRoot) {\n    let compoundWrite = CompoundWrite.empty();\n    for (let i = 0; i < writes.length; ++i) {\n        const write = writes[i];\n        // Theory, a later set will either:\n        // a) abort a relevant transaction, so no need to worry about excluding it from calculating that transaction\n        // b) not be relevant to a transaction (separate branch), so again will not affect the data for that transaction\n        if (filter(write)) {\n            const writePath = write.path;\n            let relativePath;\n            if (write.snap) {\n                if (pathContains(treeRoot, writePath)) {\n                    relativePath = newRelativePath(treeRoot, writePath);\n                    compoundWrite = compoundWriteAddWrite(compoundWrite, relativePath, write.snap);\n                }\n                else if (pathContains(writePath, treeRoot)) {\n                    relativePath = newRelativePath(writePath, treeRoot);\n                    compoundWrite = compoundWriteAddWrite(compoundWrite, newEmptyPath(), write.snap.getChild(relativePath));\n                }\n                else ;\n            }\n            else if (write.children) {\n                if (pathContains(treeRoot, writePath)) {\n                    relativePath = newRelativePath(treeRoot, writePath);\n                    compoundWrite = compoundWriteAddWrites(compoundWrite, relativePath, write.children);\n                }\n                else if (pathContains(writePath, treeRoot)) {\n                    relativePath = newRelativePath(writePath, treeRoot);\n                    if (pathIsEmpty(relativePath)) {\n                        compoundWrite = compoundWriteAddWrites(compoundWrite, newEmptyPath(), write.children);\n                    }\n                    else {\n                        const child = safeGet(write.children, pathGetFront(relativePath));\n                        if (child) {\n                            // There exists a child in this node that matches the root path\n                            const deepNode = child.getChild(pathPopFront(relativePath));\n                            compoundWrite = compoundWriteAddWrite(compoundWrite, newEmptyPath(), deepNode);\n                        }\n                    }\n                }\n                else ;\n            }\n            else {\n                throw assertionError('WriteRecord should have .snap or .children');\n            }\n        }\n    }\n    return compoundWrite;\n}\n/**\n * Given optional, underlying server data, and an optional set of constraints (exclude some sets, include hidden\n * writes), attempt to calculate a complete snapshot for the given path\n *\n * @param writeIdsToExclude - An optional set to be excluded\n * @param includeHiddenWrites - Defaults to false, whether or not to layer on writes with visible set to false\n */\nfunction writeTreeCalcCompleteEventCache(writeTree, treePath, completeServerCache, writeIdsToExclude, includeHiddenWrites) {\n    if (!writeIdsToExclude && !includeHiddenWrites) {\n        const shadowingNode = compoundWriteGetCompleteNode(writeTree.visibleWrites, treePath);\n        if (shadowingNode != null) {\n            return shadowingNode;\n        }\n        else {\n            const subMerge = compoundWriteChildCompoundWrite(writeTree.visibleWrites, treePath);\n            if (compoundWriteIsEmpty(subMerge)) {\n                return completeServerCache;\n            }\n            else if (completeServerCache == null &&\n                !compoundWriteHasCompleteWrite(subMerge, newEmptyPath())) {\n                // We wouldn't have a complete snapshot, since there's no underlying data and no complete shadow\n                return null;\n            }\n            else {\n                const layeredCache = completeServerCache || ChildrenNode.EMPTY_NODE;\n                return compoundWriteApply(subMerge, layeredCache);\n            }\n        }\n    }\n    else {\n        const merge = compoundWriteChildCompoundWrite(writeTree.visibleWrites, treePath);\n        if (!includeHiddenWrites && compoundWriteIsEmpty(merge)) {\n            return completeServerCache;\n        }\n        else {\n            // If the server cache is null, and we don't have a complete cache, we need to return null\n            if (!includeHiddenWrites &&\n                completeServerCache == null &&\n                !compoundWriteHasCompleteWrite(merge, newEmptyPath())) {\n                return null;\n            }\n            else {\n                const filter = function (write) {\n                    return ((write.visible || includeHiddenWrites) &&\n                        (!writeIdsToExclude ||\n                            !~writeIdsToExclude.indexOf(write.writeId)) &&\n                        (pathContains(write.path, treePath) ||\n                            pathContains(treePath, write.path)));\n                };\n                const mergeAtPath = writeTreeLayerTree_(writeTree.allWrites, filter, treePath);\n                const layeredCache = completeServerCache || ChildrenNode.EMPTY_NODE;\n                return compoundWriteApply(mergeAtPath, layeredCache);\n            }\n        }\n    }\n}\n/**\n * With optional, underlying server data, attempt to return a children node of children that we have complete data for.\n * Used when creating new views, to pre-fill their complete event children snapshot.\n */\nfunction writeTreeCalcCompleteEventChildren(writeTree, treePath, completeServerChildren) {\n    let completeChildren = ChildrenNode.EMPTY_NODE;\n    const topLevelSet = compoundWriteGetCompleteNode(writeTree.visibleWrites, treePath);\n    if (topLevelSet) {\n        if (!topLevelSet.isLeafNode()) {\n            // we're shadowing everything. Return the children.\n            topLevelSet.forEachChild(PRIORITY_INDEX, (childName, childSnap) => {\n                completeChildren = completeChildren.updateImmediateChild(childName, childSnap);\n            });\n        }\n        return completeChildren;\n    }\n    else if (completeServerChildren) {\n        // Layer any children we have on top of this\n        // We know we don't have a top-level set, so just enumerate existing children\n        const merge = compoundWriteChildCompoundWrite(writeTree.visibleWrites, treePath);\n        completeServerChildren.forEachChild(PRIORITY_INDEX, (childName, childNode) => {\n            const node = compoundWriteApply(compoundWriteChildCompoundWrite(merge, new Path(childName)), childNode);\n            completeChildren = completeChildren.updateImmediateChild(childName, node);\n        });\n        // Add any complete children we have from the set\n        compoundWriteGetCompleteChildren(merge).forEach(namedNode => {\n            completeChildren = completeChildren.updateImmediateChild(namedNode.name, namedNode.node);\n        });\n        return completeChildren;\n    }\n    else {\n        // We don't have anything to layer on top of. Layer on any children we have\n        // Note that we can return an empty snap if we have a defined delete\n        const merge = compoundWriteChildCompoundWrite(writeTree.visibleWrites, treePath);\n        compoundWriteGetCompleteChildren(merge).forEach(namedNode => {\n            completeChildren = completeChildren.updateImmediateChild(namedNode.name, namedNode.node);\n        });\n        return completeChildren;\n    }\n}\n/**\n * Given that the underlying server data has updated, determine what, if anything, needs to be\n * applied to the event cache.\n *\n * Possibilities:\n *\n * 1. No writes are shadowing. Events should be raised, the snap to be applied comes from the server data\n *\n * 2. Some write is completely shadowing. No events to be raised\n *\n * 3. Is partially shadowed. Events\n *\n * Either existingEventSnap or existingServerSnap must exist\n */\nfunction writeTreeCalcEventCacheAfterServerOverwrite(writeTree, treePath, childPath, existingEventSnap, existingServerSnap) {\n    assert(existingEventSnap || existingServerSnap, 'Either existingEventSnap or existingServerSnap must exist');\n    const path = pathChild(treePath, childPath);\n    if (compoundWriteHasCompleteWrite(writeTree.visibleWrites, path)) {\n        // At this point we can probably guarantee that we're in case 2, meaning no events\n        // May need to check visibility while doing the findRootMostValueAndPath call\n        return null;\n    }\n    else {\n        // No complete shadowing. We're either partially shadowing or not shadowing at all.\n        const childMerge = compoundWriteChildCompoundWrite(writeTree.visibleWrites, path);\n        if (compoundWriteIsEmpty(childMerge)) {\n            // We're not shadowing at all. Case 1\n            return existingServerSnap.getChild(childPath);\n        }\n        else {\n            // This could be more efficient if the serverNode + updates doesn't change the eventSnap\n            // However this is tricky to find out, since user updates don't necessary change the server\n            // snap, e.g. priority updates on empty nodes, or deep deletes. Another special case is if the server\n            // adds nodes, but doesn't change any existing writes. It is therefore not enough to\n            // only check if the updates change the serverNode.\n            // Maybe check if the merge tree contains these special cases and only do a full overwrite in that case?\n            return compoundWriteApply(childMerge, existingServerSnap.getChild(childPath));\n        }\n    }\n}\n/**\n * Returns a complete child for a given server snap after applying all user writes or null if there is no\n * complete child for this ChildKey.\n */\nfunction writeTreeCalcCompleteChild(writeTree, treePath, childKey, existingServerSnap) {\n    const path = pathChild(treePath, childKey);\n    const shadowingNode = compoundWriteGetCompleteNode(writeTree.visibleWrites, path);\n    if (shadowingNode != null) {\n        return shadowingNode;\n    }\n    else {\n        if (existingServerSnap.isCompleteForChild(childKey)) {\n            const childMerge = compoundWriteChildCompoundWrite(writeTree.visibleWrites, path);\n            return compoundWriteApply(childMerge, existingServerSnap.getNode().getImmediateChild(childKey));\n        }\n        else {\n            return null;\n        }\n    }\n}\n/**\n * Returns a node if there is a complete overwrite for this path. More specifically, if there is a write at\n * a higher path, this will return the child of that write relative to the write and this path.\n * Returns null if there is no write at this path.\n */\nfunction writeTreeShadowingWrite(writeTree, path) {\n    return compoundWriteGetCompleteNode(writeTree.visibleWrites, path);\n}\n/**\n * This method is used when processing child remove events on a query. If we can, we pull in children that were outside\n * the window, but may now be in the window.\n */\nfunction writeTreeCalcIndexedSlice(writeTree, treePath, completeServerData, startPost, count, reverse, index) {\n    let toIterate;\n    const merge = compoundWriteChildCompoundWrite(writeTree.visibleWrites, treePath);\n    const shadowingNode = compoundWriteGetCompleteNode(merge, newEmptyPath());\n    if (shadowingNode != null) {\n        toIterate = shadowingNode;\n    }\n    else if (completeServerData != null) {\n        toIterate = compoundWriteApply(merge, completeServerData);\n    }\n    else {\n        // no children to iterate on\n        return [];\n    }\n    toIterate = toIterate.withIndex(index);\n    if (!toIterate.isEmpty() && !toIterate.isLeafNode()) {\n        const nodes = [];\n        const cmp = index.getCompare();\n        const iter = reverse\n            ? toIterate.getReverseIteratorFrom(startPost, index)\n            : toIterate.getIteratorFrom(startPost, index);\n        let next = iter.getNext();\n        while (next && nodes.length < count) {\n            if (cmp(next, startPost) !== 0) {\n                nodes.push(next);\n            }\n            next = iter.getNext();\n        }\n        return nodes;\n    }\n    else {\n        return [];\n    }\n}\nfunction newWriteTree() {\n    return {\n        visibleWrites: CompoundWrite.empty(),\n        allWrites: [],\n        lastWriteId: -1\n    };\n}\n/**\n * If possible, returns a complete event cache, using the underlying server data if possible. In addition, can be used\n * to get a cache that includes hidden writes, and excludes arbitrary writes. Note that customizing the returned node\n * can lead to a more expensive calculation.\n *\n * @param writeIdsToExclude - Optional writes to exclude.\n * @param includeHiddenWrites - Defaults to false, whether or not to layer on writes with visible set to false\n */\nfunction writeTreeRefCalcCompleteEventCache(writeTreeRef, completeServerCache, writeIdsToExclude, includeHiddenWrites) {\n    return writeTreeCalcCompleteEventCache(writeTreeRef.writeTree, writeTreeRef.treePath, completeServerCache, writeIdsToExclude, includeHiddenWrites);\n}\n/**\n * If possible, returns a children node containing all of the complete children we have data for. The returned data is a\n * mix of the given server data and write data.\n *\n */\nfunction writeTreeRefCalcCompleteEventChildren(writeTreeRef, completeServerChildren) {\n    return writeTreeCalcCompleteEventChildren(writeTreeRef.writeTree, writeTreeRef.treePath, completeServerChildren);\n}\n/**\n * Given that either the underlying server data has updated or the outstanding writes have updated, determine what,\n * if anything, needs to be applied to the event cache.\n *\n * Possibilities:\n *\n * 1. No writes are shadowing. Events should be raised, the snap to be applied comes from the server data\n *\n * 2. Some write is completely shadowing. No events to be raised\n *\n * 3. Is partially shadowed. Events should be raised\n *\n * Either existingEventSnap or existingServerSnap must exist, this is validated via an assert\n *\n *\n */\nfunction writeTreeRefCalcEventCacheAfterServerOverwrite(writeTreeRef, path, existingEventSnap, existingServerSnap) {\n    return writeTreeCalcEventCacheAfterServerOverwrite(writeTreeRef.writeTree, writeTreeRef.treePath, path, existingEventSnap, existingServerSnap);\n}\n/**\n * Returns a node if there is a complete overwrite for this path. More specifically, if there is a write at\n * a higher path, this will return the child of that write relative to the write and this path.\n * Returns null if there is no write at this path.\n *\n */\nfunction writeTreeRefShadowingWrite(writeTreeRef, path) {\n    return writeTreeShadowingWrite(writeTreeRef.writeTree, pathChild(writeTreeRef.treePath, path));\n}\n/**\n * This method is used when processing child remove events on a query. If we can, we pull in children that were outside\n * the window, but may now be in the window\n */\nfunction writeTreeRefCalcIndexedSlice(writeTreeRef, completeServerData, startPost, count, reverse, index) {\n    return writeTreeCalcIndexedSlice(writeTreeRef.writeTree, writeTreeRef.treePath, completeServerData, startPost, count, reverse, index);\n}\n/**\n * Returns a complete child for a given server snap after applying all user writes or null if there is no\n * complete child for this ChildKey.\n */\nfunction writeTreeRefCalcCompleteChild(writeTreeRef, childKey, existingServerCache) {\n    return writeTreeCalcCompleteChild(writeTreeRef.writeTree, writeTreeRef.treePath, childKey, existingServerCache);\n}\n/**\n * Return a WriteTreeRef for a child.\n */\nfunction writeTreeRefChild(writeTreeRef, childName) {\n    return newWriteTreeRef(pathChild(writeTreeRef.treePath, childName), writeTreeRef.writeTree);\n}\nfunction newWriteTreeRef(path, writeTree) {\n    return {\n        treePath: path,\n        writeTree\n    };\n}\n\n/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nclass ChildChangeAccumulator {\n    constructor() {\n        this.changeMap = new Map();\n    }\n    trackChildChange(change) {\n        const type = change.type;\n        const childKey = change.childName;\n        assert(type === \"child_added\" /* ChangeType.CHILD_ADDED */ ||\n            type === \"child_changed\" /* ChangeType.CHILD_CHANGED */ ||\n            type === \"child_removed\" /* ChangeType.CHILD_REMOVED */, 'Only child changes supported for tracking');\n        assert(childKey !== '.priority', 'Only non-priority child changes can be tracked.');\n        const oldChange = this.changeMap.get(childKey);\n        if (oldChange) {\n            const oldType = oldChange.type;\n            if (type === \"child_added\" /* ChangeType.CHILD_ADDED */ &&\n                oldType === \"child_removed\" /* ChangeType.CHILD_REMOVED */) {\n                this.changeMap.set(childKey, changeChildChanged(childKey, change.snapshotNode, oldChange.snapshotNode));\n            }\n            else if (type === \"child_removed\" /* ChangeType.CHILD_REMOVED */ &&\n                oldType === \"child_added\" /* ChangeType.CHILD_ADDED */) {\n                this.changeMap.delete(childKey);\n            }\n            else if (type === \"child_removed\" /* ChangeType.CHILD_REMOVED */ &&\n                oldType === \"child_changed\" /* ChangeType.CHILD_CHANGED */) {\n                this.changeMap.set(childKey, changeChildRemoved(childKey, oldChange.oldSnap));\n            }\n            else if (type === \"child_changed\" /* ChangeType.CHILD_CHANGED */ &&\n                oldType === \"child_added\" /* ChangeType.CHILD_ADDED */) {\n                this.changeMap.set(childKey, changeChildAdded(childKey, change.snapshotNode));\n            }\n            else if (type === \"child_changed\" /* ChangeType.CHILD_CHANGED */ &&\n                oldType === \"child_changed\" /* ChangeType.CHILD_CHANGED */) {\n                this.changeMap.set(childKey, changeChildChanged(childKey, change.snapshotNode, oldChange.oldSnap));\n            }\n            else {\n                throw assertionError('Illegal combination of changes: ' +\n                    change +\n                    ' occurred after ' +\n                    oldChange);\n            }\n        }\n        else {\n            this.changeMap.set(childKey, change);\n        }\n    }\n    getChanges() {\n        return Array.from(this.changeMap.values());\n    }\n}\n\n/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * An implementation of CompleteChildSource that never returns any additional children\n */\n// eslint-disable-next-line @typescript-eslint/naming-convention\nclass NoCompleteChildSource_ {\n    getCompleteChild(childKey) {\n        return null;\n    }\n    getChildAfterChild(index, child, reverse) {\n        return null;\n    }\n}\n/**\n * Singleton instance.\n */\nconst NO_COMPLETE_CHILD_SOURCE = new NoCompleteChildSource_();\n/**\n * An implementation of CompleteChildSource that uses a WriteTree in addition to any other server data or\n * old event caches available to calculate complete children.\n */\nclass WriteTreeCompleteChildSource {\n    constructor(writes_, viewCache_, optCompleteServerCache_ = null) {\n        this.writes_ = writes_;\n        this.viewCache_ = viewCache_;\n        this.optCompleteServerCache_ = optCompleteServerCache_;\n    }\n    getCompleteChild(childKey) {\n        const node = this.viewCache_.eventCache;\n        if (node.isCompleteForChild(childKey)) {\n            return node.getNode().getImmediateChild(childKey);\n        }\n        else {\n            const serverNode = this.optCompleteServerCache_ != null\n                ? new CacheNode(this.optCompleteServerCache_, true, false)\n                : this.viewCache_.serverCache;\n            return writeTreeRefCalcCompleteChild(this.writes_, childKey, serverNode);\n        }\n    }\n    getChildAfterChild(index, child, reverse) {\n        const completeServerData = this.optCompleteServerCache_ != null\n            ? this.optCompleteServerCache_\n            : viewCacheGetCompleteServerSnap(this.viewCache_);\n        const nodes = writeTreeRefCalcIndexedSlice(this.writes_, completeServerData, child, 1, reverse, index);\n        if (nodes.length === 0) {\n            return null;\n        }\n        else {\n            return nodes[0];\n        }\n    }\n}\n\n/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nfunction newViewProcessor(filter) {\n    return { filter };\n}\nfunction viewProcessorAssertIndexed(viewProcessor, viewCache) {\n    assert(viewCache.eventCache.getNode().isIndexed(viewProcessor.filter.getIndex()), 'Event snap not indexed');\n    assert(viewCache.serverCache.getNode().isIndexed(viewProcessor.filter.getIndex()), 'Server snap not indexed');\n}\nfunction viewProcessorApplyOperation(viewProcessor, oldViewCache, operation, writesCache, completeCache) {\n    const accumulator = new ChildChangeAccumulator();\n    let newViewCache, filterServerNode;\n    if (operation.type === OperationType.OVERWRITE) {\n        const overwrite = operation;\n        if (overwrite.source.fromUser) {\n            newViewCache = viewProcessorApplyUserOverwrite(viewProcessor, oldViewCache, overwrite.path, overwrite.snap, writesCache, completeCache, accumulator);\n        }\n        else {\n            assert(overwrite.source.fromServer, 'Unknown source.');\n            // We filter the node if it's a tagged update or the node has been previously filtered  and the\n            // update is not at the root in which case it is ok (and necessary) to mark the node unfiltered\n            // again\n            filterServerNode =\n                overwrite.source.tagged ||\n                    (oldViewCache.serverCache.isFiltered() && !pathIsEmpty(overwrite.path));\n            newViewCache = viewProcessorApplyServerOverwrite(viewProcessor, oldViewCache, overwrite.path, overwrite.snap, writesCache, completeCache, filterServerNode, accumulator);\n        }\n    }\n    else if (operation.type === OperationType.MERGE) {\n        const merge = operation;\n        if (merge.source.fromUser) {\n            newViewCache = viewProcessorApplyUserMerge(viewProcessor, oldViewCache, merge.path, merge.children, writesCache, completeCache, accumulator);\n        }\n        else {\n            assert(merge.source.fromServer, 'Unknown source.');\n            // We filter the node if it's a tagged update or the node has been previously filtered\n            filterServerNode =\n                merge.source.tagged || oldViewCache.serverCache.isFiltered();\n            newViewCache = viewProcessorApplyServerMerge(viewProcessor, oldViewCache, merge.path, merge.children, writesCache, completeCache, filterServerNode, accumulator);\n        }\n    }\n    else if (operation.type === OperationType.ACK_USER_WRITE) {\n        const ackUserWrite = operation;\n        if (!ackUserWrite.revert) {\n            newViewCache = viewProcessorAckUserWrite(viewProcessor, oldViewCache, ackUserWrite.path, ackUserWrite.affectedTree, writesCache, completeCache, accumulator);\n        }\n        else {\n            newViewCache = viewProcessorRevertUserWrite(viewProcessor, oldViewCache, ackUserWrite.path, writesCache, completeCache, accumulator);\n        }\n    }\n    else if (operation.type === OperationType.LISTEN_COMPLETE) {\n        newViewCache = viewProcessorListenComplete(viewProcessor, oldViewCache, operation.path, writesCache, accumulator);\n    }\n    else {\n        throw assertionError('Unknown operation type: ' + operation.type);\n    }\n    const changes = accumulator.getChanges();\n    viewProcessorMaybeAddValueEvent(oldViewCache, newViewCache, changes);\n    return { viewCache: newViewCache, changes };\n}\nfunction viewProcessorMaybeAddValueEvent(oldViewCache, newViewCache, accumulator) {\n    const eventSnap = newViewCache.eventCache;\n    if (eventSnap.isFullyInitialized()) {\n        const isLeafOrEmpty = eventSnap.getNode().isLeafNode() || eventSnap.getNode().isEmpty();\n        const oldCompleteSnap = viewCacheGetCompleteEventSnap(oldViewCache);\n        if (accumulator.length > 0 ||\n            !oldViewCache.eventCache.isFullyInitialized() ||\n            (isLeafOrEmpty && !eventSnap.getNode().equals(oldCompleteSnap)) ||\n            !eventSnap.getNode().getPriority().equals(oldCompleteSnap.getPriority())) {\n            accumulator.push(changeValue(viewCacheGetCompleteEventSnap(newViewCache)));\n        }\n    }\n}\nfunction viewProcessorGenerateEventCacheAfterServerEvent(viewProcessor, viewCache, changePath, writesCache, source, accumulator) {\n    const oldEventSnap = viewCache.eventCache;\n    if (writeTreeRefShadowingWrite(writesCache, changePath) != null) {\n        // we have a shadowing write, ignore changes\n        return viewCache;\n    }\n    else {\n        let newEventCache, serverNode;\n        if (pathIsEmpty(changePath)) {\n            // TODO: figure out how this plays with \"sliding ack windows\"\n            assert(viewCache.serverCache.isFullyInitialized(), 'If change path is empty, we must have complete server data');\n            if (viewCache.serverCache.isFiltered()) {\n                // We need to special case this, because we need to only apply writes to complete children, or\n                // we might end up raising events for incomplete children. If the server data is filtered deep\n                // writes cannot be guaranteed to be complete\n                const serverCache = viewCacheGetCompleteServerSnap(viewCache);\n                const completeChildren = serverCache instanceof ChildrenNode\n                    ? serverCache\n                    : ChildrenNode.EMPTY_NODE;\n                const completeEventChildren = writeTreeRefCalcCompleteEventChildren(writesCache, completeChildren);\n                newEventCache = viewProcessor.filter.updateFullNode(viewCache.eventCache.getNode(), completeEventChildren, accumulator);\n            }\n            else {\n                const completeNode = writeTreeRefCalcCompleteEventCache(writesCache, viewCacheGetCompleteServerSnap(viewCache));\n                newEventCache = viewProcessor.filter.updateFullNode(viewCache.eventCache.getNode(), completeNode, accumulator);\n            }\n        }\n        else {\n            const childKey = pathGetFront(changePath);\n            if (childKey === '.priority') {\n                assert(pathGetLength(changePath) === 1, \"Can't have a priority with additional path components\");\n                const oldEventNode = oldEventSnap.getNode();\n                serverNode = viewCache.serverCache.getNode();\n                // we might have overwrites for this priority\n                const updatedPriority = writeTreeRefCalcEventCacheAfterServerOverwrite(writesCache, changePath, oldEventNode, serverNode);\n                if (updatedPriority != null) {\n                    newEventCache = viewProcessor.filter.updatePriority(oldEventNode, updatedPriority);\n                }\n                else {\n                    // priority didn't change, keep old node\n                    newEventCache = oldEventSnap.getNode();\n                }\n            }\n            else {\n                const childChangePath = pathPopFront(changePath);\n                // update child\n                let newEventChild;\n                if (oldEventSnap.isCompleteForChild(childKey)) {\n                    serverNode = viewCache.serverCache.getNode();\n                    const eventChildUpdate = writeTreeRefCalcEventCacheAfterServerOverwrite(writesCache, changePath, oldEventSnap.getNode(), serverNode);\n                    if (eventChildUpdate != null) {\n                        newEventChild = oldEventSnap\n                            .getNode()\n                            .getImmediateChild(childKey)\n                            .updateChild(childChangePath, eventChildUpdate);\n                    }\n                    else {\n                        // Nothing changed, just keep the old child\n                        newEventChild = oldEventSnap.getNode().getImmediateChild(childKey);\n                    }\n                }\n                else {\n                    newEventChild = writeTreeRefCalcCompleteChild(writesCache, childKey, viewCache.serverCache);\n                }\n                if (newEventChild != null) {\n                    newEventCache = viewProcessor.filter.updateChild(oldEventSnap.getNode(), childKey, newEventChild, childChangePath, source, accumulator);\n                }\n                else {\n                    // no complete child available or no change\n                    newEventCache = oldEventSnap.getNode();\n                }\n            }\n        }\n        return viewCacheUpdateEventSnap(viewCache, newEventCache, oldEventSnap.isFullyInitialized() || pathIsEmpty(changePath), viewProcessor.filter.filtersNodes());\n    }\n}\nfunction viewProcessorApplyServerOverwrite(viewProcessor, oldViewCache, changePath, changedSnap, writesCache, completeCache, filterServerNode, accumulator) {\n    const oldServerSnap = oldViewCache.serverCache;\n    let newServerCache;\n    const serverFilter = filterServerNode\n        ? viewProcessor.filter\n        : viewProcessor.filter.getIndexedFilter();\n    if (pathIsEmpty(changePath)) {\n        newServerCache = serverFilter.updateFullNode(oldServerSnap.getNode(), changedSnap, null);\n    }\n    else if (serverFilter.filtersNodes() && !oldServerSnap.isFiltered()) {\n        // we want to filter the server node, but we didn't filter the server node yet, so simulate a full update\n        const newServerNode = oldServerSnap\n            .getNode()\n            .updateChild(changePath, changedSnap);\n        newServerCache = serverFilter.updateFullNode(oldServerSnap.getNode(), newServerNode, null);\n    }\n    else {\n        const childKey = pathGetFront(changePath);\n        if (!oldServerSnap.isCompleteForPath(changePath) &&\n            pathGetLength(changePath) > 1) {\n            // We don't update incomplete nodes with updates intended for other listeners\n            return oldViewCache;\n        }\n        const childChangePath = pathPopFront(changePath);\n        const childNode = oldServerSnap.getNode().getImmediateChild(childKey);\n        const newChildNode = childNode.updateChild(childChangePath, changedSnap);\n        if (childKey === '.priority') {\n            newServerCache = serverFilter.updatePriority(oldServerSnap.getNode(), newChildNode);\n        }\n        else {\n            newServerCache = serverFilter.updateChild(oldServerSnap.getNode(), childKey, newChildNode, childChangePath, NO_COMPLETE_CHILD_SOURCE, null);\n        }\n    }\n    const newViewCache = viewCacheUpdateServerSnap(oldViewCache, newServerCache, oldServerSnap.isFullyInitialized() || pathIsEmpty(changePath), serverFilter.filtersNodes());\n    const source = new WriteTreeCompleteChildSource(writesCache, newViewCache, completeCache);\n    return viewProcessorGenerateEventCacheAfterServerEvent(viewProcessor, newViewCache, changePath, writesCache, source, accumulator);\n}\nfunction viewProcessorApplyUserOverwrite(viewProcessor, oldViewCache, changePath, changedSnap, writesCache, completeCache, accumulator) {\n    const oldEventSnap = oldViewCache.eventCache;\n    let newViewCache, newEventCache;\n    const source = new WriteTreeCompleteChildSource(writesCache, oldViewCache, completeCache);\n    if (pathIsEmpty(changePath)) {\n        newEventCache = viewProcessor.filter.updateFullNode(oldViewCache.eventCache.getNode(), changedSnap, accumulator);\n        newViewCache = viewCacheUpdateEventSnap(oldViewCache, newEventCache, true, viewProcessor.filter.filtersNodes());\n    }\n    else {\n        const childKey = pathGetFront(changePath);\n        if (childKey === '.priority') {\n            newEventCache = viewProcessor.filter.updatePriority(oldViewCache.eventCache.getNode(), changedSnap);\n            newViewCache = viewCacheUpdateEventSnap(oldViewCache, newEventCache, oldEventSnap.isFullyInitialized(), oldEventSnap.isFiltered());\n        }\n        else {\n            const childChangePath = pathPopFront(changePath);\n            const oldChild = oldEventSnap.getNode().getImmediateChild(childKey);\n            let newChild;\n            if (pathIsEmpty(childChangePath)) {\n                // Child overwrite, we can replace the child\n                newChild = changedSnap;\n            }\n            else {\n                const childNode = source.getCompleteChild(childKey);\n                if (childNode != null) {\n                    if (pathGetBack(childChangePath) === '.priority' &&\n                        childNode.getChild(pathParent(childChangePath)).isEmpty()) {\n                        // This is a priority update on an empty node. If this node exists on the server, the\n                        // server will send down the priority in the update, so ignore for now\n                        newChild = childNode;\n                    }\n                    else {\n                        newChild = childNode.updateChild(childChangePath, changedSnap);\n                    }\n                }\n                else {\n                    // There is no complete child node available\n                    newChild = ChildrenNode.EMPTY_NODE;\n                }\n            }\n            if (!oldChild.equals(newChild)) {\n                const newEventSnap = viewProcessor.filter.updateChild(oldEventSnap.getNode(), childKey, newChild, childChangePath, source, accumulator);\n                newViewCache = viewCacheUpdateEventSnap(oldViewCache, newEventSnap, oldEventSnap.isFullyInitialized(), viewProcessor.filter.filtersNodes());\n            }\n            else {\n                newViewCache = oldViewCache;\n            }\n        }\n    }\n    return newViewCache;\n}\nfunction viewProcessorCacheHasChild(viewCache, childKey) {\n    return viewCache.eventCache.isCompleteForChild(childKey);\n}\nfunction viewProcessorApplyUserMerge(viewProcessor, viewCache, path, changedChildren, writesCache, serverCache, accumulator) {\n    // HACK: In the case of a limit query, there may be some changes that bump things out of the\n    // window leaving room for new items.  It's important we process these changes first, so we\n    // iterate the changes twice, first processing any that affect items currently in view.\n    // TODO: I consider an item \"in view\" if cacheHasChild is true, which checks both the server\n    // and event snap.  I'm not sure if this will result in edge cases when a child is in one but\n    // not the other.\n    let curViewCache = viewCache;\n    changedChildren.foreach((relativePath, childNode) => {\n        const writePath = pathChild(path, relativePath);\n        if (viewProcessorCacheHasChild(viewCache, pathGetFront(writePath))) {\n            curViewCache = viewProcessorApplyUserOverwrite(viewProcessor, curViewCache, writePath, childNode, writesCache, serverCache, accumulator);\n        }\n    });\n    changedChildren.foreach((relativePath, childNode) => {\n        const writePath = pathChild(path, relativePath);\n        if (!viewProcessorCacheHasChild(viewCache, pathGetFront(writePath))) {\n            curViewCache = viewProcessorApplyUserOverwrite(viewProcessor, curViewCache, writePath, childNode, writesCache, serverCache, accumulator);\n        }\n    });\n    return curViewCache;\n}\nfunction viewProcessorApplyMerge(viewProcessor, node, merge) {\n    merge.foreach((relativePath, childNode) => {\n        node = node.updateChild(relativePath, childNode);\n    });\n    return node;\n}\nfunction viewProcessorApplyServerMerge(viewProcessor, viewCache, path, changedChildren, writesCache, serverCache, filterServerNode, accumulator) {\n    // If we don't have a cache yet, this merge was intended for a previously listen in the same location. Ignore it and\n    // wait for the complete data update coming soon.\n    if (viewCache.serverCache.getNode().isEmpty() &&\n        !viewCache.serverCache.isFullyInitialized()) {\n        return viewCache;\n    }\n    // HACK: In the case of a limit query, there may be some changes that bump things out of the\n    // window leaving room for new items.  It's important we process these changes first, so we\n    // iterate the changes twice, first processing any that affect items currently in view.\n    // TODO: I consider an item \"in view\" if cacheHasChild is true, which checks both the server\n    // and event snap.  I'm not sure if this will result in edge cases when a child is in one but\n    // not the other.\n    let curViewCache = viewCache;\n    let viewMergeTree;\n    if (pathIsEmpty(path)) {\n        viewMergeTree = changedChildren;\n    }\n    else {\n        viewMergeTree = new ImmutableTree(null).setTree(path, changedChildren);\n    }\n    const serverNode = viewCache.serverCache.getNode();\n    viewMergeTree.children.inorderTraversal((childKey, childTree) => {\n        if (serverNode.hasChild(childKey)) {\n            const serverChild = viewCache.serverCache\n                .getNode()\n                .getImmediateChild(childKey);\n            const newChild = viewProcessorApplyMerge(viewProcessor, serverChild, childTree);\n            curViewCache = viewProcessorApplyServerOverwrite(viewProcessor, curViewCache, new Path(childKey), newChild, writesCache, serverCache, filterServerNode, accumulator);\n        }\n    });\n    viewMergeTree.children.inorderTraversal((childKey, childMergeTree) => {\n        const isUnknownDeepMerge = !viewCache.serverCache.isCompleteForChild(childKey) &&\n            childMergeTree.value === null;\n        if (!serverNode.hasChild(childKey) && !isUnknownDeepMerge) {\n            const serverChild = viewCache.serverCache\n                .getNode()\n                .getImmediateChild(childKey);\n            const newChild = viewProcessorApplyMerge(viewProcessor, serverChild, childMergeTree);\n            curViewCache = viewProcessorApplyServerOverwrite(viewProcessor, curViewCache, new Path(childKey), newChild, writesCache, serverCache, filterServerNode, accumulator);\n        }\n    });\n    return curViewCache;\n}\nfunction viewProcessorAckUserWrite(viewProcessor, viewCache, ackPath, affectedTree, writesCache, completeCache, accumulator) {\n    if (writeTreeRefShadowingWrite(writesCache, ackPath) != null) {\n        return viewCache;\n    }\n    // Only filter server node if it is currently filtered\n    const filterServerNode = viewCache.serverCache.isFiltered();\n    // Essentially we'll just get our existing server cache for the affected paths and re-apply it as a server update\n    // now that it won't be shadowed.\n    const serverCache = viewCache.serverCache;\n    if (affectedTree.value != null) {\n        // This is an overwrite.\n        if ((pathIsEmpty(ackPath) && serverCache.isFullyInitialized()) ||\n            serverCache.isCompleteForPath(ackPath)) {\n            return viewProcessorApplyServerOverwrite(viewProcessor, viewCache, ackPath, serverCache.getNode().getChild(ackPath), writesCache, completeCache, filterServerNode, accumulator);\n        }\n        else if (pathIsEmpty(ackPath)) {\n            // This is a goofy edge case where we are acking data at this location but don't have full data.  We\n            // should just re-apply whatever we have in our cache as a merge.\n            let changedChildren = new ImmutableTree(null);\n            serverCache.getNode().forEachChild(KEY_INDEX, (name, node) => {\n                changedChildren = changedChildren.set(new Path(name), node);\n            });\n            return viewProcessorApplyServerMerge(viewProcessor, viewCache, ackPath, changedChildren, writesCache, completeCache, filterServerNode, accumulator);\n        }\n        else {\n            return viewCache;\n        }\n    }\n    else {\n        // This is a merge.\n        let changedChildren = new ImmutableTree(null);\n        affectedTree.foreach((mergePath, value) => {\n            const serverCachePath = pathChild(ackPath, mergePath);\n            if (serverCache.isCompleteForPath(serverCachePath)) {\n                changedChildren = changedChildren.set(mergePath, serverCache.getNode().getChild(serverCachePath));\n            }\n        });\n        return viewProcessorApplyServerMerge(viewProcessor, viewCache, ackPath, changedChildren, writesCache, completeCache, filterServerNode, accumulator);\n    }\n}\nfunction viewProcessorListenComplete(viewProcessor, viewCache, path, writesCache, accumulator) {\n    const oldServerNode = viewCache.serverCache;\n    const newViewCache = viewCacheUpdateServerSnap(viewCache, oldServerNode.getNode(), oldServerNode.isFullyInitialized() || pathIsEmpty(path), oldServerNode.isFiltered());\n    return viewProcessorGenerateEventCacheAfterServerEvent(viewProcessor, newViewCache, path, writesCache, NO_COMPLETE_CHILD_SOURCE, accumulator);\n}\nfunction viewProcessorRevertUserWrite(viewProcessor, viewCache, path, writesCache, completeServerCache, accumulator) {\n    let complete;\n    if (writeTreeRefShadowingWrite(writesCache, path) != null) {\n        return viewCache;\n    }\n    else {\n        const source = new WriteTreeCompleteChildSource(writesCache, viewCache, completeServerCache);\n        const oldEventCache = viewCache.eventCache.getNode();\n        let newEventCache;\n        if (pathIsEmpty(path) || pathGetFront(path) === '.priority') {\n            let newNode;\n            if (viewCache.serverCache.isFullyInitialized()) {\n                newNode = writeTreeRefCalcCompleteEventCache(writesCache, viewCacheGetCompleteServerSnap(viewCache));\n            }\n            else {\n                const serverChildren = viewCache.serverCache.getNode();\n                assert(serverChildren instanceof ChildrenNode, 'serverChildren would be complete if leaf node');\n                newNode = writeTreeRefCalcCompleteEventChildren(writesCache, serverChildren);\n            }\n            newNode = newNode;\n            newEventCache = viewProcessor.filter.updateFullNode(oldEventCache, newNode, accumulator);\n        }\n        else {\n            const childKey = pathGetFront(path);\n            let newChild = writeTreeRefCalcCompleteChild(writesCache, childKey, viewCache.serverCache);\n            if (newChild == null &&\n                viewCache.serverCache.isCompleteForChild(childKey)) {\n                newChild = oldEventCache.getImmediateChild(childKey);\n            }\n            if (newChild != null) {\n                newEventCache = viewProcessor.filter.updateChild(oldEventCache, childKey, newChild, pathPopFront(path), source, accumulator);\n            }\n            else if (viewCache.eventCache.getNode().hasChild(childKey)) {\n                // No complete child available, delete the existing one, if any\n                newEventCache = viewProcessor.filter.updateChild(oldEventCache, childKey, ChildrenNode.EMPTY_NODE, pathPopFront(path), source, accumulator);\n            }\n            else {\n                newEventCache = oldEventCache;\n            }\n            if (newEventCache.isEmpty() &&\n                viewCache.serverCache.isFullyInitialized()) {\n                // We might have reverted all child writes. Maybe the old event was a leaf node\n                complete = writeTreeRefCalcCompleteEventCache(writesCache, viewCacheGetCompleteServerSnap(viewCache));\n                if (complete.isLeafNode()) {\n                    newEventCache = viewProcessor.filter.updateFullNode(newEventCache, complete, accumulator);\n                }\n            }\n        }\n        complete =\n            viewCache.serverCache.isFullyInitialized() ||\n                writeTreeRefShadowingWrite(writesCache, newEmptyPath()) != null;\n        return viewCacheUpdateEventSnap(viewCache, newEventCache, complete, viewProcessor.filter.filtersNodes());\n    }\n}\n\n/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * A view represents a specific location and query that has 1 or more event registrations.\n *\n * It does several things:\n *  - Maintains the list of event registrations for this location/query.\n *  - Maintains a cache of the data visible for this location/query.\n *  - Applies new operations (via applyOperation), updates the cache, and based on the event\n *    registrations returns the set of events to be raised.\n */\nclass View {\n    constructor(query_, initialViewCache) {\n        this.query_ = query_;\n        this.eventRegistrations_ = [];\n        const params = this.query_._queryParams;\n        const indexFilter = new IndexedFilter(params.getIndex());\n        const filter = queryParamsGetNodeFilter(params);\n        this.processor_ = newViewProcessor(filter);\n        const initialServerCache = initialViewCache.serverCache;\n        const initialEventCache = initialViewCache.eventCache;\n        // Don't filter server node with other filter than index, wait for tagged listen\n        const serverSnap = indexFilter.updateFullNode(ChildrenNode.EMPTY_NODE, initialServerCache.getNode(), null);\n        const eventSnap = filter.updateFullNode(ChildrenNode.EMPTY_NODE, initialEventCache.getNode(), null);\n        const newServerCache = new CacheNode(serverSnap, initialServerCache.isFullyInitialized(), indexFilter.filtersNodes());\n        const newEventCache = new CacheNode(eventSnap, initialEventCache.isFullyInitialized(), filter.filtersNodes());\n        this.viewCache_ = newViewCache(newEventCache, newServerCache);\n        this.eventGenerator_ = new EventGenerator(this.query_);\n    }\n    get query() {\n        return this.query_;\n    }\n}\nfunction viewGetServerCache(view) {\n    return view.viewCache_.serverCache.getNode();\n}\nfunction viewGetCompleteNode(view) {\n    return viewCacheGetCompleteEventSnap(view.viewCache_);\n}\nfunction viewGetCompleteServerCache(view, path) {\n    const cache = viewCacheGetCompleteServerSnap(view.viewCache_);\n    if (cache) {\n        // If this isn't a \"loadsAllData\" view, then cache isn't actually a complete cache and\n        // we need to see if it contains the child we're interested in.\n        if (view.query._queryParams.loadsAllData() ||\n            (!pathIsEmpty(path) &&\n                !cache.getImmediateChild(pathGetFront(path)).isEmpty())) {\n            return cache.getChild(path);\n        }\n    }\n    return null;\n}\nfunction viewIsEmpty(view) {\n    return view.eventRegistrations_.length === 0;\n}\nfunction viewAddEventRegistration(view, eventRegistration) {\n    view.eventRegistrations_.push(eventRegistration);\n}\n/**\n * @param eventRegistration - If null, remove all callbacks.\n * @param cancelError - If a cancelError is provided, appropriate cancel events will be returned.\n * @returns Cancel events, if cancelError was provided.\n */\nfunction viewRemoveEventRegistration(view, eventRegistration, cancelError) {\n    const cancelEvents = [];\n    if (cancelError) {\n        assert(eventRegistration == null, 'A cancel should cancel all event registrations.');\n        const path = view.query._path;\n        view.eventRegistrations_.forEach(registration => {\n            const maybeEvent = registration.createCancelEvent(cancelError, path);\n            if (maybeEvent) {\n                cancelEvents.push(maybeEvent);\n            }\n        });\n    }\n    if (eventRegistration) {\n        let remaining = [];\n        for (let i = 0; i < view.eventRegistrations_.length; ++i) {\n            const existing = view.eventRegistrations_[i];\n            if (!existing.matches(eventRegistration)) {\n                remaining.push(existing);\n            }\n            else if (eventRegistration.hasAnyCallback()) {\n                // We're removing just this one\n                remaining = remaining.concat(view.eventRegistrations_.slice(i + 1));\n                break;\n            }\n        }\n        view.eventRegistrations_ = remaining;\n    }\n    else {\n        view.eventRegistrations_ = [];\n    }\n    return cancelEvents;\n}\n/**\n * Applies the given Operation, updates our cache, and returns the appropriate events.\n */\nfunction viewApplyOperation(view, operation, writesCache, completeServerCache) {\n    if (operation.type === OperationType.MERGE &&\n        operation.source.queryId !== null) {\n        assert(viewCacheGetCompleteServerSnap(view.viewCache_), 'We should always have a full cache before handling merges');\n        assert(viewCacheGetCompleteEventSnap(view.viewCache_), 'Missing event cache, even though we have a server cache');\n    }\n    const oldViewCache = view.viewCache_;\n    const result = viewProcessorApplyOperation(view.processor_, oldViewCache, operation, writesCache, completeServerCache);\n    viewProcessorAssertIndexed(view.processor_, result.viewCache);\n    assert(result.viewCache.serverCache.isFullyInitialized() ||\n        !oldViewCache.serverCache.isFullyInitialized(), 'Once a server snap is complete, it should never go back');\n    view.viewCache_ = result.viewCache;\n    return viewGenerateEventsForChanges_(view, result.changes, result.viewCache.eventCache.getNode(), null);\n}\nfunction viewGetInitialEvents(view, registration) {\n    const eventSnap = view.viewCache_.eventCache;\n    const initialChanges = [];\n    if (!eventSnap.getNode().isLeafNode()) {\n        const eventNode = eventSnap.getNode();\n        eventNode.forEachChild(PRIORITY_INDEX, (key, childNode) => {\n            initialChanges.push(changeChildAdded(key, childNode));\n        });\n    }\n    if (eventSnap.isFullyInitialized()) {\n        initialChanges.push(changeValue(eventSnap.getNode()));\n    }\n    return viewGenerateEventsForChanges_(view, initialChanges, eventSnap.getNode(), registration);\n}\nfunction viewGenerateEventsForChanges_(view, changes, eventCache, eventRegistration) {\n    const registrations = eventRegistration\n        ? [eventRegistration]\n        : view.eventRegistrations_;\n    return eventGeneratorGenerateEventsForChanges(view.eventGenerator_, changes, eventCache, registrations);\n}\n\n/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nlet referenceConstructor$1;\n/**\n * SyncPoint represents a single location in a SyncTree with 1 or more event registrations, meaning we need to\n * maintain 1 or more Views at this location to cache server data and raise appropriate events for server changes\n * and user writes (set, transaction, update).\n *\n * It's responsible for:\n *  - Maintaining the set of 1 or more views necessary at this location (a SyncPoint with 0 views should be removed).\n *  - Proxying user / server operations to the views as appropriate (i.e. applyServerOverwrite,\n *    applyUserOverwrite, etc.)\n */\nclass SyncPoint {\n    constructor() {\n        /**\n         * The Views being tracked at this location in the tree, stored as a map where the key is a\n         * queryId and the value is the View for that query.\n         *\n         * NOTE: This list will be quite small (usually 1, but perhaps 2 or 3; any more is an odd use case).\n         */\n        this.views = new Map();\n    }\n}\nfunction syncPointSetReferenceConstructor(val) {\n    assert(!referenceConstructor$1, '__referenceConstructor has already been defined');\n    referenceConstructor$1 = val;\n}\nfunction syncPointGetReferenceConstructor() {\n    assert(referenceConstructor$1, 'Reference.ts has not been loaded');\n    return referenceConstructor$1;\n}\nfunction syncPointIsEmpty(syncPoint) {\n    return syncPoint.views.size === 0;\n}\nfunction syncPointApplyOperation(syncPoint, operation, writesCache, optCompleteServerCache) {\n    const queryId = operation.source.queryId;\n    if (queryId !== null) {\n        const view = syncPoint.views.get(queryId);\n        assert(view != null, 'SyncTree gave us an op for an invalid query.');\n        return viewApplyOperation(view, operation, writesCache, optCompleteServerCache);\n    }\n    else {\n        let events = [];\n        for (const view of syncPoint.views.values()) {\n            events = events.concat(viewApplyOperation(view, operation, writesCache, optCompleteServerCache));\n        }\n        return events;\n    }\n}\n/**\n * Get a view for the specified query.\n *\n * @param query - The query to return a view for\n * @param writesCache\n * @param serverCache\n * @param serverCacheComplete\n * @returns Events to raise.\n */\nfunction syncPointGetView(syncPoint, query, writesCache, serverCache, serverCacheComplete) {\n    const queryId = query._queryIdentifier;\n    const view = syncPoint.views.get(queryId);\n    if (!view) {\n        // TODO: make writesCache take flag for complete server node\n        let eventCache = writeTreeRefCalcCompleteEventCache(writesCache, serverCacheComplete ? serverCache : null);\n        let eventCacheComplete = false;\n        if (eventCache) {\n            eventCacheComplete = true;\n        }\n        else if (serverCache instanceof ChildrenNode) {\n            eventCache = writeTreeRefCalcCompleteEventChildren(writesCache, serverCache);\n            eventCacheComplete = false;\n        }\n        else {\n            eventCache = ChildrenNode.EMPTY_NODE;\n            eventCacheComplete = false;\n        }\n        const viewCache = newViewCache(new CacheNode(eventCache, eventCacheComplete, false), new CacheNode(serverCache, serverCacheComplete, false));\n        return new View(query, viewCache);\n    }\n    return view;\n}\n/**\n * Add an event callback for the specified query.\n *\n * @param query\n * @param eventRegistration\n * @param writesCache\n * @param serverCache - Complete server cache, if we have it.\n * @param serverCacheComplete\n * @returns Events to raise.\n */\nfunction syncPointAddEventRegistration(syncPoint, query, eventRegistration, writesCache, serverCache, serverCacheComplete) {\n    const view = syncPointGetView(syncPoint, query, writesCache, serverCache, serverCacheComplete);\n    if (!syncPoint.views.has(query._queryIdentifier)) {\n        syncPoint.views.set(query._queryIdentifier, view);\n    }\n    // This is guaranteed to exist now, we just created anything that was missing\n    viewAddEventRegistration(view, eventRegistration);\n    return viewGetInitialEvents(view, eventRegistration);\n}\n/**\n * Remove event callback(s).  Return cancelEvents if a cancelError is specified.\n *\n * If query is the default query, we'll check all views for the specified eventRegistration.\n * If eventRegistration is null, we'll remove all callbacks for the specified view(s).\n *\n * @param eventRegistration - If null, remove all callbacks.\n * @param cancelError - If a cancelError is provided, appropriate cancel events will be returned.\n * @returns removed queries and any cancel events\n */\nfunction syncPointRemoveEventRegistration(syncPoint, query, eventRegistration, cancelError) {\n    const queryId = query._queryIdentifier;\n    const removed = [];\n    let cancelEvents = [];\n    const hadCompleteView = syncPointHasCompleteView(syncPoint);\n    if (queryId === 'default') {\n        // When you do ref.off(...), we search all views for the registration to remove.\n        for (const [viewQueryId, view] of syncPoint.views.entries()) {\n            cancelEvents = cancelEvents.concat(viewRemoveEventRegistration(view, eventRegistration, cancelError));\n            if (viewIsEmpty(view)) {\n                syncPoint.views.delete(viewQueryId);\n                // We'll deal with complete views later.\n                if (!view.query._queryParams.loadsAllData()) {\n                    removed.push(view.query);\n                }\n            }\n        }\n    }\n    else {\n        // remove the callback from the specific view.\n        const view = syncPoint.views.get(queryId);\n        if (view) {\n            cancelEvents = cancelEvents.concat(viewRemoveEventRegistration(view, eventRegistration, cancelError));\n            if (viewIsEmpty(view)) {\n                syncPoint.views.delete(queryId);\n                // We'll deal with complete views later.\n                if (!view.query._queryParams.loadsAllData()) {\n                    removed.push(view.query);\n                }\n            }\n        }\n    }\n    if (hadCompleteView && !syncPointHasCompleteView(syncPoint)) {\n        // We removed our last complete view.\n        removed.push(new (syncPointGetReferenceConstructor())(query._repo, query._path));\n    }\n    return { removed, events: cancelEvents };\n}\nfunction syncPointGetQueryViews(syncPoint) {\n    const result = [];\n    for (const view of syncPoint.views.values()) {\n        if (!view.query._queryParams.loadsAllData()) {\n            result.push(view);\n        }\n    }\n    return result;\n}\n/**\n * @param path - The path to the desired complete snapshot\n * @returns A complete cache, if it exists\n */\nfunction syncPointGetCompleteServerCache(syncPoint, path) {\n    let serverCache = null;\n    for (const view of syncPoint.views.values()) {\n        serverCache = serverCache || viewGetCompleteServerCache(view, path);\n    }\n    return serverCache;\n}\nfunction syncPointViewForQuery(syncPoint, query) {\n    const params = query._queryParams;\n    if (params.loadsAllData()) {\n        return syncPointGetCompleteView(syncPoint);\n    }\n    else {\n        const queryId = query._queryIdentifier;\n        return syncPoint.views.get(queryId);\n    }\n}\nfunction syncPointViewExistsForQuery(syncPoint, query) {\n    return syncPointViewForQuery(syncPoint, query) != null;\n}\nfunction syncPointHasCompleteView(syncPoint) {\n    return syncPointGetCompleteView(syncPoint) != null;\n}\nfunction syncPointGetCompleteView(syncPoint) {\n    for (const view of syncPoint.views.values()) {\n        if (view.query._queryParams.loadsAllData()) {\n            return view;\n        }\n    }\n    return null;\n}\n\n/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nlet referenceConstructor;\nfunction syncTreeSetReferenceConstructor(val) {\n    assert(!referenceConstructor, '__referenceConstructor has already been defined');\n    referenceConstructor = val;\n}\nfunction syncTreeGetReferenceConstructor() {\n    assert(referenceConstructor, 'Reference.ts has not been loaded');\n    return referenceConstructor;\n}\n/**\n * Static tracker for next query tag.\n */\nlet syncTreeNextQueryTag_ = 1;\n/**\n * SyncTree is the central class for managing event callback registration, data caching, views\n * (query processing), and event generation.  There are typically two SyncTree instances for\n * each Repo, one for the normal Firebase data, and one for the .info data.\n *\n * It has a number of responsibilities, including:\n *  - Tracking all user event callbacks (registered via addEventRegistration() and removeEventRegistration()).\n *  - Applying and caching data changes for user set(), transaction(), and update() calls\n *    (applyUserOverwrite(), applyUserMerge()).\n *  - Applying and caching data changes for server data changes (applyServerOverwrite(),\n *    applyServerMerge()).\n *  - Generating user-facing events for server and user changes (all of the apply* methods\n *    return the set of events that need to be raised as a result).\n *  - Maintaining the appropriate set of server listens to ensure we are always subscribed\n *    to the correct set of paths and queries to satisfy the current set of user event\n *    callbacks (listens are started/stopped using the provided listenProvider).\n *\n * NOTE: Although SyncTree tracks event callbacks and calculates events to raise, the actual\n * events are returned to the caller rather than raised synchronously.\n *\n */\nclass SyncTree {\n    /**\n     * @param listenProvider_ - Used by SyncTree to start / stop listening\n     *   to server data.\n     */\n    constructor(listenProvider_) {\n        this.listenProvider_ = listenProvider_;\n        /**\n         * Tree of SyncPoints.  There's a SyncPoint at any location that has 1 or more views.\n         */\n        this.syncPointTree_ = new ImmutableTree(null);\n        /**\n         * A tree of all pending user writes (user-initiated set()'s, transaction()'s, update()'s, etc.).\n         */\n        this.pendingWriteTree_ = newWriteTree();\n        this.tagToQueryMap = new Map();\n        this.queryToTagMap = new Map();\n    }\n}\n/**\n * Apply the data changes for a user-generated set() or transaction() call.\n *\n * @returns Events to raise.\n */\nfunction syncTreeApplyUserOverwrite(syncTree, path, newData, writeId, visible) {\n    // Record pending write.\n    writeTreeAddOverwrite(syncTree.pendingWriteTree_, path, newData, writeId, visible);\n    if (!visible) {\n        return [];\n    }\n    else {\n        return syncTreeApplyOperationToSyncPoints_(syncTree, new Overwrite(newOperationSourceUser(), path, newData));\n    }\n}\n/**\n * Apply the data from a user-generated update() call\n *\n * @returns Events to raise.\n */\nfunction syncTreeApplyUserMerge(syncTree, path, changedChildren, writeId) {\n    // Record pending merge.\n    writeTreeAddMerge(syncTree.pendingWriteTree_, path, changedChildren, writeId);\n    const changeTree = ImmutableTree.fromObject(changedChildren);\n    return syncTreeApplyOperationToSyncPoints_(syncTree, new Merge(newOperationSourceUser(), path, changeTree));\n}\n/**\n * Acknowledge a pending user write that was previously registered with applyUserOverwrite() or applyUserMerge().\n *\n * @param revert - True if the given write failed and needs to be reverted\n * @returns Events to raise.\n */\nfunction syncTreeAckUserWrite(syncTree, writeId, revert = false) {\n    const write = writeTreeGetWrite(syncTree.pendingWriteTree_, writeId);\n    const needToReevaluate = writeTreeRemoveWrite(syncTree.pendingWriteTree_, writeId);\n    if (!needToReevaluate) {\n        return [];\n    }\n    else {\n        let affectedTree = new ImmutableTree(null);\n        if (write.snap != null) {\n            // overwrite\n            affectedTree = affectedTree.set(newEmptyPath(), true);\n        }\n        else {\n            each(write.children, (pathString) => {\n                affectedTree = affectedTree.set(new Path(pathString), true);\n            });\n        }\n        return syncTreeApplyOperationToSyncPoints_(syncTree, new AckUserWrite(write.path, affectedTree, revert));\n    }\n}\n/**\n * Apply new server data for the specified path..\n *\n * @returns Events to raise.\n */\nfunction syncTreeApplyServerOverwrite(syncTree, path, newData) {\n    return syncTreeApplyOperationToSyncPoints_(syncTree, new Overwrite(newOperationSourceServer(), path, newData));\n}\n/**\n * Apply new server data to be merged in at the specified path.\n *\n * @returns Events to raise.\n */\nfunction syncTreeApplyServerMerge(syncTree, path, changedChildren) {\n    const changeTree = ImmutableTree.fromObject(changedChildren);\n    return syncTreeApplyOperationToSyncPoints_(syncTree, new Merge(newOperationSourceServer(), path, changeTree));\n}\n/**\n * Apply a listen complete for a query\n *\n * @returns Events to raise.\n */\nfunction syncTreeApplyListenComplete(syncTree, path) {\n    return syncTreeApplyOperationToSyncPoints_(syncTree, new ListenComplete(newOperationSourceServer(), path));\n}\n/**\n * Apply a listen complete for a tagged query\n *\n * @returns Events to raise.\n */\nfunction syncTreeApplyTaggedListenComplete(syncTree, path, tag) {\n    const queryKey = syncTreeQueryKeyForTag_(syncTree, tag);\n    if (queryKey) {\n        const r = syncTreeParseQueryKey_(queryKey);\n        const queryPath = r.path, queryId = r.queryId;\n        const relativePath = newRelativePath(queryPath, path);\n        const op = new ListenComplete(newOperationSourceServerTaggedQuery(queryId), relativePath);\n        return syncTreeApplyTaggedOperation_(syncTree, queryPath, op);\n    }\n    else {\n        // We've already removed the query. No big deal, ignore the update\n        return [];\n    }\n}\n/**\n * Remove event callback(s).\n *\n * If query is the default query, we'll check all queries for the specified eventRegistration.\n * If eventRegistration is null, we'll remove all callbacks for the specified query/queries.\n *\n * @param eventRegistration - If null, all callbacks are removed.\n * @param cancelError - If a cancelError is provided, appropriate cancel events will be returned.\n * @param skipListenerDedup - When performing a `get()`, we don't add any new listeners, so no\n *  deduping needs to take place. This flag allows toggling of that behavior\n * @returns Cancel events, if cancelError was provided.\n */\nfunction syncTreeRemoveEventRegistration(syncTree, query, eventRegistration, cancelError, skipListenerDedup = false) {\n    // Find the syncPoint first. Then deal with whether or not it has matching listeners\n    const path = query._path;\n    const maybeSyncPoint = syncTree.syncPointTree_.get(path);\n    let cancelEvents = [];\n    // A removal on a default query affects all queries at that location. A removal on an indexed query, even one without\n    // other query constraints, does *not* affect all queries at that location. So this check must be for 'default', and\n    // not loadsAllData().\n    if (maybeSyncPoint &&\n        (query._queryIdentifier === 'default' ||\n            syncPointViewExistsForQuery(maybeSyncPoint, query))) {\n        const removedAndEvents = syncPointRemoveEventRegistration(maybeSyncPoint, query, eventRegistration, cancelError);\n        if (syncPointIsEmpty(maybeSyncPoint)) {\n            syncTree.syncPointTree_ = syncTree.syncPointTree_.remove(path);\n        }\n        const removed = removedAndEvents.removed;\n        cancelEvents = removedAndEvents.events;\n        if (!skipListenerDedup) {\n            /**\n             * We may have just removed one of many listeners and can short-circuit this whole process\n             * We may also not have removed a default listener, in which case all of the descendant listeners should already be\n             * properly set up.\n             */\n            // Since indexed queries can shadow if they don't have other query constraints, check for loadsAllData(), instead of\n            // queryId === 'default'\n            const removingDefault = -1 !==\n                removed.findIndex(query => {\n                    return query._queryParams.loadsAllData();\n                });\n            const covered = syncTree.syncPointTree_.findOnPath(path, (relativePath, parentSyncPoint) => syncPointHasCompleteView(parentSyncPoint));\n            if (removingDefault && !covered) {\n                const subtree = syncTree.syncPointTree_.subtree(path);\n                // There are potentially child listeners. Determine what if any listens we need to send before executing the\n                // removal\n                if (!subtree.isEmpty()) {\n                    // We need to fold over our subtree and collect the listeners to send\n                    const newViews = syncTreeCollectDistinctViewsForSubTree_(subtree);\n                    // Ok, we've collected all the listens we need. Set them up.\n                    for (let i = 0; i < newViews.length; ++i) {\n                        const view = newViews[i], newQuery = view.query;\n                        const listener = syncTreeCreateListenerForView_(syncTree, view);\n                        syncTree.listenProvider_.startListening(syncTreeQueryForListening_(newQuery), syncTreeTagForQuery(syncTree, newQuery), listener.hashFn, listener.onComplete);\n                    }\n                }\n                // Otherwise there's nothing below us, so nothing we need to start listening on\n            }\n            // If we removed anything and we're not covered by a higher up listen, we need to stop listening on this query\n            // The above block has us covered in terms of making sure we're set up on listens lower in the tree.\n            // Also, note that if we have a cancelError, it's already been removed at the provider level.\n            if (!covered && removed.length > 0 && !cancelError) {\n                // If we removed a default, then we weren't listening on any of the other queries here. Just cancel the one\n                // default. Otherwise, we need to iterate through and cancel each individual query\n                if (removingDefault) {\n                    // We don't tag default listeners\n                    const defaultTag = null;\n                    syncTree.listenProvider_.stopListening(syncTreeQueryForListening_(query), defaultTag);\n                }\n                else {\n                    removed.forEach((queryToRemove) => {\n                        const tagToRemove = syncTree.queryToTagMap.get(syncTreeMakeQueryKey_(queryToRemove));\n                        syncTree.listenProvider_.stopListening(syncTreeQueryForListening_(queryToRemove), tagToRemove);\n                    });\n                }\n            }\n        }\n        // Now, clear all of the tags we're tracking for the removed listens\n        syncTreeRemoveTags_(syncTree, removed);\n    }\n    return cancelEvents;\n}\n/**\n * Apply new server data for the specified tagged query.\n *\n * @returns Events to raise.\n */\nfunction syncTreeApplyTaggedQueryOverwrite(syncTree, path, snap, tag) {\n    const queryKey = syncTreeQueryKeyForTag_(syncTree, tag);\n    if (queryKey != null) {\n        const r = syncTreeParseQueryKey_(queryKey);\n        const queryPath = r.path, queryId = r.queryId;\n        const relativePath = newRelativePath(queryPath, path);\n        const op = new Overwrite(newOperationSourceServerTaggedQuery(queryId), relativePath, snap);\n        return syncTreeApplyTaggedOperation_(syncTree, queryPath, op);\n    }\n    else {\n        // Query must have been removed already\n        return [];\n    }\n}\n/**\n * Apply server data to be merged in for the specified tagged query.\n *\n * @returns Events to raise.\n */\nfunction syncTreeApplyTaggedQueryMerge(syncTree, path, changedChildren, tag) {\n    const queryKey = syncTreeQueryKeyForTag_(syncTree, tag);\n    if (queryKey) {\n        const r = syncTreeParseQueryKey_(queryKey);\n        const queryPath = r.path, queryId = r.queryId;\n        const relativePath = newRelativePath(queryPath, path);\n        const changeTree = ImmutableTree.fromObject(changedChildren);\n        const op = new Merge(newOperationSourceServerTaggedQuery(queryId), relativePath, changeTree);\n        return syncTreeApplyTaggedOperation_(syncTree, queryPath, op);\n    }\n    else {\n        // We've already removed the query. No big deal, ignore the update\n        return [];\n    }\n}\n/**\n * Add an event callback for the specified query.\n *\n * @returns Events to raise.\n */\nfunction syncTreeAddEventRegistration(syncTree, query, eventRegistration, skipSetupListener = false) {\n    const path = query._path;\n    let serverCache = null;\n    let foundAncestorDefaultView = false;\n    // Any covering writes will necessarily be at the root, so really all we need to find is the server cache.\n    // Consider optimizing this once there's a better understanding of what actual behavior will be.\n    syncTree.syncPointTree_.foreachOnPath(path, (pathToSyncPoint, sp) => {\n        const relativePath = newRelativePath(pathToSyncPoint, path);\n        serverCache =\n            serverCache || syncPointGetCompleteServerCache(sp, relativePath);\n        foundAncestorDefaultView =\n            foundAncestorDefaultView || syncPointHasCompleteView(sp);\n    });\n    let syncPoint = syncTree.syncPointTree_.get(path);\n    if (!syncPoint) {\n        syncPoint = new SyncPoint();\n        syncTree.syncPointTree_ = syncTree.syncPointTree_.set(path, syncPoint);\n    }\n    else {\n        foundAncestorDefaultView =\n            foundAncestorDefaultView || syncPointHasCompleteView(syncPoint);\n        serverCache =\n            serverCache || syncPointGetCompleteServerCache(syncPoint, newEmptyPath());\n    }\n    let serverCacheComplete;\n    if (serverCache != null) {\n        serverCacheComplete = true;\n    }\n    else {\n        serverCacheComplete = false;\n        serverCache = ChildrenNode.EMPTY_NODE;\n        const subtree = syncTree.syncPointTree_.subtree(path);\n        subtree.foreachChild((childName, childSyncPoint) => {\n            const completeCache = syncPointGetCompleteServerCache(childSyncPoint, newEmptyPath());\n            if (completeCache) {\n                serverCache = serverCache.updateImmediateChild(childName, completeCache);\n            }\n        });\n    }\n    const viewAlreadyExists = syncPointViewExistsForQuery(syncPoint, query);\n    if (!viewAlreadyExists && !query._queryParams.loadsAllData()) {\n        // We need to track a tag for this query\n        const queryKey = syncTreeMakeQueryKey_(query);\n        assert(!syncTree.queryToTagMap.has(queryKey), 'View does not exist, but we have a tag');\n        const tag = syncTreeGetNextQueryTag_();\n        syncTree.queryToTagMap.set(queryKey, tag);\n        syncTree.tagToQueryMap.set(tag, queryKey);\n    }\n    const writesCache = writeTreeChildWrites(syncTree.pendingWriteTree_, path);\n    let events = syncPointAddEventRegistration(syncPoint, query, eventRegistration, writesCache, serverCache, serverCacheComplete);\n    if (!viewAlreadyExists && !foundAncestorDefaultView && !skipSetupListener) {\n        const view = syncPointViewForQuery(syncPoint, query);\n        events = events.concat(syncTreeSetupListener_(syncTree, query, view));\n    }\n    return events;\n}\n/**\n * Returns a complete cache, if we have one, of the data at a particular path. If the location does not have a\n * listener above it, we will get a false \"null\". This shouldn't be a problem because transactions will always\n * have a listener above, and atomic operations would correctly show a jitter of <increment value> ->\n *     <incremented total> as the write is applied locally and then acknowledged at the server.\n *\n * Note: this method will *include* hidden writes from transaction with applyLocally set to false.\n *\n * @param path - The path to the data we want\n * @param writeIdsToExclude - A specific set to be excluded\n */\nfunction syncTreeCalcCompleteEventCache(syncTree, path, writeIdsToExclude) {\n    const includeHiddenSets = true;\n    const writeTree = syncTree.pendingWriteTree_;\n    const serverCache = syncTree.syncPointTree_.findOnPath(path, (pathSoFar, syncPoint) => {\n        const relativePath = newRelativePath(pathSoFar, path);\n        const serverCache = syncPointGetCompleteServerCache(syncPoint, relativePath);\n        if (serverCache) {\n            return serverCache;\n        }\n    });\n    return writeTreeCalcCompleteEventCache(writeTree, path, serverCache, writeIdsToExclude, includeHiddenSets);\n}\nfunction syncTreeGetServerValue(syncTree, query) {\n    const path = query._path;\n    let serverCache = null;\n    // Any covering writes will necessarily be at the root, so really all we need to find is the server cache.\n    // Consider optimizing this once there's a better understanding of what actual behavior will be.\n    syncTree.syncPointTree_.foreachOnPath(path, (pathToSyncPoint, sp) => {\n        const relativePath = newRelativePath(pathToSyncPoint, path);\n        serverCache =\n            serverCache || syncPointGetCompleteServerCache(sp, relativePath);\n    });\n    let syncPoint = syncTree.syncPointTree_.get(path);\n    if (!syncPoint) {\n        syncPoint = new SyncPoint();\n        syncTree.syncPointTree_ = syncTree.syncPointTree_.set(path, syncPoint);\n    }\n    else {\n        serverCache =\n            serverCache || syncPointGetCompleteServerCache(syncPoint, newEmptyPath());\n    }\n    const serverCacheComplete = serverCache != null;\n    const serverCacheNode = serverCacheComplete\n        ? new CacheNode(serverCache, true, false)\n        : null;\n    const writesCache = writeTreeChildWrites(syncTree.pendingWriteTree_, query._path);\n    const view = syncPointGetView(syncPoint, query, writesCache, serverCacheComplete ? serverCacheNode.getNode() : ChildrenNode.EMPTY_NODE, serverCacheComplete);\n    return viewGetCompleteNode(view);\n}\n/**\n * A helper method that visits all descendant and ancestor SyncPoints, applying the operation.\n *\n * NOTES:\n * - Descendant SyncPoints will be visited first (since we raise events depth-first).\n *\n * - We call applyOperation() on each SyncPoint passing three things:\n *   1. A version of the Operation that has been made relative to the SyncPoint location.\n *   2. A WriteTreeRef of any writes we have cached at the SyncPoint location.\n *   3. A snapshot Node with cached server data, if we have it.\n *\n * - We concatenate all of the events returned by each SyncPoint and return the result.\n */\nfunction syncTreeApplyOperationToSyncPoints_(syncTree, operation) {\n    return syncTreeApplyOperationHelper_(operation, syncTree.syncPointTree_, \n    /*serverCache=*/ null, writeTreeChildWrites(syncTree.pendingWriteTree_, newEmptyPath()));\n}\n/**\n * Recursive helper for applyOperationToSyncPoints_\n */\nfunction syncTreeApplyOperationHelper_(operation, syncPointTree, serverCache, writesCache) {\n    if (pathIsEmpty(operation.path)) {\n        return syncTreeApplyOperationDescendantsHelper_(operation, syncPointTree, serverCache, writesCache);\n    }\n    else {\n        const syncPoint = syncPointTree.get(newEmptyPath());\n        // If we don't have cached server data, see if we can get it from this SyncPoint.\n        if (serverCache == null && syncPoint != null) {\n            serverCache = syncPointGetCompleteServerCache(syncPoint, newEmptyPath());\n        }\n        let events = [];\n        const childName = pathGetFront(operation.path);\n        const childOperation = operation.operationForChild(childName);\n        const childTree = syncPointTree.children.get(childName);\n        if (childTree && childOperation) {\n            const childServerCache = serverCache\n                ? serverCache.getImmediateChild(childName)\n                : null;\n            const childWritesCache = writeTreeRefChild(writesCache, childName);\n            events = events.concat(syncTreeApplyOperationHelper_(childOperation, childTree, childServerCache, childWritesCache));\n        }\n        if (syncPoint) {\n            events = events.concat(syncPointApplyOperation(syncPoint, operation, writesCache, serverCache));\n        }\n        return events;\n    }\n}\n/**\n * Recursive helper for applyOperationToSyncPoints_\n */\nfunction syncTreeApplyOperationDescendantsHelper_(operation, syncPointTree, serverCache, writesCache) {\n    const syncPoint = syncPointTree.get(newEmptyPath());\n    // If we don't have cached server data, see if we can get it from this SyncPoint.\n    if (serverCache == null && syncPoint != null) {\n        serverCache = syncPointGetCompleteServerCache(syncPoint, newEmptyPath());\n    }\n    let events = [];\n    syncPointTree.children.inorderTraversal((childName, childTree) => {\n        const childServerCache = serverCache\n            ? serverCache.getImmediateChild(childName)\n            : null;\n        const childWritesCache = writeTreeRefChild(writesCache, childName);\n        const childOperation = operation.operationForChild(childName);\n        if (childOperation) {\n            events = events.concat(syncTreeApplyOperationDescendantsHelper_(childOperation, childTree, childServerCache, childWritesCache));\n        }\n    });\n    if (syncPoint) {\n        events = events.concat(syncPointApplyOperation(syncPoint, operation, writesCache, serverCache));\n    }\n    return events;\n}\nfunction syncTreeCreateListenerForView_(syncTree, view) {\n    const query = view.query;\n    const tag = syncTreeTagForQuery(syncTree, query);\n    return {\n        hashFn: () => {\n            const cache = viewGetServerCache(view) || ChildrenNode.EMPTY_NODE;\n            return cache.hash();\n        },\n        onComplete: (status) => {\n            if (status === 'ok') {\n                if (tag) {\n                    return syncTreeApplyTaggedListenComplete(syncTree, query._path, tag);\n                }\n                else {\n                    return syncTreeApplyListenComplete(syncTree, query._path);\n                }\n            }\n            else {\n                // If a listen failed, kill all of the listeners here, not just the one that triggered the error.\n                // Note that this may need to be scoped to just this listener if we change permissions on filtered children\n                const error = errorForServerCode(status, query);\n                return syncTreeRemoveEventRegistration(syncTree, query, \n                /*eventRegistration*/ null, error);\n            }\n        }\n    };\n}\n/**\n * Return the tag associated with the given query.\n */\nfunction syncTreeTagForQuery(syncTree, query) {\n    const queryKey = syncTreeMakeQueryKey_(query);\n    return syncTree.queryToTagMap.get(queryKey);\n}\n/**\n * Given a query, computes a \"queryKey\" suitable for use in our queryToTagMap_.\n */\nfunction syncTreeMakeQueryKey_(query) {\n    return query._path.toString() + '$' + query._queryIdentifier;\n}\n/**\n * Return the query associated with the given tag, if we have one\n */\nfunction syncTreeQueryKeyForTag_(syncTree, tag) {\n    return syncTree.tagToQueryMap.get(tag);\n}\n/**\n * Given a queryKey (created by makeQueryKey), parse it back into a path and queryId.\n */\nfunction syncTreeParseQueryKey_(queryKey) {\n    const splitIndex = queryKey.indexOf('$');\n    assert(splitIndex !== -1 && splitIndex < queryKey.length - 1, 'Bad queryKey.');\n    return {\n        queryId: queryKey.substr(splitIndex + 1),\n        path: new Path(queryKey.substr(0, splitIndex))\n    };\n}\n/**\n * A helper method to apply tagged operations\n */\nfunction syncTreeApplyTaggedOperation_(syncTree, queryPath, operation) {\n    const syncPoint = syncTree.syncPointTree_.get(queryPath);\n    assert(syncPoint, \"Missing sync point for query tag that we're tracking\");\n    const writesCache = writeTreeChildWrites(syncTree.pendingWriteTree_, queryPath);\n    return syncPointApplyOperation(syncPoint, operation, writesCache, null);\n}\n/**\n * This collapses multiple unfiltered views into a single view, since we only need a single\n * listener for them.\n */\nfunction syncTreeCollectDistinctViewsForSubTree_(subtree) {\n    return subtree.fold((relativePath, maybeChildSyncPoint, childMap) => {\n        if (maybeChildSyncPoint && syncPointHasCompleteView(maybeChildSyncPoint)) {\n            const completeView = syncPointGetCompleteView(maybeChildSyncPoint);\n            return [completeView];\n        }\n        else {\n            // No complete view here, flatten any deeper listens into an array\n            let views = [];\n            if (maybeChildSyncPoint) {\n                views = syncPointGetQueryViews(maybeChildSyncPoint);\n            }\n            each(childMap, (_key, childViews) => {\n                views = views.concat(childViews);\n            });\n            return views;\n        }\n    });\n}\n/**\n * Normalizes a query to a query we send the server for listening\n *\n * @returns The normalized query\n */\nfunction syncTreeQueryForListening_(query) {\n    if (query._queryParams.loadsAllData() && !query._queryParams.isDefault()) {\n        // We treat queries that load all data as default queries\n        // Cast is necessary because ref() technically returns Firebase which is actually fb.api.Firebase which inherits\n        // from Query\n        return new (syncTreeGetReferenceConstructor())(query._repo, query._path);\n    }\n    else {\n        return query;\n    }\n}\nfunction syncTreeRemoveTags_(syncTree, queries) {\n    for (let j = 0; j < queries.length; ++j) {\n        const removedQuery = queries[j];\n        if (!removedQuery._queryParams.loadsAllData()) {\n            // We should have a tag for this\n            const removedQueryKey = syncTreeMakeQueryKey_(removedQuery);\n            const removedQueryTag = syncTree.queryToTagMap.get(removedQueryKey);\n            syncTree.queryToTagMap.delete(removedQueryKey);\n            syncTree.tagToQueryMap.delete(removedQueryTag);\n        }\n    }\n}\n/**\n * Static accessor for query tags.\n */\nfunction syncTreeGetNextQueryTag_() {\n    return syncTreeNextQueryTag_++;\n}\n/**\n * For a given new listen, manage the de-duplication of outstanding subscriptions.\n *\n * @returns This method can return events to support synchronous data sources\n */\nfunction syncTreeSetupListener_(syncTree, query, view) {\n    const path = query._path;\n    const tag = syncTreeTagForQuery(syncTree, query);\n    const listener = syncTreeCreateListenerForView_(syncTree, view);\n    const events = syncTree.listenProvider_.startListening(syncTreeQueryForListening_(query), tag, listener.hashFn, listener.onComplete);\n    const subtree = syncTree.syncPointTree_.subtree(path);\n    // The root of this subtree has our query. We're here because we definitely need to send a listen for that, but we\n    // may need to shadow other listens as well.\n    if (tag) {\n        assert(!syncPointHasCompleteView(subtree.value), \"If we're adding a query, it shouldn't be shadowed\");\n    }\n    else {\n        // Shadow everything at or below this location, this is a default listener.\n        const queriesToStop = subtree.fold((relativePath, maybeChildSyncPoint, childMap) => {\n            if (!pathIsEmpty(relativePath) &&\n                maybeChildSyncPoint &&\n                syncPointHasCompleteView(maybeChildSyncPoint)) {\n                return [syncPointGetCompleteView(maybeChildSyncPoint).query];\n            }\n            else {\n                // No default listener here, flatten any deeper queries into an array\n                let queries = [];\n                if (maybeChildSyncPoint) {\n                    queries = queries.concat(syncPointGetQueryViews(maybeChildSyncPoint).map(view => view.query));\n                }\n                each(childMap, (_key, childQueries) => {\n                    queries = queries.concat(childQueries);\n                });\n                return queries;\n            }\n        });\n        for (let i = 0; i < queriesToStop.length; ++i) {\n            const queryToStop = queriesToStop[i];\n            syncTree.listenProvider_.stopListening(syncTreeQueryForListening_(queryToStop), syncTreeTagForQuery(syncTree, queryToStop));\n        }\n    }\n    return events;\n}\n\n/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nclass ExistingValueProvider {\n    constructor(node_) {\n        this.node_ = node_;\n    }\n    getImmediateChild(childName) {\n        const child = this.node_.getImmediateChild(childName);\n        return new ExistingValueProvider(child);\n    }\n    node() {\n        return this.node_;\n    }\n}\nclass DeferredValueProvider {\n    constructor(syncTree, path) {\n        this.syncTree_ = syncTree;\n        this.path_ = path;\n    }\n    getImmediateChild(childName) {\n        const childPath = pathChild(this.path_, childName);\n        return new DeferredValueProvider(this.syncTree_, childPath);\n    }\n    node() {\n        return syncTreeCalcCompleteEventCache(this.syncTree_, this.path_);\n    }\n}\n/**\n * Generate placeholders for deferred values.\n */\nconst generateWithValues = function (values) {\n    values = values || {};\n    values['timestamp'] = values['timestamp'] || new Date().getTime();\n    return values;\n};\n/**\n * Value to use when firing local events. When writing server values, fire\n * local events with an approximate value, otherwise return value as-is.\n */\nconst resolveDeferredLeafValue = function (value, existingVal, serverValues) {\n    if (!value || typeof value !== 'object') {\n        return value;\n    }\n    assert('.sv' in value, 'Unexpected leaf node or priority contents');\n    if (typeof value['.sv'] === 'string') {\n        return resolveScalarDeferredValue(value['.sv'], existingVal, serverValues);\n    }\n    else if (typeof value['.sv'] === 'object') {\n        return resolveComplexDeferredValue(value['.sv'], existingVal);\n    }\n    else {\n        assert(false, 'Unexpected server value: ' + JSON.stringify(value, null, 2));\n    }\n};\nconst resolveScalarDeferredValue = function (op, existing, serverValues) {\n    switch (op) {\n        case 'timestamp':\n            return serverValues['timestamp'];\n        default:\n            assert(false, 'Unexpected server value: ' + op);\n    }\n};\nconst resolveComplexDeferredValue = function (op, existing, unused) {\n    if (!op.hasOwnProperty('increment')) {\n        assert(false, 'Unexpected server value: ' + JSON.stringify(op, null, 2));\n    }\n    const delta = op['increment'];\n    if (typeof delta !== 'number') {\n        assert(false, 'Unexpected increment value: ' + delta);\n    }\n    const existingNode = existing.node();\n    assert(existingNode !== null && typeof existingNode !== 'undefined', 'Expected ChildrenNode.EMPTY_NODE for nulls');\n    // Incrementing a non-number sets the value to the incremented amount\n    if (!existingNode.isLeafNode()) {\n        return delta;\n    }\n    const leaf = existingNode;\n    const existingVal = leaf.getValue();\n    if (typeof existingVal !== 'number') {\n        return delta;\n    }\n    // No need to do over/underflow arithmetic here because JS only handles floats under the covers\n    return existingVal + delta;\n};\n/**\n * Recursively replace all deferred values and priorities in the tree with the\n * specified generated replacement values.\n * @param path - path to which write is relative\n * @param node - new data written at path\n * @param syncTree - current data\n */\nconst resolveDeferredValueTree = function (path, node, syncTree, serverValues) {\n    return resolveDeferredValue(node, new DeferredValueProvider(syncTree, path), serverValues);\n};\n/**\n * Recursively replace all deferred values and priorities in the node with the\n * specified generated replacement values.  If there are no server values in the node,\n * it'll be returned as-is.\n */\nconst resolveDeferredValueSnapshot = function (node, existing, serverValues) {\n    return resolveDeferredValue(node, new ExistingValueProvider(existing), serverValues);\n};\nfunction resolveDeferredValue(node, existingVal, serverValues) {\n    const rawPri = node.getPriority().val();\n    const priority = resolveDeferredLeafValue(rawPri, existingVal.getImmediateChild('.priority'), serverValues);\n    let newNode;\n    if (node.isLeafNode()) {\n        const leafNode = node;\n        const value = resolveDeferredLeafValue(leafNode.getValue(), existingVal, serverValues);\n        if (value !== leafNode.getValue() ||\n            priority !== leafNode.getPriority().val()) {\n            return new LeafNode(value, nodeFromJSON(priority));\n        }\n        else {\n            return node;\n        }\n    }\n    else {\n        const childrenNode = node;\n        newNode = childrenNode;\n        if (priority !== childrenNode.getPriority().val()) {\n            newNode = newNode.updatePriority(new LeafNode(priority));\n        }\n        childrenNode.forEachChild(PRIORITY_INDEX, (childName, childNode) => {\n            const newChildNode = resolveDeferredValue(childNode, existingVal.getImmediateChild(childName), serverValues);\n            if (newChildNode !== childNode) {\n                newNode = newNode.updateImmediateChild(childName, newChildNode);\n            }\n        });\n        return newNode;\n    }\n}\n\n/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * A light-weight tree, traversable by path.  Nodes can have both values and children.\n * Nodes are not enumerated (by forEachChild) unless they have a value or non-empty\n * children.\n */\nclass Tree {\n    /**\n     * @param name - Optional name of the node.\n     * @param parent - Optional parent node.\n     * @param node - Optional node to wrap.\n     */\n    constructor(name = '', parent = null, node = { children: {}, childCount: 0 }) {\n        this.name = name;\n        this.parent = parent;\n        this.node = node;\n    }\n}\n/**\n * Returns a sub-Tree for the given path.\n *\n * @param pathObj - Path to look up.\n * @returns Tree for path.\n */\nfunction treeSubTree(tree, pathObj) {\n    // TODO: Require pathObj to be Path?\n    let path = pathObj instanceof Path ? pathObj : new Path(pathObj);\n    let child = tree, next = pathGetFront(path);\n    while (next !== null) {\n        const childNode = safeGet(child.node.children, next) || {\n            children: {},\n            childCount: 0\n        };\n        child = new Tree(next, child, childNode);\n        path = pathPopFront(path);\n        next = pathGetFront(path);\n    }\n    return child;\n}\n/**\n * Returns the data associated with this tree node.\n *\n * @returns The data or null if no data exists.\n */\nfunction treeGetValue(tree) {\n    return tree.node.value;\n}\n/**\n * Sets data to this tree node.\n *\n * @param value - Value to set.\n */\nfunction treeSetValue(tree, value) {\n    tree.node.value = value;\n    treeUpdateParents(tree);\n}\n/**\n * @returns Whether the tree has any children.\n */\nfunction treeHasChildren(tree) {\n    return tree.node.childCount > 0;\n}\n/**\n * @returns Whether the tree is empty (no value or children).\n */\nfunction treeIsEmpty(tree) {\n    return treeGetValue(tree) === undefined && !treeHasChildren(tree);\n}\n/**\n * Calls action for each child of this tree node.\n *\n * @param action - Action to be called for each child.\n */\nfunction treeForEachChild(tree, action) {\n    each(tree.node.children, (child, childTree) => {\n        action(new Tree(child, tree, childTree));\n    });\n}\n/**\n * Does a depth-first traversal of this node's descendants, calling action for each one.\n *\n * @param action - Action to be called for each child.\n * @param includeSelf - Whether to call action on this node as well. Defaults to\n *   false.\n * @param childrenFirst - Whether to call action on children before calling it on\n *   parent.\n */\nfunction treeForEachDescendant(tree, action, includeSelf, childrenFirst) {\n    if (includeSelf && !childrenFirst) {\n        action(tree);\n    }\n    treeForEachChild(tree, child => {\n        treeForEachDescendant(child, action, true, childrenFirst);\n    });\n    if (includeSelf && childrenFirst) {\n        action(tree);\n    }\n}\n/**\n * Calls action on each ancestor node.\n *\n * @param action - Action to be called on each parent; return\n *   true to abort.\n * @param includeSelf - Whether to call action on this node as well.\n * @returns true if the action callback returned true.\n */\nfunction treeForEachAncestor(tree, action, includeSelf) {\n    let node = includeSelf ? tree : tree.parent;\n    while (node !== null) {\n        if (action(node)) {\n            return true;\n        }\n        node = node.parent;\n    }\n    return false;\n}\n/**\n * @returns The path of this tree node, as a Path.\n */\nfunction treeGetPath(tree) {\n    return new Path(tree.parent === null\n        ? tree.name\n        : treeGetPath(tree.parent) + '/' + tree.name);\n}\n/**\n * Adds or removes this child from its parent based on whether it's empty or not.\n */\nfunction treeUpdateParents(tree) {\n    if (tree.parent !== null) {\n        treeUpdateChild(tree.parent, tree.name, tree);\n    }\n}\n/**\n * Adds or removes the passed child to this tree node, depending on whether it's empty.\n *\n * @param childName - The name of the child to update.\n * @param child - The child to update.\n */\nfunction treeUpdateChild(tree, childName, child) {\n    const childEmpty = treeIsEmpty(child);\n    const childExists = contains(tree.node.children, childName);\n    if (childEmpty && childExists) {\n        delete tree.node.children[childName];\n        tree.node.childCount--;\n        treeUpdateParents(tree);\n    }\n    else if (!childEmpty && !childExists) {\n        tree.node.children[childName] = child.node;\n        tree.node.childCount++;\n        treeUpdateParents(tree);\n    }\n}\n\n/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * True for invalid Firebase keys\n */\nconst INVALID_KEY_REGEX_ = /[\\[\\].#$\\/\\u0000-\\u001F\\u007F]/;\n/**\n * True for invalid Firebase paths.\n * Allows '/' in paths.\n */\nconst INVALID_PATH_REGEX_ = /[\\[\\].#$\\u0000-\\u001F\\u007F]/;\n/**\n * Maximum number of characters to allow in leaf value\n */\nconst MAX_LEAF_SIZE_ = 10 * 1024 * 1024;\nconst isValidKey = function (key) {\n    return (typeof key === 'string' && key.length !== 0 && !INVALID_KEY_REGEX_.test(key));\n};\nconst isValidPathString = function (pathString) {\n    return (typeof pathString === 'string' &&\n        pathString.length !== 0 &&\n        !INVALID_PATH_REGEX_.test(pathString));\n};\nconst isValidRootPathString = function (pathString) {\n    if (pathString) {\n        // Allow '/.info/' at the beginning.\n        pathString = pathString.replace(/^\\/*\\.info(\\/|$)/, '/');\n    }\n    return isValidPathString(pathString);\n};\nconst isValidPriority = function (priority) {\n    return (priority === null ||\n        typeof priority === 'string' ||\n        (typeof priority === 'number' && !isInvalidJSONNumber(priority)) ||\n        (priority &&\n            typeof priority === 'object' &&\n            // eslint-disable-next-line @typescript-eslint/no-explicit-any\n            contains(priority, '.sv')));\n};\n/**\n * Pre-validate a datum passed as an argument to Firebase function.\n */\nconst validateFirebaseDataArg = function (fnName, value, path, optional) {\n    if (optional && value === undefined) {\n        return;\n    }\n    validateFirebaseData(errorPrefix(fnName, 'value'), value, path);\n};\n/**\n * Validate a data object client-side before sending to server.\n */\nconst validateFirebaseData = function (errorPrefix, data, path_) {\n    const path = path_ instanceof Path ? new ValidationPath(path_, errorPrefix) : path_;\n    if (data === undefined) {\n        throw new Error(errorPrefix + 'contains undefined ' + validationPathToErrorString(path));\n    }\n    if (typeof data === 'function') {\n        throw new Error(errorPrefix +\n            'contains a function ' +\n            validationPathToErrorString(path) +\n            ' with contents = ' +\n            data.toString());\n    }\n    if (isInvalidJSONNumber(data)) {\n        throw new Error(errorPrefix +\n            'contains ' +\n            data.toString() +\n            ' ' +\n            validationPathToErrorString(path));\n    }\n    // Check max leaf size, but try to avoid the utf8 conversion if we can.\n    if (typeof data === 'string' &&\n        data.length > MAX_LEAF_SIZE_ / 3 &&\n        stringLength(data) > MAX_LEAF_SIZE_) {\n        throw new Error(errorPrefix +\n            'contains a string greater than ' +\n            MAX_LEAF_SIZE_ +\n            ' utf8 bytes ' +\n            validationPathToErrorString(path) +\n            \" ('\" +\n            data.substring(0, 50) +\n            \"...')\");\n    }\n    // TODO = Perf = Consider combining the recursive validation of keys into NodeFromJSON\n    // to save extra walking of large objects.\n    if (data && typeof data === 'object') {\n        let hasDotValue = false;\n        let hasActualChild = false;\n        each(data, (key, value) => {\n            if (key === '.value') {\n                hasDotValue = true;\n            }\n            else if (key !== '.priority' && key !== '.sv') {\n                hasActualChild = true;\n                if (!isValidKey(key)) {\n                    throw new Error(errorPrefix +\n                        ' contains an invalid key (' +\n                        key +\n                        ') ' +\n                        validationPathToErrorString(path) +\n                        '.  Keys must be non-empty strings ' +\n                        'and can\\'t contain \".\", \"#\", \"$\", \"/\", \"[\", or \"]\"');\n                }\n            }\n            validationPathPush(path, key);\n            validateFirebaseData(errorPrefix, value, path);\n            validationPathPop(path);\n        });\n        if (hasDotValue && hasActualChild) {\n            throw new Error(errorPrefix +\n                ' contains \".value\" child ' +\n                validationPathToErrorString(path) +\n                ' in addition to actual children.');\n        }\n    }\n};\n/**\n * Pre-validate paths passed in the firebase function.\n */\nconst validateFirebaseMergePaths = function (errorPrefix, mergePaths) {\n    let i, curPath;\n    for (i = 0; i < mergePaths.length; i++) {\n        curPath = mergePaths[i];\n        const keys = pathSlice(curPath);\n        for (let j = 0; j < keys.length; j++) {\n            if (keys[j] === '.priority' && j === keys.length - 1) ;\n            else if (!isValidKey(keys[j])) {\n                throw new Error(errorPrefix +\n                    'contains an invalid key (' +\n                    keys[j] +\n                    ') in path ' +\n                    curPath.toString() +\n                    '. Keys must be non-empty strings ' +\n                    'and can\\'t contain \".\", \"#\", \"$\", \"/\", \"[\", or \"]\"');\n            }\n        }\n    }\n    // Check that update keys are not descendants of each other.\n    // We rely on the property that sorting guarantees that ancestors come\n    // right before descendants.\n    mergePaths.sort(pathCompare);\n    let prevPath = null;\n    for (i = 0; i < mergePaths.length; i++) {\n        curPath = mergePaths[i];\n        if (prevPath !== null && pathContains(prevPath, curPath)) {\n            throw new Error(errorPrefix +\n                'contains a path ' +\n                prevPath.toString() +\n                ' that is ancestor of another path ' +\n                curPath.toString());\n        }\n        prevPath = curPath;\n    }\n};\n/**\n * pre-validate an object passed as an argument to firebase function (\n * must be an object - e.g. for firebase.update()).\n */\nconst validateFirebaseMergeDataArg = function (fnName, data, path, optional) {\n    if (optional && data === undefined) {\n        return;\n    }\n    const errorPrefix$1 = errorPrefix(fnName, 'values');\n    if (!(data && typeof data === 'object') || Array.isArray(data)) {\n        throw new Error(errorPrefix$1 + ' must be an object containing the children to replace.');\n    }\n    const mergePaths = [];\n    each(data, (key, value) => {\n        const curPath = new Path(key);\n        validateFirebaseData(errorPrefix$1, value, pathChild(path, curPath));\n        if (pathGetBack(curPath) === '.priority') {\n            if (!isValidPriority(value)) {\n                throw new Error(errorPrefix$1 +\n                    \"contains an invalid value for '\" +\n                    curPath.toString() +\n                    \"', which must be a valid \" +\n                    'Firebase priority (a string, finite number, server value, or null).');\n            }\n        }\n        mergePaths.push(curPath);\n    });\n    validateFirebaseMergePaths(errorPrefix$1, mergePaths);\n};\nconst validatePriority = function (fnName, priority, optional) {\n    if (optional && priority === undefined) {\n        return;\n    }\n    if (isInvalidJSONNumber(priority)) {\n        throw new Error(errorPrefix(fnName, 'priority') +\n            'is ' +\n            priority.toString() +\n            ', but must be a valid Firebase priority (a string, finite number, ' +\n            'server value, or null).');\n    }\n    // Special case to allow importing data with a .sv.\n    if (!isValidPriority(priority)) {\n        throw new Error(errorPrefix(fnName, 'priority') +\n            'must be a valid Firebase priority ' +\n            '(a string, finite number, server value, or null).');\n    }\n};\nconst validateKey = function (fnName, argumentName, key, optional) {\n    if (optional && key === undefined) {\n        return;\n    }\n    if (!isValidKey(key)) {\n        throw new Error(errorPrefix(fnName, argumentName) +\n            'was an invalid key = \"' +\n            key +\n            '\".  Firebase keys must be non-empty strings and ' +\n            'can\\'t contain \".\", \"#\", \"$\", \"/\", \"[\", or \"]\").');\n    }\n};\n/**\n * @internal\n */\nconst validatePathString = function (fnName, argumentName, pathString, optional) {\n    if (optional && pathString === undefined) {\n        return;\n    }\n    if (!isValidPathString(pathString)) {\n        throw new Error(errorPrefix(fnName, argumentName) +\n            'was an invalid path = \"' +\n            pathString +\n            '\". Paths must be non-empty strings and ' +\n            'can\\'t contain \".\", \"#\", \"$\", \"[\", or \"]\"');\n    }\n};\nconst validateRootPathString = function (fnName, argumentName, pathString, optional) {\n    if (pathString) {\n        // Allow '/.info/' at the beginning.\n        pathString = pathString.replace(/^\\/*\\.info(\\/|$)/, '/');\n    }\n    validatePathString(fnName, argumentName, pathString, optional);\n};\n/**\n * @internal\n */\nconst validateWritablePath = function (fnName, path) {\n    if (pathGetFront(path) === '.info') {\n        throw new Error(fnName + \" failed = Can't modify data under /.info/\");\n    }\n};\nconst validateUrl = function (fnName, parsedUrl) {\n    // TODO = Validate server better.\n    const pathString = parsedUrl.path.toString();\n    if (!(typeof parsedUrl.repoInfo.host === 'string') ||\n        parsedUrl.repoInfo.host.length === 0 ||\n        (!isValidKey(parsedUrl.repoInfo.namespace) &&\n            parsedUrl.repoInfo.host.split(':')[0] !== 'localhost') ||\n        (pathString.length !== 0 && !isValidRootPathString(pathString))) {\n        throw new Error(errorPrefix(fnName, 'url') +\n            'must be a valid firebase URL and ' +\n            'the path can\\'t contain \".\", \"#\", \"$\", \"[\", or \"]\".');\n    }\n};\n\n/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * The event queue serves a few purposes:\n * 1. It ensures we maintain event order in the face of event callbacks doing operations that result in more\n *    events being queued.\n * 2. raiseQueuedEvents() handles being called reentrantly nicely.  That is, if in the course of raising events,\n *    raiseQueuedEvents() is called again, the \"inner\" call will pick up raising events where the \"outer\" call\n *    left off, ensuring that the events are still raised synchronously and in order.\n * 3. You can use raiseEventsAtPath and raiseEventsForChangedPath to ensure only relevant previously-queued\n *    events are raised synchronously.\n *\n * NOTE: This can all go away if/when we move to async events.\n *\n */\nclass EventQueue {\n    constructor() {\n        this.eventLists_ = [];\n        /**\n         * Tracks recursion depth of raiseQueuedEvents_, for debugging purposes.\n         */\n        this.recursionDepth_ = 0;\n    }\n}\n/**\n * @param eventDataList - The new events to queue.\n */\nfunction eventQueueQueueEvents(eventQueue, eventDataList) {\n    // We group events by path, storing them in a single EventList, to make it easier to skip over them quickly.\n    let currList = null;\n    for (let i = 0; i < eventDataList.length; i++) {\n        const data = eventDataList[i];\n        const path = data.getPath();\n        if (currList !== null && !pathEquals(path, currList.path)) {\n            eventQueue.eventLists_.push(currList);\n            currList = null;\n        }\n        if (currList === null) {\n            currList = { events: [], path };\n        }\n        currList.events.push(data);\n    }\n    if (currList) {\n        eventQueue.eventLists_.push(currList);\n    }\n}\n/**\n * Queues the specified events and synchronously raises all events (including previously queued ones)\n * for the specified path.\n *\n * It is assumed that the new events are all for the specified path.\n *\n * @param path - The path to raise events for.\n * @param eventDataList - The new events to raise.\n */\nfunction eventQueueRaiseEventsAtPath(eventQueue, path, eventDataList) {\n    eventQueueQueueEvents(eventQueue, eventDataList);\n    eventQueueRaiseQueuedEventsMatchingPredicate(eventQueue, eventPath => pathEquals(eventPath, path));\n}\n/**\n * Queues the specified events and synchronously raises all events (including previously queued ones) for\n * locations related to the specified change path (i.e. all ancestors and descendants).\n *\n * It is assumed that the new events are all related (ancestor or descendant) to the specified path.\n *\n * @param changedPath - The path to raise events for.\n * @param eventDataList - The events to raise\n */\nfunction eventQueueRaiseEventsForChangedPath(eventQueue, changedPath, eventDataList) {\n    eventQueueQueueEvents(eventQueue, eventDataList);\n    eventQueueRaiseQueuedEventsMatchingPredicate(eventQueue, eventPath => pathContains(eventPath, changedPath) ||\n        pathContains(changedPath, eventPath));\n}\nfunction eventQueueRaiseQueuedEventsMatchingPredicate(eventQueue, predicate) {\n    eventQueue.recursionDepth_++;\n    let sentAll = true;\n    for (let i = 0; i < eventQueue.eventLists_.length; i++) {\n        const eventList = eventQueue.eventLists_[i];\n        if (eventList) {\n            const eventPath = eventList.path;\n            if (predicate(eventPath)) {\n                eventListRaise(eventQueue.eventLists_[i]);\n                eventQueue.eventLists_[i] = null;\n            }\n            else {\n                sentAll = false;\n            }\n        }\n    }\n    if (sentAll) {\n        eventQueue.eventLists_ = [];\n    }\n    eventQueue.recursionDepth_--;\n}\n/**\n * Iterates through the list and raises each event\n */\nfunction eventListRaise(eventList) {\n    for (let i = 0; i < eventList.events.length; i++) {\n        const eventData = eventList.events[i];\n        if (eventData !== null) {\n            eventList.events[i] = null;\n            const eventFn = eventData.getEventRunner();\n            if (logger) {\n                log('event: ' + eventData.toString());\n            }\n            exceptionGuard(eventFn);\n        }\n    }\n}\n\n/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nconst INTERRUPT_REASON = 'repo_interrupt';\n/**\n * If a transaction does not succeed after 25 retries, we abort it. Among other\n * things this ensure that if there's ever a bug causing a mismatch between\n * client / server hashes for some data, we won't retry indefinitely.\n */\nconst MAX_TRANSACTION_RETRIES = 25;\n/**\n * A connection to a single data repository.\n */\nclass Repo {\n    constructor(repoInfo_, forceRestClient_, authTokenProvider_, appCheckProvider_) {\n        this.repoInfo_ = repoInfo_;\n        this.forceRestClient_ = forceRestClient_;\n        this.authTokenProvider_ = authTokenProvider_;\n        this.appCheckProvider_ = appCheckProvider_;\n        this.dataUpdateCount = 0;\n        this.statsListener_ = null;\n        this.eventQueue_ = new EventQueue();\n        this.nextWriteId_ = 1;\n        this.interceptServerDataCallback_ = null;\n        /** A list of data pieces and paths to be set when this client disconnects. */\n        this.onDisconnect_ = newSparseSnapshotTree();\n        /** Stores queues of outstanding transactions for Firebase locations. */\n        this.transactionQueueTree_ = new Tree();\n        // TODO: This should be @private but it's used by test_access.js and internal.js\n        this.persistentConnection_ = null;\n        // This key is intentionally not updated if RepoInfo is later changed or replaced\n        this.key = this.repoInfo_.toURLString();\n    }\n    /**\n     * @returns The URL corresponding to the root of this Firebase.\n     */\n    toString() {\n        return ((this.repoInfo_.secure ? 'https://' : 'http://') + this.repoInfo_.host);\n    }\n}\nfunction repoStart(repo, appId, authOverride) {\n    repo.stats_ = statsManagerGetCollection(repo.repoInfo_);\n    if (repo.forceRestClient_ || beingCrawled()) {\n        repo.server_ = new ReadonlyRestClient(repo.repoInfo_, (pathString, data, isMerge, tag) => {\n            repoOnDataUpdate(repo, pathString, data, isMerge, tag);\n        }, repo.authTokenProvider_, repo.appCheckProvider_);\n        // Minor hack: Fire onConnect immediately, since there's no actual connection.\n        setTimeout(() => repoOnConnectStatus(repo, /* connectStatus= */ true), 0);\n    }\n    else {\n        // Validate authOverride\n        if (typeof authOverride !== 'undefined' && authOverride !== null) {\n            if (typeof authOverride !== 'object') {\n                throw new Error('Only objects are supported for option databaseAuthVariableOverride');\n            }\n            try {\n                stringify(authOverride);\n            }\n            catch (e) {\n                throw new Error('Invalid authOverride provided: ' + e);\n            }\n        }\n        repo.persistentConnection_ = new PersistentConnection(repo.repoInfo_, appId, (pathString, data, isMerge, tag) => {\n            repoOnDataUpdate(repo, pathString, data, isMerge, tag);\n        }, (connectStatus) => {\n            repoOnConnectStatus(repo, connectStatus);\n        }, (updates) => {\n            repoOnServerInfoUpdate(repo, updates);\n        }, repo.authTokenProvider_, repo.appCheckProvider_, authOverride);\n        repo.server_ = repo.persistentConnection_;\n    }\n    repo.authTokenProvider_.addTokenChangeListener(token => {\n        repo.server_.refreshAuthToken(token);\n    });\n    repo.appCheckProvider_.addTokenChangeListener(result => {\n        repo.server_.refreshAppCheckToken(result.token);\n    });\n    // In the case of multiple Repos for the same repoInfo (i.e. there are multiple Firebase.Contexts being used),\n    // we only want to create one StatsReporter.  As such, we'll report stats over the first Repo created.\n    repo.statsReporter_ = statsManagerGetOrCreateReporter(repo.repoInfo_, () => new StatsReporter(repo.stats_, repo.server_));\n    // Used for .info.\n    repo.infoData_ = new SnapshotHolder();\n    repo.infoSyncTree_ = new SyncTree({\n        startListening: (query, tag, currentHashFn, onComplete) => {\n            let infoEvents = [];\n            const node = repo.infoData_.getNode(query._path);\n            // This is possibly a hack, but we have different semantics for .info endpoints. We don't raise null events\n            // on initial data...\n            if (!node.isEmpty()) {\n                infoEvents = syncTreeApplyServerOverwrite(repo.infoSyncTree_, query._path, node);\n                setTimeout(() => {\n                    onComplete('ok');\n                }, 0);\n            }\n            return infoEvents;\n        },\n        stopListening: () => { }\n    });\n    repoUpdateInfo(repo, 'connected', false);\n    repo.serverSyncTree_ = new SyncTree({\n        startListening: (query, tag, currentHashFn, onComplete) => {\n            repo.server_.listen(query, currentHashFn, tag, (status, data) => {\n                const events = onComplete(status, data);\n                eventQueueRaiseEventsForChangedPath(repo.eventQueue_, query._path, events);\n            });\n            // No synchronous events for network-backed sync trees\n            return [];\n        },\n        stopListening: (query, tag) => {\n            repo.server_.unlisten(query, tag);\n        }\n    });\n}\n/**\n * @returns The time in milliseconds, taking the server offset into account if we have one.\n */\nfunction repoServerTime(repo) {\n    const offsetNode = repo.infoData_.getNode(new Path('.info/serverTimeOffset'));\n    const offset = offsetNode.val() || 0;\n    return new Date().getTime() + offset;\n}\n/**\n * Generate ServerValues using some variables from the repo object.\n */\nfunction repoGenerateServerValues(repo) {\n    return generateWithValues({\n        timestamp: repoServerTime(repo)\n    });\n}\n/**\n * Called by realtime when we get new messages from the server.\n */\nfunction repoOnDataUpdate(repo, pathString, data, isMerge, tag) {\n    // For testing.\n    repo.dataUpdateCount++;\n    const path = new Path(pathString);\n    data = repo.interceptServerDataCallback_\n        ? repo.interceptServerDataCallback_(pathString, data)\n        : data;\n    let events = [];\n    if (tag) {\n        if (isMerge) {\n            const taggedChildren = map(data, (raw) => nodeFromJSON(raw));\n            events = syncTreeApplyTaggedQueryMerge(repo.serverSyncTree_, path, taggedChildren, tag);\n        }\n        else {\n            const taggedSnap = nodeFromJSON(data);\n            events = syncTreeApplyTaggedQueryOverwrite(repo.serverSyncTree_, path, taggedSnap, tag);\n        }\n    }\n    else if (isMerge) {\n        const changedChildren = map(data, (raw) => nodeFromJSON(raw));\n        events = syncTreeApplyServerMerge(repo.serverSyncTree_, path, changedChildren);\n    }\n    else {\n        const snap = nodeFromJSON(data);\n        events = syncTreeApplyServerOverwrite(repo.serverSyncTree_, path, snap);\n    }\n    let affectedPath = path;\n    if (events.length > 0) {\n        // Since we have a listener outstanding for each transaction, receiving any events\n        // is a proxy for some change having occurred.\n        affectedPath = repoRerunTransactions(repo, path);\n    }\n    eventQueueRaiseEventsForChangedPath(repo.eventQueue_, affectedPath, events);\n}\nfunction repoOnConnectStatus(repo, connectStatus) {\n    repoUpdateInfo(repo, 'connected', connectStatus);\n    if (connectStatus === false) {\n        repoRunOnDisconnectEvents(repo);\n    }\n}\nfunction repoOnServerInfoUpdate(repo, updates) {\n    each(updates, (key, value) => {\n        repoUpdateInfo(repo, key, value);\n    });\n}\nfunction repoUpdateInfo(repo, pathString, value) {\n    const path = new Path('/.info/' + pathString);\n    const newNode = nodeFromJSON(value);\n    repo.infoData_.updateSnapshot(path, newNode);\n    const events = syncTreeApplyServerOverwrite(repo.infoSyncTree_, path, newNode);\n    eventQueueRaiseEventsForChangedPath(repo.eventQueue_, path, events);\n}\nfunction repoGetNextWriteId(repo) {\n    return repo.nextWriteId_++;\n}\n/**\n * The purpose of `getValue` is to return the latest known value\n * satisfying `query`.\n *\n * This method will first check for in-memory cached values\n * belonging to active listeners. If they are found, such values\n * are considered to be the most up-to-date.\n *\n * If the client is not connected, this method will wait until the\n *  repo has established a connection and then request the value for `query`.\n * If the client is not able to retrieve the query result for another reason,\n * it reports an error.\n *\n * @param query - The query to surface a value for.\n */\nfunction repoGetValue(repo, query, eventRegistration) {\n    // Only active queries are cached. There is no persisted cache.\n    const cached = syncTreeGetServerValue(repo.serverSyncTree_, query);\n    if (cached != null) {\n        return Promise.resolve(cached);\n    }\n    return repo.server_.get(query).then(payload => {\n        const node = nodeFromJSON(payload).withIndex(query._queryParams.getIndex());\n        /**\n         * Below we simulate the actions of an `onlyOnce` `onValue()` event where:\n         * Add an event registration,\n         * Update data at the path,\n         * Raise any events,\n         * Cleanup the SyncTree\n         */\n        syncTreeAddEventRegistration(repo.serverSyncTree_, query, eventRegistration, true);\n        let events;\n        if (query._queryParams.loadsAllData()) {\n            events = syncTreeApplyServerOverwrite(repo.serverSyncTree_, query._path, node);\n        }\n        else {\n            const tag = syncTreeTagForQuery(repo.serverSyncTree_, query);\n            events = syncTreeApplyTaggedQueryOverwrite(repo.serverSyncTree_, query._path, node, tag);\n        }\n        /*\n         * We need to raise events in the scenario where `get()` is called at a parent path, and\n         * while the `get()` is pending, `onValue` is called at a child location. While get() is waiting\n         * for the data, `onValue` will register a new event. Then, get() will come back, and update the syncTree\n         * and its corresponding serverCache, including the child location where `onValue` is called. Then,\n         * `onValue` will receive the event from the server, but look at the syncTree and see that the data received\n         * from the server is already at the SyncPoint, and so the `onValue` callback will never get fired.\n         * Calling `eventQueueRaiseEventsForChangedPath()` is the correct way to propagate the events and\n         * ensure the corresponding child events will get fired.\n         */\n        eventQueueRaiseEventsForChangedPath(repo.eventQueue_, query._path, events);\n        syncTreeRemoveEventRegistration(repo.serverSyncTree_, query, eventRegistration, null, true);\n        return node;\n    }, err => {\n        repoLog(repo, 'get for query ' + stringify(query) + ' failed: ' + err);\n        return Promise.reject(new Error(err));\n    });\n}\nfunction repoSetWithPriority(repo, path, newVal, newPriority, onComplete) {\n    repoLog(repo, 'set', {\n        path: path.toString(),\n        value: newVal,\n        priority: newPriority\n    });\n    // TODO: Optimize this behavior to either (a) store flag to skip resolving where possible and / or\n    // (b) store unresolved paths on JSON parse\n    const serverValues = repoGenerateServerValues(repo);\n    const newNodeUnresolved = nodeFromJSON(newVal, newPriority);\n    const existing = syncTreeCalcCompleteEventCache(repo.serverSyncTree_, path);\n    const newNode = resolveDeferredValueSnapshot(newNodeUnresolved, existing, serverValues);\n    const writeId = repoGetNextWriteId(repo);\n    const events = syncTreeApplyUserOverwrite(repo.serverSyncTree_, path, newNode, writeId, true);\n    eventQueueQueueEvents(repo.eventQueue_, events);\n    repo.server_.put(path.toString(), newNodeUnresolved.val(/*export=*/ true), (status, errorReason) => {\n        const success = status === 'ok';\n        if (!success) {\n            warn('set at ' + path + ' failed: ' + status);\n        }\n        const clearEvents = syncTreeAckUserWrite(repo.serverSyncTree_, writeId, !success);\n        eventQueueRaiseEventsForChangedPath(repo.eventQueue_, path, clearEvents);\n        repoCallOnCompleteCallback(repo, onComplete, status, errorReason);\n    });\n    const affectedPath = repoAbortTransactions(repo, path);\n    repoRerunTransactions(repo, affectedPath);\n    // We queued the events above, so just flush the queue here\n    eventQueueRaiseEventsForChangedPath(repo.eventQueue_, affectedPath, []);\n}\nfunction repoUpdate(repo, path, childrenToMerge, onComplete) {\n    repoLog(repo, 'update', { path: path.toString(), value: childrenToMerge });\n    // Start with our existing data and merge each child into it.\n    let empty = true;\n    const serverValues = repoGenerateServerValues(repo);\n    const changedChildren = {};\n    each(childrenToMerge, (changedKey, changedValue) => {\n        empty = false;\n        changedChildren[changedKey] = resolveDeferredValueTree(pathChild(path, changedKey), nodeFromJSON(changedValue), repo.serverSyncTree_, serverValues);\n    });\n    if (!empty) {\n        const writeId = repoGetNextWriteId(repo);\n        const events = syncTreeApplyUserMerge(repo.serverSyncTree_, path, changedChildren, writeId);\n        eventQueueQueueEvents(repo.eventQueue_, events);\n        repo.server_.merge(path.toString(), childrenToMerge, (status, errorReason) => {\n            const success = status === 'ok';\n            if (!success) {\n                warn('update at ' + path + ' failed: ' + status);\n            }\n            const clearEvents = syncTreeAckUserWrite(repo.serverSyncTree_, writeId, !success);\n            const affectedPath = clearEvents.length > 0 ? repoRerunTransactions(repo, path) : path;\n            eventQueueRaiseEventsForChangedPath(repo.eventQueue_, affectedPath, clearEvents);\n            repoCallOnCompleteCallback(repo, onComplete, status, errorReason);\n        });\n        each(childrenToMerge, (changedPath) => {\n            const affectedPath = repoAbortTransactions(repo, pathChild(path, changedPath));\n            repoRerunTransactions(repo, affectedPath);\n        });\n        // We queued the events above, so just flush the queue here\n        eventQueueRaiseEventsForChangedPath(repo.eventQueue_, path, []);\n    }\n    else {\n        log(\"update() called with empty data.  Don't do anything.\");\n        repoCallOnCompleteCallback(repo, onComplete, 'ok', undefined);\n    }\n}\n/**\n * Applies all of the changes stored up in the onDisconnect_ tree.\n */\nfunction repoRunOnDisconnectEvents(repo) {\n    repoLog(repo, 'onDisconnectEvents');\n    const serverValues = repoGenerateServerValues(repo);\n    const resolvedOnDisconnectTree = newSparseSnapshotTree();\n    sparseSnapshotTreeForEachTree(repo.onDisconnect_, newEmptyPath(), (path, node) => {\n        const resolved = resolveDeferredValueTree(path, node, repo.serverSyncTree_, serverValues);\n        sparseSnapshotTreeRemember(resolvedOnDisconnectTree, path, resolved);\n    });\n    let events = [];\n    sparseSnapshotTreeForEachTree(resolvedOnDisconnectTree, newEmptyPath(), (path, snap) => {\n        events = events.concat(syncTreeApplyServerOverwrite(repo.serverSyncTree_, path, snap));\n        const affectedPath = repoAbortTransactions(repo, path);\n        repoRerunTransactions(repo, affectedPath);\n    });\n    repo.onDisconnect_ = newSparseSnapshotTree();\n    eventQueueRaiseEventsForChangedPath(repo.eventQueue_, newEmptyPath(), events);\n}\nfunction repoOnDisconnectCancel(repo, path, onComplete) {\n    repo.server_.onDisconnectCancel(path.toString(), (status, errorReason) => {\n        if (status === 'ok') {\n            sparseSnapshotTreeForget(repo.onDisconnect_, path);\n        }\n        repoCallOnCompleteCallback(repo, onComplete, status, errorReason);\n    });\n}\nfunction repoOnDisconnectSet(repo, path, value, onComplete) {\n    const newNode = nodeFromJSON(value);\n    repo.server_.onDisconnectPut(path.toString(), newNode.val(/*export=*/ true), (status, errorReason) => {\n        if (status === 'ok') {\n            sparseSnapshotTreeRemember(repo.onDisconnect_, path, newNode);\n        }\n        repoCallOnCompleteCallback(repo, onComplete, status, errorReason);\n    });\n}\nfunction repoOnDisconnectSetWithPriority(repo, path, value, priority, onComplete) {\n    const newNode = nodeFromJSON(value, priority);\n    repo.server_.onDisconnectPut(path.toString(), newNode.val(/*export=*/ true), (status, errorReason) => {\n        if (status === 'ok') {\n            sparseSnapshotTreeRemember(repo.onDisconnect_, path, newNode);\n        }\n        repoCallOnCompleteCallback(repo, onComplete, status, errorReason);\n    });\n}\nfunction repoOnDisconnectUpdate(repo, path, childrenToMerge, onComplete) {\n    if (isEmpty(childrenToMerge)) {\n        log(\"onDisconnect().update() called with empty data.  Don't do anything.\");\n        repoCallOnCompleteCallback(repo, onComplete, 'ok', undefined);\n        return;\n    }\n    repo.server_.onDisconnectMerge(path.toString(), childrenToMerge, (status, errorReason) => {\n        if (status === 'ok') {\n            each(childrenToMerge, (childName, childNode) => {\n                const newChildNode = nodeFromJSON(childNode);\n                sparseSnapshotTreeRemember(repo.onDisconnect_, pathChild(path, childName), newChildNode);\n            });\n        }\n        repoCallOnCompleteCallback(repo, onComplete, status, errorReason);\n    });\n}\nfunction repoAddEventCallbackForQuery(repo, query, eventRegistration) {\n    let events;\n    if (pathGetFront(query._path) === '.info') {\n        events = syncTreeAddEventRegistration(repo.infoSyncTree_, query, eventRegistration);\n    }\n    else {\n        events = syncTreeAddEventRegistration(repo.serverSyncTree_, query, eventRegistration);\n    }\n    eventQueueRaiseEventsAtPath(repo.eventQueue_, query._path, events);\n}\nfunction repoRemoveEventCallbackForQuery(repo, query, eventRegistration) {\n    // These are guaranteed not to raise events, since we're not passing in a cancelError. However, we can future-proof\n    // a little bit by handling the return values anyways.\n    let events;\n    if (pathGetFront(query._path) === '.info') {\n        events = syncTreeRemoveEventRegistration(repo.infoSyncTree_, query, eventRegistration);\n    }\n    else {\n        events = syncTreeRemoveEventRegistration(repo.serverSyncTree_, query, eventRegistration);\n    }\n    eventQueueRaiseEventsAtPath(repo.eventQueue_, query._path, events);\n}\nfunction repoInterrupt(repo) {\n    if (repo.persistentConnection_) {\n        repo.persistentConnection_.interrupt(INTERRUPT_REASON);\n    }\n}\nfunction repoResume(repo) {\n    if (repo.persistentConnection_) {\n        repo.persistentConnection_.resume(INTERRUPT_REASON);\n    }\n}\nfunction repoLog(repo, ...varArgs) {\n    let prefix = '';\n    if (repo.persistentConnection_) {\n        prefix = repo.persistentConnection_.id + ':';\n    }\n    log(prefix, ...varArgs);\n}\nfunction repoCallOnCompleteCallback(repo, callback, status, errorReason) {\n    if (callback) {\n        exceptionGuard(() => {\n            if (status === 'ok') {\n                callback(null);\n            }\n            else {\n                const code = (status || 'error').toUpperCase();\n                let message = code;\n                if (errorReason) {\n                    message += ': ' + errorReason;\n                }\n                const error = new Error(message);\n                // eslint-disable-next-line @typescript-eslint/no-explicit-any\n                error.code = code;\n                callback(error);\n            }\n        });\n    }\n}\n/**\n * Creates a new transaction, adds it to the transactions we're tracking, and\n * sends it to the server if possible.\n *\n * @param path - Path at which to do transaction.\n * @param transactionUpdate - Update callback.\n * @param onComplete - Completion callback.\n * @param unwatcher - Function that will be called when the transaction no longer\n * need data updates for `path`.\n * @param applyLocally - Whether or not to make intermediate results visible\n */\nfunction repoStartTransaction(repo, path, transactionUpdate, onComplete, unwatcher, applyLocally) {\n    repoLog(repo, 'transaction on ' + path);\n    // Initialize transaction.\n    const transaction = {\n        path,\n        update: transactionUpdate,\n        onComplete,\n        // One of TransactionStatus enums.\n        status: null,\n        // Used when combining transactions at different locations to figure out\n        // which one goes first.\n        order: LUIDGenerator(),\n        // Whether to raise local events for this transaction.\n        applyLocally,\n        // Count of how many times we've retried the transaction.\n        retryCount: 0,\n        // Function to call to clean up our .on() listener.\n        unwatcher,\n        // Stores why a transaction was aborted.\n        abortReason: null,\n        currentWriteId: null,\n        currentInputSnapshot: null,\n        currentOutputSnapshotRaw: null,\n        currentOutputSnapshotResolved: null\n    };\n    // Run transaction initially.\n    const currentState = repoGetLatestState(repo, path, undefined);\n    transaction.currentInputSnapshot = currentState;\n    const newVal = transaction.update(currentState.val());\n    if (newVal === undefined) {\n        // Abort transaction.\n        transaction.unwatcher();\n        transaction.currentOutputSnapshotRaw = null;\n        transaction.currentOutputSnapshotResolved = null;\n        if (transaction.onComplete) {\n            transaction.onComplete(null, false, transaction.currentInputSnapshot);\n        }\n    }\n    else {\n        validateFirebaseData('transaction failed: Data returned ', newVal, transaction.path);\n        // Mark as run and add to our queue.\n        transaction.status = 0 /* TransactionStatus.RUN */;\n        const queueNode = treeSubTree(repo.transactionQueueTree_, path);\n        const nodeQueue = treeGetValue(queueNode) || [];\n        nodeQueue.push(transaction);\n        treeSetValue(queueNode, nodeQueue);\n        // Update visibleData and raise events\n        // Note: We intentionally raise events after updating all of our\n        // transaction state, since the user could start new transactions from the\n        // event callbacks.\n        let priorityForNode;\n        if (typeof newVal === 'object' &&\n            newVal !== null &&\n            contains(newVal, '.priority')) {\n            // eslint-disable-next-line @typescript-eslint/no-explicit-any\n            priorityForNode = safeGet(newVal, '.priority');\n            assert(isValidPriority(priorityForNode), 'Invalid priority returned by transaction. ' +\n                'Priority must be a valid string, finite number, server value, or null.');\n        }\n        else {\n            const currentNode = syncTreeCalcCompleteEventCache(repo.serverSyncTree_, path) ||\n                ChildrenNode.EMPTY_NODE;\n            priorityForNode = currentNode.getPriority().val();\n        }\n        const serverValues = repoGenerateServerValues(repo);\n        const newNodeUnresolved = nodeFromJSON(newVal, priorityForNode);\n        const newNode = resolveDeferredValueSnapshot(newNodeUnresolved, currentState, serverValues);\n        transaction.currentOutputSnapshotRaw = newNodeUnresolved;\n        transaction.currentOutputSnapshotResolved = newNode;\n        transaction.currentWriteId = repoGetNextWriteId(repo);\n        const events = syncTreeApplyUserOverwrite(repo.serverSyncTree_, path, newNode, transaction.currentWriteId, transaction.applyLocally);\n        eventQueueRaiseEventsForChangedPath(repo.eventQueue_, path, events);\n        repoSendReadyTransactions(repo, repo.transactionQueueTree_);\n    }\n}\n/**\n * @param excludeSets - A specific set to exclude\n */\nfunction repoGetLatestState(repo, path, excludeSets) {\n    return (syncTreeCalcCompleteEventCache(repo.serverSyncTree_, path, excludeSets) ||\n        ChildrenNode.EMPTY_NODE);\n}\n/**\n * Sends any already-run transactions that aren't waiting for outstanding\n * transactions to complete.\n *\n * Externally it's called with no arguments, but it calls itself recursively\n * with a particular transactionQueueTree node to recurse through the tree.\n *\n * @param node - transactionQueueTree node to start at.\n */\nfunction repoSendReadyTransactions(repo, node = repo.transactionQueueTree_) {\n    // Before recursing, make sure any completed transactions are removed.\n    if (!node) {\n        repoPruneCompletedTransactionsBelowNode(repo, node);\n    }\n    if (treeGetValue(node)) {\n        const queue = repoBuildTransactionQueue(repo, node);\n        assert(queue.length > 0, 'Sending zero length transaction queue');\n        const allRun = queue.every((transaction) => transaction.status === 0 /* TransactionStatus.RUN */);\n        // If they're all run (and not sent), we can send them.  Else, we must wait.\n        if (allRun) {\n            repoSendTransactionQueue(repo, treeGetPath(node), queue);\n        }\n    }\n    else if (treeHasChildren(node)) {\n        treeForEachChild(node, childNode => {\n            repoSendReadyTransactions(repo, childNode);\n        });\n    }\n}\n/**\n * Given a list of run transactions, send them to the server and then handle\n * the result (success or failure).\n *\n * @param path - The location of the queue.\n * @param queue - Queue of transactions under the specified location.\n */\nfunction repoSendTransactionQueue(repo, path, queue) {\n    // Mark transactions as sent and increment retry count!\n    const setsToIgnore = queue.map(txn => {\n        return txn.currentWriteId;\n    });\n    const latestState = repoGetLatestState(repo, path, setsToIgnore);\n    let snapToSend = latestState;\n    const latestHash = latestState.hash();\n    for (let i = 0; i < queue.length; i++) {\n        const txn = queue[i];\n        assert(txn.status === 0 /* TransactionStatus.RUN */, 'tryToSendTransactionQueue_: items in queue should all be run.');\n        txn.status = 1 /* TransactionStatus.SENT */;\n        txn.retryCount++;\n        const relativePath = newRelativePath(path, txn.path);\n        // If we've gotten to this point, the output snapshot must be defined.\n        snapToSend = snapToSend.updateChild(relativePath /** @type {!Node} */, txn.currentOutputSnapshotRaw);\n    }\n    const dataToSend = snapToSend.val(true);\n    const pathToSend = path;\n    // Send the put.\n    repo.server_.put(pathToSend.toString(), dataToSend, (status) => {\n        repoLog(repo, 'transaction put response', {\n            path: pathToSend.toString(),\n            status\n        });\n        let events = [];\n        if (status === 'ok') {\n            // Queue up the callbacks and fire them after cleaning up all of our\n            // transaction state, since the callback could trigger more\n            // transactions or sets.\n            const callbacks = [];\n            for (let i = 0; i < queue.length; i++) {\n                queue[i].status = 2 /* TransactionStatus.COMPLETED */;\n                events = events.concat(syncTreeAckUserWrite(repo.serverSyncTree_, queue[i].currentWriteId));\n                if (queue[i].onComplete) {\n                    // We never unset the output snapshot, and given that this\n                    // transaction is complete, it should be set\n                    callbacks.push(() => queue[i].onComplete(null, true, queue[i].currentOutputSnapshotResolved));\n                }\n                queue[i].unwatcher();\n            }\n            // Now remove the completed transactions.\n            repoPruneCompletedTransactionsBelowNode(repo, treeSubTree(repo.transactionQueueTree_, path));\n            // There may be pending transactions that we can now send.\n            repoSendReadyTransactions(repo, repo.transactionQueueTree_);\n            eventQueueRaiseEventsForChangedPath(repo.eventQueue_, path, events);\n            // Finally, trigger onComplete callbacks.\n            for (let i = 0; i < callbacks.length; i++) {\n                exceptionGuard(callbacks[i]);\n            }\n        }\n        else {\n            // transactions are no longer sent.  Update their status appropriately.\n            if (status === 'datastale') {\n                for (let i = 0; i < queue.length; i++) {\n                    if (queue[i].status === 3 /* TransactionStatus.SENT_NEEDS_ABORT */) {\n                        queue[i].status = 4 /* TransactionStatus.NEEDS_ABORT */;\n                    }\n                    else {\n                        queue[i].status = 0 /* TransactionStatus.RUN */;\n                    }\n                }\n            }\n            else {\n                warn('transaction at ' + pathToSend.toString() + ' failed: ' + status);\n                for (let i = 0; i < queue.length; i++) {\n                    queue[i].status = 4 /* TransactionStatus.NEEDS_ABORT */;\n                    queue[i].abortReason = status;\n                }\n            }\n            repoRerunTransactions(repo, path);\n        }\n    }, latestHash);\n}\n/**\n * Finds all transactions dependent on the data at changedPath and reruns them.\n *\n * Should be called any time cached data changes.\n *\n * Return the highest path that was affected by rerunning transactions. This\n * is the path at which events need to be raised for.\n *\n * @param changedPath - The path in mergedData that changed.\n * @returns The rootmost path that was affected by rerunning transactions.\n */\nfunction repoRerunTransactions(repo, changedPath) {\n    const rootMostTransactionNode = repoGetAncestorTransactionNode(repo, changedPath);\n    const path = treeGetPath(rootMostTransactionNode);\n    const queue = repoBuildTransactionQueue(repo, rootMostTransactionNode);\n    repoRerunTransactionQueue(repo, queue, path);\n    return path;\n}\n/**\n * Does all the work of rerunning transactions (as well as cleans up aborted\n * transactions and whatnot).\n *\n * @param queue - The queue of transactions to run.\n * @param path - The path the queue is for.\n */\nfunction repoRerunTransactionQueue(repo, queue, path) {\n    if (queue.length === 0) {\n        return; // Nothing to do!\n    }\n    // Queue up the callbacks and fire them after cleaning up all of our\n    // transaction state, since the callback could trigger more transactions or\n    // sets.\n    const callbacks = [];\n    let events = [];\n    // Ignore all of the sets we're going to re-run.\n    const txnsToRerun = queue.filter(q => {\n        return q.status === 0 /* TransactionStatus.RUN */;\n    });\n    const setsToIgnore = txnsToRerun.map(q => {\n        return q.currentWriteId;\n    });\n    for (let i = 0; i < queue.length; i++) {\n        const transaction = queue[i];\n        const relativePath = newRelativePath(path, transaction.path);\n        let abortTransaction = false, abortReason;\n        assert(relativePath !== null, 'rerunTransactionsUnderNode_: relativePath should not be null.');\n        if (transaction.status === 4 /* TransactionStatus.NEEDS_ABORT */) {\n            abortTransaction = true;\n            abortReason = transaction.abortReason;\n            events = events.concat(syncTreeAckUserWrite(repo.serverSyncTree_, transaction.currentWriteId, true));\n        }\n        else if (transaction.status === 0 /* TransactionStatus.RUN */) {\n            if (transaction.retryCount >= MAX_TRANSACTION_RETRIES) {\n                abortTransaction = true;\n                abortReason = 'maxretry';\n                events = events.concat(syncTreeAckUserWrite(repo.serverSyncTree_, transaction.currentWriteId, true));\n            }\n            else {\n                // This code reruns a transaction\n                const currentNode = repoGetLatestState(repo, transaction.path, setsToIgnore);\n                transaction.currentInputSnapshot = currentNode;\n                const newData = queue[i].update(currentNode.val());\n                if (newData !== undefined) {\n                    validateFirebaseData('transaction failed: Data returned ', newData, transaction.path);\n                    let newDataNode = nodeFromJSON(newData);\n                    const hasExplicitPriority = typeof newData === 'object' &&\n                        newData != null &&\n                        contains(newData, '.priority');\n                    if (!hasExplicitPriority) {\n                        // Keep the old priority if there wasn't a priority explicitly specified.\n                        newDataNode = newDataNode.updatePriority(currentNode.getPriority());\n                    }\n                    const oldWriteId = transaction.currentWriteId;\n                    const serverValues = repoGenerateServerValues(repo);\n                    const newNodeResolved = resolveDeferredValueSnapshot(newDataNode, currentNode, serverValues);\n                    transaction.currentOutputSnapshotRaw = newDataNode;\n                    transaction.currentOutputSnapshotResolved = newNodeResolved;\n                    transaction.currentWriteId = repoGetNextWriteId(repo);\n                    // Mutates setsToIgnore in place\n                    setsToIgnore.splice(setsToIgnore.indexOf(oldWriteId), 1);\n                    events = events.concat(syncTreeApplyUserOverwrite(repo.serverSyncTree_, transaction.path, newNodeResolved, transaction.currentWriteId, transaction.applyLocally));\n                    events = events.concat(syncTreeAckUserWrite(repo.serverSyncTree_, oldWriteId, true));\n                }\n                else {\n                    abortTransaction = true;\n                    abortReason = 'nodata';\n                    events = events.concat(syncTreeAckUserWrite(repo.serverSyncTree_, transaction.currentWriteId, true));\n                }\n            }\n        }\n        eventQueueRaiseEventsForChangedPath(repo.eventQueue_, path, events);\n        events = [];\n        if (abortTransaction) {\n            // Abort.\n            queue[i].status = 2 /* TransactionStatus.COMPLETED */;\n            // Removing a listener can trigger pruning which can muck with\n            // mergedData/visibleData (as it prunes data). So defer the unwatcher\n            // until we're done.\n            (function (unwatcher) {\n                setTimeout(unwatcher, Math.floor(0));\n            })(queue[i].unwatcher);\n            if (queue[i].onComplete) {\n                if (abortReason === 'nodata') {\n                    callbacks.push(() => queue[i].onComplete(null, false, queue[i].currentInputSnapshot));\n                }\n                else {\n                    callbacks.push(() => queue[i].onComplete(new Error(abortReason), false, null));\n                }\n            }\n        }\n    }\n    // Clean up completed transactions.\n    repoPruneCompletedTransactionsBelowNode(repo, repo.transactionQueueTree_);\n    // Now fire callbacks, now that we're in a good, known state.\n    for (let i = 0; i < callbacks.length; i++) {\n        exceptionGuard(callbacks[i]);\n    }\n    // Try to send the transaction result to the server.\n    repoSendReadyTransactions(repo, repo.transactionQueueTree_);\n}\n/**\n * Returns the rootmost ancestor node of the specified path that has a pending\n * transaction on it, or just returns the node for the given path if there are\n * no pending transactions on any ancestor.\n *\n * @param path - The location to start at.\n * @returns The rootmost node with a transaction.\n */\nfunction repoGetAncestorTransactionNode(repo, path) {\n    let front;\n    // Start at the root and walk deeper into the tree towards path until we\n    // find a node with pending transactions.\n    let transactionNode = repo.transactionQueueTree_;\n    front = pathGetFront(path);\n    while (front !== null && treeGetValue(transactionNode) === undefined) {\n        transactionNode = treeSubTree(transactionNode, front);\n        path = pathPopFront(path);\n        front = pathGetFront(path);\n    }\n    return transactionNode;\n}\n/**\n * Builds the queue of all transactions at or below the specified\n * transactionNode.\n *\n * @param transactionNode\n * @returns The generated queue.\n */\nfunction repoBuildTransactionQueue(repo, transactionNode) {\n    // Walk any child transaction queues and aggregate them into a single queue.\n    const transactionQueue = [];\n    repoAggregateTransactionQueuesForNode(repo, transactionNode, transactionQueue);\n    // Sort them by the order the transactions were created.\n    transactionQueue.sort((a, b) => a.order - b.order);\n    return transactionQueue;\n}\nfunction repoAggregateTransactionQueuesForNode(repo, node, queue) {\n    const nodeQueue = treeGetValue(node);\n    if (nodeQueue) {\n        for (let i = 0; i < nodeQueue.length; i++) {\n            queue.push(nodeQueue[i]);\n        }\n    }\n    treeForEachChild(node, child => {\n        repoAggregateTransactionQueuesForNode(repo, child, queue);\n    });\n}\n/**\n * Remove COMPLETED transactions at or below this node in the transactionQueueTree_.\n */\nfunction repoPruneCompletedTransactionsBelowNode(repo, node) {\n    const queue = treeGetValue(node);\n    if (queue) {\n        let to = 0;\n        for (let from = 0; from < queue.length; from++) {\n            if (queue[from].status !== 2 /* TransactionStatus.COMPLETED */) {\n                queue[to] = queue[from];\n                to++;\n            }\n        }\n        queue.length = to;\n        treeSetValue(node, queue.length > 0 ? queue : undefined);\n    }\n    treeForEachChild(node, childNode => {\n        repoPruneCompletedTransactionsBelowNode(repo, childNode);\n    });\n}\n/**\n * Aborts all transactions on ancestors or descendants of the specified path.\n * Called when doing a set() or update() since we consider them incompatible\n * with transactions.\n *\n * @param path - Path for which we want to abort related transactions.\n */\nfunction repoAbortTransactions(repo, path) {\n    const affectedPath = treeGetPath(repoGetAncestorTransactionNode(repo, path));\n    const transactionNode = treeSubTree(repo.transactionQueueTree_, path);\n    treeForEachAncestor(transactionNode, (node) => {\n        repoAbortTransactionsOnNode(repo, node);\n    });\n    repoAbortTransactionsOnNode(repo, transactionNode);\n    treeForEachDescendant(transactionNode, (node) => {\n        repoAbortTransactionsOnNode(repo, node);\n    });\n    return affectedPath;\n}\n/**\n * Abort transactions stored in this transaction queue node.\n *\n * @param node - Node to abort transactions for.\n */\nfunction repoAbortTransactionsOnNode(repo, node) {\n    const queue = treeGetValue(node);\n    if (queue) {\n        // Queue up the callbacks and fire them after cleaning up all of our\n        // transaction state, since the callback could trigger more transactions\n        // or sets.\n        const callbacks = [];\n        // Go through queue.  Any already-sent transactions must be marked for\n        // abort, while the unsent ones can be immediately aborted and removed.\n        let events = [];\n        let lastSent = -1;\n        for (let i = 0; i < queue.length; i++) {\n            if (queue[i].status === 3 /* TransactionStatus.SENT_NEEDS_ABORT */) ;\n            else if (queue[i].status === 1 /* TransactionStatus.SENT */) {\n                assert(lastSent === i - 1, 'All SENT items should be at beginning of queue.');\n                lastSent = i;\n                // Mark transaction for abort when it comes back.\n                queue[i].status = 3 /* TransactionStatus.SENT_NEEDS_ABORT */;\n                queue[i].abortReason = 'set';\n            }\n            else {\n                assert(queue[i].status === 0 /* TransactionStatus.RUN */, 'Unexpected transaction status in abort');\n                // We can abort it immediately.\n                queue[i].unwatcher();\n                events = events.concat(syncTreeAckUserWrite(repo.serverSyncTree_, queue[i].currentWriteId, true));\n                if (queue[i].onComplete) {\n                    callbacks.push(queue[i].onComplete.bind(null, new Error('set'), false, null));\n                }\n            }\n        }\n        if (lastSent === -1) {\n            // We're not waiting for any sent transactions.  We can clear the queue.\n            treeSetValue(node, undefined);\n        }\n        else {\n            // Remove the transactions we aborted.\n            queue.length = lastSent + 1;\n        }\n        // Now fire the callbacks.\n        eventQueueRaiseEventsForChangedPath(repo.eventQueue_, treeGetPath(node), events);\n        for (let i = 0; i < callbacks.length; i++) {\n            exceptionGuard(callbacks[i]);\n        }\n    }\n}\n\n/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nfunction decodePath(pathString) {\n    let pathStringDecoded = '';\n    const pieces = pathString.split('/');\n    for (let i = 0; i < pieces.length; i++) {\n        if (pieces[i].length > 0) {\n            let piece = pieces[i];\n            try {\n                piece = decodeURIComponent(piece.replace(/\\+/g, ' '));\n            }\n            catch (e) { }\n            pathStringDecoded += '/' + piece;\n        }\n    }\n    return pathStringDecoded;\n}\n/**\n * @returns key value hash\n */\nfunction decodeQuery(queryString) {\n    const results = {};\n    if (queryString.charAt(0) === '?') {\n        queryString = queryString.substring(1);\n    }\n    for (const segment of queryString.split('&')) {\n        if (segment.length === 0) {\n            continue;\n        }\n        const kv = segment.split('=');\n        if (kv.length === 2) {\n            results[decodeURIComponent(kv[0])] = decodeURIComponent(kv[1]);\n        }\n        else {\n            warn(`Invalid query segment '${segment}' in query '${queryString}'`);\n        }\n    }\n    return results;\n}\nconst parseRepoInfo = function (dataURL, nodeAdmin) {\n    const parsedUrl = parseDatabaseURL(dataURL), namespace = parsedUrl.namespace;\n    if (parsedUrl.domain === 'firebase.com') {\n        fatal(parsedUrl.host +\n            ' is no longer supported. ' +\n            'Please use <YOUR FIREBASE>.firebaseio.com instead');\n    }\n    // Catch common error of uninitialized namespace value.\n    if ((!namespace || namespace === 'undefined') &&\n        parsedUrl.domain !== 'localhost') {\n        fatal('Cannot parse Firebase url. Please use https://<YOUR FIREBASE>.firebaseio.com');\n    }\n    if (!parsedUrl.secure) {\n        warnIfPageIsSecure();\n    }\n    const webSocketOnly = parsedUrl.scheme === 'ws' || parsedUrl.scheme === 'wss';\n    return {\n        repoInfo: new RepoInfo(parsedUrl.host, parsedUrl.secure, namespace, webSocketOnly, nodeAdmin, \n        /*persistenceKey=*/ '', \n        /*includeNamespaceInQueryParams=*/ namespace !== parsedUrl.subdomain),\n        path: new Path(parsedUrl.pathString)\n    };\n};\nconst parseDatabaseURL = function (dataURL) {\n    // Default to empty strings in the event of a malformed string.\n    let host = '', domain = '', subdomain = '', pathString = '', namespace = '';\n    // Always default to SSL, unless otherwise specified.\n    let secure = true, scheme = 'https', port = 443;\n    // Don't do any validation here. The caller is responsible for validating the result of parsing.\n    if (typeof dataURL === 'string') {\n        // Parse scheme.\n        let colonInd = dataURL.indexOf('//');\n        if (colonInd >= 0) {\n            scheme = dataURL.substring(0, colonInd - 1);\n            dataURL = dataURL.substring(colonInd + 2);\n        }\n        // Parse host, path, and query string.\n        let slashInd = dataURL.indexOf('/');\n        if (slashInd === -1) {\n            slashInd = dataURL.length;\n        }\n        let questionMarkInd = dataURL.indexOf('?');\n        if (questionMarkInd === -1) {\n            questionMarkInd = dataURL.length;\n        }\n        host = dataURL.substring(0, Math.min(slashInd, questionMarkInd));\n        if (slashInd < questionMarkInd) {\n            // For pathString, questionMarkInd will always come after slashInd\n            pathString = decodePath(dataURL.substring(slashInd, questionMarkInd));\n        }\n        const queryParams = decodeQuery(dataURL.substring(Math.min(dataURL.length, questionMarkInd)));\n        // If we have a port, use scheme for determining if it's secure.\n        colonInd = host.indexOf(':');\n        if (colonInd >= 0) {\n            secure = scheme === 'https' || scheme === 'wss';\n            port = parseInt(host.substring(colonInd + 1), 10);\n        }\n        else {\n            colonInd = host.length;\n        }\n        const hostWithoutPort = host.slice(0, colonInd);\n        if (hostWithoutPort.toLowerCase() === 'localhost') {\n            domain = 'localhost';\n        }\n        else if (hostWithoutPort.split('.').length <= 2) {\n            domain = hostWithoutPort;\n        }\n        else {\n            // Interpret the subdomain of a 3 or more component URL as the namespace name.\n            const dotInd = host.indexOf('.');\n            subdomain = host.substring(0, dotInd).toLowerCase();\n            domain = host.substring(dotInd + 1);\n            // Normalize namespaces to lowercase to share storage / connection.\n            namespace = subdomain;\n        }\n        // Always treat the value of the `ns` as the namespace name if it is present.\n        if ('ns' in queryParams) {\n            namespace = queryParams['ns'];\n        }\n    }\n    return {\n        host,\n        port,\n        domain,\n        subdomain,\n        secure,\n        scheme,\n        pathString,\n        namespace\n    };\n};\n\n/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n// Modeled after base64 web-safe chars, but ordered by ASCII.\nconst PUSH_CHARS = '-0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz';\n/**\n * Fancy ID generator that creates 20-character string identifiers with the\n * following properties:\n *\n * 1. They're based on timestamp so that they sort *after* any existing ids.\n * 2. They contain 72-bits of random data after the timestamp so that IDs won't\n *    collide with other clients' IDs.\n * 3. They sort *lexicographically* (so the timestamp is converted to characters\n *    that will sort properly).\n * 4. They're monotonically increasing. Even if you generate more than one in\n *    the same timestamp, the latter ones will sort after the former ones. We do\n *    this by using the previous random bits but \"incrementing\" them by 1 (only\n *    in the case of a timestamp collision).\n */\nconst nextPushId = (function () {\n    // Timestamp of last push, used to prevent local collisions if you push twice\n    // in one ms.\n    let lastPushTime = 0;\n    // We generate 72-bits of randomness which get turned into 12 characters and\n    // appended to the timestamp to prevent collisions with other clients. We\n    // store the last characters we generated because in the event of a collision,\n    // we'll use those same characters except \"incremented\" by one.\n    const lastRandChars = [];\n    return function (now) {\n        const duplicateTime = now === lastPushTime;\n        lastPushTime = now;\n        let i;\n        const timeStampChars = new Array(8);\n        for (i = 7; i >= 0; i--) {\n            timeStampChars[i] = PUSH_CHARS.charAt(now % 64);\n            // NOTE: Can't use << here because javascript will convert to int and lose\n            // the upper bits.\n            now = Math.floor(now / 64);\n        }\n        assert(now === 0, 'Cannot push at time == 0');\n        let id = timeStampChars.join('');\n        if (!duplicateTime) {\n            for (i = 0; i < 12; i++) {\n                lastRandChars[i] = Math.floor(Math.random() * 64);\n            }\n        }\n        else {\n            // If the timestamp hasn't changed since last push, use the same random\n            // number, except incremented by 1.\n            for (i = 11; i >= 0 && lastRandChars[i] === 63; i--) {\n                lastRandChars[i] = 0;\n            }\n            lastRandChars[i]++;\n        }\n        for (i = 0; i < 12; i++) {\n            id += PUSH_CHARS.charAt(lastRandChars[i]);\n        }\n        assert(id.length === 20, 'nextPushId: Length should be 20.');\n        return id;\n    };\n})();\n\n/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Encapsulates the data needed to raise an event\n */\nclass DataEvent {\n    /**\n     * @param eventType - One of: value, child_added, child_changed, child_moved, child_removed\n     * @param eventRegistration - The function to call to with the event data. User provided\n     * @param snapshot - The data backing the event\n     * @param prevName - Optional, the name of the previous child for child_* events.\n     */\n    constructor(eventType, eventRegistration, snapshot, prevName) {\n        this.eventType = eventType;\n        this.eventRegistration = eventRegistration;\n        this.snapshot = snapshot;\n        this.prevName = prevName;\n    }\n    getPath() {\n        const ref = this.snapshot.ref;\n        if (this.eventType === 'value') {\n            return ref._path;\n        }\n        else {\n            return ref.parent._path;\n        }\n    }\n    getEventType() {\n        return this.eventType;\n    }\n    getEventRunner() {\n        return this.eventRegistration.getEventRunner(this);\n    }\n    toString() {\n        return (this.getPath().toString() +\n            ':' +\n            this.eventType +\n            ':' +\n            stringify(this.snapshot.exportVal()));\n    }\n}\nclass CancelEvent {\n    constructor(eventRegistration, error, path) {\n        this.eventRegistration = eventRegistration;\n        this.error = error;\n        this.path = path;\n    }\n    getPath() {\n        return this.path;\n    }\n    getEventType() {\n        return 'cancel';\n    }\n    getEventRunner() {\n        return this.eventRegistration.getEventRunner(this);\n    }\n    toString() {\n        return this.path.toString() + ':cancel';\n    }\n}\n\n/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * A wrapper class that converts events from the database@exp SDK to the legacy\n * Database SDK. Events are not converted directly as event registration relies\n * on reference comparison of the original user callback (see `matches()`) and\n * relies on equality of the legacy SDK's `context` object.\n */\nclass CallbackContext {\n    constructor(snapshotCallback, cancelCallback) {\n        this.snapshotCallback = snapshotCallback;\n        this.cancelCallback = cancelCallback;\n    }\n    onValue(expDataSnapshot, previousChildName) {\n        this.snapshotCallback.call(null, expDataSnapshot, previousChildName);\n    }\n    onCancel(error) {\n        assert(this.hasCancelCallback, 'Raising a cancel event on a listener with no cancel callback');\n        return this.cancelCallback.call(null, error);\n    }\n    get hasCancelCallback() {\n        return !!this.cancelCallback;\n    }\n    matches(other) {\n        return (this.snapshotCallback === other.snapshotCallback ||\n            (this.snapshotCallback.userCallback !== undefined &&\n                this.snapshotCallback.userCallback ===\n                    other.snapshotCallback.userCallback &&\n                this.snapshotCallback.context === other.snapshotCallback.context));\n    }\n}\n\n/**\n * @license\n * Copyright 2021 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * The `onDisconnect` class allows you to write or clear data when your client\n * disconnects from the Database server. These updates occur whether your\n * client disconnects cleanly or not, so you can rely on them to clean up data\n * even if a connection is dropped or a client crashes.\n *\n * The `onDisconnect` class is most commonly used to manage presence in\n * applications where it is useful to detect how many clients are connected and\n * when other clients disconnect. See\n * {@link https://firebase.google.com/docs/database/web/offline-capabilities | Enabling Offline Capabilities in JavaScript}\n * for more information.\n *\n * To avoid problems when a connection is dropped before the requests can be\n * transferred to the Database server, these functions should be called before\n * writing any data.\n *\n * Note that `onDisconnect` operations are only triggered once. If you want an\n * operation to occur each time a disconnect occurs, you'll need to re-establish\n * the `onDisconnect` operations each time you reconnect.\n */\nclass OnDisconnect {\n    /** @hideconstructor */\n    constructor(_repo, _path) {\n        this._repo = _repo;\n        this._path = _path;\n    }\n    /**\n     * Cancels all previously queued `onDisconnect()` set or update events for this\n     * location and all children.\n     *\n     * If a write has been queued for this location via a `set()` or `update()` at a\n     * parent location, the write at this location will be canceled, though writes\n     * to sibling locations will still occur.\n     *\n     * @returns Resolves when synchronization to the server is complete.\n     */\n    cancel() {\n        const deferred = new Deferred();\n        repoOnDisconnectCancel(this._repo, this._path, deferred.wrapCallback(() => { }));\n        return deferred.promise;\n    }\n    /**\n     * Ensures the data at this location is deleted when the client is disconnected\n     * (due to closing the browser, navigating to a new page, or network issues).\n     *\n     * @returns Resolves when synchronization to the server is complete.\n     */\n    remove() {\n        validateWritablePath('OnDisconnect.remove', this._path);\n        const deferred = new Deferred();\n        repoOnDisconnectSet(this._repo, this._path, null, deferred.wrapCallback(() => { }));\n        return deferred.promise;\n    }\n    /**\n     * Ensures the data at this location is set to the specified value when the\n     * client is disconnected (due to closing the browser, navigating to a new page,\n     * or network issues).\n     *\n     * `set()` is especially useful for implementing \"presence\" systems, where a\n     * value should be changed or cleared when a user disconnects so that they\n     * appear \"offline\" to other users. See\n     * {@link https://firebase.google.com/docs/database/web/offline-capabilities | Enabling Offline Capabilities in JavaScript}\n     * for more information.\n     *\n     * Note that `onDisconnect` operations are only triggered once. If you want an\n     * operation to occur each time a disconnect occurs, you'll need to re-establish\n     * the `onDisconnect` operations each time.\n     *\n     * @param value - The value to be written to this location on disconnect (can\n     * be an object, array, string, number, boolean, or null).\n     * @returns Resolves when synchronization to the Database is complete.\n     */\n    set(value) {\n        validateWritablePath('OnDisconnect.set', this._path);\n        validateFirebaseDataArg('OnDisconnect.set', value, this._path, false);\n        const deferred = new Deferred();\n        repoOnDisconnectSet(this._repo, this._path, value, deferred.wrapCallback(() => { }));\n        return deferred.promise;\n    }\n    /**\n     * Ensures the data at this location is set to the specified value and priority\n     * when the client is disconnected (due to closing the browser, navigating to a\n     * new page, or network issues).\n     *\n     * @param value - The value to be written to this location on disconnect (can\n     * be an object, array, string, number, boolean, or null).\n     * @param priority - The priority to be written (string, number, or null).\n     * @returns Resolves when synchronization to the Database is complete.\n     */\n    setWithPriority(value, priority) {\n        validateWritablePath('OnDisconnect.setWithPriority', this._path);\n        validateFirebaseDataArg('OnDisconnect.setWithPriority', value, this._path, false);\n        validatePriority('OnDisconnect.setWithPriority', priority, false);\n        const deferred = new Deferred();\n        repoOnDisconnectSetWithPriority(this._repo, this._path, value, priority, deferred.wrapCallback(() => { }));\n        return deferred.promise;\n    }\n    /**\n     * Writes multiple values at this location when the client is disconnected (due\n     * to closing the browser, navigating to a new page, or network issues).\n     *\n     * The `values` argument contains multiple property-value pairs that will be\n     * written to the Database together. Each child property can either be a simple\n     * property (for example, \"name\") or a relative path (for example, \"name/first\")\n     * from the current location to the data to update.\n     *\n     * As opposed to the `set()` method, `update()` can be use to selectively update\n     * only the referenced properties at the current location (instead of replacing\n     * all the child properties at the current location).\n     *\n     * @param values - Object containing multiple values.\n     * @returns Resolves when synchronization to the Database is complete.\n     */\n    update(values) {\n        validateWritablePath('OnDisconnect.update', this._path);\n        validateFirebaseMergeDataArg('OnDisconnect.update', values, this._path, false);\n        const deferred = new Deferred();\n        repoOnDisconnectUpdate(this._repo, this._path, values, deferred.wrapCallback(() => { }));\n        return deferred.promise;\n    }\n}\n\n/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * @internal\n */\nclass QueryImpl {\n    /**\n     * @hideconstructor\n     */\n    constructor(_repo, _path, _queryParams, _orderByCalled) {\n        this._repo = _repo;\n        this._path = _path;\n        this._queryParams = _queryParams;\n        this._orderByCalled = _orderByCalled;\n    }\n    get key() {\n        if (pathIsEmpty(this._path)) {\n            return null;\n        }\n        else {\n            return pathGetBack(this._path);\n        }\n    }\n    get ref() {\n        return new ReferenceImpl(this._repo, this._path);\n    }\n    get _queryIdentifier() {\n        const obj = queryParamsGetQueryObject(this._queryParams);\n        const id = ObjectToUniqueKey(obj);\n        return id === '{}' ? 'default' : id;\n    }\n    /**\n     * An object representation of the query parameters used by this Query.\n     */\n    get _queryObject() {\n        return queryParamsGetQueryObject(this._queryParams);\n    }\n    isEqual(other) {\n        other = getModularInstance(other);\n        if (!(other instanceof QueryImpl)) {\n            return false;\n        }\n        const sameRepo = this._repo === other._repo;\n        const samePath = pathEquals(this._path, other._path);\n        const sameQueryIdentifier = this._queryIdentifier === other._queryIdentifier;\n        return sameRepo && samePath && sameQueryIdentifier;\n    }\n    toJSON() {\n        return this.toString();\n    }\n    toString() {\n        return this._repo.toString() + pathToUrlEncodedString(this._path);\n    }\n}\n/**\n * Validates that no other order by call has been made\n */\nfunction validateNoPreviousOrderByCall(query, fnName) {\n    if (query._orderByCalled === true) {\n        throw new Error(fnName + \": You can't combine multiple orderBy calls.\");\n    }\n}\n/**\n * Validates start/end values for queries.\n */\nfunction validateQueryEndpoints(params) {\n    let startNode = null;\n    let endNode = null;\n    if (params.hasStart()) {\n        startNode = params.getIndexStartValue();\n    }\n    if (params.hasEnd()) {\n        endNode = params.getIndexEndValue();\n    }\n    if (params.getIndex() === KEY_INDEX) {\n        const tooManyArgsError = 'Query: When ordering by key, you may only pass one argument to ' +\n            'startAt(), endAt(), or equalTo().';\n        const wrongArgTypeError = 'Query: When ordering by key, the argument passed to startAt(), startAfter(), ' +\n            'endAt(), endBefore(), or equalTo() must be a string.';\n        if (params.hasStart()) {\n            const startName = params.getIndexStartName();\n            if (startName !== MIN_NAME) {\n                throw new Error(tooManyArgsError);\n            }\n            else if (typeof startNode !== 'string') {\n                throw new Error(wrongArgTypeError);\n            }\n        }\n        if (params.hasEnd()) {\n            const endName = params.getIndexEndName();\n            if (endName !== MAX_NAME) {\n                throw new Error(tooManyArgsError);\n            }\n            else if (typeof endNode !== 'string') {\n                throw new Error(wrongArgTypeError);\n            }\n        }\n    }\n    else if (params.getIndex() === PRIORITY_INDEX) {\n        if ((startNode != null && !isValidPriority(startNode)) ||\n            (endNode != null && !isValidPriority(endNode))) {\n            throw new Error('Query: When ordering by priority, the first argument passed to startAt(), ' +\n                'startAfter() endAt(), endBefore(), or equalTo() must be a valid priority value ' +\n                '(null, a number, or a string).');\n        }\n    }\n    else {\n        assert(params.getIndex() instanceof PathIndex ||\n            params.getIndex() === VALUE_INDEX, 'unknown index type.');\n        if ((startNode != null && typeof startNode === 'object') ||\n            (endNode != null && typeof endNode === 'object')) {\n            throw new Error('Query: First argument passed to startAt(), startAfter(), endAt(), endBefore(), or ' +\n                'equalTo() cannot be an object.');\n        }\n    }\n}\n/**\n * Validates that limit* has been called with the correct combination of parameters\n */\nfunction validateLimit(params) {\n    if (params.hasStart() &&\n        params.hasEnd() &&\n        params.hasLimit() &&\n        !params.hasAnchoredLimit()) {\n        throw new Error(\"Query: Can't combine startAt(), startAfter(), endAt(), endBefore(), and limit(). Use \" +\n            'limitToFirst() or limitToLast() instead.');\n    }\n}\n/**\n * @internal\n */\nclass ReferenceImpl extends QueryImpl {\n    /** @hideconstructor */\n    constructor(repo, path) {\n        super(repo, path, new QueryParams(), false);\n    }\n    get parent() {\n        const parentPath = pathParent(this._path);\n        return parentPath === null\n            ? null\n            : new ReferenceImpl(this._repo, parentPath);\n    }\n    get root() {\n        let ref = this;\n        while (ref.parent !== null) {\n            ref = ref.parent;\n        }\n        return ref;\n    }\n}\n/**\n * A `DataSnapshot` contains data from a Database location.\n *\n * Any time you read data from the Database, you receive the data as a\n * `DataSnapshot`. A `DataSnapshot` is passed to the event callbacks you attach\n * with `on()` or `once()`. You can extract the contents of the snapshot as a\n * JavaScript object by calling the `val()` method. Alternatively, you can\n * traverse into the snapshot by calling `child()` to return child snapshots\n * (which you could then call `val()` on).\n *\n * A `DataSnapshot` is an efficiently generated, immutable copy of the data at\n * a Database location. It cannot be modified and will never change (to modify\n * data, you always call the `set()` method on a `Reference` directly).\n */\nclass DataSnapshot {\n    /**\n     * @param _node - A SnapshotNode to wrap.\n     * @param ref - The location this snapshot came from.\n     * @param _index - The iteration order for this snapshot\n     * @hideconstructor\n     */\n    constructor(_node, \n    /**\n     * The location of this DataSnapshot.\n     */\n    ref, _index) {\n        this._node = _node;\n        this.ref = ref;\n        this._index = _index;\n    }\n    /**\n     * Gets the priority value of the data in this `DataSnapshot`.\n     *\n     * Applications need not use priority but can order collections by\n     * ordinary properties (see\n     * {@link https://firebase.google.com/docs/database/web/lists-of-data#sorting_and_filtering_data |Sorting and filtering data}\n     * ).\n     */\n    get priority() {\n        // typecast here because we never return deferred values or internal priorities (MAX_PRIORITY)\n        return this._node.getPriority().val();\n    }\n    /**\n     * The key (last part of the path) of the location of this `DataSnapshot`.\n     *\n     * The last token in a Database location is considered its key. For example,\n     * \"ada\" is the key for the /users/ada/ node. Accessing the key on any\n     * `DataSnapshot` will return the key for the location that generated it.\n     * However, accessing the key on the root URL of a Database will return\n     * `null`.\n     */\n    get key() {\n        return this.ref.key;\n    }\n    /** Returns the number of child properties of this `DataSnapshot`. */\n    get size() {\n        return this._node.numChildren();\n    }\n    /**\n     * Gets another `DataSnapshot` for the location at the specified relative path.\n     *\n     * Passing a relative path to the `child()` method of a DataSnapshot returns\n     * another `DataSnapshot` for the location at the specified relative path. The\n     * relative path can either be a simple child name (for example, \"ada\") or a\n     * deeper, slash-separated path (for example, \"ada/name/first\"). If the child\n     * location has no data, an empty `DataSnapshot` (that is, a `DataSnapshot`\n     * whose value is `null`) is returned.\n     *\n     * @param path - A relative path to the location of child data.\n     */\n    child(path) {\n        const childPath = new Path(path);\n        const childRef = child(this.ref, path);\n        return new DataSnapshot(this._node.getChild(childPath), childRef, PRIORITY_INDEX);\n    }\n    /**\n     * Returns true if this `DataSnapshot` contains any data. It is slightly more\n     * efficient than using `snapshot.val() !== null`.\n     */\n    exists() {\n        return !this._node.isEmpty();\n    }\n    /**\n     * Exports the entire contents of the DataSnapshot as a JavaScript object.\n     *\n     * The `exportVal()` method is similar to `val()`, except priority information\n     * is included (if available), making it suitable for backing up your data.\n     *\n     * @returns The DataSnapshot's contents as a JavaScript value (Object,\n     *   Array, string, number, boolean, or `null`).\n     */\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    exportVal() {\n        return this._node.val(true);\n    }\n    /**\n     * Enumerates the top-level children in the `IteratedDataSnapshot`.\n     *\n     * Because of the way JavaScript objects work, the ordering of data in the\n     * JavaScript object returned by `val()` is not guaranteed to match the\n     * ordering on the server nor the ordering of `onChildAdded()` events. That is\n     * where `forEach()` comes in handy. It guarantees the children of a\n     * `DataSnapshot` will be iterated in their query order.\n     *\n     * If no explicit `orderBy*()` method is used, results are returned\n     * ordered by key (unless priorities are used, in which case, results are\n     * returned by priority).\n     *\n     * @param action - A function that will be called for each child DataSnapshot.\n     * The callback can return true to cancel further enumeration.\n     * @returns true if enumeration was canceled due to your callback returning\n     * true.\n     */\n    forEach(action) {\n        if (this._node.isLeafNode()) {\n            return false;\n        }\n        const childrenNode = this._node;\n        // Sanitize the return value to a boolean. ChildrenNode.forEachChild has a weird return type...\n        return !!childrenNode.forEachChild(this._index, (key, node) => {\n            return action(new DataSnapshot(node, child(this.ref, key), PRIORITY_INDEX));\n        });\n    }\n    /**\n     * Returns true if the specified child path has (non-null) data.\n     *\n     * @param path - A relative path to the location of a potential child.\n     * @returns `true` if data exists at the specified child path; else\n     *  `false`.\n     */\n    hasChild(path) {\n        const childPath = new Path(path);\n        return !this._node.getChild(childPath).isEmpty();\n    }\n    /**\n     * Returns whether or not the `DataSnapshot` has any non-`null` child\n     * properties.\n     *\n     * You can use `hasChildren()` to determine if a `DataSnapshot` has any\n     * children. If it does, you can enumerate them using `forEach()`. If it\n     * doesn't, then either this snapshot contains a primitive value (which can be\n     * retrieved with `val()`) or it is empty (in which case, `val()` will return\n     * `null`).\n     *\n     * @returns true if this snapshot has any children; else false.\n     */\n    hasChildren() {\n        if (this._node.isLeafNode()) {\n            return false;\n        }\n        else {\n            return !this._node.isEmpty();\n        }\n    }\n    /**\n     * Returns a JSON-serializable representation of this object.\n     */\n    toJSON() {\n        return this.exportVal();\n    }\n    /**\n     * Extracts a JavaScript value from a `DataSnapshot`.\n     *\n     * Depending on the data in a `DataSnapshot`, the `val()` method may return a\n     * scalar type (string, number, or boolean), an array, or an object. It may\n     * also return null, indicating that the `DataSnapshot` is empty (contains no\n     * data).\n     *\n     * @returns The DataSnapshot's contents as a JavaScript value (Object,\n     *   Array, string, number, boolean, or `null`).\n     */\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    val() {\n        return this._node.val();\n    }\n}\n/**\n *\n * Returns a `Reference` representing the location in the Database\n * corresponding to the provided path. If no path is provided, the `Reference`\n * will point to the root of the Database.\n *\n * @param db - The database instance to obtain a reference for.\n * @param path - Optional path representing the location the returned\n *   `Reference` will point. If not provided, the returned `Reference` will\n *   point to the root of the Database.\n * @returns If a path is provided, a `Reference`\n *   pointing to the provided path. Otherwise, a `Reference` pointing to the\n *   root of the Database.\n */\nfunction ref(db, path) {\n    db = getModularInstance(db);\n    db._checkNotDeleted('ref');\n    return path !== undefined ? child(db._root, path) : db._root;\n}\n/**\n * Returns a `Reference` representing the location in the Database\n * corresponding to the provided Firebase URL.\n *\n * An exception is thrown if the URL is not a valid Firebase Database URL or it\n * has a different domain than the current `Database` instance.\n *\n * Note that all query parameters (`orderBy`, `limitToLast`, etc.) are ignored\n * and are not applied to the returned `Reference`.\n *\n * @param db - The database instance to obtain a reference for.\n * @param url - The Firebase URL at which the returned `Reference` will\n *   point.\n * @returns A `Reference` pointing to the provided\n *   Firebase URL.\n */\nfunction refFromURL(db, url) {\n    db = getModularInstance(db);\n    db._checkNotDeleted('refFromURL');\n    const parsedURL = parseRepoInfo(url, db._repo.repoInfo_.nodeAdmin);\n    validateUrl('refFromURL', parsedURL);\n    const repoInfo = parsedURL.repoInfo;\n    if (!db._repo.repoInfo_.isCustomHost() &&\n        repoInfo.host !== db._repo.repoInfo_.host) {\n        fatal('refFromURL' +\n            ': Host name does not match the current database: ' +\n            '(found ' +\n            repoInfo.host +\n            ' but expected ' +\n            db._repo.repoInfo_.host +\n            ')');\n    }\n    return ref(db, parsedURL.path.toString());\n}\n/**\n * Gets a `Reference` for the location at the specified relative path.\n *\n * The relative path can either be a simple child name (for example, \"ada\") or\n * a deeper slash-separated path (for example, \"ada/name/first\").\n *\n * @param parent - The parent location.\n * @param path - A relative path from this location to the desired child\n *   location.\n * @returns The specified child location.\n */\nfunction child(parent, path) {\n    parent = getModularInstance(parent);\n    if (pathGetFront(parent._path) === null) {\n        validateRootPathString('child', 'path', path, false);\n    }\n    else {\n        validatePathString('child', 'path', path, false);\n    }\n    return new ReferenceImpl(parent._repo, pathChild(parent._path, path));\n}\n/**\n * Returns an `OnDisconnect` object - see\n * {@link https://firebase.google.com/docs/database/web/offline-capabilities | Enabling Offline Capabilities in JavaScript}\n * for more information on how to use it.\n *\n * @param ref - The reference to add OnDisconnect triggers for.\n */\nfunction onDisconnect(ref) {\n    ref = getModularInstance(ref);\n    return new OnDisconnect(ref._repo, ref._path);\n}\n/**\n * Generates a new child location using a unique key and returns its\n * `Reference`.\n *\n * This is the most common pattern for adding data to a collection of items.\n *\n * If you provide a value to `push()`, the value is written to the\n * generated location. If you don't pass a value, nothing is written to the\n * database and the child remains empty (but you can use the `Reference`\n * elsewhere).\n *\n * The unique keys generated by `push()` are ordered by the current time, so the\n * resulting list of items is chronologically sorted. The keys are also\n * designed to be unguessable (they contain 72 random bits of entropy).\n *\n * See {@link https://firebase.google.com/docs/database/web/lists-of-data#append_to_a_list_of_data | Append to a list of data}.\n * See {@link https://firebase.googleblog.com/2015/02/the-2120-ways-to-ensure-unique_68.html | The 2^120 Ways to Ensure Unique Identifiers}.\n *\n * @param parent - The parent location.\n * @param value - Optional value to be written at the generated location.\n * @returns Combined `Promise` and `Reference`; resolves when write is complete,\n * but can be used immediately as the `Reference` to the child location.\n */\nfunction push(parent, value) {\n    parent = getModularInstance(parent);\n    validateWritablePath('push', parent._path);\n    validateFirebaseDataArg('push', value, parent._path, true);\n    const now = repoServerTime(parent._repo);\n    const name = nextPushId(now);\n    // push() returns a ThennableReference whose promise is fulfilled with a\n    // regular Reference. We use child() to create handles to two different\n    // references. The first is turned into a ThennableReference below by adding\n    // then() and catch() methods and is used as the return value of push(). The\n    // second remains a regular Reference and is used as the fulfilled value of\n    // the first ThennableReference.\n    const thenablePushRef = child(parent, name);\n    const pushRef = child(parent, name);\n    let promise;\n    if (value != null) {\n        promise = set(pushRef, value).then(() => pushRef);\n    }\n    else {\n        promise = Promise.resolve(pushRef);\n    }\n    thenablePushRef.then = promise.then.bind(promise);\n    thenablePushRef.catch = promise.then.bind(promise, undefined);\n    return thenablePushRef;\n}\n/**\n * Removes the data at this Database location.\n *\n * Any data at child locations will also be deleted.\n *\n * The effect of the remove will be visible immediately and the corresponding\n * event 'value' will be triggered. Synchronization of the remove to the\n * Firebase servers will also be started, and the returned Promise will resolve\n * when complete. If provided, the onComplete callback will be called\n * asynchronously after synchronization has finished.\n *\n * @param ref - The location to remove.\n * @returns Resolves when remove on server is complete.\n */\nfunction remove(ref) {\n    validateWritablePath('remove', ref._path);\n    return set(ref, null);\n}\n/**\n * Writes data to this Database location.\n *\n * This will overwrite any data at this location and all child locations.\n *\n * The effect of the write will be visible immediately, and the corresponding\n * events (\"value\", \"child_added\", etc.) will be triggered. Synchronization of\n * the data to the Firebase servers will also be started, and the returned\n * Promise will resolve when complete. If provided, the `onComplete` callback\n * will be called asynchronously after synchronization has finished.\n *\n * Passing `null` for the new value is equivalent to calling `remove()`; namely,\n * all data at this location and all child locations will be deleted.\n *\n * `set()` will remove any priority stored at this location, so if priority is\n * meant to be preserved, you need to use `setWithPriority()` instead.\n *\n * Note that modifying data with `set()` will cancel any pending transactions\n * at that location, so extreme care should be taken if mixing `set()` and\n * `transaction()` to modify the same data.\n *\n * A single `set()` will generate a single \"value\" event at the location where\n * the `set()` was performed.\n *\n * @param ref - The location to write to.\n * @param value - The value to be written (string, number, boolean, object,\n *   array, or null).\n * @returns Resolves when write to server is complete.\n */\nfunction set(ref, value) {\n    ref = getModularInstance(ref);\n    validateWritablePath('set', ref._path);\n    validateFirebaseDataArg('set', value, ref._path, false);\n    const deferred = new Deferred();\n    repoSetWithPriority(ref._repo, ref._path, value, \n    /*priority=*/ null, deferred.wrapCallback(() => { }));\n    return deferred.promise;\n}\n/**\n * Sets a priority for the data at this Database location.\n *\n * Applications need not use priority but can order collections by\n * ordinary properties (see\n * {@link https://firebase.google.com/docs/database/web/lists-of-data#sorting_and_filtering_data | Sorting and filtering data}\n * ).\n *\n * @param ref - The location to write to.\n * @param priority - The priority to be written (string, number, or null).\n * @returns Resolves when write to server is complete.\n */\nfunction setPriority(ref, priority) {\n    ref = getModularInstance(ref);\n    validateWritablePath('setPriority', ref._path);\n    validatePriority('setPriority', priority, false);\n    const deferred = new Deferred();\n    repoSetWithPriority(ref._repo, pathChild(ref._path, '.priority'), priority, null, deferred.wrapCallback(() => { }));\n    return deferred.promise;\n}\n/**\n * Writes data the Database location. Like `set()` but also specifies the\n * priority for that data.\n *\n * Applications need not use priority but can order collections by\n * ordinary properties (see\n * {@link https://firebase.google.com/docs/database/web/lists-of-data#sorting_and_filtering_data | Sorting and filtering data}\n * ).\n *\n * @param ref - The location to write to.\n * @param value - The value to be written (string, number, boolean, object,\n *   array, or null).\n * @param priority - The priority to be written (string, number, or null).\n * @returns Resolves when write to server is complete.\n */\nfunction setWithPriority(ref, value, priority) {\n    validateWritablePath('setWithPriority', ref._path);\n    validateFirebaseDataArg('setWithPriority', value, ref._path, false);\n    validatePriority('setWithPriority', priority, false);\n    if (ref.key === '.length' || ref.key === '.keys') {\n        throw 'setWithPriority failed: ' + ref.key + ' is a read-only object.';\n    }\n    const deferred = new Deferred();\n    repoSetWithPriority(ref._repo, ref._path, value, priority, deferred.wrapCallback(() => { }));\n    return deferred.promise;\n}\n/**\n * Writes multiple values to the Database at once.\n *\n * The `values` argument contains multiple property-value pairs that will be\n * written to the Database together. Each child property can either be a simple\n * property (for example, \"name\") or a relative path (for example,\n * \"name/first\") from the current location to the data to update.\n *\n * As opposed to the `set()` method, `update()` can be use to selectively update\n * only the referenced properties at the current location (instead of replacing\n * all the child properties at the current location).\n *\n * The effect of the write will be visible immediately, and the corresponding\n * events ('value', 'child_added', etc.) will be triggered. Synchronization of\n * the data to the Firebase servers will also be started, and the returned\n * Promise will resolve when complete. If provided, the `onComplete` callback\n * will be called asynchronously after synchronization has finished.\n *\n * A single `update()` will generate a single \"value\" event at the location\n * where the `update()` was performed, regardless of how many children were\n * modified.\n *\n * Note that modifying data with `update()` will cancel any pending\n * transactions at that location, so extreme care should be taken if mixing\n * `update()` and `transaction()` to modify the same data.\n *\n * Passing `null` to `update()` will remove the data at this location.\n *\n * See\n * {@link https://firebase.googleblog.com/2015/09/introducing-multi-location-updates-and_86.html | Introducing multi-location updates and more}.\n *\n * @param ref - The location to write to.\n * @param values - Object containing multiple values.\n * @returns Resolves when update on server is complete.\n */\nfunction update(ref, values) {\n    validateFirebaseMergeDataArg('update', values, ref._path, false);\n    const deferred = new Deferred();\n    repoUpdate(ref._repo, ref._path, values, deferred.wrapCallback(() => { }));\n    return deferred.promise;\n}\n/**\n * Gets the most up-to-date result for this query.\n *\n * @param query - The query to run.\n * @returns A `Promise` which resolves to the resulting DataSnapshot if a value is\n * available, or rejects if the client is unable to return a value (e.g., if the\n * server is unreachable and there is nothing cached).\n */\nfunction get(query) {\n    query = getModularInstance(query);\n    const callbackContext = new CallbackContext(() => { });\n    const container = new ValueEventRegistration(callbackContext);\n    return repoGetValue(query._repo, query, container).then(node => {\n        return new DataSnapshot(node, new ReferenceImpl(query._repo, query._path), query._queryParams.getIndex());\n    });\n}\n/**\n * Represents registration for 'value' events.\n */\nclass ValueEventRegistration {\n    constructor(callbackContext) {\n        this.callbackContext = callbackContext;\n    }\n    respondsTo(eventType) {\n        return eventType === 'value';\n    }\n    createEvent(change, query) {\n        const index = query._queryParams.getIndex();\n        return new DataEvent('value', this, new DataSnapshot(change.snapshotNode, new ReferenceImpl(query._repo, query._path), index));\n    }\n    getEventRunner(eventData) {\n        if (eventData.getEventType() === 'cancel') {\n            return () => this.callbackContext.onCancel(eventData.error);\n        }\n        else {\n            return () => this.callbackContext.onValue(eventData.snapshot, null);\n        }\n    }\n    createCancelEvent(error, path) {\n        if (this.callbackContext.hasCancelCallback) {\n            return new CancelEvent(this, error, path);\n        }\n        else {\n            return null;\n        }\n    }\n    matches(other) {\n        if (!(other instanceof ValueEventRegistration)) {\n            return false;\n        }\n        else if (!other.callbackContext || !this.callbackContext) {\n            // If no callback specified, we consider it to match any callback.\n            return true;\n        }\n        else {\n            return other.callbackContext.matches(this.callbackContext);\n        }\n    }\n    hasAnyCallback() {\n        return this.callbackContext !== null;\n    }\n}\n/**\n * Represents the registration of a child_x event.\n */\nclass ChildEventRegistration {\n    constructor(eventType, callbackContext) {\n        this.eventType = eventType;\n        this.callbackContext = callbackContext;\n    }\n    respondsTo(eventType) {\n        let eventToCheck = eventType === 'children_added' ? 'child_added' : eventType;\n        eventToCheck =\n            eventToCheck === 'children_removed' ? 'child_removed' : eventToCheck;\n        return this.eventType === eventToCheck;\n    }\n    createCancelEvent(error, path) {\n        if (this.callbackContext.hasCancelCallback) {\n            return new CancelEvent(this, error, path);\n        }\n        else {\n            return null;\n        }\n    }\n    createEvent(change, query) {\n        assert(change.childName != null, 'Child events should have a childName.');\n        const childRef = child(new ReferenceImpl(query._repo, query._path), change.childName);\n        const index = query._queryParams.getIndex();\n        return new DataEvent(change.type, this, new DataSnapshot(change.snapshotNode, childRef, index), change.prevName);\n    }\n    getEventRunner(eventData) {\n        if (eventData.getEventType() === 'cancel') {\n            return () => this.callbackContext.onCancel(eventData.error);\n        }\n        else {\n            return () => this.callbackContext.onValue(eventData.snapshot, eventData.prevName);\n        }\n    }\n    matches(other) {\n        if (other instanceof ChildEventRegistration) {\n            return (this.eventType === other.eventType &&\n                (!this.callbackContext ||\n                    !other.callbackContext ||\n                    this.callbackContext.matches(other.callbackContext)));\n        }\n        return false;\n    }\n    hasAnyCallback() {\n        return !!this.callbackContext;\n    }\n}\nfunction addEventListener(query, eventType, callback, cancelCallbackOrListenOptions, options) {\n    let cancelCallback;\n    if (typeof cancelCallbackOrListenOptions === 'object') {\n        cancelCallback = undefined;\n        options = cancelCallbackOrListenOptions;\n    }\n    if (typeof cancelCallbackOrListenOptions === 'function') {\n        cancelCallback = cancelCallbackOrListenOptions;\n    }\n    if (options && options.onlyOnce) {\n        const userCallback = callback;\n        const onceCallback = (dataSnapshot, previousChildName) => {\n            repoRemoveEventCallbackForQuery(query._repo, query, container);\n            userCallback(dataSnapshot, previousChildName);\n        };\n        onceCallback.userCallback = callback.userCallback;\n        onceCallback.context = callback.context;\n        callback = onceCallback;\n    }\n    const callbackContext = new CallbackContext(callback, cancelCallback || undefined);\n    const container = eventType === 'value'\n        ? new ValueEventRegistration(callbackContext)\n        : new ChildEventRegistration(eventType, callbackContext);\n    repoAddEventCallbackForQuery(query._repo, query, container);\n    return () => repoRemoveEventCallbackForQuery(query._repo, query, container);\n}\nfunction onValue(query, callback, cancelCallbackOrListenOptions, options) {\n    return addEventListener(query, 'value', callback, cancelCallbackOrListenOptions, options);\n}\nfunction onChildAdded(query, callback, cancelCallbackOrListenOptions, options) {\n    return addEventListener(query, 'child_added', callback, cancelCallbackOrListenOptions, options);\n}\nfunction onChildChanged(query, callback, cancelCallbackOrListenOptions, options) {\n    return addEventListener(query, 'child_changed', callback, cancelCallbackOrListenOptions, options);\n}\nfunction onChildMoved(query, callback, cancelCallbackOrListenOptions, options) {\n    return addEventListener(query, 'child_moved', callback, cancelCallbackOrListenOptions, options);\n}\nfunction onChildRemoved(query, callback, cancelCallbackOrListenOptions, options) {\n    return addEventListener(query, 'child_removed', callback, cancelCallbackOrListenOptions, options);\n}\n/**\n * Detaches a callback previously attached with the corresponding `on*()` (`onValue`, `onChildAdded`) listener.\n * Note: This is not the recommended way to remove a listener. Instead, please use the returned callback function from\n * the respective `on*` callbacks.\n *\n * Detach a callback previously attached with `on*()`. Calling `off()` on a parent listener\n * will not automatically remove listeners registered on child nodes, `off()`\n * must also be called on any child listeners to remove the callback.\n *\n * If a callback is not specified, all callbacks for the specified eventType\n * will be removed. Similarly, if no eventType is specified, all callbacks\n * for the `Reference` will be removed.\n *\n * Individual listeners can also be removed by invoking their unsubscribe\n * callbacks.\n *\n * @param query - The query that the listener was registered with.\n * @param eventType - One of the following strings: \"value\", \"child_added\",\n * \"child_changed\", \"child_removed\", or \"child_moved.\" If omitted, all callbacks\n * for the `Reference` will be removed.\n * @param callback - The callback function that was passed to `on()` or\n * `undefined` to remove all callbacks.\n */\nfunction off(query, eventType, callback) {\n    let container = null;\n    const expCallback = callback ? new CallbackContext(callback) : null;\n    if (eventType === 'value') {\n        container = new ValueEventRegistration(expCallback);\n    }\n    else if (eventType) {\n        container = new ChildEventRegistration(eventType, expCallback);\n    }\n    repoRemoveEventCallbackForQuery(query._repo, query, container);\n}\n/**\n * A `QueryConstraint` is used to narrow the set of documents returned by a\n * Database query. `QueryConstraint`s are created by invoking {@link endAt},\n * {@link endBefore}, {@link startAt}, {@link startAfter}, {@link\n * limitToFirst}, {@link limitToLast}, {@link orderByChild},\n * {@link orderByChild}, {@link orderByKey} , {@link orderByPriority} ,\n * {@link orderByValue}  or {@link equalTo} and\n * can then be passed to {@link query} to create a new query instance that\n * also contains this `QueryConstraint`.\n */\nclass QueryConstraint {\n}\nclass QueryEndAtConstraint extends QueryConstraint {\n    constructor(_value, _key) {\n        super();\n        this._value = _value;\n        this._key = _key;\n        this.type = 'endAt';\n    }\n    _apply(query) {\n        validateFirebaseDataArg('endAt', this._value, query._path, true);\n        const newParams = queryParamsEndAt(query._queryParams, this._value, this._key);\n        validateLimit(newParams);\n        validateQueryEndpoints(newParams);\n        if (query._queryParams.hasEnd()) {\n            throw new Error('endAt: Starting point was already set (by another call to endAt, ' +\n                'endBefore or equalTo).');\n        }\n        return new QueryImpl(query._repo, query._path, newParams, query._orderByCalled);\n    }\n}\n/**\n * Creates a `QueryConstraint` with the specified ending point.\n *\n * Using `startAt()`, `startAfter()`, `endBefore()`, `endAt()` and `equalTo()`\n * allows you to choose arbitrary starting and ending points for your queries.\n *\n * The ending point is inclusive, so children with exactly the specified value\n * will be included in the query. The optional key argument can be used to\n * further limit the range of the query. If it is specified, then children that\n * have exactly the specified value must also have a key name less than or equal\n * to the specified key.\n *\n * You can read more about `endAt()` in\n * {@link https://firebase.google.com/docs/database/web/lists-of-data#filtering_data | Filtering data}.\n *\n * @param value - The value to end at. The argument type depends on which\n * `orderBy*()` function was used in this query. Specify a value that matches\n * the `orderBy*()` type. When used in combination with `orderByKey()`, the\n * value must be a string.\n * @param key - The child key to end at, among the children with the previously\n * specified priority. This argument is only allowed if ordering by child,\n * value, or priority.\n */\nfunction endAt(value, key) {\n    validateKey('endAt', 'key', key, true);\n    return new QueryEndAtConstraint(value, key);\n}\nclass QueryEndBeforeConstraint extends QueryConstraint {\n    constructor(_value, _key) {\n        super();\n        this._value = _value;\n        this._key = _key;\n        this.type = 'endBefore';\n    }\n    _apply(query) {\n        validateFirebaseDataArg('endBefore', this._value, query._path, false);\n        const newParams = queryParamsEndBefore(query._queryParams, this._value, this._key);\n        validateLimit(newParams);\n        validateQueryEndpoints(newParams);\n        if (query._queryParams.hasEnd()) {\n            throw new Error('endBefore: Starting point was already set (by another call to endAt, ' +\n                'endBefore or equalTo).');\n        }\n        return new QueryImpl(query._repo, query._path, newParams, query._orderByCalled);\n    }\n}\n/**\n * Creates a `QueryConstraint` with the specified ending point (exclusive).\n *\n * Using `startAt()`, `startAfter()`, `endBefore()`, `endAt()` and `equalTo()`\n * allows you to choose arbitrary starting and ending points for your queries.\n *\n * The ending point is exclusive. If only a value is provided, children\n * with a value less than the specified value will be included in the query.\n * If a key is specified, then children must have a value less than or equal\n * to the specified value and a key name less than the specified key.\n *\n * @param value - The value to end before. The argument type depends on which\n * `orderBy*()` function was used in this query. Specify a value that matches\n * the `orderBy*()` type. When used in combination with `orderByKey()`, the\n * value must be a string.\n * @param key - The child key to end before, among the children with the\n * previously specified priority. This argument is only allowed if ordering by\n * child, value, or priority.\n */\nfunction endBefore(value, key) {\n    validateKey('endBefore', 'key', key, true);\n    return new QueryEndBeforeConstraint(value, key);\n}\nclass QueryStartAtConstraint extends QueryConstraint {\n    constructor(_value, _key) {\n        super();\n        this._value = _value;\n        this._key = _key;\n        this.type = 'startAt';\n    }\n    _apply(query) {\n        validateFirebaseDataArg('startAt', this._value, query._path, true);\n        const newParams = queryParamsStartAt(query._queryParams, this._value, this._key);\n        validateLimit(newParams);\n        validateQueryEndpoints(newParams);\n        if (query._queryParams.hasStart()) {\n            throw new Error('startAt: Starting point was already set (by another call to startAt, ' +\n                'startBefore or equalTo).');\n        }\n        return new QueryImpl(query._repo, query._path, newParams, query._orderByCalled);\n    }\n}\n/**\n * Creates a `QueryConstraint` with the specified starting point.\n *\n * Using `startAt()`, `startAfter()`, `endBefore()`, `endAt()` and `equalTo()`\n * allows you to choose arbitrary starting and ending points for your queries.\n *\n * The starting point is inclusive, so children with exactly the specified value\n * will be included in the query. The optional key argument can be used to\n * further limit the range of the query. If it is specified, then children that\n * have exactly the specified value must also have a key name greater than or\n * equal to the specified key.\n *\n * You can read more about `startAt()` in\n * {@link https://firebase.google.com/docs/database/web/lists-of-data#filtering_data | Filtering data}.\n *\n * @param value - The value to start at. The argument type depends on which\n * `orderBy*()` function was used in this query. Specify a value that matches\n * the `orderBy*()` type. When used in combination with `orderByKey()`, the\n * value must be a string.\n * @param key - The child key to start at. This argument is only allowed if\n * ordering by child, value, or priority.\n */\nfunction startAt(value = null, key) {\n    validateKey('startAt', 'key', key, true);\n    return new QueryStartAtConstraint(value, key);\n}\nclass QueryStartAfterConstraint extends QueryConstraint {\n    constructor(_value, _key) {\n        super();\n        this._value = _value;\n        this._key = _key;\n        this.type = 'startAfter';\n    }\n    _apply(query) {\n        validateFirebaseDataArg('startAfter', this._value, query._path, false);\n        const newParams = queryParamsStartAfter(query._queryParams, this._value, this._key);\n        validateLimit(newParams);\n        validateQueryEndpoints(newParams);\n        if (query._queryParams.hasStart()) {\n            throw new Error('startAfter: Starting point was already set (by another call to startAt, ' +\n                'startAfter, or equalTo).');\n        }\n        return new QueryImpl(query._repo, query._path, newParams, query._orderByCalled);\n    }\n}\n/**\n * Creates a `QueryConstraint` with the specified starting point (exclusive).\n *\n * Using `startAt()`, `startAfter()`, `endBefore()`, `endAt()` and `equalTo()`\n * allows you to choose arbitrary starting and ending points for your queries.\n *\n * The starting point is exclusive. If only a value is provided, children\n * with a value greater than the specified value will be included in the query.\n * If a key is specified, then children must have a value greater than or equal\n * to the specified value and a a key name greater than the specified key.\n *\n * @param value - The value to start after. The argument type depends on which\n * `orderBy*()` function was used in this query. Specify a value that matches\n * the `orderBy*()` type. When used in combination with `orderByKey()`, the\n * value must be a string.\n * @param key - The child key to start after. This argument is only allowed if\n * ordering by child, value, or priority.\n */\nfunction startAfter(value, key) {\n    validateKey('startAfter', 'key', key, true);\n    return new QueryStartAfterConstraint(value, key);\n}\nclass QueryLimitToFirstConstraint extends QueryConstraint {\n    constructor(_limit) {\n        super();\n        this._limit = _limit;\n        this.type = 'limitToFirst';\n    }\n    _apply(query) {\n        if (query._queryParams.hasLimit()) {\n            throw new Error('limitToFirst: Limit was already set (by another call to limitToFirst ' +\n                'or limitToLast).');\n        }\n        return new QueryImpl(query._repo, query._path, queryParamsLimitToFirst(query._queryParams, this._limit), query._orderByCalled);\n    }\n}\n/**\n * Creates a new `QueryConstraint` that if limited to the first specific number\n * of children.\n *\n * The `limitToFirst()` method is used to set a maximum number of children to be\n * synced for a given callback. If we set a limit of 100, we will initially only\n * receive up to 100 `child_added` events. If we have fewer than 100 messages\n * stored in our Database, a `child_added` event will fire for each message.\n * However, if we have over 100 messages, we will only receive a `child_added`\n * event for the first 100 ordered messages. As items change, we will receive\n * `child_removed` events for each item that drops out of the active list so\n * that the total number stays at 100.\n *\n * You can read more about `limitToFirst()` in\n * {@link https://firebase.google.com/docs/database/web/lists-of-data#filtering_data | Filtering data}.\n *\n * @param limit - The maximum number of nodes to include in this query.\n */\nfunction limitToFirst(limit) {\n    if (typeof limit !== 'number' || Math.floor(limit) !== limit || limit <= 0) {\n        throw new Error('limitToFirst: First argument must be a positive integer.');\n    }\n    return new QueryLimitToFirstConstraint(limit);\n}\nclass QueryLimitToLastConstraint extends QueryConstraint {\n    constructor(_limit) {\n        super();\n        this._limit = _limit;\n        this.type = 'limitToLast';\n    }\n    _apply(query) {\n        if (query._queryParams.hasLimit()) {\n            throw new Error('limitToLast: Limit was already set (by another call to limitToFirst ' +\n                'or limitToLast).');\n        }\n        return new QueryImpl(query._repo, query._path, queryParamsLimitToLast(query._queryParams, this._limit), query._orderByCalled);\n    }\n}\n/**\n * Creates a new `QueryConstraint` that is limited to return only the last\n * specified number of children.\n *\n * The `limitToLast()` method is used to set a maximum number of children to be\n * synced for a given callback. If we set a limit of 100, we will initially only\n * receive up to 100 `child_added` events. If we have fewer than 100 messages\n * stored in our Database, a `child_added` event will fire for each message.\n * However, if we have over 100 messages, we will only receive a `child_added`\n * event for the last 100 ordered messages. As items change, we will receive\n * `child_removed` events for each item that drops out of the active list so\n * that the total number stays at 100.\n *\n * You can read more about `limitToLast()` in\n * {@link https://firebase.google.com/docs/database/web/lists-of-data#filtering_data | Filtering data}.\n *\n * @param limit - The maximum number of nodes to include in this query.\n */\nfunction limitToLast(limit) {\n    if (typeof limit !== 'number' || Math.floor(limit) !== limit || limit <= 0) {\n        throw new Error('limitToLast: First argument must be a positive integer.');\n    }\n    return new QueryLimitToLastConstraint(limit);\n}\nclass QueryOrderByChildConstraint extends QueryConstraint {\n    constructor(_path) {\n        super();\n        this._path = _path;\n        this.type = 'orderByChild';\n    }\n    _apply(query) {\n        validateNoPreviousOrderByCall(query, 'orderByChild');\n        const parsedPath = new Path(this._path);\n        if (pathIsEmpty(parsedPath)) {\n            throw new Error('orderByChild: cannot pass in empty path. Use orderByValue() instead.');\n        }\n        const index = new PathIndex(parsedPath);\n        const newParams = queryParamsOrderBy(query._queryParams, index);\n        validateQueryEndpoints(newParams);\n        return new QueryImpl(query._repo, query._path, newParams, \n        /*orderByCalled=*/ true);\n    }\n}\n/**\n * Creates a new `QueryConstraint` that orders by the specified child key.\n *\n * Queries can only order by one key at a time. Calling `orderByChild()`\n * multiple times on the same query is an error.\n *\n * Firebase queries allow you to order your data by any child key on the fly.\n * However, if you know in advance what your indexes will be, you can define\n * them via the .indexOn rule in your Security Rules for better performance. See\n * the{@link https://firebase.google.com/docs/database/security/indexing-data}\n * rule for more information.\n *\n * You can read more about `orderByChild()` in\n * {@link https://firebase.google.com/docs/database/web/lists-of-data#sort_data | Sort data}.\n *\n * @param path - The path to order by.\n */\nfunction orderByChild(path) {\n    if (path === '$key') {\n        throw new Error('orderByChild: \"$key\" is invalid.  Use orderByKey() instead.');\n    }\n    else if (path === '$priority') {\n        throw new Error('orderByChild: \"$priority\" is invalid.  Use orderByPriority() instead.');\n    }\n    else if (path === '$value') {\n        throw new Error('orderByChild: \"$value\" is invalid.  Use orderByValue() instead.');\n    }\n    validatePathString('orderByChild', 'path', path, false);\n    return new QueryOrderByChildConstraint(path);\n}\nclass QueryOrderByKeyConstraint extends QueryConstraint {\n    constructor() {\n        super(...arguments);\n        this.type = 'orderByKey';\n    }\n    _apply(query) {\n        validateNoPreviousOrderByCall(query, 'orderByKey');\n        const newParams = queryParamsOrderBy(query._queryParams, KEY_INDEX);\n        validateQueryEndpoints(newParams);\n        return new QueryImpl(query._repo, query._path, newParams, \n        /*orderByCalled=*/ true);\n    }\n}\n/**\n * Creates a new `QueryConstraint` that orders by the key.\n *\n * Sorts the results of a query by their (ascending) key values.\n *\n * You can read more about `orderByKey()` in\n * {@link https://firebase.google.com/docs/database/web/lists-of-data#sort_data | Sort data}.\n */\nfunction orderByKey() {\n    return new QueryOrderByKeyConstraint();\n}\nclass QueryOrderByPriorityConstraint extends QueryConstraint {\n    constructor() {\n        super(...arguments);\n        this.type = 'orderByPriority';\n    }\n    _apply(query) {\n        validateNoPreviousOrderByCall(query, 'orderByPriority');\n        const newParams = queryParamsOrderBy(query._queryParams, PRIORITY_INDEX);\n        validateQueryEndpoints(newParams);\n        return new QueryImpl(query._repo, query._path, newParams, \n        /*orderByCalled=*/ true);\n    }\n}\n/**\n * Creates a new `QueryConstraint` that orders by priority.\n *\n * Applications need not use priority but can order collections by\n * ordinary properties (see\n * {@link https://firebase.google.com/docs/database/web/lists-of-data#sort_data | Sort data}\n * for alternatives to priority.\n */\nfunction orderByPriority() {\n    return new QueryOrderByPriorityConstraint();\n}\nclass QueryOrderByValueConstraint extends QueryConstraint {\n    constructor() {\n        super(...arguments);\n        this.type = 'orderByValue';\n    }\n    _apply(query) {\n        validateNoPreviousOrderByCall(query, 'orderByValue');\n        const newParams = queryParamsOrderBy(query._queryParams, VALUE_INDEX);\n        validateQueryEndpoints(newParams);\n        return new QueryImpl(query._repo, query._path, newParams, \n        /*orderByCalled=*/ true);\n    }\n}\n/**\n * Creates a new `QueryConstraint` that orders by value.\n *\n * If the children of a query are all scalar values (string, number, or\n * boolean), you can order the results by their (ascending) values.\n *\n * You can read more about `orderByValue()` in\n * {@link https://firebase.google.com/docs/database/web/lists-of-data#sort_data | Sort data}.\n */\nfunction orderByValue() {\n    return new QueryOrderByValueConstraint();\n}\nclass QueryEqualToValueConstraint extends QueryConstraint {\n    constructor(_value, _key) {\n        super();\n        this._value = _value;\n        this._key = _key;\n        this.type = 'equalTo';\n    }\n    _apply(query) {\n        validateFirebaseDataArg('equalTo', this._value, query._path, false);\n        if (query._queryParams.hasStart()) {\n            throw new Error('equalTo: Starting point was already set (by another call to startAt/startAfter or ' +\n                'equalTo).');\n        }\n        if (query._queryParams.hasEnd()) {\n            throw new Error('equalTo: Ending point was already set (by another call to endAt/endBefore or ' +\n                'equalTo).');\n        }\n        return new QueryEndAtConstraint(this._value, this._key)._apply(new QueryStartAtConstraint(this._value, this._key)._apply(query));\n    }\n}\n/**\n * Creates a `QueryConstraint` that includes children that match the specified\n * value.\n *\n * Using `startAt()`, `startAfter()`, `endBefore()`, `endAt()` and `equalTo()`\n * allows you to choose arbitrary starting and ending points for your queries.\n *\n * The optional key argument can be used to further limit the range of the\n * query. If it is specified, then children that have exactly the specified\n * value must also have exactly the specified key as their key name. This can be\n * used to filter result sets with many matches for the same value.\n *\n * You can read more about `equalTo()` in\n * {@link https://firebase.google.com/docs/database/web/lists-of-data#filtering_data | Filtering data}.\n *\n * @param value - The value to match for. The argument type depends on which\n * `orderBy*()` function was used in this query. Specify a value that matches\n * the `orderBy*()` type. When used in combination with `orderByKey()`, the\n * value must be a string.\n * @param key - The child key to start at, among the children with the\n * previously specified priority. This argument is only allowed if ordering by\n * child, value, or priority.\n */\nfunction equalTo(value, key) {\n    validateKey('equalTo', 'key', key, true);\n    return new QueryEqualToValueConstraint(value, key);\n}\n/**\n * Creates a new immutable instance of `Query` that is extended to also include\n * additional query constraints.\n *\n * @param query - The Query instance to use as a base for the new constraints.\n * @param queryConstraints - The list of `QueryConstraint`s to apply.\n * @throws if any of the provided query constraints cannot be combined with the\n * existing or new constraints.\n */\nfunction query(query, ...queryConstraints) {\n    let queryImpl = getModularInstance(query);\n    for (const constraint of queryConstraints) {\n        queryImpl = constraint._apply(queryImpl);\n    }\n    return queryImpl;\n}\n/**\n * Define reference constructor in various modules\n *\n * We are doing this here to avoid several circular\n * dependency issues\n */\nsyncPointSetReferenceConstructor(ReferenceImpl);\nsyncTreeSetReferenceConstructor(ReferenceImpl);\n\n/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * This variable is also defined in the firebase Node.js Admin SDK. Before\n * modifying this definition, consult the definition in:\n *\n * https://github.com/firebase/firebase-admin-node\n *\n * and make sure the two are consistent.\n */\nconst FIREBASE_DATABASE_EMULATOR_HOST_VAR = 'FIREBASE_DATABASE_EMULATOR_HOST';\n/**\n * Creates and caches `Repo` instances.\n */\nconst repos = {};\n/**\n * If true, any new `Repo` will be created to use `ReadonlyRestClient` (for testing purposes).\n */\nlet useRestClient = false;\n/**\n * Update an existing `Repo` in place to point to a new host/port.\n */\nfunction repoManagerApplyEmulatorSettings(repo, host, port, tokenProvider) {\n    repo.repoInfo_ = new RepoInfo(`${host}:${port}`, \n    /* secure= */ false, repo.repoInfo_.namespace, repo.repoInfo_.webSocketOnly, repo.repoInfo_.nodeAdmin, repo.repoInfo_.persistenceKey, repo.repoInfo_.includeNamespaceInQueryParams, \n    /*isUsingEmulator=*/ true);\n    if (tokenProvider) {\n        repo.authTokenProvider_ = tokenProvider;\n    }\n}\n/**\n * This function should only ever be called to CREATE a new database instance.\n * @internal\n */\nfunction repoManagerDatabaseFromApp(app, authProvider, appCheckProvider, url, nodeAdmin) {\n    let dbUrl = url || app.options.databaseURL;\n    if (dbUrl === undefined) {\n        if (!app.options.projectId) {\n            fatal(\"Can't determine Firebase Database URL. Be sure to include \" +\n                ' a Project ID when calling firebase.initializeApp().');\n        }\n        log('Using default host for project ', app.options.projectId);\n        dbUrl = `${app.options.projectId}-default-rtdb.firebaseio.com`;\n    }\n    let parsedUrl = parseRepoInfo(dbUrl, nodeAdmin);\n    let repoInfo = parsedUrl.repoInfo;\n    let isEmulator;\n    let dbEmulatorHost = undefined;\n    if (typeof process !== 'undefined' && process.env) {\n        dbEmulatorHost = process.env[FIREBASE_DATABASE_EMULATOR_HOST_VAR];\n    }\n    if (dbEmulatorHost) {\n        isEmulator = true;\n        dbUrl = `http://${dbEmulatorHost}?ns=${repoInfo.namespace}`;\n        parsedUrl = parseRepoInfo(dbUrl, nodeAdmin);\n        repoInfo = parsedUrl.repoInfo;\n    }\n    else {\n        isEmulator = !parsedUrl.repoInfo.secure;\n    }\n    const authTokenProvider = nodeAdmin && isEmulator\n        ? new EmulatorTokenProvider(EmulatorTokenProvider.OWNER)\n        : new FirebaseAuthTokenProvider(app.name, app.options, authProvider);\n    validateUrl('Invalid Firebase Database URL', parsedUrl);\n    if (!pathIsEmpty(parsedUrl.path)) {\n        fatal('Database URL must point to the root of a Firebase Database ' +\n            '(not including a child path).');\n    }\n    const repo = repoManagerCreateRepo(repoInfo, app, authTokenProvider, new AppCheckTokenProvider(app.name, appCheckProvider));\n    return new Database(repo, app);\n}\n/**\n * Remove the repo and make sure it is disconnected.\n *\n */\nfunction repoManagerDeleteRepo(repo, appName) {\n    const appRepos = repos[appName];\n    // This should never happen...\n    if (!appRepos || appRepos[repo.key] !== repo) {\n        fatal(`Database ${appName}(${repo.repoInfo_}) has already been deleted.`);\n    }\n    repoInterrupt(repo);\n    delete appRepos[repo.key];\n}\n/**\n * Ensures a repo doesn't already exist and then creates one using the\n * provided app.\n *\n * @param repoInfo - The metadata about the Repo\n * @returns The Repo object for the specified server / repoName.\n */\nfunction repoManagerCreateRepo(repoInfo, app, authTokenProvider, appCheckProvider) {\n    let appRepos = repos[app.name];\n    if (!appRepos) {\n        appRepos = {};\n        repos[app.name] = appRepos;\n    }\n    let repo = appRepos[repoInfo.toURLString()];\n    if (repo) {\n        fatal('Database initialized multiple times. Please make sure the format of the database URL matches with each database() call.');\n    }\n    repo = new Repo(repoInfo, useRestClient, authTokenProvider, appCheckProvider);\n    appRepos[repoInfo.toURLString()] = repo;\n    return repo;\n}\n/**\n * Forces us to use ReadonlyRestClient instead of PersistentConnection for new Repos.\n */\nfunction repoManagerForceRestClient(forceRestClient) {\n    useRestClient = forceRestClient;\n}\n/**\n * Class representing a Firebase Realtime Database.\n */\nclass Database {\n    /** @hideconstructor */\n    constructor(_repoInternal, \n    /** The {@link @firebase/app#FirebaseApp} associated with this Realtime Database instance. */\n    app) {\n        this._repoInternal = _repoInternal;\n        this.app = app;\n        /** Represents a `Database` instance. */\n        this['type'] = 'database';\n        /** Track if the instance has been used (root or repo accessed) */\n        this._instanceStarted = false;\n    }\n    get _repo() {\n        if (!this._instanceStarted) {\n            repoStart(this._repoInternal, this.app.options.appId, this.app.options['databaseAuthVariableOverride']);\n            this._instanceStarted = true;\n        }\n        return this._repoInternal;\n    }\n    get _root() {\n        if (!this._rootInternal) {\n            this._rootInternal = new ReferenceImpl(this._repo, newEmptyPath());\n        }\n        return this._rootInternal;\n    }\n    _delete() {\n        if (this._rootInternal !== null) {\n            repoManagerDeleteRepo(this._repo, this.app.name);\n            this._repoInternal = null;\n            this._rootInternal = null;\n        }\n        return Promise.resolve();\n    }\n    _checkNotDeleted(apiName) {\n        if (this._rootInternal === null) {\n            fatal('Cannot call ' + apiName + ' on a deleted database.');\n        }\n    }\n}\nfunction checkTransportInit() {\n    if (TransportManager.IS_TRANSPORT_INITIALIZED) {\n        warn('Transport has already been initialized. Please call this function before calling ref or setting up a listener');\n    }\n}\n/**\n * Force the use of websockets instead of longPolling.\n */\nfunction forceWebSockets() {\n    checkTransportInit();\n    BrowserPollConnection.forceDisallow();\n}\n/**\n * Force the use of longPolling instead of websockets. This will be ignored if websocket protocol is used in databaseURL.\n */\nfunction forceLongPolling() {\n    checkTransportInit();\n    WebSocketConnection.forceDisallow();\n    BrowserPollConnection.forceAllow();\n}\n/**\n * Returns the instance of the Realtime Database SDK that is associated with the provided\n * {@link @firebase/app#FirebaseApp}. Initializes a new instance with default settings if\n * no instance exists or if the existing instance uses a custom database URL.\n *\n * @param app - The {@link @firebase/app#FirebaseApp} instance that the returned Realtime\n * Database instance is associated with.\n * @param url - The URL of the Realtime Database instance to connect to. If not\n * provided, the SDK connects to the default instance of the Firebase App.\n * @returns The `Database` instance of the provided app.\n */\nfunction getDatabase(app = getApp(), url) {\n    const db = _getProvider(app, 'database').getImmediate({\n        identifier: url\n    });\n    if (!db._instanceStarted) {\n        const emulator = getDefaultEmulatorHostnameAndPort('database');\n        if (emulator) {\n            connectDatabaseEmulator(db, ...emulator);\n        }\n    }\n    return db;\n}\n/**\n * Modify the provided instance to communicate with the Realtime Database\n * emulator.\n *\n * <p>Note: This method must be called before performing any other operation.\n *\n * @param db - The instance to modify.\n * @param host - The emulator host (ex: localhost)\n * @param port - The emulator port (ex: 8080)\n * @param options.mockUserToken - the mock auth token to use for unit testing Security Rules\n */\nfunction connectDatabaseEmulator(db, host, port, options = {}) {\n    db = getModularInstance(db);\n    db._checkNotDeleted('useEmulator');\n    if (db._instanceStarted) {\n        fatal('Cannot call useEmulator() after instance has already been initialized.');\n    }\n    const repo = db._repoInternal;\n    let tokenProvider = undefined;\n    if (repo.repoInfo_.nodeAdmin) {\n        if (options.mockUserToken) {\n            fatal('mockUserToken is not supported by the Admin SDK. For client access with mock users, please use the \"firebase\" package instead of \"firebase-admin\".');\n        }\n        tokenProvider = new EmulatorTokenProvider(EmulatorTokenProvider.OWNER);\n    }\n    else if (options.mockUserToken) {\n        const token = typeof options.mockUserToken === 'string'\n            ? options.mockUserToken\n            : createMockUserToken(options.mockUserToken, db.app.options.projectId);\n        tokenProvider = new EmulatorTokenProvider(token);\n    }\n    // Modify the repo to apply emulator settings\n    repoManagerApplyEmulatorSettings(repo, host, port, tokenProvider);\n}\n/**\n * Disconnects from the server (all Database operations will be completed\n * offline).\n *\n * The client automatically maintains a persistent connection to the Database\n * server, which will remain active indefinitely and reconnect when\n * disconnected. However, the `goOffline()` and `goOnline()` methods may be used\n * to control the client connection in cases where a persistent connection is\n * undesirable.\n *\n * While offline, the client will no longer receive data updates from the\n * Database. However, all Database operations performed locally will continue to\n * immediately fire events, allowing your application to continue behaving\n * normally. Additionally, each operation performed locally will automatically\n * be queued and retried upon reconnection to the Database server.\n *\n * To reconnect to the Database and begin receiving remote events, see\n * `goOnline()`.\n *\n * @param db - The instance to disconnect.\n */\nfunction goOffline(db) {\n    db = getModularInstance(db);\n    db._checkNotDeleted('goOffline');\n    repoInterrupt(db._repo);\n}\n/**\n * Reconnects to the server and synchronizes the offline Database state\n * with the server state.\n *\n * This method should be used after disabling the active connection with\n * `goOffline()`. Once reconnected, the client will transmit the proper data\n * and fire the appropriate events so that your client \"catches up\"\n * automatically.\n *\n * @param db - The instance to reconnect.\n */\nfunction goOnline(db) {\n    db = getModularInstance(db);\n    db._checkNotDeleted('goOnline');\n    repoResume(db._repo);\n}\nfunction enableLogging(logger, persistent) {\n    enableLogging$1(logger, persistent);\n}\n\n/**\n * @license\n * Copyright 2021 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nfunction registerDatabase(variant) {\n    setSDKVersion(SDK_VERSION$1);\n    _registerComponent(new Component('database', (container, { instanceIdentifier: url }) => {\n        const app = container.getProvider('app').getImmediate();\n        const authProvider = container.getProvider('auth-internal');\n        const appCheckProvider = container.getProvider('app-check-internal');\n        return repoManagerDatabaseFromApp(app, authProvider, appCheckProvider, url);\n    }, \"PUBLIC\" /* ComponentType.PUBLIC */).setMultipleInstances(true));\n    registerVersion(name, version, variant);\n    // BUILD_TARGET will be replaced by values like esm2017, cjs2017, etc during the compilation\n    registerVersion(name, version, 'esm2017');\n}\n\n/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nconst SERVER_TIMESTAMP = {\n    '.sv': 'timestamp'\n};\n/**\n * Returns a placeholder value for auto-populating the current timestamp (time\n * since the Unix epoch, in milliseconds) as determined by the Firebase\n * servers.\n */\nfunction serverTimestamp() {\n    return SERVER_TIMESTAMP;\n}\n/**\n * Returns a placeholder value that can be used to atomically increment the\n * current database value by the provided delta.\n *\n * @param delta - the amount to modify the current value atomically.\n * @returns A placeholder value for modifying data atomically server-side.\n */\nfunction increment(delta) {\n    return {\n        '.sv': {\n            'increment': delta\n        }\n    };\n}\n\n/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * A type for the resolve value of {@link runTransaction}.\n */\nclass TransactionResult {\n    /** @hideconstructor */\n    constructor(\n    /** Whether the transaction was successfully committed. */\n    committed, \n    /** The resulting data snapshot. */\n    snapshot) {\n        this.committed = committed;\n        this.snapshot = snapshot;\n    }\n    /** Returns a JSON-serializable representation of this object. */\n    toJSON() {\n        return { committed: this.committed, snapshot: this.snapshot.toJSON() };\n    }\n}\n/**\n * Atomically modifies the data at this location.\n *\n * Atomically modify the data at this location. Unlike a normal `set()`, which\n * just overwrites the data regardless of its previous value, `runTransaction()` is\n * used to modify the existing value to a new value, ensuring there are no\n * conflicts with other clients writing to the same location at the same time.\n *\n * To accomplish this, you pass `runTransaction()` an update function which is\n * used to transform the current value into a new value. If another client\n * writes to the location before your new value is successfully written, your\n * update function will be called again with the new current value, and the\n * write will be retried. This will happen repeatedly until your write succeeds\n * without conflict or you abort the transaction by not returning a value from\n * your update function.\n *\n * Note: Modifying data with `set()` will cancel any pending transactions at\n * that location, so extreme care should be taken if mixing `set()` and\n * `runTransaction()` to update the same data.\n *\n * Note: When using transactions with Security and Firebase Rules in place, be\n * aware that a client needs `.read` access in addition to `.write` access in\n * order to perform a transaction. This is because the client-side nature of\n * transactions requires the client to read the data in order to transactionally\n * update it.\n *\n * @param ref - The location to atomically modify.\n * @param transactionUpdate - A developer-supplied function which will be passed\n * the current data stored at this location (as a JavaScript object). The\n * function should return the new value it would like written (as a JavaScript\n * object). If `undefined` is returned (i.e. you return with no arguments) the\n * transaction will be aborted and the data at this location will not be\n * modified.\n * @param options - An options object to configure transactions.\n * @returns A `Promise` that can optionally be used instead of the `onComplete`\n * callback to handle success and failure.\n */\nfunction runTransaction(ref, \n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntransactionUpdate, options) {\n    var _a;\n    ref = getModularInstance(ref);\n    validateWritablePath('Reference.transaction', ref._path);\n    if (ref.key === '.length' || ref.key === '.keys') {\n        throw ('Reference.transaction failed: ' + ref.key + ' is a read-only object.');\n    }\n    const applyLocally = (_a = options === null || options === void 0 ? void 0 : options.applyLocally) !== null && _a !== void 0 ? _a : true;\n    const deferred = new Deferred();\n    const promiseComplete = (error, committed, node) => {\n        let dataSnapshot = null;\n        if (error) {\n            deferred.reject(error);\n        }\n        else {\n            dataSnapshot = new DataSnapshot(node, new ReferenceImpl(ref._repo, ref._path), PRIORITY_INDEX);\n            deferred.resolve(new TransactionResult(committed, dataSnapshot));\n        }\n    };\n    // Add a watch to make sure we get server updates.\n    const unwatcher = onValue(ref, () => { });\n    repoStartTransaction(ref._repo, ref._path, transactionUpdate, promiseComplete, unwatcher, applyLocally);\n    return deferred.promise;\n}\n\n/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nPersistentConnection;\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nPersistentConnection.prototype.simpleListen = function (pathString, onComplete) {\n    this.sendRequest('q', { p: pathString }, onComplete);\n};\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nPersistentConnection.prototype.echo = function (data, onEcho) {\n    this.sendRequest('echo', { d: data }, onEcho);\n};\n// RealTimeConnection properties that we use in tests.\nConnection;\n/**\n * @internal\n */\nconst hijackHash = function (newHash) {\n    const oldPut = PersistentConnection.prototype.put;\n    PersistentConnection.prototype.put = function (pathString, data, onComplete, hash) {\n        if (hash !== undefined) {\n            hash = newHash();\n        }\n        oldPut.call(this, pathString, data, onComplete, hash);\n    };\n    return function () {\n        PersistentConnection.prototype.put = oldPut;\n    };\n};\nRepoInfo;\n/**\n * Forces the RepoManager to create Repos that use ReadonlyRestClient instead of PersistentConnection.\n * @internal\n */\nconst forceRestClient = function (forceRestClient) {\n    repoManagerForceRestClient(forceRestClient);\n};\n\n/**\n * @license\n * Copyright 2023 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Used by console to create a database based on the app,\n * passed database URL and a custom auth implementation.\n * @internal\n * @param app - A valid FirebaseApp-like object\n * @param url - A valid Firebase databaseURL\n * @param version - custom version e.g. firebase-admin version\n * @param customAppCheckImpl - custom app check implementation\n * @param customAuthImpl - custom auth implementation\n */\nfunction _initStandalone({ app, url, version, customAuthImpl, customAppCheckImpl, nodeAdmin = false }) {\n    setSDKVersion(version);\n    /**\n     * ComponentContainer('database-standalone') is just a placeholder that doesn't perform\n     * any actual function.\n     */\n    const componentContainer = new ComponentContainer('database-standalone');\n    const authProvider = new Provider('auth-internal', componentContainer);\n    let appCheckProvider;\n    if (customAppCheckImpl) {\n        appCheckProvider = new Provider('app-check-internal', componentContainer);\n        appCheckProvider.setComponent(new Component('app-check-internal', () => customAppCheckImpl, \"PRIVATE\" /* ComponentType.PRIVATE */));\n    }\n    authProvider.setComponent(new Component('auth-internal', () => customAuthImpl, \"PRIVATE\" /* ComponentType.PRIVATE */));\n    return repoManagerDatabaseFromApp(app, authProvider, appCheckProvider, url, nodeAdmin);\n}\n\n/**\n * Firebase Realtime Database\n *\n * @packageDocumentation\n */\nregisterDatabase();\n\nexport { DataSnapshot, Database, OnDisconnect, QueryConstraint, TransactionResult, QueryImpl as _QueryImpl, QueryParams as _QueryParams, ReferenceImpl as _ReferenceImpl, forceRestClient as _TEST_ACCESS_forceRestClient, hijackHash as _TEST_ACCESS_hijackHash, _initStandalone, repoManagerDatabaseFromApp as _repoManagerDatabaseFromApp, setSDKVersion as _setSDKVersion, validatePathString as _validatePathString, validateWritablePath as _validateWritablePath, child, connectDatabaseEmulator, enableLogging, endAt, endBefore, equalTo, forceLongPolling, forceWebSockets, get, getDatabase, goOffline, goOnline, increment, limitToFirst, limitToLast, off, onChildAdded, onChildChanged, onChildMoved, onChildRemoved, onDisconnect, onValue, orderByChild, orderByKey, orderByPriority, orderByValue, push, query, ref, refFromURL, remove, runTransaction, serverTimestamp, set, setPriority, setWithPriority, startAfter, startAt, update };\n//# sourceMappingURL=index.esm2017.js.map\n","import { _getProvider, getApp, _registerComponent, registerVersion } from '@firebase/app';\nimport { Component } from '@firebase/component';\nimport { ErrorFactory, FirebaseError } from '@firebase/util';\nimport { openDB } from 'idb';\n\nconst name = \"@firebase/installations\";\nconst version = \"0.6.11\";\n\n/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nconst PENDING_TIMEOUT_MS = 10000;\nconst PACKAGE_VERSION = `w:${version}`;\nconst INTERNAL_AUTH_VERSION = 'FIS_v2';\nconst INSTALLATIONS_API_URL = 'https://firebaseinstallations.googleapis.com/v1';\nconst TOKEN_EXPIRATION_BUFFER = 60 * 60 * 1000; // One hour\nconst SERVICE = 'installations';\nconst SERVICE_NAME = 'Installations';\n\n/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nconst ERROR_DESCRIPTION_MAP = {\n    [\"missing-app-config-values\" /* ErrorCode.MISSING_APP_CONFIG_VALUES */]: 'Missing App configuration value: \"{$valueName}\"',\n    [\"not-registered\" /* ErrorCode.NOT_REGISTERED */]: 'Firebase Installation is not registered.',\n    [\"installation-not-found\" /* ErrorCode.INSTALLATION_NOT_FOUND */]: 'Firebase Installation not found.',\n    [\"request-failed\" /* ErrorCode.REQUEST_FAILED */]: '{$requestName} request failed with error \"{$serverCode} {$serverStatus}: {$serverMessage}\"',\n    [\"app-offline\" /* ErrorCode.APP_OFFLINE */]: 'Could not process request. Application offline.',\n    [\"delete-pending-registration\" /* ErrorCode.DELETE_PENDING_REGISTRATION */]: \"Can't delete installation while there is a pending registration request.\"\n};\nconst ERROR_FACTORY = new ErrorFactory(SERVICE, SERVICE_NAME, ERROR_DESCRIPTION_MAP);\n/** Returns true if error is a FirebaseError that is based on an error from the server. */\nfunction isServerError(error) {\n    return (error instanceof FirebaseError &&\n        error.code.includes(\"request-failed\" /* ErrorCode.REQUEST_FAILED */));\n}\n\n/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nfunction getInstallationsEndpoint({ projectId }) {\n    return `${INSTALLATIONS_API_URL}/projects/${projectId}/installations`;\n}\nfunction extractAuthTokenInfoFromResponse(response) {\n    return {\n        token: response.token,\n        requestStatus: 2 /* RequestStatus.COMPLETED */,\n        expiresIn: getExpiresInFromResponseExpiresIn(response.expiresIn),\n        creationTime: Date.now()\n    };\n}\nasync function getErrorFromResponse(requestName, response) {\n    const responseJson = await response.json();\n    const errorData = responseJson.error;\n    return ERROR_FACTORY.create(\"request-failed\" /* ErrorCode.REQUEST_FAILED */, {\n        requestName,\n        serverCode: errorData.code,\n        serverMessage: errorData.message,\n        serverStatus: errorData.status\n    });\n}\nfunction getHeaders({ apiKey }) {\n    return new Headers({\n        'Content-Type': 'application/json',\n        Accept: 'application/json',\n        'x-goog-api-key': apiKey\n    });\n}\nfunction getHeadersWithAuth(appConfig, { refreshToken }) {\n    const headers = getHeaders(appConfig);\n    headers.append('Authorization', getAuthorizationHeader(refreshToken));\n    return headers;\n}\n/**\n * Calls the passed in fetch wrapper and returns the response.\n * If the returned response has a status of 5xx, re-runs the function once and\n * returns the response.\n */\nasync function retryIfServerError(fn) {\n    const result = await fn();\n    if (result.status >= 500 && result.status < 600) {\n        // Internal Server Error. Retry request.\n        return fn();\n    }\n    return result;\n}\nfunction getExpiresInFromResponseExpiresIn(responseExpiresIn) {\n    // This works because the server will never respond with fractions of a second.\n    return Number(responseExpiresIn.replace('s', '000'));\n}\nfunction getAuthorizationHeader(refreshToken) {\n    return `${INTERNAL_AUTH_VERSION} ${refreshToken}`;\n}\n\n/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nasync function createInstallationRequest({ appConfig, heartbeatServiceProvider }, { fid }) {\n    const endpoint = getInstallationsEndpoint(appConfig);\n    const headers = getHeaders(appConfig);\n    // If heartbeat service exists, add the heartbeat string to the header.\n    const heartbeatService = heartbeatServiceProvider.getImmediate({\n        optional: true\n    });\n    if (heartbeatService) {\n        const heartbeatsHeader = await heartbeatService.getHeartbeatsHeader();\n        if (heartbeatsHeader) {\n            headers.append('x-firebase-client', heartbeatsHeader);\n        }\n    }\n    const body = {\n        fid,\n        authVersion: INTERNAL_AUTH_VERSION,\n        appId: appConfig.appId,\n        sdkVersion: PACKAGE_VERSION\n    };\n    const request = {\n        method: 'POST',\n        headers,\n        body: JSON.stringify(body)\n    };\n    const response = await retryIfServerError(() => fetch(endpoint, request));\n    if (response.ok) {\n        const responseValue = await response.json();\n        const registeredInstallationEntry = {\n            fid: responseValue.fid || fid,\n            registrationStatus: 2 /* RequestStatus.COMPLETED */,\n            refreshToken: responseValue.refreshToken,\n            authToken: extractAuthTokenInfoFromResponse(responseValue.authToken)\n        };\n        return registeredInstallationEntry;\n    }\n    else {\n        throw await getErrorFromResponse('Create Installation', response);\n    }\n}\n\n/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/** Returns a promise that resolves after given time passes. */\nfunction sleep(ms) {\n    return new Promise(resolve => {\n        setTimeout(resolve, ms);\n    });\n}\n\n/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nfunction bufferToBase64UrlSafe(array) {\n    const b64 = btoa(String.fromCharCode(...array));\n    return b64.replace(/\\+/g, '-').replace(/\\//g, '_');\n}\n\n/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nconst VALID_FID_PATTERN = /^[cdef][\\w-]{21}$/;\nconst INVALID_FID = '';\n/**\n * Generates a new FID using random values from Web Crypto API.\n * Returns an empty string if FID generation fails for any reason.\n */\nfunction generateFid() {\n    try {\n        // A valid FID has exactly 22 base64 characters, which is 132 bits, or 16.5\n        // bytes. our implementation generates a 17 byte array instead.\n        const fidByteArray = new Uint8Array(17);\n        const crypto = self.crypto || self.msCrypto;\n        crypto.getRandomValues(fidByteArray);\n        // Replace the first 4 random bits with the constant FID header of 0b0111.\n        fidByteArray[0] = 0b01110000 + (fidByteArray[0] % 0b00010000);\n        const fid = encode(fidByteArray);\n        return VALID_FID_PATTERN.test(fid) ? fid : INVALID_FID;\n    }\n    catch (_a) {\n        // FID generation errored\n        return INVALID_FID;\n    }\n}\n/** Converts a FID Uint8Array to a base64 string representation. */\nfunction encode(fidByteArray) {\n    const b64String = bufferToBase64UrlSafe(fidByteArray);\n    // Remove the 23rd character that was added because of the extra 4 bits at the\n    // end of our 17 byte array, and the '=' padding.\n    return b64String.substr(0, 22);\n}\n\n/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/** Returns a string key that can be used to identify the app. */\nfunction getKey(appConfig) {\n    return `${appConfig.appName}!${appConfig.appId}`;\n}\n\n/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nconst fidChangeCallbacks = new Map();\n/**\n * Calls the onIdChange callbacks with the new FID value, and broadcasts the\n * change to other tabs.\n */\nfunction fidChanged(appConfig, fid) {\n    const key = getKey(appConfig);\n    callFidChangeCallbacks(key, fid);\n    broadcastFidChange(key, fid);\n}\nfunction addCallback(appConfig, callback) {\n    // Open the broadcast channel if it's not already open,\n    // to be able to listen to change events from other tabs.\n    getBroadcastChannel();\n    const key = getKey(appConfig);\n    let callbackSet = fidChangeCallbacks.get(key);\n    if (!callbackSet) {\n        callbackSet = new Set();\n        fidChangeCallbacks.set(key, callbackSet);\n    }\n    callbackSet.add(callback);\n}\nfunction removeCallback(appConfig, callback) {\n    const key = getKey(appConfig);\n    const callbackSet = fidChangeCallbacks.get(key);\n    if (!callbackSet) {\n        return;\n    }\n    callbackSet.delete(callback);\n    if (callbackSet.size === 0) {\n        fidChangeCallbacks.delete(key);\n    }\n    // Close broadcast channel if there are no more callbacks.\n    closeBroadcastChannel();\n}\nfunction callFidChangeCallbacks(key, fid) {\n    const callbacks = fidChangeCallbacks.get(key);\n    if (!callbacks) {\n        return;\n    }\n    for (const callback of callbacks) {\n        callback(fid);\n    }\n}\nfunction broadcastFidChange(key, fid) {\n    const channel = getBroadcastChannel();\n    if (channel) {\n        channel.postMessage({ key, fid });\n    }\n    closeBroadcastChannel();\n}\nlet broadcastChannel = null;\n/** Opens and returns a BroadcastChannel if it is supported by the browser. */\nfunction getBroadcastChannel() {\n    if (!broadcastChannel && 'BroadcastChannel' in self) {\n        broadcastChannel = new BroadcastChannel('[Firebase] FID Change');\n        broadcastChannel.onmessage = e => {\n            callFidChangeCallbacks(e.data.key, e.data.fid);\n        };\n    }\n    return broadcastChannel;\n}\nfunction closeBroadcastChannel() {\n    if (fidChangeCallbacks.size === 0 && broadcastChannel) {\n        broadcastChannel.close();\n        broadcastChannel = null;\n    }\n}\n\n/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nconst DATABASE_NAME = 'firebase-installations-database';\nconst DATABASE_VERSION = 1;\nconst OBJECT_STORE_NAME = 'firebase-installations-store';\nlet dbPromise = null;\nfunction getDbPromise() {\n    if (!dbPromise) {\n        dbPromise = openDB(DATABASE_NAME, DATABASE_VERSION, {\n            upgrade: (db, oldVersion) => {\n                // We don't use 'break' in this switch statement, the fall-through\n                // behavior is what we want, because if there are multiple versions between\n                // the old version and the current version, we want ALL the migrations\n                // that correspond to those versions to run, not only the last one.\n                // eslint-disable-next-line default-case\n                switch (oldVersion) {\n                    case 0:\n                        db.createObjectStore(OBJECT_STORE_NAME);\n                }\n            }\n        });\n    }\n    return dbPromise;\n}\n/** Assigns or overwrites the record for the given key with the given value. */\nasync function set(appConfig, value) {\n    const key = getKey(appConfig);\n    const db = await getDbPromise();\n    const tx = db.transaction(OBJECT_STORE_NAME, 'readwrite');\n    const objectStore = tx.objectStore(OBJECT_STORE_NAME);\n    const oldValue = (await objectStore.get(key));\n    await objectStore.put(value, key);\n    await tx.done;\n    if (!oldValue || oldValue.fid !== value.fid) {\n        fidChanged(appConfig, value.fid);\n    }\n    return value;\n}\n/** Removes record(s) from the objectStore that match the given key. */\nasync function remove(appConfig) {\n    const key = getKey(appConfig);\n    const db = await getDbPromise();\n    const tx = db.transaction(OBJECT_STORE_NAME, 'readwrite');\n    await tx.objectStore(OBJECT_STORE_NAME).delete(key);\n    await tx.done;\n}\n/**\n * Atomically updates a record with the result of updateFn, which gets\n * called with the current value. If newValue is undefined, the record is\n * deleted instead.\n * @return Updated value\n */\nasync function update(appConfig, updateFn) {\n    const key = getKey(appConfig);\n    const db = await getDbPromise();\n    const tx = db.transaction(OBJECT_STORE_NAME, 'readwrite');\n    const store = tx.objectStore(OBJECT_STORE_NAME);\n    const oldValue = (await store.get(key));\n    const newValue = updateFn(oldValue);\n    if (newValue === undefined) {\n        await store.delete(key);\n    }\n    else {\n        await store.put(newValue, key);\n    }\n    await tx.done;\n    if (newValue && (!oldValue || oldValue.fid !== newValue.fid)) {\n        fidChanged(appConfig, newValue.fid);\n    }\n    return newValue;\n}\n\n/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Updates and returns the InstallationEntry from the database.\n * Also triggers a registration request if it is necessary and possible.\n */\nasync function getInstallationEntry(installations) {\n    let registrationPromise;\n    const installationEntry = await update(installations.appConfig, oldEntry => {\n        const installationEntry = updateOrCreateInstallationEntry(oldEntry);\n        const entryWithPromise = triggerRegistrationIfNecessary(installations, installationEntry);\n        registrationPromise = entryWithPromise.registrationPromise;\n        return entryWithPromise.installationEntry;\n    });\n    if (installationEntry.fid === INVALID_FID) {\n        // FID generation failed. Waiting for the FID from the server.\n        return { installationEntry: await registrationPromise };\n    }\n    return {\n        installationEntry,\n        registrationPromise\n    };\n}\n/**\n * Creates a new Installation Entry if one does not exist.\n * Also clears timed out pending requests.\n */\nfunction updateOrCreateInstallationEntry(oldEntry) {\n    const entry = oldEntry || {\n        fid: generateFid(),\n        registrationStatus: 0 /* RequestStatus.NOT_STARTED */\n    };\n    return clearTimedOutRequest(entry);\n}\n/**\n * If the Firebase Installation is not registered yet, this will trigger the\n * registration and return an InProgressInstallationEntry.\n *\n * If registrationPromise does not exist, the installationEntry is guaranteed\n * to be registered.\n */\nfunction triggerRegistrationIfNecessary(installations, installationEntry) {\n    if (installationEntry.registrationStatus === 0 /* RequestStatus.NOT_STARTED */) {\n        if (!navigator.onLine) {\n            // Registration required but app is offline.\n            const registrationPromiseWithError = Promise.reject(ERROR_FACTORY.create(\"app-offline\" /* ErrorCode.APP_OFFLINE */));\n            return {\n                installationEntry,\n                registrationPromise: registrationPromiseWithError\n            };\n        }\n        // Try registering. Change status to IN_PROGRESS.\n        const inProgressEntry = {\n            fid: installationEntry.fid,\n            registrationStatus: 1 /* RequestStatus.IN_PROGRESS */,\n            registrationTime: Date.now()\n        };\n        const registrationPromise = registerInstallation(installations, inProgressEntry);\n        return { installationEntry: inProgressEntry, registrationPromise };\n    }\n    else if (installationEntry.registrationStatus === 1 /* RequestStatus.IN_PROGRESS */) {\n        return {\n            installationEntry,\n            registrationPromise: waitUntilFidRegistration(installations)\n        };\n    }\n    else {\n        return { installationEntry };\n    }\n}\n/** This will be executed only once for each new Firebase Installation. */\nasync function registerInstallation(installations, installationEntry) {\n    try {\n        const registeredInstallationEntry = await createInstallationRequest(installations, installationEntry);\n        return set(installations.appConfig, registeredInstallationEntry);\n    }\n    catch (e) {\n        if (isServerError(e) && e.customData.serverCode === 409) {\n            // Server returned a \"FID cannot be used\" error.\n            // Generate a new ID next time.\n            await remove(installations.appConfig);\n        }\n        else {\n            // Registration failed. Set FID as not registered.\n            await set(installations.appConfig, {\n                fid: installationEntry.fid,\n                registrationStatus: 0 /* RequestStatus.NOT_STARTED */\n            });\n        }\n        throw e;\n    }\n}\n/** Call if FID registration is pending in another request. */\nasync function waitUntilFidRegistration(installations) {\n    // Unfortunately, there is no way of reliably observing when a value in\n    // IndexedDB changes (yet, see https://github.com/WICG/indexed-db-observers),\n    // so we need to poll.\n    let entry = await updateInstallationRequest(installations.appConfig);\n    while (entry.registrationStatus === 1 /* RequestStatus.IN_PROGRESS */) {\n        // createInstallation request still in progress.\n        await sleep(100);\n        entry = await updateInstallationRequest(installations.appConfig);\n    }\n    if (entry.registrationStatus === 0 /* RequestStatus.NOT_STARTED */) {\n        // The request timed out or failed in a different call. Try again.\n        const { installationEntry, registrationPromise } = await getInstallationEntry(installations);\n        if (registrationPromise) {\n            return registrationPromise;\n        }\n        else {\n            // if there is no registrationPromise, entry is registered.\n            return installationEntry;\n        }\n    }\n    return entry;\n}\n/**\n * Called only if there is a CreateInstallation request in progress.\n *\n * Updates the InstallationEntry in the DB based on the status of the\n * CreateInstallation request.\n *\n * Returns the updated InstallationEntry.\n */\nfunction updateInstallationRequest(appConfig) {\n    return update(appConfig, oldEntry => {\n        if (!oldEntry) {\n            throw ERROR_FACTORY.create(\"installation-not-found\" /* ErrorCode.INSTALLATION_NOT_FOUND */);\n        }\n        return clearTimedOutRequest(oldEntry);\n    });\n}\nfunction clearTimedOutRequest(entry) {\n    if (hasInstallationRequestTimedOut(entry)) {\n        return {\n            fid: entry.fid,\n            registrationStatus: 0 /* RequestStatus.NOT_STARTED */\n        };\n    }\n    return entry;\n}\nfunction hasInstallationRequestTimedOut(installationEntry) {\n    return (installationEntry.registrationStatus === 1 /* RequestStatus.IN_PROGRESS */ &&\n        installationEntry.registrationTime + PENDING_TIMEOUT_MS < Date.now());\n}\n\n/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nasync function generateAuthTokenRequest({ appConfig, heartbeatServiceProvider }, installationEntry) {\n    const endpoint = getGenerateAuthTokenEndpoint(appConfig, installationEntry);\n    const headers = getHeadersWithAuth(appConfig, installationEntry);\n    // If heartbeat service exists, add the heartbeat string to the header.\n    const heartbeatService = heartbeatServiceProvider.getImmediate({\n        optional: true\n    });\n    if (heartbeatService) {\n        const heartbeatsHeader = await heartbeatService.getHeartbeatsHeader();\n        if (heartbeatsHeader) {\n            headers.append('x-firebase-client', heartbeatsHeader);\n        }\n    }\n    const body = {\n        installation: {\n            sdkVersion: PACKAGE_VERSION,\n            appId: appConfig.appId\n        }\n    };\n    const request = {\n        method: 'POST',\n        headers,\n        body: JSON.stringify(body)\n    };\n    const response = await retryIfServerError(() => fetch(endpoint, request));\n    if (response.ok) {\n        const responseValue = await response.json();\n        const completedAuthToken = extractAuthTokenInfoFromResponse(responseValue);\n        return completedAuthToken;\n    }\n    else {\n        throw await getErrorFromResponse('Generate Auth Token', response);\n    }\n}\nfunction getGenerateAuthTokenEndpoint(appConfig, { fid }) {\n    return `${getInstallationsEndpoint(appConfig)}/${fid}/authTokens:generate`;\n}\n\n/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Returns a valid authentication token for the installation. Generates a new\n * token if one doesn't exist, is expired or about to expire.\n *\n * Should only be called if the Firebase Installation is registered.\n */\nasync function refreshAuthToken(installations, forceRefresh = false) {\n    let tokenPromise;\n    const entry = await update(installations.appConfig, oldEntry => {\n        if (!isEntryRegistered(oldEntry)) {\n            throw ERROR_FACTORY.create(\"not-registered\" /* ErrorCode.NOT_REGISTERED */);\n        }\n        const oldAuthToken = oldEntry.authToken;\n        if (!forceRefresh && isAuthTokenValid(oldAuthToken)) {\n            // There is a valid token in the DB.\n            return oldEntry;\n        }\n        else if (oldAuthToken.requestStatus === 1 /* RequestStatus.IN_PROGRESS */) {\n            // There already is a token request in progress.\n            tokenPromise = waitUntilAuthTokenRequest(installations, forceRefresh);\n            return oldEntry;\n        }\n        else {\n            // No token or token expired.\n            if (!navigator.onLine) {\n                throw ERROR_FACTORY.create(\"app-offline\" /* ErrorCode.APP_OFFLINE */);\n            }\n            const inProgressEntry = makeAuthTokenRequestInProgressEntry(oldEntry);\n            tokenPromise = fetchAuthTokenFromServer(installations, inProgressEntry);\n            return inProgressEntry;\n        }\n    });\n    const authToken = tokenPromise\n        ? await tokenPromise\n        : entry.authToken;\n    return authToken;\n}\n/**\n * Call only if FID is registered and Auth Token request is in progress.\n *\n * Waits until the current pending request finishes. If the request times out,\n * tries once in this thread as well.\n */\nasync function waitUntilAuthTokenRequest(installations, forceRefresh) {\n    // Unfortunately, there is no way of reliably observing when a value in\n    // IndexedDB changes (yet, see https://github.com/WICG/indexed-db-observers),\n    // so we need to poll.\n    let entry = await updateAuthTokenRequest(installations.appConfig);\n    while (entry.authToken.requestStatus === 1 /* RequestStatus.IN_PROGRESS */) {\n        // generateAuthToken still in progress.\n        await sleep(100);\n        entry = await updateAuthTokenRequest(installations.appConfig);\n    }\n    const authToken = entry.authToken;\n    if (authToken.requestStatus === 0 /* RequestStatus.NOT_STARTED */) {\n        // The request timed out or failed in a different call. Try again.\n        return refreshAuthToken(installations, forceRefresh);\n    }\n    else {\n        return authToken;\n    }\n}\n/**\n * Called only if there is a GenerateAuthToken request in progress.\n *\n * Updates the InstallationEntry in the DB based on the status of the\n * GenerateAuthToken request.\n *\n * Returns the updated InstallationEntry.\n */\nfunction updateAuthTokenRequest(appConfig) {\n    return update(appConfig, oldEntry => {\n        if (!isEntryRegistered(oldEntry)) {\n            throw ERROR_FACTORY.create(\"not-registered\" /* ErrorCode.NOT_REGISTERED */);\n        }\n        const oldAuthToken = oldEntry.authToken;\n        if (hasAuthTokenRequestTimedOut(oldAuthToken)) {\n            return Object.assign(Object.assign({}, oldEntry), { authToken: { requestStatus: 0 /* RequestStatus.NOT_STARTED */ } });\n        }\n        return oldEntry;\n    });\n}\nasync function fetchAuthTokenFromServer(installations, installationEntry) {\n    try {\n        const authToken = await generateAuthTokenRequest(installations, installationEntry);\n        const updatedInstallationEntry = Object.assign(Object.assign({}, installationEntry), { authToken });\n        await set(installations.appConfig, updatedInstallationEntry);\n        return authToken;\n    }\n    catch (e) {\n        if (isServerError(e) &&\n            (e.customData.serverCode === 401 || e.customData.serverCode === 404)) {\n            // Server returned a \"FID not found\" or a \"Invalid authentication\" error.\n            // Generate a new ID next time.\n            await remove(installations.appConfig);\n        }\n        else {\n            const updatedInstallationEntry = Object.assign(Object.assign({}, installationEntry), { authToken: { requestStatus: 0 /* RequestStatus.NOT_STARTED */ } });\n            await set(installations.appConfig, updatedInstallationEntry);\n        }\n        throw e;\n    }\n}\nfunction isEntryRegistered(installationEntry) {\n    return (installationEntry !== undefined &&\n        installationEntry.registrationStatus === 2 /* RequestStatus.COMPLETED */);\n}\nfunction isAuthTokenValid(authToken) {\n    return (authToken.requestStatus === 2 /* RequestStatus.COMPLETED */ &&\n        !isAuthTokenExpired(authToken));\n}\nfunction isAuthTokenExpired(authToken) {\n    const now = Date.now();\n    return (now < authToken.creationTime ||\n        authToken.creationTime + authToken.expiresIn < now + TOKEN_EXPIRATION_BUFFER);\n}\n/** Returns an updated InstallationEntry with an InProgressAuthToken. */\nfunction makeAuthTokenRequestInProgressEntry(oldEntry) {\n    const inProgressAuthToken = {\n        requestStatus: 1 /* RequestStatus.IN_PROGRESS */,\n        requestTime: Date.now()\n    };\n    return Object.assign(Object.assign({}, oldEntry), { authToken: inProgressAuthToken });\n}\nfunction hasAuthTokenRequestTimedOut(authToken) {\n    return (authToken.requestStatus === 1 /* RequestStatus.IN_PROGRESS */ &&\n        authToken.requestTime + PENDING_TIMEOUT_MS < Date.now());\n}\n\n/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Creates a Firebase Installation if there isn't one for the app and\n * returns the Installation ID.\n * @param installations - The `Installations` instance.\n *\n * @public\n */\nasync function getId(installations) {\n    const installationsImpl = installations;\n    const { installationEntry, registrationPromise } = await getInstallationEntry(installationsImpl);\n    if (registrationPromise) {\n        registrationPromise.catch(console.error);\n    }\n    else {\n        // If the installation is already registered, update the authentication\n        // token if needed.\n        refreshAuthToken(installationsImpl).catch(console.error);\n    }\n    return installationEntry.fid;\n}\n\n/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Returns a Firebase Installations auth token, identifying the current\n * Firebase Installation.\n * @param installations - The `Installations` instance.\n * @param forceRefresh - Force refresh regardless of token expiration.\n *\n * @public\n */\nasync function getToken(installations, forceRefresh = false) {\n    const installationsImpl = installations;\n    await completeInstallationRegistration(installationsImpl);\n    // At this point we either have a Registered Installation in the DB, or we've\n    // already thrown an error.\n    const authToken = await refreshAuthToken(installationsImpl, forceRefresh);\n    return authToken.token;\n}\nasync function completeInstallationRegistration(installations) {\n    const { registrationPromise } = await getInstallationEntry(installations);\n    if (registrationPromise) {\n        // A createInstallation request is in progress. Wait until it finishes.\n        await registrationPromise;\n    }\n}\n\n/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nasync function deleteInstallationRequest(appConfig, installationEntry) {\n    const endpoint = getDeleteEndpoint(appConfig, installationEntry);\n    const headers = getHeadersWithAuth(appConfig, installationEntry);\n    const request = {\n        method: 'DELETE',\n        headers\n    };\n    const response = await retryIfServerError(() => fetch(endpoint, request));\n    if (!response.ok) {\n        throw await getErrorFromResponse('Delete Installation', response);\n    }\n}\nfunction getDeleteEndpoint(appConfig, { fid }) {\n    return `${getInstallationsEndpoint(appConfig)}/${fid}`;\n}\n\n/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Deletes the Firebase Installation and all associated data.\n * @param installations - The `Installations` instance.\n *\n * @public\n */\nasync function deleteInstallations(installations) {\n    const { appConfig } = installations;\n    const entry = await update(appConfig, oldEntry => {\n        if (oldEntry && oldEntry.registrationStatus === 0 /* RequestStatus.NOT_STARTED */) {\n            // Delete the unregistered entry without sending a deleteInstallation request.\n            return undefined;\n        }\n        return oldEntry;\n    });\n    if (entry) {\n        if (entry.registrationStatus === 1 /* RequestStatus.IN_PROGRESS */) {\n            // Can't delete while trying to register.\n            throw ERROR_FACTORY.create(\"delete-pending-registration\" /* ErrorCode.DELETE_PENDING_REGISTRATION */);\n        }\n        else if (entry.registrationStatus === 2 /* RequestStatus.COMPLETED */) {\n            if (!navigator.onLine) {\n                throw ERROR_FACTORY.create(\"app-offline\" /* ErrorCode.APP_OFFLINE */);\n            }\n            else {\n                await deleteInstallationRequest(appConfig, entry);\n                await remove(appConfig);\n            }\n        }\n    }\n}\n\n/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Sets a new callback that will get called when Installation ID changes.\n * Returns an unsubscribe function that will remove the callback when called.\n * @param installations - The `Installations` instance.\n * @param callback - The callback function that is invoked when FID changes.\n * @returns A function that can be called to unsubscribe.\n *\n * @public\n */\nfunction onIdChange(installations, callback) {\n    const { appConfig } = installations;\n    addCallback(appConfig, callback);\n    return () => {\n        removeCallback(appConfig, callback);\n    };\n}\n\n/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Returns an instance of {@link Installations} associated with the given\n * {@link @firebase/app#FirebaseApp} instance.\n * @param app - The {@link @firebase/app#FirebaseApp} instance.\n *\n * @public\n */\nfunction getInstallations(app = getApp()) {\n    const installationsImpl = _getProvider(app, 'installations').getImmediate();\n    return installationsImpl;\n}\n\n/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nfunction extractAppConfig(app) {\n    if (!app || !app.options) {\n        throw getMissingValueError('App Configuration');\n    }\n    if (!app.name) {\n        throw getMissingValueError('App Name');\n    }\n    // Required app config keys\n    const configKeys = [\n        'projectId',\n        'apiKey',\n        'appId'\n    ];\n    for (const keyName of configKeys) {\n        if (!app.options[keyName]) {\n            throw getMissingValueError(keyName);\n        }\n    }\n    return {\n        appName: app.name,\n        projectId: app.options.projectId,\n        apiKey: app.options.apiKey,\n        appId: app.options.appId\n    };\n}\nfunction getMissingValueError(valueName) {\n    return ERROR_FACTORY.create(\"missing-app-config-values\" /* ErrorCode.MISSING_APP_CONFIG_VALUES */, {\n        valueName\n    });\n}\n\n/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nconst INSTALLATIONS_NAME = 'installations';\nconst INSTALLATIONS_NAME_INTERNAL = 'installations-internal';\nconst publicFactory = (container) => {\n    const app = container.getProvider('app').getImmediate();\n    // Throws if app isn't configured properly.\n    const appConfig = extractAppConfig(app);\n    const heartbeatServiceProvider = _getProvider(app, 'heartbeat');\n    const installationsImpl = {\n        app,\n        appConfig,\n        heartbeatServiceProvider,\n        _delete: () => Promise.resolve()\n    };\n    return installationsImpl;\n};\nconst internalFactory = (container) => {\n    const app = container.getProvider('app').getImmediate();\n    // Internal FIS instance relies on public FIS instance.\n    const installations = _getProvider(app, INSTALLATIONS_NAME).getImmediate();\n    const installationsInternal = {\n        getId: () => getId(installations),\n        getToken: (forceRefresh) => getToken(installations, forceRefresh)\n    };\n    return installationsInternal;\n};\nfunction registerInstallations() {\n    _registerComponent(new Component(INSTALLATIONS_NAME, publicFactory, \"PUBLIC\" /* ComponentType.PUBLIC */));\n    _registerComponent(new Component(INSTALLATIONS_NAME_INTERNAL, internalFactory, \"PRIVATE\" /* ComponentType.PRIVATE */));\n}\n\n/**\n * The Firebase Installations Web SDK.\n * This SDK does not work in a Node.js environment.\n *\n * @packageDocumentation\n */\nregisterInstallations();\nregisterVersion(name, version);\n// BUILD_TARGET will be replaced by values like esm2017, cjs2017, etc during the compilation\nregisterVersion(name, version, 'esm2017');\n\nexport { deleteInstallations, getId, getInstallations, getToken, onIdChange };\n//# sourceMappingURL=index.esm2017.js.map\n","import '@firebase/installations';\nimport { Component } from '@firebase/component';\nimport { openDB, deleteDB } from 'idb';\nimport { ErrorFactory, validateIndexedDBOpenable, isIndexedDBAvailable, areCookiesEnabled, getModularInstance } from '@firebase/util';\nimport { _registerComponent, registerVersion, _getProvider, getApp } from '@firebase/app';\n\n/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nconst DEFAULT_SW_PATH = '/firebase-messaging-sw.js';\nconst DEFAULT_SW_SCOPE = '/firebase-cloud-messaging-push-scope';\nconst DEFAULT_VAPID_KEY = 'BDOU99-h67HcA6JeFXHbSNMu7e2yNNu3RzoMj8TM4W88jITfq7ZmPvIM1Iv-4_l2LxQcYwhqby2xGpWwzjfAnG4';\nconst ENDPOINT = 'https://fcmregistrations.googleapis.com/v1';\nconst CONSOLE_CAMPAIGN_ID = 'google.c.a.c_id';\nconst CONSOLE_CAMPAIGN_NAME = 'google.c.a.c_l';\nconst CONSOLE_CAMPAIGN_TIME = 'google.c.a.ts';\n/** Set to '1' if Analytics is enabled for the campaign */\nconst CONSOLE_CAMPAIGN_ANALYTICS_ENABLED = 'google.c.a.e';\nvar MessageType$1;\n(function (MessageType) {\n    MessageType[MessageType[\"DATA_MESSAGE\"] = 1] = \"DATA_MESSAGE\";\n    MessageType[MessageType[\"DISPLAY_NOTIFICATION\"] = 3] = \"DISPLAY_NOTIFICATION\";\n})(MessageType$1 || (MessageType$1 = {}));\n\n/**\n * @license\n * Copyright 2018 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not use this file except\n * in compliance with the License. You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under the License\n * is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express\n * or implied. See the License for the specific language governing permissions and limitations under\n * the License.\n */\nvar MessageType;\n(function (MessageType) {\n    MessageType[\"PUSH_RECEIVED\"] = \"push-received\";\n    MessageType[\"NOTIFICATION_CLICKED\"] = \"notification-clicked\";\n})(MessageType || (MessageType = {}));\n\n/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nfunction arrayToBase64(array) {\n    const uint8Array = new Uint8Array(array);\n    const base64String = btoa(String.fromCharCode(...uint8Array));\n    return base64String.replace(/=/g, '').replace(/\\+/g, '-').replace(/\\//g, '_');\n}\nfunction base64ToArray(base64String) {\n    const padding = '='.repeat((4 - (base64String.length % 4)) % 4);\n    const base64 = (base64String + padding)\n        .replace(/\\-/g, '+')\n        .replace(/_/g, '/');\n    const rawData = atob(base64);\n    const outputArray = new Uint8Array(rawData.length);\n    for (let i = 0; i < rawData.length; ++i) {\n        outputArray[i] = rawData.charCodeAt(i);\n    }\n    return outputArray;\n}\n\n/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nconst OLD_DB_NAME = 'fcm_token_details_db';\n/**\n * The last DB version of 'fcm_token_details_db' was 4. This is one higher, so that the upgrade\n * callback is called for all versions of the old DB.\n */\nconst OLD_DB_VERSION = 5;\nconst OLD_OBJECT_STORE_NAME = 'fcm_token_object_Store';\nasync function migrateOldDatabase(senderId) {\n    if ('databases' in indexedDB) {\n        // indexedDb.databases() is an IndexedDB v3 API and does not exist in all browsers. TODO: Remove\n        // typecast when it lands in TS types.\n        const databases = await indexedDB.databases();\n        const dbNames = databases.map(db => db.name);\n        if (!dbNames.includes(OLD_DB_NAME)) {\n            // old DB didn't exist, no need to open.\n            return null;\n        }\n    }\n    let tokenDetails = null;\n    const db = await openDB(OLD_DB_NAME, OLD_DB_VERSION, {\n        upgrade: async (db, oldVersion, newVersion, upgradeTransaction) => {\n            var _a;\n            if (oldVersion < 2) {\n                // Database too old, skip migration.\n                return;\n            }\n            if (!db.objectStoreNames.contains(OLD_OBJECT_STORE_NAME)) {\n                // Database did not exist. Nothing to do.\n                return;\n            }\n            const objectStore = upgradeTransaction.objectStore(OLD_OBJECT_STORE_NAME);\n            const value = await objectStore.index('fcmSenderId').get(senderId);\n            await objectStore.clear();\n            if (!value) {\n                // No entry in the database, nothing to migrate.\n                return;\n            }\n            if (oldVersion === 2) {\n                const oldDetails = value;\n                if (!oldDetails.auth || !oldDetails.p256dh || !oldDetails.endpoint) {\n                    return;\n                }\n                tokenDetails = {\n                    token: oldDetails.fcmToken,\n                    createTime: (_a = oldDetails.createTime) !== null && _a !== void 0 ? _a : Date.now(),\n                    subscriptionOptions: {\n                        auth: oldDetails.auth,\n                        p256dh: oldDetails.p256dh,\n                        endpoint: oldDetails.endpoint,\n                        swScope: oldDetails.swScope,\n                        vapidKey: typeof oldDetails.vapidKey === 'string'\n                            ? oldDetails.vapidKey\n                            : arrayToBase64(oldDetails.vapidKey)\n                    }\n                };\n            }\n            else if (oldVersion === 3) {\n                const oldDetails = value;\n                tokenDetails = {\n                    token: oldDetails.fcmToken,\n                    createTime: oldDetails.createTime,\n                    subscriptionOptions: {\n                        auth: arrayToBase64(oldDetails.auth),\n                        p256dh: arrayToBase64(oldDetails.p256dh),\n                        endpoint: oldDetails.endpoint,\n                        swScope: oldDetails.swScope,\n                        vapidKey: arrayToBase64(oldDetails.vapidKey)\n                    }\n                };\n            }\n            else if (oldVersion === 4) {\n                const oldDetails = value;\n                tokenDetails = {\n                    token: oldDetails.fcmToken,\n                    createTime: oldDetails.createTime,\n                    subscriptionOptions: {\n                        auth: arrayToBase64(oldDetails.auth),\n                        p256dh: arrayToBase64(oldDetails.p256dh),\n                        endpoint: oldDetails.endpoint,\n                        swScope: oldDetails.swScope,\n                        vapidKey: arrayToBase64(oldDetails.vapidKey)\n                    }\n                };\n            }\n        }\n    });\n    db.close();\n    // Delete all old databases.\n    await deleteDB(OLD_DB_NAME);\n    await deleteDB('fcm_vapid_details_db');\n    await deleteDB('undefined');\n    return checkTokenDetails(tokenDetails) ? tokenDetails : null;\n}\nfunction checkTokenDetails(tokenDetails) {\n    if (!tokenDetails || !tokenDetails.subscriptionOptions) {\n        return false;\n    }\n    const { subscriptionOptions } = tokenDetails;\n    return (typeof tokenDetails.createTime === 'number' &&\n        tokenDetails.createTime > 0 &&\n        typeof tokenDetails.token === 'string' &&\n        tokenDetails.token.length > 0 &&\n        typeof subscriptionOptions.auth === 'string' &&\n        subscriptionOptions.auth.length > 0 &&\n        typeof subscriptionOptions.p256dh === 'string' &&\n        subscriptionOptions.p256dh.length > 0 &&\n        typeof subscriptionOptions.endpoint === 'string' &&\n        subscriptionOptions.endpoint.length > 0 &&\n        typeof subscriptionOptions.swScope === 'string' &&\n        subscriptionOptions.swScope.length > 0 &&\n        typeof subscriptionOptions.vapidKey === 'string' &&\n        subscriptionOptions.vapidKey.length > 0);\n}\n\n/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n// Exported for tests.\nconst DATABASE_NAME = 'firebase-messaging-database';\nconst DATABASE_VERSION = 1;\nconst OBJECT_STORE_NAME = 'firebase-messaging-store';\nlet dbPromise = null;\nfunction getDbPromise() {\n    if (!dbPromise) {\n        dbPromise = openDB(DATABASE_NAME, DATABASE_VERSION, {\n            upgrade: (upgradeDb, oldVersion) => {\n                // We don't use 'break' in this switch statement, the fall-through behavior is what we want,\n                // because if there are multiple versions between the old version and the current version, we\n                // want ALL the migrations that correspond to those versions to run, not only the last one.\n                // eslint-disable-next-line default-case\n                switch (oldVersion) {\n                    case 0:\n                        upgradeDb.createObjectStore(OBJECT_STORE_NAME);\n                }\n            }\n        });\n    }\n    return dbPromise;\n}\n/** Gets record(s) from the objectStore that match the given key. */\nasync function dbGet(firebaseDependencies) {\n    const key = getKey(firebaseDependencies);\n    const db = await getDbPromise();\n    const tokenDetails = (await db\n        .transaction(OBJECT_STORE_NAME)\n        .objectStore(OBJECT_STORE_NAME)\n        .get(key));\n    if (tokenDetails) {\n        return tokenDetails;\n    }\n    else {\n        // Check if there is a tokenDetails object in the old DB.\n        const oldTokenDetails = await migrateOldDatabase(firebaseDependencies.appConfig.senderId);\n        if (oldTokenDetails) {\n            await dbSet(firebaseDependencies, oldTokenDetails);\n            return oldTokenDetails;\n        }\n    }\n}\n/** Assigns or overwrites the record for the given key with the given value. */\nasync function dbSet(firebaseDependencies, tokenDetails) {\n    const key = getKey(firebaseDependencies);\n    const db = await getDbPromise();\n    const tx = db.transaction(OBJECT_STORE_NAME, 'readwrite');\n    await tx.objectStore(OBJECT_STORE_NAME).put(tokenDetails, key);\n    await tx.done;\n    return tokenDetails;\n}\n/** Removes record(s) from the objectStore that match the given key. */\nasync function dbRemove(firebaseDependencies) {\n    const key = getKey(firebaseDependencies);\n    const db = await getDbPromise();\n    const tx = db.transaction(OBJECT_STORE_NAME, 'readwrite');\n    await tx.objectStore(OBJECT_STORE_NAME).delete(key);\n    await tx.done;\n}\nfunction getKey({ appConfig }) {\n    return appConfig.appId;\n}\n\n/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nconst ERROR_MAP = {\n    [\"missing-app-config-values\" /* ErrorCode.MISSING_APP_CONFIG_VALUES */]: 'Missing App configuration value: \"{$valueName}\"',\n    [\"only-available-in-window\" /* ErrorCode.AVAILABLE_IN_WINDOW */]: 'This method is available in a Window context.',\n    [\"only-available-in-sw\" /* ErrorCode.AVAILABLE_IN_SW */]: 'This method is available in a service worker context.',\n    [\"permission-default\" /* ErrorCode.PERMISSION_DEFAULT */]: 'The notification permission was not granted and dismissed instead.',\n    [\"permission-blocked\" /* ErrorCode.PERMISSION_BLOCKED */]: 'The notification permission was not granted and blocked instead.',\n    [\"unsupported-browser\" /* ErrorCode.UNSUPPORTED_BROWSER */]: \"This browser doesn't support the API's required to use the Firebase SDK.\",\n    [\"indexed-db-unsupported\" /* ErrorCode.INDEXED_DB_UNSUPPORTED */]: \"This browser doesn't support indexedDb.open() (ex. Safari iFrame, Firefox Private Browsing, etc)\",\n    [\"failed-service-worker-registration\" /* ErrorCode.FAILED_DEFAULT_REGISTRATION */]: 'We are unable to register the default service worker. {$browserErrorMessage}',\n    [\"token-subscribe-failed\" /* ErrorCode.TOKEN_SUBSCRIBE_FAILED */]: 'A problem occurred while subscribing the user to FCM: {$errorInfo}',\n    [\"token-subscribe-no-token\" /* ErrorCode.TOKEN_SUBSCRIBE_NO_TOKEN */]: 'FCM returned no token when subscribing the user to push.',\n    [\"token-unsubscribe-failed\" /* ErrorCode.TOKEN_UNSUBSCRIBE_FAILED */]: 'A problem occurred while unsubscribing the ' +\n        'user from FCM: {$errorInfo}',\n    [\"token-update-failed\" /* ErrorCode.TOKEN_UPDATE_FAILED */]: 'A problem occurred while updating the user from FCM: {$errorInfo}',\n    [\"token-update-no-token\" /* ErrorCode.TOKEN_UPDATE_NO_TOKEN */]: 'FCM returned no token when updating the user to push.',\n    [\"use-sw-after-get-token\" /* ErrorCode.USE_SW_AFTER_GET_TOKEN */]: 'The useServiceWorker() method may only be called once and must be ' +\n        'called before calling getToken() to ensure your service worker is used.',\n    [\"invalid-sw-registration\" /* ErrorCode.INVALID_SW_REGISTRATION */]: 'The input to useServiceWorker() must be a ServiceWorkerRegistration.',\n    [\"invalid-bg-handler\" /* ErrorCode.INVALID_BG_HANDLER */]: 'The input to setBackgroundMessageHandler() must be a function.',\n    [\"invalid-vapid-key\" /* ErrorCode.INVALID_VAPID_KEY */]: 'The public VAPID key must be a string.',\n    [\"use-vapid-key-after-get-token\" /* ErrorCode.USE_VAPID_KEY_AFTER_GET_TOKEN */]: 'The usePublicVapidKey() method may only be called once and must be ' +\n        'called before calling getToken() to ensure your VAPID key is used.'\n};\nconst ERROR_FACTORY = new ErrorFactory('messaging', 'Messaging', ERROR_MAP);\n\n/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nasync function requestGetToken(firebaseDependencies, subscriptionOptions) {\n    const headers = await getHeaders(firebaseDependencies);\n    const body = getBody(subscriptionOptions);\n    const subscribeOptions = {\n        method: 'POST',\n        headers,\n        body: JSON.stringify(body)\n    };\n    let responseData;\n    try {\n        const response = await fetch(getEndpoint(firebaseDependencies.appConfig), subscribeOptions);\n        responseData = await response.json();\n    }\n    catch (err) {\n        throw ERROR_FACTORY.create(\"token-subscribe-failed\" /* ErrorCode.TOKEN_SUBSCRIBE_FAILED */, {\n            errorInfo: err === null || err === void 0 ? void 0 : err.toString()\n        });\n    }\n    if (responseData.error) {\n        const message = responseData.error.message;\n        throw ERROR_FACTORY.create(\"token-subscribe-failed\" /* ErrorCode.TOKEN_SUBSCRIBE_FAILED */, {\n            errorInfo: message\n        });\n    }\n    if (!responseData.token) {\n        throw ERROR_FACTORY.create(\"token-subscribe-no-token\" /* ErrorCode.TOKEN_SUBSCRIBE_NO_TOKEN */);\n    }\n    return responseData.token;\n}\nasync function requestUpdateToken(firebaseDependencies, tokenDetails) {\n    const headers = await getHeaders(firebaseDependencies);\n    const body = getBody(tokenDetails.subscriptionOptions);\n    const updateOptions = {\n        method: 'PATCH',\n        headers,\n        body: JSON.stringify(body)\n    };\n    let responseData;\n    try {\n        const response = await fetch(`${getEndpoint(firebaseDependencies.appConfig)}/${tokenDetails.token}`, updateOptions);\n        responseData = await response.json();\n    }\n    catch (err) {\n        throw ERROR_FACTORY.create(\"token-update-failed\" /* ErrorCode.TOKEN_UPDATE_FAILED */, {\n            errorInfo: err === null || err === void 0 ? void 0 : err.toString()\n        });\n    }\n    if (responseData.error) {\n        const message = responseData.error.message;\n        throw ERROR_FACTORY.create(\"token-update-failed\" /* ErrorCode.TOKEN_UPDATE_FAILED */, {\n            errorInfo: message\n        });\n    }\n    if (!responseData.token) {\n        throw ERROR_FACTORY.create(\"token-update-no-token\" /* ErrorCode.TOKEN_UPDATE_NO_TOKEN */);\n    }\n    return responseData.token;\n}\nasync function requestDeleteToken(firebaseDependencies, token) {\n    const headers = await getHeaders(firebaseDependencies);\n    const unsubscribeOptions = {\n        method: 'DELETE',\n        headers\n    };\n    try {\n        const response = await fetch(`${getEndpoint(firebaseDependencies.appConfig)}/${token}`, unsubscribeOptions);\n        const responseData = await response.json();\n        if (responseData.error) {\n            const message = responseData.error.message;\n            throw ERROR_FACTORY.create(\"token-unsubscribe-failed\" /* ErrorCode.TOKEN_UNSUBSCRIBE_FAILED */, {\n                errorInfo: message\n            });\n        }\n    }\n    catch (err) {\n        throw ERROR_FACTORY.create(\"token-unsubscribe-failed\" /* ErrorCode.TOKEN_UNSUBSCRIBE_FAILED */, {\n            errorInfo: err === null || err === void 0 ? void 0 : err.toString()\n        });\n    }\n}\nfunction getEndpoint({ projectId }) {\n    return `${ENDPOINT}/projects/${projectId}/registrations`;\n}\nasync function getHeaders({ appConfig, installations }) {\n    const authToken = await installations.getToken();\n    return new Headers({\n        'Content-Type': 'application/json',\n        Accept: 'application/json',\n        'x-goog-api-key': appConfig.apiKey,\n        'x-goog-firebase-installations-auth': `FIS ${authToken}`\n    });\n}\nfunction getBody({ p256dh, auth, endpoint, vapidKey }) {\n    const body = {\n        web: {\n            endpoint,\n            auth,\n            p256dh\n        }\n    };\n    if (vapidKey !== DEFAULT_VAPID_KEY) {\n        body.web.applicationPubKey = vapidKey;\n    }\n    return body;\n}\n\n/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n// UpdateRegistration will be called once every week.\nconst TOKEN_EXPIRATION_MS = 7 * 24 * 60 * 60 * 1000; // 7 days\nasync function getTokenInternal(messaging) {\n    const pushSubscription = await getPushSubscription(messaging.swRegistration, messaging.vapidKey);\n    const subscriptionOptions = {\n        vapidKey: messaging.vapidKey,\n        swScope: messaging.swRegistration.scope,\n        endpoint: pushSubscription.endpoint,\n        auth: arrayToBase64(pushSubscription.getKey('auth')),\n        p256dh: arrayToBase64(pushSubscription.getKey('p256dh'))\n    };\n    const tokenDetails = await dbGet(messaging.firebaseDependencies);\n    if (!tokenDetails) {\n        // No token, get a new one.\n        return getNewToken(messaging.firebaseDependencies, subscriptionOptions);\n    }\n    else if (!isTokenValid(tokenDetails.subscriptionOptions, subscriptionOptions)) {\n        // Invalid token, get a new one.\n        try {\n            await requestDeleteToken(messaging.firebaseDependencies, tokenDetails.token);\n        }\n        catch (e) {\n            // Suppress errors because of #2364\n            console.warn(e);\n        }\n        return getNewToken(messaging.firebaseDependencies, subscriptionOptions);\n    }\n    else if (Date.now() >= tokenDetails.createTime + TOKEN_EXPIRATION_MS) {\n        // Weekly token refresh\n        return updateToken(messaging, {\n            token: tokenDetails.token,\n            createTime: Date.now(),\n            subscriptionOptions\n        });\n    }\n    else {\n        // Valid token, nothing to do.\n        return tokenDetails.token;\n    }\n}\n/**\n * This method deletes the token from the database, unsubscribes the token from FCM, and unregisters\n * the push subscription if it exists.\n */\nasync function deleteTokenInternal(messaging) {\n    const tokenDetails = await dbGet(messaging.firebaseDependencies);\n    if (tokenDetails) {\n        await requestDeleteToken(messaging.firebaseDependencies, tokenDetails.token);\n        await dbRemove(messaging.firebaseDependencies);\n    }\n    // Unsubscribe from the push subscription.\n    const pushSubscription = await messaging.swRegistration.pushManager.getSubscription();\n    if (pushSubscription) {\n        return pushSubscription.unsubscribe();\n    }\n    // If there's no SW, consider it a success.\n    return true;\n}\nasync function updateToken(messaging, tokenDetails) {\n    try {\n        const updatedToken = await requestUpdateToken(messaging.firebaseDependencies, tokenDetails);\n        const updatedTokenDetails = Object.assign(Object.assign({}, tokenDetails), { token: updatedToken, createTime: Date.now() });\n        await dbSet(messaging.firebaseDependencies, updatedTokenDetails);\n        return updatedToken;\n    }\n    catch (e) {\n        throw e;\n    }\n}\nasync function getNewToken(firebaseDependencies, subscriptionOptions) {\n    const token = await requestGetToken(firebaseDependencies, subscriptionOptions);\n    const tokenDetails = {\n        token,\n        createTime: Date.now(),\n        subscriptionOptions\n    };\n    await dbSet(firebaseDependencies, tokenDetails);\n    return tokenDetails.token;\n}\n/**\n * Gets a PushSubscription for the current user.\n */\nasync function getPushSubscription(swRegistration, vapidKey) {\n    const subscription = await swRegistration.pushManager.getSubscription();\n    if (subscription) {\n        return subscription;\n    }\n    return swRegistration.pushManager.subscribe({\n        userVisibleOnly: true,\n        // Chrome <= 75 doesn't support base64-encoded VAPID key. For backward compatibility, VAPID key\n        // submitted to pushManager#subscribe must be of type Uint8Array.\n        applicationServerKey: base64ToArray(vapidKey)\n    });\n}\n/**\n * Checks if the saved tokenDetails object matches the configuration provided.\n */\nfunction isTokenValid(dbOptions, currentOptions) {\n    const isVapidKeyEqual = currentOptions.vapidKey === dbOptions.vapidKey;\n    const isEndpointEqual = currentOptions.endpoint === dbOptions.endpoint;\n    const isAuthEqual = currentOptions.auth === dbOptions.auth;\n    const isP256dhEqual = currentOptions.p256dh === dbOptions.p256dh;\n    return isVapidKeyEqual && isEndpointEqual && isAuthEqual && isP256dhEqual;\n}\n\n/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nfunction externalizePayload(internalPayload) {\n    const payload = {\n        from: internalPayload.from,\n        // eslint-disable-next-line camelcase\n        collapseKey: internalPayload.collapse_key,\n        // eslint-disable-next-line camelcase\n        messageId: internalPayload.fcmMessageId\n    };\n    propagateNotificationPayload(payload, internalPayload);\n    propagateDataPayload(payload, internalPayload);\n    propagateFcmOptions(payload, internalPayload);\n    return payload;\n}\nfunction propagateNotificationPayload(payload, messagePayloadInternal) {\n    if (!messagePayloadInternal.notification) {\n        return;\n    }\n    payload.notification = {};\n    const title = messagePayloadInternal.notification.title;\n    if (!!title) {\n        payload.notification.title = title;\n    }\n    const body = messagePayloadInternal.notification.body;\n    if (!!body) {\n        payload.notification.body = body;\n    }\n    const image = messagePayloadInternal.notification.image;\n    if (!!image) {\n        payload.notification.image = image;\n    }\n    const icon = messagePayloadInternal.notification.icon;\n    if (!!icon) {\n        payload.notification.icon = icon;\n    }\n}\nfunction propagateDataPayload(payload, messagePayloadInternal) {\n    if (!messagePayloadInternal.data) {\n        return;\n    }\n    payload.data = messagePayloadInternal.data;\n}\nfunction propagateFcmOptions(payload, messagePayloadInternal) {\n    var _a, _b, _c, _d, _e;\n    // fcmOptions.link value is written into notification.click_action. see more in b/232072111\n    if (!messagePayloadInternal.fcmOptions &&\n        !((_a = messagePayloadInternal.notification) === null || _a === void 0 ? void 0 : _a.click_action)) {\n        return;\n    }\n    payload.fcmOptions = {};\n    const link = (_c = (_b = messagePayloadInternal.fcmOptions) === null || _b === void 0 ? void 0 : _b.link) !== null && _c !== void 0 ? _c : (_d = messagePayloadInternal.notification) === null || _d === void 0 ? void 0 : _d.click_action;\n    if (!!link) {\n        payload.fcmOptions.link = link;\n    }\n    // eslint-disable-next-line camelcase\n    const analyticsLabel = (_e = messagePayloadInternal.fcmOptions) === null || _e === void 0 ? void 0 : _e.analytics_label;\n    if (!!analyticsLabel) {\n        payload.fcmOptions.analyticsLabel = analyticsLabel;\n    }\n}\n\n/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nfunction isConsoleMessage(data) {\n    // This message has a campaign ID, meaning it was sent using the Firebase Console.\n    return typeof data === 'object' && !!data && CONSOLE_CAMPAIGN_ID in data;\n}\n\n/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n_mergeStrings('AzSCbw63g1R0nCw85jG8', 'Iaya3yLKwmgvh7cF0q4');\nfunction _mergeStrings(s1, s2) {\n    const resultArray = [];\n    for (let i = 0; i < s1.length; i++) {\n        resultArray.push(s1.charAt(i));\n        if (i < s2.length) {\n            resultArray.push(s2.charAt(i));\n        }\n    }\n    return resultArray.join('');\n}\n\n/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nfunction extractAppConfig(app) {\n    if (!app || !app.options) {\n        throw getMissingValueError('App Configuration Object');\n    }\n    if (!app.name) {\n        throw getMissingValueError('App Name');\n    }\n    // Required app config keys\n    const configKeys = [\n        'projectId',\n        'apiKey',\n        'appId',\n        'messagingSenderId'\n    ];\n    const { options } = app;\n    for (const keyName of configKeys) {\n        if (!options[keyName]) {\n            throw getMissingValueError(keyName);\n        }\n    }\n    return {\n        appName: app.name,\n        projectId: options.projectId,\n        apiKey: options.apiKey,\n        appId: options.appId,\n        senderId: options.messagingSenderId\n    };\n}\nfunction getMissingValueError(valueName) {\n    return ERROR_FACTORY.create(\"missing-app-config-values\" /* ErrorCode.MISSING_APP_CONFIG_VALUES */, {\n        valueName\n    });\n}\n\n/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nclass MessagingService {\n    constructor(app, installations, analyticsProvider) {\n        // logging is only done with end user consent. Default to false.\n        this.deliveryMetricsExportedToBigQueryEnabled = false;\n        this.onBackgroundMessageHandler = null;\n        this.onMessageHandler = null;\n        this.logEvents = [];\n        this.isLogServiceStarted = false;\n        const appConfig = extractAppConfig(app);\n        this.firebaseDependencies = {\n            app,\n            appConfig,\n            installations,\n            analyticsProvider\n        };\n    }\n    _delete() {\n        return Promise.resolve();\n    }\n}\n\n/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nasync function registerDefaultSw(messaging) {\n    try {\n        messaging.swRegistration = await navigator.serviceWorker.register(DEFAULT_SW_PATH, {\n            scope: DEFAULT_SW_SCOPE\n        });\n        // The timing when browser updates sw when sw has an update is unreliable from experiment. It\n        // leads to version conflict when the SDK upgrades to a newer version in the main page, but sw\n        // is stuck with the old version. For example,\n        // https://github.com/firebase/firebase-js-sdk/issues/2590 The following line reliably updates\n        // sw if there was an update.\n        messaging.swRegistration.update().catch(() => {\n            /* it is non blocking and we don't care if it failed */\n        });\n    }\n    catch (e) {\n        throw ERROR_FACTORY.create(\"failed-service-worker-registration\" /* ErrorCode.FAILED_DEFAULT_REGISTRATION */, {\n            browserErrorMessage: e === null || e === void 0 ? void 0 : e.message\n        });\n    }\n}\n\n/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nasync function updateSwReg(messaging, swRegistration) {\n    if (!swRegistration && !messaging.swRegistration) {\n        await registerDefaultSw(messaging);\n    }\n    if (!swRegistration && !!messaging.swRegistration) {\n        return;\n    }\n    if (!(swRegistration instanceof ServiceWorkerRegistration)) {\n        throw ERROR_FACTORY.create(\"invalid-sw-registration\" /* ErrorCode.INVALID_SW_REGISTRATION */);\n    }\n    messaging.swRegistration = swRegistration;\n}\n\n/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nasync function updateVapidKey(messaging, vapidKey) {\n    if (!!vapidKey) {\n        messaging.vapidKey = vapidKey;\n    }\n    else if (!messaging.vapidKey) {\n        messaging.vapidKey = DEFAULT_VAPID_KEY;\n    }\n}\n\n/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nasync function getToken$1(messaging, options) {\n    if (!navigator) {\n        throw ERROR_FACTORY.create(\"only-available-in-window\" /* ErrorCode.AVAILABLE_IN_WINDOW */);\n    }\n    if (Notification.permission === 'default') {\n        await Notification.requestPermission();\n    }\n    if (Notification.permission !== 'granted') {\n        throw ERROR_FACTORY.create(\"permission-blocked\" /* ErrorCode.PERMISSION_BLOCKED */);\n    }\n    await updateVapidKey(messaging, options === null || options === void 0 ? void 0 : options.vapidKey);\n    await updateSwReg(messaging, options === null || options === void 0 ? void 0 : options.serviceWorkerRegistration);\n    return getTokenInternal(messaging);\n}\n\n/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nasync function logToScion(messaging, messageType, data) {\n    const eventType = getEventType(messageType);\n    const analytics = await messaging.firebaseDependencies.analyticsProvider.get();\n    analytics.logEvent(eventType, {\n        /* eslint-disable camelcase */\n        message_id: data[CONSOLE_CAMPAIGN_ID],\n        message_name: data[CONSOLE_CAMPAIGN_NAME],\n        message_time: data[CONSOLE_CAMPAIGN_TIME],\n        message_device_time: Math.floor(Date.now() / 1000)\n        /* eslint-enable camelcase */\n    });\n}\nfunction getEventType(messageType) {\n    switch (messageType) {\n        case MessageType.NOTIFICATION_CLICKED:\n            return 'notification_open';\n        case MessageType.PUSH_RECEIVED:\n            return 'notification_foreground';\n        default:\n            throw new Error();\n    }\n}\n\n/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nasync function messageEventListener(messaging, event) {\n    const internalPayload = event.data;\n    if (!internalPayload.isFirebaseMessaging) {\n        return;\n    }\n    if (messaging.onMessageHandler &&\n        internalPayload.messageType === MessageType.PUSH_RECEIVED) {\n        if (typeof messaging.onMessageHandler === 'function') {\n            messaging.onMessageHandler(externalizePayload(internalPayload));\n        }\n        else {\n            messaging.onMessageHandler.next(externalizePayload(internalPayload));\n        }\n    }\n    // Log to Scion if applicable\n    const dataPayload = internalPayload.data;\n    if (isConsoleMessage(dataPayload) &&\n        dataPayload[CONSOLE_CAMPAIGN_ANALYTICS_ENABLED] === '1') {\n        await logToScion(messaging, internalPayload.messageType, dataPayload);\n    }\n}\n\nconst name = \"@firebase/messaging\";\nconst version = \"0.12.14\";\n\n/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nconst WindowMessagingFactory = (container) => {\n    const messaging = new MessagingService(container.getProvider('app').getImmediate(), container.getProvider('installations-internal').getImmediate(), container.getProvider('analytics-internal'));\n    navigator.serviceWorker.addEventListener('message', e => messageEventListener(messaging, e));\n    return messaging;\n};\nconst WindowMessagingInternalFactory = (container) => {\n    const messaging = container\n        .getProvider('messaging')\n        .getImmediate();\n    const messagingInternal = {\n        getToken: (options) => getToken$1(messaging, options)\n    };\n    return messagingInternal;\n};\nfunction registerMessagingInWindow() {\n    _registerComponent(new Component('messaging', WindowMessagingFactory, \"PUBLIC\" /* ComponentType.PUBLIC */));\n    _registerComponent(new Component('messaging-internal', WindowMessagingInternalFactory, \"PRIVATE\" /* ComponentType.PRIVATE */));\n    registerVersion(name, version);\n    // BUILD_TARGET will be replaced by values like esm2017, cjs2017, etc during the compilation\n    registerVersion(name, version, 'esm2017');\n}\n\n/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Checks if all required APIs exist in the browser.\n * @returns a Promise that resolves to a boolean.\n *\n * @public\n */\nasync function isWindowSupported() {\n    try {\n        // This throws if open() is unsupported, so adding it to the conditional\n        // statement below can cause an uncaught error.\n        await validateIndexedDBOpenable();\n    }\n    catch (e) {\n        return false;\n    }\n    // firebase-js-sdk/issues/2393 reveals that idb#open in Safari iframe and Firefox private browsing\n    // might be prohibited to run. In these contexts, an error would be thrown during the messaging\n    // instantiating phase, informing the developers to import/call isSupported for special handling.\n    return (typeof window !== 'undefined' &&\n        isIndexedDBAvailable() &&\n        areCookiesEnabled() &&\n        'serviceWorker' in navigator &&\n        'PushManager' in window &&\n        'Notification' in window &&\n        'fetch' in window &&\n        ServiceWorkerRegistration.prototype.hasOwnProperty('showNotification') &&\n        PushSubscription.prototype.hasOwnProperty('getKey'));\n}\n\n/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nasync function deleteToken$1(messaging) {\n    if (!navigator) {\n        throw ERROR_FACTORY.create(\"only-available-in-window\" /* ErrorCode.AVAILABLE_IN_WINDOW */);\n    }\n    if (!messaging.swRegistration) {\n        await registerDefaultSw(messaging);\n    }\n    return deleteTokenInternal(messaging);\n}\n\n/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nfunction onMessage$1(messaging, nextOrObserver) {\n    if (!navigator) {\n        throw ERROR_FACTORY.create(\"only-available-in-window\" /* ErrorCode.AVAILABLE_IN_WINDOW */);\n    }\n    messaging.onMessageHandler = nextOrObserver;\n    return () => {\n        messaging.onMessageHandler = null;\n    };\n}\n\n/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Retrieves a Firebase Cloud Messaging instance.\n *\n * @returns The Firebase Cloud Messaging instance associated with the provided firebase app.\n *\n * @public\n */\nfunction getMessagingInWindow(app = getApp()) {\n    // Conscious decision to make this async check non-blocking during the messaging instance\n    // initialization phase for performance consideration. An error would be thrown latter for\n    // developer's information. Developers can then choose to import and call `isSupported` for\n    // special handling.\n    isWindowSupported().then(isSupported => {\n        // If `isWindowSupported()` resolved, but returned false.\n        if (!isSupported) {\n            throw ERROR_FACTORY.create(\"unsupported-browser\" /* ErrorCode.UNSUPPORTED_BROWSER */);\n        }\n    }, _ => {\n        // If `isWindowSupported()` rejected.\n        throw ERROR_FACTORY.create(\"indexed-db-unsupported\" /* ErrorCode.INDEXED_DB_UNSUPPORTED */);\n    });\n    return _getProvider(getModularInstance(app), 'messaging').getImmediate();\n}\n/**\n * Subscribes the {@link Messaging} instance to push notifications. Returns a Firebase Cloud\n * Messaging registration token that can be used to send push messages to that {@link Messaging}\n * instance.\n *\n * If notification permission isn't already granted, this method asks the user for permission. The\n * returned promise rejects if the user does not allow the app to show notifications.\n *\n * @param messaging - The {@link Messaging} instance.\n * @param options - Provides an optional vapid key and an optional service worker registration.\n *\n * @returns The promise resolves with an FCM registration token.\n *\n * @public\n */\nasync function getToken(messaging, options) {\n    messaging = getModularInstance(messaging);\n    return getToken$1(messaging, options);\n}\n/**\n * Deletes the registration token associated with this {@link Messaging} instance and unsubscribes\n * the {@link Messaging} instance from the push subscription.\n *\n * @param messaging - The {@link Messaging} instance.\n *\n * @returns The promise resolves when the token has been successfully deleted.\n *\n * @public\n */\nfunction deleteToken(messaging) {\n    messaging = getModularInstance(messaging);\n    return deleteToken$1(messaging);\n}\n/**\n * When a push message is received and the user is currently on a page for your origin, the\n * message is passed to the page and an `onMessage()` event is dispatched with the payload of\n * the push message.\n *\n *\n * @param messaging - The {@link Messaging} instance.\n * @param nextOrObserver - This function, or observer object with `next` defined,\n *     is called when a message is received and the user is currently viewing your page.\n * @returns To stop listening for messages execute this returned function.\n *\n * @public\n */\nfunction onMessage(messaging, nextOrObserver) {\n    messaging = getModularInstance(messaging);\n    return onMessage$1(messaging, nextOrObserver);\n}\n\n/**\n * The Firebase Cloud Messaging Web SDK.\n * This SDK does not work in a Node.js environment.\n *\n * @packageDocumentation\n */\nregisterMessagingInWindow();\n\nexport { deleteToken, getMessagingInWindow as getMessaging, getToken, isWindowSupported as isSupported, onMessage };\n//# sourceMappingURL=index.esm2017.js.map\n","import StyleToObject from '../cjs/index.js';\n\n// ensure compatibility with rollup umd build\nexport default StyleToObject.default || StyleToObject;\n","/**\n * @import {Identifier, Literal, MemberExpression} from 'estree'\n * @import {Jsx, JsxDev, Options, Props} from 'hast-util-to-jsx-runtime'\n * @import {Element, Nodes, Parents, Root, Text} from 'hast'\n * @import {MdxFlowExpressionHast, MdxTextExpressionHast} from 'mdast-util-mdx-expression'\n * @import {MdxJsxFlowElementHast, MdxJsxTextElementHast} from 'mdast-util-mdx-jsx'\n * @import {MdxjsEsmHast} from 'mdast-util-mdxjs-esm'\n * @import {Position} from 'unist'\n * @import {Child, Create, Field, State, Style} from './types.js'\n */\n\nimport {stringify as commas} from 'comma-separated-tokens'\nimport {ok as assert} from 'devlop'\nimport {name as isIdentifierName} from 'estree-util-is-identifier-name'\nimport {whitespace} from 'hast-util-whitespace'\nimport {find, hastToReact, html, svg} from 'property-information'\nimport {stringify as spaces} from 'space-separated-tokens'\nimport styleToObject from 'style-to-object'\nimport {pointStart} from 'unist-util-position'\nimport {VFileMessage} from 'vfile-message'\n\n// To do: next major: `Object.hasOwn`.\nconst own = {}.hasOwnProperty\n\n/** @type {Map<string, number>} */\nconst emptyMap = new Map()\n\nconst cap = /[A-Z]/g\nconst dashSomething = /-([a-z])/g\n\n// `react-dom` triggers a warning for *any* white space in tables.\n// To follow GFM, `mdast-util-to-hast` injects line endings between elements.\n// Other tools might do so too, but they don’t do here, so we remove all of\n// that.\n\n// See: <https://github.com/facebook/react/pull/7081>.\n// See: <https://github.com/facebook/react/pull/7515>.\n// See: <https://github.com/remarkjs/remark-react/issues/64>.\n// See: <https://github.com/rehypejs/rehype-react/pull/29>.\n// See: <https://github.com/rehypejs/rehype-react/pull/32>.\n// See: <https://github.com/rehypejs/rehype-react/pull/45>.\nconst tableElements = new Set(['table', 'tbody', 'thead', 'tfoot', 'tr'])\n\nconst tableCellElement = new Set(['td', 'th'])\n\nconst docs = 'https://github.com/syntax-tree/hast-util-to-jsx-runtime'\n\n/**\n * Transform a hast tree to preact, react, solid, svelte, vue, etc.,\n * with an automatic JSX runtime.\n *\n * @param {Nodes} tree\n *   Tree to transform.\n * @param {Options} options\n *   Configuration (required).\n * @returns {JSX.Element}\n *   JSX element.\n */\n\nexport function toJsxRuntime(tree, options) {\n  if (!options || options.Fragment === undefined) {\n    throw new TypeError('Expected `Fragment` in options')\n  }\n\n  const filePath = options.filePath || undefined\n  /** @type {Create} */\n  let create\n\n  if (options.development) {\n    if (typeof options.jsxDEV !== 'function') {\n      throw new TypeError(\n        'Expected `jsxDEV` in options when `development: true`'\n      )\n    }\n\n    create = developmentCreate(filePath, options.jsxDEV)\n  } else {\n    if (typeof options.jsx !== 'function') {\n      throw new TypeError('Expected `jsx` in production options')\n    }\n\n    if (typeof options.jsxs !== 'function') {\n      throw new TypeError('Expected `jsxs` in production options')\n    }\n\n    create = productionCreate(filePath, options.jsx, options.jsxs)\n  }\n\n  /** @type {State} */\n  const state = {\n    Fragment: options.Fragment,\n    ancestors: [],\n    components: options.components || {},\n    create,\n    elementAttributeNameCase: options.elementAttributeNameCase || 'react',\n    evaluater: options.createEvaluater ? options.createEvaluater() : undefined,\n    filePath,\n    ignoreInvalidStyle: options.ignoreInvalidStyle || false,\n    passKeys: options.passKeys !== false,\n    passNode: options.passNode || false,\n    schema: options.space === 'svg' ? svg : html,\n    stylePropertyNameCase: options.stylePropertyNameCase || 'dom',\n    tableCellAlignToStyle: options.tableCellAlignToStyle !== false\n  }\n\n  const result = one(state, tree, undefined)\n\n  // JSX element.\n  if (result && typeof result !== 'string') {\n    return result\n  }\n\n  // Text node or something that turned into nothing.\n  return state.create(\n    tree,\n    state.Fragment,\n    {children: result || undefined},\n    undefined\n  )\n}\n\n/**\n * Transform a node.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Nodes} node\n *   Current node.\n * @param {string | undefined} key\n *   Key.\n * @returns {Child | undefined}\n *   Child, optional.\n */\nfunction one(state, node, key) {\n  if (node.type === 'element') {\n    return element(state, node, key)\n  }\n\n  if (node.type === 'mdxFlowExpression' || node.type === 'mdxTextExpression') {\n    return mdxExpression(state, node)\n  }\n\n  if (node.type === 'mdxJsxFlowElement' || node.type === 'mdxJsxTextElement') {\n    return mdxJsxElement(state, node, key)\n  }\n\n  if (node.type === 'mdxjsEsm') {\n    return mdxEsm(state, node)\n  }\n\n  if (node.type === 'root') {\n    return root(state, node, key)\n  }\n\n  if (node.type === 'text') {\n    return text(state, node)\n  }\n}\n\n/**\n * Handle element.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Element} node\n *   Current node.\n * @param {string | undefined} key\n *   Key.\n * @returns {Child | undefined}\n *   Child, optional.\n */\nfunction element(state, node, key) {\n  const parentSchema = state.schema\n  let schema = parentSchema\n\n  if (node.tagName.toLowerCase() === 'svg' && parentSchema.space === 'html') {\n    schema = svg\n    state.schema = schema\n  }\n\n  state.ancestors.push(node)\n\n  const type = findComponentFromName(state, node.tagName, false)\n  const props = createElementProps(state, node)\n  let children = createChildren(state, node)\n\n  if (tableElements.has(node.tagName)) {\n    children = children.filter(function (child) {\n      return typeof child === 'string' ? !whitespace(child) : true\n    })\n  }\n\n  addNode(state, props, type, node)\n  addChildren(props, children)\n\n  // Restore.\n  state.ancestors.pop()\n  state.schema = parentSchema\n\n  return state.create(node, type, props, key)\n}\n\n/**\n * Handle MDX expression.\n *\n * @param {State} state\n *   Info passed around.\n * @param {MdxFlowExpressionHast | MdxTextExpressionHast} node\n *   Current node.\n * @returns {Child | undefined}\n *   Child, optional.\n */\nfunction mdxExpression(state, node) {\n  if (node.data && node.data.estree && state.evaluater) {\n    const program = node.data.estree\n    const expression = program.body[0]\n    assert(expression.type === 'ExpressionStatement')\n\n    // Assume result is a child.\n    return /** @type {Child | undefined} */ (\n      state.evaluater.evaluateExpression(expression.expression)\n    )\n  }\n\n  crashEstree(state, node.position)\n}\n\n/**\n * Handle MDX ESM.\n *\n * @param {State} state\n *   Info passed around.\n * @param {MdxjsEsmHast} node\n *   Current node.\n * @returns {Child | undefined}\n *   Child, optional.\n */\nfunction mdxEsm(state, node) {\n  if (node.data && node.data.estree && state.evaluater) {\n    // Assume result is a child.\n    return /** @type {Child | undefined} */ (\n      state.evaluater.evaluateProgram(node.data.estree)\n    )\n  }\n\n  crashEstree(state, node.position)\n}\n\n/**\n * Handle MDX JSX.\n *\n * @param {State} state\n *   Info passed around.\n * @param {MdxJsxFlowElementHast | MdxJsxTextElementHast} node\n *   Current node.\n * @param {string | undefined} key\n *   Key.\n * @returns {Child | undefined}\n *   Child, optional.\n */\nfunction mdxJsxElement(state, node, key) {\n  const parentSchema = state.schema\n  let schema = parentSchema\n\n  if (node.name === 'svg' && parentSchema.space === 'html') {\n    schema = svg\n    state.schema = schema\n  }\n\n  state.ancestors.push(node)\n\n  const type =\n    node.name === null\n      ? state.Fragment\n      : findComponentFromName(state, node.name, true)\n  const props = createJsxElementProps(state, node)\n  const children = createChildren(state, node)\n\n  addNode(state, props, type, node)\n  addChildren(props, children)\n\n  // Restore.\n  state.ancestors.pop()\n  state.schema = parentSchema\n\n  return state.create(node, type, props, key)\n}\n\n/**\n * Handle root.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Root} node\n *   Current node.\n * @param {string | undefined} key\n *   Key.\n * @returns {Child | undefined}\n *   Child, optional.\n */\nfunction root(state, node, key) {\n  /** @type {Props} */\n  const props = {}\n\n  addChildren(props, createChildren(state, node))\n\n  return state.create(node, state.Fragment, props, key)\n}\n\n/**\n * Handle text.\n *\n * @param {State} _\n *   Info passed around.\n * @param {Text} node\n *   Current node.\n * @returns {Child | undefined}\n *   Child, optional.\n */\nfunction text(_, node) {\n  return node.value\n}\n\n/**\n * Add `node` to props.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Props} props\n *   Props.\n * @param {unknown} type\n *   Type.\n * @param {Element | MdxJsxFlowElementHast | MdxJsxTextElementHast} node\n *   Node.\n * @returns {undefined}\n *   Nothing.\n */\nfunction addNode(state, props, type, node) {\n  // If this is swapped out for a component:\n  if (typeof type !== 'string' && type !== state.Fragment && state.passNode) {\n    props.node = node\n  }\n}\n\n/**\n * Add children to props.\n *\n * @param {Props} props\n *   Props.\n * @param {Array<Child>} children\n *   Children.\n * @returns {undefined}\n *   Nothing.\n */\nfunction addChildren(props, children) {\n  if (children.length > 0) {\n    const value = children.length > 1 ? children : children[0]\n\n    if (value) {\n      props.children = value\n    }\n  }\n}\n\n/**\n * @param {string | undefined} _\n *   Path to file.\n * @param {Jsx} jsx\n *   Dynamic.\n * @param {Jsx} jsxs\n *   Static.\n * @returns {Create}\n *   Create a production element.\n */\nfunction productionCreate(_, jsx, jsxs) {\n  return create\n  /** @type {Create} */\n  function create(_, type, props, key) {\n    // Only an array when there are 2 or more children.\n    const isStaticChildren = Array.isArray(props.children)\n    const fn = isStaticChildren ? jsxs : jsx\n    return key ? fn(type, props, key) : fn(type, props)\n  }\n}\n\n/**\n * @param {string | undefined} filePath\n *   Path to file.\n * @param {JsxDev} jsxDEV\n *   Development.\n * @returns {Create}\n *   Create a development element.\n */\nfunction developmentCreate(filePath, jsxDEV) {\n  return create\n  /** @type {Create} */\n  function create(node, type, props, key) {\n    // Only an array when there are 2 or more children.\n    const isStaticChildren = Array.isArray(props.children)\n    const point = pointStart(node)\n    return jsxDEV(\n      type,\n      props,\n      key,\n      isStaticChildren,\n      {\n        columnNumber: point ? point.column - 1 : undefined,\n        fileName: filePath,\n        lineNumber: point ? point.line : undefined\n      },\n      undefined\n    )\n  }\n}\n\n/**\n * Create props from an element.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Element} node\n *   Current element.\n * @returns {Props}\n *   Props.\n */\nfunction createElementProps(state, node) {\n  /** @type {Props} */\n  const props = {}\n  /** @type {string | undefined} */\n  let alignValue\n  /** @type {string} */\n  let prop\n\n  for (prop in node.properties) {\n    if (prop !== 'children' && own.call(node.properties, prop)) {\n      const result = createProperty(state, prop, node.properties[prop])\n\n      if (result) {\n        const [key, value] = result\n\n        if (\n          state.tableCellAlignToStyle &&\n          key === 'align' &&\n          typeof value === 'string' &&\n          tableCellElement.has(node.tagName)\n        ) {\n          alignValue = value\n        } else {\n          props[key] = value\n        }\n      }\n    }\n  }\n\n  if (alignValue) {\n    // Assume style is an object.\n    const style = /** @type {Style} */ (props.style || (props.style = {}))\n    style[state.stylePropertyNameCase === 'css' ? 'text-align' : 'textAlign'] =\n      alignValue\n  }\n\n  return props\n}\n\n/**\n * Create props from a JSX element.\n *\n * @param {State} state\n *   Info passed around.\n * @param {MdxJsxFlowElementHast | MdxJsxTextElementHast} node\n *   Current JSX element.\n * @returns {Props}\n *   Props.\n */\nfunction createJsxElementProps(state, node) {\n  /** @type {Props} */\n  const props = {}\n\n  for (const attribute of node.attributes) {\n    if (attribute.type === 'mdxJsxExpressionAttribute') {\n      if (attribute.data && attribute.data.estree && state.evaluater) {\n        const program = attribute.data.estree\n        const expression = program.body[0]\n        assert(expression.type === 'ExpressionStatement')\n        const objectExpression = expression.expression\n        assert(objectExpression.type === 'ObjectExpression')\n        const property = objectExpression.properties[0]\n        assert(property.type === 'SpreadElement')\n\n        Object.assign(\n          props,\n          state.evaluater.evaluateExpression(property.argument)\n        )\n      } else {\n        crashEstree(state, node.position)\n      }\n    } else {\n      // For JSX, the author is responsible of passing in the correct values.\n      const name = attribute.name\n      /** @type {unknown} */\n      let value\n\n      if (attribute.value && typeof attribute.value === 'object') {\n        if (\n          attribute.value.data &&\n          attribute.value.data.estree &&\n          state.evaluater\n        ) {\n          const program = attribute.value.data.estree\n          const expression = program.body[0]\n          assert(expression.type === 'ExpressionStatement')\n          value = state.evaluater.evaluateExpression(expression.expression)\n        } else {\n          crashEstree(state, node.position)\n        }\n      } else {\n        value = attribute.value === null ? true : attribute.value\n      }\n\n      // Assume a prop.\n      props[name] = /** @type {Props[keyof Props]} */ (value)\n    }\n  }\n\n  return props\n}\n\n/**\n * Create children.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Parents} node\n *   Current element.\n * @returns {Array<Child>}\n *   Children.\n */\nfunction createChildren(state, node) {\n  /** @type {Array<Child>} */\n  const children = []\n  let index = -1\n  /** @type {Map<string, number>} */\n  // Note: test this when Solid doesn’t want to merge my upcoming PR.\n  /* c8 ignore next */\n  const countsByName = state.passKeys ? new Map() : emptyMap\n\n  while (++index < node.children.length) {\n    const child = node.children[index]\n    /** @type {string | undefined} */\n    let key\n\n    if (state.passKeys) {\n      const name =\n        child.type === 'element'\n          ? child.tagName\n          : child.type === 'mdxJsxFlowElement' ||\n              child.type === 'mdxJsxTextElement'\n            ? child.name\n            : undefined\n\n      if (name) {\n        const count = countsByName.get(name) || 0\n        key = name + '-' + count\n        countsByName.set(name, count + 1)\n      }\n    }\n\n    const result = one(state, child, key)\n    if (result !== undefined) children.push(result)\n  }\n\n  return children\n}\n\n/**\n * Handle a property.\n *\n * @param {State} state\n *   Info passed around.\n * @param {string} prop\n *   Key.\n * @param {Array<number | string> | boolean | number | string | null | undefined} value\n *   hast property value.\n * @returns {Field | undefined}\n *   Field for runtime, optional.\n */\nfunction createProperty(state, prop, value) {\n  const info = find(state.schema, prop)\n\n  // Ignore nullish and `NaN` values.\n  if (\n    value === null ||\n    value === undefined ||\n    (typeof value === 'number' && Number.isNaN(value))\n  ) {\n    return\n  }\n\n  if (Array.isArray(value)) {\n    // Accept `array`.\n    // Most props are space-separated.\n    value = info.commaSeparated ? commas(value) : spaces(value)\n  }\n\n  // React only accepts `style` as object.\n  if (info.property === 'style') {\n    let styleObject =\n      typeof value === 'object' ? value : parseStyle(state, String(value))\n\n    if (state.stylePropertyNameCase === 'css') {\n      styleObject = transformStylesToCssCasing(styleObject)\n    }\n\n    return ['style', styleObject]\n  }\n\n  return [\n    state.elementAttributeNameCase === 'react' && info.space\n      ? hastToReact[info.property] || info.property\n      : info.attribute,\n    value\n  ]\n}\n\n/**\n * Parse a CSS declaration to an object.\n *\n * @param {State} state\n *   Info passed around.\n * @param {string} value\n *   CSS declarations.\n * @returns {Style}\n *   Properties.\n * @throws\n *   Throws `VFileMessage` when CSS cannot be parsed.\n */\nfunction parseStyle(state, value) {\n  /** @type {Style} */\n  const result = {}\n\n  try {\n    styleToObject(value, replacer)\n  } catch (error) {\n    if (!state.ignoreInvalidStyle) {\n      const cause = /** @type {Error} */ (error)\n      const message = new VFileMessage('Cannot parse `style` attribute', {\n        ancestors: state.ancestors,\n        cause,\n        ruleId: 'style',\n        source: 'hast-util-to-jsx-runtime'\n      })\n      message.file = state.filePath || undefined\n      message.url = docs + '#cannot-parse-style-attribute'\n\n      throw message\n    }\n  }\n\n  return result\n\n  /**\n   * Add a CSS property (normal, so with dashes) to `result` as a DOM CSS\n   * property.\n   *\n   * @param {string} name\n   *   Key.\n   * @param {string} value\n   *   Value\n   * @returns {undefined}\n   *   Nothing.\n   */\n  function replacer(name, value) {\n    let key = name\n\n    if (key.slice(0, 2) !== '--') {\n      if (key.slice(0, 4) === '-ms-') key = 'ms-' + key.slice(4)\n      key = key.replace(dashSomething, toCamel)\n    }\n\n    result[key] = value\n  }\n}\n\n/**\n * Create a JSX name from a string.\n *\n * @param {State} state\n *   To do.\n * @param {string} name\n *   Name.\n * @param {boolean} allowExpression\n *   Allow member expressions and identifiers.\n * @returns {unknown}\n *   To do.\n */\nfunction findComponentFromName(state, name, allowExpression) {\n  /** @type {Identifier | Literal | MemberExpression} */\n  let result\n\n  if (!allowExpression) {\n    result = {type: 'Literal', value: name}\n  } else if (name.includes('.')) {\n    const identifiers = name.split('.')\n    let index = -1\n    /** @type {Identifier | Literal | MemberExpression | undefined} */\n    let node\n\n    while (++index < identifiers.length) {\n      /** @type {Identifier | Literal} */\n      const prop = isIdentifierName(identifiers[index])\n        ? {type: 'Identifier', name: identifiers[index]}\n        : {type: 'Literal', value: identifiers[index]}\n      node = node\n        ? {\n            type: 'MemberExpression',\n            object: node,\n            property: prop,\n            computed: Boolean(index && prop.type === 'Literal'),\n            optional: false\n          }\n        : prop\n    }\n\n    assert(node, 'always a result')\n    result = node\n  } else {\n    result =\n      isIdentifierName(name) && !/^[a-z]/.test(name)\n        ? {type: 'Identifier', name}\n        : {type: 'Literal', value: name}\n  }\n\n  // Only literals can be passed in `components` currently.\n  // No identifiers / member expressions.\n  if (result.type === 'Literal') {\n    const name = /** @type {keyof JSX.IntrinsicElements} */ (result.value)\n\n    return own.call(state.components, name) ? state.components[name] : name\n  }\n\n  // Assume component.\n  if (state.evaluater) {\n    return state.evaluater.evaluateExpression(result)\n  }\n\n  crashEstree(state)\n}\n\n/**\n * @param {State} state\n * @param {Position | undefined} [place]\n * @returns {never}\n */\nfunction crashEstree(state, place) {\n  const message = new VFileMessage(\n    'Cannot handle MDX estrees without `createEvaluater`',\n    {\n      ancestors: state.ancestors,\n      place,\n      ruleId: 'mdx-estree',\n      source: 'hast-util-to-jsx-runtime'\n    }\n  )\n  message.file = state.filePath || undefined\n  message.url = docs + '#cannot-handle-mdx-estrees-without-createevaluater'\n\n  throw message\n}\n\n/**\n * Transform a DOM casing style object to a CSS casing style object.\n *\n * @param {Style} domCasing\n * @returns {Style}\n */\nfunction transformStylesToCssCasing(domCasing) {\n  /** @type {Style} */\n  const cssCasing = {}\n  /** @type {string} */\n  let from\n\n  for (from in domCasing) {\n    if (own.call(domCasing, from)) {\n      cssCasing[transformStyleToCssCasing(from)] = domCasing[from]\n    }\n  }\n\n  return cssCasing\n}\n\n/**\n * Transform a DOM casing style field to a CSS casing style field.\n *\n * @param {string} from\n * @returns {string}\n */\nfunction transformStyleToCssCasing(from) {\n  let to = from.replace(cap, toDash)\n  // Handle `ms-xxx` -> `-ms-xxx`.\n  if (to.slice(0, 3) === 'ms-') to = '-' + to\n  return to\n}\n\n/**\n * Make `$1` capitalized.\n *\n * @param {string} _\n *   Whatever.\n * @param {string} $1\n *   Single ASCII alphabetical.\n * @returns {string}\n *   Capitalized `$1`.\n */\nfunction toCamel(_, $1) {\n  return $1.toUpperCase()\n}\n\n/**\n * Make `$0` dash cased.\n *\n * @param {string} $0\n *   Capitalized ASCII leter.\n * @returns {string}\n *   Dash and lower letter.\n */\nfunction toDash($0) {\n  return '-' + $0.toLowerCase()\n}\n","/**\n * @typedef {import('hast').Nodes} Nodes\n */\n\n// HTML whitespace expression.\n// See <https://infra.spec.whatwg.org/#ascii-whitespace>.\nconst re = /[ \\t\\n\\f\\r]/g\n\n/**\n * Check if the given value is *inter-element whitespace*.\n *\n * @param {Nodes | string} thing\n *   Thing to check (`Node` or `string`).\n * @returns {boolean}\n *   Whether the `value` is inter-element whitespace (`boolean`): consisting of\n *   zero or more of space, tab (`\\t`), line feed (`\\n`), carriage return\n *   (`\\r`), or form feed (`\\f`); if a node is passed it must be a `Text` node,\n *   whose `value` field is checked.\n */\nexport function whitespace(thing) {\n  return typeof thing === 'object'\n    ? thing.type === 'text'\n      ? empty(thing.value)\n      : false\n    : empty(thing)\n}\n\n/**\n * @param {string} value\n * @returns {boolean}\n */\nfunction empty(value) {\n  return value.replace(re, '') === ''\n}\n","function getDefaultExportFromCjs (x) {\n\treturn x && x.__esModule && Object.prototype.hasOwnProperty.call(x, 'default') ? x['default'] : x;\n}\n\nvar urlToolkit = {exports: {}};\n\n(function (module, exports) {\n\t// see https://tools.ietf.org/html/rfc1808\n\n\t(function (root) {\n\t  var URL_REGEX =\n\t    /^(?=((?:[a-zA-Z0-9+\\-.]+:)?))\\1(?=((?:\\/\\/[^\\/?#]*)?))\\2(?=((?:(?:[^?#\\/]*\\/)*[^;?#\\/]*)?))\\3((?:;[^?#]*)?)(\\?[^#]*)?(#[^]*)?$/;\n\t  var FIRST_SEGMENT_REGEX = /^(?=([^\\/?#]*))\\1([^]*)$/;\n\t  var SLASH_DOT_REGEX = /(?:\\/|^)\\.(?=\\/)/g;\n\t  var SLASH_DOT_DOT_REGEX = /(?:\\/|^)\\.\\.\\/(?!\\.\\.\\/)[^\\/]*(?=\\/)/g;\n\n\t  var URLToolkit = {\n\t    // If opts.alwaysNormalize is true then the path will always be normalized even when it starts with / or //\n\t    // E.g\n\t    // With opts.alwaysNormalize = false (default, spec compliant)\n\t    // http://a.com/b/cd + /e/f/../g => http://a.com/e/f/../g\n\t    // With opts.alwaysNormalize = true (not spec compliant)\n\t    // http://a.com/b/cd + /e/f/../g => http://a.com/e/g\n\t    buildAbsoluteURL: function (baseURL, relativeURL, opts) {\n\t      opts = opts || {};\n\t      // remove any remaining space and CRLF\n\t      baseURL = baseURL.trim();\n\t      relativeURL = relativeURL.trim();\n\t      if (!relativeURL) {\n\t        // 2a) If the embedded URL is entirely empty, it inherits the\n\t        // entire base URL (i.e., is set equal to the base URL)\n\t        // and we are done.\n\t        if (!opts.alwaysNormalize) {\n\t          return baseURL;\n\t        }\n\t        var basePartsForNormalise = URLToolkit.parseURL(baseURL);\n\t        if (!basePartsForNormalise) {\n\t          throw new Error('Error trying to parse base URL.');\n\t        }\n\t        basePartsForNormalise.path = URLToolkit.normalizePath(\n\t          basePartsForNormalise.path\n\t        );\n\t        return URLToolkit.buildURLFromParts(basePartsForNormalise);\n\t      }\n\t      var relativeParts = URLToolkit.parseURL(relativeURL);\n\t      if (!relativeParts) {\n\t        throw new Error('Error trying to parse relative URL.');\n\t      }\n\t      if (relativeParts.scheme) {\n\t        // 2b) If the embedded URL starts with a scheme name, it is\n\t        // interpreted as an absolute URL and we are done.\n\t        if (!opts.alwaysNormalize) {\n\t          return relativeURL;\n\t        }\n\t        relativeParts.path = URLToolkit.normalizePath(relativeParts.path);\n\t        return URLToolkit.buildURLFromParts(relativeParts);\n\t      }\n\t      var baseParts = URLToolkit.parseURL(baseURL);\n\t      if (!baseParts) {\n\t        throw new Error('Error trying to parse base URL.');\n\t      }\n\t      if (!baseParts.netLoc && baseParts.path && baseParts.path[0] !== '/') {\n\t        // If netLoc missing and path doesn't start with '/', assume everthing before the first '/' is the netLoc\n\t        // This causes 'example.com/a' to be handled as '//example.com/a' instead of '/example.com/a'\n\t        var pathParts = FIRST_SEGMENT_REGEX.exec(baseParts.path);\n\t        baseParts.netLoc = pathParts[1];\n\t        baseParts.path = pathParts[2];\n\t      }\n\t      if (baseParts.netLoc && !baseParts.path) {\n\t        baseParts.path = '/';\n\t      }\n\t      var builtParts = {\n\t        // 2c) Otherwise, the embedded URL inherits the scheme of\n\t        // the base URL.\n\t        scheme: baseParts.scheme,\n\t        netLoc: relativeParts.netLoc,\n\t        path: null,\n\t        params: relativeParts.params,\n\t        query: relativeParts.query,\n\t        fragment: relativeParts.fragment,\n\t      };\n\t      if (!relativeParts.netLoc) {\n\t        // 3) If the embedded URL's <net_loc> is non-empty, we skip to\n\t        // Step 7.  Otherwise, the embedded URL inherits the <net_loc>\n\t        // (if any) of the base URL.\n\t        builtParts.netLoc = baseParts.netLoc;\n\t        // 4) If the embedded URL path is preceded by a slash \"/\", the\n\t        // path is not relative and we skip to Step 7.\n\t        if (relativeParts.path[0] !== '/') {\n\t          if (!relativeParts.path) {\n\t            // 5) If the embedded URL path is empty (and not preceded by a\n\t            // slash), then the embedded URL inherits the base URL path\n\t            builtParts.path = baseParts.path;\n\t            // 5a) if the embedded URL's <params> is non-empty, we skip to\n\t            // step 7; otherwise, it inherits the <params> of the base\n\t            // URL (if any) and\n\t            if (!relativeParts.params) {\n\t              builtParts.params = baseParts.params;\n\t              // 5b) if the embedded URL's <query> is non-empty, we skip to\n\t              // step 7; otherwise, it inherits the <query> of the base\n\t              // URL (if any) and we skip to step 7.\n\t              if (!relativeParts.query) {\n\t                builtParts.query = baseParts.query;\n\t              }\n\t            }\n\t          } else {\n\t            // 6) The last segment of the base URL's path (anything\n\t            // following the rightmost slash \"/\", or the entire path if no\n\t            // slash is present) is removed and the embedded URL's path is\n\t            // appended in its place.\n\t            var baseURLPath = baseParts.path;\n\t            var newPath =\n\t              baseURLPath.substring(0, baseURLPath.lastIndexOf('/') + 1) +\n\t              relativeParts.path;\n\t            builtParts.path = URLToolkit.normalizePath(newPath);\n\t          }\n\t        }\n\t      }\n\t      if (builtParts.path === null) {\n\t        builtParts.path = opts.alwaysNormalize\n\t          ? URLToolkit.normalizePath(relativeParts.path)\n\t          : relativeParts.path;\n\t      }\n\t      return URLToolkit.buildURLFromParts(builtParts);\n\t    },\n\t    parseURL: function (url) {\n\t      var parts = URL_REGEX.exec(url);\n\t      if (!parts) {\n\t        return null;\n\t      }\n\t      return {\n\t        scheme: parts[1] || '',\n\t        netLoc: parts[2] || '',\n\t        path: parts[3] || '',\n\t        params: parts[4] || '',\n\t        query: parts[5] || '',\n\t        fragment: parts[6] || '',\n\t      };\n\t    },\n\t    normalizePath: function (path) {\n\t      // The following operations are\n\t      // then applied, in order, to the new path:\n\t      // 6a) All occurrences of \"./\", where \".\" is a complete path\n\t      // segment, are removed.\n\t      // 6b) If the path ends with \".\" as a complete path segment,\n\t      // that \".\" is removed.\n\t      path = path.split('').reverse().join('').replace(SLASH_DOT_REGEX, '');\n\t      // 6c) All occurrences of \"<segment>/../\", where <segment> is a\n\t      // complete path segment not equal to \"..\", are removed.\n\t      // Removal of these path segments is performed iteratively,\n\t      // removing the leftmost matching pattern on each iteration,\n\t      // until no matching pattern remains.\n\t      // 6d) If the path ends with \"<segment>/..\", where <segment> is a\n\t      // complete path segment not equal to \"..\", that\n\t      // \"<segment>/..\" is removed.\n\t      while (\n\t        path.length !== (path = path.replace(SLASH_DOT_DOT_REGEX, '')).length\n\t      ) {}\n\t      return path.split('').reverse().join('');\n\t    },\n\t    buildURLFromParts: function (parts) {\n\t      return (\n\t        parts.scheme +\n\t        parts.netLoc +\n\t        parts.path +\n\t        parts.params +\n\t        parts.query +\n\t        parts.fragment\n\t      );\n\t    },\n\t  };\n\n\t  module.exports = URLToolkit;\n\t})(); \n} (urlToolkit));\n\nvar urlToolkitExports = urlToolkit.exports;\n\nfunction ownKeys(e, r) {\n  var t = Object.keys(e);\n  if (Object.getOwnPropertySymbols) {\n    var o = Object.getOwnPropertySymbols(e);\n    r && (o = o.filter(function (r) {\n      return Object.getOwnPropertyDescriptor(e, r).enumerable;\n    })), t.push.apply(t, o);\n  }\n  return t;\n}\nfunction _objectSpread2(e) {\n  for (var r = 1; r < arguments.length; r++) {\n    var t = null != arguments[r] ? arguments[r] : {};\n    r % 2 ? ownKeys(Object(t), !0).forEach(function (r) {\n      _defineProperty(e, r, t[r]);\n    }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) {\n      Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r));\n    });\n  }\n  return e;\n}\nfunction _toPrimitive(t, r) {\n  if (\"object\" != typeof t || !t) return t;\n  var e = t[Symbol.toPrimitive];\n  if (void 0 !== e) {\n    var i = e.call(t, r || \"default\");\n    if (\"object\" != typeof i) return i;\n    throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n  }\n  return (\"string\" === r ? String : Number)(t);\n}\nfunction _toPropertyKey(t) {\n  var i = _toPrimitive(t, \"string\");\n  return \"symbol\" == typeof i ? i : String(i);\n}\nfunction _defineProperty(obj, key, value) {\n  key = _toPropertyKey(key);\n  if (key in obj) {\n    Object.defineProperty(obj, key, {\n      value: value,\n      enumerable: true,\n      configurable: true,\n      writable: true\n    });\n  } else {\n    obj[key] = value;\n  }\n  return obj;\n}\nfunction _extends() {\n  _extends = Object.assign ? Object.assign.bind() : function (target) {\n    for (var i = 1; i < arguments.length; i++) {\n      var source = arguments[i];\n      for (var key in source) {\n        if (Object.prototype.hasOwnProperty.call(source, key)) {\n          target[key] = source[key];\n        }\n      }\n    }\n    return target;\n  };\n  return _extends.apply(this, arguments);\n}\n\n// https://caniuse.com/mdn-javascript_builtins_number_isfinite\nconst isFiniteNumber = Number.isFinite || function (value) {\n  return typeof value === 'number' && isFinite(value);\n};\n\n// https://caniuse.com/mdn-javascript_builtins_number_issafeinteger\nconst isSafeInteger = Number.isSafeInteger || function (value) {\n  return typeof value === 'number' && Math.abs(value) <= MAX_SAFE_INTEGER;\n};\nconst MAX_SAFE_INTEGER = Number.MAX_SAFE_INTEGER || 9007199254740991;\n\nlet Events = /*#__PURE__*/function (Events) {\n  Events[\"MEDIA_ATTACHING\"] = \"hlsMediaAttaching\";\n  Events[\"MEDIA_ATTACHED\"] = \"hlsMediaAttached\";\n  Events[\"MEDIA_DETACHING\"] = \"hlsMediaDetaching\";\n  Events[\"MEDIA_DETACHED\"] = \"hlsMediaDetached\";\n  Events[\"BUFFER_RESET\"] = \"hlsBufferReset\";\n  Events[\"BUFFER_CODECS\"] = \"hlsBufferCodecs\";\n  Events[\"BUFFER_CREATED\"] = \"hlsBufferCreated\";\n  Events[\"BUFFER_APPENDING\"] = \"hlsBufferAppending\";\n  Events[\"BUFFER_APPENDED\"] = \"hlsBufferAppended\";\n  Events[\"BUFFER_EOS\"] = \"hlsBufferEos\";\n  Events[\"BUFFER_FLUSHING\"] = \"hlsBufferFlushing\";\n  Events[\"BUFFER_FLUSHED\"] = \"hlsBufferFlushed\";\n  Events[\"MANIFEST_LOADING\"] = \"hlsManifestLoading\";\n  Events[\"MANIFEST_LOADED\"] = \"hlsManifestLoaded\";\n  Events[\"MANIFEST_PARSED\"] = \"hlsManifestParsed\";\n  Events[\"LEVEL_SWITCHING\"] = \"hlsLevelSwitching\";\n  Events[\"LEVEL_SWITCHED\"] = \"hlsLevelSwitched\";\n  Events[\"LEVEL_LOADING\"] = \"hlsLevelLoading\";\n  Events[\"LEVEL_LOADED\"] = \"hlsLevelLoaded\";\n  Events[\"LEVEL_UPDATED\"] = \"hlsLevelUpdated\";\n  Events[\"LEVEL_PTS_UPDATED\"] = \"hlsLevelPtsUpdated\";\n  Events[\"LEVELS_UPDATED\"] = \"hlsLevelsUpdated\";\n  Events[\"AUDIO_TRACKS_UPDATED\"] = \"hlsAudioTracksUpdated\";\n  Events[\"AUDIO_TRACK_SWITCHING\"] = \"hlsAudioTrackSwitching\";\n  Events[\"AUDIO_TRACK_SWITCHED\"] = \"hlsAudioTrackSwitched\";\n  Events[\"AUDIO_TRACK_LOADING\"] = \"hlsAudioTrackLoading\";\n  Events[\"AUDIO_TRACK_LOADED\"] = \"hlsAudioTrackLoaded\";\n  Events[\"SUBTITLE_TRACKS_UPDATED\"] = \"hlsSubtitleTracksUpdated\";\n  Events[\"SUBTITLE_TRACKS_CLEARED\"] = \"hlsSubtitleTracksCleared\";\n  Events[\"SUBTITLE_TRACK_SWITCH\"] = \"hlsSubtitleTrackSwitch\";\n  Events[\"SUBTITLE_TRACK_LOADING\"] = \"hlsSubtitleTrackLoading\";\n  Events[\"SUBTITLE_TRACK_LOADED\"] = \"hlsSubtitleTrackLoaded\";\n  Events[\"SUBTITLE_FRAG_PROCESSED\"] = \"hlsSubtitleFragProcessed\";\n  Events[\"CUES_PARSED\"] = \"hlsCuesParsed\";\n  Events[\"NON_NATIVE_TEXT_TRACKS_FOUND\"] = \"hlsNonNativeTextTracksFound\";\n  Events[\"INIT_PTS_FOUND\"] = \"hlsInitPtsFound\";\n  Events[\"FRAG_LOADING\"] = \"hlsFragLoading\";\n  Events[\"FRAG_LOAD_EMERGENCY_ABORTED\"] = \"hlsFragLoadEmergencyAborted\";\n  Events[\"FRAG_LOADED\"] = \"hlsFragLoaded\";\n  Events[\"FRAG_DECRYPTED\"] = \"hlsFragDecrypted\";\n  Events[\"FRAG_PARSING_INIT_SEGMENT\"] = \"hlsFragParsingInitSegment\";\n  Events[\"FRAG_PARSING_USERDATA\"] = \"hlsFragParsingUserdata\";\n  Events[\"FRAG_PARSING_METADATA\"] = \"hlsFragParsingMetadata\";\n  Events[\"FRAG_PARSED\"] = \"hlsFragParsed\";\n  Events[\"FRAG_BUFFERED\"] = \"hlsFragBuffered\";\n  Events[\"FRAG_CHANGED\"] = \"hlsFragChanged\";\n  Events[\"FPS_DROP\"] = \"hlsFpsDrop\";\n  Events[\"FPS_DROP_LEVEL_CAPPING\"] = \"hlsFpsDropLevelCapping\";\n  Events[\"MAX_AUTO_LEVEL_UPDATED\"] = \"hlsMaxAutoLevelUpdated\";\n  Events[\"ERROR\"] = \"hlsError\";\n  Events[\"DESTROYING\"] = \"hlsDestroying\";\n  Events[\"KEY_LOADING\"] = \"hlsKeyLoading\";\n  Events[\"KEY_LOADED\"] = \"hlsKeyLoaded\";\n  Events[\"LIVE_BACK_BUFFER_REACHED\"] = \"hlsLiveBackBufferReached\";\n  Events[\"BACK_BUFFER_REACHED\"] = \"hlsBackBufferReached\";\n  Events[\"STEERING_MANIFEST_LOADED\"] = \"hlsSteeringManifestLoaded\";\n  return Events;\n}({});\n\n/**\n * Defines each Event type and payload by Event name. Used in {@link hls.js#HlsEventEmitter} to strongly type the event listener API.\n */\n\nlet ErrorTypes = /*#__PURE__*/function (ErrorTypes) {\n  ErrorTypes[\"NETWORK_ERROR\"] = \"networkError\";\n  ErrorTypes[\"MEDIA_ERROR\"] = \"mediaError\";\n  ErrorTypes[\"KEY_SYSTEM_ERROR\"] = \"keySystemError\";\n  ErrorTypes[\"MUX_ERROR\"] = \"muxError\";\n  ErrorTypes[\"OTHER_ERROR\"] = \"otherError\";\n  return ErrorTypes;\n}({});\nlet ErrorDetails = /*#__PURE__*/function (ErrorDetails) {\n  ErrorDetails[\"KEY_SYSTEM_NO_KEYS\"] = \"keySystemNoKeys\";\n  ErrorDetails[\"KEY_SYSTEM_NO_ACCESS\"] = \"keySystemNoAccess\";\n  ErrorDetails[\"KEY_SYSTEM_NO_SESSION\"] = \"keySystemNoSession\";\n  ErrorDetails[\"KEY_SYSTEM_NO_CONFIGURED_LICENSE\"] = \"keySystemNoConfiguredLicense\";\n  ErrorDetails[\"KEY_SYSTEM_LICENSE_REQUEST_FAILED\"] = \"keySystemLicenseRequestFailed\";\n  ErrorDetails[\"KEY_SYSTEM_SERVER_CERTIFICATE_REQUEST_FAILED\"] = \"keySystemServerCertificateRequestFailed\";\n  ErrorDetails[\"KEY_SYSTEM_SERVER_CERTIFICATE_UPDATE_FAILED\"] = \"keySystemServerCertificateUpdateFailed\";\n  ErrorDetails[\"KEY_SYSTEM_SESSION_UPDATE_FAILED\"] = \"keySystemSessionUpdateFailed\";\n  ErrorDetails[\"KEY_SYSTEM_STATUS_OUTPUT_RESTRICTED\"] = \"keySystemStatusOutputRestricted\";\n  ErrorDetails[\"KEY_SYSTEM_STATUS_INTERNAL_ERROR\"] = \"keySystemStatusInternalError\";\n  ErrorDetails[\"MANIFEST_LOAD_ERROR\"] = \"manifestLoadError\";\n  ErrorDetails[\"MANIFEST_LOAD_TIMEOUT\"] = \"manifestLoadTimeOut\";\n  ErrorDetails[\"MANIFEST_PARSING_ERROR\"] = \"manifestParsingError\";\n  ErrorDetails[\"MANIFEST_INCOMPATIBLE_CODECS_ERROR\"] = \"manifestIncompatibleCodecsError\";\n  ErrorDetails[\"LEVEL_EMPTY_ERROR\"] = \"levelEmptyError\";\n  ErrorDetails[\"LEVEL_LOAD_ERROR\"] = \"levelLoadError\";\n  ErrorDetails[\"LEVEL_LOAD_TIMEOUT\"] = \"levelLoadTimeOut\";\n  ErrorDetails[\"LEVEL_PARSING_ERROR\"] = \"levelParsingError\";\n  ErrorDetails[\"LEVEL_SWITCH_ERROR\"] = \"levelSwitchError\";\n  ErrorDetails[\"AUDIO_TRACK_LOAD_ERROR\"] = \"audioTrackLoadError\";\n  ErrorDetails[\"AUDIO_TRACK_LOAD_TIMEOUT\"] = \"audioTrackLoadTimeOut\";\n  ErrorDetails[\"SUBTITLE_LOAD_ERROR\"] = \"subtitleTrackLoadError\";\n  ErrorDetails[\"SUBTITLE_TRACK_LOAD_TIMEOUT\"] = \"subtitleTrackLoadTimeOut\";\n  ErrorDetails[\"FRAG_LOAD_ERROR\"] = \"fragLoadError\";\n  ErrorDetails[\"FRAG_LOAD_TIMEOUT\"] = \"fragLoadTimeOut\";\n  ErrorDetails[\"FRAG_DECRYPT_ERROR\"] = \"fragDecryptError\";\n  ErrorDetails[\"FRAG_PARSING_ERROR\"] = \"fragParsingError\";\n  ErrorDetails[\"FRAG_GAP\"] = \"fragGap\";\n  ErrorDetails[\"REMUX_ALLOC_ERROR\"] = \"remuxAllocError\";\n  ErrorDetails[\"KEY_LOAD_ERROR\"] = \"keyLoadError\";\n  ErrorDetails[\"KEY_LOAD_TIMEOUT\"] = \"keyLoadTimeOut\";\n  ErrorDetails[\"BUFFER_ADD_CODEC_ERROR\"] = \"bufferAddCodecError\";\n  ErrorDetails[\"BUFFER_INCOMPATIBLE_CODECS_ERROR\"] = \"bufferIncompatibleCodecsError\";\n  ErrorDetails[\"BUFFER_APPEND_ERROR\"] = \"bufferAppendError\";\n  ErrorDetails[\"BUFFER_APPENDING_ERROR\"] = \"bufferAppendingError\";\n  ErrorDetails[\"BUFFER_STALLED_ERROR\"] = \"bufferStalledError\";\n  ErrorDetails[\"BUFFER_FULL_ERROR\"] = \"bufferFullError\";\n  ErrorDetails[\"BUFFER_SEEK_OVER_HOLE\"] = \"bufferSeekOverHole\";\n  ErrorDetails[\"BUFFER_NUDGE_ON_STALL\"] = \"bufferNudgeOnStall\";\n  ErrorDetails[\"INTERNAL_EXCEPTION\"] = \"internalException\";\n  ErrorDetails[\"INTERNAL_ABORTED\"] = \"aborted\";\n  ErrorDetails[\"UNKNOWN\"] = \"unknown\";\n  return ErrorDetails;\n}({});\n\nconst noop = function noop() {};\nconst fakeLogger = {\n  trace: noop,\n  debug: noop,\n  log: noop,\n  warn: noop,\n  info: noop,\n  error: noop\n};\nlet exportedLogger = fakeLogger;\n\n// let lastCallTime;\n// function formatMsgWithTimeInfo(type, msg) {\n//   const now = Date.now();\n//   const diff = lastCallTime ? '+' + (now - lastCallTime) : '0';\n//   lastCallTime = now;\n//   msg = (new Date(now)).toISOString() + ' | [' +  type + '] > ' + msg + ' ( ' + diff + ' ms )';\n//   return msg;\n// }\n\nfunction consolePrintFn(type) {\n  const func = self.console[type];\n  if (func) {\n    return func.bind(self.console, `[${type}] >`);\n  }\n  return noop;\n}\nfunction exportLoggerFunctions(debugConfig, ...functions) {\n  functions.forEach(function (type) {\n    exportedLogger[type] = debugConfig[type] ? debugConfig[type].bind(debugConfig) : consolePrintFn(type);\n  });\n}\nfunction enableLogs(debugConfig, id) {\n  // check that console is available\n  if (typeof console === 'object' && debugConfig === true || typeof debugConfig === 'object') {\n    exportLoggerFunctions(debugConfig,\n    // Remove out from list here to hard-disable a log-level\n    // 'trace',\n    'debug', 'log', 'info', 'warn', 'error');\n    // Some browsers don't allow to use bind on console object anyway\n    // fallback to default if needed\n    try {\n      exportedLogger.log(`Debug logs enabled for \"${id}\" in hls.js version ${\"1.5.18\"}`);\n    } catch (e) {\n      exportedLogger = fakeLogger;\n    }\n  } else {\n    exportedLogger = fakeLogger;\n  }\n}\nconst logger = exportedLogger;\n\nconst DECIMAL_RESOLUTION_REGEX = /^(\\d+)x(\\d+)$/;\nconst ATTR_LIST_REGEX = /(.+?)=(\".*?\"|.*?)(?:,|$)/g;\n\n// adapted from https://github.com/kanongil/node-m3u8parse/blob/master/attrlist.js\nclass AttrList {\n  constructor(attrs) {\n    if (typeof attrs === 'string') {\n      attrs = AttrList.parseAttrList(attrs);\n    }\n    _extends(this, attrs);\n  }\n  get clientAttrs() {\n    return Object.keys(this).filter(attr => attr.substring(0, 2) === 'X-');\n  }\n  decimalInteger(attrName) {\n    const intValue = parseInt(this[attrName], 10);\n    if (intValue > Number.MAX_SAFE_INTEGER) {\n      return Infinity;\n    }\n    return intValue;\n  }\n  hexadecimalInteger(attrName) {\n    if (this[attrName]) {\n      let stringValue = (this[attrName] || '0x').slice(2);\n      stringValue = (stringValue.length & 1 ? '0' : '') + stringValue;\n      const value = new Uint8Array(stringValue.length / 2);\n      for (let i = 0; i < stringValue.length / 2; i++) {\n        value[i] = parseInt(stringValue.slice(i * 2, i * 2 + 2), 16);\n      }\n      return value;\n    } else {\n      return null;\n    }\n  }\n  hexadecimalIntegerAsNumber(attrName) {\n    const intValue = parseInt(this[attrName], 16);\n    if (intValue > Number.MAX_SAFE_INTEGER) {\n      return Infinity;\n    }\n    return intValue;\n  }\n  decimalFloatingPoint(attrName) {\n    return parseFloat(this[attrName]);\n  }\n  optionalFloat(attrName, defaultValue) {\n    const value = this[attrName];\n    return value ? parseFloat(value) : defaultValue;\n  }\n  enumeratedString(attrName) {\n    return this[attrName];\n  }\n  bool(attrName) {\n    return this[attrName] === 'YES';\n  }\n  decimalResolution(attrName) {\n    const res = DECIMAL_RESOLUTION_REGEX.exec(this[attrName]);\n    if (res === null) {\n      return undefined;\n    }\n    return {\n      width: parseInt(res[1], 10),\n      height: parseInt(res[2], 10)\n    };\n  }\n  static parseAttrList(input) {\n    let match;\n    const attrs = {};\n    const quote = '\"';\n    ATTR_LIST_REGEX.lastIndex = 0;\n    while ((match = ATTR_LIST_REGEX.exec(input)) !== null) {\n      let value = match[2];\n      if (value.indexOf(quote) === 0 && value.lastIndexOf(quote) === value.length - 1) {\n        value = value.slice(1, -1);\n      }\n      const name = match[1].trim();\n      attrs[name] = value;\n    }\n    return attrs;\n  }\n}\n\n// Avoid exporting const enum so that these values can be inlined\n\nfunction isDateRangeCueAttribute(attrName) {\n  return attrName !== \"ID\" && attrName !== \"CLASS\" && attrName !== \"START-DATE\" && attrName !== \"DURATION\" && attrName !== \"END-DATE\" && attrName !== \"END-ON-NEXT\";\n}\nfunction isSCTE35Attribute(attrName) {\n  return attrName === \"SCTE35-OUT\" || attrName === \"SCTE35-IN\";\n}\nclass DateRange {\n  constructor(dateRangeAttr, dateRangeWithSameId) {\n    this.attr = void 0;\n    this._startDate = void 0;\n    this._endDate = void 0;\n    this._badValueForSameId = void 0;\n    if (dateRangeWithSameId) {\n      const previousAttr = dateRangeWithSameId.attr;\n      for (const key in previousAttr) {\n        if (Object.prototype.hasOwnProperty.call(dateRangeAttr, key) && dateRangeAttr[key] !== previousAttr[key]) {\n          logger.warn(`DATERANGE tag attribute: \"${key}\" does not match for tags with ID: \"${dateRangeAttr.ID}\"`);\n          this._badValueForSameId = key;\n          break;\n        }\n      }\n      // Merge DateRange tags with the same ID\n      dateRangeAttr = _extends(new AttrList({}), previousAttr, dateRangeAttr);\n    }\n    this.attr = dateRangeAttr;\n    this._startDate = new Date(dateRangeAttr[\"START-DATE\"]);\n    if (\"END-DATE\" in this.attr) {\n      const endDate = new Date(this.attr[\"END-DATE\"]);\n      if (isFiniteNumber(endDate.getTime())) {\n        this._endDate = endDate;\n      }\n    }\n  }\n  get id() {\n    return this.attr.ID;\n  }\n  get class() {\n    return this.attr.CLASS;\n  }\n  get startDate() {\n    return this._startDate;\n  }\n  get endDate() {\n    if (this._endDate) {\n      return this._endDate;\n    }\n    const duration = this.duration;\n    if (duration !== null) {\n      return new Date(this._startDate.getTime() + duration * 1000);\n    }\n    return null;\n  }\n  get duration() {\n    if (\"DURATION\" in this.attr) {\n      const duration = this.attr.decimalFloatingPoint(\"DURATION\");\n      if (isFiniteNumber(duration)) {\n        return duration;\n      }\n    } else if (this._endDate) {\n      return (this._endDate.getTime() - this._startDate.getTime()) / 1000;\n    }\n    return null;\n  }\n  get plannedDuration() {\n    if (\"PLANNED-DURATION\" in this.attr) {\n      return this.attr.decimalFloatingPoint(\"PLANNED-DURATION\");\n    }\n    return null;\n  }\n  get endOnNext() {\n    return this.attr.bool(\"END-ON-NEXT\");\n  }\n  get isValid() {\n    return !!this.id && !this._badValueForSameId && isFiniteNumber(this.startDate.getTime()) && (this.duration === null || this.duration >= 0) && (!this.endOnNext || !!this.class);\n  }\n}\n\nclass LoadStats {\n  constructor() {\n    this.aborted = false;\n    this.loaded = 0;\n    this.retry = 0;\n    this.total = 0;\n    this.chunkCount = 0;\n    this.bwEstimate = 0;\n    this.loading = {\n      start: 0,\n      first: 0,\n      end: 0\n    };\n    this.parsing = {\n      start: 0,\n      end: 0\n    };\n    this.buffering = {\n      start: 0,\n      first: 0,\n      end: 0\n    };\n  }\n}\n\nvar ElementaryStreamTypes = {\n  AUDIO: \"audio\",\n  VIDEO: \"video\",\n  AUDIOVIDEO: \"audiovideo\"\n};\nclass BaseSegment {\n  constructor(baseurl) {\n    this._byteRange = null;\n    this._url = null;\n    // baseurl is the URL to the playlist\n    this.baseurl = void 0;\n    // relurl is the portion of the URL that comes from inside the playlist.\n    this.relurl = void 0;\n    // Holds the types of data this fragment supports\n    this.elementaryStreams = {\n      [ElementaryStreamTypes.AUDIO]: null,\n      [ElementaryStreamTypes.VIDEO]: null,\n      [ElementaryStreamTypes.AUDIOVIDEO]: null\n    };\n    this.baseurl = baseurl;\n  }\n\n  // setByteRange converts a EXT-X-BYTERANGE attribute into a two element array\n  setByteRange(value, previous) {\n    const params = value.split('@', 2);\n    let start;\n    if (params.length === 1) {\n      start = (previous == null ? void 0 : previous.byteRangeEndOffset) || 0;\n    } else {\n      start = parseInt(params[1]);\n    }\n    this._byteRange = [start, parseInt(params[0]) + start];\n  }\n  get byteRange() {\n    if (!this._byteRange) {\n      return [];\n    }\n    return this._byteRange;\n  }\n  get byteRangeStartOffset() {\n    return this.byteRange[0];\n  }\n  get byteRangeEndOffset() {\n    return this.byteRange[1];\n  }\n  get url() {\n    if (!this._url && this.baseurl && this.relurl) {\n      this._url = urlToolkitExports.buildAbsoluteURL(this.baseurl, this.relurl, {\n        alwaysNormalize: true\n      });\n    }\n    return this._url || '';\n  }\n  set url(value) {\n    this._url = value;\n  }\n}\n\n/**\n * Object representing parsed data from an HLS Segment. Found in {@link hls.js#LevelDetails.fragments}.\n */\nclass Fragment extends BaseSegment {\n  constructor(type, baseurl) {\n    super(baseurl);\n    this._decryptdata = null;\n    this.rawProgramDateTime = null;\n    this.programDateTime = null;\n    this.tagList = [];\n    // EXTINF has to be present for a m3u8 to be considered valid\n    this.duration = 0;\n    // sn notates the sequence number for a segment, and if set to a string can be 'initSegment'\n    this.sn = 0;\n    // levelkeys are the EXT-X-KEY tags that apply to this segment for decryption\n    // core difference from the private field _decryptdata is the lack of the initialized IV\n    // _decryptdata will set the IV for this segment based on the segment number in the fragment\n    this.levelkeys = void 0;\n    // A string representing the fragment type\n    this.type = void 0;\n    // A reference to the loader. Set while the fragment is loading, and removed afterwards. Used to abort fragment loading\n    this.loader = null;\n    // A reference to the key loader. Set while the key is loading, and removed afterwards. Used to abort key loading\n    this.keyLoader = null;\n    // The level/track index to which the fragment belongs\n    this.level = -1;\n    // The continuity counter of the fragment\n    this.cc = 0;\n    // The starting Presentation Time Stamp (PTS) of the fragment. Set after transmux complete.\n    this.startPTS = void 0;\n    // The ending Presentation Time Stamp (PTS) of the fragment. Set after transmux complete.\n    this.endPTS = void 0;\n    // The starting Decode Time Stamp (DTS) of the fragment. Set after transmux complete.\n    this.startDTS = void 0;\n    // The ending Decode Time Stamp (DTS) of the fragment. Set after transmux complete.\n    this.endDTS = void 0;\n    // The start time of the fragment, as listed in the manifest. Updated after transmux complete.\n    this.start = 0;\n    // Set by `updateFragPTSDTS` in level-helper\n    this.deltaPTS = void 0;\n    // The maximum starting Presentation Time Stamp (audio/video PTS) of the fragment. Set after transmux complete.\n    this.maxStartPTS = void 0;\n    // The minimum ending Presentation Time Stamp (audio/video PTS) of the fragment. Set after transmux complete.\n    this.minEndPTS = void 0;\n    // Load/parse timing information\n    this.stats = new LoadStats();\n    // Init Segment bytes (unset for media segments)\n    this.data = void 0;\n    // A flag indicating whether the segment was downloaded in order to test bitrate, and was not buffered\n    this.bitrateTest = false;\n    // #EXTINF  segment title\n    this.title = null;\n    // The Media Initialization Section for this segment\n    this.initSegment = null;\n    // Fragment is the last fragment in the media playlist\n    this.endList = void 0;\n    // Fragment is marked by an EXT-X-GAP tag indicating that it does not contain media data and should not be loaded\n    this.gap = void 0;\n    // Deprecated\n    this.urlId = 0;\n    this.type = type;\n  }\n  get decryptdata() {\n    const {\n      levelkeys\n    } = this;\n    if (!levelkeys && !this._decryptdata) {\n      return null;\n    }\n    if (!this._decryptdata && this.levelkeys && !this.levelkeys.NONE) {\n      const key = this.levelkeys.identity;\n      if (key) {\n        this._decryptdata = key.getDecryptData(this.sn);\n      } else {\n        const keyFormats = Object.keys(this.levelkeys);\n        if (keyFormats.length === 1) {\n          return this._decryptdata = this.levelkeys[keyFormats[0]].getDecryptData(this.sn);\n        }\n      }\n    }\n    return this._decryptdata;\n  }\n  get end() {\n    return this.start + this.duration;\n  }\n  get endProgramDateTime() {\n    if (this.programDateTime === null) {\n      return null;\n    }\n    if (!isFiniteNumber(this.programDateTime)) {\n      return null;\n    }\n    const duration = !isFiniteNumber(this.duration) ? 0 : this.duration;\n    return this.programDateTime + duration * 1000;\n  }\n  get encrypted() {\n    var _this$_decryptdata;\n    // At the m3u8-parser level we need to add support for manifest signalled keyformats\n    // when we want the fragment to start reporting that it is encrypted.\n    // Currently, keyFormat will only be set for identity keys\n    if ((_this$_decryptdata = this._decryptdata) != null && _this$_decryptdata.encrypted) {\n      return true;\n    } else if (this.levelkeys) {\n      const keyFormats = Object.keys(this.levelkeys);\n      const len = keyFormats.length;\n      if (len > 1 || len === 1 && this.levelkeys[keyFormats[0]].encrypted) {\n        return true;\n      }\n    }\n    return false;\n  }\n  setKeyFormat(keyFormat) {\n    if (this.levelkeys) {\n      const key = this.levelkeys[keyFormat];\n      if (key && !this._decryptdata) {\n        this._decryptdata = key.getDecryptData(this.sn);\n      }\n    }\n  }\n  abortRequests() {\n    var _this$loader, _this$keyLoader;\n    (_this$loader = this.loader) == null ? void 0 : _this$loader.abort();\n    (_this$keyLoader = this.keyLoader) == null ? void 0 : _this$keyLoader.abort();\n  }\n  setElementaryStreamInfo(type, startPTS, endPTS, startDTS, endDTS, partial = false) {\n    const {\n      elementaryStreams\n    } = this;\n    const info = elementaryStreams[type];\n    if (!info) {\n      elementaryStreams[type] = {\n        startPTS,\n        endPTS,\n        startDTS,\n        endDTS,\n        partial\n      };\n      return;\n    }\n    info.startPTS = Math.min(info.startPTS, startPTS);\n    info.endPTS = Math.max(info.endPTS, endPTS);\n    info.startDTS = Math.min(info.startDTS, startDTS);\n    info.endDTS = Math.max(info.endDTS, endDTS);\n  }\n  clearElementaryStreamInfo() {\n    const {\n      elementaryStreams\n    } = this;\n    elementaryStreams[ElementaryStreamTypes.AUDIO] = null;\n    elementaryStreams[ElementaryStreamTypes.VIDEO] = null;\n    elementaryStreams[ElementaryStreamTypes.AUDIOVIDEO] = null;\n  }\n}\n\n/**\n * Object representing parsed data from an HLS Partial Segment. Found in {@link hls.js#LevelDetails.partList}.\n */\nclass Part extends BaseSegment {\n  constructor(partAttrs, frag, baseurl, index, previous) {\n    super(baseurl);\n    this.fragOffset = 0;\n    this.duration = 0;\n    this.gap = false;\n    this.independent = false;\n    this.relurl = void 0;\n    this.fragment = void 0;\n    this.index = void 0;\n    this.stats = new LoadStats();\n    this.duration = partAttrs.decimalFloatingPoint('DURATION');\n    this.gap = partAttrs.bool('GAP');\n    this.independent = partAttrs.bool('INDEPENDENT');\n    this.relurl = partAttrs.enumeratedString('URI');\n    this.fragment = frag;\n    this.index = index;\n    const byteRange = partAttrs.enumeratedString('BYTERANGE');\n    if (byteRange) {\n      this.setByteRange(byteRange, previous);\n    }\n    if (previous) {\n      this.fragOffset = previous.fragOffset + previous.duration;\n    }\n  }\n  get start() {\n    return this.fragment.start + this.fragOffset;\n  }\n  get end() {\n    return this.start + this.duration;\n  }\n  get loaded() {\n    const {\n      elementaryStreams\n    } = this;\n    return !!(elementaryStreams.audio || elementaryStreams.video || elementaryStreams.audiovideo);\n  }\n}\n\nconst DEFAULT_TARGET_DURATION = 10;\n\n/**\n * Object representing parsed data from an HLS Media Playlist. Found in {@link hls.js#Level.details}.\n */\nclass LevelDetails {\n  constructor(baseUrl) {\n    this.PTSKnown = false;\n    this.alignedSliding = false;\n    this.averagetargetduration = void 0;\n    this.endCC = 0;\n    this.endSN = 0;\n    this.fragments = void 0;\n    this.fragmentHint = void 0;\n    this.partList = null;\n    this.dateRanges = void 0;\n    this.live = true;\n    this.ageHeader = 0;\n    this.advancedDateTime = void 0;\n    this.updated = true;\n    this.advanced = true;\n    this.availabilityDelay = void 0;\n    // Manifest reload synchronization\n    this.misses = 0;\n    this.startCC = 0;\n    this.startSN = 0;\n    this.startTimeOffset = null;\n    this.targetduration = 0;\n    this.totalduration = 0;\n    this.type = null;\n    this.url = void 0;\n    this.m3u8 = '';\n    this.version = null;\n    this.canBlockReload = false;\n    this.canSkipUntil = 0;\n    this.canSkipDateRanges = false;\n    this.skippedSegments = 0;\n    this.recentlyRemovedDateranges = void 0;\n    this.partHoldBack = 0;\n    this.holdBack = 0;\n    this.partTarget = 0;\n    this.preloadHint = void 0;\n    this.renditionReports = void 0;\n    this.tuneInGoal = 0;\n    this.deltaUpdateFailed = void 0;\n    this.driftStartTime = 0;\n    this.driftEndTime = 0;\n    this.driftStart = 0;\n    this.driftEnd = 0;\n    this.encryptedFragments = void 0;\n    this.playlistParsingError = null;\n    this.variableList = null;\n    this.hasVariableRefs = false;\n    this.fragments = [];\n    this.encryptedFragments = [];\n    this.dateRanges = {};\n    this.url = baseUrl;\n  }\n  reloaded(previous) {\n    if (!previous) {\n      this.advanced = true;\n      this.updated = true;\n      return;\n    }\n    const partSnDiff = this.lastPartSn - previous.lastPartSn;\n    const partIndexDiff = this.lastPartIndex - previous.lastPartIndex;\n    this.updated = this.endSN !== previous.endSN || !!partIndexDiff || !!partSnDiff || !this.live;\n    this.advanced = this.endSN > previous.endSN || partSnDiff > 0 || partSnDiff === 0 && partIndexDiff > 0;\n    if (this.updated || this.advanced) {\n      this.misses = Math.floor(previous.misses * 0.6);\n    } else {\n      this.misses = previous.misses + 1;\n    }\n    this.availabilityDelay = previous.availabilityDelay;\n  }\n  get hasProgramDateTime() {\n    if (this.fragments.length) {\n      return isFiniteNumber(this.fragments[this.fragments.length - 1].programDateTime);\n    }\n    return false;\n  }\n  get levelTargetDuration() {\n    return this.averagetargetduration || this.targetduration || DEFAULT_TARGET_DURATION;\n  }\n  get drift() {\n    const runTime = this.driftEndTime - this.driftStartTime;\n    if (runTime > 0) {\n      const runDuration = this.driftEnd - this.driftStart;\n      return runDuration * 1000 / runTime;\n    }\n    return 1;\n  }\n  get edge() {\n    return this.partEnd || this.fragmentEnd;\n  }\n  get partEnd() {\n    var _this$partList;\n    if ((_this$partList = this.partList) != null && _this$partList.length) {\n      return this.partList[this.partList.length - 1].end;\n    }\n    return this.fragmentEnd;\n  }\n  get fragmentEnd() {\n    var _this$fragments;\n    if ((_this$fragments = this.fragments) != null && _this$fragments.length) {\n      return this.fragments[this.fragments.length - 1].end;\n    }\n    return 0;\n  }\n  get age() {\n    if (this.advancedDateTime) {\n      return Math.max(Date.now() - this.advancedDateTime, 0) / 1000;\n    }\n    return 0;\n  }\n  get lastPartIndex() {\n    var _this$partList2;\n    if ((_this$partList2 = this.partList) != null && _this$partList2.length) {\n      return this.partList[this.partList.length - 1].index;\n    }\n    return -1;\n  }\n  get lastPartSn() {\n    var _this$partList3;\n    if ((_this$partList3 = this.partList) != null && _this$partList3.length) {\n      return this.partList[this.partList.length - 1].fragment.sn;\n    }\n    return this.endSN;\n  }\n}\n\nfunction base64Decode(base64encodedStr) {\n  return Uint8Array.from(atob(base64encodedStr), c => c.charCodeAt(0));\n}\n\nfunction getKeyIdBytes(str) {\n  const keyIdbytes = strToUtf8array(str).subarray(0, 16);\n  const paddedkeyIdbytes = new Uint8Array(16);\n  paddedkeyIdbytes.set(keyIdbytes, 16 - keyIdbytes.length);\n  return paddedkeyIdbytes;\n}\nfunction changeEndianness(keyId) {\n  const swap = function swap(array, from, to) {\n    const cur = array[from];\n    array[from] = array[to];\n    array[to] = cur;\n  };\n  swap(keyId, 0, 3);\n  swap(keyId, 1, 2);\n  swap(keyId, 4, 5);\n  swap(keyId, 6, 7);\n}\nfunction convertDataUriToArrayBytes(uri) {\n  // data:[<media type][;attribute=value][;base64],<data>\n  const colonsplit = uri.split(':');\n  let keydata = null;\n  if (colonsplit[0] === 'data' && colonsplit.length === 2) {\n    const semicolonsplit = colonsplit[1].split(';');\n    const commasplit = semicolonsplit[semicolonsplit.length - 1].split(',');\n    if (commasplit.length === 2) {\n      const isbase64 = commasplit[0] === 'base64';\n      const data = commasplit[1];\n      if (isbase64) {\n        semicolonsplit.splice(-1, 1); // remove from processing\n        keydata = base64Decode(data);\n      } else {\n        keydata = getKeyIdBytes(data);\n      }\n    }\n  }\n  return keydata;\n}\nfunction strToUtf8array(str) {\n  return Uint8Array.from(unescape(encodeURIComponent(str)), c => c.charCodeAt(0));\n}\n\n/** returns `undefined` is `self` is missing, e.g. in node */\nconst optionalSelf = typeof self !== 'undefined' ? self : undefined;\n\n/**\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Navigator/requestMediaKeySystemAccess\n */\nvar KeySystems = {\n  CLEARKEY: \"org.w3.clearkey\",\n  FAIRPLAY: \"com.apple.fps\",\n  PLAYREADY: \"com.microsoft.playready\",\n  WIDEVINE: \"com.widevine.alpha\"\n};\n\n// Playlist #EXT-X-KEY KEYFORMAT values\nvar KeySystemFormats = {\n  CLEARKEY: \"org.w3.clearkey\",\n  FAIRPLAY: \"com.apple.streamingkeydelivery\",\n  PLAYREADY: \"com.microsoft.playready\",\n  WIDEVINE: \"urn:uuid:edef8ba9-79d6-4ace-a3c8-27dcd51d21ed\"\n};\nfunction keySystemFormatToKeySystemDomain(format) {\n  switch (format) {\n    case KeySystemFormats.FAIRPLAY:\n      return KeySystems.FAIRPLAY;\n    case KeySystemFormats.PLAYREADY:\n      return KeySystems.PLAYREADY;\n    case KeySystemFormats.WIDEVINE:\n      return KeySystems.WIDEVINE;\n    case KeySystemFormats.CLEARKEY:\n      return KeySystems.CLEARKEY;\n  }\n}\n\n// System IDs for which we can extract a key ID from \"encrypted\" event PSSH\nvar KeySystemIds = {\n  CENC: \"1077efecc0b24d02ace33c1e52e2fb4b\",\n  CLEARKEY: \"e2719d58a985b3c9781ab030af78d30e\",\n  FAIRPLAY: \"94ce86fb07ff4f43adb893d2fa968ca2\",\n  PLAYREADY: \"9a04f07998404286ab92e65be0885f95\",\n  WIDEVINE: \"edef8ba979d64acea3c827dcd51d21ed\"\n};\nfunction keySystemIdToKeySystemDomain(systemId) {\n  if (systemId === KeySystemIds.WIDEVINE) {\n    return KeySystems.WIDEVINE;\n  } else if (systemId === KeySystemIds.PLAYREADY) {\n    return KeySystems.PLAYREADY;\n  } else if (systemId === KeySystemIds.CENC || systemId === KeySystemIds.CLEARKEY) {\n    return KeySystems.CLEARKEY;\n  }\n}\nfunction keySystemDomainToKeySystemFormat(keySystem) {\n  switch (keySystem) {\n    case KeySystems.FAIRPLAY:\n      return KeySystemFormats.FAIRPLAY;\n    case KeySystems.PLAYREADY:\n      return KeySystemFormats.PLAYREADY;\n    case KeySystems.WIDEVINE:\n      return KeySystemFormats.WIDEVINE;\n    case KeySystems.CLEARKEY:\n      return KeySystemFormats.CLEARKEY;\n  }\n}\nfunction getKeySystemsForConfig(config) {\n  const {\n    drmSystems,\n    widevineLicenseUrl\n  } = config;\n  const keySystemsToAttempt = drmSystems ? [KeySystems.FAIRPLAY, KeySystems.WIDEVINE, KeySystems.PLAYREADY, KeySystems.CLEARKEY].filter(keySystem => !!drmSystems[keySystem]) : [];\n  if (!keySystemsToAttempt[KeySystems.WIDEVINE] && widevineLicenseUrl) {\n    keySystemsToAttempt.push(KeySystems.WIDEVINE);\n  }\n  return keySystemsToAttempt;\n}\nconst requestMediaKeySystemAccess = function (_optionalSelf$navigat) {\n  if (optionalSelf != null && (_optionalSelf$navigat = optionalSelf.navigator) != null && _optionalSelf$navigat.requestMediaKeySystemAccess) {\n    return self.navigator.requestMediaKeySystemAccess.bind(self.navigator);\n  } else {\n    return null;\n  }\n}();\n\n/**\n * @see https://developer.mozilla.org/en-US/docs/Web/API/MediaKeySystemConfiguration\n */\nfunction getSupportedMediaKeySystemConfigurations(keySystem, audioCodecs, videoCodecs, drmSystemOptions) {\n  let initDataTypes;\n  switch (keySystem) {\n    case KeySystems.FAIRPLAY:\n      initDataTypes = ['cenc', 'sinf'];\n      break;\n    case KeySystems.WIDEVINE:\n    case KeySystems.PLAYREADY:\n      initDataTypes = ['cenc'];\n      break;\n    case KeySystems.CLEARKEY:\n      initDataTypes = ['cenc', 'keyids'];\n      break;\n    default:\n      throw new Error(`Unknown key-system: ${keySystem}`);\n  }\n  return createMediaKeySystemConfigurations(initDataTypes, audioCodecs, videoCodecs, drmSystemOptions);\n}\nfunction createMediaKeySystemConfigurations(initDataTypes, audioCodecs, videoCodecs, drmSystemOptions) {\n  const baseConfig = {\n    initDataTypes: initDataTypes,\n    persistentState: drmSystemOptions.persistentState || 'optional',\n    distinctiveIdentifier: drmSystemOptions.distinctiveIdentifier || 'optional',\n    sessionTypes: drmSystemOptions.sessionTypes || [drmSystemOptions.sessionType || 'temporary'],\n    audioCapabilities: audioCodecs.map(codec => ({\n      contentType: `audio/mp4; codecs=\"${codec}\"`,\n      robustness: drmSystemOptions.audioRobustness || '',\n      encryptionScheme: drmSystemOptions.audioEncryptionScheme || null\n    })),\n    videoCapabilities: videoCodecs.map(codec => ({\n      contentType: `video/mp4; codecs=\"${codec}\"`,\n      robustness: drmSystemOptions.videoRobustness || '',\n      encryptionScheme: drmSystemOptions.videoEncryptionScheme || null\n    }))\n  };\n  return [baseConfig];\n}\n\nfunction sliceUint8(array, start, end) {\n  // @ts-expect-error This polyfills IE11 usage of Uint8Array slice.\n  // It always exists in the TypeScript definition so fails, but it fails at runtime on IE11.\n  return Uint8Array.prototype.slice ? array.slice(start, end) : new Uint8Array(Array.prototype.slice.call(array, start, end));\n}\n\n// breaking up those two types in order to clarify what is happening in the decoding path.\n\n/**\n * Returns true if an ID3 header can be found at offset in data\n * @param data - The data to search\n * @param offset - The offset at which to start searching\n */\nconst isHeader$2 = (data, offset) => {\n  /*\n   * http://id3.org/id3v2.3.0\n   * [0]     = 'I'\n   * [1]     = 'D'\n   * [2]     = '3'\n   * [3,4]   = {Version}\n   * [5]     = {Flags}\n   * [6-9]   = {ID3 Size}\n   *\n   * An ID3v2 tag can be detected with the following pattern:\n   *  $49 44 33 yy yy xx zz zz zz zz\n   * Where yy is less than $FF, xx is the 'flags' byte and zz is less than $80\n   */\n  if (offset + 10 <= data.length) {\n    // look for 'ID3' identifier\n    if (data[offset] === 0x49 && data[offset + 1] === 0x44 && data[offset + 2] === 0x33) {\n      // check version is within range\n      if (data[offset + 3] < 0xff && data[offset + 4] < 0xff) {\n        // check size is within range\n        if (data[offset + 6] < 0x80 && data[offset + 7] < 0x80 && data[offset + 8] < 0x80 && data[offset + 9] < 0x80) {\n          return true;\n        }\n      }\n    }\n  }\n  return false;\n};\n\n/**\n * Returns true if an ID3 footer can be found at offset in data\n * @param data - The data to search\n * @param offset - The offset at which to start searching\n */\nconst isFooter = (data, offset) => {\n  /*\n   * The footer is a copy of the header, but with a different identifier\n   */\n  if (offset + 10 <= data.length) {\n    // look for '3DI' identifier\n    if (data[offset] === 0x33 && data[offset + 1] === 0x44 && data[offset + 2] === 0x49) {\n      // check version is within range\n      if (data[offset + 3] < 0xff && data[offset + 4] < 0xff) {\n        // check size is within range\n        if (data[offset + 6] < 0x80 && data[offset + 7] < 0x80 && data[offset + 8] < 0x80 && data[offset + 9] < 0x80) {\n          return true;\n        }\n      }\n    }\n  }\n  return false;\n};\n\n/**\n * Returns any adjacent ID3 tags found in data starting at offset, as one block of data\n * @param data - The data to search in\n * @param offset - The offset at which to start searching\n * @returns the block of data containing any ID3 tags found\n * or *undefined* if no header is found at the starting offset\n */\nconst getID3Data = (data, offset) => {\n  const front = offset;\n  let length = 0;\n  while (isHeader$2(data, offset)) {\n    // ID3 header is 10 bytes\n    length += 10;\n    const size = readSize(data, offset + 6);\n    length += size;\n    if (isFooter(data, offset + 10)) {\n      // ID3 footer is 10 bytes\n      length += 10;\n    }\n    offset += length;\n  }\n  if (length > 0) {\n    return data.subarray(front, front + length);\n  }\n  return undefined;\n};\nconst readSize = (data, offset) => {\n  let size = 0;\n  size = (data[offset] & 0x7f) << 21;\n  size |= (data[offset + 1] & 0x7f) << 14;\n  size |= (data[offset + 2] & 0x7f) << 7;\n  size |= data[offset + 3] & 0x7f;\n  return size;\n};\nconst canParse$2 = (data, offset) => {\n  return isHeader$2(data, offset) && readSize(data, offset + 6) + 10 <= data.length - offset;\n};\n\n/**\n * Searches for the Elementary Stream timestamp found in the ID3 data chunk\n * @param data - Block of data containing one or more ID3 tags\n */\nconst getTimeStamp = data => {\n  const frames = getID3Frames(data);\n  for (let i = 0; i < frames.length; i++) {\n    const frame = frames[i];\n    if (isTimeStampFrame(frame)) {\n      return readTimeStamp(frame);\n    }\n  }\n  return undefined;\n};\n\n/**\n * Returns true if the ID3 frame is an Elementary Stream timestamp frame\n */\nconst isTimeStampFrame = frame => {\n  return frame && frame.key === 'PRIV' && frame.info === 'com.apple.streaming.transportStreamTimestamp';\n};\nconst getFrameData = data => {\n  /*\n  Frame ID       $xx xx xx xx (four characters)\n  Size           $xx xx xx xx\n  Flags          $xx xx\n  */\n  const type = String.fromCharCode(data[0], data[1], data[2], data[3]);\n  const size = readSize(data, 4);\n\n  // skip frame id, size, and flags\n  const offset = 10;\n  return {\n    type,\n    size,\n    data: data.subarray(offset, offset + size)\n  };\n};\n\n/**\n * Returns an array of ID3 frames found in all the ID3 tags in the id3Data\n * @param id3Data - The ID3 data containing one or more ID3 tags\n */\nconst getID3Frames = id3Data => {\n  let offset = 0;\n  const frames = [];\n  while (isHeader$2(id3Data, offset)) {\n    const size = readSize(id3Data, offset + 6);\n    // skip past ID3 header\n    offset += 10;\n    const end = offset + size;\n    // loop through frames in the ID3 tag\n    while (offset + 8 < end) {\n      const frameData = getFrameData(id3Data.subarray(offset));\n      const frame = decodeFrame(frameData);\n      if (frame) {\n        frames.push(frame);\n      }\n\n      // skip frame header and frame data\n      offset += frameData.size + 10;\n    }\n    if (isFooter(id3Data, offset)) {\n      offset += 10;\n    }\n  }\n  return frames;\n};\nconst decodeFrame = frame => {\n  if (frame.type === 'PRIV') {\n    return decodePrivFrame(frame);\n  } else if (frame.type[0] === 'W') {\n    return decodeURLFrame(frame);\n  }\n  return decodeTextFrame(frame);\n};\nconst decodePrivFrame = frame => {\n  /*\n  Format: <text string>\\0<binary data>\n  */\n  if (frame.size < 2) {\n    return undefined;\n  }\n  const owner = utf8ArrayToStr(frame.data, true);\n  const privateData = new Uint8Array(frame.data.subarray(owner.length + 1));\n  return {\n    key: frame.type,\n    info: owner,\n    data: privateData.buffer\n  };\n};\nconst decodeTextFrame = frame => {\n  if (frame.size < 2) {\n    return undefined;\n  }\n  if (frame.type === 'TXXX') {\n    /*\n    Format:\n    [0]   = {Text Encoding}\n    [1-?] = {Description}\\0{Value}\n    */\n    let index = 1;\n    const description = utf8ArrayToStr(frame.data.subarray(index), true);\n    index += description.length + 1;\n    const value = utf8ArrayToStr(frame.data.subarray(index));\n    return {\n      key: frame.type,\n      info: description,\n      data: value\n    };\n  }\n  /*\n  Format:\n  [0]   = {Text Encoding}\n  [1-?] = {Value}\n  */\n  const text = utf8ArrayToStr(frame.data.subarray(1));\n  return {\n    key: frame.type,\n    data: text\n  };\n};\nconst decodeURLFrame = frame => {\n  if (frame.type === 'WXXX') {\n    /*\n    Format:\n    [0]   = {Text Encoding}\n    [1-?] = {Description}\\0{URL}\n    */\n    if (frame.size < 2) {\n      return undefined;\n    }\n    let index = 1;\n    const description = utf8ArrayToStr(frame.data.subarray(index), true);\n    index += description.length + 1;\n    const value = utf8ArrayToStr(frame.data.subarray(index));\n    return {\n      key: frame.type,\n      info: description,\n      data: value\n    };\n  }\n  /*\n  Format:\n  [0-?] = {URL}\n  */\n  const url = utf8ArrayToStr(frame.data);\n  return {\n    key: frame.type,\n    data: url\n  };\n};\nconst readTimeStamp = timeStampFrame => {\n  if (timeStampFrame.data.byteLength === 8) {\n    const data = new Uint8Array(timeStampFrame.data);\n    // timestamp is 33 bit expressed as a big-endian eight-octet number,\n    // with the upper 31 bits set to zero.\n    const pts33Bit = data[3] & 0x1;\n    let timestamp = (data[4] << 23) + (data[5] << 15) + (data[6] << 7) + data[7];\n    timestamp /= 45;\n    if (pts33Bit) {\n      timestamp += 47721858.84;\n    } // 2^32 / 90\n\n    return Math.round(timestamp);\n  }\n  return undefined;\n};\n\n// http://stackoverflow.com/questions/8936984/uint8array-to-string-in-javascript/22373197\n// http://www.onicos.com/staff/iz/amuse/javascript/expert/utf.txt\n/* utf.js - UTF-8 <=> UTF-16 convertion\n *\n * Copyright (C) 1999 Masanao Izumo <iz@onicos.co.jp>\n * Version: 1.0\n * LastModified: Dec 25 1999\n * This library is free.  You can redistribute it and/or modify it.\n */\nconst utf8ArrayToStr = (array, exitOnNull = false) => {\n  const decoder = getTextDecoder();\n  if (decoder) {\n    const decoded = decoder.decode(array);\n    if (exitOnNull) {\n      // grab up to the first null\n      const idx = decoded.indexOf('\\0');\n      return idx !== -1 ? decoded.substring(0, idx) : decoded;\n    }\n\n    // remove any null characters\n    return decoded.replace(/\\0/g, '');\n  }\n  const len = array.length;\n  let c;\n  let char2;\n  let char3;\n  let out = '';\n  let i = 0;\n  while (i < len) {\n    c = array[i++];\n    if (c === 0x00 && exitOnNull) {\n      return out;\n    } else if (c === 0x00 || c === 0x03) {\n      // If the character is 3 (END_OF_TEXT) or 0 (NULL) then skip it\n      continue;\n    }\n    switch (c >> 4) {\n      case 0:\n      case 1:\n      case 2:\n      case 3:\n      case 4:\n      case 5:\n      case 6:\n      case 7:\n        // 0xxxxxxx\n        out += String.fromCharCode(c);\n        break;\n      case 12:\n      case 13:\n        // 110x xxxx   10xx xxxx\n        char2 = array[i++];\n        out += String.fromCharCode((c & 0x1f) << 6 | char2 & 0x3f);\n        break;\n      case 14:\n        // 1110 xxxx  10xx xxxx  10xx xxxx\n        char2 = array[i++];\n        char3 = array[i++];\n        out += String.fromCharCode((c & 0x0f) << 12 | (char2 & 0x3f) << 6 | (char3 & 0x3f) << 0);\n        break;\n    }\n  }\n  return out;\n};\nlet decoder;\nfunction getTextDecoder() {\n  // On Play Station 4, TextDecoder is defined but partially implemented.\n  // Manual decoding option is preferable\n  if (navigator.userAgent.includes('PlayStation 4')) {\n    return;\n  }\n  if (!decoder && typeof self.TextDecoder !== 'undefined') {\n    decoder = new self.TextDecoder('utf-8');\n  }\n  return decoder;\n}\n\n/**\n *  hex dump helper class\n */\n\nconst Hex = {\n  hexDump: function (array) {\n    let str = '';\n    for (let i = 0; i < array.length; i++) {\n      let h = array[i].toString(16);\n      if (h.length < 2) {\n        h = '0' + h;\n      }\n      str += h;\n    }\n    return str;\n  }\n};\n\nconst UINT32_MAX$1 = Math.pow(2, 32) - 1;\nconst push = [].push;\n\n// We are using fixed track IDs for driving the MP4 remuxer\n// instead of following the TS PIDs.\n// There is no reason not to do this and some browsers/SourceBuffer-demuxers\n// may not like if there are TrackID \"switches\"\n// See https://github.com/video-dev/hls.js/issues/1331\n// Here we are mapping our internal track types to constant MP4 track IDs\n// With MSE currently one can only have one track of each, and we are muxing\n// whatever video/audio rendition in them.\nconst RemuxerTrackIdConfig = {\n  video: 1,\n  audio: 2,\n  id3: 3,\n  text: 4\n};\nfunction bin2str(data) {\n  return String.fromCharCode.apply(null, data);\n}\nfunction readUint16(buffer, offset) {\n  const val = buffer[offset] << 8 | buffer[offset + 1];\n  return val < 0 ? 65536 + val : val;\n}\nfunction readUint32(buffer, offset) {\n  const val = readSint32(buffer, offset);\n  return val < 0 ? 4294967296 + val : val;\n}\nfunction readUint64(buffer, offset) {\n  let result = readUint32(buffer, offset);\n  result *= Math.pow(2, 32);\n  result += readUint32(buffer, offset + 4);\n  return result;\n}\nfunction readSint32(buffer, offset) {\n  return buffer[offset] << 24 | buffer[offset + 1] << 16 | buffer[offset + 2] << 8 | buffer[offset + 3];\n}\nfunction writeUint32(buffer, offset, value) {\n  buffer[offset] = value >> 24;\n  buffer[offset + 1] = value >> 16 & 0xff;\n  buffer[offset + 2] = value >> 8 & 0xff;\n  buffer[offset + 3] = value & 0xff;\n}\n\n// Find \"moof\" box\nfunction hasMoofData(data) {\n  const end = data.byteLength;\n  for (let i = 0; i < end;) {\n    const size = readUint32(data, i);\n    if (size > 8 && data[i + 4] === 0x6d && data[i + 5] === 0x6f && data[i + 6] === 0x6f && data[i + 7] === 0x66) {\n      return true;\n    }\n    i = size > 1 ? i + size : end;\n  }\n  return false;\n}\n\n// Find the data for a box specified by its path\nfunction findBox(data, path) {\n  const results = [];\n  if (!path.length) {\n    // short-circuit the search for empty paths\n    return results;\n  }\n  const end = data.byteLength;\n  for (let i = 0; i < end;) {\n    const size = readUint32(data, i);\n    const type = bin2str(data.subarray(i + 4, i + 8));\n    const endbox = size > 1 ? i + size : end;\n    if (type === path[0]) {\n      if (path.length === 1) {\n        // this is the end of the path and we've found the box we were\n        // looking for\n        results.push(data.subarray(i + 8, endbox));\n      } else {\n        // recursively search for the next box along the path\n        const subresults = findBox(data.subarray(i + 8, endbox), path.slice(1));\n        if (subresults.length) {\n          push.apply(results, subresults);\n        }\n      }\n    }\n    i = endbox;\n  }\n\n  // we've finished searching all of data\n  return results;\n}\nfunction parseSegmentIndex(sidx) {\n  const references = [];\n  const version = sidx[0];\n\n  // set initial offset, we skip the reference ID (not needed)\n  let index = 8;\n  const timescale = readUint32(sidx, index);\n  index += 4;\n  let earliestPresentationTime = 0;\n  let firstOffset = 0;\n  if (version === 0) {\n    earliestPresentationTime = readUint32(sidx, index);\n    firstOffset = readUint32(sidx, index + 4);\n    index += 8;\n  } else {\n    earliestPresentationTime = readUint64(sidx, index);\n    firstOffset = readUint64(sidx, index + 8);\n    index += 16;\n  }\n\n  // skip reserved\n  index += 2;\n  let startByte = sidx.length + firstOffset;\n  const referencesCount = readUint16(sidx, index);\n  index += 2;\n  for (let i = 0; i < referencesCount; i++) {\n    let referenceIndex = index;\n    const referenceInfo = readUint32(sidx, referenceIndex);\n    referenceIndex += 4;\n    const referenceSize = referenceInfo & 0x7fffffff;\n    const referenceType = (referenceInfo & 0x80000000) >>> 31;\n    if (referenceType === 1) {\n      logger.warn('SIDX has hierarchical references (not supported)');\n      return null;\n    }\n    const subsegmentDuration = readUint32(sidx, referenceIndex);\n    referenceIndex += 4;\n    references.push({\n      referenceSize,\n      subsegmentDuration,\n      // unscaled\n      info: {\n        duration: subsegmentDuration / timescale,\n        start: startByte,\n        end: startByte + referenceSize - 1\n      }\n    });\n    startByte += referenceSize;\n\n    // Skipping 1 bit for |startsWithSap|, 3 bits for |sapType|, and 28 bits\n    // for |sapDelta|.\n    referenceIndex += 4;\n\n    // skip to next ref\n    index = referenceIndex;\n  }\n  return {\n    earliestPresentationTime,\n    timescale,\n    version,\n    referencesCount,\n    references\n  };\n}\n\n/**\n * Parses an MP4 initialization segment and extracts stream type and\n * timescale values for any declared tracks. Timescale values indicate the\n * number of clock ticks per second to assume for time-based values\n * elsewhere in the MP4.\n *\n * To determine the start time of an MP4, you need two pieces of\n * information: the timescale unit and the earliest base media decode\n * time. Multiple timescales can be specified within an MP4 but the\n * base media decode time is always expressed in the timescale from\n * the media header box for the track:\n * ```\n * moov > trak > mdia > mdhd.timescale\n * moov > trak > mdia > hdlr\n * ```\n * @param initSegment the bytes of the init segment\n * @returns a hash of track type to timescale values or null if\n * the init segment is malformed.\n */\n\nfunction parseInitSegment(initSegment) {\n  const result = [];\n  const traks = findBox(initSegment, ['moov', 'trak']);\n  for (let i = 0; i < traks.length; i++) {\n    const trak = traks[i];\n    const tkhd = findBox(trak, ['tkhd'])[0];\n    if (tkhd) {\n      let version = tkhd[0];\n      const trackId = readUint32(tkhd, version === 0 ? 12 : 20);\n      const mdhd = findBox(trak, ['mdia', 'mdhd'])[0];\n      if (mdhd) {\n        version = mdhd[0];\n        const timescale = readUint32(mdhd, version === 0 ? 12 : 20);\n        const hdlr = findBox(trak, ['mdia', 'hdlr'])[0];\n        if (hdlr) {\n          const hdlrType = bin2str(hdlr.subarray(8, 12));\n          const type = {\n            soun: ElementaryStreamTypes.AUDIO,\n            vide: ElementaryStreamTypes.VIDEO\n          }[hdlrType];\n          if (type) {\n            // Parse codec details\n            const stsd = findBox(trak, ['mdia', 'minf', 'stbl', 'stsd'])[0];\n            const stsdData = parseStsd(stsd);\n            result[trackId] = {\n              timescale,\n              type\n            };\n            result[type] = _objectSpread2({\n              timescale,\n              id: trackId\n            }, stsdData);\n          }\n        }\n      }\n    }\n  }\n  const trex = findBox(initSegment, ['moov', 'mvex', 'trex']);\n  trex.forEach(trex => {\n    const trackId = readUint32(trex, 4);\n    const track = result[trackId];\n    if (track) {\n      track.default = {\n        duration: readUint32(trex, 12),\n        flags: readUint32(trex, 20)\n      };\n    }\n  });\n  return result;\n}\nfunction parseStsd(stsd) {\n  const sampleEntries = stsd.subarray(8);\n  const sampleEntriesEnd = sampleEntries.subarray(8 + 78);\n  const fourCC = bin2str(sampleEntries.subarray(4, 8));\n  let codec = fourCC;\n  const encrypted = fourCC === 'enca' || fourCC === 'encv';\n  if (encrypted) {\n    const encBox = findBox(sampleEntries, [fourCC])[0];\n    const encBoxChildren = encBox.subarray(fourCC === 'enca' ? 28 : 78);\n    const sinfs = findBox(encBoxChildren, ['sinf']);\n    sinfs.forEach(sinf => {\n      const schm = findBox(sinf, ['schm'])[0];\n      if (schm) {\n        const scheme = bin2str(schm.subarray(4, 8));\n        if (scheme === 'cbcs' || scheme === 'cenc') {\n          const frma = findBox(sinf, ['frma'])[0];\n          if (frma) {\n            // for encrypted content codec fourCC will be in frma\n            codec = bin2str(frma);\n          }\n        }\n      }\n    });\n  }\n  switch (codec) {\n    case 'avc1':\n    case 'avc2':\n    case 'avc3':\n    case 'avc4':\n      {\n        // extract profile + compatibility + level out of avcC box\n        const avcCBox = findBox(sampleEntriesEnd, ['avcC'])[0];\n        codec += '.' + toHex(avcCBox[1]) + toHex(avcCBox[2]) + toHex(avcCBox[3]);\n        break;\n      }\n    case 'mp4a':\n      {\n        const codecBox = findBox(sampleEntries, [fourCC])[0];\n        const esdsBox = findBox(codecBox.subarray(28), ['esds'])[0];\n        if (esdsBox && esdsBox.length > 12) {\n          let i = 4;\n          // ES Descriptor tag\n          if (esdsBox[i++] !== 0x03) {\n            break;\n          }\n          i = skipBERInteger(esdsBox, i);\n          i += 2; // skip es_id;\n          const flags = esdsBox[i++];\n          if (flags & 0x80) {\n            i += 2; // skip dependency es_id\n          }\n          if (flags & 0x40) {\n            i += esdsBox[i++]; // skip URL\n          }\n          // Decoder config descriptor\n          if (esdsBox[i++] !== 0x04) {\n            break;\n          }\n          i = skipBERInteger(esdsBox, i);\n          const objectType = esdsBox[i++];\n          if (objectType === 0x40) {\n            codec += '.' + toHex(objectType);\n          } else {\n            break;\n          }\n          i += 12;\n          // Decoder specific info\n          if (esdsBox[i++] !== 0x05) {\n            break;\n          }\n          i = skipBERInteger(esdsBox, i);\n          const firstByte = esdsBox[i++];\n          let audioObjectType = (firstByte & 0xf8) >> 3;\n          if (audioObjectType === 31) {\n            audioObjectType += 1 + ((firstByte & 0x7) << 3) + ((esdsBox[i] & 0xe0) >> 5);\n          }\n          codec += '.' + audioObjectType;\n        }\n        break;\n      }\n    case 'hvc1':\n    case 'hev1':\n      {\n        const hvcCBox = findBox(sampleEntriesEnd, ['hvcC'])[0];\n        const profileByte = hvcCBox[1];\n        const profileSpace = ['', 'A', 'B', 'C'][profileByte >> 6];\n        const generalProfileIdc = profileByte & 0x1f;\n        const profileCompat = readUint32(hvcCBox, 2);\n        const tierFlag = (profileByte & 0x20) >> 5 ? 'H' : 'L';\n        const levelIDC = hvcCBox[12];\n        const constraintIndicator = hvcCBox.subarray(6, 12);\n        codec += '.' + profileSpace + generalProfileIdc;\n        codec += '.' + profileCompat.toString(16).toUpperCase();\n        codec += '.' + tierFlag + levelIDC;\n        let constraintString = '';\n        for (let i = constraintIndicator.length; i--;) {\n          const byte = constraintIndicator[i];\n          if (byte || constraintString) {\n            const encodedByte = byte.toString(16).toUpperCase();\n            constraintString = '.' + encodedByte + constraintString;\n          }\n        }\n        codec += constraintString;\n        break;\n      }\n    case 'dvh1':\n    case 'dvhe':\n      {\n        const dvcCBox = findBox(sampleEntriesEnd, ['dvcC'])[0];\n        const profile = dvcCBox[2] >> 1 & 0x7f;\n        const level = dvcCBox[2] << 5 & 0x20 | dvcCBox[3] >> 3 & 0x1f;\n        codec += '.' + addLeadingZero(profile) + '.' + addLeadingZero(level);\n        break;\n      }\n    case 'vp09':\n      {\n        const vpcCBox = findBox(sampleEntriesEnd, ['vpcC'])[0];\n        const profile = vpcCBox[4];\n        const level = vpcCBox[5];\n        const bitDepth = vpcCBox[6] >> 4 & 0x0f;\n        codec += '.' + addLeadingZero(profile) + '.' + addLeadingZero(level) + '.' + addLeadingZero(bitDepth);\n        break;\n      }\n    case 'av01':\n      {\n        const av1CBox = findBox(sampleEntriesEnd, ['av1C'])[0];\n        const profile = av1CBox[1] >>> 5;\n        const level = av1CBox[1] & 0x1f;\n        const tierFlag = av1CBox[2] >>> 7 ? 'H' : 'M';\n        const highBitDepth = (av1CBox[2] & 0x40) >> 6;\n        const twelveBit = (av1CBox[2] & 0x20) >> 5;\n        const bitDepth = profile === 2 && highBitDepth ? twelveBit ? 12 : 10 : highBitDepth ? 10 : 8;\n        const monochrome = (av1CBox[2] & 0x10) >> 4;\n        const chromaSubsamplingX = (av1CBox[2] & 0x08) >> 3;\n        const chromaSubsamplingY = (av1CBox[2] & 0x04) >> 2;\n        const chromaSamplePosition = av1CBox[2] & 0x03;\n        // TODO: parse color_description_present_flag\n        // default it to BT.709/limited range for now\n        // more info https://aomediacodec.github.io/av1-isobmff/#av1codecconfigurationbox-syntax\n        const colorPrimaries = 1;\n        const transferCharacteristics = 1;\n        const matrixCoefficients = 1;\n        const videoFullRangeFlag = 0;\n        codec += '.' + profile + '.' + addLeadingZero(level) + tierFlag + '.' + addLeadingZero(bitDepth) + '.' + monochrome + '.' + chromaSubsamplingX + chromaSubsamplingY + chromaSamplePosition + '.' + addLeadingZero(colorPrimaries) + '.' + addLeadingZero(transferCharacteristics) + '.' + addLeadingZero(matrixCoefficients) + '.' + videoFullRangeFlag;\n        break;\n      }\n  }\n  return {\n    codec,\n    encrypted\n  };\n}\nfunction skipBERInteger(bytes, i) {\n  const limit = i + 5;\n  while (bytes[i++] & 0x80 && i < limit) {}\n  return i;\n}\nfunction toHex(x) {\n  return ('0' + x.toString(16).toUpperCase()).slice(-2);\n}\nfunction addLeadingZero(num) {\n  return (num < 10 ? '0' : '') + num;\n}\nfunction patchEncyptionData(initSegment, decryptdata) {\n  if (!initSegment || !decryptdata) {\n    return initSegment;\n  }\n  const keyId = decryptdata.keyId;\n  if (keyId && decryptdata.isCommonEncryption) {\n    const traks = findBox(initSegment, ['moov', 'trak']);\n    traks.forEach(trak => {\n      const stsd = findBox(trak, ['mdia', 'minf', 'stbl', 'stsd'])[0];\n\n      // skip the sample entry count\n      const sampleEntries = stsd.subarray(8);\n      let encBoxes = findBox(sampleEntries, ['enca']);\n      const isAudio = encBoxes.length > 0;\n      if (!isAudio) {\n        encBoxes = findBox(sampleEntries, ['encv']);\n      }\n      encBoxes.forEach(enc => {\n        const encBoxChildren = isAudio ? enc.subarray(28) : enc.subarray(78);\n        const sinfBoxes = findBox(encBoxChildren, ['sinf']);\n        sinfBoxes.forEach(sinf => {\n          const tenc = parseSinf(sinf);\n          if (tenc) {\n            // Look for default key id (keyID offset is always 8 within the tenc box):\n            const tencKeyId = tenc.subarray(8, 24);\n            if (!tencKeyId.some(b => b !== 0)) {\n              logger.log(`[eme] Patching keyId in 'enc${isAudio ? 'a' : 'v'}>sinf>>tenc' box: ${Hex.hexDump(tencKeyId)} -> ${Hex.hexDump(keyId)}`);\n              tenc.set(keyId, 8);\n            }\n          }\n        });\n      });\n    });\n  }\n  return initSegment;\n}\nfunction parseSinf(sinf) {\n  const schm = findBox(sinf, ['schm'])[0];\n  if (schm) {\n    const scheme = bin2str(schm.subarray(4, 8));\n    if (scheme === 'cbcs' || scheme === 'cenc') {\n      return findBox(sinf, ['schi', 'tenc'])[0];\n    }\n  }\n  return null;\n}\n\n/**\n * Determine the base media decode start time, in seconds, for an MP4\n * fragment. If multiple fragments are specified, the earliest time is\n * returned.\n *\n * The base media decode time can be parsed from track fragment\n * metadata:\n * ```\n * moof > traf > tfdt.baseMediaDecodeTime\n * ```\n * It requires the timescale value from the mdhd to interpret.\n *\n * @param initData - a hash of track type to timescale values\n * @param fmp4 - the bytes of the mp4 fragment\n * @returns the earliest base media decode start time for the\n * fragment, in seconds\n */\nfunction getStartDTS(initData, fmp4) {\n  // we need info from two children of each track fragment box\n  return findBox(fmp4, ['moof', 'traf']).reduce((result, traf) => {\n    const tfdt = findBox(traf, ['tfdt'])[0];\n    const version = tfdt[0];\n    const start = findBox(traf, ['tfhd']).reduce((result, tfhd) => {\n      // get the track id from the tfhd\n      const id = readUint32(tfhd, 4);\n      const track = initData[id];\n      if (track) {\n        let baseTime = readUint32(tfdt, 4);\n        if (version === 1) {\n          // If value is too large, assume signed 64-bit. Negative track fragment decode times are invalid, but they exist in the wild.\n          // This prevents large values from being used for initPTS, which can cause playlist sync issues.\n          // https://github.com/video-dev/hls.js/issues/5303\n          if (baseTime === UINT32_MAX$1) {\n            logger.warn(`[mp4-demuxer]: Ignoring assumed invalid signed 64-bit track fragment decode time`);\n            return result;\n          }\n          baseTime *= UINT32_MAX$1 + 1;\n          baseTime += readUint32(tfdt, 8);\n        }\n        // assume a 90kHz clock if no timescale was specified\n        const scale = track.timescale || 90e3;\n        // convert base time to seconds\n        const startTime = baseTime / scale;\n        if (isFiniteNumber(startTime) && (result === null || startTime < result)) {\n          return startTime;\n        }\n      }\n      return result;\n    }, null);\n    if (start !== null && isFiniteNumber(start) && (result === null || start < result)) {\n      return start;\n    }\n    return result;\n  }, null);\n}\n\n/*\n  For Reference:\n  aligned(8) class TrackFragmentHeaderBox\n           extends FullBox(‘tfhd’, 0, tf_flags){\n     unsigned int(32)  track_ID;\n     // all the following are optional fields\n     unsigned int(64)  base_data_offset;\n     unsigned int(32)  sample_description_index;\n     unsigned int(32)  default_sample_duration;\n     unsigned int(32)  default_sample_size;\n     unsigned int(32)  default_sample_flags\n  }\n */\nfunction getDuration(data, initData) {\n  let rawDuration = 0;\n  let videoDuration = 0;\n  let audioDuration = 0;\n  const trafs = findBox(data, ['moof', 'traf']);\n  for (let i = 0; i < trafs.length; i++) {\n    const traf = trafs[i];\n    // There is only one tfhd & trun per traf\n    // This is true for CMAF style content, and we should perhaps check the ftyp\n    // and only look for a single trun then, but for ISOBMFF we should check\n    // for multiple track runs.\n    const tfhd = findBox(traf, ['tfhd'])[0];\n    // get the track id from the tfhd\n    const id = readUint32(tfhd, 4);\n    const track = initData[id];\n    if (!track) {\n      continue;\n    }\n    const trackDefault = track.default;\n    const tfhdFlags = readUint32(tfhd, 0) | (trackDefault == null ? void 0 : trackDefault.flags);\n    let sampleDuration = trackDefault == null ? void 0 : trackDefault.duration;\n    if (tfhdFlags & 0x000008) {\n      // 0x000008 indicates the presence of the default_sample_duration field\n      if (tfhdFlags & 0x000002) {\n        // 0x000002 indicates the presence of the sample_description_index field, which precedes default_sample_duration\n        // If present, the default_sample_duration exists at byte offset 12\n        sampleDuration = readUint32(tfhd, 12);\n      } else {\n        // Otherwise, the duration is at byte offset 8\n        sampleDuration = readUint32(tfhd, 8);\n      }\n    }\n    // assume a 90kHz clock if no timescale was specified\n    const timescale = track.timescale || 90e3;\n    const truns = findBox(traf, ['trun']);\n    for (let j = 0; j < truns.length; j++) {\n      rawDuration = computeRawDurationFromSamples(truns[j]);\n      if (!rawDuration && sampleDuration) {\n        const sampleCount = readUint32(truns[j], 4);\n        rawDuration = sampleDuration * sampleCount;\n      }\n      if (track.type === ElementaryStreamTypes.VIDEO) {\n        videoDuration += rawDuration / timescale;\n      } else if (track.type === ElementaryStreamTypes.AUDIO) {\n        audioDuration += rawDuration / timescale;\n      }\n    }\n  }\n  if (videoDuration === 0 && audioDuration === 0) {\n    // If duration samples are not available in the traf use sidx subsegment_duration\n    let sidxMinStart = Infinity;\n    let sidxMaxEnd = 0;\n    let sidxDuration = 0;\n    const sidxs = findBox(data, ['sidx']);\n    for (let i = 0; i < sidxs.length; i++) {\n      const sidx = parseSegmentIndex(sidxs[i]);\n      if (sidx != null && sidx.references) {\n        sidxMinStart = Math.min(sidxMinStart, sidx.earliestPresentationTime / sidx.timescale);\n        const subSegmentDuration = sidx.references.reduce((dur, ref) => dur + ref.info.duration || 0, 0);\n        sidxMaxEnd = Math.max(sidxMaxEnd, subSegmentDuration + sidx.earliestPresentationTime / sidx.timescale);\n        sidxDuration = sidxMaxEnd - sidxMinStart;\n      }\n    }\n    if (sidxDuration && isFiniteNumber(sidxDuration)) {\n      return sidxDuration;\n    }\n  }\n  if (videoDuration) {\n    return videoDuration;\n  }\n  return audioDuration;\n}\n\n/*\n  For Reference:\n  aligned(8) class TrackRunBox\n           extends FullBox(‘trun’, version, tr_flags) {\n     unsigned int(32)  sample_count;\n     // the following are optional fields\n     signed int(32) data_offset;\n     unsigned int(32)  first_sample_flags;\n     // all fields in the following array are optional\n     {\n        unsigned int(32)  sample_duration;\n        unsigned int(32)  sample_size;\n        unsigned int(32)  sample_flags\n        if (version == 0)\n           { unsigned int(32)\n        else\n           { signed int(32)\n     }[ sample_count ]\n  }\n */\nfunction computeRawDurationFromSamples(trun) {\n  const flags = readUint32(trun, 0);\n  // Flags are at offset 0, non-optional sample_count is at offset 4. Therefore we start 8 bytes in.\n  // Each field is an int32, which is 4 bytes\n  let offset = 8;\n  // data-offset-present flag\n  if (flags & 0x000001) {\n    offset += 4;\n  }\n  // first-sample-flags-present flag\n  if (flags & 0x000004) {\n    offset += 4;\n  }\n  let duration = 0;\n  const sampleCount = readUint32(trun, 4);\n  for (let i = 0; i < sampleCount; i++) {\n    // sample-duration-present flag\n    if (flags & 0x000100) {\n      const sampleDuration = readUint32(trun, offset);\n      duration += sampleDuration;\n      offset += 4;\n    }\n    // sample-size-present flag\n    if (flags & 0x000200) {\n      offset += 4;\n    }\n    // sample-flags-present flag\n    if (flags & 0x000400) {\n      offset += 4;\n    }\n    // sample-composition-time-offsets-present flag\n    if (flags & 0x000800) {\n      offset += 4;\n    }\n  }\n  return duration;\n}\nfunction offsetStartDTS(initData, fmp4, timeOffset) {\n  findBox(fmp4, ['moof', 'traf']).forEach(traf => {\n    findBox(traf, ['tfhd']).forEach(tfhd => {\n      // get the track id from the tfhd\n      const id = readUint32(tfhd, 4);\n      const track = initData[id];\n      if (!track) {\n        return;\n      }\n      // assume a 90kHz clock if no timescale was specified\n      const timescale = track.timescale || 90e3;\n      // get the base media decode time from the tfdt\n      findBox(traf, ['tfdt']).forEach(tfdt => {\n        const version = tfdt[0];\n        const offset = timeOffset * timescale;\n        if (offset) {\n          let baseMediaDecodeTime = readUint32(tfdt, 4);\n          if (version === 0) {\n            baseMediaDecodeTime -= offset;\n            baseMediaDecodeTime = Math.max(baseMediaDecodeTime, 0);\n            writeUint32(tfdt, 4, baseMediaDecodeTime);\n          } else {\n            baseMediaDecodeTime *= Math.pow(2, 32);\n            baseMediaDecodeTime += readUint32(tfdt, 8);\n            baseMediaDecodeTime -= offset;\n            baseMediaDecodeTime = Math.max(baseMediaDecodeTime, 0);\n            const upper = Math.floor(baseMediaDecodeTime / (UINT32_MAX$1 + 1));\n            const lower = Math.floor(baseMediaDecodeTime % (UINT32_MAX$1 + 1));\n            writeUint32(tfdt, 4, upper);\n            writeUint32(tfdt, 8, lower);\n          }\n        }\n      });\n    });\n  });\n}\n\n// TODO: Check if the last moof+mdat pair is part of the valid range\nfunction segmentValidRange(data) {\n  const segmentedRange = {\n    valid: null,\n    remainder: null\n  };\n  const moofs = findBox(data, ['moof']);\n  if (moofs.length < 2) {\n    segmentedRange.remainder = data;\n    return segmentedRange;\n  }\n  const last = moofs[moofs.length - 1];\n  // Offset by 8 bytes; findBox offsets the start by as much\n  segmentedRange.valid = sliceUint8(data, 0, last.byteOffset - 8);\n  segmentedRange.remainder = sliceUint8(data, last.byteOffset - 8);\n  return segmentedRange;\n}\nfunction appendUint8Array(data1, data2) {\n  const temp = new Uint8Array(data1.length + data2.length);\n  temp.set(data1);\n  temp.set(data2, data1.length);\n  return temp;\n}\nfunction parseSamples(timeOffset, track) {\n  const seiSamples = [];\n  const videoData = track.samples;\n  const timescale = track.timescale;\n  const trackId = track.id;\n  let isHEVCFlavor = false;\n  const moofs = findBox(videoData, ['moof']);\n  moofs.map(moof => {\n    const moofOffset = moof.byteOffset - 8;\n    const trafs = findBox(moof, ['traf']);\n    trafs.map(traf => {\n      // get the base media decode time from the tfdt\n      const baseTime = findBox(traf, ['tfdt']).map(tfdt => {\n        const version = tfdt[0];\n        let result = readUint32(tfdt, 4);\n        if (version === 1) {\n          result *= Math.pow(2, 32);\n          result += readUint32(tfdt, 8);\n        }\n        return result / timescale;\n      })[0];\n      if (baseTime !== undefined) {\n        timeOffset = baseTime;\n      }\n      return findBox(traf, ['tfhd']).map(tfhd => {\n        const id = readUint32(tfhd, 4);\n        const tfhdFlags = readUint32(tfhd, 0) & 0xffffff;\n        const baseDataOffsetPresent = (tfhdFlags & 0x000001) !== 0;\n        const sampleDescriptionIndexPresent = (tfhdFlags & 0x000002) !== 0;\n        const defaultSampleDurationPresent = (tfhdFlags & 0x000008) !== 0;\n        let defaultSampleDuration = 0;\n        const defaultSampleSizePresent = (tfhdFlags & 0x000010) !== 0;\n        let defaultSampleSize = 0;\n        const defaultSampleFlagsPresent = (tfhdFlags & 0x000020) !== 0;\n        let tfhdOffset = 8;\n        if (id === trackId) {\n          if (baseDataOffsetPresent) {\n            tfhdOffset += 8;\n          }\n          if (sampleDescriptionIndexPresent) {\n            tfhdOffset += 4;\n          }\n          if (defaultSampleDurationPresent) {\n            defaultSampleDuration = readUint32(tfhd, tfhdOffset);\n            tfhdOffset += 4;\n          }\n          if (defaultSampleSizePresent) {\n            defaultSampleSize = readUint32(tfhd, tfhdOffset);\n            tfhdOffset += 4;\n          }\n          if (defaultSampleFlagsPresent) {\n            tfhdOffset += 4;\n          }\n          if (track.type === 'video') {\n            isHEVCFlavor = isHEVC(track.codec);\n          }\n          findBox(traf, ['trun']).map(trun => {\n            const version = trun[0];\n            const flags = readUint32(trun, 0) & 0xffffff;\n            const dataOffsetPresent = (flags & 0x000001) !== 0;\n            let dataOffset = 0;\n            const firstSampleFlagsPresent = (flags & 0x000004) !== 0;\n            const sampleDurationPresent = (flags & 0x000100) !== 0;\n            let sampleDuration = 0;\n            const sampleSizePresent = (flags & 0x000200) !== 0;\n            let sampleSize = 0;\n            const sampleFlagsPresent = (flags & 0x000400) !== 0;\n            const sampleCompositionOffsetsPresent = (flags & 0x000800) !== 0;\n            let compositionOffset = 0;\n            const sampleCount = readUint32(trun, 4);\n            let trunOffset = 8; // past version, flags, and sample count\n\n            if (dataOffsetPresent) {\n              dataOffset = readUint32(trun, trunOffset);\n              trunOffset += 4;\n            }\n            if (firstSampleFlagsPresent) {\n              trunOffset += 4;\n            }\n            let sampleOffset = dataOffset + moofOffset;\n            for (let ix = 0; ix < sampleCount; ix++) {\n              if (sampleDurationPresent) {\n                sampleDuration = readUint32(trun, trunOffset);\n                trunOffset += 4;\n              } else {\n                sampleDuration = defaultSampleDuration;\n              }\n              if (sampleSizePresent) {\n                sampleSize = readUint32(trun, trunOffset);\n                trunOffset += 4;\n              } else {\n                sampleSize = defaultSampleSize;\n              }\n              if (sampleFlagsPresent) {\n                trunOffset += 4;\n              }\n              if (sampleCompositionOffsetsPresent) {\n                if (version === 0) {\n                  compositionOffset = readUint32(trun, trunOffset);\n                } else {\n                  compositionOffset = readSint32(trun, trunOffset);\n                }\n                trunOffset += 4;\n              }\n              if (track.type === ElementaryStreamTypes.VIDEO) {\n                let naluTotalSize = 0;\n                while (naluTotalSize < sampleSize) {\n                  const naluSize = readUint32(videoData, sampleOffset);\n                  sampleOffset += 4;\n                  if (isSEIMessage(isHEVCFlavor, videoData[sampleOffset])) {\n                    const data = videoData.subarray(sampleOffset, sampleOffset + naluSize);\n                    parseSEIMessageFromNALu(data, isHEVCFlavor ? 2 : 1, timeOffset + compositionOffset / timescale, seiSamples);\n                  }\n                  sampleOffset += naluSize;\n                  naluTotalSize += naluSize + 4;\n                }\n              }\n              timeOffset += sampleDuration / timescale;\n            }\n          });\n        }\n      });\n    });\n  });\n  return seiSamples;\n}\nfunction isHEVC(codec) {\n  if (!codec) {\n    return false;\n  }\n  const delimit = codec.indexOf('.');\n  const baseCodec = delimit < 0 ? codec : codec.substring(0, delimit);\n  return baseCodec === 'hvc1' || baseCodec === 'hev1' ||\n  // Dolby Vision\n  baseCodec === 'dvh1' || baseCodec === 'dvhe';\n}\nfunction isSEIMessage(isHEVCFlavor, naluHeader) {\n  if (isHEVCFlavor) {\n    const naluType = naluHeader >> 1 & 0x3f;\n    return naluType === 39 || naluType === 40;\n  } else {\n    const naluType = naluHeader & 0x1f;\n    return naluType === 6;\n  }\n}\nfunction parseSEIMessageFromNALu(unescapedData, headerSize, pts, samples) {\n  const data = discardEPB(unescapedData);\n  let seiPtr = 0;\n  // skip nal header\n  seiPtr += headerSize;\n  let payloadType = 0;\n  let payloadSize = 0;\n  let b = 0;\n  while (seiPtr < data.length) {\n    payloadType = 0;\n    do {\n      if (seiPtr >= data.length) {\n        break;\n      }\n      b = data[seiPtr++];\n      payloadType += b;\n    } while (b === 0xff);\n\n    // Parse payload size.\n    payloadSize = 0;\n    do {\n      if (seiPtr >= data.length) {\n        break;\n      }\n      b = data[seiPtr++];\n      payloadSize += b;\n    } while (b === 0xff);\n    const leftOver = data.length - seiPtr;\n    // Create a variable to process the payload\n    let payPtr = seiPtr;\n\n    // Increment the seiPtr to the end of the payload\n    if (payloadSize < leftOver) {\n      seiPtr += payloadSize;\n    } else if (payloadSize > leftOver) {\n      // Some type of corruption has happened?\n      logger.error(`Malformed SEI payload. ${payloadSize} is too small, only ${leftOver} bytes left to parse.`);\n      // We might be able to parse some data, but let's be safe and ignore it.\n      break;\n    }\n    if (payloadType === 4) {\n      const countryCode = data[payPtr++];\n      if (countryCode === 181) {\n        const providerCode = readUint16(data, payPtr);\n        payPtr += 2;\n        if (providerCode === 49) {\n          const userStructure = readUint32(data, payPtr);\n          payPtr += 4;\n          if (userStructure === 0x47413934) {\n            const userDataType = data[payPtr++];\n\n            // Raw CEA-608 bytes wrapped in CEA-708 packet\n            if (userDataType === 3) {\n              const firstByte = data[payPtr++];\n              const totalCCs = 0x1f & firstByte;\n              const enabled = 0x40 & firstByte;\n              const totalBytes = enabled ? 2 + totalCCs * 3 : 0;\n              const byteArray = new Uint8Array(totalBytes);\n              if (enabled) {\n                byteArray[0] = firstByte;\n                for (let i = 1; i < totalBytes; i++) {\n                  byteArray[i] = data[payPtr++];\n                }\n              }\n              samples.push({\n                type: userDataType,\n                payloadType,\n                pts,\n                bytes: byteArray\n              });\n            }\n          }\n        }\n      }\n    } else if (payloadType === 5) {\n      if (payloadSize > 16) {\n        const uuidStrArray = [];\n        for (let i = 0; i < 16; i++) {\n          const _b = data[payPtr++].toString(16);\n          uuidStrArray.push(_b.length == 1 ? '0' + _b : _b);\n          if (i === 3 || i === 5 || i === 7 || i === 9) {\n            uuidStrArray.push('-');\n          }\n        }\n        const length = payloadSize - 16;\n        const userDataBytes = new Uint8Array(length);\n        for (let i = 0; i < length; i++) {\n          userDataBytes[i] = data[payPtr++];\n        }\n        samples.push({\n          payloadType,\n          pts,\n          uuid: uuidStrArray.join(''),\n          userData: utf8ArrayToStr(userDataBytes),\n          userDataBytes\n        });\n      }\n    }\n  }\n}\n\n/**\n * remove Emulation Prevention bytes from a RBSP\n */\nfunction discardEPB(data) {\n  const length = data.byteLength;\n  const EPBPositions = [];\n  let i = 1;\n\n  // Find all `Emulation Prevention Bytes`\n  while (i < length - 2) {\n    if (data[i] === 0 && data[i + 1] === 0 && data[i + 2] === 0x03) {\n      EPBPositions.push(i + 2);\n      i += 2;\n    } else {\n      i++;\n    }\n  }\n\n  // If no Emulation Prevention Bytes were found just return the original\n  // array\n  if (EPBPositions.length === 0) {\n    return data;\n  }\n\n  // Create a new array to hold the NAL unit data\n  const newLength = length - EPBPositions.length;\n  const newData = new Uint8Array(newLength);\n  let sourceIndex = 0;\n  for (i = 0; i < newLength; sourceIndex++, i++) {\n    if (sourceIndex === EPBPositions[0]) {\n      // Skip this byte\n      sourceIndex++;\n      // Remove this position index\n      EPBPositions.shift();\n    }\n    newData[i] = data[sourceIndex];\n  }\n  return newData;\n}\nfunction parseEmsg(data) {\n  const version = data[0];\n  let schemeIdUri = '';\n  let value = '';\n  let timeScale = 0;\n  let presentationTimeDelta = 0;\n  let presentationTime = 0;\n  let eventDuration = 0;\n  let id = 0;\n  let offset = 0;\n  if (version === 0) {\n    while (bin2str(data.subarray(offset, offset + 1)) !== '\\0') {\n      schemeIdUri += bin2str(data.subarray(offset, offset + 1));\n      offset += 1;\n    }\n    schemeIdUri += bin2str(data.subarray(offset, offset + 1));\n    offset += 1;\n    while (bin2str(data.subarray(offset, offset + 1)) !== '\\0') {\n      value += bin2str(data.subarray(offset, offset + 1));\n      offset += 1;\n    }\n    value += bin2str(data.subarray(offset, offset + 1));\n    offset += 1;\n    timeScale = readUint32(data, 12);\n    presentationTimeDelta = readUint32(data, 16);\n    eventDuration = readUint32(data, 20);\n    id = readUint32(data, 24);\n    offset = 28;\n  } else if (version === 1) {\n    offset += 4;\n    timeScale = readUint32(data, offset);\n    offset += 4;\n    const leftPresentationTime = readUint32(data, offset);\n    offset += 4;\n    const rightPresentationTime = readUint32(data, offset);\n    offset += 4;\n    presentationTime = 2 ** 32 * leftPresentationTime + rightPresentationTime;\n    if (!isSafeInteger(presentationTime)) {\n      presentationTime = Number.MAX_SAFE_INTEGER;\n      logger.warn('Presentation time exceeds safe integer limit and wrapped to max safe integer in parsing emsg box');\n    }\n    eventDuration = readUint32(data, offset);\n    offset += 4;\n    id = readUint32(data, offset);\n    offset += 4;\n    while (bin2str(data.subarray(offset, offset + 1)) !== '\\0') {\n      schemeIdUri += bin2str(data.subarray(offset, offset + 1));\n      offset += 1;\n    }\n    schemeIdUri += bin2str(data.subarray(offset, offset + 1));\n    offset += 1;\n    while (bin2str(data.subarray(offset, offset + 1)) !== '\\0') {\n      value += bin2str(data.subarray(offset, offset + 1));\n      offset += 1;\n    }\n    value += bin2str(data.subarray(offset, offset + 1));\n    offset += 1;\n  }\n  const payload = data.subarray(offset, data.byteLength);\n  return {\n    schemeIdUri,\n    value,\n    timeScale,\n    presentationTime,\n    presentationTimeDelta,\n    eventDuration,\n    id,\n    payload\n  };\n}\nfunction mp4Box(type, ...payload) {\n  const len = payload.length;\n  let size = 8;\n  let i = len;\n  while (i--) {\n    size += payload[i].byteLength;\n  }\n  const result = new Uint8Array(size);\n  result[0] = size >> 24 & 0xff;\n  result[1] = size >> 16 & 0xff;\n  result[2] = size >> 8 & 0xff;\n  result[3] = size & 0xff;\n  result.set(type, 4);\n  for (i = 0, size = 8; i < len; i++) {\n    result.set(payload[i], size);\n    size += payload[i].byteLength;\n  }\n  return result;\n}\nfunction mp4pssh(systemId, keyids, data) {\n  if (systemId.byteLength !== 16) {\n    throw new RangeError('Invalid system id');\n  }\n  let version;\n  let kids;\n  if (keyids) {\n    version = 1;\n    kids = new Uint8Array(keyids.length * 16);\n    for (let ix = 0; ix < keyids.length; ix++) {\n      const k = keyids[ix]; // uint8array\n      if (k.byteLength !== 16) {\n        throw new RangeError('Invalid key');\n      }\n      kids.set(k, ix * 16);\n    }\n  } else {\n    version = 0;\n    kids = new Uint8Array();\n  }\n  let kidCount;\n  if (version > 0) {\n    kidCount = new Uint8Array(4);\n    if (keyids.length > 0) {\n      new DataView(kidCount.buffer).setUint32(0, keyids.length, false);\n    }\n  } else {\n    kidCount = new Uint8Array();\n  }\n  const dataSize = new Uint8Array(4);\n  if (data && data.byteLength > 0) {\n    new DataView(dataSize.buffer).setUint32(0, data.byteLength, false);\n  }\n  return mp4Box([112, 115, 115, 104], new Uint8Array([version, 0x00, 0x00, 0x00 // Flags\n  ]), systemId,\n  // 16 bytes\n  kidCount, kids, dataSize, data || new Uint8Array());\n}\nfunction parseMultiPssh(initData) {\n  const results = [];\n  if (initData instanceof ArrayBuffer) {\n    const length = initData.byteLength;\n    let offset = 0;\n    while (offset + 32 < length) {\n      const view = new DataView(initData, offset);\n      const pssh = parsePssh(view);\n      results.push(pssh);\n      offset += pssh.size;\n    }\n  }\n  return results;\n}\nfunction parsePssh(view) {\n  const size = view.getUint32(0);\n  const offset = view.byteOffset;\n  const length = view.byteLength;\n  if (length < size) {\n    return {\n      offset,\n      size: length\n    };\n  }\n  const type = view.getUint32(4);\n  if (type !== 0x70737368) {\n    return {\n      offset,\n      size\n    };\n  }\n  const version = view.getUint32(8) >>> 24;\n  if (version !== 0 && version !== 1) {\n    return {\n      offset,\n      size\n    };\n  }\n  const buffer = view.buffer;\n  const systemId = Hex.hexDump(new Uint8Array(buffer, offset + 12, 16));\n  const dataSizeOrKidCount = view.getUint32(28);\n  let kids = null;\n  let data = null;\n  if (version === 0) {\n    if (size - 32 < dataSizeOrKidCount || dataSizeOrKidCount < 22) {\n      return {\n        offset,\n        size\n      };\n    }\n    data = new Uint8Array(buffer, offset + 32, dataSizeOrKidCount);\n  } else if (version === 1) {\n    if (!dataSizeOrKidCount || length < offset + 32 + dataSizeOrKidCount * 16 + 16) {\n      return {\n        offset,\n        size\n      };\n    }\n    kids = [];\n    for (let i = 0; i < dataSizeOrKidCount; i++) {\n      kids.push(new Uint8Array(buffer, offset + 32 + i * 16, 16));\n    }\n  }\n  return {\n    version,\n    systemId,\n    kids,\n    data,\n    offset,\n    size\n  };\n}\n\nlet keyUriToKeyIdMap = {};\nclass LevelKey {\n  static clearKeyUriToKeyIdMap() {\n    keyUriToKeyIdMap = {};\n  }\n  constructor(method, uri, format, formatversions = [1], iv = null) {\n    this.uri = void 0;\n    this.method = void 0;\n    this.keyFormat = void 0;\n    this.keyFormatVersions = void 0;\n    this.encrypted = void 0;\n    this.isCommonEncryption = void 0;\n    this.iv = null;\n    this.key = null;\n    this.keyId = null;\n    this.pssh = null;\n    this.method = method;\n    this.uri = uri;\n    this.keyFormat = format;\n    this.keyFormatVersions = formatversions;\n    this.iv = iv;\n    this.encrypted = method ? method !== 'NONE' : false;\n    this.isCommonEncryption = this.encrypted && method !== 'AES-128';\n  }\n  isSupported() {\n    // If it's Segment encryption or No encryption, just select that key system\n    if (this.method) {\n      if (this.method === 'AES-128' || this.method === 'NONE') {\n        return true;\n      }\n      if (this.keyFormat === 'identity') {\n        // Maintain support for clear SAMPLE-AES with MPEG-3 TS\n        return this.method === 'SAMPLE-AES';\n      } else {\n        switch (this.keyFormat) {\n          case KeySystemFormats.FAIRPLAY:\n          case KeySystemFormats.WIDEVINE:\n          case KeySystemFormats.PLAYREADY:\n          case KeySystemFormats.CLEARKEY:\n            return ['ISO-23001-7', 'SAMPLE-AES', 'SAMPLE-AES-CENC', 'SAMPLE-AES-CTR'].indexOf(this.method) !== -1;\n        }\n      }\n    }\n    return false;\n  }\n  getDecryptData(sn) {\n    if (!this.encrypted || !this.uri) {\n      return null;\n    }\n    if (this.method === 'AES-128' && this.uri && !this.iv) {\n      if (typeof sn !== 'number') {\n        // We are fetching decryption data for a initialization segment\n        // If the segment was encrypted with AES-128\n        // It must have an IV defined. We cannot substitute the Segment Number in.\n        if (this.method === 'AES-128' && !this.iv) {\n          logger.warn(`missing IV for initialization segment with method=\"${this.method}\" - compliance issue`);\n        }\n        // Explicitly set sn to resulting value from implicit conversions 'initSegment' values for IV generation.\n        sn = 0;\n      }\n      const iv = createInitializationVector(sn);\n      const decryptdata = new LevelKey(this.method, this.uri, 'identity', this.keyFormatVersions, iv);\n      return decryptdata;\n    }\n\n    // Initialize keyId if possible\n    const keyBytes = convertDataUriToArrayBytes(this.uri);\n    if (keyBytes) {\n      switch (this.keyFormat) {\n        case KeySystemFormats.WIDEVINE:\n          this.pssh = keyBytes;\n          // In case of widevine keyID is embedded in PSSH box. Read Key ID.\n          if (keyBytes.length >= 22) {\n            this.keyId = keyBytes.subarray(keyBytes.length - 22, keyBytes.length - 6);\n          }\n          break;\n        case KeySystemFormats.PLAYREADY:\n          {\n            const PlayReadyKeySystemUUID = new Uint8Array([0x9a, 0x04, 0xf0, 0x79, 0x98, 0x40, 0x42, 0x86, 0xab, 0x92, 0xe6, 0x5b, 0xe0, 0x88, 0x5f, 0x95]);\n            this.pssh = mp4pssh(PlayReadyKeySystemUUID, null, keyBytes);\n            const keyBytesUtf16 = new Uint16Array(keyBytes.buffer, keyBytes.byteOffset, keyBytes.byteLength / 2);\n            const keyByteStr = String.fromCharCode.apply(null, Array.from(keyBytesUtf16));\n\n            // Parse Playready WRMHeader XML\n            const xmlKeyBytes = keyByteStr.substring(keyByteStr.indexOf('<'), keyByteStr.length);\n            const parser = new DOMParser();\n            const xmlDoc = parser.parseFromString(xmlKeyBytes, 'text/xml');\n            const keyData = xmlDoc.getElementsByTagName('KID')[0];\n            if (keyData) {\n              const keyId = keyData.childNodes[0] ? keyData.childNodes[0].nodeValue : keyData.getAttribute('VALUE');\n              if (keyId) {\n                const keyIdArray = base64Decode(keyId).subarray(0, 16);\n                // KID value in PRO is a base64-encoded little endian GUID interpretation of UUID\n                // KID value in ‘tenc’ is a big endian UUID GUID interpretation of UUID\n                changeEndianness(keyIdArray);\n                this.keyId = keyIdArray;\n              }\n            }\n            break;\n          }\n        default:\n          {\n            let keydata = keyBytes.subarray(0, 16);\n            if (keydata.length !== 16) {\n              const padded = new Uint8Array(16);\n              padded.set(keydata, 16 - keydata.length);\n              keydata = padded;\n            }\n            this.keyId = keydata;\n            break;\n          }\n      }\n    }\n\n    // Default behavior: assign a new keyId for each uri\n    if (!this.keyId || this.keyId.byteLength !== 16) {\n      let keyId = keyUriToKeyIdMap[this.uri];\n      if (!keyId) {\n        const val = Object.keys(keyUriToKeyIdMap).length % Number.MAX_SAFE_INTEGER;\n        keyId = new Uint8Array(16);\n        const dv = new DataView(keyId.buffer, 12, 4); // Just set the last 4 bytes\n        dv.setUint32(0, val);\n        keyUriToKeyIdMap[this.uri] = keyId;\n      }\n      this.keyId = keyId;\n    }\n    return this;\n  }\n}\nfunction createInitializationVector(segmentNumber) {\n  const uint8View = new Uint8Array(16);\n  for (let i = 12; i < 16; i++) {\n    uint8View[i] = segmentNumber >> 8 * (15 - i) & 0xff;\n  }\n  return uint8View;\n}\n\nconst VARIABLE_REPLACEMENT_REGEX = /\\{\\$([a-zA-Z0-9-_]+)\\}/g;\nfunction hasVariableReferences(str) {\n  return VARIABLE_REPLACEMENT_REGEX.test(str);\n}\nfunction substituteVariablesInAttributes(parsed, attr, attributeNames) {\n  if (parsed.variableList !== null || parsed.hasVariableRefs) {\n    for (let i = attributeNames.length; i--;) {\n      const name = attributeNames[i];\n      const value = attr[name];\n      if (value) {\n        attr[name] = substituteVariables(parsed, value);\n      }\n    }\n  }\n}\nfunction substituteVariables(parsed, value) {\n  if (parsed.variableList !== null || parsed.hasVariableRefs) {\n    const variableList = parsed.variableList;\n    return value.replace(VARIABLE_REPLACEMENT_REGEX, variableReference => {\n      const variableName = variableReference.substring(2, variableReference.length - 1);\n      const variableValue = variableList == null ? void 0 : variableList[variableName];\n      if (variableValue === undefined) {\n        parsed.playlistParsingError || (parsed.playlistParsingError = new Error(`Missing preceding EXT-X-DEFINE tag for Variable Reference: \"${variableName}\"`));\n        return variableReference;\n      }\n      return variableValue;\n    });\n  }\n  return value;\n}\nfunction addVariableDefinition(parsed, attr, parentUrl) {\n  let variableList = parsed.variableList;\n  if (!variableList) {\n    parsed.variableList = variableList = {};\n  }\n  let NAME;\n  let VALUE;\n  if ('QUERYPARAM' in attr) {\n    NAME = attr.QUERYPARAM;\n    try {\n      const searchParams = new self.URL(parentUrl).searchParams;\n      if (searchParams.has(NAME)) {\n        VALUE = searchParams.get(NAME);\n      } else {\n        throw new Error(`\"${NAME}\" does not match any query parameter in URI: \"${parentUrl}\"`);\n      }\n    } catch (error) {\n      parsed.playlistParsingError || (parsed.playlistParsingError = new Error(`EXT-X-DEFINE QUERYPARAM: ${error.message}`));\n    }\n  } else {\n    NAME = attr.NAME;\n    VALUE = attr.VALUE;\n  }\n  if (NAME in variableList) {\n    parsed.playlistParsingError || (parsed.playlistParsingError = new Error(`EXT-X-DEFINE duplicate Variable Name declarations: \"${NAME}\"`));\n  } else {\n    variableList[NAME] = VALUE || '';\n  }\n}\nfunction importVariableDefinition(parsed, attr, sourceVariableList) {\n  const IMPORT = attr.IMPORT;\n  if (sourceVariableList && IMPORT in sourceVariableList) {\n    let variableList = parsed.variableList;\n    if (!variableList) {\n      parsed.variableList = variableList = {};\n    }\n    variableList[IMPORT] = sourceVariableList[IMPORT];\n  } else {\n    parsed.playlistParsingError || (parsed.playlistParsingError = new Error(`EXT-X-DEFINE IMPORT attribute not found in Multivariant Playlist: \"${IMPORT}\"`));\n  }\n}\n\n/**\n * MediaSource helper\n */\n\nfunction getMediaSource(preferManagedMediaSource = true) {\n  if (typeof self === 'undefined') return undefined;\n  const mms = (preferManagedMediaSource || !self.MediaSource) && self.ManagedMediaSource;\n  return mms || self.MediaSource || self.WebKitMediaSource;\n}\nfunction isManagedMediaSource(source) {\n  return typeof self !== 'undefined' && source === self.ManagedMediaSource;\n}\n\n// from http://mp4ra.org/codecs.html\n// values indicate codec selection preference (lower is higher priority)\nconst sampleEntryCodesISO = {\n  audio: {\n    a3ds: 1,\n    'ac-3': 0.95,\n    'ac-4': 1,\n    alac: 0.9,\n    alaw: 1,\n    dra1: 1,\n    'dts+': 1,\n    'dts-': 1,\n    dtsc: 1,\n    dtse: 1,\n    dtsh: 1,\n    'ec-3': 0.9,\n    enca: 1,\n    fLaC: 0.9,\n    // MP4-RA listed codec entry for FLAC\n    flac: 0.9,\n    // legacy browser codec name for FLAC\n    FLAC: 0.9,\n    // some manifests may list \"FLAC\" with Apple's tools\n    g719: 1,\n    g726: 1,\n    m4ae: 1,\n    mha1: 1,\n    mha2: 1,\n    mhm1: 1,\n    mhm2: 1,\n    mlpa: 1,\n    mp4a: 1,\n    'raw ': 1,\n    Opus: 1,\n    opus: 1,\n    // browsers expect this to be lowercase despite MP4RA says 'Opus'\n    samr: 1,\n    sawb: 1,\n    sawp: 1,\n    sevc: 1,\n    sqcp: 1,\n    ssmv: 1,\n    twos: 1,\n    ulaw: 1\n  },\n  video: {\n    avc1: 1,\n    avc2: 1,\n    avc3: 1,\n    avc4: 1,\n    avcp: 1,\n    av01: 0.8,\n    drac: 1,\n    dva1: 1,\n    dvav: 1,\n    dvh1: 0.7,\n    dvhe: 0.7,\n    encv: 1,\n    hev1: 0.75,\n    hvc1: 0.75,\n    mjp2: 1,\n    mp4v: 1,\n    mvc1: 1,\n    mvc2: 1,\n    mvc3: 1,\n    mvc4: 1,\n    resv: 1,\n    rv60: 1,\n    s263: 1,\n    svc1: 1,\n    svc2: 1,\n    'vc-1': 1,\n    vp08: 1,\n    vp09: 0.9\n  },\n  text: {\n    stpp: 1,\n    wvtt: 1\n  }\n};\nfunction isCodecType(codec, type) {\n  const typeCodes = sampleEntryCodesISO[type];\n  return !!typeCodes && !!typeCodes[codec.slice(0, 4)];\n}\nfunction areCodecsMediaSourceSupported(codecs, type, preferManagedMediaSource = true) {\n  return !codecs.split(',').some(codec => !isCodecMediaSourceSupported(codec, type, preferManagedMediaSource));\n}\nfunction isCodecMediaSourceSupported(codec, type, preferManagedMediaSource = true) {\n  var _MediaSource$isTypeSu;\n  const MediaSource = getMediaSource(preferManagedMediaSource);\n  return (_MediaSource$isTypeSu = MediaSource == null ? void 0 : MediaSource.isTypeSupported(mimeTypeForCodec(codec, type))) != null ? _MediaSource$isTypeSu : false;\n}\nfunction mimeTypeForCodec(codec, type) {\n  return `${type}/mp4;codecs=\"${codec}\"`;\n}\nfunction videoCodecPreferenceValue(videoCodec) {\n  if (videoCodec) {\n    const fourCC = videoCodec.substring(0, 4);\n    return sampleEntryCodesISO.video[fourCC];\n  }\n  return 2;\n}\nfunction codecsSetSelectionPreferenceValue(codecSet) {\n  return codecSet.split(',').reduce((num, fourCC) => {\n    const preferenceValue = sampleEntryCodesISO.video[fourCC];\n    if (preferenceValue) {\n      return (preferenceValue * 2 + num) / (num ? 3 : 2);\n    }\n    return (sampleEntryCodesISO.audio[fourCC] + num) / (num ? 2 : 1);\n  }, 0);\n}\nconst CODEC_COMPATIBLE_NAMES = {};\nfunction getCodecCompatibleNameLower(lowerCaseCodec, preferManagedMediaSource = true) {\n  if (CODEC_COMPATIBLE_NAMES[lowerCaseCodec]) {\n    return CODEC_COMPATIBLE_NAMES[lowerCaseCodec];\n  }\n\n  // Idealy fLaC and Opus would be first (spec-compliant) but\n  // some browsers will report that fLaC is supported then fail.\n  // see: https://bugs.chromium.org/p/chromium/issues/detail?id=1422728\n  const codecsToCheck = {\n    flac: ['flac', 'fLaC', 'FLAC'],\n    opus: ['opus', 'Opus']\n  }[lowerCaseCodec];\n  for (let i = 0; i < codecsToCheck.length; i++) {\n    if (isCodecMediaSourceSupported(codecsToCheck[i], 'audio', preferManagedMediaSource)) {\n      CODEC_COMPATIBLE_NAMES[lowerCaseCodec] = codecsToCheck[i];\n      return codecsToCheck[i];\n    }\n  }\n  return lowerCaseCodec;\n}\nconst AUDIO_CODEC_REGEXP = /flac|opus/i;\nfunction getCodecCompatibleName(codec, preferManagedMediaSource = true) {\n  return codec.replace(AUDIO_CODEC_REGEXP, m => getCodecCompatibleNameLower(m.toLowerCase(), preferManagedMediaSource));\n}\nfunction pickMostCompleteCodecName(parsedCodec, levelCodec) {\n  // Parsing of mp4a codecs strings in mp4-tools from media is incomplete as of d8c6c7a\n  // so use level codec is parsed codec is unavailable or incomplete\n  if (parsedCodec && parsedCodec !== 'mp4a') {\n    return parsedCodec;\n  }\n  return levelCodec ? levelCodec.split(',')[0] : levelCodec;\n}\nfunction convertAVC1ToAVCOTI(codec) {\n  // Convert avc1 codec string from RFC-4281 to RFC-6381 for MediaSource.isTypeSupported\n  // Examples: avc1.66.30 to avc1.42001e and avc1.77.30,avc1.66.30 to avc1.4d001e,avc1.42001e.\n  const codecs = codec.split(',');\n  for (let i = 0; i < codecs.length; i++) {\n    const avcdata = codecs[i].split('.');\n    if (avcdata.length > 2) {\n      let result = avcdata.shift() + '.';\n      result += parseInt(avcdata.shift()).toString(16);\n      result += ('000' + parseInt(avcdata.shift()).toString(16)).slice(-4);\n      codecs[i] = result;\n    }\n  }\n  return codecs.join(',');\n}\n\nconst MASTER_PLAYLIST_REGEX = /#EXT-X-STREAM-INF:([^\\r\\n]*)(?:[\\r\\n](?:#[^\\r\\n]*)?)*([^\\r\\n]+)|#EXT-X-(SESSION-DATA|SESSION-KEY|DEFINE|CONTENT-STEERING|START):([^\\r\\n]*)[\\r\\n]+/g;\nconst MASTER_PLAYLIST_MEDIA_REGEX = /#EXT-X-MEDIA:(.*)/g;\nconst IS_MEDIA_PLAYLIST = /^#EXT(?:INF|-X-TARGETDURATION):/m; // Handle empty Media Playlist (first EXTINF not signaled, but TARGETDURATION present)\n\nconst LEVEL_PLAYLIST_REGEX_FAST = new RegExp([/#EXTINF:\\s*(\\d*(?:\\.\\d+)?)(?:,(.*)\\s+)?/.source,\n// duration (#EXTINF:<duration>,<title>), group 1 => duration, group 2 => title\n/(?!#) *(\\S[^\\r\\n]*)/.source,\n// segment URI, group 3 => the URI (note newline is not eaten)\n/#EXT-X-BYTERANGE:*(.+)/.source,\n// next segment's byterange, group 4 => range spec (x@y)\n/#EXT-X-PROGRAM-DATE-TIME:(.+)/.source,\n// next segment's program date/time group 5 => the datetime spec\n/#.*/.source // All other non-segment oriented tags will match with all groups empty\n].join('|'), 'g');\nconst LEVEL_PLAYLIST_REGEX_SLOW = new RegExp([/#(EXTM3U)/.source, /#EXT-X-(DATERANGE|DEFINE|KEY|MAP|PART|PART-INF|PLAYLIST-TYPE|PRELOAD-HINT|RENDITION-REPORT|SERVER-CONTROL|SKIP|START):(.+)/.source, /#EXT-X-(BITRATE|DISCONTINUITY-SEQUENCE|MEDIA-SEQUENCE|TARGETDURATION|VERSION): *(\\d+)/.source, /#EXT-X-(DISCONTINUITY|ENDLIST|GAP|INDEPENDENT-SEGMENTS)/.source, /(#)([^:]*):(.*)/.source, /(#)(.*)(?:.*)\\r?\\n?/.source].join('|'));\nclass M3U8Parser {\n  static findGroup(groups, mediaGroupId) {\n    for (let i = 0; i < groups.length; i++) {\n      const group = groups[i];\n      if (group.id === mediaGroupId) {\n        return group;\n      }\n    }\n  }\n  static resolve(url, baseUrl) {\n    return urlToolkitExports.buildAbsoluteURL(baseUrl, url, {\n      alwaysNormalize: true\n    });\n  }\n  static isMediaPlaylist(str) {\n    return IS_MEDIA_PLAYLIST.test(str);\n  }\n  static parseMasterPlaylist(string, baseurl) {\n    const hasVariableRefs = hasVariableReferences(string) ;\n    const parsed = {\n      contentSteering: null,\n      levels: [],\n      playlistParsingError: null,\n      sessionData: null,\n      sessionKeys: null,\n      startTimeOffset: null,\n      variableList: null,\n      hasVariableRefs\n    };\n    const levelsWithKnownCodecs = [];\n    MASTER_PLAYLIST_REGEX.lastIndex = 0;\n    let result;\n    while ((result = MASTER_PLAYLIST_REGEX.exec(string)) != null) {\n      if (result[1]) {\n        var _level$unknownCodecs;\n        // '#EXT-X-STREAM-INF' is found, parse level tag  in group 1\n        const attrs = new AttrList(result[1]);\n        {\n          substituteVariablesInAttributes(parsed, attrs, ['CODECS', 'SUPPLEMENTAL-CODECS', 'ALLOWED-CPC', 'PATHWAY-ID', 'STABLE-VARIANT-ID', 'AUDIO', 'VIDEO', 'SUBTITLES', 'CLOSED-CAPTIONS', 'NAME']);\n        }\n        const uri = substituteVariables(parsed, result[2]) ;\n        const level = {\n          attrs,\n          bitrate: attrs.decimalInteger('BANDWIDTH') || attrs.decimalInteger('AVERAGE-BANDWIDTH'),\n          name: attrs.NAME,\n          url: M3U8Parser.resolve(uri, baseurl)\n        };\n        const resolution = attrs.decimalResolution('RESOLUTION');\n        if (resolution) {\n          level.width = resolution.width;\n          level.height = resolution.height;\n        }\n        setCodecs(attrs.CODECS, level);\n        if (!((_level$unknownCodecs = level.unknownCodecs) != null && _level$unknownCodecs.length)) {\n          levelsWithKnownCodecs.push(level);\n        }\n        parsed.levels.push(level);\n      } else if (result[3]) {\n        const tag = result[3];\n        const attributes = result[4];\n        switch (tag) {\n          case 'SESSION-DATA':\n            {\n              // #EXT-X-SESSION-DATA\n              const sessionAttrs = new AttrList(attributes);\n              {\n                substituteVariablesInAttributes(parsed, sessionAttrs, ['DATA-ID', 'LANGUAGE', 'VALUE', 'URI']);\n              }\n              const dataId = sessionAttrs['DATA-ID'];\n              if (dataId) {\n                if (parsed.sessionData === null) {\n                  parsed.sessionData = {};\n                }\n                parsed.sessionData[dataId] = sessionAttrs;\n              }\n              break;\n            }\n          case 'SESSION-KEY':\n            {\n              // #EXT-X-SESSION-KEY\n              const sessionKey = parseKey(attributes, baseurl, parsed);\n              if (sessionKey.encrypted && sessionKey.isSupported()) {\n                if (parsed.sessionKeys === null) {\n                  parsed.sessionKeys = [];\n                }\n                parsed.sessionKeys.push(sessionKey);\n              } else {\n                logger.warn(`[Keys] Ignoring invalid EXT-X-SESSION-KEY tag: \"${attributes}\"`);\n              }\n              break;\n            }\n          case 'DEFINE':\n            {\n              // #EXT-X-DEFINE\n              {\n                const variableAttributes = new AttrList(attributes);\n                substituteVariablesInAttributes(parsed, variableAttributes, ['NAME', 'VALUE', 'QUERYPARAM']);\n                addVariableDefinition(parsed, variableAttributes, baseurl);\n              }\n              break;\n            }\n          case 'CONTENT-STEERING':\n            {\n              // #EXT-X-CONTENT-STEERING\n              const contentSteeringAttributes = new AttrList(attributes);\n              {\n                substituteVariablesInAttributes(parsed, contentSteeringAttributes, ['SERVER-URI', 'PATHWAY-ID']);\n              }\n              parsed.contentSteering = {\n                uri: M3U8Parser.resolve(contentSteeringAttributes['SERVER-URI'], baseurl),\n                pathwayId: contentSteeringAttributes['PATHWAY-ID'] || '.'\n              };\n              break;\n            }\n          case 'START':\n            {\n              // #EXT-X-START\n              parsed.startTimeOffset = parseStartTimeOffset(attributes);\n              break;\n            }\n        }\n      }\n    }\n    // Filter out levels with unknown codecs if it does not remove all levels\n    const stripUnknownCodecLevels = levelsWithKnownCodecs.length > 0 && levelsWithKnownCodecs.length < parsed.levels.length;\n    parsed.levels = stripUnknownCodecLevels ? levelsWithKnownCodecs : parsed.levels;\n    if (parsed.levels.length === 0) {\n      parsed.playlistParsingError = new Error('no levels found in manifest');\n    }\n    return parsed;\n  }\n  static parseMasterPlaylistMedia(string, baseurl, parsed) {\n    let result;\n    const results = {};\n    const levels = parsed.levels;\n    const groupsByType = {\n      AUDIO: levels.map(level => ({\n        id: level.attrs.AUDIO,\n        audioCodec: level.audioCodec\n      })),\n      SUBTITLES: levels.map(level => ({\n        id: level.attrs.SUBTITLES,\n        textCodec: level.textCodec\n      })),\n      'CLOSED-CAPTIONS': []\n    };\n    let id = 0;\n    MASTER_PLAYLIST_MEDIA_REGEX.lastIndex = 0;\n    while ((result = MASTER_PLAYLIST_MEDIA_REGEX.exec(string)) !== null) {\n      const attrs = new AttrList(result[1]);\n      const type = attrs.TYPE;\n      if (type) {\n        const groups = groupsByType[type];\n        const medias = results[type] || [];\n        results[type] = medias;\n        {\n          substituteVariablesInAttributes(parsed, attrs, ['URI', 'GROUP-ID', 'LANGUAGE', 'ASSOC-LANGUAGE', 'STABLE-RENDITION-ID', 'NAME', 'INSTREAM-ID', 'CHARACTERISTICS', 'CHANNELS']);\n        }\n        const lang = attrs.LANGUAGE;\n        const assocLang = attrs['ASSOC-LANGUAGE'];\n        const channels = attrs.CHANNELS;\n        const characteristics = attrs.CHARACTERISTICS;\n        const instreamId = attrs['INSTREAM-ID'];\n        const media = {\n          attrs,\n          bitrate: 0,\n          id: id++,\n          groupId: attrs['GROUP-ID'] || '',\n          name: attrs.NAME || lang || '',\n          type,\n          default: attrs.bool('DEFAULT'),\n          autoselect: attrs.bool('AUTOSELECT'),\n          forced: attrs.bool('FORCED'),\n          lang,\n          url: attrs.URI ? M3U8Parser.resolve(attrs.URI, baseurl) : ''\n        };\n        if (assocLang) {\n          media.assocLang = assocLang;\n        }\n        if (channels) {\n          media.channels = channels;\n        }\n        if (characteristics) {\n          media.characteristics = characteristics;\n        }\n        if (instreamId) {\n          media.instreamId = instreamId;\n        }\n        if (groups != null && groups.length) {\n          // If there are audio or text groups signalled in the manifest, let's look for a matching codec string for this track\n          // If we don't find the track signalled, lets use the first audio groups codec we have\n          // Acting as a best guess\n          const groupCodec = M3U8Parser.findGroup(groups, media.groupId) || groups[0];\n          assignCodec(media, groupCodec, 'audioCodec');\n          assignCodec(media, groupCodec, 'textCodec');\n        }\n        medias.push(media);\n      }\n    }\n    return results;\n  }\n  static parseLevelPlaylist(string, baseurl, id, type, levelUrlId, multivariantVariableList) {\n    const level = new LevelDetails(baseurl);\n    const fragments = level.fragments;\n    // The most recent init segment seen (applies to all subsequent segments)\n    let currentInitSegment = null;\n    let currentSN = 0;\n    let currentPart = 0;\n    let totalduration = 0;\n    let discontinuityCounter = 0;\n    let prevFrag = null;\n    let frag = new Fragment(type, baseurl);\n    let result;\n    let i;\n    let levelkeys;\n    let firstPdtIndex = -1;\n    let createNextFrag = false;\n    let nextByteRange = null;\n    LEVEL_PLAYLIST_REGEX_FAST.lastIndex = 0;\n    level.m3u8 = string;\n    level.hasVariableRefs = hasVariableReferences(string) ;\n    while ((result = LEVEL_PLAYLIST_REGEX_FAST.exec(string)) !== null) {\n      if (createNextFrag) {\n        createNextFrag = false;\n        frag = new Fragment(type, baseurl);\n        // setup the next fragment for part loading\n        frag.start = totalduration;\n        frag.sn = currentSN;\n        frag.cc = discontinuityCounter;\n        frag.level = id;\n        if (currentInitSegment) {\n          frag.initSegment = currentInitSegment;\n          frag.rawProgramDateTime = currentInitSegment.rawProgramDateTime;\n          currentInitSegment.rawProgramDateTime = null;\n          if (nextByteRange) {\n            frag.setByteRange(nextByteRange);\n            nextByteRange = null;\n          }\n        }\n      }\n      const duration = result[1];\n      if (duration) {\n        // INF\n        frag.duration = parseFloat(duration);\n        // avoid sliced strings    https://github.com/video-dev/hls.js/issues/939\n        const title = (' ' + result[2]).slice(1);\n        frag.title = title || null;\n        frag.tagList.push(title ? ['INF', duration, title] : ['INF', duration]);\n      } else if (result[3]) {\n        // url\n        if (isFiniteNumber(frag.duration)) {\n          frag.start = totalduration;\n          if (levelkeys) {\n            setFragLevelKeys(frag, levelkeys, level);\n          }\n          frag.sn = currentSN;\n          frag.level = id;\n          frag.cc = discontinuityCounter;\n          fragments.push(frag);\n          // avoid sliced strings    https://github.com/video-dev/hls.js/issues/939\n          const uri = (' ' + result[3]).slice(1);\n          frag.relurl = substituteVariables(level, uri) ;\n          assignProgramDateTime(frag, prevFrag);\n          prevFrag = frag;\n          totalduration += frag.duration;\n          currentSN++;\n          currentPart = 0;\n          createNextFrag = true;\n        }\n      } else if (result[4]) {\n        // X-BYTERANGE\n        const data = (' ' + result[4]).slice(1);\n        if (prevFrag) {\n          frag.setByteRange(data, prevFrag);\n        } else {\n          frag.setByteRange(data);\n        }\n      } else if (result[5]) {\n        // PROGRAM-DATE-TIME\n        // avoid sliced strings    https://github.com/video-dev/hls.js/issues/939\n        frag.rawProgramDateTime = (' ' + result[5]).slice(1);\n        frag.tagList.push(['PROGRAM-DATE-TIME', frag.rawProgramDateTime]);\n        if (firstPdtIndex === -1) {\n          firstPdtIndex = fragments.length;\n        }\n      } else {\n        result = result[0].match(LEVEL_PLAYLIST_REGEX_SLOW);\n        if (!result) {\n          logger.warn('No matches on slow regex match for level playlist!');\n          continue;\n        }\n        for (i = 1; i < result.length; i++) {\n          if (typeof result[i] !== 'undefined') {\n            break;\n          }\n        }\n\n        // avoid sliced strings    https://github.com/video-dev/hls.js/issues/939\n        const tag = (' ' + result[i]).slice(1);\n        const value1 = (' ' + result[i + 1]).slice(1);\n        const value2 = result[i + 2] ? (' ' + result[i + 2]).slice(1) : '';\n        switch (tag) {\n          case 'PLAYLIST-TYPE':\n            level.type = value1.toUpperCase();\n            break;\n          case 'MEDIA-SEQUENCE':\n            currentSN = level.startSN = parseInt(value1);\n            break;\n          case 'SKIP':\n            {\n              const skipAttrs = new AttrList(value1);\n              {\n                substituteVariablesInAttributes(level, skipAttrs, ['RECENTLY-REMOVED-DATERANGES']);\n              }\n              const skippedSegments = skipAttrs.decimalInteger('SKIPPED-SEGMENTS');\n              if (isFiniteNumber(skippedSegments)) {\n                level.skippedSegments = skippedSegments;\n                // This will result in fragments[] containing undefined values, which we will fill in with `mergeDetails`\n                for (let _i = skippedSegments; _i--;) {\n                  fragments.unshift(null);\n                }\n                currentSN += skippedSegments;\n              }\n              const recentlyRemovedDateranges = skipAttrs.enumeratedString('RECENTLY-REMOVED-DATERANGES');\n              if (recentlyRemovedDateranges) {\n                level.recentlyRemovedDateranges = recentlyRemovedDateranges.split('\\t');\n              }\n              break;\n            }\n          case 'TARGETDURATION':\n            level.targetduration = Math.max(parseInt(value1), 1);\n            break;\n          case 'VERSION':\n            level.version = parseInt(value1);\n            break;\n          case 'INDEPENDENT-SEGMENTS':\n          case 'EXTM3U':\n            break;\n          case 'ENDLIST':\n            level.live = false;\n            break;\n          case '#':\n            if (value1 || value2) {\n              frag.tagList.push(value2 ? [value1, value2] : [value1]);\n            }\n            break;\n          case 'DISCONTINUITY':\n            discontinuityCounter++;\n            frag.tagList.push(['DIS']);\n            break;\n          case 'GAP':\n            frag.gap = true;\n            frag.tagList.push([tag]);\n            break;\n          case 'BITRATE':\n            frag.tagList.push([tag, value1]);\n            break;\n          case 'DATERANGE':\n            {\n              const dateRangeAttr = new AttrList(value1);\n              {\n                substituteVariablesInAttributes(level, dateRangeAttr, ['ID', 'CLASS', 'START-DATE', 'END-DATE', 'SCTE35-CMD', 'SCTE35-OUT', 'SCTE35-IN']);\n                substituteVariablesInAttributes(level, dateRangeAttr, dateRangeAttr.clientAttrs);\n              }\n              const dateRange = new DateRange(dateRangeAttr, level.dateRanges[dateRangeAttr.ID]);\n              if (dateRange.isValid || level.skippedSegments) {\n                level.dateRanges[dateRange.id] = dateRange;\n              } else {\n                logger.warn(`Ignoring invalid DATERANGE tag: \"${value1}\"`);\n              }\n              // Add to fragment tag list for backwards compatibility (< v1.2.0)\n              frag.tagList.push(['EXT-X-DATERANGE', value1]);\n              break;\n            }\n          case 'DEFINE':\n            {\n              {\n                const variableAttributes = new AttrList(value1);\n                substituteVariablesInAttributes(level, variableAttributes, ['NAME', 'VALUE', 'IMPORT', 'QUERYPARAM']);\n                if ('IMPORT' in variableAttributes) {\n                  importVariableDefinition(level, variableAttributes, multivariantVariableList);\n                } else {\n                  addVariableDefinition(level, variableAttributes, baseurl);\n                }\n              }\n              break;\n            }\n          case 'DISCONTINUITY-SEQUENCE':\n            discontinuityCounter = parseInt(value1);\n            break;\n          case 'KEY':\n            {\n              const levelKey = parseKey(value1, baseurl, level);\n              if (levelKey.isSupported()) {\n                if (levelKey.method === 'NONE') {\n                  levelkeys = undefined;\n                  break;\n                }\n                if (!levelkeys) {\n                  levelkeys = {};\n                }\n                if (levelkeys[levelKey.keyFormat]) {\n                  levelkeys = _extends({}, levelkeys);\n                }\n                levelkeys[levelKey.keyFormat] = levelKey;\n              } else {\n                logger.warn(`[Keys] Ignoring invalid EXT-X-KEY tag: \"${value1}\"`);\n              }\n              break;\n            }\n          case 'START':\n            level.startTimeOffset = parseStartTimeOffset(value1);\n            break;\n          case 'MAP':\n            {\n              const mapAttrs = new AttrList(value1);\n              {\n                substituteVariablesInAttributes(level, mapAttrs, ['BYTERANGE', 'URI']);\n              }\n              if (frag.duration) {\n                // Initial segment tag is after segment duration tag.\n                //   #EXTINF: 6.0\n                //   #EXT-X-MAP:URI=\"init.mp4\n                const init = new Fragment(type, baseurl);\n                setInitSegment(init, mapAttrs, id, levelkeys);\n                currentInitSegment = init;\n                frag.initSegment = currentInitSegment;\n                if (currentInitSegment.rawProgramDateTime && !frag.rawProgramDateTime) {\n                  frag.rawProgramDateTime = currentInitSegment.rawProgramDateTime;\n                }\n              } else {\n                // Initial segment tag is before segment duration tag\n                // Handle case where EXT-X-MAP is declared after EXT-X-BYTERANGE\n                const end = frag.byteRangeEndOffset;\n                if (end) {\n                  const start = frag.byteRangeStartOffset;\n                  nextByteRange = `${end - start}@${start}`;\n                } else {\n                  nextByteRange = null;\n                }\n                setInitSegment(frag, mapAttrs, id, levelkeys);\n                currentInitSegment = frag;\n                createNextFrag = true;\n              }\n              break;\n            }\n          case 'SERVER-CONTROL':\n            {\n              const serverControlAttrs = new AttrList(value1);\n              level.canBlockReload = serverControlAttrs.bool('CAN-BLOCK-RELOAD');\n              level.canSkipUntil = serverControlAttrs.optionalFloat('CAN-SKIP-UNTIL', 0);\n              level.canSkipDateRanges = level.canSkipUntil > 0 && serverControlAttrs.bool('CAN-SKIP-DATERANGES');\n              level.partHoldBack = serverControlAttrs.optionalFloat('PART-HOLD-BACK', 0);\n              level.holdBack = serverControlAttrs.optionalFloat('HOLD-BACK', 0);\n              break;\n            }\n          case 'PART-INF':\n            {\n              const partInfAttrs = new AttrList(value1);\n              level.partTarget = partInfAttrs.decimalFloatingPoint('PART-TARGET');\n              break;\n            }\n          case 'PART':\n            {\n              let partList = level.partList;\n              if (!partList) {\n                partList = level.partList = [];\n              }\n              const previousFragmentPart = currentPart > 0 ? partList[partList.length - 1] : undefined;\n              const index = currentPart++;\n              const partAttrs = new AttrList(value1);\n              {\n                substituteVariablesInAttributes(level, partAttrs, ['BYTERANGE', 'URI']);\n              }\n              const part = new Part(partAttrs, frag, baseurl, index, previousFragmentPart);\n              partList.push(part);\n              frag.duration += part.duration;\n              break;\n            }\n          case 'PRELOAD-HINT':\n            {\n              const preloadHintAttrs = new AttrList(value1);\n              {\n                substituteVariablesInAttributes(level, preloadHintAttrs, ['URI']);\n              }\n              level.preloadHint = preloadHintAttrs;\n              break;\n            }\n          case 'RENDITION-REPORT':\n            {\n              const renditionReportAttrs = new AttrList(value1);\n              {\n                substituteVariablesInAttributes(level, renditionReportAttrs, ['URI']);\n              }\n              level.renditionReports = level.renditionReports || [];\n              level.renditionReports.push(renditionReportAttrs);\n              break;\n            }\n          default:\n            logger.warn(`line parsed but not handled: ${result}`);\n            break;\n        }\n      }\n    }\n    if (prevFrag && !prevFrag.relurl) {\n      fragments.pop();\n      totalduration -= prevFrag.duration;\n      if (level.partList) {\n        level.fragmentHint = prevFrag;\n      }\n    } else if (level.partList) {\n      assignProgramDateTime(frag, prevFrag);\n      frag.cc = discontinuityCounter;\n      level.fragmentHint = frag;\n      if (levelkeys) {\n        setFragLevelKeys(frag, levelkeys, level);\n      }\n    }\n    const fragmentLength = fragments.length;\n    const firstFragment = fragments[0];\n    const lastFragment = fragments[fragmentLength - 1];\n    totalduration += level.skippedSegments * level.targetduration;\n    if (totalduration > 0 && fragmentLength && lastFragment) {\n      level.averagetargetduration = totalduration / fragmentLength;\n      const lastSn = lastFragment.sn;\n      level.endSN = lastSn !== 'initSegment' ? lastSn : 0;\n      if (!level.live) {\n        lastFragment.endList = true;\n      }\n      if (firstFragment) {\n        level.startCC = firstFragment.cc;\n      }\n    } else {\n      level.endSN = 0;\n      level.startCC = 0;\n    }\n    if (level.fragmentHint) {\n      totalduration += level.fragmentHint.duration;\n    }\n    level.totalduration = totalduration;\n    level.endCC = discontinuityCounter;\n\n    /**\n     * Backfill any missing PDT values\n     * \"If the first EXT-X-PROGRAM-DATE-TIME tag in a Playlist appears after\n     * one or more Media Segment URIs, the client SHOULD extrapolate\n     * backward from that tag (using EXTINF durations and/or media\n     * timestamps) to associate dates with those segments.\"\n     * We have already extrapolated forward, but all fragments up to the first instance of PDT do not have their PDTs\n     * computed.\n     */\n    if (firstPdtIndex > 0) {\n      backfillProgramDateTimes(fragments, firstPdtIndex);\n    }\n    return level;\n  }\n}\nfunction parseKey(keyTagAttributes, baseurl, parsed) {\n  var _keyAttrs$METHOD, _keyAttrs$KEYFORMAT;\n  // https://tools.ietf.org/html/rfc8216#section-4.3.2.4\n  const keyAttrs = new AttrList(keyTagAttributes);\n  {\n    substituteVariablesInAttributes(parsed, keyAttrs, ['KEYFORMAT', 'KEYFORMATVERSIONS', 'URI', 'IV', 'URI']);\n  }\n  const decryptmethod = (_keyAttrs$METHOD = keyAttrs.METHOD) != null ? _keyAttrs$METHOD : '';\n  const decrypturi = keyAttrs.URI;\n  const decryptiv = keyAttrs.hexadecimalInteger('IV');\n  const decryptkeyformatversions = keyAttrs.KEYFORMATVERSIONS;\n  // From RFC: This attribute is OPTIONAL; its absence indicates an implicit value of \"identity\".\n  const decryptkeyformat = (_keyAttrs$KEYFORMAT = keyAttrs.KEYFORMAT) != null ? _keyAttrs$KEYFORMAT : 'identity';\n  if (decrypturi && keyAttrs.IV && !decryptiv) {\n    logger.error(`Invalid IV: ${keyAttrs.IV}`);\n  }\n  // If decrypturi is a URI with a scheme, then baseurl will be ignored\n  // No uri is allowed when METHOD is NONE\n  const resolvedUri = decrypturi ? M3U8Parser.resolve(decrypturi, baseurl) : '';\n  const keyFormatVersions = (decryptkeyformatversions ? decryptkeyformatversions : '1').split('/').map(Number).filter(Number.isFinite);\n  return new LevelKey(decryptmethod, resolvedUri, decryptkeyformat, keyFormatVersions, decryptiv);\n}\nfunction parseStartTimeOffset(startAttributes) {\n  const startAttrs = new AttrList(startAttributes);\n  const startTimeOffset = startAttrs.decimalFloatingPoint('TIME-OFFSET');\n  if (isFiniteNumber(startTimeOffset)) {\n    return startTimeOffset;\n  }\n  return null;\n}\nfunction setCodecs(codecsAttributeValue, level) {\n  let codecs = (codecsAttributeValue || '').split(/[ ,]+/).filter(c => c);\n  ['video', 'audio', 'text'].forEach(type => {\n    const filtered = codecs.filter(codec => isCodecType(codec, type));\n    if (filtered.length) {\n      // Comma separated list of all codecs for type\n      level[`${type}Codec`] = filtered.join(',');\n      // Remove known codecs so that only unknownCodecs are left after iterating through each type\n      codecs = codecs.filter(codec => filtered.indexOf(codec) === -1);\n    }\n  });\n  level.unknownCodecs = codecs;\n}\nfunction assignCodec(media, groupItem, codecProperty) {\n  const codecValue = groupItem[codecProperty];\n  if (codecValue) {\n    media[codecProperty] = codecValue;\n  }\n}\nfunction backfillProgramDateTimes(fragments, firstPdtIndex) {\n  let fragPrev = fragments[firstPdtIndex];\n  for (let i = firstPdtIndex; i--;) {\n    const frag = fragments[i];\n    // Exit on delta-playlist skipped segments\n    if (!frag) {\n      return;\n    }\n    frag.programDateTime = fragPrev.programDateTime - frag.duration * 1000;\n    fragPrev = frag;\n  }\n}\nfunction assignProgramDateTime(frag, prevFrag) {\n  if (frag.rawProgramDateTime) {\n    frag.programDateTime = Date.parse(frag.rawProgramDateTime);\n  } else if (prevFrag != null && prevFrag.programDateTime) {\n    frag.programDateTime = prevFrag.endProgramDateTime;\n  }\n  if (!isFiniteNumber(frag.programDateTime)) {\n    frag.programDateTime = null;\n    frag.rawProgramDateTime = null;\n  }\n}\nfunction setInitSegment(frag, mapAttrs, id, levelkeys) {\n  frag.relurl = mapAttrs.URI;\n  if (mapAttrs.BYTERANGE) {\n    frag.setByteRange(mapAttrs.BYTERANGE);\n  }\n  frag.level = id;\n  frag.sn = 'initSegment';\n  if (levelkeys) {\n    frag.levelkeys = levelkeys;\n  }\n  frag.initSegment = null;\n}\nfunction setFragLevelKeys(frag, levelkeys, level) {\n  frag.levelkeys = levelkeys;\n  const {\n    encryptedFragments\n  } = level;\n  if ((!encryptedFragments.length || encryptedFragments[encryptedFragments.length - 1].levelkeys !== levelkeys) && Object.keys(levelkeys).some(format => levelkeys[format].isCommonEncryption)) {\n    encryptedFragments.push(frag);\n  }\n}\n\nvar PlaylistContextType = {\n  MANIFEST: \"manifest\",\n  LEVEL: \"level\",\n  AUDIO_TRACK: \"audioTrack\",\n  SUBTITLE_TRACK: \"subtitleTrack\"\n};\nvar PlaylistLevelType = {\n  MAIN: \"main\",\n  AUDIO: \"audio\",\n  SUBTITLE: \"subtitle\"\n};\n\nfunction mapContextToLevelType(context) {\n  const {\n    type\n  } = context;\n  switch (type) {\n    case PlaylistContextType.AUDIO_TRACK:\n      return PlaylistLevelType.AUDIO;\n    case PlaylistContextType.SUBTITLE_TRACK:\n      return PlaylistLevelType.SUBTITLE;\n    default:\n      return PlaylistLevelType.MAIN;\n  }\n}\nfunction getResponseUrl(response, context) {\n  let url = response.url;\n  // responseURL not supported on some browsers (it is used to detect URL redirection)\n  // data-uri mode also not supported (but no need to detect redirection)\n  if (url === undefined || url.indexOf('data:') === 0) {\n    // fallback to initial URL\n    url = context.url;\n  }\n  return url;\n}\nclass PlaylistLoader {\n  constructor(hls) {\n    this.hls = void 0;\n    this.loaders = Object.create(null);\n    this.variableList = null;\n    this.hls = hls;\n    this.registerListeners();\n  }\n  startLoad(startPosition) {}\n  stopLoad() {\n    this.destroyInternalLoaders();\n  }\n  registerListeners() {\n    const {\n      hls\n    } = this;\n    hls.on(Events.MANIFEST_LOADING, this.onManifestLoading, this);\n    hls.on(Events.LEVEL_LOADING, this.onLevelLoading, this);\n    hls.on(Events.AUDIO_TRACK_LOADING, this.onAudioTrackLoading, this);\n    hls.on(Events.SUBTITLE_TRACK_LOADING, this.onSubtitleTrackLoading, this);\n  }\n  unregisterListeners() {\n    const {\n      hls\n    } = this;\n    hls.off(Events.MANIFEST_LOADING, this.onManifestLoading, this);\n    hls.off(Events.LEVEL_LOADING, this.onLevelLoading, this);\n    hls.off(Events.AUDIO_TRACK_LOADING, this.onAudioTrackLoading, this);\n    hls.off(Events.SUBTITLE_TRACK_LOADING, this.onSubtitleTrackLoading, this);\n  }\n\n  /**\n   * Returns defaults or configured loader-type overloads (pLoader and loader config params)\n   */\n  createInternalLoader(context) {\n    const config = this.hls.config;\n    const PLoader = config.pLoader;\n    const Loader = config.loader;\n    const InternalLoader = PLoader || Loader;\n    const loader = new InternalLoader(config);\n    this.loaders[context.type] = loader;\n    return loader;\n  }\n  getInternalLoader(context) {\n    return this.loaders[context.type];\n  }\n  resetInternalLoader(contextType) {\n    if (this.loaders[contextType]) {\n      delete this.loaders[contextType];\n    }\n  }\n\n  /**\n   * Call `destroy` on all internal loader instances mapped (one per context type)\n   */\n  destroyInternalLoaders() {\n    for (const contextType in this.loaders) {\n      const loader = this.loaders[contextType];\n      if (loader) {\n        loader.destroy();\n      }\n      this.resetInternalLoader(contextType);\n    }\n  }\n  destroy() {\n    this.variableList = null;\n    this.unregisterListeners();\n    this.destroyInternalLoaders();\n  }\n  onManifestLoading(event, data) {\n    const {\n      url\n    } = data;\n    this.variableList = null;\n    this.load({\n      id: null,\n      level: 0,\n      responseType: 'text',\n      type: PlaylistContextType.MANIFEST,\n      url,\n      deliveryDirectives: null\n    });\n  }\n  onLevelLoading(event, data) {\n    const {\n      id,\n      level,\n      pathwayId,\n      url,\n      deliveryDirectives\n    } = data;\n    this.load({\n      id,\n      level,\n      pathwayId,\n      responseType: 'text',\n      type: PlaylistContextType.LEVEL,\n      url,\n      deliveryDirectives\n    });\n  }\n  onAudioTrackLoading(event, data) {\n    const {\n      id,\n      groupId,\n      url,\n      deliveryDirectives\n    } = data;\n    this.load({\n      id,\n      groupId,\n      level: null,\n      responseType: 'text',\n      type: PlaylistContextType.AUDIO_TRACK,\n      url,\n      deliveryDirectives\n    });\n  }\n  onSubtitleTrackLoading(event, data) {\n    const {\n      id,\n      groupId,\n      url,\n      deliveryDirectives\n    } = data;\n    this.load({\n      id,\n      groupId,\n      level: null,\n      responseType: 'text',\n      type: PlaylistContextType.SUBTITLE_TRACK,\n      url,\n      deliveryDirectives\n    });\n  }\n  load(context) {\n    var _context$deliveryDire;\n    const config = this.hls.config;\n\n    // logger.debug(`[playlist-loader]: Loading playlist of type ${context.type}, level: ${context.level}, id: ${context.id}`);\n\n    // Check if a loader for this context already exists\n    let loader = this.getInternalLoader(context);\n    if (loader) {\n      const loaderContext = loader.context;\n      if (loaderContext && loaderContext.url === context.url && loaderContext.level === context.level) {\n        // same URL can't overlap\n        logger.trace('[playlist-loader]: playlist request ongoing');\n        return;\n      }\n      logger.log(`[playlist-loader]: aborting previous loader for type: ${context.type}`);\n      loader.abort();\n    }\n\n    // apply different configs for retries depending on\n    // context (manifest, level, audio/subs playlist)\n    let loadPolicy;\n    if (context.type === PlaylistContextType.MANIFEST) {\n      loadPolicy = config.manifestLoadPolicy.default;\n    } else {\n      loadPolicy = _extends({}, config.playlistLoadPolicy.default, {\n        timeoutRetry: null,\n        errorRetry: null\n      });\n    }\n    loader = this.createInternalLoader(context);\n\n    // Override level/track timeout for LL-HLS requests\n    // (the default of 10000ms is counter productive to blocking playlist reload requests)\n    if (isFiniteNumber((_context$deliveryDire = context.deliveryDirectives) == null ? void 0 : _context$deliveryDire.part)) {\n      let levelDetails;\n      if (context.type === PlaylistContextType.LEVEL && context.level !== null) {\n        levelDetails = this.hls.levels[context.level].details;\n      } else if (context.type === PlaylistContextType.AUDIO_TRACK && context.id !== null) {\n        levelDetails = this.hls.audioTracks[context.id].details;\n      } else if (context.type === PlaylistContextType.SUBTITLE_TRACK && context.id !== null) {\n        levelDetails = this.hls.subtitleTracks[context.id].details;\n      }\n      if (levelDetails) {\n        const partTarget = levelDetails.partTarget;\n        const targetDuration = levelDetails.targetduration;\n        if (partTarget && targetDuration) {\n          const maxLowLatencyPlaylistRefresh = Math.max(partTarget * 3, targetDuration * 0.8) * 1000;\n          loadPolicy = _extends({}, loadPolicy, {\n            maxTimeToFirstByteMs: Math.min(maxLowLatencyPlaylistRefresh, loadPolicy.maxTimeToFirstByteMs),\n            maxLoadTimeMs: Math.min(maxLowLatencyPlaylistRefresh, loadPolicy.maxTimeToFirstByteMs)\n          });\n        }\n      }\n    }\n    const legacyRetryCompatibility = loadPolicy.errorRetry || loadPolicy.timeoutRetry || {};\n    const loaderConfig = {\n      loadPolicy,\n      timeout: loadPolicy.maxLoadTimeMs,\n      maxRetry: legacyRetryCompatibility.maxNumRetry || 0,\n      retryDelay: legacyRetryCompatibility.retryDelayMs || 0,\n      maxRetryDelay: legacyRetryCompatibility.maxRetryDelayMs || 0\n    };\n    const loaderCallbacks = {\n      onSuccess: (response, stats, context, networkDetails) => {\n        const loader = this.getInternalLoader(context);\n        this.resetInternalLoader(context.type);\n        const string = response.data;\n\n        // Validate if it is an M3U8 at all\n        if (string.indexOf('#EXTM3U') !== 0) {\n          this.handleManifestParsingError(response, context, new Error('no EXTM3U delimiter'), networkDetails || null, stats);\n          return;\n        }\n        stats.parsing.start = performance.now();\n        if (M3U8Parser.isMediaPlaylist(string)) {\n          this.handleTrackOrLevelPlaylist(response, stats, context, networkDetails || null, loader);\n        } else {\n          this.handleMasterPlaylist(response, stats, context, networkDetails);\n        }\n      },\n      onError: (response, context, networkDetails, stats) => {\n        this.handleNetworkError(context, networkDetails, false, response, stats);\n      },\n      onTimeout: (stats, context, networkDetails) => {\n        this.handleNetworkError(context, networkDetails, true, undefined, stats);\n      }\n    };\n\n    // logger.debug(`[playlist-loader]: Calling internal loader delegate for URL: ${context.url}`);\n\n    loader.load(context, loaderConfig, loaderCallbacks);\n  }\n  handleMasterPlaylist(response, stats, context, networkDetails) {\n    const hls = this.hls;\n    const string = response.data;\n    const url = getResponseUrl(response, context);\n    const parsedResult = M3U8Parser.parseMasterPlaylist(string, url);\n    if (parsedResult.playlistParsingError) {\n      this.handleManifestParsingError(response, context, parsedResult.playlistParsingError, networkDetails, stats);\n      return;\n    }\n    const {\n      contentSteering,\n      levels,\n      sessionData,\n      sessionKeys,\n      startTimeOffset,\n      variableList\n    } = parsedResult;\n    this.variableList = variableList;\n    const {\n      AUDIO: audioTracks = [],\n      SUBTITLES: subtitles,\n      'CLOSED-CAPTIONS': captions\n    } = M3U8Parser.parseMasterPlaylistMedia(string, url, parsedResult);\n    if (audioTracks.length) {\n      // check if we have found an audio track embedded in main playlist (audio track without URI attribute)\n      const embeddedAudioFound = audioTracks.some(audioTrack => !audioTrack.url);\n\n      // if no embedded audio track defined, but audio codec signaled in quality level,\n      // we need to signal this main audio track this could happen with playlists with\n      // alt audio rendition in which quality levels (main)\n      // contains both audio+video. but with mixed audio track not signaled\n      if (!embeddedAudioFound && levels[0].audioCodec && !levels[0].attrs.AUDIO) {\n        logger.log('[playlist-loader]: audio codec signaled in quality level, but no embedded audio track signaled, create one');\n        audioTracks.unshift({\n          type: 'main',\n          name: 'main',\n          groupId: 'main',\n          default: false,\n          autoselect: false,\n          forced: false,\n          id: -1,\n          attrs: new AttrList({}),\n          bitrate: 0,\n          url: ''\n        });\n      }\n    }\n    hls.trigger(Events.MANIFEST_LOADED, {\n      levels,\n      audioTracks,\n      subtitles,\n      captions,\n      contentSteering,\n      url,\n      stats,\n      networkDetails,\n      sessionData,\n      sessionKeys,\n      startTimeOffset,\n      variableList\n    });\n  }\n  handleTrackOrLevelPlaylist(response, stats, context, networkDetails, loader) {\n    const hls = this.hls;\n    const {\n      id,\n      level,\n      type\n    } = context;\n    const url = getResponseUrl(response, context);\n    const levelUrlId = 0;\n    const levelId = isFiniteNumber(level) ? level : isFiniteNumber(id) ? id : 0;\n    const levelType = mapContextToLevelType(context);\n    const levelDetails = M3U8Parser.parseLevelPlaylist(response.data, url, levelId, levelType, levelUrlId, this.variableList);\n\n    // We have done our first request (Manifest-type) and receive\n    // not a master playlist but a chunk-list (track/level)\n    // We fire the manifest-loaded event anyway with the parsed level-details\n    // by creating a single-level structure for it.\n    if (type === PlaylistContextType.MANIFEST) {\n      const singleLevel = {\n        attrs: new AttrList({}),\n        bitrate: 0,\n        details: levelDetails,\n        name: '',\n        url\n      };\n      hls.trigger(Events.MANIFEST_LOADED, {\n        levels: [singleLevel],\n        audioTracks: [],\n        url,\n        stats,\n        networkDetails,\n        sessionData: null,\n        sessionKeys: null,\n        contentSteering: null,\n        startTimeOffset: null,\n        variableList: null\n      });\n    }\n\n    // save parsing time\n    stats.parsing.end = performance.now();\n\n    // extend the context with the new levelDetails property\n    context.levelDetails = levelDetails;\n    this.handlePlaylistLoaded(levelDetails, response, stats, context, networkDetails, loader);\n  }\n  handleManifestParsingError(response, context, error, networkDetails, stats) {\n    this.hls.trigger(Events.ERROR, {\n      type: ErrorTypes.NETWORK_ERROR,\n      details: ErrorDetails.MANIFEST_PARSING_ERROR,\n      fatal: context.type === PlaylistContextType.MANIFEST,\n      url: response.url,\n      err: error,\n      error,\n      reason: error.message,\n      response,\n      context,\n      networkDetails,\n      stats\n    });\n  }\n  handleNetworkError(context, networkDetails, timeout = false, response, stats) {\n    let message = `A network ${timeout ? 'timeout' : 'error' + (response ? ' (status ' + response.code + ')' : '')} occurred while loading ${context.type}`;\n    if (context.type === PlaylistContextType.LEVEL) {\n      message += `: ${context.level} id: ${context.id}`;\n    } else if (context.type === PlaylistContextType.AUDIO_TRACK || context.type === PlaylistContextType.SUBTITLE_TRACK) {\n      message += ` id: ${context.id} group-id: \"${context.groupId}\"`;\n    }\n    const error = new Error(message);\n    logger.warn(`[playlist-loader]: ${message}`);\n    let details = ErrorDetails.UNKNOWN;\n    let fatal = false;\n    const loader = this.getInternalLoader(context);\n    switch (context.type) {\n      case PlaylistContextType.MANIFEST:\n        details = timeout ? ErrorDetails.MANIFEST_LOAD_TIMEOUT : ErrorDetails.MANIFEST_LOAD_ERROR;\n        fatal = true;\n        break;\n      case PlaylistContextType.LEVEL:\n        details = timeout ? ErrorDetails.LEVEL_LOAD_TIMEOUT : ErrorDetails.LEVEL_LOAD_ERROR;\n        fatal = false;\n        break;\n      case PlaylistContextType.AUDIO_TRACK:\n        details = timeout ? ErrorDetails.AUDIO_TRACK_LOAD_TIMEOUT : ErrorDetails.AUDIO_TRACK_LOAD_ERROR;\n        fatal = false;\n        break;\n      case PlaylistContextType.SUBTITLE_TRACK:\n        details = timeout ? ErrorDetails.SUBTITLE_TRACK_LOAD_TIMEOUT : ErrorDetails.SUBTITLE_LOAD_ERROR;\n        fatal = false;\n        break;\n    }\n    if (loader) {\n      this.resetInternalLoader(context.type);\n    }\n    const errorData = {\n      type: ErrorTypes.NETWORK_ERROR,\n      details,\n      fatal,\n      url: context.url,\n      loader,\n      context,\n      error,\n      networkDetails,\n      stats\n    };\n    if (response) {\n      const url = (networkDetails == null ? void 0 : networkDetails.url) || context.url;\n      errorData.response = _objectSpread2({\n        url,\n        data: undefined\n      }, response);\n    }\n    this.hls.trigger(Events.ERROR, errorData);\n  }\n  handlePlaylistLoaded(levelDetails, response, stats, context, networkDetails, loader) {\n    const hls = this.hls;\n    const {\n      type,\n      level,\n      id,\n      groupId,\n      deliveryDirectives\n    } = context;\n    const url = getResponseUrl(response, context);\n    const parent = mapContextToLevelType(context);\n    const levelIndex = typeof context.level === 'number' && parent === PlaylistLevelType.MAIN ? level : undefined;\n    if (!levelDetails.fragments.length) {\n      const _error = new Error('No Segments found in Playlist');\n      hls.trigger(Events.ERROR, {\n        type: ErrorTypes.NETWORK_ERROR,\n        details: ErrorDetails.LEVEL_EMPTY_ERROR,\n        fatal: false,\n        url,\n        error: _error,\n        reason: _error.message,\n        response,\n        context,\n        level: levelIndex,\n        parent,\n        networkDetails,\n        stats\n      });\n      return;\n    }\n    if (!levelDetails.targetduration) {\n      levelDetails.playlistParsingError = new Error('Missing Target Duration');\n    }\n    const error = levelDetails.playlistParsingError;\n    if (error) {\n      hls.trigger(Events.ERROR, {\n        type: ErrorTypes.NETWORK_ERROR,\n        details: ErrorDetails.LEVEL_PARSING_ERROR,\n        fatal: false,\n        url,\n        error,\n        reason: error.message,\n        response,\n        context,\n        level: levelIndex,\n        parent,\n        networkDetails,\n        stats\n      });\n      return;\n    }\n    if (levelDetails.live && loader) {\n      if (loader.getCacheAge) {\n        levelDetails.ageHeader = loader.getCacheAge() || 0;\n      }\n      if (!loader.getCacheAge || isNaN(levelDetails.ageHeader)) {\n        levelDetails.ageHeader = 0;\n      }\n    }\n    switch (type) {\n      case PlaylistContextType.MANIFEST:\n      case PlaylistContextType.LEVEL:\n        hls.trigger(Events.LEVEL_LOADED, {\n          details: levelDetails,\n          level: levelIndex || 0,\n          id: id || 0,\n          stats,\n          networkDetails,\n          deliveryDirectives\n        });\n        break;\n      case PlaylistContextType.AUDIO_TRACK:\n        hls.trigger(Events.AUDIO_TRACK_LOADED, {\n          details: levelDetails,\n          id: id || 0,\n          groupId: groupId || '',\n          stats,\n          networkDetails,\n          deliveryDirectives\n        });\n        break;\n      case PlaylistContextType.SUBTITLE_TRACK:\n        hls.trigger(Events.SUBTITLE_TRACK_LOADED, {\n          details: levelDetails,\n          id: id || 0,\n          groupId: groupId || '',\n          stats,\n          networkDetails,\n          deliveryDirectives\n        });\n        break;\n    }\n  }\n}\n\nfunction sendAddTrackEvent(track, videoEl) {\n  let event;\n  try {\n    event = new Event('addtrack');\n  } catch (err) {\n    // for IE11\n    event = document.createEvent('Event');\n    event.initEvent('addtrack', false, false);\n  }\n  event.track = track;\n  videoEl.dispatchEvent(event);\n}\nfunction addCueToTrack(track, cue) {\n  // Sometimes there are cue overlaps on segmented vtts so the same\n  // cue can appear more than once in different vtt files.\n  // This avoid showing duplicated cues with same timecode and text.\n  const mode = track.mode;\n  if (mode === 'disabled') {\n    track.mode = 'hidden';\n  }\n  if (track.cues && !track.cues.getCueById(cue.id)) {\n    try {\n      track.addCue(cue);\n      if (!track.cues.getCueById(cue.id)) {\n        throw new Error(`addCue is failed for: ${cue}`);\n      }\n    } catch (err) {\n      logger.debug(`[texttrack-utils]: ${err}`);\n      try {\n        const textTrackCue = new self.TextTrackCue(cue.startTime, cue.endTime, cue.text);\n        textTrackCue.id = cue.id;\n        track.addCue(textTrackCue);\n      } catch (err2) {\n        logger.debug(`[texttrack-utils]: Legacy TextTrackCue fallback failed: ${err2}`);\n      }\n    }\n  }\n  if (mode === 'disabled') {\n    track.mode = mode;\n  }\n}\nfunction clearCurrentCues(track) {\n  // When track.mode is disabled, track.cues will be null.\n  // To guarantee the removal of cues, we need to temporarily\n  // change the mode to hidden\n  const mode = track.mode;\n  if (mode === 'disabled') {\n    track.mode = 'hidden';\n  }\n  if (track.cues) {\n    for (let i = track.cues.length; i--;) {\n      track.removeCue(track.cues[i]);\n    }\n  }\n  if (mode === 'disabled') {\n    track.mode = mode;\n  }\n}\nfunction removeCuesInRange(track, start, end, predicate) {\n  const mode = track.mode;\n  if (mode === 'disabled') {\n    track.mode = 'hidden';\n  }\n  if (track.cues && track.cues.length > 0) {\n    const cues = getCuesInRange(track.cues, start, end);\n    for (let i = 0; i < cues.length; i++) {\n      if (!predicate || predicate(cues[i])) {\n        track.removeCue(cues[i]);\n      }\n    }\n  }\n  if (mode === 'disabled') {\n    track.mode = mode;\n  }\n}\n\n// Find first cue starting after given time.\n// Modified version of binary search O(log(n)).\nfunction getFirstCueIndexAfterTime(cues, time) {\n  // If first cue starts after time, start there\n  if (time < cues[0].startTime) {\n    return 0;\n  }\n  // If the last cue ends before time there is no overlap\n  const len = cues.length - 1;\n  if (time > cues[len].endTime) {\n    return -1;\n  }\n  let left = 0;\n  let right = len;\n  while (left <= right) {\n    const mid = Math.floor((right + left) / 2);\n    if (time < cues[mid].startTime) {\n      right = mid - 1;\n    } else if (time > cues[mid].startTime && left < len) {\n      left = mid + 1;\n    } else {\n      // If it's not lower or higher, it must be equal.\n      return mid;\n    }\n  }\n  // At this point, left and right have swapped.\n  // No direct match was found, left or right element must be the closest. Check which one has the smallest diff.\n  return cues[left].startTime - time < time - cues[right].startTime ? left : right;\n}\nfunction getCuesInRange(cues, start, end) {\n  const cuesFound = [];\n  const firstCueInRange = getFirstCueIndexAfterTime(cues, start);\n  if (firstCueInRange > -1) {\n    for (let i = firstCueInRange, len = cues.length; i < len; i++) {\n      const cue = cues[i];\n      if (cue.startTime >= start && cue.endTime <= end) {\n        cuesFound.push(cue);\n      } else if (cue.startTime > end) {\n        return cuesFound;\n      }\n    }\n  }\n  return cuesFound;\n}\nfunction filterSubtitleTracks(textTrackList) {\n  const tracks = [];\n  for (let i = 0; i < textTrackList.length; i++) {\n    const track = textTrackList[i];\n    // Edge adds a track without a label; we don't want to use it\n    if ((track.kind === 'subtitles' || track.kind === 'captions') && track.label) {\n      tracks.push(textTrackList[i]);\n    }\n  }\n  return tracks;\n}\n\nvar MetadataSchema = {\n  audioId3: \"org.id3\",\n  dateRange: \"com.apple.quicktime.HLS\",\n  emsg: \"https://aomedia.org/emsg/ID3\"\n};\n\nconst MIN_CUE_DURATION = 0.25;\nfunction getCueClass() {\n  if (typeof self === 'undefined') return undefined;\n  return self.VTTCue || self.TextTrackCue;\n}\nfunction createCueWithDataFields(Cue, startTime, endTime, data, type) {\n  let cue = new Cue(startTime, endTime, '');\n  try {\n    cue.value = data;\n    if (type) {\n      cue.type = type;\n    }\n  } catch (e) {\n    cue = new Cue(startTime, endTime, JSON.stringify(type ? _objectSpread2({\n      type\n    }, data) : data));\n  }\n  return cue;\n}\n\n// VTTCue latest draft allows an infinite duration, fallback\n// to MAX_VALUE if necessary\nconst MAX_CUE_ENDTIME = (() => {\n  const Cue = getCueClass();\n  try {\n    Cue && new Cue(0, Number.POSITIVE_INFINITY, '');\n  } catch (e) {\n    return Number.MAX_VALUE;\n  }\n  return Number.POSITIVE_INFINITY;\n})();\nfunction dateRangeDateToTimelineSeconds(date, offset) {\n  return date.getTime() / 1000 - offset;\n}\nfunction hexToArrayBuffer(str) {\n  return Uint8Array.from(str.replace(/^0x/, '').replace(/([\\da-fA-F]{2}) ?/g, '0x$1 ').replace(/ +$/, '').split(' ')).buffer;\n}\nclass ID3TrackController {\n  constructor(hls) {\n    this.hls = void 0;\n    this.id3Track = null;\n    this.media = null;\n    this.dateRangeCuesAppended = {};\n    this.hls = hls;\n    this._registerListeners();\n  }\n  destroy() {\n    this._unregisterListeners();\n    this.id3Track = null;\n    this.media = null;\n    this.dateRangeCuesAppended = {};\n    // @ts-ignore\n    this.hls = null;\n  }\n  _registerListeners() {\n    const {\n      hls\n    } = this;\n    hls.on(Events.MEDIA_ATTACHED, this.onMediaAttached, this);\n    hls.on(Events.MEDIA_DETACHING, this.onMediaDetaching, this);\n    hls.on(Events.MANIFEST_LOADING, this.onManifestLoading, this);\n    hls.on(Events.FRAG_PARSING_METADATA, this.onFragParsingMetadata, this);\n    hls.on(Events.BUFFER_FLUSHING, this.onBufferFlushing, this);\n    hls.on(Events.LEVEL_UPDATED, this.onLevelUpdated, this);\n  }\n  _unregisterListeners() {\n    const {\n      hls\n    } = this;\n    hls.off(Events.MEDIA_ATTACHED, this.onMediaAttached, this);\n    hls.off(Events.MEDIA_DETACHING, this.onMediaDetaching, this);\n    hls.off(Events.MANIFEST_LOADING, this.onManifestLoading, this);\n    hls.off(Events.FRAG_PARSING_METADATA, this.onFragParsingMetadata, this);\n    hls.off(Events.BUFFER_FLUSHING, this.onBufferFlushing, this);\n    hls.off(Events.LEVEL_UPDATED, this.onLevelUpdated, this);\n  }\n\n  // Add ID3 metatadata text track.\n  onMediaAttached(event, data) {\n    this.media = data.media;\n  }\n  onMediaDetaching() {\n    if (!this.id3Track) {\n      return;\n    }\n    clearCurrentCues(this.id3Track);\n    this.id3Track = null;\n    this.media = null;\n    this.dateRangeCuesAppended = {};\n  }\n  onManifestLoading() {\n    this.dateRangeCuesAppended = {};\n  }\n  createTrack(media) {\n    const track = this.getID3Track(media.textTracks);\n    track.mode = 'hidden';\n    return track;\n  }\n  getID3Track(textTracks) {\n    if (!this.media) {\n      return;\n    }\n    for (let i = 0; i < textTracks.length; i++) {\n      const textTrack = textTracks[i];\n      if (textTrack.kind === 'metadata' && textTrack.label === 'id3') {\n        // send 'addtrack' when reusing the textTrack for metadata,\n        // same as what we do for captions\n        sendAddTrackEvent(textTrack, this.media);\n        return textTrack;\n      }\n    }\n    return this.media.addTextTrack('metadata', 'id3');\n  }\n  onFragParsingMetadata(event, data) {\n    if (!this.media) {\n      return;\n    }\n    const {\n      hls: {\n        config: {\n          enableEmsgMetadataCues,\n          enableID3MetadataCues\n        }\n      }\n    } = this;\n    if (!enableEmsgMetadataCues && !enableID3MetadataCues) {\n      return;\n    }\n    const {\n      samples\n    } = data;\n\n    // create track dynamically\n    if (!this.id3Track) {\n      this.id3Track = this.createTrack(this.media);\n    }\n    const Cue = getCueClass();\n    if (!Cue) {\n      return;\n    }\n    for (let i = 0; i < samples.length; i++) {\n      const type = samples[i].type;\n      if (type === MetadataSchema.emsg && !enableEmsgMetadataCues || !enableID3MetadataCues) {\n        continue;\n      }\n      const frames = getID3Frames(samples[i].data);\n      if (frames) {\n        const startTime = samples[i].pts;\n        let endTime = startTime + samples[i].duration;\n        if (endTime > MAX_CUE_ENDTIME) {\n          endTime = MAX_CUE_ENDTIME;\n        }\n        const timeDiff = endTime - startTime;\n        if (timeDiff <= 0) {\n          endTime = startTime + MIN_CUE_DURATION;\n        }\n        for (let j = 0; j < frames.length; j++) {\n          const frame = frames[j];\n          // Safari doesn't put the timestamp frame in the TextTrack\n          if (!isTimeStampFrame(frame)) {\n            // add a bounds to any unbounded cues\n            this.updateId3CueEnds(startTime, type);\n            const cue = createCueWithDataFields(Cue, startTime, endTime, frame, type);\n            if (cue) {\n              this.id3Track.addCue(cue);\n            }\n          }\n        }\n      }\n    }\n  }\n  updateId3CueEnds(startTime, type) {\n    var _this$id3Track;\n    const cues = (_this$id3Track = this.id3Track) == null ? void 0 : _this$id3Track.cues;\n    if (cues) {\n      for (let i = cues.length; i--;) {\n        const cue = cues[i];\n        if (cue.type === type && cue.startTime < startTime && cue.endTime === MAX_CUE_ENDTIME) {\n          cue.endTime = startTime;\n        }\n      }\n    }\n  }\n  onBufferFlushing(event, {\n    startOffset,\n    endOffset,\n    type\n  }) {\n    const {\n      id3Track,\n      hls\n    } = this;\n    if (!hls) {\n      return;\n    }\n    const {\n      config: {\n        enableEmsgMetadataCues,\n        enableID3MetadataCues\n      }\n    } = hls;\n    if (id3Track && (enableEmsgMetadataCues || enableID3MetadataCues)) {\n      let predicate;\n      if (type === 'audio') {\n        predicate = cue => cue.type === MetadataSchema.audioId3 && enableID3MetadataCues;\n      } else if (type === 'video') {\n        predicate = cue => cue.type === MetadataSchema.emsg && enableEmsgMetadataCues;\n      } else {\n        predicate = cue => cue.type === MetadataSchema.audioId3 && enableID3MetadataCues || cue.type === MetadataSchema.emsg && enableEmsgMetadataCues;\n      }\n      removeCuesInRange(id3Track, startOffset, endOffset, predicate);\n    }\n  }\n  onLevelUpdated(event, {\n    details\n  }) {\n    if (!this.media || !details.hasProgramDateTime || !this.hls.config.enableDateRangeMetadataCues) {\n      return;\n    }\n    const {\n      dateRangeCuesAppended,\n      id3Track\n    } = this;\n    const {\n      dateRanges\n    } = details;\n    const ids = Object.keys(dateRanges);\n    // Remove cues from track not found in details.dateRanges\n    if (id3Track) {\n      const idsToRemove = Object.keys(dateRangeCuesAppended).filter(id => !ids.includes(id));\n      for (let i = idsToRemove.length; i--;) {\n        const id = idsToRemove[i];\n        Object.keys(dateRangeCuesAppended[id].cues).forEach(key => {\n          id3Track.removeCue(dateRangeCuesAppended[id].cues[key]);\n        });\n        delete dateRangeCuesAppended[id];\n      }\n    }\n    // Exit if the playlist does not have Date Ranges or does not have Program Date Time\n    const lastFragment = details.fragments[details.fragments.length - 1];\n    if (ids.length === 0 || !isFiniteNumber(lastFragment == null ? void 0 : lastFragment.programDateTime)) {\n      return;\n    }\n    if (!this.id3Track) {\n      this.id3Track = this.createTrack(this.media);\n    }\n    const dateTimeOffset = lastFragment.programDateTime / 1000 - lastFragment.start;\n    const Cue = getCueClass();\n    for (let i = 0; i < ids.length; i++) {\n      const id = ids[i];\n      const dateRange = dateRanges[id];\n      const startTime = dateRangeDateToTimelineSeconds(dateRange.startDate, dateTimeOffset);\n\n      // Process DateRanges to determine end-time (known DURATION, END-DATE, or END-ON-NEXT)\n      const appendedDateRangeCues = dateRangeCuesAppended[id];\n      const cues = (appendedDateRangeCues == null ? void 0 : appendedDateRangeCues.cues) || {};\n      let durationKnown = (appendedDateRangeCues == null ? void 0 : appendedDateRangeCues.durationKnown) || false;\n      let endTime = MAX_CUE_ENDTIME;\n      const endDate = dateRange.endDate;\n      if (endDate) {\n        endTime = dateRangeDateToTimelineSeconds(endDate, dateTimeOffset);\n        durationKnown = true;\n      } else if (dateRange.endOnNext && !durationKnown) {\n        const nextDateRangeWithSameClass = ids.reduce((candidateDateRange, id) => {\n          if (id !== dateRange.id) {\n            const otherDateRange = dateRanges[id];\n            if (otherDateRange.class === dateRange.class && otherDateRange.startDate > dateRange.startDate && (!candidateDateRange || dateRange.startDate < candidateDateRange.startDate)) {\n              return otherDateRange;\n            }\n          }\n          return candidateDateRange;\n        }, null);\n        if (nextDateRangeWithSameClass) {\n          endTime = dateRangeDateToTimelineSeconds(nextDateRangeWithSameClass.startDate, dateTimeOffset);\n          durationKnown = true;\n        }\n      }\n\n      // Create TextTrack Cues for each MetadataGroup Item (select DateRange attribute)\n      // This is to emulate Safari HLS playback handling of DateRange tags\n      const attributes = Object.keys(dateRange.attr);\n      for (let j = 0; j < attributes.length; j++) {\n        const key = attributes[j];\n        if (!isDateRangeCueAttribute(key)) {\n          continue;\n        }\n        const cue = cues[key];\n        if (cue) {\n          if (durationKnown && !appendedDateRangeCues.durationKnown) {\n            cue.endTime = endTime;\n          }\n        } else if (Cue) {\n          let data = dateRange.attr[key];\n          if (isSCTE35Attribute(key)) {\n            data = hexToArrayBuffer(data);\n          }\n          const _cue = createCueWithDataFields(Cue, startTime, endTime, {\n            key,\n            data\n          }, MetadataSchema.dateRange);\n          if (_cue) {\n            _cue.id = id;\n            this.id3Track.addCue(_cue);\n            cues[key] = _cue;\n          }\n        }\n      }\n\n      // Keep track of processed DateRanges by ID for updating cues with new DateRange tag attributes\n      dateRangeCuesAppended[id] = {\n        cues,\n        dateRange,\n        durationKnown\n      };\n    }\n  }\n}\n\nclass LatencyController {\n  constructor(hls) {\n    this.hls = void 0;\n    this.config = void 0;\n    this.media = null;\n    this.levelDetails = null;\n    this.currentTime = 0;\n    this.stallCount = 0;\n    this._latency = null;\n    this.timeupdateHandler = () => this.timeupdate();\n    this.hls = hls;\n    this.config = hls.config;\n    this.registerListeners();\n  }\n  get latency() {\n    return this._latency || 0;\n  }\n  get maxLatency() {\n    const {\n      config,\n      levelDetails\n    } = this;\n    if (config.liveMaxLatencyDuration !== undefined) {\n      return config.liveMaxLatencyDuration;\n    }\n    return levelDetails ? config.liveMaxLatencyDurationCount * levelDetails.targetduration : 0;\n  }\n  get targetLatency() {\n    const {\n      levelDetails\n    } = this;\n    if (levelDetails === null) {\n      return null;\n    }\n    const {\n      holdBack,\n      partHoldBack,\n      targetduration\n    } = levelDetails;\n    const {\n      liveSyncDuration,\n      liveSyncDurationCount,\n      lowLatencyMode\n    } = this.config;\n    const userConfig = this.hls.userConfig;\n    let targetLatency = lowLatencyMode ? partHoldBack || holdBack : holdBack;\n    if (userConfig.liveSyncDuration || userConfig.liveSyncDurationCount || targetLatency === 0) {\n      targetLatency = liveSyncDuration !== undefined ? liveSyncDuration : liveSyncDurationCount * targetduration;\n    }\n    const maxLiveSyncOnStallIncrease = targetduration;\n    const liveSyncOnStallIncrease = 1.0;\n    return targetLatency + Math.min(this.stallCount * liveSyncOnStallIncrease, maxLiveSyncOnStallIncrease);\n  }\n  get liveSyncPosition() {\n    const liveEdge = this.estimateLiveEdge();\n    const targetLatency = this.targetLatency;\n    const levelDetails = this.levelDetails;\n    if (liveEdge === null || targetLatency === null || levelDetails === null) {\n      return null;\n    }\n    const edge = levelDetails.edge;\n    const syncPosition = liveEdge - targetLatency - this.edgeStalled;\n    const min = edge - levelDetails.totalduration;\n    const max = edge - (this.config.lowLatencyMode && levelDetails.partTarget || levelDetails.targetduration);\n    return Math.min(Math.max(min, syncPosition), max);\n  }\n  get drift() {\n    const {\n      levelDetails\n    } = this;\n    if (levelDetails === null) {\n      return 1;\n    }\n    return levelDetails.drift;\n  }\n  get edgeStalled() {\n    const {\n      levelDetails\n    } = this;\n    if (levelDetails === null) {\n      return 0;\n    }\n    const maxLevelUpdateAge = (this.config.lowLatencyMode && levelDetails.partTarget || levelDetails.targetduration) * 3;\n    return Math.max(levelDetails.age - maxLevelUpdateAge, 0);\n  }\n  get forwardBufferLength() {\n    const {\n      media,\n      levelDetails\n    } = this;\n    if (!media || !levelDetails) {\n      return 0;\n    }\n    const bufferedRanges = media.buffered.length;\n    return (bufferedRanges ? media.buffered.end(bufferedRanges - 1) : levelDetails.edge) - this.currentTime;\n  }\n  destroy() {\n    this.unregisterListeners();\n    this.onMediaDetaching();\n    this.levelDetails = null;\n    // @ts-ignore\n    this.hls = this.timeupdateHandler = null;\n  }\n  registerListeners() {\n    this.hls.on(Events.MEDIA_ATTACHED, this.onMediaAttached, this);\n    this.hls.on(Events.MEDIA_DETACHING, this.onMediaDetaching, this);\n    this.hls.on(Events.MANIFEST_LOADING, this.onManifestLoading, this);\n    this.hls.on(Events.LEVEL_UPDATED, this.onLevelUpdated, this);\n    this.hls.on(Events.ERROR, this.onError, this);\n  }\n  unregisterListeners() {\n    this.hls.off(Events.MEDIA_ATTACHED, this.onMediaAttached, this);\n    this.hls.off(Events.MEDIA_DETACHING, this.onMediaDetaching, this);\n    this.hls.off(Events.MANIFEST_LOADING, this.onManifestLoading, this);\n    this.hls.off(Events.LEVEL_UPDATED, this.onLevelUpdated, this);\n    this.hls.off(Events.ERROR, this.onError, this);\n  }\n  onMediaAttached(event, data) {\n    this.media = data.media;\n    this.media.addEventListener('timeupdate', this.timeupdateHandler);\n  }\n  onMediaDetaching() {\n    if (this.media) {\n      this.media.removeEventListener('timeupdate', this.timeupdateHandler);\n      this.media = null;\n    }\n  }\n  onManifestLoading() {\n    this.levelDetails = null;\n    this._latency = null;\n    this.stallCount = 0;\n  }\n  onLevelUpdated(event, {\n    details\n  }) {\n    this.levelDetails = details;\n    if (details.advanced) {\n      this.timeupdate();\n    }\n    if (!details.live && this.media) {\n      this.media.removeEventListener('timeupdate', this.timeupdateHandler);\n    }\n  }\n  onError(event, data) {\n    var _this$levelDetails;\n    if (data.details !== ErrorDetails.BUFFER_STALLED_ERROR) {\n      return;\n    }\n    this.stallCount++;\n    if ((_this$levelDetails = this.levelDetails) != null && _this$levelDetails.live) {\n      logger.warn('[playback-rate-controller]: Stall detected, adjusting target latency');\n    }\n  }\n  timeupdate() {\n    const {\n      media,\n      levelDetails\n    } = this;\n    if (!media || !levelDetails) {\n      return;\n    }\n    this.currentTime = media.currentTime;\n    const latency = this.computeLatency();\n    if (latency === null) {\n      return;\n    }\n    this._latency = latency;\n\n    // Adapt playbackRate to meet target latency in low-latency mode\n    const {\n      lowLatencyMode,\n      maxLiveSyncPlaybackRate\n    } = this.config;\n    if (!lowLatencyMode || maxLiveSyncPlaybackRate === 1 || !levelDetails.live) {\n      return;\n    }\n    const targetLatency = this.targetLatency;\n    if (targetLatency === null) {\n      return;\n    }\n    const distanceFromTarget = latency - targetLatency;\n    // Only adjust playbackRate when within one target duration of targetLatency\n    // and more than one second from under-buffering.\n    // Playback further than one target duration from target can be considered DVR playback.\n    const liveMinLatencyDuration = Math.min(this.maxLatency, targetLatency + levelDetails.targetduration);\n    const inLiveRange = distanceFromTarget < liveMinLatencyDuration;\n    if (inLiveRange && distanceFromTarget > 0.05 && this.forwardBufferLength > 1) {\n      const max = Math.min(2, Math.max(1.0, maxLiveSyncPlaybackRate));\n      const rate = Math.round(2 / (1 + Math.exp(-0.75 * distanceFromTarget - this.edgeStalled)) * 20) / 20;\n      media.playbackRate = Math.min(max, Math.max(1, rate));\n    } else if (media.playbackRate !== 1 && media.playbackRate !== 0) {\n      media.playbackRate = 1;\n    }\n  }\n  estimateLiveEdge() {\n    const {\n      levelDetails\n    } = this;\n    if (levelDetails === null) {\n      return null;\n    }\n    return levelDetails.edge + levelDetails.age;\n  }\n  computeLatency() {\n    const liveEdge = this.estimateLiveEdge();\n    if (liveEdge === null) {\n      return null;\n    }\n    return liveEdge - this.currentTime;\n  }\n}\n\nconst HdcpLevels = ['NONE', 'TYPE-0', 'TYPE-1', null];\nfunction isHdcpLevel(value) {\n  return HdcpLevels.indexOf(value) > -1;\n}\nconst VideoRangeValues = ['SDR', 'PQ', 'HLG'];\nfunction isVideoRange(value) {\n  return !!value && VideoRangeValues.indexOf(value) > -1;\n}\nvar HlsSkip = {\n  No: \"\",\n  Yes: \"YES\",\n  v2: \"v2\"\n};\nfunction getSkipValue(details) {\n  const {\n    canSkipUntil,\n    canSkipDateRanges,\n    age\n  } = details;\n  // A Client SHOULD NOT request a Playlist Delta Update unless it already\n  // has a version of the Playlist that is no older than one-half of the Skip Boundary.\n  // @see: https://datatracker.ietf.org/doc/html/draft-pantos-hls-rfc8216bis#section-6.3.7\n  const playlistRecentEnough = age < canSkipUntil / 2;\n  if (canSkipUntil && playlistRecentEnough) {\n    if (canSkipDateRanges) {\n      return HlsSkip.v2;\n    }\n    return HlsSkip.Yes;\n  }\n  return HlsSkip.No;\n}\nclass HlsUrlParameters {\n  constructor(msn, part, skip) {\n    this.msn = void 0;\n    this.part = void 0;\n    this.skip = void 0;\n    this.msn = msn;\n    this.part = part;\n    this.skip = skip;\n  }\n  addDirectives(uri) {\n    const url = new self.URL(uri);\n    if (this.msn !== undefined) {\n      url.searchParams.set('_HLS_msn', this.msn.toString());\n    }\n    if (this.part !== undefined) {\n      url.searchParams.set('_HLS_part', this.part.toString());\n    }\n    if (this.skip) {\n      url.searchParams.set('_HLS_skip', this.skip);\n    }\n    return url.href;\n  }\n}\nclass Level {\n  constructor(data) {\n    this._attrs = void 0;\n    this.audioCodec = void 0;\n    this.bitrate = void 0;\n    this.codecSet = void 0;\n    this.url = void 0;\n    this.frameRate = void 0;\n    this.height = void 0;\n    this.id = void 0;\n    this.name = void 0;\n    this.videoCodec = void 0;\n    this.width = void 0;\n    this.details = void 0;\n    this.fragmentError = 0;\n    this.loadError = 0;\n    this.loaded = void 0;\n    this.realBitrate = 0;\n    this.supportedPromise = void 0;\n    this.supportedResult = void 0;\n    this._avgBitrate = 0;\n    this._audioGroups = void 0;\n    this._subtitleGroups = void 0;\n    // Deprecated (retained for backwards compatibility)\n    this._urlId = 0;\n    this.url = [data.url];\n    this._attrs = [data.attrs];\n    this.bitrate = data.bitrate;\n    if (data.details) {\n      this.details = data.details;\n    }\n    this.id = data.id || 0;\n    this.name = data.name;\n    this.width = data.width || 0;\n    this.height = data.height || 0;\n    this.frameRate = data.attrs.optionalFloat('FRAME-RATE', 0);\n    this._avgBitrate = data.attrs.decimalInteger('AVERAGE-BANDWIDTH');\n    this.audioCodec = data.audioCodec;\n    this.videoCodec = data.videoCodec;\n    this.codecSet = [data.videoCodec, data.audioCodec].filter(c => !!c).map(s => s.substring(0, 4)).join(',');\n    this.addGroupId('audio', data.attrs.AUDIO);\n    this.addGroupId('text', data.attrs.SUBTITLES);\n  }\n  get maxBitrate() {\n    return Math.max(this.realBitrate, this.bitrate);\n  }\n  get averageBitrate() {\n    return this._avgBitrate || this.realBitrate || this.bitrate;\n  }\n  get attrs() {\n    return this._attrs[0];\n  }\n  get codecs() {\n    return this.attrs.CODECS || '';\n  }\n  get pathwayId() {\n    return this.attrs['PATHWAY-ID'] || '.';\n  }\n  get videoRange() {\n    return this.attrs['VIDEO-RANGE'] || 'SDR';\n  }\n  get score() {\n    return this.attrs.optionalFloat('SCORE', 0);\n  }\n  get uri() {\n    return this.url[0] || '';\n  }\n  hasAudioGroup(groupId) {\n    return hasGroup(this._audioGroups, groupId);\n  }\n  hasSubtitleGroup(groupId) {\n    return hasGroup(this._subtitleGroups, groupId);\n  }\n  get audioGroups() {\n    return this._audioGroups;\n  }\n  get subtitleGroups() {\n    return this._subtitleGroups;\n  }\n  addGroupId(type, groupId) {\n    if (!groupId) {\n      return;\n    }\n    if (type === 'audio') {\n      let audioGroups = this._audioGroups;\n      if (!audioGroups) {\n        audioGroups = this._audioGroups = [];\n      }\n      if (audioGroups.indexOf(groupId) === -1) {\n        audioGroups.push(groupId);\n      }\n    } else if (type === 'text') {\n      let subtitleGroups = this._subtitleGroups;\n      if (!subtitleGroups) {\n        subtitleGroups = this._subtitleGroups = [];\n      }\n      if (subtitleGroups.indexOf(groupId) === -1) {\n        subtitleGroups.push(groupId);\n      }\n    }\n  }\n\n  // Deprecated methods (retained for backwards compatibility)\n  get urlId() {\n    return 0;\n  }\n  set urlId(value) {}\n  get audioGroupIds() {\n    return this.audioGroups ? [this.audioGroupId] : undefined;\n  }\n  get textGroupIds() {\n    return this.subtitleGroups ? [this.textGroupId] : undefined;\n  }\n  get audioGroupId() {\n    var _this$audioGroups;\n    return (_this$audioGroups = this.audioGroups) == null ? void 0 : _this$audioGroups[0];\n  }\n  get textGroupId() {\n    var _this$subtitleGroups;\n    return (_this$subtitleGroups = this.subtitleGroups) == null ? void 0 : _this$subtitleGroups[0];\n  }\n  addFallback() {}\n}\nfunction hasGroup(groups, groupId) {\n  if (!groupId || !groups) {\n    return false;\n  }\n  return groups.indexOf(groupId) !== -1;\n}\n\nfunction updateFromToPTS(fragFrom, fragTo) {\n  const fragToPTS = fragTo.startPTS;\n  // if we know startPTS[toIdx]\n  if (isFiniteNumber(fragToPTS)) {\n    // update fragment duration.\n    // it helps to fix drifts between playlist reported duration and fragment real duration\n    let duration = 0;\n    let frag;\n    if (fragTo.sn > fragFrom.sn) {\n      duration = fragToPTS - fragFrom.start;\n      frag = fragFrom;\n    } else {\n      duration = fragFrom.start - fragToPTS;\n      frag = fragTo;\n    }\n    if (frag.duration !== duration) {\n      frag.duration = duration;\n    }\n    // we dont know startPTS[toIdx]\n  } else if (fragTo.sn > fragFrom.sn) {\n    const contiguous = fragFrom.cc === fragTo.cc;\n    // TODO: With part-loading end/durations we need to confirm the whole fragment is loaded before using (or setting) minEndPTS\n    if (contiguous && fragFrom.minEndPTS) {\n      fragTo.start = fragFrom.start + (fragFrom.minEndPTS - fragFrom.start);\n    } else {\n      fragTo.start = fragFrom.start + fragFrom.duration;\n    }\n  } else {\n    fragTo.start = Math.max(fragFrom.start - fragTo.duration, 0);\n  }\n}\nfunction updateFragPTSDTS(details, frag, startPTS, endPTS, startDTS, endDTS) {\n  const parsedMediaDuration = endPTS - startPTS;\n  if (parsedMediaDuration <= 0) {\n    logger.warn('Fragment should have a positive duration', frag);\n    endPTS = startPTS + frag.duration;\n    endDTS = startDTS + frag.duration;\n  }\n  let maxStartPTS = startPTS;\n  let minEndPTS = endPTS;\n  const fragStartPts = frag.startPTS;\n  const fragEndPts = frag.endPTS;\n  if (isFiniteNumber(fragStartPts)) {\n    // delta PTS between audio and video\n    const deltaPTS = Math.abs(fragStartPts - startPTS);\n    if (!isFiniteNumber(frag.deltaPTS)) {\n      frag.deltaPTS = deltaPTS;\n    } else {\n      frag.deltaPTS = Math.max(deltaPTS, frag.deltaPTS);\n    }\n    maxStartPTS = Math.max(startPTS, fragStartPts);\n    startPTS = Math.min(startPTS, fragStartPts);\n    startDTS = Math.min(startDTS, frag.startDTS);\n    minEndPTS = Math.min(endPTS, fragEndPts);\n    endPTS = Math.max(endPTS, fragEndPts);\n    endDTS = Math.max(endDTS, frag.endDTS);\n  }\n  const drift = startPTS - frag.start;\n  if (frag.start !== 0) {\n    frag.start = startPTS;\n  }\n  frag.duration = endPTS - frag.start;\n  frag.startPTS = startPTS;\n  frag.maxStartPTS = maxStartPTS;\n  frag.startDTS = startDTS;\n  frag.endPTS = endPTS;\n  frag.minEndPTS = minEndPTS;\n  frag.endDTS = endDTS;\n  const sn = frag.sn; // 'initSegment'\n  // exit if sn out of range\n  if (!details || sn < details.startSN || sn > details.endSN) {\n    return 0;\n  }\n  let i;\n  const fragIdx = sn - details.startSN;\n  const fragments = details.fragments;\n  // update frag reference in fragments array\n  // rationale is that fragments array might not contain this frag object.\n  // this will happen if playlist has been refreshed between frag loading and call to updateFragPTSDTS()\n  // if we don't update frag, we won't be able to propagate PTS info on the playlist\n  // resulting in invalid sliding computation\n  fragments[fragIdx] = frag;\n  // adjust fragment PTS/duration from seqnum-1 to frag 0\n  for (i = fragIdx; i > 0; i--) {\n    updateFromToPTS(fragments[i], fragments[i - 1]);\n  }\n\n  // adjust fragment PTS/duration from seqnum to last frag\n  for (i = fragIdx; i < fragments.length - 1; i++) {\n    updateFromToPTS(fragments[i], fragments[i + 1]);\n  }\n  if (details.fragmentHint) {\n    updateFromToPTS(fragments[fragments.length - 1], details.fragmentHint);\n  }\n  details.PTSKnown = details.alignedSliding = true;\n  return drift;\n}\nfunction mergeDetails(oldDetails, newDetails) {\n  // Track the last initSegment processed. Initialize it to the last one on the timeline.\n  let currentInitSegment = null;\n  const oldFragments = oldDetails.fragments;\n  for (let i = oldFragments.length - 1; i >= 0; i--) {\n    const oldInit = oldFragments[i].initSegment;\n    if (oldInit) {\n      currentInitSegment = oldInit;\n      break;\n    }\n  }\n  if (oldDetails.fragmentHint) {\n    // prevent PTS and duration from being adjusted on the next hint\n    delete oldDetails.fragmentHint.endPTS;\n  }\n  // check if old/new playlists have fragments in common\n  // loop through overlapping SN and update startPTS , cc, and duration if any found\n  let ccOffset = 0;\n  let PTSFrag;\n  mapFragmentIntersection(oldDetails, newDetails, (oldFrag, newFrag) => {\n    if (oldFrag.relurl) {\n      // Do not compare CC if the old fragment has no url. This is a level.fragmentHint used by LL-HLS parts.\n      // It maybe be off by 1 if it was created before any parts or discontinuity tags were appended to the end\n      // of the playlist.\n      ccOffset = oldFrag.cc - newFrag.cc;\n    }\n    if (isFiniteNumber(oldFrag.startPTS) && isFiniteNumber(oldFrag.endPTS)) {\n      newFrag.start = newFrag.startPTS = oldFrag.startPTS;\n      newFrag.startDTS = oldFrag.startDTS;\n      newFrag.maxStartPTS = oldFrag.maxStartPTS;\n      newFrag.endPTS = oldFrag.endPTS;\n      newFrag.endDTS = oldFrag.endDTS;\n      newFrag.minEndPTS = oldFrag.minEndPTS;\n      newFrag.duration = oldFrag.endPTS - oldFrag.startPTS;\n      if (newFrag.duration) {\n        PTSFrag = newFrag;\n      }\n\n      // PTS is known when any segment has startPTS and endPTS\n      newDetails.PTSKnown = newDetails.alignedSliding = true;\n    }\n    newFrag.elementaryStreams = oldFrag.elementaryStreams;\n    newFrag.loader = oldFrag.loader;\n    newFrag.stats = oldFrag.stats;\n    if (oldFrag.initSegment) {\n      newFrag.initSegment = oldFrag.initSegment;\n      currentInitSegment = oldFrag.initSegment;\n    }\n  });\n  if (currentInitSegment) {\n    const fragmentsToCheck = newDetails.fragmentHint ? newDetails.fragments.concat(newDetails.fragmentHint) : newDetails.fragments;\n    fragmentsToCheck.forEach(frag => {\n      var _currentInitSegment;\n      if (frag && (!frag.initSegment || frag.initSegment.relurl === ((_currentInitSegment = currentInitSegment) == null ? void 0 : _currentInitSegment.relurl))) {\n        frag.initSegment = currentInitSegment;\n      }\n    });\n  }\n  if (newDetails.skippedSegments) {\n    newDetails.deltaUpdateFailed = newDetails.fragments.some(frag => !frag);\n    if (newDetails.deltaUpdateFailed) {\n      logger.warn('[level-helper] Previous playlist missing segments skipped in delta playlist');\n      for (let i = newDetails.skippedSegments; i--;) {\n        newDetails.fragments.shift();\n      }\n      newDetails.startSN = newDetails.fragments[0].sn;\n      newDetails.startCC = newDetails.fragments[0].cc;\n    } else if (newDetails.canSkipDateRanges) {\n      newDetails.dateRanges = mergeDateRanges(oldDetails.dateRanges, newDetails.dateRanges, newDetails.recentlyRemovedDateranges);\n    }\n  }\n  const newFragments = newDetails.fragments;\n  if (ccOffset) {\n    logger.warn('discontinuity sliding from playlist, take drift into account');\n    for (let i = 0; i < newFragments.length; i++) {\n      newFragments[i].cc += ccOffset;\n    }\n  }\n  if (newDetails.skippedSegments) {\n    newDetails.startCC = newDetails.fragments[0].cc;\n  }\n\n  // Merge parts\n  mapPartIntersection(oldDetails.partList, newDetails.partList, (oldPart, newPart) => {\n    newPart.elementaryStreams = oldPart.elementaryStreams;\n    newPart.stats = oldPart.stats;\n  });\n\n  // if at least one fragment contains PTS info, recompute PTS information for all fragments\n  if (PTSFrag) {\n    updateFragPTSDTS(newDetails, PTSFrag, PTSFrag.startPTS, PTSFrag.endPTS, PTSFrag.startDTS, PTSFrag.endDTS);\n  } else {\n    // ensure that delta is within oldFragments range\n    // also adjust sliding in case delta is 0 (we could have old=[50-60] and new=old=[50-61])\n    // in that case we also need to adjust start offset of all fragments\n    adjustSliding(oldDetails, newDetails);\n  }\n  if (newFragments.length) {\n    newDetails.totalduration = newDetails.edge - newFragments[0].start;\n  }\n  newDetails.driftStartTime = oldDetails.driftStartTime;\n  newDetails.driftStart = oldDetails.driftStart;\n  const advancedDateTime = newDetails.advancedDateTime;\n  if (newDetails.advanced && advancedDateTime) {\n    const edge = newDetails.edge;\n    if (!newDetails.driftStart) {\n      newDetails.driftStartTime = advancedDateTime;\n      newDetails.driftStart = edge;\n    }\n    newDetails.driftEndTime = advancedDateTime;\n    newDetails.driftEnd = edge;\n  } else {\n    newDetails.driftEndTime = oldDetails.driftEndTime;\n    newDetails.driftEnd = oldDetails.driftEnd;\n    newDetails.advancedDateTime = oldDetails.advancedDateTime;\n  }\n}\nfunction mergeDateRanges(oldDateRanges, deltaDateRanges, recentlyRemovedDateranges) {\n  const dateRanges = _extends({}, oldDateRanges);\n  if (recentlyRemovedDateranges) {\n    recentlyRemovedDateranges.forEach(id => {\n      delete dateRanges[id];\n    });\n  }\n  Object.keys(deltaDateRanges).forEach(id => {\n    const dateRange = new DateRange(deltaDateRanges[id].attr, dateRanges[id]);\n    if (dateRange.isValid) {\n      dateRanges[id] = dateRange;\n    } else {\n      logger.warn(`Ignoring invalid Playlist Delta Update DATERANGE tag: \"${JSON.stringify(deltaDateRanges[id].attr)}\"`);\n    }\n  });\n  return dateRanges;\n}\nfunction mapPartIntersection(oldParts, newParts, intersectionFn) {\n  if (oldParts && newParts) {\n    let delta = 0;\n    for (let i = 0, len = oldParts.length; i <= len; i++) {\n      const oldPart = oldParts[i];\n      const newPart = newParts[i + delta];\n      if (oldPart && newPart && oldPart.index === newPart.index && oldPart.fragment.sn === newPart.fragment.sn) {\n        intersectionFn(oldPart, newPart);\n      } else {\n        delta--;\n      }\n    }\n  }\n}\nfunction mapFragmentIntersection(oldDetails, newDetails, intersectionFn) {\n  const skippedSegments = newDetails.skippedSegments;\n  const start = Math.max(oldDetails.startSN, newDetails.startSN) - newDetails.startSN;\n  const end = (oldDetails.fragmentHint ? 1 : 0) + (skippedSegments ? newDetails.endSN : Math.min(oldDetails.endSN, newDetails.endSN)) - newDetails.startSN;\n  const delta = newDetails.startSN - oldDetails.startSN;\n  const newFrags = newDetails.fragmentHint ? newDetails.fragments.concat(newDetails.fragmentHint) : newDetails.fragments;\n  const oldFrags = oldDetails.fragmentHint ? oldDetails.fragments.concat(oldDetails.fragmentHint) : oldDetails.fragments;\n  for (let i = start; i <= end; i++) {\n    const oldFrag = oldFrags[delta + i];\n    let newFrag = newFrags[i];\n    if (skippedSegments && !newFrag && i < skippedSegments) {\n      // Fill in skipped segments in delta playlist\n      newFrag = newDetails.fragments[i] = oldFrag;\n    }\n    if (oldFrag && newFrag) {\n      intersectionFn(oldFrag, newFrag);\n    }\n  }\n}\nfunction adjustSliding(oldDetails, newDetails) {\n  const delta = newDetails.startSN + newDetails.skippedSegments - oldDetails.startSN;\n  const oldFragments = oldDetails.fragments;\n  if (delta < 0 || delta >= oldFragments.length) {\n    return;\n  }\n  addSliding(newDetails, oldFragments[delta].start);\n}\nfunction addSliding(details, start) {\n  if (start) {\n    const fragments = details.fragments;\n    for (let i = details.skippedSegments; i < fragments.length; i++) {\n      fragments[i].start += start;\n    }\n    if (details.fragmentHint) {\n      details.fragmentHint.start += start;\n    }\n  }\n}\nfunction computeReloadInterval(newDetails, distanceToLiveEdgeMs = Infinity) {\n  let reloadInterval = 1000 * newDetails.targetduration;\n  if (newDetails.updated) {\n    // Use last segment duration when shorter than target duration and near live edge\n    const fragments = newDetails.fragments;\n    const liveEdgeMaxTargetDurations = 4;\n    if (fragments.length && reloadInterval * liveEdgeMaxTargetDurations > distanceToLiveEdgeMs) {\n      const lastSegmentDuration = fragments[fragments.length - 1].duration * 1000;\n      if (lastSegmentDuration < reloadInterval) {\n        reloadInterval = lastSegmentDuration;\n      }\n    }\n  } else {\n    // estimate = 'miss half average';\n    // follow HLS Spec, If the client reloads a Playlist file and finds that it has not\n    // changed then it MUST wait for a period of one-half the target\n    // duration before retrying.\n    reloadInterval /= 2;\n  }\n  return Math.round(reloadInterval);\n}\nfunction getFragmentWithSN(level, sn, fragCurrent) {\n  if (!(level != null && level.details)) {\n    return null;\n  }\n  const levelDetails = level.details;\n  let fragment = levelDetails.fragments[sn - levelDetails.startSN];\n  if (fragment) {\n    return fragment;\n  }\n  fragment = levelDetails.fragmentHint;\n  if (fragment && fragment.sn === sn) {\n    return fragment;\n  }\n  if (sn < levelDetails.startSN && fragCurrent && fragCurrent.sn === sn) {\n    return fragCurrent;\n  }\n  return null;\n}\nfunction getPartWith(level, sn, partIndex) {\n  var _level$details;\n  if (!(level != null && level.details)) {\n    return null;\n  }\n  return findPart((_level$details = level.details) == null ? void 0 : _level$details.partList, sn, partIndex);\n}\nfunction findPart(partList, sn, partIndex) {\n  if (partList) {\n    for (let i = partList.length; i--;) {\n      const part = partList[i];\n      if (part.index === partIndex && part.fragment.sn === sn) {\n        return part;\n      }\n    }\n  }\n  return null;\n}\nfunction reassignFragmentLevelIndexes(levels) {\n  levels.forEach((level, index) => {\n    const {\n      details\n    } = level;\n    if (details != null && details.fragments) {\n      details.fragments.forEach(fragment => {\n        fragment.level = index;\n      });\n    }\n  });\n}\n\nfunction isTimeoutError(error) {\n  switch (error.details) {\n    case ErrorDetails.FRAG_LOAD_TIMEOUT:\n    case ErrorDetails.KEY_LOAD_TIMEOUT:\n    case ErrorDetails.LEVEL_LOAD_TIMEOUT:\n    case ErrorDetails.MANIFEST_LOAD_TIMEOUT:\n      return true;\n  }\n  return false;\n}\nfunction getRetryConfig(loadPolicy, error) {\n  const isTimeout = isTimeoutError(error);\n  return loadPolicy.default[`${isTimeout ? 'timeout' : 'error'}Retry`];\n}\nfunction getRetryDelay(retryConfig, retryCount) {\n  // exponential backoff capped to max retry delay\n  const backoffFactor = retryConfig.backoff === 'linear' ? 1 : Math.pow(2, retryCount);\n  return Math.min(backoffFactor * retryConfig.retryDelayMs, retryConfig.maxRetryDelayMs);\n}\nfunction getLoaderConfigWithoutReties(loderConfig) {\n  return _objectSpread2(_objectSpread2({}, loderConfig), {\n    errorRetry: null,\n    timeoutRetry: null\n  });\n}\nfunction shouldRetry(retryConfig, retryCount, isTimeout, loaderResponse) {\n  if (!retryConfig) {\n    return false;\n  }\n  const httpStatus = loaderResponse == null ? void 0 : loaderResponse.code;\n  const retry = retryCount < retryConfig.maxNumRetry && (retryForHttpStatus(httpStatus) || !!isTimeout);\n  return retryConfig.shouldRetry ? retryConfig.shouldRetry(retryConfig, retryCount, isTimeout, loaderResponse, retry) : retry;\n}\nfunction retryForHttpStatus(httpStatus) {\n  // Do not retry on status 4xx, status 0 (CORS error), or undefined (decrypt/gap/parse error)\n  return httpStatus === 0 && navigator.onLine === false || !!httpStatus && (httpStatus < 400 || httpStatus > 499);\n}\n\nconst BinarySearch = {\n  /**\n   * Searches for an item in an array which matches a certain condition.\n   * This requires the condition to only match one item in the array,\n   * and for the array to be ordered.\n   *\n   * @param list The array to search.\n   * @param comparisonFn\n   *      Called and provided a candidate item as the first argument.\n   *      Should return:\n   *          > -1 if the item should be located at a lower index than the provided item.\n   *          > 1 if the item should be located at a higher index than the provided item.\n   *          > 0 if the item is the item you're looking for.\n   *\n   * @returns the object if found, otherwise returns null\n   */\n  search: function (list, comparisonFn) {\n    let minIndex = 0;\n    let maxIndex = list.length - 1;\n    let currentIndex = null;\n    let currentElement = null;\n    while (minIndex <= maxIndex) {\n      currentIndex = (minIndex + maxIndex) / 2 | 0;\n      currentElement = list[currentIndex];\n      const comparisonResult = comparisonFn(currentElement);\n      if (comparisonResult > 0) {\n        minIndex = currentIndex + 1;\n      } else if (comparisonResult < 0) {\n        maxIndex = currentIndex - 1;\n      } else {\n        return currentElement;\n      }\n    }\n    return null;\n  }\n};\n\n/**\n * Returns first fragment whose endPdt value exceeds the given PDT, or null.\n * @param fragments - The array of candidate fragments\n * @param PDTValue - The PDT value which must be exceeded\n * @param maxFragLookUpTolerance - The amount of time that a fragment's start/end can be within in order to be considered contiguous\n */\nfunction findFragmentByPDT(fragments, PDTValue, maxFragLookUpTolerance) {\n  if (PDTValue === null || !Array.isArray(fragments) || !fragments.length || !isFiniteNumber(PDTValue)) {\n    return null;\n  }\n\n  // if less than start\n  const startPDT = fragments[0].programDateTime;\n  if (PDTValue < (startPDT || 0)) {\n    return null;\n  }\n  const endPDT = fragments[fragments.length - 1].endProgramDateTime;\n  if (PDTValue >= (endPDT || 0)) {\n    return null;\n  }\n  maxFragLookUpTolerance = maxFragLookUpTolerance || 0;\n  for (let seg = 0; seg < fragments.length; ++seg) {\n    const frag = fragments[seg];\n    if (pdtWithinToleranceTest(PDTValue, maxFragLookUpTolerance, frag)) {\n      return frag;\n    }\n  }\n  return null;\n}\n\n/**\n * Finds a fragment based on the SN of the previous fragment; or based on the needs of the current buffer.\n * This method compensates for small buffer gaps by applying a tolerance to the start of any candidate fragment, thus\n * breaking any traps which would cause the same fragment to be continuously selected within a small range.\n * @param fragPrevious - The last frag successfully appended\n * @param fragments - The array of candidate fragments\n * @param bufferEnd - The end of the contiguous buffered range the playhead is currently within\n * @param maxFragLookUpTolerance - The amount of time that a fragment's start/end can be within in order to be considered contiguous\n * @returns a matching fragment or null\n */\nfunction findFragmentByPTS(fragPrevious, fragments, bufferEnd = 0, maxFragLookUpTolerance = 0, nextFragLookupTolerance = 0.005) {\n  let fragNext = null;\n  if (fragPrevious) {\n    fragNext = fragments[fragPrevious.sn - fragments[0].sn + 1] || null;\n    // check for buffer-end rounding error\n    const bufferEdgeError = fragPrevious.endDTS - bufferEnd;\n    if (bufferEdgeError > 0 && bufferEdgeError < 0.0000015) {\n      bufferEnd += 0.0000015;\n    }\n  } else if (bufferEnd === 0 && fragments[0].start === 0) {\n    fragNext = fragments[0];\n  }\n  // Prefer the next fragment if it's within tolerance\n  if (fragNext && ((!fragPrevious || fragPrevious.level === fragNext.level) && fragmentWithinToleranceTest(bufferEnd, maxFragLookUpTolerance, fragNext) === 0 || fragmentWithinFastStartSwitch(fragNext, fragPrevious, Math.min(nextFragLookupTolerance, maxFragLookUpTolerance)))) {\n    return fragNext;\n  }\n  // We might be seeking past the tolerance so find the best match\n  const foundFragment = BinarySearch.search(fragments, fragmentWithinToleranceTest.bind(null, bufferEnd, maxFragLookUpTolerance));\n  if (foundFragment && (foundFragment !== fragPrevious || !fragNext)) {\n    return foundFragment;\n  }\n  // If no match was found return the next fragment after fragPrevious, or null\n  return fragNext;\n}\nfunction fragmentWithinFastStartSwitch(fragNext, fragPrevious, nextFragLookupTolerance) {\n  if (fragPrevious && fragPrevious.start === 0 && fragPrevious.level < fragNext.level && (fragPrevious.endPTS || 0) > 0) {\n    const firstDuration = fragPrevious.tagList.reduce((duration, tag) => {\n      if (tag[0] === 'INF') {\n        duration += parseFloat(tag[1]);\n      }\n      return duration;\n    }, nextFragLookupTolerance);\n    return fragNext.start <= firstDuration;\n  }\n  return false;\n}\n\n/**\n * The test function used by the findFragmentBySn's BinarySearch to look for the best match to the current buffer conditions.\n * @param candidate - The fragment to test\n * @param bufferEnd - The end of the current buffered range the playhead is currently within\n * @param maxFragLookUpTolerance - The amount of time that a fragment's start can be within in order to be considered contiguous\n * @returns 0 if it matches, 1 if too low, -1 if too high\n */\nfunction fragmentWithinToleranceTest(bufferEnd = 0, maxFragLookUpTolerance = 0, candidate) {\n  // eagerly accept an accurate match (no tolerance)\n  if (candidate.start <= bufferEnd && candidate.start + candidate.duration > bufferEnd) {\n    return 0;\n  }\n  // offset should be within fragment boundary - config.maxFragLookUpTolerance\n  // this is to cope with situations like\n  // bufferEnd = 9.991\n  // frag[Ø] : [0,10]\n  // frag[1] : [10,20]\n  // bufferEnd is within frag[0] range ... although what we are expecting is to return frag[1] here\n  //              frag start               frag start+duration\n  //                  |-----------------------------|\n  //              <--->                         <--->\n  //  ...--------><-----------------------------><---------....\n  // previous frag         matching fragment         next frag\n  //  return -1             return 0                 return 1\n  // logger.log(`level/sn/start/end/bufEnd:${level}/${candidate.sn}/${candidate.start}/${(candidate.start+candidate.duration)}/${bufferEnd}`);\n  // Set the lookup tolerance to be small enough to detect the current segment - ensures we don't skip over very small segments\n  const candidateLookupTolerance = Math.min(maxFragLookUpTolerance, candidate.duration + (candidate.deltaPTS ? candidate.deltaPTS : 0));\n  if (candidate.start + candidate.duration - candidateLookupTolerance <= bufferEnd) {\n    return 1;\n  } else if (candidate.start - candidateLookupTolerance > bufferEnd && candidate.start) {\n    // if maxFragLookUpTolerance will have negative value then don't return -1 for first element\n    return -1;\n  }\n  return 0;\n}\n\n/**\n * The test function used by the findFragmentByPdt's BinarySearch to look for the best match to the current buffer conditions.\n * This function tests the candidate's program date time values, as represented in Unix time\n * @param candidate - The fragment to test\n * @param pdtBufferEnd - The Unix time representing the end of the current buffered range\n * @param maxFragLookUpTolerance - The amount of time that a fragment's start can be within in order to be considered contiguous\n * @returns true if contiguous, false otherwise\n */\nfunction pdtWithinToleranceTest(pdtBufferEnd, maxFragLookUpTolerance, candidate) {\n  const candidateLookupTolerance = Math.min(maxFragLookUpTolerance, candidate.duration + (candidate.deltaPTS ? candidate.deltaPTS : 0)) * 1000;\n\n  // endProgramDateTime can be null, default to zero\n  const endProgramDateTime = candidate.endProgramDateTime || 0;\n  return endProgramDateTime - candidateLookupTolerance > pdtBufferEnd;\n}\nfunction findFragWithCC(fragments, cc) {\n  return BinarySearch.search(fragments, candidate => {\n    if (candidate.cc < cc) {\n      return 1;\n    } else if (candidate.cc > cc) {\n      return -1;\n    } else {\n      return 0;\n    }\n  });\n}\n\nvar NetworkErrorAction = {\n  DoNothing: 0,\n  SendEndCallback: 1,\n  SendAlternateToPenaltyBox: 2,\n  RemoveAlternatePermanently: 3,\n  InsertDiscontinuity: 4,\n  RetryRequest: 5\n};\nvar ErrorActionFlags = {\n  None: 0,\n  MoveAllAlternatesMatchingHost: 1,\n  MoveAllAlternatesMatchingHDCP: 2,\n  SwitchToSDR: 4\n}; // Reserved for future use\nclass ErrorController {\n  constructor(hls) {\n    this.hls = void 0;\n    this.playlistError = 0;\n    this.penalizedRenditions = {};\n    this.log = void 0;\n    this.warn = void 0;\n    this.error = void 0;\n    this.hls = hls;\n    this.log = logger.log.bind(logger, `[info]:`);\n    this.warn = logger.warn.bind(logger, `[warning]:`);\n    this.error = logger.error.bind(logger, `[error]:`);\n    this.registerListeners();\n  }\n  registerListeners() {\n    const hls = this.hls;\n    hls.on(Events.ERROR, this.onError, this);\n    hls.on(Events.MANIFEST_LOADING, this.onManifestLoading, this);\n    hls.on(Events.LEVEL_UPDATED, this.onLevelUpdated, this);\n  }\n  unregisterListeners() {\n    const hls = this.hls;\n    if (!hls) {\n      return;\n    }\n    hls.off(Events.ERROR, this.onError, this);\n    hls.off(Events.ERROR, this.onErrorOut, this);\n    hls.off(Events.MANIFEST_LOADING, this.onManifestLoading, this);\n    hls.off(Events.LEVEL_UPDATED, this.onLevelUpdated, this);\n  }\n  destroy() {\n    this.unregisterListeners();\n    // @ts-ignore\n    this.hls = null;\n    this.penalizedRenditions = {};\n  }\n  startLoad(startPosition) {}\n  stopLoad() {\n    this.playlistError = 0;\n  }\n  getVariantLevelIndex(frag) {\n    return (frag == null ? void 0 : frag.type) === PlaylistLevelType.MAIN ? frag.level : this.hls.loadLevel;\n  }\n  onManifestLoading() {\n    this.playlistError = 0;\n    this.penalizedRenditions = {};\n  }\n  onLevelUpdated() {\n    this.playlistError = 0;\n  }\n  onError(event, data) {\n    var _data$frag, _data$level;\n    if (data.fatal) {\n      return;\n    }\n    const hls = this.hls;\n    const context = data.context;\n    switch (data.details) {\n      case ErrorDetails.FRAG_LOAD_ERROR:\n      case ErrorDetails.FRAG_LOAD_TIMEOUT:\n      case ErrorDetails.KEY_LOAD_ERROR:\n      case ErrorDetails.KEY_LOAD_TIMEOUT:\n        data.errorAction = this.getFragRetryOrSwitchAction(data);\n        return;\n      case ErrorDetails.FRAG_PARSING_ERROR:\n        // ignore empty segment errors marked as gap\n        if ((_data$frag = data.frag) != null && _data$frag.gap) {\n          data.errorAction = {\n            action: NetworkErrorAction.DoNothing,\n            flags: ErrorActionFlags.None\n          };\n          return;\n        }\n      // falls through\n      case ErrorDetails.FRAG_GAP:\n      case ErrorDetails.FRAG_DECRYPT_ERROR:\n        {\n          // Switch level if possible, otherwise allow retry count to reach max error retries\n          data.errorAction = this.getFragRetryOrSwitchAction(data);\n          data.errorAction.action = NetworkErrorAction.SendAlternateToPenaltyBox;\n          return;\n        }\n      case ErrorDetails.LEVEL_EMPTY_ERROR:\n      case ErrorDetails.LEVEL_PARSING_ERROR:\n        {\n          var _data$context, _data$context$levelDe;\n          // Only retry when empty and live\n          const levelIndex = data.parent === PlaylistLevelType.MAIN ? data.level : hls.loadLevel;\n          if (data.details === ErrorDetails.LEVEL_EMPTY_ERROR && !!((_data$context = data.context) != null && (_data$context$levelDe = _data$context.levelDetails) != null && _data$context$levelDe.live)) {\n            data.errorAction = this.getPlaylistRetryOrSwitchAction(data, levelIndex);\n          } else {\n            // Escalate to fatal if not retrying or switching\n            data.levelRetry = false;\n            data.errorAction = this.getLevelSwitchAction(data, levelIndex);\n          }\n        }\n        return;\n      case ErrorDetails.LEVEL_LOAD_ERROR:\n      case ErrorDetails.LEVEL_LOAD_TIMEOUT:\n        if (typeof (context == null ? void 0 : context.level) === 'number') {\n          data.errorAction = this.getPlaylistRetryOrSwitchAction(data, context.level);\n        }\n        return;\n      case ErrorDetails.AUDIO_TRACK_LOAD_ERROR:\n      case ErrorDetails.AUDIO_TRACK_LOAD_TIMEOUT:\n      case ErrorDetails.SUBTITLE_LOAD_ERROR:\n      case ErrorDetails.SUBTITLE_TRACK_LOAD_TIMEOUT:\n        if (context) {\n          const level = hls.levels[hls.loadLevel];\n          if (level && (context.type === PlaylistContextType.AUDIO_TRACK && level.hasAudioGroup(context.groupId) || context.type === PlaylistContextType.SUBTITLE_TRACK && level.hasSubtitleGroup(context.groupId))) {\n            // Perform Pathway switch or Redundant failover if possible for fastest recovery\n            // otherwise allow playlist retry count to reach max error retries\n            data.errorAction = this.getPlaylistRetryOrSwitchAction(data, hls.loadLevel);\n            data.errorAction.action = NetworkErrorAction.SendAlternateToPenaltyBox;\n            data.errorAction.flags = ErrorActionFlags.MoveAllAlternatesMatchingHost;\n            return;\n          }\n        }\n        return;\n      case ErrorDetails.KEY_SYSTEM_STATUS_OUTPUT_RESTRICTED:\n        {\n          const level = hls.levels[hls.loadLevel];\n          const restrictedHdcpLevel = level == null ? void 0 : level.attrs['HDCP-LEVEL'];\n          if (restrictedHdcpLevel) {\n            data.errorAction = {\n              action: NetworkErrorAction.SendAlternateToPenaltyBox,\n              flags: ErrorActionFlags.MoveAllAlternatesMatchingHDCP,\n              hdcpLevel: restrictedHdcpLevel\n            };\n          } else {\n            this.keySystemError(data);\n          }\n        }\n        return;\n      case ErrorDetails.BUFFER_ADD_CODEC_ERROR:\n      case ErrorDetails.REMUX_ALLOC_ERROR:\n      case ErrorDetails.BUFFER_APPEND_ERROR:\n        data.errorAction = this.getLevelSwitchAction(data, (_data$level = data.level) != null ? _data$level : hls.loadLevel);\n        return;\n      case ErrorDetails.INTERNAL_EXCEPTION:\n      case ErrorDetails.BUFFER_APPENDING_ERROR:\n      case ErrorDetails.BUFFER_FULL_ERROR:\n      case ErrorDetails.LEVEL_SWITCH_ERROR:\n      case ErrorDetails.BUFFER_STALLED_ERROR:\n      case ErrorDetails.BUFFER_SEEK_OVER_HOLE:\n      case ErrorDetails.BUFFER_NUDGE_ON_STALL:\n        data.errorAction = {\n          action: NetworkErrorAction.DoNothing,\n          flags: ErrorActionFlags.None\n        };\n        return;\n    }\n    if (data.type === ErrorTypes.KEY_SYSTEM_ERROR) {\n      this.keySystemError(data);\n    }\n  }\n  keySystemError(data) {\n    const levelIndex = this.getVariantLevelIndex(data.frag);\n    // Do not retry level. Escalate to fatal if switching levels fails.\n    data.levelRetry = false;\n    data.errorAction = this.getLevelSwitchAction(data, levelIndex);\n  }\n  getPlaylistRetryOrSwitchAction(data, levelIndex) {\n    const hls = this.hls;\n    const retryConfig = getRetryConfig(hls.config.playlistLoadPolicy, data);\n    const retryCount = this.playlistError++;\n    const retry = shouldRetry(retryConfig, retryCount, isTimeoutError(data), data.response);\n    if (retry) {\n      return {\n        action: NetworkErrorAction.RetryRequest,\n        flags: ErrorActionFlags.None,\n        retryConfig,\n        retryCount\n      };\n    }\n    const errorAction = this.getLevelSwitchAction(data, levelIndex);\n    if (retryConfig) {\n      errorAction.retryConfig = retryConfig;\n      errorAction.retryCount = retryCount;\n    }\n    return errorAction;\n  }\n  getFragRetryOrSwitchAction(data) {\n    const hls = this.hls;\n    // Share fragment error count accross media options (main, audio, subs)\n    // This allows for level based rendition switching when media option assets fail\n    const variantLevelIndex = this.getVariantLevelIndex(data.frag);\n    const level = hls.levels[variantLevelIndex];\n    const {\n      fragLoadPolicy,\n      keyLoadPolicy\n    } = hls.config;\n    const retryConfig = getRetryConfig(data.details.startsWith('key') ? keyLoadPolicy : fragLoadPolicy, data);\n    const fragmentErrors = hls.levels.reduce((acc, level) => acc + level.fragmentError, 0);\n    // Switch levels when out of retried or level index out of bounds\n    if (level) {\n      if (data.details !== ErrorDetails.FRAG_GAP) {\n        level.fragmentError++;\n      }\n      const retry = shouldRetry(retryConfig, fragmentErrors, isTimeoutError(data), data.response);\n      if (retry) {\n        return {\n          action: NetworkErrorAction.RetryRequest,\n          flags: ErrorActionFlags.None,\n          retryConfig,\n          retryCount: fragmentErrors\n        };\n      }\n    }\n    // Reach max retry count, or Missing level reference\n    // Switch to valid index\n    const errorAction = this.getLevelSwitchAction(data, variantLevelIndex);\n    // Add retry details to allow skipping of FRAG_PARSING_ERROR\n    if (retryConfig) {\n      errorAction.retryConfig = retryConfig;\n      errorAction.retryCount = fragmentErrors;\n    }\n    return errorAction;\n  }\n  getLevelSwitchAction(data, levelIndex) {\n    const hls = this.hls;\n    if (levelIndex === null || levelIndex === undefined) {\n      levelIndex = hls.loadLevel;\n    }\n    const level = this.hls.levels[levelIndex];\n    if (level) {\n      var _data$frag2, _data$context2;\n      const errorDetails = data.details;\n      level.loadError++;\n      if (errorDetails === ErrorDetails.BUFFER_APPEND_ERROR) {\n        level.fragmentError++;\n      }\n      // Search for next level to retry\n      let nextLevel = -1;\n      const {\n        levels,\n        loadLevel,\n        minAutoLevel,\n        maxAutoLevel\n      } = hls;\n      if (!hls.autoLevelEnabled) {\n        hls.loadLevel = -1;\n      }\n      const fragErrorType = (_data$frag2 = data.frag) == null ? void 0 : _data$frag2.type;\n      // Find alternate audio codec if available on audio codec error\n      const isAudioCodecError = fragErrorType === PlaylistLevelType.AUDIO && errorDetails === ErrorDetails.FRAG_PARSING_ERROR || data.sourceBufferName === 'audio' && (errorDetails === ErrorDetails.BUFFER_ADD_CODEC_ERROR || errorDetails === ErrorDetails.BUFFER_APPEND_ERROR);\n      const findAudioCodecAlternate = isAudioCodecError && levels.some(({\n        audioCodec\n      }) => level.audioCodec !== audioCodec);\n      // Find alternate video codec if available on video codec error\n      const isVideoCodecError = data.sourceBufferName === 'video' && (errorDetails === ErrorDetails.BUFFER_ADD_CODEC_ERROR || errorDetails === ErrorDetails.BUFFER_APPEND_ERROR);\n      const findVideoCodecAlternate = isVideoCodecError && levels.some(({\n        codecSet,\n        audioCodec\n      }) => level.codecSet !== codecSet && level.audioCodec === audioCodec);\n      const {\n        type: playlistErrorType,\n        groupId: playlistErrorGroupId\n      } = (_data$context2 = data.context) != null ? _data$context2 : {};\n      for (let i = levels.length; i--;) {\n        const candidate = (i + loadLevel) % levels.length;\n        if (candidate !== loadLevel && candidate >= minAutoLevel && candidate <= maxAutoLevel && levels[candidate].loadError === 0) {\n          var _level$audioGroups, _level$subtitleGroups;\n          const levelCandidate = levels[candidate];\n          // Skip level switch if GAP tag is found in next level at same position\n          if (errorDetails === ErrorDetails.FRAG_GAP && fragErrorType === PlaylistLevelType.MAIN && data.frag) {\n            const levelDetails = levels[candidate].details;\n            if (levelDetails) {\n              const fragCandidate = findFragmentByPTS(data.frag, levelDetails.fragments, data.frag.start);\n              if (fragCandidate != null && fragCandidate.gap) {\n                continue;\n              }\n            }\n          } else if (playlistErrorType === PlaylistContextType.AUDIO_TRACK && levelCandidate.hasAudioGroup(playlistErrorGroupId) || playlistErrorType === PlaylistContextType.SUBTITLE_TRACK && levelCandidate.hasSubtitleGroup(playlistErrorGroupId)) {\n            // For audio/subs playlist errors find another group ID or fallthrough to redundant fail-over\n            continue;\n          } else if (fragErrorType === PlaylistLevelType.AUDIO && (_level$audioGroups = level.audioGroups) != null && _level$audioGroups.some(groupId => levelCandidate.hasAudioGroup(groupId)) || fragErrorType === PlaylistLevelType.SUBTITLE && (_level$subtitleGroups = level.subtitleGroups) != null && _level$subtitleGroups.some(groupId => levelCandidate.hasSubtitleGroup(groupId)) || findAudioCodecAlternate && level.audioCodec === levelCandidate.audioCodec || !findAudioCodecAlternate && level.audioCodec !== levelCandidate.audioCodec || findVideoCodecAlternate && level.codecSet === levelCandidate.codecSet) {\n            // For video/audio/subs frag errors find another group ID or fallthrough to redundant fail-over\n            continue;\n          }\n          nextLevel = candidate;\n          break;\n        }\n      }\n      if (nextLevel > -1 && hls.loadLevel !== nextLevel) {\n        data.levelRetry = true;\n        this.playlistError = 0;\n        return {\n          action: NetworkErrorAction.SendAlternateToPenaltyBox,\n          flags: ErrorActionFlags.None,\n          nextAutoLevel: nextLevel\n        };\n      }\n    }\n    // No levels to switch / Manual level selection / Level not found\n    // Resolve with Pathway switch, Redundant fail-over, or stay on lowest Level\n    return {\n      action: NetworkErrorAction.SendAlternateToPenaltyBox,\n      flags: ErrorActionFlags.MoveAllAlternatesMatchingHost\n    };\n  }\n  onErrorOut(event, data) {\n    var _data$errorAction;\n    switch ((_data$errorAction = data.errorAction) == null ? void 0 : _data$errorAction.action) {\n      case NetworkErrorAction.DoNothing:\n        break;\n      case NetworkErrorAction.SendAlternateToPenaltyBox:\n        this.sendAlternateToPenaltyBox(data);\n        if (!data.errorAction.resolved && data.details !== ErrorDetails.FRAG_GAP) {\n          data.fatal = true;\n        } else if (/MediaSource readyState: ended/.test(data.error.message)) {\n          this.warn(`MediaSource ended after \"${data.sourceBufferName}\" sourceBuffer append error. Attempting to recover from media error.`);\n          this.hls.recoverMediaError();\n        }\n        break;\n      case NetworkErrorAction.RetryRequest:\n        // handled by stream and playlist/level controllers\n        break;\n    }\n    if (data.fatal) {\n      this.hls.stopLoad();\n      return;\n    }\n  }\n  sendAlternateToPenaltyBox(data) {\n    const hls = this.hls;\n    const errorAction = data.errorAction;\n    if (!errorAction) {\n      return;\n    }\n    const {\n      flags,\n      hdcpLevel,\n      nextAutoLevel\n    } = errorAction;\n    switch (flags) {\n      case ErrorActionFlags.None:\n        this.switchLevel(data, nextAutoLevel);\n        break;\n      case ErrorActionFlags.MoveAllAlternatesMatchingHDCP:\n        if (hdcpLevel) {\n          hls.maxHdcpLevel = HdcpLevels[HdcpLevels.indexOf(hdcpLevel) - 1];\n          errorAction.resolved = true;\n        }\n        this.warn(`Restricting playback to HDCP-LEVEL of \"${hls.maxHdcpLevel}\" or lower`);\n        break;\n    }\n    // If not resolved by previous actions try to switch to next level\n    if (!errorAction.resolved) {\n      this.switchLevel(data, nextAutoLevel);\n    }\n  }\n  switchLevel(data, levelIndex) {\n    if (levelIndex !== undefined && data.errorAction) {\n      this.warn(`switching to level ${levelIndex} after ${data.details}`);\n      this.hls.nextAutoLevel = levelIndex;\n      data.errorAction.resolved = true;\n      // Stream controller is responsible for this but won't switch on false start\n      this.hls.nextLoadLevel = this.hls.nextAutoLevel;\n    }\n  }\n}\n\nclass BasePlaylistController {\n  constructor(hls, logPrefix) {\n    this.hls = void 0;\n    this.timer = -1;\n    this.requestScheduled = -1;\n    this.canLoad = false;\n    this.log = void 0;\n    this.warn = void 0;\n    this.log = logger.log.bind(logger, `${logPrefix}:`);\n    this.warn = logger.warn.bind(logger, `${logPrefix}:`);\n    this.hls = hls;\n  }\n  destroy() {\n    this.clearTimer();\n    // @ts-ignore\n    this.hls = this.log = this.warn = null;\n  }\n  clearTimer() {\n    if (this.timer !== -1) {\n      self.clearTimeout(this.timer);\n      this.timer = -1;\n    }\n  }\n  startLoad() {\n    this.canLoad = true;\n    this.requestScheduled = -1;\n    this.loadPlaylist();\n  }\n  stopLoad() {\n    this.canLoad = false;\n    this.clearTimer();\n  }\n  switchParams(playlistUri, previous, current) {\n    const renditionReports = previous == null ? void 0 : previous.renditionReports;\n    if (renditionReports) {\n      let foundIndex = -1;\n      for (let i = 0; i < renditionReports.length; i++) {\n        const attr = renditionReports[i];\n        let uri;\n        try {\n          uri = new self.URL(attr.URI, previous.url).href;\n        } catch (error) {\n          logger.warn(`Could not construct new URL for Rendition Report: ${error}`);\n          uri = attr.URI || '';\n        }\n        // Use exact match. Otherwise, the last partial match, if any, will be used\n        // (Playlist URI includes a query string that the Rendition Report does not)\n        if (uri === playlistUri) {\n          foundIndex = i;\n          break;\n        } else if (uri === playlistUri.substring(0, uri.length)) {\n          foundIndex = i;\n        }\n      }\n      if (foundIndex !== -1) {\n        const attr = renditionReports[foundIndex];\n        const msn = parseInt(attr['LAST-MSN']) || (previous == null ? void 0 : previous.lastPartSn);\n        let part = parseInt(attr['LAST-PART']) || (previous == null ? void 0 : previous.lastPartIndex);\n        if (this.hls.config.lowLatencyMode) {\n          const currentGoal = Math.min(previous.age - previous.partTarget, previous.targetduration);\n          if (part >= 0 && currentGoal > previous.partTarget) {\n            part += 1;\n          }\n        }\n        const skip = current && getSkipValue(current);\n        return new HlsUrlParameters(msn, part >= 0 ? part : undefined, skip);\n      }\n    }\n  }\n  loadPlaylist(hlsUrlParameters) {\n    if (this.requestScheduled === -1) {\n      this.requestScheduled = self.performance.now();\n    }\n    // Loading is handled by the subclasses\n  }\n  shouldLoadPlaylist(playlist) {\n    return this.canLoad && !!playlist && !!playlist.url && (!playlist.details || playlist.details.live);\n  }\n  shouldReloadPlaylist(playlist) {\n    return this.timer === -1 && this.requestScheduled === -1 && this.shouldLoadPlaylist(playlist);\n  }\n  playlistLoaded(index, data, previousDetails) {\n    const {\n      details,\n      stats\n    } = data;\n\n    // Set last updated date-time\n    const now = self.performance.now();\n    const elapsed = stats.loading.first ? Math.max(0, now - stats.loading.first) : 0;\n    details.advancedDateTime = Date.now() - elapsed;\n\n    // if current playlist is a live playlist, arm a timer to reload it\n    if (details.live || previousDetails != null && previousDetails.live) {\n      details.reloaded(previousDetails);\n      if (previousDetails) {\n        this.log(`live playlist ${index} ${details.advanced ? 'REFRESHED ' + details.lastPartSn + '-' + details.lastPartIndex : details.updated ? 'UPDATED' : 'MISSED'}`);\n      }\n      // Merge live playlists to adjust fragment starts and fill in delta playlist skipped segments\n      if (previousDetails && details.fragments.length > 0) {\n        mergeDetails(previousDetails, details);\n      }\n      if (!this.canLoad || !details.live) {\n        return;\n      }\n      let deliveryDirectives;\n      let msn = undefined;\n      let part = undefined;\n      if (details.canBlockReload && details.endSN && details.advanced) {\n        // Load level with LL-HLS delivery directives\n        const lowLatencyMode = this.hls.config.lowLatencyMode;\n        const lastPartSn = details.lastPartSn;\n        const endSn = details.endSN;\n        const lastPartIndex = details.lastPartIndex;\n        const hasParts = lastPartIndex !== -1;\n        const lastPart = lastPartSn === endSn;\n        // When low latency mode is disabled, we'll skip part requests once the last part index is found\n        const nextSnStartIndex = lowLatencyMode ? 0 : lastPartIndex;\n        if (hasParts) {\n          msn = lastPart ? endSn + 1 : lastPartSn;\n          part = lastPart ? nextSnStartIndex : lastPartIndex + 1;\n        } else {\n          msn = endSn + 1;\n        }\n        // Low-Latency CDN Tune-in: \"age\" header and time since load indicates we're behind by more than one part\n        // Update directives to obtain the Playlist that has the estimated additional duration of media\n        const lastAdvanced = details.age;\n        const cdnAge = lastAdvanced + details.ageHeader;\n        let currentGoal = Math.min(cdnAge - details.partTarget, details.targetduration * 1.5);\n        if (currentGoal > 0) {\n          if (previousDetails && currentGoal > previousDetails.tuneInGoal) {\n            // If we attempted to get the next or latest playlist update, but currentGoal increased,\n            // then we either can't catchup, or the \"age\" header cannot be trusted.\n            this.warn(`CDN Tune-in goal increased from: ${previousDetails.tuneInGoal} to: ${currentGoal} with playlist age: ${details.age}`);\n            currentGoal = 0;\n          } else {\n            const segments = Math.floor(currentGoal / details.targetduration);\n            msn += segments;\n            if (part !== undefined) {\n              const parts = Math.round(currentGoal % details.targetduration / details.partTarget);\n              part += parts;\n            }\n            this.log(`CDN Tune-in age: ${details.ageHeader}s last advanced ${lastAdvanced.toFixed(2)}s goal: ${currentGoal} skip sn ${segments} to part ${part}`);\n          }\n          details.tuneInGoal = currentGoal;\n        }\n        deliveryDirectives = this.getDeliveryDirectives(details, data.deliveryDirectives, msn, part);\n        if (lowLatencyMode || !lastPart) {\n          this.loadPlaylist(deliveryDirectives);\n          return;\n        }\n      } else if (details.canBlockReload || details.canSkipUntil) {\n        deliveryDirectives = this.getDeliveryDirectives(details, data.deliveryDirectives, msn, part);\n      }\n      const bufferInfo = this.hls.mainForwardBufferInfo;\n      const position = bufferInfo ? bufferInfo.end - bufferInfo.len : 0;\n      const distanceToLiveEdgeMs = (details.edge - position) * 1000;\n      const reloadInterval = computeReloadInterval(details, distanceToLiveEdgeMs);\n      if (details.updated && now > this.requestScheduled + reloadInterval) {\n        this.requestScheduled = stats.loading.start;\n      }\n      if (msn !== undefined && details.canBlockReload) {\n        this.requestScheduled = stats.loading.first + reloadInterval - (details.partTarget * 1000 || 1000);\n      } else if (this.requestScheduled === -1 || this.requestScheduled + reloadInterval < now) {\n        this.requestScheduled = now;\n      } else if (this.requestScheduled - now <= 0) {\n        this.requestScheduled += reloadInterval;\n      }\n      let estimatedTimeUntilUpdate = this.requestScheduled - now;\n      estimatedTimeUntilUpdate = Math.max(0, estimatedTimeUntilUpdate);\n      this.log(`reload live playlist ${index} in ${Math.round(estimatedTimeUntilUpdate)} ms`);\n      // this.log(\n      //   `live reload ${details.updated ? 'REFRESHED' : 'MISSED'}\n      // reload in ${estimatedTimeUntilUpdate / 1000}\n      // round trip ${(stats.loading.end - stats.loading.start) / 1000}\n      // diff ${\n      //   (reloadInterval -\n      //     (estimatedTimeUntilUpdate +\n      //       stats.loading.end -\n      //       stats.loading.start)) /\n      //   1000\n      // }\n      // reload interval ${reloadInterval / 1000}\n      // target duration ${details.targetduration}\n      // distance to edge ${distanceToLiveEdgeMs / 1000}`\n      // );\n\n      this.timer = self.setTimeout(() => this.loadPlaylist(deliveryDirectives), estimatedTimeUntilUpdate);\n    } else {\n      this.clearTimer();\n    }\n  }\n  getDeliveryDirectives(details, previousDeliveryDirectives, msn, part) {\n    let skip = getSkipValue(details);\n    if (previousDeliveryDirectives != null && previousDeliveryDirectives.skip && details.deltaUpdateFailed) {\n      msn = previousDeliveryDirectives.msn;\n      part = previousDeliveryDirectives.part;\n      skip = HlsSkip.No;\n    }\n    return new HlsUrlParameters(msn, part, skip);\n  }\n  checkRetry(errorEvent) {\n    const errorDetails = errorEvent.details;\n    const isTimeout = isTimeoutError(errorEvent);\n    const errorAction = errorEvent.errorAction;\n    const {\n      action,\n      retryCount = 0,\n      retryConfig\n    } = errorAction || {};\n    const retry = !!errorAction && !!retryConfig && (action === NetworkErrorAction.RetryRequest || !errorAction.resolved && action === NetworkErrorAction.SendAlternateToPenaltyBox);\n    if (retry) {\n      var _errorEvent$context;\n      this.requestScheduled = -1;\n      if (retryCount >= retryConfig.maxNumRetry) {\n        return false;\n      }\n      if (isTimeout && (_errorEvent$context = errorEvent.context) != null && _errorEvent$context.deliveryDirectives) {\n        // The LL-HLS request already timed out so retry immediately\n        this.warn(`Retrying playlist loading ${retryCount + 1}/${retryConfig.maxNumRetry} after \"${errorDetails}\" without delivery-directives`);\n        this.loadPlaylist();\n      } else {\n        const delay = getRetryDelay(retryConfig, retryCount);\n        // Schedule level/track reload\n        this.timer = self.setTimeout(() => this.loadPlaylist(), delay);\n        this.warn(`Retrying playlist loading ${retryCount + 1}/${retryConfig.maxNumRetry} after \"${errorDetails}\" in ${delay}ms`);\n      }\n      // `levelRetry = true` used to inform other controllers that a retry is happening\n      errorEvent.levelRetry = true;\n      errorAction.resolved = true;\n    }\n    return retry;\n  }\n}\n\n/*\n * compute an Exponential Weighted moving average\n * - https://en.wikipedia.org/wiki/Moving_average#Exponential_moving_average\n *  - heavily inspired from shaka-player\n */\n\nclass EWMA {\n  //  About half of the estimated value will be from the last |halfLife| samples by weight.\n  constructor(halfLife, estimate = 0, weight = 0) {\n    this.halfLife = void 0;\n    this.alpha_ = void 0;\n    this.estimate_ = void 0;\n    this.totalWeight_ = void 0;\n    this.halfLife = halfLife;\n    // Larger values of alpha expire historical data more slowly.\n    this.alpha_ = halfLife ? Math.exp(Math.log(0.5) / halfLife) : 0;\n    this.estimate_ = estimate;\n    this.totalWeight_ = weight;\n  }\n  sample(weight, value) {\n    const adjAlpha = Math.pow(this.alpha_, weight);\n    this.estimate_ = value * (1 - adjAlpha) + adjAlpha * this.estimate_;\n    this.totalWeight_ += weight;\n  }\n  getTotalWeight() {\n    return this.totalWeight_;\n  }\n  getEstimate() {\n    if (this.alpha_) {\n      const zeroFactor = 1 - Math.pow(this.alpha_, this.totalWeight_);\n      if (zeroFactor) {\n        return this.estimate_ / zeroFactor;\n      }\n    }\n    return this.estimate_;\n  }\n}\n\n/*\n * EWMA Bandwidth Estimator\n *  - heavily inspired from shaka-player\n * Tracks bandwidth samples and estimates available bandwidth.\n * Based on the minimum of two exponentially-weighted moving averages with\n * different half-lives.\n */\n\nclass EwmaBandWidthEstimator {\n  constructor(slow, fast, defaultEstimate, defaultTTFB = 100) {\n    this.defaultEstimate_ = void 0;\n    this.minWeight_ = void 0;\n    this.minDelayMs_ = void 0;\n    this.slow_ = void 0;\n    this.fast_ = void 0;\n    this.defaultTTFB_ = void 0;\n    this.ttfb_ = void 0;\n    this.defaultEstimate_ = defaultEstimate;\n    this.minWeight_ = 0.001;\n    this.minDelayMs_ = 50;\n    this.slow_ = new EWMA(slow);\n    this.fast_ = new EWMA(fast);\n    this.defaultTTFB_ = defaultTTFB;\n    this.ttfb_ = new EWMA(slow);\n  }\n  update(slow, fast) {\n    const {\n      slow_,\n      fast_,\n      ttfb_\n    } = this;\n    if (slow_.halfLife !== slow) {\n      this.slow_ = new EWMA(slow, slow_.getEstimate(), slow_.getTotalWeight());\n    }\n    if (fast_.halfLife !== fast) {\n      this.fast_ = new EWMA(fast, fast_.getEstimate(), fast_.getTotalWeight());\n    }\n    if (ttfb_.halfLife !== slow) {\n      this.ttfb_ = new EWMA(slow, ttfb_.getEstimate(), ttfb_.getTotalWeight());\n    }\n  }\n  sample(durationMs, numBytes) {\n    durationMs = Math.max(durationMs, this.minDelayMs_);\n    const numBits = 8 * numBytes;\n    // weight is duration in seconds\n    const durationS = durationMs / 1000;\n    // value is bandwidth in bits/s\n    const bandwidthInBps = numBits / durationS;\n    this.fast_.sample(durationS, bandwidthInBps);\n    this.slow_.sample(durationS, bandwidthInBps);\n  }\n  sampleTTFB(ttfb) {\n    // weight is frequency curve applied to TTFB in seconds\n    // (longer times have less weight with expected input under 1 second)\n    const seconds = ttfb / 1000;\n    const weight = Math.sqrt(2) * Math.exp(-Math.pow(seconds, 2) / 2);\n    this.ttfb_.sample(weight, Math.max(ttfb, 5));\n  }\n  canEstimate() {\n    return this.fast_.getTotalWeight() >= this.minWeight_;\n  }\n  getEstimate() {\n    if (this.canEstimate()) {\n      // console.log('slow estimate:'+ Math.round(this.slow_.getEstimate()));\n      // console.log('fast estimate:'+ Math.round(this.fast_.getEstimate()));\n      // Take the minimum of these two estimates.  This should have the effect of\n      // adapting down quickly, but up more slowly.\n      return Math.min(this.fast_.getEstimate(), this.slow_.getEstimate());\n    } else {\n      return this.defaultEstimate_;\n    }\n  }\n  getEstimateTTFB() {\n    if (this.ttfb_.getTotalWeight() >= this.minWeight_) {\n      return this.ttfb_.getEstimate();\n    } else {\n      return this.defaultTTFB_;\n    }\n  }\n  destroy() {}\n}\n\nconst SUPPORTED_INFO_DEFAULT = {\n  supported: true,\n  configurations: [],\n  decodingInfoResults: [{\n    supported: true,\n    powerEfficient: true,\n    smooth: true\n  }]\n};\nconst SUPPORTED_INFO_CACHE = {};\nfunction requiresMediaCapabilitiesDecodingInfo(level, audioTracksByGroup, currentVideoRange, currentFrameRate, currentBw, audioPreference) {\n  // Only test support when configuration is exceeds minimum options\n  const audioGroups = level.audioCodec ? level.audioGroups : null;\n  const audioCodecPreference = audioPreference == null ? void 0 : audioPreference.audioCodec;\n  const channelsPreference = audioPreference == null ? void 0 : audioPreference.channels;\n  const maxChannels = channelsPreference ? parseInt(channelsPreference) : audioCodecPreference ? Infinity : 2;\n  let audioChannels = null;\n  if (audioGroups != null && audioGroups.length) {\n    try {\n      if (audioGroups.length === 1 && audioGroups[0]) {\n        audioChannels = audioTracksByGroup.groups[audioGroups[0]].channels;\n      } else {\n        audioChannels = audioGroups.reduce((acc, groupId) => {\n          if (groupId) {\n            const audioTrackGroup = audioTracksByGroup.groups[groupId];\n            if (!audioTrackGroup) {\n              throw new Error(`Audio track group ${groupId} not found`);\n            }\n            // Sum all channel key values\n            Object.keys(audioTrackGroup.channels).forEach(key => {\n              acc[key] = (acc[key] || 0) + audioTrackGroup.channels[key];\n            });\n          }\n          return acc;\n        }, {\n          2: 0\n        });\n      }\n    } catch (error) {\n      return true;\n    }\n  }\n  return level.videoCodec !== undefined && (level.width > 1920 && level.height > 1088 || level.height > 1920 && level.width > 1088 || level.frameRate > Math.max(currentFrameRate, 30) || level.videoRange !== 'SDR' && level.videoRange !== currentVideoRange || level.bitrate > Math.max(currentBw, 8e6)) || !!audioChannels && isFiniteNumber(maxChannels) && Object.keys(audioChannels).some(channels => parseInt(channels) > maxChannels);\n}\nfunction getMediaDecodingInfoPromise(level, audioTracksByGroup, mediaCapabilities) {\n  const videoCodecs = level.videoCodec;\n  const audioCodecs = level.audioCodec;\n  if (!videoCodecs || !audioCodecs || !mediaCapabilities) {\n    return Promise.resolve(SUPPORTED_INFO_DEFAULT);\n  }\n  const baseVideoConfiguration = {\n    width: level.width,\n    height: level.height,\n    bitrate: Math.ceil(Math.max(level.bitrate * 0.9, level.averageBitrate)),\n    // Assume a framerate of 30fps since MediaCapabilities will not accept Level default of 0.\n    framerate: level.frameRate || 30\n  };\n  const videoRange = level.videoRange;\n  if (videoRange !== 'SDR') {\n    baseVideoConfiguration.transferFunction = videoRange.toLowerCase();\n  }\n  const configurations = videoCodecs.split(',').map(videoCodec => ({\n    type: 'media-source',\n    video: _objectSpread2(_objectSpread2({}, baseVideoConfiguration), {}, {\n      contentType: mimeTypeForCodec(videoCodec, 'video')\n    })\n  }));\n  if (audioCodecs && level.audioGroups) {\n    level.audioGroups.forEach(audioGroupId => {\n      var _audioTracksByGroup$g;\n      if (!audioGroupId) {\n        return;\n      }\n      (_audioTracksByGroup$g = audioTracksByGroup.groups[audioGroupId]) == null ? void 0 : _audioTracksByGroup$g.tracks.forEach(audioTrack => {\n        if (audioTrack.groupId === audioGroupId) {\n          const channels = audioTrack.channels || '';\n          const channelsNumber = parseFloat(channels);\n          if (isFiniteNumber(channelsNumber) && channelsNumber > 2) {\n            configurations.push.apply(configurations, audioCodecs.split(',').map(audioCodec => ({\n              type: 'media-source',\n              audio: {\n                contentType: mimeTypeForCodec(audioCodec, 'audio'),\n                channels: '' + channelsNumber\n                // spatialRendering:\n                //   audioCodec === 'ec-3' && channels.indexOf('JOC'),\n              }\n            })));\n          }\n        }\n      });\n    });\n  }\n  return Promise.all(configurations.map(configuration => {\n    // Cache MediaCapabilities promises\n    const decodingInfoKey = getMediaDecodingInfoKey(configuration);\n    return SUPPORTED_INFO_CACHE[decodingInfoKey] || (SUPPORTED_INFO_CACHE[decodingInfoKey] = mediaCapabilities.decodingInfo(configuration));\n  })).then(decodingInfoResults => ({\n    supported: !decodingInfoResults.some(info => !info.supported),\n    configurations,\n    decodingInfoResults\n  })).catch(error => ({\n    supported: false,\n    configurations,\n    decodingInfoResults: [],\n    error\n  }));\n}\nfunction getMediaDecodingInfoKey(config) {\n  const {\n    audio,\n    video\n  } = config;\n  const mediaConfig = video || audio;\n  if (mediaConfig) {\n    const codec = mediaConfig.contentType.split('\"')[1];\n    if (video) {\n      return `r${video.height}x${video.width}f${Math.ceil(video.framerate)}${video.transferFunction || 'sd'}_${codec}_${Math.ceil(video.bitrate / 1e5)}`;\n    }\n    if (audio) {\n      return `c${audio.channels}${audio.spatialRendering ? 's' : 'n'}_${codec}`;\n    }\n  }\n  return '';\n}\n\n/**\n * @returns Whether we can detect and validate HDR capability within the window context\n */\nfunction isHdrSupported() {\n  if (typeof matchMedia === 'function') {\n    const mediaQueryList = matchMedia('(dynamic-range: high)');\n    const badQuery = matchMedia('bad query');\n    if (mediaQueryList.media !== badQuery.media) {\n      return mediaQueryList.matches === true;\n    }\n  }\n  return false;\n}\n\n/**\n * Sanitizes inputs to return the active video selection options for HDR/SDR.\n * When both inputs are null:\n *\n *    `{ preferHDR: false, allowedVideoRanges: [] }`\n *\n * When `currentVideoRange` non-null, maintain the active range:\n *\n *    `{ preferHDR: currentVideoRange !== 'SDR', allowedVideoRanges: [currentVideoRange] }`\n *\n * When VideoSelectionOption non-null:\n *\n *  - Allow all video ranges if `allowedVideoRanges` unspecified.\n *  - If `preferHDR` is non-null use the value to filter `allowedVideoRanges`.\n *  - Else check window for HDR support and set `preferHDR` to the result.\n *\n * @param currentVideoRange\n * @param videoPreference\n */\nfunction getVideoSelectionOptions(currentVideoRange, videoPreference) {\n  let preferHDR = false;\n  let allowedVideoRanges = [];\n  if (currentVideoRange) {\n    preferHDR = currentVideoRange !== 'SDR';\n    allowedVideoRanges = [currentVideoRange];\n  }\n  if (videoPreference) {\n    allowedVideoRanges = videoPreference.allowedVideoRanges || VideoRangeValues.slice(0);\n    preferHDR = videoPreference.preferHDR !== undefined ? videoPreference.preferHDR : isHdrSupported();\n    if (preferHDR) {\n      allowedVideoRanges = allowedVideoRanges.filter(range => range !== 'SDR');\n    } else {\n      allowedVideoRanges = ['SDR'];\n    }\n  }\n  return {\n    preferHDR,\n    allowedVideoRanges\n  };\n}\n\nfunction getStartCodecTier(codecTiers, currentVideoRange, currentBw, audioPreference, videoPreference) {\n  const codecSets = Object.keys(codecTiers);\n  const channelsPreference = audioPreference == null ? void 0 : audioPreference.channels;\n  const audioCodecPreference = audioPreference == null ? void 0 : audioPreference.audioCodec;\n  const preferStereo = channelsPreference && parseInt(channelsPreference) === 2;\n  // Use first level set to determine stereo, and minimum resolution and framerate\n  let hasStereo = true;\n  let hasCurrentVideoRange = false;\n  let minHeight = Infinity;\n  let minFramerate = Infinity;\n  let minBitrate = Infinity;\n  let selectedScore = 0;\n  let videoRanges = [];\n  const {\n    preferHDR,\n    allowedVideoRanges\n  } = getVideoSelectionOptions(currentVideoRange, videoPreference);\n  for (let i = codecSets.length; i--;) {\n    const tier = codecTiers[codecSets[i]];\n    hasStereo = tier.channels[2] > 0;\n    minHeight = Math.min(minHeight, tier.minHeight);\n    minFramerate = Math.min(minFramerate, tier.minFramerate);\n    minBitrate = Math.min(minBitrate, tier.minBitrate);\n    const matchingVideoRanges = allowedVideoRanges.filter(range => tier.videoRanges[range] > 0);\n    if (matchingVideoRanges.length > 0) {\n      hasCurrentVideoRange = true;\n      videoRanges = matchingVideoRanges;\n    }\n  }\n  minHeight = isFiniteNumber(minHeight) ? minHeight : 0;\n  minFramerate = isFiniteNumber(minFramerate) ? minFramerate : 0;\n  const maxHeight = Math.max(1080, minHeight);\n  const maxFramerate = Math.max(30, minFramerate);\n  minBitrate = isFiniteNumber(minBitrate) ? minBitrate : currentBw;\n  currentBw = Math.max(minBitrate, currentBw);\n  // If there are no variants with matching preference, set currentVideoRange to undefined\n  if (!hasCurrentVideoRange) {\n    currentVideoRange = undefined;\n    videoRanges = [];\n  }\n  const codecSet = codecSets.reduce((selected, candidate) => {\n    // Remove candiates which do not meet bitrate, default audio, stereo or channels preference, 1080p or lower, 30fps or lower, or SDR/HDR selection if present\n    const candidateTier = codecTiers[candidate];\n    if (candidate === selected) {\n      return selected;\n    }\n    if (candidateTier.minBitrate > currentBw) {\n      logStartCodecCandidateIgnored(candidate, `min bitrate of ${candidateTier.minBitrate} > current estimate of ${currentBw}`);\n      return selected;\n    }\n    if (!candidateTier.hasDefaultAudio) {\n      logStartCodecCandidateIgnored(candidate, `no renditions with default or auto-select sound found`);\n      return selected;\n    }\n    if (audioCodecPreference && candidate.indexOf(audioCodecPreference.substring(0, 4)) % 5 !== 0) {\n      logStartCodecCandidateIgnored(candidate, `audio codec preference \"${audioCodecPreference}\" not found`);\n      return selected;\n    }\n    if (channelsPreference && !preferStereo) {\n      if (!candidateTier.channels[channelsPreference]) {\n        logStartCodecCandidateIgnored(candidate, `no renditions with ${channelsPreference} channel sound found (channels options: ${Object.keys(candidateTier.channels)})`);\n        return selected;\n      }\n    } else if ((!audioCodecPreference || preferStereo) && hasStereo && candidateTier.channels['2'] === 0) {\n      logStartCodecCandidateIgnored(candidate, `no renditions with stereo sound found`);\n      return selected;\n    }\n    if (candidateTier.minHeight > maxHeight) {\n      logStartCodecCandidateIgnored(candidate, `min resolution of ${candidateTier.minHeight} > maximum of ${maxHeight}`);\n      return selected;\n    }\n    if (candidateTier.minFramerate > maxFramerate) {\n      logStartCodecCandidateIgnored(candidate, `min framerate of ${candidateTier.minFramerate} > maximum of ${maxFramerate}`);\n      return selected;\n    }\n    if (!videoRanges.some(range => candidateTier.videoRanges[range] > 0)) {\n      logStartCodecCandidateIgnored(candidate, `no variants with VIDEO-RANGE of ${JSON.stringify(videoRanges)} found`);\n      return selected;\n    }\n    if (candidateTier.maxScore < selectedScore) {\n      logStartCodecCandidateIgnored(candidate, `max score of ${candidateTier.maxScore} < selected max of ${selectedScore}`);\n      return selected;\n    }\n    // Remove candiates with less preferred codecs or more errors\n    if (selected && (codecsSetSelectionPreferenceValue(candidate) >= codecsSetSelectionPreferenceValue(selected) || candidateTier.fragmentError > codecTiers[selected].fragmentError)) {\n      return selected;\n    }\n    selectedScore = candidateTier.maxScore;\n    return candidate;\n  }, undefined);\n  return {\n    codecSet,\n    videoRanges,\n    preferHDR,\n    minFramerate,\n    minBitrate\n  };\n}\nfunction logStartCodecCandidateIgnored(codeSet, reason) {\n  logger.log(`[abr] start candidates with \"${codeSet}\" ignored because ${reason}`);\n}\nfunction getAudioTracksByGroup(allAudioTracks) {\n  return allAudioTracks.reduce((audioTracksByGroup, track) => {\n    let trackGroup = audioTracksByGroup.groups[track.groupId];\n    if (!trackGroup) {\n      trackGroup = audioTracksByGroup.groups[track.groupId] = {\n        tracks: [],\n        channels: {\n          2: 0\n        },\n        hasDefault: false,\n        hasAutoSelect: false\n      };\n    }\n    trackGroup.tracks.push(track);\n    const channelsKey = track.channels || '2';\n    trackGroup.channels[channelsKey] = (trackGroup.channels[channelsKey] || 0) + 1;\n    trackGroup.hasDefault = trackGroup.hasDefault || track.default;\n    trackGroup.hasAutoSelect = trackGroup.hasAutoSelect || track.autoselect;\n    if (trackGroup.hasDefault) {\n      audioTracksByGroup.hasDefaultAudio = true;\n    }\n    if (trackGroup.hasAutoSelect) {\n      audioTracksByGroup.hasAutoSelectAudio = true;\n    }\n    return audioTracksByGroup;\n  }, {\n    hasDefaultAudio: false,\n    hasAutoSelectAudio: false,\n    groups: {}\n  });\n}\nfunction getCodecTiers(levels, audioTracksByGroup, minAutoLevel, maxAutoLevel) {\n  return levels.slice(minAutoLevel, maxAutoLevel + 1).reduce((tiers, level) => {\n    if (!level.codecSet) {\n      return tiers;\n    }\n    const audioGroups = level.audioGroups;\n    let tier = tiers[level.codecSet];\n    if (!tier) {\n      tiers[level.codecSet] = tier = {\n        minBitrate: Infinity,\n        minHeight: Infinity,\n        minFramerate: Infinity,\n        maxScore: 0,\n        videoRanges: {\n          SDR: 0\n        },\n        channels: {\n          '2': 0\n        },\n        hasDefaultAudio: !audioGroups,\n        fragmentError: 0\n      };\n    }\n    tier.minBitrate = Math.min(tier.minBitrate, level.bitrate);\n    const lesserWidthOrHeight = Math.min(level.height, level.width);\n    tier.minHeight = Math.min(tier.minHeight, lesserWidthOrHeight);\n    tier.minFramerate = Math.min(tier.minFramerate, level.frameRate);\n    tier.maxScore = Math.max(tier.maxScore, level.score);\n    tier.fragmentError += level.fragmentError;\n    tier.videoRanges[level.videoRange] = (tier.videoRanges[level.videoRange] || 0) + 1;\n    if (audioGroups) {\n      audioGroups.forEach(audioGroupId => {\n        if (!audioGroupId) {\n          return;\n        }\n        const audioGroup = audioTracksByGroup.groups[audioGroupId];\n        if (!audioGroup) {\n          return;\n        }\n        // Default audio is any group with DEFAULT=YES, or if missing then any group with AUTOSELECT=YES, or all variants\n        tier.hasDefaultAudio = tier.hasDefaultAudio || audioTracksByGroup.hasDefaultAudio ? audioGroup.hasDefault : audioGroup.hasAutoSelect || !audioTracksByGroup.hasDefaultAudio && !audioTracksByGroup.hasAutoSelectAudio;\n        Object.keys(audioGroup.channels).forEach(channels => {\n          tier.channels[channels] = (tier.channels[channels] || 0) + audioGroup.channels[channels];\n        });\n      });\n    }\n    return tiers;\n  }, {});\n}\nfunction findMatchingOption(option, tracks, matchPredicate) {\n  if ('attrs' in option) {\n    const index = tracks.indexOf(option);\n    if (index !== -1) {\n      return index;\n    }\n  }\n  for (let i = 0; i < tracks.length; i++) {\n    const track = tracks[i];\n    if (matchesOption(option, track, matchPredicate)) {\n      return i;\n    }\n  }\n  return -1;\n}\nfunction matchesOption(option, track, matchPredicate) {\n  const {\n    groupId,\n    name,\n    lang,\n    assocLang,\n    characteristics,\n    default: isDefault\n  } = option;\n  const forced = option.forced;\n  return (groupId === undefined || track.groupId === groupId) && (name === undefined || track.name === name) && (lang === undefined || track.lang === lang) && (lang === undefined || track.assocLang === assocLang) && (isDefault === undefined || track.default === isDefault) && (forced === undefined || track.forced === forced) && (characteristics === undefined || characteristicsMatch(characteristics, track.characteristics)) && (matchPredicate === undefined || matchPredicate(option, track));\n}\nfunction characteristicsMatch(characteristicsA, characteristicsB = '') {\n  const arrA = characteristicsA.split(',');\n  const arrB = characteristicsB.split(',');\n  // Expects each item to be unique:\n  return arrA.length === arrB.length && !arrA.some(el => arrB.indexOf(el) === -1);\n}\nfunction audioMatchPredicate(option, track) {\n  const {\n    audioCodec,\n    channels\n  } = option;\n  return (audioCodec === undefined || (track.audioCodec || '').substring(0, 4) === audioCodec.substring(0, 4)) && (channels === undefined || channels === (track.channels || '2'));\n}\nfunction findClosestLevelWithAudioGroup(option, levels, allAudioTracks, searchIndex, matchPredicate) {\n  const currentLevel = levels[searchIndex];\n  // Are there variants with same URI as current level?\n  // If so, find a match that does not require any level URI change\n  const variants = levels.reduce((variantMap, level, index) => {\n    const uri = level.uri;\n    const renditions = variantMap[uri] || (variantMap[uri] = []);\n    renditions.push(index);\n    return variantMap;\n  }, {});\n  const renditions = variants[currentLevel.uri];\n  if (renditions.length > 1) {\n    searchIndex = Math.max.apply(Math, renditions);\n  }\n  // Find best match\n  const currentVideoRange = currentLevel.videoRange;\n  const currentFrameRate = currentLevel.frameRate;\n  const currentVideoCodec = currentLevel.codecSet.substring(0, 4);\n  const matchingVideo = searchDownAndUpList(levels, searchIndex, level => {\n    if (level.videoRange !== currentVideoRange || level.frameRate !== currentFrameRate || level.codecSet.substring(0, 4) !== currentVideoCodec) {\n      return false;\n    }\n    const audioGroups = level.audioGroups;\n    const tracks = allAudioTracks.filter(track => !audioGroups || audioGroups.indexOf(track.groupId) !== -1);\n    return findMatchingOption(option, tracks, matchPredicate) > -1;\n  });\n  if (matchingVideo > -1) {\n    return matchingVideo;\n  }\n  return searchDownAndUpList(levels, searchIndex, level => {\n    const audioGroups = level.audioGroups;\n    const tracks = allAudioTracks.filter(track => !audioGroups || audioGroups.indexOf(track.groupId) !== -1);\n    return findMatchingOption(option, tracks, matchPredicate) > -1;\n  });\n}\nfunction searchDownAndUpList(arr, searchIndex, predicate) {\n  for (let i = searchIndex; i > -1; i--) {\n    if (predicate(arr[i])) {\n      return i;\n    }\n  }\n  for (let i = searchIndex + 1; i < arr.length; i++) {\n    if (predicate(arr[i])) {\n      return i;\n    }\n  }\n  return -1;\n}\n\nclass AbrController {\n  constructor(_hls) {\n    this.hls = void 0;\n    this.lastLevelLoadSec = 0;\n    this.lastLoadedFragLevel = -1;\n    this.firstSelection = -1;\n    this._nextAutoLevel = -1;\n    this.nextAutoLevelKey = '';\n    this.audioTracksByGroup = null;\n    this.codecTiers = null;\n    this.timer = -1;\n    this.fragCurrent = null;\n    this.partCurrent = null;\n    this.bitrateTestDelay = 0;\n    this.bwEstimator = void 0;\n    /*\n        This method monitors the download rate of the current fragment, and will downswitch if that fragment will not load\n        quickly enough to prevent underbuffering\n      */\n    this._abandonRulesCheck = () => {\n      const {\n        fragCurrent: frag,\n        partCurrent: part,\n        hls\n      } = this;\n      const {\n        autoLevelEnabled,\n        media\n      } = hls;\n      if (!frag || !media) {\n        return;\n      }\n      const now = performance.now();\n      const stats = part ? part.stats : frag.stats;\n      const duration = part ? part.duration : frag.duration;\n      const timeLoading = now - stats.loading.start;\n      const minAutoLevel = hls.minAutoLevel;\n      // If frag loading is aborted, complete, or from lowest level, stop timer and return\n      if (stats.aborted || stats.loaded && stats.loaded === stats.total || frag.level <= minAutoLevel) {\n        this.clearTimer();\n        // reset forced auto level value so that next level will be selected\n        this._nextAutoLevel = -1;\n        return;\n      }\n\n      // This check only runs if we're in ABR mode and actually playing\n      if (!autoLevelEnabled || media.paused || !media.playbackRate || !media.readyState) {\n        return;\n      }\n      const bufferInfo = hls.mainForwardBufferInfo;\n      if (bufferInfo === null) {\n        return;\n      }\n      const ttfbEstimate = this.bwEstimator.getEstimateTTFB();\n      const playbackRate = Math.abs(media.playbackRate);\n      // To maintain stable adaptive playback, only begin monitoring frag loading after half or more of its playback duration has passed\n      if (timeLoading <= Math.max(ttfbEstimate, 1000 * (duration / (playbackRate * 2)))) {\n        return;\n      }\n\n      // bufferStarvationDelay is an estimate of the amount time (in seconds) it will take to exhaust the buffer\n      const bufferStarvationDelay = bufferInfo.len / playbackRate;\n      const ttfb = stats.loading.first ? stats.loading.first - stats.loading.start : -1;\n      const loadedFirstByte = stats.loaded && ttfb > -1;\n      const bwEstimate = this.getBwEstimate();\n      const levels = hls.levels;\n      const level = levels[frag.level];\n      const expectedLen = stats.total || Math.max(stats.loaded, Math.round(duration * level.averageBitrate / 8));\n      let timeStreaming = loadedFirstByte ? timeLoading - ttfb : timeLoading;\n      if (timeStreaming < 1 && loadedFirstByte) {\n        timeStreaming = Math.min(timeLoading, stats.loaded * 8 / bwEstimate);\n      }\n      const loadRate = loadedFirstByte ? stats.loaded * 1000 / timeStreaming : 0;\n      // fragLoadDelay is an estimate of the time (in seconds) it will take to buffer the remainder of the fragment\n      const fragLoadedDelay = loadRate ? (expectedLen - stats.loaded) / loadRate : expectedLen * 8 / bwEstimate + ttfbEstimate / 1000;\n      // Only downswitch if the time to finish loading the current fragment is greater than the amount of buffer left\n      if (fragLoadedDelay <= bufferStarvationDelay) {\n        return;\n      }\n      const bwe = loadRate ? loadRate * 8 : bwEstimate;\n      let fragLevelNextLoadedDelay = Number.POSITIVE_INFINITY;\n      let nextLoadLevel;\n      // Iterate through lower level and try to find the largest one that avoids rebuffering\n      for (nextLoadLevel = frag.level - 1; nextLoadLevel > minAutoLevel; nextLoadLevel--) {\n        // compute time to load next fragment at lower level\n        // 8 = bits per byte (bps/Bps)\n        const levelNextBitrate = levels[nextLoadLevel].maxBitrate;\n        fragLevelNextLoadedDelay = this.getTimeToLoadFrag(ttfbEstimate / 1000, bwe, duration * levelNextBitrate, !levels[nextLoadLevel].details);\n        if (fragLevelNextLoadedDelay < bufferStarvationDelay) {\n          break;\n        }\n      }\n      // Only emergency switch down if it takes less time to load a new fragment at lowest level instead of continuing\n      // to load the current one\n      if (fragLevelNextLoadedDelay >= fragLoadedDelay) {\n        return;\n      }\n\n      // if estimated load time of new segment is completely unreasonable, ignore and do not emergency switch down\n      if (fragLevelNextLoadedDelay > duration * 10) {\n        return;\n      }\n      hls.nextLoadLevel = hls.nextAutoLevel = nextLoadLevel;\n      if (loadedFirstByte) {\n        // If there has been loading progress, sample bandwidth using loading time offset by minimum TTFB time\n        this.bwEstimator.sample(timeLoading - Math.min(ttfbEstimate, ttfb), stats.loaded);\n      } else {\n        // If there has been no loading progress, sample TTFB\n        this.bwEstimator.sampleTTFB(timeLoading);\n      }\n      const nextLoadLevelBitrate = levels[nextLoadLevel].maxBitrate;\n      if (this.getBwEstimate() * this.hls.config.abrBandWidthUpFactor > nextLoadLevelBitrate) {\n        this.resetEstimator(nextLoadLevelBitrate);\n      }\n      this.clearTimer();\n      logger.warn(`[abr] Fragment ${frag.sn}${part ? ' part ' + part.index : ''} of level ${frag.level} is loading too slowly;\n      Time to underbuffer: ${bufferStarvationDelay.toFixed(3)} s\n      Estimated load time for current fragment: ${fragLoadedDelay.toFixed(3)} s\n      Estimated load time for down switch fragment: ${fragLevelNextLoadedDelay.toFixed(3)} s\n      TTFB estimate: ${ttfb | 0} ms\n      Current BW estimate: ${isFiniteNumber(bwEstimate) ? bwEstimate | 0 : 'Unknown'} bps\n      New BW estimate: ${this.getBwEstimate() | 0} bps\n      Switching to level ${nextLoadLevel} @ ${nextLoadLevelBitrate | 0} bps`);\n      hls.trigger(Events.FRAG_LOAD_EMERGENCY_ABORTED, {\n        frag,\n        part,\n        stats\n      });\n    };\n    this.hls = _hls;\n    this.bwEstimator = this.initEstimator();\n    this.registerListeners();\n  }\n  resetEstimator(abrEwmaDefaultEstimate) {\n    if (abrEwmaDefaultEstimate) {\n      logger.log(`setting initial bwe to ${abrEwmaDefaultEstimate}`);\n      this.hls.config.abrEwmaDefaultEstimate = abrEwmaDefaultEstimate;\n    }\n    this.firstSelection = -1;\n    this.bwEstimator = this.initEstimator();\n  }\n  initEstimator() {\n    const config = this.hls.config;\n    return new EwmaBandWidthEstimator(config.abrEwmaSlowVoD, config.abrEwmaFastVoD, config.abrEwmaDefaultEstimate);\n  }\n  registerListeners() {\n    const {\n      hls\n    } = this;\n    hls.on(Events.MANIFEST_LOADING, this.onManifestLoading, this);\n    hls.on(Events.FRAG_LOADING, this.onFragLoading, this);\n    hls.on(Events.FRAG_LOADED, this.onFragLoaded, this);\n    hls.on(Events.FRAG_BUFFERED, this.onFragBuffered, this);\n    hls.on(Events.LEVEL_SWITCHING, this.onLevelSwitching, this);\n    hls.on(Events.LEVEL_LOADED, this.onLevelLoaded, this);\n    hls.on(Events.LEVELS_UPDATED, this.onLevelsUpdated, this);\n    hls.on(Events.MAX_AUTO_LEVEL_UPDATED, this.onMaxAutoLevelUpdated, this);\n    hls.on(Events.ERROR, this.onError, this);\n  }\n  unregisterListeners() {\n    const {\n      hls\n    } = this;\n    if (!hls) {\n      return;\n    }\n    hls.off(Events.MANIFEST_LOADING, this.onManifestLoading, this);\n    hls.off(Events.FRAG_LOADING, this.onFragLoading, this);\n    hls.off(Events.FRAG_LOADED, this.onFragLoaded, this);\n    hls.off(Events.FRAG_BUFFERED, this.onFragBuffered, this);\n    hls.off(Events.LEVEL_SWITCHING, this.onLevelSwitching, this);\n    hls.off(Events.LEVEL_LOADED, this.onLevelLoaded, this);\n    hls.off(Events.LEVELS_UPDATED, this.onLevelsUpdated, this);\n    hls.off(Events.MAX_AUTO_LEVEL_UPDATED, this.onMaxAutoLevelUpdated, this);\n    hls.off(Events.ERROR, this.onError, this);\n  }\n  destroy() {\n    this.unregisterListeners();\n    this.clearTimer();\n    // @ts-ignore\n    this.hls = this._abandonRulesCheck = null;\n    this.fragCurrent = this.partCurrent = null;\n  }\n  onManifestLoading(event, data) {\n    this.lastLoadedFragLevel = -1;\n    this.firstSelection = -1;\n    this.lastLevelLoadSec = 0;\n    this.fragCurrent = this.partCurrent = null;\n    this.onLevelsUpdated();\n    this.clearTimer();\n  }\n  onLevelsUpdated() {\n    if (this.lastLoadedFragLevel > -1 && this.fragCurrent) {\n      this.lastLoadedFragLevel = this.fragCurrent.level;\n    }\n    this._nextAutoLevel = -1;\n    this.onMaxAutoLevelUpdated();\n    this.codecTiers = null;\n    this.audioTracksByGroup = null;\n  }\n  onMaxAutoLevelUpdated() {\n    this.firstSelection = -1;\n    this.nextAutoLevelKey = '';\n  }\n  onFragLoading(event, data) {\n    const frag = data.frag;\n    if (this.ignoreFragment(frag)) {\n      return;\n    }\n    if (!frag.bitrateTest) {\n      var _data$part;\n      this.fragCurrent = frag;\n      this.partCurrent = (_data$part = data.part) != null ? _data$part : null;\n    }\n    this.clearTimer();\n    this.timer = self.setInterval(this._abandonRulesCheck, 100);\n  }\n  onLevelSwitching(event, data) {\n    this.clearTimer();\n  }\n  onError(event, data) {\n    if (data.fatal) {\n      return;\n    }\n    switch (data.details) {\n      case ErrorDetails.BUFFER_ADD_CODEC_ERROR:\n      case ErrorDetails.BUFFER_APPEND_ERROR:\n        // Reset last loaded level so that a new selection can be made after calling recoverMediaError\n        this.lastLoadedFragLevel = -1;\n        this.firstSelection = -1;\n        break;\n      case ErrorDetails.FRAG_LOAD_TIMEOUT:\n        {\n          const frag = data.frag;\n          const {\n            fragCurrent,\n            partCurrent: part\n          } = this;\n          if (frag && fragCurrent && frag.sn === fragCurrent.sn && frag.level === fragCurrent.level) {\n            const now = performance.now();\n            const stats = part ? part.stats : frag.stats;\n            const timeLoading = now - stats.loading.start;\n            const ttfb = stats.loading.first ? stats.loading.first - stats.loading.start : -1;\n            const loadedFirstByte = stats.loaded && ttfb > -1;\n            if (loadedFirstByte) {\n              const ttfbEstimate = this.bwEstimator.getEstimateTTFB();\n              this.bwEstimator.sample(timeLoading - Math.min(ttfbEstimate, ttfb), stats.loaded);\n            } else {\n              this.bwEstimator.sampleTTFB(timeLoading);\n            }\n          }\n          break;\n        }\n    }\n  }\n  getTimeToLoadFrag(timeToFirstByteSec, bandwidth, fragSizeBits, isSwitch) {\n    const fragLoadSec = timeToFirstByteSec + fragSizeBits / bandwidth;\n    const playlistLoadSec = isSwitch ? this.lastLevelLoadSec : 0;\n    return fragLoadSec + playlistLoadSec;\n  }\n  onLevelLoaded(event, data) {\n    const config = this.hls.config;\n    const {\n      loading\n    } = data.stats;\n    const timeLoadingMs = loading.end - loading.start;\n    if (isFiniteNumber(timeLoadingMs)) {\n      this.lastLevelLoadSec = timeLoadingMs / 1000;\n    }\n    if (data.details.live) {\n      this.bwEstimator.update(config.abrEwmaSlowLive, config.abrEwmaFastLive);\n    } else {\n      this.bwEstimator.update(config.abrEwmaSlowVoD, config.abrEwmaFastVoD);\n    }\n  }\n  onFragLoaded(event, {\n    frag,\n    part\n  }) {\n    const stats = part ? part.stats : frag.stats;\n    if (frag.type === PlaylistLevelType.MAIN) {\n      this.bwEstimator.sampleTTFB(stats.loading.first - stats.loading.start);\n    }\n    if (this.ignoreFragment(frag)) {\n      return;\n    }\n    // stop monitoring bw once frag loaded\n    this.clearTimer();\n    // reset forced auto level value so that next level will be selected\n    if (frag.level === this._nextAutoLevel) {\n      this._nextAutoLevel = -1;\n    }\n    this.firstSelection = -1;\n\n    // compute level average bitrate\n    if (this.hls.config.abrMaxWithRealBitrate) {\n      const duration = part ? part.duration : frag.duration;\n      const level = this.hls.levels[frag.level];\n      const loadedBytes = (level.loaded ? level.loaded.bytes : 0) + stats.loaded;\n      const loadedDuration = (level.loaded ? level.loaded.duration : 0) + duration;\n      level.loaded = {\n        bytes: loadedBytes,\n        duration: loadedDuration\n      };\n      level.realBitrate = Math.round(8 * loadedBytes / loadedDuration);\n    }\n    if (frag.bitrateTest) {\n      const fragBufferedData = {\n        stats,\n        frag,\n        part,\n        id: frag.type\n      };\n      this.onFragBuffered(Events.FRAG_BUFFERED, fragBufferedData);\n      frag.bitrateTest = false;\n    } else {\n      // store level id after successful fragment load for playback\n      this.lastLoadedFragLevel = frag.level;\n    }\n  }\n  onFragBuffered(event, data) {\n    const {\n      frag,\n      part\n    } = data;\n    const stats = part != null && part.stats.loaded ? part.stats : frag.stats;\n    if (stats.aborted) {\n      return;\n    }\n    if (this.ignoreFragment(frag)) {\n      return;\n    }\n    // Use the difference between parsing and request instead of buffering and request to compute fragLoadingProcessing;\n    // rationale is that buffer appending only happens once media is attached. This can happen when config.startFragPrefetch\n    // is used. If we used buffering in that case, our BW estimate sample will be very large.\n    const processingMs = stats.parsing.end - stats.loading.start - Math.min(stats.loading.first - stats.loading.start, this.bwEstimator.getEstimateTTFB());\n    this.bwEstimator.sample(processingMs, stats.loaded);\n    stats.bwEstimate = this.getBwEstimate();\n    if (frag.bitrateTest) {\n      this.bitrateTestDelay = processingMs / 1000;\n    } else {\n      this.bitrateTestDelay = 0;\n    }\n  }\n  ignoreFragment(frag) {\n    // Only count non-alt-audio frags which were actually buffered in our BW calculations\n    return frag.type !== PlaylistLevelType.MAIN || frag.sn === 'initSegment';\n  }\n  clearTimer() {\n    if (this.timer > -1) {\n      self.clearInterval(this.timer);\n      this.timer = -1;\n    }\n  }\n  get firstAutoLevel() {\n    const {\n      maxAutoLevel,\n      minAutoLevel\n    } = this.hls;\n    const bwEstimate = this.getBwEstimate();\n    const maxStartDelay = this.hls.config.maxStarvationDelay;\n    const abrAutoLevel = this.findBestLevel(bwEstimate, minAutoLevel, maxAutoLevel, 0, maxStartDelay, 1, 1);\n    if (abrAutoLevel > -1) {\n      return abrAutoLevel;\n    }\n    const firstLevel = this.hls.firstLevel;\n    const clamped = Math.min(Math.max(firstLevel, minAutoLevel), maxAutoLevel);\n    logger.warn(`[abr] Could not find best starting auto level. Defaulting to first in playlist ${firstLevel} clamped to ${clamped}`);\n    return clamped;\n  }\n  get forcedAutoLevel() {\n    if (this.nextAutoLevelKey) {\n      return -1;\n    }\n    return this._nextAutoLevel;\n  }\n\n  // return next auto level\n  get nextAutoLevel() {\n    const forcedAutoLevel = this.forcedAutoLevel;\n    const bwEstimator = this.bwEstimator;\n    const useEstimate = bwEstimator.canEstimate();\n    const loadedFirstFrag = this.lastLoadedFragLevel > -1;\n    // in case next auto level has been forced, and bw not available or not reliable, return forced value\n    if (forcedAutoLevel !== -1 && (!useEstimate || !loadedFirstFrag || this.nextAutoLevelKey === this.getAutoLevelKey())) {\n      return forcedAutoLevel;\n    }\n\n    // compute next level using ABR logic\n    const nextABRAutoLevel = useEstimate && loadedFirstFrag ? this.getNextABRAutoLevel() : this.firstAutoLevel;\n\n    // use forced auto level while it hasn't errored more than ABR selection\n    if (forcedAutoLevel !== -1) {\n      const levels = this.hls.levels;\n      if (levels.length > Math.max(forcedAutoLevel, nextABRAutoLevel) && levels[forcedAutoLevel].loadError <= levels[nextABRAutoLevel].loadError) {\n        return forcedAutoLevel;\n      }\n    }\n\n    // save result until state has changed\n    this._nextAutoLevel = nextABRAutoLevel;\n    this.nextAutoLevelKey = this.getAutoLevelKey();\n    return nextABRAutoLevel;\n  }\n  getAutoLevelKey() {\n    return `${this.getBwEstimate()}_${this.getStarvationDelay().toFixed(2)}`;\n  }\n  getNextABRAutoLevel() {\n    const {\n      fragCurrent,\n      partCurrent,\n      hls\n    } = this;\n    const {\n      maxAutoLevel,\n      config,\n      minAutoLevel\n    } = hls;\n    const currentFragDuration = partCurrent ? partCurrent.duration : fragCurrent ? fragCurrent.duration : 0;\n    const avgbw = this.getBwEstimate();\n    // bufferStarvationDelay is the wall-clock time left until the playback buffer is exhausted.\n    const bufferStarvationDelay = this.getStarvationDelay();\n    let bwFactor = config.abrBandWidthFactor;\n    let bwUpFactor = config.abrBandWidthUpFactor;\n\n    // First, look to see if we can find a level matching with our avg bandwidth AND that could also guarantee no rebuffering at all\n    if (bufferStarvationDelay) {\n      const _bestLevel = this.findBestLevel(avgbw, minAutoLevel, maxAutoLevel, bufferStarvationDelay, 0, bwFactor, bwUpFactor);\n      if (_bestLevel >= 0) {\n        return _bestLevel;\n      }\n    }\n    // not possible to get rid of rebuffering... try to find level that will guarantee less than maxStarvationDelay of rebuffering\n    let maxStarvationDelay = currentFragDuration ? Math.min(currentFragDuration, config.maxStarvationDelay) : config.maxStarvationDelay;\n    if (!bufferStarvationDelay) {\n      // in case buffer is empty, let's check if previous fragment was loaded to perform a bitrate test\n      const bitrateTestDelay = this.bitrateTestDelay;\n      if (bitrateTestDelay) {\n        // if it is the case, then we need to adjust our max starvation delay using maxLoadingDelay config value\n        // max video loading delay used in  automatic start level selection :\n        // in that mode ABR controller will ensure that video loading time (ie the time to fetch the first fragment at lowest quality level +\n        // the time to fetch the fragment at the appropriate quality level is less than ```maxLoadingDelay``` )\n        // cap maxLoadingDelay and ensure it is not bigger 'than bitrate test' frag duration\n        const maxLoadingDelay = currentFragDuration ? Math.min(currentFragDuration, config.maxLoadingDelay) : config.maxLoadingDelay;\n        maxStarvationDelay = maxLoadingDelay - bitrateTestDelay;\n        logger.info(`[abr] bitrate test took ${Math.round(1000 * bitrateTestDelay)}ms, set first fragment max fetchDuration to ${Math.round(1000 * maxStarvationDelay)} ms`);\n        // don't use conservative factor on bitrate test\n        bwFactor = bwUpFactor = 1;\n      }\n    }\n    const bestLevel = this.findBestLevel(avgbw, minAutoLevel, maxAutoLevel, bufferStarvationDelay, maxStarvationDelay, bwFactor, bwUpFactor);\n    logger.info(`[abr] ${bufferStarvationDelay ? 'rebuffering expected' : 'buffer is empty'}, optimal quality level ${bestLevel}`);\n    if (bestLevel > -1) {\n      return bestLevel;\n    }\n    // If no matching level found, see if min auto level would be a better option\n    const minLevel = hls.levels[minAutoLevel];\n    const autoLevel = hls.levels[hls.loadLevel];\n    if ((minLevel == null ? void 0 : minLevel.bitrate) < (autoLevel == null ? void 0 : autoLevel.bitrate)) {\n      return minAutoLevel;\n    }\n    // or if bitrate is not lower, continue to use loadLevel\n    return hls.loadLevel;\n  }\n  getStarvationDelay() {\n    const hls = this.hls;\n    const media = hls.media;\n    if (!media) {\n      return Infinity;\n    }\n    // playbackRate is the absolute value of the playback rate; if media.playbackRate is 0, we use 1 to load as\n    // if we're playing back at the normal rate.\n    const playbackRate = media && media.playbackRate !== 0 ? Math.abs(media.playbackRate) : 1.0;\n    const bufferInfo = hls.mainForwardBufferInfo;\n    return (bufferInfo ? bufferInfo.len : 0) / playbackRate;\n  }\n  getBwEstimate() {\n    return this.bwEstimator.canEstimate() ? this.bwEstimator.getEstimate() : this.hls.config.abrEwmaDefaultEstimate;\n  }\n  findBestLevel(currentBw, minAutoLevel, maxAutoLevel, bufferStarvationDelay, maxStarvationDelay, bwFactor, bwUpFactor) {\n    var _level$details;\n    const maxFetchDuration = bufferStarvationDelay + maxStarvationDelay;\n    const lastLoadedFragLevel = this.lastLoadedFragLevel;\n    const selectionBaseLevel = lastLoadedFragLevel === -1 ? this.hls.firstLevel : lastLoadedFragLevel;\n    const {\n      fragCurrent,\n      partCurrent\n    } = this;\n    const {\n      levels,\n      allAudioTracks,\n      loadLevel,\n      config\n    } = this.hls;\n    if (levels.length === 1) {\n      return 0;\n    }\n    const level = levels[selectionBaseLevel];\n    const live = !!(level != null && (_level$details = level.details) != null && _level$details.live);\n    const firstSelection = loadLevel === -1 || lastLoadedFragLevel === -1;\n    let currentCodecSet;\n    let currentVideoRange = 'SDR';\n    let currentFrameRate = (level == null ? void 0 : level.frameRate) || 0;\n    const {\n      audioPreference,\n      videoPreference\n    } = config;\n    const audioTracksByGroup = this.audioTracksByGroup || (this.audioTracksByGroup = getAudioTracksByGroup(allAudioTracks));\n    if (firstSelection) {\n      if (this.firstSelection !== -1) {\n        return this.firstSelection;\n      }\n      const codecTiers = this.codecTiers || (this.codecTiers = getCodecTiers(levels, audioTracksByGroup, minAutoLevel, maxAutoLevel));\n      const startTier = getStartCodecTier(codecTiers, currentVideoRange, currentBw, audioPreference, videoPreference);\n      const {\n        codecSet,\n        videoRanges,\n        minFramerate,\n        minBitrate,\n        preferHDR\n      } = startTier;\n      currentCodecSet = codecSet;\n      currentVideoRange = preferHDR ? videoRanges[videoRanges.length - 1] : videoRanges[0];\n      currentFrameRate = minFramerate;\n      currentBw = Math.max(currentBw, minBitrate);\n      logger.log(`[abr] picked start tier ${JSON.stringify(startTier)}`);\n    } else {\n      currentCodecSet = level == null ? void 0 : level.codecSet;\n      currentVideoRange = level == null ? void 0 : level.videoRange;\n    }\n    const currentFragDuration = partCurrent ? partCurrent.duration : fragCurrent ? fragCurrent.duration : 0;\n    const ttfbEstimateSec = this.bwEstimator.getEstimateTTFB() / 1000;\n    const levelsSkipped = [];\n    for (let i = maxAutoLevel; i >= minAutoLevel; i--) {\n      var _levelInfo$supportedR;\n      const levelInfo = levels[i];\n      const upSwitch = i > selectionBaseLevel;\n      if (!levelInfo) {\n        continue;\n      }\n      if (config.useMediaCapabilities && !levelInfo.supportedResult && !levelInfo.supportedPromise) {\n        const mediaCapabilities = navigator.mediaCapabilities;\n        if (typeof (mediaCapabilities == null ? void 0 : mediaCapabilities.decodingInfo) === 'function' && requiresMediaCapabilitiesDecodingInfo(levelInfo, audioTracksByGroup, currentVideoRange, currentFrameRate, currentBw, audioPreference)) {\n          levelInfo.supportedPromise = getMediaDecodingInfoPromise(levelInfo, audioTracksByGroup, mediaCapabilities);\n          levelInfo.supportedPromise.then(decodingInfo => {\n            if (!this.hls) {\n              return;\n            }\n            levelInfo.supportedResult = decodingInfo;\n            const levels = this.hls.levels;\n            const index = levels.indexOf(levelInfo);\n            if (decodingInfo.error) {\n              logger.warn(`[abr] MediaCapabilities decodingInfo error: \"${decodingInfo.error}\" for level ${index} ${JSON.stringify(decodingInfo)}`);\n            } else if (!decodingInfo.supported) {\n              logger.warn(`[abr] Unsupported MediaCapabilities decodingInfo result for level ${index} ${JSON.stringify(decodingInfo)}`);\n              if (index > -1 && levels.length > 1) {\n                logger.log(`[abr] Removing unsupported level ${index}`);\n                this.hls.removeLevel(index);\n              }\n            }\n          });\n        } else {\n          levelInfo.supportedResult = SUPPORTED_INFO_DEFAULT;\n        }\n      }\n\n      // skip candidates which change codec-family or video-range,\n      // and which decrease or increase frame-rate for up and down-switch respectfully\n      if (currentCodecSet && levelInfo.codecSet !== currentCodecSet || currentVideoRange && levelInfo.videoRange !== currentVideoRange || upSwitch && currentFrameRate > levelInfo.frameRate || !upSwitch && currentFrameRate > 0 && currentFrameRate < levelInfo.frameRate || levelInfo.supportedResult && !((_levelInfo$supportedR = levelInfo.supportedResult.decodingInfoResults) != null && _levelInfo$supportedR[0].smooth)) {\n        levelsSkipped.push(i);\n        continue;\n      }\n      const levelDetails = levelInfo.details;\n      const avgDuration = (partCurrent ? levelDetails == null ? void 0 : levelDetails.partTarget : levelDetails == null ? void 0 : levelDetails.averagetargetduration) || currentFragDuration;\n      let adjustedbw;\n      // follow algorithm captured from stagefright :\n      // https://android.googlesource.com/platform/frameworks/av/+/master/media/libstagefright/httplive/LiveSession.cpp\n      // Pick the highest bandwidth stream below or equal to estimated bandwidth.\n      // consider only 80% of the available bandwidth, but if we are switching up,\n      // be even more conservative (70%) to avoid overestimating and immediately\n      // switching back.\n      if (!upSwitch) {\n        adjustedbw = bwFactor * currentBw;\n      } else {\n        adjustedbw = bwUpFactor * currentBw;\n      }\n\n      // Use average bitrate when starvation delay (buffer length) is gt or eq two segment durations and rebuffering is not expected (maxStarvationDelay > 0)\n      const bitrate = currentFragDuration && bufferStarvationDelay >= currentFragDuration * 2 && maxStarvationDelay === 0 ? levels[i].averageBitrate : levels[i].maxBitrate;\n      const fetchDuration = this.getTimeToLoadFrag(ttfbEstimateSec, adjustedbw, bitrate * avgDuration, levelDetails === undefined);\n      const canSwitchWithinTolerance =\n      // if adjusted bw is greater than level bitrate AND\n      adjustedbw >= bitrate && (\n      // no level change, or new level has no error history\n      i === lastLoadedFragLevel || levelInfo.loadError === 0 && levelInfo.fragmentError === 0) && (\n      // fragment fetchDuration unknown OR live stream OR fragment fetchDuration less than max allowed fetch duration, then this level matches\n      // we don't account for max Fetch Duration for live streams, this is to avoid switching down when near the edge of live sliding window ...\n      // special case to support startLevel = -1 (bitrateTest) on live streams : in that case we should not exit loop so that findBestLevel will return -1\n      fetchDuration <= ttfbEstimateSec || !isFiniteNumber(fetchDuration) || live && !this.bitrateTestDelay || fetchDuration < maxFetchDuration);\n      if (canSwitchWithinTolerance) {\n        const forcedAutoLevel = this.forcedAutoLevel;\n        if (i !== loadLevel && (forcedAutoLevel === -1 || forcedAutoLevel !== loadLevel)) {\n          if (levelsSkipped.length) {\n            logger.trace(`[abr] Skipped level(s) ${levelsSkipped.join(',')} of ${maxAutoLevel} max with CODECS and VIDEO-RANGE:\"${levels[levelsSkipped[0]].codecs}\" ${levels[levelsSkipped[0]].videoRange}; not compatible with \"${level.codecs}\" ${currentVideoRange}`);\n          }\n          logger.info(`[abr] switch candidate:${selectionBaseLevel}->${i} adjustedbw(${Math.round(adjustedbw)})-bitrate=${Math.round(adjustedbw - bitrate)} ttfb:${ttfbEstimateSec.toFixed(1)} avgDuration:${avgDuration.toFixed(1)} maxFetchDuration:${maxFetchDuration.toFixed(1)} fetchDuration:${fetchDuration.toFixed(1)} firstSelection:${firstSelection} codecSet:${currentCodecSet} videoRange:${currentVideoRange} hls.loadLevel:${loadLevel}`);\n        }\n        if (firstSelection) {\n          this.firstSelection = i;\n        }\n        // as we are looping from highest to lowest, this will return the best achievable quality level\n        return i;\n      }\n    }\n    // not enough time budget even with quality level 0 ... rebuffering might happen\n    return -1;\n  }\n  set nextAutoLevel(nextLevel) {\n    const {\n      maxAutoLevel,\n      minAutoLevel\n    } = this.hls;\n    const value = Math.min(Math.max(nextLevel, minAutoLevel), maxAutoLevel);\n    if (this._nextAutoLevel !== value) {\n      this.nextAutoLevelKey = '';\n      this._nextAutoLevel = value;\n    }\n  }\n}\n\n/**\n * @ignore\n * Sub-class specialization of EventHandler base class.\n *\n * TaskLoop allows to schedule a task function being called (optionnaly repeatedly) on the main loop,\n * scheduled asynchroneously, avoiding recursive calls in the same tick.\n *\n * The task itself is implemented in `doTick`. It can be requested and called for single execution\n * using the `tick` method.\n *\n * It will be assured that the task execution method (`tick`) only gets called once per main loop \"tick\",\n * no matter how often it gets requested for execution. Execution in further ticks will be scheduled accordingly.\n *\n * If further execution requests have already been scheduled on the next tick, it can be checked with `hasNextTick`,\n * and cancelled with `clearNextTick`.\n *\n * The task can be scheduled as an interval repeatedly with a period as parameter (see `setInterval`, `clearInterval`).\n *\n * Sub-classes need to implement the `doTick` method which will effectively have the task execution routine.\n *\n * Further explanations:\n *\n * The baseclass has a `tick` method that will schedule the doTick call. It may be called synchroneously\n * only for a stack-depth of one. On re-entrant calls, sub-sequent calls are scheduled for next main loop ticks.\n *\n * When the task execution (`tick` method) is called in re-entrant way this is detected and\n * we are limiting the task execution per call stack to exactly one, but scheduling/post-poning further\n * task processing on the next main loop iteration (also known as \"next tick\" in the Node/JS runtime lingo).\n */\nclass TaskLoop {\n  constructor() {\n    this._boundTick = void 0;\n    this._tickTimer = null;\n    this._tickInterval = null;\n    this._tickCallCount = 0;\n    this._boundTick = this.tick.bind(this);\n  }\n  destroy() {\n    this.onHandlerDestroying();\n    this.onHandlerDestroyed();\n  }\n  onHandlerDestroying() {\n    // clear all timers before unregistering from event bus\n    this.clearNextTick();\n    this.clearInterval();\n  }\n  onHandlerDestroyed() {}\n  hasInterval() {\n    return !!this._tickInterval;\n  }\n  hasNextTick() {\n    return !!this._tickTimer;\n  }\n\n  /**\n   * @param millis - Interval time (ms)\n   * @eturns True when interval has been scheduled, false when already scheduled (no effect)\n   */\n  setInterval(millis) {\n    if (!this._tickInterval) {\n      this._tickCallCount = 0;\n      this._tickInterval = self.setInterval(this._boundTick, millis);\n      return true;\n    }\n    return false;\n  }\n\n  /**\n   * @returns True when interval was cleared, false when none was set (no effect)\n   */\n  clearInterval() {\n    if (this._tickInterval) {\n      self.clearInterval(this._tickInterval);\n      this._tickInterval = null;\n      return true;\n    }\n    return false;\n  }\n\n  /**\n   * @returns True when timeout was cleared, false when none was set (no effect)\n   */\n  clearNextTick() {\n    if (this._tickTimer) {\n      self.clearTimeout(this._tickTimer);\n      this._tickTimer = null;\n      return true;\n    }\n    return false;\n  }\n\n  /**\n   * Will call the subclass doTick implementation in this main loop tick\n   * or in the next one (via setTimeout(,0)) in case it has already been called\n   * in this tick (in case this is a re-entrant call).\n   */\n  tick() {\n    this._tickCallCount++;\n    if (this._tickCallCount === 1) {\n      this.doTick();\n      // re-entrant call to tick from previous doTick call stack\n      // -> schedule a call on the next main loop iteration to process this task processing request\n      if (this._tickCallCount > 1) {\n        // make sure only one timer exists at any time at max\n        this.tickImmediate();\n      }\n      this._tickCallCount = 0;\n    }\n  }\n  tickImmediate() {\n    this.clearNextTick();\n    this._tickTimer = self.setTimeout(this._boundTick, 0);\n  }\n\n  /**\n   * For subclass to implement task logic\n   * @abstract\n   */\n  doTick() {}\n}\n\nvar FragmentState = {\n  NOT_LOADED: \"NOT_LOADED\",\n  APPENDING: \"APPENDING\",\n  PARTIAL: \"PARTIAL\",\n  OK: \"OK\"\n};\nclass FragmentTracker {\n  constructor(hls) {\n    this.activePartLists = Object.create(null);\n    this.endListFragments = Object.create(null);\n    this.fragments = Object.create(null);\n    this.timeRanges = Object.create(null);\n    this.bufferPadding = 0.2;\n    this.hls = void 0;\n    this.hasGaps = false;\n    this.hls = hls;\n    this._registerListeners();\n  }\n  _registerListeners() {\n    const {\n      hls\n    } = this;\n    hls.on(Events.BUFFER_APPENDED, this.onBufferAppended, this);\n    hls.on(Events.FRAG_BUFFERED, this.onFragBuffered, this);\n    hls.on(Events.FRAG_LOADED, this.onFragLoaded, this);\n  }\n  _unregisterListeners() {\n    const {\n      hls\n    } = this;\n    hls.off(Events.BUFFER_APPENDED, this.onBufferAppended, this);\n    hls.off(Events.FRAG_BUFFERED, this.onFragBuffered, this);\n    hls.off(Events.FRAG_LOADED, this.onFragLoaded, this);\n  }\n  destroy() {\n    this._unregisterListeners();\n    // @ts-ignore\n    this.fragments =\n    // @ts-ignore\n    this.activePartLists =\n    // @ts-ignore\n    this.endListFragments = this.timeRanges = null;\n  }\n\n  /**\n   * Return a Fragment or Part with an appended range that matches the position and levelType\n   * Otherwise, return null\n   */\n  getAppendedFrag(position, levelType) {\n    const activeParts = this.activePartLists[levelType];\n    if (activeParts) {\n      for (let i = activeParts.length; i--;) {\n        const activePart = activeParts[i];\n        if (!activePart) {\n          break;\n        }\n        const appendedPTS = activePart.end;\n        if (activePart.start <= position && appendedPTS !== null && position <= appendedPTS) {\n          return activePart;\n        }\n      }\n    }\n    return this.getBufferedFrag(position, levelType);\n  }\n\n  /**\n   * Return a buffered Fragment that matches the position and levelType.\n   * A buffered Fragment is one whose loading, parsing and appending is done (completed or \"partial\" meaning aborted).\n   * If not found any Fragment, return null\n   */\n  getBufferedFrag(position, levelType) {\n    const {\n      fragments\n    } = this;\n    const keys = Object.keys(fragments);\n    for (let i = keys.length; i--;) {\n      const fragmentEntity = fragments[keys[i]];\n      if ((fragmentEntity == null ? void 0 : fragmentEntity.body.type) === levelType && fragmentEntity.buffered) {\n        const frag = fragmentEntity.body;\n        if (frag.start <= position && position <= frag.end) {\n          return frag;\n        }\n      }\n    }\n    return null;\n  }\n\n  /**\n   * Partial fragments effected by coded frame eviction will be removed\n   * The browser will unload parts of the buffer to free up memory for new buffer data\n   * Fragments will need to be reloaded when the buffer is freed up, removing partial fragments will allow them to reload(since there might be parts that are still playable)\n   */\n  detectEvictedFragments(elementaryStream, timeRange, playlistType, appendedPart) {\n    if (this.timeRanges) {\n      this.timeRanges[elementaryStream] = timeRange;\n    }\n    // Check if any flagged fragments have been unloaded\n    // excluding anything newer than appendedPartSn\n    const appendedPartSn = (appendedPart == null ? void 0 : appendedPart.fragment.sn) || -1;\n    Object.keys(this.fragments).forEach(key => {\n      const fragmentEntity = this.fragments[key];\n      if (!fragmentEntity) {\n        return;\n      }\n      if (appendedPartSn >= fragmentEntity.body.sn) {\n        return;\n      }\n      if (!fragmentEntity.buffered && !fragmentEntity.loaded) {\n        if (fragmentEntity.body.type === playlistType) {\n          this.removeFragment(fragmentEntity.body);\n        }\n        return;\n      }\n      const esData = fragmentEntity.range[elementaryStream];\n      if (!esData) {\n        return;\n      }\n      esData.time.some(time => {\n        const isNotBuffered = !this.isTimeBuffered(time.startPTS, time.endPTS, timeRange);\n        if (isNotBuffered) {\n          // Unregister partial fragment as it needs to load again to be reused\n          this.removeFragment(fragmentEntity.body);\n        }\n        return isNotBuffered;\n      });\n    });\n  }\n\n  /**\n   * Checks if the fragment passed in is loaded in the buffer properly\n   * Partially loaded fragments will be registered as a partial fragment\n   */\n  detectPartialFragments(data) {\n    const timeRanges = this.timeRanges;\n    const {\n      frag,\n      part\n    } = data;\n    if (!timeRanges || frag.sn === 'initSegment') {\n      return;\n    }\n    const fragKey = getFragmentKey(frag);\n    const fragmentEntity = this.fragments[fragKey];\n    if (!fragmentEntity || fragmentEntity.buffered && frag.gap) {\n      return;\n    }\n    const isFragHint = !frag.relurl;\n    Object.keys(timeRanges).forEach(elementaryStream => {\n      const streamInfo = frag.elementaryStreams[elementaryStream];\n      if (!streamInfo) {\n        return;\n      }\n      const timeRange = timeRanges[elementaryStream];\n      const partial = isFragHint || streamInfo.partial === true;\n      fragmentEntity.range[elementaryStream] = this.getBufferedTimes(frag, part, partial, timeRange);\n    });\n    fragmentEntity.loaded = null;\n    if (Object.keys(fragmentEntity.range).length) {\n      fragmentEntity.buffered = true;\n      const endList = fragmentEntity.body.endList = frag.endList || fragmentEntity.body.endList;\n      if (endList) {\n        this.endListFragments[fragmentEntity.body.type] = fragmentEntity;\n      }\n      if (!isPartial(fragmentEntity)) {\n        // Remove older fragment parts from lookup after frag is tracked as buffered\n        this.removeParts(frag.sn - 1, frag.type);\n      }\n    } else {\n      // remove fragment if nothing was appended\n      this.removeFragment(fragmentEntity.body);\n    }\n  }\n  removeParts(snToKeep, levelType) {\n    const activeParts = this.activePartLists[levelType];\n    if (!activeParts) {\n      return;\n    }\n    this.activePartLists[levelType] = activeParts.filter(part => part.fragment.sn >= snToKeep);\n  }\n  fragBuffered(frag, force) {\n    const fragKey = getFragmentKey(frag);\n    let fragmentEntity = this.fragments[fragKey];\n    if (!fragmentEntity && force) {\n      fragmentEntity = this.fragments[fragKey] = {\n        body: frag,\n        appendedPTS: null,\n        loaded: null,\n        buffered: false,\n        range: Object.create(null)\n      };\n      if (frag.gap) {\n        this.hasGaps = true;\n      }\n    }\n    if (fragmentEntity) {\n      fragmentEntity.loaded = null;\n      fragmentEntity.buffered = true;\n    }\n  }\n  getBufferedTimes(fragment, part, partial, timeRange) {\n    const buffered = {\n      time: [],\n      partial\n    };\n    const startPTS = fragment.start;\n    const endPTS = fragment.end;\n    const minEndPTS = fragment.minEndPTS || endPTS;\n    const maxStartPTS = fragment.maxStartPTS || startPTS;\n    for (let i = 0; i < timeRange.length; i++) {\n      const startTime = timeRange.start(i) - this.bufferPadding;\n      const endTime = timeRange.end(i) + this.bufferPadding;\n      if (maxStartPTS >= startTime && minEndPTS <= endTime) {\n        // Fragment is entirely contained in buffer\n        // No need to check the other timeRange times since it's completely playable\n        buffered.time.push({\n          startPTS: Math.max(startPTS, timeRange.start(i)),\n          endPTS: Math.min(endPTS, timeRange.end(i))\n        });\n        break;\n      } else if (startPTS < endTime && endPTS > startTime) {\n        const start = Math.max(startPTS, timeRange.start(i));\n        const end = Math.min(endPTS, timeRange.end(i));\n        if (end > start) {\n          buffered.partial = true;\n          // Check for intersection with buffer\n          // Get playable sections of the fragment\n          buffered.time.push({\n            startPTS: start,\n            endPTS: end\n          });\n        }\n      } else if (endPTS <= startTime) {\n        // No need to check the rest of the timeRange as it is in order\n        break;\n      }\n    }\n    return buffered;\n  }\n\n  /**\n   * Gets the partial fragment for a certain time\n   */\n  getPartialFragment(time) {\n    let bestFragment = null;\n    let timePadding;\n    let startTime;\n    let endTime;\n    let bestOverlap = 0;\n    const {\n      bufferPadding,\n      fragments\n    } = this;\n    Object.keys(fragments).forEach(key => {\n      const fragmentEntity = fragments[key];\n      if (!fragmentEntity) {\n        return;\n      }\n      if (isPartial(fragmentEntity)) {\n        startTime = fragmentEntity.body.start - bufferPadding;\n        endTime = fragmentEntity.body.end + bufferPadding;\n        if (time >= startTime && time <= endTime) {\n          // Use the fragment that has the most padding from start and end time\n          timePadding = Math.min(time - startTime, endTime - time);\n          if (bestOverlap <= timePadding) {\n            bestFragment = fragmentEntity.body;\n            bestOverlap = timePadding;\n          }\n        }\n      }\n    });\n    return bestFragment;\n  }\n  isEndListAppended(type) {\n    const lastFragmentEntity = this.endListFragments[type];\n    return lastFragmentEntity !== undefined && (lastFragmentEntity.buffered || isPartial(lastFragmentEntity));\n  }\n  getState(fragment) {\n    const fragKey = getFragmentKey(fragment);\n    const fragmentEntity = this.fragments[fragKey];\n    if (fragmentEntity) {\n      if (!fragmentEntity.buffered) {\n        return FragmentState.APPENDING;\n      } else if (isPartial(fragmentEntity)) {\n        return FragmentState.PARTIAL;\n      } else {\n        return FragmentState.OK;\n      }\n    }\n    return FragmentState.NOT_LOADED;\n  }\n  isTimeBuffered(startPTS, endPTS, timeRange) {\n    let startTime;\n    let endTime;\n    for (let i = 0; i < timeRange.length; i++) {\n      startTime = timeRange.start(i) - this.bufferPadding;\n      endTime = timeRange.end(i) + this.bufferPadding;\n      if (startPTS >= startTime && endPTS <= endTime) {\n        return true;\n      }\n      if (endPTS <= startTime) {\n        // No need to check the rest of the timeRange as it is in order\n        return false;\n      }\n    }\n    return false;\n  }\n  onFragLoaded(event, data) {\n    const {\n      frag,\n      part\n    } = data;\n    // don't track initsegment (for which sn is not a number)\n    // don't track frags used for bitrateTest, they're irrelevant.\n    if (frag.sn === 'initSegment' || frag.bitrateTest) {\n      return;\n    }\n\n    // Fragment entity `loaded` FragLoadedData is null when loading parts\n    const loaded = part ? null : data;\n    const fragKey = getFragmentKey(frag);\n    this.fragments[fragKey] = {\n      body: frag,\n      appendedPTS: null,\n      loaded,\n      buffered: false,\n      range: Object.create(null)\n    };\n  }\n  onBufferAppended(event, data) {\n    const {\n      frag,\n      part,\n      timeRanges\n    } = data;\n    if (frag.sn === 'initSegment') {\n      return;\n    }\n    const playlistType = frag.type;\n    if (part) {\n      let activeParts = this.activePartLists[playlistType];\n      if (!activeParts) {\n        this.activePartLists[playlistType] = activeParts = [];\n      }\n      activeParts.push(part);\n    }\n    // Store the latest timeRanges loaded in the buffer\n    this.timeRanges = timeRanges;\n    Object.keys(timeRanges).forEach(elementaryStream => {\n      const timeRange = timeRanges[elementaryStream];\n      this.detectEvictedFragments(elementaryStream, timeRange, playlistType, part);\n    });\n  }\n  onFragBuffered(event, data) {\n    this.detectPartialFragments(data);\n  }\n  hasFragment(fragment) {\n    const fragKey = getFragmentKey(fragment);\n    return !!this.fragments[fragKey];\n  }\n  hasParts(type) {\n    var _this$activePartLists;\n    return !!((_this$activePartLists = this.activePartLists[type]) != null && _this$activePartLists.length);\n  }\n  removeFragmentsInRange(start, end, playlistType, withGapOnly, unbufferedOnly) {\n    if (withGapOnly && !this.hasGaps) {\n      return;\n    }\n    Object.keys(this.fragments).forEach(key => {\n      const fragmentEntity = this.fragments[key];\n      if (!fragmentEntity) {\n        return;\n      }\n      const frag = fragmentEntity.body;\n      if (frag.type !== playlistType || withGapOnly && !frag.gap) {\n        return;\n      }\n      if (frag.start < end && frag.end > start && (fragmentEntity.buffered || unbufferedOnly)) {\n        this.removeFragment(frag);\n      }\n    });\n  }\n  removeFragment(fragment) {\n    const fragKey = getFragmentKey(fragment);\n    fragment.stats.loaded = 0;\n    fragment.clearElementaryStreamInfo();\n    const activeParts = this.activePartLists[fragment.type];\n    if (activeParts) {\n      const snToRemove = fragment.sn;\n      this.activePartLists[fragment.type] = activeParts.filter(part => part.fragment.sn !== snToRemove);\n    }\n    delete this.fragments[fragKey];\n    if (fragment.endList) {\n      delete this.endListFragments[fragment.type];\n    }\n  }\n  removeAllFragments() {\n    this.fragments = Object.create(null);\n    this.endListFragments = Object.create(null);\n    this.activePartLists = Object.create(null);\n    this.hasGaps = false;\n  }\n}\nfunction isPartial(fragmentEntity) {\n  var _fragmentEntity$range, _fragmentEntity$range2, _fragmentEntity$range3;\n  return fragmentEntity.buffered && (fragmentEntity.body.gap || ((_fragmentEntity$range = fragmentEntity.range.video) == null ? void 0 : _fragmentEntity$range.partial) || ((_fragmentEntity$range2 = fragmentEntity.range.audio) == null ? void 0 : _fragmentEntity$range2.partial) || ((_fragmentEntity$range3 = fragmentEntity.range.audiovideo) == null ? void 0 : _fragmentEntity$range3.partial));\n}\nfunction getFragmentKey(fragment) {\n  return `${fragment.type}_${fragment.level}_${fragment.sn}`;\n}\n\n/**\n * Provides methods dealing with buffer length retrieval for example.\n *\n * In general, a helper around HTML5 MediaElement TimeRanges gathered from `buffered` property.\n *\n * Also @see https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement/buffered\n */\n\nconst noopBuffered = {\n  length: 0,\n  start: () => 0,\n  end: () => 0\n};\nclass BufferHelper {\n  /**\n   * Return true if `media`'s buffered include `position`\n   */\n  static isBuffered(media, position) {\n    try {\n      if (media) {\n        const buffered = BufferHelper.getBuffered(media);\n        for (let i = 0; i < buffered.length; i++) {\n          if (position >= buffered.start(i) && position <= buffered.end(i)) {\n            return true;\n          }\n        }\n      }\n    } catch (error) {\n      // this is to catch\n      // InvalidStateError: Failed to read the 'buffered' property from 'SourceBuffer':\n      // This SourceBuffer has been removed from the parent media source\n    }\n    return false;\n  }\n  static bufferInfo(media, pos, maxHoleDuration) {\n    try {\n      if (media) {\n        const vbuffered = BufferHelper.getBuffered(media);\n        const buffered = [];\n        let i;\n        for (i = 0; i < vbuffered.length; i++) {\n          buffered.push({\n            start: vbuffered.start(i),\n            end: vbuffered.end(i)\n          });\n        }\n        return this.bufferedInfo(buffered, pos, maxHoleDuration);\n      }\n    } catch (error) {\n      // this is to catch\n      // InvalidStateError: Failed to read the 'buffered' property from 'SourceBuffer':\n      // This SourceBuffer has been removed from the parent media source\n    }\n    return {\n      len: 0,\n      start: pos,\n      end: pos,\n      nextStart: undefined\n    };\n  }\n  static bufferedInfo(buffered, pos, maxHoleDuration) {\n    pos = Math.max(0, pos);\n    // sort on buffer.start/smaller end (IE does not always return sorted buffered range)\n    buffered.sort(function (a, b) {\n      const diff = a.start - b.start;\n      if (diff) {\n        return diff;\n      } else {\n        return b.end - a.end;\n      }\n    });\n    let buffered2 = [];\n    if (maxHoleDuration) {\n      // there might be some small holes between buffer time range\n      // consider that holes smaller than maxHoleDuration are irrelevant and build another\n      // buffer time range representations that discards those holes\n      for (let i = 0; i < buffered.length; i++) {\n        const buf2len = buffered2.length;\n        if (buf2len) {\n          const buf2end = buffered2[buf2len - 1].end;\n          // if small hole (value between 0 or maxHoleDuration ) or overlapping (negative)\n          if (buffered[i].start - buf2end < maxHoleDuration) {\n            // merge overlapping time ranges\n            // update lastRange.end only if smaller than item.end\n            // e.g.  [ 1, 15] with  [ 2,8] => [ 1,15] (no need to modify lastRange.end)\n            // whereas [ 1, 8] with  [ 2,15] => [ 1,15] ( lastRange should switch from [1,8] to [1,15])\n            if (buffered[i].end > buf2end) {\n              buffered2[buf2len - 1].end = buffered[i].end;\n            }\n          } else {\n            // big hole\n            buffered2.push(buffered[i]);\n          }\n        } else {\n          // first value\n          buffered2.push(buffered[i]);\n        }\n      }\n    } else {\n      buffered2 = buffered;\n    }\n    let bufferLen = 0;\n\n    // bufferStartNext can possibly be undefined based on the conditional logic below\n    let bufferStartNext;\n\n    // bufferStart and bufferEnd are buffer boundaries around current video position\n    let bufferStart = pos;\n    let bufferEnd = pos;\n    for (let i = 0; i < buffered2.length; i++) {\n      const start = buffered2[i].start;\n      const end = buffered2[i].end;\n      // logger.log('buf start/end:' + buffered.start(i) + '/' + buffered.end(i));\n      if (pos + maxHoleDuration >= start && pos < end) {\n        // play position is inside this buffer TimeRange, retrieve end of buffer position and buffer length\n        bufferStart = start;\n        bufferEnd = end;\n        bufferLen = bufferEnd - pos;\n      } else if (pos + maxHoleDuration < start) {\n        bufferStartNext = start;\n        break;\n      }\n    }\n    return {\n      len: bufferLen,\n      start: bufferStart || 0,\n      end: bufferEnd || 0,\n      nextStart: bufferStartNext\n    };\n  }\n\n  /**\n   * Safe method to get buffered property.\n   * SourceBuffer.buffered may throw if SourceBuffer is removed from it's MediaSource\n   */\n  static getBuffered(media) {\n    try {\n      return media.buffered;\n    } catch (e) {\n      logger.log('failed to get media.buffered', e);\n      return noopBuffered;\n    }\n  }\n}\n\nclass ChunkMetadata {\n  constructor(level, sn, id, size = 0, part = -1, partial = false) {\n    this.level = void 0;\n    this.sn = void 0;\n    this.part = void 0;\n    this.id = void 0;\n    this.size = void 0;\n    this.partial = void 0;\n    this.transmuxing = getNewPerformanceTiming();\n    this.buffering = {\n      audio: getNewPerformanceTiming(),\n      video: getNewPerformanceTiming(),\n      audiovideo: getNewPerformanceTiming()\n    };\n    this.level = level;\n    this.sn = sn;\n    this.id = id;\n    this.size = size;\n    this.part = part;\n    this.partial = partial;\n  }\n}\nfunction getNewPerformanceTiming() {\n  return {\n    start: 0,\n    executeStart: 0,\n    executeEnd: 0,\n    end: 0\n  };\n}\n\nfunction findFirstFragWithCC(fragments, cc) {\n  for (let i = 0, len = fragments.length; i < len; i++) {\n    var _fragments$i;\n    if (((_fragments$i = fragments[i]) == null ? void 0 : _fragments$i.cc) === cc) {\n      return fragments[i];\n    }\n  }\n  return null;\n}\nfunction shouldAlignOnDiscontinuities(lastFrag, switchDetails, details) {\n  if (switchDetails) {\n    if (details.endCC > details.startCC || lastFrag && lastFrag.cc < details.startCC) {\n      return true;\n    }\n  }\n  return false;\n}\n\n// Find the first frag in the previous level which matches the CC of the first frag of the new level\nfunction findDiscontinuousReferenceFrag(prevDetails, curDetails) {\n  const prevFrags = prevDetails.fragments;\n  const curFrags = curDetails.fragments;\n  if (!curFrags.length || !prevFrags.length) {\n    logger.log('No fragments to align');\n    return;\n  }\n  const prevStartFrag = findFirstFragWithCC(prevFrags, curFrags[0].cc);\n  if (!prevStartFrag || prevStartFrag && !prevStartFrag.startPTS) {\n    logger.log('No frag in previous level to align on');\n    return;\n  }\n  return prevStartFrag;\n}\nfunction adjustFragmentStart(frag, sliding) {\n  if (frag) {\n    const start = frag.start + sliding;\n    frag.start = frag.startPTS = start;\n    frag.endPTS = start + frag.duration;\n  }\n}\nfunction adjustSlidingStart(sliding, details) {\n  // Update segments\n  const fragments = details.fragments;\n  for (let i = 0, len = fragments.length; i < len; i++) {\n    adjustFragmentStart(fragments[i], sliding);\n  }\n  // Update LL-HLS parts at the end of the playlist\n  if (details.fragmentHint) {\n    adjustFragmentStart(details.fragmentHint, sliding);\n  }\n  details.alignedSliding = true;\n}\n\n/**\n * Using the parameters of the last level, this function computes PTS' of the new fragments so that they form a\n * contiguous stream with the last fragments.\n * The PTS of a fragment lets Hls.js know where it fits into a stream - by knowing every PTS, we know which fragment to\n * download at any given time. PTS is normally computed when the fragment is demuxed, so taking this step saves us time\n * and an extra download.\n * @param lastFrag\n * @param lastLevel\n * @param details\n */\nfunction alignStream(lastFrag, switchDetails, details) {\n  if (!switchDetails) {\n    return;\n  }\n  alignDiscontinuities(lastFrag, details, switchDetails);\n  if (!details.alignedSliding && switchDetails) {\n    // If the PTS wasn't figured out via discontinuity sequence that means there was no CC increase within the level.\n    // Aligning via Program Date Time should therefore be reliable, since PDT should be the same within the same\n    // discontinuity sequence.\n    alignMediaPlaylistByPDT(details, switchDetails);\n  }\n  if (!details.alignedSliding && switchDetails && !details.skippedSegments) {\n    // Try to align on sn so that we pick a better start fragment.\n    // Do not perform this on playlists with delta updates as this is only to align levels on switch\n    // and adjustSliding only adjusts fragments after skippedSegments.\n    adjustSliding(switchDetails, details);\n  }\n}\n\n/**\n * Computes the PTS if a new level's fragments using the PTS of a fragment in the last level which shares the same\n * discontinuity sequence.\n * @param lastFrag - The last Fragment which shares the same discontinuity sequence\n * @param lastLevel - The details of the last loaded level\n * @param details - The details of the new level\n */\nfunction alignDiscontinuities(lastFrag, details, switchDetails) {\n  if (shouldAlignOnDiscontinuities(lastFrag, switchDetails, details)) {\n    const referenceFrag = findDiscontinuousReferenceFrag(switchDetails, details);\n    if (referenceFrag && isFiniteNumber(referenceFrag.start)) {\n      logger.log(`Adjusting PTS using last level due to CC increase within current level ${details.url}`);\n      adjustSlidingStart(referenceFrag.start, details);\n    }\n  }\n}\n\n/**\n * Ensures appropriate time-alignment between renditions based on PDT.\n * This function assumes the timelines represented in `refDetails` are accurate, including the PDTs\n * for the last discontinuity sequence number shared by both playlists when present,\n * and uses the \"wallclock\"/PDT timeline as a cross-reference to `details`, adjusting the presentation\n * times/timelines of `details` accordingly.\n * Given the asynchronous nature of fetches and initial loads of live `main` and audio/subtitle tracks,\n * the primary purpose of this function is to ensure the \"local timelines\" of audio/subtitle tracks\n * are aligned to the main/video timeline, using PDT as the cross-reference/\"anchor\" that should\n * be consistent across playlists, per the HLS spec.\n * @param details - The details of the rendition you'd like to time-align (e.g. an audio rendition).\n * @param refDetails - The details of the reference rendition with start and PDT times for alignment.\n */\nfunction alignMediaPlaylistByPDT(details, refDetails) {\n  if (!details.hasProgramDateTime || !refDetails.hasProgramDateTime) {\n    return;\n  }\n  const fragments = details.fragments;\n  const refFragments = refDetails.fragments;\n  if (!fragments.length || !refFragments.length) {\n    return;\n  }\n\n  // Calculate a delta to apply to all fragments according to the delta in PDT times and start times\n  // of a fragment in the reference details, and a fragment in the target details of the same discontinuity.\n  // If a fragment of the same discontinuity was not found use the middle fragment of both.\n  let refFrag;\n  let frag;\n  const targetCC = Math.min(refDetails.endCC, details.endCC);\n  if (refDetails.startCC < targetCC && details.startCC < targetCC) {\n    refFrag = findFirstFragWithCC(refFragments, targetCC);\n    frag = findFirstFragWithCC(fragments, targetCC);\n  }\n  if (!refFrag || !frag) {\n    refFrag = refFragments[Math.floor(refFragments.length / 2)];\n    frag = findFirstFragWithCC(fragments, refFrag.cc) || fragments[Math.floor(fragments.length / 2)];\n  }\n  const refPDT = refFrag.programDateTime;\n  const targetPDT = frag.programDateTime;\n  if (!refPDT || !targetPDT) {\n    return;\n  }\n  const delta = (targetPDT - refPDT) / 1000 - (frag.start - refFrag.start);\n  adjustSlidingStart(delta, details);\n}\n\nconst MIN_CHUNK_SIZE = Math.pow(2, 17); // 128kb\n\nclass FragmentLoader {\n  constructor(config) {\n    this.config = void 0;\n    this.loader = null;\n    this.partLoadTimeout = -1;\n    this.config = config;\n  }\n  destroy() {\n    if (this.loader) {\n      this.loader.destroy();\n      this.loader = null;\n    }\n  }\n  abort() {\n    if (this.loader) {\n      // Abort the loader for current fragment. Only one may load at any given time\n      this.loader.abort();\n    }\n  }\n  load(frag, onProgress) {\n    const url = frag.url;\n    if (!url) {\n      return Promise.reject(new LoadError({\n        type: ErrorTypes.NETWORK_ERROR,\n        details: ErrorDetails.FRAG_LOAD_ERROR,\n        fatal: false,\n        frag,\n        error: new Error(`Fragment does not have a ${url ? 'part list' : 'url'}`),\n        networkDetails: null\n      }));\n    }\n    this.abort();\n    const config = this.config;\n    const FragmentILoader = config.fLoader;\n    const DefaultILoader = config.loader;\n    return new Promise((resolve, reject) => {\n      if (this.loader) {\n        this.loader.destroy();\n      }\n      if (frag.gap) {\n        if (frag.tagList.some(tags => tags[0] === 'GAP')) {\n          reject(createGapLoadError(frag));\n          return;\n        } else {\n          // Reset temporary treatment as GAP tag\n          frag.gap = false;\n        }\n      }\n      const loader = this.loader = frag.loader = FragmentILoader ? new FragmentILoader(config) : new DefaultILoader(config);\n      const loaderContext = createLoaderContext(frag);\n      const loadPolicy = getLoaderConfigWithoutReties(config.fragLoadPolicy.default);\n      const loaderConfig = {\n        loadPolicy,\n        timeout: loadPolicy.maxLoadTimeMs,\n        maxRetry: 0,\n        retryDelay: 0,\n        maxRetryDelay: 0,\n        highWaterMark: frag.sn === 'initSegment' ? Infinity : MIN_CHUNK_SIZE\n      };\n      // Assign frag stats to the loader's stats reference\n      frag.stats = loader.stats;\n      loader.load(loaderContext, loaderConfig, {\n        onSuccess: (response, stats, context, networkDetails) => {\n          this.resetLoader(frag, loader);\n          let payload = response.data;\n          if (context.resetIV && frag.decryptdata) {\n            frag.decryptdata.iv = new Uint8Array(payload.slice(0, 16));\n            payload = payload.slice(16);\n          }\n          resolve({\n            frag,\n            part: null,\n            payload,\n            networkDetails\n          });\n        },\n        onError: (response, context, networkDetails, stats) => {\n          this.resetLoader(frag, loader);\n          reject(new LoadError({\n            type: ErrorTypes.NETWORK_ERROR,\n            details: ErrorDetails.FRAG_LOAD_ERROR,\n            fatal: false,\n            frag,\n            response: _objectSpread2({\n              url,\n              data: undefined\n            }, response),\n            error: new Error(`HTTP Error ${response.code} ${response.text}`),\n            networkDetails,\n            stats\n          }));\n        },\n        onAbort: (stats, context, networkDetails) => {\n          this.resetLoader(frag, loader);\n          reject(new LoadError({\n            type: ErrorTypes.NETWORK_ERROR,\n            details: ErrorDetails.INTERNAL_ABORTED,\n            fatal: false,\n            frag,\n            error: new Error('Aborted'),\n            networkDetails,\n            stats\n          }));\n        },\n        onTimeout: (stats, context, networkDetails) => {\n          this.resetLoader(frag, loader);\n          reject(new LoadError({\n            type: ErrorTypes.NETWORK_ERROR,\n            details: ErrorDetails.FRAG_LOAD_TIMEOUT,\n            fatal: false,\n            frag,\n            error: new Error(`Timeout after ${loaderConfig.timeout}ms`),\n            networkDetails,\n            stats\n          }));\n        },\n        onProgress: (stats, context, data, networkDetails) => {\n          if (onProgress) {\n            onProgress({\n              frag,\n              part: null,\n              payload: data,\n              networkDetails\n            });\n          }\n        }\n      });\n    });\n  }\n  loadPart(frag, part, onProgress) {\n    this.abort();\n    const config = this.config;\n    const FragmentILoader = config.fLoader;\n    const DefaultILoader = config.loader;\n    return new Promise((resolve, reject) => {\n      if (this.loader) {\n        this.loader.destroy();\n      }\n      if (frag.gap || part.gap) {\n        reject(createGapLoadError(frag, part));\n        return;\n      }\n      const loader = this.loader = frag.loader = FragmentILoader ? new FragmentILoader(config) : new DefaultILoader(config);\n      const loaderContext = createLoaderContext(frag, part);\n      // Should we define another load policy for parts?\n      const loadPolicy = getLoaderConfigWithoutReties(config.fragLoadPolicy.default);\n      const loaderConfig = {\n        loadPolicy,\n        timeout: loadPolicy.maxLoadTimeMs,\n        maxRetry: 0,\n        retryDelay: 0,\n        maxRetryDelay: 0,\n        highWaterMark: MIN_CHUNK_SIZE\n      };\n      // Assign part stats to the loader's stats reference\n      part.stats = loader.stats;\n      loader.load(loaderContext, loaderConfig, {\n        onSuccess: (response, stats, context, networkDetails) => {\n          this.resetLoader(frag, loader);\n          this.updateStatsFromPart(frag, part);\n          const partLoadedData = {\n            frag,\n            part,\n            payload: response.data,\n            networkDetails\n          };\n          onProgress(partLoadedData);\n          resolve(partLoadedData);\n        },\n        onError: (response, context, networkDetails, stats) => {\n          this.resetLoader(frag, loader);\n          reject(new LoadError({\n            type: ErrorTypes.NETWORK_ERROR,\n            details: ErrorDetails.FRAG_LOAD_ERROR,\n            fatal: false,\n            frag,\n            part,\n            response: _objectSpread2({\n              url: loaderContext.url,\n              data: undefined\n            }, response),\n            error: new Error(`HTTP Error ${response.code} ${response.text}`),\n            networkDetails,\n            stats\n          }));\n        },\n        onAbort: (stats, context, networkDetails) => {\n          frag.stats.aborted = part.stats.aborted;\n          this.resetLoader(frag, loader);\n          reject(new LoadError({\n            type: ErrorTypes.NETWORK_ERROR,\n            details: ErrorDetails.INTERNAL_ABORTED,\n            fatal: false,\n            frag,\n            part,\n            error: new Error('Aborted'),\n            networkDetails,\n            stats\n          }));\n        },\n        onTimeout: (stats, context, networkDetails) => {\n          this.resetLoader(frag, loader);\n          reject(new LoadError({\n            type: ErrorTypes.NETWORK_ERROR,\n            details: ErrorDetails.FRAG_LOAD_TIMEOUT,\n            fatal: false,\n            frag,\n            part,\n            error: new Error(`Timeout after ${loaderConfig.timeout}ms`),\n            networkDetails,\n            stats\n          }));\n        }\n      });\n    });\n  }\n  updateStatsFromPart(frag, part) {\n    const fragStats = frag.stats;\n    const partStats = part.stats;\n    const partTotal = partStats.total;\n    fragStats.loaded += partStats.loaded;\n    if (partTotal) {\n      const estTotalParts = Math.round(frag.duration / part.duration);\n      const estLoadedParts = Math.min(Math.round(fragStats.loaded / partTotal), estTotalParts);\n      const estRemainingParts = estTotalParts - estLoadedParts;\n      const estRemainingBytes = estRemainingParts * Math.round(fragStats.loaded / estLoadedParts);\n      fragStats.total = fragStats.loaded + estRemainingBytes;\n    } else {\n      fragStats.total = Math.max(fragStats.loaded, fragStats.total);\n    }\n    const fragLoading = fragStats.loading;\n    const partLoading = partStats.loading;\n    if (fragLoading.start) {\n      // add to fragment loader latency\n      fragLoading.first += partLoading.first - partLoading.start;\n    } else {\n      fragLoading.start = partLoading.start;\n      fragLoading.first = partLoading.first;\n    }\n    fragLoading.end = partLoading.end;\n  }\n  resetLoader(frag, loader) {\n    frag.loader = null;\n    if (this.loader === loader) {\n      self.clearTimeout(this.partLoadTimeout);\n      this.loader = null;\n    }\n    loader.destroy();\n  }\n}\nfunction createLoaderContext(frag, part = null) {\n  const segment = part || frag;\n  const loaderContext = {\n    frag,\n    part,\n    responseType: 'arraybuffer',\n    url: segment.url,\n    headers: {},\n    rangeStart: 0,\n    rangeEnd: 0\n  };\n  const start = segment.byteRangeStartOffset;\n  const end = segment.byteRangeEndOffset;\n  if (isFiniteNumber(start) && isFiniteNumber(end)) {\n    var _frag$decryptdata;\n    let byteRangeStart = start;\n    let byteRangeEnd = end;\n    if (frag.sn === 'initSegment' && ((_frag$decryptdata = frag.decryptdata) == null ? void 0 : _frag$decryptdata.method) === 'AES-128') {\n      // MAP segment encrypted with method 'AES-128', when served with HTTP Range,\n      // has the unencrypted size specified in the range.\n      // Ref: https://tools.ietf.org/html/draft-pantos-hls-rfc8216bis-08#section-6.3.6\n      const fragmentLen = end - start;\n      if (fragmentLen % 16) {\n        byteRangeEnd = end + (16 - fragmentLen % 16);\n      }\n      if (start !== 0) {\n        loaderContext.resetIV = true;\n        byteRangeStart = start - 16;\n      }\n    }\n    loaderContext.rangeStart = byteRangeStart;\n    loaderContext.rangeEnd = byteRangeEnd;\n  }\n  return loaderContext;\n}\nfunction createGapLoadError(frag, part) {\n  const error = new Error(`GAP ${frag.gap ? 'tag' : 'attribute'} found`);\n  const errorData = {\n    type: ErrorTypes.MEDIA_ERROR,\n    details: ErrorDetails.FRAG_GAP,\n    fatal: false,\n    frag,\n    error,\n    networkDetails: null\n  };\n  if (part) {\n    errorData.part = part;\n  }\n  (part ? part : frag).stats.aborted = true;\n  return new LoadError(errorData);\n}\nclass LoadError extends Error {\n  constructor(data) {\n    super(data.error.message);\n    this.data = void 0;\n    this.data = data;\n  }\n}\n\nclass AESCrypto {\n  constructor(subtle, iv) {\n    this.subtle = void 0;\n    this.aesIV = void 0;\n    this.subtle = subtle;\n    this.aesIV = iv;\n  }\n  decrypt(data, key) {\n    return this.subtle.decrypt({\n      name: 'AES-CBC',\n      iv: this.aesIV\n    }, key, data);\n  }\n}\n\nclass FastAESKey {\n  constructor(subtle, key) {\n    this.subtle = void 0;\n    this.key = void 0;\n    this.subtle = subtle;\n    this.key = key;\n  }\n  expandKey() {\n    return this.subtle.importKey('raw', this.key, {\n      name: 'AES-CBC'\n    }, false, ['encrypt', 'decrypt']);\n  }\n}\n\n// PKCS7\nfunction removePadding(array) {\n  const outputBytes = array.byteLength;\n  const paddingBytes = outputBytes && new DataView(array.buffer).getUint8(outputBytes - 1);\n  if (paddingBytes) {\n    return sliceUint8(array, 0, outputBytes - paddingBytes);\n  }\n  return array;\n}\nclass AESDecryptor {\n  constructor() {\n    this.rcon = [0x0, 0x1, 0x2, 0x4, 0x8, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36];\n    this.subMix = [new Uint32Array(256), new Uint32Array(256), new Uint32Array(256), new Uint32Array(256)];\n    this.invSubMix = [new Uint32Array(256), new Uint32Array(256), new Uint32Array(256), new Uint32Array(256)];\n    this.sBox = new Uint32Array(256);\n    this.invSBox = new Uint32Array(256);\n    this.key = new Uint32Array(0);\n    this.ksRows = 0;\n    this.keySize = 0;\n    this.keySchedule = void 0;\n    this.invKeySchedule = void 0;\n    this.initTable();\n  }\n\n  // Using view.getUint32() also swaps the byte order.\n  uint8ArrayToUint32Array_(arrayBuffer) {\n    const view = new DataView(arrayBuffer);\n    const newArray = new Uint32Array(4);\n    for (let i = 0; i < 4; i++) {\n      newArray[i] = view.getUint32(i * 4);\n    }\n    return newArray;\n  }\n  initTable() {\n    const sBox = this.sBox;\n    const invSBox = this.invSBox;\n    const subMix = this.subMix;\n    const subMix0 = subMix[0];\n    const subMix1 = subMix[1];\n    const subMix2 = subMix[2];\n    const subMix3 = subMix[3];\n    const invSubMix = this.invSubMix;\n    const invSubMix0 = invSubMix[0];\n    const invSubMix1 = invSubMix[1];\n    const invSubMix2 = invSubMix[2];\n    const invSubMix3 = invSubMix[3];\n    const d = new Uint32Array(256);\n    let x = 0;\n    let xi = 0;\n    let i = 0;\n    for (i = 0; i < 256; i++) {\n      if (i < 128) {\n        d[i] = i << 1;\n      } else {\n        d[i] = i << 1 ^ 0x11b;\n      }\n    }\n    for (i = 0; i < 256; i++) {\n      let sx = xi ^ xi << 1 ^ xi << 2 ^ xi << 3 ^ xi << 4;\n      sx = sx >>> 8 ^ sx & 0xff ^ 0x63;\n      sBox[x] = sx;\n      invSBox[sx] = x;\n\n      // Compute multiplication\n      const x2 = d[x];\n      const x4 = d[x2];\n      const x8 = d[x4];\n\n      // Compute sub/invSub bytes, mix columns tables\n      let t = d[sx] * 0x101 ^ sx * 0x1010100;\n      subMix0[x] = t << 24 | t >>> 8;\n      subMix1[x] = t << 16 | t >>> 16;\n      subMix2[x] = t << 8 | t >>> 24;\n      subMix3[x] = t;\n\n      // Compute inv sub bytes, inv mix columns tables\n      t = x8 * 0x1010101 ^ x4 * 0x10001 ^ x2 * 0x101 ^ x * 0x1010100;\n      invSubMix0[sx] = t << 24 | t >>> 8;\n      invSubMix1[sx] = t << 16 | t >>> 16;\n      invSubMix2[sx] = t << 8 | t >>> 24;\n      invSubMix3[sx] = t;\n\n      // Compute next counter\n      if (!x) {\n        x = xi = 1;\n      } else {\n        x = x2 ^ d[d[d[x8 ^ x2]]];\n        xi ^= d[d[xi]];\n      }\n    }\n  }\n  expandKey(keyBuffer) {\n    // convert keyBuffer to Uint32Array\n    const key = this.uint8ArrayToUint32Array_(keyBuffer);\n    let sameKey = true;\n    let offset = 0;\n    while (offset < key.length && sameKey) {\n      sameKey = key[offset] === this.key[offset];\n      offset++;\n    }\n    if (sameKey) {\n      return;\n    }\n    this.key = key;\n    const keySize = this.keySize = key.length;\n    if (keySize !== 4 && keySize !== 6 && keySize !== 8) {\n      throw new Error('Invalid aes key size=' + keySize);\n    }\n    const ksRows = this.ksRows = (keySize + 6 + 1) * 4;\n    let ksRow;\n    let invKsRow;\n    const keySchedule = this.keySchedule = new Uint32Array(ksRows);\n    const invKeySchedule = this.invKeySchedule = new Uint32Array(ksRows);\n    const sbox = this.sBox;\n    const rcon = this.rcon;\n    const invSubMix = this.invSubMix;\n    const invSubMix0 = invSubMix[0];\n    const invSubMix1 = invSubMix[1];\n    const invSubMix2 = invSubMix[2];\n    const invSubMix3 = invSubMix[3];\n    let prev;\n    let t;\n    for (ksRow = 0; ksRow < ksRows; ksRow++) {\n      if (ksRow < keySize) {\n        prev = keySchedule[ksRow] = key[ksRow];\n        continue;\n      }\n      t = prev;\n      if (ksRow % keySize === 0) {\n        // Rot word\n        t = t << 8 | t >>> 24;\n\n        // Sub word\n        t = sbox[t >>> 24] << 24 | sbox[t >>> 16 & 0xff] << 16 | sbox[t >>> 8 & 0xff] << 8 | sbox[t & 0xff];\n\n        // Mix Rcon\n        t ^= rcon[ksRow / keySize | 0] << 24;\n      } else if (keySize > 6 && ksRow % keySize === 4) {\n        // Sub word\n        t = sbox[t >>> 24] << 24 | sbox[t >>> 16 & 0xff] << 16 | sbox[t >>> 8 & 0xff] << 8 | sbox[t & 0xff];\n      }\n      keySchedule[ksRow] = prev = (keySchedule[ksRow - keySize] ^ t) >>> 0;\n    }\n    for (invKsRow = 0; invKsRow < ksRows; invKsRow++) {\n      ksRow = ksRows - invKsRow;\n      if (invKsRow & 3) {\n        t = keySchedule[ksRow];\n      } else {\n        t = keySchedule[ksRow - 4];\n      }\n      if (invKsRow < 4 || ksRow <= 4) {\n        invKeySchedule[invKsRow] = t;\n      } else {\n        invKeySchedule[invKsRow] = invSubMix0[sbox[t >>> 24]] ^ invSubMix1[sbox[t >>> 16 & 0xff]] ^ invSubMix2[sbox[t >>> 8 & 0xff]] ^ invSubMix3[sbox[t & 0xff]];\n      }\n      invKeySchedule[invKsRow] = invKeySchedule[invKsRow] >>> 0;\n    }\n  }\n\n  // Adding this as a method greatly improves performance.\n  networkToHostOrderSwap(word) {\n    return word << 24 | (word & 0xff00) << 8 | (word & 0xff0000) >> 8 | word >>> 24;\n  }\n  decrypt(inputArrayBuffer, offset, aesIV) {\n    const nRounds = this.keySize + 6;\n    const invKeySchedule = this.invKeySchedule;\n    const invSBOX = this.invSBox;\n    const invSubMix = this.invSubMix;\n    const invSubMix0 = invSubMix[0];\n    const invSubMix1 = invSubMix[1];\n    const invSubMix2 = invSubMix[2];\n    const invSubMix3 = invSubMix[3];\n    const initVector = this.uint8ArrayToUint32Array_(aesIV);\n    let initVector0 = initVector[0];\n    let initVector1 = initVector[1];\n    let initVector2 = initVector[2];\n    let initVector3 = initVector[3];\n    const inputInt32 = new Int32Array(inputArrayBuffer);\n    const outputInt32 = new Int32Array(inputInt32.length);\n    let t0, t1, t2, t3;\n    let s0, s1, s2, s3;\n    let inputWords0, inputWords1, inputWords2, inputWords3;\n    let ksRow, i;\n    const swapWord = this.networkToHostOrderSwap;\n    while (offset < inputInt32.length) {\n      inputWords0 = swapWord(inputInt32[offset]);\n      inputWords1 = swapWord(inputInt32[offset + 1]);\n      inputWords2 = swapWord(inputInt32[offset + 2]);\n      inputWords3 = swapWord(inputInt32[offset + 3]);\n      s0 = inputWords0 ^ invKeySchedule[0];\n      s1 = inputWords3 ^ invKeySchedule[1];\n      s2 = inputWords2 ^ invKeySchedule[2];\n      s3 = inputWords1 ^ invKeySchedule[3];\n      ksRow = 4;\n\n      // Iterate through the rounds of decryption\n      for (i = 1; i < nRounds; i++) {\n        t0 = invSubMix0[s0 >>> 24] ^ invSubMix1[s1 >> 16 & 0xff] ^ invSubMix2[s2 >> 8 & 0xff] ^ invSubMix3[s3 & 0xff] ^ invKeySchedule[ksRow];\n        t1 = invSubMix0[s1 >>> 24] ^ invSubMix1[s2 >> 16 & 0xff] ^ invSubMix2[s3 >> 8 & 0xff] ^ invSubMix3[s0 & 0xff] ^ invKeySchedule[ksRow + 1];\n        t2 = invSubMix0[s2 >>> 24] ^ invSubMix1[s3 >> 16 & 0xff] ^ invSubMix2[s0 >> 8 & 0xff] ^ invSubMix3[s1 & 0xff] ^ invKeySchedule[ksRow + 2];\n        t3 = invSubMix0[s3 >>> 24] ^ invSubMix1[s0 >> 16 & 0xff] ^ invSubMix2[s1 >> 8 & 0xff] ^ invSubMix3[s2 & 0xff] ^ invKeySchedule[ksRow + 3];\n        // Update state\n        s0 = t0;\n        s1 = t1;\n        s2 = t2;\n        s3 = t3;\n        ksRow = ksRow + 4;\n      }\n\n      // Shift rows, sub bytes, add round key\n      t0 = invSBOX[s0 >>> 24] << 24 ^ invSBOX[s1 >> 16 & 0xff] << 16 ^ invSBOX[s2 >> 8 & 0xff] << 8 ^ invSBOX[s3 & 0xff] ^ invKeySchedule[ksRow];\n      t1 = invSBOX[s1 >>> 24] << 24 ^ invSBOX[s2 >> 16 & 0xff] << 16 ^ invSBOX[s3 >> 8 & 0xff] << 8 ^ invSBOX[s0 & 0xff] ^ invKeySchedule[ksRow + 1];\n      t2 = invSBOX[s2 >>> 24] << 24 ^ invSBOX[s3 >> 16 & 0xff] << 16 ^ invSBOX[s0 >> 8 & 0xff] << 8 ^ invSBOX[s1 & 0xff] ^ invKeySchedule[ksRow + 2];\n      t3 = invSBOX[s3 >>> 24] << 24 ^ invSBOX[s0 >> 16 & 0xff] << 16 ^ invSBOX[s1 >> 8 & 0xff] << 8 ^ invSBOX[s2 & 0xff] ^ invKeySchedule[ksRow + 3];\n\n      // Write\n      outputInt32[offset] = swapWord(t0 ^ initVector0);\n      outputInt32[offset + 1] = swapWord(t3 ^ initVector1);\n      outputInt32[offset + 2] = swapWord(t2 ^ initVector2);\n      outputInt32[offset + 3] = swapWord(t1 ^ initVector3);\n\n      // reset initVector to last 4 unsigned int\n      initVector0 = inputWords0;\n      initVector1 = inputWords1;\n      initVector2 = inputWords2;\n      initVector3 = inputWords3;\n      offset = offset + 4;\n    }\n    return outputInt32.buffer;\n  }\n}\n\nconst CHUNK_SIZE = 16; // 16 bytes, 128 bits\n\nclass Decrypter {\n  constructor(config, {\n    removePKCS7Padding = true\n  } = {}) {\n    this.logEnabled = true;\n    this.removePKCS7Padding = void 0;\n    this.subtle = null;\n    this.softwareDecrypter = null;\n    this.key = null;\n    this.fastAesKey = null;\n    this.remainderData = null;\n    this.currentIV = null;\n    this.currentResult = null;\n    this.useSoftware = void 0;\n    this.useSoftware = config.enableSoftwareAES;\n    this.removePKCS7Padding = removePKCS7Padding;\n    // built in decryptor expects PKCS7 padding\n    if (removePKCS7Padding) {\n      try {\n        const browserCrypto = self.crypto;\n        if (browserCrypto) {\n          this.subtle = browserCrypto.subtle || browserCrypto.webkitSubtle;\n        }\n      } catch (e) {\n        /* no-op */\n      }\n    }\n    this.useSoftware = !this.subtle;\n  }\n  destroy() {\n    this.subtle = null;\n    this.softwareDecrypter = null;\n    this.key = null;\n    this.fastAesKey = null;\n    this.remainderData = null;\n    this.currentIV = null;\n    this.currentResult = null;\n  }\n  isSync() {\n    return this.useSoftware;\n  }\n  flush() {\n    const {\n      currentResult,\n      remainderData\n    } = this;\n    if (!currentResult || remainderData) {\n      this.reset();\n      return null;\n    }\n    const data = new Uint8Array(currentResult);\n    this.reset();\n    if (this.removePKCS7Padding) {\n      return removePadding(data);\n    }\n    return data;\n  }\n  reset() {\n    this.currentResult = null;\n    this.currentIV = null;\n    this.remainderData = null;\n    if (this.softwareDecrypter) {\n      this.softwareDecrypter = null;\n    }\n  }\n  decrypt(data, key, iv) {\n    if (this.useSoftware) {\n      return new Promise((resolve, reject) => {\n        this.softwareDecrypt(new Uint8Array(data), key, iv);\n        const decryptResult = this.flush();\n        if (decryptResult) {\n          resolve(decryptResult.buffer);\n        } else {\n          reject(new Error('[softwareDecrypt] Failed to decrypt data'));\n        }\n      });\n    }\n    return this.webCryptoDecrypt(new Uint8Array(data), key, iv);\n  }\n\n  // Software decryption is progressive. Progressive decryption may not return a result on each call. Any cached\n  // data is handled in the flush() call\n  softwareDecrypt(data, key, iv) {\n    const {\n      currentIV,\n      currentResult,\n      remainderData\n    } = this;\n    this.logOnce('JS AES decrypt');\n    // The output is staggered during progressive parsing - the current result is cached, and emitted on the next call\n    // This is done in order to strip PKCS7 padding, which is found at the end of each segment. We only know we've reached\n    // the end on flush(), but by that time we have already received all bytes for the segment.\n    // Progressive decryption does not work with WebCrypto\n\n    if (remainderData) {\n      data = appendUint8Array(remainderData, data);\n      this.remainderData = null;\n    }\n\n    // Byte length must be a multiple of 16 (AES-128 = 128 bit blocks = 16 bytes)\n    const currentChunk = this.getValidChunk(data);\n    if (!currentChunk.length) {\n      return null;\n    }\n    if (currentIV) {\n      iv = currentIV;\n    }\n    let softwareDecrypter = this.softwareDecrypter;\n    if (!softwareDecrypter) {\n      softwareDecrypter = this.softwareDecrypter = new AESDecryptor();\n    }\n    softwareDecrypter.expandKey(key);\n    const result = currentResult;\n    this.currentResult = softwareDecrypter.decrypt(currentChunk.buffer, 0, iv);\n    this.currentIV = sliceUint8(currentChunk, -16).buffer;\n    if (!result) {\n      return null;\n    }\n    return result;\n  }\n  webCryptoDecrypt(data, key, iv) {\n    if (this.key !== key || !this.fastAesKey) {\n      if (!this.subtle) {\n        return Promise.resolve(this.onWebCryptoError(data, key, iv));\n      }\n      this.key = key;\n      this.fastAesKey = new FastAESKey(this.subtle, key);\n    }\n    return this.fastAesKey.expandKey().then(aesKey => {\n      // decrypt using web crypto\n      if (!this.subtle) {\n        return Promise.reject(new Error('web crypto not initialized'));\n      }\n      this.logOnce('WebCrypto AES decrypt');\n      const crypto = new AESCrypto(this.subtle, new Uint8Array(iv));\n      return crypto.decrypt(data.buffer, aesKey);\n    }).catch(err => {\n      logger.warn(`[decrypter]: WebCrypto Error, disable WebCrypto API, ${err.name}: ${err.message}`);\n      return this.onWebCryptoError(data, key, iv);\n    });\n  }\n  onWebCryptoError(data, key, iv) {\n    this.useSoftware = true;\n    this.logEnabled = true;\n    this.softwareDecrypt(data, key, iv);\n    const decryptResult = this.flush();\n    if (decryptResult) {\n      return decryptResult.buffer;\n    }\n    throw new Error('WebCrypto and softwareDecrypt: failed to decrypt data');\n  }\n  getValidChunk(data) {\n    let currentChunk = data;\n    const splitPoint = data.length - data.length % CHUNK_SIZE;\n    if (splitPoint !== data.length) {\n      currentChunk = sliceUint8(data, 0, splitPoint);\n      this.remainderData = sliceUint8(data, splitPoint);\n    }\n    return currentChunk;\n  }\n  logOnce(msg) {\n    if (!this.logEnabled) {\n      return;\n    }\n    logger.log(`[decrypter]: ${msg}`);\n    this.logEnabled = false;\n  }\n}\n\n/**\n *  TimeRanges to string helper\n */\n\nconst TimeRanges = {\n  toString: function (r) {\n    let log = '';\n    const len = r.length;\n    for (let i = 0; i < len; i++) {\n      log += `[${r.start(i).toFixed(3)}-${r.end(i).toFixed(3)}]`;\n    }\n    return log;\n  }\n};\n\nconst State = {\n  STOPPED: 'STOPPED',\n  IDLE: 'IDLE',\n  KEY_LOADING: 'KEY_LOADING',\n  FRAG_LOADING: 'FRAG_LOADING',\n  FRAG_LOADING_WAITING_RETRY: 'FRAG_LOADING_WAITING_RETRY',\n  WAITING_TRACK: 'WAITING_TRACK',\n  PARSING: 'PARSING',\n  PARSED: 'PARSED',\n  ENDED: 'ENDED',\n  ERROR: 'ERROR',\n  WAITING_INIT_PTS: 'WAITING_INIT_PTS',\n  WAITING_LEVEL: 'WAITING_LEVEL'\n};\nclass BaseStreamController extends TaskLoop {\n  constructor(hls, fragmentTracker, keyLoader, logPrefix, playlistType) {\n    super();\n    this.hls = void 0;\n    this.fragPrevious = null;\n    this.fragCurrent = null;\n    this.fragmentTracker = void 0;\n    this.transmuxer = null;\n    this._state = State.STOPPED;\n    this.playlistType = void 0;\n    this.media = null;\n    this.mediaBuffer = null;\n    this.config = void 0;\n    this.bitrateTest = false;\n    this.lastCurrentTime = 0;\n    this.nextLoadPosition = 0;\n    this.startPosition = 0;\n    this.startTimeOffset = null;\n    this.loadedmetadata = false;\n    this.retryDate = 0;\n    this.levels = null;\n    this.fragmentLoader = void 0;\n    this.keyLoader = void 0;\n    this.levelLastLoaded = null;\n    this.startFragRequested = false;\n    this.decrypter = void 0;\n    this.initPTS = [];\n    this.buffering = true;\n    this.onvseeking = null;\n    this.onvended = null;\n    this.logPrefix = '';\n    this.log = void 0;\n    this.warn = void 0;\n    this.playlistType = playlistType;\n    this.logPrefix = logPrefix;\n    this.log = logger.log.bind(logger, `${logPrefix}:`);\n    this.warn = logger.warn.bind(logger, `${logPrefix}:`);\n    this.hls = hls;\n    this.fragmentLoader = new FragmentLoader(hls.config);\n    this.keyLoader = keyLoader;\n    this.fragmentTracker = fragmentTracker;\n    this.config = hls.config;\n    this.decrypter = new Decrypter(hls.config);\n    hls.on(Events.MANIFEST_LOADED, this.onManifestLoaded, this);\n  }\n  doTick() {\n    this.onTickEnd();\n  }\n  onTickEnd() {}\n\n  // eslint-disable-next-line @typescript-eslint/no-unused-vars\n  startLoad(startPosition) {}\n  stopLoad() {\n    this.fragmentLoader.abort();\n    this.keyLoader.abort(this.playlistType);\n    const frag = this.fragCurrent;\n    if (frag != null && frag.loader) {\n      frag.abortRequests();\n      this.fragmentTracker.removeFragment(frag);\n    }\n    this.resetTransmuxer();\n    this.fragCurrent = null;\n    this.fragPrevious = null;\n    this.clearInterval();\n    this.clearNextTick();\n    this.state = State.STOPPED;\n  }\n  pauseBuffering() {\n    this.buffering = false;\n  }\n  resumeBuffering() {\n    this.buffering = true;\n  }\n  _streamEnded(bufferInfo, levelDetails) {\n    // If playlist is live, there is another buffered range after the current range, nothing buffered, media is detached,\n    // of nothing loading/loaded return false\n    if (levelDetails.live || bufferInfo.nextStart || !bufferInfo.end || !this.media) {\n      return false;\n    }\n    const partList = levelDetails.partList;\n    // Since the last part isn't guaranteed to correspond to the last playlist segment for Low-Latency HLS,\n    // check instead if the last part is buffered.\n    if (partList != null && partList.length) {\n      const lastPart = partList[partList.length - 1];\n\n      // Checking the midpoint of the part for potential margin of error and related issues.\n      // NOTE: Technically I believe parts could yield content that is < the computed duration (including potential a duration of 0)\n      // and still be spec-compliant, so there may still be edge cases here. Likewise, there could be issues in end of stream\n      // part mismatches for independent audio and video playlists/segments.\n      const lastPartBuffered = BufferHelper.isBuffered(this.media, lastPart.start + lastPart.duration / 2);\n      return lastPartBuffered;\n    }\n    const playlistType = levelDetails.fragments[levelDetails.fragments.length - 1].type;\n    return this.fragmentTracker.isEndListAppended(playlistType);\n  }\n  getLevelDetails() {\n    if (this.levels && this.levelLastLoaded !== null) {\n      var _this$levelLastLoaded;\n      return (_this$levelLastLoaded = this.levelLastLoaded) == null ? void 0 : _this$levelLastLoaded.details;\n    }\n  }\n  onMediaAttached(event, data) {\n    const media = this.media = this.mediaBuffer = data.media;\n    this.onvseeking = this.onMediaSeeking.bind(this);\n    this.onvended = this.onMediaEnded.bind(this);\n    media.addEventListener('seeking', this.onvseeking);\n    media.addEventListener('ended', this.onvended);\n    const config = this.config;\n    if (this.levels && config.autoStartLoad && this.state === State.STOPPED) {\n      this.startLoad(config.startPosition);\n    }\n  }\n  onMediaDetaching() {\n    const media = this.media;\n    if (media != null && media.ended) {\n      this.log('MSE detaching and video ended, reset startPosition');\n      this.startPosition = this.lastCurrentTime = 0;\n    }\n\n    // remove video listeners\n    if (media && this.onvseeking && this.onvended) {\n      media.removeEventListener('seeking', this.onvseeking);\n      media.removeEventListener('ended', this.onvended);\n      this.onvseeking = this.onvended = null;\n    }\n    if (this.keyLoader) {\n      this.keyLoader.detach();\n    }\n    this.media = this.mediaBuffer = null;\n    this.loadedmetadata = false;\n    this.fragmentTracker.removeAllFragments();\n    this.stopLoad();\n  }\n  onMediaSeeking() {\n    const {\n      config,\n      fragCurrent,\n      media,\n      mediaBuffer,\n      state\n    } = this;\n    const currentTime = media ? media.currentTime : 0;\n    const bufferInfo = BufferHelper.bufferInfo(mediaBuffer ? mediaBuffer : media, currentTime, config.maxBufferHole);\n    this.log(`media seeking to ${isFiniteNumber(currentTime) ? currentTime.toFixed(3) : currentTime}, state: ${state}`);\n    if (this.state === State.ENDED) {\n      this.resetLoadingState();\n    } else if (fragCurrent) {\n      // Seeking while frag load is in progress\n      const tolerance = config.maxFragLookUpTolerance;\n      const fragStartOffset = fragCurrent.start - tolerance;\n      const fragEndOffset = fragCurrent.start + fragCurrent.duration + tolerance;\n      // if seeking out of buffered range or into new one\n      if (!bufferInfo.len || fragEndOffset < bufferInfo.start || fragStartOffset > bufferInfo.end) {\n        const pastFragment = currentTime > fragEndOffset;\n        // if the seek position is outside the current fragment range\n        if (currentTime < fragStartOffset || pastFragment) {\n          if (pastFragment && fragCurrent.loader) {\n            this.log('seeking outside of buffer while fragment load in progress, cancel fragment load');\n            fragCurrent.abortRequests();\n            this.resetLoadingState();\n          }\n          this.fragPrevious = null;\n        }\n      }\n    }\n    if (media) {\n      // Remove gap fragments\n      this.fragmentTracker.removeFragmentsInRange(currentTime, Infinity, this.playlistType, true);\n      this.lastCurrentTime = currentTime;\n    }\n\n    // in case seeking occurs although no media buffered, adjust startPosition and nextLoadPosition to seek target\n    if (!this.loadedmetadata && !bufferInfo.len) {\n      this.nextLoadPosition = this.startPosition = currentTime;\n    }\n\n    // Async tick to speed up processing\n    this.tickImmediate();\n  }\n  onMediaEnded() {\n    // reset startPosition and lastCurrentTime to restart playback @ stream beginning\n    this.startPosition = this.lastCurrentTime = 0;\n  }\n  onManifestLoaded(event, data) {\n    this.startTimeOffset = data.startTimeOffset;\n    this.initPTS = [];\n  }\n  onHandlerDestroying() {\n    this.hls.off(Events.MANIFEST_LOADED, this.onManifestLoaded, this);\n    this.stopLoad();\n    super.onHandlerDestroying();\n    // @ts-ignore\n    this.hls = null;\n  }\n  onHandlerDestroyed() {\n    this.state = State.STOPPED;\n    if (this.fragmentLoader) {\n      this.fragmentLoader.destroy();\n    }\n    if (this.keyLoader) {\n      this.keyLoader.destroy();\n    }\n    if (this.decrypter) {\n      this.decrypter.destroy();\n    }\n    this.hls = this.log = this.warn = this.decrypter = this.keyLoader = this.fragmentLoader = this.fragmentTracker = null;\n    super.onHandlerDestroyed();\n  }\n  loadFragment(frag, level, targetBufferTime) {\n    this._loadFragForPlayback(frag, level, targetBufferTime);\n  }\n  _loadFragForPlayback(frag, level, targetBufferTime) {\n    const progressCallback = data => {\n      if (this.fragContextChanged(frag)) {\n        this.warn(`Fragment ${frag.sn}${data.part ? ' p: ' + data.part.index : ''} of level ${frag.level} was dropped during download.`);\n        this.fragmentTracker.removeFragment(frag);\n        return;\n      }\n      frag.stats.chunkCount++;\n      this._handleFragmentLoadProgress(data);\n    };\n    this._doFragLoad(frag, level, targetBufferTime, progressCallback).then(data => {\n      if (!data) {\n        // if we're here we probably needed to backtrack or are waiting for more parts\n        return;\n      }\n      const state = this.state;\n      if (this.fragContextChanged(frag)) {\n        if (state === State.FRAG_LOADING || !this.fragCurrent && state === State.PARSING) {\n          this.fragmentTracker.removeFragment(frag);\n          this.state = State.IDLE;\n        }\n        return;\n      }\n      if ('payload' in data) {\n        this.log(`Loaded fragment ${frag.sn} of level ${frag.level}`);\n        this.hls.trigger(Events.FRAG_LOADED, data);\n      }\n\n      // Pass through the whole payload; controllers not implementing progressive loading receive data from this callback\n      this._handleFragmentLoadComplete(data);\n    }).catch(reason => {\n      if (this.state === State.STOPPED || this.state === State.ERROR) {\n        return;\n      }\n      this.warn(`Frag error: ${(reason == null ? void 0 : reason.message) || reason}`);\n      this.resetFragmentLoading(frag);\n    });\n  }\n  clearTrackerIfNeeded(frag) {\n    var _this$mediaBuffer;\n    const {\n      fragmentTracker\n    } = this;\n    const fragState = fragmentTracker.getState(frag);\n    if (fragState === FragmentState.APPENDING) {\n      // Lower the max buffer length and try again\n      const playlistType = frag.type;\n      const bufferedInfo = this.getFwdBufferInfo(this.mediaBuffer, playlistType);\n      const minForwardBufferLength = Math.max(frag.duration, bufferedInfo ? bufferedInfo.len : this.config.maxBufferLength);\n      // If backtracking, always remove from the tracker without reducing max buffer length\n      const backtrackFragment = this.backtrackFragment;\n      const backtracked = backtrackFragment ? frag.sn - backtrackFragment.sn : 0;\n      if (backtracked === 1 || this.reduceMaxBufferLength(minForwardBufferLength, frag.duration)) {\n        fragmentTracker.removeFragment(frag);\n      }\n    } else if (((_this$mediaBuffer = this.mediaBuffer) == null ? void 0 : _this$mediaBuffer.buffered.length) === 0) {\n      // Stop gap for bad tracker / buffer flush behavior\n      fragmentTracker.removeAllFragments();\n    } else if (fragmentTracker.hasParts(frag.type)) {\n      // In low latency mode, remove fragments for which only some parts were buffered\n      fragmentTracker.detectPartialFragments({\n        frag,\n        part: null,\n        stats: frag.stats,\n        id: frag.type\n      });\n      if (fragmentTracker.getState(frag) === FragmentState.PARTIAL) {\n        fragmentTracker.removeFragment(frag);\n      }\n    }\n  }\n  checkLiveUpdate(details) {\n    if (details.updated && !details.live) {\n      // Live stream ended, update fragment tracker\n      const lastFragment = details.fragments[details.fragments.length - 1];\n      this.fragmentTracker.detectPartialFragments({\n        frag: lastFragment,\n        part: null,\n        stats: lastFragment.stats,\n        id: lastFragment.type\n      });\n    }\n    if (!details.fragments[0]) {\n      details.deltaUpdateFailed = true;\n    }\n  }\n  flushMainBuffer(startOffset, endOffset, type = null) {\n    if (!(startOffset - endOffset)) {\n      return;\n    }\n    // When alternate audio is playing, the audio-stream-controller is responsible for the audio buffer. Otherwise,\n    // passing a null type flushes both buffers\n    const flushScope = {\n      startOffset,\n      endOffset,\n      type\n    };\n    this.hls.trigger(Events.BUFFER_FLUSHING, flushScope);\n  }\n  _loadInitSegment(frag, level) {\n    this._doFragLoad(frag, level).then(data => {\n      if (!data || this.fragContextChanged(frag) || !this.levels) {\n        throw new Error('init load aborted');\n      }\n      return data;\n    }).then(data => {\n      const {\n        hls\n      } = this;\n      const {\n        payload\n      } = data;\n      const decryptData = frag.decryptdata;\n\n      // check to see if the payload needs to be decrypted\n      if (payload && payload.byteLength > 0 && decryptData != null && decryptData.key && decryptData.iv && decryptData.method === 'AES-128') {\n        const startTime = self.performance.now();\n        // decrypt init segment data\n        return this.decrypter.decrypt(new Uint8Array(payload), decryptData.key.buffer, decryptData.iv.buffer).catch(err => {\n          hls.trigger(Events.ERROR, {\n            type: ErrorTypes.MEDIA_ERROR,\n            details: ErrorDetails.FRAG_DECRYPT_ERROR,\n            fatal: false,\n            error: err,\n            reason: err.message,\n            frag\n          });\n          throw err;\n        }).then(decryptedData => {\n          const endTime = self.performance.now();\n          hls.trigger(Events.FRAG_DECRYPTED, {\n            frag,\n            payload: decryptedData,\n            stats: {\n              tstart: startTime,\n              tdecrypt: endTime\n            }\n          });\n          data.payload = decryptedData;\n          return this.completeInitSegmentLoad(data);\n        });\n      }\n      return this.completeInitSegmentLoad(data);\n    }).catch(reason => {\n      if (this.state === State.STOPPED || this.state === State.ERROR) {\n        return;\n      }\n      this.warn(reason);\n      this.resetFragmentLoading(frag);\n    });\n  }\n  completeInitSegmentLoad(data) {\n    const {\n      levels\n    } = this;\n    if (!levels) {\n      throw new Error('init load aborted, missing levels');\n    }\n    const stats = data.frag.stats;\n    this.state = State.IDLE;\n    data.frag.data = new Uint8Array(data.payload);\n    stats.parsing.start = stats.buffering.start = self.performance.now();\n    stats.parsing.end = stats.buffering.end = self.performance.now();\n    this.tick();\n  }\n  fragContextChanged(frag) {\n    const {\n      fragCurrent\n    } = this;\n    return !frag || !fragCurrent || frag.sn !== fragCurrent.sn || frag.level !== fragCurrent.level;\n  }\n  fragBufferedComplete(frag, part) {\n    var _frag$startPTS, _frag$endPTS, _this$fragCurrent, _this$fragPrevious;\n    const media = this.mediaBuffer ? this.mediaBuffer : this.media;\n    this.log(`Buffered ${frag.type} sn: ${frag.sn}${part ? ' part: ' + part.index : ''} of ${this.playlistType === PlaylistLevelType.MAIN ? 'level' : 'track'} ${frag.level} (frag:[${((_frag$startPTS = frag.startPTS) != null ? _frag$startPTS : NaN).toFixed(3)}-${((_frag$endPTS = frag.endPTS) != null ? _frag$endPTS : NaN).toFixed(3)}] > buffer:${media ? TimeRanges.toString(BufferHelper.getBuffered(media)) : '(detached)'})`);\n    if (frag.sn !== 'initSegment') {\n      var _this$levels;\n      if (frag.type !== PlaylistLevelType.SUBTITLE) {\n        const el = frag.elementaryStreams;\n        if (!Object.keys(el).some(type => !!el[type])) {\n          // empty segment\n          this.state = State.IDLE;\n          return;\n        }\n      }\n      const level = (_this$levels = this.levels) == null ? void 0 : _this$levels[frag.level];\n      if (level != null && level.fragmentError) {\n        this.log(`Resetting level fragment error count of ${level.fragmentError} on frag buffered`);\n        level.fragmentError = 0;\n      }\n    }\n    this.state = State.IDLE;\n    if (!media) {\n      return;\n    }\n    if (!this.loadedmetadata && frag.type == PlaylistLevelType.MAIN && media.buffered.length && ((_this$fragCurrent = this.fragCurrent) == null ? void 0 : _this$fragCurrent.sn) === ((_this$fragPrevious = this.fragPrevious) == null ? void 0 : _this$fragPrevious.sn)) {\n      this.loadedmetadata = true;\n      this.seekToStartPos();\n    }\n    this.tick();\n  }\n  seekToStartPos() {}\n  _handleFragmentLoadComplete(fragLoadedEndData) {\n    const {\n      transmuxer\n    } = this;\n    if (!transmuxer) {\n      return;\n    }\n    const {\n      frag,\n      part,\n      partsLoaded\n    } = fragLoadedEndData;\n    // If we did not load parts, or loaded all parts, we have complete (not partial) fragment data\n    const complete = !partsLoaded || partsLoaded.length === 0 || partsLoaded.some(fragLoaded => !fragLoaded);\n    const chunkMeta = new ChunkMetadata(frag.level, frag.sn, frag.stats.chunkCount + 1, 0, part ? part.index : -1, !complete);\n    transmuxer.flush(chunkMeta);\n  }\n\n  // eslint-disable-next-line @typescript-eslint/no-unused-vars\n  _handleFragmentLoadProgress(frag) {}\n  _doFragLoad(frag, level, targetBufferTime = null, progressCallback) {\n    var _frag$decryptdata;\n    const details = level == null ? void 0 : level.details;\n    if (!this.levels || !details) {\n      throw new Error(`frag load aborted, missing level${details ? '' : ' detail'}s`);\n    }\n    let keyLoadingPromise = null;\n    if (frag.encrypted && !((_frag$decryptdata = frag.decryptdata) != null && _frag$decryptdata.key)) {\n      this.log(`Loading key for ${frag.sn} of [${details.startSN}-${details.endSN}], ${this.logPrefix === '[stream-controller]' ? 'level' : 'track'} ${frag.level}`);\n      this.state = State.KEY_LOADING;\n      this.fragCurrent = frag;\n      keyLoadingPromise = this.keyLoader.load(frag).then(keyLoadedData => {\n        if (!this.fragContextChanged(keyLoadedData.frag)) {\n          this.hls.trigger(Events.KEY_LOADED, keyLoadedData);\n          if (this.state === State.KEY_LOADING) {\n            this.state = State.IDLE;\n          }\n          return keyLoadedData;\n        }\n      });\n      this.hls.trigger(Events.KEY_LOADING, {\n        frag\n      });\n      if (this.fragCurrent === null) {\n        keyLoadingPromise = Promise.reject(new Error(`frag load aborted, context changed in KEY_LOADING`));\n      }\n    } else if (!frag.encrypted && details.encryptedFragments.length) {\n      this.keyLoader.loadClear(frag, details.encryptedFragments);\n    }\n    targetBufferTime = Math.max(frag.start, targetBufferTime || 0);\n    if (this.config.lowLatencyMode && frag.sn !== 'initSegment') {\n      const partList = details.partList;\n      if (partList && progressCallback) {\n        if (targetBufferTime > frag.end && details.fragmentHint) {\n          frag = details.fragmentHint;\n        }\n        const partIndex = this.getNextPart(partList, frag, targetBufferTime);\n        if (partIndex > -1) {\n          const part = partList[partIndex];\n          this.log(`Loading part sn: ${frag.sn} p: ${part.index} cc: ${frag.cc} of playlist [${details.startSN}-${details.endSN}] parts [0-${partIndex}-${partList.length - 1}] ${this.logPrefix === '[stream-controller]' ? 'level' : 'track'}: ${frag.level}, target: ${parseFloat(targetBufferTime.toFixed(3))}`);\n          this.nextLoadPosition = part.start + part.duration;\n          this.state = State.FRAG_LOADING;\n          let _result;\n          if (keyLoadingPromise) {\n            _result = keyLoadingPromise.then(keyLoadedData => {\n              if (!keyLoadedData || this.fragContextChanged(keyLoadedData.frag)) {\n                return null;\n              }\n              return this.doFragPartsLoad(frag, part, level, progressCallback);\n            }).catch(error => this.handleFragLoadError(error));\n          } else {\n            _result = this.doFragPartsLoad(frag, part, level, progressCallback).catch(error => this.handleFragLoadError(error));\n          }\n          this.hls.trigger(Events.FRAG_LOADING, {\n            frag,\n            part,\n            targetBufferTime\n          });\n          if (this.fragCurrent === null) {\n            return Promise.reject(new Error(`frag load aborted, context changed in FRAG_LOADING parts`));\n          }\n          return _result;\n        } else if (!frag.url || this.loadedEndOfParts(partList, targetBufferTime)) {\n          // Fragment hint has no parts\n          return Promise.resolve(null);\n        }\n      }\n    }\n    this.log(`Loading fragment ${frag.sn} cc: ${frag.cc} ${details ? 'of [' + details.startSN + '-' + details.endSN + '] ' : ''}${this.logPrefix === '[stream-controller]' ? 'level' : 'track'}: ${frag.level}, target: ${parseFloat(targetBufferTime.toFixed(3))}`);\n    // Don't update nextLoadPosition for fragments which are not buffered\n    if (isFiniteNumber(frag.sn) && !this.bitrateTest) {\n      this.nextLoadPosition = frag.start + frag.duration;\n    }\n    this.state = State.FRAG_LOADING;\n\n    // Load key before streaming fragment data\n    const dataOnProgress = this.config.progressive;\n    let result;\n    if (dataOnProgress && keyLoadingPromise) {\n      result = keyLoadingPromise.then(keyLoadedData => {\n        if (!keyLoadedData || this.fragContextChanged(keyLoadedData == null ? void 0 : keyLoadedData.frag)) {\n          return null;\n        }\n        return this.fragmentLoader.load(frag, progressCallback);\n      }).catch(error => this.handleFragLoadError(error));\n    } else {\n      // load unencrypted fragment data with progress event,\n      // or handle fragment result after key and fragment are finished loading\n      result = Promise.all([this.fragmentLoader.load(frag, dataOnProgress ? progressCallback : undefined), keyLoadingPromise]).then(([fragLoadedData]) => {\n        if (!dataOnProgress && fragLoadedData && progressCallback) {\n          progressCallback(fragLoadedData);\n        }\n        return fragLoadedData;\n      }).catch(error => this.handleFragLoadError(error));\n    }\n    this.hls.trigger(Events.FRAG_LOADING, {\n      frag,\n      targetBufferTime\n    });\n    if (this.fragCurrent === null) {\n      return Promise.reject(new Error(`frag load aborted, context changed in FRAG_LOADING`));\n    }\n    return result;\n  }\n  doFragPartsLoad(frag, fromPart, level, progressCallback) {\n    return new Promise((resolve, reject) => {\n      var _level$details;\n      const partsLoaded = [];\n      const initialPartList = (_level$details = level.details) == null ? void 0 : _level$details.partList;\n      const loadPart = part => {\n        this.fragmentLoader.loadPart(frag, part, progressCallback).then(partLoadedData => {\n          partsLoaded[part.index] = partLoadedData;\n          const loadedPart = partLoadedData.part;\n          this.hls.trigger(Events.FRAG_LOADED, partLoadedData);\n          const nextPart = getPartWith(level, frag.sn, part.index + 1) || findPart(initialPartList, frag.sn, part.index + 1);\n          if (nextPart) {\n            loadPart(nextPart);\n          } else {\n            return resolve({\n              frag,\n              part: loadedPart,\n              partsLoaded\n            });\n          }\n        }).catch(reject);\n      };\n      loadPart(fromPart);\n    });\n  }\n  handleFragLoadError(error) {\n    if ('data' in error) {\n      const data = error.data;\n      if (error.data && data.details === ErrorDetails.INTERNAL_ABORTED) {\n        this.handleFragLoadAborted(data.frag, data.part);\n      } else {\n        this.hls.trigger(Events.ERROR, data);\n      }\n    } else {\n      this.hls.trigger(Events.ERROR, {\n        type: ErrorTypes.OTHER_ERROR,\n        details: ErrorDetails.INTERNAL_EXCEPTION,\n        err: error,\n        error,\n        fatal: true\n      });\n    }\n    return null;\n  }\n  _handleTransmuxerFlush(chunkMeta) {\n    const context = this.getCurrentContext(chunkMeta);\n    if (!context || this.state !== State.PARSING) {\n      if (!this.fragCurrent && this.state !== State.STOPPED && this.state !== State.ERROR) {\n        this.state = State.IDLE;\n      }\n      return;\n    }\n    const {\n      frag,\n      part,\n      level\n    } = context;\n    const now = self.performance.now();\n    frag.stats.parsing.end = now;\n    if (part) {\n      part.stats.parsing.end = now;\n    }\n    this.updateLevelTiming(frag, part, level, chunkMeta.partial);\n  }\n  getCurrentContext(chunkMeta) {\n    const {\n      levels,\n      fragCurrent\n    } = this;\n    const {\n      level: levelIndex,\n      sn,\n      part: partIndex\n    } = chunkMeta;\n    if (!(levels != null && levels[levelIndex])) {\n      this.warn(`Levels object was unset while buffering fragment ${sn} of level ${levelIndex}. The current chunk will not be buffered.`);\n      return null;\n    }\n    const level = levels[levelIndex];\n    const part = partIndex > -1 ? getPartWith(level, sn, partIndex) : null;\n    const frag = part ? part.fragment : getFragmentWithSN(level, sn, fragCurrent);\n    if (!frag) {\n      return null;\n    }\n    if (fragCurrent && fragCurrent !== frag) {\n      frag.stats = fragCurrent.stats;\n    }\n    return {\n      frag,\n      part,\n      level\n    };\n  }\n  bufferFragmentData(data, frag, part, chunkMeta, noBacktracking) {\n    var _buffer;\n    if (!data || this.state !== State.PARSING) {\n      return;\n    }\n    const {\n      data1,\n      data2\n    } = data;\n    let buffer = data1;\n    if (data1 && data2) {\n      // Combine the moof + mdat so that we buffer with a single append\n      buffer = appendUint8Array(data1, data2);\n    }\n    if (!((_buffer = buffer) != null && _buffer.length)) {\n      return;\n    }\n    const segment = {\n      type: data.type,\n      frag,\n      part,\n      chunkMeta,\n      parent: frag.type,\n      data: buffer\n    };\n    this.hls.trigger(Events.BUFFER_APPENDING, segment);\n    if (data.dropped && data.independent && !part) {\n      if (noBacktracking) {\n        return;\n      }\n      // Clear buffer so that we reload previous segments sequentially if required\n      this.flushBufferGap(frag);\n    }\n  }\n  flushBufferGap(frag) {\n    const media = this.media;\n    if (!media) {\n      return;\n    }\n    // If currentTime is not buffered, clear the back buffer so that we can backtrack as much as needed\n    if (!BufferHelper.isBuffered(media, media.currentTime)) {\n      this.flushMainBuffer(0, frag.start);\n      return;\n    }\n    // Remove back-buffer without interrupting playback to allow back tracking\n    const currentTime = media.currentTime;\n    const bufferInfo = BufferHelper.bufferInfo(media, currentTime, 0);\n    const fragDuration = frag.duration;\n    const segmentFraction = Math.min(this.config.maxFragLookUpTolerance * 2, fragDuration * 0.25);\n    const start = Math.max(Math.min(frag.start - segmentFraction, bufferInfo.end - segmentFraction), currentTime + segmentFraction);\n    if (frag.start - start > segmentFraction) {\n      this.flushMainBuffer(start, frag.start);\n    }\n  }\n  getFwdBufferInfo(bufferable, type) {\n    const pos = this.getLoadPosition();\n    if (!isFiniteNumber(pos)) {\n      return null;\n    }\n    return this.getFwdBufferInfoAtPos(bufferable, pos, type);\n  }\n  getFwdBufferInfoAtPos(bufferable, pos, type) {\n    const {\n      config: {\n        maxBufferHole\n      }\n    } = this;\n    const bufferInfo = BufferHelper.bufferInfo(bufferable, pos, maxBufferHole);\n    // Workaround flaw in getting forward buffer when maxBufferHole is smaller than gap at current pos\n    if (bufferInfo.len === 0 && bufferInfo.nextStart !== undefined) {\n      const bufferedFragAtPos = this.fragmentTracker.getBufferedFrag(pos, type);\n      if (bufferedFragAtPos && bufferInfo.nextStart < bufferedFragAtPos.end) {\n        return BufferHelper.bufferInfo(bufferable, pos, Math.max(bufferInfo.nextStart, maxBufferHole));\n      }\n    }\n    return bufferInfo;\n  }\n  getMaxBufferLength(levelBitrate) {\n    const {\n      config\n    } = this;\n    let maxBufLen;\n    if (levelBitrate) {\n      maxBufLen = Math.max(8 * config.maxBufferSize / levelBitrate, config.maxBufferLength);\n    } else {\n      maxBufLen = config.maxBufferLength;\n    }\n    return Math.min(maxBufLen, config.maxMaxBufferLength);\n  }\n  reduceMaxBufferLength(threshold, fragDuration) {\n    const config = this.config;\n    const minLength = Math.max(Math.min(threshold - fragDuration, config.maxBufferLength), fragDuration);\n    const reducedLength = Math.max(threshold - fragDuration * 3, config.maxMaxBufferLength / 2, minLength);\n    if (reducedLength >= minLength) {\n      // reduce max buffer length as it might be too high. we do this to avoid loop flushing ...\n      config.maxMaxBufferLength = reducedLength;\n      this.warn(`Reduce max buffer length to ${reducedLength}s`);\n      return true;\n    }\n    return false;\n  }\n  getAppendedFrag(position, playlistType = PlaylistLevelType.MAIN) {\n    const fragOrPart = this.fragmentTracker.getAppendedFrag(position, PlaylistLevelType.MAIN);\n    if (fragOrPart && 'fragment' in fragOrPart) {\n      return fragOrPart.fragment;\n    }\n    return fragOrPart;\n  }\n  getNextFragment(pos, levelDetails) {\n    const fragments = levelDetails.fragments;\n    const fragLen = fragments.length;\n    if (!fragLen) {\n      return null;\n    }\n\n    // find fragment index, contiguous with end of buffer position\n    const {\n      config\n    } = this;\n    const start = fragments[0].start;\n    let frag;\n    if (levelDetails.live) {\n      const initialLiveManifestSize = config.initialLiveManifestSize;\n      if (fragLen < initialLiveManifestSize) {\n        this.warn(`Not enough fragments to start playback (have: ${fragLen}, need: ${initialLiveManifestSize})`);\n        return null;\n      }\n      // The real fragment start times for a live stream are only known after the PTS range for that level is known.\n      // In order to discover the range, we load the best matching fragment for that level and demux it.\n      // Do not load using live logic if the starting frag is requested - we want to use getFragmentAtPosition() so that\n      // we get the fragment matching that start time\n      if (!levelDetails.PTSKnown && !this.startFragRequested && this.startPosition === -1 || pos < start) {\n        frag = this.getInitialLiveFragment(levelDetails, fragments);\n        this.startPosition = this.nextLoadPosition = frag ? this.hls.liveSyncPosition || frag.start : pos;\n      }\n    } else if (pos <= start) {\n      // VoD playlist: if loadPosition before start of playlist, load first fragment\n      frag = fragments[0];\n    }\n\n    // If we haven't run into any special cases already, just load the fragment most closely matching the requested position\n    if (!frag) {\n      const end = config.lowLatencyMode ? levelDetails.partEnd : levelDetails.fragmentEnd;\n      frag = this.getFragmentAtPosition(pos, end, levelDetails);\n    }\n    return this.mapToInitFragWhenRequired(frag);\n  }\n  isLoopLoading(frag, targetBufferTime) {\n    const trackerState = this.fragmentTracker.getState(frag);\n    return (trackerState === FragmentState.OK || trackerState === FragmentState.PARTIAL && !!frag.gap) && this.nextLoadPosition > targetBufferTime;\n  }\n  getNextFragmentLoopLoading(frag, levelDetails, bufferInfo, playlistType, maxBufLen) {\n    const gapStart = frag.gap;\n    const nextFragment = this.getNextFragment(this.nextLoadPosition, levelDetails);\n    if (nextFragment === null) {\n      return nextFragment;\n    }\n    frag = nextFragment;\n    if (gapStart && frag && !frag.gap && bufferInfo.nextStart) {\n      // Media buffered after GAP tags should not make the next buffer timerange exceed forward buffer length\n      const nextbufferInfo = this.getFwdBufferInfoAtPos(this.mediaBuffer ? this.mediaBuffer : this.media, bufferInfo.nextStart, playlistType);\n      if (nextbufferInfo !== null && bufferInfo.len + nextbufferInfo.len >= maxBufLen) {\n        // Returning here might result in not finding an audio and video candiate to skip to\n        this.log(`buffer full after gaps in \"${playlistType}\" playlist starting at sn: ${frag.sn}`);\n        return null;\n      }\n    }\n    return frag;\n  }\n  mapToInitFragWhenRequired(frag) {\n    // If an initSegment is present, it must be buffered first\n    if (frag != null && frag.initSegment && !(frag != null && frag.initSegment.data) && !this.bitrateTest) {\n      return frag.initSegment;\n    }\n    return frag;\n  }\n  getNextPart(partList, frag, targetBufferTime) {\n    let nextPart = -1;\n    let contiguous = false;\n    let independentAttrOmitted = true;\n    for (let i = 0, len = partList.length; i < len; i++) {\n      const part = partList[i];\n      independentAttrOmitted = independentAttrOmitted && !part.independent;\n      if (nextPart > -1 && targetBufferTime < part.start) {\n        break;\n      }\n      const loaded = part.loaded;\n      if (loaded) {\n        nextPart = -1;\n      } else if ((contiguous || part.independent || independentAttrOmitted) && part.fragment === frag) {\n        nextPart = i;\n      }\n      contiguous = loaded;\n    }\n    return nextPart;\n  }\n  loadedEndOfParts(partList, targetBufferTime) {\n    const lastPart = partList[partList.length - 1];\n    return lastPart && targetBufferTime > lastPart.start && lastPart.loaded;\n  }\n\n  /*\n   This method is used find the best matching first fragment for a live playlist. This fragment is used to calculate the\n   \"sliding\" of the playlist, which is its offset from the start of playback. After sliding we can compute the real\n   start and end times for each fragment in the playlist (after which this method will not need to be called).\n  */\n  getInitialLiveFragment(levelDetails, fragments) {\n    const fragPrevious = this.fragPrevious;\n    let frag = null;\n    if (fragPrevious) {\n      if (levelDetails.hasProgramDateTime) {\n        // Prefer using PDT, because it can be accurate enough to choose the correct fragment without knowing the level sliding\n        this.log(`Live playlist, switching playlist, load frag with same PDT: ${fragPrevious.programDateTime}`);\n        frag = findFragmentByPDT(fragments, fragPrevious.endProgramDateTime, this.config.maxFragLookUpTolerance);\n      }\n      if (!frag) {\n        // SN does not need to be accurate between renditions, but depending on the packaging it may be so.\n        const targetSN = fragPrevious.sn + 1;\n        if (targetSN >= levelDetails.startSN && targetSN <= levelDetails.endSN) {\n          const fragNext = fragments[targetSN - levelDetails.startSN];\n          // Ensure that we're staying within the continuity range, since PTS resets upon a new range\n          if (fragPrevious.cc === fragNext.cc) {\n            frag = fragNext;\n            this.log(`Live playlist, switching playlist, load frag with next SN: ${frag.sn}`);\n          }\n        }\n        // It's important to stay within the continuity range if available; otherwise the fragments in the playlist\n        // will have the wrong start times\n        if (!frag) {\n          frag = findFragWithCC(fragments, fragPrevious.cc);\n          if (frag) {\n            this.log(`Live playlist, switching playlist, load frag with same CC: ${frag.sn}`);\n          }\n        }\n      }\n    } else {\n      // Find a new start fragment when fragPrevious is null\n      const liveStart = this.hls.liveSyncPosition;\n      if (liveStart !== null) {\n        frag = this.getFragmentAtPosition(liveStart, this.bitrateTest ? levelDetails.fragmentEnd : levelDetails.edge, levelDetails);\n      }\n    }\n    return frag;\n  }\n\n  /*\n  This method finds the best matching fragment given the provided position.\n   */\n  getFragmentAtPosition(bufferEnd, end, levelDetails) {\n    const {\n      config\n    } = this;\n    let {\n      fragPrevious\n    } = this;\n    let {\n      fragments,\n      endSN\n    } = levelDetails;\n    const {\n      fragmentHint\n    } = levelDetails;\n    const {\n      maxFragLookUpTolerance\n    } = config;\n    const partList = levelDetails.partList;\n    const loadingParts = !!(config.lowLatencyMode && partList != null && partList.length && fragmentHint);\n    if (loadingParts && fragmentHint && !this.bitrateTest) {\n      // Include incomplete fragment with parts at end\n      fragments = fragments.concat(fragmentHint);\n      endSN = fragmentHint.sn;\n    }\n    let frag;\n    if (bufferEnd < end) {\n      const lookupTolerance = bufferEnd > end - maxFragLookUpTolerance ? 0 : maxFragLookUpTolerance;\n      // Remove the tolerance if it would put the bufferEnd past the actual end of stream\n      // Uses buffer and sequence number to calculate switch segment (required if using EXT-X-DISCONTINUITY-SEQUENCE)\n      frag = findFragmentByPTS(fragPrevious, fragments, bufferEnd, lookupTolerance);\n    } else {\n      // reach end of playlist\n      frag = fragments[fragments.length - 1];\n    }\n    if (frag) {\n      const curSNIdx = frag.sn - levelDetails.startSN;\n      // Move fragPrevious forward to support forcing the next fragment to load\n      // when the buffer catches up to a previously buffered range.\n      const fragState = this.fragmentTracker.getState(frag);\n      if (fragState === FragmentState.OK || fragState === FragmentState.PARTIAL && frag.gap) {\n        fragPrevious = frag;\n      }\n      if (fragPrevious && frag.sn === fragPrevious.sn && (!loadingParts || partList[0].fragment.sn > frag.sn)) {\n        // Force the next fragment to load if the previous one was already selected. This can occasionally happen with\n        // non-uniform fragment durations\n        const sameLevel = fragPrevious && frag.level === fragPrevious.level;\n        if (sameLevel) {\n          const nextFrag = fragments[curSNIdx + 1];\n          if (frag.sn < endSN && this.fragmentTracker.getState(nextFrag) !== FragmentState.OK) {\n            frag = nextFrag;\n          } else {\n            frag = null;\n          }\n        }\n      }\n    }\n    return frag;\n  }\n  synchronizeToLiveEdge(levelDetails) {\n    const {\n      config,\n      media\n    } = this;\n    if (!media) {\n      return;\n    }\n    const liveSyncPosition = this.hls.liveSyncPosition;\n    const currentTime = media.currentTime;\n    const start = levelDetails.fragments[0].start;\n    const end = levelDetails.edge;\n    const withinSlidingWindow = currentTime >= start - config.maxFragLookUpTolerance && currentTime <= end;\n    // Continue if we can seek forward to sync position or if current time is outside of sliding window\n    if (liveSyncPosition !== null && media.duration > liveSyncPosition && (currentTime < liveSyncPosition || !withinSlidingWindow)) {\n      // Continue if buffer is starving or if current time is behind max latency\n      const maxLatency = config.liveMaxLatencyDuration !== undefined ? config.liveMaxLatencyDuration : config.liveMaxLatencyDurationCount * levelDetails.targetduration;\n      if (!withinSlidingWindow && media.readyState < 4 || currentTime < end - maxLatency) {\n        if (!this.loadedmetadata) {\n          this.nextLoadPosition = liveSyncPosition;\n        }\n        // Only seek if ready and there is not a significant forward buffer available for playback\n        if (media.readyState) {\n          this.warn(`Playback: ${currentTime.toFixed(3)} is located too far from the end of live sliding playlist: ${end}, reset currentTime to : ${liveSyncPosition.toFixed(3)}`);\n          media.currentTime = liveSyncPosition;\n        }\n      }\n    }\n  }\n  alignPlaylists(details, previousDetails, switchDetails) {\n    // FIXME: If not for `shouldAlignOnDiscontinuities` requiring fragPrevious.cc,\n    //  this could all go in level-helper mergeDetails()\n    const length = details.fragments.length;\n    if (!length) {\n      this.warn(`No fragments in live playlist`);\n      return 0;\n    }\n    const slidingStart = details.fragments[0].start;\n    const firstLevelLoad = !previousDetails;\n    const aligned = details.alignedSliding && isFiniteNumber(slidingStart);\n    if (firstLevelLoad || !aligned && !slidingStart) {\n      const {\n        fragPrevious\n      } = this;\n      alignStream(fragPrevious, switchDetails, details);\n      const alignedSlidingStart = details.fragments[0].start;\n      this.log(`Live playlist sliding: ${alignedSlidingStart.toFixed(2)} start-sn: ${previousDetails ? previousDetails.startSN : 'na'}->${details.startSN} prev-sn: ${fragPrevious ? fragPrevious.sn : 'na'} fragments: ${length}`);\n      return alignedSlidingStart;\n    }\n    return slidingStart;\n  }\n  waitForCdnTuneIn(details) {\n    // Wait for Low-Latency CDN Tune-in to get an updated playlist\n    const advancePartLimit = 3;\n    return details.live && details.canBlockReload && details.partTarget && details.tuneInGoal > Math.max(details.partHoldBack, details.partTarget * advancePartLimit);\n  }\n  setStartPosition(details, sliding) {\n    // compute start position if set to -1. use it straight away if value is defined\n    let startPosition = this.startPosition;\n    if (startPosition < sliding) {\n      startPosition = -1;\n    }\n    if (startPosition === -1 || this.lastCurrentTime === -1) {\n      // Use Playlist EXT-X-START:TIME-OFFSET when set\n      // Prioritize Multivariant Playlist offset so that main, audio, and subtitle stream-controller start times match\n      const offsetInMultivariantPlaylist = this.startTimeOffset !== null;\n      const startTimeOffset = offsetInMultivariantPlaylist ? this.startTimeOffset : details.startTimeOffset;\n      if (startTimeOffset !== null && isFiniteNumber(startTimeOffset)) {\n        startPosition = sliding + startTimeOffset;\n        if (startTimeOffset < 0) {\n          startPosition += details.totalduration;\n        }\n        startPosition = Math.min(Math.max(sliding, startPosition), sliding + details.totalduration);\n        this.log(`Start time offset ${startTimeOffset} found in ${offsetInMultivariantPlaylist ? 'multivariant' : 'media'} playlist, adjust startPosition to ${startPosition}`);\n        this.startPosition = startPosition;\n      } else if (details.live) {\n        // Leave this.startPosition at -1, so that we can use `getInitialLiveFragment` logic when startPosition has\n        // not been specified via the config or an as an argument to startLoad (#3736).\n        startPosition = this.hls.liveSyncPosition || sliding;\n      } else {\n        this.startPosition = startPosition = 0;\n      }\n      this.lastCurrentTime = startPosition;\n    }\n    this.nextLoadPosition = startPosition;\n  }\n  getLoadPosition() {\n    const {\n      media\n    } = this;\n    // if we have not yet loaded any fragment, start loading from start position\n    let pos = 0;\n    if (this.loadedmetadata && media) {\n      pos = media.currentTime;\n    } else if (this.nextLoadPosition) {\n      pos = this.nextLoadPosition;\n    }\n    return pos;\n  }\n  handleFragLoadAborted(frag, part) {\n    if (this.transmuxer && frag.sn !== 'initSegment' && frag.stats.aborted) {\n      this.warn(`Fragment ${frag.sn}${part ? ' part ' + part.index : ''} of level ${frag.level} was aborted`);\n      this.resetFragmentLoading(frag);\n    }\n  }\n  resetFragmentLoading(frag) {\n    if (!this.fragCurrent || !this.fragContextChanged(frag) && this.state !== State.FRAG_LOADING_WAITING_RETRY) {\n      this.state = State.IDLE;\n    }\n  }\n  onFragmentOrKeyLoadError(filterType, data) {\n    if (data.chunkMeta && !data.frag) {\n      const context = this.getCurrentContext(data.chunkMeta);\n      if (context) {\n        data.frag = context.frag;\n      }\n    }\n    const frag = data.frag;\n    // Handle frag error related to caller's filterType\n    if (!frag || frag.type !== filterType || !this.levels) {\n      return;\n    }\n    if (this.fragContextChanged(frag)) {\n      var _this$fragCurrent2;\n      this.warn(`Frag load error must match current frag to retry ${frag.url} > ${(_this$fragCurrent2 = this.fragCurrent) == null ? void 0 : _this$fragCurrent2.url}`);\n      return;\n    }\n    const gapTagEncountered = data.details === ErrorDetails.FRAG_GAP;\n    if (gapTagEncountered) {\n      this.fragmentTracker.fragBuffered(frag, true);\n    }\n    // keep retrying until the limit will be reached\n    const errorAction = data.errorAction;\n    const {\n      action,\n      retryCount = 0,\n      retryConfig\n    } = errorAction || {};\n    if (errorAction && action === NetworkErrorAction.RetryRequest && retryConfig) {\n      this.resetStartWhenNotLoaded(this.levelLastLoaded);\n      const delay = getRetryDelay(retryConfig, retryCount);\n      this.warn(`Fragment ${frag.sn} of ${filterType} ${frag.level} errored with ${data.details}, retrying loading ${retryCount + 1}/${retryConfig.maxNumRetry} in ${delay}ms`);\n      errorAction.resolved = true;\n      this.retryDate = self.performance.now() + delay;\n      this.state = State.FRAG_LOADING_WAITING_RETRY;\n    } else if (retryConfig && errorAction) {\n      this.resetFragmentErrors(filterType);\n      if (retryCount < retryConfig.maxNumRetry) {\n        // Network retry is skipped when level switch is preferred\n        if (!gapTagEncountered && action !== NetworkErrorAction.RemoveAlternatePermanently) {\n          errorAction.resolved = true;\n        }\n      } else {\n        logger.warn(`${data.details} reached or exceeded max retry (${retryCount})`);\n        return;\n      }\n    } else if ((errorAction == null ? void 0 : errorAction.action) === NetworkErrorAction.SendAlternateToPenaltyBox) {\n      this.state = State.WAITING_LEVEL;\n    } else {\n      this.state = State.ERROR;\n    }\n    // Perform next async tick sooner to speed up error action resolution\n    this.tickImmediate();\n  }\n  reduceLengthAndFlushBuffer(data) {\n    // if in appending state\n    if (this.state === State.PARSING || this.state === State.PARSED) {\n      const frag = data.frag;\n      const playlistType = data.parent;\n      const bufferedInfo = this.getFwdBufferInfo(this.mediaBuffer, playlistType);\n      // 0.5 : tolerance needed as some browsers stalls playback before reaching buffered end\n      // reduce max buf len if current position is buffered\n      const buffered = bufferedInfo && bufferedInfo.len > 0.5;\n      if (buffered) {\n        this.reduceMaxBufferLength(bufferedInfo.len, (frag == null ? void 0 : frag.duration) || 10);\n      }\n      const flushBuffer = !buffered;\n      if (flushBuffer) {\n        // current position is not buffered, but browser is still complaining about buffer full error\n        // this happens on IE/Edge, refer to https://github.com/video-dev/hls.js/pull/708\n        // in that case flush the whole audio buffer to recover\n        this.warn(`Buffer full error while media.currentTime is not buffered, flush ${playlistType} buffer`);\n      }\n      if (frag) {\n        this.fragmentTracker.removeFragment(frag);\n        this.nextLoadPosition = frag.start;\n      }\n      this.resetLoadingState();\n      return flushBuffer;\n    }\n    return false;\n  }\n  resetFragmentErrors(filterType) {\n    if (filterType === PlaylistLevelType.AUDIO) {\n      // Reset current fragment since audio track audio is essential and may not have a fail-over track\n      this.fragCurrent = null;\n    }\n    // Fragment errors that result in a level switch or redundant fail-over\n    // should reset the stream controller state to idle\n    if (!this.loadedmetadata) {\n      this.startFragRequested = false;\n    }\n    if (this.state !== State.STOPPED) {\n      this.state = State.IDLE;\n    }\n  }\n  afterBufferFlushed(media, bufferType, playlistType) {\n    if (!media) {\n      return;\n    }\n    // After successful buffer flushing, filter flushed fragments from bufferedFrags use mediaBuffered instead of media\n    // (so that we will check against video.buffered ranges in case of alt audio track)\n    const bufferedTimeRanges = BufferHelper.getBuffered(media);\n    this.fragmentTracker.detectEvictedFragments(bufferType, bufferedTimeRanges, playlistType);\n    if (this.state === State.ENDED) {\n      this.resetLoadingState();\n    }\n  }\n  resetLoadingState() {\n    this.log('Reset loading state');\n    this.fragCurrent = null;\n    this.fragPrevious = null;\n    this.state = State.IDLE;\n  }\n  resetStartWhenNotLoaded(level) {\n    // if loadedmetadata is not set, it means that first frag request failed\n    // in that case, reset startFragRequested flag\n    if (!this.loadedmetadata) {\n      this.startFragRequested = false;\n      const details = level ? level.details : null;\n      if (details != null && details.live) {\n        // Update the start position and return to IDLE to recover live start\n        this.startPosition = -1;\n        this.setStartPosition(details, 0);\n        this.resetLoadingState();\n      } else {\n        this.nextLoadPosition = this.startPosition;\n      }\n    }\n  }\n  resetWhenMissingContext(chunkMeta) {\n    this.warn(`The loading context changed while buffering fragment ${chunkMeta.sn} of level ${chunkMeta.level}. This chunk will not be buffered.`);\n    this.removeUnbufferedFrags();\n    this.resetStartWhenNotLoaded(this.levelLastLoaded);\n    this.resetLoadingState();\n  }\n  removeUnbufferedFrags(start = 0) {\n    this.fragmentTracker.removeFragmentsInRange(start, Infinity, this.playlistType, false, true);\n  }\n  updateLevelTiming(frag, part, level, partial) {\n    var _this$transmuxer;\n    const details = level.details;\n    if (!details) {\n      this.warn('level.details undefined');\n      return;\n    }\n    const parsed = Object.keys(frag.elementaryStreams).reduce((result, type) => {\n      const info = frag.elementaryStreams[type];\n      if (info) {\n        const parsedDuration = info.endPTS - info.startPTS;\n        if (parsedDuration <= 0) {\n          // Destroy the transmuxer after it's next time offset failed to advance because duration was <= 0.\n          // The new transmuxer will be configured with a time offset matching the next fragment start,\n          // preventing the timeline from shifting.\n          this.warn(`Could not parse fragment ${frag.sn} ${type} duration reliably (${parsedDuration})`);\n          return result || false;\n        }\n        const drift = partial ? 0 : updateFragPTSDTS(details, frag, info.startPTS, info.endPTS, info.startDTS, info.endDTS);\n        this.hls.trigger(Events.LEVEL_PTS_UPDATED, {\n          details,\n          level,\n          drift,\n          type,\n          frag,\n          start: info.startPTS,\n          end: info.endPTS\n        });\n        return true;\n      }\n      return result;\n    }, false);\n    if (!parsed && ((_this$transmuxer = this.transmuxer) == null ? void 0 : _this$transmuxer.error) === null) {\n      const error = new Error(`Found no media in fragment ${frag.sn} of level ${frag.level} resetting transmuxer to fallback to playlist timing`);\n      if (level.fragmentError === 0) {\n        // Mark and track the odd empty segment as a gap to avoid reloading\n        level.fragmentError++;\n        frag.gap = true;\n        this.fragmentTracker.removeFragment(frag);\n        this.fragmentTracker.fragBuffered(frag, true);\n      }\n      this.warn(error.message);\n      this.hls.trigger(Events.ERROR, {\n        type: ErrorTypes.MEDIA_ERROR,\n        details: ErrorDetails.FRAG_PARSING_ERROR,\n        fatal: false,\n        error,\n        frag,\n        reason: `Found no media in msn ${frag.sn} of level \"${level.url}\"`\n      });\n      if (!this.hls) {\n        return;\n      }\n      this.resetTransmuxer();\n      // For this error fallthrough. Marking parsed will allow advancing to next fragment.\n    }\n    this.state = State.PARSED;\n    this.hls.trigger(Events.FRAG_PARSED, {\n      frag,\n      part\n    });\n  }\n  resetTransmuxer() {\n    if (this.transmuxer) {\n      this.transmuxer.destroy();\n      this.transmuxer = null;\n    }\n  }\n  recoverWorkerError(data) {\n    if (data.event === 'demuxerWorker') {\n      this.fragmentTracker.removeAllFragments();\n      this.resetTransmuxer();\n      this.resetStartWhenNotLoaded(this.levelLastLoaded);\n      this.resetLoadingState();\n    }\n  }\n  set state(nextState) {\n    const previousState = this._state;\n    if (previousState !== nextState) {\n      this._state = nextState;\n      this.log(`${previousState}->${nextState}`);\n    }\n  }\n  get state() {\n    return this._state;\n  }\n}\n\nclass ChunkCache {\n  constructor() {\n    this.chunks = [];\n    this.dataLength = 0;\n  }\n  push(chunk) {\n    this.chunks.push(chunk);\n    this.dataLength += chunk.length;\n  }\n  flush() {\n    const {\n      chunks,\n      dataLength\n    } = this;\n    let result;\n    if (!chunks.length) {\n      return new Uint8Array(0);\n    } else if (chunks.length === 1) {\n      result = chunks[0];\n    } else {\n      result = concatUint8Arrays(chunks, dataLength);\n    }\n    this.reset();\n    return result;\n  }\n  reset() {\n    this.chunks.length = 0;\n    this.dataLength = 0;\n  }\n}\nfunction concatUint8Arrays(chunks, dataLength) {\n  const result = new Uint8Array(dataLength);\n  let offset = 0;\n  for (let i = 0; i < chunks.length; i++) {\n    const chunk = chunks[i];\n    result.set(chunk, offset);\n    offset += chunk.length;\n  }\n  return result;\n}\n\n// ensure the worker ends up in the bundle\n// If the worker should not be included this gets aliased to empty.js\nfunction hasUMDWorker() {\n  return typeof __HLS_WORKER_BUNDLE__ === 'function';\n}\nfunction injectWorker() {\n  const blob = new self.Blob([`var exports={};var module={exports:exports};function define(f){f()};define.amd=true;(${__HLS_WORKER_BUNDLE__.toString()})(true);`], {\n    type: 'text/javascript'\n  });\n  const objectURL = self.URL.createObjectURL(blob);\n  const worker = new self.Worker(objectURL);\n  return {\n    worker,\n    objectURL\n  };\n}\nfunction loadWorker(path) {\n  const scriptURL = new self.URL(path, self.location.href).href;\n  const worker = new self.Worker(scriptURL);\n  return {\n    worker,\n    scriptURL\n  };\n}\n\nfunction dummyTrack(type = '', inputTimeScale = 90000) {\n  return {\n    type,\n    id: -1,\n    pid: -1,\n    inputTimeScale,\n    sequenceNumber: -1,\n    samples: [],\n    dropped: 0\n  };\n}\n\nclass BaseAudioDemuxer {\n  constructor() {\n    this._audioTrack = void 0;\n    this._id3Track = void 0;\n    this.frameIndex = 0;\n    this.cachedData = null;\n    this.basePTS = null;\n    this.initPTS = null;\n    this.lastPTS = null;\n  }\n  resetInitSegment(initSegment, audioCodec, videoCodec, trackDuration) {\n    this._id3Track = {\n      type: 'id3',\n      id: 3,\n      pid: -1,\n      inputTimeScale: 90000,\n      sequenceNumber: 0,\n      samples: [],\n      dropped: 0\n    };\n  }\n  resetTimeStamp(deaultTimestamp) {\n    this.initPTS = deaultTimestamp;\n    this.resetContiguity();\n  }\n  resetContiguity() {\n    this.basePTS = null;\n    this.lastPTS = null;\n    this.frameIndex = 0;\n  }\n  canParse(data, offset) {\n    return false;\n  }\n  appendFrame(track, data, offset) {}\n\n  // feed incoming data to the front of the parsing pipeline\n  demux(data, timeOffset) {\n    if (this.cachedData) {\n      data = appendUint8Array(this.cachedData, data);\n      this.cachedData = null;\n    }\n    let id3Data = getID3Data(data, 0);\n    let offset = id3Data ? id3Data.length : 0;\n    let lastDataIndex;\n    const track = this._audioTrack;\n    const id3Track = this._id3Track;\n    const timestamp = id3Data ? getTimeStamp(id3Data) : undefined;\n    const length = data.length;\n    if (this.basePTS === null || this.frameIndex === 0 && isFiniteNumber(timestamp)) {\n      this.basePTS = initPTSFn(timestamp, timeOffset, this.initPTS);\n      this.lastPTS = this.basePTS;\n    }\n    if (this.lastPTS === null) {\n      this.lastPTS = this.basePTS;\n    }\n\n    // more expressive than alternative: id3Data?.length\n    if (id3Data && id3Data.length > 0) {\n      id3Track.samples.push({\n        pts: this.lastPTS,\n        dts: this.lastPTS,\n        data: id3Data,\n        type: MetadataSchema.audioId3,\n        duration: Number.POSITIVE_INFINITY\n      });\n    }\n    while (offset < length) {\n      if (this.canParse(data, offset)) {\n        const frame = this.appendFrame(track, data, offset);\n        if (frame) {\n          this.frameIndex++;\n          this.lastPTS = frame.sample.pts;\n          offset += frame.length;\n          lastDataIndex = offset;\n        } else {\n          offset = length;\n        }\n      } else if (canParse$2(data, offset)) {\n        // after a ID3.canParse, a call to ID3.getID3Data *should* always returns some data\n        id3Data = getID3Data(data, offset);\n        id3Track.samples.push({\n          pts: this.lastPTS,\n          dts: this.lastPTS,\n          data: id3Data,\n          type: MetadataSchema.audioId3,\n          duration: Number.POSITIVE_INFINITY\n        });\n        offset += id3Data.length;\n        lastDataIndex = offset;\n      } else {\n        offset++;\n      }\n      if (offset === length && lastDataIndex !== length) {\n        const partialData = sliceUint8(data, lastDataIndex);\n        if (this.cachedData) {\n          this.cachedData = appendUint8Array(this.cachedData, partialData);\n        } else {\n          this.cachedData = partialData;\n        }\n      }\n    }\n    return {\n      audioTrack: track,\n      videoTrack: dummyTrack(),\n      id3Track,\n      textTrack: dummyTrack()\n    };\n  }\n  demuxSampleAes(data, keyData, timeOffset) {\n    return Promise.reject(new Error(`[${this}] This demuxer does not support Sample-AES decryption`));\n  }\n  flush(timeOffset) {\n    // Parse cache in case of remaining frames.\n    const cachedData = this.cachedData;\n    if (cachedData) {\n      this.cachedData = null;\n      this.demux(cachedData, 0);\n    }\n    return {\n      audioTrack: this._audioTrack,\n      videoTrack: dummyTrack(),\n      id3Track: this._id3Track,\n      textTrack: dummyTrack()\n    };\n  }\n  destroy() {}\n}\n\n/**\n * Initialize PTS\n * <p>\n *    use timestamp unless it is undefined, NaN or Infinity\n * </p>\n */\nconst initPTSFn = (timestamp, timeOffset, initPTS) => {\n  if (isFiniteNumber(timestamp)) {\n    return timestamp * 90;\n  }\n  const init90kHz = initPTS ? initPTS.baseTime * 90000 / initPTS.timescale : 0;\n  return timeOffset * 90000 + init90kHz;\n};\n\n/**\n * ADTS parser helper\n * @link https://wiki.multimedia.cx/index.php?title=ADTS\n */\nfunction getAudioConfig(observer, data, offset, audioCodec) {\n  let adtsObjectType;\n  let adtsExtensionSamplingIndex;\n  let adtsChannelConfig;\n  let config;\n  const userAgent = navigator.userAgent.toLowerCase();\n  const manifestCodec = audioCodec;\n  const adtsSamplingRates = [96000, 88200, 64000, 48000, 44100, 32000, 24000, 22050, 16000, 12000, 11025, 8000, 7350];\n  // byte 2\n  adtsObjectType = ((data[offset + 2] & 0xc0) >>> 6) + 1;\n  const adtsSamplingIndex = (data[offset + 2] & 0x3c) >>> 2;\n  if (adtsSamplingIndex > adtsSamplingRates.length - 1) {\n    const error = new Error(`invalid ADTS sampling index:${adtsSamplingIndex}`);\n    observer.emit(Events.ERROR, Events.ERROR, {\n      type: ErrorTypes.MEDIA_ERROR,\n      details: ErrorDetails.FRAG_PARSING_ERROR,\n      fatal: true,\n      error,\n      reason: error.message\n    });\n    return;\n  }\n  adtsChannelConfig = (data[offset + 2] & 0x01) << 2;\n  // byte 3\n  adtsChannelConfig |= (data[offset + 3] & 0xc0) >>> 6;\n  logger.log(`manifest codec:${audioCodec}, ADTS type:${adtsObjectType}, samplingIndex:${adtsSamplingIndex}`);\n  // firefox: freq less than 24kHz = AAC SBR (HE-AAC)\n  if (/firefox/i.test(userAgent)) {\n    if (adtsSamplingIndex >= 6) {\n      adtsObjectType = 5;\n      config = new Array(4);\n      // HE-AAC uses SBR (Spectral Band Replication) , high frequencies are constructed from low frequencies\n      // there is a factor 2 between frame sample rate and output sample rate\n      // multiply frequency by 2 (see table below, equivalent to substract 3)\n      adtsExtensionSamplingIndex = adtsSamplingIndex - 3;\n    } else {\n      adtsObjectType = 2;\n      config = new Array(2);\n      adtsExtensionSamplingIndex = adtsSamplingIndex;\n    }\n    // Android : always use AAC\n  } else if (userAgent.indexOf('android') !== -1) {\n    adtsObjectType = 2;\n    config = new Array(2);\n    adtsExtensionSamplingIndex = adtsSamplingIndex;\n  } else {\n    /*  for other browsers (Chrome/Vivaldi/Opera ...)\n        always force audio type to be HE-AAC SBR, as some browsers do not support audio codec switch properly (like Chrome ...)\n    */\n    adtsObjectType = 5;\n    config = new Array(4);\n    // if (manifest codec is HE-AAC or HE-AACv2) OR (manifest codec not specified AND frequency less than 24kHz)\n    if (audioCodec && (audioCodec.indexOf('mp4a.40.29') !== -1 || audioCodec.indexOf('mp4a.40.5') !== -1) || !audioCodec && adtsSamplingIndex >= 6) {\n      // HE-AAC uses SBR (Spectral Band Replication) , high frequencies are constructed from low frequencies\n      // there is a factor 2 between frame sample rate and output sample rate\n      // multiply frequency by 2 (see table below, equivalent to substract 3)\n      adtsExtensionSamplingIndex = adtsSamplingIndex - 3;\n    } else {\n      // if (manifest codec is AAC) AND (frequency less than 24kHz AND nb channel is 1) OR (manifest codec not specified and mono audio)\n      // Chrome fails to play back with low frequency AAC LC mono when initialized with HE-AAC.  This is not a problem with stereo.\n      if (audioCodec && audioCodec.indexOf('mp4a.40.2') !== -1 && (adtsSamplingIndex >= 6 && adtsChannelConfig === 1 || /vivaldi/i.test(userAgent)) || !audioCodec && adtsChannelConfig === 1) {\n        adtsObjectType = 2;\n        config = new Array(2);\n      }\n      adtsExtensionSamplingIndex = adtsSamplingIndex;\n    }\n  }\n  /* refer to http://wiki.multimedia.cx/index.php?title=MPEG-4_Audio#Audio_Specific_Config\n      ISO 14496-3 (AAC).pdf - Table 1.13 — Syntax of AudioSpecificConfig()\n    Audio Profile / Audio Object Type\n    0: Null\n    1: AAC Main\n    2: AAC LC (Low Complexity)\n    3: AAC SSR (Scalable Sample Rate)\n    4: AAC LTP (Long Term Prediction)\n    5: SBR (Spectral Band Replication)\n    6: AAC Scalable\n   sampling freq\n    0: 96000 Hz\n    1: 88200 Hz\n    2: 64000 Hz\n    3: 48000 Hz\n    4: 44100 Hz\n    5: 32000 Hz\n    6: 24000 Hz\n    7: 22050 Hz\n    8: 16000 Hz\n    9: 12000 Hz\n    10: 11025 Hz\n    11: 8000 Hz\n    12: 7350 Hz\n    13: Reserved\n    14: Reserved\n    15: frequency is written explictly\n    Channel Configurations\n    These are the channel configurations:\n    0: Defined in AOT Specifc Config\n    1: 1 channel: front-center\n    2: 2 channels: front-left, front-right\n  */\n  // audioObjectType = profile => profile, the MPEG-4 Audio Object Type minus 1\n  config[0] = adtsObjectType << 3;\n  // samplingFrequencyIndex\n  config[0] |= (adtsSamplingIndex & 0x0e) >> 1;\n  config[1] |= (adtsSamplingIndex & 0x01) << 7;\n  // channelConfiguration\n  config[1] |= adtsChannelConfig << 3;\n  if (adtsObjectType === 5) {\n    // adtsExtensionSamplingIndex\n    config[1] |= (adtsExtensionSamplingIndex & 0x0e) >> 1;\n    config[2] = (adtsExtensionSamplingIndex & 0x01) << 7;\n    // adtsObjectType (force to 2, chrome is checking that object type is less than 5 ???\n    //    https://chromium.googlesource.com/chromium/src.git/+/master/media/formats/mp4/aac.cc\n    config[2] |= 2 << 2;\n    config[3] = 0;\n  }\n  return {\n    config,\n    samplerate: adtsSamplingRates[adtsSamplingIndex],\n    channelCount: adtsChannelConfig,\n    codec: 'mp4a.40.' + adtsObjectType,\n    manifestCodec\n  };\n}\nfunction isHeaderPattern$1(data, offset) {\n  return data[offset] === 0xff && (data[offset + 1] & 0xf6) === 0xf0;\n}\nfunction getHeaderLength(data, offset) {\n  return data[offset + 1] & 0x01 ? 7 : 9;\n}\nfunction getFullFrameLength(data, offset) {\n  return (data[offset + 3] & 0x03) << 11 | data[offset + 4] << 3 | (data[offset + 5] & 0xe0) >>> 5;\n}\nfunction canGetFrameLength(data, offset) {\n  return offset + 5 < data.length;\n}\nfunction isHeader$1(data, offset) {\n  // Look for ADTS header | 1111 1111 | 1111 X00X | where X can be either 0 or 1\n  // Layer bits (position 14 and 15) in header should be always 0 for ADTS\n  // More info https://wiki.multimedia.cx/index.php?title=ADTS\n  return offset + 1 < data.length && isHeaderPattern$1(data, offset);\n}\nfunction canParse$1(data, offset) {\n  return canGetFrameLength(data, offset) && isHeaderPattern$1(data, offset) && getFullFrameLength(data, offset) <= data.length - offset;\n}\nfunction probe$1(data, offset) {\n  // same as isHeader but we also check that ADTS frame follows last ADTS frame\n  // or end of data is reached\n  if (isHeader$1(data, offset)) {\n    // ADTS header Length\n    const headerLength = getHeaderLength(data, offset);\n    if (offset + headerLength >= data.length) {\n      return false;\n    }\n    // ADTS frame Length\n    const frameLength = getFullFrameLength(data, offset);\n    if (frameLength <= headerLength) {\n      return false;\n    }\n    const newOffset = offset + frameLength;\n    return newOffset === data.length || isHeader$1(data, newOffset);\n  }\n  return false;\n}\nfunction initTrackConfig(track, observer, data, offset, audioCodec) {\n  if (!track.samplerate) {\n    const config = getAudioConfig(observer, data, offset, audioCodec);\n    if (!config) {\n      return;\n    }\n    track.config = config.config;\n    track.samplerate = config.samplerate;\n    track.channelCount = config.channelCount;\n    track.codec = config.codec;\n    track.manifestCodec = config.manifestCodec;\n    logger.log(`parsed codec:${track.codec}, rate:${config.samplerate}, channels:${config.channelCount}`);\n  }\n}\nfunction getFrameDuration(samplerate) {\n  return 1024 * 90000 / samplerate;\n}\nfunction parseFrameHeader(data, offset) {\n  // The protection skip bit tells us if we have 2 bytes of CRC data at the end of the ADTS header\n  const headerLength = getHeaderLength(data, offset);\n  if (offset + headerLength <= data.length) {\n    // retrieve frame size\n    const frameLength = getFullFrameLength(data, offset) - headerLength;\n    if (frameLength > 0) {\n      // logger.log(`AAC frame, offset/length/total/pts:${offset+headerLength}/${frameLength}/${data.byteLength}`);\n      return {\n        headerLength,\n        frameLength\n      };\n    }\n  }\n}\nfunction appendFrame$2(track, data, offset, pts, frameIndex) {\n  const frameDuration = getFrameDuration(track.samplerate);\n  const stamp = pts + frameIndex * frameDuration;\n  const header = parseFrameHeader(data, offset);\n  let unit;\n  if (header) {\n    const {\n      frameLength,\n      headerLength\n    } = header;\n    const _length = headerLength + frameLength;\n    const missing = Math.max(0, offset + _length - data.length);\n    // logger.log(`AAC frame ${frameIndex}, pts:${stamp} length@offset/total: ${frameLength}@${offset+headerLength}/${data.byteLength} missing: ${missing}`);\n    if (missing) {\n      unit = new Uint8Array(_length - headerLength);\n      unit.set(data.subarray(offset + headerLength, data.length), 0);\n    } else {\n      unit = data.subarray(offset + headerLength, offset + _length);\n    }\n    const _sample = {\n      unit,\n      pts: stamp\n    };\n    if (!missing) {\n      track.samples.push(_sample);\n    }\n    return {\n      sample: _sample,\n      length: _length,\n      missing\n    };\n  }\n  // overflow incomplete header\n  const length = data.length - offset;\n  unit = new Uint8Array(length);\n  unit.set(data.subarray(offset, data.length), 0);\n  const sample = {\n    unit,\n    pts: stamp\n  };\n  return {\n    sample,\n    length,\n    missing: -1\n  };\n}\n\n/**\n *  MPEG parser helper\n */\n\nlet chromeVersion$1 = null;\nconst BitratesMap = [32, 64, 96, 128, 160, 192, 224, 256, 288, 320, 352, 384, 416, 448, 32, 48, 56, 64, 80, 96, 112, 128, 160, 192, 224, 256, 320, 384, 32, 40, 48, 56, 64, 80, 96, 112, 128, 160, 192, 224, 256, 320, 32, 48, 56, 64, 80, 96, 112, 128, 144, 160, 176, 192, 224, 256, 8, 16, 24, 32, 40, 48, 56, 64, 80, 96, 112, 128, 144, 160];\nconst SamplingRateMap = [44100, 48000, 32000, 22050, 24000, 16000, 11025, 12000, 8000];\nconst SamplesCoefficients = [\n// MPEG 2.5\n[0,\n// Reserved\n72,\n// Layer3\n144,\n// Layer2\n12 // Layer1\n],\n// Reserved\n[0,\n// Reserved\n0,\n// Layer3\n0,\n// Layer2\n0 // Layer1\n],\n// MPEG 2\n[0,\n// Reserved\n72,\n// Layer3\n144,\n// Layer2\n12 // Layer1\n],\n// MPEG 1\n[0,\n// Reserved\n144,\n// Layer3\n144,\n// Layer2\n12 // Layer1\n]];\nconst BytesInSlot = [0,\n// Reserved\n1,\n// Layer3\n1,\n// Layer2\n4 // Layer1\n];\nfunction appendFrame$1(track, data, offset, pts, frameIndex) {\n  // Using http://www.datavoyage.com/mpgscript/mpeghdr.htm as a reference\n  if (offset + 24 > data.length) {\n    return;\n  }\n  const header = parseHeader(data, offset);\n  if (header && offset + header.frameLength <= data.length) {\n    const frameDuration = header.samplesPerFrame * 90000 / header.sampleRate;\n    const stamp = pts + frameIndex * frameDuration;\n    const sample = {\n      unit: data.subarray(offset, offset + header.frameLength),\n      pts: stamp,\n      dts: stamp\n    };\n    track.config = [];\n    track.channelCount = header.channelCount;\n    track.samplerate = header.sampleRate;\n    track.samples.push(sample);\n    return {\n      sample,\n      length: header.frameLength,\n      missing: 0\n    };\n  }\n}\nfunction parseHeader(data, offset) {\n  const mpegVersion = data[offset + 1] >> 3 & 3;\n  const mpegLayer = data[offset + 1] >> 1 & 3;\n  const bitRateIndex = data[offset + 2] >> 4 & 15;\n  const sampleRateIndex = data[offset + 2] >> 2 & 3;\n  if (mpegVersion !== 1 && bitRateIndex !== 0 && bitRateIndex !== 15 && sampleRateIndex !== 3) {\n    const paddingBit = data[offset + 2] >> 1 & 1;\n    const channelMode = data[offset + 3] >> 6;\n    const columnInBitrates = mpegVersion === 3 ? 3 - mpegLayer : mpegLayer === 3 ? 3 : 4;\n    const bitRate = BitratesMap[columnInBitrates * 14 + bitRateIndex - 1] * 1000;\n    const columnInSampleRates = mpegVersion === 3 ? 0 : mpegVersion === 2 ? 1 : 2;\n    const sampleRate = SamplingRateMap[columnInSampleRates * 3 + sampleRateIndex];\n    const channelCount = channelMode === 3 ? 1 : 2; // If bits of channel mode are `11` then it is a single channel (Mono)\n    const sampleCoefficient = SamplesCoefficients[mpegVersion][mpegLayer];\n    const bytesInSlot = BytesInSlot[mpegLayer];\n    const samplesPerFrame = sampleCoefficient * 8 * bytesInSlot;\n    const frameLength = Math.floor(sampleCoefficient * bitRate / sampleRate + paddingBit) * bytesInSlot;\n    if (chromeVersion$1 === null) {\n      const userAgent = navigator.userAgent || '';\n      const result = userAgent.match(/Chrome\\/(\\d+)/i);\n      chromeVersion$1 = result ? parseInt(result[1]) : 0;\n    }\n    const needChromeFix = !!chromeVersion$1 && chromeVersion$1 <= 87;\n    if (needChromeFix && mpegLayer === 2 && bitRate >= 224000 && channelMode === 0) {\n      // Work around bug in Chromium by setting channelMode to dual-channel (01) instead of stereo (00)\n      data[offset + 3] = data[offset + 3] | 0x80;\n    }\n    return {\n      sampleRate,\n      channelCount,\n      frameLength,\n      samplesPerFrame\n    };\n  }\n}\nfunction isHeaderPattern(data, offset) {\n  return data[offset] === 0xff && (data[offset + 1] & 0xe0) === 0xe0 && (data[offset + 1] & 0x06) !== 0x00;\n}\nfunction isHeader(data, offset) {\n  // Look for MPEG header | 1111 1111 | 111X XYZX | where X can be either 0 or 1 and Y or Z should be 1\n  // Layer bits (position 14 and 15) in header should be always different from 0 (Layer I or Layer II or Layer III)\n  // More info http://www.mp3-tech.org/programmer/frame_header.html\n  return offset + 1 < data.length && isHeaderPattern(data, offset);\n}\nfunction canParse(data, offset) {\n  const headerSize = 4;\n  return isHeaderPattern(data, offset) && headerSize <= data.length - offset;\n}\nfunction probe(data, offset) {\n  // same as isHeader but we also check that MPEG frame follows last MPEG frame\n  // or end of data is reached\n  if (offset + 1 < data.length && isHeaderPattern(data, offset)) {\n    // MPEG header Length\n    const headerLength = 4;\n    // MPEG frame Length\n    const header = parseHeader(data, offset);\n    let frameLength = headerLength;\n    if (header != null && header.frameLength) {\n      frameLength = header.frameLength;\n    }\n    const newOffset = offset + frameLength;\n    return newOffset === data.length || isHeader(data, newOffset);\n  }\n  return false;\n}\n\n/**\n * AAC demuxer\n */\nclass AACDemuxer extends BaseAudioDemuxer {\n  constructor(observer, config) {\n    super();\n    this.observer = void 0;\n    this.config = void 0;\n    this.observer = observer;\n    this.config = config;\n  }\n  resetInitSegment(initSegment, audioCodec, videoCodec, trackDuration) {\n    super.resetInitSegment(initSegment, audioCodec, videoCodec, trackDuration);\n    this._audioTrack = {\n      container: 'audio/adts',\n      type: 'audio',\n      id: 2,\n      pid: -1,\n      sequenceNumber: 0,\n      segmentCodec: 'aac',\n      samples: [],\n      manifestCodec: audioCodec,\n      duration: trackDuration,\n      inputTimeScale: 90000,\n      dropped: 0\n    };\n  }\n\n  // Source for probe info - https://wiki.multimedia.cx/index.php?title=ADTS\n  static probe(data) {\n    if (!data) {\n      return false;\n    }\n\n    // Check for the ADTS sync word\n    // Look for ADTS header | 1111 1111 | 1111 X00X | where X can be either 0 or 1\n    // Layer bits (position 14 and 15) in header should be always 0 for ADTS\n    // More info https://wiki.multimedia.cx/index.php?title=ADTS\n    const id3Data = getID3Data(data, 0);\n    let offset = (id3Data == null ? void 0 : id3Data.length) || 0;\n    if (probe(data, offset)) {\n      return false;\n    }\n    for (let length = data.length; offset < length; offset++) {\n      if (probe$1(data, offset)) {\n        logger.log('ADTS sync word found !');\n        return true;\n      }\n    }\n    return false;\n  }\n  canParse(data, offset) {\n    return canParse$1(data, offset);\n  }\n  appendFrame(track, data, offset) {\n    initTrackConfig(track, this.observer, data, offset, track.manifestCodec);\n    const frame = appendFrame$2(track, data, offset, this.basePTS, this.frameIndex);\n    if (frame && frame.missing === 0) {\n      return frame;\n    }\n  }\n}\n\nconst emsgSchemePattern = /\\/emsg[-/]ID3/i;\nclass MP4Demuxer {\n  constructor(observer, config) {\n    this.remainderData = null;\n    this.timeOffset = 0;\n    this.config = void 0;\n    this.videoTrack = void 0;\n    this.audioTrack = void 0;\n    this.id3Track = void 0;\n    this.txtTrack = void 0;\n    this.config = config;\n  }\n  resetTimeStamp() {}\n  resetInitSegment(initSegment, audioCodec, videoCodec, trackDuration) {\n    const videoTrack = this.videoTrack = dummyTrack('video', 1);\n    const audioTrack = this.audioTrack = dummyTrack('audio', 1);\n    const captionTrack = this.txtTrack = dummyTrack('text', 1);\n    this.id3Track = dummyTrack('id3', 1);\n    this.timeOffset = 0;\n    if (!(initSegment != null && initSegment.byteLength)) {\n      return;\n    }\n    const initData = parseInitSegment(initSegment);\n    if (initData.video) {\n      const {\n        id,\n        timescale,\n        codec\n      } = initData.video;\n      videoTrack.id = id;\n      videoTrack.timescale = captionTrack.timescale = timescale;\n      videoTrack.codec = codec;\n    }\n    if (initData.audio) {\n      const {\n        id,\n        timescale,\n        codec\n      } = initData.audio;\n      audioTrack.id = id;\n      audioTrack.timescale = timescale;\n      audioTrack.codec = codec;\n    }\n    captionTrack.id = RemuxerTrackIdConfig.text;\n    videoTrack.sampleDuration = 0;\n    videoTrack.duration = audioTrack.duration = trackDuration;\n  }\n  resetContiguity() {\n    this.remainderData = null;\n  }\n  static probe(data) {\n    return hasMoofData(data);\n  }\n  demux(data, timeOffset) {\n    this.timeOffset = timeOffset;\n    // Load all data into the avc track. The CMAF remuxer will look for the data in the samples object; the rest of the fields do not matter\n    let videoSamples = data;\n    const videoTrack = this.videoTrack;\n    const textTrack = this.txtTrack;\n    if (this.config.progressive) {\n      // Split the bytestream into two ranges: one encompassing all data up until the start of the last moof, and everything else.\n      // This is done to guarantee that we're sending valid data to MSE - when demuxing progressively, we have no guarantee\n      // that the fetch loader gives us flush moof+mdat pairs. If we push jagged data to MSE, it will throw an exception.\n      if (this.remainderData) {\n        videoSamples = appendUint8Array(this.remainderData, data);\n      }\n      const segmentedData = segmentValidRange(videoSamples);\n      this.remainderData = segmentedData.remainder;\n      videoTrack.samples = segmentedData.valid || new Uint8Array();\n    } else {\n      videoTrack.samples = videoSamples;\n    }\n    const id3Track = this.extractID3Track(videoTrack, timeOffset);\n    textTrack.samples = parseSamples(timeOffset, videoTrack);\n    return {\n      videoTrack,\n      audioTrack: this.audioTrack,\n      id3Track,\n      textTrack: this.txtTrack\n    };\n  }\n  flush() {\n    const timeOffset = this.timeOffset;\n    const videoTrack = this.videoTrack;\n    const textTrack = this.txtTrack;\n    videoTrack.samples = this.remainderData || new Uint8Array();\n    this.remainderData = null;\n    const id3Track = this.extractID3Track(videoTrack, this.timeOffset);\n    textTrack.samples = parseSamples(timeOffset, videoTrack);\n    return {\n      videoTrack,\n      audioTrack: dummyTrack(),\n      id3Track,\n      textTrack: dummyTrack()\n    };\n  }\n  extractID3Track(videoTrack, timeOffset) {\n    const id3Track = this.id3Track;\n    if (videoTrack.samples.length) {\n      const emsgs = findBox(videoTrack.samples, ['emsg']);\n      if (emsgs) {\n        emsgs.forEach(data => {\n          const emsgInfo = parseEmsg(data);\n          if (emsgSchemePattern.test(emsgInfo.schemeIdUri)) {\n            const pts = isFiniteNumber(emsgInfo.presentationTime) ? emsgInfo.presentationTime / emsgInfo.timeScale : timeOffset + emsgInfo.presentationTimeDelta / emsgInfo.timeScale;\n            let duration = emsgInfo.eventDuration === 0xffffffff ? Number.POSITIVE_INFINITY : emsgInfo.eventDuration / emsgInfo.timeScale;\n            // Safari takes anything <= 0.001 seconds and maps it to Infinity\n            if (duration <= 0.001) {\n              duration = Number.POSITIVE_INFINITY;\n            }\n            const payload = emsgInfo.payload;\n            id3Track.samples.push({\n              data: payload,\n              len: payload.byteLength,\n              dts: pts,\n              pts: pts,\n              type: MetadataSchema.emsg,\n              duration: duration\n            });\n          }\n        });\n      }\n    }\n    return id3Track;\n  }\n  demuxSampleAes(data, keyData, timeOffset) {\n    return Promise.reject(new Error('The MP4 demuxer does not support SAMPLE-AES decryption'));\n  }\n  destroy() {}\n}\n\nconst getAudioBSID = (data, offset) => {\n  // check the bsid to confirm ac-3 | ec-3\n  let bsid = 0;\n  let numBits = 5;\n  offset += numBits;\n  const temp = new Uint32Array(1); // unsigned 32 bit for temporary storage\n  const mask = new Uint32Array(1); // unsigned 32 bit mask value\n  const byte = new Uint8Array(1); // unsigned 8 bit for temporary storage\n  while (numBits > 0) {\n    byte[0] = data[offset];\n    // read remaining bits, upto 8 bits at a time\n    const bits = Math.min(numBits, 8);\n    const shift = 8 - bits;\n    mask[0] = 0xff000000 >>> 24 + shift << shift;\n    temp[0] = (byte[0] & mask[0]) >> shift;\n    bsid = !bsid ? temp[0] : bsid << bits | temp[0];\n    offset += 1;\n    numBits -= bits;\n  }\n  return bsid;\n};\n\nclass AC3Demuxer extends BaseAudioDemuxer {\n  constructor(observer) {\n    super();\n    this.observer = void 0;\n    this.observer = observer;\n  }\n  resetInitSegment(initSegment, audioCodec, videoCodec, trackDuration) {\n    super.resetInitSegment(initSegment, audioCodec, videoCodec, trackDuration);\n    this._audioTrack = {\n      container: 'audio/ac-3',\n      type: 'audio',\n      id: 2,\n      pid: -1,\n      sequenceNumber: 0,\n      segmentCodec: 'ac3',\n      samples: [],\n      manifestCodec: audioCodec,\n      duration: trackDuration,\n      inputTimeScale: 90000,\n      dropped: 0\n    };\n  }\n  canParse(data, offset) {\n    return offset + 64 < data.length;\n  }\n  appendFrame(track, data, offset) {\n    const frameLength = appendFrame(track, data, offset, this.basePTS, this.frameIndex);\n    if (frameLength !== -1) {\n      const sample = track.samples[track.samples.length - 1];\n      return {\n        sample,\n        length: frameLength,\n        missing: 0\n      };\n    }\n  }\n  static probe(data) {\n    if (!data) {\n      return false;\n    }\n    const id3Data = getID3Data(data, 0);\n    if (!id3Data) {\n      return false;\n    }\n\n    // look for the ac-3 sync bytes\n    const offset = id3Data.length;\n    if (data[offset] === 0x0b && data[offset + 1] === 0x77 && getTimeStamp(id3Data) !== undefined &&\n    // check the bsid to confirm ac-3\n    getAudioBSID(data, offset) < 16) {\n      return true;\n    }\n    return false;\n  }\n}\nfunction appendFrame(track, data, start, pts, frameIndex) {\n  if (start + 8 > data.length) {\n    return -1; // not enough bytes left\n  }\n  if (data[start] !== 0x0b || data[start + 1] !== 0x77) {\n    return -1; // invalid magic\n  }\n\n  // get sample rate\n  const samplingRateCode = data[start + 4] >> 6;\n  if (samplingRateCode >= 3) {\n    return -1; // invalid sampling rate\n  }\n  const samplingRateMap = [48000, 44100, 32000];\n  const sampleRate = samplingRateMap[samplingRateCode];\n\n  // get frame size\n  const frameSizeCode = data[start + 4] & 0x3f;\n  const frameSizeMap = [64, 69, 96, 64, 70, 96, 80, 87, 120, 80, 88, 120, 96, 104, 144, 96, 105, 144, 112, 121, 168, 112, 122, 168, 128, 139, 192, 128, 140, 192, 160, 174, 240, 160, 175, 240, 192, 208, 288, 192, 209, 288, 224, 243, 336, 224, 244, 336, 256, 278, 384, 256, 279, 384, 320, 348, 480, 320, 349, 480, 384, 417, 576, 384, 418, 576, 448, 487, 672, 448, 488, 672, 512, 557, 768, 512, 558, 768, 640, 696, 960, 640, 697, 960, 768, 835, 1152, 768, 836, 1152, 896, 975, 1344, 896, 976, 1344, 1024, 1114, 1536, 1024, 1115, 1536, 1152, 1253, 1728, 1152, 1254, 1728, 1280, 1393, 1920, 1280, 1394, 1920];\n  const frameLength = frameSizeMap[frameSizeCode * 3 + samplingRateCode] * 2;\n  if (start + frameLength > data.length) {\n    return -1;\n  }\n\n  // get channel count\n  const channelMode = data[start + 6] >> 5;\n  let skipCount = 0;\n  if (channelMode === 2) {\n    skipCount += 2;\n  } else {\n    if (channelMode & 1 && channelMode !== 1) {\n      skipCount += 2;\n    }\n    if (channelMode & 4) {\n      skipCount += 2;\n    }\n  }\n  const lfeon = (data[start + 6] << 8 | data[start + 7]) >> 12 - skipCount & 1;\n  const channelsMap = [2, 1, 2, 3, 3, 4, 4, 5];\n  const channelCount = channelsMap[channelMode] + lfeon;\n\n  // build dac3 box\n  const bsid = data[start + 5] >> 3;\n  const bsmod = data[start + 5] & 7;\n  const config = new Uint8Array([samplingRateCode << 6 | bsid << 1 | bsmod >> 2, (bsmod & 3) << 6 | channelMode << 3 | lfeon << 2 | frameSizeCode >> 4, frameSizeCode << 4 & 0xe0]);\n  const frameDuration = 1536 / sampleRate * 90000;\n  const stamp = pts + frameIndex * frameDuration;\n  const unit = data.subarray(start, start + frameLength);\n  track.config = config;\n  track.channelCount = channelCount;\n  track.samplerate = sampleRate;\n  track.samples.push({\n    unit,\n    pts: stamp\n  });\n  return frameLength;\n}\n\nclass BaseVideoParser {\n  constructor() {\n    this.VideoSample = null;\n  }\n  createVideoSample(key, pts, dts, debug) {\n    return {\n      key,\n      frame: false,\n      pts,\n      dts,\n      units: [],\n      debug,\n      length: 0\n    };\n  }\n  getLastNalUnit(samples) {\n    var _VideoSample;\n    let VideoSample = this.VideoSample;\n    let lastUnit;\n    // try to fallback to previous sample if current one is empty\n    if (!VideoSample || VideoSample.units.length === 0) {\n      VideoSample = samples[samples.length - 1];\n    }\n    if ((_VideoSample = VideoSample) != null && _VideoSample.units) {\n      const units = VideoSample.units;\n      lastUnit = units[units.length - 1];\n    }\n    return lastUnit;\n  }\n  pushAccessUnit(VideoSample, videoTrack) {\n    if (VideoSample.units.length && VideoSample.frame) {\n      // if sample does not have PTS/DTS, patch with last sample PTS/DTS\n      if (VideoSample.pts === undefined) {\n        const samples = videoTrack.samples;\n        const nbSamples = samples.length;\n        if (nbSamples) {\n          const lastSample = samples[nbSamples - 1];\n          VideoSample.pts = lastSample.pts;\n          VideoSample.dts = lastSample.dts;\n        } else {\n          // dropping samples, no timestamp found\n          videoTrack.dropped++;\n          return;\n        }\n      }\n      videoTrack.samples.push(VideoSample);\n    }\n    if (VideoSample.debug.length) {\n      logger.log(VideoSample.pts + '/' + VideoSample.dts + ':' + VideoSample.debug);\n    }\n  }\n}\n\n/**\n * Parser for exponential Golomb codes, a variable-bitwidth number encoding scheme used by h264.\n */\n\nclass ExpGolomb {\n  constructor(data) {\n    this.data = void 0;\n    this.bytesAvailable = void 0;\n    this.word = void 0;\n    this.bitsAvailable = void 0;\n    this.data = data;\n    // the number of bytes left to examine in this.data\n    this.bytesAvailable = data.byteLength;\n    // the current word being examined\n    this.word = 0; // :uint\n    // the number of bits left to examine in the current word\n    this.bitsAvailable = 0; // :uint\n  }\n\n  // ():void\n  loadWord() {\n    const data = this.data;\n    const bytesAvailable = this.bytesAvailable;\n    const position = data.byteLength - bytesAvailable;\n    const workingBytes = new Uint8Array(4);\n    const availableBytes = Math.min(4, bytesAvailable);\n    if (availableBytes === 0) {\n      throw new Error('no bytes available');\n    }\n    workingBytes.set(data.subarray(position, position + availableBytes));\n    this.word = new DataView(workingBytes.buffer).getUint32(0);\n    // track the amount of this.data that has been processed\n    this.bitsAvailable = availableBytes * 8;\n    this.bytesAvailable -= availableBytes;\n  }\n\n  // (count:int):void\n  skipBits(count) {\n    let skipBytes; // :int\n    count = Math.min(count, this.bytesAvailable * 8 + this.bitsAvailable);\n    if (this.bitsAvailable > count) {\n      this.word <<= count;\n      this.bitsAvailable -= count;\n    } else {\n      count -= this.bitsAvailable;\n      skipBytes = count >> 3;\n      count -= skipBytes << 3;\n      this.bytesAvailable -= skipBytes;\n      this.loadWord();\n      this.word <<= count;\n      this.bitsAvailable -= count;\n    }\n  }\n\n  // (size:int):uint\n  readBits(size) {\n    let bits = Math.min(this.bitsAvailable, size); // :uint\n    const valu = this.word >>> 32 - bits; // :uint\n    if (size > 32) {\n      logger.error('Cannot read more than 32 bits at a time');\n    }\n    this.bitsAvailable -= bits;\n    if (this.bitsAvailable > 0) {\n      this.word <<= bits;\n    } else if (this.bytesAvailable > 0) {\n      this.loadWord();\n    } else {\n      throw new Error('no bits available');\n    }\n    bits = size - bits;\n    if (bits > 0 && this.bitsAvailable) {\n      return valu << bits | this.readBits(bits);\n    } else {\n      return valu;\n    }\n  }\n\n  // ():uint\n  skipLZ() {\n    let leadingZeroCount; // :uint\n    for (leadingZeroCount = 0; leadingZeroCount < this.bitsAvailable; ++leadingZeroCount) {\n      if ((this.word & 0x80000000 >>> leadingZeroCount) !== 0) {\n        // the first bit of working word is 1\n        this.word <<= leadingZeroCount;\n        this.bitsAvailable -= leadingZeroCount;\n        return leadingZeroCount;\n      }\n    }\n    // we exhausted word and still have not found a 1\n    this.loadWord();\n    return leadingZeroCount + this.skipLZ();\n  }\n\n  // ():void\n  skipUEG() {\n    this.skipBits(1 + this.skipLZ());\n  }\n\n  // ():void\n  skipEG() {\n    this.skipBits(1 + this.skipLZ());\n  }\n\n  // ():uint\n  readUEG() {\n    const clz = this.skipLZ(); // :uint\n    return this.readBits(clz + 1) - 1;\n  }\n\n  // ():int\n  readEG() {\n    const valu = this.readUEG(); // :int\n    if (0x01 & valu) {\n      // the number is odd if the low order bit is set\n      return 1 + valu >>> 1; // add 1 to make it even, and divide by 2\n    } else {\n      return -1 * (valu >>> 1); // divide by two then make it negative\n    }\n  }\n\n  // Some convenience functions\n  // :Boolean\n  readBoolean() {\n    return this.readBits(1) === 1;\n  }\n\n  // ():int\n  readUByte() {\n    return this.readBits(8);\n  }\n\n  // ():int\n  readUShort() {\n    return this.readBits(16);\n  }\n\n  // ():int\n  readUInt() {\n    return this.readBits(32);\n  }\n\n  /**\n   * Advance the ExpGolomb decoder past a scaling list. The scaling\n   * list is optionally transmitted as part of a sequence parameter\n   * set and is not relevant to transmuxing.\n   * @param count the number of entries in this scaling list\n   * @see Recommendation ITU-T H.264, Section 7.3.2.1.1.1\n   */\n  skipScalingList(count) {\n    let lastScale = 8;\n    let nextScale = 8;\n    let deltaScale;\n    for (let j = 0; j < count; j++) {\n      if (nextScale !== 0) {\n        deltaScale = this.readEG();\n        nextScale = (lastScale + deltaScale + 256) % 256;\n      }\n      lastScale = nextScale === 0 ? lastScale : nextScale;\n    }\n  }\n\n  /**\n   * Read a sequence parameter set and return some interesting video\n   * properties. A sequence parameter set is the H264 metadata that\n   * describes the properties of upcoming video frames.\n   * @returns an object with configuration parsed from the\n   * sequence parameter set, including the dimensions of the\n   * associated video frames.\n   */\n  readSPS() {\n    let frameCropLeftOffset = 0;\n    let frameCropRightOffset = 0;\n    let frameCropTopOffset = 0;\n    let frameCropBottomOffset = 0;\n    let numRefFramesInPicOrderCntCycle;\n    let scalingListCount;\n    let i;\n    const readUByte = this.readUByte.bind(this);\n    const readBits = this.readBits.bind(this);\n    const readUEG = this.readUEG.bind(this);\n    const readBoolean = this.readBoolean.bind(this);\n    const skipBits = this.skipBits.bind(this);\n    const skipEG = this.skipEG.bind(this);\n    const skipUEG = this.skipUEG.bind(this);\n    const skipScalingList = this.skipScalingList.bind(this);\n    readUByte();\n    const profileIdc = readUByte(); // profile_idc\n    readBits(5); // profileCompat constraint_set[0-4]_flag, u(5)\n    skipBits(3); // reserved_zero_3bits u(3),\n    readUByte(); // level_idc u(8)\n    skipUEG(); // seq_parameter_set_id\n    // some profiles have more optional data we don't need\n    if (profileIdc === 100 || profileIdc === 110 || profileIdc === 122 || profileIdc === 244 || profileIdc === 44 || profileIdc === 83 || profileIdc === 86 || profileIdc === 118 || profileIdc === 128) {\n      const chromaFormatIdc = readUEG();\n      if (chromaFormatIdc === 3) {\n        skipBits(1);\n      } // separate_colour_plane_flag\n\n      skipUEG(); // bit_depth_luma_minus8\n      skipUEG(); // bit_depth_chroma_minus8\n      skipBits(1); // qpprime_y_zero_transform_bypass_flag\n      if (readBoolean()) {\n        // seq_scaling_matrix_present_flag\n        scalingListCount = chromaFormatIdc !== 3 ? 8 : 12;\n        for (i = 0; i < scalingListCount; i++) {\n          if (readBoolean()) {\n            // seq_scaling_list_present_flag[ i ]\n            if (i < 6) {\n              skipScalingList(16);\n            } else {\n              skipScalingList(64);\n            }\n          }\n        }\n      }\n    }\n    skipUEG(); // log2_max_frame_num_minus4\n    const picOrderCntType = readUEG();\n    if (picOrderCntType === 0) {\n      readUEG(); // log2_max_pic_order_cnt_lsb_minus4\n    } else if (picOrderCntType === 1) {\n      skipBits(1); // delta_pic_order_always_zero_flag\n      skipEG(); // offset_for_non_ref_pic\n      skipEG(); // offset_for_top_to_bottom_field\n      numRefFramesInPicOrderCntCycle = readUEG();\n      for (i = 0; i < numRefFramesInPicOrderCntCycle; i++) {\n        skipEG();\n      } // offset_for_ref_frame[ i ]\n    }\n    skipUEG(); // max_num_ref_frames\n    skipBits(1); // gaps_in_frame_num_value_allowed_flag\n    const picWidthInMbsMinus1 = readUEG();\n    const picHeightInMapUnitsMinus1 = readUEG();\n    const frameMbsOnlyFlag = readBits(1);\n    if (frameMbsOnlyFlag === 0) {\n      skipBits(1);\n    } // mb_adaptive_frame_field_flag\n\n    skipBits(1); // direct_8x8_inference_flag\n    if (readBoolean()) {\n      // frame_cropping_flag\n      frameCropLeftOffset = readUEG();\n      frameCropRightOffset = readUEG();\n      frameCropTopOffset = readUEG();\n      frameCropBottomOffset = readUEG();\n    }\n    let pixelRatio = [1, 1];\n    if (readBoolean()) {\n      // vui_parameters_present_flag\n      if (readBoolean()) {\n        // aspect_ratio_info_present_flag\n        const aspectRatioIdc = readUByte();\n        switch (aspectRatioIdc) {\n          case 1:\n            pixelRatio = [1, 1];\n            break;\n          case 2:\n            pixelRatio = [12, 11];\n            break;\n          case 3:\n            pixelRatio = [10, 11];\n            break;\n          case 4:\n            pixelRatio = [16, 11];\n            break;\n          case 5:\n            pixelRatio = [40, 33];\n            break;\n          case 6:\n            pixelRatio = [24, 11];\n            break;\n          case 7:\n            pixelRatio = [20, 11];\n            break;\n          case 8:\n            pixelRatio = [32, 11];\n            break;\n          case 9:\n            pixelRatio = [80, 33];\n            break;\n          case 10:\n            pixelRatio = [18, 11];\n            break;\n          case 11:\n            pixelRatio = [15, 11];\n            break;\n          case 12:\n            pixelRatio = [64, 33];\n            break;\n          case 13:\n            pixelRatio = [160, 99];\n            break;\n          case 14:\n            pixelRatio = [4, 3];\n            break;\n          case 15:\n            pixelRatio = [3, 2];\n            break;\n          case 16:\n            pixelRatio = [2, 1];\n            break;\n          case 255:\n            {\n              pixelRatio = [readUByte() << 8 | readUByte(), readUByte() << 8 | readUByte()];\n              break;\n            }\n        }\n      }\n    }\n    return {\n      width: Math.ceil((picWidthInMbsMinus1 + 1) * 16 - frameCropLeftOffset * 2 - frameCropRightOffset * 2),\n      height: (2 - frameMbsOnlyFlag) * (picHeightInMapUnitsMinus1 + 1) * 16 - (frameMbsOnlyFlag ? 2 : 4) * (frameCropTopOffset + frameCropBottomOffset),\n      pixelRatio: pixelRatio\n    };\n  }\n  readSliceType() {\n    // skip NALu type\n    this.readUByte();\n    // discard first_mb_in_slice\n    this.readUEG();\n    // return slice_type\n    return this.readUEG();\n  }\n}\n\nclass AvcVideoParser extends BaseVideoParser {\n  parseAVCPES(track, textTrack, pes, last, duration) {\n    const units = this.parseAVCNALu(track, pes.data);\n    let VideoSample = this.VideoSample;\n    let push;\n    let spsfound = false;\n    // free pes.data to save up some memory\n    pes.data = null;\n\n    // if new NAL units found and last sample still there, let's push ...\n    // this helps parsing streams with missing AUD (only do this if AUD never found)\n    if (VideoSample && units.length && !track.audFound) {\n      this.pushAccessUnit(VideoSample, track);\n      VideoSample = this.VideoSample = this.createVideoSample(false, pes.pts, pes.dts, '');\n    }\n    units.forEach(unit => {\n      var _VideoSample2;\n      switch (unit.type) {\n        // NDR\n        case 1:\n          {\n            let iskey = false;\n            push = true;\n            const data = unit.data;\n            // only check slice type to detect KF in case SPS found in same packet (any keyframe is preceded by SPS ...)\n            if (spsfound && data.length > 4) {\n              // retrieve slice type by parsing beginning of NAL unit (follow H264 spec, slice_header definition) to detect keyframe embedded in NDR\n              const sliceType = new ExpGolomb(data).readSliceType();\n              // 2 : I slice, 4 : SI slice, 7 : I slice, 9: SI slice\n              // SI slice : A slice that is coded using intra prediction only and using quantisation of the prediction samples.\n              // An SI slice can be coded such that its decoded samples can be constructed identically to an SP slice.\n              // I slice: A slice that is not an SI slice that is decoded using intra prediction only.\n              // if (sliceType === 2 || sliceType === 7) {\n              if (sliceType === 2 || sliceType === 4 || sliceType === 7 || sliceType === 9) {\n                iskey = true;\n              }\n            }\n            if (iskey) {\n              var _VideoSample;\n              // if we have non-keyframe data already, that cannot belong to the same frame as a keyframe, so force a push\n              if ((_VideoSample = VideoSample) != null && _VideoSample.frame && !VideoSample.key) {\n                this.pushAccessUnit(VideoSample, track);\n                VideoSample = this.VideoSample = null;\n              }\n            }\n            if (!VideoSample) {\n              VideoSample = this.VideoSample = this.createVideoSample(true, pes.pts, pes.dts, '');\n            }\n            VideoSample.frame = true;\n            VideoSample.key = iskey;\n            break;\n            // IDR\n          }\n        case 5:\n          push = true;\n          // handle PES not starting with AUD\n          // if we have frame data already, that cannot belong to the same frame, so force a push\n          if ((_VideoSample2 = VideoSample) != null && _VideoSample2.frame && !VideoSample.key) {\n            this.pushAccessUnit(VideoSample, track);\n            VideoSample = this.VideoSample = null;\n          }\n          if (!VideoSample) {\n            VideoSample = this.VideoSample = this.createVideoSample(true, pes.pts, pes.dts, '');\n          }\n          VideoSample.key = true;\n          VideoSample.frame = true;\n          break;\n        // SEI\n        case 6:\n          {\n            push = true;\n            parseSEIMessageFromNALu(unit.data, 1, pes.pts, textTrack.samples);\n            break;\n            // SPS\n          }\n        case 7:\n          {\n            var _track$pixelRatio, _track$pixelRatio2;\n            push = true;\n            spsfound = true;\n            const sps = unit.data;\n            const expGolombDecoder = new ExpGolomb(sps);\n            const config = expGolombDecoder.readSPS();\n            if (!track.sps || track.width !== config.width || track.height !== config.height || ((_track$pixelRatio = track.pixelRatio) == null ? void 0 : _track$pixelRatio[0]) !== config.pixelRatio[0] || ((_track$pixelRatio2 = track.pixelRatio) == null ? void 0 : _track$pixelRatio2[1]) !== config.pixelRatio[1]) {\n              track.width = config.width;\n              track.height = config.height;\n              track.pixelRatio = config.pixelRatio;\n              track.sps = [sps];\n              track.duration = duration;\n              const codecarray = sps.subarray(1, 4);\n              let codecstring = 'avc1.';\n              for (let i = 0; i < 3; i++) {\n                let h = codecarray[i].toString(16);\n                if (h.length < 2) {\n                  h = '0' + h;\n                }\n                codecstring += h;\n              }\n              track.codec = codecstring;\n            }\n            break;\n          }\n        // PPS\n        case 8:\n          push = true;\n          track.pps = [unit.data];\n          break;\n        // AUD\n        case 9:\n          push = true;\n          track.audFound = true;\n          if (VideoSample) {\n            this.pushAccessUnit(VideoSample, track);\n          }\n          VideoSample = this.VideoSample = this.createVideoSample(false, pes.pts, pes.dts, '');\n          break;\n        // Filler Data\n        case 12:\n          push = true;\n          break;\n        default:\n          push = false;\n          if (VideoSample) {\n            VideoSample.debug += 'unknown NAL ' + unit.type + ' ';\n          }\n          break;\n      }\n      if (VideoSample && push) {\n        const units = VideoSample.units;\n        units.push(unit);\n      }\n    });\n    // if last PES packet, push samples\n    if (last && VideoSample) {\n      this.pushAccessUnit(VideoSample, track);\n      this.VideoSample = null;\n    }\n  }\n  parseAVCNALu(track, array) {\n    const len = array.byteLength;\n    let state = track.naluState || 0;\n    const lastState = state;\n    const units = [];\n    let i = 0;\n    let value;\n    let overflow;\n    let unitType;\n    let lastUnitStart = -1;\n    let lastUnitType = 0;\n    // logger.log('PES:' + Hex.hexDump(array));\n\n    if (state === -1) {\n      // special use case where we found 3 or 4-byte start codes exactly at the end of previous PES packet\n      lastUnitStart = 0;\n      // NALu type is value read from offset 0\n      lastUnitType = array[0] & 0x1f;\n      state = 0;\n      i = 1;\n    }\n    while (i < len) {\n      value = array[i++];\n      // optimization. state 0 and 1 are the predominant case. let's handle them outside of the switch/case\n      if (!state) {\n        state = value ? 0 : 1;\n        continue;\n      }\n      if (state === 1) {\n        state = value ? 0 : 2;\n        continue;\n      }\n      // here we have state either equal to 2 or 3\n      if (!value) {\n        state = 3;\n      } else if (value === 1) {\n        overflow = i - state - 1;\n        if (lastUnitStart >= 0) {\n          const unit = {\n            data: array.subarray(lastUnitStart, overflow),\n            type: lastUnitType\n          };\n          // logger.log('pushing NALU, type/size:' + unit.type + '/' + unit.data.byteLength);\n          units.push(unit);\n        } else {\n          // lastUnitStart is undefined => this is the first start code found in this PES packet\n          // first check if start code delimiter is overlapping between 2 PES packets,\n          // ie it started in last packet (lastState not zero)\n          // and ended at the beginning of this PES packet (i <= 4 - lastState)\n          const lastUnit = this.getLastNalUnit(track.samples);\n          if (lastUnit) {\n            if (lastState && i <= 4 - lastState) {\n              // start delimiter overlapping between PES packets\n              // strip start delimiter bytes from the end of last NAL unit\n              // check if lastUnit had a state different from zero\n              if (lastUnit.state) {\n                // strip last bytes\n                lastUnit.data = lastUnit.data.subarray(0, lastUnit.data.byteLength - lastState);\n              }\n            }\n            // If NAL units are not starting right at the beginning of the PES packet, push preceding data into previous NAL unit.\n\n            if (overflow > 0) {\n              // logger.log('first NALU found with overflow:' + overflow);\n              lastUnit.data = appendUint8Array(lastUnit.data, array.subarray(0, overflow));\n              lastUnit.state = 0;\n            }\n          }\n        }\n        // check if we can read unit type\n        if (i < len) {\n          unitType = array[i] & 0x1f;\n          // logger.log('find NALU @ offset:' + i + ',type:' + unitType);\n          lastUnitStart = i;\n          lastUnitType = unitType;\n          state = 0;\n        } else {\n          // not enough byte to read unit type. let's read it on next PES parsing\n          state = -1;\n        }\n      } else {\n        state = 0;\n      }\n    }\n    if (lastUnitStart >= 0 && state >= 0) {\n      const unit = {\n        data: array.subarray(lastUnitStart, len),\n        type: lastUnitType,\n        state: state\n      };\n      units.push(unit);\n      // logger.log('pushing NALU, type/size/state:' + unit.type + '/' + unit.data.byteLength + '/' + state);\n    }\n    // no NALu found\n    if (units.length === 0) {\n      // append pes.data to previous NAL unit\n      const lastUnit = this.getLastNalUnit(track.samples);\n      if (lastUnit) {\n        lastUnit.data = appendUint8Array(lastUnit.data, array);\n      }\n    }\n    track.naluState = state;\n    return units;\n  }\n}\n\n/**\n * SAMPLE-AES decrypter\n */\n\nclass SampleAesDecrypter {\n  constructor(observer, config, keyData) {\n    this.keyData = void 0;\n    this.decrypter = void 0;\n    this.keyData = keyData;\n    this.decrypter = new Decrypter(config, {\n      removePKCS7Padding: false\n    });\n  }\n  decryptBuffer(encryptedData) {\n    return this.decrypter.decrypt(encryptedData, this.keyData.key.buffer, this.keyData.iv.buffer);\n  }\n\n  // AAC - encrypt all full 16 bytes blocks starting from offset 16\n  decryptAacSample(samples, sampleIndex, callback) {\n    const curUnit = samples[sampleIndex].unit;\n    if (curUnit.length <= 16) {\n      // No encrypted portion in this sample (first 16 bytes is not\n      // encrypted, see https://developer.apple.com/library/archive/documentation/AudioVideo/Conceptual/HLS_Sample_Encryption/Encryption/Encryption.html),\n      return;\n    }\n    const encryptedData = curUnit.subarray(16, curUnit.length - curUnit.length % 16);\n    const encryptedBuffer = encryptedData.buffer.slice(encryptedData.byteOffset, encryptedData.byteOffset + encryptedData.length);\n    this.decryptBuffer(encryptedBuffer).then(decryptedBuffer => {\n      const decryptedData = new Uint8Array(decryptedBuffer);\n      curUnit.set(decryptedData, 16);\n      if (!this.decrypter.isSync()) {\n        this.decryptAacSamples(samples, sampleIndex + 1, callback);\n      }\n    });\n  }\n  decryptAacSamples(samples, sampleIndex, callback) {\n    for (;; sampleIndex++) {\n      if (sampleIndex >= samples.length) {\n        callback();\n        return;\n      }\n      if (samples[sampleIndex].unit.length < 32) {\n        continue;\n      }\n      this.decryptAacSample(samples, sampleIndex, callback);\n      if (!this.decrypter.isSync()) {\n        return;\n      }\n    }\n  }\n\n  // AVC - encrypt one 16 bytes block out of ten, starting from offset 32\n  getAvcEncryptedData(decodedData) {\n    const encryptedDataLen = Math.floor((decodedData.length - 48) / 160) * 16 + 16;\n    const encryptedData = new Int8Array(encryptedDataLen);\n    let outputPos = 0;\n    for (let inputPos = 32; inputPos < decodedData.length - 16; inputPos += 160, outputPos += 16) {\n      encryptedData.set(decodedData.subarray(inputPos, inputPos + 16), outputPos);\n    }\n    return encryptedData;\n  }\n  getAvcDecryptedUnit(decodedData, decryptedData) {\n    const uint8DecryptedData = new Uint8Array(decryptedData);\n    let inputPos = 0;\n    for (let outputPos = 32; outputPos < decodedData.length - 16; outputPos += 160, inputPos += 16) {\n      decodedData.set(uint8DecryptedData.subarray(inputPos, inputPos + 16), outputPos);\n    }\n    return decodedData;\n  }\n  decryptAvcSample(samples, sampleIndex, unitIndex, callback, curUnit) {\n    const decodedData = discardEPB(curUnit.data);\n    const encryptedData = this.getAvcEncryptedData(decodedData);\n    this.decryptBuffer(encryptedData.buffer).then(decryptedBuffer => {\n      curUnit.data = this.getAvcDecryptedUnit(decodedData, decryptedBuffer);\n      if (!this.decrypter.isSync()) {\n        this.decryptAvcSamples(samples, sampleIndex, unitIndex + 1, callback);\n      }\n    });\n  }\n  decryptAvcSamples(samples, sampleIndex, unitIndex, callback) {\n    if (samples instanceof Uint8Array) {\n      throw new Error('Cannot decrypt samples of type Uint8Array');\n    }\n    for (;; sampleIndex++, unitIndex = 0) {\n      if (sampleIndex >= samples.length) {\n        callback();\n        return;\n      }\n      const curUnits = samples[sampleIndex].units;\n      for (;; unitIndex++) {\n        if (unitIndex >= curUnits.length) {\n          break;\n        }\n        const curUnit = curUnits[unitIndex];\n        if (curUnit.data.length <= 48 || curUnit.type !== 1 && curUnit.type !== 5) {\n          continue;\n        }\n        this.decryptAvcSample(samples, sampleIndex, unitIndex, callback, curUnit);\n        if (!this.decrypter.isSync()) {\n          return;\n        }\n      }\n    }\n  }\n}\n\nconst PACKET_LENGTH = 188;\nclass TSDemuxer {\n  constructor(observer, config, typeSupported) {\n    this.observer = void 0;\n    this.config = void 0;\n    this.typeSupported = void 0;\n    this.sampleAes = null;\n    this.pmtParsed = false;\n    this.audioCodec = void 0;\n    this.videoCodec = void 0;\n    this._duration = 0;\n    this._pmtId = -1;\n    this._videoTrack = void 0;\n    this._audioTrack = void 0;\n    this._id3Track = void 0;\n    this._txtTrack = void 0;\n    this.aacOverFlow = null;\n    this.remainderData = null;\n    this.videoParser = void 0;\n    this.observer = observer;\n    this.config = config;\n    this.typeSupported = typeSupported;\n    this.videoParser = new AvcVideoParser();\n  }\n  static probe(data) {\n    const syncOffset = TSDemuxer.syncOffset(data);\n    if (syncOffset > 0) {\n      logger.warn(`MPEG2-TS detected but first sync word found @ offset ${syncOffset}`);\n    }\n    return syncOffset !== -1;\n  }\n  static syncOffset(data) {\n    const length = data.length;\n    let scanwindow = Math.min(PACKET_LENGTH * 5, length - PACKET_LENGTH) + 1;\n    let i = 0;\n    while (i < scanwindow) {\n      // a TS init segment should contain at least 2 TS packets: PAT and PMT, each starting with 0x47\n      let foundPat = false;\n      let packetStart = -1;\n      let tsPackets = 0;\n      for (let j = i; j < length; j += PACKET_LENGTH) {\n        if (data[j] === 0x47 && (length - j === PACKET_LENGTH || data[j + PACKET_LENGTH] === 0x47)) {\n          tsPackets++;\n          if (packetStart === -1) {\n            packetStart = j;\n            // First sync word found at offset, increase scan length (#5251)\n            if (packetStart !== 0) {\n              scanwindow = Math.min(packetStart + PACKET_LENGTH * 99, data.length - PACKET_LENGTH) + 1;\n            }\n          }\n          if (!foundPat) {\n            foundPat = parsePID(data, j) === 0;\n          }\n          // Sync word found at 0 with 3 packets, or found at offset least 2 packets up to scanwindow (#5501)\n          if (foundPat && tsPackets > 1 && (packetStart === 0 && tsPackets > 2 || j + PACKET_LENGTH > scanwindow)) {\n            return packetStart;\n          }\n        } else if (tsPackets) {\n          // Exit if sync word found, but does not contain contiguous packets\n          return -1;\n        } else {\n          break;\n        }\n      }\n      i++;\n    }\n    return -1;\n  }\n\n  /**\n   * Creates a track model internal to demuxer used to drive remuxing input\n   */\n  static createTrack(type, duration) {\n    return {\n      container: type === 'video' || type === 'audio' ? 'video/mp2t' : undefined,\n      type,\n      id: RemuxerTrackIdConfig[type],\n      pid: -1,\n      inputTimeScale: 90000,\n      sequenceNumber: 0,\n      samples: [],\n      dropped: 0,\n      duration: type === 'audio' ? duration : undefined\n    };\n  }\n\n  /**\n   * Initializes a new init segment on the demuxer/remuxer interface. Needed for discontinuities/track-switches (or at stream start)\n   * Resets all internal track instances of the demuxer.\n   */\n  resetInitSegment(initSegment, audioCodec, videoCodec, trackDuration) {\n    this.pmtParsed = false;\n    this._pmtId = -1;\n    this._videoTrack = TSDemuxer.createTrack('video');\n    this._audioTrack = TSDemuxer.createTrack('audio', trackDuration);\n    this._id3Track = TSDemuxer.createTrack('id3');\n    this._txtTrack = TSDemuxer.createTrack('text');\n    this._audioTrack.segmentCodec = 'aac';\n\n    // flush any partial content\n    this.aacOverFlow = null;\n    this.remainderData = null;\n    this.audioCodec = audioCodec;\n    this.videoCodec = videoCodec;\n    this._duration = trackDuration;\n  }\n  resetTimeStamp() {}\n  resetContiguity() {\n    const {\n      _audioTrack,\n      _videoTrack,\n      _id3Track\n    } = this;\n    if (_audioTrack) {\n      _audioTrack.pesData = null;\n    }\n    if (_videoTrack) {\n      _videoTrack.pesData = null;\n    }\n    if (_id3Track) {\n      _id3Track.pesData = null;\n    }\n    this.aacOverFlow = null;\n    this.remainderData = null;\n  }\n  demux(data, timeOffset, isSampleAes = false, flush = false) {\n    if (!isSampleAes) {\n      this.sampleAes = null;\n    }\n    let pes;\n    const videoTrack = this._videoTrack;\n    const audioTrack = this._audioTrack;\n    const id3Track = this._id3Track;\n    const textTrack = this._txtTrack;\n    let videoPid = videoTrack.pid;\n    let videoData = videoTrack.pesData;\n    let audioPid = audioTrack.pid;\n    let id3Pid = id3Track.pid;\n    let audioData = audioTrack.pesData;\n    let id3Data = id3Track.pesData;\n    let unknownPID = null;\n    let pmtParsed = this.pmtParsed;\n    let pmtId = this._pmtId;\n    let len = data.length;\n    if (this.remainderData) {\n      data = appendUint8Array(this.remainderData, data);\n      len = data.length;\n      this.remainderData = null;\n    }\n    if (len < PACKET_LENGTH && !flush) {\n      this.remainderData = data;\n      return {\n        audioTrack,\n        videoTrack,\n        id3Track,\n        textTrack\n      };\n    }\n    const syncOffset = Math.max(0, TSDemuxer.syncOffset(data));\n    len -= (len - syncOffset) % PACKET_LENGTH;\n    if (len < data.byteLength && !flush) {\n      this.remainderData = new Uint8Array(data.buffer, len, data.buffer.byteLength - len);\n    }\n\n    // loop through TS packets\n    let tsPacketErrors = 0;\n    for (let start = syncOffset; start < len; start += PACKET_LENGTH) {\n      if (data[start] === 0x47) {\n        const stt = !!(data[start + 1] & 0x40);\n        const pid = parsePID(data, start);\n        const atf = (data[start + 3] & 0x30) >> 4;\n\n        // if an adaption field is present, its length is specified by the fifth byte of the TS packet header.\n        let offset;\n        if (atf > 1) {\n          offset = start + 5 + data[start + 4];\n          // continue if there is only adaptation field\n          if (offset === start + PACKET_LENGTH) {\n            continue;\n          }\n        } else {\n          offset = start + 4;\n        }\n        switch (pid) {\n          case videoPid:\n            if (stt) {\n              if (videoData && (pes = parsePES(videoData))) {\n                this.videoParser.parseAVCPES(videoTrack, textTrack, pes, false, this._duration);\n              }\n              videoData = {\n                data: [],\n                size: 0\n              };\n            }\n            if (videoData) {\n              videoData.data.push(data.subarray(offset, start + PACKET_LENGTH));\n              videoData.size += start + PACKET_LENGTH - offset;\n            }\n            break;\n          case audioPid:\n            if (stt) {\n              if (audioData && (pes = parsePES(audioData))) {\n                switch (audioTrack.segmentCodec) {\n                  case 'aac':\n                    this.parseAACPES(audioTrack, pes);\n                    break;\n                  case 'mp3':\n                    this.parseMPEGPES(audioTrack, pes);\n                    break;\n                  case 'ac3':\n                    {\n                      this.parseAC3PES(audioTrack, pes);\n                    }\n                    break;\n                }\n              }\n              audioData = {\n                data: [],\n                size: 0\n              };\n            }\n            if (audioData) {\n              audioData.data.push(data.subarray(offset, start + PACKET_LENGTH));\n              audioData.size += start + PACKET_LENGTH - offset;\n            }\n            break;\n          case id3Pid:\n            if (stt) {\n              if (id3Data && (pes = parsePES(id3Data))) {\n                this.parseID3PES(id3Track, pes);\n              }\n              id3Data = {\n                data: [],\n                size: 0\n              };\n            }\n            if (id3Data) {\n              id3Data.data.push(data.subarray(offset, start + PACKET_LENGTH));\n              id3Data.size += start + PACKET_LENGTH - offset;\n            }\n            break;\n          case 0:\n            if (stt) {\n              offset += data[offset] + 1;\n            }\n            pmtId = this._pmtId = parsePAT(data, offset);\n            // logger.log('PMT PID:'  + this._pmtId);\n            break;\n          case pmtId:\n            {\n              if (stt) {\n                offset += data[offset] + 1;\n              }\n              const parsedPIDs = parsePMT(data, offset, this.typeSupported, isSampleAes, this.observer);\n\n              // only update track id if track PID found while parsing PMT\n              // this is to avoid resetting the PID to -1 in case\n              // track PID transiently disappears from the stream\n              // this could happen in case of transient missing audio samples for example\n              // NOTE this is only the PID of the track as found in TS,\n              // but we are not using this for MP4 track IDs.\n              videoPid = parsedPIDs.videoPid;\n              if (videoPid > 0) {\n                videoTrack.pid = videoPid;\n                videoTrack.segmentCodec = parsedPIDs.segmentVideoCodec;\n              }\n              audioPid = parsedPIDs.audioPid;\n              if (audioPid > 0) {\n                audioTrack.pid = audioPid;\n                audioTrack.segmentCodec = parsedPIDs.segmentAudioCodec;\n              }\n              id3Pid = parsedPIDs.id3Pid;\n              if (id3Pid > 0) {\n                id3Track.pid = id3Pid;\n              }\n              if (unknownPID !== null && !pmtParsed) {\n                logger.warn(`MPEG-TS PMT found at ${start} after unknown PID '${unknownPID}'. Backtracking to sync byte @${syncOffset} to parse all TS packets.`);\n                unknownPID = null;\n                // we set it to -188, the += 188 in the for loop will reset start to 0\n                start = syncOffset - 188;\n              }\n              pmtParsed = this.pmtParsed = true;\n              break;\n            }\n          case 0x11:\n          case 0x1fff:\n            break;\n          default:\n            unknownPID = pid;\n            break;\n        }\n      } else {\n        tsPacketErrors++;\n      }\n    }\n    if (tsPacketErrors > 0) {\n      emitParsingError(this.observer, new Error(`Found ${tsPacketErrors} TS packet/s that do not start with 0x47`));\n    }\n    videoTrack.pesData = videoData;\n    audioTrack.pesData = audioData;\n    id3Track.pesData = id3Data;\n    const demuxResult = {\n      audioTrack,\n      videoTrack,\n      id3Track,\n      textTrack\n    };\n    if (flush) {\n      this.extractRemainingSamples(demuxResult);\n    }\n    return demuxResult;\n  }\n  flush() {\n    const {\n      remainderData\n    } = this;\n    this.remainderData = null;\n    let result;\n    if (remainderData) {\n      result = this.demux(remainderData, -1, false, true);\n    } else {\n      result = {\n        videoTrack: this._videoTrack,\n        audioTrack: this._audioTrack,\n        id3Track: this._id3Track,\n        textTrack: this._txtTrack\n      };\n    }\n    this.extractRemainingSamples(result);\n    if (this.sampleAes) {\n      return this.decrypt(result, this.sampleAes);\n    }\n    return result;\n  }\n  extractRemainingSamples(demuxResult) {\n    const {\n      audioTrack,\n      videoTrack,\n      id3Track,\n      textTrack\n    } = demuxResult;\n    const videoData = videoTrack.pesData;\n    const audioData = audioTrack.pesData;\n    const id3Data = id3Track.pesData;\n    // try to parse last PES packets\n    let pes;\n    if (videoData && (pes = parsePES(videoData))) {\n      this.videoParser.parseAVCPES(videoTrack, textTrack, pes, true, this._duration);\n      videoTrack.pesData = null;\n    } else {\n      // either avcData null or PES truncated, keep it for next frag parsing\n      videoTrack.pesData = videoData;\n    }\n    if (audioData && (pes = parsePES(audioData))) {\n      switch (audioTrack.segmentCodec) {\n        case 'aac':\n          this.parseAACPES(audioTrack, pes);\n          break;\n        case 'mp3':\n          this.parseMPEGPES(audioTrack, pes);\n          break;\n        case 'ac3':\n          {\n            this.parseAC3PES(audioTrack, pes);\n          }\n          break;\n      }\n      audioTrack.pesData = null;\n    } else {\n      if (audioData != null && audioData.size) {\n        logger.log('last AAC PES packet truncated,might overlap between fragments');\n      }\n\n      // either audioData null or PES truncated, keep it for next frag parsing\n      audioTrack.pesData = audioData;\n    }\n    if (id3Data && (pes = parsePES(id3Data))) {\n      this.parseID3PES(id3Track, pes);\n      id3Track.pesData = null;\n    } else {\n      // either id3Data null or PES truncated, keep it for next frag parsing\n      id3Track.pesData = id3Data;\n    }\n  }\n  demuxSampleAes(data, keyData, timeOffset) {\n    const demuxResult = this.demux(data, timeOffset, true, !this.config.progressive);\n    const sampleAes = this.sampleAes = new SampleAesDecrypter(this.observer, this.config, keyData);\n    return this.decrypt(demuxResult, sampleAes);\n  }\n  decrypt(demuxResult, sampleAes) {\n    return new Promise(resolve => {\n      const {\n        audioTrack,\n        videoTrack\n      } = demuxResult;\n      if (audioTrack.samples && audioTrack.segmentCodec === 'aac') {\n        sampleAes.decryptAacSamples(audioTrack.samples, 0, () => {\n          if (videoTrack.samples) {\n            sampleAes.decryptAvcSamples(videoTrack.samples, 0, 0, () => {\n              resolve(demuxResult);\n            });\n          } else {\n            resolve(demuxResult);\n          }\n        });\n      } else if (videoTrack.samples) {\n        sampleAes.decryptAvcSamples(videoTrack.samples, 0, 0, () => {\n          resolve(demuxResult);\n        });\n      }\n    });\n  }\n  destroy() {\n    this._duration = 0;\n  }\n  parseAACPES(track, pes) {\n    let startOffset = 0;\n    const aacOverFlow = this.aacOverFlow;\n    let data = pes.data;\n    if (aacOverFlow) {\n      this.aacOverFlow = null;\n      const frameMissingBytes = aacOverFlow.missing;\n      const sampleLength = aacOverFlow.sample.unit.byteLength;\n      // logger.log(`AAC: append overflowing ${sampleLength} bytes to beginning of new PES`);\n      if (frameMissingBytes === -1) {\n        data = appendUint8Array(aacOverFlow.sample.unit, data);\n      } else {\n        const frameOverflowBytes = sampleLength - frameMissingBytes;\n        aacOverFlow.sample.unit.set(data.subarray(0, frameMissingBytes), frameOverflowBytes);\n        track.samples.push(aacOverFlow.sample);\n        startOffset = aacOverFlow.missing;\n      }\n    }\n    // look for ADTS header (0xFFFx)\n    let offset;\n    let len;\n    for (offset = startOffset, len = data.length; offset < len - 1; offset++) {\n      if (isHeader$1(data, offset)) {\n        break;\n      }\n    }\n    // if ADTS header does not start straight from the beginning of the PES payload, raise an error\n    if (offset !== startOffset) {\n      let reason;\n      const recoverable = offset < len - 1;\n      if (recoverable) {\n        reason = `AAC PES did not start with ADTS header,offset:${offset}`;\n      } else {\n        reason = 'No ADTS header found in AAC PES';\n      }\n      emitParsingError(this.observer, new Error(reason), recoverable);\n      if (!recoverable) {\n        return;\n      }\n    }\n    initTrackConfig(track, this.observer, data, offset, this.audioCodec);\n    let pts;\n    if (pes.pts !== undefined) {\n      pts = pes.pts;\n    } else if (aacOverFlow) {\n      // if last AAC frame is overflowing, we should ensure timestamps are contiguous:\n      // first sample PTS should be equal to last sample PTS + frameDuration\n      const frameDuration = getFrameDuration(track.samplerate);\n      pts = aacOverFlow.sample.pts + frameDuration;\n    } else {\n      logger.warn('[tsdemuxer]: AAC PES unknown PTS');\n      return;\n    }\n\n    // scan for aac samples\n    let frameIndex = 0;\n    let frame;\n    while (offset < len) {\n      frame = appendFrame$2(track, data, offset, pts, frameIndex);\n      offset += frame.length;\n      if (!frame.missing) {\n        frameIndex++;\n        for (; offset < len - 1; offset++) {\n          if (isHeader$1(data, offset)) {\n            break;\n          }\n        }\n      } else {\n        this.aacOverFlow = frame;\n        break;\n      }\n    }\n  }\n  parseMPEGPES(track, pes) {\n    const data = pes.data;\n    const length = data.length;\n    let frameIndex = 0;\n    let offset = 0;\n    const pts = pes.pts;\n    if (pts === undefined) {\n      logger.warn('[tsdemuxer]: MPEG PES unknown PTS');\n      return;\n    }\n    while (offset < length) {\n      if (isHeader(data, offset)) {\n        const frame = appendFrame$1(track, data, offset, pts, frameIndex);\n        if (frame) {\n          offset += frame.length;\n          frameIndex++;\n        } else {\n          // logger.log('Unable to parse Mpeg audio frame');\n          break;\n        }\n      } else {\n        // nothing found, keep looking\n        offset++;\n      }\n    }\n  }\n  parseAC3PES(track, pes) {\n    {\n      const data = pes.data;\n      const pts = pes.pts;\n      if (pts === undefined) {\n        logger.warn('[tsdemuxer]: AC3 PES unknown PTS');\n        return;\n      }\n      const length = data.length;\n      let frameIndex = 0;\n      let offset = 0;\n      let parsed;\n      while (offset < length && (parsed = appendFrame(track, data, offset, pts, frameIndex++)) > 0) {\n        offset += parsed;\n      }\n    }\n  }\n  parseID3PES(id3Track, pes) {\n    if (pes.pts === undefined) {\n      logger.warn('[tsdemuxer]: ID3 PES unknown PTS');\n      return;\n    }\n    const id3Sample = _extends({}, pes, {\n      type: this._videoTrack ? MetadataSchema.emsg : MetadataSchema.audioId3,\n      duration: Number.POSITIVE_INFINITY\n    });\n    id3Track.samples.push(id3Sample);\n  }\n}\nfunction parsePID(data, offset) {\n  // pid is a 13-bit field starting at the last bit of TS[1]\n  return ((data[offset + 1] & 0x1f) << 8) + data[offset + 2];\n}\nfunction parsePAT(data, offset) {\n  // skip the PSI header and parse the first PMT entry\n  return (data[offset + 10] & 0x1f) << 8 | data[offset + 11];\n}\nfunction parsePMT(data, offset, typeSupported, isSampleAes, observer) {\n  const result = {\n    audioPid: -1,\n    videoPid: -1,\n    id3Pid: -1,\n    segmentVideoCodec: 'avc',\n    segmentAudioCodec: 'aac'\n  };\n  const sectionLength = (data[offset + 1] & 0x0f) << 8 | data[offset + 2];\n  const tableEnd = offset + 3 + sectionLength - 4;\n  // to determine where the table is, we have to figure out how\n  // long the program info descriptors are\n  const programInfoLength = (data[offset + 10] & 0x0f) << 8 | data[offset + 11];\n  // advance the offset to the first entry in the mapping table\n  offset += 12 + programInfoLength;\n  while (offset < tableEnd) {\n    const pid = parsePID(data, offset);\n    const esInfoLength = (data[offset + 3] & 0x0f) << 8 | data[offset + 4];\n    switch (data[offset]) {\n      case 0xcf:\n        // SAMPLE-AES AAC\n        if (!isSampleAes) {\n          logEncryptedSamplesFoundInUnencryptedStream('ADTS AAC');\n          break;\n        }\n      /* falls through */\n      case 0x0f:\n        // ISO/IEC 13818-7 ADTS AAC (MPEG-2 lower bit-rate audio)\n        // logger.log('AAC PID:'  + pid);\n        if (result.audioPid === -1) {\n          result.audioPid = pid;\n        }\n        break;\n\n      // Packetized metadata (ID3)\n      case 0x15:\n        // logger.log('ID3 PID:'  + pid);\n        if (result.id3Pid === -1) {\n          result.id3Pid = pid;\n        }\n        break;\n      case 0xdb:\n        // SAMPLE-AES AVC\n        if (!isSampleAes) {\n          logEncryptedSamplesFoundInUnencryptedStream('H.264');\n          break;\n        }\n      /* falls through */\n      case 0x1b:\n        // ITU-T Rec. H.264 and ISO/IEC 14496-10 (lower bit-rate video)\n        // logger.log('AVC PID:'  + pid);\n        if (result.videoPid === -1) {\n          result.videoPid = pid;\n          result.segmentVideoCodec = 'avc';\n        }\n        break;\n\n      // ISO/IEC 11172-3 (MPEG-1 audio)\n      // or ISO/IEC 13818-3 (MPEG-2 halved sample rate audio)\n      case 0x03:\n      case 0x04:\n        // logger.log('MPEG PID:'  + pid);\n        if (!typeSupported.mpeg && !typeSupported.mp3) {\n          logger.log('MPEG audio found, not supported in this browser');\n        } else if (result.audioPid === -1) {\n          result.audioPid = pid;\n          result.segmentAudioCodec = 'mp3';\n        }\n        break;\n      case 0xc1:\n        // SAMPLE-AES AC3\n        if (!isSampleAes) {\n          logEncryptedSamplesFoundInUnencryptedStream('AC-3');\n          break;\n        }\n      /* falls through */\n      case 0x81:\n        {\n          if (!typeSupported.ac3) {\n            logger.log('AC-3 audio found, not supported in this browser');\n          } else if (result.audioPid === -1) {\n            result.audioPid = pid;\n            result.segmentAudioCodec = 'ac3';\n          }\n        }\n        break;\n      case 0x06:\n        // stream_type 6 can mean a lot of different things in case of DVB.\n        // We need to look at the descriptors. Right now, we're only interested\n        // in AC-3 audio, so we do the descriptor parsing only when we don't have\n        // an audio PID yet.\n        if (result.audioPid === -1 && esInfoLength > 0) {\n          let parsePos = offset + 5;\n          let remaining = esInfoLength;\n          while (remaining > 2) {\n            const descriptorId = data[parsePos];\n            switch (descriptorId) {\n              case 0x6a:\n                // DVB Descriptor for AC-3\n                {\n                  if (typeSupported.ac3 !== true) {\n                    logger.log('AC-3 audio found, not supported in this browser for now');\n                  } else {\n                    result.audioPid = pid;\n                    result.segmentAudioCodec = 'ac3';\n                  }\n                }\n                break;\n            }\n            const descriptorLen = data[parsePos + 1] + 2;\n            parsePos += descriptorLen;\n            remaining -= descriptorLen;\n          }\n        }\n        break;\n      case 0xc2: // SAMPLE-AES EC3\n      /* falls through */\n      case 0x87:\n        emitParsingError(observer, new Error('Unsupported EC-3 in M2TS found'));\n        return result;\n      case 0x24:\n        emitParsingError(observer, new Error('Unsupported HEVC in M2TS found'));\n        return result;\n    }\n    // move to the next table entry\n    // skip past the elementary stream descriptors, if present\n    offset += esInfoLength + 5;\n  }\n  return result;\n}\nfunction emitParsingError(observer, error, levelRetry) {\n  logger.warn(`parsing error: ${error.message}`);\n  observer.emit(Events.ERROR, Events.ERROR, {\n    type: ErrorTypes.MEDIA_ERROR,\n    details: ErrorDetails.FRAG_PARSING_ERROR,\n    fatal: false,\n    levelRetry,\n    error,\n    reason: error.message\n  });\n}\nfunction logEncryptedSamplesFoundInUnencryptedStream(type) {\n  logger.log(`${type} with AES-128-CBC encryption found in unencrypted stream`);\n}\nfunction parsePES(stream) {\n  let i = 0;\n  let frag;\n  let pesLen;\n  let pesHdrLen;\n  let pesPts;\n  let pesDts;\n  const data = stream.data;\n  // safety check\n  if (!stream || stream.size === 0) {\n    return null;\n  }\n\n  // we might need up to 19 bytes to read PES header\n  // if first chunk of data is less than 19 bytes, let's merge it with following ones until we get 19 bytes\n  // usually only one merge is needed (and this is rare ...)\n  while (data[0].length < 19 && data.length > 1) {\n    data[0] = appendUint8Array(data[0], data[1]);\n    data.splice(1, 1);\n  }\n  // retrieve PTS/DTS from first fragment\n  frag = data[0];\n  const pesPrefix = (frag[0] << 16) + (frag[1] << 8) + frag[2];\n  if (pesPrefix === 1) {\n    pesLen = (frag[4] << 8) + frag[5];\n    // if PES parsed length is not zero and greater than total received length, stop parsing. PES might be truncated\n    // minus 6 : PES header size\n    if (pesLen && pesLen > stream.size - 6) {\n      return null;\n    }\n    const pesFlags = frag[7];\n    if (pesFlags & 0xc0) {\n      /* PES header described here : http://dvd.sourceforge.net/dvdinfo/pes-hdr.html\n          as PTS / DTS is 33 bit we cannot use bitwise operator in JS,\n          as Bitwise operators treat their operands as a sequence of 32 bits */\n      pesPts = (frag[9] & 0x0e) * 536870912 +\n      // 1 << 29\n      (frag[10] & 0xff) * 4194304 +\n      // 1 << 22\n      (frag[11] & 0xfe) * 16384 +\n      // 1 << 14\n      (frag[12] & 0xff) * 128 +\n      // 1 << 7\n      (frag[13] & 0xfe) / 2;\n      if (pesFlags & 0x40) {\n        pesDts = (frag[14] & 0x0e) * 536870912 +\n        // 1 << 29\n        (frag[15] & 0xff) * 4194304 +\n        // 1 << 22\n        (frag[16] & 0xfe) * 16384 +\n        // 1 << 14\n        (frag[17] & 0xff) * 128 +\n        // 1 << 7\n        (frag[18] & 0xfe) / 2;\n        if (pesPts - pesDts > 60 * 90000) {\n          logger.warn(`${Math.round((pesPts - pesDts) / 90000)}s delta between PTS and DTS, align them`);\n          pesPts = pesDts;\n        }\n      } else {\n        pesDts = pesPts;\n      }\n    }\n    pesHdrLen = frag[8];\n    // 9 bytes : 6 bytes for PES header + 3 bytes for PES extension\n    let payloadStartOffset = pesHdrLen + 9;\n    if (stream.size <= payloadStartOffset) {\n      return null;\n    }\n    stream.size -= payloadStartOffset;\n    // reassemble PES packet\n    const pesData = new Uint8Array(stream.size);\n    for (let j = 0, dataLen = data.length; j < dataLen; j++) {\n      frag = data[j];\n      let len = frag.byteLength;\n      if (payloadStartOffset) {\n        if (payloadStartOffset > len) {\n          // trim full frag if PES header bigger than frag\n          payloadStartOffset -= len;\n          continue;\n        } else {\n          // trim partial frag if PES header smaller than frag\n          frag = frag.subarray(payloadStartOffset);\n          len -= payloadStartOffset;\n          payloadStartOffset = 0;\n        }\n      }\n      pesData.set(frag, i);\n      i += len;\n    }\n    if (pesLen) {\n      // payload size : remove PES header + PES extension\n      pesLen -= pesHdrLen + 3;\n    }\n    return {\n      data: pesData,\n      pts: pesPts,\n      dts: pesDts,\n      len: pesLen\n    };\n  }\n  return null;\n}\n\n/**\n * MP3 demuxer\n */\nclass MP3Demuxer extends BaseAudioDemuxer {\n  resetInitSegment(initSegment, audioCodec, videoCodec, trackDuration) {\n    super.resetInitSegment(initSegment, audioCodec, videoCodec, trackDuration);\n    this._audioTrack = {\n      container: 'audio/mpeg',\n      type: 'audio',\n      id: 2,\n      pid: -1,\n      sequenceNumber: 0,\n      segmentCodec: 'mp3',\n      samples: [],\n      manifestCodec: audioCodec,\n      duration: trackDuration,\n      inputTimeScale: 90000,\n      dropped: 0\n    };\n  }\n  static probe(data) {\n    if (!data) {\n      return false;\n    }\n\n    // check if data contains ID3 timestamp and MPEG sync word\n    // Look for MPEG header | 1111 1111 | 111X XYZX | where X can be either 0 or 1 and Y or Z should be 1\n    // Layer bits (position 14 and 15) in header should be always different from 0 (Layer I or Layer II or Layer III)\n    // More info http://www.mp3-tech.org/programmer/frame_header.html\n    const id3Data = getID3Data(data, 0);\n    let offset = (id3Data == null ? void 0 : id3Data.length) || 0;\n\n    // Check for ac-3|ec-3 sync bytes and return false if present\n    if (id3Data && data[offset] === 0x0b && data[offset + 1] === 0x77 && getTimeStamp(id3Data) !== undefined &&\n    // check the bsid to confirm ac-3 or ec-3 (not mp3)\n    getAudioBSID(data, offset) <= 16) {\n      return false;\n    }\n    for (let length = data.length; offset < length; offset++) {\n      if (probe(data, offset)) {\n        logger.log('MPEG Audio sync word found !');\n        return true;\n      }\n    }\n    return false;\n  }\n  canParse(data, offset) {\n    return canParse(data, offset);\n  }\n  appendFrame(track, data, offset) {\n    if (this.basePTS === null) {\n      return;\n    }\n    return appendFrame$1(track, data, offset, this.basePTS, this.frameIndex);\n  }\n}\n\n/**\n *  AAC helper\n */\n\nclass AAC {\n  static getSilentFrame(codec, channelCount) {\n    switch (codec) {\n      case 'mp4a.40.2':\n        if (channelCount === 1) {\n          return new Uint8Array([0x00, 0xc8, 0x00, 0x80, 0x23, 0x80]);\n        } else if (channelCount === 2) {\n          return new Uint8Array([0x21, 0x00, 0x49, 0x90, 0x02, 0x19, 0x00, 0x23, 0x80]);\n        } else if (channelCount === 3) {\n          return new Uint8Array([0x00, 0xc8, 0x00, 0x80, 0x20, 0x84, 0x01, 0x26, 0x40, 0x08, 0x64, 0x00, 0x8e]);\n        } else if (channelCount === 4) {\n          return new Uint8Array([0x00, 0xc8, 0x00, 0x80, 0x20, 0x84, 0x01, 0x26, 0x40, 0x08, 0x64, 0x00, 0x80, 0x2c, 0x80, 0x08, 0x02, 0x38]);\n        } else if (channelCount === 5) {\n          return new Uint8Array([0x00, 0xc8, 0x00, 0x80, 0x20, 0x84, 0x01, 0x26, 0x40, 0x08, 0x64, 0x00, 0x82, 0x30, 0x04, 0x99, 0x00, 0x21, 0x90, 0x02, 0x38]);\n        } else if (channelCount === 6) {\n          return new Uint8Array([0x00, 0xc8, 0x00, 0x80, 0x20, 0x84, 0x01, 0x26, 0x40, 0x08, 0x64, 0x00, 0x82, 0x30, 0x04, 0x99, 0x00, 0x21, 0x90, 0x02, 0x00, 0xb2, 0x00, 0x20, 0x08, 0xe0]);\n        }\n        break;\n      // handle HE-AAC below (mp4a.40.5 / mp4a.40.29)\n      default:\n        if (channelCount === 1) {\n          // ffmpeg -y -f lavfi -i \"aevalsrc=0:d=0.05\" -c:a libfdk_aac -profile:a aac_he -b:a 4k output.aac && hexdump -v -e '16/1 \"0x%x,\" \"\\n\"' -v output.aac\n          return new Uint8Array([0x1, 0x40, 0x22, 0x80, 0xa3, 0x4e, 0xe6, 0x80, 0xba, 0x8, 0x0, 0x0, 0x0, 0x1c, 0x6, 0xf1, 0xc1, 0xa, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5e]);\n        } else if (channelCount === 2) {\n          // ffmpeg -y -f lavfi -i \"aevalsrc=0|0:d=0.05\" -c:a libfdk_aac -profile:a aac_he_v2 -b:a 4k output.aac && hexdump -v -e '16/1 \"0x%x,\" \"\\n\"' -v output.aac\n          return new Uint8Array([0x1, 0x40, 0x22, 0x80, 0xa3, 0x5e, 0xe6, 0x80, 0xba, 0x8, 0x0, 0x0, 0x0, 0x0, 0x95, 0x0, 0x6, 0xf1, 0xa1, 0xa, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5e]);\n        } else if (channelCount === 3) {\n          // ffmpeg -y -f lavfi -i \"aevalsrc=0|0|0:d=0.05\" -c:a libfdk_aac -profile:a aac_he_v2 -b:a 4k output.aac && hexdump -v -e '16/1 \"0x%x,\" \"\\n\"' -v output.aac\n          return new Uint8Array([0x1, 0x40, 0x22, 0x80, 0xa3, 0x5e, 0xe6, 0x80, 0xba, 0x8, 0x0, 0x0, 0x0, 0x0, 0x95, 0x0, 0x6, 0xf1, 0xa1, 0xa, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5e]);\n        }\n        break;\n    }\n    return undefined;\n  }\n}\n\n/**\n * Generate MP4 Box\n */\n\nconst UINT32_MAX = Math.pow(2, 32) - 1;\nclass MP4 {\n  static init() {\n    MP4.types = {\n      avc1: [],\n      // codingname\n      avcC: [],\n      btrt: [],\n      dinf: [],\n      dref: [],\n      esds: [],\n      ftyp: [],\n      hdlr: [],\n      mdat: [],\n      mdhd: [],\n      mdia: [],\n      mfhd: [],\n      minf: [],\n      moof: [],\n      moov: [],\n      mp4a: [],\n      '.mp3': [],\n      dac3: [],\n      'ac-3': [],\n      mvex: [],\n      mvhd: [],\n      pasp: [],\n      sdtp: [],\n      stbl: [],\n      stco: [],\n      stsc: [],\n      stsd: [],\n      stsz: [],\n      stts: [],\n      tfdt: [],\n      tfhd: [],\n      traf: [],\n      trak: [],\n      trun: [],\n      trex: [],\n      tkhd: [],\n      vmhd: [],\n      smhd: []\n    };\n    let i;\n    for (i in MP4.types) {\n      if (MP4.types.hasOwnProperty(i)) {\n        MP4.types[i] = [i.charCodeAt(0), i.charCodeAt(1), i.charCodeAt(2), i.charCodeAt(3)];\n      }\n    }\n    const videoHdlr = new Uint8Array([0x00,\n    // version 0\n    0x00, 0x00, 0x00,\n    // flags\n    0x00, 0x00, 0x00, 0x00,\n    // pre_defined\n    0x76, 0x69, 0x64, 0x65,\n    // handler_type: 'vide'\n    0x00, 0x00, 0x00, 0x00,\n    // reserved\n    0x00, 0x00, 0x00, 0x00,\n    // reserved\n    0x00, 0x00, 0x00, 0x00,\n    // reserved\n    0x56, 0x69, 0x64, 0x65, 0x6f, 0x48, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x72, 0x00 // name: 'VideoHandler'\n    ]);\n    const audioHdlr = new Uint8Array([0x00,\n    // version 0\n    0x00, 0x00, 0x00,\n    // flags\n    0x00, 0x00, 0x00, 0x00,\n    // pre_defined\n    0x73, 0x6f, 0x75, 0x6e,\n    // handler_type: 'soun'\n    0x00, 0x00, 0x00, 0x00,\n    // reserved\n    0x00, 0x00, 0x00, 0x00,\n    // reserved\n    0x00, 0x00, 0x00, 0x00,\n    // reserved\n    0x53, 0x6f, 0x75, 0x6e, 0x64, 0x48, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x72, 0x00 // name: 'SoundHandler'\n    ]);\n    MP4.HDLR_TYPES = {\n      video: videoHdlr,\n      audio: audioHdlr\n    };\n    const dref = new Uint8Array([0x00,\n    // version 0\n    0x00, 0x00, 0x00,\n    // flags\n    0x00, 0x00, 0x00, 0x01,\n    // entry_count\n    0x00, 0x00, 0x00, 0x0c,\n    // entry_size\n    0x75, 0x72, 0x6c, 0x20,\n    // 'url' type\n    0x00,\n    // version 0\n    0x00, 0x00, 0x01 // entry_flags\n    ]);\n    const stco = new Uint8Array([0x00,\n    // version\n    0x00, 0x00, 0x00,\n    // flags\n    0x00, 0x00, 0x00, 0x00 // entry_count\n    ]);\n    MP4.STTS = MP4.STSC = MP4.STCO = stco;\n    MP4.STSZ = new Uint8Array([0x00,\n    // version\n    0x00, 0x00, 0x00,\n    // flags\n    0x00, 0x00, 0x00, 0x00,\n    // sample_size\n    0x00, 0x00, 0x00, 0x00 // sample_count\n    ]);\n    MP4.VMHD = new Uint8Array([0x00,\n    // version\n    0x00, 0x00, 0x01,\n    // flags\n    0x00, 0x00,\n    // graphicsmode\n    0x00, 0x00, 0x00, 0x00, 0x00, 0x00 // opcolor\n    ]);\n    MP4.SMHD = new Uint8Array([0x00,\n    // version\n    0x00, 0x00, 0x00,\n    // flags\n    0x00, 0x00,\n    // balance\n    0x00, 0x00 // reserved\n    ]);\n    MP4.STSD = new Uint8Array([0x00,\n    // version 0\n    0x00, 0x00, 0x00,\n    // flags\n    0x00, 0x00, 0x00, 0x01]); // entry_count\n\n    const majorBrand = new Uint8Array([105, 115, 111, 109]); // isom\n    const avc1Brand = new Uint8Array([97, 118, 99, 49]); // avc1\n    const minorVersion = new Uint8Array([0, 0, 0, 1]);\n    MP4.FTYP = MP4.box(MP4.types.ftyp, majorBrand, minorVersion, majorBrand, avc1Brand);\n    MP4.DINF = MP4.box(MP4.types.dinf, MP4.box(MP4.types.dref, dref));\n  }\n  static box(type, ...payload) {\n    let size = 8;\n    let i = payload.length;\n    const len = i;\n    // calculate the total size we need to allocate\n    while (i--) {\n      size += payload[i].byteLength;\n    }\n    const result = new Uint8Array(size);\n    result[0] = size >> 24 & 0xff;\n    result[1] = size >> 16 & 0xff;\n    result[2] = size >> 8 & 0xff;\n    result[3] = size & 0xff;\n    result.set(type, 4);\n    // copy the payload into the result\n    for (i = 0, size = 8; i < len; i++) {\n      // copy payload[i] array @ offset size\n      result.set(payload[i], size);\n      size += payload[i].byteLength;\n    }\n    return result;\n  }\n  static hdlr(type) {\n    return MP4.box(MP4.types.hdlr, MP4.HDLR_TYPES[type]);\n  }\n  static mdat(data) {\n    return MP4.box(MP4.types.mdat, data);\n  }\n  static mdhd(timescale, duration) {\n    duration *= timescale;\n    const upperWordDuration = Math.floor(duration / (UINT32_MAX + 1));\n    const lowerWordDuration = Math.floor(duration % (UINT32_MAX + 1));\n    return MP4.box(MP4.types.mdhd, new Uint8Array([0x01,\n    // version 1\n    0x00, 0x00, 0x00,\n    // flags\n    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02,\n    // creation_time\n    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03,\n    // modification_time\n    timescale >> 24 & 0xff, timescale >> 16 & 0xff, timescale >> 8 & 0xff, timescale & 0xff,\n    // timescale\n    upperWordDuration >> 24, upperWordDuration >> 16 & 0xff, upperWordDuration >> 8 & 0xff, upperWordDuration & 0xff, lowerWordDuration >> 24, lowerWordDuration >> 16 & 0xff, lowerWordDuration >> 8 & 0xff, lowerWordDuration & 0xff, 0x55, 0xc4,\n    // 'und' language (undetermined)\n    0x00, 0x00]));\n  }\n  static mdia(track) {\n    return MP4.box(MP4.types.mdia, MP4.mdhd(track.timescale, track.duration), MP4.hdlr(track.type), MP4.minf(track));\n  }\n  static mfhd(sequenceNumber) {\n    return MP4.box(MP4.types.mfhd, new Uint8Array([0x00, 0x00, 0x00, 0x00,\n    // flags\n    sequenceNumber >> 24, sequenceNumber >> 16 & 0xff, sequenceNumber >> 8 & 0xff, sequenceNumber & 0xff // sequence_number\n    ]));\n  }\n  static minf(track) {\n    if (track.type === 'audio') {\n      return MP4.box(MP4.types.minf, MP4.box(MP4.types.smhd, MP4.SMHD), MP4.DINF, MP4.stbl(track));\n    } else {\n      return MP4.box(MP4.types.minf, MP4.box(MP4.types.vmhd, MP4.VMHD), MP4.DINF, MP4.stbl(track));\n    }\n  }\n  static moof(sn, baseMediaDecodeTime, track) {\n    return MP4.box(MP4.types.moof, MP4.mfhd(sn), MP4.traf(track, baseMediaDecodeTime));\n  }\n  static moov(tracks) {\n    let i = tracks.length;\n    const boxes = [];\n    while (i--) {\n      boxes[i] = MP4.trak(tracks[i]);\n    }\n    return MP4.box.apply(null, [MP4.types.moov, MP4.mvhd(tracks[0].timescale, tracks[0].duration)].concat(boxes).concat(MP4.mvex(tracks)));\n  }\n  static mvex(tracks) {\n    let i = tracks.length;\n    const boxes = [];\n    while (i--) {\n      boxes[i] = MP4.trex(tracks[i]);\n    }\n    return MP4.box.apply(null, [MP4.types.mvex, ...boxes]);\n  }\n  static mvhd(timescale, duration) {\n    duration *= timescale;\n    const upperWordDuration = Math.floor(duration / (UINT32_MAX + 1));\n    const lowerWordDuration = Math.floor(duration % (UINT32_MAX + 1));\n    const bytes = new Uint8Array([0x01,\n    // version 1\n    0x00, 0x00, 0x00,\n    // flags\n    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02,\n    // creation_time\n    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03,\n    // modification_time\n    timescale >> 24 & 0xff, timescale >> 16 & 0xff, timescale >> 8 & 0xff, timescale & 0xff,\n    // timescale\n    upperWordDuration >> 24, upperWordDuration >> 16 & 0xff, upperWordDuration >> 8 & 0xff, upperWordDuration & 0xff, lowerWordDuration >> 24, lowerWordDuration >> 16 & 0xff, lowerWordDuration >> 8 & 0xff, lowerWordDuration & 0xff, 0x00, 0x01, 0x00, 0x00,\n    // 1.0 rate\n    0x01, 0x00,\n    // 1.0 volume\n    0x00, 0x00,\n    // reserved\n    0x00, 0x00, 0x00, 0x00,\n    // reserved\n    0x00, 0x00, 0x00, 0x00,\n    // reserved\n    0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00,\n    // transformation: unity matrix\n    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n    // pre_defined\n    0xff, 0xff, 0xff, 0xff // next_track_ID\n    ]);\n    return MP4.box(MP4.types.mvhd, bytes);\n  }\n  static sdtp(track) {\n    const samples = track.samples || [];\n    const bytes = new Uint8Array(4 + samples.length);\n    let i;\n    let flags;\n    // leave the full box header (4 bytes) all zero\n    // write the sample table\n    for (i = 0; i < samples.length; i++) {\n      flags = samples[i].flags;\n      bytes[i + 4] = flags.dependsOn << 4 | flags.isDependedOn << 2 | flags.hasRedundancy;\n    }\n    return MP4.box(MP4.types.sdtp, bytes);\n  }\n  static stbl(track) {\n    return MP4.box(MP4.types.stbl, MP4.stsd(track), MP4.box(MP4.types.stts, MP4.STTS), MP4.box(MP4.types.stsc, MP4.STSC), MP4.box(MP4.types.stsz, MP4.STSZ), MP4.box(MP4.types.stco, MP4.STCO));\n  }\n  static avc1(track) {\n    let sps = [];\n    let pps = [];\n    let i;\n    let data;\n    let len;\n    // assemble the SPSs\n\n    for (i = 0; i < track.sps.length; i++) {\n      data = track.sps[i];\n      len = data.byteLength;\n      sps.push(len >>> 8 & 0xff);\n      sps.push(len & 0xff);\n\n      // SPS\n      sps = sps.concat(Array.prototype.slice.call(data));\n    }\n\n    // assemble the PPSs\n    for (i = 0; i < track.pps.length; i++) {\n      data = track.pps[i];\n      len = data.byteLength;\n      pps.push(len >>> 8 & 0xff);\n      pps.push(len & 0xff);\n      pps = pps.concat(Array.prototype.slice.call(data));\n    }\n    const avcc = MP4.box(MP4.types.avcC, new Uint8Array([0x01,\n    // version\n    sps[3],\n    // profile\n    sps[4],\n    // profile compat\n    sps[5],\n    // level\n    0xfc | 3,\n    // lengthSizeMinusOne, hard-coded to 4 bytes\n    0xe0 | track.sps.length // 3bit reserved (111) + numOfSequenceParameterSets\n    ].concat(sps).concat([track.pps.length // numOfPictureParameterSets\n    ]).concat(pps))); // \"PPS\"\n    const width = track.width;\n    const height = track.height;\n    const hSpacing = track.pixelRatio[0];\n    const vSpacing = track.pixelRatio[1];\n    return MP4.box(MP4.types.avc1, new Uint8Array([0x00, 0x00, 0x00,\n    // reserved\n    0x00, 0x00, 0x00,\n    // reserved\n    0x00, 0x01,\n    // data_reference_index\n    0x00, 0x00,\n    // pre_defined\n    0x00, 0x00,\n    // reserved\n    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n    // pre_defined\n    width >> 8 & 0xff, width & 0xff,\n    // width\n    height >> 8 & 0xff, height & 0xff,\n    // height\n    0x00, 0x48, 0x00, 0x00,\n    // horizresolution\n    0x00, 0x48, 0x00, 0x00,\n    // vertresolution\n    0x00, 0x00, 0x00, 0x00,\n    // reserved\n    0x00, 0x01,\n    // frame_count\n    0x12, 0x64, 0x61, 0x69, 0x6c,\n    // dailymotion/hls.js\n    0x79, 0x6d, 0x6f, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x68, 0x6c, 0x73, 0x2e, 0x6a, 0x73, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n    // compressorname\n    0x00, 0x18,\n    // depth = 24\n    0x11, 0x11]),\n    // pre_defined = -1\n    avcc, MP4.box(MP4.types.btrt, new Uint8Array([0x00, 0x1c, 0x9c, 0x80,\n    // bufferSizeDB\n    0x00, 0x2d, 0xc6, 0xc0,\n    // maxBitrate\n    0x00, 0x2d, 0xc6, 0xc0])),\n    // avgBitrate\n    MP4.box(MP4.types.pasp, new Uint8Array([hSpacing >> 24,\n    // hSpacing\n    hSpacing >> 16 & 0xff, hSpacing >> 8 & 0xff, hSpacing & 0xff, vSpacing >> 24,\n    // vSpacing\n    vSpacing >> 16 & 0xff, vSpacing >> 8 & 0xff, vSpacing & 0xff])));\n  }\n  static esds(track) {\n    const configlen = track.config.length;\n    return new Uint8Array([0x00,\n    // version 0\n    0x00, 0x00, 0x00,\n    // flags\n\n    0x03,\n    // descriptor_type\n    0x17 + configlen,\n    // length\n    0x00, 0x01,\n    // es_id\n    0x00,\n    // stream_priority\n\n    0x04,\n    // descriptor_type\n    0x0f + configlen,\n    // length\n    0x40,\n    // codec : mpeg4_audio\n    0x15,\n    // stream_type\n    0x00, 0x00, 0x00,\n    // buffer_size\n    0x00, 0x00, 0x00, 0x00,\n    // maxBitrate\n    0x00, 0x00, 0x00, 0x00,\n    // avgBitrate\n\n    0x05 // descriptor_type\n    ].concat([configlen]).concat(track.config).concat([0x06, 0x01, 0x02])); // GASpecificConfig)); // length + audio config descriptor\n  }\n  static audioStsd(track) {\n    const samplerate = track.samplerate;\n    return new Uint8Array([0x00, 0x00, 0x00,\n    // reserved\n    0x00, 0x00, 0x00,\n    // reserved\n    0x00, 0x01,\n    // data_reference_index\n    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n    // reserved\n    0x00, track.channelCount,\n    // channelcount\n    0x00, 0x10,\n    // sampleSize:16bits\n    0x00, 0x00, 0x00, 0x00,\n    // reserved2\n    samplerate >> 8 & 0xff, samplerate & 0xff,\n    //\n    0x00, 0x00]);\n  }\n  static mp4a(track) {\n    return MP4.box(MP4.types.mp4a, MP4.audioStsd(track), MP4.box(MP4.types.esds, MP4.esds(track)));\n  }\n  static mp3(track) {\n    return MP4.box(MP4.types['.mp3'], MP4.audioStsd(track));\n  }\n  static ac3(track) {\n    return MP4.box(MP4.types['ac-3'], MP4.audioStsd(track), MP4.box(MP4.types.dac3, track.config));\n  }\n  static stsd(track) {\n    if (track.type === 'audio') {\n      if (track.segmentCodec === 'mp3' && track.codec === 'mp3') {\n        return MP4.box(MP4.types.stsd, MP4.STSD, MP4.mp3(track));\n      }\n      if (track.segmentCodec === 'ac3') {\n        return MP4.box(MP4.types.stsd, MP4.STSD, MP4.ac3(track));\n      }\n      return MP4.box(MP4.types.stsd, MP4.STSD, MP4.mp4a(track));\n    } else {\n      return MP4.box(MP4.types.stsd, MP4.STSD, MP4.avc1(track));\n    }\n  }\n  static tkhd(track) {\n    const id = track.id;\n    const duration = track.duration * track.timescale;\n    const width = track.width;\n    const height = track.height;\n    const upperWordDuration = Math.floor(duration / (UINT32_MAX + 1));\n    const lowerWordDuration = Math.floor(duration % (UINT32_MAX + 1));\n    return MP4.box(MP4.types.tkhd, new Uint8Array([0x01,\n    // version 1\n    0x00, 0x00, 0x07,\n    // flags\n    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02,\n    // creation_time\n    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03,\n    // modification_time\n    id >> 24 & 0xff, id >> 16 & 0xff, id >> 8 & 0xff, id & 0xff,\n    // track_ID\n    0x00, 0x00, 0x00, 0x00,\n    // reserved\n    upperWordDuration >> 24, upperWordDuration >> 16 & 0xff, upperWordDuration >> 8 & 0xff, upperWordDuration & 0xff, lowerWordDuration >> 24, lowerWordDuration >> 16 & 0xff, lowerWordDuration >> 8 & 0xff, lowerWordDuration & 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n    // reserved\n    0x00, 0x00,\n    // layer\n    0x00, 0x00,\n    // alternate_group\n    0x00, 0x00,\n    // non-audio track volume\n    0x00, 0x00,\n    // reserved\n    0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00,\n    // transformation: unity matrix\n    width >> 8 & 0xff, width & 0xff, 0x00, 0x00,\n    // width\n    height >> 8 & 0xff, height & 0xff, 0x00, 0x00 // height\n    ]));\n  }\n  static traf(track, baseMediaDecodeTime) {\n    const sampleDependencyTable = MP4.sdtp(track);\n    const id = track.id;\n    const upperWordBaseMediaDecodeTime = Math.floor(baseMediaDecodeTime / (UINT32_MAX + 1));\n    const lowerWordBaseMediaDecodeTime = Math.floor(baseMediaDecodeTime % (UINT32_MAX + 1));\n    return MP4.box(MP4.types.traf, MP4.box(MP4.types.tfhd, new Uint8Array([0x00,\n    // version 0\n    0x00, 0x00, 0x00,\n    // flags\n    id >> 24, id >> 16 & 0xff, id >> 8 & 0xff, id & 0xff // track_ID\n    ])), MP4.box(MP4.types.tfdt, new Uint8Array([0x01,\n    // version 1\n    0x00, 0x00, 0x00,\n    // flags\n    upperWordBaseMediaDecodeTime >> 24, upperWordBaseMediaDecodeTime >> 16 & 0xff, upperWordBaseMediaDecodeTime >> 8 & 0xff, upperWordBaseMediaDecodeTime & 0xff, lowerWordBaseMediaDecodeTime >> 24, lowerWordBaseMediaDecodeTime >> 16 & 0xff, lowerWordBaseMediaDecodeTime >> 8 & 0xff, lowerWordBaseMediaDecodeTime & 0xff])), MP4.trun(track, sampleDependencyTable.length + 16 +\n    // tfhd\n    20 +\n    // tfdt\n    8 +\n    // traf header\n    16 +\n    // mfhd\n    8 +\n    // moof header\n    8),\n    // mdat header\n    sampleDependencyTable);\n  }\n\n  /**\n   * Generate a track box.\n   * @param track a track definition\n   */\n  static trak(track) {\n    track.duration = track.duration || 0xffffffff;\n    return MP4.box(MP4.types.trak, MP4.tkhd(track), MP4.mdia(track));\n  }\n  static trex(track) {\n    const id = track.id;\n    return MP4.box(MP4.types.trex, new Uint8Array([0x00,\n    // version 0\n    0x00, 0x00, 0x00,\n    // flags\n    id >> 24, id >> 16 & 0xff, id >> 8 & 0xff, id & 0xff,\n    // track_ID\n    0x00, 0x00, 0x00, 0x01,\n    // default_sample_description_index\n    0x00, 0x00, 0x00, 0x00,\n    // default_sample_duration\n    0x00, 0x00, 0x00, 0x00,\n    // default_sample_size\n    0x00, 0x01, 0x00, 0x01 // default_sample_flags\n    ]));\n  }\n  static trun(track, offset) {\n    const samples = track.samples || [];\n    const len = samples.length;\n    const arraylen = 12 + 16 * len;\n    const array = new Uint8Array(arraylen);\n    let i;\n    let sample;\n    let duration;\n    let size;\n    let flags;\n    let cts;\n    offset += 8 + arraylen;\n    array.set([track.type === 'video' ? 0x01 : 0x00,\n    // version 1 for video with signed-int sample_composition_time_offset\n    0x00, 0x0f, 0x01,\n    // flags\n    len >>> 24 & 0xff, len >>> 16 & 0xff, len >>> 8 & 0xff, len & 0xff,\n    // sample_count\n    offset >>> 24 & 0xff, offset >>> 16 & 0xff, offset >>> 8 & 0xff, offset & 0xff // data_offset\n    ], 0);\n    for (i = 0; i < len; i++) {\n      sample = samples[i];\n      duration = sample.duration;\n      size = sample.size;\n      flags = sample.flags;\n      cts = sample.cts;\n      array.set([duration >>> 24 & 0xff, duration >>> 16 & 0xff, duration >>> 8 & 0xff, duration & 0xff,\n      // sample_duration\n      size >>> 24 & 0xff, size >>> 16 & 0xff, size >>> 8 & 0xff, size & 0xff,\n      // sample_size\n      flags.isLeading << 2 | flags.dependsOn, flags.isDependedOn << 6 | flags.hasRedundancy << 4 | flags.paddingValue << 1 | flags.isNonSync, flags.degradPrio & 0xf0 << 8, flags.degradPrio & 0x0f,\n      // sample_flags\n      cts >>> 24 & 0xff, cts >>> 16 & 0xff, cts >>> 8 & 0xff, cts & 0xff // sample_composition_time_offset\n      ], 12 + 16 * i);\n    }\n    return MP4.box(MP4.types.trun, array);\n  }\n  static initSegment(tracks) {\n    if (!MP4.types) {\n      MP4.init();\n    }\n    const movie = MP4.moov(tracks);\n    const result = appendUint8Array(MP4.FTYP, movie);\n    return result;\n  }\n}\nMP4.types = void 0;\nMP4.HDLR_TYPES = void 0;\nMP4.STTS = void 0;\nMP4.STSC = void 0;\nMP4.STCO = void 0;\nMP4.STSZ = void 0;\nMP4.VMHD = void 0;\nMP4.SMHD = void 0;\nMP4.STSD = void 0;\nMP4.FTYP = void 0;\nMP4.DINF = void 0;\n\nconst MPEG_TS_CLOCK_FREQ_HZ = 90000;\nfunction toTimescaleFromBase(baseTime, destScale, srcBase = 1, round = false) {\n  const result = baseTime * destScale * srcBase; // equivalent to `(value * scale) / (1 / base)`\n  return round ? Math.round(result) : result;\n}\nfunction toTimescaleFromScale(baseTime, destScale, srcScale = 1, round = false) {\n  return toTimescaleFromBase(baseTime, destScale, 1 / srcScale, round);\n}\nfunction toMsFromMpegTsClock(baseTime, round = false) {\n  return toTimescaleFromBase(baseTime, 1000, 1 / MPEG_TS_CLOCK_FREQ_HZ, round);\n}\nfunction toMpegTsClockFromTimescale(baseTime, srcScale = 1) {\n  return toTimescaleFromBase(baseTime, MPEG_TS_CLOCK_FREQ_HZ, 1 / srcScale);\n}\n\nconst MAX_SILENT_FRAME_DURATION = 10 * 1000; // 10 seconds\nconst AAC_SAMPLES_PER_FRAME = 1024;\nconst MPEG_AUDIO_SAMPLE_PER_FRAME = 1152;\nconst AC3_SAMPLES_PER_FRAME = 1536;\nlet chromeVersion = null;\nlet safariWebkitVersion = null;\nclass MP4Remuxer {\n  constructor(observer, config, typeSupported, vendor = '') {\n    this.observer = void 0;\n    this.config = void 0;\n    this.typeSupported = void 0;\n    this.ISGenerated = false;\n    this._initPTS = null;\n    this._initDTS = null;\n    this.nextAvcDts = null;\n    this.nextAudioPts = null;\n    this.videoSampleDuration = null;\n    this.isAudioContiguous = false;\n    this.isVideoContiguous = false;\n    this.videoTrackConfig = void 0;\n    this.observer = observer;\n    this.config = config;\n    this.typeSupported = typeSupported;\n    this.ISGenerated = false;\n    if (chromeVersion === null) {\n      const userAgent = navigator.userAgent || '';\n      const result = userAgent.match(/Chrome\\/(\\d+)/i);\n      chromeVersion = result ? parseInt(result[1]) : 0;\n    }\n    if (safariWebkitVersion === null) {\n      const result = navigator.userAgent.match(/Safari\\/(\\d+)/i);\n      safariWebkitVersion = result ? parseInt(result[1]) : 0;\n    }\n  }\n  destroy() {\n    // @ts-ignore\n    this.config = this.videoTrackConfig = this._initPTS = this._initDTS = null;\n  }\n  resetTimeStamp(defaultTimeStamp) {\n    logger.log('[mp4-remuxer]: initPTS & initDTS reset');\n    this._initPTS = this._initDTS = defaultTimeStamp;\n  }\n  resetNextTimestamp() {\n    logger.log('[mp4-remuxer]: reset next timestamp');\n    this.isVideoContiguous = false;\n    this.isAudioContiguous = false;\n  }\n  resetInitSegment() {\n    logger.log('[mp4-remuxer]: ISGenerated flag reset');\n    this.ISGenerated = false;\n    this.videoTrackConfig = undefined;\n  }\n  getVideoStartPts(videoSamples) {\n    // Get the minimum PTS value relative to the first sample's PTS, normalized for 33-bit wrapping\n    let rolloverDetected = false;\n    const firstPts = videoSamples[0].pts;\n    const startPTS = videoSamples.reduce((minPTS, sample) => {\n      let pts = sample.pts;\n      let delta = pts - minPTS;\n      if (delta < -4294967296) {\n        // 2^32, see PTSNormalize for reasoning, but we're hitting a rollover here, and we don't want that to impact the timeOffset calculation\n        rolloverDetected = true;\n        pts = normalizePts(pts, firstPts);\n        delta = pts - minPTS;\n      }\n      if (delta > 0) {\n        return minPTS;\n      }\n      return pts;\n    }, firstPts);\n    if (rolloverDetected) {\n      logger.debug('PTS rollover detected');\n    }\n    return startPTS;\n  }\n  remux(audioTrack, videoTrack, id3Track, textTrack, timeOffset, accurateTimeOffset, flush, playlistType) {\n    let video;\n    let audio;\n    let initSegment;\n    let text;\n    let id3;\n    let independent;\n    let audioTimeOffset = timeOffset;\n    let videoTimeOffset = timeOffset;\n\n    // If we're remuxing audio and video progressively, wait until we've received enough samples for each track before proceeding.\n    // This is done to synchronize the audio and video streams. We know if the current segment will have samples if the \"pid\"\n    // parameter is greater than -1. The pid is set when the PMT is parsed, which contains the tracks list.\n    // However, if the initSegment has already been generated, or we've reached the end of a segment (flush),\n    // then we can remux one track without waiting for the other.\n    const hasAudio = audioTrack.pid > -1;\n    const hasVideo = videoTrack.pid > -1;\n    const length = videoTrack.samples.length;\n    const enoughAudioSamples = audioTrack.samples.length > 0;\n    const enoughVideoSamples = flush && length > 0 || length > 1;\n    const canRemuxAvc = (!hasAudio || enoughAudioSamples) && (!hasVideo || enoughVideoSamples) || this.ISGenerated || flush;\n    if (canRemuxAvc) {\n      if (this.ISGenerated) {\n        var _videoTrack$pixelRati, _config$pixelRatio, _videoTrack$pixelRati2, _config$pixelRatio2;\n        const config = this.videoTrackConfig;\n        if (config && (videoTrack.width !== config.width || videoTrack.height !== config.height || ((_videoTrack$pixelRati = videoTrack.pixelRatio) == null ? void 0 : _videoTrack$pixelRati[0]) !== ((_config$pixelRatio = config.pixelRatio) == null ? void 0 : _config$pixelRatio[0]) || ((_videoTrack$pixelRati2 = videoTrack.pixelRatio) == null ? void 0 : _videoTrack$pixelRati2[1]) !== ((_config$pixelRatio2 = config.pixelRatio) == null ? void 0 : _config$pixelRatio2[1]))) {\n          this.resetInitSegment();\n        }\n      } else {\n        initSegment = this.generateIS(audioTrack, videoTrack, timeOffset, accurateTimeOffset);\n      }\n      const isVideoContiguous = this.isVideoContiguous;\n      let firstKeyFrameIndex = -1;\n      let firstKeyFramePTS;\n      if (enoughVideoSamples) {\n        firstKeyFrameIndex = findKeyframeIndex(videoTrack.samples);\n        if (!isVideoContiguous && this.config.forceKeyFrameOnDiscontinuity) {\n          independent = true;\n          if (firstKeyFrameIndex > 0) {\n            logger.warn(`[mp4-remuxer]: Dropped ${firstKeyFrameIndex} out of ${length} video samples due to a missing keyframe`);\n            const startPTS = this.getVideoStartPts(videoTrack.samples);\n            videoTrack.samples = videoTrack.samples.slice(firstKeyFrameIndex);\n            videoTrack.dropped += firstKeyFrameIndex;\n            videoTimeOffset += (videoTrack.samples[0].pts - startPTS) / videoTrack.inputTimeScale;\n            firstKeyFramePTS = videoTimeOffset;\n          } else if (firstKeyFrameIndex === -1) {\n            logger.warn(`[mp4-remuxer]: No keyframe found out of ${length} video samples`);\n            independent = false;\n          }\n        }\n      }\n      if (this.ISGenerated) {\n        if (enoughAudioSamples && enoughVideoSamples) {\n          // timeOffset is expected to be the offset of the first timestamp of this fragment (first DTS)\n          // if first audio DTS is not aligned with first video DTS then we need to take that into account\n          // when providing timeOffset to remuxAudio / remuxVideo. if we don't do that, there might be a permanent / small\n          // drift between audio and video streams\n          const startPTS = this.getVideoStartPts(videoTrack.samples);\n          const tsDelta = normalizePts(audioTrack.samples[0].pts, startPTS) - startPTS;\n          const audiovideoTimestampDelta = tsDelta / videoTrack.inputTimeScale;\n          audioTimeOffset += Math.max(0, audiovideoTimestampDelta);\n          videoTimeOffset += Math.max(0, -audiovideoTimestampDelta);\n        }\n\n        // Purposefully remuxing audio before video, so that remuxVideo can use nextAudioPts, which is calculated in remuxAudio.\n        if (enoughAudioSamples) {\n          // if initSegment was generated without audio samples, regenerate it again\n          if (!audioTrack.samplerate) {\n            logger.warn('[mp4-remuxer]: regenerate InitSegment as audio detected');\n            initSegment = this.generateIS(audioTrack, videoTrack, timeOffset, accurateTimeOffset);\n          }\n          audio = this.remuxAudio(audioTrack, audioTimeOffset, this.isAudioContiguous, accurateTimeOffset, hasVideo || enoughVideoSamples || playlistType === PlaylistLevelType.AUDIO ? videoTimeOffset : undefined);\n          if (enoughVideoSamples) {\n            const audioTrackLength = audio ? audio.endPTS - audio.startPTS : 0;\n            // if initSegment was generated without video samples, regenerate it again\n            if (!videoTrack.inputTimeScale) {\n              logger.warn('[mp4-remuxer]: regenerate InitSegment as video detected');\n              initSegment = this.generateIS(audioTrack, videoTrack, timeOffset, accurateTimeOffset);\n            }\n            video = this.remuxVideo(videoTrack, videoTimeOffset, isVideoContiguous, audioTrackLength);\n          }\n        } else if (enoughVideoSamples) {\n          video = this.remuxVideo(videoTrack, videoTimeOffset, isVideoContiguous, 0);\n        }\n        if (video) {\n          video.firstKeyFrame = firstKeyFrameIndex;\n          video.independent = firstKeyFrameIndex !== -1;\n          video.firstKeyFramePTS = firstKeyFramePTS;\n        }\n      }\n    }\n\n    // Allow ID3 and text to remux, even if more audio/video samples are required\n    if (this.ISGenerated && this._initPTS && this._initDTS) {\n      if (id3Track.samples.length) {\n        id3 = flushTextTrackMetadataCueSamples(id3Track, timeOffset, this._initPTS, this._initDTS);\n      }\n      if (textTrack.samples.length) {\n        text = flushTextTrackUserdataCueSamples(textTrack, timeOffset, this._initPTS);\n      }\n    }\n    return {\n      audio,\n      video,\n      initSegment,\n      independent,\n      text,\n      id3\n    };\n  }\n  generateIS(audioTrack, videoTrack, timeOffset, accurateTimeOffset) {\n    const audioSamples = audioTrack.samples;\n    const videoSamples = videoTrack.samples;\n    const typeSupported = this.typeSupported;\n    const tracks = {};\n    const _initPTS = this._initPTS;\n    let computePTSDTS = !_initPTS || accurateTimeOffset;\n    let container = 'audio/mp4';\n    let initPTS;\n    let initDTS;\n    let timescale;\n    if (computePTSDTS) {\n      initPTS = initDTS = Infinity;\n    }\n    if (audioTrack.config && audioSamples.length) {\n      // let's use audio sampling rate as MP4 time scale.\n      // rationale is that there is a integer nb of audio frames per audio sample (1024 for AAC)\n      // using audio sampling rate here helps having an integer MP4 frame duration\n      // this avoids potential rounding issue and AV sync issue\n      audioTrack.timescale = audioTrack.samplerate;\n      switch (audioTrack.segmentCodec) {\n        case 'mp3':\n          if (typeSupported.mpeg) {\n            // Chrome and Safari\n            container = 'audio/mpeg';\n            audioTrack.codec = '';\n          } else if (typeSupported.mp3) {\n            // Firefox\n            audioTrack.codec = 'mp3';\n          }\n          break;\n        case 'ac3':\n          audioTrack.codec = 'ac-3';\n          break;\n      }\n      tracks.audio = {\n        id: 'audio',\n        container: container,\n        codec: audioTrack.codec,\n        initSegment: audioTrack.segmentCodec === 'mp3' && typeSupported.mpeg ? new Uint8Array(0) : MP4.initSegment([audioTrack]),\n        metadata: {\n          channelCount: audioTrack.channelCount\n        }\n      };\n      if (computePTSDTS) {\n        timescale = audioTrack.inputTimeScale;\n        if (!_initPTS || timescale !== _initPTS.timescale) {\n          // remember first PTS of this demuxing context. for audio, PTS = DTS\n          initPTS = initDTS = audioSamples[0].pts - Math.round(timescale * timeOffset);\n        } else {\n          computePTSDTS = false;\n        }\n      }\n    }\n    if (videoTrack.sps && videoTrack.pps && videoSamples.length) {\n      // let's use input time scale as MP4 video timescale\n      // we use input time scale straight away to avoid rounding issues on frame duration / cts computation\n      videoTrack.timescale = videoTrack.inputTimeScale;\n      tracks.video = {\n        id: 'main',\n        container: 'video/mp4',\n        codec: videoTrack.codec,\n        initSegment: MP4.initSegment([videoTrack]),\n        metadata: {\n          width: videoTrack.width,\n          height: videoTrack.height\n        }\n      };\n      if (computePTSDTS) {\n        timescale = videoTrack.inputTimeScale;\n        if (!_initPTS || timescale !== _initPTS.timescale) {\n          const startPTS = this.getVideoStartPts(videoSamples);\n          const startOffset = Math.round(timescale * timeOffset);\n          initDTS = Math.min(initDTS, normalizePts(videoSamples[0].dts, startPTS) - startOffset);\n          initPTS = Math.min(initPTS, startPTS - startOffset);\n        } else {\n          computePTSDTS = false;\n        }\n      }\n      this.videoTrackConfig = {\n        width: videoTrack.width,\n        height: videoTrack.height,\n        pixelRatio: videoTrack.pixelRatio\n      };\n    }\n    if (Object.keys(tracks).length) {\n      this.ISGenerated = true;\n      if (computePTSDTS) {\n        this._initPTS = {\n          baseTime: initPTS,\n          timescale: timescale\n        };\n        this._initDTS = {\n          baseTime: initDTS,\n          timescale: timescale\n        };\n      } else {\n        initPTS = timescale = undefined;\n      }\n      return {\n        tracks,\n        initPTS,\n        timescale\n      };\n    }\n  }\n  remuxVideo(track, timeOffset, contiguous, audioTrackLength) {\n    const timeScale = track.inputTimeScale;\n    const inputSamples = track.samples;\n    const outputSamples = [];\n    const nbSamples = inputSamples.length;\n    const initPTS = this._initPTS;\n    let nextAvcDts = this.nextAvcDts;\n    let offset = 8;\n    let mp4SampleDuration = this.videoSampleDuration;\n    let firstDTS;\n    let lastDTS;\n    let minPTS = Number.POSITIVE_INFINITY;\n    let maxPTS = Number.NEGATIVE_INFINITY;\n    let sortSamples = false;\n\n    // if parsed fragment is contiguous with last one, let's use last DTS value as reference\n    if (!contiguous || nextAvcDts === null) {\n      const pts = timeOffset * timeScale;\n      const cts = inputSamples[0].pts - normalizePts(inputSamples[0].dts, inputSamples[0].pts);\n      if (chromeVersion && nextAvcDts !== null && Math.abs(pts - cts - nextAvcDts) < 15000) {\n        // treat as contigous to adjust samples that would otherwise produce video buffer gaps in Chrome\n        contiguous = true;\n      } else {\n        // if not contiguous, let's use target timeOffset\n        nextAvcDts = pts - cts;\n      }\n    }\n\n    // PTS is coded on 33bits, and can loop from -2^32 to 2^32\n    // PTSNormalize will make PTS/DTS value monotonic, we use last known DTS value as reference value\n    const initTime = initPTS.baseTime * timeScale / initPTS.timescale;\n    for (let i = 0; i < nbSamples; i++) {\n      const sample = inputSamples[i];\n      sample.pts = normalizePts(sample.pts - initTime, nextAvcDts);\n      sample.dts = normalizePts(sample.dts - initTime, nextAvcDts);\n      if (sample.dts < inputSamples[i > 0 ? i - 1 : i].dts) {\n        sortSamples = true;\n      }\n    }\n\n    // sort video samples by DTS then PTS then demux id order\n    if (sortSamples) {\n      inputSamples.sort(function (a, b) {\n        const deltadts = a.dts - b.dts;\n        const deltapts = a.pts - b.pts;\n        return deltadts || deltapts;\n      });\n    }\n\n    // Get first/last DTS\n    firstDTS = inputSamples[0].dts;\n    lastDTS = inputSamples[inputSamples.length - 1].dts;\n\n    // Sample duration (as expected by trun MP4 boxes), should be the delta between sample DTS\n    // set this constant duration as being the avg delta between consecutive DTS.\n    const inputDuration = lastDTS - firstDTS;\n    const averageSampleDuration = inputDuration ? Math.round(inputDuration / (nbSamples - 1)) : mp4SampleDuration || track.inputTimeScale / 30;\n\n    // if fragment are contiguous, detect hole/overlapping between fragments\n    if (contiguous) {\n      // check timestamp continuity across consecutive fragments (this is to remove inter-fragment gap/hole)\n      const delta = firstDTS - nextAvcDts;\n      const foundHole = delta > averageSampleDuration;\n      const foundOverlap = delta < -1;\n      if (foundHole || foundOverlap) {\n        if (foundHole) {\n          logger.warn(`AVC: ${toMsFromMpegTsClock(delta, true)} ms (${delta}dts) hole between fragments detected at ${timeOffset.toFixed(3)}`);\n        } else {\n          logger.warn(`AVC: ${toMsFromMpegTsClock(-delta, true)} ms (${delta}dts) overlapping between fragments detected at ${timeOffset.toFixed(3)}`);\n        }\n        if (!foundOverlap || nextAvcDts >= inputSamples[0].pts || chromeVersion) {\n          firstDTS = nextAvcDts;\n          const firstPTS = inputSamples[0].pts - delta;\n          if (foundHole) {\n            inputSamples[0].dts = firstDTS;\n            inputSamples[0].pts = firstPTS;\n          } else {\n            for (let i = 0; i < inputSamples.length; i++) {\n              if (inputSamples[i].dts > firstPTS) {\n                break;\n              }\n              inputSamples[i].dts -= delta;\n              inputSamples[i].pts -= delta;\n            }\n          }\n          logger.log(`Video: Initial PTS/DTS adjusted: ${toMsFromMpegTsClock(firstPTS, true)}/${toMsFromMpegTsClock(firstDTS, true)}, delta: ${toMsFromMpegTsClock(delta, true)} ms`);\n        }\n      }\n    }\n    firstDTS = Math.max(0, firstDTS);\n    let nbNalu = 0;\n    let naluLen = 0;\n    let dtsStep = firstDTS;\n    for (let i = 0; i < nbSamples; i++) {\n      // compute total/avc sample length and nb of NAL units\n      const sample = inputSamples[i];\n      const units = sample.units;\n      const nbUnits = units.length;\n      let sampleLen = 0;\n      for (let j = 0; j < nbUnits; j++) {\n        sampleLen += units[j].data.length;\n      }\n      naluLen += sampleLen;\n      nbNalu += nbUnits;\n      sample.length = sampleLen;\n\n      // ensure sample monotonic DTS\n      if (sample.dts < dtsStep) {\n        sample.dts = dtsStep;\n        dtsStep += averageSampleDuration / 4 | 0 || 1;\n      } else {\n        dtsStep = sample.dts;\n      }\n      minPTS = Math.min(sample.pts, minPTS);\n      maxPTS = Math.max(sample.pts, maxPTS);\n    }\n    lastDTS = inputSamples[nbSamples - 1].dts;\n\n    /* concatenate the video data and construct the mdat in place\n      (need 8 more bytes to fill length and mpdat type) */\n    const mdatSize = naluLen + 4 * nbNalu + 8;\n    let mdat;\n    try {\n      mdat = new Uint8Array(mdatSize);\n    } catch (err) {\n      this.observer.emit(Events.ERROR, Events.ERROR, {\n        type: ErrorTypes.MUX_ERROR,\n        details: ErrorDetails.REMUX_ALLOC_ERROR,\n        fatal: false,\n        error: err,\n        bytes: mdatSize,\n        reason: `fail allocating video mdat ${mdatSize}`\n      });\n      return;\n    }\n    const view = new DataView(mdat.buffer);\n    view.setUint32(0, mdatSize);\n    mdat.set(MP4.types.mdat, 4);\n    let stretchedLastFrame = false;\n    let minDtsDelta = Number.POSITIVE_INFINITY;\n    let minPtsDelta = Number.POSITIVE_INFINITY;\n    let maxDtsDelta = Number.NEGATIVE_INFINITY;\n    let maxPtsDelta = Number.NEGATIVE_INFINITY;\n    for (let i = 0; i < nbSamples; i++) {\n      const VideoSample = inputSamples[i];\n      const VideoSampleUnits = VideoSample.units;\n      let mp4SampleLength = 0;\n      // convert NALU bitstream to MP4 format (prepend NALU with size field)\n      for (let j = 0, nbUnits = VideoSampleUnits.length; j < nbUnits; j++) {\n        const unit = VideoSampleUnits[j];\n        const unitData = unit.data;\n        const unitDataLen = unit.data.byteLength;\n        view.setUint32(offset, unitDataLen);\n        offset += 4;\n        mdat.set(unitData, offset);\n        offset += unitDataLen;\n        mp4SampleLength += 4 + unitDataLen;\n      }\n\n      // expected sample duration is the Decoding Timestamp diff of consecutive samples\n      let ptsDelta;\n      if (i < nbSamples - 1) {\n        mp4SampleDuration = inputSamples[i + 1].dts - VideoSample.dts;\n        ptsDelta = inputSamples[i + 1].pts - VideoSample.pts;\n      } else {\n        const config = this.config;\n        const lastFrameDuration = i > 0 ? VideoSample.dts - inputSamples[i - 1].dts : averageSampleDuration;\n        ptsDelta = i > 0 ? VideoSample.pts - inputSamples[i - 1].pts : averageSampleDuration;\n        if (config.stretchShortVideoTrack && this.nextAudioPts !== null) {\n          // In some cases, a segment's audio track duration may exceed the video track duration.\n          // Since we've already remuxed audio, and we know how long the audio track is, we look to\n          // see if the delta to the next segment is longer than maxBufferHole.\n          // If so, playback would potentially get stuck, so we artificially inflate\n          // the duration of the last frame to minimize any potential gap between segments.\n          const gapTolerance = Math.floor(config.maxBufferHole * timeScale);\n          const deltaToFrameEnd = (audioTrackLength ? minPTS + audioTrackLength * timeScale : this.nextAudioPts) - VideoSample.pts;\n          if (deltaToFrameEnd > gapTolerance) {\n            // We subtract lastFrameDuration from deltaToFrameEnd to try to prevent any video\n            // frame overlap. maxBufferHole should be >> lastFrameDuration anyway.\n            mp4SampleDuration = deltaToFrameEnd - lastFrameDuration;\n            if (mp4SampleDuration < 0) {\n              mp4SampleDuration = lastFrameDuration;\n            } else {\n              stretchedLastFrame = true;\n            }\n            logger.log(`[mp4-remuxer]: It is approximately ${deltaToFrameEnd / 90} ms to the next segment; using duration ${mp4SampleDuration / 90} ms for the last video frame.`);\n          } else {\n            mp4SampleDuration = lastFrameDuration;\n          }\n        } else {\n          mp4SampleDuration = lastFrameDuration;\n        }\n      }\n      const compositionTimeOffset = Math.round(VideoSample.pts - VideoSample.dts);\n      minDtsDelta = Math.min(minDtsDelta, mp4SampleDuration);\n      maxDtsDelta = Math.max(maxDtsDelta, mp4SampleDuration);\n      minPtsDelta = Math.min(minPtsDelta, ptsDelta);\n      maxPtsDelta = Math.max(maxPtsDelta, ptsDelta);\n      outputSamples.push(new Mp4Sample(VideoSample.key, mp4SampleDuration, mp4SampleLength, compositionTimeOffset));\n    }\n    if (outputSamples.length) {\n      if (chromeVersion) {\n        if (chromeVersion < 70) {\n          // Chrome workaround, mark first sample as being a Random Access Point (keyframe) to avoid sourcebuffer append issue\n          // https://code.google.com/p/chromium/issues/detail?id=229412\n          const flags = outputSamples[0].flags;\n          flags.dependsOn = 2;\n          flags.isNonSync = 0;\n        }\n      } else if (safariWebkitVersion) {\n        // Fix for \"CNN special report, with CC\" in test-streams (Safari browser only)\n        // Ignore DTS when frame durations are irregular. Safari MSE does not handle this leading to gaps.\n        if (maxPtsDelta - minPtsDelta < maxDtsDelta - minDtsDelta && averageSampleDuration / maxDtsDelta < 0.025 && outputSamples[0].cts === 0) {\n          logger.warn('Found irregular gaps in sample duration. Using PTS instead of DTS to determine MP4 sample duration.');\n          let dts = firstDTS;\n          for (let i = 0, len = outputSamples.length; i < len; i++) {\n            const nextDts = dts + outputSamples[i].duration;\n            const pts = dts + outputSamples[i].cts;\n            if (i < len - 1) {\n              const nextPts = nextDts + outputSamples[i + 1].cts;\n              outputSamples[i].duration = nextPts - pts;\n            } else {\n              outputSamples[i].duration = i ? outputSamples[i - 1].duration : averageSampleDuration;\n            }\n            outputSamples[i].cts = 0;\n            dts = nextDts;\n          }\n        }\n      }\n    }\n    // next AVC sample DTS should be equal to last sample DTS + last sample duration (in PES timescale)\n    mp4SampleDuration = stretchedLastFrame || !mp4SampleDuration ? averageSampleDuration : mp4SampleDuration;\n    this.nextAvcDts = nextAvcDts = lastDTS + mp4SampleDuration;\n    this.videoSampleDuration = mp4SampleDuration;\n    this.isVideoContiguous = true;\n    const moof = MP4.moof(track.sequenceNumber++, firstDTS, _extends({}, track, {\n      samples: outputSamples\n    }));\n    const type = 'video';\n    const data = {\n      data1: moof,\n      data2: mdat,\n      startPTS: minPTS / timeScale,\n      endPTS: (maxPTS + mp4SampleDuration) / timeScale,\n      startDTS: firstDTS / timeScale,\n      endDTS: nextAvcDts / timeScale,\n      type,\n      hasAudio: false,\n      hasVideo: true,\n      nb: outputSamples.length,\n      dropped: track.dropped\n    };\n    track.samples = [];\n    track.dropped = 0;\n    return data;\n  }\n  getSamplesPerFrame(track) {\n    switch (track.segmentCodec) {\n      case 'mp3':\n        return MPEG_AUDIO_SAMPLE_PER_FRAME;\n      case 'ac3':\n        return AC3_SAMPLES_PER_FRAME;\n      default:\n        return AAC_SAMPLES_PER_FRAME;\n    }\n  }\n  remuxAudio(track, timeOffset, contiguous, accurateTimeOffset, videoTimeOffset) {\n    const inputTimeScale = track.inputTimeScale;\n    const mp4timeScale = track.samplerate ? track.samplerate : inputTimeScale;\n    const scaleFactor = inputTimeScale / mp4timeScale;\n    const mp4SampleDuration = this.getSamplesPerFrame(track);\n    const inputSampleDuration = mp4SampleDuration * scaleFactor;\n    const initPTS = this._initPTS;\n    const rawMPEG = track.segmentCodec === 'mp3' && this.typeSupported.mpeg;\n    const outputSamples = [];\n    const alignedWithVideo = videoTimeOffset !== undefined;\n    let inputSamples = track.samples;\n    let offset = rawMPEG ? 0 : 8;\n    let nextAudioPts = this.nextAudioPts || -1;\n\n    // window.audioSamples ? window.audioSamples.push(inputSamples.map(s => s.pts)) : (window.audioSamples = [inputSamples.map(s => s.pts)]);\n\n    // for audio samples, also consider consecutive fragments as being contiguous (even if a level switch occurs),\n    // for sake of clarity:\n    // consecutive fragments are frags with\n    //  - less than 100ms gaps between new time offset (if accurate) and next expected PTS OR\n    //  - less than 20 audio frames distance\n    // contiguous fragments are consecutive fragments from same quality level (same level, new SN = old SN + 1)\n    // this helps ensuring audio continuity\n    // and this also avoids audio glitches/cut when switching quality, or reporting wrong duration on first audio frame\n    const timeOffsetMpegTS = timeOffset * inputTimeScale;\n    const initTime = initPTS.baseTime * inputTimeScale / initPTS.timescale;\n    this.isAudioContiguous = contiguous = contiguous || inputSamples.length && nextAudioPts > 0 && (accurateTimeOffset && Math.abs(timeOffsetMpegTS - nextAudioPts) < 9000 || Math.abs(normalizePts(inputSamples[0].pts - initTime, timeOffsetMpegTS) - nextAudioPts) < 20 * inputSampleDuration);\n\n    // compute normalized PTS\n    inputSamples.forEach(function (sample) {\n      sample.pts = normalizePts(sample.pts - initTime, timeOffsetMpegTS);\n    });\n    if (!contiguous || nextAudioPts < 0) {\n      // filter out sample with negative PTS that are not playable anyway\n      // if we don't remove these negative samples, they will shift all audio samples forward.\n      // leading to audio overlap between current / next fragment\n      inputSamples = inputSamples.filter(sample => sample.pts >= 0);\n\n      // in case all samples have negative PTS, and have been filtered out, return now\n      if (!inputSamples.length) {\n        return;\n      }\n      if (videoTimeOffset === 0) {\n        // Set the start to 0 to match video so that start gaps larger than inputSampleDuration are filled with silence\n        nextAudioPts = 0;\n      } else if (accurateTimeOffset && !alignedWithVideo) {\n        // When not seeking, not live, and LevelDetails.PTSKnown, use fragment start as predicted next audio PTS\n        nextAudioPts = Math.max(0, timeOffsetMpegTS);\n      } else {\n        // if frags are not contiguous and if we cant trust time offset, let's use first sample PTS as next audio PTS\n        nextAudioPts = inputSamples[0].pts;\n      }\n    }\n\n    // If the audio track is missing samples, the frames seem to get \"left-shifted\" within the\n    // resulting mp4 segment, causing sync issues and leaving gaps at the end of the audio segment.\n    // In an effort to prevent this from happening, we inject frames here where there are gaps.\n    // When possible, we inject a silent frame; when that's not possible, we duplicate the last\n    // frame.\n\n    if (track.segmentCodec === 'aac') {\n      const maxAudioFramesDrift = this.config.maxAudioFramesDrift;\n      for (let i = 0, nextPts = nextAudioPts; i < inputSamples.length; i++) {\n        // First, let's see how far off this frame is from where we expect it to be\n        const sample = inputSamples[i];\n        const pts = sample.pts;\n        const delta = pts - nextPts;\n        const duration = Math.abs(1000 * delta / inputTimeScale);\n\n        // When remuxing with video, if we're overlapping by more than a duration, drop this sample to stay in sync\n        if (delta <= -maxAudioFramesDrift * inputSampleDuration && alignedWithVideo) {\n          if (i === 0) {\n            logger.warn(`Audio frame @ ${(pts / inputTimeScale).toFixed(3)}s overlaps nextAudioPts by ${Math.round(1000 * delta / inputTimeScale)} ms.`);\n            this.nextAudioPts = nextAudioPts = nextPts = pts;\n          }\n        } // eslint-disable-line brace-style\n\n        // Insert missing frames if:\n        // 1: We're more than maxAudioFramesDrift frame away\n        // 2: Not more than MAX_SILENT_FRAME_DURATION away\n        // 3: currentTime (aka nextPtsNorm) is not 0\n        // 4: remuxing with video (videoTimeOffset !== undefined)\n        else if (delta >= maxAudioFramesDrift * inputSampleDuration && duration < MAX_SILENT_FRAME_DURATION && alignedWithVideo) {\n          let missing = Math.round(delta / inputSampleDuration);\n          // Adjust nextPts so that silent samples are aligned with media pts. This will prevent media samples from\n          // later being shifted if nextPts is based on timeOffset and delta is not a multiple of inputSampleDuration.\n          nextPts = pts - missing * inputSampleDuration;\n          if (nextPts < 0) {\n            missing--;\n            nextPts += inputSampleDuration;\n          }\n          if (i === 0) {\n            this.nextAudioPts = nextAudioPts = nextPts;\n          }\n          logger.warn(`[mp4-remuxer]: Injecting ${missing} audio frame @ ${(nextPts / inputTimeScale).toFixed(3)}s due to ${Math.round(1000 * delta / inputTimeScale)} ms gap.`);\n          for (let j = 0; j < missing; j++) {\n            const newStamp = Math.max(nextPts, 0);\n            let fillFrame = AAC.getSilentFrame(track.manifestCodec || track.codec, track.channelCount);\n            if (!fillFrame) {\n              logger.log('[mp4-remuxer]: Unable to get silent frame for given audio codec; duplicating last frame instead.');\n              fillFrame = sample.unit.subarray();\n            }\n            inputSamples.splice(i, 0, {\n              unit: fillFrame,\n              pts: newStamp\n            });\n            nextPts += inputSampleDuration;\n            i++;\n          }\n        }\n        sample.pts = nextPts;\n        nextPts += inputSampleDuration;\n      }\n    }\n    let firstPTS = null;\n    let lastPTS = null;\n    let mdat;\n    let mdatSize = 0;\n    let sampleLength = inputSamples.length;\n    while (sampleLength--) {\n      mdatSize += inputSamples[sampleLength].unit.byteLength;\n    }\n    for (let j = 0, _nbSamples = inputSamples.length; j < _nbSamples; j++) {\n      const audioSample = inputSamples[j];\n      const unit = audioSample.unit;\n      let pts = audioSample.pts;\n      if (lastPTS !== null) {\n        // If we have more than one sample, set the duration of the sample to the \"real\" duration; the PTS diff with\n        // the previous sample\n        const prevSample = outputSamples[j - 1];\n        prevSample.duration = Math.round((pts - lastPTS) / scaleFactor);\n      } else {\n        if (contiguous && track.segmentCodec === 'aac') {\n          // set PTS/DTS to expected PTS/DTS\n          pts = nextAudioPts;\n        }\n        // remember first PTS of our audioSamples\n        firstPTS = pts;\n        if (mdatSize > 0) {\n          /* concatenate the audio data and construct the mdat in place\n            (need 8 more bytes to fill length and mdat type) */\n          mdatSize += offset;\n          try {\n            mdat = new Uint8Array(mdatSize);\n          } catch (err) {\n            this.observer.emit(Events.ERROR, Events.ERROR, {\n              type: ErrorTypes.MUX_ERROR,\n              details: ErrorDetails.REMUX_ALLOC_ERROR,\n              fatal: false,\n              error: err,\n              bytes: mdatSize,\n              reason: `fail allocating audio mdat ${mdatSize}`\n            });\n            return;\n          }\n          if (!rawMPEG) {\n            const view = new DataView(mdat.buffer);\n            view.setUint32(0, mdatSize);\n            mdat.set(MP4.types.mdat, 4);\n          }\n        } else {\n          // no audio samples\n          return;\n        }\n      }\n      mdat.set(unit, offset);\n      const unitLen = unit.byteLength;\n      offset += unitLen;\n      // Default the sample's duration to the computed mp4SampleDuration, which will either be 1024 for AAC or 1152 for MPEG\n      // In the case that we have 1 sample, this will be the duration. If we have more than one sample, the duration\n      // becomes the PTS diff with the previous sample\n      outputSamples.push(new Mp4Sample(true, mp4SampleDuration, unitLen, 0));\n      lastPTS = pts;\n    }\n\n    // We could end up with no audio samples if all input samples were overlapping with the previously remuxed ones\n    const nbSamples = outputSamples.length;\n    if (!nbSamples) {\n      return;\n    }\n\n    // The next audio sample PTS should be equal to last sample PTS + duration\n    const lastSample = outputSamples[outputSamples.length - 1];\n    this.nextAudioPts = nextAudioPts = lastPTS + scaleFactor * lastSample.duration;\n\n    // Set the track samples from inputSamples to outputSamples before remuxing\n    const moof = rawMPEG ? new Uint8Array(0) : MP4.moof(track.sequenceNumber++, firstPTS / scaleFactor, _extends({}, track, {\n      samples: outputSamples\n    }));\n\n    // Clear the track samples. This also clears the samples array in the demuxer, since the reference is shared\n    track.samples = [];\n    const start = firstPTS / inputTimeScale;\n    const end = nextAudioPts / inputTimeScale;\n    const type = 'audio';\n    const audioData = {\n      data1: moof,\n      data2: mdat,\n      startPTS: start,\n      endPTS: end,\n      startDTS: start,\n      endDTS: end,\n      type,\n      hasAudio: true,\n      hasVideo: false,\n      nb: nbSamples\n    };\n    this.isAudioContiguous = true;\n    return audioData;\n  }\n  remuxEmptyAudio(track, timeOffset, contiguous, videoData) {\n    const inputTimeScale = track.inputTimeScale;\n    const mp4timeScale = track.samplerate ? track.samplerate : inputTimeScale;\n    const scaleFactor = inputTimeScale / mp4timeScale;\n    const nextAudioPts = this.nextAudioPts;\n    // sync with video's timestamp\n    const initDTS = this._initDTS;\n    const init90kHz = initDTS.baseTime * 90000 / initDTS.timescale;\n    const startDTS = (nextAudioPts !== null ? nextAudioPts : videoData.startDTS * inputTimeScale) + init90kHz;\n    const endDTS = videoData.endDTS * inputTimeScale + init90kHz;\n    // one sample's duration value\n    const frameDuration = scaleFactor * AAC_SAMPLES_PER_FRAME;\n    // samples count of this segment's duration\n    const nbSamples = Math.ceil((endDTS - startDTS) / frameDuration);\n    // silent frame\n    const silentFrame = AAC.getSilentFrame(track.manifestCodec || track.codec, track.channelCount);\n    logger.warn('[mp4-remuxer]: remux empty Audio');\n    // Can't remux if we can't generate a silent frame...\n    if (!silentFrame) {\n      logger.trace('[mp4-remuxer]: Unable to remuxEmptyAudio since we were unable to get a silent frame for given audio codec');\n      return;\n    }\n    const samples = [];\n    for (let i = 0; i < nbSamples; i++) {\n      const stamp = startDTS + i * frameDuration;\n      samples.push({\n        unit: silentFrame,\n        pts: stamp,\n        dts: stamp\n      });\n    }\n    track.samples = samples;\n    return this.remuxAudio(track, timeOffset, contiguous, false);\n  }\n}\nfunction normalizePts(value, reference) {\n  let offset;\n  if (reference === null) {\n    return value;\n  }\n  if (reference < value) {\n    // - 2^33\n    offset = -8589934592;\n  } else {\n    // + 2^33\n    offset = 8589934592;\n  }\n  /* PTS is 33bit (from 0 to 2^33 -1)\n    if diff between value and reference is bigger than half of the amplitude (2^32) then it means that\n    PTS looping occured. fill the gap */\n  while (Math.abs(value - reference) > 4294967296) {\n    value += offset;\n  }\n  return value;\n}\nfunction findKeyframeIndex(samples) {\n  for (let i = 0; i < samples.length; i++) {\n    if (samples[i].key) {\n      return i;\n    }\n  }\n  return -1;\n}\nfunction flushTextTrackMetadataCueSamples(track, timeOffset, initPTS, initDTS) {\n  const length = track.samples.length;\n  if (!length) {\n    return;\n  }\n  const inputTimeScale = track.inputTimeScale;\n  for (let index = 0; index < length; index++) {\n    const sample = track.samples[index];\n    // setting id3 pts, dts to relative time\n    // using this._initPTS and this._initDTS to calculate relative time\n    sample.pts = normalizePts(sample.pts - initPTS.baseTime * inputTimeScale / initPTS.timescale, timeOffset * inputTimeScale) / inputTimeScale;\n    sample.dts = normalizePts(sample.dts - initDTS.baseTime * inputTimeScale / initDTS.timescale, timeOffset * inputTimeScale) / inputTimeScale;\n  }\n  const samples = track.samples;\n  track.samples = [];\n  return {\n    samples\n  };\n}\nfunction flushTextTrackUserdataCueSamples(track, timeOffset, initPTS) {\n  const length = track.samples.length;\n  if (!length) {\n    return;\n  }\n  const inputTimeScale = track.inputTimeScale;\n  for (let index = 0; index < length; index++) {\n    const sample = track.samples[index];\n    // setting text pts, dts to relative time\n    // using this._initPTS and this._initDTS to calculate relative time\n    sample.pts = normalizePts(sample.pts - initPTS.baseTime * inputTimeScale / initPTS.timescale, timeOffset * inputTimeScale) / inputTimeScale;\n  }\n  track.samples.sort((a, b) => a.pts - b.pts);\n  const samples = track.samples;\n  track.samples = [];\n  return {\n    samples\n  };\n}\nclass Mp4Sample {\n  constructor(isKeyframe, duration, size, cts) {\n    this.size = void 0;\n    this.duration = void 0;\n    this.cts = void 0;\n    this.flags = void 0;\n    this.duration = duration;\n    this.size = size;\n    this.cts = cts;\n    this.flags = {\n      isLeading: 0,\n      isDependedOn: 0,\n      hasRedundancy: 0,\n      degradPrio: 0,\n      dependsOn: isKeyframe ? 2 : 1,\n      isNonSync: isKeyframe ? 0 : 1\n    };\n  }\n}\n\nclass PassThroughRemuxer {\n  constructor() {\n    this.emitInitSegment = false;\n    this.audioCodec = void 0;\n    this.videoCodec = void 0;\n    this.initData = void 0;\n    this.initPTS = null;\n    this.initTracks = void 0;\n    this.lastEndTime = null;\n  }\n  destroy() {}\n  resetTimeStamp(defaultInitPTS) {\n    this.initPTS = defaultInitPTS;\n    this.lastEndTime = null;\n  }\n  resetNextTimestamp() {\n    this.lastEndTime = null;\n  }\n  resetInitSegment(initSegment, audioCodec, videoCodec, decryptdata) {\n    this.audioCodec = audioCodec;\n    this.videoCodec = videoCodec;\n    this.generateInitSegment(patchEncyptionData(initSegment, decryptdata));\n    this.emitInitSegment = true;\n  }\n  generateInitSegment(initSegment) {\n    let {\n      audioCodec,\n      videoCodec\n    } = this;\n    if (!(initSegment != null && initSegment.byteLength)) {\n      this.initTracks = undefined;\n      this.initData = undefined;\n      return;\n    }\n    const initData = this.initData = parseInitSegment(initSegment);\n\n    // Get codec from initSegment or fallback to default\n    if (initData.audio) {\n      audioCodec = getParsedTrackCodec(initData.audio, ElementaryStreamTypes.AUDIO);\n    }\n    if (initData.video) {\n      videoCodec = getParsedTrackCodec(initData.video, ElementaryStreamTypes.VIDEO);\n    }\n    const tracks = {};\n    if (initData.audio && initData.video) {\n      tracks.audiovideo = {\n        container: 'video/mp4',\n        codec: audioCodec + ',' + videoCodec,\n        initSegment,\n        id: 'main'\n      };\n    } else if (initData.audio) {\n      tracks.audio = {\n        container: 'audio/mp4',\n        codec: audioCodec,\n        initSegment,\n        id: 'audio'\n      };\n    } else if (initData.video) {\n      tracks.video = {\n        container: 'video/mp4',\n        codec: videoCodec,\n        initSegment,\n        id: 'main'\n      };\n    } else {\n      logger.warn('[passthrough-remuxer.ts]: initSegment does not contain moov or trak boxes.');\n    }\n    this.initTracks = tracks;\n  }\n  remux(audioTrack, videoTrack, id3Track, textTrack, timeOffset, accurateTimeOffset) {\n    var _initData, _initData2;\n    let {\n      initPTS,\n      lastEndTime\n    } = this;\n    const result = {\n      audio: undefined,\n      video: undefined,\n      text: textTrack,\n      id3: id3Track,\n      initSegment: undefined\n    };\n\n    // If we haven't yet set a lastEndDTS, or it was reset, set it to the provided timeOffset. We want to use the\n    // lastEndDTS over timeOffset whenever possible; during progressive playback, the media source will not update\n    // the media duration (which is what timeOffset is provided as) before we need to process the next chunk.\n    if (!isFiniteNumber(lastEndTime)) {\n      lastEndTime = this.lastEndTime = timeOffset || 0;\n    }\n\n    // The binary segment data is added to the videoTrack in the mp4demuxer. We don't check to see if the data is only\n    // audio or video (or both); adding it to video was an arbitrary choice.\n    const data = videoTrack.samples;\n    if (!(data != null && data.length)) {\n      return result;\n    }\n    const initSegment = {\n      initPTS: undefined,\n      timescale: 1\n    };\n    let initData = this.initData;\n    if (!((_initData = initData) != null && _initData.length)) {\n      this.generateInitSegment(data);\n      initData = this.initData;\n    }\n    if (!((_initData2 = initData) != null && _initData2.length)) {\n      // We can't remux if the initSegment could not be generated\n      logger.warn('[passthrough-remuxer.ts]: Failed to generate initSegment.');\n      return result;\n    }\n    if (this.emitInitSegment) {\n      initSegment.tracks = this.initTracks;\n      this.emitInitSegment = false;\n    }\n    const duration = getDuration(data, initData);\n    const startDTS = getStartDTS(initData, data);\n    const decodeTime = startDTS === null ? timeOffset : startDTS;\n    if (isInvalidInitPts(initPTS, decodeTime, timeOffset, duration) || initSegment.timescale !== initPTS.timescale && accurateTimeOffset) {\n      initSegment.initPTS = decodeTime - timeOffset;\n      if (initPTS && initPTS.timescale === 1) {\n        logger.warn(`Adjusting initPTS by ${initSegment.initPTS - initPTS.baseTime}`);\n      }\n      this.initPTS = initPTS = {\n        baseTime: initSegment.initPTS,\n        timescale: 1\n      };\n    }\n    const startTime = audioTrack ? decodeTime - initPTS.baseTime / initPTS.timescale : lastEndTime;\n    const endTime = startTime + duration;\n    offsetStartDTS(initData, data, initPTS.baseTime / initPTS.timescale);\n    if (duration > 0) {\n      this.lastEndTime = endTime;\n    } else {\n      logger.warn('Duration parsed from mp4 should be greater than zero');\n      this.resetNextTimestamp();\n    }\n    const hasAudio = !!initData.audio;\n    const hasVideo = !!initData.video;\n    let type = '';\n    if (hasAudio) {\n      type += 'audio';\n    }\n    if (hasVideo) {\n      type += 'video';\n    }\n    const track = {\n      data1: data,\n      startPTS: startTime,\n      startDTS: startTime,\n      endPTS: endTime,\n      endDTS: endTime,\n      type,\n      hasAudio,\n      hasVideo,\n      nb: 1,\n      dropped: 0\n    };\n    result.audio = track.type === 'audio' ? track : undefined;\n    result.video = track.type !== 'audio' ? track : undefined;\n    result.initSegment = initSegment;\n    result.id3 = flushTextTrackMetadataCueSamples(id3Track, timeOffset, initPTS, initPTS);\n    if (textTrack.samples.length) {\n      result.text = flushTextTrackUserdataCueSamples(textTrack, timeOffset, initPTS);\n    }\n    return result;\n  }\n}\nfunction isInvalidInitPts(initPTS, startDTS, timeOffset, duration) {\n  if (initPTS === null) {\n    return true;\n  }\n  // InitPTS is invalid when distance from program would be more than segment duration or a minimum of one second\n  const minDuration = Math.max(duration, 1);\n  const startTime = startDTS - initPTS.baseTime / initPTS.timescale;\n  return Math.abs(startTime - timeOffset) > minDuration;\n}\nfunction getParsedTrackCodec(track, type) {\n  const parsedCodec = track == null ? void 0 : track.codec;\n  if (parsedCodec && parsedCodec.length > 4) {\n    return parsedCodec;\n  }\n  if (type === ElementaryStreamTypes.AUDIO) {\n    if (parsedCodec === 'ec-3' || parsedCodec === 'ac-3' || parsedCodec === 'alac') {\n      return parsedCodec;\n    }\n    if (parsedCodec === 'fLaC' || parsedCodec === 'Opus') {\n      // Opting not to get `preferManagedMediaSource` from player config for isSupported() check for simplicity\n      const preferManagedMediaSource = false;\n      return getCodecCompatibleName(parsedCodec, preferManagedMediaSource);\n    }\n    const result = 'mp4a.40.5';\n    logger.info(`Parsed audio codec \"${parsedCodec}\" or audio object type not handled. Using \"${result}\"`);\n    return result;\n  }\n  // Provide defaults based on codec type\n  // This allows for some playback of some fmp4 playlists without CODECS defined in manifest\n  logger.warn(`Unhandled video codec \"${parsedCodec}\"`);\n  if (parsedCodec === 'hvc1' || parsedCodec === 'hev1') {\n    return 'hvc1.1.6.L120.90';\n  }\n  if (parsedCodec === 'av01') {\n    return 'av01.0.04M.08';\n  }\n  return 'avc1.42e01e';\n}\n\nlet now;\n// performance.now() not available on WebWorker, at least on Safari Desktop\ntry {\n  now = self.performance.now.bind(self.performance);\n} catch (err) {\n  logger.debug('Unable to use Performance API on this environment');\n  now = optionalSelf == null ? void 0 : optionalSelf.Date.now;\n}\nconst muxConfig = [{\n  demux: MP4Demuxer,\n  remux: PassThroughRemuxer\n}, {\n  demux: TSDemuxer,\n  remux: MP4Remuxer\n}, {\n  demux: AACDemuxer,\n  remux: MP4Remuxer\n}, {\n  demux: MP3Demuxer,\n  remux: MP4Remuxer\n}];\n{\n  muxConfig.splice(2, 0, {\n    demux: AC3Demuxer,\n    remux: MP4Remuxer\n  });\n}\nclass Transmuxer {\n  constructor(observer, typeSupported, config, vendor, id) {\n    this.async = false;\n    this.observer = void 0;\n    this.typeSupported = void 0;\n    this.config = void 0;\n    this.vendor = void 0;\n    this.id = void 0;\n    this.demuxer = void 0;\n    this.remuxer = void 0;\n    this.decrypter = void 0;\n    this.probe = void 0;\n    this.decryptionPromise = null;\n    this.transmuxConfig = void 0;\n    this.currentTransmuxState = void 0;\n    this.observer = observer;\n    this.typeSupported = typeSupported;\n    this.config = config;\n    this.vendor = vendor;\n    this.id = id;\n  }\n  configure(transmuxConfig) {\n    this.transmuxConfig = transmuxConfig;\n    if (this.decrypter) {\n      this.decrypter.reset();\n    }\n  }\n  push(data, decryptdata, chunkMeta, state) {\n    const stats = chunkMeta.transmuxing;\n    stats.executeStart = now();\n    let uintData = new Uint8Array(data);\n    const {\n      currentTransmuxState,\n      transmuxConfig\n    } = this;\n    if (state) {\n      this.currentTransmuxState = state;\n    }\n    const {\n      contiguous,\n      discontinuity,\n      trackSwitch,\n      accurateTimeOffset,\n      timeOffset,\n      initSegmentChange\n    } = state || currentTransmuxState;\n    const {\n      audioCodec,\n      videoCodec,\n      defaultInitPts,\n      duration,\n      initSegmentData\n    } = transmuxConfig;\n    const keyData = getEncryptionType(uintData, decryptdata);\n    if (keyData && keyData.method === 'AES-128') {\n      const decrypter = this.getDecrypter();\n      // Software decryption is synchronous; webCrypto is not\n      if (decrypter.isSync()) {\n        // Software decryption is progressive. Progressive decryption may not return a result on each call. Any cached\n        // data is handled in the flush() call\n        let decryptedData = decrypter.softwareDecrypt(uintData, keyData.key.buffer, keyData.iv.buffer);\n        // For Low-Latency HLS Parts, decrypt in place, since part parsing is expected on push progress\n        const loadingParts = chunkMeta.part > -1;\n        if (loadingParts) {\n          decryptedData = decrypter.flush();\n        }\n        if (!decryptedData) {\n          stats.executeEnd = now();\n          return emptyResult(chunkMeta);\n        }\n        uintData = new Uint8Array(decryptedData);\n      } else {\n        this.decryptionPromise = decrypter.webCryptoDecrypt(uintData, keyData.key.buffer, keyData.iv.buffer).then(decryptedData => {\n          // Calling push here is important; if flush() is called while this is still resolving, this ensures that\n          // the decrypted data has been transmuxed\n          const result = this.push(decryptedData, null, chunkMeta);\n          this.decryptionPromise = null;\n          return result;\n        });\n        return this.decryptionPromise;\n      }\n    }\n    const resetMuxers = this.needsProbing(discontinuity, trackSwitch);\n    if (resetMuxers) {\n      const error = this.configureTransmuxer(uintData);\n      if (error) {\n        logger.warn(`[transmuxer] ${error.message}`);\n        this.observer.emit(Events.ERROR, Events.ERROR, {\n          type: ErrorTypes.MEDIA_ERROR,\n          details: ErrorDetails.FRAG_PARSING_ERROR,\n          fatal: false,\n          error,\n          reason: error.message\n        });\n        stats.executeEnd = now();\n        return emptyResult(chunkMeta);\n      }\n    }\n    if (discontinuity || trackSwitch || initSegmentChange || resetMuxers) {\n      this.resetInitSegment(initSegmentData, audioCodec, videoCodec, duration, decryptdata);\n    }\n    if (discontinuity || initSegmentChange || resetMuxers) {\n      this.resetInitialTimestamp(defaultInitPts);\n    }\n    if (!contiguous) {\n      this.resetContiguity();\n    }\n    const result = this.transmux(uintData, keyData, timeOffset, accurateTimeOffset, chunkMeta);\n    const currentState = this.currentTransmuxState;\n    currentState.contiguous = true;\n    currentState.discontinuity = false;\n    currentState.trackSwitch = false;\n    stats.executeEnd = now();\n    return result;\n  }\n\n  // Due to data caching, flush calls can produce more than one TransmuxerResult (hence the Array type)\n  flush(chunkMeta) {\n    const stats = chunkMeta.transmuxing;\n    stats.executeStart = now();\n    const {\n      decrypter,\n      currentTransmuxState,\n      decryptionPromise\n    } = this;\n    if (decryptionPromise) {\n      // Upon resolution, the decryption promise calls push() and returns its TransmuxerResult up the stack. Therefore\n      // only flushing is required for async decryption\n      return decryptionPromise.then(() => {\n        return this.flush(chunkMeta);\n      });\n    }\n    const transmuxResults = [];\n    const {\n      timeOffset\n    } = currentTransmuxState;\n    if (decrypter) {\n      // The decrypter may have data cached, which needs to be demuxed. In this case we'll have two TransmuxResults\n      // This happens in the case that we receive only 1 push call for a segment (either for non-progressive downloads,\n      // or for progressive downloads with small segments)\n      const decryptedData = decrypter.flush();\n      if (decryptedData) {\n        // Push always returns a TransmuxerResult if decryptdata is null\n        transmuxResults.push(this.push(decryptedData, null, chunkMeta));\n      }\n    }\n    const {\n      demuxer,\n      remuxer\n    } = this;\n    if (!demuxer || !remuxer) {\n      // If probing failed, then Hls.js has been given content its not able to handle\n      stats.executeEnd = now();\n      return [emptyResult(chunkMeta)];\n    }\n    const demuxResultOrPromise = demuxer.flush(timeOffset);\n    if (isPromise(demuxResultOrPromise)) {\n      // Decrypt final SAMPLE-AES samples\n      return demuxResultOrPromise.then(demuxResult => {\n        this.flushRemux(transmuxResults, demuxResult, chunkMeta);\n        return transmuxResults;\n      });\n    }\n    this.flushRemux(transmuxResults, demuxResultOrPromise, chunkMeta);\n    return transmuxResults;\n  }\n  flushRemux(transmuxResults, demuxResult, chunkMeta) {\n    const {\n      audioTrack,\n      videoTrack,\n      id3Track,\n      textTrack\n    } = demuxResult;\n    const {\n      accurateTimeOffset,\n      timeOffset\n    } = this.currentTransmuxState;\n    logger.log(`[transmuxer.ts]: Flushed fragment ${chunkMeta.sn}${chunkMeta.part > -1 ? ' p: ' + chunkMeta.part : ''} of level ${chunkMeta.level}`);\n    const remuxResult = this.remuxer.remux(audioTrack, videoTrack, id3Track, textTrack, timeOffset, accurateTimeOffset, true, this.id);\n    transmuxResults.push({\n      remuxResult,\n      chunkMeta\n    });\n    chunkMeta.transmuxing.executeEnd = now();\n  }\n  resetInitialTimestamp(defaultInitPts) {\n    const {\n      demuxer,\n      remuxer\n    } = this;\n    if (!demuxer || !remuxer) {\n      return;\n    }\n    demuxer.resetTimeStamp(defaultInitPts);\n    remuxer.resetTimeStamp(defaultInitPts);\n  }\n  resetContiguity() {\n    const {\n      demuxer,\n      remuxer\n    } = this;\n    if (!demuxer || !remuxer) {\n      return;\n    }\n    demuxer.resetContiguity();\n    remuxer.resetNextTimestamp();\n  }\n  resetInitSegment(initSegmentData, audioCodec, videoCodec, trackDuration, decryptdata) {\n    const {\n      demuxer,\n      remuxer\n    } = this;\n    if (!demuxer || !remuxer) {\n      return;\n    }\n    demuxer.resetInitSegment(initSegmentData, audioCodec, videoCodec, trackDuration);\n    remuxer.resetInitSegment(initSegmentData, audioCodec, videoCodec, decryptdata);\n  }\n  destroy() {\n    if (this.demuxer) {\n      this.demuxer.destroy();\n      this.demuxer = undefined;\n    }\n    if (this.remuxer) {\n      this.remuxer.destroy();\n      this.remuxer = undefined;\n    }\n  }\n  transmux(data, keyData, timeOffset, accurateTimeOffset, chunkMeta) {\n    let result;\n    if (keyData && keyData.method === 'SAMPLE-AES') {\n      result = this.transmuxSampleAes(data, keyData, timeOffset, accurateTimeOffset, chunkMeta);\n    } else {\n      result = this.transmuxUnencrypted(data, timeOffset, accurateTimeOffset, chunkMeta);\n    }\n    return result;\n  }\n  transmuxUnencrypted(data, timeOffset, accurateTimeOffset, chunkMeta) {\n    const {\n      audioTrack,\n      videoTrack,\n      id3Track,\n      textTrack\n    } = this.demuxer.demux(data, timeOffset, false, !this.config.progressive);\n    const remuxResult = this.remuxer.remux(audioTrack, videoTrack, id3Track, textTrack, timeOffset, accurateTimeOffset, false, this.id);\n    return {\n      remuxResult,\n      chunkMeta\n    };\n  }\n  transmuxSampleAes(data, decryptData, timeOffset, accurateTimeOffset, chunkMeta) {\n    return this.demuxer.demuxSampleAes(data, decryptData, timeOffset).then(demuxResult => {\n      const remuxResult = this.remuxer.remux(demuxResult.audioTrack, demuxResult.videoTrack, demuxResult.id3Track, demuxResult.textTrack, timeOffset, accurateTimeOffset, false, this.id);\n      return {\n        remuxResult,\n        chunkMeta\n      };\n    });\n  }\n  configureTransmuxer(data) {\n    const {\n      config,\n      observer,\n      typeSupported,\n      vendor\n    } = this;\n    // probe for content type\n    let mux;\n    for (let i = 0, len = muxConfig.length; i < len; i++) {\n      var _muxConfig$i$demux;\n      if ((_muxConfig$i$demux = muxConfig[i].demux) != null && _muxConfig$i$demux.probe(data)) {\n        mux = muxConfig[i];\n        break;\n      }\n    }\n    if (!mux) {\n      return new Error('Failed to find demuxer by probing fragment data');\n    }\n    // so let's check that current remuxer and demuxer are still valid\n    const demuxer = this.demuxer;\n    const remuxer = this.remuxer;\n    const Remuxer = mux.remux;\n    const Demuxer = mux.demux;\n    if (!remuxer || !(remuxer instanceof Remuxer)) {\n      this.remuxer = new Remuxer(observer, config, typeSupported, vendor);\n    }\n    if (!demuxer || !(demuxer instanceof Demuxer)) {\n      this.demuxer = new Demuxer(observer, config, typeSupported);\n      this.probe = Demuxer.probe;\n    }\n  }\n  needsProbing(discontinuity, trackSwitch) {\n    // in case of continuity change, or track switch\n    // we might switch from content type (AAC container to TS container, or TS to fmp4 for example)\n    return !this.demuxer || !this.remuxer || discontinuity || trackSwitch;\n  }\n  getDecrypter() {\n    let decrypter = this.decrypter;\n    if (!decrypter) {\n      decrypter = this.decrypter = new Decrypter(this.config);\n    }\n    return decrypter;\n  }\n}\nfunction getEncryptionType(data, decryptData) {\n  let encryptionType = null;\n  if (data.byteLength > 0 && (decryptData == null ? void 0 : decryptData.key) != null && decryptData.iv !== null && decryptData.method != null) {\n    encryptionType = decryptData;\n  }\n  return encryptionType;\n}\nconst emptyResult = chunkMeta => ({\n  remuxResult: {},\n  chunkMeta\n});\nfunction isPromise(p) {\n  return 'then' in p && p.then instanceof Function;\n}\nclass TransmuxConfig {\n  constructor(audioCodec, videoCodec, initSegmentData, duration, defaultInitPts) {\n    this.audioCodec = void 0;\n    this.videoCodec = void 0;\n    this.initSegmentData = void 0;\n    this.duration = void 0;\n    this.defaultInitPts = void 0;\n    this.audioCodec = audioCodec;\n    this.videoCodec = videoCodec;\n    this.initSegmentData = initSegmentData;\n    this.duration = duration;\n    this.defaultInitPts = defaultInitPts || null;\n  }\n}\nclass TransmuxState {\n  constructor(discontinuity, contiguous, accurateTimeOffset, trackSwitch, timeOffset, initSegmentChange) {\n    this.discontinuity = void 0;\n    this.contiguous = void 0;\n    this.accurateTimeOffset = void 0;\n    this.trackSwitch = void 0;\n    this.timeOffset = void 0;\n    this.initSegmentChange = void 0;\n    this.discontinuity = discontinuity;\n    this.contiguous = contiguous;\n    this.accurateTimeOffset = accurateTimeOffset;\n    this.trackSwitch = trackSwitch;\n    this.timeOffset = timeOffset;\n    this.initSegmentChange = initSegmentChange;\n  }\n}\n\nvar eventemitter3 = {exports: {}};\n\n(function (module) {\n\n\tvar has = Object.prototype.hasOwnProperty\n\t  , prefix = '~';\n\n\t/**\n\t * Constructor to create a storage for our `EE` objects.\n\t * An `Events` instance is a plain object whose properties are event names.\n\t *\n\t * @constructor\n\t * @private\n\t */\n\tfunction Events() {}\n\n\t//\n\t// We try to not inherit from `Object.prototype`. In some engines creating an\n\t// instance in this way is faster than calling `Object.create(null)` directly.\n\t// If `Object.create(null)` is not supported we prefix the event names with a\n\t// character to make sure that the built-in object properties are not\n\t// overridden or used as an attack vector.\n\t//\n\tif (Object.create) {\n\t  Events.prototype = Object.create(null);\n\n\t  //\n\t  // This hack is needed because the `__proto__` property is still inherited in\n\t  // some old browsers like Android 4, iPhone 5.1, Opera 11 and Safari 5.\n\t  //\n\t  if (!new Events().__proto__) prefix = false;\n\t}\n\n\t/**\n\t * Representation of a single event listener.\n\t *\n\t * @param {Function} fn The listener function.\n\t * @param {*} context The context to invoke the listener with.\n\t * @param {Boolean} [once=false] Specify if the listener is a one-time listener.\n\t * @constructor\n\t * @private\n\t */\n\tfunction EE(fn, context, once) {\n\t  this.fn = fn;\n\t  this.context = context;\n\t  this.once = once || false;\n\t}\n\n\t/**\n\t * Add a listener for a given event.\n\t *\n\t * @param {EventEmitter} emitter Reference to the `EventEmitter` instance.\n\t * @param {(String|Symbol)} event The event name.\n\t * @param {Function} fn The listener function.\n\t * @param {*} context The context to invoke the listener with.\n\t * @param {Boolean} once Specify if the listener is a one-time listener.\n\t * @returns {EventEmitter}\n\t * @private\n\t */\n\tfunction addListener(emitter, event, fn, context, once) {\n\t  if (typeof fn !== 'function') {\n\t    throw new TypeError('The listener must be a function');\n\t  }\n\n\t  var listener = new EE(fn, context || emitter, once)\n\t    , evt = prefix ? prefix + event : event;\n\n\t  if (!emitter._events[evt]) emitter._events[evt] = listener, emitter._eventsCount++;\n\t  else if (!emitter._events[evt].fn) emitter._events[evt].push(listener);\n\t  else emitter._events[evt] = [emitter._events[evt], listener];\n\n\t  return emitter;\n\t}\n\n\t/**\n\t * Clear event by name.\n\t *\n\t * @param {EventEmitter} emitter Reference to the `EventEmitter` instance.\n\t * @param {(String|Symbol)} evt The Event name.\n\t * @private\n\t */\n\tfunction clearEvent(emitter, evt) {\n\t  if (--emitter._eventsCount === 0) emitter._events = new Events();\n\t  else delete emitter._events[evt];\n\t}\n\n\t/**\n\t * Minimal `EventEmitter` interface that is molded against the Node.js\n\t * `EventEmitter` interface.\n\t *\n\t * @constructor\n\t * @public\n\t */\n\tfunction EventEmitter() {\n\t  this._events = new Events();\n\t  this._eventsCount = 0;\n\t}\n\n\t/**\n\t * Return an array listing the events for which the emitter has registered\n\t * listeners.\n\t *\n\t * @returns {Array}\n\t * @public\n\t */\n\tEventEmitter.prototype.eventNames = function eventNames() {\n\t  var names = []\n\t    , events\n\t    , name;\n\n\t  if (this._eventsCount === 0) return names;\n\n\t  for (name in (events = this._events)) {\n\t    if (has.call(events, name)) names.push(prefix ? name.slice(1) : name);\n\t  }\n\n\t  if (Object.getOwnPropertySymbols) {\n\t    return names.concat(Object.getOwnPropertySymbols(events));\n\t  }\n\n\t  return names;\n\t};\n\n\t/**\n\t * Return the listeners registered for a given event.\n\t *\n\t * @param {(String|Symbol)} event The event name.\n\t * @returns {Array} The registered listeners.\n\t * @public\n\t */\n\tEventEmitter.prototype.listeners = function listeners(event) {\n\t  var evt = prefix ? prefix + event : event\n\t    , handlers = this._events[evt];\n\n\t  if (!handlers) return [];\n\t  if (handlers.fn) return [handlers.fn];\n\n\t  for (var i = 0, l = handlers.length, ee = new Array(l); i < l; i++) {\n\t    ee[i] = handlers[i].fn;\n\t  }\n\n\t  return ee;\n\t};\n\n\t/**\n\t * Return the number of listeners listening to a given event.\n\t *\n\t * @param {(String|Symbol)} event The event name.\n\t * @returns {Number} The number of listeners.\n\t * @public\n\t */\n\tEventEmitter.prototype.listenerCount = function listenerCount(event) {\n\t  var evt = prefix ? prefix + event : event\n\t    , listeners = this._events[evt];\n\n\t  if (!listeners) return 0;\n\t  if (listeners.fn) return 1;\n\t  return listeners.length;\n\t};\n\n\t/**\n\t * Calls each of the listeners registered for a given event.\n\t *\n\t * @param {(String|Symbol)} event The event name.\n\t * @returns {Boolean} `true` if the event had listeners, else `false`.\n\t * @public\n\t */\n\tEventEmitter.prototype.emit = function emit(event, a1, a2, a3, a4, a5) {\n\t  var evt = prefix ? prefix + event : event;\n\n\t  if (!this._events[evt]) return false;\n\n\t  var listeners = this._events[evt]\n\t    , len = arguments.length\n\t    , args\n\t    , i;\n\n\t  if (listeners.fn) {\n\t    if (listeners.once) this.removeListener(event, listeners.fn, undefined, true);\n\n\t    switch (len) {\n\t      case 1: return listeners.fn.call(listeners.context), true;\n\t      case 2: return listeners.fn.call(listeners.context, a1), true;\n\t      case 3: return listeners.fn.call(listeners.context, a1, a2), true;\n\t      case 4: return listeners.fn.call(listeners.context, a1, a2, a3), true;\n\t      case 5: return listeners.fn.call(listeners.context, a1, a2, a3, a4), true;\n\t      case 6: return listeners.fn.call(listeners.context, a1, a2, a3, a4, a5), true;\n\t    }\n\n\t    for (i = 1, args = new Array(len -1); i < len; i++) {\n\t      args[i - 1] = arguments[i];\n\t    }\n\n\t    listeners.fn.apply(listeners.context, args);\n\t  } else {\n\t    var length = listeners.length\n\t      , j;\n\n\t    for (i = 0; i < length; i++) {\n\t      if (listeners[i].once) this.removeListener(event, listeners[i].fn, undefined, true);\n\n\t      switch (len) {\n\t        case 1: listeners[i].fn.call(listeners[i].context); break;\n\t        case 2: listeners[i].fn.call(listeners[i].context, a1); break;\n\t        case 3: listeners[i].fn.call(listeners[i].context, a1, a2); break;\n\t        case 4: listeners[i].fn.call(listeners[i].context, a1, a2, a3); break;\n\t        default:\n\t          if (!args) for (j = 1, args = new Array(len -1); j < len; j++) {\n\t            args[j - 1] = arguments[j];\n\t          }\n\n\t          listeners[i].fn.apply(listeners[i].context, args);\n\t      }\n\t    }\n\t  }\n\n\t  return true;\n\t};\n\n\t/**\n\t * Add a listener for a given event.\n\t *\n\t * @param {(String|Symbol)} event The event name.\n\t * @param {Function} fn The listener function.\n\t * @param {*} [context=this] The context to invoke the listener with.\n\t * @returns {EventEmitter} `this`.\n\t * @public\n\t */\n\tEventEmitter.prototype.on = function on(event, fn, context) {\n\t  return addListener(this, event, fn, context, false);\n\t};\n\n\t/**\n\t * Add a one-time listener for a given event.\n\t *\n\t * @param {(String|Symbol)} event The event name.\n\t * @param {Function} fn The listener function.\n\t * @param {*} [context=this] The context to invoke the listener with.\n\t * @returns {EventEmitter} `this`.\n\t * @public\n\t */\n\tEventEmitter.prototype.once = function once(event, fn, context) {\n\t  return addListener(this, event, fn, context, true);\n\t};\n\n\t/**\n\t * Remove the listeners of a given event.\n\t *\n\t * @param {(String|Symbol)} event The event name.\n\t * @param {Function} fn Only remove the listeners that match this function.\n\t * @param {*} context Only remove the listeners that have this context.\n\t * @param {Boolean} once Only remove one-time listeners.\n\t * @returns {EventEmitter} `this`.\n\t * @public\n\t */\n\tEventEmitter.prototype.removeListener = function removeListener(event, fn, context, once) {\n\t  var evt = prefix ? prefix + event : event;\n\n\t  if (!this._events[evt]) return this;\n\t  if (!fn) {\n\t    clearEvent(this, evt);\n\t    return this;\n\t  }\n\n\t  var listeners = this._events[evt];\n\n\t  if (listeners.fn) {\n\t    if (\n\t      listeners.fn === fn &&\n\t      (!once || listeners.once) &&\n\t      (!context || listeners.context === context)\n\t    ) {\n\t      clearEvent(this, evt);\n\t    }\n\t  } else {\n\t    for (var i = 0, events = [], length = listeners.length; i < length; i++) {\n\t      if (\n\t        listeners[i].fn !== fn ||\n\t        (once && !listeners[i].once) ||\n\t        (context && listeners[i].context !== context)\n\t      ) {\n\t        events.push(listeners[i]);\n\t      }\n\t    }\n\n\t    //\n\t    // Reset the array, or remove it completely if we have no more listeners.\n\t    //\n\t    if (events.length) this._events[evt] = events.length === 1 ? events[0] : events;\n\t    else clearEvent(this, evt);\n\t  }\n\n\t  return this;\n\t};\n\n\t/**\n\t * Remove all listeners, or those of the specified event.\n\t *\n\t * @param {(String|Symbol)} [event] The event name.\n\t * @returns {EventEmitter} `this`.\n\t * @public\n\t */\n\tEventEmitter.prototype.removeAllListeners = function removeAllListeners(event) {\n\t  var evt;\n\n\t  if (event) {\n\t    evt = prefix ? prefix + event : event;\n\t    if (this._events[evt]) clearEvent(this, evt);\n\t  } else {\n\t    this._events = new Events();\n\t    this._eventsCount = 0;\n\t  }\n\n\t  return this;\n\t};\n\n\t//\n\t// Alias methods names because people roll like that.\n\t//\n\tEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\n\tEventEmitter.prototype.addListener = EventEmitter.prototype.on;\n\n\t//\n\t// Expose the prefix.\n\t//\n\tEventEmitter.prefixed = prefix;\n\n\t//\n\t// Allow `EventEmitter` to be imported as module namespace.\n\t//\n\tEventEmitter.EventEmitter = EventEmitter;\n\n\t//\n\t// Expose the module.\n\t//\n\t{\n\t  module.exports = EventEmitter;\n\t} \n} (eventemitter3));\n\nvar eventemitter3Exports = eventemitter3.exports;\nvar EventEmitter = /*@__PURE__*/getDefaultExportFromCjs(eventemitter3Exports);\n\nclass TransmuxerInterface {\n  constructor(hls, id, onTransmuxComplete, onFlush) {\n    this.error = null;\n    this.hls = void 0;\n    this.id = void 0;\n    this.observer = void 0;\n    this.frag = null;\n    this.part = null;\n    this.useWorker = void 0;\n    this.workerContext = null;\n    this.onwmsg = void 0;\n    this.transmuxer = null;\n    this.onTransmuxComplete = void 0;\n    this.onFlush = void 0;\n    const config = hls.config;\n    this.hls = hls;\n    this.id = id;\n    this.useWorker = !!config.enableWorker;\n    this.onTransmuxComplete = onTransmuxComplete;\n    this.onFlush = onFlush;\n    const forwardMessage = (ev, data) => {\n      data = data || {};\n      data.frag = this.frag;\n      data.id = this.id;\n      if (ev === Events.ERROR) {\n        this.error = data.error;\n      }\n      this.hls.trigger(ev, data);\n    };\n\n    // forward events to main thread\n    this.observer = new EventEmitter();\n    this.observer.on(Events.FRAG_DECRYPTED, forwardMessage);\n    this.observer.on(Events.ERROR, forwardMessage);\n    const MediaSource = getMediaSource(config.preferManagedMediaSource) || {\n      isTypeSupported: () => false\n    };\n    const m2tsTypeSupported = {\n      mpeg: MediaSource.isTypeSupported('audio/mpeg'),\n      mp3: MediaSource.isTypeSupported('audio/mp4; codecs=\"mp3\"'),\n      ac3: MediaSource.isTypeSupported('audio/mp4; codecs=\"ac-3\"') \n    };\n    if (this.useWorker && typeof Worker !== 'undefined') {\n      const canCreateWorker = config.workerPath || hasUMDWorker();\n      if (canCreateWorker) {\n        try {\n          if (config.workerPath) {\n            logger.log(`loading Web Worker ${config.workerPath} for \"${id}\"`);\n            this.workerContext = loadWorker(config.workerPath);\n          } else {\n            logger.log(`injecting Web Worker for \"${id}\"`);\n            this.workerContext = injectWorker();\n          }\n          this.onwmsg = event => this.onWorkerMessage(event);\n          const {\n            worker\n          } = this.workerContext;\n          worker.addEventListener('message', this.onwmsg);\n          worker.onerror = event => {\n            const error = new Error(`${event.message}  (${event.filename}:${event.lineno})`);\n            config.enableWorker = false;\n            logger.warn(`Error in \"${id}\" Web Worker, fallback to inline`);\n            this.hls.trigger(Events.ERROR, {\n              type: ErrorTypes.OTHER_ERROR,\n              details: ErrorDetails.INTERNAL_EXCEPTION,\n              fatal: false,\n              event: 'demuxerWorker',\n              error\n            });\n          };\n          worker.postMessage({\n            cmd: 'init',\n            typeSupported: m2tsTypeSupported,\n            vendor: '',\n            id: id,\n            config: JSON.stringify(config)\n          });\n        } catch (err) {\n          logger.warn(`Error setting up \"${id}\" Web Worker, fallback to inline`, err);\n          this.resetWorker();\n          this.error = null;\n          this.transmuxer = new Transmuxer(this.observer, m2tsTypeSupported, config, '', id);\n        }\n        return;\n      }\n    }\n    this.transmuxer = new Transmuxer(this.observer, m2tsTypeSupported, config, '', id);\n  }\n  resetWorker() {\n    if (this.workerContext) {\n      const {\n        worker,\n        objectURL\n      } = this.workerContext;\n      if (objectURL) {\n        // revoke the Object URL that was used to create transmuxer worker, so as not to leak it\n        self.URL.revokeObjectURL(objectURL);\n      }\n      worker.removeEventListener('message', this.onwmsg);\n      worker.onerror = null;\n      worker.terminate();\n      this.workerContext = null;\n    }\n  }\n  destroy() {\n    if (this.workerContext) {\n      this.resetWorker();\n      this.onwmsg = undefined;\n    } else {\n      const transmuxer = this.transmuxer;\n      if (transmuxer) {\n        transmuxer.destroy();\n        this.transmuxer = null;\n      }\n    }\n    const observer = this.observer;\n    if (observer) {\n      observer.removeAllListeners();\n    }\n    this.frag = null;\n    // @ts-ignore\n    this.observer = null;\n    // @ts-ignore\n    this.hls = null;\n  }\n  push(data, initSegmentData, audioCodec, videoCodec, frag, part, duration, accurateTimeOffset, chunkMeta, defaultInitPTS) {\n    var _frag$initSegment, _lastFrag$initSegment;\n    chunkMeta.transmuxing.start = self.performance.now();\n    const {\n      transmuxer\n    } = this;\n    const timeOffset = part ? part.start : frag.start;\n    // TODO: push \"clear-lead\" decrypt data for unencrypted fragments in streams with encrypted ones\n    const decryptdata = frag.decryptdata;\n    const lastFrag = this.frag;\n    const discontinuity = !(lastFrag && frag.cc === lastFrag.cc);\n    const trackSwitch = !(lastFrag && chunkMeta.level === lastFrag.level);\n    const snDiff = lastFrag ? chunkMeta.sn - lastFrag.sn : -1;\n    const partDiff = this.part ? chunkMeta.part - this.part.index : -1;\n    const progressive = snDiff === 0 && chunkMeta.id > 1 && chunkMeta.id === (lastFrag == null ? void 0 : lastFrag.stats.chunkCount);\n    const contiguous = !trackSwitch && (snDiff === 1 || snDiff === 0 && (partDiff === 1 || progressive && partDiff <= 0));\n    const now = self.performance.now();\n    if (trackSwitch || snDiff || frag.stats.parsing.start === 0) {\n      frag.stats.parsing.start = now;\n    }\n    if (part && (partDiff || !contiguous)) {\n      part.stats.parsing.start = now;\n    }\n    const initSegmentChange = !(lastFrag && ((_frag$initSegment = frag.initSegment) == null ? void 0 : _frag$initSegment.url) === ((_lastFrag$initSegment = lastFrag.initSegment) == null ? void 0 : _lastFrag$initSegment.url));\n    const state = new TransmuxState(discontinuity, contiguous, accurateTimeOffset, trackSwitch, timeOffset, initSegmentChange);\n    if (!contiguous || discontinuity || initSegmentChange) {\n      logger.log(`[transmuxer-interface, ${frag.type}]: Starting new transmux session for sn: ${chunkMeta.sn} p: ${chunkMeta.part} level: ${chunkMeta.level} id: ${chunkMeta.id}\n        discontinuity: ${discontinuity}\n        trackSwitch: ${trackSwitch}\n        contiguous: ${contiguous}\n        accurateTimeOffset: ${accurateTimeOffset}\n        timeOffset: ${timeOffset}\n        initSegmentChange: ${initSegmentChange}`);\n      const config = new TransmuxConfig(audioCodec, videoCodec, initSegmentData, duration, defaultInitPTS);\n      this.configureTransmuxer(config);\n    }\n    this.frag = frag;\n    this.part = part;\n\n    // Frags with sn of 'initSegment' are not transmuxed\n    if (this.workerContext) {\n      // post fragment payload as transferable objects for ArrayBuffer (no copy)\n      this.workerContext.worker.postMessage({\n        cmd: 'demux',\n        data,\n        decryptdata,\n        chunkMeta,\n        state\n      }, data instanceof ArrayBuffer ? [data] : []);\n    } else if (transmuxer) {\n      const transmuxResult = transmuxer.push(data, decryptdata, chunkMeta, state);\n      if (isPromise(transmuxResult)) {\n        transmuxer.async = true;\n        transmuxResult.then(data => {\n          this.handleTransmuxComplete(data);\n        }).catch(error => {\n          this.transmuxerError(error, chunkMeta, 'transmuxer-interface push error');\n        });\n      } else {\n        transmuxer.async = false;\n        this.handleTransmuxComplete(transmuxResult);\n      }\n    }\n  }\n  flush(chunkMeta) {\n    chunkMeta.transmuxing.start = self.performance.now();\n    const {\n      transmuxer\n    } = this;\n    if (this.workerContext) {\n      this.workerContext.worker.postMessage({\n        cmd: 'flush',\n        chunkMeta\n      });\n    } else if (transmuxer) {\n      let transmuxResult = transmuxer.flush(chunkMeta);\n      const asyncFlush = isPromise(transmuxResult);\n      if (asyncFlush || transmuxer.async) {\n        if (!isPromise(transmuxResult)) {\n          transmuxResult = Promise.resolve(transmuxResult);\n        }\n        transmuxResult.then(data => {\n          this.handleFlushResult(data, chunkMeta);\n        }).catch(error => {\n          this.transmuxerError(error, chunkMeta, 'transmuxer-interface flush error');\n        });\n      } else {\n        this.handleFlushResult(transmuxResult, chunkMeta);\n      }\n    }\n  }\n  transmuxerError(error, chunkMeta, reason) {\n    if (!this.hls) {\n      return;\n    }\n    this.error = error;\n    this.hls.trigger(Events.ERROR, {\n      type: ErrorTypes.MEDIA_ERROR,\n      details: ErrorDetails.FRAG_PARSING_ERROR,\n      chunkMeta,\n      frag: this.frag || undefined,\n      fatal: false,\n      error,\n      err: error,\n      reason\n    });\n  }\n  handleFlushResult(results, chunkMeta) {\n    results.forEach(result => {\n      this.handleTransmuxComplete(result);\n    });\n    this.onFlush(chunkMeta);\n  }\n  onWorkerMessage(event) {\n    const data = event.data;\n    if (!(data != null && data.event)) {\n      logger.warn(`worker message received with no ${data ? 'event name' : 'data'}`);\n      return;\n    }\n    const hls = this.hls;\n    if (!this.hls) {\n      return;\n    }\n    switch (data.event) {\n      case 'init':\n        {\n          var _this$workerContext;\n          const objectURL = (_this$workerContext = this.workerContext) == null ? void 0 : _this$workerContext.objectURL;\n          if (objectURL) {\n            // revoke the Object URL that was used to create transmuxer worker, so as not to leak it\n            self.URL.revokeObjectURL(objectURL);\n          }\n          break;\n        }\n      case 'transmuxComplete':\n        {\n          this.handleTransmuxComplete(data.data);\n          break;\n        }\n      case 'flush':\n        {\n          this.onFlush(data.data);\n          break;\n        }\n\n      // pass logs from the worker thread to the main logger\n      case 'workerLog':\n        if (logger[data.data.logType]) {\n          logger[data.data.logType](data.data.message);\n        }\n        break;\n      default:\n        {\n          data.data = data.data || {};\n          data.data.frag = this.frag;\n          data.data.id = this.id;\n          hls.trigger(data.event, data.data);\n          break;\n        }\n    }\n  }\n  configureTransmuxer(config) {\n    const {\n      transmuxer\n    } = this;\n    if (this.workerContext) {\n      this.workerContext.worker.postMessage({\n        cmd: 'configure',\n        config\n      });\n    } else if (transmuxer) {\n      transmuxer.configure(config);\n    }\n  }\n  handleTransmuxComplete(result) {\n    result.chunkMeta.transmuxing.end = self.performance.now();\n    this.onTransmuxComplete(result);\n  }\n}\n\nfunction subtitleOptionsIdentical(trackList1, trackList2) {\n  if (trackList1.length !== trackList2.length) {\n    return false;\n  }\n  for (let i = 0; i < trackList1.length; i++) {\n    if (!mediaAttributesIdentical(trackList1[i].attrs, trackList2[i].attrs)) {\n      return false;\n    }\n  }\n  return true;\n}\nfunction mediaAttributesIdentical(attrs1, attrs2, customAttributes) {\n  // Media options with the same rendition ID must be bit identical\n  const stableRenditionId = attrs1['STABLE-RENDITION-ID'];\n  if (stableRenditionId && !customAttributes) {\n    return stableRenditionId === attrs2['STABLE-RENDITION-ID'];\n  }\n  // When rendition ID is not present, compare attributes\n  return !(customAttributes || ['LANGUAGE', 'NAME', 'CHARACTERISTICS', 'AUTOSELECT', 'DEFAULT', 'FORCED', 'ASSOC-LANGUAGE']).some(subtitleAttribute => attrs1[subtitleAttribute] !== attrs2[subtitleAttribute]);\n}\nfunction subtitleTrackMatchesTextTrack(subtitleTrack, textTrack) {\n  return textTrack.label.toLowerCase() === subtitleTrack.name.toLowerCase() && (!textTrack.language || textTrack.language.toLowerCase() === (subtitleTrack.lang || '').toLowerCase());\n}\n\nconst TICK_INTERVAL$2 = 100; // how often to tick in ms\n\nclass AudioStreamController extends BaseStreamController {\n  constructor(hls, fragmentTracker, keyLoader) {\n    super(hls, fragmentTracker, keyLoader, '[audio-stream-controller]', PlaylistLevelType.AUDIO);\n    this.videoBuffer = null;\n    this.videoTrackCC = -1;\n    this.waitingVideoCC = -1;\n    this.bufferedTrack = null;\n    this.switchingTrack = null;\n    this.trackId = -1;\n    this.waitingData = null;\n    this.mainDetails = null;\n    this.flushing = false;\n    this.bufferFlushed = false;\n    this.cachedTrackLoadedData = null;\n    this._registerListeners();\n  }\n  onHandlerDestroying() {\n    this._unregisterListeners();\n    super.onHandlerDestroying();\n    this.mainDetails = null;\n    this.bufferedTrack = null;\n    this.switchingTrack = null;\n  }\n  _registerListeners() {\n    const {\n      hls\n    } = this;\n    hls.on(Events.MEDIA_ATTACHED, this.onMediaAttached, this);\n    hls.on(Events.MEDIA_DETACHING, this.onMediaDetaching, this);\n    hls.on(Events.MANIFEST_LOADING, this.onManifestLoading, this);\n    hls.on(Events.LEVEL_LOADED, this.onLevelLoaded, this);\n    hls.on(Events.AUDIO_TRACKS_UPDATED, this.onAudioTracksUpdated, this);\n    hls.on(Events.AUDIO_TRACK_SWITCHING, this.onAudioTrackSwitching, this);\n    hls.on(Events.AUDIO_TRACK_LOADED, this.onAudioTrackLoaded, this);\n    hls.on(Events.ERROR, this.onError, this);\n    hls.on(Events.BUFFER_RESET, this.onBufferReset, this);\n    hls.on(Events.BUFFER_CREATED, this.onBufferCreated, this);\n    hls.on(Events.BUFFER_FLUSHING, this.onBufferFlushing, this);\n    hls.on(Events.BUFFER_FLUSHED, this.onBufferFlushed, this);\n    hls.on(Events.INIT_PTS_FOUND, this.onInitPtsFound, this);\n    hls.on(Events.FRAG_BUFFERED, this.onFragBuffered, this);\n  }\n  _unregisterListeners() {\n    const {\n      hls\n    } = this;\n    hls.off(Events.MEDIA_ATTACHED, this.onMediaAttached, this);\n    hls.off(Events.MEDIA_DETACHING, this.onMediaDetaching, this);\n    hls.off(Events.MANIFEST_LOADING, this.onManifestLoading, this);\n    hls.off(Events.LEVEL_LOADED, this.onLevelLoaded, this);\n    hls.off(Events.AUDIO_TRACKS_UPDATED, this.onAudioTracksUpdated, this);\n    hls.off(Events.AUDIO_TRACK_SWITCHING, this.onAudioTrackSwitching, this);\n    hls.off(Events.AUDIO_TRACK_LOADED, this.onAudioTrackLoaded, this);\n    hls.off(Events.ERROR, this.onError, this);\n    hls.off(Events.BUFFER_RESET, this.onBufferReset, this);\n    hls.off(Events.BUFFER_CREATED, this.onBufferCreated, this);\n    hls.off(Events.BUFFER_FLUSHING, this.onBufferFlushing, this);\n    hls.off(Events.BUFFER_FLUSHED, this.onBufferFlushed, this);\n    hls.off(Events.INIT_PTS_FOUND, this.onInitPtsFound, this);\n    hls.off(Events.FRAG_BUFFERED, this.onFragBuffered, this);\n  }\n\n  // INIT_PTS_FOUND is triggered when the video track parsed in the stream-controller has a new PTS value\n  onInitPtsFound(event, {\n    frag,\n    id,\n    initPTS,\n    timescale\n  }) {\n    // Always update the new INIT PTS\n    // Can change due level switch\n    if (id === 'main') {\n      const cc = frag.cc;\n      this.initPTS[frag.cc] = {\n        baseTime: initPTS,\n        timescale\n      };\n      this.log(`InitPTS for cc: ${cc} found from main: ${initPTS}`);\n      this.videoTrackCC = cc;\n      // If we are waiting, tick immediately to unblock audio fragment transmuxing\n      if (this.state === State.WAITING_INIT_PTS) {\n        this.tick();\n      }\n    }\n  }\n  startLoad(startPosition) {\n    if (!this.levels) {\n      this.startPosition = startPosition;\n      this.state = State.STOPPED;\n      return;\n    }\n    const lastCurrentTime = this.lastCurrentTime;\n    this.stopLoad();\n    this.setInterval(TICK_INTERVAL$2);\n    if (lastCurrentTime > 0 && startPosition === -1) {\n      this.log(`Override startPosition with lastCurrentTime @${lastCurrentTime.toFixed(3)}`);\n      startPosition = lastCurrentTime;\n      this.state = State.IDLE;\n    } else {\n      this.loadedmetadata = false;\n      this.state = State.WAITING_TRACK;\n    }\n    this.nextLoadPosition = this.startPosition = this.lastCurrentTime = startPosition;\n    this.tick();\n  }\n  doTick() {\n    switch (this.state) {\n      case State.IDLE:\n        this.doTickIdle();\n        break;\n      case State.WAITING_TRACK:\n        {\n          var _levels$trackId;\n          const {\n            levels,\n            trackId\n          } = this;\n          const details = levels == null ? void 0 : (_levels$trackId = levels[trackId]) == null ? void 0 : _levels$trackId.details;\n          if (details) {\n            if (this.waitForCdnTuneIn(details)) {\n              break;\n            }\n            this.state = State.WAITING_INIT_PTS;\n          }\n          break;\n        }\n      case State.FRAG_LOADING_WAITING_RETRY:\n        {\n          var _this$media;\n          const now = performance.now();\n          const retryDate = this.retryDate;\n          // if current time is gt than retryDate, or if media seeking let's switch to IDLE state to retry loading\n          if (!retryDate || now >= retryDate || (_this$media = this.media) != null && _this$media.seeking) {\n            const {\n              levels,\n              trackId\n            } = this;\n            this.log('RetryDate reached, switch back to IDLE state');\n            this.resetStartWhenNotLoaded((levels == null ? void 0 : levels[trackId]) || null);\n            this.state = State.IDLE;\n          }\n          break;\n        }\n      case State.WAITING_INIT_PTS:\n        {\n          // Ensure we don't get stuck in the WAITING_INIT_PTS state if the waiting frag CC doesn't match any initPTS\n          const waitingData = this.waitingData;\n          if (waitingData) {\n            const {\n              frag,\n              part,\n              cache,\n              complete\n            } = waitingData;\n            if (this.initPTS[frag.cc] !== undefined) {\n              this.waitingData = null;\n              this.waitingVideoCC = -1;\n              this.state = State.FRAG_LOADING;\n              const payload = cache.flush();\n              const data = {\n                frag,\n                part,\n                payload,\n                networkDetails: null\n              };\n              this._handleFragmentLoadProgress(data);\n              if (complete) {\n                super._handleFragmentLoadComplete(data);\n              }\n            } else if (this.videoTrackCC !== this.waitingVideoCC) {\n              // Drop waiting fragment if videoTrackCC has changed since waitingFragment was set and initPTS was not found\n              this.log(`Waiting fragment cc (${frag.cc}) cancelled because video is at cc ${this.videoTrackCC}`);\n              this.clearWaitingFragment();\n            } else {\n              // Drop waiting fragment if an earlier fragment is needed\n              const pos = this.getLoadPosition();\n              const bufferInfo = BufferHelper.bufferInfo(this.mediaBuffer, pos, this.config.maxBufferHole);\n              const waitingFragmentAtPosition = fragmentWithinToleranceTest(bufferInfo.end, this.config.maxFragLookUpTolerance, frag);\n              if (waitingFragmentAtPosition < 0) {\n                this.log(`Waiting fragment cc (${frag.cc}) @ ${frag.start} cancelled because another fragment at ${bufferInfo.end} is needed`);\n                this.clearWaitingFragment();\n              }\n            }\n          } else {\n            this.state = State.IDLE;\n          }\n        }\n    }\n    this.onTickEnd();\n  }\n  clearWaitingFragment() {\n    const waitingData = this.waitingData;\n    if (waitingData) {\n      this.fragmentTracker.removeFragment(waitingData.frag);\n      this.waitingData = null;\n      this.waitingVideoCC = -1;\n      this.state = State.IDLE;\n    }\n  }\n  resetLoadingState() {\n    this.clearWaitingFragment();\n    super.resetLoadingState();\n  }\n  onTickEnd() {\n    const {\n      media\n    } = this;\n    if (!(media != null && media.readyState)) {\n      // Exit early if we don't have media or if the media hasn't buffered anything yet (readyState 0)\n      return;\n    }\n    this.lastCurrentTime = media.currentTime;\n  }\n  doTickIdle() {\n    const {\n      hls,\n      levels,\n      media,\n      trackId\n    } = this;\n    const config = hls.config;\n\n    // 1. if buffering is suspended\n    // 2. if video not attached AND\n    //    start fragment already requested OR start frag prefetch not enabled\n    // 3. if tracks or track not loaded and selected\n    // then exit loop\n    // => if media not attached but start frag prefetch is enabled and start frag not requested yet, we will not exit loop\n    if (!this.buffering || !media && (this.startFragRequested || !config.startFragPrefetch) || !(levels != null && levels[trackId])) {\n      return;\n    }\n    const levelInfo = levels[trackId];\n    const trackDetails = levelInfo.details;\n    if (!trackDetails || trackDetails.live && this.levelLastLoaded !== levelInfo || this.waitForCdnTuneIn(trackDetails)) {\n      this.state = State.WAITING_TRACK;\n      return;\n    }\n    const bufferable = this.mediaBuffer ? this.mediaBuffer : this.media;\n    if (this.bufferFlushed && bufferable) {\n      this.bufferFlushed = false;\n      this.afterBufferFlushed(bufferable, ElementaryStreamTypes.AUDIO, PlaylistLevelType.AUDIO);\n    }\n    const bufferInfo = this.getFwdBufferInfo(bufferable, PlaylistLevelType.AUDIO);\n    if (bufferInfo === null) {\n      return;\n    }\n    const {\n      bufferedTrack,\n      switchingTrack\n    } = this;\n    if (!switchingTrack && this._streamEnded(bufferInfo, trackDetails)) {\n      hls.trigger(Events.BUFFER_EOS, {\n        type: 'audio'\n      });\n      this.state = State.ENDED;\n      return;\n    }\n    const mainBufferInfo = this.getFwdBufferInfo(this.videoBuffer ? this.videoBuffer : this.media, PlaylistLevelType.MAIN);\n    const bufferLen = bufferInfo.len;\n    const maxBufLen = this.getMaxBufferLength(mainBufferInfo == null ? void 0 : mainBufferInfo.len);\n    const fragments = trackDetails.fragments;\n    const start = fragments[0].start;\n    let targetBufferTime = this.flushing ? this.getLoadPosition() : bufferInfo.end;\n    if (switchingTrack && media) {\n      const pos = this.getLoadPosition();\n      // STABLE\n      if (bufferedTrack && !mediaAttributesIdentical(switchingTrack.attrs, bufferedTrack.attrs)) {\n        targetBufferTime = pos;\n      }\n      // if currentTime (pos) is less than alt audio playlist start time, it means that alt audio is ahead of currentTime\n      if (trackDetails.PTSKnown && pos < start) {\n        // if everything is buffered from pos to start or if audio buffer upfront, let's seek to start\n        if (bufferInfo.end > start || bufferInfo.nextStart) {\n          this.log('Alt audio track ahead of main track, seek to start of alt audio track');\n          media.currentTime = start + 0.05;\n        }\n      }\n    }\n\n    // if buffer length is less than maxBufLen, or near the end, find a fragment to load\n    if (bufferLen >= maxBufLen && !switchingTrack && targetBufferTime < fragments[fragments.length - 1].start) {\n      return;\n    }\n    let frag = this.getNextFragment(targetBufferTime, trackDetails);\n    let atGap = false;\n    // Avoid loop loading by using nextLoadPosition set for backtracking and skipping consecutive GAP tags\n    if (frag && this.isLoopLoading(frag, targetBufferTime)) {\n      atGap = !!frag.gap;\n      frag = this.getNextFragmentLoopLoading(frag, trackDetails, bufferInfo, PlaylistLevelType.MAIN, maxBufLen);\n    }\n    if (!frag) {\n      this.bufferFlushed = true;\n      return;\n    }\n\n    // Buffer audio up to one target duration ahead of main buffer\n    const atBufferSyncLimit = mainBufferInfo && frag.start > mainBufferInfo.end + trackDetails.targetduration;\n    if (atBufferSyncLimit ||\n    // Or wait for main buffer after buffing some audio\n    !(mainBufferInfo != null && mainBufferInfo.len) && bufferInfo.len) {\n      // Check fragment-tracker for main fragments since GAP segments do not show up in bufferInfo\n      const mainFrag = this.getAppendedFrag(frag.start, PlaylistLevelType.MAIN);\n      if (mainFrag === null) {\n        return;\n      }\n      // Bridge gaps in main buffer\n      atGap || (atGap = !!mainFrag.gap || !!atBufferSyncLimit && mainBufferInfo.len === 0);\n      if (atBufferSyncLimit && !atGap || atGap && bufferInfo.nextStart && bufferInfo.nextStart < mainFrag.end) {\n        return;\n      }\n    }\n    this.loadFragment(frag, levelInfo, targetBufferTime);\n  }\n  getMaxBufferLength(mainBufferLength) {\n    const maxConfigBuffer = super.getMaxBufferLength();\n    if (!mainBufferLength) {\n      return maxConfigBuffer;\n    }\n    return Math.min(Math.max(maxConfigBuffer, mainBufferLength), this.config.maxMaxBufferLength);\n  }\n  onMediaDetaching() {\n    this.videoBuffer = null;\n    this.bufferFlushed = this.flushing = false;\n    super.onMediaDetaching();\n  }\n  onAudioTracksUpdated(event, {\n    audioTracks\n  }) {\n    // Reset tranxmuxer is essential for large context switches (Content Steering)\n    this.resetTransmuxer();\n    this.levels = audioTracks.map(mediaPlaylist => new Level(mediaPlaylist));\n  }\n  onAudioTrackSwitching(event, data) {\n    // if any URL found on new audio track, it is an alternate audio track\n    const altAudio = !!data.url;\n    this.trackId = data.id;\n    const {\n      fragCurrent\n    } = this;\n    if (fragCurrent) {\n      fragCurrent.abortRequests();\n      this.removeUnbufferedFrags(fragCurrent.start);\n    }\n    this.resetLoadingState();\n    // destroy useless transmuxer when switching audio to main\n    if (!altAudio) {\n      this.resetTransmuxer();\n    } else {\n      // switching to audio track, start timer if not already started\n      this.setInterval(TICK_INTERVAL$2);\n    }\n\n    // should we switch tracks ?\n    if (altAudio) {\n      this.switchingTrack = data;\n      // main audio track are handled by stream-controller, just do something if switching to alt audio track\n      this.state = State.IDLE;\n      this.flushAudioIfNeeded(data);\n    } else {\n      this.switchingTrack = null;\n      this.bufferedTrack = data;\n      this.state = State.STOPPED;\n    }\n    this.tick();\n  }\n  onManifestLoading() {\n    this.fragmentTracker.removeAllFragments();\n    this.startPosition = this.lastCurrentTime = 0;\n    this.bufferFlushed = this.flushing = false;\n    this.levels = this.mainDetails = this.waitingData = this.bufferedTrack = this.cachedTrackLoadedData = this.switchingTrack = null;\n    this.startFragRequested = false;\n    this.trackId = this.videoTrackCC = this.waitingVideoCC = -1;\n  }\n  onLevelLoaded(event, data) {\n    this.mainDetails = data.details;\n    if (this.cachedTrackLoadedData !== null) {\n      this.hls.trigger(Events.AUDIO_TRACK_LOADED, this.cachedTrackLoadedData);\n      this.cachedTrackLoadedData = null;\n    }\n  }\n  onAudioTrackLoaded(event, data) {\n    var _track$details;\n    if (this.mainDetails == null) {\n      this.cachedTrackLoadedData = data;\n      return;\n    }\n    const {\n      levels\n    } = this;\n    const {\n      details: newDetails,\n      id: trackId\n    } = data;\n    if (!levels) {\n      this.warn(`Audio tracks were reset while loading level ${trackId}`);\n      return;\n    }\n    this.log(`Audio track ${trackId} loaded [${newDetails.startSN},${newDetails.endSN}]${newDetails.lastPartSn ? `[part-${newDetails.lastPartSn}-${newDetails.lastPartIndex}]` : ''},duration:${newDetails.totalduration}`);\n    const track = levels[trackId];\n    let sliding = 0;\n    if (newDetails.live || (_track$details = track.details) != null && _track$details.live) {\n      this.checkLiveUpdate(newDetails);\n      const mainDetails = this.mainDetails;\n      if (newDetails.deltaUpdateFailed || !mainDetails) {\n        return;\n      }\n      if (!track.details && newDetails.hasProgramDateTime && mainDetails.hasProgramDateTime) {\n        // Make sure our audio rendition is aligned with the \"main\" rendition, using\n        // pdt as our reference times.\n        alignMediaPlaylistByPDT(newDetails, mainDetails);\n        sliding = newDetails.fragments[0].start;\n      } else {\n        var _this$levelLastLoaded;\n        sliding = this.alignPlaylists(newDetails, track.details, (_this$levelLastLoaded = this.levelLastLoaded) == null ? void 0 : _this$levelLastLoaded.details);\n      }\n    }\n    track.details = newDetails;\n    this.levelLastLoaded = track;\n\n    // compute start position if we are aligned with the main playlist\n    if (!this.startFragRequested && (this.mainDetails || !newDetails.live)) {\n      this.setStartPosition(this.mainDetails || newDetails, sliding);\n    }\n    // only switch back to IDLE state if we were waiting for track to start downloading a new fragment\n    if (this.state === State.WAITING_TRACK && !this.waitForCdnTuneIn(newDetails)) {\n      this.state = State.IDLE;\n    }\n\n    // trigger handler right now\n    this.tick();\n  }\n  _handleFragmentLoadProgress(data) {\n    var _frag$initSegment;\n    const {\n      frag,\n      part,\n      payload\n    } = data;\n    const {\n      config,\n      trackId,\n      levels\n    } = this;\n    if (!levels) {\n      this.warn(`Audio tracks were reset while fragment load was in progress. Fragment ${frag.sn} of level ${frag.level} will not be buffered`);\n      return;\n    }\n    const track = levels[trackId];\n    if (!track) {\n      this.warn('Audio track is undefined on fragment load progress');\n      return;\n    }\n    const details = track.details;\n    if (!details) {\n      this.warn('Audio track details undefined on fragment load progress');\n      this.removeUnbufferedFrags(frag.start);\n      return;\n    }\n    const audioCodec = config.defaultAudioCodec || track.audioCodec || 'mp4a.40.2';\n    let transmuxer = this.transmuxer;\n    if (!transmuxer) {\n      transmuxer = this.transmuxer = new TransmuxerInterface(this.hls, PlaylistLevelType.AUDIO, this._handleTransmuxComplete.bind(this), this._handleTransmuxerFlush.bind(this));\n    }\n\n    // Check if we have video initPTS\n    // If not we need to wait for it\n    const initPTS = this.initPTS[frag.cc];\n    const initSegmentData = (_frag$initSegment = frag.initSegment) == null ? void 0 : _frag$initSegment.data;\n    if (initPTS !== undefined) {\n      // this.log(`Transmuxing ${sn} of [${details.startSN} ,${details.endSN}],track ${trackId}`);\n      // time Offset is accurate if level PTS is known, or if playlist is not sliding (not live)\n      const accurateTimeOffset = false; // details.PTSKnown || !details.live;\n      const partIndex = part ? part.index : -1;\n      const partial = partIndex !== -1;\n      const chunkMeta = new ChunkMetadata(frag.level, frag.sn, frag.stats.chunkCount, payload.byteLength, partIndex, partial);\n      transmuxer.push(payload, initSegmentData, audioCodec, '', frag, part, details.totalduration, accurateTimeOffset, chunkMeta, initPTS);\n    } else {\n      this.log(`Unknown video PTS for cc ${frag.cc}, waiting for video PTS before demuxing audio frag ${frag.sn} of [${details.startSN} ,${details.endSN}],track ${trackId}`);\n      const {\n        cache\n      } = this.waitingData = this.waitingData || {\n        frag,\n        part,\n        cache: new ChunkCache(),\n        complete: false\n      };\n      cache.push(new Uint8Array(payload));\n      this.waitingVideoCC = this.videoTrackCC;\n      this.state = State.WAITING_INIT_PTS;\n    }\n  }\n  _handleFragmentLoadComplete(fragLoadedData) {\n    if (this.waitingData) {\n      this.waitingData.complete = true;\n      return;\n    }\n    super._handleFragmentLoadComplete(fragLoadedData);\n  }\n  onBufferReset( /* event: Events.BUFFER_RESET */\n  ) {\n    // reset reference to sourcebuffers\n    this.mediaBuffer = this.videoBuffer = null;\n    this.loadedmetadata = false;\n  }\n  onBufferCreated(event, data) {\n    const audioTrack = data.tracks.audio;\n    if (audioTrack) {\n      this.mediaBuffer = audioTrack.buffer || null;\n    }\n    if (data.tracks.video) {\n      this.videoBuffer = data.tracks.video.buffer || null;\n    }\n  }\n  onFragBuffered(event, data) {\n    const {\n      frag,\n      part\n    } = data;\n    if (frag.type !== PlaylistLevelType.AUDIO) {\n      if (!this.loadedmetadata && frag.type === PlaylistLevelType.MAIN) {\n        const bufferable = this.videoBuffer || this.media;\n        if (bufferable) {\n          const bufferedTimeRanges = BufferHelper.getBuffered(bufferable);\n          if (bufferedTimeRanges.length) {\n            this.loadedmetadata = true;\n          }\n        }\n      }\n      return;\n    }\n    if (this.fragContextChanged(frag)) {\n      // If a level switch was requested while a fragment was buffering, it will emit the FRAG_BUFFERED event upon completion\n      // Avoid setting state back to IDLE or concluding the audio switch; otherwise, the switched-to track will not buffer\n      this.warn(`Fragment ${frag.sn}${part ? ' p: ' + part.index : ''} of level ${frag.level} finished buffering, but was aborted. state: ${this.state}, audioSwitch: ${this.switchingTrack ? this.switchingTrack.name : 'false'}`);\n      return;\n    }\n    if (frag.sn !== 'initSegment') {\n      this.fragPrevious = frag;\n      const track = this.switchingTrack;\n      if (track) {\n        this.bufferedTrack = track;\n        this.switchingTrack = null;\n        this.hls.trigger(Events.AUDIO_TRACK_SWITCHED, _objectSpread2({}, track));\n      }\n    }\n    this.fragBufferedComplete(frag, part);\n  }\n  onError(event, data) {\n    var _data$context;\n    if (data.fatal) {\n      this.state = State.ERROR;\n      return;\n    }\n    switch (data.details) {\n      case ErrorDetails.FRAG_GAP:\n      case ErrorDetails.FRAG_PARSING_ERROR:\n      case ErrorDetails.FRAG_DECRYPT_ERROR:\n      case ErrorDetails.FRAG_LOAD_ERROR:\n      case ErrorDetails.FRAG_LOAD_TIMEOUT:\n      case ErrorDetails.KEY_LOAD_ERROR:\n      case ErrorDetails.KEY_LOAD_TIMEOUT:\n        this.onFragmentOrKeyLoadError(PlaylistLevelType.AUDIO, data);\n        break;\n      case ErrorDetails.AUDIO_TRACK_LOAD_ERROR:\n      case ErrorDetails.AUDIO_TRACK_LOAD_TIMEOUT:\n      case ErrorDetails.LEVEL_PARSING_ERROR:\n        // in case of non fatal error while loading track, if not retrying to load track, switch back to IDLE\n        if (!data.levelRetry && this.state === State.WAITING_TRACK && ((_data$context = data.context) == null ? void 0 : _data$context.type) === PlaylistContextType.AUDIO_TRACK) {\n          this.state = State.IDLE;\n        }\n        break;\n      case ErrorDetails.BUFFER_APPEND_ERROR:\n      case ErrorDetails.BUFFER_FULL_ERROR:\n        if (!data.parent || data.parent !== 'audio') {\n          return;\n        }\n        if (data.details === ErrorDetails.BUFFER_APPEND_ERROR) {\n          this.resetLoadingState();\n          return;\n        }\n        if (this.reduceLengthAndFlushBuffer(data)) {\n          this.bufferedTrack = null;\n          super.flushMainBuffer(0, Number.POSITIVE_INFINITY, 'audio');\n        }\n        break;\n      case ErrorDetails.INTERNAL_EXCEPTION:\n        this.recoverWorkerError(data);\n        break;\n    }\n  }\n  onBufferFlushing(event, {\n    type\n  }) {\n    if (type !== ElementaryStreamTypes.VIDEO) {\n      this.flushing = true;\n    }\n  }\n  onBufferFlushed(event, {\n    type\n  }) {\n    if (type !== ElementaryStreamTypes.VIDEO) {\n      this.flushing = false;\n      this.bufferFlushed = true;\n      if (this.state === State.ENDED) {\n        this.state = State.IDLE;\n      }\n      const mediaBuffer = this.mediaBuffer || this.media;\n      if (mediaBuffer) {\n        this.afterBufferFlushed(mediaBuffer, type, PlaylistLevelType.AUDIO);\n        this.tick();\n      }\n    }\n  }\n  _handleTransmuxComplete(transmuxResult) {\n    var _id3$samples;\n    const id = 'audio';\n    const {\n      hls\n    } = this;\n    const {\n      remuxResult,\n      chunkMeta\n    } = transmuxResult;\n    const context = this.getCurrentContext(chunkMeta);\n    if (!context) {\n      this.resetWhenMissingContext(chunkMeta);\n      return;\n    }\n    const {\n      frag,\n      part,\n      level\n    } = context;\n    const {\n      details\n    } = level;\n    const {\n      audio,\n      text,\n      id3,\n      initSegment\n    } = remuxResult;\n\n    // Check if the current fragment has been aborted. We check this by first seeing if we're still playing the current level.\n    // If we are, subsequently check if the currently loading fragment (fragCurrent) has changed.\n    if (this.fragContextChanged(frag) || !details) {\n      this.fragmentTracker.removeFragment(frag);\n      return;\n    }\n    this.state = State.PARSING;\n    if (this.switchingTrack && audio) {\n      this.completeAudioSwitch(this.switchingTrack);\n    }\n    if (initSegment != null && initSegment.tracks) {\n      const mapFragment = frag.initSegment || frag;\n      this._bufferInitSegment(level, initSegment.tracks, mapFragment, chunkMeta);\n      hls.trigger(Events.FRAG_PARSING_INIT_SEGMENT, {\n        frag: mapFragment,\n        id,\n        tracks: initSegment.tracks\n      });\n      // Only flush audio from old audio tracks when PTS is known on new audio track\n    }\n    if (audio) {\n      const {\n        startPTS,\n        endPTS,\n        startDTS,\n        endDTS\n      } = audio;\n      if (part) {\n        part.elementaryStreams[ElementaryStreamTypes.AUDIO] = {\n          startPTS,\n          endPTS,\n          startDTS,\n          endDTS\n        };\n      }\n      frag.setElementaryStreamInfo(ElementaryStreamTypes.AUDIO, startPTS, endPTS, startDTS, endDTS);\n      this.bufferFragmentData(audio, frag, part, chunkMeta);\n    }\n    if (id3 != null && (_id3$samples = id3.samples) != null && _id3$samples.length) {\n      const emittedID3 = _extends({\n        id,\n        frag,\n        details\n      }, id3);\n      hls.trigger(Events.FRAG_PARSING_METADATA, emittedID3);\n    }\n    if (text) {\n      const emittedText = _extends({\n        id,\n        frag,\n        details\n      }, text);\n      hls.trigger(Events.FRAG_PARSING_USERDATA, emittedText);\n    }\n  }\n  _bufferInitSegment(currentLevel, tracks, frag, chunkMeta) {\n    if (this.state !== State.PARSING) {\n      return;\n    }\n    // delete any video track found on audio transmuxer\n    if (tracks.video) {\n      delete tracks.video;\n    }\n\n    // include levelCodec in audio and video tracks\n    const track = tracks.audio;\n    if (!track) {\n      return;\n    }\n    track.id = 'audio';\n    const variantAudioCodecs = currentLevel.audioCodec;\n    this.log(`Init audio buffer, container:${track.container}, codecs[level/parsed]=[${variantAudioCodecs}/${track.codec}]`);\n    // SourceBuffer will use track.levelCodec if defined\n    if (variantAudioCodecs && variantAudioCodecs.split(',').length === 1) {\n      track.levelCodec = variantAudioCodecs;\n    }\n    this.hls.trigger(Events.BUFFER_CODECS, tracks);\n    const initSegment = track.initSegment;\n    if (initSegment != null && initSegment.byteLength) {\n      const segment = {\n        type: 'audio',\n        frag,\n        part: null,\n        chunkMeta,\n        parent: frag.type,\n        data: initSegment\n      };\n      this.hls.trigger(Events.BUFFER_APPENDING, segment);\n    }\n    // trigger handler right now\n    this.tickImmediate();\n  }\n  loadFragment(frag, track, targetBufferTime) {\n    // only load if fragment is not loaded or if in audio switch\n    const fragState = this.fragmentTracker.getState(frag);\n    this.fragCurrent = frag;\n\n    // we force a frag loading in audio switch as fragment tracker might not have evicted previous frags in case of quick audio switch\n    if (this.switchingTrack || fragState === FragmentState.NOT_LOADED || fragState === FragmentState.PARTIAL) {\n      var _track$details2;\n      if (frag.sn === 'initSegment') {\n        this._loadInitSegment(frag, track);\n      } else if ((_track$details2 = track.details) != null && _track$details2.live && !this.initPTS[frag.cc]) {\n        this.log(`Waiting for video PTS in continuity counter ${frag.cc} of live stream before loading audio fragment ${frag.sn} of level ${this.trackId}`);\n        this.state = State.WAITING_INIT_PTS;\n        const mainDetails = this.mainDetails;\n        if (mainDetails && mainDetails.fragments[0].start !== track.details.fragments[0].start) {\n          alignMediaPlaylistByPDT(track.details, mainDetails);\n        }\n      } else {\n        this.startFragRequested = true;\n        super.loadFragment(frag, track, targetBufferTime);\n      }\n    } else {\n      this.clearTrackerIfNeeded(frag);\n    }\n  }\n  flushAudioIfNeeded(switchingTrack) {\n    const {\n      media,\n      bufferedTrack\n    } = this;\n    const bufferedAttributes = bufferedTrack == null ? void 0 : bufferedTrack.attrs;\n    const switchAttributes = switchingTrack.attrs;\n    if (media && bufferedAttributes && (bufferedAttributes.CHANNELS !== switchAttributes.CHANNELS || bufferedTrack.name !== switchingTrack.name || bufferedTrack.lang !== switchingTrack.lang)) {\n      this.log('Switching audio track : flushing all audio');\n      super.flushMainBuffer(0, Number.POSITIVE_INFINITY, 'audio');\n      this.bufferedTrack = null;\n    }\n  }\n  completeAudioSwitch(switchingTrack) {\n    const {\n      hls\n    } = this;\n    this.flushAudioIfNeeded(switchingTrack);\n    this.bufferedTrack = switchingTrack;\n    this.switchingTrack = null;\n    hls.trigger(Events.AUDIO_TRACK_SWITCHED, _objectSpread2({}, switchingTrack));\n  }\n}\n\nclass AudioTrackController extends BasePlaylistController {\n  constructor(hls) {\n    super(hls, '[audio-track-controller]');\n    this.tracks = [];\n    this.groupIds = null;\n    this.tracksInGroup = [];\n    this.trackId = -1;\n    this.currentTrack = null;\n    this.selectDefaultTrack = true;\n    this.registerListeners();\n  }\n  registerListeners() {\n    const {\n      hls\n    } = this;\n    hls.on(Events.MANIFEST_LOADING, this.onManifestLoading, this);\n    hls.on(Events.MANIFEST_PARSED, this.onManifestParsed, this);\n    hls.on(Events.LEVEL_LOADING, this.onLevelLoading, this);\n    hls.on(Events.LEVEL_SWITCHING, this.onLevelSwitching, this);\n    hls.on(Events.AUDIO_TRACK_LOADED, this.onAudioTrackLoaded, this);\n    hls.on(Events.ERROR, this.onError, this);\n  }\n  unregisterListeners() {\n    const {\n      hls\n    } = this;\n    hls.off(Events.MANIFEST_LOADING, this.onManifestLoading, this);\n    hls.off(Events.MANIFEST_PARSED, this.onManifestParsed, this);\n    hls.off(Events.LEVEL_LOADING, this.onLevelLoading, this);\n    hls.off(Events.LEVEL_SWITCHING, this.onLevelSwitching, this);\n    hls.off(Events.AUDIO_TRACK_LOADED, this.onAudioTrackLoaded, this);\n    hls.off(Events.ERROR, this.onError, this);\n  }\n  destroy() {\n    this.unregisterListeners();\n    this.tracks.length = 0;\n    this.tracksInGroup.length = 0;\n    this.currentTrack = null;\n    super.destroy();\n  }\n  onManifestLoading() {\n    this.tracks = [];\n    this.tracksInGroup = [];\n    this.groupIds = null;\n    this.currentTrack = null;\n    this.trackId = -1;\n    this.selectDefaultTrack = true;\n  }\n  onManifestParsed(event, data) {\n    this.tracks = data.audioTracks || [];\n  }\n  onAudioTrackLoaded(event, data) {\n    const {\n      id,\n      groupId,\n      details\n    } = data;\n    const trackInActiveGroup = this.tracksInGroup[id];\n    if (!trackInActiveGroup || trackInActiveGroup.groupId !== groupId) {\n      this.warn(`Audio track with id:${id} and group:${groupId} not found in active group ${trackInActiveGroup == null ? void 0 : trackInActiveGroup.groupId}`);\n      return;\n    }\n    const curDetails = trackInActiveGroup.details;\n    trackInActiveGroup.details = data.details;\n    this.log(`Audio track ${id} \"${trackInActiveGroup.name}\" lang:${trackInActiveGroup.lang} group:${groupId} loaded [${details.startSN}-${details.endSN}]`);\n    if (id === this.trackId) {\n      this.playlistLoaded(id, data, curDetails);\n    }\n  }\n  onLevelLoading(event, data) {\n    this.switchLevel(data.level);\n  }\n  onLevelSwitching(event, data) {\n    this.switchLevel(data.level);\n  }\n  switchLevel(levelIndex) {\n    const levelInfo = this.hls.levels[levelIndex];\n    if (!levelInfo) {\n      return;\n    }\n    const audioGroups = levelInfo.audioGroups || null;\n    const currentGroups = this.groupIds;\n    let currentTrack = this.currentTrack;\n    if (!audioGroups || (currentGroups == null ? void 0 : currentGroups.length) !== (audioGroups == null ? void 0 : audioGroups.length) || audioGroups != null && audioGroups.some(groupId => (currentGroups == null ? void 0 : currentGroups.indexOf(groupId)) === -1)) {\n      this.groupIds = audioGroups;\n      this.trackId = -1;\n      this.currentTrack = null;\n      const audioTracks = this.tracks.filter(track => !audioGroups || audioGroups.indexOf(track.groupId) !== -1);\n      if (audioTracks.length) {\n        // Disable selectDefaultTrack if there are no default tracks\n        if (this.selectDefaultTrack && !audioTracks.some(track => track.default)) {\n          this.selectDefaultTrack = false;\n        }\n        // track.id should match hls.audioTracks index\n        audioTracks.forEach((track, i) => {\n          track.id = i;\n        });\n      } else if (!currentTrack && !this.tracksInGroup.length) {\n        // Do not dispatch AUDIO_TRACKS_UPDATED when there were and are no tracks\n        return;\n      }\n      this.tracksInGroup = audioTracks;\n\n      // Find preferred track\n      const audioPreference = this.hls.config.audioPreference;\n      if (!currentTrack && audioPreference) {\n        const groupIndex = findMatchingOption(audioPreference, audioTracks, audioMatchPredicate);\n        if (groupIndex > -1) {\n          currentTrack = audioTracks[groupIndex];\n        } else {\n          const allIndex = findMatchingOption(audioPreference, this.tracks);\n          currentTrack = this.tracks[allIndex];\n        }\n      }\n\n      // Select initial track\n      let trackId = this.findTrackId(currentTrack);\n      if (trackId === -1 && currentTrack) {\n        trackId = this.findTrackId(null);\n      }\n\n      // Dispatch events and load track if needed\n      const audioTracksUpdated = {\n        audioTracks\n      };\n      this.log(`Updating audio tracks, ${audioTracks.length} track(s) found in group(s): ${audioGroups == null ? void 0 : audioGroups.join(',')}`);\n      this.hls.trigger(Events.AUDIO_TRACKS_UPDATED, audioTracksUpdated);\n      const selectedTrackId = this.trackId;\n      if (trackId !== -1 && selectedTrackId === -1) {\n        this.setAudioTrack(trackId);\n      } else if (audioTracks.length && selectedTrackId === -1) {\n        var _this$groupIds;\n        const error = new Error(`No audio track selected for current audio group-ID(s): ${(_this$groupIds = this.groupIds) == null ? void 0 : _this$groupIds.join(',')} track count: ${audioTracks.length}`);\n        this.warn(error.message);\n        this.hls.trigger(Events.ERROR, {\n          type: ErrorTypes.MEDIA_ERROR,\n          details: ErrorDetails.AUDIO_TRACK_LOAD_ERROR,\n          fatal: true,\n          error\n        });\n      }\n    } else if (this.shouldReloadPlaylist(currentTrack)) {\n      // Retry playlist loading if no playlist is or has been loaded yet\n      this.setAudioTrack(this.trackId);\n    }\n  }\n  onError(event, data) {\n    if (data.fatal || !data.context) {\n      return;\n    }\n    if (data.context.type === PlaylistContextType.AUDIO_TRACK && data.context.id === this.trackId && (!this.groupIds || this.groupIds.indexOf(data.context.groupId) !== -1)) {\n      this.requestScheduled = -1;\n      this.checkRetry(data);\n    }\n  }\n  get allAudioTracks() {\n    return this.tracks;\n  }\n  get audioTracks() {\n    return this.tracksInGroup;\n  }\n  get audioTrack() {\n    return this.trackId;\n  }\n  set audioTrack(newId) {\n    // If audio track is selected from API then don't choose from the manifest default track\n    this.selectDefaultTrack = false;\n    this.setAudioTrack(newId);\n  }\n  setAudioOption(audioOption) {\n    const hls = this.hls;\n    hls.config.audioPreference = audioOption;\n    if (audioOption) {\n      const allAudioTracks = this.allAudioTracks;\n      this.selectDefaultTrack = false;\n      if (allAudioTracks.length) {\n        // First see if current option matches (no switch op)\n        const currentTrack = this.currentTrack;\n        if (currentTrack && matchesOption(audioOption, currentTrack, audioMatchPredicate)) {\n          return currentTrack;\n        }\n        // Find option in available tracks (tracksInGroup)\n        const groupIndex = findMatchingOption(audioOption, this.tracksInGroup, audioMatchPredicate);\n        if (groupIndex > -1) {\n          const track = this.tracksInGroup[groupIndex];\n          this.setAudioTrack(groupIndex);\n          return track;\n        } else if (currentTrack) {\n          // Find option in nearest level audio group\n          let searchIndex = hls.loadLevel;\n          if (searchIndex === -1) {\n            searchIndex = hls.firstAutoLevel;\n          }\n          const switchIndex = findClosestLevelWithAudioGroup(audioOption, hls.levels, allAudioTracks, searchIndex, audioMatchPredicate);\n          if (switchIndex === -1) {\n            // could not find matching variant\n            return null;\n          }\n          // and switch level to acheive the audio group switch\n          hls.nextLoadLevel = switchIndex;\n        }\n        if (audioOption.channels || audioOption.audioCodec) {\n          // Could not find a match with codec / channels predicate\n          // Find a match without channels or codec\n          const withoutCodecAndChannelsMatch = findMatchingOption(audioOption, allAudioTracks);\n          if (withoutCodecAndChannelsMatch > -1) {\n            return allAudioTracks[withoutCodecAndChannelsMatch];\n          }\n        }\n      }\n    }\n    return null;\n  }\n  setAudioTrack(newId) {\n    const tracks = this.tracksInGroup;\n\n    // check if level idx is valid\n    if (newId < 0 || newId >= tracks.length) {\n      this.warn(`Invalid audio track id: ${newId}`);\n      return;\n    }\n\n    // stopping live reloading timer if any\n    this.clearTimer();\n    this.selectDefaultTrack = false;\n    const lastTrack = this.currentTrack;\n    const track = tracks[newId];\n    const trackLoaded = track.details && !track.details.live;\n    if (newId === this.trackId && track === lastTrack && trackLoaded) {\n      return;\n    }\n    this.log(`Switching to audio-track ${newId} \"${track.name}\" lang:${track.lang} group:${track.groupId} channels:${track.channels}`);\n    this.trackId = newId;\n    this.currentTrack = track;\n    this.hls.trigger(Events.AUDIO_TRACK_SWITCHING, _objectSpread2({}, track));\n    // Do not reload track unless live\n    if (trackLoaded) {\n      return;\n    }\n    const hlsUrlParameters = this.switchParams(track.url, lastTrack == null ? void 0 : lastTrack.details, track.details);\n    this.loadPlaylist(hlsUrlParameters);\n  }\n  findTrackId(currentTrack) {\n    const audioTracks = this.tracksInGroup;\n    for (let i = 0; i < audioTracks.length; i++) {\n      const track = audioTracks[i];\n      if (this.selectDefaultTrack && !track.default) {\n        continue;\n      }\n      if (!currentTrack || matchesOption(currentTrack, track, audioMatchPredicate)) {\n        return i;\n      }\n    }\n    if (currentTrack) {\n      const {\n        name,\n        lang,\n        assocLang,\n        characteristics,\n        audioCodec,\n        channels\n      } = currentTrack;\n      for (let i = 0; i < audioTracks.length; i++) {\n        const track = audioTracks[i];\n        if (matchesOption({\n          name,\n          lang,\n          assocLang,\n          characteristics,\n          audioCodec,\n          channels\n        }, track, audioMatchPredicate)) {\n          return i;\n        }\n      }\n      for (let i = 0; i < audioTracks.length; i++) {\n        const track = audioTracks[i];\n        if (mediaAttributesIdentical(currentTrack.attrs, track.attrs, ['LANGUAGE', 'ASSOC-LANGUAGE', 'CHARACTERISTICS'])) {\n          return i;\n        }\n      }\n      for (let i = 0; i < audioTracks.length; i++) {\n        const track = audioTracks[i];\n        if (mediaAttributesIdentical(currentTrack.attrs, track.attrs, ['LANGUAGE'])) {\n          return i;\n        }\n      }\n    }\n    return -1;\n  }\n  loadPlaylist(hlsUrlParameters) {\n    const audioTrack = this.currentTrack;\n    if (this.shouldLoadPlaylist(audioTrack) && audioTrack) {\n      super.loadPlaylist();\n      const id = audioTrack.id;\n      const groupId = audioTrack.groupId;\n      let url = audioTrack.url;\n      if (hlsUrlParameters) {\n        try {\n          url = hlsUrlParameters.addDirectives(url);\n        } catch (error) {\n          this.warn(`Could not construct new URL with HLS Delivery Directives: ${error}`);\n        }\n      }\n      // track not retrieved yet, or live playlist we need to (re)load it\n      this.log(`loading audio-track playlist ${id} \"${audioTrack.name}\" lang:${audioTrack.lang} group:${groupId}`);\n      this.clearTimer();\n      this.hls.trigger(Events.AUDIO_TRACK_LOADING, {\n        url,\n        id,\n        groupId,\n        deliveryDirectives: hlsUrlParameters || null\n      });\n    }\n  }\n}\n\nconst TICK_INTERVAL$1 = 500; // how often to tick in ms\n\nclass SubtitleStreamController extends BaseStreamController {\n  constructor(hls, fragmentTracker, keyLoader) {\n    super(hls, fragmentTracker, keyLoader, '[subtitle-stream-controller]', PlaylistLevelType.SUBTITLE);\n    this.currentTrackId = -1;\n    this.tracksBuffered = [];\n    this.mainDetails = null;\n    this._registerListeners();\n  }\n  onHandlerDestroying() {\n    this._unregisterListeners();\n    super.onHandlerDestroying();\n    this.mainDetails = null;\n  }\n  _registerListeners() {\n    const {\n      hls\n    } = this;\n    hls.on(Events.MEDIA_ATTACHED, this.onMediaAttached, this);\n    hls.on(Events.MEDIA_DETACHING, this.onMediaDetaching, this);\n    hls.on(Events.MANIFEST_LOADING, this.onManifestLoading, this);\n    hls.on(Events.LEVEL_LOADED, this.onLevelLoaded, this);\n    hls.on(Events.ERROR, this.onError, this);\n    hls.on(Events.SUBTITLE_TRACKS_UPDATED, this.onSubtitleTracksUpdated, this);\n    hls.on(Events.SUBTITLE_TRACK_SWITCH, this.onSubtitleTrackSwitch, this);\n    hls.on(Events.SUBTITLE_TRACK_LOADED, this.onSubtitleTrackLoaded, this);\n    hls.on(Events.SUBTITLE_FRAG_PROCESSED, this.onSubtitleFragProcessed, this);\n    hls.on(Events.BUFFER_FLUSHING, this.onBufferFlushing, this);\n    hls.on(Events.FRAG_BUFFERED, this.onFragBuffered, this);\n  }\n  _unregisterListeners() {\n    const {\n      hls\n    } = this;\n    hls.off(Events.MEDIA_ATTACHED, this.onMediaAttached, this);\n    hls.off(Events.MEDIA_DETACHING, this.onMediaDetaching, this);\n    hls.off(Events.MANIFEST_LOADING, this.onManifestLoading, this);\n    hls.off(Events.LEVEL_LOADED, this.onLevelLoaded, this);\n    hls.off(Events.ERROR, this.onError, this);\n    hls.off(Events.SUBTITLE_TRACKS_UPDATED, this.onSubtitleTracksUpdated, this);\n    hls.off(Events.SUBTITLE_TRACK_SWITCH, this.onSubtitleTrackSwitch, this);\n    hls.off(Events.SUBTITLE_TRACK_LOADED, this.onSubtitleTrackLoaded, this);\n    hls.off(Events.SUBTITLE_FRAG_PROCESSED, this.onSubtitleFragProcessed, this);\n    hls.off(Events.BUFFER_FLUSHING, this.onBufferFlushing, this);\n    hls.off(Events.FRAG_BUFFERED, this.onFragBuffered, this);\n  }\n  startLoad(startPosition) {\n    this.stopLoad();\n    this.state = State.IDLE;\n    this.setInterval(TICK_INTERVAL$1);\n    this.nextLoadPosition = this.startPosition = this.lastCurrentTime = startPosition;\n    this.tick();\n  }\n  onManifestLoading() {\n    this.mainDetails = null;\n    this.fragmentTracker.removeAllFragments();\n  }\n  onMediaDetaching() {\n    this.tracksBuffered = [];\n    super.onMediaDetaching();\n  }\n  onLevelLoaded(event, data) {\n    this.mainDetails = data.details;\n  }\n  onSubtitleFragProcessed(event, data) {\n    const {\n      frag,\n      success\n    } = data;\n    this.fragPrevious = frag;\n    this.state = State.IDLE;\n    if (!success) {\n      return;\n    }\n    const buffered = this.tracksBuffered[this.currentTrackId];\n    if (!buffered) {\n      return;\n    }\n\n    // Create/update a buffered array matching the interface used by BufferHelper.bufferedInfo\n    // so we can re-use the logic used to detect how much has been buffered\n    let timeRange;\n    const fragStart = frag.start;\n    for (let i = 0; i < buffered.length; i++) {\n      if (fragStart >= buffered[i].start && fragStart <= buffered[i].end) {\n        timeRange = buffered[i];\n        break;\n      }\n    }\n    const fragEnd = frag.start + frag.duration;\n    if (timeRange) {\n      timeRange.end = fragEnd;\n    } else {\n      timeRange = {\n        start: fragStart,\n        end: fragEnd\n      };\n      buffered.push(timeRange);\n    }\n    this.fragmentTracker.fragBuffered(frag);\n    this.fragBufferedComplete(frag, null);\n  }\n  onBufferFlushing(event, data) {\n    const {\n      startOffset,\n      endOffset\n    } = data;\n    if (startOffset === 0 && endOffset !== Number.POSITIVE_INFINITY) {\n      const endOffsetSubtitles = endOffset - 1;\n      if (endOffsetSubtitles <= 0) {\n        return;\n      }\n      data.endOffsetSubtitles = Math.max(0, endOffsetSubtitles);\n      this.tracksBuffered.forEach(buffered => {\n        for (let i = 0; i < buffered.length;) {\n          if (buffered[i].end <= endOffsetSubtitles) {\n            buffered.shift();\n            continue;\n          } else if (buffered[i].start < endOffsetSubtitles) {\n            buffered[i].start = endOffsetSubtitles;\n          } else {\n            break;\n          }\n          i++;\n        }\n      });\n      this.fragmentTracker.removeFragmentsInRange(startOffset, endOffsetSubtitles, PlaylistLevelType.SUBTITLE);\n    }\n  }\n  onFragBuffered(event, data) {\n    if (!this.loadedmetadata && data.frag.type === PlaylistLevelType.MAIN) {\n      var _this$media;\n      if ((_this$media = this.media) != null && _this$media.buffered.length) {\n        this.loadedmetadata = true;\n      }\n    }\n  }\n\n  // If something goes wrong, proceed to next frag, if we were processing one.\n  onError(event, data) {\n    const frag = data.frag;\n    if ((frag == null ? void 0 : frag.type) === PlaylistLevelType.SUBTITLE) {\n      if (data.details === ErrorDetails.FRAG_GAP) {\n        this.fragmentTracker.fragBuffered(frag, true);\n      }\n      if (this.fragCurrent) {\n        this.fragCurrent.abortRequests();\n      }\n      if (this.state !== State.STOPPED) {\n        this.state = State.IDLE;\n      }\n    }\n  }\n\n  // Got all new subtitle levels.\n  onSubtitleTracksUpdated(event, {\n    subtitleTracks\n  }) {\n    if (this.levels && subtitleOptionsIdentical(this.levels, subtitleTracks)) {\n      this.levels = subtitleTracks.map(mediaPlaylist => new Level(mediaPlaylist));\n      return;\n    }\n    this.tracksBuffered = [];\n    this.levels = subtitleTracks.map(mediaPlaylist => {\n      const level = new Level(mediaPlaylist);\n      this.tracksBuffered[level.id] = [];\n      return level;\n    });\n    this.fragmentTracker.removeFragmentsInRange(0, Number.POSITIVE_INFINITY, PlaylistLevelType.SUBTITLE);\n    this.fragPrevious = null;\n    this.mediaBuffer = null;\n  }\n  onSubtitleTrackSwitch(event, data) {\n    var _this$levels;\n    this.currentTrackId = data.id;\n    if (!((_this$levels = this.levels) != null && _this$levels.length) || this.currentTrackId === -1) {\n      this.clearInterval();\n      return;\n    }\n\n    // Check if track has the necessary details to load fragments\n    const currentTrack = this.levels[this.currentTrackId];\n    if (currentTrack != null && currentTrack.details) {\n      this.mediaBuffer = this.mediaBufferTimeRanges;\n    } else {\n      this.mediaBuffer = null;\n    }\n    if (currentTrack) {\n      this.setInterval(TICK_INTERVAL$1);\n    }\n  }\n\n  // Got a new set of subtitle fragments.\n  onSubtitleTrackLoaded(event, data) {\n    var _track$details;\n    const {\n      currentTrackId,\n      levels\n    } = this;\n    const {\n      details: newDetails,\n      id: trackId\n    } = data;\n    if (!levels) {\n      this.warn(`Subtitle tracks were reset while loading level ${trackId}`);\n      return;\n    }\n    const track = levels[trackId];\n    if (trackId >= levels.length || !track) {\n      return;\n    }\n    this.log(`Subtitle track ${trackId} loaded [${newDetails.startSN},${newDetails.endSN}]${newDetails.lastPartSn ? `[part-${newDetails.lastPartSn}-${newDetails.lastPartIndex}]` : ''},duration:${newDetails.totalduration}`);\n    this.mediaBuffer = this.mediaBufferTimeRanges;\n    let sliding = 0;\n    if (newDetails.live || (_track$details = track.details) != null && _track$details.live) {\n      const mainDetails = this.mainDetails;\n      if (newDetails.deltaUpdateFailed || !mainDetails) {\n        return;\n      }\n      const mainSlidingStartFragment = mainDetails.fragments[0];\n      if (!track.details) {\n        if (newDetails.hasProgramDateTime && mainDetails.hasProgramDateTime) {\n          alignMediaPlaylistByPDT(newDetails, mainDetails);\n          sliding = newDetails.fragments[0].start;\n        } else if (mainSlidingStartFragment) {\n          // line up live playlist with main so that fragments in range are loaded\n          sliding = mainSlidingStartFragment.start;\n          addSliding(newDetails, sliding);\n        }\n      } else {\n        var _this$levelLastLoaded;\n        sliding = this.alignPlaylists(newDetails, track.details, (_this$levelLastLoaded = this.levelLastLoaded) == null ? void 0 : _this$levelLastLoaded.details);\n        if (sliding === 0 && mainSlidingStartFragment) {\n          // realign with main when there is no overlap with last refresh\n          sliding = mainSlidingStartFragment.start;\n          addSliding(newDetails, sliding);\n        }\n      }\n    }\n    track.details = newDetails;\n    this.levelLastLoaded = track;\n    if (trackId !== currentTrackId) {\n      return;\n    }\n    if (!this.startFragRequested && (this.mainDetails || !newDetails.live)) {\n      this.setStartPosition(this.mainDetails || newDetails, sliding);\n    }\n\n    // trigger handler right now\n    this.tick();\n\n    // If playlist is misaligned because of bad PDT or drift, delete details to resync with main on reload\n    if (newDetails.live && !this.fragCurrent && this.media && this.state === State.IDLE) {\n      const foundFrag = findFragmentByPTS(null, newDetails.fragments, this.media.currentTime, 0);\n      if (!foundFrag) {\n        this.warn('Subtitle playlist not aligned with playback');\n        track.details = undefined;\n      }\n    }\n  }\n  _handleFragmentLoadComplete(fragLoadedData) {\n    const {\n      frag,\n      payload\n    } = fragLoadedData;\n    const decryptData = frag.decryptdata;\n    const hls = this.hls;\n    if (this.fragContextChanged(frag)) {\n      return;\n    }\n    // check to see if the payload needs to be decrypted\n    if (payload && payload.byteLength > 0 && decryptData != null && decryptData.key && decryptData.iv && decryptData.method === 'AES-128') {\n      const startTime = performance.now();\n      // decrypt the subtitles\n      this.decrypter.decrypt(new Uint8Array(payload), decryptData.key.buffer, decryptData.iv.buffer).catch(err => {\n        hls.trigger(Events.ERROR, {\n          type: ErrorTypes.MEDIA_ERROR,\n          details: ErrorDetails.FRAG_DECRYPT_ERROR,\n          fatal: false,\n          error: err,\n          reason: err.message,\n          frag\n        });\n        throw err;\n      }).then(decryptedData => {\n        const endTime = performance.now();\n        hls.trigger(Events.FRAG_DECRYPTED, {\n          frag,\n          payload: decryptedData,\n          stats: {\n            tstart: startTime,\n            tdecrypt: endTime\n          }\n        });\n      }).catch(err => {\n        this.warn(`${err.name}: ${err.message}`);\n        this.state = State.IDLE;\n      });\n    }\n  }\n  doTick() {\n    if (!this.media) {\n      this.state = State.IDLE;\n      return;\n    }\n    if (this.state === State.IDLE) {\n      const {\n        currentTrackId,\n        levels\n      } = this;\n      const track = levels == null ? void 0 : levels[currentTrackId];\n      if (!track || !levels.length || !track.details) {\n        return;\n      }\n      const {\n        config\n      } = this;\n      const currentTime = this.getLoadPosition();\n      const bufferedInfo = BufferHelper.bufferedInfo(this.tracksBuffered[this.currentTrackId] || [], currentTime, config.maxBufferHole);\n      const {\n        end: targetBufferTime,\n        len: bufferLen\n      } = bufferedInfo;\n      const mainBufferInfo = this.getFwdBufferInfo(this.media, PlaylistLevelType.MAIN);\n      const trackDetails = track.details;\n      const maxBufLen = this.getMaxBufferLength(mainBufferInfo == null ? void 0 : mainBufferInfo.len) + trackDetails.levelTargetDuration;\n      if (bufferLen > maxBufLen) {\n        return;\n      }\n      const fragments = trackDetails.fragments;\n      const fragLen = fragments.length;\n      const end = trackDetails.edge;\n      let foundFrag = null;\n      const fragPrevious = this.fragPrevious;\n      if (targetBufferTime < end) {\n        const tolerance = config.maxFragLookUpTolerance;\n        const lookupTolerance = targetBufferTime > end - tolerance ? 0 : tolerance;\n        foundFrag = findFragmentByPTS(fragPrevious, fragments, Math.max(fragments[0].start, targetBufferTime), lookupTolerance);\n        if (!foundFrag && fragPrevious && fragPrevious.start < fragments[0].start) {\n          foundFrag = fragments[0];\n        }\n      } else {\n        foundFrag = fragments[fragLen - 1];\n      }\n      if (!foundFrag) {\n        return;\n      }\n      foundFrag = this.mapToInitFragWhenRequired(foundFrag);\n      if (foundFrag.sn !== 'initSegment') {\n        // Load earlier fragment in same discontinuity to make up for misaligned playlists and cues that extend beyond end of segment\n        const curSNIdx = foundFrag.sn - trackDetails.startSN;\n        const prevFrag = fragments[curSNIdx - 1];\n        if (prevFrag && prevFrag.cc === foundFrag.cc && this.fragmentTracker.getState(prevFrag) === FragmentState.NOT_LOADED) {\n          foundFrag = prevFrag;\n        }\n      }\n      if (this.fragmentTracker.getState(foundFrag) === FragmentState.NOT_LOADED) {\n        // only load if fragment is not loaded\n        this.loadFragment(foundFrag, track, targetBufferTime);\n      }\n    }\n  }\n  getMaxBufferLength(mainBufferLength) {\n    const maxConfigBuffer = super.getMaxBufferLength();\n    if (!mainBufferLength) {\n      return maxConfigBuffer;\n    }\n    return Math.max(maxConfigBuffer, mainBufferLength);\n  }\n  loadFragment(frag, level, targetBufferTime) {\n    this.fragCurrent = frag;\n    if (frag.sn === 'initSegment') {\n      this._loadInitSegment(frag, level);\n    } else {\n      this.startFragRequested = true;\n      super.loadFragment(frag, level, targetBufferTime);\n    }\n  }\n  get mediaBufferTimeRanges() {\n    return new BufferableInstance(this.tracksBuffered[this.currentTrackId] || []);\n  }\n}\nclass BufferableInstance {\n  constructor(timeranges) {\n    this.buffered = void 0;\n    const getRange = (name, index, length) => {\n      index = index >>> 0;\n      if (index > length - 1) {\n        throw new DOMException(`Failed to execute '${name}' on 'TimeRanges': The index provided (${index}) is greater than the maximum bound (${length})`);\n      }\n      return timeranges[index][name];\n    };\n    this.buffered = {\n      get length() {\n        return timeranges.length;\n      },\n      end(index) {\n        return getRange('end', index, timeranges.length);\n      },\n      start(index) {\n        return getRange('start', index, timeranges.length);\n      }\n    };\n  }\n}\n\nclass SubtitleTrackController extends BasePlaylistController {\n  constructor(hls) {\n    super(hls, '[subtitle-track-controller]');\n    this.media = null;\n    this.tracks = [];\n    this.groupIds = null;\n    this.tracksInGroup = [];\n    this.trackId = -1;\n    this.currentTrack = null;\n    this.selectDefaultTrack = true;\n    this.queuedDefaultTrack = -1;\n    this.asyncPollTrackChange = () => this.pollTrackChange(0);\n    this.useTextTrackPolling = false;\n    this.subtitlePollingInterval = -1;\n    this._subtitleDisplay = true;\n    this.onTextTracksChanged = () => {\n      if (!this.useTextTrackPolling) {\n        self.clearInterval(this.subtitlePollingInterval);\n      }\n      // Media is undefined when switching streams via loadSource()\n      if (!this.media || !this.hls.config.renderTextTracksNatively) {\n        return;\n      }\n      let textTrack = null;\n      const tracks = filterSubtitleTracks(this.media.textTracks);\n      for (let i = 0; i < tracks.length; i++) {\n        if (tracks[i].mode === 'hidden') {\n          // Do not break in case there is a following track with showing.\n          textTrack = tracks[i];\n        } else if (tracks[i].mode === 'showing') {\n          textTrack = tracks[i];\n          break;\n        }\n      }\n\n      // Find internal track index for TextTrack\n      const trackId = this.findTrackForTextTrack(textTrack);\n      if (this.subtitleTrack !== trackId) {\n        this.setSubtitleTrack(trackId);\n      }\n    };\n    this.registerListeners();\n  }\n  destroy() {\n    this.unregisterListeners();\n    this.tracks.length = 0;\n    this.tracksInGroup.length = 0;\n    this.currentTrack = null;\n    this.onTextTracksChanged = this.asyncPollTrackChange = null;\n    super.destroy();\n  }\n  get subtitleDisplay() {\n    return this._subtitleDisplay;\n  }\n  set subtitleDisplay(value) {\n    this._subtitleDisplay = value;\n    if (this.trackId > -1) {\n      this.toggleTrackModes();\n    }\n  }\n  registerListeners() {\n    const {\n      hls\n    } = this;\n    hls.on(Events.MEDIA_ATTACHED, this.onMediaAttached, this);\n    hls.on(Events.MEDIA_DETACHING, this.onMediaDetaching, this);\n    hls.on(Events.MANIFEST_LOADING, this.onManifestLoading, this);\n    hls.on(Events.MANIFEST_PARSED, this.onManifestParsed, this);\n    hls.on(Events.LEVEL_LOADING, this.onLevelLoading, this);\n    hls.on(Events.LEVEL_SWITCHING, this.onLevelSwitching, this);\n    hls.on(Events.SUBTITLE_TRACK_LOADED, this.onSubtitleTrackLoaded, this);\n    hls.on(Events.ERROR, this.onError, this);\n  }\n  unregisterListeners() {\n    const {\n      hls\n    } = this;\n    hls.off(Events.MEDIA_ATTACHED, this.onMediaAttached, this);\n    hls.off(Events.MEDIA_DETACHING, this.onMediaDetaching, this);\n    hls.off(Events.MANIFEST_LOADING, this.onManifestLoading, this);\n    hls.off(Events.MANIFEST_PARSED, this.onManifestParsed, this);\n    hls.off(Events.LEVEL_LOADING, this.onLevelLoading, this);\n    hls.off(Events.LEVEL_SWITCHING, this.onLevelSwitching, this);\n    hls.off(Events.SUBTITLE_TRACK_LOADED, this.onSubtitleTrackLoaded, this);\n    hls.off(Events.ERROR, this.onError, this);\n  }\n\n  // Listen for subtitle track change, then extract the current track ID.\n  onMediaAttached(event, data) {\n    this.media = data.media;\n    if (!this.media) {\n      return;\n    }\n    if (this.queuedDefaultTrack > -1) {\n      this.subtitleTrack = this.queuedDefaultTrack;\n      this.queuedDefaultTrack = -1;\n    }\n    this.useTextTrackPolling = !(this.media.textTracks && 'onchange' in this.media.textTracks);\n    if (this.useTextTrackPolling) {\n      this.pollTrackChange(500);\n    } else {\n      this.media.textTracks.addEventListener('change', this.asyncPollTrackChange);\n    }\n  }\n  pollTrackChange(timeout) {\n    self.clearInterval(this.subtitlePollingInterval);\n    this.subtitlePollingInterval = self.setInterval(this.onTextTracksChanged, timeout);\n  }\n  onMediaDetaching() {\n    if (!this.media) {\n      return;\n    }\n    self.clearInterval(this.subtitlePollingInterval);\n    if (!this.useTextTrackPolling) {\n      this.media.textTracks.removeEventListener('change', this.asyncPollTrackChange);\n    }\n    if (this.trackId > -1) {\n      this.queuedDefaultTrack = this.trackId;\n    }\n    const textTracks = filterSubtitleTracks(this.media.textTracks);\n    // Clear loaded cues on media detachment from tracks\n    textTracks.forEach(track => {\n      clearCurrentCues(track);\n    });\n    // Disable all subtitle tracks before detachment so when reattached only tracks in that content are enabled.\n    this.subtitleTrack = -1;\n    this.media = null;\n  }\n  onManifestLoading() {\n    this.tracks = [];\n    this.groupIds = null;\n    this.tracksInGroup = [];\n    this.trackId = -1;\n    this.currentTrack = null;\n    this.selectDefaultTrack = true;\n  }\n\n  // Fired whenever a new manifest is loaded.\n  onManifestParsed(event, data) {\n    this.tracks = data.subtitleTracks;\n  }\n  onSubtitleTrackLoaded(event, data) {\n    const {\n      id,\n      groupId,\n      details\n    } = data;\n    const trackInActiveGroup = this.tracksInGroup[id];\n    if (!trackInActiveGroup || trackInActiveGroup.groupId !== groupId) {\n      this.warn(`Subtitle track with id:${id} and group:${groupId} not found in active group ${trackInActiveGroup == null ? void 0 : trackInActiveGroup.groupId}`);\n      return;\n    }\n    const curDetails = trackInActiveGroup.details;\n    trackInActiveGroup.details = data.details;\n    this.log(`Subtitle track ${id} \"${trackInActiveGroup.name}\" lang:${trackInActiveGroup.lang} group:${groupId} loaded [${details.startSN}-${details.endSN}]`);\n    if (id === this.trackId) {\n      this.playlistLoaded(id, data, curDetails);\n    }\n  }\n  onLevelLoading(event, data) {\n    this.switchLevel(data.level);\n  }\n  onLevelSwitching(event, data) {\n    this.switchLevel(data.level);\n  }\n  switchLevel(levelIndex) {\n    const levelInfo = this.hls.levels[levelIndex];\n    if (!levelInfo) {\n      return;\n    }\n    const subtitleGroups = levelInfo.subtitleGroups || null;\n    const currentGroups = this.groupIds;\n    let currentTrack = this.currentTrack;\n    if (!subtitleGroups || (currentGroups == null ? void 0 : currentGroups.length) !== (subtitleGroups == null ? void 0 : subtitleGroups.length) || subtitleGroups != null && subtitleGroups.some(groupId => (currentGroups == null ? void 0 : currentGroups.indexOf(groupId)) === -1)) {\n      this.groupIds = subtitleGroups;\n      this.trackId = -1;\n      this.currentTrack = null;\n      const subtitleTracks = this.tracks.filter(track => !subtitleGroups || subtitleGroups.indexOf(track.groupId) !== -1);\n      if (subtitleTracks.length) {\n        // Disable selectDefaultTrack if there are no default tracks\n        if (this.selectDefaultTrack && !subtitleTracks.some(track => track.default)) {\n          this.selectDefaultTrack = false;\n        }\n        // track.id should match hls.audioTracks index\n        subtitleTracks.forEach((track, i) => {\n          track.id = i;\n        });\n      } else if (!currentTrack && !this.tracksInGroup.length) {\n        // Do not dispatch SUBTITLE_TRACKS_UPDATED when there were and are no tracks\n        return;\n      }\n      this.tracksInGroup = subtitleTracks;\n\n      // Find preferred track\n      const subtitlePreference = this.hls.config.subtitlePreference;\n      if (!currentTrack && subtitlePreference) {\n        this.selectDefaultTrack = false;\n        const groupIndex = findMatchingOption(subtitlePreference, subtitleTracks);\n        if (groupIndex > -1) {\n          currentTrack = subtitleTracks[groupIndex];\n        } else {\n          const allIndex = findMatchingOption(subtitlePreference, this.tracks);\n          currentTrack = this.tracks[allIndex];\n        }\n      }\n\n      // Select initial track\n      let trackId = this.findTrackId(currentTrack);\n      if (trackId === -1 && currentTrack) {\n        trackId = this.findTrackId(null);\n      }\n\n      // Dispatch events and load track if needed\n      const subtitleTracksUpdated = {\n        subtitleTracks\n      };\n      this.log(`Updating subtitle tracks, ${subtitleTracks.length} track(s) found in \"${subtitleGroups == null ? void 0 : subtitleGroups.join(',')}\" group-id`);\n      this.hls.trigger(Events.SUBTITLE_TRACKS_UPDATED, subtitleTracksUpdated);\n      if (trackId !== -1 && this.trackId === -1) {\n        this.setSubtitleTrack(trackId);\n      }\n    } else if (this.shouldReloadPlaylist(currentTrack)) {\n      // Retry playlist loading if no playlist is or has been loaded yet\n      this.setSubtitleTrack(this.trackId);\n    }\n  }\n  findTrackId(currentTrack) {\n    const tracks = this.tracksInGroup;\n    const selectDefault = this.selectDefaultTrack;\n    for (let i = 0; i < tracks.length; i++) {\n      const track = tracks[i];\n      if (selectDefault && !track.default || !selectDefault && !currentTrack) {\n        continue;\n      }\n      if (!currentTrack || matchesOption(track, currentTrack)) {\n        return i;\n      }\n    }\n    if (currentTrack) {\n      for (let i = 0; i < tracks.length; i++) {\n        const track = tracks[i];\n        if (mediaAttributesIdentical(currentTrack.attrs, track.attrs, ['LANGUAGE', 'ASSOC-LANGUAGE', 'CHARACTERISTICS'])) {\n          return i;\n        }\n      }\n      for (let i = 0; i < tracks.length; i++) {\n        const track = tracks[i];\n        if (mediaAttributesIdentical(currentTrack.attrs, track.attrs, ['LANGUAGE'])) {\n          return i;\n        }\n      }\n    }\n    return -1;\n  }\n  findTrackForTextTrack(textTrack) {\n    if (textTrack) {\n      const tracks = this.tracksInGroup;\n      for (let i = 0; i < tracks.length; i++) {\n        const track = tracks[i];\n        if (subtitleTrackMatchesTextTrack(track, textTrack)) {\n          return i;\n        }\n      }\n    }\n    return -1;\n  }\n  onError(event, data) {\n    if (data.fatal || !data.context) {\n      return;\n    }\n    if (data.context.type === PlaylistContextType.SUBTITLE_TRACK && data.context.id === this.trackId && (!this.groupIds || this.groupIds.indexOf(data.context.groupId) !== -1)) {\n      this.checkRetry(data);\n    }\n  }\n  get allSubtitleTracks() {\n    return this.tracks;\n  }\n\n  /** get alternate subtitle tracks list from playlist **/\n  get subtitleTracks() {\n    return this.tracksInGroup;\n  }\n\n  /** get/set index of the selected subtitle track (based on index in subtitle track lists) **/\n  get subtitleTrack() {\n    return this.trackId;\n  }\n  set subtitleTrack(newId) {\n    this.selectDefaultTrack = false;\n    this.setSubtitleTrack(newId);\n  }\n  setSubtitleOption(subtitleOption) {\n    this.hls.config.subtitlePreference = subtitleOption;\n    if (subtitleOption) {\n      const allSubtitleTracks = this.allSubtitleTracks;\n      this.selectDefaultTrack = false;\n      if (allSubtitleTracks.length) {\n        // First see if current option matches (no switch op)\n        const currentTrack = this.currentTrack;\n        if (currentTrack && matchesOption(subtitleOption, currentTrack)) {\n          return currentTrack;\n        }\n        // Find option in current group\n        const groupIndex = findMatchingOption(subtitleOption, this.tracksInGroup);\n        if (groupIndex > -1) {\n          const track = this.tracksInGroup[groupIndex];\n          this.setSubtitleTrack(groupIndex);\n          return track;\n        } else if (currentTrack) {\n          // If this is not the initial selection return null\n          // option should have matched one in active group\n          return null;\n        } else {\n          // Find the option in all tracks for initial selection\n          const allIndex = findMatchingOption(subtitleOption, allSubtitleTracks);\n          if (allIndex > -1) {\n            return allSubtitleTracks[allIndex];\n          }\n        }\n      }\n    }\n    return null;\n  }\n  loadPlaylist(hlsUrlParameters) {\n    super.loadPlaylist();\n    const currentTrack = this.currentTrack;\n    if (this.shouldLoadPlaylist(currentTrack) && currentTrack) {\n      const id = currentTrack.id;\n      const groupId = currentTrack.groupId;\n      let url = currentTrack.url;\n      if (hlsUrlParameters) {\n        try {\n          url = hlsUrlParameters.addDirectives(url);\n        } catch (error) {\n          this.warn(`Could not construct new URL with HLS Delivery Directives: ${error}`);\n        }\n      }\n      this.log(`Loading subtitle playlist for id ${id}`);\n      this.hls.trigger(Events.SUBTITLE_TRACK_LOADING, {\n        url,\n        id,\n        groupId,\n        deliveryDirectives: hlsUrlParameters || null\n      });\n    }\n  }\n\n  /**\n   * Disables the old subtitleTrack and sets current mode on the next subtitleTrack.\n   * This operates on the DOM textTracks.\n   * A value of -1 will disable all subtitle tracks.\n   */\n  toggleTrackModes() {\n    const {\n      media\n    } = this;\n    if (!media) {\n      return;\n    }\n    const textTracks = filterSubtitleTracks(media.textTracks);\n    const currentTrack = this.currentTrack;\n    let nextTrack;\n    if (currentTrack) {\n      nextTrack = textTracks.filter(textTrack => subtitleTrackMatchesTextTrack(currentTrack, textTrack))[0];\n      if (!nextTrack) {\n        this.warn(`Unable to find subtitle TextTrack with name \"${currentTrack.name}\" and language \"${currentTrack.lang}\"`);\n      }\n    }\n    [].slice.call(textTracks).forEach(track => {\n      if (track.mode !== 'disabled' && track !== nextTrack) {\n        track.mode = 'disabled';\n      }\n    });\n    if (nextTrack) {\n      const mode = this.subtitleDisplay ? 'showing' : 'hidden';\n      if (nextTrack.mode !== mode) {\n        nextTrack.mode = mode;\n      }\n    }\n  }\n\n  /**\n   * This method is responsible for validating the subtitle index and periodically reloading if live.\n   * Dispatches the SUBTITLE_TRACK_SWITCH event, which instructs the subtitle-stream-controller to load the selected track.\n   */\n  setSubtitleTrack(newId) {\n    const tracks = this.tracksInGroup;\n\n    // setting this.subtitleTrack will trigger internal logic\n    // if media has not been attached yet, it will fail\n    // we keep a reference to the default track id\n    // and we'll set subtitleTrack when onMediaAttached is triggered\n    if (!this.media) {\n      this.queuedDefaultTrack = newId;\n      return;\n    }\n\n    // exit if track id as already set or invalid\n    if (newId < -1 || newId >= tracks.length || !isFiniteNumber(newId)) {\n      this.warn(`Invalid subtitle track id: ${newId}`);\n      return;\n    }\n\n    // stopping live reloading timer if any\n    this.clearTimer();\n    this.selectDefaultTrack = false;\n    const lastTrack = this.currentTrack;\n    const track = tracks[newId] || null;\n    this.trackId = newId;\n    this.currentTrack = track;\n    this.toggleTrackModes();\n    if (!track) {\n      // switch to -1\n      this.hls.trigger(Events.SUBTITLE_TRACK_SWITCH, {\n        id: newId\n      });\n      return;\n    }\n    const trackLoaded = !!track.details && !track.details.live;\n    if (newId === this.trackId && track === lastTrack && trackLoaded) {\n      return;\n    }\n    this.log(`Switching to subtitle-track ${newId}` + (track ? ` \"${track.name}\" lang:${track.lang} group:${track.groupId}` : ''));\n    const {\n      id,\n      groupId = '',\n      name,\n      type,\n      url\n    } = track;\n    this.hls.trigger(Events.SUBTITLE_TRACK_SWITCH, {\n      id,\n      groupId,\n      name,\n      type,\n      url\n    });\n    const hlsUrlParameters = this.switchParams(track.url, lastTrack == null ? void 0 : lastTrack.details, track.details);\n    this.loadPlaylist(hlsUrlParameters);\n  }\n}\n\nclass BufferOperationQueue {\n  constructor(sourceBufferReference) {\n    this.buffers = void 0;\n    this.queues = {\n      video: [],\n      audio: [],\n      audiovideo: []\n    };\n    this.buffers = sourceBufferReference;\n  }\n  append(operation, type, pending) {\n    const queue = this.queues[type];\n    queue.push(operation);\n    if (queue.length === 1 && !pending) {\n      this.executeNext(type);\n    }\n  }\n  insertAbort(operation, type) {\n    const queue = this.queues[type];\n    queue.unshift(operation);\n    this.executeNext(type);\n  }\n  appendBlocker(type) {\n    let execute;\n    const promise = new Promise(resolve => {\n      execute = resolve;\n    });\n    const operation = {\n      execute,\n      onStart: () => {},\n      onComplete: () => {},\n      onError: () => {}\n    };\n    this.append(operation, type);\n    return promise;\n  }\n  executeNext(type) {\n    const queue = this.queues[type];\n    if (queue.length) {\n      const operation = queue[0];\n      try {\n        // Operations are expected to result in an 'updateend' event being fired. If not, the queue will lock. Operations\n        // which do not end with this event must call _onSBUpdateEnd manually\n        operation.execute();\n      } catch (error) {\n        logger.warn(`[buffer-operation-queue]: Exception executing \"${type}\" SourceBuffer operation: ${error}`);\n        operation.onError(error);\n\n        // Only shift the current operation off, otherwise the updateend handler will do this for us\n        const sb = this.buffers[type];\n        if (!(sb != null && sb.updating)) {\n          this.shiftAndExecuteNext(type);\n        }\n      }\n    }\n  }\n  shiftAndExecuteNext(type) {\n    this.queues[type].shift();\n    this.executeNext(type);\n  }\n  current(type) {\n    return this.queues[type][0];\n  }\n}\n\nconst VIDEO_CODEC_PROFILE_REPLACE = /(avc[1234]|hvc1|hev1|dvh[1e]|vp09|av01)(?:\\.[^.,]+)+/;\nclass BufferController {\n  constructor(hls) {\n    // The level details used to determine duration, target-duration and live\n    this.details = null;\n    // cache the self generated object url to detect hijack of video tag\n    this._objectUrl = null;\n    // A queue of buffer operations which require the SourceBuffer to not be updating upon execution\n    this.operationQueue = void 0;\n    // References to event listeners for each SourceBuffer, so that they can be referenced for event removal\n    this.listeners = void 0;\n    this.hls = void 0;\n    // The number of BUFFER_CODEC events received before any sourceBuffers are created\n    this.bufferCodecEventsExpected = 0;\n    // The total number of BUFFER_CODEC events received\n    this._bufferCodecEventsTotal = 0;\n    // A reference to the attached media element\n    this.media = null;\n    // A reference to the active media source\n    this.mediaSource = null;\n    // Last MP3 audio chunk appended\n    this.lastMpegAudioChunk = null;\n    this.appendSource = void 0;\n    // counters\n    this.appendErrors = {\n      audio: 0,\n      video: 0,\n      audiovideo: 0\n    };\n    this.tracks = {};\n    this.pendingTracks = {};\n    this.sourceBuffer = void 0;\n    this.log = void 0;\n    this.warn = void 0;\n    this.error = void 0;\n    this._onEndStreaming = event => {\n      if (!this.hls) {\n        return;\n      }\n      this.hls.pauseBuffering();\n    };\n    this._onStartStreaming = event => {\n      if (!this.hls) {\n        return;\n      }\n      this.hls.resumeBuffering();\n    };\n    // Keep as arrow functions so that we can directly reference these functions directly as event listeners\n    this._onMediaSourceOpen = () => {\n      const {\n        media,\n        mediaSource\n      } = this;\n      this.log('Media source opened');\n      if (media) {\n        media.removeEventListener('emptied', this._onMediaEmptied);\n        this.updateMediaElementDuration();\n        this.hls.trigger(Events.MEDIA_ATTACHED, {\n          media,\n          mediaSource: mediaSource\n        });\n      }\n      if (mediaSource) {\n        // once received, don't listen anymore to sourceopen event\n        mediaSource.removeEventListener('sourceopen', this._onMediaSourceOpen);\n      }\n      this.checkPendingTracks();\n    };\n    this._onMediaSourceClose = () => {\n      this.log('Media source closed');\n    };\n    this._onMediaSourceEnded = () => {\n      this.log('Media source ended');\n    };\n    this._onMediaEmptied = () => {\n      const {\n        mediaSrc,\n        _objectUrl\n      } = this;\n      if (mediaSrc !== _objectUrl) {\n        logger.error(`Media element src was set while attaching MediaSource (${_objectUrl} > ${mediaSrc})`);\n      }\n    };\n    this.hls = hls;\n    const logPrefix = '[buffer-controller]';\n    this.appendSource = isManagedMediaSource(getMediaSource(hls.config.preferManagedMediaSource));\n    this.log = logger.log.bind(logger, logPrefix);\n    this.warn = logger.warn.bind(logger, logPrefix);\n    this.error = logger.error.bind(logger, logPrefix);\n    this._initSourceBuffer();\n    this.registerListeners();\n  }\n  hasSourceTypes() {\n    return this.getSourceBufferTypes().length > 0 || Object.keys(this.pendingTracks).length > 0;\n  }\n  destroy() {\n    this.unregisterListeners();\n    this.details = null;\n    this.lastMpegAudioChunk = null;\n    // @ts-ignore\n    this.hls = null;\n  }\n  registerListeners() {\n    const {\n      hls\n    } = this;\n    hls.on(Events.MEDIA_ATTACHING, this.onMediaAttaching, this);\n    hls.on(Events.MEDIA_DETACHING, this.onMediaDetaching, this);\n    hls.on(Events.MANIFEST_LOADING, this.onManifestLoading, this);\n    hls.on(Events.MANIFEST_PARSED, this.onManifestParsed, this);\n    hls.on(Events.BUFFER_RESET, this.onBufferReset, this);\n    hls.on(Events.BUFFER_APPENDING, this.onBufferAppending, this);\n    hls.on(Events.BUFFER_CODECS, this.onBufferCodecs, this);\n    hls.on(Events.BUFFER_EOS, this.onBufferEos, this);\n    hls.on(Events.BUFFER_FLUSHING, this.onBufferFlushing, this);\n    hls.on(Events.LEVEL_UPDATED, this.onLevelUpdated, this);\n    hls.on(Events.FRAG_PARSED, this.onFragParsed, this);\n    hls.on(Events.FRAG_CHANGED, this.onFragChanged, this);\n  }\n  unregisterListeners() {\n    const {\n      hls\n    } = this;\n    hls.off(Events.MEDIA_ATTACHING, this.onMediaAttaching, this);\n    hls.off(Events.MEDIA_DETACHING, this.onMediaDetaching, this);\n    hls.off(Events.MANIFEST_LOADING, this.onManifestLoading, this);\n    hls.off(Events.MANIFEST_PARSED, this.onManifestParsed, this);\n    hls.off(Events.BUFFER_RESET, this.onBufferReset, this);\n    hls.off(Events.BUFFER_APPENDING, this.onBufferAppending, this);\n    hls.off(Events.BUFFER_CODECS, this.onBufferCodecs, this);\n    hls.off(Events.BUFFER_EOS, this.onBufferEos, this);\n    hls.off(Events.BUFFER_FLUSHING, this.onBufferFlushing, this);\n    hls.off(Events.LEVEL_UPDATED, this.onLevelUpdated, this);\n    hls.off(Events.FRAG_PARSED, this.onFragParsed, this);\n    hls.off(Events.FRAG_CHANGED, this.onFragChanged, this);\n  }\n  _initSourceBuffer() {\n    this.sourceBuffer = {};\n    this.operationQueue = new BufferOperationQueue(this.sourceBuffer);\n    this.listeners = {\n      audio: [],\n      video: [],\n      audiovideo: []\n    };\n    this.appendErrors = {\n      audio: 0,\n      video: 0,\n      audiovideo: 0\n    };\n    this.lastMpegAudioChunk = null;\n  }\n  onManifestLoading() {\n    this.bufferCodecEventsExpected = this._bufferCodecEventsTotal = 0;\n    this.details = null;\n  }\n  onManifestParsed(event, data) {\n    // in case of alt audio 2 BUFFER_CODECS events will be triggered, one per stream controller\n    // sourcebuffers will be created all at once when the expected nb of tracks will be reached\n    // in case alt audio is not used, only one BUFFER_CODEC event will be fired from main stream controller\n    // it will contain the expected nb of source buffers, no need to compute it\n    let codecEvents = 2;\n    if (data.audio && !data.video || !data.altAudio || !true) {\n      codecEvents = 1;\n    }\n    this.bufferCodecEventsExpected = this._bufferCodecEventsTotal = codecEvents;\n    this.log(`${this.bufferCodecEventsExpected} bufferCodec event(s) expected`);\n  }\n  onMediaAttaching(event, data) {\n    const media = this.media = data.media;\n    const MediaSource = getMediaSource(this.appendSource);\n    if (media && MediaSource) {\n      var _ms$constructor;\n      const ms = this.mediaSource = new MediaSource();\n      this.log(`created media source: ${(_ms$constructor = ms.constructor) == null ? void 0 : _ms$constructor.name}`);\n      // MediaSource listeners are arrow functions with a lexical scope, and do not need to be bound\n      ms.addEventListener('sourceopen', this._onMediaSourceOpen);\n      ms.addEventListener('sourceended', this._onMediaSourceEnded);\n      ms.addEventListener('sourceclose', this._onMediaSourceClose);\n      if (this.appendSource) {\n        ms.addEventListener('startstreaming', this._onStartStreaming);\n        ms.addEventListener('endstreaming', this._onEndStreaming);\n      }\n\n      // cache the locally generated object url\n      const objectUrl = this._objectUrl = self.URL.createObjectURL(ms);\n      // link video and media Source\n      if (this.appendSource) {\n        try {\n          media.removeAttribute('src');\n          // ManagedMediaSource will not open without disableRemotePlayback set to false or source alternatives\n          const MMS = self.ManagedMediaSource;\n          media.disableRemotePlayback = media.disableRemotePlayback || MMS && ms instanceof MMS;\n          removeSourceChildren(media);\n          addSource(media, objectUrl);\n          media.load();\n        } catch (error) {\n          media.src = objectUrl;\n        }\n      } else {\n        media.src = objectUrl;\n      }\n      media.addEventListener('emptied', this._onMediaEmptied);\n    }\n  }\n  onMediaDetaching() {\n    const {\n      media,\n      mediaSource,\n      _objectUrl\n    } = this;\n    if (mediaSource) {\n      this.log('media source detaching');\n      if (mediaSource.readyState === 'open') {\n        try {\n          // endOfStream could trigger exception if any sourcebuffer is in updating state\n          // we don't really care about checking sourcebuffer state here,\n          // as we are anyway detaching the MediaSource\n          // let's just avoid this exception to propagate\n          mediaSource.endOfStream();\n        } catch (err) {\n          this.warn(`onMediaDetaching: ${err.message} while calling endOfStream`);\n        }\n      }\n      // Clean up the SourceBuffers by invoking onBufferReset\n      this.onBufferReset();\n      mediaSource.removeEventListener('sourceopen', this._onMediaSourceOpen);\n      mediaSource.removeEventListener('sourceended', this._onMediaSourceEnded);\n      mediaSource.removeEventListener('sourceclose', this._onMediaSourceClose);\n      if (this.appendSource) {\n        mediaSource.removeEventListener('startstreaming', this._onStartStreaming);\n        mediaSource.removeEventListener('endstreaming', this._onEndStreaming);\n      }\n\n      // Detach properly the MediaSource from the HTMLMediaElement as\n      // suggested in https://github.com/w3c/media-source/issues/53.\n      if (media) {\n        media.removeEventListener('emptied', this._onMediaEmptied);\n        if (_objectUrl) {\n          self.URL.revokeObjectURL(_objectUrl);\n        }\n\n        // clean up video tag src only if it's our own url. some external libraries might\n        // hijack the video tag and change its 'src' without destroying the Hls instance first\n        if (this.mediaSrc === _objectUrl) {\n          media.removeAttribute('src');\n          if (this.appendSource) {\n            removeSourceChildren(media);\n          }\n          media.load();\n        } else {\n          this.warn('media|source.src was changed by a third party - skip cleanup');\n        }\n      }\n      this.mediaSource = null;\n      this.media = null;\n      this._objectUrl = null;\n      this.bufferCodecEventsExpected = this._bufferCodecEventsTotal;\n      this.pendingTracks = {};\n      this.tracks = {};\n    }\n    this.hls.trigger(Events.MEDIA_DETACHED, undefined);\n  }\n  onBufferReset() {\n    this.getSourceBufferTypes().forEach(type => {\n      this.resetBuffer(type);\n    });\n    this._initSourceBuffer();\n    this.hls.resumeBuffering();\n  }\n  resetBuffer(type) {\n    const sb = this.sourceBuffer[type];\n    try {\n      if (sb) {\n        var _this$mediaSource;\n        this.removeBufferListeners(type);\n        // Synchronously remove the SB from the map before the next call in order to prevent an async function from\n        // accessing it\n        this.sourceBuffer[type] = undefined;\n        if ((_this$mediaSource = this.mediaSource) != null && _this$mediaSource.sourceBuffers.length) {\n          this.mediaSource.removeSourceBuffer(sb);\n        }\n      }\n    } catch (err) {\n      this.warn(`onBufferReset ${type}`, err);\n    }\n  }\n  onBufferCodecs(event, data) {\n    const sourceBufferCount = this.getSourceBufferTypes().length;\n    const trackNames = Object.keys(data);\n    trackNames.forEach(trackName => {\n      if (sourceBufferCount) {\n        // check if SourceBuffer codec needs to change\n        const track = this.tracks[trackName];\n        if (track && typeof track.buffer.changeType === 'function') {\n          var _trackCodec;\n          const {\n            id,\n            codec,\n            levelCodec,\n            container,\n            metadata\n          } = data[trackName];\n          const currentCodecFull = pickMostCompleteCodecName(track.codec, track.levelCodec);\n          const currentCodec = currentCodecFull == null ? void 0 : currentCodecFull.replace(VIDEO_CODEC_PROFILE_REPLACE, '$1');\n          let trackCodec = pickMostCompleteCodecName(codec, levelCodec);\n          const nextCodec = (_trackCodec = trackCodec) == null ? void 0 : _trackCodec.replace(VIDEO_CODEC_PROFILE_REPLACE, '$1');\n          if (trackCodec && currentCodec !== nextCodec) {\n            if (trackName.slice(0, 5) === 'audio') {\n              trackCodec = getCodecCompatibleName(trackCodec, this.appendSource);\n            }\n            const mimeType = `${container};codecs=${trackCodec}`;\n            this.appendChangeType(trackName, mimeType);\n            this.log(`switching codec ${currentCodecFull} to ${trackCodec}`);\n            this.tracks[trackName] = {\n              buffer: track.buffer,\n              codec,\n              container,\n              levelCodec,\n              metadata,\n              id\n            };\n          }\n        }\n      } else {\n        // if source buffer(s) not created yet, appended buffer tracks in this.pendingTracks\n        this.pendingTracks[trackName] = data[trackName];\n      }\n    });\n\n    // if sourcebuffers already created, do nothing ...\n    if (sourceBufferCount) {\n      return;\n    }\n    const bufferCodecEventsExpected = Math.max(this.bufferCodecEventsExpected - 1, 0);\n    if (this.bufferCodecEventsExpected !== bufferCodecEventsExpected) {\n      this.log(`${bufferCodecEventsExpected} bufferCodec event(s) expected ${trackNames.join(',')}`);\n      this.bufferCodecEventsExpected = bufferCodecEventsExpected;\n    }\n    if (this.mediaSource && this.mediaSource.readyState === 'open') {\n      this.checkPendingTracks();\n    }\n  }\n  appendChangeType(type, mimeType) {\n    const {\n      operationQueue\n    } = this;\n    const operation = {\n      execute: () => {\n        const sb = this.sourceBuffer[type];\n        if (sb) {\n          this.log(`changing ${type} sourceBuffer type to ${mimeType}`);\n          sb.changeType(mimeType);\n        }\n        operationQueue.shiftAndExecuteNext(type);\n      },\n      onStart: () => {},\n      onComplete: () => {},\n      onError: error => {\n        this.warn(`Failed to change ${type} SourceBuffer type`, error);\n      }\n    };\n    operationQueue.append(operation, type, !!this.pendingTracks[type]);\n  }\n  onBufferAppending(event, eventData) {\n    const {\n      hls,\n      operationQueue,\n      tracks\n    } = this;\n    const {\n      data,\n      type,\n      frag,\n      part,\n      chunkMeta\n    } = eventData;\n    const chunkStats = chunkMeta.buffering[type];\n    const bufferAppendingStart = self.performance.now();\n    chunkStats.start = bufferAppendingStart;\n    const fragBuffering = frag.stats.buffering;\n    const partBuffering = part ? part.stats.buffering : null;\n    if (fragBuffering.start === 0) {\n      fragBuffering.start = bufferAppendingStart;\n    }\n    if (partBuffering && partBuffering.start === 0) {\n      partBuffering.start = bufferAppendingStart;\n    }\n\n    // TODO: Only update timestampOffset when audio/mpeg fragment or part is not contiguous with previously appended\n    // Adjusting `SourceBuffer.timestampOffset` (desired point in the timeline where the next frames should be appended)\n    // in Chrome browser when we detect MPEG audio container and time delta between level PTS and `SourceBuffer.timestampOffset`\n    // is greater than 100ms (this is enough to handle seek for VOD or level change for LIVE videos).\n    // More info here: https://github.com/video-dev/hls.js/issues/332#issuecomment-257986486\n    const audioTrack = tracks.audio;\n    let checkTimestampOffset = false;\n    if (type === 'audio' && (audioTrack == null ? void 0 : audioTrack.container) === 'audio/mpeg') {\n      checkTimestampOffset = !this.lastMpegAudioChunk || chunkMeta.id === 1 || this.lastMpegAudioChunk.sn !== chunkMeta.sn;\n      this.lastMpegAudioChunk = chunkMeta;\n    }\n    const fragStart = frag.start;\n    const operation = {\n      execute: () => {\n        chunkStats.executeStart = self.performance.now();\n        if (checkTimestampOffset) {\n          const sb = this.sourceBuffer[type];\n          if (sb) {\n            const delta = fragStart - sb.timestampOffset;\n            if (Math.abs(delta) >= 0.1) {\n              this.log(`Updating audio SourceBuffer timestampOffset to ${fragStart} (delta: ${delta}) sn: ${frag.sn})`);\n              sb.timestampOffset = fragStart;\n            }\n          }\n        }\n        this.appendExecutor(data, type);\n      },\n      onStart: () => {\n        // logger.debug(`[buffer-controller]: ${type} SourceBuffer updatestart`);\n      },\n      onComplete: () => {\n        // logger.debug(`[buffer-controller]: ${type} SourceBuffer updateend`);\n        const end = self.performance.now();\n        chunkStats.executeEnd = chunkStats.end = end;\n        if (fragBuffering.first === 0) {\n          fragBuffering.first = end;\n        }\n        if (partBuffering && partBuffering.first === 0) {\n          partBuffering.first = end;\n        }\n        const {\n          sourceBuffer\n        } = this;\n        const timeRanges = {};\n        for (const type in sourceBuffer) {\n          timeRanges[type] = BufferHelper.getBuffered(sourceBuffer[type]);\n        }\n        this.appendErrors[type] = 0;\n        if (type === 'audio' || type === 'video') {\n          this.appendErrors.audiovideo = 0;\n        } else {\n          this.appendErrors.audio = 0;\n          this.appendErrors.video = 0;\n        }\n        this.hls.trigger(Events.BUFFER_APPENDED, {\n          type,\n          frag,\n          part,\n          chunkMeta,\n          parent: frag.type,\n          timeRanges\n        });\n      },\n      onError: error => {\n        // in case any error occured while appending, put back segment in segments table\n        const event = {\n          type: ErrorTypes.MEDIA_ERROR,\n          parent: frag.type,\n          details: ErrorDetails.BUFFER_APPEND_ERROR,\n          sourceBufferName: type,\n          frag,\n          part,\n          chunkMeta,\n          error,\n          err: error,\n          fatal: false\n        };\n        if (error.code === DOMException.QUOTA_EXCEEDED_ERR) {\n          // QuotaExceededError: http://www.w3.org/TR/html5/infrastructure.html#quotaexceedederror\n          // let's stop appending any segments, and report BUFFER_FULL_ERROR error\n          event.details = ErrorDetails.BUFFER_FULL_ERROR;\n        } else {\n          const appendErrorCount = ++this.appendErrors[type];\n          event.details = ErrorDetails.BUFFER_APPEND_ERROR;\n          /* with UHD content, we could get loop of quota exceeded error until\n            browser is able to evict some data from sourcebuffer. Retrying can help recover.\n          */\n          this.warn(`Failed ${appendErrorCount}/${hls.config.appendErrorMaxRetry} times to append segment in \"${type}\" sourceBuffer`);\n          if (appendErrorCount >= hls.config.appendErrorMaxRetry) {\n            event.fatal = true;\n          }\n        }\n        hls.trigger(Events.ERROR, event);\n      }\n    };\n    operationQueue.append(operation, type, !!this.pendingTracks[type]);\n  }\n  onBufferFlushing(event, data) {\n    const {\n      operationQueue\n    } = this;\n    const flushOperation = type => ({\n      execute: this.removeExecutor.bind(this, type, data.startOffset, data.endOffset),\n      onStart: () => {\n        // logger.debug(`[buffer-controller]: Started flushing ${data.startOffset} -> ${data.endOffset} for ${type} Source Buffer`);\n      },\n      onComplete: () => {\n        // logger.debug(`[buffer-controller]: Finished flushing ${data.startOffset} -> ${data.endOffset} for ${type} Source Buffer`);\n        this.hls.trigger(Events.BUFFER_FLUSHED, {\n          type\n        });\n      },\n      onError: error => {\n        this.warn(`Failed to remove from ${type} SourceBuffer`, error);\n      }\n    });\n    if (data.type) {\n      operationQueue.append(flushOperation(data.type), data.type);\n    } else {\n      this.getSourceBufferTypes().forEach(type => {\n        operationQueue.append(flushOperation(type), type);\n      });\n    }\n  }\n  onFragParsed(event, data) {\n    const {\n      frag,\n      part\n    } = data;\n    const buffersAppendedTo = [];\n    const elementaryStreams = part ? part.elementaryStreams : frag.elementaryStreams;\n    if (elementaryStreams[ElementaryStreamTypes.AUDIOVIDEO]) {\n      buffersAppendedTo.push('audiovideo');\n    } else {\n      if (elementaryStreams[ElementaryStreamTypes.AUDIO]) {\n        buffersAppendedTo.push('audio');\n      }\n      if (elementaryStreams[ElementaryStreamTypes.VIDEO]) {\n        buffersAppendedTo.push('video');\n      }\n    }\n    const onUnblocked = () => {\n      const now = self.performance.now();\n      frag.stats.buffering.end = now;\n      if (part) {\n        part.stats.buffering.end = now;\n      }\n      const stats = part ? part.stats : frag.stats;\n      this.hls.trigger(Events.FRAG_BUFFERED, {\n        frag,\n        part,\n        stats,\n        id: frag.type\n      });\n    };\n    if (buffersAppendedTo.length === 0) {\n      this.warn(`Fragments must have at least one ElementaryStreamType set. type: ${frag.type} level: ${frag.level} sn: ${frag.sn}`);\n    }\n    this.blockBuffers(onUnblocked, buffersAppendedTo);\n  }\n  onFragChanged(event, data) {\n    this.trimBuffers();\n  }\n\n  // on BUFFER_EOS mark matching sourcebuffer(s) as ended and trigger checkEos()\n  // an undefined data.type will mark all buffers as EOS.\n  onBufferEos(event, data) {\n    const ended = this.getSourceBufferTypes().reduce((acc, type) => {\n      const sb = this.sourceBuffer[type];\n      if (sb && (!data.type || data.type === type)) {\n        sb.ending = true;\n        if (!sb.ended) {\n          sb.ended = true;\n          this.log(`${type} sourceBuffer now EOS`);\n        }\n      }\n      return acc && !!(!sb || sb.ended);\n    }, true);\n    if (ended) {\n      this.log(`Queueing mediaSource.endOfStream()`);\n      this.blockBuffers(() => {\n        this.getSourceBufferTypes().forEach(type => {\n          const sb = this.sourceBuffer[type];\n          if (sb) {\n            sb.ending = false;\n          }\n        });\n        const {\n          mediaSource\n        } = this;\n        if (!mediaSource || mediaSource.readyState !== 'open') {\n          if (mediaSource) {\n            this.log(`Could not call mediaSource.endOfStream(). mediaSource.readyState: ${mediaSource.readyState}`);\n          }\n          return;\n        }\n        this.log(`Calling mediaSource.endOfStream()`);\n        // Allow this to throw and be caught by the enqueueing function\n        mediaSource.endOfStream();\n      });\n    }\n  }\n  onLevelUpdated(event, {\n    details\n  }) {\n    if (!details.fragments.length) {\n      return;\n    }\n    this.details = details;\n    if (this.getSourceBufferTypes().length) {\n      this.blockBuffers(this.updateMediaElementDuration.bind(this));\n    } else {\n      this.updateMediaElementDuration();\n    }\n  }\n  trimBuffers() {\n    const {\n      hls,\n      details,\n      media\n    } = this;\n    if (!media || details === null) {\n      return;\n    }\n    const sourceBufferTypes = this.getSourceBufferTypes();\n    if (!sourceBufferTypes.length) {\n      return;\n    }\n    const config = hls.config;\n    const currentTime = media.currentTime;\n    const targetDuration = details.levelTargetDuration;\n\n    // Support for deprecated liveBackBufferLength\n    const backBufferLength = details.live && config.liveBackBufferLength !== null ? config.liveBackBufferLength : config.backBufferLength;\n    if (isFiniteNumber(backBufferLength) && backBufferLength > 0) {\n      const maxBackBufferLength = Math.max(backBufferLength, targetDuration);\n      const targetBackBufferPosition = Math.floor(currentTime / targetDuration) * targetDuration - maxBackBufferLength;\n      this.flushBackBuffer(currentTime, targetDuration, targetBackBufferPosition);\n    }\n    if (isFiniteNumber(config.frontBufferFlushThreshold) && config.frontBufferFlushThreshold > 0) {\n      const frontBufferLength = Math.max(config.maxBufferLength, config.frontBufferFlushThreshold);\n      const maxFrontBufferLength = Math.max(frontBufferLength, targetDuration);\n      const targetFrontBufferPosition = Math.floor(currentTime / targetDuration) * targetDuration + maxFrontBufferLength;\n      this.flushFrontBuffer(currentTime, targetDuration, targetFrontBufferPosition);\n    }\n  }\n  flushBackBuffer(currentTime, targetDuration, targetBackBufferPosition) {\n    const {\n      details,\n      sourceBuffer\n    } = this;\n    const sourceBufferTypes = this.getSourceBufferTypes();\n    sourceBufferTypes.forEach(type => {\n      const sb = sourceBuffer[type];\n      if (sb) {\n        const buffered = BufferHelper.getBuffered(sb);\n        // when target buffer start exceeds actual buffer start\n        if (buffered.length > 0 && targetBackBufferPosition > buffered.start(0)) {\n          this.hls.trigger(Events.BACK_BUFFER_REACHED, {\n            bufferEnd: targetBackBufferPosition\n          });\n\n          // Support for deprecated event:\n          if (details != null && details.live) {\n            this.hls.trigger(Events.LIVE_BACK_BUFFER_REACHED, {\n              bufferEnd: targetBackBufferPosition\n            });\n          } else if (sb.ended && buffered.end(buffered.length - 1) - currentTime < targetDuration * 2) {\n            this.log(`Cannot flush ${type} back buffer while SourceBuffer is in ended state`);\n            return;\n          }\n          this.hls.trigger(Events.BUFFER_FLUSHING, {\n            startOffset: 0,\n            endOffset: targetBackBufferPosition,\n            type\n          });\n        }\n      }\n    });\n  }\n  flushFrontBuffer(currentTime, targetDuration, targetFrontBufferPosition) {\n    const {\n      sourceBuffer\n    } = this;\n    const sourceBufferTypes = this.getSourceBufferTypes();\n    sourceBufferTypes.forEach(type => {\n      const sb = sourceBuffer[type];\n      if (sb) {\n        const buffered = BufferHelper.getBuffered(sb);\n        const numBufferedRanges = buffered.length;\n        // The buffer is either empty or contiguous\n        if (numBufferedRanges < 2) {\n          return;\n        }\n        const bufferStart = buffered.start(numBufferedRanges - 1);\n        const bufferEnd = buffered.end(numBufferedRanges - 1);\n        // No flush if we can tolerate the current buffer length or the current buffer range we would flush is contiguous with current position\n        if (targetFrontBufferPosition > bufferStart || currentTime >= bufferStart && currentTime <= bufferEnd) {\n          return;\n        } else if (sb.ended && currentTime - bufferEnd < 2 * targetDuration) {\n          this.log(`Cannot flush ${type} front buffer while SourceBuffer is in ended state`);\n          return;\n        }\n        this.hls.trigger(Events.BUFFER_FLUSHING, {\n          startOffset: bufferStart,\n          endOffset: Infinity,\n          type\n        });\n      }\n    });\n  }\n\n  /**\n   * Update Media Source duration to current level duration or override to Infinity if configuration parameter\n   * 'liveDurationInfinity` is set to `true`\n   * More details: https://github.com/video-dev/hls.js/issues/355\n   */\n  updateMediaElementDuration() {\n    if (!this.details || !this.media || !this.mediaSource || this.mediaSource.readyState !== 'open') {\n      return;\n    }\n    const {\n      details,\n      hls,\n      media,\n      mediaSource\n    } = this;\n    const levelDuration = details.fragments[0].start + details.totalduration;\n    const mediaDuration = media.duration;\n    const msDuration = isFiniteNumber(mediaSource.duration) ? mediaSource.duration : 0;\n    if (details.live && hls.config.liveDurationInfinity) {\n      // Override duration to Infinity\n      mediaSource.duration = Infinity;\n      this.updateSeekableRange(details);\n    } else if (levelDuration > msDuration && levelDuration > mediaDuration || !isFiniteNumber(mediaDuration)) {\n      // levelDuration was the last value we set.\n      // not using mediaSource.duration as the browser may tweak this value\n      // only update Media Source duration if its value increase, this is to avoid\n      // flushing already buffered portion when switching between quality level\n      this.log(`Updating Media Source duration to ${levelDuration.toFixed(3)}`);\n      mediaSource.duration = levelDuration;\n    }\n  }\n  updateSeekableRange(levelDetails) {\n    const mediaSource = this.mediaSource;\n    const fragments = levelDetails.fragments;\n    const len = fragments.length;\n    if (len && levelDetails.live && mediaSource != null && mediaSource.setLiveSeekableRange) {\n      const start = Math.max(0, fragments[0].start);\n      const end = Math.max(start, start + levelDetails.totalduration);\n      this.log(`Media Source duration is set to ${mediaSource.duration}. Setting seekable range to ${start}-${end}.`);\n      mediaSource.setLiveSeekableRange(start, end);\n    }\n  }\n  checkPendingTracks() {\n    const {\n      bufferCodecEventsExpected,\n      operationQueue,\n      pendingTracks\n    } = this;\n\n    // Check if we've received all of the expected bufferCodec events. When none remain, create all the sourceBuffers at once.\n    // This is important because the MSE spec allows implementations to throw QuotaExceededErrors if creating new sourceBuffers after\n    // data has been appended to existing ones.\n    // 2 tracks is the max (one for audio, one for video). If we've reach this max go ahead and create the buffers.\n    const pendingTracksCount = Object.keys(pendingTracks).length;\n    if (pendingTracksCount && (!bufferCodecEventsExpected || pendingTracksCount === 2 || 'audiovideo' in pendingTracks)) {\n      // ok, let's create them now !\n      this.createSourceBuffers(pendingTracks);\n      this.pendingTracks = {};\n      // append any pending segments now !\n      const buffers = this.getSourceBufferTypes();\n      if (buffers.length) {\n        this.hls.trigger(Events.BUFFER_CREATED, {\n          tracks: this.tracks\n        });\n        buffers.forEach(type => {\n          operationQueue.executeNext(type);\n        });\n      } else {\n        const error = new Error('could not create source buffer for media codec(s)');\n        this.hls.trigger(Events.ERROR, {\n          type: ErrorTypes.MEDIA_ERROR,\n          details: ErrorDetails.BUFFER_INCOMPATIBLE_CODECS_ERROR,\n          fatal: true,\n          error,\n          reason: error.message\n        });\n      }\n    }\n  }\n  createSourceBuffers(tracks) {\n    const {\n      sourceBuffer,\n      mediaSource\n    } = this;\n    if (!mediaSource) {\n      throw Error('createSourceBuffers called when mediaSource was null');\n    }\n    for (const trackName in tracks) {\n      if (!sourceBuffer[trackName]) {\n        var _track$levelCodec;\n        const track = tracks[trackName];\n        if (!track) {\n          throw Error(`source buffer exists for track ${trackName}, however track does not`);\n        }\n        // use levelCodec as first priority unless it contains multiple comma-separated codec values\n        let codec = ((_track$levelCodec = track.levelCodec) == null ? void 0 : _track$levelCodec.indexOf(',')) === -1 ? track.levelCodec : track.codec;\n        if (codec) {\n          if (trackName.slice(0, 5) === 'audio') {\n            codec = getCodecCompatibleName(codec, this.appendSource);\n          }\n        }\n        const mimeType = `${track.container};codecs=${codec}`;\n        this.log(`creating sourceBuffer(${mimeType})`);\n        try {\n          const sb = sourceBuffer[trackName] = mediaSource.addSourceBuffer(mimeType);\n          const sbName = trackName;\n          this.addBufferListener(sbName, 'updatestart', this._onSBUpdateStart);\n          this.addBufferListener(sbName, 'updateend', this._onSBUpdateEnd);\n          this.addBufferListener(sbName, 'error', this._onSBUpdateError);\n          // ManagedSourceBuffer bufferedchange event\n          if (this.appendSource) {\n            this.addBufferListener(sbName, 'bufferedchange', (type, event) => {\n              // If media was ejected check for a change. Added ranges are redundant with changes on 'updateend' event.\n              const removedRanges = event.removedRanges;\n              if (removedRanges != null && removedRanges.length) {\n                this.hls.trigger(Events.BUFFER_FLUSHED, {\n                  type: trackName\n                });\n              }\n            });\n          }\n          this.tracks[trackName] = {\n            buffer: sb,\n            codec: codec,\n            container: track.container,\n            levelCodec: track.levelCodec,\n            metadata: track.metadata,\n            id: track.id\n          };\n        } catch (err) {\n          this.error(`error while trying to add sourceBuffer: ${err.message}`);\n          this.hls.trigger(Events.ERROR, {\n            type: ErrorTypes.MEDIA_ERROR,\n            details: ErrorDetails.BUFFER_ADD_CODEC_ERROR,\n            fatal: false,\n            error: err,\n            sourceBufferName: trackName,\n            mimeType: mimeType\n          });\n        }\n      }\n    }\n  }\n  get mediaSrc() {\n    var _this$media, _this$media$querySele;\n    const media = ((_this$media = this.media) == null ? void 0 : (_this$media$querySele = _this$media.querySelector) == null ? void 0 : _this$media$querySele.call(_this$media, 'source')) || this.media;\n    return media == null ? void 0 : media.src;\n  }\n  _onSBUpdateStart(type) {\n    const {\n      operationQueue\n    } = this;\n    const operation = operationQueue.current(type);\n    operation.onStart();\n  }\n  _onSBUpdateEnd(type) {\n    var _this$mediaSource2;\n    if (((_this$mediaSource2 = this.mediaSource) == null ? void 0 : _this$mediaSource2.readyState) === 'closed') {\n      this.resetBuffer(type);\n      return;\n    }\n    const {\n      operationQueue\n    } = this;\n    const operation = operationQueue.current(type);\n    operation.onComplete();\n    operationQueue.shiftAndExecuteNext(type);\n  }\n  _onSBUpdateError(type, event) {\n    var _this$mediaSource3;\n    const error = new Error(`${type} SourceBuffer error. MediaSource readyState: ${(_this$mediaSource3 = this.mediaSource) == null ? void 0 : _this$mediaSource3.readyState}`);\n    this.error(`${error}`, event);\n    // according to http://www.w3.org/TR/media-source/#sourcebuffer-append-error\n    // SourceBuffer errors are not necessarily fatal; if so, the HTMLMediaElement will fire an error event\n    this.hls.trigger(Events.ERROR, {\n      type: ErrorTypes.MEDIA_ERROR,\n      details: ErrorDetails.BUFFER_APPENDING_ERROR,\n      sourceBufferName: type,\n      error,\n      fatal: false\n    });\n    // updateend is always fired after error, so we'll allow that to shift the current operation off of the queue\n    const operation = this.operationQueue.current(type);\n    if (operation) {\n      operation.onError(error);\n    }\n  }\n\n  // This method must result in an updateend event; if remove is not called, _onSBUpdateEnd must be called manually\n  removeExecutor(type, startOffset, endOffset) {\n    const {\n      media,\n      mediaSource,\n      operationQueue,\n      sourceBuffer\n    } = this;\n    const sb = sourceBuffer[type];\n    if (!media || !mediaSource || !sb) {\n      this.warn(`Attempting to remove from the ${type} SourceBuffer, but it does not exist`);\n      operationQueue.shiftAndExecuteNext(type);\n      return;\n    }\n    const mediaDuration = isFiniteNumber(media.duration) ? media.duration : Infinity;\n    const msDuration = isFiniteNumber(mediaSource.duration) ? mediaSource.duration : Infinity;\n    const removeStart = Math.max(0, startOffset);\n    const removeEnd = Math.min(endOffset, mediaDuration, msDuration);\n    if (removeEnd > removeStart && (!sb.ending || sb.ended)) {\n      sb.ended = false;\n      this.log(`Removing [${removeStart},${removeEnd}] from the ${type} SourceBuffer`);\n      sb.remove(removeStart, removeEnd);\n    } else {\n      // Cycle the queue\n      operationQueue.shiftAndExecuteNext(type);\n    }\n  }\n\n  // This method must result in an updateend event; if append is not called, _onSBUpdateEnd must be called manually\n  appendExecutor(data, type) {\n    const sb = this.sourceBuffer[type];\n    if (!sb) {\n      if (!this.pendingTracks[type]) {\n        throw new Error(`Attempting to append to the ${type} SourceBuffer, but it does not exist`);\n      }\n      return;\n    }\n    sb.ended = false;\n    sb.appendBuffer(data);\n  }\n\n  // Enqueues an operation to each SourceBuffer queue which, upon execution, resolves a promise. When all promises\n  // resolve, the onUnblocked function is executed. Functions calling this method do not need to unblock the queue\n  // upon completion, since we already do it here\n  blockBuffers(onUnblocked, buffers = this.getSourceBufferTypes()) {\n    if (!buffers.length) {\n      this.log('Blocking operation requested, but no SourceBuffers exist');\n      Promise.resolve().then(onUnblocked);\n      return;\n    }\n    const {\n      operationQueue\n    } = this;\n\n    // logger.debug(`[buffer-controller]: Blocking ${buffers} SourceBuffer`);\n    const blockingOperations = buffers.map(type => operationQueue.appendBlocker(type));\n    Promise.all(blockingOperations).then(() => {\n      // logger.debug(`[buffer-controller]: Blocking operation resolved; unblocking ${buffers} SourceBuffer`);\n      onUnblocked();\n      buffers.forEach(type => {\n        const sb = this.sourceBuffer[type];\n        // Only cycle the queue if the SB is not updating. There's a bug in Chrome which sets the SB updating flag to\n        // true when changing the MediaSource duration (https://bugs.chromium.org/p/chromium/issues/detail?id=959359&can=2&q=mediasource%20duration)\n        // While this is a workaround, it's probably useful to have around\n        if (!(sb != null && sb.updating)) {\n          operationQueue.shiftAndExecuteNext(type);\n        }\n      });\n    });\n  }\n  getSourceBufferTypes() {\n    return Object.keys(this.sourceBuffer);\n  }\n  addBufferListener(type, event, fn) {\n    const buffer = this.sourceBuffer[type];\n    if (!buffer) {\n      return;\n    }\n    const listener = fn.bind(this, type);\n    this.listeners[type].push({\n      event,\n      listener\n    });\n    buffer.addEventListener(event, listener);\n  }\n  removeBufferListeners(type) {\n    const buffer = this.sourceBuffer[type];\n    if (!buffer) {\n      return;\n    }\n    this.listeners[type].forEach(l => {\n      buffer.removeEventListener(l.event, l.listener);\n    });\n  }\n}\nfunction removeSourceChildren(node) {\n  const sourceChildren = node.querySelectorAll('source');\n  [].slice.call(sourceChildren).forEach(source => {\n    node.removeChild(source);\n  });\n}\nfunction addSource(media, url) {\n  const source = self.document.createElement('source');\n  source.type = 'video/mp4';\n  source.src = url;\n  media.appendChild(source);\n}\n\n/**\n *\n * This code was ported from the dash.js project at:\n *   https://github.com/Dash-Industry-Forum/dash.js/blob/development/externals/cea608-parser.js\n *   https://github.com/Dash-Industry-Forum/dash.js/commit/8269b26a761e0853bb21d78780ed945144ecdd4d#diff-71bc295a2d6b6b7093a1d3290d53a4b2\n *\n * The original copyright appears below:\n *\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2015-2016, DASH Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n *  1. Redistributions of source code must retain the above copyright notice, this\n *  list of conditions and the following disclaimer.\n *  * Redistributions in binary form must reproduce the above copyright notice,\n *  this list of conditions and the following disclaimer in the documentation and/or\n *  other materials provided with the distribution.\n *  2. Neither the name of Dash Industry Forum nor the names of its\n *  contributors may be used to endorse or promote products derived from this software\n *  without specific prior written permission.\n *\n *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n *  EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n *  WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n *  IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n *  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n *  NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n *  PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n *  WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n *  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n *  POSSIBILITY OF SUCH DAMAGE.\n */\n/**\n *  Exceptions from regular ASCII. CodePoints are mapped to UTF-16 codes\n */\n\nconst specialCea608CharsCodes = {\n  0x2a: 0xe1,\n  // lowercase a, acute accent\n  0x5c: 0xe9,\n  // lowercase e, acute accent\n  0x5e: 0xed,\n  // lowercase i, acute accent\n  0x5f: 0xf3,\n  // lowercase o, acute accent\n  0x60: 0xfa,\n  // lowercase u, acute accent\n  0x7b: 0xe7,\n  // lowercase c with cedilla\n  0x7c: 0xf7,\n  // division symbol\n  0x7d: 0xd1,\n  // uppercase N tilde\n  0x7e: 0xf1,\n  // lowercase n tilde\n  0x7f: 0x2588,\n  // Full block\n  // THIS BLOCK INCLUDES THE 16 EXTENDED (TWO-BYTE) LINE 21 CHARACTERS\n  // THAT COME FROM HI BYTE=0x11 AND LOW BETWEEN 0x30 AND 0x3F\n  // THIS MEANS THAT \\x50 MUST BE ADDED TO THE VALUES\n  0x80: 0xae,\n  // Registered symbol (R)\n  0x81: 0xb0,\n  // degree sign\n  0x82: 0xbd,\n  // 1/2 symbol\n  0x83: 0xbf,\n  // Inverted (open) question mark\n  0x84: 0x2122,\n  // Trademark symbol (TM)\n  0x85: 0xa2,\n  // Cents symbol\n  0x86: 0xa3,\n  // Pounds sterling\n  0x87: 0x266a,\n  // Music 8'th note\n  0x88: 0xe0,\n  // lowercase a, grave accent\n  0x89: 0x20,\n  // transparent space (regular)\n  0x8a: 0xe8,\n  // lowercase e, grave accent\n  0x8b: 0xe2,\n  // lowercase a, circumflex accent\n  0x8c: 0xea,\n  // lowercase e, circumflex accent\n  0x8d: 0xee,\n  // lowercase i, circumflex accent\n  0x8e: 0xf4,\n  // lowercase o, circumflex accent\n  0x8f: 0xfb,\n  // lowercase u, circumflex accent\n  // THIS BLOCK INCLUDES THE 32 EXTENDED (TWO-BYTE) LINE 21 CHARACTERS\n  // THAT COME FROM HI BYTE=0x12 AND LOW BETWEEN 0x20 AND 0x3F\n  0x90: 0xc1,\n  // capital letter A with acute\n  0x91: 0xc9,\n  // capital letter E with acute\n  0x92: 0xd3,\n  // capital letter O with acute\n  0x93: 0xda,\n  // capital letter U with acute\n  0x94: 0xdc,\n  // capital letter U with diaresis\n  0x95: 0xfc,\n  // lowercase letter U with diaeresis\n  0x96: 0x2018,\n  // opening single quote\n  0x97: 0xa1,\n  // inverted exclamation mark\n  0x98: 0x2a,\n  // asterisk\n  0x99: 0x2019,\n  // closing single quote\n  0x9a: 0x2501,\n  // box drawings heavy horizontal\n  0x9b: 0xa9,\n  // copyright sign\n  0x9c: 0x2120,\n  // Service mark\n  0x9d: 0x2022,\n  // (round) bullet\n  0x9e: 0x201c,\n  // Left double quotation mark\n  0x9f: 0x201d,\n  // Right double quotation mark\n  0xa0: 0xc0,\n  // uppercase A, grave accent\n  0xa1: 0xc2,\n  // uppercase A, circumflex\n  0xa2: 0xc7,\n  // uppercase C with cedilla\n  0xa3: 0xc8,\n  // uppercase E, grave accent\n  0xa4: 0xca,\n  // uppercase E, circumflex\n  0xa5: 0xcb,\n  // capital letter E with diaresis\n  0xa6: 0xeb,\n  // lowercase letter e with diaresis\n  0xa7: 0xce,\n  // uppercase I, circumflex\n  0xa8: 0xcf,\n  // uppercase I, with diaresis\n  0xa9: 0xef,\n  // lowercase i, with diaresis\n  0xaa: 0xd4,\n  // uppercase O, circumflex\n  0xab: 0xd9,\n  // uppercase U, grave accent\n  0xac: 0xf9,\n  // lowercase u, grave accent\n  0xad: 0xdb,\n  // uppercase U, circumflex\n  0xae: 0xab,\n  // left-pointing double angle quotation mark\n  0xaf: 0xbb,\n  // right-pointing double angle quotation mark\n  // THIS BLOCK INCLUDES THE 32 EXTENDED (TWO-BYTE) LINE 21 CHARACTERS\n  // THAT COME FROM HI BYTE=0x13 AND LOW BETWEEN 0x20 AND 0x3F\n  0xb0: 0xc3,\n  // Uppercase A, tilde\n  0xb1: 0xe3,\n  // Lowercase a, tilde\n  0xb2: 0xcd,\n  // Uppercase I, acute accent\n  0xb3: 0xcc,\n  // Uppercase I, grave accent\n  0xb4: 0xec,\n  // Lowercase i, grave accent\n  0xb5: 0xd2,\n  // Uppercase O, grave accent\n  0xb6: 0xf2,\n  // Lowercase o, grave accent\n  0xb7: 0xd5,\n  // Uppercase O, tilde\n  0xb8: 0xf5,\n  // Lowercase o, tilde\n  0xb9: 0x7b,\n  // Open curly brace\n  0xba: 0x7d,\n  // Closing curly brace\n  0xbb: 0x5c,\n  // Backslash\n  0xbc: 0x5e,\n  // Caret\n  0xbd: 0x5f,\n  // Underscore\n  0xbe: 0x7c,\n  // Pipe (vertical line)\n  0xbf: 0x223c,\n  // Tilde operator\n  0xc0: 0xc4,\n  // Uppercase A, umlaut\n  0xc1: 0xe4,\n  // Lowercase A, umlaut\n  0xc2: 0xd6,\n  // Uppercase O, umlaut\n  0xc3: 0xf6,\n  // Lowercase o, umlaut\n  0xc4: 0xdf,\n  // Esszett (sharp S)\n  0xc5: 0xa5,\n  // Yen symbol\n  0xc6: 0xa4,\n  // Generic currency sign\n  0xc7: 0x2503,\n  // Box drawings heavy vertical\n  0xc8: 0xc5,\n  // Uppercase A, ring\n  0xc9: 0xe5,\n  // Lowercase A, ring\n  0xca: 0xd8,\n  // Uppercase O, stroke\n  0xcb: 0xf8,\n  // Lowercase o, strok\n  0xcc: 0x250f,\n  // Box drawings heavy down and right\n  0xcd: 0x2513,\n  // Box drawings heavy down and left\n  0xce: 0x2517,\n  // Box drawings heavy up and right\n  0xcf: 0x251b // Box drawings heavy up and left\n};\n\n/**\n * Utils\n */\nconst getCharForByte = byte => String.fromCharCode(specialCea608CharsCodes[byte] || byte);\nconst NR_ROWS = 15;\nconst NR_COLS = 100;\n// Tables to look up row from PAC data\nconst rowsLowCh1 = {\n  0x11: 1,\n  0x12: 3,\n  0x15: 5,\n  0x16: 7,\n  0x17: 9,\n  0x10: 11,\n  0x13: 12,\n  0x14: 14\n};\nconst rowsHighCh1 = {\n  0x11: 2,\n  0x12: 4,\n  0x15: 6,\n  0x16: 8,\n  0x17: 10,\n  0x13: 13,\n  0x14: 15\n};\nconst rowsLowCh2 = {\n  0x19: 1,\n  0x1a: 3,\n  0x1d: 5,\n  0x1e: 7,\n  0x1f: 9,\n  0x18: 11,\n  0x1b: 12,\n  0x1c: 14\n};\nconst rowsHighCh2 = {\n  0x19: 2,\n  0x1a: 4,\n  0x1d: 6,\n  0x1e: 8,\n  0x1f: 10,\n  0x1b: 13,\n  0x1c: 15\n};\nconst backgroundColors = ['white', 'green', 'blue', 'cyan', 'red', 'yellow', 'magenta', 'black', 'transparent'];\nclass CaptionsLogger {\n  constructor() {\n    this.time = null;\n    this.verboseLevel = 0;\n  }\n  log(severity, msg) {\n    if (this.verboseLevel >= severity) {\n      const m = typeof msg === 'function' ? msg() : msg;\n      logger.log(`${this.time} [${severity}] ${m}`);\n    }\n  }\n}\nconst numArrayToHexArray = function numArrayToHexArray(numArray) {\n  const hexArray = [];\n  for (let j = 0; j < numArray.length; j++) {\n    hexArray.push(numArray[j].toString(16));\n  }\n  return hexArray;\n};\nclass PenState {\n  constructor() {\n    this.foreground = 'white';\n    this.underline = false;\n    this.italics = false;\n    this.background = 'black';\n    this.flash = false;\n  }\n  reset() {\n    this.foreground = 'white';\n    this.underline = false;\n    this.italics = false;\n    this.background = 'black';\n    this.flash = false;\n  }\n  setStyles(styles) {\n    const attribs = ['foreground', 'underline', 'italics', 'background', 'flash'];\n    for (let i = 0; i < attribs.length; i++) {\n      const style = attribs[i];\n      if (styles.hasOwnProperty(style)) {\n        this[style] = styles[style];\n      }\n    }\n  }\n  isDefault() {\n    return this.foreground === 'white' && !this.underline && !this.italics && this.background === 'black' && !this.flash;\n  }\n  equals(other) {\n    return this.foreground === other.foreground && this.underline === other.underline && this.italics === other.italics && this.background === other.background && this.flash === other.flash;\n  }\n  copy(newPenState) {\n    this.foreground = newPenState.foreground;\n    this.underline = newPenState.underline;\n    this.italics = newPenState.italics;\n    this.background = newPenState.background;\n    this.flash = newPenState.flash;\n  }\n  toString() {\n    return 'color=' + this.foreground + ', underline=' + this.underline + ', italics=' + this.italics + ', background=' + this.background + ', flash=' + this.flash;\n  }\n}\n\n/**\n * Unicode character with styling and background.\n * @constructor\n */\nclass StyledUnicodeChar {\n  constructor() {\n    this.uchar = ' ';\n    this.penState = new PenState();\n  }\n  reset() {\n    this.uchar = ' ';\n    this.penState.reset();\n  }\n  setChar(uchar, newPenState) {\n    this.uchar = uchar;\n    this.penState.copy(newPenState);\n  }\n  setPenState(newPenState) {\n    this.penState.copy(newPenState);\n  }\n  equals(other) {\n    return this.uchar === other.uchar && this.penState.equals(other.penState);\n  }\n  copy(newChar) {\n    this.uchar = newChar.uchar;\n    this.penState.copy(newChar.penState);\n  }\n  isEmpty() {\n    return this.uchar === ' ' && this.penState.isDefault();\n  }\n}\n\n/**\n * CEA-608 row consisting of NR_COLS instances of StyledUnicodeChar.\n * @constructor\n */\nclass Row {\n  constructor(logger) {\n    this.chars = [];\n    this.pos = 0;\n    this.currPenState = new PenState();\n    this.cueStartTime = null;\n    this.logger = void 0;\n    for (let i = 0; i < NR_COLS; i++) {\n      this.chars.push(new StyledUnicodeChar());\n    }\n    this.logger = logger;\n  }\n  equals(other) {\n    for (let i = 0; i < NR_COLS; i++) {\n      if (!this.chars[i].equals(other.chars[i])) {\n        return false;\n      }\n    }\n    return true;\n  }\n  copy(other) {\n    for (let i = 0; i < NR_COLS; i++) {\n      this.chars[i].copy(other.chars[i]);\n    }\n  }\n  isEmpty() {\n    let empty = true;\n    for (let i = 0; i < NR_COLS; i++) {\n      if (!this.chars[i].isEmpty()) {\n        empty = false;\n        break;\n      }\n    }\n    return empty;\n  }\n\n  /**\n   *  Set the cursor to a valid column.\n   */\n  setCursor(absPos) {\n    if (this.pos !== absPos) {\n      this.pos = absPos;\n    }\n    if (this.pos < 0) {\n      this.logger.log(3, 'Negative cursor position ' + this.pos);\n      this.pos = 0;\n    } else if (this.pos > NR_COLS) {\n      this.logger.log(3, 'Too large cursor position ' + this.pos);\n      this.pos = NR_COLS;\n    }\n  }\n\n  /**\n   * Move the cursor relative to current position.\n   */\n  moveCursor(relPos) {\n    const newPos = this.pos + relPos;\n    if (relPos > 1) {\n      for (let i = this.pos + 1; i < newPos + 1; i++) {\n        this.chars[i].setPenState(this.currPenState);\n      }\n    }\n    this.setCursor(newPos);\n  }\n\n  /**\n   * Backspace, move one step back and clear character.\n   */\n  backSpace() {\n    this.moveCursor(-1);\n    this.chars[this.pos].setChar(' ', this.currPenState);\n  }\n  insertChar(byte) {\n    if (byte >= 0x90) {\n      // Extended char\n      this.backSpace();\n    }\n    const char = getCharForByte(byte);\n    if (this.pos >= NR_COLS) {\n      this.logger.log(0, () => 'Cannot insert ' + byte.toString(16) + ' (' + char + ') at position ' + this.pos + '. Skipping it!');\n      return;\n    }\n    this.chars[this.pos].setChar(char, this.currPenState);\n    this.moveCursor(1);\n  }\n  clearFromPos(startPos) {\n    let i;\n    for (i = startPos; i < NR_COLS; i++) {\n      this.chars[i].reset();\n    }\n  }\n  clear() {\n    this.clearFromPos(0);\n    this.pos = 0;\n    this.currPenState.reset();\n  }\n  clearToEndOfRow() {\n    this.clearFromPos(this.pos);\n  }\n  getTextString() {\n    const chars = [];\n    let empty = true;\n    for (let i = 0; i < NR_COLS; i++) {\n      const char = this.chars[i].uchar;\n      if (char !== ' ') {\n        empty = false;\n      }\n      chars.push(char);\n    }\n    if (empty) {\n      return '';\n    } else {\n      return chars.join('');\n    }\n  }\n  setPenStyles(styles) {\n    this.currPenState.setStyles(styles);\n    const currChar = this.chars[this.pos];\n    currChar.setPenState(this.currPenState);\n  }\n}\n\n/**\n * Keep a CEA-608 screen of 32x15 styled characters\n * @constructor\n */\nclass CaptionScreen {\n  constructor(logger) {\n    this.rows = [];\n    this.currRow = NR_ROWS - 1;\n    this.nrRollUpRows = null;\n    this.lastOutputScreen = null;\n    this.logger = void 0;\n    for (let i = 0; i < NR_ROWS; i++) {\n      this.rows.push(new Row(logger));\n    }\n    this.logger = logger;\n  }\n  reset() {\n    for (let i = 0; i < NR_ROWS; i++) {\n      this.rows[i].clear();\n    }\n    this.currRow = NR_ROWS - 1;\n  }\n  equals(other) {\n    let equal = true;\n    for (let i = 0; i < NR_ROWS; i++) {\n      if (!this.rows[i].equals(other.rows[i])) {\n        equal = false;\n        break;\n      }\n    }\n    return equal;\n  }\n  copy(other) {\n    for (let i = 0; i < NR_ROWS; i++) {\n      this.rows[i].copy(other.rows[i]);\n    }\n  }\n  isEmpty() {\n    let empty = true;\n    for (let i = 0; i < NR_ROWS; i++) {\n      if (!this.rows[i].isEmpty()) {\n        empty = false;\n        break;\n      }\n    }\n    return empty;\n  }\n  backSpace() {\n    const row = this.rows[this.currRow];\n    row.backSpace();\n  }\n  clearToEndOfRow() {\n    const row = this.rows[this.currRow];\n    row.clearToEndOfRow();\n  }\n\n  /**\n   * Insert a character (without styling) in the current row.\n   */\n  insertChar(char) {\n    const row = this.rows[this.currRow];\n    row.insertChar(char);\n  }\n  setPen(styles) {\n    const row = this.rows[this.currRow];\n    row.setPenStyles(styles);\n  }\n  moveCursor(relPos) {\n    const row = this.rows[this.currRow];\n    row.moveCursor(relPos);\n  }\n  setCursor(absPos) {\n    this.logger.log(2, 'setCursor: ' + absPos);\n    const row = this.rows[this.currRow];\n    row.setCursor(absPos);\n  }\n  setPAC(pacData) {\n    this.logger.log(2, () => 'pacData = ' + JSON.stringify(pacData));\n    let newRow = pacData.row - 1;\n    if (this.nrRollUpRows && newRow < this.nrRollUpRows - 1) {\n      newRow = this.nrRollUpRows - 1;\n    }\n\n    // Make sure this only affects Roll-up Captions by checking this.nrRollUpRows\n    if (this.nrRollUpRows && this.currRow !== newRow) {\n      // clear all rows first\n      for (let i = 0; i < NR_ROWS; i++) {\n        this.rows[i].clear();\n      }\n\n      // Copy this.nrRollUpRows rows from lastOutputScreen and place it in the newRow location\n      // topRowIndex - the start of rows to copy (inclusive index)\n      const topRowIndex = this.currRow + 1 - this.nrRollUpRows;\n      // We only copy if the last position was already shown.\n      // We use the cueStartTime value to check this.\n      const lastOutputScreen = this.lastOutputScreen;\n      if (lastOutputScreen) {\n        const prevLineTime = lastOutputScreen.rows[topRowIndex].cueStartTime;\n        const time = this.logger.time;\n        if (prevLineTime !== null && time !== null && prevLineTime < time) {\n          for (let i = 0; i < this.nrRollUpRows; i++) {\n            this.rows[newRow - this.nrRollUpRows + i + 1].copy(lastOutputScreen.rows[topRowIndex + i]);\n          }\n        }\n      }\n    }\n    this.currRow = newRow;\n    const row = this.rows[this.currRow];\n    if (pacData.indent !== null) {\n      const indent = pacData.indent;\n      const prevPos = Math.max(indent - 1, 0);\n      row.setCursor(pacData.indent);\n      pacData.color = row.chars[prevPos].penState.foreground;\n    }\n    const styles = {\n      foreground: pacData.color,\n      underline: pacData.underline,\n      italics: pacData.italics,\n      background: 'black',\n      flash: false\n    };\n    this.setPen(styles);\n  }\n\n  /**\n   * Set background/extra foreground, but first do back_space, and then insert space (backwards compatibility).\n   */\n  setBkgData(bkgData) {\n    this.logger.log(2, () => 'bkgData = ' + JSON.stringify(bkgData));\n    this.backSpace();\n    this.setPen(bkgData);\n    this.insertChar(0x20); // Space\n  }\n  setRollUpRows(nrRows) {\n    this.nrRollUpRows = nrRows;\n  }\n  rollUp() {\n    if (this.nrRollUpRows === null) {\n      this.logger.log(3, 'roll_up but nrRollUpRows not set yet');\n      return; // Not properly setup\n    }\n    this.logger.log(1, () => this.getDisplayText());\n    const topRowIndex = this.currRow + 1 - this.nrRollUpRows;\n    const topRow = this.rows.splice(topRowIndex, 1)[0];\n    topRow.clear();\n    this.rows.splice(this.currRow, 0, topRow);\n    this.logger.log(2, 'Rolling up');\n    // this.logger.log(VerboseLevel.TEXT, this.get_display_text())\n  }\n\n  /**\n   * Get all non-empty rows with as unicode text.\n   */\n  getDisplayText(asOneRow) {\n    asOneRow = asOneRow || false;\n    const displayText = [];\n    let text = '';\n    let rowNr = -1;\n    for (let i = 0; i < NR_ROWS; i++) {\n      const rowText = this.rows[i].getTextString();\n      if (rowText) {\n        rowNr = i + 1;\n        if (asOneRow) {\n          displayText.push('Row ' + rowNr + \": '\" + rowText + \"'\");\n        } else {\n          displayText.push(rowText.trim());\n        }\n      }\n    }\n    if (displayText.length > 0) {\n      if (asOneRow) {\n        text = '[' + displayText.join(' | ') + ']';\n      } else {\n        text = displayText.join('\\n');\n      }\n    }\n    return text;\n  }\n  getTextAndFormat() {\n    return this.rows;\n  }\n}\n\n// var modes = ['MODE_ROLL-UP', 'MODE_POP-ON', 'MODE_PAINT-ON', 'MODE_TEXT'];\n\nclass Cea608Channel {\n  constructor(channelNumber, outputFilter, logger) {\n    this.chNr = void 0;\n    this.outputFilter = void 0;\n    this.mode = void 0;\n    this.verbose = void 0;\n    this.displayedMemory = void 0;\n    this.nonDisplayedMemory = void 0;\n    this.lastOutputScreen = void 0;\n    this.currRollUpRow = void 0;\n    this.writeScreen = void 0;\n    this.cueStartTime = void 0;\n    this.logger = void 0;\n    this.chNr = channelNumber;\n    this.outputFilter = outputFilter;\n    this.mode = null;\n    this.verbose = 0;\n    this.displayedMemory = new CaptionScreen(logger);\n    this.nonDisplayedMemory = new CaptionScreen(logger);\n    this.lastOutputScreen = new CaptionScreen(logger);\n    this.currRollUpRow = this.displayedMemory.rows[NR_ROWS - 1];\n    this.writeScreen = this.displayedMemory;\n    this.mode = null;\n    this.cueStartTime = null; // Keeps track of where a cue started.\n    this.logger = logger;\n  }\n  reset() {\n    this.mode = null;\n    this.displayedMemory.reset();\n    this.nonDisplayedMemory.reset();\n    this.lastOutputScreen.reset();\n    this.outputFilter.reset();\n    this.currRollUpRow = this.displayedMemory.rows[NR_ROWS - 1];\n    this.writeScreen = this.displayedMemory;\n    this.mode = null;\n    this.cueStartTime = null;\n  }\n  getHandler() {\n    return this.outputFilter;\n  }\n  setHandler(newHandler) {\n    this.outputFilter = newHandler;\n  }\n  setPAC(pacData) {\n    this.writeScreen.setPAC(pacData);\n  }\n  setBkgData(bkgData) {\n    this.writeScreen.setBkgData(bkgData);\n  }\n  setMode(newMode) {\n    if (newMode === this.mode) {\n      return;\n    }\n    this.mode = newMode;\n    this.logger.log(2, () => 'MODE=' + newMode);\n    if (this.mode === 'MODE_POP-ON') {\n      this.writeScreen = this.nonDisplayedMemory;\n    } else {\n      this.writeScreen = this.displayedMemory;\n      this.writeScreen.reset();\n    }\n    if (this.mode !== 'MODE_ROLL-UP') {\n      this.displayedMemory.nrRollUpRows = null;\n      this.nonDisplayedMemory.nrRollUpRows = null;\n    }\n    this.mode = newMode;\n  }\n  insertChars(chars) {\n    for (let i = 0; i < chars.length; i++) {\n      this.writeScreen.insertChar(chars[i]);\n    }\n    const screen = this.writeScreen === this.displayedMemory ? 'DISP' : 'NON_DISP';\n    this.logger.log(2, () => screen + ': ' + this.writeScreen.getDisplayText(true));\n    if (this.mode === 'MODE_PAINT-ON' || this.mode === 'MODE_ROLL-UP') {\n      this.logger.log(1, () => 'DISPLAYED: ' + this.displayedMemory.getDisplayText(true));\n      this.outputDataUpdate();\n    }\n  }\n  ccRCL() {\n    // Resume Caption Loading (switch mode to Pop On)\n    this.logger.log(2, 'RCL - Resume Caption Loading');\n    this.setMode('MODE_POP-ON');\n  }\n  ccBS() {\n    // BackSpace\n    this.logger.log(2, 'BS - BackSpace');\n    if (this.mode === 'MODE_TEXT') {\n      return;\n    }\n    this.writeScreen.backSpace();\n    if (this.writeScreen === this.displayedMemory) {\n      this.outputDataUpdate();\n    }\n  }\n  ccAOF() {\n    // Reserved (formerly Alarm Off)\n  }\n  ccAON() {\n    // Reserved (formerly Alarm On)\n  }\n  ccDER() {\n    // Delete to End of Row\n    this.logger.log(2, 'DER- Delete to End of Row');\n    this.writeScreen.clearToEndOfRow();\n    this.outputDataUpdate();\n  }\n  ccRU(nrRows) {\n    // Roll-Up Captions-2,3,or 4 Rows\n    this.logger.log(2, 'RU(' + nrRows + ') - Roll Up');\n    this.writeScreen = this.displayedMemory;\n    this.setMode('MODE_ROLL-UP');\n    this.writeScreen.setRollUpRows(nrRows);\n  }\n  ccFON() {\n    // Flash On\n    this.logger.log(2, 'FON - Flash On');\n    this.writeScreen.setPen({\n      flash: true\n    });\n  }\n  ccRDC() {\n    // Resume Direct Captioning (switch mode to PaintOn)\n    this.logger.log(2, 'RDC - Resume Direct Captioning');\n    this.setMode('MODE_PAINT-ON');\n  }\n  ccTR() {\n    // Text Restart in text mode (not supported, however)\n    this.logger.log(2, 'TR');\n    this.setMode('MODE_TEXT');\n  }\n  ccRTD() {\n    // Resume Text Display in Text mode (not supported, however)\n    this.logger.log(2, 'RTD');\n    this.setMode('MODE_TEXT');\n  }\n  ccEDM() {\n    // Erase Displayed Memory\n    this.logger.log(2, 'EDM - Erase Displayed Memory');\n    this.displayedMemory.reset();\n    this.outputDataUpdate(true);\n  }\n  ccCR() {\n    // Carriage Return\n    this.logger.log(2, 'CR - Carriage Return');\n    this.writeScreen.rollUp();\n    this.outputDataUpdate(true);\n  }\n  ccENM() {\n    // Erase Non-Displayed Memory\n    this.logger.log(2, 'ENM - Erase Non-displayed Memory');\n    this.nonDisplayedMemory.reset();\n  }\n  ccEOC() {\n    // End of Caption (Flip Memories)\n    this.logger.log(2, 'EOC - End Of Caption');\n    if (this.mode === 'MODE_POP-ON') {\n      const tmp = this.displayedMemory;\n      this.displayedMemory = this.nonDisplayedMemory;\n      this.nonDisplayedMemory = tmp;\n      this.writeScreen = this.nonDisplayedMemory;\n      this.logger.log(1, () => 'DISP: ' + this.displayedMemory.getDisplayText());\n    }\n    this.outputDataUpdate(true);\n  }\n  ccTO(nrCols) {\n    // Tab Offset 1,2, or 3 columns\n    this.logger.log(2, 'TO(' + nrCols + ') - Tab Offset');\n    this.writeScreen.moveCursor(nrCols);\n  }\n  ccMIDROW(secondByte) {\n    // Parse MIDROW command\n    const styles = {\n      flash: false\n    };\n    styles.underline = secondByte % 2 === 1;\n    styles.italics = secondByte >= 0x2e;\n    if (!styles.italics) {\n      const colorIndex = Math.floor(secondByte / 2) - 0x10;\n      const colors = ['white', 'green', 'blue', 'cyan', 'red', 'yellow', 'magenta'];\n      styles.foreground = colors[colorIndex];\n    } else {\n      styles.foreground = 'white';\n    }\n    this.logger.log(2, 'MIDROW: ' + JSON.stringify(styles));\n    this.writeScreen.setPen(styles);\n  }\n  outputDataUpdate(dispatch = false) {\n    const time = this.logger.time;\n    if (time === null) {\n      return;\n    }\n    if (this.outputFilter) {\n      if (this.cueStartTime === null && !this.displayedMemory.isEmpty()) {\n        // Start of a new cue\n        this.cueStartTime = time;\n      } else {\n        if (!this.displayedMemory.equals(this.lastOutputScreen)) {\n          this.outputFilter.newCue(this.cueStartTime, time, this.lastOutputScreen);\n          if (dispatch && this.outputFilter.dispatchCue) {\n            this.outputFilter.dispatchCue();\n          }\n          this.cueStartTime = this.displayedMemory.isEmpty() ? null : time;\n        }\n      }\n      this.lastOutputScreen.copy(this.displayedMemory);\n    }\n  }\n  cueSplitAtTime(t) {\n    if (this.outputFilter) {\n      if (!this.displayedMemory.isEmpty()) {\n        if (this.outputFilter.newCue) {\n          this.outputFilter.newCue(this.cueStartTime, t, this.displayedMemory);\n        }\n        this.cueStartTime = t;\n      }\n    }\n  }\n}\n\n// Will be 1 or 2 when parsing captions\n\nclass Cea608Parser {\n  constructor(field, out1, out2) {\n    this.channels = void 0;\n    this.currentChannel = 0;\n    this.cmdHistory = createCmdHistory();\n    this.logger = void 0;\n    const logger = this.logger = new CaptionsLogger();\n    this.channels = [null, new Cea608Channel(field, out1, logger), new Cea608Channel(field + 1, out2, logger)];\n  }\n  getHandler(channel) {\n    return this.channels[channel].getHandler();\n  }\n  setHandler(channel, newHandler) {\n    this.channels[channel].setHandler(newHandler);\n  }\n\n  /**\n   * Add data for time t in forms of list of bytes (unsigned ints). The bytes are treated as pairs.\n   */\n  addData(time, byteList) {\n    this.logger.time = time;\n    for (let i = 0; i < byteList.length; i += 2) {\n      const a = byteList[i] & 0x7f;\n      const b = byteList[i + 1] & 0x7f;\n      let cmdFound = false;\n      let charsFound = null;\n      if (a === 0 && b === 0) {\n        continue;\n      } else {\n        this.logger.log(3, () => '[' + numArrayToHexArray([byteList[i], byteList[i + 1]]) + '] -> (' + numArrayToHexArray([a, b]) + ')');\n      }\n      const cmdHistory = this.cmdHistory;\n      const isControlCode = a >= 0x10 && a <= 0x1f;\n      if (isControlCode) {\n        // Skip redundant control codes\n        if (hasCmdRepeated(a, b, cmdHistory)) {\n          setLastCmd(null, null, cmdHistory);\n          this.logger.log(3, () => 'Repeated command (' + numArrayToHexArray([a, b]) + ') is dropped');\n          continue;\n        }\n        setLastCmd(a, b, this.cmdHistory);\n        cmdFound = this.parseCmd(a, b);\n        if (!cmdFound) {\n          cmdFound = this.parseMidrow(a, b);\n        }\n        if (!cmdFound) {\n          cmdFound = this.parsePAC(a, b);\n        }\n        if (!cmdFound) {\n          cmdFound = this.parseBackgroundAttributes(a, b);\n        }\n      } else {\n        setLastCmd(null, null, cmdHistory);\n      }\n      if (!cmdFound) {\n        charsFound = this.parseChars(a, b);\n        if (charsFound) {\n          const currChNr = this.currentChannel;\n          if (currChNr && currChNr > 0) {\n            const channel = this.channels[currChNr];\n            channel.insertChars(charsFound);\n          } else {\n            this.logger.log(2, 'No channel found yet. TEXT-MODE?');\n          }\n        }\n      }\n      if (!cmdFound && !charsFound) {\n        this.logger.log(2, () => \"Couldn't parse cleaned data \" + numArrayToHexArray([a, b]) + ' orig: ' + numArrayToHexArray([byteList[i], byteList[i + 1]]));\n      }\n    }\n  }\n\n  /**\n   * Parse Command.\n   * @returns True if a command was found\n   */\n  parseCmd(a, b) {\n    const cond1 = (a === 0x14 || a === 0x1c || a === 0x15 || a === 0x1d) && b >= 0x20 && b <= 0x2f;\n    const cond2 = (a === 0x17 || a === 0x1f) && b >= 0x21 && b <= 0x23;\n    if (!(cond1 || cond2)) {\n      return false;\n    }\n    const chNr = a === 0x14 || a === 0x15 || a === 0x17 ? 1 : 2;\n    const channel = this.channels[chNr];\n    if (a === 0x14 || a === 0x15 || a === 0x1c || a === 0x1d) {\n      if (b === 0x20) {\n        channel.ccRCL();\n      } else if (b === 0x21) {\n        channel.ccBS();\n      } else if (b === 0x22) {\n        channel.ccAOF();\n      } else if (b === 0x23) {\n        channel.ccAON();\n      } else if (b === 0x24) {\n        channel.ccDER();\n      } else if (b === 0x25) {\n        channel.ccRU(2);\n      } else if (b === 0x26) {\n        channel.ccRU(3);\n      } else if (b === 0x27) {\n        channel.ccRU(4);\n      } else if (b === 0x28) {\n        channel.ccFON();\n      } else if (b === 0x29) {\n        channel.ccRDC();\n      } else if (b === 0x2a) {\n        channel.ccTR();\n      } else if (b === 0x2b) {\n        channel.ccRTD();\n      } else if (b === 0x2c) {\n        channel.ccEDM();\n      } else if (b === 0x2d) {\n        channel.ccCR();\n      } else if (b === 0x2e) {\n        channel.ccENM();\n      } else if (b === 0x2f) {\n        channel.ccEOC();\n      }\n    } else {\n      // a == 0x17 || a == 0x1F\n      channel.ccTO(b - 0x20);\n    }\n    this.currentChannel = chNr;\n    return true;\n  }\n\n  /**\n   * Parse midrow styling command\n   */\n  parseMidrow(a, b) {\n    let chNr = 0;\n    if ((a === 0x11 || a === 0x19) && b >= 0x20 && b <= 0x2f) {\n      if (a === 0x11) {\n        chNr = 1;\n      } else {\n        chNr = 2;\n      }\n      if (chNr !== this.currentChannel) {\n        this.logger.log(0, 'Mismatch channel in midrow parsing');\n        return false;\n      }\n      const channel = this.channels[chNr];\n      if (!channel) {\n        return false;\n      }\n      channel.ccMIDROW(b);\n      this.logger.log(3, () => 'MIDROW (' + numArrayToHexArray([a, b]) + ')');\n      return true;\n    }\n    return false;\n  }\n\n  /**\n   * Parse Preable Access Codes (Table 53).\n   * @returns {Boolean} Tells if PAC found\n   */\n  parsePAC(a, b) {\n    let row;\n    const case1 = (a >= 0x11 && a <= 0x17 || a >= 0x19 && a <= 0x1f) && b >= 0x40 && b <= 0x7f;\n    const case2 = (a === 0x10 || a === 0x18) && b >= 0x40 && b <= 0x5f;\n    if (!(case1 || case2)) {\n      return false;\n    }\n    const chNr = a <= 0x17 ? 1 : 2;\n    if (b >= 0x40 && b <= 0x5f) {\n      row = chNr === 1 ? rowsLowCh1[a] : rowsLowCh2[a];\n    } else {\n      // 0x60 <= b <= 0x7F\n      row = chNr === 1 ? rowsHighCh1[a] : rowsHighCh2[a];\n    }\n    const channel = this.channels[chNr];\n    if (!channel) {\n      return false;\n    }\n    channel.setPAC(this.interpretPAC(row, b));\n    this.currentChannel = chNr;\n    return true;\n  }\n\n  /**\n   * Interpret the second byte of the pac, and return the information.\n   * @returns pacData with style parameters\n   */\n  interpretPAC(row, byte) {\n    let pacIndex;\n    const pacData = {\n      color: null,\n      italics: false,\n      indent: null,\n      underline: false,\n      row: row\n    };\n    if (byte > 0x5f) {\n      pacIndex = byte - 0x60;\n    } else {\n      pacIndex = byte - 0x40;\n    }\n    pacData.underline = (pacIndex & 1) === 1;\n    if (pacIndex <= 0xd) {\n      pacData.color = ['white', 'green', 'blue', 'cyan', 'red', 'yellow', 'magenta', 'white'][Math.floor(pacIndex / 2)];\n    } else if (pacIndex <= 0xf) {\n      pacData.italics = true;\n      pacData.color = 'white';\n    } else {\n      pacData.indent = Math.floor((pacIndex - 0x10) / 2) * 4;\n    }\n    return pacData; // Note that row has zero offset. The spec uses 1.\n  }\n\n  /**\n   * Parse characters.\n   * @returns An array with 1 to 2 codes corresponding to chars, if found. null otherwise.\n   */\n  parseChars(a, b) {\n    let channelNr;\n    let charCodes = null;\n    let charCode1 = null;\n    if (a >= 0x19) {\n      channelNr = 2;\n      charCode1 = a - 8;\n    } else {\n      channelNr = 1;\n      charCode1 = a;\n    }\n    if (charCode1 >= 0x11 && charCode1 <= 0x13) {\n      // Special character\n      let oneCode;\n      if (charCode1 === 0x11) {\n        oneCode = b + 0x50;\n      } else if (charCode1 === 0x12) {\n        oneCode = b + 0x70;\n      } else {\n        oneCode = b + 0x90;\n      }\n      this.logger.log(2, () => \"Special char '\" + getCharForByte(oneCode) + \"' in channel \" + channelNr);\n      charCodes = [oneCode];\n    } else if (a >= 0x20 && a <= 0x7f) {\n      charCodes = b === 0 ? [a] : [a, b];\n    }\n    if (charCodes) {\n      this.logger.log(3, () => 'Char codes =  ' + numArrayToHexArray(charCodes).join(','));\n    }\n    return charCodes;\n  }\n\n  /**\n   * Parse extended background attributes as well as new foreground color black.\n   * @returns True if background attributes are found\n   */\n  parseBackgroundAttributes(a, b) {\n    const case1 = (a === 0x10 || a === 0x18) && b >= 0x20 && b <= 0x2f;\n    const case2 = (a === 0x17 || a === 0x1f) && b >= 0x2d && b <= 0x2f;\n    if (!(case1 || case2)) {\n      return false;\n    }\n    let index;\n    const bkgData = {};\n    if (a === 0x10 || a === 0x18) {\n      index = Math.floor((b - 0x20) / 2);\n      bkgData.background = backgroundColors[index];\n      if (b % 2 === 1) {\n        bkgData.background = bkgData.background + '_semi';\n      }\n    } else if (b === 0x2d) {\n      bkgData.background = 'transparent';\n    } else {\n      bkgData.foreground = 'black';\n      if (b === 0x2f) {\n        bkgData.underline = true;\n      }\n    }\n    const chNr = a <= 0x17 ? 1 : 2;\n    const channel = this.channels[chNr];\n    channel.setBkgData(bkgData);\n    return true;\n  }\n\n  /**\n   * Reset state of parser and its channels.\n   */\n  reset() {\n    for (let i = 0; i < Object.keys(this.channels).length; i++) {\n      const channel = this.channels[i];\n      if (channel) {\n        channel.reset();\n      }\n    }\n    setLastCmd(null, null, this.cmdHistory);\n  }\n\n  /**\n   * Trigger the generation of a cue, and the start of a new one if displayScreens are not empty.\n   */\n  cueSplitAtTime(t) {\n    for (let i = 0; i < this.channels.length; i++) {\n      const channel = this.channels[i];\n      if (channel) {\n        channel.cueSplitAtTime(t);\n      }\n    }\n  }\n}\nfunction setLastCmd(a, b, cmdHistory) {\n  cmdHistory.a = a;\n  cmdHistory.b = b;\n}\nfunction hasCmdRepeated(a, b, cmdHistory) {\n  return cmdHistory.a === a && cmdHistory.b === b;\n}\nfunction createCmdHistory() {\n  return {\n    a: null,\n    b: null\n  };\n}\n\nclass OutputFilter {\n  constructor(timelineController, trackName) {\n    this.timelineController = void 0;\n    this.cueRanges = [];\n    this.trackName = void 0;\n    this.startTime = null;\n    this.endTime = null;\n    this.screen = null;\n    this.timelineController = timelineController;\n    this.trackName = trackName;\n  }\n  dispatchCue() {\n    if (this.startTime === null) {\n      return;\n    }\n    this.timelineController.addCues(this.trackName, this.startTime, this.endTime, this.screen, this.cueRanges);\n    this.startTime = null;\n  }\n  newCue(startTime, endTime, screen) {\n    if (this.startTime === null || this.startTime > startTime) {\n      this.startTime = startTime;\n    }\n    this.endTime = endTime;\n    this.screen = screen;\n    this.timelineController.createCaptionsTrack(this.trackName);\n  }\n  reset() {\n    this.cueRanges = [];\n    this.startTime = null;\n  }\n}\n\n/**\n * Copyright 2013 vtt.js Contributors\n *\n * Licensed under the Apache License, Version 2.0 (the 'License');\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an 'AS IS' BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nvar VTTCue = (function () {\n  if (optionalSelf != null && optionalSelf.VTTCue) {\n    return self.VTTCue;\n  }\n  const AllowedDirections = ['', 'lr', 'rl'];\n  const AllowedAlignments = ['start', 'middle', 'end', 'left', 'right'];\n  function isAllowedValue(allowed, value) {\n    if (typeof value !== 'string') {\n      return false;\n    }\n    // necessary for assuring the generic conforms to the Array interface\n    if (!Array.isArray(allowed)) {\n      return false;\n    }\n    // reset the type so that the next narrowing works well\n    const lcValue = value.toLowerCase();\n    // use the allow list to narrow the type to a specific subset of strings\n    if (~allowed.indexOf(lcValue)) {\n      return lcValue;\n    }\n    return false;\n  }\n  function findDirectionSetting(value) {\n    return isAllowedValue(AllowedDirections, value);\n  }\n  function findAlignSetting(value) {\n    return isAllowedValue(AllowedAlignments, value);\n  }\n  function extend(obj, ...rest) {\n    let i = 1;\n    for (; i < arguments.length; i++) {\n      const cobj = arguments[i];\n      for (const p in cobj) {\n        obj[p] = cobj[p];\n      }\n    }\n    return obj;\n  }\n  function VTTCue(startTime, endTime, text) {\n    const cue = this;\n    const baseObj = {\n      enumerable: true\n    };\n    /**\n     * Shim implementation specific properties. These properties are not in\n     * the spec.\n     */\n\n    // Lets us know when the VTTCue's data has changed in such a way that we need\n    // to recompute its display state. This lets us compute its display state\n    // lazily.\n    cue.hasBeenReset = false;\n\n    /**\n     * VTTCue and TextTrackCue properties\n     * http://dev.w3.org/html5/webvtt/#vttcue-interface\n     */\n\n    let _id = '';\n    let _pauseOnExit = false;\n    let _startTime = startTime;\n    let _endTime = endTime;\n    let _text = text;\n    let _region = null;\n    let _vertical = '';\n    let _snapToLines = true;\n    let _line = 'auto';\n    let _lineAlign = 'start';\n    let _position = 50;\n    let _positionAlign = 'middle';\n    let _size = 50;\n    let _align = 'middle';\n    Object.defineProperty(cue, 'id', extend({}, baseObj, {\n      get: function () {\n        return _id;\n      },\n      set: function (value) {\n        _id = '' + value;\n      }\n    }));\n    Object.defineProperty(cue, 'pauseOnExit', extend({}, baseObj, {\n      get: function () {\n        return _pauseOnExit;\n      },\n      set: function (value) {\n        _pauseOnExit = !!value;\n      }\n    }));\n    Object.defineProperty(cue, 'startTime', extend({}, baseObj, {\n      get: function () {\n        return _startTime;\n      },\n      set: function (value) {\n        if (typeof value !== 'number') {\n          throw new TypeError('Start time must be set to a number.');\n        }\n        _startTime = value;\n        this.hasBeenReset = true;\n      }\n    }));\n    Object.defineProperty(cue, 'endTime', extend({}, baseObj, {\n      get: function () {\n        return _endTime;\n      },\n      set: function (value) {\n        if (typeof value !== 'number') {\n          throw new TypeError('End time must be set to a number.');\n        }\n        _endTime = value;\n        this.hasBeenReset = true;\n      }\n    }));\n    Object.defineProperty(cue, 'text', extend({}, baseObj, {\n      get: function () {\n        return _text;\n      },\n      set: function (value) {\n        _text = '' + value;\n        this.hasBeenReset = true;\n      }\n    }));\n\n    // todo: implement VTTRegion polyfill?\n    Object.defineProperty(cue, 'region', extend({}, baseObj, {\n      get: function () {\n        return _region;\n      },\n      set: function (value) {\n        _region = value;\n        this.hasBeenReset = true;\n      }\n    }));\n    Object.defineProperty(cue, 'vertical', extend({}, baseObj, {\n      get: function () {\n        return _vertical;\n      },\n      set: function (value) {\n        const setting = findDirectionSetting(value);\n        // Have to check for false because the setting an be an empty string.\n        if (setting === false) {\n          throw new SyntaxError('An invalid or illegal string was specified.');\n        }\n        _vertical = setting;\n        this.hasBeenReset = true;\n      }\n    }));\n    Object.defineProperty(cue, 'snapToLines', extend({}, baseObj, {\n      get: function () {\n        return _snapToLines;\n      },\n      set: function (value) {\n        _snapToLines = !!value;\n        this.hasBeenReset = true;\n      }\n    }));\n    Object.defineProperty(cue, 'line', extend({}, baseObj, {\n      get: function () {\n        return _line;\n      },\n      set: function (value) {\n        if (typeof value !== 'number' && value !== 'auto') {\n          throw new SyntaxError('An invalid number or illegal string was specified.');\n        }\n        _line = value;\n        this.hasBeenReset = true;\n      }\n    }));\n    Object.defineProperty(cue, 'lineAlign', extend({}, baseObj, {\n      get: function () {\n        return _lineAlign;\n      },\n      set: function (value) {\n        const setting = findAlignSetting(value);\n        if (!setting) {\n          throw new SyntaxError('An invalid or illegal string was specified.');\n        }\n        _lineAlign = setting;\n        this.hasBeenReset = true;\n      }\n    }));\n    Object.defineProperty(cue, 'position', extend({}, baseObj, {\n      get: function () {\n        return _position;\n      },\n      set: function (value) {\n        if (value < 0 || value > 100) {\n          throw new Error('Position must be between 0 and 100.');\n        }\n        _position = value;\n        this.hasBeenReset = true;\n      }\n    }));\n    Object.defineProperty(cue, 'positionAlign', extend({}, baseObj, {\n      get: function () {\n        return _positionAlign;\n      },\n      set: function (value) {\n        const setting = findAlignSetting(value);\n        if (!setting) {\n          throw new SyntaxError('An invalid or illegal string was specified.');\n        }\n        _positionAlign = setting;\n        this.hasBeenReset = true;\n      }\n    }));\n    Object.defineProperty(cue, 'size', extend({}, baseObj, {\n      get: function () {\n        return _size;\n      },\n      set: function (value) {\n        if (value < 0 || value > 100) {\n          throw new Error('Size must be between 0 and 100.');\n        }\n        _size = value;\n        this.hasBeenReset = true;\n      }\n    }));\n    Object.defineProperty(cue, 'align', extend({}, baseObj, {\n      get: function () {\n        return _align;\n      },\n      set: function (value) {\n        const setting = findAlignSetting(value);\n        if (!setting) {\n          throw new SyntaxError('An invalid or illegal string was specified.');\n        }\n        _align = setting;\n        this.hasBeenReset = true;\n      }\n    }));\n\n    /**\n     * Other <track> spec defined properties\n     */\n\n    // http://www.whatwg.org/specs/web-apps/current-work/multipage/the-video-element.html#text-track-cue-display-state\n    cue.displayState = undefined;\n  }\n\n  /**\n   * VTTCue methods\n   */\n\n  VTTCue.prototype.getCueAsHTML = function () {\n    // Assume WebVTT.convertCueToDOMTree is on the global.\n    const WebVTT = self.WebVTT;\n    return WebVTT.convertCueToDOMTree(self, this.text);\n  };\n  // this is a polyfill hack\n  return VTTCue;\n})();\n\n/*\n * Source: https://github.com/mozilla/vtt.js/blob/master/dist/vtt.js\n */\n\nclass StringDecoder {\n  // eslint-disable-next-line @typescript-eslint/no-unused-vars\n  decode(data, options) {\n    if (!data) {\n      return '';\n    }\n    if (typeof data !== 'string') {\n      throw new Error('Error - expected string data.');\n    }\n    return decodeURIComponent(encodeURIComponent(data));\n  }\n}\n\n// Try to parse input as a time stamp.\nfunction parseTimeStamp(input) {\n  function computeSeconds(h, m, s, f) {\n    return (h | 0) * 3600 + (m | 0) * 60 + (s | 0) + parseFloat(f || 0);\n  }\n  const m = input.match(/^(?:(\\d+):)?(\\d{2}):(\\d{2})(\\.\\d+)?/);\n  if (!m) {\n    return null;\n  }\n  if (parseFloat(m[2]) > 59) {\n    // Timestamp takes the form of [hours]:[minutes].[milliseconds]\n    // First position is hours as it's over 59.\n    return computeSeconds(m[2], m[3], 0, m[4]);\n  }\n  // Timestamp takes the form of [hours (optional)]:[minutes]:[seconds].[milliseconds]\n  return computeSeconds(m[1], m[2], m[3], m[4]);\n}\n\n// A settings object holds key/value pairs and will ignore anything but the first\n// assignment to a specific key.\nclass Settings {\n  constructor() {\n    this.values = Object.create(null);\n  }\n  // Only accept the first assignment to any key.\n  set(k, v) {\n    if (!this.get(k) && v !== '') {\n      this.values[k] = v;\n    }\n  }\n  // Return the value for a key, or a default value.\n  // If 'defaultKey' is passed then 'dflt' is assumed to be an object with\n  // a number of possible default values as properties where 'defaultKey' is\n  // the key of the property that will be chosen; otherwise it's assumed to be\n  // a single value.\n  get(k, dflt, defaultKey) {\n    if (defaultKey) {\n      return this.has(k) ? this.values[k] : dflt[defaultKey];\n    }\n    return this.has(k) ? this.values[k] : dflt;\n  }\n  // Check whether we have a value for a key.\n  has(k) {\n    return k in this.values;\n  }\n  // Accept a setting if its one of the given alternatives.\n  alt(k, v, a) {\n    for (let n = 0; n < a.length; ++n) {\n      if (v === a[n]) {\n        this.set(k, v);\n        break;\n      }\n    }\n  }\n  // Accept a setting if its a valid (signed) integer.\n  integer(k, v) {\n    if (/^-?\\d+$/.test(v)) {\n      // integer\n      this.set(k, parseInt(v, 10));\n    }\n  }\n  // Accept a setting if its a valid percentage.\n  percent(k, v) {\n    if (/^([\\d]{1,3})(\\.[\\d]*)?%$/.test(v)) {\n      const percent = parseFloat(v);\n      if (percent >= 0 && percent <= 100) {\n        this.set(k, percent);\n        return true;\n      }\n    }\n    return false;\n  }\n}\n\n// Helper function to parse input into groups separated by 'groupDelim', and\n// interpret each group as a key/value pair separated by 'keyValueDelim'.\nfunction parseOptions(input, callback, keyValueDelim, groupDelim) {\n  const groups = groupDelim ? input.split(groupDelim) : [input];\n  for (const i in groups) {\n    if (typeof groups[i] !== 'string') {\n      continue;\n    }\n    const kv = groups[i].split(keyValueDelim);\n    if (kv.length !== 2) {\n      continue;\n    }\n    const k = kv[0];\n    const v = kv[1];\n    callback(k, v);\n  }\n}\nconst defaults = new VTTCue(0, 0, '');\n// 'middle' was changed to 'center' in the spec: https://github.com/w3c/webvtt/pull/244\n//  Safari doesn't yet support this change, but FF and Chrome do.\nconst center = defaults.align === 'middle' ? 'middle' : 'center';\nfunction parseCue(input, cue, regionList) {\n  // Remember the original input if we need to throw an error.\n  const oInput = input;\n  // 4.1 WebVTT timestamp\n  function consumeTimeStamp() {\n    const ts = parseTimeStamp(input);\n    if (ts === null) {\n      throw new Error('Malformed timestamp: ' + oInput);\n    }\n\n    // Remove time stamp from input.\n    input = input.replace(/^[^\\sa-zA-Z-]+/, '');\n    return ts;\n  }\n\n  // 4.4.2 WebVTT cue settings\n  function consumeCueSettings(input, cue) {\n    const settings = new Settings();\n    parseOptions(input, function (k, v) {\n      let vals;\n      switch (k) {\n        case 'region':\n          // Find the last region we parsed with the same region id.\n          for (let i = regionList.length - 1; i >= 0; i--) {\n            if (regionList[i].id === v) {\n              settings.set(k, regionList[i].region);\n              break;\n            }\n          }\n          break;\n        case 'vertical':\n          settings.alt(k, v, ['rl', 'lr']);\n          break;\n        case 'line':\n          vals = v.split(',');\n          settings.integer(k, vals[0]);\n          if (settings.percent(k, vals[0])) {\n            settings.set('snapToLines', false);\n          }\n          settings.alt(k, vals[0], ['auto']);\n          if (vals.length === 2) {\n            settings.alt('lineAlign', vals[1], ['start', center, 'end']);\n          }\n          break;\n        case 'position':\n          vals = v.split(',');\n          settings.percent(k, vals[0]);\n          if (vals.length === 2) {\n            settings.alt('positionAlign', vals[1], ['start', center, 'end', 'line-left', 'line-right', 'auto']);\n          }\n          break;\n        case 'size':\n          settings.percent(k, v);\n          break;\n        case 'align':\n          settings.alt(k, v, ['start', center, 'end', 'left', 'right']);\n          break;\n      }\n    }, /:/, /\\s/);\n\n    // Apply default values for any missing fields.\n    cue.region = settings.get('region', null);\n    cue.vertical = settings.get('vertical', '');\n    let line = settings.get('line', 'auto');\n    if (line === 'auto' && defaults.line === -1) {\n      // set numeric line number for Safari\n      line = -1;\n    }\n    cue.line = line;\n    cue.lineAlign = settings.get('lineAlign', 'start');\n    cue.snapToLines = settings.get('snapToLines', true);\n    cue.size = settings.get('size', 100);\n    cue.align = settings.get('align', center);\n    let position = settings.get('position', 'auto');\n    if (position === 'auto' && defaults.position === 50) {\n      // set numeric position for Safari\n      position = cue.align === 'start' || cue.align === 'left' ? 0 : cue.align === 'end' || cue.align === 'right' ? 100 : 50;\n    }\n    cue.position = position;\n  }\n  function skipWhitespace() {\n    input = input.replace(/^\\s+/, '');\n  }\n\n  // 4.1 WebVTT cue timings.\n  skipWhitespace();\n  cue.startTime = consumeTimeStamp(); // (1) collect cue start time\n  skipWhitespace();\n  if (input.slice(0, 3) !== '-->') {\n    // (3) next characters must match '-->'\n    throw new Error(\"Malformed time stamp (time stamps must be separated by '-->'): \" + oInput);\n  }\n  input = input.slice(3);\n  skipWhitespace();\n  cue.endTime = consumeTimeStamp(); // (5) collect cue end time\n\n  // 4.1 WebVTT cue settings list.\n  skipWhitespace();\n  consumeCueSettings(input, cue);\n}\nfunction fixLineBreaks(input) {\n  return input.replace(/<br(?: \\/)?>/gi, '\\n');\n}\nclass VTTParser {\n  constructor() {\n    this.state = 'INITIAL';\n    this.buffer = '';\n    this.decoder = new StringDecoder();\n    this.regionList = [];\n    this.cue = null;\n    this.oncue = void 0;\n    this.onparsingerror = void 0;\n    this.onflush = void 0;\n  }\n  parse(data) {\n    const _this = this;\n\n    // If there is no data then we won't decode it, but will just try to parse\n    // whatever is in buffer already. This may occur in circumstances, for\n    // example when flush() is called.\n    if (data) {\n      // Try to decode the data that we received.\n      _this.buffer += _this.decoder.decode(data, {\n        stream: true\n      });\n    }\n    function collectNextLine() {\n      let buffer = _this.buffer;\n      let pos = 0;\n      buffer = fixLineBreaks(buffer);\n      while (pos < buffer.length && buffer[pos] !== '\\r' && buffer[pos] !== '\\n') {\n        ++pos;\n      }\n      const line = buffer.slice(0, pos);\n      // Advance the buffer early in case we fail below.\n      if (buffer[pos] === '\\r') {\n        ++pos;\n      }\n      if (buffer[pos] === '\\n') {\n        ++pos;\n      }\n      _this.buffer = buffer.slice(pos);\n      return line;\n    }\n\n    // 3.2 WebVTT metadata header syntax\n    function parseHeader(input) {\n      parseOptions(input, function (k, v) {\n        // switch (k) {\n        // case 'region':\n        // 3.3 WebVTT region metadata header syntax\n        // console.log('parse region', v);\n        // parseRegion(v);\n        // break;\n        // }\n      }, /:/);\n    }\n\n    // 5.1 WebVTT file parsing.\n    try {\n      let line = '';\n      if (_this.state === 'INITIAL') {\n        // We can't start parsing until we have the first line.\n        if (!/\\r\\n|\\n/.test(_this.buffer)) {\n          return this;\n        }\n        line = collectNextLine();\n        // strip of UTF-8 BOM if any\n        // https://en.wikipedia.org/wiki/Byte_order_mark#UTF-8\n        const m = line.match(/^()?WEBVTT([ \\t].*)?$/);\n        if (!(m != null && m[0])) {\n          throw new Error('Malformed WebVTT signature.');\n        }\n        _this.state = 'HEADER';\n      }\n      let alreadyCollectedLine = false;\n      while (_this.buffer) {\n        // We can't parse a line until we have the full line.\n        if (!/\\r\\n|\\n/.test(_this.buffer)) {\n          return this;\n        }\n        if (!alreadyCollectedLine) {\n          line = collectNextLine();\n        } else {\n          alreadyCollectedLine = false;\n        }\n        switch (_this.state) {\n          case 'HEADER':\n            // 13-18 - Allow a header (metadata) under the WEBVTT line.\n            if (/:/.test(line)) {\n              parseHeader(line);\n            } else if (!line) {\n              // An empty line terminates the header and starts the body (cues).\n              _this.state = 'ID';\n            }\n            continue;\n          case 'NOTE':\n            // Ignore NOTE blocks.\n            if (!line) {\n              _this.state = 'ID';\n            }\n            continue;\n          case 'ID':\n            // Check for the start of NOTE blocks.\n            if (/^NOTE($|[ \\t])/.test(line)) {\n              _this.state = 'NOTE';\n              break;\n            }\n            // 19-29 - Allow any number of line terminators, then initialize new cue values.\n            if (!line) {\n              continue;\n            }\n            _this.cue = new VTTCue(0, 0, '');\n            _this.state = 'CUE';\n            // 30-39 - Check if self line contains an optional identifier or timing data.\n            if (line.indexOf('-->') === -1) {\n              _this.cue.id = line;\n              continue;\n            }\n          // Process line as start of a cue.\n          /* falls through */\n          case 'CUE':\n            // 40 - Collect cue timings and settings.\n            if (!_this.cue) {\n              _this.state = 'BADCUE';\n              continue;\n            }\n            try {\n              parseCue(line, _this.cue, _this.regionList);\n            } catch (e) {\n              // In case of an error ignore rest of the cue.\n              _this.cue = null;\n              _this.state = 'BADCUE';\n              continue;\n            }\n            _this.state = 'CUETEXT';\n            continue;\n          case 'CUETEXT':\n            {\n              const hasSubstring = line.indexOf('-->') !== -1;\n              // 34 - If we have an empty line then report the cue.\n              // 35 - If we have the special substring '-->' then report the cue,\n              // but do not collect the line as we need to process the current\n              // one as a new cue.\n              if (!line || hasSubstring && (alreadyCollectedLine = true)) {\n                // We are done parsing self cue.\n                if (_this.oncue && _this.cue) {\n                  _this.oncue(_this.cue);\n                }\n                _this.cue = null;\n                _this.state = 'ID';\n                continue;\n              }\n              if (_this.cue === null) {\n                continue;\n              }\n              if (_this.cue.text) {\n                _this.cue.text += '\\n';\n              }\n              _this.cue.text += line;\n            }\n            continue;\n          case 'BADCUE':\n            // 54-62 - Collect and discard the remaining cue.\n            if (!line) {\n              _this.state = 'ID';\n            }\n        }\n      }\n    } catch (e) {\n      // If we are currently parsing a cue, report what we have.\n      if (_this.state === 'CUETEXT' && _this.cue && _this.oncue) {\n        _this.oncue(_this.cue);\n      }\n      _this.cue = null;\n      // Enter BADWEBVTT state if header was not parsed correctly otherwise\n      // another exception occurred so enter BADCUE state.\n      _this.state = _this.state === 'INITIAL' ? 'BADWEBVTT' : 'BADCUE';\n    }\n    return this;\n  }\n  flush() {\n    const _this = this;\n    try {\n      // Finish decoding the stream.\n      // _this.buffer += _this.decoder.decode();\n      // Synthesize the end of the current cue or region.\n      if (_this.cue || _this.state === 'HEADER') {\n        _this.buffer += '\\n\\n';\n        _this.parse();\n      }\n      // If we've flushed, parsed, and we're still on the INITIAL state then\n      // that means we don't have enough of the stream to parse the first\n      // line.\n      if (_this.state === 'INITIAL' || _this.state === 'BADWEBVTT') {\n        throw new Error('Malformed WebVTT signature.');\n      }\n    } catch (e) {\n      if (_this.onparsingerror) {\n        _this.onparsingerror(e);\n      }\n    }\n    if (_this.onflush) {\n      _this.onflush();\n    }\n    return this;\n  }\n}\n\nconst LINEBREAKS = /\\r\\n|\\n\\r|\\n|\\r/g;\n\n// String.prototype.startsWith is not supported in IE11\nconst startsWith = function startsWith(inputString, searchString, position = 0) {\n  return inputString.slice(position, position + searchString.length) === searchString;\n};\nconst cueString2millis = function cueString2millis(timeString) {\n  let ts = parseInt(timeString.slice(-3));\n  const secs = parseInt(timeString.slice(-6, -4));\n  const mins = parseInt(timeString.slice(-9, -7));\n  const hours = timeString.length > 9 ? parseInt(timeString.substring(0, timeString.indexOf(':'))) : 0;\n  if (!isFiniteNumber(ts) || !isFiniteNumber(secs) || !isFiniteNumber(mins) || !isFiniteNumber(hours)) {\n    throw Error(`Malformed X-TIMESTAMP-MAP: Local:${timeString}`);\n  }\n  ts += 1000 * secs;\n  ts += 60 * 1000 * mins;\n  ts += 60 * 60 * 1000 * hours;\n  return ts;\n};\n\n// From https://github.com/darkskyapp/string-hash\nconst hash = function hash(text) {\n  let _hash = 5381;\n  let i = text.length;\n  while (i) {\n    _hash = _hash * 33 ^ text.charCodeAt(--i);\n  }\n  return (_hash >>> 0).toString();\n};\n\n// Create a unique hash id for a cue based on start/end times and text.\n// This helps timeline-controller to avoid showing repeated captions.\nfunction generateCueId(startTime, endTime, text) {\n  return hash(startTime.toString()) + hash(endTime.toString()) + hash(text);\n}\nconst calculateOffset = function calculateOffset(vttCCs, cc, presentationTime) {\n  let currCC = vttCCs[cc];\n  let prevCC = vttCCs[currCC.prevCC];\n\n  // This is the first discontinuity or cues have been processed since the last discontinuity\n  // Offset = current discontinuity time\n  if (!prevCC || !prevCC.new && currCC.new) {\n    vttCCs.ccOffset = vttCCs.presentationOffset = currCC.start;\n    currCC.new = false;\n    return;\n  }\n\n  // There have been discontinuities since cues were last parsed.\n  // Offset = time elapsed\n  while ((_prevCC = prevCC) != null && _prevCC.new) {\n    var _prevCC;\n    vttCCs.ccOffset += currCC.start - prevCC.start;\n    currCC.new = false;\n    currCC = prevCC;\n    prevCC = vttCCs[currCC.prevCC];\n  }\n  vttCCs.presentationOffset = presentationTime;\n};\nfunction parseWebVTT(vttByteArray, initPTS, vttCCs, cc, timeOffset, callBack, errorCallBack) {\n  const parser = new VTTParser();\n  // Convert byteArray into string, replacing any somewhat exotic linefeeds with \"\\n\", then split on that character.\n  // Uint8Array.prototype.reduce is not implemented in IE11\n  const vttLines = utf8ArrayToStr(new Uint8Array(vttByteArray)).trim().replace(LINEBREAKS, '\\n').split('\\n');\n  const cues = [];\n  const init90kHz = initPTS ? toMpegTsClockFromTimescale(initPTS.baseTime, initPTS.timescale) : 0;\n  let cueTime = '00:00.000';\n  let timestampMapMPEGTS = 0;\n  let timestampMapLOCAL = 0;\n  let parsingError;\n  let inHeader = true;\n  parser.oncue = function (cue) {\n    // Adjust cue timing; clamp cues to start no earlier than - and drop cues that don't end after - 0 on timeline.\n    const currCC = vttCCs[cc];\n    let cueOffset = vttCCs.ccOffset;\n\n    // Calculate subtitle PTS offset\n    const webVttMpegTsMapOffset = (timestampMapMPEGTS - init90kHz) / 90000;\n\n    // Update offsets for new discontinuities\n    if (currCC != null && currCC.new) {\n      if (timestampMapLOCAL !== undefined) {\n        // When local time is provided, offset = discontinuity start time - local time\n        cueOffset = vttCCs.ccOffset = currCC.start;\n      } else {\n        calculateOffset(vttCCs, cc, webVttMpegTsMapOffset);\n      }\n    }\n    if (webVttMpegTsMapOffset) {\n      if (!initPTS) {\n        parsingError = new Error('Missing initPTS for VTT MPEGTS');\n        return;\n      }\n      // If we have MPEGTS, offset = presentation time + discontinuity offset\n      cueOffset = webVttMpegTsMapOffset - vttCCs.presentationOffset;\n    }\n    const duration = cue.endTime - cue.startTime;\n    const startTime = normalizePts((cue.startTime + cueOffset - timestampMapLOCAL) * 90000, timeOffset * 90000) / 90000;\n    cue.startTime = Math.max(startTime, 0);\n    cue.endTime = Math.max(startTime + duration, 0);\n\n    //trim trailing webvtt block whitespaces\n    const text = cue.text.trim();\n\n    // Fix encoding of special characters\n    cue.text = decodeURIComponent(encodeURIComponent(text));\n\n    // If the cue was not assigned an id from the VTT file (line above the content), create one.\n    if (!cue.id) {\n      cue.id = generateCueId(cue.startTime, cue.endTime, text);\n    }\n    if (cue.endTime > 0) {\n      cues.push(cue);\n    }\n  };\n  parser.onparsingerror = function (error) {\n    parsingError = error;\n  };\n  parser.onflush = function () {\n    if (parsingError) {\n      errorCallBack(parsingError);\n      return;\n    }\n    callBack(cues);\n  };\n\n  // Go through contents line by line.\n  vttLines.forEach(line => {\n    if (inHeader) {\n      // Look for X-TIMESTAMP-MAP in header.\n      if (startsWith(line, 'X-TIMESTAMP-MAP=')) {\n        // Once found, no more are allowed anyway, so stop searching.\n        inHeader = false;\n        // Extract LOCAL and MPEGTS.\n        line.slice(16).split(',').forEach(timestamp => {\n          if (startsWith(timestamp, 'LOCAL:')) {\n            cueTime = timestamp.slice(6);\n          } else if (startsWith(timestamp, 'MPEGTS:')) {\n            timestampMapMPEGTS = parseInt(timestamp.slice(7));\n          }\n        });\n        try {\n          // Convert cue time to seconds\n          timestampMapLOCAL = cueString2millis(cueTime) / 1000;\n        } catch (error) {\n          parsingError = error;\n        }\n        // Return without parsing X-TIMESTAMP-MAP line.\n        return;\n      } else if (line === '') {\n        inHeader = false;\n      }\n    }\n    // Parse line by default.\n    parser.parse(line + '\\n');\n  });\n  parser.flush();\n}\n\nconst IMSC1_CODEC = 'stpp.ttml.im1t';\n\n// Time format: h:m:s:frames(.subframes)\nconst HMSF_REGEX = /^(\\d{2,}):(\\d{2}):(\\d{2}):(\\d{2})\\.?(\\d+)?$/;\n\n// Time format: hours, minutes, seconds, milliseconds, frames, ticks\nconst TIME_UNIT_REGEX = /^(\\d*(?:\\.\\d*)?)(h|m|s|ms|f|t)$/;\nconst textAlignToLineAlign = {\n  left: 'start',\n  center: 'center',\n  right: 'end',\n  start: 'start',\n  end: 'end'\n};\nfunction parseIMSC1(payload, initPTS, callBack, errorCallBack) {\n  const results = findBox(new Uint8Array(payload), ['mdat']);\n  if (results.length === 0) {\n    errorCallBack(new Error('Could not parse IMSC1 mdat'));\n    return;\n  }\n  const ttmlList = results.map(mdat => utf8ArrayToStr(mdat));\n  const syncTime = toTimescaleFromScale(initPTS.baseTime, 1, initPTS.timescale);\n  try {\n    ttmlList.forEach(ttml => callBack(parseTTML(ttml, syncTime)));\n  } catch (error) {\n    errorCallBack(error);\n  }\n}\nfunction parseTTML(ttml, syncTime) {\n  const parser = new DOMParser();\n  const xmlDoc = parser.parseFromString(ttml, 'text/xml');\n  const tt = xmlDoc.getElementsByTagName('tt')[0];\n  if (!tt) {\n    throw new Error('Invalid ttml');\n  }\n  const defaultRateInfo = {\n    frameRate: 30,\n    subFrameRate: 1,\n    frameRateMultiplier: 0,\n    tickRate: 0\n  };\n  const rateInfo = Object.keys(defaultRateInfo).reduce((result, key) => {\n    result[key] = tt.getAttribute(`ttp:${key}`) || defaultRateInfo[key];\n    return result;\n  }, {});\n  const trim = tt.getAttribute('xml:space') !== 'preserve';\n  const styleElements = collectionToDictionary(getElementCollection(tt, 'styling', 'style'));\n  const regionElements = collectionToDictionary(getElementCollection(tt, 'layout', 'region'));\n  const cueElements = getElementCollection(tt, 'body', '[begin]');\n  return [].map.call(cueElements, cueElement => {\n    const cueText = getTextContent(cueElement, trim);\n    if (!cueText || !cueElement.hasAttribute('begin')) {\n      return null;\n    }\n    const startTime = parseTtmlTime(cueElement.getAttribute('begin'), rateInfo);\n    const duration = parseTtmlTime(cueElement.getAttribute('dur'), rateInfo);\n    let endTime = parseTtmlTime(cueElement.getAttribute('end'), rateInfo);\n    if (startTime === null) {\n      throw timestampParsingError(cueElement);\n    }\n    if (endTime === null) {\n      if (duration === null) {\n        throw timestampParsingError(cueElement);\n      }\n      endTime = startTime + duration;\n    }\n    const cue = new VTTCue(startTime - syncTime, endTime - syncTime, cueText);\n    cue.id = generateCueId(cue.startTime, cue.endTime, cue.text);\n    const region = regionElements[cueElement.getAttribute('region')];\n    const style = styleElements[cueElement.getAttribute('style')];\n\n    // Apply styles to cue\n    const styles = getTtmlStyles(region, style, styleElements);\n    const {\n      textAlign\n    } = styles;\n    if (textAlign) {\n      // cue.positionAlign not settable in FF~2016\n      const lineAlign = textAlignToLineAlign[textAlign];\n      if (lineAlign) {\n        cue.lineAlign = lineAlign;\n      }\n      cue.align = textAlign;\n    }\n    _extends(cue, styles);\n    return cue;\n  }).filter(cue => cue !== null);\n}\nfunction getElementCollection(fromElement, parentName, childName) {\n  const parent = fromElement.getElementsByTagName(parentName)[0];\n  if (parent) {\n    return [].slice.call(parent.querySelectorAll(childName));\n  }\n  return [];\n}\nfunction collectionToDictionary(elementsWithId) {\n  return elementsWithId.reduce((dict, element) => {\n    const id = element.getAttribute('xml:id');\n    if (id) {\n      dict[id] = element;\n    }\n    return dict;\n  }, {});\n}\nfunction getTextContent(element, trim) {\n  return [].slice.call(element.childNodes).reduce((str, node, i) => {\n    var _node$childNodes;\n    if (node.nodeName === 'br' && i) {\n      return str + '\\n';\n    }\n    if ((_node$childNodes = node.childNodes) != null && _node$childNodes.length) {\n      return getTextContent(node, trim);\n    } else if (trim) {\n      return str + node.textContent.trim().replace(/\\s+/g, ' ');\n    }\n    return str + node.textContent;\n  }, '');\n}\nfunction getTtmlStyles(region, style, styleElements) {\n  const ttsNs = 'http://www.w3.org/ns/ttml#styling';\n  let regionStyle = null;\n  const styleAttributes = ['displayAlign', 'textAlign', 'color', 'backgroundColor', 'fontSize', 'fontFamily'\n  // 'fontWeight',\n  // 'lineHeight',\n  // 'wrapOption',\n  // 'fontStyle',\n  // 'direction',\n  // 'writingMode'\n  ];\n  const regionStyleName = region != null && region.hasAttribute('style') ? region.getAttribute('style') : null;\n  if (regionStyleName && styleElements.hasOwnProperty(regionStyleName)) {\n    regionStyle = styleElements[regionStyleName];\n  }\n  return styleAttributes.reduce((styles, name) => {\n    const value = getAttributeNS(style, ttsNs, name) || getAttributeNS(region, ttsNs, name) || getAttributeNS(regionStyle, ttsNs, name);\n    if (value) {\n      styles[name] = value;\n    }\n    return styles;\n  }, {});\n}\nfunction getAttributeNS(element, ns, name) {\n  if (!element) {\n    return null;\n  }\n  return element.hasAttributeNS(ns, name) ? element.getAttributeNS(ns, name) : null;\n}\nfunction timestampParsingError(node) {\n  return new Error(`Could not parse ttml timestamp ${node}`);\n}\nfunction parseTtmlTime(timeAttributeValue, rateInfo) {\n  if (!timeAttributeValue) {\n    return null;\n  }\n  let seconds = parseTimeStamp(timeAttributeValue);\n  if (seconds === null) {\n    if (HMSF_REGEX.test(timeAttributeValue)) {\n      seconds = parseHoursMinutesSecondsFrames(timeAttributeValue, rateInfo);\n    } else if (TIME_UNIT_REGEX.test(timeAttributeValue)) {\n      seconds = parseTimeUnits(timeAttributeValue, rateInfo);\n    }\n  }\n  return seconds;\n}\nfunction parseHoursMinutesSecondsFrames(timeAttributeValue, rateInfo) {\n  const m = HMSF_REGEX.exec(timeAttributeValue);\n  const frames = (m[4] | 0) + (m[5] | 0) / rateInfo.subFrameRate;\n  return (m[1] | 0) * 3600 + (m[2] | 0) * 60 + (m[3] | 0) + frames / rateInfo.frameRate;\n}\nfunction parseTimeUnits(timeAttributeValue, rateInfo) {\n  const m = TIME_UNIT_REGEX.exec(timeAttributeValue);\n  const value = Number(m[1]);\n  const unit = m[2];\n  switch (unit) {\n    case 'h':\n      return value * 3600;\n    case 'm':\n      return value * 60;\n    case 'ms':\n      return value * 1000;\n    case 'f':\n      return value / rateInfo.frameRate;\n    case 't':\n      return value / rateInfo.tickRate;\n  }\n  return value;\n}\n\nclass TimelineController {\n  constructor(hls) {\n    this.hls = void 0;\n    this.media = null;\n    this.config = void 0;\n    this.enabled = true;\n    this.Cues = void 0;\n    this.textTracks = [];\n    this.tracks = [];\n    this.initPTS = [];\n    this.unparsedVttFrags = [];\n    this.captionsTracks = {};\n    this.nonNativeCaptionsTracks = {};\n    this.cea608Parser1 = void 0;\n    this.cea608Parser2 = void 0;\n    this.lastCc = -1;\n    // Last video (CEA-608) fragment CC\n    this.lastSn = -1;\n    // Last video (CEA-608) fragment MSN\n    this.lastPartIndex = -1;\n    // Last video (CEA-608) fragment Part Index\n    this.prevCC = -1;\n    // Last subtitle fragment CC\n    this.vttCCs = newVTTCCs();\n    this.captionsProperties = void 0;\n    this.hls = hls;\n    this.config = hls.config;\n    this.Cues = hls.config.cueHandler;\n    this.captionsProperties = {\n      textTrack1: {\n        label: this.config.captionsTextTrack1Label,\n        languageCode: this.config.captionsTextTrack1LanguageCode\n      },\n      textTrack2: {\n        label: this.config.captionsTextTrack2Label,\n        languageCode: this.config.captionsTextTrack2LanguageCode\n      },\n      textTrack3: {\n        label: this.config.captionsTextTrack3Label,\n        languageCode: this.config.captionsTextTrack3LanguageCode\n      },\n      textTrack4: {\n        label: this.config.captionsTextTrack4Label,\n        languageCode: this.config.captionsTextTrack4LanguageCode\n      }\n    };\n    hls.on(Events.MEDIA_ATTACHING, this.onMediaAttaching, this);\n    hls.on(Events.MEDIA_DETACHING, this.onMediaDetaching, this);\n    hls.on(Events.MANIFEST_LOADING, this.onManifestLoading, this);\n    hls.on(Events.MANIFEST_LOADED, this.onManifestLoaded, this);\n    hls.on(Events.SUBTITLE_TRACKS_UPDATED, this.onSubtitleTracksUpdated, this);\n    hls.on(Events.FRAG_LOADING, this.onFragLoading, this);\n    hls.on(Events.FRAG_LOADED, this.onFragLoaded, this);\n    hls.on(Events.FRAG_PARSING_USERDATA, this.onFragParsingUserdata, this);\n    hls.on(Events.FRAG_DECRYPTED, this.onFragDecrypted, this);\n    hls.on(Events.INIT_PTS_FOUND, this.onInitPtsFound, this);\n    hls.on(Events.SUBTITLE_TRACKS_CLEARED, this.onSubtitleTracksCleared, this);\n    hls.on(Events.BUFFER_FLUSHING, this.onBufferFlushing, this);\n  }\n  destroy() {\n    const {\n      hls\n    } = this;\n    hls.off(Events.MEDIA_ATTACHING, this.onMediaAttaching, this);\n    hls.off(Events.MEDIA_DETACHING, this.onMediaDetaching, this);\n    hls.off(Events.MANIFEST_LOADING, this.onManifestLoading, this);\n    hls.off(Events.MANIFEST_LOADED, this.onManifestLoaded, this);\n    hls.off(Events.SUBTITLE_TRACKS_UPDATED, this.onSubtitleTracksUpdated, this);\n    hls.off(Events.FRAG_LOADING, this.onFragLoading, this);\n    hls.off(Events.FRAG_LOADED, this.onFragLoaded, this);\n    hls.off(Events.FRAG_PARSING_USERDATA, this.onFragParsingUserdata, this);\n    hls.off(Events.FRAG_DECRYPTED, this.onFragDecrypted, this);\n    hls.off(Events.INIT_PTS_FOUND, this.onInitPtsFound, this);\n    hls.off(Events.SUBTITLE_TRACKS_CLEARED, this.onSubtitleTracksCleared, this);\n    hls.off(Events.BUFFER_FLUSHING, this.onBufferFlushing, this);\n    // @ts-ignore\n    this.hls = this.config = null;\n    this.cea608Parser1 = this.cea608Parser2 = undefined;\n  }\n  initCea608Parsers() {\n    if (this.config.enableCEA708Captions && (!this.cea608Parser1 || !this.cea608Parser2)) {\n      const channel1 = new OutputFilter(this, 'textTrack1');\n      const channel2 = new OutputFilter(this, 'textTrack2');\n      const channel3 = new OutputFilter(this, 'textTrack3');\n      const channel4 = new OutputFilter(this, 'textTrack4');\n      this.cea608Parser1 = new Cea608Parser(1, channel1, channel2);\n      this.cea608Parser2 = new Cea608Parser(3, channel3, channel4);\n    }\n  }\n  addCues(trackName, startTime, endTime, screen, cueRanges) {\n    // skip cues which overlap more than 50% with previously parsed time ranges\n    let merged = false;\n    for (let i = cueRanges.length; i--;) {\n      const cueRange = cueRanges[i];\n      const overlap = intersection(cueRange[0], cueRange[1], startTime, endTime);\n      if (overlap >= 0) {\n        cueRange[0] = Math.min(cueRange[0], startTime);\n        cueRange[1] = Math.max(cueRange[1], endTime);\n        merged = true;\n        if (overlap / (endTime - startTime) > 0.5) {\n          return;\n        }\n      }\n    }\n    if (!merged) {\n      cueRanges.push([startTime, endTime]);\n    }\n    if (this.config.renderTextTracksNatively) {\n      const track = this.captionsTracks[trackName];\n      this.Cues.newCue(track, startTime, endTime, screen);\n    } else {\n      const cues = this.Cues.newCue(null, startTime, endTime, screen);\n      this.hls.trigger(Events.CUES_PARSED, {\n        type: 'captions',\n        cues,\n        track: trackName\n      });\n    }\n  }\n\n  // Triggered when an initial PTS is found; used for synchronisation of WebVTT.\n  onInitPtsFound(event, {\n    frag,\n    id,\n    initPTS,\n    timescale\n  }) {\n    const {\n      unparsedVttFrags\n    } = this;\n    if (id === 'main') {\n      this.initPTS[frag.cc] = {\n        baseTime: initPTS,\n        timescale\n      };\n    }\n\n    // Due to asynchronous processing, initial PTS may arrive later than the first VTT fragments are loaded.\n    // Parse any unparsed fragments upon receiving the initial PTS.\n    if (unparsedVttFrags.length) {\n      this.unparsedVttFrags = [];\n      unparsedVttFrags.forEach(frag => {\n        this.onFragLoaded(Events.FRAG_LOADED, frag);\n      });\n    }\n  }\n  getExistingTrack(label, language) {\n    const {\n      media\n    } = this;\n    if (media) {\n      for (let i = 0; i < media.textTracks.length; i++) {\n        const textTrack = media.textTracks[i];\n        if (canReuseVttTextTrack(textTrack, {\n          name: label,\n          lang: language,\n          attrs: {}\n        })) {\n          return textTrack;\n        }\n      }\n    }\n    return null;\n  }\n  createCaptionsTrack(trackName) {\n    if (this.config.renderTextTracksNatively) {\n      this.createNativeTrack(trackName);\n    } else {\n      this.createNonNativeTrack(trackName);\n    }\n  }\n  createNativeTrack(trackName) {\n    if (this.captionsTracks[trackName]) {\n      return;\n    }\n    const {\n      captionsProperties,\n      captionsTracks,\n      media\n    } = this;\n    const {\n      label,\n      languageCode\n    } = captionsProperties[trackName];\n    // Enable reuse of existing text track.\n    const existingTrack = this.getExistingTrack(label, languageCode);\n    if (!existingTrack) {\n      const textTrack = this.createTextTrack('captions', label, languageCode);\n      if (textTrack) {\n        // Set a special property on the track so we know it's managed by Hls.js\n        textTrack[trackName] = true;\n        captionsTracks[trackName] = textTrack;\n      }\n    } else {\n      captionsTracks[trackName] = existingTrack;\n      clearCurrentCues(captionsTracks[trackName]);\n      sendAddTrackEvent(captionsTracks[trackName], media);\n    }\n  }\n  createNonNativeTrack(trackName) {\n    if (this.nonNativeCaptionsTracks[trackName]) {\n      return;\n    }\n    // Create a list of a single track for the provider to consume\n    const trackProperties = this.captionsProperties[trackName];\n    if (!trackProperties) {\n      return;\n    }\n    const label = trackProperties.label;\n    const track = {\n      _id: trackName,\n      label,\n      kind: 'captions',\n      default: trackProperties.media ? !!trackProperties.media.default : false,\n      closedCaptions: trackProperties.media\n    };\n    this.nonNativeCaptionsTracks[trackName] = track;\n    this.hls.trigger(Events.NON_NATIVE_TEXT_TRACKS_FOUND, {\n      tracks: [track]\n    });\n  }\n  createTextTrack(kind, label, lang) {\n    const media = this.media;\n    if (!media) {\n      return;\n    }\n    return media.addTextTrack(kind, label, lang);\n  }\n  onMediaAttaching(event, data) {\n    this.media = data.media;\n    this._cleanTracks();\n  }\n  onMediaDetaching() {\n    const {\n      captionsTracks\n    } = this;\n    Object.keys(captionsTracks).forEach(trackName => {\n      clearCurrentCues(captionsTracks[trackName]);\n      delete captionsTracks[trackName];\n    });\n    this.nonNativeCaptionsTracks = {};\n  }\n  onManifestLoading() {\n    // Detect discontinuity in video fragment (CEA-608) parsing\n    this.lastCc = -1;\n    this.lastSn = -1;\n    this.lastPartIndex = -1;\n    // Detect discontinuity in subtitle manifests\n    this.prevCC = -1;\n    this.vttCCs = newVTTCCs();\n    // Reset tracks\n    this._cleanTracks();\n    this.tracks = [];\n    this.captionsTracks = {};\n    this.nonNativeCaptionsTracks = {};\n    this.textTracks = [];\n    this.unparsedVttFrags = [];\n    this.initPTS = [];\n    if (this.cea608Parser1 && this.cea608Parser2) {\n      this.cea608Parser1.reset();\n      this.cea608Parser2.reset();\n    }\n  }\n  _cleanTracks() {\n    // clear outdated subtitles\n    const {\n      media\n    } = this;\n    if (!media) {\n      return;\n    }\n    const textTracks = media.textTracks;\n    if (textTracks) {\n      for (let i = 0; i < textTracks.length; i++) {\n        clearCurrentCues(textTracks[i]);\n      }\n    }\n  }\n  onSubtitleTracksUpdated(event, data) {\n    const tracks = data.subtitleTracks || [];\n    const hasIMSC1 = tracks.some(track => track.textCodec === IMSC1_CODEC);\n    if (this.config.enableWebVTT || hasIMSC1 && this.config.enableIMSC1) {\n      const listIsIdentical = subtitleOptionsIdentical(this.tracks, tracks);\n      if (listIsIdentical) {\n        this.tracks = tracks;\n        return;\n      }\n      this.textTracks = [];\n      this.tracks = tracks;\n      if (this.config.renderTextTracksNatively) {\n        const media = this.media;\n        const inUseTracks = media ? filterSubtitleTracks(media.textTracks) : null;\n        this.tracks.forEach((track, index) => {\n          // Reuse tracks with the same label and lang, but do not reuse 608/708 tracks\n          let textTrack;\n          if (inUseTracks) {\n            let inUseTrack = null;\n            for (let i = 0; i < inUseTracks.length; i++) {\n              if (inUseTracks[i] && canReuseVttTextTrack(inUseTracks[i], track)) {\n                inUseTrack = inUseTracks[i];\n                inUseTracks[i] = null;\n                break;\n              }\n            }\n            if (inUseTrack) {\n              textTrack = inUseTrack;\n            }\n          }\n          if (textTrack) {\n            clearCurrentCues(textTrack);\n          } else {\n            const textTrackKind = captionsOrSubtitlesFromCharacteristics(track);\n            textTrack = this.createTextTrack(textTrackKind, track.name, track.lang);\n            if (textTrack) {\n              textTrack.mode = 'disabled';\n            }\n          }\n          if (textTrack) {\n            this.textTracks.push(textTrack);\n          }\n        });\n        // Warn when video element has captions or subtitle TextTracks carried over from another source\n        if (inUseTracks != null && inUseTracks.length) {\n          const unusedTextTracks = inUseTracks.filter(t => t !== null).map(t => t.label);\n          if (unusedTextTracks.length) {\n            logger.warn(`Media element contains unused subtitle tracks: ${unusedTextTracks.join(', ')}. Replace media element for each source to clear TextTracks and captions menu.`);\n          }\n        }\n      } else if (this.tracks.length) {\n        // Create a list of tracks for the provider to consume\n        const tracksList = this.tracks.map(track => {\n          return {\n            label: track.name,\n            kind: track.type.toLowerCase(),\n            default: track.default,\n            subtitleTrack: track\n          };\n        });\n        this.hls.trigger(Events.NON_NATIVE_TEXT_TRACKS_FOUND, {\n          tracks: tracksList\n        });\n      }\n    }\n  }\n  onManifestLoaded(event, data) {\n    if (this.config.enableCEA708Captions && data.captions) {\n      data.captions.forEach(captionsTrack => {\n        const instreamIdMatch = /(?:CC|SERVICE)([1-4])/.exec(captionsTrack.instreamId);\n        if (!instreamIdMatch) {\n          return;\n        }\n        const trackName = `textTrack${instreamIdMatch[1]}`;\n        const trackProperties = this.captionsProperties[trackName];\n        if (!trackProperties) {\n          return;\n        }\n        trackProperties.label = captionsTrack.name;\n        if (captionsTrack.lang) {\n          // optional attribute\n          trackProperties.languageCode = captionsTrack.lang;\n        }\n        trackProperties.media = captionsTrack;\n      });\n    }\n  }\n  closedCaptionsForLevel(frag) {\n    const level = this.hls.levels[frag.level];\n    return level == null ? void 0 : level.attrs['CLOSED-CAPTIONS'];\n  }\n  onFragLoading(event, data) {\n    // if this frag isn't contiguous, clear the parser so cues with bad start/end times aren't added to the textTrack\n    if (this.enabled && data.frag.type === PlaylistLevelType.MAIN) {\n      var _data$part$index, _data$part;\n      const {\n        cea608Parser1,\n        cea608Parser2,\n        lastSn\n      } = this;\n      const {\n        cc,\n        sn\n      } = data.frag;\n      const partIndex = (_data$part$index = (_data$part = data.part) == null ? void 0 : _data$part.index) != null ? _data$part$index : -1;\n      if (cea608Parser1 && cea608Parser2) {\n        if (sn !== lastSn + 1 || sn === lastSn && partIndex !== this.lastPartIndex + 1 || cc !== this.lastCc) {\n          cea608Parser1.reset();\n          cea608Parser2.reset();\n        }\n      }\n      this.lastCc = cc;\n      this.lastSn = sn;\n      this.lastPartIndex = partIndex;\n    }\n  }\n  onFragLoaded(event, data) {\n    const {\n      frag,\n      payload\n    } = data;\n    if (frag.type === PlaylistLevelType.SUBTITLE) {\n      // If fragment is subtitle type, parse as WebVTT.\n      if (payload.byteLength) {\n        const decryptData = frag.decryptdata;\n        // fragment after decryption has a stats object\n        const decrypted = ('stats' in data);\n        // If the subtitles are not encrypted, parse VTTs now. Otherwise, we need to wait.\n        if (decryptData == null || !decryptData.encrypted || decrypted) {\n          const trackPlaylistMedia = this.tracks[frag.level];\n          const vttCCs = this.vttCCs;\n          if (!vttCCs[frag.cc]) {\n            vttCCs[frag.cc] = {\n              start: frag.start,\n              prevCC: this.prevCC,\n              new: true\n            };\n            this.prevCC = frag.cc;\n          }\n          if (trackPlaylistMedia && trackPlaylistMedia.textCodec === IMSC1_CODEC) {\n            this._parseIMSC1(frag, payload);\n          } else {\n            this._parseVTTs(data);\n          }\n        }\n      } else {\n        // In case there is no payload, finish unsuccessfully.\n        this.hls.trigger(Events.SUBTITLE_FRAG_PROCESSED, {\n          success: false,\n          frag,\n          error: new Error('Empty subtitle payload')\n        });\n      }\n    }\n  }\n  _parseIMSC1(frag, payload) {\n    const hls = this.hls;\n    parseIMSC1(payload, this.initPTS[frag.cc], cues => {\n      this._appendCues(cues, frag.level);\n      hls.trigger(Events.SUBTITLE_FRAG_PROCESSED, {\n        success: true,\n        frag: frag\n      });\n    }, error => {\n      logger.log(`Failed to parse IMSC1: ${error}`);\n      hls.trigger(Events.SUBTITLE_FRAG_PROCESSED, {\n        success: false,\n        frag: frag,\n        error\n      });\n    });\n  }\n  _parseVTTs(data) {\n    var _frag$initSegment;\n    const {\n      frag,\n      payload\n    } = data;\n    // We need an initial synchronisation PTS. Store fragments as long as none has arrived\n    const {\n      initPTS,\n      unparsedVttFrags\n    } = this;\n    const maxAvCC = initPTS.length - 1;\n    if (!initPTS[frag.cc] && maxAvCC === -1) {\n      unparsedVttFrags.push(data);\n      return;\n    }\n    const hls = this.hls;\n    // Parse the WebVTT file contents.\n    const payloadWebVTT = (_frag$initSegment = frag.initSegment) != null && _frag$initSegment.data ? appendUint8Array(frag.initSegment.data, new Uint8Array(payload)) : payload;\n    parseWebVTT(payloadWebVTT, this.initPTS[frag.cc], this.vttCCs, frag.cc, frag.start, cues => {\n      this._appendCues(cues, frag.level);\n      hls.trigger(Events.SUBTITLE_FRAG_PROCESSED, {\n        success: true,\n        frag: frag\n      });\n    }, error => {\n      const missingInitPTS = error.message === 'Missing initPTS for VTT MPEGTS';\n      if (missingInitPTS) {\n        unparsedVttFrags.push(data);\n      } else {\n        this._fallbackToIMSC1(frag, payload);\n      }\n      // Something went wrong while parsing. Trigger event with success false.\n      logger.log(`Failed to parse VTT cue: ${error}`);\n      if (missingInitPTS && maxAvCC > frag.cc) {\n        return;\n      }\n      hls.trigger(Events.SUBTITLE_FRAG_PROCESSED, {\n        success: false,\n        frag: frag,\n        error\n      });\n    });\n  }\n  _fallbackToIMSC1(frag, payload) {\n    // If textCodec is unknown, try parsing as IMSC1. Set textCodec based on the result\n    const trackPlaylistMedia = this.tracks[frag.level];\n    if (!trackPlaylistMedia.textCodec) {\n      parseIMSC1(payload, this.initPTS[frag.cc], () => {\n        trackPlaylistMedia.textCodec = IMSC1_CODEC;\n        this._parseIMSC1(frag, payload);\n      }, () => {\n        trackPlaylistMedia.textCodec = 'wvtt';\n      });\n    }\n  }\n  _appendCues(cues, fragLevel) {\n    const hls = this.hls;\n    if (this.config.renderTextTracksNatively) {\n      const textTrack = this.textTracks[fragLevel];\n      // WebVTTParser.parse is an async method and if the currently selected text track mode is set to \"disabled\"\n      // before parsing is done then don't try to access currentTrack.cues.getCueById as cues will be null\n      // and trying to access getCueById method of cues will throw an exception\n      // Because we check if the mode is disabled, we can force check `cues` below. They can't be null.\n      if (!textTrack || textTrack.mode === 'disabled') {\n        return;\n      }\n      cues.forEach(cue => addCueToTrack(textTrack, cue));\n    } else {\n      const currentTrack = this.tracks[fragLevel];\n      if (!currentTrack) {\n        return;\n      }\n      const track = currentTrack.default ? 'default' : 'subtitles' + fragLevel;\n      hls.trigger(Events.CUES_PARSED, {\n        type: 'subtitles',\n        cues,\n        track\n      });\n    }\n  }\n  onFragDecrypted(event, data) {\n    const {\n      frag\n    } = data;\n    if (frag.type === PlaylistLevelType.SUBTITLE) {\n      this.onFragLoaded(Events.FRAG_LOADED, data);\n    }\n  }\n  onSubtitleTracksCleared() {\n    this.tracks = [];\n    this.captionsTracks = {};\n  }\n  onFragParsingUserdata(event, data) {\n    this.initCea608Parsers();\n    const {\n      cea608Parser1,\n      cea608Parser2\n    } = this;\n    if (!this.enabled || !cea608Parser1 || !cea608Parser2) {\n      return;\n    }\n    const {\n      frag,\n      samples\n    } = data;\n    if (frag.type === PlaylistLevelType.MAIN && this.closedCaptionsForLevel(frag) === 'NONE') {\n      return;\n    }\n    // If the event contains captions (found in the bytes property), push all bytes into the parser immediately\n    // It will create the proper timestamps based on the PTS value\n    for (let i = 0; i < samples.length; i++) {\n      const ccBytes = samples[i].bytes;\n      if (ccBytes) {\n        const ccdatas = this.extractCea608Data(ccBytes);\n        cea608Parser1.addData(samples[i].pts, ccdatas[0]);\n        cea608Parser2.addData(samples[i].pts, ccdatas[1]);\n      }\n    }\n  }\n  onBufferFlushing(event, {\n    startOffset,\n    endOffset,\n    endOffsetSubtitles,\n    type\n  }) {\n    const {\n      media\n    } = this;\n    if (!media || media.currentTime < endOffset) {\n      return;\n    }\n    // Clear 608 caption cues from the captions TextTracks when the video back buffer is flushed\n    // Forward cues are never removed because we can loose streamed 608 content from recent fragments\n    if (!type || type === 'video') {\n      const {\n        captionsTracks\n      } = this;\n      Object.keys(captionsTracks).forEach(trackName => removeCuesInRange(captionsTracks[trackName], startOffset, endOffset));\n    }\n    if (this.config.renderTextTracksNatively) {\n      // Clear VTT/IMSC1 subtitle cues from the subtitle TextTracks when the back buffer is flushed\n      if (startOffset === 0 && endOffsetSubtitles !== undefined) {\n        const {\n          textTracks\n        } = this;\n        Object.keys(textTracks).forEach(trackName => removeCuesInRange(textTracks[trackName], startOffset, endOffsetSubtitles));\n      }\n    }\n  }\n  extractCea608Data(byteArray) {\n    const actualCCBytes = [[], []];\n    const count = byteArray[0] & 0x1f;\n    let position = 2;\n    for (let j = 0; j < count; j++) {\n      const tmpByte = byteArray[position++];\n      const ccbyte1 = 0x7f & byteArray[position++];\n      const ccbyte2 = 0x7f & byteArray[position++];\n      if (ccbyte1 === 0 && ccbyte2 === 0) {\n        continue;\n      }\n      const ccValid = (0x04 & tmpByte) !== 0; // Support all four channels\n      if (ccValid) {\n        const ccType = 0x03 & tmpByte;\n        if (0x00 /* CEA608 field1*/ === ccType || 0x01 /* CEA608 field2*/ === ccType) {\n          // Exclude CEA708 CC data.\n          actualCCBytes[ccType].push(ccbyte1);\n          actualCCBytes[ccType].push(ccbyte2);\n        }\n      }\n    }\n    return actualCCBytes;\n  }\n}\nfunction captionsOrSubtitlesFromCharacteristics(track) {\n  if (track.characteristics) {\n    if (/transcribes-spoken-dialog/gi.test(track.characteristics) && /describes-music-and-sound/gi.test(track.characteristics)) {\n      return 'captions';\n    }\n  }\n  return 'subtitles';\n}\nfunction canReuseVttTextTrack(inUseTrack, manifestTrack) {\n  return !!inUseTrack && inUseTrack.kind === captionsOrSubtitlesFromCharacteristics(manifestTrack) && subtitleTrackMatchesTextTrack(manifestTrack, inUseTrack);\n}\nfunction intersection(x1, x2, y1, y2) {\n  return Math.min(x2, y2) - Math.max(x1, y1);\n}\nfunction newVTTCCs() {\n  return {\n    ccOffset: 0,\n    presentationOffset: 0,\n    0: {\n      start: 0,\n      prevCC: -1,\n      new: true\n    }\n  };\n}\n\nclass CapLevelController {\n  constructor(hls) {\n    this.hls = void 0;\n    this.autoLevelCapping = void 0;\n    this.firstLevel = void 0;\n    this.media = void 0;\n    this.restrictedLevels = void 0;\n    this.timer = void 0;\n    this.clientRect = void 0;\n    this.streamController = void 0;\n    this.hls = hls;\n    this.autoLevelCapping = Number.POSITIVE_INFINITY;\n    this.firstLevel = -1;\n    this.media = null;\n    this.restrictedLevels = [];\n    this.timer = undefined;\n    this.clientRect = null;\n    this.registerListeners();\n  }\n  setStreamController(streamController) {\n    this.streamController = streamController;\n  }\n  destroy() {\n    if (this.hls) {\n      this.unregisterListener();\n    }\n    if (this.timer) {\n      this.stopCapping();\n    }\n    this.media = null;\n    this.clientRect = null;\n    // @ts-ignore\n    this.hls = this.streamController = null;\n  }\n  registerListeners() {\n    const {\n      hls\n    } = this;\n    hls.on(Events.FPS_DROP_LEVEL_CAPPING, this.onFpsDropLevelCapping, this);\n    hls.on(Events.MEDIA_ATTACHING, this.onMediaAttaching, this);\n    hls.on(Events.MANIFEST_PARSED, this.onManifestParsed, this);\n    hls.on(Events.LEVELS_UPDATED, this.onLevelsUpdated, this);\n    hls.on(Events.BUFFER_CODECS, this.onBufferCodecs, this);\n    hls.on(Events.MEDIA_DETACHING, this.onMediaDetaching, this);\n  }\n  unregisterListener() {\n    const {\n      hls\n    } = this;\n    hls.off(Events.FPS_DROP_LEVEL_CAPPING, this.onFpsDropLevelCapping, this);\n    hls.off(Events.MEDIA_ATTACHING, this.onMediaAttaching, this);\n    hls.off(Events.MANIFEST_PARSED, this.onManifestParsed, this);\n    hls.off(Events.LEVELS_UPDATED, this.onLevelsUpdated, this);\n    hls.off(Events.BUFFER_CODECS, this.onBufferCodecs, this);\n    hls.off(Events.MEDIA_DETACHING, this.onMediaDetaching, this);\n  }\n  onFpsDropLevelCapping(event, data) {\n    // Don't add a restricted level more than once\n    const level = this.hls.levels[data.droppedLevel];\n    if (this.isLevelAllowed(level)) {\n      this.restrictedLevels.push({\n        bitrate: level.bitrate,\n        height: level.height,\n        width: level.width\n      });\n    }\n  }\n  onMediaAttaching(event, data) {\n    this.media = data.media instanceof HTMLVideoElement ? data.media : null;\n    this.clientRect = null;\n    if (this.timer && this.hls.levels.length) {\n      this.detectPlayerSize();\n    }\n  }\n  onManifestParsed(event, data) {\n    const hls = this.hls;\n    this.restrictedLevels = [];\n    this.firstLevel = data.firstLevel;\n    if (hls.config.capLevelToPlayerSize && data.video) {\n      // Start capping immediately if the manifest has signaled video codecs\n      this.startCapping();\n    }\n  }\n  onLevelsUpdated(event, data) {\n    if (this.timer && isFiniteNumber(this.autoLevelCapping)) {\n      this.detectPlayerSize();\n    }\n  }\n\n  // Only activate capping when playing a video stream; otherwise, multi-bitrate audio-only streams will be restricted\n  // to the first level\n  onBufferCodecs(event, data) {\n    const hls = this.hls;\n    if (hls.config.capLevelToPlayerSize && data.video) {\n      // If the manifest did not signal a video codec capping has been deferred until we're certain video is present\n      this.startCapping();\n    }\n  }\n  onMediaDetaching() {\n    this.stopCapping();\n  }\n  detectPlayerSize() {\n    if (this.media) {\n      if (this.mediaHeight <= 0 || this.mediaWidth <= 0) {\n        this.clientRect = null;\n        return;\n      }\n      const levels = this.hls.levels;\n      if (levels.length) {\n        const hls = this.hls;\n        const maxLevel = this.getMaxLevel(levels.length - 1);\n        if (maxLevel !== this.autoLevelCapping) {\n          logger.log(`Setting autoLevelCapping to ${maxLevel}: ${levels[maxLevel].height}p@${levels[maxLevel].bitrate} for media ${this.mediaWidth}x${this.mediaHeight}`);\n        }\n        hls.autoLevelCapping = maxLevel;\n        if (hls.autoLevelCapping > this.autoLevelCapping && this.streamController) {\n          // if auto level capping has a higher value for the previous one, flush the buffer using nextLevelSwitch\n          // usually happen when the user go to the fullscreen mode.\n          this.streamController.nextLevelSwitch();\n        }\n        this.autoLevelCapping = hls.autoLevelCapping;\n      }\n    }\n  }\n\n  /*\n   * returns level should be the one with the dimensions equal or greater than the media (player) dimensions (so the video will be downscaled)\n   */\n  getMaxLevel(capLevelIndex) {\n    const levels = this.hls.levels;\n    if (!levels.length) {\n      return -1;\n    }\n    const validLevels = levels.filter((level, index) => this.isLevelAllowed(level) && index <= capLevelIndex);\n    this.clientRect = null;\n    return CapLevelController.getMaxLevelByMediaSize(validLevels, this.mediaWidth, this.mediaHeight);\n  }\n  startCapping() {\n    if (this.timer) {\n      // Don't reset capping if started twice; this can happen if the manifest signals a video codec\n      return;\n    }\n    this.autoLevelCapping = Number.POSITIVE_INFINITY;\n    self.clearInterval(this.timer);\n    this.timer = self.setInterval(this.detectPlayerSize.bind(this), 1000);\n    this.detectPlayerSize();\n  }\n  stopCapping() {\n    this.restrictedLevels = [];\n    this.firstLevel = -1;\n    this.autoLevelCapping = Number.POSITIVE_INFINITY;\n    if (this.timer) {\n      self.clearInterval(this.timer);\n      this.timer = undefined;\n    }\n  }\n  getDimensions() {\n    if (this.clientRect) {\n      return this.clientRect;\n    }\n    const media = this.media;\n    const boundsRect = {\n      width: 0,\n      height: 0\n    };\n    if (media) {\n      const clientRect = media.getBoundingClientRect();\n      boundsRect.width = clientRect.width;\n      boundsRect.height = clientRect.height;\n      if (!boundsRect.width && !boundsRect.height) {\n        // When the media element has no width or height (equivalent to not being in the DOM),\n        // then use its width and height attributes (media.width, media.height)\n        boundsRect.width = clientRect.right - clientRect.left || media.width || 0;\n        boundsRect.height = clientRect.bottom - clientRect.top || media.height || 0;\n      }\n    }\n    this.clientRect = boundsRect;\n    return boundsRect;\n  }\n  get mediaWidth() {\n    return this.getDimensions().width * this.contentScaleFactor;\n  }\n  get mediaHeight() {\n    return this.getDimensions().height * this.contentScaleFactor;\n  }\n  get contentScaleFactor() {\n    let pixelRatio = 1;\n    if (!this.hls.config.ignoreDevicePixelRatio) {\n      try {\n        pixelRatio = self.devicePixelRatio;\n      } catch (e) {\n        /* no-op */\n      }\n    }\n    return pixelRatio;\n  }\n  isLevelAllowed(level) {\n    const restrictedLevels = this.restrictedLevels;\n    return !restrictedLevels.some(restrictedLevel => {\n      return level.bitrate === restrictedLevel.bitrate && level.width === restrictedLevel.width && level.height === restrictedLevel.height;\n    });\n  }\n  static getMaxLevelByMediaSize(levels, width, height) {\n    if (!(levels != null && levels.length)) {\n      return -1;\n    }\n\n    // Levels can have the same dimensions but differing bandwidths - since levels are ordered, we can look to the next\n    // to determine whether we've chosen the greatest bandwidth for the media's dimensions\n    const atGreatestBandwidth = (curLevel, nextLevel) => {\n      if (!nextLevel) {\n        return true;\n      }\n      return curLevel.width !== nextLevel.width || curLevel.height !== nextLevel.height;\n    };\n\n    // If we run through the loop without breaking, the media's dimensions are greater than every level, so default to\n    // the max level\n    let maxLevelIndex = levels.length - 1;\n    // Prevent changes in aspect-ratio from causing capping to toggle back and forth\n    const squareSize = Math.max(width, height);\n    for (let i = 0; i < levels.length; i += 1) {\n      const level = levels[i];\n      if ((level.width >= squareSize || level.height >= squareSize) && atGreatestBandwidth(level, levels[i + 1])) {\n        maxLevelIndex = i;\n        break;\n      }\n    }\n    return maxLevelIndex;\n  }\n}\n\nclass FPSController {\n  constructor(hls) {\n    this.hls = void 0;\n    this.isVideoPlaybackQualityAvailable = false;\n    this.timer = void 0;\n    this.media = null;\n    this.lastTime = void 0;\n    this.lastDroppedFrames = 0;\n    this.lastDecodedFrames = 0;\n    // stream controller must be provided as a dependency!\n    this.streamController = void 0;\n    this.hls = hls;\n    this.registerListeners();\n  }\n  setStreamController(streamController) {\n    this.streamController = streamController;\n  }\n  registerListeners() {\n    this.hls.on(Events.MEDIA_ATTACHING, this.onMediaAttaching, this);\n  }\n  unregisterListeners() {\n    this.hls.off(Events.MEDIA_ATTACHING, this.onMediaAttaching, this);\n  }\n  destroy() {\n    if (this.timer) {\n      clearInterval(this.timer);\n    }\n    this.unregisterListeners();\n    this.isVideoPlaybackQualityAvailable = false;\n    this.media = null;\n  }\n  onMediaAttaching(event, data) {\n    const config = this.hls.config;\n    if (config.capLevelOnFPSDrop) {\n      const media = data.media instanceof self.HTMLVideoElement ? data.media : null;\n      this.media = media;\n      if (media && typeof media.getVideoPlaybackQuality === 'function') {\n        this.isVideoPlaybackQualityAvailable = true;\n      }\n      self.clearInterval(this.timer);\n      this.timer = self.setInterval(this.checkFPSInterval.bind(this), config.fpsDroppedMonitoringPeriod);\n    }\n  }\n  checkFPS(video, decodedFrames, droppedFrames) {\n    const currentTime = performance.now();\n    if (decodedFrames) {\n      if (this.lastTime) {\n        const currentPeriod = currentTime - this.lastTime;\n        const currentDropped = droppedFrames - this.lastDroppedFrames;\n        const currentDecoded = decodedFrames - this.lastDecodedFrames;\n        const droppedFPS = 1000 * currentDropped / currentPeriod;\n        const hls = this.hls;\n        hls.trigger(Events.FPS_DROP, {\n          currentDropped: currentDropped,\n          currentDecoded: currentDecoded,\n          totalDroppedFrames: droppedFrames\n        });\n        if (droppedFPS > 0) {\n          // logger.log('checkFPS : droppedFPS/decodedFPS:' + droppedFPS/(1000 * currentDecoded / currentPeriod));\n          if (currentDropped > hls.config.fpsDroppedMonitoringThreshold * currentDecoded) {\n            let currentLevel = hls.currentLevel;\n            logger.warn('drop FPS ratio greater than max allowed value for currentLevel: ' + currentLevel);\n            if (currentLevel > 0 && (hls.autoLevelCapping === -1 || hls.autoLevelCapping >= currentLevel)) {\n              currentLevel = currentLevel - 1;\n              hls.trigger(Events.FPS_DROP_LEVEL_CAPPING, {\n                level: currentLevel,\n                droppedLevel: hls.currentLevel\n              });\n              hls.autoLevelCapping = currentLevel;\n              this.streamController.nextLevelSwitch();\n            }\n          }\n        }\n      }\n      this.lastTime = currentTime;\n      this.lastDroppedFrames = droppedFrames;\n      this.lastDecodedFrames = decodedFrames;\n    }\n  }\n  checkFPSInterval() {\n    const video = this.media;\n    if (video) {\n      if (this.isVideoPlaybackQualityAvailable) {\n        const videoPlaybackQuality = video.getVideoPlaybackQuality();\n        this.checkFPS(video, videoPlaybackQuality.totalVideoFrames, videoPlaybackQuality.droppedVideoFrames);\n      } else {\n        // HTMLVideoElement doesn't include the webkit types\n        this.checkFPS(video, video.webkitDecodedFrameCount, video.webkitDroppedFrameCount);\n      }\n    }\n  }\n}\n\nconst LOGGER_PREFIX = '[eme]';\n/**\n * Controller to deal with encrypted media extensions (EME)\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Encrypted_Media_Extensions_API\n *\n * @class\n * @constructor\n */\nclass EMEController {\n  constructor(hls) {\n    this.hls = void 0;\n    this.config = void 0;\n    this.media = null;\n    this.keyFormatPromise = null;\n    this.keySystemAccessPromises = {};\n    this._requestLicenseFailureCount = 0;\n    this.mediaKeySessions = [];\n    this.keyIdToKeySessionPromise = {};\n    this.setMediaKeysQueue = EMEController.CDMCleanupPromise ? [EMEController.CDMCleanupPromise] : [];\n    this.onMediaEncrypted = this._onMediaEncrypted.bind(this);\n    this.onWaitingForKey = this._onWaitingForKey.bind(this);\n    this.debug = logger.debug.bind(logger, LOGGER_PREFIX);\n    this.log = logger.log.bind(logger, LOGGER_PREFIX);\n    this.warn = logger.warn.bind(logger, LOGGER_PREFIX);\n    this.error = logger.error.bind(logger, LOGGER_PREFIX);\n    this.hls = hls;\n    this.config = hls.config;\n    this.registerListeners();\n  }\n  destroy() {\n    this.unregisterListeners();\n    this.onMediaDetached();\n    // Remove any references that could be held in config options or callbacks\n    const config = this.config;\n    config.requestMediaKeySystemAccessFunc = null;\n    config.licenseXhrSetup = config.licenseResponseCallback = undefined;\n    config.drmSystems = config.drmSystemOptions = {};\n    // @ts-ignore\n    this.hls = this.onMediaEncrypted = this.onWaitingForKey = this.keyIdToKeySessionPromise = null;\n    // @ts-ignore\n    this.config = null;\n  }\n  registerListeners() {\n    this.hls.on(Events.MEDIA_ATTACHED, this.onMediaAttached, this);\n    this.hls.on(Events.MEDIA_DETACHED, this.onMediaDetached, this);\n    this.hls.on(Events.MANIFEST_LOADING, this.onManifestLoading, this);\n    this.hls.on(Events.MANIFEST_LOADED, this.onManifestLoaded, this);\n  }\n  unregisterListeners() {\n    this.hls.off(Events.MEDIA_ATTACHED, this.onMediaAttached, this);\n    this.hls.off(Events.MEDIA_DETACHED, this.onMediaDetached, this);\n    this.hls.off(Events.MANIFEST_LOADING, this.onManifestLoading, this);\n    this.hls.off(Events.MANIFEST_LOADED, this.onManifestLoaded, this);\n  }\n  getLicenseServerUrl(keySystem) {\n    const {\n      drmSystems,\n      widevineLicenseUrl\n    } = this.config;\n    const keySystemConfiguration = drmSystems[keySystem];\n    if (keySystemConfiguration) {\n      return keySystemConfiguration.licenseUrl;\n    }\n\n    // For backward compatibility\n    if (keySystem === KeySystems.WIDEVINE && widevineLicenseUrl) {\n      return widevineLicenseUrl;\n    }\n    throw new Error(`no license server URL configured for key-system \"${keySystem}\"`);\n  }\n  getServerCertificateUrl(keySystem) {\n    const {\n      drmSystems\n    } = this.config;\n    const keySystemConfiguration = drmSystems[keySystem];\n    if (keySystemConfiguration) {\n      return keySystemConfiguration.serverCertificateUrl;\n    } else {\n      this.log(`No Server Certificate in config.drmSystems[\"${keySystem}\"]`);\n    }\n  }\n  attemptKeySystemAccess(keySystemsToAttempt) {\n    const levels = this.hls.levels;\n    const uniqueCodec = (value, i, a) => !!value && a.indexOf(value) === i;\n    const audioCodecs = levels.map(level => level.audioCodec).filter(uniqueCodec);\n    const videoCodecs = levels.map(level => level.videoCodec).filter(uniqueCodec);\n    if (audioCodecs.length + videoCodecs.length === 0) {\n      videoCodecs.push('avc1.42e01e');\n    }\n    return new Promise((resolve, reject) => {\n      const attempt = keySystems => {\n        const keySystem = keySystems.shift();\n        this.getMediaKeysPromise(keySystem, audioCodecs, videoCodecs).then(mediaKeys => resolve({\n          keySystem,\n          mediaKeys\n        })).catch(error => {\n          if (keySystems.length) {\n            attempt(keySystems);\n          } else if (error instanceof EMEKeyError) {\n            reject(error);\n          } else {\n            reject(new EMEKeyError({\n              type: ErrorTypes.KEY_SYSTEM_ERROR,\n              details: ErrorDetails.KEY_SYSTEM_NO_ACCESS,\n              error,\n              fatal: true\n            }, error.message));\n          }\n        });\n      };\n      attempt(keySystemsToAttempt);\n    });\n  }\n  requestMediaKeySystemAccess(keySystem, supportedConfigurations) {\n    const {\n      requestMediaKeySystemAccessFunc\n    } = this.config;\n    if (!(typeof requestMediaKeySystemAccessFunc === 'function')) {\n      let errMessage = `Configured requestMediaKeySystemAccess is not a function ${requestMediaKeySystemAccessFunc}`;\n      if (requestMediaKeySystemAccess === null && self.location.protocol === 'http:') {\n        errMessage = `navigator.requestMediaKeySystemAccess is not available over insecure protocol ${location.protocol}`;\n      }\n      return Promise.reject(new Error(errMessage));\n    }\n    return requestMediaKeySystemAccessFunc(keySystem, supportedConfigurations);\n  }\n  getMediaKeysPromise(keySystem, audioCodecs, videoCodecs) {\n    // This can throw, but is caught in event handler callpath\n    const mediaKeySystemConfigs = getSupportedMediaKeySystemConfigurations(keySystem, audioCodecs, videoCodecs, this.config.drmSystemOptions);\n    const keySystemAccessPromises = this.keySystemAccessPromises[keySystem];\n    let keySystemAccess = keySystemAccessPromises == null ? void 0 : keySystemAccessPromises.keySystemAccess;\n    if (!keySystemAccess) {\n      this.log(`Requesting encrypted media \"${keySystem}\" key-system access with config: ${JSON.stringify(mediaKeySystemConfigs)}`);\n      keySystemAccess = this.requestMediaKeySystemAccess(keySystem, mediaKeySystemConfigs);\n      const _keySystemAccessPromises = this.keySystemAccessPromises[keySystem] = {\n        keySystemAccess\n      };\n      keySystemAccess.catch(error => {\n        this.log(`Failed to obtain access to key-system \"${keySystem}\": ${error}`);\n      });\n      return keySystemAccess.then(mediaKeySystemAccess => {\n        this.log(`Access for key-system \"${mediaKeySystemAccess.keySystem}\" obtained`);\n        const certificateRequest = this.fetchServerCertificate(keySystem);\n        this.log(`Create media-keys for \"${keySystem}\"`);\n        _keySystemAccessPromises.mediaKeys = mediaKeySystemAccess.createMediaKeys().then(mediaKeys => {\n          this.log(`Media-keys created for \"${keySystem}\"`);\n          return certificateRequest.then(certificate => {\n            if (certificate) {\n              return this.setMediaKeysServerCertificate(mediaKeys, keySystem, certificate);\n            }\n            return mediaKeys;\n          });\n        });\n        _keySystemAccessPromises.mediaKeys.catch(error => {\n          this.error(`Failed to create media-keys for \"${keySystem}\"}: ${error}`);\n        });\n        return _keySystemAccessPromises.mediaKeys;\n      });\n    }\n    return keySystemAccess.then(() => keySystemAccessPromises.mediaKeys);\n  }\n  createMediaKeySessionContext({\n    decryptdata,\n    keySystem,\n    mediaKeys\n  }) {\n    this.log(`Creating key-system session \"${keySystem}\" keyId: ${Hex.hexDump(decryptdata.keyId || [])}`);\n    const mediaKeysSession = mediaKeys.createSession();\n    const mediaKeySessionContext = {\n      decryptdata,\n      keySystem,\n      mediaKeys,\n      mediaKeysSession,\n      keyStatus: 'status-pending'\n    };\n    this.mediaKeySessions.push(mediaKeySessionContext);\n    return mediaKeySessionContext;\n  }\n  renewKeySession(mediaKeySessionContext) {\n    const decryptdata = mediaKeySessionContext.decryptdata;\n    if (decryptdata.pssh) {\n      const keySessionContext = this.createMediaKeySessionContext(mediaKeySessionContext);\n      const keyId = this.getKeyIdString(decryptdata);\n      const scheme = 'cenc';\n      this.keyIdToKeySessionPromise[keyId] = this.generateRequestWithPreferredKeySession(keySessionContext, scheme, decryptdata.pssh, 'expired');\n    } else {\n      this.warn(`Could not renew expired session. Missing pssh initData.`);\n    }\n    this.removeSession(mediaKeySessionContext);\n  }\n  getKeyIdString(decryptdata) {\n    if (!decryptdata) {\n      throw new Error('Could not read keyId of undefined decryptdata');\n    }\n    if (decryptdata.keyId === null) {\n      throw new Error('keyId is null');\n    }\n    return Hex.hexDump(decryptdata.keyId);\n  }\n  updateKeySession(mediaKeySessionContext, data) {\n    var _mediaKeySessionConte;\n    const keySession = mediaKeySessionContext.mediaKeysSession;\n    this.log(`Updating key-session \"${keySession.sessionId}\" for keyID ${Hex.hexDump(((_mediaKeySessionConte = mediaKeySessionContext.decryptdata) == null ? void 0 : _mediaKeySessionConte.keyId) || [])}\n      } (data length: ${data ? data.byteLength : data})`);\n    return keySession.update(data);\n  }\n  selectKeySystemFormat(frag) {\n    const keyFormats = Object.keys(frag.levelkeys || {});\n    if (!this.keyFormatPromise) {\n      this.log(`Selecting key-system from fragment (sn: ${frag.sn} ${frag.type}: ${frag.level}) key formats ${keyFormats.join(', ')}`);\n      this.keyFormatPromise = this.getKeyFormatPromise(keyFormats);\n    }\n    return this.keyFormatPromise;\n  }\n  getKeyFormatPromise(keyFormats) {\n    return new Promise((resolve, reject) => {\n      const keySystemsInConfig = getKeySystemsForConfig(this.config);\n      const keySystemsToAttempt = keyFormats.map(keySystemFormatToKeySystemDomain).filter(value => !!value && keySystemsInConfig.indexOf(value) !== -1);\n      return this.getKeySystemSelectionPromise(keySystemsToAttempt).then(({\n        keySystem\n      }) => {\n        const keySystemFormat = keySystemDomainToKeySystemFormat(keySystem);\n        if (keySystemFormat) {\n          resolve(keySystemFormat);\n        } else {\n          reject(new Error(`Unable to find format for key-system \"${keySystem}\"`));\n        }\n      }).catch(reject);\n    });\n  }\n  loadKey(data) {\n    const decryptdata = data.keyInfo.decryptdata;\n    const keyId = this.getKeyIdString(decryptdata);\n    const keyDetails = `(keyId: ${keyId} format: \"${decryptdata.keyFormat}\" method: ${decryptdata.method} uri: ${decryptdata.uri})`;\n    this.log(`Starting session for key ${keyDetails}`);\n    let keySessionContextPromise = this.keyIdToKeySessionPromise[keyId];\n    if (!keySessionContextPromise) {\n      keySessionContextPromise = this.keyIdToKeySessionPromise[keyId] = this.getKeySystemForKeyPromise(decryptdata).then(({\n        keySystem,\n        mediaKeys\n      }) => {\n        this.throwIfDestroyed();\n        this.log(`Handle encrypted media sn: ${data.frag.sn} ${data.frag.type}: ${data.frag.level} using key ${keyDetails}`);\n        return this.attemptSetMediaKeys(keySystem, mediaKeys).then(() => {\n          this.throwIfDestroyed();\n          const keySessionContext = this.createMediaKeySessionContext({\n            keySystem,\n            mediaKeys,\n            decryptdata\n          });\n          const scheme = 'cenc';\n          return this.generateRequestWithPreferredKeySession(keySessionContext, scheme, decryptdata.pssh, 'playlist-key');\n        });\n      });\n      keySessionContextPromise.catch(error => this.handleError(error));\n    }\n    return keySessionContextPromise;\n  }\n  throwIfDestroyed(message = 'Invalid state') {\n    if (!this.hls) {\n      throw new Error('invalid state');\n    }\n  }\n  handleError(error) {\n    if (!this.hls) {\n      return;\n    }\n    this.error(error.message);\n    if (error instanceof EMEKeyError) {\n      this.hls.trigger(Events.ERROR, error.data);\n    } else {\n      this.hls.trigger(Events.ERROR, {\n        type: ErrorTypes.KEY_SYSTEM_ERROR,\n        details: ErrorDetails.KEY_SYSTEM_NO_KEYS,\n        error,\n        fatal: true\n      });\n    }\n  }\n  getKeySystemForKeyPromise(decryptdata) {\n    const keyId = this.getKeyIdString(decryptdata);\n    const mediaKeySessionContext = this.keyIdToKeySessionPromise[keyId];\n    if (!mediaKeySessionContext) {\n      const keySystem = keySystemFormatToKeySystemDomain(decryptdata.keyFormat);\n      const keySystemsToAttempt = keySystem ? [keySystem] : getKeySystemsForConfig(this.config);\n      return this.attemptKeySystemAccess(keySystemsToAttempt);\n    }\n    return mediaKeySessionContext;\n  }\n  getKeySystemSelectionPromise(keySystemsToAttempt) {\n    if (!keySystemsToAttempt.length) {\n      keySystemsToAttempt = getKeySystemsForConfig(this.config);\n    }\n    if (keySystemsToAttempt.length === 0) {\n      throw new EMEKeyError({\n        type: ErrorTypes.KEY_SYSTEM_ERROR,\n        details: ErrorDetails.KEY_SYSTEM_NO_CONFIGURED_LICENSE,\n        fatal: true\n      }, `Missing key-system license configuration options ${JSON.stringify({\n        drmSystems: this.config.drmSystems\n      })}`);\n    }\n    return this.attemptKeySystemAccess(keySystemsToAttempt);\n  }\n  _onMediaEncrypted(event) {\n    const {\n      initDataType,\n      initData\n    } = event;\n    const logMessage = `\"${event.type}\" event: init data type: \"${initDataType}\"`;\n    this.debug(logMessage);\n\n    // Ignore event when initData is null\n    if (initData === null) {\n      return;\n    }\n    let keyId;\n    let keySystemDomain;\n    if (initDataType === 'sinf' && this.config.drmSystems[KeySystems.FAIRPLAY]) {\n      // Match sinf keyId to playlist skd://keyId=\n      const json = bin2str(new Uint8Array(initData));\n      try {\n        const sinf = base64Decode(JSON.parse(json).sinf);\n        const tenc = parseSinf(new Uint8Array(sinf));\n        if (!tenc) {\n          throw new Error(`'schm' box missing or not cbcs/cenc with schi > tenc`);\n        }\n        keyId = tenc.subarray(8, 24);\n        keySystemDomain = KeySystems.FAIRPLAY;\n      } catch (error) {\n        this.warn(`${logMessage} Failed to parse sinf: ${error}`);\n        return;\n      }\n    } else {\n      // Support Widevine clear-lead key-session creation (otherwise depend on playlist keys)\n      const psshResults = parseMultiPssh(initData);\n      const psshInfo = psshResults.filter(pssh => pssh.systemId === KeySystemIds.WIDEVINE)[0];\n      if (!psshInfo) {\n        if (psshResults.length === 0 || psshResults.some(pssh => !pssh.systemId)) {\n          this.warn(`${logMessage} contains incomplete or invalid pssh data`);\n        } else {\n          this.log(`ignoring ${logMessage} for ${psshResults.map(pssh => keySystemIdToKeySystemDomain(pssh.systemId)).join(',')} pssh data in favor of playlist keys`);\n        }\n        return;\n      }\n      keySystemDomain = keySystemIdToKeySystemDomain(psshInfo.systemId);\n      if (psshInfo.version === 0 && psshInfo.data) {\n        const offset = psshInfo.data.length - 22;\n        keyId = psshInfo.data.subarray(offset, offset + 16);\n      }\n    }\n    if (!keySystemDomain || !keyId) {\n      return;\n    }\n    const keyIdHex = Hex.hexDump(keyId);\n    const {\n      keyIdToKeySessionPromise,\n      mediaKeySessions\n    } = this;\n    let keySessionContextPromise = keyIdToKeySessionPromise[keyIdHex];\n    for (let i = 0; i < mediaKeySessions.length; i++) {\n      // Match playlist key\n      const keyContext = mediaKeySessions[i];\n      const decryptdata = keyContext.decryptdata;\n      if (!decryptdata.keyId) {\n        continue;\n      }\n      const oldKeyIdHex = Hex.hexDump(decryptdata.keyId);\n      if (keyIdHex === oldKeyIdHex || decryptdata.uri.replace(/-/g, '').indexOf(keyIdHex) !== -1) {\n        keySessionContextPromise = keyIdToKeySessionPromise[oldKeyIdHex];\n        if (decryptdata.pssh) {\n          break;\n        }\n        delete keyIdToKeySessionPromise[oldKeyIdHex];\n        decryptdata.pssh = new Uint8Array(initData);\n        decryptdata.keyId = keyId;\n        keySessionContextPromise = keyIdToKeySessionPromise[keyIdHex] = keySessionContextPromise.then(() => {\n          return this.generateRequestWithPreferredKeySession(keyContext, initDataType, initData, 'encrypted-event-key-match');\n        });\n        break;\n      }\n    }\n    if (!keySessionContextPromise) {\n      // Clear-lead key (not encountered in playlist)\n      keySessionContextPromise = keyIdToKeySessionPromise[keyIdHex] = this.getKeySystemSelectionPromise([keySystemDomain]).then(({\n        keySystem,\n        mediaKeys\n      }) => {\n        var _keySystemToKeySystem;\n        this.throwIfDestroyed();\n        const decryptdata = new LevelKey('ISO-23001-7', keyIdHex, (_keySystemToKeySystem = keySystemDomainToKeySystemFormat(keySystem)) != null ? _keySystemToKeySystem : '');\n        decryptdata.pssh = new Uint8Array(initData);\n        decryptdata.keyId = keyId;\n        return this.attemptSetMediaKeys(keySystem, mediaKeys).then(() => {\n          this.throwIfDestroyed();\n          const keySessionContext = this.createMediaKeySessionContext({\n            decryptdata,\n            keySystem,\n            mediaKeys\n          });\n          return this.generateRequestWithPreferredKeySession(keySessionContext, initDataType, initData, 'encrypted-event-no-match');\n        });\n      });\n    }\n    keySessionContextPromise.catch(error => this.handleError(error));\n  }\n  _onWaitingForKey(event) {\n    this.log(`\"${event.type}\" event`);\n  }\n  attemptSetMediaKeys(keySystem, mediaKeys) {\n    const queue = this.setMediaKeysQueue.slice();\n    this.log(`Setting media-keys for \"${keySystem}\"`);\n    // Only one setMediaKeys() can run at one time, and multiple setMediaKeys() operations\n    // can be queued for execution for multiple key sessions.\n    const setMediaKeysPromise = Promise.all(queue).then(() => {\n      if (!this.media) {\n        throw new Error('Attempted to set mediaKeys without media element attached');\n      }\n      return this.media.setMediaKeys(mediaKeys);\n    });\n    this.setMediaKeysQueue.push(setMediaKeysPromise);\n    return setMediaKeysPromise.then(() => {\n      this.log(`Media-keys set for \"${keySystem}\"`);\n      queue.push(setMediaKeysPromise);\n      this.setMediaKeysQueue = this.setMediaKeysQueue.filter(p => queue.indexOf(p) === -1);\n    });\n  }\n  generateRequestWithPreferredKeySession(context, initDataType, initData, reason) {\n    var _this$config$drmSyste, _this$config$drmSyste2;\n    const generateRequestFilter = (_this$config$drmSyste = this.config.drmSystems) == null ? void 0 : (_this$config$drmSyste2 = _this$config$drmSyste[context.keySystem]) == null ? void 0 : _this$config$drmSyste2.generateRequest;\n    if (generateRequestFilter) {\n      try {\n        const mappedInitData = generateRequestFilter.call(this.hls, initDataType, initData, context);\n        if (!mappedInitData) {\n          throw new Error('Invalid response from configured generateRequest filter');\n        }\n        initDataType = mappedInitData.initDataType;\n        initData = context.decryptdata.pssh = mappedInitData.initData ? new Uint8Array(mappedInitData.initData) : null;\n      } catch (error) {\n        var _this$hls;\n        this.warn(error.message);\n        if ((_this$hls = this.hls) != null && _this$hls.config.debug) {\n          throw error;\n        }\n      }\n    }\n    if (initData === null) {\n      this.log(`Skipping key-session request for \"${reason}\" (no initData)`);\n      return Promise.resolve(context);\n    }\n    const keyId = this.getKeyIdString(context.decryptdata);\n    this.log(`Generating key-session request for \"${reason}\": ${keyId} (init data type: ${initDataType} length: ${initData ? initData.byteLength : null})`);\n    const licenseStatus = new EventEmitter();\n    const onmessage = context._onmessage = event => {\n      const keySession = context.mediaKeysSession;\n      if (!keySession) {\n        licenseStatus.emit('error', new Error('invalid state'));\n        return;\n      }\n      const {\n        messageType,\n        message\n      } = event;\n      this.log(`\"${messageType}\" message event for session \"${keySession.sessionId}\" message size: ${message.byteLength}`);\n      if (messageType === 'license-request' || messageType === 'license-renewal') {\n        this.renewLicense(context, message).catch(error => {\n          this.handleError(error);\n          licenseStatus.emit('error', error);\n        });\n      } else if (messageType === 'license-release') {\n        if (context.keySystem === KeySystems.FAIRPLAY) {\n          this.updateKeySession(context, strToUtf8array('acknowledged'));\n          this.removeSession(context);\n        }\n      } else {\n        this.warn(`unhandled media key message type \"${messageType}\"`);\n      }\n    };\n    const onkeystatuseschange = context._onkeystatuseschange = event => {\n      const keySession = context.mediaKeysSession;\n      if (!keySession) {\n        licenseStatus.emit('error', new Error('invalid state'));\n        return;\n      }\n      this.onKeyStatusChange(context);\n      const keyStatus = context.keyStatus;\n      licenseStatus.emit('keyStatus', keyStatus);\n      if (keyStatus === 'expired') {\n        this.warn(`${context.keySystem} expired for key ${keyId}`);\n        this.renewKeySession(context);\n      }\n    };\n    context.mediaKeysSession.addEventListener('message', onmessage);\n    context.mediaKeysSession.addEventListener('keystatuseschange', onkeystatuseschange);\n    const keyUsablePromise = new Promise((resolve, reject) => {\n      licenseStatus.on('error', reject);\n      licenseStatus.on('keyStatus', keyStatus => {\n        if (keyStatus.startsWith('usable')) {\n          resolve();\n        } else if (keyStatus === 'output-restricted') {\n          reject(new EMEKeyError({\n            type: ErrorTypes.KEY_SYSTEM_ERROR,\n            details: ErrorDetails.KEY_SYSTEM_STATUS_OUTPUT_RESTRICTED,\n            fatal: false\n          }, 'HDCP level output restricted'));\n        } else if (keyStatus === 'internal-error') {\n          reject(new EMEKeyError({\n            type: ErrorTypes.KEY_SYSTEM_ERROR,\n            details: ErrorDetails.KEY_SYSTEM_STATUS_INTERNAL_ERROR,\n            fatal: true\n          }, `key status changed to \"${keyStatus}\"`));\n        } else if (keyStatus === 'expired') {\n          reject(new Error('key expired while generating request'));\n        } else {\n          this.warn(`unhandled key status change \"${keyStatus}\"`);\n        }\n      });\n    });\n    return context.mediaKeysSession.generateRequest(initDataType, initData).then(() => {\n      var _context$mediaKeysSes;\n      this.log(`Request generated for key-session \"${(_context$mediaKeysSes = context.mediaKeysSession) == null ? void 0 : _context$mediaKeysSes.sessionId}\" keyId: ${keyId}`);\n    }).catch(error => {\n      throw new EMEKeyError({\n        type: ErrorTypes.KEY_SYSTEM_ERROR,\n        details: ErrorDetails.KEY_SYSTEM_NO_SESSION,\n        error,\n        fatal: false\n      }, `Error generating key-session request: ${error}`);\n    }).then(() => keyUsablePromise).catch(error => {\n      licenseStatus.removeAllListeners();\n      this.removeSession(context);\n      throw error;\n    }).then(() => {\n      licenseStatus.removeAllListeners();\n      return context;\n    });\n  }\n  onKeyStatusChange(mediaKeySessionContext) {\n    mediaKeySessionContext.mediaKeysSession.keyStatuses.forEach((status, keyId) => {\n      this.log(`key status change \"${status}\" for keyStatuses keyId: ${Hex.hexDump('buffer' in keyId ? new Uint8Array(keyId.buffer, keyId.byteOffset, keyId.byteLength) : new Uint8Array(keyId))} session keyId: ${Hex.hexDump(new Uint8Array(mediaKeySessionContext.decryptdata.keyId || []))} uri: ${mediaKeySessionContext.decryptdata.uri}`);\n      mediaKeySessionContext.keyStatus = status;\n    });\n  }\n  fetchServerCertificate(keySystem) {\n    const config = this.config;\n    const Loader = config.loader;\n    const certLoader = new Loader(config);\n    const url = this.getServerCertificateUrl(keySystem);\n    if (!url) {\n      return Promise.resolve();\n    }\n    this.log(`Fetching server certificate for \"${keySystem}\"`);\n    return new Promise((resolve, reject) => {\n      const loaderContext = {\n        responseType: 'arraybuffer',\n        url\n      };\n      const loadPolicy = config.certLoadPolicy.default;\n      const loaderConfig = {\n        loadPolicy,\n        timeout: loadPolicy.maxLoadTimeMs,\n        maxRetry: 0,\n        retryDelay: 0,\n        maxRetryDelay: 0\n      };\n      const loaderCallbacks = {\n        onSuccess: (response, stats, context, networkDetails) => {\n          resolve(response.data);\n        },\n        onError: (response, contex, networkDetails, stats) => {\n          reject(new EMEKeyError({\n            type: ErrorTypes.KEY_SYSTEM_ERROR,\n            details: ErrorDetails.KEY_SYSTEM_SERVER_CERTIFICATE_REQUEST_FAILED,\n            fatal: true,\n            networkDetails,\n            response: _objectSpread2({\n              url: loaderContext.url,\n              data: undefined\n            }, response)\n          }, `\"${keySystem}\" certificate request failed (${url}). Status: ${response.code} (${response.text})`));\n        },\n        onTimeout: (stats, context, networkDetails) => {\n          reject(new EMEKeyError({\n            type: ErrorTypes.KEY_SYSTEM_ERROR,\n            details: ErrorDetails.KEY_SYSTEM_SERVER_CERTIFICATE_REQUEST_FAILED,\n            fatal: true,\n            networkDetails,\n            response: {\n              url: loaderContext.url,\n              data: undefined\n            }\n          }, `\"${keySystem}\" certificate request timed out (${url})`));\n        },\n        onAbort: (stats, context, networkDetails) => {\n          reject(new Error('aborted'));\n        }\n      };\n      certLoader.load(loaderContext, loaderConfig, loaderCallbacks);\n    });\n  }\n  setMediaKeysServerCertificate(mediaKeys, keySystem, cert) {\n    return new Promise((resolve, reject) => {\n      mediaKeys.setServerCertificate(cert).then(success => {\n        this.log(`setServerCertificate ${success ? 'success' : 'not supported by CDM'} (${cert == null ? void 0 : cert.byteLength}) on \"${keySystem}\"`);\n        resolve(mediaKeys);\n      }).catch(error => {\n        reject(new EMEKeyError({\n          type: ErrorTypes.KEY_SYSTEM_ERROR,\n          details: ErrorDetails.KEY_SYSTEM_SERVER_CERTIFICATE_UPDATE_FAILED,\n          error,\n          fatal: true\n        }, error.message));\n      });\n    });\n  }\n  renewLicense(context, keyMessage) {\n    return this.requestLicense(context, new Uint8Array(keyMessage)).then(data => {\n      return this.updateKeySession(context, new Uint8Array(data)).catch(error => {\n        throw new EMEKeyError({\n          type: ErrorTypes.KEY_SYSTEM_ERROR,\n          details: ErrorDetails.KEY_SYSTEM_SESSION_UPDATE_FAILED,\n          error,\n          fatal: true\n        }, error.message);\n      });\n    });\n  }\n  unpackPlayReadyKeyMessage(xhr, licenseChallenge) {\n    // On Edge, the raw license message is UTF-16-encoded XML.  We need\n    // to unpack the Challenge element (base64-encoded string containing the\n    // actual license request) and any HttpHeader elements (sent as request\n    // headers).\n    // For PlayReady CDMs, we need to dig the Challenge out of the XML.\n    const xmlString = String.fromCharCode.apply(null, new Uint16Array(licenseChallenge.buffer));\n    if (!xmlString.includes('PlayReadyKeyMessage')) {\n      // This does not appear to be a wrapped message as on Edge.  Some\n      // clients do not need this unwrapping, so we will assume this is one of\n      // them.  Note that \"xml\" at this point probably looks like random\n      // garbage, since we interpreted UTF-8 as UTF-16.\n      xhr.setRequestHeader('Content-Type', 'text/xml; charset=utf-8');\n      return licenseChallenge;\n    }\n    const keyMessageXml = new DOMParser().parseFromString(xmlString, 'application/xml');\n    // Set request headers.\n    const headers = keyMessageXml.querySelectorAll('HttpHeader');\n    if (headers.length > 0) {\n      let header;\n      for (let i = 0, len = headers.length; i < len; i++) {\n        var _header$querySelector, _header$querySelector2;\n        header = headers[i];\n        const name = (_header$querySelector = header.querySelector('name')) == null ? void 0 : _header$querySelector.textContent;\n        const value = (_header$querySelector2 = header.querySelector('value')) == null ? void 0 : _header$querySelector2.textContent;\n        if (name && value) {\n          xhr.setRequestHeader(name, value);\n        }\n      }\n    }\n    const challengeElement = keyMessageXml.querySelector('Challenge');\n    const challengeText = challengeElement == null ? void 0 : challengeElement.textContent;\n    if (!challengeText) {\n      throw new Error(`Cannot find <Challenge> in key message`);\n    }\n    return strToUtf8array(atob(challengeText));\n  }\n  setupLicenseXHR(xhr, url, keysListItem, licenseChallenge) {\n    const licenseXhrSetup = this.config.licenseXhrSetup;\n    if (!licenseXhrSetup) {\n      xhr.open('POST', url, true);\n      return Promise.resolve({\n        xhr,\n        licenseChallenge\n      });\n    }\n    return Promise.resolve().then(() => {\n      if (!keysListItem.decryptdata) {\n        throw new Error('Key removed');\n      }\n      return licenseXhrSetup.call(this.hls, xhr, url, keysListItem, licenseChallenge);\n    }).catch(error => {\n      if (!keysListItem.decryptdata) {\n        // Key session removed. Cancel license request.\n        throw error;\n      }\n      // let's try to open before running setup\n      xhr.open('POST', url, true);\n      return licenseXhrSetup.call(this.hls, xhr, url, keysListItem, licenseChallenge);\n    }).then(licenseXhrSetupResult => {\n      // if licenseXhrSetup did not yet call open, let's do it now\n      if (!xhr.readyState) {\n        xhr.open('POST', url, true);\n      }\n      const finalLicenseChallenge = licenseXhrSetupResult ? licenseXhrSetupResult : licenseChallenge;\n      return {\n        xhr,\n        licenseChallenge: finalLicenseChallenge\n      };\n    });\n  }\n  requestLicense(keySessionContext, licenseChallenge) {\n    const keyLoadPolicy = this.config.keyLoadPolicy.default;\n    return new Promise((resolve, reject) => {\n      const url = this.getLicenseServerUrl(keySessionContext.keySystem);\n      this.log(`Sending license request to URL: ${url}`);\n      const xhr = new XMLHttpRequest();\n      xhr.responseType = 'arraybuffer';\n      xhr.onreadystatechange = () => {\n        if (!this.hls || !keySessionContext.mediaKeysSession) {\n          return reject(new Error('invalid state'));\n        }\n        if (xhr.readyState === 4) {\n          if (xhr.status === 200) {\n            this._requestLicenseFailureCount = 0;\n            let data = xhr.response;\n            this.log(`License received ${data instanceof ArrayBuffer ? data.byteLength : data}`);\n            const licenseResponseCallback = this.config.licenseResponseCallback;\n            if (licenseResponseCallback) {\n              try {\n                data = licenseResponseCallback.call(this.hls, xhr, url, keySessionContext);\n              } catch (error) {\n                this.error(error);\n              }\n            }\n            resolve(data);\n          } else {\n            const retryConfig = keyLoadPolicy.errorRetry;\n            const maxNumRetry = retryConfig ? retryConfig.maxNumRetry : 0;\n            this._requestLicenseFailureCount++;\n            if (this._requestLicenseFailureCount > maxNumRetry || xhr.status >= 400 && xhr.status < 500) {\n              reject(new EMEKeyError({\n                type: ErrorTypes.KEY_SYSTEM_ERROR,\n                details: ErrorDetails.KEY_SYSTEM_LICENSE_REQUEST_FAILED,\n                fatal: true,\n                networkDetails: xhr,\n                response: {\n                  url,\n                  data: undefined,\n                  code: xhr.status,\n                  text: xhr.statusText\n                }\n              }, `License Request XHR failed (${url}). Status: ${xhr.status} (${xhr.statusText})`));\n            } else {\n              const attemptsLeft = maxNumRetry - this._requestLicenseFailureCount + 1;\n              this.warn(`Retrying license request, ${attemptsLeft} attempts left`);\n              this.requestLicense(keySessionContext, licenseChallenge).then(resolve, reject);\n            }\n          }\n        }\n      };\n      if (keySessionContext.licenseXhr && keySessionContext.licenseXhr.readyState !== XMLHttpRequest.DONE) {\n        keySessionContext.licenseXhr.abort();\n      }\n      keySessionContext.licenseXhr = xhr;\n      this.setupLicenseXHR(xhr, url, keySessionContext, licenseChallenge).then(({\n        xhr,\n        licenseChallenge\n      }) => {\n        if (keySessionContext.keySystem == KeySystems.PLAYREADY) {\n          licenseChallenge = this.unpackPlayReadyKeyMessage(xhr, licenseChallenge);\n        }\n        xhr.send(licenseChallenge);\n      });\n    });\n  }\n  onMediaAttached(event, data) {\n    if (!this.config.emeEnabled) {\n      return;\n    }\n    const media = data.media;\n\n    // keep reference of media\n    this.media = media;\n    media.addEventListener('encrypted', this.onMediaEncrypted);\n    media.addEventListener('waitingforkey', this.onWaitingForKey);\n  }\n  onMediaDetached() {\n    const media = this.media;\n    const mediaKeysList = this.mediaKeySessions;\n    if (media) {\n      media.removeEventListener('encrypted', this.onMediaEncrypted);\n      media.removeEventListener('waitingforkey', this.onWaitingForKey);\n      this.media = null;\n    }\n    this._requestLicenseFailureCount = 0;\n    this.setMediaKeysQueue = [];\n    this.mediaKeySessions = [];\n    this.keyIdToKeySessionPromise = {};\n    LevelKey.clearKeyUriToKeyIdMap();\n\n    // Close all sessions and remove media keys from the video element.\n    const keySessionCount = mediaKeysList.length;\n    EMEController.CDMCleanupPromise = Promise.all(mediaKeysList.map(mediaKeySessionContext => this.removeSession(mediaKeySessionContext)).concat(media == null ? void 0 : media.setMediaKeys(null).catch(error => {\n      this.log(`Could not clear media keys: ${error}`);\n    }))).then(() => {\n      if (keySessionCount) {\n        this.log('finished closing key sessions and clearing media keys');\n        mediaKeysList.length = 0;\n      }\n    }).catch(error => {\n      this.log(`Could not close sessions and clear media keys: ${error}`);\n    });\n  }\n  onManifestLoading() {\n    this.keyFormatPromise = null;\n  }\n  onManifestLoaded(event, {\n    sessionKeys\n  }) {\n    if (!sessionKeys || !this.config.emeEnabled) {\n      return;\n    }\n    if (!this.keyFormatPromise) {\n      const keyFormats = sessionKeys.reduce((formats, sessionKey) => {\n        if (formats.indexOf(sessionKey.keyFormat) === -1) {\n          formats.push(sessionKey.keyFormat);\n        }\n        return formats;\n      }, []);\n      this.log(`Selecting key-system from session-keys ${keyFormats.join(', ')}`);\n      this.keyFormatPromise = this.getKeyFormatPromise(keyFormats);\n    }\n  }\n  removeSession(mediaKeySessionContext) {\n    const {\n      mediaKeysSession,\n      licenseXhr\n    } = mediaKeySessionContext;\n    if (mediaKeysSession) {\n      this.log(`Remove licenses and keys and close session ${mediaKeysSession.sessionId}`);\n      if (mediaKeySessionContext._onmessage) {\n        mediaKeysSession.removeEventListener('message', mediaKeySessionContext._onmessage);\n        mediaKeySessionContext._onmessage = undefined;\n      }\n      if (mediaKeySessionContext._onkeystatuseschange) {\n        mediaKeysSession.removeEventListener('keystatuseschange', mediaKeySessionContext._onkeystatuseschange);\n        mediaKeySessionContext._onkeystatuseschange = undefined;\n      }\n      if (licenseXhr && licenseXhr.readyState !== XMLHttpRequest.DONE) {\n        licenseXhr.abort();\n      }\n      mediaKeySessionContext.mediaKeysSession = mediaKeySessionContext.decryptdata = mediaKeySessionContext.licenseXhr = undefined;\n      const index = this.mediaKeySessions.indexOf(mediaKeySessionContext);\n      if (index > -1) {\n        this.mediaKeySessions.splice(index, 1);\n      }\n      return mediaKeysSession.remove().catch(error => {\n        this.log(`Could not remove session: ${error}`);\n      }).then(() => {\n        return mediaKeysSession.close();\n      }).catch(error => {\n        this.log(`Could not close session: ${error}`);\n      });\n    }\n  }\n}\nEMEController.CDMCleanupPromise = void 0;\nclass EMEKeyError extends Error {\n  constructor(data, message) {\n    super(message);\n    this.data = void 0;\n    data.error || (data.error = new Error(message));\n    this.data = data;\n    data.err = data.error;\n  }\n}\n\n/**\n * Common Media Object Type\n *\n * @group CMCD\n * @group CMSD\n *\n * @beta\n */\nvar CmObjectType;\n(function (CmObjectType) {\n  /**\n   * text file, such as a manifest or playlist\n   */\n  CmObjectType[\"MANIFEST\"] = \"m\";\n  /**\n   * audio only\n   */\n  CmObjectType[\"AUDIO\"] = \"a\";\n  /**\n   * video only\n   */\n  CmObjectType[\"VIDEO\"] = \"v\";\n  /**\n   * muxed audio and video\n   */\n  CmObjectType[\"MUXED\"] = \"av\";\n  /**\n   * init segment\n   */\n  CmObjectType[\"INIT\"] = \"i\";\n  /**\n   * caption or subtitle\n   */\n  CmObjectType[\"CAPTION\"] = \"c\";\n  /**\n   * ISOBMFF timed text track\n   */\n  CmObjectType[\"TIMED_TEXT\"] = \"tt\";\n  /**\n   * cryptographic key, license or certificate.\n   */\n  CmObjectType[\"KEY\"] = \"k\";\n  /**\n   * other\n   */\n  CmObjectType[\"OTHER\"] = \"o\";\n})(CmObjectType || (CmObjectType = {}));\n\n/**\n * Common Media Streaming Format\n *\n * @group CMCD\n * @group CMSD\n *\n * @beta\n */\nvar CmStreamingFormat;\n(function (CmStreamingFormat) {\n  /**\n   * MPEG DASH\n   */\n  CmStreamingFormat[\"DASH\"] = \"d\";\n  /**\n   * HTTP Live Streaming (HLS)\n   */\n  CmStreamingFormat[\"HLS\"] = \"h\";\n  /**\n   * Smooth Streaming\n   */\n  CmStreamingFormat[\"SMOOTH\"] = \"s\";\n  /**\n   * Other\n   */\n  CmStreamingFormat[\"OTHER\"] = \"o\";\n})(CmStreamingFormat || (CmStreamingFormat = {}));\n\n/**\n * CMCD header fields.\n *\n * @group CMCD\n *\n * @beta\n */\nvar CmcdHeaderField;\n(function (CmcdHeaderField) {\n  /**\n   * keys whose values vary with the object being requested.\n   */\n  CmcdHeaderField[\"OBJECT\"] = \"CMCD-Object\";\n  /**\n   * keys whose values vary with each request.\n   */\n  CmcdHeaderField[\"REQUEST\"] = \"CMCD-Request\";\n  /**\n   * keys whose values are expected to be invariant over the life of the session.\n   */\n  CmcdHeaderField[\"SESSION\"] = \"CMCD-Session\";\n  /**\n   * keys whose values do not vary with every request or object.\n   */\n  CmcdHeaderField[\"STATUS\"] = \"CMCD-Status\";\n})(CmcdHeaderField || (CmcdHeaderField = {}));\n\n/**\n * The map of CMCD header fields to official CMCD keys.\n *\n * @internal\n *\n * @group CMCD\n */\nconst CmcdHeaderMap = {\n  [CmcdHeaderField.OBJECT]: ['br', 'd', 'ot', 'tb'],\n  [CmcdHeaderField.REQUEST]: ['bl', 'dl', 'mtp', 'nor', 'nrr', 'su'],\n  [CmcdHeaderField.SESSION]: ['cid', 'pr', 'sf', 'sid', 'st', 'v'],\n  [CmcdHeaderField.STATUS]: ['bs', 'rtp']\n};\n\n/**\n * Structured Field Item\n *\n * @group Structured Field\n *\n * @beta\n */\nclass SfItem {\n  constructor(value, params) {\n    this.value = void 0;\n    this.params = void 0;\n    if (Array.isArray(value)) {\n      value = value.map(v => v instanceof SfItem ? v : new SfItem(v));\n    }\n    this.value = value;\n    this.params = params;\n  }\n}\n\n/**\n * A class to represent structured field tokens when `Symbol` is not available.\n *\n * @group Structured Field\n *\n * @beta\n */\nclass SfToken {\n  constructor(description) {\n    this.description = void 0;\n    this.description = description;\n  }\n}\n\nconst DICT = 'Dict';\n\nfunction format(value) {\n  if (Array.isArray(value)) {\n    return JSON.stringify(value);\n  }\n  if (value instanceof Map) {\n    return 'Map{}';\n  }\n  if (value instanceof Set) {\n    return 'Set{}';\n  }\n  if (typeof value === 'object') {\n    return JSON.stringify(value);\n  }\n  return String(value);\n}\nfunction throwError(action, src, type, cause) {\n  return new Error(`failed to ${action} \"${format(src)}\" as ${type}`, {\n    cause\n  });\n}\n\nconst BARE_ITEM = 'Bare Item';\n\nconst BOOLEAN = 'Boolean';\n\nconst BYTES = 'Byte Sequence';\n\nconst DECIMAL = 'Decimal';\n\nconst INTEGER = 'Integer';\n\nfunction isInvalidInt(value) {\n  return value < -999999999999999 || 999999999999999 < value;\n}\n\nconst STRING_REGEX = /[\\x00-\\x1f\\x7f]+/; // eslint-disable-line no-control-regex\n\nconst TOKEN = 'Token';\n\nconst KEY = 'Key';\n\nfunction serializeError(src, type, cause) {\n  return throwError('serialize', src, type, cause);\n}\n\n// 4.1.9.  Serializing a Boolean\n//\n// Given a Boolean as input_boolean, return an ASCII string suitable for\n// use in a HTTP field value.\n//\n// 1.  If input_boolean is not a boolean, fail serialization.\n//\n// 2.  Let output be an empty string.\n//\n// 3.  Append \"?\" to output.\n//\n// 4.  If input_boolean is true, append \"1\" to output.\n//\n// 5.  If input_boolean is false, append \"0\" to output.\n//\n// 6.  Return output.\nfunction serializeBoolean(value) {\n  if (typeof value !== 'boolean') {\n    throw serializeError(value, BOOLEAN);\n  }\n  return value ? '?1' : '?0';\n}\n\n/**\n * Encodes binary data to base64\n *\n * @param binary - The binary data to encode\n * @returns The base64 encoded string\n *\n * @group Utils\n *\n * @beta\n */\nfunction base64encode(binary) {\n  return btoa(String.fromCharCode(...binary));\n}\n\n// 4.1.8.  Serializing a Byte Sequence\n//\n// Given a Byte Sequence as input_bytes, return an ASCII string suitable\n// for use in a HTTP field value.\n//\n// 1.  If input_bytes is not a sequence of bytes, fail serialization.\n//\n// 2.  Let output be an empty string.\n//\n// 3.  Append \":\" to output.\n//\n// 4.  Append the result of base64-encoding input_bytes as per\n//     [RFC4648], Section 4, taking account of the requirements below.\n//\n// 5.  Append \":\" to output.\n//\n// 6.  Return output.\n//\n// The encoded data is required to be padded with \"=\", as per [RFC4648],\n// Section 3.2.\n//\n// Likewise, encoded data SHOULD have pad bits set to zero, as per\n// [RFC4648], Section 3.5, unless it is not possible to do so due to\n// implementation constraints.\nfunction serializeByteSequence(value) {\n  if (ArrayBuffer.isView(value) === false) {\n    throw serializeError(value, BYTES);\n  }\n  return `:${base64encode(value)}:`;\n}\n\n// 4.1.4.  Serializing an Integer\n//\n// Given an Integer as input_integer, return an ASCII string suitable\n// for use in a HTTP field value.\n//\n// 1.  If input_integer is not an integer in the range of\n//     -999,999,999,999,999 to 999,999,999,999,999 inclusive, fail\n//     serialization.\n//\n// 2.  Let output be an empty string.\n//\n// 3.  If input_integer is less than (but not equal to) 0, append \"-\" to\n//     output.\n//\n// 4.  Append input_integer's numeric value represented in base 10 using\n//     only decimal digits to output.\n//\n// 5.  Return output.\nfunction serializeInteger(value) {\n  if (isInvalidInt(value)) {\n    throw serializeError(value, INTEGER);\n  }\n  return value.toString();\n}\n\n// 4.1.10.  Serializing a Date\n//\n// Given a Date as input_integer, return an ASCII string suitable for\n// use in an HTTP field value.\n// 1.  Let output be \"@\".\n// 2.  Append to output the result of running Serializing an Integer\n//     with input_date (Section 4.1.4).\n// 3.  Return output.\nfunction serializeDate(value) {\n  return `@${serializeInteger(value.getTime() / 1000)}`;\n}\n\n/**\n * This implements the rounding procedure described in step 2 of the \"Serializing a Decimal\" specification.\n * This rounding style is known as \"even rounding\", \"banker's rounding\", or \"commercial rounding\".\n *\n * @param value - The value to round\n * @param precision - The number of decimal places to round to\n * @returns The rounded value\n *\n * @group Utils\n *\n * @beta\n */\nfunction roundToEven(value, precision) {\n  if (value < 0) {\n    return -roundToEven(-value, precision);\n  }\n  const decimalShift = Math.pow(10, precision);\n  const isEquidistant = Math.abs(value * decimalShift % 1 - 0.5) < Number.EPSILON;\n  if (isEquidistant) {\n    // If the tail of the decimal place is 'equidistant' we round to the nearest even value\n    const flooredValue = Math.floor(value * decimalShift);\n    return (flooredValue % 2 === 0 ? flooredValue : flooredValue + 1) / decimalShift;\n  } else {\n    // Otherwise, proceed as normal\n    return Math.round(value * decimalShift) / decimalShift;\n  }\n}\n\n// 4.1.5.  Serializing a Decimal\n//\n// Given a decimal number as input_decimal, return an ASCII string\n// suitable for use in a HTTP field value.\n//\n// 1.   If input_decimal is not a decimal number, fail serialization.\n//\n// 2.   If input_decimal has more than three significant digits to the\n//      right of the decimal point, round it to three decimal places,\n//      rounding the final digit to the nearest value, or to the even\n//      value if it is equidistant.\n//\n// 3.   If input_decimal has more than 12 significant digits to the left\n//      of the decimal point after rounding, fail serialization.\n//\n// 4.   Let output be an empty string.\n//\n// 5.   If input_decimal is less than (but not equal to) 0, append \"-\"\n//      to output.\n//\n// 6.   Append input_decimal's integer component represented in base 10\n//      (using only decimal digits) to output; if it is zero, append\n//      \"0\".\n//\n// 7.   Append \".\" to output.\n//\n// 8.   If input_decimal's fractional component is zero, append \"0\" to\n//      output.\n//\n// 9.   Otherwise, append the significant digits of input_decimal's\n//      fractional component represented in base 10 (using only decimal\n//      digits) to output.\n//\n// 10.  Return output.\nfunction serializeDecimal(value) {\n  const roundedValue = roundToEven(value, 3); // round to 3 decimal places\n  if (Math.floor(Math.abs(roundedValue)).toString().length > 12) {\n    throw serializeError(value, DECIMAL);\n  }\n  const stringValue = roundedValue.toString();\n  return stringValue.includes('.') ? stringValue : `${stringValue}.0`;\n}\n\nconst STRING = 'String';\n\n// 4.1.6.  Serializing a String\n//\n// Given a String as input_string, return an ASCII string suitable for\n// use in a HTTP field value.\n//\n// 1.  Convert input_string into a sequence of ASCII characters; if\n//     conversion fails, fail serialization.\n//\n// 2.  If input_string contains characters in the range %x00-1f or %x7f\n//     (i.e., not in VCHAR or SP), fail serialization.\n//\n// 3.  Let output be the string DQUOTE.\n//\n// 4.  For each character char in input_string:\n//\n//     1.  If char is \"\\\" or DQUOTE:\n//\n//         1.  Append \"\\\" to output.\n//\n//     2.  Append char to output.\n//\n// 5.  Append DQUOTE to output.\n//\n// 6.  Return output.\nfunction serializeString(value) {\n  if (STRING_REGEX.test(value)) {\n    throw serializeError(value, STRING);\n  }\n  return `\"${value.replace(/\\\\/g, `\\\\\\\\`).replace(/\"/g, `\\\\\"`)}\"`;\n}\n\nfunction symbolToStr(symbol) {\n  return symbol.description || symbol.toString().slice(7, -1);\n}\n\nfunction serializeToken(token) {\n  const value = symbolToStr(token);\n  if (/^([a-zA-Z*])([!#$%&'*+\\-.^_`|~\\w:/]*)$/.test(value) === false) {\n    throw serializeError(value, TOKEN);\n  }\n  return value;\n}\n\n// 4.1.3.1.  Serializing a Bare Item\n//\n// Given an Item as input_item, return an ASCII string suitable for use\n// in a HTTP field value.\n//\n// 1.  If input_item is an Integer, return the result of running\n//     Serializing an Integer (Section 4.1.4) with input_item.\n//\n// 2.  If input_item is a Decimal, return the result of running\n//     Serializing a Decimal (Section 4.1.5) with input_item.\n//\n// 3.  If input_item is a String, return the result of running\n//     Serializing a String (Section 4.1.6) with input_item.\n//\n// 4.  If input_item is a Token, return the result of running\n//     Serializing a Token (Section 4.1.7) with input_item.\n//\n// 5.  If input_item is a Boolean, return the result of running\n//     Serializing a Boolean (Section 4.1.9) with input_item.\n//\n// 6.  If input_item is a Byte Sequence, return the result of running\n//     Serializing a Byte Sequence (Section 4.1.8) with input_item.\n//\n// 7.  If input_item is a Date, return the result of running Serializing\n//     a Date (Section 4.1.10) with input_item.\n//\n// 8.  Otherwise, fail serialization.\nfunction serializeBareItem(value) {\n  switch (typeof value) {\n    case 'number':\n      if (!isFiniteNumber(value)) {\n        throw serializeError(value, BARE_ITEM);\n      }\n      if (Number.isInteger(value)) {\n        return serializeInteger(value);\n      }\n      return serializeDecimal(value);\n    case 'string':\n      return serializeString(value);\n    case 'symbol':\n      return serializeToken(value);\n    case 'boolean':\n      return serializeBoolean(value);\n    case 'object':\n      if (value instanceof Date) {\n        return serializeDate(value);\n      }\n      if (value instanceof Uint8Array) {\n        return serializeByteSequence(value);\n      }\n      if (value instanceof SfToken) {\n        return serializeToken(value);\n      }\n    default:\n      // fail\n      throw serializeError(value, BARE_ITEM);\n  }\n}\n\n// 4.1.1.3.  Serializing a Key\n//\n// Given a key as input_key, return an ASCII string suitable for use in\n// a HTTP field value.\n//\n// 1.  Convert input_key into a sequence of ASCII characters; if\n//     conversion fails, fail serialization.\n//\n// 2.  If input_key contains characters not in lcalpha, DIGIT, \"_\", \"-\",\n//     \".\", or \"*\" fail serialization.\n//\n// 3.  If the first character of input_key is not lcalpha or \"*\", fail\n//     serialization.\n//\n// 4.  Let output be an empty string.\n//\n// 5.  Append input_key to output.\n//\n// 6.  Return output.\nfunction serializeKey(value) {\n  if (/^[a-z*][a-z0-9\\-_.*]*$/.test(value) === false) {\n    throw serializeError(value, KEY);\n  }\n  return value;\n}\n\n// 4.1.1.2.  Serializing Parameters\n//\n// Given an ordered Dictionary as input_parameters (each member having a\n// param_name and a param_value), return an ASCII string suitable for\n// use in a HTTP field value.\n//\n// 1.  Let output be an empty string.\n//\n// 2.  For each param_name with a value of param_value in\n//     input_parameters:\n//\n//     1.  Append \";\" to output.\n//\n//     2.  Append the result of running Serializing a Key\n//         (Section 4.1.1.3) with param_name to output.\n//\n//     3.  If param_value is not Boolean true:\n//\n//         1.  Append \"=\" to output.\n//\n//         2.  Append the result of running Serializing a bare Item\n//             (Section 4.1.3.1) with param_value to output.\n//\n// 3.  Return output.\nfunction serializeParams(params) {\n  if (params == null) {\n    return '';\n  }\n  return Object.entries(params).map(([key, value]) => {\n    if (value === true) {\n      return `;${serializeKey(key)}`; // omit true\n    }\n    return `;${serializeKey(key)}=${serializeBareItem(value)}`;\n  }).join('');\n}\n\n// 4.1.3.  Serializing an Item\n//\n// Given an Item as bare_item and Parameters as item_parameters, return\n// an ASCII string suitable for use in a HTTP field value.\n//\n// 1.  Let output be an empty string.\n//\n// 2.  Append the result of running Serializing a Bare Item\n//     Section 4.1.3.1 with bare_item to output.\n//\n// 3.  Append the result of running Serializing Parameters\n//     Section 4.1.1.2 with item_parameters to output.\n//\n// 4.  Return output.\nfunction serializeItem(value) {\n  if (value instanceof SfItem) {\n    return `${serializeBareItem(value.value)}${serializeParams(value.params)}`;\n  } else {\n    return serializeBareItem(value);\n  }\n}\n\n// 4.1.1.1.  Serializing an Inner List\n//\n// Given an array of (member_value, parameters) tuples as inner_list,\n// and parameters as list_parameters, return an ASCII string suitable\n// for use in a HTTP field value.\n//\n// 1.  Let output be the string \"(\".\n//\n// 2.  For each (member_value, parameters) of inner_list:\n//\n//     1.  Append the result of running Serializing an Item\n//         (Section 4.1.3) with (member_value, parameters) to output.\n//\n//     2.  If more values remain in inner_list, append a single SP to\n//         output.\n//\n// 3.  Append \")\" to output.\n//\n// 4.  Append the result of running Serializing Parameters\n//     (Section 4.1.1.2) with list_parameters to output.\n//\n// 5.  Return output.\nfunction serializeInnerList(value) {\n  return `(${value.value.map(serializeItem).join(' ')})${serializeParams(value.params)}`;\n}\n\n// 4.1.2.  Serializing a Dictionary\n//\n// Given an ordered Dictionary as input_dictionary (each member having a\n// member_name and a tuple value of (member_value, parameters)), return\n// an ASCII string suitable for use in a HTTP field value.\n//\n// 1.  Let output be an empty string.\n//\n// 2.  For each member_name with a value of (member_value, parameters)\n//     in input_dictionary:\n//\n//     1.  Append the result of running Serializing a Key\n//         (Section 4.1.1.3) with member's member_name to output.\n//\n//     2.  If member_value is Boolean true:\n//\n//         1.  Append the result of running Serializing Parameters\n//             (Section 4.1.1.2) with parameters to output.\n//\n//     3.  Otherwise:\n//\n//         1.  Append \"=\" to output.\n//\n//         2.  If member_value is an array, append the result of running\n//             Serializing an Inner List (Section 4.1.1.1) with\n//             (member_value, parameters) to output.\n//\n//         3.  Otherwise, append the result of running Serializing an\n//             Item (Section 4.1.3) with (member_value, parameters) to\n//             output.\n//\n//     4.  If more members remain in input_dictionary:\n//\n//         1.  Append \",\" to output.\n//\n//         2.  Append a single SP to output.\n//\n// 3.  Return output.\nfunction serializeDict(dict, options = {\n  whitespace: true\n}) {\n  if (typeof dict !== 'object') {\n    throw serializeError(dict, DICT);\n  }\n  const entries = dict instanceof Map ? dict.entries() : Object.entries(dict);\n  const optionalWhiteSpace = options != null && options.whitespace ? ' ' : '';\n  return Array.from(entries).map(([key, item]) => {\n    if (item instanceof SfItem === false) {\n      item = new SfItem(item);\n    }\n    let output = serializeKey(key);\n    if (item.value === true) {\n      output += serializeParams(item.params);\n    } else {\n      output += '=';\n      if (Array.isArray(item.value)) {\n        output += serializeInnerList(item);\n      } else {\n        output += serializeItem(item);\n      }\n    }\n    return output;\n  }).join(`,${optionalWhiteSpace}`);\n}\n\n/**\n * Encode an object into a structured field dictionary\n *\n * @param input - The structured field dictionary to encode\n * @returns The structured field string\n *\n * @group Structured Field\n *\n * @beta\n */\nfunction encodeSfDict(value, options) {\n  return serializeDict(value, options);\n}\n\n/**\n * Checks if the given key is a token field.\n *\n * @param key - The key to check.\n *\n * @returns `true` if the key is a token field.\n *\n * @internal\n *\n * @group CMCD\n */\nconst isTokenField = key => key === 'ot' || key === 'sf' || key === 'st';\n\nconst isValid = value => {\n  if (typeof value === 'number') {\n    return isFiniteNumber(value);\n  }\n  return value != null && value !== '' && value !== false;\n};\n\n/**\n * Constructs a relative path from a URL.\n *\n * @param url - The destination URL\n * @param base - The base URL\n * @returns The relative path\n *\n * @group Utils\n *\n * @beta\n */\nfunction urlToRelativePath(url, base) {\n  const to = new URL(url);\n  const from = new URL(base);\n  if (to.origin !== from.origin) {\n    return url;\n  }\n  const toPath = to.pathname.split('/').slice(1);\n  const fromPath = from.pathname.split('/').slice(1, -1);\n  // remove common parents\n  while (toPath[0] === fromPath[0]) {\n    toPath.shift();\n    fromPath.shift();\n  }\n  // add back paths\n  while (fromPath.length) {\n    fromPath.shift();\n    toPath.unshift('..');\n  }\n  return toPath.join('/');\n}\n\n/**\n * Generate a random v4 UUID\n *\n * @returns A random v4 UUID\n *\n * @group Utils\n *\n * @beta\n */\nfunction uuid() {\n  try {\n    return crypto.randomUUID();\n  } catch (error) {\n    try {\n      const url = URL.createObjectURL(new Blob());\n      const uuid = url.toString();\n      URL.revokeObjectURL(url);\n      return uuid.slice(uuid.lastIndexOf('/') + 1);\n    } catch (error) {\n      let dt = new Date().getTime();\n      const uuid = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, c => {\n        const r = (dt + Math.random() * 16) % 16 | 0;\n        dt = Math.floor(dt / 16);\n        return (c == 'x' ? r : r & 0x3 | 0x8).toString(16);\n      });\n      return uuid;\n    }\n  }\n}\n\nconst toRounded = value => Math.round(value);\nconst toUrlSafe = (value, options) => {\n  if (options != null && options.baseUrl) {\n    value = urlToRelativePath(value, options.baseUrl);\n  }\n  return encodeURIComponent(value);\n};\nconst toHundred = value => toRounded(value / 100) * 100;\n/**\n * The default formatters for CMCD values.\n *\n * @group CMCD\n *\n * @beta\n */\nconst CmcdFormatters = {\n  /**\n   * Bitrate (kbps) rounded integer\n   */\n  br: toRounded,\n  /**\n   * Duration (milliseconds) rounded integer\n   */\n  d: toRounded,\n  /**\n   * Buffer Length (milliseconds) rounded nearest 100ms\n   */\n  bl: toHundred,\n  /**\n   * Deadline (milliseconds) rounded nearest 100ms\n   */\n  dl: toHundred,\n  /**\n   * Measured Throughput (kbps) rounded nearest 100kbps\n   */\n  mtp: toHundred,\n  /**\n   * Next Object Request URL encoded\n   */\n  nor: toUrlSafe,\n  /**\n   * Requested maximum throughput (kbps) rounded nearest 100kbps\n   */\n  rtp: toHundred,\n  /**\n   * Top Bitrate (kbps) rounded integer\n   */\n  tb: toRounded\n};\n\n/**\n * Internal CMCD processing function.\n *\n * @param obj - The CMCD object to process.\n * @param map - The mapping function to use.\n * @param options - Options for encoding.\n *\n * @internal\n *\n * @group CMCD\n */\nfunction processCmcd(obj, options) {\n  const results = {};\n  if (obj == null || typeof obj !== 'object') {\n    return results;\n  }\n  const keys = Object.keys(obj).sort();\n  const formatters = _extends({}, CmcdFormatters, options == null ? void 0 : options.formatters);\n  const filter = options == null ? void 0 : options.filter;\n  keys.forEach(key => {\n    if (filter != null && filter(key)) {\n      return;\n    }\n    let value = obj[key];\n    const formatter = formatters[key];\n    if (formatter) {\n      value = formatter(value, options);\n    }\n    // Version should only be reported if not equal to 1.\n    if (key === 'v' && value === 1) {\n      return;\n    }\n    // Playback rate should only be sent if not equal to 1.\n    if (key == 'pr' && value === 1) {\n      return;\n    }\n    // ignore invalid values\n    if (!isValid(value)) {\n      return;\n    }\n    if (isTokenField(key) && typeof value === 'string') {\n      value = new SfToken(value);\n    }\n    results[key] = value;\n  });\n  return results;\n}\n\n/**\n * Encode a CMCD object to a string.\n *\n * @param cmcd - The CMCD object to encode.\n * @param options - Options for encoding.\n *\n * @returns The encoded CMCD string.\n *\n * @group CMCD\n *\n * @beta\n */\nfunction encodeCmcd(cmcd, options = {}) {\n  if (!cmcd) {\n    return '';\n  }\n  return encodeSfDict(processCmcd(cmcd, options), _extends({\n    whitespace: false\n  }, options));\n}\n\n/**\n * Convert a CMCD data object to request headers\n *\n * @param cmcd - The CMCD data object to convert.\n * @param options - Options for encoding the CMCD object.\n *\n * @returns The CMCD header shards.\n *\n * @group CMCD\n *\n * @beta\n */\nfunction toCmcdHeaders(cmcd, options = {}) {\n  if (!cmcd) {\n    return {};\n  }\n  const entries = Object.entries(cmcd);\n  const headerMap = Object.entries(CmcdHeaderMap).concat(Object.entries((options == null ? void 0 : options.customHeaderMap) || {}));\n  const shards = entries.reduce((acc, entry) => {\n    var _headerMap$find, _acc$field;\n    const [key, value] = entry;\n    const field = ((_headerMap$find = headerMap.find(entry => entry[1].includes(key))) == null ? void 0 : _headerMap$find[0]) || CmcdHeaderField.REQUEST;\n    (_acc$field = acc[field]) != null ? _acc$field : acc[field] = {};\n    acc[field][key] = value;\n    return acc;\n  }, {});\n  return Object.entries(shards).reduce((acc, [field, value]) => {\n    acc[field] = encodeCmcd(value, options);\n    return acc;\n  }, {});\n}\n\n/**\n * Append CMCD query args to a header object.\n *\n * @param headers - The headers to append to.\n * @param cmcd - The CMCD object to append.\n * @param customHeaderMap - A map of custom CMCD keys to header fields.\n *\n * @returns The headers with the CMCD header shards appended.\n *\n * @group CMCD\n *\n * @beta\n */\nfunction appendCmcdHeaders(headers, cmcd, options) {\n  return _extends(headers, toCmcdHeaders(cmcd, options));\n}\n\n/**\n * CMCD parameter name.\n *\n * @group CMCD\n *\n * @beta\n */\nconst CMCD_PARAM = 'CMCD';\n\n/**\n * Convert a CMCD data object to a query arg.\n *\n * @param cmcd - The CMCD object to convert.\n * @param options - Options for encoding the CMCD object.\n *\n * @returns The CMCD query arg.\n *\n * @group CMCD\n *\n * @beta\n */\nfunction toCmcdQuery(cmcd, options = {}) {\n  if (!cmcd) {\n    return '';\n  }\n  const params = encodeCmcd(cmcd, options);\n  return `${CMCD_PARAM}=${encodeURIComponent(params)}`;\n}\n\nconst REGEX = /CMCD=[^&#]+/;\n/**\n * Append CMCD query args to a URL.\n *\n * @param url - The URL to append to.\n * @param cmcd - The CMCD object to append.\n * @param options - Options for encoding the CMCD object.\n *\n * @returns The URL with the CMCD query args appended.\n *\n * @group CMCD\n *\n * @beta\n */\nfunction appendCmcdQuery(url, cmcd, options) {\n  // TODO: Replace with URLSearchParams once we drop Safari < 10.1 & Chrome < 49 support.\n  // https://developer.mozilla.org/en-US/docs/Web/API/URLSearchParams\n  const query = toCmcdQuery(cmcd, options);\n  if (!query) {\n    return url;\n  }\n  if (REGEX.test(url)) {\n    return url.replace(REGEX, query);\n  }\n  const separator = url.includes('?') ? '&' : '?';\n  return `${url}${separator}${query}`;\n}\n\n/**\n * Controller to deal with Common Media Client Data (CMCD)\n * @see https://cdn.cta.tech/cta/media/media/resources/standards/pdfs/cta-5004-final.pdf\n */\nclass CMCDController {\n  // eslint-disable-line no-restricted-globals\n\n  constructor(hls) {\n    this.hls = void 0;\n    this.config = void 0;\n    this.media = void 0;\n    this.sid = void 0;\n    this.cid = void 0;\n    this.useHeaders = false;\n    this.includeKeys = void 0;\n    this.initialized = false;\n    this.starved = false;\n    this.buffering = true;\n    this.audioBuffer = void 0;\n    // eslint-disable-line no-restricted-globals\n    this.videoBuffer = void 0;\n    this.onWaiting = () => {\n      if (this.initialized) {\n        this.starved = true;\n      }\n      this.buffering = true;\n    };\n    this.onPlaying = () => {\n      if (!this.initialized) {\n        this.initialized = true;\n      }\n      this.buffering = false;\n    };\n    /**\n     * Apply CMCD data to a manifest request.\n     */\n    this.applyPlaylistData = context => {\n      try {\n        this.apply(context, {\n          ot: CmObjectType.MANIFEST,\n          su: !this.initialized\n        });\n      } catch (error) {\n        logger.warn('Could not generate manifest CMCD data.', error);\n      }\n    };\n    /**\n     * Apply CMCD data to a segment request\n     */\n    this.applyFragmentData = context => {\n      try {\n        const fragment = context.frag;\n        const level = this.hls.levels[fragment.level];\n        const ot = this.getObjectType(fragment);\n        const data = {\n          d: fragment.duration * 1000,\n          ot\n        };\n        if (ot === CmObjectType.VIDEO || ot === CmObjectType.AUDIO || ot == CmObjectType.MUXED) {\n          data.br = level.bitrate / 1000;\n          data.tb = this.getTopBandwidth(ot) / 1000;\n          data.bl = this.getBufferLength(ot);\n        }\n        this.apply(context, data);\n      } catch (error) {\n        logger.warn('Could not generate segment CMCD data.', error);\n      }\n    };\n    this.hls = hls;\n    const config = this.config = hls.config;\n    const {\n      cmcd\n    } = config;\n    if (cmcd != null) {\n      config.pLoader = this.createPlaylistLoader();\n      config.fLoader = this.createFragmentLoader();\n      this.sid = cmcd.sessionId || uuid();\n      this.cid = cmcd.contentId;\n      this.useHeaders = cmcd.useHeaders === true;\n      this.includeKeys = cmcd.includeKeys;\n      this.registerListeners();\n    }\n  }\n  registerListeners() {\n    const hls = this.hls;\n    hls.on(Events.MEDIA_ATTACHED, this.onMediaAttached, this);\n    hls.on(Events.MEDIA_DETACHED, this.onMediaDetached, this);\n    hls.on(Events.BUFFER_CREATED, this.onBufferCreated, this);\n  }\n  unregisterListeners() {\n    const hls = this.hls;\n    hls.off(Events.MEDIA_ATTACHED, this.onMediaAttached, this);\n    hls.off(Events.MEDIA_DETACHED, this.onMediaDetached, this);\n    hls.off(Events.BUFFER_CREATED, this.onBufferCreated, this);\n  }\n  destroy() {\n    this.unregisterListeners();\n    this.onMediaDetached();\n\n    // @ts-ignore\n    this.hls = this.config = this.audioBuffer = this.videoBuffer = null;\n    // @ts-ignore\n    this.onWaiting = this.onPlaying = null;\n  }\n  onMediaAttached(event, data) {\n    this.media = data.media;\n    this.media.addEventListener('waiting', this.onWaiting);\n    this.media.addEventListener('playing', this.onPlaying);\n  }\n  onMediaDetached() {\n    if (!this.media) {\n      return;\n    }\n    this.media.removeEventListener('waiting', this.onWaiting);\n    this.media.removeEventListener('playing', this.onPlaying);\n\n    // @ts-ignore\n    this.media = null;\n  }\n  onBufferCreated(event, data) {\n    var _data$tracks$audio, _data$tracks$video;\n    this.audioBuffer = (_data$tracks$audio = data.tracks.audio) == null ? void 0 : _data$tracks$audio.buffer;\n    this.videoBuffer = (_data$tracks$video = data.tracks.video) == null ? void 0 : _data$tracks$video.buffer;\n  }\n  /**\n   * Create baseline CMCD data\n   */\n  createData() {\n    var _this$media;\n    return {\n      v: 1,\n      sf: CmStreamingFormat.HLS,\n      sid: this.sid,\n      cid: this.cid,\n      pr: (_this$media = this.media) == null ? void 0 : _this$media.playbackRate,\n      mtp: this.hls.bandwidthEstimate / 1000\n    };\n  }\n\n  /**\n   * Apply CMCD data to a request.\n   */\n  apply(context, data = {}) {\n    // apply baseline data\n    _extends(data, this.createData());\n    const isVideo = data.ot === CmObjectType.INIT || data.ot === CmObjectType.VIDEO || data.ot === CmObjectType.MUXED;\n    if (this.starved && isVideo) {\n      data.bs = true;\n      data.su = true;\n      this.starved = false;\n    }\n    if (data.su == null) {\n      data.su = this.buffering;\n    }\n\n    // TODO: Implement rtp, nrr, nor, dl\n\n    const {\n      includeKeys\n    } = this;\n    if (includeKeys) {\n      data = Object.keys(data).reduce((acc, key) => {\n        includeKeys.includes(key) && (acc[key] = data[key]);\n        return acc;\n      }, {});\n    }\n    if (this.useHeaders) {\n      if (!context.headers) {\n        context.headers = {};\n      }\n      appendCmcdHeaders(context.headers, data);\n    } else {\n      context.url = appendCmcdQuery(context.url, data);\n    }\n  }\n  /**\n   * The CMCD object type.\n   */\n  getObjectType(fragment) {\n    const {\n      type\n    } = fragment;\n    if (type === 'subtitle') {\n      return CmObjectType.TIMED_TEXT;\n    }\n    if (fragment.sn === 'initSegment') {\n      return CmObjectType.INIT;\n    }\n    if (type === 'audio') {\n      return CmObjectType.AUDIO;\n    }\n    if (type === 'main') {\n      if (!this.hls.audioTracks.length) {\n        return CmObjectType.MUXED;\n      }\n      return CmObjectType.VIDEO;\n    }\n    return undefined;\n  }\n\n  /**\n   * Get the highest bitrate.\n   */\n  getTopBandwidth(type) {\n    let bitrate = 0;\n    let levels;\n    const hls = this.hls;\n    if (type === CmObjectType.AUDIO) {\n      levels = hls.audioTracks;\n    } else {\n      const max = hls.maxAutoLevel;\n      const len = max > -1 ? max + 1 : hls.levels.length;\n      levels = hls.levels.slice(0, len);\n    }\n    for (const level of levels) {\n      if (level.bitrate > bitrate) {\n        bitrate = level.bitrate;\n      }\n    }\n    return bitrate > 0 ? bitrate : NaN;\n  }\n\n  /**\n   * Get the buffer length for a media type in milliseconds\n   */\n  getBufferLength(type) {\n    const media = this.hls.media;\n    const buffer = type === CmObjectType.AUDIO ? this.audioBuffer : this.videoBuffer;\n    if (!buffer || !media) {\n      return NaN;\n    }\n    const info = BufferHelper.bufferInfo(buffer, media.currentTime, this.config.maxBufferHole);\n    return info.len * 1000;\n  }\n\n  /**\n   * Create a playlist loader\n   */\n  createPlaylistLoader() {\n    const {\n      pLoader\n    } = this.config;\n    const apply = this.applyPlaylistData;\n    const Ctor = pLoader || this.config.loader;\n    return class CmcdPlaylistLoader {\n      constructor(config) {\n        this.loader = void 0;\n        this.loader = new Ctor(config);\n      }\n      get stats() {\n        return this.loader.stats;\n      }\n      get context() {\n        return this.loader.context;\n      }\n      destroy() {\n        this.loader.destroy();\n      }\n      abort() {\n        this.loader.abort();\n      }\n      load(context, config, callbacks) {\n        apply(context);\n        this.loader.load(context, config, callbacks);\n      }\n    };\n  }\n\n  /**\n   * Create a playlist loader\n   */\n  createFragmentLoader() {\n    const {\n      fLoader\n    } = this.config;\n    const apply = this.applyFragmentData;\n    const Ctor = fLoader || this.config.loader;\n    return class CmcdFragmentLoader {\n      constructor(config) {\n        this.loader = void 0;\n        this.loader = new Ctor(config);\n      }\n      get stats() {\n        return this.loader.stats;\n      }\n      get context() {\n        return this.loader.context;\n      }\n      destroy() {\n        this.loader.destroy();\n      }\n      abort() {\n        this.loader.abort();\n      }\n      load(context, config, callbacks) {\n        apply(context);\n        this.loader.load(context, config, callbacks);\n      }\n    };\n  }\n}\n\nconst PATHWAY_PENALTY_DURATION_MS = 300000;\nclass ContentSteeringController {\n  constructor(hls) {\n    this.hls = void 0;\n    this.log = void 0;\n    this.loader = null;\n    this.uri = null;\n    this.pathwayId = '.';\n    this.pathwayPriority = null;\n    this.timeToLoad = 300;\n    this.reloadTimer = -1;\n    this.updated = 0;\n    this.started = false;\n    this.enabled = true;\n    this.levels = null;\n    this.audioTracks = null;\n    this.subtitleTracks = null;\n    this.penalizedPathways = {};\n    this.hls = hls;\n    this.log = logger.log.bind(logger, `[content-steering]:`);\n    this.registerListeners();\n  }\n  registerListeners() {\n    const hls = this.hls;\n    hls.on(Events.MANIFEST_LOADING, this.onManifestLoading, this);\n    hls.on(Events.MANIFEST_LOADED, this.onManifestLoaded, this);\n    hls.on(Events.MANIFEST_PARSED, this.onManifestParsed, this);\n    hls.on(Events.ERROR, this.onError, this);\n  }\n  unregisterListeners() {\n    const hls = this.hls;\n    if (!hls) {\n      return;\n    }\n    hls.off(Events.MANIFEST_LOADING, this.onManifestLoading, this);\n    hls.off(Events.MANIFEST_LOADED, this.onManifestLoaded, this);\n    hls.off(Events.MANIFEST_PARSED, this.onManifestParsed, this);\n    hls.off(Events.ERROR, this.onError, this);\n  }\n  startLoad() {\n    this.started = true;\n    this.clearTimeout();\n    if (this.enabled && this.uri) {\n      if (this.updated) {\n        const ttl = this.timeToLoad * 1000 - (performance.now() - this.updated);\n        if (ttl > 0) {\n          this.scheduleRefresh(this.uri, ttl);\n          return;\n        }\n      }\n      this.loadSteeringManifest(this.uri);\n    }\n  }\n  stopLoad() {\n    this.started = false;\n    if (this.loader) {\n      this.loader.destroy();\n      this.loader = null;\n    }\n    this.clearTimeout();\n  }\n  clearTimeout() {\n    if (this.reloadTimer !== -1) {\n      self.clearTimeout(this.reloadTimer);\n      this.reloadTimer = -1;\n    }\n  }\n  destroy() {\n    this.unregisterListeners();\n    this.stopLoad();\n    // @ts-ignore\n    this.hls = null;\n    this.levels = this.audioTracks = this.subtitleTracks = null;\n  }\n  removeLevel(levelToRemove) {\n    const levels = this.levels;\n    if (levels) {\n      this.levels = levels.filter(level => level !== levelToRemove);\n    }\n  }\n  onManifestLoading() {\n    this.stopLoad();\n    this.enabled = true;\n    this.timeToLoad = 300;\n    this.updated = 0;\n    this.uri = null;\n    this.pathwayId = '.';\n    this.levels = this.audioTracks = this.subtitleTracks = null;\n  }\n  onManifestLoaded(event, data) {\n    const {\n      contentSteering\n    } = data;\n    if (contentSteering === null) {\n      return;\n    }\n    this.pathwayId = contentSteering.pathwayId;\n    this.uri = contentSteering.uri;\n    if (this.started) {\n      this.startLoad();\n    }\n  }\n  onManifestParsed(event, data) {\n    this.audioTracks = data.audioTracks;\n    this.subtitleTracks = data.subtitleTracks;\n  }\n  onError(event, data) {\n    const {\n      errorAction\n    } = data;\n    if ((errorAction == null ? void 0 : errorAction.action) === NetworkErrorAction.SendAlternateToPenaltyBox && errorAction.flags === ErrorActionFlags.MoveAllAlternatesMatchingHost) {\n      const levels = this.levels;\n      let pathwayPriority = this.pathwayPriority;\n      let errorPathway = this.pathwayId;\n      if (data.context) {\n        const {\n          groupId,\n          pathwayId,\n          type\n        } = data.context;\n        if (groupId && levels) {\n          errorPathway = this.getPathwayForGroupId(groupId, type, errorPathway);\n        } else if (pathwayId) {\n          errorPathway = pathwayId;\n        }\n      }\n      if (!(errorPathway in this.penalizedPathways)) {\n        this.penalizedPathways[errorPathway] = performance.now();\n      }\n      if (!pathwayPriority && levels) {\n        // If PATHWAY-PRIORITY was not provided, list pathways for error handling\n        pathwayPriority = levels.reduce((pathways, level) => {\n          if (pathways.indexOf(level.pathwayId) === -1) {\n            pathways.push(level.pathwayId);\n          }\n          return pathways;\n        }, []);\n      }\n      if (pathwayPriority && pathwayPriority.length > 1) {\n        this.updatePathwayPriority(pathwayPriority);\n        errorAction.resolved = this.pathwayId !== errorPathway;\n      }\n      if (!errorAction.resolved) {\n        logger.warn(`Could not resolve ${data.details} (\"${data.error.message}\") with content-steering for Pathway: ${errorPathway} levels: ${levels ? levels.length : levels} priorities: ${JSON.stringify(pathwayPriority)} penalized: ${JSON.stringify(this.penalizedPathways)}`);\n      }\n    }\n  }\n  filterParsedLevels(levels) {\n    // Filter levels to only include those that are in the initial pathway\n    this.levels = levels;\n    let pathwayLevels = this.getLevelsForPathway(this.pathwayId);\n    if (pathwayLevels.length === 0) {\n      const pathwayId = levels[0].pathwayId;\n      this.log(`No levels found in Pathway ${this.pathwayId}. Setting initial Pathway to \"${pathwayId}\"`);\n      pathwayLevels = this.getLevelsForPathway(pathwayId);\n      this.pathwayId = pathwayId;\n    }\n    if (pathwayLevels.length !== levels.length) {\n      this.log(`Found ${pathwayLevels.length}/${levels.length} levels in Pathway \"${this.pathwayId}\"`);\n    }\n    return pathwayLevels;\n  }\n  getLevelsForPathway(pathwayId) {\n    if (this.levels === null) {\n      return [];\n    }\n    return this.levels.filter(level => pathwayId === level.pathwayId);\n  }\n  updatePathwayPriority(pathwayPriority) {\n    this.pathwayPriority = pathwayPriority;\n    let levels;\n\n    // Evaluate if we should remove the pathway from the penalized list\n    const penalizedPathways = this.penalizedPathways;\n    const now = performance.now();\n    Object.keys(penalizedPathways).forEach(pathwayId => {\n      if (now - penalizedPathways[pathwayId] > PATHWAY_PENALTY_DURATION_MS) {\n        delete penalizedPathways[pathwayId];\n      }\n    });\n    for (let i = 0; i < pathwayPriority.length; i++) {\n      const pathwayId = pathwayPriority[i];\n      if (pathwayId in penalizedPathways) {\n        continue;\n      }\n      if (pathwayId === this.pathwayId) {\n        return;\n      }\n      const selectedIndex = this.hls.nextLoadLevel;\n      const selectedLevel = this.hls.levels[selectedIndex];\n      levels = this.getLevelsForPathway(pathwayId);\n      if (levels.length > 0) {\n        this.log(`Setting Pathway to \"${pathwayId}\"`);\n        this.pathwayId = pathwayId;\n        reassignFragmentLevelIndexes(levels);\n        this.hls.trigger(Events.LEVELS_UPDATED, {\n          levels\n        });\n        // Set LevelController's level to trigger LEVEL_SWITCHING which loads playlist if needed\n        const levelAfterChange = this.hls.levels[selectedIndex];\n        if (selectedLevel && levelAfterChange && this.levels) {\n          if (levelAfterChange.attrs['STABLE-VARIANT-ID'] !== selectedLevel.attrs['STABLE-VARIANT-ID'] && levelAfterChange.bitrate !== selectedLevel.bitrate) {\n            this.log(`Unstable Pathways change from bitrate ${selectedLevel.bitrate} to ${levelAfterChange.bitrate}`);\n          }\n          this.hls.nextLoadLevel = selectedIndex;\n        }\n        break;\n      }\n    }\n  }\n  getPathwayForGroupId(groupId, type, defaultPathway) {\n    const levels = this.getLevelsForPathway(defaultPathway).concat(this.levels || []);\n    for (let i = 0; i < levels.length; i++) {\n      if (type === PlaylistContextType.AUDIO_TRACK && levels[i].hasAudioGroup(groupId) || type === PlaylistContextType.SUBTITLE_TRACK && levels[i].hasSubtitleGroup(groupId)) {\n        return levels[i].pathwayId;\n      }\n    }\n    return defaultPathway;\n  }\n  clonePathways(pathwayClones) {\n    const levels = this.levels;\n    if (!levels) {\n      return;\n    }\n    const audioGroupCloneMap = {};\n    const subtitleGroupCloneMap = {};\n    pathwayClones.forEach(pathwayClone => {\n      const {\n        ID: cloneId,\n        'BASE-ID': baseId,\n        'URI-REPLACEMENT': uriReplacement\n      } = pathwayClone;\n      if (levels.some(level => level.pathwayId === cloneId)) {\n        return;\n      }\n      const clonedVariants = this.getLevelsForPathway(baseId).map(baseLevel => {\n        const attributes = new AttrList(baseLevel.attrs);\n        attributes['PATHWAY-ID'] = cloneId;\n        const clonedAudioGroupId = attributes.AUDIO && `${attributes.AUDIO}_clone_${cloneId}`;\n        const clonedSubtitleGroupId = attributes.SUBTITLES && `${attributes.SUBTITLES}_clone_${cloneId}`;\n        if (clonedAudioGroupId) {\n          audioGroupCloneMap[attributes.AUDIO] = clonedAudioGroupId;\n          attributes.AUDIO = clonedAudioGroupId;\n        }\n        if (clonedSubtitleGroupId) {\n          subtitleGroupCloneMap[attributes.SUBTITLES] = clonedSubtitleGroupId;\n          attributes.SUBTITLES = clonedSubtitleGroupId;\n        }\n        const url = performUriReplacement(baseLevel.uri, attributes['STABLE-VARIANT-ID'], 'PER-VARIANT-URIS', uriReplacement);\n        const clonedLevel = new Level({\n          attrs: attributes,\n          audioCodec: baseLevel.audioCodec,\n          bitrate: baseLevel.bitrate,\n          height: baseLevel.height,\n          name: baseLevel.name,\n          url,\n          videoCodec: baseLevel.videoCodec,\n          width: baseLevel.width\n        });\n        if (baseLevel.audioGroups) {\n          for (let i = 1; i < baseLevel.audioGroups.length; i++) {\n            clonedLevel.addGroupId('audio', `${baseLevel.audioGroups[i]}_clone_${cloneId}`);\n          }\n        }\n        if (baseLevel.subtitleGroups) {\n          for (let i = 1; i < baseLevel.subtitleGroups.length; i++) {\n            clonedLevel.addGroupId('text', `${baseLevel.subtitleGroups[i]}_clone_${cloneId}`);\n          }\n        }\n        return clonedLevel;\n      });\n      levels.push(...clonedVariants);\n      cloneRenditionGroups(this.audioTracks, audioGroupCloneMap, uriReplacement, cloneId);\n      cloneRenditionGroups(this.subtitleTracks, subtitleGroupCloneMap, uriReplacement, cloneId);\n    });\n  }\n  loadSteeringManifest(uri) {\n    const config = this.hls.config;\n    const Loader = config.loader;\n    if (this.loader) {\n      this.loader.destroy();\n    }\n    this.loader = new Loader(config);\n    let url;\n    try {\n      url = new self.URL(uri);\n    } catch (error) {\n      this.enabled = false;\n      this.log(`Failed to parse Steering Manifest URI: ${uri}`);\n      return;\n    }\n    if (url.protocol !== 'data:') {\n      const throughput = (this.hls.bandwidthEstimate || config.abrEwmaDefaultEstimate) | 0;\n      url.searchParams.set('_HLS_pathway', this.pathwayId);\n      url.searchParams.set('_HLS_throughput', '' + throughput);\n    }\n    const context = {\n      responseType: 'json',\n      url: url.href\n    };\n    const loadPolicy = config.steeringManifestLoadPolicy.default;\n    const legacyRetryCompatibility = loadPolicy.errorRetry || loadPolicy.timeoutRetry || {};\n    const loaderConfig = {\n      loadPolicy,\n      timeout: loadPolicy.maxLoadTimeMs,\n      maxRetry: legacyRetryCompatibility.maxNumRetry || 0,\n      retryDelay: legacyRetryCompatibility.retryDelayMs || 0,\n      maxRetryDelay: legacyRetryCompatibility.maxRetryDelayMs || 0\n    };\n    const callbacks = {\n      onSuccess: (response, stats, context, networkDetails) => {\n        this.log(`Loaded steering manifest: \"${url}\"`);\n        const steeringData = response.data;\n        if (steeringData.VERSION !== 1) {\n          this.log(`Steering VERSION ${steeringData.VERSION} not supported!`);\n          return;\n        }\n        this.updated = performance.now();\n        this.timeToLoad = steeringData.TTL;\n        const {\n          'RELOAD-URI': reloadUri,\n          'PATHWAY-CLONES': pathwayClones,\n          'PATHWAY-PRIORITY': pathwayPriority\n        } = steeringData;\n        if (reloadUri) {\n          try {\n            this.uri = new self.URL(reloadUri, url).href;\n          } catch (error) {\n            this.enabled = false;\n            this.log(`Failed to parse Steering Manifest RELOAD-URI: ${reloadUri}`);\n            return;\n          }\n        }\n        this.scheduleRefresh(this.uri || context.url);\n        if (pathwayClones) {\n          this.clonePathways(pathwayClones);\n        }\n        const loadedSteeringData = {\n          steeringManifest: steeringData,\n          url: url.toString()\n        };\n        this.hls.trigger(Events.STEERING_MANIFEST_LOADED, loadedSteeringData);\n        if (pathwayPriority) {\n          this.updatePathwayPriority(pathwayPriority);\n        }\n      },\n      onError: (error, context, networkDetails, stats) => {\n        this.log(`Error loading steering manifest: ${error.code} ${error.text} (${context.url})`);\n        this.stopLoad();\n        if (error.code === 410) {\n          this.enabled = false;\n          this.log(`Steering manifest ${context.url} no longer available`);\n          return;\n        }\n        let ttl = this.timeToLoad * 1000;\n        if (error.code === 429) {\n          const loader = this.loader;\n          if (typeof (loader == null ? void 0 : loader.getResponseHeader) === 'function') {\n            const retryAfter = loader.getResponseHeader('Retry-After');\n            if (retryAfter) {\n              ttl = parseFloat(retryAfter) * 1000;\n            }\n          }\n          this.log(`Steering manifest ${context.url} rate limited`);\n          return;\n        }\n        this.scheduleRefresh(this.uri || context.url, ttl);\n      },\n      onTimeout: (stats, context, networkDetails) => {\n        this.log(`Timeout loading steering manifest (${context.url})`);\n        this.scheduleRefresh(this.uri || context.url);\n      }\n    };\n    this.log(`Requesting steering manifest: ${url}`);\n    this.loader.load(context, loaderConfig, callbacks);\n  }\n  scheduleRefresh(uri, ttlMs = this.timeToLoad * 1000) {\n    this.clearTimeout();\n    this.reloadTimer = self.setTimeout(() => {\n      var _this$hls;\n      const media = (_this$hls = this.hls) == null ? void 0 : _this$hls.media;\n      if (media && !media.ended) {\n        this.loadSteeringManifest(uri);\n        return;\n      }\n      this.scheduleRefresh(uri, this.timeToLoad * 1000);\n    }, ttlMs);\n  }\n}\nfunction cloneRenditionGroups(tracks, groupCloneMap, uriReplacement, cloneId) {\n  if (!tracks) {\n    return;\n  }\n  Object.keys(groupCloneMap).forEach(audioGroupId => {\n    const clonedTracks = tracks.filter(track => track.groupId === audioGroupId).map(track => {\n      const clonedTrack = _extends({}, track);\n      clonedTrack.details = undefined;\n      clonedTrack.attrs = new AttrList(clonedTrack.attrs);\n      clonedTrack.url = clonedTrack.attrs.URI = performUriReplacement(track.url, track.attrs['STABLE-RENDITION-ID'], 'PER-RENDITION-URIS', uriReplacement);\n      clonedTrack.groupId = clonedTrack.attrs['GROUP-ID'] = groupCloneMap[audioGroupId];\n      clonedTrack.attrs['PATHWAY-ID'] = cloneId;\n      return clonedTrack;\n    });\n    tracks.push(...clonedTracks);\n  });\n}\nfunction performUriReplacement(uri, stableId, perOptionKey, uriReplacement) {\n  const {\n    HOST: host,\n    PARAMS: params,\n    [perOptionKey]: perOptionUris\n  } = uriReplacement;\n  let perVariantUri;\n  if (stableId) {\n    perVariantUri = perOptionUris == null ? void 0 : perOptionUris[stableId];\n    if (perVariantUri) {\n      uri = perVariantUri;\n    }\n  }\n  const url = new self.URL(uri);\n  if (host && !perVariantUri) {\n    url.host = host;\n  }\n  if (params) {\n    Object.keys(params).sort().forEach(key => {\n      if (key) {\n        url.searchParams.set(key, params[key]);\n      }\n    });\n  }\n  return url.href;\n}\n\nconst AGE_HEADER_LINE_REGEX = /^age:\\s*[\\d.]+\\s*$/im;\nclass XhrLoader {\n  constructor(config) {\n    this.xhrSetup = void 0;\n    this.requestTimeout = void 0;\n    this.retryTimeout = void 0;\n    this.retryDelay = void 0;\n    this.config = null;\n    this.callbacks = null;\n    this.context = null;\n    this.loader = null;\n    this.stats = void 0;\n    this.xhrSetup = config ? config.xhrSetup || null : null;\n    this.stats = new LoadStats();\n    this.retryDelay = 0;\n  }\n  destroy() {\n    this.callbacks = null;\n    this.abortInternal();\n    this.loader = null;\n    this.config = null;\n    this.context = null;\n    this.xhrSetup = null;\n  }\n  abortInternal() {\n    const loader = this.loader;\n    self.clearTimeout(this.requestTimeout);\n    self.clearTimeout(this.retryTimeout);\n    if (loader) {\n      loader.onreadystatechange = null;\n      loader.onprogress = null;\n      if (loader.readyState !== 4) {\n        this.stats.aborted = true;\n        loader.abort();\n      }\n    }\n  }\n  abort() {\n    var _this$callbacks;\n    this.abortInternal();\n    if ((_this$callbacks = this.callbacks) != null && _this$callbacks.onAbort) {\n      this.callbacks.onAbort(this.stats, this.context, this.loader);\n    }\n  }\n  load(context, config, callbacks) {\n    if (this.stats.loading.start) {\n      throw new Error('Loader can only be used once.');\n    }\n    this.stats.loading.start = self.performance.now();\n    this.context = context;\n    this.config = config;\n    this.callbacks = callbacks;\n    this.loadInternal();\n  }\n  loadInternal() {\n    const {\n      config,\n      context\n    } = this;\n    if (!config || !context) {\n      return;\n    }\n    const xhr = this.loader = new self.XMLHttpRequest();\n    const stats = this.stats;\n    stats.loading.first = 0;\n    stats.loaded = 0;\n    stats.aborted = false;\n    const xhrSetup = this.xhrSetup;\n    if (xhrSetup) {\n      Promise.resolve().then(() => {\n        if (this.loader !== xhr || this.stats.aborted) return;\n        return xhrSetup(xhr, context.url);\n      }).catch(error => {\n        if (this.loader !== xhr || this.stats.aborted) return;\n        xhr.open('GET', context.url, true);\n        return xhrSetup(xhr, context.url);\n      }).then(() => {\n        if (this.loader !== xhr || this.stats.aborted) return;\n        this.openAndSendXhr(xhr, context, config);\n      }).catch(error => {\n        // IE11 throws an exception on xhr.open if attempting to access an HTTP resource over HTTPS\n        this.callbacks.onError({\n          code: xhr.status,\n          text: error.message\n        }, context, xhr, stats);\n        return;\n      });\n    } else {\n      this.openAndSendXhr(xhr, context, config);\n    }\n  }\n  openAndSendXhr(xhr, context, config) {\n    if (!xhr.readyState) {\n      xhr.open('GET', context.url, true);\n    }\n    const headers = context.headers;\n    const {\n      maxTimeToFirstByteMs,\n      maxLoadTimeMs\n    } = config.loadPolicy;\n    if (headers) {\n      for (const header in headers) {\n        xhr.setRequestHeader(header, headers[header]);\n      }\n    }\n    if (context.rangeEnd) {\n      xhr.setRequestHeader('Range', 'bytes=' + context.rangeStart + '-' + (context.rangeEnd - 1));\n    }\n    xhr.onreadystatechange = this.readystatechange.bind(this);\n    xhr.onprogress = this.loadprogress.bind(this);\n    xhr.responseType = context.responseType;\n    // setup timeout before we perform request\n    self.clearTimeout(this.requestTimeout);\n    config.timeout = maxTimeToFirstByteMs && isFiniteNumber(maxTimeToFirstByteMs) ? maxTimeToFirstByteMs : maxLoadTimeMs;\n    this.requestTimeout = self.setTimeout(this.loadtimeout.bind(this), config.timeout);\n    xhr.send();\n  }\n  readystatechange() {\n    const {\n      context,\n      loader: xhr,\n      stats\n    } = this;\n    if (!context || !xhr) {\n      return;\n    }\n    const readyState = xhr.readyState;\n    const config = this.config;\n\n    // don't proceed if xhr has been aborted\n    if (stats.aborted) {\n      return;\n    }\n\n    // >= HEADERS_RECEIVED\n    if (readyState >= 2) {\n      if (stats.loading.first === 0) {\n        stats.loading.first = Math.max(self.performance.now(), stats.loading.start);\n        // readyState >= 2 AND readyState !==4 (readyState = HEADERS_RECEIVED || LOADING) rearm timeout as xhr not finished yet\n        if (config.timeout !== config.loadPolicy.maxLoadTimeMs) {\n          self.clearTimeout(this.requestTimeout);\n          config.timeout = config.loadPolicy.maxLoadTimeMs;\n          this.requestTimeout = self.setTimeout(this.loadtimeout.bind(this), config.loadPolicy.maxLoadTimeMs - (stats.loading.first - stats.loading.start));\n        }\n      }\n      if (readyState === 4) {\n        self.clearTimeout(this.requestTimeout);\n        xhr.onreadystatechange = null;\n        xhr.onprogress = null;\n        const status = xhr.status;\n        // http status between 200 to 299 are all successful\n        const useResponseText = xhr.responseType === 'text' ? xhr.responseText : null;\n        if (status >= 200 && status < 300) {\n          const data = useResponseText != null ? useResponseText : xhr.response;\n          if (data != null) {\n            stats.loading.end = Math.max(self.performance.now(), stats.loading.first);\n            const len = xhr.responseType === 'arraybuffer' ? data.byteLength : data.length;\n            stats.loaded = stats.total = len;\n            stats.bwEstimate = stats.total * 8000 / (stats.loading.end - stats.loading.first);\n            if (!this.callbacks) {\n              return;\n            }\n            const onProgress = this.callbacks.onProgress;\n            if (onProgress) {\n              onProgress(stats, context, data, xhr);\n            }\n            if (!this.callbacks) {\n              return;\n            }\n            const _response = {\n              url: xhr.responseURL,\n              data: data,\n              code: status\n            };\n            this.callbacks.onSuccess(_response, stats, context, xhr);\n            return;\n          }\n        }\n\n        // Handle bad status or nullish response\n        const retryConfig = config.loadPolicy.errorRetry;\n        const retryCount = stats.retry;\n        // if max nb of retries reached or if http status between 400 and 499 (such error cannot be recovered, retrying is useless), return error\n        const response = {\n          url: context.url,\n          data: undefined,\n          code: status\n        };\n        if (shouldRetry(retryConfig, retryCount, false, response)) {\n          this.retry(retryConfig);\n        } else {\n          logger.error(`${status} while loading ${context.url}`);\n          this.callbacks.onError({\n            code: status,\n            text: xhr.statusText\n          }, context, xhr, stats);\n        }\n      }\n    }\n  }\n  loadtimeout() {\n    if (!this.config) return;\n    const retryConfig = this.config.loadPolicy.timeoutRetry;\n    const retryCount = this.stats.retry;\n    if (shouldRetry(retryConfig, retryCount, true)) {\n      this.retry(retryConfig);\n    } else {\n      var _this$context;\n      logger.warn(`timeout while loading ${(_this$context = this.context) == null ? void 0 : _this$context.url}`);\n      const callbacks = this.callbacks;\n      if (callbacks) {\n        this.abortInternal();\n        callbacks.onTimeout(this.stats, this.context, this.loader);\n      }\n    }\n  }\n  retry(retryConfig) {\n    const {\n      context,\n      stats\n    } = this;\n    this.retryDelay = getRetryDelay(retryConfig, stats.retry);\n    stats.retry++;\n    logger.warn(`${status ? 'HTTP Status ' + status : 'Timeout'} while loading ${context == null ? void 0 : context.url}, retrying ${stats.retry}/${retryConfig.maxNumRetry} in ${this.retryDelay}ms`);\n    // abort and reset internal state\n    this.abortInternal();\n    this.loader = null;\n    // schedule retry\n    self.clearTimeout(this.retryTimeout);\n    this.retryTimeout = self.setTimeout(this.loadInternal.bind(this), this.retryDelay);\n  }\n  loadprogress(event) {\n    const stats = this.stats;\n    stats.loaded = event.loaded;\n    if (event.lengthComputable) {\n      stats.total = event.total;\n    }\n  }\n  getCacheAge() {\n    let result = null;\n    if (this.loader && AGE_HEADER_LINE_REGEX.test(this.loader.getAllResponseHeaders())) {\n      const ageHeader = this.loader.getResponseHeader('age');\n      result = ageHeader ? parseFloat(ageHeader) : null;\n    }\n    return result;\n  }\n  getResponseHeader(name) {\n    if (this.loader && new RegExp(`^${name}:\\\\s*[\\\\d.]+\\\\s*$`, 'im').test(this.loader.getAllResponseHeaders())) {\n      return this.loader.getResponseHeader(name);\n    }\n    return null;\n  }\n}\n\nfunction fetchSupported() {\n  if (\n  // @ts-ignore\n  self.fetch && self.AbortController && self.ReadableStream && self.Request) {\n    try {\n      new self.ReadableStream({}); // eslint-disable-line no-new\n      return true;\n    } catch (e) {\n      /* noop */\n    }\n  }\n  return false;\n}\nconst BYTERANGE = /(\\d+)-(\\d+)\\/(\\d+)/;\nclass FetchLoader {\n  constructor(config /* HlsConfig */) {\n    this.fetchSetup = void 0;\n    this.requestTimeout = void 0;\n    this.request = null;\n    this.response = null;\n    this.controller = void 0;\n    this.context = null;\n    this.config = null;\n    this.callbacks = null;\n    this.stats = void 0;\n    this.loader = null;\n    this.fetchSetup = config.fetchSetup || getRequest;\n    this.controller = new self.AbortController();\n    this.stats = new LoadStats();\n  }\n  destroy() {\n    this.loader = this.callbacks = this.context = this.config = this.request = null;\n    this.abortInternal();\n    this.response = null;\n    // @ts-ignore\n    this.fetchSetup = this.controller = this.stats = null;\n  }\n  abortInternal() {\n    if (this.controller && !this.stats.loading.end) {\n      this.stats.aborted = true;\n      this.controller.abort();\n    }\n  }\n  abort() {\n    var _this$callbacks;\n    this.abortInternal();\n    if ((_this$callbacks = this.callbacks) != null && _this$callbacks.onAbort) {\n      this.callbacks.onAbort(this.stats, this.context, this.response);\n    }\n  }\n  load(context, config, callbacks) {\n    const stats = this.stats;\n    if (stats.loading.start) {\n      throw new Error('Loader can only be used once.');\n    }\n    stats.loading.start = self.performance.now();\n    const initParams = getRequestParameters(context, this.controller.signal);\n    const onProgress = callbacks.onProgress;\n    const isArrayBuffer = context.responseType === 'arraybuffer';\n    const LENGTH = isArrayBuffer ? 'byteLength' : 'length';\n    const {\n      maxTimeToFirstByteMs,\n      maxLoadTimeMs\n    } = config.loadPolicy;\n    this.context = context;\n    this.config = config;\n    this.callbacks = callbacks;\n    this.request = this.fetchSetup(context, initParams);\n    self.clearTimeout(this.requestTimeout);\n    config.timeout = maxTimeToFirstByteMs && isFiniteNumber(maxTimeToFirstByteMs) ? maxTimeToFirstByteMs : maxLoadTimeMs;\n    this.requestTimeout = self.setTimeout(() => {\n      this.abortInternal();\n      callbacks.onTimeout(stats, context, this.response);\n    }, config.timeout);\n    self.fetch(this.request).then(response => {\n      this.response = this.loader = response;\n      const first = Math.max(self.performance.now(), stats.loading.start);\n      self.clearTimeout(this.requestTimeout);\n      config.timeout = maxLoadTimeMs;\n      this.requestTimeout = self.setTimeout(() => {\n        this.abortInternal();\n        callbacks.onTimeout(stats, context, this.response);\n      }, maxLoadTimeMs - (first - stats.loading.start));\n      if (!response.ok) {\n        const {\n          status,\n          statusText\n        } = response;\n        throw new FetchError(statusText || 'fetch, bad network response', status, response);\n      }\n      stats.loading.first = first;\n      stats.total = getContentLength(response.headers) || stats.total;\n      if (onProgress && isFiniteNumber(config.highWaterMark)) {\n        return this.loadProgressively(response, stats, context, config.highWaterMark, onProgress);\n      }\n      if (isArrayBuffer) {\n        return response.arrayBuffer();\n      }\n      if (context.responseType === 'json') {\n        return response.json();\n      }\n      return response.text();\n    }).then(responseData => {\n      const response = this.response;\n      if (!response) {\n        throw new Error('loader destroyed');\n      }\n      self.clearTimeout(this.requestTimeout);\n      stats.loading.end = Math.max(self.performance.now(), stats.loading.first);\n      const total = responseData[LENGTH];\n      if (total) {\n        stats.loaded = stats.total = total;\n      }\n      const loaderResponse = {\n        url: response.url,\n        data: responseData,\n        code: response.status\n      };\n      if (onProgress && !isFiniteNumber(config.highWaterMark)) {\n        onProgress(stats, context, responseData, response);\n      }\n      callbacks.onSuccess(loaderResponse, stats, context, response);\n    }).catch(error => {\n      self.clearTimeout(this.requestTimeout);\n      if (stats.aborted) {\n        return;\n      }\n      // CORS errors result in an undefined code. Set it to 0 here to align with XHR's behavior\n      // when destroying, 'error' itself can be undefined\n      const code = !error ? 0 : error.code || 0;\n      const text = !error ? null : error.message;\n      callbacks.onError({\n        code,\n        text\n      }, context, error ? error.details : null, stats);\n    });\n  }\n  getCacheAge() {\n    let result = null;\n    if (this.response) {\n      const ageHeader = this.response.headers.get('age');\n      result = ageHeader ? parseFloat(ageHeader) : null;\n    }\n    return result;\n  }\n  getResponseHeader(name) {\n    return this.response ? this.response.headers.get(name) : null;\n  }\n  loadProgressively(response, stats, context, highWaterMark = 0, onProgress) {\n    const chunkCache = new ChunkCache();\n    const reader = response.body.getReader();\n    const pump = () => {\n      return reader.read().then(data => {\n        if (data.done) {\n          if (chunkCache.dataLength) {\n            onProgress(stats, context, chunkCache.flush(), response);\n          }\n          return Promise.resolve(new ArrayBuffer(0));\n        }\n        const chunk = data.value;\n        const len = chunk.length;\n        stats.loaded += len;\n        if (len < highWaterMark || chunkCache.dataLength) {\n          // The current chunk is too small to to be emitted or the cache already has data\n          // Push it to the cache\n          chunkCache.push(chunk);\n          if (chunkCache.dataLength >= highWaterMark) {\n            // flush in order to join the typed arrays\n            onProgress(stats, context, chunkCache.flush(), response);\n          }\n        } else {\n          // If there's nothing cached already, and the chache is large enough\n          // just emit the progress event\n          onProgress(stats, context, chunk, response);\n        }\n        return pump();\n      }).catch(() => {\n        /* aborted */\n        return Promise.reject();\n      });\n    };\n    return pump();\n  }\n}\nfunction getRequestParameters(context, signal) {\n  const initParams = {\n    method: 'GET',\n    mode: 'cors',\n    credentials: 'same-origin',\n    signal,\n    headers: new self.Headers(_extends({}, context.headers))\n  };\n  if (context.rangeEnd) {\n    initParams.headers.set('Range', 'bytes=' + context.rangeStart + '-' + String(context.rangeEnd - 1));\n  }\n  return initParams;\n}\nfunction getByteRangeLength(byteRangeHeader) {\n  const result = BYTERANGE.exec(byteRangeHeader);\n  if (result) {\n    return parseInt(result[2]) - parseInt(result[1]) + 1;\n  }\n}\nfunction getContentLength(headers) {\n  const contentRange = headers.get('Content-Range');\n  if (contentRange) {\n    const byteRangeLength = getByteRangeLength(contentRange);\n    if (isFiniteNumber(byteRangeLength)) {\n      return byteRangeLength;\n    }\n  }\n  const contentLength = headers.get('Content-Length');\n  if (contentLength) {\n    return parseInt(contentLength);\n  }\n}\nfunction getRequest(context, initParams) {\n  return new self.Request(context.url, initParams);\n}\nclass FetchError extends Error {\n  constructor(message, code, details) {\n    super(message);\n    this.code = void 0;\n    this.details = void 0;\n    this.code = code;\n    this.details = details;\n  }\n}\n\nconst WHITESPACE_CHAR = /\\s/;\nconst Cues = {\n  newCue(track, startTime, endTime, captionScreen) {\n    const result = [];\n    let row;\n    // the type data states this is VTTCue, but it can potentially be a TextTrackCue on old browsers\n    let cue;\n    let indenting;\n    let indent;\n    let text;\n    const Cue = self.VTTCue || self.TextTrackCue;\n    for (let r = 0; r < captionScreen.rows.length; r++) {\n      row = captionScreen.rows[r];\n      indenting = true;\n      indent = 0;\n      text = '';\n      if (!row.isEmpty()) {\n        var _track$cues;\n        for (let c = 0; c < row.chars.length; c++) {\n          if (WHITESPACE_CHAR.test(row.chars[c].uchar) && indenting) {\n            indent++;\n          } else {\n            text += row.chars[c].uchar;\n            indenting = false;\n          }\n        }\n        // To be used for cleaning-up orphaned roll-up captions\n        row.cueStartTime = startTime;\n\n        // Give a slight bump to the endTime if it's equal to startTime to avoid a SyntaxError in IE\n        if (startTime === endTime) {\n          endTime += 0.0001;\n        }\n        if (indent >= 16) {\n          indent--;\n        } else {\n          indent++;\n        }\n        const cueText = fixLineBreaks(text.trim());\n        const id = generateCueId(startTime, endTime, cueText);\n\n        // If this cue already exists in the track do not push it\n        if (!(track != null && (_track$cues = track.cues) != null && _track$cues.getCueById(id))) {\n          cue = new Cue(startTime, endTime, cueText);\n          cue.id = id;\n          cue.line = r + 1;\n          cue.align = 'left';\n          // Clamp the position between 10 and 80 percent (CEA-608 PAC indent code)\n          // https://dvcs.w3.org/hg/text-tracks/raw-file/default/608toVTT/608toVTT.html#positioning-in-cea-608\n          // Firefox throws an exception and captions break with out of bounds 0-100 values\n          cue.position = 10 + Math.min(80, Math.floor(indent * 8 / 32) * 10);\n          result.push(cue);\n        }\n      }\n    }\n    if (track && result.length) {\n      // Sort bottom cues in reverse order so that they render in line order when overlapping in Chrome\n      result.sort((cueA, cueB) => {\n        if (cueA.line === 'auto' || cueB.line === 'auto') {\n          return 0;\n        }\n        if (cueA.line > 8 && cueB.line > 8) {\n          return cueB.line - cueA.line;\n        }\n        return cueA.line - cueB.line;\n      });\n      result.forEach(cue => addCueToTrack(track, cue));\n    }\n    return result;\n  }\n};\n\n/**\n * @deprecated use fragLoadPolicy.default\n */\n\n/**\n * @deprecated use manifestLoadPolicy.default and playlistLoadPolicy.default\n */\n\nconst defaultLoadPolicy = {\n  maxTimeToFirstByteMs: 8000,\n  maxLoadTimeMs: 20000,\n  timeoutRetry: null,\n  errorRetry: null\n};\n\n/**\n * @ignore\n * If possible, keep hlsDefaultConfig shallow\n * It is cloned whenever a new Hls instance is created, by keeping the config\n * shallow the properties are cloned, and we don't end up manipulating the default\n */\nconst hlsDefaultConfig = _objectSpread2(_objectSpread2({\n  autoStartLoad: true,\n  // used by stream-controller\n  startPosition: -1,\n  // used by stream-controller\n  defaultAudioCodec: undefined,\n  // used by stream-controller\n  debug: false,\n  // used by logger\n  capLevelOnFPSDrop: false,\n  // used by fps-controller\n  capLevelToPlayerSize: false,\n  // used by cap-level-controller\n  ignoreDevicePixelRatio: false,\n  // used by cap-level-controller\n  preferManagedMediaSource: true,\n  initialLiveManifestSize: 1,\n  // used by stream-controller\n  maxBufferLength: 30,\n  // used by stream-controller\n  backBufferLength: Infinity,\n  // used by buffer-controller\n  frontBufferFlushThreshold: Infinity,\n  maxBufferSize: 60 * 1000 * 1000,\n  // used by stream-controller\n  maxBufferHole: 0.1,\n  // used by stream-controller\n  highBufferWatchdogPeriod: 2,\n  // used by stream-controller\n  nudgeOffset: 0.1,\n  // used by stream-controller\n  nudgeMaxRetry: 3,\n  // used by stream-controller\n  maxFragLookUpTolerance: 0.25,\n  // used by stream-controller\n  liveSyncDurationCount: 3,\n  // used by latency-controller\n  liveMaxLatencyDurationCount: Infinity,\n  // used by latency-controller\n  liveSyncDuration: undefined,\n  // used by latency-controller\n  liveMaxLatencyDuration: undefined,\n  // used by latency-controller\n  maxLiveSyncPlaybackRate: 1,\n  // used by latency-controller\n  liveDurationInfinity: false,\n  // used by buffer-controller\n  /**\n   * @deprecated use backBufferLength\n   */\n  liveBackBufferLength: null,\n  // used by buffer-controller\n  maxMaxBufferLength: 600,\n  // used by stream-controller\n  enableWorker: true,\n  // used by transmuxer\n  workerPath: null,\n  // used by transmuxer\n  enableSoftwareAES: true,\n  // used by decrypter\n  startLevel: undefined,\n  // used by level-controller\n  startFragPrefetch: false,\n  // used by stream-controller\n  fpsDroppedMonitoringPeriod: 5000,\n  // used by fps-controller\n  fpsDroppedMonitoringThreshold: 0.2,\n  // used by fps-controller\n  appendErrorMaxRetry: 3,\n  // used by buffer-controller\n  loader: XhrLoader,\n  // loader: FetchLoader,\n  fLoader: undefined,\n  // used by fragment-loader\n  pLoader: undefined,\n  // used by playlist-loader\n  xhrSetup: undefined,\n  // used by xhr-loader\n  licenseXhrSetup: undefined,\n  // used by eme-controller\n  licenseResponseCallback: undefined,\n  // used by eme-controller\n  abrController: AbrController,\n  bufferController: BufferController,\n  capLevelController: CapLevelController,\n  errorController: ErrorController,\n  fpsController: FPSController,\n  stretchShortVideoTrack: false,\n  // used by mp4-remuxer\n  maxAudioFramesDrift: 1,\n  // used by mp4-remuxer\n  forceKeyFrameOnDiscontinuity: true,\n  // used by ts-demuxer\n  abrEwmaFastLive: 3,\n  // used by abr-controller\n  abrEwmaSlowLive: 9,\n  // used by abr-controller\n  abrEwmaFastVoD: 3,\n  // used by abr-controller\n  abrEwmaSlowVoD: 9,\n  // used by abr-controller\n  abrEwmaDefaultEstimate: 5e5,\n  // 500 kbps  // used by abr-controller\n  abrEwmaDefaultEstimateMax: 5e6,\n  // 5 mbps\n  abrBandWidthFactor: 0.95,\n  // used by abr-controller\n  abrBandWidthUpFactor: 0.7,\n  // used by abr-controller\n  abrMaxWithRealBitrate: false,\n  // used by abr-controller\n  maxStarvationDelay: 4,\n  // used by abr-controller\n  maxLoadingDelay: 4,\n  // used by abr-controller\n  minAutoBitrate: 0,\n  // used by hls\n  emeEnabled: false,\n  // used by eme-controller\n  widevineLicenseUrl: undefined,\n  // used by eme-controller\n  drmSystems: {},\n  // used by eme-controller\n  drmSystemOptions: {},\n  // used by eme-controller\n  requestMediaKeySystemAccessFunc: requestMediaKeySystemAccess ,\n  // used by eme-controller\n  testBandwidth: true,\n  progressive: false,\n  lowLatencyMode: true,\n  cmcd: undefined,\n  enableDateRangeMetadataCues: true,\n  enableEmsgMetadataCues: true,\n  enableID3MetadataCues: true,\n  useMediaCapabilities: true,\n  certLoadPolicy: {\n    default: defaultLoadPolicy\n  },\n  keyLoadPolicy: {\n    default: {\n      maxTimeToFirstByteMs: 8000,\n      maxLoadTimeMs: 20000,\n      timeoutRetry: {\n        maxNumRetry: 1,\n        retryDelayMs: 1000,\n        maxRetryDelayMs: 20000,\n        backoff: 'linear'\n      },\n      errorRetry: {\n        maxNumRetry: 8,\n        retryDelayMs: 1000,\n        maxRetryDelayMs: 20000,\n        backoff: 'linear'\n      }\n    }\n  },\n  manifestLoadPolicy: {\n    default: {\n      maxTimeToFirstByteMs: Infinity,\n      maxLoadTimeMs: 20000,\n      timeoutRetry: {\n        maxNumRetry: 2,\n        retryDelayMs: 0,\n        maxRetryDelayMs: 0\n      },\n      errorRetry: {\n        maxNumRetry: 1,\n        retryDelayMs: 1000,\n        maxRetryDelayMs: 8000\n      }\n    }\n  },\n  playlistLoadPolicy: {\n    default: {\n      maxTimeToFirstByteMs: 10000,\n      maxLoadTimeMs: 20000,\n      timeoutRetry: {\n        maxNumRetry: 2,\n        retryDelayMs: 0,\n        maxRetryDelayMs: 0\n      },\n      errorRetry: {\n        maxNumRetry: 2,\n        retryDelayMs: 1000,\n        maxRetryDelayMs: 8000\n      }\n    }\n  },\n  fragLoadPolicy: {\n    default: {\n      maxTimeToFirstByteMs: 10000,\n      maxLoadTimeMs: 120000,\n      timeoutRetry: {\n        maxNumRetry: 4,\n        retryDelayMs: 0,\n        maxRetryDelayMs: 0\n      },\n      errorRetry: {\n        maxNumRetry: 6,\n        retryDelayMs: 1000,\n        maxRetryDelayMs: 8000\n      }\n    }\n  },\n  steeringManifestLoadPolicy: {\n    default: {\n      maxTimeToFirstByteMs: 10000,\n      maxLoadTimeMs: 20000,\n      timeoutRetry: {\n        maxNumRetry: 2,\n        retryDelayMs: 0,\n        maxRetryDelayMs: 0\n      },\n      errorRetry: {\n        maxNumRetry: 1,\n        retryDelayMs: 1000,\n        maxRetryDelayMs: 8000\n      }\n    } \n  },\n  // These default settings are deprecated in favor of the above policies\n  // and are maintained for backwards compatibility\n  manifestLoadingTimeOut: 10000,\n  manifestLoadingMaxRetry: 1,\n  manifestLoadingRetryDelay: 1000,\n  manifestLoadingMaxRetryTimeout: 64000,\n  levelLoadingTimeOut: 10000,\n  levelLoadingMaxRetry: 4,\n  levelLoadingRetryDelay: 1000,\n  levelLoadingMaxRetryTimeout: 64000,\n  fragLoadingTimeOut: 20000,\n  fragLoadingMaxRetry: 6,\n  fragLoadingRetryDelay: 1000,\n  fragLoadingMaxRetryTimeout: 64000\n}, timelineConfig()), {}, {\n  subtitleStreamController: SubtitleStreamController ,\n  subtitleTrackController: SubtitleTrackController ,\n  timelineController: TimelineController ,\n  audioStreamController: AudioStreamController ,\n  audioTrackController: AudioTrackController ,\n  emeController: EMEController ,\n  cmcdController: CMCDController ,\n  contentSteeringController: ContentSteeringController \n});\nfunction timelineConfig() {\n  return {\n    cueHandler: Cues,\n    // used by timeline-controller\n    enableWebVTT: true,\n    // used by timeline-controller\n    enableIMSC1: true,\n    // used by timeline-controller\n    enableCEA708Captions: true,\n    // used by timeline-controller\n    captionsTextTrack1Label: 'English',\n    // used by timeline-controller\n    captionsTextTrack1LanguageCode: 'en',\n    // used by timeline-controller\n    captionsTextTrack2Label: 'Spanish',\n    // used by timeline-controller\n    captionsTextTrack2LanguageCode: 'es',\n    // used by timeline-controller\n    captionsTextTrack3Label: 'Unknown CC',\n    // used by timeline-controller\n    captionsTextTrack3LanguageCode: '',\n    // used by timeline-controller\n    captionsTextTrack4Label: 'Unknown CC',\n    // used by timeline-controller\n    captionsTextTrack4LanguageCode: '',\n    // used by timeline-controller\n    renderTextTracksNatively: true\n  };\n}\n\n/**\n * @ignore\n */\nfunction mergeConfig(defaultConfig, userConfig) {\n  if ((userConfig.liveSyncDurationCount || userConfig.liveMaxLatencyDurationCount) && (userConfig.liveSyncDuration || userConfig.liveMaxLatencyDuration)) {\n    throw new Error(\"Illegal hls.js config: don't mix up liveSyncDurationCount/liveMaxLatencyDurationCount and liveSyncDuration/liveMaxLatencyDuration\");\n  }\n  if (userConfig.liveMaxLatencyDurationCount !== undefined && (userConfig.liveSyncDurationCount === undefined || userConfig.liveMaxLatencyDurationCount <= userConfig.liveSyncDurationCount)) {\n    throw new Error('Illegal hls.js config: \"liveMaxLatencyDurationCount\" must be greater than \"liveSyncDurationCount\"');\n  }\n  if (userConfig.liveMaxLatencyDuration !== undefined && (userConfig.liveSyncDuration === undefined || userConfig.liveMaxLatencyDuration <= userConfig.liveSyncDuration)) {\n    throw new Error('Illegal hls.js config: \"liveMaxLatencyDuration\" must be greater than \"liveSyncDuration\"');\n  }\n  const defaultsCopy = deepCpy(defaultConfig);\n\n  // Backwards compatibility with deprecated config values\n  const deprecatedSettingTypes = ['manifest', 'level', 'frag'];\n  const deprecatedSettings = ['TimeOut', 'MaxRetry', 'RetryDelay', 'MaxRetryTimeout'];\n  deprecatedSettingTypes.forEach(type => {\n    const policyName = `${type === 'level' ? 'playlist' : type}LoadPolicy`;\n    const policyNotSet = userConfig[policyName] === undefined;\n    const report = [];\n    deprecatedSettings.forEach(setting => {\n      const deprecatedSetting = `${type}Loading${setting}`;\n      const value = userConfig[deprecatedSetting];\n      if (value !== undefined && policyNotSet) {\n        report.push(deprecatedSetting);\n        const settings = defaultsCopy[policyName].default;\n        userConfig[policyName] = {\n          default: settings\n        };\n        switch (setting) {\n          case 'TimeOut':\n            settings.maxLoadTimeMs = value;\n            settings.maxTimeToFirstByteMs = value;\n            break;\n          case 'MaxRetry':\n            settings.errorRetry.maxNumRetry = value;\n            settings.timeoutRetry.maxNumRetry = value;\n            break;\n          case 'RetryDelay':\n            settings.errorRetry.retryDelayMs = value;\n            settings.timeoutRetry.retryDelayMs = value;\n            break;\n          case 'MaxRetryTimeout':\n            settings.errorRetry.maxRetryDelayMs = value;\n            settings.timeoutRetry.maxRetryDelayMs = value;\n            break;\n        }\n      }\n    });\n    if (report.length) {\n      logger.warn(`hls.js config: \"${report.join('\", \"')}\" setting(s) are deprecated, use \"${policyName}\": ${JSON.stringify(userConfig[policyName])}`);\n    }\n  });\n  return _objectSpread2(_objectSpread2({}, defaultsCopy), userConfig);\n}\nfunction deepCpy(obj) {\n  if (obj && typeof obj === 'object') {\n    if (Array.isArray(obj)) {\n      return obj.map(deepCpy);\n    }\n    return Object.keys(obj).reduce((result, key) => {\n      result[key] = deepCpy(obj[key]);\n      return result;\n    }, {});\n  }\n  return obj;\n}\n\n/**\n * @ignore\n */\nfunction enableStreamingMode(config) {\n  const currentLoader = config.loader;\n  if (currentLoader !== FetchLoader && currentLoader !== XhrLoader) {\n    // If a developer has configured their own loader, respect that choice\n    logger.log('[config]: Custom loader detected, cannot enable progressive streaming');\n    config.progressive = false;\n  } else {\n    const canStreamProgressively = fetchSupported();\n    if (canStreamProgressively) {\n      config.loader = FetchLoader;\n      config.progressive = true;\n      config.enableSoftwareAES = true;\n      logger.log('[config]: Progressive streaming enabled, using FetchLoader');\n    }\n  }\n}\n\nlet chromeOrFirefox;\nclass LevelController extends BasePlaylistController {\n  constructor(hls, contentSteeringController) {\n    super(hls, '[level-controller]');\n    this._levels = [];\n    this._firstLevel = -1;\n    this._maxAutoLevel = -1;\n    this._startLevel = void 0;\n    this.currentLevel = null;\n    this.currentLevelIndex = -1;\n    this.manualLevelIndex = -1;\n    this.steering = void 0;\n    this.onParsedComplete = void 0;\n    this.steering = contentSteeringController;\n    this._registerListeners();\n  }\n  _registerListeners() {\n    const {\n      hls\n    } = this;\n    hls.on(Events.MANIFEST_LOADING, this.onManifestLoading, this);\n    hls.on(Events.MANIFEST_LOADED, this.onManifestLoaded, this);\n    hls.on(Events.LEVEL_LOADED, this.onLevelLoaded, this);\n    hls.on(Events.LEVELS_UPDATED, this.onLevelsUpdated, this);\n    hls.on(Events.FRAG_BUFFERED, this.onFragBuffered, this);\n    hls.on(Events.ERROR, this.onError, this);\n  }\n  _unregisterListeners() {\n    const {\n      hls\n    } = this;\n    hls.off(Events.MANIFEST_LOADING, this.onManifestLoading, this);\n    hls.off(Events.MANIFEST_LOADED, this.onManifestLoaded, this);\n    hls.off(Events.LEVEL_LOADED, this.onLevelLoaded, this);\n    hls.off(Events.LEVELS_UPDATED, this.onLevelsUpdated, this);\n    hls.off(Events.FRAG_BUFFERED, this.onFragBuffered, this);\n    hls.off(Events.ERROR, this.onError, this);\n  }\n  destroy() {\n    this._unregisterListeners();\n    this.steering = null;\n    this.resetLevels();\n    super.destroy();\n  }\n  stopLoad() {\n    const levels = this._levels;\n\n    // clean up live level details to force reload them, and reset load errors\n    levels.forEach(level => {\n      level.loadError = 0;\n      level.fragmentError = 0;\n    });\n    super.stopLoad();\n  }\n  resetLevels() {\n    this._startLevel = undefined;\n    this.manualLevelIndex = -1;\n    this.currentLevelIndex = -1;\n    this.currentLevel = null;\n    this._levels = [];\n    this._maxAutoLevel = -1;\n  }\n  onManifestLoading(event, data) {\n    this.resetLevels();\n  }\n  onManifestLoaded(event, data) {\n    const preferManagedMediaSource = this.hls.config.preferManagedMediaSource;\n    const levels = [];\n    const redundantSet = {};\n    const generatePathwaySet = {};\n    let resolutionFound = false;\n    let videoCodecFound = false;\n    let audioCodecFound = false;\n    data.levels.forEach(levelParsed => {\n      var _audioCodec, _videoCodec;\n      const attributes = levelParsed.attrs;\n\n      // erase audio codec info if browser does not support mp4a.40.34.\n      // demuxer will autodetect codec and fallback to mpeg/audio\n      let {\n        audioCodec,\n        videoCodec\n      } = levelParsed;\n      if (((_audioCodec = audioCodec) == null ? void 0 : _audioCodec.indexOf('mp4a.40.34')) !== -1) {\n        chromeOrFirefox || (chromeOrFirefox = /chrome|firefox/i.test(navigator.userAgent));\n        if (chromeOrFirefox) {\n          levelParsed.audioCodec = audioCodec = undefined;\n        }\n      }\n      if (audioCodec) {\n        levelParsed.audioCodec = audioCodec = getCodecCompatibleName(audioCodec, preferManagedMediaSource);\n      }\n      if (((_videoCodec = videoCodec) == null ? void 0 : _videoCodec.indexOf('avc1')) === 0) {\n        videoCodec = levelParsed.videoCodec = convertAVC1ToAVCOTI(videoCodec);\n      }\n\n      // only keep levels with supported audio/video codecs\n      const {\n        width,\n        height,\n        unknownCodecs\n      } = levelParsed;\n      resolutionFound || (resolutionFound = !!(width && height));\n      videoCodecFound || (videoCodecFound = !!videoCodec);\n      audioCodecFound || (audioCodecFound = !!audioCodec);\n      if (unknownCodecs != null && unknownCodecs.length || audioCodec && !areCodecsMediaSourceSupported(audioCodec, 'audio', preferManagedMediaSource) || videoCodec && !areCodecsMediaSourceSupported(videoCodec, 'video', preferManagedMediaSource)) {\n        return;\n      }\n      const {\n        CODECS,\n        'FRAME-RATE': FRAMERATE,\n        'HDCP-LEVEL': HDCP,\n        'PATHWAY-ID': PATHWAY,\n        RESOLUTION,\n        'VIDEO-RANGE': VIDEO_RANGE\n      } = attributes;\n      const contentSteeringPrefix = `${PATHWAY || '.'}-`;\n      const levelKey = `${contentSteeringPrefix}${levelParsed.bitrate}-${RESOLUTION}-${FRAMERATE}-${CODECS}-${VIDEO_RANGE}-${HDCP}`;\n      if (!redundantSet[levelKey]) {\n        const level = new Level(levelParsed);\n        redundantSet[levelKey] = level;\n        generatePathwaySet[levelKey] = 1;\n        levels.push(level);\n      } else if (redundantSet[levelKey].uri !== levelParsed.url && !levelParsed.attrs['PATHWAY-ID']) {\n        // Assign Pathway IDs to Redundant Streams (default Pathways is \".\". Redundant Streams \"..\", \"...\", and so on.)\n        // Content Steering controller to handles Pathway fallback on error\n        const pathwayCount = generatePathwaySet[levelKey] += 1;\n        levelParsed.attrs['PATHWAY-ID'] = new Array(pathwayCount + 1).join('.');\n        const level = new Level(levelParsed);\n        redundantSet[levelKey] = level;\n        levels.push(level);\n      } else {\n        redundantSet[levelKey].addGroupId('audio', attributes.AUDIO);\n        redundantSet[levelKey].addGroupId('text', attributes.SUBTITLES);\n      }\n    });\n    this.filterAndSortMediaOptions(levels, data, resolutionFound, videoCodecFound, audioCodecFound);\n  }\n  filterAndSortMediaOptions(filteredLevels, data, resolutionFound, videoCodecFound, audioCodecFound) {\n    let audioTracks = [];\n    let subtitleTracks = [];\n    let levels = filteredLevels;\n\n    // remove audio-only and invalid video-range levels if we also have levels with video codecs or RESOLUTION signalled\n    if ((resolutionFound || videoCodecFound) && audioCodecFound) {\n      levels = levels.filter(({\n        videoCodec,\n        videoRange,\n        width,\n        height\n      }) => (!!videoCodec || !!(width && height)) && isVideoRange(videoRange));\n    }\n    if (levels.length === 0) {\n      // Dispatch error after MANIFEST_LOADED is done propagating\n      Promise.resolve().then(() => {\n        if (this.hls) {\n          if (data.levels.length) {\n            this.warn(`One or more CODECS in variant not supported: ${JSON.stringify(data.levels[0].attrs)}`);\n          }\n          const error = new Error('no level with compatible codecs found in manifest');\n          this.hls.trigger(Events.ERROR, {\n            type: ErrorTypes.MEDIA_ERROR,\n            details: ErrorDetails.MANIFEST_INCOMPATIBLE_CODECS_ERROR,\n            fatal: true,\n            url: data.url,\n            error,\n            reason: error.message\n          });\n        }\n      });\n      return;\n    }\n    if (data.audioTracks) {\n      const {\n        preferManagedMediaSource\n      } = this.hls.config;\n      audioTracks = data.audioTracks.filter(track => !track.audioCodec || areCodecsMediaSourceSupported(track.audioCodec, 'audio', preferManagedMediaSource));\n      // Assign ids after filtering as array indices by group-id\n      assignTrackIdsByGroup(audioTracks);\n    }\n    if (data.subtitles) {\n      subtitleTracks = data.subtitles;\n      assignTrackIdsByGroup(subtitleTracks);\n    }\n    // start bitrate is the first bitrate of the manifest\n    const unsortedLevels = levels.slice(0);\n    // sort levels from lowest to highest\n    levels.sort((a, b) => {\n      if (a.attrs['HDCP-LEVEL'] !== b.attrs['HDCP-LEVEL']) {\n        return (a.attrs['HDCP-LEVEL'] || '') > (b.attrs['HDCP-LEVEL'] || '') ? 1 : -1;\n      }\n      // sort on height before bitrate for cap-level-controller\n      if (resolutionFound && a.height !== b.height) {\n        return a.height - b.height;\n      }\n      if (a.frameRate !== b.frameRate) {\n        return a.frameRate - b.frameRate;\n      }\n      if (a.videoRange !== b.videoRange) {\n        return VideoRangeValues.indexOf(a.videoRange) - VideoRangeValues.indexOf(b.videoRange);\n      }\n      if (a.videoCodec !== b.videoCodec) {\n        const valueA = videoCodecPreferenceValue(a.videoCodec);\n        const valueB = videoCodecPreferenceValue(b.videoCodec);\n        if (valueA !== valueB) {\n          return valueB - valueA;\n        }\n      }\n      if (a.uri === b.uri && a.codecSet !== b.codecSet) {\n        const valueA = codecsSetSelectionPreferenceValue(a.codecSet);\n        const valueB = codecsSetSelectionPreferenceValue(b.codecSet);\n        if (valueA !== valueB) {\n          return valueB - valueA;\n        }\n      }\n      if (a.averageBitrate !== b.averageBitrate) {\n        return a.averageBitrate - b.averageBitrate;\n      }\n      return 0;\n    });\n    let firstLevelInPlaylist = unsortedLevels[0];\n    if (this.steering) {\n      levels = this.steering.filterParsedLevels(levels);\n      if (levels.length !== unsortedLevels.length) {\n        for (let i = 0; i < unsortedLevels.length; i++) {\n          if (unsortedLevels[i].pathwayId === levels[0].pathwayId) {\n            firstLevelInPlaylist = unsortedLevels[i];\n            break;\n          }\n        }\n      }\n    }\n    this._levels = levels;\n\n    // find index of first level in sorted levels\n    for (let i = 0; i < levels.length; i++) {\n      if (levels[i] === firstLevelInPlaylist) {\n        var _this$hls$userConfig;\n        this._firstLevel = i;\n        const firstLevelBitrate = firstLevelInPlaylist.bitrate;\n        const bandwidthEstimate = this.hls.bandwidthEstimate;\n        this.log(`manifest loaded, ${levels.length} level(s) found, first bitrate: ${firstLevelBitrate}`);\n        // Update default bwe to first variant bitrate as long it has not been configured or set\n        if (((_this$hls$userConfig = this.hls.userConfig) == null ? void 0 : _this$hls$userConfig.abrEwmaDefaultEstimate) === undefined) {\n          const startingBwEstimate = Math.min(firstLevelBitrate, this.hls.config.abrEwmaDefaultEstimateMax);\n          if (startingBwEstimate > bandwidthEstimate && bandwidthEstimate === hlsDefaultConfig.abrEwmaDefaultEstimate) {\n            this.hls.bandwidthEstimate = startingBwEstimate;\n          }\n        }\n        break;\n      }\n    }\n\n    // Audio is only alternate if manifest include a URI along with the audio group tag,\n    // and this is not an audio-only stream where levels contain audio-only\n    const audioOnly = audioCodecFound && !videoCodecFound;\n    const edata = {\n      levels,\n      audioTracks,\n      subtitleTracks,\n      sessionData: data.sessionData,\n      sessionKeys: data.sessionKeys,\n      firstLevel: this._firstLevel,\n      stats: data.stats,\n      audio: audioCodecFound,\n      video: videoCodecFound,\n      altAudio: !audioOnly && audioTracks.some(t => !!t.url)\n    };\n    this.hls.trigger(Events.MANIFEST_PARSED, edata);\n\n    // Initiate loading after all controllers have received MANIFEST_PARSED\n    if (this.hls.config.autoStartLoad || this.hls.forceStartLoad) {\n      this.hls.startLoad(this.hls.config.startPosition);\n    }\n  }\n  get levels() {\n    if (this._levels.length === 0) {\n      return null;\n    }\n    return this._levels;\n  }\n  get level() {\n    return this.currentLevelIndex;\n  }\n  set level(newLevel) {\n    const levels = this._levels;\n    if (levels.length === 0) {\n      return;\n    }\n    // check if level idx is valid\n    if (newLevel < 0 || newLevel >= levels.length) {\n      // invalid level id given, trigger error\n      const error = new Error('invalid level idx');\n      const fatal = newLevel < 0;\n      this.hls.trigger(Events.ERROR, {\n        type: ErrorTypes.OTHER_ERROR,\n        details: ErrorDetails.LEVEL_SWITCH_ERROR,\n        level: newLevel,\n        fatal,\n        error,\n        reason: error.message\n      });\n      if (fatal) {\n        return;\n      }\n      newLevel = Math.min(newLevel, levels.length - 1);\n    }\n    const lastLevelIndex = this.currentLevelIndex;\n    const lastLevel = this.currentLevel;\n    const lastPathwayId = lastLevel ? lastLevel.attrs['PATHWAY-ID'] : undefined;\n    const level = levels[newLevel];\n    const pathwayId = level.attrs['PATHWAY-ID'];\n    this.currentLevelIndex = newLevel;\n    this.currentLevel = level;\n    if (lastLevelIndex === newLevel && level.details && lastLevel && lastPathwayId === pathwayId) {\n      return;\n    }\n    this.log(`Switching to level ${newLevel} (${level.height ? level.height + 'p ' : ''}${level.videoRange ? level.videoRange + ' ' : ''}${level.codecSet ? level.codecSet + ' ' : ''}@${level.bitrate})${pathwayId ? ' with Pathway ' + pathwayId : ''} from level ${lastLevelIndex}${lastPathwayId ? ' with Pathway ' + lastPathwayId : ''}`);\n    const levelSwitchingData = {\n      level: newLevel,\n      attrs: level.attrs,\n      details: level.details,\n      bitrate: level.bitrate,\n      averageBitrate: level.averageBitrate,\n      maxBitrate: level.maxBitrate,\n      realBitrate: level.realBitrate,\n      width: level.width,\n      height: level.height,\n      codecSet: level.codecSet,\n      audioCodec: level.audioCodec,\n      videoCodec: level.videoCodec,\n      audioGroups: level.audioGroups,\n      subtitleGroups: level.subtitleGroups,\n      loaded: level.loaded,\n      loadError: level.loadError,\n      fragmentError: level.fragmentError,\n      name: level.name,\n      id: level.id,\n      uri: level.uri,\n      url: level.url,\n      urlId: 0,\n      audioGroupIds: level.audioGroupIds,\n      textGroupIds: level.textGroupIds\n    };\n    this.hls.trigger(Events.LEVEL_SWITCHING, levelSwitchingData);\n    // check if we need to load playlist for this level\n    const levelDetails = level.details;\n    if (!levelDetails || levelDetails.live) {\n      // level not retrieved yet, or live playlist we need to (re)load it\n      const hlsUrlParameters = this.switchParams(level.uri, lastLevel == null ? void 0 : lastLevel.details, levelDetails);\n      this.loadPlaylist(hlsUrlParameters);\n    }\n  }\n  get manualLevel() {\n    return this.manualLevelIndex;\n  }\n  set manualLevel(newLevel) {\n    this.manualLevelIndex = newLevel;\n    if (this._startLevel === undefined) {\n      this._startLevel = newLevel;\n    }\n    if (newLevel !== -1) {\n      this.level = newLevel;\n    }\n  }\n  get firstLevel() {\n    return this._firstLevel;\n  }\n  set firstLevel(newLevel) {\n    this._firstLevel = newLevel;\n  }\n  get startLevel() {\n    // Setting hls.startLevel (this._startLevel) overrides config.startLevel\n    if (this._startLevel === undefined) {\n      const configStartLevel = this.hls.config.startLevel;\n      if (configStartLevel !== undefined) {\n        return configStartLevel;\n      }\n      return this.hls.firstAutoLevel;\n    }\n    return this._startLevel;\n  }\n  set startLevel(newLevel) {\n    this._startLevel = newLevel;\n  }\n  onError(event, data) {\n    if (data.fatal || !data.context) {\n      return;\n    }\n    if (data.context.type === PlaylistContextType.LEVEL && data.context.level === this.level) {\n      this.checkRetry(data);\n    }\n  }\n\n  // reset errors on the successful load of a fragment\n  onFragBuffered(event, {\n    frag\n  }) {\n    if (frag !== undefined && frag.type === PlaylistLevelType.MAIN) {\n      const el = frag.elementaryStreams;\n      if (!Object.keys(el).some(type => !!el[type])) {\n        return;\n      }\n      const level = this._levels[frag.level];\n      if (level != null && level.loadError) {\n        this.log(`Resetting level error count of ${level.loadError} on frag buffered`);\n        level.loadError = 0;\n      }\n    }\n  }\n  onLevelLoaded(event, data) {\n    var _data$deliveryDirecti2;\n    const {\n      level,\n      details\n    } = data;\n    const curLevel = this._levels[level];\n    if (!curLevel) {\n      var _data$deliveryDirecti;\n      this.warn(`Invalid level index ${level}`);\n      if ((_data$deliveryDirecti = data.deliveryDirectives) != null && _data$deliveryDirecti.skip) {\n        details.deltaUpdateFailed = true;\n      }\n      return;\n    }\n\n    // only process level loaded events matching with expected level\n    if (level === this.currentLevelIndex) {\n      // reset level load error counter on successful level loaded only if there is no issues with fragments\n      if (curLevel.fragmentError === 0) {\n        curLevel.loadError = 0;\n      }\n      this.playlistLoaded(level, data, curLevel.details);\n    } else if ((_data$deliveryDirecti2 = data.deliveryDirectives) != null && _data$deliveryDirecti2.skip) {\n      // received a delta playlist update that cannot be merged\n      details.deltaUpdateFailed = true;\n    }\n  }\n  loadPlaylist(hlsUrlParameters) {\n    super.loadPlaylist();\n    const currentLevelIndex = this.currentLevelIndex;\n    const currentLevel = this.currentLevel;\n    if (currentLevel && this.shouldLoadPlaylist(currentLevel)) {\n      let url = currentLevel.uri;\n      if (hlsUrlParameters) {\n        try {\n          url = hlsUrlParameters.addDirectives(url);\n        } catch (error) {\n          this.warn(`Could not construct new URL with HLS Delivery Directives: ${error}`);\n        }\n      }\n      const pathwayId = currentLevel.attrs['PATHWAY-ID'];\n      this.log(`Loading level index ${currentLevelIndex}${(hlsUrlParameters == null ? void 0 : hlsUrlParameters.msn) !== undefined ? ' at sn ' + hlsUrlParameters.msn + ' part ' + hlsUrlParameters.part : ''} with${pathwayId ? ' Pathway ' + pathwayId : ''} ${url}`);\n\n      // console.log('Current audio track group ID:', this.hls.audioTracks[this.hls.audioTrack].groupId);\n      // console.log('New video quality level audio group id:', levelObject.attrs.AUDIO, level);\n      this.clearTimer();\n      this.hls.trigger(Events.LEVEL_LOADING, {\n        url,\n        level: currentLevelIndex,\n        pathwayId: currentLevel.attrs['PATHWAY-ID'],\n        id: 0,\n        // Deprecated Level urlId\n        deliveryDirectives: hlsUrlParameters || null\n      });\n    }\n  }\n  get nextLoadLevel() {\n    if (this.manualLevelIndex !== -1) {\n      return this.manualLevelIndex;\n    } else {\n      return this.hls.nextAutoLevel;\n    }\n  }\n  set nextLoadLevel(nextLevel) {\n    this.level = nextLevel;\n    if (this.manualLevelIndex === -1) {\n      this.hls.nextAutoLevel = nextLevel;\n    }\n  }\n  removeLevel(levelIndex) {\n    var _this$currentLevel;\n    const levels = this._levels.filter((level, index) => {\n      if (index !== levelIndex) {\n        return true;\n      }\n      if (this.steering) {\n        this.steering.removeLevel(level);\n      }\n      if (level === this.currentLevel) {\n        this.currentLevel = null;\n        this.currentLevelIndex = -1;\n        if (level.details) {\n          level.details.fragments.forEach(f => f.level = -1);\n        }\n      }\n      return false;\n    });\n    reassignFragmentLevelIndexes(levels);\n    this._levels = levels;\n    if (this.currentLevelIndex > -1 && (_this$currentLevel = this.currentLevel) != null && _this$currentLevel.details) {\n      this.currentLevelIndex = this.currentLevel.details.fragments[0].level;\n    }\n    this.hls.trigger(Events.LEVELS_UPDATED, {\n      levels\n    });\n  }\n  onLevelsUpdated(event, {\n    levels\n  }) {\n    this._levels = levels;\n  }\n  checkMaxAutoUpdated() {\n    const {\n      autoLevelCapping,\n      maxAutoLevel,\n      maxHdcpLevel\n    } = this.hls;\n    if (this._maxAutoLevel !== maxAutoLevel) {\n      this._maxAutoLevel = maxAutoLevel;\n      this.hls.trigger(Events.MAX_AUTO_LEVEL_UPDATED, {\n        autoLevelCapping,\n        levels: this.levels,\n        maxAutoLevel,\n        minAutoLevel: this.hls.minAutoLevel,\n        maxHdcpLevel\n      });\n    }\n  }\n}\nfunction assignTrackIdsByGroup(tracks) {\n  const groups = {};\n  tracks.forEach(track => {\n    const groupId = track.groupId || '';\n    track.id = groups[groupId] = groups[groupId] || 0;\n    groups[groupId]++;\n  });\n}\n\nclass KeyLoader {\n  constructor(config) {\n    this.config = void 0;\n    this.keyUriToKeyInfo = {};\n    this.emeController = null;\n    this.config = config;\n  }\n  abort(type) {\n    for (const uri in this.keyUriToKeyInfo) {\n      const loader = this.keyUriToKeyInfo[uri].loader;\n      if (loader) {\n        var _loader$context;\n        if (type && type !== ((_loader$context = loader.context) == null ? void 0 : _loader$context.frag.type)) {\n          return;\n        }\n        loader.abort();\n      }\n    }\n  }\n  detach() {\n    for (const uri in this.keyUriToKeyInfo) {\n      const keyInfo = this.keyUriToKeyInfo[uri];\n      // Remove cached EME keys on detach\n      if (keyInfo.mediaKeySessionContext || keyInfo.decryptdata.isCommonEncryption) {\n        delete this.keyUriToKeyInfo[uri];\n      }\n    }\n  }\n  destroy() {\n    this.detach();\n    for (const uri in this.keyUriToKeyInfo) {\n      const loader = this.keyUriToKeyInfo[uri].loader;\n      if (loader) {\n        loader.destroy();\n      }\n    }\n    this.keyUriToKeyInfo = {};\n  }\n  createKeyLoadError(frag, details = ErrorDetails.KEY_LOAD_ERROR, error, networkDetails, response) {\n    return new LoadError({\n      type: ErrorTypes.NETWORK_ERROR,\n      details,\n      fatal: false,\n      frag,\n      response,\n      error,\n      networkDetails\n    });\n  }\n  loadClear(loadingFrag, encryptedFragments) {\n    if (this.emeController && this.config.emeEnabled) {\n      // access key-system with nearest key on start (loaidng frag is unencrypted)\n      const {\n        sn,\n        cc\n      } = loadingFrag;\n      for (let i = 0; i < encryptedFragments.length; i++) {\n        const frag = encryptedFragments[i];\n        if (cc <= frag.cc && (sn === 'initSegment' || frag.sn === 'initSegment' || sn < frag.sn)) {\n          this.emeController.selectKeySystemFormat(frag).then(keySystemFormat => {\n            frag.setKeyFormat(keySystemFormat);\n          });\n          break;\n        }\n      }\n    }\n  }\n  load(frag) {\n    if (!frag.decryptdata && frag.encrypted && this.emeController) {\n      // Multiple keys, but none selected, resolve in eme-controller\n      return this.emeController.selectKeySystemFormat(frag).then(keySystemFormat => {\n        return this.loadInternal(frag, keySystemFormat);\n      });\n    }\n    return this.loadInternal(frag);\n  }\n  loadInternal(frag, keySystemFormat) {\n    var _keyInfo, _keyInfo2;\n    if (keySystemFormat) {\n      frag.setKeyFormat(keySystemFormat);\n    }\n    const decryptdata = frag.decryptdata;\n    if (!decryptdata) {\n      const error = new Error(keySystemFormat ? `Expected frag.decryptdata to be defined after setting format ${keySystemFormat}` : 'Missing decryption data on fragment in onKeyLoading');\n      return Promise.reject(this.createKeyLoadError(frag, ErrorDetails.KEY_LOAD_ERROR, error));\n    }\n    const uri = decryptdata.uri;\n    if (!uri) {\n      return Promise.reject(this.createKeyLoadError(frag, ErrorDetails.KEY_LOAD_ERROR, new Error(`Invalid key URI: \"${uri}\"`)));\n    }\n    let keyInfo = this.keyUriToKeyInfo[uri];\n    if ((_keyInfo = keyInfo) != null && _keyInfo.decryptdata.key) {\n      decryptdata.key = keyInfo.decryptdata.key;\n      return Promise.resolve({\n        frag,\n        keyInfo\n      });\n    }\n    // Return key load promise as long as it does not have a mediakey session with an unusable key status\n    if ((_keyInfo2 = keyInfo) != null && _keyInfo2.keyLoadPromise) {\n      var _keyInfo$mediaKeySess;\n      switch ((_keyInfo$mediaKeySess = keyInfo.mediaKeySessionContext) == null ? void 0 : _keyInfo$mediaKeySess.keyStatus) {\n        case undefined:\n        case 'status-pending':\n        case 'usable':\n        case 'usable-in-future':\n          return keyInfo.keyLoadPromise.then(keyLoadedData => {\n            // Return the correct fragment with updated decryptdata key and loaded keyInfo\n            decryptdata.key = keyLoadedData.keyInfo.decryptdata.key;\n            return {\n              frag,\n              keyInfo\n            };\n          });\n      }\n      // If we have a key session and status and it is not pending or usable, continue\n      // This will go back to the eme-controller for expired keys to get a new keyLoadPromise\n    }\n\n    // Load the key or return the loading promise\n    keyInfo = this.keyUriToKeyInfo[uri] = {\n      decryptdata,\n      keyLoadPromise: null,\n      loader: null,\n      mediaKeySessionContext: null\n    };\n    switch (decryptdata.method) {\n      case 'ISO-23001-7':\n      case 'SAMPLE-AES':\n      case 'SAMPLE-AES-CENC':\n      case 'SAMPLE-AES-CTR':\n        if (decryptdata.keyFormat === 'identity') {\n          // loadKeyHTTP handles http(s) and data URLs\n          return this.loadKeyHTTP(keyInfo, frag);\n        }\n        return this.loadKeyEME(keyInfo, frag);\n      case 'AES-128':\n        return this.loadKeyHTTP(keyInfo, frag);\n      default:\n        return Promise.reject(this.createKeyLoadError(frag, ErrorDetails.KEY_LOAD_ERROR, new Error(`Key supplied with unsupported METHOD: \"${decryptdata.method}\"`)));\n    }\n  }\n  loadKeyEME(keyInfo, frag) {\n    const keyLoadedData = {\n      frag,\n      keyInfo\n    };\n    if (this.emeController && this.config.emeEnabled) {\n      const keySessionContextPromise = this.emeController.loadKey(keyLoadedData);\n      if (keySessionContextPromise) {\n        return (keyInfo.keyLoadPromise = keySessionContextPromise.then(keySessionContext => {\n          keyInfo.mediaKeySessionContext = keySessionContext;\n          return keyLoadedData;\n        })).catch(error => {\n          // Remove promise for license renewal or retry\n          keyInfo.keyLoadPromise = null;\n          throw error;\n        });\n      }\n    }\n    return Promise.resolve(keyLoadedData);\n  }\n  loadKeyHTTP(keyInfo, frag) {\n    const config = this.config;\n    const Loader = config.loader;\n    const keyLoader = new Loader(config);\n    frag.keyLoader = keyInfo.loader = keyLoader;\n    return keyInfo.keyLoadPromise = new Promise((resolve, reject) => {\n      const loaderContext = {\n        keyInfo,\n        frag,\n        responseType: 'arraybuffer',\n        url: keyInfo.decryptdata.uri\n      };\n\n      // maxRetry is 0 so that instead of retrying the same key on the same variant multiple times,\n      // key-loader will trigger an error and rely on stream-controller to handle retry logic.\n      // this will also align retry logic with fragment-loader\n      const loadPolicy = config.keyLoadPolicy.default;\n      const loaderConfig = {\n        loadPolicy,\n        timeout: loadPolicy.maxLoadTimeMs,\n        maxRetry: 0,\n        retryDelay: 0,\n        maxRetryDelay: 0\n      };\n      const loaderCallbacks = {\n        onSuccess: (response, stats, context, networkDetails) => {\n          const {\n            frag,\n            keyInfo,\n            url: uri\n          } = context;\n          if (!frag.decryptdata || keyInfo !== this.keyUriToKeyInfo[uri]) {\n            return reject(this.createKeyLoadError(frag, ErrorDetails.KEY_LOAD_ERROR, new Error('after key load, decryptdata unset or changed'), networkDetails));\n          }\n          keyInfo.decryptdata.key = frag.decryptdata.key = new Uint8Array(response.data);\n\n          // detach fragment key loader on load success\n          frag.keyLoader = null;\n          keyInfo.loader = null;\n          resolve({\n            frag,\n            keyInfo\n          });\n        },\n        onError: (response, context, networkDetails, stats) => {\n          this.resetLoader(context);\n          reject(this.createKeyLoadError(frag, ErrorDetails.KEY_LOAD_ERROR, new Error(`HTTP Error ${response.code} loading key ${response.text}`), networkDetails, _objectSpread2({\n            url: loaderContext.url,\n            data: undefined\n          }, response)));\n        },\n        onTimeout: (stats, context, networkDetails) => {\n          this.resetLoader(context);\n          reject(this.createKeyLoadError(frag, ErrorDetails.KEY_LOAD_TIMEOUT, new Error('key loading timed out'), networkDetails));\n        },\n        onAbort: (stats, context, networkDetails) => {\n          this.resetLoader(context);\n          reject(this.createKeyLoadError(frag, ErrorDetails.INTERNAL_ABORTED, new Error('key loading aborted'), networkDetails));\n        }\n      };\n      keyLoader.load(loaderContext, loaderConfig, loaderCallbacks);\n    });\n  }\n  resetLoader(context) {\n    const {\n      frag,\n      keyInfo,\n      url: uri\n    } = context;\n    const loader = keyInfo.loader;\n    if (frag.keyLoader === loader) {\n      frag.keyLoader = null;\n      keyInfo.loader = null;\n    }\n    delete this.keyUriToKeyInfo[uri];\n    if (loader) {\n      loader.destroy();\n    }\n  }\n}\n\nfunction getSourceBuffer() {\n  return self.SourceBuffer || self.WebKitSourceBuffer;\n}\nfunction isMSESupported() {\n  const mediaSource = getMediaSource();\n  if (!mediaSource) {\n    return false;\n  }\n\n  // if SourceBuffer is exposed ensure its API is valid\n  // Older browsers do not expose SourceBuffer globally so checking SourceBuffer.prototype is impossible\n  const sourceBuffer = getSourceBuffer();\n  return !sourceBuffer || sourceBuffer.prototype && typeof sourceBuffer.prototype.appendBuffer === 'function' && typeof sourceBuffer.prototype.remove === 'function';\n}\nfunction isSupported() {\n  if (!isMSESupported()) {\n    return false;\n  }\n  const mediaSource = getMediaSource();\n  return typeof (mediaSource == null ? void 0 : mediaSource.isTypeSupported) === 'function' && (['avc1.42E01E,mp4a.40.2', 'av01.0.01M.08', 'vp09.00.50.08'].some(codecsForVideoContainer => mediaSource.isTypeSupported(mimeTypeForCodec(codecsForVideoContainer, 'video'))) || ['mp4a.40.2', 'fLaC'].some(codecForAudioContainer => mediaSource.isTypeSupported(mimeTypeForCodec(codecForAudioContainer, 'audio'))));\n}\nfunction changeTypeSupported() {\n  var _sourceBuffer$prototy;\n  const sourceBuffer = getSourceBuffer();\n  return typeof (sourceBuffer == null ? void 0 : (_sourceBuffer$prototy = sourceBuffer.prototype) == null ? void 0 : _sourceBuffer$prototy.changeType) === 'function';\n}\n\nconst STALL_MINIMUM_DURATION_MS = 250;\nconst MAX_START_GAP_JUMP = 2.0;\nconst SKIP_BUFFER_HOLE_STEP_SECONDS = 0.1;\nconst SKIP_BUFFER_RANGE_START = 0.05;\nclass GapController {\n  constructor(config, media, fragmentTracker, hls) {\n    this.config = void 0;\n    this.media = null;\n    this.fragmentTracker = void 0;\n    this.hls = void 0;\n    this.nudgeRetry = 0;\n    this.stallReported = false;\n    this.stalled = null;\n    this.moved = false;\n    this.seeking = false;\n    this.config = config;\n    this.media = media;\n    this.fragmentTracker = fragmentTracker;\n    this.hls = hls;\n  }\n  destroy() {\n    this.media = null;\n    // @ts-ignore\n    this.hls = this.fragmentTracker = null;\n  }\n\n  /**\n   * Checks if the playhead is stuck within a gap, and if so, attempts to free it.\n   * A gap is an unbuffered range between two buffered ranges (or the start and the first buffered range).\n   *\n   * @param lastCurrentTime - Previously read playhead position\n   */\n  poll(lastCurrentTime, activeFrag) {\n    const {\n      config,\n      media,\n      stalled\n    } = this;\n    if (media === null) {\n      return;\n    }\n    const {\n      currentTime,\n      seeking\n    } = media;\n    const seeked = this.seeking && !seeking;\n    const beginSeek = !this.seeking && seeking;\n    this.seeking = seeking;\n\n    // The playhead is moving, no-op\n    if (currentTime !== lastCurrentTime) {\n      this.moved = true;\n      if (!seeking) {\n        this.nudgeRetry = 0;\n      }\n      if (stalled !== null) {\n        // The playhead is now moving, but was previously stalled\n        if (this.stallReported) {\n          const _stalledDuration = self.performance.now() - stalled;\n          logger.warn(`playback not stuck anymore @${currentTime}, after ${Math.round(_stalledDuration)}ms`);\n          this.stallReported = false;\n        }\n        this.stalled = null;\n      }\n      return;\n    }\n\n    // Clear stalled state when beginning or finishing seeking so that we don't report stalls coming out of a seek\n    if (beginSeek || seeked) {\n      this.stalled = null;\n      return;\n    }\n\n    // The playhead should not be moving\n    if (media.paused && !seeking || media.ended || media.playbackRate === 0 || !BufferHelper.getBuffered(media).length) {\n      this.nudgeRetry = 0;\n      return;\n    }\n    const bufferInfo = BufferHelper.bufferInfo(media, currentTime, 0);\n    const nextStart = bufferInfo.nextStart || 0;\n    if (seeking) {\n      // Waiting for seeking in a buffered range to complete\n      const hasEnoughBuffer = bufferInfo.len > MAX_START_GAP_JUMP;\n      // Next buffered range is too far ahead to jump to while still seeking\n      const noBufferGap = !nextStart || activeFrag && activeFrag.start <= currentTime || nextStart - currentTime > MAX_START_GAP_JUMP && !this.fragmentTracker.getPartialFragment(currentTime);\n      if (hasEnoughBuffer || noBufferGap) {\n        return;\n      }\n      // Reset moved state when seeking to a point in or before a gap\n      this.moved = false;\n    }\n\n    // Skip start gaps if we haven't played, but the last poll detected the start of a stall\n    // The addition poll gives the browser a chance to jump the gap for us\n    if (!this.moved && this.stalled !== null) {\n      var _level$details;\n      // There is no playable buffer (seeked, waiting for buffer)\n      const isBuffered = bufferInfo.len > 0;\n      if (!isBuffered && !nextStart) {\n        return;\n      }\n      // Jump start gaps within jump threshold\n      const startJump = Math.max(nextStart, bufferInfo.start || 0) - currentTime;\n\n      // When joining a live stream with audio tracks, account for live playlist window sliding by allowing\n      // a larger jump over start gaps caused by the audio-stream-controller buffering a start fragment\n      // that begins over 1 target duration after the video start position.\n      const level = this.hls.levels ? this.hls.levels[this.hls.currentLevel] : null;\n      const isLive = level == null ? void 0 : (_level$details = level.details) == null ? void 0 : _level$details.live;\n      const maxStartGapJump = isLive ? level.details.targetduration * 2 : MAX_START_GAP_JUMP;\n      const partialOrGap = this.fragmentTracker.getPartialFragment(currentTime);\n      if (startJump > 0 && (startJump <= maxStartGapJump || partialOrGap)) {\n        if (!media.paused) {\n          this._trySkipBufferHole(partialOrGap);\n        }\n        return;\n      }\n    }\n\n    // Start tracking stall time\n    const tnow = self.performance.now();\n    if (stalled === null) {\n      this.stalled = tnow;\n      return;\n    }\n    const stalledDuration = tnow - stalled;\n    if (!seeking && stalledDuration >= STALL_MINIMUM_DURATION_MS) {\n      // Report stalling after trying to fix\n      this._reportStall(bufferInfo);\n      if (!this.media) {\n        return;\n      }\n    }\n    const bufferedWithHoles = BufferHelper.bufferInfo(media, currentTime, config.maxBufferHole);\n    this._tryFixBufferStall(bufferedWithHoles, stalledDuration);\n  }\n\n  /**\n   * Detects and attempts to fix known buffer stalling issues.\n   * @param bufferInfo - The properties of the current buffer.\n   * @param stalledDurationMs - The amount of time Hls.js has been stalling for.\n   * @private\n   */\n  _tryFixBufferStall(bufferInfo, stalledDurationMs) {\n    const {\n      config,\n      fragmentTracker,\n      media\n    } = this;\n    if (media === null) {\n      return;\n    }\n    const currentTime = media.currentTime;\n    const partial = fragmentTracker.getPartialFragment(currentTime);\n    if (partial) {\n      // Try to skip over the buffer hole caused by a partial fragment\n      // This method isn't limited by the size of the gap between buffered ranges\n      const targetTime = this._trySkipBufferHole(partial);\n      // we return here in this case, meaning\n      // the branch below only executes when we haven't seeked to a new position\n      if (targetTime || !this.media) {\n        return;\n      }\n    }\n\n    // if we haven't had to skip over a buffer hole of a partial fragment\n    // we may just have to \"nudge\" the playlist as the browser decoding/rendering engine\n    // needs to cross some sort of threshold covering all source-buffers content\n    // to start playing properly.\n    if ((bufferInfo.len > config.maxBufferHole || bufferInfo.nextStart && bufferInfo.nextStart - currentTime < config.maxBufferHole) && stalledDurationMs > config.highBufferWatchdogPeriod * 1000) {\n      logger.warn('Trying to nudge playhead over buffer-hole');\n      // Try to nudge currentTime over a buffer hole if we've been stalling for the configured amount of seconds\n      // We only try to jump the hole if it's under the configured size\n      // Reset stalled so to rearm watchdog timer\n      this.stalled = null;\n      this._tryNudgeBuffer();\n    }\n  }\n\n  /**\n   * Triggers a BUFFER_STALLED_ERROR event, but only once per stall period.\n   * @param bufferLen - The playhead distance from the end of the current buffer segment.\n   * @private\n   */\n  _reportStall(bufferInfo) {\n    const {\n      hls,\n      media,\n      stallReported\n    } = this;\n    if (!stallReported && media) {\n      // Report stalled error once\n      this.stallReported = true;\n      const error = new Error(`Playback stalling at @${media.currentTime} due to low buffer (${JSON.stringify(bufferInfo)})`);\n      logger.warn(error.message);\n      hls.trigger(Events.ERROR, {\n        type: ErrorTypes.MEDIA_ERROR,\n        details: ErrorDetails.BUFFER_STALLED_ERROR,\n        fatal: false,\n        error,\n        buffer: bufferInfo.len\n      });\n    }\n  }\n\n  /**\n   * Attempts to fix buffer stalls by jumping over known gaps caused by partial fragments\n   * @param partial - The partial fragment found at the current time (where playback is stalling).\n   * @private\n   */\n  _trySkipBufferHole(partial) {\n    const {\n      config,\n      hls,\n      media\n    } = this;\n    if (media === null) {\n      return 0;\n    }\n\n    // Check if currentTime is between unbuffered regions of partial fragments\n    const currentTime = media.currentTime;\n    const bufferInfo = BufferHelper.bufferInfo(media, currentTime, 0);\n    const startTime = currentTime < bufferInfo.start ? bufferInfo.start : bufferInfo.nextStart;\n    if (startTime) {\n      const bufferStarved = bufferInfo.len <= config.maxBufferHole;\n      const waiting = bufferInfo.len > 0 && bufferInfo.len < 1 && media.readyState < 3;\n      const gapLength = startTime - currentTime;\n      if (gapLength > 0 && (bufferStarved || waiting)) {\n        // Only allow large gaps to be skipped if it is a start gap, or all fragments in skip range are partial\n        if (gapLength > config.maxBufferHole) {\n          const {\n            fragmentTracker\n          } = this;\n          let startGap = false;\n          if (currentTime === 0) {\n            const startFrag = fragmentTracker.getAppendedFrag(0, PlaylistLevelType.MAIN);\n            if (startFrag && startTime < startFrag.end) {\n              startGap = true;\n            }\n          }\n          if (!startGap) {\n            const startProvisioned = partial || fragmentTracker.getAppendedFrag(currentTime, PlaylistLevelType.MAIN);\n            if (startProvisioned) {\n              let moreToLoad = false;\n              let pos = startProvisioned.end;\n              while (pos < startTime) {\n                const provisioned = fragmentTracker.getPartialFragment(pos);\n                if (provisioned) {\n                  pos += provisioned.duration;\n                } else {\n                  moreToLoad = true;\n                  break;\n                }\n              }\n              if (moreToLoad) {\n                return 0;\n              }\n            }\n          }\n        }\n        const targetTime = Math.max(startTime + SKIP_BUFFER_RANGE_START, currentTime + SKIP_BUFFER_HOLE_STEP_SECONDS);\n        logger.warn(`skipping hole, adjusting currentTime from ${currentTime} to ${targetTime}`);\n        this.moved = true;\n        this.stalled = null;\n        media.currentTime = targetTime;\n        if (partial && !partial.gap) {\n          const error = new Error(`fragment loaded with buffer holes, seeking from ${currentTime} to ${targetTime}`);\n          hls.trigger(Events.ERROR, {\n            type: ErrorTypes.MEDIA_ERROR,\n            details: ErrorDetails.BUFFER_SEEK_OVER_HOLE,\n            fatal: false,\n            error,\n            reason: error.message,\n            frag: partial\n          });\n        }\n        return targetTime;\n      }\n    }\n    return 0;\n  }\n\n  /**\n   * Attempts to fix buffer stalls by advancing the mediaElement's current time by a small amount.\n   * @private\n   */\n  _tryNudgeBuffer() {\n    const {\n      config,\n      hls,\n      media,\n      nudgeRetry\n    } = this;\n    if (media === null) {\n      return;\n    }\n    const currentTime = media.currentTime;\n    this.nudgeRetry++;\n    if (nudgeRetry < config.nudgeMaxRetry) {\n      const targetTime = currentTime + (nudgeRetry + 1) * config.nudgeOffset;\n      // playback stalled in buffered area ... let's nudge currentTime to try to overcome this\n      const error = new Error(`Nudging 'currentTime' from ${currentTime} to ${targetTime}`);\n      logger.warn(error.message);\n      media.currentTime = targetTime;\n      hls.trigger(Events.ERROR, {\n        type: ErrorTypes.MEDIA_ERROR,\n        details: ErrorDetails.BUFFER_NUDGE_ON_STALL,\n        error,\n        fatal: false\n      });\n    } else {\n      const error = new Error(`Playhead still not moving while enough data buffered @${currentTime} after ${config.nudgeMaxRetry} nudges`);\n      logger.error(error.message);\n      hls.trigger(Events.ERROR, {\n        type: ErrorTypes.MEDIA_ERROR,\n        details: ErrorDetails.BUFFER_STALLED_ERROR,\n        error,\n        fatal: true\n      });\n    }\n  }\n}\n\nconst TICK_INTERVAL = 100; // how often to tick in ms\n\nclass StreamController extends BaseStreamController {\n  constructor(hls, fragmentTracker, keyLoader) {\n    super(hls, fragmentTracker, keyLoader, '[stream-controller]', PlaylistLevelType.MAIN);\n    this.audioCodecSwap = false;\n    this.gapController = null;\n    this.level = -1;\n    this._forceStartLoad = false;\n    this.altAudio = false;\n    this.audioOnly = false;\n    this.fragPlaying = null;\n    this.onvplaying = null;\n    this.onvseeked = null;\n    this.fragLastKbps = 0;\n    this.couldBacktrack = false;\n    this.backtrackFragment = null;\n    this.audioCodecSwitch = false;\n    this.videoBuffer = null;\n    this._registerListeners();\n  }\n  _registerListeners() {\n    const {\n      hls\n    } = this;\n    hls.on(Events.MEDIA_ATTACHED, this.onMediaAttached, this);\n    hls.on(Events.MEDIA_DETACHING, this.onMediaDetaching, this);\n    hls.on(Events.MANIFEST_LOADING, this.onManifestLoading, this);\n    hls.on(Events.MANIFEST_PARSED, this.onManifestParsed, this);\n    hls.on(Events.LEVEL_LOADING, this.onLevelLoading, this);\n    hls.on(Events.LEVEL_LOADED, this.onLevelLoaded, this);\n    hls.on(Events.FRAG_LOAD_EMERGENCY_ABORTED, this.onFragLoadEmergencyAborted, this);\n    hls.on(Events.ERROR, this.onError, this);\n    hls.on(Events.AUDIO_TRACK_SWITCHING, this.onAudioTrackSwitching, this);\n    hls.on(Events.AUDIO_TRACK_SWITCHED, this.onAudioTrackSwitched, this);\n    hls.on(Events.BUFFER_CREATED, this.onBufferCreated, this);\n    hls.on(Events.BUFFER_FLUSHED, this.onBufferFlushed, this);\n    hls.on(Events.LEVELS_UPDATED, this.onLevelsUpdated, this);\n    hls.on(Events.FRAG_BUFFERED, this.onFragBuffered, this);\n  }\n  _unregisterListeners() {\n    const {\n      hls\n    } = this;\n    hls.off(Events.MEDIA_ATTACHED, this.onMediaAttached, this);\n    hls.off(Events.MEDIA_DETACHING, this.onMediaDetaching, this);\n    hls.off(Events.MANIFEST_LOADING, this.onManifestLoading, this);\n    hls.off(Events.MANIFEST_PARSED, this.onManifestParsed, this);\n    hls.off(Events.LEVEL_LOADED, this.onLevelLoaded, this);\n    hls.off(Events.FRAG_LOAD_EMERGENCY_ABORTED, this.onFragLoadEmergencyAborted, this);\n    hls.off(Events.ERROR, this.onError, this);\n    hls.off(Events.AUDIO_TRACK_SWITCHING, this.onAudioTrackSwitching, this);\n    hls.off(Events.AUDIO_TRACK_SWITCHED, this.onAudioTrackSwitched, this);\n    hls.off(Events.BUFFER_CREATED, this.onBufferCreated, this);\n    hls.off(Events.BUFFER_FLUSHED, this.onBufferFlushed, this);\n    hls.off(Events.LEVELS_UPDATED, this.onLevelsUpdated, this);\n    hls.off(Events.FRAG_BUFFERED, this.onFragBuffered, this);\n  }\n  onHandlerDestroying() {\n    this._unregisterListeners();\n    super.onHandlerDestroying();\n  }\n  startLoad(startPosition) {\n    if (this.levels) {\n      const {\n        lastCurrentTime,\n        hls\n      } = this;\n      this.stopLoad();\n      this.setInterval(TICK_INTERVAL);\n      this.level = -1;\n      if (!this.startFragRequested) {\n        // determine load level\n        let startLevel = hls.startLevel;\n        if (startLevel === -1) {\n          if (hls.config.testBandwidth && this.levels.length > 1) {\n            // -1 : guess start Level by doing a bitrate test by loading first fragment of lowest quality level\n            startLevel = 0;\n            this.bitrateTest = true;\n          } else {\n            startLevel = hls.firstAutoLevel;\n          }\n        }\n        // set new level to playlist loader : this will trigger start level load\n        // hls.nextLoadLevel remains until it is set to a new value or until a new frag is successfully loaded\n        hls.nextLoadLevel = startLevel;\n        this.level = hls.loadLevel;\n        this.loadedmetadata = false;\n      }\n      // if startPosition undefined but lastCurrentTime set, set startPosition to last currentTime\n      if (lastCurrentTime > 0 && startPosition === -1) {\n        this.log(`Override startPosition with lastCurrentTime @${lastCurrentTime.toFixed(3)}`);\n        startPosition = lastCurrentTime;\n      }\n      this.state = State.IDLE;\n      this.nextLoadPosition = this.startPosition = this.lastCurrentTime = startPosition;\n      this.tick();\n    } else {\n      this._forceStartLoad = true;\n      this.state = State.STOPPED;\n    }\n  }\n  stopLoad() {\n    this._forceStartLoad = false;\n    super.stopLoad();\n  }\n  doTick() {\n    switch (this.state) {\n      case State.WAITING_LEVEL:\n        {\n          const {\n            levels,\n            level\n          } = this;\n          const currentLevel = levels == null ? void 0 : levels[level];\n          const details = currentLevel == null ? void 0 : currentLevel.details;\n          if (details && (!details.live || this.levelLastLoaded === currentLevel)) {\n            if (this.waitForCdnTuneIn(details)) {\n              break;\n            }\n            this.state = State.IDLE;\n            break;\n          } else if (this.hls.nextLoadLevel !== this.level) {\n            this.state = State.IDLE;\n            break;\n          }\n          break;\n        }\n      case State.FRAG_LOADING_WAITING_RETRY:\n        {\n          var _this$media;\n          const now = self.performance.now();\n          const retryDate = this.retryDate;\n          // if current time is gt than retryDate, or if media seeking let's switch to IDLE state to retry loading\n          if (!retryDate || now >= retryDate || (_this$media = this.media) != null && _this$media.seeking) {\n            const {\n              levels,\n              level\n            } = this;\n            const currentLevel = levels == null ? void 0 : levels[level];\n            this.resetStartWhenNotLoaded(currentLevel || null);\n            this.state = State.IDLE;\n          }\n        }\n        break;\n    }\n    if (this.state === State.IDLE) {\n      this.doTickIdle();\n    }\n    this.onTickEnd();\n  }\n  onTickEnd() {\n    super.onTickEnd();\n    this.checkBuffer();\n    this.checkFragmentChanged();\n  }\n  doTickIdle() {\n    const {\n      hls,\n      levelLastLoaded,\n      levels,\n      media\n    } = this;\n\n    // if start level not parsed yet OR\n    // if video not attached AND start fragment already requested OR start frag prefetch not enabled\n    // exit loop, as we either need more info (level not parsed) or we need media to be attached to load new fragment\n    if (levelLastLoaded === null || !media && (this.startFragRequested || !hls.config.startFragPrefetch)) {\n      return;\n    }\n\n    // If the \"main\" level is audio-only but we are loading an alternate track in the same group, do not load anything\n    if (this.altAudio && this.audioOnly) {\n      return;\n    }\n    const level = this.buffering ? hls.nextLoadLevel : hls.loadLevel;\n    if (!(levels != null && levels[level])) {\n      return;\n    }\n    const levelInfo = levels[level];\n\n    // if buffer length is less than maxBufLen try to load a new fragment\n\n    const bufferInfo = this.getMainFwdBufferInfo();\n    if (bufferInfo === null) {\n      return;\n    }\n    const lastDetails = this.getLevelDetails();\n    if (lastDetails && this._streamEnded(bufferInfo, lastDetails)) {\n      const data = {};\n      if (this.altAudio) {\n        data.type = 'video';\n      }\n      this.hls.trigger(Events.BUFFER_EOS, data);\n      this.state = State.ENDED;\n      return;\n    }\n    if (!this.buffering) {\n      return;\n    }\n\n    // set next load level : this will trigger a playlist load if needed\n    if (hls.loadLevel !== level && hls.manualLevel === -1) {\n      this.log(`Adapting to level ${level} from level ${this.level}`);\n    }\n    this.level = hls.nextLoadLevel = level;\n    const levelDetails = levelInfo.details;\n    // if level info not retrieved yet, switch state and wait for level retrieval\n    // if live playlist, ensure that new playlist has been refreshed to avoid loading/try to load\n    // a useless and outdated fragment (that might even introduce load error if it is already out of the live playlist)\n    if (!levelDetails || this.state === State.WAITING_LEVEL || levelDetails.live && this.levelLastLoaded !== levelInfo) {\n      this.level = level;\n      this.state = State.WAITING_LEVEL;\n      return;\n    }\n    const bufferLen = bufferInfo.len;\n\n    // compute max Buffer Length that we could get from this load level, based on level bitrate. don't buffer more than 60 MB and more than 30s\n    const maxBufLen = this.getMaxBufferLength(levelInfo.maxBitrate);\n\n    // Stay idle if we are still with buffer margins\n    if (bufferLen >= maxBufLen) {\n      return;\n    }\n    if (this.backtrackFragment && this.backtrackFragment.start > bufferInfo.end) {\n      this.backtrackFragment = null;\n    }\n    const targetBufferTime = this.backtrackFragment ? this.backtrackFragment.start : bufferInfo.end;\n    let frag = this.getNextFragment(targetBufferTime, levelDetails);\n    // Avoid backtracking by loading an earlier segment in streams with segments that do not start with a key frame (flagged by `couldBacktrack`)\n    if (this.couldBacktrack && !this.fragPrevious && frag && frag.sn !== 'initSegment' && this.fragmentTracker.getState(frag) !== FragmentState.OK) {\n      var _this$backtrackFragme;\n      const backtrackSn = ((_this$backtrackFragme = this.backtrackFragment) != null ? _this$backtrackFragme : frag).sn;\n      const fragIdx = backtrackSn - levelDetails.startSN;\n      const backtrackFrag = levelDetails.fragments[fragIdx - 1];\n      if (backtrackFrag && frag.cc === backtrackFrag.cc) {\n        frag = backtrackFrag;\n        this.fragmentTracker.removeFragment(backtrackFrag);\n      }\n    } else if (this.backtrackFragment && bufferInfo.len) {\n      this.backtrackFragment = null;\n    }\n    // Avoid loop loading by using nextLoadPosition set for backtracking and skipping consecutive GAP tags\n    if (frag && this.isLoopLoading(frag, targetBufferTime)) {\n      const gapStart = frag.gap;\n      if (!gapStart) {\n        // Cleanup the fragment tracker before trying to find the next unbuffered fragment\n        const type = this.audioOnly && !this.altAudio ? ElementaryStreamTypes.AUDIO : ElementaryStreamTypes.VIDEO;\n        const mediaBuffer = (type === ElementaryStreamTypes.VIDEO ? this.videoBuffer : this.mediaBuffer) || this.media;\n        if (mediaBuffer) {\n          this.afterBufferFlushed(mediaBuffer, type, PlaylistLevelType.MAIN);\n        }\n      }\n      frag = this.getNextFragmentLoopLoading(frag, levelDetails, bufferInfo, PlaylistLevelType.MAIN, maxBufLen);\n    }\n    if (!frag) {\n      return;\n    }\n    if (frag.initSegment && !frag.initSegment.data && !this.bitrateTest) {\n      frag = frag.initSegment;\n    }\n    this.loadFragment(frag, levelInfo, targetBufferTime);\n  }\n  loadFragment(frag, level, targetBufferTime) {\n    // Check if fragment is not loaded\n    const fragState = this.fragmentTracker.getState(frag);\n    this.fragCurrent = frag;\n    if (fragState === FragmentState.NOT_LOADED || fragState === FragmentState.PARTIAL) {\n      if (frag.sn === 'initSegment') {\n        this._loadInitSegment(frag, level);\n      } else if (this.bitrateTest) {\n        this.log(`Fragment ${frag.sn} of level ${frag.level} is being downloaded to test bitrate and will not be buffered`);\n        this._loadBitrateTestFrag(frag, level);\n      } else {\n        this.startFragRequested = true;\n        super.loadFragment(frag, level, targetBufferTime);\n      }\n    } else {\n      this.clearTrackerIfNeeded(frag);\n    }\n  }\n  getBufferedFrag(position) {\n    return this.fragmentTracker.getBufferedFrag(position, PlaylistLevelType.MAIN);\n  }\n  followingBufferedFrag(frag) {\n    if (frag) {\n      // try to get range of next fragment (500ms after this range)\n      return this.getBufferedFrag(frag.end + 0.5);\n    }\n    return null;\n  }\n\n  /*\n    on immediate level switch :\n     - pause playback if playing\n     - cancel any pending load request\n     - and trigger a buffer flush\n  */\n  immediateLevelSwitch() {\n    this.abortCurrentFrag();\n    this.flushMainBuffer(0, Number.POSITIVE_INFINITY);\n  }\n\n  /**\n   * try to switch ASAP without breaking video playback:\n   * in order to ensure smooth but quick level switching,\n   * we need to find the next flushable buffer range\n   * we should take into account new segment fetch time\n   */\n  nextLevelSwitch() {\n    const {\n      levels,\n      media\n    } = this;\n    // ensure that media is defined and that metadata are available (to retrieve currentTime)\n    if (media != null && media.readyState) {\n      let fetchdelay;\n      const fragPlayingCurrent = this.getAppendedFrag(media.currentTime);\n      if (fragPlayingCurrent && fragPlayingCurrent.start > 1) {\n        // flush buffer preceding current fragment (flush until current fragment start offset)\n        // minus 1s to avoid video freezing, that could happen if we flush keyframe of current video ...\n        this.flushMainBuffer(0, fragPlayingCurrent.start - 1);\n      }\n      const levelDetails = this.getLevelDetails();\n      if (levelDetails != null && levelDetails.live) {\n        const bufferInfo = this.getMainFwdBufferInfo();\n        // Do not flush in live stream with low buffer\n        if (!bufferInfo || bufferInfo.len < levelDetails.targetduration * 2) {\n          return;\n        }\n      }\n      if (!media.paused && levels) {\n        // add a safety delay of 1s\n        const nextLevelId = this.hls.nextLoadLevel;\n        const nextLevel = levels[nextLevelId];\n        const fragLastKbps = this.fragLastKbps;\n        if (fragLastKbps && this.fragCurrent) {\n          fetchdelay = this.fragCurrent.duration * nextLevel.maxBitrate / (1000 * fragLastKbps) + 1;\n        } else {\n          fetchdelay = 0;\n        }\n      } else {\n        fetchdelay = 0;\n      }\n      // this.log('fetchdelay:'+fetchdelay);\n      // find buffer range that will be reached once new fragment will be fetched\n      const bufferedFrag = this.getBufferedFrag(media.currentTime + fetchdelay);\n      if (bufferedFrag) {\n        // we can flush buffer range following this one without stalling playback\n        const nextBufferedFrag = this.followingBufferedFrag(bufferedFrag);\n        if (nextBufferedFrag) {\n          // if we are here, we can also cancel any loading/demuxing in progress, as they are useless\n          this.abortCurrentFrag();\n          // start flush position is in next buffered frag. Leave some padding for non-independent segments and smoother playback.\n          const maxStart = nextBufferedFrag.maxStartPTS ? nextBufferedFrag.maxStartPTS : nextBufferedFrag.start;\n          const fragDuration = nextBufferedFrag.duration;\n          const startPts = Math.max(bufferedFrag.end, maxStart + Math.min(Math.max(fragDuration - this.config.maxFragLookUpTolerance, fragDuration * (this.couldBacktrack ? 0.5 : 0.125)), fragDuration * (this.couldBacktrack ? 0.75 : 0.25)));\n          this.flushMainBuffer(startPts, Number.POSITIVE_INFINITY);\n        }\n      }\n    }\n  }\n  abortCurrentFrag() {\n    const fragCurrent = this.fragCurrent;\n    this.fragCurrent = null;\n    this.backtrackFragment = null;\n    if (fragCurrent) {\n      fragCurrent.abortRequests();\n      this.fragmentTracker.removeFragment(fragCurrent);\n    }\n    switch (this.state) {\n      case State.KEY_LOADING:\n      case State.FRAG_LOADING:\n      case State.FRAG_LOADING_WAITING_RETRY:\n      case State.PARSING:\n      case State.PARSED:\n        this.state = State.IDLE;\n        break;\n    }\n    this.nextLoadPosition = this.getLoadPosition();\n  }\n  flushMainBuffer(startOffset, endOffset) {\n    super.flushMainBuffer(startOffset, endOffset, this.altAudio ? 'video' : null);\n  }\n  onMediaAttached(event, data) {\n    super.onMediaAttached(event, data);\n    const media = data.media;\n    this.onvplaying = this.onMediaPlaying.bind(this);\n    this.onvseeked = this.onMediaSeeked.bind(this);\n    media.addEventListener('playing', this.onvplaying);\n    media.addEventListener('seeked', this.onvseeked);\n    this.gapController = new GapController(this.config, media, this.fragmentTracker, this.hls);\n  }\n  onMediaDetaching() {\n    const {\n      media\n    } = this;\n    if (media && this.onvplaying && this.onvseeked) {\n      media.removeEventListener('playing', this.onvplaying);\n      media.removeEventListener('seeked', this.onvseeked);\n      this.onvplaying = this.onvseeked = null;\n      this.videoBuffer = null;\n    }\n    this.fragPlaying = null;\n    if (this.gapController) {\n      this.gapController.destroy();\n      this.gapController = null;\n    }\n    super.onMediaDetaching();\n  }\n  onMediaPlaying() {\n    // tick to speed up FRAG_CHANGED triggering\n    this.tick();\n  }\n  onMediaSeeked() {\n    const media = this.media;\n    const currentTime = media ? media.currentTime : null;\n    if (isFiniteNumber(currentTime)) {\n      this.log(`Media seeked to ${currentTime.toFixed(3)}`);\n    }\n\n    // If seeked was issued before buffer was appended do not tick immediately\n    const bufferInfo = this.getMainFwdBufferInfo();\n    if (bufferInfo === null || bufferInfo.len === 0) {\n      this.warn(`Main forward buffer length on \"seeked\" event ${bufferInfo ? bufferInfo.len : 'empty'})`);\n      return;\n    }\n\n    // tick to speed up FRAG_CHANGED triggering\n    this.tick();\n  }\n  onManifestLoading() {\n    // reset buffer on manifest loading\n    this.log('Trigger BUFFER_RESET');\n    this.hls.trigger(Events.BUFFER_RESET, undefined);\n    this.fragmentTracker.removeAllFragments();\n    this.couldBacktrack = false;\n    this.startPosition = this.lastCurrentTime = this.fragLastKbps = 0;\n    this.levels = this.fragPlaying = this.backtrackFragment = this.levelLastLoaded = null;\n    this.altAudio = this.audioOnly = this.startFragRequested = false;\n  }\n  onManifestParsed(event, data) {\n    // detect if we have different kind of audio codecs used amongst playlists\n    let aac = false;\n    let heaac = false;\n    data.levels.forEach(level => {\n      const codec = level.audioCodec;\n      if (codec) {\n        aac = aac || codec.indexOf('mp4a.40.2') !== -1;\n        heaac = heaac || codec.indexOf('mp4a.40.5') !== -1;\n      }\n    });\n    this.audioCodecSwitch = aac && heaac && !changeTypeSupported();\n    if (this.audioCodecSwitch) {\n      this.log('Both AAC/HE-AAC audio found in levels; declaring level codec as HE-AAC');\n    }\n    this.levels = data.levels;\n    this.startFragRequested = false;\n  }\n  onLevelLoading(event, data) {\n    const {\n      levels\n    } = this;\n    if (!levels || this.state !== State.IDLE) {\n      return;\n    }\n    const level = levels[data.level];\n    if (!level.details || level.details.live && this.levelLastLoaded !== level || this.waitForCdnTuneIn(level.details)) {\n      this.state = State.WAITING_LEVEL;\n    }\n  }\n  onLevelLoaded(event, data) {\n    var _curLevel$details;\n    const {\n      levels\n    } = this;\n    const newLevelId = data.level;\n    const newDetails = data.details;\n    const duration = newDetails.totalduration;\n    if (!levels) {\n      this.warn(`Levels were reset while loading level ${newLevelId}`);\n      return;\n    }\n    this.log(`Level ${newLevelId} loaded [${newDetails.startSN},${newDetails.endSN}]${newDetails.lastPartSn ? `[part-${newDetails.lastPartSn}-${newDetails.lastPartIndex}]` : ''}, cc [${newDetails.startCC}, ${newDetails.endCC}] duration:${duration}`);\n    const curLevel = levels[newLevelId];\n    const fragCurrent = this.fragCurrent;\n    if (fragCurrent && (this.state === State.FRAG_LOADING || this.state === State.FRAG_LOADING_WAITING_RETRY)) {\n      if (fragCurrent.level !== data.level && fragCurrent.loader) {\n        this.abortCurrentFrag();\n      }\n    }\n    let sliding = 0;\n    if (newDetails.live || (_curLevel$details = curLevel.details) != null && _curLevel$details.live) {\n      var _this$levelLastLoaded;\n      this.checkLiveUpdate(newDetails);\n      if (newDetails.deltaUpdateFailed) {\n        return;\n      }\n      sliding = this.alignPlaylists(newDetails, curLevel.details, (_this$levelLastLoaded = this.levelLastLoaded) == null ? void 0 : _this$levelLastLoaded.details);\n    }\n    // override level info\n    curLevel.details = newDetails;\n    this.levelLastLoaded = curLevel;\n    this.hls.trigger(Events.LEVEL_UPDATED, {\n      details: newDetails,\n      level: newLevelId\n    });\n\n    // only switch back to IDLE state if we were waiting for level to start downloading a new fragment\n    if (this.state === State.WAITING_LEVEL) {\n      if (this.waitForCdnTuneIn(newDetails)) {\n        // Wait for Low-Latency CDN Tune-in\n        return;\n      }\n      this.state = State.IDLE;\n    }\n    if (!this.startFragRequested) {\n      this.setStartPosition(newDetails, sliding);\n    } else if (newDetails.live) {\n      this.synchronizeToLiveEdge(newDetails);\n    }\n\n    // trigger handler right now\n    this.tick();\n  }\n  _handleFragmentLoadProgress(data) {\n    var _frag$initSegment;\n    const {\n      frag,\n      part,\n      payload\n    } = data;\n    const {\n      levels\n    } = this;\n    if (!levels) {\n      this.warn(`Levels were reset while fragment load was in progress. Fragment ${frag.sn} of level ${frag.level} will not be buffered`);\n      return;\n    }\n    const currentLevel = levels[frag.level];\n    const details = currentLevel.details;\n    if (!details) {\n      this.warn(`Dropping fragment ${frag.sn} of level ${frag.level} after level details were reset`);\n      this.fragmentTracker.removeFragment(frag);\n      return;\n    }\n    const videoCodec = currentLevel.videoCodec;\n\n    // time Offset is accurate if level PTS is known, or if playlist is not sliding (not live)\n    const accurateTimeOffset = details.PTSKnown || !details.live;\n    const initSegmentData = (_frag$initSegment = frag.initSegment) == null ? void 0 : _frag$initSegment.data;\n    const audioCodec = this._getAudioCodec(currentLevel);\n\n    // transmux the MPEG-TS data to ISO-BMFF segments\n    // this.log(`Transmuxing ${frag.sn} of [${details.startSN} ,${details.endSN}],level ${frag.level}, cc ${frag.cc}`);\n    const transmuxer = this.transmuxer = this.transmuxer || new TransmuxerInterface(this.hls, PlaylistLevelType.MAIN, this._handleTransmuxComplete.bind(this), this._handleTransmuxerFlush.bind(this));\n    const partIndex = part ? part.index : -1;\n    const partial = partIndex !== -1;\n    const chunkMeta = new ChunkMetadata(frag.level, frag.sn, frag.stats.chunkCount, payload.byteLength, partIndex, partial);\n    const initPTS = this.initPTS[frag.cc];\n    transmuxer.push(payload, initSegmentData, audioCodec, videoCodec, frag, part, details.totalduration, accurateTimeOffset, chunkMeta, initPTS);\n  }\n  onAudioTrackSwitching(event, data) {\n    // if any URL found on new audio track, it is an alternate audio track\n    const fromAltAudio = this.altAudio;\n    const altAudio = !!data.url;\n    // if we switch on main audio, ensure that main fragment scheduling is synced with media.buffered\n    // don't do anything if we switch to alt audio: audio stream controller is handling it.\n    // we will just have to change buffer scheduling on audioTrackSwitched\n    if (!altAudio) {\n      if (this.mediaBuffer !== this.media) {\n        this.log('Switching on main audio, use media.buffered to schedule main fragment loading');\n        this.mediaBuffer = this.media;\n        const fragCurrent = this.fragCurrent;\n        // we need to refill audio buffer from main: cancel any frag loading to speed up audio switch\n        if (fragCurrent) {\n          this.log('Switching to main audio track, cancel main fragment load');\n          fragCurrent.abortRequests();\n          this.fragmentTracker.removeFragment(fragCurrent);\n        }\n        // destroy transmuxer to force init segment generation (following audio switch)\n        this.resetTransmuxer();\n        // switch to IDLE state to load new fragment\n        this.resetLoadingState();\n      } else if (this.audioOnly) {\n        // Reset audio transmuxer so when switching back to main audio we're not still appending where we left off\n        this.resetTransmuxer();\n      }\n      const hls = this.hls;\n      // If switching from alt to main audio, flush all audio and trigger track switched\n      if (fromAltAudio) {\n        hls.trigger(Events.BUFFER_FLUSHING, {\n          startOffset: 0,\n          endOffset: Number.POSITIVE_INFINITY,\n          type: null\n        });\n        this.fragmentTracker.removeAllFragments();\n      }\n      hls.trigger(Events.AUDIO_TRACK_SWITCHED, data);\n    }\n  }\n  onAudioTrackSwitched(event, data) {\n    const trackId = data.id;\n    const altAudio = !!this.hls.audioTracks[trackId].url;\n    if (altAudio) {\n      const videoBuffer = this.videoBuffer;\n      // if we switched on alternate audio, ensure that main fragment scheduling is synced with video sourcebuffer buffered\n      if (videoBuffer && this.mediaBuffer !== videoBuffer) {\n        this.log('Switching on alternate audio, use video.buffered to schedule main fragment loading');\n        this.mediaBuffer = videoBuffer;\n      }\n    }\n    this.altAudio = altAudio;\n    this.tick();\n  }\n  onBufferCreated(event, data) {\n    const tracks = data.tracks;\n    let mediaTrack;\n    let name;\n    let alternate = false;\n    for (const type in tracks) {\n      const track = tracks[type];\n      if (track.id === 'main') {\n        name = type;\n        mediaTrack = track;\n        // keep video source buffer reference\n        if (type === 'video') {\n          const videoTrack = tracks[type];\n          if (videoTrack) {\n            this.videoBuffer = videoTrack.buffer;\n          }\n        }\n      } else {\n        alternate = true;\n      }\n    }\n    if (alternate && mediaTrack) {\n      this.log(`Alternate track found, use ${name}.buffered to schedule main fragment loading`);\n      this.mediaBuffer = mediaTrack.buffer;\n    } else {\n      this.mediaBuffer = this.media;\n    }\n  }\n  onFragBuffered(event, data) {\n    const {\n      frag,\n      part\n    } = data;\n    if (frag && frag.type !== PlaylistLevelType.MAIN) {\n      return;\n    }\n    if (this.fragContextChanged(frag)) {\n      // If a level switch was requested while a fragment was buffering, it will emit the FRAG_BUFFERED event upon completion\n      // Avoid setting state back to IDLE, since that will interfere with a level switch\n      this.warn(`Fragment ${frag.sn}${part ? ' p: ' + part.index : ''} of level ${frag.level} finished buffering, but was aborted. state: ${this.state}`);\n      if (this.state === State.PARSED) {\n        this.state = State.IDLE;\n      }\n      return;\n    }\n    const stats = part ? part.stats : frag.stats;\n    this.fragLastKbps = Math.round(8 * stats.total / (stats.buffering.end - stats.loading.first));\n    if (frag.sn !== 'initSegment') {\n      this.fragPrevious = frag;\n    }\n    this.fragBufferedComplete(frag, part);\n  }\n  onError(event, data) {\n    var _data$context;\n    if (data.fatal) {\n      this.state = State.ERROR;\n      return;\n    }\n    switch (data.details) {\n      case ErrorDetails.FRAG_GAP:\n      case ErrorDetails.FRAG_PARSING_ERROR:\n      case ErrorDetails.FRAG_DECRYPT_ERROR:\n      case ErrorDetails.FRAG_LOAD_ERROR:\n      case ErrorDetails.FRAG_LOAD_TIMEOUT:\n      case ErrorDetails.KEY_LOAD_ERROR:\n      case ErrorDetails.KEY_LOAD_TIMEOUT:\n        this.onFragmentOrKeyLoadError(PlaylistLevelType.MAIN, data);\n        break;\n      case ErrorDetails.LEVEL_LOAD_ERROR:\n      case ErrorDetails.LEVEL_LOAD_TIMEOUT:\n      case ErrorDetails.LEVEL_PARSING_ERROR:\n        // in case of non fatal error while loading level, if level controller is not retrying to load level, switch back to IDLE\n        if (!data.levelRetry && this.state === State.WAITING_LEVEL && ((_data$context = data.context) == null ? void 0 : _data$context.type) === PlaylistContextType.LEVEL) {\n          this.state = State.IDLE;\n        }\n        break;\n      case ErrorDetails.BUFFER_APPEND_ERROR:\n      case ErrorDetails.BUFFER_FULL_ERROR:\n        if (!data.parent || data.parent !== 'main') {\n          return;\n        }\n        if (data.details === ErrorDetails.BUFFER_APPEND_ERROR) {\n          this.resetLoadingState();\n          return;\n        }\n        if (this.reduceLengthAndFlushBuffer(data)) {\n          this.flushMainBuffer(0, Number.POSITIVE_INFINITY);\n        }\n        break;\n      case ErrorDetails.INTERNAL_EXCEPTION:\n        this.recoverWorkerError(data);\n        break;\n    }\n  }\n\n  // Checks the health of the buffer and attempts to resolve playback stalls.\n  checkBuffer() {\n    const {\n      media,\n      gapController\n    } = this;\n    if (!media || !gapController || !media.readyState) {\n      // Exit early if we don't have media or if the media hasn't buffered anything yet (readyState 0)\n      return;\n    }\n    if (this.loadedmetadata || !BufferHelper.getBuffered(media).length) {\n      // Resolve gaps using the main buffer, whose ranges are the intersections of the A/V sourcebuffers\n      const activeFrag = this.state !== State.IDLE ? this.fragCurrent : null;\n      gapController.poll(this.lastCurrentTime, activeFrag);\n    }\n    this.lastCurrentTime = media.currentTime;\n  }\n  onFragLoadEmergencyAborted() {\n    this.state = State.IDLE;\n    // if loadedmetadata is not set, it means that we are emergency switch down on first frag\n    // in that case, reset startFragRequested flag\n    if (!this.loadedmetadata) {\n      this.startFragRequested = false;\n      this.nextLoadPosition = this.startPosition;\n    }\n    this.tickImmediate();\n  }\n  onBufferFlushed(event, {\n    type\n  }) {\n    if (type !== ElementaryStreamTypes.AUDIO || this.audioOnly && !this.altAudio) {\n      const mediaBuffer = (type === ElementaryStreamTypes.VIDEO ? this.videoBuffer : this.mediaBuffer) || this.media;\n      this.afterBufferFlushed(mediaBuffer, type, PlaylistLevelType.MAIN);\n      this.tick();\n    }\n  }\n  onLevelsUpdated(event, data) {\n    if (this.level > -1 && this.fragCurrent) {\n      this.level = this.fragCurrent.level;\n    }\n    this.levels = data.levels;\n  }\n  swapAudioCodec() {\n    this.audioCodecSwap = !this.audioCodecSwap;\n  }\n\n  /**\n   * Seeks to the set startPosition if not equal to the mediaElement's current time.\n   */\n  seekToStartPos() {\n    const {\n      media\n    } = this;\n    if (!media) {\n      return;\n    }\n    const currentTime = media.currentTime;\n    let startPosition = this.startPosition;\n    // only adjust currentTime if different from startPosition or if startPosition not buffered\n    // at that stage, there should be only one buffered range, as we reach that code after first fragment has been buffered\n    if (startPosition >= 0 && currentTime < startPosition) {\n      if (media.seeking) {\n        this.log(`could not seek to ${startPosition}, already seeking at ${currentTime}`);\n        return;\n      }\n      const buffered = BufferHelper.getBuffered(media);\n      const bufferStart = buffered.length ? buffered.start(0) : 0;\n      const delta = bufferStart - startPosition;\n      if (delta > 0 && (delta < this.config.maxBufferHole || delta < this.config.maxFragLookUpTolerance)) {\n        this.log(`adjusting start position by ${delta} to match buffer start`);\n        startPosition += delta;\n        this.startPosition = startPosition;\n      }\n      this.log(`seek to target start position ${startPosition} from current time ${currentTime}`);\n      media.currentTime = startPosition;\n    }\n  }\n  _getAudioCodec(currentLevel) {\n    let audioCodec = this.config.defaultAudioCodec || currentLevel.audioCodec;\n    if (this.audioCodecSwap && audioCodec) {\n      this.log('Swapping audio codec');\n      if (audioCodec.indexOf('mp4a.40.5') !== -1) {\n        audioCodec = 'mp4a.40.2';\n      } else {\n        audioCodec = 'mp4a.40.5';\n      }\n    }\n    return audioCodec;\n  }\n  _loadBitrateTestFrag(frag, level) {\n    frag.bitrateTest = true;\n    this._doFragLoad(frag, level).then(data => {\n      const {\n        hls\n      } = this;\n      if (!data || this.fragContextChanged(frag)) {\n        return;\n      }\n      level.fragmentError = 0;\n      this.state = State.IDLE;\n      this.startFragRequested = false;\n      this.bitrateTest = false;\n      const stats = frag.stats;\n      // Bitrate tests fragments are neither parsed nor buffered\n      stats.parsing.start = stats.parsing.end = stats.buffering.start = stats.buffering.end = self.performance.now();\n      hls.trigger(Events.FRAG_LOADED, data);\n      frag.bitrateTest = false;\n    });\n  }\n  _handleTransmuxComplete(transmuxResult) {\n    var _id3$samples;\n    const id = 'main';\n    const {\n      hls\n    } = this;\n    const {\n      remuxResult,\n      chunkMeta\n    } = transmuxResult;\n    const context = this.getCurrentContext(chunkMeta);\n    if (!context) {\n      this.resetWhenMissingContext(chunkMeta);\n      return;\n    }\n    const {\n      frag,\n      part,\n      level\n    } = context;\n    const {\n      video,\n      text,\n      id3,\n      initSegment\n    } = remuxResult;\n    const {\n      details\n    } = level;\n    // The audio-stream-controller handles audio buffering if Hls.js is playing an alternate audio track\n    const audio = this.altAudio ? undefined : remuxResult.audio;\n\n    // Check if the current fragment has been aborted. We check this by first seeing if we're still playing the current level.\n    // If we are, subsequently check if the currently loading fragment (fragCurrent) has changed.\n    if (this.fragContextChanged(frag)) {\n      this.fragmentTracker.removeFragment(frag);\n      return;\n    }\n    this.state = State.PARSING;\n    if (initSegment) {\n      if (initSegment != null && initSegment.tracks) {\n        const mapFragment = frag.initSegment || frag;\n        this._bufferInitSegment(level, initSegment.tracks, mapFragment, chunkMeta);\n        hls.trigger(Events.FRAG_PARSING_INIT_SEGMENT, {\n          frag: mapFragment,\n          id,\n          tracks: initSegment.tracks\n        });\n      }\n\n      // This would be nice if Number.isFinite acted as a typeguard, but it doesn't. See: https://github.com/Microsoft/TypeScript/issues/10038\n      const initPTS = initSegment.initPTS;\n      const timescale = initSegment.timescale;\n      if (isFiniteNumber(initPTS)) {\n        this.initPTS[frag.cc] = {\n          baseTime: initPTS,\n          timescale\n        };\n        hls.trigger(Events.INIT_PTS_FOUND, {\n          frag,\n          id,\n          initPTS,\n          timescale\n        });\n      }\n    }\n\n    // Avoid buffering if backtracking this fragment\n    if (video && details && frag.sn !== 'initSegment') {\n      const prevFrag = details.fragments[frag.sn - 1 - details.startSN];\n      const isFirstFragment = frag.sn === details.startSN;\n      const isFirstInDiscontinuity = !prevFrag || frag.cc > prevFrag.cc;\n      if (remuxResult.independent !== false) {\n        const {\n          startPTS,\n          endPTS,\n          startDTS,\n          endDTS\n        } = video;\n        if (part) {\n          part.elementaryStreams[video.type] = {\n            startPTS,\n            endPTS,\n            startDTS,\n            endDTS\n          };\n        } else {\n          if (video.firstKeyFrame && video.independent && chunkMeta.id === 1 && !isFirstInDiscontinuity) {\n            this.couldBacktrack = true;\n          }\n          if (video.dropped && video.independent) {\n            // Backtrack if dropped frames create a gap after currentTime\n\n            const bufferInfo = this.getMainFwdBufferInfo();\n            const targetBufferTime = (bufferInfo ? bufferInfo.end : this.getLoadPosition()) + this.config.maxBufferHole;\n            const startTime = video.firstKeyFramePTS ? video.firstKeyFramePTS : startPTS;\n            if (!isFirstFragment && targetBufferTime < startTime - this.config.maxBufferHole && !isFirstInDiscontinuity) {\n              this.backtrack(frag);\n              return;\n            } else if (isFirstInDiscontinuity) {\n              // Mark segment with a gap to avoid loop loading\n              frag.gap = true;\n            }\n            // Set video stream start to fragment start so that truncated samples do not distort the timeline, and mark it partial\n            frag.setElementaryStreamInfo(video.type, frag.start, endPTS, frag.start, endDTS, true);\n          } else if (isFirstFragment && startPTS > MAX_START_GAP_JUMP) {\n            // Mark segment with a gap to skip large start gap\n            frag.gap = true;\n          }\n        }\n        frag.setElementaryStreamInfo(video.type, startPTS, endPTS, startDTS, endDTS);\n        if (this.backtrackFragment) {\n          this.backtrackFragment = frag;\n        }\n        this.bufferFragmentData(video, frag, part, chunkMeta, isFirstFragment || isFirstInDiscontinuity);\n      } else if (isFirstFragment || isFirstInDiscontinuity) {\n        // Mark segment with a gap to avoid loop loading\n        frag.gap = true;\n      } else {\n        this.backtrack(frag);\n        return;\n      }\n    }\n    if (audio) {\n      const {\n        startPTS,\n        endPTS,\n        startDTS,\n        endDTS\n      } = audio;\n      if (part) {\n        part.elementaryStreams[ElementaryStreamTypes.AUDIO] = {\n          startPTS,\n          endPTS,\n          startDTS,\n          endDTS\n        };\n      }\n      frag.setElementaryStreamInfo(ElementaryStreamTypes.AUDIO, startPTS, endPTS, startDTS, endDTS);\n      this.bufferFragmentData(audio, frag, part, chunkMeta);\n    }\n    if (details && id3 != null && (_id3$samples = id3.samples) != null && _id3$samples.length) {\n      const emittedID3 = {\n        id,\n        frag,\n        details,\n        samples: id3.samples\n      };\n      hls.trigger(Events.FRAG_PARSING_METADATA, emittedID3);\n    }\n    if (details && text) {\n      const emittedText = {\n        id,\n        frag,\n        details,\n        samples: text.samples\n      };\n      hls.trigger(Events.FRAG_PARSING_USERDATA, emittedText);\n    }\n  }\n  _bufferInitSegment(currentLevel, tracks, frag, chunkMeta) {\n    if (this.state !== State.PARSING) {\n      return;\n    }\n    this.audioOnly = !!tracks.audio && !tracks.video;\n\n    // if audio track is expected to come from audio stream controller, discard any coming from main\n    if (this.altAudio && !this.audioOnly) {\n      delete tracks.audio;\n    }\n    // include levelCodec in audio and video tracks\n    const {\n      audio,\n      video,\n      audiovideo\n    } = tracks;\n    if (audio) {\n      let audioCodec = currentLevel.audioCodec;\n      const ua = navigator.userAgent.toLowerCase();\n      if (this.audioCodecSwitch) {\n        if (audioCodec) {\n          if (audioCodec.indexOf('mp4a.40.5') !== -1) {\n            audioCodec = 'mp4a.40.2';\n          } else {\n            audioCodec = 'mp4a.40.5';\n          }\n        }\n        // In the case that AAC and HE-AAC audio codecs are signalled in manifest,\n        // force HE-AAC, as it seems that most browsers prefers it.\n        // don't force HE-AAC if mono stream, or in Firefox\n        const audioMetadata = audio.metadata;\n        if (audioMetadata && 'channelCount' in audioMetadata && (audioMetadata.channelCount || 1) !== 1 && ua.indexOf('firefox') === -1) {\n          audioCodec = 'mp4a.40.5';\n        }\n      }\n      // HE-AAC is broken on Android, always signal audio codec as AAC even if variant manifest states otherwise\n      if (audioCodec && audioCodec.indexOf('mp4a.40.5') !== -1 && ua.indexOf('android') !== -1 && audio.container !== 'audio/mpeg') {\n        // Exclude mpeg audio\n        audioCodec = 'mp4a.40.2';\n        this.log(`Android: force audio codec to ${audioCodec}`);\n      }\n      if (currentLevel.audioCodec && currentLevel.audioCodec !== audioCodec) {\n        this.log(`Swapping manifest audio codec \"${currentLevel.audioCodec}\" for \"${audioCodec}\"`);\n      }\n      audio.levelCodec = audioCodec;\n      audio.id = 'main';\n      this.log(`Init audio buffer, container:${audio.container}, codecs[selected/level/parsed]=[${audioCodec || ''}/${currentLevel.audioCodec || ''}/${audio.codec}]`);\n    }\n    if (video) {\n      video.levelCodec = currentLevel.videoCodec;\n      video.id = 'main';\n      this.log(`Init video buffer, container:${video.container}, codecs[level/parsed]=[${currentLevel.videoCodec || ''}/${video.codec}]`);\n    }\n    if (audiovideo) {\n      this.log(`Init audiovideo buffer, container:${audiovideo.container}, codecs[level/parsed]=[${currentLevel.codecs}/${audiovideo.codec}]`);\n    }\n    this.hls.trigger(Events.BUFFER_CODECS, tracks);\n    // loop through tracks that are going to be provided to bufferController\n    Object.keys(tracks).forEach(trackName => {\n      const track = tracks[trackName];\n      const initSegment = track.initSegment;\n      if (initSegment != null && initSegment.byteLength) {\n        this.hls.trigger(Events.BUFFER_APPENDING, {\n          type: trackName,\n          data: initSegment,\n          frag,\n          part: null,\n          chunkMeta,\n          parent: frag.type\n        });\n      }\n    });\n    // trigger handler right now\n    this.tickImmediate();\n  }\n  getMainFwdBufferInfo() {\n    return this.getFwdBufferInfo(this.mediaBuffer ? this.mediaBuffer : this.media, PlaylistLevelType.MAIN);\n  }\n  backtrack(frag) {\n    this.couldBacktrack = true;\n    // Causes findFragments to backtrack through fragments to find the keyframe\n    this.backtrackFragment = frag;\n    this.resetTransmuxer();\n    this.flushBufferGap(frag);\n    this.fragmentTracker.removeFragment(frag);\n    this.fragPrevious = null;\n    this.nextLoadPosition = frag.start;\n    this.state = State.IDLE;\n  }\n  checkFragmentChanged() {\n    const video = this.media;\n    let fragPlayingCurrent = null;\n    if (video && video.readyState > 1 && video.seeking === false) {\n      const currentTime = video.currentTime;\n      /* if video element is in seeked state, currentTime can only increase.\n        (assuming that playback rate is positive ...)\n        As sometimes currentTime jumps back to zero after a\n        media decode error, check this, to avoid seeking back to\n        wrong position after a media decode error\n      */\n\n      if (BufferHelper.isBuffered(video, currentTime)) {\n        fragPlayingCurrent = this.getAppendedFrag(currentTime);\n      } else if (BufferHelper.isBuffered(video, currentTime + 0.1)) {\n        /* ensure that FRAG_CHANGED event is triggered at startup,\n          when first video frame is displayed and playback is paused.\n          add a tolerance of 100ms, in case current position is not buffered,\n          check if current pos+100ms is buffered and use that buffer range\n          for FRAG_CHANGED event reporting */\n        fragPlayingCurrent = this.getAppendedFrag(currentTime + 0.1);\n      }\n      if (fragPlayingCurrent) {\n        this.backtrackFragment = null;\n        const fragPlaying = this.fragPlaying;\n        const fragCurrentLevel = fragPlayingCurrent.level;\n        if (!fragPlaying || fragPlayingCurrent.sn !== fragPlaying.sn || fragPlaying.level !== fragCurrentLevel) {\n          this.fragPlaying = fragPlayingCurrent;\n          this.hls.trigger(Events.FRAG_CHANGED, {\n            frag: fragPlayingCurrent\n          });\n          if (!fragPlaying || fragPlaying.level !== fragCurrentLevel) {\n            this.hls.trigger(Events.LEVEL_SWITCHED, {\n              level: fragCurrentLevel\n            });\n          }\n        }\n      }\n    }\n  }\n  get nextLevel() {\n    const frag = this.nextBufferedFrag;\n    if (frag) {\n      return frag.level;\n    }\n    return -1;\n  }\n  get currentFrag() {\n    const media = this.media;\n    if (media) {\n      return this.fragPlaying || this.getAppendedFrag(media.currentTime);\n    }\n    return null;\n  }\n  get currentProgramDateTime() {\n    const media = this.media;\n    if (media) {\n      const currentTime = media.currentTime;\n      const frag = this.currentFrag;\n      if (frag && isFiniteNumber(currentTime) && isFiniteNumber(frag.programDateTime)) {\n        const epocMs = frag.programDateTime + (currentTime - frag.start) * 1000;\n        return new Date(epocMs);\n      }\n    }\n    return null;\n  }\n  get currentLevel() {\n    const frag = this.currentFrag;\n    if (frag) {\n      return frag.level;\n    }\n    return -1;\n  }\n  get nextBufferedFrag() {\n    const frag = this.currentFrag;\n    if (frag) {\n      return this.followingBufferedFrag(frag);\n    }\n    return null;\n  }\n  get forceStartLoad() {\n    return this._forceStartLoad;\n  }\n}\n\n/**\n * The `Hls` class is the core of the HLS.js library used to instantiate player instances.\n * @public\n */\nclass Hls {\n  /**\n   * Get the video-dev/hls.js package version.\n   */\n  static get version() {\n    return \"1.5.18\";\n  }\n\n  /**\n   * Check if the required MediaSource Extensions are available.\n   */\n  static isMSESupported() {\n    return isMSESupported();\n  }\n\n  /**\n   * Check if MediaSource Extensions are available and isTypeSupported checks pass for any baseline codecs.\n   */\n  static isSupported() {\n    return isSupported();\n  }\n\n  /**\n   * Get the MediaSource global used for MSE playback (ManagedMediaSource, MediaSource, or WebKitMediaSource).\n   */\n  static getMediaSource() {\n    return getMediaSource();\n  }\n  static get Events() {\n    return Events;\n  }\n  static get ErrorTypes() {\n    return ErrorTypes;\n  }\n  static get ErrorDetails() {\n    return ErrorDetails;\n  }\n\n  /**\n   * Get the default configuration applied to new instances.\n   */\n  static get DefaultConfig() {\n    if (!Hls.defaultConfig) {\n      return hlsDefaultConfig;\n    }\n    return Hls.defaultConfig;\n  }\n\n  /**\n   * Replace the default configuration applied to new instances.\n   */\n  static set DefaultConfig(defaultConfig) {\n    Hls.defaultConfig = defaultConfig;\n  }\n\n  /**\n   * Creates an instance of an HLS client that can attach to exactly one `HTMLMediaElement`.\n   * @param userConfig - Configuration options applied over `Hls.DefaultConfig`\n   */\n  constructor(userConfig = {}) {\n    /**\n     * The runtime configuration used by the player. At instantiation this is combination of `hls.userConfig` merged over `Hls.DefaultConfig`.\n     */\n    this.config = void 0;\n    /**\n     * The configuration object provided on player instantiation.\n     */\n    this.userConfig = void 0;\n    this.coreComponents = void 0;\n    this.networkControllers = void 0;\n    this.started = false;\n    this._emitter = new EventEmitter();\n    this._autoLevelCapping = -1;\n    this._maxHdcpLevel = null;\n    this.abrController = void 0;\n    this.bufferController = void 0;\n    this.capLevelController = void 0;\n    this.latencyController = void 0;\n    this.levelController = void 0;\n    this.streamController = void 0;\n    this.audioTrackController = void 0;\n    this.subtitleTrackController = void 0;\n    this.emeController = void 0;\n    this.cmcdController = void 0;\n    this._media = null;\n    this.url = null;\n    this.triggeringException = void 0;\n    enableLogs(userConfig.debug || false, 'Hls instance');\n    const config = this.config = mergeConfig(Hls.DefaultConfig, userConfig);\n    this.userConfig = userConfig;\n    if (config.progressive) {\n      enableStreamingMode(config);\n    }\n\n    // core controllers and network loaders\n    const {\n      abrController: ConfigAbrController,\n      bufferController: ConfigBufferController,\n      capLevelController: ConfigCapLevelController,\n      errorController: ConfigErrorController,\n      fpsController: ConfigFpsController\n    } = config;\n    const errorController = new ConfigErrorController(this);\n    const abrController = this.abrController = new ConfigAbrController(this);\n    const bufferController = this.bufferController = new ConfigBufferController(this);\n    const capLevelController = this.capLevelController = new ConfigCapLevelController(this);\n    const fpsController = new ConfigFpsController(this);\n    const playListLoader = new PlaylistLoader(this);\n    const id3TrackController = new ID3TrackController(this);\n    const ConfigContentSteeringController = config.contentSteeringController;\n    // ConentSteeringController is defined before LevelController to receive Multivariant Playlist events first\n    const contentSteering = ConfigContentSteeringController ? new ConfigContentSteeringController(this) : null;\n    const levelController = this.levelController = new LevelController(this, contentSteering);\n    // FragmentTracker must be defined before StreamController because the order of event handling is important\n    const fragmentTracker = new FragmentTracker(this);\n    const keyLoader = new KeyLoader(this.config);\n    const streamController = this.streamController = new StreamController(this, fragmentTracker, keyLoader);\n\n    // Cap level controller uses streamController to flush the buffer\n    capLevelController.setStreamController(streamController);\n    // fpsController uses streamController to switch when frames are being dropped\n    fpsController.setStreamController(streamController);\n    const networkControllers = [playListLoader, levelController, streamController];\n    if (contentSteering) {\n      networkControllers.splice(1, 0, contentSteering);\n    }\n    this.networkControllers = networkControllers;\n    const coreComponents = [abrController, bufferController, capLevelController, fpsController, id3TrackController, fragmentTracker];\n    this.audioTrackController = this.createController(config.audioTrackController, networkControllers);\n    const AudioStreamControllerClass = config.audioStreamController;\n    if (AudioStreamControllerClass) {\n      networkControllers.push(new AudioStreamControllerClass(this, fragmentTracker, keyLoader));\n    }\n    // subtitleTrackController must be defined before subtitleStreamController because the order of event handling is important\n    this.subtitleTrackController = this.createController(config.subtitleTrackController, networkControllers);\n    const SubtitleStreamControllerClass = config.subtitleStreamController;\n    if (SubtitleStreamControllerClass) {\n      networkControllers.push(new SubtitleStreamControllerClass(this, fragmentTracker, keyLoader));\n    }\n    this.createController(config.timelineController, coreComponents);\n    keyLoader.emeController = this.emeController = this.createController(config.emeController, coreComponents);\n    this.cmcdController = this.createController(config.cmcdController, coreComponents);\n    this.latencyController = this.createController(LatencyController, coreComponents);\n    this.coreComponents = coreComponents;\n\n    // Error controller handles errors before and after all other controllers\n    // This listener will be invoked after all other controllers error listeners\n    networkControllers.push(errorController);\n    const onErrorOut = errorController.onErrorOut;\n    if (typeof onErrorOut === 'function') {\n      this.on(Events.ERROR, onErrorOut, errorController);\n    }\n  }\n  createController(ControllerClass, components) {\n    if (ControllerClass) {\n      const controllerInstance = new ControllerClass(this);\n      if (components) {\n        components.push(controllerInstance);\n      }\n      return controllerInstance;\n    }\n    return null;\n  }\n\n  // Delegate the EventEmitter through the public API of Hls.js\n  on(event, listener, context = this) {\n    this._emitter.on(event, listener, context);\n  }\n  once(event, listener, context = this) {\n    this._emitter.once(event, listener, context);\n  }\n  removeAllListeners(event) {\n    this._emitter.removeAllListeners(event);\n  }\n  off(event, listener, context = this, once) {\n    this._emitter.off(event, listener, context, once);\n  }\n  listeners(event) {\n    return this._emitter.listeners(event);\n  }\n  emit(event, name, eventObject) {\n    return this._emitter.emit(event, name, eventObject);\n  }\n  trigger(event, eventObject) {\n    if (this.config.debug) {\n      return this.emit(event, event, eventObject);\n    } else {\n      try {\n        return this.emit(event, event, eventObject);\n      } catch (error) {\n        logger.error('An internal error happened while handling event ' + event + '. Error message: \"' + error.message + '\". Here is a stacktrace:', error);\n        // Prevent recursion in error event handlers that throw #5497\n        if (!this.triggeringException) {\n          this.triggeringException = true;\n          const fatal = event === Events.ERROR;\n          this.trigger(Events.ERROR, {\n            type: ErrorTypes.OTHER_ERROR,\n            details: ErrorDetails.INTERNAL_EXCEPTION,\n            fatal,\n            event,\n            error\n          });\n          this.triggeringException = false;\n        }\n      }\n    }\n    return false;\n  }\n  listenerCount(event) {\n    return this._emitter.listenerCount(event);\n  }\n\n  /**\n   * Dispose of the instance\n   */\n  destroy() {\n    logger.log('destroy');\n    this.trigger(Events.DESTROYING, undefined);\n    this.detachMedia();\n    this.removeAllListeners();\n    this._autoLevelCapping = -1;\n    this.url = null;\n    this.networkControllers.forEach(component => component.destroy());\n    this.networkControllers.length = 0;\n    this.coreComponents.forEach(component => component.destroy());\n    this.coreComponents.length = 0;\n    // Remove any references that could be held in config options or callbacks\n    const config = this.config;\n    config.xhrSetup = config.fetchSetup = undefined;\n    // @ts-ignore\n    this.userConfig = null;\n  }\n\n  /**\n   * Attaches Hls.js to a media element\n   */\n  attachMedia(media) {\n    logger.log('attachMedia');\n    this._media = media;\n    this.trigger(Events.MEDIA_ATTACHING, {\n      media: media\n    });\n  }\n\n  /**\n   * Detach Hls.js from the media\n   */\n  detachMedia() {\n    logger.log('detachMedia');\n    this.trigger(Events.MEDIA_DETACHING, undefined);\n    this._media = null;\n  }\n\n  /**\n   * Set the source URL. Can be relative or absolute.\n   */\n  loadSource(url) {\n    this.stopLoad();\n    const media = this.media;\n    const loadedSource = this.url;\n    const loadingSource = this.url = urlToolkitExports.buildAbsoluteURL(self.location.href, url, {\n      alwaysNormalize: true\n    });\n    this._autoLevelCapping = -1;\n    this._maxHdcpLevel = null;\n    logger.log(`loadSource:${loadingSource}`);\n    if (media && loadedSource && (loadedSource !== loadingSource || this.bufferController.hasSourceTypes())) {\n      this.detachMedia();\n      this.attachMedia(media);\n    }\n    // when attaching to a source URL, trigger a playlist load\n    this.trigger(Events.MANIFEST_LOADING, {\n      url: url\n    });\n  }\n\n  /**\n   * Start loading data from the stream source.\n   * Depending on default config, client starts loading automatically when a source is set.\n   *\n   * @param startPosition - Set the start position to stream from.\n   * Defaults to -1 (None: starts from earliest point)\n   */\n  startLoad(startPosition = -1) {\n    logger.log(`startLoad(${startPosition})`);\n    this.started = true;\n    this.resumeBuffering();\n    for (let i = 0; i < this.networkControllers.length; i++) {\n      this.networkControllers[i].startLoad(startPosition);\n      if (!this.started || !this.networkControllers) {\n        break;\n      }\n    }\n  }\n\n  /**\n   * Stop loading of any stream data.\n   */\n  stopLoad() {\n    logger.log('stopLoad');\n    this.started = false;\n    for (let i = 0; i < this.networkControllers.length; i++) {\n      this.networkControllers[i].stopLoad();\n      if (this.started || !this.networkControllers) {\n        break;\n      }\n    }\n  }\n\n  /**\n   * Resumes stream controller segment loading after `pauseBuffering` has been called.\n   */\n  resumeBuffering() {\n    logger.log(`resume buffering`);\n    this.networkControllers.forEach(controller => {\n      if (controller.resumeBuffering) {\n        controller.resumeBuffering();\n      }\n    });\n  }\n\n  /**\n   * Prevents stream controller from loading new segments until `resumeBuffering` is called.\n   * This allows for media buffering to be paused without interupting playlist loading.\n   */\n  pauseBuffering() {\n    logger.log(`pause buffering`);\n    this.networkControllers.forEach(controller => {\n      if (controller.pauseBuffering) {\n        controller.pauseBuffering();\n      }\n    });\n  }\n\n  /**\n   * Swap through possible audio codecs in the stream (for example to switch from stereo to 5.1)\n   */\n  swapAudioCodec() {\n    logger.log('swapAudioCodec');\n    this.streamController.swapAudioCodec();\n  }\n\n  /**\n   * When the media-element fails, this allows to detach and then re-attach it\n   * as one call (convenience method).\n   *\n   * Automatic recovery of media-errors by this process is configurable.\n   */\n  recoverMediaError() {\n    logger.log('recoverMediaError');\n    const media = this._media;\n    this.detachMedia();\n    if (media) {\n      this.attachMedia(media);\n    }\n  }\n  removeLevel(levelIndex) {\n    this.levelController.removeLevel(levelIndex);\n  }\n\n  /**\n   * @returns an array of levels (variants) sorted by HDCP-LEVEL, RESOLUTION (height), FRAME-RATE, CODECS, VIDEO-RANGE, and BANDWIDTH\n   */\n  get levels() {\n    const levels = this.levelController.levels;\n    return levels ? levels : [];\n  }\n\n  /**\n   * Index of quality level (variant) currently played\n   */\n  get currentLevel() {\n    return this.streamController.currentLevel;\n  }\n\n  /**\n   * Set quality level index immediately. This will flush the current buffer to replace the quality asap. That means playback will interrupt at least shortly to re-buffer and re-sync eventually. Set to -1 for automatic level selection.\n   */\n  set currentLevel(newLevel) {\n    logger.log(`set currentLevel:${newLevel}`);\n    this.levelController.manualLevel = newLevel;\n    this.streamController.immediateLevelSwitch();\n  }\n\n  /**\n   * Index of next quality level loaded as scheduled by stream controller.\n   */\n  get nextLevel() {\n    return this.streamController.nextLevel;\n  }\n\n  /**\n   * Set quality level index for next loaded data.\n   * This will switch the video quality asap, without interrupting playback.\n   * May abort current loading of data, and flush parts of buffer (outside currently played fragment region).\n   * @param newLevel - Pass -1 for automatic level selection\n   */\n  set nextLevel(newLevel) {\n    logger.log(`set nextLevel:${newLevel}`);\n    this.levelController.manualLevel = newLevel;\n    this.streamController.nextLevelSwitch();\n  }\n\n  /**\n   * Return the quality level of the currently or last (of none is loaded currently) segment\n   */\n  get loadLevel() {\n    return this.levelController.level;\n  }\n\n  /**\n   * Set quality level index for next loaded data in a conservative way.\n   * This will switch the quality without flushing, but interrupt current loading.\n   * Thus the moment when the quality switch will appear in effect will only be after the already existing buffer.\n   * @param newLevel - Pass -1 for automatic level selection\n   */\n  set loadLevel(newLevel) {\n    logger.log(`set loadLevel:${newLevel}`);\n    this.levelController.manualLevel = newLevel;\n  }\n\n  /**\n   * get next quality level loaded\n   */\n  get nextLoadLevel() {\n    return this.levelController.nextLoadLevel;\n  }\n\n  /**\n   * Set quality level of next loaded segment in a fully \"non-destructive\" way.\n   * Same as `loadLevel` but will wait for next switch (until current loading is done).\n   */\n  set nextLoadLevel(level) {\n    this.levelController.nextLoadLevel = level;\n  }\n\n  /**\n   * Return \"first level\": like a default level, if not set,\n   * falls back to index of first level referenced in manifest\n   */\n  get firstLevel() {\n    return Math.max(this.levelController.firstLevel, this.minAutoLevel);\n  }\n\n  /**\n   * Sets \"first-level\", see getter.\n   */\n  set firstLevel(newLevel) {\n    logger.log(`set firstLevel:${newLevel}`);\n    this.levelController.firstLevel = newLevel;\n  }\n\n  /**\n   * Return the desired start level for the first fragment that will be loaded.\n   * The default value of -1 indicates automatic start level selection.\n   * Setting hls.nextAutoLevel without setting a startLevel will result in\n   * the nextAutoLevel value being used for one fragment load.\n   */\n  get startLevel() {\n    const startLevel = this.levelController.startLevel;\n    if (startLevel === -1 && this.abrController.forcedAutoLevel > -1) {\n      return this.abrController.forcedAutoLevel;\n    }\n    return startLevel;\n  }\n\n  /**\n   * set  start level (level of first fragment that will be played back)\n   * if not overrided by user, first level appearing in manifest will be used as start level\n   * if -1 : automatic start level selection, playback will start from level matching download bandwidth\n   * (determined from download of first segment)\n   */\n  set startLevel(newLevel) {\n    logger.log(`set startLevel:${newLevel}`);\n    // if not in automatic start level detection, ensure startLevel is greater than minAutoLevel\n    if (newLevel !== -1) {\n      newLevel = Math.max(newLevel, this.minAutoLevel);\n    }\n    this.levelController.startLevel = newLevel;\n  }\n\n  /**\n   * Whether level capping is enabled.\n   * Default value is set via `config.capLevelToPlayerSize`.\n   */\n  get capLevelToPlayerSize() {\n    return this.config.capLevelToPlayerSize;\n  }\n\n  /**\n   * Enables or disables level capping. If disabled after previously enabled, `nextLevelSwitch` will be immediately called.\n   */\n  set capLevelToPlayerSize(shouldStartCapping) {\n    const newCapLevelToPlayerSize = !!shouldStartCapping;\n    if (newCapLevelToPlayerSize !== this.config.capLevelToPlayerSize) {\n      if (newCapLevelToPlayerSize) {\n        this.capLevelController.startCapping(); // If capping occurs, nextLevelSwitch will happen based on size.\n      } else {\n        this.capLevelController.stopCapping();\n        this.autoLevelCapping = -1;\n        this.streamController.nextLevelSwitch(); // Now we're uncapped, get the next level asap.\n      }\n      this.config.capLevelToPlayerSize = newCapLevelToPlayerSize;\n    }\n  }\n\n  /**\n   * Capping/max level value that should be used by automatic level selection algorithm (`ABRController`)\n   */\n  get autoLevelCapping() {\n    return this._autoLevelCapping;\n  }\n\n  /**\n   * Returns the current bandwidth estimate in bits per second, when available. Otherwise, `NaN` is returned.\n   */\n  get bandwidthEstimate() {\n    const {\n      bwEstimator\n    } = this.abrController;\n    if (!bwEstimator) {\n      return NaN;\n    }\n    return bwEstimator.getEstimate();\n  }\n  set bandwidthEstimate(abrEwmaDefaultEstimate) {\n    this.abrController.resetEstimator(abrEwmaDefaultEstimate);\n  }\n\n  /**\n   * get time to first byte estimate\n   * @type {number}\n   */\n  get ttfbEstimate() {\n    const {\n      bwEstimator\n    } = this.abrController;\n    if (!bwEstimator) {\n      return NaN;\n    }\n    return bwEstimator.getEstimateTTFB();\n  }\n\n  /**\n   * Capping/max level value that should be used by automatic level selection algorithm (`ABRController`)\n   */\n  set autoLevelCapping(newLevel) {\n    if (this._autoLevelCapping !== newLevel) {\n      logger.log(`set autoLevelCapping:${newLevel}`);\n      this._autoLevelCapping = newLevel;\n      this.levelController.checkMaxAutoUpdated();\n    }\n  }\n  get maxHdcpLevel() {\n    return this._maxHdcpLevel;\n  }\n  set maxHdcpLevel(value) {\n    if (isHdcpLevel(value) && this._maxHdcpLevel !== value) {\n      this._maxHdcpLevel = value;\n      this.levelController.checkMaxAutoUpdated();\n    }\n  }\n\n  /**\n   * True when automatic level selection enabled\n   */\n  get autoLevelEnabled() {\n    return this.levelController.manualLevel === -1;\n  }\n\n  /**\n   * Level set manually (if any)\n   */\n  get manualLevel() {\n    return this.levelController.manualLevel;\n  }\n\n  /**\n   * min level selectable in auto mode according to config.minAutoBitrate\n   */\n  get minAutoLevel() {\n    const {\n      levels,\n      config: {\n        minAutoBitrate\n      }\n    } = this;\n    if (!levels) return 0;\n    const len = levels.length;\n    for (let i = 0; i < len; i++) {\n      if (levels[i].maxBitrate >= minAutoBitrate) {\n        return i;\n      }\n    }\n    return 0;\n  }\n\n  /**\n   * max level selectable in auto mode according to autoLevelCapping\n   */\n  get maxAutoLevel() {\n    const {\n      levels,\n      autoLevelCapping,\n      maxHdcpLevel\n    } = this;\n    let maxAutoLevel;\n    if (autoLevelCapping === -1 && levels != null && levels.length) {\n      maxAutoLevel = levels.length - 1;\n    } else {\n      maxAutoLevel = autoLevelCapping;\n    }\n    if (maxHdcpLevel) {\n      for (let i = maxAutoLevel; i--;) {\n        const hdcpLevel = levels[i].attrs['HDCP-LEVEL'];\n        if (hdcpLevel && hdcpLevel <= maxHdcpLevel) {\n          return i;\n        }\n      }\n    }\n    return maxAutoLevel;\n  }\n  get firstAutoLevel() {\n    return this.abrController.firstAutoLevel;\n  }\n\n  /**\n   * next automatically selected quality level\n   */\n  get nextAutoLevel() {\n    return this.abrController.nextAutoLevel;\n  }\n\n  /**\n   * this setter is used to force next auto level.\n   * this is useful to force a switch down in auto mode:\n   * in case of load error on level N, hls.js can set nextAutoLevel to N-1 for example)\n   * forced value is valid for one fragment. upon successful frag loading at forced level,\n   * this value will be resetted to -1 by ABR controller.\n   */\n  set nextAutoLevel(nextLevel) {\n    this.abrController.nextAutoLevel = nextLevel;\n  }\n\n  /**\n   * get the datetime value relative to media.currentTime for the active level Program Date Time if present\n   */\n  get playingDate() {\n    return this.streamController.currentProgramDateTime;\n  }\n  get mainForwardBufferInfo() {\n    return this.streamController.getMainFwdBufferInfo();\n  }\n\n  /**\n   * Find and select the best matching audio track, making a level switch when a Group change is necessary.\n   * Updates `hls.config.audioPreference`. Returns the selected track, or null when no matching track is found.\n   */\n  setAudioOption(audioOption) {\n    var _this$audioTrackContr;\n    return (_this$audioTrackContr = this.audioTrackController) == null ? void 0 : _this$audioTrackContr.setAudioOption(audioOption);\n  }\n  /**\n   * Find and select the best matching subtitle track, making a level switch when a Group change is necessary.\n   * Updates `hls.config.subtitlePreference`. Returns the selected track, or null when no matching track is found.\n   */\n  setSubtitleOption(subtitleOption) {\n    var _this$subtitleTrackCo;\n    (_this$subtitleTrackCo = this.subtitleTrackController) == null ? void 0 : _this$subtitleTrackCo.setSubtitleOption(subtitleOption);\n    return null;\n  }\n\n  /**\n   * Get the complete list of audio tracks across all media groups\n   */\n  get allAudioTracks() {\n    const audioTrackController = this.audioTrackController;\n    return audioTrackController ? audioTrackController.allAudioTracks : [];\n  }\n\n  /**\n   * Get the list of selectable audio tracks\n   */\n  get audioTracks() {\n    const audioTrackController = this.audioTrackController;\n    return audioTrackController ? audioTrackController.audioTracks : [];\n  }\n\n  /**\n   * index of the selected audio track (index in audio track lists)\n   */\n  get audioTrack() {\n    const audioTrackController = this.audioTrackController;\n    return audioTrackController ? audioTrackController.audioTrack : -1;\n  }\n\n  /**\n   * selects an audio track, based on its index in audio track lists\n   */\n  set audioTrack(audioTrackId) {\n    const audioTrackController = this.audioTrackController;\n    if (audioTrackController) {\n      audioTrackController.audioTrack = audioTrackId;\n    }\n  }\n\n  /**\n   * get the complete list of subtitle tracks across all media groups\n   */\n  get allSubtitleTracks() {\n    const subtitleTrackController = this.subtitleTrackController;\n    return subtitleTrackController ? subtitleTrackController.allSubtitleTracks : [];\n  }\n\n  /**\n   * get alternate subtitle tracks list from playlist\n   */\n  get subtitleTracks() {\n    const subtitleTrackController = this.subtitleTrackController;\n    return subtitleTrackController ? subtitleTrackController.subtitleTracks : [];\n  }\n\n  /**\n   * index of the selected subtitle track (index in subtitle track lists)\n   */\n  get subtitleTrack() {\n    const subtitleTrackController = this.subtitleTrackController;\n    return subtitleTrackController ? subtitleTrackController.subtitleTrack : -1;\n  }\n  get media() {\n    return this._media;\n  }\n\n  /**\n   * select an subtitle track, based on its index in subtitle track lists\n   */\n  set subtitleTrack(subtitleTrackId) {\n    const subtitleTrackController = this.subtitleTrackController;\n    if (subtitleTrackController) {\n      subtitleTrackController.subtitleTrack = subtitleTrackId;\n    }\n  }\n\n  /**\n   * Whether subtitle display is enabled or not\n   */\n  get subtitleDisplay() {\n    const subtitleTrackController = this.subtitleTrackController;\n    return subtitleTrackController ? subtitleTrackController.subtitleDisplay : false;\n  }\n\n  /**\n   * Enable/disable subtitle display rendering\n   */\n  set subtitleDisplay(value) {\n    const subtitleTrackController = this.subtitleTrackController;\n    if (subtitleTrackController) {\n      subtitleTrackController.subtitleDisplay = value;\n    }\n  }\n\n  /**\n   * get mode for Low-Latency HLS loading\n   */\n  get lowLatencyMode() {\n    return this.config.lowLatencyMode;\n  }\n\n  /**\n   * Enable/disable Low-Latency HLS part playlist and segment loading, and start live streams at playlist PART-HOLD-BACK rather than HOLD-BACK.\n   */\n  set lowLatencyMode(mode) {\n    this.config.lowLatencyMode = mode;\n  }\n\n  /**\n   * Position (in seconds) of live sync point (ie edge of live position minus safety delay defined by ```hls.config.liveSyncDuration```)\n   * @returns null prior to loading live Playlist\n   */\n  get liveSyncPosition() {\n    return this.latencyController.liveSyncPosition;\n  }\n\n  /**\n   * Estimated position (in seconds) of live edge (ie edge of live playlist plus time sync playlist advanced)\n   * @returns 0 before first playlist is loaded\n   */\n  get latency() {\n    return this.latencyController.latency;\n  }\n\n  /**\n   * maximum distance from the edge before the player seeks forward to ```hls.liveSyncPosition```\n   * configured using ```liveMaxLatencyDurationCount``` (multiple of target duration) or ```liveMaxLatencyDuration```\n   * @returns 0 before first playlist is loaded\n   */\n  get maxLatency() {\n    return this.latencyController.maxLatency;\n  }\n\n  /**\n   * target distance from the edge as calculated by the latency controller\n   */\n  get targetLatency() {\n    return this.latencyController.targetLatency;\n  }\n\n  /**\n   * the rate at which the edge of the current live playlist is advancing or 1 if there is none\n   */\n  get drift() {\n    return this.latencyController.drift;\n  }\n\n  /**\n   * set to true when startLoad is called before MANIFEST_PARSED event\n   */\n  get forceStartLoad() {\n    return this.streamController.forceStartLoad;\n  }\n}\nHls.defaultConfig = void 0;\n\nexport { AbrController, AttrList, AudioStreamController, AudioTrackController, BasePlaylistController, BaseSegment, BaseStreamController, BufferController, CMCDController, CapLevelController, ChunkMetadata, ContentSteeringController, DateRange, EMEController, ErrorActionFlags, ErrorController, ErrorDetails, ErrorTypes, Events, FPSController, Fragment, Hls, HlsSkip, HlsUrlParameters, KeySystemFormats, KeySystems, Level, LevelDetails, LevelKey, LoadStats, MetadataSchema, NetworkErrorAction, Part, PlaylistLevelType, SubtitleStreamController, SubtitleTrackController, TimelineController, Hls as default, getMediaSource, isMSESupported, isSupported };\n//# sourceMappingURL=hls.mjs.map\n","import HTMLReactParser from '../lib/index.js';\n\nexport {\n  Comment,\n  Element,\n  ProcessingInstruction,\n  Text,\n  attributesToProps,\n  domToReact,\n  htmlToDOM,\n} from '../lib/index.js';\n\nexport default HTMLReactParser.default || HTMLReactParser;\n","/**\n * HTML URL properties.\n *\n * Each key is a property name and each value is a list of tag names it applies\n * to or `null` if it applies to all elements.\n *\n * @type {Record<string, Array<string> | null>}\n */\nexport const urlAttributes = {\n  action: ['form'],\n  cite: ['blockquote', 'del', 'ins', 'q'],\n  data: ['object'],\n  formAction: ['button', 'input'],\n  href: ['a', 'area', 'base', 'link'],\n  icon: ['menuitem'],\n  itemId: null,\n  manifest: ['html'],\n  ping: ['a', 'area'],\n  poster: ['video'],\n  src: [\n    'audio',\n    'embed',\n    'iframe',\n    'img',\n    'input',\n    'script',\n    'source',\n    'track',\n    'video'\n  ]\n}\n","const consoleLogger = {\n  type: 'logger',\n  log(args) {\n    this.output('log', args);\n  },\n  warn(args) {\n    this.output('warn', args);\n  },\n  error(args) {\n    this.output('error', args);\n  },\n  output(type, args) {\n    if (console && console[type]) console[type].apply(console, args);\n  }\n};\nclass Logger {\n  constructor(concreteLogger) {\n    let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n    this.init(concreteLogger, options);\n  }\n  init(concreteLogger) {\n    let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n    this.prefix = options.prefix || 'i18next:';\n    this.logger = concreteLogger || consoleLogger;\n    this.options = options;\n    this.debug = options.debug;\n  }\n  log() {\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n    return this.forward(args, 'log', '', true);\n  }\n  warn() {\n    for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n      args[_key2] = arguments[_key2];\n    }\n    return this.forward(args, 'warn', '', true);\n  }\n  error() {\n    for (var _len3 = arguments.length, args = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {\n      args[_key3] = arguments[_key3];\n    }\n    return this.forward(args, 'error', '');\n  }\n  deprecate() {\n    for (var _len4 = arguments.length, args = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {\n      args[_key4] = arguments[_key4];\n    }\n    return this.forward(args, 'warn', 'WARNING DEPRECATED: ', true);\n  }\n  forward(args, lvl, prefix, debugOnly) {\n    if (debugOnly && !this.debug) return null;\n    if (typeof args[0] === 'string') args[0] = `${prefix}${this.prefix} ${args[0]}`;\n    return this.logger[lvl](args);\n  }\n  create(moduleName) {\n    return new Logger(this.logger, {\n      ...{\n        prefix: `${this.prefix}:${moduleName}:`\n      },\n      ...this.options\n    });\n  }\n  clone(options) {\n    options = options || this.options;\n    options.prefix = options.prefix || this.prefix;\n    return new Logger(this.logger, options);\n  }\n}\nvar baseLogger = new Logger();\n\nclass EventEmitter {\n  constructor() {\n    this.observers = {};\n  }\n  on(events, listener) {\n    events.split(' ').forEach(event => {\n      this.observers[event] = this.observers[event] || [];\n      this.observers[event].push(listener);\n    });\n    return this;\n  }\n  off(event, listener) {\n    if (!this.observers[event]) return;\n    if (!listener) {\n      delete this.observers[event];\n      return;\n    }\n    this.observers[event] = this.observers[event].filter(l => l !== listener);\n  }\n  emit(event) {\n    for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n      args[_key - 1] = arguments[_key];\n    }\n    if (this.observers[event]) {\n      const cloned = [].concat(this.observers[event]);\n      cloned.forEach(observer => {\n        observer(...args);\n      });\n    }\n    if (this.observers['*']) {\n      const cloned = [].concat(this.observers['*']);\n      cloned.forEach(observer => {\n        observer.apply(observer, [event, ...args]);\n      });\n    }\n  }\n}\n\nfunction defer() {\n  let res;\n  let rej;\n  const promise = new Promise((resolve, reject) => {\n    res = resolve;\n    rej = reject;\n  });\n  promise.resolve = res;\n  promise.reject = rej;\n  return promise;\n}\nfunction makeString(object) {\n  if (object == null) return '';\n  return '' + object;\n}\nfunction copy(a, s, t) {\n  a.forEach(m => {\n    if (s[m]) t[m] = s[m];\n  });\n}\nfunction getLastOfPath(object, path, Empty) {\n  function cleanKey(key) {\n    return key && key.indexOf('###') > -1 ? key.replace(/###/g, '.') : key;\n  }\n  function canNotTraverseDeeper() {\n    return !object || typeof object === 'string';\n  }\n  const stack = typeof path !== 'string' ? [].concat(path) : path.split('.');\n  while (stack.length > 1) {\n    if (canNotTraverseDeeper()) return {};\n    const key = cleanKey(stack.shift());\n    if (!object[key] && Empty) object[key] = new Empty();\n    if (Object.prototype.hasOwnProperty.call(object, key)) {\n      object = object[key];\n    } else {\n      object = {};\n    }\n  }\n  if (canNotTraverseDeeper()) return {};\n  return {\n    obj: object,\n    k: cleanKey(stack.shift())\n  };\n}\nfunction setPath(object, path, newValue) {\n  const {\n    obj,\n    k\n  } = getLastOfPath(object, path, Object);\n  obj[k] = newValue;\n}\nfunction pushPath(object, path, newValue, concat) {\n  const {\n    obj,\n    k\n  } = getLastOfPath(object, path, Object);\n  obj[k] = obj[k] || [];\n  if (concat) obj[k] = obj[k].concat(newValue);\n  if (!concat) obj[k].push(newValue);\n}\nfunction getPath(object, path) {\n  const {\n    obj,\n    k\n  } = getLastOfPath(object, path);\n  if (!obj) return undefined;\n  return obj[k];\n}\nfunction getPathWithDefaults(data, defaultData, key) {\n  const value = getPath(data, key);\n  if (value !== undefined) {\n    return value;\n  }\n  return getPath(defaultData, key);\n}\nfunction deepExtend(target, source, overwrite) {\n  for (const prop in source) {\n    if (prop !== '__proto__' && prop !== 'constructor') {\n      if (prop in target) {\n        if (typeof target[prop] === 'string' || target[prop] instanceof String || typeof source[prop] === 'string' || source[prop] instanceof String) {\n          if (overwrite) target[prop] = source[prop];\n        } else {\n          deepExtend(target[prop], source[prop], overwrite);\n        }\n      } else {\n        target[prop] = source[prop];\n      }\n    }\n  }\n  return target;\n}\nfunction regexEscape(str) {\n  return str.replace(/[\\-\\[\\]\\/\\{\\}\\(\\)\\*\\+\\?\\.\\\\\\^\\$\\|]/g, '\\\\$&');\n}\nvar _entityMap = {\n  '&': '&amp;',\n  '<': '&lt;',\n  '>': '&gt;',\n  '\"': '&quot;',\n  \"'\": '&#39;',\n  '/': '&#x2F;'\n};\nfunction escape(data) {\n  if (typeof data === 'string') {\n    return data.replace(/[&<>\"'\\/]/g, s => _entityMap[s]);\n  }\n  return data;\n}\nconst chars = [' ', ',', '?', '!', ';'];\nfunction looksLikeObjectPath(key, nsSeparator, keySeparator) {\n  nsSeparator = nsSeparator || '';\n  keySeparator = keySeparator || '';\n  const possibleChars = chars.filter(c => nsSeparator.indexOf(c) < 0 && keySeparator.indexOf(c) < 0);\n  if (possibleChars.length === 0) return true;\n  const r = new RegExp(`(${possibleChars.map(c => c === '?' ? '\\\\?' : c).join('|')})`);\n  let matched = !r.test(key);\n  if (!matched) {\n    const ki = key.indexOf(keySeparator);\n    if (ki > 0 && !r.test(key.substring(0, ki))) {\n      matched = true;\n    }\n  }\n  return matched;\n}\nfunction deepFind(obj, path) {\n  let keySeparator = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : '.';\n  if (!obj) return undefined;\n  if (obj[path]) return obj[path];\n  const paths = path.split(keySeparator);\n  let current = obj;\n  for (let i = 0; i < paths.length; ++i) {\n    if (!current) return undefined;\n    if (typeof current[paths[i]] === 'string' && i + 1 < paths.length) {\n      return undefined;\n    }\n    if (current[paths[i]] === undefined) {\n      let j = 2;\n      let p = paths.slice(i, i + j).join(keySeparator);\n      let mix = current[p];\n      while (mix === undefined && paths.length > i + j) {\n        j++;\n        p = paths.slice(i, i + j).join(keySeparator);\n        mix = current[p];\n      }\n      if (mix === undefined) return undefined;\n      if (mix === null) return null;\n      if (path.endsWith(p)) {\n        if (typeof mix === 'string') return mix;\n        if (p && typeof mix[p] === 'string') return mix[p];\n      }\n      const joinedPath = paths.slice(i + j).join(keySeparator);\n      if (joinedPath) return deepFind(mix, joinedPath, keySeparator);\n      return undefined;\n    }\n    current = current[paths[i]];\n  }\n  return current;\n}\nfunction getCleanedCode(code) {\n  if (code && code.indexOf('_') > 0) return code.replace('_', '-');\n  return code;\n}\n\nclass ResourceStore extends EventEmitter {\n  constructor(data) {\n    let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {\n      ns: ['translation'],\n      defaultNS: 'translation'\n    };\n    super();\n    this.data = data || {};\n    this.options = options;\n    if (this.options.keySeparator === undefined) {\n      this.options.keySeparator = '.';\n    }\n    if (this.options.ignoreJSONStructure === undefined) {\n      this.options.ignoreJSONStructure = true;\n    }\n  }\n  addNamespaces(ns) {\n    if (this.options.ns.indexOf(ns) < 0) {\n      this.options.ns.push(ns);\n    }\n  }\n  removeNamespaces(ns) {\n    const index = this.options.ns.indexOf(ns);\n    if (index > -1) {\n      this.options.ns.splice(index, 1);\n    }\n  }\n  getResource(lng, ns, key) {\n    let options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n    const keySeparator = options.keySeparator !== undefined ? options.keySeparator : this.options.keySeparator;\n    const ignoreJSONStructure = options.ignoreJSONStructure !== undefined ? options.ignoreJSONStructure : this.options.ignoreJSONStructure;\n    let path = [lng, ns];\n    if (key && typeof key !== 'string') path = path.concat(key);\n    if (key && typeof key === 'string') path = path.concat(keySeparator ? key.split(keySeparator) : key);\n    if (lng.indexOf('.') > -1) {\n      path = lng.split('.');\n    }\n    const result = getPath(this.data, path);\n    if (result || !ignoreJSONStructure || typeof key !== 'string') return result;\n    return deepFind(this.data && this.data[lng] && this.data[lng][ns], key, keySeparator);\n  }\n  addResource(lng, ns, key, value) {\n    let options = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : {\n      silent: false\n    };\n    const keySeparator = options.keySeparator !== undefined ? options.keySeparator : this.options.keySeparator;\n    let path = [lng, ns];\n    if (key) path = path.concat(keySeparator ? key.split(keySeparator) : key);\n    if (lng.indexOf('.') > -1) {\n      path = lng.split('.');\n      value = ns;\n      ns = path[1];\n    }\n    this.addNamespaces(ns);\n    setPath(this.data, path, value);\n    if (!options.silent) this.emit('added', lng, ns, key, value);\n  }\n  addResources(lng, ns, resources) {\n    let options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {\n      silent: false\n    };\n    for (const m in resources) {\n      if (typeof resources[m] === 'string' || Object.prototype.toString.apply(resources[m]) === '[object Array]') this.addResource(lng, ns, m, resources[m], {\n        silent: true\n      });\n    }\n    if (!options.silent) this.emit('added', lng, ns, resources);\n  }\n  addResourceBundle(lng, ns, resources, deep, overwrite) {\n    let options = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : {\n      silent: false\n    };\n    let path = [lng, ns];\n    if (lng.indexOf('.') > -1) {\n      path = lng.split('.');\n      deep = resources;\n      resources = ns;\n      ns = path[1];\n    }\n    this.addNamespaces(ns);\n    let pack = getPath(this.data, path) || {};\n    if (deep) {\n      deepExtend(pack, resources, overwrite);\n    } else {\n      pack = {\n        ...pack,\n        ...resources\n      };\n    }\n    setPath(this.data, path, pack);\n    if (!options.silent) this.emit('added', lng, ns, resources);\n  }\n  removeResourceBundle(lng, ns) {\n    if (this.hasResourceBundle(lng, ns)) {\n      delete this.data[lng][ns];\n    }\n    this.removeNamespaces(ns);\n    this.emit('removed', lng, ns);\n  }\n  hasResourceBundle(lng, ns) {\n    return this.getResource(lng, ns) !== undefined;\n  }\n  getResourceBundle(lng, ns) {\n    if (!ns) ns = this.options.defaultNS;\n    if (this.options.compatibilityAPI === 'v1') return {\n      ...{},\n      ...this.getResource(lng, ns)\n    };\n    return this.getResource(lng, ns);\n  }\n  getDataByLanguage(lng) {\n    return this.data[lng];\n  }\n  hasLanguageSomeTranslations(lng) {\n    const data = this.getDataByLanguage(lng);\n    const n = data && Object.keys(data) || [];\n    return !!n.find(v => data[v] && Object.keys(data[v]).length > 0);\n  }\n  toJSON() {\n    return this.data;\n  }\n}\n\nvar postProcessor = {\n  processors: {},\n  addPostProcessor(module) {\n    this.processors[module.name] = module;\n  },\n  handle(processors, value, key, options, translator) {\n    processors.forEach(processor => {\n      if (this.processors[processor]) value = this.processors[processor].process(value, key, options, translator);\n    });\n    return value;\n  }\n};\n\nconst checkedLoadedFor = {};\nclass Translator extends EventEmitter {\n  constructor(services) {\n    let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n    super();\n    copy(['resourceStore', 'languageUtils', 'pluralResolver', 'interpolator', 'backendConnector', 'i18nFormat', 'utils'], services, this);\n    this.options = options;\n    if (this.options.keySeparator === undefined) {\n      this.options.keySeparator = '.';\n    }\n    this.logger = baseLogger.create('translator');\n  }\n  changeLanguage(lng) {\n    if (lng) this.language = lng;\n  }\n  exists(key) {\n    let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {\n      interpolation: {}\n    };\n    if (key === undefined || key === null) {\n      return false;\n    }\n    const resolved = this.resolve(key, options);\n    return resolved && resolved.res !== undefined;\n  }\n  extractFromKey(key, options) {\n    let nsSeparator = options.nsSeparator !== undefined ? options.nsSeparator : this.options.nsSeparator;\n    if (nsSeparator === undefined) nsSeparator = ':';\n    const keySeparator = options.keySeparator !== undefined ? options.keySeparator : this.options.keySeparator;\n    let namespaces = options.ns || this.options.defaultNS || [];\n    const wouldCheckForNsInKey = nsSeparator && key.indexOf(nsSeparator) > -1;\n    const seemsNaturalLanguage = !this.options.userDefinedKeySeparator && !options.keySeparator && !this.options.userDefinedNsSeparator && !options.nsSeparator && !looksLikeObjectPath(key, nsSeparator, keySeparator);\n    if (wouldCheckForNsInKey && !seemsNaturalLanguage) {\n      const m = key.match(this.interpolator.nestingRegexp);\n      if (m && m.length > 0) {\n        return {\n          key,\n          namespaces\n        };\n      }\n      const parts = key.split(nsSeparator);\n      if (nsSeparator !== keySeparator || nsSeparator === keySeparator && this.options.ns.indexOf(parts[0]) > -1) namespaces = parts.shift();\n      key = parts.join(keySeparator);\n    }\n    if (typeof namespaces === 'string') namespaces = [namespaces];\n    return {\n      key,\n      namespaces\n    };\n  }\n  translate(keys, options, lastKey) {\n    if (typeof options !== 'object' && this.options.overloadTranslationOptionHandler) {\n      options = this.options.overloadTranslationOptionHandler(arguments);\n    }\n    if (typeof options === 'object') options = {\n      ...options\n    };\n    if (!options) options = {};\n    if (keys === undefined || keys === null) return '';\n    if (!Array.isArray(keys)) keys = [String(keys)];\n    const returnDetails = options.returnDetails !== undefined ? options.returnDetails : this.options.returnDetails;\n    const keySeparator = options.keySeparator !== undefined ? options.keySeparator : this.options.keySeparator;\n    const {\n      key,\n      namespaces\n    } = this.extractFromKey(keys[keys.length - 1], options);\n    const namespace = namespaces[namespaces.length - 1];\n    const lng = options.lng || this.language;\n    const appendNamespaceToCIMode = options.appendNamespaceToCIMode || this.options.appendNamespaceToCIMode;\n    if (lng && lng.toLowerCase() === 'cimode') {\n      if (appendNamespaceToCIMode) {\n        const nsSeparator = options.nsSeparator || this.options.nsSeparator;\n        if (returnDetails) {\n          return {\n            res: `${namespace}${nsSeparator}${key}`,\n            usedKey: key,\n            exactUsedKey: key,\n            usedLng: lng,\n            usedNS: namespace,\n            usedParams: this.getUsedParamsDetails(options)\n          };\n        }\n        return `${namespace}${nsSeparator}${key}`;\n      }\n      if (returnDetails) {\n        return {\n          res: key,\n          usedKey: key,\n          exactUsedKey: key,\n          usedLng: lng,\n          usedNS: namespace,\n          usedParams: this.getUsedParamsDetails(options)\n        };\n      }\n      return key;\n    }\n    const resolved = this.resolve(keys, options);\n    let res = resolved && resolved.res;\n    const resUsedKey = resolved && resolved.usedKey || key;\n    const resExactUsedKey = resolved && resolved.exactUsedKey || key;\n    const resType = Object.prototype.toString.apply(res);\n    const noObject = ['[object Number]', '[object Function]', '[object RegExp]'];\n    const joinArrays = options.joinArrays !== undefined ? options.joinArrays : this.options.joinArrays;\n    const handleAsObjectInI18nFormat = !this.i18nFormat || this.i18nFormat.handleAsObject;\n    const handleAsObject = typeof res !== 'string' && typeof res !== 'boolean' && typeof res !== 'number';\n    if (handleAsObjectInI18nFormat && res && handleAsObject && noObject.indexOf(resType) < 0 && !(typeof joinArrays === 'string' && resType === '[object Array]')) {\n      if (!options.returnObjects && !this.options.returnObjects) {\n        if (!this.options.returnedObjectHandler) {\n          this.logger.warn('accessing an object - but returnObjects options is not enabled!');\n        }\n        const r = this.options.returnedObjectHandler ? this.options.returnedObjectHandler(resUsedKey, res, {\n          ...options,\n          ns: namespaces\n        }) : `key '${key} (${this.language})' returned an object instead of string.`;\n        if (returnDetails) {\n          resolved.res = r;\n          resolved.usedParams = this.getUsedParamsDetails(options);\n          return resolved;\n        }\n        return r;\n      }\n      if (keySeparator) {\n        const resTypeIsArray = resType === '[object Array]';\n        const copy = resTypeIsArray ? [] : {};\n        const newKeyToUse = resTypeIsArray ? resExactUsedKey : resUsedKey;\n        for (const m in res) {\n          if (Object.prototype.hasOwnProperty.call(res, m)) {\n            const deepKey = `${newKeyToUse}${keySeparator}${m}`;\n            copy[m] = this.translate(deepKey, {\n              ...options,\n              ...{\n                joinArrays: false,\n                ns: namespaces\n              }\n            });\n            if (copy[m] === deepKey) copy[m] = res[m];\n          }\n        }\n        res = copy;\n      }\n    } else if (handleAsObjectInI18nFormat && typeof joinArrays === 'string' && resType === '[object Array]') {\n      res = res.join(joinArrays);\n      if (res) res = this.extendTranslation(res, keys, options, lastKey);\n    } else {\n      let usedDefault = false;\n      let usedKey = false;\n      const needsPluralHandling = options.count !== undefined && typeof options.count !== 'string';\n      const hasDefaultValue = Translator.hasDefaultValue(options);\n      const defaultValueSuffix = needsPluralHandling ? this.pluralResolver.getSuffix(lng, options.count, options) : '';\n      const defaultValueSuffixOrdinalFallback = options.ordinal && needsPluralHandling ? this.pluralResolver.getSuffix(lng, options.count, {\n        ordinal: false\n      }) : '';\n      const defaultValue = options[`defaultValue${defaultValueSuffix}`] || options[`defaultValue${defaultValueSuffixOrdinalFallback}`] || options.defaultValue;\n      if (!this.isValidLookup(res) && hasDefaultValue) {\n        usedDefault = true;\n        res = defaultValue;\n      }\n      if (!this.isValidLookup(res)) {\n        usedKey = true;\n        res = key;\n      }\n      const missingKeyNoValueFallbackToKey = options.missingKeyNoValueFallbackToKey || this.options.missingKeyNoValueFallbackToKey;\n      const resForMissing = missingKeyNoValueFallbackToKey && usedKey ? undefined : res;\n      const updateMissing = hasDefaultValue && defaultValue !== res && this.options.updateMissing;\n      if (usedKey || usedDefault || updateMissing) {\n        this.logger.log(updateMissing ? 'updateKey' : 'missingKey', lng, namespace, key, updateMissing ? defaultValue : res);\n        if (keySeparator) {\n          const fk = this.resolve(key, {\n            ...options,\n            keySeparator: false\n          });\n          if (fk && fk.res) this.logger.warn('Seems the loaded translations were in flat JSON format instead of nested. Either set keySeparator: false on init or make sure your translations are published in nested format.');\n        }\n        let lngs = [];\n        const fallbackLngs = this.languageUtils.getFallbackCodes(this.options.fallbackLng, options.lng || this.language);\n        if (this.options.saveMissingTo === 'fallback' && fallbackLngs && fallbackLngs[0]) {\n          for (let i = 0; i < fallbackLngs.length; i++) {\n            lngs.push(fallbackLngs[i]);\n          }\n        } else if (this.options.saveMissingTo === 'all') {\n          lngs = this.languageUtils.toResolveHierarchy(options.lng || this.language);\n        } else {\n          lngs.push(options.lng || this.language);\n        }\n        const send = (l, k, specificDefaultValue) => {\n          const defaultForMissing = hasDefaultValue && specificDefaultValue !== res ? specificDefaultValue : resForMissing;\n          if (this.options.missingKeyHandler) {\n            this.options.missingKeyHandler(l, namespace, k, defaultForMissing, updateMissing, options);\n          } else if (this.backendConnector && this.backendConnector.saveMissing) {\n            this.backendConnector.saveMissing(l, namespace, k, defaultForMissing, updateMissing, options);\n          }\n          this.emit('missingKey', l, namespace, k, res);\n        };\n        if (this.options.saveMissing) {\n          if (this.options.saveMissingPlurals && needsPluralHandling) {\n            lngs.forEach(language => {\n              this.pluralResolver.getSuffixes(language, options).forEach(suffix => {\n                send([language], key + suffix, options[`defaultValue${suffix}`] || defaultValue);\n              });\n            });\n          } else {\n            send(lngs, key, defaultValue);\n          }\n        }\n      }\n      res = this.extendTranslation(res, keys, options, resolved, lastKey);\n      if (usedKey && res === key && this.options.appendNamespaceToMissingKey) res = `${namespace}:${key}`;\n      if ((usedKey || usedDefault) && this.options.parseMissingKeyHandler) {\n        if (this.options.compatibilityAPI !== 'v1') {\n          res = this.options.parseMissingKeyHandler(this.options.appendNamespaceToMissingKey ? `${namespace}:${key}` : key, usedDefault ? res : undefined);\n        } else {\n          res = this.options.parseMissingKeyHandler(res);\n        }\n      }\n    }\n    if (returnDetails) {\n      resolved.res = res;\n      resolved.usedParams = this.getUsedParamsDetails(options);\n      return resolved;\n    }\n    return res;\n  }\n  extendTranslation(res, key, options, resolved, lastKey) {\n    var _this = this;\n    if (this.i18nFormat && this.i18nFormat.parse) {\n      res = this.i18nFormat.parse(res, {\n        ...this.options.interpolation.defaultVariables,\n        ...options\n      }, options.lng || this.language || resolved.usedLng, resolved.usedNS, resolved.usedKey, {\n        resolved\n      });\n    } else if (!options.skipInterpolation) {\n      if (options.interpolation) this.interpolator.init({\n        ...options,\n        ...{\n          interpolation: {\n            ...this.options.interpolation,\n            ...options.interpolation\n          }\n        }\n      });\n      const skipOnVariables = typeof res === 'string' && (options && options.interpolation && options.interpolation.skipOnVariables !== undefined ? options.interpolation.skipOnVariables : this.options.interpolation.skipOnVariables);\n      let nestBef;\n      if (skipOnVariables) {\n        const nb = res.match(this.interpolator.nestingRegexp);\n        nestBef = nb && nb.length;\n      }\n      let data = options.replace && typeof options.replace !== 'string' ? options.replace : options;\n      if (this.options.interpolation.defaultVariables) data = {\n        ...this.options.interpolation.defaultVariables,\n        ...data\n      };\n      res = this.interpolator.interpolate(res, data, options.lng || this.language, options);\n      if (skipOnVariables) {\n        const na = res.match(this.interpolator.nestingRegexp);\n        const nestAft = na && na.length;\n        if (nestBef < nestAft) options.nest = false;\n      }\n      if (!options.lng && this.options.compatibilityAPI !== 'v1' && resolved && resolved.res) options.lng = resolved.usedLng;\n      if (options.nest !== false) res = this.interpolator.nest(res, function () {\n        for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n          args[_key] = arguments[_key];\n        }\n        if (lastKey && lastKey[0] === args[0] && !options.context) {\n          _this.logger.warn(`It seems you are nesting recursively key: ${args[0]} in key: ${key[0]}`);\n          return null;\n        }\n        return _this.translate(...args, key);\n      }, options);\n      if (options.interpolation) this.interpolator.reset();\n    }\n    const postProcess = options.postProcess || this.options.postProcess;\n    const postProcessorNames = typeof postProcess === 'string' ? [postProcess] : postProcess;\n    if (res !== undefined && res !== null && postProcessorNames && postProcessorNames.length && options.applyPostProcessor !== false) {\n      res = postProcessor.handle(postProcessorNames, res, key, this.options && this.options.postProcessPassResolved ? {\n        i18nResolved: {\n          ...resolved,\n          usedParams: this.getUsedParamsDetails(options)\n        },\n        ...options\n      } : options, this);\n    }\n    return res;\n  }\n  resolve(keys) {\n    let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n    let found;\n    let usedKey;\n    let exactUsedKey;\n    let usedLng;\n    let usedNS;\n    if (typeof keys === 'string') keys = [keys];\n    keys.forEach(k => {\n      if (this.isValidLookup(found)) return;\n      const extracted = this.extractFromKey(k, options);\n      const key = extracted.key;\n      usedKey = key;\n      let namespaces = extracted.namespaces;\n      if (this.options.fallbackNS) namespaces = namespaces.concat(this.options.fallbackNS);\n      const needsPluralHandling = options.count !== undefined && typeof options.count !== 'string';\n      const needsZeroSuffixLookup = needsPluralHandling && !options.ordinal && options.count === 0 && this.pluralResolver.shouldUseIntlApi();\n      const needsContextHandling = options.context !== undefined && (typeof options.context === 'string' || typeof options.context === 'number') && options.context !== '';\n      const codes = options.lngs ? options.lngs : this.languageUtils.toResolveHierarchy(options.lng || this.language, options.fallbackLng);\n      namespaces.forEach(ns => {\n        if (this.isValidLookup(found)) return;\n        usedNS = ns;\n        if (!checkedLoadedFor[`${codes[0]}-${ns}`] && this.utils && this.utils.hasLoadedNamespace && !this.utils.hasLoadedNamespace(usedNS)) {\n          checkedLoadedFor[`${codes[0]}-${ns}`] = true;\n          this.logger.warn(`key \"${usedKey}\" for languages \"${codes.join(', ')}\" won't get resolved as namespace \"${usedNS}\" was not yet loaded`, 'This means something IS WRONG in your setup. You access the t function before i18next.init / i18next.loadNamespace / i18next.changeLanguage was done. Wait for the callback or Promise to resolve before accessing it!!!');\n        }\n        codes.forEach(code => {\n          if (this.isValidLookup(found)) return;\n          usedLng = code;\n          const finalKeys = [key];\n          if (this.i18nFormat && this.i18nFormat.addLookupKeys) {\n            this.i18nFormat.addLookupKeys(finalKeys, key, code, ns, options);\n          } else {\n            let pluralSuffix;\n            if (needsPluralHandling) pluralSuffix = this.pluralResolver.getSuffix(code, options.count, options);\n            const zeroSuffix = `${this.options.pluralSeparator}zero`;\n            const ordinalPrefix = `${this.options.pluralSeparator}ordinal${this.options.pluralSeparator}`;\n            if (needsPluralHandling) {\n              finalKeys.push(key + pluralSuffix);\n              if (options.ordinal && pluralSuffix.indexOf(ordinalPrefix) === 0) {\n                finalKeys.push(key + pluralSuffix.replace(ordinalPrefix, this.options.pluralSeparator));\n              }\n              if (needsZeroSuffixLookup) {\n                finalKeys.push(key + zeroSuffix);\n              }\n            }\n            if (needsContextHandling) {\n              const contextKey = `${key}${this.options.contextSeparator}${options.context}`;\n              finalKeys.push(contextKey);\n              if (needsPluralHandling) {\n                finalKeys.push(contextKey + pluralSuffix);\n                if (options.ordinal && pluralSuffix.indexOf(ordinalPrefix) === 0) {\n                  finalKeys.push(contextKey + pluralSuffix.replace(ordinalPrefix, this.options.pluralSeparator));\n                }\n                if (needsZeroSuffixLookup) {\n                  finalKeys.push(contextKey + zeroSuffix);\n                }\n              }\n            }\n          }\n          let possibleKey;\n          while (possibleKey = finalKeys.pop()) {\n            if (!this.isValidLookup(found)) {\n              exactUsedKey = possibleKey;\n              found = this.getResource(code, ns, possibleKey, options);\n            }\n          }\n        });\n      });\n    });\n    return {\n      res: found,\n      usedKey,\n      exactUsedKey,\n      usedLng,\n      usedNS\n    };\n  }\n  isValidLookup(res) {\n    return res !== undefined && !(!this.options.returnNull && res === null) && !(!this.options.returnEmptyString && res === '');\n  }\n  getResource(code, ns, key) {\n    let options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n    if (this.i18nFormat && this.i18nFormat.getResource) return this.i18nFormat.getResource(code, ns, key, options);\n    return this.resourceStore.getResource(code, ns, key, options);\n  }\n  getUsedParamsDetails() {\n    let options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n    const optionsKeys = ['defaultValue', 'ordinal', 'context', 'replace', 'lng', 'lngs', 'fallbackLng', 'ns', 'keySeparator', 'nsSeparator', 'returnObjects', 'returnDetails', 'joinArrays', 'postProcess', 'interpolation'];\n    const useOptionsReplaceForData = options.replace && typeof options.replace !== 'string';\n    let data = useOptionsReplaceForData ? options.replace : options;\n    if (useOptionsReplaceForData && typeof options.count !== 'undefined') {\n      data.count = options.count;\n    }\n    if (this.options.interpolation.defaultVariables) {\n      data = {\n        ...this.options.interpolation.defaultVariables,\n        ...data\n      };\n    }\n    if (!useOptionsReplaceForData) {\n      data = {\n        ...data\n      };\n      for (const key of optionsKeys) {\n        delete data[key];\n      }\n    }\n    return data;\n  }\n  static hasDefaultValue(options) {\n    const prefix = 'defaultValue';\n    for (const option in options) {\n      if (Object.prototype.hasOwnProperty.call(options, option) && prefix === option.substring(0, prefix.length) && undefined !== options[option]) {\n        return true;\n      }\n    }\n    return false;\n  }\n}\n\nfunction capitalize(string) {\n  return string.charAt(0).toUpperCase() + string.slice(1);\n}\nclass LanguageUtil {\n  constructor(options) {\n    this.options = options;\n    this.supportedLngs = this.options.supportedLngs || false;\n    this.logger = baseLogger.create('languageUtils');\n  }\n  getScriptPartFromCode(code) {\n    code = getCleanedCode(code);\n    if (!code || code.indexOf('-') < 0) return null;\n    const p = code.split('-');\n    if (p.length === 2) return null;\n    p.pop();\n    if (p[p.length - 1].toLowerCase() === 'x') return null;\n    return this.formatLanguageCode(p.join('-'));\n  }\n  getLanguagePartFromCode(code) {\n    code = getCleanedCode(code);\n    if (!code || code.indexOf('-') < 0) return code;\n    const p = code.split('-');\n    return this.formatLanguageCode(p[0]);\n  }\n  formatLanguageCode(code) {\n    if (typeof code === 'string' && code.indexOf('-') > -1) {\n      const specialCases = ['hans', 'hant', 'latn', 'cyrl', 'cans', 'mong', 'arab'];\n      let p = code.split('-');\n      if (this.options.lowerCaseLng) {\n        p = p.map(part => part.toLowerCase());\n      } else if (p.length === 2) {\n        p[0] = p[0].toLowerCase();\n        p[1] = p[1].toUpperCase();\n        if (specialCases.indexOf(p[1].toLowerCase()) > -1) p[1] = capitalize(p[1].toLowerCase());\n      } else if (p.length === 3) {\n        p[0] = p[0].toLowerCase();\n        if (p[1].length === 2) p[1] = p[1].toUpperCase();\n        if (p[0] !== 'sgn' && p[2].length === 2) p[2] = p[2].toUpperCase();\n        if (specialCases.indexOf(p[1].toLowerCase()) > -1) p[1] = capitalize(p[1].toLowerCase());\n        if (specialCases.indexOf(p[2].toLowerCase()) > -1) p[2] = capitalize(p[2].toLowerCase());\n      }\n      return p.join('-');\n    }\n    return this.options.cleanCode || this.options.lowerCaseLng ? code.toLowerCase() : code;\n  }\n  isSupportedCode(code) {\n    if (this.options.load === 'languageOnly' || this.options.nonExplicitSupportedLngs) {\n      code = this.getLanguagePartFromCode(code);\n    }\n    return !this.supportedLngs || !this.supportedLngs.length || this.supportedLngs.indexOf(code) > -1;\n  }\n  getBestMatchFromCodes(codes) {\n    if (!codes) return null;\n    let found;\n    codes.forEach(code => {\n      if (found) return;\n      const cleanedLng = this.formatLanguageCode(code);\n      if (!this.options.supportedLngs || this.isSupportedCode(cleanedLng)) found = cleanedLng;\n    });\n    if (!found && this.options.supportedLngs) {\n      codes.forEach(code => {\n        if (found) return;\n        const lngOnly = this.getLanguagePartFromCode(code);\n        if (this.isSupportedCode(lngOnly)) return found = lngOnly;\n        found = this.options.supportedLngs.find(supportedLng => {\n          if (supportedLng === lngOnly) return supportedLng;\n          if (supportedLng.indexOf('-') < 0 && lngOnly.indexOf('-') < 0) return;\n          if (supportedLng.indexOf(lngOnly) === 0) return supportedLng;\n        });\n      });\n    }\n    if (!found) found = this.getFallbackCodes(this.options.fallbackLng)[0];\n    return found;\n  }\n  getFallbackCodes(fallbacks, code) {\n    if (!fallbacks) return [];\n    if (typeof fallbacks === 'function') fallbacks = fallbacks(code);\n    if (typeof fallbacks === 'string') fallbacks = [fallbacks];\n    if (Object.prototype.toString.apply(fallbacks) === '[object Array]') return fallbacks;\n    if (!code) return fallbacks.default || [];\n    let found = fallbacks[code];\n    if (!found) found = fallbacks[this.getScriptPartFromCode(code)];\n    if (!found) found = fallbacks[this.formatLanguageCode(code)];\n    if (!found) found = fallbacks[this.getLanguagePartFromCode(code)];\n    if (!found) found = fallbacks.default;\n    return found || [];\n  }\n  toResolveHierarchy(code, fallbackCode) {\n    const fallbackCodes = this.getFallbackCodes(fallbackCode || this.options.fallbackLng || [], code);\n    const codes = [];\n    const addCode = c => {\n      if (!c) return;\n      if (this.isSupportedCode(c)) {\n        codes.push(c);\n      } else {\n        this.logger.warn(`rejecting language code not found in supportedLngs: ${c}`);\n      }\n    };\n    if (typeof code === 'string' && (code.indexOf('-') > -1 || code.indexOf('_') > -1)) {\n      if (this.options.load !== 'languageOnly') addCode(this.formatLanguageCode(code));\n      if (this.options.load !== 'languageOnly' && this.options.load !== 'currentOnly') addCode(this.getScriptPartFromCode(code));\n      if (this.options.load !== 'currentOnly') addCode(this.getLanguagePartFromCode(code));\n    } else if (typeof code === 'string') {\n      addCode(this.formatLanguageCode(code));\n    }\n    fallbackCodes.forEach(fc => {\n      if (codes.indexOf(fc) < 0) addCode(this.formatLanguageCode(fc));\n    });\n    return codes;\n  }\n}\n\nlet sets = [{\n  lngs: ['ach', 'ak', 'am', 'arn', 'br', 'fil', 'gun', 'ln', 'mfe', 'mg', 'mi', 'oc', 'pt', 'pt-BR', 'tg', 'tl', 'ti', 'tr', 'uz', 'wa'],\n  nr: [1, 2],\n  fc: 1\n}, {\n  lngs: ['af', 'an', 'ast', 'az', 'bg', 'bn', 'ca', 'da', 'de', 'dev', 'el', 'en', 'eo', 'es', 'et', 'eu', 'fi', 'fo', 'fur', 'fy', 'gl', 'gu', 'ha', 'hi', 'hu', 'hy', 'ia', 'it', 'kk', 'kn', 'ku', 'lb', 'mai', 'ml', 'mn', 'mr', 'nah', 'nap', 'nb', 'ne', 'nl', 'nn', 'no', 'nso', 'pa', 'pap', 'pms', 'ps', 'pt-PT', 'rm', 'sco', 'se', 'si', 'so', 'son', 'sq', 'sv', 'sw', 'ta', 'te', 'tk', 'ur', 'yo'],\n  nr: [1, 2],\n  fc: 2\n}, {\n  lngs: ['ay', 'bo', 'cgg', 'fa', 'ht', 'id', 'ja', 'jbo', 'ka', 'km', 'ko', 'ky', 'lo', 'ms', 'sah', 'su', 'th', 'tt', 'ug', 'vi', 'wo', 'zh'],\n  nr: [1],\n  fc: 3\n}, {\n  lngs: ['be', 'bs', 'cnr', 'dz', 'hr', 'ru', 'sr', 'uk'],\n  nr: [1, 2, 5],\n  fc: 4\n}, {\n  lngs: ['ar'],\n  nr: [0, 1, 2, 3, 11, 100],\n  fc: 5\n}, {\n  lngs: ['cs', 'sk'],\n  nr: [1, 2, 5],\n  fc: 6\n}, {\n  lngs: ['csb', 'pl'],\n  nr: [1, 2, 5],\n  fc: 7\n}, {\n  lngs: ['cy'],\n  nr: [1, 2, 3, 8],\n  fc: 8\n}, {\n  lngs: ['fr'],\n  nr: [1, 2],\n  fc: 9\n}, {\n  lngs: ['ga'],\n  nr: [1, 2, 3, 7, 11],\n  fc: 10\n}, {\n  lngs: ['gd'],\n  nr: [1, 2, 3, 20],\n  fc: 11\n}, {\n  lngs: ['is'],\n  nr: [1, 2],\n  fc: 12\n}, {\n  lngs: ['jv'],\n  nr: [0, 1],\n  fc: 13\n}, {\n  lngs: ['kw'],\n  nr: [1, 2, 3, 4],\n  fc: 14\n}, {\n  lngs: ['lt'],\n  nr: [1, 2, 10],\n  fc: 15\n}, {\n  lngs: ['lv'],\n  nr: [1, 2, 0],\n  fc: 16\n}, {\n  lngs: ['mk'],\n  nr: [1, 2],\n  fc: 17\n}, {\n  lngs: ['mnk'],\n  nr: [0, 1, 2],\n  fc: 18\n}, {\n  lngs: ['mt'],\n  nr: [1, 2, 11, 20],\n  fc: 19\n}, {\n  lngs: ['or'],\n  nr: [2, 1],\n  fc: 2\n}, {\n  lngs: ['ro'],\n  nr: [1, 2, 20],\n  fc: 20\n}, {\n  lngs: ['sl'],\n  nr: [5, 1, 2, 3],\n  fc: 21\n}, {\n  lngs: ['he', 'iw'],\n  nr: [1, 2, 20, 21],\n  fc: 22\n}];\nlet _rulesPluralsTypes = {\n  1: function (n) {\n    return Number(n > 1);\n  },\n  2: function (n) {\n    return Number(n != 1);\n  },\n  3: function (n) {\n    return 0;\n  },\n  4: function (n) {\n    return Number(n % 10 == 1 && n % 100 != 11 ? 0 : n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 10 || n % 100 >= 20) ? 1 : 2);\n  },\n  5: function (n) {\n    return Number(n == 0 ? 0 : n == 1 ? 1 : n == 2 ? 2 : n % 100 >= 3 && n % 100 <= 10 ? 3 : n % 100 >= 11 ? 4 : 5);\n  },\n  6: function (n) {\n    return Number(n == 1 ? 0 : n >= 2 && n <= 4 ? 1 : 2);\n  },\n  7: function (n) {\n    return Number(n == 1 ? 0 : n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 10 || n % 100 >= 20) ? 1 : 2);\n  },\n  8: function (n) {\n    return Number(n == 1 ? 0 : n == 2 ? 1 : n != 8 && n != 11 ? 2 : 3);\n  },\n  9: function (n) {\n    return Number(n >= 2);\n  },\n  10: function (n) {\n    return Number(n == 1 ? 0 : n == 2 ? 1 : n < 7 ? 2 : n < 11 ? 3 : 4);\n  },\n  11: function (n) {\n    return Number(n == 1 || n == 11 ? 0 : n == 2 || n == 12 ? 1 : n > 2 && n < 20 ? 2 : 3);\n  },\n  12: function (n) {\n    return Number(n % 10 != 1 || n % 100 == 11);\n  },\n  13: function (n) {\n    return Number(n !== 0);\n  },\n  14: function (n) {\n    return Number(n == 1 ? 0 : n == 2 ? 1 : n == 3 ? 2 : 3);\n  },\n  15: function (n) {\n    return Number(n % 10 == 1 && n % 100 != 11 ? 0 : n % 10 >= 2 && (n % 100 < 10 || n % 100 >= 20) ? 1 : 2);\n  },\n  16: function (n) {\n    return Number(n % 10 == 1 && n % 100 != 11 ? 0 : n !== 0 ? 1 : 2);\n  },\n  17: function (n) {\n    return Number(n == 1 || n % 10 == 1 && n % 100 != 11 ? 0 : 1);\n  },\n  18: function (n) {\n    return Number(n == 0 ? 0 : n == 1 ? 1 : 2);\n  },\n  19: function (n) {\n    return Number(n == 1 ? 0 : n == 0 || n % 100 > 1 && n % 100 < 11 ? 1 : n % 100 > 10 && n % 100 < 20 ? 2 : 3);\n  },\n  20: function (n) {\n    return Number(n == 1 ? 0 : n == 0 || n % 100 > 0 && n % 100 < 20 ? 1 : 2);\n  },\n  21: function (n) {\n    return Number(n % 100 == 1 ? 1 : n % 100 == 2 ? 2 : n % 100 == 3 || n % 100 == 4 ? 3 : 0);\n  },\n  22: function (n) {\n    return Number(n == 1 ? 0 : n == 2 ? 1 : (n < 0 || n > 10) && n % 10 == 0 ? 2 : 3);\n  }\n};\nconst nonIntlVersions = ['v1', 'v2', 'v3'];\nconst intlVersions = ['v4'];\nconst suffixesOrder = {\n  zero: 0,\n  one: 1,\n  two: 2,\n  few: 3,\n  many: 4,\n  other: 5\n};\nfunction createRules() {\n  const rules = {};\n  sets.forEach(set => {\n    set.lngs.forEach(l => {\n      rules[l] = {\n        numbers: set.nr,\n        plurals: _rulesPluralsTypes[set.fc]\n      };\n    });\n  });\n  return rules;\n}\nclass PluralResolver {\n  constructor(languageUtils) {\n    let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n    this.languageUtils = languageUtils;\n    this.options = options;\n    this.logger = baseLogger.create('pluralResolver');\n    if ((!this.options.compatibilityJSON || intlVersions.includes(this.options.compatibilityJSON)) && (typeof Intl === 'undefined' || !Intl.PluralRules)) {\n      this.options.compatibilityJSON = 'v3';\n      this.logger.error('Your environment seems not to be Intl API compatible, use an Intl.PluralRules polyfill. Will fallback to the compatibilityJSON v3 format handling.');\n    }\n    this.rules = createRules();\n  }\n  addRule(lng, obj) {\n    this.rules[lng] = obj;\n  }\n  getRule(code) {\n    let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n    if (this.shouldUseIntlApi()) {\n      try {\n        return new Intl.PluralRules(getCleanedCode(code), {\n          type: options.ordinal ? 'ordinal' : 'cardinal'\n        });\n      } catch {\n        return;\n      }\n    }\n    return this.rules[code] || this.rules[this.languageUtils.getLanguagePartFromCode(code)];\n  }\n  needsPlural(code) {\n    let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n    const rule = this.getRule(code, options);\n    if (this.shouldUseIntlApi()) {\n      return rule && rule.resolvedOptions().pluralCategories.length > 1;\n    }\n    return rule && rule.numbers.length > 1;\n  }\n  getPluralFormsOfKey(code, key) {\n    let options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n    return this.getSuffixes(code, options).map(suffix => `${key}${suffix}`);\n  }\n  getSuffixes(code) {\n    let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n    const rule = this.getRule(code, options);\n    if (!rule) {\n      return [];\n    }\n    if (this.shouldUseIntlApi()) {\n      return rule.resolvedOptions().pluralCategories.sort((pluralCategory1, pluralCategory2) => suffixesOrder[pluralCategory1] - suffixesOrder[pluralCategory2]).map(pluralCategory => `${this.options.prepend}${options.ordinal ? `ordinal${this.options.prepend}` : ''}${pluralCategory}`);\n    }\n    return rule.numbers.map(number => this.getSuffix(code, number, options));\n  }\n  getSuffix(code, count) {\n    let options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n    const rule = this.getRule(code, options);\n    if (rule) {\n      if (this.shouldUseIntlApi()) {\n        return `${this.options.prepend}${options.ordinal ? `ordinal${this.options.prepend}` : ''}${rule.select(count)}`;\n      }\n      return this.getSuffixRetroCompatible(rule, count);\n    }\n    this.logger.warn(`no plural rule found for: ${code}`);\n    return '';\n  }\n  getSuffixRetroCompatible(rule, count) {\n    const idx = rule.noAbs ? rule.plurals(count) : rule.plurals(Math.abs(count));\n    let suffix = rule.numbers[idx];\n    if (this.options.simplifyPluralSuffix && rule.numbers.length === 2 && rule.numbers[0] === 1) {\n      if (suffix === 2) {\n        suffix = 'plural';\n      } else if (suffix === 1) {\n        suffix = '';\n      }\n    }\n    const returnSuffix = () => this.options.prepend && suffix.toString() ? this.options.prepend + suffix.toString() : suffix.toString();\n    if (this.options.compatibilityJSON === 'v1') {\n      if (suffix === 1) return '';\n      if (typeof suffix === 'number') return `_plural_${suffix.toString()}`;\n      return returnSuffix();\n    } else if (this.options.compatibilityJSON === 'v2') {\n      return returnSuffix();\n    } else if (this.options.simplifyPluralSuffix && rule.numbers.length === 2 && rule.numbers[0] === 1) {\n      return returnSuffix();\n    }\n    return this.options.prepend && idx.toString() ? this.options.prepend + idx.toString() : idx.toString();\n  }\n  shouldUseIntlApi() {\n    return !nonIntlVersions.includes(this.options.compatibilityJSON);\n  }\n}\n\nfunction deepFindWithDefaults(data, defaultData, key) {\n  let keySeparator = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : '.';\n  let ignoreJSONStructure = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : true;\n  let path = getPathWithDefaults(data, defaultData, key);\n  if (!path && ignoreJSONStructure && typeof key === 'string') {\n    path = deepFind(data, key, keySeparator);\n    if (path === undefined) path = deepFind(defaultData, key, keySeparator);\n  }\n  return path;\n}\nclass Interpolator {\n  constructor() {\n    let options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n    this.logger = baseLogger.create('interpolator');\n    this.options = options;\n    this.format = options.interpolation && options.interpolation.format || (value => value);\n    this.init(options);\n  }\n  init() {\n    let options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n    if (!options.interpolation) options.interpolation = {\n      escapeValue: true\n    };\n    const iOpts = options.interpolation;\n    this.escape = iOpts.escape !== undefined ? iOpts.escape : escape;\n    this.escapeValue = iOpts.escapeValue !== undefined ? iOpts.escapeValue : true;\n    this.useRawValueToEscape = iOpts.useRawValueToEscape !== undefined ? iOpts.useRawValueToEscape : false;\n    this.prefix = iOpts.prefix ? regexEscape(iOpts.prefix) : iOpts.prefixEscaped || '{{';\n    this.suffix = iOpts.suffix ? regexEscape(iOpts.suffix) : iOpts.suffixEscaped || '}}';\n    this.formatSeparator = iOpts.formatSeparator ? iOpts.formatSeparator : iOpts.formatSeparator || ',';\n    this.unescapePrefix = iOpts.unescapeSuffix ? '' : iOpts.unescapePrefix || '-';\n    this.unescapeSuffix = this.unescapePrefix ? '' : iOpts.unescapeSuffix || '';\n    this.nestingPrefix = iOpts.nestingPrefix ? regexEscape(iOpts.nestingPrefix) : iOpts.nestingPrefixEscaped || regexEscape('$t(');\n    this.nestingSuffix = iOpts.nestingSuffix ? regexEscape(iOpts.nestingSuffix) : iOpts.nestingSuffixEscaped || regexEscape(')');\n    this.nestingOptionsSeparator = iOpts.nestingOptionsSeparator ? iOpts.nestingOptionsSeparator : iOpts.nestingOptionsSeparator || ',';\n    this.maxReplaces = iOpts.maxReplaces ? iOpts.maxReplaces : 1000;\n    this.alwaysFormat = iOpts.alwaysFormat !== undefined ? iOpts.alwaysFormat : false;\n    this.resetRegExp();\n  }\n  reset() {\n    if (this.options) this.init(this.options);\n  }\n  resetRegExp() {\n    const regexpStr = `${this.prefix}(.+?)${this.suffix}`;\n    this.regexp = new RegExp(regexpStr, 'g');\n    const regexpUnescapeStr = `${this.prefix}${this.unescapePrefix}(.+?)${this.unescapeSuffix}${this.suffix}`;\n    this.regexpUnescape = new RegExp(regexpUnescapeStr, 'g');\n    const nestingRegexpStr = `${this.nestingPrefix}(.+?)${this.nestingSuffix}`;\n    this.nestingRegexp = new RegExp(nestingRegexpStr, 'g');\n  }\n  interpolate(str, data, lng, options) {\n    let match;\n    let value;\n    let replaces;\n    const defaultData = this.options && this.options.interpolation && this.options.interpolation.defaultVariables || {};\n    function regexSafe(val) {\n      return val.replace(/\\$/g, '$$$$');\n    }\n    const handleFormat = key => {\n      if (key.indexOf(this.formatSeparator) < 0) {\n        const path = deepFindWithDefaults(data, defaultData, key, this.options.keySeparator, this.options.ignoreJSONStructure);\n        return this.alwaysFormat ? this.format(path, undefined, lng, {\n          ...options,\n          ...data,\n          interpolationkey: key\n        }) : path;\n      }\n      const p = key.split(this.formatSeparator);\n      const k = p.shift().trim();\n      const f = p.join(this.formatSeparator).trim();\n      return this.format(deepFindWithDefaults(data, defaultData, k, this.options.keySeparator, this.options.ignoreJSONStructure), f, lng, {\n        ...options,\n        ...data,\n        interpolationkey: k\n      });\n    };\n    this.resetRegExp();\n    const missingInterpolationHandler = options && options.missingInterpolationHandler || this.options.missingInterpolationHandler;\n    const skipOnVariables = options && options.interpolation && options.interpolation.skipOnVariables !== undefined ? options.interpolation.skipOnVariables : this.options.interpolation.skipOnVariables;\n    const todos = [{\n      regex: this.regexpUnescape,\n      safeValue: val => regexSafe(val)\n    }, {\n      regex: this.regexp,\n      safeValue: val => this.escapeValue ? regexSafe(this.escape(val)) : regexSafe(val)\n    }];\n    todos.forEach(todo => {\n      replaces = 0;\n      while (match = todo.regex.exec(str)) {\n        const matchedVar = match[1].trim();\n        value = handleFormat(matchedVar);\n        if (value === undefined) {\n          if (typeof missingInterpolationHandler === 'function') {\n            const temp = missingInterpolationHandler(str, match, options);\n            value = typeof temp === 'string' ? temp : '';\n          } else if (options && Object.prototype.hasOwnProperty.call(options, matchedVar)) {\n            value = '';\n          } else if (skipOnVariables) {\n            value = match[0];\n            continue;\n          } else {\n            this.logger.warn(`missed to pass in variable ${matchedVar} for interpolating ${str}`);\n            value = '';\n          }\n        } else if (typeof value !== 'string' && !this.useRawValueToEscape) {\n          value = makeString(value);\n        }\n        const safeValue = todo.safeValue(value);\n        str = str.replace(match[0], safeValue);\n        if (skipOnVariables) {\n          todo.regex.lastIndex += value.length;\n          todo.regex.lastIndex -= match[0].length;\n        } else {\n          todo.regex.lastIndex = 0;\n        }\n        replaces++;\n        if (replaces >= this.maxReplaces) {\n          break;\n        }\n      }\n    });\n    return str;\n  }\n  nest(str, fc) {\n    let options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n    let match;\n    let value;\n    let clonedOptions;\n    function handleHasOptions(key, inheritedOptions) {\n      const sep = this.nestingOptionsSeparator;\n      if (key.indexOf(sep) < 0) return key;\n      const c = key.split(new RegExp(`${sep}[ ]*{`));\n      let optionsString = `{${c[1]}`;\n      key = c[0];\n      optionsString = this.interpolate(optionsString, clonedOptions);\n      const matchedSingleQuotes = optionsString.match(/'/g);\n      const matchedDoubleQuotes = optionsString.match(/\"/g);\n      if (matchedSingleQuotes && matchedSingleQuotes.length % 2 === 0 && !matchedDoubleQuotes || matchedDoubleQuotes.length % 2 !== 0) {\n        optionsString = optionsString.replace(/'/g, '\"');\n      }\n      try {\n        clonedOptions = JSON.parse(optionsString);\n        if (inheritedOptions) clonedOptions = {\n          ...inheritedOptions,\n          ...clonedOptions\n        };\n      } catch (e) {\n        this.logger.warn(`failed parsing options string in nesting for key ${key}`, e);\n        return `${key}${sep}${optionsString}`;\n      }\n      delete clonedOptions.defaultValue;\n      return key;\n    }\n    while (match = this.nestingRegexp.exec(str)) {\n      let formatters = [];\n      clonedOptions = {\n        ...options\n      };\n      clonedOptions = clonedOptions.replace && typeof clonedOptions.replace !== 'string' ? clonedOptions.replace : clonedOptions;\n      clonedOptions.applyPostProcessor = false;\n      delete clonedOptions.defaultValue;\n      let doReduce = false;\n      if (match[0].indexOf(this.formatSeparator) !== -1 && !/{.*}/.test(match[1])) {\n        const r = match[1].split(this.formatSeparator).map(elem => elem.trim());\n        match[1] = r.shift();\n        formatters = r;\n        doReduce = true;\n      }\n      value = fc(handleHasOptions.call(this, match[1].trim(), clonedOptions), clonedOptions);\n      if (value && match[0] === str && typeof value !== 'string') return value;\n      if (typeof value !== 'string') value = makeString(value);\n      if (!value) {\n        this.logger.warn(`missed to resolve ${match[1]} for nesting ${str}`);\n        value = '';\n      }\n      if (doReduce) {\n        value = formatters.reduce((v, f) => this.format(v, f, options.lng, {\n          ...options,\n          interpolationkey: match[1].trim()\n        }), value.trim());\n      }\n      str = str.replace(match[0], value);\n      this.regexp.lastIndex = 0;\n    }\n    return str;\n  }\n}\n\nfunction parseFormatStr(formatStr) {\n  let formatName = formatStr.toLowerCase().trim();\n  const formatOptions = {};\n  if (formatStr.indexOf('(') > -1) {\n    const p = formatStr.split('(');\n    formatName = p[0].toLowerCase().trim();\n    const optStr = p[1].substring(0, p[1].length - 1);\n    if (formatName === 'currency' && optStr.indexOf(':') < 0) {\n      if (!formatOptions.currency) formatOptions.currency = optStr.trim();\n    } else if (formatName === 'relativetime' && optStr.indexOf(':') < 0) {\n      if (!formatOptions.range) formatOptions.range = optStr.trim();\n    } else {\n      const opts = optStr.split(';');\n      opts.forEach(opt => {\n        if (!opt) return;\n        const [key, ...rest] = opt.split(':');\n        const val = rest.join(':').trim().replace(/^'+|'+$/g, '');\n        if (!formatOptions[key.trim()]) formatOptions[key.trim()] = val;\n        if (val === 'false') formatOptions[key.trim()] = false;\n        if (val === 'true') formatOptions[key.trim()] = true;\n        if (!isNaN(val)) formatOptions[key.trim()] = parseInt(val, 10);\n      });\n    }\n  }\n  return {\n    formatName,\n    formatOptions\n  };\n}\nfunction createCachedFormatter(fn) {\n  const cache = {};\n  return function invokeFormatter(val, lng, options) {\n    const key = lng + JSON.stringify(options);\n    let formatter = cache[key];\n    if (!formatter) {\n      formatter = fn(getCleanedCode(lng), options);\n      cache[key] = formatter;\n    }\n    return formatter(val);\n  };\n}\nclass Formatter {\n  constructor() {\n    let options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n    this.logger = baseLogger.create('formatter');\n    this.options = options;\n    this.formats = {\n      number: createCachedFormatter((lng, opt) => {\n        const formatter = new Intl.NumberFormat(lng, {\n          ...opt\n        });\n        return val => formatter.format(val);\n      }),\n      currency: createCachedFormatter((lng, opt) => {\n        const formatter = new Intl.NumberFormat(lng, {\n          ...opt,\n          style: 'currency'\n        });\n        return val => formatter.format(val);\n      }),\n      datetime: createCachedFormatter((lng, opt) => {\n        const formatter = new Intl.DateTimeFormat(lng, {\n          ...opt\n        });\n        return val => formatter.format(val);\n      }),\n      relativetime: createCachedFormatter((lng, opt) => {\n        const formatter = new Intl.RelativeTimeFormat(lng, {\n          ...opt\n        });\n        return val => formatter.format(val, opt.range || 'day');\n      }),\n      list: createCachedFormatter((lng, opt) => {\n        const formatter = new Intl.ListFormat(lng, {\n          ...opt\n        });\n        return val => formatter.format(val);\n      })\n    };\n    this.init(options);\n  }\n  init(services) {\n    let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {\n      interpolation: {}\n    };\n    const iOpts = options.interpolation;\n    this.formatSeparator = iOpts.formatSeparator ? iOpts.formatSeparator : iOpts.formatSeparator || ',';\n  }\n  add(name, fc) {\n    this.formats[name.toLowerCase().trim()] = fc;\n  }\n  addCached(name, fc) {\n    this.formats[name.toLowerCase().trim()] = createCachedFormatter(fc);\n  }\n  format(value, format, lng) {\n    let options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n    const formats = format.split(this.formatSeparator);\n    const result = formats.reduce((mem, f) => {\n      const {\n        formatName,\n        formatOptions\n      } = parseFormatStr(f);\n      if (this.formats[formatName]) {\n        let formatted = mem;\n        try {\n          const valOptions = options && options.formatParams && options.formatParams[options.interpolationkey] || {};\n          const l = valOptions.locale || valOptions.lng || options.locale || options.lng || lng;\n          formatted = this.formats[formatName](mem, l, {\n            ...formatOptions,\n            ...options,\n            ...valOptions\n          });\n        } catch (error) {\n          this.logger.warn(error);\n        }\n        return formatted;\n      } else {\n        this.logger.warn(`there was no format function for ${formatName}`);\n      }\n      return mem;\n    }, value);\n    return result;\n  }\n}\n\nfunction removePending(q, name) {\n  if (q.pending[name] !== undefined) {\n    delete q.pending[name];\n    q.pendingCount--;\n  }\n}\nclass Connector extends EventEmitter {\n  constructor(backend, store, services) {\n    let options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n    super();\n    this.backend = backend;\n    this.store = store;\n    this.services = services;\n    this.languageUtils = services.languageUtils;\n    this.options = options;\n    this.logger = baseLogger.create('backendConnector');\n    this.waitingReads = [];\n    this.maxParallelReads = options.maxParallelReads || 10;\n    this.readingCalls = 0;\n    this.maxRetries = options.maxRetries >= 0 ? options.maxRetries : 5;\n    this.retryTimeout = options.retryTimeout >= 1 ? options.retryTimeout : 350;\n    this.state = {};\n    this.queue = [];\n    if (this.backend && this.backend.init) {\n      this.backend.init(services, options.backend, options);\n    }\n  }\n  queueLoad(languages, namespaces, options, callback) {\n    const toLoad = {};\n    const pending = {};\n    const toLoadLanguages = {};\n    const toLoadNamespaces = {};\n    languages.forEach(lng => {\n      let hasAllNamespaces = true;\n      namespaces.forEach(ns => {\n        const name = `${lng}|${ns}`;\n        if (!options.reload && this.store.hasResourceBundle(lng, ns)) {\n          this.state[name] = 2;\n        } else if (this.state[name] < 0) ; else if (this.state[name] === 1) {\n          if (pending[name] === undefined) pending[name] = true;\n        } else {\n          this.state[name] = 1;\n          hasAllNamespaces = false;\n          if (pending[name] === undefined) pending[name] = true;\n          if (toLoad[name] === undefined) toLoad[name] = true;\n          if (toLoadNamespaces[ns] === undefined) toLoadNamespaces[ns] = true;\n        }\n      });\n      if (!hasAllNamespaces) toLoadLanguages[lng] = true;\n    });\n    if (Object.keys(toLoad).length || Object.keys(pending).length) {\n      this.queue.push({\n        pending,\n        pendingCount: Object.keys(pending).length,\n        loaded: {},\n        errors: [],\n        callback\n      });\n    }\n    return {\n      toLoad: Object.keys(toLoad),\n      pending: Object.keys(pending),\n      toLoadLanguages: Object.keys(toLoadLanguages),\n      toLoadNamespaces: Object.keys(toLoadNamespaces)\n    };\n  }\n  loaded(name, err, data) {\n    const s = name.split('|');\n    const lng = s[0];\n    const ns = s[1];\n    if (err) this.emit('failedLoading', lng, ns, err);\n    if (data) {\n      this.store.addResourceBundle(lng, ns, data);\n    }\n    this.state[name] = err ? -1 : 2;\n    const loaded = {};\n    this.queue.forEach(q => {\n      pushPath(q.loaded, [lng], ns);\n      removePending(q, name);\n      if (err) q.errors.push(err);\n      if (q.pendingCount === 0 && !q.done) {\n        Object.keys(q.loaded).forEach(l => {\n          if (!loaded[l]) loaded[l] = {};\n          const loadedKeys = q.loaded[l];\n          if (loadedKeys.length) {\n            loadedKeys.forEach(n => {\n              if (loaded[l][n] === undefined) loaded[l][n] = true;\n            });\n          }\n        });\n        q.done = true;\n        if (q.errors.length) {\n          q.callback(q.errors);\n        } else {\n          q.callback();\n        }\n      }\n    });\n    this.emit('loaded', loaded);\n    this.queue = this.queue.filter(q => !q.done);\n  }\n  read(lng, ns, fcName) {\n    let tried = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0;\n    let wait = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : this.retryTimeout;\n    let callback = arguments.length > 5 ? arguments[5] : undefined;\n    if (!lng.length) return callback(null, {});\n    if (this.readingCalls >= this.maxParallelReads) {\n      this.waitingReads.push({\n        lng,\n        ns,\n        fcName,\n        tried,\n        wait,\n        callback\n      });\n      return;\n    }\n    this.readingCalls++;\n    const resolver = (err, data) => {\n      this.readingCalls--;\n      if (this.waitingReads.length > 0) {\n        const next = this.waitingReads.shift();\n        this.read(next.lng, next.ns, next.fcName, next.tried, next.wait, next.callback);\n      }\n      if (err && data && tried < this.maxRetries) {\n        setTimeout(() => {\n          this.read.call(this, lng, ns, fcName, tried + 1, wait * 2, callback);\n        }, wait);\n        return;\n      }\n      callback(err, data);\n    };\n    const fc = this.backend[fcName].bind(this.backend);\n    if (fc.length === 2) {\n      try {\n        const r = fc(lng, ns);\n        if (r && typeof r.then === 'function') {\n          r.then(data => resolver(null, data)).catch(resolver);\n        } else {\n          resolver(null, r);\n        }\n      } catch (err) {\n        resolver(err);\n      }\n      return;\n    }\n    return fc(lng, ns, resolver);\n  }\n  prepareLoading(languages, namespaces) {\n    let options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n    let callback = arguments.length > 3 ? arguments[3] : undefined;\n    if (!this.backend) {\n      this.logger.warn('No backend was added via i18next.use. Will not load resources.');\n      return callback && callback();\n    }\n    if (typeof languages === 'string') languages = this.languageUtils.toResolveHierarchy(languages);\n    if (typeof namespaces === 'string') namespaces = [namespaces];\n    const toLoad = this.queueLoad(languages, namespaces, options, callback);\n    if (!toLoad.toLoad.length) {\n      if (!toLoad.pending.length) callback();\n      return null;\n    }\n    toLoad.toLoad.forEach(name => {\n      this.loadOne(name);\n    });\n  }\n  load(languages, namespaces, callback) {\n    this.prepareLoading(languages, namespaces, {}, callback);\n  }\n  reload(languages, namespaces, callback) {\n    this.prepareLoading(languages, namespaces, {\n      reload: true\n    }, callback);\n  }\n  loadOne(name) {\n    let prefix = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';\n    const s = name.split('|');\n    const lng = s[0];\n    const ns = s[1];\n    this.read(lng, ns, 'read', undefined, undefined, (err, data) => {\n      if (err) this.logger.warn(`${prefix}loading namespace ${ns} for language ${lng} failed`, err);\n      if (!err && data) this.logger.log(`${prefix}loaded namespace ${ns} for language ${lng}`, data);\n      this.loaded(name, err, data);\n    });\n  }\n  saveMissing(languages, namespace, key, fallbackValue, isUpdate) {\n    let options = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : {};\n    let clb = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : () => {};\n    if (this.services.utils && this.services.utils.hasLoadedNamespace && !this.services.utils.hasLoadedNamespace(namespace)) {\n      this.logger.warn(`did not save key \"${key}\" as the namespace \"${namespace}\" was not yet loaded`, 'This means something IS WRONG in your setup. You access the t function before i18next.init / i18next.loadNamespace / i18next.changeLanguage was done. Wait for the callback or Promise to resolve before accessing it!!!');\n      return;\n    }\n    if (key === undefined || key === null || key === '') return;\n    if (this.backend && this.backend.create) {\n      const opts = {\n        ...options,\n        isUpdate\n      };\n      const fc = this.backend.create.bind(this.backend);\n      if (fc.length < 6) {\n        try {\n          let r;\n          if (fc.length === 5) {\n            r = fc(languages, namespace, key, fallbackValue, opts);\n          } else {\n            r = fc(languages, namespace, key, fallbackValue);\n          }\n          if (r && typeof r.then === 'function') {\n            r.then(data => clb(null, data)).catch(clb);\n          } else {\n            clb(null, r);\n          }\n        } catch (err) {\n          clb(err);\n        }\n      } else {\n        fc(languages, namespace, key, fallbackValue, clb, opts);\n      }\n    }\n    if (!languages || !languages[0]) return;\n    this.store.addResource(languages[0], namespace, key, fallbackValue);\n  }\n}\n\nfunction get() {\n  return {\n    debug: false,\n    initImmediate: true,\n    ns: ['translation'],\n    defaultNS: ['translation'],\n    fallbackLng: ['dev'],\n    fallbackNS: false,\n    supportedLngs: false,\n    nonExplicitSupportedLngs: false,\n    load: 'all',\n    preload: false,\n    simplifyPluralSuffix: true,\n    keySeparator: '.',\n    nsSeparator: ':',\n    pluralSeparator: '_',\n    contextSeparator: '_',\n    partialBundledLanguages: false,\n    saveMissing: false,\n    updateMissing: false,\n    saveMissingTo: 'fallback',\n    saveMissingPlurals: true,\n    missingKeyHandler: false,\n    missingInterpolationHandler: false,\n    postProcess: false,\n    postProcessPassResolved: false,\n    returnNull: false,\n    returnEmptyString: true,\n    returnObjects: false,\n    joinArrays: false,\n    returnedObjectHandler: false,\n    parseMissingKeyHandler: false,\n    appendNamespaceToMissingKey: false,\n    appendNamespaceToCIMode: false,\n    overloadTranslationOptionHandler: function handle(args) {\n      let ret = {};\n      if (typeof args[1] === 'object') ret = args[1];\n      if (typeof args[1] === 'string') ret.defaultValue = args[1];\n      if (typeof args[2] === 'string') ret.tDescription = args[2];\n      if (typeof args[2] === 'object' || typeof args[3] === 'object') {\n        const options = args[3] || args[2];\n        Object.keys(options).forEach(key => {\n          ret[key] = options[key];\n        });\n      }\n      return ret;\n    },\n    interpolation: {\n      escapeValue: true,\n      format: (value, format, lng, options) => value,\n      prefix: '{{',\n      suffix: '}}',\n      formatSeparator: ',',\n      unescapePrefix: '-',\n      nestingPrefix: '$t(',\n      nestingSuffix: ')',\n      nestingOptionsSeparator: ',',\n      maxReplaces: 1000,\n      skipOnVariables: true\n    }\n  };\n}\nfunction transformOptions(options) {\n  if (typeof options.ns === 'string') options.ns = [options.ns];\n  if (typeof options.fallbackLng === 'string') options.fallbackLng = [options.fallbackLng];\n  if (typeof options.fallbackNS === 'string') options.fallbackNS = [options.fallbackNS];\n  if (options.supportedLngs && options.supportedLngs.indexOf('cimode') < 0) {\n    options.supportedLngs = options.supportedLngs.concat(['cimode']);\n  }\n  return options;\n}\n\nfunction noop() {}\nfunction bindMemberFunctions(inst) {\n  const mems = Object.getOwnPropertyNames(Object.getPrototypeOf(inst));\n  mems.forEach(mem => {\n    if (typeof inst[mem] === 'function') {\n      inst[mem] = inst[mem].bind(inst);\n    }\n  });\n}\nclass I18n extends EventEmitter {\n  constructor() {\n    let options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n    let callback = arguments.length > 1 ? arguments[1] : undefined;\n    super();\n    this.options = transformOptions(options);\n    this.services = {};\n    this.logger = baseLogger;\n    this.modules = {\n      external: []\n    };\n    bindMemberFunctions(this);\n    if (callback && !this.isInitialized && !options.isClone) {\n      if (!this.options.initImmediate) {\n        this.init(options, callback);\n        return this;\n      }\n      setTimeout(() => {\n        this.init(options, callback);\n      }, 0);\n    }\n  }\n  init() {\n    var _this = this;\n    let options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n    let callback = arguments.length > 1 ? arguments[1] : undefined;\n    if (typeof options === 'function') {\n      callback = options;\n      options = {};\n    }\n    if (!options.defaultNS && options.defaultNS !== false && options.ns) {\n      if (typeof options.ns === 'string') {\n        options.defaultNS = options.ns;\n      } else if (options.ns.indexOf('translation') < 0) {\n        options.defaultNS = options.ns[0];\n      }\n    }\n    const defOpts = get();\n    this.options = {\n      ...defOpts,\n      ...this.options,\n      ...transformOptions(options)\n    };\n    if (this.options.compatibilityAPI !== 'v1') {\n      this.options.interpolation = {\n        ...defOpts.interpolation,\n        ...this.options.interpolation\n      };\n    }\n    if (options.keySeparator !== undefined) {\n      this.options.userDefinedKeySeparator = options.keySeparator;\n    }\n    if (options.nsSeparator !== undefined) {\n      this.options.userDefinedNsSeparator = options.nsSeparator;\n    }\n    function createClassOnDemand(ClassOrObject) {\n      if (!ClassOrObject) return null;\n      if (typeof ClassOrObject === 'function') return new ClassOrObject();\n      return ClassOrObject;\n    }\n    if (!this.options.isClone) {\n      if (this.modules.logger) {\n        baseLogger.init(createClassOnDemand(this.modules.logger), this.options);\n      } else {\n        baseLogger.init(null, this.options);\n      }\n      let formatter;\n      if (this.modules.formatter) {\n        formatter = this.modules.formatter;\n      } else if (typeof Intl !== 'undefined') {\n        formatter = Formatter;\n      }\n      const lu = new LanguageUtil(this.options);\n      this.store = new ResourceStore(this.options.resources, this.options);\n      const s = this.services;\n      s.logger = baseLogger;\n      s.resourceStore = this.store;\n      s.languageUtils = lu;\n      s.pluralResolver = new PluralResolver(lu, {\n        prepend: this.options.pluralSeparator,\n        compatibilityJSON: this.options.compatibilityJSON,\n        simplifyPluralSuffix: this.options.simplifyPluralSuffix\n      });\n      if (formatter && (!this.options.interpolation.format || this.options.interpolation.format === defOpts.interpolation.format)) {\n        s.formatter = createClassOnDemand(formatter);\n        s.formatter.init(s, this.options);\n        this.options.interpolation.format = s.formatter.format.bind(s.formatter);\n      }\n      s.interpolator = new Interpolator(this.options);\n      s.utils = {\n        hasLoadedNamespace: this.hasLoadedNamespace.bind(this)\n      };\n      s.backendConnector = new Connector(createClassOnDemand(this.modules.backend), s.resourceStore, s, this.options);\n      s.backendConnector.on('*', function (event) {\n        for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n          args[_key - 1] = arguments[_key];\n        }\n        _this.emit(event, ...args);\n      });\n      if (this.modules.languageDetector) {\n        s.languageDetector = createClassOnDemand(this.modules.languageDetector);\n        if (s.languageDetector.init) s.languageDetector.init(s, this.options.detection, this.options);\n      }\n      if (this.modules.i18nFormat) {\n        s.i18nFormat = createClassOnDemand(this.modules.i18nFormat);\n        if (s.i18nFormat.init) s.i18nFormat.init(this);\n      }\n      this.translator = new Translator(this.services, this.options);\n      this.translator.on('*', function (event) {\n        for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n          args[_key2 - 1] = arguments[_key2];\n        }\n        _this.emit(event, ...args);\n      });\n      this.modules.external.forEach(m => {\n        if (m.init) m.init(this);\n      });\n    }\n    this.format = this.options.interpolation.format;\n    if (!callback) callback = noop;\n    if (this.options.fallbackLng && !this.services.languageDetector && !this.options.lng) {\n      const codes = this.services.languageUtils.getFallbackCodes(this.options.fallbackLng);\n      if (codes.length > 0 && codes[0] !== 'dev') this.options.lng = codes[0];\n    }\n    if (!this.services.languageDetector && !this.options.lng) {\n      this.logger.warn('init: no languageDetector is used and no lng is defined');\n    }\n    const storeApi = ['getResource', 'hasResourceBundle', 'getResourceBundle', 'getDataByLanguage'];\n    storeApi.forEach(fcName => {\n      this[fcName] = function () {\n        return _this.store[fcName](...arguments);\n      };\n    });\n    const storeApiChained = ['addResource', 'addResources', 'addResourceBundle', 'removeResourceBundle'];\n    storeApiChained.forEach(fcName => {\n      this[fcName] = function () {\n        _this.store[fcName](...arguments);\n        return _this;\n      };\n    });\n    const deferred = defer();\n    const load = () => {\n      const finish = (err, t) => {\n        if (this.isInitialized && !this.initializedStoreOnce) this.logger.warn('init: i18next is already initialized. You should call init just once!');\n        this.isInitialized = true;\n        if (!this.options.isClone) this.logger.log('initialized', this.options);\n        this.emit('initialized', this.options);\n        deferred.resolve(t);\n        callback(err, t);\n      };\n      if (this.languages && this.options.compatibilityAPI !== 'v1' && !this.isInitialized) return finish(null, this.t.bind(this));\n      this.changeLanguage(this.options.lng, finish);\n    };\n    if (this.options.resources || !this.options.initImmediate) {\n      load();\n    } else {\n      setTimeout(load, 0);\n    }\n    return deferred;\n  }\n  loadResources(language) {\n    let callback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : noop;\n    let usedCallback = callback;\n    const usedLng = typeof language === 'string' ? language : this.language;\n    if (typeof language === 'function') usedCallback = language;\n    if (!this.options.resources || this.options.partialBundledLanguages) {\n      if (usedLng && usedLng.toLowerCase() === 'cimode' && (!this.options.preload || this.options.preload.length === 0)) return usedCallback();\n      const toLoad = [];\n      const append = lng => {\n        if (!lng) return;\n        if (lng === 'cimode') return;\n        const lngs = this.services.languageUtils.toResolveHierarchy(lng);\n        lngs.forEach(l => {\n          if (l === 'cimode') return;\n          if (toLoad.indexOf(l) < 0) toLoad.push(l);\n        });\n      };\n      if (!usedLng) {\n        const fallbacks = this.services.languageUtils.getFallbackCodes(this.options.fallbackLng);\n        fallbacks.forEach(l => append(l));\n      } else {\n        append(usedLng);\n      }\n      if (this.options.preload) {\n        this.options.preload.forEach(l => append(l));\n      }\n      this.services.backendConnector.load(toLoad, this.options.ns, e => {\n        if (!e && !this.resolvedLanguage && this.language) this.setResolvedLanguage(this.language);\n        usedCallback(e);\n      });\n    } else {\n      usedCallback(null);\n    }\n  }\n  reloadResources(lngs, ns, callback) {\n    const deferred = defer();\n    if (!lngs) lngs = this.languages;\n    if (!ns) ns = this.options.ns;\n    if (!callback) callback = noop;\n    this.services.backendConnector.reload(lngs, ns, err => {\n      deferred.resolve();\n      callback(err);\n    });\n    return deferred;\n  }\n  use(module) {\n    if (!module) throw new Error('You are passing an undefined module! Please check the object you are passing to i18next.use()');\n    if (!module.type) throw new Error('You are passing a wrong module! Please check the object you are passing to i18next.use()');\n    if (module.type === 'backend') {\n      this.modules.backend = module;\n    }\n    if (module.type === 'logger' || module.log && module.warn && module.error) {\n      this.modules.logger = module;\n    }\n    if (module.type === 'languageDetector') {\n      this.modules.languageDetector = module;\n    }\n    if (module.type === 'i18nFormat') {\n      this.modules.i18nFormat = module;\n    }\n    if (module.type === 'postProcessor') {\n      postProcessor.addPostProcessor(module);\n    }\n    if (module.type === 'formatter') {\n      this.modules.formatter = module;\n    }\n    if (module.type === '3rdParty') {\n      this.modules.external.push(module);\n    }\n    return this;\n  }\n  setResolvedLanguage(l) {\n    if (!l || !this.languages) return;\n    if (['cimode', 'dev'].indexOf(l) > -1) return;\n    for (let li = 0; li < this.languages.length; li++) {\n      const lngInLngs = this.languages[li];\n      if (['cimode', 'dev'].indexOf(lngInLngs) > -1) continue;\n      if (this.store.hasLanguageSomeTranslations(lngInLngs)) {\n        this.resolvedLanguage = lngInLngs;\n        break;\n      }\n    }\n  }\n  changeLanguage(lng, callback) {\n    var _this2 = this;\n    this.isLanguageChangingTo = lng;\n    const deferred = defer();\n    this.emit('languageChanging', lng);\n    const setLngProps = l => {\n      this.language = l;\n      this.languages = this.services.languageUtils.toResolveHierarchy(l);\n      this.resolvedLanguage = undefined;\n      this.setResolvedLanguage(l);\n    };\n    const done = (err, l) => {\n      if (l) {\n        setLngProps(l);\n        this.translator.changeLanguage(l);\n        this.isLanguageChangingTo = undefined;\n        this.emit('languageChanged', l);\n        this.logger.log('languageChanged', l);\n      } else {\n        this.isLanguageChangingTo = undefined;\n      }\n      deferred.resolve(function () {\n        return _this2.t(...arguments);\n      });\n      if (callback) callback(err, function () {\n        return _this2.t(...arguments);\n      });\n    };\n    const setLng = lngs => {\n      if (!lng && !lngs && this.services.languageDetector) lngs = [];\n      const l = typeof lngs === 'string' ? lngs : this.services.languageUtils.getBestMatchFromCodes(lngs);\n      if (l) {\n        if (!this.language) {\n          setLngProps(l);\n        }\n        if (!this.translator.language) this.translator.changeLanguage(l);\n        if (this.services.languageDetector && this.services.languageDetector.cacheUserLanguage) this.services.languageDetector.cacheUserLanguage(l);\n      }\n      this.loadResources(l, err => {\n        done(err, l);\n      });\n    };\n    if (!lng && this.services.languageDetector && !this.services.languageDetector.async) {\n      setLng(this.services.languageDetector.detect());\n    } else if (!lng && this.services.languageDetector && this.services.languageDetector.async) {\n      if (this.services.languageDetector.detect.length === 0) {\n        this.services.languageDetector.detect().then(setLng);\n      } else {\n        this.services.languageDetector.detect(setLng);\n      }\n    } else {\n      setLng(lng);\n    }\n    return deferred;\n  }\n  getFixedT(lng, ns, keyPrefix) {\n    var _this3 = this;\n    const fixedT = function (key, opts) {\n      let options;\n      if (typeof opts !== 'object') {\n        for (var _len3 = arguments.length, rest = new Array(_len3 > 2 ? _len3 - 2 : 0), _key3 = 2; _key3 < _len3; _key3++) {\n          rest[_key3 - 2] = arguments[_key3];\n        }\n        options = _this3.options.overloadTranslationOptionHandler([key, opts].concat(rest));\n      } else {\n        options = {\n          ...opts\n        };\n      }\n      options.lng = options.lng || fixedT.lng;\n      options.lngs = options.lngs || fixedT.lngs;\n      options.ns = options.ns || fixedT.ns;\n      options.keyPrefix = options.keyPrefix || keyPrefix || fixedT.keyPrefix;\n      const keySeparator = _this3.options.keySeparator || '.';\n      let resultKey;\n      if (options.keyPrefix && Array.isArray(key)) {\n        resultKey = key.map(k => `${options.keyPrefix}${keySeparator}${k}`);\n      } else {\n        resultKey = options.keyPrefix ? `${options.keyPrefix}${keySeparator}${key}` : key;\n      }\n      return _this3.t(resultKey, options);\n    };\n    if (typeof lng === 'string') {\n      fixedT.lng = lng;\n    } else {\n      fixedT.lngs = lng;\n    }\n    fixedT.ns = ns;\n    fixedT.keyPrefix = keyPrefix;\n    return fixedT;\n  }\n  t() {\n    return this.translator && this.translator.translate(...arguments);\n  }\n  exists() {\n    return this.translator && this.translator.exists(...arguments);\n  }\n  setDefaultNamespace(ns) {\n    this.options.defaultNS = ns;\n  }\n  hasLoadedNamespace(ns) {\n    let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n    if (!this.isInitialized) {\n      this.logger.warn('hasLoadedNamespace: i18next was not initialized', this.languages);\n      return false;\n    }\n    if (!this.languages || !this.languages.length) {\n      this.logger.warn('hasLoadedNamespace: i18n.languages were undefined or empty', this.languages);\n      return false;\n    }\n    const lng = options.lng || this.resolvedLanguage || this.languages[0];\n    const fallbackLng = this.options ? this.options.fallbackLng : false;\n    const lastLng = this.languages[this.languages.length - 1];\n    if (lng.toLowerCase() === 'cimode') return true;\n    const loadNotPending = (l, n) => {\n      const loadState = this.services.backendConnector.state[`${l}|${n}`];\n      return loadState === -1 || loadState === 2;\n    };\n    if (options.precheck) {\n      const preResult = options.precheck(this, loadNotPending);\n      if (preResult !== undefined) return preResult;\n    }\n    if (this.hasResourceBundle(lng, ns)) return true;\n    if (!this.services.backendConnector.backend || this.options.resources && !this.options.partialBundledLanguages) return true;\n    if (loadNotPending(lng, ns) && (!fallbackLng || loadNotPending(lastLng, ns))) return true;\n    return false;\n  }\n  loadNamespaces(ns, callback) {\n    const deferred = defer();\n    if (!this.options.ns) {\n      if (callback) callback();\n      return Promise.resolve();\n    }\n    if (typeof ns === 'string') ns = [ns];\n    ns.forEach(n => {\n      if (this.options.ns.indexOf(n) < 0) this.options.ns.push(n);\n    });\n    this.loadResources(err => {\n      deferred.resolve();\n      if (callback) callback(err);\n    });\n    return deferred;\n  }\n  loadLanguages(lngs, callback) {\n    const deferred = defer();\n    if (typeof lngs === 'string') lngs = [lngs];\n    const preloaded = this.options.preload || [];\n    const newLngs = lngs.filter(lng => preloaded.indexOf(lng) < 0);\n    if (!newLngs.length) {\n      if (callback) callback();\n      return Promise.resolve();\n    }\n    this.options.preload = preloaded.concat(newLngs);\n    this.loadResources(err => {\n      deferred.resolve();\n      if (callback) callback(err);\n    });\n    return deferred;\n  }\n  dir(lng) {\n    if (!lng) lng = this.resolvedLanguage || (this.languages && this.languages.length > 0 ? this.languages[0] : this.language);\n    if (!lng) return 'rtl';\n    const rtlLngs = ['ar', 'shu', 'sqr', 'ssh', 'xaa', 'yhd', 'yud', 'aao', 'abh', 'abv', 'acm', 'acq', 'acw', 'acx', 'acy', 'adf', 'ads', 'aeb', 'aec', 'afb', 'ajp', 'apc', 'apd', 'arb', 'arq', 'ars', 'ary', 'arz', 'auz', 'avl', 'ayh', 'ayl', 'ayn', 'ayp', 'bbz', 'pga', 'he', 'iw', 'ps', 'pbt', 'pbu', 'pst', 'prp', 'prd', 'ug', 'ur', 'ydd', 'yds', 'yih', 'ji', 'yi', 'hbo', 'men', 'xmn', 'fa', 'jpr', 'peo', 'pes', 'prs', 'dv', 'sam', 'ckb'];\n    const languageUtils = this.services && this.services.languageUtils || new LanguageUtil(get());\n    return rtlLngs.indexOf(languageUtils.getLanguagePartFromCode(lng)) > -1 || lng.toLowerCase().indexOf('-arab') > 1 ? 'rtl' : 'ltr';\n  }\n  static createInstance() {\n    let options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n    let callback = arguments.length > 1 ? arguments[1] : undefined;\n    return new I18n(options, callback);\n  }\n  cloneInstance() {\n    let options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n    let callback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : noop;\n    const forkResourceStore = options.forkResourceStore;\n    if (forkResourceStore) delete options.forkResourceStore;\n    const mergedOptions = {\n      ...this.options,\n      ...options,\n      ...{\n        isClone: true\n      }\n    };\n    const clone = new I18n(mergedOptions);\n    if (options.debug !== undefined || options.prefix !== undefined) {\n      clone.logger = clone.logger.clone(options);\n    }\n    const membersToCopy = ['store', 'services', 'language'];\n    membersToCopy.forEach(m => {\n      clone[m] = this[m];\n    });\n    clone.services = {\n      ...this.services\n    };\n    clone.services.utils = {\n      hasLoadedNamespace: clone.hasLoadedNamespace.bind(clone)\n    };\n    if (forkResourceStore) {\n      clone.store = new ResourceStore(this.store.data, mergedOptions);\n      clone.services.resourceStore = clone.store;\n    }\n    clone.translator = new Translator(clone.services, mergedOptions);\n    clone.translator.on('*', function (event) {\n      for (var _len4 = arguments.length, args = new Array(_len4 > 1 ? _len4 - 1 : 0), _key4 = 1; _key4 < _len4; _key4++) {\n        args[_key4 - 1] = arguments[_key4];\n      }\n      clone.emit(event, ...args);\n    });\n    clone.init(mergedOptions, callback);\n    clone.translator.options = mergedOptions;\n    clone.translator.backendConnector.services.utils = {\n      hasLoadedNamespace: clone.hasLoadedNamespace.bind(clone)\n    };\n    return clone;\n  }\n  toJSON() {\n    return {\n      options: this.options,\n      store: this.store,\n      language: this.language,\n      languages: this.languages,\n      resolvedLanguage: this.resolvedLanguage\n    };\n  }\n}\nconst instance = I18n.createInstance();\ninstance.createInstance = I18n.createInstance;\n\nconst createInstance = instance.createInstance;\nconst dir = instance.dir;\nconst init = instance.init;\nconst loadResources = instance.loadResources;\nconst reloadResources = instance.reloadResources;\nconst use = instance.use;\nconst changeLanguage = instance.changeLanguage;\nconst getFixedT = instance.getFixedT;\nconst t = instance.t;\nconst exists = instance.exists;\nconst setDefaultNamespace = instance.setDefaultNamespace;\nconst hasLoadedNamespace = instance.hasLoadedNamespace;\nconst loadNamespaces = instance.loadNamespaces;\nconst loadLanguages = instance.loadLanguages;\n\nexport { changeLanguage, createInstance, instance as default, dir, exists, getFixedT, hasLoadedNamespace, init, loadLanguages, loadNamespaces, loadResources, reloadResources, setDefaultNamespace, t, use };\n","const instanceOfAny = (object, constructors) => constructors.some((c) => object instanceof c);\n\nlet idbProxyableTypes;\nlet cursorAdvanceMethods;\n// This is a function to prevent it throwing up in node environments.\nfunction getIdbProxyableTypes() {\n    return (idbProxyableTypes ||\n        (idbProxyableTypes = [\n            IDBDatabase,\n            IDBObjectStore,\n            IDBIndex,\n            IDBCursor,\n            IDBTransaction,\n        ]));\n}\n// This is a function to prevent it throwing up in node environments.\nfunction getCursorAdvanceMethods() {\n    return (cursorAdvanceMethods ||\n        (cursorAdvanceMethods = [\n            IDBCursor.prototype.advance,\n            IDBCursor.prototype.continue,\n            IDBCursor.prototype.continuePrimaryKey,\n        ]));\n}\nconst cursorRequestMap = new WeakMap();\nconst transactionDoneMap = new WeakMap();\nconst transactionStoreNamesMap = new WeakMap();\nconst transformCache = new WeakMap();\nconst reverseTransformCache = new WeakMap();\nfunction promisifyRequest(request) {\n    const promise = new Promise((resolve, reject) => {\n        const unlisten = () => {\n            request.removeEventListener('success', success);\n            request.removeEventListener('error', error);\n        };\n        const success = () => {\n            resolve(wrap(request.result));\n            unlisten();\n        };\n        const error = () => {\n            reject(request.error);\n            unlisten();\n        };\n        request.addEventListener('success', success);\n        request.addEventListener('error', error);\n    });\n    promise\n        .then((value) => {\n        // Since cursoring reuses the IDBRequest (*sigh*), we cache it for later retrieval\n        // (see wrapFunction).\n        if (value instanceof IDBCursor) {\n            cursorRequestMap.set(value, request);\n        }\n        // Catching to avoid \"Uncaught Promise exceptions\"\n    })\n        .catch(() => { });\n    // This mapping exists in reverseTransformCache but doesn't doesn't exist in transformCache. This\n    // is because we create many promises from a single IDBRequest.\n    reverseTransformCache.set(promise, request);\n    return promise;\n}\nfunction cacheDonePromiseForTransaction(tx) {\n    // Early bail if we've already created a done promise for this transaction.\n    if (transactionDoneMap.has(tx))\n        return;\n    const done = new Promise((resolve, reject) => {\n        const unlisten = () => {\n            tx.removeEventListener('complete', complete);\n            tx.removeEventListener('error', error);\n            tx.removeEventListener('abort', error);\n        };\n        const complete = () => {\n            resolve();\n            unlisten();\n        };\n        const error = () => {\n            reject(tx.error || new DOMException('AbortError', 'AbortError'));\n            unlisten();\n        };\n        tx.addEventListener('complete', complete);\n        tx.addEventListener('error', error);\n        tx.addEventListener('abort', error);\n    });\n    // Cache it for later retrieval.\n    transactionDoneMap.set(tx, done);\n}\nlet idbProxyTraps = {\n    get(target, prop, receiver) {\n        if (target instanceof IDBTransaction) {\n            // Special handling for transaction.done.\n            if (prop === 'done')\n                return transactionDoneMap.get(target);\n            // Polyfill for objectStoreNames because of Edge.\n            if (prop === 'objectStoreNames') {\n                return target.objectStoreNames || transactionStoreNamesMap.get(target);\n            }\n            // Make tx.store return the only store in the transaction, or undefined if there are many.\n            if (prop === 'store') {\n                return receiver.objectStoreNames[1]\n                    ? undefined\n                    : receiver.objectStore(receiver.objectStoreNames[0]);\n            }\n        }\n        // Else transform whatever we get back.\n        return wrap(target[prop]);\n    },\n    set(target, prop, value) {\n        target[prop] = value;\n        return true;\n    },\n    has(target, prop) {\n        if (target instanceof IDBTransaction &&\n            (prop === 'done' || prop === 'store')) {\n            return true;\n        }\n        return prop in target;\n    },\n};\nfunction replaceTraps(callback) {\n    idbProxyTraps = callback(idbProxyTraps);\n}\nfunction wrapFunction(func) {\n    // Due to expected object equality (which is enforced by the caching in `wrap`), we\n    // only create one new func per func.\n    // Edge doesn't support objectStoreNames (booo), so we polyfill it here.\n    if (func === IDBDatabase.prototype.transaction &&\n        !('objectStoreNames' in IDBTransaction.prototype)) {\n        return function (storeNames, ...args) {\n            const tx = func.call(unwrap(this), storeNames, ...args);\n            transactionStoreNamesMap.set(tx, storeNames.sort ? storeNames.sort() : [storeNames]);\n            return wrap(tx);\n        };\n    }\n    // Cursor methods are special, as the behaviour is a little more different to standard IDB. In\n    // IDB, you advance the cursor and wait for a new 'success' on the IDBRequest that gave you the\n    // cursor. It's kinda like a promise that can resolve with many values. That doesn't make sense\n    // with real promises, so each advance methods returns a new promise for the cursor object, or\n    // undefined if the end of the cursor has been reached.\n    if (getCursorAdvanceMethods().includes(func)) {\n        return function (...args) {\n            // Calling the original function with the proxy as 'this' causes ILLEGAL INVOCATION, so we use\n            // the original object.\n            func.apply(unwrap(this), args);\n            return wrap(cursorRequestMap.get(this));\n        };\n    }\n    return function (...args) {\n        // Calling the original function with the proxy as 'this' causes ILLEGAL INVOCATION, so we use\n        // the original object.\n        return wrap(func.apply(unwrap(this), args));\n    };\n}\nfunction transformCachableValue(value) {\n    if (typeof value === 'function')\n        return wrapFunction(value);\n    // This doesn't return, it just creates a 'done' promise for the transaction,\n    // which is later returned for transaction.done (see idbObjectHandler).\n    if (value instanceof IDBTransaction)\n        cacheDonePromiseForTransaction(value);\n    if (instanceOfAny(value, getIdbProxyableTypes()))\n        return new Proxy(value, idbProxyTraps);\n    // Return the same value back if we're not going to transform it.\n    return value;\n}\nfunction wrap(value) {\n    // We sometimes generate multiple promises from a single IDBRequest (eg when cursoring), because\n    // IDB is weird and a single IDBRequest can yield many responses, so these can't be cached.\n    if (value instanceof IDBRequest)\n        return promisifyRequest(value);\n    // If we've already transformed this value before, reuse the transformed value.\n    // This is faster, but it also provides object equality.\n    if (transformCache.has(value))\n        return transformCache.get(value);\n    const newValue = transformCachableValue(value);\n    // Not all types are transformed.\n    // These may be primitive types, so they can't be WeakMap keys.\n    if (newValue !== value) {\n        transformCache.set(value, newValue);\n        reverseTransformCache.set(newValue, value);\n    }\n    return newValue;\n}\nconst unwrap = (value) => reverseTransformCache.get(value);\n\nexport { reverseTransformCache as a, instanceOfAny as i, replaceTraps as r, unwrap as u, wrap as w };\n","import { w as wrap, r as replaceTraps } from './wrap-idb-value.js';\nexport { u as unwrap, w as wrap } from './wrap-idb-value.js';\n\n/**\n * Open a database.\n *\n * @param name Name of the database.\n * @param version Schema version.\n * @param callbacks Additional callbacks.\n */\nfunction openDB(name, version, { blocked, upgrade, blocking, terminated } = {}) {\n    const request = indexedDB.open(name, version);\n    const openPromise = wrap(request);\n    if (upgrade) {\n        request.addEventListener('upgradeneeded', (event) => {\n            upgrade(wrap(request.result), event.oldVersion, event.newVersion, wrap(request.transaction), event);\n        });\n    }\n    if (blocked) {\n        request.addEventListener('blocked', (event) => blocked(\n        // Casting due to https://github.com/microsoft/TypeScript-DOM-lib-generator/pull/1405\n        event.oldVersion, event.newVersion, event));\n    }\n    openPromise\n        .then((db) => {\n        if (terminated)\n            db.addEventListener('close', () => terminated());\n        if (blocking) {\n            db.addEventListener('versionchange', (event) => blocking(event.oldVersion, event.newVersion, event));\n        }\n    })\n        .catch(() => { });\n    return openPromise;\n}\n/**\n * Delete a database.\n *\n * @param name Name of the database.\n */\nfunction deleteDB(name, { blocked } = {}) {\n    const request = indexedDB.deleteDatabase(name);\n    if (blocked) {\n        request.addEventListener('blocked', (event) => blocked(\n        // Casting due to https://github.com/microsoft/TypeScript-DOM-lib-generator/pull/1405\n        event.oldVersion, event));\n    }\n    return wrap(request).then(() => undefined);\n}\n\nconst readMethods = ['get', 'getKey', 'getAll', 'getAllKeys', 'count'];\nconst writeMethods = ['put', 'add', 'delete', 'clear'];\nconst cachedMethods = new Map();\nfunction getMethod(target, prop) {\n    if (!(target instanceof IDBDatabase &&\n        !(prop in target) &&\n        typeof prop === 'string')) {\n        return;\n    }\n    if (cachedMethods.get(prop))\n        return cachedMethods.get(prop);\n    const targetFuncName = prop.replace(/FromIndex$/, '');\n    const useIndex = prop !== targetFuncName;\n    const isWrite = writeMethods.includes(targetFuncName);\n    if (\n    // Bail if the target doesn't exist on the target. Eg, getAll isn't in Edge.\n    !(targetFuncName in (useIndex ? IDBIndex : IDBObjectStore).prototype) ||\n        !(isWrite || readMethods.includes(targetFuncName))) {\n        return;\n    }\n    const method = async function (storeName, ...args) {\n        // isWrite ? 'readwrite' : undefined gzipps better, but fails in Edge :(\n        const tx = this.transaction(storeName, isWrite ? 'readwrite' : 'readonly');\n        let target = tx.store;\n        if (useIndex)\n            target = target.index(args.shift());\n        // Must reject if op rejects.\n        // If it's a write operation, must reject if tx.done rejects.\n        // Must reject with op rejection first.\n        // Must resolve with op value.\n        // Must handle both promises (no unhandled rejections)\n        return (await Promise.all([\n            target[targetFuncName](...args),\n            isWrite && tx.done,\n        ]))[0];\n    };\n    cachedMethods.set(prop, method);\n    return method;\n}\nreplaceTraps((oldTraps) => ({\n    ...oldTraps,\n    get: (target, prop, receiver) => getMethod(target, prop) || oldTraps.get(target, prop, receiver),\n    has: (target, prop) => !!getMethod(target, prop) || oldTraps.has(target, prop),\n}));\n\nexport { deleteDB, openDB };\n","import digest from '../runtime/digest.js';\nexport const encoder = new TextEncoder();\nexport const decoder = new TextDecoder();\nconst MAX_INT32 = 2 ** 32;\nexport function concat(...buffers) {\n    const size = buffers.reduce((acc, { length }) => acc + length, 0);\n    const buf = new Uint8Array(size);\n    let i = 0;\n    for (const buffer of buffers) {\n        buf.set(buffer, i);\n        i += buffer.length;\n    }\n    return buf;\n}\nexport function p2s(alg, p2sInput) {\n    return concat(encoder.encode(alg), new Uint8Array([0]), p2sInput);\n}\nfunction writeUInt32BE(buf, value, offset) {\n    if (value < 0 || value >= MAX_INT32) {\n        throw new RangeError(`value must be >= 0 and <= ${MAX_INT32 - 1}. Received ${value}`);\n    }\n    buf.set([value >>> 24, value >>> 16, value >>> 8, value & 0xff], offset);\n}\nexport function uint64be(value) {\n    const high = Math.floor(value / MAX_INT32);\n    const low = value % MAX_INT32;\n    const buf = new Uint8Array(8);\n    writeUInt32BE(buf, high, 0);\n    writeUInt32BE(buf, low, 4);\n    return buf;\n}\nexport function uint32be(value) {\n    const buf = new Uint8Array(4);\n    writeUInt32BE(buf, value);\n    return buf;\n}\nexport function lengthAndInput(input) {\n    return concat(uint32be(input.length), input);\n}\nexport async function concatKdf(secret, bits, value) {\n    const iterations = Math.ceil((bits >> 3) / 32);\n    const res = new Uint8Array(iterations * 32);\n    for (let iter = 0; iter < iterations; iter++) {\n        const buf = new Uint8Array(4 + secret.length + value.length);\n        buf.set(uint32be(iter + 1));\n        buf.set(secret, 4);\n        buf.set(value, 4 + secret.length);\n        res.set(await digest('sha256', buf), iter * 32);\n    }\n    return res.slice(0, bits >> 3);\n}\n","import { encoder, decoder } from '../lib/buffer_utils.js';\nexport const encodeBase64 = (input) => {\n    let unencoded = input;\n    if (typeof unencoded === 'string') {\n        unencoded = encoder.encode(unencoded);\n    }\n    const CHUNK_SIZE = 0x8000;\n    const arr = [];\n    for (let i = 0; i < unencoded.length; i += CHUNK_SIZE) {\n        arr.push(String.fromCharCode.apply(null, unencoded.subarray(i, i + CHUNK_SIZE)));\n    }\n    return btoa(arr.join(''));\n};\nexport const encode = (input) => {\n    return encodeBase64(input).replace(/=/g, '').replace(/\\+/g, '-').replace(/\\//g, '_');\n};\nexport const decodeBase64 = (encoded) => {\n    const binary = atob(encoded);\n    const bytes = new Uint8Array(binary.length);\n    for (let i = 0; i < binary.length; i++) {\n        bytes[i] = binary.charCodeAt(i);\n    }\n    return bytes;\n};\nexport const decode = (input) => {\n    let encoded = input;\n    if (encoded instanceof Uint8Array) {\n        encoded = decoder.decode(encoded);\n    }\n    encoded = encoded.replace(/-/g, '+').replace(/_/g, '/').replace(/\\s/g, '');\n    try {\n        return decodeBase64(encoded);\n    }\n    catch {\n        throw new TypeError('The input to be decoded is not correctly encoded.');\n    }\n};\n","export class JOSEError extends Error {\n    constructor(message, options) {\n        super(message, options);\n        this.code = 'ERR_JOSE_GENERIC';\n        this.name = this.constructor.name;\n        Error.captureStackTrace?.(this, this.constructor);\n    }\n}\nJOSEError.code = 'ERR_JOSE_GENERIC';\nexport class JWTClaimValidationFailed extends JOSEError {\n    constructor(message, payload, claim = 'unspecified', reason = 'unspecified') {\n        super(message, { cause: { claim, reason, payload } });\n        this.code = 'ERR_JWT_CLAIM_VALIDATION_FAILED';\n        this.claim = claim;\n        this.reason = reason;\n        this.payload = payload;\n    }\n}\nJWTClaimValidationFailed.code = 'ERR_JWT_CLAIM_VALIDATION_FAILED';\nexport class JWTExpired extends JOSEError {\n    constructor(message, payload, claim = 'unspecified', reason = 'unspecified') {\n        super(message, { cause: { claim, reason, payload } });\n        this.code = 'ERR_JWT_EXPIRED';\n        this.claim = claim;\n        this.reason = reason;\n        this.payload = payload;\n    }\n}\nJWTExpired.code = 'ERR_JWT_EXPIRED';\nexport class JOSEAlgNotAllowed extends JOSEError {\n    constructor() {\n        super(...arguments);\n        this.code = 'ERR_JOSE_ALG_NOT_ALLOWED';\n    }\n}\nJOSEAlgNotAllowed.code = 'ERR_JOSE_ALG_NOT_ALLOWED';\nexport class JOSENotSupported extends JOSEError {\n    constructor() {\n        super(...arguments);\n        this.code = 'ERR_JOSE_NOT_SUPPORTED';\n    }\n}\nJOSENotSupported.code = 'ERR_JOSE_NOT_SUPPORTED';\nexport class JWEDecryptionFailed extends JOSEError {\n    constructor(message = 'decryption operation failed', options) {\n        super(message, options);\n        this.code = 'ERR_JWE_DECRYPTION_FAILED';\n    }\n}\nJWEDecryptionFailed.code = 'ERR_JWE_DECRYPTION_FAILED';\nexport class JWEInvalid extends JOSEError {\n    constructor() {\n        super(...arguments);\n        this.code = 'ERR_JWE_INVALID';\n    }\n}\nJWEInvalid.code = 'ERR_JWE_INVALID';\nexport class JWSInvalid extends JOSEError {\n    constructor() {\n        super(...arguments);\n        this.code = 'ERR_JWS_INVALID';\n    }\n}\nJWSInvalid.code = 'ERR_JWS_INVALID';\nexport class JWTInvalid extends JOSEError {\n    constructor() {\n        super(...arguments);\n        this.code = 'ERR_JWT_INVALID';\n    }\n}\nJWTInvalid.code = 'ERR_JWT_INVALID';\nexport class JWKInvalid extends JOSEError {\n    constructor() {\n        super(...arguments);\n        this.code = 'ERR_JWK_INVALID';\n    }\n}\nJWKInvalid.code = 'ERR_JWK_INVALID';\nexport class JWKSInvalid extends JOSEError {\n    constructor() {\n        super(...arguments);\n        this.code = 'ERR_JWKS_INVALID';\n    }\n}\nJWKSInvalid.code = 'ERR_JWKS_INVALID';\nexport class JWKSNoMatchingKey extends JOSEError {\n    constructor(message = 'no applicable key found in the JSON Web Key Set', options) {\n        super(message, options);\n        this.code = 'ERR_JWKS_NO_MATCHING_KEY';\n    }\n}\nJWKSNoMatchingKey.code = 'ERR_JWKS_NO_MATCHING_KEY';\nexport class JWKSMultipleMatchingKeys extends JOSEError {\n    constructor(message = 'multiple matching keys found in the JSON Web Key Set', options) {\n        super(message, options);\n        this.code = 'ERR_JWKS_MULTIPLE_MATCHING_KEYS';\n    }\n}\nSymbol.asyncIterator;\nJWKSMultipleMatchingKeys.code = 'ERR_JWKS_MULTIPLE_MATCHING_KEYS';\nexport class JWKSTimeout extends JOSEError {\n    constructor(message = 'request timed out', options) {\n        super(message, options);\n        this.code = 'ERR_JWKS_TIMEOUT';\n    }\n}\nJWKSTimeout.code = 'ERR_JWKS_TIMEOUT';\nexport class JWSSignatureVerificationFailed extends JOSEError {\n    constructor(message = 'signature verification failed', options) {\n        super(message, options);\n        this.code = 'ERR_JWS_SIGNATURE_VERIFICATION_FAILED';\n    }\n}\nJWSSignatureVerificationFailed.code = 'ERR_JWS_SIGNATURE_VERIFICATION_FAILED';\n","export default crypto;\nexport const isCryptoKey = (key) => key instanceof CryptoKey;\n","function unusable(name, prop = 'algorithm.name') {\n    return new TypeError(`CryptoKey does not support this operation, its ${prop} must be ${name}`);\n}\nfunction isAlgorithm(algorithm, name) {\n    return algorithm.name === name;\n}\nfunction getHashLength(hash) {\n    return parseInt(hash.name.slice(4), 10);\n}\nfunction getNamedCurve(alg) {\n    switch (alg) {\n        case 'ES256':\n            return 'P-256';\n        case 'ES384':\n            return 'P-384';\n        case 'ES512':\n            return 'P-521';\n        default:\n            throw new Error('unreachable');\n    }\n}\nfunction checkUsage(key, usages) {\n    if (usages.length && !usages.some((expected) => key.usages.includes(expected))) {\n        let msg = 'CryptoKey does not support this operation, its usages must include ';\n        if (usages.length > 2) {\n            const last = usages.pop();\n            msg += `one of ${usages.join(', ')}, or ${last}.`;\n        }\n        else if (usages.length === 2) {\n            msg += `one of ${usages[0]} or ${usages[1]}.`;\n        }\n        else {\n            msg += `${usages[0]}.`;\n        }\n        throw new TypeError(msg);\n    }\n}\nexport function checkSigCryptoKey(key, alg, ...usages) {\n    switch (alg) {\n        case 'HS256':\n        case 'HS384':\n        case 'HS512': {\n            if (!isAlgorithm(key.algorithm, 'HMAC'))\n                throw unusable('HMAC');\n            const expected = parseInt(alg.slice(2), 10);\n            const actual = getHashLength(key.algorithm.hash);\n            if (actual !== expected)\n                throw unusable(`SHA-${expected}`, 'algorithm.hash');\n            break;\n        }\n        case 'RS256':\n        case 'RS384':\n        case 'RS512': {\n            if (!isAlgorithm(key.algorithm, 'RSASSA-PKCS1-v1_5'))\n                throw unusable('RSASSA-PKCS1-v1_5');\n            const expected = parseInt(alg.slice(2), 10);\n            const actual = getHashLength(key.algorithm.hash);\n            if (actual !== expected)\n                throw unusable(`SHA-${expected}`, 'algorithm.hash');\n            break;\n        }\n        case 'PS256':\n        case 'PS384':\n        case 'PS512': {\n            if (!isAlgorithm(key.algorithm, 'RSA-PSS'))\n                throw unusable('RSA-PSS');\n            const expected = parseInt(alg.slice(2), 10);\n            const actual = getHashLength(key.algorithm.hash);\n            if (actual !== expected)\n                throw unusable(`SHA-${expected}`, 'algorithm.hash');\n            break;\n        }\n        case 'EdDSA': {\n            if (key.algorithm.name !== 'Ed25519' && key.algorithm.name !== 'Ed448') {\n                throw unusable('Ed25519 or Ed448');\n            }\n            break;\n        }\n        case 'ES256':\n        case 'ES384':\n        case 'ES512': {\n            if (!isAlgorithm(key.algorithm, 'ECDSA'))\n                throw unusable('ECDSA');\n            const expected = getNamedCurve(alg);\n            const actual = key.algorithm.namedCurve;\n            if (actual !== expected)\n                throw unusable(expected, 'algorithm.namedCurve');\n            break;\n        }\n        default:\n            throw new TypeError('CryptoKey does not support this operation');\n    }\n    checkUsage(key, usages);\n}\nexport function checkEncCryptoKey(key, alg, ...usages) {\n    switch (alg) {\n        case 'A128GCM':\n        case 'A192GCM':\n        case 'A256GCM': {\n            if (!isAlgorithm(key.algorithm, 'AES-GCM'))\n                throw unusable('AES-GCM');\n            const expected = parseInt(alg.slice(1, 4), 10);\n            const actual = key.algorithm.length;\n            if (actual !== expected)\n                throw unusable(expected, 'algorithm.length');\n            break;\n        }\n        case 'A128KW':\n        case 'A192KW':\n        case 'A256KW': {\n            if (!isAlgorithm(key.algorithm, 'AES-KW'))\n                throw unusable('AES-KW');\n            const expected = parseInt(alg.slice(1, 4), 10);\n            const actual = key.algorithm.length;\n            if (actual !== expected)\n                throw unusable(expected, 'algorithm.length');\n            break;\n        }\n        case 'ECDH': {\n            switch (key.algorithm.name) {\n                case 'ECDH':\n                case 'X25519':\n                case 'X448':\n                    break;\n                default:\n                    throw unusable('ECDH, X25519, or X448');\n            }\n            break;\n        }\n        case 'PBES2-HS256+A128KW':\n        case 'PBES2-HS384+A192KW':\n        case 'PBES2-HS512+A256KW':\n            if (!isAlgorithm(key.algorithm, 'PBKDF2'))\n                throw unusable('PBKDF2');\n            break;\n        case 'RSA-OAEP':\n        case 'RSA-OAEP-256':\n        case 'RSA-OAEP-384':\n        case 'RSA-OAEP-512': {\n            if (!isAlgorithm(key.algorithm, 'RSA-OAEP'))\n                throw unusable('RSA-OAEP');\n            const expected = parseInt(alg.slice(9), 10) || 1;\n            const actual = getHashLength(key.algorithm.hash);\n            if (actual !== expected)\n                throw unusable(`SHA-${expected}`, 'algorithm.hash');\n            break;\n        }\n        default:\n            throw new TypeError('CryptoKey does not support this operation');\n    }\n    checkUsage(key, usages);\n}\n","function message(msg, actual, ...types) {\n    types = types.filter(Boolean);\n    if (types.length > 2) {\n        const last = types.pop();\n        msg += `one of type ${types.join(', ')}, or ${last}.`;\n    }\n    else if (types.length === 2) {\n        msg += `one of type ${types[0]} or ${types[1]}.`;\n    }\n    else {\n        msg += `of type ${types[0]}.`;\n    }\n    if (actual == null) {\n        msg += ` Received ${actual}`;\n    }\n    else if (typeof actual === 'function' && actual.name) {\n        msg += ` Received function ${actual.name}`;\n    }\n    else if (typeof actual === 'object' && actual != null) {\n        if (actual.constructor?.name) {\n            msg += ` Received an instance of ${actual.constructor.name}`;\n        }\n    }\n    return msg;\n}\nexport default (actual, ...types) => {\n    return message('Key must be ', actual, ...types);\n};\nexport function withAlg(alg, actual, ...types) {\n    return message(`Key for the ${alg} algorithm must be `, actual, ...types);\n}\n","import { isCryptoKey } from './webcrypto.js';\nexport default (key) => {\n    if (isCryptoKey(key)) {\n        return true;\n    }\n    return key?.[Symbol.toStringTag] === 'KeyObject';\n};\nexport const types = ['CryptoKey'];\n","function isObjectLike(value) {\n    return typeof value === 'object' && value !== null;\n}\nexport default function isObject(input) {\n    if (!isObjectLike(input) || Object.prototype.toString.call(input) !== '[object Object]') {\n        return false;\n    }\n    if (Object.getPrototypeOf(input) === null) {\n        return true;\n    }\n    let proto = input;\n    while (Object.getPrototypeOf(proto) !== null) {\n        proto = Object.getPrototypeOf(proto);\n    }\n    return Object.getPrototypeOf(input) === proto;\n}\n","import isObject from './is_object.js';\nexport function isJWK(key) {\n    return isObject(key) && typeof key.kty === 'string';\n}\nexport function isPrivateJWK(key) {\n    return key.kty !== 'oct' && typeof key.d === 'string';\n}\nexport function isPublicJWK(key) {\n    return key.kty !== 'oct' && typeof key.d === 'undefined';\n}\nexport function isSecretJWK(key) {\n    return isJWK(key) && key.kty === 'oct' && typeof key.k === 'string';\n}\n","import crypto from './webcrypto.js';\nimport { JOSENotSupported } from '../util/errors.js';\nfunction subtleMapping(jwk) {\n    let algorithm;\n    let keyUsages;\n    switch (jwk.kty) {\n        case 'RSA': {\n            switch (jwk.alg) {\n                case 'PS256':\n                case 'PS384':\n                case 'PS512':\n                    algorithm = { name: 'RSA-PSS', hash: `SHA-${jwk.alg.slice(-3)}` };\n                    keyUsages = jwk.d ? ['sign'] : ['verify'];\n                    break;\n                case 'RS256':\n                case 'RS384':\n                case 'RS512':\n                    algorithm = { name: 'RSASSA-PKCS1-v1_5', hash: `SHA-${jwk.alg.slice(-3)}` };\n                    keyUsages = jwk.d ? ['sign'] : ['verify'];\n                    break;\n                case 'RSA-OAEP':\n                case 'RSA-OAEP-256':\n                case 'RSA-OAEP-384':\n                case 'RSA-OAEP-512':\n                    algorithm = {\n                        name: 'RSA-OAEP',\n                        hash: `SHA-${parseInt(jwk.alg.slice(-3), 10) || 1}`,\n                    };\n                    keyUsages = jwk.d ? ['decrypt', 'unwrapKey'] : ['encrypt', 'wrapKey'];\n                    break;\n                default:\n                    throw new JOSENotSupported('Invalid or unsupported JWK \"alg\" (Algorithm) Parameter value');\n            }\n            break;\n        }\n        case 'EC': {\n            switch (jwk.alg) {\n                case 'ES256':\n                    algorithm = { name: 'ECDSA', namedCurve: 'P-256' };\n                    keyUsages = jwk.d ? ['sign'] : ['verify'];\n                    break;\n                case 'ES384':\n                    algorithm = { name: 'ECDSA', namedCurve: 'P-384' };\n                    keyUsages = jwk.d ? ['sign'] : ['verify'];\n                    break;\n                case 'ES512':\n                    algorithm = { name: 'ECDSA', namedCurve: 'P-521' };\n                    keyUsages = jwk.d ? ['sign'] : ['verify'];\n                    break;\n                case 'ECDH-ES':\n                case 'ECDH-ES+A128KW':\n                case 'ECDH-ES+A192KW':\n                case 'ECDH-ES+A256KW':\n                    algorithm = { name: 'ECDH', namedCurve: jwk.crv };\n                    keyUsages = jwk.d ? ['deriveBits'] : [];\n                    break;\n                default:\n                    throw new JOSENotSupported('Invalid or unsupported JWK \"alg\" (Algorithm) Parameter value');\n            }\n            break;\n        }\n        case 'OKP': {\n            switch (jwk.alg) {\n                case 'EdDSA':\n                    algorithm = { name: jwk.crv };\n                    keyUsages = jwk.d ? ['sign'] : ['verify'];\n                    break;\n                case 'ECDH-ES':\n                case 'ECDH-ES+A128KW':\n                case 'ECDH-ES+A192KW':\n                case 'ECDH-ES+A256KW':\n                    algorithm = { name: jwk.crv };\n                    keyUsages = jwk.d ? ['deriveBits'] : [];\n                    break;\n                default:\n                    throw new JOSENotSupported('Invalid or unsupported JWK \"alg\" (Algorithm) Parameter value');\n            }\n            break;\n        }\n        default:\n            throw new JOSENotSupported('Invalid or unsupported JWK \"kty\" (Key Type) Parameter value');\n    }\n    return { algorithm, keyUsages };\n}\nconst parse = async (jwk) => {\n    if (!jwk.alg) {\n        throw new TypeError('\"alg\" argument is required when \"jwk.alg\" is not present');\n    }\n    const { algorithm, keyUsages } = subtleMapping(jwk);\n    const rest = [\n        algorithm,\n        jwk.ext ?? false,\n        jwk.key_ops ?? keyUsages,\n    ];\n    const keyData = { ...jwk };\n    delete keyData.alg;\n    delete keyData.use;\n    return crypto.subtle.importKey('jwk', keyData, ...rest);\n};\nexport default parse;\n","import { isJWK } from '../lib/is_jwk.js';\nimport { decode } from './base64url.js';\nimport importJWK from './jwk_to_key.js';\nconst exportKeyValue = (k) => decode(k);\nlet privCache;\nlet pubCache;\nconst isKeyObject = (key) => {\n    return key?.[Symbol.toStringTag] === 'KeyObject';\n};\nconst importAndCache = async (cache, key, jwk, alg, freeze = false) => {\n    let cached = cache.get(key);\n    if (cached?.[alg]) {\n        return cached[alg];\n    }\n    const cryptoKey = await importJWK({ ...jwk, alg });\n    if (freeze)\n        Object.freeze(key);\n    if (!cached) {\n        cache.set(key, { [alg]: cryptoKey });\n    }\n    else {\n        cached[alg] = cryptoKey;\n    }\n    return cryptoKey;\n};\nconst normalizePublicKey = (key, alg) => {\n    if (isKeyObject(key)) {\n        let jwk = key.export({ format: 'jwk' });\n        delete jwk.d;\n        delete jwk.dp;\n        delete jwk.dq;\n        delete jwk.p;\n        delete jwk.q;\n        delete jwk.qi;\n        if (jwk.k) {\n            return exportKeyValue(jwk.k);\n        }\n        pubCache || (pubCache = new WeakMap());\n        return importAndCache(pubCache, key, jwk, alg);\n    }\n    if (isJWK(key)) {\n        if (key.k)\n            return decode(key.k);\n        pubCache || (pubCache = new WeakMap());\n        const cryptoKey = importAndCache(pubCache, key, key, alg, true);\n        return cryptoKey;\n    }\n    return key;\n};\nconst normalizePrivateKey = (key, alg) => {\n    if (isKeyObject(key)) {\n        let jwk = key.export({ format: 'jwk' });\n        if (jwk.k) {\n            return exportKeyValue(jwk.k);\n        }\n        privCache || (privCache = new WeakMap());\n        return importAndCache(privCache, key, jwk, alg);\n    }\n    if (isJWK(key)) {\n        if (key.k)\n            return decode(key.k);\n        privCache || (privCache = new WeakMap());\n        const cryptoKey = importAndCache(privCache, key, key, alg, true);\n        return cryptoKey;\n    }\n    return key;\n};\nexport default { normalizePublicKey, normalizePrivateKey };\n","import subtleAlgorithm from './subtle_dsa.js';\nimport crypto from './webcrypto.js';\nimport checkKeyLength from './check_key_length.js';\nimport getSignKey from './get_sign_verify_key.js';\nconst sign = async (alg, key, data) => {\n    const cryptoKey = await getSignKey(alg, key, 'sign');\n    checkKeyLength(alg, cryptoKey);\n    const signature = await crypto.subtle.sign(subtleAlgorithm(alg, cryptoKey.algorithm), cryptoKey, data);\n    return new Uint8Array(signature);\n};\nexport default sign;\n","import crypto, { isCryptoKey } from './webcrypto.js';\nimport { checkSigCryptoKey } from '../lib/crypto_key.js';\nimport invalidKeyInput from '../lib/invalid_key_input.js';\nimport { types } from './is_key_like.js';\nimport normalize from './normalize_key.js';\nexport default async function getCryptoKey(alg, key, usage) {\n    if (usage === 'sign') {\n        key = await normalize.normalizePrivateKey(key, alg);\n    }\n    if (usage === 'verify') {\n        key = await normalize.normalizePublicKey(key, alg);\n    }\n    if (isCryptoKey(key)) {\n        checkSigCryptoKey(key, alg, usage);\n        return key;\n    }\n    if (key instanceof Uint8Array) {\n        if (!alg.startsWith('HS')) {\n            throw new TypeError(invalidKeyInput(key, ...types));\n        }\n        return crypto.subtle.importKey('raw', key, { hash: `SHA-${alg.slice(-3)}`, name: 'HMAC' }, false, [usage]);\n    }\n    throw new TypeError(invalidKeyInput(key, ...types, 'Uint8Array', 'JSON Web Key'));\n}\n","export default (alg, key) => {\n    if (alg.startsWith('RS') || alg.startsWith('PS')) {\n        const { modulusLength } = key.algorithm;\n        if (typeof modulusLength !== 'number' || modulusLength < 2048) {\n            throw new TypeError(`${alg} requires key modulusLength to be 2048 bits or larger`);\n        }\n    }\n};\n","import { JOSENotSupported } from '../util/errors.js';\nexport default function subtleDsa(alg, algorithm) {\n    const hash = `SHA-${alg.slice(-3)}`;\n    switch (alg) {\n        case 'HS256':\n        case 'HS384':\n        case 'HS512':\n            return { hash, name: 'HMAC' };\n        case 'PS256':\n        case 'PS384':\n        case 'PS512':\n            return { hash, name: 'RSA-PSS', saltLength: alg.slice(-3) >> 3 };\n        case 'RS256':\n        case 'RS384':\n        case 'RS512':\n            return { hash, name: 'RSASSA-PKCS1-v1_5' };\n        case 'ES256':\n        case 'ES384':\n        case 'ES512':\n            return { hash, name: 'ECDSA', namedCurve: algorithm.namedCurve };\n        case 'EdDSA':\n            return { name: algorithm.name };\n        default:\n            throw new JOSENotSupported(`alg ${alg} is not supported either by JOSE or your javascript runtime`);\n    }\n}\n","const isDisjoint = (...headers) => {\n    const sources = headers.filter(Boolean);\n    if (sources.length === 0 || sources.length === 1) {\n        return true;\n    }\n    let acc;\n    for (const header of sources) {\n        const parameters = Object.keys(header);\n        if (!acc || acc.size === 0) {\n            acc = new Set(parameters);\n            continue;\n        }\n        for (const parameter of parameters) {\n            if (acc.has(parameter)) {\n                return false;\n            }\n            acc.add(parameter);\n        }\n    }\n    return true;\n};\nexport default isDisjoint;\n","import { withAlg as invalidKeyInput } from './invalid_key_input.js';\nimport isKeyLike, { types } from '../runtime/is_key_like.js';\nimport * as jwk from './is_jwk.js';\nconst tag = (key) => key?.[Symbol.toStringTag];\nconst jwkMatchesOp = (alg, key, usage) => {\n    if (key.use !== undefined && key.use !== 'sig') {\n        throw new TypeError('Invalid key for this operation, when present its use must be sig');\n    }\n    if (key.key_ops !== undefined && key.key_ops.includes?.(usage) !== true) {\n        throw new TypeError(`Invalid key for this operation, when present its key_ops must include ${usage}`);\n    }\n    if (key.alg !== undefined && key.alg !== alg) {\n        throw new TypeError(`Invalid key for this operation, when present its alg must be ${alg}`);\n    }\n    return true;\n};\nconst symmetricTypeCheck = (alg, key, usage, allowJwk) => {\n    if (key instanceof Uint8Array)\n        return;\n    if (allowJwk && jwk.isJWK(key)) {\n        if (jwk.isSecretJWK(key) && jwkMatchesOp(alg, key, usage))\n            return;\n        throw new TypeError(`JSON Web Key for symmetric algorithms must have JWK \"kty\" (Key Type) equal to \"oct\" and the JWK \"k\" (Key Value) present`);\n    }\n    if (!isKeyLike(key)) {\n        throw new TypeError(invalidKeyInput(alg, key, ...types, 'Uint8Array', allowJwk ? 'JSON Web Key' : null));\n    }\n    if (key.type !== 'secret') {\n        throw new TypeError(`${tag(key)} instances for symmetric algorithms must be of type \"secret\"`);\n    }\n};\nconst asymmetricTypeCheck = (alg, key, usage, allowJwk) => {\n    if (allowJwk && jwk.isJWK(key)) {\n        switch (usage) {\n            case 'sign':\n                if (jwk.isPrivateJWK(key) && jwkMatchesOp(alg, key, usage))\n                    return;\n                throw new TypeError(`JSON Web Key for this operation be a private JWK`);\n            case 'verify':\n                if (jwk.isPublicJWK(key) && jwkMatchesOp(alg, key, usage))\n                    return;\n                throw new TypeError(`JSON Web Key for this operation be a public JWK`);\n        }\n    }\n    if (!isKeyLike(key)) {\n        throw new TypeError(invalidKeyInput(alg, key, ...types, allowJwk ? 'JSON Web Key' : null));\n    }\n    if (key.type === 'secret') {\n        throw new TypeError(`${tag(key)} instances for asymmetric algorithms must not be of type \"secret\"`);\n    }\n    if (usage === 'sign' && key.type === 'public') {\n        throw new TypeError(`${tag(key)} instances for asymmetric algorithm signing must be of type \"private\"`);\n    }\n    if (usage === 'decrypt' && key.type === 'public') {\n        throw new TypeError(`${tag(key)} instances for asymmetric algorithm decryption must be of type \"private\"`);\n    }\n    if (key.algorithm && usage === 'verify' && key.type === 'private') {\n        throw new TypeError(`${tag(key)} instances for asymmetric algorithm verifying must be of type \"public\"`);\n    }\n    if (key.algorithm && usage === 'encrypt' && key.type === 'private') {\n        throw new TypeError(`${tag(key)} instances for asymmetric algorithm encryption must be of type \"public\"`);\n    }\n};\nfunction checkKeyType(allowJwk, alg, key, usage) {\n    const symmetric = alg.startsWith('HS') ||\n        alg === 'dir' ||\n        alg.startsWith('PBES2') ||\n        /^A\\d{3}(?:GCM)?KW$/.test(alg);\n    if (symmetric) {\n        symmetricTypeCheck(alg, key, usage, allowJwk);\n    }\n    else {\n        asymmetricTypeCheck(alg, key, usage, allowJwk);\n    }\n}\nexport default checkKeyType.bind(undefined, false);\nexport const checkKeyTypeWithJwk = checkKeyType.bind(undefined, true);\n","import { JOSENotSupported } from '../util/errors.js';\nfunction validateCrit(Err, recognizedDefault, recognizedOption, protectedHeader, joseHeader) {\n    if (joseHeader.crit !== undefined && protectedHeader?.crit === undefined) {\n        throw new Err('\"crit\" (Critical) Header Parameter MUST be integrity protected');\n    }\n    if (!protectedHeader || protectedHeader.crit === undefined) {\n        return new Set();\n    }\n    if (!Array.isArray(protectedHeader.crit) ||\n        protectedHeader.crit.length === 0 ||\n        protectedHeader.crit.some((input) => typeof input !== 'string' || input.length === 0)) {\n        throw new Err('\"crit\" (Critical) Header Parameter MUST be an array of non-empty strings when present');\n    }\n    let recognized;\n    if (recognizedOption !== undefined) {\n        recognized = new Map([...Object.entries(recognizedOption), ...recognizedDefault.entries()]);\n    }\n    else {\n        recognized = recognizedDefault;\n    }\n    for (const parameter of protectedHeader.crit) {\n        if (!recognized.has(parameter)) {\n            throw new JOSENotSupported(`Extension Header Parameter \"${parameter}\" is not recognized`);\n        }\n        if (joseHeader[parameter] === undefined) {\n            throw new Err(`Extension Header Parameter \"${parameter}\" is missing`);\n        }\n        if (recognized.get(parameter) && protectedHeader[parameter] === undefined) {\n            throw new Err(`Extension Header Parameter \"${parameter}\" MUST be integrity protected`);\n        }\n    }\n    return new Set(protectedHeader.crit);\n}\nexport default validateCrit;\n","import { encode as base64url } from '../../runtime/base64url.js';\nimport sign from '../../runtime/sign.js';\nimport isDisjoint from '../../lib/is_disjoint.js';\nimport { JWSInvalid } from '../../util/errors.js';\nimport { encoder, decoder, concat } from '../../lib/buffer_utils.js';\nimport { checkKeyTypeWithJwk } from '../../lib/check_key_type.js';\nimport validateCrit from '../../lib/validate_crit.js';\nexport class FlattenedSign {\n    constructor(payload) {\n        if (!(payload instanceof Uint8Array)) {\n            throw new TypeError('payload must be an instance of Uint8Array');\n        }\n        this._payload = payload;\n    }\n    setProtectedHeader(protectedHeader) {\n        if (this._protectedHeader) {\n            throw new TypeError('setProtectedHeader can only be called once');\n        }\n        this._protectedHeader = protectedHeader;\n        return this;\n    }\n    setUnprotectedHeader(unprotectedHeader) {\n        if (this._unprotectedHeader) {\n            throw new TypeError('setUnprotectedHeader can only be called once');\n        }\n        this._unprotectedHeader = unprotectedHeader;\n        return this;\n    }\n    async sign(key, options) {\n        if (!this._protectedHeader && !this._unprotectedHeader) {\n            throw new JWSInvalid('either setProtectedHeader or setUnprotectedHeader must be called before #sign()');\n        }\n        if (!isDisjoint(this._protectedHeader, this._unprotectedHeader)) {\n            throw new JWSInvalid('JWS Protected and JWS Unprotected Header Parameter names must be disjoint');\n        }\n        const joseHeader = {\n            ...this._protectedHeader,\n            ...this._unprotectedHeader,\n        };\n        const extensions = validateCrit(JWSInvalid, new Map([['b64', true]]), options?.crit, this._protectedHeader, joseHeader);\n        let b64 = true;\n        if (extensions.has('b64')) {\n            b64 = this._protectedHeader.b64;\n            if (typeof b64 !== 'boolean') {\n                throw new JWSInvalid('The \"b64\" (base64url-encode payload) Header Parameter must be a boolean');\n            }\n        }\n        const { alg } = joseHeader;\n        if (typeof alg !== 'string' || !alg) {\n            throw new JWSInvalid('JWS \"alg\" (Algorithm) Header Parameter missing or invalid');\n        }\n        checkKeyTypeWithJwk(alg, key, 'sign');\n        let payload = this._payload;\n        if (b64) {\n            payload = encoder.encode(base64url(payload));\n        }\n        let protectedHeader;\n        if (this._protectedHeader) {\n            protectedHeader = encoder.encode(base64url(JSON.stringify(this._protectedHeader)));\n        }\n        else {\n            protectedHeader = encoder.encode('');\n        }\n        const data = concat(protectedHeader, encoder.encode('.'), payload);\n        const signature = await sign(alg, key, data);\n        const jws = {\n            signature: base64url(signature),\n            payload: '',\n        };\n        if (b64) {\n            jws.payload = decoder.decode(payload);\n        }\n        if (this._unprotectedHeader) {\n            jws.header = this._unprotectedHeader;\n        }\n        if (this._protectedHeader) {\n            jws.protected = decoder.decode(protectedHeader);\n        }\n        return jws;\n    }\n}\n","import { FlattenedSign } from '../flattened/sign.js';\nexport class CompactSign {\n    constructor(payload) {\n        this._flattened = new FlattenedSign(payload);\n    }\n    setProtectedHeader(protectedHeader) {\n        this._flattened.setProtectedHeader(protectedHeader);\n        return this;\n    }\n    async sign(key, options) {\n        const jws = await this._flattened.sign(key, options);\n        if (jws.payload === undefined) {\n            throw new TypeError('use the flattened module for creating JWS with b64: false');\n        }\n        return `${jws.protected}.${jws.payload}.${jws.signature}`;\n    }\n}\n","export default (date) => Math.floor(date.getTime() / 1000);\n","const minute = 60;\nconst hour = minute * 60;\nconst day = hour * 24;\nconst week = day * 7;\nconst year = day * 365.25;\nconst REGEX = /^(\\+|\\-)? ?(\\d+|\\d+\\.\\d+) ?(seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)(?: (ago|from now))?$/i;\nexport default (str) => {\n    const matched = REGEX.exec(str);\n    if (!matched || (matched[4] && matched[1])) {\n        throw new TypeError('Invalid time period format');\n    }\n    const value = parseFloat(matched[2]);\n    const unit = matched[3].toLowerCase();\n    let numericDate;\n    switch (unit) {\n        case 'sec':\n        case 'secs':\n        case 'second':\n        case 'seconds':\n        case 's':\n            numericDate = Math.round(value);\n            break;\n        case 'minute':\n        case 'minutes':\n        case 'min':\n        case 'mins':\n        case 'm':\n            numericDate = Math.round(value * minute);\n            break;\n        case 'hour':\n        case 'hours':\n        case 'hr':\n        case 'hrs':\n        case 'h':\n            numericDate = Math.round(value * hour);\n            break;\n        case 'day':\n        case 'days':\n        case 'd':\n            numericDate = Math.round(value * day);\n            break;\n        case 'week':\n        case 'weeks':\n        case 'w':\n            numericDate = Math.round(value * week);\n            break;\n        default:\n            numericDate = Math.round(value * year);\n            break;\n    }\n    if (matched[1] === '-' || matched[4] === 'ago') {\n        return -numericDate;\n    }\n    return numericDate;\n};\n","import epoch from '../lib/epoch.js';\nimport isObject from '../lib/is_object.js';\nimport secs from '../lib/secs.js';\nfunction validateInput(label, input) {\n    if (!Number.isFinite(input)) {\n        throw new TypeError(`Invalid ${label} input`);\n    }\n    return input;\n}\nexport class ProduceJWT {\n    constructor(payload = {}) {\n        if (!isObject(payload)) {\n            throw new TypeError('JWT Claims Set MUST be an object');\n        }\n        this._payload = payload;\n    }\n    setIssuer(issuer) {\n        this._payload = { ...this._payload, iss: issuer };\n        return this;\n    }\n    setSubject(subject) {\n        this._payload = { ...this._payload, sub: subject };\n        return this;\n    }\n    setAudience(audience) {\n        this._payload = { ...this._payload, aud: audience };\n        return this;\n    }\n    setJti(jwtId) {\n        this._payload = { ...this._payload, jti: jwtId };\n        return this;\n    }\n    setNotBefore(input) {\n        if (typeof input === 'number') {\n            this._payload = { ...this._payload, nbf: validateInput('setNotBefore', input) };\n        }\n        else if (input instanceof Date) {\n            this._payload = { ...this._payload, nbf: validateInput('setNotBefore', epoch(input)) };\n        }\n        else {\n            this._payload = { ...this._payload, nbf: epoch(new Date()) + secs(input) };\n        }\n        return this;\n    }\n    setExpirationTime(input) {\n        if (typeof input === 'number') {\n            this._payload = { ...this._payload, exp: validateInput('setExpirationTime', input) };\n        }\n        else if (input instanceof Date) {\n            this._payload = { ...this._payload, exp: validateInput('setExpirationTime', epoch(input)) };\n        }\n        else {\n            this._payload = { ...this._payload, exp: epoch(new Date()) + secs(input) };\n        }\n        return this;\n    }\n    setIssuedAt(input) {\n        if (typeof input === 'undefined') {\n            this._payload = { ...this._payload, iat: epoch(new Date()) };\n        }\n        else if (input instanceof Date) {\n            this._payload = { ...this._payload, iat: validateInput('setIssuedAt', epoch(input)) };\n        }\n        else if (typeof input === 'string') {\n            this._payload = {\n                ...this._payload,\n                iat: validateInput('setIssuedAt', epoch(new Date()) + secs(input)),\n            };\n        }\n        else {\n            this._payload = { ...this._payload, iat: validateInput('setIssuedAt', input) };\n        }\n        return this;\n    }\n}\n","import { CompactSign } from '../jws/compact/sign.js';\nimport { JWTInvalid } from '../util/errors.js';\nimport { encoder } from '../lib/buffer_utils.js';\nimport { ProduceJWT } from './produce.js';\nexport class SignJWT extends ProduceJWT {\n    setProtectedHeader(protectedHeader) {\n        this._protectedHeader = protectedHeader;\n        return this;\n    }\n    async sign(key, options) {\n        const sig = new CompactSign(encoder.encode(JSON.stringify(this._payload)));\n        sig.setProtectedHeader(this._protectedHeader);\n        if (Array.isArray(this._protectedHeader?.crit) &&\n            this._protectedHeader.crit.includes('b64') &&\n            this._protectedHeader.b64 === false) {\n            throw new JWTInvalid('JWTs MUST NOT use unencoded payload');\n        }\n        return sig.sign(key, options);\n    }\n}\n","/**\n * @import {\n *   Break,\n *   Blockquote,\n *   Code,\n *   Definition,\n *   Emphasis,\n *   Heading,\n *   Html,\n *   Image,\n *   InlineCode,\n *   Link,\n *   ListItem,\n *   List,\n *   Nodes,\n *   Paragraph,\n *   PhrasingContent,\n *   ReferenceType,\n *   Root,\n *   Strong,\n *   Text,\n *   ThematicBreak\n * } from 'mdast'\n * @import {\n *   Encoding,\n *   Event,\n *   Token,\n *   Value\n * } from 'micromark-util-types'\n * @import {Point} from 'unist'\n * @import {\n *   CompileContext,\n *   CompileData,\n *   Config,\n *   Extension,\n *   Handle,\n *   OnEnterError,\n *   Options\n * } from './types.js'\n */\n\nimport { toString } from 'mdast-util-to-string';\nimport { parse, postprocess, preprocess } from 'micromark';\nimport { decodeNumericCharacterReference } from 'micromark-util-decode-numeric-character-reference';\nimport { decodeString } from 'micromark-util-decode-string';\nimport { normalizeIdentifier } from 'micromark-util-normalize-identifier';\nimport { decodeNamedCharacterReference } from 'decode-named-character-reference';\nimport { stringifyPosition } from 'unist-util-stringify-position';\nconst own = {}.hasOwnProperty;\n\n/**\n * Turn markdown into a syntax tree.\n *\n * @overload\n * @param {Value} value\n * @param {Encoding | null | undefined} [encoding]\n * @param {Options | null | undefined} [options]\n * @returns {Root}\n *\n * @overload\n * @param {Value} value\n * @param {Options | null | undefined} [options]\n * @returns {Root}\n *\n * @param {Value} value\n *   Markdown to parse.\n * @param {Encoding | Options | null | undefined} [encoding]\n *   Character encoding for when `value` is `Buffer`.\n * @param {Options | null | undefined} [options]\n *   Configuration.\n * @returns {Root}\n *   mdast tree.\n */\nexport function fromMarkdown(value, encoding, options) {\n  if (typeof encoding !== 'string') {\n    options = encoding;\n    encoding = undefined;\n  }\n  return compiler(options)(postprocess(parse(options).document().write(preprocess()(value, encoding, true))));\n}\n\n/**\n * Note this compiler only understand complete buffering, not streaming.\n *\n * @param {Options | null | undefined} [options]\n */\nfunction compiler(options) {\n  /** @type {Config} */\n  const config = {\n    transforms: [],\n    canContainEols: ['emphasis', 'fragment', 'heading', 'paragraph', 'strong'],\n    enter: {\n      autolink: opener(link),\n      autolinkProtocol: onenterdata,\n      autolinkEmail: onenterdata,\n      atxHeading: opener(heading),\n      blockQuote: opener(blockQuote),\n      characterEscape: onenterdata,\n      characterReference: onenterdata,\n      codeFenced: opener(codeFlow),\n      codeFencedFenceInfo: buffer,\n      codeFencedFenceMeta: buffer,\n      codeIndented: opener(codeFlow, buffer),\n      codeText: opener(codeText, buffer),\n      codeTextData: onenterdata,\n      data: onenterdata,\n      codeFlowValue: onenterdata,\n      definition: opener(definition),\n      definitionDestinationString: buffer,\n      definitionLabelString: buffer,\n      definitionTitleString: buffer,\n      emphasis: opener(emphasis),\n      hardBreakEscape: opener(hardBreak),\n      hardBreakTrailing: opener(hardBreak),\n      htmlFlow: opener(html, buffer),\n      htmlFlowData: onenterdata,\n      htmlText: opener(html, buffer),\n      htmlTextData: onenterdata,\n      image: opener(image),\n      label: buffer,\n      link: opener(link),\n      listItem: opener(listItem),\n      listItemValue: onenterlistitemvalue,\n      listOrdered: opener(list, onenterlistordered),\n      listUnordered: opener(list),\n      paragraph: opener(paragraph),\n      reference: onenterreference,\n      referenceString: buffer,\n      resourceDestinationString: buffer,\n      resourceTitleString: buffer,\n      setextHeading: opener(heading),\n      strong: opener(strong),\n      thematicBreak: opener(thematicBreak)\n    },\n    exit: {\n      atxHeading: closer(),\n      atxHeadingSequence: onexitatxheadingsequence,\n      autolink: closer(),\n      autolinkEmail: onexitautolinkemail,\n      autolinkProtocol: onexitautolinkprotocol,\n      blockQuote: closer(),\n      characterEscapeValue: onexitdata,\n      characterReferenceMarkerHexadecimal: onexitcharacterreferencemarker,\n      characterReferenceMarkerNumeric: onexitcharacterreferencemarker,\n      characterReferenceValue: onexitcharacterreferencevalue,\n      characterReference: onexitcharacterreference,\n      codeFenced: closer(onexitcodefenced),\n      codeFencedFence: onexitcodefencedfence,\n      codeFencedFenceInfo: onexitcodefencedfenceinfo,\n      codeFencedFenceMeta: onexitcodefencedfencemeta,\n      codeFlowValue: onexitdata,\n      codeIndented: closer(onexitcodeindented),\n      codeText: closer(onexitcodetext),\n      codeTextData: onexitdata,\n      data: onexitdata,\n      definition: closer(),\n      definitionDestinationString: onexitdefinitiondestinationstring,\n      definitionLabelString: onexitdefinitionlabelstring,\n      definitionTitleString: onexitdefinitiontitlestring,\n      emphasis: closer(),\n      hardBreakEscape: closer(onexithardbreak),\n      hardBreakTrailing: closer(onexithardbreak),\n      htmlFlow: closer(onexithtmlflow),\n      htmlFlowData: onexitdata,\n      htmlText: closer(onexithtmltext),\n      htmlTextData: onexitdata,\n      image: closer(onexitimage),\n      label: onexitlabel,\n      labelText: onexitlabeltext,\n      lineEnding: onexitlineending,\n      link: closer(onexitlink),\n      listItem: closer(),\n      listOrdered: closer(),\n      listUnordered: closer(),\n      paragraph: closer(),\n      referenceString: onexitreferencestring,\n      resourceDestinationString: onexitresourcedestinationstring,\n      resourceTitleString: onexitresourcetitlestring,\n      resource: onexitresource,\n      setextHeading: closer(onexitsetextheading),\n      setextHeadingLineSequence: onexitsetextheadinglinesequence,\n      setextHeadingText: onexitsetextheadingtext,\n      strong: closer(),\n      thematicBreak: closer()\n    }\n  };\n  configure(config, (options || {}).mdastExtensions || []);\n\n  /** @type {CompileData} */\n  const data = {};\n  return compile;\n\n  /**\n   * Turn micromark events into an mdast tree.\n   *\n   * @param {Array<Event>} events\n   *   Events.\n   * @returns {Root}\n   *   mdast tree.\n   */\n  function compile(events) {\n    /** @type {Root} */\n    let tree = {\n      type: 'root',\n      children: []\n    };\n    /** @type {Omit<CompileContext, 'sliceSerialize'>} */\n    const context = {\n      stack: [tree],\n      tokenStack: [],\n      config,\n      enter,\n      exit,\n      buffer,\n      resume,\n      data\n    };\n    /** @type {Array<number>} */\n    const listStack = [];\n    let index = -1;\n    while (++index < events.length) {\n      // We preprocess lists to add `listItem` tokens, and to infer whether\n      // items the list itself are spread out.\n      if (events[index][1].type === \"listOrdered\" || events[index][1].type === \"listUnordered\") {\n        if (events[index][0] === 'enter') {\n          listStack.push(index);\n        } else {\n          const tail = listStack.pop();\n          index = prepareList(events, tail, index);\n        }\n      }\n    }\n    index = -1;\n    while (++index < events.length) {\n      const handler = config[events[index][0]];\n      if (own.call(handler, events[index][1].type)) {\n        handler[events[index][1].type].call(Object.assign({\n          sliceSerialize: events[index][2].sliceSerialize\n        }, context), events[index][1]);\n      }\n    }\n\n    // Handle tokens still being open.\n    if (context.tokenStack.length > 0) {\n      const tail = context.tokenStack[context.tokenStack.length - 1];\n      const handler = tail[1] || defaultOnError;\n      handler.call(context, undefined, tail[0]);\n    }\n\n    // Figure out `root` position.\n    tree.position = {\n      start: point(events.length > 0 ? events[0][1].start : {\n        line: 1,\n        column: 1,\n        offset: 0\n      }),\n      end: point(events.length > 0 ? events[events.length - 2][1].end : {\n        line: 1,\n        column: 1,\n        offset: 0\n      })\n    };\n\n    // Call transforms.\n    index = -1;\n    while (++index < config.transforms.length) {\n      tree = config.transforms[index](tree) || tree;\n    }\n    return tree;\n  }\n\n  /**\n   * @param {Array<Event>} events\n   * @param {number} start\n   * @param {number} length\n   * @returns {number}\n   */\n  function prepareList(events, start, length) {\n    let index = start - 1;\n    let containerBalance = -1;\n    let listSpread = false;\n    /** @type {Token | undefined} */\n    let listItem;\n    /** @type {number | undefined} */\n    let lineIndex;\n    /** @type {number | undefined} */\n    let firstBlankLineIndex;\n    /** @type {boolean | undefined} */\n    let atMarker;\n    while (++index <= length) {\n      const event = events[index];\n      switch (event[1].type) {\n        case \"listUnordered\":\n        case \"listOrdered\":\n        case \"blockQuote\":\n          {\n            if (event[0] === 'enter') {\n              containerBalance++;\n            } else {\n              containerBalance--;\n            }\n            atMarker = undefined;\n            break;\n          }\n        case \"lineEndingBlank\":\n          {\n            if (event[0] === 'enter') {\n              if (listItem && !atMarker && !containerBalance && !firstBlankLineIndex) {\n                firstBlankLineIndex = index;\n              }\n              atMarker = undefined;\n            }\n            break;\n          }\n        case \"linePrefix\":\n        case \"listItemValue\":\n        case \"listItemMarker\":\n        case \"listItemPrefix\":\n        case \"listItemPrefixWhitespace\":\n          {\n            // Empty.\n\n            break;\n          }\n        default:\n          {\n            atMarker = undefined;\n          }\n      }\n      if (!containerBalance && event[0] === 'enter' && event[1].type === \"listItemPrefix\" || containerBalance === -1 && event[0] === 'exit' && (event[1].type === \"listUnordered\" || event[1].type === \"listOrdered\")) {\n        if (listItem) {\n          let tailIndex = index;\n          lineIndex = undefined;\n          while (tailIndex--) {\n            const tailEvent = events[tailIndex];\n            if (tailEvent[1].type === \"lineEnding\" || tailEvent[1].type === \"lineEndingBlank\") {\n              if (tailEvent[0] === 'exit') continue;\n              if (lineIndex) {\n                events[lineIndex][1].type = \"lineEndingBlank\";\n                listSpread = true;\n              }\n              tailEvent[1].type = \"lineEnding\";\n              lineIndex = tailIndex;\n            } else if (tailEvent[1].type === \"linePrefix\" || tailEvent[1].type === \"blockQuotePrefix\" || tailEvent[1].type === \"blockQuotePrefixWhitespace\" || tailEvent[1].type === \"blockQuoteMarker\" || tailEvent[1].type === \"listItemIndent\") {\n              // Empty\n            } else {\n              break;\n            }\n          }\n          if (firstBlankLineIndex && (!lineIndex || firstBlankLineIndex < lineIndex)) {\n            listItem._spread = true;\n          }\n\n          // Fix position.\n          listItem.end = Object.assign({}, lineIndex ? events[lineIndex][1].start : event[1].end);\n          events.splice(lineIndex || index, 0, ['exit', listItem, event[2]]);\n          index++;\n          length++;\n        }\n\n        // Create a new list item.\n        if (event[1].type === \"listItemPrefix\") {\n          /** @type {Token} */\n          const item = {\n            type: 'listItem',\n            _spread: false,\n            start: Object.assign({}, event[1].start),\n            // @ts-expect-error: we’ll add `end` in a second.\n            end: undefined\n          };\n          listItem = item;\n          events.splice(index, 0, ['enter', item, event[2]]);\n          index++;\n          length++;\n          firstBlankLineIndex = undefined;\n          atMarker = true;\n        }\n      }\n    }\n    events[start][1]._spread = listSpread;\n    return length;\n  }\n\n  /**\n   * Create an opener handle.\n   *\n   * @param {(token: Token) => Nodes} create\n   *   Create a node.\n   * @param {Handle | undefined} [and]\n   *   Optional function to also run.\n   * @returns {Handle}\n   *   Handle.\n   */\n  function opener(create, and) {\n    return open;\n\n    /**\n     * @this {CompileContext}\n     * @param {Token} token\n     * @returns {undefined}\n     */\n    function open(token) {\n      enter.call(this, create(token), token);\n      if (and) and.call(this, token);\n    }\n  }\n\n  /**\n   * @type {CompileContext['buffer']}\n   */\n  function buffer() {\n    this.stack.push({\n      type: 'fragment',\n      children: []\n    });\n  }\n\n  /**\n   * @type {CompileContext['enter']}\n   */\n  function enter(node, token, errorHandler) {\n    const parent = this.stack[this.stack.length - 1];\n    /** @type {Array<Nodes>} */\n    const siblings = parent.children;\n    siblings.push(node);\n    this.stack.push(node);\n    this.tokenStack.push([token, errorHandler || undefined]);\n    node.position = {\n      start: point(token.start),\n      // @ts-expect-error: `end` will be patched later.\n      end: undefined\n    };\n  }\n\n  /**\n   * Create a closer handle.\n   *\n   * @param {Handle | undefined} [and]\n   *   Optional function to also run.\n   * @returns {Handle}\n   *   Handle.\n   */\n  function closer(and) {\n    return close;\n\n    /**\n     * @this {CompileContext}\n     * @param {Token} token\n     * @returns {undefined}\n     */\n    function close(token) {\n      if (and) and.call(this, token);\n      exit.call(this, token);\n    }\n  }\n\n  /**\n   * @type {CompileContext['exit']}\n   */\n  function exit(token, onExitError) {\n    const node = this.stack.pop();\n    const open = this.tokenStack.pop();\n    if (!open) {\n      throw new Error('Cannot close `' + token.type + '` (' + stringifyPosition({\n        start: token.start,\n        end: token.end\n      }) + '): it’s not open');\n    } else if (open[0].type !== token.type) {\n      if (onExitError) {\n        onExitError.call(this, token, open[0]);\n      } else {\n        const handler = open[1] || defaultOnError;\n        handler.call(this, token, open[0]);\n      }\n    }\n    node.position.end = point(token.end);\n  }\n\n  /**\n   * @type {CompileContext['resume']}\n   */\n  function resume() {\n    return toString(this.stack.pop());\n  }\n\n  //\n  // Handlers.\n  //\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onenterlistordered() {\n    this.data.expectingFirstListItemValue = true;\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onenterlistitemvalue(token) {\n    if (this.data.expectingFirstListItemValue) {\n      const ancestor = this.stack[this.stack.length - 2];\n      ancestor.start = Number.parseInt(this.sliceSerialize(token), 10);\n      this.data.expectingFirstListItemValue = undefined;\n    }\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitcodefencedfenceinfo() {\n    const data = this.resume();\n    const node = this.stack[this.stack.length - 1];\n    node.lang = data;\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitcodefencedfencemeta() {\n    const data = this.resume();\n    const node = this.stack[this.stack.length - 1];\n    node.meta = data;\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitcodefencedfence() {\n    // Exit if this is the closing fence.\n    if (this.data.flowCodeInside) return;\n    this.buffer();\n    this.data.flowCodeInside = true;\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitcodefenced() {\n    const data = this.resume();\n    const node = this.stack[this.stack.length - 1];\n    node.value = data.replace(/^(\\r?\\n|\\r)|(\\r?\\n|\\r)$/g, '');\n    this.data.flowCodeInside = undefined;\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitcodeindented() {\n    const data = this.resume();\n    const node = this.stack[this.stack.length - 1];\n    node.value = data.replace(/(\\r?\\n|\\r)$/g, '');\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitdefinitionlabelstring(token) {\n    const label = this.resume();\n    const node = this.stack[this.stack.length - 1];\n    node.label = label;\n    node.identifier = normalizeIdentifier(this.sliceSerialize(token)).toLowerCase();\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitdefinitiontitlestring() {\n    const data = this.resume();\n    const node = this.stack[this.stack.length - 1];\n    node.title = data;\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitdefinitiondestinationstring() {\n    const data = this.resume();\n    const node = this.stack[this.stack.length - 1];\n    node.url = data;\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitatxheadingsequence(token) {\n    const node = this.stack[this.stack.length - 1];\n    if (!node.depth) {\n      const depth = this.sliceSerialize(token).length;\n      node.depth = depth;\n    }\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitsetextheadingtext() {\n    this.data.setextHeadingSlurpLineEnding = true;\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitsetextheadinglinesequence(token) {\n    const node = this.stack[this.stack.length - 1];\n    node.depth = this.sliceSerialize(token).codePointAt(0) === 61 ? 1 : 2;\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitsetextheading() {\n    this.data.setextHeadingSlurpLineEnding = undefined;\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onenterdata(token) {\n    const node = this.stack[this.stack.length - 1];\n    /** @type {Array<Nodes>} */\n    const siblings = node.children;\n    let tail = siblings[siblings.length - 1];\n    if (!tail || tail.type !== 'text') {\n      // Add a new text node.\n      tail = text();\n      tail.position = {\n        start: point(token.start),\n        // @ts-expect-error: we’ll add `end` later.\n        end: undefined\n      };\n      siblings.push(tail);\n    }\n    this.stack.push(tail);\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onexitdata(token) {\n    const tail = this.stack.pop();\n    tail.value += this.sliceSerialize(token);\n    tail.position.end = point(token.end);\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onexitlineending(token) {\n    const context = this.stack[this.stack.length - 1];\n    // If we’re at a hard break, include the line ending in there.\n    if (this.data.atHardBreak) {\n      const tail = context.children[context.children.length - 1];\n      tail.position.end = point(token.end);\n      this.data.atHardBreak = undefined;\n      return;\n    }\n    if (!this.data.setextHeadingSlurpLineEnding && config.canContainEols.includes(context.type)) {\n      onenterdata.call(this, token);\n      onexitdata.call(this, token);\n    }\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onexithardbreak() {\n    this.data.atHardBreak = true;\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onexithtmlflow() {\n    const data = this.resume();\n    const node = this.stack[this.stack.length - 1];\n    node.value = data;\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onexithtmltext() {\n    const data = this.resume();\n    const node = this.stack[this.stack.length - 1];\n    node.value = data;\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onexitcodetext() {\n    const data = this.resume();\n    const node = this.stack[this.stack.length - 1];\n    node.value = data;\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onexitlink() {\n    const node = this.stack[this.stack.length - 1];\n    // Note: there are also `identifier` and `label` fields on this link node!\n    // These are used / cleaned here.\n\n    // To do: clean.\n    if (this.data.inReference) {\n      /** @type {ReferenceType} */\n      const referenceType = this.data.referenceType || 'shortcut';\n      node.type += 'Reference';\n      // @ts-expect-error: mutate.\n      node.referenceType = referenceType;\n      // @ts-expect-error: mutate.\n      delete node.url;\n      delete node.title;\n    } else {\n      // @ts-expect-error: mutate.\n      delete node.identifier;\n      // @ts-expect-error: mutate.\n      delete node.label;\n    }\n    this.data.referenceType = undefined;\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onexitimage() {\n    const node = this.stack[this.stack.length - 1];\n    // Note: there are also `identifier` and `label` fields on this link node!\n    // These are used / cleaned here.\n\n    // To do: clean.\n    if (this.data.inReference) {\n      /** @type {ReferenceType} */\n      const referenceType = this.data.referenceType || 'shortcut';\n      node.type += 'Reference';\n      // @ts-expect-error: mutate.\n      node.referenceType = referenceType;\n      // @ts-expect-error: mutate.\n      delete node.url;\n      delete node.title;\n    } else {\n      // @ts-expect-error: mutate.\n      delete node.identifier;\n      // @ts-expect-error: mutate.\n      delete node.label;\n    }\n    this.data.referenceType = undefined;\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onexitlabeltext(token) {\n    const string = this.sliceSerialize(token);\n    const ancestor = this.stack[this.stack.length - 2];\n    // @ts-expect-error: stash this on the node, as it might become a reference\n    // later.\n    ancestor.label = decodeString(string);\n    // @ts-expect-error: same as above.\n    ancestor.identifier = normalizeIdentifier(string).toLowerCase();\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onexitlabel() {\n    const fragment = this.stack[this.stack.length - 1];\n    const value = this.resume();\n    const node = this.stack[this.stack.length - 1];\n    // Assume a reference.\n    this.data.inReference = true;\n    if (node.type === 'link') {\n      /** @type {Array<PhrasingContent>} */\n      const children = fragment.children;\n      node.children = children;\n    } else {\n      node.alt = value;\n    }\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onexitresourcedestinationstring() {\n    const data = this.resume();\n    const node = this.stack[this.stack.length - 1];\n    node.url = data;\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onexitresourcetitlestring() {\n    const data = this.resume();\n    const node = this.stack[this.stack.length - 1];\n    node.title = data;\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onexitresource() {\n    this.data.inReference = undefined;\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onenterreference() {\n    this.data.referenceType = 'collapsed';\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onexitreferencestring(token) {\n    const label = this.resume();\n    const node = this.stack[this.stack.length - 1];\n    // @ts-expect-error: stash this on the node, as it might become a reference\n    // later.\n    node.label = label;\n    // @ts-expect-error: same as above.\n    node.identifier = normalizeIdentifier(this.sliceSerialize(token)).toLowerCase();\n    this.data.referenceType = 'full';\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onexitcharacterreferencemarker(token) {\n    this.data.characterReferenceType = token.type;\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitcharacterreferencevalue(token) {\n    const data = this.sliceSerialize(token);\n    const type = this.data.characterReferenceType;\n    /** @type {string} */\n    let value;\n    if (type) {\n      value = decodeNumericCharacterReference(data, type === \"characterReferenceMarkerNumeric\" ? 10 : 16);\n      this.data.characterReferenceType = undefined;\n    } else {\n      const result = decodeNamedCharacterReference(data);\n      value = result;\n    }\n    const tail = this.stack[this.stack.length - 1];\n    tail.value += value;\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitcharacterreference(token) {\n    const tail = this.stack.pop();\n    tail.position.end = point(token.end);\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitautolinkprotocol(token) {\n    onexitdata.call(this, token);\n    const node = this.stack[this.stack.length - 1];\n    node.url = this.sliceSerialize(token);\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitautolinkemail(token) {\n    onexitdata.call(this, token);\n    const node = this.stack[this.stack.length - 1];\n    node.url = 'mailto:' + this.sliceSerialize(token);\n  }\n\n  //\n  // Creaters.\n  //\n\n  /** @returns {Blockquote} */\n  function blockQuote() {\n    return {\n      type: 'blockquote',\n      children: []\n    };\n  }\n\n  /** @returns {Code} */\n  function codeFlow() {\n    return {\n      type: 'code',\n      lang: null,\n      meta: null,\n      value: ''\n    };\n  }\n\n  /** @returns {InlineCode} */\n  function codeText() {\n    return {\n      type: 'inlineCode',\n      value: ''\n    };\n  }\n\n  /** @returns {Definition} */\n  function definition() {\n    return {\n      type: 'definition',\n      identifier: '',\n      label: null,\n      title: null,\n      url: ''\n    };\n  }\n\n  /** @returns {Emphasis} */\n  function emphasis() {\n    return {\n      type: 'emphasis',\n      children: []\n    };\n  }\n\n  /** @returns {Heading} */\n  function heading() {\n    return {\n      type: 'heading',\n      // @ts-expect-error `depth` will be set later.\n      depth: 0,\n      children: []\n    };\n  }\n\n  /** @returns {Break} */\n  function hardBreak() {\n    return {\n      type: 'break'\n    };\n  }\n\n  /** @returns {Html} */\n  function html() {\n    return {\n      type: 'html',\n      value: ''\n    };\n  }\n\n  /** @returns {Image} */\n  function image() {\n    return {\n      type: 'image',\n      title: null,\n      url: '',\n      alt: null\n    };\n  }\n\n  /** @returns {Link} */\n  function link() {\n    return {\n      type: 'link',\n      title: null,\n      url: '',\n      children: []\n    };\n  }\n\n  /**\n   * @param {Token} token\n   * @returns {List}\n   */\n  function list(token) {\n    return {\n      type: 'list',\n      ordered: token.type === 'listOrdered',\n      start: null,\n      spread: token._spread,\n      children: []\n    };\n  }\n\n  /**\n   * @param {Token} token\n   * @returns {ListItem}\n   */\n  function listItem(token) {\n    return {\n      type: 'listItem',\n      spread: token._spread,\n      checked: null,\n      children: []\n    };\n  }\n\n  /** @returns {Paragraph} */\n  function paragraph() {\n    return {\n      type: 'paragraph',\n      children: []\n    };\n  }\n\n  /** @returns {Strong} */\n  function strong() {\n    return {\n      type: 'strong',\n      children: []\n    };\n  }\n\n  /** @returns {Text} */\n  function text() {\n    return {\n      type: 'text',\n      value: ''\n    };\n  }\n\n  /** @returns {ThematicBreak} */\n  function thematicBreak() {\n    return {\n      type: 'thematicBreak'\n    };\n  }\n}\n\n/**\n * Copy a point-like value.\n *\n * @param {Point} d\n *   Point-like value.\n * @returns {Point}\n *   unist point.\n */\nfunction point(d) {\n  return {\n    line: d.line,\n    column: d.column,\n    offset: d.offset\n  };\n}\n\n/**\n * @param {Config} combined\n * @param {Array<Array<Extension> | Extension>} extensions\n * @returns {undefined}\n */\nfunction configure(combined, extensions) {\n  let index = -1;\n  while (++index < extensions.length) {\n    const value = extensions[index];\n    if (Array.isArray(value)) {\n      configure(combined, value);\n    } else {\n      extension(combined, value);\n    }\n  }\n}\n\n/**\n * @param {Config} combined\n * @param {Extension} extension\n * @returns {undefined}\n */\nfunction extension(combined, extension) {\n  /** @type {keyof Extension} */\n  let key;\n  for (key in extension) {\n    if (own.call(extension, key)) {\n      switch (key) {\n        case 'canContainEols':\n          {\n            const right = extension[key];\n            if (right) {\n              combined[key].push(...right);\n            }\n            break;\n          }\n        case 'transforms':\n          {\n            const right = extension[key];\n            if (right) {\n              combined[key].push(...right);\n            }\n            break;\n          }\n        case 'enter':\n        case 'exit':\n          {\n            const right = extension[key];\n            if (right) {\n              Object.assign(combined[key], right);\n            }\n            break;\n          }\n        // No default\n      }\n    }\n  }\n}\n\n/** @type {OnEnterError} */\nfunction defaultOnError(left, right) {\n  if (left) {\n    throw new Error('Cannot close `' + left.type + '` (' + stringifyPosition({\n      start: left.start,\n      end: left.end\n    }) + '): a different token (`' + right.type + '`, ' + stringifyPosition({\n      start: right.start,\n      end: right.end\n    }) + ') is open');\n  } else {\n    throw new Error('Cannot close document, a token (`' + right.type + '`, ' + stringifyPosition({\n      start: right.start,\n      end: right.end\n    }) + ') is still open');\n  }\n}","/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('hast').ElementContent} ElementContent\n *\n * @typedef {import('./state.js').State} State\n */\n\n/**\n * @callback FootnoteBackContentTemplate\n *   Generate content for the backreference dynamically.\n *\n *   For the following markdown:\n *\n *   ```markdown\n *   Alpha[^micromark], bravo[^micromark], and charlie[^remark].\n *\n *   [^remark]: things about remark\n *   [^micromark]: things about micromark\n *   ```\n *\n *   This function will be called with:\n *\n *   *  `0` and `0` for the backreference from `things about micromark` to\n *      `alpha`, as it is the first used definition, and the first call to it\n *   *  `0` and `1` for the backreference from `things about micromark` to\n *      `bravo`, as it is the first used definition, and the second call to it\n *   *  `1` and `0` for the backreference from `things about remark` to\n *      `charlie`, as it is the second used definition\n * @param {number} referenceIndex\n *   Index of the definition in the order that they are first referenced,\n *   0-indexed.\n * @param {number} rereferenceIndex\n *   Index of calls to the same definition, 0-indexed.\n * @returns {Array<ElementContent> | ElementContent | string}\n *   Content for the backreference when linking back from definitions to their\n *   reference.\n *\n * @callback FootnoteBackLabelTemplate\n *   Generate a back label dynamically.\n *\n *   For the following markdown:\n *\n *   ```markdown\n *   Alpha[^micromark], bravo[^micromark], and charlie[^remark].\n *\n *   [^remark]: things about remark\n *   [^micromark]: things about micromark\n *   ```\n *\n *   This function will be called with:\n *\n *   *  `0` and `0` for the backreference from `things about micromark` to\n *      `alpha`, as it is the first used definition, and the first call to it\n *   *  `0` and `1` for the backreference from `things about micromark` to\n *      `bravo`, as it is the first used definition, and the second call to it\n *   *  `1` and `0` for the backreference from `things about remark` to\n *      `charlie`, as it is the second used definition\n * @param {number} referenceIndex\n *   Index of the definition in the order that they are first referenced,\n *   0-indexed.\n * @param {number} rereferenceIndex\n *   Index of calls to the same definition, 0-indexed.\n * @returns {string}\n *   Back label to use when linking back from definitions to their reference.\n */\n\nimport structuredClone from '@ungap/structured-clone'\nimport {normalizeUri} from 'micromark-util-sanitize-uri'\n\n/**\n * Generate the default content that GitHub uses on backreferences.\n *\n * @param {number} _\n *   Index of the definition in the order that they are first referenced,\n *   0-indexed.\n * @param {number} rereferenceIndex\n *   Index of calls to the same definition, 0-indexed.\n * @returns {Array<ElementContent>}\n *   Content.\n */\nexport function defaultFootnoteBackContent(_, rereferenceIndex) {\n  /** @type {Array<ElementContent>} */\n  const result = [{type: 'text', value: '↩'}]\n\n  if (rereferenceIndex > 1) {\n    result.push({\n      type: 'element',\n      tagName: 'sup',\n      properties: {},\n      children: [{type: 'text', value: String(rereferenceIndex)}]\n    })\n  }\n\n  return result\n}\n\n/**\n * Generate the default label that GitHub uses on backreferences.\n *\n * @param {number} referenceIndex\n *   Index of the definition in the order that they are first referenced,\n *   0-indexed.\n * @param {number} rereferenceIndex\n *   Index of calls to the same definition, 0-indexed.\n * @returns {string}\n *   Label.\n */\nexport function defaultFootnoteBackLabel(referenceIndex, rereferenceIndex) {\n  return (\n    'Back to reference ' +\n    (referenceIndex + 1) +\n    (rereferenceIndex > 1 ? '-' + rereferenceIndex : '')\n  )\n}\n\n/**\n * Generate a hast footer for called footnote definitions.\n *\n * @param {State} state\n *   Info passed around.\n * @returns {Element | undefined}\n *   `section` element or `undefined`.\n */\n// eslint-disable-next-line complexity\nexport function footer(state) {\n  const clobberPrefix =\n    typeof state.options.clobberPrefix === 'string'\n      ? state.options.clobberPrefix\n      : 'user-content-'\n  const footnoteBackContent =\n    state.options.footnoteBackContent || defaultFootnoteBackContent\n  const footnoteBackLabel =\n    state.options.footnoteBackLabel || defaultFootnoteBackLabel\n  const footnoteLabel = state.options.footnoteLabel || 'Footnotes'\n  const footnoteLabelTagName = state.options.footnoteLabelTagName || 'h2'\n  const footnoteLabelProperties = state.options.footnoteLabelProperties || {\n    className: ['sr-only']\n  }\n  /** @type {Array<ElementContent>} */\n  const listItems = []\n  let referenceIndex = -1\n\n  while (++referenceIndex < state.footnoteOrder.length) {\n    const definition = state.footnoteById.get(\n      state.footnoteOrder[referenceIndex]\n    )\n\n    if (!definition) {\n      continue\n    }\n\n    const content = state.all(definition)\n    const id = String(definition.identifier).toUpperCase()\n    const safeId = normalizeUri(id.toLowerCase())\n    let rereferenceIndex = 0\n    /** @type {Array<ElementContent>} */\n    const backReferences = []\n    const counts = state.footnoteCounts.get(id)\n\n    // eslint-disable-next-line no-unmodified-loop-condition\n    while (counts !== undefined && ++rereferenceIndex <= counts) {\n      if (backReferences.length > 0) {\n        backReferences.push({type: 'text', value: ' '})\n      }\n\n      let children =\n        typeof footnoteBackContent === 'string'\n          ? footnoteBackContent\n          : footnoteBackContent(referenceIndex, rereferenceIndex)\n\n      if (typeof children === 'string') {\n        children = {type: 'text', value: children}\n      }\n\n      backReferences.push({\n        type: 'element',\n        tagName: 'a',\n        properties: {\n          href:\n            '#' +\n            clobberPrefix +\n            'fnref-' +\n            safeId +\n            (rereferenceIndex > 1 ? '-' + rereferenceIndex : ''),\n          dataFootnoteBackref: '',\n          ariaLabel:\n            typeof footnoteBackLabel === 'string'\n              ? footnoteBackLabel\n              : footnoteBackLabel(referenceIndex, rereferenceIndex),\n          className: ['data-footnote-backref']\n        },\n        children: Array.isArray(children) ? children : [children]\n      })\n    }\n\n    const tail = content[content.length - 1]\n\n    if (tail && tail.type === 'element' && tail.tagName === 'p') {\n      const tailTail = tail.children[tail.children.length - 1]\n      if (tailTail && tailTail.type === 'text') {\n        tailTail.value += ' '\n      } else {\n        tail.children.push({type: 'text', value: ' '})\n      }\n\n      tail.children.push(...backReferences)\n    } else {\n      content.push(...backReferences)\n    }\n\n    /** @type {Element} */\n    const listItem = {\n      type: 'element',\n      tagName: 'li',\n      properties: {id: clobberPrefix + 'fn-' + safeId},\n      children: state.wrap(content, true)\n    }\n\n    state.patch(definition, listItem)\n\n    listItems.push(listItem)\n  }\n\n  if (listItems.length === 0) {\n    return\n  }\n\n  return {\n    type: 'element',\n    tagName: 'section',\n    properties: {dataFootnotes: true, className: ['footnotes']},\n    children: [\n      {\n        type: 'element',\n        tagName: footnoteLabelTagName,\n        properties: {\n          ...structuredClone(footnoteLabelProperties),\n          id: 'footnote-label'\n        },\n        children: [{type: 'text', value: footnoteLabel}]\n      },\n      {type: 'text', value: '\\n'},\n      {\n        type: 'element',\n        tagName: 'ol',\n        properties: {},\n        children: state.wrap(listItems, true)\n      },\n      {type: 'text', value: '\\n'}\n    ]\n  }\n}\n","/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('hast').ElementContent} ElementContent\n * @typedef {import('hast').Properties} Properties\n * @typedef {import('mdast').ListItem} ListItem\n * @typedef {import('mdast').Parents} Parents\n * @typedef {import('../state.js').State} State\n */\n\n// Make VS Code show references to the above types.\n''\n\n/**\n * Turn an mdast `listItem` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {ListItem} node\n *   mdast node.\n * @param {Parents | undefined} parent\n *   Parent of `node`.\n * @returns {Element}\n *   hast node.\n */\nexport function listItem(state, node, parent) {\n  const results = state.all(node)\n  const loose = parent ? listLoose(parent) : listItemLoose(node)\n  /** @type {Properties} */\n  const properties = {}\n  /** @type {Array<ElementContent>} */\n  const children = []\n\n  if (typeof node.checked === 'boolean') {\n    const head = results[0]\n    /** @type {Element} */\n    let paragraph\n\n    if (head && head.type === 'element' && head.tagName === 'p') {\n      paragraph = head\n    } else {\n      paragraph = {type: 'element', tagName: 'p', properties: {}, children: []}\n      results.unshift(paragraph)\n    }\n\n    if (paragraph.children.length > 0) {\n      paragraph.children.unshift({type: 'text', value: ' '})\n    }\n\n    paragraph.children.unshift({\n      type: 'element',\n      tagName: 'input',\n      properties: {type: 'checkbox', checked: node.checked, disabled: true},\n      children: []\n    })\n\n    // According to github-markdown-css, this class hides bullet.\n    // See: <https://github.com/sindresorhus/github-markdown-css>.\n    properties.className = ['task-list-item']\n  }\n\n  let index = -1\n\n  while (++index < results.length) {\n    const child = results[index]\n\n    // Add eols before nodes, except if this is a loose, first paragraph.\n    if (\n      loose ||\n      index !== 0 ||\n      child.type !== 'element' ||\n      child.tagName !== 'p'\n    ) {\n      children.push({type: 'text', value: '\\n'})\n    }\n\n    if (child.type === 'element' && child.tagName === 'p' && !loose) {\n      children.push(...child.children)\n    } else {\n      children.push(child)\n    }\n  }\n\n  const tail = results[results.length - 1]\n\n  // Add a final eol.\n  if (tail && (loose || tail.type !== 'element' || tail.tagName !== 'p')) {\n    children.push({type: 'text', value: '\\n'})\n  }\n\n  /** @type {Element} */\n  const result = {type: 'element', tagName: 'li', properties, children}\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n\n/**\n * @param {Parents} node\n * @return {Boolean}\n */\nfunction listLoose(node) {\n  let loose = false\n  if (node.type === 'list') {\n    loose = node.spread || false\n    const children = node.children\n    let index = -1\n\n    while (!loose && ++index < children.length) {\n      loose = listItemLoose(children[index])\n    }\n  }\n\n  return loose\n}\n\n/**\n * @param {ListItem} node\n * @return {Boolean}\n */\nfunction listItemLoose(node) {\n  const spread = node.spread\n\n  return spread === null || spread === undefined\n    ? node.children.length > 1\n    : spread\n}\n","import {blockquote} from './blockquote.js'\nimport {hardBreak} from './break.js'\nimport {code} from './code.js'\nimport {strikethrough} from './delete.js'\nimport {emphasis} from './emphasis.js'\nimport {footnoteReference} from './footnote-reference.js'\nimport {heading} from './heading.js'\nimport {html} from './html.js'\nimport {imageReference} from './image-reference.js'\nimport {image} from './image.js'\nimport {inlineCode} from './inline-code.js'\nimport {linkReference} from './link-reference.js'\nimport {link} from './link.js'\nimport {listItem} from './list-item.js'\nimport {list} from './list.js'\nimport {paragraph} from './paragraph.js'\nimport {root} from './root.js'\nimport {strong} from './strong.js'\nimport {table} from './table.js'\nimport {tableRow} from './table-row.js'\nimport {tableCell} from './table-cell.js'\nimport {text} from './text.js'\nimport {thematicBreak} from './thematic-break.js'\n\n/**\n * Default handlers for nodes.\n *\n * @satisfies {import('../state.js').Handlers}\n */\nexport const handlers = {\n  blockquote,\n  break: hardBreak,\n  code,\n  delete: strikethrough,\n  emphasis,\n  footnoteReference,\n  heading,\n  html,\n  imageReference,\n  image,\n  inlineCode,\n  linkReference,\n  link,\n  listItem,\n  list,\n  paragraph,\n  // @ts-expect-error: root is different, but hard to type.\n  root,\n  strong,\n  table,\n  tableCell,\n  tableRow,\n  text,\n  thematicBreak,\n  toml: ignore,\n  yaml: ignore,\n  definition: ignore,\n  footnoteDefinition: ignore\n}\n\n// Return nothing for nodes that are ignored.\nfunction ignore() {\n  return undefined\n}\n","/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('mdast').Blockquote} Blockquote\n * @typedef {import('../state.js').State} State\n */\n\n// Make VS Code show references to the above types.\n''\n\n/**\n * Turn an mdast `blockquote` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Blockquote} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function blockquote(state, node) {\n  /** @type {Element} */\n  const result = {\n    type: 'element',\n    tagName: 'blockquote',\n    properties: {},\n    children: state.wrap(state.all(node), true)\n  }\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('hast').Text} Text\n * @typedef {import('mdast').Break} Break\n * @typedef {import('../state.js').State} State\n */\n\n// Make VS Code show references to the above types.\n''\n\n/**\n * Turn an mdast `break` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Break} node\n *   mdast node.\n * @returns {Array<Element | Text>}\n *   hast element content.\n */\nexport function hardBreak(state, node) {\n  /** @type {Element} */\n  const result = {type: 'element', tagName: 'br', properties: {}, children: []}\n  state.patch(node, result)\n  return [state.applyData(node, result), {type: 'text', value: '\\n'}]\n}\n","/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('hast').Properties} Properties\n * @typedef {import('mdast').Code} Code\n * @typedef {import('../state.js').State} State\n */\n\n// Make VS Code show references to the above types.\n''\n\n/**\n * Turn an mdast `code` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Code} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function code(state, node) {\n  const value = node.value ? node.value + '\\n' : ''\n  /** @type {Properties} */\n  const properties = {}\n\n  if (node.lang) {\n    properties.className = ['language-' + node.lang]\n  }\n\n  // Create `<code>`.\n  /** @type {Element} */\n  let result = {\n    type: 'element',\n    tagName: 'code',\n    properties,\n    children: [{type: 'text', value}]\n  }\n\n  if (node.meta) {\n    result.data = {meta: node.meta}\n  }\n\n  state.patch(node, result)\n  result = state.applyData(node, result)\n\n  // Create `<pre>`.\n  result = {type: 'element', tagName: 'pre', properties: {}, children: [result]}\n  state.patch(node, result)\n  return result\n}\n","/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('mdast').Delete} Delete\n * @typedef {import('../state.js').State} State\n */\n\n// Make VS Code show references to the above types.\n''\n\n/**\n * Turn an mdast `delete` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Delete} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function strikethrough(state, node) {\n  /** @type {Element} */\n  const result = {\n    type: 'element',\n    tagName: 'del',\n    properties: {},\n    children: state.all(node)\n  }\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('mdast').Emphasis} Emphasis\n * @typedef {import('../state.js').State} State\n */\n\n// Make VS Code show references to the above types.\n''\n\n/**\n * Turn an mdast `emphasis` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Emphasis} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function emphasis(state, node) {\n  /** @type {Element} */\n  const result = {\n    type: 'element',\n    tagName: 'em',\n    properties: {},\n    children: state.all(node)\n  }\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('mdast').FootnoteReference} FootnoteReference\n * @typedef {import('../state.js').State} State\n */\n\nimport {normalizeUri} from 'micromark-util-sanitize-uri'\n\n/**\n * Turn an mdast `footnoteReference` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {FootnoteReference} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function footnoteReference(state, node) {\n  const clobberPrefix =\n    typeof state.options.clobberPrefix === 'string'\n      ? state.options.clobberPrefix\n      : 'user-content-'\n  const id = String(node.identifier).toUpperCase()\n  const safeId = normalizeUri(id.toLowerCase())\n  const index = state.footnoteOrder.indexOf(id)\n  /** @type {number} */\n  let counter\n\n  let reuseCounter = state.footnoteCounts.get(id)\n\n  if (reuseCounter === undefined) {\n    reuseCounter = 0\n    state.footnoteOrder.push(id)\n    counter = state.footnoteOrder.length\n  } else {\n    counter = index + 1\n  }\n\n  reuseCounter += 1\n  state.footnoteCounts.set(id, reuseCounter)\n\n  /** @type {Element} */\n  const link = {\n    type: 'element',\n    tagName: 'a',\n    properties: {\n      href: '#' + clobberPrefix + 'fn-' + safeId,\n      id:\n        clobberPrefix +\n        'fnref-' +\n        safeId +\n        (reuseCounter > 1 ? '-' + reuseCounter : ''),\n      dataFootnoteRef: true,\n      ariaDescribedBy: ['footnote-label']\n    },\n    children: [{type: 'text', value: String(counter)}]\n  }\n  state.patch(node, link)\n\n  /** @type {Element} */\n  const sup = {\n    type: 'element',\n    tagName: 'sup',\n    properties: {},\n    children: [link]\n  }\n  state.patch(node, sup)\n  return state.applyData(node, sup)\n}\n","/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('mdast').Heading} Heading\n * @typedef {import('../state.js').State} State\n */\n\n// Make VS Code show references to the above types.\n''\n\n/**\n * Turn an mdast `heading` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Heading} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function heading(state, node) {\n  /** @type {Element} */\n  const result = {\n    type: 'element',\n    tagName: 'h' + node.depth,\n    properties: {},\n    children: state.all(node)\n  }\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('mdast').Html} Html\n * @typedef {import('../state.js').State} State\n * @typedef {import('../../index.js').Raw} Raw\n */\n\n// Make VS Code show references to the above types.\n''\n\n/**\n * Turn an mdast `html` node into hast (`raw` node in dangerous mode, otherwise\n * nothing).\n *\n * @param {State} state\n *   Info passed around.\n * @param {Html} node\n *   mdast node.\n * @returns {Element | Raw | undefined}\n *   hast node.\n */\nexport function html(state, node) {\n  if (state.options.allowDangerousHtml) {\n    /** @type {Raw} */\n    const result = {type: 'raw', value: node.value}\n    state.patch(node, result)\n    return state.applyData(node, result)\n  }\n\n  return undefined\n}\n","/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('hast').ElementContent} ElementContent\n * @typedef {import('hast').Properties} Properties\n * @typedef {import('mdast').ImageReference} ImageReference\n * @typedef {import('../state.js').State} State\n */\n\nimport {normalizeUri} from 'micromark-util-sanitize-uri'\nimport {revert} from '../revert.js'\n\n/**\n * Turn an mdast `imageReference` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {ImageReference} node\n *   mdast node.\n * @returns {Array<ElementContent> | ElementContent}\n *   hast node.\n */\nexport function imageReference(state, node) {\n  const id = String(node.identifier).toUpperCase()\n  const definition = state.definitionById.get(id)\n\n  if (!definition) {\n    return revert(state, node)\n  }\n\n  /** @type {Properties} */\n  const properties = {src: normalizeUri(definition.url || ''), alt: node.alt}\n\n  if (definition.title !== null && definition.title !== undefined) {\n    properties.title = definition.title\n  }\n\n  /** @type {Element} */\n  const result = {type: 'element', tagName: 'img', properties, children: []}\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('hast').Properties} Properties\n * @typedef {import('mdast').Image} Image\n * @typedef {import('../state.js').State} State\n */\n\nimport {normalizeUri} from 'micromark-util-sanitize-uri'\n\n/**\n * Turn an mdast `image` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Image} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function image(state, node) {\n  /** @type {Properties} */\n  const properties = {src: normalizeUri(node.url)}\n\n  if (node.alt !== null && node.alt !== undefined) {\n    properties.alt = node.alt\n  }\n\n  if (node.title !== null && node.title !== undefined) {\n    properties.title = node.title\n  }\n\n  /** @type {Element} */\n  const result = {type: 'element', tagName: 'img', properties, children: []}\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('hast').Text} Text\n * @typedef {import('mdast').InlineCode} InlineCode\n * @typedef {import('../state.js').State} State\n */\n\n// Make VS Code show references to the above types.\n''\n\n/**\n * Turn an mdast `inlineCode` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {InlineCode} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function inlineCode(state, node) {\n  /** @type {Text} */\n  const text = {type: 'text', value: node.value.replace(/\\r?\\n|\\r/g, ' ')}\n  state.patch(node, text)\n\n  /** @type {Element} */\n  const result = {\n    type: 'element',\n    tagName: 'code',\n    properties: {},\n    children: [text]\n  }\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('hast').ElementContent} ElementContent\n * @typedef {import('hast').Properties} Properties\n * @typedef {import('mdast').LinkReference} LinkReference\n * @typedef {import('../state.js').State} State\n */\n\nimport {normalizeUri} from 'micromark-util-sanitize-uri'\nimport {revert} from '../revert.js'\n\n/**\n * Turn an mdast `linkReference` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {LinkReference} node\n *   mdast node.\n * @returns {Array<ElementContent> | ElementContent}\n *   hast node.\n */\nexport function linkReference(state, node) {\n  const id = String(node.identifier).toUpperCase()\n  const definition = state.definitionById.get(id)\n\n  if (!definition) {\n    return revert(state, node)\n  }\n\n  /** @type {Properties} */\n  const properties = {href: normalizeUri(definition.url || '')}\n\n  if (definition.title !== null && definition.title !== undefined) {\n    properties.title = definition.title\n  }\n\n  /** @type {Element} */\n  const result = {\n    type: 'element',\n    tagName: 'a',\n    properties,\n    children: state.all(node)\n  }\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('hast').Properties} Properties\n * @typedef {import('mdast').Link} Link\n * @typedef {import('../state.js').State} State\n */\n\nimport {normalizeUri} from 'micromark-util-sanitize-uri'\n\n/**\n * Turn an mdast `link` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Link} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function link(state, node) {\n  /** @type {Properties} */\n  const properties = {href: normalizeUri(node.url)}\n\n  if (node.title !== null && node.title !== undefined) {\n    properties.title = node.title\n  }\n\n  /** @type {Element} */\n  const result = {\n    type: 'element',\n    tagName: 'a',\n    properties,\n    children: state.all(node)\n  }\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('hast').Properties} Properties\n * @typedef {import('mdast').List} List\n * @typedef {import('../state.js').State} State\n */\n\n// Make VS Code show references to the above types.\n''\n\n/**\n * Turn an mdast `list` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {List} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function list(state, node) {\n  /** @type {Properties} */\n  const properties = {}\n  const results = state.all(node)\n  let index = -1\n\n  if (typeof node.start === 'number' && node.start !== 1) {\n    properties.start = node.start\n  }\n\n  // Like GitHub, add a class for custom styling.\n  while (++index < results.length) {\n    const child = results[index]\n\n    if (\n      child.type === 'element' &&\n      child.tagName === 'li' &&\n      child.properties &&\n      Array.isArray(child.properties.className) &&\n      child.properties.className.includes('task-list-item')\n    ) {\n      properties.className = ['contains-task-list']\n      break\n    }\n  }\n\n  /** @type {Element} */\n  const result = {\n    type: 'element',\n    tagName: node.ordered ? 'ol' : 'ul',\n    properties,\n    children: state.wrap(results, true)\n  }\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('mdast').Paragraph} Paragraph\n * @typedef {import('../state.js').State} State\n */\n\n// Make VS Code show references to the above types.\n''\n\n/**\n * Turn an mdast `paragraph` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Paragraph} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function paragraph(state, node) {\n  /** @type {Element} */\n  const result = {\n    type: 'element',\n    tagName: 'p',\n    properties: {},\n    children: state.all(node)\n  }\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @typedef {import('hast').Parents} HastParents\n * @typedef {import('hast').Root} HastRoot\n * @typedef {import('mdast').Root} MdastRoot\n * @typedef {import('../state.js').State} State\n */\n\n// Make VS Code show references to the above types.\n''\n\n/**\n * Turn an mdast `root` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {MdastRoot} node\n *   mdast node.\n * @returns {HastParents}\n *   hast node.\n */\nexport function root(state, node) {\n  /** @type {HastRoot} */\n  const result = {type: 'root', children: state.wrap(state.all(node))}\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('mdast').Strong} Strong\n * @typedef {import('../state.js').State} State\n */\n\n// Make VS Code show references to the above types.\n''\n\n/**\n * Turn an mdast `strong` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Strong} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function strong(state, node) {\n  /** @type {Element} */\n  const result = {\n    type: 'element',\n    tagName: 'strong',\n    properties: {},\n    children: state.all(node)\n  }\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('mdast').Table} Table\n * @typedef {import('../state.js').State} State\n */\n\nimport {pointEnd, pointStart} from 'unist-util-position'\n\n/**\n * Turn an mdast `table` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Table} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function table(state, node) {\n  const rows = state.all(node)\n  const firstRow = rows.shift()\n  /** @type {Array<Element>} */\n  const tableContent = []\n\n  if (firstRow) {\n    /** @type {Element} */\n    const head = {\n      type: 'element',\n      tagName: 'thead',\n      properties: {},\n      children: state.wrap([firstRow], true)\n    }\n    state.patch(node.children[0], head)\n    tableContent.push(head)\n  }\n\n  if (rows.length > 0) {\n    /** @type {Element} */\n    const body = {\n      type: 'element',\n      tagName: 'tbody',\n      properties: {},\n      children: state.wrap(rows, true)\n    }\n\n    const start = pointStart(node.children[1])\n    const end = pointEnd(node.children[node.children.length - 1])\n    if (start && end) body.position = {start, end}\n    tableContent.push(body)\n  }\n\n  /** @type {Element} */\n  const result = {\n    type: 'element',\n    tagName: 'table',\n    properties: {},\n    children: state.wrap(tableContent, true)\n  }\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('mdast').TableCell} TableCell\n * @typedef {import('../state.js').State} State\n */\n\n// Make VS Code show references to the above types.\n''\n\n/**\n * Turn an mdast `tableCell` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {TableCell} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function tableCell(state, node) {\n  // Note: this function is normally not called: see `table-row` for how rows\n  // and their cells are compiled.\n  /** @type {Element} */\n  const result = {\n    type: 'element',\n    tagName: 'td', // Assume body cell.\n    properties: {},\n    children: state.all(node)\n  }\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('hast').ElementContent} ElementContent\n * @typedef {import('hast').Properties} Properties\n * @typedef {import('mdast').Parents} Parents\n * @typedef {import('mdast').TableRow} TableRow\n * @typedef {import('../state.js').State} State\n */\n\n// Make VS Code show references to the above types.\n''\n\n/**\n * Turn an mdast `tableRow` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {TableRow} node\n *   mdast node.\n * @param {Parents | undefined} parent\n *   Parent of `node`.\n * @returns {Element}\n *   hast node.\n */\nexport function tableRow(state, node, parent) {\n  const siblings = parent ? parent.children : undefined\n  // Generate a body row when without parent.\n  const rowIndex = siblings ? siblings.indexOf(node) : 1\n  const tagName = rowIndex === 0 ? 'th' : 'td'\n  // To do: option to use `style`?\n  const align = parent && parent.type === 'table' ? parent.align : undefined\n  const length = align ? align.length : node.children.length\n  let cellIndex = -1\n  /** @type {Array<ElementContent>} */\n  const cells = []\n\n  while (++cellIndex < length) {\n    // Note: can also be undefined.\n    const cell = node.children[cellIndex]\n    /** @type {Properties} */\n    const properties = {}\n    const alignValue = align ? align[cellIndex] : undefined\n\n    if (alignValue) {\n      properties.align = alignValue\n    }\n\n    /** @type {Element} */\n    let result = {type: 'element', tagName, properties, children: []}\n\n    if (cell) {\n      result.children = state.all(cell)\n      state.patch(cell, result)\n      result = state.applyData(cell, result)\n    }\n\n    cells.push(result)\n  }\n\n  /** @type {Element} */\n  const result = {\n    type: 'element',\n    tagName: 'tr',\n    properties: {},\n    children: state.wrap(cells, true)\n  }\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @typedef {import('hast').Element} HastElement\n * @typedef {import('hast').Text} HastText\n * @typedef {import('mdast').Text} MdastText\n * @typedef {import('../state.js').State} State\n */\n\nimport {trimLines} from 'trim-lines'\n\n/**\n * Turn an mdast `text` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {MdastText} node\n *   mdast node.\n * @returns {HastElement | HastText}\n *   hast node.\n */\nexport function text(state, node) {\n  /** @type {HastText} */\n  const result = {type: 'text', value: trimLines(String(node.value))}\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('mdast').ThematicBreak} ThematicBreak\n * @typedef {import('../state.js').State} State\n */\n\n// Make VS Code show references to the above types.\n''\n\n/**\n * Turn an mdast `thematicBreak` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {ThematicBreak} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function thematicBreak(state, node) {\n  /** @type {Element} */\n  const result = {\n    type: 'element',\n    tagName: 'hr',\n    properties: {},\n    children: []\n  }\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @typedef {import('hast').Nodes} HastNodes\n * @typedef {import('mdast').Nodes} MdastNodes\n * @typedef {import('./state.js').Options} Options\n */\n\nimport {ok as assert} from 'devlop'\nimport {footer} from './footer.js'\nimport {createState} from './state.js'\n\n/**\n * Transform mdast to hast.\n *\n * ##### Notes\n *\n * ###### HTML\n *\n * Raw HTML is available in mdast as `html` nodes and can be embedded in hast\n * as semistandard `raw` nodes.\n * Most utilities ignore `raw` nodes but two notable ones don’t:\n *\n * *   `hast-util-to-html` also has an option `allowDangerousHtml` which will\n *     output the raw HTML.\n *     This is typically discouraged as noted by the option name but is useful\n *     if you completely trust authors\n * *   `hast-util-raw` can handle the raw embedded HTML strings by parsing them\n *     into standard hast nodes (`element`, `text`, etc).\n *     This is a heavy task as it needs a full HTML parser, but it is the only\n *     way to support untrusted content\n *\n * ###### Footnotes\n *\n * Many options supported here relate to footnotes.\n * Footnotes are not specified by CommonMark, which we follow by default.\n * They are supported by GitHub, so footnotes can be enabled in markdown with\n * `mdast-util-gfm`.\n *\n * The options `footnoteBackLabel` and `footnoteLabel` define natural language\n * that explains footnotes, which is hidden for sighted users but shown to\n * assistive technology.\n * When your page is not in English, you must define translated values.\n *\n * Back references use ARIA attributes, but the section label itself uses a\n * heading that is hidden with an `sr-only` class.\n * To show it to sighted users, define different attributes in\n * `footnoteLabelProperties`.\n *\n * ###### Clobbering\n *\n * Footnotes introduces a problem, as it links footnote calls to footnote\n * definitions on the page through `id` attributes generated from user content,\n * which results in DOM clobbering.\n *\n * DOM clobbering is this:\n *\n * ```html\n * <p id=x></p>\n * <script>alert(x) // `x` now refers to the DOM `p#x` element</script>\n * ```\n *\n * Elements by their ID are made available by browsers on the `window` object,\n * which is a security risk.\n * Using a prefix solves this problem.\n *\n * More information on how to handle clobbering and the prefix is explained in\n * Example: headings (DOM clobbering) in `rehype-sanitize`.\n *\n * ###### Unknown nodes\n *\n * Unknown nodes are nodes with a type that isn’t in `handlers` or `passThrough`.\n * The default behavior for unknown nodes is:\n *\n * *   when the node has a `value` (and doesn’t have `data.hName`,\n *     `data.hProperties`, or `data.hChildren`, see later), create a hast `text`\n *     node\n * *   otherwise, create a `<div>` element (which could be changed with\n *     `data.hName`), with its children mapped from mdast to hast as well\n *\n * This behavior can be changed by passing an `unknownHandler`.\n *\n * @param {MdastNodes} tree\n *   mdast tree.\n * @param {Options | null | undefined} [options]\n *   Configuration (optional).\n * @returns {HastNodes}\n *   hast tree.\n */\nexport function toHast(tree, options) {\n  const state = createState(tree, options)\n  const node = state.one(tree, undefined)\n  const foot = footer(state)\n  /** @type {HastNodes} */\n  const result = Array.isArray(node)\n    ? {type: 'root', children: node}\n    : node || {type: 'root', children: []}\n\n  if (foot) {\n    // If there’s a footer, there were definitions, meaning block\n    // content.\n    // So `result` is a parent node.\n    assert('children' in result)\n    result.children.push({type: 'text', value: '\\n'}, foot)\n  }\n\n  return result\n}\n","/**\n * @typedef {import('hast').ElementContent} ElementContent\n *\n * @typedef {import('mdast').Nodes} Nodes\n * @typedef {import('mdast').Reference} Reference\n *\n * @typedef {import('./state.js').State} State\n */\n\n// Make VS Code show references to the above types.\n''\n\n/**\n * Return the content of a reference without definition as plain text.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Extract<Nodes, Reference>} node\n *   Reference node (image, link).\n * @returns {Array<ElementContent>}\n *   hast content.\n */\nexport function revert(state, node) {\n  const subtype = node.referenceType\n  let suffix = ']'\n\n  if (subtype === 'collapsed') {\n    suffix += '[]'\n  } else if (subtype === 'full') {\n    suffix += '[' + (node.label || node.identifier) + ']'\n  }\n\n  if (node.type === 'imageReference') {\n    return [{type: 'text', value: '![' + node.alt + suffix}]\n  }\n\n  const contents = state.all(node)\n  const head = contents[0]\n\n  if (head && head.type === 'text') {\n    head.value = '[' + head.value\n  } else {\n    contents.unshift({type: 'text', value: '['})\n  }\n\n  const tail = contents[contents.length - 1]\n\n  if (tail && tail.type === 'text') {\n    tail.value += suffix\n  } else {\n    contents.push({type: 'text', value: suffix})\n  }\n\n  return contents\n}\n","/**\n * @typedef {import('hast').Element} HastElement\n * @typedef {import('hast').ElementContent} HastElementContent\n * @typedef {import('hast').Nodes} HastNodes\n * @typedef {import('hast').Properties} HastProperties\n * @typedef {import('hast').RootContent} HastRootContent\n * @typedef {import('hast').Text} HastText\n *\n * @typedef {import('mdast').Definition} MdastDefinition\n * @typedef {import('mdast').FootnoteDefinition} MdastFootnoteDefinition\n * @typedef {import('mdast').Nodes} MdastNodes\n * @typedef {import('mdast').Parents} MdastParents\n *\n * @typedef {import('vfile').VFile} VFile\n *\n * @typedef {import('./footer.js').FootnoteBackContentTemplate} FootnoteBackContentTemplate\n * @typedef {import('./footer.js').FootnoteBackLabelTemplate} FootnoteBackLabelTemplate\n */\n\n/**\n * @callback Handler\n *   Handle a node.\n * @param {State} state\n *   Info passed around.\n * @param {any} node\n *   mdast node to handle.\n * @param {MdastParents | undefined} parent\n *   Parent of `node`.\n * @returns {Array<HastElementContent> | HastElementContent | undefined}\n *   hast node.\n *\n * @typedef {Partial<Record<MdastNodes['type'], Handler>>} Handlers\n *   Handle nodes.\n *\n * @typedef Options\n *   Configuration (optional).\n * @property {boolean | null | undefined} [allowDangerousHtml=false]\n *   Whether to persist raw HTML in markdown in the hast tree (default:\n *   `false`).\n * @property {string | null | undefined} [clobberPrefix='user-content-']\n *   Prefix to use before the `id` property on footnotes to prevent them from\n *   *clobbering* (default: `'user-content-'`).\n *\n *   Pass `''` for trusted markdown and when you are careful with\n *   polyfilling.\n *   You could pass a different prefix.\n *\n *   DOM clobbering is this:\n *\n *   ```html\n *   <p id=\"x\"></p>\n *   <script>alert(x) // `x` now refers to the `p#x` DOM element</script>\n *   ```\n *\n *   The above example shows that elements are made available by browsers, by\n *   their ID, on the `window` object.\n *   This is a security risk because you might be expecting some other variable\n *   at that place.\n *   It can also break polyfills.\n *   Using a prefix solves these problems.\n * @property {VFile | null | undefined} [file]\n *   Corresponding virtual file representing the input document (optional).\n * @property {FootnoteBackContentTemplate | string | null | undefined} [footnoteBackContent]\n *   Content of the backreference back to references (default: `defaultFootnoteBackContent`).\n *\n *   The default value is:\n *\n *   ```js\n *   function defaultFootnoteBackContent(_, rereferenceIndex) {\n *     const result = [{type: 'text', value: '↩'}]\n *\n *     if (rereferenceIndex > 1) {\n *       result.push({\n *         type: 'element',\n *         tagName: 'sup',\n *         properties: {},\n *         children: [{type: 'text', value: String(rereferenceIndex)}]\n *       })\n *     }\n *\n *     return result\n *   }\n *   ```\n *\n *   This content is used in the `a` element of each backreference (the `↩`\n *   links).\n * @property {FootnoteBackLabelTemplate | string | null | undefined} [footnoteBackLabel]\n *   Label to describe the backreference back to references (default:\n *   `defaultFootnoteBackLabel`).\n *\n *   The default value is:\n *\n *   ```js\n *   function defaultFootnoteBackLabel(referenceIndex, rereferenceIndex) {\n *    return (\n *      'Back to reference ' +\n *      (referenceIndex + 1) +\n *      (rereferenceIndex > 1 ? '-' + rereferenceIndex : '')\n *    )\n *   }\n *   ```\n *\n *   Change it when the markdown is not in English.\n *\n *   This label is used in the `ariaLabel` property on each backreference\n *   (the `↩` links).\n *   It affects users of assistive technology.\n * @property {string | null | undefined} [footnoteLabel='Footnotes']\n *   Textual label to use for the footnotes section (default: `'Footnotes'`).\n *\n *   Change it when the markdown is not in English.\n *\n *   This label is typically hidden visually (assuming a `sr-only` CSS class\n *   is defined that does that) and so affects screen readers only.\n *   If you do have such a class, but want to show this section to everyone,\n *   pass different properties with the `footnoteLabelProperties` option.\n * @property {HastProperties | null | undefined} [footnoteLabelProperties={className: ['sr-only']}]\n *   Properties to use on the footnote label (default: `{className:\n *   ['sr-only']}`).\n *\n *   Change it to show the label and add other properties.\n *\n *   This label is typically hidden visually (assuming an `sr-only` CSS class\n *   is defined that does that) and so affects screen readers only.\n *   If you do have such a class, but want to show this section to everyone,\n *   pass an empty string.\n *   You can also add different properties.\n *\n *   > **Note**: `id: 'footnote-label'` is always added, because footnote\n *   > calls use it with `aria-describedby` to provide an accessible label.\n * @property {string | null | undefined} [footnoteLabelTagName='h2']\n *   HTML tag name to use for the footnote label element (default: `'h2'`).\n *\n *   Change it to match your document structure.\n *\n *   This label is typically hidden visually (assuming a `sr-only` CSS class\n *   is defined that does that) and so affects screen readers only.\n *   If you do have such a class, but want to show this section to everyone,\n *   pass different properties with the `footnoteLabelProperties` option.\n * @property {Handlers | null | undefined} [handlers]\n *   Extra handlers for nodes (optional).\n * @property {Array<MdastNodes['type']> | null | undefined} [passThrough]\n *   List of custom mdast node types to pass through (keep) in hast (note that\n *   the node itself is passed, but eventual children are transformed)\n *   (optional).\n * @property {Handler | null | undefined} [unknownHandler]\n *   Handler for all unknown nodes (optional).\n *\n * @typedef State\n *   Info passed around.\n * @property {(node: MdastNodes) => Array<HastElementContent>} all\n *   Transform the children of an mdast parent to hast.\n * @property {<Type extends HastNodes>(from: MdastNodes, to: Type) => HastElement | Type} applyData\n *   Honor the `data` of `from`, and generate an element instead of `node`.\n * @property {Map<string, MdastDefinition>} definitionById\n *   Definitions by their identifier.\n * @property {Map<string, MdastFootnoteDefinition>} footnoteById\n *   Footnote definitions by their identifier.\n * @property {Map<string, number>} footnoteCounts\n *   Counts for how often the same footnote was called.\n * @property {Array<string>} footnoteOrder\n *   Identifiers of order when footnote calls first appear in tree order.\n * @property {Handlers} handlers\n *   Applied handlers.\n * @property {(node: MdastNodes, parent: MdastParents | undefined) => Array<HastElementContent> | HastElementContent | undefined} one\n *   Transform an mdast node to hast.\n * @property {Options} options\n *   Configuration.\n * @property {(from: MdastNodes, node: HastNodes) => undefined} patch\n *   Copy a node’s positional info.\n * @property {<Type extends HastRootContent>(nodes: Array<Type>, loose?: boolean | undefined) => Array<HastText | Type>} wrap\n *   Wrap `nodes` with line endings between each node, adds initial/final line endings when `loose`.\n */\n\nimport structuredClone from '@ungap/structured-clone'\nimport {visit} from 'unist-util-visit'\nimport {position} from 'unist-util-position'\nimport {handlers as defaultHandlers} from './handlers/index.js'\n\nconst own = {}.hasOwnProperty\n\n/** @type {Options} */\nconst emptyOptions = {}\n\n/**\n * Create `state` from an mdast tree.\n *\n * @param {MdastNodes} tree\n *   mdast node to transform.\n * @param {Options | null | undefined} [options]\n *   Configuration (optional).\n * @returns {State}\n *   `state` function.\n */\nexport function createState(tree, options) {\n  const settings = options || emptyOptions\n  /** @type {Map<string, MdastDefinition>} */\n  const definitionById = new Map()\n  /** @type {Map<string, MdastFootnoteDefinition>} */\n  const footnoteById = new Map()\n  /** @type {Map<string, number>} */\n  const footnoteCounts = new Map()\n  /** @type {Handlers} */\n  // @ts-expect-error: the root handler returns a root.\n  // Hard to type.\n  const handlers = {...defaultHandlers, ...settings.handlers}\n\n  /** @type {State} */\n  const state = {\n    all,\n    applyData,\n    definitionById,\n    footnoteById,\n    footnoteCounts,\n    footnoteOrder: [],\n    handlers,\n    one,\n    options: settings,\n    patch,\n    wrap\n  }\n\n  visit(tree, function (node) {\n    if (node.type === 'definition' || node.type === 'footnoteDefinition') {\n      const map = node.type === 'definition' ? definitionById : footnoteById\n      const id = String(node.identifier).toUpperCase()\n\n      // Mimick CM behavior of link definitions.\n      // See: <https://github.com/syntax-tree/mdast-util-definitions/blob/9032189/lib/index.js#L20-L21>.\n      if (!map.has(id)) {\n        // @ts-expect-error: node type matches map.\n        map.set(id, node)\n      }\n    }\n  })\n\n  return state\n\n  /**\n   * Transform an mdast node into a hast node.\n   *\n   * @param {MdastNodes} node\n   *   mdast node.\n   * @param {MdastParents | undefined} [parent]\n   *   Parent of `node`.\n   * @returns {Array<HastElementContent> | HastElementContent | undefined}\n   *   Resulting hast node.\n   */\n  function one(node, parent) {\n    const type = node.type\n    const handle = state.handlers[type]\n\n    if (own.call(state.handlers, type) && handle) {\n      return handle(state, node, parent)\n    }\n\n    if (state.options.passThrough && state.options.passThrough.includes(type)) {\n      if ('children' in node) {\n        const {children, ...shallow} = node\n        const result = structuredClone(shallow)\n        // @ts-expect-error: TS doesn’t understand…\n        result.children = state.all(node)\n        // @ts-expect-error: TS doesn’t understand…\n        return result\n      }\n\n      // @ts-expect-error: it’s custom.\n      return structuredClone(node)\n    }\n\n    const unknown = state.options.unknownHandler || defaultUnknownHandler\n\n    return unknown(state, node, parent)\n  }\n\n  /**\n   * Transform the children of an mdast node into hast nodes.\n   *\n   * @param {MdastNodes} parent\n   *   mdast node to compile\n   * @returns {Array<HastElementContent>}\n   *   Resulting hast nodes.\n   */\n  function all(parent) {\n    /** @type {Array<HastElementContent>} */\n    const values = []\n\n    if ('children' in parent) {\n      const nodes = parent.children\n      let index = -1\n      while (++index < nodes.length) {\n        const result = state.one(nodes[index], parent)\n\n        // To do: see if we van clean this? Can we merge texts?\n        if (result) {\n          if (index && nodes[index - 1].type === 'break') {\n            if (!Array.isArray(result) && result.type === 'text') {\n              result.value = trimMarkdownSpaceStart(result.value)\n            }\n\n            if (!Array.isArray(result) && result.type === 'element') {\n              const head = result.children[0]\n\n              if (head && head.type === 'text') {\n                head.value = trimMarkdownSpaceStart(head.value)\n              }\n            }\n          }\n\n          if (Array.isArray(result)) {\n            values.push(...result)\n          } else {\n            values.push(result)\n          }\n        }\n      }\n    }\n\n    return values\n  }\n}\n\n/**\n * Copy a node’s positional info.\n *\n * @param {MdastNodes} from\n *   mdast node to copy from.\n * @param {HastNodes} to\n *   hast node to copy into.\n * @returns {undefined}\n *   Nothing.\n */\nfunction patch(from, to) {\n  if (from.position) to.position = position(from)\n}\n\n/**\n * Honor the `data` of `from` and maybe generate an element instead of `to`.\n *\n * @template {HastNodes} Type\n *   Node type.\n * @param {MdastNodes} from\n *   mdast node to use data from.\n * @param {Type} to\n *   hast node to change.\n * @returns {HastElement | Type}\n *   Nothing.\n */\nfunction applyData(from, to) {\n  /** @type {HastElement | Type} */\n  let result = to\n\n  // Handle `data.hName`, `data.hProperties, `data.hChildren`.\n  if (from && from.data) {\n    const hName = from.data.hName\n    const hChildren = from.data.hChildren\n    const hProperties = from.data.hProperties\n\n    if (typeof hName === 'string') {\n      // Transforming the node resulted in an element with a different name\n      // than wanted:\n      if (result.type === 'element') {\n        result.tagName = hName\n      }\n      // Transforming the node resulted in a non-element, which happens for\n      // raw, text, and root nodes (unless custom handlers are passed).\n      // The intent of `hName` is to create an element, but likely also to keep\n      // the content around (otherwise: pass `hChildren`).\n      else {\n        /** @type {Array<HastElementContent>} */\n        // @ts-expect-error: assume no doctypes in `root`.\n        const children = 'children' in result ? result.children : [result]\n        result = {type: 'element', tagName: hName, properties: {}, children}\n      }\n    }\n\n    if (result.type === 'element' && hProperties) {\n      Object.assign(result.properties, structuredClone(hProperties))\n    }\n\n    if (\n      'children' in result &&\n      result.children &&\n      hChildren !== null &&\n      hChildren !== undefined\n    ) {\n      result.children = hChildren\n    }\n  }\n\n  return result\n}\n\n/**\n * Transform an unknown node.\n *\n * @param {State} state\n *   Info passed around.\n * @param {MdastNodes} node\n *   Unknown mdast node.\n * @returns {HastElement | HastText}\n *   Resulting hast node.\n */\nfunction defaultUnknownHandler(state, node) {\n  const data = node.data || {}\n  /** @type {HastElement | HastText} */\n  const result =\n    'value' in node &&\n    !(own.call(data, 'hProperties') || own.call(data, 'hChildren'))\n      ? {type: 'text', value: node.value}\n      : {\n          type: 'element',\n          tagName: 'div',\n          properties: {},\n          children: state.all(node)\n        }\n\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n\n/**\n * Wrap `nodes` with line endings between each node.\n *\n * @template {HastRootContent} Type\n *   Node type.\n * @param {Array<Type>} nodes\n *   List of nodes to wrap.\n * @param {boolean | undefined} [loose=false]\n *   Whether to add line endings at start and end (default: `false`).\n * @returns {Array<HastText | Type>}\n *   Wrapped nodes.\n */\nexport function wrap(nodes, loose) {\n  /** @type {Array<HastText | Type>} */\n  const result = []\n  let index = -1\n\n  if (loose) {\n    result.push({type: 'text', value: '\\n'})\n  }\n\n  while (++index < nodes.length) {\n    if (index) result.push({type: 'text', value: '\\n'})\n    result.push(nodes[index])\n  }\n\n  if (loose && nodes.length > 0) {\n    result.push({type: 'text', value: '\\n'})\n  }\n\n  return result\n}\n\n/**\n * Trim spaces and tabs at the start of `value`.\n *\n * @param {string} value\n *   Value to trim.\n * @returns {string}\n *   Result.\n */\nfunction trimMarkdownSpaceStart(value) {\n  let index = 0\n  let code = value.charCodeAt(index)\n\n  while (code === 9 || code === 32) {\n    index++\n    code = value.charCodeAt(index)\n  }\n\n  return value.slice(index)\n}\n","import {\n  VOID, PRIMITIVE,\n  ARRAY, OBJECT,\n  DATE, REGEXP, MAP, SET,\n  ERROR, BIGINT\n} from './types.js';\n\nconst env = typeof self === 'object' ? self : globalThis;\n\nconst deserializer = ($, _) => {\n  const as = (out, index) => {\n    $.set(index, out);\n    return out;\n  };\n\n  const unpair = index => {\n    if ($.has(index))\n      return $.get(index);\n\n    const [type, value] = _[index];\n    switch (type) {\n      case PRIMITIVE:\n      case VOID:\n        return as(value, index);\n      case ARRAY: {\n        const arr = as([], index);\n        for (const index of value)\n          arr.push(unpair(index));\n        return arr;\n      }\n      case OBJECT: {\n        const object = as({}, index);\n        for (const [key, index] of value)\n          object[unpair(key)] = unpair(index);\n        return object;\n      }\n      case DATE:\n        return as(new Date(value), index);\n      case REGEXP: {\n        const {source, flags} = value;\n        return as(new RegExp(source, flags), index);\n      }\n      case MAP: {\n        const map = as(new Map, index);\n        for (const [key, index] of value)\n          map.set(unpair(key), unpair(index));\n        return map;\n      }\n      case SET: {\n        const set = as(new Set, index);\n        for (const index of value)\n          set.add(unpair(index));\n        return set;\n      }\n      case ERROR: {\n        const {name, message} = value;\n        return as(new env[name](message), index);\n      }\n      case BIGINT:\n        return as(BigInt(value), index);\n      case 'BigInt':\n        return as(Object(BigInt(value)), index);\n      case 'ArrayBuffer':\n        return as(new Uint8Array(value).buffer, value);\n      case 'DataView': {\n        const { buffer } = new Uint8Array(value);\n        return as(new DataView(buffer), value);\n      }\n    }\n    return as(new env[type](value), index);\n  };\n\n  return unpair;\n};\n\n/**\n * @typedef {Array<string,any>} Record a type representation\n */\n\n/**\n * Returns a deserialized value from a serialized array of Records.\n * @param {Record[]} serialized a previously serialized value.\n * @returns {any}\n */\nexport const deserialize = serialized => deserializer(new Map, serialized)(0);\n","import {\n  VOID, PRIMITIVE,\n  ARRAY, OBJECT,\n  DATE, REGEXP, MAP, SET,\n  ERROR, BIGINT\n} from './types.js';\n\nconst EMPTY = '';\n\nconst {toString} = {};\nconst {keys} = Object;\n\nconst typeOf = value => {\n  const type = typeof value;\n  if (type !== 'object' || !value)\n    return [PRIMITIVE, type];\n\n  const asString = toString.call(value).slice(8, -1);\n  switch (asString) {\n    case 'Array':\n      return [ARRAY, EMPTY];\n    case 'Object':\n      return [OBJECT, EMPTY];\n    case 'Date':\n      return [DATE, EMPTY];\n    case 'RegExp':\n      return [REGEXP, EMPTY];\n    case 'Map':\n      return [MAP, EMPTY];\n    case 'Set':\n      return [SET, EMPTY];\n    case 'DataView':\n      return [ARRAY, asString];\n  }\n\n  if (asString.includes('Array'))\n    return [ARRAY, asString];\n\n  if (asString.includes('Error'))\n    return [ERROR, asString];\n\n  return [OBJECT, asString];\n};\n\nconst shouldSkip = ([TYPE, type]) => (\n  TYPE === PRIMITIVE &&\n  (type === 'function' || type === 'symbol')\n);\n\nconst serializer = (strict, json, $, _) => {\n\n  const as = (out, value) => {\n    const index = _.push(out) - 1;\n    $.set(value, index);\n    return index;\n  };\n\n  const pair = value => {\n    if ($.has(value))\n      return $.get(value);\n\n    let [TYPE, type] = typeOf(value);\n    switch (TYPE) {\n      case PRIMITIVE: {\n        let entry = value;\n        switch (type) {\n          case 'bigint':\n            TYPE = BIGINT;\n            entry = value.toString();\n            break;\n          case 'function':\n          case 'symbol':\n            if (strict)\n              throw new TypeError('unable to serialize ' + type);\n            entry = null;\n            break;\n          case 'undefined':\n            return as([VOID], value);\n        }\n        return as([TYPE, entry], value);\n      }\n      case ARRAY: {\n        if (type) {\n          let spread = value;\n          if (type === 'DataView') {\n            spread = new Uint8Array(value.buffer);\n          }\n          else if (type === 'ArrayBuffer') {\n            spread = new Uint8Array(value);\n          }\n          return as([type, [...spread]], value);\n        }\n\n        const arr = [];\n        const index = as([TYPE, arr], value);\n        for (const entry of value)\n          arr.push(pair(entry));\n        return index;\n      }\n      case OBJECT: {\n        if (type) {\n          switch (type) {\n            case 'BigInt':\n              return as([type, value.toString()], value);\n            case 'Boolean':\n            case 'Number':\n            case 'String':\n              return as([type, value.valueOf()], value);\n          }\n        }\n\n        if (json && ('toJSON' in value))\n          return pair(value.toJSON());\n\n        const entries = [];\n        const index = as([TYPE, entries], value);\n        for (const key of keys(value)) {\n          if (strict || !shouldSkip(typeOf(value[key])))\n            entries.push([pair(key), pair(value[key])]);\n        }\n        return index;\n      }\n      case DATE:\n        return as([TYPE, value.toISOString()], value);\n      case REGEXP: {\n        const {source, flags} = value;\n        return as([TYPE, {source, flags}], value);\n      }\n      case MAP: {\n        const entries = [];\n        const index = as([TYPE, entries], value);\n        for (const [key, entry] of value) {\n          if (strict || !(shouldSkip(typeOf(key)) || shouldSkip(typeOf(entry))))\n            entries.push([pair(key), pair(entry)]);\n        }\n        return index;\n      }\n      case SET: {\n        const entries = [];\n        const index = as([TYPE, entries], value);\n        for (const entry of value) {\n          if (strict || !shouldSkip(typeOf(entry)))\n            entries.push(pair(entry));\n        }\n        return index;\n      }\n    }\n\n    const {message} = value;\n    return as([TYPE, {name: type, message}], value);\n  };\n\n  return pair;\n};\n\n/**\n * @typedef {Array<string,any>} Record a type representation\n */\n\n/**\n * Returns an array of serialized Records.\n * @param {any} value a serializable value.\n * @param {{json?: boolean, lossy?: boolean}?} options an object with a `lossy` or `json` property that,\n *  if `true`, will not throw errors on incompatible types, and behave more\n *  like JSON stringify would behave. Symbol and Function will be discarded.\n * @returns {Record[]}\n */\n export const serialize = (value, {json, lossy} = {}) => {\n  const _ = [];\n  return serializer(!(json || lossy), !!json, new Map, _)(value), _;\n};\n","import {deserialize} from './deserialize.js';\nimport {serialize} from './serialize.js';\n\n/**\n * @typedef {Array<string,any>} Record a type representation\n */\n\n/**\n * Returns an array of serialized Records.\n * @param {any} any a serializable value.\n * @param {{transfer?: any[], json?: boolean, lossy?: boolean}?} options an object with\n * a transfer option (ignored when polyfilled) and/or non standard fields that\n * fallback to the polyfill if present.\n * @returns {Record[]}\n */\nexport default typeof structuredClone === \"function\" ?\n  /* c8 ignore start */\n  (any, options) => (\n    options && ('json' in options || 'lossy' in options) ?\n      deserialize(serialize(any, options)) : structuredClone(any)\n  ) :\n  (any, options) => deserialize(serialize(any, options));\n  /* c8 ignore stop */\n\nexport {deserialize, serialize};\n","export const VOID       = -1;\nexport const PRIMITIVE  = 0;\nexport const ARRAY      = 1;\nexport const OBJECT     = 2;\nexport const DATE       = 3;\nexport const REGEXP     = 4;\nexport const MAP        = 5;\nexport const SET        = 6;\nexport const ERROR      = 7;\nexport const BIGINT     = 8;\n// export const SYMBOL = 9;\n","/**\n * @typedef {import('mdast').Nodes} Nodes\n *\n * @typedef Options\n *   Configuration (optional).\n * @property {boolean | null | undefined} [includeImageAlt=true]\n *   Whether to use `alt` for `image`s (default: `true`).\n * @property {boolean | null | undefined} [includeHtml=true]\n *   Whether to use `value` of HTML (default: `true`).\n */\n\n/** @type {Options} */\nconst emptyOptions = {}\n\n/**\n * Get the text content of a node or list of nodes.\n *\n * Prefers the node’s plain-text fields, otherwise serializes its children,\n * and if the given value is an array, serialize the nodes in it.\n *\n * @param {unknown} [value]\n *   Thing to serialize, typically `Node`.\n * @param {Options | null | undefined} [options]\n *   Configuration (optional).\n * @returns {string}\n *   Serialized `value`.\n */\nexport function toString(value, options) {\n  const settings = options || emptyOptions\n  const includeImageAlt =\n    typeof settings.includeImageAlt === 'boolean'\n      ? settings.includeImageAlt\n      : true\n  const includeHtml =\n    typeof settings.includeHtml === 'boolean' ? settings.includeHtml : true\n\n  return one(value, includeImageAlt, includeHtml)\n}\n\n/**\n * One node or several nodes.\n *\n * @param {unknown} value\n *   Thing to serialize.\n * @param {boolean} includeImageAlt\n *   Include image `alt`s.\n * @param {boolean} includeHtml\n *   Include HTML.\n * @returns {string}\n *   Serialized node.\n */\nfunction one(value, includeImageAlt, includeHtml) {\n  if (node(value)) {\n    if ('value' in value) {\n      return value.type === 'html' && !includeHtml ? '' : value.value\n    }\n\n    if (includeImageAlt && 'alt' in value && value.alt) {\n      return value.alt\n    }\n\n    if ('children' in value) {\n      return all(value.children, includeImageAlt, includeHtml)\n    }\n  }\n\n  if (Array.isArray(value)) {\n    return all(value, includeImageAlt, includeHtml)\n  }\n\n  return ''\n}\n\n/**\n * Serialize a list of nodes.\n *\n * @param {Array<unknown>} values\n *   Thing to serialize.\n * @param {boolean} includeImageAlt\n *   Include image `alt`s.\n * @param {boolean} includeHtml\n *   Include HTML.\n * @returns {string}\n *   Serialized nodes.\n */\nfunction all(values, includeImageAlt, includeHtml) {\n  /** @type {Array<string>} */\n  const result = []\n  let index = -1\n\n  while (++index < values.length) {\n    result[index] = one(values[index], includeImageAlt, includeHtml)\n  }\n\n  return result.join('')\n}\n\n/**\n * Check if `value` looks like a node.\n *\n * @param {unknown} value\n *   Thing.\n * @returns {value is Nodes}\n *   Whether `value` is a node.\n */\nfunction node(value) {\n  return Boolean(value && typeof value === 'object')\n}\n","/**\n * @import {\n *   Construct,\n *   State,\n *   TokenizeContext,\n *   Tokenizer\n * } from 'micromark-util-types'\n */\n\nimport { factorySpace } from 'micromark-factory-space';\nimport { markdownLineEnding, markdownSpace } from 'micromark-util-character';\n/** @type {Construct} */\nexport const blankLine = {\n  partial: true,\n  tokenize: tokenizeBlankLine\n};\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeBlankLine(effects, ok, nok) {\n  return start;\n\n  /**\n   * Start of blank line.\n   *\n   * > 👉 **Note**: `␠` represents a space character.\n   *\n   * ```markdown\n   * > | ␠␠␊\n   *     ^\n   * > | ␊\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    return markdownSpace(code) ? factorySpace(effects, after, \"linePrefix\")(code) : after(code);\n  }\n\n  /**\n   * At eof/eol, after optional whitespace.\n   *\n   * > 👉 **Note**: `␠` represents a space character.\n   *\n   * ```markdown\n   * > | ␠␠␊\n   *       ^\n   * > | ␊\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function after(code) {\n    return code === null || markdownLineEnding(code) ? ok(code) : nok(code);\n  }\n}","/**\n * @import {Effects, State, TokenType} from 'micromark-util-types'\n */\n\nimport { markdownSpace } from 'micromark-util-character';\n\n// To do: implement `spaceOrTab`, `spaceOrTabMinMax`, `spaceOrTabWithOptions`.\n\n/**\n * Parse spaces and tabs.\n *\n * There is no `nok` parameter:\n *\n * *   spaces in markdown are often optional, in which case this factory can be\n *     used and `ok` will be switched to whether spaces were found or not\n * *   one line ending or space can be detected with `markdownSpace(code)` right\n *     before using `factorySpace`\n *\n * ###### Examples\n *\n * Where `␉` represents a tab (plus how much it expands) and `␠` represents a\n * single space.\n *\n * ```markdown\n * ␉\n * ␠␠␠␠\n * ␉␠\n * ```\n *\n * @param {Effects} effects\n *   Context.\n * @param {State} ok\n *   State switched to when successful.\n * @param {TokenType} type\n *   Type (`' \\t'`).\n * @param {number | undefined} [max=Infinity]\n *   Max (exclusive).\n * @returns {State}\n *   Start state.\n */\nexport function factorySpace(effects, ok, type, max) {\n  const limit = max ? max - 1 : Number.POSITIVE_INFINITY;\n  let size = 0;\n  return start;\n\n  /** @type {State} */\n  function start(code) {\n    if (markdownSpace(code)) {\n      effects.enter(type);\n      return prefix(code);\n    }\n    return ok(code);\n  }\n\n  /** @type {State} */\n  function prefix(code) {\n    if (markdownSpace(code) && size++ < limit) {\n      effects.consume(code);\n      return prefix;\n    }\n    effects.exit(type);\n    return ok(code);\n  }\n}","/**\n * @import {Code} from 'micromark-util-types'\n */\n\n/**\n * Check whether the character code represents an ASCII alpha (`a` through `z`,\n * case insensitive).\n *\n * An **ASCII alpha** is an ASCII upper alpha or ASCII lower alpha.\n *\n * An **ASCII upper alpha** is a character in the inclusive range U+0041 (`A`)\n * to U+005A (`Z`).\n *\n * An **ASCII lower alpha** is a character in the inclusive range U+0061 (`a`)\n * to U+007A (`z`).\n *\n * @param code\n *   Code.\n * @returns {boolean}\n *   Whether it matches.\n */\nexport const asciiAlpha = regexCheck(/[A-Za-z]/);\n\n/**\n * Check whether the character code represents an ASCII alphanumeric (`a`\n * through `z`, case insensitive, or `0` through `9`).\n *\n * An **ASCII alphanumeric** is an ASCII digit (see `asciiDigit`) or ASCII alpha\n * (see `asciiAlpha`).\n *\n * @param code\n *   Code.\n * @returns {boolean}\n *   Whether it matches.\n */\nexport const asciiAlphanumeric = regexCheck(/[\\dA-Za-z]/);\n\n/**\n * Check whether the character code represents an ASCII atext.\n *\n * atext is an ASCII alphanumeric (see `asciiAlphanumeric`), or a character in\n * the inclusive ranges U+0023 NUMBER SIGN (`#`) to U+0027 APOSTROPHE (`'`),\n * U+002A ASTERISK (`*`), U+002B PLUS SIGN (`+`), U+002D DASH (`-`), U+002F\n * SLASH (`/`), U+003D EQUALS TO (`=`), U+003F QUESTION MARK (`?`), U+005E\n * CARET (`^`) to U+0060 GRAVE ACCENT (`` ` ``), or U+007B LEFT CURLY BRACE\n * (`{`) to U+007E TILDE (`~`).\n *\n * See:\n * **\\[RFC5322]**:\n * [Internet Message Format](https://tools.ietf.org/html/rfc5322).\n * P. Resnick.\n * IETF.\n *\n * @param code\n *   Code.\n * @returns {boolean}\n *   Whether it matches.\n */\nexport const asciiAtext = regexCheck(/[#-'*+\\--9=?A-Z^-~]/);\n\n/**\n * Check whether a character code is an ASCII control character.\n *\n * An **ASCII control** is a character in the inclusive range U+0000 NULL (NUL)\n * to U+001F (US), or U+007F (DEL).\n *\n * @param {Code} code\n *   Code.\n * @returns {boolean}\n *   Whether it matches.\n */\nexport function asciiControl(code) {\n  return (\n    // Special whitespace codes (which have negative values), C0 and Control\n    // character DEL\n    code !== null && (code < 32 || code === 127)\n  );\n}\n\n/**\n * Check whether the character code represents an ASCII digit (`0` through `9`).\n *\n * An **ASCII digit** is a character in the inclusive range U+0030 (`0`) to\n * U+0039 (`9`).\n *\n * @param code\n *   Code.\n * @returns {boolean}\n *   Whether it matches.\n */\nexport const asciiDigit = regexCheck(/\\d/);\n\n/**\n * Check whether the character code represents an ASCII hex digit (`a` through\n * `f`, case insensitive, or `0` through `9`).\n *\n * An **ASCII hex digit** is an ASCII digit (see `asciiDigit`), ASCII upper hex\n * digit, or an ASCII lower hex digit.\n *\n * An **ASCII upper hex digit** is a character in the inclusive range U+0041\n * (`A`) to U+0046 (`F`).\n *\n * An **ASCII lower hex digit** is a character in the inclusive range U+0061\n * (`a`) to U+0066 (`f`).\n *\n * @param code\n *   Code.\n * @returns {boolean}\n *   Whether it matches.\n */\nexport const asciiHexDigit = regexCheck(/[\\dA-Fa-f]/);\n\n/**\n * Check whether the character code represents ASCII punctuation.\n *\n * An **ASCII punctuation** is a character in the inclusive ranges U+0021\n * EXCLAMATION MARK (`!`) to U+002F SLASH (`/`), U+003A COLON (`:`) to U+0040 AT\n * SIGN (`@`), U+005B LEFT SQUARE BRACKET (`[`) to U+0060 GRAVE ACCENT\n * (`` ` ``), or U+007B LEFT CURLY BRACE (`{`) to U+007E TILDE (`~`).\n *\n * @param code\n *   Code.\n * @returns {boolean}\n *   Whether it matches.\n */\nexport const asciiPunctuation = regexCheck(/[!-/:-@[-`{-~]/);\n\n/**\n * Check whether a character code is a markdown line ending.\n *\n * A **markdown line ending** is the virtual characters M-0003 CARRIAGE RETURN\n * LINE FEED (CRLF), M-0004 LINE FEED (LF) and M-0005 CARRIAGE RETURN (CR).\n *\n * In micromark, the actual character U+000A LINE FEED (LF) and U+000D CARRIAGE\n * RETURN (CR) are replaced by these virtual characters depending on whether\n * they occurred together.\n *\n * @param {Code} code\n *   Code.\n * @returns {boolean}\n *   Whether it matches.\n */\nexport function markdownLineEnding(code) {\n  return code !== null && code < -2;\n}\n\n/**\n * Check whether a character code is a markdown line ending (see\n * `markdownLineEnding`) or markdown space (see `markdownSpace`).\n *\n * @param {Code} code\n *   Code.\n * @returns {boolean}\n *   Whether it matches.\n */\nexport function markdownLineEndingOrSpace(code) {\n  return code !== null && (code < 0 || code === 32);\n}\n\n/**\n * Check whether a character code is a markdown space.\n *\n * A **markdown space** is the concrete character U+0020 SPACE (SP) and the\n * virtual characters M-0001 VIRTUAL SPACE (VS) and M-0002 HORIZONTAL TAB (HT).\n *\n * In micromark, the actual character U+0009 CHARACTER TABULATION (HT) is\n * replaced by one M-0002 HORIZONTAL TAB (HT) and between 0 and 3 M-0001 VIRTUAL\n * SPACE (VS) characters, depending on the column at which the tab occurred.\n *\n * @param {Code} code\n *   Code.\n * @returns {boolean}\n *   Whether it matches.\n */\nexport function markdownSpace(code) {\n  return code === -2 || code === -1 || code === 32;\n}\n\n// Size note: removing ASCII from the regex and using `asciiPunctuation` here\n// In fact adds to the bundle size.\n/**\n * Check whether the character code represents Unicode punctuation.\n *\n * A **Unicode punctuation** is a character in the Unicode `Pc` (Punctuation,\n * Connector), `Pd` (Punctuation, Dash), `Pe` (Punctuation, Close), `Pf`\n * (Punctuation, Final quote), `Pi` (Punctuation, Initial quote), `Po`\n * (Punctuation, Other), or `Ps` (Punctuation, Open) categories, or an ASCII\n * punctuation (see `asciiPunctuation`).\n *\n * See:\n * **\\[UNICODE]**:\n * [The Unicode Standard](https://www.unicode.org/versions/).\n * Unicode Consortium.\n *\n * @param code\n *   Code.\n * @returns\n *   Whether it matches.\n */\nexport const unicodePunctuation = regexCheck(/\\p{P}|\\p{S}/u);\n\n/**\n * Check whether the character code represents Unicode whitespace.\n *\n * Note that this does handle micromark specific markdown whitespace characters.\n * See `markdownLineEndingOrSpace` to check that.\n *\n * A **Unicode whitespace** is a character in the Unicode `Zs` (Separator,\n * Space) category, or U+0009 CHARACTER TABULATION (HT), U+000A LINE FEED (LF),\n * U+000C (FF), or U+000D CARRIAGE RETURN (CR) (**\\[UNICODE]**).\n *\n * See:\n * **\\[UNICODE]**:\n * [The Unicode Standard](https://www.unicode.org/versions/).\n * Unicode Consortium.\n *\n * @param code\n *   Code.\n * @returns\n *   Whether it matches.\n */\nexport const unicodeWhitespace = regexCheck(/\\s/);\n\n/**\n * Create a code check from a regex.\n *\n * @param {RegExp} regex\n *   Expression.\n * @returns {(code: Code) => boolean}\n *   Check.\n */\nfunction regexCheck(regex) {\n  return check;\n\n  /**\n   * Check whether a code matches the bound regex.\n   *\n   * @param {Code} code\n   *   Character code.\n   * @returns {boolean}\n   *   Whether the character code matches the bound regex.\n   */\n  function check(code) {\n    return code !== null && code > -1 && regex.test(String.fromCharCode(code));\n  }\n}","/**\n * Like `Array#splice`, but smarter for giant arrays.\n *\n * `Array#splice` takes all items to be inserted as individual argument which\n * causes a stack overflow in V8 when trying to insert 100k items for instance.\n *\n * Otherwise, this does not return the removed items, and takes `items` as an\n * array instead of rest parameters.\n *\n * @template {unknown} T\n *   Item type.\n * @param {Array<T>} list\n *   List to operate on.\n * @param {number} start\n *   Index to remove/insert at (can be negative).\n * @param {number} remove\n *   Number of items to remove.\n * @param {Array<T>} items\n *   Items to inject into `list`.\n * @returns {undefined}\n *   Nothing.\n */\nexport function splice(list, start, remove, items) {\n  const end = list.length;\n  let chunkStart = 0;\n  /** @type {Array<unknown>} */\n  let parameters;\n\n  // Make start between zero and `end` (included).\n  if (start < 0) {\n    start = -start > end ? 0 : end + start;\n  } else {\n    start = start > end ? end : start;\n  }\n  remove = remove > 0 ? remove : 0;\n\n  // No need to chunk the items if there’s only a couple (10k) items.\n  if (items.length < 10000) {\n    parameters = Array.from(items);\n    parameters.unshift(start, remove);\n    // @ts-expect-error Hush, it’s fine.\n    list.splice(...parameters);\n  } else {\n    // Delete `remove` items starting from `start`\n    if (remove) list.splice(start, remove);\n\n    // Insert the items in chunks to not cause stack overflows.\n    while (chunkStart < items.length) {\n      parameters = items.slice(chunkStart, chunkStart + 10000);\n      parameters.unshift(start, 0);\n      // @ts-expect-error Hush, it’s fine.\n      list.splice(...parameters);\n      chunkStart += 10000;\n      start += 10000;\n    }\n  }\n}\n\n/**\n * Append `items` (an array) at the end of `list` (another array).\n * When `list` was empty, returns `items` instead.\n *\n * This prevents a potentially expensive operation when `list` is empty,\n * and adds items in batches to prevent V8 from hanging.\n *\n * @template {unknown} T\n *   Item type.\n * @param {Array<T>} list\n *   List to operate on.\n * @param {Array<T>} items\n *   Items to add to `list`.\n * @returns {Array<T>}\n *   Either `list` or `items`.\n */\nexport function push(list, items) {\n  if (list.length > 0) {\n    splice(list, list.length, 0, items);\n    return list;\n  }\n  return items;\n}","/**\n * @import {\n *   Extension,\n *   Handles,\n *   HtmlExtension,\n *   NormalizedExtension\n * } from 'micromark-util-types'\n */\n\nimport {splice} from 'micromark-util-chunked'\n\nconst hasOwnProperty = {}.hasOwnProperty\n\n/**\n * Combine multiple syntax extensions into one.\n *\n * @param {ReadonlyArray<Extension>} extensions\n *   List of syntax extensions.\n * @returns {NormalizedExtension}\n *   A single combined extension.\n */\nexport function combineExtensions(extensions) {\n  /** @type {NormalizedExtension} */\n  const all = {}\n  let index = -1\n\n  while (++index < extensions.length) {\n    syntaxExtension(all, extensions[index])\n  }\n\n  return all\n}\n\n/**\n * Merge `extension` into `all`.\n *\n * @param {NormalizedExtension} all\n *   Extension to merge into.\n * @param {Extension} extension\n *   Extension to merge.\n * @returns {undefined}\n *   Nothing.\n */\nfunction syntaxExtension(all, extension) {\n  /** @type {keyof Extension} */\n  let hook\n\n  for (hook in extension) {\n    const maybe = hasOwnProperty.call(all, hook) ? all[hook] : undefined\n    /** @type {Record<string, unknown>} */\n    const left = maybe || (all[hook] = {})\n    /** @type {Record<string, unknown> | undefined} */\n    const right = extension[hook]\n    /** @type {string} */\n    let code\n\n    if (right) {\n      for (code in right) {\n        if (!hasOwnProperty.call(left, code)) left[code] = []\n        const value = right[code]\n        constructs(\n          // @ts-expect-error Looks like a list.\n          left[code],\n          Array.isArray(value) ? value : value ? [value] : []\n        )\n      }\n    }\n  }\n}\n\n/**\n * Merge `list` into `existing` (both lists of constructs).\n * Mutates `existing`.\n *\n * @param {Array<unknown>} existing\n *   List of constructs to merge into.\n * @param {Array<unknown>} list\n *   List of constructs to merge.\n * @returns {undefined}\n *   Nothing.\n */\nfunction constructs(existing, list) {\n  let index = -1\n  /** @type {Array<unknown>} */\n  const before = []\n\n  while (++index < list.length) {\n    // @ts-expect-error Looks like an object.\n    ;(list[index].add === 'after' ? existing : before).push(list[index])\n  }\n\n  splice(existing, 0, 0, before)\n}\n\n/**\n * Combine multiple HTML extensions into one.\n *\n * @param {ReadonlyArray<HtmlExtension>} htmlExtensions\n *   List of HTML extensions.\n * @returns {HtmlExtension}\n *   Single combined HTML extension.\n */\nexport function combineHtmlExtensions(htmlExtensions) {\n  /** @type {HtmlExtension} */\n  const handlers = {}\n  let index = -1\n\n  while (++index < htmlExtensions.length) {\n    htmlExtension(handlers, htmlExtensions[index])\n  }\n\n  return handlers\n}\n\n/**\n * Merge `extension` into `all`.\n *\n * @param {HtmlExtension} all\n *   Extension to merge into.\n * @param {HtmlExtension} extension\n *   Extension to merge.\n * @returns {undefined}\n *   Nothing.\n */\nfunction htmlExtension(all, extension) {\n  /** @type {keyof HtmlExtension} */\n  let hook\n\n  for (hook in extension) {\n    const maybe = hasOwnProperty.call(all, hook) ? all[hook] : undefined\n    const left = maybe || (all[hook] = {})\n    const right = extension[hook]\n    /** @type {keyof Handles} */\n    let type\n\n    if (right) {\n      for (type in right) {\n        // @ts-expect-error assume document vs regular handler are managed correctly.\n        left[type] = right[type]\n      }\n    }\n  }\n}\n","/**\n * Turn the number (in string form as either hexa- or plain decimal) coming from\n * a numeric character reference into a character.\n *\n * Sort of like `String.fromCodePoint(Number.parseInt(value, base))`, but makes\n * non-characters and control characters safe.\n *\n * @param {string} value\n *   Value to decode.\n * @param {number} base\n *   Numeric base.\n * @returns {string}\n *   Character.\n */\nexport function decodeNumericCharacterReference(value, base) {\n  const code = Number.parseInt(value, base);\n  if (\n  // C0 except for HT, LF, FF, CR, space.\n  code < 9 || code === 11 || code > 13 && code < 32 ||\n  // Control character (DEL) of C0, and C1 controls.\n  code > 126 && code < 160 ||\n  // Lone high surrogates and low surrogates.\n  code > 55_295 && code < 57_344 ||\n  // Noncharacters.\n  code > 64_975 && code < 65_008 || /* eslint-disable no-bitwise */\n  (code & 65_535) === 65_535 || (code & 65_535) === 65_534 || /* eslint-enable no-bitwise */\n  // Out of range\n  code > 1_114_111) {\n    return \"\\uFFFD\";\n  }\n  return String.fromCodePoint(code);\n}","import { decodeNamedCharacterReference } from 'decode-named-character-reference';\nimport { decodeNumericCharacterReference } from 'micromark-util-decode-numeric-character-reference';\nconst characterEscapeOrReference = /\\\\([!-/:-@[-`{-~])|&(#(?:\\d{1,7}|x[\\da-f]{1,6})|[\\da-z]{1,31});/gi;\n\n/**\n * Decode markdown strings (which occur in places such as fenced code info\n * strings, destinations, labels, and titles).\n *\n * The “string” content type allows character escapes and -references.\n * This decodes those.\n *\n * @param {string} value\n *   Value to decode.\n * @returns {string}\n *   Decoded value.\n */\nexport function decodeString(value) {\n  return value.replace(characterEscapeOrReference, decode);\n}\n\n/**\n * @param {string} $0\n *   Match.\n * @param {string} $1\n *   Character escape.\n * @param {string} $2\n *   Character reference.\n * @returns {string}\n *   Decoded value\n */\nfunction decode($0, $1, $2) {\n  if ($1) {\n    // Escape.\n    return $1;\n  }\n\n  // Reference.\n  const head = $2.charCodeAt(0);\n  if (head === 35) {\n    const head = $2.charCodeAt(1);\n    const hex = head === 120 || head === 88;\n    return decodeNumericCharacterReference($2.slice(hex ? 2 : 1), hex ? 16 : 10);\n  }\n  return decodeNamedCharacterReference($2) || $0;\n}","/**\n * Normalize an identifier (as found in references, definitions).\n *\n * Collapses markdown whitespace, trim, and then lower- and uppercase.\n *\n * Some characters are considered “uppercase”, such as U+03F4 (`ϴ`), but if their\n * lowercase counterpart (U+03B8 (`θ`)) is uppercased will result in a different\n * uppercase character (U+0398 (`Θ`)).\n * So, to get a canonical form, we perform both lower- and uppercase.\n *\n * Using uppercase last makes sure keys will never interact with default\n * prototypal values (such as `constructor`): nothing in the prototype of\n * `Object` is uppercase.\n *\n * @param {string} value\n *   Identifier to normalize.\n * @returns {string}\n *   Normalized identifier.\n */\nexport function normalizeIdentifier(value) {\n  return value\n  // Collapse markdown whitespace.\n  .replace(/[\\t\\n\\r ]+/g, \" \")\n  // Trim.\n  .replace(/^ | $/g, '')\n  // Some characters are considered “uppercase”, but if their lowercase\n  // counterpart is uppercased will result in a different uppercase\n  // character.\n  // Hence, to get that form, we perform both lower- and uppercase.\n  // Upper case makes sure keys will not interact with default prototypal\n  // methods: no method is uppercase.\n  .toLowerCase().toUpperCase();\n}","/**\n * @import {Event, Resolver, TokenizeContext} from 'micromark-util-types'\n */\n\n/**\n * Call all `resolveAll`s.\n *\n * @param {ReadonlyArray<{resolveAll?: Resolver | undefined}>} constructs\n *   List of constructs, optionally with `resolveAll`s.\n * @param {Array<Event>} events\n *   List of events.\n * @param {TokenizeContext} context\n *   Context used by `tokenize`.\n * @returns {Array<Event>}\n *   Changed events.\n */\nexport function resolveAll(constructs, events, context) {\n  /** @type {Array<Resolver>} */\n  const called = []\n  let index = -1\n\n  while (++index < constructs.length) {\n    const resolve = constructs[index].resolveAll\n\n    if (resolve && !called.includes(resolve)) {\n      events = resolve(events, context)\n      called.push(resolve)\n    }\n  }\n\n  return events\n}\n","import { asciiAlphanumeric } from 'micromark-util-character';\nimport { encode } from 'micromark-util-encode';\n/**\n * Make a value safe for injection as a URL.\n *\n * This encodes unsafe characters with percent-encoding and skips already\n * encoded sequences (see `normalizeUri`).\n * Further unsafe characters are encoded as character references (see\n * `micromark-util-encode`).\n *\n * A regex of allowed protocols can be given, in which case the URL is\n * sanitized.\n * For example, `/^(https?|ircs?|mailto|xmpp)$/i` can be used for `a[href]`, or\n * `/^https?$/i` for `img[src]` (this is what `github.com` allows).\n * If the URL includes an unknown protocol (one not matched by `protocol`, such\n * as a dangerous example, `javascript:`), the value is ignored.\n *\n * @param {string | null | undefined} url\n *   URI to sanitize.\n * @param {RegExp | null | undefined} [protocol]\n *   Allowed protocols.\n * @returns {string}\n *   Sanitized URI.\n */\nexport function sanitizeUri(url, protocol) {\n  const value = encode(normalizeUri(url || ''));\n  if (!protocol) {\n    return value;\n  }\n  const colon = value.indexOf(':');\n  const questionMark = value.indexOf('?');\n  const numberSign = value.indexOf('#');\n  const slash = value.indexOf('/');\n  if (\n  // If there is no protocol, it’s relative.\n  colon < 0 ||\n  // If the first colon is after a `?`, `#`, or `/`, it’s not a protocol.\n  slash > -1 && colon > slash || questionMark > -1 && colon > questionMark || numberSign > -1 && colon > numberSign ||\n  // It is a protocol, it should be allowed.\n  protocol.test(value.slice(0, colon))) {\n    return value;\n  }\n  return '';\n}\n\n/**\n * Normalize a URL.\n *\n * Encode unsafe characters with percent-encoding, skipping already encoded\n * sequences.\n *\n * @param {string} value\n *   URI to normalize.\n * @returns {string}\n *   Normalized URI.\n */\nexport function normalizeUri(value) {\n  /** @type {Array<string>} */\n  const result = [];\n  let index = -1;\n  let start = 0;\n  let skip = 0;\n  while (++index < value.length) {\n    const code = value.charCodeAt(index);\n    /** @type {string} */\n    let replace = '';\n\n    // A correct percent encoded value.\n    if (code === 37 && asciiAlphanumeric(value.charCodeAt(index + 1)) && asciiAlphanumeric(value.charCodeAt(index + 2))) {\n      skip = 2;\n    }\n    // ASCII.\n    else if (code < 128) {\n      if (!/[!#$&-;=?-Z_a-z~]/.test(String.fromCharCode(code))) {\n        replace = String.fromCharCode(code);\n      }\n    }\n    // Astral.\n    else if (code > 55_295 && code < 57_344) {\n      const next = value.charCodeAt(index + 1);\n\n      // A correct surrogate pair.\n      if (code < 56_320 && next > 56_319 && next < 57_344) {\n        replace = String.fromCharCode(code, next);\n        skip = 1;\n      }\n      // Lone surrogate.\n      else {\n        replace = \"\\uFFFD\";\n      }\n    }\n    // Unicode.\n    else {\n      replace = String.fromCharCode(code);\n    }\n    if (replace) {\n      result.push(value.slice(start, index), encodeURIComponent(replace));\n      start = index + skip + 1;\n      replace = '';\n    }\n    if (skip) {\n      index += skip;\n      skip = 0;\n    }\n  }\n  return result.join('') + value.slice(start);\n}","/**\n * @import {Chunk, Event, Token} from 'micromark-util-types'\n */\n\nimport { splice } from 'micromark-util-chunked';\nimport { SpliceBuffer } from './lib/splice-buffer.js';\n\n// Hidden API exposed for testing.\nexport { SpliceBuffer } from './lib/splice-buffer.js';\n\n/**\n * Tokenize subcontent.\n *\n * @param {Array<Event>} eventsArray\n *   List of events.\n * @returns {boolean}\n *   Whether subtokens were found.\n */\n// eslint-disable-next-line complexity\nexport function subtokenize(eventsArray) {\n  /** @type {Record<string, number>} */\n  const jumps = {};\n  let index = -1;\n  /** @type {Event} */\n  let event;\n  /** @type {number | undefined} */\n  let lineIndex;\n  /** @type {number} */\n  let otherIndex;\n  /** @type {Event} */\n  let otherEvent;\n  /** @type {Array<Event>} */\n  let parameters;\n  /** @type {Array<Event>} */\n  let subevents;\n  /** @type {boolean | undefined} */\n  let more;\n  const events = new SpliceBuffer(eventsArray);\n  while (++index < events.length) {\n    while (index in jumps) {\n      index = jumps[index];\n    }\n    event = events.get(index);\n\n    // Add a hook for the GFM tasklist extension, which needs to know if text\n    // is in the first content of a list item.\n    if (index && event[1].type === \"chunkFlow\" && events.get(index - 1)[1].type === \"listItemPrefix\") {\n      subevents = event[1]._tokenizer.events;\n      otherIndex = 0;\n      if (otherIndex < subevents.length && subevents[otherIndex][1].type === \"lineEndingBlank\") {\n        otherIndex += 2;\n      }\n      if (otherIndex < subevents.length && subevents[otherIndex][1].type === \"content\") {\n        while (++otherIndex < subevents.length) {\n          if (subevents[otherIndex][1].type === \"content\") {\n            break;\n          }\n          if (subevents[otherIndex][1].type === \"chunkText\") {\n            subevents[otherIndex][1]._isInFirstContentOfListItem = true;\n            otherIndex++;\n          }\n        }\n      }\n    }\n\n    // Enter.\n    if (event[0] === 'enter') {\n      if (event[1].contentType) {\n        Object.assign(jumps, subcontent(events, index));\n        index = jumps[index];\n        more = true;\n      }\n    }\n    // Exit.\n    else if (event[1]._container) {\n      otherIndex = index;\n      lineIndex = undefined;\n      while (otherIndex--) {\n        otherEvent = events.get(otherIndex);\n        if (otherEvent[1].type === \"lineEnding\" || otherEvent[1].type === \"lineEndingBlank\") {\n          if (otherEvent[0] === 'enter') {\n            if (lineIndex) {\n              events.get(lineIndex)[1].type = \"lineEndingBlank\";\n            }\n            otherEvent[1].type = \"lineEnding\";\n            lineIndex = otherIndex;\n          }\n        } else if (otherEvent[1].type === \"linePrefix\") {\n          // Move past.\n        } else {\n          break;\n        }\n      }\n      if (lineIndex) {\n        // Fix position.\n        event[1].end = {\n          ...events.get(lineIndex)[1].start\n        };\n\n        // Switch container exit w/ line endings.\n        parameters = events.slice(lineIndex, index);\n        parameters.unshift(event);\n        events.splice(lineIndex, index - lineIndex + 1, parameters);\n      }\n    }\n  }\n\n  // The changes to the `events` buffer must be copied back into the eventsArray\n  splice(eventsArray, 0, Number.POSITIVE_INFINITY, events.slice(0));\n  return !more;\n}\n\n/**\n * Tokenize embedded tokens.\n *\n * @param {SpliceBuffer<Event>} events\n *   Events.\n * @param {number} eventIndex\n *   Index.\n * @returns {Record<string, number>}\n *   Gaps.\n */\nfunction subcontent(events, eventIndex) {\n  const token = events.get(eventIndex)[1];\n  const context = events.get(eventIndex)[2];\n  let startPosition = eventIndex - 1;\n  /** @type {Array<number>} */\n  const startPositions = [];\n  const tokenizer = token._tokenizer || context.parser[token.contentType](token.start);\n  const childEvents = tokenizer.events;\n  /** @type {Array<[number, number]>} */\n  const jumps = [];\n  /** @type {Record<string, number>} */\n  const gaps = {};\n  /** @type {Array<Chunk>} */\n  let stream;\n  /** @type {Token | undefined} */\n  let previous;\n  let index = -1;\n  /** @type {Token | undefined} */\n  let current = token;\n  let adjust = 0;\n  let start = 0;\n  const breaks = [start];\n\n  // Loop forward through the linked tokens to pass them in order to the\n  // subtokenizer.\n  while (current) {\n    // Find the position of the event for this token.\n    while (events.get(++startPosition)[1] !== current) {\n      // Empty.\n    }\n    startPositions.push(startPosition);\n    if (!current._tokenizer) {\n      stream = context.sliceStream(current);\n      if (!current.next) {\n        stream.push(null);\n      }\n      if (previous) {\n        tokenizer.defineSkip(current.start);\n      }\n      if (current._isInFirstContentOfListItem) {\n        tokenizer._gfmTasklistFirstContentOfListItem = true;\n      }\n      tokenizer.write(stream);\n      if (current._isInFirstContentOfListItem) {\n        tokenizer._gfmTasklistFirstContentOfListItem = undefined;\n      }\n    }\n\n    // Unravel the next token.\n    previous = current;\n    current = current.next;\n  }\n\n  // Now, loop back through all events (and linked tokens), to figure out which\n  // parts belong where.\n  current = token;\n  while (++index < childEvents.length) {\n    if (\n    // Find a void token that includes a break.\n    childEvents[index][0] === 'exit' && childEvents[index - 1][0] === 'enter' && childEvents[index][1].type === childEvents[index - 1][1].type && childEvents[index][1].start.line !== childEvents[index][1].end.line) {\n      start = index + 1;\n      breaks.push(start);\n      // Help GC.\n      current._tokenizer = undefined;\n      current.previous = undefined;\n      current = current.next;\n    }\n  }\n\n  // Help GC.\n  tokenizer.events = [];\n\n  // If there’s one more token (which is the cases for lines that end in an\n  // EOF), that’s perfect: the last point we found starts it.\n  // If there isn’t then make sure any remaining content is added to it.\n  if (current) {\n    // Help GC.\n    current._tokenizer = undefined;\n    current.previous = undefined;\n  } else {\n    breaks.pop();\n  }\n\n  // Now splice the events from the subtokenizer into the current events,\n  // moving back to front so that splice indices aren’t affected.\n  index = breaks.length;\n  while (index--) {\n    const slice = childEvents.slice(breaks[index], breaks[index + 1]);\n    const start = startPositions.pop();\n    jumps.push([start, start + slice.length - 1]);\n    events.splice(start, 2, slice);\n  }\n  jumps.reverse();\n  index = -1;\n  while (++index < jumps.length) {\n    gaps[adjust + jumps[index][0]] = adjust + jumps[index][1];\n    adjust += jumps[index][1] - jumps[index][0] - 1;\n  }\n  return gaps;\n}","/**\n * Some of the internal operations of micromark do lots of editing\n * operations on very large arrays. This runs into problems with two\n * properties of most circa-2020 JavaScript interpreters:\n *\n *  - Array-length modifications at the high end of an array (push/pop) are\n *    expected to be common and are implemented in (amortized) time\n *    proportional to the number of elements added or removed, whereas\n *    other operations (shift/unshift and splice) are much less efficient.\n *  - Function arguments are passed on the stack, so adding tens of thousands\n *    of elements to an array with `arr.push(...newElements)` will frequently\n *    cause stack overflows. (see <https://stackoverflow.com/questions/22123769/rangeerror-maximum-call-stack-size-exceeded-why>)\n *\n * SpliceBuffers are an implementation of gap buffers, which are a\n * generalization of the \"queue made of two stacks\" idea. The splice buffer\n * maintains a cursor, and moving the cursor has cost proportional to the\n * distance the cursor moves, but inserting, deleting, or splicing in\n * new information at the cursor is as efficient as the push/pop operation.\n * This allows for an efficient sequence of splices (or pushes, pops, shifts,\n * or unshifts) as long such edits happen at the same part of the array or\n * generally sweep through the array from the beginning to the end.\n *\n * The interface for splice buffers also supports large numbers of inputs by\n * passing a single array argument rather passing multiple arguments on the\n * function call stack.\n *\n * @template T\n *   Item type.\n */\nexport class SpliceBuffer {\n  /**\n   * @param {ReadonlyArray<T> | null | undefined} [initial]\n   *   Initial items (optional).\n   * @returns\n   *   Splice buffer.\n   */\n  constructor(initial) {\n    /** @type {Array<T>} */\n    this.left = initial ? [...initial] : [];\n    /** @type {Array<T>} */\n    this.right = [];\n  }\n\n  /**\n   * Array access;\n   * does not move the cursor.\n   *\n   * @param {number} index\n   *   Index.\n   * @return {T}\n   *   Item.\n   */\n  get(index) {\n    if (index < 0 || index >= this.left.length + this.right.length) {\n      throw new RangeError('Cannot access index `' + index + '` in a splice buffer of size `' + (this.left.length + this.right.length) + '`');\n    }\n    if (index < this.left.length) return this.left[index];\n    return this.right[this.right.length - index + this.left.length - 1];\n  }\n\n  /**\n   * The length of the splice buffer, one greater than the largest index in the\n   * array.\n   */\n  get length() {\n    return this.left.length + this.right.length;\n  }\n\n  /**\n   * Remove and return `list[0]`;\n   * moves the cursor to `0`.\n   *\n   * @returns {T | undefined}\n   *   Item, optional.\n   */\n  shift() {\n    this.setCursor(0);\n    return this.right.pop();\n  }\n\n  /**\n   * Slice the buffer to get an array;\n   * does not move the cursor.\n   *\n   * @param {number} start\n   *   Start.\n   * @param {number | null | undefined} [end]\n   *   End (optional).\n   * @returns {Array<T>}\n   *   Array of items.\n   */\n  slice(start, end) {\n    /** @type {number} */\n    const stop = end === null || end === undefined ? Number.POSITIVE_INFINITY : end;\n    if (stop < this.left.length) {\n      return this.left.slice(start, stop);\n    }\n    if (start > this.left.length) {\n      return this.right.slice(this.right.length - stop + this.left.length, this.right.length - start + this.left.length).reverse();\n    }\n    return this.left.slice(start).concat(this.right.slice(this.right.length - stop + this.left.length).reverse());\n  }\n\n  /**\n   * Mimics the behavior of Array.prototype.splice() except for the change of\n   * interface necessary to avoid segfaults when patching in very large arrays.\n   *\n   * This operation moves cursor is moved to `start` and results in the cursor\n   * placed after any inserted items.\n   *\n   * @param {number} start\n   *   Start;\n   *   zero-based index at which to start changing the array;\n   *   negative numbers count backwards from the end of the array and values\n   *   that are out-of bounds are clamped to the appropriate end of the array.\n   * @param {number | null | undefined} [deleteCount=0]\n   *   Delete count (default: `0`);\n   *   maximum number of elements to delete, starting from start.\n   * @param {Array<T> | null | undefined} [items=[]]\n   *   Items to include in place of the deleted items (default: `[]`).\n   * @return {Array<T>}\n   *   Any removed items.\n   */\n  splice(start, deleteCount, items) {\n    /** @type {number} */\n    const count = deleteCount || 0;\n    this.setCursor(Math.trunc(start));\n    const removed = this.right.splice(this.right.length - count, Number.POSITIVE_INFINITY);\n    if (items) chunkedPush(this.left, items);\n    return removed.reverse();\n  }\n\n  /**\n   * Remove and return the highest-numbered item in the array, so\n   * `list[list.length - 1]`;\n   * Moves the cursor to `length`.\n   *\n   * @returns {T | undefined}\n   *   Item, optional.\n   */\n  pop() {\n    this.setCursor(Number.POSITIVE_INFINITY);\n    return this.left.pop();\n  }\n\n  /**\n   * Inserts a single item to the high-numbered side of the array;\n   * moves the cursor to `length`.\n   *\n   * @param {T} item\n   *   Item.\n   * @returns {undefined}\n   *   Nothing.\n   */\n  push(item) {\n    this.setCursor(Number.POSITIVE_INFINITY);\n    this.left.push(item);\n  }\n\n  /**\n   * Inserts many items to the high-numbered side of the array.\n   * Moves the cursor to `length`.\n   *\n   * @param {Array<T>} items\n   *   Items.\n   * @returns {undefined}\n   *   Nothing.\n   */\n  pushMany(items) {\n    this.setCursor(Number.POSITIVE_INFINITY);\n    chunkedPush(this.left, items);\n  }\n\n  /**\n   * Inserts a single item to the low-numbered side of the array;\n   * Moves the cursor to `0`.\n   *\n   * @param {T} item\n   *   Item.\n   * @returns {undefined}\n   *   Nothing.\n   */\n  unshift(item) {\n    this.setCursor(0);\n    this.right.push(item);\n  }\n\n  /**\n   * Inserts many items to the low-numbered side of the array;\n   * moves the cursor to `0`.\n   *\n   * @param {Array<T>} items\n   *   Items.\n   * @returns {undefined}\n   *   Nothing.\n   */\n  unshiftMany(items) {\n    this.setCursor(0);\n    chunkedPush(this.right, items.reverse());\n  }\n\n  /**\n   * Move the cursor to a specific position in the array. Requires\n   * time proportional to the distance moved.\n   *\n   * If `n < 0`, the cursor will end up at the beginning.\n   * If `n > length`, the cursor will end up at the end.\n   *\n   * @param {number} n\n   *   Position.\n   * @return {undefined}\n   *   Nothing.\n   */\n  setCursor(n) {\n    if (n === this.left.length || n > this.left.length && this.right.length === 0 || n < 0 && this.left.length === 0) return;\n    if (n < this.left.length) {\n      // Move cursor to the this.left\n      const removed = this.left.splice(n, Number.POSITIVE_INFINITY);\n      chunkedPush(this.right, removed.reverse());\n    } else {\n      // Move cursor to the this.right\n      const removed = this.right.splice(this.left.length + this.right.length - n, Number.POSITIVE_INFINITY);\n      chunkedPush(this.left, removed.reverse());\n    }\n  }\n}\n\n/**\n * Avoid stack overflow by pushing items onto the stack in segments\n *\n * @template T\n *   Item type.\n * @param {Array<T>} list\n *   List to inject into.\n * @param {ReadonlyArray<T>} right\n *   Items to inject.\n * @return {undefined}\n *   Nothing.\n */\nfunction chunkedPush(list, right) {\n  /** @type {number} */\n  let chunkStart = 0;\n  if (right.length < 10000) {\n    list.push(...right);\n  } else {\n    while (chunkStart < right.length) {\n      list.push(...right.slice(chunkStart, chunkStart + 10000));\n      chunkStart += 10000;\n    }\n  }\n}","/**\n * @import {\n *   Code,\n *   Construct,\n *   State,\n *   TokenizeContext,\n *   Tokenizer\n * } from 'micromark-util-types'\n */\n\nimport { factorySpace } from 'micromark-factory-space';\nimport { markdownLineEnding, markdownSpace } from 'micromark-util-character';\n/** @type {Construct} */\nexport const thematicBreak = {\n  name: 'thematicBreak',\n  tokenize: tokenizeThematicBreak\n};\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeThematicBreak(effects, ok, nok) {\n  let size = 0;\n  /** @type {NonNullable<Code>} */\n  let marker;\n  return start;\n\n  /**\n   * Start of thematic break.\n   *\n   * ```markdown\n   * > | ***\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    effects.enter(\"thematicBreak\");\n    // To do: parse indent like `markdown-rs`.\n    return before(code);\n  }\n\n  /**\n   * After optional whitespace, at marker.\n   *\n   * ```markdown\n   * > | ***\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function before(code) {\n    marker = code;\n    return atBreak(code);\n  }\n\n  /**\n   * After something, before something else.\n   *\n   * ```markdown\n   * > | ***\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function atBreak(code) {\n    if (code === marker) {\n      effects.enter(\"thematicBreakSequence\");\n      return sequence(code);\n    }\n    if (size >= 3 && (code === null || markdownLineEnding(code))) {\n      effects.exit(\"thematicBreak\");\n      return ok(code);\n    }\n    return nok(code);\n  }\n\n  /**\n   * In sequence.\n   *\n   * ```markdown\n   * > | ***\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function sequence(code) {\n    if (code === marker) {\n      effects.consume(code);\n      size++;\n      return sequence;\n    }\n    effects.exit(\"thematicBreakSequence\");\n    return markdownSpace(code) ? factorySpace(effects, atBreak, \"whitespace\")(code) : atBreak(code);\n  }\n}","/**\n * @import {\n *   Code,\n *   Construct,\n *   Exiter,\n *   State,\n *   TokenizeContext,\n *   Tokenizer\n * } from 'micromark-util-types'\n */\n\nimport { factorySpace } from 'micromark-factory-space';\nimport { asciiDigit, markdownSpace } from 'micromark-util-character';\nimport { blankLine } from './blank-line.js';\nimport { thematicBreak } from './thematic-break.js';\n\n/** @type {Construct} */\nexport const list = {\n  continuation: {\n    tokenize: tokenizeListContinuation\n  },\n  exit: tokenizeListEnd,\n  name: 'list',\n  tokenize: tokenizeListStart\n};\n\n/** @type {Construct} */\nconst listItemPrefixWhitespaceConstruct = {\n  partial: true,\n  tokenize: tokenizeListItemPrefixWhitespace\n};\n\n/** @type {Construct} */\nconst indentConstruct = {\n  partial: true,\n  tokenize: tokenizeIndent\n};\n\n// To do: `markdown-rs` parses list items on their own and later stitches them\n// together.\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeListStart(effects, ok, nok) {\n  const self = this;\n  const tail = self.events[self.events.length - 1];\n  let initialSize = tail && tail[1].type === \"linePrefix\" ? tail[2].sliceSerialize(tail[1], true).length : 0;\n  let size = 0;\n  return start;\n\n  /** @type {State} */\n  function start(code) {\n    const kind = self.containerState.type || (code === 42 || code === 43 || code === 45 ? \"listUnordered\" : \"listOrdered\");\n    if (kind === \"listUnordered\" ? !self.containerState.marker || code === self.containerState.marker : asciiDigit(code)) {\n      if (!self.containerState.type) {\n        self.containerState.type = kind;\n        effects.enter(kind, {\n          _container: true\n        });\n      }\n      if (kind === \"listUnordered\") {\n        effects.enter(\"listItemPrefix\");\n        return code === 42 || code === 45 ? effects.check(thematicBreak, nok, atMarker)(code) : atMarker(code);\n      }\n      if (!self.interrupt || code === 49) {\n        effects.enter(\"listItemPrefix\");\n        effects.enter(\"listItemValue\");\n        return inside(code);\n      }\n    }\n    return nok(code);\n  }\n\n  /** @type {State} */\n  function inside(code) {\n    if (asciiDigit(code) && ++size < 10) {\n      effects.consume(code);\n      return inside;\n    }\n    if ((!self.interrupt || size < 2) && (self.containerState.marker ? code === self.containerState.marker : code === 41 || code === 46)) {\n      effects.exit(\"listItemValue\");\n      return atMarker(code);\n    }\n    return nok(code);\n  }\n\n  /**\n   * @type {State}\n   **/\n  function atMarker(code) {\n    effects.enter(\"listItemMarker\");\n    effects.consume(code);\n    effects.exit(\"listItemMarker\");\n    self.containerState.marker = self.containerState.marker || code;\n    return effects.check(blankLine,\n    // Can’t be empty when interrupting.\n    self.interrupt ? nok : onBlank, effects.attempt(listItemPrefixWhitespaceConstruct, endOfPrefix, otherPrefix));\n  }\n\n  /** @type {State} */\n  function onBlank(code) {\n    self.containerState.initialBlankLine = true;\n    initialSize++;\n    return endOfPrefix(code);\n  }\n\n  /** @type {State} */\n  function otherPrefix(code) {\n    if (markdownSpace(code)) {\n      effects.enter(\"listItemPrefixWhitespace\");\n      effects.consume(code);\n      effects.exit(\"listItemPrefixWhitespace\");\n      return endOfPrefix;\n    }\n    return nok(code);\n  }\n\n  /** @type {State} */\n  function endOfPrefix(code) {\n    self.containerState.size = initialSize + self.sliceSerialize(effects.exit(\"listItemPrefix\"), true).length;\n    return ok(code);\n  }\n}\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeListContinuation(effects, ok, nok) {\n  const self = this;\n  self.containerState._closeFlow = undefined;\n  return effects.check(blankLine, onBlank, notBlank);\n\n  /** @type {State} */\n  function onBlank(code) {\n    self.containerState.furtherBlankLines = self.containerState.furtherBlankLines || self.containerState.initialBlankLine;\n\n    // We have a blank line.\n    // Still, try to consume at most the items size.\n    return factorySpace(effects, ok, \"listItemIndent\", self.containerState.size + 1)(code);\n  }\n\n  /** @type {State} */\n  function notBlank(code) {\n    if (self.containerState.furtherBlankLines || !markdownSpace(code)) {\n      self.containerState.furtherBlankLines = undefined;\n      self.containerState.initialBlankLine = undefined;\n      return notInCurrentItem(code);\n    }\n    self.containerState.furtherBlankLines = undefined;\n    self.containerState.initialBlankLine = undefined;\n    return effects.attempt(indentConstruct, ok, notInCurrentItem)(code);\n  }\n\n  /** @type {State} */\n  function notInCurrentItem(code) {\n    // While we do continue, we signal that the flow should be closed.\n    self.containerState._closeFlow = true;\n    // As we’re closing flow, we’re no longer interrupting.\n    self.interrupt = undefined;\n    // Always populated by defaults.\n\n    return factorySpace(effects, effects.attempt(list, ok, nok), \"linePrefix\", self.parser.constructs.disable.null.includes('codeIndented') ? undefined : 4)(code);\n  }\n}\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeIndent(effects, ok, nok) {\n  const self = this;\n  return factorySpace(effects, afterPrefix, \"listItemIndent\", self.containerState.size + 1);\n\n  /** @type {State} */\n  function afterPrefix(code) {\n    const tail = self.events[self.events.length - 1];\n    return tail && tail[1].type === \"listItemIndent\" && tail[2].sliceSerialize(tail[1], true).length === self.containerState.size ? ok(code) : nok(code);\n  }\n}\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Exiter}\n */\nfunction tokenizeListEnd(effects) {\n  effects.exit(this.containerState.type);\n}\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeListItemPrefixWhitespace(effects, ok, nok) {\n  const self = this;\n\n  // Always populated by defaults.\n\n  return factorySpace(effects, afterPrefix, \"listItemPrefixWhitespace\", self.parser.constructs.disable.null.includes('codeIndented') ? undefined : 4 + 1);\n\n  /** @type {State} */\n  function afterPrefix(code) {\n    const tail = self.events[self.events.length - 1];\n    return !markdownSpace(code) && tail && tail[1].type === \"listItemPrefixWhitespace\" ? ok(code) : nok(code);\n  }\n}","/**\n * @import {\n *   Construct,\n *   Exiter,\n *   State,\n *   TokenizeContext,\n *   Tokenizer\n * } from 'micromark-util-types'\n */\n\nimport { factorySpace } from 'micromark-factory-space';\nimport { markdownSpace } from 'micromark-util-character';\n/** @type {Construct} */\nexport const blockQuote = {\n  continuation: {\n    tokenize: tokenizeBlockQuoteContinuation\n  },\n  exit,\n  name: 'blockQuote',\n  tokenize: tokenizeBlockQuoteStart\n};\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeBlockQuoteStart(effects, ok, nok) {\n  const self = this;\n  return start;\n\n  /**\n   * Start of block quote.\n   *\n   * ```markdown\n   * > | > a\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    if (code === 62) {\n      const state = self.containerState;\n      if (!state.open) {\n        effects.enter(\"blockQuote\", {\n          _container: true\n        });\n        state.open = true;\n      }\n      effects.enter(\"blockQuotePrefix\");\n      effects.enter(\"blockQuoteMarker\");\n      effects.consume(code);\n      effects.exit(\"blockQuoteMarker\");\n      return after;\n    }\n    return nok(code);\n  }\n\n  /**\n   * After `>`, before optional whitespace.\n   *\n   * ```markdown\n   * > | > a\n   *      ^\n   * ```\n   *\n   * @type {State}\n   */\n  function after(code) {\n    if (markdownSpace(code)) {\n      effects.enter(\"blockQuotePrefixWhitespace\");\n      effects.consume(code);\n      effects.exit(\"blockQuotePrefixWhitespace\");\n      effects.exit(\"blockQuotePrefix\");\n      return ok;\n    }\n    effects.exit(\"blockQuotePrefix\");\n    return ok(code);\n  }\n}\n\n/**\n * Start of block quote continuation.\n *\n * ```markdown\n *   | > a\n * > | > b\n *     ^\n * ```\n *\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeBlockQuoteContinuation(effects, ok, nok) {\n  const self = this;\n  return contStart;\n\n  /**\n   * Start of block quote continuation.\n   *\n   * Also used to parse the first block quote opening.\n   *\n   * ```markdown\n   *   | > a\n   * > | > b\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function contStart(code) {\n    if (markdownSpace(code)) {\n      // Always populated by defaults.\n\n      return factorySpace(effects, contBefore, \"linePrefix\", self.parser.constructs.disable.null.includes('codeIndented') ? undefined : 4)(code);\n    }\n    return contBefore(code);\n  }\n\n  /**\n   * At `>`, after optional whitespace.\n   *\n   * Also used to parse the first block quote opening.\n   *\n   * ```markdown\n   *   | > a\n   * > | > b\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function contBefore(code) {\n    return effects.attempt(blockQuote, ok, nok)(code);\n  }\n}\n\n/** @type {Exiter} */\nfunction exit(effects) {\n  effects.exit(\"blockQuote\");\n}","/**\n * @import {Effects, State, TokenType} from 'micromark-util-types'\n */\n\nimport { asciiControl, markdownLineEndingOrSpace, markdownLineEnding } from 'micromark-util-character';\n/**\n * Parse destinations.\n *\n * ###### Examples\n *\n * ```markdown\n * <a>\n * <a\\>b>\n * <a b>\n * <a)>\n * a\n * a\\)b\n * a(b)c\n * a(b)\n * ```\n *\n * @param {Effects} effects\n *   Context.\n * @param {State} ok\n *   State switched to when successful.\n * @param {State} nok\n *   State switched to when unsuccessful.\n * @param {TokenType} type\n *   Type for whole (`<a>` or `b`).\n * @param {TokenType} literalType\n *   Type when enclosed (`<a>`).\n * @param {TokenType} literalMarkerType\n *   Type for enclosing (`<` and `>`).\n * @param {TokenType} rawType\n *   Type when not enclosed (`b`).\n * @param {TokenType} stringType\n *   Type for the value (`a` or `b`).\n * @param {number | undefined} [max=Infinity]\n *   Depth of nested parens (inclusive).\n * @returns {State}\n *   Start state.\n */\nexport function factoryDestination(effects, ok, nok, type, literalType, literalMarkerType, rawType, stringType, max) {\n  const limit = max || Number.POSITIVE_INFINITY;\n  let balance = 0;\n  return start;\n\n  /**\n   * Start of destination.\n   *\n   * ```markdown\n   * > | <aa>\n   *     ^\n   * > | aa\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    if (code === 60) {\n      effects.enter(type);\n      effects.enter(literalType);\n      effects.enter(literalMarkerType);\n      effects.consume(code);\n      effects.exit(literalMarkerType);\n      return enclosedBefore;\n    }\n\n    // ASCII control, space, closing paren.\n    if (code === null || code === 32 || code === 41 || asciiControl(code)) {\n      return nok(code);\n    }\n    effects.enter(type);\n    effects.enter(rawType);\n    effects.enter(stringType);\n    effects.enter(\"chunkString\", {\n      contentType: \"string\"\n    });\n    return raw(code);\n  }\n\n  /**\n   * After `<`, at an enclosed destination.\n   *\n   * ```markdown\n   * > | <aa>\n   *      ^\n   * ```\n   *\n   * @type {State}\n   */\n  function enclosedBefore(code) {\n    if (code === 62) {\n      effects.enter(literalMarkerType);\n      effects.consume(code);\n      effects.exit(literalMarkerType);\n      effects.exit(literalType);\n      effects.exit(type);\n      return ok;\n    }\n    effects.enter(stringType);\n    effects.enter(\"chunkString\", {\n      contentType: \"string\"\n    });\n    return enclosed(code);\n  }\n\n  /**\n   * In enclosed destination.\n   *\n   * ```markdown\n   * > | <aa>\n   *      ^\n   * ```\n   *\n   * @type {State}\n   */\n  function enclosed(code) {\n    if (code === 62) {\n      effects.exit(\"chunkString\");\n      effects.exit(stringType);\n      return enclosedBefore(code);\n    }\n    if (code === null || code === 60 || markdownLineEnding(code)) {\n      return nok(code);\n    }\n    effects.consume(code);\n    return code === 92 ? enclosedEscape : enclosed;\n  }\n\n  /**\n   * After `\\`, at a special character.\n   *\n   * ```markdown\n   * > | <a\\*a>\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function enclosedEscape(code) {\n    if (code === 60 || code === 62 || code === 92) {\n      effects.consume(code);\n      return enclosed;\n    }\n    return enclosed(code);\n  }\n\n  /**\n   * In raw destination.\n   *\n   * ```markdown\n   * > | aa\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function raw(code) {\n    if (!balance && (code === null || code === 41 || markdownLineEndingOrSpace(code))) {\n      effects.exit(\"chunkString\");\n      effects.exit(stringType);\n      effects.exit(rawType);\n      effects.exit(type);\n      return ok(code);\n    }\n    if (balance < limit && code === 40) {\n      effects.consume(code);\n      balance++;\n      return raw;\n    }\n    if (code === 41) {\n      effects.consume(code);\n      balance--;\n      return raw;\n    }\n\n    // ASCII control (but *not* `\\0`) and space and `(`.\n    // Note: in `markdown-rs`, `\\0` exists in codes, in `micromark-js` it\n    // doesn’t.\n    if (code === null || code === 32 || code === 40 || asciiControl(code)) {\n      return nok(code);\n    }\n    effects.consume(code);\n    return code === 92 ? rawEscape : raw;\n  }\n\n  /**\n   * After `\\`, at special character.\n   *\n   * ```markdown\n   * > | a\\*a\n   *       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function rawEscape(code) {\n    if (code === 40 || code === 41 || code === 92) {\n      effects.consume(code);\n      return raw;\n    }\n    return raw(code);\n  }\n}","/**\n * @import {\n *   Effects,\n *   State,\n *   TokenizeContext,\n *   TokenType\n * } from 'micromark-util-types'\n */\n\nimport { markdownLineEnding, markdownSpace } from 'micromark-util-character';\n/**\n * Parse labels.\n *\n * > 👉 **Note**: labels in markdown are capped at 999 characters in the string.\n *\n * ###### Examples\n *\n * ```markdown\n * [a]\n * [a\n * b]\n * [a\\]b]\n * ```\n *\n * @this {TokenizeContext}\n *   Tokenize context.\n * @param {Effects} effects\n *   Context.\n * @param {State} ok\n *   State switched to when successful.\n * @param {State} nok\n *   State switched to when unsuccessful.\n * @param {TokenType} type\n *   Type of the whole label (`[a]`).\n * @param {TokenType} markerType\n *   Type for the markers (`[` and `]`).\n * @param {TokenType} stringType\n *   Type for the identifier (`a`).\n * @returns {State}\n *   Start state.\n */\nexport function factoryLabel(effects, ok, nok, type, markerType, stringType) {\n  const self = this;\n  let size = 0;\n  /** @type {boolean} */\n  let seen;\n  return start;\n\n  /**\n   * Start of label.\n   *\n   * ```markdown\n   * > | [a]\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    effects.enter(type);\n    effects.enter(markerType);\n    effects.consume(code);\n    effects.exit(markerType);\n    effects.enter(stringType);\n    return atBreak;\n  }\n\n  /**\n   * In label, at something, before something else.\n   *\n   * ```markdown\n   * > | [a]\n   *      ^\n   * ```\n   *\n   * @type {State}\n   */\n  function atBreak(code) {\n    if (size > 999 || code === null || code === 91 || code === 93 && !seen ||\n    // To do: remove in the future once we’ve switched from\n    // `micromark-extension-footnote` to `micromark-extension-gfm-footnote`,\n    // which doesn’t need this.\n    // Hidden footnotes hook.\n    /* c8 ignore next 3 */\n    code === 94 && !size && '_hiddenFootnoteSupport' in self.parser.constructs) {\n      return nok(code);\n    }\n    if (code === 93) {\n      effects.exit(stringType);\n      effects.enter(markerType);\n      effects.consume(code);\n      effects.exit(markerType);\n      effects.exit(type);\n      return ok;\n    }\n\n    // To do: indent? Link chunks and EOLs together?\n    if (markdownLineEnding(code)) {\n      effects.enter(\"lineEnding\");\n      effects.consume(code);\n      effects.exit(\"lineEnding\");\n      return atBreak;\n    }\n    effects.enter(\"chunkString\", {\n      contentType: \"string\"\n    });\n    return labelInside(code);\n  }\n\n  /**\n   * In label, in text.\n   *\n   * ```markdown\n   * > | [a]\n   *      ^\n   * ```\n   *\n   * @type {State}\n   */\n  function labelInside(code) {\n    if (code === null || code === 91 || code === 93 || markdownLineEnding(code) || size++ > 999) {\n      effects.exit(\"chunkString\");\n      return atBreak(code);\n    }\n    effects.consume(code);\n    if (!seen) seen = !markdownSpace(code);\n    return code === 92 ? labelEscape : labelInside;\n  }\n\n  /**\n   * After `\\`, at a special character.\n   *\n   * ```markdown\n   * > | [a\\*a]\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function labelEscape(code) {\n    if (code === 91 || code === 92 || code === 93) {\n      effects.consume(code);\n      size++;\n      return labelInside;\n    }\n    return labelInside(code);\n  }\n}","/**\n * @import {\n *   Code,\n *   Effects,\n *   State,\n *   TokenType\n * } from 'micromark-util-types'\n */\n\nimport { factorySpace } from 'micromark-factory-space';\nimport { markdownLineEnding } from 'micromark-util-character';\n/**\n * Parse titles.\n *\n * ###### Examples\n *\n * ```markdown\n * \"a\"\n * 'b'\n * (c)\n * \"a\n * b\"\n * 'a\n *     b'\n * (a\\)b)\n * ```\n *\n * @param {Effects} effects\n *   Context.\n * @param {State} ok\n *   State switched to when successful.\n * @param {State} nok\n *   State switched to when unsuccessful.\n * @param {TokenType} type\n *   Type of the whole title (`\"a\"`, `'b'`, `(c)`).\n * @param {TokenType} markerType\n *   Type for the markers (`\"`, `'`, `(`, and `)`).\n * @param {TokenType} stringType\n *   Type for the value (`a`).\n * @returns {State}\n *   Start state.\n */\nexport function factoryTitle(effects, ok, nok, type, markerType, stringType) {\n  /** @type {NonNullable<Code>} */\n  let marker;\n  return start;\n\n  /**\n   * Start of title.\n   *\n   * ```markdown\n   * > | \"a\"\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    if (code === 34 || code === 39 || code === 40) {\n      effects.enter(type);\n      effects.enter(markerType);\n      effects.consume(code);\n      effects.exit(markerType);\n      marker = code === 40 ? 41 : code;\n      return begin;\n    }\n    return nok(code);\n  }\n\n  /**\n   * After opening marker.\n   *\n   * This is also used at the closing marker.\n   *\n   * ```markdown\n   * > | \"a\"\n   *      ^\n   * ```\n   *\n   * @type {State}\n   */\n  function begin(code) {\n    if (code === marker) {\n      effects.enter(markerType);\n      effects.consume(code);\n      effects.exit(markerType);\n      effects.exit(type);\n      return ok;\n    }\n    effects.enter(stringType);\n    return atBreak(code);\n  }\n\n  /**\n   * At something, before something else.\n   *\n   * ```markdown\n   * > | \"a\"\n   *      ^\n   * ```\n   *\n   * @type {State}\n   */\n  function atBreak(code) {\n    if (code === marker) {\n      effects.exit(stringType);\n      return begin(marker);\n    }\n    if (code === null) {\n      return nok(code);\n    }\n\n    // Note: blank lines can’t exist in content.\n    if (markdownLineEnding(code)) {\n      // To do: use `space_or_tab_eol_with_options`, connect.\n      effects.enter(\"lineEnding\");\n      effects.consume(code);\n      effects.exit(\"lineEnding\");\n      return factorySpace(effects, atBreak, \"linePrefix\");\n    }\n    effects.enter(\"chunkString\", {\n      contentType: \"string\"\n    });\n    return inside(code);\n  }\n\n  /**\n   *\n   *\n   * @type {State}\n   */\n  function inside(code) {\n    if (code === marker || code === null || markdownLineEnding(code)) {\n      effects.exit(\"chunkString\");\n      return atBreak(code);\n    }\n    effects.consume(code);\n    return code === 92 ? escape : inside;\n  }\n\n  /**\n   * After `\\`, at a special character.\n   *\n   * ```markdown\n   * > | \"a\\*b\"\n   *      ^\n   * ```\n   *\n   * @type {State}\n   */\n  function escape(code) {\n    if (code === marker || code === 92) {\n      effects.consume(code);\n      return inside;\n    }\n    return inside(code);\n  }\n}","/**\n * @import {Effects, State} from 'micromark-util-types'\n */\n\nimport { factorySpace } from 'micromark-factory-space';\nimport { markdownLineEnding, markdownSpace } from 'micromark-util-character';\n/**\n * Parse spaces and tabs.\n *\n * There is no `nok` parameter:\n *\n * *   line endings or spaces in markdown are often optional, in which case this\n *     factory can be used and `ok` will be switched to whether spaces were found\n *     or not\n * *   one line ending or space can be detected with\n *     `markdownLineEndingOrSpace(code)` right before using `factoryWhitespace`\n *\n * @param {Effects} effects\n *   Context.\n * @param {State} ok\n *   State switched to when successful.\n * @returns {State}\n *   Start state.\n */\nexport function factoryWhitespace(effects, ok) {\n  /** @type {boolean} */\n  let seen;\n  return start;\n\n  /** @type {State} */\n  function start(code) {\n    if (markdownLineEnding(code)) {\n      effects.enter(\"lineEnding\");\n      effects.consume(code);\n      effects.exit(\"lineEnding\");\n      seen = true;\n      return start;\n    }\n    if (markdownSpace(code)) {\n      return factorySpace(effects, start, seen ? \"linePrefix\" : \"lineSuffix\")(code);\n    }\n    return ok(code);\n  }\n}","/**\n * @import {\n *   Construct,\n *   State,\n *   TokenizeContext,\n *   Tokenizer\n * } from 'micromark-util-types'\n */\n\nimport { factoryDestination } from 'micromark-factory-destination';\nimport { factoryLabel } from 'micromark-factory-label';\nimport { factorySpace } from 'micromark-factory-space';\nimport { factoryTitle } from 'micromark-factory-title';\nimport { factoryWhitespace } from 'micromark-factory-whitespace';\nimport { markdownLineEndingOrSpace, markdownLineEnding, markdownSpace } from 'micromark-util-character';\nimport { normalizeIdentifier } from 'micromark-util-normalize-identifier';\n/** @type {Construct} */\nexport const definition = {\n  name: 'definition',\n  tokenize: tokenizeDefinition\n};\n\n/** @type {Construct} */\nconst titleBefore = {\n  partial: true,\n  tokenize: tokenizeTitleBefore\n};\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeDefinition(effects, ok, nok) {\n  const self = this;\n  /** @type {string} */\n  let identifier;\n  return start;\n\n  /**\n   * At start of a definition.\n   *\n   * ```markdown\n   * > | [a]: b \"c\"\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    // Do not interrupt paragraphs (but do follow definitions).\n    // To do: do `interrupt` the way `markdown-rs` does.\n    // To do: parse whitespace the way `markdown-rs` does.\n    effects.enter(\"definition\");\n    return before(code);\n  }\n\n  /**\n   * After optional whitespace, at `[`.\n   *\n   * ```markdown\n   * > | [a]: b \"c\"\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function before(code) {\n    // To do: parse whitespace the way `markdown-rs` does.\n\n    return factoryLabel.call(self, effects, labelAfter,\n    // Note: we don’t need to reset the way `markdown-rs` does.\n    nok, \"definitionLabel\", \"definitionLabelMarker\", \"definitionLabelString\")(code);\n  }\n\n  /**\n   * After label.\n   *\n   * ```markdown\n   * > | [a]: b \"c\"\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function labelAfter(code) {\n    identifier = normalizeIdentifier(self.sliceSerialize(self.events[self.events.length - 1][1]).slice(1, -1));\n    if (code === 58) {\n      effects.enter(\"definitionMarker\");\n      effects.consume(code);\n      effects.exit(\"definitionMarker\");\n      return markerAfter;\n    }\n    return nok(code);\n  }\n\n  /**\n   * After marker.\n   *\n   * ```markdown\n   * > | [a]: b \"c\"\n   *         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function markerAfter(code) {\n    // Note: whitespace is optional.\n    return markdownLineEndingOrSpace(code) ? factoryWhitespace(effects, destinationBefore)(code) : destinationBefore(code);\n  }\n\n  /**\n   * Before destination.\n   *\n   * ```markdown\n   * > | [a]: b \"c\"\n   *          ^\n   * ```\n   *\n   * @type {State}\n   */\n  function destinationBefore(code) {\n    return factoryDestination(effects, destinationAfter,\n    // Note: we don’t need to reset the way `markdown-rs` does.\n    nok, \"definitionDestination\", \"definitionDestinationLiteral\", \"definitionDestinationLiteralMarker\", \"definitionDestinationRaw\", \"definitionDestinationString\")(code);\n  }\n\n  /**\n   * After destination.\n   *\n   * ```markdown\n   * > | [a]: b \"c\"\n   *           ^\n   * ```\n   *\n   * @type {State}\n   */\n  function destinationAfter(code) {\n    return effects.attempt(titleBefore, after, after)(code);\n  }\n\n  /**\n   * After definition.\n   *\n   * ```markdown\n   * > | [a]: b\n   *           ^\n   * > | [a]: b \"c\"\n   *               ^\n   * ```\n   *\n   * @type {State}\n   */\n  function after(code) {\n    return markdownSpace(code) ? factorySpace(effects, afterWhitespace, \"whitespace\")(code) : afterWhitespace(code);\n  }\n\n  /**\n   * After definition, after optional whitespace.\n   *\n   * ```markdown\n   * > | [a]: b\n   *           ^\n   * > | [a]: b \"c\"\n   *               ^\n   * ```\n   *\n   * @type {State}\n   */\n  function afterWhitespace(code) {\n    if (code === null || markdownLineEnding(code)) {\n      effects.exit(\"definition\");\n\n      // Note: we don’t care about uniqueness.\n      // It’s likely that that doesn’t happen very frequently.\n      // It is more likely that it wastes precious time.\n      self.parser.defined.push(identifier);\n\n      // To do: `markdown-rs` interrupt.\n      // // You’d be interrupting.\n      // tokenizer.interrupt = true\n      return ok(code);\n    }\n    return nok(code);\n  }\n}\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeTitleBefore(effects, ok, nok) {\n  return titleBefore;\n\n  /**\n   * After destination, at whitespace.\n   *\n   * ```markdown\n   * > | [a]: b\n   *           ^\n   * > | [a]: b \"c\"\n   *           ^\n   * ```\n   *\n   * @type {State}\n   */\n  function titleBefore(code) {\n    return markdownLineEndingOrSpace(code) ? factoryWhitespace(effects, beforeMarker)(code) : nok(code);\n  }\n\n  /**\n   * At title.\n   *\n   * ```markdown\n   *   | [a]: b\n   * > | \"c\"\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function beforeMarker(code) {\n    return factoryTitle(effects, titleAfter, nok, \"definitionTitle\", \"definitionTitleMarker\", \"definitionTitleString\")(code);\n  }\n\n  /**\n   * After title.\n   *\n   * ```markdown\n   * > | [a]: b \"c\"\n   *               ^\n   * ```\n   *\n   * @type {State}\n   */\n  function titleAfter(code) {\n    return markdownSpace(code) ? factorySpace(effects, titleAfterOptionalWhitespace, \"whitespace\")(code) : titleAfterOptionalWhitespace(code);\n  }\n\n  /**\n   * After title, after optional whitespace.\n   *\n   * ```markdown\n   * > | [a]: b \"c\"\n   *               ^\n   * ```\n   *\n   * @type {State}\n   */\n  function titleAfterOptionalWhitespace(code) {\n    return code === null || markdownLineEnding(code) ? ok(code) : nok(code);\n  }\n}","/**\n * @import {\n *   Construct,\n *   State,\n *   TokenizeContext,\n *   Tokenizer\n * } from 'micromark-util-types'\n */\n\nimport { factorySpace } from 'micromark-factory-space';\nimport { markdownLineEnding, markdownSpace } from 'micromark-util-character';\n/** @type {Construct} */\nexport const codeIndented = {\n  name: 'codeIndented',\n  tokenize: tokenizeCodeIndented\n};\n\n/** @type {Construct} */\nconst furtherStart = {\n  partial: true,\n  tokenize: tokenizeFurtherStart\n};\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeCodeIndented(effects, ok, nok) {\n  const self = this;\n  return start;\n\n  /**\n   * Start of code (indented).\n   *\n   * > **Parsing note**: it is not needed to check if this first line is a\n   * > filled line (that it has a non-whitespace character), because blank lines\n   * > are parsed already, so we never run into that.\n   *\n   * ```markdown\n   * > |     aaa\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    // To do: manually check if interrupting like `markdown-rs`.\n\n    effects.enter(\"codeIndented\");\n    // To do: use an improved `space_or_tab` function like `markdown-rs`,\n    // so that we can drop the next state.\n    return factorySpace(effects, afterPrefix, \"linePrefix\", 4 + 1)(code);\n  }\n\n  /**\n   * At start, after 1 or 4 spaces.\n   *\n   * ```markdown\n   * > |     aaa\n   *         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function afterPrefix(code) {\n    const tail = self.events[self.events.length - 1];\n    return tail && tail[1].type === \"linePrefix\" && tail[2].sliceSerialize(tail[1], true).length >= 4 ? atBreak(code) : nok(code);\n  }\n\n  /**\n   * At a break.\n   *\n   * ```markdown\n   * > |     aaa\n   *         ^  ^\n   * ```\n   *\n   * @type {State}\n   */\n  function atBreak(code) {\n    if (code === null) {\n      return after(code);\n    }\n    if (markdownLineEnding(code)) {\n      return effects.attempt(furtherStart, atBreak, after)(code);\n    }\n    effects.enter(\"codeFlowValue\");\n    return inside(code);\n  }\n\n  /**\n   * In code content.\n   *\n   * ```markdown\n   * > |     aaa\n   *         ^^^^\n   * ```\n   *\n   * @type {State}\n   */\n  function inside(code) {\n    if (code === null || markdownLineEnding(code)) {\n      effects.exit(\"codeFlowValue\");\n      return atBreak(code);\n    }\n    effects.consume(code);\n    return inside;\n  }\n\n  /** @type {State} */\n  function after(code) {\n    effects.exit(\"codeIndented\");\n    // To do: allow interrupting like `markdown-rs`.\n    // Feel free to interrupt.\n    // tokenizer.interrupt = false\n    return ok(code);\n  }\n}\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeFurtherStart(effects, ok, nok) {\n  const self = this;\n  return furtherStart;\n\n  /**\n   * At eol, trying to parse another indent.\n   *\n   * ```markdown\n   * > |     aaa\n   *            ^\n   *   |     bbb\n   * ```\n   *\n   * @type {State}\n   */\n  function furtherStart(code) {\n    // To do: improve `lazy` / `pierce` handling.\n    // If this is a lazy line, it can’t be code.\n    if (self.parser.lazy[self.now().line]) {\n      return nok(code);\n    }\n    if (markdownLineEnding(code)) {\n      effects.enter(\"lineEnding\");\n      effects.consume(code);\n      effects.exit(\"lineEnding\");\n      return furtherStart;\n    }\n\n    // To do: the code here in `micromark-js` is a bit different from\n    // `markdown-rs` because there it can attempt spaces.\n    // We can’t yet.\n    //\n    // To do: use an improved `space_or_tab` function like `markdown-rs`,\n    // so that we can drop the next state.\n    return factorySpace(effects, afterPrefix, \"linePrefix\", 4 + 1)(code);\n  }\n\n  /**\n   * At start, after 1 or 4 spaces.\n   *\n   * ```markdown\n   * > |     aaa\n   *         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function afterPrefix(code) {\n    const tail = self.events[self.events.length - 1];\n    return tail && tail[1].type === \"linePrefix\" && tail[2].sliceSerialize(tail[1], true).length >= 4 ? ok(code) : markdownLineEnding(code) ? furtherStart(code) : nok(code);\n  }\n}","/**\n * @import {\n *   Construct,\n *   Resolver,\n *   State,\n *   TokenizeContext,\n *   Tokenizer,\n *   Token\n * } from 'micromark-util-types'\n */\n\nimport { factorySpace } from 'micromark-factory-space';\nimport { markdownLineEndingOrSpace, markdownLineEnding, markdownSpace } from 'micromark-util-character';\nimport { splice } from 'micromark-util-chunked';\n/** @type {Construct} */\nexport const headingAtx = {\n  name: 'headingAtx',\n  resolve: resolveHeadingAtx,\n  tokenize: tokenizeHeadingAtx\n};\n\n/** @type {Resolver} */\nfunction resolveHeadingAtx(events, context) {\n  let contentEnd = events.length - 2;\n  let contentStart = 3;\n  /** @type {Token} */\n  let content;\n  /** @type {Token} */\n  let text;\n\n  // Prefix whitespace, part of the opening.\n  if (events[contentStart][1].type === \"whitespace\") {\n    contentStart += 2;\n  }\n\n  // Suffix whitespace, part of the closing.\n  if (contentEnd - 2 > contentStart && events[contentEnd][1].type === \"whitespace\") {\n    contentEnd -= 2;\n  }\n  if (events[contentEnd][1].type === \"atxHeadingSequence\" && (contentStart === contentEnd - 1 || contentEnd - 4 > contentStart && events[contentEnd - 2][1].type === \"whitespace\")) {\n    contentEnd -= contentStart + 1 === contentEnd ? 2 : 4;\n  }\n  if (contentEnd > contentStart) {\n    content = {\n      type: \"atxHeadingText\",\n      start: events[contentStart][1].start,\n      end: events[contentEnd][1].end\n    };\n    text = {\n      type: \"chunkText\",\n      start: events[contentStart][1].start,\n      end: events[contentEnd][1].end,\n      contentType: \"text\"\n    };\n    splice(events, contentStart, contentEnd - contentStart + 1, [['enter', content, context], ['enter', text, context], ['exit', text, context], ['exit', content, context]]);\n  }\n  return events;\n}\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeHeadingAtx(effects, ok, nok) {\n  let size = 0;\n  return start;\n\n  /**\n   * Start of a heading (atx).\n   *\n   * ```markdown\n   * > | ## aa\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    // To do: parse indent like `markdown-rs`.\n    effects.enter(\"atxHeading\");\n    return before(code);\n  }\n\n  /**\n   * After optional whitespace, at `#`.\n   *\n   * ```markdown\n   * > | ## aa\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function before(code) {\n    effects.enter(\"atxHeadingSequence\");\n    return sequenceOpen(code);\n  }\n\n  /**\n   * In opening sequence.\n   *\n   * ```markdown\n   * > | ## aa\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function sequenceOpen(code) {\n    if (code === 35 && size++ < 6) {\n      effects.consume(code);\n      return sequenceOpen;\n    }\n\n    // Always at least one `#`.\n    if (code === null || markdownLineEndingOrSpace(code)) {\n      effects.exit(\"atxHeadingSequence\");\n      return atBreak(code);\n    }\n    return nok(code);\n  }\n\n  /**\n   * After something, before something else.\n   *\n   * ```markdown\n   * > | ## aa\n   *       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function atBreak(code) {\n    if (code === 35) {\n      effects.enter(\"atxHeadingSequence\");\n      return sequenceFurther(code);\n    }\n    if (code === null || markdownLineEnding(code)) {\n      effects.exit(\"atxHeading\");\n      // To do: interrupt like `markdown-rs`.\n      // // Feel free to interrupt.\n      // tokenizer.interrupt = false\n      return ok(code);\n    }\n    if (markdownSpace(code)) {\n      return factorySpace(effects, atBreak, \"whitespace\")(code);\n    }\n\n    // To do: generate `data` tokens, add the `text` token later.\n    // Needs edit map, see: `markdown.rs`.\n    effects.enter(\"atxHeadingText\");\n    return data(code);\n  }\n\n  /**\n   * In further sequence (after whitespace).\n   *\n   * Could be normal “visible” hashes in the heading or a final sequence.\n   *\n   * ```markdown\n   * > | ## aa ##\n   *           ^\n   * ```\n   *\n   * @type {State}\n   */\n  function sequenceFurther(code) {\n    if (code === 35) {\n      effects.consume(code);\n      return sequenceFurther;\n    }\n    effects.exit(\"atxHeadingSequence\");\n    return atBreak(code);\n  }\n\n  /**\n   * In text.\n   *\n   * ```markdown\n   * > | ## aa\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function data(code) {\n    if (code === null || code === 35 || markdownLineEndingOrSpace(code)) {\n      effects.exit(\"atxHeadingText\");\n      return atBreak(code);\n    }\n    effects.consume(code);\n    return data;\n  }\n}","/**\n * @import {\n *   Code,\n *   Construct,\n *   Resolver,\n *   State,\n *   TokenizeContext,\n *   Tokenizer\n * } from 'micromark-util-types'\n */\n\nimport { factorySpace } from 'micromark-factory-space';\nimport { markdownLineEnding, markdownSpace } from 'micromark-util-character';\n/** @type {Construct} */\nexport const setextUnderline = {\n  name: 'setextUnderline',\n  resolveTo: resolveToSetextUnderline,\n  tokenize: tokenizeSetextUnderline\n};\n\n/** @type {Resolver} */\nfunction resolveToSetextUnderline(events, context) {\n  // To do: resolve like `markdown-rs`.\n  let index = events.length;\n  /** @type {number | undefined} */\n  let content;\n  /** @type {number | undefined} */\n  let text;\n  /** @type {number | undefined} */\n  let definition;\n\n  // Find the opening of the content.\n  // It’ll always exist: we don’t tokenize if it isn’t there.\n  while (index--) {\n    if (events[index][0] === 'enter') {\n      if (events[index][1].type === \"content\") {\n        content = index;\n        break;\n      }\n      if (events[index][1].type === \"paragraph\") {\n        text = index;\n      }\n    }\n    // Exit\n    else {\n      if (events[index][1].type === \"content\") {\n        // Remove the content end (if needed we’ll add it later)\n        events.splice(index, 1);\n      }\n      if (!definition && events[index][1].type === \"definition\") {\n        definition = index;\n      }\n    }\n  }\n  const heading = {\n    type: \"setextHeading\",\n    start: {\n      ...events[text][1].start\n    },\n    end: {\n      ...events[events.length - 1][1].end\n    }\n  };\n\n  // Change the paragraph to setext heading text.\n  events[text][1].type = \"setextHeadingText\";\n\n  // If we have definitions in the content, we’ll keep on having content,\n  // but we need move it.\n  if (definition) {\n    events.splice(text, 0, ['enter', heading, context]);\n    events.splice(definition + 1, 0, ['exit', events[content][1], context]);\n    events[content][1].end = {\n      ...events[definition][1].end\n    };\n  } else {\n    events[content][1] = heading;\n  }\n\n  // Add the heading exit at the end.\n  events.push(['exit', heading, context]);\n  return events;\n}\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeSetextUnderline(effects, ok, nok) {\n  const self = this;\n  /** @type {NonNullable<Code>} */\n  let marker;\n  return start;\n\n  /**\n   * At start of heading (setext) underline.\n   *\n   * ```markdown\n   *   | aa\n   * > | ==\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    let index = self.events.length;\n    /** @type {boolean | undefined} */\n    let paragraph;\n    // Find an opening.\n    while (index--) {\n      // Skip enter/exit of line ending, line prefix, and content.\n      // We can now either have a definition or a paragraph.\n      if (self.events[index][1].type !== \"lineEnding\" && self.events[index][1].type !== \"linePrefix\" && self.events[index][1].type !== \"content\") {\n        paragraph = self.events[index][1].type === \"paragraph\";\n        break;\n      }\n    }\n\n    // To do: handle lazy/pierce like `markdown-rs`.\n    // To do: parse indent like `markdown-rs`.\n    if (!self.parser.lazy[self.now().line] && (self.interrupt || paragraph)) {\n      effects.enter(\"setextHeadingLine\");\n      marker = code;\n      return before(code);\n    }\n    return nok(code);\n  }\n\n  /**\n   * After optional whitespace, at `-` or `=`.\n   *\n   * ```markdown\n   *   | aa\n   * > | ==\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function before(code) {\n    effects.enter(\"setextHeadingLineSequence\");\n    return inside(code);\n  }\n\n  /**\n   * In sequence.\n   *\n   * ```markdown\n   *   | aa\n   * > | ==\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function inside(code) {\n    if (code === marker) {\n      effects.consume(code);\n      return inside;\n    }\n    effects.exit(\"setextHeadingLineSequence\");\n    return markdownSpace(code) ? factorySpace(effects, after, \"lineSuffix\")(code) : after(code);\n  }\n\n  /**\n   * After sequence, after optional whitespace.\n   *\n   * ```markdown\n   *   | aa\n   * > | ==\n   *       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function after(code) {\n    if (code === null || markdownLineEnding(code)) {\n      effects.exit(\"setextHeadingLine\");\n      return ok(code);\n    }\n    return nok(code);\n  }\n}","/**\n * List of lowercase HTML “block” tag names.\n *\n * The list, when parsing HTML (flow), results in more relaxed rules (condition\n * 6).\n * Because they are known blocks, the HTML-like syntax doesn’t have to be\n * strictly parsed.\n * For tag names not in this list, a more strict algorithm (condition 7) is used\n * to detect whether the HTML-like syntax is seen as HTML (flow) or not.\n *\n * This is copied from:\n * <https://spec.commonmark.org/0.30/#html-blocks>.\n *\n * > 👉 **Note**: `search` was added in `CommonMark@0.31`.\n */\nexport const htmlBlockNames = [\n  'address',\n  'article',\n  'aside',\n  'base',\n  'basefont',\n  'blockquote',\n  'body',\n  'caption',\n  'center',\n  'col',\n  'colgroup',\n  'dd',\n  'details',\n  'dialog',\n  'dir',\n  'div',\n  'dl',\n  'dt',\n  'fieldset',\n  'figcaption',\n  'figure',\n  'footer',\n  'form',\n  'frame',\n  'frameset',\n  'h1',\n  'h2',\n  'h3',\n  'h4',\n  'h5',\n  'h6',\n  'head',\n  'header',\n  'hr',\n  'html',\n  'iframe',\n  'legend',\n  'li',\n  'link',\n  'main',\n  'menu',\n  'menuitem',\n  'nav',\n  'noframes',\n  'ol',\n  'optgroup',\n  'option',\n  'p',\n  'param',\n  'search',\n  'section',\n  'summary',\n  'table',\n  'tbody',\n  'td',\n  'tfoot',\n  'th',\n  'thead',\n  'title',\n  'tr',\n  'track',\n  'ul'\n]\n\n/**\n * List of lowercase HTML “raw” tag names.\n *\n * The list, when parsing HTML (flow), results in HTML that can include lines\n * without exiting, until a closing tag also in this list is found (condition\n * 1).\n *\n * This module is copied from:\n * <https://spec.commonmark.org/0.30/#html-blocks>.\n *\n * > 👉 **Note**: `textarea` was added in `CommonMark@0.30`.\n */\nexport const htmlRawNames = ['pre', 'script', 'style', 'textarea']\n","/**\n * @import {\n *   Code,\n *   Construct,\n *   Resolver,\n *   State,\n *   TokenizeContext,\n *   Tokenizer\n * } from 'micromark-util-types'\n */\n\nimport { asciiAlphanumeric, asciiAlpha, markdownLineEndingOrSpace, markdownLineEnding, markdownSpace } from 'micromark-util-character';\nimport { htmlBlockNames, htmlRawNames } from 'micromark-util-html-tag-name';\nimport { blankLine } from './blank-line.js';\n\n/** @type {Construct} */\nexport const htmlFlow = {\n  concrete: true,\n  name: 'htmlFlow',\n  resolveTo: resolveToHtmlFlow,\n  tokenize: tokenizeHtmlFlow\n};\n\n/** @type {Construct} */\nconst blankLineBefore = {\n  partial: true,\n  tokenize: tokenizeBlankLineBefore\n};\nconst nonLazyContinuationStart = {\n  partial: true,\n  tokenize: tokenizeNonLazyContinuationStart\n};\n\n/** @type {Resolver} */\nfunction resolveToHtmlFlow(events) {\n  let index = events.length;\n  while (index--) {\n    if (events[index][0] === 'enter' && events[index][1].type === \"htmlFlow\") {\n      break;\n    }\n  }\n  if (index > 1 && events[index - 2][1].type === \"linePrefix\") {\n    // Add the prefix start to the HTML token.\n    events[index][1].start = events[index - 2][1].start;\n    // Add the prefix start to the HTML line token.\n    events[index + 1][1].start = events[index - 2][1].start;\n    // Remove the line prefix.\n    events.splice(index - 2, 2);\n  }\n  return events;\n}\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeHtmlFlow(effects, ok, nok) {\n  const self = this;\n  /** @type {number} */\n  let marker;\n  /** @type {boolean} */\n  let closingTag;\n  /** @type {string} */\n  let buffer;\n  /** @type {number} */\n  let index;\n  /** @type {Code} */\n  let markerB;\n  return start;\n\n  /**\n   * Start of HTML (flow).\n   *\n   * ```markdown\n   * > | <x />\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    // To do: parse indent like `markdown-rs`.\n    return before(code);\n  }\n\n  /**\n   * At `<`, after optional whitespace.\n   *\n   * ```markdown\n   * > | <x />\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function before(code) {\n    effects.enter(\"htmlFlow\");\n    effects.enter(\"htmlFlowData\");\n    effects.consume(code);\n    return open;\n  }\n\n  /**\n   * After `<`, at tag name or other stuff.\n   *\n   * ```markdown\n   * > | <x />\n   *      ^\n   * > | <!doctype>\n   *      ^\n   * > | <!--xxx-->\n   *      ^\n   * ```\n   *\n   * @type {State}\n   */\n  function open(code) {\n    if (code === 33) {\n      effects.consume(code);\n      return declarationOpen;\n    }\n    if (code === 47) {\n      effects.consume(code);\n      closingTag = true;\n      return tagCloseStart;\n    }\n    if (code === 63) {\n      effects.consume(code);\n      marker = 3;\n      // To do:\n      // tokenizer.concrete = true\n      // To do: use `markdown-rs` style interrupt.\n      // While we’re in an instruction instead of a declaration, we’re on a `?`\n      // right now, so we do need to search for `>`, similar to declarations.\n      return self.interrupt ? ok : continuationDeclarationInside;\n    }\n\n    // ASCII alphabetical.\n    if (asciiAlpha(code)) {\n      // Always the case.\n      effects.consume(code);\n      buffer = String.fromCharCode(code);\n      return tagName;\n    }\n    return nok(code);\n  }\n\n  /**\n   * After `<!`, at declaration, comment, or CDATA.\n   *\n   * ```markdown\n   * > | <!doctype>\n   *       ^\n   * > | <!--xxx-->\n   *       ^\n   * > | <![CDATA[>&<]]>\n   *       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function declarationOpen(code) {\n    if (code === 45) {\n      effects.consume(code);\n      marker = 2;\n      return commentOpenInside;\n    }\n    if (code === 91) {\n      effects.consume(code);\n      marker = 5;\n      index = 0;\n      return cdataOpenInside;\n    }\n\n    // ASCII alphabetical.\n    if (asciiAlpha(code)) {\n      effects.consume(code);\n      marker = 4;\n      // // Do not form containers.\n      // tokenizer.concrete = true\n      return self.interrupt ? ok : continuationDeclarationInside;\n    }\n    return nok(code);\n  }\n\n  /**\n   * After `<!-`, inside a comment, at another `-`.\n   *\n   * ```markdown\n   * > | <!--xxx-->\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function commentOpenInside(code) {\n    if (code === 45) {\n      effects.consume(code);\n      // // Do not form containers.\n      // tokenizer.concrete = true\n      return self.interrupt ? ok : continuationDeclarationInside;\n    }\n    return nok(code);\n  }\n\n  /**\n   * After `<![`, inside CDATA, expecting `CDATA[`.\n   *\n   * ```markdown\n   * > | <![CDATA[>&<]]>\n   *        ^^^^^^\n   * ```\n   *\n   * @type {State}\n   */\n  function cdataOpenInside(code) {\n    const value = \"CDATA[\";\n    if (code === value.charCodeAt(index++)) {\n      effects.consume(code);\n      if (index === value.length) {\n        // // Do not form containers.\n        // tokenizer.concrete = true\n        return self.interrupt ? ok : continuation;\n      }\n      return cdataOpenInside;\n    }\n    return nok(code);\n  }\n\n  /**\n   * After `</`, in closing tag, at tag name.\n   *\n   * ```markdown\n   * > | </x>\n   *       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function tagCloseStart(code) {\n    if (asciiAlpha(code)) {\n      // Always the case.\n      effects.consume(code);\n      buffer = String.fromCharCode(code);\n      return tagName;\n    }\n    return nok(code);\n  }\n\n  /**\n   * In tag name.\n   *\n   * ```markdown\n   * > | <ab>\n   *      ^^\n   * > | </ab>\n   *       ^^\n   * ```\n   *\n   * @type {State}\n   */\n  function tagName(code) {\n    if (code === null || code === 47 || code === 62 || markdownLineEndingOrSpace(code)) {\n      const slash = code === 47;\n      const name = buffer.toLowerCase();\n      if (!slash && !closingTag && htmlRawNames.includes(name)) {\n        marker = 1;\n        // // Do not form containers.\n        // tokenizer.concrete = true\n        return self.interrupt ? ok(code) : continuation(code);\n      }\n      if (htmlBlockNames.includes(buffer.toLowerCase())) {\n        marker = 6;\n        if (slash) {\n          effects.consume(code);\n          return basicSelfClosing;\n        }\n\n        // // Do not form containers.\n        // tokenizer.concrete = true\n        return self.interrupt ? ok(code) : continuation(code);\n      }\n      marker = 7;\n      // Do not support complete HTML when interrupting.\n      return self.interrupt && !self.parser.lazy[self.now().line] ? nok(code) : closingTag ? completeClosingTagAfter(code) : completeAttributeNameBefore(code);\n    }\n\n    // ASCII alphanumerical and `-`.\n    if (code === 45 || asciiAlphanumeric(code)) {\n      effects.consume(code);\n      buffer += String.fromCharCode(code);\n      return tagName;\n    }\n    return nok(code);\n  }\n\n  /**\n   * After closing slash of a basic tag name.\n   *\n   * ```markdown\n   * > | <div/>\n   *          ^\n   * ```\n   *\n   * @type {State}\n   */\n  function basicSelfClosing(code) {\n    if (code === 62) {\n      effects.consume(code);\n      // // Do not form containers.\n      // tokenizer.concrete = true\n      return self.interrupt ? ok : continuation;\n    }\n    return nok(code);\n  }\n\n  /**\n   * After closing slash of a complete tag name.\n   *\n   * ```markdown\n   * > | <x/>\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function completeClosingTagAfter(code) {\n    if (markdownSpace(code)) {\n      effects.consume(code);\n      return completeClosingTagAfter;\n    }\n    return completeEnd(code);\n  }\n\n  /**\n   * At an attribute name.\n   *\n   * At first, this state is used after a complete tag name, after whitespace,\n   * where it expects optional attributes or the end of the tag.\n   * It is also reused after attributes, when expecting more optional\n   * attributes.\n   *\n   * ```markdown\n   * > | <a />\n   *        ^\n   * > | <a :b>\n   *        ^\n   * > | <a _b>\n   *        ^\n   * > | <a b>\n   *        ^\n   * > | <a >\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function completeAttributeNameBefore(code) {\n    if (code === 47) {\n      effects.consume(code);\n      return completeEnd;\n    }\n\n    // ASCII alphanumerical and `:` and `_`.\n    if (code === 58 || code === 95 || asciiAlpha(code)) {\n      effects.consume(code);\n      return completeAttributeName;\n    }\n    if (markdownSpace(code)) {\n      effects.consume(code);\n      return completeAttributeNameBefore;\n    }\n    return completeEnd(code);\n  }\n\n  /**\n   * In attribute name.\n   *\n   * ```markdown\n   * > | <a :b>\n   *         ^\n   * > | <a _b>\n   *         ^\n   * > | <a b>\n   *         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function completeAttributeName(code) {\n    // ASCII alphanumerical and `-`, `.`, `:`, and `_`.\n    if (code === 45 || code === 46 || code === 58 || code === 95 || asciiAlphanumeric(code)) {\n      effects.consume(code);\n      return completeAttributeName;\n    }\n    return completeAttributeNameAfter(code);\n  }\n\n  /**\n   * After attribute name, at an optional initializer, the end of the tag, or\n   * whitespace.\n   *\n   * ```markdown\n   * > | <a b>\n   *         ^\n   * > | <a b=c>\n   *         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function completeAttributeNameAfter(code) {\n    if (code === 61) {\n      effects.consume(code);\n      return completeAttributeValueBefore;\n    }\n    if (markdownSpace(code)) {\n      effects.consume(code);\n      return completeAttributeNameAfter;\n    }\n    return completeAttributeNameBefore(code);\n  }\n\n  /**\n   * Before unquoted, double quoted, or single quoted attribute value, allowing\n   * whitespace.\n   *\n   * ```markdown\n   * > | <a b=c>\n   *          ^\n   * > | <a b=\"c\">\n   *          ^\n   * ```\n   *\n   * @type {State}\n   */\n  function completeAttributeValueBefore(code) {\n    if (code === null || code === 60 || code === 61 || code === 62 || code === 96) {\n      return nok(code);\n    }\n    if (code === 34 || code === 39) {\n      effects.consume(code);\n      markerB = code;\n      return completeAttributeValueQuoted;\n    }\n    if (markdownSpace(code)) {\n      effects.consume(code);\n      return completeAttributeValueBefore;\n    }\n    return completeAttributeValueUnquoted(code);\n  }\n\n  /**\n   * In double or single quoted attribute value.\n   *\n   * ```markdown\n   * > | <a b=\"c\">\n   *           ^\n   * > | <a b='c'>\n   *           ^\n   * ```\n   *\n   * @type {State}\n   */\n  function completeAttributeValueQuoted(code) {\n    if (code === markerB) {\n      effects.consume(code);\n      markerB = null;\n      return completeAttributeValueQuotedAfter;\n    }\n    if (code === null || markdownLineEnding(code)) {\n      return nok(code);\n    }\n    effects.consume(code);\n    return completeAttributeValueQuoted;\n  }\n\n  /**\n   * In unquoted attribute value.\n   *\n   * ```markdown\n   * > | <a b=c>\n   *          ^\n   * ```\n   *\n   * @type {State}\n   */\n  function completeAttributeValueUnquoted(code) {\n    if (code === null || code === 34 || code === 39 || code === 47 || code === 60 || code === 61 || code === 62 || code === 96 || markdownLineEndingOrSpace(code)) {\n      return completeAttributeNameAfter(code);\n    }\n    effects.consume(code);\n    return completeAttributeValueUnquoted;\n  }\n\n  /**\n   * After double or single quoted attribute value, before whitespace or the\n   * end of the tag.\n   *\n   * ```markdown\n   * > | <a b=\"c\">\n   *            ^\n   * ```\n   *\n   * @type {State}\n   */\n  function completeAttributeValueQuotedAfter(code) {\n    if (code === 47 || code === 62 || markdownSpace(code)) {\n      return completeAttributeNameBefore(code);\n    }\n    return nok(code);\n  }\n\n  /**\n   * In certain circumstances of a complete tag where only an `>` is allowed.\n   *\n   * ```markdown\n   * > | <a b=\"c\">\n   *             ^\n   * ```\n   *\n   * @type {State}\n   */\n  function completeEnd(code) {\n    if (code === 62) {\n      effects.consume(code);\n      return completeAfter;\n    }\n    return nok(code);\n  }\n\n  /**\n   * After `>` in a complete tag.\n   *\n   * ```markdown\n   * > | <x>\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function completeAfter(code) {\n    if (code === null || markdownLineEnding(code)) {\n      // // Do not form containers.\n      // tokenizer.concrete = true\n      return continuation(code);\n    }\n    if (markdownSpace(code)) {\n      effects.consume(code);\n      return completeAfter;\n    }\n    return nok(code);\n  }\n\n  /**\n   * In continuation of any HTML kind.\n   *\n   * ```markdown\n   * > | <!--xxx-->\n   *          ^\n   * ```\n   *\n   * @type {State}\n   */\n  function continuation(code) {\n    if (code === 45 && marker === 2) {\n      effects.consume(code);\n      return continuationCommentInside;\n    }\n    if (code === 60 && marker === 1) {\n      effects.consume(code);\n      return continuationRawTagOpen;\n    }\n    if (code === 62 && marker === 4) {\n      effects.consume(code);\n      return continuationClose;\n    }\n    if (code === 63 && marker === 3) {\n      effects.consume(code);\n      return continuationDeclarationInside;\n    }\n    if (code === 93 && marker === 5) {\n      effects.consume(code);\n      return continuationCdataInside;\n    }\n    if (markdownLineEnding(code) && (marker === 6 || marker === 7)) {\n      effects.exit(\"htmlFlowData\");\n      return effects.check(blankLineBefore, continuationAfter, continuationStart)(code);\n    }\n    if (code === null || markdownLineEnding(code)) {\n      effects.exit(\"htmlFlowData\");\n      return continuationStart(code);\n    }\n    effects.consume(code);\n    return continuation;\n  }\n\n  /**\n   * In continuation, at eol.\n   *\n   * ```markdown\n   * > | <x>\n   *        ^\n   *   | asd\n   * ```\n   *\n   * @type {State}\n   */\n  function continuationStart(code) {\n    return effects.check(nonLazyContinuationStart, continuationStartNonLazy, continuationAfter)(code);\n  }\n\n  /**\n   * In continuation, at eol, before non-lazy content.\n   *\n   * ```markdown\n   * > | <x>\n   *        ^\n   *   | asd\n   * ```\n   *\n   * @type {State}\n   */\n  function continuationStartNonLazy(code) {\n    effects.enter(\"lineEnding\");\n    effects.consume(code);\n    effects.exit(\"lineEnding\");\n    return continuationBefore;\n  }\n\n  /**\n   * In continuation, before non-lazy content.\n   *\n   * ```markdown\n   *   | <x>\n   * > | asd\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function continuationBefore(code) {\n    if (code === null || markdownLineEnding(code)) {\n      return continuationStart(code);\n    }\n    effects.enter(\"htmlFlowData\");\n    return continuation(code);\n  }\n\n  /**\n   * In comment continuation, after one `-`, expecting another.\n   *\n   * ```markdown\n   * > | <!--xxx-->\n   *             ^\n   * ```\n   *\n   * @type {State}\n   */\n  function continuationCommentInside(code) {\n    if (code === 45) {\n      effects.consume(code);\n      return continuationDeclarationInside;\n    }\n    return continuation(code);\n  }\n\n  /**\n   * In raw continuation, after `<`, at `/`.\n   *\n   * ```markdown\n   * > | <script>console.log(1)</script>\n   *                            ^\n   * ```\n   *\n   * @type {State}\n   */\n  function continuationRawTagOpen(code) {\n    if (code === 47) {\n      effects.consume(code);\n      buffer = '';\n      return continuationRawEndTag;\n    }\n    return continuation(code);\n  }\n\n  /**\n   * In raw continuation, after `</`, in a raw tag name.\n   *\n   * ```markdown\n   * > | <script>console.log(1)</script>\n   *                             ^^^^^^\n   * ```\n   *\n   * @type {State}\n   */\n  function continuationRawEndTag(code) {\n    if (code === 62) {\n      const name = buffer.toLowerCase();\n      if (htmlRawNames.includes(name)) {\n        effects.consume(code);\n        return continuationClose;\n      }\n      return continuation(code);\n    }\n    if (asciiAlpha(code) && buffer.length < 8) {\n      // Always the case.\n      effects.consume(code);\n      buffer += String.fromCharCode(code);\n      return continuationRawEndTag;\n    }\n    return continuation(code);\n  }\n\n  /**\n   * In cdata continuation, after `]`, expecting `]>`.\n   *\n   * ```markdown\n   * > | <![CDATA[>&<]]>\n   *                  ^\n   * ```\n   *\n   * @type {State}\n   */\n  function continuationCdataInside(code) {\n    if (code === 93) {\n      effects.consume(code);\n      return continuationDeclarationInside;\n    }\n    return continuation(code);\n  }\n\n  /**\n   * In declaration or instruction continuation, at `>`.\n   *\n   * ```markdown\n   * > | <!-->\n   *         ^\n   * > | <?>\n   *       ^\n   * > | <!q>\n   *        ^\n   * > | <!--ab-->\n   *             ^\n   * > | <![CDATA[>&<]]>\n   *                   ^\n   * ```\n   *\n   * @type {State}\n   */\n  function continuationDeclarationInside(code) {\n    if (code === 62) {\n      effects.consume(code);\n      return continuationClose;\n    }\n\n    // More dashes.\n    if (code === 45 && marker === 2) {\n      effects.consume(code);\n      return continuationDeclarationInside;\n    }\n    return continuation(code);\n  }\n\n  /**\n   * In closed continuation: everything we get until the eol/eof is part of it.\n   *\n   * ```markdown\n   * > | <!doctype>\n   *               ^\n   * ```\n   *\n   * @type {State}\n   */\n  function continuationClose(code) {\n    if (code === null || markdownLineEnding(code)) {\n      effects.exit(\"htmlFlowData\");\n      return continuationAfter(code);\n    }\n    effects.consume(code);\n    return continuationClose;\n  }\n\n  /**\n   * Done.\n   *\n   * ```markdown\n   * > | <!doctype>\n   *               ^\n   * ```\n   *\n   * @type {State}\n   */\n  function continuationAfter(code) {\n    effects.exit(\"htmlFlow\");\n    // // Feel free to interrupt.\n    // tokenizer.interrupt = false\n    // // No longer concrete.\n    // tokenizer.concrete = false\n    return ok(code);\n  }\n}\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeNonLazyContinuationStart(effects, ok, nok) {\n  const self = this;\n  return start;\n\n  /**\n   * At eol, before continuation.\n   *\n   * ```markdown\n   * > | * ```js\n   *            ^\n   *   | b\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    if (markdownLineEnding(code)) {\n      effects.enter(\"lineEnding\");\n      effects.consume(code);\n      effects.exit(\"lineEnding\");\n      return after;\n    }\n    return nok(code);\n  }\n\n  /**\n   * A continuation.\n   *\n   * ```markdown\n   *   | * ```js\n   * > | b\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function after(code) {\n    return self.parser.lazy[self.now().line] ? nok(code) : ok(code);\n  }\n}\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeBlankLineBefore(effects, ok, nok) {\n  return start;\n\n  /**\n   * Before eol, expecting blank line.\n   *\n   * ```markdown\n   * > | <div>\n   *          ^\n   *   |\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    effects.enter(\"lineEnding\");\n    effects.consume(code);\n    effects.exit(\"lineEnding\");\n    return effects.attempt(blankLine, ok, nok);\n  }\n}","/**\n * @import {\n *   Code,\n *   Construct,\n *   State,\n *   TokenizeContext,\n *   Tokenizer\n * } from 'micromark-util-types'\n */\n\nimport { factorySpace } from 'micromark-factory-space';\nimport { markdownLineEnding, markdownSpace } from 'micromark-util-character';\n/** @type {Construct} */\nconst nonLazyContinuation = {\n  partial: true,\n  tokenize: tokenizeNonLazyContinuation\n};\n\n/** @type {Construct} */\nexport const codeFenced = {\n  concrete: true,\n  name: 'codeFenced',\n  tokenize: tokenizeCodeFenced\n};\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeCodeFenced(effects, ok, nok) {\n  const self = this;\n  /** @type {Construct} */\n  const closeStart = {\n    partial: true,\n    tokenize: tokenizeCloseStart\n  };\n  let initialPrefix = 0;\n  let sizeOpen = 0;\n  /** @type {NonNullable<Code>} */\n  let marker;\n  return start;\n\n  /**\n   * Start of code.\n   *\n   * ```markdown\n   * > | ~~~js\n   *     ^\n   *   | alert(1)\n   *   | ~~~\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    // To do: parse whitespace like `markdown-rs`.\n    return beforeSequenceOpen(code);\n  }\n\n  /**\n   * In opening fence, after prefix, at sequence.\n   *\n   * ```markdown\n   * > | ~~~js\n   *     ^\n   *   | alert(1)\n   *   | ~~~\n   * ```\n   *\n   * @type {State}\n   */\n  function beforeSequenceOpen(code) {\n    const tail = self.events[self.events.length - 1];\n    initialPrefix = tail && tail[1].type === \"linePrefix\" ? tail[2].sliceSerialize(tail[1], true).length : 0;\n    marker = code;\n    effects.enter(\"codeFenced\");\n    effects.enter(\"codeFencedFence\");\n    effects.enter(\"codeFencedFenceSequence\");\n    return sequenceOpen(code);\n  }\n\n  /**\n   * In opening fence sequence.\n   *\n   * ```markdown\n   * > | ~~~js\n   *      ^\n   *   | alert(1)\n   *   | ~~~\n   * ```\n   *\n   * @type {State}\n   */\n  function sequenceOpen(code) {\n    if (code === marker) {\n      sizeOpen++;\n      effects.consume(code);\n      return sequenceOpen;\n    }\n    if (sizeOpen < 3) {\n      return nok(code);\n    }\n    effects.exit(\"codeFencedFenceSequence\");\n    return markdownSpace(code) ? factorySpace(effects, infoBefore, \"whitespace\")(code) : infoBefore(code);\n  }\n\n  /**\n   * In opening fence, after the sequence (and optional whitespace), before info.\n   *\n   * ```markdown\n   * > | ~~~js\n   *        ^\n   *   | alert(1)\n   *   | ~~~\n   * ```\n   *\n   * @type {State}\n   */\n  function infoBefore(code) {\n    if (code === null || markdownLineEnding(code)) {\n      effects.exit(\"codeFencedFence\");\n      return self.interrupt ? ok(code) : effects.check(nonLazyContinuation, atNonLazyBreak, after)(code);\n    }\n    effects.enter(\"codeFencedFenceInfo\");\n    effects.enter(\"chunkString\", {\n      contentType: \"string\"\n    });\n    return info(code);\n  }\n\n  /**\n   * In info.\n   *\n   * ```markdown\n   * > | ~~~js\n   *        ^\n   *   | alert(1)\n   *   | ~~~\n   * ```\n   *\n   * @type {State}\n   */\n  function info(code) {\n    if (code === null || markdownLineEnding(code)) {\n      effects.exit(\"chunkString\");\n      effects.exit(\"codeFencedFenceInfo\");\n      return infoBefore(code);\n    }\n    if (markdownSpace(code)) {\n      effects.exit(\"chunkString\");\n      effects.exit(\"codeFencedFenceInfo\");\n      return factorySpace(effects, metaBefore, \"whitespace\")(code);\n    }\n    if (code === 96 && code === marker) {\n      return nok(code);\n    }\n    effects.consume(code);\n    return info;\n  }\n\n  /**\n   * In opening fence, after info and whitespace, before meta.\n   *\n   * ```markdown\n   * > | ~~~js eval\n   *           ^\n   *   | alert(1)\n   *   | ~~~\n   * ```\n   *\n   * @type {State}\n   */\n  function metaBefore(code) {\n    if (code === null || markdownLineEnding(code)) {\n      return infoBefore(code);\n    }\n    effects.enter(\"codeFencedFenceMeta\");\n    effects.enter(\"chunkString\", {\n      contentType: \"string\"\n    });\n    return meta(code);\n  }\n\n  /**\n   * In meta.\n   *\n   * ```markdown\n   * > | ~~~js eval\n   *           ^\n   *   | alert(1)\n   *   | ~~~\n   * ```\n   *\n   * @type {State}\n   */\n  function meta(code) {\n    if (code === null || markdownLineEnding(code)) {\n      effects.exit(\"chunkString\");\n      effects.exit(\"codeFencedFenceMeta\");\n      return infoBefore(code);\n    }\n    if (code === 96 && code === marker) {\n      return nok(code);\n    }\n    effects.consume(code);\n    return meta;\n  }\n\n  /**\n   * At eol/eof in code, before a non-lazy closing fence or content.\n   *\n   * ```markdown\n   * > | ~~~js\n   *          ^\n   * > | alert(1)\n   *             ^\n   *   | ~~~\n   * ```\n   *\n   * @type {State}\n   */\n  function atNonLazyBreak(code) {\n    return effects.attempt(closeStart, after, contentBefore)(code);\n  }\n\n  /**\n   * Before code content, not a closing fence, at eol.\n   *\n   * ```markdown\n   *   | ~~~js\n   * > | alert(1)\n   *             ^\n   *   | ~~~\n   * ```\n   *\n   * @type {State}\n   */\n  function contentBefore(code) {\n    effects.enter(\"lineEnding\");\n    effects.consume(code);\n    effects.exit(\"lineEnding\");\n    return contentStart;\n  }\n\n  /**\n   * Before code content, not a closing fence.\n   *\n   * ```markdown\n   *   | ~~~js\n   * > | alert(1)\n   *     ^\n   *   | ~~~\n   * ```\n   *\n   * @type {State}\n   */\n  function contentStart(code) {\n    return initialPrefix > 0 && markdownSpace(code) ? factorySpace(effects, beforeContentChunk, \"linePrefix\", initialPrefix + 1)(code) : beforeContentChunk(code);\n  }\n\n  /**\n   * Before code content, after optional prefix.\n   *\n   * ```markdown\n   *   | ~~~js\n   * > | alert(1)\n   *     ^\n   *   | ~~~\n   * ```\n   *\n   * @type {State}\n   */\n  function beforeContentChunk(code) {\n    if (code === null || markdownLineEnding(code)) {\n      return effects.check(nonLazyContinuation, atNonLazyBreak, after)(code);\n    }\n    effects.enter(\"codeFlowValue\");\n    return contentChunk(code);\n  }\n\n  /**\n   * In code content.\n   *\n   * ```markdown\n   *   | ~~~js\n   * > | alert(1)\n   *     ^^^^^^^^\n   *   | ~~~\n   * ```\n   *\n   * @type {State}\n   */\n  function contentChunk(code) {\n    if (code === null || markdownLineEnding(code)) {\n      effects.exit(\"codeFlowValue\");\n      return beforeContentChunk(code);\n    }\n    effects.consume(code);\n    return contentChunk;\n  }\n\n  /**\n   * After code.\n   *\n   * ```markdown\n   *   | ~~~js\n   *   | alert(1)\n   * > | ~~~\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function after(code) {\n    effects.exit(\"codeFenced\");\n    return ok(code);\n  }\n\n  /**\n   * @this {TokenizeContext}\n   *   Context.\n   * @type {Tokenizer}\n   */\n  function tokenizeCloseStart(effects, ok, nok) {\n    let size = 0;\n    return startBefore;\n\n    /**\n     *\n     *\n     * @type {State}\n     */\n    function startBefore(code) {\n      effects.enter(\"lineEnding\");\n      effects.consume(code);\n      effects.exit(\"lineEnding\");\n      return start;\n    }\n\n    /**\n     * Before closing fence, at optional whitespace.\n     *\n     * ```markdown\n     *   | ~~~js\n     *   | alert(1)\n     * > | ~~~\n     *     ^\n     * ```\n     *\n     * @type {State}\n     */\n    function start(code) {\n      // Always populated by defaults.\n\n      // To do: `enter` here or in next state?\n      effects.enter(\"codeFencedFence\");\n      return markdownSpace(code) ? factorySpace(effects, beforeSequenceClose, \"linePrefix\", self.parser.constructs.disable.null.includes('codeIndented') ? undefined : 4)(code) : beforeSequenceClose(code);\n    }\n\n    /**\n     * In closing fence, after optional whitespace, at sequence.\n     *\n     * ```markdown\n     *   | ~~~js\n     *   | alert(1)\n     * > | ~~~\n     *     ^\n     * ```\n     *\n     * @type {State}\n     */\n    function beforeSequenceClose(code) {\n      if (code === marker) {\n        effects.enter(\"codeFencedFenceSequence\");\n        return sequenceClose(code);\n      }\n      return nok(code);\n    }\n\n    /**\n     * In closing fence sequence.\n     *\n     * ```markdown\n     *   | ~~~js\n     *   | alert(1)\n     * > | ~~~\n     *     ^\n     * ```\n     *\n     * @type {State}\n     */\n    function sequenceClose(code) {\n      if (code === marker) {\n        size++;\n        effects.consume(code);\n        return sequenceClose;\n      }\n      if (size >= sizeOpen) {\n        effects.exit(\"codeFencedFenceSequence\");\n        return markdownSpace(code) ? factorySpace(effects, sequenceCloseAfter, \"whitespace\")(code) : sequenceCloseAfter(code);\n      }\n      return nok(code);\n    }\n\n    /**\n     * After closing fence sequence, after optional whitespace.\n     *\n     * ```markdown\n     *   | ~~~js\n     *   | alert(1)\n     * > | ~~~\n     *        ^\n     * ```\n     *\n     * @type {State}\n     */\n    function sequenceCloseAfter(code) {\n      if (code === null || markdownLineEnding(code)) {\n        effects.exit(\"codeFencedFence\");\n        return ok(code);\n      }\n      return nok(code);\n    }\n  }\n}\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeNonLazyContinuation(effects, ok, nok) {\n  const self = this;\n  return start;\n\n  /**\n   *\n   *\n   * @type {State}\n   */\n  function start(code) {\n    if (code === null) {\n      return nok(code);\n    }\n    effects.enter(\"lineEnding\");\n    effects.consume(code);\n    effects.exit(\"lineEnding\");\n    return lineStart;\n  }\n\n  /**\n   *\n   *\n   * @type {State}\n   */\n  function lineStart(code) {\n    return self.parser.lazy[self.now().line] ? nok(code) : ok(code);\n  }\n}","/**\n * @import {\n *   Code,\n *   Construct,\n *   State,\n *   TokenizeContext,\n *   Tokenizer\n * } from 'micromark-util-types'\n */\n\nimport { decodeNamedCharacterReference } from 'decode-named-character-reference';\nimport { asciiAlphanumeric, asciiDigit, asciiHexDigit } from 'micromark-util-character';\n/** @type {Construct} */\nexport const characterReference = {\n  name: 'characterReference',\n  tokenize: tokenizeCharacterReference\n};\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeCharacterReference(effects, ok, nok) {\n  const self = this;\n  let size = 0;\n  /** @type {number} */\n  let max;\n  /** @type {(code: Code) => boolean} */\n  let test;\n  return start;\n\n  /**\n   * Start of character reference.\n   *\n   * ```markdown\n   * > | a&amp;b\n   *      ^\n   * > | a&#123;b\n   *      ^\n   * > | a&#x9;b\n   *      ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    effects.enter(\"characterReference\");\n    effects.enter(\"characterReferenceMarker\");\n    effects.consume(code);\n    effects.exit(\"characterReferenceMarker\");\n    return open;\n  }\n\n  /**\n   * After `&`, at `#` for numeric references or alphanumeric for named\n   * references.\n   *\n   * ```markdown\n   * > | a&amp;b\n   *       ^\n   * > | a&#123;b\n   *       ^\n   * > | a&#x9;b\n   *       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function open(code) {\n    if (code === 35) {\n      effects.enter(\"characterReferenceMarkerNumeric\");\n      effects.consume(code);\n      effects.exit(\"characterReferenceMarkerNumeric\");\n      return numeric;\n    }\n    effects.enter(\"characterReferenceValue\");\n    max = 31;\n    test = asciiAlphanumeric;\n    return value(code);\n  }\n\n  /**\n   * After `#`, at `x` for hexadecimals or digit for decimals.\n   *\n   * ```markdown\n   * > | a&#123;b\n   *        ^\n   * > | a&#x9;b\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function numeric(code) {\n    if (code === 88 || code === 120) {\n      effects.enter(\"characterReferenceMarkerHexadecimal\");\n      effects.consume(code);\n      effects.exit(\"characterReferenceMarkerHexadecimal\");\n      effects.enter(\"characterReferenceValue\");\n      max = 6;\n      test = asciiHexDigit;\n      return value;\n    }\n    effects.enter(\"characterReferenceValue\");\n    max = 7;\n    test = asciiDigit;\n    return value(code);\n  }\n\n  /**\n   * After markers (`&#x`, `&#`, or `&`), in value, before `;`.\n   *\n   * The character reference kind defines what and how many characters are\n   * allowed.\n   *\n   * ```markdown\n   * > | a&amp;b\n   *       ^^^\n   * > | a&#123;b\n   *        ^^^\n   * > | a&#x9;b\n   *         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function value(code) {\n    if (code === 59 && size) {\n      const token = effects.exit(\"characterReferenceValue\");\n      if (test === asciiAlphanumeric && !decodeNamedCharacterReference(self.sliceSerialize(token))) {\n        return nok(code);\n      }\n\n      // To do: `markdown-rs` uses a different name:\n      // `CharacterReferenceMarkerSemi`.\n      effects.enter(\"characterReferenceMarker\");\n      effects.consume(code);\n      effects.exit(\"characterReferenceMarker\");\n      effects.exit(\"characterReference\");\n      return ok;\n    }\n    if (test(code) && size++ < max) {\n      effects.consume(code);\n      return value;\n    }\n    return nok(code);\n  }\n}","/**\n * @import {\n *   Construct,\n *   State,\n *   TokenizeContext,\n *   Tokenizer\n * } from 'micromark-util-types'\n */\n\nimport { asciiPunctuation } from 'micromark-util-character';\n/** @type {Construct} */\nexport const characterEscape = {\n  name: 'characterEscape',\n  tokenize: tokenizeCharacterEscape\n};\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeCharacterEscape(effects, ok, nok) {\n  return start;\n\n  /**\n   * Start of character escape.\n   *\n   * ```markdown\n   * > | a\\*b\n   *      ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    effects.enter(\"characterEscape\");\n    effects.enter(\"escapeMarker\");\n    effects.consume(code);\n    effects.exit(\"escapeMarker\");\n    return inside;\n  }\n\n  /**\n   * After `\\`, at punctuation.\n   *\n   * ```markdown\n   * > | a\\*b\n   *       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function inside(code) {\n    // ASCII punctuation.\n    if (asciiPunctuation(code)) {\n      effects.enter(\"characterEscapeValue\");\n      effects.consume(code);\n      effects.exit(\"characterEscapeValue\");\n      effects.exit(\"characterEscape\");\n      return ok;\n    }\n    return nok(code);\n  }\n}","/**\n * @import {\n *   Construct,\n *   State,\n *   TokenizeContext,\n *   Tokenizer\n * } from 'micromark-util-types'\n */\n\nimport { factorySpace } from 'micromark-factory-space';\nimport { markdownLineEnding } from 'micromark-util-character';\n/** @type {Construct} */\nexport const lineEnding = {\n  name: 'lineEnding',\n  tokenize: tokenizeLineEnding\n};\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeLineEnding(effects, ok) {\n  return start;\n\n  /** @type {State} */\n  function start(code) {\n    effects.enter(\"lineEnding\");\n    effects.consume(code);\n    effects.exit(\"lineEnding\");\n    return factorySpace(effects, ok, \"linePrefix\");\n  }\n}","/**\n * @import {\n *   Construct,\n *   Event,\n *   Resolver,\n *   State,\n *   TokenizeContext,\n *   Tokenizer,\n *   Token\n * } from 'micromark-util-types'\n */\n\nimport { factoryDestination } from 'micromark-factory-destination';\nimport { factoryLabel } from 'micromark-factory-label';\nimport { factoryTitle } from 'micromark-factory-title';\nimport { factoryWhitespace } from 'micromark-factory-whitespace';\nimport { markdownLineEndingOrSpace } from 'micromark-util-character';\nimport { push, splice } from 'micromark-util-chunked';\nimport { normalizeIdentifier } from 'micromark-util-normalize-identifier';\nimport { resolveAll } from 'micromark-util-resolve-all';\n/** @type {Construct} */\nexport const labelEnd = {\n  name: 'labelEnd',\n  resolveAll: resolveAllLabelEnd,\n  resolveTo: resolveToLabelEnd,\n  tokenize: tokenizeLabelEnd\n};\n\n/** @type {Construct} */\nconst resourceConstruct = {\n  tokenize: tokenizeResource\n};\n/** @type {Construct} */\nconst referenceFullConstruct = {\n  tokenize: tokenizeReferenceFull\n};\n/** @type {Construct} */\nconst referenceCollapsedConstruct = {\n  tokenize: tokenizeReferenceCollapsed\n};\n\n/** @type {Resolver} */\nfunction resolveAllLabelEnd(events) {\n  let index = -1;\n  /** @type {Array<Event>} */\n  const newEvents = [];\n  while (++index < events.length) {\n    const token = events[index][1];\n    newEvents.push(events[index]);\n    if (token.type === \"labelImage\" || token.type === \"labelLink\" || token.type === \"labelEnd\") {\n      // Remove the marker.\n      const offset = token.type === \"labelImage\" ? 4 : 2;\n      token.type = \"data\";\n      index += offset;\n    }\n  }\n\n  // If the events are equal, we don't have to copy newEvents to events\n  if (events.length !== newEvents.length) {\n    splice(events, 0, events.length, newEvents);\n  }\n  return events;\n}\n\n/** @type {Resolver} */\nfunction resolveToLabelEnd(events, context) {\n  let index = events.length;\n  let offset = 0;\n  /** @type {Token} */\n  let token;\n  /** @type {number | undefined} */\n  let open;\n  /** @type {number | undefined} */\n  let close;\n  /** @type {Array<Event>} */\n  let media;\n\n  // Find an opening.\n  while (index--) {\n    token = events[index][1];\n    if (open) {\n      // If we see another link, or inactive link label, we’ve been here before.\n      if (token.type === \"link\" || token.type === \"labelLink\" && token._inactive) {\n        break;\n      }\n\n      // Mark other link openings as inactive, as we can’t have links in\n      // links.\n      if (events[index][0] === 'enter' && token.type === \"labelLink\") {\n        token._inactive = true;\n      }\n    } else if (close) {\n      if (events[index][0] === 'enter' && (token.type === \"labelImage\" || token.type === \"labelLink\") && !token._balanced) {\n        open = index;\n        if (token.type !== \"labelLink\") {\n          offset = 2;\n          break;\n        }\n      }\n    } else if (token.type === \"labelEnd\") {\n      close = index;\n    }\n  }\n  const group = {\n    type: events[open][1].type === \"labelLink\" ? \"link\" : \"image\",\n    start: {\n      ...events[open][1].start\n    },\n    end: {\n      ...events[events.length - 1][1].end\n    }\n  };\n  const label = {\n    type: \"label\",\n    start: {\n      ...events[open][1].start\n    },\n    end: {\n      ...events[close][1].end\n    }\n  };\n  const text = {\n    type: \"labelText\",\n    start: {\n      ...events[open + offset + 2][1].end\n    },\n    end: {\n      ...events[close - 2][1].start\n    }\n  };\n  media = [['enter', group, context], ['enter', label, context]];\n\n  // Opening marker.\n  media = push(media, events.slice(open + 1, open + offset + 3));\n\n  // Text open.\n  media = push(media, [['enter', text, context]]);\n\n  // Always populated by defaults.\n\n  // Between.\n  media = push(media, resolveAll(context.parser.constructs.insideSpan.null, events.slice(open + offset + 4, close - 3), context));\n\n  // Text close, marker close, label close.\n  media = push(media, [['exit', text, context], events[close - 2], events[close - 1], ['exit', label, context]]);\n\n  // Reference, resource, or so.\n  media = push(media, events.slice(close + 1));\n\n  // Media close.\n  media = push(media, [['exit', group, context]]);\n  splice(events, open, events.length, media);\n  return events;\n}\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeLabelEnd(effects, ok, nok) {\n  const self = this;\n  let index = self.events.length;\n  /** @type {Token} */\n  let labelStart;\n  /** @type {boolean} */\n  let defined;\n\n  // Find an opening.\n  while (index--) {\n    if ((self.events[index][1].type === \"labelImage\" || self.events[index][1].type === \"labelLink\") && !self.events[index][1]._balanced) {\n      labelStart = self.events[index][1];\n      break;\n    }\n  }\n  return start;\n\n  /**\n   * Start of label end.\n   *\n   * ```markdown\n   * > | [a](b) c\n   *       ^\n   * > | [a][b] c\n   *       ^\n   * > | [a][] b\n   *       ^\n   * > | [a] b\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    // If there is not an okay opening.\n    if (!labelStart) {\n      return nok(code);\n    }\n\n    // If the corresponding label (link) start is marked as inactive,\n    // it means we’d be wrapping a link, like this:\n    //\n    // ```markdown\n    // > | a [b [c](d) e](f) g.\n    //                  ^\n    // ```\n    //\n    // We can’t have that, so it’s just balanced brackets.\n    if (labelStart._inactive) {\n      return labelEndNok(code);\n    }\n    defined = self.parser.defined.includes(normalizeIdentifier(self.sliceSerialize({\n      start: labelStart.end,\n      end: self.now()\n    })));\n    effects.enter(\"labelEnd\");\n    effects.enter(\"labelMarker\");\n    effects.consume(code);\n    effects.exit(\"labelMarker\");\n    effects.exit(\"labelEnd\");\n    return after;\n  }\n\n  /**\n   * After `]`.\n   *\n   * ```markdown\n   * > | [a](b) c\n   *       ^\n   * > | [a][b] c\n   *       ^\n   * > | [a][] b\n   *       ^\n   * > | [a] b\n   *       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function after(code) {\n    // Note: `markdown-rs` also parses GFM footnotes here, which for us is in\n    // an extension.\n\n    // Resource (`[asd](fgh)`)?\n    if (code === 40) {\n      return effects.attempt(resourceConstruct, labelEndOk, defined ? labelEndOk : labelEndNok)(code);\n    }\n\n    // Full (`[asd][fgh]`) or collapsed (`[asd][]`) reference?\n    if (code === 91) {\n      return effects.attempt(referenceFullConstruct, labelEndOk, defined ? referenceNotFull : labelEndNok)(code);\n    }\n\n    // Shortcut (`[asd]`) reference?\n    return defined ? labelEndOk(code) : labelEndNok(code);\n  }\n\n  /**\n   * After `]`, at `[`, but not at a full reference.\n   *\n   * > 👉 **Note**: we only get here if the label is defined.\n   *\n   * ```markdown\n   * > | [a][] b\n   *        ^\n   * > | [a] b\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function referenceNotFull(code) {\n    return effects.attempt(referenceCollapsedConstruct, labelEndOk, labelEndNok)(code);\n  }\n\n  /**\n   * Done, we found something.\n   *\n   * ```markdown\n   * > | [a](b) c\n   *           ^\n   * > | [a][b] c\n   *           ^\n   * > | [a][] b\n   *          ^\n   * > | [a] b\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function labelEndOk(code) {\n    // Note: `markdown-rs` does a bunch of stuff here.\n    return ok(code);\n  }\n\n  /**\n   * Done, it’s nothing.\n   *\n   * There was an okay opening, but we didn’t match anything.\n   *\n   * ```markdown\n   * > | [a](b c\n   *        ^\n   * > | [a][b c\n   *        ^\n   * > | [a] b\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function labelEndNok(code) {\n    labelStart._balanced = true;\n    return nok(code);\n  }\n}\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeResource(effects, ok, nok) {\n  return resourceStart;\n\n  /**\n   * At a resource.\n   *\n   * ```markdown\n   * > | [a](b) c\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function resourceStart(code) {\n    effects.enter(\"resource\");\n    effects.enter(\"resourceMarker\");\n    effects.consume(code);\n    effects.exit(\"resourceMarker\");\n    return resourceBefore;\n  }\n\n  /**\n   * In resource, after `(`, at optional whitespace.\n   *\n   * ```markdown\n   * > | [a](b) c\n   *         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function resourceBefore(code) {\n    return markdownLineEndingOrSpace(code) ? factoryWhitespace(effects, resourceOpen)(code) : resourceOpen(code);\n  }\n\n  /**\n   * In resource, after optional whitespace, at `)` or a destination.\n   *\n   * ```markdown\n   * > | [a](b) c\n   *         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function resourceOpen(code) {\n    if (code === 41) {\n      return resourceEnd(code);\n    }\n    return factoryDestination(effects, resourceDestinationAfter, resourceDestinationMissing, \"resourceDestination\", \"resourceDestinationLiteral\", \"resourceDestinationLiteralMarker\", \"resourceDestinationRaw\", \"resourceDestinationString\", 32)(code);\n  }\n\n  /**\n   * In resource, after destination, at optional whitespace.\n   *\n   * ```markdown\n   * > | [a](b) c\n   *          ^\n   * ```\n   *\n   * @type {State}\n   */\n  function resourceDestinationAfter(code) {\n    return markdownLineEndingOrSpace(code) ? factoryWhitespace(effects, resourceBetween)(code) : resourceEnd(code);\n  }\n\n  /**\n   * At invalid destination.\n   *\n   * ```markdown\n   * > | [a](<<) b\n   *         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function resourceDestinationMissing(code) {\n    return nok(code);\n  }\n\n  /**\n   * In resource, after destination and whitespace, at `(` or title.\n   *\n   * ```markdown\n   * > | [a](b ) c\n   *           ^\n   * ```\n   *\n   * @type {State}\n   */\n  function resourceBetween(code) {\n    if (code === 34 || code === 39 || code === 40) {\n      return factoryTitle(effects, resourceTitleAfter, nok, \"resourceTitle\", \"resourceTitleMarker\", \"resourceTitleString\")(code);\n    }\n    return resourceEnd(code);\n  }\n\n  /**\n   * In resource, after title, at optional whitespace.\n   *\n   * ```markdown\n   * > | [a](b \"c\") d\n   *              ^\n   * ```\n   *\n   * @type {State}\n   */\n  function resourceTitleAfter(code) {\n    return markdownLineEndingOrSpace(code) ? factoryWhitespace(effects, resourceEnd)(code) : resourceEnd(code);\n  }\n\n  /**\n   * In resource, at `)`.\n   *\n   * ```markdown\n   * > | [a](b) d\n   *          ^\n   * ```\n   *\n   * @type {State}\n   */\n  function resourceEnd(code) {\n    if (code === 41) {\n      effects.enter(\"resourceMarker\");\n      effects.consume(code);\n      effects.exit(\"resourceMarker\");\n      effects.exit(\"resource\");\n      return ok;\n    }\n    return nok(code);\n  }\n}\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeReferenceFull(effects, ok, nok) {\n  const self = this;\n  return referenceFull;\n\n  /**\n   * In a reference (full), at the `[`.\n   *\n   * ```markdown\n   * > | [a][b] d\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function referenceFull(code) {\n    return factoryLabel.call(self, effects, referenceFullAfter, referenceFullMissing, \"reference\", \"referenceMarker\", \"referenceString\")(code);\n  }\n\n  /**\n   * In a reference (full), after `]`.\n   *\n   * ```markdown\n   * > | [a][b] d\n   *          ^\n   * ```\n   *\n   * @type {State}\n   */\n  function referenceFullAfter(code) {\n    return self.parser.defined.includes(normalizeIdentifier(self.sliceSerialize(self.events[self.events.length - 1][1]).slice(1, -1))) ? ok(code) : nok(code);\n  }\n\n  /**\n   * In reference (full) that was missing.\n   *\n   * ```markdown\n   * > | [a][b d\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function referenceFullMissing(code) {\n    return nok(code);\n  }\n}\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeReferenceCollapsed(effects, ok, nok) {\n  return referenceCollapsedStart;\n\n  /**\n   * In reference (collapsed), at `[`.\n   *\n   * > 👉 **Note**: we only get here if the label is defined.\n   *\n   * ```markdown\n   * > | [a][] d\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function referenceCollapsedStart(code) {\n    // We only attempt a collapsed label if there’s a `[`.\n\n    effects.enter(\"reference\");\n    effects.enter(\"referenceMarker\");\n    effects.consume(code);\n    effects.exit(\"referenceMarker\");\n    return referenceCollapsedOpen;\n  }\n\n  /**\n   * In reference (collapsed), at `]`.\n   *\n   * > 👉 **Note**: we only get here if the label is defined.\n   *\n   * ```markdown\n   * > | [a][] d\n   *         ^\n   * ```\n   *\n   *  @type {State}\n   */\n  function referenceCollapsedOpen(code) {\n    if (code === 93) {\n      effects.enter(\"referenceMarker\");\n      effects.consume(code);\n      effects.exit(\"referenceMarker\");\n      effects.exit(\"reference\");\n      return ok;\n    }\n    return nok(code);\n  }\n}","/**\n * @import {\n *   Construct,\n *   State,\n *   TokenizeContext,\n *   Tokenizer\n * } from 'micromark-util-types'\n */\n\nimport { labelEnd } from './label-end.js';\n\n/** @type {Construct} */\nexport const labelStartImage = {\n  name: 'labelStartImage',\n  resolveAll: labelEnd.resolveAll,\n  tokenize: tokenizeLabelStartImage\n};\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeLabelStartImage(effects, ok, nok) {\n  const self = this;\n  return start;\n\n  /**\n   * Start of label (image) start.\n   *\n   * ```markdown\n   * > | a ![b] c\n   *       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    effects.enter(\"labelImage\");\n    effects.enter(\"labelImageMarker\");\n    effects.consume(code);\n    effects.exit(\"labelImageMarker\");\n    return open;\n  }\n\n  /**\n   * After `!`, at `[`.\n   *\n   * ```markdown\n   * > | a ![b] c\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function open(code) {\n    if (code === 91) {\n      effects.enter(\"labelMarker\");\n      effects.consume(code);\n      effects.exit(\"labelMarker\");\n      effects.exit(\"labelImage\");\n      return after;\n    }\n    return nok(code);\n  }\n\n  /**\n   * After `![`.\n   *\n   * ```markdown\n   * > | a ![b] c\n   *         ^\n   * ```\n   *\n   * This is needed in because, when GFM footnotes are enabled, images never\n   * form when started with a `^`.\n   * Instead, links form:\n   *\n   * ```markdown\n   * ![^a](b)\n   *\n   * ![^a][b]\n   *\n   * [b]: c\n   * ```\n   *\n   * ```html\n   * <p>!<a href=\\\"b\\\">^a</a></p>\n   * <p>!<a href=\\\"c\\\">^a</a></p>\n   * ```\n   *\n   * @type {State}\n   */\n  function after(code) {\n    // To do: use a new field to do this, this is still needed for\n    // `micromark-extension-gfm-footnote`, but the `label-start-link`\n    // behavior isn’t.\n    // Hidden footnotes hook.\n    /* c8 ignore next 3 */\n    return code === 94 && '_hiddenFootnoteSupport' in self.parser.constructs ? nok(code) : ok(code);\n  }\n}","/**\n * @import {Code} from 'micromark-util-types'\n */\n\nimport { markdownLineEndingOrSpace, unicodePunctuation, unicodeWhitespace } from 'micromark-util-character';\n/**\n * Classify whether a code represents whitespace, punctuation, or something\n * else.\n *\n * Used for attention (emphasis, strong), whose sequences can open or close\n * based on the class of surrounding characters.\n *\n * > 👉 **Note**: eof (`null`) is seen as whitespace.\n *\n * @param {Code} code\n *   Code.\n * @returns {typeof constants.characterGroupWhitespace | typeof constants.characterGroupPunctuation | undefined}\n *   Group.\n */\nexport function classifyCharacter(code) {\n  if (code === null || markdownLineEndingOrSpace(code) || unicodeWhitespace(code)) {\n    return 1;\n  }\n  if (unicodePunctuation(code)) {\n    return 2;\n  }\n}","/**\n * @import {\n *   Code,\n *   Construct,\n *   Event,\n *   Point,\n *   Resolver,\n *   State,\n *   TokenizeContext,\n *   Tokenizer,\n *   Token\n * } from 'micromark-util-types'\n */\n\nimport { push, splice } from 'micromark-util-chunked';\nimport { classifyCharacter } from 'micromark-util-classify-character';\nimport { resolveAll } from 'micromark-util-resolve-all';\n/** @type {Construct} */\nexport const attention = {\n  name: 'attention',\n  resolveAll: resolveAllAttention,\n  tokenize: tokenizeAttention\n};\n\n/**\n * Take all events and resolve attention to emphasis or strong.\n *\n * @type {Resolver}\n */\n// eslint-disable-next-line complexity\nfunction resolveAllAttention(events, context) {\n  let index = -1;\n  /** @type {number} */\n  let open;\n  /** @type {Token} */\n  let group;\n  /** @type {Token} */\n  let text;\n  /** @type {Token} */\n  let openingSequence;\n  /** @type {Token} */\n  let closingSequence;\n  /** @type {number} */\n  let use;\n  /** @type {Array<Event>} */\n  let nextEvents;\n  /** @type {number} */\n  let offset;\n\n  // Walk through all events.\n  //\n  // Note: performance of this is fine on an mb of normal markdown, but it’s\n  // a bottleneck for malicious stuff.\n  while (++index < events.length) {\n    // Find a token that can close.\n    if (events[index][0] === 'enter' && events[index][1].type === 'attentionSequence' && events[index][1]._close) {\n      open = index;\n\n      // Now walk back to find an opener.\n      while (open--) {\n        // Find a token that can open the closer.\n        if (events[open][0] === 'exit' && events[open][1].type === 'attentionSequence' && events[open][1]._open &&\n        // If the markers are the same:\n        context.sliceSerialize(events[open][1]).charCodeAt(0) === context.sliceSerialize(events[index][1]).charCodeAt(0)) {\n          // If the opening can close or the closing can open,\n          // and the close size *is not* a multiple of three,\n          // but the sum of the opening and closing size *is* multiple of three,\n          // then don’t match.\n          if ((events[open][1]._close || events[index][1]._open) && (events[index][1].end.offset - events[index][1].start.offset) % 3 && !((events[open][1].end.offset - events[open][1].start.offset + events[index][1].end.offset - events[index][1].start.offset) % 3)) {\n            continue;\n          }\n\n          // Number of markers to use from the sequence.\n          use = events[open][1].end.offset - events[open][1].start.offset > 1 && events[index][1].end.offset - events[index][1].start.offset > 1 ? 2 : 1;\n          const start = {\n            ...events[open][1].end\n          };\n          const end = {\n            ...events[index][1].start\n          };\n          movePoint(start, -use);\n          movePoint(end, use);\n          openingSequence = {\n            type: use > 1 ? \"strongSequence\" : \"emphasisSequence\",\n            start,\n            end: {\n              ...events[open][1].end\n            }\n          };\n          closingSequence = {\n            type: use > 1 ? \"strongSequence\" : \"emphasisSequence\",\n            start: {\n              ...events[index][1].start\n            },\n            end\n          };\n          text = {\n            type: use > 1 ? \"strongText\" : \"emphasisText\",\n            start: {\n              ...events[open][1].end\n            },\n            end: {\n              ...events[index][1].start\n            }\n          };\n          group = {\n            type: use > 1 ? \"strong\" : \"emphasis\",\n            start: {\n              ...openingSequence.start\n            },\n            end: {\n              ...closingSequence.end\n            }\n          };\n          events[open][1].end = {\n            ...openingSequence.start\n          };\n          events[index][1].start = {\n            ...closingSequence.end\n          };\n          nextEvents = [];\n\n          // If there are more markers in the opening, add them before.\n          if (events[open][1].end.offset - events[open][1].start.offset) {\n            nextEvents = push(nextEvents, [['enter', events[open][1], context], ['exit', events[open][1], context]]);\n          }\n\n          // Opening.\n          nextEvents = push(nextEvents, [['enter', group, context], ['enter', openingSequence, context], ['exit', openingSequence, context], ['enter', text, context]]);\n\n          // Always populated by defaults.\n\n          // Between.\n          nextEvents = push(nextEvents, resolveAll(context.parser.constructs.insideSpan.null, events.slice(open + 1, index), context));\n\n          // Closing.\n          nextEvents = push(nextEvents, [['exit', text, context], ['enter', closingSequence, context], ['exit', closingSequence, context], ['exit', group, context]]);\n\n          // If there are more markers in the closing, add them after.\n          if (events[index][1].end.offset - events[index][1].start.offset) {\n            offset = 2;\n            nextEvents = push(nextEvents, [['enter', events[index][1], context], ['exit', events[index][1], context]]);\n          } else {\n            offset = 0;\n          }\n          splice(events, open - 1, index - open + 3, nextEvents);\n          index = open + nextEvents.length - offset - 2;\n          break;\n        }\n      }\n    }\n  }\n\n  // Remove remaining sequences.\n  index = -1;\n  while (++index < events.length) {\n    if (events[index][1].type === 'attentionSequence') {\n      events[index][1].type = 'data';\n    }\n  }\n  return events;\n}\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeAttention(effects, ok) {\n  const attentionMarkers = this.parser.constructs.attentionMarkers.null;\n  const previous = this.previous;\n  const before = classifyCharacter(previous);\n\n  /** @type {NonNullable<Code>} */\n  let marker;\n  return start;\n\n  /**\n   * Before a sequence.\n   *\n   * ```markdown\n   * > | **\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    marker = code;\n    effects.enter('attentionSequence');\n    return inside(code);\n  }\n\n  /**\n   * In a sequence.\n   *\n   * ```markdown\n   * > | **\n   *     ^^\n   * ```\n   *\n   * @type {State}\n   */\n  function inside(code) {\n    if (code === marker) {\n      effects.consume(code);\n      return inside;\n    }\n    const token = effects.exit('attentionSequence');\n\n    // To do: next major: move this to resolver, just like `markdown-rs`.\n    const after = classifyCharacter(code);\n\n    // Always populated by defaults.\n\n    const open = !after || after === 2 && before || attentionMarkers.includes(code);\n    const close = !before || before === 2 && after || attentionMarkers.includes(previous);\n    token._open = Boolean(marker === 42 ? open : open && (before || !close));\n    token._close = Boolean(marker === 42 ? close : close && (after || !open));\n    return ok(code);\n  }\n}\n\n/**\n * Move a point a bit.\n *\n * Note: `move` only works inside lines! It’s not possible to move past other\n * chunks (replacement characters, tabs, or line endings).\n *\n * @param {Point} point\n *   Point.\n * @param {number} offset\n *   Amount to move.\n * @returns {undefined}\n *   Nothing.\n */\nfunction movePoint(point, offset) {\n  point.column += offset;\n  point.offset += offset;\n  point._bufferIndex += offset;\n}","/**\n * @import {\n *   Construct,\n *   State,\n *   TokenizeContext,\n *   Tokenizer\n * } from 'micromark-util-types'\n */\n\nimport { asciiAlphanumeric, asciiAlpha, asciiAtext, asciiControl } from 'micromark-util-character';\n/** @type {Construct} */\nexport const autolink = {\n  name: 'autolink',\n  tokenize: tokenizeAutolink\n};\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeAutolink(effects, ok, nok) {\n  let size = 0;\n  return start;\n\n  /**\n   * Start of an autolink.\n   *\n   * ```markdown\n   * > | a<https://example.com>b\n   *      ^\n   * > | a<user@example.com>b\n   *      ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    effects.enter(\"autolink\");\n    effects.enter(\"autolinkMarker\");\n    effects.consume(code);\n    effects.exit(\"autolinkMarker\");\n    effects.enter(\"autolinkProtocol\");\n    return open;\n  }\n\n  /**\n   * After `<`, at protocol or atext.\n   *\n   * ```markdown\n   * > | a<https://example.com>b\n   *       ^\n   * > | a<user@example.com>b\n   *       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function open(code) {\n    if (asciiAlpha(code)) {\n      effects.consume(code);\n      return schemeOrEmailAtext;\n    }\n    if (code === 64) {\n      return nok(code);\n    }\n    return emailAtext(code);\n  }\n\n  /**\n   * At second byte of protocol or atext.\n   *\n   * ```markdown\n   * > | a<https://example.com>b\n   *        ^\n   * > | a<user@example.com>b\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function schemeOrEmailAtext(code) {\n    // ASCII alphanumeric and `+`, `-`, and `.`.\n    if (code === 43 || code === 45 || code === 46 || asciiAlphanumeric(code)) {\n      // Count the previous alphabetical from `open` too.\n      size = 1;\n      return schemeInsideOrEmailAtext(code);\n    }\n    return emailAtext(code);\n  }\n\n  /**\n   * In ambiguous protocol or atext.\n   *\n   * ```markdown\n   * > | a<https://example.com>b\n   *        ^\n   * > | a<user@example.com>b\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function schemeInsideOrEmailAtext(code) {\n    if (code === 58) {\n      effects.consume(code);\n      size = 0;\n      return urlInside;\n    }\n\n    // ASCII alphanumeric and `+`, `-`, and `.`.\n    if ((code === 43 || code === 45 || code === 46 || asciiAlphanumeric(code)) && size++ < 32) {\n      effects.consume(code);\n      return schemeInsideOrEmailAtext;\n    }\n    size = 0;\n    return emailAtext(code);\n  }\n\n  /**\n   * After protocol, in URL.\n   *\n   * ```markdown\n   * > | a<https://example.com>b\n   *             ^\n   * ```\n   *\n   * @type {State}\n   */\n  function urlInside(code) {\n    if (code === 62) {\n      effects.exit(\"autolinkProtocol\");\n      effects.enter(\"autolinkMarker\");\n      effects.consume(code);\n      effects.exit(\"autolinkMarker\");\n      effects.exit(\"autolink\");\n      return ok;\n    }\n\n    // ASCII control, space, or `<`.\n    if (code === null || code === 32 || code === 60 || asciiControl(code)) {\n      return nok(code);\n    }\n    effects.consume(code);\n    return urlInside;\n  }\n\n  /**\n   * In email atext.\n   *\n   * ```markdown\n   * > | a<user.name@example.com>b\n   *              ^\n   * ```\n   *\n   * @type {State}\n   */\n  function emailAtext(code) {\n    if (code === 64) {\n      effects.consume(code);\n      return emailAtSignOrDot;\n    }\n    if (asciiAtext(code)) {\n      effects.consume(code);\n      return emailAtext;\n    }\n    return nok(code);\n  }\n\n  /**\n   * In label, after at-sign or dot.\n   *\n   * ```markdown\n   * > | a<user.name@example.com>b\n   *                 ^       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function emailAtSignOrDot(code) {\n    return asciiAlphanumeric(code) ? emailLabel(code) : nok(code);\n  }\n\n  /**\n   * In label, where `.` and `>` are allowed.\n   *\n   * ```markdown\n   * > | a<user.name@example.com>b\n   *                   ^\n   * ```\n   *\n   * @type {State}\n   */\n  function emailLabel(code) {\n    if (code === 46) {\n      effects.consume(code);\n      size = 0;\n      return emailAtSignOrDot;\n    }\n    if (code === 62) {\n      // Exit, then change the token type.\n      effects.exit(\"autolinkProtocol\").type = \"autolinkEmail\";\n      effects.enter(\"autolinkMarker\");\n      effects.consume(code);\n      effects.exit(\"autolinkMarker\");\n      effects.exit(\"autolink\");\n      return ok;\n    }\n    return emailValue(code);\n  }\n\n  /**\n   * In label, where `.` and `>` are *not* allowed.\n   *\n   * Though, this is also used in `emailLabel` to parse other values.\n   *\n   * ```markdown\n   * > | a<user.name@ex-ample.com>b\n   *                    ^\n   * ```\n   *\n   * @type {State}\n   */\n  function emailValue(code) {\n    // ASCII alphanumeric or `-`.\n    if ((code === 45 || asciiAlphanumeric(code)) && size++ < 63) {\n      const next = code === 45 ? emailValue : emailLabel;\n      effects.consume(code);\n      return next;\n    }\n    return nok(code);\n  }\n}","/**\n * @import {\n *   Code,\n *   Construct,\n *   State,\n *   TokenizeContext,\n *   Tokenizer\n * } from 'micromark-util-types'\n */\n\nimport { factorySpace } from 'micromark-factory-space';\nimport { asciiAlphanumeric, asciiAlpha, markdownLineEndingOrSpace, markdownLineEnding, markdownSpace } from 'micromark-util-character';\n/** @type {Construct} */\nexport const htmlText = {\n  name: 'htmlText',\n  tokenize: tokenizeHtmlText\n};\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeHtmlText(effects, ok, nok) {\n  const self = this;\n  /** @type {NonNullable<Code> | undefined} */\n  let marker;\n  /** @type {number} */\n  let index;\n  /** @type {State} */\n  let returnState;\n  return start;\n\n  /**\n   * Start of HTML (text).\n   *\n   * ```markdown\n   * > | a <b> c\n   *       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    effects.enter(\"htmlText\");\n    effects.enter(\"htmlTextData\");\n    effects.consume(code);\n    return open;\n  }\n\n  /**\n   * After `<`, at tag name or other stuff.\n   *\n   * ```markdown\n   * > | a <b> c\n   *        ^\n   * > | a <!doctype> c\n   *        ^\n   * > | a <!--b--> c\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function open(code) {\n    if (code === 33) {\n      effects.consume(code);\n      return declarationOpen;\n    }\n    if (code === 47) {\n      effects.consume(code);\n      return tagCloseStart;\n    }\n    if (code === 63) {\n      effects.consume(code);\n      return instruction;\n    }\n\n    // ASCII alphabetical.\n    if (asciiAlpha(code)) {\n      effects.consume(code);\n      return tagOpen;\n    }\n    return nok(code);\n  }\n\n  /**\n   * After `<!`, at declaration, comment, or CDATA.\n   *\n   * ```markdown\n   * > | a <!doctype> c\n   *         ^\n   * > | a <!--b--> c\n   *         ^\n   * > | a <![CDATA[>&<]]> c\n   *         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function declarationOpen(code) {\n    if (code === 45) {\n      effects.consume(code);\n      return commentOpenInside;\n    }\n    if (code === 91) {\n      effects.consume(code);\n      index = 0;\n      return cdataOpenInside;\n    }\n    if (asciiAlpha(code)) {\n      effects.consume(code);\n      return declaration;\n    }\n    return nok(code);\n  }\n\n  /**\n   * In a comment, after `<!-`, at another `-`.\n   *\n   * ```markdown\n   * > | a <!--b--> c\n   *          ^\n   * ```\n   *\n   * @type {State}\n   */\n  function commentOpenInside(code) {\n    if (code === 45) {\n      effects.consume(code);\n      return commentEnd;\n    }\n    return nok(code);\n  }\n\n  /**\n   * In comment.\n   *\n   * ```markdown\n   * > | a <!--b--> c\n   *           ^\n   * ```\n   *\n   * @type {State}\n   */\n  function comment(code) {\n    if (code === null) {\n      return nok(code);\n    }\n    if (code === 45) {\n      effects.consume(code);\n      return commentClose;\n    }\n    if (markdownLineEnding(code)) {\n      returnState = comment;\n      return lineEndingBefore(code);\n    }\n    effects.consume(code);\n    return comment;\n  }\n\n  /**\n   * In comment, after `-`.\n   *\n   * ```markdown\n   * > | a <!--b--> c\n   *             ^\n   * ```\n   *\n   * @type {State}\n   */\n  function commentClose(code) {\n    if (code === 45) {\n      effects.consume(code);\n      return commentEnd;\n    }\n    return comment(code);\n  }\n\n  /**\n   * In comment, after `--`.\n   *\n   * ```markdown\n   * > | a <!--b--> c\n   *              ^\n   * ```\n   *\n   * @type {State}\n   */\n  function commentEnd(code) {\n    return code === 62 ? end(code) : code === 45 ? commentClose(code) : comment(code);\n  }\n\n  /**\n   * After `<![`, in CDATA, expecting `CDATA[`.\n   *\n   * ```markdown\n   * > | a <![CDATA[>&<]]> b\n   *          ^^^^^^\n   * ```\n   *\n   * @type {State}\n   */\n  function cdataOpenInside(code) {\n    const value = \"CDATA[\";\n    if (code === value.charCodeAt(index++)) {\n      effects.consume(code);\n      return index === value.length ? cdata : cdataOpenInside;\n    }\n    return nok(code);\n  }\n\n  /**\n   * In CDATA.\n   *\n   * ```markdown\n   * > | a <![CDATA[>&<]]> b\n   *                ^^^\n   * ```\n   *\n   * @type {State}\n   */\n  function cdata(code) {\n    if (code === null) {\n      return nok(code);\n    }\n    if (code === 93) {\n      effects.consume(code);\n      return cdataClose;\n    }\n    if (markdownLineEnding(code)) {\n      returnState = cdata;\n      return lineEndingBefore(code);\n    }\n    effects.consume(code);\n    return cdata;\n  }\n\n  /**\n   * In CDATA, after `]`, at another `]`.\n   *\n   * ```markdown\n   * > | a <![CDATA[>&<]]> b\n   *                    ^\n   * ```\n   *\n   * @type {State}\n   */\n  function cdataClose(code) {\n    if (code === 93) {\n      effects.consume(code);\n      return cdataEnd;\n    }\n    return cdata(code);\n  }\n\n  /**\n   * In CDATA, after `]]`, at `>`.\n   *\n   * ```markdown\n   * > | a <![CDATA[>&<]]> b\n   *                     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function cdataEnd(code) {\n    if (code === 62) {\n      return end(code);\n    }\n    if (code === 93) {\n      effects.consume(code);\n      return cdataEnd;\n    }\n    return cdata(code);\n  }\n\n  /**\n   * In declaration.\n   *\n   * ```markdown\n   * > | a <!b> c\n   *          ^\n   * ```\n   *\n   * @type {State}\n   */\n  function declaration(code) {\n    if (code === null || code === 62) {\n      return end(code);\n    }\n    if (markdownLineEnding(code)) {\n      returnState = declaration;\n      return lineEndingBefore(code);\n    }\n    effects.consume(code);\n    return declaration;\n  }\n\n  /**\n   * In instruction.\n   *\n   * ```markdown\n   * > | a <?b?> c\n   *         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function instruction(code) {\n    if (code === null) {\n      return nok(code);\n    }\n    if (code === 63) {\n      effects.consume(code);\n      return instructionClose;\n    }\n    if (markdownLineEnding(code)) {\n      returnState = instruction;\n      return lineEndingBefore(code);\n    }\n    effects.consume(code);\n    return instruction;\n  }\n\n  /**\n   * In instruction, after `?`, at `>`.\n   *\n   * ```markdown\n   * > | a <?b?> c\n   *           ^\n   * ```\n   *\n   * @type {State}\n   */\n  function instructionClose(code) {\n    return code === 62 ? end(code) : instruction(code);\n  }\n\n  /**\n   * After `</`, in closing tag, at tag name.\n   *\n   * ```markdown\n   * > | a </b> c\n   *         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function tagCloseStart(code) {\n    // ASCII alphabetical.\n    if (asciiAlpha(code)) {\n      effects.consume(code);\n      return tagClose;\n    }\n    return nok(code);\n  }\n\n  /**\n   * After `</x`, in a tag name.\n   *\n   * ```markdown\n   * > | a </b> c\n   *          ^\n   * ```\n   *\n   * @type {State}\n   */\n  function tagClose(code) {\n    // ASCII alphanumerical and `-`.\n    if (code === 45 || asciiAlphanumeric(code)) {\n      effects.consume(code);\n      return tagClose;\n    }\n    return tagCloseBetween(code);\n  }\n\n  /**\n   * In closing tag, after tag name.\n   *\n   * ```markdown\n   * > | a </b> c\n   *          ^\n   * ```\n   *\n   * @type {State}\n   */\n  function tagCloseBetween(code) {\n    if (markdownLineEnding(code)) {\n      returnState = tagCloseBetween;\n      return lineEndingBefore(code);\n    }\n    if (markdownSpace(code)) {\n      effects.consume(code);\n      return tagCloseBetween;\n    }\n    return end(code);\n  }\n\n  /**\n   * After `<x`, in opening tag name.\n   *\n   * ```markdown\n   * > | a <b> c\n   *         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function tagOpen(code) {\n    // ASCII alphanumerical and `-`.\n    if (code === 45 || asciiAlphanumeric(code)) {\n      effects.consume(code);\n      return tagOpen;\n    }\n    if (code === 47 || code === 62 || markdownLineEndingOrSpace(code)) {\n      return tagOpenBetween(code);\n    }\n    return nok(code);\n  }\n\n  /**\n   * In opening tag, after tag name.\n   *\n   * ```markdown\n   * > | a <b> c\n   *         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function tagOpenBetween(code) {\n    if (code === 47) {\n      effects.consume(code);\n      return end;\n    }\n\n    // ASCII alphabetical and `:` and `_`.\n    if (code === 58 || code === 95 || asciiAlpha(code)) {\n      effects.consume(code);\n      return tagOpenAttributeName;\n    }\n    if (markdownLineEnding(code)) {\n      returnState = tagOpenBetween;\n      return lineEndingBefore(code);\n    }\n    if (markdownSpace(code)) {\n      effects.consume(code);\n      return tagOpenBetween;\n    }\n    return end(code);\n  }\n\n  /**\n   * In attribute name.\n   *\n   * ```markdown\n   * > | a <b c> d\n   *          ^\n   * ```\n   *\n   * @type {State}\n   */\n  function tagOpenAttributeName(code) {\n    // ASCII alphabetical and `-`, `.`, `:`, and `_`.\n    if (code === 45 || code === 46 || code === 58 || code === 95 || asciiAlphanumeric(code)) {\n      effects.consume(code);\n      return tagOpenAttributeName;\n    }\n    return tagOpenAttributeNameAfter(code);\n  }\n\n  /**\n   * After attribute name, before initializer, the end of the tag, or\n   * whitespace.\n   *\n   * ```markdown\n   * > | a <b c> d\n   *           ^\n   * ```\n   *\n   * @type {State}\n   */\n  function tagOpenAttributeNameAfter(code) {\n    if (code === 61) {\n      effects.consume(code);\n      return tagOpenAttributeValueBefore;\n    }\n    if (markdownLineEnding(code)) {\n      returnState = tagOpenAttributeNameAfter;\n      return lineEndingBefore(code);\n    }\n    if (markdownSpace(code)) {\n      effects.consume(code);\n      return tagOpenAttributeNameAfter;\n    }\n    return tagOpenBetween(code);\n  }\n\n  /**\n   * Before unquoted, double quoted, or single quoted attribute value, allowing\n   * whitespace.\n   *\n   * ```markdown\n   * > | a <b c=d> e\n   *            ^\n   * ```\n   *\n   * @type {State}\n   */\n  function tagOpenAttributeValueBefore(code) {\n    if (code === null || code === 60 || code === 61 || code === 62 || code === 96) {\n      return nok(code);\n    }\n    if (code === 34 || code === 39) {\n      effects.consume(code);\n      marker = code;\n      return tagOpenAttributeValueQuoted;\n    }\n    if (markdownLineEnding(code)) {\n      returnState = tagOpenAttributeValueBefore;\n      return lineEndingBefore(code);\n    }\n    if (markdownSpace(code)) {\n      effects.consume(code);\n      return tagOpenAttributeValueBefore;\n    }\n    effects.consume(code);\n    return tagOpenAttributeValueUnquoted;\n  }\n\n  /**\n   * In double or single quoted attribute value.\n   *\n   * ```markdown\n   * > | a <b c=\"d\"> e\n   *             ^\n   * ```\n   *\n   * @type {State}\n   */\n  function tagOpenAttributeValueQuoted(code) {\n    if (code === marker) {\n      effects.consume(code);\n      marker = undefined;\n      return tagOpenAttributeValueQuotedAfter;\n    }\n    if (code === null) {\n      return nok(code);\n    }\n    if (markdownLineEnding(code)) {\n      returnState = tagOpenAttributeValueQuoted;\n      return lineEndingBefore(code);\n    }\n    effects.consume(code);\n    return tagOpenAttributeValueQuoted;\n  }\n\n  /**\n   * In unquoted attribute value.\n   *\n   * ```markdown\n   * > | a <b c=d> e\n   *            ^\n   * ```\n   *\n   * @type {State}\n   */\n  function tagOpenAttributeValueUnquoted(code) {\n    if (code === null || code === 34 || code === 39 || code === 60 || code === 61 || code === 96) {\n      return nok(code);\n    }\n    if (code === 47 || code === 62 || markdownLineEndingOrSpace(code)) {\n      return tagOpenBetween(code);\n    }\n    effects.consume(code);\n    return tagOpenAttributeValueUnquoted;\n  }\n\n  /**\n   * After double or single quoted attribute value, before whitespace or the end\n   * of the tag.\n   *\n   * ```markdown\n   * > | a <b c=\"d\"> e\n   *               ^\n   * ```\n   *\n   * @type {State}\n   */\n  function tagOpenAttributeValueQuotedAfter(code) {\n    if (code === 47 || code === 62 || markdownLineEndingOrSpace(code)) {\n      return tagOpenBetween(code);\n    }\n    return nok(code);\n  }\n\n  /**\n   * In certain circumstances of a tag where only an `>` is allowed.\n   *\n   * ```markdown\n   * > | a <b c=\"d\"> e\n   *               ^\n   * ```\n   *\n   * @type {State}\n   */\n  function end(code) {\n    if (code === 62) {\n      effects.consume(code);\n      effects.exit(\"htmlTextData\");\n      effects.exit(\"htmlText\");\n      return ok;\n    }\n    return nok(code);\n  }\n\n  /**\n   * At eol.\n   *\n   * > 👉 **Note**: we can’t have blank lines in text, so no need to worry about\n   * > empty tokens.\n   *\n   * ```markdown\n   * > | a <!--a\n   *            ^\n   *   | b-->\n   * ```\n   *\n   * @type {State}\n   */\n  function lineEndingBefore(code) {\n    effects.exit(\"htmlTextData\");\n    effects.enter(\"lineEnding\");\n    effects.consume(code);\n    effects.exit(\"lineEnding\");\n    return lineEndingAfter;\n  }\n\n  /**\n   * After eol, at optional whitespace.\n   *\n   * > 👉 **Note**: we can’t have blank lines in text, so no need to worry about\n   * > empty tokens.\n   *\n   * ```markdown\n   *   | a <!--a\n   * > | b-->\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function lineEndingAfter(code) {\n    // Always populated by defaults.\n\n    return markdownSpace(code) ? factorySpace(effects, lineEndingAfterPrefix, \"linePrefix\", self.parser.constructs.disable.null.includes('codeIndented') ? undefined : 4)(code) : lineEndingAfterPrefix(code);\n  }\n\n  /**\n   * After eol, after optional whitespace.\n   *\n   * > 👉 **Note**: we can’t have blank lines in text, so no need to worry about\n   * > empty tokens.\n   *\n   * ```markdown\n   *   | a <!--a\n   * > | b-->\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function lineEndingAfterPrefix(code) {\n    effects.enter(\"htmlTextData\");\n    return returnState(code);\n  }\n}","/**\n * @import {\n *   Construct,\n *   State,\n *   TokenizeContext,\n *   Tokenizer\n * } from 'micromark-util-types'\n */\n\nimport { labelEnd } from './label-end.js';\n\n/** @type {Construct} */\nexport const labelStartLink = {\n  name: 'labelStartLink',\n  resolveAll: labelEnd.resolveAll,\n  tokenize: tokenizeLabelStartLink\n};\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeLabelStartLink(effects, ok, nok) {\n  const self = this;\n  return start;\n\n  /**\n   * Start of label (link) start.\n   *\n   * ```markdown\n   * > | a [b] c\n   *       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    effects.enter(\"labelLink\");\n    effects.enter(\"labelMarker\");\n    effects.consume(code);\n    effects.exit(\"labelMarker\");\n    effects.exit(\"labelLink\");\n    return after;\n  }\n\n  /** @type {State} */\n  function after(code) {\n    // To do: this isn’t needed in `micromark-extension-gfm-footnote`,\n    // remove.\n    // Hidden footnotes hook.\n    /* c8 ignore next 3 */\n    return code === 94 && '_hiddenFootnoteSupport' in self.parser.constructs ? nok(code) : ok(code);\n  }\n}","/**\n * @import {\n *   Construct,\n *   State,\n *   TokenizeContext,\n *   Tokenizer\n * } from 'micromark-util-types'\n */\n\nimport { markdownLineEnding } from 'micromark-util-character';\n/** @type {Construct} */\nexport const hardBreakEscape = {\n  name: 'hardBreakEscape',\n  tokenize: tokenizeHardBreakEscape\n};\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeHardBreakEscape(effects, ok, nok) {\n  return start;\n\n  /**\n   * Start of a hard break (escape).\n   *\n   * ```markdown\n   * > | a\\\n   *      ^\n   *   | b\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    effects.enter(\"hardBreakEscape\");\n    effects.consume(code);\n    return after;\n  }\n\n  /**\n   * After `\\`, at eol.\n   *\n   * ```markdown\n   * > | a\\\n   *       ^\n   *   | b\n   * ```\n   *\n   *  @type {State}\n   */\n  function after(code) {\n    if (markdownLineEnding(code)) {\n      effects.exit(\"hardBreakEscape\");\n      return ok(code);\n    }\n    return nok(code);\n  }\n}","/**\n * @import {\n *   Construct,\n *   Previous,\n *   Resolver,\n *   State,\n *   TokenizeContext,\n *   Tokenizer,\n *   Token\n * } from 'micromark-util-types'\n */\n\nimport { markdownLineEnding } from 'micromark-util-character';\n/** @type {Construct} */\nexport const codeText = {\n  name: 'codeText',\n  previous,\n  resolve: resolveCodeText,\n  tokenize: tokenizeCodeText\n};\n\n// To do: next major: don’t resolve, like `markdown-rs`.\n/** @type {Resolver} */\nfunction resolveCodeText(events) {\n  let tailExitIndex = events.length - 4;\n  let headEnterIndex = 3;\n  /** @type {number} */\n  let index;\n  /** @type {number | undefined} */\n  let enter;\n\n  // If we start and end with an EOL or a space.\n  if ((events[headEnterIndex][1].type === \"lineEnding\" || events[headEnterIndex][1].type === 'space') && (events[tailExitIndex][1].type === \"lineEnding\" || events[tailExitIndex][1].type === 'space')) {\n    index = headEnterIndex;\n\n    // And we have data.\n    while (++index < tailExitIndex) {\n      if (events[index][1].type === \"codeTextData\") {\n        // Then we have padding.\n        events[headEnterIndex][1].type = \"codeTextPadding\";\n        events[tailExitIndex][1].type = \"codeTextPadding\";\n        headEnterIndex += 2;\n        tailExitIndex -= 2;\n        break;\n      }\n    }\n  }\n\n  // Merge adjacent spaces and data.\n  index = headEnterIndex - 1;\n  tailExitIndex++;\n  while (++index <= tailExitIndex) {\n    if (enter === undefined) {\n      if (index !== tailExitIndex && events[index][1].type !== \"lineEnding\") {\n        enter = index;\n      }\n    } else if (index === tailExitIndex || events[index][1].type === \"lineEnding\") {\n      events[enter][1].type = \"codeTextData\";\n      if (index !== enter + 2) {\n        events[enter][1].end = events[index - 1][1].end;\n        events.splice(enter + 2, index - enter - 2);\n        tailExitIndex -= index - enter - 2;\n        index = enter + 2;\n      }\n      enter = undefined;\n    }\n  }\n  return events;\n}\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Previous}\n */\nfunction previous(code) {\n  // If there is a previous code, there will always be a tail.\n  return code !== 96 || this.events[this.events.length - 1][1].type === \"characterEscape\";\n}\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeCodeText(effects, ok, nok) {\n  const self = this;\n  let sizeOpen = 0;\n  /** @type {number} */\n  let size;\n  /** @type {Token} */\n  let token;\n  return start;\n\n  /**\n   * Start of code (text).\n   *\n   * ```markdown\n   * > | `a`\n   *     ^\n   * > | \\`a`\n   *      ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    effects.enter(\"codeText\");\n    effects.enter(\"codeTextSequence\");\n    return sequenceOpen(code);\n  }\n\n  /**\n   * In opening sequence.\n   *\n   * ```markdown\n   * > | `a`\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function sequenceOpen(code) {\n    if (code === 96) {\n      effects.consume(code);\n      sizeOpen++;\n      return sequenceOpen;\n    }\n    effects.exit(\"codeTextSequence\");\n    return between(code);\n  }\n\n  /**\n   * Between something and something else.\n   *\n   * ```markdown\n   * > | `a`\n   *      ^^\n   * ```\n   *\n   * @type {State}\n   */\n  function between(code) {\n    // EOF.\n    if (code === null) {\n      return nok(code);\n    }\n\n    // To do: next major: don’t do spaces in resolve, but when compiling,\n    // like `markdown-rs`.\n    // Tabs don’t work, and virtual spaces don’t make sense.\n    if (code === 32) {\n      effects.enter('space');\n      effects.consume(code);\n      effects.exit('space');\n      return between;\n    }\n\n    // Closing fence? Could also be data.\n    if (code === 96) {\n      token = effects.enter(\"codeTextSequence\");\n      size = 0;\n      return sequenceClose(code);\n    }\n    if (markdownLineEnding(code)) {\n      effects.enter(\"lineEnding\");\n      effects.consume(code);\n      effects.exit(\"lineEnding\");\n      return between;\n    }\n\n    // Data.\n    effects.enter(\"codeTextData\");\n    return data(code);\n  }\n\n  /**\n   * In data.\n   *\n   * ```markdown\n   * > | `a`\n   *      ^\n   * ```\n   *\n   * @type {State}\n   */\n  function data(code) {\n    if (code === null || code === 32 || code === 96 || markdownLineEnding(code)) {\n      effects.exit(\"codeTextData\");\n      return between(code);\n    }\n    effects.consume(code);\n    return data;\n  }\n\n  /**\n   * In closing sequence.\n   *\n   * ```markdown\n   * > | `a`\n   *       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function sequenceClose(code) {\n    // More.\n    if (code === 96) {\n      effects.consume(code);\n      size++;\n      return sequenceClose;\n    }\n\n    // Done!\n    if (size === sizeOpen) {\n      effects.exit(\"codeTextSequence\");\n      effects.exit(\"codeText\");\n      return ok(code);\n    }\n\n    // More or less accents: mark as data.\n    token.type = \"codeTextData\";\n    return data(code);\n  }\n}","/**\n * @import {Extension} from 'micromark-util-types'\n */\n\nimport { attention, autolink, blockQuote, characterEscape, characterReference, codeFenced, codeIndented, codeText, definition, hardBreakEscape, headingAtx, htmlFlow, htmlText, labelEnd, labelStartImage, labelStartLink, lineEnding, list, setextUnderline, thematicBreak } from 'micromark-core-commonmark';\nimport { resolver as resolveText } from './initialize/text.js';\n\n/** @satisfies {Extension['document']} */\nexport const document = {\n  [42]: list,\n  [43]: list,\n  [45]: list,\n  [48]: list,\n  [49]: list,\n  [50]: list,\n  [51]: list,\n  [52]: list,\n  [53]: list,\n  [54]: list,\n  [55]: list,\n  [56]: list,\n  [57]: list,\n  [62]: blockQuote\n};\n\n/** @satisfies {Extension['contentInitial']} */\nexport const contentInitial = {\n  [91]: definition\n};\n\n/** @satisfies {Extension['flowInitial']} */\nexport const flowInitial = {\n  [-2]: codeIndented,\n  [-1]: codeIndented,\n  [32]: codeIndented\n};\n\n/** @satisfies {Extension['flow']} */\nexport const flow = {\n  [35]: headingAtx,\n  [42]: thematicBreak,\n  [45]: [setextUnderline, thematicBreak],\n  [60]: htmlFlow,\n  [61]: setextUnderline,\n  [95]: thematicBreak,\n  [96]: codeFenced,\n  [126]: codeFenced\n};\n\n/** @satisfies {Extension['string']} */\nexport const string = {\n  [38]: characterReference,\n  [92]: characterEscape\n};\n\n/** @satisfies {Extension['text']} */\nexport const text = {\n  [-5]: lineEnding,\n  [-4]: lineEnding,\n  [-3]: lineEnding,\n  [33]: labelStartImage,\n  [38]: characterReference,\n  [42]: attention,\n  [60]: [autolink, htmlText],\n  [91]: labelStartLink,\n  [92]: [hardBreakEscape, characterEscape],\n  [93]: labelEnd,\n  [95]: attention,\n  [96]: codeText\n};\n\n/** @satisfies {Extension['insideSpan']} */\nexport const insideSpan = {\n  null: [attention, resolveText]\n};\n\n/** @satisfies {Extension['attentionMarkers']} */\nexport const attentionMarkers = {\n  null: [42, 95]\n};\n\n/** @satisfies {Extension['disable']} */\nexport const disable = {\n  null: []\n};","/**\n * @import {\n *   Chunk,\n *   Code,\n *   ConstructRecord,\n *   Construct,\n *   Effects,\n *   InitialConstruct,\n *   ParseContext,\n *   Point,\n *   State,\n *   TokenizeContext,\n *   Token\n * } from 'micromark-util-types'\n */\n\n/**\n * @callback Restore\n *   Restore the state.\n * @returns {undefined}\n *   Nothing.\n *\n * @typedef Info\n *   Info.\n * @property {Restore} restore\n *   Restore.\n * @property {number} from\n *   From.\n *\n * @callback ReturnHandle\n *   Handle a successful run.\n * @param {Construct} construct\n *   Construct.\n * @param {Info} info\n *   Info.\n * @returns {undefined}\n *   Nothing.\n */\n\nimport { markdownLineEnding } from 'micromark-util-character';\nimport { push, splice } from 'micromark-util-chunked';\nimport { resolveAll } from 'micromark-util-resolve-all';\n/**\n * Create a tokenizer.\n * Tokenizers deal with one type of data (e.g., containers, flow, text).\n * The parser is the object dealing with it all.\n * `initialize` works like other constructs, except that only its `tokenize`\n * function is used, in which case it doesn’t receive an `ok` or `nok`.\n * `from` can be given to set the point before the first character, although\n * when further lines are indented, they must be set with `defineSkip`.\n *\n * @param {ParseContext} parser\n *   Parser.\n * @param {InitialConstruct} initialize\n *   Construct.\n * @param {Omit<Point, '_bufferIndex' | '_index'> | undefined} [from]\n *   Point (optional).\n * @returns {TokenizeContext}\n *   Context.\n */\nexport function createTokenizer(parser, initialize, from) {\n  /** @type {Point} */\n  let point = {\n    _bufferIndex: -1,\n    _index: 0,\n    line: from && from.line || 1,\n    column: from && from.column || 1,\n    offset: from && from.offset || 0\n  };\n  /** @type {Record<string, number>} */\n  const columnStart = {};\n  /** @type {Array<Construct>} */\n  const resolveAllConstructs = [];\n  /** @type {Array<Chunk>} */\n  let chunks = [];\n  /** @type {Array<Token>} */\n  let stack = [];\n  /** @type {boolean | undefined} */\n  let consumed = true;\n\n  /**\n   * Tools used for tokenizing.\n   *\n   * @type {Effects}\n   */\n  const effects = {\n    attempt: constructFactory(onsuccessfulconstruct),\n    check: constructFactory(onsuccessfulcheck),\n    consume,\n    enter,\n    exit,\n    interrupt: constructFactory(onsuccessfulcheck, {\n      interrupt: true\n    })\n  };\n\n  /**\n   * State and tools for resolving and serializing.\n   *\n   * @type {TokenizeContext}\n   */\n  const context = {\n    code: null,\n    containerState: {},\n    defineSkip,\n    events: [],\n    now,\n    parser,\n    previous: null,\n    sliceSerialize,\n    sliceStream,\n    write\n  };\n\n  /**\n   * The state function.\n   *\n   * @type {State | undefined}\n   */\n  let state = initialize.tokenize.call(context, effects);\n\n  /**\n   * Track which character we expect to be consumed, to catch bugs.\n   *\n   * @type {Code}\n   */\n  let expectedCode;\n  if (initialize.resolveAll) {\n    resolveAllConstructs.push(initialize);\n  }\n  return context;\n\n  /** @type {TokenizeContext['write']} */\n  function write(slice) {\n    chunks = push(chunks, slice);\n    main();\n\n    // Exit if we’re not done, resolve might change stuff.\n    if (chunks[chunks.length - 1] !== null) {\n      return [];\n    }\n    addResult(initialize, 0);\n\n    // Otherwise, resolve, and exit.\n    context.events = resolveAll(resolveAllConstructs, context.events, context);\n    return context.events;\n  }\n\n  //\n  // Tools.\n  //\n\n  /** @type {TokenizeContext['sliceSerialize']} */\n  function sliceSerialize(token, expandTabs) {\n    return serializeChunks(sliceStream(token), expandTabs);\n  }\n\n  /** @type {TokenizeContext['sliceStream']} */\n  function sliceStream(token) {\n    return sliceChunks(chunks, token);\n  }\n\n  /** @type {TokenizeContext['now']} */\n  function now() {\n    // This is a hot path, so we clone manually instead of `Object.assign({}, point)`\n    const {\n      _bufferIndex,\n      _index,\n      line,\n      column,\n      offset\n    } = point;\n    return {\n      _bufferIndex,\n      _index,\n      line,\n      column,\n      offset\n    };\n  }\n\n  /** @type {TokenizeContext['defineSkip']} */\n  function defineSkip(value) {\n    columnStart[value.line] = value.column;\n    accountForPotentialSkip();\n  }\n\n  //\n  // State management.\n  //\n\n  /**\n   * Main loop (note that `_index` and `_bufferIndex` in `point` are modified by\n   * `consume`).\n   * Here is where we walk through the chunks, which either include strings of\n   * several characters, or numerical character codes.\n   * The reason to do this in a loop instead of a call is so the stack can\n   * drain.\n   *\n   * @returns {undefined}\n   *   Nothing.\n   */\n  function main() {\n    /** @type {number} */\n    let chunkIndex;\n    while (point._index < chunks.length) {\n      const chunk = chunks[point._index];\n\n      // If we’re in a buffer chunk, loop through it.\n      if (typeof chunk === 'string') {\n        chunkIndex = point._index;\n        if (point._bufferIndex < 0) {\n          point._bufferIndex = 0;\n        }\n        while (point._index === chunkIndex && point._bufferIndex < chunk.length) {\n          go(chunk.charCodeAt(point._bufferIndex));\n        }\n      } else {\n        go(chunk);\n      }\n    }\n  }\n\n  /**\n   * Deal with one code.\n   *\n   * @param {Code} code\n   *   Code.\n   * @returns {undefined}\n   *   Nothing.\n   */\n  function go(code) {\n    consumed = undefined;\n    expectedCode = code;\n    state = state(code);\n  }\n\n  /** @type {Effects['consume']} */\n  function consume(code) {\n    if (markdownLineEnding(code)) {\n      point.line++;\n      point.column = 1;\n      point.offset += code === -3 ? 2 : 1;\n      accountForPotentialSkip();\n    } else if (code !== -1) {\n      point.column++;\n      point.offset++;\n    }\n\n    // Not in a string chunk.\n    if (point._bufferIndex < 0) {\n      point._index++;\n    } else {\n      point._bufferIndex++;\n\n      // At end of string chunk.\n      if (point._bufferIndex ===\n      // Points w/ non-negative `_bufferIndex` reference\n      // strings.\n      /** @type {string} */\n      chunks[point._index].length) {\n        point._bufferIndex = -1;\n        point._index++;\n      }\n    }\n\n    // Expose the previous character.\n    context.previous = code;\n\n    // Mark as consumed.\n    consumed = true;\n  }\n\n  /** @type {Effects['enter']} */\n  function enter(type, fields) {\n    /** @type {Token} */\n    // @ts-expect-error Patch instead of assign required fields to help GC.\n    const token = fields || {};\n    token.type = type;\n    token.start = now();\n    context.events.push(['enter', token, context]);\n    stack.push(token);\n    return token;\n  }\n\n  /** @type {Effects['exit']} */\n  function exit(type) {\n    const token = stack.pop();\n    token.end = now();\n    context.events.push(['exit', token, context]);\n    return token;\n  }\n\n  /**\n   * Use results.\n   *\n   * @type {ReturnHandle}\n   */\n  function onsuccessfulconstruct(construct, info) {\n    addResult(construct, info.from);\n  }\n\n  /**\n   * Discard results.\n   *\n   * @type {ReturnHandle}\n   */\n  function onsuccessfulcheck(_, info) {\n    info.restore();\n  }\n\n  /**\n   * Factory to attempt/check/interrupt.\n   *\n   * @param {ReturnHandle} onreturn\n   *   Callback.\n   * @param {{interrupt?: boolean | undefined} | undefined} [fields]\n   *   Fields.\n   */\n  function constructFactory(onreturn, fields) {\n    return hook;\n\n    /**\n     * Handle either an object mapping codes to constructs, a list of\n     * constructs, or a single construct.\n     *\n     * @param {Array<Construct> | ConstructRecord | Construct} constructs\n     *   Constructs.\n     * @param {State} returnState\n     *   State.\n     * @param {State | undefined} [bogusState]\n     *   State.\n     * @returns {State}\n     *   State.\n     */\n    function hook(constructs, returnState, bogusState) {\n      /** @type {ReadonlyArray<Construct>} */\n      let listOfConstructs;\n      /** @type {number} */\n      let constructIndex;\n      /** @type {Construct} */\n      let currentConstruct;\n      /** @type {Info} */\n      let info;\n      return Array.isArray(constructs) ? /* c8 ignore next 1 */\n      handleListOfConstructs(constructs) : 'tokenize' in constructs ?\n      // Looks like a construct.\n      handleListOfConstructs([(/** @type {Construct} */constructs)]) : handleMapOfConstructs(constructs);\n\n      /**\n       * Handle a list of construct.\n       *\n       * @param {ConstructRecord} map\n       *   Constructs.\n       * @returns {State}\n       *   State.\n       */\n      function handleMapOfConstructs(map) {\n        return start;\n\n        /** @type {State} */\n        function start(code) {\n          const left = code !== null && map[code];\n          const all = code !== null && map.null;\n          const list = [\n          // To do: add more extension tests.\n          /* c8 ignore next 2 */\n          ...(Array.isArray(left) ? left : left ? [left] : []), ...(Array.isArray(all) ? all : all ? [all] : [])];\n          return handleListOfConstructs(list)(code);\n        }\n      }\n\n      /**\n       * Handle a list of construct.\n       *\n       * @param {ReadonlyArray<Construct>} list\n       *   Constructs.\n       * @returns {State}\n       *   State.\n       */\n      function handleListOfConstructs(list) {\n        listOfConstructs = list;\n        constructIndex = 0;\n        if (list.length === 0) {\n          return bogusState;\n        }\n        return handleConstruct(list[constructIndex]);\n      }\n\n      /**\n       * Handle a single construct.\n       *\n       * @param {Construct} construct\n       *   Construct.\n       * @returns {State}\n       *   State.\n       */\n      function handleConstruct(construct) {\n        return start;\n\n        /** @type {State} */\n        function start(code) {\n          // To do: not needed to store if there is no bogus state, probably?\n          // Currently doesn’t work because `inspect` in document does a check\n          // w/o a bogus, which doesn’t make sense. But it does seem to help perf\n          // by not storing.\n          info = store();\n          currentConstruct = construct;\n          if (!construct.partial) {\n            context.currentConstruct = construct;\n          }\n\n          // Always populated by defaults.\n\n          if (construct.name && context.parser.constructs.disable.null.includes(construct.name)) {\n            return nok(code);\n          }\n          return construct.tokenize.call(\n          // If we do have fields, create an object w/ `context` as its\n          // prototype.\n          // This allows a “live binding”, which is needed for `interrupt`.\n          fields ? Object.assign(Object.create(context), fields) : context, effects, ok, nok)(code);\n        }\n      }\n\n      /** @type {State} */\n      function ok(code) {\n        consumed = true;\n        onreturn(currentConstruct, info);\n        return returnState;\n      }\n\n      /** @type {State} */\n      function nok(code) {\n        consumed = true;\n        info.restore();\n        if (++constructIndex < listOfConstructs.length) {\n          return handleConstruct(listOfConstructs[constructIndex]);\n        }\n        return bogusState;\n      }\n    }\n  }\n\n  /**\n   * @param {Construct} construct\n   *   Construct.\n   * @param {number} from\n   *   From.\n   * @returns {undefined}\n   *   Nothing.\n   */\n  function addResult(construct, from) {\n    if (construct.resolveAll && !resolveAllConstructs.includes(construct)) {\n      resolveAllConstructs.push(construct);\n    }\n    if (construct.resolve) {\n      splice(context.events, from, context.events.length - from, construct.resolve(context.events.slice(from), context));\n    }\n    if (construct.resolveTo) {\n      context.events = construct.resolveTo(context.events, context);\n    }\n  }\n\n  /**\n   * Store state.\n   *\n   * @returns {Info}\n   *   Info.\n   */\n  function store() {\n    const startPoint = now();\n    const startPrevious = context.previous;\n    const startCurrentConstruct = context.currentConstruct;\n    const startEventsIndex = context.events.length;\n    const startStack = Array.from(stack);\n    return {\n      from: startEventsIndex,\n      restore\n    };\n\n    /**\n     * Restore state.\n     *\n     * @returns {undefined}\n     *   Nothing.\n     */\n    function restore() {\n      point = startPoint;\n      context.previous = startPrevious;\n      context.currentConstruct = startCurrentConstruct;\n      context.events.length = startEventsIndex;\n      stack = startStack;\n      accountForPotentialSkip();\n    }\n  }\n\n  /**\n   * Move the current point a bit forward in the line when it’s on a column\n   * skip.\n   *\n   * @returns {undefined}\n   *   Nothing.\n   */\n  function accountForPotentialSkip() {\n    if (point.line in columnStart && point.column < 2) {\n      point.column = columnStart[point.line];\n      point.offset += columnStart[point.line] - 1;\n    }\n  }\n}\n\n/**\n * Get the chunks from a slice of chunks in the range of a token.\n *\n * @param {ReadonlyArray<Chunk>} chunks\n *   Chunks.\n * @param {Pick<Token, 'end' | 'start'>} token\n *   Token.\n * @returns {Array<Chunk>}\n *   Chunks.\n */\nfunction sliceChunks(chunks, token) {\n  const startIndex = token.start._index;\n  const startBufferIndex = token.start._bufferIndex;\n  const endIndex = token.end._index;\n  const endBufferIndex = token.end._bufferIndex;\n  /** @type {Array<Chunk>} */\n  let view;\n  if (startIndex === endIndex) {\n    // @ts-expect-error `_bufferIndex` is used on string chunks.\n    view = [chunks[startIndex].slice(startBufferIndex, endBufferIndex)];\n  } else {\n    view = chunks.slice(startIndex, endIndex);\n    if (startBufferIndex > -1) {\n      const head = view[0];\n      if (typeof head === 'string') {\n        view[0] = head.slice(startBufferIndex);\n      } else {\n        view.shift();\n      }\n    }\n    if (endBufferIndex > 0) {\n      // @ts-expect-error `_bufferIndex` is used on string chunks.\n      view.push(chunks[endIndex].slice(0, endBufferIndex));\n    }\n  }\n  return view;\n}\n\n/**\n * Get the string value of a slice of chunks.\n *\n * @param {ReadonlyArray<Chunk>} chunks\n *   Chunks.\n * @param {boolean | undefined} [expandTabs=false]\n *   Whether to expand tabs (default: `false`).\n * @returns {string}\n *   Result.\n */\nfunction serializeChunks(chunks, expandTabs) {\n  let index = -1;\n  /** @type {Array<string>} */\n  const result = [];\n  /** @type {boolean | undefined} */\n  let atTab;\n  while (++index < chunks.length) {\n    const chunk = chunks[index];\n    /** @type {string} */\n    let value;\n    if (typeof chunk === 'string') {\n      value = chunk;\n    } else switch (chunk) {\n      case -5:\n        {\n          value = \"\\r\";\n          break;\n        }\n      case -4:\n        {\n          value = \"\\n\";\n          break;\n        }\n      case -3:\n        {\n          value = \"\\r\" + \"\\n\";\n          break;\n        }\n      case -2:\n        {\n          value = expandTabs ? \" \" : \"\\t\";\n          break;\n        }\n      case -1:\n        {\n          if (!expandTabs && atTab) continue;\n          value = \" \";\n          break;\n        }\n      default:\n        {\n          // Currently only replacement character.\n          value = String.fromCharCode(chunk);\n        }\n    }\n    atTab = chunk === -2;\n    result.push(value);\n  }\n  return result.join('');\n}","/**\n * @import {\n *   InitialConstruct,\n *   Initializer,\n *   State,\n *   TokenizeContext,\n *   Token\n * } from 'micromark-util-types'\n */\n\nimport { factorySpace } from 'micromark-factory-space';\nimport { markdownLineEnding } from 'micromark-util-character';\n/** @type {InitialConstruct} */\nexport const content = {\n  tokenize: initializeContent\n};\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Initializer}\n *   Content.\n */\nfunction initializeContent(effects) {\n  const contentStart = effects.attempt(this.parser.constructs.contentInitial, afterContentStartConstruct, paragraphInitial);\n  /** @type {Token} */\n  let previous;\n  return contentStart;\n\n  /** @type {State} */\n  function afterContentStartConstruct(code) {\n    if (code === null) {\n      effects.consume(code);\n      return;\n    }\n    effects.enter(\"lineEnding\");\n    effects.consume(code);\n    effects.exit(\"lineEnding\");\n    return factorySpace(effects, contentStart, \"linePrefix\");\n  }\n\n  /** @type {State} */\n  function paragraphInitial(code) {\n    effects.enter(\"paragraph\");\n    return lineStart(code);\n  }\n\n  /** @type {State} */\n  function lineStart(code) {\n    const token = effects.enter(\"chunkText\", {\n      contentType: \"text\",\n      previous\n    });\n    if (previous) {\n      previous.next = token;\n    }\n    previous = token;\n    return data(code);\n  }\n\n  /** @type {State} */\n  function data(code) {\n    if (code === null) {\n      effects.exit(\"chunkText\");\n      effects.exit(\"paragraph\");\n      effects.consume(code);\n      return;\n    }\n    if (markdownLineEnding(code)) {\n      effects.consume(code);\n      effects.exit(\"chunkText\");\n      return lineStart;\n    }\n\n    // Data.\n    effects.consume(code);\n    return data;\n  }\n}","/**\n * @import {\n *   Construct,\n *   ContainerState,\n *   InitialConstruct,\n *   Initializer,\n *   Point,\n *   State,\n *   TokenizeContext,\n *   Tokenizer,\n *   Token\n * } from 'micromark-util-types'\n */\n\n/**\n * @typedef {[Construct, ContainerState]} StackItem\n *   Construct and its state.\n */\n\nimport { factorySpace } from 'micromark-factory-space';\nimport { markdownLineEnding } from 'micromark-util-character';\nimport { splice } from 'micromark-util-chunked';\n/** @type {InitialConstruct} */\nexport const document = {\n  tokenize: initializeDocument\n};\n\n/** @type {Construct} */\nconst containerConstruct = {\n  tokenize: tokenizeContainer\n};\n\n/**\n * @this {TokenizeContext}\n *   Self.\n * @type {Initializer}\n *   Initializer.\n */\nfunction initializeDocument(effects) {\n  const self = this;\n  /** @type {Array<StackItem>} */\n  const stack = [];\n  let continued = 0;\n  /** @type {TokenizeContext | undefined} */\n  let childFlow;\n  /** @type {Token | undefined} */\n  let childToken;\n  /** @type {number} */\n  let lineStartOffset;\n  return start;\n\n  /** @type {State} */\n  function start(code) {\n    // First we iterate through the open blocks, starting with the root\n    // document, and descending through last children down to the last open\n    // block.\n    // Each block imposes a condition that the line must satisfy if the block is\n    // to remain open.\n    // For example, a block quote requires a `>` character.\n    // A paragraph requires a non-blank line.\n    // In this phase we may match all or just some of the open blocks.\n    // But we cannot close unmatched blocks yet, because we may have a lazy\n    // continuation line.\n    if (continued < stack.length) {\n      const item = stack[continued];\n      self.containerState = item[1];\n      return effects.attempt(item[0].continuation, documentContinue, checkNewContainers)(code);\n    }\n\n    // Done.\n    return checkNewContainers(code);\n  }\n\n  /** @type {State} */\n  function documentContinue(code) {\n    continued++;\n\n    // Note: this field is called `_closeFlow` but it also closes containers.\n    // Perhaps a good idea to rename it but it’s already used in the wild by\n    // extensions.\n    if (self.containerState._closeFlow) {\n      self.containerState._closeFlow = undefined;\n      if (childFlow) {\n        closeFlow();\n      }\n\n      // Note: this algorithm for moving events around is similar to the\n      // algorithm when dealing with lazy lines in `writeToChild`.\n      const indexBeforeExits = self.events.length;\n      let indexBeforeFlow = indexBeforeExits;\n      /** @type {Point | undefined} */\n      let point;\n\n      // Find the flow chunk.\n      while (indexBeforeFlow--) {\n        if (self.events[indexBeforeFlow][0] === 'exit' && self.events[indexBeforeFlow][1].type === \"chunkFlow\") {\n          point = self.events[indexBeforeFlow][1].end;\n          break;\n        }\n      }\n      exitContainers(continued);\n\n      // Fix positions.\n      let index = indexBeforeExits;\n      while (index < self.events.length) {\n        self.events[index][1].end = {\n          ...point\n        };\n        index++;\n      }\n\n      // Inject the exits earlier (they’re still also at the end).\n      splice(self.events, indexBeforeFlow + 1, 0, self.events.slice(indexBeforeExits));\n\n      // Discard the duplicate exits.\n      self.events.length = index;\n      return checkNewContainers(code);\n    }\n    return start(code);\n  }\n\n  /** @type {State} */\n  function checkNewContainers(code) {\n    // Next, after consuming the continuation markers for existing blocks, we\n    // look for new block starts (e.g. `>` for a block quote).\n    // If we encounter a new block start, we close any blocks unmatched in\n    // step 1 before creating the new block as a child of the last matched\n    // block.\n    if (continued === stack.length) {\n      // No need to `check` whether there’s a container, of `exitContainers`\n      // would be moot.\n      // We can instead immediately `attempt` to parse one.\n      if (!childFlow) {\n        return documentContinued(code);\n      }\n\n      // If we have concrete content, such as block HTML or fenced code,\n      // we can’t have containers “pierce” into them, so we can immediately\n      // start.\n      if (childFlow.currentConstruct && childFlow.currentConstruct.concrete) {\n        return flowStart(code);\n      }\n\n      // If we do have flow, it could still be a blank line,\n      // but we’d be interrupting it w/ a new container if there’s a current\n      // construct.\n      // To do: next major: remove `_gfmTableDynamicInterruptHack` (no longer\n      // needed in micromark-extension-gfm-table@1.0.6).\n      self.interrupt = Boolean(childFlow.currentConstruct && !childFlow._gfmTableDynamicInterruptHack);\n    }\n\n    // Check if there is a new container.\n    self.containerState = {};\n    return effects.check(containerConstruct, thereIsANewContainer, thereIsNoNewContainer)(code);\n  }\n\n  /** @type {State} */\n  function thereIsANewContainer(code) {\n    if (childFlow) closeFlow();\n    exitContainers(continued);\n    return documentContinued(code);\n  }\n\n  /** @type {State} */\n  function thereIsNoNewContainer(code) {\n    self.parser.lazy[self.now().line] = continued !== stack.length;\n    lineStartOffset = self.now().offset;\n    return flowStart(code);\n  }\n\n  /** @type {State} */\n  function documentContinued(code) {\n    // Try new containers.\n    self.containerState = {};\n    return effects.attempt(containerConstruct, containerContinue, flowStart)(code);\n  }\n\n  /** @type {State} */\n  function containerContinue(code) {\n    continued++;\n    stack.push([self.currentConstruct, self.containerState]);\n    // Try another.\n    return documentContinued(code);\n  }\n\n  /** @type {State} */\n  function flowStart(code) {\n    if (code === null) {\n      if (childFlow) closeFlow();\n      exitContainers(0);\n      effects.consume(code);\n      return;\n    }\n    childFlow = childFlow || self.parser.flow(self.now());\n    effects.enter(\"chunkFlow\", {\n      _tokenizer: childFlow,\n      contentType: \"flow\",\n      previous: childToken\n    });\n    return flowContinue(code);\n  }\n\n  /** @type {State} */\n  function flowContinue(code) {\n    if (code === null) {\n      writeToChild(effects.exit(\"chunkFlow\"), true);\n      exitContainers(0);\n      effects.consume(code);\n      return;\n    }\n    if (markdownLineEnding(code)) {\n      effects.consume(code);\n      writeToChild(effects.exit(\"chunkFlow\"));\n      // Get ready for the next line.\n      continued = 0;\n      self.interrupt = undefined;\n      return start;\n    }\n    effects.consume(code);\n    return flowContinue;\n  }\n\n  /**\n   * @param {Token} token\n   *   Token.\n   * @param {boolean | undefined} [endOfFile]\n   *   Whether the token is at the end of the file (default: `false`).\n   * @returns {undefined}\n   *   Nothing.\n   */\n  function writeToChild(token, endOfFile) {\n    const stream = self.sliceStream(token);\n    if (endOfFile) stream.push(null);\n    token.previous = childToken;\n    if (childToken) childToken.next = token;\n    childToken = token;\n    childFlow.defineSkip(token.start);\n    childFlow.write(stream);\n\n    // Alright, so we just added a lazy line:\n    //\n    // ```markdown\n    // > a\n    // b.\n    //\n    // Or:\n    //\n    // > ~~~c\n    // d\n    //\n    // Or:\n    //\n    // > | e |\n    // f\n    // ```\n    //\n    // The construct in the second example (fenced code) does not accept lazy\n    // lines, so it marked itself as done at the end of its first line, and\n    // then the content construct parses `d`.\n    // Most constructs in markdown match on the first line: if the first line\n    // forms a construct, a non-lazy line can’t “unmake” it.\n    //\n    // The construct in the third example is potentially a GFM table, and\n    // those are *weird*.\n    // It *could* be a table, from the first line, if the following line\n    // matches a condition.\n    // In this case, that second line is lazy, which “unmakes” the first line\n    // and turns the whole into one content block.\n    //\n    // We’ve now parsed the non-lazy and the lazy line, and can figure out\n    // whether the lazy line started a new flow block.\n    // If it did, we exit the current containers between the two flow blocks.\n    if (self.parser.lazy[token.start.line]) {\n      let index = childFlow.events.length;\n      while (index--) {\n        if (\n        // The token starts before the line ending…\n        childFlow.events[index][1].start.offset < lineStartOffset && (\n        // …and either is not ended yet…\n        !childFlow.events[index][1].end ||\n        // …or ends after it.\n        childFlow.events[index][1].end.offset > lineStartOffset)) {\n          // Exit: there’s still something open, which means it’s a lazy line\n          // part of something.\n          return;\n        }\n      }\n\n      // Note: this algorithm for moving events around is similar to the\n      // algorithm when closing flow in `documentContinue`.\n      const indexBeforeExits = self.events.length;\n      let indexBeforeFlow = indexBeforeExits;\n      /** @type {boolean | undefined} */\n      let seen;\n      /** @type {Point | undefined} */\n      let point;\n\n      // Find the previous chunk (the one before the lazy line).\n      while (indexBeforeFlow--) {\n        if (self.events[indexBeforeFlow][0] === 'exit' && self.events[indexBeforeFlow][1].type === \"chunkFlow\") {\n          if (seen) {\n            point = self.events[indexBeforeFlow][1].end;\n            break;\n          }\n          seen = true;\n        }\n      }\n      exitContainers(continued);\n\n      // Fix positions.\n      index = indexBeforeExits;\n      while (index < self.events.length) {\n        self.events[index][1].end = {\n          ...point\n        };\n        index++;\n      }\n\n      // Inject the exits earlier (they’re still also at the end).\n      splice(self.events, indexBeforeFlow + 1, 0, self.events.slice(indexBeforeExits));\n\n      // Discard the duplicate exits.\n      self.events.length = index;\n    }\n  }\n\n  /**\n   * @param {number} size\n   *   Size.\n   * @returns {undefined}\n   *   Nothing.\n   */\n  function exitContainers(size) {\n    let index = stack.length;\n\n    // Exit open containers.\n    while (index-- > size) {\n      const entry = stack[index];\n      self.containerState = entry[1];\n      entry[0].exit.call(self, effects);\n    }\n    stack.length = size;\n  }\n  function closeFlow() {\n    childFlow.write([null]);\n    childToken = undefined;\n    childFlow = undefined;\n    self.containerState._closeFlow = undefined;\n  }\n}\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n *   Tokenizer.\n */\nfunction tokenizeContainer(effects, ok, nok) {\n  // Always populated by defaults.\n\n  return factorySpace(effects, effects.attempt(this.parser.constructs.document, ok, nok), \"linePrefix\", this.parser.constructs.disable.null.includes('codeIndented') ? undefined : 4);\n}","/**\n * @import {\n *   Construct,\n *   Resolver,\n *   State,\n *   TokenizeContext,\n *   Tokenizer,\n *   Token\n * } from 'micromark-util-types'\n */\n\nimport { factorySpace } from 'micromark-factory-space';\nimport { markdownLineEnding } from 'micromark-util-character';\nimport { subtokenize } from 'micromark-util-subtokenize';\n/**\n * No name because it must not be turned off.\n * @type {Construct}\n */\nexport const content = {\n  resolve: resolveContent,\n  tokenize: tokenizeContent\n};\n\n/** @type {Construct} */\nconst continuationConstruct = {\n  partial: true,\n  tokenize: tokenizeContinuation\n};\n\n/**\n * Content is transparent: it’s parsed right now. That way, definitions are also\n * parsed right now: before text in paragraphs (specifically, media) are parsed.\n *\n * @type {Resolver}\n */\nfunction resolveContent(events) {\n  subtokenize(events);\n  return events;\n}\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeContent(effects, ok) {\n  /** @type {Token | undefined} */\n  let previous;\n  return chunkStart;\n\n  /**\n   * Before a content chunk.\n   *\n   * ```markdown\n   * > | abc\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function chunkStart(code) {\n    effects.enter(\"content\");\n    previous = effects.enter(\"chunkContent\", {\n      contentType: \"content\"\n    });\n    return chunkInside(code);\n  }\n\n  /**\n   * In a content chunk.\n   *\n   * ```markdown\n   * > | abc\n   *     ^^^\n   * ```\n   *\n   * @type {State}\n   */\n  function chunkInside(code) {\n    if (code === null) {\n      return contentEnd(code);\n    }\n\n    // To do: in `markdown-rs`, each line is parsed on its own, and everything\n    // is stitched together resolving.\n    if (markdownLineEnding(code)) {\n      return effects.check(continuationConstruct, contentContinue, contentEnd)(code);\n    }\n\n    // Data.\n    effects.consume(code);\n    return chunkInside;\n  }\n\n  /**\n   *\n   *\n   * @type {State}\n   */\n  function contentEnd(code) {\n    effects.exit(\"chunkContent\");\n    effects.exit(\"content\");\n    return ok(code);\n  }\n\n  /**\n   *\n   *\n   * @type {State}\n   */\n  function contentContinue(code) {\n    effects.consume(code);\n    effects.exit(\"chunkContent\");\n    previous.next = effects.enter(\"chunkContent\", {\n      contentType: \"content\",\n      previous\n    });\n    previous = previous.next;\n    return chunkInside;\n  }\n}\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeContinuation(effects, ok, nok) {\n  const self = this;\n  return startLookahead;\n\n  /**\n   *\n   *\n   * @type {State}\n   */\n  function startLookahead(code) {\n    effects.exit(\"chunkContent\");\n    effects.enter(\"lineEnding\");\n    effects.consume(code);\n    effects.exit(\"lineEnding\");\n    return factorySpace(effects, prefixed, \"linePrefix\");\n  }\n\n  /**\n   *\n   *\n   * @type {State}\n   */\n  function prefixed(code) {\n    if (code === null || markdownLineEnding(code)) {\n      return nok(code);\n    }\n\n    // Always populated by defaults.\n\n    const tail = self.events[self.events.length - 1];\n    if (!self.parser.constructs.disable.null.includes('codeIndented') && tail && tail[1].type === \"linePrefix\" && tail[2].sliceSerialize(tail[1], true).length >= 4) {\n      return ok(code);\n    }\n    return effects.interrupt(self.parser.constructs.flow, nok, ok)(code);\n  }\n}","/**\n * @import {\n *   InitialConstruct,\n *   Initializer,\n *   State,\n *   TokenizeContext\n * } from 'micromark-util-types'\n */\n\nimport { blankLine, content } from 'micromark-core-commonmark';\nimport { factorySpace } from 'micromark-factory-space';\nimport { markdownLineEnding } from 'micromark-util-character';\n/** @type {InitialConstruct} */\nexport const flow = {\n  tokenize: initializeFlow\n};\n\n/**\n * @this {TokenizeContext}\n *   Self.\n * @type {Initializer}\n *   Initializer.\n */\nfunction initializeFlow(effects) {\n  const self = this;\n  const initial = effects.attempt(\n  // Try to parse a blank line.\n  blankLine, atBlankEnding,\n  // Try to parse initial flow (essentially, only code).\n  effects.attempt(this.parser.constructs.flowInitial, afterConstruct, factorySpace(effects, effects.attempt(this.parser.constructs.flow, afterConstruct, effects.attempt(content, afterConstruct)), \"linePrefix\")));\n  return initial;\n\n  /** @type {State} */\n  function atBlankEnding(code) {\n    if (code === null) {\n      effects.consume(code);\n      return;\n    }\n    effects.enter(\"lineEndingBlank\");\n    effects.consume(code);\n    effects.exit(\"lineEndingBlank\");\n    self.currentConstruct = undefined;\n    return initial;\n  }\n\n  /** @type {State} */\n  function afterConstruct(code) {\n    if (code === null) {\n      effects.consume(code);\n      return;\n    }\n    effects.enter(\"lineEnding\");\n    effects.consume(code);\n    effects.exit(\"lineEnding\");\n    self.currentConstruct = undefined;\n    return initial;\n  }\n}","/**\n * @import {\n *   Code,\n *   InitialConstruct,\n *   Initializer,\n *   Resolver,\n *   State,\n *   TokenizeContext\n * } from 'micromark-util-types'\n */\n\nexport const resolver = {\n  resolveAll: createResolver()\n};\nexport const string = initializeFactory('string');\nexport const text = initializeFactory('text');\n\n/**\n * @param {'string' | 'text'} field\n *   Field.\n * @returns {InitialConstruct}\n *   Construct.\n */\nfunction initializeFactory(field) {\n  return {\n    resolveAll: createResolver(field === 'text' ? resolveAllLineSuffixes : undefined),\n    tokenize: initializeText\n  };\n\n  /**\n   * @this {TokenizeContext}\n   *   Context.\n   * @type {Initializer}\n   */\n  function initializeText(effects) {\n    const self = this;\n    const constructs = this.parser.constructs[field];\n    const text = effects.attempt(constructs, start, notText);\n    return start;\n\n    /** @type {State} */\n    function start(code) {\n      return atBreak(code) ? text(code) : notText(code);\n    }\n\n    /** @type {State} */\n    function notText(code) {\n      if (code === null) {\n        effects.consume(code);\n        return;\n      }\n      effects.enter(\"data\");\n      effects.consume(code);\n      return data;\n    }\n\n    /** @type {State} */\n    function data(code) {\n      if (atBreak(code)) {\n        effects.exit(\"data\");\n        return text(code);\n      }\n\n      // Data.\n      effects.consume(code);\n      return data;\n    }\n\n    /**\n     * @param {Code} code\n     *   Code.\n     * @returns {boolean}\n     *   Whether the code is a break.\n     */\n    function atBreak(code) {\n      if (code === null) {\n        return true;\n      }\n      const list = constructs[code];\n      let index = -1;\n      if (list) {\n        // Always populated by defaults.\n\n        while (++index < list.length) {\n          const item = list[index];\n          if (!item.previous || item.previous.call(self, self.previous)) {\n            return true;\n          }\n        }\n      }\n      return false;\n    }\n  }\n}\n\n/**\n * @param {Resolver | undefined} [extraResolver]\n *   Resolver.\n * @returns {Resolver}\n *   Resolver.\n */\nfunction createResolver(extraResolver) {\n  return resolveAllText;\n\n  /** @type {Resolver} */\n  function resolveAllText(events, context) {\n    let index = -1;\n    /** @type {number | undefined} */\n    let enter;\n\n    // A rather boring computation (to merge adjacent `data` events) which\n    // improves mm performance by 29%.\n    while (++index <= events.length) {\n      if (enter === undefined) {\n        if (events[index] && events[index][1].type === \"data\") {\n          enter = index;\n          index++;\n        }\n      } else if (!events[index] || events[index][1].type !== \"data\") {\n        // Don’t do anything if there is one data token.\n        if (index !== enter + 2) {\n          events[enter][1].end = events[index - 1][1].end;\n          events.splice(enter + 2, index - enter - 2);\n          index = enter + 2;\n        }\n        enter = undefined;\n      }\n    }\n    return extraResolver ? extraResolver(events, context) : events;\n  }\n}\n\n/**\n * A rather ugly set of instructions which again looks at chunks in the input\n * stream.\n * The reason to do this here is that it is *much* faster to parse in reverse.\n * And that we can’t hook into `null` to split the line suffix before an EOF.\n * To do: figure out if we can make this into a clean utility, or even in core.\n * As it will be useful for GFMs literal autolink extension (and maybe even\n * tables?)\n *\n * @type {Resolver}\n */\nfunction resolveAllLineSuffixes(events, context) {\n  let eventIndex = 0; // Skip first.\n\n  while (++eventIndex <= events.length) {\n    if ((eventIndex === events.length || events[eventIndex][1].type === \"lineEnding\") && events[eventIndex - 1][1].type === \"data\") {\n      const data = events[eventIndex - 1][1];\n      const chunks = context.sliceStream(data);\n      let index = chunks.length;\n      let bufferIndex = -1;\n      let size = 0;\n      /** @type {boolean | undefined} */\n      let tabs;\n      while (index--) {\n        const chunk = chunks[index];\n        if (typeof chunk === 'string') {\n          bufferIndex = chunk.length;\n          while (chunk.charCodeAt(bufferIndex - 1) === 32) {\n            size++;\n            bufferIndex--;\n          }\n          if (bufferIndex) break;\n          bufferIndex = -1;\n        }\n        // Number\n        else if (chunk === -2) {\n          tabs = true;\n          size++;\n        } else if (chunk === -1) {\n          // Empty\n        } else {\n          // Replacement character, exit.\n          index++;\n          break;\n        }\n      }\n      if (size) {\n        const token = {\n          type: eventIndex === events.length || tabs || size < 2 ? \"lineSuffix\" : \"hardBreakTrailing\",\n          start: {\n            _bufferIndex: index ? bufferIndex : data.start._bufferIndex + bufferIndex,\n            _index: data.start._index + index,\n            line: data.end.line,\n            column: data.end.column - size,\n            offset: data.end.offset - size\n          },\n          end: {\n            ...data.end\n          }\n        };\n        data.end = {\n          ...token.start\n        };\n        if (data.start.offset === data.end.offset) {\n          Object.assign(data, token);\n        } else {\n          events.splice(eventIndex, 0, ['enter', token, context], ['exit', token, context]);\n          eventIndex += 2;\n        }\n      }\n      eventIndex++;\n    }\n  }\n  return events;\n}","/**\n * @import {\n *   Create,\n *   FullNormalizedExtension,\n *   InitialConstruct,\n *   ParseContext,\n *   ParseOptions\n * } from 'micromark-util-types'\n */\n\nimport { combineExtensions } from 'micromark-util-combine-extensions';\nimport { content } from './initialize/content.js';\nimport { document } from './initialize/document.js';\nimport { flow } from './initialize/flow.js';\nimport { string, text } from './initialize/text.js';\nimport * as defaultConstructs from './constructs.js';\nimport { createTokenizer } from './create-tokenizer.js';\n\n/**\n * @param {ParseOptions | null | undefined} [options]\n *   Configuration (optional).\n * @returns {ParseContext}\n *   Parser.\n */\nexport function parse(options) {\n  const settings = options || {};\n  const constructs = /** @type {FullNormalizedExtension} */\n  combineExtensions([defaultConstructs, ...(settings.extensions || [])]);\n\n  /** @type {ParseContext} */\n  const parser = {\n    constructs,\n    content: create(content),\n    defined: [],\n    document: create(document),\n    flow: create(flow),\n    lazy: {},\n    string: create(string),\n    text: create(text)\n  };\n  return parser;\n\n  /**\n   * @param {InitialConstruct} initial\n   *   Construct to start with.\n   * @returns {Create}\n   *   Create a tokenizer.\n   */\n  function create(initial) {\n    return creator;\n    /** @type {Create} */\n    function creator(from) {\n      return createTokenizer(parser, initial, from);\n    }\n  }\n}","/**\n * @import {Event} from 'micromark-util-types'\n */\n\nimport { subtokenize } from 'micromark-util-subtokenize';\n\n/**\n * @param {Array<Event>} events\n *   Events.\n * @returns {Array<Event>}\n *   Events.\n */\nexport function postprocess(events) {\n  while (!subtokenize(events)) {\n    // Empty\n  }\n  return events;\n}","/**\n * @import {Chunk, Code, Encoding, Value} from 'micromark-util-types'\n */\n\n/**\n * @callback Preprocessor\n *   Preprocess a value.\n * @param {Value} value\n *   Value.\n * @param {Encoding | null | undefined} [encoding]\n *   Encoding when `value` is a typed array (optional).\n * @param {boolean | null | undefined} [end=false]\n *   Whether this is the last chunk (default: `false`).\n * @returns {Array<Chunk>}\n *   Chunks.\n */\n\nconst search = /[\\0\\t\\n\\r]/g;\n\n/**\n * @returns {Preprocessor}\n *   Preprocess a value.\n */\nexport function preprocess() {\n  let column = 1;\n  let buffer = '';\n  /** @type {boolean | undefined} */\n  let start = true;\n  /** @type {boolean | undefined} */\n  let atCarriageReturn;\n  return preprocessor;\n\n  /** @type {Preprocessor} */\n  // eslint-disable-next-line complexity\n  function preprocessor(value, encoding, end) {\n    /** @type {Array<Chunk>} */\n    const chunks = [];\n    /** @type {RegExpMatchArray | null} */\n    let match;\n    /** @type {number} */\n    let next;\n    /** @type {number} */\n    let startPosition;\n    /** @type {number} */\n    let endPosition;\n    /** @type {Code} */\n    let code;\n    value = buffer + (typeof value === 'string' ? value.toString() : new TextDecoder(encoding || undefined).decode(value));\n    startPosition = 0;\n    buffer = '';\n    if (start) {\n      // To do: `markdown-rs` actually parses BOMs (byte order mark).\n      if (value.charCodeAt(0) === 65279) {\n        startPosition++;\n      }\n      start = undefined;\n    }\n    while (startPosition < value.length) {\n      search.lastIndex = startPosition;\n      match = search.exec(value);\n      endPosition = match && match.index !== undefined ? match.index : value.length;\n      code = value.charCodeAt(endPosition);\n      if (!match) {\n        buffer = value.slice(startPosition);\n        break;\n      }\n      if (code === 10 && startPosition === endPosition && atCarriageReturn) {\n        chunks.push(-3);\n        atCarriageReturn = undefined;\n      } else {\n        if (atCarriageReturn) {\n          chunks.push(-5);\n          atCarriageReturn = undefined;\n        }\n        if (startPosition < endPosition) {\n          chunks.push(value.slice(startPosition, endPosition));\n          column += endPosition - startPosition;\n        }\n        switch (code) {\n          case 0:\n            {\n              chunks.push(65533);\n              column++;\n              break;\n            }\n          case 9:\n            {\n              next = Math.ceil(column / 4) * 4;\n              chunks.push(-2);\n              while (column++ < next) chunks.push(-1);\n              break;\n            }\n          case 10:\n            {\n              chunks.push(-4);\n              column = 1;\n              break;\n            }\n          default:\n            {\n              atCarriageReturn = true;\n              column = 1;\n            }\n        }\n      }\n      startPosition = endPosition + 1;\n    }\n    if (end) {\n      if (atCarriageReturn) chunks.push(-5);\n      if (buffer) chunks.push(buffer);\n      chunks.push(null);\n    }\n    return chunks;\n  }\n}","/**\n * @typedef {import('./schema.js').Properties} Properties\n * @typedef {import('./schema.js').Normal} Normal\n */\n\nimport {Schema} from './schema.js'\n\n/**\n * @param {Schema[]} definitions\n * @param {string} [space]\n * @returns {Schema}\n */\nexport function merge(definitions, space) {\n  /** @type {Properties} */\n  const property = {}\n  /** @type {Normal} */\n  const normal = {}\n  let index = -1\n\n  while (++index < definitions.length) {\n    Object.assign(property, definitions[index].property)\n    Object.assign(normal, definitions[index].normal)\n  }\n\n  return new Schema(property, normal, space)\n}\n","/**\n * @typedef {import('./schema.js').Properties} Properties\n * @typedef {import('./schema.js').Normal} Normal\n *\n * @typedef {Record<string, string>} Attributes\n *\n * @typedef {Object} Definition\n * @property {Record<string, number|null>} properties\n * @property {(attributes: Attributes, property: string) => string} transform\n * @property {string} [space]\n * @property {Attributes} [attributes]\n * @property {Array<string>} [mustUseProperty]\n */\n\nimport {normalize} from '../normalize.js'\nimport {Schema} from './schema.js'\nimport {DefinedInfo} from './defined-info.js'\n\nconst own = {}.hasOwnProperty\n\n/**\n * @param {Definition} definition\n * @returns {Schema}\n */\nexport function create(definition) {\n  /** @type {Properties} */\n  const property = {}\n  /** @type {Normal} */\n  const normal = {}\n  /** @type {string} */\n  let prop\n\n  for (prop in definition.properties) {\n    if (own.call(definition.properties, prop)) {\n      const value = definition.properties[prop]\n      const info = new DefinedInfo(\n        prop,\n        definition.transform(definition.attributes || {}, prop),\n        value,\n        definition.space\n      )\n\n      if (\n        definition.mustUseProperty &&\n        definition.mustUseProperty.includes(prop)\n      ) {\n        info.mustUseProperty = true\n      }\n\n      property[prop] = info\n\n      normal[normalize(prop)] = prop\n      normal[normalize(info.attribute)] = prop\n    }\n  }\n\n  return new Schema(property, normal, definition.space)\n}\n","import {create} from './util/create.js'\n\nexport const xlink = create({\n  space: 'xlink',\n  transform(_, prop) {\n    return 'xlink:' + prop.slice(5).toLowerCase()\n  },\n  properties: {\n    xLinkActuate: null,\n    xLinkArcRole: null,\n    xLinkHref: null,\n    xLinkRole: null,\n    xLinkShow: null,\n    xLinkTitle: null,\n    xLinkType: null\n  }\n})\n","import {create} from './util/create.js'\n\nexport const xml = create({\n  space: 'xml',\n  transform(_, prop) {\n    return 'xml:' + prop.slice(3).toLowerCase()\n  },\n  properties: {xmlLang: null, xmlBase: null, xmlSpace: null}\n})\n","import {caseSensitiveTransform} from './case-sensitive-transform.js'\n\n/**\n * @param {Record<string, string>} attributes\n * @param {string} property\n * @returns {string}\n */\nexport function caseInsensitiveTransform(attributes, property) {\n  return caseSensitiveTransform(attributes, property.toLowerCase())\n}\n","import {create} from './util/create.js'\nimport {caseInsensitiveTransform} from './util/case-insensitive-transform.js'\n\nexport const xmlns = create({\n  space: 'xmlns',\n  attributes: {xmlnsxlink: 'xmlns:xlink'},\n  transform: caseInsensitiveTransform,\n  properties: {xmlns: null, xmlnsXLink: null}\n})\n","import {booleanish, number, spaceSeparated} from './util/types.js'\nimport {create} from './util/create.js'\n\nexport const aria = create({\n  transform(_, prop) {\n    return prop === 'role' ? prop : 'aria-' + prop.slice(4).toLowerCase()\n  },\n  properties: {\n    ariaActiveDescendant: null,\n    ariaAtomic: booleanish,\n    ariaAutoComplete: null,\n    ariaBusy: booleanish,\n    ariaChecked: booleanish,\n    ariaColCount: number,\n    ariaColIndex: number,\n    ariaColSpan: number,\n    ariaControls: spaceSeparated,\n    ariaCurrent: null,\n    ariaDescribedBy: spaceSeparated,\n    ariaDetails: null,\n    ariaDisabled: booleanish,\n    ariaDropEffect: spaceSeparated,\n    ariaErrorMessage: null,\n    ariaExpanded: booleanish,\n    ariaFlowTo: spaceSeparated,\n    ariaGrabbed: booleanish,\n    ariaHasPopup: null,\n    ariaHidden: booleanish,\n    ariaInvalid: null,\n    ariaKeyShortcuts: null,\n    ariaLabel: null,\n    ariaLabelledBy: spaceSeparated,\n    ariaLevel: number,\n    ariaLive: null,\n    ariaModal: booleanish,\n    ariaMultiLine: booleanish,\n    ariaMultiSelectable: booleanish,\n    ariaOrientation: null,\n    ariaOwns: spaceSeparated,\n    ariaPlaceholder: null,\n    ariaPosInSet: number,\n    ariaPressed: booleanish,\n    ariaReadOnly: booleanish,\n    ariaRelevant: null,\n    ariaRequired: booleanish,\n    ariaRoleDescription: spaceSeparated,\n    ariaRowCount: number,\n    ariaRowIndex: number,\n    ariaRowSpan: number,\n    ariaSelected: booleanish,\n    ariaSetSize: number,\n    ariaSort: null,\n    ariaValueMax: number,\n    ariaValueMin: number,\n    ariaValueNow: number,\n    ariaValueText: null,\n    role: null\n  }\n})\n","import {\n  boolean,\n  overloadedBoolean,\n  booleanish,\n  number,\n  spaceSeparated,\n  commaSeparated\n} from './util/types.js'\nimport {create} from './util/create.js'\nimport {caseInsensitiveTransform} from './util/case-insensitive-transform.js'\n\nexport const html = create({\n  space: 'html',\n  attributes: {\n    acceptcharset: 'accept-charset',\n    classname: 'class',\n    htmlfor: 'for',\n    httpequiv: 'http-equiv'\n  },\n  transform: caseInsensitiveTransform,\n  mustUseProperty: ['checked', 'multiple', 'muted', 'selected'],\n  properties: {\n    // Standard Properties.\n    abbr: null,\n    accept: commaSeparated,\n    acceptCharset: spaceSeparated,\n    accessKey: spaceSeparated,\n    action: null,\n    allow: null,\n    allowFullScreen: boolean,\n    allowPaymentRequest: boolean,\n    allowUserMedia: boolean,\n    alt: null,\n    as: null,\n    async: boolean,\n    autoCapitalize: null,\n    autoComplete: spaceSeparated,\n    autoFocus: boolean,\n    autoPlay: boolean,\n    blocking: spaceSeparated,\n    capture: null,\n    charSet: null,\n    checked: boolean,\n    cite: null,\n    className: spaceSeparated,\n    cols: number,\n    colSpan: null,\n    content: null,\n    contentEditable: booleanish,\n    controls: boolean,\n    controlsList: spaceSeparated,\n    coords: number | commaSeparated,\n    crossOrigin: null,\n    data: null,\n    dateTime: null,\n    decoding: null,\n    default: boolean,\n    defer: boolean,\n    dir: null,\n    dirName: null,\n    disabled: boolean,\n    download: overloadedBoolean,\n    draggable: booleanish,\n    encType: null,\n    enterKeyHint: null,\n    fetchPriority: null,\n    form: null,\n    formAction: null,\n    formEncType: null,\n    formMethod: null,\n    formNoValidate: boolean,\n    formTarget: null,\n    headers: spaceSeparated,\n    height: number,\n    hidden: boolean,\n    high: number,\n    href: null,\n    hrefLang: null,\n    htmlFor: spaceSeparated,\n    httpEquiv: spaceSeparated,\n    id: null,\n    imageSizes: null,\n    imageSrcSet: null,\n    inert: boolean,\n    inputMode: null,\n    integrity: null,\n    is: null,\n    isMap: boolean,\n    itemId: null,\n    itemProp: spaceSeparated,\n    itemRef: spaceSeparated,\n    itemScope: boolean,\n    itemType: spaceSeparated,\n    kind: null,\n    label: null,\n    lang: null,\n    language: null,\n    list: null,\n    loading: null,\n    loop: boolean,\n    low: number,\n    manifest: null,\n    max: null,\n    maxLength: number,\n    media: null,\n    method: null,\n    min: null,\n    minLength: number,\n    multiple: boolean,\n    muted: boolean,\n    name: null,\n    nonce: null,\n    noModule: boolean,\n    noValidate: boolean,\n    onAbort: null,\n    onAfterPrint: null,\n    onAuxClick: null,\n    onBeforeMatch: null,\n    onBeforePrint: null,\n    onBeforeToggle: null,\n    onBeforeUnload: null,\n    onBlur: null,\n    onCancel: null,\n    onCanPlay: null,\n    onCanPlayThrough: null,\n    onChange: null,\n    onClick: null,\n    onClose: null,\n    onContextLost: null,\n    onContextMenu: null,\n    onContextRestored: null,\n    onCopy: null,\n    onCueChange: null,\n    onCut: null,\n    onDblClick: null,\n    onDrag: null,\n    onDragEnd: null,\n    onDragEnter: null,\n    onDragExit: null,\n    onDragLeave: null,\n    onDragOver: null,\n    onDragStart: null,\n    onDrop: null,\n    onDurationChange: null,\n    onEmptied: null,\n    onEnded: null,\n    onError: null,\n    onFocus: null,\n    onFormData: null,\n    onHashChange: null,\n    onInput: null,\n    onInvalid: null,\n    onKeyDown: null,\n    onKeyPress: null,\n    onKeyUp: null,\n    onLanguageChange: null,\n    onLoad: null,\n    onLoadedData: null,\n    onLoadedMetadata: null,\n    onLoadEnd: null,\n    onLoadStart: null,\n    onMessage: null,\n    onMessageError: null,\n    onMouseDown: null,\n    onMouseEnter: null,\n    onMouseLeave: null,\n    onMouseMove: null,\n    onMouseOut: null,\n    onMouseOver: null,\n    onMouseUp: null,\n    onOffline: null,\n    onOnline: null,\n    onPageHide: null,\n    onPageShow: null,\n    onPaste: null,\n    onPause: null,\n    onPlay: null,\n    onPlaying: null,\n    onPopState: null,\n    onProgress: null,\n    onRateChange: null,\n    onRejectionHandled: null,\n    onReset: null,\n    onResize: null,\n    onScroll: null,\n    onScrollEnd: null,\n    onSecurityPolicyViolation: null,\n    onSeeked: null,\n    onSeeking: null,\n    onSelect: null,\n    onSlotChange: null,\n    onStalled: null,\n    onStorage: null,\n    onSubmit: null,\n    onSuspend: null,\n    onTimeUpdate: null,\n    onToggle: null,\n    onUnhandledRejection: null,\n    onUnload: null,\n    onVolumeChange: null,\n    onWaiting: null,\n    onWheel: null,\n    open: boolean,\n    optimum: number,\n    pattern: null,\n    ping: spaceSeparated,\n    placeholder: null,\n    playsInline: boolean,\n    popover: null,\n    popoverTarget: null,\n    popoverTargetAction: null,\n    poster: null,\n    preload: null,\n    readOnly: boolean,\n    referrerPolicy: null,\n    rel: spaceSeparated,\n    required: boolean,\n    reversed: boolean,\n    rows: number,\n    rowSpan: number,\n    sandbox: spaceSeparated,\n    scope: null,\n    scoped: boolean,\n    seamless: boolean,\n    selected: boolean,\n    shadowRootClonable: boolean,\n    shadowRootDelegatesFocus: boolean,\n    shadowRootMode: null,\n    shape: null,\n    size: number,\n    sizes: null,\n    slot: null,\n    span: number,\n    spellCheck: booleanish,\n    src: null,\n    srcDoc: null,\n    srcLang: null,\n    srcSet: null,\n    start: number,\n    step: null,\n    style: null,\n    tabIndex: number,\n    target: null,\n    title: null,\n    translate: null,\n    type: null,\n    typeMustMatch: boolean,\n    useMap: null,\n    value: booleanish,\n    width: number,\n    wrap: null,\n    writingSuggestions: null,\n\n    // Legacy.\n    // See: https://html.spec.whatwg.org/#other-elements,-attributes-and-apis\n    align: null, // Several. Use CSS `text-align` instead,\n    aLink: null, // `<body>`. Use CSS `a:active {color}` instead\n    archive: spaceSeparated, // `<object>`. List of URIs to archives\n    axis: null, // `<td>` and `<th>`. Use `scope` on `<th>`\n    background: null, // `<body>`. Use CSS `background-image` instead\n    bgColor: null, // `<body>` and table elements. Use CSS `background-color` instead\n    border: number, // `<table>`. Use CSS `border-width` instead,\n    borderColor: null, // `<table>`. Use CSS `border-color` instead,\n    bottomMargin: number, // `<body>`\n    cellPadding: null, // `<table>`\n    cellSpacing: null, // `<table>`\n    char: null, // Several table elements. When `align=char`, sets the character to align on\n    charOff: null, // Several table elements. When `char`, offsets the alignment\n    classId: null, // `<object>`\n    clear: null, // `<br>`. Use CSS `clear` instead\n    code: null, // `<object>`\n    codeBase: null, // `<object>`\n    codeType: null, // `<object>`\n    color: null, // `<font>` and `<hr>`. Use CSS instead\n    compact: boolean, // Lists. Use CSS to reduce space between items instead\n    declare: boolean, // `<object>`\n    event: null, // `<script>`\n    face: null, // `<font>`. Use CSS instead\n    frame: null, // `<table>`\n    frameBorder: null, // `<iframe>`. Use CSS `border` instead\n    hSpace: number, // `<img>` and `<object>`\n    leftMargin: number, // `<body>`\n    link: null, // `<body>`. Use CSS `a:link {color: *}` instead\n    longDesc: null, // `<frame>`, `<iframe>`, and `<img>`. Use an `<a>`\n    lowSrc: null, // `<img>`. Use a `<picture>`\n    marginHeight: number, // `<body>`\n    marginWidth: number, // `<body>`\n    noResize: boolean, // `<frame>`\n    noHref: boolean, // `<area>`. Use no href instead of an explicit `nohref`\n    noShade: boolean, // `<hr>`. Use background-color and height instead of borders\n    noWrap: boolean, // `<td>` and `<th>`\n    object: null, // `<applet>`\n    profile: null, // `<head>`\n    prompt: null, // `<isindex>`\n    rev: null, // `<link>`\n    rightMargin: number, // `<body>`\n    rules: null, // `<table>`\n    scheme: null, // `<meta>`\n    scrolling: booleanish, // `<frame>`. Use overflow in the child context\n    standby: null, // `<object>`\n    summary: null, // `<table>`\n    text: null, // `<body>`. Use CSS `color` instead\n    topMargin: number, // `<body>`\n    valueType: null, // `<param>`\n    version: null, // `<html>`. Use a doctype.\n    vAlign: null, // Several. Use CSS `vertical-align` instead\n    vLink: null, // `<body>`. Use CSS `a:visited {color}` instead\n    vSpace: number, // `<img>` and `<object>`\n\n    // Non-standard Properties.\n    allowTransparency: null,\n    autoCorrect: null,\n    autoSave: null,\n    disablePictureInPicture: boolean,\n    disableRemotePlayback: boolean,\n    prefix: null,\n    property: null,\n    results: number,\n    security: null,\n    unselectable: null\n  }\n})\n","import {\n  boolean,\n  number,\n  spaceSeparated,\n  commaSeparated,\n  commaOrSpaceSeparated\n} from './util/types.js'\nimport {create} from './util/create.js'\nimport {caseSensitiveTransform} from './util/case-sensitive-transform.js'\n\nexport const svg = create({\n  space: 'svg',\n  attributes: {\n    accentHeight: 'accent-height',\n    alignmentBaseline: 'alignment-baseline',\n    arabicForm: 'arabic-form',\n    baselineShift: 'baseline-shift',\n    capHeight: 'cap-height',\n    className: 'class',\n    clipPath: 'clip-path',\n    clipRule: 'clip-rule',\n    colorInterpolation: 'color-interpolation',\n    colorInterpolationFilters: 'color-interpolation-filters',\n    colorProfile: 'color-profile',\n    colorRendering: 'color-rendering',\n    crossOrigin: 'crossorigin',\n    dataType: 'datatype',\n    dominantBaseline: 'dominant-baseline',\n    enableBackground: 'enable-background',\n    fillOpacity: 'fill-opacity',\n    fillRule: 'fill-rule',\n    floodColor: 'flood-color',\n    floodOpacity: 'flood-opacity',\n    fontFamily: 'font-family',\n    fontSize: 'font-size',\n    fontSizeAdjust: 'font-size-adjust',\n    fontStretch: 'font-stretch',\n    fontStyle: 'font-style',\n    fontVariant: 'font-variant',\n    fontWeight: 'font-weight',\n    glyphName: 'glyph-name',\n    glyphOrientationHorizontal: 'glyph-orientation-horizontal',\n    glyphOrientationVertical: 'glyph-orientation-vertical',\n    hrefLang: 'hreflang',\n    horizAdvX: 'horiz-adv-x',\n    horizOriginX: 'horiz-origin-x',\n    horizOriginY: 'horiz-origin-y',\n    imageRendering: 'image-rendering',\n    letterSpacing: 'letter-spacing',\n    lightingColor: 'lighting-color',\n    markerEnd: 'marker-end',\n    markerMid: 'marker-mid',\n    markerStart: 'marker-start',\n    navDown: 'nav-down',\n    navDownLeft: 'nav-down-left',\n    navDownRight: 'nav-down-right',\n    navLeft: 'nav-left',\n    navNext: 'nav-next',\n    navPrev: 'nav-prev',\n    navRight: 'nav-right',\n    navUp: 'nav-up',\n    navUpLeft: 'nav-up-left',\n    navUpRight: 'nav-up-right',\n    onAbort: 'onabort',\n    onActivate: 'onactivate',\n    onAfterPrint: 'onafterprint',\n    onBeforePrint: 'onbeforeprint',\n    onBegin: 'onbegin',\n    onCancel: 'oncancel',\n    onCanPlay: 'oncanplay',\n    onCanPlayThrough: 'oncanplaythrough',\n    onChange: 'onchange',\n    onClick: 'onclick',\n    onClose: 'onclose',\n    onCopy: 'oncopy',\n    onCueChange: 'oncuechange',\n    onCut: 'oncut',\n    onDblClick: 'ondblclick',\n    onDrag: 'ondrag',\n    onDragEnd: 'ondragend',\n    onDragEnter: 'ondragenter',\n    onDragExit: 'ondragexit',\n    onDragLeave: 'ondragleave',\n    onDragOver: 'ondragover',\n    onDragStart: 'ondragstart',\n    onDrop: 'ondrop',\n    onDurationChange: 'ondurationchange',\n    onEmptied: 'onemptied',\n    onEnd: 'onend',\n    onEnded: 'onended',\n    onError: 'onerror',\n    onFocus: 'onfocus',\n    onFocusIn: 'onfocusin',\n    onFocusOut: 'onfocusout',\n    onHashChange: 'onhashchange',\n    onInput: 'oninput',\n    onInvalid: 'oninvalid',\n    onKeyDown: 'onkeydown',\n    onKeyPress: 'onkeypress',\n    onKeyUp: 'onkeyup',\n    onLoad: 'onload',\n    onLoadedData: 'onloadeddata',\n    onLoadedMetadata: 'onloadedmetadata',\n    onLoadStart: 'onloadstart',\n    onMessage: 'onmessage',\n    onMouseDown: 'onmousedown',\n    onMouseEnter: 'onmouseenter',\n    onMouseLeave: 'onmouseleave',\n    onMouseMove: 'onmousemove',\n    onMouseOut: 'onmouseout',\n    onMouseOver: 'onmouseover',\n    onMouseUp: 'onmouseup',\n    onMouseWheel: 'onmousewheel',\n    onOffline: 'onoffline',\n    onOnline: 'ononline',\n    onPageHide: 'onpagehide',\n    onPageShow: 'onpageshow',\n    onPaste: 'onpaste',\n    onPause: 'onpause',\n    onPlay: 'onplay',\n    onPlaying: 'onplaying',\n    onPopState: 'onpopstate',\n    onProgress: 'onprogress',\n    onRateChange: 'onratechange',\n    onRepeat: 'onrepeat',\n    onReset: 'onreset',\n    onResize: 'onresize',\n    onScroll: 'onscroll',\n    onSeeked: 'onseeked',\n    onSeeking: 'onseeking',\n    onSelect: 'onselect',\n    onShow: 'onshow',\n    onStalled: 'onstalled',\n    onStorage: 'onstorage',\n    onSubmit: 'onsubmit',\n    onSuspend: 'onsuspend',\n    onTimeUpdate: 'ontimeupdate',\n    onToggle: 'ontoggle',\n    onUnload: 'onunload',\n    onVolumeChange: 'onvolumechange',\n    onWaiting: 'onwaiting',\n    onZoom: 'onzoom',\n    overlinePosition: 'overline-position',\n    overlineThickness: 'overline-thickness',\n    paintOrder: 'paint-order',\n    panose1: 'panose-1',\n    pointerEvents: 'pointer-events',\n    referrerPolicy: 'referrerpolicy',\n    renderingIntent: 'rendering-intent',\n    shapeRendering: 'shape-rendering',\n    stopColor: 'stop-color',\n    stopOpacity: 'stop-opacity',\n    strikethroughPosition: 'strikethrough-position',\n    strikethroughThickness: 'strikethrough-thickness',\n    strokeDashArray: 'stroke-dasharray',\n    strokeDashOffset: 'stroke-dashoffset',\n    strokeLineCap: 'stroke-linecap',\n    strokeLineJoin: 'stroke-linejoin',\n    strokeMiterLimit: 'stroke-miterlimit',\n    strokeOpacity: 'stroke-opacity',\n    strokeWidth: 'stroke-width',\n    tabIndex: 'tabindex',\n    textAnchor: 'text-anchor',\n    textDecoration: 'text-decoration',\n    textRendering: 'text-rendering',\n    transformOrigin: 'transform-origin',\n    typeOf: 'typeof',\n    underlinePosition: 'underline-position',\n    underlineThickness: 'underline-thickness',\n    unicodeBidi: 'unicode-bidi',\n    unicodeRange: 'unicode-range',\n    unitsPerEm: 'units-per-em',\n    vAlphabetic: 'v-alphabetic',\n    vHanging: 'v-hanging',\n    vIdeographic: 'v-ideographic',\n    vMathematical: 'v-mathematical',\n    vectorEffect: 'vector-effect',\n    vertAdvY: 'vert-adv-y',\n    vertOriginX: 'vert-origin-x',\n    vertOriginY: 'vert-origin-y',\n    wordSpacing: 'word-spacing',\n    writingMode: 'writing-mode',\n    xHeight: 'x-height',\n    // These were camelcased in Tiny. Now lowercased in SVG 2\n    playbackOrder: 'playbackorder',\n    timelineBegin: 'timelinebegin'\n  },\n  transform: caseSensitiveTransform,\n  properties: {\n    about: commaOrSpaceSeparated,\n    accentHeight: number,\n    accumulate: null,\n    additive: null,\n    alignmentBaseline: null,\n    alphabetic: number,\n    amplitude: number,\n    arabicForm: null,\n    ascent: number,\n    attributeName: null,\n    attributeType: null,\n    azimuth: number,\n    bandwidth: null,\n    baselineShift: null,\n    baseFrequency: null,\n    baseProfile: null,\n    bbox: null,\n    begin: null,\n    bias: number,\n    by: null,\n    calcMode: null,\n    capHeight: number,\n    className: spaceSeparated,\n    clip: null,\n    clipPath: null,\n    clipPathUnits: null,\n    clipRule: null,\n    color: null,\n    colorInterpolation: null,\n    colorInterpolationFilters: null,\n    colorProfile: null,\n    colorRendering: null,\n    content: null,\n    contentScriptType: null,\n    contentStyleType: null,\n    crossOrigin: null,\n    cursor: null,\n    cx: null,\n    cy: null,\n    d: null,\n    dataType: null,\n    defaultAction: null,\n    descent: number,\n    diffuseConstant: number,\n    direction: null,\n    display: null,\n    dur: null,\n    divisor: number,\n    dominantBaseline: null,\n    download: boolean,\n    dx: null,\n    dy: null,\n    edgeMode: null,\n    editable: null,\n    elevation: number,\n    enableBackground: null,\n    end: null,\n    event: null,\n    exponent: number,\n    externalResourcesRequired: null,\n    fill: null,\n    fillOpacity: number,\n    fillRule: null,\n    filter: null,\n    filterRes: null,\n    filterUnits: null,\n    floodColor: null,\n    floodOpacity: null,\n    focusable: null,\n    focusHighlight: null,\n    fontFamily: null,\n    fontSize: null,\n    fontSizeAdjust: null,\n    fontStretch: null,\n    fontStyle: null,\n    fontVariant: null,\n    fontWeight: null,\n    format: null,\n    fr: null,\n    from: null,\n    fx: null,\n    fy: null,\n    g1: commaSeparated,\n    g2: commaSeparated,\n    glyphName: commaSeparated,\n    glyphOrientationHorizontal: null,\n    glyphOrientationVertical: null,\n    glyphRef: null,\n    gradientTransform: null,\n    gradientUnits: null,\n    handler: null,\n    hanging: number,\n    hatchContentUnits: null,\n    hatchUnits: null,\n    height: null,\n    href: null,\n    hrefLang: null,\n    horizAdvX: number,\n    horizOriginX: number,\n    horizOriginY: number,\n    id: null,\n    ideographic: number,\n    imageRendering: null,\n    initialVisibility: null,\n    in: null,\n    in2: null,\n    intercept: number,\n    k: number,\n    k1: number,\n    k2: number,\n    k3: number,\n    k4: number,\n    kernelMatrix: commaOrSpaceSeparated,\n    kernelUnitLength: null,\n    keyPoints: null, // SEMI_COLON_SEPARATED\n    keySplines: null, // SEMI_COLON_SEPARATED\n    keyTimes: null, // SEMI_COLON_SEPARATED\n    kerning: null,\n    lang: null,\n    lengthAdjust: null,\n    letterSpacing: null,\n    lightingColor: null,\n    limitingConeAngle: number,\n    local: null,\n    markerEnd: null,\n    markerMid: null,\n    markerStart: null,\n    markerHeight: null,\n    markerUnits: null,\n    markerWidth: null,\n    mask: null,\n    maskContentUnits: null,\n    maskUnits: null,\n    mathematical: null,\n    max: null,\n    media: null,\n    mediaCharacterEncoding: null,\n    mediaContentEncodings: null,\n    mediaSize: number,\n    mediaTime: null,\n    method: null,\n    min: null,\n    mode: null,\n    name: null,\n    navDown: null,\n    navDownLeft: null,\n    navDownRight: null,\n    navLeft: null,\n    navNext: null,\n    navPrev: null,\n    navRight: null,\n    navUp: null,\n    navUpLeft: null,\n    navUpRight: null,\n    numOctaves: null,\n    observer: null,\n    offset: null,\n    onAbort: null,\n    onActivate: null,\n    onAfterPrint: null,\n    onBeforePrint: null,\n    onBegin: null,\n    onCancel: null,\n    onCanPlay: null,\n    onCanPlayThrough: null,\n    onChange: null,\n    onClick: null,\n    onClose: null,\n    onCopy: null,\n    onCueChange: null,\n    onCut: null,\n    onDblClick: null,\n    onDrag: null,\n    onDragEnd: null,\n    onDragEnter: null,\n    onDragExit: null,\n    onDragLeave: null,\n    onDragOver: null,\n    onDragStart: null,\n    onDrop: null,\n    onDurationChange: null,\n    onEmptied: null,\n    onEnd: null,\n    onEnded: null,\n    onError: null,\n    onFocus: null,\n    onFocusIn: null,\n    onFocusOut: null,\n    onHashChange: null,\n    onInput: null,\n    onInvalid: null,\n    onKeyDown: null,\n    onKeyPress: null,\n    onKeyUp: null,\n    onLoad: null,\n    onLoadedData: null,\n    onLoadedMetadata: null,\n    onLoadStart: null,\n    onMessage: null,\n    onMouseDown: null,\n    onMouseEnter: null,\n    onMouseLeave: null,\n    onMouseMove: null,\n    onMouseOut: null,\n    onMouseOver: null,\n    onMouseUp: null,\n    onMouseWheel: null,\n    onOffline: null,\n    onOnline: null,\n    onPageHide: null,\n    onPageShow: null,\n    onPaste: null,\n    onPause: null,\n    onPlay: null,\n    onPlaying: null,\n    onPopState: null,\n    onProgress: null,\n    onRateChange: null,\n    onRepeat: null,\n    onReset: null,\n    onResize: null,\n    onScroll: null,\n    onSeeked: null,\n    onSeeking: null,\n    onSelect: null,\n    onShow: null,\n    onStalled: null,\n    onStorage: null,\n    onSubmit: null,\n    onSuspend: null,\n    onTimeUpdate: null,\n    onToggle: null,\n    onUnload: null,\n    onVolumeChange: null,\n    onWaiting: null,\n    onZoom: null,\n    opacity: null,\n    operator: null,\n    order: null,\n    orient: null,\n    orientation: null,\n    origin: null,\n    overflow: null,\n    overlay: null,\n    overlinePosition: number,\n    overlineThickness: number,\n    paintOrder: null,\n    panose1: null,\n    path: null,\n    pathLength: number,\n    patternContentUnits: null,\n    patternTransform: null,\n    patternUnits: null,\n    phase: null,\n    ping: spaceSeparated,\n    pitch: null,\n    playbackOrder: null,\n    pointerEvents: null,\n    points: null,\n    pointsAtX: number,\n    pointsAtY: number,\n    pointsAtZ: number,\n    preserveAlpha: null,\n    preserveAspectRatio: null,\n    primitiveUnits: null,\n    propagate: null,\n    property: commaOrSpaceSeparated,\n    r: null,\n    radius: null,\n    referrerPolicy: null,\n    refX: null,\n    refY: null,\n    rel: commaOrSpaceSeparated,\n    rev: commaOrSpaceSeparated,\n    renderingIntent: null,\n    repeatCount: null,\n    repeatDur: null,\n    requiredExtensions: commaOrSpaceSeparated,\n    requiredFeatures: commaOrSpaceSeparated,\n    requiredFonts: commaOrSpaceSeparated,\n    requiredFormats: commaOrSpaceSeparated,\n    resource: null,\n    restart: null,\n    result: null,\n    rotate: null,\n    rx: null,\n    ry: null,\n    scale: null,\n    seed: null,\n    shapeRendering: null,\n    side: null,\n    slope: null,\n    snapshotTime: null,\n    specularConstant: number,\n    specularExponent: number,\n    spreadMethod: null,\n    spacing: null,\n    startOffset: null,\n    stdDeviation: null,\n    stemh: null,\n    stemv: null,\n    stitchTiles: null,\n    stopColor: null,\n    stopOpacity: null,\n    strikethroughPosition: number,\n    strikethroughThickness: number,\n    string: null,\n    stroke: null,\n    strokeDashArray: commaOrSpaceSeparated,\n    strokeDashOffset: null,\n    strokeLineCap: null,\n    strokeLineJoin: null,\n    strokeMiterLimit: number,\n    strokeOpacity: number,\n    strokeWidth: null,\n    style: null,\n    surfaceScale: number,\n    syncBehavior: null,\n    syncBehaviorDefault: null,\n    syncMaster: null,\n    syncTolerance: null,\n    syncToleranceDefault: null,\n    systemLanguage: commaOrSpaceSeparated,\n    tabIndex: number,\n    tableValues: null,\n    target: null,\n    targetX: number,\n    targetY: number,\n    textAnchor: null,\n    textDecoration: null,\n    textRendering: null,\n    textLength: null,\n    timelineBegin: null,\n    title: null,\n    transformBehavior: null,\n    type: null,\n    typeOf: commaOrSpaceSeparated,\n    to: null,\n    transform: null,\n    transformOrigin: null,\n    u1: null,\n    u2: null,\n    underlinePosition: number,\n    underlineThickness: number,\n    unicode: null,\n    unicodeBidi: null,\n    unicodeRange: null,\n    unitsPerEm: number,\n    values: null,\n    vAlphabetic: number,\n    vMathematical: number,\n    vectorEffect: null,\n    vHanging: number,\n    vIdeographic: number,\n    version: null,\n    vertAdvY: number,\n    vertOriginX: number,\n    vertOriginY: number,\n    viewBox: null,\n    viewTarget: null,\n    visibility: null,\n    width: null,\n    widths: null,\n    wordSpacing: null,\n    writingMode: null,\n    x: null,\n    x1: null,\n    x2: null,\n    xChannelSelector: null,\n    xHeight: number,\n    y: null,\n    y1: null,\n    y2: null,\n    yChannelSelector: null,\n    z: null,\n    zoomAndPan: null\n  }\n})\n","/**\n * @typedef {import('./lib/util/info.js').Info} Info\n * @typedef {import('./lib/util/schema.js').Schema} Schema\n */\n\nimport {merge} from './lib/util/merge.js'\nimport {xlink} from './lib/xlink.js'\nimport {xml} from './lib/xml.js'\nimport {xmlns} from './lib/xmlns.js'\nimport {aria} from './lib/aria.js'\nimport {html as htmlBase} from './lib/html.js'\nimport {svg as svgBase} from './lib/svg.js'\n\nexport {find} from './lib/find.js'\nexport {hastToReact} from './lib/hast-to-react.js'\nexport {normalize} from './lib/normalize.js'\nexport const html = merge([xml, xlink, xmlns, aria, htmlBase], 'html')\nexport const svg = merge([xml, xlink, xmlns, aria, svgBase], 'svg')\n","/**\n * @typedef {import('./util/schema.js').Schema} Schema\n */\n\nimport {normalize} from './normalize.js'\nimport {DefinedInfo} from './util/defined-info.js'\nimport {Info} from './util/info.js'\n\nconst valid = /^data[-\\w.:]+$/i\nconst dash = /-[a-z]/g\nconst cap = /[A-Z]/g\n\n/**\n * @param {Schema} schema\n * @param {string} value\n * @returns {Info}\n */\nexport function find(schema, value) {\n  const normal = normalize(value)\n  let prop = value\n  let Type = Info\n\n  if (normal in schema.normal) {\n    return schema.property[schema.normal[normal]]\n  }\n\n  if (normal.length > 4 && normal.slice(0, 4) === 'data' && valid.test(value)) {\n    // Attribute or property.\n    if (value.charAt(4) === '-') {\n      // Turn it into a property.\n      const rest = value.slice(5).replace(dash, camelcase)\n      prop = 'data' + rest.charAt(0).toUpperCase() + rest.slice(1)\n    } else {\n      // Turn it into an attribute.\n      const rest = value.slice(4)\n\n      if (!dash.test(rest)) {\n        let dashes = rest.replace(cap, kebab)\n\n        if (dashes.charAt(0) !== '-') {\n          dashes = '-' + dashes\n        }\n\n        value = 'data' + dashes\n      }\n    }\n\n    Type = DefinedInfo\n  }\n\n  return new Type(prop, value)\n}\n\n/**\n * @param {string} $0\n * @returns {string}\n */\nfunction kebab($0) {\n  return '-' + $0.toLowerCase()\n}\n\n/**\n * @param {string} $0\n * @returns {string}\n */\nfunction camelcase($0) {\n  return $0.charAt(1).toUpperCase()\n}\n","/**\n * `hast` is close to `React`, but differs in a couple of cases.\n *\n * To get a React property from a hast property, check if it is in\n * `hastToReact`, if it is, then use the corresponding value,\n * otherwise, use the hast property.\n *\n * @type {Record<string, string>}\n */\nexport const hastToReact = {\n  classId: 'classID',\n  dataType: 'datatype',\n  itemId: 'itemID',\n  strokeDashArray: 'strokeDasharray',\n  strokeDashOffset: 'strokeDashoffset',\n  strokeLineCap: 'strokeLinecap',\n  strokeLineJoin: 'strokeLinejoin',\n  strokeMiterLimit: 'strokeMiterlimit',\n  typeOf: 'typeof',\n  xLinkActuate: 'xlinkActuate',\n  xLinkArcRole: 'xlinkArcrole',\n  xLinkHref: 'xlinkHref',\n  xLinkRole: 'xlinkRole',\n  xLinkShow: 'xlinkShow',\n  xLinkTitle: 'xlinkTitle',\n  xLinkType: 'xlinkType',\n  xmlnsXLink: 'xmlnsXlink'\n}\n","/**\n * @param {string} value\n * @returns {string}\n */\nexport function normalize(value) {\n  return value.toLowerCase()\n}\n","/**\n * @param {Record<string, string>} attributes\n * @param {string} attribute\n * @returns {string}\n */\nexport function caseSensitiveTransform(attributes, attribute) {\n  return attribute in attributes ? attributes[attribute] : attribute\n}\n","import {Info} from './info.js'\nimport * as types from './types.js'\n\n/** @type {Array<keyof types>} */\n// @ts-expect-error: hush.\nconst checks = Object.keys(types)\n\nexport class DefinedInfo extends Info {\n  /**\n   * @constructor\n   * @param {string} property\n   * @param {string} attribute\n   * @param {number|null} [mask]\n   * @param {string} [space]\n   */\n  constructor(property, attribute, mask, space) {\n    let index = -1\n\n    super(property, attribute)\n\n    mark(this, 'space', space)\n\n    if (typeof mask === 'number') {\n      while (++index < checks.length) {\n        const check = checks[index]\n        mark(this, checks[index], (mask & types[check]) === types[check])\n      }\n    }\n  }\n}\n\nDefinedInfo.prototype.defined = true\n\n/**\n * @param {DefinedInfo} values\n * @param {string} key\n * @param {unknown} value\n */\nfunction mark(values, key, value) {\n  if (value) {\n    // @ts-expect-error: assume `value` matches the expected value of `key`.\n    values[key] = value\n  }\n}\n","export class Info {\n  /**\n   * @constructor\n   * @param {string} property\n   * @param {string} attribute\n   */\n  constructor(property, attribute) {\n    /** @type {string} */\n    this.property = property\n    /** @type {string} */\n    this.attribute = attribute\n  }\n}\n\n/** @type {string|null} */\nInfo.prototype.space = null\nInfo.prototype.boolean = false\nInfo.prototype.booleanish = false\nInfo.prototype.overloadedBoolean = false\nInfo.prototype.number = false\nInfo.prototype.commaSeparated = false\nInfo.prototype.spaceSeparated = false\nInfo.prototype.commaOrSpaceSeparated = false\nInfo.prototype.mustUseProperty = false\nInfo.prototype.defined = false\n","/**\n * @typedef {import('./info.js').Info} Info\n * @typedef {Record<string, Info>} Properties\n * @typedef {Record<string, string>} Normal\n */\n\nexport class Schema {\n  /**\n   * @constructor\n   * @param {Properties} property\n   * @param {Normal} normal\n   * @param {string} [space]\n   */\n  constructor(property, normal, space) {\n    this.property = property\n    this.normal = normal\n    if (space) {\n      this.space = space\n    }\n  }\n}\n\n/** @type {Properties} */\nSchema.prototype.property = {}\n/** @type {Normal} */\nSchema.prototype.normal = {}\n/** @type {string|null} */\nSchema.prototype.space = null\n","let powers = 0\n\nexport const boolean = increment()\nexport const booleanish = increment()\nexport const overloadedBoolean = increment()\nexport const number = increment()\nexport const spaceSeparated = increment()\nexport const commaSeparated = increment()\nexport const commaOrSpaceSeparated = increment()\n\nfunction increment() {\n  return 2 ** ++powers\n}\n","const token = '%[a-f0-9]{2}';\nconst singleMatcher = new RegExp('(' + token + ')|([^%]+?)', 'gi');\nconst multiMatcher = new RegExp('(' + token + ')+', 'gi');\n\nfunction decodeComponents(components, split) {\n\ttry {\n\t\t// Try to decode the entire string first\n\t\treturn [decodeURIComponent(components.join(''))];\n\t} catch {\n\t\t// Do nothing\n\t}\n\n\tif (components.length === 1) {\n\t\treturn components;\n\t}\n\n\tsplit = split || 1;\n\n\t// Split the array in 2 parts\n\tconst left = components.slice(0, split);\n\tconst right = components.slice(split);\n\n\treturn Array.prototype.concat.call([], decodeComponents(left), decodeComponents(right));\n}\n\nfunction decode(input) {\n\ttry {\n\t\treturn decodeURIComponent(input);\n\t} catch {\n\t\tlet tokens = input.match(singleMatcher) || [];\n\n\t\tfor (let i = 1; i < tokens.length; i++) {\n\t\t\tinput = decodeComponents(tokens, i).join('');\n\n\t\t\ttokens = input.match(singleMatcher) || [];\n\t\t}\n\n\t\treturn input;\n\t}\n}\n\nfunction customDecodeURIComponent(input) {\n\t// Keep track of all the replacements and prefill the map with the `BOM`\n\tconst replaceMap = {\n\t\t'%FE%FF': '\\uFFFD\\uFFFD',\n\t\t'%FF%FE': '\\uFFFD\\uFFFD',\n\t};\n\n\tlet match = multiMatcher.exec(input);\n\twhile (match) {\n\t\ttry {\n\t\t\t// Decode as big chunks as possible\n\t\t\treplaceMap[match[0]] = decodeURIComponent(match[0]);\n\t\t} catch {\n\t\t\tconst result = decode(match[0]);\n\n\t\t\tif (result !== match[0]) {\n\t\t\t\treplaceMap[match[0]] = result;\n\t\t\t}\n\t\t}\n\n\t\tmatch = multiMatcher.exec(input);\n\t}\n\n\t// Add `%C2` at the end of the map to make sure it does not replace the combinator before everything else\n\treplaceMap['%C2'] = '\\uFFFD';\n\n\tconst entries = Object.keys(replaceMap);\n\n\tfor (const key of entries) {\n\t\t// Replace all decoded components\n\t\tinput = input.replace(new RegExp(key, 'g'), replaceMap[key]);\n\t}\n\n\treturn input;\n}\n\nexport default function decodeUriComponent(encodedURI) {\n\tif (typeof encodedURI !== 'string') {\n\t\tthrow new TypeError('Expected `encodedURI` to be of type `string`, got `' + typeof encodedURI + '`');\n\t}\n\n\ttry {\n\t\t// Try the built in decoder first\n\t\treturn decodeURIComponent(encodedURI);\n\t} catch {\n\t\t// Fallback to a more advanced decoder\n\t\treturn customDecodeURIComponent(encodedURI);\n\t}\n}\n","export default function splitOnFirst(string, separator) {\n\tif (!(typeof string === 'string' && typeof separator === 'string')) {\n\t\tthrow new TypeError('Expected the arguments to be of type `string`');\n\t}\n\n\tif (string === '' || separator === '') {\n\t\treturn [];\n\t}\n\n\tconst separatorIndex = string.indexOf(separator);\n\n\tif (separatorIndex === -1) {\n\t\treturn [];\n\t}\n\n\treturn [\n\t\tstring.slice(0, separatorIndex),\n\t\tstring.slice(separatorIndex + separator.length)\n\t];\n}\n","export function includeKeys(object, predicate) {\n\tconst result = {};\n\n\tif (Array.isArray(predicate)) {\n\t\tfor (const key of predicate) {\n\t\t\tconst descriptor = Object.getOwnPropertyDescriptor(object, key);\n\t\t\tif (descriptor?.enumerable) {\n\t\t\t\tObject.defineProperty(result, key, descriptor);\n\t\t\t}\n\t\t}\n\t} else {\n\t\t// `Reflect.ownKeys()` is required to retrieve symbol properties\n\t\tfor (const key of Reflect.ownKeys(object)) {\n\t\t\tconst descriptor = Object.getOwnPropertyDescriptor(object, key);\n\t\t\tif (descriptor.enumerable) {\n\t\t\t\tconst value = object[key];\n\t\t\t\tif (predicate(key, value, object)) {\n\t\t\t\t\tObject.defineProperty(result, key, descriptor);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn result;\n}\n\nexport function excludeKeys(object, predicate) {\n\tif (Array.isArray(predicate)) {\n\t\tconst set = new Set(predicate);\n\t\treturn includeKeys(object, key => !set.has(key));\n\t}\n\n\treturn includeKeys(object, (key, value, object) => !predicate(key, value, object));\n}\n","import decodeComponent from 'decode-uri-component';\nimport splitOnFirst from 'split-on-first';\nimport {includeKeys} from 'filter-obj';\n\nconst isNullOrUndefined = value => value === null || value === undefined;\n\n// eslint-disable-next-line unicorn/prefer-code-point\nconst strictUriEncode = string => encodeURIComponent(string).replace(/[!'()*]/g, x => `%${x.charCodeAt(0).toString(16).toUpperCase()}`);\n\nconst encodeFragmentIdentifier = Symbol('encodeFragmentIdentifier');\n\nfunction encoderForArrayFormat(options) {\n\tswitch (options.arrayFormat) {\n\t\tcase 'index': {\n\t\t\treturn key => (result, value) => {\n\t\t\t\tconst index = result.length;\n\n\t\t\t\tif (\n\t\t\t\t\tvalue === undefined\n\t\t\t\t\t|| (options.skipNull && value === null)\n\t\t\t\t\t|| (options.skipEmptyString && value === '')\n\t\t\t\t) {\n\t\t\t\t\treturn result;\n\t\t\t\t}\n\n\t\t\t\tif (value === null) {\n\t\t\t\t\treturn [\n\t\t\t\t\t\t...result, [encode(key, options), '[', index, ']'].join(''),\n\t\t\t\t\t];\n\t\t\t\t}\n\n\t\t\t\treturn [\n\t\t\t\t\t...result,\n\t\t\t\t\t[encode(key, options), '[', encode(index, options), ']=', encode(value, options)].join(''),\n\t\t\t\t];\n\t\t\t};\n\t\t}\n\n\t\tcase 'bracket': {\n\t\t\treturn key => (result, value) => {\n\t\t\t\tif (\n\t\t\t\t\tvalue === undefined\n\t\t\t\t\t|| (options.skipNull && value === null)\n\t\t\t\t\t|| (options.skipEmptyString && value === '')\n\t\t\t\t) {\n\t\t\t\t\treturn result;\n\t\t\t\t}\n\n\t\t\t\tif (value === null) {\n\t\t\t\t\treturn [\n\t\t\t\t\t\t...result,\n\t\t\t\t\t\t[encode(key, options), '[]'].join(''),\n\t\t\t\t\t];\n\t\t\t\t}\n\n\t\t\t\treturn [\n\t\t\t\t\t...result,\n\t\t\t\t\t[encode(key, options), '[]=', encode(value, options)].join(''),\n\t\t\t\t];\n\t\t\t};\n\t\t}\n\n\t\tcase 'colon-list-separator': {\n\t\t\treturn key => (result, value) => {\n\t\t\t\tif (\n\t\t\t\t\tvalue === undefined\n\t\t\t\t\t|| (options.skipNull && value === null)\n\t\t\t\t\t|| (options.skipEmptyString && value === '')\n\t\t\t\t) {\n\t\t\t\t\treturn result;\n\t\t\t\t}\n\n\t\t\t\tif (value === null) {\n\t\t\t\t\treturn [\n\t\t\t\t\t\t...result,\n\t\t\t\t\t\t[encode(key, options), ':list='].join(''),\n\t\t\t\t\t];\n\t\t\t\t}\n\n\t\t\t\treturn [\n\t\t\t\t\t...result,\n\t\t\t\t\t[encode(key, options), ':list=', encode(value, options)].join(''),\n\t\t\t\t];\n\t\t\t};\n\t\t}\n\n\t\tcase 'comma':\n\t\tcase 'separator':\n\t\tcase 'bracket-separator': {\n\t\t\tconst keyValueSep = options.arrayFormat === 'bracket-separator'\n\t\t\t\t? '[]='\n\t\t\t\t: '=';\n\n\t\t\treturn key => (result, value) => {\n\t\t\t\tif (\n\t\t\t\t\tvalue === undefined\n\t\t\t\t\t|| (options.skipNull && value === null)\n\t\t\t\t\t|| (options.skipEmptyString && value === '')\n\t\t\t\t) {\n\t\t\t\t\treturn result;\n\t\t\t\t}\n\n\t\t\t\t// Translate null to an empty string so that it doesn't serialize as 'null'\n\t\t\t\tvalue = value === null ? '' : value;\n\n\t\t\t\tif (result.length === 0) {\n\t\t\t\t\treturn [[encode(key, options), keyValueSep, encode(value, options)].join('')];\n\t\t\t\t}\n\n\t\t\t\treturn [[result, encode(value, options)].join(options.arrayFormatSeparator)];\n\t\t\t};\n\t\t}\n\n\t\tdefault: {\n\t\t\treturn key => (result, value) => {\n\t\t\t\tif (\n\t\t\t\t\tvalue === undefined\n\t\t\t\t\t|| (options.skipNull && value === null)\n\t\t\t\t\t|| (options.skipEmptyString && value === '')\n\t\t\t\t) {\n\t\t\t\t\treturn result;\n\t\t\t\t}\n\n\t\t\t\tif (value === null) {\n\t\t\t\t\treturn [\n\t\t\t\t\t\t...result,\n\t\t\t\t\t\tencode(key, options),\n\t\t\t\t\t];\n\t\t\t\t}\n\n\t\t\t\treturn [\n\t\t\t\t\t...result,\n\t\t\t\t\t[encode(key, options), '=', encode(value, options)].join(''),\n\t\t\t\t];\n\t\t\t};\n\t\t}\n\t}\n}\n\nfunction parserForArrayFormat(options) {\n\tlet result;\n\n\tswitch (options.arrayFormat) {\n\t\tcase 'index': {\n\t\t\treturn (key, value, accumulator) => {\n\t\t\t\tresult = /\\[(\\d*)]$/.exec(key);\n\n\t\t\t\tkey = key.replace(/\\[\\d*]$/, '');\n\n\t\t\t\tif (!result) {\n\t\t\t\t\taccumulator[key] = value;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (accumulator[key] === undefined) {\n\t\t\t\t\taccumulator[key] = {};\n\t\t\t\t}\n\n\t\t\t\taccumulator[key][result[1]] = value;\n\t\t\t};\n\t\t}\n\n\t\tcase 'bracket': {\n\t\t\treturn (key, value, accumulator) => {\n\t\t\t\tresult = /(\\[])$/.exec(key);\n\t\t\t\tkey = key.replace(/\\[]$/, '');\n\n\t\t\t\tif (!result) {\n\t\t\t\t\taccumulator[key] = value;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (accumulator[key] === undefined) {\n\t\t\t\t\taccumulator[key] = [value];\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\taccumulator[key] = [...accumulator[key], value];\n\t\t\t};\n\t\t}\n\n\t\tcase 'colon-list-separator': {\n\t\t\treturn (key, value, accumulator) => {\n\t\t\t\tresult = /(:list)$/.exec(key);\n\t\t\t\tkey = key.replace(/:list$/, '');\n\n\t\t\t\tif (!result) {\n\t\t\t\t\taccumulator[key] = value;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (accumulator[key] === undefined) {\n\t\t\t\t\taccumulator[key] = [value];\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\taccumulator[key] = [...accumulator[key], value];\n\t\t\t};\n\t\t}\n\n\t\tcase 'comma':\n\t\tcase 'separator': {\n\t\t\treturn (key, value, accumulator) => {\n\t\t\t\tconst isArray = typeof value === 'string' && value.includes(options.arrayFormatSeparator);\n\t\t\t\tconst isEncodedArray = (typeof value === 'string' && !isArray && decode(value, options).includes(options.arrayFormatSeparator));\n\t\t\t\tvalue = isEncodedArray ? decode(value, options) : value;\n\t\t\t\tconst newValue = isArray || isEncodedArray ? value.split(options.arrayFormatSeparator).map(item => decode(item, options)) : (value === null ? value : decode(value, options));\n\t\t\t\taccumulator[key] = newValue;\n\t\t\t};\n\t\t}\n\n\t\tcase 'bracket-separator': {\n\t\t\treturn (key, value, accumulator) => {\n\t\t\t\tconst isArray = /(\\[])$/.test(key);\n\t\t\t\tkey = key.replace(/\\[]$/, '');\n\n\t\t\t\tif (!isArray) {\n\t\t\t\t\taccumulator[key] = value ? decode(value, options) : value;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst arrayValue = value === null\n\t\t\t\t\t? []\n\t\t\t\t\t: value.split(options.arrayFormatSeparator).map(item => decode(item, options));\n\n\t\t\t\tif (accumulator[key] === undefined) {\n\t\t\t\t\taccumulator[key] = arrayValue;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\taccumulator[key] = [...accumulator[key], ...arrayValue];\n\t\t\t};\n\t\t}\n\n\t\tdefault: {\n\t\t\treturn (key, value, accumulator) => {\n\t\t\t\tif (accumulator[key] === undefined) {\n\t\t\t\t\taccumulator[key] = value;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\taccumulator[key] = [...[accumulator[key]].flat(), value];\n\t\t\t};\n\t\t}\n\t}\n}\n\nfunction validateArrayFormatSeparator(value) {\n\tif (typeof value !== 'string' || value.length !== 1) {\n\t\tthrow new TypeError('arrayFormatSeparator must be single character string');\n\t}\n}\n\nfunction encode(value, options) {\n\tif (options.encode) {\n\t\treturn options.strict ? strictUriEncode(value) : encodeURIComponent(value);\n\t}\n\n\treturn value;\n}\n\nfunction decode(value, options) {\n\tif (options.decode) {\n\t\treturn decodeComponent(value);\n\t}\n\n\treturn value;\n}\n\nfunction keysSorter(input) {\n\tif (Array.isArray(input)) {\n\t\treturn input.sort();\n\t}\n\n\tif (typeof input === 'object') {\n\t\treturn keysSorter(Object.keys(input))\n\t\t\t.sort((a, b) => Number(a) - Number(b))\n\t\t\t.map(key => input[key]);\n\t}\n\n\treturn input;\n}\n\nfunction removeHash(input) {\n\tconst hashStart = input.indexOf('#');\n\tif (hashStart !== -1) {\n\t\tinput = input.slice(0, hashStart);\n\t}\n\n\treturn input;\n}\n\nfunction getHash(url) {\n\tlet hash = '';\n\tconst hashStart = url.indexOf('#');\n\tif (hashStart !== -1) {\n\t\thash = url.slice(hashStart);\n\t}\n\n\treturn hash;\n}\n\nfunction parseValue(value, options) {\n\tif (options.parseNumbers && !Number.isNaN(Number(value)) && (typeof value === 'string' && value.trim() !== '')) {\n\t\tvalue = Number(value);\n\t} else if (options.parseBooleans && value !== null && (value.toLowerCase() === 'true' || value.toLowerCase() === 'false')) {\n\t\tvalue = value.toLowerCase() === 'true';\n\t}\n\n\treturn value;\n}\n\nexport function extract(input) {\n\tinput = removeHash(input);\n\tconst queryStart = input.indexOf('?');\n\tif (queryStart === -1) {\n\t\treturn '';\n\t}\n\n\treturn input.slice(queryStart + 1);\n}\n\nexport function parse(query, options) {\n\toptions = {\n\t\tdecode: true,\n\t\tsort: true,\n\t\tarrayFormat: 'none',\n\t\tarrayFormatSeparator: ',',\n\t\tparseNumbers: false,\n\t\tparseBooleans: false,\n\t\t...options,\n\t};\n\n\tvalidateArrayFormatSeparator(options.arrayFormatSeparator);\n\n\tconst formatter = parserForArrayFormat(options);\n\n\t// Create an object with no prototype\n\tconst returnValue = Object.create(null);\n\n\tif (typeof query !== 'string') {\n\t\treturn returnValue;\n\t}\n\n\tquery = query.trim().replace(/^[?#&]/, '');\n\n\tif (!query) {\n\t\treturn returnValue;\n\t}\n\n\tfor (const parameter of query.split('&')) {\n\t\tif (parameter === '') {\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst parameter_ = options.decode ? parameter.replace(/\\+/g, ' ') : parameter;\n\n\t\tlet [key, value] = splitOnFirst(parameter_, '=');\n\n\t\tif (key === undefined) {\n\t\t\tkey = parameter_;\n\t\t}\n\n\t\t// Missing `=` should be `null`:\n\t\t// http://w3.org/TR/2012/WD-url-20120524/#collect-url-parameters\n\t\tvalue = value === undefined ? null : (['comma', 'separator', 'bracket-separator'].includes(options.arrayFormat) ? value : decode(value, options));\n\t\tformatter(decode(key, options), value, returnValue);\n\t}\n\n\tfor (const [key, value] of Object.entries(returnValue)) {\n\t\tif (typeof value === 'object' && value !== null) {\n\t\t\tfor (const [key2, value2] of Object.entries(value)) {\n\t\t\t\tvalue[key2] = parseValue(value2, options);\n\t\t\t}\n\t\t} else {\n\t\t\treturnValue[key] = parseValue(value, options);\n\t\t}\n\t}\n\n\tif (options.sort === false) {\n\t\treturn returnValue;\n\t}\n\n\t// TODO: Remove the use of `reduce`.\n\t// eslint-disable-next-line unicorn/no-array-reduce\n\treturn (options.sort === true ? Object.keys(returnValue).sort() : Object.keys(returnValue).sort(options.sort)).reduce((result, key) => {\n\t\tconst value = returnValue[key];\n\t\tif (Boolean(value) && typeof value === 'object' && !Array.isArray(value)) {\n\t\t\t// Sort object keys, not values\n\t\t\tresult[key] = keysSorter(value);\n\t\t} else {\n\t\t\tresult[key] = value;\n\t\t}\n\n\t\treturn result;\n\t}, Object.create(null));\n}\n\nexport function stringify(object, options) {\n\tif (!object) {\n\t\treturn '';\n\t}\n\n\toptions = {encode: true,\n\t\tstrict: true,\n\t\tarrayFormat: 'none',\n\t\tarrayFormatSeparator: ',', ...options};\n\n\tvalidateArrayFormatSeparator(options.arrayFormatSeparator);\n\n\tconst shouldFilter = key => (\n\t\t(options.skipNull && isNullOrUndefined(object[key]))\n\t\t|| (options.skipEmptyString && object[key] === '')\n\t);\n\n\tconst formatter = encoderForArrayFormat(options);\n\n\tconst objectCopy = {};\n\n\tfor (const [key, value] of Object.entries(object)) {\n\t\tif (!shouldFilter(key)) {\n\t\t\tobjectCopy[key] = value;\n\t\t}\n\t}\n\n\tconst keys = Object.keys(objectCopy);\n\n\tif (options.sort !== false) {\n\t\tkeys.sort(options.sort);\n\t}\n\n\treturn keys.map(key => {\n\t\tconst value = object[key];\n\n\t\tif (value === undefined) {\n\t\t\treturn '';\n\t\t}\n\n\t\tif (value === null) {\n\t\t\treturn encode(key, options);\n\t\t}\n\n\t\tif (Array.isArray(value)) {\n\t\t\tif (value.length === 0 && options.arrayFormat === 'bracket-separator') {\n\t\t\t\treturn encode(key, options) + '[]';\n\t\t\t}\n\n\t\t\treturn value\n\t\t\t\t.reduce(formatter(key), [])\n\t\t\t\t.join('&');\n\t\t}\n\n\t\treturn encode(key, options) + '=' + encode(value, options);\n\t}).filter(x => x.length > 0).join('&');\n}\n\nexport function parseUrl(url, options) {\n\toptions = {\n\t\tdecode: true,\n\t\t...options,\n\t};\n\n\tlet [url_, hash] = splitOnFirst(url, '#');\n\n\tif (url_ === undefined) {\n\t\turl_ = url;\n\t}\n\n\treturn {\n\t\turl: url_?.split('?')?.[0] ?? '',\n\t\tquery: parse(extract(url), options),\n\t\t...(options && options.parseFragmentIdentifier && hash ? {fragmentIdentifier: decode(hash, options)} : {}),\n\t};\n}\n\nexport function stringifyUrl(object, options) {\n\toptions = {\n\t\tencode: true,\n\t\tstrict: true,\n\t\t[encodeFragmentIdentifier]: true,\n\t\t...options,\n\t};\n\n\tconst url = removeHash(object.url).split('?')[0] || '';\n\tconst queryFromUrl = extract(object.url);\n\n\tconst query = {\n\t\t...parse(queryFromUrl, {sort: false}),\n\t\t...object.query,\n\t};\n\n\tlet queryString = stringify(query, options);\n\tif (queryString) {\n\t\tqueryString = `?${queryString}`;\n\t}\n\n\tlet hash = getHash(object.url);\n\tif (object.fragmentIdentifier) {\n\t\tconst urlObjectForFragmentEncode = new URL(url);\n\t\turlObjectForFragmentEncode.hash = object.fragmentIdentifier;\n\t\thash = options[encodeFragmentIdentifier] ? urlObjectForFragmentEncode.hash : `#${object.fragmentIdentifier}`;\n\t}\n\n\treturn `${url}${queryString}${hash}`;\n}\n\nexport function pick(input, filter, options) {\n\toptions = {\n\t\tparseFragmentIdentifier: true,\n\t\t[encodeFragmentIdentifier]: false,\n\t\t...options,\n\t};\n\n\tconst {url, query, fragmentIdentifier} = parseUrl(input, options);\n\n\treturn stringifyUrl({\n\t\turl,\n\t\tquery: includeKeys(query, filter),\n\t\tfragmentIdentifier,\n\t}, options);\n}\n\nexport function exclude(input, filter, options) {\n\tconst exclusionFilter = Array.isArray(filter) ? key => !filter.includes(key) : (key, value) => !filter(key, value);\n\n\treturn pick(input, exclusionFilter, options);\n}\n","import * as queryString from './base.js';\n\nexport default queryString;\n","let i18nInstance;\nexport function setI18n(instance) {\n  i18nInstance = instance;\n}\nexport function getI18n() {\n  return i18nInstance;\n}","export default function _extends() {\n  _extends = Object.assign ? Object.assign.bind() : function (target) {\n    for (var i = 1; i < arguments.length; i++) {\n      var source = arguments[i];\n      for (var key in source) {\n        if (Object.prototype.hasOwnProperty.call(source, key)) {\n          target[key] = source[key];\n        }\n      }\n    }\n    return target;\n  };\n  return _extends.apply(this, arguments);\n}","import e from\"void-elements\";var t=/\\s([^'\"/\\s><]+?)[\\s/>]|([^\\s=]+)=\\s?(\".*?\"|'.*?')/g;function n(n){var r={type:\"tag\",name:\"\",voidElement:!1,attrs:{},children:[]},i=n.match(/<\\/?([^\\s]+?)[/\\s>]/);if(i&&(r.name=i[1],(e[i[1]]||\"/\"===n.charAt(n.length-2))&&(r.voidElement=!0),r.name.startsWith(\"!--\"))){var s=n.indexOf(\"--\\x3e\");return{type:\"comment\",comment:-1!==s?n.slice(4,s):\"\"}}for(var a=new RegExp(t),c=null;null!==(c=a.exec(n));)if(c[0].trim())if(c[1]){var o=c[1].trim(),l=[o,\"\"];o.indexOf(\"=\")>-1&&(l=o.split(\"=\")),r.attrs[l[0]]=l[1],a.lastIndex--}else c[2]&&(r.attrs[c[2]]=c[3].trim().substring(1,c[3].length-1));return r}var r=/<[a-zA-Z0-9\\-\\!\\/](?:\"[^\"]*\"|'[^']*'|[^'\">])*>/g,i=/^\\s*$/,s=Object.create(null);function a(e,t){switch(t.type){case\"text\":return e+t.content;case\"tag\":return e+=\"<\"+t.name+(t.attrs?function(e){var t=[];for(var n in e)t.push(n+'=\"'+e[n]+'\"');return t.length?\" \"+t.join(\" \"):\"\"}(t.attrs):\"\")+(t.voidElement?\"/>\":\">\"),t.voidElement?e:e+t.children.reduce(a,\"\")+\"</\"+t.name+\">\";case\"comment\":return e+\"\\x3c!--\"+t.comment+\"--\\x3e\"}}var c={parse:function(e,t){t||(t={}),t.components||(t.components=s);var a,c=[],o=[],l=-1,m=!1;if(0!==e.indexOf(\"<\")){var u=e.indexOf(\"<\");c.push({type:\"text\",content:-1===u?e:e.substring(0,u)})}return e.replace(r,function(r,s){if(m){if(r!==\"</\"+a.name+\">\")return;m=!1}var u,f=\"/\"!==r.charAt(1),h=r.startsWith(\"\\x3c!--\"),p=s+r.length,d=e.charAt(p);if(h){var v=n(r);return l<0?(c.push(v),c):((u=o[l]).children.push(v),c)}if(f&&(l++,\"tag\"===(a=n(r)).type&&t.components[a.name]&&(a.type=\"component\",m=!0),a.voidElement||m||!d||\"<\"===d||a.children.push({type:\"text\",content:e.slice(p,e.indexOf(\"<\",p))}),0===l&&c.push(a),(u=o[l-1])&&u.children.push(a),o[l]=a),(!f||a.voidElement)&&(l>-1&&(a.voidElement||a.name===r.slice(2,-1))&&(l--,a=-1===l?c:o[l]),!m&&\"<\"!==d&&d)){u=-1===l?c:o[l].children;var x=e.indexOf(\"<\",p),g=e.slice(p,-1===x?void 0:x);i.test(g)&&(g=\" \"),(x>-1&&l+u.length>=0||\" \"!==g)&&u.push({type:\"text\",content:g})}}),c},stringify:function(e){return e.reduce(function(e,t){return e+a(\"\",t)},\"\")}};export default c;\n//# sourceMappingURL=html-parse-stringify.module.js.map\n","export function warn() {\n  if (console && console.warn) {\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n    if (typeof args[0] === 'string') args[0] = `react-i18next:: ${args[0]}`;\n    console.warn(...args);\n  }\n}\nconst alreadyWarned = {};\nexport function warnOnce() {\n  for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n    args[_key2] = arguments[_key2];\n  }\n  if (typeof args[0] === 'string' && alreadyWarned[args[0]]) return;\n  if (typeof args[0] === 'string') alreadyWarned[args[0]] = new Date();\n  warn(...args);\n}\nconst loadedClb = (i18n, cb) => () => {\n  if (i18n.isInitialized) {\n    cb();\n  } else {\n    const initialized = () => {\n      setTimeout(() => {\n        i18n.off('initialized', initialized);\n      }, 0);\n      cb();\n    };\n    i18n.on('initialized', initialized);\n  }\n};\nexport function loadNamespaces(i18n, ns, cb) {\n  i18n.loadNamespaces(ns, loadedClb(i18n, cb));\n}\nexport function loadLanguages(i18n, lng, ns, cb) {\n  if (typeof ns === 'string') ns = [ns];\n  ns.forEach(n => {\n    if (i18n.options.ns.indexOf(n) < 0) i18n.options.ns.push(n);\n  });\n  i18n.loadLanguages(lng, loadedClb(i18n, cb));\n}\nfunction oldI18nextHasLoadedNamespace(ns, i18n) {\n  let options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n  const lng = i18n.languages[0];\n  const fallbackLng = i18n.options ? i18n.options.fallbackLng : false;\n  const lastLng = i18n.languages[i18n.languages.length - 1];\n  if (lng.toLowerCase() === 'cimode') return true;\n  const loadNotPending = (l, n) => {\n    const loadState = i18n.services.backendConnector.state[`${l}|${n}`];\n    return loadState === -1 || loadState === 2;\n  };\n  if (options.bindI18n && options.bindI18n.indexOf('languageChanging') > -1 && i18n.services.backendConnector.backend && i18n.isLanguageChangingTo && !loadNotPending(i18n.isLanguageChangingTo, ns)) return false;\n  if (i18n.hasResourceBundle(lng, ns)) return true;\n  if (!i18n.services.backendConnector.backend || i18n.options.resources && !i18n.options.partialBundledLanguages) return true;\n  if (loadNotPending(lng, ns) && (!fallbackLng || loadNotPending(lastLng, ns))) return true;\n  return false;\n}\nexport function hasLoadedNamespace(ns, i18n) {\n  let options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n  if (!i18n.languages || !i18n.languages.length) {\n    warnOnce('i18n.languages were undefined or empty', i18n.languages);\n    return true;\n  }\n  const isNewerI18next = i18n.options.ignoreJSONStructure !== undefined;\n  if (!isNewerI18next) {\n    return oldI18nextHasLoadedNamespace(ns, i18n, options);\n  }\n  return i18n.hasLoadedNamespace(ns, {\n    lng: options.lng,\n    precheck: (i18nInstance, loadNotPending) => {\n      if (options.bindI18n && options.bindI18n.indexOf('languageChanging') > -1 && i18nInstance.services.backendConnector.backend && i18nInstance.isLanguageChangingTo && !loadNotPending(i18nInstance.isLanguageChangingTo, ns)) return false;\n    }\n  });\n}\nexport function getDisplayName(Component) {\n  return Component.displayName || Component.name || (typeof Component === 'string' && Component.length > 0 ? Component : 'Unknown');\n}","const matchHtmlEntity = /&(?:amp|#38|lt|#60|gt|#62|apos|#39|quot|#34|nbsp|#160|copy|#169|reg|#174|hellip|#8230|#x2F|#47);/g;\nconst htmlEntities = {\n  '&amp;': '&',\n  '&#38;': '&',\n  '&lt;': '<',\n  '&#60;': '<',\n  '&gt;': '>',\n  '&#62;': '>',\n  '&apos;': \"'\",\n  '&#39;': \"'\",\n  '&quot;': '\"',\n  '&#34;': '\"',\n  '&nbsp;': ' ',\n  '&#160;': ' ',\n  '&copy;': '©',\n  '&#169;': '©',\n  '&reg;': '®',\n  '&#174;': '®',\n  '&hellip;': '…',\n  '&#8230;': '…',\n  '&#x2F;': '/',\n  '&#47;': '/'\n};\nconst unescapeHtmlEntity = m => htmlEntities[m];\nexport const unescape = text => text.replace(matchHtmlEntity, unescapeHtmlEntity);","import { unescape } from './unescape.js';\nlet defaultOptions = {\n  bindI18n: 'languageChanged',\n  bindI18nStore: '',\n  transEmptyNodeValue: '',\n  transSupportBasicHtmlNodes: true,\n  transWrapTextNodes: '',\n  transKeepBasicHtmlNodesFor: ['br', 'strong', 'i', 'p'],\n  useSuspense: true,\n  unescape\n};\nexport function setDefaults() {\n  let options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n  defaultOptions = {\n    ...defaultOptions,\n    ...options\n  };\n}\nexport function getDefaults() {\n  return defaultOptions;\n}","import _extends from \"@babel/runtime/helpers/extends\";\nimport React, { isValidElement, cloneElement, createElement, Children } from 'react';\nimport HTML from 'html-parse-stringify';\nimport { warn, warnOnce } from './utils.js';\nimport { getDefaults } from './defaults.js';\nimport { getI18n } from './i18nInstance.js';\nfunction hasChildren(node, checkLength) {\n  if (!node) return false;\n  const base = node.props ? node.props.children : node.children;\n  if (checkLength) return base.length > 0;\n  return !!base;\n}\nfunction getChildren(node) {\n  if (!node) return [];\n  const children = node.props ? node.props.children : node.children;\n  return node.props && node.props.i18nIsDynamicList ? getAsArray(children) : children;\n}\nfunction hasValidReactChildren(children) {\n  if (Object.prototype.toString.call(children) !== '[object Array]') return false;\n  return children.every(child => isValidElement(child));\n}\nfunction getAsArray(data) {\n  return Array.isArray(data) ? data : [data];\n}\nfunction mergeProps(source, target) {\n  const newTarget = {\n    ...target\n  };\n  newTarget.props = Object.assign(source.props, target.props);\n  return newTarget;\n}\nexport function nodesToString(children, i18nOptions) {\n  if (!children) return '';\n  let stringNode = '';\n  const childrenArray = getAsArray(children);\n  const keepArray = i18nOptions.transSupportBasicHtmlNodes && i18nOptions.transKeepBasicHtmlNodesFor ? i18nOptions.transKeepBasicHtmlNodesFor : [];\n  childrenArray.forEach((child, childIndex) => {\n    if (typeof child === 'string') {\n      stringNode += `${child}`;\n    } else if (isValidElement(child)) {\n      const childPropsCount = Object.keys(child.props).length;\n      const shouldKeepChild = keepArray.indexOf(child.type) > -1;\n      const childChildren = child.props.children;\n      if (!childChildren && shouldKeepChild && childPropsCount === 0) {\n        stringNode += `<${child.type}/>`;\n      } else if (!childChildren && (!shouldKeepChild || childPropsCount !== 0)) {\n        stringNode += `<${childIndex}></${childIndex}>`;\n      } else if (child.props.i18nIsDynamicList) {\n        stringNode += `<${childIndex}></${childIndex}>`;\n      } else if (shouldKeepChild && childPropsCount === 1 && typeof childChildren === 'string') {\n        stringNode += `<${child.type}>${childChildren}</${child.type}>`;\n      } else {\n        const content = nodesToString(childChildren, i18nOptions);\n        stringNode += `<${childIndex}>${content}</${childIndex}>`;\n      }\n    } else if (child === null) {\n      warn(`Trans: the passed in value is invalid - seems you passed in a null child.`);\n    } else if (typeof child === 'object') {\n      const {\n        format,\n        ...clone\n      } = child;\n      const keys = Object.keys(clone);\n      if (keys.length === 1) {\n        const value = format ? `${keys[0]}, ${format}` : keys[0];\n        stringNode += `{{${value}}}`;\n      } else {\n        warn(`react-i18next: the passed in object contained more than one variable - the object should look like {{ value, format }} where format is optional.`, child);\n      }\n    } else {\n      warn(`Trans: the passed in value is invalid - seems you passed in a variable like {number} - please pass in variables for interpolation as full objects like {{number}}.`, child);\n    }\n  });\n  return stringNode;\n}\nfunction renderNodes(children, targetString, i18n, i18nOptions, combinedTOpts, shouldUnescape) {\n  if (targetString === '') return [];\n  const keepArray = i18nOptions.transKeepBasicHtmlNodesFor || [];\n  const emptyChildrenButNeedsHandling = targetString && new RegExp(keepArray.map(keep => `<${keep}`).join('|')).test(targetString);\n  if (!children && !emptyChildrenButNeedsHandling && !shouldUnescape) return [targetString];\n  const data = {};\n  function getData(childs) {\n    const childrenArray = getAsArray(childs);\n    childrenArray.forEach(child => {\n      if (typeof child === 'string') return;\n      if (hasChildren(child)) getData(getChildren(child));else if (typeof child === 'object' && !isValidElement(child)) Object.assign(data, child);\n    });\n  }\n  getData(children);\n  const ast = HTML.parse(`<0>${targetString}</0>`);\n  const opts = {\n    ...data,\n    ...combinedTOpts\n  };\n  function renderInner(child, node, rootReactNode) {\n    const childs = getChildren(child);\n    const mappedChildren = mapAST(childs, node.children, rootReactNode);\n    return hasValidReactChildren(childs) && mappedChildren.length === 0 || child.props && child.props.i18nIsDynamicList ? childs : mappedChildren;\n  }\n  function pushTranslatedJSX(child, inner, mem, i, isVoid) {\n    if (child.dummy) {\n      child.children = inner;\n      mem.push(cloneElement(child, {\n        key: i\n      }, isVoid ? undefined : inner));\n    } else {\n      mem.push(...Children.map([child], c => {\n        const props = {\n          ...c.props\n        };\n        delete props.i18nIsDynamicList;\n        return React.createElement(c.type, _extends({}, props, {\n          key: i,\n          ref: c.ref\n        }, isVoid ? {} : {\n          children: inner\n        }));\n      }));\n    }\n  }\n  function mapAST(reactNode, astNode, rootReactNode) {\n    const reactNodes = getAsArray(reactNode);\n    const astNodes = getAsArray(astNode);\n    return astNodes.reduce((mem, node, i) => {\n      const translationContent = node.children && node.children[0] && node.children[0].content && i18n.services.interpolator.interpolate(node.children[0].content, opts, i18n.language);\n      if (node.type === 'tag') {\n        let tmp = reactNodes[parseInt(node.name, 10)];\n        if (rootReactNode.length === 1 && !tmp) tmp = rootReactNode[0][node.name];\n        if (!tmp) tmp = {};\n        const child = Object.keys(node.attrs).length !== 0 ? mergeProps({\n          props: node.attrs\n        }, tmp) : tmp;\n        const isElement = isValidElement(child);\n        const isValidTranslationWithChildren = isElement && hasChildren(node, true) && !node.voidElement;\n        const isEmptyTransWithHTML = emptyChildrenButNeedsHandling && typeof child === 'object' && child.dummy && !isElement;\n        const isKnownComponent = typeof children === 'object' && children !== null && Object.hasOwnProperty.call(children, node.name);\n        if (typeof child === 'string') {\n          const value = i18n.services.interpolator.interpolate(child, opts, i18n.language);\n          mem.push(value);\n        } else if (hasChildren(child) || isValidTranslationWithChildren) {\n          const inner = renderInner(child, node, rootReactNode);\n          pushTranslatedJSX(child, inner, mem, i);\n        } else if (isEmptyTransWithHTML) {\n          const inner = mapAST(reactNodes, node.children, rootReactNode);\n          pushTranslatedJSX(child, inner, mem, i);\n        } else if (Number.isNaN(parseFloat(node.name))) {\n          if (isKnownComponent) {\n            const inner = renderInner(child, node, rootReactNode);\n            pushTranslatedJSX(child, inner, mem, i, node.voidElement);\n          } else if (i18nOptions.transSupportBasicHtmlNodes && keepArray.indexOf(node.name) > -1) {\n            if (node.voidElement) {\n              mem.push(createElement(node.name, {\n                key: `${node.name}-${i}`\n              }));\n            } else {\n              const inner = mapAST(reactNodes, node.children, rootReactNode);\n              mem.push(createElement(node.name, {\n                key: `${node.name}-${i}`\n              }, inner));\n            }\n          } else if (node.voidElement) {\n            mem.push(`<${node.name} />`);\n          } else {\n            const inner = mapAST(reactNodes, node.children, rootReactNode);\n            mem.push(`<${node.name}>${inner}</${node.name}>`);\n          }\n        } else if (typeof child === 'object' && !isElement) {\n          const content = node.children[0] ? translationContent : null;\n          if (content) mem.push(content);\n        } else {\n          pushTranslatedJSX(child, translationContent, mem, i, node.children.length !== 1 || !translationContent);\n        }\n      } else if (node.type === 'text') {\n        const wrapTextNodes = i18nOptions.transWrapTextNodes;\n        const content = shouldUnescape ? i18nOptions.unescape(i18n.services.interpolator.interpolate(node.content, opts, i18n.language)) : i18n.services.interpolator.interpolate(node.content, opts, i18n.language);\n        if (wrapTextNodes) {\n          mem.push(createElement(wrapTextNodes, {\n            key: `${node.name}-${i}`\n          }, content));\n        } else {\n          mem.push(content);\n        }\n      }\n      return mem;\n    }, []);\n  }\n  const result = mapAST([{\n    dummy: true,\n    children: children || []\n  }], ast, getAsArray(children || []));\n  return getChildren(result[0]);\n}\nexport function Trans(_ref) {\n  let {\n    children,\n    count,\n    parent,\n    i18nKey,\n    context,\n    tOptions = {},\n    values,\n    defaults,\n    components,\n    ns,\n    i18n: i18nFromProps,\n    t: tFromProps,\n    shouldUnescape,\n    ...additionalProps\n  } = _ref;\n  const i18n = i18nFromProps || getI18n();\n  if (!i18n) {\n    warnOnce('You will need to pass in an i18next instance by using i18nextReactModule');\n    return children;\n  }\n  const t = tFromProps || i18n.t.bind(i18n) || (k => k);\n  if (context) tOptions.context = context;\n  const reactI18nextOptions = {\n    ...getDefaults(),\n    ...(i18n.options && i18n.options.react)\n  };\n  let namespaces = ns || t.ns || i18n.options && i18n.options.defaultNS;\n  namespaces = typeof namespaces === 'string' ? [namespaces] : namespaces || ['translation'];\n  const nodeAsString = nodesToString(children, reactI18nextOptions);\n  const defaultValue = defaults || nodeAsString || reactI18nextOptions.transEmptyNodeValue || i18nKey;\n  const {\n    hashTransKey\n  } = reactI18nextOptions;\n  const key = i18nKey || (hashTransKey ? hashTransKey(nodeAsString || defaultValue) : nodeAsString || defaultValue);\n  if (i18n.options && i18n.options.interpolation && i18n.options.interpolation.defaultVariables) {\n    values = values && Object.keys(values).length > 0 ? {\n      ...values,\n      ...i18n.options.interpolation.defaultVariables\n    } : {\n      ...i18n.options.interpolation.defaultVariables\n    };\n  }\n  const interpolationOverride = values ? tOptions.interpolation : {\n    interpolation: {\n      ...tOptions.interpolation,\n      prefix: '#$?',\n      suffix: '?$#'\n    }\n  };\n  const combinedTOpts = {\n    ...tOptions,\n    count,\n    ...values,\n    ...interpolationOverride,\n    defaultValue,\n    ns: namespaces\n  };\n  const translation = key ? t(key, combinedTOpts) : defaultValue;\n  if (components) {\n    Object.keys(components).forEach(c => {\n      const comp = components[c];\n      if (typeof comp.type === 'function' || !comp.props || !comp.props.children || translation.indexOf(`${c}/>`) < 0 && translation.indexOf(`${c} />`) < 0) return;\n      function Componentized() {\n        return React.createElement(React.Fragment, null, comp);\n      }\n      components[c] = React.createElement(Componentized, null);\n    });\n  }\n  const content = renderNodes(components || children, translation, i18n, reactI18nextOptions, combinedTOpts, shouldUnescape);\n  const useAsParent = parent !== undefined ? parent : reactI18nextOptions.defaultTransParent;\n  return useAsParent ? createElement(useAsParent, additionalProps, content) : content;\n}","import { setDefaults } from './defaults.js';\nimport { setI18n } from './i18nInstance.js';\nexport const initReactI18next = {\n  type: '3rdParty',\n  init(instance) {\n    setDefaults(instance.options.react);\n    setI18n(instance);\n  }\n};","import { createContext } from 'react';\nimport { getDefaults, setDefaults } from './defaults.js';\nimport { getI18n, setI18n } from './i18nInstance.js';\nimport { initReactI18next } from './initReactI18next.js';\nexport { getDefaults, setDefaults, getI18n, setI18n, initReactI18next };\nexport const I18nContext = createContext();\nexport class ReportNamespaces {\n  constructor() {\n    this.usedNamespaces = {};\n  }\n  addUsedNamespaces(namespaces) {\n    namespaces.forEach(ns => {\n      if (!this.usedNamespaces[ns]) this.usedNamespaces[ns] = true;\n    });\n  }\n  getUsedNamespaces() {\n    return Object.keys(this.usedNamespaces);\n  }\n}\nexport function composeInitialProps(ForComponent) {\n  return ctx => new Promise(resolve => {\n    const i18nInitialProps = getInitialProps();\n    if (ForComponent.getInitialProps) {\n      ForComponent.getInitialProps(ctx).then(componentsInitialProps => {\n        resolve({\n          ...componentsInitialProps,\n          ...i18nInitialProps\n        });\n      });\n    } else {\n      resolve(i18nInitialProps);\n    }\n  });\n}\nexport function getInitialProps() {\n  const i18n = getI18n();\n  const namespaces = i18n.reportNamespaces ? i18n.reportNamespaces.getUsedNamespaces() : [];\n  const ret = {};\n  const initialI18nStore = {};\n  i18n.languages.forEach(l => {\n    initialI18nStore[l] = {};\n    namespaces.forEach(ns => {\n      initialI18nStore[l][ns] = i18n.getResourceBundle(l, ns) || {};\n    });\n  });\n  ret.initialI18nStore = initialI18nStore;\n  ret.initialLanguage = i18n.language;\n  return ret;\n}","import { useContext } from 'react';\nimport { nodesToString, Trans as TransWithoutContext } from './TransWithoutContext.js';\nimport { getI18n, I18nContext } from './context.js';\nexport { nodesToString };\nexport function Trans(_ref) {\n  let {\n    children,\n    count,\n    parent,\n    i18nKey,\n    context,\n    tOptions = {},\n    values,\n    defaults,\n    components,\n    ns,\n    i18n: i18nFromProps,\n    t: tFromProps,\n    shouldUnescape,\n    ...additionalProps\n  } = _ref;\n  const {\n    i18n: i18nFromContext,\n    defaultNS: defaultNSFromContext\n  } = useContext(I18nContext) || {};\n  const i18n = i18nFromProps || i18nFromContext || getI18n();\n  const t = tFromProps || i18n && i18n.t.bind(i18n);\n  return TransWithoutContext({\n    children,\n    count,\n    parent,\n    i18nKey,\n    context,\n    tOptions,\n    values,\n    defaults,\n    components,\n    ns: ns || t && t.ns || defaultNSFromContext || i18n && i18n.options && i18n.options.defaultNS,\n    i18n,\n    t: tFromProps,\n    shouldUnescape,\n    ...additionalProps\n  });\n}","import { useState, useEffect, useContext, useRef } from 'react';\nimport { getI18n, getDefaults, ReportNamespaces, I18nContext } from './context.js';\nimport { warnOnce, loadNamespaces, loadLanguages, hasLoadedNamespace } from './utils.js';\nconst usePrevious = (value, ignore) => {\n  const ref = useRef();\n  useEffect(() => {\n    ref.current = ignore ? ref.current : value;\n  }, [value, ignore]);\n  return ref.current;\n};\nexport function useTranslation(ns) {\n  let props = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n  const {\n    i18n: i18nFromProps\n  } = props;\n  const {\n    i18n: i18nFromContext,\n    defaultNS: defaultNSFromContext\n  } = useContext(I18nContext) || {};\n  const i18n = i18nFromProps || i18nFromContext || getI18n();\n  if (i18n && !i18n.reportNamespaces) i18n.reportNamespaces = new ReportNamespaces();\n  if (!i18n) {\n    warnOnce('You will need to pass in an i18next instance by using initReactI18next');\n    const notReadyT = (k, optsOrDefaultValue) => {\n      if (typeof optsOrDefaultValue === 'string') return optsOrDefaultValue;\n      if (optsOrDefaultValue && typeof optsOrDefaultValue === 'object' && typeof optsOrDefaultValue.defaultValue === 'string') return optsOrDefaultValue.defaultValue;\n      return Array.isArray(k) ? k[k.length - 1] : k;\n    };\n    const retNotReady = [notReadyT, {}, false];\n    retNotReady.t = notReadyT;\n    retNotReady.i18n = {};\n    retNotReady.ready = false;\n    return retNotReady;\n  }\n  if (i18n.options.react && i18n.options.react.wait !== undefined) warnOnce('It seems you are still using the old wait option, you may migrate to the new useSuspense behaviour.');\n  const i18nOptions = {\n    ...getDefaults(),\n    ...i18n.options.react,\n    ...props\n  };\n  const {\n    useSuspense,\n    keyPrefix\n  } = i18nOptions;\n  let namespaces = ns || defaultNSFromContext || i18n.options && i18n.options.defaultNS;\n  namespaces = typeof namespaces === 'string' ? [namespaces] : namespaces || ['translation'];\n  if (i18n.reportNamespaces.addUsedNamespaces) i18n.reportNamespaces.addUsedNamespaces(namespaces);\n  const ready = (i18n.isInitialized || i18n.initializedStoreOnce) && namespaces.every(n => hasLoadedNamespace(n, i18n, i18nOptions));\n  function getT() {\n    return i18n.getFixedT(props.lng || null, i18nOptions.nsMode === 'fallback' ? namespaces : namespaces[0], keyPrefix);\n  }\n  const [t, setT] = useState(getT);\n  let joinedNS = namespaces.join();\n  if (props.lng) joinedNS = `${props.lng}${joinedNS}`;\n  const previousJoinedNS = usePrevious(joinedNS);\n  const isMounted = useRef(true);\n  useEffect(() => {\n    const {\n      bindI18n,\n      bindI18nStore\n    } = i18nOptions;\n    isMounted.current = true;\n    if (!ready && !useSuspense) {\n      if (props.lng) {\n        loadLanguages(i18n, props.lng, namespaces, () => {\n          if (isMounted.current) setT(getT);\n        });\n      } else {\n        loadNamespaces(i18n, namespaces, () => {\n          if (isMounted.current) setT(getT);\n        });\n      }\n    }\n    if (ready && previousJoinedNS && previousJoinedNS !== joinedNS && isMounted.current) {\n      setT(getT);\n    }\n    function boundReset() {\n      if (isMounted.current) setT(getT);\n    }\n    if (bindI18n && i18n) i18n.on(bindI18n, boundReset);\n    if (bindI18nStore && i18n) i18n.store.on(bindI18nStore, boundReset);\n    return () => {\n      isMounted.current = false;\n      if (bindI18n && i18n) bindI18n.split(' ').forEach(e => i18n.off(e, boundReset));\n      if (bindI18nStore && i18n) bindI18nStore.split(' ').forEach(e => i18n.store.off(e, boundReset));\n    };\n  }, [i18n, joinedNS]);\n  const isInitial = useRef(true);\n  useEffect(() => {\n    if (isMounted.current && !isInitial.current) {\n      setT(getT);\n    }\n    isInitial.current = false;\n  }, [i18n, keyPrefix]);\n  const ret = [t, i18n, ready];\n  ret.t = t;\n  ret.i18n = i18n;\n  ret.ready = ready;\n  if (ready) return ret;\n  if (!ready && !useSuspense) return ret;\n  throw new Promise(resolve => {\n    if (props.lng) {\n      loadLanguages(i18n, props.lng, namespaces, () => resolve());\n    } else {\n      loadNamespaces(i18n, namespaces, () => resolve());\n    }\n  });\n}","import { createElement, forwardRef as forwardRefReact } from 'react';\nimport { useTranslation } from './useTranslation.js';\nimport { getDisplayName } from './utils.js';\nexport function withTranslation(ns) {\n  let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n  return function Extend(WrappedComponent) {\n    function I18nextWithTranslation(_ref) {\n      let {\n        forwardedRef,\n        ...rest\n      } = _ref;\n      const [t, i18n, ready] = useTranslation(ns, {\n        ...rest,\n        keyPrefix: options.keyPrefix\n      });\n      const passDownProps = {\n        ...rest,\n        t,\n        i18n,\n        tReady: ready\n      };\n      if (options.withRef && forwardedRef) {\n        passDownProps.ref = forwardedRef;\n      } else if (!options.withRef && forwardedRef) {\n        passDownProps.forwardedRef = forwardedRef;\n      }\n      return createElement(WrappedComponent, passDownProps);\n    }\n    I18nextWithTranslation.displayName = `withI18nextTranslation(${getDisplayName(WrappedComponent)})`;\n    I18nextWithTranslation.WrappedComponent = WrappedComponent;\n    const forwardRef = (props, ref) => createElement(I18nextWithTranslation, Object.assign({}, props, {\n      forwardedRef: ref\n    }));\n    return options.withRef ? forwardRefReact(forwardRef) : I18nextWithTranslation;\n  };\n}","import { useTranslation } from './useTranslation.js';\nexport function Translation(props) {\n  const {\n    ns,\n    children,\n    ...options\n  } = props;\n  const [t, i18n, ready] = useTranslation(ns, options);\n  return children(t, {\n    i18n,\n    lng: i18n.language\n  }, ready);\n}","import { createElement, useMemo } from 'react';\nimport { I18nContext } from './context.js';\nexport function I18nextProvider(_ref) {\n  let {\n    i18n,\n    defaultNS,\n    children\n  } = _ref;\n  const value = useMemo(() => ({\n    i18n,\n    defaultNS\n  }), [i18n, defaultNS]);\n  return createElement(I18nContext.Provider, {\n    value\n  }, children);\n}","import { useContext } from 'react';\nimport { getI18n, I18nContext } from './context.js';\nexport function useSSR(initialI18nStore, initialLanguage) {\n  let props = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n  const {\n    i18n: i18nFromProps\n  } = props;\n  const {\n    i18n: i18nFromContext\n  } = useContext(I18nContext) || {};\n  const i18n = i18nFromProps || i18nFromContext || getI18n();\n  if (i18n.options && i18n.options.isClone) return;\n  if (initialI18nStore && !i18n.initializedStoreOnce) {\n    i18n.services.resourceStore.data = initialI18nStore;\n    i18n.options.ns = Object.values(initialI18nStore).reduce((mem, lngResources) => {\n      Object.keys(lngResources).forEach(ns => {\n        if (mem.indexOf(ns) < 0) mem.push(ns);\n      });\n      return mem;\n    }, i18n.options.ns);\n    i18n.initializedStoreOnce = true;\n    i18n.isInitialized = true;\n  }\n  if (initialLanguage && !i18n.initializedLanguageOnce) {\n    i18n.changeLanguage(initialLanguage);\n    i18n.initializedLanguageOnce = true;\n  }\n}","import { createElement } from 'react';\nimport { useSSR } from './useSSR.js';\nimport { composeInitialProps } from './context.js';\nimport { getDisplayName } from './utils.js';\nexport function withSSR() {\n  return function Extend(WrappedComponent) {\n    function I18nextWithSSR(_ref) {\n      let {\n        initialI18nStore,\n        initialLanguage,\n        ...rest\n      } = _ref;\n      useSSR(initialI18nStore, initialLanguage);\n      return createElement(WrappedComponent, {\n        ...rest\n      });\n    }\n    I18nextWithSSR.getInitialProps = composeInitialProps(WrappedComponent);\n    I18nextWithSSR.displayName = `withI18nextSSR(${getDisplayName(WrappedComponent)})`;\n    I18nextWithSSR.WrappedComponent = WrappedComponent;\n    return I18nextWithSSR;\n  };\n}","export { Trans } from './Trans.js';\nexport { Trans as TransWithoutContext } from './TransWithoutContext.js';\nexport { useTranslation } from './useTranslation.js';\nexport { withTranslation } from './withTranslation.js';\nexport { Translation } from './Translation.js';\nexport { I18nextProvider } from './I18nextProvider.js';\nexport { withSSR } from './withSSR.js';\nexport { useSSR } from './useSSR.js';\nexport { initReactI18next } from './initReactI18next.js';\nexport { setDefaults, getDefaults } from './defaults.js';\nexport { setI18n, getI18n } from './i18nInstance.js';\nexport { I18nContext, composeInitialProps, getInitialProps } from './context.js';\nexport const date = () => '';\nexport const time = () => '';\nexport const number = () => '';\nexport const select = () => '';\nexport const plural = () => '';\nexport const selectOrdinal = () => '';","'use client';\nimport React from 'react';\n\n/**\n * @internal\n */\nconst SkeletonThemeContext = React.createContext({});\n\n/* eslint-disable react/no-array-index-key */\nconst defaultEnableAnimation = true;\n// For performance & cleanliness, don't add any inline styles unless we have to\nfunction styleOptionsToCssProperties({ baseColor, highlightColor, width, height, borderRadius, circle, direction, duration, enableAnimation = defaultEnableAnimation, }) {\n    const style = {};\n    if (direction === 'rtl')\n        style['--animation-direction'] = 'reverse';\n    if (typeof duration === 'number')\n        style['--animation-duration'] = `${duration}s`;\n    if (!enableAnimation)\n        style['--pseudo-element-display'] = 'none';\n    if (typeof width === 'string' || typeof width === 'number')\n        style.width = width;\n    if (typeof height === 'string' || typeof height === 'number')\n        style.height = height;\n    if (typeof borderRadius === 'string' || typeof borderRadius === 'number')\n        style.borderRadius = borderRadius;\n    if (circle)\n        style.borderRadius = '50%';\n    if (typeof baseColor !== 'undefined')\n        style['--base-color'] = baseColor;\n    if (typeof highlightColor !== 'undefined')\n        style['--highlight-color'] = highlightColor;\n    return style;\n}\nfunction Skeleton({ count = 1, wrapper: Wrapper, className: customClassName, containerClassName, containerTestId, circle = false, style: styleProp, ...originalPropsStyleOptions }) {\n    var _a, _b, _c;\n    const contextStyleOptions = React.useContext(SkeletonThemeContext);\n    const propsStyleOptions = { ...originalPropsStyleOptions };\n    // DO NOT overwrite style options from the context if `propsStyleOptions`\n    // has properties explicity set to undefined\n    for (const [key, value] of Object.entries(originalPropsStyleOptions)) {\n        if (typeof value === 'undefined') {\n            delete propsStyleOptions[key];\n        }\n    }\n    // Props take priority over context\n    const styleOptions = {\n        ...contextStyleOptions,\n        ...propsStyleOptions,\n        circle,\n    };\n    // `styleProp` has the least priority out of everything\n    const style = {\n        ...styleProp,\n        ...styleOptionsToCssProperties(styleOptions),\n    };\n    let className = 'react-loading-skeleton';\n    if (customClassName)\n        className += ` ${customClassName}`;\n    const inline = (_a = styleOptions.inline) !== null && _a !== void 0 ? _a : false;\n    const elements = [];\n    const countCeil = Math.ceil(count);\n    for (let i = 0; i < countCeil; i++) {\n        let thisStyle = style;\n        if (countCeil > count && i === countCeil - 1) {\n            // count is not an integer and we've reached the last iteration of\n            // the loop, so add a \"fractional\" skeleton.\n            //\n            // For example, if count is 3.5, we've already added 3 full\n            // skeletons, so now we add one more skeleton that is 0.5 times the\n            // original width.\n            const width = (_b = thisStyle.width) !== null && _b !== void 0 ? _b : '100%'; // 100% is the default since that's what's in the CSS\n            const fractionalPart = count % 1;\n            const fractionalWidth = typeof width === 'number'\n                ? width * fractionalPart\n                : `calc(${width} * ${fractionalPart})`;\n            thisStyle = { ...thisStyle, width: fractionalWidth };\n        }\n        const skeletonSpan = (React.createElement(\"span\", { className: className, style: thisStyle, key: i }, \"\\u200C\"));\n        if (inline) {\n            elements.push(skeletonSpan);\n        }\n        else {\n            // Without the <br />, the skeleton lines will all run together if\n            // `width` is specified\n            elements.push(React.createElement(React.Fragment, { key: i },\n                skeletonSpan,\n                React.createElement(\"br\", null)));\n        }\n    }\n    return (React.createElement(\"span\", { className: containerClassName, \"data-testid\": containerTestId, \"aria-live\": \"polite\", \"aria-busy\": (_c = styleOptions.enableAnimation) !== null && _c !== void 0 ? _c : defaultEnableAnimation }, Wrapper\n        ? elements.map((el, i) => React.createElement(Wrapper, { key: i }, el))\n        : elements));\n}\n\nfunction SkeletonTheme({ children, ...styleOptions }) {\n    return (React.createElement(SkeletonThemeContext.Provider, { value: styleOptions }, children));\n}\n\nexport { SkeletonTheme, Skeleton as default };\n","/**\n * @import {Element, ElementContent, Nodes, Parents, Root} from 'hast'\n * @import {ComponentProps, ElementType, ReactElement} from 'react'\n * @import {Options as RemarkRehypeOptions} from 'remark-rehype'\n * @import {BuildVisitor} from 'unist-util-visit'\n * @import {PluggableList} from 'unified'\n */\n\n/**\n * @callback AllowElement\n *   Filter elements.\n * @param {Readonly<Element>} element\n *   Element to check.\n * @param {number} index\n *   Index of `element` in `parent`.\n * @param {Readonly<Parents> | undefined} parent\n *   Parent of `element`.\n * @returns {boolean | null | undefined}\n *   Whether to allow `element` (default: `false`).\n */\n\n/**\n * @typedef ExtraProps\n *   Extra fields we pass.\n * @property {Element | undefined} [node]\n *   passed when `passNode` is on.\n */\n\n/**\n * @typedef {{\n *   [Key in Extract<ElementType, string>]?: ElementType<ComponentProps<Key> & ExtraProps>\n * }} Components\n *   Map tag names to components.\n */\n\n/**\n * @typedef Deprecation\n *   Deprecation.\n * @property {string} from\n *   Old field.\n * @property {string} id\n *   ID in readme.\n * @property {keyof Options} [to]\n *   New field.\n */\n\n/**\n * @typedef Options\n *   Configuration.\n * @property {AllowElement | null | undefined} [allowElement]\n *   Filter elements (optional);\n *   `allowedElements` / `disallowedElements` is used first.\n * @property {ReadonlyArray<string> | null | undefined} [allowedElements]\n *   Tag names to allow (default: all tag names);\n *   cannot combine w/ `disallowedElements`.\n * @property {string | null | undefined} [children]\n *   Markdown.\n * @property {string | null | undefined} [className]\n *   Wrap in a `div` with this class name.\n * @property {Components | null | undefined} [components]\n *   Map tag names to components.\n * @property {ReadonlyArray<string> | null | undefined} [disallowedElements]\n *   Tag names to disallow (default: `[]`);\n *   cannot combine w/ `allowedElements`.\n * @property {PluggableList | null | undefined} [rehypePlugins]\n *   List of rehype plugins to use.\n * @property {PluggableList | null | undefined} [remarkPlugins]\n *   List of remark plugins to use.\n * @property {Readonly<RemarkRehypeOptions> | null | undefined} [remarkRehypeOptions]\n *   Options to pass through to `remark-rehype`.\n * @property {boolean | null | undefined} [skipHtml=false]\n *   Ignore HTML in markdown completely (default: `false`).\n * @property {boolean | null | undefined} [unwrapDisallowed=false]\n *   Extract (unwrap) what’s in disallowed elements (default: `false`);\n *   normally when say `strong` is not allowed, it and it’s children are dropped,\n *   with `unwrapDisallowed` the element itself is replaced by its children.\n * @property {UrlTransform | null | undefined} [urlTransform]\n *   Change URLs (default: `defaultUrlTransform`)\n */\n\n/**\n * @callback UrlTransform\n *   Transform all URLs.\n * @param {string} url\n *   URL.\n * @param {string} key\n *   Property name (example: `'href'`).\n * @param {Readonly<Element>} node\n *   Node.\n * @returns {string | null | undefined}\n *   Transformed URL (optional).\n */\n\nimport {unreachable} from 'devlop'\nimport {toJsxRuntime} from 'hast-util-to-jsx-runtime'\nimport {urlAttributes} from 'html-url-attributes'\nimport {Fragment, jsx, jsxs} from 'react/jsx-runtime'\nimport remarkParse from 'remark-parse'\nimport remarkRehype from 'remark-rehype'\nimport {unified} from 'unified'\nimport {visit} from 'unist-util-visit'\nimport {VFile} from 'vfile'\n\nconst changelog =\n  'https://github.com/remarkjs/react-markdown/blob/main/changelog.md'\n\n/** @type {PluggableList} */\nconst emptyPlugins = []\n/** @type {Readonly<RemarkRehypeOptions>} */\nconst emptyRemarkRehypeOptions = {allowDangerousHtml: true}\nconst safeProtocol = /^(https?|ircs?|mailto|xmpp)$/i\n\n// Mutable because we `delete` any time it’s used and a message is sent.\n/** @type {ReadonlyArray<Readonly<Deprecation>>} */\nconst deprecations = [\n  {from: 'astPlugins', id: 'remove-buggy-html-in-markdown-parser'},\n  {from: 'allowDangerousHtml', id: 'remove-buggy-html-in-markdown-parser'},\n  {\n    from: 'allowNode',\n    id: 'replace-allownode-allowedtypes-and-disallowedtypes',\n    to: 'allowElement'\n  },\n  {\n    from: 'allowedTypes',\n    id: 'replace-allownode-allowedtypes-and-disallowedtypes',\n    to: 'allowedElements'\n  },\n  {\n    from: 'disallowedTypes',\n    id: 'replace-allownode-allowedtypes-and-disallowedtypes',\n    to: 'disallowedElements'\n  },\n  {from: 'escapeHtml', id: 'remove-buggy-html-in-markdown-parser'},\n  {from: 'includeElementIndex', id: '#remove-includeelementindex'},\n  {\n    from: 'includeNodeIndex',\n    id: 'change-includenodeindex-to-includeelementindex'\n  },\n  {from: 'linkTarget', id: 'remove-linktarget'},\n  {from: 'plugins', id: 'change-plugins-to-remarkplugins', to: 'remarkPlugins'},\n  {from: 'rawSourcePos', id: '#remove-rawsourcepos'},\n  {from: 'renderers', id: 'change-renderers-to-components', to: 'components'},\n  {from: 'source', id: 'change-source-to-children', to: 'children'},\n  {from: 'sourcePos', id: '#remove-sourcepos'},\n  {from: 'transformImageUri', id: '#add-urltransform', to: 'urlTransform'},\n  {from: 'transformLinkUri', id: '#add-urltransform', to: 'urlTransform'}\n]\n\n/**\n * Component to render markdown.\n *\n * @param {Readonly<Options>} options\n *   Props.\n * @returns {ReactElement}\n *   React element.\n */\nexport function Markdown(options) {\n  const allowedElements = options.allowedElements\n  const allowElement = options.allowElement\n  const children = options.children || ''\n  const className = options.className\n  const components = options.components\n  const disallowedElements = options.disallowedElements\n  const rehypePlugins = options.rehypePlugins || emptyPlugins\n  const remarkPlugins = options.remarkPlugins || emptyPlugins\n  const remarkRehypeOptions = options.remarkRehypeOptions\n    ? {...options.remarkRehypeOptions, ...emptyRemarkRehypeOptions}\n    : emptyRemarkRehypeOptions\n  const skipHtml = options.skipHtml\n  const unwrapDisallowed = options.unwrapDisallowed\n  const urlTransform = options.urlTransform || defaultUrlTransform\n\n  const processor = unified()\n    .use(remarkParse)\n    .use(remarkPlugins)\n    .use(remarkRehype, remarkRehypeOptions)\n    .use(rehypePlugins)\n\n  const file = new VFile()\n\n  if (typeof children === 'string') {\n    file.value = children\n  } else {\n    unreachable(\n      'Unexpected value `' +\n        children +\n        '` for `children` prop, expected `string`'\n    )\n  }\n\n  if (allowedElements && disallowedElements) {\n    unreachable(\n      'Unexpected combined `allowedElements` and `disallowedElements`, expected one or the other'\n    )\n  }\n\n  for (const deprecation of deprecations) {\n    if (Object.hasOwn(options, deprecation.from)) {\n      unreachable(\n        'Unexpected `' +\n          deprecation.from +\n          '` prop, ' +\n          (deprecation.to\n            ? 'use `' + deprecation.to + '` instead'\n            : 'remove it') +\n          ' (see <' +\n          changelog +\n          '#' +\n          deprecation.id +\n          '> for more info)'\n      )\n    }\n  }\n\n  const mdastTree = processor.parse(file)\n  /** @type {Nodes} */\n  let hastTree = processor.runSync(mdastTree, file)\n\n  // Wrap in `div` if there’s a class name.\n  if (className) {\n    hastTree = {\n      type: 'element',\n      tagName: 'div',\n      properties: {className},\n      // Assume no doctypes.\n      children: /** @type {Array<ElementContent>} */ (\n        hastTree.type === 'root' ? hastTree.children : [hastTree]\n      )\n    }\n  }\n\n  visit(hastTree, transform)\n\n  return toJsxRuntime(hastTree, {\n    Fragment,\n    // @ts-expect-error\n    // React components are allowed to return numbers,\n    // but not according to the types in hast-util-to-jsx-runtime\n    components,\n    ignoreInvalidStyle: true,\n    jsx,\n    jsxs,\n    passKeys: true,\n    passNode: true\n  })\n\n  /** @type {BuildVisitor<Root>} */\n  function transform(node, index, parent) {\n    if (node.type === 'raw' && parent && typeof index === 'number') {\n      if (skipHtml) {\n        parent.children.splice(index, 1)\n      } else {\n        parent.children[index] = {type: 'text', value: node.value}\n      }\n\n      return index\n    }\n\n    if (node.type === 'element') {\n      /** @type {string} */\n      let key\n\n      for (key in urlAttributes) {\n        if (\n          Object.hasOwn(urlAttributes, key) &&\n          Object.hasOwn(node.properties, key)\n        ) {\n          const value = node.properties[key]\n          const test = urlAttributes[key]\n          if (test === null || test.includes(node.tagName)) {\n            node.properties[key] = urlTransform(String(value || ''), key, node)\n          }\n        }\n      }\n    }\n\n    if (node.type === 'element') {\n      let remove = allowedElements\n        ? !allowedElements.includes(node.tagName)\n        : disallowedElements\n          ? disallowedElements.includes(node.tagName)\n          : false\n\n      if (!remove && allowElement && typeof index === 'number') {\n        remove = !allowElement(node, index, parent)\n      }\n\n      if (remove && parent && typeof index === 'number') {\n        if (unwrapDisallowed && node.children) {\n          parent.children.splice(index, 1, ...node.children)\n        } else {\n          parent.children.splice(index, 1)\n        }\n\n        return index\n      }\n    }\n  }\n}\n\n/**\n * Make a URL safe.\n *\n * @satisfies {UrlTransform}\n * @param {string} value\n *   URL.\n * @returns {string}\n *   Safe URL.\n */\nexport function defaultUrlTransform(value) {\n  // Same as:\n  // <https://github.com/micromark/micromark/blob/929275e/packages/micromark-util-sanitize-uri/dev/index.js#L34>\n  // But without the `encode` part.\n  const colon = value.indexOf(':')\n  const questionMark = value.indexOf('?')\n  const numberSign = value.indexOf('#')\n  const slash = value.indexOf('/')\n\n  if (\n    // If there is no protocol, it’s relative.\n    colon === -1 ||\n    // If the first colon is after a `?`, `#`, or `/`, it’s not a protocol.\n    (slash !== -1 && colon > slash) ||\n    (questionMark !== -1 && colon > questionMark) ||\n    (numberSign !== -1 && colon > numberSign) ||\n    // It is a protocol, it should be allowed.\n    safeProtocol.test(value.slice(0, colon))\n  ) {\n    return value\n  }\n\n  return ''\n}\n","/**\n * @typedef {import('mdast').Root} Root\n * @typedef {import('mdast-util-from-markdown').Options} FromMarkdownOptions\n * @typedef {import('unified').Parser<Root>} Parser\n * @typedef {import('unified').Processor<Root>} Processor\n */\n\n/**\n * @typedef {Omit<FromMarkdownOptions, 'extensions' | 'mdastExtensions'>} Options\n */\n\nimport {fromMarkdown} from 'mdast-util-from-markdown'\n\n/**\n * Aadd support for parsing from markdown.\n *\n * @param {Readonly<Options> | null | undefined} [options]\n *   Configuration (optional).\n * @returns {undefined}\n *   Nothing.\n */\nexport default function remarkParse(options) {\n  /** @type {Processor} */\n  // @ts-expect-error: TS in JSDoc generates wrong types if `this` is typed regularly.\n  const self = this\n\n  self.parser = parser\n\n  /**\n   * @type {Parser}\n   */\n  function parser(doc) {\n    return fromMarkdown(doc, {\n      ...self.data('settings'),\n      ...options,\n      // Note: these options are not in the readme.\n      // The goal is for them to be set by plugins on `data` instead of being\n      // passed by users.\n      extensions: self.data('micromarkExtensions') || [],\n      mdastExtensions: self.data('fromMarkdownExtensions') || []\n    })\n  }\n}\n","// Include `data` fields in mdast and `raw` nodes in hast.\n/// <reference types=\"mdast-util-to-hast\" />\n\n/**\n * @import {Root as HastRoot} from 'hast'\n * @import {Root as MdastRoot} from 'mdast'\n * @import {Options as ToHastOptions} from 'mdast-util-to-hast'\n * @import {Processor} from 'unified'\n * @import {VFile} from 'vfile'\n */\n\n/**\n * @typedef {Omit<ToHastOptions, 'file'>} Options\n *\n * @callback TransformBridge\n *   Bridge-mode.\n *\n *   Runs the destination with the new hast tree.\n *   Discards result.\n * @param {MdastRoot} tree\n *   Tree.\n * @param {VFile} file\n *   File.\n * @returns {Promise<undefined>}\n *   Nothing.\n *\n * @callback TransformMutate\n *  Mutate-mode.\n *\n *  Further transformers run on the hast tree.\n * @param {MdastRoot} tree\n *   Tree.\n * @param {VFile} file\n *   File.\n * @returns {HastRoot}\n *   Tree (hast).\n */\n\nimport {toHast} from 'mdast-util-to-hast'\n\n/**\n * Turn markdown into HTML.\n *\n * ##### Notes\n *\n * ###### Signature\n *\n * *   if a processor is given, runs the (rehype) plugins used on it with a\n *     hast tree, then discards the result (*bridge mode*)\n * *   otherwise, returns a hast tree, the plugins used after `remarkRehype`\n *     are rehype plugins (*mutate mode*)\n *\n * > 👉 **Note**: It’s highly unlikely that you want to pass a `processor`.\n *\n * ###### HTML\n *\n * Raw HTML is available in mdast as `html` nodes and can be embedded in hast\n * as semistandard `raw` nodes.\n * Most plugins ignore `raw` nodes but two notable ones don’t:\n *\n * *   `rehype-stringify` also has an option `allowDangerousHtml` which will\n *     output the raw HTML.\n *     This is typically discouraged as noted by the option name but is useful if\n *     you completely trust authors\n * *   `rehype-raw` can handle the raw embedded HTML strings by parsing them\n *     into standard hast nodes (`element`, `text`, etc).\n *     This is a heavy task as it needs a full HTML parser, but it is the only way\n *     to support untrusted content\n *\n * ###### Footnotes\n *\n * Many options supported here relate to footnotes.\n * Footnotes are not specified by CommonMark, which we follow by default.\n * They are supported by GitHub, so footnotes can be enabled in markdown with\n * `remark-gfm`.\n *\n * The options `footnoteBackLabel` and `footnoteLabel` define natural language\n * that explains footnotes, which is hidden for sighted users but shown to\n * assistive technology.\n * When your page is not in English, you must define translated values.\n *\n * Back references use ARIA attributes, but the section label itself uses a\n * heading that is hidden with an `sr-only` class.\n * To show it to sighted users, define different attributes in\n * `footnoteLabelProperties`.\n *\n * ###### Clobbering\n *\n * Footnotes introduces a problem, as it links footnote calls to footnote\n * definitions on the page through `id` attributes generated from user content,\n * which results in DOM clobbering.\n *\n * DOM clobbering is this:\n *\n * ```html\n * <p id=x></p>\n * <script>alert(x) // `x` now refers to the DOM `p#x` element</script>\n * ```\n *\n * Elements by their ID are made available by browsers on the `window` object,\n * which is a security risk.\n * Using a prefix solves this problem.\n *\n * More information on how to handle clobbering and the prefix is explained in\n * *Example: headings (DOM clobbering)* in `rehype-sanitize`.\n *\n * ###### Unknown nodes\n *\n * Unknown nodes are nodes with a type that isn’t in `handlers` or `passThrough`.\n * The default behavior for unknown nodes is:\n *\n * *   when the node has a `value` (and doesn’t have `data.hName`,\n *     `data.hProperties`, or `data.hChildren`, see later), create a hast `text`\n *     node\n * *   otherwise, create a `<div>` element (which could be changed with\n *     `data.hName`), with its children mapped from mdast to hast as well\n *\n * This behavior can be changed by passing an `unknownHandler`.\n *\n * @overload\n * @param {Processor} processor\n * @param {Readonly<Options> | null | undefined} [options]\n * @returns {TransformBridge}\n *\n * @overload\n * @param {Readonly<Options> | null | undefined} [options]\n * @returns {TransformMutate}\n *\n * @param {Readonly<Options> | Processor | null | undefined} [destination]\n *   Processor or configuration (optional).\n * @param {Readonly<Options> | null | undefined} [options]\n *   When a processor was given, configuration (optional).\n * @returns {TransformBridge | TransformMutate}\n *   Transform.\n */\nexport default function remarkRehype(destination, options) {\n  if (destination && 'run' in destination) {\n    /**\n     * @type {TransformBridge}\n     */\n    return async function (tree, file) {\n      // Cast because root in -> root out.\n      const hastTree = /** @type {HastRoot} */ (\n        toHast(tree, {file, ...options})\n      )\n      await destination.run(hastTree, file)\n    }\n  }\n\n  /**\n   * @type {TransformMutate}\n   */\n  return function (tree, file) {\n    // Cast because root in -> root out.\n    // To do: in the future, disallow ` || options` fallback.\n    // With `unified-engine`, `destination` can be `undefined` but\n    // `options` will be the file set.\n    // We should not pass that as `options`.\n    return /** @type {HastRoot} */ (\n      toHast(tree, {file, ...(destination || options)})\n    )\n  }\n}\n","/**\n * Parse space-separated tokens to an array of strings.\n *\n * @param {string} value\n *   Space-separated tokens.\n * @returns {Array<string>}\n *   List of tokens.\n */\nexport function parse(value) {\n  const input = String(value || '').trim()\n  return input ? input.split(/[ \\t\\n\\r\\f]+/g) : []\n}\n\n/**\n * Serialize an array of strings as space separated-tokens.\n *\n * @param {Array<string|number>} values\n *   List of tokens.\n * @returns {string}\n *   Space-separated tokens.\n */\nexport function stringify(values) {\n  return values.join(' ').trim()\n}\n","const tab = 9 /* `\\t` */\nconst space = 32 /* ` ` */\n\n/**\n * Remove initial and final spaces and tabs at the line breaks in `value`.\n * Does not trim initial and final spaces and tabs of the value itself.\n *\n * @param {string} value\n *   Value to trim.\n * @returns {string}\n *   Trimmed value.\n */\nexport function trimLines(value) {\n  const source = String(value)\n  const search = /\\r?\\n|\\r/g\n  let match = search.exec(source)\n  let last = 0\n  /** @type {Array<string>} */\n  const lines = []\n\n  while (match) {\n    lines.push(\n      trimLine(source.slice(last, match.index), last > 0, true),\n      match[0]\n    )\n\n    last = match.index + match[0].length\n    match = search.exec(source)\n  }\n\n  lines.push(trimLine(source.slice(last), last > 0, false))\n\n  return lines.join('')\n}\n\n/**\n * @param {string} value\n *   Line to trim.\n * @param {boolean} start\n *   Whether to trim the start of the line.\n * @param {boolean} end\n *   Whether to trim the end of the line.\n * @returns {string}\n *   Trimmed line.\n */\nfunction trimLine(value, start, end) {\n  let startIndex = 0\n  let endIndex = value.length\n\n  if (start) {\n    let code = value.codePointAt(startIndex)\n\n    while (code === tab || code === space) {\n      startIndex++\n      code = value.codePointAt(startIndex)\n    }\n  }\n\n  if (end) {\n    let code = value.codePointAt(endIndex - 1)\n\n    while (code === tab || code === space) {\n      endIndex--\n      code = value.codePointAt(endIndex - 1)\n    }\n  }\n\n  return endIndex > startIndex ? value.slice(startIndex, endIndex) : ''\n}\n","/**\n * Throw a given error.\n *\n * @param {Error|null|undefined} [error]\n *   Maybe error.\n * @returns {asserts error is null|undefined}\n */\nexport function bail(error) {\n  if (error) {\n    throw error\n  }\n}\n","export default function isPlainObject(value) {\n\tif (typeof value !== 'object' || value === null) {\n\t\treturn false;\n\t}\n\n\tconst prototype = Object.getPrototypeOf(value);\n\treturn (prototype === null || prototype === Object.prototype || Object.getPrototypeOf(prototype) === null) && !(Symbol.toStringTag in value) && !(Symbol.iterator in value);\n}\n","// To do: remove `void`s\n// To do: remove `null` from output of our APIs, allow it as user APIs.\n\n/**\n * @typedef {(error?: Error | null | undefined, ...output: Array<any>) => void} Callback\n *   Callback.\n *\n * @typedef {(...input: Array<any>) => any} Middleware\n *   Ware.\n *\n * @typedef Pipeline\n *   Pipeline.\n * @property {Run} run\n *   Run the pipeline.\n * @property {Use} use\n *   Add middleware.\n *\n * @typedef {(...input: Array<any>) => void} Run\n *   Call all middleware.\n *\n *   Calls `done` on completion with either an error or the output of the\n *   last middleware.\n *\n *   > 👉 **Note**: as the length of input defines whether async functions get a\n *   > `next` function,\n *   > it’s recommended to keep `input` at one value normally.\n\n *\n * @typedef {(fn: Middleware) => Pipeline} Use\n *   Add middleware.\n */\n\n/**\n * Create new middleware.\n *\n * @returns {Pipeline}\n *   Pipeline.\n */\nexport function trough() {\n  /** @type {Array<Middleware>} */\n  const fns = []\n  /** @type {Pipeline} */\n  const pipeline = {run, use}\n\n  return pipeline\n\n  /** @type {Run} */\n  function run(...values) {\n    let middlewareIndex = -1\n    /** @type {Callback} */\n    const callback = values.pop()\n\n    if (typeof callback !== 'function') {\n      throw new TypeError('Expected function as last argument, not ' + callback)\n    }\n\n    next(null, ...values)\n\n    /**\n     * Run the next `fn`, or we’re done.\n     *\n     * @param {Error | null | undefined} error\n     * @param {Array<any>} output\n     */\n    function next(error, ...output) {\n      const fn = fns[++middlewareIndex]\n      let index = -1\n\n      if (error) {\n        callback(error)\n        return\n      }\n\n      // Copy non-nullish input into values.\n      while (++index < values.length) {\n        if (output[index] === null || output[index] === undefined) {\n          output[index] = values[index]\n        }\n      }\n\n      // Save the newly created `output` for the next call.\n      values = output\n\n      // Next or done.\n      if (fn) {\n        wrap(fn, next)(...output)\n      } else {\n        callback(null, ...output)\n      }\n    }\n  }\n\n  /** @type {Use} */\n  function use(middelware) {\n    if (typeof middelware !== 'function') {\n      throw new TypeError(\n        'Expected `middelware` to be a function, not ' + middelware\n      )\n    }\n\n    fns.push(middelware)\n    return pipeline\n  }\n}\n\n/**\n * Wrap `middleware` into a uniform interface.\n *\n * You can pass all input to the resulting function.\n * `callback` is then called with the output of `middleware`.\n *\n * If `middleware` accepts more arguments than the later given in input,\n * an extra `done` function is passed to it after that input,\n * which must be called by `middleware`.\n *\n * The first value in `input` is the main input value.\n * All other input values are the rest input values.\n * The values given to `callback` are the input values,\n * merged with every non-nullish output value.\n *\n * * if `middleware` throws an error,\n *   returns a promise that is rejected,\n *   or calls the given `done` function with an error,\n *   `callback` is called with that error\n * * if `middleware` returns a value or returns a promise that is resolved,\n *   that value is the main output value\n * * if `middleware` calls `done`,\n *   all non-nullish values except for the first one (the error) overwrite the\n *   output values\n *\n * @param {Middleware} middleware\n *   Function to wrap.\n * @param {Callback} callback\n *   Callback called with the output of `middleware`.\n * @returns {Run}\n *   Wrapped middleware.\n */\nexport function wrap(middleware, callback) {\n  /** @type {boolean} */\n  let called\n\n  return wrapped\n\n  /**\n   * Call `middleware`.\n   * @this {any}\n   * @param {Array<any>} parameters\n   * @returns {void}\n   */\n  function wrapped(...parameters) {\n    const fnExpectsCallback = middleware.length > parameters.length\n    /** @type {any} */\n    let result\n\n    if (fnExpectsCallback) {\n      parameters.push(done)\n    }\n\n    try {\n      result = middleware.apply(this, parameters)\n    } catch (error) {\n      const exception = /** @type {Error} */ (error)\n\n      // Well, this is quite the pickle.\n      // `middleware` received a callback and called it synchronously, but that\n      // threw an error.\n      // The only thing left to do is to throw the thing instead.\n      if (fnExpectsCallback && called) {\n        throw exception\n      }\n\n      return done(exception)\n    }\n\n    if (!fnExpectsCallback) {\n      if (result && result.then && typeof result.then === 'function') {\n        result.then(then, done)\n      } else if (result instanceof Error) {\n        done(result)\n      } else {\n        then(result)\n      }\n    }\n  }\n\n  /**\n   * Call `callback`, only once.\n   *\n   * @type {Callback}\n   */\n  function done(error, ...output) {\n    if (!called) {\n      called = true\n      callback(error, ...output)\n    }\n  }\n\n  /**\n   * Call `done` with one value.\n   *\n   * @param {any} [value]\n   */\n  function then(value) {\n    done(null, value)\n  }\n}\n","export const CallableInstance =\n  /**\n   * @type {new <Parameters extends Array<unknown>, Result>(property: string | symbol) => (...parameters: Parameters) => Result}\n   */\n  (\n    /** @type {unknown} */\n    (\n      /**\n       * @this {Function}\n       * @param {string | symbol} property\n       * @returns {(...parameters: Array<unknown>) => unknown}\n       */\n      function (property) {\n        const self = this\n        const constr = self.constructor\n        const proto = /** @type {Record<string | symbol, Function>} */ (\n          // Prototypes do exist.\n          // type-coverage:ignore-next-line\n          constr.prototype\n        )\n        const value = proto[property]\n        /** @type {(...parameters: Array<unknown>) => unknown} */\n        const apply = function () {\n          return value.apply(apply, arguments)\n        }\n\n        Object.setPrototypeOf(apply, proto)\n\n        // Not needed for us in `unified`: we only call this on the `copy`\n        // function,\n        // and we don't need to add its fields (`length`, `name`)\n        // over.\n        // See also: GH-246.\n        // const names = Object.getOwnPropertyNames(value)\n        //\n        // for (const p of names) {\n        //   const descriptor = Object.getOwnPropertyDescriptor(value, p)\n        //   if (descriptor) Object.defineProperty(apply, p, descriptor)\n        // }\n\n        return apply\n      }\n    )\n  )\n","/**\n * @typedef {import('trough').Pipeline} Pipeline\n *\n * @typedef {import('unist').Node} Node\n *\n * @typedef {import('vfile').Compatible} Compatible\n * @typedef {import('vfile').Value} Value\n *\n * @typedef {import('../index.js').CompileResultMap} CompileResultMap\n * @typedef {import('../index.js').Data} Data\n * @typedef {import('../index.js').Settings} Settings\n */\n\n/**\n * @typedef {CompileResultMap[keyof CompileResultMap]} CompileResults\n *   Acceptable results from compilers.\n *\n *   To register custom results, add them to\n *   {@linkcode CompileResultMap}.\n */\n\n/**\n * @template {Node} [Tree=Node]\n *   The node that the compiler receives (default: `Node`).\n * @template {CompileResults} [Result=CompileResults]\n *   The thing that the compiler yields (default: `CompileResults`).\n * @callback Compiler\n *   A **compiler** handles the compiling of a syntax tree to something else\n *   (in most cases, text) (TypeScript type).\n *\n *   It is used in the stringify phase and called with a {@linkcode Node}\n *   and {@linkcode VFile} representation of the document to compile.\n *   It should return the textual representation of the given tree (typically\n *   `string`).\n *\n *   > **Note**: unified typically compiles by serializing: most compilers\n *   > return `string` (or `Uint8Array`).\n *   > Some compilers, such as the one configured with\n *   > [`rehype-react`][rehype-react], return other values (in this case, a\n *   > React tree).\n *   > If you’re using a compiler that doesn’t serialize, expect different\n *   > result values.\n *   >\n *   > To register custom results in TypeScript, add them to\n *   > {@linkcode CompileResultMap}.\n *\n *   [rehype-react]: https://github.com/rehypejs/rehype-react\n * @param {Tree} tree\n *   Tree to compile.\n * @param {VFile} file\n *   File associated with `tree`.\n * @returns {Result}\n *   New content: compiled text (`string` or `Uint8Array`, for `file.value`) or\n *   something else (for `file.result`).\n */\n\n/**\n * @template {Node} [Tree=Node]\n *   The node that the parser yields (default: `Node`)\n * @callback Parser\n *   A **parser** handles the parsing of text to a syntax tree.\n *\n *   It is used in the parse phase and is called with a `string` and\n *   {@linkcode VFile} of the document to parse.\n *   It must return the syntax tree representation of the given file\n *   ({@linkcode Node}).\n * @param {string} document\n *   Document to parse.\n * @param {VFile} file\n *   File associated with `document`.\n * @returns {Tree}\n *   Node representing the given file.\n */\n\n/**\n * @typedef {(\n *   Plugin<Array<any>, any, any> |\n *   PluginTuple<Array<any>, any, any> |\n *   Preset\n * )} Pluggable\n *   Union of the different ways to add plugins and settings.\n */\n\n/**\n * @typedef {Array<Pluggable>} PluggableList\n *   List of plugins and presets.\n */\n\n// Note: we can’t use `callback` yet as it messes up `this`:\n//  <https://github.com/microsoft/TypeScript/issues/55197>.\n/**\n * @template {Array<unknown>} [PluginParameters=[]]\n *   Arguments passed to the plugin (default: `[]`, the empty tuple).\n * @template {Node | string | undefined} [Input=Node]\n *   Value that is expected as input (default: `Node`).\n *\n *   *   If the plugin returns a {@linkcode Transformer}, this\n *       should be the node it expects.\n *   *   If the plugin sets a {@linkcode Parser}, this should be\n *       `string`.\n *   *   If the plugin sets a {@linkcode Compiler}, this should be the\n *       node it expects.\n * @template [Output=Input]\n *   Value that is yielded as output (default: `Input`).\n *\n *   *   If the plugin returns a {@linkcode Transformer}, this\n *       should be the node that that yields.\n *   *   If the plugin sets a {@linkcode Parser}, this should be the\n *       node that it yields.\n *   *   If the plugin sets a {@linkcode Compiler}, this should be\n *       result it yields.\n * @typedef {(\n *   (this: Processor, ...parameters: PluginParameters) =>\n *     Input extends string ? // Parser.\n *        Output extends Node | undefined ? undefined | void : never :\n *     Output extends CompileResults ? // Compiler.\n *        Input extends Node | undefined ? undefined | void : never :\n *     Transformer<\n *       Input extends Node ? Input : Node,\n *       Output extends Node ? Output : Node\n *     > | undefined | void\n * )} Plugin\n *   Single plugin.\n *\n *   Plugins configure the processors they are applied on in the following\n *   ways:\n *\n *   *   they change the processor, such as the parser, the compiler, or by\n *       configuring data\n *   *   they specify how to handle trees and files\n *\n *   In practice, they are functions that can receive options and configure the\n *   processor (`this`).\n *\n *   > **Note**: plugins are called when the processor is *frozen*, not when\n *   > they are applied.\n */\n\n/**\n * Tuple of a plugin and its configuration.\n *\n * The first item is a plugin, the rest are its parameters.\n *\n * @template {Array<unknown>} [TupleParameters=[]]\n *   Arguments passed to the plugin (default: `[]`, the empty tuple).\n * @template {Node | string | undefined} [Input=undefined]\n *   Value that is expected as input (optional).\n *\n *   *   If the plugin returns a {@linkcode Transformer}, this\n *       should be the node it expects.\n *   *   If the plugin sets a {@linkcode Parser}, this should be\n *       `string`.\n *   *   If the plugin sets a {@linkcode Compiler}, this should be the\n *       node it expects.\n * @template [Output=undefined] (optional).\n *   Value that is yielded as output.\n *\n *   *   If the plugin returns a {@linkcode Transformer}, this\n *       should be the node that that yields.\n *   *   If the plugin sets a {@linkcode Parser}, this should be the\n *       node that it yields.\n *   *   If the plugin sets a {@linkcode Compiler}, this should be\n *       result it yields.\n * @typedef {(\n *   [\n *     plugin: Plugin<TupleParameters, Input, Output>,\n *     ...parameters: TupleParameters\n *   ]\n * )} PluginTuple\n */\n\n/**\n * @typedef Preset\n *   Sharable configuration.\n *\n *   They can contain plugins and settings.\n * @property {PluggableList | undefined} [plugins]\n *   List of plugins and presets (optional).\n * @property {Settings | undefined} [settings]\n *   Shared settings for parsers and compilers (optional).\n */\n\n/**\n * @template {VFile} [File=VFile]\n *   The file that the callback receives (default: `VFile`).\n * @callback ProcessCallback\n *   Callback called when the process is done.\n *\n *   Called with either an error or a result.\n * @param {Error | undefined} [error]\n *   Fatal error (optional).\n * @param {File | undefined} [file]\n *   Processed file (optional).\n * @returns {undefined}\n *   Nothing.\n */\n\n/**\n * @template {Node} [Tree=Node]\n *   The tree that the callback receives (default: `Node`).\n * @callback RunCallback\n *   Callback called when transformers are done.\n *\n *   Called with either an error or results.\n * @param {Error | undefined} [error]\n *   Fatal error (optional).\n * @param {Tree | undefined} [tree]\n *   Transformed tree (optional).\n * @param {VFile | undefined} [file]\n *   File (optional).\n * @returns {undefined}\n *   Nothing.\n */\n\n/**\n * @template {Node} [Output=Node]\n *   Node type that the transformer yields (default: `Node`).\n * @callback TransformCallback\n *   Callback passed to transforms.\n *\n *   If the signature of a `transformer` accepts a third argument, the\n *   transformer may perform asynchronous operations, and must call it.\n * @param {Error | undefined} [error]\n *   Fatal error to stop the process (optional).\n * @param {Output | undefined} [tree]\n *   New, changed, tree (optional).\n * @param {VFile | undefined} [file]\n *   New, changed, file (optional).\n * @returns {undefined}\n *   Nothing.\n */\n\n/**\n * @template {Node} [Input=Node]\n *   Node type that the transformer expects (default: `Node`).\n * @template {Node} [Output=Input]\n *   Node type that the transformer yields (default: `Input`).\n * @callback Transformer\n *   Transformers handle syntax trees and files.\n *\n *   They are functions that are called each time a syntax tree and file are\n *   passed through the run phase.\n *   When an error occurs in them (either because it’s thrown, returned,\n *   rejected, or passed to `next`), the process stops.\n *\n *   The run phase is handled by [`trough`][trough], see its documentation for\n *   the exact semantics of these functions.\n *\n *   > **Note**: you should likely ignore `next`: don’t accept it.\n *   > it supports callback-style async work.\n *   > But promises are likely easier to reason about.\n *\n *   [trough]: https://github.com/wooorm/trough#function-fninput-next\n * @param {Input} tree\n *   Tree to handle.\n * @param {VFile} file\n *   File to handle.\n * @param {TransformCallback<Output>} next\n *   Callback.\n * @returns {(\n *   Promise<Output | undefined | void> |\n *   Promise<never> | // For some reason this is needed separately.\n *   Output |\n *   Error |\n *   undefined |\n *   void\n * )}\n *   If you accept `next`, nothing.\n *   Otherwise:\n *\n *   *   `Error` — fatal error to stop the process\n *   *   `Promise<undefined>` or `undefined` — the next transformer keeps using\n *       same tree\n *   *   `Promise<Node>` or `Node` — new, changed, tree\n */\n\n/**\n * @template {Node | undefined} ParseTree\n *   Output of `parse`.\n * @template {Node | undefined} HeadTree\n *   Input for `run`.\n * @template {Node | undefined} TailTree\n *   Output for `run`.\n * @template {Node | undefined} CompileTree\n *   Input of `stringify`.\n * @template {CompileResults | undefined} CompileResult\n *   Output of `stringify`.\n * @template {Node | string | undefined} Input\n *   Input of plugin.\n * @template Output\n *   Output of plugin (optional).\n * @typedef {(\n *   Input extends string\n *     ? Output extends Node | undefined\n *       ? // Parser.\n *         Processor<\n *           Output extends undefined ? ParseTree : Output,\n *           HeadTree,\n *           TailTree,\n *           CompileTree,\n *           CompileResult\n *         >\n *       : // Unknown.\n *         Processor<ParseTree, HeadTree, TailTree, CompileTree, CompileResult>\n *     : Output extends CompileResults\n *     ? Input extends Node | undefined\n *       ? // Compiler.\n *         Processor<\n *           ParseTree,\n *           HeadTree,\n *           TailTree,\n *           Input extends undefined ? CompileTree : Input,\n *           Output extends undefined ? CompileResult : Output\n *         >\n *       : // Unknown.\n *         Processor<ParseTree, HeadTree, TailTree, CompileTree, CompileResult>\n *     : Input extends Node | undefined\n *     ? Output extends Node | undefined\n *       ? // Transform.\n *         Processor<\n *           ParseTree,\n *           HeadTree extends undefined ? Input : HeadTree,\n *           Output extends undefined ? TailTree : Output,\n *           CompileTree,\n *           CompileResult\n *         >\n *       : // Unknown.\n *         Processor<ParseTree, HeadTree, TailTree, CompileTree, CompileResult>\n *     : // Unknown.\n *       Processor<ParseTree, HeadTree, TailTree, CompileTree, CompileResult>\n * )} UsePlugin\n *   Create a processor based on the input/output of a {@link Plugin plugin}.\n */\n\n/**\n * @template {CompileResults | undefined} Result\n *   Node type that the transformer yields.\n * @typedef {(\n *   Result extends Value | undefined ?\n *     VFile :\n *     VFile & {result: Result}\n *   )} VFileWithOutput\n *   Type to generate a {@linkcode VFile} corresponding to a compiler result.\n *\n *   If a result that is not acceptable on a `VFile` is used, that will\n *   be stored on the `result` field of {@linkcode VFile}.\n */\n\nimport {bail} from 'bail'\nimport extend from 'extend'\nimport {ok as assert} from 'devlop'\nimport isPlainObj from 'is-plain-obj'\nimport {trough} from 'trough'\nimport {VFile} from 'vfile'\nimport {CallableInstance} from './callable-instance.js'\n\n// To do: next major: drop `Compiler`, `Parser`: prefer lowercase.\n\n// To do: we could start yielding `never` in TS when a parser is missing and\n// `parse` is called.\n// Currently, we allow directly setting `processor.parser`, which is untyped.\n\nconst own = {}.hasOwnProperty\n\n/**\n * @template {Node | undefined} [ParseTree=undefined]\n *   Output of `parse` (optional).\n * @template {Node | undefined} [HeadTree=undefined]\n *   Input for `run` (optional).\n * @template {Node | undefined} [TailTree=undefined]\n *   Output for `run` (optional).\n * @template {Node | undefined} [CompileTree=undefined]\n *   Input of `stringify` (optional).\n * @template {CompileResults | undefined} [CompileResult=undefined]\n *   Output of `stringify` (optional).\n * @extends {CallableInstance<[], Processor<ParseTree, HeadTree, TailTree, CompileTree, CompileResult>>}\n */\nexport class Processor extends CallableInstance {\n  /**\n   * Create a processor.\n   */\n  constructor() {\n    // If `Processor()` is called (w/o new), `copy` is called instead.\n    super('copy')\n\n    /**\n     * Compiler to use (deprecated).\n     *\n     * @deprecated\n     *   Use `compiler` instead.\n     * @type {(\n     *   Compiler<\n     *     CompileTree extends undefined ? Node : CompileTree,\n     *     CompileResult extends undefined ? CompileResults : CompileResult\n     *   > |\n     *   undefined\n     * )}\n     */\n    this.Compiler = undefined\n\n    /**\n     * Parser to use (deprecated).\n     *\n     * @deprecated\n     *   Use `parser` instead.\n     * @type {(\n     *   Parser<ParseTree extends undefined ? Node : ParseTree> |\n     *   undefined\n     * )}\n     */\n    this.Parser = undefined\n\n    // Note: the following fields are considered private.\n    // However, they are needed for tests, and TSC generates an untyped\n    // `private freezeIndex` field for, which trips `type-coverage` up.\n    // Instead, we use `@deprecated` to visualize that they shouldn’t be used.\n    /**\n     * Internal list of configured plugins.\n     *\n     * @deprecated\n     *   This is a private internal property and should not be used.\n     * @type {Array<PluginTuple<Array<unknown>>>}\n     */\n    this.attachers = []\n\n    /**\n     * Compiler to use.\n     *\n     * @type {(\n     *   Compiler<\n     *     CompileTree extends undefined ? Node : CompileTree,\n     *     CompileResult extends undefined ? CompileResults : CompileResult\n     *   > |\n     *   undefined\n     * )}\n     */\n    this.compiler = undefined\n\n    /**\n     * Internal state to track where we are while freezing.\n     *\n     * @deprecated\n     *   This is a private internal property and should not be used.\n     * @type {number}\n     */\n    this.freezeIndex = -1\n\n    /**\n     * Internal state to track whether we’re frozen.\n     *\n     * @deprecated\n     *   This is a private internal property and should not be used.\n     * @type {boolean | undefined}\n     */\n    this.frozen = undefined\n\n    /**\n     * Internal state.\n     *\n     * @deprecated\n     *   This is a private internal property and should not be used.\n     * @type {Data}\n     */\n    this.namespace = {}\n\n    /**\n     * Parser to use.\n     *\n     * @type {(\n     *   Parser<ParseTree extends undefined ? Node : ParseTree> |\n     *   undefined\n     * )}\n     */\n    this.parser = undefined\n\n    /**\n     * Internal list of configured transformers.\n     *\n     * @deprecated\n     *   This is a private internal property and should not be used.\n     * @type {Pipeline}\n     */\n    this.transformers = trough()\n  }\n\n  /**\n   * Copy a processor.\n   *\n   * @deprecated\n   *   This is a private internal method and should not be used.\n   * @returns {Processor<ParseTree, HeadTree, TailTree, CompileTree, CompileResult>}\n   *   New *unfrozen* processor ({@linkcode Processor}) that is\n   *   configured to work the same as its ancestor.\n   *   When the descendant processor is configured in the future it does not\n   *   affect the ancestral processor.\n   */\n  copy() {\n    // Cast as the type parameters will be the same after attaching.\n    const destination =\n      /** @type {Processor<ParseTree, HeadTree, TailTree, CompileTree, CompileResult>} */ (\n        new Processor()\n      )\n    let index = -1\n\n    while (++index < this.attachers.length) {\n      const attacher = this.attachers[index]\n      destination.use(...attacher)\n    }\n\n    destination.data(extend(true, {}, this.namespace))\n\n    return destination\n  }\n\n  /**\n   * Configure the processor with info available to all plugins.\n   * Information is stored in an object.\n   *\n   * Typically, options can be given to a specific plugin, but sometimes it\n   * makes sense to have information shared with several plugins.\n   * For example, a list of HTML elements that are self-closing, which is\n   * needed during all phases.\n   *\n   * > **Note**: setting information cannot occur on *frozen* processors.\n   * > Call the processor first to create a new unfrozen processor.\n   *\n   * > **Note**: to register custom data in TypeScript, augment the\n   * > {@linkcode Data} interface.\n   *\n   * @example\n   *   This example show how to get and set info:\n   *\n   *   ```js\n   *   import {unified} from 'unified'\n   *\n   *   const processor = unified().data('alpha', 'bravo')\n   *\n   *   processor.data('alpha') // => 'bravo'\n   *\n   *   processor.data() // => {alpha: 'bravo'}\n   *\n   *   processor.data({charlie: 'delta'})\n   *\n   *   processor.data() // => {charlie: 'delta'}\n   *   ```\n   *\n   * @template {keyof Data} Key\n   *\n   * @overload\n   * @returns {Data}\n   *\n   * @overload\n   * @param {Data} dataset\n   * @returns {Processor<ParseTree, HeadTree, TailTree, CompileTree, CompileResult>}\n   *\n   * @overload\n   * @param {Key} key\n   * @returns {Data[Key]}\n   *\n   * @overload\n   * @param {Key} key\n   * @param {Data[Key]} value\n   * @returns {Processor<ParseTree, HeadTree, TailTree, CompileTree, CompileResult>}\n   *\n   * @param {Data | Key} [key]\n   *   Key to get or set, or entire dataset to set, or nothing to get the\n   *   entire dataset (optional).\n   * @param {Data[Key]} [value]\n   *   Value to set (optional).\n   * @returns {unknown}\n   *   The current processor when setting, the value at `key` when getting, or\n   *   the entire dataset when getting without key.\n   */\n  data(key, value) {\n    if (typeof key === 'string') {\n      // Set `key`.\n      if (arguments.length === 2) {\n        assertUnfrozen('data', this.frozen)\n        this.namespace[key] = value\n        return this\n      }\n\n      // Get `key`.\n      return (own.call(this.namespace, key) && this.namespace[key]) || undefined\n    }\n\n    // Set space.\n    if (key) {\n      assertUnfrozen('data', this.frozen)\n      this.namespace = key\n      return this\n    }\n\n    // Get space.\n    return this.namespace\n  }\n\n  /**\n   * Freeze a processor.\n   *\n   * Frozen processors are meant to be extended and not to be configured\n   * directly.\n   *\n   * When a processor is frozen it cannot be unfrozen.\n   * New processors working the same way can be created by calling the\n   * processor.\n   *\n   * It’s possible to freeze processors explicitly by calling `.freeze()`.\n   * Processors freeze automatically when `.parse()`, `.run()`, `.runSync()`,\n   * `.stringify()`, `.process()`, or `.processSync()` are called.\n   *\n   * @returns {Processor<ParseTree, HeadTree, TailTree, CompileTree, CompileResult>}\n   *   The current processor.\n   */\n  freeze() {\n    if (this.frozen) {\n      return this\n    }\n\n    // Cast so that we can type plugins easier.\n    // Plugins are supposed to be usable on different processors, not just on\n    // this exact processor.\n    const self = /** @type {Processor} */ (/** @type {unknown} */ (this))\n\n    while (++this.freezeIndex < this.attachers.length) {\n      const [attacher, ...options] = this.attachers[this.freezeIndex]\n\n      if (options[0] === false) {\n        continue\n      }\n\n      if (options[0] === true) {\n        options[0] = undefined\n      }\n\n      const transformer = attacher.call(self, ...options)\n\n      if (typeof transformer === 'function') {\n        this.transformers.use(transformer)\n      }\n    }\n\n    this.frozen = true\n    this.freezeIndex = Number.POSITIVE_INFINITY\n\n    return this\n  }\n\n  /**\n   * Parse text to a syntax tree.\n   *\n   * > **Note**: `parse` freezes the processor if not already *frozen*.\n   *\n   * > **Note**: `parse` performs the parse phase, not the run phase or other\n   * > phases.\n   *\n   * @param {Compatible | undefined} [file]\n   *   file to parse (optional); typically `string` or `VFile`; any value\n   *   accepted as `x` in `new VFile(x)`.\n   * @returns {ParseTree extends undefined ? Node : ParseTree}\n   *   Syntax tree representing `file`.\n   */\n  parse(file) {\n    this.freeze()\n    const realFile = vfile(file)\n    const parser = this.parser || this.Parser\n    assertParser('parse', parser)\n    return parser(String(realFile), realFile)\n  }\n\n  /**\n   * Process the given file as configured on the processor.\n   *\n   * > **Note**: `process` freezes the processor if not already *frozen*.\n   *\n   * > **Note**: `process` performs the parse, run, and stringify phases.\n   *\n   * @overload\n   * @param {Compatible | undefined} file\n   * @param {ProcessCallback<VFileWithOutput<CompileResult>>} done\n   * @returns {undefined}\n   *\n   * @overload\n   * @param {Compatible | undefined} [file]\n   * @returns {Promise<VFileWithOutput<CompileResult>>}\n   *\n   * @param {Compatible | undefined} [file]\n   *   File (optional); typically `string` or `VFile`]; any value accepted as\n   *   `x` in `new VFile(x)`.\n   * @param {ProcessCallback<VFileWithOutput<CompileResult>> | undefined} [done]\n   *   Callback (optional).\n   * @returns {Promise<VFile> | undefined}\n   *   Nothing if `done` is given.\n   *   Otherwise a promise, rejected with a fatal error or resolved with the\n   *   processed file.\n   *\n   *   The parsed, transformed, and compiled value is available at\n   *   `file.value` (see note).\n   *\n   *   > **Note**: unified typically compiles by serializing: most\n   *   > compilers return `string` (or `Uint8Array`).\n   *   > Some compilers, such as the one configured with\n   *   > [`rehype-react`][rehype-react], return other values (in this case, a\n   *   > React tree).\n   *   > If you’re using a compiler that doesn’t serialize, expect different\n   *   > result values.\n   *   >\n   *   > To register custom results in TypeScript, add them to\n   *   > {@linkcode CompileResultMap}.\n   *\n   *   [rehype-react]: https://github.com/rehypejs/rehype-react\n   */\n  process(file, done) {\n    const self = this\n\n    this.freeze()\n    assertParser('process', this.parser || this.Parser)\n    assertCompiler('process', this.compiler || this.Compiler)\n\n    return done ? executor(undefined, done) : new Promise(executor)\n\n    // Note: `void`s needed for TS.\n    /**\n     * @param {((file: VFileWithOutput<CompileResult>) => undefined | void) | undefined} resolve\n     * @param {(error: Error | undefined) => undefined | void} reject\n     * @returns {undefined}\n     */\n    function executor(resolve, reject) {\n      const realFile = vfile(file)\n      // Assume `ParseTree` (the result of the parser) matches `HeadTree` (the\n      // input of the first transform).\n      const parseTree =\n        /** @type {HeadTree extends undefined ? Node : HeadTree} */ (\n          /** @type {unknown} */ (self.parse(realFile))\n        )\n\n      self.run(parseTree, realFile, function (error, tree, file) {\n        if (error || !tree || !file) {\n          return realDone(error)\n        }\n\n        // Assume `TailTree` (the output of the last transform) matches\n        // `CompileTree` (the input of the compiler).\n        const compileTree =\n          /** @type {CompileTree extends undefined ? Node : CompileTree} */ (\n            /** @type {unknown} */ (tree)\n          )\n\n        const compileResult = self.stringify(compileTree, file)\n\n        if (looksLikeAValue(compileResult)) {\n          file.value = compileResult\n        } else {\n          file.result = compileResult\n        }\n\n        realDone(error, /** @type {VFileWithOutput<CompileResult>} */ (file))\n      })\n\n      /**\n       * @param {Error | undefined} error\n       * @param {VFileWithOutput<CompileResult> | undefined} [file]\n       * @returns {undefined}\n       */\n      function realDone(error, file) {\n        if (error || !file) {\n          reject(error)\n        } else if (resolve) {\n          resolve(file)\n        } else {\n          assert(done, '`done` is defined if `resolve` is not')\n          done(undefined, file)\n        }\n      }\n    }\n  }\n\n  /**\n   * Process the given file as configured on the processor.\n   *\n   * An error is thrown if asynchronous transforms are configured.\n   *\n   * > **Note**: `processSync` freezes the processor if not already *frozen*.\n   *\n   * > **Note**: `processSync` performs the parse, run, and stringify phases.\n   *\n   * @param {Compatible | undefined} [file]\n   *   File (optional); typically `string` or `VFile`; any value accepted as\n   *   `x` in `new VFile(x)`.\n   * @returns {VFileWithOutput<CompileResult>}\n   *   The processed file.\n   *\n   *   The parsed, transformed, and compiled value is available at\n   *   `file.value` (see note).\n   *\n   *   > **Note**: unified typically compiles by serializing: most\n   *   > compilers return `string` (or `Uint8Array`).\n   *   > Some compilers, such as the one configured with\n   *   > [`rehype-react`][rehype-react], return other values (in this case, a\n   *   > React tree).\n   *   > If you’re using a compiler that doesn’t serialize, expect different\n   *   > result values.\n   *   >\n   *   > To register custom results in TypeScript, add them to\n   *   > {@linkcode CompileResultMap}.\n   *\n   *   [rehype-react]: https://github.com/rehypejs/rehype-react\n   */\n  processSync(file) {\n    /** @type {boolean} */\n    let complete = false\n    /** @type {VFileWithOutput<CompileResult> | undefined} */\n    let result\n\n    this.freeze()\n    assertParser('processSync', this.parser || this.Parser)\n    assertCompiler('processSync', this.compiler || this.Compiler)\n\n    this.process(file, realDone)\n    assertDone('processSync', 'process', complete)\n    assert(result, 'we either bailed on an error or have a tree')\n\n    return result\n\n    /**\n     * @type {ProcessCallback<VFileWithOutput<CompileResult>>}\n     */\n    function realDone(error, file) {\n      complete = true\n      bail(error)\n      result = file\n    }\n  }\n\n  /**\n   * Run *transformers* on a syntax tree.\n   *\n   * > **Note**: `run` freezes the processor if not already *frozen*.\n   *\n   * > **Note**: `run` performs the run phase, not other phases.\n   *\n   * @overload\n   * @param {HeadTree extends undefined ? Node : HeadTree} tree\n   * @param {RunCallback<TailTree extends undefined ? Node : TailTree>} done\n   * @returns {undefined}\n   *\n   * @overload\n   * @param {HeadTree extends undefined ? Node : HeadTree} tree\n   * @param {Compatible | undefined} file\n   * @param {RunCallback<TailTree extends undefined ? Node : TailTree>} done\n   * @returns {undefined}\n   *\n   * @overload\n   * @param {HeadTree extends undefined ? Node : HeadTree} tree\n   * @param {Compatible | undefined} [file]\n   * @returns {Promise<TailTree extends undefined ? Node : TailTree>}\n   *\n   * @param {HeadTree extends undefined ? Node : HeadTree} tree\n   *   Tree to transform and inspect.\n   * @param {(\n   *   RunCallback<TailTree extends undefined ? Node : TailTree> |\n   *   Compatible\n   * )} [file]\n   *   File associated with `node` (optional); any value accepted as `x` in\n   *   `new VFile(x)`.\n   * @param {RunCallback<TailTree extends undefined ? Node : TailTree>} [done]\n   *   Callback (optional).\n   * @returns {Promise<TailTree extends undefined ? Node : TailTree> | undefined}\n   *   Nothing if `done` is given.\n   *   Otherwise, a promise rejected with a fatal error or resolved with the\n   *   transformed tree.\n   */\n  run(tree, file, done) {\n    assertNode(tree)\n    this.freeze()\n\n    const transformers = this.transformers\n\n    if (!done && typeof file === 'function') {\n      done = file\n      file = undefined\n    }\n\n    return done ? executor(undefined, done) : new Promise(executor)\n\n    // Note: `void`s needed for TS.\n    /**\n     * @param {(\n     *   ((tree: TailTree extends undefined ? Node : TailTree) => undefined | void) |\n     *   undefined\n     * )} resolve\n     * @param {(error: Error) => undefined | void} reject\n     * @returns {undefined}\n     */\n    function executor(resolve, reject) {\n      assert(\n        typeof file !== 'function',\n        '`file` can’t be a `done` anymore, we checked'\n      )\n      const realFile = vfile(file)\n      transformers.run(tree, realFile, realDone)\n\n      /**\n       * @param {Error | undefined} error\n       * @param {Node} outputTree\n       * @param {VFile} file\n       * @returns {undefined}\n       */\n      function realDone(error, outputTree, file) {\n        const resultingTree =\n          /** @type {TailTree extends undefined ? Node : TailTree} */ (\n            outputTree || tree\n          )\n\n        if (error) {\n          reject(error)\n        } else if (resolve) {\n          resolve(resultingTree)\n        } else {\n          assert(done, '`done` is defined if `resolve` is not')\n          done(undefined, resultingTree, file)\n        }\n      }\n    }\n  }\n\n  /**\n   * Run *transformers* on a syntax tree.\n   *\n   * An error is thrown if asynchronous transforms are configured.\n   *\n   * > **Note**: `runSync` freezes the processor if not already *frozen*.\n   *\n   * > **Note**: `runSync` performs the run phase, not other phases.\n   *\n   * @param {HeadTree extends undefined ? Node : HeadTree} tree\n   *   Tree to transform and inspect.\n   * @param {Compatible | undefined} [file]\n   *   File associated with `node` (optional); any value accepted as `x` in\n   *   `new VFile(x)`.\n   * @returns {TailTree extends undefined ? Node : TailTree}\n   *   Transformed tree.\n   */\n  runSync(tree, file) {\n    /** @type {boolean} */\n    let complete = false\n    /** @type {(TailTree extends undefined ? Node : TailTree) | undefined} */\n    let result\n\n    this.run(tree, file, realDone)\n\n    assertDone('runSync', 'run', complete)\n    assert(result, 'we either bailed on an error or have a tree')\n    return result\n\n    /**\n     * @type {RunCallback<TailTree extends undefined ? Node : TailTree>}\n     */\n    function realDone(error, tree) {\n      bail(error)\n      result = tree\n      complete = true\n    }\n  }\n\n  /**\n   * Compile a syntax tree.\n   *\n   * > **Note**: `stringify` freezes the processor if not already *frozen*.\n   *\n   * > **Note**: `stringify` performs the stringify phase, not the run phase\n   * > or other phases.\n   *\n   * @param {CompileTree extends undefined ? Node : CompileTree} tree\n   *   Tree to compile.\n   * @param {Compatible | undefined} [file]\n   *   File associated with `node` (optional); any value accepted as `x` in\n   *   `new VFile(x)`.\n   * @returns {CompileResult extends undefined ? Value : CompileResult}\n   *   Textual representation of the tree (see note).\n   *\n   *   > **Note**: unified typically compiles by serializing: most compilers\n   *   > return `string` (or `Uint8Array`).\n   *   > Some compilers, such as the one configured with\n   *   > [`rehype-react`][rehype-react], return other values (in this case, a\n   *   > React tree).\n   *   > If you’re using a compiler that doesn’t serialize, expect different\n   *   > result values.\n   *   >\n   *   > To register custom results in TypeScript, add them to\n   *   > {@linkcode CompileResultMap}.\n   *\n   *   [rehype-react]: https://github.com/rehypejs/rehype-react\n   */\n  stringify(tree, file) {\n    this.freeze()\n    const realFile = vfile(file)\n    const compiler = this.compiler || this.Compiler\n    assertCompiler('stringify', compiler)\n    assertNode(tree)\n\n    return compiler(tree, realFile)\n  }\n\n  /**\n   * Configure the processor to use a plugin, a list of usable values, or a\n   * preset.\n   *\n   * If the processor is already using a plugin, the previous plugin\n   * configuration is changed based on the options that are passed in.\n   * In other words, the plugin is not added a second time.\n   *\n   * > **Note**: `use` cannot be called on *frozen* processors.\n   * > Call the processor first to create a new unfrozen processor.\n   *\n   * @example\n   *   There are many ways to pass plugins to `.use()`.\n   *   This example gives an overview:\n   *\n   *   ```js\n   *   import {unified} from 'unified'\n   *\n   *   unified()\n   *     // Plugin with options:\n   *     .use(pluginA, {x: true, y: true})\n   *     // Passing the same plugin again merges configuration (to `{x: true, y: false, z: true}`):\n   *     .use(pluginA, {y: false, z: true})\n   *     // Plugins:\n   *     .use([pluginB, pluginC])\n   *     // Two plugins, the second with options:\n   *     .use([pluginD, [pluginE, {}]])\n   *     // Preset with plugins and settings:\n   *     .use({plugins: [pluginF, [pluginG, {}]], settings: {position: false}})\n   *     // Settings only:\n   *     .use({settings: {position: false}})\n   *   ```\n   *\n   * @template {Array<unknown>} [Parameters=[]]\n   * @template {Node | string | undefined} [Input=undefined]\n   * @template [Output=Input]\n   *\n   * @overload\n   * @param {Preset | null | undefined} [preset]\n   * @returns {Processor<ParseTree, HeadTree, TailTree, CompileTree, CompileResult>}\n   *\n   * @overload\n   * @param {PluggableList} list\n   * @returns {Processor<ParseTree, HeadTree, TailTree, CompileTree, CompileResult>}\n   *\n   * @overload\n   * @param {Plugin<Parameters, Input, Output>} plugin\n   * @param {...(Parameters | [boolean])} parameters\n   * @returns {UsePlugin<ParseTree, HeadTree, TailTree, CompileTree, CompileResult, Input, Output>}\n   *\n   * @param {PluggableList | Plugin | Preset | null | undefined} value\n   *   Usable value.\n   * @param {...unknown} parameters\n   *   Parameters, when a plugin is given as a usable value.\n   * @returns {Processor<ParseTree, HeadTree, TailTree, CompileTree, CompileResult>}\n   *   Current processor.\n   */\n  use(value, ...parameters) {\n    const attachers = this.attachers\n    const namespace = this.namespace\n\n    assertUnfrozen('use', this.frozen)\n\n    if (value === null || value === undefined) {\n      // Empty.\n    } else if (typeof value === 'function') {\n      addPlugin(value, parameters)\n    } else if (typeof value === 'object') {\n      if (Array.isArray(value)) {\n        addList(value)\n      } else {\n        addPreset(value)\n      }\n    } else {\n      throw new TypeError('Expected usable value, not `' + value + '`')\n    }\n\n    return this\n\n    /**\n     * @param {Pluggable} value\n     * @returns {undefined}\n     */\n    function add(value) {\n      if (typeof value === 'function') {\n        addPlugin(value, [])\n      } else if (typeof value === 'object') {\n        if (Array.isArray(value)) {\n          const [plugin, ...parameters] =\n            /** @type {PluginTuple<Array<unknown>>} */ (value)\n          addPlugin(plugin, parameters)\n        } else {\n          addPreset(value)\n        }\n      } else {\n        throw new TypeError('Expected usable value, not `' + value + '`')\n      }\n    }\n\n    /**\n     * @param {Preset} result\n     * @returns {undefined}\n     */\n    function addPreset(result) {\n      if (!('plugins' in result) && !('settings' in result)) {\n        throw new Error(\n          'Expected usable value but received an empty preset, which is probably a mistake: presets typically come with `plugins` and sometimes with `settings`, but this has neither'\n        )\n      }\n\n      addList(result.plugins)\n\n      if (result.settings) {\n        namespace.settings = extend(true, namespace.settings, result.settings)\n      }\n    }\n\n    /**\n     * @param {PluggableList | null | undefined} plugins\n     * @returns {undefined}\n     */\n    function addList(plugins) {\n      let index = -1\n\n      if (plugins === null || plugins === undefined) {\n        // Empty.\n      } else if (Array.isArray(plugins)) {\n        while (++index < plugins.length) {\n          const thing = plugins[index]\n          add(thing)\n        }\n      } else {\n        throw new TypeError('Expected a list of plugins, not `' + plugins + '`')\n      }\n    }\n\n    /**\n     * @param {Plugin} plugin\n     * @param {Array<unknown>} parameters\n     * @returns {undefined}\n     */\n    function addPlugin(plugin, parameters) {\n      let index = -1\n      let entryIndex = -1\n\n      while (++index < attachers.length) {\n        if (attachers[index][0] === plugin) {\n          entryIndex = index\n          break\n        }\n      }\n\n      if (entryIndex === -1) {\n        attachers.push([plugin, ...parameters])\n      }\n      // Only set if there was at least a `primary` value, otherwise we’d change\n      // `arguments.length`.\n      else if (parameters.length > 0) {\n        let [primary, ...rest] = parameters\n        const currentPrimary = attachers[entryIndex][1]\n        if (isPlainObj(currentPrimary) && isPlainObj(primary)) {\n          primary = extend(true, currentPrimary, primary)\n        }\n\n        attachers[entryIndex] = [plugin, primary, ...rest]\n      }\n    }\n  }\n}\n\n// Note: this returns a *callable* instance.\n// That’s why it’s documented as a function.\n/**\n * Create a new processor.\n *\n * @example\n *   This example shows how a new processor can be created (from `remark`) and linked\n *   to **stdin**(4) and **stdout**(4).\n *\n *   ```js\n *   import process from 'node:process'\n *   import concatStream from 'concat-stream'\n *   import {remark} from 'remark'\n *\n *   process.stdin.pipe(\n *     concatStream(function (buf) {\n *       process.stdout.write(String(remark().processSync(buf)))\n *     })\n *   )\n *   ```\n *\n * @returns\n *   New *unfrozen* processor (`processor`).\n *\n *   This processor is configured to work the same as its ancestor.\n *   When the descendant processor is configured in the future it does not\n *   affect the ancestral processor.\n */\nexport const unified = new Processor().freeze()\n\n/**\n * Assert a parser is available.\n *\n * @param {string} name\n * @param {unknown} value\n * @returns {asserts value is Parser}\n */\nfunction assertParser(name, value) {\n  if (typeof value !== 'function') {\n    throw new TypeError('Cannot `' + name + '` without `parser`')\n  }\n}\n\n/**\n * Assert a compiler is available.\n *\n * @param {string} name\n * @param {unknown} value\n * @returns {asserts value is Compiler}\n */\nfunction assertCompiler(name, value) {\n  if (typeof value !== 'function') {\n    throw new TypeError('Cannot `' + name + '` without `compiler`')\n  }\n}\n\n/**\n * Assert the processor is not frozen.\n *\n * @param {string} name\n * @param {unknown} frozen\n * @returns {asserts frozen is false}\n */\nfunction assertUnfrozen(name, frozen) {\n  if (frozen) {\n    throw new Error(\n      'Cannot call `' +\n        name +\n        '` on a frozen processor.\\nCreate a new processor first, by calling it: use `processor()` instead of `processor`.'\n    )\n  }\n}\n\n/**\n * Assert `node` is a unist node.\n *\n * @param {unknown} node\n * @returns {asserts node is Node}\n */\nfunction assertNode(node) {\n  // `isPlainObj` unfortunately uses `any` instead of `unknown`.\n  // type-coverage:ignore-next-line\n  if (!isPlainObj(node) || typeof node.type !== 'string') {\n    throw new TypeError('Expected node, got `' + node + '`')\n    // Fine.\n  }\n}\n\n/**\n * Assert that `complete` is `true`.\n *\n * @param {string} name\n * @param {string} asyncName\n * @param {unknown} complete\n * @returns {asserts complete is true}\n */\nfunction assertDone(name, asyncName, complete) {\n  if (!complete) {\n    throw new Error(\n      '`' + name + '` finished async. Use `' + asyncName + '` instead'\n    )\n  }\n}\n\n/**\n * @param {Compatible | undefined} [value]\n * @returns {VFile}\n */\nfunction vfile(value) {\n  return looksLikeAVFile(value) ? value : new VFile(value)\n}\n\n/**\n * @param {Compatible | undefined} [value]\n * @returns {value is VFile}\n */\nfunction looksLikeAVFile(value) {\n  return Boolean(\n    value &&\n      typeof value === 'object' &&\n      'message' in value &&\n      'messages' in value\n  )\n}\n\n/**\n * @param {unknown} [value]\n * @returns {value is Value}\n */\nfunction looksLikeAValue(value) {\n  return typeof value === 'string' || isUint8Array(value)\n}\n\n/**\n * Assert `value` is an `Uint8Array`.\n *\n * @param {unknown} value\n *   thing.\n * @returns {value is Uint8Array}\n *   Whether `value` is an `Uint8Array`.\n */\nfunction isUint8Array(value) {\n  return Boolean(\n    value &&\n      typeof value === 'object' &&\n      'byteLength' in value &&\n      'byteOffset' in value\n  )\n}\n","/**\n * @typedef {import('unist').Node} Node\n * @typedef {import('unist').Parent} Parent\n */\n\n/**\n * @template Fn\n * @template Fallback\n * @typedef {Fn extends (value: any) => value is infer Thing ? Thing : Fallback} Predicate\n */\n\n/**\n * @callback Check\n *   Check that an arbitrary value is a node.\n * @param {unknown} this\n *   The given context.\n * @param {unknown} [node]\n *   Anything (typically a node).\n * @param {number | null | undefined} [index]\n *   The node’s position in its parent.\n * @param {Parent | null | undefined} [parent]\n *   The node’s parent.\n * @returns {boolean}\n *   Whether this is a node and passes a test.\n *\n * @typedef {Record<string, unknown> | Node} Props\n *   Object to check for equivalence.\n *\n *   Note: `Node` is included as it is common but is not indexable.\n *\n * @typedef {Array<Props | TestFunction | string> | Props | TestFunction | string | null | undefined} Test\n *   Check for an arbitrary node.\n *\n * @callback TestFunction\n *   Check if a node passes a test.\n * @param {unknown} this\n *   The given context.\n * @param {Node} node\n *   A node.\n * @param {number | undefined} [index]\n *   The node’s position in its parent.\n * @param {Parent | undefined} [parent]\n *   The node’s parent.\n * @returns {boolean | undefined | void}\n *   Whether this node passes the test.\n *\n *   Note: `void` is included until TS sees no return as `undefined`.\n */\n\n/**\n * Check if `node` is a `Node` and whether it passes the given test.\n *\n * @param {unknown} node\n *   Thing to check, typically `Node`.\n * @param {Test} test\n *   A check for a specific node.\n * @param {number | null | undefined} index\n *   The node’s position in its parent.\n * @param {Parent | null | undefined} parent\n *   The node’s parent.\n * @param {unknown} context\n *   Context object (`this`) to pass to `test` functions.\n * @returns {boolean}\n *   Whether `node` is a node and passes a test.\n */\nexport const is =\n  // Note: overloads in JSDoc can’t yet use different `@template`s.\n  /**\n   * @type {(\n   *   (<Condition extends string>(node: unknown, test: Condition, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node & {type: Condition}) &\n   *   (<Condition extends Props>(node: unknown, test: Condition, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node & Condition) &\n   *   (<Condition extends TestFunction>(node: unknown, test: Condition, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node & Predicate<Condition, Node>) &\n   *   ((node?: null | undefined) => false) &\n   *   ((node: unknown, test?: null | undefined, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node) &\n   *   ((node: unknown, test?: Test, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => boolean)\n   * )}\n   */\n  (\n    /**\n     * @param {unknown} [node]\n     * @param {Test} [test]\n     * @param {number | null | undefined} [index]\n     * @param {Parent | null | undefined} [parent]\n     * @param {unknown} [context]\n     * @returns {boolean}\n     */\n    // eslint-disable-next-line max-params\n    function (node, test, index, parent, context) {\n      const check = convert(test)\n\n      if (\n        index !== undefined &&\n        index !== null &&\n        (typeof index !== 'number' ||\n          index < 0 ||\n          index === Number.POSITIVE_INFINITY)\n      ) {\n        throw new Error('Expected positive finite index')\n      }\n\n      if (\n        parent !== undefined &&\n        parent !== null &&\n        (!is(parent) || !parent.children)\n      ) {\n        throw new Error('Expected parent node')\n      }\n\n      if (\n        (parent === undefined || parent === null) !==\n        (index === undefined || index === null)\n      ) {\n        throw new Error('Expected both parent and index')\n      }\n\n      return looksLikeANode(node)\n        ? check.call(context, node, index, parent)\n        : false\n    }\n  )\n\n/**\n * Generate an assertion from a test.\n *\n * Useful if you’re going to test many nodes, for example when creating a\n * utility where something else passes a compatible test.\n *\n * The created function is a bit faster because it expects valid input only:\n * a `node`, `index`, and `parent`.\n *\n * @param {Test} test\n *   *   when nullish, checks if `node` is a `Node`.\n *   *   when `string`, works like passing `(node) => node.type === test`.\n *   *   when `function` checks if function passed the node is true.\n *   *   when `object`, checks that all keys in test are in node, and that they have (strictly) equal values.\n *   *   when `array`, checks if any one of the subtests pass.\n * @returns {Check}\n *   An assertion.\n */\nexport const convert =\n  // Note: overloads in JSDoc can’t yet use different `@template`s.\n  /**\n   * @type {(\n   *   (<Condition extends string>(test: Condition) => (node: unknown, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node & {type: Condition}) &\n   *   (<Condition extends Props>(test: Condition) => (node: unknown, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node & Condition) &\n   *   (<Condition extends TestFunction>(test: Condition) => (node: unknown, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node & Predicate<Condition, Node>) &\n   *   ((test?: null | undefined) => (node?: unknown, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node) &\n   *   ((test?: Test) => Check)\n   * )}\n   */\n  (\n    /**\n     * @param {Test} [test]\n     * @returns {Check}\n     */\n    function (test) {\n      if (test === null || test === undefined) {\n        return ok\n      }\n\n      if (typeof test === 'function') {\n        return castFactory(test)\n      }\n\n      if (typeof test === 'object') {\n        return Array.isArray(test) ? anyFactory(test) : propsFactory(test)\n      }\n\n      if (typeof test === 'string') {\n        return typeFactory(test)\n      }\n\n      throw new Error('Expected function, string, or object as test')\n    }\n  )\n\n/**\n * @param {Array<Props | TestFunction | string>} tests\n * @returns {Check}\n */\nfunction anyFactory(tests) {\n  /** @type {Array<Check>} */\n  const checks = []\n  let index = -1\n\n  while (++index < tests.length) {\n    checks[index] = convert(tests[index])\n  }\n\n  return castFactory(any)\n\n  /**\n   * @this {unknown}\n   * @type {TestFunction}\n   */\n  function any(...parameters) {\n    let index = -1\n\n    while (++index < checks.length) {\n      if (checks[index].apply(this, parameters)) return true\n    }\n\n    return false\n  }\n}\n\n/**\n * Turn an object into a test for a node with a certain fields.\n *\n * @param {Props} check\n * @returns {Check}\n */\nfunction propsFactory(check) {\n  const checkAsRecord = /** @type {Record<string, unknown>} */ (check)\n\n  return castFactory(all)\n\n  /**\n   * @param {Node} node\n   * @returns {boolean}\n   */\n  function all(node) {\n    const nodeAsRecord = /** @type {Record<string, unknown>} */ (\n      /** @type {unknown} */ (node)\n    )\n\n    /** @type {string} */\n    let key\n\n    for (key in check) {\n      if (nodeAsRecord[key] !== checkAsRecord[key]) return false\n    }\n\n    return true\n  }\n}\n\n/**\n * Turn a string into a test for a node with a certain type.\n *\n * @param {string} check\n * @returns {Check}\n */\nfunction typeFactory(check) {\n  return castFactory(type)\n\n  /**\n   * @param {Node} node\n   */\n  function type(node) {\n    return node && node.type === check\n  }\n}\n\n/**\n * Turn a custom test into a test for a node that passes that test.\n *\n * @param {TestFunction} testFunction\n * @returns {Check}\n */\nfunction castFactory(testFunction) {\n  return check\n\n  /**\n   * @this {unknown}\n   * @type {Check}\n   */\n  function check(value, index, parent) {\n    return Boolean(\n      looksLikeANode(value) &&\n        testFunction.call(\n          this,\n          value,\n          typeof index === 'number' ? index : undefined,\n          parent || undefined\n        )\n    )\n  }\n}\n\nfunction ok() {\n  return true\n}\n\n/**\n * @param {unknown} value\n * @returns {value is Node}\n */\nfunction looksLikeANode(value) {\n  return value !== null && typeof value === 'object' && 'type' in value\n}\n","/**\n * @typedef {import('unist').Node} Node\n * @typedef {import('unist').Point} Point\n * @typedef {import('unist').Position} Position\n */\n\n/**\n * @typedef NodeLike\n * @property {string} type\n * @property {PositionLike | null | undefined} [position]\n *\n * @typedef PositionLike\n * @property {PointLike | null | undefined} [start]\n * @property {PointLike | null | undefined} [end]\n *\n * @typedef PointLike\n * @property {number | null | undefined} [line]\n * @property {number | null | undefined} [column]\n * @property {number | null | undefined} [offset]\n */\n\n/**\n * Get the ending point of `node`.\n *\n * @param node\n *   Node.\n * @returns\n *   Point.\n */\nexport const pointEnd = point('end')\n\n/**\n * Get the starting point of `node`.\n *\n * @param node\n *   Node.\n * @returns\n *   Point.\n */\nexport const pointStart = point('start')\n\n/**\n * Get the positional info of `node`.\n *\n * @param {'end' | 'start'} type\n *   Side.\n * @returns\n *   Getter.\n */\nfunction point(type) {\n  return point\n\n  /**\n   * Get the point info of `node` at a bound side.\n   *\n   * @param {Node | NodeLike | null | undefined} [node]\n   * @returns {Point | undefined}\n   */\n  function point(node) {\n    const point = (node && node.position && node.position[type]) || {}\n\n    if (\n      typeof point.line === 'number' &&\n      point.line > 0 &&\n      typeof point.column === 'number' &&\n      point.column > 0\n    ) {\n      return {\n        line: point.line,\n        column: point.column,\n        offset:\n          typeof point.offset === 'number' && point.offset > -1\n            ? point.offset\n            : undefined\n      }\n    }\n  }\n}\n\n/**\n * Get the positional info of `node`.\n *\n * @param {Node | NodeLike | null | undefined} [node]\n *   Node.\n * @returns {Position | undefined}\n *   Position.\n */\nexport function position(node) {\n  const start = pointStart(node)\n  const end = pointEnd(node)\n\n  if (start && end) {\n    return {start, end}\n  }\n}\n","/**\n * @typedef {import('unist').Node} Node\n * @typedef {import('unist').Point} Point\n * @typedef {import('unist').Position} Position\n */\n\n/**\n * @typedef NodeLike\n * @property {string} type\n * @property {PositionLike | null | undefined} [position]\n *\n * @typedef PointLike\n * @property {number | null | undefined} [line]\n * @property {number | null | undefined} [column]\n * @property {number | null | undefined} [offset]\n *\n * @typedef PositionLike\n * @property {PointLike | null | undefined} [start]\n * @property {PointLike | null | undefined} [end]\n */\n\n/**\n * Serialize the positional info of a point, position (start and end points),\n * or node.\n *\n * @param {Node | NodeLike | Point | PointLike | Position | PositionLike | null | undefined} [value]\n *   Node, position, or point.\n * @returns {string}\n *   Pretty printed positional info of a node (`string`).\n *\n *   In the format of a range `ls:cs-le:ce` (when given `node` or `position`)\n *   or a point `l:c` (when given `point`), where `l` stands for line, `c` for\n *   column, `s` for `start`, and `e` for end.\n *   An empty string (`''`) is returned if the given value is neither `node`,\n *   `position`, nor `point`.\n */\nexport function stringifyPosition(value) {\n  // Nothing.\n  if (!value || typeof value !== 'object') {\n    return ''\n  }\n\n  // Node.\n  if ('position' in value || 'type' in value) {\n    return position(value.position)\n  }\n\n  // Position.\n  if ('start' in value || 'end' in value) {\n    return position(value)\n  }\n\n  // Point.\n  if ('line' in value || 'column' in value) {\n    return point(value)\n  }\n\n  // ?\n  return ''\n}\n\n/**\n * @param {Point | PointLike | null | undefined} point\n * @returns {string}\n */\nfunction point(point) {\n  return index(point && point.line) + ':' + index(point && point.column)\n}\n\n/**\n * @param {Position | PositionLike | null | undefined} pos\n * @returns {string}\n */\nfunction position(pos) {\n  return point(pos && pos.start) + '-' + point(pos && pos.end)\n}\n\n/**\n * @param {number | null | undefined} value\n * @returns {number}\n */\nfunction index(value) {\n  return value && typeof value === 'number' ? value : 1\n}\n","/**\n * @param {string} d\n * @returns {string}\n */\nexport function color(d) {\n  return d\n}\n","/**\n * @typedef {import('unist').Node} UnistNode\n * @typedef {import('unist').Parent} UnistParent\n */\n\n/**\n * @typedef {Exclude<import('unist-util-is').Test, undefined> | undefined} Test\n *   Test from `unist-util-is`.\n *\n *   Note: we have remove and add `undefined`, because otherwise when generating\n *   automatic `.d.ts` files, TS tries to flatten paths from a local perspective,\n *   which doesn’t work when publishing on npm.\n */\n\n/**\n * @typedef {(\n *   Fn extends (value: any) => value is infer Thing\n *   ? Thing\n *   : Fallback\n * )} Predicate\n *   Get the value of a type guard `Fn`.\n * @template Fn\n *   Value; typically function that is a type guard (such as `(x): x is Y`).\n * @template Fallback\n *   Value to yield if `Fn` is not a type guard.\n */\n\n/**\n * @typedef {(\n *   Check extends null | undefined // No test.\n *   ? Value\n *   : Value extends {type: Check} // String (type) test.\n *   ? Value\n *   : Value extends Check // Partial test.\n *   ? Value\n *   : Check extends Function // Function test.\n *   ? Predicate<Check, Value> extends Value\n *     ? Predicate<Check, Value>\n *     : never\n *   : never // Some other test?\n * )} MatchesOne\n *   Check whether a node matches a primitive check in the type system.\n * @template Value\n *   Value; typically unist `Node`.\n * @template Check\n *   Value; typically `unist-util-is`-compatible test, but not arrays.\n */\n\n/**\n * @typedef {(\n *   Check extends Array<any>\n *   ? MatchesOne<Value, Check[keyof Check]>\n *   : MatchesOne<Value, Check>\n * )} Matches\n *   Check whether a node matches a check in the type system.\n * @template Value\n *   Value; typically unist `Node`.\n * @template Check\n *   Value; typically `unist-util-is`-compatible test.\n */\n\n/**\n * @typedef {0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10} Uint\n *   Number; capped reasonably.\n */\n\n/**\n * @typedef {I extends 0 ? 1 : I extends 1 ? 2 : I extends 2 ? 3 : I extends 3 ? 4 : I extends 4 ? 5 : I extends 5 ? 6 : I extends 6 ? 7 : I extends 7 ? 8 : I extends 8 ? 9 : 10} Increment\n *   Increment a number in the type system.\n * @template {Uint} [I=0]\n *   Index.\n */\n\n/**\n * @typedef {(\n *   Node extends UnistParent\n *   ? Node extends {children: Array<infer Children>}\n *     ? Child extends Children ? Node : never\n *     : never\n *   : never\n * )} InternalParent\n *   Collect nodes that can be parents of `Child`.\n * @template {UnistNode} Node\n *   All node types in a tree.\n * @template {UnistNode} Child\n *   Node to search for.\n */\n\n/**\n * @typedef {InternalParent<InclusiveDescendant<Tree>, Child>} Parent\n *   Collect nodes in `Tree` that can be parents of `Child`.\n * @template {UnistNode} Tree\n *   All node types in a tree.\n * @template {UnistNode} Child\n *   Node to search for.\n */\n\n/**\n * @typedef {(\n *   Depth extends Max\n *   ? never\n *   :\n *     | InternalParent<Node, Child>\n *     | InternalAncestor<Node, InternalParent<Node, Child>, Max, Increment<Depth>>\n * )} InternalAncestor\n *   Collect nodes in `Tree` that can be ancestors of `Child`.\n * @template {UnistNode} Node\n *   All node types in a tree.\n * @template {UnistNode} Child\n *   Node to search for.\n * @template {Uint} [Max=10]\n *   Max; searches up to this depth.\n * @template {Uint} [Depth=0]\n *   Current depth.\n */\n\n/**\n * @typedef {InternalAncestor<InclusiveDescendant<Tree>, Child>} Ancestor\n *   Collect nodes in `Tree` that can be ancestors of `Child`.\n * @template {UnistNode} Tree\n *   All node types in a tree.\n * @template {UnistNode} Child\n *   Node to search for.\n */\n\n/**\n * @typedef {(\n *   Tree extends UnistParent\n *     ? Depth extends Max\n *       ? Tree\n *       : Tree | InclusiveDescendant<Tree['children'][number], Max, Increment<Depth>>\n *     : Tree\n * )} InclusiveDescendant\n *   Collect all (inclusive) descendants of `Tree`.\n *\n *   > 👉 **Note**: for performance reasons, this seems to be the fastest way to\n *   > recurse without actually running into an infinite loop, which the\n *   > previous version did.\n *   >\n *   > Practically, a max of `2` is typically enough assuming a `Root` is\n *   > passed, but it doesn’t improve performance.\n *   > It gets higher with `List > ListItem > Table > TableRow > TableCell`.\n *   > Using up to `10` doesn’t hurt or help either.\n * @template {UnistNode} Tree\n *   Tree type.\n * @template {Uint} [Max=10]\n *   Max; searches up to this depth.\n * @template {Uint} [Depth=0]\n *   Current depth.\n */\n\n/**\n * @typedef {'skip' | boolean} Action\n *   Union of the action types.\n *\n * @typedef {number} Index\n *   Move to the sibling at `index` next (after node itself is completely\n *   traversed).\n *\n *   Useful if mutating the tree, such as removing the node the visitor is\n *   currently on, or any of its previous siblings.\n *   Results less than 0 or greater than or equal to `children.length` stop\n *   traversing the parent.\n *\n * @typedef {[(Action | null | undefined | void)?, (Index | null | undefined)?]} ActionTuple\n *   List with one or two values, the first an action, the second an index.\n *\n * @typedef {Action | ActionTuple | Index | null | undefined | void} VisitorResult\n *   Any value that can be returned from a visitor.\n */\n\n/**\n * @callback Visitor\n *   Handle a node (matching `test`, if given).\n *\n *   Visitors are free to transform `node`.\n *   They can also transform the parent of node (the last of `ancestors`).\n *\n *   Replacing `node` itself, if `SKIP` is not returned, still causes its\n *   descendants to be walked (which is a bug).\n *\n *   When adding or removing previous siblings of `node` (or next siblings, in\n *   case of reverse), the `Visitor` should return a new `Index` to specify the\n *   sibling to traverse after `node` is traversed.\n *   Adding or removing next siblings of `node` (or previous siblings, in case\n *   of reverse) is handled as expected without needing to return a new `Index`.\n *\n *   Removing the children property of an ancestor still results in them being\n *   traversed.\n * @param {Visited} node\n *   Found node.\n * @param {Array<VisitedParents>} ancestors\n *   Ancestors of `node`.\n * @returns {VisitorResult}\n *   What to do next.\n *\n *   An `Index` is treated as a tuple of `[CONTINUE, Index]`.\n *   An `Action` is treated as a tuple of `[Action]`.\n *\n *   Passing a tuple back only makes sense if the `Action` is `SKIP`.\n *   When the `Action` is `EXIT`, that action can be returned.\n *   When the `Action` is `CONTINUE`, `Index` can be returned.\n * @template {UnistNode} [Visited=UnistNode]\n *   Visited node type.\n * @template {UnistParent} [VisitedParents=UnistParent]\n *   Ancestor type.\n */\n\n/**\n * @typedef {Visitor<Matches<InclusiveDescendant<Tree>, Check>, Ancestor<Tree, Matches<InclusiveDescendant<Tree>, Check>>>} BuildVisitor\n *   Build a typed `Visitor` function from a tree and a test.\n *\n *   It will infer which values are passed as `node` and which as `parents`.\n * @template {UnistNode} [Tree=UnistNode]\n *   Tree type.\n * @template {Test} [Check=Test]\n *   Test type.\n */\n\nimport {convert} from 'unist-util-is'\nimport {color} from 'unist-util-visit-parents/do-not-use-color'\n\n/** @type {Readonly<ActionTuple>} */\nconst empty = []\n\n/**\n * Continue traversing as normal.\n */\nexport const CONTINUE = true\n\n/**\n * Stop traversing immediately.\n */\nexport const EXIT = false\n\n/**\n * Do not traverse this node’s children.\n */\nexport const SKIP = 'skip'\n\n/**\n * Visit nodes, with ancestral information.\n *\n * This algorithm performs *depth-first* *tree traversal* in *preorder*\n * (**NLR**) or if `reverse` is given, in *reverse preorder* (**NRL**).\n *\n * You can choose for which nodes `visitor` is called by passing a `test`.\n * For complex tests, you should test yourself in `visitor`, as it will be\n * faster and will have improved type information.\n *\n * Walking the tree is an intensive task.\n * Make use of the return values of the visitor when possible.\n * Instead of walking a tree multiple times, walk it once, use `unist-util-is`\n * to check if a node matches, and then perform different operations.\n *\n * You can change the tree.\n * See `Visitor` for more info.\n *\n * @overload\n * @param {Tree} tree\n * @param {Check} check\n * @param {BuildVisitor<Tree, Check>} visitor\n * @param {boolean | null | undefined} [reverse]\n * @returns {undefined}\n *\n * @overload\n * @param {Tree} tree\n * @param {BuildVisitor<Tree>} visitor\n * @param {boolean | null | undefined} [reverse]\n * @returns {undefined}\n *\n * @param {UnistNode} tree\n *   Tree to traverse.\n * @param {Visitor | Test} test\n *   `unist-util-is`-compatible test\n * @param {Visitor | boolean | null | undefined} [visitor]\n *   Handle each node.\n * @param {boolean | null | undefined} [reverse]\n *   Traverse in reverse preorder (NRL) instead of the default preorder (NLR).\n * @returns {undefined}\n *   Nothing.\n *\n * @template {UnistNode} Tree\n *   Node type.\n * @template {Test} Check\n *   `unist-util-is`-compatible test.\n */\nexport function visitParents(tree, test, visitor, reverse) {\n  /** @type {Test} */\n  let check\n\n  if (typeof test === 'function' && typeof visitor !== 'function') {\n    reverse = visitor\n    // @ts-expect-error no visitor given, so `visitor` is test.\n    visitor = test\n  } else {\n    // @ts-expect-error visitor given, so `test` isn’t a visitor.\n    check = test\n  }\n\n  const is = convert(check)\n  const step = reverse ? -1 : 1\n\n  factory(tree, undefined, [])()\n\n  /**\n   * @param {UnistNode} node\n   * @param {number | undefined} index\n   * @param {Array<UnistParent>} parents\n   */\n  function factory(node, index, parents) {\n    const value = /** @type {Record<string, unknown>} */ (\n      node && typeof node === 'object' ? node : {}\n    )\n\n    if (typeof value.type === 'string') {\n      const name =\n        // `hast`\n        typeof value.tagName === 'string'\n          ? value.tagName\n          : // `xast`\n          typeof value.name === 'string'\n          ? value.name\n          : undefined\n\n      Object.defineProperty(visit, 'name', {\n        value:\n          'node (' + color(node.type + (name ? '<' + name + '>' : '')) + ')'\n      })\n    }\n\n    return visit\n\n    function visit() {\n      /** @type {Readonly<ActionTuple>} */\n      let result = empty\n      /** @type {Readonly<ActionTuple>} */\n      let subresult\n      /** @type {number} */\n      let offset\n      /** @type {Array<UnistParent>} */\n      let grandparents\n\n      if (!test || is(node, index, parents[parents.length - 1] || undefined)) {\n        // @ts-expect-error: `visitor` is now a visitor.\n        result = toResult(visitor(node, parents))\n\n        if (result[0] === EXIT) {\n          return result\n        }\n      }\n\n      if ('children' in node && node.children) {\n        const nodeAsParent = /** @type {UnistParent} */ (node)\n\n        if (nodeAsParent.children && result[0] !== SKIP) {\n          offset = (reverse ? nodeAsParent.children.length : -1) + step\n          grandparents = parents.concat(nodeAsParent)\n\n          while (offset > -1 && offset < nodeAsParent.children.length) {\n            const child = nodeAsParent.children[offset]\n\n            subresult = factory(child, offset, grandparents)()\n\n            if (subresult[0] === EXIT) {\n              return subresult\n            }\n\n            offset =\n              typeof subresult[1] === 'number' ? subresult[1] : offset + step\n          }\n        }\n      }\n\n      return result\n    }\n  }\n}\n\n/**\n * Turn a return value into a clean result.\n *\n * @param {VisitorResult} value\n *   Valid return values from visitors.\n * @returns {Readonly<ActionTuple>}\n *   Clean result.\n */\nfunction toResult(value) {\n  if (Array.isArray(value)) {\n    return value\n  }\n\n  if (typeof value === 'number') {\n    return [CONTINUE, value]\n  }\n\n  return value === null || value === undefined ? empty : [value]\n}\n","/**\n * @typedef {import('unist').Node} UnistNode\n * @typedef {import('unist').Parent} UnistParent\n * @typedef {import('unist-util-visit-parents').VisitorResult} VisitorResult\n */\n\n/**\n * @typedef {Exclude<import('unist-util-is').Test, undefined> | undefined} Test\n *   Test from `unist-util-is`.\n *\n *   Note: we have remove and add `undefined`, because otherwise when generating\n *   automatic `.d.ts` files, TS tries to flatten paths from a local perspective,\n *   which doesn’t work when publishing on npm.\n */\n\n// To do: use types from `unist-util-visit-parents` when it’s released.\n\n/**\n * @typedef {(\n *   Fn extends (value: any) => value is infer Thing\n *   ? Thing\n *   : Fallback\n * )} Predicate\n *   Get the value of a type guard `Fn`.\n * @template Fn\n *   Value; typically function that is a type guard (such as `(x): x is Y`).\n * @template Fallback\n *   Value to yield if `Fn` is not a type guard.\n */\n\n/**\n * @typedef {(\n *   Check extends null | undefined // No test.\n *   ? Value\n *   : Value extends {type: Check} // String (type) test.\n *   ? Value\n *   : Value extends Check // Partial test.\n *   ? Value\n *   : Check extends Function // Function test.\n *   ? Predicate<Check, Value> extends Value\n *     ? Predicate<Check, Value>\n *     : never\n *   : never // Some other test?\n * )} MatchesOne\n *   Check whether a node matches a primitive check in the type system.\n * @template Value\n *   Value; typically unist `Node`.\n * @template Check\n *   Value; typically `unist-util-is`-compatible test, but not arrays.\n */\n\n/**\n * @typedef {(\n *   Check extends Array<any>\n *   ? MatchesOne<Value, Check[keyof Check]>\n *   : MatchesOne<Value, Check>\n * )} Matches\n *   Check whether a node matches a check in the type system.\n * @template Value\n *   Value; typically unist `Node`.\n * @template Check\n *   Value; typically `unist-util-is`-compatible test.\n */\n\n/**\n * @typedef {0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10} Uint\n *   Number; capped reasonably.\n */\n\n/**\n * @typedef {I extends 0 ? 1 : I extends 1 ? 2 : I extends 2 ? 3 : I extends 3 ? 4 : I extends 4 ? 5 : I extends 5 ? 6 : I extends 6 ? 7 : I extends 7 ? 8 : I extends 8 ? 9 : 10} Increment\n *   Increment a number in the type system.\n * @template {Uint} [I=0]\n *   Index.\n */\n\n/**\n * @typedef {(\n *   Node extends UnistParent\n *   ? Node extends {children: Array<infer Children>}\n *     ? Child extends Children ? Node : never\n *     : never\n *   : never\n * )} InternalParent\n *   Collect nodes that can be parents of `Child`.\n * @template {UnistNode} Node\n *   All node types in a tree.\n * @template {UnistNode} Child\n *   Node to search for.\n */\n\n/**\n * @typedef {InternalParent<InclusiveDescendant<Tree>, Child>} Parent\n *   Collect nodes in `Tree` that can be parents of `Child`.\n * @template {UnistNode} Tree\n *   All node types in a tree.\n * @template {UnistNode} Child\n *   Node to search for.\n */\n\n/**\n * @typedef {(\n *   Depth extends Max\n *   ? never\n *   :\n *     | InternalParent<Node, Child>\n *     | InternalAncestor<Node, InternalParent<Node, Child>, Max, Increment<Depth>>\n * )} InternalAncestor\n *   Collect nodes in `Tree` that can be ancestors of `Child`.\n * @template {UnistNode} Node\n *   All node types in a tree.\n * @template {UnistNode} Child\n *   Node to search for.\n * @template {Uint} [Max=10]\n *   Max; searches up to this depth.\n * @template {Uint} [Depth=0]\n *   Current depth.\n */\n\n/**\n * @typedef {(\n *   Tree extends UnistParent\n *     ? Depth extends Max\n *       ? Tree\n *       : Tree | InclusiveDescendant<Tree['children'][number], Max, Increment<Depth>>\n *     : Tree\n * )} InclusiveDescendant\n *   Collect all (inclusive) descendants of `Tree`.\n *\n *   > 👉 **Note**: for performance reasons, this seems to be the fastest way to\n *   > recurse without actually running into an infinite loop, which the\n *   > previous version did.\n *   >\n *   > Practically, a max of `2` is typically enough assuming a `Root` is\n *   > passed, but it doesn’t improve performance.\n *   > It gets higher with `List > ListItem > Table > TableRow > TableCell`.\n *   > Using up to `10` doesn’t hurt or help either.\n * @template {UnistNode} Tree\n *   Tree type.\n * @template {Uint} [Max=10]\n *   Max; searches up to this depth.\n * @template {Uint} [Depth=0]\n *   Current depth.\n */\n\n/**\n * @callback Visitor\n *   Handle a node (matching `test`, if given).\n *\n *   Visitors are free to transform `node`.\n *   They can also transform `parent`.\n *\n *   Replacing `node` itself, if `SKIP` is not returned, still causes its\n *   descendants to be walked (which is a bug).\n *\n *   When adding or removing previous siblings of `node` (or next siblings, in\n *   case of reverse), the `Visitor` should return a new `Index` to specify the\n *   sibling to traverse after `node` is traversed.\n *   Adding or removing next siblings of `node` (or previous siblings, in case\n *   of reverse) is handled as expected without needing to return a new `Index`.\n *\n *   Removing the children property of `parent` still results in them being\n *   traversed.\n * @param {Visited} node\n *   Found node.\n * @param {Visited extends UnistNode ? number | undefined : never} index\n *   Index of `node` in `parent`.\n * @param {Ancestor extends UnistParent ? Ancestor | undefined : never} parent\n *   Parent of `node`.\n * @returns {VisitorResult}\n *   What to do next.\n *\n *   An `Index` is treated as a tuple of `[CONTINUE, Index]`.\n *   An `Action` is treated as a tuple of `[Action]`.\n *\n *   Passing a tuple back only makes sense if the `Action` is `SKIP`.\n *   When the `Action` is `EXIT`, that action can be returned.\n *   When the `Action` is `CONTINUE`, `Index` can be returned.\n * @template {UnistNode} [Visited=UnistNode]\n *   Visited node type.\n * @template {UnistParent} [Ancestor=UnistParent]\n *   Ancestor type.\n */\n\n/**\n * @typedef {Visitor<Visited, Parent<Ancestor, Visited>>} BuildVisitorFromMatch\n *   Build a typed `Visitor` function from a node and all possible parents.\n *\n *   It will infer which values are passed as `node` and which as `parent`.\n * @template {UnistNode} Visited\n *   Node type.\n * @template {UnistParent} Ancestor\n *   Parent type.\n */\n\n/**\n * @typedef {(\n *   BuildVisitorFromMatch<\n *     Matches<Descendant, Check>,\n *     Extract<Descendant, UnistParent>\n *   >\n * )} BuildVisitorFromDescendants\n *   Build a typed `Visitor` function from a list of descendants and a test.\n *\n *   It will infer which values are passed as `node` and which as `parent`.\n * @template {UnistNode} Descendant\n *   Node type.\n * @template {Test} Check\n *   Test type.\n */\n\n/**\n * @typedef {(\n *   BuildVisitorFromDescendants<\n *     InclusiveDescendant<Tree>,\n *     Check\n *   >\n * )} BuildVisitor\n *   Build a typed `Visitor` function from a tree and a test.\n *\n *   It will infer which values are passed as `node` and which as `parent`.\n * @template {UnistNode} [Tree=UnistNode]\n *   Node type.\n * @template {Test} [Check=Test]\n *   Test type.\n */\n\nimport {visitParents} from 'unist-util-visit-parents'\n\nexport {CONTINUE, EXIT, SKIP} from 'unist-util-visit-parents'\n\n/**\n * Visit nodes.\n *\n * This algorithm performs *depth-first* *tree traversal* in *preorder*\n * (**NLR**) or if `reverse` is given, in *reverse preorder* (**NRL**).\n *\n * You can choose for which nodes `visitor` is called by passing a `test`.\n * For complex tests, you should test yourself in `visitor`, as it will be\n * faster and will have improved type information.\n *\n * Walking the tree is an intensive task.\n * Make use of the return values of the visitor when possible.\n * Instead of walking a tree multiple times, walk it once, use `unist-util-is`\n * to check if a node matches, and then perform different operations.\n *\n * You can change the tree.\n * See `Visitor` for more info.\n *\n * @overload\n * @param {Tree} tree\n * @param {Check} check\n * @param {BuildVisitor<Tree, Check>} visitor\n * @param {boolean | null | undefined} [reverse]\n * @returns {undefined}\n *\n * @overload\n * @param {Tree} tree\n * @param {BuildVisitor<Tree>} visitor\n * @param {boolean | null | undefined} [reverse]\n * @returns {undefined}\n *\n * @param {UnistNode} tree\n *   Tree to traverse.\n * @param {Visitor | Test} testOrVisitor\n *   `unist-util-is`-compatible test (optional, omit to pass a visitor).\n * @param {Visitor | boolean | null | undefined} [visitorOrReverse]\n *   Handle each node (when test is omitted, pass `reverse`).\n * @param {boolean | null | undefined} [maybeReverse=false]\n *   Traverse in reverse preorder (NRL) instead of the default preorder (NLR).\n * @returns {undefined}\n *   Nothing.\n *\n * @template {UnistNode} Tree\n *   Node type.\n * @template {Test} Check\n *   `unist-util-is`-compatible test.\n */\nexport function visit(tree, testOrVisitor, visitorOrReverse, maybeReverse) {\n  /** @type {boolean | null | undefined} */\n  let reverse\n  /** @type {Test} */\n  let test\n  /** @type {Visitor} */\n  let visitor\n\n  if (\n    typeof testOrVisitor === 'function' &&\n    typeof visitorOrReverse !== 'function'\n  ) {\n    test = undefined\n    visitor = testOrVisitor\n    reverse = visitorOrReverse\n  } else {\n    // @ts-expect-error: assume the overload with test was given.\n    test = testOrVisitor\n    // @ts-expect-error: assume the overload with test was given.\n    visitor = visitorOrReverse\n    reverse = maybeReverse\n  }\n\n  visitParents(tree, test, overload, reverse)\n\n  /**\n   * @param {UnistNode} node\n   * @param {Array<UnistParent>} parents\n   */\n  function overload(node, parents) {\n    const parent = parents[parents.length - 1]\n    const index = parent ? parent.children.indexOf(node) : undefined\n    return visitor(node, index, parent)\n  }\n}\n","/**\n * @typedef {import('unist').Node} Node\n * @typedef {import('unist').Point} Point\n * @typedef {import('unist').Position} Position\n */\n\n/**\n * @typedef {object & {type: string, position?: Position | undefined}} NodeLike\n *\n * @typedef Options\n *   Configuration.\n * @property {Array<Node> | null | undefined} [ancestors]\n *   Stack of (inclusive) ancestor nodes surrounding the message (optional).\n * @property {Error | null | undefined} [cause]\n *   Original error cause of the message (optional).\n * @property {Point | Position | null | undefined} [place]\n *   Place of message (optional).\n * @property {string | null | undefined} [ruleId]\n *   Category of message (optional, example: `'my-rule'`).\n * @property {string | null | undefined} [source]\n *   Namespace of who sent the message (optional, example: `'my-package'`).\n */\n\nimport {stringifyPosition} from 'unist-util-stringify-position'\n\n/**\n * Message.\n */\nexport class VFileMessage extends Error {\n  /**\n   * Create a message for `reason`.\n   *\n   * > 🪦 **Note**: also has obsolete signatures.\n   *\n   * @overload\n   * @param {string} reason\n   * @param {Options | null | undefined} [options]\n   * @returns\n   *\n   * @overload\n   * @param {string} reason\n   * @param {Node | NodeLike | null | undefined} parent\n   * @param {string | null | undefined} [origin]\n   * @returns\n   *\n   * @overload\n   * @param {string} reason\n   * @param {Point | Position | null | undefined} place\n   * @param {string | null | undefined} [origin]\n   * @returns\n   *\n   * @overload\n   * @param {string} reason\n   * @param {string | null | undefined} [origin]\n   * @returns\n   *\n   * @overload\n   * @param {Error | VFileMessage} cause\n   * @param {Node | NodeLike | null | undefined} parent\n   * @param {string | null | undefined} [origin]\n   * @returns\n   *\n   * @overload\n   * @param {Error | VFileMessage} cause\n   * @param {Point | Position | null | undefined} place\n   * @param {string | null | undefined} [origin]\n   * @returns\n   *\n   * @overload\n   * @param {Error | VFileMessage} cause\n   * @param {string | null | undefined} [origin]\n   * @returns\n   *\n   * @param {Error | VFileMessage | string} causeOrReason\n   *   Reason for message, should use markdown.\n   * @param {Node | NodeLike | Options | Point | Position | string | null | undefined} [optionsOrParentOrPlace]\n   *   Configuration (optional).\n   * @param {string | null | undefined} [origin]\n   *   Place in code where the message originates (example:\n   *   `'my-package:my-rule'` or `'my-rule'`).\n   * @returns\n   *   Instance of `VFileMessage`.\n   */\n  // eslint-disable-next-line complexity\n  constructor(causeOrReason, optionsOrParentOrPlace, origin) {\n    super()\n\n    if (typeof optionsOrParentOrPlace === 'string') {\n      origin = optionsOrParentOrPlace\n      optionsOrParentOrPlace = undefined\n    }\n\n    /** @type {string} */\n    let reason = ''\n    /** @type {Options} */\n    let options = {}\n    let legacyCause = false\n\n    if (optionsOrParentOrPlace) {\n      // Point.\n      if (\n        'line' in optionsOrParentOrPlace &&\n        'column' in optionsOrParentOrPlace\n      ) {\n        options = {place: optionsOrParentOrPlace}\n      }\n      // Position.\n      else if (\n        'start' in optionsOrParentOrPlace &&\n        'end' in optionsOrParentOrPlace\n      ) {\n        options = {place: optionsOrParentOrPlace}\n      }\n      // Node.\n      else if ('type' in optionsOrParentOrPlace) {\n        options = {\n          ancestors: [optionsOrParentOrPlace],\n          place: optionsOrParentOrPlace.position\n        }\n      }\n      // Options.\n      else {\n        options = {...optionsOrParentOrPlace}\n      }\n    }\n\n    if (typeof causeOrReason === 'string') {\n      reason = causeOrReason\n    }\n    // Error.\n    else if (!options.cause && causeOrReason) {\n      legacyCause = true\n      reason = causeOrReason.message\n      options.cause = causeOrReason\n    }\n\n    if (!options.ruleId && !options.source && typeof origin === 'string') {\n      const index = origin.indexOf(':')\n\n      if (index === -1) {\n        options.ruleId = origin\n      } else {\n        options.source = origin.slice(0, index)\n        options.ruleId = origin.slice(index + 1)\n      }\n    }\n\n    if (!options.place && options.ancestors && options.ancestors) {\n      const parent = options.ancestors[options.ancestors.length - 1]\n\n      if (parent) {\n        options.place = parent.position\n      }\n    }\n\n    const start =\n      options.place && 'start' in options.place\n        ? options.place.start\n        : options.place\n\n    /* eslint-disable no-unused-expressions */\n    /**\n     * Stack of ancestor nodes surrounding the message.\n     *\n     * @type {Array<Node> | undefined}\n     */\n    this.ancestors = options.ancestors || undefined\n\n    /**\n     * Original error cause of the message.\n     *\n     * @type {Error | undefined}\n     */\n    this.cause = options.cause || undefined\n\n    /**\n     * Starting column of message.\n     *\n     * @type {number | undefined}\n     */\n    this.column = start ? start.column : undefined\n\n    /**\n     * State of problem.\n     *\n     * * `true` — error, file not usable\n     * * `false` — warning, change may be needed\n     * * `undefined` — change likely not needed\n     *\n     * @type {boolean | null | undefined}\n     */\n    this.fatal = undefined\n\n    /**\n     * Path of a file (used throughout the `VFile` ecosystem).\n     *\n     * @type {string | undefined}\n     */\n    this.file\n\n    // Field from `Error`.\n    /**\n     * Reason for message.\n     *\n     * @type {string}\n     */\n    this.message = reason\n\n    /**\n     * Starting line of error.\n     *\n     * @type {number | undefined}\n     */\n    this.line = start ? start.line : undefined\n\n    // Field from `Error`.\n    /**\n     * Serialized positional info of message.\n     *\n     * On normal errors, this would be something like `ParseError`, buit in\n     * `VFile` messages we use this space to show where an error happened.\n     */\n    this.name = stringifyPosition(options.place) || '1:1'\n\n    /**\n     * Place of message.\n     *\n     * @type {Point | Position | undefined}\n     */\n    this.place = options.place || undefined\n\n    /**\n     * Reason for message, should use markdown.\n     *\n     * @type {string}\n     */\n    this.reason = this.message\n\n    /**\n     * Category of message (example: `'my-rule'`).\n     *\n     * @type {string | undefined}\n     */\n    this.ruleId = options.ruleId || undefined\n\n    /**\n     * Namespace of message (example: `'my-package'`).\n     *\n     * @type {string | undefined}\n     */\n    this.source = options.source || undefined\n\n    // Field from `Error`.\n    /**\n     * Stack of message.\n     *\n     * This is used by normal errors to show where something happened in\n     * programming code, irrelevant for `VFile` messages,\n     *\n     * @type {string}\n     */\n    this.stack =\n      legacyCause && options.cause && typeof options.cause.stack === 'string'\n        ? options.cause.stack\n        : ''\n\n    // The following fields are “well known”.\n    // Not standard.\n    // Feel free to add other non-standard fields to your messages.\n\n    /**\n     * Specify the source value that’s being reported, which is deemed\n     * incorrect.\n     *\n     * @type {string | undefined}\n     */\n    this.actual\n\n    /**\n     * Suggest acceptable values that can be used instead of `actual`.\n     *\n     * @type {Array<string> | undefined}\n     */\n    this.expected\n\n    /**\n     * Long form description of the message (you should use markdown).\n     *\n     * @type {string | undefined}\n     */\n    this.note\n\n    /**\n     * Link to docs for the message.\n     *\n     * > 👉 **Note**: this must be an absolute URL that can be passed as `x`\n     * > to `new URL(x)`.\n     *\n     * @type {string | undefined}\n     */\n    this.url\n    /* eslint-enable no-unused-expressions */\n  }\n}\n\nVFileMessage.prototype.file = ''\nVFileMessage.prototype.name = ''\nVFileMessage.prototype.reason = ''\nVFileMessage.prototype.message = ''\nVFileMessage.prototype.stack = ''\nVFileMessage.prototype.column = undefined\nVFileMessage.prototype.line = undefined\nVFileMessage.prototype.ancestors = undefined\nVFileMessage.prototype.cause = undefined\nVFileMessage.prototype.fatal = undefined\nVFileMessage.prototype.place = undefined\nVFileMessage.prototype.ruleId = undefined\nVFileMessage.prototype.source = undefined\n","/**\n * @import {Node, Point, Position} from 'unist'\n * @import {Options as MessageOptions} from 'vfile-message'\n * @import {Compatible, Data, Map, Options, Value} from 'vfile'\n */\n\n/**\n * @typedef {object & {type: string, position?: Position | undefined}} NodeLike\n */\n\nimport {VFileMessage} from 'vfile-message'\nimport {minpath} from '#minpath'\nimport {minproc} from '#minproc'\nimport {urlToPath, isUrl} from '#minurl'\n\n/**\n * Order of setting (least specific to most), we need this because otherwise\n * `{stem: 'a', path: '~/b.js'}` would throw, as a path is needed before a\n * stem can be set.\n */\nconst order = /** @type {const} */ ([\n  'history',\n  'path',\n  'basename',\n  'stem',\n  'extname',\n  'dirname'\n])\n\nexport class VFile {\n  /**\n   * Create a new virtual file.\n   *\n   * `options` is treated as:\n   *\n   * *   `string` or `Uint8Array` — `{value: options}`\n   * *   `URL` — `{path: options}`\n   * *   `VFile` — shallow copies its data over to the new file\n   * *   `object` — all fields are shallow copied over to the new file\n   *\n   * Path related fields are set in the following order (least specific to\n   * most specific): `history`, `path`, `basename`, `stem`, `extname`,\n   * `dirname`.\n   *\n   * You cannot set `dirname` or `extname` without setting either `history`,\n   * `path`, `basename`, or `stem` too.\n   *\n   * @param {Compatible | null | undefined} [value]\n   *   File value.\n   * @returns\n   *   New instance.\n   */\n  constructor(value) {\n    /** @type {Options | VFile} */\n    let options\n\n    if (!value) {\n      options = {}\n    } else if (isUrl(value)) {\n      options = {path: value}\n    } else if (typeof value === 'string' || isUint8Array(value)) {\n      options = {value}\n    } else {\n      options = value\n    }\n\n    /* eslint-disable no-unused-expressions */\n\n    /**\n     * Base of `path` (default: `process.cwd()` or `'/'` in browsers).\n     *\n     * @type {string}\n     */\n    // Prevent calling `cwd` (which could be expensive) if it’s not needed;\n    // the empty string will be overridden in the next block.\n    this.cwd = 'cwd' in options ? '' : minproc.cwd()\n\n    /**\n     * Place to store custom info (default: `{}`).\n     *\n     * It’s OK to store custom data directly on the file but moving it to\n     * `data` is recommended.\n     *\n     * @type {Data}\n     */\n    this.data = {}\n\n    /**\n     * List of file paths the file moved between.\n     *\n     * The first is the original path and the last is the current path.\n     *\n     * @type {Array<string>}\n     */\n    this.history = []\n\n    /**\n     * List of messages associated with the file.\n     *\n     * @type {Array<VFileMessage>}\n     */\n    this.messages = []\n\n    /**\n     * Raw value.\n     *\n     * @type {Value}\n     */\n    this.value\n\n    // The below are non-standard, they are “well-known”.\n    // As in, used in several tools.\n    /**\n     * Source map.\n     *\n     * This type is equivalent to the `RawSourceMap` type from the `source-map`\n     * module.\n     *\n     * @type {Map | null | undefined}\n     */\n    this.map\n\n    /**\n     * Custom, non-string, compiled, representation.\n     *\n     * This is used by unified to store non-string results.\n     * One example is when turning markdown into React nodes.\n     *\n     * @type {unknown}\n     */\n    this.result\n\n    /**\n     * Whether a file was saved to disk.\n     *\n     * This is used by vfile reporters.\n     *\n     * @type {boolean}\n     */\n    this.stored\n    /* eslint-enable no-unused-expressions */\n\n    // Set path related properties in the correct order.\n    let index = -1\n\n    while (++index < order.length) {\n      const field = order[index]\n\n      // Note: we specifically use `in` instead of `hasOwnProperty` to accept\n      // `vfile`s too.\n      if (\n        field in options &&\n        options[field] !== undefined &&\n        options[field] !== null\n      ) {\n        // @ts-expect-error: TS doesn’t understand basic reality.\n        this[field] = field === 'history' ? [...options[field]] : options[field]\n      }\n    }\n\n    /** @type {string} */\n    let field\n\n    // Set non-path related properties.\n    for (field in options) {\n      // @ts-expect-error: fine to set other things.\n      if (!order.includes(field)) {\n        // @ts-expect-error: fine to set other things.\n        this[field] = options[field]\n      }\n    }\n  }\n\n  /**\n   * Get the basename (including extname) (example: `'index.min.js'`).\n   *\n   * @returns {string | undefined}\n   *   Basename.\n   */\n  get basename() {\n    return typeof this.path === 'string'\n      ? minpath.basename(this.path)\n      : undefined\n  }\n\n  /**\n   * Set basename (including extname) (`'index.min.js'`).\n   *\n   * Cannot contain path separators (`'/'` on unix, macOS, and browsers, `'\\'`\n   * on windows).\n   * Cannot be nullified (use `file.path = file.dirname` instead).\n   *\n   * @param {string} basename\n   *   Basename.\n   * @returns {undefined}\n   *   Nothing.\n   */\n  set basename(basename) {\n    assertNonEmpty(basename, 'basename')\n    assertPart(basename, 'basename')\n    this.path = minpath.join(this.dirname || '', basename)\n  }\n\n  /**\n   * Get the parent path (example: `'~'`).\n   *\n   * @returns {string | undefined}\n   *   Dirname.\n   */\n  get dirname() {\n    return typeof this.path === 'string'\n      ? minpath.dirname(this.path)\n      : undefined\n  }\n\n  /**\n   * Set the parent path (example: `'~'`).\n   *\n   * Cannot be set if there’s no `path` yet.\n   *\n   * @param {string | undefined} dirname\n   *   Dirname.\n   * @returns {undefined}\n   *   Nothing.\n   */\n  set dirname(dirname) {\n    assertPath(this.basename, 'dirname')\n    this.path = minpath.join(dirname || '', this.basename)\n  }\n\n  /**\n   * Get the extname (including dot) (example: `'.js'`).\n   *\n   * @returns {string | undefined}\n   *   Extname.\n   */\n  get extname() {\n    return typeof this.path === 'string'\n      ? minpath.extname(this.path)\n      : undefined\n  }\n\n  /**\n   * Set the extname (including dot) (example: `'.js'`).\n   *\n   * Cannot contain path separators (`'/'` on unix, macOS, and browsers, `'\\'`\n   * on windows).\n   * Cannot be set if there’s no `path` yet.\n   *\n   * @param {string | undefined} extname\n   *   Extname.\n   * @returns {undefined}\n   *   Nothing.\n   */\n  set extname(extname) {\n    assertPart(extname, 'extname')\n    assertPath(this.dirname, 'extname')\n\n    if (extname) {\n      if (extname.codePointAt(0) !== 46 /* `.` */) {\n        throw new Error('`extname` must start with `.`')\n      }\n\n      if (extname.includes('.', 1)) {\n        throw new Error('`extname` cannot contain multiple dots')\n      }\n    }\n\n    this.path = minpath.join(this.dirname, this.stem + (extname || ''))\n  }\n\n  /**\n   * Get the full path (example: `'~/index.min.js'`).\n   *\n   * @returns {string}\n   *   Path.\n   */\n  get path() {\n    return this.history[this.history.length - 1]\n  }\n\n  /**\n   * Set the full path (example: `'~/index.min.js'`).\n   *\n   * Cannot be nullified.\n   * You can set a file URL (a `URL` object with a `file:` protocol) which will\n   * be turned into a path with `url.fileURLToPath`.\n   *\n   * @param {URL | string} path\n   *   Path.\n   * @returns {undefined}\n   *   Nothing.\n   */\n  set path(path) {\n    if (isUrl(path)) {\n      path = urlToPath(path)\n    }\n\n    assertNonEmpty(path, 'path')\n\n    if (this.path !== path) {\n      this.history.push(path)\n    }\n  }\n\n  /**\n   * Get the stem (basename w/o extname) (example: `'index.min'`).\n   *\n   * @returns {string | undefined}\n   *   Stem.\n   */\n  get stem() {\n    return typeof this.path === 'string'\n      ? minpath.basename(this.path, this.extname)\n      : undefined\n  }\n\n  /**\n   * Set the stem (basename w/o extname) (example: `'index.min'`).\n   *\n   * Cannot contain path separators (`'/'` on unix, macOS, and browsers, `'\\'`\n   * on windows).\n   * Cannot be nullified (use `file.path = file.dirname` instead).\n   *\n   * @param {string} stem\n   *   Stem.\n   * @returns {undefined}\n   *   Nothing.\n   */\n  set stem(stem) {\n    assertNonEmpty(stem, 'stem')\n    assertPart(stem, 'stem')\n    this.path = minpath.join(this.dirname || '', stem + (this.extname || ''))\n  }\n\n  // Normal prototypal methods.\n  /**\n   * Create a fatal message for `reason` associated with the file.\n   *\n   * The `fatal` field of the message is set to `true` (error; file not usable)\n   * and the `file` field is set to the current file path.\n   * The message is added to the `messages` field on `file`.\n   *\n   * > 🪦 **Note**: also has obsolete signatures.\n   *\n   * @overload\n   * @param {string} reason\n   * @param {MessageOptions | null | undefined} [options]\n   * @returns {never}\n   *\n   * @overload\n   * @param {string} reason\n   * @param {Node | NodeLike | null | undefined} parent\n   * @param {string | null | undefined} [origin]\n   * @returns {never}\n   *\n   * @overload\n   * @param {string} reason\n   * @param {Point | Position | null | undefined} place\n   * @param {string | null | undefined} [origin]\n   * @returns {never}\n   *\n   * @overload\n   * @param {string} reason\n   * @param {string | null | undefined} [origin]\n   * @returns {never}\n   *\n   * @overload\n   * @param {Error | VFileMessage} cause\n   * @param {Node | NodeLike | null | undefined} parent\n   * @param {string | null | undefined} [origin]\n   * @returns {never}\n   *\n   * @overload\n   * @param {Error | VFileMessage} cause\n   * @param {Point | Position | null | undefined} place\n   * @param {string | null | undefined} [origin]\n   * @returns {never}\n   *\n   * @overload\n   * @param {Error | VFileMessage} cause\n   * @param {string | null | undefined} [origin]\n   * @returns {never}\n   *\n   * @param {Error | VFileMessage | string} causeOrReason\n   *   Reason for message, should use markdown.\n   * @param {Node | NodeLike | MessageOptions | Point | Position | string | null | undefined} [optionsOrParentOrPlace]\n   *   Configuration (optional).\n   * @param {string | null | undefined} [origin]\n   *   Place in code where the message originates (example:\n   *   `'my-package:my-rule'` or `'my-rule'`).\n   * @returns {never}\n   *   Never.\n   * @throws {VFileMessage}\n   *   Message.\n   */\n  fail(causeOrReason, optionsOrParentOrPlace, origin) {\n    // @ts-expect-error: the overloads are fine.\n    const message = this.message(causeOrReason, optionsOrParentOrPlace, origin)\n\n    message.fatal = true\n\n    throw message\n  }\n\n  /**\n   * Create an info message for `reason` associated with the file.\n   *\n   * The `fatal` field of the message is set to `undefined` (info; change\n   * likely not needed) and the `file` field is set to the current file path.\n   * The message is added to the `messages` field on `file`.\n   *\n   * > 🪦 **Note**: also has obsolete signatures.\n   *\n   * @overload\n   * @param {string} reason\n   * @param {MessageOptions | null | undefined} [options]\n   * @returns {VFileMessage}\n   *\n   * @overload\n   * @param {string} reason\n   * @param {Node | NodeLike | null | undefined} parent\n   * @param {string | null | undefined} [origin]\n   * @returns {VFileMessage}\n   *\n   * @overload\n   * @param {string} reason\n   * @param {Point | Position | null | undefined} place\n   * @param {string | null | undefined} [origin]\n   * @returns {VFileMessage}\n   *\n   * @overload\n   * @param {string} reason\n   * @param {string | null | undefined} [origin]\n   * @returns {VFileMessage}\n   *\n   * @overload\n   * @param {Error | VFileMessage} cause\n   * @param {Node | NodeLike | null | undefined} parent\n   * @param {string | null | undefined} [origin]\n   * @returns {VFileMessage}\n   *\n   * @overload\n   * @param {Error | VFileMessage} cause\n   * @param {Point | Position | null | undefined} place\n   * @param {string | null | undefined} [origin]\n   * @returns {VFileMessage}\n   *\n   * @overload\n   * @param {Error | VFileMessage} cause\n   * @param {string | null | undefined} [origin]\n   * @returns {VFileMessage}\n   *\n   * @param {Error | VFileMessage | string} causeOrReason\n   *   Reason for message, should use markdown.\n   * @param {Node | NodeLike | MessageOptions | Point | Position | string | null | undefined} [optionsOrParentOrPlace]\n   *   Configuration (optional).\n   * @param {string | null | undefined} [origin]\n   *   Place in code where the message originates (example:\n   *   `'my-package:my-rule'` or `'my-rule'`).\n   * @returns {VFileMessage}\n   *   Message.\n   */\n  info(causeOrReason, optionsOrParentOrPlace, origin) {\n    // @ts-expect-error: the overloads are fine.\n    const message = this.message(causeOrReason, optionsOrParentOrPlace, origin)\n\n    message.fatal = undefined\n\n    return message\n  }\n\n  /**\n   * Create a message for `reason` associated with the file.\n   *\n   * The `fatal` field of the message is set to `false` (warning; change may be\n   * needed) and the `file` field is set to the current file path.\n   * The message is added to the `messages` field on `file`.\n   *\n   * > 🪦 **Note**: also has obsolete signatures.\n   *\n   * @overload\n   * @param {string} reason\n   * @param {MessageOptions | null | undefined} [options]\n   * @returns {VFileMessage}\n   *\n   * @overload\n   * @param {string} reason\n   * @param {Node | NodeLike | null | undefined} parent\n   * @param {string | null | undefined} [origin]\n   * @returns {VFileMessage}\n   *\n   * @overload\n   * @param {string} reason\n   * @param {Point | Position | null | undefined} place\n   * @param {string | null | undefined} [origin]\n   * @returns {VFileMessage}\n   *\n   * @overload\n   * @param {string} reason\n   * @param {string | null | undefined} [origin]\n   * @returns {VFileMessage}\n   *\n   * @overload\n   * @param {Error | VFileMessage} cause\n   * @param {Node | NodeLike | null | undefined} parent\n   * @param {string | null | undefined} [origin]\n   * @returns {VFileMessage}\n   *\n   * @overload\n   * @param {Error | VFileMessage} cause\n   * @param {Point | Position | null | undefined} place\n   * @param {string | null | undefined} [origin]\n   * @returns {VFileMessage}\n   *\n   * @overload\n   * @param {Error | VFileMessage} cause\n   * @param {string | null | undefined} [origin]\n   * @returns {VFileMessage}\n   *\n   * @param {Error | VFileMessage | string} causeOrReason\n   *   Reason for message, should use markdown.\n   * @param {Node | NodeLike | MessageOptions | Point | Position | string | null | undefined} [optionsOrParentOrPlace]\n   *   Configuration (optional).\n   * @param {string | null | undefined} [origin]\n   *   Place in code where the message originates (example:\n   *   `'my-package:my-rule'` or `'my-rule'`).\n   * @returns {VFileMessage}\n   *   Message.\n   */\n  message(causeOrReason, optionsOrParentOrPlace, origin) {\n    const message = new VFileMessage(\n      // @ts-expect-error: the overloads are fine.\n      causeOrReason,\n      optionsOrParentOrPlace,\n      origin\n    )\n\n    if (this.path) {\n      message.name = this.path + ':' + message.name\n      message.file = this.path\n    }\n\n    message.fatal = false\n\n    this.messages.push(message)\n\n    return message\n  }\n\n  /**\n   * Serialize the file.\n   *\n   * > **Note**: which encodings are supported depends on the engine.\n   * > For info on Node.js, see:\n   * > <https://nodejs.org/api/util.html#whatwg-supported-encodings>.\n   *\n   * @param {string | null | undefined} [encoding='utf8']\n   *   Character encoding to understand `value` as when it’s a `Uint8Array`\n   *   (default: `'utf-8'`).\n   * @returns {string}\n   *   Serialized file.\n   */\n  toString(encoding) {\n    if (this.value === undefined) {\n      return ''\n    }\n\n    if (typeof this.value === 'string') {\n      return this.value\n    }\n\n    const decoder = new TextDecoder(encoding || undefined)\n    return decoder.decode(this.value)\n  }\n}\n\n/**\n * Assert that `part` is not a path (as in, does not contain `path.sep`).\n *\n * @param {string | null | undefined} part\n *   File path part.\n * @param {string} name\n *   Part name.\n * @returns {undefined}\n *   Nothing.\n */\nfunction assertPart(part, name) {\n  if (part && part.includes(minpath.sep)) {\n    throw new Error(\n      '`' + name + '` cannot be a path: did not expect `' + minpath.sep + '`'\n    )\n  }\n}\n\n/**\n * Assert that `part` is not empty.\n *\n * @param {string | undefined} part\n *   Thing.\n * @param {string} name\n *   Part name.\n * @returns {asserts part is string}\n *   Nothing.\n */\nfunction assertNonEmpty(part, name) {\n  if (!part) {\n    throw new Error('`' + name + '` cannot be empty')\n  }\n}\n\n/**\n * Assert `path` exists.\n *\n * @param {string | undefined} path\n *   Path.\n * @param {string} name\n *   Dependency name.\n * @returns {asserts path is string}\n *   Nothing.\n */\nfunction assertPath(path, name) {\n  if (!path) {\n    throw new Error('Setting `' + name + '` requires `path` to be set too')\n  }\n}\n\n/**\n * Assert `value` is an `Uint8Array`.\n *\n * @param {unknown} value\n *   thing.\n * @returns {value is Uint8Array}\n *   Whether `value` is an `Uint8Array`.\n */\nfunction isUint8Array(value) {\n  return Boolean(\n    value &&\n      typeof value === 'object' &&\n      'byteLength' in value &&\n      'byteOffset' in value\n  )\n}\n","// A derivative work based on:\n// <https://github.com/browserify/path-browserify>.\n// Which is licensed:\n//\n// MIT License\n//\n// Copyright (c) 2013 James Halliday\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy of\n// this software and associated documentation files (the \"Software\"), to deal in\n// the Software without restriction, including without limitation the rights to\n// use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\n// the Software, and to permit persons to whom the Software is furnished to do so,\n// subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in all\n// copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\n// FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\n// COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\n// IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\n// CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n// A derivative work based on:\n//\n// Parts of that are extracted from Node’s internal `path` module:\n// <https://github.com/nodejs/node/blob/master/lib/path.js>.\n// Which is licensed:\n//\n// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nexport const minpath = {basename, dirname, extname, join, sep: '/'}\n\n/* eslint-disable max-depth, complexity */\n\n/**\n * Get the basename from a path.\n *\n * @param {string} path\n *   File path.\n * @param {string | null | undefined} [extname]\n *   Extension to strip.\n * @returns {string}\n *   Stem or basename.\n */\nfunction basename(path, extname) {\n  if (extname !== undefined && typeof extname !== 'string') {\n    throw new TypeError('\"ext\" argument must be a string')\n  }\n\n  assertPath(path)\n  let start = 0\n  let end = -1\n  let index = path.length\n  /** @type {boolean | undefined} */\n  let seenNonSlash\n\n  if (\n    extname === undefined ||\n    extname.length === 0 ||\n    extname.length > path.length\n  ) {\n    while (index--) {\n      if (path.codePointAt(index) === 47 /* `/` */) {\n        // If we reached a path separator that was not part of a set of path\n        // separators at the end of the string, stop now.\n        if (seenNonSlash) {\n          start = index + 1\n          break\n        }\n      } else if (end < 0) {\n        // We saw the first non-path separator, mark this as the end of our\n        // path component.\n        seenNonSlash = true\n        end = index + 1\n      }\n    }\n\n    return end < 0 ? '' : path.slice(start, end)\n  }\n\n  if (extname === path) {\n    return ''\n  }\n\n  let firstNonSlashEnd = -1\n  let extnameIndex = extname.length - 1\n\n  while (index--) {\n    if (path.codePointAt(index) === 47 /* `/` */) {\n      // If we reached a path separator that was not part of a set of path\n      // separators at the end of the string, stop now.\n      if (seenNonSlash) {\n        start = index + 1\n        break\n      }\n    } else {\n      if (firstNonSlashEnd < 0) {\n        // We saw the first non-path separator, remember this index in case\n        // we need it if the extension ends up not matching.\n        seenNonSlash = true\n        firstNonSlashEnd = index + 1\n      }\n\n      if (extnameIndex > -1) {\n        // Try to match the explicit extension.\n        if (path.codePointAt(index) === extname.codePointAt(extnameIndex--)) {\n          if (extnameIndex < 0) {\n            // We matched the extension, so mark this as the end of our path\n            // component\n            end = index\n          }\n        } else {\n          // Extension does not match, so our result is the entire path\n          // component\n          extnameIndex = -1\n          end = firstNonSlashEnd\n        }\n      }\n    }\n  }\n\n  if (start === end) {\n    end = firstNonSlashEnd\n  } else if (end < 0) {\n    end = path.length\n  }\n\n  return path.slice(start, end)\n}\n\n/**\n * Get the dirname from a path.\n *\n * @param {string} path\n *   File path.\n * @returns {string}\n *   File path.\n */\nfunction dirname(path) {\n  assertPath(path)\n\n  if (path.length === 0) {\n    return '.'\n  }\n\n  let end = -1\n  let index = path.length\n  /** @type {boolean | undefined} */\n  let unmatchedSlash\n\n  // Prefix `--` is important to not run on `0`.\n  while (--index) {\n    if (path.codePointAt(index) === 47 /* `/` */) {\n      if (unmatchedSlash) {\n        end = index\n        break\n      }\n    } else if (!unmatchedSlash) {\n      // We saw the first non-path separator\n      unmatchedSlash = true\n    }\n  }\n\n  return end < 0\n    ? path.codePointAt(0) === 47 /* `/` */\n      ? '/'\n      : '.'\n    : end === 1 && path.codePointAt(0) === 47 /* `/` */\n      ? '//'\n      : path.slice(0, end)\n}\n\n/**\n * Get an extname from a path.\n *\n * @param {string} path\n *   File path.\n * @returns {string}\n *   Extname.\n */\nfunction extname(path) {\n  assertPath(path)\n\n  let index = path.length\n\n  let end = -1\n  let startPart = 0\n  let startDot = -1\n  // Track the state of characters (if any) we see before our first dot and\n  // after any path separator we find.\n  let preDotState = 0\n  /** @type {boolean | undefined} */\n  let unmatchedSlash\n\n  while (index--) {\n    const code = path.codePointAt(index)\n\n    if (code === 47 /* `/` */) {\n      // If we reached a path separator that was not part of a set of path\n      // separators at the end of the string, stop now.\n      if (unmatchedSlash) {\n        startPart = index + 1\n        break\n      }\n\n      continue\n    }\n\n    if (end < 0) {\n      // We saw the first non-path separator, mark this as the end of our\n      // extension.\n      unmatchedSlash = true\n      end = index + 1\n    }\n\n    if (code === 46 /* `.` */) {\n      // If this is our first dot, mark it as the start of our extension.\n      if (startDot < 0) {\n        startDot = index\n      } else if (preDotState !== 1) {\n        preDotState = 1\n      }\n    } else if (startDot > -1) {\n      // We saw a non-dot and non-path separator before our dot, so we should\n      // have a good chance at having a non-empty extension.\n      preDotState = -1\n    }\n  }\n\n  if (\n    startDot < 0 ||\n    end < 0 ||\n    // We saw a non-dot character immediately before the dot.\n    preDotState === 0 ||\n    // The (right-most) trimmed path component is exactly `..`.\n    (preDotState === 1 && startDot === end - 1 && startDot === startPart + 1)\n  ) {\n    return ''\n  }\n\n  return path.slice(startDot, end)\n}\n\n/**\n * Join segments from a path.\n *\n * @param {Array<string>} segments\n *   Path segments.\n * @returns {string}\n *   File path.\n */\nfunction join(...segments) {\n  let index = -1\n  /** @type {string | undefined} */\n  let joined\n\n  while (++index < segments.length) {\n    assertPath(segments[index])\n\n    if (segments[index]) {\n      joined =\n        joined === undefined ? segments[index] : joined + '/' + segments[index]\n    }\n  }\n\n  return joined === undefined ? '.' : normalize(joined)\n}\n\n/**\n * Normalize a basic file path.\n *\n * @param {string} path\n *   File path.\n * @returns {string}\n *   File path.\n */\n// Note: `normalize` is not exposed as `path.normalize`, so some code is\n// manually removed from it.\nfunction normalize(path) {\n  assertPath(path)\n\n  const absolute = path.codePointAt(0) === 47 /* `/` */\n\n  // Normalize the path according to POSIX rules.\n  let value = normalizeString(path, !absolute)\n\n  if (value.length === 0 && !absolute) {\n    value = '.'\n  }\n\n  if (value.length > 0 && path.codePointAt(path.length - 1) === 47 /* / */) {\n    value += '/'\n  }\n\n  return absolute ? '/' + value : value\n}\n\n/**\n * Resolve `.` and `..` elements in a path with directory names.\n *\n * @param {string} path\n *   File path.\n * @param {boolean} allowAboveRoot\n *   Whether `..` can move above root.\n * @returns {string}\n *   File path.\n */\nfunction normalizeString(path, allowAboveRoot) {\n  let result = ''\n  let lastSegmentLength = 0\n  let lastSlash = -1\n  let dots = 0\n  let index = -1\n  /** @type {number | undefined} */\n  let code\n  /** @type {number} */\n  let lastSlashIndex\n\n  while (++index <= path.length) {\n    if (index < path.length) {\n      code = path.codePointAt(index)\n    } else if (code === 47 /* `/` */) {\n      break\n    } else {\n      code = 47 /* `/` */\n    }\n\n    if (code === 47 /* `/` */) {\n      if (lastSlash === index - 1 || dots === 1) {\n        // Empty.\n      } else if (lastSlash !== index - 1 && dots === 2) {\n        if (\n          result.length < 2 ||\n          lastSegmentLength !== 2 ||\n          result.codePointAt(result.length - 1) !== 46 /* `.` */ ||\n          result.codePointAt(result.length - 2) !== 46 /* `.` */\n        ) {\n          if (result.length > 2) {\n            lastSlashIndex = result.lastIndexOf('/')\n\n            if (lastSlashIndex !== result.length - 1) {\n              if (lastSlashIndex < 0) {\n                result = ''\n                lastSegmentLength = 0\n              } else {\n                result = result.slice(0, lastSlashIndex)\n                lastSegmentLength = result.length - 1 - result.lastIndexOf('/')\n              }\n\n              lastSlash = index\n              dots = 0\n              continue\n            }\n          } else if (result.length > 0) {\n            result = ''\n            lastSegmentLength = 0\n            lastSlash = index\n            dots = 0\n            continue\n          }\n        }\n\n        if (allowAboveRoot) {\n          result = result.length > 0 ? result + '/..' : '..'\n          lastSegmentLength = 2\n        }\n      } else {\n        if (result.length > 0) {\n          result += '/' + path.slice(lastSlash + 1, index)\n        } else {\n          result = path.slice(lastSlash + 1, index)\n        }\n\n        lastSegmentLength = index - lastSlash - 1\n      }\n\n      lastSlash = index\n      dots = 0\n    } else if (code === 46 /* `.` */ && dots > -1) {\n      dots++\n    } else {\n      dots = -1\n    }\n  }\n\n  return result\n}\n\n/**\n * Make sure `path` is a string.\n *\n * @param {string} path\n *   File path.\n * @returns {asserts path is string}\n *   Nothing.\n */\nfunction assertPath(path) {\n  if (typeof path !== 'string') {\n    throw new TypeError(\n      'Path must be a string. Received ' + JSON.stringify(path)\n    )\n  }\n}\n\n/* eslint-enable max-depth, complexity */\n","// Somewhat based on:\n// <https://github.com/defunctzombie/node-process/blob/master/browser.js>.\n// But I don’t think one tiny line of code can be copyrighted. 😅\nexport const minproc = {cwd}\n\nfunction cwd() {\n  return '/'\n}\n","import {isUrl} from './minurl.shared.js'\n\nexport {isUrl} from './minurl.shared.js'\n\n// See: <https://github.com/nodejs/node/blob/6a3403c/lib/internal/url.js>\n\n/**\n * @param {URL | string} path\n *   File URL.\n * @returns {string}\n *   File URL.\n */\nexport function urlToPath(path) {\n  if (typeof path === 'string') {\n    path = new URL(path)\n  } else if (!isUrl(path)) {\n    /** @type {NodeJS.ErrnoException} */\n    const error = new TypeError(\n      'The \"path\" argument must be of type string or an instance of URL. Received `' +\n        path +\n        '`'\n    )\n    error.code = 'ERR_INVALID_ARG_TYPE'\n    throw error\n  }\n\n  if (path.protocol !== 'file:') {\n    /** @type {NodeJS.ErrnoException} */\n    const error = new TypeError('The URL must be of scheme file')\n    error.code = 'ERR_INVALID_URL_SCHEME'\n    throw error\n  }\n\n  return getPathFromURLPosix(path)\n}\n\n/**\n * Get a path from a POSIX URL.\n *\n * @param {URL} url\n *   URL.\n * @returns {string}\n *   File path.\n */\nfunction getPathFromURLPosix(url) {\n  if (url.hostname !== '') {\n    /** @type {NodeJS.ErrnoException} */\n    const error = new TypeError(\n      'File URL host must be \"localhost\" or empty on darwin'\n    )\n    error.code = 'ERR_INVALID_FILE_URL_HOST'\n    throw error\n  }\n\n  const pathname = url.pathname\n  let index = -1\n\n  while (++index < pathname.length) {\n    if (\n      pathname.codePointAt(index) === 37 /* `%` */ &&\n      pathname.codePointAt(index + 1) === 50 /* `2` */\n    ) {\n      const third = pathname.codePointAt(index + 2)\n      if (third === 70 /* `F` */ || third === 102 /* `f` */) {\n        /** @type {NodeJS.ErrnoException} */\n        const error = new TypeError(\n          'File URL path must not include encoded / characters'\n        )\n        error.code = 'ERR_INVALID_FILE_URL_PATH'\n        throw error\n      }\n    }\n  }\n\n  return decodeURIComponent(pathname)\n}\n","/**\n * Checks if a value has the shape of a WHATWG URL object.\n *\n * Using a symbol or instanceof would not be able to recognize URL objects\n * coming from other implementations (e.g. in Electron), so instead we are\n * checking some well known properties for a lack of a better test.\n *\n * We use `href` and `protocol` as they are the only properties that are\n * easy to retrieve and calculate due to the lazy nature of the getters.\n *\n * We check for auth attribute to distinguish legacy url instance with\n * WHATWG URL instance.\n *\n * @param {unknown} fileUrlOrPath\n *   File path or URL.\n * @returns {fileUrlOrPath is URL}\n *   Whether it’s a URL.\n */\n// From: <https://github.com/nodejs/node/blob/6a3403c/lib/internal/url.js#L720>\nexport function isUrl(fileUrlOrPath) {\n  return Boolean(\n    fileUrlOrPath !== null &&\n      typeof fileUrlOrPath === 'object' &&\n      'href' in fileUrlOrPath &&\n      fileUrlOrPath.href &&\n      'protocol' in fileUrlOrPath &&\n      fileUrlOrPath.protocol &&\n      // @ts-expect-error: indexing is fine.\n      fileUrlOrPath.auth === undefined\n  )\n}\n"],"names":["hasOwn","hasOwnProperty","classNames","args","classes","i","length","arg","appendClass","parseValue","Array","isArray","toString","Object","prototype","includes","key","call","value","newClass","e","t","n","r","document","a","s","prepend","d","singleTag","container","querySelector","getElementsByTagName","u","indexOf","push","c","charCodeAt","substring","styleSheet","cssText","appendChild","createTextNode","createElement","setAttribute","attributes","keys","insertAdjacentElement","modules_a1601a7d","Title","fontStyle","bold","children","maxRows","ellipsis","loading","rest","getTitleClassName","className","style","suppressHydrationWarning","whiteSpace","modules_e00953a9","Icon","props","width","height","parentRef","dataTestId","iconPath","setIconPath","useState","updateSvg","colorSvg","childrenObject","result","map","child","type","originalProps","updatedProps","stroke","fill","updateSvgHandler","getParentTextColor","textColor","current","window","getComputedStyle","getPropertyValue","getIconColorByClassName","iconColor","elements","getElementsByClassName","disabled","handleMouseOver","hoverColor","handleMouseLeave","prevColor","addEventListener","removeEventListener","getSvgWidth","w","getSvgHeight","h","viewBox","xmlns","getClassName","title","dynemicHeight","Button","icon","onClick","buttonRef","useRef","ref","Picker","options","placeholder","onOptionSelected","description","pickerButtonRef","isOpen","setIsOpen","overlayTop","setOverlayTop","selectedIndex","setSelectedIndex","useEffect","offsetHeight","arrow","strokeWidth","strokeLinecap","strokeLinejoin","top","o","index","option","onOptionClick","MenuItem","active","label","itemRef","defaultAvatarUrl","Avatar","size","imgSrc","topOverlayContainer","bottomOverlayContainer","transformContainer","hideBorders","renderBottomOverlayContainer","renderOverlaysContainer","getImgContainerHolderClassName","forEach","src","alt","modules_9325e332","StatusIndicator","status","rounded","getStatusIndicatorContentClassName","statusText","charAt","toUpperCase","slice","renderStatusIndicatorText","Input","error","leftIcon","rightIcon","maxLength","lines","onChange","onKeyDown","text","setText","textLength","setTextLength","characterCount","inputRef","classNameValue","event","newText","target","tabIndex","name","rows","Footer","links","termsLinks","logo","companyInfo","socialLinks","logoAction","appLinks","href","rel","link","itemsLink","path","term","Speciality","speciality","renderTitle","renderIcon","kindCaseCaterpillar","iconName","replace","specialityIcon","iconUrl","specialityTitle","titleFontStyleDesktop","titleFontStyleMobile","descriptionFontStyleDesktop","descriptionFontStyleMobile","MyOrdersRightArrow","withReview","reviewType","renderReview","cx","cy","MyOrdersAdvisorCell","advisorName","advisorServiceName","advisorStatus","orderTitle","labels","labelMobile","labelBrowser","renderMyOrdersAdvisorCell","modules_1a8f5c5e","Label","labelType","modules_c372949e","MyOrdersSectionDivider","liveChat","fillRule","clipRule","videoCall","voiceCall","clock","MyOrdersOrderCell","orderSubject","orderCreatedAt","orderDescription","getOrderIcon","renderOrderTitle","orderIcon","renderOrderIcon","ChatBubble","message","isUser","time","avatarSrc","now","Date","hours","getHours","minutes","getMinutes","ampm","timeOnBubble","padStart","Table","tableColumnsHeaders","data","tableTotalData","header","item","date","invoiceId","paymentData","currency","amount","source","total","cashBack","percentage","DurationItem","duration","durationText","durationSubText","mostPopular","selected","onDurationSelected","isNewUser","topLabel","useYourBalanceText","secondsText","bottomContainer","priceContainer","selectedClassName","renderAdditionalText","useCallback","FilterTab","activeColorClass","modules_21d2064f","Switch","id","checked","onSwitcherChange","htmlFor","displayName","playButtonIcon","modules_547ff120","PlayButton","RatingIcon","modules_a2428c96","Rating","rating","withBorder","modules_fbf318e2","ChannelsCard","liveModes","getLiveModeIcon","modeType","modeState","skeleton","renderLiveModesIcons","liveMode","mode","correctModeType","getCorrectModeType","renderLiveModeIcon","modules_1229886e","LiveModesPrices","liveModeMinPrices","liveModeMinPrice","liveModeMinSalesPrice","liveModeFromText","liveModeMinPriceTitle","liveModeMinSalesPriceTitle","liveModeFromTextFontStyle","liveModeMinPriceTitleFontStyle","liveModeMinPriceCrosePriceFontStyle","priceValue","priceClassName","renderPrice","modules_4204a613","ReadingSinceAndCount","readingData","readingsCount","yearJoined","getFontStyle","StaffPickSmall","playButtonOnClick","staffPickText","renderStaffPickSmallContent","leftBottom","rightBottom","StaffPickBig","renderAdvisorNameAndRating","renderChannelsCardAndReadingSince","rightTop","StaffPick","statusIndicatorStatus","rightArrowIcon","hourglassIcon","refreshIcon","checkmarkIcon","MethodCell","img","subText","renderIconAndText","renderRightIcon","getRightIcon","deleteIcon","PaymentMethodDetails","kind","isDefault","onRemove","sourceTypeTitle","defaultTitle","last4","onMakeDefault","onlyPaymentSource","fullName","paypalBillingAgreementEmail","expiredTitle","deleteButtonText","renderSourceDetailsHeader","ChatIcon","VoiceIcon","VideoIcon","ChanelButton","offline","busy","price","newPrice","titleText","startButtonText","profileChannelButtonImage","leftArrowIcon","scrollElementTypes","AdvisorSection","advisorSectionId","advisorSectionTitle","advisorSectionShortDescriptions","advisorSectionContent","elementsCount","needScrollOnBrowser","maxElementsCount","elementsCountPhone","elementsCountTablet","elementsCountLaptop","elementsCountDesktop","windowInnerWidth","setWindowInnerWidth","innerWidth","showLeftScrollElement","setShowLeftScrollElement","showRightScrollElement","setShowRightScrollElement","advisorsContainerRef","advisorsContainerScrollerRef","calcScrollElementContantWidth","contentContainer","getElementById","contentContainerChildrenArray","from","contentWidth","el","parseFloat","marginLeft","needShowScrollElement","mainScrollContainer","offsetWidth","scrollLeft","scrollWidth","handleResize","handleScroll","advisorsContainer","getElementsCount","count","onScrollBtnClick","scrollContainer","currentTarget","scrollTo","left","behavior","clientWidth","getScrollElementClassName","renderScrollElements","getAdvisorsContainerClassName","renderAdvisorSectionContent","advisor","modules_c8b79225","AdvisorSectionTitleLabel","seeAllBtnOnClick","seeAllBtnText","modules_14c8d388","AdvisorSectionShortDescriptions","shortDescriptionsText","shortDescriptionsSubText","Clock","Stars","fillOpacity","ChatTypeIcon","MyOrdersDetailsItem","tabText","tabIcon","subTitle","buttonLinkText","buttonLinkIcon","buttonLinkCallBack","AdvisorListCardPG","renderDataContainer","display","alignItems","justifyContent","AdvisorListCardKA","statusIndicatorText","reviews","bonus","advisorDescription","TypingIndicator","MarketingBanner","offers","offerIcon","offer","wrapperClassName","subtitle","closeIcon","backIcon","Popover","insertNode","closeOnBackdropClick","renderCloseButton","renderBackButton","renderTopOverlay","onCloseButtonClick","onBackButtonClick","dialogRef","showModal","close","handleBackdropClick","matches","bottom","right","getBoundingClientRect","clientX","mouseX","clientY","mouseY","createPortal","undefined","body","arrowImg","Coupon","couponType","discountText","badge","couponStyleByState","titleByType","renderArrow","pem_mapping","freeze","font_styling","AvatarProps","AvatarTypes","AvatarSize","StatusIndicatorProps","StatusIndicatorStatus","StatusIndicatorSizes","SpecialityProps","SpecialityTypes","SpecialityKinds","my_orders_advisor_cell_types","review_type","label_types","label_sizings","order","filter_tab","play_button","channels_card","advisor_list_card","live_modes_prices","reading_since_and_count","staff_pick","method_cell","my_orders_details_item_type","payment_method_details","coupon_types","profile_channel_button","AvatarSizes","module","exports","define","_$breadcrumbTypes_8","_$reduce_17","arr","fn","accum","val","len","_$filter_12","concat","_$includes_13","x","_$isArray_14","obj","_hasDontEnumBug","propertyIsEnumerable","_dontEnums","_$keys_15","prop","_$intRange_24","min","max","Infinity","parseInt","_$listOfFunctions_25","f","_$stringWithLength_26","_$config_5","defaultErrorTypes","unhandledExceptions","unhandledRejections","schema","apiKey","defaultValue","validate","appVersion","appType","autoDetectErrors","enabledErrorTypes","allowPartialObject","providedKeys","defaultKeys","k","onError","onSession","onBreadcrumb","endpoints","notify","sessions","autoTrackSessions","enabledReleaseStages","releaseStage","maxBreadcrumbs","enabledBreadcrumbTypes","join","maybeType","context","user","metadata","logger","method","redactedKeys","test","plugins","p","load","featureFlags","feature","_$assign_11","arguments","_$map_16","_extends","assign","apply","this","_$config_1","location","host","console","debug","getPrefixedConsole","consoleLog","log","consoleMethod","bind","_$Breadcrumb_3","Breadcrumb","timestamp","toJSON","metaData","_$stackframe_34","root","factory","amd","StackFrame","_isNumber","isNaN","isFinite","_capitalize","str","_getter","booleanProps","numericProps","stringProps","arrayProps","getArgs","setArgs","v","TypeError","getEvalOrigin","evalOrigin","setEvalOrigin","getFunctionName","getFileName","getLineNumber","getColumnNumber","Boolean","j","Number","String","_$errorStackParser_31","ErrorStackParser","FIREFOX_SAFARI_STACK_REGEXP","CHROME_IE_STACK_REGEXP","SAFARI_NATIVE_CODE_REGEXP","parse","stacktrace","parseOpera","stack","match","parseV8OrIE","parseFFOrSafari","Error","extractLocation","urlLike","parts","exec","split","filter","line","sanitizedLine","tokens","locationParts","pop","functionName","fileName","lineNumber","columnNumber","functionNameRegex","parseOpera9","parseOpera11","parseOpera10","lineRE","argsRaw","functionCall","shift","_$errorStackParser_10","_$safeJsonStringify_30","replacer","space","opts","redactedPaths","JSON","stringify","prepareObjForSerialization","MAX_DEPTH","MAX_EDGES","MIN_PRESERVED_DEPTH","REPLACEMENT_NODE","isError","throwsMessage","err","find","haystack","needle","isDescendent","paths","shouldRedact","patterns","toLowerCase","__isArray_30","safelyGetProp","seen","edges","visit","edgesExceeded","fResult","eResult","aResult","add","existingFeatures","existingFeatureKeys","variant","existingIndex","merge","newFeatures","toEventApi","_ref","flag","featureFlag","clear","features","featuresIndex","_$featureFlagDelegate_18","_$hasStack_19","__isError_32","_$iserror_20","__add_22","state","section","keyOrObj","maybeVal","_updates","updates","__clear_22","_$metadataDelegate_22","get","_$stackGenerator_33","StackGenerator","backtrace","maxStackSize","curr","callee","RegExp","$1","caller","Event","errorClass","errorMessage","handledState","originalError","defaultHandledState","groupingHash","_handledState","severity","unhandled","app","device","request","breadcrumbs","threads","_metadata","_features","_featuresIndex","_user","_session","errors","createBugsnagError","__type","_proto","addMetadata","getMetadata","clearMetadata","addFeatureFlag","addFeatureFlags","getFeatureFlags","clearFeatureFlag","clearFeatureFlags","getUser","setUser","email","payloadVersion","exceptions","er","severityReason","session","formatStackframe","frame","file","normaliseFunctionName","code","inProject","ensureString","getCauseStack","cause","getStacktrace","errorFramesToSkip","backtraceFramesToSkip","create","maybeError","tolerateNonErrors","component","_normaliseError","normaliseError","internalFrames","makeSerialisable","_event$errors","causes","normalisedCauses","createAndLogInputError","reason","verb","warn","hasNecessaryFields","_$Event_6","_$asyncEvery_7","cb","next","_$callbackRunner_9","callbacks","onCallbackError","runMaybeAsyncCallback","ret","then","setTimeout","_$syncCallbackRunner_23","callbackArg","callbackType","ignore","cbs","_$pad_29","num","substr","env","self","globalCount","mimeTypesLength","navigator","mimeTypes","clientId","userAgent","_$fingerprint_28","blockSize","base","discreteValues","Math","pow","randomBlock","random","safeCounter","cuid","getTime","fingerprint","_$cuid_27","_$Session_35","Session","startedAt","_handled","_unhandled","events","handled","_track","__add_4","__clear_4","__merge_4","noop","Client","configuration","internalPlugins","notifier","_this","_notifier","_config","_schema","_delivery","sendSession","sendEvent","_logger","info","_plugins","_breadcrumbs","_context","_cbs","sp","b","_configure","pl","_loadPlugin","_depth","getContext","setContext","plugin","configSchema","_reduce","config","generateConfigErrorMessage","getPlugin","_setDelivery","startSession","version","_sessionDelegate","addOnError","front","removeOnError","_addOnSessionPayload","addOnSession","removeOnSession","addOnBreadcrumb","removeOnBreadcrumb","pauseSession","resumeSession","leaveBreadcrumb","crumb","_isBreadcrumbTypeEnabled","types","postReportCallback","_notify","_this2","originalSeverity","shouldSend","unhandledOverridden","rawInput","_$Client_4","_$jsonPayload_21","EVENT_REDACTION_PATHS","payload","_$delivery_36","client","win","url","getApiUrl","req","XDomainRequest","onload","onerror","toFixed","open","send","endpoint","isoDate","matchPageProtocol","protocol","encodeURIComponent","_matchPageProtocol","pageProtocol","_$delivery_37","XMLHttpRequest","onreadystatechange","readyState","DONE","setRequestHeader","toISOString","appStart","reset","_$app_38","_$context_39","pathname","_$pad_43","__env_42","__globalCount_42","__prop_42","__mimeTypesLength_42","__clientId_42","_$fingerprint_42","__c_41","__blockSize_41","__base_41","__discreteValues_41","__randomBlock_41","__safeCounter_41","__cuid_41","_$cuid_41","BUGSNAG_ANONYMOUS_ID_KEY","getDeviceId","storage","localStorage","getItem","setItem","_$device_40","nav","locale","browserLanguage","systemLanguage","userLanguage","language","screen","orientation","documentElement","clientHeight","generateAnonymousId","collectUserIp","setDefaultUserId","eventOrSession","_$request_44","_$session_45","sessionDelegate","sessionClient","_pausedSession","_$clientIp_46","clientIp","_$consoleBreadcrumbs_47","CONSOLE_LOG_METHODS","original","_len","_key","stringified","_restore","MAX_LINE_LENGTH","MAX_SCRIPT_LENGTH","_$inlineScriptContent_48","doc","trackInlineScripts","originalLocation","html","DOMContentLoaded","attachEvent","getHtml","outerHTML","prev","_lastScript","updateLastScript","script","getCurrentScript","currentScript","scripts","addSurroundingCode","htmlLines","zeroBasedLine","start","end","cleanUrl","content","innerHTML","_setTimeout","__proxy","__traceOriginalScript","eventTargetCallbackAccessor","callbackAccessor","alsoCallOriginal","cba","__trace__","replacement","isEventHandlerObj","handleEvent","_$interactionBreadcrumbs_49","targetText","targetSelector","getNodeText","getNodeSelector","trimStart","trimEnd","textContent","innerText","tagName","querySelectorAll","parentNode","childNodes","_$navigationBreadcrumbs_50","drop","oldURL","relativeLocation","to","newURL","getCurrentState","history","replaceState","wrapHistoryFn","pushState","search","hash","stateChangeToMetadata","currentPath","prevState","orig","resetEventCount","BREADCRUMB_TYPE","_$networkBreadcrumbs_51","_ignoredUrls","ignoredUrls","monkeyPatchXMLHttpRequest","monkeyPatchFetch","handleFetchSuccess","response","handleFetchError","nativeOpen","requestSetupKey","handleXHRError","handleXHRLoad","fetch","polyfill","oldFetch","_arguments","urlOrRequest","Promise","resolve","reject","_$throttle_52","maxEvents","_$stripQueryString_53","strip","allFrames","_strip","_$onerror_54","prevOnError","messageOrEvent","lineNo","charNo","decorateStack","detail","extraParameters","culprit","isActualNumber","errorCharacter","_$unhandledRejection_55","listener","evt","isBluebird","fixBluebirdStacktrace","_event$addMetadata","onunhandledrejection","promise","_$notifier_2","__schema_2","Bugsnag","_client","createClient","bugsnag","isStarted","m","_$src_1","_assertThisInitialized","ReferenceError","_inheritsLoose","subClass","superClass","constructor","_setPrototypeOf","setPrototypeOf","__proto__","BugsnagPluginReact","globalReact","React","lazy","ErrorBoundary","createClass","createErrorBoundary","BugsnagPluginReactLazyInitializer","formatComponentStack","_React$Component","handleClearError","_proto2","setState","componentDidCatch","componentStack","render","FallbackComponent","clearError","Component","CONSTANTS","NODE_CLIENT","NODE_ADMIN","SDK_VERSION","assert","assertion","assertionError","stringToByteArray$1","out","base64","byteToCharMap_","charToByteMap_","byteToCharMapWebSafe_","charToByteMapWebSafe_","ENCODED_VALS_BASE","ENCODED_VALS","ENCODED_VALS_WEBSAFE","HAS_NATIVE_SUPPORT","atob","encodeByteArray","input","webSafe","init_","byteToCharMap","output","byte1","haveByte2","byte2","haveByte3","byte3","outByte1","outByte2","outByte3","outByte4","encodeString","btoa","decodeString","bytes","pos","c1","fromCharCode","c2","c3","byteArrayToString","decodeStringToByteArray","charToByteMap","byte4","DecodeBase64StringError","super","base64Encode","utf8Bytes","base64urlEncodeWithoutPadding","base64Decode","deepCopy","deepExtend","getDefaultsFromGlobal","g","getGlobal","__FIREBASE_DEFAULTS__","getDefaults","process","defaultsJsonString","getDefaultsFromEnvVariable","cookie","decoded","getDefaultsFromCookie","getDefaultEmulatorHost","productName","_a","_b","emulatorHosts","getDefaultEmulatorHostnameAndPort","separatorIndex","lastIndexOf","port","getDefaultAppConfig","getExperimentalSetting","Deferred","wrapCallback","callback","catch","createMockUserToken","token","projectId","uid","project","iat","sub","user_id","iss","aud","exp","auth_time","firebase","sign_in_provider","identities","alg","getUA","isMobileCordova","isBrowser","isWebWorker","WorkerGlobalScope","isCloudflareWorker","isBrowserExtension","runtime","chrome","browser","isReactNative","isIE","ua","isNodeSdk","isIndexedDBAvailable","indexedDB","validateIndexedDBOpenable","preExist","DB_CHECK_NAME","onsuccess","deleteDatabase","onupgradeneeded","areCookiesEnabled","cookieEnabled","FirebaseError","customData","captureStackTrace","ErrorFactory","service","serviceName","fullCode","template","PATTERN","_","replaceTemplate","fullMessage","jsonEval","decode","claims","signature","isValidFormat","isAdmin","contains","safeGet","isEmpty","contextObj","res","deepEqual","aKeys","bKeys","aProp","bProp","isObject","thing","querystring","querystringParams","params","entries","arrayVal","querystringDecode","decodeURIComponent","extractQuerystring","queryStart","fragmentStart","Sha1","chain_","buf_","W_","pad_","inbuf_","total_","compress_","buf","offset","W","update","lengthMinusBlock","inbuf","digest","totalBits","createSubscribe","executor","onNoObservers","proxy","ObserverProxy","subscribe","observers","unsubscribes","observerCount","task","finalized","forEachObserver","observer","complete","nextOrObserver","methods","implementsAnyMethods","unsub","unsubscribeOne","finalError","sendOne","errorPrefix","fnName","argName","stringToByteArray","high","stringLength","getModularInstance","_delegate","Q","getPrototypeOf","Function","Z","L","nn","has","set","X","Map","q","Set","l","rn","writable","configurable","enumerable","y","delete","isFrozen","tn","U","O","S","P","M","H","A","I","N","R","D","z","getOwnPropertyDescriptor","E","F","T","C","en","on","Proxy","revocable","revoke","J","K","defineProperty","G","Symbol","B","Reflect","for","iterator","ownKeys","getOwnPropertySymbols","getOwnPropertyNames","getOwnPropertyDescriptors","deleteProperty","extendStatics","un","produce","produceWithPatches","useProxies","setUseProxies","autoFreeze","setAutoFreeze","createDraft","finishDraft","applyPatches","op","$","an","__extends","__","__generator","thisArg","sent","trys","ops","done","step","__spreadArray","il","__defProp","__defProps","defineProperties","__getOwnPropDescs","__getOwnPropSymbols","__hasOwnProp","__propIsEnum","__defNormalProp","__spreadValues","_i","_c","__spreadProps","__async","__this","__arguments","generator","fulfilled","rejected","throw","composeWithDevTools","__REDUX_DEVTOOLS_EXTENSION_COMPOSE__","__REDUX_DEVTOOLS_EXTENSION__","isPlainObject","proto","baseProto","createAction","prepareAction","actionCreator","prepared","meta","action","MiddlewareArray","_super","species","EnhancerArray","curryGetDefaultMiddleware","thunk","middlewareArray","immutableCheck","serializableCheck","actionCreatorCheck","isBoolean","withExtraArgument","extraArgument","getDefaultMiddleware","IS_PRODUCTION","configureStore","rootReducer","curriedGetDefaultMiddleware","_d","reducer","_e","middleware","_f","devTools","_g","preloadedState","_h","enhancers","finalMiddleware","some","middlewareEnhancer","finalCompose","trace","defaultEnhancers","storeEnhancers","composedEnhancer","nanoid","commonProperties","RejectWithValue","FulfillWithMeta","miniSerializeError","simpleError","commonProperties_1","property","createAsyncThunk2","typePrefix","payloadCreator","requestId","requestStatus","pending","serializeError","rejectedWithValue","aborted","condition","AC","AbortController","class_1","signal","dispatchEvent","onabort","throwIfAborted","abort","dispatch","getState","extra","abortReason","idGenerator","abortController","promise2","finalAction","conditionResult","abortedPromise","err_1","getPendingMeta","race","rejectWithValue","fulfillWithValue","dispatchConditionRejection","unwrap","unwrapResult","withTypes","alm","queueMicrotask","globalThis","createQueueWithTimer","timeout","requestAnimationFrame","Action","PopStateEventType","createBrowserHistory","getUrlBasedHistory","globalHistory","createLocation","usr","createPath","invariant","warning","cond","getHistoryState","idx","parsePath","parsedPath","hashIndex","searchIndex","getLocation","createHref","validateLocation","defaultView","v5Compat","Pop","getIndex","handlePop","nextIndex","delta","createURL","origin","URL","listen","encodeLocation","Push","historyState","DOMException","Replace","go","ResultType","matchRoutes","routes","locationArg","basename","stripBasename","branches","flattenRoutes","sort","score","siblings","every","compareIndexes","routesMeta","childrenIndex","rankRouteBranches","matchRouteBranch","safelyDecodeURI","parentsMeta","parentPath","flattenRoute","route","relativePath","caseSensitive","startsWith","joinPaths","computeScore","_route$path","exploded","explodeOptionalSegments","segments","first","isOptional","endsWith","required","restExploded","subpath","paramRe","dynamicSegmentValue","indexRouteValue","emptySegmentValue","staticSegmentValue","splatPenalty","isSplat","initialScore","reduce","segment","branch","matchedParams","matchedPathname","remainingPathname","matchPath","pathnameBase","normalizePathname","generatePath","originalPath","prefix","array","keyMatch","optional","param","pattern","matcher","compiledParams","regexpSource","paramName","compilePath","captureGroups","memo","splatValue","safelyDecodeURIComponent","decodeURI","startIndex","nextChar","getInvalidPathError","char","field","dest","getPathContributingMatches","getResolveToMatches","resolveTo","toArg","routePathnames","locationPathname","isPathRelative","isEmptyPath","toPathname","fromSegments","toSegments","routePathnameIndex","fromPathname","resolvePathname","normalizeSearch","normalizeHash","resolvePath","hasExplicitTrailingSlash","hasCurrentTrailingSlash","AbortedDeferredError","isRouteErrorResponse","internal","validMutationMethodsArr","validRequestMethodsArr","argType","inner","default","e10","sqrt","e5","e2","stop","reverse","ticks","power","floor","LN10","tickIncrement","r0","round","r1","addLeadingZeros","number","targetLength","sign","abs","object","cloneObject","defaultOptions","getDefaultOptions","setDefaultOptions","newOptions","formatters","signedYear","getUTCFullYear","year","month","getUTCMonth","getUTCDate","dayPeriodEnumValue","getUTCHours","getUTCMinutes","getUTCSeconds","numberOfDigits","milliseconds","getUTCMilliseconds","fractionalSeconds","dateLongFormatter","formatLong","timeLongFormatter","longFormatters","dateTimeFormat","matchResult","datePattern","timePattern","dateTime","getTimezoneOffsetInMilliseconds","utcDate","UTC","getFullYear","getMonth","getDate","getSeconds","getMilliseconds","setUTCFullYear","MILLISECONDS_IN_WEEK","getUTCISOWeek","dirtyDate","requiredArgs","toDate","diff","startOfUTCISOWeek","getUTCISOWeekYear","fourthOfJanuary","setUTCHours","startOfUTCISOWeekYear","fourthOfJanuaryOfNextYear","startOfNextYear","fourthOfJanuaryOfThisYear","startOfThisYear","getUTCWeek","startOfUTCWeek","_ref2","_ref3","_options$firstWeekCon","_options$locale","_options$locale$optio","_defaultOptions$local","_defaultOptions$local2","firstWeekContainsDate","toInteger","getUTCWeekYear","firstWeek","startOfUTCWeekYear","RangeError","firstWeekOfNextYear","firstWeekOfThisYear","protectedDayOfYearTokens","protectedWeekYearTokens","isProtectedDayOfYearToken","isProtectedWeekYearToken","throwProtectedError","format","roundingMap","ceil","trunc","defaultRoundingMethod","getRoundingMethod","setUTCDay","dirtyDay","_options$weekStartsOn","weekStartsOn","day","getUTCDay","setUTCDate","setUTCISODay","setUTCISOWeek","dirtyISOWeek","isoWeek","setUTCWeek","dirtyWeek","week","dirtyNumber","NaN","years","months","weeks","days","seconds","dateWithMonths","dateWithDays","msToAdd","addBusinessDays","dirtyAmount","startedOnWeekend","fullWeeks","setDate","restDays","setHours","addDays","MILLISECONDS_IN_HOUR","addHours","addISOWeekYears","addMilliseconds","MILLISECONDS_IN_MINUTE","addMinutes","addMonths","dayOfMonth","endOfDesiredMonth","setMonth","setFullYear","addQuarters","addSeconds","addWeeks","addYears","areIntervalsOverlapping","intervalLeft","intervalRight","leftStartTime","leftEndTime","rightStartTime","rightEndTime","inclusive","clamp","closestIndexTo","dirtyDateToCompare","dirtyDatesArray","dateToCompare","minDistance","timeToCompare","currentDate","distance","closestTo","compareAsc","dirtyDateLeft","dirtyDateRight","dateLeft","dateRight","compareDesc","daysInWeek","daysInYear","maxTime","millisecondsInMinute","millisecondsInHour","millisecondsInSecond","minTime","minutesInHour","monthsInQuarter","monthsInYear","quartersInYear","secondsInHour","secondsInMinute","secondsInDay","secondsInWeek","secondsInYear","secondsInMonth","secondsInQuarter","daysToWeeks","differenceInBusinessDays","calendarDifference","MILLISECONDS_IN_DAY","differenceInCalendarDays","startOfDayLeft","startOfDayRight","timestampLeft","timestampRight","differenceInCalendarISOWeekYears","differenceInCalendarISOWeeks","startOfISOWeekLeft","startOfISOWeekRight","differenceInCalendarMonths","differenceInCalendarQuarters","differenceInCalendarWeeks","startOfWeekLeft","startOfWeekRight","differenceInCalendarYears","compareLocalAsc","differenceInDays","difference","differenceInHours","roundingMethod","differenceInISOWeekYears","differenceInMilliseconds","differenceInMinutes","differenceInMonths","isLastMonthNotFull","differenceInQuarters","differenceInSeconds","differenceInWeeks","differenceInYears","isLastYearNotFull","eachDayOfInterval","dirtyInterval","_options$step","interval","startDate","endTime","dates","eachHourOfInterval","endDate","startTime","setMinutes","eachMinuteOfInterval","eachMonthOfInterval","eachQuarterOfInterval","startDateQuarter","quarters","currentQuarter","eachWeekOfInterval","startDateWeek","endDateWeek","currentWeek","eachWeekendOfInterval","dateInterval","weekends","eachWeekendOfMonth","eachWeekendOfYear","eachYearOfInterval","endOfDay","endOfDecade","decade","endOfHour","endOfISOWeek","endOfISOWeekYear","setMilliseconds","endOfMinute","setSeconds","endOfMonth","endOfQuarter","currentMonth","endOfSecond","endOfToday","endOfTomorrow","endOfWeek","getDay","endOfYear","endOfYesterday","dayPeriodEnum","localize","era","ordinalNumber","unit","lightFormatters","Y","signedWeekYear","weekYear","twoDigitYear","isoWeekYear","quarter","dayOfYear","setUTCMonth","getUTCDayOfYear","dayOfWeek","localDayOfWeek","isoDayOfWeek","dayPeriod","_localize","timezoneOffset","_originalDate","getTimezoneOffset","formatTimezoneWithOptionalMinutes","formatTimezone","formatTimezoneShort","originalDate","dirtyDelimiter","absOffset","delimiter","formattingTokensRegExp","longFormattingTokensRegExp","escapedStringRegExp","doubleQuoteRegExp","unescapedLatinCharacterRegExp","dirtyFormatStr","_ref4","_options$locale2","_options$locale2$opti","_ref5","_ref6","_ref7","_options$locale3","_options$locale3$opti","_defaultOptions$local3","_defaultOptions$local4","formatStr","defaultLocale","isValid","subMilliseconds","formatterOptions","firstCharacter","longFormatter","matched","cleanEscapedString","formatter","useAdditionalWeekYearTokens","useAdditionalDayOfYearTokens","MINUTES_IN_DAY","MINUTES_IN_ALMOST_TWO_DAYS","MINUTES_IN_MONTH","MINUTES_IN_TWO_MONTHS","formatDistance","dirtyBaseDate","comparison","localizeOptions","addSuffix","offsetInSeconds","includeSeconds","nearestMonth","monthsSinceStartOfYear","MINUTES_IN_YEAR","formatDistanceStrict","_options$roundingMeth","roundingMethodFn","dstNormalizedMinutes","defaultUnit","roundedMinutes","formatDistanceToNow","formatDistanceToNowStrict","defaultFormat","formatDuration","_options$format","_options$zero","_options$delimiter","zero","acc","formatISO","_options$representati","representation","tzOffset","dateDelimiter","timeDelimiter","absoluteOffset","hourOffset","minuteOffset","separator","formatISO9075","hour","minute","second","formatISODuration","_duration$years","_duration$months","_duration$days","_duration$hours","_duration$minutes","_duration$seconds","formatRFC3339","_options$fractionDigi","fractionDigits","fractionalSecond","formatRFC7231","dayName","monthName","formatRelative","baseDate","utcBaseDate","fromUnixTime","dirtyUnixTime","unixTime","getDayOfYear","getDaysInMonth","monthIndex","lastDayOfMonth","getDaysInYear","getDecade","getISODay","getISOWeek","getISOWeekYear","getISOWeeksInYear","thisYear","valueOf","getOverlappingDaysInIntervals","dirtyIntervalLeft","dirtyIntervalRight","differenceInMs","getQuarter","getUnixTime","getWeek","getWeekOfMonth","currentDayOfMonth","lastDayOfFirstWeek","remainingDaysAfterFirstWeek","getWeekYear","getWeeksInMonth","getYear","hoursToMilliseconds","hoursToMinutes","hoursToSeconds","intervalToDuration","remainingMonths","remainingDays","remainingHours","remainingMinutes","remainingSeconds","intlFormat","formatOrLocale","localeOptions","_localeOptions","formatOptions","Intl","DateTimeFormat","intlFormatDistance","diffInSeconds","RelativeTimeFormat","localeMatcher","numeric","isAfter","isBefore","isDate","isEqual","dirtyLeftDate","dirtyRightDate","isExists","isFirstDayOfMonth","isFriday","isFuture","isLastDayOfMonth","isLeapYear","isMatch","dateString","formatString","isMonday","isPast","isSameDay","dateLeftStartOfDay","dateRightStartOfDay","isSameHour","dateLeftStartOfHour","dateRightStartOfHour","isSameISOWeek","isSameISOWeekYear","dateLeftStartOfYear","dateRightStartOfYear","isSameMinute","dateLeftStartOfMinute","dateRightStartOfMinute","isSameMonth","isSameQuarter","dateLeftStartOfQuarter","dateRightStartOfQuarter","isSameSecond","dateLeftStartOfSecond","dateRightStartOfSecond","isSameWeek","dateLeftStartOfWeek","dateRightStartOfWeek","isSameYear","isSaturday","isSunday","isThisHour","isThisISOWeek","isThisMinute","isThisMonth","isThisQuarter","isThisSecond","isThisWeek","isThisYear","isThursday","isToday","isTomorrow","isTuesday","isWednesday","isWeekend","isWithinInterval","isYesterday","lastDayOfDecade","lastDayOfISOWeek","lastDayOfISOWeekYear","lastDayOfQuarter","lastDayOfWeek","lastDayOfYear","lightFormat","buildFormatLongFn","defaultWidth","formats","buildLocalizeFn","dirtyIndex","valuesArray","formattingValues","defaultFormattingWidth","_defaultWidth","_width","values","argumentCallback","buildMatchFn","string","matchPattern","matchPatterns","defaultMatchWidth","matchedString","parsePatterns","defaultParseWidth","predicate","findIndex","findKey","valueCallback","buildMatchPatternFn","parseResult","parsePattern","formatDistanceLocale","lessThanXSeconds","one","other","xSeconds","halfAMinute","lessThanXMinutes","xMinutes","aboutXHours","xHours","xDays","aboutXWeeks","xWeeks","aboutXMonths","xMonths","aboutXYears","xYears","overXYears","almostXYears","tokenValue","full","long","medium","short","formatRelativeLocale","lastWeek","yesterday","today","tomorrow","nextWeek","_date","_baseDate","_options","rem100","narrow","abbreviated","wide","am","pm","midnight","noon","morning","afternoon","evening","night","any","formatRelativeLocalePlural","datesArray","totalDays","totalSeconds","millisecondsToHours","millisecondsToMinutes","millisecondsToSeconds","minutesToHours","minutesToMilliseconds","minutesToSeconds","monthsToQuarters","monthsToYears","nextDay","nextFriday","nextMonday","nextSaturday","nextSunday","nextThursday","nextTuesday","nextWednesday","Parser","setter","priority","subPriority","_utcDate","_value","Setter","ValueSetter","_Setter","validateValue","setValue","flags","DateToSystemTimezoneSetter","_Setter2","_super2","timestampIsSet","convertedDate","numericPatterns","hour23h","hour24h","hour11h","hour12h","singleDigit","twoDigits","threeDigits","fourDigits","anyDigitsSigned","singleDigitSigned","twoDigitsSigned","threeDigitsSigned","fourDigitsSigned","timezonePatterns","basicOptionalMinutes","basic","basicOptionalSeconds","extended","extendedOptionalSeconds","EraParser","_Parser","YearParser","isTwoDigitYear","currentYear","normalizedTwoDigitYear","LocalWeekYearParser","ISOWeekYearParser","_flags","firstWeekOfYear","ExtendedYearParser","QuarterParser","StandAloneQuarterParser","MonthParser","StandAloneMonthParser","LocalWeekParser","ISOWeekParser","DAYS_IN_MONTH","DAYS_IN_MONTH_LEAP_YEAR","DateParser","DayOfYearParser","DayParser","LocalDayParser","wholeWeekDays","StandAloneLocalDayParser","ISODayParser","AMPMParser","AMPMMidnightParser","DayPeriodParser","Hour1to12Parser","isPM","Hour0to23Parser","Hour0To11Parser","Hour1To24Parser","MinuteParser","setUTCMinutes","SecondParser","setUTCSeconds","FractionOfSecondParser","setUTCMilliseconds","ISOTimezoneWithZParser","ISOTimezoneParser","TimestampSecondsParser","TimestampMillisecondsParser","parsers","mapValue","parseFnResult","mapFn","parseNumericPattern","parseTimezonePattern","parseAnyDigitsSigned","parseNDigits","parseNDigitsSigned","dayPeriodEnumToHours","normalizeTwoDigitYear","isCommonEra","absCurrentYear","rangeEnd","isLeapYearIndex","notWhitespaceRegExp","dirtyDateString","dirtyFormatString","dirtyReferenceDate","_step","subFnOptions","setters","usedTokens","_iterator","_loop","parser","incompatibleTokens","incompatibleToken","usedToken","fullToken","run","_ret","uniquePrioritySetters","setterArray","_step2","_iterator2","parseISO","argument","_options$additionalDi","additionalDigits","dateStrings","timeString","dateTimeDelimiter","timeZoneDelimiter","timezone","splitDateString","parseYearResult","regex","captures","restDateString","century","parseYear","dateRegex","isWeekDate","parseDateUnit","_year","validateWeekDate","fourthOfJanuaryDay","dayOfISOWeekYear","daysInMonths","validateDate","validateDayOfYearDate","parseDate","timeRegex","parseTimeUnit","validateTime","parseTime","timezoneString","timezoneRegex","_hours","validateTimezone","parseTimezone","parseJSON","previousDay","previousFriday","previousMonday","previousSaturday","previousSunday","previousThursday","previousTuesday","previousWednesday","quartersToMonths","quartersToYears","roundToNearestMinutes","_options$nearestTo","nearestTo","remainderMinutes","addedMinutes","secondsToHours","secondsToMilliseconds","secondsToMinutes","dirtyDayOfMonth","setDay","currentDay","setDayOfYear","dirtyDayOfYear","_property","dirtyHours","setISODay","setISOWeek","setISOWeekYear","dirtyISOWeekYear","dirtyMilliseconds","dirtyMinutes","dirtyMonth","dateWithDesiredMonth","daysInMonth","setQuarter","dirtyQuarter","dirtySeconds","setWeek","setWeekYear","dirtyWeekYear","setYear","dirtyYear","startOfDay","startOfDecade","startOfHour","startOfISOWeek","startOfISOWeekYear","startOfMinute","startOfMonth","startOfQuarter","startOfSecond","startOfToday","startOfTomorrow","startOfWeek","startOfWeekYear","startOfYear","cleanDate","startOfYesterday","dateWithoutMonths","dateWithoutDays","mstoSub","subBusinessDays","subDays","subHours","subISOWeekYears","subMinutes","subMonths","subQuarters","subSeconds","subWeeks","subYears","argStr","weeksToDays","yearsToMonths","yearsToQuarters","__createBinding","k2","desc","__esModule","__setModuleDefault","__importStar","mod","__exportStar","deepKeysFromList","deepKeys","utils","parsedOptions","mergeOptions","generateDeepKeysList","list","heading","currentKey","keyName","buildKeyName","escapeNestedDotsIfSpecified","expandNestedObjects","isDocumentToRecurOn","expandArrayObjects","subArray","currentKeyPath","subArrayKeys","flatten","schemaKeys","subKey","unique","ignoreEmptyArraysWhenExpanding","processArrayKeys","ignoreEmptyArrays","escapeNestedDots","upperKeyName","currentKeyName","_sp","kp","dotIndex","remaining","previousChar","findFirstNonEscapedDotIndex","setPath","evaluatePath","kpVal","keyVal","ElementType","Doctype","CDATA","Tag","Style","Script","Comment","Directive","Text","Root","isTag","elem","DomHandler","domelementtype_1","node_js_1","defaultOpts","withStartIndices","withEndIndices","xmlMode","elementCB","dom","Document","tagStack","lastNode","onparserinit","onreset","onend","handleCallback","onclosetag","endIndex","onopentag","attribs","element","Element","addNode","ontext","node","oncomment","oncommentend","oncdatastart","parent","oncdataend","onprocessinginstruction","ProcessingInstruction","previousSibling","__assign","cloneNode","hasChildren","isDocument","isDirective","isComment","isText","isCDATA","NodeWithChildren","DataNode","Node","recursive","namespace","cloneChildren","clone_1","clone_2","clone_3","instruction","sourceCodeLocation","childs","toStr","gOPD","hasOwnConstructor","hasIsPrototypeOf","setProperty","newValue","getProperty","extend","copy","copyIsArray","clone","deep","definition","x64Add","x64Multiply","x64Rotl","x64LeftShift","x64Xor","x64Fmix","x64hash128","seed","remainder","h1","h2","k1","preprocessor","audio","excludeIOS11","fonts","swfContainerId","swfPath","userDefinedFonts","extendedJsFonts","detectScreenOrientation","sortPluginsFor","excludeIE","extraComponents","excludes","NOT_AVAILABLE","ERROR","EXCLUDED","each","results","isEnumerateDevicesSupported","mediaDevices","enumerateDevices","getScreenResolution","resolution","getAvailableScreenResolution","availWidth","availHeight","available","getRegularPlugins","pluginsShouldBeSorted","mt","suffixes","getIEPlugins","ActiveXObject","should","re","hasSessionStorage","sessionStorage","hasLocalStorage","hasIndexedDB","isIEOrOldEdge","getHardwareConcurrency","hardwareConcurrency","getNavigatorCpuClass","cpuClass","getNavigatorPlatform","platform","getDoNotTrack","doNotTrack","msDoNotTrack","getTouchSupport","touchEvent","maxTouchPoints","msMaxTouchPoints","createEvent","getCanvasFp","canvas","ctx","rect","isPointInPath","textBaseline","fillStyle","fillRect","dontUseFakeFontInCanvas","font","fillText","globalCompositeOperation","beginPath","arc","PI","closePath","toDataURL","getWebglFp","gl","fa2s","fa","clearColor","enable","DEPTH_TEST","depthFunc","LEQUAL","COLOR_BUFFER_BIT","DEPTH_BUFFER_BIT","getWebglCanvas","vertexPosBuffer","createBuffer","bindBuffer","ARRAY_BUFFER","vertices","Float32Array","bufferData","STATIC_DRAW","itemSize","numItems","program","createProgram","vshader","createShader","VERTEX_SHADER","shaderSource","compileShader","fshader","FRAGMENT_SHADER","attachShader","linkProgram","useProgram","vertexPosAttrib","getAttribLocation","offsetUniform","getUniformLocation","enableVertexAttribArray","vertexPosArray","vertexAttribPointer","FLOAT","uniform2f","drawArrays","TRIANGLE_STRIP","getSupportedExtensions","getParameter","ALIASED_LINE_WIDTH_RANGE","ALIASED_POINT_SIZE_RANGE","ALPHA_BITS","getContextAttributes","antialias","BLUE_BITS","DEPTH_BITS","GREEN_BITS","ext","getExtension","anisotropy","MAX_TEXTURE_MAX_ANISOTROPY_EXT","maxAnisotropy","MAX_COMBINED_TEXTURE_IMAGE_UNITS","MAX_CUBE_MAP_TEXTURE_SIZE","MAX_FRAGMENT_UNIFORM_VECTORS","MAX_RENDERBUFFER_SIZE","MAX_TEXTURE_IMAGE_UNITS","MAX_TEXTURE_SIZE","MAX_VARYING_VECTORS","MAX_VERTEX_ATTRIBS","MAX_VERTEX_TEXTURE_IMAGE_UNITS","MAX_VERTEX_UNIFORM_VECTORS","MAX_VIEWPORT_DIMS","RED_BITS","RENDERER","SHADING_LANGUAGE_VERSION","STENCIL_BITS","VENDOR","VERSION","extensionDebugRendererInfo","UNMASKED_VENDOR_WEBGL","UNMASKED_RENDERER_WEBGL","getShaderPrecisionFormat","numType","shader","numSize","loseWebglContext","getWebglVendorAndRenderer","glContext","getAdBlock","ads","removeChild","getHasLiedLanguages","languages","getHasLiedResolution","getHasLiedOs","os","oscpu","getHasLiedBrowser","productSub","errFirefox","tempRes","eval","toSource","errOfErr","isCanvasSupported","isWebGlSupported","isSupported","WebGLRenderingContext","appName","hasSwfObjectLoaded","swfobject","hasMinFlashInstalled","hasFlashPlayerVersion","loadSwfAndDetectFonts","hiddenCallback","addFlashDivNode","flashvars","onReady","embedSWF","allowScriptAccess","menu","loseContextExtension","loseContext","components","getData","webdriver","colorDepth","deviceMemory","devicePixelRatio","resolvedOptions","timeZone","HTMLElement","addBehavior","openDatabase","baseFonts","fontList","position","baseFontsDiv","fontsDiv","defaultHeight","createSpan","fontSize","fontWeight","letterSpacing","lineBreak","lineHeight","textTransform","textAlign","textDecoration","textShadow","wordBreak","wordSpacing","createSpanWithFonts","fontToDetect","baseFont","fontFamily","isFontAvailable","fontSpans","detected","baseFontsSpans","spans","initializeBaseFontsSpans","fontsSpans","numDefaultFonts","initializeFontsSpans","pauseBefore","audioOptions","AudioContext","OfflineAudioContext","webkitOfflineAudioContext","oscillator","createOscillator","frequency","setValueAtTime","currentTime","compressor","createDynamicsCompressor","connect","destination","startRendering","audioTimeoutId","oncomplete","clearTimeout","renderedBuffer","getChannelData","disconnect","devices","deviceId","groupId","Fingerprint2","extendSoft","addPreprocessedComponent","chainComponents","alreadyWaited","getPromise","getV18","newComponents","murmur","COMMENT_REGEX","NEWLINE_REGEX","WHITESPACE_REGEX","PROPERTY_REGEX","COLON_REGEX","VALUE_REGEX","SEMICOLON_REGEX","TRIM_REGEX","EMPTY_STRING","trim","lineno","column","updatePosition","Position","whitespace","errorsList","msg","filename","silent","comments","rules","comment","declaration","decl","decls","declarations","__importDefault","styleObject","inline_style_parser_1","hasIterator","reactIs","REACT_STATICS","childContextTypes","contextType","contextTypes","defaultProps","getDefaultProps","getDerivedStateFromError","getDerivedStateFromProps","mixins","propTypes","KNOWN_STATICS","arity","MEMO_STATICS","compare","TYPE_STATICS","getStatics","isMemo","ForwardRef","Memo","objectPrototype","hoistNonReactStatics","targetComponent","sourceComponent","blacklist","inheritedComponent","targetStatics","sourceStatics","descriptor","CASE_SENSITIVE_TAG_NAMES_MAP","CASE_SENSITIVE_TAG_NAMES","accumulator","HTML","HEAD","BODY","FIRST_TAG_REGEX","HEAD_TAG_REGEX","BODY_TAG_REGEX","parseFromDocument","parseFromString","DOMParser","domParser_1","implementation","htmlDocument_1","createHTMLDocument","parseFromTemplate","firstTagName","domparser_1","utilities_1","DIRECTIVE_REGEX","directive","formatDOM","formatAttributes","domhandler_1","constants_1","attributesLength","attribute","formatTagName","caseSensitiveTagName","getCaseSensitiveTagName","nodes","domNodes","nodesLength","nodeType","nodeName","nodeValue","unshift","react_property_1","UNCONTROLLED_COMPONENT_ATTRIBUTES","UNCONTROLLED_COMPONENT_NAMES","valueOnlyInputs","submit","getPropName","attributeName","possibleStandardNames","isInputValueOnly","attributeValue","isCustomAttribute","attributeNameLowerCased","propName","propertyInfo","getPropertyInfo","BOOLEAN","OVERLOADED_BOOLEAN","PRESERVE_CUSTOM_ATTRIBUTES","setStyleProp","react_1","attributes_to_props_1","cloneElement","isValidElement","skipAttributesToProps","isCustomComponent","domToReact","reactElements","hasReplace","transform","returnFirstArg","library","replaceElement","dangerouslySetInnerHTML","__html","isWhitespace","canTextBeChildOfNode","htmlToDOM","attributesToProps","html_dom_parser_1","dom_to_react_1","domParserOptions","lowerCaseAttributeNames","htmlparser2","ELEMENTS_WITH_NO_TEXT_CHILDREN","style_to_js_1","RESERVED_SVG_MATHML_ELEMENTS","is","styleOptions","reactCompat","excelBOM","defaultCsv2JsonOptions","defaultJson2CsvOptions","optionsRequired","json2csv","cannotCallOn","dataCheckFailure","notSameSchema","csv2json","checkSchemaDifferences","wrap","eol","emptyFieldValue","excludeKeys","prependHeader","preventCsvInjection","sortHeader","trimFieldValues","trimHeaderFields","unwindArrays","useDateIso8601Format","useLocaleFormat","wrapBooleans","json2csv_1","csv2json_1","utils_1","builtOptions","buildJ2COptions","Json2Csv","convert","Csv2Json","doc_path_1","escapedWrapDelimiterRegex","excelBOMRegex","valueParserFn","processHeaderKey","headerKey","removeWrapDelimitersFromValue","retrieveRecordValueFromLine","headerField","fieldValue","parsedJson","isStringRepresentation","isDateRepresentation","trimRecordValue","isInvalid","processRecordValue","firstChar","lastIndex","lastChar","transformRecordLines","recordLines","generatedJsonObjects","unescapeWrapDelimiterInField","generatedDocument","headerFields","createDocument","csv","retrieveHeading","lastCharacterIndex","eolDelimiterLength","stateVariables","insideWrapDelimiter","parsingValue","justParsedDoubleQuote","character","charBefore","charAfter","nextNChar","splitLine","getNCharacters","parsedValue","toIndex","splitLines","splice","deeks_1","wrapDelimiterCheckRegex","crlfSearchRegex","customValueParser","expandingWithoutUnwinding","deeksOptions","processSchemas","documentSchemas","firstDocSchema","restOfDocumentSchemas","schemaDifferences","documentSchema","computeSchemaDifferences","computeNumberOfSchemaDifferences","filterExcludedKeys","keyPaths","keyPath","sortHeaderFields","fieldNames","convertKeysToHeaderFields","fieldTitleMap","retrieveHeaderFields","keyStrings","getFieldNameList","unwindRecordsIfNecessary","finalPass","originalRecordsLength","records","unwind","userSelectedFields","processRecords","recordString","record","recordFieldData","fields","recordValues","recordFieldValue","isUndefined","isEmptyField","filteredRecordFieldValue","removeEmptyFields","processRecordFieldDataForExpandedArrayObject","retrieveRecordFieldData","processedRecordData","trimRecordFieldValue","recordFieldValueToString","wrapFieldValueIfNecessary","toLocaleString","isNumber","wrapDelimiter","processed","generateCsvFromComponents","fieldTitleMapKeys","generateCsvHeader","headingKey","arrayDifference","isNull","isString","buildC2JOptions","dateStringRegex","MAX_ARRAY_LENGTH","validationFn","errorMessages","schemaA","schemaB","fieldPath","valueToUnwind","cloned","unwindItem","flat","safeArray","INFINITY","symbolTag","reAsciiWord","reLatin","rsAstralRange","rsComboMarksRange","rsComboSymbolsRange","rsDingbatRange","rsLowerRange","rsUpperRange","rsVarRange","rsBreakRange","rsMathOpRange","rsApos","rsAstral","rsBreak","rsCombo","rsDigits","rsDingbat","rsLower","rsMisc","rsFitz","rsNonAstral","rsRegional","rsSurrPair","rsUpper","rsZWJ","rsLowerMisc","rsUpperMisc","rsOptLowerContr","rsOptUpperContr","reOptMod","rsOptVar","rsSeq","rsEmoji","rsSymbol","reApos","reComboMark","reUnicode","reUnicodeWord","reHasUnicode","reHasUnicodeWord","freeGlobal","freeSelf","deburrLetter","hasUnicode","stringToArray","unicodeToArray","asciiToArray","objectToString","symbolProto","symbolToString","baseToString","isObjectLike","isSymbol","castSlice","baseSlice","camelCase","word","upperFirst","iteratee","initAccum","arrayReduce","guard","hasUnicodeWord","unicodeWords","asciiWords","words","deburr","methodName","strSymbols","chr","trailing","NAN","reTrim","reIsBadHex","reIsBinary","reIsOctal","freeParseInt","nativeMax","nativeMin","toNumber","isBinary","func","wait","lastArgs","lastThis","maxWait","timerId","lastCallTime","lastInvokeTime","leading","maxing","invokeFunc","shouldInvoke","timeSinceLastCall","timerExpired","trailingEdge","remainingWait","debounced","isInvoking","leadingEdge","cancel","flush","lowerCase","snakeCase","DataView","getNative","hashClear","hashDelete","hashGet","hashHas","hashSet","Hash","entry","listCacheClear","listCacheDelete","listCacheGet","listCacheHas","listCacheSet","ListCache","mapCacheClear","mapCacheDelete","mapCacheGet","mapCacheHas","mapCacheSet","MapCache","stackClear","stackDelete","stackGet","stackHas","stackSet","Stack","__data__","Uint8Array","WeakMap","resIndex","baseTimes","isArguments","isBuffer","isIndex","isTypedArray","inherited","isArr","isArg","isBuff","isType","skipIndexes","baseAssignValue","eq","objValue","copyObject","keysIn","arrayEach","assignValue","baseAssign","baseAssignIn","cloneBuffer","copyArray","copySymbols","copySymbolsIn","getAllKeys","getAllKeysIn","getTag","initCloneArray","initCloneByTag","initCloneObject","isMap","isSet","argsTag","funcTag","objectTag","cloneableTags","baseClone","bitmask","customizer","isDeep","isFlat","isFull","tag","isFunc","stacked","subValue","objectCreate","baseCreate","arrayPush","keysFunc","symbolsFunc","getRawTag","symToStringTag","toStringTag","baseGetTag","isFunction","isMasked","reIsHostCtor","funcProto","objectProto","funcToString","reIsNative","isLength","typedArrayTags","isPrototype","nativeKeys","nativeKeysIn","isProto","trimmedEndIndex","reTrimStart","arrayBuffer","byteLength","freeExports","freeModule","Buffer","allocUnsafe","buffer","cloneArrayBuffer","dataView","byteOffset","reFlags","regexp","symbolValueOf","symbol","typedArray","isNew","getSymbols","getSymbolsIn","coreJsData","baseGetAllKeys","isKeyable","baseIsNative","getValue","getPrototype","overArg","nativeObjectToString","isOwn","unmasked","arrayFilter","stubArray","nativeGetSymbols","mapTag","promiseTag","setTag","weakMapTag","dataViewTag","dataViewCtorString","mapCtorString","promiseCtorString","setCtorString","weakMapCtorString","ArrayBuffer","Ctor","ctorString","nativeCreate","cloneDataView","cloneRegExp","cloneSymbol","cloneTypedArray","reIsUint","maskSrcKey","IE_PROTO","assocIndexOf","getMapData","freeProcess","nodeUtil","require","binding","pairs","LARGE_ARRAY_SIZE","reWhitespace","CLONE_DEEP_FLAG","timeWaiting","mapping","fallbackHolder","baseAry","cloneArray","wrapImmutable","cloner","baseConvert","util","isLib","isObj","cap","curry","fixed","immutable","rearg","defaultHolder","forceCurry","forceFixed","forceRearg","pristine","runInContext","helpers","ary","isWeakMap","toPath","aryMethodKeys","aryMethod","wrappers","castArray","mixin","pair","nthArg","indexes","castCap","iterateeRearg","baseArity","iterateeAry","castFixed","skipFixed","methodSpread","otherArgs","flatSpread","castRearg","skipRearg","methodRearg","aryRearg","cloneByPath","nested","createConverter","realName","aliasToReal","remap","oldOptions","newUtil","newFunc","wrapped","wrapper","mutate","createCloner","aryKey","otherName","afterRearg","castCurry","realToAlias","alias","baseIsArguments","stubFalse","baseIsMap","baseUnary","nodeIsMap","baseIsSet","nodeIsSet","baseIsTypedArray","nodeIsTypedArray","arrayLikeKeys","baseKeys","isArrayLike","baseKeysIn","$t","Cn","Lt","Yr","Nr","Pr","cn","V","Mr","Ct","Fr","dn","bn","wn","mn","xn","Sn","Wn","Un","$n","Dn","Mn","Nn","Pn","Zn","Kn","Vn","Gn","Hn","Yn","Qn","nt","tt","rt","et","it","ft","ct","at","lt","st","ht","pt","_t","vt","gt","yt","dt","bt","wt","xt","jt","At","kt","Ot","It","Rt","zt","Et","St","Wt","Ut","Bt","Tt","Dt","Mt","Ft","Nt","Pt","qt","Zt","Kt","Vt","Gt","Ht","Jt","Yt","tr","Qt","rr","cr","ar","lr","ur","sr","hr","pr","_r","vr","gr","yr","dr","br","mr","xr","jr","Ar","kr","Or","Ir","Rr","zr","Er","Sr","Ur","Br","Tr","$r","Dr","qr","Zr","Kr","Vr","Qr","Xr","ne","te","ee","ue","ie","oe","fe","ce","isArrayBuffer","ae","le","se","isRegExp","he","pe","ve","ge","ye","be","cc","bh","bl","eo","__wrapped__","__actions__","__chain__","__index__","__values__","__dir__","__filtered__","__iteratees__","__takeCount__","__views__","Xt","ir","wr","dh","mh","Oh","hl","Ci","tu","Xi","Tu","Gf","Wr","Lr","ys","Cr","$u","Pc","Tl","Mc","fc","zi","zs","Iu","Ei","Rs","Mu","qc","Is","Du","Ru","zu","Wu","Eu","_s","ll","Su","Si","kh","jh","di","yi","Gr","Ws","Hr","Jr","bc","Li","bs","ws","uc","ku","no","de","we","Bl","xl","ki","Ki","me","xe","je","ke","Hl","Ie","Gi","jo","Re","Se","pi","Rl","vi","We","Ce","hn","Ue","ml","Di","kl","De","La","Ze","qe","Fa","Me","Mi","Vl","Fe","Zi","Ne","Pe","Hf","ji","Ni","Bi","Fi","Nc","Ke","Ji","Jf","gc","Rc","Ve","Ge","He","mi","criteria","Lu","Cu","Ye","fu","Xe","Ll","nu","yu","Nl","Ql","eu","uu","Ls","Vi","iu","ra","ou","cu","au","lu","su","hu","pu","_u","vu","vs","gu","ks","du","bu","wu","mu","xu","ju","Au","Cs","Ec","Ou","zl","Uu","Gl","Bu","Fu","Nu","Ui","Pu","qu","Ku","Vu","Ra","ca","Gu","gs","Hu","wi","oi","Qu","Ju","Yu","gi","thru","bi","Os","$i","plant","Hi","Xu","Oe","ni","ti","ri","Fl","ei","ui","Ac","ru","ii","Ic","Ss","Yi","fi","al","kc","Zl","ci","ai","qi","Zu","ms","li","si","hi","_o","fs","Ca","xi","Ti","Ai","Ri","oc","El","Cl","Wi","ro","Ii","Qi","Jl","dl","ho","po","bo","Oo","Eo","Xl","Go","Ho","Qo","nf","vf","ds","yf","Rf","zf","Wf","fh","As","Cf","cache","Cache","Uf","rc","ic","vc","jl","dc","jc","Ul","Oc","Gc","Qh","Sa","Ta","chain","Da","Qe","Pa","qa","defaults","pick","ol","fl","cl","sl","_l","vl","yl","wl","Al","Ol","Il","Sl","Wl","isConcatSpreadable","$l","Dl","Ml","Pl","ql","Kl","Yl","ns","ts","rs","es","us","cs","as","ls","ss","hs","ps","templateSettings","escape","evaluate","interpolate","variable","imports","xs","js","Es","Pi","Us","Bs","Ts","$s","Ds","Ms","Fs","Ns","Ps","qs","Zs","Ks","Vs","Gs","Hs","Js","Ys","Qs","Xs","nh","th","rh","eh","uh","ih","oh","ch","ah","_n","lh","sh","hh","ph","vh","gh","yh","wh","xh","Ah","Ih","Rh","zh","Eh","Sh","Wh","Lh","Ch","Uh","Mh","Bh","Th","$h","Dh","Fh","Nh","Je","Ph","qh","Zh","Kh","Vh","Gh","Hh","Jh","Yh","Xh","np","tp","rp","ep","up","ip","fp","cp","ap","lp","hp","pp","_p","vp","gp","after","assignIn","assignInWith","assignWith","before","bindAll","bindKey","chunk","compact","conforms","constant","countBy","Ef","curryRight","Sf","debounce","defaultsDeep","defer","delay","differenceBy","differenceWith","dropRight","dropRightWhile","dropWhile","flatMap","flatMapDeep","flatMapDepth","flattenDeep","flattenDepth","flip","flow","flowRight","fromPairs","functions","functionsIn","groupBy","initial","intersection","intersectionBy","intersectionWith","invert","invertBy","invokeMap","keyBy","mapKeys","mapValues","matchesProperty","memoize","mergeWith","methodOf","negate","omit","omitBy","once","orderBy","over","overArgs","overEvery","overSome","partial","partialRight","partition","pickBy","propertyOf","pull","pullAll","pullAllBy","pullAllWith","pullAt","range","rangeRight","remove","sampleSize","setWith","shuffle","sortBy","sortedUniq","sortedUniqBy","spread","tail","take","takeRight","takeRightWhile","takeWhile","tap","throttle","toArray","toPairs","toPairsIn","toPlainObject","unary","union","unionBy","unionWith","uniq","uniqBy","uniqWith","unset","unzip","unzipWith","updateWith","valuesIn","without","xor","xorBy","xorWith","zip","zipObject","zipObjectDeep","zipWith","entriesIn","extendWith","attempt","capitalize","cloneDeep","cloneDeepWith","cloneWith","conformsTo","defaultTo","divide","escapeRegExp","findLast","findLastIndex","findLastKey","forEachRight","forIn","forInRight","forOwn","forOwnRight","gte","hasIn","head","identity","inRange","Ae","invoke","isArrayLikeObject","isElement","isEqualWith","isInteger","isMatchWith","isNative","isNil","isSafeInteger","isWeakSet","kebabCase","last","lowerFirst","lte","maxBy","mean","meanBy","minBy","stubObject","stubString","stubTrue","multiply","nth","noConflict","pad","padEnd","reduceRight","repeat","sample","sortedIndex","sortedIndexBy","sortedIndexOf","sortedLastIndex","sortedLastIndexBy","sortedLastIndexOf","startCase","subtract","sum","sumBy","sourceURL","times","toFinite","toLength","toLower","toSafeInteger","toUpper","truncate","omission","global","unescape","uniqueId","upperCase","eachRight","Oi","commit","baseTrim","window$1","Config","DEBUG","LIB_VERSION","loc","hostname","referrer","escapee","white","ArrayProto","FuncProto","ObjProto","windowConsole","document$1","windowOpera","opera","nativeBind","nativeForEach","nativeIndexOf","nativeMap","nativeIsArray","breaker","critical","log_func_with_prefix","console_with_prefix","bound","ctor","iterable","include","found","inherit","subclass","superclass","isEmptyObject","encodeDates","formatDate","strip_empty_properties","JSONEncode","mixed_val","quote","escapable","holder","gap","mind","JSONDecode","SyntaxError","hex","uffff","h3","h4","bits","b64","ac","enc","tmp_arr","utf8Encode","stringl","utftext","UUID","performance","byte_array","tmp","UA","BLOCKED_UA_STRS","isBlockedUA","HTTPBuildQuery","formdata","arg_separator","use_val","use_key","getQueryParam","nameEQ","set_seconds","is_cross_subdomain","is_secure","is_cross_site","domain_override","cdomain","expires","secure","domain","extract_domain","setTime","toGMTString","new_cookie_val","_localStorageSupported","localStorageSupported","forceCheck","supported","cheap_guid","removeItem","is_supported","force_check","register_event","fixEvent","preventDefault","stopPropagation","returnValue","cancelBubble","handler","oldSchool","useCapture","ontype","old_handler","new_handler","old_handlers","old_result","new_result","makeHandler","TOKEN_MATCH_REGEX","dom_query","getAllChildren","all","bad_whitespace","hasClass","selector","getElementsBySelector","foundCount","currentContextIndex","currentContext","token_match","checkFunction","attrName","attrOperator","attrValue","getAttribute","query","CAMPAIGN_KEYWORDS","CLICK_IDS","campaignParams","default_value","kw","kwkey","clickParams","idkey","marketingParams","searchEngine","searchInfo","keyword","user_agent","vendor","browserVersion","referringDomain","properties","people_properties","mpPageViewProperties","maxlen","guid","SIMPLE_DOMAIN_MATCH_REGEX","DOMAIN_MATCH_REGEX","domain_regex","tld","JSONStringify","JSONParse","DomTracker","create_properties","event_handler","after_track_handler","init","mixpanel_instance","mp","track","event_name","user_callback","that","override_event","get_config","track_callback","timeout_occured","callback_fired","LinkTracker","new_tab","which","metaKey","ctrlKey","FormTracker","logger$2","SharedLock","storageKey","pollIntervalMS","timeoutMS","withLock","lockedCB","errorCB","pid","keyX","keyY","keyZ","reportError","loop","waitFor","getSetY","valY","criticalSection","logger$1","RequestQueue","errorReporter","lock","memQueue","enqueue","flushInterval","queueEntry","succeeded","storedQueue","readFromStorage","saveToStorage","fillBatch","batchSize","batch","idsInBatch","orphaned","filterOutIDsAndInvalid","items","idSet","filteredItems","removeItemsByID","ids","removeFromStorage","updatePayloads","existingItems","itemsToUpdate","newItems","newPayload","storageEntry","queue","RequestBatcher","libConfig","sendRequest","sendRequestFunc","beforeSendHook","stopAllBatching","stopAllBatchingFunc","stopped","consecutiveRemovalFailures","itemIdsSentSuccessfully","timeoutID","resetBatchSize","resetFlush","scheduleFlush","flushMS","requestInProgress","currentBatchSize","dataForRequest","transformedItems","addPayload","itemId","timesSent","batchSendCallback","removeItemsFromQueue","unloading","xhr_req","retryMS","headers","retryAfter","halvedBatchSize","requestOptions","verbose","ignore_json_errors","timeout_ms","transport","GDPR_DEFAULT_PERSISTENCE_PREFIX","optIn","_optInOut","optOut","hasOptedIn","_getStorageValue","hasOptedOut","ignoreDnt","hasDntOn","dntValue","_hasDoNotTrackFlagOn","optedOut","addOptOutCheckMixpanelLib","_addOptOutCheck","addOptOutCheckMixpanelPeople","_get_config","addOptOutCheckMixpanelGroup","clearOptInOut","_getStorage","_getStorageKey","crossSubdomainCookie","cookieDomain","persistenceType","persistencePrefix","optValue","cookieExpiration","secureCookie","crossSiteCookie","trackEventName","trackProperties","getConfigValue","SET_ACTION","SET_ONCE_ACTION","UNSET_ACTION","ADD_ACTION","APPEND_ACTION","UNION_ACTION","REMOVE_ACTION","apiActions","set_action","$set","_is_reserved_property","unset_action","$unset","set_once_action","$set_once","union_action","list_name","$union","append_action","$append","remove_action","$remove","delete_action","MixpanelGroup","_init","group_key","group_id","_mixpanel","_group_key","_group_id","_send_request","set_once","date_encoded_data","_track_or_batch","batcher","request_batchers","groups","conf","MixpanelPeople","update_referrer_info","get_referrer_info","increment","by","$add","append","track_charge","clear_charges","delete_user","_identify_called","get_distinct_id","device_id","get_property","had_persisted_distinct_id","people","_enqueue","conf_var","identify_called","_add_to_people_queue","_flush_one_queue","action_method","queue_to_params_fn","queued_data","load_queue","action_params","_pop_from_people_queue","save","_flush","_set_callback","_add_callback","_append_callback","_set_once_callback","_union_callback","_unset_callback","_remove_callback","$append_queue","$append_item","append_callback","$remove_queue","$remove_item","remove_callback","init_type","mixpanel_master","SET_QUEUE_KEY","SET_ONCE_QUEUE_KEY","UNSET_QUEUE_KEY","ADD_QUEUE_KEY","APPEND_QUEUE_KEY","REMOVE_QUEUE_KEY","UNION_QUEUE_KEY","PEOPLE_DISTINCT_ID_KEY","ALIAS_ID_KEY","EVENT_TIMERS_KEY","RESERVED_PROPERTIES","MixpanelPersistence","campaign_params_saved","storage_type","update_config","upgrade","old_cookie_name","old_cookie","upgrade_from_old_lib","register_once","expire_days","cross_subdomain","cross_site","cookie_domain","load_prop","default_expiry","register","unregister","update_search_keyword","set_disabled","set_cookie_domain","set_cross_site","set_cross_subdomain","set_secure","get_cross_subdomain","q_key","_get_queue_key","q_data","set_q","_get_or_create_queue","set_once_q","unset_q","add_q","union_q","remove_q","append_q","enqueued_obj","append_obj","queued_action","default_val","set_event_timer","timers","remove_event_timer","IDENTITY_FUNC","NOOP_FUNC","PRIMARY_INSTANCE_NAME","PAYLOAD_TYPE_BASE64","DEVICE_ID_PREFIX","USE_XHR","ENQUEUE_REQUESTS","sendBeacon","DEFAULT_API_ROUTES","DEFAULT_CONFIG","DOM_LOADED","MixpanelLib","create_mplib","instance","_cached_groups","utm_params","initial_utm_params","has_utm","utm_value","utm_key","_execute_array","report_error","_loaded","variable_features","set_config","__dom_loaded_queue","__request_queue","__disabled_events","_batch_requests","init_batchers","flush_on_unload","ev","get_batcher_configs","batcher_config","queue_key","unpersisted_superprops","_gdpr_init","uuid","track_pageview","_set_default_superprops","_dom_loaded","_track_dom","has_opted_out_tracking","DomClass","_prepare_callback","jsc","randomized_cb","callback_string","DEFAULT_OPTIONS","body_data","use_post","use_sendBeacon","verbose_mode","lib","headerValue","headerName","start_time","withCredentials","responseText","async","insertBefore","fn_name","alias_calls","other_calls","tracking_calls","execute","calls","are_batchers_initialized","queue_prefix","api_routes","_batcher_configs","batcher_for","attrs","_encode_data_for_request","_run_hook","stop_batch_senders","batcher_configs","start_batch_senders","_batchers_were_started","disable","disable_all_events","encoded_data","truncated_data","should_send_immediately","send_request_options","request_enqueued_or_initiated","send_request_immediately","skip_hooks","_event_is_disabled","start_timestamp","duration_in_ms","marketing_properties","property_blacklist","blacklisted_prop","set_group","group_ids","add_group","old_values","remove_group","old_value","track_with_groups","tracking_props","_create_map_key","_remove_group_from_cache","get_group","map_key","group","default_page_properties","event_properties","track_links","track_forms","time_event","REGISTER_DEFAULTS","options_for_register","days_or_options","_register_single","identify","new_distinct_id","previous_distinct_id","name_tag","prop_name","hook_name","property_name","has_opted_in_tracking","opt_in_tracking","opt_out_tracking","clear_opt_in_out_tracking","_gdpr_update_persistence","_gdpr_call_func","instances","override_mp_init_func","mixpanel","dom_loaded_handler","inst","toplevel","frameElement","doScroll","do_scroll_check","add_dom_loaded_handler","return","heartBeatIntervalTime","heartBeatDetectIntervalTime","_heartBeatIntervalId","_heartBeatDetectIntervalId","_heartBeatIntervalTime","_heartBeatDetectIntervalTime","destroy","setInterval","_setLocalTime","clearInterval","detect","storageArea","EXCLUSIVE","SHARED","REQUEST_QUEUE_MAP","HELD_LOCK_SET","CLIENT_IDS","_defaultOptions","ifAvailable","steal","_clientId","_storeThisClientId","_cleanUnliveClientLocks","_onUnload","_getClientIds","_storeClientIds","_handleRequestArgs","_resolveWithCB","_heldLockSet","_requestLockQueueMap","_handleExceptionWhenStealIsTrue","_handleNewHeldLock","_handleSignalExisted","_handleHeldLockAndRequest","_query","_pushToLockRequestQueueMap","_storeRequestLockQueueMap","_pushToHeldLockSet","_storeHeldLockSet","_updateHeldAndRequestLocks","_storeHeldLockSetAndRequestLockQueueMap","AbortSignal","_signalOnabort","_handleNewLockRequest","_isInHeldLockSet","_handleHeldLockBeSteal","_handleSharedLockFromListener","held","_cleanClientLocksByClientId","_cleanRequestLockQueueByClientId","_cleanHeldLockSetByClientId","locks","canUseDOM","ExecutionEnvironment","canUseWorkers","Worker","canUseEventListeners","canUseViewport","isInWorker","_ie","_firefox","_opera","_webkit","_chrome","_ie_real_version","_osx","_windows","_linux","_android","_win64","_iphone","_ipad","_native","_mobile","_populated","_populate","uas","agent","documentMode","trident","ver","UserAgent_DEPRECATED","ieCompatibilityMode","ie64","firefox","webkit","safari","windows","osx","linux","iphone","mobile","nativeApp","android","ipad","useHasFeature","hasFeature","eventNameSuffix","capture","eventName","isEventSupported","normalizeWheel","sX","sY","pX","pY","wheelDelta","wheelDeltaY","wheelDeltaX","axis","HORIZONTAL_AXIS","deltaY","deltaX","deltaMode","spinX","spinY","pixelX","pixelY","getEventType","propIsEnumerable","test1","test2","test3","letter","shouldUseNative","symbols","toObject","_typeof","_createClass","Constructor","protoProps","staticProps","_react","_react2","_interopRequireDefault","_propTypes2","_once2","_fp","_uuid2","OTPublisher","_Component","_classCallCheck","_possibleConstructorReturn","sessionConnectedHandler","publishToSession","publisher","streamCreatedHandler","lastStreamId","stream","_inherits","createPublisher","prevProps","useDefault","shouldUpdate","updatePublisherProperty","destroyPublisher","off","_this3","publisherId","eventHandlers","unpublish","_this4","publish","errorHandler","onPublish","_this5","insertDefaultUI","OT","initPublisher","onInit","handles","connection","_this6","_props","shape","connectionId","objectOf","_createSession3","OTSession","streams","sessionHelper","createSession","sessionId","destroySession","onStreamsUpdated","onConnect","oneOfType","arrayOf","isRequired","unsubscribe","OTStreams","_OTSubscriberContext2","Children","only","childrenWithContextWrapper","OTSubscriber","subscriber","currentRetryAttempt","maxRetryAttempts","retryAttemptTimeout","createSubscriber","cast","Type","updateSubscriberProperty","previous","destroySubscriber","subscriberId","retry","handleRetrySubscriber","onSubscribe","streamId","bool","OTSubscriberContext","onStreamCreated","onStreamDestroyed","streamCreated","streamDestroyed","initSession","_OTSession2","_OTPublisher2","_OTStreams2","_OTSubscriber2","_createSession2","_preloadScript2","InnerComponent","PreloadScript","onScriptLoad","isPresent","scriptLoaded","scriptLoading","scriptUrl","opentokClientUrl","_scriptjs2","loadingDelegate","restProps","_objectWithoutProperties","_reactDisplayName2","DEFAULT_SCRIPT_URL","ReactPropTypesSecret","emptyFunction","emptyFunctionWithReset","resetWarningCache","shim","componentName","propFullName","secret","getShim","ReactPropTypes","elementType","instanceOf","oneOf","exact","checkPropTypes","PropTypes","bigint","encode","setUint32","getUint32","setUint8","setUint16","setFloat64","getUint8","getUint16","getFloat32","getFloat64","CBOR","SuppressedError","legacyCryptoModule","aesCbcCryptoModule","defaultCryptor","cryptors","getAllCryptors","encoder","TextEncoder","decoder","TextDecoder","File","mimeType","contentLength","toBuffer","toArrayBuffer","FileReader","readAsArrayBuffer","readAsBinaryString","toStream","toFile","toFileUri","toBlob","supportsBlob","Blob","supportsFile","supportsBuffer","supportsStream","supportsString","supportsArrayBuffer","supportsEncryptFile","supportsFileUri","PNNetworkIssuesCategory","PNTimeoutCategory","PNCancelledCategory","PNBadRequestCategory","PNAccessDeniedCategory","PNValidationErrorCategory","PNAcknowledgmentCategory","PNUnknownCategory","PNNetworkUpCategory","PNNetworkDownCategory","PNReconnectedCategory","PNConnectedCategory","PNRequestMessageCountExceededCategory","PNDisconnectedCategory","PNConnectionErrorCategory","PNDisconnectedUnexpectedlyCategory","statusCode","category","Base","mixIn","$super","WordArray","sigBytes","Hex","Latin1","Utf8","BufferedBlockAlgorithm","_data","_nDataBytes","_append","_process","_minBufferSize","_doProcessBlock","Hasher","cfg","_doReset","finalize","_doFinalize","_createHelper","_createHmacHelper","HMAC","algo","SHA256","_hash","HmacSHA256","_hasher","_oKey","_iKey","Base64","_map","sin","MD5","HmacMD5","EvpKDF","keySize","hasher","iterations","compute","Cipher","createEncryptor","_ENC_XFORM_MODE","createDecryptor","_DEC_XFORM_MODE","_xformMode","ivSize","encrypt","decrypt","StreamCipher","_iv","_prevBlock","BlockCipherMode","Encryptor","Decryptor","_cipher","processBlock","encryptBlock","decryptBlock","CBC","Pkcs7","unpad","BlockCipher","padding","iv","_mode","CipherParams","OpenSSL","ciphertext","salt","SerializableCipher","algorithm","_parse","kdf","PasswordBasedCipher","AES","_nRounds","_keySchedule","_invKeySchedule","_doCryptBlock","ECB","cipherKey","CryptoJS","encryptedKey","getIv","bufferToWordArray","encryptFileData","getKey","crypto","subtle","Uint8ClampedArray","decryptFileData","identifier","getRandomValues","BLOCK_SIZE","importKey","allowedKeyEncodings","allowedKeyLengths","allowedModes","encryptKey","keyEncoding","keyLength","HMACSHA256","secretKey","customEncrypt","pnEncrypt","customDecrypt","pnDecrypt","parseOptions","getMode","getPaddedKey","useRandomIVs","getRandomIV","getIV","decodeKey","encryptArrayBuffer","encryptString","encryptFile","decryptArrayBuffer","decryptString","IV_LENGTH","decryptFile","cryptor","fileCryptor","withDefaultCryptor","LEGACY_IDENTIFIER","getHeaderData","concatArrayBuffer","getFileData","tryParse","getCryptor","metadataLength","getCryptorFromId","SENTINEL","MAX_VERSION","IDENTIFIER_LENGTH","Uint16Array","_identifier","_metadataLength","createFromError","createFromServiceResponse","errorData","toStatus","operation","toPubNubError","subscriptionWorkerReady","workerEventsQueue","setupSubscriptionWorker","makeSendable","clientIdentifier","subscriptionKey","logVerbosity","cancellable","scheduleEventPost","sharedSubscriptionWorker","postMessage","flushScheduledEvents","subscriptionWorker","SharedWorker","workerUrl","sdkVersion","userId","workerLogVerbosity","onmessage","handleWorkerEvent","dir","logRequestProgress","fromEntries","keepAlive","requestFromTransportRequest","logRequestProcessProgress","formData","queryParameters","FormData","Request","redirect","subscriptionWorkerUrl","ssl","transactionalRequestTimeout","subscribeRequestTimeout","restore","useInstanceId","suppressLeaveEvents","requestMessageCountThreshold","autoNetworkDetection","enableEventEngine","maintainPresenceState","subscribeKey","publishKey","presenceTimeout","heartbeatInterval","dedupeOnSubscribe","useRequestId","announceSuccessfulHeartbeats","announceFailedHeartbeats","fileUploadPublishRetryLimit","keySet","maximumCacheSize","listenToBrowserNetworkEvents","subscriptionWorkerLogVerbosity","isUUID","createUUID","retryConfiguration","cryptoModule","_pnsdkSuffix","_instanceId","_cryptoModule","_cipherKey","_setupCryptoModule","instanceId","getUserId","setUserId","getAuthKey","authKey","setAuthKey","getFilterExpression","filterExpression","setFilterExpression","getCipherKey","setCipherKey","getCustomEncrypt","getCustomDecrypt","getCryptoModule","getUseRandomIVs","setPresenceTimeout","getPresenceTimeout","getHeartbeatInterval","setHeartbeatInterval","getTransactionTimeout","getSubscribeTimeout","PubNubFile","getVersion","_addPnsdkSuffix","_getPnsdkSuffix","getUUID","setUUID","cbor","setToken","getToken","parseToken","decodeToken","chan","grp","pat","ttl","authorized_uuid","sig","resources","uuids","extractPermissions","channels","read","write","manage","GET","POST","PATCH","DELETE","LOCAL","textDecoder","clientConfiguration","shaHMAC","signatureGenerator","instanceid","requestid","pnsdk","generatePNSDK","authenticateRequest","signRequest","tokenManager","auth","sdkName","sdkFamily","partnerId","listeners","addListener","removeListener","removeAllListeners","announceStatus","announcePresence","presence","announceMessage","announceSignal","announceMessageAction","messageAction","announceFile","announceObjects","objects","announceNetworkUp","announceNetworkDown","announceUser","announceSpace","announceMembership","membership","onReconnect","startPolling","timeTimer","callTime","stopPolling","hashHistory","timetoken","isDuplicate","addEntry","clearHistory","listenerManager","eventEmitter","subscribeCall","heartbeatCall","leaveCall","reconnectionManager","dedupingManager","heartbeatChannelGroups","heartbeatChannels","presenceChannelGroups","presenceChannels","heartbeatTimer","presenceState","pendingChannelGroupSubscriptions","pendingChannelSubscriptions","channelGroups","currentTimetoken","lastTimetoken","storedTimetoken","subscriptionStatusAnnounced","isOnline","subscribedChannels","subscribedChannelGroups","_subscribeAbort","stopSubscribeLoop","stopHeartbeatTimer","reconnect","startSubscribeLoop","startHeartbeatTimer","withPresence","withHeartbeats","affectedChannels","affectedChannelGroups","region","unsubscribeAll","heartbeat","processSubscribeResponse","cursor","messages","emitEvent","changePresence","connected","sendHeartbeat","_payload","setDefaultPayloadStructure","_title","_subtitle","_body","_badge","sound","_sound","_apnsPushType","_isSilent","configurations","_configurations","notification","aps","alert","objectFromAPNS2Configuration","pn_push","targets","collapseId","expirationDate","auth_method","objectFromAPNSTarget","collapse_id","expiration","topic","environment","excludedDevices","excluded_devices","_icon","_tag","apns","fcm","debugging","_debugging","buildPayload","pn_apns","pn_gcm","pn_debug","requestIdentifier","_cancellationController","cancellationController","deserializeResponse","PNPublishOperation","PNSignalOperation","PNSubscribeOperation","PNUnsubscribeOperation","PNWhereNowOperation","PNHereNowOperation","PNGlobalHereNowOperation","PNSetStateOperation","PNGetStateOperation","PNHeartbeatOperation","PNAddMessageActionOperation","PNRemoveMessageActionOperation","PNGetMessageActionsOperation","PNTimeOperation","PNHistoryOperation","PNDeleteMessagesOperation","PNFetchMessagesOperation","PNMessageCounts","PNGetAllUUIDMetadataOperation","PNGetUUIDMetadataOperation","PNSetUUIDMetadataOperation","PNRemoveUUIDMetadataOperation","PNGetAllChannelMetadataOperation","PNGetChannelMetadataOperation","PNSetChannelMetadataOperation","PNRemoveChannelMetadataOperation","PNGetMembersOperation","PNSetMembersOperation","PNGetMembershipsOperation","PNSetMembershipsOperation","PNListFilesOperation","PNGenerateUploadUrlOperation","PNPublishFileOperation","PNPublishFileMessageOperation","PNGetFileUrlOperation","PNDownloadFileOperation","PNDeleteFileOperation","PNAddPushNotificationEnabledChannelsOperation","PNRemovePushNotificationEnabledChannelsOperation","PNPushNotificationEnabledChannelsOperation","PNRemoveAllPushNotificationsOperation","PNChannelGroupsOperation","PNRemoveGroupOperation","PNChannelsForGroupOperation","PNAddChannelsToGroupOperation","PNRemoveChannelsFromGroupOperation","PNAccessManagerGrant","PNAccessManagerGrantToken","PNAccessManagerAudit","PNAccessManagerRevokeToken","PNHandshakeOperation","PNReceiveMessagesOperation","Presence","Message","Signal","AppContext","MessageAction","Files","parameters","messageFromEnvelope","fileFromEnvelope","presenceEventFromEnvelope","signalFromEnvelope","appContextFromEnvelope","messageActionFromEnvelope","accept","subscriptionChannelFromEnvelope","channel","subscription","actualChannel","subscribedChannel","decryptedData","userMetadata","getFileUrl","channelListenerMap","groupListenerMap","announce","spaceId","sync","transition","transitionMap","enterEffects","exitEffects","onEnter","onExit","describe","currentState","invocation","fromState","fromContext","toState","toContext","dependencies","handlers","managed","dispose","_aborted","asyncFunction","abortSignal","Ee","Te","leave","heartbeatDelay","retryDelay","shouldRetry","attempts","getDelay","emitStatus","with","$e","_engine","engine","dispatcher","_unsubscribeEngine","leaveAll","Le","LinearRetryPolicy","maximumRetry","getGiveupReason","ExponentialRetryPolicy","minimumDelay","maximumDelay","Be","ze","ot","ut","handshake","receiveMessages","emitMessages","getSubscribedChannels","getSubscribedChannelGroups","sendByPost","prepareMessagePayload","replicate","storeInHistory","store","norep","includeUUIDs","includeState","total_channels","occupancy","occupants","totalChannels","totalOccupancy","disable_uuids","channelTimetokens","channelsTimetoken","stringifiedTimeToken","includeMeta","processPayload","startTimeToken","endTimeToken","include_token","string_message_token","include_meta","includeMessageActions","includeUuid","includeUUID","includeMessageType","message_type","messageType","actions","more","include_uuid","include_message_type","isFileMessage","actionTimetoken","limit","messageTimetoken","fileId","file_upload_request","formFields","form_fields","uploadUrl","generateFileUploadUrl","uploadFile","publishFileMessage","cryptography","publishFile","pubnub","channelNames","groupNames","onMessage","onPresence","onSignal","onObjects","onMessageAction","onFile","subscriptionOptions","subscriptionList","channelGroup","addSubscription","removeSubscription","addSubscriptionSet","subscriptions","removeSubscriptionSet","receivePresenceEvents","listChannels","listGroups","addChannels","removeChannels","deleteGroup","pushGateway","deleteDevice","customFields","totalCount","page","statusField","channelFields","customChannelFields","channelStatusField","channelTypeField","custom","UUIDFields","customUUIDFields","UUIDStatusField","UUIDTypeField","getAllUUIDMetadata","_getAllUUIDMetadata","getUUIDMetadata","_getUUIDMetadata","setUUIDMetadata","_setUUIDMetadata","removeUUIDMetadata","_removeUUIDMetadata","getAllChannelMetadata","_getAllChannelMetadata","getChannelMetadata","_getChannelMetadata","setChannelMetadata","_setChannelMetadata","removeChannelMetadata","_removeChannelMetadata","getChannelMembers","setChannelMembers","removeChannelMembers","getMemberships","setMemberships","removeMemberships","fetchMemberships","updated","eTag","addMemberships","users","spaces","notificationPayload","generateUUID","_configuration","_objects","_channelGroups","_push","presenceEventEngine","makeUnsubscribe","eventEngine","subscribeHandshake","subscribeReceiveMessages","subscriptionManager","makeSubscribe","channelMetadata","subscriptionSet","fire","getMessageActions","addMessageAction","removeMessageAction","fetchMessages","deleteMessages","messageCounts","hereNow","whereNow","grantToken","revokeToken","grant","audit","fetchUsers","fetchUser","createUser","updateUser","removeUser","fetchSpaces","fetchSpace","createSpace","updateSpace","removeSpace","updateMemberships","userIds","spaceIds","sendFile","listFiles","downloadFile","deleteFile","OPERATIONS","CATEGORIES","base64ToBinary","networkDownDetected","networkUpDetected","CryptoModule","QR8bitByte","MODE_8BIT_BYTE","getLength","put","QRBitBuffer","bufIndex","putBit","getLengthInBits","bit","math","QRPolynomial","gexp","glog","ratio","BitByte","RSBlock","BitBuffer","Polynomial","QRCode","typeNumber","errorCorrectLevel","modules","moduleCount","dataCache","dataList","addData","newData","isDark","row","col","getModuleCount","make","rsBlocks","getRSBlocks","totalDataCount","dataCount","makeImpl","getBestMaskPattern","maskPattern","setupPositionProbePattern","setupPositionAdjustPattern","setupTimingPattern","setupTypeInfo","setupTypeNumber","createData","mapData","minLostPoint","lostPoint","getLostPoint","createMovieClip","target_mc","instance_name","depth","qr_mc","createEmptyMovieClip","beginFill","moveTo","lineTo","endFill","getPatternPosition","getBCHTypeNumber","getBCHTypeInfo","inc","bitIndex","byteIndex","dark","getMask","PAD0","PAD1","createBytes","maxDcCount","maxEcCount","dcdata","ecdata","dcCount","ecCount","rsPoly","getErrorCorrectPolynomial","modPoly","modIndex","totalCodeCount","ECL","QRRSBlock","RS_BLOCK_TABLE","rsBlock","getRsBlockTable","QRMath","LOG_TABLE","EXP_TABLE","MODE_NUMBER","MODE_ALPHA_NUM","MODE_KANJI","Mode","QRMaskPattern","QRUtil","PATTERN_POSITION_TABLE","G15","G18","G15_MASK","getBCHDigit","digit","errorCorrectLength","qrCode","sameCount","darkCount","enumerableOnly","sym","_objectSpread2","_defineProperty","_defineProperties","_getPrototypeOf","_createSuper","Derived","hasNativeReflectConstruct","construct","sham","_isNativeReflectConstruct","Super","NewTarget","_slicedToArray","_arrayWithHoles","_arr","_iterableToArrayLimit","_unsupportedIterableToArray","_nonIterableRest","_toConsumableArray","_arrayLikeToArray","_arrayWithoutHoles","iter","_iterableToArray","_nonIterableSpread","minLen","arr2","prfx","getSortByVal","reversed","getUpdatedHandles","updateKey","updateValue","_handles$index","getSliderDomain","slider","vertical","isNotValidTouch","_ref$type","touches","getTouchPosition","pageX","getHandles","valueToStep","changes","mode3","indexForMovingHandle","handleMoveIsPositive","n0","n1","newStep","check","_newStep","_check","callAll","fns","NOOP","percent","Rail","getRailProps","_this$props","emitMouse","emitTouch","onMouseDown","onTouchStart","_this$props2","getEventData","_this$props2$activeHa","activeHandleID","renderedChildren","Handles","autofocus","focus","getHandleProps","emitKeyboard","_this$props2$handles","LinearScale","interpolator","d0","d1","interpolateValue","deinterpolateValue","createInterpolator","rescale","defaultGetEventData$1","Ticks","_this$props$scale","scale","_this$props$count","_this$props$getEventD","_this$props$activeHan","getTicks","defaultGetEventData","Tracks","getTrackProps","_this$props2$left","_this$props2$right","_this$props2$scale","_this$props2$getEvent","getDomain","tracks","DiscreteScale","setDomain","setRange","setStep","_this$domain","_this$range","defaultDomain","Slider","_PureComponent","valueToPerc","pixelToStep","handleID","validUpKeys","validDownKeys","_assertThisInitialize","_assertThisInitialize2","_assertThisInitialize3","_assertThisInitialize4","_assertThisInitialize5","_assertThisInitialize6","keyCode","currVal","newVal","getNextValue","getPrevValue","nextHandles","submitUpdate","onStart","isTouch","_assertThisInitialize7","_assertThisInitialize8","TouchEvent","MouseEvent","onMouseMove","_assertThisInitialize9","_assertThisInitialize10","_assertThisInitialize11","_assertThisInitialize12","_assertThisInitialize13","onTouchMove","_assertThisInitialize14","_assertThisInitialize15","_assertThisInitialize16","onMouseUp","_assertThisInitialize17","_assertThisInitialize18","_assertThisInitialize19","_assertThisInitialize20","_assertThisInitialize21","_assertThisInitialize22","onSlideEnd","onTouchEnd","_assertThisInitialize23","_assertThisInitialize24","_assertThisInitialize25","_assertThisInitialize26","_assertThisInitialize27","removeListeners","_this$props$onSlideSt","onSlideStart","addTouchEvents","addMouseEvents","handleRailAndTrackClicks","_this$state","_this$props$reversed","minDiff","_curr$i","callOnChange","_this$props2$mode","_this$props2$step","_this$props2$onUpdate","onUpdate","_this$props2$onChange","_this$props2$reversed","mode1","mode2","_this$state2","_this$props3","_this$props3$rootStyl","rootStyle","_this$props3$rootProp","rootProps","_this$props3$componen","Comp","_this$props3$disabled","_this$props3$flatten","mappedHandles","isRCSComponent","nextProps","_nextProps$step","_nextProps$domain","_nextProps$reversed","_nextProps$onUpdate","_nextProps$onChange","_nextProps$warnOnChan","warnOnChanges","nextState","_domain","_getHandles","_getHandles2","_handles","PureComponent","ex","React__default","UAParser","ClientUAInstance","getBrowser","cpu","getCPU","getDevice","getEngine","getOS","setUa","userAgentString","setUA","parseUserAgent","UserAgentInstance","setUserAgent","UAHelper","excluded","sourceKeys","_objectWithoutPropertiesLoose","sourceSymbolKeys","DeviceTypes","BrowserTypes","Chrome","Firefox","Opera","Yandex","Safari","InternetExplorer","Edge","Chromium","MobileSafari","EdgeChromium","MIUI","SamsungBrowser","OsTypes","IOS","Android","WindowsPhone","Windows","MAC_OS","InitialDeviceTypes","isMobile","isTablet","isSmartTV","isConsole","isWearable","setDefaults","getNavigatorInstance","isIOS13Check","MSStream","mobilePayload","model","osVersion","isMobileType","isTabletType","isMobileAndTabletType","isSmartTVType","isBrowserType","isWearableType","isConsoleType","isEmbeddedType","_ref8","getMobileVendor","_ref9","getMobileModel","_ref10","getDeviceType","_ref11","isAndroidType","_ref12","isWindowsType","_ref13","isMacOsType","_ref14","isWinPhoneType","_ref15","isIOSType","_ref16","getOsVersion","_ref17","getOsName","_ref18","isChromeType","_ref19","isFirefoxType","_ref20","isChromiumType","_ref21","isEdgeType","_ref22","isYandexType","_ref23","isSafariType","_ref24","isMobileSafariType","_ref25","isOperaType","_ref26","isIEType","_ref27","isMIUIType","_ref28","isSamsungBrowserType","_ref29","getBrowserFullVersion","_ref30","getBrowserVersion","_ref31","major","getBrowserName","_ref32","getEngineName","_ref33","getEngineVersion","_ref34","isElectronType","isEdgeChromiumType","getIOS13","getIPad13","getIphone13","getIPod13","getUseragent","userAg","buildSelectorsObject","isEmbedded","isMobileSafari","isChromium","isMobileOnly","isDesktop","isAndroid","isWinPhone","isIOS","isChrome","isFirefox","isSafari","isOpera","osName","fullBrowserVersion","browserName","mobileVendor","mobileModel","engineName","engineVersion","isEdge","isYandex","deviceType","isIOS13","isIPad13","isIPhone13","isIPod13","isElectron","isEdgeChromium","isLegacyEdge","isWindows","isMacOs","isMIUI","isSamsungBrowser","useDeviceData","hookUserAgent","FUNC_TYPE","UNDEF_TYPE","OBJ_TYPE","STR_TYPE","MAJOR","MODEL","NAME","TYPE","ARCHITECTURE","CONSOLE","MOBILE","TABLET","SMARTTV","WEARABLE","EMBEDDED","AMAZON","APPLE","ASUS","BLACKBERRY","BROWSER","CHROME","FIREFOX","GOOGLE","HUAWEI","LG","MICROSOFT","MOTOROLA","OPERA","SAMSUNG","SHARP","SONY","XIAOMI","ZEBRA","FACEBOOK","CHROMIUM_OS","enumerize","enums","str1","str2","lowerize","rgxMapper","arrays","strMapper","windowsVersionMap","ME","XP","Vista","RT","regexes","EDGE","extensions","getResult","_navigator","_ua","_uach","userAgentData","_rgxmap","mergedRegexes","_isSelfNav","_browser","brave","isBrave","_cpu","_device","standalone","_os","CPU","DEVICE","ENGINE","OS","jQuery","Zepto","aa","da","ea","ha","ia","ja","ka","la","ma","acceptsBooleans","attributeNamespace","mustUseProperty","propertyName","sanitizeURL","removeEmptyString","sa","ta","pa","oa","removeAttribute","setAttributeNS","xlinkHref","__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED","va","wa","ya","za","Aa","Ba","Ea","Ga","Ha","Ia","Ja","Ka","Ma","Na","Oa","prepareStackTrace","Qa","$$typeof","Va","_valueTracker","stopTracking","Ua","Wa","Xa","activeElement","Ya","defaultChecked","_wrapperState","initialChecked","Za","initialValue","controlled","ab","bb","db","ownerDocument","eb","fb","defaultSelected","gb","hb","ib","jb","kb","lb","mb","nb","namespaceURI","firstChild","MSApp","execUnsafeLocalFunction","ob","lastChild","pb","animationIterationCount","aspectRatio","borderImageOutset","borderImageSlice","borderImageWidth","boxFlex","boxFlexGroup","boxOrdinalGroup","columnCount","columns","flex","flexGrow","flexPositive","flexShrink","flexNegative","flexOrder","gridArea","gridRow","gridRowEnd","gridRowSpan","gridRowStart","gridColumn","gridColumnEnd","gridColumnSpan","gridColumnStart","lineClamp","opacity","orphans","tabSize","widows","zIndex","zoom","floodOpacity","stopOpacity","strokeDasharray","strokeDashoffset","strokeMiterlimit","strokeOpacity","qb","rb","sb","tb","menuitem","area","embed","keygen","wbr","ub","vb","wb","xb","srcElement","correspondingUseElement","yb","zb","Ab","Bb","Cb","stateNode","Db","Eb","Fb","Gb","Hb","Ib","Jb","Kb","Lb","Mb","Nb","Ob","Pb","Qb","Rb","Sb","Tb","Vb","alternate","Wb","memoizedState","dehydrated","Xb","Zb","sibling","Yb","$b","unstable_scheduleCallback","unstable_cancelCallback","unstable_shouldYield","unstable_requestPaint","unstable_now","ec","unstable_getCurrentPriorityLevel","unstable_ImmediatePriority","unstable_UserBlockingPriority","hc","unstable_NormalPriority","unstable_LowPriority","unstable_IdlePriority","lc","clz32","pc","LN2","sc","tc","pendingLanes","suspendedLanes","pingedLanes","entangledLanes","entanglements","xc","yc","zc","eventTimes","Cc","Dc","Fc","Hc","Jc","Kc","Lc","Qc","Sc","pointerId","Tc","nativeEvent","blockedOn","domEventName","eventSystemFlags","targetContainers","Vc","Wc","isDehydrated","containerInfo","Xc","Yc","Zc","$c","ad","bd","cd","ReactCurrentBatchConfig","dd","ed","fd","gd","hd","Uc","jd","kd","ld","md","nd","od","charCode","pd","qd","rd","_reactName","_targetInst","isDefaultPrevented","defaultPrevented","isPropagationStopped","persist","isPersistent","wd","xd","yd","sd","eventPhase","bubbles","cancelable","timeStamp","isTrusted","td","ud","view","vd","Ad","screenX","screenY","pageY","shiftKey","altKey","getModifierState","zd","button","buttons","relatedTarget","fromElement","toElement","movementX","movementY","Bd","Dd","dataTransfer","Fd","Hd","animationName","elapsedTime","pseudoElement","Id","clipboardData","Jd","Ld","Md","Esc","Spacebar","Left","Up","Right","Down","Del","Win","Menu","Apps","Scroll","MozPrintableKey","Nd","Od","Alt","Control","Meta","Shift","Pd","Qd","Rd","Td","pressure","tangentialPressure","tiltX","tiltY","twist","pointerType","isPrimary","Vd","targetTouches","changedTouches","Xd","Yd","deltaZ","Zd","$d","color","datetime","password","tel","oninput","detachEvent","nextSibling","compareDocumentPosition","HTMLIFrameElement","contentWindow","contentEditable","focusedElem","selectionRange","selectionStart","selectionEnd","getSelection","rangeCount","anchorNode","anchorOffset","focusNode","focusOffset","createRange","setStart","removeAllRanges","addRange","setEnd","scrollTop","animationend","animationiteration","animationstart","transitionend","animation","af","bf","cf","df","ef","ff","gf","hf","lf","mf","Ub","of","pf","qf","rf","sf","passive","tf","uf","parentWindow","wf","na","xa","$a","ba","xf","Af","Bf","Df","Ff","If","Kf","Lf","Mf","Nf","Of","Pf","Qf","Tf","Vf","Xf","Yf","__reactInternalMemoizedUnmaskedChildContext","__reactInternalMemoizedMaskedChildContext","Zf","$f","ag","bg","getChildContext","cg","__reactInternalMemoizedMergedChildContext","dg","eg","fg","gg","hg","jg","kg","lg","mg","ng","og","pg","qg","rg","sg","tg","ug","vg","wg","xg","yg","zg","Ag","Bg","deletions","Cg","pendingProps","overflow","treeContext","retryLane","Dg","Eg","Fg","Gg","memoizedProps","Hg","Ig","Jg","Kg","Lg","Mg","Ng","Og","Pg","Qg","Rg","_currentValue","Sg","childLanes","Tg","firstContext","lanes","Ug","Vg","memoizedValue","Wg","Xg","Yg","interleaved","Zg","$g","updateQueue","baseState","firstBaseUpdate","lastBaseUpdate","shared","effects","eventTime","lane","refs","isMounted","_reactInternals","enqueueSetState","enqueueReplaceState","enqueueForceUpdate","shouldComponentUpdate","isPureReactComponent","updater","componentWillReceiveProps","UNSAFE_componentWillReceiveProps","getSnapshotBeforeUpdate","UNSAFE_componentWillMount","componentWillMount","componentDidMount","_owner","_stringRef","revealOrder","_workInProgressVersionPrimary","ReactCurrentDispatcher","baseQueue","lastRenderedReducer","hasEagerState","eagerState","lastRenderedState","getSnapshot","lastEffect","stores","deps","readContext","useContext","useImperativeHandle","useInsertionEffect","useLayoutEffect","useMemo","useReducer","useDebugValue","useDeferredValue","useTransition","useMutableSource","useSyncExternalStore","useId","unstable_isNewReconciler","identifierPrefix","pingCache","ReactCurrentOwner","aj","bj","cj","dj","ej","baseLanes","cachePool","transitions","fj","gj","hj","ij","jj","UNSAFE_componentWillUpdate","componentWillUpdate","componentDidUpdate","kj","lj","pendingContext","mj","Aj","Bj","Cj","Dj","nj","oj","pj","fallback","qj","rj","tj","dataset","dgst","uj","vj","_reactRetry","sj","subtreeFlags","wj","xj","isBackwards","rendering","renderingStartTime","tailMode","yj","Ej","Fj","Gj","wasMultiple","multiple","onclick","createElementNS","autoFocus","Hj","Ij","Jj","Kj","Lj","WeakSet","Mj","Nj","Oj","Qj","Rj","Sj","Tj","Uj","Vj","Wj","_reactRootContainer","Xj","Yj","Zj","ak","onCommitFiberUnmount","componentWillUnmount","bk","ck","dk","ek","fk","isHidden","gk","hk","ik","jk","kk","lk","__reactInternalSnapshotBeforeUpdate","Wk","mk","nk","ok","pk","qk","rk","sk","tk","uk","vk","wk","xk","yk","zk","Ak","Bk","Ck","Dk","Ek","callbackNode","expirationTimes","expiredLanes","wc","callbackPriority","ig","Fk","Gk","Hk","Ik","Jk","Kk","Lk","Mk","Nk","Ok","Pk","finishedWork","finishedLanes","Qk","timeoutHandle","Rk","Sk","Tk","Uk","Vk","mutableReadLanes","Bc","Pj","onCommitFiberRoot","mc","onRecoverableError","Xk","onPostCommitFiberRoot","Yk","Zk","isReactComponent","pendingChildren","mutableSourceEagerHydrationData","pendingSuspenseBoundaries","zj","$k","_internalRoot","nl","rl","unmount","unstable_scheduleHydration","form","tl","usingClientEntryPoint","Events","ul","findFiberByHostInstance","bundleType","rendererPackageName","rendererConfig","overrideHookState","overrideHookStateDeletePath","overrideHookStateRenamePath","overrideProps","overridePropsDeletePath","overridePropsRenamePath","setErrorHandler","setSuspenseHandler","scheduleUpdate","currentDispatcherRef","findHostInstanceByFiber","findHostInstancesForRefresh","scheduleRefresh","scheduleRoot","setRefreshHandler","getCurrentFiber","reconcilerVersion","__REACT_DEVTOOLS_GLOBAL_HOOK__","isDisabled","supportsFiber","inject","createRoot","unstable_strictMode","findDOMNode","flushSync","hydrate","hydrateRoot","hydratedSources","_getVersion","_source","unmountComponentAtNode","unstable_batchedUpdates","unstable_renderSubtreeIntoContainer","checkDCE","restrictPosition","mediaSize","cropSize","rotation","rotateSize","restrictPositionCoord","maxPosition","getDistanceBetweenPoints","pointA","pointB","getRotationBetweenPoints","atan2","limitArea","noOp","_max","getCenter","rotRad","cos","Cropper","imageRef","videoRef","containerPosition","containerRef","styleRef","containerRect","naturalWidth","naturalHeight","dragStartPosition","dragStartCrop","gestureZoomStart","gestureRotationStart","isTouching","lastPinchDistance","lastPinchRotation","rafDragTimeout","rafPinchTimeout","wheelTimer","currentDoc","currentWindow","resizeObserver","hasWheelJustStarted","initResizeObserver","ResizeObserver","isFirstResize","computeSizes","observe","preventZoomSafari","cleanEvents","onDragStopped","onGestureMove","onGestureEnd","onScroll","clearScrollEvent","onWheel","onMediaLoad","emitCropData","setInitialCrop","onMediaLoaded","initialCroppedAreaPercentages","croppedAreaPercentages","minZoom","maxZoom","mediaBBoxSize","crop","getInitialCropFromCroppedAreaPercentages","onCropChange","onZoomChange","initialCroppedAreaPixels","croppedAreaPixels","mediaNaturalBBoxSize","mediaZoom","getMediaZoom","getZoomFromCroppedAreaPixels","cropZoom","getInitialCropFromCroppedAreaPixels","mediaRef","saveContainerPosition","containerAspect","videoWidth","videoHeight","mediaAspect","renderedMediaSize","getObjectFit","setMediaSize","mediaWidth","mediaHeight","containerWidth","containerHeight","aspect","fittingWidth","fittingHeight","getCropSize","onCropSizeChange","recomputeCropPosition","setCropSize","bounds","onDragStart","getMousePoint","onDrag","onTouchRequest","onPinchStart","getTouchPoint","onPinchMove","onGestureStart","point","newZoom","setNewZoom","shouldUpdatePosition","onRotationChange","newRotation","onInteractionStart","cancelAnimationFrame","offsetX","offsetY","requestedPosition","newPosition","onInteractionEnd","onWheelRequest","zoomSpeed","getPointOnContainer","containerTopLeft","getPointOnMedia","zoomPoint","zoomTarget","getCropData","limitAreaFn","widthInPixels","heightInPixels","sizePixels","computeCroppedArea","getAspect","cropData","onCropComplete","onCropAreaChange","emitCropAreaChange","zoomWithScroll","disableAutomaticStylesInjection","nonce","setImageRef","setVideoRef","_j","objectFit","video","center","image","mediaProps","cropShape","showGrid","containerStyle","cropAreaStyle","mediaStyle","containerClassName","cropAreaClassName","mediaClassName","onLoad","autoPlay","muted","onLoadedMetadata","controls","touch","_reactSwipe","_reactSwipe2","_propTypes","setHasSupportToCaptureOption","supportsCaptureOption","hasSupport","getSafeEventHandlerOpts","getPosition","_event$touches$","ReactSwipe","_handleSwipeStart","_handleSwipeMove","_handleSwipeEnd","_onMouseDown","_onMouseMove","_onMouseUp","_setSwiperRef","swiper","allowMouseEvents","mouseDown","_getPosition","moveStart","onSwipeStart","_getPosition2","moving","onSwipeMove","movePosition","onSwipeEnd","tolerance","onSwipeLeft","onSwipeRight","onSwipeUp","onSwipeDown","innerRef","loaded","isSdkLoaded","isProcessing","responseApi","FB","api","checkLoginState","setStateIfMounted","authResponse","onFailure","checkLoginAfterRefresh","login","click","scope","appId","returnScopes","responseType","redirectUri","disableMobileRedirect","authType","client_id","redirect_uri","return_scopes","response_type","auth_type","_isMounted","sdkLoaded","setFbAsyncInit","loadSdkAsynchronously","autoLoad","getLoginStatus","xfbml","fbAsyncInit","isRedirectedFromFb","hasElementType","hasMap","hasSet","hasArrayBuffer","isView","equal","ATTRIBUTE_NAMES","TAG_NAMES","BASE","LINK","META","NOSCRIPT","SCRIPT","STYLE","TITLE","TAG_PROPERTIES","REACT_TAG_MAP","accesskey","charset","class","contenteditable","contextmenu","itemprop","tabindex","HELMET_PROPS","HTML_TAG_MAP","SELF_CLOSING_TAGS","HELMET_ATTRIBUTE","objectWithoutProperties","encodeSpecialCharacters","getTitleFromPropsList","propsList","innermostTitle","getInnermostProperty","innermostTemplate","innermostDefaultTitle","getOnChangeClientState","getAttributesFromPropsList","tagType","tagAttrs","getBaseTagFromPropsList","primaryAttributes","innermostBaseTag","lowerCaseAttributeKey","getTagsFromPropsList","approvedSeenTags","approvedTags","instanceTags","instanceSeenTags","primaryAttributeKey","attributeKey","tagUnion","rafPolyfill","cafPolyfill","webkitRequestAnimationFrame","mozRequestAnimationFrame","webkitCancelAnimationFrame","mozCancelAnimationFrame","_helmetCallback","commitTagChanges","newState","baseTag","bodyAttributes","htmlAttributes","linkTags","metaTags","noscriptTags","onChangeClientState","scriptTags","styleTags","titleAttributes","updateAttributes","updateTitle","tagUpdates","updateTags","addedTags","removedTags","_tagUpdates$tagType","newTags","oldTags","flattenArray","possibleArray","elementTag","helmetAttributeString","helmetAttributes","attributesToRemove","attributeKeys","indexToSave","tags","headElement","tagNodes","indexToDelete","newElement","existingTag","isEqualNode","generateElementAttributesAsString","attr","convertElementAttributestoReactProps","initProps","getMethodsForTag","toComponent","_initProps","attributeString","flattenedTitle","generateTitleAsString","_mappedTag","mappedTag","mappedAttribute","generateTagsAsReactComponent","attributeHtml","tagContent","isSelfClosing","generateTagsAsString","mapStateOnServer","_ref$title","noscript","HelmetExport","_class","_temp","HelmetWrapper","classCallCheck","possibleConstructorReturn","inherits","mapNestedChildrenToProps","nestedChildren","flattenArrayTypeChildren","_babelHelpers$extends","arrayTypeChildren","newChildProps","mapObjectTypeChildren","_babelHelpers$extends2","_babelHelpers$extends3","newProps","mapArrayTypeChildrenToProps","newFlattenedProps","arrayChildName","_babelHelpers$extends4","warnOnInvalidChildren","mapChildrenToProps","_child$props","initAttributes","convertReactPropstoHtmlAttributes","titleTemplate","peek","rewind","mappedState","Helmet","renderStatic","hotjar","initialize","sv","initialized","stateChange","_hjSettings","hjid","hjsv","hjDebug","_scriptPath","AsyncMode","ConcurrentMode","ContextConsumer","ContextProvider","Fragment","Lazy","Portal","Profiler","StrictMode","Suspense","isAsyncMode","isConcurrentMode","isContextConsumer","isContextProvider","isForwardRef","isFragment","isLazy","isPortal","isProfiler","isStrictMode","isSuspense","isValidElementType","typeOf","PropertyInfoRecord","CAMELIZE","CAMELCASE","SAME","possibleStandardNamesOptimized","standardName","BOOLEANISH_STRING","NUMERIC","POSITIVE_NUMERIC","RESERVED","STRING","acceptCharset","accessKey","allowFullScreen","autoCapitalize","autoComplete","autoCorrect","autoSave","cellPadding","cellSpacing","challenge","charSet","cite","classID","cols","colSpan","contextMenu","controlsList","coords","crossOrigin","disablePictureInPicture","disableRemotePlayback","download","draggable","encType","enterKeyHint","formMethod","formAction","formEncType","formNoValidate","formTarget","frameBorder","hidden","hrefLang","httpEquiv","inputMode","integrity","itemID","itemProp","itemScope","itemType","keyParams","keyType","lang","low","manifest","marginWidth","marginHeight","media","mediaGroup","minLength","noModule","noValidate","optimum","playsInline","poster","preload","profile","radioGroup","readOnly","referrerPolicy","role","rowSpan","sandbox","scoped","scrolling","seamless","sizes","span","spellCheck","srcDoc","srcLang","srcSet","summary","useMap","wmode","about","accentHeight","accumulate","additive","alignmentBaseline","allowReorder","alphabetic","amplitude","arabicForm","ascent","attributeType","autoReverse","azimuth","baseFrequency","baselineShift","baseProfile","bbox","begin","bias","calcMode","capHeight","clip","clipPath","clipPathUnits","colorInterpolation","colorInterpolationFilters","colorProfile","colorRendering","contentScriptType","contentStyleType","datatype","decelerate","descent","diffuseConstant","direction","divisor","dominantBaseline","dur","dx","dy","edgeMode","elevation","enableBackground","exponent","externalResourcesRequired","filterRes","filterUnits","floodColor","focusable","fontSizeAdjust","fontStretch","fontVariant","fx","fy","g1","g2","glyphName","glyphOrientationHorizontal","glyphOrientationVertical","glyphRef","gradientTransform","gradientUnits","hanging","horizAdvX","horizOriginX","ideographic","imageRendering","in2","in","inlist","intercept","k3","k4","kernelMatrix","kernelUnitLength","kerning","keyPoints","keySplines","keyTimes","lengthAdjust","lightingColor","limitingConeAngle","local","markerEnd","markerHeight","markerMid","markerStart","markerUnits","markerWidth","mask","maskContentUnits","maskUnits","mathematical","numOctaves","operator","orient","overlinePosition","overlineThickness","paintOrder","panose1","pathLength","patternContentUnits","patternTransform","patternUnits","pointerEvents","points","pointsAtX","pointsAtY","pointsAtZ","preserveAlpha","preserveAspectRatio","primitiveUnits","radius","refX","refY","renderingIntent","repeatCount","repeatDur","requiredExtensions","requiredFeatures","resource","restart","rotate","rx","ry","security","shapeRendering","slope","spacing","specularConstant","specularExponent","speed","spreadMethod","startOffset","stdDeviation","stemh","stemv","stitchTiles","stopColor","strikethroughPosition","strikethroughThickness","suppressContentEditableWarning","surfaceScale","tableValues","targetX","targetY","textAnchor","textRendering","typeof","u1","u2","underlinePosition","underlineThickness","unicode","unicodeBidi","unicodeRange","unitsPerEm","unselectable","vAlphabetic","vectorEffect","vertAdvY","vertOriginX","vertOriginY","vHanging","vIdeographic","viewTarget","visibility","vMathematical","vocab","widths","writingMode","x1","x2","xChannelSelector","xHeight","xlinkActuate","xlinkArcrole","xlinkRole","xlinkShow","xlinkTitle","xlinkType","xmlBase","xmlLang","xmlnsXlink","xmlSpace","y1","y2","yChannelSelector","zoomAndPan","bgColor","bgD","fgColor","fgD","viewBoxSize","QRCodeSvg","forwardRef","_QRCode2","_ErrorCorrectLevel2","_QRCodeSvg2","level","qrcode","cells","rowIndex","cell","cellIndex","getBatch","ContextKey","gT","_gT$ContextKey","contextMap","realContext","ReactReduxContext","createReduxContextHook","useSyncExternalStoreWithSelector","refEquality","useSelector","useReduxContext","equalityFnOrOptions","equalityFn","stabilityCheck","noopCheck","getServerState","globalStabilityCheck","globalNoopCheck","wrappedSelector","selectedState","addNestedSub","_excluded","pureFinalPropsSelectorFactory","mapStateToProps","mapDispatchToProps","mergeProps","areStatesEqual","areOwnPropsEqual","areStatePropsEqual","ownProps","stateProps","dispatchProps","mergedProps","hasRunAtLeastOnce","handleSubsequentCalls","nextOwnProps","propsChanged","stateChanged","dependsOnOwnProps","nextStateProps","statePropsChanged","handleNewState","wrapMapToPropsConstant","getConstant","constantSelector","getDependsOnOwnProps","mapToProps","wrapMapToPropsFunc","stateOrDispatch","createInvalidArgFactory","wrappedComponentName","defaultMergeProps","nullListeners","createSubscription","parentSub","subscriptionsAmount","selfSubscribed","handleChangeWrapper","onStateChange","trySubscribe","isSubscribed","createListenerCollection","tryUnsubscribe","cleanupListener","removed","notifyNestedSubs","getListeners","useIsomorphicLayoutEffect","shallowEqual","objA","objB","keysA","keysB","NO_SUBSCRIPTION_ARRAY","captureWrapperProps","lastWrapperProps","lastChildProps","renderIsScheduled","wrapperProps","childPropsFromStoreUpdate","strictEqual","pure","areMergedPropsEqual","Context","initMapStateToProps","mapStateToPropsFactory","initMapDispatchToProps","actionCreators","boundActionCreators","bindActionCreators","mapDispatchToPropsFactory","initMergeProps","hasRunOnce","nextMergedProps","wrapMergePropsFunc","mergePropsFactory","shouldHandleStateChanges","WrappedComponent","selectorFactoryOptions","ConnectFunction","propsContext","reactReduxForwardedRef","ContextToUse","Consumer","contextValue","didStoreComeFromProps","didStoreComeFromContext","childPropsSelector","overriddenContextValue","latestSubscriptionCallbackError","actualChildPropsSelector","subscribeForReact","reactListener","additionalSubscribeListener","didUnsubscribe","lastThrownError","checkForUpdates","latestStoreState","subscribeUpdates","effectFunc","effectArgs","actualChildProps","renderedWrappedComponent","Provider","Connect","forwarded","serverState","previousState","createStoreHook","useDispatch","useStore","newBatch","initializeConnect","notInitialized","metric","positionPercent","fadeAnimationHandler","slideStopSwipingHandler","slideSwipeAnimationHandler","slideAnimationHandler","_CSSTranslate","_utils","_objectSpread","returnStyles","selectedItem","previousItem","lastPosition","infiniteLoop","centerMode","centerSlidePercentage","itemListStyle","setPosition","currentPosition","transformProp","transitionTime","WebkitTransform","msTransform","OTransform","swiping","WebkitTransitionDuration","MozTransitionDuration","OTransitionDuration","transitionDuration","msTransitionDuration","isHorizontal","childrenLength","finalBoundry","axisDelta","handledDelta","hasMoved","swipeScrollTolerance","preventMovementUntilSwipeScrollTolerance","swipeMovementStarted","cancelClick","transitionTimingFunction","slideStyle","minHeight","msTransitionTimingFunction","MozTransitionTimingFunction","WebkitTransitionTimingFunction","OTransitionTimingFunction","selectedStyle","prevStyle","_getRequireWildcardCache","newObj","hasPropertyDescriptor","_interopRequireWildcard","_reactEasySwipe","_cssClasses","_Thumbs","_document","_window","_animations","Carousel","thumbsRef","carouselWrapperRef","listRef","itemsRef","clearAutoPlay","timer","isMouseEntered","isFocusWithinTheCarousel","prevKey","decrement","firstItem","updateSizes","hasMount","onClickItem","onClickThumb","animationHandlerResponse","swipeAnimationHandler","positions","selectItem","resetAutoPlay","emulateTouch","newIndex","isKeyboardEvent","animationHandler","handleOnChange","slideImages","onImageLoad","forceUpdate","initState","setupCarousel","forceFocus","stopSwipingHandler","setupAutoPlay","destroyAutoPlay","destroyCarousel","bindEvents","initialImage","getInitialImage","setMountState","unbindEvents","carouselWrapper","stopOnHover","startOnLeave","useKeyboardArrows","navigateWithKeyboard","_this$carouselWrapper","isClone","isSelected","isPrevious","minWidth","slideProps","setItemsRef","ITEM","handleClickItem","renderItem","showIndicators","renderIndicator","changeItem","showStatus","statusFormatter","showThumbs","setThumbsRef","onSelectItem","handleClickThumb","thumbWidth","renderThumbs","isSwipeable","swipeable","canShowArrows","showArrows","hasPrev","hasNext","itemsClone","renderItems","firstClone","lastClone","swiperProps","SLIDER","containerStyles","onSwipeForward","onSwipeBackwards","dynamicHeight","itemHeight","getVariableItemHeight","verticalSwipe","ariaLabel","ROOT","setCarouselWrapperRef","CAROUSEL","renderControls","renderArrowPrev","onClickPrev","leftArrow","WRAPPER","setListRef","renderArrowNext","onClickNext","rightArrow","renderStatus","onClickHandler","ARROW_PREV","ARROW_NEXT","DOT","images","defaultStatusFormatter","_dimensions","Thumbs","itemsWrapperRef","itemsListRef","wrapperSize","outerWidth","visibleItems","_state","getFirstItem","setupThumbs","destroyThumbs","itemClass","thumbProps","itemListStyles","MozTransform","MsTransform","MsTransitionDuration","setItemsWrapperRef","slideRight","slideLeft","setItemsListRef","_classnames","_default","customClassName","isSlider","carousel","isSwiping","thumbs","animated","thumb","slide","dot","marginRight","_Carousel","_types","watchOnlyPathname","lastLocation","setLastLocation","preventLastLocation","startTransitionImpl","BrowserRouter","future","historyRef","setStateImpl","v7_startTransition","navigationType","ABSOLUTE_URL_REGEX","Link","absoluteHref","relative","reloadDocument","preventScrollReset","unstable_viewTransition","isExternal","currentUrl","targetUrl","internalOnClick","replaceProp","navigate","isModifiedEvent","shouldProcessLinkClick","useLinkClickHandler","DataRouterHook","DataRouterStateHook","DataRouterContext","DataRouterStateContext","NavigationContext","LocationContext","RouteContext","outlet","isDataRoute","RouteErrorContext","useHref","useInRouterContext","useResolvedPath","joinedPathname","useLocation","useMatch","static","useNavigate","router","useDataRouterContext","UseNavigateStable","useCurrentRouteId","activeRef","fromRouteId","useNavigateStable","dataRouterContext","routePathnamesJson","useNavigateUnstable","useParams","routeMatch","_temp2","useRoutesImpl","dataRouterState","parentMatches","parentParams","parentPathnameBase","locationFromContext","_parsedLocationArg$pa","parsedLocationArg","renderedMatches","_renderMatches","DefaultErrorComponent","_state$errors","useDataRouterState","UseRouteError","routeId","useRouteError","lightgrey","preStyles","backgroundColor","defaultErrorElement","RenderErrorBoundary","revalidation","errorInfo","routeContext","RenderedRoute","staticContext","errorElement","_deepestRenderedBoundaryId","_dataRouterState2","_dataRouterState","errorIndex","getChildren","hookName","useRouteContext","thisRoute","Route","Router","basenameProp","locationProp","staticProp","navigationContext","locationContext","trailingPathname","Routes","createRoutesFromChildren","treePath","loader","hasErrorBoundary","shouldRevalidate","handle","reducePropsToState","handleStateChangeOnClient","mountedInstances","emitChange","SideEffect","recordedState","getDisplayName","__WEBPACK_EXTERNAL_MODULE_react__","installedModules","moduleId","getter","react__WEBPACK_IMPORTED_MODULE_0__","__rest","hasGetUserMedia","getUserMedia","constraints","webkitGetUserMedia","mozGetUserMedia","msGetUserMedia","Webcam","requestUserMediaId","unmounted","hasUserMedia","requestUserMedia","onUserMediaError","audioConstraintsChanged","audioConstraints","videoConstraintsChanged","videoConstraints","minScreenshotWidthChanged","minScreenshotWidth","minScreenshotHeightChanged","minScreenshotHeight","stopAndCleanup","stopMediaStream","getVideoTracks","getAudioTracks","removeTrack","revokeObjectURL","getScreenshot","screenshotDimensions","getCanvas","screenshotFormat","screenshotQuality","canvasWidth","canvasHeight","forceScreenshotSourceSize","mirrored","translate","imageSmoothingEnabled","imageSmoothing","drawImage","sourceSelected","myRequestUserMediaId","handleUserMedia","optionalSource_1","sourceId","constraintToSourceId_1","constraint","ideal","MediaStreamTrack","getSources","sources","audioSource","videoSource","audioSourceId","videoSourceId","srcObject","createObjectURL","onUserMedia","videoStyle","childrenProps","__self","__source","jsx","jsxs","_status","_result","createContext","_currentValue2","_threadCount","_defaultValue","_globalName","createFactory","createRef","startTransition","unstable_act","super_","prefilter","normalize","lhs","rhs","groupCollapsed","groupEnd","actionTransformer","titleFormatter","collapsed","colors","started","startedTime","took","stateTransformer","errorTransformer","logErrors","diffPredicate","DeepDiff","observableDiff","applyDiff","applyChange","revertChange","isConflict","transformer","createLogger","createThunkMiddleware","formatProdErrorMessage","$$observable","observable","randomString","ActionTypes","INIT","REPLACE","PROBE_UNKNOWN_ACTION","createStore","enhancer","currentReducer","currentListeners","nextListeners","isDispatching","ensureCanMutateNextListeners","replaceReducer","nextReducer","outerSubscribe","observeState","combineReducers","reducers","reducerKeys","finalReducers","shapeAssertionError","finalReducerKeys","assertReducerShape","hasChanged","previousStateForKey","nextStateForKey","compose","funcs","applyMiddleware","middlewares","_dispatch","middlewareAPI","sortIndex","setImmediate","expirationTime","priorityLevel","scheduling","isInputPending","MessageChannel","port2","port1","unstable_Profiling","unstable_continueExecution","unstable_forceFrameRate","unstable_getFirstCallbackNode","unstable_next","unstable_pauseExecution","unstable_runWithPriority","unstable_wrapCallback","scriptpath","urlArgs","$script","idOrDone","optDone","idOrDoneIsDone","loopFn","dset","force","ready","missing","dep","ANY","Comparator","comp","loose","semver","COMPARATORLOOSE","COMPARATOR","SemVer","cmp","intersects","Range","includePrerelease","safeRe","SPACE_CHARACTERS","raw","formatted","parseRange","isNullSet","isAny","comps","memoKey","FLAG_INCLUDE_PRERELEASE","FLAG_LOOSE","cached","HYPHENRANGELOOSE","HYPHENRANGE","hyphenReplace","COMPARATORTRIM","comparatorTrimReplace","TILDETRIM","tildeTrimReplace","CARETTRIM","caretTrimReplace","rangeList","parseComparator","replaceGTE0","rangeMap","comparators","thisComparators","isSatisfiable","rangeComparators","thisComparator","rangeComparator","testSet","remainingComparators","testComparator","otherComparator","replaceCarets","replaceTildes","replaceXRanges","replaceStars","isX","replaceTilde","TILDELOOSE","TILDE","replaceCaret","CARETLOOSE","CARET","replaceXRange","XRANGELOOSE","XRANGE","gtlt","xM","xm","xp","anyX","STAR","GTE0PRE","GTE0","incPr","$0","fM","fm","fpr","tM","tm","tpr","prerelease","allowed","minor","patch","MAX_LENGTH","MAX_SAFE_INTEGER","compareIdentifiers","LOOSE","FULL","build","compareMain","comparePre","compareBuild","release","identifierBase","neq","rtl","coerceRtlRegex","COERCERTLFULL","COERCERTL","COERCEFULL","COERCE","versionA","versionB","version1","version2","v1","v2","v1Higher","highVersion","lowVersion","highHasPre","throwErrors","parsed","internalRe","constants","identifiers","valid","clean","rcompare","compareLoose","rsort","coerce","satisfies","toComparators","maxSatisfying","minSatisfying","minVersion","validRange","outside","gtr","ltr","simplifyRange","subset","SEMVER_SPEC_VERSION","RELEASE_TYPES","rcompareIdentifiers","MAX_SAFE_COMPONENT_LENGTH","MAX_SAFE_BUILD_LENGTH","NODE_DEBUG","anum","bnum","firstKey","looseOption","emptyOpts","LETTERDASHNUMBER","safeRegexReplacements","createToken","isGlobal","safe","makeSafeRegex","NUMERICIDENTIFIER","NUMERICIDENTIFIERLOOSE","NONNUMERICIDENTIFIER","PRERELEASEIDENTIFIER","PRERELEASEIDENTIFIERLOOSE","BUILDIDENTIFIER","MAINVERSION","PRERELEASE","BUILD","FULLPLAIN","MAINVERSIONLOOSE","PRERELEASELOOSE","LOOSEPLAIN","XRANGEIDENTIFIER","XRANGEIDENTIFIERLOOSE","GTLT","XRANGEPLAIN","XRANGEPLAINLOOSE","COERCEPLAIN","LONETILDE","LONECARET","r2","versions","maxSV","rangeObj","minSV","minver","setMin","comparator","compver","hilo","gtfn","ltefn","ltfn","ecomp","ranges","simplified","minimumVersionWithPreRelease","minimumVersion","simpleSubset","eqSet","gtltComp","higher","lower","hasDomLT","hasDomGT","higherGT","lowerLT","needDomLTPre","needDomGTPre","sawNonNull","OUTER","simpleSub","simpleDom","isSub","style_to_object_1","StyleToJS","CUSTOM_PROPERTY_REGEX","HYPHEN_REGEX","NO_HYPHEN_REGEX","VENDOR_PREFIX_REGEX","MS_VENDOR_PREFIX_REGEX","trimHyphen","skipCamelCase","__decorate","decorators","decorate","__param","paramIndex","decorator","__metadata","metadataKey","metadataValue","__awaiter","__values","__read","__spread","__spreadArrays","pack","__await","__asyncGenerator","asyncIterator","resume","fulfill","settle","__asyncDelegator","__asyncValues","__makeTemplateObject","cooked","__classPrivateFieldGet","receiver","__classPrivateFieldSet","readCookie","cleanValue","cleanupCookieValue","doNotParse","cookies","defaultSetOptions","changeListeners","HAS_DOCUMENT_COOKIE","previousCookies","_checkChanges","domCookies","parseCookies","_emitChange","newCookies","_startPolling","pollingInterval","_stopPolling","doNotUpdate","getAll","stringValue","finalOptions","maxAge","addChangeListener","cookieStore","removeChangeListener","dec","eqIdx","endIdx","tryDecode","opt","fieldContentRegExp","__toString","toUTCString","httpOnly","sameSite","hasValue","v4","byteToHex","bth","msCrypto","rnds8","rnds","_nodeId","_clockseq","rng","bytesToUuid","_lastMSecs","_lastNSecs","clockseq","seedBytes","msecs","nsecs","tmh","SkeletonThemeContext","defaultEnableAnimation","styleOptionsToCssProperties","baseColor","highlightColor","borderRadius","circle","enableAnimation","SkeletonTheme","Wrapper","containerTestId","styleProp","originalPropsStyleOptions","contextStyleOptions","propsStyleOptions","inline","countCeil","thisStyle","fractionalPart","fractionalWidth","skeletonSpan","PlatformLoggerServiceImpl","getPlatformInfoString","getProviders","provider","getComponent","isVersionServiceProvider","getImmediate","logString","name$q","version$1","DEFAULT_ENTRY_NAME","PLATFORM_LOG_STRING","_apps","_serverApps","_components","_addComponent","addComponent","_addOrOverwriteComponent","addOrOverwriteComponent","_registerComponent","serverApp","_getProvider","heartbeatController","getProvider","triggerHeartbeat","_removeServiceInstance","instanceIdentifier","clearInstance","_isFirebaseApp","_isFirebaseServerApp","settings","_clearComponents","ERRORS","ERROR_FACTORY","FirebaseAppImpl","_isDeleted","_name","_automaticDataCollectionEnabled","automaticDataCollectionEnabled","_container","checkDestroyed","isDeleted","FirebaseServerAppImpl","serverConfig","_serverConfig","_finalizationRegistry","FinalizationRegistry","automaticCleanup","_refCount","incRefCount","releaseOnDeref","registerVersion","refCount","decRefCount","deleteApp","initializeApp","rawConfig","existingApp","newApp","initializeServerApp","_serverAppConfig","appOptions","nameObj","nameString","imul","getApp","getApps","cleanupProviders","libraryKeyOrName","libraryMismatch","versionMismatch","onLog","logCallback","setLogLevel","logLevel","DB_NAME","DB_VERSION","STORE_NAME","dbPromise","getDbPromise","oldVersion","createObjectStore","originalErrorMessage","writeHeartbeatsToIndexedDB","heartbeatObject","tx","transaction","objectStore","computeKey","idbGetError","HeartbeatServiceImpl","_heartbeatsCache","_storage","HeartbeatStorageImpl","_heartbeatsCachePromise","getUTCDateString","heartbeats","lastSentHeartbeatDate","singleDateHeartbeat","hbTimestamp","overwrite","getHeartbeatsHeader","heartbeatsToSend","unsentEntries","heartbeatsCache","maxSize","heartbeatEntry","countBytes","extractHeartbeatsForHeader","headerString","_canUseIndexedDBPromise","runIndexedDBEnvironmentCheck","idbHeartbeatObject","readHeartbeatsFromIndexedDB","heartbeatsObject","existingHeartbeatsObject","instanceFactory","multipleInstances","serviceProps","instantiationMode","onInstanceCreated","setInstantiationMode","setMultipleInstances","setServiceProps","setInstanceCreatedCallback","instancesDeferred","instancesOptions","onInitCallbacks","normalizedIdentifier","normalizeInstanceIdentifier","deferred","isInitialized","shouldAutoInitialize","getOrInitializeService","setComponent","isComponentEager","instanceDeferred","services","INTERNAL","_delete","isComponentSet","getOptions","existingCallbacks","existingInstance","invokeOnInitCallbacks","ComponentContainer","providers","LogLevel","levelStringToEnum","VERBOSE","INFO","WARN","SILENT","defaultLogLevel","ConsoleMethod","defaultLogHandler","logType","Logger","_logLevel","_logHandler","_userLogHandler","logHandler","userLogHandler","setUserLogHandler","customLogLevel","ignored","padRight","padLeft","_createForOfIteratorHelper","allowArrayLike","normalCompletion","didErr","_e2","_toPrimitive","hint","prim","toPrimitive","_toPropertyKey","decodeNamedCharacterReference","characterReference","unreachable","nameRe","nameReJsx","emptyOptions","_prodErrorMap","prodErrorMap","_DEFAULT_AUTH_ERROR_FACTORY","logClient","_logError","_fail","authOrCode","createErrorInternal","_createError","_errorWithCustomMessage","errorMap","_serverAppCurrentUserOperationNotSupportedError","fullParams","_errorFactory","_assert","debugFail","failure","debugAssert","_getCurrentUrl","_isHttpOrHttps","_getCurrentScheme","Delay","shortDelay","longDelay","onLine","_emulatorUrl","emulator","FetchProvider","fetchImpl","headersImpl","responseImpl","Headers","Response","SERVER_ERROR_MAP","DEFAULT_API_TIMEOUT_MS","_addTidIfNecessary","tenantId","_performApiRequest","customErrorMap","_performFetchWithErrorHandling","_getAdditionalHeaders","languageCode","fetchArgs","_getFinalTarget","apiHost","fetchFn","_canInitEmulator","networkTimeout","NetworkTimeout","clearNetworkTimeout","json","_makeTaggedError","serverErrorCode","serverErrorMessage","authError","_performSignInRequest","serverResponse","_serverResponse","apiScheme","_parseEnforcementState","enforcementStateStr","errorParams","phoneNumber","_tokenResponse","isEnterprise","grecaptcha","enterprise","RecaptchaConfig","siteKey","recaptchaEnforcementState","recaptchaKey","getProviderEnforcementState","providerStr","enforcementState","isProviderEnabled","isAnyProviderEnabled","getRecaptchaConfig","getAccountInfo","utcTimestampToDateString","utcTimestamp","secondsStringToMilliseconds","_parseToken","_tokenExpiresIn","parsedToken","_logoutIfInvalidated","bypassAuthState","isUserInvalidated","currentUser","signOut","ProactiveRefresh","isRunning","errorBackoff","_start","schedule","_stop","getInterval","wasError","stsTokenManager","iteration","getIdToken","UserMetadata","createdAt","lastLoginAt","_initializeTime","lastSignInTime","creationTime","_copy","_reloadWithoutSaving","idToken","coreAccount","_notifyReloadListener","newProviderData","providerUserInfo","extractProviderData","providerData","providerId","oldIsAnonymous","isAnonymous","newIsAnonymous","passwordHash","localId","photoURL","photoUrl","emailVerified","rawId","StsTokenManager","refreshToken","accessToken","isExpired","updateFromServerResponse","expiresIn","updateTokensAndExpiration","updateFromIdToken","forceRefresh","refresh","clearRefreshToken","oldToken","tokenApiHost","access_token","expires_in","refresh_token","requestStsToken","expiresInSec","fromJSON","manager","_assign","_clone","_performRefresh","assertStringOrUndefined","UserImpl","proactiveRefresh","reloadUserInfo","reloadListener","_persistUserIfCurrent","_notifyListenersIfCurrent","getIdTokenResult","userInternal","signInProvider","authTime","issuedAtTime","signInSecondFactor","reload","userInfo","newUser","_onReload","_startProactiveRefresh","_stopProactiveRefresh","_updateTokensIfNecessary","tokensRefreshed","deleteAccount","_redirectEventId","_fromJSON","plainObjectTokenManager","_fromIdTokenResponse","idTokenResponse","_fromGetAccountInfoResponse","instanceCache","_getInstance","cls","InMemoryPersistence","_isAvailable","_set","_get","_remove","_addListener","_listener","_removeListener","inMemoryPersistence","_persistenceKeyName","PersistenceUserManager","persistence","userKey","fullUserKey","fullPersistenceKey","boundEventHandler","_onStorageEvent","setCurrentUser","getCurrentUser","blob","removeCurrentUser","savePersistenceForRedirect","setPersistence","newPersistence","persistenceHierarchy","availablePersistences","selectedPersistence","userToMigrate","migrationHierarchy","_shouldAllowMigration","_getBrowserName","_isIEMobile","_isFirefox","_isBlackBerry","_isWebOS","_isSafari","_isChromeIOS","_isAndroid","_isIOS","_isMobileBrowser","_getClientVersion","clientPlatform","frameworks","reportedPlatform","reportedFrameworks","AuthMiddlewareQueue","pushCallback","onAbort","wrappedCallback","runMiddleware","nextUser","onAbortStack","beforeStateCallback","originalMessage","PasswordPolicyImpl","responseOptions","customStrengthOptions","minPasswordLength","maxPasswordLength","containsLowercaseCharacter","containsLowercaseLetter","containsUppercaseCharacter","containsUppercaseLetter","containsNumericCharacter","containsNonAlphanumericCharacter","allowedNonAlphanumericCharacters","forceUpgradeOnSignin","schemaVersion","validatePassword","passwordPolicy","validatePasswordLengthOptions","validatePasswordCharacterOptions","meetsMinPasswordLength","meetsMaxPasswordLength","passwordChar","updatePasswordCharacterOptionsStatuses","AuthImpl","heartbeatServiceProvider","appCheckServiceProvider","emulatorConfig","operations","authStateSubscription","Subscription","idTokenSubscription","beforeStateQueue","redirectUser","isProactiveRefreshEnabled","EXPECTED_PASSWORD_POLICY_SCHEMA_VERSION","_isInitialized","_deleted","_initializationPromise","_popupRedirectResolver","_agentRecaptchaConfig","_tenantRecaptchaConfigs","_projectPasswordPolicy","_tenantPasswordPolicies","lastNotifiedUid","appVerificationDisabledForTesting","clientVersion","sdkClientVersion","_initializeWithPersistence","popupRedirectResolver","persistenceManager","_shouldInitProactively","_initialize","initializeCurrentUser","assertedPersistence","_currentUser","_updateCurrentUser","initializeCurrentUserFromIdToken","directlySetCurrentUser","authIdToken","previouslyStoredUser","futureCurrentUser","needsTocheckMiddleware","authDomain","getOrInitRedirectPersistenceManager","redirectUserEventId","storedUserEventId","tryRedirectSignIn","_overrideRedirectResult","reloadAndSetCurrentUserOrClear","redirectResolver","_completeRedirectFn","_setRedirectUser","useDeviceLanguage","navigatorLanguage","_getUserLanguage","updateCurrentUser","userExtern","skipBeforeStateCallbacks","notifyAuthListeners","redirectPersistenceManager","_getRecaptchaConfig","_getPasswordPolicyInternal","_updatePasswordPolicy","_getPasswordPolicy","_getPersistence","_updateErrorMap","onAuthStateChanged","completed","registerStateListener","beforeAuthStateChanged","onIdTokenChanged","authStateReady","revokeAccessToken","tokenType","redirectManager","resolver","_redirectPersistence","_redirectUserForId","currentUid","isUnsubscribed","addObserver","_logFramework","framework","_getFrameworks","heartbeatsHeader","appCheckToken","_getAppCheckToken","appCheckTokenResult","_logWarn","_castAuth","externalJSProvider","loadJS","recaptchaV2Script","recaptchaEnterpriseScript","gapiScript","_loadJS","_generateCallbackName","MockGreCAPTCHATopLevel","MockGreCAPTCHA","_siteKey","_parameters","FAKE_TOKEN","RecaptchaEnterpriseVerifier","authExtern","verify","retrieveRecaptchaToken","clientType","retrieveSiteKey","injectRecaptchaFields","isCaptchaResp","isFakeToken","verifier","captchaResponse","newRequest","phoneEnrollmentInfo","recaptchaToken","phoneSignInInfo","handleRecaptchaFlow","authInstance","actionName","actionMethod","recaptchaAuthProvider","requestWithRecaptcha","requestWithRecaptchaFields","_initializeRecaptchaConfig","authInternal","connectAuthEmulator","disableWarnings","extractProtocol","authority","hostAndPort","bracketedIPv6","parsePort","extractHostAndPort","portStr","attachBanner","sty","border","margin","classList","emitEmulatorWarning","protocolEnd","AuthCredential","signInMethod","_getIdTokenResponse","_auth","_linkToIdToken","_idToken","_getReauthenticationResolver","linkEmailPassword","signInWithPassword","EmailAuthCredential","_email","_password","_tenantId","_fromEmailAndPassword","_fromEmailAndCode","oobCode","returnSecureToken","signInWithEmailLink$1","signInWithEmailLinkForLinking","signInWithIdp","OAuthCredential","pendingToken","_fromParams","cred","oauthToken","oauthTokenSecret","buildRequest","autoCreate","requestUri","postBody","sendPhoneVerificationCode","VERIFY_PHONE_NUMBER_FOR_EXISTING_ERROR_MAP_","PhoneAuthCredential","_fromVerification","verificationId","verificationCode","_fromTokenResponse","temporaryProof","signInWithPhoneNumber$1","_makeVerificationRequest","linkWithPhoneNumber$1","verifyPhoneNumberForExisting","sessionInfo","ActionCodeURL","actionLink","searchParams","parseMode","continueUrl","parseLink","doubleDeepLink","iOSDeepLink","parseDeepLink","EmailAuthProvider","PROVIDER_ID","credential","credentialWithLink","emailLink","actionCodeUrl","EMAIL_PASSWORD_SIGN_IN_METHOD","EMAIL_LINK_SIGN_IN_METHOD","FederatedAuthProvider","defaultLanguageCode","customParameters","setDefaultLanguage","setCustomParameters","customOAuthParameters","getCustomParameters","BaseOAuthProvider","scopes","addScope","getScopes","FacebookAuthProvider","FACEBOOK_SIGN_IN_METHOD","credentialFromResult","userCredential","credentialFromTaggedObject","credentialFromError","tokenResponse","oauthAccessToken","GoogleAuthProvider","GOOGLE_SIGN_IN_METHOD","oauthIdToken","GithubAuthProvider","GITHUB_SIGN_IN_METHOD","TwitterAuthProvider","TWITTER_SIGN_IN_METHOD","UserCredentialImpl","operationType","providerIdForResponse","_forOperation","MultiFactorError","_fromErrorAndOperation","_processCredentialSavingMfaContextIfNecessary","_link$1","_reauthenticate","_signInWithCredential","signInWithCustomToken","customToken","signInWithCustomToken$1","startEnrollPhoneMfa","STORAGE_AVAILABLE_KEY","BrowserPersistenceClass","storageRetriever","BrowserLocalPersistence","poll","onStorageEvent","localCache","pollTimer","fallbackToPolling","forAllChangedKeys","oldValue","_oldValue","notifyListeners","detachListener","triggerListeners","storedValue","StorageEvent","attachListener","browserLocalPersistence","BrowserSessionPersistence","browserSessionPersistence","Receiver","eventTarget","handlersMap","receivers","isListeningto","newInstance","messageEvent","eventId","eventType","ports","promises","_allSettled","_subscribe","eventHandler","_unsubscribe","_generateEventId","digits","Sender","removeMessageHandler","messageChannel","_send","completionTimer","ackTimer","finally","_isWorker","DB_OBJECTSTORE_NAME","DB_DATA_KEYPATH","DBPromise","toPromise","getObjectStore","isReadWrite","_openDatabase","objectStoreNames","_deleteDatabase","_putObject","_deleteObject","IndexedDBLocalPersistence","pendingWrites","sender","serviceWorkerReceiverAvailable","activeServiceWorker","_workerInitializationPromise","initializeServiceWorkerMessaging","_openDb","_withRetries","numAttempts","initializeReceiver","initializeSender","_origin","keyProcessed","_poll","serviceWorker","_getActiveServiceWorker","notifyServiceWorker","controller","_withPendingWrite","getObject","getAllRequest","keysInResult","fbase_key","localKey","indexedDBLocalPersistence","startSignInPhoneMfa","RECAPTCHA_VERIFIER_TYPE","_verifyPhoneNumber","phoneInfoOptions","startPhoneMfaEnrollmentRequest","startPhoneMfaEnrollmentResponse","injectRecaptchaV2Token","phoneSessionInfo","mfaEnrollmentId","multiFactorHint","multiFactorUid","startPhoneMfaSignInRequest","mfaPendingCredential","startPhoneMfaSignInResponse","phoneResponseInfo","sendPhoneVerificationCodeRequest","sendPhoneVerificationCodeResponse","_reset","recaptchaV2Verifier","recaptchaV2Token","recaptchaVersion","PhoneAuthProvider","verifyPhoneNumber","phoneOptions","applicationVerifier","_withDefaultResolver","resolverOverride","PHONE_SIGN_IN_METHOD","IdpCredential","_buildIdpRequest","returnIdpCredential","_signIn","_reauth","_link","AbstractPopupRedirectOperation","pendingPromise","eventManager","onExecution","registerConsumer","onAuthEvent","urlResponse","getIdpTask","unregisterAndCleanUp","unregisterConsumer","cleanUp","_POLL_WINDOW_CLOSE_TIMEOUT","PopupOperation","authWindow","pollId","currentPopupAction","executeNotNull","_openPopup","associatedEvent","_originValidation","_isIframeWebStorageSupported","pollUserCancellation","closed","PENDING_REDIRECT_KEY","redirectOutcomeMap","RedirectAction","readyOutcome","pendingRedirectKey","resolverPersistence","hasPendingRedirect","_getAndClearPendingRedirectStatus","_getRedirectResult","resolverExtern","AuthEventManager","cachedEventUids","consumers","queuedRedirectEvent","hasHandledPotentialRedirect","lastProcessedEventTime","authEventConsumer","isEventForConsumer","sendToConsumer","saveEventToCache","onEvent","hasEventBeenHandled","consumer","isNullRedirectEvent","isRedirectEvent","eventIdMatches","eventUid","IP_ADDRESS_REGEX","HTTP_REGEX","_validateOrigin","authorizedDomains","_getProjectConfig","matchDomain","expected","ceUrl","escapedDomainPattern","NETWORK_TIMEOUT","resetUnloadedGapiModules","beacon","___jsl","CP","loadGapi","loadGapiIframe","gapi","iframes","ontimeout","Iframe","cbName","cachedGApiLoader","PING_TIMEOUT","IFRAME_PATH","EMULATED_IFRAME_PATH","IFRAME_ATTRIBUTES","EID_FROM_APIHOST","getIframeUrl","eid","fw","_openIframe","_loadGapi","where","messageHandlersFilter","CROSS_ORIGIN_IFRAMES_FILTER","dontclear","iframe","restyle","setHideOnLeave","networkError","networkErrorTimer","clearTimerAndResolve","ping","BASE_POPUP_OPTIONS","resizable","statusbar","toolbar","AuthPopup","_open","scrollbars","optionsString","_isIOSStandalone","initMouseEvent","openAsNewWindowIOS","newWin","WIDGET_PATH","EMULATOR_WIDGET_PATH","FIREBASE_APP_CHECK_FRAGMENT_ID","_getRedirectUrl","redirectUrl","additionalParams","tid","paramsDict","appCheckTokenFragment","getHandlerBase","WEB_STORAGE_SUPPORT_KEY","browserPopupRedirectResolver","eventManagers","originValidationPromises","_openRedirect","_setWindowLocation","initAndGetManager","iframeEvent","authEvent","AuthInterop","internalListeners","getUid","assertAuthConfigured","addAuthTokenListener","updateProactiveRefresh","removeAuthTokenListener","authIdTokenMaxAge","lastPostedIdToken","mintCookieFactory","idTokenResult","idTokenAge","getAuth","initialOptions","initializeAuth","authTokenSyncPath","isSecureContext","authTokenSyncUrl","mintCookie","authEmulatorHost","hierarchy","_initializeAuthInstance","_instanceIdentifier","_instance","getVersionForPlatform","setSDKVersion","DOMStorageWrapper","domStorage_","prefix_","prefixedName_","storedVal","MemoryStorage","cache_","isInMemoryStorage","createStoragefor","domStorageName","domStorage","PersistentStorage","SessionStorage","LUIDGenerator","sha1","sha1Bytes","buildLogMessage_","varArgs","firstLog_","enableLogging$1","logger_","persistent","logWrapper","fatal","isInvalidJSONNumber","POSITIVE_INFINITY","NEGATIVE_INFINITY","MIN_NAME","MAX_NAME","nameCompare","aAsInt","tryParseInt","bAsInt","stringCompare","requireKey","ObjectToUniqueKey","splitStringBySize","segsize","dataSegs","doubleToIEEE754String","ln","hexByteString","hexByte","INTEGER_REGEXP_","intVal","exceptionGuard","setTimeoutNonBlocking","Deno","unrefTimer","AppCheckTokenProvider","appName_","appCheckProvider","appCheck","addTokenChangeListener","addTokenListener","notifyForInvalidToken","FirebaseAuthTokenProvider","firebaseOptions_","authProvider_","auth_","removeTokenChangeListener","EmulatorTokenProvider","OWNER","PROTOCOL_VERSION","FORGE_DOMAIN_RE","APP_CHECK_TOKEN_PARAM","WEBSOCKET","LONG_POLLING","RepoInfo","webSocketOnly","nodeAdmin","persistenceKey","includeNamespaceInQueryParams","isUsingEmulator","_host","internalHost","isCacheableHost","isCustomHost","newHost","toURLString","repoInfoConnectionURL","repoInfo","connURL","repoInfoNeedsQueryParam","StatsCollection","counters_","incrementCounter","collections","reporters","statsManagerGetCollection","hashString","PacketReceiver","onMessage_","pendingResponses","currentResponseNum","closeAfterResponse","onClose","closeAfter","responseNum","handleResponse","requestNum","toProcess","FIREBASE_LONGPOLL_START_PARAM","BrowserPollConnection","connId","applicationId","authToken","transportSessionId","lastSessionId","bytesSent","bytesReceived","everConnected_","log_","stats_","urlFn","onDisconnect","curSegmentNum","onDisconnect_","myPacketOrderer","isClosed_","connectTimeoutTimer_","onClosed_","called","wrappedFn","executeWhenDOMReady","scriptTagHolder","FirebaseIFrameScriptHolder","command","arg1","arg2","arg3","arg4","incrementIncomingBytes_","sendNewPolls","pN","urlParams","uniqueCallbackIdentifier","connectURL","addTag","startLongPoll","addDisconnectPingFrame","forceAllow","forceAllow_","forceDisallow","forceDisallow_","isAvailable","UI","markConnectionHealthy","shutdown_","myDisconnFrame","dataStr","base64data","MAX_URL_DATA_SIZE","enqueueSegment","pw","commandCB","onMessageCB","outstandingRequests","pendingSegs","currentSerial","myIFrame","createIFrame_","iframeContents","contentDocument","alive","myID","myPW","newRequest_","theURL","curDataString","theSeg","seg","addLongPollTag_","segnum","totalsegs","serial","doNewRequest","keepaliveTimeout","loadCB","doNodeLongPoll","newScript","rstate","WebSocketImpl","MozWebSocket","WebSocket","WebSocketConnection","keepaliveTimer","frames","totalFrames","connectionURL_","mySock","onopen","onclose","handleIncomingFrame","isOldAndroid","oldAndroidRegex","oldAndroidMatch","previouslyFailed","appendFrame_","fullMess","jsonMess","handleNewFrameCount_","frameCount","extractFrameCount_","mess","resetKeepAlive","remainingData","sendString_","responsesRequiredToBeHealthy","healthyTimeout","TransportManager","ALL_TRANSPORTS","IS_TRANSPORT_INITIALIZED","globalTransportInitialized_","initTransports_","isWebSocketsAvailable","isSkipPollConnection","transports_","transports","initialTransport","upgradeTransport","Connection","repoInfo_","applicationId_","appCheckToken_","authToken_","onReady_","onKill_","connectionCount","pendingDataMessages","state_","transportManager_","start_","conn","conn_","nextTransportId_","primaryResponsesRequired_","onMessageReceived","connReceiver_","onConnectionLost","disconnReceiver_","tx_","rx_","secondaryConn_","isHealthy_","healthyTimeoutMS","healthyTimeout_","everConnected","onConnectionLost_","onSecondaryConnectionLost_","onPrimaryMessageReceived_","onSecondaryMessageReceived_","dataMsg","sendData_","tryCleanupConnection","onSecondaryControl_","controlData","cmd","upgradeIfSecondaryHealthy_","secondaryResponsesRequired_","parsedData","layer","proceedWithUpgrade_","onControl_","onDataMessage_","onPrimaryResponse_","handshakePayload","onHandshake_","onConnectionShutdown_","onReset_","sendPingOnPrimaryIfNecessary_","onConnectionEstablished_","tryStartUpgrade_","startUpgrade_","closeConnections_","ServerActions","pathString","onComplete","refreshAuthToken","refreshAppCheckToken","onDisconnectPut","onDisconnectMerge","onDisconnectCancel","reportStats","stats","EventEmitter","allowedEvents_","listeners_","trigger","validateEventType_","eventData","getInitialEvent","OnlineMonitor","getInstance","online_","currentlyOnline","MAX_PATH_DEPTH","MAX_PATH_LENGTH_BYTES","Path","pathOrString","pieceNum","pieces_","copyTo","pieceNum_","newEmptyPath","pathGetFront","pathGetLength","pathPopFront","pathGetBack","pathSlice","pathParent","pieces","pathChild","childPathObj","childPieces","pathIsEmpty","newRelativePath","outerPath","innerPath","outer","pathEquals","pathContains","ValidationPath","errorPrefix_","parts_","byteLength_","validationPathCheckValid","validationPath","validationPathToErrorString","VisibilityMonitor","visibilityChange","visible_","visible","RECONNECT_MIN_DELAY","PersistentConnection","onDataUpdate_","onConnectStatus_","onServerInfoUpdate_","authTokenProvider_","appCheckTokenProvider_","authOverride_","nextPersistentConnectionId_","interruptReasons_","listens","outstandingPuts_","outstandingGets_","outstandingPutCount_","outstandingGetCount_","onDisconnectRequestQueue_","connected_","reconnectDelay_","maxReconnectDelay_","securityDebugCallback_","establishConnectionTimer_","requestCBHash_","requestNumber_","realtime_","forceTokenRefresh_","invalidAuthTokenCount_","invalidAppCheckTokenCount_","firstConnection_","lastConnectionAttemptTime_","lastConnectionEstablishedTime_","onVisible_","onOnline_","onResponse","curReqNum","initConnection_","outstandingGet","_path","_queryObject","sendGet_","currentHashFn","queryId","_queryIdentifier","_queryParams","loadsAllData","listenSpec","hashFn","sendListen_","warnOnListenWarnings_","removeListen_","warnings","indexSpec","indexPath","tryAuth","reduceReconnectDelayIfAdminCredential_","tryAppCheck","authMethod","requestData","onAuthRevoked_","onAppCheckRevoked_","unlisten","sendUnlisten_","queryObj","sendOnDisconnect_","putInternal","sendPut_","queued","errorReason","reqNum","onDataPush_","onListenRevoked_","onSecurityDebugPacket_","handleTimestamp_","sendConnectStats_","restoreState_","scheduleConnect_","establishConnection_","online","onRealtimeDisconnect_","cancelSentTransactions_","shouldReconnect_","timeSinceLastConnectAttempt","reconnectDelay","onDataMessage","nextConnectionId_","canceled","closeFn","sendRequestFn","interrupt","serverTimeOffset","normalizedPathString","explanation","queries","clientName","NamedNode","Wrap","Index","getCompare","indexedValueChanged","oldNode","newNode","oldWrapped","newWrapped","minPost","MIN","__EMPTY_NODE","KeyIndex","isDefinedOn","maxPost","makePost","indexValue","KEY_INDEX","SortedMapIterator","startKey","isReverse_","resultGenerator_","nodeStack_","getNext","LLRBNode","RED","SortedMap","EMPTY_NODE","inorderTraversal","reverseTraversal","min_","minKey","maxKey","insert","fixUp_","removeMin_","isRed_","moveRedLeft_","smallest","rotateRight_","moveRedRight_","rotateLeft_","colorFlip_","nr","checkMaxDepth_","blackDepth","check_","BLACK","comparator_","root_","getPredecessorKey","rightParent","getIterator","resultGenerator","getIteratorFrom","getReverseIteratorFrom","getReverseIterator","NAME_ONLY_COMPARATOR","NAME_COMPARATOR","MAX_NODE$2","priorityHashText","validatePriorityNode","priorityNode","isLeafNode","getPriority","__childrenNodeConstructor","nodeFromJSON$1","MAX_NODE$1","LeafNode","value_","priorityNode_","lazyHash_","updatePriority","newPriorityNode","getImmediateChild","childName","getChild","hasChild","getPredecessorChildName","childNode","updateImmediateChild","newChildNode","updateChild","numChildren","forEachChild","exportFormat","toHash","compareTo","compareToLeafNode_","otherLeaf","otherLeafType","thisLeafType","otherIndex","VALUE_TYPE_ORDER","thisIndex","withIndex","isIndexed","equals","PRIORITY_INDEX","aPriority","bPriority","indexCmp","LOG_2","Base12Num","current_","bits_","nextBitIsOne","buildChildSet","childList","keyFn","mapSortFn","buildBalancedTree","namedNode","middle","base12","buildPennant","chunkSize","childTree","attachPennant","pennant","isOne","buildFrom12Array","_defaultIndexMap","fallbackObject","IndexMap","Default","indexes_","indexSet_","indexKey","sortedMap","hasIndex","indexDefinition","addIndex","existingChildren","sawIndexedValue","indexName","newIndexSet","newIndexes","addToIndexes","indexedChildren","existingSnap","newChildren","removeFromIndexes","ChildrenNode","children_","indexMap_","newIndexMap","newPriority","newImmediateChild","numKeys","allIntegerKeys","childHash","resolveIndex_","predecessor","getFirstChildName","getFirstChild","getLastChildName","getLastChild","wrappedNode","startPost","endPost","MAX_NODE","otherChildrenNode","thisIter","otherIter","thisCurrent","otherCurrent","MAX","setMaxNode","USE_HINZE","nodeFromJSON","childData","childrenHavePriority","childSet","sortedChildSet","setNodeFromJSON","PathIndex","indexPath_","extractChild","snap","aChild","bChild","valueNode","VALUE_INDEX","changeValue","snapshotNode","changeChildAdded","changeChildRemoved","changeChildChanged","oldSnap","IndexedFilter","index_","newChild","affectedPath","optChangeAccumulator","oldChild","trackChildChange","updateFullNode","newSnap","filtersNodes","getIndexedFilter","RangedFilter","indexedFilter_","startPost_","getStartPost_","endPost_","getEndPost_","startIsInclusive_","startAfterSet_","endIsInclusive_","endBeforeSet_","getStartPost","getEndPost","isWithinStart","isWithinEnd","filtered","hasStart","startName","getIndexStartName","getIndexStartValue","hasEnd","endName","getIndexEndName","getIndexEndValue","LimitedFilter","withinDirectionalStart","reverse_","withinEndPost","withinStartPost","withinDirectionalEnd","compareRes","rangedFilter_","limit_","getLimit","isViewFromLeft","fullLimitUpdateChild_","childKey","childSnap","changeAccumulator","oldEventCache","newChildNamedNode","windowBoundary","oldChildSnap","nextChild","getChildAfterChild","compareNext","newEventCache","QueryParams","limitSet_","startSet_","startNameSet_","endSet_","endNameSet_","viewFrom_","indexStartValue_","indexStartName_","indexEndValue_","indexEndName_","hasLimit","hasAnchoredLimit","queryParamsToRestQueryStringParameters","queryParams","startParam","endParam","queryParamsGetQueryObject","viewFrom","ReadonlyRestClient","getListenId_","listens_","listenId","thisListen","queryStringParameters","restRequest_","xhr","SnapshotHolder","rootNode_","getNode","updateSnapshot","newSnapshotNode","newSparseSnapshotTree","sparseSnapshotTreeRemember","sparseSnapshotTree","sparseSnapshotTreeForEachTree","prefixPath","tree","sparseSnapshotTreeForEachChild","StatsListener","collection_","last_","newStats","stat","StatsReporter","collection","server_","statsToReport_","statsListener_","reportStats_","reportedStats","haveStatsToReport","OperationType","newOperationSourceServerTaggedQuery","fromUser","fromServer","tagged","AckUserWrite","affectedTree","revert","ACK_USER_WRITE","operationForChild","subtree","ListenComplete","LISTEN_COMPLETE","Overwrite","OVERWRITE","Merge","MERGE","CacheNode","node_","fullyInitialized_","filtered_","isFullyInitialized","isFiltered","isCompleteForPath","isCompleteForChild","EventGenerator","query_","eventGeneratorGenerateEventsForType","eventGenerator","registrations","eventCache","filteredChanges","change","aWrapped","bWrapped","eventGeneratorCompareChanges","materializedChange","prevName","eventGeneratorMaterializeSingleChange","registration","respondsTo","newViewCache","serverCache","viewCacheUpdateEventSnap","viewCache","eventSnap","viewCacheUpdateServerSnap","serverSnap","viewCacheGetCompleteEventSnap","viewCacheGetCompleteServerSnap","emptyChildrenSingleton","ImmutableTree","fromObject","childPath","EmptyChildren","findRootMostMatchingPathAndValue","childExistingPathAndValue","findRootMostValueAndPath","toSet","setTree","newTree","fold","fold_","pathSoFar","findOnPath","findOnPath_","pathToFollow","foreachOnPath","foreachOnPath_","currentRelativePath","foreach","foreach_","foreachChild","CompoundWrite","writeTree_","empty","compoundWriteAddWrite","compoundWrite","rootmost","rootMostPath","newWriteTree","compoundWriteAddWrites","newWrite","compoundWriteRemoveWrite","compoundWriteHasCompleteWrite","compoundWriteGetCompleteNode","compoundWriteGetCompleteChildren","compoundWriteChildCompoundWrite","shadowingNode","compoundWriteIsEmpty","compoundWriteApply","applySubtreeWrite","writeTree","priorityWrite","writeTreeChildWrites","newWriteTreeRef","writeTreeRemoveWrite","writeId","allWrites","writeToRemove","removedWriteWasVisible","removedWriteOverlapsWithOtherWrites","currentWrite","writeTreeRecordContainsPath_","visibleWrites","writeTreeLayerTree_","writeTreeDefaultFilter_","lastWriteId","writeTreeResetTree_","writeRecord","writes","treeRoot","writePath","deepNode","writeTreeCalcCompleteEventCache","completeServerCache","writeIdsToExclude","includeHiddenWrites","subMerge","writeTreeRefCalcCompleteEventCache","writeTreeRef","writeTreeRefCalcCompleteEventChildren","completeServerChildren","completeChildren","topLevelSet","writeTreeCalcCompleteEventChildren","writeTreeRefCalcEventCacheAfterServerOverwrite","existingEventSnap","existingServerSnap","childMerge","writeTreeCalcEventCacheAfterServerOverwrite","writeTreeRefShadowingWrite","writeTreeShadowingWrite","writeTreeRefCalcIndexedSlice","completeServerData","toIterate","writeTreeCalcIndexedSlice","writeTreeRefCalcCompleteChild","existingServerCache","writeTreeCalcCompleteChild","writeTreeRefChild","ChildChangeAccumulator","changeMap","oldChange","oldType","getChanges","NO_COMPLETE_CHILD_SOURCE","getCompleteChild","WriteTreeCompleteChildSource","writes_","viewCache_","optCompleteServerCache_","serverNode","viewProcessorApplyOperation","viewProcessor","oldViewCache","writesCache","completeCache","filterServerNode","viewProcessorApplyUserOverwrite","viewProcessorApplyServerOverwrite","changedChildren","curViewCache","viewProcessorCacheHasChild","viewProcessorApplyUserMerge","viewProcessorApplyServerMerge","ackUserWrite","serverChildren","viewProcessorRevertUserWrite","ackPath","mergePath","serverCachePath","viewProcessorAckUserWrite","oldServerNode","viewProcessorGenerateEventCacheAfterServerEvent","viewProcessorListenComplete","isLeafOrEmpty","oldCompleteSnap","viewProcessorMaybeAddValueEvent","changePath","oldEventSnap","completeEventChildren","completeNode","oldEventNode","updatedPriority","childChangePath","newEventChild","eventChildUpdate","changedSnap","oldServerSnap","newServerCache","serverFilter","newServerNode","viewProcessorApplyMerge","viewMergeTree","childMergeTree","isUnknownDeepMerge","View","initialViewCache","eventRegistrations_","indexFilter","processor_","newViewProcessor","initialServerCache","initialEventCache","eventGenerator_","viewGetCompleteServerCache","viewIsEmpty","viewRemoveEventRegistration","eventRegistration","cancelError","cancelEvents","maybeEvent","createCancelEvent","existing","hasAnyCallback","viewApplyOperation","viewGenerateEventsForChanges_","eventRegistrations","moves","eventGeneratorGenerateEventsForChanges","referenceConstructor$1","referenceConstructor","SyncPoint","views","syncPointApplyOperation","syncPoint","optCompleteServerCache","syncPointGetView","serverCacheComplete","eventCacheComplete","syncPointAddEventRegistration","viewAddEventRegistration","initialChanges","viewGetInitialEvents","syncPointRemoveEventRegistration","hadCompleteView","syncPointHasCompleteView","viewQueryId","_repo","syncPointGetQueryViews","syncPointGetCompleteServerCache","syncPointViewForQuery","syncPointGetCompleteView","syncPointViewExistsForQuery","syncTreeNextQueryTag_","SyncTree","listenProvider_","syncPointTree_","pendingWriteTree_","tagToQueryMap","queryToTagMap","syncTreeApplyUserOverwrite","syncTree","writeTreeAddOverwrite","syncTreeApplyOperationToSyncPoints_","syncTreeAckUserWrite","writeTreeGetWrite","syncTreeApplyServerOverwrite","syncTreeRemoveEventRegistration","skipListenerDedup","maybeSyncPoint","removedAndEvents","removingDefault","covered","parentSyncPoint","newViews","maybeChildSyncPoint","childMap","childViews","syncTreeCollectDistinctViewsForSubTree_","newQuery","syncTreeCreateListenerForView_","startListening","syncTreeQueryForListening_","syncTreeTagForQuery","defaultTag","stopListening","queryToRemove","tagToRemove","syncTreeMakeQueryKey_","removedQuery","removedQueryKey","removedQueryTag","syncTreeRemoveTags_","syncTreeApplyTaggedQueryOverwrite","queryKey","syncTreeQueryKeyForTag_","syncTreeParseQueryKey_","queryPath","syncTreeApplyTaggedOperation_","syncTreeAddEventRegistration","skipSetupListener","foundAncestorDefaultView","pathToSyncPoint","childSyncPoint","viewAlreadyExists","queriesToStop","childQueries","queryToStop","syncTreeSetupListener_","syncTreeCalcCompleteEventCache","syncTreeApplyOperationHelper_","syncPointTree","syncTreeApplyOperationDescendantsHelper_","childOperation","childServerCache","childWritesCache","viewGetServerCache","syncTreeApplyTaggedListenComplete","syncTreeApplyListenComplete","errorForServerCode","splitIndex","ExistingValueProvider","DeferredValueProvider","syncTree_","path_","generateWithValues","resolveDeferredLeafValue","existingVal","serverValues","resolveScalarDeferredValue","resolveComplexDeferredValue","unused","existingNode","resolveDeferredValueTree","resolveDeferredValue","resolveDeferredValueSnapshot","rawPri","leafNode","childrenNode","Tree","childCount","treeSubTree","pathObj","treeGetValue","treeSetValue","treeUpdateParents","treeHasChildren","treeForEachChild","treeForEachDescendant","includeSelf","childrenFirst","treeGetPath","childEmpty","treeIsEmpty","childExists","treeUpdateChild","INVALID_KEY_REGEX_","INVALID_PATH_REGEX_","MAX_LEAF_SIZE_","isValidKey","isValidPathString","validateFirebaseData","hasDotValue","hasActualChild","validationPathPush","validationPathPop","validatePathString","argumentName","validateRootPathString","validateUrl","parsedUrl","isValidRootPathString","EventQueue","eventLists_","recursionDepth_","eventQueueQueueEvents","eventQueue","eventDataList","currList","getPath","eventQueueRaiseEventsAtPath","eventQueueRaiseQueuedEventsMatchingPredicate","eventPath","eventQueueRaiseEventsForChangedPath","changedPath","sentAll","eventList","eventListRaise","eventFn","getEventRunner","INTERRUPT_REASON","MAX_TRANSACTION_RETRIES","Repo","forceRestClient_","appCheckProvider_","dataUpdateCount","eventQueue_","nextWriteId_","interceptServerDataCallback_","transactionQueueTree_","persistentConnection_","repoStart","repo","authOverride","isMerge","repoOnDataUpdate","repoOnConnectStatus","connectStatus","repoUpdateInfo","repoOnServerInfoUpdate","statsReporter_","creatorFunction","statsManagerGetOrCreateReporter","infoData_","infoSyncTree_","infoEvents","serverSyncTree_","repoServerTime","repoGenerateServerValues","taggedChildren","changeTree","syncTreeApplyTaggedQueryMerge","taggedSnap","syncTreeApplyServerMerge","repoRerunTransactions","repoLog","resolvedOnDisconnectTree","resolved","repoAbortTransactions","repoRunOnDisconnectEvents","repoGetNextWriteId","repoRemoveEventCallbackForQuery","repoInterrupt","repoGetLatestState","excludeSets","repoSendReadyTransactions","repoPruneCompletedTransactionsBelowNode","repoBuildTransactionQueue","setsToIgnore","txn","currentWriteId","latestState","snapToSend","latestHash","retryCount","currentOutputSnapshotRaw","dataToSend","pathToSend","currentOutputSnapshotResolved","unwatcher","repoSendTransactionQueue","rootMostTransactionNode","repoGetAncestorTransactionNode","txnsToRerun","abortTransaction","currentNode","currentInputSnapshot","newDataNode","oldWriteId","newNodeResolved","applyLocally","repoRerunTransactionQueue","transactionNode","transactionQueue","repoAggregateTransactionQueuesForNode","nodeQueue","treeForEachAncestor","repoAbortTransactionsOnNode","lastSent","parseRepoInfo","dataURL","parseDatabaseURL","scheme","subdomain","colonInd","slashInd","questionMarkInd","pathStringDecoded","piece","decodePath","queryString","kv","decodeQuery","hostWithoutPort","dotInd","PUSH_CHARS","lastPushTime","lastRandChars","DataEvent","snapshot","exportVal","CancelEvent","CallbackContext","snapshotCallback","cancelCallback","onValue","expDataSnapshot","previousChildName","onCancel","hasCancelCallback","userCallback","QueryImpl","_orderByCalled","ReferenceImpl","sameRepo","samePath","sameQueryIdentifier","pathToUrlEncodedString","DataSnapshot","_node","_index","childRef","exists","_checkNotDeleted","_root","ValueEventRegistration","callbackContext","ChildEventRegistration","eventToCheck","cancelCallbackOrListenOptions","onlyOnce","onceCallback","dataSnapshot","repoAddEventCallbackForQuery","expCallback","syncPointSetReferenceConstructor","syncTreeSetReferenceConstructor","FIREBASE_DATABASE_EMULATOR_HOST_VAR","repos","useRestClient","repoManagerDatabaseFromApp","authProvider","dbUrl","databaseURL","isEmulator","dbEmulatorHost","authTokenProvider","appRepos","repoManagerCreateRepo","Database","_repoInternal","_instanceStarted","_rootInternal","repoManagerDeleteRepo","apiName","getDatabase","tokenProvider","mockUserToken","repoManagerApplyEmulatorSettings","connectDatabaseEmulator","simpleListen","echo","onEcho","PENDING_TIMEOUT_MS","PACKAGE_VERSION","INTERNAL_AUTH_VERSION","INSTALLATIONS_API_URL","TOKEN_EXPIRATION_BUFFER","ERROR_DESCRIPTION_MAP","isServerError","getInstallationsEndpoint","extractAuthTokenInfoFromResponse","responseExpiresIn","getErrorFromResponse","requestName","serverCode","serverMessage","serverStatus","getHeaders","Accept","getHeadersWithAuth","appConfig","getAuthorizationHeader","retryIfServerError","sleep","VALID_FID_PATTERN","INVALID_FID","generateFid","fidByteArray","fid","b64String","fidChangeCallbacks","fidChanged","callFidChangeCallbacks","getBroadcastChannel","closeBroadcastChannel","broadcastFidChange","broadcastChannel","BroadcastChannel","DATABASE_NAME","DATABASE_VERSION","OBJECT_STORE_NAME","updateFn","getInstallationEntry","installations","registrationPromise","installationEntry","oldEntry","registrationStatus","clearTimedOutRequest","updateOrCreateInstallationEntry","entryWithPromise","inProgressEntry","registrationTime","registeredInstallationEntry","heartbeatService","authVersion","responseValue","createInstallationRequest","registerInstallation","waitUntilFidRegistration","triggerRegistrationIfNecessary","updateInstallationRequest","generateAuthTokenRequest","getGenerateAuthTokenEndpoint","installation","tokenPromise","isEntryRegistered","oldAuthToken","isAuthTokenExpired","isAuthTokenValid","updateAuthTokenRequest","waitUntilAuthTokenRequest","inProgressAuthToken","requestTime","makeAuthTokenRequestInProgressEntry","updatedInstallationEntry","fetchAuthTokenFromServer","installationsImpl","completeInstallationRegistration","getMissingValueError","valueName","INSTALLATIONS_NAME","publicFactory","configKeys","extractAppConfig","internalFactory","getId","DEFAULT_SW_PATH","DEFAULT_SW_SCOPE","DEFAULT_VAPID_KEY","ENDPOINT","CONSOLE_CAMPAIGN_ID","CONSOLE_CAMPAIGN_NAME","CONSOLE_CAMPAIGN_TIME","MessageType$1","MessageType","arrayToBase64","uint8Array","base64ToArray","base64String","rawData","outputArray","OLD_DB_NAME","OLD_DB_VERSION","OLD_OBJECT_STORE_NAME","upgradeDb","dbGet","firebaseDependencies","tokenDetails","oldTokenDetails","senderId","dbNames","databases","newVersion","upgradeTransaction","oldDetails","p256dh","fcmToken","createTime","swScope","vapidKey","checkTokenDetails","migrateOldDatabase","dbSet","ERROR_MAP","requestDeleteToken","unsubscribeOptions","getEndpoint","responseData","getBody","web","applicationPubKey","TOKEN_EXPIRATION_MS","getTokenInternal","messaging","pushSubscription","swRegistration","pushManager","getSubscription","userVisibleOnly","applicationServerKey","getPushSubscription","dbOptions","currentOptions","isVapidKeyEqual","isEndpointEqual","isAuthEqual","isP256dhEqual","isTokenValid","updatedToken","updateOptions","requestUpdateToken","updatedTokenDetails","updateToken","getNewToken","subscribeOptions","requestGetToken","externalizePayload","internalPayload","collapseKey","collapse_key","messageId","fcmMessageId","messagePayloadInternal","propagateNotificationPayload","propagateDataPayload","fcmOptions","click_action","analyticsLabel","analytics_label","propagateFcmOptions","s1","s2","resultArray","_mergeStrings","MessagingService","analyticsProvider","deliveryMetricsExportedToBigQueryEnabled","onBackgroundMessageHandler","onMessageHandler","logEvents","isLogServiceStarted","messagingSenderId","registerDefaultSw","browserErrorMessage","getToken$1","Notification","permission","requestPermission","updateVapidKey","ServiceWorkerRegistration","updateSwReg","serviceWorkerRegistration","logToScion","NOTIFICATION_CLICKED","PUSH_RECEIVED","logEvent","message_id","message_name","message_time","message_device_time","messageEventListener","isFirebaseMessaging","dataPayload","WindowMessagingFactory","WindowMessagingInternalFactory","isWindowSupported","PushSubscription","getMessagingInWindow","onMessage$1","own","emptyMap","dashSomething","tableElements","tableCellElement","docs","toJsxRuntime","filePath","development","jsxDEV","isStaticChildren","developmentCreate","productionCreate","ancestors","elementAttributeNameCase","evaluater","createEvaluater","ignoreInvalidStyle","passKeys","passNode","stylePropertyNameCase","tableCellAlignToStyle","parentSchema","findComponentFromName","alignValue","createProperty","createElementProps","createChildren","addChildren","estree","expression","evaluateExpression","crashEstree","mdxExpression","objectExpression","createJsxElementProps","mdxJsxElement","evaluateProgram","mdxEsm","countsByName","commaSeparated","ruleId","toCamel","parseStyle","domCasing","cssCasing","transformStyleToCssCasing","transformStylesToCssCasing","allowExpression","computed","place","toDash","getDefaultExportFromCjs","URL_REGEX","FIRST_SEGMENT_REGEX","SLASH_DOT_REGEX","SLASH_DOT_DOT_REGEX","URLToolkit","urlToolkit","buildAbsoluteURL","baseURL","relativeURL","alwaysNormalize","basePartsForNormalise","parseURL","normalizePath","buildURLFromParts","relativeParts","baseParts","netLoc","pathParts","builtParts","fragment","baseURLPath","newPath","urlToolkitExports","isFiniteNumber","ErrorTypes","ErrorDetails","fakeLogger","exportedLogger","exportLoggerFunctions","debugConfig","consolePrintFn","DECIMAL_RESOLUTION_REGEX","ATTR_LIST_REGEX","AttrList","parseAttrList","clientAttrs","decimalInteger","intValue","hexadecimalInteger","hexadecimalIntegerAsNumber","decimalFloatingPoint","optionalFloat","enumeratedString","decimalResolution","isSCTE35Attribute","DateRange","dateRangeAttr","dateRangeWithSameId","_startDate","_endDate","_badValueForSameId","previousAttr","ID","CLASS","plannedDuration","endOnNext","LoadStats","chunkCount","bwEstimate","parsing","buffering","ElementaryStreamTypes","BaseSegment","baseurl","_byteRange","_url","relurl","elementaryStreams","setByteRange","byteRangeEndOffset","byteRange","byteRangeStartOffset","_decryptdata","rawProgramDateTime","programDateTime","tagList","sn","levelkeys","keyLoader","startPTS","endPTS","startDTS","endDTS","deltaPTS","maxStartPTS","minEndPTS","bitrateTest","initSegment","endList","urlId","decryptdata","NONE","getDecryptData","keyFormats","endProgramDateTime","encrypted","_this$_decryptdata","setKeyFormat","keyFormat","abortRequests","_this$loader","_this$keyLoader","setElementaryStreamInfo","clearElementaryStreamInfo","Part","partAttrs","frag","fragOffset","independent","audiovideo","LevelDetails","baseUrl","PTSKnown","alignedSliding","averagetargetduration","endCC","endSN","fragments","fragmentHint","partList","dateRanges","live","ageHeader","advancedDateTime","advanced","availabilityDelay","misses","startCC","startSN","startTimeOffset","targetduration","totalduration","m3u8","canBlockReload","canSkipUntil","canSkipDateRanges","skippedSegments","recentlyRemovedDateranges","partHoldBack","holdBack","partTarget","preloadHint","renditionReports","tuneInGoal","deltaUpdateFailed","driftStartTime","driftEndTime","driftStart","driftEnd","encryptedFragments","playlistParsingError","variableList","hasVariableRefs","reloaded","partSnDiff","lastPartSn","partIndexDiff","lastPartIndex","hasProgramDateTime","levelTargetDuration","drift","runTime","edge","partEnd","fragmentEnd","_this$partList","_this$fragments","age","_this$partList2","_this$partList3","base64encodedStr","convertDataUriToArrayBytes","uri","colonsplit","keydata","semicolonsplit","commasplit","isbase64","keyIdbytes","strToUtf8array","subarray","paddedkeyIdbytes","getKeyIdBytes","optionalSelf","KeySystems","CLEARKEY","FAIRPLAY","PLAYREADY","WIDEVINE","KeySystemFormats","keySystemFormatToKeySystemDomain","KeySystemIds","keySystemIdToKeySystemDomain","systemId","keySystemDomainToKeySystemFormat","keySystem","getKeySystemsForConfig","drmSystems","widevineLicenseUrl","keySystemsToAttempt","requestMediaKeySystemAccess","_optionalSelf$navigat","sliceUint8","isHeader$2","isFooter","getID3Data","readSize","canParse$2","getTimeStamp","getID3Frames","isTimeStampFrame","readTimeStamp","getFrameData","id3Data","frameData","decodeFrame","decodePrivFrame","decodeURLFrame","decodeTextFrame","owner","utf8ArrayToStr","privateData","timeStampFrame","pts33Bit","exitOnNull","getTextDecoder","char2","char3","hexDump","UINT32_MAX$1","RemuxerTrackIdConfig","id3","bin2str","readUint16","readUint32","readSint32","readUint64","writeUint32","findBox","endbox","subresults","parseSegmentIndex","sidx","references","timescale","earliestPresentationTime","firstOffset","startByte","referencesCount","referenceIndex","referenceInfo","referenceSize","subsegmentDuration","parseInitSegment","traks","trak","tkhd","trackId","mdhd","hdlr","hdlrType","soun","vide","stsdData","parseStsd","trex","stsd","sampleEntries","sampleEntriesEnd","fourCC","codec","encBox","sinf","schm","frma","avcCBox","toHex","codecBox","esdsBox","skipBERInteger","objectType","firstByte","audioObjectType","hvcCBox","profileByte","profileSpace","generalProfileIdc","profileCompat","tierFlag","levelIDC","constraintIndicator","constraintString","byte","dvcCBox","addLeadingZero","vpcCBox","bitDepth","av1CBox","highBitDepth","twelveBit","monochrome","chromaSubsamplingX","chromaSubsamplingY","chromaSamplePosition","colorPrimaries","transferCharacteristics","matrixCoefficients","videoFullRangeFlag","parseSinf","computeRawDurationFromSamples","trun","sampleCount","appendUint8Array","data1","data2","temp","parseSamples","timeOffset","seiSamples","videoData","samples","isHEVCFlavor","moof","moofOffset","traf","baseTime","tfdt","tfhd","tfhdFlags","defaultSampleDuration","defaultSampleSizePresent","defaultSampleSize","defaultSampleFlagsPresent","tfhdOffset","delimit","baseCodec","isHEVC","dataOffsetPresent","dataOffset","firstSampleFlagsPresent","sampleDurationPresent","sampleDuration","sampleSizePresent","sampleFlagsPresent","sampleCompositionOffsetsPresent","compositionOffset","trunOffset","sampleOffset","ix","naluTotalSize","naluSize","isSEIMessage","parseSEIMessageFromNALu","naluHeader","naluType","unescapedData","headerSize","pts","discardEPB","seiPtr","payloadType","payloadSize","leftOver","payPtr","providerCode","userStructure","userDataType","enabled","totalBytes","byteArray","uuidStrArray","userDataBytes","userData","EPBPositions","newLength","sourceIndex","mp4pssh","keyids","kids","kidCount","dataSize","mp4Box","parsePssh","dataSizeOrKidCount","keyUriToKeyIdMap","LevelKey","clearKeyUriToKeyIdMap","formatversions","keyFormatVersions","isCommonEncryption","keyId","pssh","segmentNumber","uint8View","createInitializationVector","keyBytes","PlayReadyKeySystemUUID","keyBytesUtf16","keyByteStr","xmlKeyBytes","keyData","keyIdArray","swap","cur","changeEndianness","padded","VARIABLE_REPLACEMENT_REGEX","hasVariableReferences","substituteVariablesInAttributes","attributeNames","substituteVariables","variableReference","variableName","variableValue","addVariableDefinition","parentUrl","VALUE","QUERYPARAM","importVariableDefinition","sourceVariableList","IMPORT","getMediaSource","preferManagedMediaSource","MediaSource","ManagedMediaSource","WebKitMediaSource","sampleEntryCodesISO","a3ds","alac","alaw","dra1","dtsc","dtse","dtsh","enca","fLaC","flac","FLAC","g719","g726","m4ae","mha1","mha2","mhm1","mhm2","mlpa","mp4a","Opus","opus","samr","sawb","sawp","sevc","sqcp","ssmv","twos","ulaw","avc1","avc2","avc3","avc4","avcp","av01","drac","dva1","dvav","dvh1","dvhe","encv","hev1","hvc1","mjp2","mp4v","mvc1","mvc2","mvc3","mvc4","resv","rv60","s263","svc1","svc2","vp08","vp09","stpp","wvtt","areCodecsMediaSourceSupported","codecs","isCodecMediaSourceSupported","_MediaSource$isTypeSu","isTypeSupported","mimeTypeForCodec","videoCodecPreferenceValue","videoCodec","codecsSetSelectionPreferenceValue","codecSet","preferenceValue","CODEC_COMPATIBLE_NAMES","AUDIO_CODEC_REGEXP","getCodecCompatibleName","lowerCaseCodec","codecsToCheck","getCodecCompatibleNameLower","pickMostCompleteCodecName","parsedCodec","levelCodec","MASTER_PLAYLIST_REGEX","MASTER_PLAYLIST_MEDIA_REGEX","IS_MEDIA_PLAYLIST","LEVEL_PLAYLIST_REGEX_FAST","LEVEL_PLAYLIST_REGEX_SLOW","M3U8Parser","findGroup","mediaGroupId","isMediaPlaylist","parseMasterPlaylist","contentSteering","levels","sessionData","sessionKeys","levelsWithKnownCodecs","_level$unknownCodecs","bitrate","setCodecs","CODECS","unknownCodecs","sessionAttrs","dataId","sessionKey","parseKey","variableAttributes","contentSteeringAttributes","pathwayId","parseStartTimeOffset","stripUnknownCodecLevels","parseMasterPlaylistMedia","groupsByType","AUDIO","audioCodec","SUBTITLES","textCodec","medias","LANGUAGE","assocLang","CHANNELS","characteristics","CHARACTERISTICS","instreamId","autoselect","forced","URI","groupCodec","assignCodec","parseLevelPlaylist","levelUrlId","multivariantVariableList","currentInitSegment","currentSN","currentPart","discontinuityCounter","prevFrag","firstPdtIndex","createNextFrag","nextByteRange","setFragLevelKeys","assignProgramDateTime","value1","value2","skipAttrs","dateRange","levelKey","mapAttrs","setInitSegment","serverControlAttrs","partInfAttrs","previousFragmentPart","part","preloadHintAttrs","renditionReportAttrs","fragmentLength","firstFragment","lastFragment","lastSn","fragPrev","backfillProgramDateTimes","keyTagAttributes","_keyAttrs$METHOD","_keyAttrs$KEYFORMAT","keyAttrs","decryptmethod","METHOD","decrypturi","decryptiv","decryptkeyformatversions","KEYFORMATVERSIONS","decryptkeyformat","KEYFORMAT","IV","resolvedUri","startAttributes","codecsAttributeValue","typeCodes","isCodecType","groupItem","codecProperty","codecValue","BYTERANGE","PlaylistContextType","PlaylistLevelType","mapContextToLevelType","getResponseUrl","PlaylistLoader","hls","loaders","registerListeners","startLoad","startPosition","stopLoad","destroyInternalLoaders","MANIFEST_LOADING","onManifestLoading","LEVEL_LOADING","onLevelLoading","AUDIO_TRACK_LOADING","onAudioTrackLoading","SUBTITLE_TRACK_LOADING","onSubtitleTrackLoading","unregisterListeners","createInternalLoader","PLoader","pLoader","Loader","getInternalLoader","resetInternalLoader","deliveryDirectives","_context$deliveryDire","loadPolicy","loaderContext","manifestLoadPolicy","playlistLoadPolicy","timeoutRetry","errorRetry","levelDetails","details","audioTracks","subtitleTracks","targetDuration","maxLowLatencyPlaylistRefresh","maxTimeToFirstByteMs","maxLoadTimeMs","legacyRetryCompatibility","loaderConfig","maxRetry","maxNumRetry","retryDelayMs","maxRetryDelay","maxRetryDelayMs","loaderCallbacks","onSuccess","networkDetails","handleTrackOrLevelPlaylist","handleMasterPlaylist","handleManifestParsingError","handleNetworkError","onTimeout","parsedResult","subtitles","captions","audioTrack","MANIFEST_LOADED","levelId","levelType","singleLevel","handlePlaylistLoaded","NETWORK_ERROR","MANIFEST_PARSING_ERROR","UNKNOWN","MANIFEST_LOAD_TIMEOUT","MANIFEST_LOAD_ERROR","LEVEL_LOAD_TIMEOUT","LEVEL_LOAD_ERROR","AUDIO_TRACK_LOAD_TIMEOUT","AUDIO_TRACK_LOAD_ERROR","SUBTITLE_TRACK_LOAD_TIMEOUT","SUBTITLE_LOAD_ERROR","levelIndex","_error","LEVEL_EMPTY_ERROR","LEVEL_PARSING_ERROR","getCacheAge","LEVEL_LOADED","AUDIO_TRACK_LOADED","SUBTITLE_TRACK_LOADED","sendAddTrackEvent","videoEl","initEvent","addCueToTrack","cue","cues","getCueById","addCue","textTrackCue","TextTrackCue","err2","clearCurrentCues","removeCue","removeCuesInRange","cuesFound","firstCueInRange","mid","getFirstCueIndexAfterTime","getCuesInRange","filterSubtitleTracks","textTrackList","MetadataSchema","getCueClass","VTTCue","createCueWithDataFields","Cue","MAX_CUE_ENDTIME","MAX_VALUE","dateRangeDateToTimelineSeconds","ID3TrackController","id3Track","dateRangeCuesAppended","_registerListeners","_unregisterListeners","MEDIA_ATTACHED","onMediaAttached","MEDIA_DETACHING","onMediaDetaching","FRAG_PARSING_METADATA","onFragParsingMetadata","BUFFER_FLUSHING","onBufferFlushing","LEVEL_UPDATED","onLevelUpdated","createTrack","getID3Track","textTracks","textTrack","addTextTrack","enableEmsgMetadataCues","enableID3MetadataCues","updateId3CueEnds","_this$id3Track","endOffset","enableDateRangeMetadataCues","idsToRemove","dateTimeOffset","appendedDateRangeCues","durationKnown","nextDateRangeWithSameClass","candidateDateRange","otherDateRange","_cue","LatencyController","stallCount","_latency","timeupdateHandler","timeupdate","latency","maxLatency","liveMaxLatencyDuration","liveMaxLatencyDurationCount","targetLatency","liveSyncDuration","liveSyncDurationCount","lowLatencyMode","userConfig","maxLiveSyncOnStallIncrease","liveSyncPosition","liveEdge","estimateLiveEdge","syncPosition","edgeStalled","maxLevelUpdateAge","forwardBufferLength","bufferedRanges","buffered","_this$levelDetails","BUFFER_STALLED_ERROR","computeLatency","maxLiveSyncPlaybackRate","distanceFromTarget","rate","playbackRate","HdcpLevels","VideoRangeValues","HlsSkip","getSkipValue","HlsUrlParameters","msn","skip","addDirectives","Level","_attrs","frameRate","fragmentError","loadError","realBitrate","supportedPromise","supportedResult","_avgBitrate","_audioGroups","_subtitleGroups","_urlId","addGroupId","maxBitrate","averageBitrate","videoRange","hasAudioGroup","hasGroup","hasSubtitleGroup","audioGroups","subtitleGroups","audioGroupIds","audioGroupId","textGroupIds","textGroupId","_this$audioGroups","_this$subtitleGroups","addFallback","updateFromToPTS","fragFrom","fragTo","fragToPTS","updateFragPTSDTS","fragStartPts","fragEndPts","fragIdx","mergeDetails","newDetails","oldFragments","oldInit","PTSFrag","ccOffset","intersectionFn","newFrags","oldFrags","oldFrag","newFrag","mapFragmentIntersection","_currentInitSegment","oldDateRanges","deltaDateRanges","mergeDateRanges","newFragments","oldParts","newParts","oldPart","newPart","mapPartIntersection","adjustSliding","addSliding","getPartWith","partIndex","_level$details","findPart","reassignFragmentLevelIndexes","isTimeoutError","FRAG_LOAD_TIMEOUT","KEY_LOAD_TIMEOUT","getRetryConfig","isTimeout","getRetryDelay","retryConfig","backoffFactor","backoff","getLoaderConfigWithoutReties","loderConfig","loaderResponse","httpStatus","retryForHttpStatus","BinarySearch","comparisonFn","minIndex","maxIndex","currentIndex","currentElement","comparisonResult","findFragmentByPTS","fragPrevious","bufferEnd","maxFragLookUpTolerance","nextFragLookupTolerance","fragNext","bufferEdgeError","fragmentWithinToleranceTest","firstDuration","fragmentWithinFastStartSwitch","foundFragment","candidate","candidateLookupTolerance","pdtWithinToleranceTest","pdtBufferEnd","NetworkErrorAction","ErrorActionFlags","BasePlaylistController","logPrefix","requestScheduled","canLoad","clearTimer","loadPlaylist","switchParams","playlistUri","foundIndex","currentGoal","hlsUrlParameters","shouldLoadPlaylist","playlist","shouldReloadPlaylist","playlistLoaded","previousDetails","elapsed","endSn","lastPart","lastAdvanced","cdnAge","getDeliveryDirectives","bufferInfo","mainForwardBufferInfo","reloadInterval","distanceToLiveEdgeMs","liveEdgeMaxTargetDurations","lastSegmentDuration","computeReloadInterval","estimatedTimeUntilUpdate","previousDeliveryDirectives","checkRetry","errorEvent","errorDetails","errorAction","_errorEvent$context","levelRetry","EWMA","halfLife","estimate","weight","alpha_","estimate_","totalWeight_","adjAlpha","getTotalWeight","getEstimate","zeroFactor","EwmaBandWidthEstimator","slow","fast","defaultEstimate","defaultTTFB","defaultEstimate_","minWeight_","minDelayMs_","slow_","fast_","defaultTTFB_","ttfb_","durationMs","numBytes","durationS","bandwidthInBps","sampleTTFB","ttfb","canEstimate","getEstimateTTFB","SUPPORTED_INFO_DEFAULT","decodingInfoResults","powerEfficient","smooth","SUPPORTED_INFO_CACHE","requiresMediaCapabilitiesDecodingInfo","audioTracksByGroup","currentVideoRange","currentFrameRate","currentBw","audioPreference","audioCodecPreference","channelsPreference","maxChannels","audioChannels","audioTrackGroup","getMediaDecodingInfoPromise","mediaCapabilities","videoCodecs","audioCodecs","baseVideoConfiguration","framerate","transferFunction","contentType","_audioTracksByGroup$g","channelsNumber","decodingInfoKey","mediaConfig","spatialRendering","getMediaDecodingInfoKey","decodingInfo","getVideoSelectionOptions","videoPreference","preferHDR","allowedVideoRanges","matchMedia","mediaQueryList","badQuery","isHdrSupported","logStartCodecCandidateIgnored","codeSet","findMatchingOption","matchPredicate","matchesOption","characteristicsA","characteristicsB","arrA","arrB","characteristicsMatch","audioMatchPredicate","searchDownAndUpList","TaskLoop","_boundTick","_tickTimer","_tickInterval","_tickCallCount","tick","onHandlerDestroying","onHandlerDestroyed","clearNextTick","hasInterval","hasNextTick","millis","doTick","tickImmediate","FragmentState","FragmentTracker","activePartLists","endListFragments","timeRanges","bufferPadding","hasGaps","BUFFER_APPENDED","onBufferAppended","FRAG_BUFFERED","onFragBuffered","FRAG_LOADED","onFragLoaded","getAppendedFrag","activeParts","activePart","appendedPTS","getBufferedFrag","fragmentEntity","detectEvictedFragments","elementaryStream","timeRange","playlistType","appendedPart","appendedPartSn","removeFragment","esData","isNotBuffered","isTimeBuffered","detectPartialFragments","fragKey","getFragmentKey","isFragHint","streamInfo","getBufferedTimes","isPartial","removeParts","snToKeep","fragBuffered","getPartialFragment","timePadding","bestFragment","bestOverlap","isEndListAppended","lastFragmentEntity","hasFragment","hasParts","_this$activePartLists","removeFragmentsInRange","withGapOnly","unbufferedOnly","snToRemove","removeAllFragments","_fragmentEntity$range","_fragmentEntity$range2","_fragmentEntity$range3","noopBuffered","BufferHelper","isBuffered","getBuffered","maxHoleDuration","vbuffered","bufferedInfo","nextStart","buffered2","buf2len","buf2end","bufferStartNext","bufferLen","bufferStart","ChunkMetadata","transmuxing","executeStart","executeEnd","findFirstFragWithCC","_fragments$i","adjustFragmentStart","sliding","adjustSlidingStart","alignStream","lastFrag","switchDetails","shouldAlignOnDiscontinuities","referenceFrag","prevDetails","curDetails","prevFrags","curFrags","prevStartFrag","findDiscontinuousReferenceFrag","alignDiscontinuities","alignMediaPlaylistByPDT","refDetails","refFragments","refFrag","targetCC","refPDT","targetPDT","MIN_CHUNK_SIZE","FragmentLoader","partLoadTimeout","onProgress","LoadError","FRAG_LOAD_ERROR","FragmentILoader","fLoader","DefaultILoader","createGapLoadError","createLoaderContext","fragLoadPolicy","highWaterMark","resetLoader","resetIV","INTERNAL_ABORTED","loadPart","updateStatsFromPart","partLoadedData","fragStats","partStats","partTotal","estTotalParts","estLoadedParts","estRemainingBytes","fragLoading","partLoading","rangeStart","_frag$decryptdata","byteRangeStart","byteRangeEnd","fragmentLen","MEDIA_ERROR","FRAG_GAP","AESCrypto","aesIV","FastAESKey","expandKey","AESDecryptor","rcon","subMix","Uint32Array","invSubMix","sBox","invSBox","ksRows","keySchedule","invKeySchedule","initTable","uint8ArrayToUint32Array_","newArray","subMix0","subMix1","subMix2","subMix3","invSubMix0","invSubMix1","invSubMix2","invSubMix3","sx","x4","x8","keyBuffer","sameKey","ksRow","invKsRow","sbox","networkToHostOrderSwap","inputArrayBuffer","nRounds","invSBOX","initVector","initVector0","initVector1","initVector2","initVector3","inputInt32","Int32Array","outputInt32","t0","t1","t2","t3","s0","s3","inputWords0","inputWords1","inputWords2","inputWords3","swapWord","Decrypter","removePKCS7Padding","logEnabled","softwareDecrypter","fastAesKey","remainderData","currentIV","currentResult","useSoftware","enableSoftwareAES","browserCrypto","webkitSubtle","isSync","outputBytes","paddingBytes","removePadding","softwareDecrypt","decryptResult","webCryptoDecrypt","logOnce","currentChunk","getValidChunk","onWebCryptoError","aesKey","splitPoint","TimeRanges","State","BaseStreamController","fragmentTracker","fragCurrent","transmuxer","mediaBuffer","lastCurrentTime","nextLoadPosition","loadedmetadata","retryDate","fragmentLoader","levelLastLoaded","startFragRequested","decrypter","initPTS","onvseeking","onvended","onManifestLoaded","onTickEnd","resetTransmuxer","pauseBuffering","resumeBuffering","_streamEnded","getLevelDetails","_this$levelLastLoaded","onMediaSeeking","onMediaEnded","autoStartLoad","ended","detach","maxBufferHole","resetLoadingState","fragStartOffset","fragEndOffset","pastFragment","loadFragment","targetBufferTime","_loadFragForPlayback","_doFragLoad","fragContextChanged","_handleFragmentLoadProgress","_handleFragmentLoadComplete","resetFragmentLoading","clearTrackerIfNeeded","_this$mediaBuffer","getFwdBufferInfo","minForwardBufferLength","maxBufferLength","backtrackFragment","reduceMaxBufferLength","checkLiveUpdate","flushMainBuffer","flushScope","_loadInitSegment","decryptData","FRAG_DECRYPT_ERROR","FRAG_DECRYPTED","tstart","tdecrypt","completeInitSegmentLoad","fragBufferedComplete","_frag$startPTS","_frag$endPTS","_this$fragCurrent","_this$fragPrevious","_this$levels","seekToStartPos","fragLoadedEndData","partsLoaded","fragLoaded","chunkMeta","progressCallback","keyLoadingPromise","loadClear","keyLoadedData","KEY_LOADED","KEY_LOADING","getNextPart","doFragPartsLoad","handleFragLoadError","FRAG_LOADING","loadedEndOfParts","dataOnProgress","progressive","fragLoadedData","fromPart","initialPartList","loadedPart","nextPart","handleFragLoadAborted","OTHER_ERROR","INTERNAL_EXCEPTION","_handleTransmuxerFlush","getCurrentContext","updateLevelTiming","getFragmentWithSN","bufferFragmentData","noBacktracking","_buffer","BUFFER_APPENDING","dropped","flushBufferGap","fragDuration","segmentFraction","bufferable","getLoadPosition","getFwdBufferInfoAtPos","bufferedFragAtPos","getMaxBufferLength","levelBitrate","maxBufLen","maxBufferSize","maxMaxBufferLength","threshold","reducedLength","fragOrPart","getNextFragment","fragLen","initialLiveManifestSize","getInitialLiveFragment","getFragmentAtPosition","mapToInitFragWhenRequired","isLoopLoading","trackerState","getNextFragmentLoopLoading","gapStart","nextFragment","nextbufferInfo","contiguous","independentAttrOmitted","PDTValue","findFragmentByPDT","targetSN","findFragWithCC","liveStart","loadingParts","curSNIdx","fragState","nextFrag","synchronizeToLiveEdge","withinSlidingWindow","alignPlaylists","slidingStart","firstLevelLoad","aligned","alignedSlidingStart","waitForCdnTuneIn","setStartPosition","offsetInMultivariantPlaylist","onFragmentOrKeyLoadError","filterType","_this$fragCurrent2","gapTagEncountered","resetStartWhenNotLoaded","resetFragmentErrors","reduceLengthAndFlushBuffer","flushBuffer","afterBufferFlushed","bufferType","bufferedTimeRanges","resetWhenMissingContext","removeUnbufferedFrags","_this$transmuxer","parsedDuration","LEVEL_PTS_UPDATED","FRAG_PARSING_ERROR","FRAG_PARSED","recoverWorkerError","ChunkCache","chunks","dataLength","concatUint8Arrays","dummyTrack","inputTimeScale","sequenceNumber","BaseAudioDemuxer","_audioTrack","_id3Track","frameIndex","cachedData","basePTS","lastPTS","resetInitSegment","trackDuration","resetTimeStamp","deaultTimestamp","resetContiguity","canParse","appendFrame","demux","lastDataIndex","initPTSFn","dts","partialData","videoTrack","demuxSampleAes","isHeaderPattern$1","getHeaderLength","getFullFrameLength","isHeader$1","probe$1","headerLength","frameLength","newOffset","initTrackConfig","samplerate","adtsObjectType","adtsExtensionSamplingIndex","adtsChannelConfig","manifestCodec","adtsSamplingRates","adtsSamplingIndex","channelCount","emit","getAudioConfig","getFrameDuration","appendFrame$2","stamp","parseFrameHeader","_length","_sample","chromeVersion$1","BitratesMap","SamplingRateMap","SamplesCoefficients","BytesInSlot","appendFrame$1","parseHeader","samplesPerFrame","sampleRate","mpegVersion","mpegLayer","bitRateIndex","sampleRateIndex","paddingBit","channelMode","bitRate","sampleCoefficient","bytesInSlot","isHeaderPattern","isHeader","probe","emsgSchemePattern","getAudioBSID","bsid","numBits","AC3Demuxer","segmentCodec","samplingRateCode","frameSizeCode","skipCount","lfeon","bsmod","BaseVideoParser","VideoSample","createVideoSample","units","getLastNalUnit","_VideoSample","lastUnit","pushAccessUnit","nbSamples","lastSample","ExpGolomb","bytesAvailable","bitsAvailable","loadWord","workingBytes","availableBytes","skipBits","skipBytes","readBits","valu","skipLZ","leadingZeroCount","skipUEG","skipEG","readUEG","clz","readEG","readBoolean","readUByte","readUShort","readUInt","skipScalingList","deltaScale","lastScale","nextScale","readSPS","numRefFramesInPicOrderCntCycle","scalingListCount","frameCropLeftOffset","frameCropRightOffset","frameCropTopOffset","frameCropBottomOffset","profileIdc","chromaFormatIdc","picOrderCntType","picWidthInMbsMinus1","picHeightInMapUnitsMinus1","frameMbsOnlyFlag","pixelRatio","readSliceType","AvcVideoParser","parseAVCPES","pes","parseAVCNALu","spsfound","audFound","_VideoSample2","iskey","sliceType","_track$pixelRatio","_track$pixelRatio2","sps","codecarray","codecstring","pps","naluState","lastState","unitType","lastUnitStart","lastUnitType","SampleAesDecrypter","decryptBuffer","encryptedData","decryptAacSample","sampleIndex","curUnit","encryptedBuffer","decryptedBuffer","decryptAacSamples","getAvcEncryptedData","decodedData","encryptedDataLen","Int8Array","outputPos","inputPos","getAvcDecryptedUnit","uint8DecryptedData","decryptAvcSample","unitIndex","decryptAvcSamples","curUnits","PACKET_LENGTH","TSDemuxer","typeSupported","sampleAes","pmtParsed","_duration","_pmtId","_videoTrack","_txtTrack","aacOverFlow","videoParser","syncOffset","scanwindow","foundPat","packetStart","tsPackets","parsePID","pesData","isSampleAes","videoPid","audioPid","id3Pid","audioData","unknownPID","pmtId","tsPacketErrors","stt","parsePES","parseAACPES","parseMPEGPES","parseAC3PES","parseID3PES","parsePAT","parsedPIDs","parsePMT","segmentVideoCodec","segmentAudioCodec","emitParsingError","demuxResult","extractRemainingSamples","frameMissingBytes","sampleLength","frameOverflowBytes","recoverable","frameDuration","id3Sample","tableEnd","esInfoLength","logEncryptedSamplesFoundInUnencryptedStream","mpeg","mp3","ac3","parsePos","descriptorLen","pesLen","pesHdrLen","pesPts","pesDts","pesFlags","payloadStartOffset","dataLen","AAC","getSilentFrame","UINT32_MAX","MP4","avcC","btrt","dinf","dref","esds","ftyp","mdat","mdia","mfhd","minf","moov","dac3","mvex","mvhd","pasp","sdtp","stbl","stco","stsc","stsz","stts","vmhd","smhd","videoHdlr","audioHdlr","HDLR_TYPES","STTS","STSC","STCO","STSZ","VMHD","SMHD","STSD","majorBrand","avc1Brand","minorVersion","FTYP","box","DINF","upperWordDuration","lowerWordDuration","baseMediaDecodeTime","boxes","dependsOn","isDependedOn","hasRedundancy","avcc","hSpacing","vSpacing","configlen","audioStsd","sampleDependencyTable","upperWordBaseMediaDecodeTime","lowerWordBaseMediaDecodeTime","arraylen","cts","isLeading","paddingValue","isNonSync","degradPrio","movie","MPEG_TS_CLOCK_FREQ_HZ","toTimescaleFromBase","destScale","srcBase","toMsFromMpegTsClock","chromeVersion","safariWebkitVersion","MP4Remuxer","ISGenerated","_initPTS","_initDTS","nextAvcDts","nextAudioPts","videoSampleDuration","isAudioContiguous","isVideoContiguous","videoTrackConfig","defaultTimeStamp","resetNextTimestamp","getVideoStartPts","videoSamples","rolloverDetected","firstPts","minPTS","normalizePts","remux","accurateTimeOffset","audioTimeOffset","videoTimeOffset","hasAudio","hasVideo","enoughAudioSamples","enoughVideoSamples","_videoTrack$pixelRati","_config$pixelRatio","_videoTrack$pixelRati2","_config$pixelRatio2","generateIS","firstKeyFramePTS","firstKeyFrameIndex","findKeyframeIndex","forceKeyFrameOnDiscontinuity","audiovideoTimestampDelta","remuxAudio","audioTrackLength","remuxVideo","firstKeyFrame","flushTextTrackMetadataCueSamples","flushTextTrackUserdataCueSamples","audioSamples","initDTS","computePTSDTS","timeScale","inputSamples","outputSamples","firstDTS","lastDTS","mp4SampleDuration","maxPTS","sortSamples","initTime","deltadts","deltapts","inputDuration","averageSampleDuration","foundHole","foundOverlap","firstPTS","nbNalu","naluLen","dtsStep","nbUnits","sampleLen","mdatSize","MUX_ERROR","REMUX_ALLOC_ERROR","stretchedLastFrame","minDtsDelta","minPtsDelta","maxDtsDelta","maxPtsDelta","VideoSampleUnits","ptsDelta","mp4SampleLength","unitData","unitDataLen","lastFrameDuration","stretchShortVideoTrack","gapTolerance","deltaToFrameEnd","compositionTimeOffset","Mp4Sample","nextDts","nextPts","getSamplesPerFrame","scaleFactor","inputSampleDuration","rawMPEG","alignedWithVideo","timeOffsetMpegTS","maxAudioFramesDrift","newStamp","fillFrame","_nbSamples","audioSample","unitLen","remuxEmptyAudio","init90kHz","silentFrame","reference","isKeyframe","getParsedTrackCodec","muxConfig","txtTrack","captionTrack","initData","hasMoofData","segmentedData","segmentedRange","moofs","segmentValidRange","extractID3Track","emsgs","emsgInfo","schemeIdUri","presentationTimeDelta","presentationTime","eventDuration","leftPresentationTime","rightPresentationTime","parseEmsg","emitInitSegment","initTracks","lastEndTime","defaultInitPTS","generateInitSegment","encBoxes","isAudio","tenc","tencKeyId","patchEncyptionData","_initData","_initData2","rawDuration","videoDuration","audioDuration","trafs","trackDefault","truns","sidxMinStart","sidxMaxEnd","sidxDuration","sidxs","subSegmentDuration","getDuration","fmp4","getStartDTS","decodeTime","minDuration","isInvalidInitPts","upper","offsetStartDTS","canGetFrameLength","canParse$1","Transmuxer","demuxer","remuxer","decryptionPromise","transmuxConfig","currentTransmuxState","configure","uintData","discontinuity","trackSwitch","initSegmentChange","defaultInitPts","initSegmentData","encryptionType","getEncryptionType","getDecrypter","emptyResult","resetMuxers","needsProbing","configureTransmuxer","resetInitialTimestamp","transmux","transmuxResults","demuxResultOrPromise","isPromise","flushRemux","remuxResult","transmuxSampleAes","transmuxUnencrypted","mux","_muxConfig$i$demux","Remuxer","Demuxer","TransmuxConfig","TransmuxState","eventemitter3","EE","emitter","_events","_eventsCount","clearEvent","eventNames","names","listenerCount","a1","a2","a3","a4","a5","prefixed","TransmuxerInterface","onTransmuxComplete","onFlush","useWorker","workerContext","onwmsg","enableWorker","forwardMessage","m2tsTypeSupported","workerPath","__HLS_WORKER_BUNDLE__","scriptURL","worker","loadWorker","objectURL","injectWorker","onWorkerMessage","resetWorker","terminate","_frag$initSegment","_lastFrag$initSegment","snDiff","partDiff","transmuxResult","handleTransmuxComplete","transmuxerError","handleFlushResult","_this$workerContext","subtitleOptionsIdentical","trackList1","trackList2","mediaAttributesIdentical","attrs1","attrs2","customAttributes","stableRenditionId","subtitleAttribute","subtitleTrackMatchesTextTrack","subtitleTrack","BufferableInstance","timeranges","getRange","BufferOperationQueue","sourceBufferReference","buffers","queues","executeNext","insertAbort","appendBlocker","updating","shiftAndExecuteNext","VIDEO_CODEC_PROFILE_REPLACE","removeSourceChildren","sourceChildren","specialCea608CharsCodes","getCharForByte","NR_ROWS","NR_COLS","rowsLowCh1","rowsHighCh1","rowsLowCh2","rowsHighCh2","backgroundColors","CaptionsLogger","verboseLevel","numArrayToHexArray","numArray","hexArray","PenState","foreground","underline","italics","background","flash","setStyles","styles","newPenState","StyledUnicodeChar","uchar","penState","setChar","setPenState","newChar","Row","chars","currPenState","cueStartTime","setCursor","absPos","moveCursor","relPos","newPos","backSpace","insertChar","clearFromPos","startPos","clearToEndOfRow","getTextString","setPenStyles","CaptionScreen","currRow","nrRollUpRows","lastOutputScreen","setPen","setPAC","pacData","newRow","topRowIndex","prevLineTime","indent","prevPos","setBkgData","bkgData","setRollUpRows","nrRows","rollUp","getDisplayText","topRow","asOneRow","displayText","rowNr","rowText","getTextAndFormat","Cea608Channel","channelNumber","outputFilter","chNr","displayedMemory","nonDisplayedMemory","currRollUpRow","writeScreen","getHandler","setHandler","newHandler","setMode","newMode","insertChars","outputDataUpdate","ccRCL","ccBS","ccAOF","ccAON","ccDER","ccRU","ccFON","ccRDC","ccTR","ccRTD","ccEDM","ccCR","ccENM","ccEOC","ccTO","nrCols","ccMIDROW","secondByte","colorIndex","newCue","dispatchCue","cueSplitAtTime","Cea608Parser","out1","out2","currentChannel","cmdHistory","byteList","cmdFound","charsFound","hasCmdRepeated","setLastCmd","parseCmd","parseMidrow","parsePAC","parseBackgroundAttributes","parseChars","currChNr","interpretPAC","pacIndex","channelNr","charCodes","charCode1","oneCode","OutputFilter","timelineController","trackName","cueRanges","addCues","createCaptionsTrack","AllowedDirections","AllowedAlignments","isAllowedValue","lcValue","findAlignSetting","cobj","baseObj","hasBeenReset","_id","_pauseOnExit","_startTime","_endTime","_text","_region","_vertical","_snapToLines","_line","_lineAlign","_position","_positionAlign","_size","_align","setting","findDirectionSetting","displayState","getCueAsHTML","WebVTT","convertCueToDOMTree","StringDecoder","parseTimeStamp","computeSeconds","Settings","dflt","defaultKey","integer","keyValueDelim","groupDelim","align","parseCue","regionList","oInput","consumeTimeStamp","skipWhitespace","vals","lineAlign","snapToLines","consumeCueSettings","fixLineBreaks","VTTParser","oncue","onparsingerror","onflush","collectNextLine","alreadyCollectedLine","hasSubstring","LINEBREAKS","inputString","searchString","generateCueId","parseWebVTT","vttByteArray","vttCCs","callBack","errorCallBack","vttLines","srcScale","toMpegTsClockFromTimescale","parsingError","cueTime","timestampMapMPEGTS","timestampMapLOCAL","inHeader","currCC","cueOffset","webVttMpegTsMapOffset","new","prevCC","presentationOffset","_prevCC","calculateOffset","secs","mins","cueString2millis","IMSC1_CODEC","HMSF_REGEX","TIME_UNIT_REGEX","textAlignToLineAlign","parseIMSC1","ttmlList","syncTime","toTimescaleFromScale","ttml","xmlDoc","defaultRateInfo","subFrameRate","frameRateMultiplier","tickRate","rateInfo","styleElements","collectionToDictionary","getElementCollection","regionElements","cueElements","cueElement","cueText","getTextContent","hasAttribute","parseTtmlTime","timestampParsingError","ttsNs","regionStyle","styleAttributes","regionStyleName","getAttributeNS","getTtmlStyles","parseTTML","parentName","elementsWithId","dict","_node$childNodes","hasAttributeNS","timeAttributeValue","parseHoursMinutesSecondsFrames","parseTimeUnits","captionsOrSubtitlesFromCharacteristics","canReuseVttTextTrack","inUseTrack","manifestTrack","CapLevelController","autoLevelCapping","firstLevel","restrictedLevels","clientRect","streamController","setStreamController","unregisterListener","stopCapping","FPS_DROP_LEVEL_CAPPING","onFpsDropLevelCapping","MEDIA_ATTACHING","onMediaAttaching","MANIFEST_PARSED","onManifestParsed","LEVELS_UPDATED","onLevelsUpdated","BUFFER_CODECS","onBufferCodecs","droppedLevel","isLevelAllowed","HTMLVideoElement","detectPlayerSize","capLevelToPlayerSize","startCapping","maxLevel","getMaxLevel","nextLevelSwitch","capLevelIndex","validLevels","getMaxLevelByMediaSize","getDimensions","boundsRect","contentScaleFactor","ignoreDevicePixelRatio","restrictedLevel","maxLevelIndex","squareSize","curLevel","nextLevel","LOGGER_PREFIX","EMEController","keyFormatPromise","keySystemAccessPromises","_requestLicenseFailureCount","mediaKeySessions","keyIdToKeySessionPromise","setMediaKeysQueue","CDMCleanupPromise","onMediaEncrypted","_onMediaEncrypted","onWaitingForKey","_onWaitingForKey","onMediaDetached","requestMediaKeySystemAccessFunc","licenseXhrSetup","licenseResponseCallback","drmSystemOptions","MEDIA_DETACHED","getLicenseServerUrl","keySystemConfiguration","licenseUrl","getServerCertificateUrl","serverCertificateUrl","attemptKeySystemAccess","uniqueCodec","keySystems","getMediaKeysPromise","mediaKeys","EMEKeyError","KEY_SYSTEM_ERROR","KEY_SYSTEM_NO_ACCESS","supportedConfigurations","errMessage","mediaKeySystemConfigs","initDataTypes","persistentState","distinctiveIdentifier","sessionTypes","sessionType","audioCapabilities","robustness","audioRobustness","encryptionScheme","audioEncryptionScheme","videoCapabilities","videoRobustness","videoEncryptionScheme","createMediaKeySystemConfigurations","getSupportedMediaKeySystemConfigurations","keySystemAccess","_keySystemAccessPromises","mediaKeySystemAccess","certificateRequest","fetchServerCertificate","createMediaKeys","certificate","setMediaKeysServerCertificate","createMediaKeySessionContext","mediaKeysSession","mediaKeySessionContext","keyStatus","renewKeySession","keySessionContext","getKeyIdString","generateRequestWithPreferredKeySession","removeSession","updateKeySession","_mediaKeySessionConte","keySession","selectKeySystemFormat","getKeyFormatPromise","keySystemsInConfig","getKeySystemSelectionPromise","keySystemFormat","loadKey","keyInfo","keyDetails","keySessionContextPromise","getKeySystemForKeyPromise","throwIfDestroyed","attemptSetMediaKeys","handleError","KEY_SYSTEM_NO_KEYS","KEY_SYSTEM_NO_CONFIGURED_LICENSE","initDataType","logMessage","keySystemDomain","psshResults","parseMultiPssh","psshInfo","keyIdHex","keyContext","oldKeyIdHex","_keySystemToKeySystem","setMediaKeysPromise","setMediaKeys","_this$config$drmSyste","_this$config$drmSyste2","generateRequestFilter","generateRequest","mappedInitData","_this$hls","licenseStatus","_onmessage","renewLicense","onkeystatuseschange","_onkeystatuseschange","onKeyStatusChange","keyUsablePromise","KEY_SYSTEM_STATUS_OUTPUT_RESTRICTED","KEY_SYSTEM_STATUS_INTERNAL_ERROR","_context$mediaKeysSes","KEY_SYSTEM_NO_SESSION","keyStatuses","certLoader","certLoadPolicy","contex","KEY_SYSTEM_SERVER_CERTIFICATE_REQUEST_FAILED","cert","setServerCertificate","success","KEY_SYSTEM_SERVER_CERTIFICATE_UPDATE_FAILED","keyMessage","requestLicense","KEY_SYSTEM_SESSION_UPDATE_FAILED","unpackPlayReadyKeyMessage","licenseChallenge","xmlString","keyMessageXml","_header$querySelector","_header$querySelector2","challengeElement","challengeText","setupLicenseXHR","keysListItem","licenseXhrSetupResult","keyLoadPolicy","KEY_SYSTEM_LICENSE_REQUEST_FAILED","attemptsLeft","licenseXhr","emeEnabled","mediaKeysList","keySessionCount","CmObjectType","CmStreamingFormat","CmcdHeaderField","CmcdHeaderMap","OBJECT","REQUEST","SESSION","STATUS","SfItem","SfToken","DICT","throwError","BARE_ITEM","BYTES","DECIMAL","INTEGER","STRING_REGEX","TOKEN","KEY","serializeByteSequence","binary","serializeInteger","isInvalidInt","roundToEven","precision","decimalShift","EPSILON","flooredValue","serializeDecimal","roundedValue","serializeToken","serializeBareItem","serializeString","serializeBoolean","serializeDate","serializeKey","serializeParams","serializeItem","serializeDict","optionalWhiteSpace","isTokenField","toRounded","toHundred","CmcdFormatters","mtp","nor","fromPath","urlToRelativePath","rtp","encodeCmcd","cmcd","encodeSfDict","processCmcd","appendCmcdHeaders","headerMap","customHeaderMap","shards","_headerMap$find","toCmcdHeaders","CMCD_PARAM","REGEX","appendCmcdQuery","toCmcdQuery","cloneRenditionGroups","groupCloneMap","uriReplacement","cloneId","clonedTracks","clonedTrack","performUriReplacement","stableId","perOptionKey","HOST","PARAMS","perOptionUris","perVariantUri","AGE_HEADER_LINE_REGEX","XhrLoader","xhrSetup","requestTimeout","retryTimeout","abortInternal","onprogress","_this$callbacks","loadInternal","openAndSendXhr","readystatechange","loadprogress","loadtimeout","useResponseText","_response","responseURL","_this$context","lengthComputable","getAllResponseHeaders","getResponseHeader","FetchLoader","fetchSetup","getRequest","initParams","credentials","getRequestParameters","LENGTH","FetchError","contentRange","byteRangeLength","byteRangeHeader","getByteRangeLength","getContentLength","loadProgressively","chunkCache","reader","getReader","pump","WHITESPACE_CHAR","Cues","captionScreen","indenting","_track$cues","cueA","cueB","hlsDefaultConfig","defaultAudioCodec","capLevelOnFPSDrop","backBufferLength","frontBufferFlushThreshold","highBufferWatchdogPeriod","nudgeOffset","nudgeMaxRetry","liveDurationInfinity","liveBackBufferLength","startLevel","startFragPrefetch","fpsDroppedMonitoringPeriod","fpsDroppedMonitoringThreshold","appendErrorMaxRetry","abrController","_hls","lastLevelLoadSec","lastLoadedFragLevel","firstSelection","_nextAutoLevel","nextAutoLevelKey","codecTiers","partCurrent","bitrateTestDelay","bwEstimator","_abandonRulesCheck","autoLevelEnabled","timeLoading","minAutoLevel","paused","ttfbEstimate","bufferStarvationDelay","loadedFirstByte","getBwEstimate","expectedLen","timeStreaming","loadRate","fragLoadedDelay","bwe","nextLoadLevel","fragLevelNextLoadedDelay","levelNextBitrate","getTimeToLoadFrag","nextAutoLevel","nextLoadLevelBitrate","abrBandWidthUpFactor","resetEstimator","FRAG_LOAD_EMERGENCY_ABORTED","initEstimator","abrEwmaDefaultEstimate","abrEwmaSlowVoD","abrEwmaFastVoD","onFragLoading","LEVEL_SWITCHING","onLevelSwitching","onLevelLoaded","MAX_AUTO_LEVEL_UPDATED","onMaxAutoLevelUpdated","ignoreFragment","_data$part","BUFFER_ADD_CODEC_ERROR","BUFFER_APPEND_ERROR","timeToFirstByteSec","bandwidth","fragSizeBits","isSwitch","timeLoadingMs","abrEwmaSlowLive","abrEwmaFastLive","abrMaxWithRealBitrate","loadedBytes","loadedDuration","fragBufferedData","processingMs","firstAutoLevel","maxAutoLevel","maxStartDelay","maxStarvationDelay","abrAutoLevel","findBestLevel","clamped","forcedAutoLevel","useEstimate","loadedFirstFrag","getAutoLevelKey","nextABRAutoLevel","getNextABRAutoLevel","getStarvationDelay","currentFragDuration","avgbw","bwFactor","abrBandWidthFactor","bwUpFactor","_bestLevel","maxLoadingDelay","bestLevel","minLevel","autoLevel","loadLevel","maxFetchDuration","selectionBaseLevel","allAudioTracks","currentCodecSet","trackGroup","hasDefault","hasAutoSelect","channelsKey","hasDefaultAudio","hasAutoSelectAudio","getAudioTracksByGroup","tiers","tier","minBitrate","minFramerate","maxScore","videoRanges","SDR","lesserWidthOrHeight","audioGroup","getCodecTiers","startTier","codecSets","preferStereo","hasStereo","hasCurrentVideoRange","selectedScore","matchingVideoRanges","maxHeight","maxFramerate","candidateTier","getStartCodecTier","ttfbEstimateSec","levelsSkipped","_levelInfo$supportedR","levelInfo","upSwitch","useMediaCapabilities","removeLevel","avgDuration","adjustedbw","fetchDuration","bufferController","_objectUrl","operationQueue","bufferCodecEventsExpected","_bufferCodecEventsTotal","mediaSource","lastMpegAudioChunk","appendSource","appendErrors","pendingTracks","sourceBuffer","_onEndStreaming","_onStartStreaming","_onMediaSourceOpen","_onMediaEmptied","updateMediaElementDuration","checkPendingTracks","_onMediaSourceClose","_onMediaSourceEnded","mediaSrc","_initSourceBuffer","hasSourceTypes","getSourceBufferTypes","BUFFER_RESET","onBufferReset","onBufferAppending","BUFFER_EOS","onBufferEos","onFragParsed","FRAG_CHANGED","onFragChanged","codecEvents","altAudio","_ms$constructor","objectUrl","MMS","addSource","endOfStream","resetBuffer","_this$mediaSource","removeBufferListeners","sourceBuffers","removeSourceBuffer","sourceBufferCount","trackNames","changeType","_trackCodec","currentCodecFull","currentCodec","trackCodec","nextCodec","appendChangeType","chunkStats","bufferAppendingStart","fragBuffering","partBuffering","checkTimestampOffset","fragStart","timestampOffset","appendExecutor","sourceBufferName","QUOTA_EXCEEDED_ERR","BUFFER_FULL_ERROR","appendErrorCount","flushOperation","removeExecutor","BUFFER_FLUSHED","buffersAppendedTo","blockBuffers","trimBuffers","ending","maxBackBufferLength","targetBackBufferPosition","flushBackBuffer","frontBufferLength","maxFrontBufferLength","targetFrontBufferPosition","flushFrontBuffer","BACK_BUFFER_REACHED","LIVE_BACK_BUFFER_REACHED","numBufferedRanges","levelDuration","mediaDuration","msDuration","updateSeekableRange","setLiveSeekableRange","pendingTracksCount","createSourceBuffers","BUFFER_CREATED","BUFFER_INCOMPATIBLE_CODECS_ERROR","_track$levelCodec","addSourceBuffer","sbName","addBufferListener","_onSBUpdateStart","_onSBUpdateEnd","_onSBUpdateError","removedRanges","_this$media","_this$media$querySele","_this$mediaSource2","_this$mediaSource3","BUFFER_APPENDING_ERROR","removeStart","removeEnd","appendBuffer","onUnblocked","blockingOperations","capLevelController","errorController","playlistError","penalizedRenditions","onErrorOut","getVariantLevelIndex","_data$frag","_data$level","KEY_LOAD_ERROR","getFragRetryOrSwitchAction","_data$context","_data$context$levelDe","getPlaylistRetryOrSwitchAction","getLevelSwitchAction","restrictedHdcpLevel","hdcpLevel","keySystemError","LEVEL_SWITCH_ERROR","BUFFER_SEEK_OVER_HOLE","BUFFER_NUDGE_ON_STALL","variantLevelIndex","fragmentErrors","_data$frag2","_data$context2","fragErrorType","findAudioCodecAlternate","findVideoCodecAlternate","playlistErrorType","playlistErrorGroupId","_level$audioGroups","_level$subtitleGroups","levelCandidate","fragCandidate","_data$errorAction","sendAlternateToPenaltyBox","recoverMediaError","switchLevel","maxHdcpLevel","fpsController","isVideoPlaybackQualityAvailable","lastTime","lastDroppedFrames","lastDecodedFrames","getVideoPlaybackQuality","checkFPSInterval","checkFPS","decodedFrames","droppedFrames","currentPeriod","currentDropped","currentDecoded","droppedFPS","FPS_DROP","totalDroppedFrames","currentLevel","videoPlaybackQuality","totalVideoFrames","droppedVideoFrames","webkitDecodedFrameCount","webkitDroppedFrameCount","abrEwmaDefaultEstimateMax","minAutoBitrate","testBandwidth","steeringManifestLoadPolicy","manifestLoadingTimeOut","manifestLoadingMaxRetry","manifestLoadingRetryDelay","manifestLoadingMaxRetryTimeout","levelLoadingTimeOut","levelLoadingMaxRetry","levelLoadingRetryDelay","levelLoadingMaxRetryTimeout","fragLoadingTimeOut","fragLoadingMaxRetry","fragLoadingRetryDelay","fragLoadingMaxRetryTimeout","cueHandler","enableWebVTT","enableIMSC1","enableCEA708Captions","captionsTextTrack1Label","captionsTextTrack1LanguageCode","captionsTextTrack2Label","captionsTextTrack2LanguageCode","captionsTextTrack3Label","captionsTextTrack3LanguageCode","captionsTextTrack4Label","captionsTextTrack4LanguageCode","renderTextTracksNatively","subtitleStreamController","currentTrackId","tracksBuffered","mainDetails","SUBTITLE_TRACKS_UPDATED","onSubtitleTracksUpdated","SUBTITLE_TRACK_SWITCH","onSubtitleTrackSwitch","onSubtitleTrackLoaded","SUBTITLE_FRAG_PROCESSED","onSubtitleFragProcessed","fragEnd","endOffsetSubtitles","mediaPlaylist","currentTrack","mediaBufferTimeRanges","_track$details","mainSlidingStartFragment","mainBufferInfo","trackDetails","foundFrag","lookupTolerance","mainBufferLength","maxConfigBuffer","subtitleTrackController","groupIds","tracksInGroup","selectDefaultTrack","queuedDefaultTrack","asyncPollTrackChange","pollTrackChange","useTextTrackPolling","subtitlePollingInterval","_subtitleDisplay","onTextTracksChanged","findTrackForTextTrack","setSubtitleTrack","subtitleDisplay","toggleTrackModes","trackInActiveGroup","currentGroups","subtitlePreference","groupIndex","allIndex","findTrackId","subtitleTracksUpdated","selectDefault","allSubtitleTracks","newId","setSubtitleOption","subtitleOption","nextTrack","lastTrack","trackLoaded","unparsedVttFrags","captionsTracks","nonNativeCaptionsTracks","cea608Parser1","cea608Parser2","lastCc","captionsProperties","textTrack1","textTrack2","textTrack3","textTrack4","FRAG_PARSING_USERDATA","onFragParsingUserdata","onFragDecrypted","INIT_PTS_FOUND","onInitPtsFound","SUBTITLE_TRACKS_CLEARED","onSubtitleTracksCleared","initCea608Parsers","channel1","channel2","channel3","channel4","merged","cueRange","overlap","CUES_PARSED","getExistingTrack","createNativeTrack","createNonNativeTrack","existingTrack","createTextTrack","closedCaptions","NON_NATIVE_TEXT_TRACKS_FOUND","_cleanTracks","hasIMSC1","inUseTracks","textTrackKind","unusedTextTracks","tracksList","captionsTrack","instreamIdMatch","closedCaptionsForLevel","_data$part$index","decrypted","trackPlaylistMedia","_parseIMSC1","_parseVTTs","_appendCues","maxAvCC","missingInitPTS","_fallbackToIMSC1","fragLevel","ccBytes","ccdatas","extractCea608Data","actualCCBytes","tmpByte","ccbyte1","ccbyte2","ccType","audioStreamController","videoBuffer","videoTrackCC","waitingVideoCC","bufferedTrack","switchingTrack","waitingData","flushing","bufferFlushed","cachedTrackLoadedData","AUDIO_TRACKS_UPDATED","onAudioTracksUpdated","AUDIO_TRACK_SWITCHING","onAudioTrackSwitching","onAudioTrackLoaded","onBufferCreated","onBufferFlushed","doTickIdle","_levels$trackId","seeking","clearWaitingFragment","atGap","atBufferSyncLimit","mainFrag","flushAudioIfNeeded","_handleTransmuxComplete","AUDIO_TRACK_SWITCHED","_id3$samples","completeAudioSwitch","mapFragment","_bufferInitSegment","FRAG_PARSING_INIT_SEGMENT","emittedID3","emittedText","variantAudioCodecs","_track$details2","bufferedAttributes","switchAttributes","audioTrackController","audioTracksUpdated","selectedTrackId","setAudioTrack","_this$groupIds","setAudioOption","audioOption","switchIndex","renditions","variantMap","currentVideoCodec","matchingVideo","findClosestLevelWithAudioGroup","withoutCodecAndChannelsMatch","emeController","cmcdController","sid","cid","useHeaders","includeKeys","starved","audioBuffer","onWaiting","onPlaying","applyPlaylistData","MANIFEST","applyFragmentData","getObjectType","VIDEO","MUXED","getTopBandwidth","getBufferLength","createPlaylistLoader","createFragmentLoader","randomUUID","contentId","_data$tracks$audio","_data$tracks$video","HLS","bandwidthEstimate","isVideo","TIMED_TEXT","contentSteeringController","pathwayPriority","timeToLoad","reloadTimer","penalizedPathways","loadSteeringManifest","levelToRemove","errorPathway","getPathwayForGroupId","pathways","updatePathwayPriority","filterParsedLevels","pathwayLevels","getLevelsForPathway","selectedLevel","levelAfterChange","defaultPathway","clonePathways","pathwayClones","audioGroupCloneMap","subtitleGroupCloneMap","pathwayClone","baseId","clonedVariants","baseLevel","clonedAudioGroupId","clonedSubtitleGroupId","clonedLevel","throughput","steeringData","TTL","reloadUri","loadedSteeringData","steeringManifest","STEERING_MANIFEST_LOADED","ttlMs","deepCpy","enableStreamingMode","currentLoader","ReadableStream","fetchSupported","chromeOrFirefox","LevelController","_levels","_firstLevel","_maxAutoLevel","_startLevel","currentLevelIndex","manualLevelIndex","steering","onParsedComplete","resetLevels","redundantSet","generatePathwaySet","resolutionFound","videoCodecFound","audioCodecFound","levelParsed","_audioCodec","_videoCodec","avcdata","convertAVC1ToAVCOTI","FRAMERATE","HDCP","PATHWAY","RESOLUTION","VIDEO_RANGE","pathwayCount","filterAndSortMediaOptions","filteredLevels","MANIFEST_INCOMPATIBLE_CODECS_ERROR","assignTrackIdsByGroup","unsortedLevels","valueA","valueB","firstLevelInPlaylist","_this$hls$userConfig","firstLevelBitrate","startingBwEstimate","audioOnly","edata","forceStartLoad","newLevel","lastLevelIndex","lastLevel","lastPathwayId","levelSwitchingData","manualLevel","configStartLevel","_data$deliveryDirecti2","_data$deliveryDirecti","_this$currentLevel","checkMaxAutoUpdated","KeyLoader","keyUriToKeyInfo","_loader$context","createKeyLoadError","loadingFrag","_keyInfo","_keyInfo2","_keyInfo$mediaKeySess","keyLoadPromise","loadKeyHTTP","loadKeyEME","getSourceBuffer","SourceBuffer","WebKitSourceBuffer","isMSESupported","GapController","nudgeRetry","stallReported","stalled","moved","activeFrag","seeked","beginSeek","_stalledDuration","hasEnoughBuffer","noBufferGap","startJump","maxStartGapJump","partialOrGap","_trySkipBufferHole","tnow","stalledDuration","_reportStall","bufferedWithHoles","_tryFixBufferStall","stalledDurationMs","_tryNudgeBuffer","bufferStarved","waiting","gapLength","startGap","startFrag","startProvisioned","moreToLoad","provisioned","targetTime","StreamController","audioCodecSwap","gapController","_forceStartLoad","fragPlaying","onvplaying","onvseeked","fragLastKbps","couldBacktrack","audioCodecSwitch","onFragLoadEmergencyAborted","onAudioTrackSwitched","checkBuffer","checkFragmentChanged","getMainFwdBufferInfo","lastDetails","_this$backtrackFragme","backtrackFrag","_loadBitrateTestFrag","followingBufferedFrag","immediateLevelSwitch","abortCurrentFrag","fetchdelay","fragPlayingCurrent","bufferedFrag","nextBufferedFrag","maxStart","startPts","onMediaPlaying","onMediaSeeked","aac","heaac","_sourceBuffer$prototy","changeTypeSupported","_curLevel$details","newLevelId","_getAudioCodec","fromAltAudio","mediaTrack","swapAudioCodec","isFirstFragment","isFirstInDiscontinuity","backtrack","audioMetadata","fragCurrentLevel","LEVEL_SWITCHED","currentFrag","currentProgramDateTime","epocMs","Hls","codecsForVideoContainer","codecForAudioContainer","DefaultConfig","defaultConfig","coreComponents","networkControllers","_emitter","_autoLevelCapping","_maxHdcpLevel","latencyController","levelController","_media","triggeringException","enableLogs","defaultsCopy","deprecatedSettings","policyName","policyNotSet","report","deprecatedSetting","mergeConfig","ConfigAbrController","ConfigBufferController","ConfigCapLevelController","ConfigErrorController","ConfigFpsController","playListLoader","id3TrackController","ConfigContentSteeringController","createController","AudioStreamControllerClass","SubtitleStreamControllerClass","ControllerClass","controllerInstance","eventObject","DESTROYING","detachMedia","attachMedia","loadSource","loadedSource","loadingSource","shouldStartCapping","newCapLevelToPlayerSize","isHdcpLevel","playingDate","_this$audioTrackContr","_this$subtitleTrackCo","audioTrackId","subtitleTrackId","urlAttributes","consoleLogger","concreteLogger","forward","_len2","_key2","_len3","_key3","deprecate","_len4","_key4","lvl","debugOnly","moduleName","baseLogger","rej","makeString","getLastOfPath","Empty","cleanKey","canNotTraverseDeeper","regexEscape","_entityMap","deepFind","keySeparator","mix","joinedPath","getCleanedCode","ResourceStore","defaultNS","ignoreJSONStructure","addNamespaces","removeNamespaces","getResource","lng","addResource","addResources","addResourceBundle","removeResourceBundle","hasResourceBundle","getResourceBundle","compatibilityAPI","getDataByLanguage","hasLanguageSomeTranslations","postProcessor","processors","addPostProcessor","translator","processor","checkedLoadedFor","Translator","changeLanguage","interpolation","extractFromKey","nsSeparator","namespaces","wouldCheckForNsInKey","seemsNaturalLanguage","userDefinedKeySeparator","userDefinedNsSeparator","possibleChars","looksLikeObjectPath","nestingRegexp","lastKey","overloadTranslationOptionHandler","returnDetails","appendNamespaceToCIMode","usedKey","exactUsedKey","usedLng","usedNS","usedParams","getUsedParamsDetails","resUsedKey","resExactUsedKey","resType","joinArrays","handleAsObjectInI18nFormat","i18nFormat","handleAsObject","returnObjects","returnedObjectHandler","resTypeIsArray","newKeyToUse","deepKey","extendTranslation","usedDefault","needsPluralHandling","hasDefaultValue","defaultValueSuffix","pluralResolver","getSuffix","defaultValueSuffixOrdinalFallback","ordinal","isValidLookup","resForMissing","missingKeyNoValueFallbackToKey","updateMissing","lngs","fallbackLngs","languageUtils","getFallbackCodes","fallbackLng","saveMissingTo","toResolveHierarchy","specificDefaultValue","defaultForMissing","missingKeyHandler","backendConnector","saveMissing","saveMissingPlurals","getSuffixes","suffix","appendNamespaceToMissingKey","parseMissingKeyHandler","defaultVariables","skipInterpolation","skipOnVariables","nestBef","nest","postProcess","postProcessorNames","applyPostProcessor","postProcessPassResolved","i18nResolved","extracted","fallbackNS","needsZeroSuffixLookup","shouldUseIntlApi","needsContextHandling","codes","hasLoadedNamespace","finalKeys","addLookupKeys","pluralSuffix","zeroSuffix","pluralSeparator","ordinalPrefix","contextKey","contextSeparator","possibleKey","returnNull","returnEmptyString","resourceStore","optionsKeys","useOptionsReplaceForData","LanguageUtil","supportedLngs","getScriptPartFromCode","formatLanguageCode","getLanguagePartFromCode","specialCases","lowerCaseLng","cleanCode","isSupportedCode","nonExplicitSupportedLngs","getBestMatchFromCodes","cleanedLng","lngOnly","supportedLng","fallbacks","fallbackCode","fallbackCodes","addCode","sets","_rulesPluralsTypes","nonIntlVersions","intlVersions","suffixesOrder","two","few","many","PluralResolver","compatibilityJSON","PluralRules","numbers","plurals","createRules","addRule","getRule","needsPlural","rule","pluralCategories","getPluralFormsOfKey","pluralCategory1","pluralCategory2","pluralCategory","select","getSuffixRetroCompatible","noAbs","simplifyPluralSuffix","returnSuffix","deepFindWithDefaults","defaultData","getPathWithDefaults","Interpolator","escapeValue","iOpts","useRawValueToEscape","prefixEscaped","suffixEscaped","formatSeparator","unescapePrefix","unescapeSuffix","nestingPrefix","nestingPrefixEscaped","nestingSuffix","nestingSuffixEscaped","nestingOptionsSeparator","maxReplaces","alwaysFormat","resetRegExp","regexpStr","regexpUnescapeStr","regexpUnescape","nestingRegexpStr","replaces","regexSafe","handleFormat","interpolationkey","missingInterpolationHandler","safeValue","todo","matchedVar","clonedOptions","handleHasOptions","inheritedOptions","sep","matchedSingleQuotes","matchedDoubleQuotes","doReduce","createCachedFormatter","Formatter","NumberFormat","relativetime","ListFormat","addCached","mem","formatName","optStr","parseFormatStr","valOptions","formatParams","Connector","backend","waitingReads","maxParallelReads","readingCalls","maxRetries","queueLoad","toLoad","toLoadLanguages","toLoadNamespaces","hasAllNamespaces","pendingCount","pushPath","removePending","loadedKeys","fcName","tried","prepareLoading","loadOne","fallbackValue","isUpdate","clb","initImmediate","partialBundledLanguages","tDescription","transformOptions","I18n","external","defOpts","createClassOnDemand","ClassOrObject","languageDetector","detection","finish","initializedStoreOnce","loadResources","usedCallback","resolvedLanguage","setResolvedLanguage","reloadResources","use","lngInLngs","isLanguageChangingTo","setLngProps","setLng","cacheUserLanguage","getFixedT","keyPrefix","fixedT","resultKey","setDefaultNamespace","lastLng","loadNotPending","loadState","precheck","preResult","loadNamespaces","loadLanguages","preloaded","newLngs","createInstance","cloneInstance","forkResourceStore","mergedOptions","instanceOfAny","constructors","idbProxyableTypes","cursorAdvanceMethods","cursorRequestMap","transactionDoneMap","transactionStoreNamesMap","transformCache","reverseTransformCache","idbProxyTraps","IDBTransaction","wrapFunction","IDBDatabase","IDBCursor","advance","continue","continuePrimaryKey","storeNames","transformCachableValue","cacheDonePromiseForTransaction","IDBObjectStore","IDBIndex","IDBRequest","promisifyRequest","openDB","blocked","blocking","terminated","openPromise","deleteDB","readMethods","writeMethods","cachedMethods","getMethod","targetFuncName","useIndex","isWrite","storeName","oldTraps","unencoded","encodeBase64","encoded","decodeBase64","JOSEError","claim","JOSENotSupported","JWSInvalid","JWTInvalid","isCryptoKey","CryptoKey","unusable","isAlgorithm","getHashLength","checkUsage","usages","checkSigCryptoKey","getNamedCurve","namedCurve","actual","withAlg","isJWK","kty","jwk","keyUsages","crv","subtleMapping","key_ops","exportKeyValue","privCache","pubCache","isKeyObject","importAndCache","cryptoKey","export","dp","dq","usage","modulusLength","saltLength","parameter","jwkMatchesOp","symmetricTypeCheck","allowJwk","checkKeyType","asymmetricTypeCheck","checkKeyTypeWithJwk","Err","recognizedDefault","recognizedOption","protectedHeader","joseHeader","crit","recognized","FlattenedSign","setProtectedHeader","_protectedHeader","setUnprotectedHeader","unprotectedHeader","_unprotectedHeader","jws","protected","CompactSign","_flattened","numericDate","validateInput","ProduceJWT","setIssuer","issuer","setSubject","subject","setAudience","audience","setJti","jwtId","jti","setNotBefore","nbf","epoch","setExpirationTime","setIssuedAt","SignJWT","fromMarkdown","encoding","transforms","canContainEols","enter","autolink","opener","autolinkProtocol","onenterdata","autolinkEmail","atxHeading","blockQuote","characterEscape","codeFenced","codeFlow","codeFencedFenceInfo","codeFencedFenceMeta","codeIndented","codeText","codeTextData","codeFlowValue","definitionDestinationString","definitionLabelString","definitionTitleString","emphasis","hardBreakEscape","hardBreak","hardBreakTrailing","htmlFlow","htmlFlowData","htmlText","htmlTextData","listItem","listItemValue","onenterlistitemvalue","listOrdered","onenterlistordered","listUnordered","paragraph","onenterreference","referenceString","resourceDestinationString","resourceTitleString","setextHeading","strong","thematicBreak","exit","closer","atxHeadingSequence","onexitatxheadingsequence","onexitautolinkemail","onexitautolinkprotocol","characterEscapeValue","onexitdata","characterReferenceMarkerHexadecimal","onexitcharacterreferencemarker","characterReferenceMarkerNumeric","characterReferenceValue","onexitcharacterreferencevalue","onexitcharacterreference","onexitcodefenced","codeFencedFence","onexitcodefencedfence","onexitcodefencedfenceinfo","onexitcodefencedfencemeta","onexitcodeindented","onexitcodetext","onexitdefinitiondestinationstring","onexitdefinitionlabelstring","onexitdefinitiontitlestring","onexithardbreak","onexithtmlflow","onexithtmltext","onexitimage","onexitlabel","labelText","onexitlabeltext","lineEnding","onexitlineending","onexitlink","onexitreferencestring","onexitresourcedestinationstring","onexitresourcetitlestring","onexitresource","onexitsetextheading","setextHeadingLineSequence","onexitsetextheadinglinesequence","setextHeadingText","onexitsetextheadingtext","mdastExtensions","compile","tokenStack","listStack","prepareList","sliceSerialize","defaultOnError","lineIndex","firstBlankLineIndex","atMarker","containerBalance","listSpread","tailIndex","tailEvent","_spread","and","onExitError","expectingFirstListItemValue","flowCodeInside","setextHeadingSlurpLineEnding","codePointAt","atHardBreak","inReference","referenceType","ancestor","characterReferenceType","ordered","compiler","combined","extension","defaultFootnoteBackContent","rereferenceIndex","defaultFootnoteBackLabel","footer","clobberPrefix","footnoteBackContent","footnoteBackLabel","footnoteLabel","footnoteLabelTagName","footnoteLabelProperties","listItems","footnoteOrder","footnoteById","safeId","backReferences","counts","footnoteCounts","dataFootnoteBackref","tailTail","dataFootnotes","listItemLoose","blockquote","applyData","break","footnoteReference","counter","reuseCounter","dataFootnoteRef","ariaDescribedBy","sup","allowDangerousHtml","imageReference","definitionById","inlineCode","linkReference","listLoose","table","firstRow","tableContent","tableCell","tableRow","toml","yaml","footnoteDefinition","toHast","foot","subtype","contents","createState","trimMarkdownSpaceStart","passThrough","shallow","unknownHandler","defaultUnknownHandler","hName","hChildren","hProperties","deserialize","serialized","unpair","BigInt","deserializer","EMPTY","asString","shouldSkip","serialize","lossy","strict","serializer","structuredClone","VOID","PRIMITIVE","ARRAY","DATE","REGEXP","MAP","SET","BIGINT","includeImageAlt","includeHtml","blankLine","tokenize","nok","factorySpace","consume","asciiAlpha","regexCheck","asciiAlphanumeric","asciiAtext","asciiControl","asciiDigit","asciiHexDigit","asciiPunctuation","markdownLineEnding","markdownLineEndingOrSpace","markdownSpace","unicodePunctuation","unicodeWhitespace","chunkStart","combineExtensions","syntaxExtension","hook","constructs","decodeNumericCharacterReference","fromCodePoint","characterEscapeOrReference","$2","normalizeIdentifier","resolveAll","normalizeUri","subtokenize","eventsArray","jumps","otherEvent","subevents","_tokenizer","_isInFirstContentOfListItem","subcontent","eventIndex","startPositions","tokenizer","childEvents","gaps","adjust","breaks","sliceStream","defineSkip","_gfmTasklistFirstContentOfListItem","SpliceBuffer","deleteCount","chunkedPush","pushMany","unshiftMany","marker","atBreak","sequence","continuation","containerState","_closeFlow","furtherBlankLines","initialBlankLine","notInCurrentItem","indentConstruct","null","initialSize","inside","onBlank","listItemPrefixWhitespaceConstruct","endOfPrefix","otherPrefix","contBefore","factoryDestination","literalType","literalMarkerType","rawType","stringType","balance","enclosedBefore","enclosed","enclosedEscape","rawEscape","factoryLabel","markerType","labelInside","labelEscape","factoryTitle","factoryWhitespace","labelAfter","markerAfter","destinationBefore","destinationAfter","titleBefore","afterWhitespace","defined","beforeMarker","titleAfter","titleAfterOptionalWhitespace","afterPrefix","furtherStart","headingAtx","contentEnd","contentStart","sequenceOpen","sequenceFurther","setextUnderline","htmlBlockNames","htmlRawNames","concrete","closingTag","markerB","declarationOpen","tagCloseStart","continuationDeclarationInside","commentOpenInside","cdataOpenInside","slash","basicSelfClosing","completeClosingTagAfter","completeAttributeNameBefore","completeEnd","completeAttributeName","completeAttributeNameAfter","completeAttributeValueBefore","completeAttributeValueQuoted","completeAttributeValueUnquoted","completeAttributeValueQuotedAfter","completeAfter","continuationCommentInside","continuationRawTagOpen","continuationClose","continuationCdataInside","continuationStart","blankLineBefore","continuationAfter","nonLazyContinuationStart","continuationStartNonLazy","continuationBefore","continuationRawEndTag","nonLazyContinuation","lineStart","closeStart","startBefore","beforeSequenceClose","sequenceClose","sizeOpen","sequenceCloseAfter","initialPrefix","beforeSequenceOpen","infoBefore","atNonLazyBreak","metaBefore","contentBefore","beforeContentChunk","contentChunk","labelEnd","newEvents","_inactive","_balanced","insideSpan","labelStart","labelEndNok","resourceConstruct","labelEndOk","referenceFullConstruct","referenceNotFull","referenceCollapsedConstruct","resourceBefore","resourceOpen","resourceEnd","resourceDestinationAfter","resourceDestinationMissing","resourceBetween","resourceTitleAfter","referenceFullAfter","referenceFullMissing","referenceCollapsedOpen","labelStartImage","classifyCharacter","attention","openingSequence","closingSequence","nextEvents","_close","movePoint","attentionMarkers","_bufferIndex","schemeOrEmailAtext","emailAtext","schemeInsideOrEmailAtext","urlInside","emailAtSignOrDot","emailLabel","emailValue","returnState","tagOpen","commentEnd","commentClose","lineEndingBefore","cdata","cdataClose","cdataEnd","instructionClose","tagClose","tagCloseBetween","tagOpenBetween","tagOpenAttributeName","tagOpenAttributeNameAfter","tagOpenAttributeValueBefore","tagOpenAttributeValueQuoted","tagOpenAttributeValueUnquoted","tagOpenAttributeValueQuotedAfter","lineEndingAfter","lineEndingAfterPrefix","labelStartLink","tailExitIndex","headEnterIndex","between","contentInitial","flowInitial","createTokenizer","columnStart","resolveAllConstructs","consumed","constructFactory","addResult","onsuccessfulcheck","accountForPotentialSkip","expandTabs","atTab","serializeChunks","main","expectedCode","startBufferIndex","endBufferIndex","sliceChunks","chunkIndex","onreturn","bogusState","listOfConstructs","constructIndex","currentConstruct","handleListOfConstructs","handleMapOfConstructs","handleConstruct","startPoint","startPrevious","startCurrentConstruct","startEventsIndex","startStack","childFlow","childToken","lineStartOffset","continued","documentContinue","checkNewContainers","closeFlow","indexBeforeExits","indexBeforeFlow","exitContainers","documentContinued","flowStart","_gfmTableDynamicInterruptHack","containerConstruct","thereIsANewContainer","thereIsNoNewContainer","containerContinue","flowContinue","writeToChild","endOfFile","chunkInside","continuationConstruct","contentContinue","afterConstruct","createResolver","initializeFactory","resolveAllLineSuffixes","notText","extraResolver","tabs","bufferIndex","postprocess","preprocess","atCarriageReturn","endPosition","definitions","normal","xlink","xLinkActuate","xLinkArcRole","xLinkHref","xLinkRole","xLinkShow","xLinkTitle","xLinkType","xml","caseInsensitiveTransform","xmlnsxlink","xmlnsXLink","aria","ariaActiveDescendant","ariaAtomic","booleanish","ariaAutoComplete","ariaBusy","ariaChecked","ariaColCount","ariaColIndex","ariaColSpan","ariaControls","spaceSeparated","ariaCurrent","ariaDetails","ariaDisabled","ariaDropEffect","ariaErrorMessage","ariaExpanded","ariaFlowTo","ariaGrabbed","ariaHasPopup","ariaHidden","ariaInvalid","ariaKeyShortcuts","ariaLabelledBy","ariaLevel","ariaLive","ariaModal","ariaMultiLine","ariaMultiSelectable","ariaOrientation","ariaOwns","ariaPlaceholder","ariaPosInSet","ariaPressed","ariaReadOnly","ariaRelevant","ariaRequired","ariaRoleDescription","ariaRowCount","ariaRowIndex","ariaRowSpan","ariaSelected","ariaSetSize","ariaSort","ariaValueMax","ariaValueMin","ariaValueNow","ariaValueText","acceptcharset","classname","htmlfor","httpequiv","abbr","allow","boolean","allowPaymentRequest","allowUserMedia","decoding","dirName","overloadedBoolean","fetchPriority","imageSizes","imageSrcSet","inert","onAfterPrint","onAuxClick","onBeforeMatch","onBeforePrint","onBeforeToggle","onBeforeUnload","onBlur","onCanPlay","onCanPlayThrough","onContextLost","onContextMenu","onContextRestored","onCopy","onCueChange","onCut","onDblClick","onDragEnd","onDragEnter","onDragExit","onDragLeave","onDragOver","onDrop","onDurationChange","onEmptied","onEnded","onFocus","onFormData","onHashChange","onInput","onInvalid","onKeyPress","onKeyUp","onLanguageChange","onLoadedData","onLoadEnd","onLoadStart","onMessageError","onMouseEnter","onMouseLeave","onMouseOut","onMouseOver","onOffline","onOnline","onPageHide","onPageShow","onPaste","onPause","onPlay","onPopState","onRateChange","onRejectionHandled","onReset","onResize","onScrollEnd","onSecurityPolicyViolation","onSeeked","onSeeking","onSelect","onSlotChange","onStalled","onStorage","onSubmit","onSuspend","onTimeUpdate","onToggle","onUnhandledRejection","onUnload","onVolumeChange","popover","popoverTarget","popoverTargetAction","shadowRootClonable","shadowRootDelegatesFocus","shadowRootMode","slot","typeMustMatch","writingSuggestions","aLink","archive","borderColor","bottomMargin","charOff","classId","codeBase","codeType","declare","face","hSpace","leftMargin","longDesc","lowSrc","noResize","noHref","noShade","noWrap","prompt","rev","rightMargin","standby","topMargin","valueType","vAlign","vLink","vSpace","allowTransparency","svg","dataType","horizOriginY","navDown","navDownLeft","navDownRight","navLeft","navNext","navPrev","navRight","navUp","navUpLeft","navUpRight","onActivate","onBegin","onEnd","onFocusIn","onFocusOut","onMouseWheel","onRepeat","onShow","onZoom","strokeDashArray","strokeDashOffset","strokeLineCap","strokeLineJoin","strokeMiterLimit","transformOrigin","playbackOrder","timelineBegin","commaOrSpaceSeparated","defaultAction","editable","focusHighlight","fr","hatchContentUnits","hatchUnits","initialVisibility","mediaCharacterEncoding","mediaContentEncodings","mediaTime","overlay","phase","pitch","propagate","requiredFonts","requiredFormats","side","snapshotTime","syncBehavior","syncBehaviorDefault","syncMaster","syncTolerance","syncToleranceDefault","transformBehavior","dash","camelcase","dashes","kebab","hastToReact","caseSensitiveTransform","checks","DefinedInfo","mark","Info","Schema","powers","singleMatcher","multiMatcher","decodeComponents","decodeUriComponent","encodedURI","replaceMap","customDecodeURIComponent","splitOnFirst","isNullOrUndefined","strictUriEncode","encodeFragmentIdentifier","validateArrayFormatSeparator","keysSorter","removeHash","hashStart","parseNumbers","parseBooleans","extract","arrayFormat","arrayFormatSeparator","isEncodedArray","arrayValue","parserForArrayFormat","parameter_","key2","shouldFilter","skipNull","skipEmptyString","keyValueSep","encoderForArrayFormat","objectCopy","parseUrl","url_","parseFragmentIdentifier","fragmentIdentifier","stringifyUrl","getHash","urlObjectForFragmentEncode","exclude","i18nInstance","setI18n","getI18n","voidElement","alreadyWarned","warnOnce","loadedClb","i18n","matchHtmlEntity","htmlEntities","unescapeHtmlEntity","bindI18n","bindI18nStore","transEmptyNodeValue","transSupportBasicHtmlNodes","transWrapTextNodes","transKeepBasicHtmlNodesFor","useSuspense","checkLength","i18nIsDynamicList","getAsArray","nodesToString","i18nOptions","stringNode","childrenArray","keepArray","childIndex","childPropsCount","shouldKeepChild","childChildren","renderNodes","targetString","combinedTOpts","shouldUnescape","emptyChildrenButNeedsHandling","keep","ast","renderInner","rootReactNode","mappedChildren","mapAST","hasValidReactChildren","pushTranslatedJSX","isVoid","dummy","reactNode","astNode","reactNodes","translationContent","newTarget","isValidTranslationWithChildren","isEmptyTransWithHTML","isKnownComponent","wrapTextNodes","Trans","i18nKey","tOptions","i18nFromProps","tFromProps","additionalProps","reactI18nextOptions","react","nodeAsString","hashTransKey","interpolationOverride","translation","useAsParent","defaultTransParent","initReactI18next","I18nContext","ReportNamespaces","usedNamespaces","addUsedNamespaces","getUsedNamespaces","composeInitialProps","ForComponent","i18nInitialProps","getInitialProps","componentsInitialProps","reportNamespaces","initialI18nStore","initialLanguage","i18nFromContext","defaultNSFromContext","usePrevious","useTranslation","notReadyT","optsOrDefaultValue","retNotReady","oldI18nextHasLoadedNamespace","getT","nsMode","setT","joinedNS","previousJoinedNS","boundReset","isInitial","withTranslation","I18nextWithTranslation","forwardedRef","passDownProps","tReady","withRef","Translation","I18nextProvider","useSSR","lngResources","initializedLanguageOnce","withSSR","I18nextWithSSR","plural","selectOrdinal","Skeleton","changelog","emptyPlugins","emptyRemarkRehypeOptions","safeProtocol","deprecations","Markdown","allowedElements","allowElement","disallowedElements","rehypePlugins","remarkPlugins","remarkRehypeOptions","skipHtml","unwrapDisallowed","urlTransform","defaultUrlTransform","deprecation","mdastTree","hastTree","runSync","colon","questionMark","numberSign","remarkParse","remarkRehype","tab","trimLines","trimLine","bail","trough","pipeline","middlewareIndex","fnExpectsCallback","middelware","CallableInstance","Processor","Compiler","attachers","freezeIndex","frozen","transformers","attacher","assertUnfrozen","realFile","vfile","assertParser","assertCompiler","parseTree","realDone","compileTree","compileResult","isUint8Array","processSync","assertDone","assertNode","outputTree","resultingTree","addPlugin","addList","addPreset","entryIndex","primary","currentPrimary","unified","asyncName","looksLikeAVFile","castFactory","tests","anyFactory","checkAsRecord","nodeAsRecord","propsFactory","typeFactory","testFunction","looksLikeANode","pointEnd","pointStart","stringifyPosition","CONTINUE","EXIT","SKIP","visitParents","visitor","parents","subresult","grandparents","toResult","nodeAsParent","testOrVisitor","visitorOrReverse","maybeReverse","VFileMessage","causeOrReason","optionsOrParentOrPlace","legacyCause","note","VFile","cwd","stored","assertNonEmpty","assertPart","dirname","assertPath","extname","stem","fail","minpath","seenNonSlash","firstNonSlashEnd","extnameIndex","unmatchedSlash","startPart","startDot","preDotState","joined","absolute","allowAboveRoot","lastSlashIndex","lastSegmentLength","lastSlash","dots","normalizeString","minproc","urlToPath","third","getPathFromURLPosix","isUrl","fileUrlOrPath"],"sourceRoot":""}