{"version":3,"sources":["webpack:///webpack/bootstrap a1ddb444f56bddb70bf1","webpack:///external \"jQuery\"","webpack:///./scripts/main.js","webpack:////home/runner/work/fof-wp/fof-wp/public_html/web/app/themes/fof/node_modules/flickity/dist/flickity.pkgd.js","webpack:///./scripts/util/Router.js","webpack:///./scripts/util/camelCase.js","webpack:///./scripts/routes/common.js","webpack:///./scripts/components/ownads.js","webpack:///./scripts/components/toaster.js","webpack:///./scripts/components/globals.js","webpack:///./scripts/components/copy-text.js","webpack:///./scripts/components/takeover-ad.js","webpack:///./scripts/components/header.js","webpack:///./scripts/components/lightbox.js","webpack:///./scripts/components/sticky.js","webpack:///./scripts/components/dropdown.js","webpack:///./scripts/components/hero.js","webpack:///./scripts/components/carousel.js","webpack:///./scripts/components/tracking.js","webpack:///./scripts/components/external-ads.js","webpack:///./scripts/components/paywall.js","webpack:///./scripts/components/splx-pagination.js","webpack:///./scripts/routes/home.js","webpack:///./scripts/routes/about.js","webpack:///./scripts/routes/pager.js","webpack:///./styles/main.scss?93be"],"names":["const","this","let","scale"],"mappings":";QAAA;QACA;;QAEA;QACA;;QAEA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;;QAEA;QACA;;QAEA;QACA;;QAEA;QACA;QACA;;;QAGA;QACA;;QAEA;QACA;;QAEA;QACA;QACA;QACA;QACA;QACA;QACA;QACA,KAAK;QACL;QACA;;QAEA;QACA;QACA;QACA,2BAA2B,0BAA0B,EAAE;QACvD,iCAAiC,eAAe;QAChD;QACA;QACA;;QAEA;QACA,sDAAsD,+DAA+D;;QAErH;QACA;;QAEA;QACA;;;;;;;AC7DA,wB;;;;;;;;;;;;;;;ACAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACgB;AAC2C;;;AAGxB;AACE;AACJ;AACI;AACC;;;AAGtCA,GAAK,CAAC,MAAM,GAAG,IAAI,6DAAM,CAAC;;EAExB,uEAAM;;EAEN,mEAAI;;EAEJ,uEAAO;;EAEP,wEAAQ;CACT,CAAC,CAAC;;;AAGH,MAAM,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,YAAM,eAAM,CAAC,UAAU,EAAE,IAAC,CAAC;;;;;;;;ACxBlD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,OAAO,IAAyC;AAChD;AACA,IAAI,iCAAwC,EAAE,sBAAQ,EAAE,mCAAE;AAC1D;AACA,KAAK;AAAA,oGAAC;AACN,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC;AACD;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA,4DAA4D;AAC5D;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,gDAAgD,IAAI;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,gDAAgD,UAAU;AAC1D;AACA;AACA;AACA;AACA,wBAAwB,UAAU;AAClC;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA,CAAC;;AAED;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,OAAO,IAAyC;AAChD;AACA,IAAI,uCAAgC,OAAO,6jBAAE;AAC7C,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA,CAAC;;;;AAID;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,gBAAgB,sBAAsB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA,CAAC;;AAED;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,OAAO,IAAyC;AAChD;AACA,IAAI,uCAA4B,OAAO,yjBAAE;AACzC,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA,CAAC;AACD;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,wBAAwB;AACxC;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA,gBAAgB,wBAAwB;AACxC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA,CAAC;;AAED;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,OAAO,IAAyC;AAChD;AACA,IAAI,uCAAqD,OAAO,klBAAE;AAClE,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA,CAAC;AACD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,kBAAkB,qBAAqB;AACvC;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;;AAEA,CAAC;;AAED;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA,OAAO,IAAyC;AAChD;AACA,IAAI,iCAA+B;AACnC,MAAM,0BAA4C;AAClD,KAAK,iCAAE;AACP;AACA,KAAK,gDAAC;AACN,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC;;;;AAID;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,uBAAuB;AACzC;AACA;AACA,GAAG;;AAEH;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL,GAAG;AACH;;AAEA;;AAEA;;AAEA,CAAC;;AAED;AACA;AACA;AACA,OAAO,IAAyC;AAChD;AACA,IAAI,iCAA2B;AAC/B,MAAM,0BAAmB;AACzB,KAAK,iCAAE;AACP;AACA,KAAK,gDAAE;AACP,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC;;;;AAID;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,WAAW,QAAQ;AACnB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA,CAAC;;AAED;AACA;AACA;AACA,OAAO,IAAyC;AAChD;AACA,IAAI,uCAA4B,OAAO,yjBAAE;AACzC,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA,CAAC;AACD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA,GAAG;AACH;;AAEA;;AAEA,CAAC;;AAED;AACA;AACA;AACA,OAAO,IAAyC;AAChD;AACA,IAAI,iCAA8B;AAClC,MAAM,0BAAsB;AAC5B,KAAK,iCAAE;AACP;AACA,KAAK,gDAAE;AACP,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC;;;;AAID;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,kBAAkB,kBAAkB;AACpC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,kBAAkB,kBAAkB;AACpC;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA,CAAC;;AAED;AACA;AACA;AACA;AACA,OAAO,IAAyC;AAChD;AACA,IAAI,iCAA+B;AACnC,MAAM,0BAAuB;AAC7B,MAAM,0BAAmB;AACzB,MAAM,0BAAsB;AAC5B,MAAM,0BAAQ;AACd,MAAM,0BAAS;AACf,MAAM,0BAAW;AACjB,KAAK,iCAAE;AACP;AACA,KAAK,gDAAE;AACP,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC;AACD;;AAEA;;;AAGA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,iCAAiC;AACjC;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,iCAAiC;AACjC,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAG;;AAEH;AACA;AACA,GAAG;AACH;AACA;;AAEA;;AAEA;AACA;AACA,WAAW,OAAO;AAClB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,+BAA+B;AAC1C,aAAa,MAAM;AACnB;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;;AAEH;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,QAAQ;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,SAAS;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,MAAM;AACjB;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;;AAEA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,MAAM;AACjB,WAAW,MAAM;AACjB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,kBAAkB;AAC7B,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,kBAAkB,wBAAwB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,WAAW,QAAQ;AACnB,aAAa,cAAc;AAC3B;AACA;AACA;AACA,kBAAkB,uBAAuB;AACzC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,2BAA2B;AACtC,aAAa,MAAM;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA,aAAa,MAAM;AACnB;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA,WAAW,QAAQ;AACnB,aAAa,aAAa;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,aAAa,MAAM;AACnB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,iCAAiC,uBAAuB;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,0BAA0B;AACrC,aAAa,cAAc;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,yBAAyB;AACzB;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,sBAAsB,sBAAsB;AAC5C;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA,WAAW,kBAAkB;AAC7B,aAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA,CAAC;;AAED;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,OAAO,IAAyC;AAChD;AACA,IAAI,iCAAgC;AACpC,MAAM,0BAAuB;AAC7B,KAAK,iCAAE;AACP;AACA,KAAK,gDAAC;AACN,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC;;;;AAID;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,WAAW,QAAQ;AACnB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,gBAAgB,oBAAoB;AACpC;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,eAAe;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,eAAe;AAC1B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;;AAGA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,eAAe;AAC1B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,eAAe;AAC1B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA,CAAC;;AAED;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA,OAAO,IAAyC;AAChD;AACA,IAAI,iCAAgC;AACpC,MAAM,0BAAuB;AAC7B,KAAK,kCAAE;AACP;AACA,KAAK,gDAAC;AACN,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC;;;;AAID;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,WAAW,QAAQ;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,yBAAyB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,eAAe;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,eAAe;AAC1B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,eAAe;AAC1B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA,CAAC;;AAED;AACA;AACA;AACA,OAAO,IAAyC;AAChD;AACA,IAAI,iCAA2B;AAC/B,MAAM,0BAAY;AAClB,MAAM,2BAAuB;AAC7B,MAAM,0BAAsB;AAC5B,KAAK,kCAAE;AACP;AACA,KAAK,gDAAE;AACP,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC;;;;AAID;;AAEA;AACA;AACA;AACA,CAAC;;AAED;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,QAAQ;AACnB,aAAa,OAAO,IAAI,YAAY,OAAO,UAAU,QAAQ;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,QAAQ;AACnB,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA,CAAC;;AAED;AACA;AACA;AACA,OAAO,IAAyC;AAChD;AACA,IAAI,iCAAuC;AAC3C,MAAM,0BAAY;AAClB,MAAM,0BAAuB;AAC7B,MAAM,0BAAsB;AAC5B,KAAK,kCAAE;AACP;AACA,KAAK,gDAAE;AACP,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC;AACD;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH,CAAC;;AAED;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA,CAAC;;AAED;AACA;AACA;AACA,OAAO,IAAyC;AAChD;AACA,IAAI,iCAAgC;AACpC,MAAM,0BAAY;AAClB,MAAM,0BAAuB;AAC7B,MAAM,0BAAsB;AAC5B,KAAK,kCAAE;AACP;AACA,KAAK,gDAAE;AACP,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC;;AAED;;;;AAIA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,uBAAuB,SAAS;AAChC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA,CAAC;;AAED;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA,CAAC;;AAED;AACA;AACA;AACA,OAAO,IAAyC;AAChD;AACA,IAAI,iCAA6B;AACjC,MAAM,0BAAuB;AAC7B,MAAM,0BAAsB;AAC5B,MAAM,0BAAY;AAClB,KAAK,kCAAE;AACP;AACA,KAAK,gDAAE;AACP,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC;;;;AAID;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,CAAC;;AAED;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA,CAAC;;AAED;AACA;AACA;AACA,OAAO,IAAyC;AAChD;AACA,IAAI,iCAAsC;AAC1C,MAAM,0BAAY;AAClB,MAAM,0BAAsB;AAC5B,KAAK,kCAAE;AACP;AACA,KAAK,gDAAE;AACP,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC;;;;AAID;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA,WAAW,2BAA2B;AACtC,WAAW,QAAQ;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,WAAW,2BAA2B;AACtC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;;AAEA;AACA;AACA,WAAW,QAAQ;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA,CAAC;;AAED;AACA;AACA;AACA,OAAO,IAAyC;AAChD;AACA,IAAI,iCAA+B;AACnC,MAAM,0BAAY;AAClB,MAAM,0BAAsB;AAC5B,KAAK,kCAAE;AACP;AACA,KAAK,gDAAE;AACP,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC;AACD;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,SAAS;AACpB;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,OAAO,IAAyC;AAChD;AACA,IAAI,iCAA4B;AAChC,MAAM,0BAAY;AAClB,MAAM,2BAAQ;AACd,MAAM,2BAAoB;AAC1B,MAAM,2BAAa;AACnB,MAAM,2BAAU;AAChB,MAAM,2BAAmB;AACzB,MAAM,2BAAY;AAClB,KAAK,oCAAE,OAAO;AAAA;AAAA,oHAAE;AAChB,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC;AACD;AACA,CAAC;;AAED;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,OAAO,IAAyC;AAChD;AACA,IAAI,iCAAyC;AAC7C,MAAM,2BAAmB;AACzB,MAAM,0BAAsB;AAC5B,KAAK,oCAAE,OAAO;AAAA;AAAA;AAAA,oGAAE;AAChB,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC;;;;AAID;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA,CAAC;;AAED;AACA;AACA;AACA;AACA;;AAEA,+BAA+B;AAC/B;;AAEA;;AAEA,OAAO,IAAyC;AAChD;AACA,IAAI,iCAAoC;AACxC,MAAM,0BAAuB;AAC7B,KAAK,kCAAE;AACP;AACA,KAAK,gDAAC;AACN,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC;;AAED;;AAEA;;;;AAIA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA,WAAW,iCAAiC;AAC5C,WAAW,mBAAmB;AAC9B,WAAW,SAAS;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,2BAA2B;AAC3B;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,WAAW,KAAK;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,sBAAsB;AACtC;AACA;AACA;;AAEA;AACA;AACA;AACA,cAAc,qBAAqB;AACnC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,WAAW,MAAM;AACjB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA,CAAC;;AAED;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,OAAO,IAAyC;AAChD;AACA,IAAI,iCAAQ;AACZ,MAAM,2BAAmB;AACzB,MAAM,2BAA2B;AACjC,KAAK,mCAAE;AACP;AACA,KAAK;AAAA,oGAAC;AACN,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC;AACD;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA,CAAC;;;;;;;;;ACn/ID;AAAoC;;;;;;;;;;AAUpC,IAAM,MAAM,GAKV,eAAW,CAAC,MAAM,EAAE;EAClB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;AACvB,CAAC;;AAED;CACC;CACA;CACA;CACA;CACA;AACD,qBAAI,kBAAC,KAAK,EAAE,KAAc,EAAE,GAAG,EAAE,CAAhB;iCAAA,GAAG,MAAM;AAAQ;EAChC,QAAQ,CAAC,aAAa;IACpB,IAAI,WAAW,CAAC,QAAQ,EAAE;MACxB,OAAO,EAAE,IAAI;MACb,MAAM,EAAE;QACN,YAAK;QACL,EAAE,EAAE,KAAK;MACX,CAAC;IACH,CAAC,CAAC;EACJ,CAAC,CAAC;;EAEFA,GAAK,CAAC,IAAI,GAAG,KAAK,KAAK,EAAE,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,KAAK,UAAU,CAAC;EACnG,IAAI,IAAI,EAAE;IACR,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC;EACjC,CAAC;AACH,CAAC;;AAED;CACC;CACA;CACA;CACA,CAAG;CACH,CAAG;CACH,CAAG;CACH,CAAG;CACH;AACD,2BAAU,0BAAG,CAAC;;AAAA;EACZ;EACA,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;;EAEpB;EACA,QAAQ,CAAC,IAAI,CAAC,SAAS;IACrB,CAAC,WAAW,EAAE;IACd,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC;IACnB,CAAC,KAAK,CAAC,KAAK,CAAC;IACb,CAAC,GAAG,CAAC,2DAAS,CAAC;IACf,CAAC,OAAO,CAAC,UAAC,SAAS,EAAK;MACtBC,MAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;MACrBA,MAAI,CAAC,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;IACnC,CAAC,CAAC,CAAC;;EAEL,IAAI,QAAQ,CAAC,aAAa,CAAC,qBAAqB,CAAC,EAAE;IACjD,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACtB,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;EACpC,CAAC;;EAED;EACA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;AAClC,CAAC,CACF;;AAEc,+DAAM,EAAC;;;;;;;;AC5EtB;;;;;AAKe,mEAAC,GAAG,EACjB,YAAC,IAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,KAAG,GAAG;KACjC,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC;KACtB,KAAK,CAAC,GAAG,CAAC;KACV,GAAG,CAAC,UAAC,IAAI,EAAK,YAAC,IAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,KAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,IAAC;KAChE,IAAI,CAAC,EAAE,CAAC;KACR,KAAK,CAAC,CAAC,CAAC,EAAE,MAAC;;;;;;;;ACXhB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA8C;AACF;AACK;AACG;AACE;AACP;AACD;AACC;AACI;AACb;AACc;AACD;AACO;AACT;AACU;;AAE5C;EACb,IAAI,kBAAG;;IAELD,GAAK,CAAC,KAAK,GAAG,IAAI,CAAC;IACnB,KAAK,CAAC,SAAS,EAAE,CAAC;IAClB,2EAAU,EAAE,CAAC;IACb,MAAM,CAAC,OAAO,GAAG,oEAAO,CAAC;GAC1B;;EAED,SAAS,uBAAG;IACV,8EAAa,EAAE,CAAC;IAChB,4EAAY,EAAE,CAAC;IACf,gFAAa,EAAE,CAAC;IAChB,2EAAW,EAAE,CAAC;IACd,yEAAI,EAAE,CAAC;IACP,2EAAW,EAAE,CAAC;IACd,6EAAQ,EAAE,CAAC;IACX,6EAAa,EAAE,CAAC;IAChB,8EAAc,EAAE,CAAC;IACjB,8EAAa,EAAE,CAAC;IAChB,kFAAgB,EAAE,CAAC;IACnB,6EAAY,EAAE,CAAC;IACf,qFAAc,EAAE,CAAC;GAClB;;EAED,QAAQ,sBAAG;;GAEV;CACF,EAAC;;;;;;;;AC5CFA,4CAAK,CAAC,cAAc,GAAG,+BAA+B,CAAC;AACvDA,GAAK,CAAC,aAAa,GAAG,aAAa,CAAC;AACpCA,GAAK,CAAC,WAAW,GAAG,EAAE,CAAC;;AAEvB,SAAS,UAAU,GAAG;EACpB,CAAC,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,YAAY;IACjCA,GAAK,CAAC,OAAO,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;IACxB,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,YAAY;MAC3CA,GAAK,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;MACvB,IAAI,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE;QACxD,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;QAClE,OAAO,KAAK,CAAC;OACd;MACD,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC;KACrC,CAAC,CAAC;GACJ,CAAC,CAAC;CACJ;;AAED,SAAS,SAAS,CAAC,EAAE,EAAE,OAAO,EAAE;;EAE9B,IAAI,WAAW,CAAC,OAAO,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE;IAChC,OAAO,KAAK,CAAC;GACd;EACD,IAAI,OAAO,KAAK,KAAK,EAAE;IACrB,OAAO,IAAI,CAAC;GACb;EACD,IAAI,OAAO,KAAK,UAAU,EAAE;IAC1B,OAAO,CAAC,MAAM,CAAC,kBAAkB,IAAI,CAAC,MAAM,CAAC,kBAAkB,CAAC,UAAU,CAAC;GAC5E;EACD,IAAI,OAAO,KAAK,OAAO,EAAE;IACvB,OAAO,MAAM,CAAC,kBAAkB,IAAI,MAAM,CAAC,kBAAkB,CAAC,UAAU,CAAC;GAC1E;EACD,OAAO,KAAK,CAAC;CACd;;AAEc,qEAAY;EACzB,UAAU,EAAE,CAAC;EACb,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,iBAAiB,EAAE,UAAU,CAAC,CAAC;CAC7C;;;;;;;;;ACtCDA,4CAAK,CAAC,QAAQ,GAAG,UAAU,CAAC;AAC5BA,GAAK,CAAC,eAAe,GAAG,mBAAmB,CAAC;AAC5CA,GAAK,CAAC,aAAa,GAAG,eAAe,CAAC;AACtCA,GAAK,CAAC,oBAAoB,GAAG,kBAAkB,CAAC;AAChDE,GAAG,CAAC,UAAU,CAAC;AACfA,GAAG,CAAC,UAAU,CAAC;AACfA,GAAG,CAAC,UAAU,CAAC;AACfF,GAAK,CAAC,cAAc,GAAG;EACrB,QAAQ,EAAE,IAAI;CACf,CAAC;;AAEF,SAAS,IAAI,CAAC,OAAO,EAAE;EACrB,IAAI,CAAC,UAAU,EAAE;IACf,UAAU,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC;GAC1B;EACD,UAAU,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;EACnC,CAAC,CAAC,oBAAoB,CAAC,CAAC,EAAE,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;EAC1C,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;IACnB,UAAU,GAAG,UAAU,CAAC,IAAI,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;GACjD;CACF;;AAED,SAAS,IAAI,GAAG;EACd,IAAI,CAAC,UAAU,EAAE;IACf,UAAU,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC;GAC1B;EACD,UAAU,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC;;EAEtC,UAAU,CAAC,YAAM,mBAAU,CAAC,IAAI,CAAC,EAAE,CAAC,KAAE,GAAG,CAAC,CAAC;CAC5C;;AAEc,mEAAU,OAAO,EAAE,OAAY,EAAE,CAAP;mCAAA,GAAG,EAAE;AAAG;EAC/C,YAAY,CAAC,UAAU,CAAC,CAAC;EACzBA,GAAK,CAAC,cAAc,GAAG,kBAClB,cAAc;IACd,OAAO,CACX,CAAC;EACF,IAAI,CAAC,UAAU,EAAE;IACf,UAAU,GAAG,CAAC,CAAC,eAAe,CAAC,CAAC;GACjC;EACD,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;EACzB,IAAI,CAAC,cAAc,CAAC,CAAC;CACtB;;;;;;;;;AC1CDA,4CAAK,CAAC,WAAW,GAAG;EAClB,aAAa,EAAE,CAAC;EAChB,aAAa,EAAE,GAAG;EAClB,aAAa,EAAE,GAAG;EAClB,aAAa,EAAE,IAAI;EACnB,aAAa,EAAE,IAAI;CACpB,CAAC;AACFE,GAAG,CAAC,OAAO,CAAC;;AAEZ,SAAS,aAAa,GAAG;EACvBF,GAAK,CAAC,WAAW,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;EACzC,MAAM,CAAC,OAAO,CAAC,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC;KACjD,KAAK,EAAE;KACP,OAAO,EAAE;KACT,IAAI,CAAC,UAAC,UAAU,EAAK,oBAAW,GAAG,WAAW,CAAC,UAAU,CAAC,IAAC,CAAC;CAChE;;AAEc,qEAAY;EACzB,MAAM,CAAC,OAAO,GAAG,EAAE,CAAC;EACpB,OAAO,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC;EACpB,aAAa,EAAE,CAAC;EAChB,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC;CACrC;;;;;;;;;ACtBDA,4CAAK,CAAC,QAAQ,GAAG,YAAY,CAAC;;AAE9B,SAAS,QAAQ,CAAC,IAAI,EAAE,gBAAgB,EAAE;EACxC,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE;IACxB,gBAAgB,CAAC,IAAI,EAAE,gBAAgB,CAAC,CAAC;IACzC,OAAO;GACR;EACD,SAAS,CAAC,SAAS;KAChB,SAAS,CAAC,IAAI,CAAC;KACf,IAAI,CAAC,YAAY;MAChB,MAAM,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;KAClC,CAAC;KACD,KAAK,CAAC,UAAU,GAAG,EAAE;MACpB,OAAO,CAAC,KAAK,CAAC,qBAAqB,EAAE,GAAG,CAAC,CAAC;KAC3C,CAAC,CAAC;CACN;;AAED,SAAS,gBAAgB,CAAC,IAAI,EAAE,gBAAgB,EAAE;EAChDA,GAAK,CAAC,QAAQ,GAAG,QAAQ,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;EACpD,QAAQ,CAAC,KAAK,GAAG,IAAI,CAAC;;;EAGtB,QAAQ,CAAC,KAAK,CAAC,GAAG,GAAG,GAAG,CAAC;EACzB,QAAQ,CAAC,KAAK,CAAC,IAAI,GAAG,GAAG,CAAC;EAC1B,QAAQ,CAAC,KAAK,CAAC,QAAQ,GAAG,OAAO,CAAC;;EAElC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;EACpC,QAAQ,CAAC,KAAK,EAAE,CAAC;EACjB,QAAQ,CAAC,MAAM,EAAE,CAAC;;EAElB,IAAI;IACF,QAAQ,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;IAC7B,MAAM,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;GAClC,CAAC,OAAO,GAAG,EAAE;IACZ,OAAO,CAAC,KAAK,CAAC,sCAAsC,EAAE,GAAG,CAAC,CAAC;GAC5D;;EAED,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;CACrC;;AAEc,qEAAY;EACzB,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,OAAO,EAAE,QAAQ,EAAE,UAAU,CAAC,EAAE;IACpD,CAAC,CAAC,cAAc,EAAE,CAAC;IACnBA,GAAK,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;IACvB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE;MACxB,OAAO;KACR;IACD,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,aAAa,CAAC,CAAC;GAC7E,CAAC,CAAC;CACJ;;;;;;;;;ACjDDE,4CAAG,CAAC,OAAO,CAAC;AACZA,GAAG,CAAC,UAAU,CAAC;AACfF,GAAK,CAAC,gBAAgB,GAAG,cAAc,CAAC;AACxCA,GAAK,CAAC,sBAAsB,GAAG,sBAAsB,CAAC;AACtDA,GAAK,CAAC,qBAAqB,GAAG,qBAAqB,CAAC;AACpDA,GAAK,CAAC,UAAU,GAAM,gBAAgB,kBAAe,CAAC;AACtDA,GAAK,CAAC,cAAc,GAAM,gBAAgB,yBAAsB,CAAC;AACjEA,GAAK,CAAC,cAAc,GAAG,gBAAgB,CAAC;AACxCA,GAAK,CAAC,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAC;AAChCE,GAAG,CAAC,gBAAgB,CAAC;AACrBA,GAAG,CAAC,oBAAoB,GAAG,CAAC,CAAC;;AAE7B,SAAS,KAAK,GAAG;EACf,IAAI,CAAC,kBAAkB,EAAE,EAAE;IACzB,OAAO;GACR;EACD,IAAI,CAAC,MAAM,CAAC,6BAA6B,EAAE;IACzC,YAAY,EAAE,CAAC;GAChB,MAAM;IACL,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,iCAAiC,EAAE,YAAM;MACpD,YAAY,EAAE,CAAC;KAChB,CAAC,CAAC;GACJ;CACF;;AAED,SAAS,kBAAkB,GAAG;EAC5B,UAAU,GAAG,CAAC,CAAC,gBAAgB,CAAC,CAAC;EACjC,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE;IACtB,OAAO,KAAK,CAAC;GACd;;EAED,IAAI,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE;IACpC,OAAO,KAAK,CAAC;GACd;;EAED,IAAI,MAAM,CAAC,kBAAkB,CAAC,UAAU,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,oBAAoB,CAAC,EAAE;IAClF,OAAO,KAAK,CAAC;GACd;;EAED,IAAI,OAAO,MAAM,CAAC,SAAS,KAAK,WAAW,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,SAAS,EAAE;IAClF,MAAM,CAAC,gBAAgB;MACrB,mBAAmB;MACnB,YAAY;QACV,IAAI,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,SAAS,EAAE;UACtC,YAAY,EAAE,CAAC;SAChB;OACF;MACD,KAAK;KACN,CAAC;IACF,OAAO,KAAK,CAAC;GACd;;EAED,OAAO,IAAI,CAAC;CACb;;AAED,SAAS,YAAY,GAAG;EACtB,IAAI,OAAO,MAAM,CAAC,uBAAuB,KAAK,UAAU,EAAE;IACxD,OAAO;GACR;EACD,OAAO,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC;EACpB,UAAU,CAAC,IAAI,EAAE,CAAC;EAClB,MAAM,CAAC,uBAAuB,EAAE,CAAC;EACjC,MAAM,CAAC,UAAU,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;EAChC,gBAAgB,GAAG,MAAM,CAAC,WAAW,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;EACtD,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;EAChC,CAAC,CAAC,qBAAqB,CAAC,CAAC,EAAE,CAAC,OAAO,EAAE,UAAU,CAAC,EAAE;IAChD,CAAC,CAAC,cAAc,EAAE,CAAC;IACnB,MAAM,CAAC,aAAa,CAAC,gBAAgB,CAAC,CAAC;IACvC,UAAU,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAG,UAAU,CAAC,MAAM,EAAE,QAAG,CAAC,CAAC,CAAC;IACrD,UAAU,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC;IAChC,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACxB,MAAM,CAAC,UAAU,CAAC,YAAY;MAC5B,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;MAC3B,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;MACjC,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;KAC3B,EAAE,GAAG,CAAC,CAAC;GACT,CAAC,CAAC;CACJ;;AAED,SAAS,OAAO,GAAG;EACjBF,GAAK,CAAC,MAAM,GAAG,CAAC,CAAC,cAAc,CAAC,CAAC;EACjC,IAAI,MAAM,CAAC,MAAM,EAAE;IACjB,SAAS,EAAE,CAAC;IACZ,OAAO;GACR;EACD,UAAU,CAAC,IAAI,EAAE,CAAC;CACnB;;AAED,SAAS,SAAS,CAAC,KAAa,EAAE,CAAV;+BAAA,GAAG,KAAK;AAAG;EACjC,IAAI,KAAK,EAAE;IACT,oBAAoB,GAAG,CAAC,CAAC;GAC1B,MAAM,IAAI,oBAAoB,GAAG,CAAC,EAAE;IACnC,OAAO;GACR;EACD,oBAAoB,EAAE,CAAC;EACvBA,GAAK,CAAC,MAAM,GAAG,CAAC,CAAC,cAAc,CAAC,CAAC;EACjC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE;IAClB,OAAO;GACR;EACD,UAAU,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAG,OAAO,CAAC,MAAM,EAAE,QAAG,CAAC,CAAC,CAAC;EAClDA,GAAK,CAAC,EAAE,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC;EACzB,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;EACvBA,GAAK,CAAC,YAAY,GAAG,CAAC,CAAC,sBAAsB,CAAC,CAAC,WAAW,EAAE,CAAC;EAC7DA,GAAK,CAAC,UAAU,GAAG,OAAO,CAAC,MAAM,EAAE,GAAG,YAAY,CAAC;EACnDA,GAAK,CAAC,eAAe,GAAG,OAAO,CAAC,KAAK,EAAE,GAAG,UAAU,CAAC;EACrDA,GAAK,CAAC,iBAAiB,GAAG,MAAM,CAAC,KAAK,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;EAC3D,IAAI,eAAe,GAAG,iBAAiB,EAAE;IACvCA,GAAK,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;IACxDA,GAAK,CAAC,MAAM,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,KAAK,GAAG,MAAM,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;IACtE,EAAE,CAAC,GAAG,CAAC,WAAW,EAAE,SAAO,GAAE,KAAK,kBAAc,GAAE,MAAM,QAAI,CAAC,CAAC,CAAC;GAChE,MAAM;IACLA,GAAK,CAACG,OAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,KAAK,EAAE,GAAG,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;IAC5DH,GAAK,CAAC,MAAM,GAAG,CAAC,UAAU,GAAGG,OAAK,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC;IAC1D,EAAE,CAAC,GAAG,CAAC,WAAW,EAAE,SAAO,GAAEA,OAAK,kBAAc,GAAE,MAAM,QAAI,CAAC,CAAC,CAAC;GAChE;EACD,UAAU,CAAC,QAAQ,CAAC,oBAAoB,CAAC,CAAC;EAC1C,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;EACjC,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;EAC1B,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;CACjC;;AAED,SAAS,SAAS,GAAG;EACnB,QAAQ,CAAC,MAAM,GAAG,cAAc,GAAG,GAAG,GAAG,SAAS,CAAC;CACpD;;AAEc,qEAAY;EACzB,KAAK,EAAE,CAAC;CACT;;;;;;;;;AC/HDD,4CAAG,CAAC,aAAa,GAAG,CAAC,CAAC;AACtBA,GAAG,CAAC,oBAAoB,CAAC;AACzBA,GAAG,CAAC,OAAO,CAAC;AACZA,GAAG,CAAC,SAAS,CAAC;AACdA,GAAG,CAAC,KAAK,CAAC;AACVA,GAAG,CAAC,OAAO,CAAC;AACZA,GAAG,CAAC,SAAS,CAAC;AACdA,GAAG,CAAC,aAAa,CAAC;AAClBA,GAAG,CAAC,YAAY,CAAC;AACjBA,GAAG,CAAC,eAAe,CAAC;AACpBA,GAAG,CAAC,qBAAqB,CAAC;AAC1BA,GAAG,CAAC,cAAc,CAAC;;AAEnB,SAAS,QAAQ,GAAG;EAClB,uBAAuB,EAAE,CAAC;CAC3B;;AAED,SAAS,aAAa,CAAC,SAAa,EAAE,CAAN;uCAAA,GAAG,CAAC;AAAG;EACrC,cAAc,GAAG,SAAS,CAAC,WAAW,EAAE,CAAC;EACzC,UAAU,CAAC,YAAM;IACf,IAAI,cAAc,KAAK,SAAS,CAAC,WAAW,EAAE,EAAE;MAC9C,OAAO,uBAAuB,EAAE,CAAC;KAClC;IACD,IAAI,SAAS,IAAI,CAAC,EAAE;MAClB,aAAa,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC;KAC9B;GACF,EAAE,GAAG,CAAC,CAAC;CACT;;AAED,SAAS,uBAAuB,GAAG;EACjC,KAAK,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC;EAClC,OAAO,CAAC,WAAW,CAAC,qBAAqB,CAAC,CAAC,WAAW,CAAC,eAAe,CAAC,CAAC;EACxE,oBAAoB,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,GAAG,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;CACrE;;AAED,SAAS,WAAW,GAAG;EACrBF,GAAK,CAAC,gBAAgB,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;;EAE7CA,GAAK,CAAC,aAAa,GAAG,gBAAgB,GAAG,oBAAoB,CAAC;EAC9D,IAAI,aAAa,EAAE;IACjB,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE;MACtC,KAAK,CAAC,GAAG,CAAC,aAAa,EAAE,OAAO,GAAG,OAAO,CAAC,WAAW,EAAE,GAAG,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,GAAG,GAAG,CAAC,CAAC;KAC1G;IACD,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;IAClC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAAC,EAAE;MAC5C,KAAK,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;MAC/B,YAAY,GAAG,UAAU,CAAC,YAAM,gBAAO,CAAC,QAAQ,CAAC,qBAAqB,CAAC,KAAE,EAAE,CAAC,CAAC;KAC9E;GACF,MAAM;IACL,YAAY,CAAC,YAAY,CAAC,CAAC;IAC3B,IAAI,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAAC,EAAE;MAC3C,KAAK,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC;MAClC,KAAK,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC;MAC5B,OAAO,CAAC,WAAW,CAAC,qBAAqB,CAAC,CAAC,WAAW,CAAC,eAAe,CAAC,CAAC;KACzE;GACF;;EAED,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,oBAAoB,CAAC,EAAE;;IAEzC,OAAO,CAAC,WAAW,CAAC,oBAAoB,EAAE,aAAa,IAAI,gBAAgB,GAAG,aAAa,CAAC,CAAC;GAC9F;EACD,aAAa,GAAG,gBAAgB,CAAC;CAClC;;AAED,SAAS,kBAAkB,CAAC,CAAC,EAAE;EAC7B,CAAC,CAAC,cAAc,EAAE,CAAC;EACnB,CAAC,CAAC,eAAe,EAAE,CAAC;;EAEpBA,GAAK,CAAC,IAAI,GAAG,KAAK,CAAC,QAAQ,CAAC,oBAAoB,CAAC,CAAC;EAClD,IAAI,CAAC,IAAI,EAAE;IACT,gBAAgB,EAAE,CAAC;GACpB,MAAM;IACL,iBAAiB,EAAE,CAAC;GACrB;CACF;;AAED,SAAS,gBAAgB,GAAG;EAC1B,YAAY,CAAC,eAAe,CAAC,CAAC;EAC9B,KAAK,CAAC,QAAQ,CAAC,0BAA0B,CAAC,CAAC;EAC3C,eAAe,GAAG,UAAU,CAAC,YAAM;IACjC,KAAK,CAAC,QAAQ,CAAC,oBAAoB,CAAC,CAAC;IACrC,eAAe,GAAG,UAAU,CAAC,YAAM,gBAAO,CAAC,WAAW,CAAC,oBAAoB,CAAC,KAAE,GAAG,CAAC,CAAC;GACpF,EAAE,EAAE,CAAC,CAAC;EACP,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;EAClC,KAAK,CAAC,GAAG,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;EAChC,CAAC,CAAC,kBAAkB,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;EACnC,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,sBAAsB,CAAC,CAAC;CAC/C;;AAED,SAAS,iBAAiB,GAAG;EAC3B,YAAY,CAAC,eAAe,CAAC,CAAC;EAC9B,KAAK,CAAC,WAAW,CAAC,oBAAoB,CAAC,CAAC;EACxC,eAAe,GAAG,UAAU,CAAC,YAAM,cAAK,CAAC,WAAW,CAAC,0BAA0B,CAAC,KAAE,GAAG,CAAC,CAAC;EACvF,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;EACnC,KAAK,CAAC,GAAG,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;EACjC,SAAS,CAAC,GAAG,CAAC,OAAO,EAAE,sBAAsB,CAAC,CAAC;CAChD;;AAED,SAAS,sBAAsB,CAAC,CAAC,EAAE;EACjC,IAAI,CAAC,CAAC,GAAG,KAAK,QAAQ,EAAE;IACtB,iBAAiB,EAAE,CAAC;GACrB;CACF;;AAED,SAAS,uBAAuB,CAAC,CAAC,EAAE;EAClCA,GAAK,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC;EAChC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;EACzB,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;IACzB,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,SAAS,CAAC;MACnC,QAAQ,EAAE,GAAG;MACb,KAAK,EAAE,YAAY;QACjB,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;OAChC;KACF,CAAC,CAAC;GACJ,MAAM;IACL,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;GACzC;CACF;;AAED,SAAS,UAAU,GAAG;EACpB,CAAC,CAAC,eAAe,CAAC,CAAC,KAAK,EAAE,CAAC;CAC5B;;AAED,SAAS,WAAW,GAAG;EACrB,CAAC,CAAC,eAAe,CAAC,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;CACnE;;AAED,SAAS,UAAU,GAAG;EACpB,CAAC,CAAC,eAAe,CAAC,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;CACtE;;AAED,SAAS,WAAW,CAAC,CAAC,EAAE;EACtBA,GAAK,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,4BAA4B,CAAC,CAAC;;EAEjE,IAAI,MAAM,CAAC,GAAG,EAAE,EAAE;IAChB,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;GACtD,MAAM;IACL,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;GACzD;CACF;;;;;;;;;;;;;;AAcD,SAAS,WAAW,GAAG;EACrB,YAAY,CAAC,qBAAqB,CAAC,CAAC;EACpC,KAAK,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC;EACjC,qBAAqB,GAAG,UAAU,CAAC,YAAM,cAAK,CAAC,WAAW,CAAC,mBAAmB,CAAC,KAAE,GAAG,CAAC,CAAC;EACtF,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;EACnC,KAAK,CAAC,GAAG,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;EACjC,SAAS,CAAC,GAAG,CAAC,OAAO,EAAE,gBAAgB,CAAC,CAAC;CAC1C;;AAED,SAAS,gBAAgB,CAAC,CAAC,EAAE;EAC3B,IAAI,CAAC,CAAC,GAAG,KAAK,QAAQ,EAAE;IACtB,WAAW,EAAE,CAAC;GACf;CACF;;AAED,SAAS,kBAAkB,CAAC,CAAC,EAAE;EAC7B,CAAC,CAAC,cAAc,EAAE,CAAC;EACnB,CAAC,CAAC,eAAe,EAAE,CAAC;;EAEpB,IAAI,CAAC,aAAa,EAAE;IAClB,aAAa,GAAG,CAAC,CAAC,gBAAgB,CAAC,CAAC;GACrC;;EAEDA,GAAK,CAAC,IAAI,GAAG,aAAa,CAAC,QAAQ,CAAC,qBAAqB,CAAC,CAAC;EAC3D,IAAI,CAAC,IAAI,EAAE;IACT,gBAAgB,EAAE,CAAC;GACpB,MAAM;IACL,iBAAiB,EAAE,CAAC;GACrB;CACF;;AAED,SAAS,gBAAgB,GAAG;EAC1B,aAAa,CAAC,QAAQ,CAAC,qBAAqB,CAAC,CAAC;EAC9C,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;EACxC,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,iBAAiB,CAAC,CAAC;EACrC,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,sBAAsB,CAAC,CAAC;CAC/C;;AAED,SAAS,iBAAiB,GAAG;EAC3B,aAAa,CAAC,WAAW,CAAC,qBAAqB,CAAC,CAAC;EACjD,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;EACtC,KAAK,CAAC,GAAG,CAAC,OAAO,EAAE,iBAAiB,CAAC,CAAC;EACtC,SAAS,CAAC,GAAG,CAAC,OAAO,EAAE,sBAAsB,CAAC,CAAC;CAChD;;AAED,SAAS,sBAAsB,CAAC,CAAC,EAAE;EACjC,IAAI,CAAC,CAAC,GAAG,KAAK,QAAQ,EAAE;IACtB,iBAAiB,EAAE,CAAC;GACrB;CACF;;AAEc,qEAAY;EACzB,OAAO,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC;EACpB,SAAS,GAAG,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;EAC/B,KAAK,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC;EAClB,OAAO,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC;EACvB,SAAS,GAAG,CAAC,CAAC,sBAAsB,CAAC,CAAC;EACtC,KAAK;KACF,EAAE,CAAC,OAAO,EAAE,yBAAyB,EAAE,uBAAuB,CAAC;KAC/D,EAAE,CAAC,OAAO,EAAE,sBAAsB,EAAE,kBAAkB,CAAC;KACvD,EAAE,CAAC,OAAO,EAAE,sBAAsB,EAAE,UAAU,CAAC;KAC/C,EAAE,CAAC,OAAO,EAAE,+BAA+B,EAAE,kBAAkB,CAAC;KAChE,EAAE,CAAC,OAAO,EAAE,uBAAuB,EAAE,UAAC,CAAC,EAAK,UAAC,CAAC,eAAe,EAAE,IAAC;KAChE,EAAE,CAAC,SAAS,EAAE,4BAA4B,EAAE,WAAW,CAAC;KACxD,EAAE,CAAC,UAAU,EAAE,4BAA4B,EAAE,UAAU,CAAC;KACxD,EAAE,CAAC,OAAO,EAAE,4BAA4B,EAAE,WAAW,CAAC,CAAC;;EAE1D,IAAI,SAAS,CAAC,MAAM,EAAE;IACpB,aAAa,EAAE,CAAC;GACjB;;EAED,WAAW,EAAE,CAAC;;;EAGd,CAAC,CAAC,2CAA2C,CAAC,CAAC,IAAI,CAAC,YAAY;IAC9DA,GAAK,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;IACrB,IAAI,CAAC,WAAW,CAAC,QAAQ,GAAG,IAAI,CAAC,IAAI,EAAE,GAAG,SAAS,CAAC,CAAC;GACtD,CAAC,CAAC;;EAEH,uBAAuB,EAAE,CAAC;EAC1B,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;EAC/B,MAAM,CAAC,UAAU,CAAC,YAAM;IACtB,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;GACnC,EAAE,IAAI,CAAC,CAAC;CACV;;;;;;;;;AC7ODA,4CAAK,CAAC,QAAQ,GAAG,QAAQ,CAAC,gBAAgB;EACxC,kNAAkN;CACnN,CAAC;AACFE,GAAG,CAAC,UAAU,CAAC;AACfA,GAAG,CAAC,SAAS,CAAC;AACdA,GAAG,CAAC,iBAAiB,CAAC;;AAEtB,SAAS,oBAAoB,GAAG;EAC9B,iBAAiB,GAAG,MAAM,CAAC,UAAU,GAAG,MAAM,CAAC,WAAW,CAAC;CAC5D;;AAED,SAAS,eAAe,GAAG;EACzB,IAAI,CAAC,UAAU,EAAE,SAAO;EACxBA,GAAG,CAAC,QAAQ,GAAG,UAAU,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC;;EAErD,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,SAAO;;EAE7BA,GAAG,CAAC,aAAa,GAAG,QAAQ,CAAC,MAAM,KAAK,CAAC,GAAG,EAAE,GAAG,GAAG,CAAC;EACrD,QAAQ,CAAC,OAAO,CAAC,UAAC,EAAE,EAAK;IACvBF,GAAK,CAAC,WAAW,GAAG,EAAE,CAAC,WAAW,GAAG,EAAE,CAAC,YAAY,CAAC;IACrDE,GAAG,CAAC,WAAW,GAAG,MAAM,CAAC,UAAU,GAAG,EAAE,CAAC;IACzC,IAAI,WAAW,GAAG,iBAAiB,EAAE;MACnC,WAAW,GAAG,CAAC,MAAM,CAAC,WAAW,GAAG,aAAa,CAAC,GAAG,WAAW,CAAC;KAClE;IACD,EAAE,CAAC,KAAK,CAAC,KAAK,GAAG,CAAG,QAAQ,CAAC,WAAW,EAAE,EAAE,CAAC,QAAI,CAAC;GACnD,CAAC,CAAC;CACJ;;AAED,SAAS,cAAc,GAAG;;;EAGxB;IACE,MAAM,CAAC,UAAU,IAAI,IAAI;IACzB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,YAAY,CAAC;IAC/B,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC,MAAM;IACzC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC;IAC9B,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,MAAM;IACxC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,gBAAgB,CAAC;IACnC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,qBAAqB,CAAC;IACxC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC,MAAM;IAC7C,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC,MAAM;IAC5C;IACA,OAAO;GACR;EACD;IACE,MAAM,CAAC,UAAU,IAAI,GAAG;IACxB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,YAAY,CAAC;MAC7B,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC,MAAM;MACxC,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC;MAC7B,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,MAAM;MACvC,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,gBAAgB,CAAC;MAClC,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC,MAAM;MAC5C,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC,MAAM,CAAC;IAC9C;IACA,OAAO;GACR;EACD,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,IAAI,IAAI,CAAC;EAClDF,GAAK,CAAC,MAAM,GAAG,SAAS,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;EAyBjD,UAAU,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;EAC3C,UAAU,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,EAAE,eAAe,EAAE,mBAAmB,CAAC,CAAC;;EAE1EA,GAAK,CAAC,aAAa,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;EACpD,aAAa,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;;EAExCA,GAAK,CAAC,QAAQ,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;EAClD,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;EAC1C,UAAU,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;;EAEjCE,GAAG,CAAC,QAAQ,GAAG,CAAC,CAAC;EACjB,IAAI,SAAS,CAAC,SAAS,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE;;IAEhD,QAAQ,GAAG,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;GAC3E;;EAEDF,GAAK,CAAC,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;EACpDA,GAAK,CAAC,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;;EAEhDA,GAAK,CAAC,GAAG,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;EAC1C,GAAG,CAAC,YAAY,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;EAChC,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;;EAExBA,GAAK,CAAC,UAAU,GAAG,QAAQ,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC;EACxD,IAAI,SAAS,CAAC,aAAa,CAAC,YAAY,CAAC,EAAE;IACzCA,GAAK,CAAC,OAAO,GAAG,SAAS,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC,SAAS,CAAC;IAChE,UAAU,CAAC,SAAS,GAAG,OAAO,CAAC;IAC/B,MAAM,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;GAChC;;EAED,aAAa,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;;EAElC,UAAU,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;EACjC,QAAQ,CAAC,IAAI,CAAC,qBAAqB,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;EAC7D,UAAU,CAAC,KAAK,CAAC,OAAO,GAAG,CAAC,CAAC;EAC7B,UAAU,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,gBAAgB,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;EACvE,UAAU,CAAC,gBAAgB,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;EACpD,QAAQ,CAAC,gBAAgB,CAAC,OAAO,EAAE,kBAAkB,CAAC,CAAC;EACvD,QAAQ,CAAC,gBAAgB,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;CACnD;;AAED,SAAS,YAAY,GAAG;EACtB,eAAe,EAAE,CAAC;EAClB,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,QAAQ,CAAC;EACxC,UAAU,CAAC,KAAK,CAAC,OAAO,GAAG,CAAC,CAAC;CAC9B;;AAED,SAAS,aAAa,CAAC,CAAC,EAAE;EACxB,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,sBAAsB,CAAC,CAAC,MAAM,EAAE;IAChG,aAAa,EAAE,CAAC;;;GAGjB;CACF;;AAED,SAAS,kBAAkB,CAAC,CAAC,EAAE;EAC7B,IAAI,CAAC,CAAC,GAAG,KAAK,QAAQ,EAAE;IACtB,aAAa,EAAE,CAAC;GACjB;CACF;;AAED,SAAS,aAAa,GAAG;EACvB,IAAI,UAAU,EAAE;IACd,UAAU,CAAC,KAAK,CAAC,OAAO,GAAG,CAAC,CAAC;IAC7B,UAAU,CAAC,YAAM,mBAAU,CAAC,MAAM,EAAE,KAAE,GAAG,CAAC,CAAC;GAC5C;EACD,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,SAAS,CAAC;EACzC,QAAQ,CAAC,mBAAmB,CAAC,OAAO,EAAE,kBAAkB,CAAC,CAAC;CAC3D;;AAED,SAAS,mBAAmB,GAAG;EAC7B,SAAS,CAAC,aAAa,CAAC,kBAAkB,CAAC,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC;EACnE,SAAS,CAAC,gBAAgB,CAAC,cAAc,CAAC,CAAC,OAAO,CAAC,UAAC,EAAE,EAAK;IACzD,EAAE,CAAC,YAAY,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;GAC9B,CAAC,CAAC;EACH,UAAU,CAAC,aAAa,CAAC,iBAAiB,CAAC,CAAC,aAAa,CAAC,IAAI,WAAW,CAAC,wBAAwB,CAAC,CAAC,CAAC;EACrG,QAAQ,CAAC,mBAAmB,CAAC,OAAO,EAAE,wBAAwB,CAAC,CAAC;CACjE;;AAED,SAAS,wBAAwB,CAAC,CAAC,EAAE;EACnC,IAAI,CAAC,CAAC,GAAG,KAAK,QAAQ,EAAE;IACtB,mBAAmB,EAAE,CAAC;GACvB;CACF;;AAED,SAAS,cAAc,GAAG;EACxB,MAAM,CAAC,QAAQ,GAAG,YAAY;IAC5B,oBAAoB,EAAE,CAAC;IACvB,eAAe,EAAE,CAAC;GACnB,CAAC;;EAEF,QAAQ,CAAC,OAAO,CAAC,UAAC,OAAO,EAAK;IAC5B,OAAO,CAAC,gBAAgB,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;GACnD,CAAC,CAAC;CACJ;;AAEc,qEAAY;EACzB,cAAc,EAAE,CAAC;EACjB,oBAAoB,EAAE,CAAC;CACxB;;;;;;;;;ACrLDE,4CAAG,CAAC,QAAQ,GAAG,KAAK,CAAC;;AAErBA,GAAG,CAAC,WAAW,CAAC;AAChBA,GAAG,CAAC,QAAQ,CAAC;AACbA,GAAG,CAAC,eAAe,CAAC;AACpBA,GAAG,CAAC,kBAAkB,CAAC;;AAEvB,SAAS,KAAK,GAAG;;EAEf,QAAQ,GAAG,QAAQ,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC;EACjDF,GAAK,CAAC,UAAU,GAAG,QAAQ,CAAC,iBAAiB,CAAC;EAC9C;IACE,CAAC,QAAQ,IAAI,UAAU,CAAC,SAAS,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;IACvD,UAAU,CAAC,SAAS,CAAC,QAAQ,CAAC,0BAA0B,CAAC;IACzD;IACA,WAAW,GAAG,UAAU,CAAC,sBAAsB,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACjE,kBAAkB,EAAE,CAAC;;IAErBA,GAAK,CAAC,aAAa,GAAG,UAAU,CAAC,sBAAsB,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC;IAC3EA,GAAK,CAAC,SAAS,GAAG,UAAU,CAAC,sBAAsB,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC,CAAC;IACxFA,GAAK,CAAC,YAAY,GAAG,YAAY,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC;;IAElDA,GAAK,CAAC,iBAAiB,GAAG,WAAW,CAAC,YAAY,CAAC;;;IAGnD,kBAAkB,GAAG,YAAY,GAAG,iBAAiB,CAAC;GACvD;CACF;;AAED,SAAS,kBAAkB,GAAG;EAC5B,eAAe,GAAG,SAAS,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC;CAC/C;;AAED,SAAS,SAAS,GAAG;EACnB,IAAI,WAAW,EAAE;IACfE,GAAG,CAAC,UAAU,GAAG,WAAW,CAAC,aAAa,CAAC,WAAW,CAAC;IACvD,WAAW,CAAC,KAAK,CAAC,KAAK,GAAM,UAAU,OAAI,CAAC;IAC5C,cAAc,EAAE,CAAC;GAClB;CACF;;AAED,SAAS,UAAU,GAAG;EACpB,IAAI,WAAW,IAAI,MAAM,CAAC,UAAU,GAAG,IAAI,EAAE;IAC3C,WAAW,CAAC,KAAK,CAAC,QAAQ,GAAG,UAAU,CAAC;IACxC,WAAW,CAAC,KAAK,CAAC,GAAG,GAAG,MAAM,CAAC;IAC/B,WAAW,CAAC,KAAK,CAAC,KAAK,GAAG,SAAS,CAAC;GACrC;CACF;;AAED,SAAS,cAAc,GAAG;EACxB,MAAM,CAAC,QAAQ,GAAG,YAAY;IAC5B,IAAI,MAAM,CAAC,UAAU,GAAG,IAAI,EAAE;MAC5B,cAAc,EAAE,CAAC;KAClB;GACF,CAAC;;EAEF,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,YAAY;IAC5C,IAAI,MAAM,CAAC,UAAU,GAAG,IAAI,EAAE;MAC5B,SAAS,EAAE,CAAC;KACb,MAAM;MACL,UAAU,EAAE,CAAC;KACd;GACF,CAAC,CAAC;;EAEH,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,QAAQ,EAAE,kBAAkB,CAAC,CAAC;CAC5C;;AAED,SAAS,SAAS,CAAC,EAAE,EAAE;EACrBA,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC,qBAAqB,EAAE,CAAC;EACxC,OAAO,MAAM,CAAC,GAAG,GAAG,MAAM,CAAC,WAAW,CAAC;CACxC;;AAED,SAAS,YAAY,CAAC,EAAE,EAAE;EACxBA,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC,qBAAqB,EAAE,CAAC;EACxC,OAAO,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,WAAW,CAAC;CAC3C;;AAED,SAAS,cAAc,GAAG;EACxBF,GAAK,CAAC,WAAW,GAAG,WAAW,EAAE,CAAC;EAClC,IAAI,WAAW,KAAK,QAAQ,EAAE;IAC5B,OAAO;GACR;EACD,QAAQ,GAAG,WAAW,CAAC;EACvB,IAAI,QAAQ,KAAK,QAAQ,EAAE;IACzB,WAAW,CAAC,KAAK,CAAC,QAAQ,GAAG,OAAO,CAAC;IACrC,WAAW,CAAC,KAAK,CAAC,GAAG,GAAG,MAAM,CAAC;GAChC;EACD,IAAI,QAAQ,KAAK,KAAK,EAAE;IACtB,WAAW,CAAC,KAAK,CAAC,QAAQ,GAAG,UAAU,CAAC;IACxC,WAAW,CAAC,KAAK,CAAC,GAAG,GAAM,eAAe,QAAK,CAAC;GACjD;EACD,IAAI,QAAQ,KAAK,QAAQ,EAAE;IACzB,WAAW,CAAC,KAAK,CAAC,QAAQ,GAAG,UAAU,CAAC;IACxC,WAAW,CAAC,KAAK,CAAC,GAAG,GAAG,kBAAkB,GAAG,eAAe,GAAG,IAAI,CAAC;GACrE;CACF;;AAED,SAAS,WAAW,GAAG;EACrBE,GAAG,CAAC,eAAe,GAAG,MAAM,CAAC,WAAW,IAAI,QAAQ,CAAC,eAAe,CAAC,SAAS,CAAC;EAC/E,IAAI,eAAe,GAAG,eAAe,IAAI,eAAe,GAAG,kBAAkB,EAAE;IAC7E,OAAO,QAAQ,CAAC;GACjB;EACD,IAAI,eAAe,GAAG,eAAe,EAAE;IACrC,OAAO,KAAK,CAAC;GACd;EACD,IAAI,eAAe,IAAI,kBAAkB,EAAE;IACzC,OAAO,QAAQ,CAAC;GACjB;CACF;;AAEc,qEAAY;EACzB,MAAM,CAAC,UAAU,CAAC,YAAY;IAC5B,KAAK,EAAE,CAAC;IACR,SAAS,EAAE,CAAC;IACZ,cAAc,EAAE,CAAC;IACjB,UAAU,EAAE,CAAC;GACd,EAAE,EAAE,CAAC,CAAC;CACR;;;;;;;;;ACrHDA,4CAAG,CAAC,KAAK,CAAC;AACVA,GAAG,CAAC,cAAc,CAAC;AACnBA,GAAG,CAAC,YAAY,CAAC;AACjBF,GAAK,CAAC,MAAM,GAAG,mBAAmB,CAAC;AACnCA,GAAK,CAAC,eAAe,GAAG,wBAAwB,CAAC;AACjDA,GAAK,CAAC,aAAa,GAAG,sBAAsB,CAAC;;AAE7C,SAAS,gBAAgB,CAAC,CAAC,EAAE;EAC3B,CAAC,CAAC,cAAc,EAAE,CAAC;;EAEnB,cAAc,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;EACzB,YAAY,GAAG,cAAc,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;;EAEtD,IAAI,cAAc,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE;IAC5C,iBAAiB,EAAE,CAAC;GACrB,MAAM;IACL,YAAY,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;IACrC,cAAc,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;;IAEzC,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,sBAAsB,CAAC,CAAC,EAAE,CAAC,OAAO,EAAE,+BAA+B,CAAC,CAAC;GACxF;CACF;;AAED,SAAS,iBAAiB,GAAG;EAC3B,cAAc,CAAC,WAAW,CAAC,eAAe,CAAC,CAAC;EAC5C,YAAY,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC;;EAExC,KAAK,CAAC,GAAG,CAAC,OAAO,EAAE,sBAAsB,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,+BAA+B,CAAC,CAAC;CAC1F;;AAED,SAAS,sBAAsB,CAAC,CAAC,EAAE;EACjC,IAAI,CAAC,CAAC,GAAG,KAAK,QAAQ,EAAE;IACtB,iBAAiB,EAAE,CAAC;GACrB;CACF;;AAED,SAAS,+BAA+B,CAAC,CAAC,EAAE;EAC1CA,GAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;;EAE3B,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,MAAM,IAAI,cAAc,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE;IACnF,iBAAiB,EAAE,CAAC;GACrB;CACF;;AAEc,qEAAY;EACzB,KAAK,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC;;EAElB,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,gBAAgB,CAAC,CAAC;CAC7C;;;;;;;;;AChDDE,GAAG,CAAC,aAAa,CAAC;AAClBA,GAAG,CAAC,MAAM,CAAC;AACXA,GAAG,CAAC,YAAY,CAAC;AACjBA,GAAG,CAAC,cAAc,CAAC;AACnBA,GAAG,CAAC,aAAa,CAAC;AAClBA,GAAG,CAAC,UAAU,CAAC;;AAEf,SAAS,KAAK,GAAG;EACf,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;EAC1C,aAAa,GAAG,QAAQ,CAAC,aAAa,CAAC,sBAAsB,CAAC,CAAC;EAC/D,IAAI,CAAC,aAAa,EAAE;IAClB,OAAO;GACR;;EAED,cAAc,GAAG,MAAM,CAAC,WAAW,CAAC;EACpC,aAAa,GAAG,MAAM,CAAC,UAAU,CAAC;EAClC,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC;EACnC,IAAI,CAAC,eAAe,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE;IACzD,UAAU,GAAG,aAAa,GAAG,MAAM,CAAC;GACrC,MAAM;IACL,UAAU,GAAG,cAAc,GAAG,YAAY,CAAC;GAC5C;EACD,aAAa,CAAC,KAAK,CAAC,MAAM,GAAG,UAAU,GAAG,IAAI,CAAC;CAChD;;AAED,SAAS,cAAc,GAAG;EACxB,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;CAC1C;;AAEc,qEAAY;EACzB,KAAK,EAAE,CAAC;EACR,cAAc,EAAE,CAAC;CAClB;;;;;;;;AChCDF,4CAAK,CAAC,QAAQ,GAAG,iBAAiB,CAAC;AACnCE,GAAG,CAAC,OAAO,CAAC;AACZA,GAAG,CAAC,SAAS,CAAC;AACdA,GAAG,CAAC,aAAa,CAAC;;AAElB,SAAS,eAAe,CAAC,GAAG,EAAE;;EAE5B,IAAI,GAAG,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,gBAAgB,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,UAAU,EAAE;IACxF,OAAO,CAAC,CAAC;GACV;;EAEDA,GAAG,CAAC,SAAS,GAAG,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC,CAAC;MAC5D,GAAG,CAAC,MAAM,EAAE,CAAC,UAAU,EAAE;MACzB,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC,CAAC;;EAE9CA,GAAG,CAAC,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,EAAE,GAAG,CAAC,SAAS,IAAI,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;;EAElF,OAAO,YAAY,CAAC;CACrB;;AAED,SAAS,YAAY,CAAC,GAAG,EAAE;EACzBF,GAAK,CAAC,aAAa,GAAG,GAAG,CAAC,UAAU,EAAE,GAAG,uBAAuB,CAAC,GAAG,CAAC,CAAC;EACtE,OAAO,QAAQ,CAAC,aAAa,GAAG,eAAe,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC;CAC3D;;AAED,SAAS,uBAAuB,CAAC,GAAG,EAAE;EACpCA,GAAK,CAAC,YAAY,GAAG,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;EAC3E,IAAI,OAAO,CAAC,KAAK,EAAE,GAAG,GAAG,EAAE;;IAEzB,OAAO,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;GACnC;EACD,OAAO,YAAY,CAAC;CACrB;;AAED,SAAS,eAAe,GAAG;EACzB,SAAS,CAAC,OAAO,CAAC,UAAC,QAAQ,EAAK;IAC9B,IAAI,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,kBAAkB,CAAC,EAAE;MAC7C,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;MACjC,QAAQ,CAAC,OAAO,GAAG,oBAAoB,CAAC,QAAQ,CAAC,CAAC;KACnD,MAAM;MACL,QAAQ,CAAC,OAAO,GAAG,oBAAoB,CAAC,QAAQ,CAAC,CAAC;KACnD;GACF,CAAC,CAAC;CACJ;;AAED,SAAS,iBAAiB,GAAG;EAC3B,SAAS,CAAC,OAAO,CAAC,UAAC,QAAQ,EAAK;IAC9BA,GAAK,CAAC,eAAe,GAAG,eAAe,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;IACtD,IAAI,eAAe,IAAI,QAAQ,CAAC,YAAY,IAAI,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,iCAAiC,CAAC,EAAE;MACpG,YAAY,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;MAC/B,QAAQ,CAAC,YAAY,GAAG,eAAe,CAAC;MACxC,IAAI,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,kBAAkB,CAAC,EAAE;QAC7C,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;QACjC,QAAQ,CAAC,OAAO,GAAG,oBAAoB,CAAC,QAAQ,CAAC,CAAC;OACnD,MAAM;QACL,QAAQ,CAAC,OAAO,GAAG,oBAAoB,CAAC,QAAQ,CAAC,CAAC;OACnD;KACF;GACF,CAAC,CAAC;CACJ;;AAED,SAAS,iCAAiC,GAAG;EAC3C,MAAM,CAAC,YAAY,CAAC,aAAa,CAAC,CAAC;EACnC,aAAa,GAAG,MAAM,CAAC,UAAU,CAAC,wBAAwB,EAAE,EAAE,CAAC,CAAC;CACjE;;AAED,SAAS,wBAAwB,GAAG;EAClCA,GAAK,CAAC,iBAAiB,GAAG,OAAO,CAAC,SAAS,EAAE,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;EACtE,SAAS,CAAC,OAAO,CAAC,UAAC,QAAQ,EAAK;IAC9B,IAAI,QAAQ,CAAC,YAAY,KAAK,CAAC,EAAE;MAC/B,OAAO;KACR;IACD,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,yBAAyB,CAAC,IAAI,QAAQ,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,GAAG,GAAG,iBAAiB,GAAG,GAAG,EAAE;MACxG,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,yBAAyB,EAAE,IAAI,CAAC,CAAC;MACnD,YAAY,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;MAC/B,QAAQ,CAAC,OAAO,GAAG,oBAAoB,CAAC,QAAQ,CAAC,CAAC;KACnD;GACF,CAAC,CAAC;CACJ;;AAED,SAAS,cAAc,GAAG;EACxBA,GAAK,CAAC,IAAI,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC;EACzB,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,CAAC,MAAM,EAAE;IACpC,OAAO;GACR;EACD,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE;IACrBA,GAAK,CAAC,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;IACpB,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,mBAAmB,CAAC,EAAE;MAClC,GAAG,CAAC,IAAI,CAAC,mBAAmB,EAAE,IAAI,CAAC,CAAC;MACpC,SAAS,CAAC,IAAI,CAAC;QACb,GAAG,EAAE,GAAG;QACR,YAAY,EAAE,eAAe,CAAC,GAAG,CAAC;QAClC,MAAM,EAAE,GAAG,CAAC,QAAQ,EAAE,CAAC,MAAM;QAC7B,OAAO,EAAE,IAAI;QACb,QAAQ,EAAE,IAAI;OACf,CAAC,CAAC;MACH,oBAAoB,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;;MAEnC,SAAS,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,sBAAsB,EAAE,YAAY;QAC3E,SAAS,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,iCAAiC,EAAE,IAAI,CAAC,CAAC;QAC/D,eAAe,EAAE,CAAC;OACnB,CAAC,CAAC;;MAEH,SAAS,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,wBAAwB,EAAE,YAAY;QAC7E,SAAS,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,iCAAiC,EAAE,KAAK,CAAC,CAAC;QAChE,eAAe,EAAE,CAAC;OACnB,CAAC,CAAC;KACJ;GACF,CAAC,CAAC;CACJ;;AAED,SAAS,oBAAoB,CAAC,QAAQ,EAAE;EACtC,IAAI,QAAQ,CAAC,YAAY,KAAK,CAAC,IAAI,QAAQ,CAAC,MAAM,IAAI,CAAC,EAAE;IACvD,QAAQ,CAAC,GAAG,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;IACrC,QAAQ,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;IAC5C,OAAO;GACR;EACD,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;EAClC,IAAI,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,uBAAuB,CAAC,EAAE;IAC9C,QAAQ,CAAC,GAAG;OACT,QAAQ,EAAE;OACV,GAAG,CAAC,aAAa,CAAC;OAClB,GAAG,CAAC,aAAa,EAAE,EAAG,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,uBAAuB,CAAC,QAAG,CAAC,CAAC,CAAC;GAC1E;EACD,IAAI,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,kBAAkB,CAAC,EAAE;IAC7C,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;GAClC;EACD,YAAY,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;EAC/B,QAAQ,CAAC,OAAO,GAAG,UAAU,CAAC,YAAM,sBAAa,CAAC,QAAQ,CAAC,KAAE,GAAG,CAAC,CAAC;CACnE;;AAED,SAAS,aAAa,CAAC,QAAQ,EAAE;EAC/B,IAAI,OAAO,QAAQ,CAAC,GAAG,CAAC,QAAQ,KAAK,UAAU,EAAE;IAC/C,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,EAAG,YAAY,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAG,CAAC,CAAC,CAAC;IAC1F,QAAQ,CAAC,QAAQ,GAAG,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC;MACxC,SAAS,EAAE,MAAM;MACjB,UAAU,EAAE,QAAQ,CAAC,YAAY;KAClC,CAAC,CAAC;IACH,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,oBAAoB,EAAE,YAAM,iBAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,eAAe,EAAE,MAAM,CAAC,IAAC,CAAC;IACvF,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,kBAAkB,EAAE,YAAM,iBAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,eAAe,EAAE,MAAM,CAAC,IAAC,CAAC;GACtF;CACF;;AAEc,qEAAY;EACzB,OAAO,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC;EACpB,SAAS,GAAG,EAAE,CAAC;EACf,cAAc,EAAE,CAAC;EACjB,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,iBAAiB,CAAC,CAAC;EACxC,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,iCAAiC,CAAC,CAAC;CACzD;;;;;;;;;ACrJDA,4CAAK,CAAC,aAAa,GAAG,gBAAgB,CAAC;AACvCA,GAAK,CAAC,kBAAkB,GAAG,eAAe,CAAC;AAC3C,SAAS,gBAAgB,GAAG;EAC1B,CAAC,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,YAAY;IAChC,UAAU,CAAC,kBACN,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,SAAS,CAAC;MACjC,eAAc,EAAE,IAAI,EACrB,CAAC,CAAC;GACJ,CAAC,CAAC;CACJ;;AAED,SAAS,cAAc,GAAG;EACxB,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,OAAO,EAAE,CAAG,aAAa,OAAG,CAAC,EAAE,UAAU,CAAC,EAAE;IACzD,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC;GACzE,CAAC,CAAC;;EAEH,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,iBAAiB,EAAE,UAAU,CAAC,EAAE;IAC7C,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE;MAC7B,MAAM,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;MAChC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;QACf,KAAK,EAAE,UAAU;QACjB,SAAS,EAAE;UACT,QAAQ,EAAE;YACR,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ;YAC1B,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY;YACnC,aAAa,EAAE,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY;YACzC,GAAG,EAAE,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,gBAAgB;YACnC,QAAQ,EAAE,CAAC;YACX,QAAQ,EAAE,CAAC;YACX,KAAK,EAAE;cACL;gBACE,EAAE,EAAE,KAAK;gBACT,IAAI,EAAE,KAAK;gBACX,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY;gBACjC,QAAQ,EAAE,CAAC;eACZ,CACH,CAAC;WACF;SACF;OACF,CAAC,CAAC;KACJ;GACF,CAAC,CAAC;CACJ;;AAED,SAAS,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE;EACjC,OAAO;IACL,QAAQ,EAAE,YAAY;IACtB,MAAM,EAAE,MAAM;IACd,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE;GACpD,CAAC;CACH;;AAED,SAAS,UAAU,CAAC,GAAwE,EAAE,CAAxE;MAAA,QAAQ,gBAAE;MAAA,MAAM,cAAU;yDAAA,IAAI,CAAU;yDAAA,IAAI,CAAmB;6FAAA,KAAK;AAAK;EAC7FA,GAAK,CAAC,KAAK,GAAG,UAAS,IAAE,cAAc,GAAG,kBAAkB,GAAG,EAAE,CAAE,CAAC;EACpEA,GAAK,CAAC,WAAW,GAAG;IAClB,YAAK;IACL,aAAa,EAAE,QAAQ;IACvB,WAAW,EAAE,MAAM;GACpB,CAAC;EACF,IAAI,KAAK,EAAE;IACT,WAAW,CAAC,UAAU,GAAG,KAAK,CAAC;GAChC;EACD,IAAI,KAAK,EAAE;IACT,WAAW,CAAC,UAAU,GAAG,KAAK,CAAC;GAChC;EACD,kBAAkB,CAAC,WAAW,CAAC,CAAC;CACjC;;AAED,SAAS,kBAAkB,CAAC,WAAW,EAAE;EACvC,MAAM,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS,IAAI,EAAE,CAAC;EAC1C,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;CACpC;;AAEc,qEAAY;EACzB,gBAAgB,EAAE,CAAC;EACnB,cAAc,EAAE,CAAC;CAClB;;;;;;;;;AC5EDA,4CAAK,CAAC,iBAAiB,GAAG,uBAAuB,CAAC;AAClDA,GAAK,CAAC,kBAAkB,GAAG,kCAAkC,CAAC;;AAE9D,SAAS,KAAK,GAAG;;EAEf,CAAC,CAAC,YAAU,GAAE,iBAAiB,CAAE,CAAC,CAAC,MAAM,EAAE,CAAC;;EAE5C,CAAC,CAAC,CAAG,iBAAiB,iBAAa,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;;EAE/C,IAAI,OAAO,MAAM,CAAC,gBAAgB,KAAK,UAAU,EAAE;IACjDA,GAAK,CAAC,yBAAyB,GAAG,MAAM,CAAC,kBAAkB,IAAI,MAAM,CAAC,kBAAkB,CAAC,yBAAyB,CAAC;IACnHA,GAAK,CAAC,oBAAoB,GAAG,CAAC,CAAC,IAAE,GAAE,yBAAyB,MAAE,GAAE,iBAAiB,CAAE,CAAC,CAAC,MAAM,CAAC;IAC5F,IAAI,oBAAoB,EAAE;MACxB,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,iCAAiC,EAAE,YAAY;QAC1D,MAAM,CAAC,gBAAgB,EAAE,CAAC;OAC3B,CAAC,CAAC;KACJ,MAAM;MACL,MAAM,CAAC,gBAAgB,EAAE,CAAC;KAC3B;GACF;;;EAGD,CAAC,CAAC,kBAAkB,CAAC,CAAC,IAAI,CAAC,YAAY;IACrCA,GAAK,CAAC,KAAK,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;IACtB;MACE,MAAM,CAAC,kBAAkB;MACzB,MAAM,CAAC,kBAAkB,CAAC,yBAAyB;MACnD,KAAK,CAAC,OAAO,CAAC,GAAG,GAAG,MAAM,CAAC,kBAAkB,CAAC,yBAAyB,CAAC,CAAC,MAAM;MAC/E;MACA,OAAO;KACR;IACD,eAAe,CAAC,KAAK,CAAC,CAAC;GACxB,CAAC,CAAC;;;EAGH,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,iCAAiC,EAAE,UAAU,CAAC,EAAE,iBAAiB,EAAE;IAC9E,iBAAiB,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,IAAI,CAAC,YAAY;MAC1D,eAAe,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;KAC1B,CAAC,CAAC;GACJ,CAAC,CAAC;;EAEH,UAAU,CAAC,YAAY;IACrB,gBAAgB,EAAE,CAAC;GACpB,EAAE,IAAI,CAAC,CAAC;CACV;;AAED,SAAS,eAAe,CAAC,GAAG,EAAE;EAC5B,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE;IACrB,OAAO;GACR;EACDA,GAAK,CAAC,IAAI,GAAG,GAAG,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;EAClE,IAAI,CAAC,IAAI,EAAE;IACT,OAAO;GACR;EACD,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY;IACpC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;GAChC,CAAC,CAAC;CACJ;;AAED,SAAS,gBAAgB,GAAG;EAC1B,CAAC,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,YAAY;IACjCA,GAAK,CAAC,KAAK,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;;IAEtB,IAAI,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM,IAAI,CAAC,EAAE;MACpC,OAAO;KACR;;;IAGDA,GAAK,CAAC,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC7CE,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC5C,IAAI,CAAC,GAAG,CAAC,EAAE;;MAETA,GAAG,CAAC,KAAK,GAAG,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC;;MAErC,IAAI,KAAK,IAAI,CAAC,EAAE;QACd,KAAK,GAAG,CAAC,CAAC;OACX;;;MAGD,IAAI,KAAK,CAAC,QAAQ,CAAC,sBAAsB,CAAC,EAAE;;QAE1CF,GAAK,CAAC,WAAW,GAAG,KAAK,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;QAC5D,CAAC,GAAG,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,WAAW,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,WAAW,EAAE,CAAC;QAChF,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC;UACvB,WAAW,EAAE,MAAM;SACpB,CAAC,CAAC;QACH,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,GAAG,CAAC;UAC3B,SAAS,EAAE,QAAQ,GAAG,KAAK,GAAG,GAAG;UACjC,kBAAkB,EAAE,KAAK;SAC1B,CAAC,CAAC;QACH,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC;UACV,eAAe,EAAE,MAAM;SACxB,CAAC,CAAC;OACJ,MAAM,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,uBAAuB,CAAC,EAAE;;QAEnD,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,GAAG,CAAC;UAC7B,SAAS,EAAE,QAAQ,GAAG,KAAK,GAAG,GAAG;UACjC,kBAAkB,EAAE,KAAK;SAC1B,CAAC,CAAC;;QAEH,KAAK,CAAC,GAAG,CAAC;UACR,MAAM,EAAE,gBAAgB;SACzB,CAAC,CAAC;OACJ;;MAED,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC;QACvB,KAAK,EAAE,CAAC,GAAG,IAAI;OAChB,CAAC,CAAC;;;MAGH,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC;KACzB;GACF,CAAC,CAAC;CACJ;;AAEc,qEAAY;EACzB,KAAK,EAAE,CAAC;EACR,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,QAAQ,EAAE,gBAAgB,CAAC,CAAC;CAC1C;;;;;;;;;ACtHDE,4CAAG,CAAC,OAAO,CAAC;;AAEZ,SAAS,qBAAqB,CAAC,YAAY,EAAE;EAC3C,OAAO,CAAC,OAAO,CAAC,qBAAqB,EAAE,YAAY,CAAC,CAAC;EACrD,OAAO,CAAC,EAAE,CAAC,iCAAiC,EAAE,YAAM;IAClD,CAAC,CAAC,YAAY,CAAC,CAAC,OAAO;MACrB;QACE,SAAS,EAAE,CAAC,CAAC,gBAAgB,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,GAAG,GAAG;OAClD;MACD,GAAG;KACJ,CAAC;IACF,uBAAuB,EAAE,CAAC;GAC3B,CAAC,CAAC;EACHF,GAAK,CAAC,UAAU,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;EACrD,IAAI,UAAU,EAAE;IACdA,GAAK,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC;IAC1C,OAAO,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,EAAE,CAAG,QAAQ,SAAK,GAAE,UAAU,CAAE,CAAC,CAAC;IAC1D,MAAM,CAAC,UAAU,CAAC,YAAM,gBAAO,CAAC,YAAY,CAAC,EAAE,EAAE,EAAE,EAAE,QAAQ,CAAC,KAAE,IAAI,CAAC,CAAC;GACvE;CACF;;AAED,SAAS,uBAAuB,GAAG;EACjC,IAAI,CAAC,MAAM,CAAC,kBAAkB,IAAI,CAAC,MAAM,CAAC,kBAAkB,CAAC,yBAAyB,EAAE;IACtF,OAAO;GACR;EACD,CAAC,CAAC,GAAG,GAAG,MAAM,CAAC,kBAAkB,CAAC,yBAAyB,CAAC,CAAC,IAAI,CAAC,YAAY;IAC5EA,GAAK,CAAC,YAAY,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;IAC7BA,GAAK,CAAC,KAAK,GAAG,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACxC,IAAI,KAAK,IAAI,KAAK,CAAC,MAAM,EAAE;MACzB,KAAK,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC;MACjC,YAAY,CAAC,MAAM,EAAE,CAAC;KACvB;GACF,CAAC,CAAC;CACJ;;AAED,MAAM,CAAC,OAAO,GAAG,uBAAuB,CAAC;;AAE1B,qEAAY;EACzB,OAAO,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC;;EAEpB,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,iBAAiB,EAAE,UAAU,CAAC,EAAE;IAC7C,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE;MAC7B,MAAM,CAAC,UAAU,CAAC,YAAY;QAC5B,qBAAqB,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;OACtC,EAAE,IAAI,CAAC,CAAC;KACV;GACF,CAAC,CAAC;;EAEH,OAAO,CAAC,EAAE,CAAC,gCAAgC,EAAE,UAAC,CAAC,EAAE,gBAAgB,EAAK;IACpE,CAAC,CAAC,gBAAgB,CAAC,CAAC,IAAI,CAAC,YAAY;MACnCA,GAAK,CAAC,YAAY,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;MAC7B,YAAY,CAAC,IAAI,CAAC,MAAM,EAAE,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;MACpDE,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC;MACd,YAAY,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC,YAAY;QACvC,IAAI,KAAK,GAAG,CAAC,EAAE;UACb,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC;SAClB;QACD,KAAK,EAAE,CAAC;OACT,CAAC,CAAC;KACJ,CAAC,CAAC;GACJ,CAAC,CAAC;CACJ;;;;;;;;;AC7DDF,4CAAK,CAAC,eAAe,GAAG,0BAA0B,CAAC;AACnDA,GAAK,CAAC,aAAa,GAAG,sBAAsB,CAAC;AAC7CA,GAAK,CAAC,kBAAkB,GAAG,wBAAwB,CAAC;AACpDA,GAAK,CAAC,YAAY,GAAG,YAAY,CAAC;;AAElC,SAAS,iBAAiB,CAAC,CAAC,EAAE;EAC5B,CAAC,CAAC,cAAc,EAAE,CAAC;EACnBA,GAAK,CAAC,QAAQ,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;EACzBA,GAAK,CAAC,MAAM,GAAG,QAAQ,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;EAC/CA,GAAK,CAAC,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;EACpDA,GAAK,CAAC,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;;EAExC,IAAI,WAAW,CAAC,MAAM,EAAE;IACtB,CAAC,CAAC,IAAI,CAAC;MACL,IAAI,EAAE,KAAK;MACX,GAAG,EAAE,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC;MAC7B,OAAO,EAAE,UAAU,QAAQ,EAAE;QAC3BA,GAAK,CAAC,eAAe,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,yBAAsB,IAAE,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,SAAG,CAAC,CAAC,CAAC;QACnG,KAAK,CAAC,MAAM,CAAC,eAAe,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;QACxDA,GAAK,CAAC,eAAe,GAAG,eAAe,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;QACjE,IAAI,eAAe,CAAC,MAAM,EAAE;UAC1B,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;SACxD,MAAM;UACL,QAAQ,CAAC,MAAM,EAAE,CAAC;SACnB;OACF;KACF,CAAC,CAAC;GACJ;CACF;;AAEc,qEAAY;EACzB,CAAC,CAAC,eAAe,CAAC,CAAC,EAAE,CAAC,OAAO,EAAE,iBAAiB,CAAC,CAAC;CACnD;;;;;;;;;AChCc;EACb,IAAI,kBAAG;;GAEN;EACD,QAAQ,sBAAG;;GAEV;CACF,EAAC;;;;;;;;ACPa;EACb,IAAI,kBAAG;;GAEN;CACF,EAAC;;;;;;;;ACJF,yCAAe;EACb,UAAU,EAAE,CAAC,CAAC,aAAa,CAAC;EAC5B,MAAM,EAAE,CAAC,CAAC,qBAAqB,CAAC;EAChC,MAAM,EAAE,IAAI,MAAM,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;EAC5D,IAAI,EAAE,EAAE;EACR,MAAM,EAAE,CAAC,CAAC,qBAAqB,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC;EAC/C,UAAU,EAAE,CAAC,CAAC,qBAAqB,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC;EACxD,eAAe,EAAE,CAAC,CAAC,qBAAqB,CAAC,CAAC,IAAI,CAAC,mBAAmB,CAAC;EACnE,WAAW,EAAE,CAAC,CAAC,qBAAqB,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC;;EAE3D,IAAI,kBAAG;IACLA,GAAK,CAAC,KAAK,GAAG,IAAI,CAAC;IACnB,KAAK,CAAC,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;;IAExE,KAAK,CAAC,SAAS,EAAE,CAAC;IAClB,KAAK,CAAC,mBAAmB,EAAE,CAAC;GAC7B;;EAED,SAAS,uBAAG;IACVA,GAAK,CAAC,KAAK,GAAG,IAAI,CAAC;IACnB,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,OAAO,EAAE,UAAU,CAAC,EAAE;MACvC,CAAC,CAAC,cAAc,EAAE,CAAC;MACnB,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC;MACpC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;KACvC,CAAC,CAAC;;IAEH,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,OAAO,EAAE,KAAK,CAAC,MAAM,GAAG,GAAG,GAAG,KAAK,CAAC,UAAU,EAAE,YAAY;MACvEA,GAAK,CAAC,KAAK,GAAG;QACZ,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;QAC1B,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE;QAC7B,IAAI,EAAE,KAAK,CAAC,IAAI;OACjB,CAAC;;MAEF,OAAO,CAAC,SAAS,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;KAC9B,CAAC,CAAC;GACJ;;EAED,mBAAmB,iCAAG;IACpBA,GAAK,CAAC,KAAK,GAAG,IAAI,CAAC;IACnBE,GAAG,CAAC,YAAY,GAAG,OAAO,CAAC,KAAK,CAAC;IACjC,IAAI,YAAY,IAAI,YAAY,CAAC,IAAI,KAAK,CAAC,EAAE;MAC3C,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;MACzC,KAAK,CAAC,IAAI,GAAG,YAAY,CAAC,IAAI,CAAC;;MAE/B,UAAU,CAAC,YAAY;QACrB,CAAC,CAAC,YAAY,CAAC,CAAC,OAAO;UACrB;YACE,SAAS,EAAE,CAAC,CAAC,GAAG,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,GAAG,EAAE;WAC1D;UACD,CAAC;SACF,CAAC;OACH,EAAE,GAAG,CAAC,CAAC;;MAER,OAAO,CAAC,YAAY,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;KAC9B;GACF;;EAED,SAAS,qBAAC,WAAW,EAAE;IACrBF,GAAK,CAAC,KAAK,GAAG,IAAI,CAAC;IACnB,KAAK,CAAC,WAAW,CAAC;OACf,IAAI,CAAC,UAAC,QAAQ,EAAK,iBAAQ,CAAC,IAAI,EAAE,IAAC;OACnC,IAAI,CAAC,UAAC,QAAQ,EAAK;QAClB,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,WAAW,CAAC,iBAAiB,CAAC,CAAC;;QAE/C,KAAK,CAAC,IAAI,EAAE,CAAC;QACbA,GAAK,CAAC,YAAY,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,GAAG,GAAG,KAAK,CAAC,UAAU,CAAC,CAAC;QAC7EA,GAAK,CAAC,MAAM,GAAG,CAAC,CAAC,uBAAuB,EAAE,YAAY,CAAC,CAAC;;;QAGxD,YAAY,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,eAAe,CAAC,CAAC;;QAElD,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;QACrC,MAAM,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;;QAEnC,OAAO,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,EAAE,WAAW,CAAC,CAAC;QACvC,KAAK,CAAC,MAAM,CAAC,IAAI;UACf,MAAM;UACN,WAAW,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,UAAU,KAAK,EAAE;YACjD,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;WACzC,CAAC;SACH,CAAC;;QAEF,IAAI,KAAK,CAAC,IAAI,GAAG,KAAK,CAAC,WAAW,EAAE;UAClC,KAAK,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;SACzB;OACF,CAAC,CAAC;GACN;CACF,EAAC;;;;;;;;ACvFF,yC","file":"scripts/main.js","sourcesContent":[" \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, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\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 = \"/app/themes/fof/dist/\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 1);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap a1ddb444f56bddb70bf1","module.exports = jQuery;\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"jQuery\"\n// module id = 0\n// module chunks = 0 1","// import external dependencies\nimport 'jquery';\nimport '../../../node_modules/flickity/dist/flickity.pkgd';\n\n// import local dependencies\nimport Router from './util/Router';\nimport common from './routes/common';\nimport home from './routes/home';\nimport aboutUs from './routes/about';\nimport hasPager from './routes/pager';\n\n/** Populate Router instance with DOM routes */\nconst routes = new Router({\n // All pages\n common,\n // Home page\n home,\n // About Us page, note the change from about-us to aboutUs.\n aboutUs,\n // Pager\n hasPager,\n});\n\n// Load Events\njQuery(document).ready(() => routes.loadEvents());\n\n\n\n// WEBPACK FOOTER //\n// ./scripts/main.js","/*!\n * Flickity PACKAGED v2.3.0\n * Touch, responsive, flickable carousels\n *\n * Licensed GPLv3 for open source use\n * or Flickity Commercial License for commercial use\n *\n * https://flickity.metafizzy.co\n * Copyright 2015-2021 Metafizzy\n */\n\n/**\n * Bridget makes jQuery widgets\n * v2.0.1\n * MIT license\n */\n\n/* jshint browser: true, strict: true, undef: true, unused: true */\n\n( function( window, factory ) {\n // universal module definition\n /*jshint strict: false */ /* globals define, module, require */\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( 'jquery-bridget/jquery-bridget',[ 'jquery' ], function( jQuery ) {\n return factory( window, jQuery );\n });\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n window,\n require('jquery')\n );\n } else {\n // browser global\n window.jQueryBridget = factory(\n window,\n window.jQuery\n );\n }\n\n}( window, function factory( window, jQuery ) {\n'use strict';\n\n// ----- utils ----- //\n\nvar arraySlice = Array.prototype.slice;\n\n// helper function for logging errors\n// $.error breaks jQuery chaining\nvar console = window.console;\nvar logError = typeof console == 'undefined' ? function() {} :\n function( message ) {\n console.error( message );\n };\n\n// ----- jQueryBridget ----- //\n\nfunction jQueryBridget( namespace, PluginClass, $ ) {\n $ = $ || jQuery || window.jQuery;\n if ( !$ ) {\n return;\n }\n\n // add option method -> $().plugin('option', {...})\n if ( !PluginClass.prototype.option ) {\n // option setter\n PluginClass.prototype.option = function( opts ) {\n // bail out if not an object\n if ( !$.isPlainObject( opts ) ){\n return;\n }\n this.options = $.extend( true, this.options, opts );\n };\n }\n\n // make jQuery plugin\n $.fn[ namespace ] = function( arg0 /*, arg1 */ ) {\n if ( typeof arg0 == 'string' ) {\n // method call $().plugin( 'methodName', { options } )\n // shift arguments by 1\n var args = arraySlice.call( arguments, 1 );\n return methodCall( this, arg0, args );\n }\n // just $().plugin({ options })\n plainCall( this, arg0 );\n return this;\n };\n\n // $().plugin('methodName')\n function methodCall( $elems, methodName, args ) {\n var returnValue;\n var pluginMethodStr = '$().' + namespace + '(\"' + methodName + '\")';\n\n $elems.each( function( i, elem ) {\n // get instance\n var instance = $.data( elem, namespace );\n if ( !instance ) {\n logError( namespace + ' not initialized. Cannot call methods, i.e. ' +\n pluginMethodStr );\n return;\n }\n\n var method = instance[ methodName ];\n if ( !method || methodName.charAt(0) == '_' ) {\n logError( pluginMethodStr + ' is not a valid method' );\n return;\n }\n\n // apply method, get return value\n var value = method.apply( instance, args );\n // set return value if value is returned, use only first value\n returnValue = returnValue === undefined ? value : returnValue;\n });\n\n return returnValue !== undefined ? returnValue : $elems;\n }\n\n function plainCall( $elems, options ) {\n $elems.each( function( i, elem ) {\n var instance = $.data( elem, namespace );\n if ( instance ) {\n // set options & init\n instance.option( options );\n instance._init();\n } else {\n // initialize new instance\n instance = new PluginClass( elem, options );\n $.data( elem, namespace, instance );\n }\n });\n }\n\n updateJQuery( $ );\n\n}\n\n// ----- updateJQuery ----- //\n\n// set $.bridget for v1 backwards compatibility\nfunction updateJQuery( $ ) {\n if ( !$ || ( $ && $.bridget ) ) {\n return;\n }\n $.bridget = jQueryBridget;\n}\n\nupdateJQuery( jQuery || window.jQuery );\n\n// ----- ----- //\n\nreturn jQueryBridget;\n\n}));\n\n/**\n * EvEmitter v1.1.0\n * Lil' event emitter\n * MIT License\n */\n\n/* jshint unused: true, undef: true, strict: true */\n\n( function( global, factory ) {\n // universal module definition\n /* jshint strict: false */ /* globals define, module, window */\n if ( typeof define == 'function' && define.amd ) {\n // AMD - RequireJS\n define( 'ev-emitter/ev-emitter',factory );\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS - Browserify, Webpack\n module.exports = factory();\n } else {\n // Browser globals\n global.EvEmitter = factory();\n }\n\n}( typeof window != 'undefined' ? window : this, function() {\n\n\n\nfunction EvEmitter() {}\n\nvar proto = EvEmitter.prototype;\n\nproto.on = function( eventName, listener ) {\n if ( !eventName || !listener ) {\n return;\n }\n // set events hash\n var events = this._events = this._events || {};\n // set listeners array\n var listeners = events[ eventName ] = events[ eventName ] || [];\n // only add once\n if ( listeners.indexOf( listener ) == -1 ) {\n listeners.push( listener );\n }\n\n return this;\n};\n\nproto.once = function( eventName, listener ) {\n if ( !eventName || !listener ) {\n return;\n }\n // add event\n this.on( eventName, listener );\n // set once flag\n // set onceEvents hash\n var onceEvents = this._onceEvents = this._onceEvents || {};\n // set onceListeners object\n var onceListeners = onceEvents[ eventName ] = onceEvents[ eventName ] || {};\n // set flag\n onceListeners[ listener ] = true;\n\n return this;\n};\n\nproto.off = function( eventName, listener ) {\n var listeners = this._events && this._events[ eventName ];\n if ( !listeners || !listeners.length ) {\n return;\n }\n var index = listeners.indexOf( listener );\n if ( index != -1 ) {\n listeners.splice( index, 1 );\n }\n\n return this;\n};\n\nproto.emitEvent = function( eventName, args ) {\n var listeners = this._events && this._events[ eventName ];\n if ( !listeners || !listeners.length ) {\n return;\n }\n // copy over to avoid interference if .off() in listener\n listeners = listeners.slice(0);\n args = args || [];\n // once stuff\n var onceListeners = this._onceEvents && this._onceEvents[ eventName ];\n\n for ( var i=0; i < listeners.length; i++ ) {\n var listener = listeners[i]\n var isOnce = onceListeners && onceListeners[ listener ];\n if ( isOnce ) {\n // remove listener\n // remove before trigger to prevent recursion\n this.off( eventName, listener );\n // unset once flag\n delete onceListeners[ listener ];\n }\n // trigger listener\n listener.apply( this, args );\n }\n\n return this;\n};\n\nproto.allOff = function() {\n delete this._events;\n delete this._onceEvents;\n};\n\nreturn EvEmitter;\n\n}));\n\n/*!\n * getSize v2.0.3\n * measure size of elements\n * MIT license\n */\n\n/* jshint browser: true, strict: true, undef: true, unused: true */\n/* globals console: false */\n\n( function( window, factory ) {\n /* jshint strict: false */ /* globals define, module */\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( 'get-size/get-size',factory );\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory();\n } else {\n // browser global\n window.getSize = factory();\n }\n\n})( window, function factory() {\n'use strict';\n\n// -------------------------- helpers -------------------------- //\n\n// get a number from a string, not a percentage\nfunction getStyleSize( value ) {\n var num = parseFloat( value );\n // not a percent like '100%', and a number\n var isValid = value.indexOf('%') == -1 && !isNaN( num );\n return isValid && num;\n}\n\nfunction noop() {}\n\nvar logError = typeof console == 'undefined' ? noop :\n function( message ) {\n console.error( message );\n };\n\n// -------------------------- measurements -------------------------- //\n\nvar measurements = [\n 'paddingLeft',\n 'paddingRight',\n 'paddingTop',\n 'paddingBottom',\n 'marginLeft',\n 'marginRight',\n 'marginTop',\n 'marginBottom',\n 'borderLeftWidth',\n 'borderRightWidth',\n 'borderTopWidth',\n 'borderBottomWidth'\n];\n\nvar measurementsLength = measurements.length;\n\nfunction getZeroSize() {\n var size = {\n width: 0,\n height: 0,\n innerWidth: 0,\n innerHeight: 0,\n outerWidth: 0,\n outerHeight: 0\n };\n for ( var i=0; i < measurementsLength; i++ ) {\n var measurement = measurements[i];\n size[ measurement ] = 0;\n }\n return size;\n}\n\n// -------------------------- getStyle -------------------------- //\n\n/**\n * getStyle, get style of element, check for Firefox bug\n * https://bugzilla.mozilla.org/show_bug.cgi?id=548397\n */\nfunction getStyle( elem ) {\n var style = getComputedStyle( elem );\n if ( !style ) {\n logError( 'Style returned ' + style +\n '. Are you running this code in a hidden iframe on Firefox? ' +\n 'See https://bit.ly/getsizebug1' );\n }\n return style;\n}\n\n// -------------------------- setup -------------------------- //\n\nvar isSetup = false;\n\nvar isBoxSizeOuter;\n\n/**\n * setup\n * check isBoxSizerOuter\n * do on first getSize() rather than on page load for Firefox bug\n */\nfunction setup() {\n // setup once\n if ( isSetup ) {\n return;\n }\n isSetup = true;\n\n // -------------------------- box sizing -------------------------- //\n\n /**\n * Chrome & Safari measure the outer-width on style.width on border-box elems\n * IE11 & Firefox<29 measures the inner-width\n */\n var div = document.createElement('div');\n div.style.width = '200px';\n div.style.padding = '1px 2px 3px 4px';\n div.style.borderStyle = 'solid';\n div.style.borderWidth = '1px 2px 3px 4px';\n div.style.boxSizing = 'border-box';\n\n var body = document.body || document.documentElement;\n body.appendChild( div );\n var style = getStyle( div );\n // round value for browser zoom. desandro/masonry#928\n isBoxSizeOuter = Math.round( getStyleSize( style.width ) ) == 200;\n getSize.isBoxSizeOuter = isBoxSizeOuter;\n\n body.removeChild( div );\n}\n\n// -------------------------- getSize -------------------------- //\n\nfunction getSize( elem ) {\n setup();\n\n // use querySeletor if elem is string\n if ( typeof elem == 'string' ) {\n elem = document.querySelector( elem );\n }\n\n // do not proceed on non-objects\n if ( !elem || typeof elem != 'object' || !elem.nodeType ) {\n return;\n }\n\n var style = getStyle( elem );\n\n // if hidden, everything is 0\n if ( style.display == 'none' ) {\n return getZeroSize();\n }\n\n var size = {};\n size.width = elem.offsetWidth;\n size.height = elem.offsetHeight;\n\n var isBorderBox = size.isBorderBox = style.boxSizing == 'border-box';\n\n // get all measurements\n for ( var i=0; i < measurementsLength; i++ ) {\n var measurement = measurements[i];\n var value = style[ measurement ];\n var num = parseFloat( value );\n // any 'auto', 'medium' value will be 0\n size[ measurement ] = !isNaN( num ) ? num : 0;\n }\n\n var paddingWidth = size.paddingLeft + size.paddingRight;\n var paddingHeight = size.paddingTop + size.paddingBottom;\n var marginWidth = size.marginLeft + size.marginRight;\n var marginHeight = size.marginTop + size.marginBottom;\n var borderWidth = size.borderLeftWidth + size.borderRightWidth;\n var borderHeight = size.borderTopWidth + size.borderBottomWidth;\n\n var isBorderBoxSizeOuter = isBorderBox && isBoxSizeOuter;\n\n // overwrite width and height if we can get it from style\n var styleWidth = getStyleSize( style.width );\n if ( styleWidth !== false ) {\n size.width = styleWidth +\n // add padding and border unless it's already including it\n ( isBorderBoxSizeOuter ? 0 : paddingWidth + borderWidth );\n }\n\n var styleHeight = getStyleSize( style.height );\n if ( styleHeight !== false ) {\n size.height = styleHeight +\n // add padding and border unless it's already including it\n ( isBorderBoxSizeOuter ? 0 : paddingHeight + borderHeight );\n }\n\n size.innerWidth = size.width - ( paddingWidth + borderWidth );\n size.innerHeight = size.height - ( paddingHeight + borderHeight );\n\n size.outerWidth = size.width + marginWidth;\n size.outerHeight = size.height + marginHeight;\n\n return size;\n}\n\nreturn getSize;\n\n});\n\n/**\n * matchesSelector v2.0.2\n * matchesSelector( element, '.selector' )\n * MIT license\n */\n\n/*jshint browser: true, strict: true, undef: true, unused: true */\n\n( function( window, factory ) {\n /*global define: false, module: false */\n 'use strict';\n // universal module definition\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( 'desandro-matches-selector/matches-selector',factory );\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory();\n } else {\n // browser global\n window.matchesSelector = factory();\n }\n\n}( window, function factory() {\n 'use strict';\n\n var matchesMethod = ( function() {\n var ElemProto = window.Element.prototype;\n // check for the standard method name first\n if ( ElemProto.matches ) {\n return 'matches';\n }\n // check un-prefixed\n if ( ElemProto.matchesSelector ) {\n return 'matchesSelector';\n }\n // check vendor prefixes\n var prefixes = [ 'webkit', 'moz', 'ms', 'o' ];\n\n for ( var i=0; i < prefixes.length; i++ ) {\n var prefix = prefixes[i];\n var method = prefix + 'MatchesSelector';\n if ( ElemProto[ method ] ) {\n return method;\n }\n }\n })();\n\n return function matchesSelector( elem, selector ) {\n return elem[ matchesMethod ]( selector );\n };\n\n}));\n\n/**\n * Fizzy UI utils v2.0.7\n * MIT license\n */\n\n/*jshint browser: true, undef: true, unused: true, strict: true */\n\n( function( window, factory ) {\n // universal module definition\n /*jshint strict: false */ /*globals define, module, require */\n\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( 'fizzy-ui-utils/utils',[\n 'desandro-matches-selector/matches-selector'\n ], function( matchesSelector ) {\n return factory( window, matchesSelector );\n });\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n window,\n require('desandro-matches-selector')\n );\n } else {\n // browser global\n window.fizzyUIUtils = factory(\n window,\n window.matchesSelector\n );\n }\n\n}( window, function factory( window, matchesSelector ) {\n\n\n\nvar utils = {};\n\n// ----- extend ----- //\n\n// extends objects\nutils.extend = function( a, b ) {\n for ( var prop in b ) {\n a[ prop ] = b[ prop ];\n }\n return a;\n};\n\n// ----- modulo ----- //\n\nutils.modulo = function( num, div ) {\n return ( ( num % div ) + div ) % div;\n};\n\n// ----- makeArray ----- //\n\nvar arraySlice = Array.prototype.slice;\n\n// turn element or nodeList into an array\nutils.makeArray = function( obj ) {\n if ( Array.isArray( obj ) ) {\n // use object if already an array\n return obj;\n }\n // return empty array if undefined or null. #6\n if ( obj === null || obj === undefined ) {\n return [];\n }\n\n var isArrayLike = typeof obj == 'object' && typeof obj.length == 'number';\n if ( isArrayLike ) {\n // convert nodeList to array\n return arraySlice.call( obj );\n }\n\n // array of single index\n return [ obj ];\n};\n\n// ----- removeFrom ----- //\n\nutils.removeFrom = function( ary, obj ) {\n var index = ary.indexOf( obj );\n if ( index != -1 ) {\n ary.splice( index, 1 );\n }\n};\n\n// ----- getParent ----- //\n\nutils.getParent = function( elem, selector ) {\n while ( elem.parentNode && elem != document.body ) {\n elem = elem.parentNode;\n if ( matchesSelector( elem, selector ) ) {\n return elem;\n }\n }\n};\n\n// ----- getQueryElement ----- //\n\n// use element as selector string\nutils.getQueryElement = function( elem ) {\n if ( typeof elem == 'string' ) {\n return document.querySelector( elem );\n }\n return elem;\n};\n\n// ----- handleEvent ----- //\n\n// enable .ontype to trigger from .addEventListener( elem, 'type' )\nutils.handleEvent = function( event ) {\n var method = 'on' + event.type;\n if ( this[ method ] ) {\n this[ method ]( event );\n }\n};\n\n// ----- filterFindElements ----- //\n\nutils.filterFindElements = function( elems, selector ) {\n // make array of elems\n elems = utils.makeArray( elems );\n var ffElems = [];\n\n elems.forEach( function( elem ) {\n // check that elem is an actual element\n if ( !( elem instanceof HTMLElement ) ) {\n return;\n }\n // add elem if no selector\n if ( !selector ) {\n ffElems.push( elem );\n return;\n }\n // filter & find items if we have a selector\n // filter\n if ( matchesSelector( elem, selector ) ) {\n ffElems.push( elem );\n }\n // find children\n var childElems = elem.querySelectorAll( selector );\n // concat childElems to filterFound array\n for ( var i=0; i < childElems.length; i++ ) {\n ffElems.push( childElems[i] );\n }\n });\n\n return ffElems;\n};\n\n// ----- debounceMethod ----- //\n\nutils.debounceMethod = function( _class, methodName, threshold ) {\n threshold = threshold || 100;\n // original method\n var method = _class.prototype[ methodName ];\n var timeoutName = methodName + 'Timeout';\n\n _class.prototype[ methodName ] = function() {\n var timeout = this[ timeoutName ];\n clearTimeout( timeout );\n\n var args = arguments;\n var _this = this;\n this[ timeoutName ] = setTimeout( function() {\n method.apply( _this, args );\n delete _this[ timeoutName ];\n }, threshold );\n };\n};\n\n// ----- docReady ----- //\n\nutils.docReady = function( callback ) {\n var readyState = document.readyState;\n if ( readyState == 'complete' || readyState == 'interactive' ) {\n // do async to allow for other scripts to run. metafizzy/flickity#441\n setTimeout( callback );\n } else {\n document.addEventListener( 'DOMContentLoaded', callback );\n }\n};\n\n// ----- htmlInit ----- //\n\n// http://jamesroberts.name/blog/2010/02/22/string-functions-for-javascript-trim-to-camel-case-to-dashed-and-to-underscore/\nutils.toDashed = function( str ) {\n return str.replace( /(.)([A-Z])/g, function( match, $1, $2 ) {\n return $1 + '-' + $2;\n }).toLowerCase();\n};\n\nvar console = window.console;\n/**\n * allow user to initialize classes via [data-namespace] or .js-namespace class\n * htmlInit( Widget, 'widgetName' )\n * options are parsed from data-namespace-options\n */\nutils.htmlInit = function( WidgetClass, namespace ) {\n utils.docReady( function() {\n var dashedNamespace = utils.toDashed( namespace );\n var dataAttr = 'data-' + dashedNamespace;\n var dataAttrElems = document.querySelectorAll( '[' + dataAttr + ']' );\n var jsDashElems = document.querySelectorAll( '.js-' + dashedNamespace );\n var elems = utils.makeArray( dataAttrElems )\n .concat( utils.makeArray( jsDashElems ) );\n var dataOptionsAttr = dataAttr + '-options';\n var jQuery = window.jQuery;\n\n elems.forEach( function( elem ) {\n var attr = elem.getAttribute( dataAttr ) ||\n elem.getAttribute( dataOptionsAttr );\n var options;\n try {\n options = attr && JSON.parse( attr );\n } catch ( error ) {\n // log error, do not initialize\n if ( console ) {\n console.error( 'Error parsing ' + dataAttr + ' on ' + elem.className +\n ': ' + error );\n }\n return;\n }\n // initialize\n var instance = new WidgetClass( elem, options );\n // make available via $().data('namespace')\n if ( jQuery ) {\n jQuery.data( elem, namespace, instance );\n }\n });\n\n });\n};\n\n// ----- ----- //\n\nreturn utils;\n\n}));\n\n// Flickity.Cell\n( function( window, factory ) {\n // universal module definition\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( 'flickity/js/cell',[\n 'get-size/get-size',\n ], function( getSize ) {\n return factory( window, getSize );\n } );\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n window,\n require('get-size')\n );\n } else {\n // browser global\n window.Flickity = window.Flickity || {};\n window.Flickity.Cell = factory(\n window,\n window.getSize\n );\n }\n\n}( window, function factory( window, getSize ) {\n\n\n\nfunction Cell( elem, parent ) {\n this.element = elem;\n this.parent = parent;\n\n this.create();\n}\n\nvar proto = Cell.prototype;\n\nproto.create = function() {\n this.element.style.position = 'absolute';\n this.element.setAttribute( 'aria-hidden', 'true' );\n this.x = 0;\n this.shift = 0;\n this.element.style[ this.parent.originSide ] = 0;\n};\n\nproto.destroy = function() {\n // reset style\n this.unselect();\n this.element.style.position = '';\n var side = this.parent.originSide;\n this.element.style[ side ] = '';\n this.element.style.transform = '';\n this.element.removeAttribute('aria-hidden');\n};\n\nproto.getSize = function() {\n this.size = getSize( this.element );\n};\n\nproto.setPosition = function( x ) {\n this.x = x;\n this.updateTarget();\n this.renderPosition( x );\n};\n\n// setDefaultTarget v1 method, backwards compatibility, remove in v3\nproto.updateTarget = proto.setDefaultTarget = function() {\n var marginProperty = this.parent.originSide == 'left' ? 'marginLeft' : 'marginRight';\n this.target = this.x + this.size[ marginProperty ] +\n this.size.width * this.parent.cellAlign;\n};\n\nproto.renderPosition = function( x ) {\n // render position of cell with in slider\n var sideOffset = this.parent.originSide === 'left' ? 1 : -1;\n\n var adjustedX = this.parent.options.percentPosition ?\n x * sideOffset * ( this.parent.size.innerWidth / this.size.width ) :\n x * sideOffset;\n\n this.element.style.transform = 'translateX(' +\n this.parent.getPositionValue( adjustedX ) + ')';\n};\n\nproto.select = function() {\n this.element.classList.add('is-selected');\n this.element.removeAttribute('aria-hidden');\n};\n\nproto.unselect = function() {\n this.element.classList.remove('is-selected');\n this.element.setAttribute( 'aria-hidden', 'true' );\n};\n\n/**\n * @param {Integer} shift - 0, 1, or -1\n */\nproto.wrapShift = function( shift ) {\n this.shift = shift;\n this.renderPosition( this.x + this.parent.slideableWidth * shift );\n};\n\nproto.remove = function() {\n this.element.parentNode.removeChild( this.element );\n};\n\nreturn Cell;\n\n} ) );\n\n// slide\n( function( window, factory ) {\n // universal module definition\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( 'flickity/js/slide',factory );\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory();\n } else {\n // browser global\n window.Flickity = window.Flickity || {};\n window.Flickity.Slide = factory();\n }\n\n}( window, function factory() {\n'use strict';\n\nfunction Slide( parent ) {\n this.parent = parent;\n this.isOriginLeft = parent.originSide == 'left';\n this.cells = [];\n this.outerWidth = 0;\n this.height = 0;\n}\n\nvar proto = Slide.prototype;\n\nproto.addCell = function( cell ) {\n this.cells.push( cell );\n this.outerWidth += cell.size.outerWidth;\n this.height = Math.max( cell.size.outerHeight, this.height );\n // first cell stuff\n if ( this.cells.length == 1 ) {\n this.x = cell.x; // x comes from first cell\n var beginMargin = this.isOriginLeft ? 'marginLeft' : 'marginRight';\n this.firstMargin = cell.size[ beginMargin ];\n }\n};\n\nproto.updateTarget = function() {\n var endMargin = this.isOriginLeft ? 'marginRight' : 'marginLeft';\n var lastCell = this.getLastCell();\n var lastMargin = lastCell ? lastCell.size[ endMargin ] : 0;\n var slideWidth = this.outerWidth - ( this.firstMargin + lastMargin );\n this.target = this.x + this.firstMargin + slideWidth * this.parent.cellAlign;\n};\n\nproto.getLastCell = function() {\n return this.cells[ this.cells.length - 1 ];\n};\n\nproto.select = function() {\n this.cells.forEach( function( cell ) {\n cell.select();\n } );\n};\n\nproto.unselect = function() {\n this.cells.forEach( function( cell ) {\n cell.unselect();\n } );\n};\n\nproto.getCellElements = function() {\n return this.cells.map( function( cell ) {\n return cell.element;\n } );\n};\n\nreturn Slide;\n\n} ) );\n\n// animate\n( function( window, factory ) {\n // universal module definition\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( 'flickity/js/animate',[\n 'fizzy-ui-utils/utils',\n ], function( utils ) {\n return factory( window, utils );\n } );\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n window,\n require('fizzy-ui-utils')\n );\n } else {\n // browser global\n window.Flickity = window.Flickity || {};\n window.Flickity.animatePrototype = factory(\n window,\n window.fizzyUIUtils\n );\n }\n\n}( window, function factory( window, utils ) {\n\n\n\n// -------------------------- animate -------------------------- //\n\nvar proto = {};\n\nproto.startAnimation = function() {\n if ( this.isAnimating ) {\n return;\n }\n\n this.isAnimating = true;\n this.restingFrames = 0;\n this.animate();\n};\n\nproto.animate = function() {\n this.applyDragForce();\n this.applySelectedAttraction();\n\n var previousX = this.x;\n\n this.integratePhysics();\n this.positionSlider();\n this.settle( previousX );\n // animate next frame\n if ( this.isAnimating ) {\n var _this = this;\n requestAnimationFrame( function animateFrame() {\n _this.animate();\n } );\n }\n};\n\nproto.positionSlider = function() {\n var x = this.x;\n // wrap position around\n if ( this.options.wrapAround && this.cells.length > 1 ) {\n x = utils.modulo( x, this.slideableWidth );\n x -= this.slideableWidth;\n this.shiftWrapCells( x );\n }\n\n this.setTranslateX( x, this.isAnimating );\n this.dispatchScrollEvent();\n};\n\nproto.setTranslateX = function( x, is3d ) {\n x += this.cursorPosition;\n // reverse if right-to-left and using transform\n x = this.options.rightToLeft ? -x : x;\n var translateX = this.getPositionValue( x );\n // use 3D transforms for hardware acceleration on iOS\n // but use 2D when settled, for better font-rendering\n this.slider.style.transform = is3d ?\n 'translate3d(' + translateX + ',0,0)' : 'translateX(' + translateX + ')';\n};\n\nproto.dispatchScrollEvent = function() {\n var firstSlide = this.slides[0];\n if ( !firstSlide ) {\n return;\n }\n var positionX = -this.x - firstSlide.target;\n var progress = positionX / this.slidesWidth;\n this.dispatchEvent( 'scroll', null, [ progress, positionX ] );\n};\n\nproto.positionSliderAtSelected = function() {\n if ( !this.cells.length ) {\n return;\n }\n this.x = -this.selectedSlide.target;\n this.velocity = 0; // stop wobble\n this.positionSlider();\n};\n\nproto.getPositionValue = function( position ) {\n if ( this.options.percentPosition ) {\n // percent position, round to 2 digits, like 12.34%\n return ( Math.round( ( position / this.size.innerWidth ) * 10000 ) * 0.01 ) + '%';\n } else {\n // pixel positioning\n return Math.round( position ) + 'px';\n }\n};\n\nproto.settle = function( previousX ) {\n // keep track of frames where x hasn't moved\n var isResting = !this.isPointerDown &&\n Math.round( this.x * 100 ) == Math.round( previousX * 100 );\n if ( isResting ) {\n this.restingFrames++;\n }\n // stop animating if resting for 3 or more frames\n if ( this.restingFrames > 2 ) {\n this.isAnimating = false;\n delete this.isFreeScrolling;\n // render position with translateX when settled\n this.positionSlider();\n this.dispatchEvent( 'settle', null, [ this.selectedIndex ] );\n }\n};\n\nproto.shiftWrapCells = function( x ) {\n // shift before cells\n var beforeGap = this.cursorPosition + x;\n this._shiftCells( this.beforeShiftCells, beforeGap, -1 );\n // shift after cells\n var afterGap = this.size.innerWidth - ( x + this.slideableWidth + this.cursorPosition );\n this._shiftCells( this.afterShiftCells, afterGap, 1 );\n};\n\nproto._shiftCells = function( cells, gap, shift ) {\n for ( var i = 0; i < cells.length; i++ ) {\n var cell = cells[i];\n var cellShift = gap > 0 ? shift : 0;\n cell.wrapShift( cellShift );\n gap -= cell.size.outerWidth;\n }\n};\n\nproto._unshiftCells = function( cells ) {\n if ( !cells || !cells.length ) {\n return;\n }\n for ( var i = 0; i < cells.length; i++ ) {\n cells[i].wrapShift( 0 );\n }\n};\n\n// -------------------------- physics -------------------------- //\n\nproto.integratePhysics = function() {\n this.x += this.velocity;\n this.velocity *= this.getFrictionFactor();\n};\n\nproto.applyForce = function( force ) {\n this.velocity += force;\n};\n\nproto.getFrictionFactor = function() {\n return 1 - this.options[ this.isFreeScrolling ? 'freeScrollFriction' : 'friction' ];\n};\n\nproto.getRestingPosition = function() {\n // my thanks to Steven Wittens, who simplified this math greatly\n return this.x + this.velocity / ( 1 - this.getFrictionFactor() );\n};\n\nproto.applyDragForce = function() {\n if ( !this.isDraggable || !this.isPointerDown ) {\n return;\n }\n // change the position to drag position by applying force\n var dragVelocity = this.dragX - this.x;\n var dragForce = dragVelocity - this.velocity;\n this.applyForce( dragForce );\n};\n\nproto.applySelectedAttraction = function() {\n // do not attract if pointer down or no slides\n var dragDown = this.isDraggable && this.isPointerDown;\n if ( dragDown || this.isFreeScrolling || !this.slides.length ) {\n return;\n }\n var distance = this.selectedSlide.target * -1 - this.x;\n var force = distance * this.options.selectedAttraction;\n this.applyForce( force );\n};\n\nreturn proto;\n\n} ) );\n\n// Flickity main\n/* eslint-disable max-params */\n( function( window, factory ) {\n // universal module definition\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( 'flickity/js/flickity',[\n 'ev-emitter/ev-emitter',\n 'get-size/get-size',\n 'fizzy-ui-utils/utils',\n './cell',\n './slide',\n './animate',\n ], function( EvEmitter, getSize, utils, Cell, Slide, animatePrototype ) {\n return factory( window, EvEmitter, getSize, utils, Cell, Slide, animatePrototype );\n } );\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n window,\n require('ev-emitter'),\n require('get-size'),\n require('fizzy-ui-utils'),\n require('./cell'),\n require('./slide'),\n require('./animate')\n );\n } else {\n // browser global\n var _Flickity = window.Flickity;\n\n window.Flickity = factory(\n window,\n window.EvEmitter,\n window.getSize,\n window.fizzyUIUtils,\n _Flickity.Cell,\n _Flickity.Slide,\n _Flickity.animatePrototype\n );\n }\n\n}( window, function factory( window, EvEmitter, getSize,\n utils, Cell, Slide, animatePrototype ) {\n\n/* eslint-enable max-params */\n\n\n// vars\nvar jQuery = window.jQuery;\nvar getComputedStyle = window.getComputedStyle;\nvar console = window.console;\n\nfunction moveElements( elems, toElem ) {\n elems = utils.makeArray( elems );\n while ( elems.length ) {\n toElem.appendChild( elems.shift() );\n }\n}\n\n// -------------------------- Flickity -------------------------- //\n\n// globally unique identifiers\nvar GUID = 0;\n// internal store of all Flickity intances\nvar instances = {};\n\nfunction Flickity( element, options ) {\n var queryElement = utils.getQueryElement( element );\n if ( !queryElement ) {\n if ( console ) {\n console.error( 'Bad element for Flickity: ' + ( queryElement || element ) );\n }\n return;\n }\n this.element = queryElement;\n // do not initialize twice on same element\n if ( this.element.flickityGUID ) {\n var instance = instances[ this.element.flickityGUID ];\n if ( instance ) instance.option( options );\n return instance;\n }\n\n // add jQuery\n if ( jQuery ) {\n this.$element = jQuery( this.element );\n }\n // options\n this.options = utils.extend( {}, this.constructor.defaults );\n this.option( options );\n\n // kick things off\n this._create();\n}\n\nFlickity.defaults = {\n accessibility: true,\n // adaptiveHeight: false,\n cellAlign: 'center',\n // cellSelector: undefined,\n // contain: false,\n freeScrollFriction: 0.075, // friction when free-scrolling\n friction: 0.28, // friction when selecting\n namespaceJQueryEvents: true,\n // initialIndex: 0,\n percentPosition: true,\n resize: true,\n selectedAttraction: 0.025,\n setGallerySize: true,\n // watchCSS: false,\n // wrapAround: false\n};\n\n// hash of methods triggered on _create()\nFlickity.createMethods = [];\n\nvar proto = Flickity.prototype;\n// inherit EventEmitter\nutils.extend( proto, EvEmitter.prototype );\n\nproto._create = function() {\n // add id for Flickity.data\n var id = this.guid = ++GUID;\n this.element.flickityGUID = id; // expando\n instances[ id ] = this; // associate via id\n // initial properties\n this.selectedIndex = 0;\n // how many frames slider has been in same position\n this.restingFrames = 0;\n // initial physics properties\n this.x = 0;\n this.velocity = 0;\n this.originSide = this.options.rightToLeft ? 'right' : 'left';\n // create viewport & slider\n this.viewport = document.createElement('div');\n this.viewport.className = 'flickity-viewport';\n this._createSlider();\n\n if ( this.options.resize || this.options.watchCSS ) {\n window.addEventListener( 'resize', this );\n }\n\n // add listeners from on option\n for ( var eventName in this.options.on ) {\n var listener = this.options.on[ eventName ];\n this.on( eventName, listener );\n }\n\n Flickity.createMethods.forEach( function( method ) {\n this[ method ]();\n }, this );\n\n if ( this.options.watchCSS ) {\n this.watchCSS();\n } else {\n this.activate();\n }\n\n};\n\n/**\n * set options\n * @param {Object} opts - options to extend\n */\nproto.option = function( opts ) {\n utils.extend( this.options, opts );\n};\n\nproto.activate = function() {\n if ( this.isActive ) {\n return;\n }\n this.isActive = true;\n this.element.classList.add('flickity-enabled');\n if ( this.options.rightToLeft ) {\n this.element.classList.add('flickity-rtl');\n }\n\n this.getSize();\n // move initial cell elements so they can be loaded as cells\n var cellElems = this._filterFindCellElements( this.element.children );\n moveElements( cellElems, this.slider );\n this.viewport.appendChild( this.slider );\n this.element.appendChild( this.viewport );\n // get cells from children\n this.reloadCells();\n\n if ( this.options.accessibility ) {\n // allow element to focusable\n this.element.tabIndex = 0;\n // listen for key presses\n this.element.addEventListener( 'keydown', this );\n }\n\n this.emitEvent('activate');\n this.selectInitialIndex();\n // flag for initial activation, for using initialIndex\n this.isInitActivated = true;\n // ready event. #493\n this.dispatchEvent('ready');\n};\n\n// slider positions the cells\nproto._createSlider = function() {\n // slider element does all the positioning\n var slider = document.createElement('div');\n slider.className = 'flickity-slider';\n slider.style[ this.originSide ] = 0;\n this.slider = slider;\n};\n\nproto._filterFindCellElements = function( elems ) {\n return utils.filterFindElements( elems, this.options.cellSelector );\n};\n\n// goes through all children\nproto.reloadCells = function() {\n // collection of item elements\n this.cells = this._makeCells( this.slider.children );\n this.positionCells();\n this._getWrapShiftCells();\n this.setGallerySize();\n};\n\n/**\n * turn elements into Flickity.Cells\n * @param {[Array, NodeList, HTMLElement]} elems - elements to make into cells\n * @returns {Array} items - collection of new Flickity Cells\n */\nproto._makeCells = function( elems ) {\n var cellElems = this._filterFindCellElements( elems );\n\n // create new Flickity for collection\n var cells = cellElems.map( function( cellElem ) {\n return new Cell( cellElem, this );\n }, this );\n\n return cells;\n};\n\nproto.getLastCell = function() {\n return this.cells[ this.cells.length - 1 ];\n};\n\nproto.getLastSlide = function() {\n return this.slides[ this.slides.length - 1 ];\n};\n\n// positions all cells\nproto.positionCells = function() {\n // size all cells\n this._sizeCells( this.cells );\n // position all cells\n this._positionCells( 0 );\n};\n\n/**\n * position certain cells\n * @param {Integer} index - which cell to start with\n */\nproto._positionCells = function( index ) {\n index = index || 0;\n // also measure maxCellHeight\n // start 0 if positioning all cells\n this.maxCellHeight = index ? this.maxCellHeight || 0 : 0;\n var cellX = 0;\n // get cellX\n if ( index > 0 ) {\n var startCell = this.cells[ index - 1 ];\n cellX = startCell.x + startCell.size.outerWidth;\n }\n var len = this.cells.length;\n for ( var i = index; i < len; i++ ) {\n var cell = this.cells[i];\n cell.setPosition( cellX );\n cellX += cell.size.outerWidth;\n this.maxCellHeight = Math.max( cell.size.outerHeight, this.maxCellHeight );\n }\n // keep track of cellX for wrap-around\n this.slideableWidth = cellX;\n // slides\n this.updateSlides();\n // contain slides target\n this._containSlides();\n // update slidesWidth\n this.slidesWidth = len ? this.getLastSlide().target - this.slides[0].target : 0;\n};\n\n/**\n * cell.getSize() on multiple cells\n * @param {Array} cells - cells to size\n */\nproto._sizeCells = function( cells ) {\n cells.forEach( function( cell ) {\n cell.getSize();\n } );\n};\n\n// -------------------------- -------------------------- //\n\nproto.updateSlides = function() {\n this.slides = [];\n if ( !this.cells.length ) {\n return;\n }\n\n var slide = new Slide( this );\n this.slides.push( slide );\n var isOriginLeft = this.originSide == 'left';\n var nextMargin = isOriginLeft ? 'marginRight' : 'marginLeft';\n\n var canCellFit = this._getCanCellFit();\n\n this.cells.forEach( function( cell, i ) {\n // just add cell if first cell in slide\n if ( !slide.cells.length ) {\n slide.addCell( cell );\n return;\n }\n\n var slideWidth = ( slide.outerWidth - slide.firstMargin ) +\n ( cell.size.outerWidth - cell.size[ nextMargin ] );\n\n if ( canCellFit.call( this, i, slideWidth ) ) {\n slide.addCell( cell );\n } else {\n // doesn't fit, new slide\n slide.updateTarget();\n\n slide = new Slide( this );\n this.slides.push( slide );\n slide.addCell( cell );\n }\n }, this );\n // last slide\n slide.updateTarget();\n // update .selectedSlide\n this.updateSelectedSlide();\n};\n\nproto._getCanCellFit = function() {\n var groupCells = this.options.groupCells;\n if ( !groupCells ) {\n return function() {\n return false;\n };\n } else if ( typeof groupCells == 'number' ) {\n // group by number. 3 -> [0,1,2], [3,4,5], ...\n var number = parseInt( groupCells, 10 );\n return function( i ) {\n return ( i % number ) !== 0;\n };\n }\n // default, group by width of slide\n // parse '75%\n var percentMatch = typeof groupCells == 'string' &&\n groupCells.match( /^(\\d+)%$/ );\n var percent = percentMatch ? parseInt( percentMatch[1], 10 ) / 100 : 1;\n return function( i, slideWidth ) {\n /* eslint-disable-next-line no-invalid-this */\n return slideWidth <= ( this.size.innerWidth + 1 ) * percent;\n };\n};\n\n// alias _init for jQuery plugin .flickity()\nproto._init =\nproto.reposition = function() {\n this.positionCells();\n this.positionSliderAtSelected();\n};\n\nproto.getSize = function() {\n this.size = getSize( this.element );\n this.setCellAlign();\n this.cursorPosition = this.size.innerWidth * this.cellAlign;\n};\n\nvar cellAlignShorthands = {\n // cell align, then based on origin side\n center: {\n left: 0.5,\n right: 0.5,\n },\n left: {\n left: 0,\n right: 1,\n },\n right: {\n right: 0,\n left: 1,\n },\n};\n\nproto.setCellAlign = function() {\n var shorthand = cellAlignShorthands[ this.options.cellAlign ];\n this.cellAlign = shorthand ? shorthand[ this.originSide ] : this.options.cellAlign;\n};\n\nproto.setGallerySize = function() {\n if ( this.options.setGallerySize ) {\n var height = this.options.adaptiveHeight && this.selectedSlide ?\n this.selectedSlide.height : this.maxCellHeight;\n this.viewport.style.height = height + 'px';\n }\n};\n\nproto._getWrapShiftCells = function() {\n // only for wrap-around\n if ( !this.options.wrapAround ) {\n return;\n }\n // unshift previous cells\n this._unshiftCells( this.beforeShiftCells );\n this._unshiftCells( this.afterShiftCells );\n // get before cells\n // initial gap\n var gapX = this.cursorPosition;\n var cellIndex = this.cells.length - 1;\n this.beforeShiftCells = this._getGapCells( gapX, cellIndex, -1 );\n // get after cells\n // ending gap between last cell and end of gallery viewport\n gapX = this.size.innerWidth - this.cursorPosition;\n // start cloning at first cell, working forwards\n this.afterShiftCells = this._getGapCells( gapX, 0, 1 );\n};\n\nproto._getGapCells = function( gapX, cellIndex, increment ) {\n // keep adding cells until the cover the initial gap\n var cells = [];\n while ( gapX > 0 ) {\n var cell = this.cells[ cellIndex ];\n if ( !cell ) {\n break;\n }\n cells.push( cell );\n cellIndex += increment;\n gapX -= cell.size.outerWidth;\n }\n return cells;\n};\n\n// ----- contain ----- //\n\n// contain cell targets so no excess sliding\nproto._containSlides = function() {\n if ( !this.options.contain || this.options.wrapAround || !this.cells.length ) {\n return;\n }\n var isRightToLeft = this.options.rightToLeft;\n var beginMargin = isRightToLeft ? 'marginRight' : 'marginLeft';\n var endMargin = isRightToLeft ? 'marginLeft' : 'marginRight';\n var contentWidth = this.slideableWidth - this.getLastCell().size[ endMargin ];\n // content is less than gallery size\n var isContentSmaller = contentWidth < this.size.innerWidth;\n // bounds\n var beginBound = this.cursorPosition + this.cells[0].size[ beginMargin ];\n var endBound = contentWidth - this.size.innerWidth * ( 1 - this.cellAlign );\n // contain each cell target\n this.slides.forEach( function( slide ) {\n if ( isContentSmaller ) {\n // all cells fit inside gallery\n slide.target = contentWidth * this.cellAlign;\n } else {\n // contain to bounds\n slide.target = Math.max( slide.target, beginBound );\n slide.target = Math.min( slide.target, endBound );\n }\n }, this );\n};\n\n// ----- ----- //\n\n/**\n * emits events via eventEmitter and jQuery events\n * @param {String} type - name of event\n * @param {Event} event - original event\n * @param {Array} args - extra arguments\n */\nproto.dispatchEvent = function( type, event, args ) {\n var emitArgs = event ? [ event ].concat( args ) : args;\n this.emitEvent( type, emitArgs );\n\n if ( jQuery && this.$element ) {\n // default trigger with type if no event\n type += this.options.namespaceJQueryEvents ? '.flickity' : '';\n var $event = type;\n if ( event ) {\n // create jQuery event\n var jQEvent = new jQuery.Event( event );\n jQEvent.type = type;\n $event = jQEvent;\n }\n this.$element.trigger( $event, args );\n }\n};\n\n// -------------------------- select -------------------------- //\n\n/**\n * @param {Integer} index - index of the slide\n * @param {Boolean} isWrap - will wrap-around to last/first if at the end\n * @param {Boolean} isInstant - will immediately set position at selected cell\n */\nproto.select = function( index, isWrap, isInstant ) {\n if ( !this.isActive ) {\n return;\n }\n index = parseInt( index, 10 );\n this._wrapSelect( index );\n\n if ( this.options.wrapAround || isWrap ) {\n index = utils.modulo( index, this.slides.length );\n }\n // bail if invalid index\n if ( !this.slides[ index ] ) {\n return;\n }\n var prevIndex = this.selectedIndex;\n this.selectedIndex = index;\n this.updateSelectedSlide();\n if ( isInstant ) {\n this.positionSliderAtSelected();\n } else {\n this.startAnimation();\n }\n if ( this.options.adaptiveHeight ) {\n this.setGallerySize();\n }\n // events\n this.dispatchEvent( 'select', null, [ index ] );\n // change event if new index\n if ( index != prevIndex ) {\n this.dispatchEvent( 'change', null, [ index ] );\n }\n // old v1 event name, remove in v3\n this.dispatchEvent('cellSelect');\n};\n\n// wraps position for wrapAround, to move to closest slide. #113\nproto._wrapSelect = function( index ) {\n var len = this.slides.length;\n var isWrapping = this.options.wrapAround && len > 1;\n if ( !isWrapping ) {\n return index;\n }\n var wrapIndex = utils.modulo( index, len );\n // go to shortest\n var delta = Math.abs( wrapIndex - this.selectedIndex );\n var backWrapDelta = Math.abs( ( wrapIndex + len ) - this.selectedIndex );\n var forewardWrapDelta = Math.abs( ( wrapIndex - len ) - this.selectedIndex );\n if ( !this.isDragSelect && backWrapDelta < delta ) {\n index += len;\n } else if ( !this.isDragSelect && forewardWrapDelta < delta ) {\n index -= len;\n }\n // wrap position so slider is within normal area\n if ( index < 0 ) {\n this.x -= this.slideableWidth;\n } else if ( index >= len ) {\n this.x += this.slideableWidth;\n }\n};\n\nproto.previous = function( isWrap, isInstant ) {\n this.select( this.selectedIndex - 1, isWrap, isInstant );\n};\n\nproto.next = function( isWrap, isInstant ) {\n this.select( this.selectedIndex + 1, isWrap, isInstant );\n};\n\nproto.updateSelectedSlide = function() {\n var slide = this.slides[ this.selectedIndex ];\n // selectedIndex could be outside of slides, if triggered before resize()\n if ( !slide ) {\n return;\n }\n // unselect previous selected slide\n this.unselectSelectedSlide();\n // update new selected slide\n this.selectedSlide = slide;\n slide.select();\n this.selectedCells = slide.cells;\n this.selectedElements = slide.getCellElements();\n // HACK: selectedCell & selectedElement is first cell in slide, backwards compatibility\n // Remove in v3?\n this.selectedCell = slide.cells[0];\n this.selectedElement = this.selectedElements[0];\n};\n\nproto.unselectSelectedSlide = function() {\n if ( this.selectedSlide ) {\n this.selectedSlide.unselect();\n }\n};\n\nproto.selectInitialIndex = function() {\n var initialIndex = this.options.initialIndex;\n // already activated, select previous selectedIndex\n if ( this.isInitActivated ) {\n this.select( this.selectedIndex, false, true );\n return;\n }\n // select with selector string\n if ( initialIndex && typeof initialIndex == 'string' ) {\n var cell = this.queryCell( initialIndex );\n if ( cell ) {\n this.selectCell( initialIndex, false, true );\n return;\n }\n }\n\n var index = 0;\n // select with number\n if ( initialIndex && this.slides[ initialIndex ] ) {\n index = initialIndex;\n }\n // select instantly\n this.select( index, false, true );\n};\n\n/**\n * select slide from number or cell element\n * @param {[Element, Number]} value - zero-based index or element to select\n * @param {Boolean} isWrap - enables wrapping around for extra index\n * @param {Boolean} isInstant - disables slide animation\n */\nproto.selectCell = function( value, isWrap, isInstant ) {\n // get cell\n var cell = this.queryCell( value );\n if ( !cell ) {\n return;\n }\n\n var index = this.getCellSlideIndex( cell );\n this.select( index, isWrap, isInstant );\n};\n\nproto.getCellSlideIndex = function( cell ) {\n // get index of slides that has cell\n for ( var i = 0; i < this.slides.length; i++ ) {\n var slide = this.slides[i];\n var index = slide.cells.indexOf( cell );\n if ( index != -1 ) {\n return i;\n }\n }\n};\n\n// -------------------------- get cells -------------------------- //\n\n/**\n * get Flickity.Cell, given an Element\n * @param {Element} elem - matching cell element\n * @returns {Flickity.Cell} cell - matching cell\n */\nproto.getCell = function( elem ) {\n // loop through cells to get the one that matches\n for ( var i = 0; i < this.cells.length; i++ ) {\n var cell = this.cells[i];\n if ( cell.element == elem ) {\n return cell;\n }\n }\n};\n\n/**\n * get collection of Flickity.Cells, given Elements\n * @param {[Element, Array, NodeList]} elems - multiple elements\n * @returns {Array} cells - Flickity.Cells\n */\nproto.getCells = function( elems ) {\n elems = utils.makeArray( elems );\n var cells = [];\n elems.forEach( function( elem ) {\n var cell = this.getCell( elem );\n if ( cell ) {\n cells.push( cell );\n }\n }, this );\n return cells;\n};\n\n/**\n * get cell elements\n * @returns {Array} cellElems\n */\nproto.getCellElements = function() {\n return this.cells.map( function( cell ) {\n return cell.element;\n } );\n};\n\n/**\n * get parent cell from an element\n * @param {Element} elem - child element\n * @returns {Flickit.Cell} cell - parent cell\n */\nproto.getParentCell = function( elem ) {\n // first check if elem is cell\n var cell = this.getCell( elem );\n if ( cell ) {\n return cell;\n }\n // try to get parent cell elem\n elem = utils.getParent( elem, '.flickity-slider > *' );\n return this.getCell( elem );\n};\n\n/**\n * get cells adjacent to a slide\n * @param {Integer} adjCount - number of adjacent slides\n * @param {Integer} index - index of slide to start\n * @returns {Array} cells - array of Flickity.Cells\n */\nproto.getAdjacentCellElements = function( adjCount, index ) {\n if ( !adjCount ) {\n return this.selectedSlide.getCellElements();\n }\n index = index === undefined ? this.selectedIndex : index;\n\n var len = this.slides.length;\n if ( 1 + ( adjCount * 2 ) >= len ) {\n return this.getCellElements();\n }\n\n var cellElems = [];\n for ( var i = index - adjCount; i <= index + adjCount; i++ ) {\n var slideIndex = this.options.wrapAround ? utils.modulo( i, len ) : i;\n var slide = this.slides[ slideIndex ];\n if ( slide ) {\n cellElems = cellElems.concat( slide.getCellElements() );\n }\n }\n return cellElems;\n};\n\n/**\n * select slide from number or cell element\n * @param {[Element, String, Number]} selector - element, selector string, or index\n * @returns {Flickity.Cell} - matching cell\n */\nproto.queryCell = function( selector ) {\n if ( typeof selector == 'number' ) {\n // use number as index\n return this.cells[ selector ];\n }\n if ( typeof selector == 'string' ) {\n // do not select invalid selectors from hash: #123, #/. #791\n if ( selector.match( /^[#.]?[\\d/]/ ) ) {\n return;\n }\n // use string as selector, get element\n selector = this.element.querySelector( selector );\n }\n // get cell from element\n return this.getCell( selector );\n};\n\n// -------------------------- events -------------------------- //\n\nproto.uiChange = function() {\n this.emitEvent('uiChange');\n};\n\n// keep focus on element when child UI elements are clicked\nproto.childUIPointerDown = function( event ) {\n // HACK iOS does not allow touch events to bubble up?!\n if ( event.type != 'touchstart' ) {\n event.preventDefault();\n }\n this.focus();\n};\n\n// ----- resize ----- //\n\nproto.onresize = function() {\n this.watchCSS();\n this.resize();\n};\n\nutils.debounceMethod( Flickity, 'onresize', 150 );\n\nproto.resize = function() {\n // #1177 disable resize behavior when animating or dragging for iOS 15\n if ( !this.isActive || this.isAnimating || this.isDragging ) {\n return;\n }\n this.getSize();\n // wrap values\n if ( this.options.wrapAround ) {\n this.x = utils.modulo( this.x, this.slideableWidth );\n }\n this.positionCells();\n this._getWrapShiftCells();\n this.setGallerySize();\n this.emitEvent('resize');\n // update selected index for group slides, instant\n // TODO: position can be lost between groups of various numbers\n var selectedElement = this.selectedElements && this.selectedElements[0];\n this.selectCell( selectedElement, false, true );\n};\n\n// watches the :after property, activates/deactivates\nproto.watchCSS = function() {\n var watchOption = this.options.watchCSS;\n if ( !watchOption ) {\n return;\n }\n\n var afterContent = getComputedStyle( this.element, ':after' ).content;\n // activate if :after { content: 'flickity' }\n if ( afterContent.indexOf('flickity') != -1 ) {\n this.activate();\n } else {\n this.deactivate();\n }\n};\n\n// ----- keydown ----- //\n\n// go previous/next if left/right keys pressed\nproto.onkeydown = function( event ) {\n // only work if element is in focus\n var isNotFocused = document.activeElement && document.activeElement != this.element;\n if ( !this.options.accessibility || isNotFocused ) {\n return;\n }\n\n var handler = Flickity.keyboardHandlers[ event.keyCode ];\n if ( handler ) {\n handler.call( this );\n }\n};\n\nFlickity.keyboardHandlers = {\n // left arrow\n 37: function() {\n var leftMethod = this.options.rightToLeft ? 'next' : 'previous';\n this.uiChange();\n this[ leftMethod ]();\n },\n // right arrow\n 39: function() {\n var rightMethod = this.options.rightToLeft ? 'previous' : 'next';\n this.uiChange();\n this[ rightMethod ]();\n },\n};\n\n// ----- focus ----- //\n\nproto.focus = function() {\n // TODO remove scrollTo once focus options gets more support\n // https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/focus ...\n // #Browser_compatibility\n var prevScrollY = window.pageYOffset;\n this.element.focus({ preventScroll: true });\n // hack to fix scroll jump after focus, #76\n if ( window.pageYOffset != prevScrollY ) {\n window.scrollTo( window.pageXOffset, prevScrollY );\n }\n};\n\n// -------------------------- destroy -------------------------- //\n\n// deactivate all Flickity functionality, but keep stuff available\nproto.deactivate = function() {\n if ( !this.isActive ) {\n return;\n }\n this.element.classList.remove('flickity-enabled');\n this.element.classList.remove('flickity-rtl');\n this.unselectSelectedSlide();\n // destroy cells\n this.cells.forEach( function( cell ) {\n cell.destroy();\n } );\n this.element.removeChild( this.viewport );\n // move child elements back into element\n moveElements( this.slider.children, this.element );\n if ( this.options.accessibility ) {\n this.element.removeAttribute('tabIndex');\n this.element.removeEventListener( 'keydown', this );\n }\n // set flags\n this.isActive = false;\n this.emitEvent('deactivate');\n};\n\nproto.destroy = function() {\n this.deactivate();\n window.removeEventListener( 'resize', this );\n this.allOff();\n this.emitEvent('destroy');\n if ( jQuery && this.$element ) {\n jQuery.removeData( this.element, 'flickity' );\n }\n delete this.element.flickityGUID;\n delete instances[ this.guid ];\n};\n\n// -------------------------- prototype -------------------------- //\n\nutils.extend( proto, animatePrototype );\n\n// -------------------------- extras -------------------------- //\n\n/**\n * get Flickity instance from element\n * @param {[Element, String]} elem - element or selector string\n * @returns {Flickity} - Flickity instance\n */\nFlickity.data = function( elem ) {\n elem = utils.getQueryElement( elem );\n var id = elem && elem.flickityGUID;\n return id && instances[ id ];\n};\n\nutils.htmlInit( Flickity, 'flickity' );\n\nif ( jQuery && jQuery.bridget ) {\n jQuery.bridget( 'flickity', Flickity );\n}\n\n// set internal jQuery, for Webpack + jQuery v3, #478\nFlickity.setJQuery = function( jq ) {\n jQuery = jq;\n};\n\nFlickity.Cell = Cell;\nFlickity.Slide = Slide;\n\nreturn Flickity;\n\n} ) );\n\n/*!\n * Unipointer v2.4.0\n * base class for doing one thing with pointer event\n * MIT license\n */\n\n/*jshint browser: true, undef: true, unused: true, strict: true */\n\n( function( window, factory ) {\n // universal module definition\n /* jshint strict: false */ /*global define, module, require */\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( 'unipointer/unipointer',[\n 'ev-emitter/ev-emitter'\n ], function( EvEmitter ) {\n return factory( window, EvEmitter );\n });\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n window,\n require('ev-emitter')\n );\n } else {\n // browser global\n window.Unipointer = factory(\n window,\n window.EvEmitter\n );\n }\n\n}( window, function factory( window, EvEmitter ) {\n\n\n\nfunction noop() {}\n\nfunction Unipointer() {}\n\n// inherit EvEmitter\nvar proto = Unipointer.prototype = Object.create( EvEmitter.prototype );\n\nproto.bindStartEvent = function( elem ) {\n this._bindStartEvent( elem, true );\n};\n\nproto.unbindStartEvent = function( elem ) {\n this._bindStartEvent( elem, false );\n};\n\n/**\n * Add or remove start event\n * @param {Boolean} isAdd - remove if falsey\n */\nproto._bindStartEvent = function( elem, isAdd ) {\n // munge isAdd, default to true\n isAdd = isAdd === undefined ? true : isAdd;\n var bindMethod = isAdd ? 'addEventListener' : 'removeEventListener';\n\n // default to mouse events\n var startEvent = 'mousedown';\n if ( 'ontouchstart' in window ) {\n // HACK prefer Touch Events as you can preventDefault on touchstart to\n // disable scroll in iOS & mobile Chrome metafizzy/flickity#1177\n startEvent = 'touchstart';\n } else if ( window.PointerEvent ) {\n // Pointer Events\n startEvent = 'pointerdown';\n }\n elem[ bindMethod ]( startEvent, this );\n};\n\n// trigger handler methods for events\nproto.handleEvent = function( event ) {\n var method = 'on' + event.type;\n if ( this[ method ] ) {\n this[ method ]( event );\n }\n};\n\n// returns the touch that we're keeping track of\nproto.getTouch = function( touches ) {\n for ( var i=0; i < touches.length; i++ ) {\n var touch = touches[i];\n if ( touch.identifier == this.pointerIdentifier ) {\n return touch;\n }\n }\n};\n\n// ----- start event ----- //\n\nproto.onmousedown = function( event ) {\n // dismiss clicks from right or middle buttons\n var button = event.button;\n if ( button && ( button !== 0 && button !== 1 ) ) {\n return;\n }\n this._pointerDown( event, event );\n};\n\nproto.ontouchstart = function( event ) {\n this._pointerDown( event, event.changedTouches[0] );\n};\n\nproto.onpointerdown = function( event ) {\n this._pointerDown( event, event );\n};\n\n/**\n * pointer start\n * @param {Event} event\n * @param {Event or Touch} pointer\n */\nproto._pointerDown = function( event, pointer ) {\n // dismiss right click and other pointers\n // button = 0 is okay, 1-4 not\n if ( event.button || this.isPointerDown ) {\n return;\n }\n\n this.isPointerDown = true;\n // save pointer identifier to match up touch events\n this.pointerIdentifier = pointer.pointerId !== undefined ?\n // pointerId for pointer events, touch.indentifier for touch events\n pointer.pointerId : pointer.identifier;\n\n this.pointerDown( event, pointer );\n};\n\nproto.pointerDown = function( event, pointer ) {\n this._bindPostStartEvents( event );\n this.emitEvent( 'pointerDown', [ event, pointer ] );\n};\n\n// hash of events to be bound after start event\nvar postStartEvents = {\n mousedown: [ 'mousemove', 'mouseup' ],\n touchstart: [ 'touchmove', 'touchend', 'touchcancel' ],\n pointerdown: [ 'pointermove', 'pointerup', 'pointercancel' ],\n};\n\nproto._bindPostStartEvents = function( event ) {\n if ( !event ) {\n return;\n }\n // get proper events to match start event\n var events = postStartEvents[ event.type ];\n // bind events to node\n events.forEach( function( eventName ) {\n window.addEventListener( eventName, this );\n }, this );\n // save these arguments\n this._boundPointerEvents = events;\n};\n\nproto._unbindPostStartEvents = function() {\n // check for _boundEvents, in case dragEnd triggered twice (old IE8 bug)\n if ( !this._boundPointerEvents ) {\n return;\n }\n this._boundPointerEvents.forEach( function( eventName ) {\n window.removeEventListener( eventName, this );\n }, this );\n\n delete this._boundPointerEvents;\n};\n\n// ----- move event ----- //\n\nproto.onmousemove = function( event ) {\n this._pointerMove( event, event );\n};\n\nproto.onpointermove = function( event ) {\n if ( event.pointerId == this.pointerIdentifier ) {\n this._pointerMove( event, event );\n }\n};\n\nproto.ontouchmove = function( event ) {\n var touch = this.getTouch( event.changedTouches );\n if ( touch ) {\n this._pointerMove( event, touch );\n }\n};\n\n/**\n * pointer move\n * @param {Event} event\n * @param {Event or Touch} pointer\n * @private\n */\nproto._pointerMove = function( event, pointer ) {\n this.pointerMove( event, pointer );\n};\n\n// public\nproto.pointerMove = function( event, pointer ) {\n this.emitEvent( 'pointerMove', [ event, pointer ] );\n};\n\n// ----- end event ----- //\n\n\nproto.onmouseup = function( event ) {\n this._pointerUp( event, event );\n};\n\nproto.onpointerup = function( event ) {\n if ( event.pointerId == this.pointerIdentifier ) {\n this._pointerUp( event, event );\n }\n};\n\nproto.ontouchend = function( event ) {\n var touch = this.getTouch( event.changedTouches );\n if ( touch ) {\n this._pointerUp( event, touch );\n }\n};\n\n/**\n * pointer up\n * @param {Event} event\n * @param {Event or Touch} pointer\n * @private\n */\nproto._pointerUp = function( event, pointer ) {\n this._pointerDone();\n this.pointerUp( event, pointer );\n};\n\n// public\nproto.pointerUp = function( event, pointer ) {\n this.emitEvent( 'pointerUp', [ event, pointer ] );\n};\n\n// ----- pointer done ----- //\n\n// triggered on pointer up & pointer cancel\nproto._pointerDone = function() {\n this._pointerReset();\n this._unbindPostStartEvents();\n this.pointerDone();\n};\n\nproto._pointerReset = function() {\n // reset properties\n this.isPointerDown = false;\n delete this.pointerIdentifier;\n};\n\nproto.pointerDone = noop;\n\n// ----- pointer cancel ----- //\n\nproto.onpointercancel = function( event ) {\n if ( event.pointerId == this.pointerIdentifier ) {\n this._pointerCancel( event, event );\n }\n};\n\nproto.ontouchcancel = function( event ) {\n var touch = this.getTouch( event.changedTouches );\n if ( touch ) {\n this._pointerCancel( event, touch );\n }\n};\n\n/**\n * pointer cancel\n * @param {Event} event\n * @param {Event or Touch} pointer\n * @private\n */\nproto._pointerCancel = function( event, pointer ) {\n this._pointerDone();\n this.pointerCancel( event, pointer );\n};\n\n// public\nproto.pointerCancel = function( event, pointer ) {\n this.emitEvent( 'pointerCancel', [ event, pointer ] );\n};\n\n// ----- ----- //\n\n// utility function for getting x/y coords from event\nUnipointer.getPointerPoint = function( pointer ) {\n return {\n x: pointer.pageX,\n y: pointer.pageY\n };\n};\n\n// ----- ----- //\n\nreturn Unipointer;\n\n}));\n\n/*!\n * Unidragger v2.4.0\n * Draggable base class\n * MIT license\n */\n\n/*jshint browser: true, unused: true, undef: true, strict: true */\n\n( function( window, factory ) {\n // universal module definition\n /*jshint strict: false */ /*globals define, module, require */\n\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( 'unidragger/unidragger',[\n 'unipointer/unipointer'\n ], function( Unipointer ) {\n return factory( window, Unipointer );\n });\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n window,\n require('unipointer')\n );\n } else {\n // browser global\n window.Unidragger = factory(\n window,\n window.Unipointer\n );\n }\n\n}( window, function factory( window, Unipointer ) {\n\n\n\n// -------------------------- Unidragger -------------------------- //\n\nfunction Unidragger() {}\n\n// inherit Unipointer & EvEmitter\nvar proto = Unidragger.prototype = Object.create( Unipointer.prototype );\n\n// ----- bind start ----- //\n\nproto.bindHandles = function() {\n this._bindHandles( true );\n};\n\nproto.unbindHandles = function() {\n this._bindHandles( false );\n};\n\n/**\n * Add or remove start event\n * @param {Boolean} isAdd\n */\nproto._bindHandles = function( isAdd ) {\n // munge isAdd, default to true\n isAdd = isAdd === undefined ? true : isAdd;\n // bind each handle\n var bindMethod = isAdd ? 'addEventListener' : 'removeEventListener';\n var touchAction = isAdd ? this._touchActionValue : '';\n for ( var i=0; i < this.handles.length; i++ ) {\n var handle = this.handles[i];\n this._bindStartEvent( handle, isAdd );\n handle[ bindMethod ]( 'click', this );\n // touch-action: none to override browser touch gestures. metafizzy/flickity#540\n if ( window.PointerEvent ) {\n handle.style.touchAction = touchAction;\n }\n }\n};\n\n// prototype so it can be overwriteable by Flickity\nproto._touchActionValue = 'none';\n\n// ----- start event ----- //\n\n/**\n * pointer start\n * @param {Event} event\n * @param {Event or Touch} pointer\n */\nproto.pointerDown = function( event, pointer ) {\n var isOkay = this.okayPointerDown( event );\n if ( !isOkay ) {\n return;\n }\n // track start event position\n // Safari 9 overrides pageX and pageY. These values needs to be copied. flickity#842\n this.pointerDownPointer = {\n pageX: pointer.pageX,\n pageY: pointer.pageY,\n };\n\n event.preventDefault();\n this.pointerDownBlur();\n // bind move and end events\n this._bindPostStartEvents( event );\n this.emitEvent( 'pointerDown', [ event, pointer ] );\n};\n\n// nodes that have text fields\nvar cursorNodes = {\n TEXTAREA: true,\n INPUT: true,\n SELECT: true,\n OPTION: true,\n};\n\n// input types that do not have text fields\nvar clickTypes = {\n radio: true,\n checkbox: true,\n button: true,\n submit: true,\n image: true,\n file: true,\n};\n\n// dismiss inputs with text fields. flickity#403, flickity#404\nproto.okayPointerDown = function( event ) {\n var isCursorNode = cursorNodes[ event.target.nodeName ];\n var isClickType = clickTypes[ event.target.type ];\n var isOkay = !isCursorNode || isClickType;\n if ( !isOkay ) {\n this._pointerReset();\n }\n return isOkay;\n};\n\n// kludge to blur previously focused input\nproto.pointerDownBlur = function() {\n var focused = document.activeElement;\n // do not blur body for IE10, metafizzy/flickity#117\n var canBlur = focused && focused.blur && focused != document.body;\n if ( canBlur ) {\n focused.blur();\n }\n};\n\n// ----- move event ----- //\n\n/**\n * drag move\n * @param {Event} event\n * @param {Event or Touch} pointer\n */\nproto.pointerMove = function( event, pointer ) {\n var moveVector = this._dragPointerMove( event, pointer );\n this.emitEvent( 'pointerMove', [ event, pointer, moveVector ] );\n this._dragMove( event, pointer, moveVector );\n};\n\n// base pointer move logic\nproto._dragPointerMove = function( event, pointer ) {\n var moveVector = {\n x: pointer.pageX - this.pointerDownPointer.pageX,\n y: pointer.pageY - this.pointerDownPointer.pageY\n };\n // start drag if pointer has moved far enough to start drag\n if ( !this.isDragging && this.hasDragStarted( moveVector ) ) {\n this._dragStart( event, pointer );\n }\n return moveVector;\n};\n\n// condition if pointer has moved far enough to start drag\nproto.hasDragStarted = function( moveVector ) {\n return Math.abs( moveVector.x ) > 3 || Math.abs( moveVector.y ) > 3;\n};\n\n// ----- end event ----- //\n\n/**\n * pointer up\n * @param {Event} event\n * @param {Event or Touch} pointer\n */\nproto.pointerUp = function( event, pointer ) {\n this.emitEvent( 'pointerUp', [ event, pointer ] );\n this._dragPointerUp( event, pointer );\n};\n\nproto._dragPointerUp = function( event, pointer ) {\n if ( this.isDragging ) {\n this._dragEnd( event, pointer );\n } else {\n // pointer didn't move enough for drag to start\n this._staticClick( event, pointer );\n }\n};\n\n// -------------------------- drag -------------------------- //\n\n// dragStart\nproto._dragStart = function( event, pointer ) {\n this.isDragging = true;\n // prevent clicks\n this.isPreventingClicks = true;\n this.dragStart( event, pointer );\n};\n\nproto.dragStart = function( event, pointer ) {\n this.emitEvent( 'dragStart', [ event, pointer ] );\n};\n\n// dragMove\nproto._dragMove = function( event, pointer, moveVector ) {\n // do not drag if not dragging yet\n if ( !this.isDragging ) {\n return;\n }\n\n this.dragMove( event, pointer, moveVector );\n};\n\nproto.dragMove = function( event, pointer, moveVector ) {\n event.preventDefault();\n this.emitEvent( 'dragMove', [ event, pointer, moveVector ] );\n};\n\n// dragEnd\nproto._dragEnd = function( event, pointer ) {\n // set flags\n this.isDragging = false;\n // re-enable clicking async\n setTimeout( function() {\n delete this.isPreventingClicks;\n }.bind( this ) );\n\n this.dragEnd( event, pointer );\n};\n\nproto.dragEnd = function( event, pointer ) {\n this.emitEvent( 'dragEnd', [ event, pointer ] );\n};\n\n// ----- onclick ----- //\n\n// handle all clicks and prevent clicks when dragging\nproto.onclick = function( event ) {\n if ( this.isPreventingClicks ) {\n event.preventDefault();\n }\n};\n\n// ----- staticClick ----- //\n\n// triggered after pointer down & up with no/tiny movement\nproto._staticClick = function( event, pointer ) {\n // ignore emulated mouse up clicks\n if ( this.isIgnoringMouseUp && event.type == 'mouseup' ) {\n return;\n }\n\n this.staticClick( event, pointer );\n\n // set flag for emulated clicks 300ms after touchend\n if ( event.type != 'mouseup' ) {\n this.isIgnoringMouseUp = true;\n // reset flag after 300ms\n setTimeout( function() {\n delete this.isIgnoringMouseUp;\n }.bind( this ), 400 );\n }\n};\n\nproto.staticClick = function( event, pointer ) {\n this.emitEvent( 'staticClick', [ event, pointer ] );\n};\n\n// ----- utils ----- //\n\nUnidragger.getPointerPoint = Unipointer.getPointerPoint;\n\n// ----- ----- //\n\nreturn Unidragger;\n\n}));\n\n// drag\n( function( window, factory ) {\n // universal module definition\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( 'flickity/js/drag',[\n './flickity',\n 'unidragger/unidragger',\n 'fizzy-ui-utils/utils',\n ], function( Flickity, Unidragger, utils ) {\n return factory( window, Flickity, Unidragger, utils );\n } );\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n window,\n require('./flickity'),\n require('unidragger'),\n require('fizzy-ui-utils')\n );\n } else {\n // browser global\n window.Flickity = factory(\n window,\n window.Flickity,\n window.Unidragger,\n window.fizzyUIUtils\n );\n }\n\n}( window, function factory( window, Flickity, Unidragger, utils ) {\n\n\n\n// ----- defaults ----- //\n\nutils.extend( Flickity.defaults, {\n draggable: '>1',\n dragThreshold: 3,\n} );\n\n// ----- create ----- //\n\nFlickity.createMethods.push('_createDrag');\n\n// -------------------------- drag prototype -------------------------- //\n\nvar proto = Flickity.prototype;\nutils.extend( proto, Unidragger.prototype );\nproto._touchActionValue = 'pan-y';\n\n// -------------------------- -------------------------- //\n\nproto._createDrag = function() {\n this.on( 'activate', this.onActivateDrag );\n this.on( 'uiChange', this._uiChangeDrag );\n this.on( 'deactivate', this.onDeactivateDrag );\n this.on( 'cellChange', this.updateDraggable );\n // TODO updateDraggable on resize? if groupCells & slides change\n};\n\nproto.onActivateDrag = function() {\n this.handles = [ this.viewport ];\n this.bindHandles();\n this.updateDraggable();\n};\n\nproto.onDeactivateDrag = function() {\n this.unbindHandles();\n this.element.classList.remove('is-draggable');\n};\n\nproto.updateDraggable = function() {\n // disable dragging if less than 2 slides. #278\n if ( this.options.draggable == '>1' ) {\n this.isDraggable = this.slides.length > 1;\n } else {\n this.isDraggable = this.options.draggable;\n }\n if ( this.isDraggable ) {\n this.element.classList.add('is-draggable');\n } else {\n this.element.classList.remove('is-draggable');\n }\n};\n\n// backwards compatibility\nproto.bindDrag = function() {\n this.options.draggable = true;\n this.updateDraggable();\n};\n\nproto.unbindDrag = function() {\n this.options.draggable = false;\n this.updateDraggable();\n};\n\nproto._uiChangeDrag = function() {\n delete this.isFreeScrolling;\n};\n\n// -------------------------- pointer events -------------------------- //\n\nproto.pointerDown = function( event, pointer ) {\n if ( !this.isDraggable ) {\n this._pointerDownDefault( event, pointer );\n return;\n }\n var isOkay = this.okayPointerDown( event );\n if ( !isOkay ) {\n return;\n }\n\n this._pointerDownPreventDefault( event );\n this.pointerDownFocus( event );\n // blur\n if ( document.activeElement != this.element ) {\n // do not blur if already focused\n this.pointerDownBlur();\n }\n\n // stop if it was moving\n this.dragX = this.x;\n this.viewport.classList.add('is-pointer-down');\n // track scrolling\n this.pointerDownScroll = getScrollPosition();\n window.addEventListener( 'scroll', this );\n\n this._pointerDownDefault( event, pointer );\n};\n\n// default pointerDown logic, used for staticClick\nproto._pointerDownDefault = function( event, pointer ) {\n // track start event position\n // Safari 9 overrides pageX and pageY. These values needs to be copied. #779\n this.pointerDownPointer = {\n pageX: pointer.pageX,\n pageY: pointer.pageY,\n };\n // bind move and end events\n this._bindPostStartEvents( event );\n this.dispatchEvent( 'pointerDown', event, [ pointer ] );\n};\n\nvar focusNodes = {\n INPUT: true,\n TEXTAREA: true,\n SELECT: true,\n};\n\nproto.pointerDownFocus = function( event ) {\n var isFocusNode = focusNodes[ event.target.nodeName ];\n if ( !isFocusNode ) {\n this.focus();\n }\n};\n\nproto._pointerDownPreventDefault = function( event ) {\n var isTouchStart = event.type == 'touchstart';\n var isTouchPointer = event.pointerType == 'touch';\n var isFocusNode = focusNodes[ event.target.nodeName ];\n if ( !isTouchStart && !isTouchPointer && !isFocusNode ) {\n event.preventDefault();\n }\n};\n\n// ----- move ----- //\n\nproto.hasDragStarted = function( moveVector ) {\n return Math.abs( moveVector.x ) > this.options.dragThreshold;\n};\n\n// ----- up ----- //\n\nproto.pointerUp = function( event, pointer ) {\n delete this.isTouchScrolling;\n this.viewport.classList.remove('is-pointer-down');\n this.dispatchEvent( 'pointerUp', event, [ pointer ] );\n this._dragPointerUp( event, pointer );\n};\n\nproto.pointerDone = function() {\n window.removeEventListener( 'scroll', this );\n delete this.pointerDownScroll;\n};\n\n// -------------------------- dragging -------------------------- //\n\nproto.dragStart = function( event, pointer ) {\n if ( !this.isDraggable ) {\n return;\n }\n this.dragStartPosition = this.x;\n this.startAnimation();\n window.removeEventListener( 'scroll', this );\n this.dispatchEvent( 'dragStart', event, [ pointer ] );\n};\n\nproto.pointerMove = function( event, pointer ) {\n var moveVector = this._dragPointerMove( event, pointer );\n this.dispatchEvent( 'pointerMove', event, [ pointer, moveVector ] );\n this._dragMove( event, pointer, moveVector );\n};\n\nproto.dragMove = function( event, pointer, moveVector ) {\n if ( !this.isDraggable ) {\n return;\n }\n event.preventDefault();\n\n this.previousDragX = this.dragX;\n // reverse if right-to-left\n var direction = this.options.rightToLeft ? -1 : 1;\n if ( this.options.wrapAround ) {\n // wrap around move. #589\n moveVector.x %= this.slideableWidth;\n }\n var dragX = this.dragStartPosition + moveVector.x * direction;\n\n if ( !this.options.wrapAround && this.slides.length ) {\n // slow drag\n var originBound = Math.max( -this.slides[0].target, this.dragStartPosition );\n dragX = dragX > originBound ? ( dragX + originBound ) * 0.5 : dragX;\n var endBound = Math.min( -this.getLastSlide().target, this.dragStartPosition );\n dragX = dragX < endBound ? ( dragX + endBound ) * 0.5 : dragX;\n }\n\n this.dragX = dragX;\n\n this.dragMoveTime = new Date();\n this.dispatchEvent( 'dragMove', event, [ pointer, moveVector ] );\n};\n\nproto.dragEnd = function( event, pointer ) {\n if ( !this.isDraggable ) {\n return;\n }\n if ( this.options.freeScroll ) {\n this.isFreeScrolling = true;\n }\n // set selectedIndex based on where flick will end up\n var index = this.dragEndRestingSelect();\n\n if ( this.options.freeScroll && !this.options.wrapAround ) {\n // if free-scroll & not wrap around\n // do not free-scroll if going outside of bounding slides\n // so bounding slides can attract slider, and keep it in bounds\n var restingX = this.getRestingPosition();\n this.isFreeScrolling = -restingX > this.slides[0].target &&\n -restingX < this.getLastSlide().target;\n } else if ( !this.options.freeScroll && index == this.selectedIndex ) {\n // boost selection if selected index has not changed\n index += this.dragEndBoostSelect();\n }\n delete this.previousDragX;\n // apply selection\n // TODO refactor this, selecting here feels weird\n // HACK, set flag so dragging stays in correct direction\n this.isDragSelect = this.options.wrapAround;\n this.select( index );\n delete this.isDragSelect;\n this.dispatchEvent( 'dragEnd', event, [ pointer ] );\n};\n\nproto.dragEndRestingSelect = function() {\n var restingX = this.getRestingPosition();\n // how far away from selected slide\n var distance = Math.abs( this.getSlideDistance( -restingX, this.selectedIndex ) );\n // get closet resting going up and going down\n var positiveResting = this._getClosestResting( restingX, distance, 1 );\n var negativeResting = this._getClosestResting( restingX, distance, -1 );\n // use closer resting for wrap-around\n var index = positiveResting.distance < negativeResting.distance ?\n positiveResting.index : negativeResting.index;\n return index;\n};\n\n/**\n * given resting X and distance to selected cell\n * get the distance and index of the closest cell\n * @param {Number} restingX - estimated post-flick resting position\n * @param {Number} distance - distance to selected cell\n * @param {Integer} increment - +1 or -1, going up or down\n * @returns {Object} - { distance: {Number}, index: {Integer} }\n */\nproto._getClosestResting = function( restingX, distance, increment ) {\n var index = this.selectedIndex;\n var minDistance = Infinity;\n var condition = this.options.contain && !this.options.wrapAround ?\n // if contain, keep going if distance is equal to minDistance\n function( dist, minDist ) {\n return dist <= minDist;\n } : function( dist, minDist ) {\n return dist < minDist;\n };\n while ( condition( distance, minDistance ) ) {\n // measure distance to next cell\n index += increment;\n minDistance = distance;\n distance = this.getSlideDistance( -restingX, index );\n if ( distance === null ) {\n break;\n }\n distance = Math.abs( distance );\n }\n return {\n distance: minDistance,\n // selected was previous index\n index: index - increment,\n };\n};\n\n/**\n * measure distance between x and a slide target\n * @param {Number} x - horizontal position\n * @param {Integer} index - slide index\n * @returns {Number} - slide distance\n */\nproto.getSlideDistance = function( x, index ) {\n var len = this.slides.length;\n // wrap around if at least 2 slides\n var isWrapAround = this.options.wrapAround && len > 1;\n var slideIndex = isWrapAround ? utils.modulo( index, len ) : index;\n var slide = this.slides[ slideIndex ];\n if ( !slide ) {\n return null;\n }\n // add distance for wrap-around slides\n var wrap = isWrapAround ? this.slideableWidth * Math.floor( index/len ) : 0;\n return x - ( slide.target + wrap );\n};\n\nproto.dragEndBoostSelect = function() {\n // do not boost if no previousDragX or dragMoveTime\n if ( this.previousDragX === undefined || !this.dragMoveTime ||\n // or if drag was held for 100 ms\n new Date() - this.dragMoveTime > 100 ) {\n return 0;\n }\n\n var distance = this.getSlideDistance( -this.dragX, this.selectedIndex );\n var delta = this.previousDragX - this.dragX;\n if ( distance > 0 && delta > 0 ) {\n // boost to next if moving towards the right, and positive velocity\n return 1;\n } else if ( distance < 0 && delta < 0 ) {\n // boost to previous if moving towards the left, and negative velocity\n return -1;\n }\n return 0;\n};\n\n// ----- staticClick ----- //\n\nproto.staticClick = function( event, pointer ) {\n // get clickedCell, if cell was clicked\n var clickedCell = this.getParentCell( event.target );\n var cellElem = clickedCell && clickedCell.element;\n var cellIndex = clickedCell && this.cells.indexOf( clickedCell );\n this.dispatchEvent( 'staticClick', event, [ pointer, cellElem, cellIndex ] );\n};\n\n// ----- scroll ----- //\n\nproto.onscroll = function() {\n var scroll = getScrollPosition();\n var scrollMoveX = this.pointerDownScroll.x - scroll.x;\n var scrollMoveY = this.pointerDownScroll.y - scroll.y;\n // cancel click/tap if scroll is too much\n if ( Math.abs( scrollMoveX ) > 3 || Math.abs( scrollMoveY ) > 3 ) {\n this._pointerDone();\n }\n};\n\n// ----- utils ----- //\n\nfunction getScrollPosition() {\n return {\n x: window.pageXOffset,\n y: window.pageYOffset,\n };\n}\n\n// ----- ----- //\n\nreturn Flickity;\n\n} ) );\n\n// prev/next buttons\n( function( window, factory ) {\n // universal module definition\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( 'flickity/js/prev-next-button',[\n './flickity',\n 'unipointer/unipointer',\n 'fizzy-ui-utils/utils',\n ], function( Flickity, Unipointer, utils ) {\n return factory( window, Flickity, Unipointer, utils );\n } );\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n window,\n require('./flickity'),\n require('unipointer'),\n require('fizzy-ui-utils')\n );\n } else {\n // browser global\n factory(\n window,\n window.Flickity,\n window.Unipointer,\n window.fizzyUIUtils\n );\n }\n\n}( window, function factory( window, Flickity, Unipointer, utils ) {\n'use strict';\n\nvar svgURI = 'http://www.w3.org/2000/svg';\n\n// -------------------------- PrevNextButton -------------------------- //\n\nfunction PrevNextButton( direction, parent ) {\n this.direction = direction;\n this.parent = parent;\n this._create();\n}\n\nPrevNextButton.prototype = Object.create( Unipointer.prototype );\n\nPrevNextButton.prototype._create = function() {\n // properties\n this.isEnabled = true;\n this.isPrevious = this.direction == -1;\n var leftDirection = this.parent.options.rightToLeft ? 1 : -1;\n this.isLeft = this.direction == leftDirection;\n\n var element = this.element = document.createElement('button');\n element.className = 'flickity-button flickity-prev-next-button';\n element.className += this.isPrevious ? ' previous' : ' next';\n // prevent button from submitting form http://stackoverflow.com/a/10836076/182183\n element.setAttribute( 'type', 'button' );\n // init as disabled\n this.disable();\n\n element.setAttribute( 'aria-label', this.isPrevious ? 'Previous' : 'Next' );\n\n // create arrow\n var svg = this.createSVG();\n element.appendChild( svg );\n // events\n this.parent.on( 'select', this.update.bind( this ) );\n this.on( 'pointerDown', this.parent.childUIPointerDown.bind( this.parent ) );\n};\n\nPrevNextButton.prototype.activate = function() {\n this.bindStartEvent( this.element );\n this.element.addEventListener( 'click', this );\n // add to DOM\n this.parent.element.appendChild( this.element );\n};\n\nPrevNextButton.prototype.deactivate = function() {\n // remove from DOM\n this.parent.element.removeChild( this.element );\n // click events\n this.unbindStartEvent( this.element );\n this.element.removeEventListener( 'click', this );\n};\n\nPrevNextButton.prototype.createSVG = function() {\n var svg = document.createElementNS( svgURI, 'svg' );\n svg.setAttribute( 'class', 'flickity-button-icon' );\n svg.setAttribute( 'viewBox', '0 0 100 100' );\n var path = document.createElementNS( svgURI, 'path' );\n var pathMovements = getArrowMovements( this.parent.options.arrowShape );\n path.setAttribute( 'd', pathMovements );\n path.setAttribute( 'class', 'arrow' );\n // rotate arrow\n if ( !this.isLeft ) {\n path.setAttribute( 'transform', 'translate(100, 100) rotate(180) ' );\n }\n svg.appendChild( path );\n return svg;\n};\n\n// get SVG path movmement\nfunction getArrowMovements( shape ) {\n // use shape as movement if string\n if ( typeof shape == 'string' ) {\n return shape;\n }\n // create movement string\n return 'M ' + shape.x0 + ',50' +\n ' L ' + shape.x1 + ',' + ( shape.y1 + 50 ) +\n ' L ' + shape.x2 + ',' + ( shape.y2 + 50 ) +\n ' L ' + shape.x3 + ',50 ' +\n ' L ' + shape.x2 + ',' + ( 50 - shape.y2 ) +\n ' L ' + shape.x1 + ',' + ( 50 - shape.y1 ) +\n ' Z';\n}\n\nPrevNextButton.prototype.handleEvent = utils.handleEvent;\n\nPrevNextButton.prototype.onclick = function() {\n if ( !this.isEnabled ) {\n return;\n }\n this.parent.uiChange();\n var method = this.isPrevious ? 'previous' : 'next';\n this.parent[ method ]();\n};\n\n// ----- ----- //\n\nPrevNextButton.prototype.enable = function() {\n if ( this.isEnabled ) {\n return;\n }\n this.element.disabled = false;\n this.isEnabled = true;\n};\n\nPrevNextButton.prototype.disable = function() {\n if ( !this.isEnabled ) {\n return;\n }\n this.element.disabled = true;\n this.isEnabled = false;\n};\n\nPrevNextButton.prototype.update = function() {\n // index of first or last slide, if previous or next\n var slides = this.parent.slides;\n // enable is wrapAround and at least 2 slides\n if ( this.parent.options.wrapAround && slides.length > 1 ) {\n this.enable();\n return;\n }\n var lastIndex = slides.length ? slides.length - 1 : 0;\n var boundIndex = this.isPrevious ? 0 : lastIndex;\n var method = this.parent.selectedIndex == boundIndex ? 'disable' : 'enable';\n this[ method ]();\n};\n\nPrevNextButton.prototype.destroy = function() {\n this.deactivate();\n this.allOff();\n};\n\n// -------------------------- Flickity prototype -------------------------- //\n\nutils.extend( Flickity.defaults, {\n prevNextButtons: true,\n arrowShape: {\n x0: 10,\n x1: 60, y1: 50,\n x2: 70, y2: 40,\n x3: 30,\n },\n} );\n\nFlickity.createMethods.push('_createPrevNextButtons');\nvar proto = Flickity.prototype;\n\nproto._createPrevNextButtons = function() {\n if ( !this.options.prevNextButtons ) {\n return;\n }\n\n this.prevButton = new PrevNextButton( -1, this );\n this.nextButton = new PrevNextButton( 1, this );\n\n this.on( 'activate', this.activatePrevNextButtons );\n};\n\nproto.activatePrevNextButtons = function() {\n this.prevButton.activate();\n this.nextButton.activate();\n this.on( 'deactivate', this.deactivatePrevNextButtons );\n};\n\nproto.deactivatePrevNextButtons = function() {\n this.prevButton.deactivate();\n this.nextButton.deactivate();\n this.off( 'deactivate', this.deactivatePrevNextButtons );\n};\n\n// -------------------------- -------------------------- //\n\nFlickity.PrevNextButton = PrevNextButton;\n\nreturn Flickity;\n\n} ) );\n\n// page dots\n( function( window, factory ) {\n // universal module definition\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( 'flickity/js/page-dots',[\n './flickity',\n 'unipointer/unipointer',\n 'fizzy-ui-utils/utils',\n ], function( Flickity, Unipointer, utils ) {\n return factory( window, Flickity, Unipointer, utils );\n } );\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n window,\n require('./flickity'),\n require('unipointer'),\n require('fizzy-ui-utils')\n );\n } else {\n // browser global\n factory(\n window,\n window.Flickity,\n window.Unipointer,\n window.fizzyUIUtils\n );\n }\n\n}( window, function factory( window, Flickity, Unipointer, utils ) {\n\n// -------------------------- PageDots -------------------------- //\n\n\n\nfunction PageDots( parent ) {\n this.parent = parent;\n this._create();\n}\n\nPageDots.prototype = Object.create( Unipointer.prototype );\n\nPageDots.prototype._create = function() {\n // create holder element\n this.holder = document.createElement('ol');\n this.holder.className = 'flickity-page-dots';\n // create dots, array of elements\n this.dots = [];\n // events\n this.handleClick = this.onClick.bind( this );\n this.on( 'pointerDown', this.parent.childUIPointerDown.bind( this.parent ) );\n};\n\nPageDots.prototype.activate = function() {\n this.setDots();\n this.holder.addEventListener( 'click', this.handleClick );\n this.bindStartEvent( this.holder );\n // add to DOM\n this.parent.element.appendChild( this.holder );\n};\n\nPageDots.prototype.deactivate = function() {\n this.holder.removeEventListener( 'click', this.handleClick );\n this.unbindStartEvent( this.holder );\n // remove from DOM\n this.parent.element.removeChild( this.holder );\n};\n\nPageDots.prototype.setDots = function() {\n // get difference between number of slides and number of dots\n var delta = this.parent.slides.length - this.dots.length;\n if ( delta > 0 ) {\n this.addDots( delta );\n } else if ( delta < 0 ) {\n this.removeDots( -delta );\n }\n};\n\nPageDots.prototype.addDots = function( count ) {\n var fragment = document.createDocumentFragment();\n var newDots = [];\n var length = this.dots.length;\n var max = length + count;\n\n for ( var i = length; i < max; i++ ) {\n var dot = document.createElement('li');\n dot.className = 'dot';\n dot.setAttribute( 'aria-label', 'Page dot ' + ( i + 1 ) );\n fragment.appendChild( dot );\n newDots.push( dot );\n }\n\n this.holder.appendChild( fragment );\n this.dots = this.dots.concat( newDots );\n};\n\nPageDots.prototype.removeDots = function( count ) {\n // remove from this.dots collection\n var removeDots = this.dots.splice( this.dots.length - count, count );\n // remove from DOM\n removeDots.forEach( function( dot ) {\n this.holder.removeChild( dot );\n }, this );\n};\n\nPageDots.prototype.updateSelected = function() {\n // remove selected class on previous\n if ( this.selectedDot ) {\n this.selectedDot.className = 'dot';\n this.selectedDot.removeAttribute('aria-current');\n }\n // don't proceed if no dots\n if ( !this.dots.length ) {\n return;\n }\n this.selectedDot = this.dots[ this.parent.selectedIndex ];\n this.selectedDot.className = 'dot is-selected';\n this.selectedDot.setAttribute( 'aria-current', 'step' );\n};\n\nPageDots.prototype.onTap = // old method name, backwards-compatible\nPageDots.prototype.onClick = function( event ) {\n var target = event.target;\n // only care about dot clicks\n if ( target.nodeName != 'LI' ) {\n return;\n }\n\n this.parent.uiChange();\n var index = this.dots.indexOf( target );\n this.parent.select( index );\n};\n\nPageDots.prototype.destroy = function() {\n this.deactivate();\n this.allOff();\n};\n\nFlickity.PageDots = PageDots;\n\n// -------------------------- Flickity -------------------------- //\n\nutils.extend( Flickity.defaults, {\n pageDots: true,\n} );\n\nFlickity.createMethods.push('_createPageDots');\n\nvar proto = Flickity.prototype;\n\nproto._createPageDots = function() {\n if ( !this.options.pageDots ) {\n return;\n }\n this.pageDots = new PageDots( this );\n // events\n this.on( 'activate', this.activatePageDots );\n this.on( 'select', this.updateSelectedPageDots );\n this.on( 'cellChange', this.updatePageDots );\n this.on( 'resize', this.updatePageDots );\n this.on( 'deactivate', this.deactivatePageDots );\n};\n\nproto.activatePageDots = function() {\n this.pageDots.activate();\n};\n\nproto.updateSelectedPageDots = function() {\n this.pageDots.updateSelected();\n};\n\nproto.updatePageDots = function() {\n this.pageDots.setDots();\n};\n\nproto.deactivatePageDots = function() {\n this.pageDots.deactivate();\n};\n\n// ----- ----- //\n\nFlickity.PageDots = PageDots;\n\nreturn Flickity;\n\n} ) );\n\n// player & autoPlay\n( function( window, factory ) {\n // universal module definition\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( 'flickity/js/player',[\n 'ev-emitter/ev-emitter',\n 'fizzy-ui-utils/utils',\n './flickity',\n ], function( EvEmitter, utils, Flickity ) {\n return factory( EvEmitter, utils, Flickity );\n } );\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n require('ev-emitter'),\n require('fizzy-ui-utils'),\n require('./flickity')\n );\n } else {\n // browser global\n factory(\n window.EvEmitter,\n window.fizzyUIUtils,\n window.Flickity\n );\n }\n\n}( window, function factory( EvEmitter, utils, Flickity ) {\n\n\n\n// -------------------------- Player -------------------------- //\n\nfunction Player( parent ) {\n this.parent = parent;\n this.state = 'stopped';\n // visibility change event handler\n this.onVisibilityChange = this.visibilityChange.bind( this );\n this.onVisibilityPlay = this.visibilityPlay.bind( this );\n}\n\nPlayer.prototype = Object.create( EvEmitter.prototype );\n\n// start play\nPlayer.prototype.play = function() {\n if ( this.state == 'playing' ) {\n return;\n }\n // do not play if page is hidden, start playing when page is visible\n var isPageHidden = document.hidden;\n if ( isPageHidden ) {\n document.addEventListener( 'visibilitychange', this.onVisibilityPlay );\n return;\n }\n\n this.state = 'playing';\n // listen to visibility change\n document.addEventListener( 'visibilitychange', this.onVisibilityChange );\n // start ticking\n this.tick();\n};\n\nPlayer.prototype.tick = function() {\n // do not tick if not playing\n if ( this.state != 'playing' ) {\n return;\n }\n\n var time = this.parent.options.autoPlay;\n // default to 3 seconds\n time = typeof time == 'number' ? time : 3000;\n var _this = this;\n // HACK: reset ticks if stopped and started within interval\n this.clear();\n this.timeout = setTimeout( function() {\n _this.parent.next( true );\n _this.tick();\n }, time );\n};\n\nPlayer.prototype.stop = function() {\n this.state = 'stopped';\n this.clear();\n // remove visibility change event\n document.removeEventListener( 'visibilitychange', this.onVisibilityChange );\n};\n\nPlayer.prototype.clear = function() {\n clearTimeout( this.timeout );\n};\n\nPlayer.prototype.pause = function() {\n if ( this.state == 'playing' ) {\n this.state = 'paused';\n this.clear();\n }\n};\n\nPlayer.prototype.unpause = function() {\n // re-start play if paused\n if ( this.state == 'paused' ) {\n this.play();\n }\n};\n\n// pause if page visibility is hidden, unpause if visible\nPlayer.prototype.visibilityChange = function() {\n var isPageHidden = document.hidden;\n this[ isPageHidden ? 'pause' : 'unpause' ]();\n};\n\nPlayer.prototype.visibilityPlay = function() {\n this.play();\n document.removeEventListener( 'visibilitychange', this.onVisibilityPlay );\n};\n\n// -------------------------- Flickity -------------------------- //\n\nutils.extend( Flickity.defaults, {\n pauseAutoPlayOnHover: true,\n} );\n\nFlickity.createMethods.push('_createPlayer');\nvar proto = Flickity.prototype;\n\nproto._createPlayer = function() {\n this.player = new Player( this );\n\n this.on( 'activate', this.activatePlayer );\n this.on( 'uiChange', this.stopPlayer );\n this.on( 'pointerDown', this.stopPlayer );\n this.on( 'deactivate', this.deactivatePlayer );\n};\n\nproto.activatePlayer = function() {\n if ( !this.options.autoPlay ) {\n return;\n }\n this.player.play();\n this.element.addEventListener( 'mouseenter', this );\n};\n\n// Player API, don't hate the ... thanks I know where the door is\n\nproto.playPlayer = function() {\n this.player.play();\n};\n\nproto.stopPlayer = function() {\n this.player.stop();\n};\n\nproto.pausePlayer = function() {\n this.player.pause();\n};\n\nproto.unpausePlayer = function() {\n this.player.unpause();\n};\n\nproto.deactivatePlayer = function() {\n this.player.stop();\n this.element.removeEventListener( 'mouseenter', this );\n};\n\n// ----- mouseenter/leave ----- //\n\n// pause auto-play on hover\nproto.onmouseenter = function() {\n if ( !this.options.pauseAutoPlayOnHover ) {\n return;\n }\n this.player.pause();\n this.element.addEventListener( 'mouseleave', this );\n};\n\n// resume auto-play on hover off\nproto.onmouseleave = function() {\n this.player.unpause();\n this.element.removeEventListener( 'mouseleave', this );\n};\n\n// ----- ----- //\n\nFlickity.Player = Player;\n\nreturn Flickity;\n\n} ) );\n\n// add, remove cell\n( function( window, factory ) {\n // universal module definition\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( 'flickity/js/add-remove-cell',[\n './flickity',\n 'fizzy-ui-utils/utils',\n ], function( Flickity, utils ) {\n return factory( window, Flickity, utils );\n } );\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n window,\n require('./flickity'),\n require('fizzy-ui-utils')\n );\n } else {\n // browser global\n factory(\n window,\n window.Flickity,\n window.fizzyUIUtils\n );\n }\n\n}( window, function factory( window, Flickity, utils ) {\n\n\n\n// append cells to a document fragment\nfunction getCellsFragment( cells ) {\n var fragment = document.createDocumentFragment();\n cells.forEach( function( cell ) {\n fragment.appendChild( cell.element );\n } );\n return fragment;\n}\n\n// -------------------------- add/remove cell prototype -------------------------- //\n\nvar proto = Flickity.prototype;\n\n/**\n * Insert, prepend, or append cells\n * @param {[Element, Array, NodeList]} elems - Elements to insert\n * @param {Integer} index - Zero-based number to insert\n */\nproto.insert = function( elems, index ) {\n var cells = this._makeCells( elems );\n if ( !cells || !cells.length ) {\n return;\n }\n var len = this.cells.length;\n // default to append\n index = index === undefined ? len : index;\n // add cells with document fragment\n var fragment = getCellsFragment( cells );\n // append to slider\n var isAppend = index == len;\n if ( isAppend ) {\n this.slider.appendChild( fragment );\n } else {\n var insertCellElement = this.cells[ index ].element;\n this.slider.insertBefore( fragment, insertCellElement );\n }\n // add to this.cells\n if ( index === 0 ) {\n // prepend, add to start\n this.cells = cells.concat( this.cells );\n } else if ( isAppend ) {\n // append, add to end\n this.cells = this.cells.concat( cells );\n } else {\n // insert in this.cells\n var endCells = this.cells.splice( index, len - index );\n this.cells = this.cells.concat( cells ).concat( endCells );\n }\n\n this._sizeCells( cells );\n this.cellChange( index, true );\n};\n\nproto.append = function( elems ) {\n this.insert( elems, this.cells.length );\n};\n\nproto.prepend = function( elems ) {\n this.insert( elems, 0 );\n};\n\n/**\n * Remove cells\n * @param {[Element, Array, NodeList]} elems - ELements to remove\n */\nproto.remove = function( elems ) {\n var cells = this.getCells( elems );\n if ( !cells || !cells.length ) {\n return;\n }\n\n var minCellIndex = this.cells.length - 1;\n // remove cells from collection & DOM\n cells.forEach( function( cell ) {\n cell.remove();\n var index = this.cells.indexOf( cell );\n minCellIndex = Math.min( index, minCellIndex );\n utils.removeFrom( this.cells, cell );\n }, this );\n\n this.cellChange( minCellIndex, true );\n};\n\n/**\n * logic to be run after a cell's size changes\n * @param {Element} elem - cell's element\n */\nproto.cellSizeChange = function( elem ) {\n var cell = this.getCell( elem );\n if ( !cell ) {\n return;\n }\n cell.getSize();\n\n var index = this.cells.indexOf( cell );\n this.cellChange( index );\n};\n\n/**\n * logic any time a cell is changed: added, removed, or size changed\n * @param {Integer} changedCellIndex - index of the changed cell, optional\n * @param {Boolean} isPositioningSlider - Positions slider after selection\n */\nproto.cellChange = function( changedCellIndex, isPositioningSlider ) {\n var prevSelectedElem = this.selectedElement;\n this._positionCells( changedCellIndex );\n this._getWrapShiftCells();\n this.setGallerySize();\n // update selectedIndex\n // try to maintain position & select previous selected element\n var cell = this.getCell( prevSelectedElem );\n if ( cell ) {\n this.selectedIndex = this.getCellSlideIndex( cell );\n }\n this.selectedIndex = Math.min( this.slides.length - 1, this.selectedIndex );\n\n this.emitEvent( 'cellChange', [ changedCellIndex ] );\n // position slider\n this.select( this.selectedIndex );\n // do not position slider after lazy load\n if ( isPositioningSlider ) {\n this.positionSliderAtSelected();\n }\n};\n\n// ----- ----- //\n\nreturn Flickity;\n\n} ) );\n\n// lazyload\n( function( window, factory ) {\n // universal module definition\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( 'flickity/js/lazyload',[\n './flickity',\n 'fizzy-ui-utils/utils',\n ], function( Flickity, utils ) {\n return factory( window, Flickity, utils );\n } );\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n window,\n require('./flickity'),\n require('fizzy-ui-utils')\n );\n } else {\n // browser global\n factory(\n window,\n window.Flickity,\n window.fizzyUIUtils\n );\n }\n\n}( window, function factory( window, Flickity, utils ) {\n'use strict';\n\nFlickity.createMethods.push('_createLazyload');\nvar proto = Flickity.prototype;\n\nproto._createLazyload = function() {\n this.on( 'select', this.lazyLoad );\n};\n\nproto.lazyLoad = function() {\n var lazyLoad = this.options.lazyLoad;\n if ( !lazyLoad ) {\n return;\n }\n // get adjacent cells, use lazyLoad option for adjacent count\n var adjCount = typeof lazyLoad == 'number' ? lazyLoad : 0;\n var cellElems = this.getAdjacentCellElements( adjCount );\n // get lazy images in those cells\n var lazyImages = [];\n cellElems.forEach( function( cellElem ) {\n var lazyCellImages = getCellLazyImages( cellElem );\n lazyImages = lazyImages.concat( lazyCellImages );\n } );\n // load lazy images\n lazyImages.forEach( function( img ) {\n new LazyLoader( img, this );\n }, this );\n};\n\nfunction getCellLazyImages( cellElem ) {\n // check if cell element is lazy image\n if ( cellElem.nodeName == 'IMG' ) {\n var lazyloadAttr = cellElem.getAttribute('data-flickity-lazyload');\n var srcAttr = cellElem.getAttribute('data-flickity-lazyload-src');\n var srcsetAttr = cellElem.getAttribute('data-flickity-lazyload-srcset');\n if ( lazyloadAttr || srcAttr || srcsetAttr ) {\n return [ cellElem ];\n }\n }\n // select lazy images in cell\n var lazySelector = 'img[data-flickity-lazyload], ' +\n 'img[data-flickity-lazyload-src], img[data-flickity-lazyload-srcset]';\n var imgs = cellElem.querySelectorAll( lazySelector );\n return utils.makeArray( imgs );\n}\n\n// -------------------------- LazyLoader -------------------------- //\n\n/**\n * class to handle loading images\n * @param {Image} img - Image element\n * @param {Flickity} flickity - Flickity instance\n */\nfunction LazyLoader( img, flickity ) {\n this.img = img;\n this.flickity = flickity;\n this.load();\n}\n\nLazyLoader.prototype.handleEvent = utils.handleEvent;\n\nLazyLoader.prototype.load = function() {\n this.img.addEventListener( 'load', this );\n this.img.addEventListener( 'error', this );\n // get src & srcset\n var src = this.img.getAttribute('data-flickity-lazyload') ||\n this.img.getAttribute('data-flickity-lazyload-src');\n var srcset = this.img.getAttribute('data-flickity-lazyload-srcset');\n // set src & serset\n this.img.src = src;\n if ( srcset ) {\n this.img.setAttribute( 'srcset', srcset );\n }\n // remove attr\n this.img.removeAttribute('data-flickity-lazyload');\n this.img.removeAttribute('data-flickity-lazyload-src');\n this.img.removeAttribute('data-flickity-lazyload-srcset');\n};\n\nLazyLoader.prototype.onload = function( event ) {\n this.complete( event, 'flickity-lazyloaded' );\n};\n\nLazyLoader.prototype.onerror = function( event ) {\n this.complete( event, 'flickity-lazyerror' );\n};\n\nLazyLoader.prototype.complete = function( event, className ) {\n // unbind events\n this.img.removeEventListener( 'load', this );\n this.img.removeEventListener( 'error', this );\n\n var cell = this.flickity.getParentCell( this.img );\n var cellElem = cell && cell.element;\n this.flickity.cellSizeChange( cellElem );\n\n this.img.classList.add( className );\n this.flickity.dispatchEvent( 'lazyLoad', event, cellElem );\n};\n\n// ----- ----- //\n\nFlickity.LazyLoader = LazyLoader;\n\nreturn Flickity;\n\n} ) );\n\n/*!\n * Flickity v2.3.0\n * Touch, responsive, flickable carousels\n *\n * Licensed GPLv3 for open source use\n * or Flickity Commercial License for commercial use\n *\n * https://flickity.metafizzy.co\n * Copyright 2015-2021 Metafizzy\n */\n\n( function( window, factory ) {\n // universal module definition\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( 'flickity/js/index',[\n './flickity',\n './drag',\n './prev-next-button',\n './page-dots',\n './player',\n './add-remove-cell',\n './lazyload',\n ], factory );\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n require('./flickity'),\n require('./drag'),\n require('./prev-next-button'),\n require('./page-dots'),\n require('./player'),\n require('./add-remove-cell'),\n require('./lazyload')\n );\n }\n\n} )( window, function factory( Flickity ) {\n return Flickity;\n} );\n\n/*!\n * Flickity asNavFor v2.0.2\n * enable asNavFor for Flickity\n */\n\n/*jshint browser: true, undef: true, unused: true, strict: true*/\n\n( function( window, factory ) {\n // universal module definition\n /*jshint strict: false */ /*globals define, module, require */\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( 'flickity-as-nav-for/as-nav-for',[\n 'flickity/js/index',\n 'fizzy-ui-utils/utils'\n ], factory );\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n require('flickity'),\n require('fizzy-ui-utils')\n );\n } else {\n // browser global\n window.Flickity = factory(\n window.Flickity,\n window.fizzyUIUtils\n );\n }\n\n}( window, function factory( Flickity, utils ) {\n\n\n\n// -------------------------- asNavFor prototype -------------------------- //\n\n// Flickity.defaults.asNavFor = null;\n\nFlickity.createMethods.push('_createAsNavFor');\n\nvar proto = Flickity.prototype;\n\nproto._createAsNavFor = function() {\n this.on( 'activate', this.activateAsNavFor );\n this.on( 'deactivate', this.deactivateAsNavFor );\n this.on( 'destroy', this.destroyAsNavFor );\n\n var asNavForOption = this.options.asNavFor;\n if ( !asNavForOption ) {\n return;\n }\n // HACK do async, give time for other flickity to be initalized\n var _this = this;\n setTimeout( function initNavCompanion() {\n _this.setNavCompanion( asNavForOption );\n });\n};\n\nproto.setNavCompanion = function( elem ) {\n elem = utils.getQueryElement( elem );\n var companion = Flickity.data( elem );\n // stop if no companion or companion is self\n if ( !companion || companion == this ) {\n return;\n }\n\n this.navCompanion = companion;\n // companion select\n var _this = this;\n this.onNavCompanionSelect = function() {\n _this.navCompanionSelect();\n };\n companion.on( 'select', this.onNavCompanionSelect );\n // click\n this.on( 'staticClick', this.onNavStaticClick );\n\n this.navCompanionSelect( true );\n};\n\nproto.navCompanionSelect = function( isInstant ) {\n // wait for companion & selectedCells first. #8\n var companionCells = this.navCompanion && this.navCompanion.selectedCells;\n if ( !companionCells ) {\n return;\n }\n // select slide that matches first cell of slide\n var selectedCell = companionCells[0];\n var firstIndex = this.navCompanion.cells.indexOf( selectedCell );\n var lastIndex = firstIndex + companionCells.length - 1;\n var selectIndex = Math.floor( lerp( firstIndex, lastIndex,\n this.navCompanion.cellAlign ) );\n this.selectCell( selectIndex, false, isInstant );\n // set nav selected class\n this.removeNavSelectedElements();\n // stop if companion has more cells than this one\n if ( selectIndex >= this.cells.length ) {\n return;\n }\n\n var selectedCells = this.cells.slice( firstIndex, lastIndex + 1 );\n this.navSelectedElements = selectedCells.map( function( cell ) {\n return cell.element;\n });\n this.changeNavSelectedClass('add');\n};\n\nfunction lerp( a, b, t ) {\n return ( b - a ) * t + a;\n}\n\nproto.changeNavSelectedClass = function( method ) {\n this.navSelectedElements.forEach( function( navElem ) {\n navElem.classList[ method ]('is-nav-selected');\n });\n};\n\nproto.activateAsNavFor = function() {\n this.navCompanionSelect( true );\n};\n\nproto.removeNavSelectedElements = function() {\n if ( !this.navSelectedElements ) {\n return;\n }\n this.changeNavSelectedClass('remove');\n delete this.navSelectedElements;\n};\n\nproto.onNavStaticClick = function( event, pointer, cellElement, cellIndex ) {\n if ( typeof cellIndex == 'number' ) {\n this.navCompanion.selectCell( cellIndex );\n }\n};\n\nproto.deactivateAsNavFor = function() {\n this.removeNavSelectedElements();\n};\n\nproto.destroyAsNavFor = function() {\n if ( !this.navCompanion ) {\n return;\n }\n this.navCompanion.off( 'select', this.onNavCompanionSelect );\n this.off( 'staticClick', this.onNavStaticClick );\n delete this.navCompanion;\n};\n\n// ----- ----- //\n\nreturn Flickity;\n\n}));\n\n/*!\n * imagesLoaded v4.1.4\n * JavaScript is all like \"You images are done yet or what?\"\n * MIT License\n */\n\n( function( window, factory ) { 'use strict';\n // universal module definition\n\n /*global define: false, module: false, require: false */\n\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( 'imagesloaded/imagesloaded',[\n 'ev-emitter/ev-emitter'\n ], function( EvEmitter ) {\n return factory( window, EvEmitter );\n });\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n window,\n require('ev-emitter')\n );\n } else {\n // browser global\n window.imagesLoaded = factory(\n window,\n window.EvEmitter\n );\n }\n\n})( typeof window !== 'undefined' ? window : this,\n\n// -------------------------- factory -------------------------- //\n\nfunction factory( window, EvEmitter ) {\n\n\n\nvar $ = window.jQuery;\nvar console = window.console;\n\n// -------------------------- helpers -------------------------- //\n\n// extend objects\nfunction extend( a, b ) {\n for ( var prop in b ) {\n a[ prop ] = b[ prop ];\n }\n return a;\n}\n\nvar arraySlice = Array.prototype.slice;\n\n// turn element or nodeList into an array\nfunction makeArray( obj ) {\n if ( Array.isArray( obj ) ) {\n // use object if already an array\n return obj;\n }\n\n var isArrayLike = typeof obj == 'object' && typeof obj.length == 'number';\n if ( isArrayLike ) {\n // convert nodeList to array\n return arraySlice.call( obj );\n }\n\n // array of single index\n return [ obj ];\n}\n\n// -------------------------- imagesLoaded -------------------------- //\n\n/**\n * @param {Array, Element, NodeList, String} elem\n * @param {Object or Function} options - if function, use as callback\n * @param {Function} onAlways - callback function\n */\nfunction ImagesLoaded( elem, options, onAlways ) {\n // coerce ImagesLoaded() without new, to be new ImagesLoaded()\n if ( !( this instanceof ImagesLoaded ) ) {\n return new ImagesLoaded( elem, options, onAlways );\n }\n // use elem as selector string\n var queryElem = elem;\n if ( typeof elem == 'string' ) {\n queryElem = document.querySelectorAll( elem );\n }\n // bail if bad element\n if ( !queryElem ) {\n console.error( 'Bad element for imagesLoaded ' + ( queryElem || elem ) );\n return;\n }\n\n this.elements = makeArray( queryElem );\n this.options = extend( {}, this.options );\n // shift arguments if no options set\n if ( typeof options == 'function' ) {\n onAlways = options;\n } else {\n extend( this.options, options );\n }\n\n if ( onAlways ) {\n this.on( 'always', onAlways );\n }\n\n this.getImages();\n\n if ( $ ) {\n // add jQuery Deferred object\n this.jqDeferred = new $.Deferred();\n }\n\n // HACK check async to allow time to bind listeners\n setTimeout( this.check.bind( this ) );\n}\n\nImagesLoaded.prototype = Object.create( EvEmitter.prototype );\n\nImagesLoaded.prototype.options = {};\n\nImagesLoaded.prototype.getImages = function() {\n this.images = [];\n\n // filter & find items if we have an item selector\n this.elements.forEach( this.addElementImages, this );\n};\n\n/**\n * @param {Node} element\n */\nImagesLoaded.prototype.addElementImages = function( elem ) {\n // filter siblings\n if ( elem.nodeName == 'IMG' ) {\n this.addImage( elem );\n }\n // get background image on element\n if ( this.options.background === true ) {\n this.addElementBackgroundImages( elem );\n }\n\n // find children\n // no non-element nodes, #143\n var nodeType = elem.nodeType;\n if ( !nodeType || !elementNodeTypes[ nodeType ] ) {\n return;\n }\n var childImgs = elem.querySelectorAll('img');\n // concat childElems to filterFound array\n for ( var i=0; i < childImgs.length; i++ ) {\n var img = childImgs[i];\n this.addImage( img );\n }\n\n // get child background images\n if ( typeof this.options.background == 'string' ) {\n var children = elem.querySelectorAll( this.options.background );\n for ( i=0; i < children.length; i++ ) {\n var child = children[i];\n this.addElementBackgroundImages( child );\n }\n }\n};\n\nvar elementNodeTypes = {\n 1: true,\n 9: true,\n 11: true\n};\n\nImagesLoaded.prototype.addElementBackgroundImages = function( elem ) {\n var style = getComputedStyle( elem );\n if ( !style ) {\n // Firefox returns null if in a hidden iframe https://bugzil.la/548397\n return;\n }\n // get url inside url(\"...\")\n var reURL = /url\\((['\"])?(.*?)\\1\\)/gi;\n var matches = reURL.exec( style.backgroundImage );\n while ( matches !== null ) {\n var url = matches && matches[2];\n if ( url ) {\n this.addBackground( url, elem );\n }\n matches = reURL.exec( style.backgroundImage );\n }\n};\n\n/**\n * @param {Image} img\n */\nImagesLoaded.prototype.addImage = function( img ) {\n var loadingImage = new LoadingImage( img );\n this.images.push( loadingImage );\n};\n\nImagesLoaded.prototype.addBackground = function( url, elem ) {\n var background = new Background( url, elem );\n this.images.push( background );\n};\n\nImagesLoaded.prototype.check = function() {\n var _this = this;\n this.progressedCount = 0;\n this.hasAnyBroken = false;\n // complete if no images\n if ( !this.images.length ) {\n this.complete();\n return;\n }\n\n function onProgress( image, elem, message ) {\n // HACK - Chrome triggers event before object properties have changed. #83\n setTimeout( function() {\n _this.progress( image, elem, message );\n });\n }\n\n this.images.forEach( function( loadingImage ) {\n loadingImage.once( 'progress', onProgress );\n loadingImage.check();\n });\n};\n\nImagesLoaded.prototype.progress = function( image, elem, message ) {\n this.progressedCount++;\n this.hasAnyBroken = this.hasAnyBroken || !image.isLoaded;\n // progress event\n this.emitEvent( 'progress', [ this, image, elem ] );\n if ( this.jqDeferred && this.jqDeferred.notify ) {\n this.jqDeferred.notify( this, image );\n }\n // check if completed\n if ( this.progressedCount == this.images.length ) {\n this.complete();\n }\n\n if ( this.options.debug && console ) {\n console.log( 'progress: ' + message, image, elem );\n }\n};\n\nImagesLoaded.prototype.complete = function() {\n var eventName = this.hasAnyBroken ? 'fail' : 'done';\n this.isComplete = true;\n this.emitEvent( eventName, [ this ] );\n this.emitEvent( 'always', [ this ] );\n if ( this.jqDeferred ) {\n var jqMethod = this.hasAnyBroken ? 'reject' : 'resolve';\n this.jqDeferred[ jqMethod ]( this );\n }\n};\n\n// -------------------------- -------------------------- //\n\nfunction LoadingImage( img ) {\n this.img = img;\n}\n\nLoadingImage.prototype = Object.create( EvEmitter.prototype );\n\nLoadingImage.prototype.check = function() {\n // If complete is true and browser supports natural sizes,\n // try to check for image status manually.\n var isComplete = this.getIsImageComplete();\n if ( isComplete ) {\n // report based on naturalWidth\n this.confirm( this.img.naturalWidth !== 0, 'naturalWidth' );\n return;\n }\n\n // If none of the checks above matched, simulate loading on detached element.\n this.proxyImage = new Image();\n this.proxyImage.addEventListener( 'load', this );\n this.proxyImage.addEventListener( 'error', this );\n // bind to image as well for Firefox. #191\n this.img.addEventListener( 'load', this );\n this.img.addEventListener( 'error', this );\n this.proxyImage.src = this.img.src;\n};\n\nLoadingImage.prototype.getIsImageComplete = function() {\n // check for non-zero, non-undefined naturalWidth\n // fixes Safari+InfiniteScroll+Masonry bug infinite-scroll#671\n return this.img.complete && this.img.naturalWidth;\n};\n\nLoadingImage.prototype.confirm = function( isLoaded, message ) {\n this.isLoaded = isLoaded;\n this.emitEvent( 'progress', [ this, this.img, message ] );\n};\n\n// ----- events ----- //\n\n// trigger specified handler for event type\nLoadingImage.prototype.handleEvent = function( event ) {\n var method = 'on' + event.type;\n if ( this[ method ] ) {\n this[ method ]( event );\n }\n};\n\nLoadingImage.prototype.onload = function() {\n this.confirm( true, 'onload' );\n this.unbindEvents();\n};\n\nLoadingImage.prototype.onerror = function() {\n this.confirm( false, 'onerror' );\n this.unbindEvents();\n};\n\nLoadingImage.prototype.unbindEvents = function() {\n this.proxyImage.removeEventListener( 'load', this );\n this.proxyImage.removeEventListener( 'error', this );\n this.img.removeEventListener( 'load', this );\n this.img.removeEventListener( 'error', this );\n};\n\n// -------------------------- Background -------------------------- //\n\nfunction Background( url, element ) {\n this.url = url;\n this.element = element;\n this.img = new Image();\n}\n\n// inherit LoadingImage prototype\nBackground.prototype = Object.create( LoadingImage.prototype );\n\nBackground.prototype.check = function() {\n this.img.addEventListener( 'load', this );\n this.img.addEventListener( 'error', this );\n this.img.src = this.url;\n // check if image is already complete\n var isComplete = this.getIsImageComplete();\n if ( isComplete ) {\n this.confirm( this.img.naturalWidth !== 0, 'naturalWidth' );\n this.unbindEvents();\n }\n};\n\nBackground.prototype.unbindEvents = function() {\n this.img.removeEventListener( 'load', this );\n this.img.removeEventListener( 'error', this );\n};\n\nBackground.prototype.confirm = function( isLoaded, message ) {\n this.isLoaded = isLoaded;\n this.emitEvent( 'progress', [ this, this.element, message ] );\n};\n\n// -------------------------- jQuery -------------------------- //\n\nImagesLoaded.makeJQueryPlugin = function( jQuery ) {\n jQuery = jQuery || window.jQuery;\n if ( !jQuery ) {\n return;\n }\n // set local variable\n $ = jQuery;\n // $().imagesLoaded()\n $.fn.imagesLoaded = function( options, callback ) {\n var instance = new ImagesLoaded( this, options, callback );\n return instance.jqDeferred.promise( $(this) );\n };\n};\n// try making plugin\nImagesLoaded.makeJQueryPlugin();\n\n// -------------------------- -------------------------- //\n\nreturn ImagesLoaded;\n\n});\n\n/*!\n * Flickity imagesLoaded v2.0.0\n * enables imagesLoaded option for Flickity\n */\n\n/*jshint browser: true, strict: true, undef: true, unused: true */\n\n( function( window, factory ) {\n // universal module definition\n /*jshint strict: false */ /*globals define, module, require */\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( [\n 'flickity/js/index',\n 'imagesloaded/imagesloaded'\n ], function( Flickity, imagesLoaded ) {\n return factory( window, Flickity, imagesLoaded );\n });\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n window,\n require('flickity'),\n require('imagesloaded')\n );\n } else {\n // browser global\n window.Flickity = factory(\n window,\n window.Flickity,\n window.imagesLoaded\n );\n }\n\n}( window, function factory( window, Flickity, imagesLoaded ) {\n'use strict';\n\nFlickity.createMethods.push('_createImagesLoaded');\n\nvar proto = Flickity.prototype;\n\nproto._createImagesLoaded = function() {\n this.on( 'activate', this.imagesLoaded );\n};\n\nproto.imagesLoaded = function() {\n if ( !this.options.imagesLoaded ) {\n return;\n }\n var _this = this;\n function onImagesLoadedProgress( instance, image ) {\n var cell = _this.getParentCell( image.img );\n _this.cellSizeChange( cell && cell.element );\n if ( !_this.options.freeScroll ) {\n _this.positionSliderAtSelected();\n }\n }\n imagesLoaded( this.slider ).on( 'progress', onImagesLoadedProgress );\n};\n\nreturn Flickity;\n\n}));\n\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// /home/runner/work/fof-wp/fof-wp/public_html/web/app/themes/fof/node_modules/flickity/dist/flickity.pkgd.js\n// module id = 3\n// module chunks = 0","import camelCase from './camelCase';\n\n/**\n * DOM-based Routing\n *\n * Based on {@link http://goo.gl/EUTi53|Markup-based Unobtrusive Comprehensive DOM-ready Execution} by Paul Irish\n *\n * The routing fires all common scripts, followed by the page specific scripts.\n * Add additional events for more control over timing e.g. a finalize event\n */\nclass Router {\n /**\n * Create a new Router\n * @param {Object} routes\n */\n constructor(routes) {\n this.routes = routes;\n }\n\n /**\n * Fire Router events\n * @param {string} route DOM-based route derived from body classes (`
`)\n * @param {string} [event] Events on the route. By default, `init` and `finalize` events are called.\n * @param {string} [arg] Any custom argument to be passed to the event.\n */\n fire(route, event = 'init', arg) {\n document.dispatchEvent(\n new CustomEvent('routed', {\n bubbles: true,\n detail: {\n route,\n fn: event,\n },\n })\n );\n\n const fire = route !== '' && this.routes[route] && typeof this.routes[route][event] === 'function';\n if (fire) {\n this.routes[route][event](arg);\n }\n }\n\n /**\n * Automatically load and fire Router events\n *\n * Events are fired in the following order:\n * * common init\n * * page-specific init\n * * page-specific finalize\n * * common finalize\n */\n loadEvents() {\n // Fire common init JS\n this.fire('common');\n\n // Fire page-specific init JS, and then finalize JS\n document.body.className\n .toLowerCase()\n .replace(/-/g, '_')\n .split(/\\s+/)\n .map(camelCase)\n .forEach((className) => {\n this.fire(className);\n this.fire(className, 'finalize');\n });\n\n if (document.querySelector('.trigger-load-posts')) {\n this.fire('hasPager');\n this.fire('hasPager', 'finalize');\n }\n\n // Fire common finalize JS\n this.fire('common', 'finalize');\n }\n}\n\nexport default Router;\n\n\n\n// WEBPACK FOOTER //\n// ./scripts/util/Router.js","/**\n * the most terrible camelizer on the internet, guaranteed!\n * @param {string} str String that isn't camel-case, e.g., CAMeL_CaSEiS-harD\n * @return {string} String converted to camel-case, e.g., camelCaseIsHard\n */\nexport default (str) =>\n `${str.charAt(0).toLowerCase()}${str\n .replace(/[\\W_]/g, '|')\n .split('|')\n .map((part) => `${part.charAt(0).toUpperCase()}${part.slice(1)}`)\n .join('')\n .slice(1)}`;\n\n\n\n// WEBPACK FOOTER //\n// ./scripts/util/camelCase.js","import showOwnads from '../components/ownads';\nimport toaster from '../components/toaster';\nimport setupGlobals from '../components/globals';\nimport setupCopyText from '../components/copy-text';\nimport setupTakeover from '../components/takeover-ad';\nimport setupHeader from '../components/header';\nimport lightBox from '../components/lightbox';\nimport stickyBlurb from '../components/sticky';\nimport setupDropdown from '../components/dropdown';\nimport hero from '../components/hero';\nimport setupCarousels from '../components/carousel';\nimport setupTracking from '../components/tracking';\nimport setupExternalAds from '../components/external-ads';\nimport setupPaywall from '../components/paywall';\nimport splxPagination from '../components/splx-pagination';\n\nexport default {\n init() {\n // JavaScript to be fired on all pages\n const scope = this;\n scope.uiActions();\n showOwnads();\n window.toaster = toaster;\n },\n\n uiActions() {\n setupCopyText();\n setupGlobals();\n setupTakeover();\n setupHeader();\n hero();\n stickyBlurb();\n lightBox();\n setupDropdown();\n setupCarousels();\n setupTracking();\n setupExternalAds();\n setupPaywall();\n splxPagination();\n },\n\n finalize() {\n // JavaScript to be fired on all pages, after page specific JS is fired\n },\n};\n\n\n\n// WEBPACK FOOTER //\n// ./scripts/routes/common.js","const ownadsSelector = '.Ownads:not(.Ownads--checked)';\nconst ownadSelector = '.Ownad-wrap';\nconst shownOwnads = [];\n\nfunction showOwnads() {\n $(ownadsSelector).each(function () {\n const $ownads = $(this);\n $ownads.find(ownadSelector).each(function () {\n const $ownad = $(this);\n if (showOwnad($ownad.data('id'), $ownad.data('display'))) {\n shownOwnads.push($ownad.data('id')), $ownad.removeClass('d-none');\n return false;\n }\n $ownads.addClass('Ownads--checked');\n });\n });\n}\n\nfunction showOwnad(id, display) {\n // console.log(window.mediaconnectParams);\n if (shownOwnads.indexOf(id) > -1) {\n return false;\n }\n if (display === 'all') {\n return true;\n }\n if (display === 'visitors') {\n return !window.mediaconnectParams || !window.mediaconnectParams.isLoggedIn;\n }\n if (display === 'users') {\n return window.mediaconnectParams && window.mediaconnectParams.isLoggedIn;\n }\n return false;\n}\n\nexport default function () {\n showOwnads();\n $(window).on('fof:post_loaded', showOwnads);\n}\n\n\n\n// WEBPACK FOOTER //\n// ./scripts/components/ownads.js","const selector = '.Toaster';\nconst messageSelector = '.Toaster__message';\nconst showClassName = 'Toaster--show';\nconst closeToasterSelector = '.Toaster__button';\nlet $toasterEl;\nlet $messageEl;\nlet hideTimout;\nconst defaultOptions = {\n duration: 3000,\n};\n\nfunction show(options) {\n if (!$toasterEl) {\n $toasterEl = $(selector);\n }\n $toasterEl.addClass(showClassName);\n $(closeToasterSelector).on('click', hide);\n if (!options.sticky) {\n hideTimout = setTimeout(hide, options.duration);\n }\n}\n\nfunction hide() {\n if (!$toasterEl) {\n $toasterEl = $(selector);\n }\n $toasterEl.removeClass(showClassName);\n\n setTimeout(() => $messageEl.html(''), 200);\n}\n\nexport default function (message, options = {}) {\n clearTimeout(hideTimout);\n const toasterOptions = {\n ...defaultOptions,\n ...options,\n };\n if (!$messageEl) {\n $messageEl = $(messageSelector);\n }\n $messageEl.html(message);\n show(toasterOptions);\n}\n\n\n\n// WEBPACK FOOTER //\n// ./scripts/components/toaster.js","const breakpoints = {\n breakpoint_xs: 0,\n breakpoint_sm: 420,\n breakpoint_md: 720,\n breakpoint_lg: 1080,\n breakpoint_xl: 1420,\n};\nlet $window;\n\nfunction setBreakPoint() {\n const windowWidth = $window.innerWidth();\n window.globals.breakpoint = Object.keys(breakpoints)\n .slice()\n .reverse()\n .find((breakpoint) => windowWidth > breakpoints[breakpoint]);\n}\n\nexport default function () {\n window.globals = {};\n $window = $(window);\n setBreakPoint();\n $window.on('resize', setBreakPoint);\n}\n\n\n\n// WEBPACK FOOTER //\n// ./scripts/components/globals.js","const selector = '.copy-text';\n\nfunction copyText(text, confirmationText) {\n if (!navigator.clipboard) {\n copyTextFallback(text, confirmationText);\n return;\n }\n navigator.clipboard\n .writeText(text)\n .then(function () {\n window.toaster(confirmationText);\n })\n .catch(function (err) {\n console.error('Could not copy text', err);\n });\n}\n\nfunction copyTextFallback(text, confirmationText) {\n const textArea = document.createElement('textarea');\n textArea.value = text;\n\n // Avoid scrolling to bottom\n textArea.style.top = '0';\n textArea.style.left = '0';\n textArea.style.position = 'fixed';\n\n document.body.appendChild(textArea);\n textArea.focus();\n textArea.select();\n\n try {\n document.execCommand('copy');\n window.toaster(confirmationText);\n } catch (err) {\n console.error('Could not copy text with execCommand', err);\n }\n\n document.body.removeChild(textArea);\n}\n\nexport default function () {\n $(window.document).on('click', selector, function (e) {\n e.preventDefault();\n const $btnEl = $(this);\n if (!$btnEl.data('text')) {\n return;\n }\n copyText($btnEl.data('text'), $btnEl.data('confirmation') || 'Text copied');\n });\n}\n\n\n\n// WEBPACK FOOTER //\n// ./scripts/components/copy-text.js","let $window;\nlet takeoverEl;\nconst takeoverSelector = '.Takeover-ad';\nconst takeoverHeaderSelector = '.Takeover-ad__header';\nconst takeoverCloseSelector = '.Takeover-ad__close';\nconst adSelector = `${takeoverSelector} .External-ad`;\nconst iframeSelector = `${takeoverSelector} .External-ad iframe`;\nconst takeoverCookie = 'takeover_shown';\nconst cookies = document.cookie;\nlet takeoverInterval;\nlet takeoverResizedTimes = 0;\n\nfunction setup() {\n if (!shouldShowTakeover()) {\n return;\n }\n if (!window.external_ads_wait_for_paywall) {\n showTakeover();\n } else {\n $(window).on('mediaconnect:paywall_was_hidden', () => {\n showTakeover();\n });\n }\n}\n\nfunction shouldShowTakeover() {\n takeoverEl = $(takeoverSelector);\n if (!takeoverEl.length) {\n return false;\n }\n\n if (cookies.includes(takeoverCookie)) {\n return false;\n }\n\n if (window.mediaconnectParams.isLoggedIn && !takeoverEl.data('show-for-signed-in')) {\n return false;\n }\n\n if (typeof window.Cookiebot !== 'undefined' && !window.Cookiebot.consent.marketing) {\n window.addEventListener(\n 'CookiebotOnAccept',\n function () {\n if (window.Cookiebot.consent.marketing) {\n showTakeover();\n }\n },\n false\n );\n return false;\n }\n\n return true;\n}\n\nfunction showTakeover() {\n if (typeof window.showExternalAd_takeover !== 'function') {\n return;\n }\n $window = $(window);\n takeoverEl.show();\n window.showExternalAd_takeover();\n window.setTimeout(checkAd, 500);\n takeoverInterval = window.setInterval(setAdSize, 250);\n $window.on('resize', setAdSize);\n $(takeoverCloseSelector).on('click', function (e) {\n e.preventDefault();\n window.clearInterval(takeoverInterval);\n takeoverEl.css('height', `${takeoverEl.height()}px`);\n takeoverEl.css('min-height', 0);\n takeoverEl.slideUp(200);\n window.setTimeout(function () {\n takeoverEl.get(0).remove();\n $window.off('resize', setAdSize);\n $window.trigger('resize');\n }, 200);\n });\n}\n\nfunction checkAd() {\n const iframe = $(iframeSelector);\n if (iframe.length) {\n setCookie();\n return;\n }\n takeoverEl.hide();\n}\n\nfunction setAdSize(reset = false) {\n if (reset) {\n takeoverResizedTimes = 0;\n } else if (takeoverResizedTimes > 8) {\n return;\n }\n takeoverResizedTimes++;\n const iframe = $(iframeSelector);\n if (!iframe.length) {\n return;\n }\n takeoverEl.css('height', `${$window.height()}px`);\n const ad = $(adSelector);\n ad.removeAttr('style');\n const headerHeight = $(takeoverHeaderSelector).outerHeight();\n const paneHeight = $window.height() - headerHeight;\n const paneAspectRatio = $window.width() / paneHeight;\n const iframeAspectRatio = iframe.width() / iframe.height();\n if (paneAspectRatio > iframeAspectRatio) {\n const scale = Math.min(1, paneHeight / iframe.height());\n const shiftX = ($window.width() - scale * iframe.width()) / 2 / scale;\n ad.css('transform', `scale(${scale}) translateX(${shiftX}px)`);\n } else {\n const scale = Math.min(1, $window.width() / iframe.width());\n const shiftY = (paneHeight - scale * iframe.height()) / 2;\n ad.css('transform', `scale(${scale}) translateY(${shiftY}px)`);\n }\n takeoverEl.addClass('Takeover-ad--sized');\n $window.off('resize', setAdSize);\n $window.trigger('resize');\n $window.on('resize', setAdSize);\n}\n\nfunction setCookie() {\n document.cookie = takeoverCookie + '=' + ';path=/';\n}\n\nexport default function () {\n setup();\n}\n\n\n\n// WEBPACK FOOTER //\n// ./scripts/components/takeover-ad.js","let lastScrollPos = 0;\nlet headerBottomPosition;\nlet $window;\nlet $document;\nlet $body;\nlet $header;\nlet $headerAd;\nlet $userDropdown;\nlet fixedTimeout;\nlet expandedTimeout;\nlet expandedSearchTimeout;\nlet headerAdHeight;\n\nfunction onResize() {\n setHeaderBottomPosition();\n}\n\nfunction checkHeaderAd(iteration = 1) {\n headerAdHeight = $headerAd.outerHeight();\n setTimeout(() => {\n if (headerAdHeight !== $headerAd.outerHeight()) {\n return setHeaderBottomPosition();\n }\n if (iteration <= 3) {\n checkHeaderAd(iteration + 1);\n }\n }, 500);\n}\n\nfunction setHeaderBottomPosition() {\n $body.removeClass('header-fixed');\n $header.removeClass('Header--fixed-ready').removeClass('Header--fixed');\n headerBottomPosition = $header.offset().top + $header.outerHeight();\n}\n\nfunction checkScroll() {\n const currentScrollPos = $window.scrollTop();\n // If the current scroll position is larger (past) the the bottom of the header\n const headerIsFixed = currentScrollPos > headerBottomPosition;\n if (headerIsFixed) {\n if (!$header.hasClass('Header--fixed')) {\n $body.css('padding-top', 'calc(' + $header.outerHeight() + 'px + ' + $header.css('margin-bottom') + ')');\n }\n $header.addClass('Header--fixed');\n if (!$header.hasClass('Header--fixed-ready')) {\n $body.addClass('header-fixed');\n fixedTimeout = setTimeout(() => $header.addClass('Header--fixed-ready'), 10);\n }\n } else {\n clearTimeout(fixedTimeout);\n if ($header.hasClass('Header--fixed-ready')) {\n $body.removeClass('header-fixed');\n $body.css('padding-top', 0);\n $header.removeClass('Header--fixed-ready').removeClass('Header--fixed');\n }\n }\n\n if (!$body.hasClass('expanded-menu-open')) {\n // Check if the current scroll position is less then the last i.e. user scrolls up\n $header.toggleClass('Header--fixed-show', headerIsFixed && currentScrollPos < lastScrollPos);\n }\n lastScrollPos = currentScrollPos;\n}\n\nfunction toggleExpandedMenu(e) {\n e.preventDefault();\n e.stopPropagation();\n\n const open = $body.hasClass('expanded-menu-open');\n if (!open) {\n openExpandedMenu();\n } else {\n closeExpandedMenu();\n }\n}\n\nfunction openExpandedMenu() {\n clearTimeout(expandedTimeout);\n $body.addClass('expanded-menu-open-ready');\n expandedTimeout = setTimeout(() => {\n $body.addClass('expanded-menu-open');\n expandedTimeout = setTimeout(() => $header.removeClass('Header--fixed-show'), 200);\n }, 10);\n $window.css('overflow', 'hidden');\n $body.css('overflow', 'hidden');\n $('.Header-expanded').scrollTop(0);\n $document.on('keyup', closeExpandedMenuOnEsc);\n}\n\nfunction closeExpandedMenu() {\n clearTimeout(expandedTimeout);\n $body.removeClass('expanded-menu-open');\n expandedTimeout = setTimeout(() => $body.removeClass('expanded-menu-open-ready'), 200);\n $window.css('overflow', 'initial');\n $body.css('overflow', 'initial');\n $document.off('keyup', closeExpandedMenuOnEsc);\n}\n\nfunction closeExpandedMenuOnEsc(e) {\n if (e.key === 'Escape') {\n closeExpandedMenu();\n }\n}\n\nfunction handleSubmenuMenuToggle(e) {\n const self = $(e.currentTarget);\n self.toggleClass('open');\n if (self.hasClass('open')) {\n self.children('.sub-menu').slideDown({\n duration: 150,\n start: function () {\n $(this).css('display', 'flex');\n },\n });\n } else {\n self.children('.sub-menu').slideUp(150);\n }\n}\n\nfunction openSearch() {\n $('.search-field').focus();\n}\n\nfunction focusSearch() {\n $('.search-field').closest('.search-form').addClass('is-focused');\n}\n\nfunction blurSearch() {\n $('.search-field').closest('.search-form').removeClass('is-focused');\n}\n\nfunction inputSearch(e) {\n const $input = e ? $(e.target) : $('.search-form .search-field');\n\n if ($input.val()) {\n $input.closest('.search-form').addClass('has-value');\n } else {\n $input.closest('.search-form').removeClass('has-value');\n }\n}\n\n// function openSearch() {\n// clearTimeout(expandedSearchTimeout);\n// $body.addClass('search-open-ready');\n// $('.Search-expanded .Inline-form__field').focus();\n// expandedSearchTimeout = setTimeout(() => {\n// $body.addClass('search-open')\n// }, 10);\n// $window.css('overflow', 'hidden');\n// $body.css('overflow', 'hidden');\n// $document.on('keyup', closeSearchOnEsc);\n// }\n\nfunction closeSearch() {\n clearTimeout(expandedSearchTimeout);\n $body.removeClass('search-open');\n expandedSearchTimeout = setTimeout(() => $body.removeClass('search-open-ready'), 200);\n $window.css('overflow', 'initial');\n $body.css('overflow', 'initial');\n $document.off('keyup', closeSearchOnEsc);\n}\n\nfunction closeSearchOnEsc(e) {\n if (e.key === 'Escape') {\n closeSearch();\n }\n}\n\nfunction toggleUserDropdown(e) {\n e.preventDefault();\n e.stopPropagation();\n\n if (!$userDropdown) {\n $userDropdown = $('.User-dropdown');\n }\n\n const open = $userDropdown.hasClass('User-dropdown--open');\n if (!open) {\n openUserDropdown();\n } else {\n closeUserDropdown();\n }\n}\n\nfunction openUserDropdown() {\n $userDropdown.addClass('User-dropdown--open');\n $userDropdown.find('ul').slideDown(100);\n $body.on('click', closeUserDropdown);\n $document.on('keyup', closeUserDropdownOnEsc);\n}\n\nfunction closeUserDropdown() {\n $userDropdown.removeClass('User-dropdown--open');\n $userDropdown.find('ul').slideUp(100);\n $body.off('click', closeUserDropdown);\n $document.off('keyup', closeUserDropdownOnEsc);\n}\n\nfunction closeUserDropdownOnEsc(e) {\n if (e.key === 'Escape') {\n closeUserDropdown();\n }\n}\n\nexport default function () {\n $window = $(window);\n $document = $(window.document);\n $body = $('body');\n $header = $('.Header');\n $headerAd = $('.External-ad--header');\n $body\n .on('click', '.menu-item-has-children', handleSubmenuMenuToggle)\n .on('click', '[data-toggle=\"menu\"]', toggleExpandedMenu)\n .on('click', '[data-open=\"search\"]', openSearch)\n .on('click', '[data-toggle=\"user-dropdown\"]', toggleUserDropdown)\n .on('click', '.Search-expanded form', (e) => e.stopPropagation())\n .on('focusin', '.search-form .search-field', focusSearch)\n .on('focusout', '.search-form .search-field', blurSearch)\n .on('input', '.search-form .search-field', inputSearch);\n\n if ($headerAd.length) {\n checkHeaderAd();\n }\n\n inputSearch();\n\n // Replace all links with span on menu item that has children in primary menu\n $('.Primary-menu .menu-item-has-children > a').each(function () {\n const self = $(this);\n self.replaceWith('' + self.text() + '');\n });\n\n setHeaderBottomPosition();\n $window.on('resize', onResize);\n window.setTimeout(() => {\n $window.on('scroll', checkScroll);\n }, 1000);\n}\n\n\n\n// WEBPACK FOOTER //\n// ./scripts/components/header.js","const triggers = document.querySelectorAll(\n '.Longread__thumbnail, .wp-block-image.Single__thumbnail, .Image-slider__title, .Infobox__image--trigger, .Image-slider__slide, .wp-block-image:not(.is-style-portrait):not(.portrait):not(.is-style-no-lightbox)'\n);\nlet lightboxEl;\nlet triggerEl;\nlet windowAspectRatio;\n\nfunction setWindowAspectRatio() {\n windowAspectRatio = window.innerWidth / window.innerHeight;\n}\n\nfunction setLightboxSize() {\n if (!lightboxEl) return;\n let figureEl = lightboxEl.querySelectorAll('figure');\n\n if (!figureEl.length) return;\n\n let heightPadding = figureEl.length === 1 ? 60 : 200;\n figureEl.forEach((el) => {\n const aspectRatio = el.offsetWidth / el.offsetHeight;\n let figureWidth = window.innerWidth - 30;\n if (aspectRatio < windowAspectRatio) {\n figureWidth = (window.innerHeight - heightPadding) * aspectRatio;\n }\n el.style.width = `${parseInt(figureWidth, 10)}px`;\n });\n}\n\nfunction createLightbox() {\n // No lightbox on small screens when image already stretch over the whole screen, different\n // breakpoints for aligned images compared to slider images\n if (\n window.innerWidth <= 1080 &&\n !$(this).hasClass('alignright') &&\n !$(this).find('figure.alignright').length &&\n !$(this).hasClass('alignleft') &&\n !$(this).find('figure.alignleft').length &&\n !$(this).hasClass('is-style-small') &&\n !$(this).hasClass('Longread__thumbnail') &&\n !$(this).closest('Infobox.alignright').length &&\n !$(this).closest('Infobox.alignleft').length\n ) {\n return;\n }\n if (\n window.innerWidth <= 720 &&\n ($(this).hasClass('alignright') ||\n $(this).find('figure.alignright').length ||\n $(this).hasClass('alignleft') ||\n $(this).find('figure.alignleft').length ||\n $(this).hasClass('is-style-small') ||\n $(this).closest('Infobox.alignright').length ||\n $(this).closest('Infobox.alignleft').length)\n ) {\n return;\n }\n triggerEl = this.closest('.Image-slider') || this;\n const images = triggerEl.querySelectorAll('img');\n // NOTE: We do not want the slider in lightbox any more\n // if (triggerEl.classList.contains('Image-slider')) {\n // triggerEl.querySelectorAll('[data-class]').forEach((el) => {\n // el.setAttribute('class', el.getAttribute('data-class'));\n // });\n // triggerEl.querySelector('.Lightbox__close').style.display = 'block';\n //\n // lightboxEl = triggerEl.querySelector('.Overlay');\n //\n // lightboxEl.addEventListener('click', (event) => {\n // if (!event.target.classList.contains('Lightbox') && !event.target.closest('.Lightbox')) {\n // closeSliderLightbox();\n // }\n // });\n //\n // document.addEventListener('keyup', closeSliderLightboxOnEsc);\n //\n // // create and dispatch the event\n // var event = new CustomEvent('lightbox-slider-init');\n // lightboxEl.querySelector('[data-carousel]').dispatchEvent(event);\n //\n // return;\n // }\n\n lightboxEl = document.createElement('div');\n lightboxEl.classList.add('Overlay', 'Overlay--show', 'Overlay--lightbox');\n\n const lightboxInner = document.createElement('div');\n lightboxInner.classList.add('Lightbox');\n\n const closeBtn = document.createElement('button');\n closeBtn.classList.add('Lightbox__close');\n lightboxEl.appendChild(closeBtn);\n\n let imgIndex = 0;\n if (triggerEl.classList.contains('Image-slider')) {\n // If image slider, get the index of the clicked slide\n imgIndex = Array.prototype.indexOf.call(this.parentNode.childNodes, this);\n }\n\n const imgSrc = images[imgIndex].getAttribute('src');\n const figure = document.createElement('figure');\n\n const img = document.createElement('img');\n img.setAttribute('src', imgSrc);\n figure.appendChild(img);\n\n const figcaption = document.createElement('figcaption');\n if (triggerEl.querySelector('figcaption')) {\n const caption = triggerEl.querySelector('figcaption').innerHTML;\n figcaption.innerHTML = caption;\n figure.appendChild(figcaption);\n }\n\n lightboxInner.appendChild(figure);\n\n lightboxEl.append(lightboxInner);\n document.body.insertAdjacentElement('beforeend', lightboxEl);\n lightboxEl.style.opacity = 0;\n lightboxEl.querySelector('img').addEventListener('load', showLightbox);\n lightboxEl.addEventListener('click', clickLightbox);\n document.addEventListener('keyup', closeLightboxOnEsc);\n closeBtn.addEventListener('click', closeLightbox);\n}\n\nfunction showLightbox() {\n setLightboxSize();\n document.body.style.overflow = 'hidden';\n lightboxEl.style.opacity = 1;\n}\n\nfunction clickLightbox(e) {\n if (!$(e.target).closest('figure').length && !$(e.target).closest('.Image-slider__items').length) {\n closeLightbox();\n // var event = new CustomEvent('lightbox-slider-deinit');\n // lightboxEl.querySelector('[data-carousel]').dispatchEvent(event);\n }\n}\n\nfunction closeLightboxOnEsc(e) {\n if (e.key === 'Escape') {\n closeLightbox();\n }\n}\n\nfunction closeLightbox() {\n if (lightboxEl) {\n lightboxEl.style.opacity = 0;\n setTimeout(() => lightboxEl.remove(), 200);\n }\n document.body.style.overflow = 'initial';\n document.removeEventListener('keyup', closeLightboxOnEsc);\n}\n\nfunction closeSliderLightbox() {\n triggerEl.querySelector('.Lightbox__close').style.display = 'none';\n triggerEl.querySelectorAll('[data-class]').forEach((el) => {\n el.setAttribute('class', '');\n });\n lightboxEl.querySelector('[data-carousel]').dispatchEvent(new CustomEvent('lightbox-slider-deinit'));\n document.removeEventListener('keyup', closeSliderLightboxOnEsc);\n}\n\nfunction closeSliderLightboxOnEsc(e) {\n if (e.key === 'Escape') {\n closeSliderLightbox();\n }\n}\n\nfunction eventListeners() {\n window.onresize = function () {\n setWindowAspectRatio();\n setLightboxSize();\n };\n\n triggers.forEach((trigger) => {\n trigger.addEventListener('click', createLightbox);\n });\n}\n\nexport default function () {\n eventListeners();\n setWindowAspectRatio();\n}\n\n\n\n// WEBPACK FOOTER //\n// ./scripts/components/lightbox.js","let position = 'top';\n\nlet stickyBlurb;\nlet siteMain;\nlet stickyOffsetTop;\nlet stickyOffsetBottom;\n\nfunction setup() {\n // Check if first child is Adv-list block\n siteMain = document.querySelector('.Site__main');\n const firstChild = siteMain.firstElementChild;\n if (\n (siteMain && firstChild.classList.contains('Adv-list')) ||\n firstChild.classList.contains('wp-block-group--adv-list')\n ) {\n stickyBlurb = firstChild.getElementsByClassName('Blurb').item(0);\n setStickyOffsetTop();\n\n const lastItemIndex = firstChild.getElementsByClassName('Adv-list').length;\n const unstickEl = firstChild.getElementsByClassName('Adv-list').item(lastItemIndex - 1);\n const unstickPoint = bottomOffset(unstickEl) - 30;\n\n const stickyBlurbHeight = stickyBlurb.offsetHeight;\n\n // Where bottom of the sticky element touches the unstick point\n stickyOffsetBottom = unstickPoint - stickyBlurbHeight;\n }\n}\n\nfunction setStickyOffsetTop() {\n stickyOffsetTop = topOffset(stickyBlurb) - 30;\n}\n\nfunction initBlurb() {\n if (stickyBlurb) {\n let blurbWidth = stickyBlurb.parentElement.offsetWidth;\n stickyBlurb.style.width = `${blurbWidth}px`;\n scrollPosition();\n }\n}\n\nfunction resetBlurb() {\n if (stickyBlurb && window.innerWidth < 1080) {\n stickyBlurb.style.position = 'relative';\n stickyBlurb.style.top = 'auto';\n stickyBlurb.style.width = 'inherit';\n }\n}\n\nfunction eventListeners() {\n window.onscroll = function () {\n if (window.innerWidth > 1080) {\n scrollPosition();\n }\n };\n\n window.addEventListener('resize', function () {\n if (window.innerWidth > 1080) {\n initBlurb();\n } else {\n resetBlurb();\n }\n });\n\n $(window).on('resize', setStickyOffsetTop);\n}\n\nfunction topOffset(el) {\n let offset = el.getBoundingClientRect();\n return offset.top + window.pageYOffset;\n}\n\nfunction bottomOffset(el) {\n let offset = el.getBoundingClientRect();\n return offset.bottom + window.pageYOffset;\n}\n\nfunction scrollPosition() {\n const newPosition = getPosition();\n if (newPosition === position) {\n return;\n }\n position = newPosition;\n if (position === 'sticky') {\n stickyBlurb.style.position = 'fixed';\n stickyBlurb.style.top = '30px';\n }\n if (position === 'top') {\n stickyBlurb.style.position = 'absolute';\n stickyBlurb.style.top = `${stickyOffsetTop} px`;\n }\n if (position === 'bottom') {\n stickyBlurb.style.position = 'absolute';\n stickyBlurb.style.top = stickyOffsetBottom - stickyOffsetTop + 'px';\n }\n}\n\nfunction getPosition() {\n let windowScrollPos = window.pageYOffset || document.documentElement.scrollTop;\n if (windowScrollPos > stickyOffsetTop && windowScrollPos < stickyOffsetBottom) {\n return 'sticky';\n }\n if (windowScrollPos < stickyOffsetTop) {\n return 'top';\n }\n if (windowScrollPos >= stickyOffsetBottom) {\n return 'bottom';\n }\n}\n\nexport default function () {\n window.setTimeout(function () {\n setup();\n initBlurb();\n eventListeners();\n resetBlurb();\n }, 10);\n}\n\n\n\n// WEBPACK FOOTER //\n// ./scripts/components/sticky.js","let $body;\nlet $currentToggle;\nlet $currentMenu;\nconst toggle = '.Dropdown__toggle';\nconst toggleClassShow = 'Dropdown__toggle--show';\nconst menuClassShow = 'Dropdown__menu--show';\n\nfunction openDropdownMenu(e) {\n e.preventDefault();\n\n $currentToggle = $(this);\n $currentMenu = $currentToggle.next('.Dropdown__menu');\n\n if ($currentToggle.hasClass(toggleClassShow)) {\n closeDropdownMenu();\n } else {\n $currentMenu.addClass(menuClassShow);\n $currentToggle.addClass(toggleClassShow);\n\n $body.on('keyup', closeDropdownMenuOnEsc).on('click', closeDropdownMenuOnOutsideClick);\n }\n}\n\nfunction closeDropdownMenu() {\n $currentToggle.removeClass(toggleClassShow);\n $currentMenu.removeClass(menuClassShow);\n\n $body.off('keyup', closeDropdownMenuOnEsc).off('click', closeDropdownMenuOnOutsideClick);\n}\n\nfunction closeDropdownMenuOnEsc(e) {\n if (e.key === 'Escape') {\n closeDropdownMenu();\n }\n}\n\nfunction closeDropdownMenuOnOutsideClick(e) {\n const target = $(e.target);\n\n if (!target.closest('.Dropdown').length && $currentToggle.hasClass(toggleClassShow)) {\n closeDropdownMenu();\n }\n}\n\nexport default function () {\n $body = $('body');\n\n $body.on('click', toggle, openDropdownMenu);\n}\n\n\n\n// WEBPACK FOOTER //\n// ./scripts/components/dropdown.js","let heroContainer;\nlet header;\nlet headerHeight;\nlet viewportHeight;\nlet viewportWidth;\nlet heroHeight;\n\nfunction setup() {\n header = document.querySelector('header');\n heroContainer = document.querySelector('.Longread__thumbnail');\n if (!heroContainer) {\n return;\n }\n\n viewportHeight = window.innerHeight;\n viewportWidth = window.innerWidth;\n headerHeight = header.offsetHeight;\n if (['breakpoint_md'].includes(window.globals.breakpoint)) {\n heroHeight = viewportWidth * 0.5625;\n } else {\n heroHeight = viewportHeight - headerHeight;\n }\n heroContainer.style.height = heroHeight + 'px';\n}\n\nfunction eventListeners() {\n window.addEventListener('resize', setup);\n}\n\nexport default function () {\n setup();\n eventListeners();\n}\n\n\n\n// WEBPACK FOOTER //\n// ./scripts/components/hero.js","const selector = '[data-carousel]';\nlet $window;\nlet carousels;\nlet scrollTimeout;\n\nfunction getSlidesToShow($el) {\n // data-carousel-up-to means this is only a carousel up to a given breakpoint\n if ($el.data('carousel-up-to') && $el.data('carousel-up-to') < window.globals.breakpoint) {\n return 0;\n }\n\n let itemWidth = isNaN(parseInt($el.data('carousel-item-width')))\n ? $el.parent().outerWidth()\n : parseInt($el.data('carousel-item-width'));\n\n let slidesToShow = Math.max(Math.floor($el.outerWidth() / (itemWidth || 320)), 1);\n\n return slidesToShow;\n}\n\nfunction getItemWidth($el) {\n const carouselWidth = $el.outerWidth() - getCarouselPaddingRight($el);\n return parseInt(carouselWidth / getSlidesToShow($el), 10);\n}\n\nfunction getCarouselPaddingRight($el) {\n const paddingRight = parseInt($el.data('carousel-padding-right') || 0, 10);\n if ($window.width() < 760) {\n // Never more than 50px padding on xsmall screens\n return Math.min(paddingRight, 50);\n }\n return paddingRight;\n}\n\nfunction redrawCarousels() {\n carousels.forEach((carousel) => {\n if (carousel.$el.hasClass('flickity-enabled')) {\n carousel.$el.flickity('destroy');\n carousel.timeout = setupCarouselTimeout(carousel);\n } else {\n carousel.timeout = setupCarouselTimeout(carousel);\n }\n });\n}\n\nfunction checkSlidesToShow() {\n carousels.forEach((carousel) => {\n const newSlidesToShow = getSlidesToShow(carousel.$el);\n if (newSlidesToShow == carousel.slidesToShow || carousel.$el.data('carousel-always-setup-on-resize')) {\n clearTimeout(carousel.timeout);\n carousel.slidesToShow = newSlidesToShow;\n if (carousel.$el.hasClass('flickity-enabled')) {\n carousel.$el.flickity('destroy');\n carousel.timeout = setupCarouselTimeout(carousel);\n } else {\n carousel.timeout = setupCarouselTimeout(carousel);\n }\n }\n });\n}\n\nfunction checkCarouselsInViewportDebounced() {\n window.clearTimeout(scrollTimeout);\n scrollTimeout = window.setTimeout(checkCarouselsInViewport, 50);\n}\n\nfunction checkCarouselsInViewport() {\n const aboveFoldPosition = $window.scrollTop() + $window.innerHeight();\n carousels.forEach((carousel) => {\n if (carousel.slidesToShow === 0) {\n return;\n }\n if (!carousel.$el.data('carousel-was-above-fold') && carousel.$el.offset().top < aboveFoldPosition + 100) {\n carousel.$el.data('carousel-was-above-fold', true);\n clearTimeout(carousel.timeout);\n carousel.timeout = setupCarouselTimeout(carousel);\n }\n });\n}\n\nfunction setupCarousels() {\n const $els = $(selector);\n if ($els.length === carousels.length) {\n return;\n }\n $els.each(function (i) {\n const $el = $(this);\n if (!$el.data('carousel-is-setup')) {\n $el.data('carousel-is-setup', true);\n carousels.push({\n $el: $el,\n slidesToShow: getSlidesToShow($el),\n length: $el.children().length,\n contain: true,\n pageDots: true,\n });\n setupCarouselTimeout(carousels[i]);\n // add an appropriate event listener\n carousels[i].$el.get(0).addEventListener('lightbox-slider-init', function () {\n carousels[i].$el.data('carousel-always-setup-on-resize', true);\n redrawCarousels();\n });\n\n carousels[i].$el.get(0).addEventListener('lightbox-slider-deinit', function () {\n carousels[i].$el.data('carousel-always-setup-on-resize', false);\n redrawCarousels();\n });\n }\n });\n}\n\nfunction setupCarouselTimeout(carousel) {\n if (carousel.slidesToShow === 0 || carousel.length <= 1) {\n carousel.$el.removeClass('Carousel');\n carousel.$el.children().removeAttr('style');\n return;\n }\n carousel.$el.addClass('Carousel');\n if (carousel.$el.data('carousel-item-spacing')) {\n carousel.$el\n .children()\n .not(':last-child')\n .css('marginRight', `${carousel.$el.data('carousel-item-spacing')}px`);\n }\n if (carousel.$el.hasClass('flickity-enabled')) {\n carousel.$el.flickity('destroy');\n }\n clearTimeout(carousel.timeout);\n carousel.timeout = setTimeout(() => setupCarousel(carousel), 100);\n}\n\nfunction setupCarousel(carousel) {\n if (typeof carousel.$el.flickity === 'function') {\n carousel.$el.find('.Image-slider__slide').css('width', `${getItemWidth(carousel.$el)}px`);\n carousel.flickity = carousel.$el.flickity({\n cellAlign: 'left',\n groupCells: carousel.slidesToShow,\n });\n carousel.$el.on('dragStart.flickity', () => carousel.$el.css('pointerEvents', 'none'));\n carousel.$el.on('dragEnd.flickity', () => carousel.$el.css('pointerEvents', 'auto'));\n }\n}\n\nexport default function () {\n $window = $(window);\n carousels = [];\n setupCarousels();\n $window.on('resize', checkSlidesToShow);\n $window.on('scroll', checkCarouselsInViewportDebounced);\n}\n\n\n\n// WEBPACK FOOTER //\n// ./scripts/components/carousel.js","const ownAdSelector = '.Ownad:visible';\nconst ownAdTitleSelector = '.Ownad__title';\nfunction pageLoadTracking() {\n $(ownAdSelector).each(function () {\n trackEvent({\n ...ownAdEvent($(this), 'Visades'),\n nonInteraction: true,\n });\n });\n}\n\nfunction eventListeners() {\n $(document).on('click', `${ownAdSelector} a`, function (e) {\n trackEvent(ownAdEvent($(e.target).closest(ownAdSelector), 'Klickades'));\n });\n\n $(document).on('oo-confirmation', function (e) {\n if (e.detail && e.detail.info) {\n window._mtm = window._mtm || [];\n window._mtm.push({\n event: 'purchase',\n ecommerce: {\n purchase: {\n id: e.detail.info.order_id,\n revenue: e.detail.info.order_amount,\n orderSubTotal: e.detail.info.order_amount,\n tax: e.detail.info.order_tax_amount,\n shipping: 0,\n discount: 0,\n items: [\n {\n id: 'FFD',\n name: 'FFD',\n price: e.detail.info.order_amount,\n quantity: 1,\n },\n ],\n },\n },\n });\n }\n });\n}\n\nfunction ownAdEvent(ownAd, action) {\n return {\n category: 'Egenannons',\n action: action,\n label: ownAd.find(ownAdTitleSelector).html().trim(),\n };\n}\n\nfunction trackEvent({ category, action, label = null, value = null, nonInteraction = false }) {\n const event = `ga-event${nonInteraction ? '-non-interaction' : ''}`;\n const eventObject = {\n event,\n eventCategory: category,\n eventAction: action,\n };\n if (label) {\n eventObject.eventLabel = label;\n }\n if (value) {\n eventObject.eventValue = value;\n }\n pushDataLayerEvent(eventObject);\n}\n\nfunction pushDataLayerEvent(eventObject) {\n window.dataLayer = window.dataLayer || [];\n window.dataLayer.push(eventObject);\n}\n\nexport default function () {\n pageLoadTracking();\n eventListeners();\n}\n\n\n\n// WEBPACK FOOTER //\n// ./scripts/components/tracking.js","const adsenseAdSelector = '.External-ad--adsense';\nconst panoramaAdSelector = '[class*=\"External-ad--panorama\"]';\n\nfunction setup() {\n // Remove Adsense tag inside infobox\n $(`.Infobox ${adsenseAdSelector}`).remove();\n // Remove all but first Adsense tag\n $(`${adsenseAdSelector}:not(:first)`).remove();\n // Show AdSense ad only if paywalled\n if (typeof window.displayAdsenseAd === 'function') {\n const paywalledContentClassName = window.mediaconnectParams && window.mediaconnectParams.protectedContentClassName;\n const adsenseAdIsPaywalled = $(`.${paywalledContentClassName} ${adsenseAdSelector}`).length;\n if (adsenseAdIsPaywalled) {\n $(window).on('mediaconnect:paywall_was_hidden', function () {\n window.displayAdsenseAd();\n });\n } else {\n window.displayAdsenseAd();\n }\n }\n\n // Display panorama ads if not in protected content\n $(panoramaAdSelector).each(function () {\n const $adEl = $(this);\n if (\n window.mediaconnectParams &&\n window.mediaconnectParams.protectedContentClassName &&\n $adEl.closest('.' + window.mediaconnectParams.protectedContentClassName).length\n ) {\n return;\n }\n displayPanorama($adEl);\n });\n\n // Display panorama ads in protected content when paywall is not shown\n $(window).on('mediaconnect:paywall_was_hidden', function (e, $protectedContent) {\n $protectedContent.find(panoramaAdSelector).each(function () {\n displayPanorama($(this));\n });\n });\n\n setTimeout(function () {\n responsiveExtAds();\n }, 1000);\n}\n\nfunction displayPanorama($el) {\n if (!window.googletag) {\n return;\n }\n const adId = $el.children().first().children().first().attr('id');\n if (!adId) {\n return;\n }\n window.googletag.cmd.push(function () {\n window.googletag.display(adId);\n });\n}\n\nfunction responsiveExtAds() {\n $('.External-ad').each(function () {\n const $adEl = $(this);\n // Check iframe existence\n if ($adEl.find('iframe').length == 0) {\n return;\n }\n\n // Detect the ad size\n const w = $adEl.find('iframe').attr('width');\n let h = $adEl.find('iframe').attr('height');\n if (w > 0) {\n // Scale the ad\n let scale = ($adEl.width() - 32) / w;\n\n if (scale >= 1) {\n scale = 1;\n } // max 100% of original\n\n // do the scaling\n if ($adEl.hasClass('External-ad--adsense')) {\n // For adsense ads we adjust the height to add the top and bottom margins of the [data-ad-status=\"filled\"] element\n const $filledAdEl = $adEl.find('[data-ad-status=\"filled\"]');\n h = parseInt(h, 10) + $filledAdEl.outerHeight(true) - $filledAdEl.outerHeight();\n $adEl.find('.inner').css({\n 'max-width': '100%',\n });\n $adEl.find('.inner > p').css({\n transform: 'scale(' + scale + ')',\n 'transform-origin': '0 0',\n });\n $(this).css({\n 'margin-bottom': '45px',\n });\n } else if (!$adEl.hasClass('External-ad--takeover')) {\n // Google ad adjustments - but takeover has its own adjustments.\n $adEl.find('.inner > div').css({\n transform: 'scale(' + scale + ')',\n 'transform-origin': '0 0',\n });\n\n $adEl.css({\n margin: '60px auto 45px',\n });\n }\n\n $adEl.find('.inner').css({\n width: w + 'px',\n });\n\n // Set height of the ad wrapper (fine-tune margin!)\n $adEl.height(h * scale);\n }\n });\n}\n\nexport default function () {\n setup();\n $(window).on('resize', responsiveExtAds);\n}\n\n\n\n// WEBPACK FOOTER //\n// ./scripts/components/external-ads.js","let $window;\n\nfunction handleCheckoutSuccess(checkoutData) {\n $window.trigger('mediaconnect:lockup', checkoutData);\n $window.on('mediaconnect:paywall_was_hidden', () => {\n $('html, body').animate(\n {\n scrollTop: $('Article.Single').offset().top - 100,\n },\n 500\n );\n restoreProtectedContent();\n });\n const checkoutId = $('.Paywall').data('checkout-id');\n if (checkoutId) {\n const pathName = window.location.pathname;\n history.pushState({}, '', `${pathName}?pw-${checkoutId}`);\n window.setTimeout(() => history.replaceState({}, '', pathName), 1000);\n }\n}\n\nfunction restoreProtectedContent() {\n if (!window.mediaconnectParams || !window.mediaconnectParams.protectedContentClassName) {\n return;\n }\n $('.' + window.mediaconnectParams.protectedContentClassName).each(function () {\n const $protectedEl = $(this);\n const $html = $protectedEl.data('html');\n if ($html && $html.length) {\n $html.insertBefore($protectedEl);\n $protectedEl.remove();\n }\n });\n}\n\nwindow.restore = restoreProtectedContent;\n\nexport default function () {\n $window = $(window);\n\n $(document).on('oo-confirmation', function (e) {\n if (e.detail && e.detail.info) {\n window.setTimeout(function () {\n handleCheckoutSuccess(e.detail.info);\n }, 5000);\n }\n });\n\n $window.on('mediaconnect:paywall_was_shown', (e, protectedContent) => {\n $(protectedContent).each(function () {\n const $protectedEl = $(this);\n $protectedEl.data('html', $protectedEl.clone(true));\n let index = 0;\n $protectedEl.children().each(function () {\n if (index > 2) {\n $(this).remove();\n }\n index++;\n });\n });\n });\n}\n\n\n\n// WEBPACK FOOTER //\n// ./scripts/components/paywall.js","const triggerSelector = '.splx-pagination-trigger';\nconst blockSelector = '[data-splx-block-id]';\nconst nextButtonSelector = '.splx-pagination .next';\nconst listSelector = '.splx-list';\n\nfunction triggerPagination(e) {\n e.preventDefault();\n const $trigger = $(this);\n const $block = $trigger.closest(blockSelector);\n const $nextButton = $block.find(nextButtonSelector);\n const $list = $block.find(listSelector);\n\n if ($nextButton.length) {\n $.ajax({\n type: 'GET',\n url: $nextButton.attr('href'),\n success: function (response) {\n const $blockInReponse = $(response).find(`[data-splx-block-id=\"${$block.data('splx-block-id')}\"]`);\n $list.append($blockInReponse.find(listSelector).html());\n const $nextNextButton = $blockInReponse.find(nextButtonSelector);\n if ($nextNextButton.length) {\n $nextButton.attr('href', $nextNextButton.attr('href'));\n } else {\n $trigger.remove();\n }\n },\n });\n }\n}\n\nexport default function () {\n $(triggerSelector).on('click', triggerPagination);\n}\n\n\n\n// WEBPACK FOOTER //\n// ./scripts/components/splx-pagination.js","export default {\n init() {\n // JavaScript to be fired on the home page\n },\n finalize() {\n // JavaScript to be fired on the home page, after the init JS\n },\n};\n\n\n\n// WEBPACK FOOTER //\n// ./scripts/routes/home.js","export default {\n init() {\n // JavaScript to be fired on the about us page\n },\n};\n\n\n\n// WEBPACK FOOTER //\n// ./scripts/routes/about.js","export default {\n pagination: $('.Pagination'),\n button: $('.Pagination .Button'),\n pageRx: new RegExp($('.Pagination .Button').data('page-rx')),\n page: '',\n target: $('.Pagination .Button').data('target'),\n targetItem: $('.Pagination .Button').data('target-item'),\n targetItemClass: $('.Pagination .Button').data('target-item-class'),\n maxNumPages: $('.Pagination .Button').data('max-num-pages'),\n\n init() {\n const scope = this;\n scope.page = parseInt(scope.button.attr('href').match(scope.pageRx)[1]);\n\n scope.uiActions();\n scope.detectPreviousState();\n },\n\n uiActions() {\n const scope = this;\n $(scope.button).on('click', function (e) {\n e.preventDefault();\n $(this).addClass('Button--loading');\n scope.loadPosts($(this).attr('href'));\n });\n\n $('body').on('click', scope.target + ' ' + scope.targetItem, function () {\n const state = {\n postId: $(this).attr('id'),\n posts: $(scope.target).html(),\n page: scope.page,\n };\n\n history.pushState(state, '');\n });\n },\n\n detectPreviousState() {\n const scope = this;\n let currentState = history.state;\n if (currentState && currentState.page !== 1) {\n $(scope.target).html(currentState.posts);\n scope.page = currentState.page;\n\n setTimeout(function () {\n $('html, body').animate(\n {\n scrollTop: $('#' + currentState.postId).offset().top - 50,\n },\n 0\n );\n }, 250);\n\n history.replaceState('', '');\n }\n },\n\n loadPosts(paginateUrl) {\n const scope = this;\n fetch(paginateUrl)\n .then((response) => response.text())\n .then((response) => {\n $(scope.button).removeClass('Button--loading');\n\n scope.page++;\n const $appendItems = $(response).find(scope.target + ' ' + scope.targetItem);\n const ownads = $('.Ownads, .External-ad', $appendItems);\n // ownads.parent().css('border', '1px solid red');\n\n $appendItems.attr('class', scope.targetItemClass);\n\n $(scope.target).append($appendItems);\n ownads.parent().addClass('d-none');\n\n history.pushState({}, '', paginateUrl);\n scope.button.attr(\n 'href',\n paginateUrl.replace(scope.pageRx, function (match) {\n return match.replace(/\\d+/, scope.page);\n })\n );\n\n if (scope.page > scope.maxNumPages) {\n scope.pagination.hide();\n }\n });\n },\n};\n\n\n\n// WEBPACK FOOTER //\n// ./scripts/routes/pager.js","// removed by extract-text-webpack-plugin\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./styles/main.scss\n// module id = 25\n// module chunks = 0"],"sourceRoot":""}