{"version":3,"file":"application.js","mappings":"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,KACLC,IAAK,KACLC,IAAK,KACLC,IAAK,KACLC,IAAK,KACLC,IAAK,KACLC,IAAK,KACLC,IAAK,KACLC,IAAK,KACLC,IAAK,KACLC,IAAK,KACLC,IAAK,KACLC,IAAK,KACLC,IAAK,KACLC,IAAK,KACLC,IAAK,KACLC,IAAK,KACLC,IAAK,KACLC,IAAK,KACLC,IAAK,KACLC,IAAK,KACLC,IAAK,KACLC,IAAK,KACLC,IAAK,KACLC,IAAK,KACLC,IAAK,KACLC,IAAK,KACLC,IAAK,KACLC,IAAK,KACLC,IAAK,KACLC,IAAK,KACLC,IAAK,KACLC,IAAK,KACLC,IAAK,KACLC,IAAK,KACLC,IAAK,KACLC,IAAK,KACLC,IAAK,KACLC,IAAK,KACLC,IAAK,KACLC,IAAK,KACLC,IAAK,KACLC,IAAK,KACLC,IAAK,KACLC,IAAK,KACLC,IAAK,KACLC,IAAK,KACLC,IAAK,KACLC,IAAK,KACLC,IAAK,KACLC,IAAK,KACLC,IAAK,KACLC,IAAK,KACLC,IAAK,KACLC,IAAK,KACLC,IAAK,KACLC,IAAK,KACLC,IAAK,KACLC,IAAK,KACLC,IAAK,KACLC,IAAK,KACLC,IAAK,KACLC,IAAK,KACLC,IAAK,KACLC,IAAK,KACLC,IAAK,KACLC,IAAK,KACLC,IAAK,KACLC,IAAK,KACLC,IAAK,KACLC,IAAK,KACLC,IAAK,KACLC,IAAK,KACLC,IAAK,KACLC,IAAK,KACLC,IAAK,KACLC,IAAK,KACLC,IAAK,KACLC,IAAK,KACLC,IAAK,KACLC,IAAK,KACLC,IAAK,KACLC,IAAK,KACLC,IAAK,KACLC,IAAK,KACLC,IAAK,KACLC,IAAK,KACLC,IAAK,KACLC,IAAK,KACLC,IAAK,KACLC,IAAK,KACLC,IAAK,KACLC,IAAK,KACLC,IAAK,KACLC,IAAK,KACLC,IAAK,KACLC,IAAK,KACLC,IAAK,KACLC,IAAK,KACLC,IAAK,KACLC,IAAK,KACLC,IAAK,KACLC,IAAK,KACLC,IAAK,KACLC,IAAK,KACLC,IAAK,KACLC,IAAK,KACLC,IAAK,KACLC,IAAK,KACLC,IAAK,KACLC,IAAK,KACLC,IAAK,KACLC,IAAK,KACLC,IAAK,KACLC,IAAK,KACLC,IAAK,KACLC,IAAK,KACLC,IAAK,KACLC,IAAK,KACLC,IAAK,KACLC,IAAK,KACLC,IAAK,KACLC,IAAK,KACLC,IAAK,KACLC,IAAK,KACLC,IAAK,KACLC,IAAK,KACLC,IAAK,KACLC,IAAK,KACLC,IAAK,KACLC,IAAK,KACLC,IAAK,KACLC,IAAK,KACLC,IAAK,KACLC,IAAK,KACLC,IAAK,KACLC,IAAK,KACLC,IAAK,KACLC,IAAK,KACLC,IAAK,KACLC,IAAK,KACLC,IAAK,KACLC,IAAK,KACLC,IAAK,KACLC,IAAK,KACLC,IAAK,KACLC,IAAK,KACLC,IAAK,KACLC,IAAK,KACLC,IAAK,KACLC,IAAK,KACLC,IAAK,KACLC,IAAK,KACLC,IAAK,KACLC,IAAK,KACLC,IAAK,KACLC,IAAK,KACLC,IAAK,KACLC,IAAK,KACLC,IAAK,KACLC,IAAK,KACLC,IAAK,KACLC,IAAK,KACLC,IAAK,KACLC,IAAK,KACLC,IAAK,KACLC,IAAK,KACLC,IAAK,KACLC,IAAK,KACLC,IAAK,KACLC,IAAK,KACLC,IAAK,KACLC,IAAK,KACLC,IAAK,KACLC,IAAK,KACLC,IAAK,KACLC,IAAK,KACLC,IAAK,KACLC,IAAK,KACLC,IAAK,KACLC,IAAK,KACLC,IAAK,KACLC,IAAK,KACLC,IAAK,KACLC,IAAK,KACLC,IAAK,KACLC,IAAK,KACLC,IAAK,KACLC,IAAK,KACLC,IAAK,KACLC,IAAK,KACLC,IAAK,KACLC,IAAK,KACLC,IAAK,KACLC,IAAK,KACLC,IAAK,KACLC,IAAK,KACLC,IAAK,KACLC,IAAK,KACLC,IAAK,KACLC,IAAK,KACLC,IAAK,KACLC,IAAK,KACLC,IAAK,KACLC,IAAK,KACLC,IAAK,KACLC,IAAK,KACLC,IAAK,KACLC,IAAK,KACLC,IAAK,KACLC,IAAK,KACLC,IAAK,KACLC,IAAK,KACLC,IAAK,KACLC,IAAK,KACLC,IAAK,KACLC,IAAK,KACLC,IAAK,KACLC,IAAK,K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EAAS7lE,YAAY,IAEvBwmE,EAAU53B,OAAO,EAAG43B,EAAUxpE,OAAO,GASzC,IKlPA,MCFA,IACE,CACEwtB,GAAI,KACJ68C,MACE,+FAEJ,CACE78C,GAAI,KACJ68C,MACE,oKAEJ,CACE78C,GAAI,KACJ68C,MACE,ieAEJ,CACE78C,GAAI,KACJ68C,MACE,2HAEJ,CACE78C,GAAI,KACJ68C,MAAO,2CAET,CACE78C,GAAI,KACJ68C,MACE,uJAEJ,CACE78C,GAAI,KACJ68C,MACE,iJAEJ,CACE78C,GAAI,KACJ68C,MACE,+gBAEJ,CACE78C,GAAI,KACJ68C,MACE,64BAEJ,CACE78C,GAAI,KACJ68C,MACE,oQAEJ,CACE78C,GAAI,KACJ68C,MACE,ktDAEJ,CACE78C,GAAI,KACJ68C,MAAO,8DAET,CACE78C,GAAI,KACJ68C,MACE,sUAEJ,CACE78C,GAAI,KACJ68C,MACE,oKAEJ,CACE78C,GAAI,KACJ68C,MAAO,wDAET,CACE78C,GAAI,KACJ68C,MACE,+QAEJ,CACE78C,GAAI,KACJ68C,MACE,wHAEJ,CACE78C,GAAI,KACJ68C,MACE,4RAEJ,CACE78C,GAAI,KACJ68C,MACE,qMAEJ,CACE78C,GAAI,KACJ68C,MACE,8GAEJ,CACE78C,GAAI,KACJ68C,MACE,uLAEJ,CACE78C,GAAI,KACJ68C,MAAO,mDAET,CACE78C,GAAI,KACJ68C,MAAO,oEAET,CACE78C,GAAI,KACJ68C,MACE,icAEJ,CACE78C,GAAI,KACJ68C,MACE,o5CAEJ,CACE78C,GAAI,KACJ68C,MACE,23CAEJ,CACE78C,GAAI,KACJ68C,MACE,wGAEJ,CACE78C,GAAI,KACJ68C,MACE,6RAEJ,CACE78C,GAAI,KACJ68C,MACE,2TAEJ,CACE78C,GAAI,KACJ68C,MACE,mIAEJ,CACE78C,GAAI,KACJ68C,MACE,srLAEJ,CACE78C,GAAI,KACJ68C,MACE,q2BAEJ,CACE78C,GAAI,KACJ68C,MACE,6bAEJ,CACE78C,GAAI,KACJ68C,MACE,oWAEJ,CACE78C,GAAI,KACJ68C,MACE,6KAEJ,CACE78C,GAAI,KACJ68C,MACE,oUAEJ,CACE78C,GAAI,KACJ68C,MACE,q1BAEJ,CACE78C,GAAI,KACJ68C,MACE,ibAEJ,CACE78C,GAAI,KACJ68C,MACE,+sDAEJ,CACE78C,GAAI,KACJ68C,MACE,isBAEJ,CACE78C,GAAI,KACJ68C,MACE,iQAEJ,CACE78C,GAAI,KACJ68C,MACE,ySAEJ,CACE78C,GAAI,KACJ68C,MACE,gdAEJ,CACE78C,GAAI,KACJ68C,MAAO,0DAET,CACE78C,GAAI,KACJ68C,MACE,sPAEJ,CACE78C,GAAI,KACJ68C,MACE,0PAEJ,CACE78C,GAAI,KACJ68C,MACE,8ZAEJ,CACE78C,GAAI,KACJ68C,MACE,oHAEJ,CACE78C,GAAI,KACJ68C,MACE,iLAEJ,CACE78C,GAAI,KACJ68C,MAAO,gEAET,CACE78C,GAAI,KACJ68C,MACE,2LAEJ,CACE78C,GAAI,KACJ68C,MACE,scAEJ,CACE78C,GAAI,KACJ68C,MACE,wPAEJ,CACE78C,GAAI,KACJ68C,MACE,6HAEJ,CACE78C,GAAI,KACJ68C,MACE,gTAEJ,CACE78C,GAAI,KACJ68C,MACE,oMAEJ,CACE78C,GAAI,KACJ68C,MACE,wNAEJ,CACE78C,GAAI,KACJ68C,MACE,6rBAEJ,CACE78C,GAAI,KACJ68C,MACE,+aAEJ,CACE78C,GAAI,KACJ68C,MACE,4SAEJ,CACE78C,GAAI,KACJ68C,MACE,sIAEJ,CACE78C,GAAI,KACJ68C,MACE,gwBAEJ,CACE78C,GAAI,KACJ68C,MACE,2TAEJ,CACE78C,GAAI,KACJ68C,MACE,iaAEJ,CACE78C,GAAI,KACJ68C,MACE,gOAEJ,CACE78C,GAAI,KACJ68C,MACE,6YAEJ,CACE78C,GAAI,KACJ68C,MAAO,2DAET,CACE78C,GAAI,KACJ68C,MACE,iLAEJ,CACE78C,GAAI,KACJ68C,MACE,qJAEJ,CACE78C,GAAI,KACJ68C,MACE,4LAEJ,CACE78C,GAAI,KACJ68C,MACE,g9BAEJ,CACE78C,GAAI,KACJ68C,MACE,uHAEJ,CACE78C,GAAI,KACJ68C,MACE,qdAEJ,CACE78C,GAAI,KACJ68C,MACE,sMAEJ,CACE78C,GAAI,KACJ68C,MAAO,uDAET,CACE78C,GAAI,KACJ68C,MACE,+XAEJ,CACE78C,GAAI,KACJ68C,MACE,qPAEJ,CACE78C,GAAI,KACJ68C,MACE,oIAEJ,CACE78C,GAAI,KACJ68C,MACE,2SAEJ,CACE78C,GAAI,KACJ68C,MACE,kMAEJ,CACE78C,GAAI,KACJ68C,MACE,8WAEJ,CACE78C,GAAI,KACJ68C,MACE,qSAEJ,CACE78C,GAAI,KACJ68C,MACE,+JAEJ,CACE78C,GAAI,KACJ68C,MACE,+NAEJ,CACE78C,GAAI,KACJ68C,MACE,6fAEJ,CACE78C,GAAI,KACJ68C,MACE,0zDAEJ,CACE78C,GAAI,KACJ68C,MACE,4GAEJ,CACE78C,GAAI,KACJ68C,MACE,oKAEJ,CACE78C,GAAI,KACJ68C,MACE,u+BAEJ,CACE78C,GAAI,KACJ68C,MACE,sOAEJ,CACE78C,GAAI,KACJ68C,MACE,gjBAEJ,CACE78C,GAAI,KACJ68C,MACE,kKAEJ,CACE78C,GAAI,KACJ68C,MACE,wnBAEJ,CACE78C,GAAI,KACJ68C,MACE,oFAEJ,CACE78C,GAAI,KACJ68C,MACE,2IAEJ,CACE78C,GAAI,KACJ68C,MACE,qfAEJ,CACE78C,GAAI,KACJ68C,MACE,4RAEJ,CACE78C,GAAI,KACJ68C,MACE,6PAEJ,CACE78C,GAAI,KACJ68C,MACE,yIAEJ,CACE78C,GAAI,KACJ68C,MACE,6LAEJ,CACE78C,GAAI,KACJ68C,MACE,6GAEJ,CACE78C,GAAI,KACJ68C,MACE,ySAEJ,CACE78C,GAAI,KACJ68C,MACE,oJAEJ,CACE78C,GAAI,KACJ68C,MACE,6EAEJ,CACE78C,GAAI,KACJ68C,MACE,2KAEJ,CACE78C,GAAI,KACJ68C,MACE,uzBAEJ,CACE78C,GAAI,KACJ68C,MACE,qRAEJ,CACE78C,GAAI,KACJ68C,MACE,uFAEJ,CACE78C,GAAI,KACJ68C,MAAO,+DAET,CACE78C,GAAI,KACJ68C,MACE,yFAEJ,CACE78C,GAAI,KACJ68C,MACE,uFAEJ,CACE78C,GAAI,KACJ68C,MACE,0MAEJ,CACE78C,GAAI,KACJ68C,MACE,+FAEJ,CACE78C,GAAI,KACJ68C,MACE,sIAEJ,CACE78C,GAAI,KACJ68C,MAAO,uDAET,CACE78C,GAAI,KACJ68C,MACE,+JAEJ,CACE78C,GAAI,KACJ68C,MACE,8ZAEJ,CACE78C,GAAI,KACJ68C,MACE,6bAEJ,CACE78C,GAAI,KACJ68C,MACE,0LAEJ,CACE78C,GAAI,KACJ68C,MACE,gIAEJ,CACE78C,GAAI,KACJ68C,MACE,2WAEJ,CACE78C,GAAI,KACJ68C,MACE,uHAEJ,CACE78C,GAAI,KACJ68C,MACE,khBAEJ,CACE78C,GAAI,KACJ68C,MACE,4gBAEJ,CACE78C,GAAI,KACJ68C,MACE,uiBAEJ,CACE78C,GAAI,KACJ68C,MACE,qHAEJ,CACE78C,GAAI,KACJ68C,MACE,kSAEJ,CACE78C,GAAI,KACJ68C,MAAO,+CAET,CACE78C,GAAI,KACJ68C,MACE,2FAEJ,CACE78C,GAAI,KACJ68C,MACE,4GAEJ,CACE78C,GAAI,KACJ68C,MACE,+FAEJ,CACE78C,GAAI,KACJ68C,MACE,sRAEJ,CACE78C,GAAI,KACJ68C,MACE,0oCAEJ,CACE78C,GAAI,KACJ68C,MACE,kcAEJ,CACE78C,GAAI,KACJ68C,MACE,iiBAEJ,CACE78C,GAAI,KACJ68C,MACE,mUAEJ,CACE78C,GAAI,KACJ68C,MACE,2pBAEJ,CACE78C,GAAI,KACJ68C,MACE,iaAEJ,CACE78C,GAAI,KACJ68C,MACE,0ZAEJ,CACE78C,GAAI,KACJ68C,MACE,wVAEJ,CACE78C,GAAI,KACJ68C,MACE,6GAEJ,CACE78C,GAAI,KACJ68C,MACE,+pBAEJ,CACE78C,GAAI,KACJ68C,MACE,oLAEJ,CACE78C,GAAI,KACJ68C,MAAO,2CAET,CACE78C,GAAI,KACJ68C,MACE,kfAEJ,CACE78C,GAAI,KACJ68C,MACE,2VAEJ,CACE78C,GAAI,KACJ68C,MACE,gWAEJ,CACE78C,GAAI,KACJ68C,MACE,sjBAEJ,CACE78C,GAAI,KACJ68C,MACE,m+BAEJ,CACE78C,GAAI,KACJ68C,MACE,olBAEJ,CACE78C,GAAI,KACJ68C,MACE,2yBAEJ,CACE78C,GAAI,KACJ68C,MACE,oeAEJ,CACE78C,GAAI,KACJ68C,MACE,6UAEJ,CACE78C,GAAI,KACJ68C,MAAO,uDAET,CACE78C,GAAI,KACJ68C,MACE,oTAEJ,CACE78C,GAAI,KACJ68C,MAAO,sEAET,CACE78C,GAAI,KACJ68C,MACE,mOAEJ,CACE78C,GAAI,KACJ68C,MACE,0PAEJ,CACE78C,GAAI,KACJ68C,MAAO,uEAET,CACE78C,GAAI,KACJ68C,MACE,2FAEJ,CACE78C,GAAI,KACJ68C,MACE,8TAEJ,CACE78C,GAAI,KACJ68C,MACE,mTAEJ,CACE78C,GAAI,KACJ68C,MACE,8kIAEJ,CACE78C,GAAI,KACJ68C,MACE,qGAEJ,CACE78C,GAAI,KACJ68C,MACE,uiBAEJ,CACE78C,GAAI,KACJ68C,MACE,+sDAEJ,CACE78C,GAAI,KACJ68C,MAAO,gDAET,CACE78C,GAAI,KACJ68C,MACE,ihBAEJ,CACE78C,GAAI,KACJ68C,MACE,6SAEJ,CACE78C,GAAI,KACJ68C,MAAO,2DAET,CACE78C,GAAI,KACJ68C,MACE,+HAEJ,CACE78C,GAAI,KACJ68C,MACE,mOAEJ,CACE78C,GAAI,KACJ68C,MACE,8JAEJ,CACE78C,GAAI,KACJ68C,MACE,uTAEJ,CACE78C,GAAI,KACJ68C,MACE,uWAEJ,CACE78C,GAAI,KACJ68C,MACE,4LAEJ,CACE78C,GAAI,KACJ68C,MACE,8bAEJ,CACE78C,GAAI,KACJ68C,MACE,8HAEJ,CACE78C,GAAI,KACJ68C,MACE,yIAEJ,CACE78C,GAAI,KACJ68C,MAAO,uCAET,CACE78C,GAAI,KACJ68C,MACE,uMAEJ,CACE78C,GAAI,KACJ68C,MACE,0FAEJ,CACE78C,GAAI,KACJ68C,MACE,8JAEJ,CACE78C,GAAI,KACJ68C,MACE,6aAEJ,C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","sources":["webpack://app/./node_modules/@rails/actioncable/src/adapters.js","webpack://app/./node_modules/@rails/actioncable/src/logger.js","webpack://app/./node_modules/@rails/actioncable/src/connection_monitor.js","webpack://app/./node_modules/@rails/actioncable/src/internal.js","webpack://app/./node_modules/@rails/actioncable/src/connection.js","webpack://app/./node_modules/@rails/actioncable/src/subscription.js","webpack://app/./node_modules/@rails/actioncable/src/subscription_guarantor.js","webpack://app/./node_modules/@rails/actioncable/src/subscriptions.js","webpack://app/./node_modules/@rails/actioncable/src/consumer.js","webpack://app/./node_modules/@rails/actioncable/src/index.js","webpack://app/./node_modules/country-iso-3-to-2/index.js","webpack://app/webpack/bootstrap","webpack://app/webpack/runtime/compat get default export","webpack://app/webpack/runtime/define property getters","webpack://app/webpack/runtime/hasOwnProperty shorthand","webpack://app/webpack/runtime/make namespace object","webpack://app/./node_modules/@hotwired/turbo/dist/turbo.es2017-esm.js","webpack://app/./node_modules/@hotwired/turbo-rails/app/javascript/turbo/cable.js","webpack://app/./node_modules/@hotwired/turbo-rails/app/javascript/turbo/snakeize.js","webpack://app/./node_modules/@hotwired/turbo-rails/app/javascript/turbo/cable_stream_source_element.js","webpack://app/./node_modules/swiper/shared/ssr-window.esm.mjs","webpack://app/./node_modules/@hotwired/turbo-rails/app/javascript/turbo/index.js","webpack://app/./node_modules/@hotwired/turbo-rails/app/javascript/turbo/fetch_requests.js","webpack://app/./node_modules/swiper/shared/utils.mjs","webpack://app/./node_modules/swiper/shared/swiper-core.mjs","webpack://app/./node_modules/swiper/shared/create-element-if-not-defined.mjs","webpack://app/./node_modules/swiper/modules/navigation.mjs","webpack://app/./node_modules/swiper/modules/scrollbar.mjs","webpack://app/./node_modules/swiper/shared/classes-to-selector.mjs","webpack://app/./app/javascript/modules/carbon-footprint-chart.js","webpack://app/./node_modules/world-map-country-shapes/index.js","webpack://app/./app/javascript/modules/country-svg.js","webpack://app/./app/javascript/modules/social-share.js","webpack://app/./app/javascript/application.js","webpack://app/./app/javascript/modules/modals.js","webpack://app/./app/javascript/modules/life-expectancy-chart.js","webpack://app/./app/javascript/modules/wellbeing-chart.js"],"sourcesContent":["export default {\n  logger: typeof console !== \"undefined\" ? console : undefined,\n  WebSocket: typeof WebSocket !== \"undefined\" ? WebSocket : undefined,\n}\n","import adapters from \"./adapters\"\n\n// The logger is disabled by default. You can enable it with:\n//\n//   ActionCable.logger.enabled = true\n//\n//   Example:\n//\n//   import * as ActionCable from '@rails/actioncable'\n//\n//   ActionCable.logger.enabled = true\n//   ActionCable.logger.log('Connection Established.')\n//\n\nexport default {\n  log(...messages) {\n    if (this.enabled) {\n      messages.push(Date.now())\n      adapters.logger.log(\"[ActionCable]\", ...messages)\n    }\n  },\n}\n","import logger from \"./logger\"\n\n// Responsible for ensuring the cable connection is in good health by validating the heartbeat pings sent from the server, and attempting\n// revival reconnections if things go astray. Internal class, not intended for direct user manipulation.\n\nconst now = () => new Date().getTime()\n\nconst secondsSince = time => (now() - time) / 1000\n\nclass ConnectionMonitor {\n  constructor(connection) {\n    this.visibilityDidChange = this.visibilityDidChange.bind(this)\n    this.connection = connection\n    this.reconnectAttempts = 0\n  }\n\n  start() {\n    if (!this.isRunning()) {\n      this.startedAt = now()\n      delete this.stoppedAt\n      this.startPolling()\n      addEventListener(\"visibilitychange\", this.visibilityDidChange)\n      logger.log(`ConnectionMonitor started. stale threshold = ${this.constructor.staleThreshold} s`)\n    }\n  }\n\n  stop() {\n    if (this.isRunning()) {\n      this.stoppedAt = now()\n      this.stopPolling()\n      removeEventListener(\"visibilitychange\", this.visibilityDidChange)\n      logger.log(\"ConnectionMonitor stopped\")\n    }\n  }\n\n  isRunning() {\n    return this.startedAt && !this.stoppedAt\n  }\n\n  recordPing() {\n    this.pingedAt = now()\n  }\n\n  recordConnect() {\n    this.reconnectAttempts = 0\n    this.recordPing()\n    delete this.disconnectedAt\n    logger.log(\"ConnectionMonitor recorded connect\")\n  }\n\n  recordDisconnect() {\n    this.disconnectedAt = now()\n    logger.log(\"ConnectionMonitor recorded disconnect\")\n  }\n\n  // Private\n\n  startPolling() {\n    this.stopPolling()\n    this.poll()\n  }\n\n  stopPolling() {\n    clearTimeout(this.pollTimeout)\n  }\n\n  poll() {\n    this.pollTimeout = setTimeout(() => {\n      this.reconnectIfStale()\n      this.poll()\n    }\n    , this.getPollInterval())\n  }\n\n  getPollInterval() {\n    const { staleThreshold, reconnectionBackoffRate } = this.constructor\n    const backoff = Math.pow(1 + reconnectionBackoffRate, Math.min(this.reconnectAttempts, 10))\n    const jitterMax = this.reconnectAttempts === 0 ? 1.0 : reconnectionBackoffRate\n    const jitter = jitterMax * Math.random()\n    return staleThreshold * 1000 * backoff * (1 + jitter)\n  }\n\n  reconnectIfStale() {\n    if (this.connectionIsStale()) {\n      logger.log(`ConnectionMonitor detected stale connection. reconnectAttempts = ${this.reconnectAttempts}, time stale = ${secondsSince(this.refreshedAt)} s, stale threshold = ${this.constructor.staleThreshold} s`)\n      this.reconnectAttempts++\n      if (this.disconnectedRecently()) {\n        logger.log(`ConnectionMonitor skipping reopening recent disconnect. time disconnected = ${secondsSince(this.disconnectedAt)} s`)\n      } else {\n        logger.log(\"ConnectionMonitor reopening\")\n        this.connection.reopen()\n      }\n    }\n  }\n\n  get refreshedAt() {\n    return this.pingedAt ? this.pingedAt : this.startedAt\n  }\n\n  connectionIsStale() {\n    return secondsSince(this.refreshedAt) > this.constructor.staleThreshold\n  }\n\n  disconnectedRecently() {\n    return this.disconnectedAt && (secondsSince(this.disconnectedAt) < this.constructor.staleThreshold)\n  }\n\n  visibilityDidChange() {\n    if (document.visibilityState === \"visible\") {\n      setTimeout(() => {\n        if (this.connectionIsStale() || !this.connection.isOpen()) {\n          logger.log(`ConnectionMonitor reopening stale connection on visibilitychange. visibilityState = ${document.visibilityState}`)\n          this.connection.reopen()\n        }\n      }\n      , 200)\n    }\n  }\n\n}\n\nConnectionMonitor.staleThreshold = 6 // Server::Connections::BEAT_INTERVAL * 2 (missed two pings)\nConnectionMonitor.reconnectionBackoffRate = 0.15\n\nexport default ConnectionMonitor\n","export default {\n  \"message_types\": {\n    \"welcome\": \"welcome\",\n    \"disconnect\": \"disconnect\",\n    \"ping\": \"ping\",\n    \"confirmation\": \"confirm_subscription\",\n    \"rejection\": \"reject_subscription\"\n  },\n  \"disconnect_reasons\": {\n    \"unauthorized\": \"unauthorized\",\n    \"invalid_request\": \"invalid_request\",\n    \"server_restart\": \"server_restart\",\n    \"remote\": \"remote\"\n  },\n  \"default_mount_path\": \"/cable\",\n  \"protocols\": [\n    \"actioncable-v1-json\",\n    \"actioncable-unsupported\"\n  ]\n}\n","import adapters from \"./adapters\"\nimport ConnectionMonitor from \"./connection_monitor\"\nimport INTERNAL from \"./internal\"\nimport logger from \"./logger\"\n\n// Encapsulate the cable connection held by the consumer. This is an internal class not intended for direct user manipulation.\n\nconst {message_types, protocols} = INTERNAL\nconst supportedProtocols = protocols.slice(0, protocols.length - 1)\n\nconst indexOf = [].indexOf\n\nclass Connection {\n  constructor(consumer) {\n    this.open = this.open.bind(this)\n    this.consumer = consumer\n    this.subscriptions = this.consumer.subscriptions\n    this.monitor = new ConnectionMonitor(this)\n    this.disconnected = true\n  }\n\n  send(data) {\n    if (this.isOpen()) {\n      this.webSocket.send(JSON.stringify(data))\n      return true\n    } else {\n      return false\n    }\n  }\n\n  open() {\n    if (this.isActive()) {\n      logger.log(`Attempted to open WebSocket, but existing socket is ${this.getState()}`)\n      return false\n    } else {\n      const socketProtocols = [...protocols, ...this.consumer.subprotocols || []]\n      logger.log(`Opening WebSocket, current state is ${this.getState()}, subprotocols: ${socketProtocols}`)\n      if (this.webSocket) { this.uninstallEventHandlers() }\n      this.webSocket = new adapters.WebSocket(this.consumer.url, socketProtocols)\n      this.installEventHandlers()\n      this.monitor.start()\n      return true\n    }\n  }\n\n  close({allowReconnect} = {allowReconnect: true}) {\n    if (!allowReconnect) { this.monitor.stop() }\n    // Avoid closing websockets in a \"connecting\" state due to Safari 15.1+ bug. See: https://github.com/rails/rails/issues/43835#issuecomment-1002288478\n    if (this.isOpen()) {\n      return this.webSocket.close()\n    }\n  }\n\n  reopen() {\n    logger.log(`Reopening WebSocket, current state is ${this.getState()}`)\n    if (this.isActive()) {\n      try {\n        return this.close()\n      } catch (error) {\n        logger.log(\"Failed to reopen WebSocket\", error)\n      }\n      finally {\n        logger.log(`Reopening WebSocket in ${this.constructor.reopenDelay}ms`)\n        setTimeout(this.open, this.constructor.reopenDelay)\n      }\n    } else {\n      return this.open()\n    }\n  }\n\n  getProtocol() {\n    if (this.webSocket) {\n      return this.webSocket.protocol\n    }\n  }\n\n  isOpen() {\n    return this.isState(\"open\")\n  }\n\n  isActive() {\n    return this.isState(\"open\", \"connecting\")\n  }\n\n  triedToReconnect() {\n    return this.monitor.reconnectAttempts > 0\n  }\n\n  // Private\n\n  isProtocolSupported() {\n    return indexOf.call(supportedProtocols, this.getProtocol()) >= 0\n  }\n\n  isState(...states) {\n    return indexOf.call(states, this.getState()) >= 0\n  }\n\n  getState() {\n    if (this.webSocket) {\n      for (let state in adapters.WebSocket) {\n        if (adapters.WebSocket[state] === this.webSocket.readyState) {\n          return state.toLowerCase()\n        }\n      }\n    }\n    return null\n  }\n\n  installEventHandlers() {\n    for (let eventName in this.events) {\n      const handler = this.events[eventName].bind(this)\n      this.webSocket[`on${eventName}`] = handler\n    }\n  }\n\n  uninstallEventHandlers() {\n    for (let eventName in this.events) {\n      this.webSocket[`on${eventName}`] = function() {}\n    }\n  }\n\n}\n\nConnection.reopenDelay = 500\n\nConnection.prototype.events = {\n  message(event) {\n    if (!this.isProtocolSupported()) { return }\n    const {identifier, message, reason, reconnect, type} = JSON.parse(event.data)\n    switch (type) {\n      case message_types.welcome:\n        if (this.triedToReconnect()) {\n          this.reconnectAttempted = true\n        }\n        this.monitor.recordConnect()\n        return this.subscriptions.reload()\n      case message_types.disconnect:\n        logger.log(`Disconnecting. Reason: ${reason}`)\n        return this.close({allowReconnect: reconnect})\n      case message_types.ping:\n        return this.monitor.recordPing()\n      case message_types.confirmation:\n        this.subscriptions.confirmSubscription(identifier)\n        if (this.reconnectAttempted) {\n          this.reconnectAttempted = false\n          return this.subscriptions.notify(identifier, \"connected\", {reconnected: true})\n        } else {\n          return this.subscriptions.notify(identifier, \"connected\", {reconnected: false})\n        }\n      case message_types.rejection:\n        return this.subscriptions.reject(identifier)\n      default:\n        return this.subscriptions.notify(identifier, \"received\", message)\n    }\n  },\n\n  open() {\n    logger.log(`WebSocket onopen event, using '${this.getProtocol()}' subprotocol`)\n    this.disconnected = false\n    if (!this.isProtocolSupported()) {\n      logger.log(\"Protocol is unsupported. Stopping monitor and disconnecting.\")\n      return this.close({allowReconnect: false})\n    }\n  },\n\n  close(event) {\n    logger.log(\"WebSocket onclose event\")\n    if (this.disconnected) { return }\n    this.disconnected = true\n    this.monitor.recordDisconnect()\n    return this.subscriptions.notifyAll(\"disconnected\", {willAttemptReconnect: this.monitor.isRunning()})\n  },\n\n  error() {\n    logger.log(\"WebSocket onerror event\")\n  }\n}\n\nexport default Connection\n","// A new subscription is created through the ActionCable.Subscriptions instance available on the consumer.\n// It provides a number of callbacks and a method for calling remote procedure calls on the corresponding\n// Channel instance on the server side.\n//\n// An example demonstrates the basic functionality:\n//\n//   App.appearance = App.cable.subscriptions.create(\"AppearanceChannel\", {\n//     connected() {\n//       // Called once the subscription has been successfully completed\n//     },\n//\n//     disconnected({ willAttemptReconnect: boolean }) {\n//       // Called when the client has disconnected with the server.\n//       // The object will have an `willAttemptReconnect` property which\n//       // says whether the client has the intention of attempting\n//       // to reconnect.\n//     },\n//\n//     appear() {\n//       this.perform('appear', {appearing_on: this.appearingOn()})\n//     },\n//\n//     away() {\n//       this.perform('away')\n//     },\n//\n//     appearingOn() {\n//       $('main').data('appearing-on')\n//     }\n//   })\n//\n// The methods #appear and #away forward their intent to the remote AppearanceChannel instance on the server\n// by calling the `perform` method with the first parameter being the action (which maps to AppearanceChannel#appear/away).\n// The second parameter is a hash that'll get JSON encoded and made available on the server in the data parameter.\n//\n// This is how the server component would look:\n//\n//   class AppearanceChannel < ApplicationActionCable::Channel\n//     def subscribed\n//       current_user.appear\n//     end\n//\n//     def unsubscribed\n//       current_user.disappear\n//     end\n//\n//     def appear(data)\n//       current_user.appear on: data['appearing_on']\n//     end\n//\n//     def away\n//       current_user.away\n//     end\n//   end\n//\n// The \"AppearanceChannel\" name is automatically mapped between the client-side subscription creation and the server-side Ruby class name.\n// The AppearanceChannel#appear/away public methods are exposed automatically to client-side invocation through the perform method.\n\nconst extend = function(object, properties) {\n  if (properties != null) {\n    for (let key in properties) {\n      const value = properties[key]\n      object[key] = value\n    }\n  }\n  return object\n}\n\nexport default class Subscription {\n  constructor(consumer, params = {}, mixin) {\n    this.consumer = consumer\n    this.identifier = JSON.stringify(params)\n    extend(this, mixin)\n  }\n\n  // Perform a channel action with the optional data passed as an attribute\n  perform(action, data = {}) {\n    data.action = action\n    return this.send(data)\n  }\n\n  send(data) {\n    return this.consumer.send({command: \"message\", identifier: this.identifier, data: JSON.stringify(data)})\n  }\n\n  unsubscribe() {\n    return this.consumer.subscriptions.remove(this)\n  }\n}\n","import logger from \"./logger\"\n\n// Responsible for ensuring channel subscribe command is confirmed, retrying until confirmation is received.\n// Internal class, not intended for direct user manipulation.\n\nclass SubscriptionGuarantor {\n  constructor(subscriptions) {\n    this.subscriptions = subscriptions\n    this.pendingSubscriptions = []\n  }\n\n  guarantee(subscription) {\n    if(this.pendingSubscriptions.indexOf(subscription) == -1){ \n      logger.log(`SubscriptionGuarantor guaranteeing ${subscription.identifier}`)\n      this.pendingSubscriptions.push(subscription) \n    }\n    else {\n      logger.log(`SubscriptionGuarantor already guaranteeing ${subscription.identifier}`)\n    }\n    this.startGuaranteeing()\n  }\n\n  forget(subscription) {\n    logger.log(`SubscriptionGuarantor forgetting ${subscription.identifier}`)\n    this.pendingSubscriptions = (this.pendingSubscriptions.filter((s) => s !== subscription))\n  }\n\n  startGuaranteeing() {\n    this.stopGuaranteeing()\n    this.retrySubscribing()\n  }\n  \n  stopGuaranteeing() {\n    clearTimeout(this.retryTimeout)\n  }\n\n  retrySubscribing() {\n    this.retryTimeout = setTimeout(() => {\n      if (this.subscriptions && typeof(this.subscriptions.subscribe) === \"function\") {\n        this.pendingSubscriptions.map((subscription) => {\n          logger.log(`SubscriptionGuarantor resubscribing ${subscription.identifier}`)\n          this.subscriptions.subscribe(subscription)\n        })\n      }\n    }\n    , 500)\n  }\n}\n\nexport default SubscriptionGuarantor","import Subscription from \"./subscription\"\nimport SubscriptionGuarantor from \"./subscription_guarantor\"\nimport logger from \"./logger\"\n\n// Collection class for creating (and internally managing) channel subscriptions.\n// The only method intended to be triggered by the user is ActionCable.Subscriptions#create,\n// and it should be called through the consumer like so:\n//\n//   App = {}\n//   App.cable = ActionCable.createConsumer(\"ws://example.com/accounts/1\")\n//   App.appearance = App.cable.subscriptions.create(\"AppearanceChannel\")\n//\n// For more details on how you'd configure an actual channel subscription, see ActionCable.Subscription.\n\nexport default class Subscriptions {\n  constructor(consumer) {\n    this.consumer = consumer\n    this.guarantor = new SubscriptionGuarantor(this)\n    this.subscriptions = []\n  }\n\n  create(channelName, mixin) {\n    const channel = channelName\n    const params = typeof channel === \"object\" ? channel : {channel}\n    const subscription = new Subscription(this.consumer, params, mixin)\n    return this.add(subscription)\n  }\n\n  // Private\n\n  add(subscription) {\n    this.subscriptions.push(subscription)\n    this.consumer.ensureActiveConnection()\n    this.notify(subscription, \"initialized\")\n    this.subscribe(subscription)\n    return subscription\n  }\n\n  remove(subscription) {\n    this.forget(subscription)\n    if (!this.findAll(subscription.identifier).length) {\n      this.sendCommand(subscription, \"unsubscribe\")\n    }\n    return subscription\n  }\n\n  reject(identifier) {\n    return this.findAll(identifier).map((subscription) => {\n      this.forget(subscription)\n      this.notify(subscription, \"rejected\")\n      return subscription\n    })\n  }\n\n  forget(subscription) {\n    this.guarantor.forget(subscription)\n    this.subscriptions = (this.subscriptions.filter((s) => s !== subscription))\n    return subscription\n  }\n\n  findAll(identifier) {\n    return this.subscriptions.filter((s) => s.identifier === identifier)\n  }\n\n  reload() {\n    return this.subscriptions.map((subscription) =>\n      this.subscribe(subscription))\n  }\n\n  notifyAll(callbackName, ...args) {\n    return this.subscriptions.map((subscription) =>\n      this.notify(subscription, callbackName, ...args))\n  }\n\n  notify(subscription, callbackName, ...args) {\n    let subscriptions\n    if (typeof subscription === \"string\") {\n      subscriptions = this.findAll(subscription)\n    } else {\n      subscriptions = [subscription]\n    }\n\n    return subscriptions.map((subscription) =>\n      (typeof subscription[callbackName] === \"function\" ? subscription[callbackName](...args) : undefined))\n  }\n\n  subscribe(subscription) {\n    if (this.sendCommand(subscription, \"subscribe\")) {\n      this.guarantor.guarantee(subscription)\n    }\n  }\n\n  confirmSubscription(identifier) {\n    logger.log(`Subscription confirmed ${identifier}`)\n    this.findAll(identifier).map((subscription) =>\n      this.guarantor.forget(subscription))\n  }\n\n  sendCommand(subscription, command) {\n    const {identifier} = subscription\n    return this.consumer.send({command, identifier})\n  }\n}\n","import Connection from \"./connection\"\nimport Subscriptions from \"./subscriptions\"\n\n// The ActionCable.Consumer establishes the connection to a server-side Ruby Connection object. Once established,\n// the ActionCable.ConnectionMonitor will ensure that its properly maintained through heartbeats and checking for stale updates.\n// The Consumer instance is also the gateway to establishing subscriptions to desired channels through the #createSubscription\n// method.\n//\n// The following example shows how this can be set up:\n//\n//   App = {}\n//   App.cable = ActionCable.createConsumer(\"ws://example.com/accounts/1\")\n//   App.appearance = App.cable.subscriptions.create(\"AppearanceChannel\")\n//\n// For more details on how you'd configure an actual channel subscription, see ActionCable.Subscription.\n//\n// When a consumer is created, it automatically connects with the server.\n//\n// To disconnect from the server, call\n//\n//   App.cable.disconnect()\n//\n// and to restart the connection:\n//\n//   App.cable.connect()\n//\n// Any channel subscriptions which existed prior to disconnecting will\n// automatically resubscribe.\n\nexport default class Consumer {\n  constructor(url) {\n    this._url = url\n    this.subscriptions = new Subscriptions(this)\n    this.connection = new Connection(this)\n    this.subprotocols = []\n  }\n\n  get url() {\n    return createWebSocketURL(this._url)\n  }\n\n  send(data) {\n    return this.connection.send(data)\n  }\n\n  connect() {\n    return this.connection.open()\n  }\n\n  disconnect() {\n    return this.connection.close({allowReconnect: false})\n  }\n\n  ensureActiveConnection() {\n    if (!this.connection.isActive()) {\n      return this.connection.open()\n    }\n  }\n\n  addSubProtocol(subprotocol) {\n    this.subprotocols = [...this.subprotocols, subprotocol]\n  }\n}\n\nexport function createWebSocketURL(url) {\n  if (typeof url === \"function\") {\n    url = url()\n  }\n\n  if (url && !/^wss?:/i.test(url)) {\n    const a = document.createElement(\"a\")\n    a.href = url\n    // Fix populating Location properties in IE. Otherwise, protocol will be blank.\n    a.href = a.href\n    a.protocol = a.protocol.replace(\"http\", \"ws\")\n    return a.href\n  } else {\n    return url\n  }\n}\n","import Connection from \"./connection\"\nimport ConnectionMonitor from \"./connection_monitor\"\nimport Consumer, { createWebSocketURL } from \"./consumer\"\nimport INTERNAL from \"./internal\"\nimport Subscription from \"./subscription\"\nimport Subscriptions from \"./subscriptions\"\nimport SubscriptionGuarantor from \"./subscription_guarantor\"\nimport adapters from \"./adapters\"\nimport logger from \"./logger\"\n\nexport {\n  Connection,\n  ConnectionMonitor,\n  Consumer,\n  INTERNAL,\n  Subscription,\n  Subscriptions,\n  SubscriptionGuarantor,\n  adapters,\n  createWebSocketURL,\n  logger,\n}\n\nexport function createConsumer(url = getConfig(\"url\") || INTERNAL.default_mount_path) {\n  return new Consumer(url)\n}\n\nexport function getConfig(name) {\n  const element = document.head.querySelector(`meta[name='action-cable-${name}']`)\n  if (element) {\n    return element.getAttribute(\"content\")\n  }\n}\n","var countryISOMapping = {\n  AFG: \"AF\",\n  ALA: \"AX\",\n  ALB: \"AL\",\n  DZA: \"DZ\",\n  ASM: \"AS\",\n  AND: \"AD\",\n  AGO: \"AO\",\n  AIA: \"AI\",\n  ATA: \"AQ\",\n  ATG: \"AG\",\n  ARG: \"AR\",\n  ARM: \"AM\",\n  ABW: \"AW\",\n  AUS: \"AU\",\n  AUT: \"AT\",\n  AZE: \"AZ\",\n  BHS: \"BS\",\n  BHR: \"BH\",\n  BGD: \"BD\",\n  BRB: \"BB\",\n  BLR: \"BY\",\n  BEL: \"BE\",\n  BLZ: \"BZ\",\n  BEN: \"BJ\",\n  BMU: \"BM\",\n  BTN: \"BT\",\n  BOL: \"BO\",\n  BES: \"BQ\",\n  BIH: \"BA\",\n  BWA: \"BW\",\n  BVT: \"BV\",\n  BRA: \"BR\",\n  VGB: \"VG\",\n  IOT: \"IO\",\n  BRN: \"BN\",\n  BGR: \"BG\",\n  BFA: \"BF\",\n  BDI: \"BI\",\n  KHM: \"KH\",\n  CMR: \"CM\",\n  CAN: \"CA\",\n  CPV: \"CV\",\n  CYM: \"KY\",\n  CAF: \"CF\",\n  TCD: \"TD\",\n  CHL: \"CL\",\n  CHN: \"CN\",\n  HKG: \"HK\",\n  MAC: \"MO\",\n  CXR: \"CX\",\n  CCK: \"CC\",\n  COL: \"CO\",\n  COM: \"KM\",\n  COG: \"CG\",\n  COD: \"CD\",\n  COK: \"CK\",\n  CRI: \"CR\",\n  CIV: \"CI\",\n  HRV: \"HR\",\n  CUB: \"CU\",\n  CUW: \"CW\",\n  CYP: \"CY\",\n  CZE: \"CZ\",\n  DNK: \"DK\",\n  DJI: \"DJ\",\n  DMA: \"DM\",\n  DOM: \"DO\",\n  ECU: \"EC\",\n  EGY: \"EG\",\n  SLV: \"SV\",\n  GNQ: \"GQ\",\n  ERI: \"ER\",\n  EST: \"EE\",\n  ETH: \"ET\",\n  FLK: \"FK\",\n  FRO: \"FO\",\n  FJI: \"FJ\",\n  FIN: \"FI\",\n  FRA: \"FR\",\n  GUF: \"GF\",\n  PYF: \"PF\",\n  ATF: \"TF\",\n  GAB: \"GA\",\n  GMB: \"GM\",\n  GEO: \"GE\",\n  DEU: \"DE\",\n  GHA: \"GH\",\n  GIB: \"GI\",\n  GRC: \"GR\",\n  GRL: \"GL\",\n  GRD: \"GD\",\n  GLP: \"GP\",\n  GUM: \"GU\",\n  GTM: \"GT\",\n  GGY: \"GG\",\n  GIN: \"GN\",\n  GNB: \"GW\",\n  GUY: \"GY\",\n  HTI: \"HT\",\n  HMD: \"HM\",\n  VAT: \"VA\",\n  HND: \"HN\",\n  HUN: \"HU\",\n  ISL: \"IS\",\n  IND: \"IN\",\n  IDN: \"ID\",\n  IRN: \"IR\",\n  IRQ: \"IQ\",\n  IRL: \"IE\",\n  IMN: \"IM\",\n  ISR: \"IL\",\n  ITA: \"IT\",\n  JAM: \"JM\",\n  JPN: \"JP\",\n  JEY: \"JE\",\n  JOR: \"JO\",\n  KAZ: \"KZ\",\n  KEN: \"KE\",\n  KIR: \"KI\",\n  PRK: \"KP\",\n  KOR: \"KR\",\n  KWT: \"KW\",\n  KGZ: \"KG\",\n  LAO: \"LA\",\n  LVA: \"LV\",\n  LBN: \"LB\",\n  LSO: \"LS\",\n  LBR: \"LR\",\n  LBY: \"LY\",\n  LIE: \"LI\",\n  LTU: \"LT\",\n  LUX: \"LU\",\n  MKD: \"MK\",\n  MDG: \"MG\",\n  MWI: \"MW\",\n  MYS: \"MY\",\n  MDV: \"MV\",\n  MLI: \"ML\",\n  MLT: \"MT\",\n  MHL: \"MH\",\n  MTQ: \"MQ\",\n  MRT: \"MR\",\n  MUS: \"MU\",\n  MYT: \"YT\",\n  MEX: \"MX\",\n  FSM: \"FM\",\n  MDA: \"MD\",\n  MCO: \"MC\",\n  MNG: \"MN\",\n  MNE: \"ME\",\n  MSR: \"MS\",\n  MAR: \"MA\",\n  MOZ: \"MZ\",\n  MMR: \"MM\",\n  NAM: \"NA\",\n  NRU: \"NR\",\n  NPL: \"NP\",\n  NLD: \"NL\",\n  ANT: \"AN\",\n  NCL: \"NC\",\n  NZL: \"NZ\",\n  NIC: \"NI\",\n  NER: \"NE\",\n  NGA: \"NG\",\n  NIU: \"NU\",\n  NFK: \"NF\",\n  MNP: \"MP\",\n  NOR: \"NO\",\n  OMN: \"OM\",\n  PAK: \"PK\",\n  PLW: \"PW\",\n  PSE: \"PS\",\n  PAN: \"PA\",\n  PNG: \"PG\",\n  PRY: \"PY\",\n  PER: \"PE\",\n  PHL: \"PH\",\n  PCN: \"PN\",\n  POL: \"PL\",\n  PRT: \"PT\",\n  PRI: \"PR\",\n  QAT: \"QA\",\n  REU: \"RE\",\n  ROU: \"RO\",\n  RUS: \"RU\",\n  RWA: \"RW\",\n  BLM: \"BL\",\n  SHN: \"SH\",\n  KNA: \"KN\",\n  LCA: \"LC\",\n  MAF: \"MF\",\n  SPM: \"PM\",\n  VCT: \"VC\",\n  WSM: \"WS\",\n  SMR: \"SM\",\n  STP: \"ST\",\n  SAU: \"SA\",\n  SEN: \"SN\",\n  SRB: \"RS\",\n  SYC: \"SC\",\n  SLE: \"SL\",\n  SGP: \"SG\",\n  SXM: \"SX\",\n  SVK: \"SK\",\n  SVN: \"SI\",\n  SLB: \"SB\",\n  SOM: \"SO\",\n  ZAF: \"ZA\",\n  SGS: \"GS\",\n  SSD: \"SS\",\n  ESP: \"ES\",\n  LKA: \"LK\",\n  SDN: \"SD\",\n  SUR: \"SR\",\n  SJM: \"SJ\",\n  SWZ: \"SZ\",\n  SWE: \"SE\",\n  CHE: \"CH\",\n  SYR: \"SY\",\n  TWN: \"TW\",\n  TJK: \"TJ\",\n  TZA: \"TZ\",\n  THA: \"TH\",\n  TLS: \"TL\",\n  TGO: \"TG\",\n  TKL: \"TK\",\n  TON: \"TO\",\n  TTO: \"TT\",\n  TUN: \"TN\",\n  TUR: \"TR\",\n  TKM: \"TM\",\n  TCA: \"TC\",\n  TUV: \"TV\",\n  UGA: \"UG\",\n  UKR: \"UA\",\n  ARE: \"AE\",\n  GBR: \"GB\",\n  USA: \"US\",\n  UMI: \"UM\",\n  URY: \"UY\",\n  UZB: \"UZ\",\n  VUT: \"VU\",\n  VEN: \"VE\",\n  VNM: \"VN\",\n  VIR: \"VI\",\n  WLF: \"WF\",\n  ESH: \"EH\",\n  YEM: \"YE\",\n  ZMB: \"ZM\",\n  ZWE: \"ZW\",\n  XKX: \"XK\"\n}\n\nmodule.exports = function getCountryISO2(countryCode) {\n  return countryISOMapping[countryCode]\n}\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","/*!\nTurbo 8.0.4\nCopyright © 2024 37signals LLC\n */\n/**\n * The MIT License (MIT)\n *\n * Copyright (c) 2019 Javan Makhmali\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n */\n\n(function (prototype) {\n  if (typeof prototype.requestSubmit == \"function\") return\n\n  prototype.requestSubmit = function (submitter) {\n    if (submitter) {\n      validateSubmitter(submitter, this);\n      submitter.click();\n    } else {\n      submitter = document.createElement(\"input\");\n      submitter.type = \"submit\";\n      submitter.hidden = true;\n      this.appendChild(submitter);\n      submitter.click();\n      this.removeChild(submitter);\n    }\n  };\n\n  function validateSubmitter(submitter, form) {\n    submitter instanceof HTMLElement || raise(TypeError, \"parameter 1 is not of type 'HTMLElement'\");\n    submitter.type == \"submit\" || raise(TypeError, \"The specified element is not a submit button\");\n    submitter.form == form ||\n      raise(DOMException, \"The specified element is not owned by this form element\", \"NotFoundError\");\n  }\n\n  function raise(errorConstructor, message, name) {\n    throw new errorConstructor(\"Failed to execute 'requestSubmit' on 'HTMLFormElement': \" + message + \".\", name)\n  }\n})(HTMLFormElement.prototype);\n\nconst submittersByForm = new WeakMap();\n\nfunction findSubmitterFromClickTarget(target) {\n  const element = target instanceof Element ? target : target instanceof Node ? target.parentElement : null;\n  const candidate = element ? element.closest(\"input, button\") : null;\n  return candidate?.type == \"submit\" ? candidate : null\n}\n\nfunction clickCaptured(event) {\n  const submitter = findSubmitterFromClickTarget(event.target);\n\n  if (submitter && submitter.form) {\n    submittersByForm.set(submitter.form, submitter);\n  }\n}\n\n(function () {\n  if (\"submitter\" in Event.prototype) return\n\n  let prototype = window.Event.prototype;\n  // Certain versions of Safari 15 have a bug where they won't\n  // populate the submitter. This hurts TurboDrive's enable/disable detection.\n  // See https://bugs.webkit.org/show_bug.cgi?id=229660\n  if (\"SubmitEvent\" in window) {\n    const prototypeOfSubmitEvent = window.SubmitEvent.prototype;\n\n    if (/Apple Computer/.test(navigator.vendor) && !(\"submitter\" in prototypeOfSubmitEvent)) {\n      prototype = prototypeOfSubmitEvent;\n    } else {\n      return // polyfill not needed\n    }\n  }\n\n  addEventListener(\"click\", clickCaptured, true);\n\n  Object.defineProperty(prototype, \"submitter\", {\n    get() {\n      if (this.type == \"submit\" && this.target instanceof HTMLFormElement) {\n        return submittersByForm.get(this.target)\n      }\n    }\n  });\n})();\n\nconst FrameLoadingStyle = {\n  eager: \"eager\",\n  lazy: \"lazy\"\n};\n\n/**\n * Contains a fragment of HTML which is updated based on navigation within\n * it (e.g. via links or form submissions).\n *\n * @customElement turbo-frame\n * @example\n *   <turbo-frame id=\"messages\">\n *     <a href=\"/messages/expanded\">\n *       Show all expanded messages in this frame.\n *     </a>\n *\n *     <form action=\"/messages\">\n *       Show response from this form within this frame.\n *     </form>\n *   </turbo-frame>\n */\nclass FrameElement extends HTMLElement {\n  static delegateConstructor = undefined\n\n  loaded = Promise.resolve()\n\n  static get observedAttributes() {\n    return [\"disabled\", \"loading\", \"src\"]\n  }\n\n  constructor() {\n    super();\n    this.delegate = new FrameElement.delegateConstructor(this);\n  }\n\n  connectedCallback() {\n    this.delegate.connect();\n  }\n\n  disconnectedCallback() {\n    this.delegate.disconnect();\n  }\n\n  reload() {\n    return this.delegate.sourceURLReloaded()\n  }\n\n  attributeChangedCallback(name) {\n    if (name == \"loading\") {\n      this.delegate.loadingStyleChanged();\n    } else if (name == \"src\") {\n      this.delegate.sourceURLChanged();\n    } else if (name == \"disabled\") {\n      this.delegate.disabledChanged();\n    }\n  }\n\n  /**\n   * Gets the URL to lazily load source HTML from\n   */\n  get src() {\n    return this.getAttribute(\"src\")\n  }\n\n  /**\n   * Sets the URL to lazily load source HTML from\n   */\n  set src(value) {\n    if (value) {\n      this.setAttribute(\"src\", value);\n    } else {\n      this.removeAttribute(\"src\");\n    }\n  }\n\n  /**\n   * Gets the refresh mode for the frame.\n   */\n  get refresh() {\n    return this.getAttribute(\"refresh\")\n  }\n\n  /**\n   * Sets the refresh mode for the frame.\n   */\n  set refresh(value) {\n    if (value) {\n      this.setAttribute(\"refresh\", value);\n    } else {\n      this.removeAttribute(\"refresh\");\n    }\n  }\n\n  /**\n   * Determines if the element is loading\n   */\n  get loading() {\n    return frameLoadingStyleFromString(this.getAttribute(\"loading\") || \"\")\n  }\n\n  /**\n   * Sets the value of if the element is loading\n   */\n  set loading(value) {\n    if (value) {\n      this.setAttribute(\"loading\", value);\n    } else {\n      this.removeAttribute(\"loading\");\n    }\n  }\n\n  /**\n   * Gets the disabled state of the frame.\n   *\n   * If disabled, no requests will be intercepted by the frame.\n   */\n  get disabled() {\n    return this.hasAttribute(\"disabled\")\n  }\n\n  /**\n   * Sets the disabled state of the frame.\n   *\n   * If disabled, no requests will be intercepted by the frame.\n   */\n  set disabled(value) {\n    if (value) {\n      this.setAttribute(\"disabled\", \"\");\n    } else {\n      this.removeAttribute(\"disabled\");\n    }\n  }\n\n  /**\n   * Gets the autoscroll state of the frame.\n   *\n   * If true, the frame will be scrolled into view automatically on update.\n   */\n  get autoscroll() {\n    return this.hasAttribute(\"autoscroll\")\n  }\n\n  /**\n   * Sets the autoscroll state of the frame.\n   *\n   * If true, the frame will be scrolled into view automatically on update.\n   */\n  set autoscroll(value) {\n    if (value) {\n      this.setAttribute(\"autoscroll\", \"\");\n    } else {\n      this.removeAttribute(\"autoscroll\");\n    }\n  }\n\n  /**\n   * Determines if the element has finished loading\n   */\n  get complete() {\n    return !this.delegate.isLoading\n  }\n\n  /**\n   * Gets the active state of the frame.\n   *\n   * If inactive, source changes will not be observed.\n   */\n  get isActive() {\n    return this.ownerDocument === document && !this.isPreview\n  }\n\n  /**\n   * Sets the active state of the frame.\n   *\n   * If inactive, source changes will not be observed.\n   */\n  get isPreview() {\n    return this.ownerDocument?.documentElement?.hasAttribute(\"data-turbo-preview\")\n  }\n}\n\nfunction frameLoadingStyleFromString(style) {\n  switch (style.toLowerCase()) {\n    case \"lazy\":\n      return FrameLoadingStyle.lazy\n    default:\n      return FrameLoadingStyle.eager\n  }\n}\n\nfunction expandURL(locatable) {\n  return new URL(locatable.toString(), document.baseURI)\n}\n\nfunction getAnchor(url) {\n  let anchorMatch;\n  if (url.hash) {\n    return url.hash.slice(1)\n    // eslint-disable-next-line no-cond-assign\n  } else if ((anchorMatch = url.href.match(/#(.*)$/))) {\n    return anchorMatch[1]\n  }\n}\n\nfunction getAction$1(form, submitter) {\n  const action = submitter?.getAttribute(\"formaction\") || form.getAttribute(\"action\") || form.action;\n\n  return expandURL(action)\n}\n\nfunction getExtension(url) {\n  return (getLastPathComponent(url).match(/\\.[^.]*$/) || [])[0] || \"\"\n}\n\nfunction isHTML(url) {\n  return !!getExtension(url).match(/^(?:|\\.(?:htm|html|xhtml|php))$/)\n}\n\nfunction isPrefixedBy(baseURL, url) {\n  const prefix = getPrefix(url);\n  return baseURL.href === expandURL(prefix).href || baseURL.href.startsWith(prefix)\n}\n\nfunction locationIsVisitable(location, rootLocation) {\n  return isPrefixedBy(location, rootLocation) && isHTML(location)\n}\n\nfunction getRequestURL(url) {\n  const anchor = getAnchor(url);\n  return anchor != null ? url.href.slice(0, -(anchor.length + 1)) : url.href\n}\n\nfunction toCacheKey(url) {\n  return getRequestURL(url)\n}\n\nfunction urlsAreEqual(left, right) {\n  return expandURL(left).href == expandURL(right).href\n}\n\nfunction getPathComponents(url) {\n  return url.pathname.split(\"/\").slice(1)\n}\n\nfunction getLastPathComponent(url) {\n  return getPathComponents(url).slice(-1)[0]\n}\n\nfunction getPrefix(url) {\n  return addTrailingSlash(url.origin + url.pathname)\n}\n\nfunction addTrailingSlash(value) {\n  return value.endsWith(\"/\") ? value : value + \"/\"\n}\n\nclass FetchResponse {\n  constructor(response) {\n    this.response = response;\n  }\n\n  get succeeded() {\n    return this.response.ok\n  }\n\n  get failed() {\n    return !this.succeeded\n  }\n\n  get clientError() {\n    return this.statusCode >= 400 && this.statusCode <= 499\n  }\n\n  get serverError() {\n    return this.statusCode >= 500 && this.statusCode <= 599\n  }\n\n  get redirected() {\n    return this.response.redirected\n  }\n\n  get location() {\n    return expandURL(this.response.url)\n  }\n\n  get isHTML() {\n    return this.contentType && this.contentType.match(/^(?:text\\/([^\\s;,]+\\b)?html|application\\/xhtml\\+xml)\\b/)\n  }\n\n  get statusCode() {\n    return this.response.status\n  }\n\n  get contentType() {\n    return this.header(\"Content-Type\")\n  }\n\n  get responseText() {\n    return this.response.clone().text()\n  }\n\n  get responseHTML() {\n    if (this.isHTML) {\n      return this.response.clone().text()\n    } else {\n      return Promise.resolve(undefined)\n    }\n  }\n\n  header(name) {\n    return this.response.headers.get(name)\n  }\n}\n\nfunction activateScriptElement(element) {\n  if (element.getAttribute(\"data-turbo-eval\") == \"false\") {\n    return element\n  } else {\n    const createdScriptElement = document.createElement(\"script\");\n    const cspNonce = getMetaContent(\"csp-nonce\");\n    if (cspNonce) {\n      createdScriptElement.nonce = cspNonce;\n    }\n    createdScriptElement.textContent = element.textContent;\n    createdScriptElement.async = false;\n    copyElementAttributes(createdScriptElement, element);\n    return createdScriptElement\n  }\n}\n\nfunction copyElementAttributes(destinationElement, sourceElement) {\n  for (const { name, value } of sourceElement.attributes) {\n    destinationElement.setAttribute(name, value);\n  }\n}\n\nfunction createDocumentFragment(html) {\n  const template = document.createElement(\"template\");\n  template.innerHTML = html;\n  return template.content\n}\n\nfunction dispatch(eventName, { target, cancelable, detail } = {}) {\n  const event = new CustomEvent(eventName, {\n    cancelable,\n    bubbles: true,\n    composed: true,\n    detail\n  });\n\n  if (target && target.isConnected) {\n    target.dispatchEvent(event);\n  } else {\n    document.documentElement.dispatchEvent(event);\n  }\n\n  return event\n}\n\nfunction nextRepaint() {\n  if (document.visibilityState === \"hidden\") {\n    return nextEventLoopTick()\n  } else {\n    return nextAnimationFrame()\n  }\n}\n\nfunction nextAnimationFrame() {\n  return new Promise((resolve) => requestAnimationFrame(() => resolve()))\n}\n\nfunction nextEventLoopTick() {\n  return new Promise((resolve) => setTimeout(() => resolve(), 0))\n}\n\nfunction nextMicrotask() {\n  return Promise.resolve()\n}\n\nfunction parseHTMLDocument(html = \"\") {\n  return new DOMParser().parseFromString(html, \"text/html\")\n}\n\nfunction unindent(strings, ...values) {\n  const lines = interpolate(strings, values).replace(/^\\n/, \"\").split(\"\\n\");\n  const match = lines[0].match(/^\\s+/);\n  const indent = match ? match[0].length : 0;\n  return lines.map((line) => line.slice(indent)).join(\"\\n\")\n}\n\nfunction interpolate(strings, values) {\n  return strings.reduce((result, string, i) => {\n    const value = values[i] == undefined ? \"\" : values[i];\n    return result + string + value\n  }, \"\")\n}\n\nfunction uuid() {\n  return Array.from({ length: 36 })\n    .map((_, i) => {\n      if (i == 8 || i == 13 || i == 18 || i == 23) {\n        return \"-\"\n      } else if (i == 14) {\n        return \"4\"\n      } else if (i == 19) {\n        return (Math.floor(Math.random() * 4) + 8).toString(16)\n      } else {\n        return Math.floor(Math.random() * 15).toString(16)\n      }\n    })\n    .join(\"\")\n}\n\nfunction getAttribute(attributeName, ...elements) {\n  for (const value of elements.map((element) => element?.getAttribute(attributeName))) {\n    if (typeof value == \"string\") return value\n  }\n\n  return null\n}\n\nfunction hasAttribute(attributeName, ...elements) {\n  return elements.some((element) => element && element.hasAttribute(attributeName))\n}\n\nfunction markAsBusy(...elements) {\n  for (const element of elements) {\n    if (element.localName == \"turbo-frame\") {\n      element.setAttribute(\"busy\", \"\");\n    }\n    element.setAttribute(\"aria-busy\", \"true\");\n  }\n}\n\nfunction clearBusyState(...elements) {\n  for (const element of elements) {\n    if (element.localName == \"turbo-frame\") {\n      element.removeAttribute(\"busy\");\n    }\n\n    element.removeAttribute(\"aria-busy\");\n  }\n}\n\nfunction waitForLoad(element, timeoutInMilliseconds = 2000) {\n  return new Promise((resolve) => {\n    const onComplete = () => {\n      element.removeEventListener(\"error\", onComplete);\n      element.removeEventListener(\"load\", onComplete);\n      resolve();\n    };\n\n    element.addEventListener(\"load\", onComplete, { once: true });\n    element.addEventListener(\"error\", onComplete, { once: true });\n    setTimeout(resolve, timeoutInMilliseconds);\n  })\n}\n\nfunction getHistoryMethodForAction(action) {\n  switch (action) {\n    case \"replace\":\n      return history.replaceState\n    case \"advance\":\n    case \"restore\":\n      return history.pushState\n  }\n}\n\nfunction isAction(action) {\n  return action == \"advance\" || action == \"replace\" || action == \"restore\"\n}\n\nfunction getVisitAction(...elements) {\n  const action = getAttribute(\"data-turbo-action\", ...elements);\n\n  return isAction(action) ? action : null\n}\n\nfunction getMetaElement(name) {\n  return document.querySelector(`meta[name=\"${name}\"]`)\n}\n\nfunction getMetaContent(name) {\n  const element = getMetaElement(name);\n  return element && element.content\n}\n\nfunction setMetaContent(name, content) {\n  let element = getMetaElement(name);\n\n  if (!element) {\n    element = document.createElement(\"meta\");\n    element.setAttribute(\"name\", name);\n\n    document.head.appendChild(element);\n  }\n\n  element.setAttribute(\"content\", content);\n\n  return element\n}\n\nfunction findClosestRecursively(element, selector) {\n  if (element instanceof Element) {\n    return (\n      element.closest(selector) || findClosestRecursively(element.assignedSlot || element.getRootNode()?.host, selector)\n    )\n  }\n}\n\nfunction elementIsFocusable(element) {\n  const inertDisabledOrHidden = \"[inert], :disabled, [hidden], details:not([open]), dialog:not([open])\";\n\n  return !!element && element.closest(inertDisabledOrHidden) == null && typeof element.focus == \"function\"\n}\n\nfunction queryAutofocusableElement(elementOrDocumentFragment) {\n  return Array.from(elementOrDocumentFragment.querySelectorAll(\"[autofocus]\")).find(elementIsFocusable)\n}\n\nasync function around(callback, reader) {\n  const before = reader();\n\n  callback();\n\n  await nextAnimationFrame();\n\n  const after = reader();\n\n  return [before, after]\n}\n\nfunction doesNotTargetIFrame(anchor) {\n  if (anchor.hasAttribute(\"target\")) {\n    for (const element of document.getElementsByName(anchor.target)) {\n      if (element instanceof HTMLIFrameElement) return false\n    }\n  }\n\n  return true\n}\n\nfunction findLinkFromClickTarget(target) {\n  return findClosestRecursively(target, \"a[href]:not([target^=_]):not([download])\")\n}\n\nfunction getLocationForLink(link) {\n  return expandURL(link.getAttribute(\"href\") || \"\")\n}\n\nfunction debounce(fn, delay) {\n  let timeoutId = null;\n\n  return (...args) => {\n    const callback = () => fn.apply(this, args);\n    clearTimeout(timeoutId);\n    timeoutId = setTimeout(callback, delay);\n  }\n}\n\nclass LimitedSet extends Set {\n  constructor(maxSize) {\n    super();\n    this.maxSize = maxSize;\n  }\n\n  add(value) {\n    if (this.size >= this.maxSize) {\n      const iterator = this.values();\n      const oldestValue = iterator.next().value;\n      this.delete(oldestValue);\n    }\n    super.add(value);\n  }\n}\n\nconst recentRequests = new LimitedSet(20);\n\nconst nativeFetch = window.fetch;\n\nfunction fetchWithTurboHeaders(url, options = {}) {\n  const modifiedHeaders = new Headers(options.headers || {});\n  const requestUID = uuid();\n  recentRequests.add(requestUID);\n  modifiedHeaders.append(\"X-Turbo-Request-Id\", requestUID);\n\n  return nativeFetch(url, {\n    ...options,\n    headers: modifiedHeaders\n  })\n}\n\nfunction fetchMethodFromString(method) {\n  switch (method.toLowerCase()) {\n    case \"get\":\n      return FetchMethod.get\n    case \"post\":\n      return FetchMethod.post\n    case \"put\":\n      return FetchMethod.put\n    case \"patch\":\n      return FetchMethod.patch\n    case \"delete\":\n      return FetchMethod.delete\n  }\n}\n\nconst FetchMethod = {\n  get: \"get\",\n  post: \"post\",\n  put: \"put\",\n  patch: \"patch\",\n  delete: \"delete\"\n};\n\nfunction fetchEnctypeFromString(encoding) {\n  switch (encoding.toLowerCase()) {\n    case FetchEnctype.multipart:\n      return FetchEnctype.multipart\n    case FetchEnctype.plain:\n      return FetchEnctype.plain\n    default:\n      return FetchEnctype.urlEncoded\n  }\n}\n\nconst FetchEnctype = {\n  urlEncoded: \"application/x-www-form-urlencoded\",\n  multipart: \"multipart/form-data\",\n  plain: \"text/plain\"\n};\n\nclass FetchRequest {\n  abortController = new AbortController()\n  #resolveRequestPromise = (_value) => {}\n\n  constructor(delegate, method, location, requestBody = new URLSearchParams(), target = null, enctype = FetchEnctype.urlEncoded) {\n    const [url, body] = buildResourceAndBody(expandURL(location), method, requestBody, enctype);\n\n    this.delegate = delegate;\n    this.url = url;\n    this.target = target;\n    this.fetchOptions = {\n      credentials: \"same-origin\",\n      redirect: \"follow\",\n      method: method,\n      headers: { ...this.defaultHeaders },\n      body: body,\n      signal: this.abortSignal,\n      referrer: this.delegate.referrer?.href\n    };\n    this.enctype = enctype;\n  }\n\n  get method() {\n    return this.fetchOptions.method\n  }\n\n  set method(value) {\n    const fetchBody = this.isSafe ? this.url.searchParams : this.fetchOptions.body || new FormData();\n    const fetchMethod = fetchMethodFromString(value) || FetchMethod.get;\n\n    this.url.search = \"\";\n\n    const [url, body] = buildResourceAndBody(this.url, fetchMethod, fetchBody, this.enctype);\n\n    this.url = url;\n    this.fetchOptions.body = body;\n    this.fetchOptions.method = fetchMethod;\n  }\n\n  get headers() {\n    return this.fetchOptions.headers\n  }\n\n  set headers(value) {\n    this.fetchOptions.headers = value;\n  }\n\n  get body() {\n    if (this.isSafe) {\n      return this.url.searchParams\n    } else {\n      return this.fetchOptions.body\n    }\n  }\n\n  set body(value) {\n    this.fetchOptions.body = value;\n  }\n\n  get location() {\n    return this.url\n  }\n\n  get params() {\n    return this.url.searchParams\n  }\n\n  get entries() {\n    return this.body ? Array.from(this.body.entries()) : []\n  }\n\n  cancel() {\n    this.abortController.abort();\n  }\n\n  async perform() {\n    const { fetchOptions } = this;\n    this.delegate.prepareRequest(this);\n    const event = await this.#allowRequestToBeIntercepted(fetchOptions);\n    try {\n      this.delegate.requestStarted(this);\n\n      if (event.detail.fetchRequest) {\n        this.response = event.detail.fetchRequest.response;\n      } else {\n        this.response = fetchWithTurboHeaders(this.url.href, fetchOptions);\n      }\n\n      const response = await this.response;\n      return await this.receive(response)\n    } catch (error) {\n      if (error.name !== \"AbortError\") {\n        if (this.#willDelegateErrorHandling(error)) {\n          this.delegate.requestErrored(this, error);\n        }\n        throw error\n      }\n    } finally {\n      this.delegate.requestFinished(this);\n    }\n  }\n\n  async receive(response) {\n    const fetchResponse = new FetchResponse(response);\n    const event = dispatch(\"turbo:before-fetch-response\", {\n      cancelable: true,\n      detail: { fetchResponse },\n      target: this.target\n    });\n    if (event.defaultPrevented) {\n      this.delegate.requestPreventedHandlingResponse(this, fetchResponse);\n    } else if (fetchResponse.succeeded) {\n      this.delegate.requestSucceededWithResponse(this, fetchResponse);\n    } else {\n      this.delegate.requestFailedWithResponse(this, fetchResponse);\n    }\n    return fetchResponse\n  }\n\n  get defaultHeaders() {\n    return {\n      Accept: \"text/html, application/xhtml+xml\"\n    }\n  }\n\n  get isSafe() {\n    return isSafe(this.method)\n  }\n\n  get abortSignal() {\n    return this.abortController.signal\n  }\n\n  acceptResponseType(mimeType) {\n    this.headers[\"Accept\"] = [mimeType, this.headers[\"Accept\"]].join(\", \");\n  }\n\n  async #allowRequestToBeIntercepted(fetchOptions) {\n    const requestInterception = new Promise((resolve) => (this.#resolveRequestPromise = resolve));\n    const event = dispatch(\"turbo:before-fetch-request\", {\n      cancelable: true,\n      detail: {\n        fetchOptions,\n        url: this.url,\n        resume: this.#resolveRequestPromise\n      },\n      target: this.target\n    });\n    this.url = event.detail.url;\n    if (event.defaultPrevented) await requestInterception;\n\n    return event\n  }\n\n  #willDelegateErrorHandling(error) {\n    const event = dispatch(\"turbo:fetch-request-error\", {\n      target: this.target,\n      cancelable: true,\n      detail: { request: this, error: error }\n    });\n\n    return !event.defaultPrevented\n  }\n}\n\nfunction isSafe(fetchMethod) {\n  return fetchMethodFromString(fetchMethod) == FetchMethod.get\n}\n\nfunction buildResourceAndBody(resource, method, requestBody, enctype) {\n  const searchParams =\n    Array.from(requestBody).length > 0 ? new URLSearchParams(entriesExcludingFiles(requestBody)) : resource.searchParams;\n\n  if (isSafe(method)) {\n    return [mergeIntoURLSearchParams(resource, searchParams), null]\n  } else if (enctype == FetchEnctype.urlEncoded) {\n    return [resource, searchParams]\n  } else {\n    return [resource, requestBody]\n  }\n}\n\nfunction entriesExcludingFiles(requestBody) {\n  const entries = [];\n\n  for (const [name, value] of requestBody) {\n    if (value instanceof File) continue\n    else entries.push([name, value]);\n  }\n\n  return entries\n}\n\nfunction mergeIntoURLSearchParams(url, requestBody) {\n  const searchParams = new URLSearchParams(entriesExcludingFiles(requestBody));\n\n  url.search = searchParams.toString();\n\n  return url\n}\n\nclass AppearanceObserver {\n  started = false\n\n  constructor(delegate, element) {\n    this.delegate = delegate;\n    this.element = element;\n    this.intersectionObserver = new IntersectionObserver(this.intersect);\n  }\n\n  start() {\n    if (!this.started) {\n      this.started = true;\n      this.intersectionObserver.observe(this.element);\n    }\n  }\n\n  stop() {\n    if (this.started) {\n      this.started = false;\n      this.intersectionObserver.unobserve(this.element);\n    }\n  }\n\n  intersect = (entries) => {\n    const lastEntry = entries.slice(-1)[0];\n    if (lastEntry?.isIntersecting) {\n      this.delegate.elementAppearedInViewport(this.element);\n    }\n  }\n}\n\nclass StreamMessage {\n  static contentType = \"text/vnd.turbo-stream.html\"\n\n  static wrap(message) {\n    if (typeof message == \"string\") {\n      return new this(createDocumentFragment(message))\n    } else {\n      return message\n    }\n  }\n\n  constructor(fragment) {\n    this.fragment = importStreamElements(fragment);\n  }\n}\n\nfunction importStreamElements(fragment) {\n  for (const element of fragment.querySelectorAll(\"turbo-stream\")) {\n    const streamElement = document.importNode(element, true);\n\n    for (const inertScriptElement of streamElement.templateElement.content.querySelectorAll(\"script\")) {\n      inertScriptElement.replaceWith(activateScriptElement(inertScriptElement));\n    }\n\n    element.replaceWith(streamElement);\n  }\n\n  return fragment\n}\n\nconst PREFETCH_DELAY = 100;\n\nclass PrefetchCache {\n  #prefetchTimeout = null\n  #prefetched = null\n\n  get(url) {\n    if (this.#prefetched && this.#prefetched.url === url && this.#prefetched.expire > Date.now()) {\n      return this.#prefetched.request\n    }\n  }\n\n  setLater(url, request, ttl) {\n    this.clear();\n\n    this.#prefetchTimeout = setTimeout(() => {\n      request.perform();\n      this.set(url, request, ttl);\n      this.#prefetchTimeout = null;\n    }, PREFETCH_DELAY);\n  }\n\n  set(url, request, ttl) {\n    this.#prefetched = { url, request, expire: new Date(new Date().getTime() + ttl) };\n  }\n\n  clear() {\n    if (this.#prefetchTimeout) clearTimeout(this.#prefetchTimeout);\n    this.#prefetched = null;\n  }\n}\n\nconst cacheTtl = 10 * 1000;\nconst prefetchCache = new PrefetchCache();\n\nconst FormSubmissionState = {\n  initialized: \"initialized\",\n  requesting: \"requesting\",\n  waiting: \"waiting\",\n  receiving: \"receiving\",\n  stopping: \"stopping\",\n  stopped: \"stopped\"\n};\n\nclass FormSubmission {\n  state = FormSubmissionState.initialized\n\n  static confirmMethod(message, _element, _submitter) {\n    return Promise.resolve(confirm(message))\n  }\n\n  constructor(delegate, formElement, submitter, mustRedirect = false) {\n    const method = getMethod(formElement, submitter);\n    const action = getAction(getFormAction(formElement, submitter), method);\n    const body = buildFormData(formElement, submitter);\n    const enctype = getEnctype(formElement, submitter);\n\n    this.delegate = delegate;\n    this.formElement = formElement;\n    this.submitter = submitter;\n    this.fetchRequest = new FetchRequest(this, method, action, body, formElement, enctype);\n    this.mustRedirect = mustRedirect;\n  }\n\n  get method() {\n    return this.fetchRequest.method\n  }\n\n  set method(value) {\n    this.fetchRequest.method = value;\n  }\n\n  get action() {\n    return this.fetchRequest.url.toString()\n  }\n\n  set action(value) {\n    this.fetchRequest.url = expandURL(value);\n  }\n\n  get body() {\n    return this.fetchRequest.body\n  }\n\n  get enctype() {\n    return this.fetchRequest.enctype\n  }\n\n  get isSafe() {\n    return this.fetchRequest.isSafe\n  }\n\n  get location() {\n    return this.fetchRequest.url\n  }\n\n  // The submission process\n\n  async start() {\n    const { initialized, requesting } = FormSubmissionState;\n    const confirmationMessage = getAttribute(\"data-turbo-confirm\", this.submitter, this.formElement);\n\n    if (typeof confirmationMessage === \"string\") {\n      const answer = await FormSubmission.confirmMethod(confirmationMessage, this.formElement, this.submitter);\n      if (!answer) {\n        return\n      }\n    }\n\n    if (this.state == initialized) {\n      this.state = requesting;\n      return this.fetchRequest.perform()\n    }\n  }\n\n  stop() {\n    const { stopping, stopped } = FormSubmissionState;\n    if (this.state != stopping && this.state != stopped) {\n      this.state = stopping;\n      this.fetchRequest.cancel();\n      return true\n    }\n  }\n\n  // Fetch request delegate\n\n  prepareRequest(request) {\n    if (!request.isSafe) {\n      const token = getCookieValue(getMetaContent(\"csrf-param\")) || getMetaContent(\"csrf-token\");\n      if (token) {\n        request.headers[\"X-CSRF-Token\"] = token;\n      }\n    }\n\n    if (this.requestAcceptsTurboStreamResponse(request)) {\n      request.acceptResponseType(StreamMessage.contentType);\n    }\n  }\n\n  requestStarted(_request) {\n    this.state = FormSubmissionState.waiting;\n    this.submitter?.setAttribute(\"disabled\", \"\");\n    this.setSubmitsWith();\n    markAsBusy(this.formElement);\n    dispatch(\"turbo:submit-start\", {\n      target: this.formElement,\n      detail: { formSubmission: this }\n    });\n    this.delegate.formSubmissionStarted(this);\n  }\n\n  requestPreventedHandlingResponse(request, response) {\n    prefetchCache.clear();\n\n    this.result = { success: response.succeeded, fetchResponse: response };\n  }\n\n  requestSucceededWithResponse(request, response) {\n    if (response.clientError || response.serverError) {\n      this.delegate.formSubmissionFailedWithResponse(this, response);\n      return\n    }\n\n    prefetchCache.clear();\n\n    if (this.requestMustRedirect(request) && responseSucceededWithoutRedirect(response)) {\n      const error = new Error(\"Form responses must redirect to another location\");\n      this.delegate.formSubmissionErrored(this, error);\n    } else {\n      this.state = FormSubmissionState.receiving;\n      this.result = { success: true, fetchResponse: response };\n      this.delegate.formSubmissionSucceededWithResponse(this, response);\n    }\n  }\n\n  requestFailedWithResponse(request, response) {\n    this.result = { success: false, fetchResponse: response };\n    this.delegate.formSubmissionFailedWithResponse(this, response);\n  }\n\n  requestErrored(request, error) {\n    this.result = { success: false, error };\n    this.delegate.formSubmissionErrored(this, error);\n  }\n\n  requestFinished(_request) {\n    this.state = FormSubmissionState.stopped;\n    this.submitter?.removeAttribute(\"disabled\");\n    this.resetSubmitterText();\n    clearBusyState(this.formElement);\n    dispatch(\"turbo:submit-end\", {\n      target: this.formElement,\n      detail: { formSubmission: this, ...this.result }\n    });\n    this.delegate.formSubmissionFinished(this);\n  }\n\n  // Private\n\n  setSubmitsWith() {\n    if (!this.submitter || !this.submitsWith) return\n\n    if (this.submitter.matches(\"button\")) {\n      this.originalSubmitText = this.submitter.innerHTML;\n      this.submitter.innerHTML = this.submitsWith;\n    } else if (this.submitter.matches(\"input\")) {\n      const input = this.submitter;\n      this.originalSubmitText = input.value;\n      input.value = this.submitsWith;\n    }\n  }\n\n  resetSubmitterText() {\n    if (!this.submitter || !this.originalSubmitText) return\n\n    if (this.submitter.matches(\"button\")) {\n      this.submitter.innerHTML = this.originalSubmitText;\n    } else if (this.submitter.matches(\"input\")) {\n      const input = this.submitter;\n      input.value = this.originalSubmitText;\n    }\n  }\n\n  requestMustRedirect(request) {\n    return !request.isSafe && this.mustRedirect\n  }\n\n  requestAcceptsTurboStreamResponse(request) {\n    return !request.isSafe || hasAttribute(\"data-turbo-stream\", this.submitter, this.formElement)\n  }\n\n  get submitsWith() {\n    return this.submitter?.getAttribute(\"data-turbo-submits-with\")\n  }\n}\n\nfunction buildFormData(formElement, submitter) {\n  const formData = new FormData(formElement);\n  const name = submitter?.getAttribute(\"name\");\n  const value = submitter?.getAttribute(\"value\");\n\n  if (name) {\n    formData.append(name, value || \"\");\n  }\n\n  return formData\n}\n\nfunction getCookieValue(cookieName) {\n  if (cookieName != null) {\n    const cookies = document.cookie ? document.cookie.split(\"; \") : [];\n    const cookie = cookies.find((cookie) => cookie.startsWith(cookieName));\n    if (cookie) {\n      const value = cookie.split(\"=\").slice(1).join(\"=\");\n      return value ? decodeURIComponent(value) : undefined\n    }\n  }\n}\n\nfunction responseSucceededWithoutRedirect(response) {\n  return response.statusCode == 200 && !response.redirected\n}\n\nfunction getFormAction(formElement, submitter) {\n  const formElementAction = typeof formElement.action === \"string\" ? formElement.action : null;\n\n  if (submitter?.hasAttribute(\"formaction\")) {\n    return submitter.getAttribute(\"formaction\") || \"\"\n  } else {\n    return formElement.getAttribute(\"action\") || formElementAction || \"\"\n  }\n}\n\nfunction getAction(formAction, fetchMethod) {\n  const action = expandURL(formAction);\n\n  if (isSafe(fetchMethod)) {\n    action.search = \"\";\n  }\n\n  return action\n}\n\nfunction getMethod(formElement, submitter) {\n  const method = submitter?.getAttribute(\"formmethod\") || formElement.getAttribute(\"method\") || \"\";\n  return fetchMethodFromString(method.toLowerCase()) || FetchMethod.get\n}\n\nfunction getEnctype(formElement, submitter) {\n  return fetchEnctypeFromString(submitter?.getAttribute(\"formenctype\") || formElement.enctype)\n}\n\nclass Snapshot {\n  constructor(element) {\n    this.element = element;\n  }\n\n  get activeElement() {\n    return this.element.ownerDocument.activeElement\n  }\n\n  get children() {\n    return [...this.element.children]\n  }\n\n  hasAnchor(anchor) {\n    return this.getElementForAnchor(anchor) != null\n  }\n\n  getElementForAnchor(anchor) {\n    return anchor ? this.element.querySelector(`[id='${anchor}'], a[name='${anchor}']`) : null\n  }\n\n  get isConnected() {\n    return this.element.isConnected\n  }\n\n  get firstAutofocusableElement() {\n    return queryAutofocusableElement(this.element)\n  }\n\n  get permanentElements() {\n    return queryPermanentElementsAll(this.element)\n  }\n\n  getPermanentElementById(id) {\n    return getPermanentElementById(this.element, id)\n  }\n\n  getPermanentElementMapForSnapshot(snapshot) {\n    const permanentElementMap = {};\n\n    for (const currentPermanentElement of this.permanentElements) {\n      const { id } = currentPermanentElement;\n      const newPermanentElement = snapshot.getPermanentElementById(id);\n      if (newPermanentElement) {\n        permanentElementMap[id] = [currentPermanentElement, newPermanentElement];\n      }\n    }\n\n    return permanentElementMap\n  }\n}\n\nfunction getPermanentElementById(node, id) {\n  return node.querySelector(`#${id}[data-turbo-permanent]`)\n}\n\nfunction queryPermanentElementsAll(node) {\n  return node.querySelectorAll(\"[id][data-turbo-permanent]\")\n}\n\nclass FormSubmitObserver {\n  started = false\n\n  constructor(delegate, eventTarget) {\n    this.delegate = delegate;\n    this.eventTarget = eventTarget;\n  }\n\n  start() {\n    if (!this.started) {\n      this.eventTarget.addEventListener(\"submit\", this.submitCaptured, true);\n      this.started = true;\n    }\n  }\n\n  stop() {\n    if (this.started) {\n      this.eventTarget.removeEventListener(\"submit\", this.submitCaptured, true);\n      this.started = false;\n    }\n  }\n\n  submitCaptured = () => {\n    this.eventTarget.removeEventListener(\"submit\", this.submitBubbled, false);\n    this.eventTarget.addEventListener(\"submit\", this.submitBubbled, false);\n  }\n\n  submitBubbled = (event) => {\n    if (!event.defaultPrevented) {\n      const form = event.target instanceof HTMLFormElement ? event.target : undefined;\n      const submitter = event.submitter || undefined;\n\n      if (\n        form &&\n        submissionDoesNotDismissDialog(form, submitter) &&\n        submissionDoesNotTargetIFrame(form, submitter) &&\n        this.delegate.willSubmitForm(form, submitter)\n      ) {\n        event.preventDefault();\n        event.stopImmediatePropagation();\n        this.delegate.formSubmitted(form, submitter);\n      }\n    }\n  }\n}\n\nfunction submissionDoesNotDismissDialog(form, submitter) {\n  const method = submitter?.getAttribute(\"formmethod\") || form.getAttribute(\"method\");\n\n  return method != \"dialog\"\n}\n\nfunction submissionDoesNotTargetIFrame(form, submitter) {\n  if (submitter?.hasAttribute(\"formtarget\") || form.hasAttribute(\"target\")) {\n    const target = submitter?.getAttribute(\"formtarget\") || form.target;\n\n    for (const element of document.getElementsByName(target)) {\n      if (element instanceof HTMLIFrameElement) return false\n    }\n\n    return true\n  } else {\n    return true\n  }\n}\n\nclass View {\n  #resolveRenderPromise = (_value) => {}\n  #resolveInterceptionPromise = (_value) => {}\n\n  constructor(delegate, element) {\n    this.delegate = delegate;\n    this.element = element;\n  }\n\n  // Scrolling\n\n  scrollToAnchor(anchor) {\n    const element = this.snapshot.getElementForAnchor(anchor);\n    if (element) {\n      this.scrollToElement(element);\n      this.focusElement(element);\n    } else {\n      this.scrollToPosition({ x: 0, y: 0 });\n    }\n  }\n\n  scrollToAnchorFromLocation(location) {\n    this.scrollToAnchor(getAnchor(location));\n  }\n\n  scrollToElement(element) {\n    element.scrollIntoView();\n  }\n\n  focusElement(element) {\n    if (element instanceof HTMLElement) {\n      if (element.hasAttribute(\"tabindex\")) {\n        element.focus();\n      } else {\n        element.setAttribute(\"tabindex\", \"-1\");\n        element.focus();\n        element.removeAttribute(\"tabindex\");\n      }\n    }\n  }\n\n  scrollToPosition({ x, y }) {\n    this.scrollRoot.scrollTo(x, y);\n  }\n\n  scrollToTop() {\n    this.scrollToPosition({ x: 0, y: 0 });\n  }\n\n  get scrollRoot() {\n    return window\n  }\n\n  // Rendering\n\n  async render(renderer) {\n    const { isPreview, shouldRender, willRender, newSnapshot: snapshot } = renderer;\n\n    // A workaround to ignore tracked element mismatch reloads when performing\n    // a promoted Visit from a frame navigation\n    const shouldInvalidate = willRender;\n\n    if (shouldRender) {\n      try {\n        this.renderPromise = new Promise((resolve) => (this.#resolveRenderPromise = resolve));\n        this.renderer = renderer;\n        await this.prepareToRenderSnapshot(renderer);\n\n        const renderInterception = new Promise((resolve) => (this.#resolveInterceptionPromise = resolve));\n        const options = { resume: this.#resolveInterceptionPromise, render: this.renderer.renderElement, renderMethod: this.renderer.renderMethod };\n        const immediateRender = this.delegate.allowsImmediateRender(snapshot, options);\n        if (!immediateRender) await renderInterception;\n\n        await this.renderSnapshot(renderer);\n        this.delegate.viewRenderedSnapshot(snapshot, isPreview, this.renderer.renderMethod);\n        this.delegate.preloadOnLoadLinksForView(this.element);\n        this.finishRenderingSnapshot(renderer);\n      } finally {\n        delete this.renderer;\n        this.#resolveRenderPromise(undefined);\n        delete this.renderPromise;\n      }\n    } else if (shouldInvalidate) {\n      this.invalidate(renderer.reloadReason);\n    }\n  }\n\n  invalidate(reason) {\n    this.delegate.viewInvalidated(reason);\n  }\n\n  async prepareToRenderSnapshot(renderer) {\n    this.markAsPreview(renderer.isPreview);\n    await renderer.prepareToRender();\n  }\n\n  markAsPreview(isPreview) {\n    if (isPreview) {\n      this.element.setAttribute(\"data-turbo-preview\", \"\");\n    } else {\n      this.element.removeAttribute(\"data-turbo-preview\");\n    }\n  }\n\n  markVisitDirection(direction) {\n    this.element.setAttribute(\"data-turbo-visit-direction\", direction);\n  }\n\n  unmarkVisitDirection() {\n    this.element.removeAttribute(\"data-turbo-visit-direction\");\n  }\n\n  async renderSnapshot(renderer) {\n    await renderer.render();\n  }\n\n  finishRenderingSnapshot(renderer) {\n    renderer.finishRendering();\n  }\n}\n\nclass FrameView extends View {\n  missing() {\n    this.element.innerHTML = `<strong class=\"turbo-frame-error\">Content missing</strong>`;\n  }\n\n  get snapshot() {\n    return new Snapshot(this.element)\n  }\n}\n\nclass LinkInterceptor {\n  constructor(delegate, element) {\n    this.delegate = delegate;\n    this.element = element;\n  }\n\n  start() {\n    this.element.addEventListener(\"click\", this.clickBubbled);\n    document.addEventListener(\"turbo:click\", this.linkClicked);\n    document.addEventListener(\"turbo:before-visit\", this.willVisit);\n  }\n\n  stop() {\n    this.element.removeEventListener(\"click\", this.clickBubbled);\n    document.removeEventListener(\"turbo:click\", this.linkClicked);\n    document.removeEventListener(\"turbo:before-visit\", this.willVisit);\n  }\n\n  clickBubbled = (event) => {\n    if (this.respondsToEventTarget(event.target)) {\n      this.clickEvent = event;\n    } else {\n      delete this.clickEvent;\n    }\n  }\n\n  linkClicked = (event) => {\n    if (this.clickEvent && this.respondsToEventTarget(event.target) && event.target instanceof Element) {\n      if (this.delegate.shouldInterceptLinkClick(event.target, event.detail.url, event.detail.originalEvent)) {\n        this.clickEvent.preventDefault();\n        event.preventDefault();\n        this.delegate.linkClickIntercepted(event.target, event.detail.url, event.detail.originalEvent);\n      }\n    }\n    delete this.clickEvent;\n  }\n\n  willVisit = (_event) => {\n    delete this.clickEvent;\n  }\n\n  respondsToEventTarget(target) {\n    const element = target instanceof Element ? target : target instanceof Node ? target.parentElement : null;\n    return element && element.closest(\"turbo-frame, html\") == this.element\n  }\n}\n\nclass LinkClickObserver {\n  started = false\n\n  constructor(delegate, eventTarget) {\n    this.delegate = delegate;\n    this.eventTarget = eventTarget;\n  }\n\n  start() {\n    if (!this.started) {\n      this.eventTarget.addEventListener(\"click\", this.clickCaptured, true);\n      this.started = true;\n    }\n  }\n\n  stop() {\n    if (this.started) {\n      this.eventTarget.removeEventListener(\"click\", this.clickCaptured, true);\n      this.started = false;\n    }\n  }\n\n  clickCaptured = () => {\n    this.eventTarget.removeEventListener(\"click\", this.clickBubbled, false);\n    this.eventTarget.addEventListener(\"click\", this.clickBubbled, false);\n  }\n\n  clickBubbled = (event) => {\n    if (event instanceof MouseEvent && this.clickEventIsSignificant(event)) {\n      const target = (event.composedPath && event.composedPath()[0]) || event.target;\n      const link = findLinkFromClickTarget(target);\n      if (link && doesNotTargetIFrame(link)) {\n        const location = getLocationForLink(link);\n        if (this.delegate.willFollowLinkToLocation(link, location, event)) {\n          event.preventDefault();\n          this.delegate.followedLinkToLocation(link, location);\n        }\n      }\n    }\n  }\n\n  clickEventIsSignificant(event) {\n    return !(\n      (event.target && event.target.isContentEditable) ||\n      event.defaultPrevented ||\n      event.which > 1 ||\n      event.altKey ||\n      event.ctrlKey ||\n      event.metaKey ||\n      event.shiftKey\n    )\n  }\n}\n\nclass FormLinkClickObserver {\n  constructor(delegate, element) {\n    this.delegate = delegate;\n    this.linkInterceptor = new LinkClickObserver(this, element);\n  }\n\n  start() {\n    this.linkInterceptor.start();\n  }\n\n  stop() {\n    this.linkInterceptor.stop();\n  }\n\n  // Link hover observer delegate\n\n  canPrefetchRequestToLocation(link, location) {\n    return false\n  }\n\n  prefetchAndCacheRequestToLocation(link, location) {\n    return\n  }\n\n  // Link click observer delegate\n\n  willFollowLinkToLocation(link, location, originalEvent) {\n    return (\n      this.delegate.willSubmitFormLinkToLocation(link, location, originalEvent) &&\n      (link.hasAttribute(\"data-turbo-method\") || link.hasAttribute(\"data-turbo-stream\"))\n    )\n  }\n\n  followedLinkToLocation(link, location) {\n    const form = document.createElement(\"form\");\n\n    const type = \"hidden\";\n    for (const [name, value] of location.searchParams) {\n      form.append(Object.assign(document.createElement(\"input\"), { type, name, value }));\n    }\n\n    const action = Object.assign(location, { search: \"\" });\n    form.setAttribute(\"data-turbo\", \"true\");\n    form.setAttribute(\"action\", action.href);\n    form.setAttribute(\"hidden\", \"\");\n\n    const method = link.getAttribute(\"data-turbo-method\");\n    if (method) form.setAttribute(\"method\", method);\n\n    const turboFrame = link.getAttribute(\"data-turbo-frame\");\n    if (turboFrame) form.setAttribute(\"data-turbo-frame\", turboFrame);\n\n    const turboAction = getVisitAction(link);\n    if (turboAction) form.setAttribute(\"data-turbo-action\", turboAction);\n\n    const turboConfirm = link.getAttribute(\"data-turbo-confirm\");\n    if (turboConfirm) form.setAttribute(\"data-turbo-confirm\", turboConfirm);\n\n    const turboStream = link.hasAttribute(\"data-turbo-stream\");\n    if (turboStream) form.setAttribute(\"data-turbo-stream\", \"\");\n\n    this.delegate.submittedFormLinkToLocation(link, location, form);\n\n    document.body.appendChild(form);\n    form.addEventListener(\"turbo:submit-end\", () => form.remove(), { once: true });\n    requestAnimationFrame(() => form.requestSubmit());\n  }\n}\n\nclass Bardo {\n  static async preservingPermanentElements(delegate, permanentElementMap, callback) {\n    const bardo = new this(delegate, permanentElementMap);\n    bardo.enter();\n    await callback();\n    bardo.leave();\n  }\n\n  constructor(delegate, permanentElementMap) {\n    this.delegate = delegate;\n    this.permanentElementMap = permanentElementMap;\n  }\n\n  enter() {\n    for (const id in this.permanentElementMap) {\n      const [currentPermanentElement, newPermanentElement] = this.permanentElementMap[id];\n      this.delegate.enteringBardo(currentPermanentElement, newPermanentElement);\n      this.replaceNewPermanentElementWithPlaceholder(newPermanentElement);\n    }\n  }\n\n  leave() {\n    for (const id in this.permanentElementMap) {\n      const [currentPermanentElement] = this.permanentElementMap[id];\n      this.replaceCurrentPermanentElementWithClone(currentPermanentElement);\n      this.replacePlaceholderWithPermanentElement(currentPermanentElement);\n      this.delegate.leavingBardo(currentPermanentElement);\n    }\n  }\n\n  replaceNewPermanentElementWithPlaceholder(permanentElement) {\n    const placeholder = createPlaceholderForPermanentElement(permanentElement);\n    permanentElement.replaceWith(placeholder);\n  }\n\n  replaceCurrentPermanentElementWithClone(permanentElement) {\n    const clone = permanentElement.cloneNode(true);\n    permanentElement.replaceWith(clone);\n  }\n\n  replacePlaceholderWithPermanentElement(permanentElement) {\n    const placeholder = this.getPlaceholderById(permanentElement.id);\n    placeholder?.replaceWith(permanentElement);\n  }\n\n  getPlaceholderById(id) {\n    return this.placeholders.find((element) => element.content == id)\n  }\n\n  get placeholders() {\n    return [...document.querySelectorAll(\"meta[name=turbo-permanent-placeholder][content]\")]\n  }\n}\n\nfunction createPlaceholderForPermanentElement(permanentElement) {\n  const element = document.createElement(\"meta\");\n  element.setAttribute(\"name\", \"turbo-permanent-placeholder\");\n  element.setAttribute(\"content\", permanentElement.id);\n  return element\n}\n\nclass Renderer {\n  #activeElement = null\n\n  constructor(currentSnapshot, newSnapshot, renderElement, isPreview, willRender = true) {\n    this.currentSnapshot = currentSnapshot;\n    this.newSnapshot = newSnapshot;\n    this.isPreview = isPreview;\n    this.willRender = willRender;\n    this.renderElement = renderElement;\n    this.promise = new Promise((resolve, reject) => (this.resolvingFunctions = { resolve, reject }));\n  }\n\n  get shouldRender() {\n    return true\n  }\n\n  get reloadReason() {\n    return\n  }\n\n  prepareToRender() {\n    return\n  }\n\n  render() {\n    // Abstract method\n  }\n\n  finishRendering() {\n    if (this.resolvingFunctions) {\n      this.resolvingFunctions.resolve();\n      delete this.resolvingFunctions;\n    }\n  }\n\n  async preservingPermanentElements(callback) {\n    await Bardo.preservingPermanentElements(this, this.permanentElementMap, callback);\n  }\n\n  focusFirstAutofocusableElement() {\n    const element = this.connectedSnapshot.firstAutofocusableElement;\n    if (element) {\n      element.focus();\n    }\n  }\n\n  // Bardo delegate\n\n  enteringBardo(currentPermanentElement) {\n    if (this.#activeElement) return\n\n    if (currentPermanentElement.contains(this.currentSnapshot.activeElement)) {\n      this.#activeElement = this.currentSnapshot.activeElement;\n    }\n  }\n\n  leavingBardo(currentPermanentElement) {\n    if (currentPermanentElement.contains(this.#activeElement) && this.#activeElement instanceof HTMLElement) {\n      this.#activeElement.focus();\n\n      this.#activeElement = null;\n    }\n  }\n\n  get connectedSnapshot() {\n    return this.newSnapshot.isConnected ? this.newSnapshot : this.currentSnapshot\n  }\n\n  get currentElement() {\n    return this.currentSnapshot.element\n  }\n\n  get newElement() {\n    return this.newSnapshot.element\n  }\n\n  get permanentElementMap() {\n    return this.currentSnapshot.getPermanentElementMapForSnapshot(this.newSnapshot)\n  }\n\n  get renderMethod() {\n    return \"replace\"\n  }\n}\n\nclass FrameRenderer extends Renderer {\n  static renderElement(currentElement, newElement) {\n    const destinationRange = document.createRange();\n    destinationRange.selectNodeContents(currentElement);\n    destinationRange.deleteContents();\n\n    const frameElement = newElement;\n    const sourceRange = frameElement.ownerDocument?.createRange();\n    if (sourceRange) {\n      sourceRange.selectNodeContents(frameElement);\n      currentElement.appendChild(sourceRange.extractContents());\n    }\n  }\n\n  constructor(delegate, currentSnapshot, newSnapshot, renderElement, isPreview, willRender = true) {\n    super(currentSnapshot, newSnapshot, renderElement, isPreview, willRender);\n    this.delegate = delegate;\n  }\n\n  get shouldRender() {\n    return true\n  }\n\n  async render() {\n    await nextRepaint();\n    this.preservingPermanentElements(() => {\n      this.loadFrameElement();\n    });\n    this.scrollFrameIntoView();\n    await nextRepaint();\n    this.focusFirstAutofocusableElement();\n    await nextRepaint();\n    this.activateScriptElements();\n  }\n\n  loadFrameElement() {\n    this.delegate.willRenderFrame(this.currentElement, this.newElement);\n    this.renderElement(this.currentElement, this.newElement);\n  }\n\n  scrollFrameIntoView() {\n    if (this.currentElement.autoscroll || this.newElement.autoscroll) {\n      const element = this.currentElement.firstElementChild;\n      const block = readScrollLogicalPosition(this.currentElement.getAttribute(\"data-autoscroll-block\"), \"end\");\n      const behavior = readScrollBehavior(this.currentElement.getAttribute(\"data-autoscroll-behavior\"), \"auto\");\n\n      if (element) {\n        element.scrollIntoView({ block, behavior });\n        return true\n      }\n    }\n    return false\n  }\n\n  activateScriptElements() {\n    for (const inertScriptElement of this.newScriptElements) {\n      const activatedScriptElement = activateScriptElement(inertScriptElement);\n      inertScriptElement.replaceWith(activatedScriptElement);\n    }\n  }\n\n  get newScriptElements() {\n    return this.currentElement.querySelectorAll(\"script\")\n  }\n}\n\nfunction readScrollLogicalPosition(value, defaultValue) {\n  if (value == \"end\" || value == \"start\" || value == \"center\" || value == \"nearest\") {\n    return value\n  } else {\n    return defaultValue\n  }\n}\n\nfunction readScrollBehavior(value, defaultValue) {\n  if (value == \"auto\" || value == \"smooth\") {\n    return value\n  } else {\n    return defaultValue\n  }\n}\n\nclass ProgressBar {\n  static animationDuration = 300 /*ms*/\n\n  static get defaultCSS() {\n    return unindent`\n      .turbo-progress-bar {\n        position: fixed;\n        display: block;\n        top: 0;\n        left: 0;\n        height: 3px;\n        background: #0076ff;\n        z-index: 2147483647;\n        transition:\n          width ${ProgressBar.animationDuration}ms ease-out,\n          opacity ${ProgressBar.animationDuration / 2}ms ${ProgressBar.animationDuration / 2}ms ease-in;\n        transform: translate3d(0, 0, 0);\n      }\n    `\n  }\n\n  hiding = false\n  value = 0\n  visible = false\n\n  constructor() {\n    this.stylesheetElement = this.createStylesheetElement();\n    this.progressElement = this.createProgressElement();\n    this.installStylesheetElement();\n    this.setValue(0);\n  }\n\n  show() {\n    if (!this.visible) {\n      this.visible = true;\n      this.installProgressElement();\n      this.startTrickling();\n    }\n  }\n\n  hide() {\n    if (this.visible && !this.hiding) {\n      this.hiding = true;\n      this.fadeProgressElement(() => {\n        this.uninstallProgressElement();\n        this.stopTrickling();\n        this.visible = false;\n        this.hiding = false;\n      });\n    }\n  }\n\n  setValue(value) {\n    this.value = value;\n    this.refresh();\n  }\n\n  // Private\n\n  installStylesheetElement() {\n    document.head.insertBefore(this.stylesheetElement, document.head.firstChild);\n  }\n\n  installProgressElement() {\n    this.progressElement.style.width = \"0\";\n    this.progressElement.style.opacity = \"1\";\n    document.documentElement.insertBefore(this.progressElement, document.body);\n    this.refresh();\n  }\n\n  fadeProgressElement(callback) {\n    this.progressElement.style.opacity = \"0\";\n    setTimeout(callback, ProgressBar.animationDuration * 1.5);\n  }\n\n  uninstallProgressElement() {\n    if (this.progressElement.parentNode) {\n      document.documentElement.removeChild(this.progressElement);\n    }\n  }\n\n  startTrickling() {\n    if (!this.trickleInterval) {\n      this.trickleInterval = window.setInterval(this.trickle, ProgressBar.animationDuration);\n    }\n  }\n\n  stopTrickling() {\n    window.clearInterval(this.trickleInterval);\n    delete this.trickleInterval;\n  }\n\n  trickle = () => {\n    this.setValue(this.value + Math.random() / 100);\n  }\n\n  refresh() {\n    requestAnimationFrame(() => {\n      this.progressElement.style.width = `${10 + this.value * 90}%`;\n    });\n  }\n\n  createStylesheetElement() {\n    const element = document.createElement(\"style\");\n    element.type = \"text/css\";\n    element.textContent = ProgressBar.defaultCSS;\n    if (this.cspNonce) {\n      element.nonce = this.cspNonce;\n    }\n    return element\n  }\n\n  createProgressElement() {\n    const element = document.createElement(\"div\");\n    element.className = \"turbo-progress-bar\";\n    return element\n  }\n\n  get cspNonce() {\n    return getMetaContent(\"csp-nonce\")\n  }\n}\n\nclass HeadSnapshot extends Snapshot {\n  detailsByOuterHTML = this.children\n    .filter((element) => !elementIsNoscript(element))\n    .map((element) => elementWithoutNonce(element))\n    .reduce((result, element) => {\n      const { outerHTML } = element;\n      const details =\n        outerHTML in result\n          ? result[outerHTML]\n          : {\n              type: elementType(element),\n              tracked: elementIsTracked(element),\n              elements: []\n            };\n      return {\n        ...result,\n        [outerHTML]: {\n          ...details,\n          elements: [...details.elements, element]\n        }\n      }\n    }, {})\n\n  get trackedElementSignature() {\n    return Object.keys(this.detailsByOuterHTML)\n      .filter((outerHTML) => this.detailsByOuterHTML[outerHTML].tracked)\n      .join(\"\")\n  }\n\n  getScriptElementsNotInSnapshot(snapshot) {\n    return this.getElementsMatchingTypeNotInSnapshot(\"script\", snapshot)\n  }\n\n  getStylesheetElementsNotInSnapshot(snapshot) {\n    return this.getElementsMatchingTypeNotInSnapshot(\"stylesheet\", snapshot)\n  }\n\n  getElementsMatchingTypeNotInSnapshot(matchedType, snapshot) {\n    return Object.keys(this.detailsByOuterHTML)\n      .filter((outerHTML) => !(outerHTML in snapshot.detailsByOuterHTML))\n      .map((outerHTML) => this.detailsByOuterHTML[outerHTML])\n      .filter(({ type }) => type == matchedType)\n      .map(({ elements: [element] }) => element)\n  }\n\n  get provisionalElements() {\n    return Object.keys(this.detailsByOuterHTML).reduce((result, outerHTML) => {\n      const { type, tracked, elements } = this.detailsByOuterHTML[outerHTML];\n      if (type == null && !tracked) {\n        return [...result, ...elements]\n      } else if (elements.length > 1) {\n        return [...result, ...elements.slice(1)]\n      } else {\n        return result\n      }\n    }, [])\n  }\n\n  getMetaValue(name) {\n    const element = this.findMetaElementByName(name);\n    return element ? element.getAttribute(\"content\") : null\n  }\n\n  findMetaElementByName(name) {\n    return Object.keys(this.detailsByOuterHTML).reduce((result, outerHTML) => {\n      const {\n        elements: [element]\n      } = this.detailsByOuterHTML[outerHTML];\n      return elementIsMetaElementWithName(element, name) ? element : result\n    }, undefined | undefined)\n  }\n}\n\nfunction elementType(element) {\n  if (elementIsScript(element)) {\n    return \"script\"\n  } else if (elementIsStylesheet(element)) {\n    return \"stylesheet\"\n  }\n}\n\nfunction elementIsTracked(element) {\n  return element.getAttribute(\"data-turbo-track\") == \"reload\"\n}\n\nfunction elementIsScript(element) {\n  const tagName = element.localName;\n  return tagName == \"script\"\n}\n\nfunction elementIsNoscript(element) {\n  const tagName = element.localName;\n  return tagName == \"noscript\"\n}\n\nfunction elementIsStylesheet(element) {\n  const tagName = element.localName;\n  return tagName == \"style\" || (tagName == \"link\" && element.getAttribute(\"rel\") == \"stylesheet\")\n}\n\nfunction elementIsMetaElementWithName(element, name) {\n  const tagName = element.localName;\n  return tagName == \"meta\" && element.getAttribute(\"name\") == name\n}\n\nfunction elementWithoutNonce(element) {\n  if (element.hasAttribute(\"nonce\")) {\n    element.setAttribute(\"nonce\", \"\");\n  }\n\n  return element\n}\n\nclass PageSnapshot extends Snapshot {\n  static fromHTMLString(html = \"\") {\n    return this.fromDocument(parseHTMLDocument(html))\n  }\n\n  static fromElement(element) {\n    return this.fromDocument(element.ownerDocument)\n  }\n\n  static fromDocument({ documentElement, body, head }) {\n    return new this(documentElement, body, new HeadSnapshot(head))\n  }\n\n  constructor(documentElement, body, headSnapshot) {\n    super(body);\n    this.documentElement = documentElement;\n    this.headSnapshot = headSnapshot;\n  }\n\n  clone() {\n    const clonedElement = this.element.cloneNode(true);\n\n    const selectElements = this.element.querySelectorAll(\"select\");\n    const clonedSelectElements = clonedElement.querySelectorAll(\"select\");\n\n    for (const [index, source] of selectElements.entries()) {\n      const clone = clonedSelectElements[index];\n      for (const option of clone.selectedOptions) option.selected = false;\n      for (const option of source.selectedOptions) clone.options[option.index].selected = true;\n    }\n\n    for (const clonedPasswordInput of clonedElement.querySelectorAll('input[type=\"password\"]')) {\n      clonedPasswordInput.value = \"\";\n    }\n\n    return new PageSnapshot(this.documentElement, clonedElement, this.headSnapshot)\n  }\n\n  get lang() {\n    return this.documentElement.getAttribute(\"lang\")\n  }\n\n  get headElement() {\n    return this.headSnapshot.element\n  }\n\n  get rootLocation() {\n    const root = this.getSetting(\"root\") ?? \"/\";\n    return expandURL(root)\n  }\n\n  get cacheControlValue() {\n    return this.getSetting(\"cache-control\")\n  }\n\n  get isPreviewable() {\n    return this.cacheControlValue != \"no-preview\"\n  }\n\n  get isCacheable() {\n    return this.cacheControlValue != \"no-cache\"\n  }\n\n  get isVisitable() {\n    return this.getSetting(\"visit-control\") != \"reload\"\n  }\n\n  get prefersViewTransitions() {\n    return this.headSnapshot.getMetaValue(\"view-transition\") === \"same-origin\"\n  }\n\n  get shouldMorphPage() {\n    return this.getSetting(\"refresh-method\") === \"morph\"\n  }\n\n  get shouldPreserveScrollPosition() {\n    return this.getSetting(\"refresh-scroll\") === \"preserve\"\n  }\n\n  // Private\n\n  getSetting(name) {\n    return this.headSnapshot.getMetaValue(`turbo-${name}`)\n  }\n}\n\nclass ViewTransitioner {\n  #viewTransitionStarted = false\n  #lastOperation = Promise.resolve()\n\n  renderChange(useViewTransition, render) {\n    if (useViewTransition && this.viewTransitionsAvailable && !this.#viewTransitionStarted) {\n      this.#viewTransitionStarted = true;\n      this.#lastOperation = this.#lastOperation.then(async () => {\n        await document.startViewTransition(render).finished;\n      });\n    } else {\n      this.#lastOperation = this.#lastOperation.then(render);\n    }\n\n    return this.#lastOperation\n  }\n\n  get viewTransitionsAvailable() {\n    return document.startViewTransition\n  }\n}\n\nconst defaultOptions = {\n  action: \"advance\",\n  historyChanged: false,\n  visitCachedSnapshot: () => {},\n  willRender: true,\n  updateHistory: true,\n  shouldCacheSnapshot: true,\n  acceptsStreamResponse: false\n};\n\nconst TimingMetric = {\n  visitStart: \"visitStart\",\n  requestStart: \"requestStart\",\n  requestEnd: \"requestEnd\",\n  visitEnd: \"visitEnd\"\n};\n\nconst VisitState = {\n  initialized: \"initialized\",\n  started: \"started\",\n  canceled: \"canceled\",\n  failed: \"failed\",\n  completed: \"completed\"\n};\n\nconst SystemStatusCode = {\n  networkFailure: 0,\n  timeoutFailure: -1,\n  contentTypeMismatch: -2\n};\n\nconst Direction = {\n  advance: \"forward\",\n  restore: \"back\",\n  replace: \"none\"\n};\n\nclass Visit {\n  identifier = uuid() // Required by turbo-ios\n  timingMetrics = {}\n\n  followedRedirect = false\n  historyChanged = false\n  scrolled = false\n  shouldCacheSnapshot = true\n  acceptsStreamResponse = false\n  snapshotCached = false\n  state = VisitState.initialized\n  viewTransitioner = new ViewTransitioner()\n\n  constructor(delegate, location, restorationIdentifier, options = {}) {\n    this.delegate = delegate;\n    this.location = location;\n    this.restorationIdentifier = restorationIdentifier || uuid();\n\n    const {\n      action,\n      historyChanged,\n      referrer,\n      snapshot,\n      snapshotHTML,\n      response,\n      visitCachedSnapshot,\n      willRender,\n      updateHistory,\n      shouldCacheSnapshot,\n      acceptsStreamResponse,\n      direction\n    } = {\n      ...defaultOptions,\n      ...options\n    };\n    this.action = action;\n    this.historyChanged = historyChanged;\n    this.referrer = referrer;\n    this.snapshot = snapshot;\n    this.snapshotHTML = snapshotHTML;\n    this.response = response;\n    this.isSamePage = this.delegate.locationWithActionIsSamePage(this.location, this.action);\n    this.isPageRefresh = this.view.isPageRefresh(this);\n    this.visitCachedSnapshot = visitCachedSnapshot;\n    this.willRender = willRender;\n    this.updateHistory = updateHistory;\n    this.scrolled = !willRender;\n    this.shouldCacheSnapshot = shouldCacheSnapshot;\n    this.acceptsStreamResponse = acceptsStreamResponse;\n    this.direction = direction || Direction[action];\n  }\n\n  get adapter() {\n    return this.delegate.adapter\n  }\n\n  get view() {\n    return this.delegate.view\n  }\n\n  get history() {\n    return this.delegate.history\n  }\n\n  get restorationData() {\n    return this.history.getRestorationDataForIdentifier(this.restorationIdentifier)\n  }\n\n  get silent() {\n    return this.isSamePage\n  }\n\n  start() {\n    if (this.state == VisitState.initialized) {\n      this.recordTimingMetric(TimingMetric.visitStart);\n      this.state = VisitState.started;\n      this.adapter.visitStarted(this);\n      this.delegate.visitStarted(this);\n    }\n  }\n\n  cancel() {\n    if (this.state == VisitState.started) {\n      if (this.request) {\n        this.request.cancel();\n      }\n      this.cancelRender();\n      this.state = VisitState.canceled;\n    }\n  }\n\n  complete() {\n    if (this.state == VisitState.started) {\n      this.recordTimingMetric(TimingMetric.visitEnd);\n      this.adapter.visitCompleted(this);\n      this.state = VisitState.completed;\n      this.followRedirect();\n\n      if (!this.followedRedirect) {\n        this.delegate.visitCompleted(this);\n      }\n    }\n  }\n\n  fail() {\n    if (this.state == VisitState.started) {\n      this.state = VisitState.failed;\n      this.adapter.visitFailed(this);\n      this.delegate.visitCompleted(this);\n    }\n  }\n\n  changeHistory() {\n    if (!this.historyChanged && this.updateHistory) {\n      const actionForHistory = this.location.href === this.referrer?.href ? \"replace\" : this.action;\n      const method = getHistoryMethodForAction(actionForHistory);\n      this.history.update(method, this.location, this.restorationIdentifier);\n      this.historyChanged = true;\n    }\n  }\n\n  issueRequest() {\n    if (this.hasPreloadedResponse()) {\n      this.simulateRequest();\n    } else if (this.shouldIssueRequest() && !this.request) {\n      this.request = new FetchRequest(this, FetchMethod.get, this.location);\n      this.request.perform();\n    }\n  }\n\n  simulateRequest() {\n    if (this.response) {\n      this.startRequest();\n      this.recordResponse();\n      this.finishRequest();\n    }\n  }\n\n  startRequest() {\n    this.recordTimingMetric(TimingMetric.requestStart);\n    this.adapter.visitRequestStarted(this);\n  }\n\n  recordResponse(response = this.response) {\n    this.response = response;\n    if (response) {\n      const { statusCode } = response;\n      if (isSuccessful(statusCode)) {\n        this.adapter.visitRequestCompleted(this);\n      } else {\n        this.adapter.visitRequestFailedWithStatusCode(this, statusCode);\n      }\n    }\n  }\n\n  finishRequest() {\n    this.recordTimingMetric(TimingMetric.requestEnd);\n    this.adapter.visitRequestFinished(this);\n  }\n\n  loadResponse() {\n    if (this.response) {\n      const { statusCode, responseHTML } = this.response;\n      this.render(async () => {\n        if (this.shouldCacheSnapshot) this.cacheSnapshot();\n        if (this.view.renderPromise) await this.view.renderPromise;\n\n        if (isSuccessful(statusCode) && responseHTML != null) {\n          const snapshot = PageSnapshot.fromHTMLString(responseHTML);\n          await this.renderPageSnapshot(snapshot, false);\n\n          this.adapter.visitRendered(this);\n          this.complete();\n        } else {\n          await this.view.renderError(PageSnapshot.fromHTMLString(responseHTML), this);\n          this.adapter.visitRendered(this);\n          this.fail();\n        }\n      });\n    }\n  }\n\n  getCachedSnapshot() {\n    const snapshot = this.view.getCachedSnapshotForLocation(this.location) || this.getPreloadedSnapshot();\n\n    if (snapshot && (!getAnchor(this.location) || snapshot.hasAnchor(getAnchor(this.location)))) {\n      if (this.action == \"restore\" || snapshot.isPreviewable) {\n        return snapshot\n      }\n    }\n  }\n\n  getPreloadedSnapshot() {\n    if (this.snapshotHTML) {\n      return PageSnapshot.fromHTMLString(this.snapshotHTML)\n    }\n  }\n\n  hasCachedSnapshot() {\n    return this.getCachedSnapshot() != null\n  }\n\n  loadCachedSnapshot() {\n    const snapshot = this.getCachedSnapshot();\n    if (snapshot) {\n      const isPreview = this.shouldIssueRequest();\n      this.render(async () => {\n        this.cacheSnapshot();\n        if (this.isSamePage || this.isPageRefresh) {\n          this.adapter.visitRendered(this);\n        } else {\n          if (this.view.renderPromise) await this.view.renderPromise;\n\n          await this.renderPageSnapshot(snapshot, isPreview);\n\n          this.adapter.visitRendered(this);\n          if (!isPreview) {\n            this.complete();\n          }\n        }\n      });\n    }\n  }\n\n  followRedirect() {\n    if (this.redirectedToLocation && !this.followedRedirect && this.response?.redirected) {\n      this.adapter.visitProposedToLocation(this.redirectedToLocation, {\n        action: \"replace\",\n        response: this.response,\n        shouldCacheSnapshot: false,\n        willRender: false\n      });\n      this.followedRedirect = true;\n    }\n  }\n\n  goToSamePageAnchor() {\n    if (this.isSamePage) {\n      this.render(async () => {\n        this.cacheSnapshot();\n        this.performScroll();\n        this.changeHistory();\n        this.adapter.visitRendered(this);\n      });\n    }\n  }\n\n  // Fetch request delegate\n\n  prepareRequest(request) {\n    if (this.acceptsStreamResponse) {\n      request.acceptResponseType(StreamMessage.contentType);\n    }\n  }\n\n  requestStarted() {\n    this.startRequest();\n  }\n\n  requestPreventedHandlingResponse(_request, _response) {}\n\n  async requestSucceededWithResponse(request, response) {\n    const responseHTML = await response.responseHTML;\n    const { redirected, statusCode } = response;\n    if (responseHTML == undefined) {\n      this.recordResponse({\n        statusCode: SystemStatusCode.contentTypeMismatch,\n        redirected\n      });\n    } else {\n      this.redirectedToLocation = response.redirected ? response.location : undefined;\n      this.recordResponse({ statusCode: statusCode, responseHTML, redirected });\n    }\n  }\n\n  async requestFailedWithResponse(request, response) {\n    const responseHTML = await response.responseHTML;\n    const { redirected, statusCode } = response;\n    if (responseHTML == undefined) {\n      this.recordResponse({\n        statusCode: SystemStatusCode.contentTypeMismatch,\n        redirected\n      });\n    } else {\n      this.recordResponse({ statusCode: statusCode, responseHTML, redirected });\n    }\n  }\n\n  requestErrored(_request, _error) {\n    this.recordResponse({\n      statusCode: SystemStatusCode.networkFailure,\n      redirected: false\n    });\n  }\n\n  requestFinished() {\n    this.finishRequest();\n  }\n\n  // Scrolling\n\n  performScroll() {\n    if (!this.scrolled && !this.view.forceReloaded && !this.view.shouldPreserveScrollPosition(this)) {\n      if (this.action == \"restore\") {\n        this.scrollToRestoredPosition() || this.scrollToAnchor() || this.view.scrollToTop();\n      } else {\n        this.scrollToAnchor() || this.view.scrollToTop();\n      }\n      if (this.isSamePage) {\n        this.delegate.visitScrolledToSamePageLocation(this.view.lastRenderedLocation, this.location);\n      }\n\n      this.scrolled = true;\n    }\n  }\n\n  scrollToRestoredPosition() {\n    const { scrollPosition } = this.restorationData;\n    if (scrollPosition) {\n      this.view.scrollToPosition(scrollPosition);\n      return true\n    }\n  }\n\n  scrollToAnchor() {\n    const anchor = getAnchor(this.location);\n    if (anchor != null) {\n      this.view.scrollToAnchor(anchor);\n      return true\n    }\n  }\n\n  // Instrumentation\n\n  recordTimingMetric(metric) {\n    this.timingMetrics[metric] = new Date().getTime();\n  }\n\n  getTimingMetrics() {\n    return { ...this.timingMetrics }\n  }\n\n  // Private\n\n  getHistoryMethodForAction(action) {\n    switch (action) {\n      case \"replace\":\n        return history.replaceState\n      case \"advance\":\n      case \"restore\":\n        return history.pushState\n    }\n  }\n\n  hasPreloadedResponse() {\n    return typeof this.response == \"object\"\n  }\n\n  shouldIssueRequest() {\n    if (this.isSamePage) {\n      return false\n    } else if (this.action == \"restore\") {\n      return !this.hasCachedSnapshot()\n    } else {\n      return this.willRender\n    }\n  }\n\n  cacheSnapshot() {\n    if (!this.snapshotCached) {\n      this.view.cacheSnapshot(this.snapshot).then((snapshot) => snapshot && this.visitCachedSnapshot(snapshot));\n      this.snapshotCached = true;\n    }\n  }\n\n  async render(callback) {\n    this.cancelRender();\n    this.frame = await nextRepaint();\n    await callback();\n    delete this.frame;\n  }\n\n  async renderPageSnapshot(snapshot, isPreview) {\n    await this.viewTransitioner.renderChange(this.view.shouldTransitionTo(snapshot), async () => {\n      await this.view.renderPage(snapshot, isPreview, this.willRender, this);\n      this.performScroll();\n    });\n  }\n\n  cancelRender() {\n    if (this.frame) {\n      cancelAnimationFrame(this.frame);\n      delete this.frame;\n    }\n  }\n}\n\nfunction isSuccessful(statusCode) {\n  return statusCode >= 200 && statusCode < 300\n}\n\nclass BrowserAdapter {\n  progressBar = new ProgressBar()\n\n  constructor(session) {\n    this.session = session;\n  }\n\n  visitProposedToLocation(location, options) {\n    if (locationIsVisitable(location, this.navigator.rootLocation)) {\n      this.navigator.startVisit(location, options?.restorationIdentifier || uuid(), options);\n    } else {\n      window.location.href = location.toString();\n    }\n  }\n\n  visitStarted(visit) {\n    this.location = visit.location;\n    visit.loadCachedSnapshot();\n    visit.issueRequest();\n    visit.goToSamePageAnchor();\n  }\n\n  visitRequestStarted(visit) {\n    this.progressBar.setValue(0);\n    if (visit.hasCachedSnapshot() || visit.action != \"restore\") {\n      this.showVisitProgressBarAfterDelay();\n    } else {\n      this.showProgressBar();\n    }\n  }\n\n  visitRequestCompleted(visit) {\n    visit.loadResponse();\n  }\n\n  visitRequestFailedWithStatusCode(visit, statusCode) {\n    switch (statusCode) {\n      case SystemStatusCode.networkFailure:\n      case SystemStatusCode.timeoutFailure:\n      case SystemStatusCode.contentTypeMismatch:\n        return this.reload({\n          reason: \"request_failed\",\n          context: {\n            statusCode\n          }\n        })\n      default:\n        return visit.loadResponse()\n    }\n  }\n\n  visitRequestFinished(_visit) {}\n\n  visitCompleted(_visit) {\n    this.progressBar.setValue(1);\n    this.hideVisitProgressBar();\n  }\n\n  pageInvalidated(reason) {\n    this.reload(reason);\n  }\n\n  visitFailed(_visit) {\n    this.progressBar.setValue(1);\n    this.hideVisitProgressBar();\n  }\n\n  visitRendered(_visit) {}\n\n  // Form Submission Delegate\n\n  formSubmissionStarted(_formSubmission) {\n    this.progressBar.setValue(0);\n    this.showFormProgressBarAfterDelay();\n  }\n\n  formSubmissionFinished(_formSubmission) {\n    this.progressBar.setValue(1);\n    this.hideFormProgressBar();\n  }\n\n  // Private\n\n  showVisitProgressBarAfterDelay() {\n    this.visitProgressBarTimeout = window.setTimeout(this.showProgressBar, this.session.progressBarDelay);\n  }\n\n  hideVisitProgressBar() {\n    this.progressBar.hide();\n    if (this.visitProgressBarTimeout != null) {\n      window.clearTimeout(this.visitProgressBarTimeout);\n      delete this.visitProgressBarTimeout;\n    }\n  }\n\n  showFormProgressBarAfterDelay() {\n    if (this.formProgressBarTimeout == null) {\n      this.formProgressBarTimeout = window.setTimeout(this.showProgressBar, this.session.progressBarDelay);\n    }\n  }\n\n  hideFormProgressBar() {\n    this.progressBar.hide();\n    if (this.formProgressBarTimeout != null) {\n      window.clearTimeout(this.formProgressBarTimeout);\n      delete this.formProgressBarTimeout;\n    }\n  }\n\n  showProgressBar = () => {\n    this.progressBar.show();\n  }\n\n  reload(reason) {\n    dispatch(\"turbo:reload\", { detail: reason });\n\n    window.location.href = this.location?.toString() || window.location.href;\n  }\n\n  get navigator() {\n    return this.session.navigator\n  }\n}\n\nclass CacheObserver {\n  selector = \"[data-turbo-temporary]\"\n  deprecatedSelector = \"[data-turbo-cache=false]\"\n\n  started = false\n\n  start() {\n    if (!this.started) {\n      this.started = true;\n      addEventListener(\"turbo:before-cache\", this.removeTemporaryElements, false);\n    }\n  }\n\n  stop() {\n    if (this.started) {\n      this.started = false;\n      removeEventListener(\"turbo:before-cache\", this.removeTemporaryElements, false);\n    }\n  }\n\n  removeTemporaryElements = (_event) => {\n    for (const element of this.temporaryElements) {\n      element.remove();\n    }\n  }\n\n  get temporaryElements() {\n    return [...document.querySelectorAll(this.selector), ...this.temporaryElementsWithDeprecation]\n  }\n\n  get temporaryElementsWithDeprecation() {\n    const elements = document.querySelectorAll(this.deprecatedSelector);\n\n    if (elements.length) {\n      console.warn(\n        `The ${this.deprecatedSelector} selector is deprecated and will be removed in a future version. Use ${this.selector} instead.`\n      );\n    }\n\n    return [...elements]\n  }\n}\n\nclass FrameRedirector {\n  constructor(session, element) {\n    this.session = session;\n    this.element = element;\n    this.linkInterceptor = new LinkInterceptor(this, element);\n    this.formSubmitObserver = new FormSubmitObserver(this, element);\n  }\n\n  start() {\n    this.linkInterceptor.start();\n    this.formSubmitObserver.start();\n  }\n\n  stop() {\n    this.linkInterceptor.stop();\n    this.formSubmitObserver.stop();\n  }\n\n  // Link interceptor delegate\n\n  shouldInterceptLinkClick(element, _location, _event) {\n    return this.#shouldRedirect(element)\n  }\n\n  linkClickIntercepted(element, url, event) {\n    const frame = this.#findFrameElement(element);\n    if (frame) {\n      frame.delegate.linkClickIntercepted(element, url, event);\n    }\n  }\n\n  // Form submit observer delegate\n\n  willSubmitForm(element, submitter) {\n    return (\n      element.closest(\"turbo-frame\") == null &&\n      this.#shouldSubmit(element, submitter) &&\n      this.#shouldRedirect(element, submitter)\n    )\n  }\n\n  formSubmitted(element, submitter) {\n    const frame = this.#findFrameElement(element, submitter);\n    if (frame) {\n      frame.delegate.formSubmitted(element, submitter);\n    }\n  }\n\n  #shouldSubmit(form, submitter) {\n    const action = getAction$1(form, submitter);\n    const meta = this.element.ownerDocument.querySelector(`meta[name=\"turbo-root\"]`);\n    const rootLocation = expandURL(meta?.content ?? \"/\");\n\n    return this.#shouldRedirect(form, submitter) && locationIsVisitable(action, rootLocation)\n  }\n\n  #shouldRedirect(element, submitter) {\n    const isNavigatable =\n      element instanceof HTMLFormElement\n        ? this.session.submissionIsNavigatable(element, submitter)\n        : this.session.elementIsNavigatable(element);\n\n    if (isNavigatable) {\n      const frame = this.#findFrameElement(element, submitter);\n      return frame ? frame != element.closest(\"turbo-frame\") : false\n    } else {\n      return false\n    }\n  }\n\n  #findFrameElement(element, submitter) {\n    const id = submitter?.getAttribute(\"data-turbo-frame\") || element.getAttribute(\"data-turbo-frame\");\n    if (id && id != \"_top\") {\n      const frame = this.element.querySelector(`#${id}:not([disabled])`);\n      if (frame instanceof FrameElement) {\n        return frame\n      }\n    }\n  }\n}\n\nclass History {\n  location\n  restorationIdentifier = uuid()\n  restorationData = {}\n  started = false\n  pageLoaded = false\n  currentIndex = 0\n\n  constructor(delegate) {\n    this.delegate = delegate;\n  }\n\n  start() {\n    if (!this.started) {\n      addEventListener(\"popstate\", this.onPopState, false);\n      addEventListener(\"load\", this.onPageLoad, false);\n      this.currentIndex = history.state?.turbo?.restorationIndex || 0;\n      this.started = true;\n      this.replace(new URL(window.location.href));\n    }\n  }\n\n  stop() {\n    if (this.started) {\n      removeEventListener(\"popstate\", this.onPopState, false);\n      removeEventListener(\"load\", this.onPageLoad, false);\n      this.started = false;\n    }\n  }\n\n  push(location, restorationIdentifier) {\n    this.update(history.pushState, location, restorationIdentifier);\n  }\n\n  replace(location, restorationIdentifier) {\n    this.update(history.replaceState, location, restorationIdentifier);\n  }\n\n  update(method, location, restorationIdentifier = uuid()) {\n    if (method === history.pushState) ++this.currentIndex;\n\n    const state = { turbo: { restorationIdentifier, restorationIndex: this.currentIndex } };\n    method.call(history, state, \"\", location.href);\n    this.location = location;\n    this.restorationIdentifier = restorationIdentifier;\n  }\n\n  // Restoration data\n\n  getRestorationDataForIdentifier(restorationIdentifier) {\n    return this.restorationData[restorationIdentifier] || {}\n  }\n\n  updateRestorationData(additionalData) {\n    const { restorationIdentifier } = this;\n    const restorationData = this.restorationData[restorationIdentifier];\n    this.restorationData[restorationIdentifier] = {\n      ...restorationData,\n      ...additionalData\n    };\n  }\n\n  // Scroll restoration\n\n  assumeControlOfScrollRestoration() {\n    if (!this.previousScrollRestoration) {\n      this.previousScrollRestoration = history.scrollRestoration ?? \"auto\";\n      history.scrollRestoration = \"manual\";\n    }\n  }\n\n  relinquishControlOfScrollRestoration() {\n    if (this.previousScrollRestoration) {\n      history.scrollRestoration = this.previousScrollRestoration;\n      delete this.previousScrollRestoration;\n    }\n  }\n\n  // Event handlers\n\n  onPopState = (event) => {\n    if (this.shouldHandlePopState()) {\n      const { turbo } = event.state || {};\n      if (turbo) {\n        this.location = new URL(window.location.href);\n        const { restorationIdentifier, restorationIndex } = turbo;\n        this.restorationIdentifier = restorationIdentifier;\n        const direction = restorationIndex > this.currentIndex ? \"forward\" : \"back\";\n        this.delegate.historyPoppedToLocationWithRestorationIdentifierAndDirection(this.location, restorationIdentifier, direction);\n        this.currentIndex = restorationIndex;\n      }\n    }\n  }\n\n  onPageLoad = async (_event) => {\n    await nextMicrotask();\n    this.pageLoaded = true;\n  }\n\n  // Private\n\n  shouldHandlePopState() {\n    // Safari dispatches a popstate event after window's load event, ignore it\n    return this.pageIsLoaded()\n  }\n\n  pageIsLoaded() {\n    return this.pageLoaded || document.readyState == \"complete\"\n  }\n}\n\nclass LinkPrefetchObserver {\n  started = false\n  #prefetchedLink = null\n\n  constructor(delegate, eventTarget) {\n    this.delegate = delegate;\n    this.eventTarget = eventTarget;\n  }\n\n  start() {\n    if (this.started) return\n\n    if (this.eventTarget.readyState === \"loading\") {\n      this.eventTarget.addEventListener(\"DOMContentLoaded\", this.#enable, { once: true });\n    } else {\n      this.#enable();\n    }\n  }\n\n  stop() {\n    if (!this.started) return\n\n    this.eventTarget.removeEventListener(\"mouseenter\", this.#tryToPrefetchRequest, {\n      capture: true,\n      passive: true\n    });\n    this.eventTarget.removeEventListener(\"mouseleave\", this.#cancelRequestIfObsolete, {\n      capture: true,\n      passive: true\n    });\n\n    this.eventTarget.removeEventListener(\"turbo:before-fetch-request\", this.#tryToUsePrefetchedRequest, true);\n    this.started = false;\n  }\n\n  #enable = () => {\n    this.eventTarget.addEventListener(\"mouseenter\", this.#tryToPrefetchRequest, {\n      capture: true,\n      passive: true\n    });\n    this.eventTarget.addEventListener(\"mouseleave\", this.#cancelRequestIfObsolete, {\n      capture: true,\n      passive: true\n    });\n\n    this.eventTarget.addEventListener(\"turbo:before-fetch-request\", this.#tryToUsePrefetchedRequest, true);\n    this.started = true;\n  }\n\n  #tryToPrefetchRequest = (event) => {\n    if (getMetaContent(\"turbo-prefetch\") === \"false\") return\n\n    const target = event.target;\n    const isLink = target.matches && target.matches(\"a[href]:not([target^=_]):not([download])\");\n\n    if (isLink && this.#isPrefetchable(target)) {\n      const link = target;\n      const location = getLocationForLink(link);\n\n      if (this.delegate.canPrefetchRequestToLocation(link, location)) {\n        this.#prefetchedLink = link;\n\n        const fetchRequest = new FetchRequest(\n          this,\n          FetchMethod.get,\n          location,\n          new URLSearchParams(),\n          target\n        );\n\n        prefetchCache.setLater(location.toString(), fetchRequest, this.#cacheTtl);\n      }\n    }\n  }\n\n  #cancelRequestIfObsolete = (event) => {\n    if (event.target === this.#prefetchedLink) this.#cancelPrefetchRequest();\n  }\n\n  #cancelPrefetchRequest = () => {\n    prefetchCache.clear();\n    this.#prefetchedLink = null;\n  }\n\n  #tryToUsePrefetchedRequest = (event) => {\n    if (event.target.tagName !== \"FORM\" && event.detail.fetchOptions.method === \"get\") {\n      const cached = prefetchCache.get(event.detail.url.toString());\n\n      if (cached) {\n        // User clicked link, use cache response\n        event.detail.fetchRequest = cached;\n      }\n\n      prefetchCache.clear();\n    }\n  }\n\n  prepareRequest(request) {\n    const link = request.target;\n\n    request.headers[\"X-Sec-Purpose\"] = \"prefetch\";\n\n    const turboFrame = link.closest(\"turbo-frame\");\n    const turboFrameTarget = link.getAttribute(\"data-turbo-frame\") || turboFrame?.getAttribute(\"target\") || turboFrame?.id;\n\n    if (turboFrameTarget && turboFrameTarget !== \"_top\") {\n      request.headers[\"Turbo-Frame\"] = turboFrameTarget;\n    }\n  }\n\n  // Fetch request interface\n\n  requestSucceededWithResponse() {}\n\n  requestStarted(fetchRequest) {}\n\n  requestErrored(fetchRequest) {}\n\n  requestFinished(fetchRequest) {}\n\n  requestPreventedHandlingResponse(fetchRequest, fetchResponse) {}\n\n  requestFailedWithResponse(fetchRequest, fetchResponse) {}\n\n  get #cacheTtl() {\n    return Number(getMetaContent(\"turbo-prefetch-cache-time\")) || cacheTtl\n  }\n\n  #isPrefetchable(link) {\n    const href = link.getAttribute(\"href\");\n\n    if (!href) return false\n\n    if (unfetchableLink(link)) return false\n    if (linkToTheSamePage(link)) return false\n    if (linkOptsOut(link)) return false\n    if (nonSafeLink(link)) return false\n    if (eventPrevented(link)) return false\n\n    return true\n  }\n}\n\nconst unfetchableLink = (link) => {\n  return link.origin !== document.location.origin || ![\"http:\", \"https:\"].includes(link.protocol) || link.hasAttribute(\"target\")\n};\n\nconst linkToTheSamePage = (link) => {\n  return (link.pathname + link.search === document.location.pathname + document.location.search) || link.href.startsWith(\"#\")\n};\n\nconst linkOptsOut = (link) => {\n  if (link.getAttribute(\"data-turbo-prefetch\") === \"false\") return true\n  if (link.getAttribute(\"data-turbo\") === \"false\") return true\n\n  const turboPrefetchParent = findClosestRecursively(link, \"[data-turbo-prefetch]\");\n  if (turboPrefetchParent && turboPrefetchParent.getAttribute(\"data-turbo-prefetch\") === \"false\") return true\n\n  return false\n};\n\nconst nonSafeLink = (link) => {\n  const turboMethod = link.getAttribute(\"data-turbo-method\");\n  if (turboMethod && turboMethod.toLowerCase() !== \"get\") return true\n\n  if (isUJS(link)) return true\n  if (link.hasAttribute(\"data-turbo-confirm\")) return true\n  if (link.hasAttribute(\"data-turbo-stream\")) return true\n\n  return false\n};\n\nconst isUJS = (link) => {\n  return link.hasAttribute(\"data-remote\") || link.hasAttribute(\"data-behavior\") || link.hasAttribute(\"data-confirm\") || link.hasAttribute(\"data-method\")\n};\n\nconst eventPrevented = (link) => {\n  const event = dispatch(\"turbo:before-prefetch\", { target: link, cancelable: true });\n  return event.defaultPrevented\n};\n\nclass Navigator {\n  constructor(delegate) {\n    this.delegate = delegate;\n  }\n\n  proposeVisit(location, options = {}) {\n    if (this.delegate.allowsVisitingLocationWithAction(location, options.action)) {\n      this.delegate.visitProposedToLocation(location, options);\n    }\n  }\n\n  startVisit(locatable, restorationIdentifier, options = {}) {\n    this.stop();\n    this.currentVisit = new Visit(this, expandURL(locatable), restorationIdentifier, {\n      referrer: this.location,\n      ...options\n    });\n    this.currentVisit.start();\n  }\n\n  submitForm(form, submitter) {\n    this.stop();\n    this.formSubmission = new FormSubmission(this, form, submitter, true);\n\n    this.formSubmission.start();\n  }\n\n  stop() {\n    if (this.formSubmission) {\n      this.formSubmission.stop();\n      delete this.formSubmission;\n    }\n\n    if (this.currentVisit) {\n      this.currentVisit.cancel();\n      delete this.currentVisit;\n    }\n  }\n\n  get adapter() {\n    return this.delegate.adapter\n  }\n\n  get view() {\n    return this.delegate.view\n  }\n\n  get rootLocation() {\n    return this.view.snapshot.rootLocation\n  }\n\n  get history() {\n    return this.delegate.history\n  }\n\n  // Form submission delegate\n\n  formSubmissionStarted(formSubmission) {\n    // Not all adapters implement formSubmissionStarted\n    if (typeof this.adapter.formSubmissionStarted === \"function\") {\n      this.adapter.formSubmissionStarted(formSubmission);\n    }\n  }\n\n  async formSubmissionSucceededWithResponse(formSubmission, fetchResponse) {\n    if (formSubmission == this.formSubmission) {\n      const responseHTML = await fetchResponse.responseHTML;\n      if (responseHTML) {\n        const shouldCacheSnapshot = formSubmission.isSafe;\n        if (!shouldCacheSnapshot) {\n          this.view.clearSnapshotCache();\n        }\n\n        const { statusCode, redirected } = fetchResponse;\n        const action = this.#getActionForFormSubmission(formSubmission, fetchResponse);\n        const visitOptions = {\n          action,\n          shouldCacheSnapshot,\n          response: { statusCode, responseHTML, redirected }\n        };\n        this.proposeVisit(fetchResponse.location, visitOptions);\n      }\n    }\n  }\n\n  async formSubmissionFailedWithResponse(formSubmission, fetchResponse) {\n    const responseHTML = await fetchResponse.responseHTML;\n\n    if (responseHTML) {\n      const snapshot = PageSnapshot.fromHTMLString(responseHTML);\n      if (fetchResponse.serverError) {\n        await this.view.renderError(snapshot, this.currentVisit);\n      } else {\n        await this.view.renderPage(snapshot, false, true, this.currentVisit);\n      }\n      if(!snapshot.shouldPreserveScrollPosition) {\n        this.view.scrollToTop();\n      }\n      this.view.clearSnapshotCache();\n    }\n  }\n\n  formSubmissionErrored(formSubmission, error) {\n    console.error(error);\n  }\n\n  formSubmissionFinished(formSubmission) {\n    // Not all adapters implement formSubmissionFinished\n    if (typeof this.adapter.formSubmissionFinished === \"function\") {\n      this.adapter.formSubmissionFinished(formSubmission);\n    }\n  }\n\n  // Visit delegate\n\n  visitStarted(visit) {\n    this.delegate.visitStarted(visit);\n  }\n\n  visitCompleted(visit) {\n    this.delegate.visitCompleted(visit);\n  }\n\n  locationWithActionIsSamePage(location, action) {\n    const anchor = getAnchor(location);\n    const currentAnchor = getAnchor(this.view.lastRenderedLocation);\n    const isRestorationToTop = action === \"restore\" && typeof anchor === \"undefined\";\n\n    return (\n      action !== \"replace\" &&\n      getRequestURL(location) === getRequestURL(this.view.lastRenderedLocation) &&\n      (isRestorationToTop || (anchor != null && anchor !== currentAnchor))\n    )\n  }\n\n  visitScrolledToSamePageLocation(oldURL, newURL) {\n    this.delegate.visitScrolledToSamePageLocation(oldURL, newURL);\n  }\n\n  // Visits\n\n  get location() {\n    return this.history.location\n  }\n\n  get restorationIdentifier() {\n    return this.history.restorationIdentifier\n  }\n\n  #getActionForFormSubmission(formSubmission, fetchResponse) {\n    const { submitter, formElement } = formSubmission;\n    return getVisitAction(submitter, formElement) || this.#getDefaultAction(fetchResponse)\n  }\n\n  #getDefaultAction(fetchResponse) {\n    const sameLocationRedirect = fetchResponse.redirected && fetchResponse.location.href === this.location?.href;\n    return sameLocationRedirect ? \"replace\" : \"advance\"\n  }\n}\n\nconst PageStage = {\n  initial: 0,\n  loading: 1,\n  interactive: 2,\n  complete: 3\n};\n\nclass PageObserver {\n  stage = PageStage.initial\n  started = false\n\n  constructor(delegate) {\n    this.delegate = delegate;\n  }\n\n  start() {\n    if (!this.started) {\n      if (this.stage == PageStage.initial) {\n        this.stage = PageStage.loading;\n      }\n      document.addEventListener(\"readystatechange\", this.interpretReadyState, false);\n      addEventListener(\"pagehide\", this.pageWillUnload, false);\n      this.started = true;\n    }\n  }\n\n  stop() {\n    if (this.started) {\n      document.removeEventListener(\"readystatechange\", this.interpretReadyState, false);\n      removeEventListener(\"pagehide\", this.pageWillUnload, false);\n      this.started = false;\n    }\n  }\n\n  interpretReadyState = () => {\n    const { readyState } = this;\n    if (readyState == \"interactive\") {\n      this.pageIsInteractive();\n    } else if (readyState == \"complete\") {\n      this.pageIsComplete();\n    }\n  }\n\n  pageIsInteractive() {\n    if (this.stage == PageStage.loading) {\n      this.stage = PageStage.interactive;\n      this.delegate.pageBecameInteractive();\n    }\n  }\n\n  pageIsComplete() {\n    this.pageIsInteractive();\n    if (this.stage == PageStage.interactive) {\n      this.stage = PageStage.complete;\n      this.delegate.pageLoaded();\n    }\n  }\n\n  pageWillUnload = () => {\n    this.delegate.pageWillUnload();\n  }\n\n  get readyState() {\n    return document.readyState\n  }\n}\n\nclass ScrollObserver {\n  started = false\n\n  constructor(delegate) {\n    this.delegate = delegate;\n  }\n\n  start() {\n    if (!this.started) {\n      addEventListener(\"scroll\", this.onScroll, false);\n      this.onScroll();\n      this.started = true;\n    }\n  }\n\n  stop() {\n    if (this.started) {\n      removeEventListener(\"scroll\", this.onScroll, false);\n      this.started = false;\n    }\n  }\n\n  onScroll = () => {\n    this.updatePosition({ x: window.pageXOffset, y: window.pageYOffset });\n  }\n\n  // Private\n\n  updatePosition(position) {\n    this.delegate.scrollPositionChanged(position);\n  }\n}\n\nclass StreamMessageRenderer {\n  render({ fragment }) {\n    Bardo.preservingPermanentElements(this, getPermanentElementMapForFragment(fragment), () => {\n      withAutofocusFromFragment(fragment, () => {\n        withPreservedFocus(() => {\n          document.documentElement.appendChild(fragment);\n        });\n      });\n    });\n  }\n\n  // Bardo delegate\n\n  enteringBardo(currentPermanentElement, newPermanentElement) {\n    newPermanentElement.replaceWith(currentPermanentElement.cloneNode(true));\n  }\n\n  leavingBardo() {}\n}\n\nfunction getPermanentElementMapForFragment(fragment) {\n  const permanentElementsInDocument = queryPermanentElementsAll(document.documentElement);\n  const permanentElementMap = {};\n  for (const permanentElementInDocument of permanentElementsInDocument) {\n    const { id } = permanentElementInDocument;\n\n    for (const streamElement of fragment.querySelectorAll(\"turbo-stream\")) {\n      const elementInStream = getPermanentElementById(streamElement.templateElement.content, id);\n\n      if (elementInStream) {\n        permanentElementMap[id] = [permanentElementInDocument, elementInStream];\n      }\n    }\n  }\n\n  return permanentElementMap\n}\n\nasync function withAutofocusFromFragment(fragment, callback) {\n  const generatedID = `turbo-stream-autofocus-${uuid()}`;\n  const turboStreams = fragment.querySelectorAll(\"turbo-stream\");\n  const elementWithAutofocus = firstAutofocusableElementInStreams(turboStreams);\n  let willAutofocusId = null;\n\n  if (elementWithAutofocus) {\n    if (elementWithAutofocus.id) {\n      willAutofocusId = elementWithAutofocus.id;\n    } else {\n      willAutofocusId = generatedID;\n    }\n\n    elementWithAutofocus.id = willAutofocusId;\n  }\n\n  callback();\n  await nextRepaint();\n\n  const hasNoActiveElement = document.activeElement == null || document.activeElement == document.body;\n\n  if (hasNoActiveElement && willAutofocusId) {\n    const elementToAutofocus = document.getElementById(willAutofocusId);\n\n    if (elementIsFocusable(elementToAutofocus)) {\n      elementToAutofocus.focus();\n    }\n    if (elementToAutofocus && elementToAutofocus.id == generatedID) {\n      elementToAutofocus.removeAttribute(\"id\");\n    }\n  }\n}\n\nasync function withPreservedFocus(callback) {\n  const [activeElementBeforeRender, activeElementAfterRender] = await around(callback, () => document.activeElement);\n\n  const restoreFocusTo = activeElementBeforeRender && activeElementBeforeRender.id;\n\n  if (restoreFocusTo) {\n    const elementToFocus = document.getElementById(restoreFocusTo);\n\n    if (elementIsFocusable(elementToFocus) && elementToFocus != activeElementAfterRender) {\n      elementToFocus.focus();\n    }\n  }\n}\n\nfunction firstAutofocusableElementInStreams(nodeListOfStreamElements) {\n  for (const streamElement of nodeListOfStreamElements) {\n    const elementWithAutofocus = queryAutofocusableElement(streamElement.templateElement.content);\n\n    if (elementWithAutofocus) return elementWithAutofocus\n  }\n\n  return null\n}\n\nclass StreamObserver {\n  sources = new Set()\n  #started = false\n\n  constructor(delegate) {\n    this.delegate = delegate;\n  }\n\n  start() {\n    if (!this.#started) {\n      this.#started = true;\n      addEventListener(\"turbo:before-fetch-response\", this.inspectFetchResponse, false);\n    }\n  }\n\n  stop() {\n    if (this.#started) {\n      this.#started = false;\n      removeEventListener(\"turbo:before-fetch-response\", this.inspectFetchResponse, false);\n    }\n  }\n\n  connectStreamSource(source) {\n    if (!this.streamSourceIsConnected(source)) {\n      this.sources.add(source);\n      source.addEventListener(\"message\", this.receiveMessageEvent, false);\n    }\n  }\n\n  disconnectStreamSource(source) {\n    if (this.streamSourceIsConnected(source)) {\n      this.sources.delete(source);\n      source.removeEventListener(\"message\", this.receiveMessageEvent, false);\n    }\n  }\n\n  streamSourceIsConnected(source) {\n    return this.sources.has(source)\n  }\n\n  inspectFetchResponse = (event) => {\n    const response = fetchResponseFromEvent(event);\n    if (response && fetchResponseIsStream(response)) {\n      event.preventDefault();\n      this.receiveMessageResponse(response);\n    }\n  }\n\n  receiveMessageEvent = (event) => {\n    if (this.#started && typeof event.data == \"string\") {\n      this.receiveMessageHTML(event.data);\n    }\n  }\n\n  async receiveMessageResponse(response) {\n    const html = await response.responseHTML;\n    if (html) {\n      this.receiveMessageHTML(html);\n    }\n  }\n\n  receiveMessageHTML(html) {\n    this.delegate.receivedMessageFromStream(StreamMessage.wrap(html));\n  }\n}\n\nfunction fetchResponseFromEvent(event) {\n  const fetchResponse = event.detail?.fetchResponse;\n  if (fetchResponse instanceof FetchResponse) {\n    return fetchResponse\n  }\n}\n\nfunction fetchResponseIsStream(response) {\n  const contentType = response.contentType ?? \"\";\n  return contentType.startsWith(StreamMessage.contentType)\n}\n\nclass ErrorRenderer extends Renderer {\n  static renderElement(currentElement, newElement) {\n    const { documentElement, body } = document;\n\n    documentElement.replaceChild(newElement, body);\n  }\n\n  async render() {\n    this.replaceHeadAndBody();\n    this.activateScriptElements();\n  }\n\n  replaceHeadAndBody() {\n    const { documentElement, head } = document;\n    documentElement.replaceChild(this.newHead, head);\n    this.renderElement(this.currentElement, this.newElement);\n  }\n\n  activateScriptElements() {\n    for (const replaceableElement of this.scriptElements) {\n      const parentNode = replaceableElement.parentNode;\n      if (parentNode) {\n        const element = activateScriptElement(replaceableElement);\n        parentNode.replaceChild(element, replaceableElement);\n      }\n    }\n  }\n\n  get newHead() {\n    return this.newSnapshot.headSnapshot.element\n  }\n\n  get scriptElements() {\n    return document.documentElement.querySelectorAll(\"script\")\n  }\n}\n\n// base IIFE to define idiomorph\nvar Idiomorph = (function () {\n\n        //=============================================================================\n        // AND NOW IT BEGINS...\n        //=============================================================================\n        let EMPTY_SET = new Set();\n\n        // default configuration values, updatable by users now\n        let defaults = {\n            morphStyle: \"outerHTML\",\n            callbacks : {\n                beforeNodeAdded: noOp,\n                afterNodeAdded: noOp,\n                beforeNodeMorphed: noOp,\n                afterNodeMorphed: noOp,\n                beforeNodeRemoved: noOp,\n                afterNodeRemoved: noOp,\n                beforeAttributeUpdated: noOp,\n\n            },\n            head: {\n                style: 'merge',\n                shouldPreserve: function (elt) {\n                    return elt.getAttribute(\"im-preserve\") === \"true\";\n                },\n                shouldReAppend: function (elt) {\n                    return elt.getAttribute(\"im-re-append\") === \"true\";\n                },\n                shouldRemove: noOp,\n                afterHeadMorphed: noOp,\n            }\n        };\n\n        //=============================================================================\n        // Core Morphing Algorithm - morph, morphNormalizedContent, morphOldNodeTo, morphChildren\n        //=============================================================================\n        function morph(oldNode, newContent, config = {}) {\n\n            if (oldNode instanceof Document) {\n                oldNode = oldNode.documentElement;\n            }\n\n            if (typeof newContent === 'string') {\n                newContent = parseContent(newContent);\n            }\n\n            let normalizedContent = normalizeContent(newContent);\n\n            let ctx = createMorphContext(oldNode, normalizedContent, config);\n\n            return morphNormalizedContent(oldNode, normalizedContent, ctx);\n        }\n\n        function morphNormalizedContent(oldNode, normalizedNewContent, ctx) {\n            if (ctx.head.block) {\n                let oldHead = oldNode.querySelector('head');\n                let newHead = normalizedNewContent.querySelector('head');\n                if (oldHead && newHead) {\n                    let promises = handleHeadElement(newHead, oldHead, ctx);\n                    // when head promises resolve, call morph again, ignoring the head tag\n                    Promise.all(promises).then(function () {\n                        morphNormalizedContent(oldNode, normalizedNewContent, Object.assign(ctx, {\n                            head: {\n                                block: false,\n                                ignore: true\n                            }\n                        }));\n                    });\n                    return;\n                }\n            }\n\n            if (ctx.morphStyle === \"innerHTML\") {\n\n                // innerHTML, so we are only updating the children\n                morphChildren(normalizedNewContent, oldNode, ctx);\n                return oldNode.children;\n\n            } else if (ctx.morphStyle === \"outerHTML\" || ctx.morphStyle == null) {\n                // otherwise find the best element match in the new content, morph that, and merge its siblings\n                // into either side of the best match\n                let bestMatch = findBestNodeMatch(normalizedNewContent, oldNode, ctx);\n\n                // stash the siblings that will need to be inserted on either side of the best match\n                let previousSibling = bestMatch?.previousSibling;\n                let nextSibling = bestMatch?.nextSibling;\n\n                // morph it\n                let morphedNode = morphOldNodeTo(oldNode, bestMatch, ctx);\n\n                if (bestMatch) {\n                    // if there was a best match, merge the siblings in too and return the\n                    // whole bunch\n                    return insertSiblings(previousSibling, morphedNode, nextSibling);\n                } else {\n                    // otherwise nothing was added to the DOM\n                    return []\n                }\n            } else {\n                throw \"Do not understand how to morph style \" + ctx.morphStyle;\n            }\n        }\n\n\n        /**\n         * @param possibleActiveElement\n         * @param ctx\n         * @returns {boolean}\n         */\n        function ignoreValueOfActiveElement(possibleActiveElement, ctx) {\n            return ctx.ignoreActiveValue && possibleActiveElement === document.activeElement && possibleActiveElement !== document.body;\n        }\n\n        /**\n         * @param oldNode root node to merge content into\n         * @param newContent new content to merge\n         * @param ctx the merge context\n         * @returns {Element} the element that ended up in the DOM\n         */\n        function morphOldNodeTo(oldNode, newContent, ctx) {\n            if (ctx.ignoreActive && oldNode === document.activeElement) ; else if (newContent == null) {\n                if (ctx.callbacks.beforeNodeRemoved(oldNode) === false) return oldNode;\n\n                oldNode.remove();\n                ctx.callbacks.afterNodeRemoved(oldNode);\n                return null;\n            } else if (!isSoftMatch(oldNode, newContent)) {\n                if (ctx.callbacks.beforeNodeRemoved(oldNode) === false) return oldNode;\n                if (ctx.callbacks.beforeNodeAdded(newContent) === false) return oldNode;\n\n                oldNode.parentElement.replaceChild(newContent, oldNode);\n                ctx.callbacks.afterNodeAdded(newContent);\n                ctx.callbacks.afterNodeRemoved(oldNode);\n                return newContent;\n            } else {\n                if (ctx.callbacks.beforeNodeMorphed(oldNode, newContent) === false) return oldNode;\n\n                if (oldNode instanceof HTMLHeadElement && ctx.head.ignore) ; else if (oldNode instanceof HTMLHeadElement && ctx.head.style !== \"morph\") {\n                    handleHeadElement(newContent, oldNode, ctx);\n                } else {\n                    syncNodeFrom(newContent, oldNode, ctx);\n                    if (!ignoreValueOfActiveElement(oldNode, ctx)) {\n                        morphChildren(newContent, oldNode, ctx);\n                    }\n                }\n                ctx.callbacks.afterNodeMorphed(oldNode, newContent);\n                return oldNode;\n            }\n        }\n\n        /**\n         * This is the core algorithm for matching up children.  The idea is to use id sets to try to match up\n         * nodes as faithfully as possible.  We greedily match, which allows us to keep the algorithm fast, but\n         * by using id sets, we are able to better match up with content deeper in the DOM.\n         *\n         * Basic algorithm is, for each node in the new content:\n         *\n         * - if we have reached the end of the old parent, append the new content\n         * - if the new content has an id set match with the current insertion point, morph\n         * - search for an id set match\n         * - if id set match found, morph\n         * - otherwise search for a \"soft\" match\n         * - if a soft match is found, morph\n         * - otherwise, prepend the new node before the current insertion point\n         *\n         * The two search algorithms terminate if competing node matches appear to outweigh what can be achieved\n         * with the current node.  See findIdSetMatch() and findSoftMatch() for details.\n         *\n         * @param {Element} newParent the parent element of the new content\n         * @param {Element } oldParent the old content that we are merging the new content into\n         * @param ctx the merge context\n         */\n        function morphChildren(newParent, oldParent, ctx) {\n\n            let nextNewChild = newParent.firstChild;\n            let insertionPoint = oldParent.firstChild;\n            let newChild;\n\n            // run through all the new content\n            while (nextNewChild) {\n\n                newChild = nextNewChild;\n                nextNewChild = newChild.nextSibling;\n\n                // if we are at the end of the exiting parent's children, just append\n                if (insertionPoint == null) {\n                    if (ctx.callbacks.beforeNodeAdded(newChild) === false) return;\n\n                    oldParent.appendChild(newChild);\n                    ctx.callbacks.afterNodeAdded(newChild);\n                    removeIdsFromConsideration(ctx, newChild);\n                    continue;\n                }\n\n                // if the current node has an id set match then morph\n                if (isIdSetMatch(newChild, insertionPoint, ctx)) {\n                    morphOldNodeTo(insertionPoint, newChild, ctx);\n                    insertionPoint = insertionPoint.nextSibling;\n                    removeIdsFromConsideration(ctx, newChild);\n                    continue;\n                }\n\n                // otherwise search forward in the existing old children for an id set match\n                let idSetMatch = findIdSetMatch(newParent, oldParent, newChild, insertionPoint, ctx);\n\n                // if we found a potential match, remove the nodes until that point and morph\n                if (idSetMatch) {\n                    insertionPoint = removeNodesBetween(insertionPoint, idSetMatch, ctx);\n                    morphOldNodeTo(idSetMatch, newChild, ctx);\n                    removeIdsFromConsideration(ctx, newChild);\n                    continue;\n                }\n\n                // no id set match found, so scan forward for a soft match for the current node\n                let softMatch = findSoftMatch(newParent, oldParent, newChild, insertionPoint, ctx);\n\n                // if we found a soft match for the current node, morph\n                if (softMatch) {\n                    insertionPoint = removeNodesBetween(insertionPoint, softMatch, ctx);\n                    morphOldNodeTo(softMatch, newChild, ctx);\n                    removeIdsFromConsideration(ctx, newChild);\n                    continue;\n                }\n\n                // abandon all hope of morphing, just insert the new child before the insertion point\n                // and move on\n                if (ctx.callbacks.beforeNodeAdded(newChild) === false) return;\n\n                oldParent.insertBefore(newChild, insertionPoint);\n                ctx.callbacks.afterNodeAdded(newChild);\n                removeIdsFromConsideration(ctx, newChild);\n            }\n\n            // remove any remaining old nodes that didn't match up with new content\n            while (insertionPoint !== null) {\n\n                let tempNode = insertionPoint;\n                insertionPoint = insertionPoint.nextSibling;\n                removeNode(tempNode, ctx);\n            }\n        }\n\n        //=============================================================================\n        // Attribute Syncing Code\n        //=============================================================================\n\n        /**\n         * @param attr {String} the attribute to be mutated\n         * @param to {Element} the element that is going to be updated\n         * @param updateType {(\"update\"|\"remove\")}\n         * @param ctx the merge context\n         * @returns {boolean} true if the attribute should be ignored, false otherwise\n         */\n        function ignoreAttribute(attr, to, updateType, ctx) {\n            if(attr === 'value' && ctx.ignoreActiveValue && to === document.activeElement){\n                return true;\n            }\n            return ctx.callbacks.beforeAttributeUpdated(attr, to, updateType) === false;\n        }\n\n        /**\n         * syncs a given node with another node, copying over all attributes and\n         * inner element state from the 'from' node to the 'to' node\n         *\n         * @param {Element} from the element to copy attributes & state from\n         * @param {Element} to the element to copy attributes & state to\n         * @param ctx the merge context\n         */\n        function syncNodeFrom(from, to, ctx) {\n            let type = from.nodeType;\n\n            // if is an element type, sync the attributes from the\n            // new node into the new node\n            if (type === 1 /* element type */) {\n                const fromAttributes = from.attributes;\n                const toAttributes = to.attributes;\n                for (const fromAttribute of fromAttributes) {\n                    if (ignoreAttribute(fromAttribute.name, to, 'update', ctx)) {\n                        continue;\n                    }\n                    if (to.getAttribute(fromAttribute.name) !== fromAttribute.value) {\n                        to.setAttribute(fromAttribute.name, fromAttribute.value);\n                    }\n                }\n                // iterate backwards to avoid skipping over items when a delete occurs\n                for (let i = toAttributes.length - 1; 0 <= i; i--) {\n                    const toAttribute = toAttributes[i];\n                    if (ignoreAttribute(toAttribute.name, to, 'remove', ctx)) {\n                        continue;\n                    }\n                    if (!from.hasAttribute(toAttribute.name)) {\n                        to.removeAttribute(toAttribute.name);\n                    }\n                }\n            }\n\n            // sync text nodes\n            if (type === 8 /* comment */ || type === 3 /* text */) {\n                if (to.nodeValue !== from.nodeValue) {\n                    to.nodeValue = from.nodeValue;\n                }\n            }\n\n            if (!ignoreValueOfActiveElement(to, ctx)) {\n                // sync input values\n                syncInputValue(from, to, ctx);\n            }\n        }\n\n        /**\n         * @param from {Element} element to sync the value from\n         * @param to {Element} element to sync the value to\n         * @param attributeName {String} the attribute name\n         * @param ctx the merge context\n         */\n        function syncBooleanAttribute(from, to, attributeName, ctx) {\n            if (from[attributeName] !== to[attributeName]) {\n                let ignoreUpdate = ignoreAttribute(attributeName, to, 'update', ctx);\n                if (!ignoreUpdate) {\n                    to[attributeName] = from[attributeName];\n                }\n                if (from[attributeName]) {\n                    if (!ignoreUpdate) {\n                        to.setAttribute(attributeName, from[attributeName]);\n                    }\n                } else {\n                    if (!ignoreAttribute(attributeName, to, 'remove', ctx)) {\n                        to.removeAttribute(attributeName);\n                    }\n                }\n            }\n        }\n\n        /**\n         * NB: many bothans died to bring us information:\n         *\n         *  https://github.com/patrick-steele-idem/morphdom/blob/master/src/specialElHandlers.js\n         *  https://github.com/choojs/nanomorph/blob/master/lib/morph.jsL113\n         *\n         * @param from {Element} the element to sync the input value from\n         * @param to {Element} the element to sync the input value to\n         * @param ctx the merge context\n         */\n        function syncInputValue(from, to, ctx) {\n            if (from instanceof HTMLInputElement &&\n                to instanceof HTMLInputElement &&\n                from.type !== 'file') {\n\n                let fromValue = from.value;\n                let toValue = to.value;\n\n                // sync boolean attributes\n                syncBooleanAttribute(from, to, 'checked', ctx);\n                syncBooleanAttribute(from, to, 'disabled', ctx);\n\n                if (!from.hasAttribute('value')) {\n                    if (!ignoreAttribute('value', to, 'remove', ctx)) {\n                        to.value = '';\n                        to.removeAttribute('value');\n                    }\n                } else if (fromValue !== toValue) {\n                    if (!ignoreAttribute('value', to, 'update', ctx)) {\n                        to.setAttribute('value', fromValue);\n                        to.value = fromValue;\n                    }\n                }\n            } else if (from instanceof HTMLOptionElement) {\n                syncBooleanAttribute(from, to, 'selected', ctx);\n            } else if (from instanceof HTMLTextAreaElement && to instanceof HTMLTextAreaElement) {\n                let fromValue = from.value;\n                let toValue = to.value;\n                if (ignoreAttribute('value', to, 'update', ctx)) {\n                    return;\n                }\n                if (fromValue !== toValue) {\n                    to.value = fromValue;\n                }\n                if (to.firstChild && to.firstChild.nodeValue !== fromValue) {\n                    to.firstChild.nodeValue = fromValue;\n                }\n            }\n        }\n\n        //=============================================================================\n        // the HEAD tag can be handled specially, either w/ a 'merge' or 'append' style\n        //=============================================================================\n        function handleHeadElement(newHeadTag, currentHead, ctx) {\n\n            let added = [];\n            let removed = [];\n            let preserved = [];\n            let nodesToAppend = [];\n\n            let headMergeStyle = ctx.head.style;\n\n            // put all new head elements into a Map, by their outerHTML\n            let srcToNewHeadNodes = new Map();\n            for (const newHeadChild of newHeadTag.children) {\n                srcToNewHeadNodes.set(newHeadChild.outerHTML, newHeadChild);\n            }\n\n            // for each elt in the current head\n            for (const currentHeadElt of currentHead.children) {\n\n                // If the current head element is in the map\n                let inNewContent = srcToNewHeadNodes.has(currentHeadElt.outerHTML);\n                let isReAppended = ctx.head.shouldReAppend(currentHeadElt);\n                let isPreserved = ctx.head.shouldPreserve(currentHeadElt);\n                if (inNewContent || isPreserved) {\n                    if (isReAppended) {\n                        // remove the current version and let the new version replace it and re-execute\n                        removed.push(currentHeadElt);\n                    } else {\n                        // this element already exists and should not be re-appended, so remove it from\n                        // the new content map, preserving it in the DOM\n                        srcToNewHeadNodes.delete(currentHeadElt.outerHTML);\n                        preserved.push(currentHeadElt);\n                    }\n                } else {\n                    if (headMergeStyle === \"append\") {\n                        // we are appending and this existing element is not new content\n                        // so if and only if it is marked for re-append do we do anything\n                        if (isReAppended) {\n                            removed.push(currentHeadElt);\n                            nodesToAppend.push(currentHeadElt);\n                        }\n                    } else {\n                        // if this is a merge, we remove this content since it is not in the new head\n                        if (ctx.head.shouldRemove(currentHeadElt) !== false) {\n                            removed.push(currentHeadElt);\n                        }\n                    }\n                }\n            }\n\n            // Push the remaining new head elements in the Map into the\n            // nodes to append to the head tag\n            nodesToAppend.push(...srcToNewHeadNodes.values());\n\n            let promises = [];\n            for (const newNode of nodesToAppend) {\n                let newElt = document.createRange().createContextualFragment(newNode.outerHTML).firstChild;\n                if (ctx.callbacks.beforeNodeAdded(newElt) !== false) {\n                    if (newElt.href || newElt.src) {\n                        let resolve = null;\n                        let promise = new Promise(function (_resolve) {\n                            resolve = _resolve;\n                        });\n                        newElt.addEventListener('load', function () {\n                            resolve();\n                        });\n                        promises.push(promise);\n                    }\n                    currentHead.appendChild(newElt);\n                    ctx.callbacks.afterNodeAdded(newElt);\n                    added.push(newElt);\n                }\n            }\n\n            // remove all removed elements, after we have appended the new elements to avoid\n            // additional network requests for things like style sheets\n            for (const removedElement of removed) {\n                if (ctx.callbacks.beforeNodeRemoved(removedElement) !== false) {\n                    currentHead.removeChild(removedElement);\n                    ctx.callbacks.afterNodeRemoved(removedElement);\n                }\n            }\n\n            ctx.head.afterHeadMorphed(currentHead, {added: added, kept: preserved, removed: removed});\n            return promises;\n        }\n\n        function noOp() {\n        }\n\n        /*\n          Deep merges the config object and the Idiomoroph.defaults object to\n          produce a final configuration object\n         */\n        function mergeDefaults(config) {\n            let finalConfig = {};\n            // copy top level stuff into final config\n            Object.assign(finalConfig, defaults);\n            Object.assign(finalConfig, config);\n\n            // copy callbacks into final config (do this to deep merge the callbacks)\n            finalConfig.callbacks = {};\n            Object.assign(finalConfig.callbacks, defaults.callbacks);\n            Object.assign(finalConfig.callbacks, config.callbacks);\n\n            // copy head config into final config  (do this to deep merge the head)\n            finalConfig.head = {};\n            Object.assign(finalConfig.head, defaults.head);\n            Object.assign(finalConfig.head, config.head);\n            return finalConfig;\n        }\n\n        function createMorphContext(oldNode, newContent, config) {\n            config = mergeDefaults(config);\n            return {\n                target: oldNode,\n                newContent: newContent,\n                config: config,\n                morphStyle: config.morphStyle,\n                ignoreActive: config.ignoreActive,\n                ignoreActiveValue: config.ignoreActiveValue,\n                idMap: createIdMap(oldNode, newContent),\n                deadIds: new Set(),\n                callbacks: config.callbacks,\n                head: config.head\n            }\n        }\n\n        function isIdSetMatch(node1, node2, ctx) {\n            if (node1 == null || node2 == null) {\n                return false;\n            }\n            if (node1.nodeType === node2.nodeType && node1.tagName === node2.tagName) {\n                if (node1.id !== \"\" && node1.id === node2.id) {\n                    return true;\n                } else {\n                    return getIdIntersectionCount(ctx, node1, node2) > 0;\n                }\n            }\n            return false;\n        }\n\n        function isSoftMatch(node1, node2) {\n            if (node1 == null || node2 == null) {\n                return false;\n            }\n            return node1.nodeType === node2.nodeType && node1.tagName === node2.tagName\n        }\n\n        function removeNodesBetween(startInclusive, endExclusive, ctx) {\n            while (startInclusive !== endExclusive) {\n                let tempNode = startInclusive;\n                startInclusive = startInclusive.nextSibling;\n                removeNode(tempNode, ctx);\n            }\n            removeIdsFromConsideration(ctx, endExclusive);\n            return endExclusive.nextSibling;\n        }\n\n        //=============================================================================\n        // Scans forward from the insertionPoint in the old parent looking for a potential id match\n        // for the newChild.  We stop if we find a potential id match for the new child OR\n        // if the number of potential id matches we are discarding is greater than the\n        // potential id matches for the new child\n        //=============================================================================\n        function findIdSetMatch(newContent, oldParent, newChild, insertionPoint, ctx) {\n\n            // max id matches we are willing to discard in our search\n            let newChildPotentialIdCount = getIdIntersectionCount(ctx, newChild, oldParent);\n\n            let potentialMatch = null;\n\n            // only search forward if there is a possibility of an id match\n            if (newChildPotentialIdCount > 0) {\n                let potentialMatch = insertionPoint;\n                // if there is a possibility of an id match, scan forward\n                // keep track of the potential id match count we are discarding (the\n                // newChildPotentialIdCount must be greater than this to make it likely\n                // worth it)\n                let otherMatchCount = 0;\n                while (potentialMatch != null) {\n\n                    // If we have an id match, return the current potential match\n                    if (isIdSetMatch(newChild, potentialMatch, ctx)) {\n                        return potentialMatch;\n                    }\n\n                    // computer the other potential matches of this new content\n                    otherMatchCount += getIdIntersectionCount(ctx, potentialMatch, newContent);\n                    if (otherMatchCount > newChildPotentialIdCount) {\n                        // if we have more potential id matches in _other_ content, we\n                        // do not have a good candidate for an id match, so return null\n                        return null;\n                    }\n\n                    // advanced to the next old content child\n                    potentialMatch = potentialMatch.nextSibling;\n                }\n            }\n            return potentialMatch;\n        }\n\n        //=============================================================================\n        // Scans forward from the insertionPoint in the old parent looking for a potential soft match\n        // for the newChild.  We stop if we find a potential soft match for the new child OR\n        // if we find a potential id match in the old parents children OR if we find two\n        // potential soft matches for the next two pieces of new content\n        //=============================================================================\n        function findSoftMatch(newContent, oldParent, newChild, insertionPoint, ctx) {\n\n            let potentialSoftMatch = insertionPoint;\n            let nextSibling = newChild.nextSibling;\n            let siblingSoftMatchCount = 0;\n\n            while (potentialSoftMatch != null) {\n\n                if (getIdIntersectionCount(ctx, potentialSoftMatch, newContent) > 0) {\n                    // the current potential soft match has a potential id set match with the remaining new\n                    // content so bail out of looking\n                    return null;\n                }\n\n                // if we have a soft match with the current node, return it\n                if (isSoftMatch(newChild, potentialSoftMatch)) {\n                    return potentialSoftMatch;\n                }\n\n                if (isSoftMatch(nextSibling, potentialSoftMatch)) {\n                    // the next new node has a soft match with this node, so\n                    // increment the count of future soft matches\n                    siblingSoftMatchCount++;\n                    nextSibling = nextSibling.nextSibling;\n\n                    // If there are two future soft matches, bail to allow the siblings to soft match\n                    // so that we don't consume future soft matches for the sake of the current node\n                    if (siblingSoftMatchCount >= 2) {\n                        return null;\n                    }\n                }\n\n                // advanced to the next old content child\n                potentialSoftMatch = potentialSoftMatch.nextSibling;\n            }\n\n            return potentialSoftMatch;\n        }\n\n        function parseContent(newContent) {\n            let parser = new DOMParser();\n\n            // remove svgs to avoid false-positive matches on head, etc.\n            let contentWithSvgsRemoved = newContent.replace(/<svg(\\s[^>]*>|>)([\\s\\S]*?)<\\/svg>/gim, '');\n\n            // if the newContent contains a html, head or body tag, we can simply parse it w/o wrapping\n            if (contentWithSvgsRemoved.match(/<\\/html>/) || contentWithSvgsRemoved.match(/<\\/head>/) || contentWithSvgsRemoved.match(/<\\/body>/)) {\n                let content = parser.parseFromString(newContent, \"text/html\");\n                // if it is a full HTML document, return the document itself as the parent container\n                if (contentWithSvgsRemoved.match(/<\\/html>/)) {\n                    content.generatedByIdiomorph = true;\n                    return content;\n                } else {\n                    // otherwise return the html element as the parent container\n                    let htmlElement = content.firstChild;\n                    if (htmlElement) {\n                        htmlElement.generatedByIdiomorph = true;\n                        return htmlElement;\n                    } else {\n                        return null;\n                    }\n                }\n            } else {\n                // if it is partial HTML, wrap it in a template tag to provide a parent element and also to help\n                // deal with touchy tags like tr, tbody, etc.\n                let responseDoc = parser.parseFromString(\"<body><template>\" + newContent + \"</template></body>\", \"text/html\");\n                let content = responseDoc.body.querySelector('template').content;\n                content.generatedByIdiomorph = true;\n                return content\n            }\n        }\n\n        function normalizeContent(newContent) {\n            if (newContent == null) {\n                // noinspection UnnecessaryLocalVariableJS\n                const dummyParent = document.createElement('div');\n                return dummyParent;\n            } else if (newContent.generatedByIdiomorph) {\n                // the template tag created by idiomorph parsing can serve as a dummy parent\n                return newContent;\n            } else if (newContent instanceof Node) {\n                // a single node is added as a child to a dummy parent\n                const dummyParent = document.createElement('div');\n                dummyParent.append(newContent);\n                return dummyParent;\n            } else {\n                // all nodes in the array or HTMLElement collection are consolidated under\n                // a single dummy parent element\n                const dummyParent = document.createElement('div');\n                for (const elt of [...newContent]) {\n                    dummyParent.append(elt);\n                }\n                return dummyParent;\n            }\n        }\n\n        function insertSiblings(previousSibling, morphedNode, nextSibling) {\n            let stack = [];\n            let added = [];\n            while (previousSibling != null) {\n                stack.push(previousSibling);\n                previousSibling = previousSibling.previousSibling;\n            }\n            while (stack.length > 0) {\n                let node = stack.pop();\n                added.push(node); // push added preceding siblings on in order and insert\n                morphedNode.parentElement.insertBefore(node, morphedNode);\n            }\n            added.push(morphedNode);\n            while (nextSibling != null) {\n                stack.push(nextSibling);\n                added.push(nextSibling); // here we are going in order, so push on as we scan, rather than add\n                nextSibling = nextSibling.nextSibling;\n            }\n            while (stack.length > 0) {\n                morphedNode.parentElement.insertBefore(stack.pop(), morphedNode.nextSibling);\n            }\n            return added;\n        }\n\n        function findBestNodeMatch(newContent, oldNode, ctx) {\n            let currentElement;\n            currentElement = newContent.firstChild;\n            let bestElement = currentElement;\n            let score = 0;\n            while (currentElement) {\n                let newScore = scoreElement(currentElement, oldNode, ctx);\n                if (newScore > score) {\n                    bestElement = currentElement;\n                    score = newScore;\n                }\n                currentElement = currentElement.nextSibling;\n            }\n            return bestElement;\n        }\n\n        function scoreElement(node1, node2, ctx) {\n            if (isSoftMatch(node1, node2)) {\n                return .5 + getIdIntersectionCount(ctx, node1, node2);\n            }\n            return 0;\n        }\n\n        function removeNode(tempNode, ctx) {\n            removeIdsFromConsideration(ctx, tempNode);\n            if (ctx.callbacks.beforeNodeRemoved(tempNode) === false) return;\n\n            tempNode.remove();\n            ctx.callbacks.afterNodeRemoved(tempNode);\n        }\n\n        //=============================================================================\n        // ID Set Functions\n        //=============================================================================\n\n        function isIdInConsideration(ctx, id) {\n            return !ctx.deadIds.has(id);\n        }\n\n        function idIsWithinNode(ctx, id, targetNode) {\n            let idSet = ctx.idMap.get(targetNode) || EMPTY_SET;\n            return idSet.has(id);\n        }\n\n        function removeIdsFromConsideration(ctx, node) {\n            let idSet = ctx.idMap.get(node) || EMPTY_SET;\n            for (const id of idSet) {\n                ctx.deadIds.add(id);\n            }\n        }\n\n        function getIdIntersectionCount(ctx, node1, node2) {\n            let sourceSet = ctx.idMap.get(node1) || EMPTY_SET;\n            let matchCount = 0;\n            for (const id of sourceSet) {\n                // a potential match is an id in the source and potentialIdsSet, but\n                // that has not already been merged into the DOM\n                if (isIdInConsideration(ctx, id) && idIsWithinNode(ctx, id, node2)) {\n                    ++matchCount;\n                }\n            }\n            return matchCount;\n        }\n\n        /**\n         * A bottom up algorithm that finds all elements with ids inside of the node\n         * argument and populates id sets for those nodes and all their parents, generating\n         * a set of ids contained within all nodes for the entire hierarchy in the DOM\n         *\n         * @param node {Element}\n         * @param {Map<Node, Set<String>>} idMap\n         */\n        function populateIdMapForNode(node, idMap) {\n            let nodeParent = node.parentElement;\n            // find all elements with an id property\n            let idElements = node.querySelectorAll('[id]');\n            for (const elt of idElements) {\n                let current = elt;\n                // walk up the parent hierarchy of that element, adding the id\n                // of element to the parent's id set\n                while (current !== nodeParent && current != null) {\n                    let idSet = idMap.get(current);\n                    // if the id set doesn't exist, create it and insert it in the  map\n                    if (idSet == null) {\n                        idSet = new Set();\n                        idMap.set(current, idSet);\n                    }\n                    idSet.add(elt.id);\n                    current = current.parentElement;\n                }\n            }\n        }\n\n        /**\n         * This function computes a map of nodes to all ids contained within that node (inclusive of the\n         * node).  This map can be used to ask if two nodes have intersecting sets of ids, which allows\n         * for a looser definition of \"matching\" than tradition id matching, and allows child nodes\n         * to contribute to a parent nodes matching.\n         *\n         * @param {Element} oldContent  the old content that will be morphed\n         * @param {Element} newContent  the new content to morph to\n         * @returns {Map<Node, Set<String>>} a map of nodes to id sets for the\n         */\n        function createIdMap(oldContent, newContent) {\n            let idMap = new Map();\n            populateIdMapForNode(oldContent, idMap);\n            populateIdMapForNode(newContent, idMap);\n            return idMap;\n        }\n\n        //=============================================================================\n        // This is what ends up becoming the Idiomorph global object\n        //=============================================================================\n        return {\n            morph,\n            defaults\n        }\n    })();\n\nclass PageRenderer extends Renderer {\n  static renderElement(currentElement, newElement) {\n    if (document.body && newElement instanceof HTMLBodyElement) {\n      document.body.replaceWith(newElement);\n    } else {\n      document.documentElement.appendChild(newElement);\n    }\n  }\n\n  get shouldRender() {\n    return this.newSnapshot.isVisitable && this.trackedElementsAreIdentical\n  }\n\n  get reloadReason() {\n    if (!this.newSnapshot.isVisitable) {\n      return {\n        reason: \"turbo_visit_control_is_reload\"\n      }\n    }\n\n    if (!this.trackedElementsAreIdentical) {\n      return {\n        reason: \"tracked_element_mismatch\"\n      }\n    }\n  }\n\n  async prepareToRender() {\n    this.#setLanguage();\n    await this.mergeHead();\n  }\n\n  async render() {\n    if (this.willRender) {\n      await this.replaceBody();\n    }\n  }\n\n  finishRendering() {\n    super.finishRendering();\n    if (!this.isPreview) {\n      this.focusFirstAutofocusableElement();\n    }\n  }\n\n  get currentHeadSnapshot() {\n    return this.currentSnapshot.headSnapshot\n  }\n\n  get newHeadSnapshot() {\n    return this.newSnapshot.headSnapshot\n  }\n\n  get newElement() {\n    return this.newSnapshot.element\n  }\n\n  #setLanguage() {\n    const { documentElement } = this.currentSnapshot;\n    const { lang } = this.newSnapshot;\n\n    if (lang) {\n      documentElement.setAttribute(\"lang\", lang);\n    } else {\n      documentElement.removeAttribute(\"lang\");\n    }\n  }\n\n  async mergeHead() {\n    const mergedHeadElements = this.mergeProvisionalElements();\n    const newStylesheetElements = this.copyNewHeadStylesheetElements();\n    this.copyNewHeadScriptElements();\n\n    await mergedHeadElements;\n    await newStylesheetElements;\n\n    if (this.willRender) {\n      this.removeUnusedDynamicStylesheetElements();\n    }\n  }\n\n  async replaceBody() {\n    await this.preservingPermanentElements(async () => {\n      this.activateNewBody();\n      await this.assignNewBody();\n    });\n  }\n\n  get trackedElementsAreIdentical() {\n    return this.currentHeadSnapshot.trackedElementSignature == this.newHeadSnapshot.trackedElementSignature\n  }\n\n  async copyNewHeadStylesheetElements() {\n    const loadingElements = [];\n\n    for (const element of this.newHeadStylesheetElements) {\n      loadingElements.push(waitForLoad(element));\n\n      document.head.appendChild(element);\n    }\n\n    await Promise.all(loadingElements);\n  }\n\n  copyNewHeadScriptElements() {\n    for (const element of this.newHeadScriptElements) {\n      document.head.appendChild(activateScriptElement(element));\n    }\n  }\n\n  removeUnusedDynamicStylesheetElements() {\n    for (const element of this.unusedDynamicStylesheetElements) {\n      document.head.removeChild(element);\n    }\n  }\n\n  async mergeProvisionalElements() {\n    const newHeadElements = [...this.newHeadProvisionalElements];\n\n    for (const element of this.currentHeadProvisionalElements) {\n      if (!this.isCurrentElementInElementList(element, newHeadElements)) {\n        document.head.removeChild(element);\n      }\n    }\n\n    for (const element of newHeadElements) {\n      document.head.appendChild(element);\n    }\n  }\n\n  isCurrentElementInElementList(element, elementList) {\n    for (const [index, newElement] of elementList.entries()) {\n      // if title element...\n      if (element.tagName == \"TITLE\") {\n        if (newElement.tagName != \"TITLE\") {\n          continue\n        }\n        if (element.innerHTML == newElement.innerHTML) {\n          elementList.splice(index, 1);\n          return true\n        }\n      }\n\n      // if any other element...\n      if (newElement.isEqualNode(element)) {\n        elementList.splice(index, 1);\n        return true\n      }\n    }\n\n    return false\n  }\n\n  removeCurrentHeadProvisionalElements() {\n    for (const element of this.currentHeadProvisionalElements) {\n      document.head.removeChild(element);\n    }\n  }\n\n  copyNewHeadProvisionalElements() {\n    for (const element of this.newHeadProvisionalElements) {\n      document.head.appendChild(element);\n    }\n  }\n\n  activateNewBody() {\n    document.adoptNode(this.newElement);\n    this.activateNewBodyScriptElements();\n  }\n\n  activateNewBodyScriptElements() {\n    for (const inertScriptElement of this.newBodyScriptElements) {\n      const activatedScriptElement = activateScriptElement(inertScriptElement);\n      inertScriptElement.replaceWith(activatedScriptElement);\n    }\n  }\n\n  async assignNewBody() {\n    await this.renderElement(this.currentElement, this.newElement);\n  }\n\n  get unusedDynamicStylesheetElements() {\n    return this.oldHeadStylesheetElements.filter((element) => {\n      return element.getAttribute(\"data-turbo-track\") === \"dynamic\"\n    })\n  }\n\n  get oldHeadStylesheetElements() {\n    return this.currentHeadSnapshot.getStylesheetElementsNotInSnapshot(this.newHeadSnapshot)\n  }\n\n  get newHeadStylesheetElements() {\n    return this.newHeadSnapshot.getStylesheetElementsNotInSnapshot(this.currentHeadSnapshot)\n  }\n\n  get newHeadScriptElements() {\n    return this.newHeadSnapshot.getScriptElementsNotInSnapshot(this.currentHeadSnapshot)\n  }\n\n  get currentHeadProvisionalElements() {\n    return this.currentHeadSnapshot.provisionalElements\n  }\n\n  get newHeadProvisionalElements() {\n    return this.newHeadSnapshot.provisionalElements\n  }\n\n  get newBodyScriptElements() {\n    return this.newElement.querySelectorAll(\"script\")\n  }\n}\n\nclass MorphRenderer extends PageRenderer {\n  async render() {\n    if (this.willRender) await this.#morphBody();\n  }\n\n  get renderMethod() {\n    return \"morph\"\n  }\n\n  // Private\n\n  async #morphBody() {\n    this.#morphElements(this.currentElement, this.newElement);\n    this.#reloadRemoteFrames();\n\n    dispatch(\"turbo:morph\", {\n      detail: {\n        currentElement: this.currentElement,\n        newElement: this.newElement\n      }\n    });\n  }\n\n  #morphElements(currentElement, newElement, morphStyle = \"outerHTML\") {\n    this.isMorphingTurboFrame = this.#isFrameReloadedWithMorph(currentElement);\n\n    Idiomorph.morph(currentElement, newElement, {\n      morphStyle: morphStyle,\n      callbacks: {\n        beforeNodeAdded: this.#shouldAddElement,\n        beforeNodeMorphed: this.#shouldMorphElement,\n        beforeAttributeUpdated: this.#shouldUpdateAttribute,\n        beforeNodeRemoved: this.#shouldRemoveElement,\n        afterNodeMorphed: this.#didMorphElement\n      }\n    });\n  }\n\n  #shouldAddElement = (node) => {\n    return !(node.id && node.hasAttribute(\"data-turbo-permanent\") && document.getElementById(node.id))\n  }\n\n  #shouldMorphElement = (oldNode, newNode) => {\n    if (oldNode instanceof HTMLElement) {\n      if (!oldNode.hasAttribute(\"data-turbo-permanent\") && (this.isMorphingTurboFrame || !this.#isFrameReloadedWithMorph(oldNode))) {\n        const event = dispatch(\"turbo:before-morph-element\", {\n          cancelable: true,\n          target: oldNode,\n          detail: {\n            newElement: newNode\n          }\n        });\n\n        return !event.defaultPrevented\n      } else {\n        return false\n      }\n    }\n  }\n\n  #shouldUpdateAttribute = (attributeName, target, mutationType) => {\n    const event = dispatch(\"turbo:before-morph-attribute\", { cancelable: true, target, detail: { attributeName, mutationType } });\n\n    return !event.defaultPrevented\n  }\n\n  #didMorphElement = (oldNode, newNode) => {\n    if (newNode instanceof HTMLElement) {\n      dispatch(\"turbo:morph-element\", {\n        target: oldNode,\n        detail: {\n          newElement: newNode\n        }\n      });\n    }\n  }\n\n  #shouldRemoveElement = (node) => {\n    return this.#shouldMorphElement(node)\n  }\n\n  #reloadRemoteFrames() {\n    this.#remoteFrames().forEach((frame) => {\n      if (this.#isFrameReloadedWithMorph(frame)) {\n        this.#renderFrameWithMorph(frame);\n        frame.reload();\n      }\n    });\n  }\n\n  #renderFrameWithMorph(frame) {\n    frame.addEventListener(\"turbo:before-frame-render\", (event) => {\n      event.detail.render = this.#morphFrameUpdate;\n    }, { once: true });\n  }\n\n  #morphFrameUpdate = (currentElement, newElement) => {\n    dispatch(\"turbo:before-frame-morph\", {\n      target: currentElement,\n      detail: { currentElement, newElement }\n    });\n    this.#morphElements(currentElement, newElement.children, \"innerHTML\");\n  }\n\n  #isFrameReloadedWithMorph(element) {\n    return element.src && element.refresh === \"morph\"\n  }\n\n  #remoteFrames() {\n    return Array.from(document.querySelectorAll('turbo-frame[src]')).filter(frame => {\n      return !frame.closest('[data-turbo-permanent]')\n    })\n  }\n}\n\nclass SnapshotCache {\n  keys = []\n  snapshots = {}\n\n  constructor(size) {\n    this.size = size;\n  }\n\n  has(location) {\n    return toCacheKey(location) in this.snapshots\n  }\n\n  get(location) {\n    if (this.has(location)) {\n      const snapshot = this.read(location);\n      this.touch(location);\n      return snapshot\n    }\n  }\n\n  put(location, snapshot) {\n    this.write(location, snapshot);\n    this.touch(location);\n    return snapshot\n  }\n\n  clear() {\n    this.snapshots = {};\n  }\n\n  // Private\n\n  read(location) {\n    return this.snapshots[toCacheKey(location)]\n  }\n\n  write(location, snapshot) {\n    this.snapshots[toCacheKey(location)] = snapshot;\n  }\n\n  touch(location) {\n    const key = toCacheKey(location);\n    const index = this.keys.indexOf(key);\n    if (index > -1) this.keys.splice(index, 1);\n    this.keys.unshift(key);\n    this.trim();\n  }\n\n  trim() {\n    for (const key of this.keys.splice(this.size)) {\n      delete this.snapshots[key];\n    }\n  }\n}\n\nclass PageView extends View {\n  snapshotCache = new SnapshotCache(10)\n  lastRenderedLocation = new URL(location.href)\n  forceReloaded = false\n\n  shouldTransitionTo(newSnapshot) {\n    return this.snapshot.prefersViewTransitions && newSnapshot.prefersViewTransitions\n  }\n\n  renderPage(snapshot, isPreview = false, willRender = true, visit) {\n    const shouldMorphPage = this.isPageRefresh(visit) && this.snapshot.shouldMorphPage;\n    const rendererClass = shouldMorphPage ? MorphRenderer : PageRenderer;\n\n    const renderer = new rendererClass(this.snapshot, snapshot, PageRenderer.renderElement, isPreview, willRender);\n\n    if (!renderer.shouldRender) {\n      this.forceReloaded = true;\n    } else {\n      visit?.changeHistory();\n    }\n\n    return this.render(renderer)\n  }\n\n  renderError(snapshot, visit) {\n    visit?.changeHistory();\n    const renderer = new ErrorRenderer(this.snapshot, snapshot, ErrorRenderer.renderElement, false);\n    return this.render(renderer)\n  }\n\n  clearSnapshotCache() {\n    this.snapshotCache.clear();\n  }\n\n  async cacheSnapshot(snapshot = this.snapshot) {\n    if (snapshot.isCacheable) {\n      this.delegate.viewWillCacheSnapshot();\n      const { lastRenderedLocation: location } = this;\n      await nextEventLoopTick();\n      const cachedSnapshot = snapshot.clone();\n      this.snapshotCache.put(location, cachedSnapshot);\n      return cachedSnapshot\n    }\n  }\n\n  getCachedSnapshotForLocation(location) {\n    return this.snapshotCache.get(location)\n  }\n\n  isPageRefresh(visit) {\n    return !visit || (this.lastRenderedLocation.pathname === visit.location.pathname && visit.action === \"replace\")\n  }\n\n  shouldPreserveScrollPosition(visit) {\n    return this.isPageRefresh(visit) && this.snapshot.shouldPreserveScrollPosition\n  }\n\n  get snapshot() {\n    return PageSnapshot.fromElement(this.element)\n  }\n}\n\nclass Preloader {\n  selector = \"a[data-turbo-preload]\"\n\n  constructor(delegate, snapshotCache) {\n    this.delegate = delegate;\n    this.snapshotCache = snapshotCache;\n  }\n\n  start() {\n    if (document.readyState === \"loading\") {\n      document.addEventListener(\"DOMContentLoaded\", this.#preloadAll);\n    } else {\n      this.preloadOnLoadLinksForView(document.body);\n    }\n  }\n\n  stop() {\n    document.removeEventListener(\"DOMContentLoaded\", this.#preloadAll);\n  }\n\n  preloadOnLoadLinksForView(element) {\n    for (const link of element.querySelectorAll(this.selector)) {\n      if (this.delegate.shouldPreloadLink(link)) {\n        this.preloadURL(link);\n      }\n    }\n  }\n\n  async preloadURL(link) {\n    const location = new URL(link.href);\n\n    if (this.snapshotCache.has(location)) {\n      return\n    }\n\n    const fetchRequest = new FetchRequest(this, FetchMethod.get, location, new URLSearchParams(), link);\n    await fetchRequest.perform();\n  }\n\n  // Fetch request delegate\n\n  prepareRequest(fetchRequest) {\n    fetchRequest.headers[\"X-Sec-Purpose\"] = \"prefetch\";\n  }\n\n  async requestSucceededWithResponse(fetchRequest, fetchResponse) {\n    try {\n      const responseHTML = await fetchResponse.responseHTML;\n      const snapshot = PageSnapshot.fromHTMLString(responseHTML);\n\n      this.snapshotCache.put(fetchRequest.url, snapshot);\n    } catch (_) {\n      // If we cannot preload that is ok!\n    }\n  }\n\n  requestStarted(fetchRequest) {}\n\n  requestErrored(fetchRequest) {}\n\n  requestFinished(fetchRequest) {}\n\n  requestPreventedHandlingResponse(fetchRequest, fetchResponse) {}\n\n  requestFailedWithResponse(fetchRequest, fetchResponse) {}\n\n  #preloadAll = () => {\n    this.preloadOnLoadLinksForView(document.body);\n  }\n}\n\nclass Cache {\n  constructor(session) {\n    this.session = session;\n  }\n\n  clear() {\n    this.session.clearCache();\n  }\n\n  resetCacheControl() {\n    this.#setCacheControl(\"\");\n  }\n\n  exemptPageFromCache() {\n    this.#setCacheControl(\"no-cache\");\n  }\n\n  exemptPageFromPreview() {\n    this.#setCacheControl(\"no-preview\");\n  }\n\n  #setCacheControl(value) {\n    setMetaContent(\"turbo-cache-control\", value);\n  }\n}\n\nclass Session {\n  navigator = new Navigator(this)\n  history = new History(this)\n  view = new PageView(this, document.documentElement)\n  adapter = new BrowserAdapter(this)\n\n  pageObserver = new PageObserver(this)\n  cacheObserver = new CacheObserver()\n  linkPrefetchObserver = new LinkPrefetchObserver(this, document)\n  linkClickObserver = new LinkClickObserver(this, window)\n  formSubmitObserver = new FormSubmitObserver(this, document)\n  scrollObserver = new ScrollObserver(this)\n  streamObserver = new StreamObserver(this)\n  formLinkClickObserver = new FormLinkClickObserver(this, document.documentElement)\n  frameRedirector = new FrameRedirector(this, document.documentElement)\n  streamMessageRenderer = new StreamMessageRenderer()\n  cache = new Cache(this)\n\n  drive = true\n  enabled = true\n  progressBarDelay = 500\n  started = false\n  formMode = \"on\"\n  #pageRefreshDebouncePeriod = 150\n\n  constructor(recentRequests) {\n    this.recentRequests = recentRequests;\n    this.preloader = new Preloader(this, this.view.snapshotCache);\n    this.debouncedRefresh = this.refresh;\n    this.pageRefreshDebouncePeriod = this.pageRefreshDebouncePeriod;\n  }\n\n  start() {\n    if (!this.started) {\n      this.pageObserver.start();\n      this.cacheObserver.start();\n      this.linkPrefetchObserver.start();\n      this.formLinkClickObserver.start();\n      this.linkClickObserver.start();\n      this.formSubmitObserver.start();\n      this.scrollObserver.start();\n      this.streamObserver.start();\n      this.frameRedirector.start();\n      this.history.start();\n      this.preloader.start();\n      this.started = true;\n      this.enabled = true;\n    }\n  }\n\n  disable() {\n    this.enabled = false;\n  }\n\n  stop() {\n    if (this.started) {\n      this.pageObserver.stop();\n      this.cacheObserver.stop();\n      this.linkPrefetchObserver.stop();\n      this.formLinkClickObserver.stop();\n      this.linkClickObserver.stop();\n      this.formSubmitObserver.stop();\n      this.scrollObserver.stop();\n      this.streamObserver.stop();\n      this.frameRedirector.stop();\n      this.history.stop();\n      this.preloader.stop();\n      this.started = false;\n    }\n  }\n\n  registerAdapter(adapter) {\n    this.adapter = adapter;\n  }\n\n  visit(location, options = {}) {\n    const frameElement = options.frame ? document.getElementById(options.frame) : null;\n\n    if (frameElement instanceof FrameElement) {\n      const action = options.action || getVisitAction(frameElement);\n\n      frameElement.delegate.proposeVisitIfNavigatedWithAction(frameElement, action);\n      frameElement.src = location.toString();\n    } else {\n      this.navigator.proposeVisit(expandURL(location), options);\n    }\n  }\n\n  refresh(url, requestId) {\n    const isRecentRequest = requestId && this.recentRequests.has(requestId);\n    if (!isRecentRequest) {\n      this.visit(url, { action: \"replace\", shouldCacheSnapshot: false });\n    }\n  }\n\n  connectStreamSource(source) {\n    this.streamObserver.connectStreamSource(source);\n  }\n\n  disconnectStreamSource(source) {\n    this.streamObserver.disconnectStreamSource(source);\n  }\n\n  renderStreamMessage(message) {\n    this.streamMessageRenderer.render(StreamMessage.wrap(message));\n  }\n\n  clearCache() {\n    this.view.clearSnapshotCache();\n  }\n\n  setProgressBarDelay(delay) {\n    this.progressBarDelay = delay;\n  }\n\n  setFormMode(mode) {\n    this.formMode = mode;\n  }\n\n  get location() {\n    return this.history.location\n  }\n\n  get restorationIdentifier() {\n    return this.history.restorationIdentifier\n  }\n\n  get pageRefreshDebouncePeriod() {\n    return this.#pageRefreshDebouncePeriod\n  }\n\n  set pageRefreshDebouncePeriod(value) {\n    this.refresh = debounce(this.debouncedRefresh.bind(this), value);\n    this.#pageRefreshDebouncePeriod = value;\n  }\n\n  // Preloader delegate\n\n  shouldPreloadLink(element) {\n    const isUnsafe = element.hasAttribute(\"data-turbo-method\");\n    const isStream = element.hasAttribute(\"data-turbo-stream\");\n    const frameTarget = element.getAttribute(\"data-turbo-frame\");\n    const frame = frameTarget == \"_top\" ?\n      null :\n      document.getElementById(frameTarget) || findClosestRecursively(element, \"turbo-frame:not([disabled])\");\n\n    if (isUnsafe || isStream || frame instanceof FrameElement) {\n      return false\n    } else {\n      const location = new URL(element.href);\n\n      return this.elementIsNavigatable(element) && locationIsVisitable(location, this.snapshot.rootLocation)\n    }\n  }\n\n  // History delegate\n\n  historyPoppedToLocationWithRestorationIdentifierAndDirection(location, restorationIdentifier, direction) {\n    if (this.enabled) {\n      this.navigator.startVisit(location, restorationIdentifier, {\n        action: \"restore\",\n        historyChanged: true,\n        direction\n      });\n    } else {\n      this.adapter.pageInvalidated({\n        reason: \"turbo_disabled\"\n      });\n    }\n  }\n\n  // Scroll observer delegate\n\n  scrollPositionChanged(position) {\n    this.history.updateRestorationData({ scrollPosition: position });\n  }\n\n  // Form click observer delegate\n\n  willSubmitFormLinkToLocation(link, location) {\n    return this.elementIsNavigatable(link) && locationIsVisitable(location, this.snapshot.rootLocation)\n  }\n\n  submittedFormLinkToLocation() {}\n\n  // Link hover observer delegate\n\n  canPrefetchRequestToLocation(link, location) {\n    return (\n      this.elementIsNavigatable(link) &&\n        locationIsVisitable(location, this.snapshot.rootLocation)\n    )\n  }\n\n  // Link click observer delegate\n\n  willFollowLinkToLocation(link, location, event) {\n    return (\n      this.elementIsNavigatable(link) &&\n      locationIsVisitable(location, this.snapshot.rootLocation) &&\n      this.applicationAllowsFollowingLinkToLocation(link, location, event)\n    )\n  }\n\n  followedLinkToLocation(link, location) {\n    const action = this.getActionForLink(link);\n    const acceptsStreamResponse = link.hasAttribute(\"data-turbo-stream\");\n\n    this.visit(location.href, { action, acceptsStreamResponse });\n  }\n\n  // Navigator delegate\n\n  allowsVisitingLocationWithAction(location, action) {\n    return this.locationWithActionIsSamePage(location, action) || this.applicationAllowsVisitingLocation(location)\n  }\n\n  visitProposedToLocation(location, options) {\n    extendURLWithDeprecatedProperties(location);\n    this.adapter.visitProposedToLocation(location, options);\n  }\n\n  // Visit delegate\n\n  visitStarted(visit) {\n    if (!visit.acceptsStreamResponse) {\n      markAsBusy(document.documentElement);\n      this.view.markVisitDirection(visit.direction);\n    }\n    extendURLWithDeprecatedProperties(visit.location);\n    if (!visit.silent) {\n      this.notifyApplicationAfterVisitingLocation(visit.location, visit.action);\n    }\n  }\n\n  visitCompleted(visit) {\n    this.view.unmarkVisitDirection();\n    clearBusyState(document.documentElement);\n    this.notifyApplicationAfterPageLoad(visit.getTimingMetrics());\n  }\n\n  locationWithActionIsSamePage(location, action) {\n    return this.navigator.locationWithActionIsSamePage(location, action)\n  }\n\n  visitScrolledToSamePageLocation(oldURL, newURL) {\n    this.notifyApplicationAfterVisitingSamePageLocation(oldURL, newURL);\n  }\n\n  // Form submit observer delegate\n\n  willSubmitForm(form, submitter) {\n    const action = getAction$1(form, submitter);\n\n    return (\n      this.submissionIsNavigatable(form, submitter) &&\n      locationIsVisitable(expandURL(action), this.snapshot.rootLocation)\n    )\n  }\n\n  formSubmitted(form, submitter) {\n    this.navigator.submitForm(form, submitter);\n  }\n\n  // Page observer delegate\n\n  pageBecameInteractive() {\n    this.view.lastRenderedLocation = this.location;\n    this.notifyApplicationAfterPageLoad();\n  }\n\n  pageLoaded() {\n    this.history.assumeControlOfScrollRestoration();\n  }\n\n  pageWillUnload() {\n    this.history.relinquishControlOfScrollRestoration();\n  }\n\n  // Stream observer delegate\n\n  receivedMessageFromStream(message) {\n    this.renderStreamMessage(message);\n  }\n\n  // Page view delegate\n\n  viewWillCacheSnapshot() {\n    if (!this.navigator.currentVisit?.silent) {\n      this.notifyApplicationBeforeCachingSnapshot();\n    }\n  }\n\n  allowsImmediateRender({ element }, options) {\n    const event = this.notifyApplicationBeforeRender(element, options);\n    const {\n      defaultPrevented,\n      detail: { render }\n    } = event;\n\n    if (this.view.renderer && render) {\n      this.view.renderer.renderElement = render;\n    }\n\n    return !defaultPrevented\n  }\n\n  viewRenderedSnapshot(_snapshot, _isPreview, renderMethod) {\n    this.view.lastRenderedLocation = this.history.location;\n    this.notifyApplicationAfterRender(renderMethod);\n  }\n\n  preloadOnLoadLinksForView(element) {\n    this.preloader.preloadOnLoadLinksForView(element);\n  }\n\n  viewInvalidated(reason) {\n    this.adapter.pageInvalidated(reason);\n  }\n\n  // Frame element\n\n  frameLoaded(frame) {\n    this.notifyApplicationAfterFrameLoad(frame);\n  }\n\n  frameRendered(fetchResponse, frame) {\n    this.notifyApplicationAfterFrameRender(fetchResponse, frame);\n  }\n\n  // Application events\n\n  applicationAllowsFollowingLinkToLocation(link, location, ev) {\n    const event = this.notifyApplicationAfterClickingLinkToLocation(link, location, ev);\n    return !event.defaultPrevented\n  }\n\n  applicationAllowsVisitingLocation(location) {\n    const event = this.notifyApplicationBeforeVisitingLocation(location);\n    return !event.defaultPrevented\n  }\n\n  notifyApplicationAfterClickingLinkToLocation(link, location, event) {\n    return dispatch(\"turbo:click\", {\n      target: link,\n      detail: { url: location.href, originalEvent: event },\n      cancelable: true\n    })\n  }\n\n  notifyApplicationBeforeVisitingLocation(location) {\n    return dispatch(\"turbo:before-visit\", {\n      detail: { url: location.href },\n      cancelable: true\n    })\n  }\n\n  notifyApplicationAfterVisitingLocation(location, action) {\n    return dispatch(\"turbo:visit\", { detail: { url: location.href, action } })\n  }\n\n  notifyApplicationBeforeCachingSnapshot() {\n    return dispatch(\"turbo:before-cache\")\n  }\n\n  notifyApplicationBeforeRender(newBody, options) {\n    return dispatch(\"turbo:before-render\", {\n      detail: { newBody, ...options },\n      cancelable: true\n    })\n  }\n\n  notifyApplicationAfterRender(renderMethod) {\n    return dispatch(\"turbo:render\", { detail: { renderMethod } })\n  }\n\n  notifyApplicationAfterPageLoad(timing = {}) {\n    return dispatch(\"turbo:load\", {\n      detail: { url: this.location.href, timing }\n    })\n  }\n\n  notifyApplicationAfterVisitingSamePageLocation(oldURL, newURL) {\n    dispatchEvent(\n      new HashChangeEvent(\"hashchange\", {\n        oldURL: oldURL.toString(),\n        newURL: newURL.toString()\n      })\n    );\n  }\n\n  notifyApplicationAfterFrameLoad(frame) {\n    return dispatch(\"turbo:frame-load\", { target: frame })\n  }\n\n  notifyApplicationAfterFrameRender(fetchResponse, frame) {\n    return dispatch(\"turbo:frame-render\", {\n      detail: { fetchResponse },\n      target: frame,\n      cancelable: true\n    })\n  }\n\n  // Helpers\n\n  submissionIsNavigatable(form, submitter) {\n    if (this.formMode == \"off\") {\n      return false\n    } else {\n      const submitterIsNavigatable = submitter ? this.elementIsNavigatable(submitter) : true;\n\n      if (this.formMode == \"optin\") {\n        return submitterIsNavigatable && form.closest('[data-turbo=\"true\"]') != null\n      } else {\n        return submitterIsNavigatable && this.elementIsNavigatable(form)\n      }\n    }\n  }\n\n  elementIsNavigatable(element) {\n    const container = findClosestRecursively(element, \"[data-turbo]\");\n    const withinFrame = findClosestRecursively(element, \"turbo-frame\");\n\n    // Check if Drive is enabled on the session or we're within a Frame.\n    if (this.drive || withinFrame) {\n      // Element is navigatable by default, unless `data-turbo=\"false\"`.\n      if (container) {\n        return container.getAttribute(\"data-turbo\") != \"false\"\n      } else {\n        return true\n      }\n    } else {\n      // Element isn't navigatable by default, unless `data-turbo=\"true\"`.\n      if (container) {\n        return container.getAttribute(\"data-turbo\") == \"true\"\n      } else {\n        return false\n      }\n    }\n  }\n\n  // Private\n\n  getActionForLink(link) {\n    return getVisitAction(link) || \"advance\"\n  }\n\n  get snapshot() {\n    return this.view.snapshot\n  }\n}\n\n// Older versions of the Turbo Native adapters referenced the\n// `Location#absoluteURL` property in their implementations of\n// the `Adapter#visitProposedToLocation()` and `#visitStarted()`\n// methods. The Location class has since been removed in favor\n// of the DOM URL API, and accordingly all Adapter methods now\n// receive URL objects.\n//\n// We alias #absoluteURL to #toString() here to avoid crashing\n// older adapters which do not expect URL objects. We should\n// consider removing this support at some point in the future.\n\nfunction extendURLWithDeprecatedProperties(url) {\n  Object.defineProperties(url, deprecatedLocationPropertyDescriptors);\n}\n\nconst deprecatedLocationPropertyDescriptors = {\n  absoluteURL: {\n    get() {\n      return this.toString()\n    }\n  }\n};\n\nconst session = new Session(recentRequests);\nconst { cache, navigator: navigator$1 } = session;\n\n/**\n * Starts the main session.\n * This initialises any necessary observers such as those to monitor\n * link interactions.\n */\nfunction start() {\n  session.start();\n}\n\n/**\n * Registers an adapter for the main session.\n *\n * @param adapter Adapter to register\n */\nfunction registerAdapter(adapter) {\n  session.registerAdapter(adapter);\n}\n\n/**\n * Performs an application visit to the given location.\n *\n * @param location Location to visit (a URL or path)\n * @param options Options to apply\n * @param options.action Type of history navigation to apply (\"restore\",\n * \"replace\" or \"advance\")\n * @param options.historyChanged Specifies whether the browser history has\n * already been changed for this visit or not\n * @param options.referrer Specifies the referrer of this visit such that\n * navigations to the same page will not result in a new history entry.\n * @param options.snapshotHTML Cached snapshot to render\n * @param options.response Response of the specified location\n */\nfunction visit(location, options) {\n  session.visit(location, options);\n}\n\n/**\n * Connects a stream source to the main session.\n *\n * @param source Stream source to connect\n */\nfunction connectStreamSource(source) {\n  session.connectStreamSource(source);\n}\n\n/**\n * Disconnects a stream source from the main session.\n *\n * @param source Stream source to disconnect\n */\nfunction disconnectStreamSource(source) {\n  session.disconnectStreamSource(source);\n}\n\n/**\n * Renders a stream message to the main session by appending it to the\n * current document.\n *\n * @param message Message to render\n */\nfunction renderStreamMessage(message) {\n  session.renderStreamMessage(message);\n}\n\n/**\n * Removes all entries from the Turbo Drive page cache.\n * Call this when state has changed on the server that may affect cached pages.\n *\n * @deprecated since version 7.2.0 in favor of `Turbo.cache.clear()`\n */\nfunction clearCache() {\n  console.warn(\n    \"Please replace `Turbo.clearCache()` with `Turbo.cache.clear()`. The top-level function is deprecated and will be removed in a future version of Turbo.`\"\n  );\n  session.clearCache();\n}\n\n/**\n * Sets the delay after which the progress bar will appear during navigation.\n *\n * The progress bar appears after 500ms by default.\n *\n * Note that this method has no effect when used with the iOS or Android\n * adapters.\n *\n * @param delay Time to delay in milliseconds\n */\nfunction setProgressBarDelay(delay) {\n  session.setProgressBarDelay(delay);\n}\n\nfunction setConfirmMethod(confirmMethod) {\n  FormSubmission.confirmMethod = confirmMethod;\n}\n\nfunction setFormMode(mode) {\n  session.setFormMode(mode);\n}\n\nvar Turbo = /*#__PURE__*/Object.freeze({\n  __proto__: null,\n  navigator: navigator$1,\n  session: session,\n  cache: cache,\n  PageRenderer: PageRenderer,\n  PageSnapshot: PageSnapshot,\n  FrameRenderer: FrameRenderer,\n  fetch: fetchWithTurboHeaders,\n  start: start,\n  registerAdapter: registerAdapter,\n  visit: visit,\n  connectStreamSource: connectStreamSource,\n  disconnectStreamSource: disconnectStreamSource,\n  renderStreamMessage: renderStreamMessage,\n  clearCache: clearCache,\n  setProgressBarDelay: setProgressBarDelay,\n  setConfirmMethod: setConfirmMethod,\n  setFormMode: setFormMode\n});\n\nclass TurboFrameMissingError extends Error {}\n\nclass FrameController {\n  fetchResponseLoaded = (_fetchResponse) => Promise.resolve()\n  #currentFetchRequest = null\n  #resolveVisitPromise = () => {}\n  #connected = false\n  #hasBeenLoaded = false\n  #ignoredAttributes = new Set()\n  action = null\n\n  constructor(element) {\n    this.element = element;\n    this.view = new FrameView(this, this.element);\n    this.appearanceObserver = new AppearanceObserver(this, this.element);\n    this.formLinkClickObserver = new FormLinkClickObserver(this, this.element);\n    this.linkInterceptor = new LinkInterceptor(this, this.element);\n    this.restorationIdentifier = uuid();\n    this.formSubmitObserver = new FormSubmitObserver(this, this.element);\n  }\n\n  // Frame delegate\n\n  connect() {\n    if (!this.#connected) {\n      this.#connected = true;\n      if (this.loadingStyle == FrameLoadingStyle.lazy) {\n        this.appearanceObserver.start();\n      } else {\n        this.#loadSourceURL();\n      }\n      this.formLinkClickObserver.start();\n      this.linkInterceptor.start();\n      this.formSubmitObserver.start();\n    }\n  }\n\n  disconnect() {\n    if (this.#connected) {\n      this.#connected = false;\n      this.appearanceObserver.stop();\n      this.formLinkClickObserver.stop();\n      this.linkInterceptor.stop();\n      this.formSubmitObserver.stop();\n    }\n  }\n\n  disabledChanged() {\n    if (this.loadingStyle == FrameLoadingStyle.eager) {\n      this.#loadSourceURL();\n    }\n  }\n\n  sourceURLChanged() {\n    if (this.#isIgnoringChangesTo(\"src\")) return\n\n    if (this.element.isConnected) {\n      this.complete = false;\n    }\n\n    if (this.loadingStyle == FrameLoadingStyle.eager || this.#hasBeenLoaded) {\n      this.#loadSourceURL();\n    }\n  }\n\n  sourceURLReloaded() {\n    const { src } = this.element;\n    this.element.removeAttribute(\"complete\");\n    this.element.src = null;\n    this.element.src = src;\n    return this.element.loaded\n  }\n\n  loadingStyleChanged() {\n    if (this.loadingStyle == FrameLoadingStyle.lazy) {\n      this.appearanceObserver.start();\n    } else {\n      this.appearanceObserver.stop();\n      this.#loadSourceURL();\n    }\n  }\n\n  async #loadSourceURL() {\n    if (this.enabled && this.isActive && !this.complete && this.sourceURL) {\n      this.element.loaded = this.#visit(expandURL(this.sourceURL));\n      this.appearanceObserver.stop();\n      await this.element.loaded;\n      this.#hasBeenLoaded = true;\n    }\n  }\n\n  async loadResponse(fetchResponse) {\n    if (fetchResponse.redirected || (fetchResponse.succeeded && fetchResponse.isHTML)) {\n      this.sourceURL = fetchResponse.response.url;\n    }\n\n    try {\n      const html = await fetchResponse.responseHTML;\n      if (html) {\n        const document = parseHTMLDocument(html);\n        const pageSnapshot = PageSnapshot.fromDocument(document);\n\n        if (pageSnapshot.isVisitable) {\n          await this.#loadFrameResponse(fetchResponse, document);\n        } else {\n          await this.#handleUnvisitableFrameResponse(fetchResponse);\n        }\n      }\n    } finally {\n      this.fetchResponseLoaded = () => Promise.resolve();\n    }\n  }\n\n  // Appearance observer delegate\n\n  elementAppearedInViewport(element) {\n    this.proposeVisitIfNavigatedWithAction(element, getVisitAction(element));\n    this.#loadSourceURL();\n  }\n\n  // Form link click observer delegate\n\n  willSubmitFormLinkToLocation(link) {\n    return this.#shouldInterceptNavigation(link)\n  }\n\n  submittedFormLinkToLocation(link, _location, form) {\n    const frame = this.#findFrameElement(link);\n    if (frame) form.setAttribute(\"data-turbo-frame\", frame.id);\n  }\n\n  // Link interceptor delegate\n\n  shouldInterceptLinkClick(element, _location, _event) {\n    return this.#shouldInterceptNavigation(element)\n  }\n\n  linkClickIntercepted(element, location) {\n    this.#navigateFrame(element, location);\n  }\n\n  // Form submit observer delegate\n\n  willSubmitForm(element, submitter) {\n    return element.closest(\"turbo-frame\") == this.element && this.#shouldInterceptNavigation(element, submitter)\n  }\n\n  formSubmitted(element, submitter) {\n    if (this.formSubmission) {\n      this.formSubmission.stop();\n    }\n\n    this.formSubmission = new FormSubmission(this, element, submitter);\n    const { fetchRequest } = this.formSubmission;\n    this.prepareRequest(fetchRequest);\n    this.formSubmission.start();\n  }\n\n  // Fetch request delegate\n\n  prepareRequest(request) {\n    request.headers[\"Turbo-Frame\"] = this.id;\n\n    if (this.currentNavigationElement?.hasAttribute(\"data-turbo-stream\")) {\n      request.acceptResponseType(StreamMessage.contentType);\n    }\n  }\n\n  requestStarted(_request) {\n    markAsBusy(this.element);\n  }\n\n  requestPreventedHandlingResponse(_request, _response) {\n    this.#resolveVisitPromise();\n  }\n\n  async requestSucceededWithResponse(request, response) {\n    await this.loadResponse(response);\n    this.#resolveVisitPromise();\n  }\n\n  async requestFailedWithResponse(request, response) {\n    await this.loadResponse(response);\n    this.#resolveVisitPromise();\n  }\n\n  requestErrored(request, error) {\n    console.error(error);\n    this.#resolveVisitPromise();\n  }\n\n  requestFinished(_request) {\n    clearBusyState(this.element);\n  }\n\n  // Form submission delegate\n\n  formSubmissionStarted({ formElement }) {\n    markAsBusy(formElement, this.#findFrameElement(formElement));\n  }\n\n  formSubmissionSucceededWithResponse(formSubmission, response) {\n    const frame = this.#findFrameElement(formSubmission.formElement, formSubmission.submitter);\n\n    frame.delegate.proposeVisitIfNavigatedWithAction(frame, getVisitAction(formSubmission.submitter, formSubmission.formElement, frame));\n    frame.delegate.loadResponse(response);\n\n    if (!formSubmission.isSafe) {\n      session.clearCache();\n    }\n  }\n\n  formSubmissionFailedWithResponse(formSubmission, fetchResponse) {\n    this.element.delegate.loadResponse(fetchResponse);\n    session.clearCache();\n  }\n\n  formSubmissionErrored(formSubmission, error) {\n    console.error(error);\n  }\n\n  formSubmissionFinished({ formElement }) {\n    clearBusyState(formElement, this.#findFrameElement(formElement));\n  }\n\n  // View delegate\n\n  allowsImmediateRender({ element: newFrame }, options) {\n    const event = dispatch(\"turbo:before-frame-render\", {\n      target: this.element,\n      detail: { newFrame, ...options },\n      cancelable: true\n    });\n    const {\n      defaultPrevented,\n      detail: { render }\n    } = event;\n\n    if (this.view.renderer && render) {\n      this.view.renderer.renderElement = render;\n    }\n\n    return !defaultPrevented\n  }\n\n  viewRenderedSnapshot(_snapshot, _isPreview, _renderMethod) {}\n\n  preloadOnLoadLinksForView(element) {\n    session.preloadOnLoadLinksForView(element);\n  }\n\n  viewInvalidated() {}\n\n  // Frame renderer delegate\n\n  willRenderFrame(currentElement, _newElement) {\n    this.previousFrameElement = currentElement.cloneNode(true);\n  }\n\n  visitCachedSnapshot = ({ element }) => {\n    const frame = element.querySelector(\"#\" + this.element.id);\n\n    if (frame && this.previousFrameElement) {\n      frame.replaceChildren(...this.previousFrameElement.children);\n    }\n\n    delete this.previousFrameElement;\n  }\n\n  // Private\n\n  async #loadFrameResponse(fetchResponse, document) {\n    const newFrameElement = await this.extractForeignFrameElement(document.body);\n\n    if (newFrameElement) {\n      const snapshot = new Snapshot(newFrameElement);\n      const renderer = new FrameRenderer(this, this.view.snapshot, snapshot, FrameRenderer.renderElement, false, false);\n      if (this.view.renderPromise) await this.view.renderPromise;\n      this.changeHistory();\n\n      await this.view.render(renderer);\n      this.complete = true;\n      session.frameRendered(fetchResponse, this.element);\n      session.frameLoaded(this.element);\n      await this.fetchResponseLoaded(fetchResponse);\n    } else if (this.#willHandleFrameMissingFromResponse(fetchResponse)) {\n      this.#handleFrameMissingFromResponse(fetchResponse);\n    }\n  }\n\n  async #visit(url) {\n    const request = new FetchRequest(this, FetchMethod.get, url, new URLSearchParams(), this.element);\n\n    this.#currentFetchRequest?.cancel();\n    this.#currentFetchRequest = request;\n\n    return new Promise((resolve) => {\n      this.#resolveVisitPromise = () => {\n        this.#resolveVisitPromise = () => {};\n        this.#currentFetchRequest = null;\n        resolve();\n      };\n      request.perform();\n    })\n  }\n\n  #navigateFrame(element, url, submitter) {\n    const frame = this.#findFrameElement(element, submitter);\n\n    frame.delegate.proposeVisitIfNavigatedWithAction(frame, getVisitAction(submitter, element, frame));\n\n    this.#withCurrentNavigationElement(element, () => {\n      frame.src = url;\n    });\n  }\n\n  proposeVisitIfNavigatedWithAction(frame, action = null) {\n    this.action = action;\n\n    if (this.action) {\n      const pageSnapshot = PageSnapshot.fromElement(frame).clone();\n      const { visitCachedSnapshot } = frame.delegate;\n\n      frame.delegate.fetchResponseLoaded = async (fetchResponse) => {\n        if (frame.src) {\n          const { statusCode, redirected } = fetchResponse;\n          const responseHTML = await fetchResponse.responseHTML;\n          const response = { statusCode, redirected, responseHTML };\n          const options = {\n            response,\n            visitCachedSnapshot,\n            willRender: false,\n            updateHistory: false,\n            restorationIdentifier: this.restorationIdentifier,\n            snapshot: pageSnapshot\n          };\n\n          if (this.action) options.action = this.action;\n\n          session.visit(frame.src, options);\n        }\n      };\n    }\n  }\n\n  changeHistory() {\n    if (this.action) {\n      const method = getHistoryMethodForAction(this.action);\n      session.history.update(method, expandURL(this.element.src || \"\"), this.restorationIdentifier);\n    }\n  }\n\n  async #handleUnvisitableFrameResponse(fetchResponse) {\n    console.warn(\n      `The response (${fetchResponse.statusCode}) from <turbo-frame id=\"${this.element.id}\"> is performing a full page visit due to turbo-visit-control.`\n    );\n\n    await this.#visitResponse(fetchResponse.response);\n  }\n\n  #willHandleFrameMissingFromResponse(fetchResponse) {\n    this.element.setAttribute(\"complete\", \"\");\n\n    const response = fetchResponse.response;\n    const visit = async (url, options) => {\n      if (url instanceof Response) {\n        this.#visitResponse(url);\n      } else {\n        session.visit(url, options);\n      }\n    };\n\n    const event = dispatch(\"turbo:frame-missing\", {\n      target: this.element,\n      detail: { response, visit },\n      cancelable: true\n    });\n\n    return !event.defaultPrevented\n  }\n\n  #handleFrameMissingFromResponse(fetchResponse) {\n    this.view.missing();\n    this.#throwFrameMissingError(fetchResponse);\n  }\n\n  #throwFrameMissingError(fetchResponse) {\n    const message = `The response (${fetchResponse.statusCode}) did not contain the expected <turbo-frame id=\"${this.element.id}\"> and will be ignored. To perform a full page visit instead, set turbo-visit-control to reload.`;\n    throw new TurboFrameMissingError(message)\n  }\n\n  async #visitResponse(response) {\n    const wrapped = new FetchResponse(response);\n    const responseHTML = await wrapped.responseHTML;\n    const { location, redirected, statusCode } = wrapped;\n\n    return session.visit(location, { response: { redirected, statusCode, responseHTML } })\n  }\n\n  #findFrameElement(element, submitter) {\n    const id = getAttribute(\"data-turbo-frame\", submitter, element) || this.element.getAttribute(\"target\");\n    return getFrameElementById(id) ?? this.element\n  }\n\n  async extractForeignFrameElement(container) {\n    let element;\n    const id = CSS.escape(this.id);\n\n    try {\n      element = activateElement(container.querySelector(`turbo-frame#${id}`), this.sourceURL);\n      if (element) {\n        return element\n      }\n\n      element = activateElement(container.querySelector(`turbo-frame[src][recurse~=${id}]`), this.sourceURL);\n      if (element) {\n        await element.loaded;\n        return await this.extractForeignFrameElement(element)\n      }\n    } catch (error) {\n      console.error(error);\n      return new FrameElement()\n    }\n\n    return null\n  }\n\n  #formActionIsVisitable(form, submitter) {\n    const action = getAction$1(form, submitter);\n\n    return locationIsVisitable(expandURL(action), this.rootLocation)\n  }\n\n  #shouldInterceptNavigation(element, submitter) {\n    const id = getAttribute(\"data-turbo-frame\", submitter, element) || this.element.getAttribute(\"target\");\n\n    if (element instanceof HTMLFormElement && !this.#formActionIsVisitable(element, submitter)) {\n      return false\n    }\n\n    if (!this.enabled || id == \"_top\") {\n      return false\n    }\n\n    if (id) {\n      const frameElement = getFrameElementById(id);\n      if (frameElement) {\n        return !frameElement.disabled\n      }\n    }\n\n    if (!session.elementIsNavigatable(element)) {\n      return false\n    }\n\n    if (submitter && !session.elementIsNavigatable(submitter)) {\n      return false\n    }\n\n    return true\n  }\n\n  // Computed properties\n\n  get id() {\n    return this.element.id\n  }\n\n  get enabled() {\n    return !this.element.disabled\n  }\n\n  get sourceURL() {\n    if (this.element.src) {\n      return this.element.src\n    }\n  }\n\n  set sourceURL(sourceURL) {\n    this.#ignoringChangesToAttribute(\"src\", () => {\n      this.element.src = sourceURL ?? null;\n    });\n  }\n\n  get loadingStyle() {\n    return this.element.loading\n  }\n\n  get isLoading() {\n    return this.formSubmission !== undefined || this.#resolveVisitPromise() !== undefined\n  }\n\n  get complete() {\n    return this.element.hasAttribute(\"complete\")\n  }\n\n  set complete(value) {\n    if (value) {\n      this.element.setAttribute(\"complete\", \"\");\n    } else {\n      this.element.removeAttribute(\"complete\");\n    }\n  }\n\n  get isActive() {\n    return this.element.isActive && this.#connected\n  }\n\n  get rootLocation() {\n    const meta = this.element.ownerDocument.querySelector(`meta[name=\"turbo-root\"]`);\n    const root = meta?.content ?? \"/\";\n    return expandURL(root)\n  }\n\n  #isIgnoringChangesTo(attributeName) {\n    return this.#ignoredAttributes.has(attributeName)\n  }\n\n  #ignoringChangesToAttribute(attributeName, callback) {\n    this.#ignoredAttributes.add(attributeName);\n    callback();\n    this.#ignoredAttributes.delete(attributeName);\n  }\n\n  #withCurrentNavigationElement(element, callback) {\n    this.currentNavigationElement = element;\n    callback();\n    delete this.currentNavigationElement;\n  }\n}\n\nfunction getFrameElementById(id) {\n  if (id != null) {\n    const element = document.getElementById(id);\n    if (element instanceof FrameElement) {\n      return element\n    }\n  }\n}\n\nfunction activateElement(element, currentURL) {\n  if (element) {\n    const src = element.getAttribute(\"src\");\n    if (src != null && currentURL != null && urlsAreEqual(src, currentURL)) {\n      throw new Error(`Matching <turbo-frame id=\"${element.id}\"> element has a source URL which references itself`)\n    }\n    if (element.ownerDocument !== document) {\n      element = document.importNode(element, true);\n    }\n\n    if (element instanceof FrameElement) {\n      element.connectedCallback();\n      element.disconnectedCallback();\n      return element\n    }\n  }\n}\n\nconst StreamActions = {\n  after() {\n    this.targetElements.forEach((e) => e.parentElement?.insertBefore(this.templateContent, e.nextSibling));\n  },\n\n  append() {\n    this.removeDuplicateTargetChildren();\n    this.targetElements.forEach((e) => e.append(this.templateContent));\n  },\n\n  before() {\n    this.targetElements.forEach((e) => e.parentElement?.insertBefore(this.templateContent, e));\n  },\n\n  prepend() {\n    this.removeDuplicateTargetChildren();\n    this.targetElements.forEach((e) => e.prepend(this.templateContent));\n  },\n\n  remove() {\n    this.targetElements.forEach((e) => e.remove());\n  },\n\n  replace() {\n    this.targetElements.forEach((e) => e.replaceWith(this.templateContent));\n  },\n\n  update() {\n    this.targetElements.forEach((targetElement) => {\n      targetElement.innerHTML = \"\";\n      targetElement.append(this.templateContent);\n    });\n  },\n\n  refresh() {\n    session.refresh(this.baseURI, this.requestId);\n  }\n};\n\n// <turbo-stream action=replace target=id><template>...\n\n/**\n * Renders updates to the page from a stream of messages.\n *\n * Using the `action` attribute, this can be configured one of four ways:\n *\n * - `append` - appends the result to the container\n * - `prepend` - prepends the result to the container\n * - `replace` - replaces the contents of the container\n * - `remove` - removes the container\n * - `before` - inserts the result before the target\n * - `after` - inserts the result after the target\n *\n * @customElement turbo-stream\n * @example\n *   <turbo-stream action=\"append\" target=\"dom_id\">\n *     <template>\n *       Content to append to container designated with the dom_id.\n *     </template>\n *   </turbo-stream>\n */\nclass StreamElement extends HTMLElement {\n  static async renderElement(newElement) {\n    await newElement.performAction();\n  }\n\n  async connectedCallback() {\n    try {\n      await this.render();\n    } catch (error) {\n      console.error(error);\n    } finally {\n      this.disconnect();\n    }\n  }\n\n  async render() {\n    return (this.renderPromise ??= (async () => {\n      const event = this.beforeRenderEvent;\n\n      if (this.dispatchEvent(event)) {\n        await nextRepaint();\n        await event.detail.render(this);\n      }\n    })())\n  }\n\n  disconnect() {\n    try {\n      this.remove();\n      // eslint-disable-next-line no-empty\n    } catch {}\n  }\n\n  /**\n   * Removes duplicate children (by ID)\n   */\n  removeDuplicateTargetChildren() {\n    this.duplicateChildren.forEach((c) => c.remove());\n  }\n\n  /**\n   * Gets the list of duplicate children (i.e. those with the same ID)\n   */\n  get duplicateChildren() {\n    const existingChildren = this.targetElements.flatMap((e) => [...e.children]).filter((c) => !!c.id);\n    const newChildrenIds = [...(this.templateContent?.children || [])].filter((c) => !!c.id).map((c) => c.id);\n\n    return existingChildren.filter((c) => newChildrenIds.includes(c.id))\n  }\n\n  /**\n   * Gets the action function to be performed.\n   */\n  get performAction() {\n    if (this.action) {\n      const actionFunction = StreamActions[this.action];\n      if (actionFunction) {\n        return actionFunction\n      }\n      this.#raise(\"unknown action\");\n    }\n    this.#raise(\"action attribute is missing\");\n  }\n\n  /**\n   * Gets the target elements which the template will be rendered to.\n   */\n  get targetElements() {\n    if (this.target) {\n      return this.targetElementsById\n    } else if (this.targets) {\n      return this.targetElementsByQuery\n    } else {\n      this.#raise(\"target or targets attribute is missing\");\n    }\n  }\n\n  /**\n   * Gets the contents of the main `<template>`.\n   */\n  get templateContent() {\n    return this.templateElement.content.cloneNode(true)\n  }\n\n  /**\n   * Gets the main `<template>` used for rendering\n   */\n  get templateElement() {\n    if (this.firstElementChild === null) {\n      const template = this.ownerDocument.createElement(\"template\");\n      this.appendChild(template);\n      return template\n    } else if (this.firstElementChild instanceof HTMLTemplateElement) {\n      return this.firstElementChild\n    }\n    this.#raise(\"first child element must be a <template> element\");\n  }\n\n  /**\n   * Gets the current action.\n   */\n  get action() {\n    return this.getAttribute(\"action\")\n  }\n\n  /**\n   * Gets the current target (an element ID) to which the result will\n   * be rendered.\n   */\n  get target() {\n    return this.getAttribute(\"target\")\n  }\n\n  /**\n   * Gets the current \"targets\" selector (a CSS selector)\n   */\n  get targets() {\n    return this.getAttribute(\"targets\")\n  }\n\n  /**\n   * Reads the request-id attribute\n   */\n  get requestId() {\n    return this.getAttribute(\"request-id\")\n  }\n\n  #raise(message) {\n    throw new Error(`${this.description}: ${message}`)\n  }\n\n  get description() {\n    return (this.outerHTML.match(/<[^>]+>/) ?? [])[0] ?? \"<turbo-stream>\"\n  }\n\n  get beforeRenderEvent() {\n    return new CustomEvent(\"turbo:before-stream-render\", {\n      bubbles: true,\n      cancelable: true,\n      detail: { newStream: this, render: StreamElement.renderElement }\n    })\n  }\n\n  get targetElementsById() {\n    const element = this.ownerDocument?.getElementById(this.target);\n\n    if (element !== null) {\n      return [element]\n    } else {\n      return []\n    }\n  }\n\n  get targetElementsByQuery() {\n    const elements = this.ownerDocument?.querySelectorAll(this.targets);\n\n    if (elements.length !== 0) {\n      return Array.prototype.slice.call(elements)\n    } else {\n      return []\n    }\n  }\n}\n\nclass StreamSourceElement extends HTMLElement {\n  streamSource = null\n\n  connectedCallback() {\n    this.streamSource = this.src.match(/^ws{1,2}:/) ? new WebSocket(this.src) : new EventSource(this.src);\n\n    connectStreamSource(this.streamSource);\n  }\n\n  disconnectedCallback() {\n    if (this.streamSource) {\n      this.streamSource.close();\n\n      disconnectStreamSource(this.streamSource);\n    }\n  }\n\n  get src() {\n    return this.getAttribute(\"src\") || \"\"\n  }\n}\n\nFrameElement.delegateConstructor = FrameController;\n\nif (customElements.get(\"turbo-frame\") === undefined) {\n  customElements.define(\"turbo-frame\", FrameElement);\n}\n\nif (customElements.get(\"turbo-stream\") === undefined) {\n  customElements.define(\"turbo-stream\", StreamElement);\n}\n\nif (customElements.get(\"turbo-stream-source\") === undefined) {\n  customElements.define(\"turbo-stream-source\", StreamSourceElement);\n}\n\n(() => {\n  let element = document.currentScript;\n  if (!element) return\n  if (element.hasAttribute(\"data-turbo-suppress-warning\")) return\n\n  element = element.parentElement;\n  while (element) {\n    if (element == document.body) {\n      return console.warn(\n        unindent`\n        You are loading Turbo from a <script> element inside the <body> element. This is probably not what you meant to do!\n\n        Load your application’s JavaScript bundle inside the <head> element instead. <script> elements in <body> are evaluated with each page change.\n\n        For more information, see: https://turbo.hotwired.dev/handbook/building#working-with-script-elements\n\n        ——\n        Suppress this warning by adding a \"data-turbo-suppress-warning\" attribute to: %s\n      `,\n        element.outerHTML\n      )\n    }\n\n    element = element.parentElement;\n  }\n})();\n\nwindow.Turbo = { ...Turbo, StreamActions };\nstart();\n\nexport { FetchEnctype, FetchMethod, FetchRequest, FetchResponse, FrameElement, FrameLoadingStyle, FrameRenderer, PageRenderer, PageSnapshot, StreamActions, StreamElement, StreamSourceElement, cache, clearCache, connectStreamSource, disconnectStreamSource, fetchWithTurboHeaders as fetch, fetchEnctypeFromString, fetchMethodFromString, isSafe, navigator$1 as navigator, registerAdapter, renderStreamMessage, session, setConfirmMethod, setFormMode, setProgressBarDelay, start, visit };\n","let consumer\n\nexport async function getConsumer() {\n  return consumer || setConsumer(createConsumer().then(setConsumer))\n}\n\nexport function setConsumer(newConsumer) {\n  return consumer = newConsumer\n}\n\nexport async function createConsumer() {\n  const { createConsumer } = await import(/* webpackChunkName: \"actioncable\" */ \"@rails/actioncable/src\")\n  return createConsumer()\n}\n\nexport async function subscribeTo(channel, mixin) {\n  const { subscriptions } = await getConsumer()\n  return subscriptions.create(channel, mixin)\n}\n","// Based on https://github.com/nathan7/snakeize\n//\n// This software is released under the MIT license:\n// Permission is hereby granted, free of charge, to any person obtaining a copy of\n// this software and associated documentation files (the \"Software\"), to deal in\n// the Software without restriction, including without limitation the rights to\n// use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\n// the Software, and to permit persons to whom the Software is furnished to do so,\n// subject to the following conditions:\n\n// The above copyright notice and this permission notice shall be included in all\n// copies or substantial portions of the Software.\n\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\n// FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\n// COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\n// IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\n// CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\nexport default function walk (obj) {\n    if (!obj || typeof obj !== 'object') return obj;\n    if (obj instanceof Date || obj instanceof RegExp) return obj;\n    if (Array.isArray(obj)) return obj.map(walk);\n    return Object.keys(obj).reduce(function (acc, key) {\n        var camel = key[0].toLowerCase() + key.slice(1).replace(/([A-Z]+)/g, function (m, x) {\n            return '_' + x.toLowerCase();\n        });\n        acc[camel] = walk(obj[key]);\n        return acc;\n    }, {});\n};","import { connectStreamSource, disconnectStreamSource } from \"@hotwired/turbo\"\nimport { subscribeTo } from \"./cable\"\nimport snakeize from \"./snakeize\"\n\nclass TurboCableStreamSourceElement extends HTMLElement {\n  async connectedCallback() {\n    connectStreamSource(this)\n    this.subscription = await subscribeTo(this.channel, {\n      received: this.dispatchMessageEvent.bind(this),\n      connected: this.subscriptionConnected.bind(this),\n      disconnected: this.subscriptionDisconnected.bind(this)\n    })\n  }\n\n  disconnectedCallback() {\n    disconnectStreamSource(this)\n    if (this.subscription) this.subscription.unsubscribe()\n  }\n\n  dispatchMessageEvent(data) {\n    const event = new MessageEvent(\"message\", { data })\n    return this.dispatchEvent(event)\n  }\n\n  subscriptionConnected() {\n    this.setAttribute(\"connected\", \"\")\n  }\n\n  subscriptionDisconnected() {\n    this.removeAttribute(\"connected\")\n  }\n\n  get channel() {\n    const channel = this.getAttribute(\"channel\")\n    const signed_stream_name = this.getAttribute(\"signed-stream-name\")\n    return { channel, signed_stream_name, ...snakeize({ ...this.dataset }) }\n  }\n}\n\n\nif (customElements.get(\"turbo-cable-stream-source\") === undefined) {\n  customElements.define(\"turbo-cable-stream-source\", TurboCableStreamSourceElement)\n}\n","/**\n * SSR Window 4.0.2\n * Better handling for window object in SSR environment\n * https://github.com/nolimits4web/ssr-window\n *\n * Copyright 2021, Vladimir Kharlampidi\n *\n * Licensed under MIT\n *\n * Released on: December 13, 2021\n */\n/* eslint-disable no-param-reassign */\nfunction isObject(obj) {\n  return obj !== null && typeof obj === 'object' && 'constructor' in obj && obj.constructor === Object;\n}\nfunction extend(target, src) {\n  if (target === void 0) {\n    target = {};\n  }\n  if (src === void 0) {\n    src = {};\n  }\n  Object.keys(src).forEach(key => {\n    if (typeof target[key] === 'undefined') target[key] = src[key];else if (isObject(src[key]) && isObject(target[key]) && Object.keys(src[key]).length > 0) {\n      extend(target[key], src[key]);\n    }\n  });\n}\nconst ssrDocument = {\n  body: {},\n  addEventListener() {},\n  removeEventListener() {},\n  activeElement: {\n    blur() {},\n    nodeName: ''\n  },\n  querySelector() {\n    return null;\n  },\n  querySelectorAll() {\n    return [];\n  },\n  getElementById() {\n    return null;\n  },\n  createEvent() {\n    return {\n      initEvent() {}\n    };\n  },\n  createElement() {\n    return {\n      children: [],\n      childNodes: [],\n      style: {},\n      setAttribute() {},\n      getElementsByTagName() {\n        return [];\n      }\n    };\n  },\n  createElementNS() {\n    return {};\n  },\n  importNode() {\n    return null;\n  },\n  location: {\n    hash: '',\n    host: '',\n    hostname: '',\n    href: '',\n    origin: '',\n    pathname: '',\n    protocol: '',\n    search: ''\n  }\n};\nfunction getDocument() {\n  const doc = typeof document !== 'undefined' ? document : {};\n  extend(doc, ssrDocument);\n  return doc;\n}\nconst ssrWindow = {\n  document: ssrDocument,\n  navigator: {\n    userAgent: ''\n  },\n  location: {\n    hash: '',\n    host: '',\n    hostname: '',\n    href: '',\n    origin: '',\n    pathname: '',\n    protocol: '',\n    search: ''\n  },\n  history: {\n    replaceState() {},\n    pushState() {},\n    go() {},\n    back() {}\n  },\n  CustomEvent: function CustomEvent() {\n    return this;\n  },\n  addEventListener() {},\n  removeEventListener() {},\n  getComputedStyle() {\n    return {\n      getPropertyValue() {\n        return '';\n      }\n    };\n  },\n  Image() {},\n  Date() {},\n  screen: {},\n  setTimeout() {},\n  clearTimeout() {},\n  matchMedia() {\n    return {};\n  },\n  requestAnimationFrame(callback) {\n    if (typeof setTimeout === 'undefined') {\n      callback();\n      return null;\n    }\n    return setTimeout(callback, 0);\n  },\n  cancelAnimationFrame(id) {\n    if (typeof setTimeout === 'undefined') {\n      return;\n    }\n    clearTimeout(id);\n  }\n};\nfunction getWindow() {\n  const win = typeof window !== 'undefined' ? window : {};\n  extend(win, ssrWindow);\n  return win;\n}\n\nexport { getWindow as a, getDocument as g };\n","import \"./cable_stream_source_element\"\n\nimport * as Turbo from \"@hotwired/turbo\"\nexport { Turbo }\n\nimport * as cable from \"./cable\"\nexport { cable }\n\nimport { encodeMethodIntoRequestBody } from \"./fetch_requests\"\n\nwindow.Turbo = Turbo\n\naddEventListener(\"turbo:before-fetch-request\", encodeMethodIntoRequestBody)\n","export function encodeMethodIntoRequestBody(event) {\n  if (event.target instanceof HTMLFormElement) {\n    const { target: form, detail: { fetchOptions } } = event\n\n    form.addEventListener(\"turbo:submit-start\", ({ detail: { formSubmission: { submitter } } }) => {\n      const body = isBodyInit(fetchOptions.body) ? fetchOptions.body : new URLSearchParams()\n      const method = determineFetchMethod(submitter, body, form)\n\n      if (!/get/i.test(method)) {\n        if (/post/i.test(method)) {\n          body.delete(\"_method\")\n        } else {\n          body.set(\"_method\", method)\n        }\n\n        fetchOptions.method = \"post\"\n      }\n    }, { once: true })\n  }\n}\n\nfunction determineFetchMethod(submitter, body, form) {\n  const formMethod = determineFormMethod(submitter)\n  const overrideMethod = body.get(\"_method\")\n  const method = form.getAttribute(\"method\") || \"get\"\n\n  if (typeof formMethod == \"string\") {\n    return formMethod\n  } else if (typeof overrideMethod == \"string\") {\n    return overrideMethod\n  } else {\n    return method\n  }\n}\n\nfunction determineFormMethod(submitter) {\n  if (submitter instanceof HTMLButtonElement || submitter instanceof HTMLInputElement) {\n    // Rails 7 ActionView::Helpers::FormBuilder#button method has an override\n    // for formmethod if the button does not have name or value attributes\n    // set, which is the default. This means that if you use <%= f.button\n    // formmethod: :delete %>, it will generate a <button name=\"_method\"\n    // value=\"delete\" formmethod=\"post\">. Therefore, if the submitter's name\n    // is already _method, it's value attribute already contains the desired\n    // method.\n    if (submitter.name === '_method') {\n      return submitter.value\n    } else if (submitter.hasAttribute(\"formmethod\")) {\n      return submitter.formMethod\n    } else {\n      return null\n    }\n  } else {\n    return null\n  }\n}\n\nfunction isBodyInit(body) {\n  return body instanceof FormData || body instanceof URLSearchParams\n}\n","import { a as getWindow, g as getDocument } from './ssr-window.esm.mjs';\n\nfunction classesToTokens(classes) {\n  if (classes === void 0) {\n    classes = '';\n  }\n  return classes.trim().split(' ').filter(c => !!c.trim());\n}\n\nfunction deleteProps(obj) {\n  const object = obj;\n  Object.keys(object).forEach(key => {\n    try {\n      object[key] = null;\n    } catch (e) {\n      // no getter for object\n    }\n    try {\n      delete object[key];\n    } catch (e) {\n      // something got wrong\n    }\n  });\n}\nfunction nextTick(callback, delay) {\n  if (delay === void 0) {\n    delay = 0;\n  }\n  return setTimeout(callback, delay);\n}\nfunction now() {\n  return Date.now();\n}\nfunction getComputedStyle(el) {\n  const window = getWindow();\n  let style;\n  if (window.getComputedStyle) {\n    style = window.getComputedStyle(el, null);\n  }\n  if (!style && el.currentStyle) {\n    style = el.currentStyle;\n  }\n  if (!style) {\n    style = el.style;\n  }\n  return style;\n}\nfunction getTranslate(el, axis) {\n  if (axis === void 0) {\n    axis = 'x';\n  }\n  const window = getWindow();\n  let matrix;\n  let curTransform;\n  let transformMatrix;\n  const curStyle = getComputedStyle(el);\n  if (window.WebKitCSSMatrix) {\n    curTransform = curStyle.transform || curStyle.webkitTransform;\n    if (curTransform.split(',').length > 6) {\n      curTransform = curTransform.split(', ').map(a => a.replace(',', '.')).join(', ');\n    }\n    // Some old versions of Webkit choke when 'none' is passed; pass\n    // empty string instead in this case\n    transformMatrix = new window.WebKitCSSMatrix(curTransform === 'none' ? '' : curTransform);\n  } else {\n    transformMatrix = curStyle.MozTransform || curStyle.OTransform || curStyle.MsTransform || curStyle.msTransform || curStyle.transform || curStyle.getPropertyValue('transform').replace('translate(', 'matrix(1, 0, 0, 1,');\n    matrix = transformMatrix.toString().split(',');\n  }\n  if (axis === 'x') {\n    // Latest Chrome and webkits Fix\n    if (window.WebKitCSSMatrix) curTransform = transformMatrix.m41;\n    // Crazy IE10 Matrix\n    else if (matrix.length === 16) curTransform = parseFloat(matrix[12]);\n    // Normal Browsers\n    else curTransform = parseFloat(matrix[4]);\n  }\n  if (axis === 'y') {\n    // Latest Chrome and webkits Fix\n    if (window.WebKitCSSMatrix) curTransform = transformMatrix.m42;\n    // Crazy IE10 Matrix\n    else if (matrix.length === 16) curTransform = parseFloat(matrix[13]);\n    // Normal Browsers\n    else curTransform = parseFloat(matrix[5]);\n  }\n  return curTransform || 0;\n}\nfunction isObject(o) {\n  return typeof o === 'object' && o !== null && o.constructor && Object.prototype.toString.call(o).slice(8, -1) === 'Object';\n}\nfunction isNode(node) {\n  // eslint-disable-next-line\n  if (typeof window !== 'undefined' && typeof window.HTMLElement !== 'undefined') {\n    return node instanceof HTMLElement;\n  }\n  return node && (node.nodeType === 1 || node.nodeType === 11);\n}\nfunction extend() {\n  const to = Object(arguments.length <= 0 ? undefined : arguments[0]);\n  const noExtend = ['__proto__', 'constructor', 'prototype'];\n  for (let i = 1; i < arguments.length; i += 1) {\n    const nextSource = i < 0 || arguments.length <= i ? undefined : arguments[i];\n    if (nextSource !== undefined && nextSource !== null && !isNode(nextSource)) {\n      const keysArray = Object.keys(Object(nextSource)).filter(key => noExtend.indexOf(key) < 0);\n      for (let nextIndex = 0, len = keysArray.length; nextIndex < len; nextIndex += 1) {\n        const nextKey = keysArray[nextIndex];\n        const desc = Object.getOwnPropertyDescriptor(nextSource, nextKey);\n        if (desc !== undefined && desc.enumerable) {\n          if (isObject(to[nextKey]) && isObject(nextSource[nextKey])) {\n            if (nextSource[nextKey].__swiper__) {\n              to[nextKey] = nextSource[nextKey];\n            } else {\n              extend(to[nextKey], nextSource[nextKey]);\n            }\n          } else if (!isObject(to[nextKey]) && isObject(nextSource[nextKey])) {\n            to[nextKey] = {};\n            if (nextSource[nextKey].__swiper__) {\n              to[nextKey] = nextSource[nextKey];\n            } else {\n              extend(to[nextKey], nextSource[nextKey]);\n            }\n          } else {\n            to[nextKey] = nextSource[nextKey];\n          }\n        }\n      }\n    }\n  }\n  return to;\n}\nfunction setCSSProperty(el, varName, varValue) {\n  el.style.setProperty(varName, varValue);\n}\nfunction animateCSSModeScroll(_ref) {\n  let {\n    swiper,\n    targetPosition,\n    side\n  } = _ref;\n  const window = getWindow();\n  const startPosition = -swiper.translate;\n  let startTime = null;\n  let time;\n  const duration = swiper.params.speed;\n  swiper.wrapperEl.style.scrollSnapType = 'none';\n  window.cancelAnimationFrame(swiper.cssModeFrameID);\n  const dir = targetPosition > startPosition ? 'next' : 'prev';\n  const isOutOfBound = (current, target) => {\n    return dir === 'next' && current >= target || dir === 'prev' && current <= target;\n  };\n  const animate = () => {\n    time = new Date().getTime();\n    if (startTime === null) {\n      startTime = time;\n    }\n    const progress = Math.max(Math.min((time - startTime) / duration, 1), 0);\n    const easeProgress = 0.5 - Math.cos(progress * Math.PI) / 2;\n    let currentPosition = startPosition + easeProgress * (targetPosition - startPosition);\n    if (isOutOfBound(currentPosition, targetPosition)) {\n      currentPosition = targetPosition;\n    }\n    swiper.wrapperEl.scrollTo({\n      [side]: currentPosition\n    });\n    if (isOutOfBound(currentPosition, targetPosition)) {\n      swiper.wrapperEl.style.overflow = 'hidden';\n      swiper.wrapperEl.style.scrollSnapType = '';\n      setTimeout(() => {\n        swiper.wrapperEl.style.overflow = '';\n        swiper.wrapperEl.scrollTo({\n          [side]: currentPosition\n        });\n      });\n      window.cancelAnimationFrame(swiper.cssModeFrameID);\n      return;\n    }\n    swiper.cssModeFrameID = window.requestAnimationFrame(animate);\n  };\n  animate();\n}\nfunction getSlideTransformEl(slideEl) {\n  return slideEl.querySelector('.swiper-slide-transform') || slideEl.shadowRoot && slideEl.shadowRoot.querySelector('.swiper-slide-transform') || slideEl;\n}\nfunction elementChildren(element, selector) {\n  if (selector === void 0) {\n    selector = '';\n  }\n  return [...element.children].filter(el => el.matches(selector));\n}\nfunction showWarning(text) {\n  try {\n    console.warn(text);\n    return;\n  } catch (err) {\n    // err\n  }\n}\nfunction createElement(tag, classes) {\n  if (classes === void 0) {\n    classes = [];\n  }\n  const el = document.createElement(tag);\n  el.classList.add(...(Array.isArray(classes) ? classes : classesToTokens(classes)));\n  return el;\n}\nfunction elementOffset(el) {\n  const window = getWindow();\n  const document = getDocument();\n  const box = el.getBoundingClientRect();\n  const body = document.body;\n  const clientTop = el.clientTop || body.clientTop || 0;\n  const clientLeft = el.clientLeft || body.clientLeft || 0;\n  const scrollTop = el === window ? window.scrollY : el.scrollTop;\n  const scrollLeft = el === window ? window.scrollX : el.scrollLeft;\n  return {\n    top: box.top + scrollTop - clientTop,\n    left: box.left + scrollLeft - clientLeft\n  };\n}\nfunction elementPrevAll(el, selector) {\n  const prevEls = [];\n  while (el.previousElementSibling) {\n    const prev = el.previousElementSibling; // eslint-disable-line\n    if (selector) {\n      if (prev.matches(selector)) prevEls.push(prev);\n    } else prevEls.push(prev);\n    el = prev;\n  }\n  return prevEls;\n}\nfunction elementNextAll(el, selector) {\n  const nextEls = [];\n  while (el.nextElementSibling) {\n    const next = el.nextElementSibling; // eslint-disable-line\n    if (selector) {\n      if (next.matches(selector)) nextEls.push(next);\n    } else nextEls.push(next);\n    el = next;\n  }\n  return nextEls;\n}\nfunction elementStyle(el, prop) {\n  const window = getWindow();\n  return window.getComputedStyle(el, null).getPropertyValue(prop);\n}\nfunction elementIndex(el) {\n  let child = el;\n  let i;\n  if (child) {\n    i = 0;\n    // eslint-disable-next-line\n    while ((child = child.previousSibling) !== null) {\n      if (child.nodeType === 1) i += 1;\n    }\n    return i;\n  }\n  return undefined;\n}\nfunction elementParents(el, selector) {\n  const parents = []; // eslint-disable-line\n  let parent = el.parentElement; // eslint-disable-line\n  while (parent) {\n    if (selector) {\n      if (parent.matches(selector)) parents.push(parent);\n    } else {\n      parents.push(parent);\n    }\n    parent = parent.parentElement;\n  }\n  return parents;\n}\nfunction elementTransitionEnd(el, callback) {\n  function fireCallBack(e) {\n    if (e.target !== el) return;\n    callback.call(el, e);\n    el.removeEventListener('transitionend', fireCallBack);\n  }\n  if (callback) {\n    el.addEventListener('transitionend', fireCallBack);\n  }\n}\nfunction elementOuterSize(el, size, includeMargins) {\n  const window = getWindow();\n  if (includeMargins) {\n    return el[size === 'width' ? 'offsetWidth' : 'offsetHeight'] + parseFloat(window.getComputedStyle(el, null).getPropertyValue(size === 'width' ? 'margin-right' : 'margin-top')) + parseFloat(window.getComputedStyle(el, null).getPropertyValue(size === 'width' ? 'margin-left' : 'margin-bottom'));\n  }\n  return el.offsetWidth;\n}\nfunction makeElementsArray(el) {\n  return (Array.isArray(el) ? el : [el]).filter(e => !!e);\n}\n\nexport { elementParents as a, elementOffset as b, createElement as c, now as d, elementChildren as e, elementOuterSize as f, getSlideTransformEl as g, elementIndex as h, classesToTokens as i, getTranslate as j, elementTransitionEnd as k, isObject as l, makeElementsArray as m, nextTick as n, elementStyle as o, elementNextAll as p, elementPrevAll as q, animateCSSModeScroll as r, setCSSProperty as s, showWarning as t, extend as u, deleteProps as v };\n","import { a as getWindow, g as getDocument } from './ssr-window.esm.mjs';\nimport { a as elementParents, o as elementStyle, e as elementChildren, s as setCSSProperty, f as elementOuterSize, p as elementNextAll, q as elementPrevAll, j as getTranslate, r as animateCSSModeScroll, n as nextTick, t as showWarning, c as createElement, d as now, u as extend, h as elementIndex, v as deleteProps } from './utils.mjs';\n\nlet support;\nfunction calcSupport() {\n  const window = getWindow();\n  const document = getDocument();\n  return {\n    smoothScroll: document.documentElement && document.documentElement.style && 'scrollBehavior' in document.documentElement.style,\n    touch: !!('ontouchstart' in window || window.DocumentTouch && document instanceof window.DocumentTouch)\n  };\n}\nfunction getSupport() {\n  if (!support) {\n    support = calcSupport();\n  }\n  return support;\n}\n\nlet deviceCached;\nfunction calcDevice(_temp) {\n  let {\n    userAgent\n  } = _temp === void 0 ? {} : _temp;\n  const support = getSupport();\n  const window = getWindow();\n  const platform = window.navigator.platform;\n  const ua = userAgent || window.navigator.userAgent;\n  const device = {\n    ios: false,\n    android: false\n  };\n  const screenWidth = window.screen.width;\n  const screenHeight = window.screen.height;\n  const android = ua.match(/(Android);?[\\s\\/]+([\\d.]+)?/); // eslint-disable-line\n  let ipad = ua.match(/(iPad).*OS\\s([\\d_]+)/);\n  const ipod = ua.match(/(iPod)(.*OS\\s([\\d_]+))?/);\n  const iphone = !ipad && ua.match(/(iPhone\\sOS|iOS)\\s([\\d_]+)/);\n  const windows = platform === 'Win32';\n  let macos = platform === 'MacIntel';\n\n  // iPadOs 13 fix\n  const iPadScreens = ['1024x1366', '1366x1024', '834x1194', '1194x834', '834x1112', '1112x834', '768x1024', '1024x768', '820x1180', '1180x820', '810x1080', '1080x810'];\n  if (!ipad && macos && support.touch && iPadScreens.indexOf(`${screenWidth}x${screenHeight}`) >= 0) {\n    ipad = ua.match(/(Version)\\/([\\d.]+)/);\n    if (!ipad) ipad = [0, 1, '13_0_0'];\n    macos = false;\n  }\n\n  // Android\n  if (android && !windows) {\n    device.os = 'android';\n    device.android = true;\n  }\n  if (ipad || iphone || ipod) {\n    device.os = 'ios';\n    device.ios = true;\n  }\n\n  // Export object\n  return device;\n}\nfunction getDevice(overrides) {\n  if (overrides === void 0) {\n    overrides = {};\n  }\n  if (!deviceCached) {\n    deviceCached = calcDevice(overrides);\n  }\n  return deviceCached;\n}\n\nlet browser;\nfunction calcBrowser() {\n  const window = getWindow();\n  const device = getDevice();\n  let needPerspectiveFix = false;\n  function isSafari() {\n    const ua = window.navigator.userAgent.toLowerCase();\n    return ua.indexOf('safari') >= 0 && ua.indexOf('chrome') < 0 && ua.indexOf('android') < 0;\n  }\n  if (isSafari()) {\n    const ua = String(window.navigator.userAgent);\n    if (ua.includes('Version/')) {\n      const [major, minor] = ua.split('Version/')[1].split(' ')[0].split('.').map(num => Number(num));\n      needPerspectiveFix = major < 16 || major === 16 && minor < 2;\n    }\n  }\n  const isWebView = /(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/i.test(window.navigator.userAgent);\n  const isSafariBrowser = isSafari();\n  const need3dFix = isSafariBrowser || isWebView && device.ios;\n  return {\n    isSafari: needPerspectiveFix || isSafariBrowser,\n    needPerspectiveFix,\n    need3dFix,\n    isWebView\n  };\n}\nfunction getBrowser() {\n  if (!browser) {\n    browser = calcBrowser();\n  }\n  return browser;\n}\n\nfunction Resize(_ref) {\n  let {\n    swiper,\n    on,\n    emit\n  } = _ref;\n  const window = getWindow();\n  let observer = null;\n  let animationFrame = null;\n  const resizeHandler = () => {\n    if (!swiper || swiper.destroyed || !swiper.initialized) return;\n    emit('beforeResize');\n    emit('resize');\n  };\n  const createObserver = () => {\n    if (!swiper || swiper.destroyed || !swiper.initialized) return;\n    observer = new ResizeObserver(entries => {\n      animationFrame = window.requestAnimationFrame(() => {\n        const {\n          width,\n          height\n        } = swiper;\n        let newWidth = width;\n        let newHeight = height;\n        entries.forEach(_ref2 => {\n          let {\n            contentBoxSize,\n            contentRect,\n            target\n          } = _ref2;\n          if (target && target !== swiper.el) return;\n          newWidth = contentRect ? contentRect.width : (contentBoxSize[0] || contentBoxSize).inlineSize;\n          newHeight = contentRect ? contentRect.height : (contentBoxSize[0] || contentBoxSize).blockSize;\n        });\n        if (newWidth !== width || newHeight !== height) {\n          resizeHandler();\n        }\n      });\n    });\n    observer.observe(swiper.el);\n  };\n  const removeObserver = () => {\n    if (animationFrame) {\n      window.cancelAnimationFrame(animationFrame);\n    }\n    if (observer && observer.unobserve && swiper.el) {\n      observer.unobserve(swiper.el);\n      observer = null;\n    }\n  };\n  const orientationChangeHandler = () => {\n    if (!swiper || swiper.destroyed || !swiper.initialized) return;\n    emit('orientationchange');\n  };\n  on('init', () => {\n    if (swiper.params.resizeObserver && typeof window.ResizeObserver !== 'undefined') {\n      createObserver();\n      return;\n    }\n    window.addEventListener('resize', resizeHandler);\n    window.addEventListener('orientationchange', orientationChangeHandler);\n  });\n  on('destroy', () => {\n    removeObserver();\n    window.removeEventListener('resize', resizeHandler);\n    window.removeEventListener('orientationchange', orientationChangeHandler);\n  });\n}\n\nfunction Observer(_ref) {\n  let {\n    swiper,\n    extendParams,\n    on,\n    emit\n  } = _ref;\n  const observers = [];\n  const window = getWindow();\n  const attach = function (target, options) {\n    if (options === void 0) {\n      options = {};\n    }\n    const ObserverFunc = window.MutationObserver || window.WebkitMutationObserver;\n    const observer = new ObserverFunc(mutations => {\n      // The observerUpdate event should only be triggered\n      // once despite the number of mutations.  Additional\n      // triggers are redundant and are very costly\n      if (swiper.__preventObserver__) return;\n      if (mutations.length === 1) {\n        emit('observerUpdate', mutations[0]);\n        return;\n      }\n      const observerUpdate = function observerUpdate() {\n        emit('observerUpdate', mutations[0]);\n      };\n      if (window.requestAnimationFrame) {\n        window.requestAnimationFrame(observerUpdate);\n      } else {\n        window.setTimeout(observerUpdate, 0);\n      }\n    });\n    observer.observe(target, {\n      attributes: typeof options.attributes === 'undefined' ? true : options.attributes,\n      childList: typeof options.childList === 'undefined' ? true : options.childList,\n      characterData: typeof options.characterData === 'undefined' ? true : options.characterData\n    });\n    observers.push(observer);\n  };\n  const init = () => {\n    if (!swiper.params.observer) return;\n    if (swiper.params.observeParents) {\n      const containerParents = elementParents(swiper.hostEl);\n      for (let i = 0; i < containerParents.length; i += 1) {\n        attach(containerParents[i]);\n      }\n    }\n    // Observe container\n    attach(swiper.hostEl, {\n      childList: swiper.params.observeSlideChildren\n    });\n\n    // Observe wrapper\n    attach(swiper.wrapperEl, {\n      attributes: false\n    });\n  };\n  const destroy = () => {\n    observers.forEach(observer => {\n      observer.disconnect();\n    });\n    observers.splice(0, observers.length);\n  };\n  extendParams({\n    observer: false,\n    observeParents: false,\n    observeSlideChildren: false\n  });\n  on('init', init);\n  on('destroy', destroy);\n}\n\n/* eslint-disable no-underscore-dangle */\n\nvar eventsEmitter = {\n  on(events, handler, priority) {\n    const self = this;\n    if (!self.eventsListeners || self.destroyed) return self;\n    if (typeof handler !== 'function') return self;\n    const method = priority ? 'unshift' : 'push';\n    events.split(' ').forEach(event => {\n      if (!self.eventsListeners[event]) self.eventsListeners[event] = [];\n      self.eventsListeners[event][method](handler);\n    });\n    return self;\n  },\n  once(events, handler, priority) {\n    const self = this;\n    if (!self.eventsListeners || self.destroyed) return self;\n    if (typeof handler !== 'function') return self;\n    function onceHandler() {\n      self.off(events, onceHandler);\n      if (onceHandler.__emitterProxy) {\n        delete onceHandler.__emitterProxy;\n      }\n      for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n        args[_key] = arguments[_key];\n      }\n      handler.apply(self, args);\n    }\n    onceHandler.__emitterProxy = handler;\n    return self.on(events, onceHandler, priority);\n  },\n  onAny(handler, priority) {\n    const self = this;\n    if (!self.eventsListeners || self.destroyed) return self;\n    if (typeof handler !== 'function') return self;\n    const method = priority ? 'unshift' : 'push';\n    if (self.eventsAnyListeners.indexOf(handler) < 0) {\n      self.eventsAnyListeners[method](handler);\n    }\n    return self;\n  },\n  offAny(handler) {\n    const self = this;\n    if (!self.eventsListeners || self.destroyed) return self;\n    if (!self.eventsAnyListeners) return self;\n    const index = self.eventsAnyListeners.indexOf(handler);\n    if (index >= 0) {\n      self.eventsAnyListeners.splice(index, 1);\n    }\n    return self;\n  },\n  off(events, handler) {\n    const self = this;\n    if (!self.eventsListeners || self.destroyed) return self;\n    if (!self.eventsListeners) return self;\n    events.split(' ').forEach(event => {\n      if (typeof handler === 'undefined') {\n        self.eventsListeners[event] = [];\n      } else if (self.eventsListeners[event]) {\n        self.eventsListeners[event].forEach((eventHandler, index) => {\n          if (eventHandler === handler || eventHandler.__emitterProxy && eventHandler.__emitterProxy === handler) {\n            self.eventsListeners[event].splice(index, 1);\n          }\n        });\n      }\n    });\n    return self;\n  },\n  emit() {\n    const self = this;\n    if (!self.eventsListeners || self.destroyed) return self;\n    if (!self.eventsListeners) return self;\n    let events;\n    let data;\n    let context;\n    for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n      args[_key2] = arguments[_key2];\n    }\n    if (typeof args[0] === 'string' || Array.isArray(args[0])) {\n      events = args[0];\n      data = args.slice(1, args.length);\n      context = self;\n    } else {\n      events = args[0].events;\n      data = args[0].data;\n      context = args[0].context || self;\n    }\n    data.unshift(context);\n    const eventsArray = Array.isArray(events) ? events : events.split(' ');\n    eventsArray.forEach(event => {\n      if (self.eventsAnyListeners && self.eventsAnyListeners.length) {\n        self.eventsAnyListeners.forEach(eventHandler => {\n          eventHandler.apply(context, [event, ...data]);\n        });\n      }\n      if (self.eventsListeners && self.eventsListeners[event]) {\n        self.eventsListeners[event].forEach(eventHandler => {\n          eventHandler.apply(context, data);\n        });\n      }\n    });\n    return self;\n  }\n};\n\nfunction updateSize() {\n  const swiper = this;\n  let width;\n  let height;\n  const el = swiper.el;\n  if (typeof swiper.params.width !== 'undefined' && swiper.params.width !== null) {\n    width = swiper.params.width;\n  } else {\n    width = el.clientWidth;\n  }\n  if (typeof swiper.params.height !== 'undefined' && swiper.params.height !== null) {\n    height = swiper.params.height;\n  } else {\n    height = el.clientHeight;\n  }\n  if (width === 0 && swiper.isHorizontal() || height === 0 && swiper.isVertical()) {\n    return;\n  }\n\n  // Subtract paddings\n  width = width - parseInt(elementStyle(el, 'padding-left') || 0, 10) - parseInt(elementStyle(el, 'padding-right') || 0, 10);\n  height = height - parseInt(elementStyle(el, 'padding-top') || 0, 10) - parseInt(elementStyle(el, 'padding-bottom') || 0, 10);\n  if (Number.isNaN(width)) width = 0;\n  if (Number.isNaN(height)) height = 0;\n  Object.assign(swiper, {\n    width,\n    height,\n    size: swiper.isHorizontal() ? width : height\n  });\n}\n\nfunction updateSlides() {\n  const swiper = this;\n  function getDirectionPropertyValue(node, label) {\n    return parseFloat(node.getPropertyValue(swiper.getDirectionLabel(label)) || 0);\n  }\n  const params = swiper.params;\n  const {\n    wrapperEl,\n    slidesEl,\n    size: swiperSize,\n    rtlTranslate: rtl,\n    wrongRTL\n  } = swiper;\n  const isVirtual = swiper.virtual && params.virtual.enabled;\n  const previousSlidesLength = isVirtual ? swiper.virtual.slides.length : swiper.slides.length;\n  const slides = elementChildren(slidesEl, `.${swiper.params.slideClass}, swiper-slide`);\n  const slidesLength = isVirtual ? swiper.virtual.slides.length : slides.length;\n  let snapGrid = [];\n  const slidesGrid = [];\n  const slidesSizesGrid = [];\n  let offsetBefore = params.slidesOffsetBefore;\n  if (typeof offsetBefore === 'function') {\n    offsetBefore = params.slidesOffsetBefore.call(swiper);\n  }\n  let offsetAfter = params.slidesOffsetAfter;\n  if (typeof offsetAfter === 'function') {\n    offsetAfter = params.slidesOffsetAfter.call(swiper);\n  }\n  const previousSnapGridLength = swiper.snapGrid.length;\n  const previousSlidesGridLength = swiper.slidesGrid.length;\n  let spaceBetween = params.spaceBetween;\n  let slidePosition = -offsetBefore;\n  let prevSlideSize = 0;\n  let index = 0;\n  if (typeof swiperSize === 'undefined') {\n    return;\n  }\n  if (typeof spaceBetween === 'string' && spaceBetween.indexOf('%') >= 0) {\n    spaceBetween = parseFloat(spaceBetween.replace('%', '')) / 100 * swiperSize;\n  } else if (typeof spaceBetween === 'string') {\n    spaceBetween = parseFloat(spaceBetween);\n  }\n  swiper.virtualSize = -spaceBetween;\n\n  // reset margins\n  slides.forEach(slideEl => {\n    if (rtl) {\n      slideEl.style.marginLeft = '';\n    } else {\n      slideEl.style.marginRight = '';\n    }\n    slideEl.style.marginBottom = '';\n    slideEl.style.marginTop = '';\n  });\n\n  // reset cssMode offsets\n  if (params.centeredSlides && params.cssMode) {\n    setCSSProperty(wrapperEl, '--swiper-centered-offset-before', '');\n    setCSSProperty(wrapperEl, '--swiper-centered-offset-after', '');\n  }\n  const gridEnabled = params.grid && params.grid.rows > 1 && swiper.grid;\n  if (gridEnabled) {\n    swiper.grid.initSlides(slides);\n  } else if (swiper.grid) {\n    swiper.grid.unsetSlides();\n  }\n\n  // Calc slides\n  let slideSize;\n  const shouldResetSlideSize = params.slidesPerView === 'auto' && params.breakpoints && Object.keys(params.breakpoints).filter(key => {\n    return typeof params.breakpoints[key].slidesPerView !== 'undefined';\n  }).length > 0;\n  for (let i = 0; i < slidesLength; i += 1) {\n    slideSize = 0;\n    let slide;\n    if (slides[i]) slide = slides[i];\n    if (gridEnabled) {\n      swiper.grid.updateSlide(i, slide, slides);\n    }\n    if (slides[i] && elementStyle(slide, 'display') === 'none') continue; // eslint-disable-line\n\n    if (params.slidesPerView === 'auto') {\n      if (shouldResetSlideSize) {\n        slides[i].style[swiper.getDirectionLabel('width')] = ``;\n      }\n      const slideStyles = getComputedStyle(slide);\n      const currentTransform = slide.style.transform;\n      const currentWebKitTransform = slide.style.webkitTransform;\n      if (currentTransform) {\n        slide.style.transform = 'none';\n      }\n      if (currentWebKitTransform) {\n        slide.style.webkitTransform = 'none';\n      }\n      if (params.roundLengths) {\n        slideSize = swiper.isHorizontal() ? elementOuterSize(slide, 'width', true) : elementOuterSize(slide, 'height', true);\n      } else {\n        // eslint-disable-next-line\n        const width = getDirectionPropertyValue(slideStyles, 'width');\n        const paddingLeft = getDirectionPropertyValue(slideStyles, 'padding-left');\n        const paddingRight = getDirectionPropertyValue(slideStyles, 'padding-right');\n        const marginLeft = getDirectionPropertyValue(slideStyles, 'margin-left');\n        const marginRight = getDirectionPropertyValue(slideStyles, 'margin-right');\n        const boxSizing = slideStyles.getPropertyValue('box-sizing');\n        if (boxSizing && boxSizing === 'border-box') {\n          slideSize = width + marginLeft + marginRight;\n        } else {\n          const {\n            clientWidth,\n            offsetWidth\n          } = slide;\n          slideSize = width + paddingLeft + paddingRight + marginLeft + marginRight + (offsetWidth - clientWidth);\n        }\n      }\n      if (currentTransform) {\n        slide.style.transform = currentTransform;\n      }\n      if (currentWebKitTransform) {\n        slide.style.webkitTransform = currentWebKitTransform;\n      }\n      if (params.roundLengths) slideSize = Math.floor(slideSize);\n    } else {\n      slideSize = (swiperSize - (params.slidesPerView - 1) * spaceBetween) / params.slidesPerView;\n      if (params.roundLengths) slideSize = Math.floor(slideSize);\n      if (slides[i]) {\n        slides[i].style[swiper.getDirectionLabel('width')] = `${slideSize}px`;\n      }\n    }\n    if (slides[i]) {\n      slides[i].swiperSlideSize = slideSize;\n    }\n    slidesSizesGrid.push(slideSize);\n    if (params.centeredSlides) {\n      slidePosition = slidePosition + slideSize / 2 + prevSlideSize / 2 + spaceBetween;\n      if (prevSlideSize === 0 && i !== 0) slidePosition = slidePosition - swiperSize / 2 - spaceBetween;\n      if (i === 0) slidePosition = slidePosition - swiperSize / 2 - spaceBetween;\n      if (Math.abs(slidePosition) < 1 / 1000) slidePosition = 0;\n      if (params.roundLengths) slidePosition = Math.floor(slidePosition);\n      if (index % params.slidesPerGroup === 0) snapGrid.push(slidePosition);\n      slidesGrid.push(slidePosition);\n    } else {\n      if (params.roundLengths) slidePosition = Math.floor(slidePosition);\n      if ((index - Math.min(swiper.params.slidesPerGroupSkip, index)) % swiper.params.slidesPerGroup === 0) snapGrid.push(slidePosition);\n      slidesGrid.push(slidePosition);\n      slidePosition = slidePosition + slideSize + spaceBetween;\n    }\n    swiper.virtualSize += slideSize + spaceBetween;\n    prevSlideSize = slideSize;\n    index += 1;\n  }\n  swiper.virtualSize = Math.max(swiper.virtualSize, swiperSize) + offsetAfter;\n  if (rtl && wrongRTL && (params.effect === 'slide' || params.effect === 'coverflow')) {\n    wrapperEl.style.width = `${swiper.virtualSize + spaceBetween}px`;\n  }\n  if (params.setWrapperSize) {\n    wrapperEl.style[swiper.getDirectionLabel('width')] = `${swiper.virtualSize + spaceBetween}px`;\n  }\n  if (gridEnabled) {\n    swiper.grid.updateWrapperSize(slideSize, snapGrid);\n  }\n\n  // Remove last grid elements depending on width\n  if (!params.centeredSlides) {\n    const newSlidesGrid = [];\n    for (let i = 0; i < snapGrid.length; i += 1) {\n      let slidesGridItem = snapGrid[i];\n      if (params.roundLengths) slidesGridItem = Math.floor(slidesGridItem);\n      if (snapGrid[i] <= swiper.virtualSize - swiperSize) {\n        newSlidesGrid.push(slidesGridItem);\n      }\n    }\n    snapGrid = newSlidesGrid;\n    if (Math.floor(swiper.virtualSize - swiperSize) - Math.floor(snapGrid[snapGrid.length - 1]) > 1) {\n      snapGrid.push(swiper.virtualSize - swiperSize);\n    }\n  }\n  if (isVirtual && params.loop) {\n    const size = slidesSizesGrid[0] + spaceBetween;\n    if (params.slidesPerGroup > 1) {\n      const groups = Math.ceil((swiper.virtual.slidesBefore + swiper.virtual.slidesAfter) / params.slidesPerGroup);\n      const groupSize = size * params.slidesPerGroup;\n      for (let i = 0; i < groups; i += 1) {\n        snapGrid.push(snapGrid[snapGrid.length - 1] + groupSize);\n      }\n    }\n    for (let i = 0; i < swiper.virtual.slidesBefore + swiper.virtual.slidesAfter; i += 1) {\n      if (params.slidesPerGroup === 1) {\n        snapGrid.push(snapGrid[snapGrid.length - 1] + size);\n      }\n      slidesGrid.push(slidesGrid[slidesGrid.length - 1] + size);\n      swiper.virtualSize += size;\n    }\n  }\n  if (snapGrid.length === 0) snapGrid = [0];\n  if (spaceBetween !== 0) {\n    const key = swiper.isHorizontal() && rtl ? 'marginLeft' : swiper.getDirectionLabel('marginRight');\n    slides.filter((_, slideIndex) => {\n      if (!params.cssMode || params.loop) return true;\n      if (slideIndex === slides.length - 1) {\n        return false;\n      }\n      return true;\n    }).forEach(slideEl => {\n      slideEl.style[key] = `${spaceBetween}px`;\n    });\n  }\n  if (params.centeredSlides && params.centeredSlidesBounds) {\n    let allSlidesSize = 0;\n    slidesSizesGrid.forEach(slideSizeValue => {\n      allSlidesSize += slideSizeValue + (spaceBetween || 0);\n    });\n    allSlidesSize -= spaceBetween;\n    const maxSnap = allSlidesSize - swiperSize;\n    snapGrid = snapGrid.map(snap => {\n      if (snap <= 0) return -offsetBefore;\n      if (snap > maxSnap) return maxSnap + offsetAfter;\n      return snap;\n    });\n  }\n  if (params.centerInsufficientSlides) {\n    let allSlidesSize = 0;\n    slidesSizesGrid.forEach(slideSizeValue => {\n      allSlidesSize += slideSizeValue + (spaceBetween || 0);\n    });\n    allSlidesSize -= spaceBetween;\n    if (allSlidesSize < swiperSize) {\n      const allSlidesOffset = (swiperSize - allSlidesSize) / 2;\n      snapGrid.forEach((snap, snapIndex) => {\n        snapGrid[snapIndex] = snap - allSlidesOffset;\n      });\n      slidesGrid.forEach((snap, snapIndex) => {\n        slidesGrid[snapIndex] = snap + allSlidesOffset;\n      });\n    }\n  }\n  Object.assign(swiper, {\n    slides,\n    snapGrid,\n    slidesGrid,\n    slidesSizesGrid\n  });\n  if (params.centeredSlides && params.cssMode && !params.centeredSlidesBounds) {\n    setCSSProperty(wrapperEl, '--swiper-centered-offset-before', `${-snapGrid[0]}px`);\n    setCSSProperty(wrapperEl, '--swiper-centered-offset-after', `${swiper.size / 2 - slidesSizesGrid[slidesSizesGrid.length - 1] / 2}px`);\n    const addToSnapGrid = -swiper.snapGrid[0];\n    const addToSlidesGrid = -swiper.slidesGrid[0];\n    swiper.snapGrid = swiper.snapGrid.map(v => v + addToSnapGrid);\n    swiper.slidesGrid = swiper.slidesGrid.map(v => v + addToSlidesGrid);\n  }\n  if (slidesLength !== previousSlidesLength) {\n    swiper.emit('slidesLengthChange');\n  }\n  if (snapGrid.length !== previousSnapGridLength) {\n    if (swiper.params.watchOverflow) swiper.checkOverflow();\n    swiper.emit('snapGridLengthChange');\n  }\n  if (slidesGrid.length !== previousSlidesGridLength) {\n    swiper.emit('slidesGridLengthChange');\n  }\n  if (params.watchSlidesProgress) {\n    swiper.updateSlidesOffset();\n  }\n  swiper.emit('slidesUpdated');\n  if (!isVirtual && !params.cssMode && (params.effect === 'slide' || params.effect === 'fade')) {\n    const backFaceHiddenClass = `${params.containerModifierClass}backface-hidden`;\n    const hasClassBackfaceClassAdded = swiper.el.classList.contains(backFaceHiddenClass);\n    if (slidesLength <= params.maxBackfaceHiddenSlides) {\n      if (!hasClassBackfaceClassAdded) swiper.el.classList.add(backFaceHiddenClass);\n    } else if (hasClassBackfaceClassAdded) {\n      swiper.el.classList.remove(backFaceHiddenClass);\n    }\n  }\n}\n\nfunction updateAutoHeight(speed) {\n  const swiper = this;\n  const activeSlides = [];\n  const isVirtual = swiper.virtual && swiper.params.virtual.enabled;\n  let newHeight = 0;\n  let i;\n  if (typeof speed === 'number') {\n    swiper.setTransition(speed);\n  } else if (speed === true) {\n    swiper.setTransition(swiper.params.speed);\n  }\n  const getSlideByIndex = index => {\n    if (isVirtual) {\n      return swiper.slides[swiper.getSlideIndexByData(index)];\n    }\n    return swiper.slides[index];\n  };\n  // Find slides currently in view\n  if (swiper.params.slidesPerView !== 'auto' && swiper.params.slidesPerView > 1) {\n    if (swiper.params.centeredSlides) {\n      (swiper.visibleSlides || []).forEach(slide => {\n        activeSlides.push(slide);\n      });\n    } else {\n      for (i = 0; i < Math.ceil(swiper.params.slidesPerView); i += 1) {\n        const index = swiper.activeIndex + i;\n        if (index > swiper.slides.length && !isVirtual) break;\n        activeSlides.push(getSlideByIndex(index));\n      }\n    }\n  } else {\n    activeSlides.push(getSlideByIndex(swiper.activeIndex));\n  }\n\n  // Find new height from highest slide in view\n  for (i = 0; i < activeSlides.length; i += 1) {\n    if (typeof activeSlides[i] !== 'undefined') {\n      const height = activeSlides[i].offsetHeight;\n      newHeight = height > newHeight ? height : newHeight;\n    }\n  }\n\n  // Update Height\n  if (newHeight || newHeight === 0) swiper.wrapperEl.style.height = `${newHeight}px`;\n}\n\nfunction updateSlidesOffset() {\n  const swiper = this;\n  const slides = swiper.slides;\n  // eslint-disable-next-line\n  const minusOffset = swiper.isElement ? swiper.isHorizontal() ? swiper.wrapperEl.offsetLeft : swiper.wrapperEl.offsetTop : 0;\n  for (let i = 0; i < slides.length; i += 1) {\n    slides[i].swiperSlideOffset = (swiper.isHorizontal() ? slides[i].offsetLeft : slides[i].offsetTop) - minusOffset - swiper.cssOverflowAdjustment();\n  }\n}\n\nfunction updateSlidesProgress(translate) {\n  if (translate === void 0) {\n    translate = this && this.translate || 0;\n  }\n  const swiper = this;\n  const params = swiper.params;\n  const {\n    slides,\n    rtlTranslate: rtl,\n    snapGrid\n  } = swiper;\n  if (slides.length === 0) return;\n  if (typeof slides[0].swiperSlideOffset === 'undefined') swiper.updateSlidesOffset();\n  let offsetCenter = -translate;\n  if (rtl) offsetCenter = translate;\n\n  // Visible Slides\n  slides.forEach(slideEl => {\n    slideEl.classList.remove(params.slideVisibleClass, params.slideFullyVisibleClass);\n  });\n  swiper.visibleSlidesIndexes = [];\n  swiper.visibleSlides = [];\n  let spaceBetween = params.spaceBetween;\n  if (typeof spaceBetween === 'string' && spaceBetween.indexOf('%') >= 0) {\n    spaceBetween = parseFloat(spaceBetween.replace('%', '')) / 100 * swiper.size;\n  } else if (typeof spaceBetween === 'string') {\n    spaceBetween = parseFloat(spaceBetween);\n  }\n  for (let i = 0; i < slides.length; i += 1) {\n    const slide = slides[i];\n    let slideOffset = slide.swiperSlideOffset;\n    if (params.cssMode && params.centeredSlides) {\n      slideOffset -= slides[0].swiperSlideOffset;\n    }\n    const slideProgress = (offsetCenter + (params.centeredSlides ? swiper.minTranslate() : 0) - slideOffset) / (slide.swiperSlideSize + spaceBetween);\n    const originalSlideProgress = (offsetCenter - snapGrid[0] + (params.centeredSlides ? swiper.minTranslate() : 0) - slideOffset) / (slide.swiperSlideSize + spaceBetween);\n    const slideBefore = -(offsetCenter - slideOffset);\n    const slideAfter = slideBefore + swiper.slidesSizesGrid[i];\n    const isFullyVisible = slideBefore >= 0 && slideBefore <= swiper.size - swiper.slidesSizesGrid[i];\n    const isVisible = slideBefore >= 0 && slideBefore < swiper.size - 1 || slideAfter > 1 && slideAfter <= swiper.size || slideBefore <= 0 && slideAfter >= swiper.size;\n    if (isVisible) {\n      swiper.visibleSlides.push(slide);\n      swiper.visibleSlidesIndexes.push(i);\n      slides[i].classList.add(params.slideVisibleClass);\n    }\n    if (isFullyVisible) {\n      slides[i].classList.add(params.slideFullyVisibleClass);\n    }\n    slide.progress = rtl ? -slideProgress : slideProgress;\n    slide.originalProgress = rtl ? -originalSlideProgress : originalSlideProgress;\n  }\n}\n\nfunction updateProgress(translate) {\n  const swiper = this;\n  if (typeof translate === 'undefined') {\n    const multiplier = swiper.rtlTranslate ? -1 : 1;\n    // eslint-disable-next-line\n    translate = swiper && swiper.translate && swiper.translate * multiplier || 0;\n  }\n  const params = swiper.params;\n  const translatesDiff = swiper.maxTranslate() - swiper.minTranslate();\n  let {\n    progress,\n    isBeginning,\n    isEnd,\n    progressLoop\n  } = swiper;\n  const wasBeginning = isBeginning;\n  const wasEnd = isEnd;\n  if (translatesDiff === 0) {\n    progress = 0;\n    isBeginning = true;\n    isEnd = true;\n  } else {\n    progress = (translate - swiper.minTranslate()) / translatesDiff;\n    const isBeginningRounded = Math.abs(translate - swiper.minTranslate()) < 1;\n    const isEndRounded = Math.abs(translate - swiper.maxTranslate()) < 1;\n    isBeginning = isBeginningRounded || progress <= 0;\n    isEnd = isEndRounded || progress >= 1;\n    if (isBeginningRounded) progress = 0;\n    if (isEndRounded) progress = 1;\n  }\n  if (params.loop) {\n    const firstSlideIndex = swiper.getSlideIndexByData(0);\n    const lastSlideIndex = swiper.getSlideIndexByData(swiper.slides.length - 1);\n    const firstSlideTranslate = swiper.slidesGrid[firstSlideIndex];\n    const lastSlideTranslate = swiper.slidesGrid[lastSlideIndex];\n    const translateMax = swiper.slidesGrid[swiper.slidesGrid.length - 1];\n    const translateAbs = Math.abs(translate);\n    if (translateAbs >= firstSlideTranslate) {\n      progressLoop = (translateAbs - firstSlideTranslate) / translateMax;\n    } else {\n      progressLoop = (translateAbs + translateMax - lastSlideTranslate) / translateMax;\n    }\n    if (progressLoop > 1) progressLoop -= 1;\n  }\n  Object.assign(swiper, {\n    progress,\n    progressLoop,\n    isBeginning,\n    isEnd\n  });\n  if (params.watchSlidesProgress || params.centeredSlides && params.autoHeight) swiper.updateSlidesProgress(translate);\n  if (isBeginning && !wasBeginning) {\n    swiper.emit('reachBeginning toEdge');\n  }\n  if (isEnd && !wasEnd) {\n    swiper.emit('reachEnd toEdge');\n  }\n  if (wasBeginning && !isBeginning || wasEnd && !isEnd) {\n    swiper.emit('fromEdge');\n  }\n  swiper.emit('progress', progress);\n}\n\nconst toggleSlideClasses = (slideEl, condition, className) => {\n  if (condition && !slideEl.classList.contains(className)) {\n    slideEl.classList.add(className);\n  } else if (!condition && slideEl.classList.contains(className)) {\n    slideEl.classList.remove(className);\n  }\n};\nfunction updateSlidesClasses() {\n  const swiper = this;\n  const {\n    slides,\n    params,\n    slidesEl,\n    activeIndex\n  } = swiper;\n  const isVirtual = swiper.virtual && params.virtual.enabled;\n  const gridEnabled = swiper.grid && params.grid && params.grid.rows > 1;\n  const getFilteredSlide = selector => {\n    return elementChildren(slidesEl, `.${params.slideClass}${selector}, swiper-slide${selector}`)[0];\n  };\n  let activeSlide;\n  let prevSlide;\n  let nextSlide;\n  if (isVirtual) {\n    if (params.loop) {\n      let slideIndex = activeIndex - swiper.virtual.slidesBefore;\n      if (slideIndex < 0) slideIndex = swiper.virtual.slides.length + slideIndex;\n      if (slideIndex >= swiper.virtual.slides.length) slideIndex -= swiper.virtual.slides.length;\n      activeSlide = getFilteredSlide(`[data-swiper-slide-index=\"${slideIndex}\"]`);\n    } else {\n      activeSlide = getFilteredSlide(`[data-swiper-slide-index=\"${activeIndex}\"]`);\n    }\n  } else {\n    if (gridEnabled) {\n      activeSlide = slides.filter(slideEl => slideEl.column === activeIndex)[0];\n      nextSlide = slides.filter(slideEl => slideEl.column === activeIndex + 1)[0];\n      prevSlide = slides.filter(slideEl => slideEl.column === activeIndex - 1)[0];\n    } else {\n      activeSlide = slides[activeIndex];\n    }\n  }\n  if (activeSlide) {\n    if (!gridEnabled) {\n      // Next Slide\n      nextSlide = elementNextAll(activeSlide, `.${params.slideClass}, swiper-slide`)[0];\n      if (params.loop && !nextSlide) {\n        nextSlide = slides[0];\n      }\n\n      // Prev Slide\n      prevSlide = elementPrevAll(activeSlide, `.${params.slideClass}, swiper-slide`)[0];\n      if (params.loop && !prevSlide === 0) {\n        prevSlide = slides[slides.length - 1];\n      }\n    }\n  }\n  slides.forEach(slideEl => {\n    toggleSlideClasses(slideEl, slideEl === activeSlide, params.slideActiveClass);\n    toggleSlideClasses(slideEl, slideEl === nextSlide, params.slideNextClass);\n    toggleSlideClasses(slideEl, slideEl === prevSlide, params.slidePrevClass);\n  });\n  swiper.emitSlidesClasses();\n}\n\nconst processLazyPreloader = (swiper, imageEl) => {\n  if (!swiper || swiper.destroyed || !swiper.params) return;\n  const slideSelector = () => swiper.isElement ? `swiper-slide` : `.${swiper.params.slideClass}`;\n  const slideEl = imageEl.closest(slideSelector());\n  if (slideEl) {\n    let lazyEl = slideEl.querySelector(`.${swiper.params.lazyPreloaderClass}`);\n    if (!lazyEl && swiper.isElement) {\n      if (slideEl.shadowRoot) {\n        lazyEl = slideEl.shadowRoot.querySelector(`.${swiper.params.lazyPreloaderClass}`);\n      } else {\n        // init later\n        requestAnimationFrame(() => {\n          if (slideEl.shadowRoot) {\n            lazyEl = slideEl.shadowRoot.querySelector(`.${swiper.params.lazyPreloaderClass}`);\n            if (lazyEl) lazyEl.remove();\n          }\n        });\n      }\n    }\n    if (lazyEl) lazyEl.remove();\n  }\n};\nconst unlazy = (swiper, index) => {\n  if (!swiper.slides[index]) return;\n  const imageEl = swiper.slides[index].querySelector('[loading=\"lazy\"]');\n  if (imageEl) imageEl.removeAttribute('loading');\n};\nconst preload = swiper => {\n  if (!swiper || swiper.destroyed || !swiper.params) return;\n  let amount = swiper.params.lazyPreloadPrevNext;\n  const len = swiper.slides.length;\n  if (!len || !amount || amount < 0) return;\n  amount = Math.min(amount, len);\n  const slidesPerView = swiper.params.slidesPerView === 'auto' ? swiper.slidesPerViewDynamic() : Math.ceil(swiper.params.slidesPerView);\n  const activeIndex = swiper.activeIndex;\n  if (swiper.params.grid && swiper.params.grid.rows > 1) {\n    const activeColumn = activeIndex;\n    const preloadColumns = [activeColumn - amount];\n    preloadColumns.push(...Array.from({\n      length: amount\n    }).map((_, i) => {\n      return activeColumn + slidesPerView + i;\n    }));\n    swiper.slides.forEach((slideEl, i) => {\n      if (preloadColumns.includes(slideEl.column)) unlazy(swiper, i);\n    });\n    return;\n  }\n  const slideIndexLastInView = activeIndex + slidesPerView - 1;\n  if (swiper.params.rewind || swiper.params.loop) {\n    for (let i = activeIndex - amount; i <= slideIndexLastInView + amount; i += 1) {\n      const realIndex = (i % len + len) % len;\n      if (realIndex < activeIndex || realIndex > slideIndexLastInView) unlazy(swiper, realIndex);\n    }\n  } else {\n    for (let i = Math.max(activeIndex - amount, 0); i <= Math.min(slideIndexLastInView + amount, len - 1); i += 1) {\n      if (i !== activeIndex && (i > slideIndexLastInView || i < activeIndex)) {\n        unlazy(swiper, i);\n      }\n    }\n  }\n};\n\nfunction getActiveIndexByTranslate(swiper) {\n  const {\n    slidesGrid,\n    params\n  } = swiper;\n  const translate = swiper.rtlTranslate ? swiper.translate : -swiper.translate;\n  let activeIndex;\n  for (let i = 0; i < slidesGrid.length; i += 1) {\n    if (typeof slidesGrid[i + 1] !== 'undefined') {\n      if (translate >= slidesGrid[i] && translate < slidesGrid[i + 1] - (slidesGrid[i + 1] - slidesGrid[i]) / 2) {\n        activeIndex = i;\n      } else if (translate >= slidesGrid[i] && translate < slidesGrid[i + 1]) {\n        activeIndex = i + 1;\n      }\n    } else if (translate >= slidesGrid[i]) {\n      activeIndex = i;\n    }\n  }\n  // Normalize slideIndex\n  if (params.normalizeSlideIndex) {\n    if (activeIndex < 0 || typeof activeIndex === 'undefined') activeIndex = 0;\n  }\n  return activeIndex;\n}\nfunction updateActiveIndex(newActiveIndex) {\n  const swiper = this;\n  const translate = swiper.rtlTranslate ? swiper.translate : -swiper.translate;\n  const {\n    snapGrid,\n    params,\n    activeIndex: previousIndex,\n    realIndex: previousRealIndex,\n    snapIndex: previousSnapIndex\n  } = swiper;\n  let activeIndex = newActiveIndex;\n  let snapIndex;\n  const getVirtualRealIndex = aIndex => {\n    let realIndex = aIndex - swiper.virtual.slidesBefore;\n    if (realIndex < 0) {\n      realIndex = swiper.virtual.slides.length + realIndex;\n    }\n    if (realIndex >= swiper.virtual.slides.length) {\n      realIndex -= swiper.virtual.slides.length;\n    }\n    return realIndex;\n  };\n  if (typeof activeIndex === 'undefined') {\n    activeIndex = getActiveIndexByTranslate(swiper);\n  }\n  if (snapGrid.indexOf(translate) >= 0) {\n    snapIndex = snapGrid.indexOf(translate);\n  } else {\n    const skip = Math.min(params.slidesPerGroupSkip, activeIndex);\n    snapIndex = skip + Math.floor((activeIndex - skip) / params.slidesPerGroup);\n  }\n  if (snapIndex >= snapGrid.length) snapIndex = snapGrid.length - 1;\n  if (activeIndex === previousIndex && !swiper.params.loop) {\n    if (snapIndex !== previousSnapIndex) {\n      swiper.snapIndex = snapIndex;\n      swiper.emit('snapIndexChange');\n    }\n    return;\n  }\n  if (activeIndex === previousIndex && swiper.params.loop && swiper.virtual && swiper.params.virtual.enabled) {\n    swiper.realIndex = getVirtualRealIndex(activeIndex);\n    return;\n  }\n  const gridEnabled = swiper.grid && params.grid && params.grid.rows > 1;\n\n  // Get real index\n  let realIndex;\n  if (swiper.virtual && params.virtual.enabled && params.loop) {\n    realIndex = getVirtualRealIndex(activeIndex);\n  } else if (gridEnabled) {\n    const firstSlideInColumn = swiper.slides.filter(slideEl => slideEl.column === activeIndex)[0];\n    let activeSlideIndex = parseInt(firstSlideInColumn.getAttribute('data-swiper-slide-index'), 10);\n    if (Number.isNaN(activeSlideIndex)) {\n      activeSlideIndex = Math.max(swiper.slides.indexOf(firstSlideInColumn), 0);\n    }\n    realIndex = Math.floor(activeSlideIndex / params.grid.rows);\n  } else if (swiper.slides[activeIndex]) {\n    const slideIndex = swiper.slides[activeIndex].getAttribute('data-swiper-slide-index');\n    if (slideIndex) {\n      realIndex = parseInt(slideIndex, 10);\n    } else {\n      realIndex = activeIndex;\n    }\n  } else {\n    realIndex = activeIndex;\n  }\n  Object.assign(swiper, {\n    previousSnapIndex,\n    snapIndex,\n    previousRealIndex,\n    realIndex,\n    previousIndex,\n    activeIndex\n  });\n  if (swiper.initialized) {\n    preload(swiper);\n  }\n  swiper.emit('activeIndexChange');\n  swiper.emit('snapIndexChange');\n  if (swiper.initialized || swiper.params.runCallbacksOnInit) {\n    if (previousRealIndex !== realIndex) {\n      swiper.emit('realIndexChange');\n    }\n    swiper.emit('slideChange');\n  }\n}\n\nfunction updateClickedSlide(el, path) {\n  const swiper = this;\n  const params = swiper.params;\n  let slide = el.closest(`.${params.slideClass}, swiper-slide`);\n  if (!slide && swiper.isElement && path && path.length > 1 && path.includes(el)) {\n    [...path.slice(path.indexOf(el) + 1, path.length)].forEach(pathEl => {\n      if (!slide && pathEl.matches && pathEl.matches(`.${params.slideClass}, swiper-slide`)) {\n        slide = pathEl;\n      }\n    });\n  }\n  let slideFound = false;\n  let slideIndex;\n  if (slide) {\n    for (let i = 0; i < swiper.slides.length; i += 1) {\n      if (swiper.slides[i] === slide) {\n        slideFound = true;\n        slideIndex = i;\n        break;\n      }\n    }\n  }\n  if (slide && slideFound) {\n    swiper.clickedSlide = slide;\n    if (swiper.virtual && swiper.params.virtual.enabled) {\n      swiper.clickedIndex = parseInt(slide.getAttribute('data-swiper-slide-index'), 10);\n    } else {\n      swiper.clickedIndex = slideIndex;\n    }\n  } else {\n    swiper.clickedSlide = undefined;\n    swiper.clickedIndex = undefined;\n    return;\n  }\n  if (params.slideToClickedSlide && swiper.clickedIndex !== undefined && swiper.clickedIndex !== swiper.activeIndex) {\n    swiper.slideToClickedSlide();\n  }\n}\n\nvar update = {\n  updateSize,\n  updateSlides,\n  updateAutoHeight,\n  updateSlidesOffset,\n  updateSlidesProgress,\n  updateProgress,\n  updateSlidesClasses,\n  updateActiveIndex,\n  updateClickedSlide\n};\n\nfunction getSwiperTranslate(axis) {\n  if (axis === void 0) {\n    axis = this.isHorizontal() ? 'x' : 'y';\n  }\n  const swiper = this;\n  const {\n    params,\n    rtlTranslate: rtl,\n    translate,\n    wrapperEl\n  } = swiper;\n  if (params.virtualTranslate) {\n    return rtl ? -translate : translate;\n  }\n  if (params.cssMode) {\n    return translate;\n  }\n  let currentTranslate = getTranslate(wrapperEl, axis);\n  currentTranslate += swiper.cssOverflowAdjustment();\n  if (rtl) currentTranslate = -currentTranslate;\n  return currentTranslate || 0;\n}\n\nfunction setTranslate(translate, byController) {\n  const swiper = this;\n  const {\n    rtlTranslate: rtl,\n    params,\n    wrapperEl,\n    progress\n  } = swiper;\n  let x = 0;\n  let y = 0;\n  const z = 0;\n  if (swiper.isHorizontal()) {\n    x = rtl ? -translate : translate;\n  } else {\n    y = translate;\n  }\n  if (params.roundLengths) {\n    x = Math.floor(x);\n    y = Math.floor(y);\n  }\n  swiper.previousTranslate = swiper.translate;\n  swiper.translate = swiper.isHorizontal() ? x : y;\n  if (params.cssMode) {\n    wrapperEl[swiper.isHorizontal() ? 'scrollLeft' : 'scrollTop'] = swiper.isHorizontal() ? -x : -y;\n  } else if (!params.virtualTranslate) {\n    if (swiper.isHorizontal()) {\n      x -= swiper.cssOverflowAdjustment();\n    } else {\n      y -= swiper.cssOverflowAdjustment();\n    }\n    wrapperEl.style.transform = `translate3d(${x}px, ${y}px, ${z}px)`;\n  }\n\n  // Check if we need to update progress\n  let newProgress;\n  const translatesDiff = swiper.maxTranslate() - swiper.minTranslate();\n  if (translatesDiff === 0) {\n    newProgress = 0;\n  } else {\n    newProgress = (translate - swiper.minTranslate()) / translatesDiff;\n  }\n  if (newProgress !== progress) {\n    swiper.updateProgress(translate);\n  }\n  swiper.emit('setTranslate', swiper.translate, byController);\n}\n\nfunction minTranslate() {\n  return -this.snapGrid[0];\n}\n\nfunction maxTranslate() {\n  return -this.snapGrid[this.snapGrid.length - 1];\n}\n\nfunction translateTo(translate, speed, runCallbacks, translateBounds, internal) {\n  if (translate === void 0) {\n    translate = 0;\n  }\n  if (speed === void 0) {\n    speed = this.params.speed;\n  }\n  if (runCallbacks === void 0) {\n    runCallbacks = true;\n  }\n  if (translateBounds === void 0) {\n    translateBounds = true;\n  }\n  const swiper = this;\n  const {\n    params,\n    wrapperEl\n  } = swiper;\n  if (swiper.animating && params.preventInteractionOnTransition) {\n    return false;\n  }\n  const minTranslate = swiper.minTranslate();\n  const maxTranslate = swiper.maxTranslate();\n  let newTranslate;\n  if (translateBounds && translate > minTranslate) newTranslate = minTranslate;else if (translateBounds && translate < maxTranslate) newTranslate = maxTranslate;else newTranslate = translate;\n\n  // Update progress\n  swiper.updateProgress(newTranslate);\n  if (params.cssMode) {\n    const isH = swiper.isHorizontal();\n    if (speed === 0) {\n      wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = -newTranslate;\n    } else {\n      if (!swiper.support.smoothScroll) {\n        animateCSSModeScroll({\n          swiper,\n          targetPosition: -newTranslate,\n          side: isH ? 'left' : 'top'\n        });\n        return true;\n      }\n      wrapperEl.scrollTo({\n        [isH ? 'left' : 'top']: -newTranslate,\n        behavior: 'smooth'\n      });\n    }\n    return true;\n  }\n  if (speed === 0) {\n    swiper.setTransition(0);\n    swiper.setTranslate(newTranslate);\n    if (runCallbacks) {\n      swiper.emit('beforeTransitionStart', speed, internal);\n      swiper.emit('transitionEnd');\n    }\n  } else {\n    swiper.setTransition(speed);\n    swiper.setTranslate(newTranslate);\n    if (runCallbacks) {\n      swiper.emit('beforeTransitionStart', speed, internal);\n      swiper.emit('transitionStart');\n    }\n    if (!swiper.animating) {\n      swiper.animating = true;\n      if (!swiper.onTranslateToWrapperTransitionEnd) {\n        swiper.onTranslateToWrapperTransitionEnd = function transitionEnd(e) {\n          if (!swiper || swiper.destroyed) return;\n          if (e.target !== this) return;\n          swiper.wrapperEl.removeEventListener('transitionend', swiper.onTranslateToWrapperTransitionEnd);\n          swiper.onTranslateToWrapperTransitionEnd = null;\n          delete swiper.onTranslateToWrapperTransitionEnd;\n          swiper.animating = false;\n          if (runCallbacks) {\n            swiper.emit('transitionEnd');\n          }\n        };\n      }\n      swiper.wrapperEl.addEventListener('transitionend', swiper.onTranslateToWrapperTransitionEnd);\n    }\n  }\n  return true;\n}\n\nvar translate = {\n  getTranslate: getSwiperTranslate,\n  setTranslate,\n  minTranslate,\n  maxTranslate,\n  translateTo\n};\n\nfunction setTransition(duration, byController) {\n  const swiper = this;\n  if (!swiper.params.cssMode) {\n    swiper.wrapperEl.style.transitionDuration = `${duration}ms`;\n    swiper.wrapperEl.style.transitionDelay = duration === 0 ? `0ms` : '';\n  }\n  swiper.emit('setTransition', duration, byController);\n}\n\nfunction transitionEmit(_ref) {\n  let {\n    swiper,\n    runCallbacks,\n    direction,\n    step\n  } = _ref;\n  const {\n    activeIndex,\n    previousIndex\n  } = swiper;\n  let dir = direction;\n  if (!dir) {\n    if (activeIndex > previousIndex) dir = 'next';else if (activeIndex < previousIndex) dir = 'prev';else dir = 'reset';\n  }\n  swiper.emit(`transition${step}`);\n  if (runCallbacks && activeIndex !== previousIndex) {\n    if (dir === 'reset') {\n      swiper.emit(`slideResetTransition${step}`);\n      return;\n    }\n    swiper.emit(`slideChangeTransition${step}`);\n    if (dir === 'next') {\n      swiper.emit(`slideNextTransition${step}`);\n    } else {\n      swiper.emit(`slidePrevTransition${step}`);\n    }\n  }\n}\n\nfunction transitionStart(runCallbacks, direction) {\n  if (runCallbacks === void 0) {\n    runCallbacks = true;\n  }\n  const swiper = this;\n  const {\n    params\n  } = swiper;\n  if (params.cssMode) return;\n  if (params.autoHeight) {\n    swiper.updateAutoHeight();\n  }\n  transitionEmit({\n    swiper,\n    runCallbacks,\n    direction,\n    step: 'Start'\n  });\n}\n\nfunction transitionEnd(runCallbacks, direction) {\n  if (runCallbacks === void 0) {\n    runCallbacks = true;\n  }\n  const swiper = this;\n  const {\n    params\n  } = swiper;\n  swiper.animating = false;\n  if (params.cssMode) return;\n  swiper.setTransition(0);\n  transitionEmit({\n    swiper,\n    runCallbacks,\n    direction,\n    step: 'End'\n  });\n}\n\nvar transition = {\n  setTransition,\n  transitionStart,\n  transitionEnd\n};\n\nfunction slideTo(index, speed, runCallbacks, internal, initial) {\n  if (index === void 0) {\n    index = 0;\n  }\n  if (runCallbacks === void 0) {\n    runCallbacks = true;\n  }\n  if (typeof index === 'string') {\n    index = parseInt(index, 10);\n  }\n  const swiper = this;\n  let slideIndex = index;\n  if (slideIndex < 0) slideIndex = 0;\n  const {\n    params,\n    snapGrid,\n    slidesGrid,\n    previousIndex,\n    activeIndex,\n    rtlTranslate: rtl,\n    wrapperEl,\n    enabled\n  } = swiper;\n  if (!enabled && !internal && !initial || swiper.destroyed || swiper.animating && params.preventInteractionOnTransition) {\n    return false;\n  }\n  if (typeof speed === 'undefined') {\n    speed = swiper.params.speed;\n  }\n  const skip = Math.min(swiper.params.slidesPerGroupSkip, slideIndex);\n  let snapIndex = skip + Math.floor((slideIndex - skip) / swiper.params.slidesPerGroup);\n  if (snapIndex >= snapGrid.length) snapIndex = snapGrid.length - 1;\n  const translate = -snapGrid[snapIndex];\n  // Normalize slideIndex\n  if (params.normalizeSlideIndex) {\n    for (let i = 0; i < slidesGrid.length; i += 1) {\n      const normalizedTranslate = -Math.floor(translate * 100);\n      const normalizedGrid = Math.floor(slidesGrid[i] * 100);\n      const normalizedGridNext = Math.floor(slidesGrid[i + 1] * 100);\n      if (typeof slidesGrid[i + 1] !== 'undefined') {\n        if (normalizedTranslate >= normalizedGrid && normalizedTranslate < normalizedGridNext - (normalizedGridNext - normalizedGrid) / 2) {\n          slideIndex = i;\n        } else if (normalizedTranslate >= normalizedGrid && normalizedTranslate < normalizedGridNext) {\n          slideIndex = i + 1;\n        }\n      } else if (normalizedTranslate >= normalizedGrid) {\n        slideIndex = i;\n      }\n    }\n  }\n  // Directions locks\n  if (swiper.initialized && slideIndex !== activeIndex) {\n    if (!swiper.allowSlideNext && (rtl ? translate > swiper.translate && translate > swiper.minTranslate() : translate < swiper.translate && translate < swiper.minTranslate())) {\n      return false;\n    }\n    if (!swiper.allowSlidePrev && translate > swiper.translate && translate > swiper.maxTranslate()) {\n      if ((activeIndex || 0) !== slideIndex) {\n        return false;\n      }\n    }\n  }\n  if (slideIndex !== (previousIndex || 0) && runCallbacks) {\n    swiper.emit('beforeSlideChangeStart');\n  }\n\n  // Update progress\n  swiper.updateProgress(translate);\n  let direction;\n  if (slideIndex > activeIndex) direction = 'next';else if (slideIndex < activeIndex) direction = 'prev';else direction = 'reset';\n\n  // Update Index\n  if (rtl && -translate === swiper.translate || !rtl && translate === swiper.translate) {\n    swiper.updateActiveIndex(slideIndex);\n    // Update Height\n    if (params.autoHeight) {\n      swiper.updateAutoHeight();\n    }\n    swiper.updateSlidesClasses();\n    if (params.effect !== 'slide') {\n      swiper.setTranslate(translate);\n    }\n    if (direction !== 'reset') {\n      swiper.transitionStart(runCallbacks, direction);\n      swiper.transitionEnd(runCallbacks, direction);\n    }\n    return false;\n  }\n  if (params.cssMode) {\n    const isH = swiper.isHorizontal();\n    const t = rtl ? translate : -translate;\n    if (speed === 0) {\n      const isVirtual = swiper.virtual && swiper.params.virtual.enabled;\n      if (isVirtual) {\n        swiper.wrapperEl.style.scrollSnapType = 'none';\n        swiper._immediateVirtual = true;\n      }\n      if (isVirtual && !swiper._cssModeVirtualInitialSet && swiper.params.initialSlide > 0) {\n        swiper._cssModeVirtualInitialSet = true;\n        requestAnimationFrame(() => {\n          wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = t;\n        });\n      } else {\n        wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = t;\n      }\n      if (isVirtual) {\n        requestAnimationFrame(() => {\n          swiper.wrapperEl.style.scrollSnapType = '';\n          swiper._immediateVirtual = false;\n        });\n      }\n    } else {\n      if (!swiper.support.smoothScroll) {\n        animateCSSModeScroll({\n          swiper,\n          targetPosition: t,\n          side: isH ? 'left' : 'top'\n        });\n        return true;\n      }\n      wrapperEl.scrollTo({\n        [isH ? 'left' : 'top']: t,\n        behavior: 'smooth'\n      });\n    }\n    return true;\n  }\n  swiper.setTransition(speed);\n  swiper.setTranslate(translate);\n  swiper.updateActiveIndex(slideIndex);\n  swiper.updateSlidesClasses();\n  swiper.emit('beforeTransitionStart', speed, internal);\n  swiper.transitionStart(runCallbacks, direction);\n  if (speed === 0) {\n    swiper.transitionEnd(runCallbacks, direction);\n  } else if (!swiper.animating) {\n    swiper.animating = true;\n    if (!swiper.onSlideToWrapperTransitionEnd) {\n      swiper.onSlideToWrapperTransitionEnd = function transitionEnd(e) {\n        if (!swiper || swiper.destroyed) return;\n        if (e.target !== this) return;\n        swiper.wrapperEl.removeEventListener('transitionend', swiper.onSlideToWrapperTransitionEnd);\n        swiper.onSlideToWrapperTransitionEnd = null;\n        delete swiper.onSlideToWrapperTransitionEnd;\n        swiper.transitionEnd(runCallbacks, direction);\n      };\n    }\n    swiper.wrapperEl.addEventListener('transitionend', swiper.onSlideToWrapperTransitionEnd);\n  }\n  return true;\n}\n\nfunction slideToLoop(index, speed, runCallbacks, internal) {\n  if (index === void 0) {\n    index = 0;\n  }\n  if (runCallbacks === void 0) {\n    runCallbacks = true;\n  }\n  if (typeof index === 'string') {\n    const indexAsNumber = parseInt(index, 10);\n    index = indexAsNumber;\n  }\n  const swiper = this;\n  if (swiper.destroyed) return;\n  if (typeof speed === 'undefined') {\n    speed = swiper.params.speed;\n  }\n  const gridEnabled = swiper.grid && swiper.params.grid && swiper.params.grid.rows > 1;\n  let newIndex = index;\n  if (swiper.params.loop) {\n    if (swiper.virtual && swiper.params.virtual.enabled) {\n      // eslint-disable-next-line\n      newIndex = newIndex + swiper.virtual.slidesBefore;\n    } else {\n      let targetSlideIndex;\n      if (gridEnabled) {\n        const slideIndex = newIndex * swiper.params.grid.rows;\n        targetSlideIndex = swiper.slides.filter(slideEl => slideEl.getAttribute('data-swiper-slide-index') * 1 === slideIndex)[0].column;\n      } else {\n        targetSlideIndex = swiper.getSlideIndexByData(newIndex);\n      }\n      const cols = gridEnabled ? Math.ceil(swiper.slides.length / swiper.params.grid.rows) : swiper.slides.length;\n      const {\n        centeredSlides\n      } = swiper.params;\n      let slidesPerView = swiper.params.slidesPerView;\n      if (slidesPerView === 'auto') {\n        slidesPerView = swiper.slidesPerViewDynamic();\n      } else {\n        slidesPerView = Math.ceil(parseFloat(swiper.params.slidesPerView, 10));\n        if (centeredSlides && slidesPerView % 2 === 0) {\n          slidesPerView = slidesPerView + 1;\n        }\n      }\n      let needLoopFix = cols - targetSlideIndex < slidesPerView;\n      if (centeredSlides) {\n        needLoopFix = needLoopFix || targetSlideIndex < Math.ceil(slidesPerView / 2);\n      }\n      if (internal && centeredSlides && swiper.params.slidesPerView !== 'auto' && !gridEnabled) {\n        needLoopFix = false;\n      }\n      if (needLoopFix) {\n        const direction = centeredSlides ? targetSlideIndex < swiper.activeIndex ? 'prev' : 'next' : targetSlideIndex - swiper.activeIndex - 1 < swiper.params.slidesPerView ? 'next' : 'prev';\n        swiper.loopFix({\n          direction,\n          slideTo: true,\n          activeSlideIndex: direction === 'next' ? targetSlideIndex + 1 : targetSlideIndex - cols + 1,\n          slideRealIndex: direction === 'next' ? swiper.realIndex : undefined\n        });\n      }\n      if (gridEnabled) {\n        const slideIndex = newIndex * swiper.params.grid.rows;\n        newIndex = swiper.slides.filter(slideEl => slideEl.getAttribute('data-swiper-slide-index') * 1 === slideIndex)[0].column;\n      } else {\n        newIndex = swiper.getSlideIndexByData(newIndex);\n      }\n    }\n  }\n  requestAnimationFrame(() => {\n    swiper.slideTo(newIndex, speed, runCallbacks, internal);\n  });\n  return swiper;\n}\n\n/* eslint no-unused-vars: \"off\" */\nfunction slideNext(speed, runCallbacks, internal) {\n  if (runCallbacks === void 0) {\n    runCallbacks = true;\n  }\n  const swiper = this;\n  const {\n    enabled,\n    params,\n    animating\n  } = swiper;\n  if (!enabled || swiper.destroyed) return swiper;\n  if (typeof speed === 'undefined') {\n    speed = swiper.params.speed;\n  }\n  let perGroup = params.slidesPerGroup;\n  if (params.slidesPerView === 'auto' && params.slidesPerGroup === 1 && params.slidesPerGroupAuto) {\n    perGroup = Math.max(swiper.slidesPerViewDynamic('current', true), 1);\n  }\n  const increment = swiper.activeIndex < params.slidesPerGroupSkip ? 1 : perGroup;\n  const isVirtual = swiper.virtual && params.virtual.enabled;\n  if (params.loop) {\n    if (animating && !isVirtual && params.loopPreventsSliding) return false;\n    swiper.loopFix({\n      direction: 'next'\n    });\n    // eslint-disable-next-line\n    swiper._clientLeft = swiper.wrapperEl.clientLeft;\n    if (swiper.activeIndex === swiper.slides.length - 1 && params.cssMode) {\n      requestAnimationFrame(() => {\n        swiper.slideTo(swiper.activeIndex + increment, speed, runCallbacks, internal);\n      });\n      return true;\n    }\n  }\n  if (params.rewind && swiper.isEnd) {\n    return swiper.slideTo(0, speed, runCallbacks, internal);\n  }\n  return swiper.slideTo(swiper.activeIndex + increment, speed, runCallbacks, internal);\n}\n\n/* eslint no-unused-vars: \"off\" */\nfunction slidePrev(speed, runCallbacks, internal) {\n  if (runCallbacks === void 0) {\n    runCallbacks = true;\n  }\n  const swiper = this;\n  const {\n    params,\n    snapGrid,\n    slidesGrid,\n    rtlTranslate,\n    enabled,\n    animating\n  } = swiper;\n  if (!enabled || swiper.destroyed) return swiper;\n  if (typeof speed === 'undefined') {\n    speed = swiper.params.speed;\n  }\n  const isVirtual = swiper.virtual && params.virtual.enabled;\n  if (params.loop) {\n    if (animating && !isVirtual && params.loopPreventsSliding) return false;\n    swiper.loopFix({\n      direction: 'prev'\n    });\n    // eslint-disable-next-line\n    swiper._clientLeft = swiper.wrapperEl.clientLeft;\n  }\n  const translate = rtlTranslate ? swiper.translate : -swiper.translate;\n  function normalize(val) {\n    if (val < 0) return -Math.floor(Math.abs(val));\n    return Math.floor(val);\n  }\n  const normalizedTranslate = normalize(translate);\n  const normalizedSnapGrid = snapGrid.map(val => normalize(val));\n  let prevSnap = snapGrid[normalizedSnapGrid.indexOf(normalizedTranslate) - 1];\n  if (typeof prevSnap === 'undefined' && params.cssMode) {\n    let prevSnapIndex;\n    snapGrid.forEach((snap, snapIndex) => {\n      if (normalizedTranslate >= snap) {\n        // prevSnap = snap;\n        prevSnapIndex = snapIndex;\n      }\n    });\n    if (typeof prevSnapIndex !== 'undefined') {\n      prevSnap = snapGrid[prevSnapIndex > 0 ? prevSnapIndex - 1 : prevSnapIndex];\n    }\n  }\n  let prevIndex = 0;\n  if (typeof prevSnap !== 'undefined') {\n    prevIndex = slidesGrid.indexOf(prevSnap);\n    if (prevIndex < 0) prevIndex = swiper.activeIndex - 1;\n    if (params.slidesPerView === 'auto' && params.slidesPerGroup === 1 && params.slidesPerGroupAuto) {\n      prevIndex = prevIndex - swiper.slidesPerViewDynamic('previous', true) + 1;\n      prevIndex = Math.max(prevIndex, 0);\n    }\n  }\n  if (params.rewind && swiper.isBeginning) {\n    const lastIndex = swiper.params.virtual && swiper.params.virtual.enabled && swiper.virtual ? swiper.virtual.slides.length - 1 : swiper.slides.length - 1;\n    return swiper.slideTo(lastIndex, speed, runCallbacks, internal);\n  } else if (params.loop && swiper.activeIndex === 0 && params.cssMode) {\n    requestAnimationFrame(() => {\n      swiper.slideTo(prevIndex, speed, runCallbacks, internal);\n    });\n    return true;\n  }\n  return swiper.slideTo(prevIndex, speed, runCallbacks, internal);\n}\n\n/* eslint no-unused-vars: \"off\" */\nfunction slideReset(speed, runCallbacks, internal) {\n  if (runCallbacks === void 0) {\n    runCallbacks = true;\n  }\n  const swiper = this;\n  if (swiper.destroyed) return;\n  if (typeof speed === 'undefined') {\n    speed = swiper.params.speed;\n  }\n  return swiper.slideTo(swiper.activeIndex, speed, runCallbacks, internal);\n}\n\n/* eslint no-unused-vars: \"off\" */\nfunction slideToClosest(speed, runCallbacks, internal, threshold) {\n  if (runCallbacks === void 0) {\n    runCallbacks = true;\n  }\n  if (threshold === void 0) {\n    threshold = 0.5;\n  }\n  const swiper = this;\n  if (swiper.destroyed) return;\n  if (typeof speed === 'undefined') {\n    speed = swiper.params.speed;\n  }\n  let index = swiper.activeIndex;\n  const skip = Math.min(swiper.params.slidesPerGroupSkip, index);\n  const snapIndex = skip + Math.floor((index - skip) / swiper.params.slidesPerGroup);\n  const translate = swiper.rtlTranslate ? swiper.translate : -swiper.translate;\n  if (translate >= swiper.snapGrid[snapIndex]) {\n    // The current translate is on or after the current snap index, so the choice\n    // is between the current index and the one after it.\n    const currentSnap = swiper.snapGrid[snapIndex];\n    const nextSnap = swiper.snapGrid[snapIndex + 1];\n    if (translate - currentSnap > (nextSnap - currentSnap) * threshold) {\n      index += swiper.params.slidesPerGroup;\n    }\n  } else {\n    // The current translate is before the current snap index, so the choice\n    // is between the current index and the one before it.\n    const prevSnap = swiper.snapGrid[snapIndex - 1];\n    const currentSnap = swiper.snapGrid[snapIndex];\n    if (translate - prevSnap <= (currentSnap - prevSnap) * threshold) {\n      index -= swiper.params.slidesPerGroup;\n    }\n  }\n  index = Math.max(index, 0);\n  index = Math.min(index, swiper.slidesGrid.length - 1);\n  return swiper.slideTo(index, speed, runCallbacks, internal);\n}\n\nfunction slideToClickedSlide() {\n  const swiper = this;\n  if (swiper.destroyed) return;\n  const {\n    params,\n    slidesEl\n  } = swiper;\n  const slidesPerView = params.slidesPerView === 'auto' ? swiper.slidesPerViewDynamic() : params.slidesPerView;\n  let slideToIndex = swiper.clickedIndex;\n  let realIndex;\n  const slideSelector = swiper.isElement ? `swiper-slide` : `.${params.slideClass}`;\n  if (params.loop) {\n    if (swiper.animating) return;\n    realIndex = parseInt(swiper.clickedSlide.getAttribute('data-swiper-slide-index'), 10);\n    if (params.centeredSlides) {\n      if (slideToIndex < swiper.loopedSlides - slidesPerView / 2 || slideToIndex > swiper.slides.length - swiper.loopedSlides + slidesPerView / 2) {\n        swiper.loopFix();\n        slideToIndex = swiper.getSlideIndex(elementChildren(slidesEl, `${slideSelector}[data-swiper-slide-index=\"${realIndex}\"]`)[0]);\n        nextTick(() => {\n          swiper.slideTo(slideToIndex);\n        });\n      } else {\n        swiper.slideTo(slideToIndex);\n      }\n    } else if (slideToIndex > swiper.slides.length - slidesPerView) {\n      swiper.loopFix();\n      slideToIndex = swiper.getSlideIndex(elementChildren(slidesEl, `${slideSelector}[data-swiper-slide-index=\"${realIndex}\"]`)[0]);\n      nextTick(() => {\n        swiper.slideTo(slideToIndex);\n      });\n    } else {\n      swiper.slideTo(slideToIndex);\n    }\n  } else {\n    swiper.slideTo(slideToIndex);\n  }\n}\n\nvar slide = {\n  slideTo,\n  slideToLoop,\n  slideNext,\n  slidePrev,\n  slideReset,\n  slideToClosest,\n  slideToClickedSlide\n};\n\nfunction loopCreate(slideRealIndex) {\n  const swiper = this;\n  const {\n    params,\n    slidesEl\n  } = swiper;\n  if (!params.loop || swiper.virtual && swiper.params.virtual.enabled) return;\n  const initSlides = () => {\n    const slides = elementChildren(slidesEl, `.${params.slideClass}, swiper-slide`);\n    slides.forEach((el, index) => {\n      el.setAttribute('data-swiper-slide-index', index);\n    });\n  };\n  const gridEnabled = swiper.grid && params.grid && params.grid.rows > 1;\n  const slidesPerGroup = params.slidesPerGroup * (gridEnabled ? params.grid.rows : 1);\n  const shouldFillGroup = swiper.slides.length % slidesPerGroup !== 0;\n  const shouldFillGrid = gridEnabled && swiper.slides.length % params.grid.rows !== 0;\n  const addBlankSlides = amountOfSlides => {\n    for (let i = 0; i < amountOfSlides; i += 1) {\n      const slideEl = swiper.isElement ? createElement('swiper-slide', [params.slideBlankClass]) : createElement('div', [params.slideClass, params.slideBlankClass]);\n      swiper.slidesEl.append(slideEl);\n    }\n  };\n  if (shouldFillGroup) {\n    if (params.loopAddBlankSlides) {\n      const slidesToAdd = slidesPerGroup - swiper.slides.length % slidesPerGroup;\n      addBlankSlides(slidesToAdd);\n      swiper.recalcSlides();\n      swiper.updateSlides();\n    } else {\n      showWarning('Swiper Loop Warning: The number of slides is not even to slidesPerGroup, loop mode may not function properly. You need to add more slides (or make duplicates, or empty slides)');\n    }\n    initSlides();\n  } else if (shouldFillGrid) {\n    if (params.loopAddBlankSlides) {\n      const slidesToAdd = params.grid.rows - swiper.slides.length % params.grid.rows;\n      addBlankSlides(slidesToAdd);\n      swiper.recalcSlides();\n      swiper.updateSlides();\n    } else {\n      showWarning('Swiper Loop Warning: The number of slides is not even to grid.rows, loop mode may not function properly. You need to add more slides (or make duplicates, or empty slides)');\n    }\n    initSlides();\n  } else {\n    initSlides();\n  }\n  swiper.loopFix({\n    slideRealIndex,\n    direction: params.centeredSlides ? undefined : 'next'\n  });\n}\n\nfunction loopFix(_temp) {\n  let {\n    slideRealIndex,\n    slideTo = true,\n    direction,\n    setTranslate,\n    activeSlideIndex,\n    byController,\n    byMousewheel\n  } = _temp === void 0 ? {} : _temp;\n  const swiper = this;\n  if (!swiper.params.loop) return;\n  swiper.emit('beforeLoopFix');\n  const {\n    slides,\n    allowSlidePrev,\n    allowSlideNext,\n    slidesEl,\n    params\n  } = swiper;\n  const {\n    centeredSlides\n  } = params;\n  swiper.allowSlidePrev = true;\n  swiper.allowSlideNext = true;\n  if (swiper.virtual && params.virtual.enabled) {\n    if (slideTo) {\n      if (!params.centeredSlides && swiper.snapIndex === 0) {\n        swiper.slideTo(swiper.virtual.slides.length, 0, false, true);\n      } else if (params.centeredSlides && swiper.snapIndex < params.slidesPerView) {\n        swiper.slideTo(swiper.virtual.slides.length + swiper.snapIndex, 0, false, true);\n      } else if (swiper.snapIndex === swiper.snapGrid.length - 1) {\n        swiper.slideTo(swiper.virtual.slidesBefore, 0, false, true);\n      }\n    }\n    swiper.allowSlidePrev = allowSlidePrev;\n    swiper.allowSlideNext = allowSlideNext;\n    swiper.emit('loopFix');\n    return;\n  }\n  let slidesPerView = params.slidesPerView;\n  if (slidesPerView === 'auto') {\n    slidesPerView = swiper.slidesPerViewDynamic();\n  } else {\n    slidesPerView = Math.ceil(parseFloat(params.slidesPerView, 10));\n    if (centeredSlides && slidesPerView % 2 === 0) {\n      slidesPerView = slidesPerView + 1;\n    }\n  }\n  const slidesPerGroup = params.slidesPerGroupAuto ? slidesPerView : params.slidesPerGroup;\n  let loopedSlides = slidesPerGroup;\n  if (loopedSlides % slidesPerGroup !== 0) {\n    loopedSlides += slidesPerGroup - loopedSlides % slidesPerGroup;\n  }\n  loopedSlides += params.loopAdditionalSlides;\n  swiper.loopedSlides = loopedSlides;\n  const gridEnabled = swiper.grid && params.grid && params.grid.rows > 1;\n  if (slides.length < slidesPerView + loopedSlides) {\n    showWarning('Swiper Loop Warning: The number of slides is not enough for loop mode, it will be disabled and not function properly. You need to add more slides (or make duplicates) or lower the values of slidesPerView and slidesPerGroup parameters');\n  } else if (gridEnabled && params.grid.fill === 'row') {\n    showWarning('Swiper Loop Warning: Loop mode is not compatible with grid.fill = `row`');\n  }\n  const prependSlidesIndexes = [];\n  const appendSlidesIndexes = [];\n  let activeIndex = swiper.activeIndex;\n  if (typeof activeSlideIndex === 'undefined') {\n    activeSlideIndex = swiper.getSlideIndex(slides.filter(el => el.classList.contains(params.slideActiveClass))[0]);\n  } else {\n    activeIndex = activeSlideIndex;\n  }\n  const isNext = direction === 'next' || !direction;\n  const isPrev = direction === 'prev' || !direction;\n  let slidesPrepended = 0;\n  let slidesAppended = 0;\n  const cols = gridEnabled ? Math.ceil(slides.length / params.grid.rows) : slides.length;\n  const activeColIndex = gridEnabled ? slides[activeSlideIndex].column : activeSlideIndex;\n  const activeColIndexWithShift = activeColIndex + (centeredSlides && typeof setTranslate === 'undefined' ? -slidesPerView / 2 + 0.5 : 0);\n  // prepend last slides before start\n  if (activeColIndexWithShift < loopedSlides) {\n    slidesPrepended = Math.max(loopedSlides - activeColIndexWithShift, slidesPerGroup);\n    for (let i = 0; i < loopedSlides - activeColIndexWithShift; i += 1) {\n      const index = i - Math.floor(i / cols) * cols;\n      if (gridEnabled) {\n        const colIndexToPrepend = cols - index - 1;\n        for (let i = slides.length - 1; i >= 0; i -= 1) {\n          if (slides[i].column === colIndexToPrepend) prependSlidesIndexes.push(i);\n        }\n        // slides.forEach((slide, slideIndex) => {\n        //   if (slide.column === colIndexToPrepend) prependSlidesIndexes.push(slideIndex);\n        // });\n      } else {\n        prependSlidesIndexes.push(cols - index - 1);\n      }\n    }\n  } else if (activeColIndexWithShift + slidesPerView > cols - loopedSlides) {\n    slidesAppended = Math.max(activeColIndexWithShift - (cols - loopedSlides * 2), slidesPerGroup);\n    for (let i = 0; i < slidesAppended; i += 1) {\n      const index = i - Math.floor(i / cols) * cols;\n      if (gridEnabled) {\n        slides.forEach((slide, slideIndex) => {\n          if (slide.column === index) appendSlidesIndexes.push(slideIndex);\n        });\n      } else {\n        appendSlidesIndexes.push(index);\n      }\n    }\n  }\n  swiper.__preventObserver__ = true;\n  requestAnimationFrame(() => {\n    swiper.__preventObserver__ = false;\n  });\n  if (isPrev) {\n    prependSlidesIndexes.forEach(index => {\n      slides[index].swiperLoopMoveDOM = true;\n      slidesEl.prepend(slides[index]);\n      slides[index].swiperLoopMoveDOM = false;\n    });\n  }\n  if (isNext) {\n    appendSlidesIndexes.forEach(index => {\n      slides[index].swiperLoopMoveDOM = true;\n      slidesEl.append(slides[index]);\n      slides[index].swiperLoopMoveDOM = false;\n    });\n  }\n  swiper.recalcSlides();\n  if (params.slidesPerView === 'auto') {\n    swiper.updateSlides();\n  } else if (gridEnabled && (prependSlidesIndexes.length > 0 && isPrev || appendSlidesIndexes.length > 0 && isNext)) {\n    swiper.slides.forEach((slide, slideIndex) => {\n      swiper.grid.updateSlide(slideIndex, slide, swiper.slides);\n    });\n  }\n  if (params.watchSlidesProgress) {\n    swiper.updateSlidesOffset();\n  }\n  if (slideTo) {\n    if (prependSlidesIndexes.length > 0 && isPrev) {\n      if (typeof slideRealIndex === 'undefined') {\n        const currentSlideTranslate = swiper.slidesGrid[activeIndex];\n        const newSlideTranslate = swiper.slidesGrid[activeIndex + slidesPrepended];\n        const diff = newSlideTranslate - currentSlideTranslate;\n        if (byMousewheel) {\n          swiper.setTranslate(swiper.translate - diff);\n        } else {\n          swiper.slideTo(activeIndex + Math.ceil(slidesPrepended), 0, false, true);\n          if (setTranslate) {\n            swiper.touchEventsData.startTranslate = swiper.touchEventsData.startTranslate - diff;\n            swiper.touchEventsData.currentTranslate = swiper.touchEventsData.currentTranslate - diff;\n          }\n        }\n      } else {\n        if (setTranslate) {\n          const shift = gridEnabled ? prependSlidesIndexes.length / params.grid.rows : prependSlidesIndexes.length;\n          swiper.slideTo(swiper.activeIndex + shift, 0, false, true);\n          swiper.touchEventsData.currentTranslate = swiper.translate;\n        }\n      }\n    } else if (appendSlidesIndexes.length > 0 && isNext) {\n      if (typeof slideRealIndex === 'undefined') {\n        const currentSlideTranslate = swiper.slidesGrid[activeIndex];\n        const newSlideTranslate = swiper.slidesGrid[activeIndex - slidesAppended];\n        const diff = newSlideTranslate - currentSlideTranslate;\n        if (byMousewheel) {\n          swiper.setTranslate(swiper.translate - diff);\n        } else {\n          swiper.slideTo(activeIndex - slidesAppended, 0, false, true);\n          if (setTranslate) {\n            swiper.touchEventsData.startTranslate = swiper.touchEventsData.startTranslate - diff;\n            swiper.touchEventsData.currentTranslate = swiper.touchEventsData.currentTranslate - diff;\n          }\n        }\n      } else {\n        const shift = gridEnabled ? appendSlidesIndexes.length / params.grid.rows : appendSlidesIndexes.length;\n        swiper.slideTo(swiper.activeIndex - shift, 0, false, true);\n      }\n    }\n  }\n  swiper.allowSlidePrev = allowSlidePrev;\n  swiper.allowSlideNext = allowSlideNext;\n  if (swiper.controller && swiper.controller.control && !byController) {\n    const loopParams = {\n      slideRealIndex,\n      direction,\n      setTranslate,\n      activeSlideIndex,\n      byController: true\n    };\n    if (Array.isArray(swiper.controller.control)) {\n      swiper.controller.control.forEach(c => {\n        if (!c.destroyed && c.params.loop) c.loopFix({\n          ...loopParams,\n          slideTo: c.params.slidesPerView === params.slidesPerView ? slideTo : false\n        });\n      });\n    } else if (swiper.controller.control instanceof swiper.constructor && swiper.controller.control.params.loop) {\n      swiper.controller.control.loopFix({\n        ...loopParams,\n        slideTo: swiper.controller.control.params.slidesPerView === params.slidesPerView ? slideTo : false\n      });\n    }\n  }\n  swiper.emit('loopFix');\n}\n\nfunction loopDestroy() {\n  const swiper = this;\n  const {\n    params,\n    slidesEl\n  } = swiper;\n  if (!params.loop || swiper.virtual && swiper.params.virtual.enabled) return;\n  swiper.recalcSlides();\n  const newSlidesOrder = [];\n  swiper.slides.forEach(slideEl => {\n    const index = typeof slideEl.swiperSlideIndex === 'undefined' ? slideEl.getAttribute('data-swiper-slide-index') * 1 : slideEl.swiperSlideIndex;\n    newSlidesOrder[index] = slideEl;\n  });\n  swiper.slides.forEach(slideEl => {\n    slideEl.removeAttribute('data-swiper-slide-index');\n  });\n  newSlidesOrder.forEach(slideEl => {\n    slidesEl.append(slideEl);\n  });\n  swiper.recalcSlides();\n  swiper.slideTo(swiper.realIndex, 0);\n}\n\nvar loop = {\n  loopCreate,\n  loopFix,\n  loopDestroy\n};\n\nfunction setGrabCursor(moving) {\n  const swiper = this;\n  if (!swiper.params.simulateTouch || swiper.params.watchOverflow && swiper.isLocked || swiper.params.cssMode) return;\n  const el = swiper.params.touchEventsTarget === 'container' ? swiper.el : swiper.wrapperEl;\n  if (swiper.isElement) {\n    swiper.__preventObserver__ = true;\n  }\n  el.style.cursor = 'move';\n  el.style.cursor = moving ? 'grabbing' : 'grab';\n  if (swiper.isElement) {\n    requestAnimationFrame(() => {\n      swiper.__preventObserver__ = false;\n    });\n  }\n}\n\nfunction unsetGrabCursor() {\n  const swiper = this;\n  if (swiper.params.watchOverflow && swiper.isLocked || swiper.params.cssMode) {\n    return;\n  }\n  if (swiper.isElement) {\n    swiper.__preventObserver__ = true;\n  }\n  swiper[swiper.params.touchEventsTarget === 'container' ? 'el' : 'wrapperEl'].style.cursor = '';\n  if (swiper.isElement) {\n    requestAnimationFrame(() => {\n      swiper.__preventObserver__ = false;\n    });\n  }\n}\n\nvar grabCursor = {\n  setGrabCursor,\n  unsetGrabCursor\n};\n\n// Modified from https://stackoverflow.com/questions/54520554/custom-element-getrootnode-closest-function-crossing-multiple-parent-shadowd\nfunction closestElement(selector, base) {\n  if (base === void 0) {\n    base = this;\n  }\n  function __closestFrom(el) {\n    if (!el || el === getDocument() || el === getWindow()) return null;\n    if (el.assignedSlot) el = el.assignedSlot;\n    const found = el.closest(selector);\n    if (!found && !el.getRootNode) {\n      return null;\n    }\n    return found || __closestFrom(el.getRootNode().host);\n  }\n  return __closestFrom(base);\n}\nfunction preventEdgeSwipe(swiper, event, startX) {\n  const window = getWindow();\n  const {\n    params\n  } = swiper;\n  const edgeSwipeDetection = params.edgeSwipeDetection;\n  const edgeSwipeThreshold = params.edgeSwipeThreshold;\n  if (edgeSwipeDetection && (startX <= edgeSwipeThreshold || startX >= window.innerWidth - edgeSwipeThreshold)) {\n    if (edgeSwipeDetection === 'prevent') {\n      event.preventDefault();\n      return true;\n    }\n    return false;\n  }\n  return true;\n}\nfunction onTouchStart(event) {\n  const swiper = this;\n  const document = getDocument();\n  let e = event;\n  if (e.originalEvent) e = e.originalEvent;\n  const data = swiper.touchEventsData;\n  if (e.type === 'pointerdown') {\n    if (data.pointerId !== null && data.pointerId !== e.pointerId) {\n      return;\n    }\n    data.pointerId = e.pointerId;\n  } else if (e.type === 'touchstart' && e.targetTouches.length === 1) {\n    data.touchId = e.targetTouches[0].identifier;\n  }\n  if (e.type === 'touchstart') {\n    // don't proceed touch event\n    preventEdgeSwipe(swiper, e, e.targetTouches[0].pageX);\n    return;\n  }\n  const {\n    params,\n    touches,\n    enabled\n  } = swiper;\n  if (!enabled) return;\n  if (!params.simulateTouch && e.pointerType === 'mouse') return;\n  if (swiper.animating && params.preventInteractionOnTransition) {\n    return;\n  }\n  if (!swiper.animating && params.cssMode && params.loop) {\n    swiper.loopFix();\n  }\n  let targetEl = e.target;\n  if (params.touchEventsTarget === 'wrapper') {\n    if (!swiper.wrapperEl.contains(targetEl)) return;\n  }\n  if ('which' in e && e.which === 3) return;\n  if ('button' in e && e.button > 0) return;\n  if (data.isTouched && data.isMoved) return;\n\n  // change target el for shadow root component\n  const swipingClassHasValue = !!params.noSwipingClass && params.noSwipingClass !== '';\n  // eslint-disable-next-line\n  const eventPath = e.composedPath ? e.composedPath() : e.path;\n  if (swipingClassHasValue && e.target && e.target.shadowRoot && eventPath) {\n    targetEl = eventPath[0];\n  }\n  const noSwipingSelector = params.noSwipingSelector ? params.noSwipingSelector : `.${params.noSwipingClass}`;\n  const isTargetShadow = !!(e.target && e.target.shadowRoot);\n\n  // use closestElement for shadow root element to get the actual closest for nested shadow root element\n  if (params.noSwiping && (isTargetShadow ? closestElement(noSwipingSelector, targetEl) : targetEl.closest(noSwipingSelector))) {\n    swiper.allowClick = true;\n    return;\n  }\n  if (params.swipeHandler) {\n    if (!targetEl.closest(params.swipeHandler)) return;\n  }\n  touches.currentX = e.pageX;\n  touches.currentY = e.pageY;\n  const startX = touches.currentX;\n  const startY = touches.currentY;\n\n  // Do NOT start if iOS edge swipe is detected. Otherwise iOS app cannot swipe-to-go-back anymore\n\n  if (!preventEdgeSwipe(swiper, e, startX)) {\n    return;\n  }\n  Object.assign(data, {\n    isTouched: true,\n    isMoved: false,\n    allowTouchCallbacks: true,\n    isScrolling: undefined,\n    startMoving: undefined\n  });\n  touches.startX = startX;\n  touches.startY = startY;\n  data.touchStartTime = now();\n  swiper.allowClick = true;\n  swiper.updateSize();\n  swiper.swipeDirection = undefined;\n  if (params.threshold > 0) data.allowThresholdMove = false;\n  let preventDefault = true;\n  if (targetEl.matches(data.focusableElements)) {\n    preventDefault = false;\n    if (targetEl.nodeName === 'SELECT') {\n      data.isTouched = false;\n    }\n  }\n  if (document.activeElement && document.activeElement.matches(data.focusableElements) && document.activeElement !== targetEl) {\n    document.activeElement.blur();\n  }\n  const shouldPreventDefault = preventDefault && swiper.allowTouchMove && params.touchStartPreventDefault;\n  if ((params.touchStartForcePreventDefault || shouldPreventDefault) && !targetEl.isContentEditable) {\n    e.preventDefault();\n  }\n  if (params.freeMode && params.freeMode.enabled && swiper.freeMode && swiper.animating && !params.cssMode) {\n    swiper.freeMode.onTouchStart();\n  }\n  swiper.emit('touchStart', e);\n}\n\nfunction onTouchMove(event) {\n  const document = getDocument();\n  const swiper = this;\n  const data = swiper.touchEventsData;\n  const {\n    params,\n    touches,\n    rtlTranslate: rtl,\n    enabled\n  } = swiper;\n  if (!enabled) return;\n  if (!params.simulateTouch && event.pointerType === 'mouse') return;\n  let e = event;\n  if (e.originalEvent) e = e.originalEvent;\n  if (e.type === 'pointermove') {\n    if (data.touchId !== null) return; // return from pointer if we use touch\n    const id = e.pointerId;\n    if (id !== data.pointerId) return;\n  }\n  let targetTouch;\n  if (e.type === 'touchmove') {\n    targetTouch = [...e.changedTouches].filter(t => t.identifier === data.touchId)[0];\n    if (!targetTouch || targetTouch.identifier !== data.touchId) return;\n  } else {\n    targetTouch = e;\n  }\n  if (!data.isTouched) {\n    if (data.startMoving && data.isScrolling) {\n      swiper.emit('touchMoveOpposite', e);\n    }\n    return;\n  }\n  const pageX = targetTouch.pageX;\n  const pageY = targetTouch.pageY;\n  if (e.preventedByNestedSwiper) {\n    touches.startX = pageX;\n    touches.startY = pageY;\n    return;\n  }\n  if (!swiper.allowTouchMove) {\n    if (!e.target.matches(data.focusableElements)) {\n      swiper.allowClick = false;\n    }\n    if (data.isTouched) {\n      Object.assign(touches, {\n        startX: pageX,\n        startY: pageY,\n        currentX: pageX,\n        currentY: pageY\n      });\n      data.touchStartTime = now();\n    }\n    return;\n  }\n  if (params.touchReleaseOnEdges && !params.loop) {\n    if (swiper.isVertical()) {\n      // Vertical\n      if (pageY < touches.startY && swiper.translate <= swiper.maxTranslate() || pageY > touches.startY && swiper.translate >= swiper.minTranslate()) {\n        data.isTouched = false;\n        data.isMoved = false;\n        return;\n      }\n    } else if (pageX < touches.startX && swiper.translate <= swiper.maxTranslate() || pageX > touches.startX && swiper.translate >= swiper.minTranslate()) {\n      return;\n    }\n  }\n  if (document.activeElement) {\n    if (e.target === document.activeElement && e.target.matches(data.focusableElements)) {\n      data.isMoved = true;\n      swiper.allowClick = false;\n      return;\n    }\n  }\n  if (data.allowTouchCallbacks) {\n    swiper.emit('touchMove', e);\n  }\n  touches.previousX = touches.currentX;\n  touches.previousY = touches.currentY;\n  touches.currentX = pageX;\n  touches.currentY = pageY;\n  const diffX = touches.currentX - touches.startX;\n  const diffY = touches.currentY - touches.startY;\n  if (swiper.params.threshold && Math.sqrt(diffX ** 2 + diffY ** 2) < swiper.params.threshold) return;\n  if (typeof data.isScrolling === 'undefined') {\n    let touchAngle;\n    if (swiper.isHorizontal() && touches.currentY === touches.startY || swiper.isVertical() && touches.currentX === touches.startX) {\n      data.isScrolling = false;\n    } else {\n      // eslint-disable-next-line\n      if (diffX * diffX + diffY * diffY >= 25) {\n        touchAngle = Math.atan2(Math.abs(diffY), Math.abs(diffX)) * 180 / Math.PI;\n        data.isScrolling = swiper.isHorizontal() ? touchAngle > params.touchAngle : 90 - touchAngle > params.touchAngle;\n      }\n    }\n  }\n  if (data.isScrolling) {\n    swiper.emit('touchMoveOpposite', e);\n  }\n  if (typeof data.startMoving === 'undefined') {\n    if (touches.currentX !== touches.startX || touches.currentY !== touches.startY) {\n      data.startMoving = true;\n    }\n  }\n  if (data.isScrolling || e.type === 'touchmove' && data.preventTouchMoveFromPointerMove) {\n    data.isTouched = false;\n    return;\n  }\n  if (!data.startMoving) {\n    return;\n  }\n  swiper.allowClick = false;\n  if (!params.cssMode && e.cancelable) {\n    e.preventDefault();\n  }\n  if (params.touchMoveStopPropagation && !params.nested) {\n    e.stopPropagation();\n  }\n  let diff = swiper.isHorizontal() ? diffX : diffY;\n  let touchesDiff = swiper.isHorizontal() ? touches.currentX - touches.previousX : touches.currentY - touches.previousY;\n  if (params.oneWayMovement) {\n    diff = Math.abs(diff) * (rtl ? 1 : -1);\n    touchesDiff = Math.abs(touchesDiff) * (rtl ? 1 : -1);\n  }\n  touches.diff = diff;\n  diff *= params.touchRatio;\n  if (rtl) {\n    diff = -diff;\n    touchesDiff = -touchesDiff;\n  }\n  const prevTouchesDirection = swiper.touchesDirection;\n  swiper.swipeDirection = diff > 0 ? 'prev' : 'next';\n  swiper.touchesDirection = touchesDiff > 0 ? 'prev' : 'next';\n  const isLoop = swiper.params.loop && !params.cssMode;\n  const allowLoopFix = swiper.touchesDirection === 'next' && swiper.allowSlideNext || swiper.touchesDirection === 'prev' && swiper.allowSlidePrev;\n  if (!data.isMoved) {\n    if (isLoop && allowLoopFix) {\n      swiper.loopFix({\n        direction: swiper.swipeDirection\n      });\n    }\n    data.startTranslate = swiper.getTranslate();\n    swiper.setTransition(0);\n    if (swiper.animating) {\n      const evt = new window.CustomEvent('transitionend', {\n        bubbles: true,\n        cancelable: true\n      });\n      swiper.wrapperEl.dispatchEvent(evt);\n    }\n    data.allowMomentumBounce = false;\n    // Grab Cursor\n    if (params.grabCursor && (swiper.allowSlideNext === true || swiper.allowSlidePrev === true)) {\n      swiper.setGrabCursor(true);\n    }\n    swiper.emit('sliderFirstMove', e);\n  }\n  let loopFixed;\n  new Date().getTime();\n  if (data.isMoved && data.allowThresholdMove && prevTouchesDirection !== swiper.touchesDirection && isLoop && allowLoopFix && Math.abs(diff) >= 1) {\n    Object.assign(touches, {\n      startX: pageX,\n      startY: pageY,\n      currentX: pageX,\n      currentY: pageY,\n      startTranslate: data.currentTranslate\n    });\n    data.loopSwapReset = true;\n    data.startTranslate = data.currentTranslate;\n    return;\n  }\n  swiper.emit('sliderMove', e);\n  data.isMoved = true;\n  data.currentTranslate = diff + data.startTranslate;\n  let disableParentSwiper = true;\n  let resistanceRatio = params.resistanceRatio;\n  if (params.touchReleaseOnEdges) {\n    resistanceRatio = 0;\n  }\n  if (diff > 0) {\n    if (isLoop && allowLoopFix && !loopFixed && data.allowThresholdMove && data.currentTranslate > (params.centeredSlides ? swiper.minTranslate() - swiper.slidesSizesGrid[swiper.activeIndex + 1] : swiper.minTranslate())) {\n      swiper.loopFix({\n        direction: 'prev',\n        setTranslate: true,\n        activeSlideIndex: 0\n      });\n    }\n    if (data.currentTranslate > swiper.minTranslate()) {\n      disableParentSwiper = false;\n      if (params.resistance) {\n        data.currentTranslate = swiper.minTranslate() - 1 + (-swiper.minTranslate() + data.startTranslate + diff) ** resistanceRatio;\n      }\n    }\n  } else if (diff < 0) {\n    if (isLoop && allowLoopFix && !loopFixed && data.allowThresholdMove && data.currentTranslate < (params.centeredSlides ? swiper.maxTranslate() + swiper.slidesSizesGrid[swiper.slidesSizesGrid.length - 1] : swiper.maxTranslate())) {\n      swiper.loopFix({\n        direction: 'next',\n        setTranslate: true,\n        activeSlideIndex: swiper.slides.length - (params.slidesPerView === 'auto' ? swiper.slidesPerViewDynamic() : Math.ceil(parseFloat(params.slidesPerView, 10)))\n      });\n    }\n    if (data.currentTranslate < swiper.maxTranslate()) {\n      disableParentSwiper = false;\n      if (params.resistance) {\n        data.currentTranslate = swiper.maxTranslate() + 1 - (swiper.maxTranslate() - data.startTranslate - diff) ** resistanceRatio;\n      }\n    }\n  }\n  if (disableParentSwiper) {\n    e.preventedByNestedSwiper = true;\n  }\n\n  // Directions locks\n  if (!swiper.allowSlideNext && swiper.swipeDirection === 'next' && data.currentTranslate < data.startTranslate) {\n    data.currentTranslate = data.startTranslate;\n  }\n  if (!swiper.allowSlidePrev && swiper.swipeDirection === 'prev' && data.currentTranslate > data.startTranslate) {\n    data.currentTranslate = data.startTranslate;\n  }\n  if (!swiper.allowSlidePrev && !swiper.allowSlideNext) {\n    data.currentTranslate = data.startTranslate;\n  }\n\n  // Threshold\n  if (params.threshold > 0) {\n    if (Math.abs(diff) > params.threshold || data.allowThresholdMove) {\n      if (!data.allowThresholdMove) {\n        data.allowThresholdMove = true;\n        touches.startX = touches.currentX;\n        touches.startY = touches.currentY;\n        data.currentTranslate = data.startTranslate;\n        touches.diff = swiper.isHorizontal() ? touches.currentX - touches.startX : touches.currentY - touches.startY;\n        return;\n      }\n    } else {\n      data.currentTranslate = data.startTranslate;\n      return;\n    }\n  }\n  if (!params.followFinger || params.cssMode) return;\n\n  // Update active index in free mode\n  if (params.freeMode && params.freeMode.enabled && swiper.freeMode || params.watchSlidesProgress) {\n    swiper.updateActiveIndex();\n    swiper.updateSlidesClasses();\n  }\n  if (params.freeMode && params.freeMode.enabled && swiper.freeMode) {\n    swiper.freeMode.onTouchMove();\n  }\n  // Update progress\n  swiper.updateProgress(data.currentTranslate);\n  // Update translate\n  swiper.setTranslate(data.currentTranslate);\n}\n\nfunction onTouchEnd(event) {\n  const swiper = this;\n  const data = swiper.touchEventsData;\n  let e = event;\n  if (e.originalEvent) e = e.originalEvent;\n  let targetTouch;\n  const isTouchEvent = e.type === 'touchend' || e.type === 'touchcancel';\n  if (!isTouchEvent) {\n    if (data.touchId !== null) return; // return from pointer if we use touch\n    if (e.pointerId !== data.pointerId) return;\n    targetTouch = e;\n  } else {\n    targetTouch = [...e.changedTouches].filter(t => t.identifier === data.touchId)[0];\n    if (!targetTouch || targetTouch.identifier !== data.touchId) return;\n  }\n  if (['pointercancel', 'pointerout', 'pointerleave', 'contextmenu'].includes(e.type)) {\n    const proceed = ['pointercancel', 'contextmenu'].includes(e.type) && (swiper.browser.isSafari || swiper.browser.isWebView);\n    if (!proceed) {\n      return;\n    }\n  }\n  data.pointerId = null;\n  data.touchId = null;\n  const {\n    params,\n    touches,\n    rtlTranslate: rtl,\n    slidesGrid,\n    enabled\n  } = swiper;\n  if (!enabled) return;\n  if (!params.simulateTouch && e.pointerType === 'mouse') return;\n  if (data.allowTouchCallbacks) {\n    swiper.emit('touchEnd', e);\n  }\n  data.allowTouchCallbacks = false;\n  if (!data.isTouched) {\n    if (data.isMoved && params.grabCursor) {\n      swiper.setGrabCursor(false);\n    }\n    data.isMoved = false;\n    data.startMoving = false;\n    return;\n  }\n\n  // Return Grab Cursor\n  if (params.grabCursor && data.isMoved && data.isTouched && (swiper.allowSlideNext === true || swiper.allowSlidePrev === true)) {\n    swiper.setGrabCursor(false);\n  }\n\n  // Time diff\n  const touchEndTime = now();\n  const timeDiff = touchEndTime - data.touchStartTime;\n\n  // Tap, doubleTap, Click\n  if (swiper.allowClick) {\n    const pathTree = e.path || e.composedPath && e.composedPath();\n    swiper.updateClickedSlide(pathTree && pathTree[0] || e.target, pathTree);\n    swiper.emit('tap click', e);\n    if (timeDiff < 300 && touchEndTime - data.lastClickTime < 300) {\n      swiper.emit('doubleTap doubleClick', e);\n    }\n  }\n  data.lastClickTime = now();\n  nextTick(() => {\n    if (!swiper.destroyed) swiper.allowClick = true;\n  });\n  if (!data.isTouched || !data.isMoved || !swiper.swipeDirection || touches.diff === 0 && !data.loopSwapReset || data.currentTranslate === data.startTranslate && !data.loopSwapReset) {\n    data.isTouched = false;\n    data.isMoved = false;\n    data.startMoving = false;\n    return;\n  }\n  data.isTouched = false;\n  data.isMoved = false;\n  data.startMoving = false;\n  let currentPos;\n  if (params.followFinger) {\n    currentPos = rtl ? swiper.translate : -swiper.translate;\n  } else {\n    currentPos = -data.currentTranslate;\n  }\n  if (params.cssMode) {\n    return;\n  }\n  if (params.freeMode && params.freeMode.enabled) {\n    swiper.freeMode.onTouchEnd({\n      currentPos\n    });\n    return;\n  }\n\n  // Find current slide\n  const swipeToLast = currentPos >= -swiper.maxTranslate() && !swiper.params.loop;\n  let stopIndex = 0;\n  let groupSize = swiper.slidesSizesGrid[0];\n  for (let i = 0; i < slidesGrid.length; i += i < params.slidesPerGroupSkip ? 1 : params.slidesPerGroup) {\n    const increment = i < params.slidesPerGroupSkip - 1 ? 1 : params.slidesPerGroup;\n    if (typeof slidesGrid[i + increment] !== 'undefined') {\n      if (swipeToLast || currentPos >= slidesGrid[i] && currentPos < slidesGrid[i + increment]) {\n        stopIndex = i;\n        groupSize = slidesGrid[i + increment] - slidesGrid[i];\n      }\n    } else if (swipeToLast || currentPos >= slidesGrid[i]) {\n      stopIndex = i;\n      groupSize = slidesGrid[slidesGrid.length - 1] - slidesGrid[slidesGrid.length - 2];\n    }\n  }\n  let rewindFirstIndex = null;\n  let rewindLastIndex = null;\n  if (params.rewind) {\n    if (swiper.isBeginning) {\n      rewindLastIndex = params.virtual && params.virtual.enabled && swiper.virtual ? swiper.virtual.slides.length - 1 : swiper.slides.length - 1;\n    } else if (swiper.isEnd) {\n      rewindFirstIndex = 0;\n    }\n  }\n  // Find current slide size\n  const ratio = (currentPos - slidesGrid[stopIndex]) / groupSize;\n  const increment = stopIndex < params.slidesPerGroupSkip - 1 ? 1 : params.slidesPerGroup;\n  if (timeDiff > params.longSwipesMs) {\n    // Long touches\n    if (!params.longSwipes) {\n      swiper.slideTo(swiper.activeIndex);\n      return;\n    }\n    if (swiper.swipeDirection === 'next') {\n      if (ratio >= params.longSwipesRatio) swiper.slideTo(params.rewind && swiper.isEnd ? rewindFirstIndex : stopIndex + increment);else swiper.slideTo(stopIndex);\n    }\n    if (swiper.swipeDirection === 'prev') {\n      if (ratio > 1 - params.longSwipesRatio) {\n        swiper.slideTo(stopIndex + increment);\n      } else if (rewindLastIndex !== null && ratio < 0 && Math.abs(ratio) > params.longSwipesRatio) {\n        swiper.slideTo(rewindLastIndex);\n      } else {\n        swiper.slideTo(stopIndex);\n      }\n    }\n  } else {\n    // Short swipes\n    if (!params.shortSwipes) {\n      swiper.slideTo(swiper.activeIndex);\n      return;\n    }\n    const isNavButtonTarget = swiper.navigation && (e.target === swiper.navigation.nextEl || e.target === swiper.navigation.prevEl);\n    if (!isNavButtonTarget) {\n      if (swiper.swipeDirection === 'next') {\n        swiper.slideTo(rewindFirstIndex !== null ? rewindFirstIndex : stopIndex + increment);\n      }\n      if (swiper.swipeDirection === 'prev') {\n        swiper.slideTo(rewindLastIndex !== null ? rewindLastIndex : stopIndex);\n      }\n    } else if (e.target === swiper.navigation.nextEl) {\n      swiper.slideTo(stopIndex + increment);\n    } else {\n      swiper.slideTo(stopIndex);\n    }\n  }\n}\n\nfunction onResize() {\n  const swiper = this;\n  const {\n    params,\n    el\n  } = swiper;\n  if (el && el.offsetWidth === 0) return;\n\n  // Breakpoints\n  if (params.breakpoints) {\n    swiper.setBreakpoint();\n  }\n\n  // Save locks\n  const {\n    allowSlideNext,\n    allowSlidePrev,\n    snapGrid\n  } = swiper;\n  const isVirtual = swiper.virtual && swiper.params.virtual.enabled;\n\n  // Disable locks on resize\n  swiper.allowSlideNext = true;\n  swiper.allowSlidePrev = true;\n  swiper.updateSize();\n  swiper.updateSlides();\n  swiper.updateSlidesClasses();\n  const isVirtualLoop = isVirtual && params.loop;\n  if ((params.slidesPerView === 'auto' || params.slidesPerView > 1) && swiper.isEnd && !swiper.isBeginning && !swiper.params.centeredSlides && !isVirtualLoop) {\n    swiper.slideTo(swiper.slides.length - 1, 0, false, true);\n  } else {\n    if (swiper.params.loop && !isVirtual) {\n      swiper.slideToLoop(swiper.realIndex, 0, false, true);\n    } else {\n      swiper.slideTo(swiper.activeIndex, 0, false, true);\n    }\n  }\n  if (swiper.autoplay && swiper.autoplay.running && swiper.autoplay.paused) {\n    clearTimeout(swiper.autoplay.resizeTimeout);\n    swiper.autoplay.resizeTimeout = setTimeout(() => {\n      if (swiper.autoplay && swiper.autoplay.running && swiper.autoplay.paused) {\n        swiper.autoplay.resume();\n      }\n    }, 500);\n  }\n  // Return locks after resize\n  swiper.allowSlidePrev = allowSlidePrev;\n  swiper.allowSlideNext = allowSlideNext;\n  if (swiper.params.watchOverflow && snapGrid !== swiper.snapGrid) {\n    swiper.checkOverflow();\n  }\n}\n\nfunction onClick(e) {\n  const swiper = this;\n  if (!swiper.enabled) return;\n  if (!swiper.allowClick) {\n    if (swiper.params.preventClicks) e.preventDefault();\n    if (swiper.params.preventClicksPropagation && swiper.animating) {\n      e.stopPropagation();\n      e.stopImmediatePropagation();\n    }\n  }\n}\n\nfunction onScroll() {\n  const swiper = this;\n  const {\n    wrapperEl,\n    rtlTranslate,\n    enabled\n  } = swiper;\n  if (!enabled) return;\n  swiper.previousTranslate = swiper.translate;\n  if (swiper.isHorizontal()) {\n    swiper.translate = -wrapperEl.scrollLeft;\n  } else {\n    swiper.translate = -wrapperEl.scrollTop;\n  }\n  // eslint-disable-next-line\n  if (swiper.translate === 0) swiper.translate = 0;\n  swiper.updateActiveIndex();\n  swiper.updateSlidesClasses();\n  let newProgress;\n  const translatesDiff = swiper.maxTranslate() - swiper.minTranslate();\n  if (translatesDiff === 0) {\n    newProgress = 0;\n  } else {\n    newProgress = (swiper.translate - swiper.minTranslate()) / translatesDiff;\n  }\n  if (newProgress !== swiper.progress) {\n    swiper.updateProgress(rtlTranslate ? -swiper.translate : swiper.translate);\n  }\n  swiper.emit('setTranslate', swiper.translate, false);\n}\n\nfunction onLoad(e) {\n  const swiper = this;\n  processLazyPreloader(swiper, e.target);\n  if (swiper.params.cssMode || swiper.params.slidesPerView !== 'auto' && !swiper.params.autoHeight) {\n    return;\n  }\n  swiper.update();\n}\n\nfunction onDocumentTouchStart() {\n  const swiper = this;\n  if (swiper.documentTouchHandlerProceeded) return;\n  swiper.documentTouchHandlerProceeded = true;\n  if (swiper.params.touchReleaseOnEdges) {\n    swiper.el.style.touchAction = 'auto';\n  }\n}\n\nconst events = (swiper, method) => {\n  const document = getDocument();\n  const {\n    params,\n    el,\n    wrapperEl,\n    device\n  } = swiper;\n  const capture = !!params.nested;\n  const domMethod = method === 'on' ? 'addEventListener' : 'removeEventListener';\n  const swiperMethod = method;\n\n  // Touch Events\n  document[domMethod]('touchstart', swiper.onDocumentTouchStart, {\n    passive: false,\n    capture\n  });\n  el[domMethod]('touchstart', swiper.onTouchStart, {\n    passive: false\n  });\n  el[domMethod]('pointerdown', swiper.onTouchStart, {\n    passive: false\n  });\n  document[domMethod]('touchmove', swiper.onTouchMove, {\n    passive: false,\n    capture\n  });\n  document[domMethod]('pointermove', swiper.onTouchMove, {\n    passive: false,\n    capture\n  });\n  document[domMethod]('touchend', swiper.onTouchEnd, {\n    passive: true\n  });\n  document[domMethod]('pointerup', swiper.onTouchEnd, {\n    passive: true\n  });\n  document[domMethod]('pointercancel', swiper.onTouchEnd, {\n    passive: true\n  });\n  document[domMethod]('touchcancel', swiper.onTouchEnd, {\n    passive: true\n  });\n  document[domMethod]('pointerout', swiper.onTouchEnd, {\n    passive: true\n  });\n  document[domMethod]('pointerleave', swiper.onTouchEnd, {\n    passive: true\n  });\n  document[domMethod]('contextmenu', swiper.onTouchEnd, {\n    passive: true\n  });\n\n  // Prevent Links Clicks\n  if (params.preventClicks || params.preventClicksPropagation) {\n    el[domMethod]('click', swiper.onClick, true);\n  }\n  if (params.cssMode) {\n    wrapperEl[domMethod]('scroll', swiper.onScroll);\n  }\n\n  // Resize handler\n  if (params.updateOnWindowResize) {\n    swiper[swiperMethod](device.ios || device.android ? 'resize orientationchange observerUpdate' : 'resize observerUpdate', onResize, true);\n  } else {\n    swiper[swiperMethod]('observerUpdate', onResize, true);\n  }\n\n  // Images loader\n  el[domMethod]('load', swiper.onLoad, {\n    capture: true\n  });\n};\nfunction attachEvents() {\n  const swiper = this;\n  const {\n    params\n  } = swiper;\n  swiper.onTouchStart = onTouchStart.bind(swiper);\n  swiper.onTouchMove = onTouchMove.bind(swiper);\n  swiper.onTouchEnd = onTouchEnd.bind(swiper);\n  swiper.onDocumentTouchStart = onDocumentTouchStart.bind(swiper);\n  if (params.cssMode) {\n    swiper.onScroll = onScroll.bind(swiper);\n  }\n  swiper.onClick = onClick.bind(swiper);\n  swiper.onLoad = onLoad.bind(swiper);\n  events(swiper, 'on');\n}\nfunction detachEvents() {\n  const swiper = this;\n  events(swiper, 'off');\n}\nvar events$1 = {\n  attachEvents,\n  detachEvents\n};\n\nconst isGridEnabled = (swiper, params) => {\n  return swiper.grid && params.grid && params.grid.rows > 1;\n};\nfunction setBreakpoint() {\n  const swiper = this;\n  const {\n    realIndex,\n    initialized,\n    params,\n    el\n  } = swiper;\n  const breakpoints = params.breakpoints;\n  if (!breakpoints || breakpoints && Object.keys(breakpoints).length === 0) return;\n\n  // Get breakpoint for window width and update parameters\n  const breakpoint = swiper.getBreakpoint(breakpoints, swiper.params.breakpointsBase, swiper.el);\n  if (!breakpoint || swiper.currentBreakpoint === breakpoint) return;\n  const breakpointOnlyParams = breakpoint in breakpoints ? breakpoints[breakpoint] : undefined;\n  const breakpointParams = breakpointOnlyParams || swiper.originalParams;\n  const wasMultiRow = isGridEnabled(swiper, params);\n  const isMultiRow = isGridEnabled(swiper, breakpointParams);\n  const wasGrabCursor = swiper.params.grabCursor;\n  const isGrabCursor = breakpointParams.grabCursor;\n  const wasEnabled = params.enabled;\n  if (wasMultiRow && !isMultiRow) {\n    el.classList.remove(`${params.containerModifierClass}grid`, `${params.containerModifierClass}grid-column`);\n    swiper.emitContainerClasses();\n  } else if (!wasMultiRow && isMultiRow) {\n    el.classList.add(`${params.containerModifierClass}grid`);\n    if (breakpointParams.grid.fill && breakpointParams.grid.fill === 'column' || !breakpointParams.grid.fill && params.grid.fill === 'column') {\n      el.classList.add(`${params.containerModifierClass}grid-column`);\n    }\n    swiper.emitContainerClasses();\n  }\n  if (wasGrabCursor && !isGrabCursor) {\n    swiper.unsetGrabCursor();\n  } else if (!wasGrabCursor && isGrabCursor) {\n    swiper.setGrabCursor();\n  }\n\n  // Toggle navigation, pagination, scrollbar\n  ['navigation', 'pagination', 'scrollbar'].forEach(prop => {\n    if (typeof breakpointParams[prop] === 'undefined') return;\n    const wasModuleEnabled = params[prop] && params[prop].enabled;\n    const isModuleEnabled = breakpointParams[prop] && breakpointParams[prop].enabled;\n    if (wasModuleEnabled && !isModuleEnabled) {\n      swiper[prop].disable();\n    }\n    if (!wasModuleEnabled && isModuleEnabled) {\n      swiper[prop].enable();\n    }\n  });\n  const directionChanged = breakpointParams.direction && breakpointParams.direction !== params.direction;\n  const needsReLoop = params.loop && (breakpointParams.slidesPerView !== params.slidesPerView || directionChanged);\n  const wasLoop = params.loop;\n  if (directionChanged && initialized) {\n    swiper.changeDirection();\n  }\n  extend(swiper.params, breakpointParams);\n  const isEnabled = swiper.params.enabled;\n  const hasLoop = swiper.params.loop;\n  Object.assign(swiper, {\n    allowTouchMove: swiper.params.allowTouchMove,\n    allowSlideNext: swiper.params.allowSlideNext,\n    allowSlidePrev: swiper.params.allowSlidePrev\n  });\n  if (wasEnabled && !isEnabled) {\n    swiper.disable();\n  } else if (!wasEnabled && isEnabled) {\n    swiper.enable();\n  }\n  swiper.currentBreakpoint = breakpoint;\n  swiper.emit('_beforeBreakpoint', breakpointParams);\n  if (initialized) {\n    if (needsReLoop) {\n      swiper.loopDestroy();\n      swiper.loopCreate(realIndex);\n      swiper.updateSlides();\n    } else if (!wasLoop && hasLoop) {\n      swiper.loopCreate(realIndex);\n      swiper.updateSlides();\n    } else if (wasLoop && !hasLoop) {\n      swiper.loopDestroy();\n    }\n  }\n  swiper.emit('breakpoint', breakpointParams);\n}\n\nfunction getBreakpoint(breakpoints, base, containerEl) {\n  if (base === void 0) {\n    base = 'window';\n  }\n  if (!breakpoints || base === 'container' && !containerEl) return undefined;\n  let breakpoint = false;\n  const window = getWindow();\n  const currentHeight = base === 'window' ? window.innerHeight : containerEl.clientHeight;\n  const points = Object.keys(breakpoints).map(point => {\n    if (typeof point === 'string' && point.indexOf('@') === 0) {\n      const minRatio = parseFloat(point.substr(1));\n      const value = currentHeight * minRatio;\n      return {\n        value,\n        point\n      };\n    }\n    return {\n      value: point,\n      point\n    };\n  });\n  points.sort((a, b) => parseInt(a.value, 10) - parseInt(b.value, 10));\n  for (let i = 0; i < points.length; i += 1) {\n    const {\n      point,\n      value\n    } = points[i];\n    if (base === 'window') {\n      if (window.matchMedia(`(min-width: ${value}px)`).matches) {\n        breakpoint = point;\n      }\n    } else if (value <= containerEl.clientWidth) {\n      breakpoint = point;\n    }\n  }\n  return breakpoint || 'max';\n}\n\nvar breakpoints = {\n  setBreakpoint,\n  getBreakpoint\n};\n\nfunction prepareClasses(entries, prefix) {\n  const resultClasses = [];\n  entries.forEach(item => {\n    if (typeof item === 'object') {\n      Object.keys(item).forEach(classNames => {\n        if (item[classNames]) {\n          resultClasses.push(prefix + classNames);\n        }\n      });\n    } else if (typeof item === 'string') {\n      resultClasses.push(prefix + item);\n    }\n  });\n  return resultClasses;\n}\nfunction addClasses() {\n  const swiper = this;\n  const {\n    classNames,\n    params,\n    rtl,\n    el,\n    device\n  } = swiper;\n  // prettier-ignore\n  const suffixes = prepareClasses(['initialized', params.direction, {\n    'free-mode': swiper.params.freeMode && params.freeMode.enabled\n  }, {\n    'autoheight': params.autoHeight\n  }, {\n    'rtl': rtl\n  }, {\n    'grid': params.grid && params.grid.rows > 1\n  }, {\n    'grid-column': params.grid && params.grid.rows > 1 && params.grid.fill === 'column'\n  }, {\n    'android': device.android\n  }, {\n    'ios': device.ios\n  }, {\n    'css-mode': params.cssMode\n  }, {\n    'centered': params.cssMode && params.centeredSlides\n  }, {\n    'watch-progress': params.watchSlidesProgress\n  }], params.containerModifierClass);\n  classNames.push(...suffixes);\n  el.classList.add(...classNames);\n  swiper.emitContainerClasses();\n}\n\nfunction removeClasses() {\n  const swiper = this;\n  const {\n    el,\n    classNames\n  } = swiper;\n  el.classList.remove(...classNames);\n  swiper.emitContainerClasses();\n}\n\nvar classes = {\n  addClasses,\n  removeClasses\n};\n\nfunction checkOverflow() {\n  const swiper = this;\n  const {\n    isLocked: wasLocked,\n    params\n  } = swiper;\n  const {\n    slidesOffsetBefore\n  } = params;\n  if (slidesOffsetBefore) {\n    const lastSlideIndex = swiper.slides.length - 1;\n    const lastSlideRightEdge = swiper.slidesGrid[lastSlideIndex] + swiper.slidesSizesGrid[lastSlideIndex] + slidesOffsetBefore * 2;\n    swiper.isLocked = swiper.size > lastSlideRightEdge;\n  } else {\n    swiper.isLocked = swiper.snapGrid.length === 1;\n  }\n  if (params.allowSlideNext === true) {\n    swiper.allowSlideNext = !swiper.isLocked;\n  }\n  if (params.allowSlidePrev === true) {\n    swiper.allowSlidePrev = !swiper.isLocked;\n  }\n  if (wasLocked && wasLocked !== swiper.isLocked) {\n    swiper.isEnd = false;\n  }\n  if (wasLocked !== swiper.isLocked) {\n    swiper.emit(swiper.isLocked ? 'lock' : 'unlock');\n  }\n}\nvar checkOverflow$1 = {\n  checkOverflow\n};\n\nvar defaults = {\n  init: true,\n  direction: 'horizontal',\n  oneWayMovement: false,\n  swiperElementNodeName: 'SWIPER-CONTAINER',\n  touchEventsTarget: 'wrapper',\n  initialSlide: 0,\n  speed: 300,\n  cssMode: false,\n  updateOnWindowResize: true,\n  resizeObserver: true,\n  nested: false,\n  createElements: false,\n  eventsPrefix: 'swiper',\n  enabled: true,\n  focusableElements: 'input, select, option, textarea, button, video, label',\n  // Overrides\n  width: null,\n  height: null,\n  //\n  preventInteractionOnTransition: false,\n  // ssr\n  userAgent: null,\n  url: null,\n  // To support iOS's swipe-to-go-back gesture (when being used in-app).\n  edgeSwipeDetection: false,\n  edgeSwipeThreshold: 20,\n  // Autoheight\n  autoHeight: false,\n  // Set wrapper width\n  setWrapperSize: false,\n  // Virtual Translate\n  virtualTranslate: false,\n  // Effects\n  effect: 'slide',\n  // 'slide' or 'fade' or 'cube' or 'coverflow' or 'flip'\n\n  // Breakpoints\n  breakpoints: undefined,\n  breakpointsBase: 'window',\n  // Slides grid\n  spaceBetween: 0,\n  slidesPerView: 1,\n  slidesPerGroup: 1,\n  slidesPerGroupSkip: 0,\n  slidesPerGroupAuto: false,\n  centeredSlides: false,\n  centeredSlidesBounds: false,\n  slidesOffsetBefore: 0,\n  // in px\n  slidesOffsetAfter: 0,\n  // in px\n  normalizeSlideIndex: true,\n  centerInsufficientSlides: false,\n  // Disable swiper and hide navigation when container not overflow\n  watchOverflow: true,\n  // Round length\n  roundLengths: false,\n  // Touches\n  touchRatio: 1,\n  touchAngle: 45,\n  simulateTouch: true,\n  shortSwipes: true,\n  longSwipes: true,\n  longSwipesRatio: 0.5,\n  longSwipesMs: 300,\n  followFinger: true,\n  allowTouchMove: true,\n  threshold: 5,\n  touchMoveStopPropagation: false,\n  touchStartPreventDefault: true,\n  touchStartForcePreventDefault: false,\n  touchReleaseOnEdges: false,\n  // Unique Navigation Elements\n  uniqueNavElements: true,\n  // Resistance\n  resistance: true,\n  resistanceRatio: 0.85,\n  // Progress\n  watchSlidesProgress: false,\n  // Cursor\n  grabCursor: false,\n  // Clicks\n  preventClicks: true,\n  preventClicksPropagation: true,\n  slideToClickedSlide: false,\n  // loop\n  loop: false,\n  loopAddBlankSlides: true,\n  loopAdditionalSlides: 0,\n  loopPreventsSliding: true,\n  // rewind\n  rewind: false,\n  // Swiping/no swiping\n  allowSlidePrev: true,\n  allowSlideNext: true,\n  swipeHandler: null,\n  // '.swipe-handler',\n  noSwiping: true,\n  noSwipingClass: 'swiper-no-swiping',\n  noSwipingSelector: null,\n  // Passive Listeners\n  passiveListeners: true,\n  maxBackfaceHiddenSlides: 10,\n  // NS\n  containerModifierClass: 'swiper-',\n  // NEW\n  slideClass: 'swiper-slide',\n  slideBlankClass: 'swiper-slide-blank',\n  slideActiveClass: 'swiper-slide-active',\n  slideVisibleClass: 'swiper-slide-visible',\n  slideFullyVisibleClass: 'swiper-slide-fully-visible',\n  slideNextClass: 'swiper-slide-next',\n  slidePrevClass: 'swiper-slide-prev',\n  wrapperClass: 'swiper-wrapper',\n  lazyPreloaderClass: 'swiper-lazy-preloader',\n  lazyPreloadPrevNext: 0,\n  // Callbacks\n  runCallbacksOnInit: true,\n  // Internals\n  _emitClasses: false\n};\n\nfunction moduleExtendParams(params, allModulesParams) {\n  return function extendParams(obj) {\n    if (obj === void 0) {\n      obj = {};\n    }\n    const moduleParamName = Object.keys(obj)[0];\n    const moduleParams = obj[moduleParamName];\n    if (typeof moduleParams !== 'object' || moduleParams === null) {\n      extend(allModulesParams, obj);\n      return;\n    }\n    if (params[moduleParamName] === true) {\n      params[moduleParamName] = {\n        enabled: true\n      };\n    }\n    if (moduleParamName === 'navigation' && params[moduleParamName] && params[moduleParamName].enabled && !params[moduleParamName].prevEl && !params[moduleParamName].nextEl) {\n      params[moduleParamName].auto = true;\n    }\n    if (['pagination', 'scrollbar'].indexOf(moduleParamName) >= 0 && params[moduleParamName] && params[moduleParamName].enabled && !params[moduleParamName].el) {\n      params[moduleParamName].auto = true;\n    }\n    if (!(moduleParamName in params && 'enabled' in moduleParams)) {\n      extend(allModulesParams, obj);\n      return;\n    }\n    if (typeof params[moduleParamName] === 'object' && !('enabled' in params[moduleParamName])) {\n      params[moduleParamName].enabled = true;\n    }\n    if (!params[moduleParamName]) params[moduleParamName] = {\n      enabled: false\n    };\n    extend(allModulesParams, obj);\n  };\n}\n\n/* eslint no-param-reassign: \"off\" */\nconst prototypes = {\n  eventsEmitter,\n  update,\n  translate,\n  transition,\n  slide,\n  loop,\n  grabCursor,\n  events: events$1,\n  breakpoints,\n  checkOverflow: checkOverflow$1,\n  classes\n};\nconst extendedDefaults = {};\nclass Swiper {\n  constructor() {\n    let el;\n    let params;\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n    if (args.length === 1 && args[0].constructor && Object.prototype.toString.call(args[0]).slice(8, -1) === 'Object') {\n      params = args[0];\n    } else {\n      [el, params] = args;\n    }\n    if (!params) params = {};\n    params = extend({}, params);\n    if (el && !params.el) params.el = el;\n    const document = getDocument();\n    if (params.el && typeof params.el === 'string' && document.querySelectorAll(params.el).length > 1) {\n      const swipers = [];\n      document.querySelectorAll(params.el).forEach(containerEl => {\n        const newParams = extend({}, params, {\n          el: containerEl\n        });\n        swipers.push(new Swiper(newParams));\n      });\n      // eslint-disable-next-line no-constructor-return\n      return swipers;\n    }\n\n    // Swiper Instance\n    const swiper = this;\n    swiper.__swiper__ = true;\n    swiper.support = getSupport();\n    swiper.device = getDevice({\n      userAgent: params.userAgent\n    });\n    swiper.browser = getBrowser();\n    swiper.eventsListeners = {};\n    swiper.eventsAnyListeners = [];\n    swiper.modules = [...swiper.__modules__];\n    if (params.modules && Array.isArray(params.modules)) {\n      swiper.modules.push(...params.modules);\n    }\n    const allModulesParams = {};\n    swiper.modules.forEach(mod => {\n      mod({\n        params,\n        swiper,\n        extendParams: moduleExtendParams(params, allModulesParams),\n        on: swiper.on.bind(swiper),\n        once: swiper.once.bind(swiper),\n        off: swiper.off.bind(swiper),\n        emit: swiper.emit.bind(swiper)\n      });\n    });\n\n    // Extend defaults with modules params\n    const swiperParams = extend({}, defaults, allModulesParams);\n\n    // Extend defaults with passed params\n    swiper.params = extend({}, swiperParams, extendedDefaults, params);\n    swiper.originalParams = extend({}, swiper.params);\n    swiper.passedParams = extend({}, params);\n\n    // add event listeners\n    if (swiper.params && swiper.params.on) {\n      Object.keys(swiper.params.on).forEach(eventName => {\n        swiper.on(eventName, swiper.params.on[eventName]);\n      });\n    }\n    if (swiper.params && swiper.params.onAny) {\n      swiper.onAny(swiper.params.onAny);\n    }\n\n    // Extend Swiper\n    Object.assign(swiper, {\n      enabled: swiper.params.enabled,\n      el,\n      // Classes\n      classNames: [],\n      // Slides\n      slides: [],\n      slidesGrid: [],\n      snapGrid: [],\n      slidesSizesGrid: [],\n      // isDirection\n      isHorizontal() {\n        return swiper.params.direction === 'horizontal';\n      },\n      isVertical() {\n        return swiper.params.direction === 'vertical';\n      },\n      // Indexes\n      activeIndex: 0,\n      realIndex: 0,\n      //\n      isBeginning: true,\n      isEnd: false,\n      // Props\n      translate: 0,\n      previousTranslate: 0,\n      progress: 0,\n      velocity: 0,\n      animating: false,\n      cssOverflowAdjustment() {\n        // Returns 0 unless `translate` is > 2**23\n        // Should be subtracted from css values to prevent overflow\n        return Math.trunc(this.translate / 2 ** 23) * 2 ** 23;\n      },\n      // Locks\n      allowSlideNext: swiper.params.allowSlideNext,\n      allowSlidePrev: swiper.params.allowSlidePrev,\n      // Touch Events\n      touchEventsData: {\n        isTouched: undefined,\n        isMoved: undefined,\n        allowTouchCallbacks: undefined,\n        touchStartTime: undefined,\n        isScrolling: undefined,\n        currentTranslate: undefined,\n        startTranslate: undefined,\n        allowThresholdMove: undefined,\n        // Form elements to match\n        focusableElements: swiper.params.focusableElements,\n        // Last click time\n        lastClickTime: 0,\n        clickTimeout: undefined,\n        // Velocities\n        velocities: [],\n        allowMomentumBounce: undefined,\n        startMoving: undefined,\n        pointerId: null,\n        touchId: null\n      },\n      // Clicks\n      allowClick: true,\n      // Touches\n      allowTouchMove: swiper.params.allowTouchMove,\n      touches: {\n        startX: 0,\n        startY: 0,\n        currentX: 0,\n        currentY: 0,\n        diff: 0\n      },\n      // Images\n      imagesToLoad: [],\n      imagesLoaded: 0\n    });\n    swiper.emit('_swiper');\n\n    // Init\n    if (swiper.params.init) {\n      swiper.init();\n    }\n\n    // Return app instance\n    // eslint-disable-next-line no-constructor-return\n    return swiper;\n  }\n  getDirectionLabel(property) {\n    if (this.isHorizontal()) {\n      return property;\n    }\n    // prettier-ignore\n    return {\n      'width': 'height',\n      'margin-top': 'margin-left',\n      'margin-bottom ': 'margin-right',\n      'margin-left': 'margin-top',\n      'margin-right': 'margin-bottom',\n      'padding-left': 'padding-top',\n      'padding-right': 'padding-bottom',\n      'marginRight': 'marginBottom'\n    }[property];\n  }\n  getSlideIndex(slideEl) {\n    const {\n      slidesEl,\n      params\n    } = this;\n    const slides = elementChildren(slidesEl, `.${params.slideClass}, swiper-slide`);\n    const firstSlideIndex = elementIndex(slides[0]);\n    return elementIndex(slideEl) - firstSlideIndex;\n  }\n  getSlideIndexByData(index) {\n    return this.getSlideIndex(this.slides.filter(slideEl => slideEl.getAttribute('data-swiper-slide-index') * 1 === index)[0]);\n  }\n  recalcSlides() {\n    const swiper = this;\n    const {\n      slidesEl,\n      params\n    } = swiper;\n    swiper.slides = elementChildren(slidesEl, `.${params.slideClass}, swiper-slide`);\n  }\n  enable() {\n    const swiper = this;\n    if (swiper.enabled) return;\n    swiper.enabled = true;\n    if (swiper.params.grabCursor) {\n      swiper.setGrabCursor();\n    }\n    swiper.emit('enable');\n  }\n  disable() {\n    const swiper = this;\n    if (!swiper.enabled) return;\n    swiper.enabled = false;\n    if (swiper.params.grabCursor) {\n      swiper.unsetGrabCursor();\n    }\n    swiper.emit('disable');\n  }\n  setProgress(progress, speed) {\n    const swiper = this;\n    progress = Math.min(Math.max(progress, 0), 1);\n    const min = swiper.minTranslate();\n    const max = swiper.maxTranslate();\n    const current = (max - min) * progress + min;\n    swiper.translateTo(current, typeof speed === 'undefined' ? 0 : speed);\n    swiper.updateActiveIndex();\n    swiper.updateSlidesClasses();\n  }\n  emitContainerClasses() {\n    const swiper = this;\n    if (!swiper.params._emitClasses || !swiper.el) return;\n    const cls = swiper.el.className.split(' ').filter(className => {\n      return className.indexOf('swiper') === 0 || className.indexOf(swiper.params.containerModifierClass) === 0;\n    });\n    swiper.emit('_containerClasses', cls.join(' '));\n  }\n  getSlideClasses(slideEl) {\n    const swiper = this;\n    if (swiper.destroyed) return '';\n    return slideEl.className.split(' ').filter(className => {\n      return className.indexOf('swiper-slide') === 0 || className.indexOf(swiper.params.slideClass) === 0;\n    }).join(' ');\n  }\n  emitSlidesClasses() {\n    const swiper = this;\n    if (!swiper.params._emitClasses || !swiper.el) return;\n    const updates = [];\n    swiper.slides.forEach(slideEl => {\n      const classNames = swiper.getSlideClasses(slideEl);\n      updates.push({\n        slideEl,\n        classNames\n      });\n      swiper.emit('_slideClass', slideEl, classNames);\n    });\n    swiper.emit('_slideClasses', updates);\n  }\n  slidesPerViewDynamic(view, exact) {\n    if (view === void 0) {\n      view = 'current';\n    }\n    if (exact === void 0) {\n      exact = false;\n    }\n    const swiper = this;\n    const {\n      params,\n      slides,\n      slidesGrid,\n      slidesSizesGrid,\n      size: swiperSize,\n      activeIndex\n    } = swiper;\n    let spv = 1;\n    if (typeof params.slidesPerView === 'number') return params.slidesPerView;\n    if (params.centeredSlides) {\n      let slideSize = slides[activeIndex] ? Math.ceil(slides[activeIndex].swiperSlideSize) : 0;\n      let breakLoop;\n      for (let i = activeIndex + 1; i < slides.length; i += 1) {\n        if (slides[i] && !breakLoop) {\n          slideSize += Math.ceil(slides[i].swiperSlideSize);\n          spv += 1;\n          if (slideSize > swiperSize) breakLoop = true;\n        }\n      }\n      for (let i = activeIndex - 1; i >= 0; i -= 1) {\n        if (slides[i] && !breakLoop) {\n          slideSize += slides[i].swiperSlideSize;\n          spv += 1;\n          if (slideSize > swiperSize) breakLoop = true;\n        }\n      }\n    } else {\n      // eslint-disable-next-line\n      if (view === 'current') {\n        for (let i = activeIndex + 1; i < slides.length; i += 1) {\n          const slideInView = exact ? slidesGrid[i] + slidesSizesGrid[i] - slidesGrid[activeIndex] < swiperSize : slidesGrid[i] - slidesGrid[activeIndex] < swiperSize;\n          if (slideInView) {\n            spv += 1;\n          }\n        }\n      } else {\n        // previous\n        for (let i = activeIndex - 1; i >= 0; i -= 1) {\n          const slideInView = slidesGrid[activeIndex] - slidesGrid[i] < swiperSize;\n          if (slideInView) {\n            spv += 1;\n          }\n        }\n      }\n    }\n    return spv;\n  }\n  update() {\n    const swiper = this;\n    if (!swiper || swiper.destroyed) return;\n    const {\n      snapGrid,\n      params\n    } = swiper;\n    // Breakpoints\n    if (params.breakpoints) {\n      swiper.setBreakpoint();\n    }\n    [...swiper.el.querySelectorAll('[loading=\"lazy\"]')].forEach(imageEl => {\n      if (imageEl.complete) {\n        processLazyPreloader(swiper, imageEl);\n      }\n    });\n    swiper.updateSize();\n    swiper.updateSlides();\n    swiper.updateProgress();\n    swiper.updateSlidesClasses();\n    function setTranslate() {\n      const translateValue = swiper.rtlTranslate ? swiper.translate * -1 : swiper.translate;\n      const newTranslate = Math.min(Math.max(translateValue, swiper.maxTranslate()), swiper.minTranslate());\n      swiper.setTranslate(newTranslate);\n      swiper.updateActiveIndex();\n      swiper.updateSlidesClasses();\n    }\n    let translated;\n    if (params.freeMode && params.freeMode.enabled && !params.cssMode) {\n      setTranslate();\n      if (params.autoHeight) {\n        swiper.updateAutoHeight();\n      }\n    } else {\n      if ((params.slidesPerView === 'auto' || params.slidesPerView > 1) && swiper.isEnd && !params.centeredSlides) {\n        const slides = swiper.virtual && params.virtual.enabled ? swiper.virtual.slides : swiper.slides;\n        translated = swiper.slideTo(slides.length - 1, 0, false, true);\n      } else {\n        translated = swiper.slideTo(swiper.activeIndex, 0, false, true);\n      }\n      if (!translated) {\n        setTranslate();\n      }\n    }\n    if (params.watchOverflow && snapGrid !== swiper.snapGrid) {\n      swiper.checkOverflow();\n    }\n    swiper.emit('update');\n  }\n  changeDirection(newDirection, needUpdate) {\n    if (needUpdate === void 0) {\n      needUpdate = true;\n    }\n    const swiper = this;\n    const currentDirection = swiper.params.direction;\n    if (!newDirection) {\n      // eslint-disable-next-line\n      newDirection = currentDirection === 'horizontal' ? 'vertical' : 'horizontal';\n    }\n    if (newDirection === currentDirection || newDirection !== 'horizontal' && newDirection !== 'vertical') {\n      return swiper;\n    }\n    swiper.el.classList.remove(`${swiper.params.containerModifierClass}${currentDirection}`);\n    swiper.el.classList.add(`${swiper.params.containerModifierClass}${newDirection}`);\n    swiper.emitContainerClasses();\n    swiper.params.direction = newDirection;\n    swiper.slides.forEach(slideEl => {\n      if (newDirection === 'vertical') {\n        slideEl.style.width = '';\n      } else {\n        slideEl.style.height = '';\n      }\n    });\n    swiper.emit('changeDirection');\n    if (needUpdate) swiper.update();\n    return swiper;\n  }\n  changeLanguageDirection(direction) {\n    const swiper = this;\n    if (swiper.rtl && direction === 'rtl' || !swiper.rtl && direction === 'ltr') return;\n    swiper.rtl = direction === 'rtl';\n    swiper.rtlTranslate = swiper.params.direction === 'horizontal' && swiper.rtl;\n    if (swiper.rtl) {\n      swiper.el.classList.add(`${swiper.params.containerModifierClass}rtl`);\n      swiper.el.dir = 'rtl';\n    } else {\n      swiper.el.classList.remove(`${swiper.params.containerModifierClass}rtl`);\n      swiper.el.dir = 'ltr';\n    }\n    swiper.update();\n  }\n  mount(element) {\n    const swiper = this;\n    if (swiper.mounted) return true;\n\n    // Find el\n    let el = element || swiper.params.el;\n    if (typeof el === 'string') {\n      el = document.querySelector(el);\n    }\n    if (!el) {\n      return false;\n    }\n    el.swiper = swiper;\n    if (el.parentNode && el.parentNode.host && el.parentNode.host.nodeName === swiper.params.swiperElementNodeName.toUpperCase()) {\n      swiper.isElement = true;\n    }\n    const getWrapperSelector = () => {\n      return `.${(swiper.params.wrapperClass || '').trim().split(' ').join('.')}`;\n    };\n    const getWrapper = () => {\n      if (el && el.shadowRoot && el.shadowRoot.querySelector) {\n        const res = el.shadowRoot.querySelector(getWrapperSelector());\n        // Children needs to return slot items\n        return res;\n      }\n      return elementChildren(el, getWrapperSelector())[0];\n    };\n    // Find Wrapper\n    let wrapperEl = getWrapper();\n    if (!wrapperEl && swiper.params.createElements) {\n      wrapperEl = createElement('div', swiper.params.wrapperClass);\n      el.append(wrapperEl);\n      elementChildren(el, `.${swiper.params.slideClass}`).forEach(slideEl => {\n        wrapperEl.append(slideEl);\n      });\n    }\n    Object.assign(swiper, {\n      el,\n      wrapperEl,\n      slidesEl: swiper.isElement && !el.parentNode.host.slideSlots ? el.parentNode.host : wrapperEl,\n      hostEl: swiper.isElement ? el.parentNode.host : el,\n      mounted: true,\n      // RTL\n      rtl: el.dir.toLowerCase() === 'rtl' || elementStyle(el, 'direction') === 'rtl',\n      rtlTranslate: swiper.params.direction === 'horizontal' && (el.dir.toLowerCase() === 'rtl' || elementStyle(el, 'direction') === 'rtl'),\n      wrongRTL: elementStyle(wrapperEl, 'display') === '-webkit-box'\n    });\n    return true;\n  }\n  init(el) {\n    const swiper = this;\n    if (swiper.initialized) return swiper;\n    const mounted = swiper.mount(el);\n    if (mounted === false) return swiper;\n    swiper.emit('beforeInit');\n\n    // Set breakpoint\n    if (swiper.params.breakpoints) {\n      swiper.setBreakpoint();\n    }\n\n    // Add Classes\n    swiper.addClasses();\n\n    // Update size\n    swiper.updateSize();\n\n    // Update slides\n    swiper.updateSlides();\n    if (swiper.params.watchOverflow) {\n      swiper.checkOverflow();\n    }\n\n    // Set Grab Cursor\n    if (swiper.params.grabCursor && swiper.enabled) {\n      swiper.setGrabCursor();\n    }\n\n    // Slide To Initial Slide\n    if (swiper.params.loop && swiper.virtual && swiper.params.virtual.enabled) {\n      swiper.slideTo(swiper.params.initialSlide + swiper.virtual.slidesBefore, 0, swiper.params.runCallbacksOnInit, false, true);\n    } else {\n      swiper.slideTo(swiper.params.initialSlide, 0, swiper.params.runCallbacksOnInit, false, true);\n    }\n\n    // Create loop\n    if (swiper.params.loop) {\n      swiper.loopCreate();\n    }\n\n    // Attach events\n    swiper.attachEvents();\n    const lazyElements = [...swiper.el.querySelectorAll('[loading=\"lazy\"]')];\n    if (swiper.isElement) {\n      lazyElements.push(...swiper.hostEl.querySelectorAll('[loading=\"lazy\"]'));\n    }\n    lazyElements.forEach(imageEl => {\n      if (imageEl.complete) {\n        processLazyPreloader(swiper, imageEl);\n      } else {\n        imageEl.addEventListener('load', e => {\n          processLazyPreloader(swiper, e.target);\n        });\n      }\n    });\n    preload(swiper);\n\n    // Init Flag\n    swiper.initialized = true;\n    preload(swiper);\n\n    // Emit\n    swiper.emit('init');\n    swiper.emit('afterInit');\n    return swiper;\n  }\n  destroy(deleteInstance, cleanStyles) {\n    if (deleteInstance === void 0) {\n      deleteInstance = true;\n    }\n    if (cleanStyles === void 0) {\n      cleanStyles = true;\n    }\n    const swiper = this;\n    const {\n      params,\n      el,\n      wrapperEl,\n      slides\n    } = swiper;\n    if (typeof swiper.params === 'undefined' || swiper.destroyed) {\n      return null;\n    }\n    swiper.emit('beforeDestroy');\n\n    // Init Flag\n    swiper.initialized = false;\n\n    // Detach events\n    swiper.detachEvents();\n\n    // Destroy loop\n    if (params.loop) {\n      swiper.loopDestroy();\n    }\n\n    // Cleanup styles\n    if (cleanStyles) {\n      swiper.removeClasses();\n      el.removeAttribute('style');\n      wrapperEl.removeAttribute('style');\n      if (slides && slides.length) {\n        slides.forEach(slideEl => {\n          slideEl.classList.remove(params.slideVisibleClass, params.slideFullyVisibleClass, params.slideActiveClass, params.slideNextClass, params.slidePrevClass);\n          slideEl.removeAttribute('style');\n          slideEl.removeAttribute('data-swiper-slide-index');\n        });\n      }\n    }\n    swiper.emit('destroy');\n\n    // Detach emitter events\n    Object.keys(swiper.eventsListeners).forEach(eventName => {\n      swiper.off(eventName);\n    });\n    if (deleteInstance !== false) {\n      swiper.el.swiper = null;\n      deleteProps(swiper);\n    }\n    swiper.destroyed = true;\n    return null;\n  }\n  static extendDefaults(newDefaults) {\n    extend(extendedDefaults, newDefaults);\n  }\n  static get extendedDefaults() {\n    return extendedDefaults;\n  }\n  static get defaults() {\n    return defaults;\n  }\n  static installModule(mod) {\n    if (!Swiper.prototype.__modules__) Swiper.prototype.__modules__ = [];\n    const modules = Swiper.prototype.__modules__;\n    if (typeof mod === 'function' && modules.indexOf(mod) < 0) {\n      modules.push(mod);\n    }\n  }\n  static use(module) {\n    if (Array.isArray(module)) {\n      module.forEach(m => Swiper.installModule(m));\n      return Swiper;\n    }\n    Swiper.installModule(module);\n    return Swiper;\n  }\n}\nObject.keys(prototypes).forEach(prototypeGroup => {\n  Object.keys(prototypes[prototypeGroup]).forEach(protoMethod => {\n    Swiper.prototype[protoMethod] = prototypes[prototypeGroup][protoMethod];\n  });\n});\nSwiper.use([Resize, Observer]);\n\nexport { Swiper as S, defaults as d };\n","import { e as elementChildren, c as createElement } from './utils.mjs';\n\nfunction createElementIfNotDefined(swiper, originalParams, params, checkProps) {\n  if (swiper.params.createElements) {\n    Object.keys(checkProps).forEach(key => {\n      if (!params[key] && params.auto === true) {\n        let element = elementChildren(swiper.el, `.${checkProps[key]}`)[0];\n        if (!element) {\n          element = createElement('div', checkProps[key]);\n          element.className = checkProps[key];\n          swiper.el.append(element);\n        }\n        params[key] = element;\n        originalParams[key] = element;\n      }\n    });\n  }\n  return params;\n}\n\nexport { createElementIfNotDefined as c };\n","import { c as createElementIfNotDefined } from '../shared/create-element-if-not-defined.mjs';\nimport { m as makeElementsArray } from '../shared/utils.mjs';\n\nfunction Navigation(_ref) {\n  let {\n    swiper,\n    extendParams,\n    on,\n    emit\n  } = _ref;\n  extendParams({\n    navigation: {\n      nextEl: null,\n      prevEl: null,\n      hideOnClick: false,\n      disabledClass: 'swiper-button-disabled',\n      hiddenClass: 'swiper-button-hidden',\n      lockClass: 'swiper-button-lock',\n      navigationDisabledClass: 'swiper-navigation-disabled'\n    }\n  });\n  swiper.navigation = {\n    nextEl: null,\n    prevEl: null\n  };\n  function getEl(el) {\n    let res;\n    if (el && typeof el === 'string' && swiper.isElement) {\n      res = swiper.el.querySelector(el);\n      if (res) return res;\n    }\n    if (el) {\n      if (typeof el === 'string') res = [...document.querySelectorAll(el)];\n      if (swiper.params.uniqueNavElements && typeof el === 'string' && res && res.length > 1 && swiper.el.querySelectorAll(el).length === 1) {\n        res = swiper.el.querySelector(el);\n      } else if (res && res.length === 1) {\n        res = res[0];\n      }\n    }\n    if (el && !res) return el;\n    // if (Array.isArray(res) && res.length === 1) res = res[0];\n    return res;\n  }\n  function toggleEl(el, disabled) {\n    const params = swiper.params.navigation;\n    el = makeElementsArray(el);\n    el.forEach(subEl => {\n      if (subEl) {\n        subEl.classList[disabled ? 'add' : 'remove'](...params.disabledClass.split(' '));\n        if (subEl.tagName === 'BUTTON') subEl.disabled = disabled;\n        if (swiper.params.watchOverflow && swiper.enabled) {\n          subEl.classList[swiper.isLocked ? 'add' : 'remove'](params.lockClass);\n        }\n      }\n    });\n  }\n  function update() {\n    // Update Navigation Buttons\n    const {\n      nextEl,\n      prevEl\n    } = swiper.navigation;\n    if (swiper.params.loop) {\n      toggleEl(prevEl, false);\n      toggleEl(nextEl, false);\n      return;\n    }\n    toggleEl(prevEl, swiper.isBeginning && !swiper.params.rewind);\n    toggleEl(nextEl, swiper.isEnd && !swiper.params.rewind);\n  }\n  function onPrevClick(e) {\n    e.preventDefault();\n    if (swiper.isBeginning && !swiper.params.loop && !swiper.params.rewind) return;\n    swiper.slidePrev();\n    emit('navigationPrev');\n  }\n  function onNextClick(e) {\n    e.preventDefault();\n    if (swiper.isEnd && !swiper.params.loop && !swiper.params.rewind) return;\n    swiper.slideNext();\n    emit('navigationNext');\n  }\n  function init() {\n    const params = swiper.params.navigation;\n    swiper.params.navigation = createElementIfNotDefined(swiper, swiper.originalParams.navigation, swiper.params.navigation, {\n      nextEl: 'swiper-button-next',\n      prevEl: 'swiper-button-prev'\n    });\n    if (!(params.nextEl || params.prevEl)) return;\n    let nextEl = getEl(params.nextEl);\n    let prevEl = getEl(params.prevEl);\n    Object.assign(swiper.navigation, {\n      nextEl,\n      prevEl\n    });\n    nextEl = makeElementsArray(nextEl);\n    prevEl = makeElementsArray(prevEl);\n    const initButton = (el, dir) => {\n      if (el) {\n        el.addEventListener('click', dir === 'next' ? onNextClick : onPrevClick);\n      }\n      if (!swiper.enabled && el) {\n        el.classList.add(...params.lockClass.split(' '));\n      }\n    };\n    nextEl.forEach(el => initButton(el, 'next'));\n    prevEl.forEach(el => initButton(el, 'prev'));\n  }\n  function destroy() {\n    let {\n      nextEl,\n      prevEl\n    } = swiper.navigation;\n    nextEl = makeElementsArray(nextEl);\n    prevEl = makeElementsArray(prevEl);\n    const destroyButton = (el, dir) => {\n      el.removeEventListener('click', dir === 'next' ? onNextClick : onPrevClick);\n      el.classList.remove(...swiper.params.navigation.disabledClass.split(' '));\n    };\n    nextEl.forEach(el => destroyButton(el, 'next'));\n    prevEl.forEach(el => destroyButton(el, 'prev'));\n  }\n  on('init', () => {\n    if (swiper.params.navigation.enabled === false) {\n      // eslint-disable-next-line\n      disable();\n    } else {\n      init();\n      update();\n    }\n  });\n  on('toEdge fromEdge lock unlock', () => {\n    update();\n  });\n  on('destroy', () => {\n    destroy();\n  });\n  on('enable disable', () => {\n    let {\n      nextEl,\n      prevEl\n    } = swiper.navigation;\n    nextEl = makeElementsArray(nextEl);\n    prevEl = makeElementsArray(prevEl);\n    if (swiper.enabled) {\n      update();\n      return;\n    }\n    [...nextEl, ...prevEl].filter(el => !!el).forEach(el => el.classList.add(swiper.params.navigation.lockClass));\n  });\n  on('click', (_s, e) => {\n    let {\n      nextEl,\n      prevEl\n    } = swiper.navigation;\n    nextEl = makeElementsArray(nextEl);\n    prevEl = makeElementsArray(prevEl);\n    const targetEl = e.target;\n    if (swiper.params.navigation.hideOnClick && !prevEl.includes(targetEl) && !nextEl.includes(targetEl)) {\n      if (swiper.pagination && swiper.params.pagination && swiper.params.pagination.clickable && (swiper.pagination.el === targetEl || swiper.pagination.el.contains(targetEl))) return;\n      let isHidden;\n      if (nextEl.length) {\n        isHidden = nextEl[0].classList.contains(swiper.params.navigation.hiddenClass);\n      } else if (prevEl.length) {\n        isHidden = prevEl[0].classList.contains(swiper.params.navigation.hiddenClass);\n      }\n      if (isHidden === true) {\n        emit('navigationShow');\n      } else {\n        emit('navigationHide');\n      }\n      [...nextEl, ...prevEl].filter(el => !!el).forEach(el => el.classList.toggle(swiper.params.navigation.hiddenClass));\n    }\n  });\n  const enable = () => {\n    swiper.el.classList.remove(...swiper.params.navigation.navigationDisabledClass.split(' '));\n    init();\n    update();\n  };\n  const disable = () => {\n    swiper.el.classList.add(...swiper.params.navigation.navigationDisabledClass.split(' '));\n    destroy();\n  };\n  Object.assign(swiper.navigation, {\n    enable,\n    disable,\n    update,\n    init,\n    destroy\n  });\n}\n\nexport { Navigation as default };\n","import { g as getDocument } from '../shared/ssr-window.esm.mjs';\nimport { m as makeElementsArray, i as classesToTokens, c as createElement, n as nextTick, b as elementOffset } from '../shared/utils.mjs';\nimport { c as createElementIfNotDefined } from '../shared/create-element-if-not-defined.mjs';\nimport { c as classesToSelector } from '../shared/classes-to-selector.mjs';\n\nfunction Scrollbar(_ref) {\n  let {\n    swiper,\n    extendParams,\n    on,\n    emit\n  } = _ref;\n  const document = getDocument();\n  let isTouched = false;\n  let timeout = null;\n  let dragTimeout = null;\n  let dragStartPos;\n  let dragSize;\n  let trackSize;\n  let divider;\n  extendParams({\n    scrollbar: {\n      el: null,\n      dragSize: 'auto',\n      hide: false,\n      draggable: false,\n      snapOnRelease: true,\n      lockClass: 'swiper-scrollbar-lock',\n      dragClass: 'swiper-scrollbar-drag',\n      scrollbarDisabledClass: 'swiper-scrollbar-disabled',\n      horizontalClass: `swiper-scrollbar-horizontal`,\n      verticalClass: `swiper-scrollbar-vertical`\n    }\n  });\n  swiper.scrollbar = {\n    el: null,\n    dragEl: null\n  };\n  function setTranslate() {\n    if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return;\n    const {\n      scrollbar,\n      rtlTranslate: rtl\n    } = swiper;\n    const {\n      dragEl,\n      el\n    } = scrollbar;\n    const params = swiper.params.scrollbar;\n    const progress = swiper.params.loop ? swiper.progressLoop : swiper.progress;\n    let newSize = dragSize;\n    let newPos = (trackSize - dragSize) * progress;\n    if (rtl) {\n      newPos = -newPos;\n      if (newPos > 0) {\n        newSize = dragSize - newPos;\n        newPos = 0;\n      } else if (-newPos + dragSize > trackSize) {\n        newSize = trackSize + newPos;\n      }\n    } else if (newPos < 0) {\n      newSize = dragSize + newPos;\n      newPos = 0;\n    } else if (newPos + dragSize > trackSize) {\n      newSize = trackSize - newPos;\n    }\n    if (swiper.isHorizontal()) {\n      dragEl.style.transform = `translate3d(${newPos}px, 0, 0)`;\n      dragEl.style.width = `${newSize}px`;\n    } else {\n      dragEl.style.transform = `translate3d(0px, ${newPos}px, 0)`;\n      dragEl.style.height = `${newSize}px`;\n    }\n    if (params.hide) {\n      clearTimeout(timeout);\n      el.style.opacity = 1;\n      timeout = setTimeout(() => {\n        el.style.opacity = 0;\n        el.style.transitionDuration = '400ms';\n      }, 1000);\n    }\n  }\n  function setTransition(duration) {\n    if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return;\n    swiper.scrollbar.dragEl.style.transitionDuration = `${duration}ms`;\n  }\n  function updateSize() {\n    if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return;\n    const {\n      scrollbar\n    } = swiper;\n    const {\n      dragEl,\n      el\n    } = scrollbar;\n    dragEl.style.width = '';\n    dragEl.style.height = '';\n    trackSize = swiper.isHorizontal() ? el.offsetWidth : el.offsetHeight;\n    divider = swiper.size / (swiper.virtualSize + swiper.params.slidesOffsetBefore - (swiper.params.centeredSlides ? swiper.snapGrid[0] : 0));\n    if (swiper.params.scrollbar.dragSize === 'auto') {\n      dragSize = trackSize * divider;\n    } else {\n      dragSize = parseInt(swiper.params.scrollbar.dragSize, 10);\n    }\n    if (swiper.isHorizontal()) {\n      dragEl.style.width = `${dragSize}px`;\n    } else {\n      dragEl.style.height = `${dragSize}px`;\n    }\n    if (divider >= 1) {\n      el.style.display = 'none';\n    } else {\n      el.style.display = '';\n    }\n    if (swiper.params.scrollbar.hide) {\n      el.style.opacity = 0;\n    }\n    if (swiper.params.watchOverflow && swiper.enabled) {\n      scrollbar.el.classList[swiper.isLocked ? 'add' : 'remove'](swiper.params.scrollbar.lockClass);\n    }\n  }\n  function getPointerPosition(e) {\n    return swiper.isHorizontal() ? e.clientX : e.clientY;\n  }\n  function setDragPosition(e) {\n    const {\n      scrollbar,\n      rtlTranslate: rtl\n    } = swiper;\n    const {\n      el\n    } = scrollbar;\n    let positionRatio;\n    positionRatio = (getPointerPosition(e) - elementOffset(el)[swiper.isHorizontal() ? 'left' : 'top'] - (dragStartPos !== null ? dragStartPos : dragSize / 2)) / (trackSize - dragSize);\n    positionRatio = Math.max(Math.min(positionRatio, 1), 0);\n    if (rtl) {\n      positionRatio = 1 - positionRatio;\n    }\n    const position = swiper.minTranslate() + (swiper.maxTranslate() - swiper.minTranslate()) * positionRatio;\n    swiper.updateProgress(position);\n    swiper.setTranslate(position);\n    swiper.updateActiveIndex();\n    swiper.updateSlidesClasses();\n  }\n  function onDragStart(e) {\n    const params = swiper.params.scrollbar;\n    const {\n      scrollbar,\n      wrapperEl\n    } = swiper;\n    const {\n      el,\n      dragEl\n    } = scrollbar;\n    isTouched = true;\n    dragStartPos = e.target === dragEl ? getPointerPosition(e) - e.target.getBoundingClientRect()[swiper.isHorizontal() ? 'left' : 'top'] : null;\n    e.preventDefault();\n    e.stopPropagation();\n    wrapperEl.style.transitionDuration = '100ms';\n    dragEl.style.transitionDuration = '100ms';\n    setDragPosition(e);\n    clearTimeout(dragTimeout);\n    el.style.transitionDuration = '0ms';\n    if (params.hide) {\n      el.style.opacity = 1;\n    }\n    if (swiper.params.cssMode) {\n      swiper.wrapperEl.style['scroll-snap-type'] = 'none';\n    }\n    emit('scrollbarDragStart', e);\n  }\n  function onDragMove(e) {\n    const {\n      scrollbar,\n      wrapperEl\n    } = swiper;\n    const {\n      el,\n      dragEl\n    } = scrollbar;\n    if (!isTouched) return;\n    if (e.preventDefault && e.cancelable) e.preventDefault();else e.returnValue = false;\n    setDragPosition(e);\n    wrapperEl.style.transitionDuration = '0ms';\n    el.style.transitionDuration = '0ms';\n    dragEl.style.transitionDuration = '0ms';\n    emit('scrollbarDragMove', e);\n  }\n  function onDragEnd(e) {\n    const params = swiper.params.scrollbar;\n    const {\n      scrollbar,\n      wrapperEl\n    } = swiper;\n    const {\n      el\n    } = scrollbar;\n    if (!isTouched) return;\n    isTouched = false;\n    if (swiper.params.cssMode) {\n      swiper.wrapperEl.style['scroll-snap-type'] = '';\n      wrapperEl.style.transitionDuration = '';\n    }\n    if (params.hide) {\n      clearTimeout(dragTimeout);\n      dragTimeout = nextTick(() => {\n        el.style.opacity = 0;\n        el.style.transitionDuration = '400ms';\n      }, 1000);\n    }\n    emit('scrollbarDragEnd', e);\n    if (params.snapOnRelease) {\n      swiper.slideToClosest();\n    }\n  }\n  function events(method) {\n    const {\n      scrollbar,\n      params\n    } = swiper;\n    const el = scrollbar.el;\n    if (!el) return;\n    const target = el;\n    const activeListener = params.passiveListeners ? {\n      passive: false,\n      capture: false\n    } : false;\n    const passiveListener = params.passiveListeners ? {\n      passive: true,\n      capture: false\n    } : false;\n    if (!target) return;\n    const eventMethod = method === 'on' ? 'addEventListener' : 'removeEventListener';\n    target[eventMethod]('pointerdown', onDragStart, activeListener);\n    document[eventMethod]('pointermove', onDragMove, activeListener);\n    document[eventMethod]('pointerup', onDragEnd, passiveListener);\n  }\n  function enableDraggable() {\n    if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return;\n    events('on');\n  }\n  function disableDraggable() {\n    if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return;\n    events('off');\n  }\n  function init() {\n    const {\n      scrollbar,\n      el: swiperEl\n    } = swiper;\n    swiper.params.scrollbar = createElementIfNotDefined(swiper, swiper.originalParams.scrollbar, swiper.params.scrollbar, {\n      el: 'swiper-scrollbar'\n    });\n    const params = swiper.params.scrollbar;\n    if (!params.el) return;\n    let el;\n    if (typeof params.el === 'string' && swiper.isElement) {\n      el = swiper.el.querySelector(params.el);\n    }\n    if (!el && typeof params.el === 'string') {\n      el = document.querySelectorAll(params.el);\n      if (!el.length) return;\n    } else if (!el) {\n      el = params.el;\n    }\n    if (swiper.params.uniqueNavElements && typeof params.el === 'string' && el.length > 1 && swiperEl.querySelectorAll(params.el).length === 1) {\n      el = swiperEl.querySelector(params.el);\n    }\n    if (el.length > 0) el = el[0];\n    el.classList.add(swiper.isHorizontal() ? params.horizontalClass : params.verticalClass);\n    let dragEl;\n    if (el) {\n      dragEl = el.querySelector(classesToSelector(swiper.params.scrollbar.dragClass));\n      if (!dragEl) {\n        dragEl = createElement('div', swiper.params.scrollbar.dragClass);\n        el.append(dragEl);\n      }\n    }\n    Object.assign(scrollbar, {\n      el,\n      dragEl\n    });\n    if (params.draggable) {\n      enableDraggable();\n    }\n    if (el) {\n      el.classList[swiper.enabled ? 'remove' : 'add'](...classesToTokens(swiper.params.scrollbar.lockClass));\n    }\n  }\n  function destroy() {\n    const params = swiper.params.scrollbar;\n    const el = swiper.scrollbar.el;\n    if (el) {\n      el.classList.remove(...classesToTokens(swiper.isHorizontal() ? params.horizontalClass : params.verticalClass));\n    }\n    disableDraggable();\n  }\n  on('changeDirection', () => {\n    if (!swiper.scrollbar || !swiper.scrollbar.el) return;\n    const params = swiper.params.scrollbar;\n    let {\n      el\n    } = swiper.scrollbar;\n    el = makeElementsArray(el);\n    el.forEach(subEl => {\n      subEl.classList.remove(params.horizontalClass, params.verticalClass);\n      subEl.classList.add(swiper.isHorizontal() ? params.horizontalClass : params.verticalClass);\n    });\n  });\n  on('init', () => {\n    if (swiper.params.scrollbar.enabled === false) {\n      // eslint-disable-next-line\n      disable();\n    } else {\n      init();\n      updateSize();\n      setTranslate();\n    }\n  });\n  on('update resize observerUpdate lock unlock changeDirection', () => {\n    updateSize();\n  });\n  on('setTranslate', () => {\n    setTranslate();\n  });\n  on('setTransition', (_s, duration) => {\n    setTransition(duration);\n  });\n  on('enable disable', () => {\n    const {\n      el\n    } = swiper.scrollbar;\n    if (el) {\n      el.classList[swiper.enabled ? 'remove' : 'add'](...classesToTokens(swiper.params.scrollbar.lockClass));\n    }\n  });\n  on('destroy', () => {\n    destroy();\n  });\n  const enable = () => {\n    swiper.el.classList.remove(...classesToTokens(swiper.params.scrollbar.scrollbarDisabledClass));\n    if (swiper.scrollbar.el) {\n      swiper.scrollbar.el.classList.remove(...classesToTokens(swiper.params.scrollbar.scrollbarDisabledClass));\n    }\n    init();\n    updateSize();\n    setTranslate();\n  };\n  const disable = () => {\n    swiper.el.classList.add(...classesToTokens(swiper.params.scrollbar.scrollbarDisabledClass));\n    if (swiper.scrollbar.el) {\n      swiper.scrollbar.el.classList.add(...classesToTokens(swiper.params.scrollbar.scrollbarDisabledClass));\n    }\n    destroy();\n  };\n  Object.assign(swiper.scrollbar, {\n    enable,\n    disable,\n    updateSize,\n    setTranslate,\n    init,\n    destroy\n  });\n}\n\nexport { Scrollbar as default };\n","function classesToSelector(classes) {\n  if (classes === void 0) {\n    classes = '';\n  }\n  return `.${classes.trim().replace(/([\\.:!+\\/])/g, '\\\\$1') // eslint-disable-line\n  .replace(/ /g, '.')}`;\n}\n\nexport { classesToSelector as c };\n","\n\nconst carbonFootprintChart = (element) => {\n\n  const createChart = (data) => {\n    const totalCF = data.total;\n\n    const getSegmentPercentage = (value) => {\n      if(value <= 0) return 0;\n\n      return Math.round((value / totalCF) * 100);\n    };\n\n    const segments = {\n      travel: getSegmentPercentage(data.travel_footprint),\n      food: getSegmentPercentage(data.food_footprint),\n      housing: getSegmentPercentage(data.housing_footprint),\n      other: getSegmentPercentage(data.other_footprint),\n    };\n\n    return `\n      <div class=\"cf-chart\">\n        <div class=\"cf-chart__wrapper\">\n          ${segments.travel > 0 ?\n            `<div class=\"cf-chart__segment travel\" style=\"width: ${segments.travel}%;\"><span>${segments.travel}%</span></div>` : ''}\n          ${segments.food > 0 ?\n            `<div class=\"cf-chart__segment food\" style=\"width: ${segments.food}%;\"><span>${segments.food}%</span></div>` : ''}\n          ${segments.housing > 0 ?\n            `<div class=\"cf-chart__segment housing\" style=\"width: ${segments.housing}%;\"><span>${segments.housing}%</span></div>` : ''}\n          ${segments.other > 0 ?\n            `<div class=\"cf-chart__segment other\" style=\"width: ${segments.other}%;\"><span>${segments.other}%</span></div>` : ''}\n        </div>\n        <div class=\"cf-chart__keys\">\n          ${segments.travel > 0 ? '<div class=\"cf-chart__key travel\">Transport</div>' : ''}\n          ${segments.food > 0 ? '<div class=\"cf-chart__key food\">Food</div>' : ''}\n          ${segments.housing > 0 ? '<div class=\"cf-chart__key housing\">Housing</div>' : ''}\n          ${segments.other > 0 ? '<div class=\"cf-chart__key other\">Other</div>' : ''}\n        </div>\n      </div>\n    `;\n  };\n\n  element.innerHTML = createChart(\n    JSON.parse(element.dataset.cfData)\n  );\n};\n\nexport default carbonFootprintChart;","export default [\n  {\n    id: \"AD\",\n    shape:\n      \"M985.4 301.7l.1-.2.1-.2v-.1l-.2-.1-.7-.2-.3-.1-.2.1-.2.2-.1.3.1.1v.4l.1.2h.4l.3-.1.5-.3h.1z\"\n  },\n  {\n    id: \"AE\",\n    shape:\n      \"M1283.9 408.6l-1.3-2.2-3 3.9-3.7 4.1-3.3 4.3-3.3-.2-4.6-.2-4.2 1-.3-1.7-1 .3.4 1.5 2.6 6.4 16.8 3.2 1-1.3-.1-2.6 1.4-2.6-.3-2.6 2.4-1.3-1.1-.8.1-4.2h2.8l-1.3-5z\"\n  },\n  {\n    id: \"AF\",\n    shape:\n      \"M1369.9 333.8h-5.4l-3.8-.5-2.5 2.9-2.1.7-1.5 1.3-2.6-2.1-1-5.4-1.6-.3v-2l-3.2-1.5-1.7 2.3.2 2.6-.6.9-3.2-.1-.9 3-2.1-1.3-3.3 2.1-1.8-.8-4.3-1.4h-2.9l-1.6-.2-2.9-1.7-.3 2.3-4.1 1.2.1 5.2-2.5 2-4 .9-.4 3-3.9.8-5.9-2.4-.5 8-.5 4.7 2.5.9-1.6 3.5 2.7 5.1 1.1 4 4.3 1.1 1.1 4-3.9 5.8 9.6 3.2 5.3-.9 3.3.8.9-1.4 3.8.5 6.6-2.6-.8-5.4 2.3-3.6h4l.2-1.7 4-.9 2.1.6 1.7-1.8-1.1-3.8 1.5-3.8 3-1.6-3-4.2 5.1.2.9-2.3-.8-2.5 2-2.7-1.4-3.2-1.9-2.8 2.4-2.8 5.3-1.3 5.8-.8 2.4-1.2 2.8-.7-1.4-1.9z\"\n  },\n  {\n    id: \"AG\",\n    shape:\n      \"M634.3 463.8l.2-.1V463.4l-.1-.1-.1-.2-.4-.2-.5.5v.2l.1.3.6.1.2-.2zm.2-3.5v-.5l-.1-.2h-.3l-.1-.1h-.1l-.1.1.1.6.5.3.1-.2z\"\n  },\n  {\n    id: \"AI\",\n    shape: \"M627.9 456.2l.1-.2-.2-.1-.8.5v.1l.9-.3z\"\n  },\n  {\n    id: \"AL\",\n    shape:\n      \"M1077.5 300.5l-2 3.1.5 1.9 1 1-.5 1.9-.1 4.3.7 3 3 2.1.2 1.4 1 .4 2.1-3 .1-2.1 1.6-.9V312l-2.3-1.6-.9-2.6.4-2.1-.5-2.3-1.3-.6-1.3-1.6-1.3.5-.4-1.2z\"\n  },\n  {\n    id: \"AM\",\n    shape:\n      \"M1219 325.1l-.9-4.4-2.5-1.1-2.5-1.7 1-2-3.1-2.2.7-1.5-2.2-1.1-1.4-1.7-6.9 1 1.3 2.2v3.1l4.2 1.5 2.4 1.9 1-.2 1.8 1.7h2.3l.2 1 2.8 3.7 1.8-.2z\"\n  },\n  {\n    id: \"AO\",\n    shape:\n      \"M1068.3 609.6l-16.6-.1-1.9.7-1.7-.1-2.3.9-.5 1.2 2.8 4 1.1 4.3 1.6 6.1-1.7 2.6-.3 1.3 1.3 3.8 1.5 3.9 1.6 2.2.3 3.6-.7 4.8-1.8 2.8-3.3 4.2-1.3 2.6-1.9 5.7-.3 2.7-2 5.9-.9 5.5.5 4 2.7-1.2 3.3-1 3.6.1 3.2 2.9.9-.4 22.5-.3 3.7 3 13.4.9 10.3-2.5-3.5-4-3.6-5.2.8-20.3 11.6.1-.5-2.2.9-2.4-.9-3 .7-3-.5-2-2.6-.4-3.5 1-2.4-.2-1.4.6.5-7.6-1.9-2.3-.3-4 .9-3.8-1.2-2.4v-4h-6.8l.5-2.3h-2.9l-.3 1.1-3.4.3-1.5 3.7-.9 1.6-3-.9-1.9.9-3.7.5-2.1-3.3-1.3-2.1-1.6-3.8-1.3-4.7zm-21.8-1.3l.2-2.7.9-1.7 2-1.3-2-2.2-1.8 1.1-2.2 2.7 1.4 4.8 1.5-.7z\"\n  },\n  {\n    id: \"AR\",\n    shape:\n      \"M669.8 920.7l.9-3-7.3-1.5-7.7-3.6-4.3-4.6-3-2.8 5.9 13.5h5l2.9.2 3.3 2.1 4.3-.3zm-50.4-208.1l-7.4-1.5-4 5.7.9 1.6-1.1 6.6-5.6 3.2 1.6 10.6-.9 2 2 2.5-3.2 4-2.6 5.9-.9 5.8 1.7 6.2-2.1 6.5 4.9 10.9 1.6 1.2 1.3 5.9-1.6 6.2 1.4 5.4-2.9 4.3 1.5 5.9 3.3 6.3-2.5 2.4.3 5.7.7 6.4 3.3 7.6-1.6 1.2 3.6 7.1 3.1 2.3-.8 2.6 2.8 1.3 1.3 2.3-1.8 1.1 1.8 3.7 1.1 8.2-.7 5.3 1.8 3.2-.1 3.9-2.7 2.7 3.1 6.6 2.6 2.2 3.1-.4 1.8 4.6 3.5 3.6 12 .8 4.8.9 2.2.4-4.7-3.6-4.1-6.3.9-2.9 3.5-2.5.5-7.2 4.7-3.5-.2-5.6-5.2-1.3-6.4-4.5-.1-4.7 2.9-3.1 4.7-.1.2-3.3-1.2-6.1 2.9-3.9 4.1-1.9-2.5-3.2-2.2 2-4-1.9-2.5-6.2 1.5-1.6 5.6 2.3 5-.9 2.5-2.2-1.8-3.1-.1-4.8-2-3.8 5.8.6 10.2-1.3 6.9-3.4 3.3-8.3-.3-3.2-3.9-2.8-.1-4.5-7.8-5.5-.3-3.3-.4-4.2.9-1.4-1.1-6.3.3-6.5.5-5.1 5.9-8.6 5.3-6.2 3.3-2.6 4.2-3.5-.5-5.1-3.1-3.7-2.6 1.2-.3 5.7-4.3 4.8-4.2 1.1-6.2-1-5.7-1.8 4.2-9.6-1.1-2.8-5.9-2.5-7.2-4.7-4.6-1-11.2-10.4-1-1.3-6.3-.3-1.6 5.1-3.7-4.6z\"\n  },\n  {\n    id: \"AT\",\n    shape:\n      \"M1060.2 264l-2.3-1.2-2.3.3-4-1.9-1.7.5-2.6 2.5-3.8-2-1.5 2.9-1.7.8 1 4-.4 1.1-1.7-1.3-2.4-.2-3.4 1.2-4.4-.3-.6 1.6-2.6-1.7-1.5.3.2 1.1-.7 1.6 2.3 1.1 2.6.2 3.1.9.5-1.2 4.8-1.1 1.3 2.2 7.2 1.6 4.2.4 2.4-1.4 4.3-.1.9-1.1 1.3-4-1.1-1.3h2.8l.2-2.6-.7-2.1.3-.8z\"\n  },\n  {\n    id: \"AU\",\n    shape:\n      \"M1726.7 832l-3-.5-1.9 2.9-.6 5.4-2.1 4-.5 5.3 3 .2.8.3 6.6-4.3.6 1.7 4-4.9 3.2-2.2 4.5-7.3-2.8-.5-4.8 1.2-3.4.9-3.6-2.2zm50.1-172.3l.5-2.3.1-3.6-1.6-3.2.1-2.7-1.3-.8.1-3.9-1.2-3.2-2.3 2.4-.4 1.8-1.5 3.5-1.8 3.4.6 2.1-1.2 1.3-1.5 4.8.1 3.7-.7 1.8.3 3.1-2.6 5-1.3 3.5-1.7 2.9-1.7 3.4-4.1 2.1-4.9-2.1-.5-2-2.5-1.6h-1.6l-3.3-3.8-2.5-2.2-3.9-2-3.9-3.5-.1-1.8 2.5-3.1 2.1-3.2-.3-2.6 1.9-.2 2.5-2.5 2-3.4-2.2-3.2-1.5 1.2-2-.5-3.5 1.8-3.2-2-1.7.7-4.5-1.6-2.7-2.7-3.5-1.5-3.1.9 3.9 2.1-.3 3.2-4.8 1.2-2.8-.7-3.6 2.2-2.9 3.7.6 1.5-2.7 1.7-3.4 5.1.6 3.5-3.4-.6h-3.5l-2.5-3.8-3.7-2.9-2.8.8-2.6.9-.3 1.6-2.4-.7-.3 1.8-3 1.1-1.7 2.5-3.5 3.1-1.4 4.8-2.3-1.3-2.2 3.1 1.5 3-2.6 1.2-1.4-5.5-4.8 5.4-.8 3.5-.7 2.5-3.8 3.3-2 3.4-3.5 2.8-6.1 1.9-3.1-.2-1.5.6-1.1 1.4-3.5.7-4.7 2.4-1.4-.8-2.6.5-4.6 2.3-3.2 2.7-4.8 2.1-3.1 4.4.4-4.8-3.1 4.6-.1 3.7-1.3 3.2-1.5 1.5-1.3 3.7.9 1.9.1 2 1.6 5-.7 3.3-1-2.5-2.3-1.8.4 5.9-1.7-2.8.1 2.8 1.8 5-.6 5 1.7 2.5-.4 1.9.9 4.1-1.3 3.6-.3 3.6.7 6.5-.7 3.7-2.2 4.4-.6 2.3-1.5 1.5-2.9.8-1.5 3.7 2.4 1.2 4 4.1h3.6l3.8.3 3.3-2.1 3.4-1.8 1.4.3 4.5-3.4 3.8-.3 4.1-.7 4.2 1.2 3.6-.6 4.6-.2 3-2.6 2.3-3.3 5.2-1.5 6.9-3.2 5 .4 6.9-2.1 7.8-2.3 9.8-.6 4 3.1 3.7.2 5.3 3.8-1.6 1.5 1.8 2.4 1.3 4.6-1.6 3.4 2.9 2.6 4.3-5.1 4.3-2.1 6.7-5.5-1.6 4.7-3.4 3.2-2.5 3.7-4.4 3.5 5.2-1.2 4.7-4.4-.9 4.8-3.2 3.1 4.7.8 1.3 2.6-.4 3.3-1.5 4.9 1.4 4 4 1.9 2.8.4 2.4 1 3.5 1.8 7.2-4.7 3.5-1.2-2.7 3.4 2.6 1.1 2.7 2.8 4.7-2.7 3.8-2.5 6.3-2.7 6-.2 4.2-2.3.9-2 3-4.5 3.9-4.8 3.6-3.2 4.4-5.6 3.3-3.1 4.4-5 5.4-3.1 5-5.8 3.1-4.5 1.4-3.6 3.8-5.7 2.1-2.9 2.5-5.7-.7-5.4 1.7-3.9 1.1-3.7v-5.1l-2.8-5.1-1.9-2.5-2.9-3.9.7-6.7-1.5 1-1.6-2.8-2.5 1.4-.6-6.9-2.2-4 1-1.5-3.1-2.8-3.2-3-5.3-3.3-.9-4.3 1.3-3.3-.4-5.5-1.3-.7-.2-3.2-.2-5.5 1.1-2.8-2.3-2.5-1.4-2.7-3.9 2.4-1.2-5z\"\n  },\n  {\n    id: \"AW\",\n    shape: \"M586.6 492.9l-.1-.1-.3-.6-.3-.3-.1.1-.1.3.3.3.3.4.3.1v-.2z\"\n  },\n  {\n    id: \"AZ\",\n    shape:\n      \"M1210.1 318.9l-1 .2 1.2 2.4 3.2 2.9 3.7.9-2.8-3.7-.2-1h-2.3l-1.8-1.7zm10.4-9.3l-4.3-3.8-1.5-.2-1.1.9 3.2 3.4-.6.7-2.8-.4-4.2-1.8-1.1 1 1.4 1.7 2.2 1.1-.7 1.5 3.1 2.2-1 2 2.5 1.7 2.5 1.1.9 4.4 5.3-4.7 1.9-.5 1.9 1.9-1.2 3.1 3.8 3.4 1.3-.3-.8-3.2 1.7-1.5.4-2.2-.1-5 4.2-.5-2-1.7-2.5-.2-3.5-4.5-3.4-3.2-2.6 2.5-.5 1.5-2.4-.4z\"\n  },\n  {\n    id: \"BA\",\n    shape:\n      \"M1062.2 284.9l-2.3.1-1 1.3-1.9-1.4-.9 2.5 2.7 2.9 1.3 1.9 2.5 2.3 2 1.4 2.2 2.5 4.7 2.4.4-3.4 1.5-1.4.9-.6 1.2-.3.5-2.9-2.7-2.3 1-2.7h-1.8l-2.4-1.4-3.5.1-4.4-1z\"\n  },\n  {\n    id: \"BB\",\n    shape: \"M644.9 488.9l.4-.4-.3-.3-.6-.8-.3.1v1l.1.3.5.3.2-.2z\"\n  },\n  {\n    id: \"BD\",\n    shape:\n      \"M1486.5 431.9l-4.5-10.1-1.5.1-.2 4-3.5-3.3 1.1-3.6 2.4-.4 1.6-5.3-3.4-1.1-5 .1-5.4-.9-1.2-4.4-2.7-.4-4.8-2.7-1.2 4.3 4.6 3.4-3.1 2.4-.8 2.3 3.7 1.7-.4 3.8 2.6 4.8 1.6 5.2 2.2.6 1.7.7.6-1.2 2.5 1.3 1.3-3.5-.9-2.6 5.1.2 2.8 3.7 1.5 3.1.8 3.2 2 3.3-1.1-5.1 2.1 1-.5-4.6z\"\n  },\n  {\n    id: \"BE\",\n    shape:\n      \"M1000.7 246.2l-4.4 1.3-3.6-.5-3.8 1.2.7 2.2 2.2.1 2.4 2.4 3.4 2.9 2.5-.4 4.4 2.8.4-3.5 1.3-.2.4-4.2-2.8-1.4-3.1-2.7z\"\n  },\n  {\n    id: \"BF\",\n    shape:\n      \"M978.8 477.2h-3.6l-1.4-1.2-3 .9-5.2 2.6-1.1 2-4.3 2.9-.8 1.6-2.3 1.3-2.7-.9-1.6 1.6-.8 4.4-4.5 5.2.2 2.2-1.6 2.7.4 3.7 2.5 1.4 1 2.1 2.5 1.3 1.9-1.6 2.7-.2 3.8 1.6-.8-4.8.2-3.6 9.7-.3 2.4.5 1.8-1 2.6.5 4.9.1 1.9-.7 1.2-2.8 2.7-.6 1.2-1.9.1-4.4-6.4-1.4-.2-3.1-3.1-4.1-.8-2.9.5-3.1z\"\n  },\n  {\n    id: \"BG\",\n    shape:\n      \"M1121.6 294.3l-3-.7-4-2.2-5.8 1.4-2.3 1.6-7.5-.3-4-1-1.9.5-1.8-2.6-1.1 1.4.7 2.3 2.8 2.6-1.7 1.9-.7 2 .6.7-.7.9 2.8 2 .8 4.1 3.8.2 3.9-1.7 3.9 2.1 4.6-.6-.3-3 5-2 4.5.8-2.1-3.5 1.3-4.4 2.2-2.5z\"\n  },\n  {\n    id: \"BI\",\n    shape:\n      \"M1148.2 590l-.3-2.5-3-.4-1.7 3.6-3.5-.5 1.4 2.9.1 1.1 2 6.1-.1.3.6-.1 2.1-2.3 2.2-3.3 1.4-1.4v-2l-1.2-1.5z\"\n  },\n  {\n    id: \"BJ\",\n    shape:\n      \"M996.9 498l-4.3-3.7h-2l-1.9 1.9-1.2 1.9-2.7.6-1.2 2.8-1.9.7-.7 3.3 1.7 1.9 2 2.3.2 3.1 1.1 1.3-.2 14.6 1.4 4.4 4.6-.8.3-10.2-.1-4.1 1-4 1.7-1.9 2.7-4-.6-1.7 1.1-2.5-1.2-3.8.2-2.1z\"\n  },\n  {\n    id: \"BM\",\n    shape: \"M630.2 366.8l.4-.6h-.1l-.5.5-.6.2.1.1h.1l.6-.2z\"\n  },\n  {\n    id: \"BN\",\n    shape: \"M1617.8 543.4l2.7 3.3 1.1-2.2 2.7.2.1-4.1.1-3.1-4.6 3.5-2.1 2.4z\"\n  },\n  {\n    id: \"BO\",\n    shape:\n      \"M655.7 700.5l1.6-1.3-.8-3.6 1.3-2.8.5-5-1.6-4-3.2-1.7-.8-2.6.6-3.6-10.7-.3-2.7-7.4 1.6-.1-.3-2.8-1.2-1.8-.5-3.7-3.3-1.9-3.5.1-2.5-1.9-3.8-1.2-2.4-2.4-6.3-1-6.4-5.7.3-4.3-.9-2.5.4-4.7-7.3 1.1-2.8 2.3-4.8 2.6-1.1 1.9-2.9.2-4.2-.6 5.5 10.3-1.1 2.1.1 4.5.3 5.4-1.9 3.2 1.2 2.4-1.1 2.1 2.8 5.3-2.8 6.9 3.1 4.3 1.2 4.6 3.2 2.7-1.1 6.2 3.7 7.1 3.1 8.8 3.8-.9 4-5.7 7.4 1.5 3.7 4.6 1.6-5.1 6.3.3 1 1.3 1.5-7.6-.2-3.4 2.1-5.6 9.5-1.9 5.1.1 5.4 3.3.3 1.9z\"\n  },\n  {\n    id: \"BR\",\n    shape:\n      \"M659 560.1l-1.4.2-3.1-.5-1.8 1.7-2.6 1.1-1.7.2-.7 1.3-2.7-.3-3.5-3-.3-2.9-1.4-3.3 1-5.4 1.6-2.2-1.2-3-1.9-.9.8-2.8-1.3-1.5-2.9.3.7 1.8-2.1 2.4-6.4 2.4-4 1-1.7 1.5-4.4-1.6-4.2-.8-1 .6 2.4 1.6-.3 4.3.7 4 4.8.5.3 1.4-4.1 1.8-.7 2.7-2.3 1-4.2 1.5-1.1 1.9-4.4.5-3-3.4-1.1.8-1-3.8-1.6-2-1.9 2.2-10.9-.1v3.9l3.3.7-.2 2.4-1.1-.6-3.2 1v4.6l2.5 2.4.9 3.6-.1 2.8-2.2 17.4-5.1-.3-.7 1-4.6 1.2-6.2 4.3-.4 3-1.3 2.2.7 3.4-3.3 1.9.1 2.7-1.5 1.1 2.6 5.8 3.3 3.8-1 2.8 3.7.3 2.3 3.4 4.9.2 4.4-3.8.2 9.7 2.6.7 3-1.1 4.2.6 2.9-.2 1.1-1.9 4.8-2.6 2.8-2.3 7.3-1.1-.4 4.7.9 2.5-.3 4.3 6.4 5.7 6.3 1 2.4 2.4 3.8 1.2 2.5 1.9 3.5-.1 3.3 1.9.5 3.7 1.2 1.8.3 2.8-1.6.1 2.7 7.4 10.7.3-.6 3.6.8 2.6 3.2 1.7 1.6 4-.5 5-1.3 2.8.8 3.6-1.6 1.3 1.9 3.6.4 8.6 6 1.2 2.1-1.2 3.9 1.7 1.2 1.9 1 5.8.9 2.5 2 .3 2-1.1 2.1 1.2.3 3.5-.3 3.8-.7 3.6 2.6-1.2 3.1 3.7.5 5.1-4.2 3.5-3.3 2.6-5.3 6.2-5.9 8.6 3.4-.7 6.2 4.9 1.9-.2 6.2 4.1 4.8 3.5 3.8 4.3-1.9 3 2.1 3.7 2.9-3.7 1.5-6 3.2-3 3.9-5 4.5-11.2 3.4-3.5.8-3.1.3-6.4-1.3-3.5.3-4.8 4.1-6.3 6-5.1 6-1.8 3.6-2.9 8.5-2.4h5.9l1.1-3.8 4.2-2.8.6-6.5 5.1-8.3.5-8.5 1.6-2.6.3-4.1 1.1-9.9-1-11.9 1.4-4.7 1.4-.1 3.9-5.5 3.3-7.2 7.7-8.8 2.7-4.2 2-10.5-1-3.9-2-8.1-2.1-2-4.8-.2-4.3-1.9-7.3-7.1-8.4-5.3-8.4.3-10.9-3.4-6.5 2 .8-3.5-2.7-3.8-9.4-3.8-7.1-2.3-4.2 4.1-.3-6.3-9.9-1-1.7-2 4.2-5.2-.1-4.4-3-1-3-11.2-1.3-3.5-1.9.3-3.5 5.8-1.8 4.7-2.1 2.4-2.7.5-.8-1.8-1.2-.3-1.8 1.8-2.4-1.3-3.2-1.4-2.7.7-2.3-.6-.5 1.8.9 1.3-.5 1.3-3.1-.5z\"\n  },\n  {\n    id: \"BS\",\n    shape:\n      \"M574.4 437.3l.2-.6-.3-.1-.5.7-.6.3h-.3l-.7-.3h-.5l-.4.5-.6.1.1.1v.2l-.2.3v.2l.1.3 1.5-.1 1.3-.2.7-.9.2-.5zm.8-2l-.4-.3-.4.3.1.3.7-.3zm0-5.8l-.4-.2-.3.5.3.1.7-.1.5.1.5.4.3-.2-.1-.1-.4-.3-.6-.1h-.2l-.3-.1zm-6.6 1.3l.7-.6.7-.3.9-1.1-.1-.9.2-.4-.6.1-.1.3-.1.3.3.4v.2l-.2.4-.3.1-.1.2-.3.1-.4.5-.8.6-.2.3.4-.2zm1.2-3.2l-.6-.2-.2-.4-.4-.1-.1.2v.2l.1.4.2-.1.8.4.4-.3-.2-.1zm-4.1-1.1v-.7l-.4-.5-.6-.4-.1-1.2-.3-.7-.2-.6-.4-.8v.5l.1.1.1.6.4.9.1.4-.1.4-.4.1-.1.2.5.3.8.3.5 1.3.1-.2zm-4.1-3.5l-.5-.3-.2-.3-.7-.7-.3-.1-.2.4.4.1.9.7.4.2h.2zm7.3-4l-.1-.3h-.1l-.3.1-.3.9h.3l.5-.7zm-17.6-1.1l-.2-.3-.3.2h-.5l-.2.1h-.4l-.3.2.4.8.3.3.1 1 .2.1-.1.7 1.1.1.4-.8V418.6l-.3-.5-.4.6-.4-.3.6-.4v-.1zm12.9.3l-1-1.4v-.2l-.5-1.5-.3-.1-.1.1-.1.2.4.4v.4l.3.2.4 1.1.4.4-.1.3-.4.3-.1.2h.1l.6-.1h.4v-.3zm-10.5-5.2l.5-.2-.3-.2h-.7l-.4.1-.2.2.1.1.4.1.6-.1zm-2.4 2l-.5-.6-.3-.9-.2-.4.1-.5-.3-.4-.6-.4-.3.1.1 1.1-.2.6-.8 1.1.1.4.1.2-.5.4v-.3l-.6.1.3.5.6.4.3.1.3-.2v.5l.3.4.1.4.3-.3.6-.2.2-.2.7-.4v-.2l.1-.6.1-.7zm6.7-5l-.3-.5-.1.1-.1.4-.3.4.5-.1.4.1.6.5.7.2.3.6.6.6v.6l-.4.6-.1.7-.6.1.1.1.3.3.1.4.2.2v-.7l.3-.8.4-1.3-.1-.3-.3-.3-.7-.9-.7-.3-.8-.7zm-8.8-7.9l-.5-.4-.2.4v.1l-.1.3-.5.4-.5.1-.7-.6-.2-.1.8 1.1.3.1h.4l.9-.3 1.6-.5 1.7-.2.1-.2-.1-.3-.8.2-1-.1-.2.2h-.4l-.6-.2zm6.1 5.2l.2-.3.4-1.8.8-.6.1-1.2-.5-.5-.4-.2-.1-.2.1-.2-.2-.1-.3-.2-.4-.6-.4-.4-.7-.1-.6-.1-.4-.1-.5.3h.8l1.5.3.7 1.5.5.4.1.4-.2.4v.4l-.3.5-.1.8-.3.4-.7.5.4.2.3.6.2-.1z\"\n  },\n  {\n    id: \"BT\",\n    shape:\n      \"M1474.7 395.5l-2.7-1.8-2.9-.1-4.2-1.5-2.6 1.6-2.6 4.8.3 1.2 5.5 2.5 3.2-1 4.7.4 4.4-.2-.4-3.9-2.7-2z\"\n  },\n  {\n    id: \"BW\",\n    shape:\n      \"M1116.7 685l-1-.5-3.2 1.5h-1.6l-3.7 2.5-2-2.6-8.6 2.2-4.1.2-.9 22.7-5.4.2-.6 18.5 1.4 1 3 6.1-.7 3.8 1.1 2.3 4-.7 2.8-2.8 2.7-1.9 1.5-3.1 2.7-1.5 2.3.8 2.5 1.8 4.4.3 3.6-1.5.6-2 1.2-3 3-.5 1.7-2.4 2-4.3 5.2-4.7 8-4.7-3.4-2.9-4.2-.9-1.5-4.1.1-2.2-2.3-.7-6-7-1.6-3.7-1.1-1.1-1.9-5.1z\"\n  },\n  {\n    id: \"BY\",\n    shape:\n      \"M1112.8 219.4l-5.2-1.5-4.6 2.3-2.6 1 .9 2.6-3.5 2-.5 3.4-4.8 2.2h-4.6l.6 2.7 1.7 2.3.3 2.4-2.7 1.2 1.9 2.9.5 2.7 2.2-.3 2.4-1.6 3.7-.2 5 .5 5.6 1.5 3.8.1 2 .9 1.6-1.1 1.5 1.5 4.3-.3 2 .6-.2-3.1 1.2-1.4 4.1-.3-2-3.9-1.5-2 .8-.6 3.9.2 1.6-1.3-1.7-1.6-3.4-1.1.1-1.1-2.2-1.1-3.7-3.9.6-1.6-1-2.9-4.8-1.4-2.3.7-1-1.4z\"\n  },\n  {\n    id: \"BZ\",\n    shape:\n      \"M482.5 471.1l1.4-2.2 1-.2 1.3-1.7 1-3.2-.3-.6.9-2.3-.4-1 1.3-2.7.3-1.8h-1.1l.1-.9h-1l-2.5 3.9-.9-.8-.7.3-.1 1-.7 5-1.2 7.2h1.6z\"\n  },\n  {\n    id: \"CA\",\n    shape:\n      \"M659 276.7l-.7-3-2.5 1.9.5 2.1 5.6 2.6 1.9-.4 3.3-2.5-4.7.1-3.4-.8zm14.4-15.9l.2-1.1-4.1-2.6-5.9-1.6-1.9.6 3.5 2.9 5.7 1.9 2.5-.1zm-305.3 3.7l.2-3.4-3.2-2.6-.4-2.9-.1-2.1-4.1-.7-2.4-.9-4.1-1.4-1.4 1.5-.6 3.3 4.3 1.1-.4 1.8 2.9 2.2v2.2l6.3 2.8 3-.9zM704.2 251l3.9-3.8 1.4-1.7-2.1-.3-4.9 2.2-4.2 3.5-8.1 9.8-5.3 3.7 1.6 1.7-3.8 2.2.2 1.9 9.6.1 5.4-.3 4.4 1.5-4.4 2.9 2.9.2 7.3-5.4 1.2.8-2.5 5.1 3 1.2 2.3-.2 3.5-5.5-.5-3.9.3-3.3-3.7 1.1 2.8-4.6-4.3-1.9-2.7 1.5-3.9-1.7 2.4-2.1-2.9-1.3-3.8 2 4.9-5.4zm-356.8-21.2l-1.9 2-1.4 2.6.9 1.9-.6 2.8.7 2.8h1.9l-.2-4.9 7.1-6.9-4.9.5-1.6-.8zm280.9-47l-.4-1.2-1.7-.1-2.8 1.7-.4.4.1 1.7 1.7.5 3.5-3zm-9.6-3.2l.8-1.1-6-.1-4.9 2.7v1.5l3 .2 7.1-3.2zm-3.1-16.6l-2.7-.5-5 5.2-3.6 4.4-5.7 2.8 6.3-.6-.8 3.4 8.2-3 6.2-3 .8 2.6 5.9 1.3 4.9-1.8-1.9-1.8-3.4.4 1.3-2.7-3.7-1.7-3.4-1.9-1.5-1.5-2.8.9.9-2.5zm44.6-8.2l3.7-1.7 1-.7 1.4-2.3-2.3-1.5-4.2.7-3.8 3.1-.7 2.6 4.9-.2zm-73.8-10.7l-.8-2-.3-1-1.6-1-3-1.5-4.9 2.3-5 1.7 3.5 2.4 3.8-.6 4.1 1.6 4.2-1.9zm22.4-2.1l-6.6-1 5.7-2.6-.4-6-1.9-2.3-4.5-.8-8.1 3.8-5.5 5.8 2.9 2.1 1.6 3.3-6.3 5.5-3.2-.2-6.2 4.4 4.2-5.2-4.8-1.8-4.5.9-2.4 3.4-5.9-.1-7.2.8-5.1-2.4-5 .4-1.5-2.9-2.1-1.3-3.8.5-5.2.3-4.4 1.8 2 2.3-7 2.8-1.4-3.3-4.4 1-11.8.6-6.4-1.2 8.5-2.6-2.8-2.8-4.4.4-4.7-1-7.5-1.9-3.8-2.3-4.5-.3-3.3 1.6-5.9.9 3.9-4.1-9.4 3.6-1.4-4.7-2.1-.6-3.8 2.5-4.5 1.2-.2-2.2-8.2 1.4-8.8 2.3-5.2-.6-7 1.6-6.2 2.3-3.7-.5-3.3-2.6-5.9-1.3-24.3 20.2-35.4 32.4 4.2.1 2.7 1.6.6 2.6.2 3.9 7.6-3.3 6.4-1.9-.5 3 .7 2.4 1.7 2.7-1.1 4.2-1.5 6.8 4.6 3.8-3.1 3.7-5.1 2.9-2.5 3.1 2.1 4.4-3.1 4.9 4.1 2.6-3.6 3.7-1.3 5.5 6.9 2.5 1.6 2.7 5.4 6.1h136.6l1.3-2.4h1.6l-.8 3.4 1 1 3.2.4 4.6 1 3.8 1.9 4.4-.8 5.3 1.6 3.2-2.4 3.2-1 1.8-1.5 1.5-.8 4 1.2 3.3.2.8.8.1 3.5 5.2 1-1.7 1.7 1.2 1.9-1.9 2.3 1.8.8-1.9 2.1 1.2.2 1.3-.9.5 1.4 3.4.7 3.8.1 3.8.6 4 1.2.8 2 1.4 4.7-2.4 2-3.8-.8-1-3.8-.9 3.9-3.8 3.4-.8 2.9-1.1 1.7-4.1 2-3.7 3.4-2 2.2 2.7.4 4.5-2 2.9-1.7 1.6-.3 2.6.6 1.7-.9 2.8-.8 4.7-.8.3-1.8-.3.1-1.7.3-1.8-.6 2.3-2.1 1.9-.7 3.9-.9 4.6-.9 1.8 1.2 1.9-1.4 1.9-.8.9.4.1.1 6.7-4.2 2.7-1.2h17l1-1.6 1.7-.3 2.5-.9 2.7-2.8 3.2-4.9 5.5-4.7 1.1 1.7 3.7-1.1 1.5 1.8-2.8 8.5 2.1 3.5 5.9-.8 8.1-.2-10.4 5.1-1.5 5.2 3.7.5 7.1-4.5 5.8-2.4 12.2-3.7 7.5-4.1-2.6-2.2 1-4.5-7.1 7-8.6.8-5.5-3.1-.1-4.6.6-6.8 6.1-4.1-3.3-3.1-7.6.6-12.1 5.2-10.9 8.2-4.6 1 7.8-5.7 10.1-8.3 7.2-2.7 5.7-4.4 5.2-.5 7.3.1 10 1.3 8.6-1 7.8-5.1 8.7-2.2 4.2-2.1 4.2-2.3 2-6.8-1.1-2.3-3.4-.8v-5.1l-2.3-1.9-6.9-1.6-2.8-3.4-4.8-3.4 3.4-3.7-2-7.1-2.6-7.5-1-5.2-4.3 2.7-7.4 6.5-8.1 3.2-1.6-3.4-3.7-1 2.2-7.3 2.6-4.9-7.7-.5-.1-2.2-3.6-3.3-3-2-4.5 1.5-4.2-.5-6.6-1.6-3.9 1.3-3.8 9-1 5.3-8.8 6.1 3.1 4.5.5 5-1.7 4-4.7 4.1-7.5 4.2-9 2.8 1.7 3.2-2.2 9.6-5.6 6.3-4.6 1.9-4.4-5.8-.1-6.8 1.7-6 3.6-5.2-4.8-.6-7.5-.4-3.6-2.5-4.8-1.6-1.7-2.9-3.3-2.2-7-2.6-7.1 1.2.7-4.5 1.5-5.5-6-1 4.9-6.8 4.9-4.6 9.4-6.5 8.6-4.6 5.6-.7 2.9-3.7 5.1-2.4 6.4-.4 7.7-3.8 2.9-2.4 7.4-4.7 3.2-2.8 3.2 1.7 6.5-.9L637 155l2.3-2.7-.8-2.9 5-2.9 1.7-2.7-3.5-2.6-5.4-.8-5.5-.4-4.6 5.9-6.5 4.6-7.2 4-1.3-3.7 4.2-4-2.2-3.5-8.7 4.2 4.3-5.5zm-75.5-18.9l-2.8-1-14.1 3.2-5.1 2-7.8 3.9 5.4 1.4 6.2-.1-11.5 2.1v1.9l5.6.1 9-.4 6.5 1.2-6.2 1-5.5-.3-7.1.9-3.3.6.6 4.2 4.2-.6 4.1 1.5-.3 2.5 7.8-.5 11.2-.8 9.4-1.8 5-.4 5.7 1.5 6.7.8 3.1-1.9-.7-2.1 7-.4 2.6-2.4-5-2.5-4.2-2.6 2.4-3.6 2.7-5.1-2.2-2-3-.9-4.2.8-2.8 5.3-4.3 2.1 2.2-5.1-1.7-1.7-7.3 2.7-2.6-2.6-10.4 1.5 4.7-2.4zm39.1-1.5l-1.7-1.1-5.4.2-2.1.7 2.2 3.6 7-3.4zm107.7 1.6l-4.4-2.8-8.4-.5-2.1.3-1.7 1.8 2 2.8.9.3 4.8-.7 4.1.1 4.1.1.7-1.4zm-39.4-.3l5.7-3.2-11.2 1.3-5.8 2.1-7.1 4.6-3.3 5.2 5.6.1-6.1 2.3 1.8 1.9 5.9.8 7.3 1.5 13.8 1.2 7.9-.6 3.2-1.6 2 1.8 3.3.3 2 3.3-3.5 1.4 7.1 1.8 4.6 2.6.5 1.9-.4 2.4-8.6 5.4-3.2 2.7.2 2-9.2.7-8 .1-5.4 4.2 2.4 1.9 13-.9.9-1.6 4.7 2.7 4.7 2.9-2.4 1.6 3.8 2.8 7.6 3.3 10.7 2.3.3-2-2.8-3.5-3.5-4.9 8.5 4.6 4.7 1.5 3.6-4.1v-5.6l-1-1.5-4.4-2.5-2.7-3.3 2.3-3.2 5.8-.7 3.8 5.4 4 2.4 10.7-6.5 3.3-3.9-6.4-.3-3.2-5.1-5.9-1.2-7.7-3.5 9-2.5-.8-5-2.2-2.1-8.3-2.1-1.9-3.3-8.2 1.2 1.1-2.3-3.6-2.5-6.8-2.6-5.2 2.1-9 1.5 3.3-3.4-2.3-5.3-11.6 2.1-7.1 4.1-.3-3.2zm-50-3.4l-7.1 2.4.9 3.4-7.4-.7-1.7 1.7 5.8 3.9.9 2 3.4.5 8.4-2 5.1-4.7-3.8-2.2 6-2.4.5-1.5-7.5.6-3.5-1zm22.3 5.4l5.6-1 10-4.5-6.1-1.2-7.8-.2-5.2 1.4-4.2 2.1-2.5 2.6-1.8 4.5 4.3.2 7.7-3.9zm-114.7 7.2l2.6-2.3 9.1-3.6 13.8-3.6 6.4-1.3-1.6-2.1-1.9-1.5-9.4-.2-4.1-1.1-14 .8-.3 3.1-7.6 3.3-7.4 3.8-4.3 2.2 5.9 2.7-.6 2.3 13.4-2.5zm124.1-18.3l.3-1.6-1.4-1.7-6.9 1.3-4.4 2.2 3.2 1.3 5.1.4 4.1-1.9zm-8.7-8.6l-1.1.7-4.8-.3-7.6 1.6-3.8-.1-4.3 3.8 6.6-.4-3.4 2.9 3.2.8 6.8-.5 5.8-3.7 2.8-2.5-.2-2.3zm-39.1 2.5l1.8-2.3-3.1-.5-5.7 1.7-.7 4.7-6.1-.4-2.8-2.9-8.2-1.6-5.4 1.4-11.6 4.8 4.1.8 17.8-.5-10.6 2.2-1.5 1.6 5.9-.1 12.2-2.2 13.8-.8 5.1-2.3 2.3-2.4-3.7-.2-4.3.8.7-1.8zm55.2-4.3l-7.1-.3-3.8 2 2.6 1.5 7 .6 1.4 2.1-2.2 2.4-1.5 2.8 8.5 1.6 5.5.6 8-.1 11.6-.8 4.3.6 6.7-1 3.5-1.4 1-2-2.3-1.9-5.8-.3-8 .4-7 1.1-5.1-.4-4.8-.3-1.2-1.1-3.1-1.1 2.8-1.9-1.4-1.6-7.3.1-2.3-1.6zm-75-2.6l-6 .7-5.5-.1-12.1 3.1-11.6 3.7 3.6 1 7-.7 9.8-2.1 3.8-.3 5.2-1.6 5.8-3.7zm80.5.6l1-.5-1.5-.9-7.2-.1-.6 1.3 6.4.3 1.9-.1zm-58.4-.8l3.2-1.4-4.1-.8-5.9.5-5.1 1.5 3.3 1.5 8.6-1.3zm7.8-4.2l-3.3-.9-1.6-.2-5.7 1.3-1 .7h6l5.6-.9zm46.4 2.5l3-1.7-2.3-1.6-1.7-.3-4.4-.1-2.1 1.8-.7 1.8 1.6 1.1 6.6-1zm-13.7-1.2l.1-2.2-7.4-1.7-6.1-.6-2.1 1.7 2.8 1.1-5.3 1.4 7.7.2 4 1.5 5.2.5 1.1-1.9zm53.7-6.1l.6-2.8-4.7-.8-4.7-.9-1.6-2.2-8.2.2.3.9-3.9.3-4.1 1.3-4.9 1.9-.3 1.9 2 1.5h6.5l-4.3 1.2-2.1 1.6 1.6 1.9 6.7.6 6.8-.4 10.5-3.4 6.4-1.3-2.6-1.5zm78.5-13.8l-7-.2-6.9-.3-10.2.6-1.4-.4-10.3.2-6.4.4-5.1.6-5 2-2.3-1-3.9-.2-6.7 1.4-7.4.6-4.1.1-6 .8-1.1 1.3 2.5 1.2.8 1.6 4.4 1.5 12.4-.3 7.2.5-7.2 1.5-2.2-.4-9.3-.2-1.1 2.2 3 1.7-2.8 1.6-7.5 1.1-4.9 1.7 4.8.9 1.7 3-7.5-2-2.5.3-2 3.4-8 1.1-2 2.3 6.7.3 4.9.6 11.7-.8 8.4 1.4 12.6-3 1-1.1-6.4.2.5-1.1 6.5-1.4 3.6-1.9 6.8-1.3 5-1.6-.8-2.2 3.3-.8-4.3-.6 11.1-.4 3.2-.9 7.9-.8 9.3-3.5 6.8-1.1 10.3-2.5h-7.4l3.9-.9 9-.8 9.7-1.6 1.1-1.1-5.2-1-6.7-.4-8.5-.3z\"\n  },\n  {\n    id: \"CD\",\n    shape:\n      \"M1124.9 539.4l-4.3-.7-2 .6-.9 1.5-1.8.2-2.2-1.3-6.2 3.1-2.6-.6-.8.5-1.6 3.8-4.2-1.2-4.1-.6-3.6-2.4-4.6-2.1-3 2-2.2 3.2-.5 4.5-.3 3.8-1.6 3.4-1.1 4-.7 5.6.3 3.6-.9 2.2-.2 2.4-.6 2-3.7 3.1-2.6 3.2-2.5 6.2.2 5.3-1.4 2-3.3 3.1-3.4 4-2-1.1-.4-1.8-3.1-.1-1.9 2.4-1.5-.6-2 1.3-.9 1.7-.2 2.7-1.5.7.8 2 2.3-.9 1.7.1 1.9-.7 16.6.1 1.3 4.7 1.6 3.8 1.3 2.1 2.1 3.3 3.7-.5 1.9-.9 3 .9.9-1.6 1.5-3.7 3.4-.3.3-1.1h2.9l-.5 2.3h6.8v4l1.2 2.4-.9 3.8.3 4 1.9 2.3-.5 7.6 1.4-.6 2.4.2 3.5-1 2.6.4 1.9.1.3 2 2.6-.1 3.5.6 1.8 2.8 4.5.9 3.4-2 1.2 3.4 4.3.8 2 2.8 2.1 3.5h4.3l-.3-6.9-1.5 1.2-3.9-2.5-1.4-1.1.8-6.4 1.2-7.5-1.2-2.8 1.6-4.1 1.6-.7 7.5-1.1 1 .3.2-1.1-1.5-1.7-.7-3.5-3.4-3.5-1.8-4.5 1-2.7-1.5-3.6 1.1-10.2.1.1-.1-1.1-1.4-2.9.6-3.5.8-.4.2-3.8 1.6-1.8.1-4.8 1.3-2.4.3-5.1 1.2-3 2.1-3.3 2.2-1.7 1.8-2.3-2.3-.8.3-7.5-5-4.2-1.4-2.7-3.1 1.3-2.6-.4-1.5 1.1-2.5-.8-3.5-5.2-1.8.6-3.6-.1z\"\n  },\n  {\n    id: \"CF\",\n    shape:\n      \"M1110.5 517.3l-.5-.3-2-1.8-.3-2 .8-2.6V508l-3.3-4-.7-2.7-3.5 1.1-2.8 2.5-4 7-5.2 2.9-5.4-.4-1.6.6.6 2.3-2.9 2.2-2.3 2.5-7.1 2.4-1.4-1.4-.9-.2-1 1.7-4.7.4-2.7 6.5-1.4 1.1-.4 5 .6 2.7-.4 1.9 2.6 3.3.5 2.3 2.1 3.2 2.6 2.1.3 2.9.6 1.8 2.9-5.9 3.3-3.4 3.8 1.1 3.6.4.5-4.5 2.2-3.2 3-2 4.6 2.1 3.6 2.4 4.1.6 4.2 1.2 1.6-3.8.8-.5 2.6.6 6.2-3.1 2.2 1.3 1.8-.2.9-1.5 2-.6 4.3.7 3.6.1 1.8-.6-.9-2.1-4.2-2.5-1.5-3.8-2.4-2.7-3.8-3.4-.1-2-3.1-2.6-3.8-2.5z\"\n  },\n  {\n    id: \"CG\",\n    shape:\n      \"M1080.3 549.9l-3.6-.4-3.8-1.1-3.3 3.4-2.9 5.9-.4 3.5-4.5-1.5-4.5-1.7-7.1-.3-.4 2.8 1.5 3.3 4.2-.5 1.4 1.2-2.4 7.4 2.7 3.8.6 4.9-.8 4.3-1.7 3-4.9-.3-3-3-.5 2.8-3.8.8-1.9 1.6 2.1 4.2-4.3 3.5 4.6 6.7 2.2-2.7 1.8-1.1 2 2.2 1.5.6 1.9-2.4 3.1.1.4 1.8 2 1.1 3.4-4 3.3-3.1 1.4-2-.2-5.3 2.5-6.2 2.6-3.2 3.7-3.1.6-2 .2-2.4.9-2.2-.3-3.6.7-5.6 1.1-4 1.6-3.4.3-3.8z\"\n  },\n  {\n    id: \"CH\",\n    shape:\n      \"M1024.3 270.6l-5.4-1.9-1 1.4h-4.2l-1.3 1-2.3-.6.2 1.6-3.5 3.5v2.8l2.4-.9 1.8 2.7 2.2 1.3 2.4-.3 2.7-2.1.9 1 2.4-.2.9-2.5 3.8.8 2.1-1.1.3-2.5-2.6-.2-2.3-1.1.7-1.6-.2-1.1z\"\n  },\n  {\n    id: \"CI\",\n    shape:\n      \"M946.5 506.2l-2.3.9-1.3.8-.9-2.7-1.6.7-1-.1-1 1.9-4.3-.1-1.6-1-.7.6-1.1.5-.5 2.2 1.3 2.6 1.3 5.1-2 .8-.6.9.4 1.2-.3 2.8h-.9l-.3 1.8.6 3.1-1.2 2.8 1.6 1.8 1.8.4 2.3 2.7.2 2.5-.5.8-.5 5.2 1.1.2 5.6-2.4 3.9-1.8 6.6-1.1 3.6-.1 3.9 1.3 2.6-.1.2-2.5-2.4-5.5 1.5-7.2 2.3-5.3-1.4-9.1-3.8-1.6-2.7.2-1.9 1.6-2.5-1.3-1-2.1-2.5-1.4z\"\n  },\n  {\n    id: \"CL\",\n    shape:\n      \"M648.4 905.2l-3.7-.7-3.3 2.5.2 4.1-1.2 2.8-7.2-2.2-8.6-4-4.5-1.3 9.7 6.8 6.3 3.2 7.5 3.4 5.3.9 4.3 1.8 3 .5 2.3.1 3.2-1.8.5-2.4-2.9-.2h-5l-5.9-13.5zm-47.3-196.3l-3.7-7.1 1.1-6.2-3.2-2.7-1.2-4.6-3.1-4.3-1.2 3.3-2.7 1.6 2.1 9 1.5 10.4-.1 14.2v13.2l.9 12.3-1.9 7.8 2.1 7.8-.5 5.3 3.2 9.5-.1 9.5-1.2 10.2-.6 10.5-2.1.2 2.4 7.3 3.3 6.3-1.1 4.3 1.9 11.6 1.5 8.8 3.5.9-1.1-7.7 4 1.6 1.8 12.7-6.4-2.1 2 10.2-2.7 5.5 8.2 1.8-3.4 4.8.2 6 5 10.6 4.2 4.1.2 3.6 3.3 3.8 7.5 3.5 7.4 4.2 6.2 2 2-.1-1.8-5.7 3.4-2.2 1.7-1.5h4.2l-4.8-.9-12-.8-3.5-3.6-1.8-4.6-3.1.4-2.6-2.2-3.1-6.6 2.7-2.7.1-3.9-1.8-3.2.7-5.3-1.1-8.2-1.8-3.7 1.8-1.1-1.3-2.3-2.8-1.3.8-2.6-3.1-2.3-3.6-7.1 1.6-1.2-3.3-7.6-.7-6.4-.3-5.7 2.5-2.4-3.3-6.3-1.5-5.9 2.9-4.3-1.4-5.4 1.6-6.2-1.3-5.9-1.6-1.2-4.9-10.9 2.1-6.5-1.7-6.2.9-5.8 2.6-5.9 3.2-4-2-2.5.9-2-1.6-10.6 5.6-3.2 1.1-6.6-.9-1.6-3.8.9-3.1-8.8z\"\n  },\n  {\n    id: \"CM\",\n    shape:\n      \"M1060.1 502.9l.2-4.3-.5-4.2-2.2-4.1-1.6.4-.2 2 2.3 2.6-.6 1.1-.3 2.1-4.6 5-1.5 4-.7 3.3-1.2 1.4-1.1 4.5-3 2.6-.8 3.2-1.2 2.6-.5 2.6-3.9 2.2-3.2-2.6-2.1.1-3.3 3.7-1.6.1-2.7 6.1-1.4 4.5v1.8l1.4.9 1.1 2.8 2.6 1.1 2.2 4.2-.8 5 9.2.2 2.6-.4 3.4.8 3.4-.8.7.3 7.1.3 4.5 1.7 4.5 1.5.4-3.5-.6-1.8-.3-2.9-2.6-2.1-2.1-3.2-.5-2.3-2.6-3.3.4-1.9-.6-2.7.4-5 1.4-1.1 2.7-6.5.9-1.7-1.8-4.4-.8-2.6-2.5-1.1-3.3-3.7 1.2-3 2.5.6 1.6-.4 3.1.1-3.1-5.8z\"\n  },\n  {\n    id: \"CN\",\n    shape:\n      \"M1587.2 453.3l.6-3.6 2-2.8-1.6-2.5-3.2-.1-5.8 1.8-2.2 2.8 1 5.5 4.9 2 4.3-3.1zm13.2-196.5l-6.1-6.1-4.4-3.7-3.8-2.7-7.7-6.1-5.9-2.3-8.5-1.8-6.2.2-5.1 1.1-1.7 3 3.7 1.5 2.5 3.3-1.2 2 .1 6.5 1.9 2.7-4.4 3.9-7.3-2.3.6 4.6.3 6.2 2.7 2.6 2.4-.8 5.4 1 2.5-2.3 5.1 2 7.2 4.3.7 2.2-4.3-.7-6.8.8-2.4 1.8-1.4 4.1-6.3 2.4-3.1 3.3-5.9-1.3-3.2-.5-.4 4 2.9 2.3 1.9 2.1-2.5 2-1.9 3.3-4.9 2.2-7.5.2-7.2 2.2-4.4 3.3-3.2-2-6.2.1-9.3-3.8-5.5-.9-6.4.8-11.2-1.3-5.5.1-4.7-3.6-4.9-5.7-3.4-.7-7.9-3.8-7.2-.9-6.4-1-3-2.7-1.3-7.3-5.8-5-8.1-2.3-5.7-3.3-3.3-4.4-1.7.5-1.8 4.2-3.8.6 2.5 6.2-1.6 2.8-10.7-2 1 11.1-2 1.4-9 2.4 8.7 10.7-2.9 1.6 1.7 3.5-.2 1.4-6.8 3.4-1 2.4-6.4.8-.6 4-5.7-.9-3.2 1.2-4 3 1.1 1.5-1 1.5 3 5.9 1.6-.6 3.5 1.4.6 2.5 1.8 3.7 1.4 1.9 4.7 3 2.9 5 9.4 2.6 7.6 7.5.8 5.2 3 3.3.6 3.3-4.1-.9 3.2 7 6.2 4 8.5 4.4 1.9-1.5 4.7 2 6.4 4.1 3.2.9 2.5 3.1 4.5 1.2 5 2.8 6.4 1.5 6.5.6 3-1.4 1.5 5.1 2.6-4.8 2.6-1.6 4.2 1.5 2.9.1 2.7 1.8 4.2-.8 3.9-4.8 5.3-4 4.9 1.5 3.2-2.6 3.5 3.9-1.2 2.7 6.1.9 3-.4 2.7 3.7 2.7 1.5 1.3 4.9.8 5.3-4.1 5.3.7 7.5 5.6-1 2.3 5.8 3.7 1.3-.8 5.2 4.5 2.4 2.5 1.2 3.8-1.8.6 2.6.7 1.5 2.9.1-1.9-7.2 2.7-1 2.7-1.5h4.3l5.3-.7 4.1-3.4 3 2.4 5.2 1.1-.2 3.7 3 2.6 5.9 1.6 2.4-1 7.7 2-.9 2.5 2.2 4.6 3-.4.8-6.7 5.6-.9 7.2-3.2 2.5-3.2 2.3 2.1 2.8-2.9 6.1-.7 6.6-5.3 6.3-5.9 3.3-7.6 2.3-8.4 2.1-6.9 2.8-.5-.1-5.1-.8-5.1-3.8-2-2.5-3.4 2.8-1.7-1.6-4.7-5.4-4.9-5.4-5.8-4.6-6.3-7.1-3.5.9-4.6 3.8-3.2 1-3.5 6.7-1.8-2.4-3.4-3.4-.2-5.8-2.5-3.9 4.6-4.9-1.9-1.5-2.9-4.7-1-4.7-4.4 1.2-3 5-.3 1.2-4.1 3.6-4.4 3.4-2.2 4.4 3.3-1.9 4.2 2.3 2.5-1.4 3 4.8-1.8 2.4-2.9 6.3-1.9 2.1-4 3.8-3.4 1-4.4 3.6 2 4.6.2-2.7-3.3 6.3-2.6-.1-3.5 5.5 3.6-1.9-3.1 2.5-.1-3.8-7.3-4.7-5.3 2.9-2.2 6.8 1.1-.6-6-2.8-6.8.4-2.3-1.3-5.6-6.9 1.8-2.6 2.5h-7.5l-6-5.8-8.9-4.5-9.9-1.9z\"\n  },\n  {\n    id: \"CO\",\n    shape:\n      \"M578.3 497.2l1.2-2.1-1.3-1.7-2-.4-2.9 3.1-2.3 1.4-4.6 3.2-4.3-.5-.5 1.3-3.6.1-3.3 3-1.4 5.4-.1 2.1-2.4.7-4.4 4.4-2.9-.2-.7.9 1.1 3.8-1.1 1.9-1.8-.5-.9 3.1 2.2 3.4.6 5.4-1.2 1.6 1.1 5.9-1.2 3.7 2 1.5-2.2 3.3-2.5 4-2.8.4-1.4 2.3.2 3.2-2.1.5.8 2 5.6 3.6 1-.1 1.4 2.7 4.7.9 1.6-1 2.8 2.1 2.4 1.5 1.5-.6 3.7 3 1.8 3 2.7 1.7 3.4 6.7 4.2.8 3-1.7 2.1 1.1 3.3-.6 4.4 3-3.5 6.5 1.7.1 2.9 3.4 2.2-17.4.1-2.8-.9-3.6-2.5-2.4v-4.6l3.2-1 1.1.6.2-2.4-3.3-.7v-3.9l10.9.1 1.9-2.2 1.6 2 1 3.8 1.1-.8-1.7-6.4-1.4-2.2-2-1.4 2.9-3.1-.2-1.5-1.5-1.9-1-4.2.5-4.6 1.3-2.1 1.2-3.4-2-1.1-3.2.7-4-.3-2.3.7-3.8-5.5-3.2-.8-7.2.6-1.3-2.2-1.3-.6-.2-1.3.8-2.4-.4-2.5-1.1-1.4-.6-2.9-2.9-.5 1.8-3.7.9-4.5 1.8-2.4 2.2-1.8 1.6-3.2 3.7-1.1z\"\n  },\n  {\n    id: \"CR\",\n    shape:\n      \"M509.1 502.6l-1.4 1.3-1.7-.4-.8-1.3-1.7-.5-1.4.8-3.5-1.7-.9.8-1.4 1.2 1.5.9-.9 2-.1 2 .7 1.3 1.7.6 1.2 1.8 1.2-1.6-.3-1.8 1.4 1.1.3 1.9 1.9.8 2.1 1.3 1.5 1.5.1 1.4-.7 1.1 1.1 1.3 2.9 1.4.4-1.2.5-1.3-.1-1.2.8-.7-1.1-1 .1-2.5 2.2-.6-2.4-2.7-2-2.6-1.2-3.4z\"\n  },\n  {\n    id: \"CU\",\n    shape:\n      \"M539 427.3l-4.9-2.1-4.3-.1-4.7-.5-1.4.7-4.2.6-3 1.3-2.7 1.4-1.5 2.3-3.1 2 2.2.6 2.9-.7.9-1.6 2.3-.1 4.4-3.3 5.4.3-2.3 1.6 1.8 1.3 7 1 1.5 1.3 4.9 1.7 3.2-.2.8 3.6 1.7 1.8 3.5.4 2.1 1.7-4.1 3.5 7.9-.6 3.8.5 3.7-.3 3.8-.8.8-1.5-3.9-2.6-4-.3.6-1.7-3.1-1.3h-1.9l-3-2.8-4.2-4-1.8-1.5-5.2.8-1.9-2.4z\"\n  },\n  {\n    id: \"CV\",\n    shape:\n      \"M841.4 477.6l.1-.4-.2-.6-.3-.1-.6.4-.1.3.1.3.3.3.3.1.4-.3zm6.3-1.7l.4-.2v-.7l-.1-.3h-.4l-.2.4v.5l.2.3h.1zm-1.4.8l-.5-.9-.3-.1-.6-.7v-.3l-.3-.1V475.2l-.2.5v.5l.4.8.4.2.7.1.4-.6zm3.1-7.8v.5l-.3.7.5.3.3.1.6-.4.2-.5-.1-.3-.3-.3-.3-.1-.1.1-.5-.1zm-6.4-2.5l-1-.1-.6-.2h-.1v.3l.4.8.2-.5.2-.1.8.2.4-.1-.1-.1-.2-.2zm6.7-.2l-.1-.5v-.7h-.2l-.3.2.1.7.1.1.2.5.2-.3zm-11.1-1v-.2l-.3-.5-.3.1-.4.2-.1.3.4.2h.2l.5-.1zm-1.5-.9l.8-.6.2-.3-.2-.5-.5-.1-1.2.6-.1.2.1.3.1.5.2.1.6-.2z\"\n  },\n  {\n    id: \"CW\",\n    shape: \"M595.9 494.9v-.6l-.9-.4v.3l.1.2.3.1.1.2-.1.6.2.3.3-.7z\"\n  },\n  {\n    id: \"CY\",\n    shape:\n      \"M1149.9 348.4l-.3-.1-.5.2-.4.4-.4.3-.5-.3.2.9.6 1.1.2.3.3.2 1.1.3H1151.1l.2.1.2.4h.4v-.4l.2-.2.3-.2h.3l.6-.1.6-.2.5-.4.9-1h1.2l.6-.1-.2-.4-.1-.1-.4-.5-.2-.4.1-.6 2.5-1.9.5-.5-.8.2-.6.4-.4.2-.7.4-2.3.8-.8.1h-.8l-1-.1-.9-.2v.7l-.2.6-.6.2-.3-.1z\"\n  },\n  {\n    id: \"CZ\",\n    shape:\n      \"M1049.4 248.5l-2.1.6-1.4-.7-1.1 1.2-3.4 1.2-1.7 1.5-3.4 1.3 1 1.9.7 2.6 2.6 1.5 2.9 2.6 3.8 2 2.6-2.5 1.7-.5 4 1.9 2.3-.3 2.3 1.2.6-1.4 2.2.1 1.6-.6.1-.6.9-.3.2-1.4 1.1-.3.6-1.1h1.5l-2.6-3.1-3.6-.3-.7-2-3.4-.6-.6 1.5-2.7-1.2.1-1.7-3.7-.6-2.4-1.9z\"\n  },\n  {\n    id: \"DE\",\n    shape:\n      \"M1043.6 232.3l-2.4-1.9-5.5-2.4-2.5 1.7-4.7 1.1-.1-2.1-4.9-1.4-.2-2.3-3 .9-3.6-.8.4 3.4 1.2 2.2-3 3-1-1.3-3.9.3-.9 1.3 1 2-1 5.6-1.1 2.3h-2.9l1.1 6.4-.4 4.2 1 1.4-.2 2.7 2.4 1.6 7.1 1.2-2.3 4.2-.5 4.5h4.2l1-1.4 5.4 1.9 1.5-.3 2.6 1.7.6-1.6 4.4.3 3.4-1.2 2.4.2 1.7 1.3.4-1.1-1-4 1.7-.8 1.5-2.9-2.9-2.6-2.6-1.5-.7-2.6-1-1.9 3.4-1.3 1.7-1.5 3.4-1.2 1.1-1.2 1.4.7 2.1-.6-2.3-3.9.1-2.1-1.4-3.3-2-2.2 1.2-1.6-1.4-3.1z\"\n  },\n  {\n    id: \"DJ\",\n    shape:\n      \"M1217.8 499.2l-2.5-1.7 3.1-1.5.1-2.7-1.4-1.9-1.6 1.5-2.4-.5-1.9 2.8-1.8 3 .5 1.7.2 2 3.1.1 1.3-.5 1.3 1.1 2-3.4z\"\n  },\n  {\n    id: \"DK\",\n    shape:\n      \"M1035.9 221.2l-1.7-3-6.7 2 .9 2.5 5.1 3.4 2.4-4.9zm-8.6-5.1l-2.6-.9-.7-1.6 1.3-2-.1-3-3.6 1.6-1.5 1.7-4 .4-1.2 1.7-.7 1.6.4 6.1 2.1 3.4 3.6.8 3-.9-1.5-3 3.1-4.3 1.4.7 1-2.3z\"\n  },\n  {\n    id: \"DM\",\n    shape: \"M635.8 475.1l.3-.7-.1-1-.2-.4-.8-.3v.2l-.1.5.3.8.1 1.1.5-.2z\"\n  },\n  {\n    id: \"DO\",\n    shape:\n      \"M579.6 457.4v1.8l1.4 1 2.6-4.4 2-.9.6 1.6 2.2-.4 1.1-1.2 1.8.3 2.6-.2 2.5 1.3 2.3-2.6-2.5-2.3-2.4-.2.3-1.9-3 .1-.8-2.2-1.4.1-3.1-1.6-4.4-.1-.8 1.1.2 3.5-.7 2.4-1.5 1.1 1.2 1.9-.2 1.8z\"\n  },\n  {\n    id: \"DZ\",\n    shape:\n      \"M1021 336.9l-3.6.4-2.2-1.5h-5.6l-4.9 2.6-2.7-1-8.7.5-8.9 1.2-5 2-3.4 2.6-5.7 1.2-5.1 3.5 2 4.1.3 3.9 1.8 6.7 1.4 1.4-1 2.5-7 1-2.5 2.4-3.1.5-.3 4.7-6.3 2.5-2.1 3.2-4.4 1.7-5.4 1-8.9 4.7-.1 7.5v.4l-.1 1.2 20.3 15.5 18.4 13.9 18.6 13.8 1.3 3 3.4 1.8 2.6 1.1.1 4 6.1-.6 7.8-2.8 15.8-12.5 18.6-12.2-2.5-4-4.3-2.9-2.6 1.2-2-3.6-.2-2.7-3.4-4.7 2.1-2.6-.5-4 .6-3.5-.5-2.9.9-5.2-.4-3-1.9-5.6-2.6-11.3-3.4-2.6v-1.5l-4.5-3.8-.6-4.8 3.2-3.6 1.1-5.3-1-6.2 1-3.3z\"\n  },\n  {\n    id: \"EC\",\n    shape:\n      \"M553.1 573.1l-2.4-1.5-2.8-2.1-1.6 1-4.7-.9-1.4-2.7-1 .1-5.6-3.6-3.9 2.5-3.1 1.4.4 2.6-2.2 4.1-1 3.9-1.9 1 1 5.8-1.1 1.8 3.4 2.7 2.1-2.9 1.3 2.8-2.9 4.7.7 2.7-1.5 1.5.2 2.3 2.3-.5 2.3.7 2.5 3.2 3.1-2.6.9-4.3 3.3-5.5 6.7-2.5 6-6.7 1.7-4.1-.8-4.9z\"\n  },\n  {\n    id: \"EE\",\n    shape:\n      \"M1093.2 197.5l-5.5.9-5.4 1.6.9 3.4 3.3 2.1 1.5-.8.1 3.5 3.7-1 2.1.7 4.4 2.2h3.8l1.6-1.9-2.5-5.5 2.6-3.4-.9-1-4.6.2-5.1-1z\"\n  },\n  {\n    id: \"EG\",\n    shape:\n      \"M1129.7 374.8l-5.5-1.9-5.3-1.7-7.1.2-1.8 3 1.1 2.7-1.2 3.9 2 5.1 1.3 22.7 1 23.4h65.3l-1-1.3-6.8-5.7-.4-4.2 1-1.1-5.3-7-2-3.6-2.3-3.5-4.8-9.9-3.9-6.4-2.8-6.7.5-.6 4.6 9.1 2.7 2.9 2 2 1.2-1.1 1.2-3.3.7-4.8 1.3-2.5-.7-1.7-3.9-9.2-2.5 1.6-4.2-.4-4.4-1.5-1.1 2.1-1.7-3.2-3.9-.8-4.7.6-2.1 1.8-3.9 2-2.6-1z\"\n  },\n  {\n    id: \"EH\",\n    shape:\n      \"M929.6 396.2h-.8l.1 3.4-3.4.2-1.8 1.5h-2.5l-1.9-.9-4.6.7-1.9 5-1.7.4-2.8 8.1-7.8 6.8-2 8.8-2.3 2.9-.7 2.3-12.4.5h-.1l-.3 2.7 1.2-2.2 21.6.1-.9-9.2 1.4-3.3 5.2-.5.2-16.3 17.9.3.2-9.7.1-1.2v-.4z\"\n  },\n  {\n    id: \"ER\",\n    shape:\n      \"M1198.1 474l-3.2-3.1-1.8-5.9-3.7-7.3-2.6 3.6-4 1-1.6 2-.4 4.2-1.9 9.4.7 2.5 6.5 1.3 1.5-4.7 3.5 2.9 3.2-1.5 1.4 1.3 3.9.1 4.9 2.5 1.6 2.2 2.5 2.1 2.5 3.7 2 2.1 2.4.5 1.6-1.5-2.8-1.9-1.9-2.2-3.2-3.7-3.2-3.6-7.9-6z\"\n  },\n  {\n    id: \"ES\",\n    shape:\n      \"M985 325.7v-.2h-.5l-.3-.4-.1.2-.1.2v.2h.5l.4.1.1-.1zm-.8-1.6h.3l.6-.7v-.3l-.3-.2-1.1.2-.2.3v.3l-.3.1-.1.4.1.2.8.1.2-.4zM967 296l-8.2-.2-4.2.3-5.4-1h-6.8l-6.2-1.1-7.4 4.5 2 2.6-.4 4.4 1.9-1.6 2.1-.9 1.2 3.1h3l.9-.8 3 .2 1.3 3.1-2.4 1.7-.2 4.9-.9.9-.3 3-2.2.5 2 3.8-1.6 4.3 1.8 1.9-.8 1.7-2 2.5.4 2.1 4.8 1 1.4 3.7 2 2.2 2.5.6 2.1-2.5 3.3-2.3 5 .1h6.7l3.8-5 3.9-1.3 1.2-4.2 3-2.9-2-3.7 2-5.1 3.1-3.5.5-2.1 6.6-1.3 4.8-4.2-.3-3.5-6 .8-5.7-2.8-1.9 1.3-9.4-2.8-2-2.4zm26 22.6l.1-.3.1-.2.1-.1-.2-.2v-.1l.2-.2-.2-.1-1.3.4-.7.4-2.1 1.5v.3l.1.2h.4l.2.4.4-.4.3-.1.3.1.3.2.1.6.1.2.6.1.9.4.4-.2.5-.3.2-.6.3-.5.3-.5.3-.4-.1-.4-.3-.1-.3-.1-.5.2-.5-.2zm6-.3l.1-.4v-.1l-.5-.7-.9-.3-1 .1-.1.1v.4l.1.1.6.1 1.6.7h.1z\"\n  },\n  {\n    id: \"ET\",\n    shape:\n      \"M1187.6 477l-1.5 4.7-6.5-1.3-.7 5.5-2.1 6.2-3.2 3.2-2.3 4.8-.5 2.6-2.6 1.8-1.4 6.7v.7l.2 5-.8 2-3 .1-1.8 3.6 3.4.5 2.9 3.1 1 2.5 2.6 1.5 3.5 6.9 2.9 1.1v3.6l2 2.1h3.9l7.2 5.4h1.8l1.3-.1 1.2.7 3.8.5 1.6-2.7 5.1-2.6 2.3 2.1h3.8l1.5-2 3.6-.1 4.9-4.5 7.4-.3 15.4-19.1-4.8.1-18.5-7.6-2.2-2.2-2.1-3.1-2.2-3.5 1.1-2.3-1.3-1.1-1.3.5-3.1-.1-.2-2-.5-1.7 1.8-3 1.9-2.8-2-2.1-2.5-3.7-2.5-2.1-1.6-2.2-4.9-2.5-3.9-.1-1.4-1.3-3.2 1.5-3.5-2.9z\"\n  },\n  {\n    id: \"FI\",\n    shape:\n      \"M1093.4 144.4l.8-3.8-5.7-2.1-5.8 1.8-1.1 3.9-3.4 2.4-4.7-1.3-5.3.3-5.1-2.9-2.1 1.4 5.9 2.7 7.2 3.7 1.7 8.4 1.9 2.2 6.4 2.6.9 2.3-2.6 1.2-8.7 6.1-3.3 3.6-1.5 3.3 2.9 5.2-.1 5.7 4.7 1.9 3.1 3.1 7.1-1.2 7.5-2.1 8-.5 7.9-7.4 3.3-3.3.9-2.9-7.3-3.9.9-3.7-4.9-4.1 1.7-4.8-6.4-6.3 2.8-4.1-7.2-3.7-.4-3.7z\"\n  },\n  {\n    id: \"FJ\",\n    shape:\n      \"M1976.7 674.4l-3.7 2-1.9.3-3.1 1.3.2 2.4 3.9-1.3 3.9-1.6.7-3.1zm-11 8.1l-1.6 1-2.3-.8-2.7 2.2-.2 2.8 2.9.8 3.6-.9 1.8-3.3-1.5-1.8z\"\n  },\n  {\n    id: \"FK\",\n    shape:\n      \"M690.3 902.7l-.1-.3-.4-.2-.2-.1.1.2.1.3.1.2.2.1.2-.2zm5.5-1.3l-.1-.1h-.2l-.1.2.2.3.4.1-.2-.5zm-12.9-1.4l-.1.2-.4.1.2.3.6.4h.4l.1-.3-.1-.6h-.3l-.4-.1zm2.8-2l-.9-.3-.4-.3h-.3l.4.4.1.2.1.2.6.3.6.3.4.3-.1.1-.8.3h-.3l-.2.1.4.2.6-.1.2-.1h.2l.3.1v.2l-.1.2-.2.2-.4.3-.6.4h-.8l-.7.7.9.5.7.3h.9v-.1l.2-.1h.3l.1-.1.2-.4v-.6h.2l.3.1.7-.1.3-.1.6-.9.4-.8.2-.4.3-.2.1-.2.1-.3.3-.2v-.3l-.4-.2-.3-.2-.3.3-.2-.1-.9.3h-.4l-.3-.2-.4-.1-.4.1-.5.5-.8-.2zm.7-.4l.1-.3-.1-.2-.5-.2h-.5l.2.5.2.2h.6zm5.9-.7h-.4l.4.5-.8.8.2.6.3.4.1.2-.1.1-.4.1-.3.1-.2.3-.9.9.2.2-.3.7.2.3.8.7.8.4v-.7l.4-.1.4.2.4-.2-.9-1h.3l2.5.5-.1-.4-.1-.2-.3-.4 1.5-.4.5-.3.2-.3.6-.1.8-.3-.1-.1.1-.3-.4-.2-.5-.1.1-.3.5-.1-.8-.7-.3-.1-1 .1-.3.1v.2l.1.3.3.3.1.2-.2-.1-1.1-.4-.2-.1-.2-.4.2-.1.3.1.1-.3-.4-.3-.4-.1-.9.1-.8-.3z\"\n  },\n  {\n    id: \"FO\",\n    shape:\n      \"M947 186.9v-.3l-.1-.3v-.2h-.1l-.5-.1-.1-.2h-.1v.2l.1.4.5.4.3.2h.1l-.1-.1zm.5-2.1v-.1l-.2-.2-.5-.2-.2-.1-.2.1v.2l.1.1.4.1.4.3h.1l.1-.2zm-2.4-1.9l-.2-.1-.5.1h-.3l.1.3.6.2h.6l.2-.1-.1-.2-.4-.2zm2.5-.5l-.8-.2-.6-.3-1 .1.7 1.1.8.7.4.2V183.7l-.4-.5-.1-.1v-.1l.1-.1h.2l.3.2h.2l.2-.7zm1-.2l-.3-.2-.4-.4v.9h.1l.3.1.3-.4z\"\n  },\n  {\n    id: \"FR\",\n    shape:\n      \"M1025.7 303.8l-1.1-5.2-3.2 2.3-1 2.3 1.4 4.2 2.4 1.2 1.5-4.8zm-31.5-50.9l-2.4-2.4-2.2-.1-.7-2.2-4.3 1.2-1.4 5.1-11.3 4.8-4.6-2.6 1.4 7-8.2-1.6-6.4 1.3.4 4.6 7.5 2.4 3.6 3.1 5.1 6.5-1 12.3-2.7 3.7 2 2.4 9.4 2.8 1.9-1.3 5.7 2.8 6-.8.5-3.7 7.4-2 10 1.6 4.5-3.4.5-2.7-2.7-.8-1.5-4.8 1.7-1.8-1.6-2.4.2-1.7-1.8-2.7-2.4.9v-2.8l3.5-3.5-.2-1.6 2.3.6 1.3-1 .5-4.5 2.3-4.2-7.1-1.2-2.4-1.6-1.4.1-1.1-.5-4.4-2.8-2.5.4-3.4-2.9z\"\n  },\n  {\n    id: \"GA\",\n    shape:\n      \"M1050.2 557.7l-.7-.3-3.4.8-3.4-.8-2.6.4v7.6h-8.2l-1.9.3-1.1 4.8-1.3 4.6-1.3 2-.2 2.1 3.4 6.6 3.7 5.3 5.8 6.4 4.3-3.5-2.1-4.2 1.9-1.6 3.8-.8.5-2.8 3 3 4.9.3 1.7-3 .8-4.3-.6-4.9-2.7-3.8 2.4-7.4-1.4-1.2-4.2.5-1.5-3.3.4-2.8z\"\n  },\n  {\n    id: \"GB\",\n    shape:\n      \"M950 227.5l-4.9-3.7-3.9.3.8 3.2-1.1 3.2 2.9-.1 3.5 1.3 2.7-4.2zm13-24.3l-5.5.5-3.6-.4-3.7 4.8-1.9 6.1 2.2 3 .1 5.8 2.6-2.8 1.4 1.6-1.7 2.7 1 1.6 5.7 1.1h.1l3.1 3.8-.8 3.5-7.1-.6-1 4 2.6 3.3-5.1 1.9 1.3 2.4 7.5 1-4.3 1.3-7.3 6.5 2.5 1.2 3.5-2.3 4.5.7 3.3-2.9 2.2 1.2 8.3-1.7 6.5.1 4.3-3.3-1.9-3.1 2.4-1.8.5-3.9-5.8-1.2-1.3-2.3-2.9-6.9-3.2-1-4.1-7.1-.4-.6-4.8-.4 4.2-5.3 1.3-4.9h-5l-4.7.8 5-6.4z\"\n  },\n  {\n    id: \"GD\",\n    shape: \"M632.1 495.7l.5-.2.2-1.1-.3-.1-.3.3-.3.5v.4l-.2.3.4-.1z\"\n  },\n  {\n    id: \"GE\",\n    shape:\n      \"M1200 300.2l-7.5-2.9-7.7-1-4.5-1.1-.5.7 2.2 1.9 3 .7 3.4 2.3 2.1 4.2-.3 2.7 5.4-.3 5.6 3 6.9-1 1.1-1 4.2 1.8 2.8.4.6-.7-3.2-3.4 1.1-.9-3.5-1.4-2.1-2.5-5.1-1.3-2.9 1-1.1-1.2z\"\n  },\n  {\n    id: \"GF\",\n    shape:\n      \"M681.4 556.2l1.8-4.7 3.5-5.8-.9-2.6-5.8-5.4-4.1-1.5-1.9-.7-3.1 5.5.4 4.4 2.1 3.7-1 2.7-.6 2.9-1.4 2.8 2.4 1.3 1.8-1.8 1.2.3.8 1.8 2.7-.5 2.1-2.4z\"\n  },\n  {\n    id: \"GH\",\n    shape:\n      \"M976.8 502.1l-2.6-.5-1.8 1-2.4-.5-9.7.3-.2 3.6.8 4.8 1.4 9.1-2.3 5.3-1.5 7.2 2.4 5.5-.2 2.5 5 1.8 5-1.9 3.2-2.1 8.7-3.8-1.2-2.2-1.5-4-.4-3.2 1.2-5.7-1.4-2.3-.6-5.1.1-4.6-2.4-3.3.4-1.9z\"\n  },\n  {\n    id: \"GL\",\n    shape:\n      \"M887.4 76.3l-26-.4-11.8.3-5 1.3-11.5-.1-12.7 2.1-1.6 1.7 6.7 2.1-6.2-1.3-4.5-.3-7-1.4-10.6 2.1-2.7-1.2h-10.4l-10.9.6-8.9 1-.2 1.8-5.3.5-14.6 2.9-4.6 1.7 8.1 1.5-2.8 1.6L730 95l-15.5 2.2-2.2 1.7 6.4 2 14.5 1.2-7.5.2-10.9 1.5 3.8 3.1 3 1.5 9.4-.3 10.1-.2 7.6.3 8 2.9-1.4 2.1 3.6 1.9 1.4 5.3 1 3.6 1.4 1.9-7 4.8 2.6 1.3 4.4-.8 2.6 1.8 5.3 3.4-7.5-1.4h-3.8l-3 2.8-1.5 3.6 4.2 1.8 4-.8 2.6-.8 5.5-1.9-2.8 4.2-2.6 2.3-7.1 2-7 6.3 2 2-3.4 4 3.7 5.2-1.5 5 .7 3.7 4.8 7.1.8 5.6 3.1 3.2h8.9l5 4.7 6.5-.3 4.1-5.7 3.5-4.8-.3-4.4 8.6-4.6 3.3-3.7 1.4-3.9 4.7-3.5 6.5-1.3 6.1-1.4 3-.2 10.2-3.9 7.4-5.7 4.8-2.1 4.6-.1 12.5-1.8 12.1-4.3 11.9-4.6-5.5-.3-10.6-.2 5.3-2.8-.5-3.6 4.2 3 2.7 2.1 7.3-1-.6-4.3-4.5-3.1-5-1.3 2.4-1.4 7.2 2.1.5-2.3-4.1-3.4h5.4l5.6-.8 1.7-1.8-4-2.1 8.6-.3-4-4.3 4.1-.5.1-4.2-6.2-2.5 6.4-1.6 5.8-.1-3.6-3.2 1.1-5.1 3.6-2.9 4.9-3.2-8-.2 11.3-.7 2.2-1 14.6-2.9-1.6-1.7-10-.8-16.9 1.5-9.2 1.5 4.5-2.3-2.3-1.4-7 1.2-9.7-1.4-12.1.5-1.4-.7 18.3-.4 12.9-.2 6.6-1.4-19.7-2.9z\"\n  },\n  {\n    id: \"GM\",\n    shape:\n      \"M882.8 488.5l5 .1 1.4-.9h1l2.1-1.5 2.4 1.4 2.4.1 2.4-1.5-1.1-1.8-1.8 1.1-1.8-.1-2.1-1.5-1.8.1-1.3 1.5-6.1.2-.7 2.8z\"\n  },\n  {\n    id: \"GN\",\n    shape:\n      \"M912.4 493l-.8.4-3-.5-.4.7-1.3.1-4-1.5-2.7-.1-.1 2.1-.6.7.4 2.1-.8.9h-1.3l-1.4 1-1.7-.1-2.6 3.1 1.6 1.1.8 1.4.7 2.8 1.3 1.2 1.5.9 2.1 2.5 2.4 3.7 3-2.8.7-1.7 1-1.4 1.5-.2 1.3-1.2h4.5l1.5 2.3 1.2 2.7-.2 1.8.9 1.7v2.3l1.5-.3 1.2-.2 1.5-.7 2.3 3.9-.4 2.6 1.1 1.3 1.6.1 1.1-2.6 1.6.2h.9l.3-2.8-.4-1.2.6-.9 2-.8-1.3-5.1-1.3-2.6.5-2.2 1.1-.5-1.7-1.8.3-1.9-.7-.7-1.2.6.2-2.1 1.2-1.6-2.3-2.7-.6-1.7-1.3-1.4-1.1-.2-1.3.9-1.8.8-1.6 1.4-2.4-.5-1.5-1.6-.9-.2-1.5.8h-.9l-.3-2.3z\"\n  },\n  {\n    id: \"GP\",\n    shape:\n      \"M636.4 471.1l.2-.2v-.3l-.2-.3-.2.1-.2.3v.3l.1.1h.3zm-1.9-.8l.2-.2v-1.2l.1-.3-.2-.1-.2-.2-.6-.2-.1.1-.2.3.1 1.5.2.5.2.1.5-.3zm1.6-1.4l.8-.2-.9-.6-.2-.4v-.3l-.4-.3-.2.2-.1.3.1.5-.3.4.1.4.4.1.7-.1z\"\n  },\n  {\n    id: \"GQ\",\n    shape: \"M1040.1 557.8l-9.2-.2-1.9 7.2 1 .9 1.9-.3h8.2v-7.6z\"\n  },\n  {\n    id: \"GR\",\n    shape:\n      \"M1101.9 344.9l-.8 2.8 6.6 1.2v1.1l7.6-.6.5-1.9-2.8.8v-1.1l-3.9-.5-4.1.4-3.1-2.2zm11.5-37.4l-2.7-1.6.3 3-4.6.6-3.9-2.1-3.9 1.7-3.8-.2-1 .2-.7 1.1-2.8-.1-1.9 1.3-3.3.6v1.6l-1.6.9-.1 2.1-2.1 3 .5 1.9 2.9 3.6 2.3 3 1.3 4.3 2.3 5.1 4.6 2.9 3.4-.1-2.4-5.7 3.3-.7-1.9-3.3 5 1.7-.4-3.7-2.7-1.8-3.2-3 1.8-1.4-2.8-3-1.6-3.8.9-1.3 3 3.2h2.9l2.5-1-3.9-3.6 6.1-1.6 2.7.6 3.2.2 1.1-.7 1.2-3.9z\"\n  },\n  {\n    id: \"GT\",\n    shape:\n      \"M482.8 458.9l-5.1-.1h-5.2l-.4 3.6h-2.6l1.8 2.1 1.9 1.5.5 1.4.8.4-.4 2.1H467l-3.3 5.2.7 1.2-.8 1.5-.4 1.9 2.7 2.6 2.5 1.3 3.4.1 2.8 1.1.2-1 2.1-1.6 1.1-.7-.2-.7 1.4-.4 1.3-1.6-.3-1.3.5-1.2 2.8-1.8 2.8-2.4-1.5-.8-.6.9-1.7-1.1h-1.6l1.2-7.2.7-5z\"\n  },\n  {\n    id: \"GW\",\n    shape:\n      \"M900.2 492.1l-10.3-.3-1.5.7-1.8-.2-3 1.1.3 1.3 1.7 1.4v.9l1.2 1.8 2.4.5 2.9 2.6 2.6-3.1 1.7.1 1.4-1h1.3l.8-.9-.4-2.1.6-.7.1-2.1z\"\n  },\n  {\n    id: \"GY\",\n    shape:\n      \"M656.1 534.2l-2.1-2.3-2.9-3.1-2.1-.1-.1-3.3-3.3-4.1-3.6-2.4-4.6 3.8-.6 2.3 1.9 2.3-1.5 1.2-3.4 1.1v2.9l-1.6 1.8 3.7 4.8 2.9-.3 1.3 1.5-.8 2.8 1.9.9 1.2 3-1.6 2.2-1 5.4 1.4 3.3.3 2.9 3.5 3 2.7.3.7-1.3 1.7-.2 2.6-1.1 1.8-1.7 3.1.5 1.4-.2-3.3-5.6-.7-3.5-1.8-.1-2.4-4.6 1.1-3.3-.3-1.5 3.5-1.6 1-5.7z\"\n  },\n  {\n    id: \"HK\",\n    shape:\n      \"M1604.9 430.9v-.4l-.4-.2h-.3l.1.2.4.5.2-.1zm-1.3 0l-.1-.5.2-.3-.9.3-.1.3v.1l.2.1h.7zm1.6-1.2l-.1-.3-.2-.1-.1-.3-.1-.2-.3-.1-.2-.1h-.4l-.1.1h-.2l-.2.2v.2l-.5.4v.2l.3.2.5-.1.6.2.8.3v-.5l.2-.1z\"\n  },\n  {\n    id: \"HN\",\n    shape:\n      \"M514.1 476.8l-1.3-1.8-1.9-1-1.5-1.4-1.6-1.2-.8-.1-2.5-.9-1.1.5-1.5.2-1.3-.4-1.7-.4-.8.7-1.8.7-2.6.2-2.5-.6-.9.4-.5-.6-1.6.1-1.3 1.1-.6-.2-2.8 2.4-2.8 1.8-.5 1.2.3 1.3-1.3 1.6 1.5.5 1.1 1.3 1.6 1 .1.9 2.5-.8 1.1.5.7.7-.6 2.5 1.7.6.7 2 1.8-.3.8-1.5h.8l.2-3.1 1.3-.2h1.2l1.4-1.7 1.5 1.3.6-.8 1.1-.7 2.1-1.8.3-1.3.5.1.8-1.5.6-.2.9.9 1.1.3 1.3-.8h1.4l2-.8.9-.9 1.9.2z\"\n  },\n  {\n    id: \"HR\",\n    shape:\n      \"M1065 280.4l-4-2.6-1.6-.8-3.9 1.7-.3 2.5-1.7.6.2 1.7-2-.1-1.8-1-.8 1-3.5-.2-.2.1v2.2l1.7 2 1.3-2.6 3.3 1 .3 2 2.5 2.6-1 .5 4.6 4.5 4.8 1.8 3.1 2.2 5 2.3.5-1-4.7-2.4-2.2-2.5-2-1.4-2.5-2.3-1.3-1.9-2.7-2.9.9-2.5 1.9 1.4 1-1.3 2.3-.1 4.4 1 3.5-.1 2.4 1.4 1.7-2.3-1.7-1.8-1.5-2.4-1.8.9-4.2-1.2z\"\n  },\n  {\n    id: \"HT\",\n    shape:\n      \"M580.6 446.7l-4.6-1-3.4-.2-1.4 1.7 3.4 1-.3 2.4 2.2 2.8-2.1 1.4-4.2-.5-5-.9-.7 2.1 2.8 1.9 2.7-1.1 3.3.4 2.7-.4 3.6 1.1.2-1.8-1.2-1.9 1.5-1.1.7-2.4-.2-3.5z\"\n  },\n  {\n    id: \"HU\",\n    shape:\n      \"M1079.1 263.8l-1.6.4-1 1.5-2.2.7-.6-.4-2.3 1-1.9.2-.3 1.2-4.1.8-1.9-.7-2.6-1.6-.2 2.6h-2.8l1.1 1.3-1.3 4 .8.1 1.2 2.1 1.6.8 4 2.6 4.2 1.2 1.8-.9 3.7-1.6 3.2.2 3.8-1.1 2.6-4.3 1.9-4.2 2.9-1.3-.6-1.6-2.9-1.7-1 .6-5.5-1.9z\"\n  },\n  {\n    id: \"IC\",\n    shape:\n      \"M879.6 395.2l-.2-.2-.7.5h-.6l.1.2.1.2.7.4.6-1.1zm13.5-2.1v-.1h-.1l-.1.1-1.3-.1-.2.6-.5.4v.7l.5.7.3.1.5.1.7-.4.2-.4.1-.8-.1-.4v-.5zm-9.7.8l.5-.4v-.2l-.1-.3-.5-.3h-.2l-.2.2-.2.4.3.5.2.1h.2zm4.7-2.3l1.2-1v-.3l-1 .1-1.1 1-.3.1-1 .1h-.5l-.4.2.2.3.4 1 .7.9.6-.2.3-.2.4-.6.5-1.4zm11.6 1.3l1.5-.5.3-1 .3-1.1v-.7l-.2-.3h-.5l-.3.2-.1.6-.7 1.3-.5 1.2-.7.6-.7.2.1.1.7.1.8-.7zm-19.7-2l.5-.5.1-.3-.1-.5.2-.2-.1-.4-.3-.4h-.7l-.4.6.6 1.2.1.5h.1zm22.4-2.7l.9-.3.5-.3.1-.9.2-.3-.2-.3-.2.2-.2.4-.6.2-.8.4-.2.3-.2.9.4.1.3-.4z\"\n  },\n  {\n    id: \"ID\",\n    shape:\n      \"M1651.9 637.3l.5-1.7-1.8-1.9-2.8-2-5.3 1.3 7 4.4 2.4-.1zm20.9-.6l4-4.8.1-1.9-.5-1.3-5.7 2.6-2.8 3.9-.7 2.1.6.8 5-1.4zm-35.6-13l-1.6 2.2-3.1.1-2.2 3.6 3 .1 3.9-.9 6.6-1.2-1.2-2.8-3.5.6-1.9-1.7zm28.1 0l-5.2 2.3-3.8.5-3.4-1.9-4.5 1.3-.2 2.3 7.4.8 8.6-1.8 1.1-3.5zm-79.5-8.4l-.7-2.3-2.3-.5-4.4-2.4-6.8-.4-4.1 6.1 5.1.4.8 2.8 10 2.6 2.4-.8 4.1.6 6.3 2.4 5.2 1.2 5.8.5 5.1-.2 5.9 2.5 6.6-2.4-6.6-3.8-8.3-1.1-1.8-4.1-10.3-3.1-1.3 2.6-10.7-.6zm146.6-3.6l.2-3-1.2-1.9-1.3 2.2-1.2 2.2.3 4.8 3.2-4.3zm-41-17.5l-1.4-2.1-5.7.3 1 2.7 3.9 1.2 2.2-2.1zm18.1-2.4l-6.1-1.8-6.9.3-1.5 3.5 3.9.2 3.2-.4 4.6.5 4.7 2.6-1.9-4.9zm21-12.3l-.8-2.4-9-2.6-2.9 2.1-7.6 1.5 2.3 3.2 5 1.2 2.1 3.7 8.3.1.4 1.6-4-.1-6.2 2.3 4.2 3.1-.1 2.8 1.2 2.3 2.1-.5 1.8-3.1 8.2 5.9 4.6.5 10.6 5.4 2.3 5.3 1 6.9-3.7 1.8-2.8 5.2 7.1-.2 1.6-1.8 5.5 1.3 4.6 5.2 1.5-20.8 1-20.7-6-1.2-4.1-2.3-4.7-2.2h-5l-6.6 3.8-4.9 6.8-5.7-3.8-1.3-10.3zm-50-16.4l-1-1.4-5.5 4.6-6.5.3-7.1-.9-4.4-1.9-4.7 4.8-1.2 2.6-2.9 9.6-.9 5-2.4 4.2 1.6 4.3 2.3.1.6 6.1-1.9 5.9 2.3 1.9 3.6-1 .3-9.1-.2-7.4 3.8-1.9-.7 6.2 3.9 3.7-.8 2.5 1.3 1.7 5.6-2.4-3 5.2 2.1 2.2 3.1-1.9.3-4.1-4.7-7.4 1.1-2.2-5.1-8.1 5-2.5 2.6-3.7 2.4.9.5-2.9-10.5 2.1-3.1 2.9-5-5.6.9-4.8 4.9-1 9.3-.3 5.4 1.3 4.3-1.3 4.4-6.3zm19.4 1.9l-.6-2.6-3.3-.6-.5-3.5-1.8 2.3-1 5.1 1.7 8.2 2.2 4 1.6-.8-2.3-3.3.9-3.9 2.9.6.2-5.5zm-60.9-4.5l.9-2.9-4.3-6 3-5.8-5-1h-6.4l-1.7 7.2-2 2.2-2.7 8.9-4.5 1.3-5.4-1.8-2.7.6-3.2 3.2-3.6-.4-3.6 1.2-3.9-3.5-1-4.3-3.3 4.2-.6 5.9.8 5.6 2.6 5.4 2.8 1.8.7 8.5 4.6.8 3.6-.4 2 3.1 6.7-2.3 2.8 2 4 .4 2 3.9 6.5-2.9.8 2.3 2.5-9.7.3-6.4 5.5-4.3-.2-5.8 1.8-4.3 6.7-.8-6.5-5.9zm-68.7 48.9l.7-9.8 1.7-8-2.6-4-4.1-.5-1.9-3.6-.9-4.4-2-.2-3.2-2.2 2.3-5.2-4.3-2.9-3.3-5.3-4.8-4.4-5.7-.1-5.5-6.8-3.2-2.7-4.5-4.3-5.2-6.2-8.8-1.2-3.6-.3.6 3.2 6.1 7 4.4 3.6 3.1 5.5 5.1 4 2.2 4.9 1.7 5.5 4.9 5.3 4.1 8.9 2.7 4.8 4.1 5.2 2.2 3.8 7 5.2 4.5 5.3 6.2-.1z\"\n  },\n  {\n    id: \"IE\",\n    shape:\n      \"M947.3 231.7l-3.5-1.3-2.9.1 1.1-3.2-.8-3.2-3.7 2.8-6.7 4.7 2.1 6.1-4.2 6.4 6.7.9 8.7-3.6 3.9-5.4-.7-4.3z\"\n  },\n  {\n    id: \"IL\",\n    shape:\n      \"M1167.8 360.5l-1.4.1-.4 1.1h-1.8l-.1.1-.6 1.6-.6 4.8-1.1 2.9.4.4-1.4 2.1 3.9 9.2.7 1.7 1.7-10.2-.4-2.4-2.4.8.1-1.7 1.2-.8-1.4-.7.7-4.3 2 .9.7-2h-.1l.6-1-.3-2.6z\"\n  },\n  {\n    id: \"IN\",\n    shape:\n      \"M1414.1 380.1l-8.5-4.4-6.2-4-3.2-7 4.1.9-.6-3.3-3-3.3-.8-5.2-7.6-7.5-3.7 5.4-5.7 1-8.5-1.6-1.9 2.8 3.2 5.6 2.9 4.3 5 3.1-3.7 3.7 1 4.5-3.9 6.3-2.1 6.5-4.5 6.7-6.4-.5-4.9 6.6 4 2.9 1.3 4.9 3.5 3.2 1.8 5.5h-12l-3.2 4.2 7.1 5.4 1.9 2.5-2.4 2.3 8 7.7 4 .8 7.6-3.8 1.7 5.9.8 7.8 2.5 8.1 3.6 12.3 5.8 8.8 1.3 3.9 2 8 3.4 6.1 2.2 3 2.5 6.4 3.1 8.9 5.5 6 2.2-1.8 1.7-4.4 5-1.8-1.8-2.1 2.2-4.8 2.9-.3-.7-10.8 1.9-6.1-.7-5.3-1.9-8.2 1.2-4.9 2.5-.3 4.8-2.3 2.6-1.6-.3-2.9 5-4.2 3.7-4 5.3-7.5 7.4-4.2 2.4-3.8-.9-4.8 6.6-1.3 3.7.1.5-2.4-1.6-5.2-2.6-4.8.4-3.8-3.7-1.7.8-2.3 3.1-2.4-4.6-3.4 1.2-4.3 4.8 2.7 2.7.4 1.2 4.4 5.4.9 5-.1 3.4 1.1-1.6 5.3-2.4.4-1.1 3.6 3.5 3.3.2-4 1.5-.1 4.5 10.1 2.4-1.5-.9-2.7.9-2.1-.9-6.6 4.6 1.4 1.5-5.2-.3-3.1 2.1-5.4-.9-3.6 6.1-4.4 4.1 1.1-1.3-3.9 1.6-1.2-.9-2.4-6.1-.9 1.2-2.7-3.5-3.9-3.2 2.6-4.9-1.5-5.3 4-3.9 4.8-4.2.8 2.7 2 .4 3.9-4.4.2-4.7-.4-3.2 1-5.5-2.5-.3-1.2-1.5-5.1-3 1.4.1 2.7 1.5 4.1-.1 2.5-4.6.1-6.8-1.5-4.3-.6-3.8-3.2-7.6-.9-7.7-3.5-5.8-3.1-5.7-2.5.9-5.9 2.8-2.9z\"\n  },\n  {\n    id: \"IQ\",\n    shape:\n      \"M1207.3 334.9l-6.2-.9-2.1 1-2.1 4.1-2.7 1.6 1.2 4.7-.9 7.8-11 6.7 3.1 7.7 6.7 1.7 8.5 4.5 16.7 12.7 10.2.5 3.2-6.1 3.7.5 3.2.4-3.4-3.4-.5-3.3h-1.7l.2-4.6-3.5-4.9-7-3.4-4.6-6.1.5-5 2.3-2.2-1-3.8-3.7-1.9-4.7-7.8-2.3 1.1-2.1-1.6z\"\n  },\n  {\n    id: \"IR\",\n    shape:\n      \"M1213.5 324.4l-3.2-2.9-1.2-2.4-3.3 1.8 2.9 7.3-.7 2 3.7 5.2 4.7 7.8 3.7 1.9 1 3.8-2.3 2.2-.5 5 4.6 6.1 7 3.4 3.5 4.9-.2 4.6h1.7l.5 3.3 3.4 3.4 1.7-2.5 3.7 2.1 2.8-1 5.1 8.4 4.3 6.1 5.5 1.8 6.1 4.9 6.9 2.1 5.1-3.1 4-1.1 2.8 1.1 3.2 7.8 6.3.8 6.1 1.5 10.5 1.9 1.2-7.4 7.4-3.3-.9-2.9-2.7-1-1-5.7-5.6-2.7-2.8-3.9-3.2-3.3 3.9-5.8-1.1-4-4.3-1.1-1.1-4-2.7-5.1 1.6-3.5-2.5-.9.5-4.7.5-8-1.6-5.5-3.9-.2-7.3-5.7-4.3-.7-6.5-3.3-3.8-.6-2.1 1.2-3.5-.2-3 3.7-4.4 1.2-.2 1.6-7.9 1.7-7.6-1.1-4.3-3.3-5.2-1.3-2.5-4.8-1.3.3-3.8-3.4 1.2-3.1-1.9-1.9-1.9.5-5.3 4.7-1.8.2-3.7-.9z\"\n  },\n  {\n    id: \"IS\",\n    shape:\n      \"M915.7 158.6l-6.9-.4-7.3 2.9-5.1-1.5-6.9 3-5.9-3.8-6.5.8-3.6 3.7 8.7 1.3-.1 1.6-7.8 1.1 8.8 2.7-4.6 2.5 11.7 1.8 5.6.8 3.9-1 12.9-3.9 6.1-4.2-4.4-3.8 1.4-3.6z\"\n  },\n  {\n    id: \"IT\",\n    shape:\n      \"M1057.8 328.6l-4 .5-5.2.7-6.2-.6-.6 3.4 7.5 3.3 2.7.7 4.2 2.4.9-3.3-.9-2 1.6-5.1zm-33.7-18.9l-2.5 1.9-2.8-.3 1.3 3.6.4 7.6 2.1 1.7 2-2.1 2.4.4.4-8.4-3.3-4.4zm14.3-34.3l-1.3-2.2-4.8 1.1-.5 1.2-3.1-.9-.3 2.5-2.1 1.1-3.8-.8-.9 2.5-2.4.2-.9-1-2.7 2.1-2.4.3-2.2-1.3-.2 1.7 1.6 2.4-1.7 1.8 1.5 4.8 2.7.8-.5 2.7 2.1-.5 2.8-2.8 2.3-.9 4.2 2.1 2.6.7 1.9 6 3.6 3.6 4.9 4 4.2 2.8 3.9.4 2.3 2.5 3.4 1.2 1.7 2.7 2.2.8 1.8 3.2 2.3 3.7-1.1 1.3-.8 3.5.1 2 2.1-.5 2.5-5.6 2.1-.4.4-3.3-3.9-2.3 1.9-4.1 4.5 1 3.1 3 .8-2.3-.6-1.2-4.7-3.2-3.9-1.9-4.8-2.3 1.4-1.2-1.4-1.4-4 .1-6-5-2.9-5.1-4.9-3.1-1.9-3.1.5-1.8-.4-3 3.9-2.2 4.1.9-1.4-2.7.3-3-7.2-1.6z\"\n  },\n  {\n    id: \"JM\",\n    shape:\n      \"M550.7 458.5l3.9-.1-.8-1.8-2.7-1.5-3.7-.6-1.2-.2-2.4.4-.8 1.5 2.9 2.3 3 1 1.8-1z\"\n  },\n  {\n    id: \"JO\",\n    shape:\n      \"M1186.6 367.6l-3.1-7.7-9.6 6.7-6.3-2.5-.7 2 .4 3.9-.6 1.9.4 2.4-1.7 10.2.3.9 6.1 1 2.1-2 1.1-2.3 4-.8.7-2.2 1.7-1-6.1-6.4 10.4-3.1.9-1z\"\n  },\n  {\n    id: \"JP\",\n    shape:\n      \"M1692.5 354.9l-4.5-1.3-1.1 2.7-3.3-.8-1.3 3.8 1.2 3 4.2 1.8-.1-3.7 2.1-1.5 3.1 2.1 1.3-3.9-1.6-2.2zm24.4-19.3l-3.6-6.7 1.3-6.4-2.8-5.2-8.1-8.7-4.8 1.2.2 3.9 5.1 7.1 1 7.9-1.7 2.5-4.5 6.5-5-3.1v11.5l-6.3-1.3-9.6 1.9-1.9 4.4-3.9 3.3-1.1 4-4.3 2 4 4.3 4.1 1.9.9 5.7 3.5 2.5 2.5-2.7-.8-10.8-7.3-4.7 6.1-.1 5-3 8.6-1.4 2.4 4.8 4.6 2.4 4.4-7.3 9.1-.4 5.4-3 .6-4.6-2.5-3.2-.6-5.2zm-11.8-44.2l-5.3-2.1-10.4-6.4 1.9 4.8 4.3 8.5-5.2.4.6 4.7 4.6 6.1h5.7l-1.6-6.8 10.8 4.2.4-6.1 6.4-1.7-6-6.9-1.7 2.6-4.5-1.3z\"\n  },\n  {\n    id: \"KE\",\n    shape:\n      \"M1211.7 547.2h-3.8l-2.3-2.1-5.1 2.6-1.6 2.7-3.8-.5-1.2-.7-1.3.1h-1.8l-7.2-5.4h-3.9l-2-2.1v-3.6l-2.9-1.1-3.8 4.2-3.4 3.8 2.7 4.4.7 3.2 2.6 7.3-2.1 4.7-2.7 4.2-1.6 2.6v.3l1.4 2.4-.4 4.7 20.2 13 .4 3.7 8 6.3 2.2-2.1 1.2-4.2 1.8-2.6.9-4.5 2.1-.4 1.4-2.7 4-2.5-3.3-5.3-.2-23.2 4.8-7.2z\"\n  },\n  {\n    id: \"KG\",\n    shape:\n      \"M1387.2 302.6l-3.5-.9-3.3-2.2-7.8-.6-8.6-.2-1.6.7-8.1-2.6-2.5 1.3.5 3.6-9.1-2.1-3.1.8-.3 2.7 1.8.6-3.1 4.1 4.6 2.3 3.2-1.6 7.1 3.3-5.2 4.5-4.1-.6-1.4 2-5.9-1.1.6 3.7 5.4-.5 7.1 2 9.5-.9 1-1.5-1.1-1.5 4-3 3.2-1.2 5.7.9.6-4 6.4-.8 1-2.4 6.8-3.4.2-1.4z\"\n  },\n  {\n    id: \"KH\",\n    shape:\n      \"M1574.8 481.8l-5.2-2.3-2 4.3-4.9-2.4-5.3-1-7.1 1.3-3 5.2 2.1 7.7 3.4 6.6 2.6 3.3 4.7.9 4.7-2.5 5.8-.5-2.8-3.8 8.9-4.9-.1-7.7-1.8-4.2z\"\n  },\n  {\n    id: \"KM\",\n    shape:\n      \"M1221.1 650.5l-.4-.4h-.4v.2l.1.4 1.1.2-.4-.4zm3.9-1.5h-.1l-.2.1-.1.2-.1.3h-.9l.8.5.5.5.2.2.1-.2.1-.7-.3-.9zm-5.6-1.1l.2-.3-.2-.7-.4-.8.1-1.4-.2-.2h-.3l-.1.1-.1.3-.3 2 .4.6.3.1.5.4.1-.1z\"\n  },\n  {\n    id: \"KN\",\n    shape:\n      \"M629.9 463.2v-.3l-.2-.2h-.3v.5l.2.2.3-.2zm-.5-.7l-.1-.2-.1-.1-.2-.4-.4-.4-.2.1-.1.2v.1l.3.3.4.1.2.4.2-.1z\"\n  },\n  {\n    id: \"KP\",\n    shape:\n      \"M1644.7 302.3l-5.5-3.6.1 3.5-6.3 2.6 2.7 3.3-4.6-.2-3.6-2-1 4.4-3.8 3.4-2.1 4 3.3 1.7 3.4.7.8 1 .4 3.5 1.1 1.2-.9.7-.1 2.9 1.9 1 1.6.6.8 1.2 1.3-.5v-1.3l3.1 1.3.1-.6 2.4.2.7-2.9 3.5-.3 2.1-.4-.1-1.6-4.3-2.8-2.6-1 .2-.7-1.2-2.8 1.3-1.7 2.9-1 1-1.9.3-1.1 1.9-1.4-2.8-4.5.3-2.1.9-2 2.2.3-1.4-1.1z\"\n  },\n  {\n    id: \"KR\",\n    shape:\n      \"M1637.3 331.7l6.2 5.5-3.4 1.1 5.2 6.8 1.1 4.8 2.1 3.5 4.5-.5 3.2-2.7 4.2-1.2.5-3.6-3.4-7.5-3.3-4.2-8.2-7.6.1 1.6-2.1.4-3.5.3-.7 2.9-2.4-.2-.1.6z\"\n  },\n  {\n    id: \"KW\",\n    shape:\n      \"M1235.6 381.4l-3.7-.5-3.2 6.1 4.9.6 1.7 3.1 3.8-.2-2.4-4.8.3-1.5-1.4-2.8z\"\n  },\n  {\n    id: \"KY\",\n    shape:\n      \"M527 449.1l-.1-.3-.1.1v.6h.7l.3-.2h.6l-.1-.2-.8-.1-.1.1-.2.1-.2-.1zm8-2.3l-.1-.1h-.1l-.3.1h-.2l-.1.1-.1.1h.2l.4-.2H535zm.8-.1l.5-.2-.1-.1h-.1l-.1.1h-.1l-.5.3h.2l.2-.1z\"\n  },\n  {\n    id: \"KZ\",\n    shape:\n      \"M1308.8 223.8l-9-1.3-3.1 2.5-10.8 2.2-1.7 1.5-16.8 2.1-1.4 2.1 5 4.1-3.9 1.6 1.5 1.7-3.6 2.9 9.4 4.2-.2 3-6.9-.3-.8 1.8-7.3-3.2-7.6.2-4.3 2.5-6.6-2.4-11.9-4.3-7.5.2-8.1 6.6.7 4.6-6-3.6-2.1 6.8 1.7 1.2-1.7 4.7 5.3 4.3 3.6-.2 4.2 4.1.2 3.2 2.8 1 4.4-1.3 5-2.7 4.7 1.5 4.9-.3 1.9 3.9.6 6-4.6-.9-4 1 .9 4.5-5-.6.6 2 3.2 1.6 3.7 5.5 6.4 2.1 1.5 2.1-.7 2.6.7 1.5 1.8-2 5.5-1.3 3.8 1.7 4.9 4.9 2.5-.3-6.2-22.8 11.9-3.6 1.1.5 9.1 4.5 4.8 2.3 6.5 5.5 5.7-.9 8.6-.5 7.5 4.5 1.5 6.2 2.5.1 2.6 5 6.6.2 2.3 3h1.9l.9-4.5 5.4-4.3 2.5-1.2.3-2.7 3.1-.8 9.1 2.1-.5-3.6 2.5-1.3 8.1 2.6 1.6-.7 8.6.2 7.8.6 3.3 2.2 3.5.9-1.7-3.5 2.9-1.6-8.7-10.7 9-2.4 2-1.4-1-11.1 10.7 2 1.6-2.8-2.5-6.2 3.8-.6 1.8-4.2-4.3-3.8-6 .9-3.3-2.6-3.9-1.2-4.1-3.6-3.2-1.1-6.2 1.6-8.3-3.6-1.1 3.3-18.1-15.5-8.3-4.7.8-1.9-9.1 5.7-4.4.4-1.2-3.3-7-2.1-4.3 1.5-4.3-6.3z\"\n  },\n  {\n    id: \"LA\",\n    shape:\n      \"M1574.8 481.8l.2-6.4-2-4.5-4.8-4.4-4.3-5.6-5.7-7.5-7.3-3.8 1.3-2.3 3.3-1.7-3-5.5-6.8-.1-3.4-5.7-4-5.1-2.7 1 1.9 7.2-2.9-.1-.7-1.5-4.1 4.1-.8 2.4 2.6 1.9.9 3.8 3.8.3-.4 6.7 1 5.7 5.3-3.8 1.8 1.2 3.2-.2.8-2.2 4.3.4 4.9 5.2 1.3 6.3 5.2 5.5.5 5.4-1.5 2.9 4.9 2.4 2-4.3 5.2 2.3z\"\n  },\n  {\n    id: \"LB\",\n    shape:\n      \"M1167.8 360.5l.9-3.5 2.6-2.4-1.2-2.5-2.4-.3-.1.2-2.1 4.5-1.3 5.2h1.8l.4-1.1 1.4-.1z\"\n  },\n  {\n    id: \"LC\",\n    shape: \"M637.4 484.2l.1-1.2-.1-.5-.2.1-.3.4-.4.6-.1.3v.6l.6.4.4-.7z\"\n  },\n  {\n    id: \"LI\",\n    shape:\n      \"M1024.4 273.6v-.2l.1-.2-.1-.1-.1-.2-.1-.1v-.2l-.1-.1v-.2l-.1-.1-.2.6v.5l.1.2h.1l.4.1z\"\n  },\n  {\n    id: \"LK\",\n    shape:\n      \"M1432.2 532.7l2.3-1.8.6-6.6-3-6.6-2.9-4.5-4.1-3.5-1.9 10.3 1.4 9.1 2.8 5.1 4.8-1.5z\"\n  },\n  {\n    id: \"LR\",\n    shape:\n      \"M929.4 523.3l-1.6-.2-1.1 2.6-1.6-.1-1.1-1.3.4-2.6-2.3-3.9-1.5.7-1.2.2-2.6 3-2.6 3.4-.3 1.9-1.3 2 3.7 4.1 4.8 3.5 5.1 4.8 5.7 3.1 1.5-.1.5-5.2.5-.8-.2-2.5-2.3-2.7-1.8-.4-1.6-1.8 1.2-2.8-.6-3.1.3-1.8z\"\n  },\n  {\n    id: \"LS\",\n    shape:\n      \"M1128.1 766.5l1.1-2 3.1-1 1.1-2.1 1.9-3.1-1.7-1.9-2.3-2-2.6 1.3-3.1 2.5-3.2 4 3.7 4.9 2-.6z\"\n  },\n  {\n    id: \"LT\",\n    shape:\n      \"M1100.4 221.2l-5-2.9-2.5-.4-.9-1.3-4.4.6-7.9-.4-5 1.9 1.7 5 5 1.1 2.2.9-.2 1.7.6 1.5 2.5.6 1.4 1.9h4.6l4.8-2.2.5-3.4 3.5-2-.9-2.6z\"\n  },\n  {\n    id: \"LU\",\n    shape: \"M1007 258.6l.2-2.7-1-1.4-1.3.2-.4 3.5 1.1.5 1.4-.1z\"\n  },\n  {\n    id: \"LV\",\n    shape:\n      \"M1102.1 210.1h-3.8l-4.4-2.2-2.1-.7-3.7 1-.2 4.6-3.6.1-4.4-4.5-4 2.1-1.7 3.7.5 4.5 5-1.9 7.9.4 4.4-.6.9 1.3 2.5.4 5 2.9 2.6-1 4.6-2.3-2.1-3.6-1-2.8-2.4-1.4z\"\n  },\n  {\n    id: \"LY\",\n    shape:\n      \"M1111.8 371.4l-1.5-2.1-5.4-.8-1.8-1.1h-2l-2-2.8-7.3-1.3-3.6.8-3.7 3-1.5 3.1 1.5 4.8-2.4 3-2.5 1.6-5.9-3.1-7.7-2.7-4.9-1.2-2.8-5.7-7.2-2.8-4.5-1.1-2.2.6-6.4-2.2-.1 4.9-2.6 1.8-1.5 2-3.7 2.5.7 2.6-.4 2.7-2.6 1.4 1.9 5.6.4 3-.9 5.2.5 2.9-.6 3.5.5 4-2.1 2.6 3.4 4.7.2 2.7 2 3.6 2.6-1.2 4.3 2.9 2.5 4 8.8 2.8 3.1 3.5 3.9-2.4 5.4-3.5 22.3 12.2 22.4 12.2v-2.7h6.3l-.5-12.7-1-23.4-1.3-22.7-2-5.1 1.2-3.9-1.1-2.7 1.8-3z\"\n  },\n  {\n    id: \"MA\",\n    shape:\n      \"M965.2 348.4l-2.3-.1-5.5-1.4-5 .4-3.1-2.7h-3.9l-1.8 3.9-3.7 6.7-4 2.6-5.4 2.9-3.5 4.3-.9 3.4-2.1 5.4 1.1 7.9-4.7 5.3-2.7 1.7-4.4 4.4-5.1.7-2.8 2.4-.1.1-3.6 6.5-3.7 2.3-2.1 4-.2 3.3-1.6 3.8-1.9 1-3.1 4-2 4.5.3 2.2-1.9 3.3-2.2 1.7-.3 3h.1l12.4-.5.7-2.3 2.3-2.9 2-8.8 7.8-6.8 2.8-8.1 1.7-.4 1.9-5 4.6-.7 1.9.9h2.5l1.8-1.5 3.4-.2-.1-3.4h.8l.1-7.5 8.9-4.7 5.4-1 4.4-1.7 2.1-3.2 6.3-2.5.3-4.7 3.1-.5 2.5-2.4 7-1 1-2.5-1.4-1.4-1.8-6.7-.3-3.9-2-4.1z\"\n  },\n  {\n    id: \"MD\",\n    shape:\n      \"M1118.5 283.3l1.2-.7.5-2.1 1.1-2-.5-1.1 1-.5.6.9 3 .2 1.2-.5-1-.6.2-1-2-1.5-1.1-2.6-1.9-1.1v-2.1l-2.5-1.6-2-.3-3.9-1.9-3.2.6-1.1.9 1.6.6 1.8 1.9 1.9 2.6 3.4 3.7.6 2.7-.2 2.7 1.3 2.8z\"\n  },\n  {\n    id: \"ME\",\n    shape:\n      \"M1080 299.8l.4-.6-2-1.2-1.8-.7-.8-.8-1.5-1.1-.9.6-1.5 1.4-.4 3.4-.5 1 2.3 1.2 1.6 2.1 1.1.4-.5-1.9 2-3.1.4 1.2 1.3-.5.8-1.4z\"\n  },\n  {\n    id: \"MG\",\n    shape:\n      \"M1255.7 658.4l-1.1-4.2-1.4-2.7-1.8-2.7-2 2.8-.3 3.8-3.3 4.5-2.3-.8.6 2.7-1.8 3.2-4.8 3.9-3.4 3.7h-2.4l-2.2 1.2-3.1 1.3-2.8.2-1 4.1-2.2 3.5.1 5.9.8 4 1.1 3-.8 4.1-2.9 4.8-.2 2.1-2.6 1.1-1.3 4.6.2 4.6 1.6 5-.1 5.7 1.2 3.3 4.2 2.3 3 1.7 5-2.7 4.6-1.5 3.1-7.4 2.8-8.9 4.3-12 3.3-8.8 2.7-7.4.8-5.4 1.6-1.5.7-2.7-.8-4.7 1.2-1.9 1.6 3.8 1.1-1.9.8-3.1-1.3-2.9-.5-7.7z\"\n  },\n  {\n    id: \"MK\",\n    shape:\n      \"M1094 304.8l-2.8-2-2.4.1-1.7.4-1.1.2-2.9 1-.1 1.2h-.7l-.4 2.1.9 2.6 2.3 1.6 3.3-.6 1.9-1.3 2.8.1.7-1.1 1-.2-.8-4.1z\"\n  },\n  {\n    id: \"ML\",\n    shape:\n      \"M1000.3 450.3l-6.1.6-.1-4-2.6-1.1-3.4-1.8-1.3-3-18.6-13.8-18.4-13.9-8.4.1 2.4 27.4 2.4 27.5 1 .8-1.3 4.4-22.3.1-.9 1.4-2.1-.4-3.2 1.3-3.8-1.8-1.8.2-1 3.7-1.9 1.2.2 3.9 1.1 3.7 2.1 1.8.4 2.4-.3 2 .3 2.3h.9l1.5-.8.9.2 1.5 1.6 2.4.5 1.6-1.4 1.8-.8 1.3-.9 1.1.2 1.3 1.4.6 1.7 2.3 2.7-1.2 1.6-.2 2.1 1.2-.6.7.7-.3 1.9 1.7 1.8.7-.6 1.6 1 4.3.1 1-1.9 1 .1 1.6-.7.9 2.7 1.3-.8 2.3-.9-.4-3.7 1.6-2.7-.2-2.2 4.5-5.2.8-4.4 1.6-1.6 2.7.9 2.3-1.3.8-1.6 4.3-2.9 1.1-2 5.2-2.6 3-.9 1.4 1.2h3.6l3.6-.3 2-2.2 7.6-.6 4.9-1 .5-3.9 3-4.3-.1-14.6z\"\n  },\n  {\n    id: \"MM\",\n    shape:\n      \"M1533.9 435.8l-.6-2.6-3.8 1.8-2.5-1.2-4.5-2.4.8-5.2-3.7-1.3-2.3-5.8-5.6 1-.7-7.5 4.1-5.3-.8-5.3-1.3-4.9-2.7-1.5-2.7-3.7-3 .4.9 2.4-1.6 1.2 1.3 3.9-4.1-1.1-6.1 4.4.9 3.6-2.1 5.4.3 3.1-1.5 5.2-4.6-1.4.9 6.6-.9 2.1.9 2.7-2.4 1.5.5 4.6-2.1-1 1.1 5.1 4.6 5.2 3.4.9-.4 2.2 5.4 7.4 1.9 5.9-.9 7.9 3.6 1.5 3.2.6 5.8-4.6 3.2-3.1 3.1 5.2 2 8.1 2.6 7.6 2.6 3.3.2 6.9 2.2 3.8-1.3 4.8.9 4.8 2.2-6.6 2.6-5.9-2.8-5.8-.2-3-1-3.5-4.2-5.1-1.7-3.2 1.7-1.1 1.4-5.6-2.9-4.2-4.1-4.6-3.5-5.6 2.2-1.1 1.5-6.9 3.9-.3 2.8-2.8 3-1.4.8-2.4 4.1-4.1z\"\n  },\n  {\n    id: \"MN\",\n    shape:\n      \"M1473.7 252.1l-3.7-4.6-6.6-1.5-4.8-.8-6.9-2.5-1.3 6.4 4 3.6-2.4 4.3-7.9-1.6-5-.2-4.7-2.9-5.1-.1-5.3-1.9-5.9 2.9-6.6 5.4-4.7 1 3.3 4.4 5.7 3.3 8.1 2.3 5.8 5 1.3 7.3 3 2.7 6.4 1 7.2.9 7.9 3.8 3.4.7 4.9 5.7 4.7 3.6 5.5-.1 11.2 1.3 6.4-.8 5.5.9 9.3 3.8 6.2-.1 3.2 2 4.4-3.3 7.2-2.2 7.5-.2 4.9-2.2 1.9-3.3 2.5-2-1.9-2.1-2.9-2.3.4-4 3.2.5 5.9 1.3 3.1-3.3 6.3-2.4 1.4-4.1 2.4-1.8 6.8-.8 4.3.7-.7-2.2-7.2-4.3-5.1-2-2.5 2.3-5.4-1-2.4.8-2.7-2.6-.3-6.2-.6-4.6-5.5.5-3.9-2.1-3.3-.7-4.5 4.4-5.8 1-3.6 1.6-6.7-1h-4.5l-4.9-3.1-6.5-3-5.4-.8-5.7.8-3.9 1.1-8.4-2.6z\"\n  },\n  {\n    id: \"MQ\",\n    shape:\n      \"M638 479.9l-.2-.7-.1-.2-.2-.3.1-.3v-.1h-.2l-.3-.5-.6-.3h-.3l-.2.2v.3l.3.9.2.2.5.2-.4.4v.1l.1.3h.9l.2.3.1-.1.1-.4z\"\n  },\n  {\n    id: \"MR\",\n    shape:\n      \"M949.8 413.3l-20.3-15.5-.2 9.7-17.9-.3-.2 16.3-5.2.5-1.4 3.3.9 9.2-21.6-.1-1.2 2.2 2.8 2.7 1.4 3-.7 3.2.6 3.2.5 6.3-.8 5.9-1.7 3.2.4 3.4 2-2 2.7.5 2.8-1.4h3.1l2.6 1.8 3.7 1.7 3.2 4.7 3.6 4.4 1.9-1.2 1-3.7 1.8-.2 3.8 1.8 3.2-1.3 2.1.4.9-1.4 22.3-.1 1.3-4.4-1-.8-2.4-27.5-2.4-27.4 8.4-.1z\"\n  },\n  {\n    id: \"MS\",\n    shape: \"M631.8 465.7l-.1-.5h-.1l-.2.4v.3l.3.1.1-.3z\"\n  },\n  {\n    id: \"MT\",\n    shape:\n      \"M1053.6 344l-.2-.2-.5-.5-.5-.1.1.6.4.4h.5l.2-.2zm-1.4-1.2v-.2l-.3-.1-.4.1.1.1.3.2.3-.1z\"\n  },\n  {\n    id: \"MU\",\n    shape:\n      \"M1294.7 702.5l.3-.3.2-.4.3-.3.1-.7-.2-.8-.4-.7-.5.1-.3.4-.2.5-.5.3-.1.3-.2.7-.1.4-.2.1v.2l.3.3.8.1.7-.2z\"\n  },\n  {\n    id: \"MV\",\n    shape:\n      \"M1389.1 551.6l.1-.1v-.2l-.1-.1h-.1l-.1.2v.2h.2zm.3-5.9l.1-.2v-.4l-.1.1-.1.2v.1l-.1.1v.1h.2z\"\n  },\n  {\n    id: \"MW\",\n    shape:\n      \"M1169.2 661.5l.1-2.3-1.2-1.9.1-2.8-1.5-4.7 1.7-3.5-.1-7.7-1.9-4.1.2-.7-1.1-1.7-5.4-1.2 2.6 2.8 1.2 5.4-1 1.8-1.2 5.1.9 5.3-1.8 2.2-1.9 5.9 2.9 1.7 3 3 1.6-.6 2.1 1.6.3 2.6-1.3 2.9.2 4.5 3.4 4 1.9-4.5 2.5-1.3-.1-8.2-2.2-4.6-1.9-2h-.3v.8l1.1.3 1 3.4-.2.8-1.9-2.5-1 1.6-.8-1.4z\"\n  },\n  {\n    id: \"MX\",\n    shape:\n      \"M444.4 407.8l-3.6-1.4-3.9-2-.8-3-.2-4.5-2.4-3.6-1-3.7-1.6-4.4-3.1-2.5-4.4.1-4.8 5-4-1.9-2.2-1.9-.4-3.5-.8-3.3-2.4-2.8-2.1-2-1.3-2.2h-9.3l-.8 2.6h-15l-10.7-4.4-7.1-3.1 1-1.3-7 .7-6.3.5.2 5.7.7 5.1.7 4.1.8 4 2.6 1.8 2.9 4.5-1 2.9-2.7 2.3-2.1-.3-.6.5 2.3 3.7 2.9 1.5 1 1.7.9-.9 3.1 2.9 2.1 2 .1 3.4-1.2 4.7 2.5 1.6 3.3 3.1 2.9 3.6.7 3.9h1l2.7-2.3.4-1.2-1.5-2.8-1.6-2.9-2.6-.2.4-3.4-.9-3-1-2.8-.5-5.9-2.6-3.2-.6-2.3-1.2-1.6v-4.1l-1 .1-.1-2.2-.7-.5-.4-1.4-2.7-4.4-1.1-2.6 1-4.8.1-3 1.8-2.6 2.4 1.7 1.9-.2 3.1 2.5-.9 2.4.4 4.9 1.5 4.7-.4 2 1.7 3.1 2.3 3.4 2.7.5.3 4.4 2.4 3.1 2.5 1.5-1.8 4 .7 1.5 4.1 2.6 1.9 4 4.5 4.9 3.8 6.4 1.3 3.2v2.5l1.4 2.9-.3 2.2-1.6 1.6.3 1.8-1.9.7.8 3.1 2.2 4 5.3 3.6 1.9 2.9 5.4 2 3 .4 1.2 1.7 4.2 3 5.9 3 4 .9 4.8 2.9 4 1.2 3.7 1.7 2.9-.7 4.8-2.4 3.1-.4 4.4 1.6 2.6 2.1 5.5 6.9.4-1.9.8-1.5-.7-1.2 3.3-5.2h7.1l.4-2.1-.8-.4-.5-1.4-1.9-1.5-1.8-2.1h2.6l.4-3.6h5.2l5.1.1.1-1 .7-.3.9.8 2.5-3.9h1l1.2-.1 1.2 1.6 2-5 1.2-2.7-.9-1.1 1.8-3.9 3.5-3.8.6-3.1-1.2-1.3-3.4.5-4.8-.2-6 1.5-4 1.7-1.2 1.8-1.2 5.4-1.8 3.7-3.9 2.6-3.6 1.1-4.3 1.1-4.3.6-5.1 1.8-1.9-2.6-5.6-1.7-1.8-3.2-.7-3.6-3-4.7-.4-5-1.2-3.1-.5-3.4 1.1-3.1 1.8-8.6 1.8-4.5 3.1-5.6-2.1.2z\"\n  },\n  {\n    id: \"MY\",\n    shape:\n      \"M1543.6 532.7l-4.7-2.8-.9 1.1 1.4 2.7-.4 4.7 2.1 3.4 1 5.3 3.4 4.3.8 3.2 6.7 5 5.4 4.8 4-.5.1-2.1-2.3-5.6-2.1-1.8-.5-3.8-.6-2.1.5-2.9-.5-4.3-2.6-4.3-3.5-3.8-1.3-.6-1.7 2.6-3.7.8-.6-3.3zm99 11l-1.2-3.1 3.8-.4.3-2.4-4.8-2-3.8-1.7-.4-2.8-3.1-3.2h-2.3l-2.5 5-4.1 4.4-.1 3.1-.1 4.1-2.7-.2-1.1 2.2-2.7-3.3-2.6 4-3.8 5-6.7 1.4-2.4 1.2-.9 5.4-4.4 1.2-4.1-2.2 1 4.3 3.9 3.5 3.6-1.2 3.6.4 3.2-3.2 2.7-.6 5.4 1.8 4.5-1.3 2.7-8.9 2-2.2 1.7-7.2h6.4l5 1 4-2.1z\"\n  },\n  {\n    id: \"MZ\",\n    shape:\n      \"M1203 640.7l-.8-2.9-4.6 3.7-6.2 2.5-3.3-.1-2.1 1.9-3.9.1-1.4.8-6.7-1.8-2.1.3-1.6 6 .7 7.3h.3l1.9 2 2.2 4.6.1 8.2-2.5 1.3-1.9 4.5-3.4-4-.2-4.5 1.3-2.9-.3-2.6-2.1-1.6-1.6.6-3-3-17.1 5.2.3 4.5.3 2.4 4.6-.1 2.6 1.3 1.1 1.6 2.6.5 2.8 2-.3 8.1-1.3 4.4-.5 4.7.8 1.9-.8 3.7-.9.6-1.6 4.6-6.2 7.2 2.2 9 1.1 4.5-1.4 7.1.4 2.3.6 2.9.3 2.8h4.1l.7-3.3-1.4-.5-.3-2.6 2.6-2.4 6.8-3.4 4.6-2.2 2.5-2.3.9-2.6-1.2-1.1 1.1-3 .5-6.2-1 .3v-1.9l-.8-3.7-2.4-4.8.7-4.6 2.3-1.4 4.1-4.6 2.2-1.1 6.7-6.8 6.4-3.1 5.2-2.5 3.7-3.9 2.4-4.4 1.9-4.6-.9-3.1.2-9.9-.4-5.6.4-6.3z\"\n  },\n  {\n    id: \"NA\",\n    shape:\n      \"M1105.4 683.7l-10.3 2.5-13.4-.9-3.7-3-22.5.3-.9.4-3.2-2.9-3.6-.1-3.3 1-2.7 1.2.2 4.9 4.4 6.2 1.1 4 2.8 7.7 2.7 5.2 2.1 2.6.6 3.5v7.6l1.6 9.8 1.2 4.6 1 6.2 1.9 4.7 3.9 4.8 2.7-3.2 2.1 1.8.8 2.7 2.4.5 3.3 1.2 2.9-.5 5-3.2 1.1-23.6.6-18.5 5.4-.2.9-22.7 4.1-.2 8.6-2.2 2 2.6 3.7-2.5h1.6l3.2-1.5v-.5l-2.1-1.4-3.6-.4-4.6 1.5z\"\n  },\n  {\n    id: \"NC\",\n    shape:\n      \"M1897.3 716.1v-.3l-.4-.2-.2.5v.1l.2.1h.2l.2-.2zm4.6-7.6l-.1-.1v-.3l.1-.2-.4.2-.6.2.1.8-.1.4.3.1.1.3h.2l.7-.2.3-1.1h-.4l-.2-.1zm-3-1.7l.3-.5.1-.2-.2-.7-.3-.3.3-1-.1-.2-.4-.2-.9.3-.1.2.5.1.2.2-.5.7-.5.1.1.5.2.4.7.2.3.4h.3zm-3.9-2.9l.3-.3.3-.4-.1-.1v-.3l.2-.4.3-.1-.2-.2-.2-.1v.3l-.3.7-.1.3-.5.6h.3zm-12.3-2.9l-.6-.7-.1.2-.1.4v.3l.3.2.1.2-.1.5v.4l.6.9.1.7.3.6.5.5.4.5.8 1.4.2.5.4.3 1 1.2.4.4.4.2.9.7.6.3.3.5.6.3.8.4.1.2v.3l.1.3.5.4.6.3.1.2.1.2.3-.1.3.1.9.7.4-.1h.3l.5-.2.3-.4-.1-1.1-.5-.5-.7-.4-.4-.5-.4-.5-.8-1-1.1-1-.5-.2-.3-.4-.3-.1-.2-.3-.5-.3-.3-.6-.6-.6-.1-.3.1-.3-.1-.3-.4-.3-.2-.5-.2-.3-.4-.2-.7-.4-1.6-1.9-.7-.6-.7.2-.6-.4zm-22-6l.2-.4.1-.8-.2.4-.2 1 .1-.2z\"\n  },\n  {\n    id: \"NE\",\n    shape:\n      \"M1051.3 425.6l-8.8-2.8-18.6 12.2-15.8 12.5-7.8 2.8.1 14.6-3 4.3-.5 3.9-4.9 1-7.6.6-2 2.2-3.6.3-.5 3.1.8 2.9 3.1 4.1.2 3.1 6.4 1.4-.1 4.4 1.9-1.9h2l4.3 3.7.3-5.7 1.6-2.6.8-3.6 1.4-1.4 6-.8 5.6 2.4 2.1 2.4 2.9.1 2.6-1.5 6.8 3.3 2.8-.2 3.3-2.7 3.3.2 1.6-.9 3 .4 4.3 1.8 4.3-3.5 1.3.2 3.9 7 1-.2.2-2 1.6-.4.5-2.9-3.6-.2v-4.1l-2.4-2.3 2.3-8.4 6.9-6 .2-8.3 1.8-12.9 1.1-2.7-2.3-2.2-.2-2.1-2-1.6-1.6-9.9-3.9 2.4-3.1-3.5z\"\n  },\n  {\n    id: \"NG\",\n    shape:\n      \"M1055.8 492.7l-1 .2-3.9-7-1.3-.2-4.3 3.5-4.3-1.8-3-.4-1.6.9-3.3-.2-3.3 2.7-2.8.2-6.8-3.3-2.6 1.5-2.9-.1-2.1-2.4-5.6-2.4-6 .8-1.4 1.4-.8 3.6-1.6 2.6-.3 5.7-.2 2.1 1.2 3.8-1.1 2.5.6 1.7-2.7 4-1.7 1.9-1 4 .1 4.1-.3 10.2h9.2l3.9 4.2 1.9 4.6 3 3.9 4.5.2 2.2-1.4 2.1.3 5.8-2.3 1.4-4.5 2.7-6.1 1.6-.1 3.3-3.7 2.1-.1 3.2 2.6 3.9-2.2.5-2.6 1.2-2.6.8-3.2 3-2.6 1.1-4.5 1.2-1.4.7-3.3 1.5-4 4.6-5 .3-2.1.6-1.1-2.3-2.6z\"\n  },\n  {\n    id: \"NI\",\n    shape:\n      \"M514.1 476.8l-1.9-.2-.9.9-2 .8h-1.4l-1.3.8-1.1-.3-.9-.9-.6.2-.8 1.5-.5-.1-.3 1.3-2.1 1.8-1.1.7-.6.8-1.5-1.3-1.4 1.7h-1.2l-1.3.2-.2 3.1h-.8l-.8 1.5-1.8.3-.4.4-.9-1-.7 1 2.6 2.9 2.2 2 1 2.1 2.5 2.6 1.8 2 .9-.8 3.5 1.7 1.4-.8 1.7.5.8 1.3 1.7.4 1.4-1.3-.8-1.1-.1-1.7 1.2-1.6-.2-1.7.7-2.7.9-.7.1-2.8-.2-1.7.4-2.8.9-2.5 1.4-2.2-.3-2.3.4-1.4.6-.6z\"\n  },\n  {\n    id: \"NL\",\n    shape:\n      \"M1005.5 243.9h2.9l1.1-2.3 1-5.6-1-2-3.9-.2-6.5 2.6-3.9 8.9-2.5 1.7 3.6.5 4.4-1.3 3.1 2.7 2.8 1.4-1.1-6.4z\"\n  },\n  {\n    id: \"NO\",\n    shape:\n      \"M1088.8 133.1l-6.9 1.1-7.3-.3-5.1 4.4-6.7-.3-8.5 2.3-10.1 6.8-6.4 4-8.8 10.7-7.1 7.8-8.1 5.8-11.2 4.8-3.9 3.6 1.9 13.4 1.9 6.3 6.4 3 6-1.4 8.5-6.8 3.3 3.6 1.7-3.3 3.4-4 .9-6.9-3.1-2.9-1-7.6 2.3-5.3 4.3.1 1.3-2.2-1.8-1.9 5.7-7.9 3.4-6.1 2.2-3.9 4 .1.6-3.1 7.9.9v-3.5l2.5-.3 2.1-1.4 5.1 2.9 5.3-.3 4.7 1.3 3.4-2.4 1.1-3.9 5.8-1.8 5.7 2.1-.8 3.8 3.2-.5 6.4-2.2-5.4-3.3 4.8-1.4-13.6-3.9zm-22.6-33.3l-5.6-1-1.9-1.7-7.2.9 2.6 1.5-2.2 1.2 6.7 1.1 7.6-2zm-25.4-8.3l-4.8-1.6-5.1.2-1 1.5h-5l-2.2-1.5-9.3 1.6 3.2 3.5 7.6 3.8 5.7 1.4-3 1.7 8.4 2.9 4.4-.2.9-3.9 3-.9 1.2-3.4 8.5-1.8-12.5-3.3zm24.2-3.1l-9.1-1-3.2 1.2-5.3-1-10.4 1.2 4.3 2h5.1l.9 1.3 10.6.7 10.1-.5 4.3-2.4-7.3-1.5z\"\n  },\n  {\n    id: \"NP\",\n    shape:\n      \"M1455.2 394.8l-6.5-.6-6.4-1.5-5-2.8-4.5-1.2-2.5-3.1-3.2-.9-6.4-4.1-4.7-2-1.9 1.5-2.8 2.9-.9 5.9 5.7 2.5 5.8 3.1 7.7 3.5 7.6.9 3.8 3.2 4.3.6 6.8 1.5 4.6-.1.1-2.5-1.5-4.1-.1-2.7z\"\n  },\n  {\n    id: \"NR\",\n    shape: \"M1915 575.5v-.2h-.2l-.1.2.1.1.1.1.1-.2z\"\n  },\n  {\n    id: \"NZ\",\n    shape:\n      \"M1868.6 832.8l.9-2.6-5.8 2.9-3.4 3.4-3.2 1.6-5.9 4.6-5.6 3.2-7 3.2-5.5 2.4-4.3 1.1-11.3 6.1-6.4 4.6-1.1 2.3 5.1.4 1.5 2.1 4.5.1 4-1.8 6.3-2.8 8.1-6.2 4.7-4.1 6.2-2.3 4-.1.6-2.9 4.6-2.5 7-4.5 4.2-2.9 2.1-2.6.5-2.6-5.6 2.5.8-2.6zm28.8-30.5l1.9-5.7-3.1-1.7-.8-3.6-2.3.5-.4 4.6.8 5.7.9 2.7-.9 1.1-.6 4.4-2.4 4.1-4.2 5-5.3 2.2-1.7 2.4 3.7 2.5-.8 3.5-6.9 5.1 1.4.9-.4 1.6 5.9-2.5 5.9-4.2 4.5-3.4 1.6-1.2 1.5-2.7 2.8-2 3.8.2 4.2-3.8 5.1-5.7-2.1-.8-4.6 2.5-3.2-.5-2.9-2.1 2.3-4.9-1.2-1.8-2.9 4.4.4-6.8z\"\n  },\n  {\n    id: \"OM\",\n    shape:\n      \"M1301 437.8l2.1-2 .8-1.8 1.6-3.8-.1-1.4-2.1-.8-1.6-2.1-2.9-3.7-3.3-1.1-4.1-.9-3.3-2.3-2.9-4.3h-2.8l-.1 4.2 1.1.8-2.4 1.3.3 2.6-1.4 2.6.1 2.6 2.9 4.5-2.6 12.7-16.1 6.4 5.2 10.5 2.1 4.4 2.5-.3 3.6-2.2 3.1.6 2.5-1.8-.2-2.5 2.1-1.6h3.4l1.2-1.3.2-3.1 3.3-2.4h2.6l.4-.8-1-4.2.6-3.2 1-1.5 2.5.3 1.7-4.4zm-16.6-30.4l.2-2.6-.7-.6-1.3 2.2 1.3 2.2.5-1.2z\"\n  },\n  {\n    id: \"PA\",\n    shape:\n      \"M543.5 517l-2-1.8-1.7-1.9-2.5-1.1-3.1-.2.3-.6-3.1-.4-2 1.9-3.5 1.3-2.5 1.6-2.7.5-1.5-1.6-.5.5-2.3-.3.2-1.3-1.9-2.3-2.2.6-.1 2.5 1.1 1-.8.7.1 1.2-.5 1.3-.4 1.2.6 1 .3-1.4h2.4l1.4.7 2.3.5 1 2.5 1.8.4.8-1.1.8 3.8 2.6-.3.9-.9 1.5-.9-2.5-3.4.6-1.3 1.3-.3 2.3-1.6 1.2-2.2 2.5-.4 2.7 1.8 1 2.1 1.4.4-1.5 1.7 1 3.5 1.8 1.8.9-3.1 1.8.5 1.1-1.9-1.1-3.8.7-.9z\"\n  },\n  {\n    id: \"PE\",\n    shape:\n      \"M584.3 599.5l-2.9-3.4-1.7-.1 3.5-6.5-4.4-3-3.3.6-2.1-1.1-3 1.7-4.2-.8-3.4-6.7-2.7-1.7-1.8-3-3.7-3-1.5.6.8 4.9-1.7 4.1-6 6.7-6.7 2.5-3.3 5.5-.9 4.3-3.1 2.6-2.5-3.2-2.3-.7-2.3.5-.2-2.3 1.5-1.5-.7-2.7-4.4 4-1.6 4.5 3 6.1-1.7 2.8 4.1 2.6 4.5 4.1 2 4.7 2.4 2.9 6 12.7 6.2 11.7 5.4 8.4-.8 1.8 2.8 5.3 4.6 3.9 10.7 6.9 11.6 6.4.7 2.6 5.9 3.7 2.7-1.6 1.2-3.3 2.8-6.9-2.8-5.3 1.1-2.1-1.2-2.4 1.9-3.2-.3-5.4-.1-4.5 1.1-2.1-5.5-10.3-3 1.1-2.6-.7-.2-9.7-4.4 3.8-4.9-.2-2.3-3.4-3.7-.3 1-2.8-3.3-3.8-2.6-5.8 1.5-1.1-.1-2.7 3.3-1.9-.7-3.4 1.3-2.2.4-3 6.2-4.3 4.6-1.2.7-1 5.1.3z\"\n  },\n  {\n    id: \"PF\",\n    shape:\n      \"M213.2 704.9l-.1-.3-.2-.3-.1.1.1.1.2.3v.2l.1-.1zm9.3-14.7l-.2-.2-.4-.2-.2-.1-.2-.1-.1.1.1.1h.1l.3.2.3.1.2.1v.1l.1-.1zm-24.5-1.1l-.6-.3.1.2.4.2.2.1-.1-.2zm20.5-.2l-.4-.5h-.3l.7.6v-.1zm-21.6-1l-.4-.4-.2-.3-.3-.1.1.1.4.4.3.4.2.1-.1-.2zm-.3-2.1l-.1-.1v-.3l.2-.3.6-.4v-.1l-.2.1-.4.2-.2.2-.1.2-.1.3.1.2.1.1h.2l-.1-.1zm-47.4-1.1l-.2-.6-.3-.5-.8-.1-.5.2-.1.2.1.4.5.7.5.1.8-.1.4.6.2.1.4.1.1-.3-.2-.5-.9-.3zm-2.9-.9l.1-.4-.2-.1h-.5v.2l.1.2.1.1.3.2.1-.2zm-9.7-4.3h.2l-.4-.6-.3-.2V679.5l.3.1.2-.1zm43.9-1.6h-.6l.5.1.4.2-.3-.3zm-.7.1l-.3-.1-.3-.2h-.3l.7.3h.2zm-43.8.1l.1-.2-.1-.1-.4-.2.1.3v.2l.2.1.1-.1zm32.8-2l-.3-.4-.2-.3-.2-.4-.4-.5.1.3.1.2.2.2.2.4.1.2.3.4h.1v-.1zm16.2-1.5l.1-.5h-.2v.5h.1zm-14.4-1.6l-.6-.6h-.1l.1.2.5.5.1.2v-.3zm30.8-33.9l.1-.2v-.2l-.1-.1-.3-.1.1.7.2-.1zm-2.7-3.7l-.1-.2h-.2l-.1.1v.5l.4-.4zm.1-1.6l-.8.5.2.4.4.1.2-.2.8-.1.3-.4-.3.1-.8-.4zm-6.1-1.7l.2-.5-.2-.1-.4.2v.2l.3.4.1-.2zm2.6-3.1l.3-.1v-.1l-.2-.2-.3-.1-.1.1-.1.2.1.3.3-.1zm-2.9-.1l.1-.3v-.2l-.1-.2-.9-.2-.1.1v.4l.2.5h.3l.5-.1z\"\n  },\n  {\n    id: \"PG\",\n    shape:\n      \"M1850.7 615.6l.9-1.8-2.4-2.2-2.5-4-1.6-1.5-.5-1.9-.8.7.9 4.8 2.2 4 2.2 2.5 1.6-.6zm-21.2-8.6l2.1-3.9.4-3.5-1.1-1-3.4.1.4 3.7-3.3 2.3-1.7 2.2-3.2.5-.4-3.4-.8.1-1 3.1-3.1.5-5-.9-.6 1.9 3.1 1.8 4.5 1.9h2.9l3-1.5 3.2-1.6 1-1.8 3-.5zm-27.8 12.2l-.9-4.3 5.2-.7-1.1-3.3-9.1-4-.6-3.7-2.9-3.2-3.7-3.3-10.2-3.6-9.6-4.4-1 20.7-1.5 20.8 5.7.2 3.1 1.1 4.6-2.2-.3-4.7 3.6-2.1 4.9-1.8 7 2.8 2.4 5.6 2.9 3.5 3.9 4 5.5 1 4.8.7 1.1 1.6 3.8-.4.8-1.8-5.6-2.7 1.8-1.2-4.2-1.1.5-2.8-3.2.2-3-6.8-4.7-4.1zm34.7-18.4l-.5-3.3-2-2.1-2.1-2.6-2.3-1.5-1.9-1.4-2.9-1.8-1.6 1.5 3.9 1.9 3.1 2.7 2.4 2.1 1.2 2.4.8 3.8 1.9-1.7z\"\n  },\n  {\n    id: \"PH\",\n    shape:\n      \"M1684.6 518.6l-.6-2.3-.8-3.2-4.8-3 .8 4.9-3.9.2-.7 2.8-4.2 1.7-2.2-2.8-2.8 2.4-3.4 1.7-1.9 5.4 1.1 1.9 3.9-3.6 2.7.3 1.5-2.7 3.8 3-1.5 3.1 1.9 4.6 6.8 3.7 1.4-3-2.1-4.7 2.4-3.2 2.5 6.4 1.5-5.8-.6-3.5-.8-4.3zm-14.5-11.8v-6.1l-3.6 6.1.5-4.2-3 .3-.3 4-1.2 1.8-1 1.7 3.8 4.4 1.6-1.9 1.4-4 1.8-2.1zm-30.1 6.1l2.6-4.4 3.4-3.5-1.5-5.2-2.4 6.3-2.9 4.4-3.8 4-2.4 4.4 7-6zm17.4-16.4l1.2 3-.1 3.3.5 2.9 3.3-1.9 2.4-2.7-.2-2.6h-3.6l-3.5-2zm20-1.7l-1.8-2.4-5.4-.1 4 4.8.3 2.4-3.3-.5 1.2 3.9 1.7.3.7 4.5 2.5-1.4-1.7-4-.4-2.1 4.5 1.7-2.3-7.1zm-22.9-5.8l-2.2-2.3-4.8-.2 3.4 4.8 2.8 3.2.8-5.5zm-6.4-34.6h-3.3l-.9 5.8 1.1 9.9-2.6-2 1.2 6 1.2 2.8 3.3 3.7.4-2.3 1.8 1.4-1.5 1.7.1 2.6 2.9 1.4 5-.9 4 3.8 1.1-2.4 2.5 3.4 4.8 3.1.2-2.9-2-1.6.1-3.4-7.5-3.6-2.3.8-3.1-.7-2-5.1.1-5.1 3-2.1.6-5.3-2.7-4.6.4-2.6-.7-1.6-1.5 1.6-3.7-1.8z\"\n  },\n  {\n    id: \"PK\",\n    shape:\n      \"M1388.3 346.3l-9.4-2.6-2.9-5-4.7-3-2.8.7-2.4 1.2-5.8.8-5.3 1.3-2.4 2.8 1.9 2.8 1.4 3.2-2 2.7.8 2.5-.9 2.3-5.1-.2 3 4.2-3 1.6-1.5 3.8 1.1 3.8-1.7 1.8-2.1-.6-4 .9-.2 1.7h-4l-2.3 3.6.8 5.4-6.6 2.6-3.8-.5-.9 1.4-3.3-.8-5.3.9-9.6-3.2 3.2 3.3 2.8 3.9 5.6 2.7 1 5.7 2.7 1 .9 2.9-7.4 3.3-1.2 7.4 7.6-.9 8.9-.1 9.9-1.2 4.9 4.8 2.1 4.6 4.2 1.6 3.2-4.2h12l-1.8-5.5-3.5-3.2-1.3-4.9-4-2.9 4.9-6.6 6.4.5 4.5-6.7 2.1-6.5 3.9-6.3-1-4.5 3.7-3.7-5-3.1-2.9-4.3-3.2-5.6 1.9-2.8 8.5 1.6 5.7-1 3.7-5.4z\"\n  },\n  {\n    id: \"PL\",\n    shape:\n      \"M1069.4 228.3l-4.6-.1-.5-1.4-4.8-1.1-5.7 2.1-7.1 2.8-3.1 1.7 1.4 3.1-1.2 1.6 2 2.2 1.4 3.3-.1 2.1 2.3 3.9 2.4 1.9 3.7.6-.1 1.7 2.7 1.2.6-1.5 3.4.6.7 2 3.6.3 2.6 3.1.3.4 1.9-.9 2.7 2.2 2.8-1.3 2.4.6 3.4-.8 4.9 2.3 1.1.4-1.6-2.8 3.8-5.1 2.3-.7.3-1.8-3.1-5.3-.5-2.7-1.9-2.9 2.7-1.2-.3-2.4-1.7-2.3-.6-2.7-1.4-1.9-2.5-.6-8.7.1-5.9-.7z\"\n  },\n  {\n    id: \"PN\",\n    shape: \"M274.2 727.4v-.2l-.1-.2-.2-.1-.1.1.1.2.2.2.1.1v-.1z\"\n  },\n  {\n    id: \"PR\",\n    shape:\n      \"M600.8 457.3v-.1h.1v-.1l.1-.1v-.1h-.5v.2l.2.1v.1h.1zm13.6-.3l.7-.2v-.1l-.4-.1h-.6l-.5.2.1.2h.7zm-3.7-2.2l-.1-.2h-.2l-3.5-.1-1.3-.2-.3.1-.3.1-.1.4-.2.2-.3.2.1.3.1.2.2.4-.1.5-.2 1 .3.2.7-.1.3.1.3.1.4-.1.4-.2.9.1.5-.1.6.3.4-.1.2.1H610.4l.9-.2.8-.5.3-.5.4-.3.6-.4v-.9l-.7-.1-.6-.3-1.1-.1h-.1l.1.2h-.1l-.2-.1z\"\n  },\n  {\n    id: \"PS\",\n    shape: \"M1166.9 366.1l-2-.9-.7 4.3 1.4.7-1.2.8-.1 1.7 2.4-.8.6-1.9-.4-3.9z\"\n  },\n  {\n    id: \"PT\",\n    shape:\n      \"M937.6 335.9l-.4-2.1 2-2.5.8-1.7-1.8-1.9 1.6-4.3-2-3.8 2.2-.5.3-3 .9-.9.2-4.9 2.4-1.7-1.3-3.1-3-.2-.9.8h-3l-1.2-3.1-2.1.9-1.9 1.6.1 2.1.9 2.2.1 2.7-1.3 3.8-.4 2.5-2.2 2.3-.6 4.2 1.2 2.4 2.3.6.4 4-1 5.1 2.8-.7 2.7.9 2.2-1.7z\"\n  },\n  {\n    id: \"PY\",\n    shape:\n      \"M655.7 700.5l-.3-1.9-5.4-3.3-5.1-.1-9.5 1.9-2.1 5.6.2 3.4-1.5 7.6 11.2 10.4 4.6 1 7.2 4.7 5.9 2.5 1.1 2.8-4.2 9.6 5.7 1.8 6.2 1 4.2-1.1 4.3-4.8.3-5.7.7-3.6.3-3.8-.3-3.5-2.1-1.2-2 1.1-2-.3-.9-2.5-1-5.8-1.2-1.9-3.9-1.7-2.1 1.2-6-1.2-.4-8.6-1.9-3.6z\"\n  },\n  {\n    id: \"QA\",\n    shape: \"M1258 415.5l.8-3.8-.5-3.7-1.9-2-1.4.7-1.1 3.3.8 4.7 1.8 1.2 1.5-.4z\"\n  },\n  {\n    id: \"RE\",\n    shape:\n      \"M1284 707.9l.2-.4.1-.8-.4-.8-.4-.7-.4-.2-.8-.1-.7.3-.4.6-.2.3.4 1.1.2.3 1.1.6h.5l.8-.2z\"\n  },\n  {\n    id: \"RO\",\n    shape:\n      \"M1108.1 266.3h-2.1l-1 1.5-3.6.6-1.6.9-2.4-1.5h-3.2l-3.2-.7-1.9 1.3-2.9 1.3-1.9 4.2-2.6 4.3-3.8 1.1 2.9 2.5.8 1.9 3.2 1.5.7 2.5 3.1 1.8 1.4-1.3 1.4.7-1.1 1.1 1 1 1.8 2.6 1.9-.5 4 1 7.5.3 2.3-1.6 5.8-1.4 4 2.2 3 .7.4-7.4 1.6.5 2.3-1.3-.4-1.6-2.4-1.1-2.2 1-2.4-1.1-1.3-2.8.2-2.7-.6-2.7-3.4-3.7-1.9-2.6-1.8-1.9-1.6-.6z\"\n  },\n  {\n    id: \"RS\",\n    shape:\n      \"M1084.8 285.2l-3.2-1.5-.8-1.9-2.9-2.5-3.2-.2-3.7 1.6 1.5 2.4 1.7 1.8-1.7 2.3h1.8l-1 2.7 2.7 2.3-.5 2.9-1.2.3 1.5 1.1.8.8 1.8.7 2 1.2-.4.6 1.2-.5.5-2 .9-.4.8.9 1 .4.8 1 .8.3 1.1 1.1h.8l-.5 1.5-.5.7.2.5 1.7-.4 2.4-.1.7-.9-.6-.7.7-2 1.7-1.9-2.8-2.6-.7-2.3 1.1-1.4-1-1 1.1-1.1-1.4-.7-1.4 1.3-3.1-1.8-.7-2.5z\"\n  },\n  {\n    id: \"RU\",\n    shape:\n      \"M1332.3 95.1l-4.5-4-13.6-4.1-9.4-2.1-6.2.9-5.3 2.9 5.8.8 6.6 3.2 8 1.7 11.5 1.3 7.1-.6zm-178.7-7.3l.9-.6-5.7-.9-2.8.7-1.3 1-1.5-1.2-5.2.1-6.2.8 7.7.1-1.1 1.3 4.4 1 3.6-.7.1-.7 2.9-.3 4.2-.6zm200.5 9.9l-1.5-1.8-12.5-2.6-3-.3-2.2.5 1.2 6 18-1.8zm15.2 6.3l-9.2-.7 3.4-1.2-8.2-1.5-6.1 1.9-1 2 1.5 2.1-6.9-.1-5.3 2.6-4.3-1.1-9.3.5.3 1.3-9.2.7-4.9 2.4-4.2.2-1.2 3.3 5.5 2.6-7.7.7-9.5-.3-5.8 1.1 4.8 5.4 6.9 4.3-9.6-3-7.9.3-5.1 2 4.5 3.8-4.9-1-2.1-5-4.2-2.8-1.8.1 3.6 3.7-4.6 3.5 8.1 4.2.4 5.4 2.9 2.9 4.7.5.4 3.5 4.4 3.1-1.9 2.6.5 2.7-3.7 1.4-.5 2-5.3-.8 3.5-7.8-.5-3.6-6.7-3.3-3.8-7.3-3.7-3.7-3.6-1.6.8-4.2-2.9-2.9-11.3-1.4-2.1 1 .5 4.7-4.3 4.7 1.2 1.7 4.7 4.1.1 2.6 5.3.5.8 1.1 5.8 2.9-1 2.8-18.5-6.1-6.6-1.7-12.8-1.6-1.2 1.7 5.9 3.1-2.7 3.6-6.4-3.2-5 2.2-7.6.1-2.1 1.9-5.3-.6 2.5-3.3-3.2-.2-12.3 4.6-7.6 2.6.4 3.5-6 1.2-4-1.9-1.2-3 5-.7-3.6-3-12.2-1.8 4.3 3.4-.8 3.2 4.7 3.3-1.1 3.8-4.6-1.9-4-.3-8 5.4 4.2 4.1-3.2 1.4-11.4-3.5-2.1 2.1 3.3 2.4.2 2.7-3.8-1.4-6-1.7-1.9-5.8-1-2.6-8-4 2.9-.7 20.1 4.2 6.4-1.5 3.7-2.9-1.6-3.6-4-2.6-17.6-6.1-11.6-1.3-7.6-3.2-3.6 1.8-6.4 2.2-3.2.5.4 3.7 7.2 3.7-2.8 4.1 6.4 6.3-1.7 4.8 4.9 4.1-.9 3.7 7.3 3.9-.9 2.9-3.3 3.3-7.9 7.4 5.3 2.8-4.5 3.2.9 1-2.6 3.4 2.5 5.5-1.6 1.9 2.4 1.4 1 2.8 2.1 3.6 5.2 1.5 1 1.4 2.3-.7 4.8 1.4 1 2.9-.6 1.6 3.7 3.9 2.2 1.1-.1 1.1 3.4 1.1 1.7 1.6-1.6 1.3-3.9-.2-.8.6 1.5 2 2 3.9 1.8.2 1-1.4 1.5.3 4.8-.5 3.8 3.4-.9 1.3.7 1.9 4 .2 2.2 2.7.2 1.2 6.6 2.2 3.5-1 3.6 2.9 2.9-.1 7.6 2 .4 1.9-1.3 3.2 1.8 3.4-.3 2.1-4.7.5-2.2 1.7.4 2.8 4.2-1 .4 1.3-6.8 2.6 3.2 2.4-3.2 5.2-3.4 1 5 3.6 6.2 2.4 7.4 5.1.5-.7 4.5 1.1 7.7 1 7.5 2.9 1.1 1.2 2.9-1 5.1 1.3 2.1 2.5 3.5 1.4 1.5.2 4.3 3.8 2.4.4.5-1.5 2.6-2.5-7.3-7.3-.4-4.1-5.9-5.9 3.5-6.3 4.6-1.1 1.4-3.7-2.8-1-.2-3.2-4.2-4.1-3.6.2-5.3-4.3 1.7-4.7-1.7-1.2 2.1-6.8 6 3.6-.7-4.6 8.1-6.6 7.5-.2 11.9 4.3 6.6 2.4 4.3-2.5 7.6-.2 7.3 3.2.8-1.8 6.9.3.2-3-9.4-4.2 3.6-2.9-1.5-1.7 3.9-1.6-5-4.1 1.4-2.1 16.8-2.1 1.7-1.5 10.8-2.2 3.1-2.5 9 1.3 4.3 6.3 4.3-1.5 7 2.1 1.2 3.3 4.4-.4 9.1-5.7-.8 1.9 8.3 4.7 18.1 15.5 1.1-3.3 8.3 3.6 6.2-1.6 3.2 1.1 4.1 3.6 3.9 1.2 3.3 2.6 6-.9 4.3 3.8 1.7-.5 4.7-1 6.6-5.4 5.9-2.9 5.3 1.9 5.1.1 4.7 2.9 5 .2 7.9 1.6 2.4-4.3-4-3.6 1.3-6.4 6.9 2.5 4.8.8 6.6 1.5 3.7 4.6 8.4 2.6 3.9-1.1 5.7-.8 5.4.8 6.5 3 4.9 3.1h4.5l6.7 1 3.6-1.6 5.8-1 4.5-4.4 3.3.7 3.9 2.1 5.5-.5 7.3 2.3 4.4-3.9-1.9-2.7-.1-6.5 1.2-2-2.5-3.3-3.7-1.5 1.7-3 5.1-1.1 6.2-.2 8.5 1.8 5.9 2.3 7.7 6.1 3.8 2.7 4.4 3.7 6.1 6.1 9.9 1.9 8.9 4.5 6 5.8h7.5l2.6-2.5 6.9-1.8 1.3 5.6-.4 2.3 2.8 6.8.6 6-6.8-1.1-2.9 2.2 4.7 5.3 3.8 7.3-2.5.1 1.9 3.1 1.4 1.1-.4-2 4-4.5 5.1 3 3.2-.1 4.4-3.6 1-3.7 2.1-7.1 1.9-7.2-1.3-4.3 1-9-5.2-9.9-5.5-7.3-1.3-6.2-4.7-5.1-12.7-6.7-5.6-.4-.3 3-5.8-1.3-5.7-3.8-8-.7 4.9-14.1 3.5-11.5 13.1-1.8 14.9 1 2.5-2.8 7.9.8 4.3 4.3 6.4-.6 8.4-1.6-7.7-3.5v-9.8l9.1-1.9 12.1 7.1 3.6-6.4-3.2-4.7 4.7-.5 6.5 8.1-2.4 4.6-.8 6 .3 7.5-5.7 1.3 2.8 2.7-.1 3.6 6.4 8.3 16 13.4 10.5 8.8 5.7 4.3 1.6-5.7-4.5-6.2 5.7-1.5-5.4-6.9 5-3.1-4.7-2.6-3.4-5 4.1-.2-9-8.6-6.7-1.4-2.9-2.4-1.1-5.6-3.1-3.9 7 .8 1.3-2.5 4.7 2.2 6.1-4.6 11.4 4-1.7-2.6 2-3.6 1.5-4 3.1-.7 6.5-4.3 9.8 1.2-.9-1.5-3.8-2.3-4.1-1.6-9.1-4.6-8.1-3 6.1.4 2-2.5-32.9-21.9-9.4-2.3-15.7-2.6-7.9.3-15.2-1.4 1.8 2.3 8.5 3.4-2.5 1.8-14.2-4.8-6.8.6-9.2-1.1-7 .2-3.9 1.1-7.2-1.6-5.1-3.8-6.5-2.2-9.2-.9-14.7 1-16.1-4-7.8-3-40.1-3.4-2.1 2.2 9.3 4.8-7.5-.7-1 1.5-9.7-1.6-5 1.4-9.3-2.4 3 5.5-8.9-2.1-10-4.1-.4-2.2-6-3.3-9.8-2.6h-6.1l-9.3-.9 4.7 3.9-17.2-.8-3.9-2.3-13.3-.9-5.3.8-.1 1.3-5.8-3.2-2.3.9-7.2-1.2-5.6-.7 1.1-1.5 6.6-2.8 2.3-1.5-2.4-2.5-5.5-1.9-11.5-2.3-10.8-.1-1.9 1.2-4.1-2.4zm-162.2 31.6l-9.9-4.3-3.1-4.3 3.3-4.9 2.8-5 8.6-4.7 9.8-2.4 11.3-2.4 1.3-1.5-4.2-1.9-6.6.6-4.9 1.8-11.7.9-10.1 3.1-6.8 2.7 2.5 2.2-6.6 4.4 3.9.7-5.4 4.3 1.6 2.8-3.4 1.1 1.9 2.8 7.9 1.4 2.2 2.3 13.4.7 2.2-.4zm314-24.7l-17.9-2.6-10.2-.2-3.4.9 3.4 3.4 12.4 3.2 4.5-1.2 14.2.2-3-3.7zm25.2 2.3l-11.7-1.3-8.2-.7 1.7 1.6 10.3 2 6.8.4 1.1-2zm-12.5 9.5l-2.5-1.4-8.3-1.9-4.1.5-.8 2 1.1.2 8.8.6h5.8zm162.6 12.3l-6-3.6-1.4 2.2 3.5 1.6 3.9-.2zM1084 228.9l-.6-1.5.2-1.7-2.2-.9-5-1.1-6.3 2-.7 2.6 5.9.7 8.7-.1zm589.7 21.8l-7.2-6.2-5.1-6-6.8-5.8-4.9-4-1.3.8 4.4 2.8-1.9 2.8 6.8 8.3 7.8 6 6.4 8.3 2.4 4.6 5.5 6.8 3.8 6 4.6 5.2-.1-4.8 6.5 3.8-3-4.4-9.5-6.3-3.7-9 8.9 2-13.6-10.9z\"\n  },\n  {\n    id: \"RW\",\n    shape:\n      \"M1147.6 579.4l-3.3 1.9-1.4-.6-1.6 1.8-.2 3.8-.8.4-.6 3.5 3.5.5 1.7-3.6 3 .4 1.6-.8.4-3.7-2.3-3.6z\"\n  },\n  {\n    id: \"SA\",\n    shape:\n      \"M1228.7 387l-10.2-.5-16.7-12.7-8.5-4.5-6.7-1.7-.9 1-10.4 3.1 6.1 6.4-1.7 1-.7 2.2-4 .8-1.1 2.3-2.1 2-6.1-1-.5 2.5v2.2l-.6 3.5h2.7l3.2 4.4 3.7 5.1 2.5 4.7 1.7 1.5 1.7 3.3-.2 1.4 2.1 3.7 3 1.3 2.8 2.5 3.6 7v3.8l.9 4.4 4 6.1 2.5 1 4.1 4.4 1.9 5.2 3.2 5.3 3 2.3.6 2.5 1.8 1.9.9 2.8 2.3-2.1-.7-2.7 1.2-3.1 2.4 1.7 1.5-.6 6.4-.2 1 .7 5.4.6 2.1-.3 1.6 2.1 2.5-1 3.5-6.7 5-2.9 15.7-2.4 16.1-6.4 2.6-12.7-2.9-4.5-1 1.3-16.8-3.2-2.6-6.4-.4-1.5-1.2-2.4-1.5.4-1.8-1.2-1-1.6-.9-2.1-1.7-1.8-1-2.1.4-2.1-.6-2.7-4-2.6-1.2-2.3-2.9-1.4-2.7-5.5-3.8.2-1.7-3.1-4.9-.6z\"\n  },\n  {\n    id: \"SB\",\n    shape:\n      \"M1909.1 646.4l-.2-.2-.1-.4h-.3l-.3.1.2.6h.2l.5-.1zm-35.6.8l-.1-.2-.5-.4-1.9-1.3-.4-.1-.1.1-.1.3.1.2.5.1v.1l.3.2.7.2.4.3.1.5.3.1.3.1.4-.2zm32-6.6v-.1l.2-.3-.2-.1-.5-.1-.7.1-.3.2-.2.3h-.2v.2l.1.4.2-.1.2.1.5-.5h.4l.5-.1zm-24.4-2.3l-.1-.2-.2-.1-.9-.7-.5-.2h-.5l-.1.5v.3h.6l.4.2v.6l.2.2v.5l1.2.9.7.4.7.1.4.2.5-.1.5.2.4-.1-.4-.3v-.4l-.5-1.3-.3-.3-.5.1-.5-.2h-.4l-.7-.3zm-.4-4.9l-.6-1.6-.2-.1.1.6.1.4-.1.5-.1.6.2.2.2-.2.4.5V633.4zm-9.8-2.2l-.3-.1-.4.3-.1.3-.1.7v.4l.3.7.3.5.3.3.2.2.9.1 1.7.1.9.4.9.2.4-.1.5-.2.1-.1-.1-.6-.2-.3-.4-.2-.2-.6-.5-.4-.9-.7h-1.6l-.6.1-1.1-1zm2.6-1.8l-.5.2v.3l.4.1.4.2.1.3.2-.1.4.2.2-.3-.4-.5-.4-.3h-.1l-.3-.1zm-5.6.8l.3-.2v-.4h-.3l-.1-.2h-.2l-.3.2-.2.3.1.2h.4l.2.1h.1zm-8.4-2.3l-.1-.2-.3-.2h-.2l-.5.1.1.1.6.3.3.1.1-.2zm3.1.4l.3-.2-.1-.2-.1-.5-.4.7.1.2h.2zm-.5-.9v-.4l-.2-.1.4-.3-.1-.1-.6-.2-.2.2-.2.1-.1.1-.1.1-.1.5.2.4.4.2.6-.5zm-4 .2l-.3-.4.1-.5.2-.1.2-.5-.1-.4-.2.1-.7.6-.1.3.6.8.3.2v-.1zm13-1.3l-.2-.4v-.2l-.3-.2-.2.1-.1.3.1.2.4.3.3-.1zm6-1.2h-.2l-.1.1h-.5l-.1.2.6 1.1-.3.5.4 2.2.4 1.2.8.8v.2l.8.5.6 1.3.2.1.1-.2v-.6l-.5-1.1.1-.8-.2-.3v-.3l-.2-.8-.6-.7-.3-.1-.2-.3.2-.6.2-.2.1-.3-1.3-1.9zm-16.6-.5l-.6-.2-.2-.3v-1l-.6-.3-.3.2-.6.7-.2.4-.5.3-.1.3v.4l.4.1.3-.4.9-.1.3.1v.4l.1.7.3.3.5.2.4.6.1-.3h.2l.2-.4-.3-1.2-.3-.5zm-6.5-.4l.1-.5-.1-.9-.2.1v.2l-.1.4.2.8.1-.1zm3.2-.4l.2-.2v-.9l-.2-.4-.2-.2-.5.1-.4.5v.5l.4.6h.7zm-2.6-1.2l.2-.3.5-.7.1-.3-.5-.2-.4-.5-.4-.2-.3.4v.4l.5.6-.1.4.2.1.1.4.1-.1zm17.5 3.9l-.1-.5-.3-.4.4-.5-2.2-1.9-.3-.2-.4-.1-.5-.4-.5-.1-.5-.4-.2-.3-.6-.4-.6-.8-1.5-.3.1.2.4.4.1.7.5.4.5.6.2.1.2.2.4.5.8.4.8.6.3.1.3.3 1.5.7.5.7.7.5v-.1zm-21.8-9.2l.2-.3-.7-.5-.2.3-.2.5.4.2.5-.2zm9.1 1.5l-.1-.1h-.3l-.4-.2-.7-.8-.2-.3-.2-1-.4-.4-1.4-.8-.8-.8-.7-.2-.2.2v.5l.2.3 1 .9 1.1 1.7 1 1 .8.1h.4v.1l.1.2.5.2.5-.4-.2-.2z\"\n  },\n  {\n    id: \"SC\",\n    shape: \"M1288.5 602l-.5-.8-.4.3.2.3.3.2.1.4.3.2v-.6z\"\n  },\n  {\n    id: \"SD\",\n    shape:\n      \"M1180.8 468.5l.4-4.2 1.6-2 4-1 2.6-3.6-3.1-2.4-2.2-1.6-2.5-7.6-1.1-6.5 1.1-1.2-2.1-6.2H1114.2l.5 12.7h-6.3v2.7l1.1 25.2-4.8-.4-2.4 4.7-1.4 3.9 1.2 1.5-1.8 1.9.7 2.7-1.4 2.6-.5 2.4 2-.4 1.2 2.5.1 3.7 2.1 1.8v1.6l.7 2.7 3.3 4v2.6l-.8 2.6.3 2 2 1.8.5.3 1.7-.7 1.9-1.2 1.3-5.7 1.5-2.9 4-.9 1 1.8 3 3.7 1.5.5 2-1.1 4.1.3.8 1.3h5.5l.2-1.3 2.9-1.2.5-1.9 2.1-1.3 4.8 3.7 2.8-.7 2.7-4.5 3-3.5-.6-3.9-1.4-1.8 3.4-.3.3-1.5 2.6.5-.5 4.7.8 4.6 2.9 2.5.7 2.2v3.1l.8.1v-.7l1.4-6.7 2.6-1.8.5-2.6 2.3-4.8 3.2-3.2 2.1-6.2.7-5.5-.7-2.5 1.9-9.4z\"\n  },\n  {\n    id: \"SE\",\n    shape:\n      \"M1077.7 161.1l-1.9-2.2-1.7-8.4-7.2-3.7-5.9-2.7-2.5.3v3.5l-7.9-.9-.6 3.1-4-.1-2.2 3.9-3.4 6.1-5.7 7.9 1.8 1.9-1.3 2.2-4.3-.1-2.3 5.3 1 7.6 3.1 2.9-.9 6.9-3.4 4-1.7 3.3 4.2 8.4 4.4 6.7 2 5.7 5.3-.3 2.2-4.7 5.7.5 2-5.5.6-10 4.6-1.3 3.3-6.6-4.8-3.3-3.6-4 2.1-8.1 7.7-4.9 6.1-4.5-1.2-3.5 3.4-3.9 7-1.5z\"\n  },\n  {\n    id: \"SG\",\n    shape: \"M1561 563.7l.1-.2-.2-.2-.3-.1-.5-.2-.6.1-.3.6.9.4.9-.4z\"\n  },\n  {\n    id: \"SI\",\n    shape:\n      \"M1059.4 277l-1.2-2.1-.8-.1-.9 1.1-4.3.1-2.4 1.4-4.2-.4-.3 3 1.4 2.7-1.1.5 3.5.2.8-1 1.8 1 2 .1-.2-1.7 1.7-.6.3-2.5 3.9-1.7z\"\n  },\n  {\n    id: \"SK\",\n    shape:\n      \"M1087.4 260.9l-4.9-2.3-3.4.8-2.4-.6-2.8 1.3-2.7-2.2-1.9.9-.3-.4h-1.5l-.6 1.1-1.1.3-.2 1.4-.9.3-.1.6-1.6.6-2.2-.1-.6 1.4-.3.8.7 2.1 2.6 1.6 1.9.7 4.1-.8.3-1.2 1.9-.2 2.3-1 .6.4 2.2-.7 1-1.5 1.6-.4 5.5 1.9 1-.6.7-2.5 1.1-1.7z\"\n  },\n  {\n    id: \"SL\",\n    shape:\n      \"M919.4 518.7l-1.5.3v-2.3l-.9-1.7.2-1.8-1.2-2.7-1.5-2.3H910l-1.3 1.2-1.5.2-1 1.4-.7 1.7-3 2.8.7 4.7.9 2.3 2.9 3.5 4.1 2.5 1.5.5 1.3-2 .3-1.9 2.6-3.4 2.6-3z\"\n  },\n  {\n    id: \"SN\",\n    shape:\n      \"M908.9 479.2l-3.6-4.4-3.2-4.7-3.7-1.7-2.6-1.8h-3.1l-2.8 1.4-2.7-.5-2 2-1.3 3.3-2.8 4.4-2.5 1.2 2.7 2.3 2.2 5 6.1-.2 1.3-1.5 1.8-.1 2.1 1.5 1.8.1 1.8-1.1 1.1 1.8-2.4 1.5-2.4-.1-2.4-1.4-2.1 1.5h-1l-1.4.9-5-.1.8 4.9 3-1.1 1.8.2 1.5-.7 10.3.3 2.7.1 4 1.5 1.3-.1.4-.7 3 .5.8-.4.3-2-.4-2.4-2.1-1.8-1.1-3.7-.2-3.9z\"\n  },\n  {\n    id: \"SO\",\n    shape:\n      \"M1223.4 505.7l-2.6-2.7-1.2-2.6-1.8-1.2-2 3.4-1.1 2.3 2.2 3.5 2.1 3.1 2.2 2.2 18.5 7.6 4.8-.1-15.4 19.1-7.4.3-4.9 4.5-3.6.1-1.5 2-4.8 7.2.2 23.2 3.3 5.3 1.3-1.5 1.3-3.4 6.1-7.7 5.3-4.8 8.3-6.4 5.6-5.1 6.4-8.7 4.7-7.1 4.6-9.3 3.2-8.2 2.5-7.1 1.3-6.8 1.1-2.3-.2-3.4.4-3.7-.2-1.7h-2.1l-2.6 2.2-2.9.6-2.5.9-1.8.2-3.2.2-1.9 1.1-2.8.5-4.8 1.9-6.1.8-5.2 1.6h-2.8z\"\n  },\n  {\n    id: \"SR\",\n    shape:\n      \"M668 533.8l-4.6.5-.6 1.1-6.7-1.2-1 5.7-3.5 1.6.3 1.5-1.1 3.3 2.4 4.6 1.8.1.7 3.5 3.3 5.6 3.1.5.5-1.3-.9-1.3.5-1.8 2.3.6 2.7-.7 3.2 1.4 1.4-2.7.6-2.9 1-2.8-2.1-3.7-.4-4.4 3.1-5.5-6-1.7z\"\n  },\n  {\n    id: \"SS\",\n    shape:\n      \"M1166 508.7l-.7-2.2-2.9-2.5-.8-4.6.5-4.7-2.6-.5-.3 1.5-3.4.3 1.4 1.8.6 3.9-3 3.5-2.7 4.5-2.8.7-4.8-3.7-2.1 1.3-.5 1.9-2.9 1.2-.2 1.3h-5.5l-.8-1.3-4.1-.3-2 1.1-1.5-.5-3-3.7-1-1.8-4 .9-1.5 2.9-1.3 5.7-1.9 1.2-1.7.7 3.8 2.5 3.1 2.6.1 2 3.8 3.4 2.4 2.7 1.5 3.8 4.2 2.5.9 2.1 3.5 5.2 2.5.8 1.5-1.1 2.6.4 3.1-1.3 1.4 2.7 5 4.2 2.3-1.7 3.5 1.4 4.5-1.5 4 .1 3.4-3 3.4-3.8 3.8-4.2-3.5-6.9-2.6-1.5-1-2.5-2.9-3.1-3.4-.5 1.8-3.6 3-.1.8-2-.2-5-.8-.1v-3.1z\"\n  },\n  {\n    id: \"ST\",\n    shape:\n      \"M1014.1 571.4l.5-.8v-.5l-.3-.5h-.4l-.5.4-.3.4v.3l.1.7.1.3.3.2.5-.5zm4.3-9.2l.2-.4v-.2l-.1-.1-.1-.1-.2.1-.3.5.1.2.2.2.2-.2z\"\n  },\n  {\n    id: \"SV\",\n    shape:\n      \"M487.2 487l.6-2.5-.7-.7-1.1-.5-2.5.8-.1-.9-1.6-1-1.1-1.3-1.5-.5-1.4.4.2.7-1.1.7-2.1 1.6-.2 1 1.4 1.3 3.1.4 2.2 1.3 1.9.6 3.3.1.7-1.5z\"\n  },\n  {\n    id: \"SX\",\n    shape: \"M627.1 457.2l.2.2.3.1.1-.1v-.2h-.6z\"\n  },\n  {\n    id: \"SY\",\n    shape:\n      \"M1183.5 359.9l11-6.7.9-7.8-1.2-4.7 2.7-1.6 2.1-4.1-5.9 1.1-2.8-.2-5.7 2.5h-4.3l-3-1.2-5.5 1.8-1.9-1.3.1 3.6-1.2 1.5-1.2 1.4-1 2.6 1.1 5 2.4.3 1.2 2.5-2.6 2.4-.9 3.5.3 2.6-.6 1h.1l6.3 2.5 9.6-6.7z\"\n  },\n  {\n    id: \"SZ\",\n    shape:\n      \"M1150.5 736.6l-2.7-1.2-1.6.5-.7 1.8-1.6 2.4-.1 2.2 3 3.5 3.3-.7 1.3-2.8-.3-2.8-.6-2.9z\"\n  },\n  {\n    id: \"TC\",\n    shape:\n      \"M578.7 433.1l-.1.4v.2l.2.1.6-.1.1-.1.2-.1v-.1l-.4.1-.6-.4zm3.6.6l.2-.2-.2-.2-.7-.2-.2.1v.3h.6l.3.3v-.1zm-1.1-.5l-.1-.1-.1-.6h-.5v.2l.1.2h.1l.1.2.3.2.1-.1z\"\n  },\n  {\n    id: \"TD\",\n    shape:\n      \"M1108.4 447.6l-22.4-12.2-22.3-12.2-5.4 3.5 1.6 9.9 2 1.6.2 2.1 2.3 2.2-1.1 2.7-1.8 12.9-.2 8.3-6.9 6-2.3 8.4 2.4 2.3v4.1l3.6.2-.5 2.9 2.2 4.1.5 4.2-.2 4.3 3.1 5.8-3.1-.1-1.6.4-2.5-.6-1.2 3 3.3 3.7 2.5 1.1.8 2.6 1.8 4.4-.9 1.7 4.7-.4 1-1.7.9.2 1.4 1.4 7.1-2.4 2.3-2.5 2.9-2.2-.6-2.3 1.6-.6 5.4.4 5.2-2.9 4-7 2.8-2.5 3.5-1.1v-1.6l-2.1-1.8-.1-3.7-1.2-2.5-2 .4.5-2.4 1.4-2.6-.7-2.7 1.8-1.9-1.2-1.5 1.4-3.9 2.4-4.7 4.8.4-1.1-25.2z\"\n  },\n  {\n    id: \"TG\",\n    shape:\n      \"M981.7 502.2l-4.9-.1-.4 1.9 2.4 3.3-.1 4.6.6 5.1 1.4 2.3-1.2 5.7.4 3.2 1.5 4 1.2 2.2 4.6-1.3-1.4-4.4.2-14.6-1.1-1.3-.2-3.1-2-2.3-1.7-1.9.7-3.3z\"\n  },\n  {\n    id: \"TH\",\n    shape:\n      \"M1562.7 481.4l1.5-2.9-.5-5.4-5.2-5.5-1.3-6.3-4.9-5.2-4.3-.4-.8 2.2-3.2.2-1.8-1.2-5.3 3.8-1-5.7.4-6.7-3.8-.3-.9-3.8-2.6-1.9-3 1.4-2.8 2.8-3.9.3-1.5 6.9-2.2 1.1 3.5 5.6 4.1 4.6 2.9 4.2-1.4 5.6-1.7 1.1 1.7 3.2 4.2 5.1 1 3.5.2 3 2.8 5.8-2.6 5.9-2.2 6.6-1.3 6.1-.3 3.9 1.2 3.6.7-3.8 2.9 3.1 3.2 3.5 1.1 3.2 2.4 2.4.9-1.1 4.7 2.8.6 3.3 3.7-.8 1.7-2.6-3.1-3.3-3.4-.8-3.3-3.6-1.4-5.5-2.6-5.8-3.7-.2-.7-4.6 1.4-5.6 2.2-9.3-.2-7 4.9-.1-.3 5 4.7-.1 5.3 2.9-2.1-7.7 3-5.2 7.1-1.3 5.3 1z\"\n  },\n  {\n    id: \"TJ\",\n    shape:\n      \"M1344.1 315.7l-2.1.2-1.3-1.8.2-2.9-6.4 1.5-.5 4-1.5 3.5-4.4-.3-.6 2.8 4.2 1.6 2.4 4.7-1.3 6.6 1.8.8 3.3-2.1 2.1 1.3.9-3 3.2.1.6-.9-.2-2.6 1.7-2.3 3.2 1.5v2l1.6.3 1 5.4 2.6 2.1 1.5-1.3 2.1-.7 2.5-2.9 3.8.5h5.4l-1.8-3.7-.6-2.5-3.5-1.4-1.6.6-3-5.9-9.5.9-7.1-2-5.4.5-.6-3.7 5.9 1.1 1.4-2z\"\n  },\n  {\n    id: \"TL\",\n    shape:\n      \"M1676.8 631.9l4.9-1.8 6-2.8 2.2-1.7-2-.8-1.8.8-4 .2-4.9 1.4-.8 1.5.5 1.3-.1 1.9z\"\n  },\n  {\n    id: \"TM\",\n    shape:\n      \"M1325.6 334.2l-.8-4-7.7-2.7-6.2-3.2-4.2-3-7-4.4-4.3-6.4-2-1.2-5.5.3-2.3-1.3-1.9-4.9-7.8-3.3-3.3 3.6-3.8 2.2 1.6 3.1-5.8.1-2.5.3-4.9-4.9-3.8-1.7-5.5 1.3-1.8 2 2.5 4-.5-4.5 3.7-1.6 2.4 3.6 4.6 3.7-4 2-5.3-1.5.1 5.2 3.5.4-.4 4.4 4.5 2.1.7 6.8 1.8 4.5 4.4-1.2 3-3.7 3.5.2 2.1-1.2 3.8.6 6.5 3.3 4.3.7 7.3 5.7 3.9.2 1.6 5.5 5.9 2.4 3.9-.8.4-3 4-.9 2.5-2-.1-5.2 4.1-1.2.3-2.3 2.9 1.7 1.6.2z\"\n  },\n  {\n    id: \"TN\",\n    shape:\n      \"M1038 361.4l-2-1-1.5-3-2.8-.1-1.1-3.5 3.4-3.2.5-5.6-1.9-1.6-.1-3 2.5-3.2-.4-1.3-4.4 2.4.1-3.3-3.7-.7-5.6 2.6-1 3.3 1 6.2-1.1 5.3-3.2 3.6.6 4.8 4.5 3.8v1.5l3.4 2.6 2.6 11.3 2.6-1.4.4-2.7-.7-2.6 3.7-2.5 1.5-2 2.6-1.8.1-4.9z\"\n  },\n  {\n    id: \"TO\",\n    shape:\n      \"M13.3 707.7l-.2.3v.2l.4.4-.2-.9zm-1.6-.9h-.2l.2-.1-.4-.2h-.4l-.2-.1v-.2l-.2.3.2.3.9.4.3.2.2-.6v-.2l-.3.1v.1h-.1zm2.5-16l.1-.2v-.2l-.3-.1h-.1l-.3.5.1.1.3.2h.1l.1-.3z\"\n  },\n  {\n    id: \"TR\",\n    shape:\n      \"M1166.6 308.9l-9.7-4.4-8.5.2-5.7 1.7-5.6 4-9.9-.8-1.6 4.8-7.9.2-5.1 6.1 3.6 3-2 5 4.2 3.6 3.7 6.4 5.8-.1 5.4 3.5 3.6-.8.9-2.7 5.7.2 4.6 3.5 8-.7 3.1-3.7 4.6 1.5 3.2-.6-1.7 2.4 2.3 3 1.2-1.4 1.2-1.5-.1-3.6 1.9 1.3 5.5-1.8 3 1.2h4.3l5.7-2.5 2.8.2 5.9-1.1 2.1-1 6.2.9 2.1 1.6 2.3-1.1-3.7-5.2.7-2-2.9-7.3 3.3-1.8-2.4-1.9-4.2-1.5v-3.1l-1.3-2.2-5.6-3-5.4.3-5.5 3.2-4.5-.6-5.8 1-7.8-2.4zm-49.6 4l2-1.9 6.1-.4.7-1.5-4.7-2-.9-2.4-4.5-.8-5 2 2.7 1.6-1.2 3.9-1.1.7.1 1.3 1.9 2.9 3.9-3.4z\"\n  },\n  {\n    id: \"TT\",\n    shape:\n      \"M635.4 507.7l.1-.2v-.6l.2-.4-.2-.4-.1-.6.1-.5v-.7l.2-.3.5-.8h-.9l-.6.2-1.1.1-.5.2-.7.1-.4.2.1.1.5.2.2.2.1.2.1.4-.3 1.7-.1.1-.6.1-.2.3-1.4.8.8-.1.9.1 2.4-.1.9-.3zm1.8-6.7l1.2-.5.1-.4h-.2l-.8.3-.6.5v.2l.3-.1z\"\n  },\n  {\n    id: \"TW\",\n    shape:\n      \"M1642.3 427.2l1.2-10.2.1-3.9-2.9-1.9-3.3 4.8-1.9 6.3 1.5 4.7 4 5.4 1.3-5.2z\"\n  },\n  {\n    id: \"TZ\",\n    shape:\n      \"M1149.6 578.6l-2 .8 2.3 3.6-.4 3.7-1.6.8.3 2.5 1.2 1.5v2l-1.4 1.4-2.2 3.3-2.1 2.3-.6.1-.3 2.7 1.1.9-.2 2.7 1 2.6-1.3 2.4 4.5 4.3.3 3.9 2.7 6.5.3.2 2.2 1.1 3.5 1.1 3.2 1.9 5.4 1.2 1.1 1.7.4-1.2 2.8 3.4.3 6.7 1.8 2.4v.1l2.1-.3 6.7 1.8 1.4-.8 3.9-.1 2.1-1.9 3.3.1 6.2-2.5 4.6-3.7-2-1.4-2.2-6.3-1.8-3.9.4-3.1-.3-1.9 1.7-3.9-.2-1.6-3.5-2.3-.3-3.6 2.8-7.9-8-6.3-.4-3.7-20.2-13-2.8 2.8-1.9 2.9 2.2 2.2-3.2 1.6-.7-.8-3.2.4-2.5 1.4-1.6-2.4 1.1-4.5.2-3.8-6.2-.1z\"\n  },\n  {\n    id: \"UA\",\n    shape:\n      \"M1138.5 241l-4.8.5-1.5-.3-1 1.4-1.8-.2-4.1.3-1.2 1.4.2 3.1-2-.6-4.3.3-1.5-1.5-1.6 1.1-2-.9-3.8-.1-5.6-1.5-5-.5-3.7.2-2.4 1.6-2.2.3 3.1 5.3-.3 1.8-2.3.7-3.8 5.1 1.6 2.8-1.1-.4-1.1 1.7-.7 2.5 2.9 1.7.6 1.6 1.9-1.3 3.2.7h3.2l2.4 1.5 1.6-.9 3.6-.6 1-1.5h2.1l1.1-.9 3.2-.6 3.9 1.9 2 .3 2.5 1.6v2.1l1.9 1.1 1.1 2.6 2 1.5-.2 1 1 .6-1.2.5-3-.2-.6-.9-1 .5.5 1.1-1.1 2-.5 2.1-1.2.7 2.4 1.1 2.2-1 2.4 1.1 3.3-4.6 1.3-3.4 4.5-.8.7 2.4 8 1.5 1.7 1.4-4.5 2.1-.7 1.2 5.8 1.8-.6 2.9 3 1.3 6.3-3.6 5.3-1.1.6-2.2-5.1.4-2.7-1.5-1-3.9 3.9-2.3 4.6-.3 3-2 3.9-.5-.4-2.8 2.2-1.7 4.7-.5.3-2.1-1.8-3.4 1.3-3.2-.4-1.9-7.6-2-2.9.1-3.6-2.9-3.5 1-6.6-2.2-.2-1.2-2.2-2.7-4-.2-.7-1.9.9-1.3-3.8-3.4z\"\n  },\n  {\n    id: \"UG\",\n    shape:\n      \"M1167.6 545.1l-3.4 3-4-.1-4.5 1.5-3.5-1.4-2.3 1.7-.3 7.5 2.3.8-1.8 2.3-2.2 1.7-2.1 3.3-1.2 3-.3 5.1-1.3 2.4-.1 4.8 1.4.6 3.3-1.9 2-.8 6.2.1-.3-2.5 2.6-3.7 3.5-.9 2.4-1.5 2.9 1.2.3.5v-.3l1.6-2.6 2.7-4.2 2.1-4.7-2.6-7.3-.7-3.2-2.7-4.4z\"\n  },\n  {\n    id: \"US\",\n    shape:\n      \"M116.7 450.7l2-.9 2.5-1.4.2-.4-.9-2.2-.7-.8-.8-.6-1.9-1.1-.4-.1-.4.6v1.3l-1.2 1-.4.7.4 2.3-.6 1.8 1.2.9 1-1.1zm-.6-9.9l.6-.7-1.2-1-1.8-.6-.7.5v.4l.5.5.6 1.4 2-.5zm-3-3.4l-2.6-.2-.6.7 2.9.2.3-.7zm-4.7-.9l-1.1-2.1-.3-.4-1.7.9.1.2.4 1.5 1.8.2.4.1.4-.4zm-8.3-4.2l.3-1.5-1.3-.1-1 .6-.4.5 1.6 1.1.8-.6zm412.1-173.2h-1.6l-1.3 2.4H373.4l-1.6 5.1-2.4 5.1-2.3 1.6 1.1-5.9-5.8-2.1-1.4 1.2-.4 2.9-1.8 5.4-4.2 8.3-4 5.6-4 5.6-5.4 5.8-1.1 4.7-2.8 5.3-3.9 5.2 1 3.4-1.9 5.2 1.5 5.4 1.3 2.2-.8 1.5.4 9 2.5 6.5-.8 3.5 1 1 4.6.7 1.3 1.7 2.8.3-.1 1.9 2.2.7 2.1 3.7-.3 3.2 6.3-.5 7-.7-1 1.3 7.1 3.1 10.7 4.4h15l.8-2.6h9.3l1.3 2.2 2.1 2 2.4 2.8.8 3.3.4 3.5 2.2 1.9 4 1.9 4.8-5 4.4-.1 3.1 2.5 1.6 4.4 1 3.7 2.4 3.6.2 4.5.8 3 3.9 2 3.6 1.4 2.1-.2-.6-2.2.4-3.1 1-4.4 1.9-2.8 3.7-3.1 6-2.7 6.1-4.7 4.9-1.5 3.5-.4 3.5 1.4 4.9-.8 3.3 3.4 3.8.2 2.4-1.2 1.7.9 1.3-.8-.9-1.3.7-2.5-.5-1.7 2.4-1 4.2-.4 4.7.7 6.2-.8 3 1.5 2 3 .9.3 6.1-2.9 1.9 1 3 5.3.8 3.5-2 4.2.4 2.5 1.6 4.9 2 5.5 1.8 1.4.4 2.8 2.6.8 1.7-.8 2-3.9.7-2.5.9-4.3-1.2-7.4.5-2.7-1.5-4.5-.7-5.4.1-4.4 1.8-4.5 3.5-3.8 3.7-3 6.9-4.1 1.3-2.2 3.3-2.3 2.8-.4 4.4-3.8 6-1.9 4.6-4.8.9-6.5.1-2.2-1.4-.4 1.5-6.2-3-2.1 3.2 1v-4.1l1.9-2.7-1 5.3 2 2.5-2.9 4.4.4.2 4.4-5.1 2.4-2.5.6-2.5-.9-1.1-.1-3.5 1.2 1.6 1.1.4-.1 1.6 5.2-4.9 2.5-4.5-1.4-.3 2.1-1.8-.4.8h3.3l7.8-1.9-1.1-1.2-7.9 1.2 4.8-1.8 3.1-.3 2.4-.3 4.1-1.1 2.4.1 3.8-1 1-1.7-1.1-1.4-.2 2.2-2.1-.1-.6-3.3 1.1-3.3 1.4-1.3 3.9-3.7 5.9-1.8 6-2.1 6.3-3-.2-2-2.1-3.5 2.8-8.5-1.5-1.8-3.7 1.1-1.1-1.7-5.5 4.7-3.2 4.9-2.7 2.8-2.5.9-1.7.3-1 1.6h-17l-2.7 1.2-6.7 4.2.2.9-.6 2.4-4.6 2-3.9-.5-4-.2-2.6.7-.3 1.8-.1.6-5.8 3.7-4.5 1.8-2.9.8-3.7 1.7-4 .9-2.5-.3-2.7-1.3 2.7-2.4 2-2.2 3.7-3.4.7-2.5.5-3.5-1.6-.7-4.3 2.8-.9-.1.3-1.5 3.8-2.5 1.6-2.8.7-2.8-2.7-2.4-3.7-1.3-1.7 2.4-1.4.6-2.2 3.1.4-2.1-2.6 1.5-2.1 2-2.6 3.1-1.3 2.6.1 3.8-1.8 4-3.3 3-1.4.9-1.6.7h-1.8l-.3-.4-.1-3.3.7-1.6.7-1.5.6-3 2.5-3.5 2.9-4.3 4.6-4.7h-.7l-5.4 4-.4-.7 2.9-2.3 4.7-4 3.7-.5 4.4-1.3 3.7.7h.1l4.7-.5-1.5-2.5-1.2-.2-1.4-.3-.4-1.7-5.1.5-5 1.4-2.5-2.3-2.5-.8 3.1-3.3-5.3 2-4.9 2.1-4.6 1.5-2.1-2.1-5.5 1.3.4-.9 4.6-2.6 4.7-2.5 5.9-2.1-5.3-1.6-4.4.8-3.8-1.9-4.6-1-3.2-.4-1-1 .8-3.4zm-240.6-46.9l6.9-2.8v-1.8l-2.6-.4-3.4.9-6.4 2.1-2.2 2.7.7 1.6 7-2.3zm-38.7-16.4l2.3-2.3-2.9-.5-5.7 1 .8 1.6 1.6 1.1 3.9-.9zm1.2-22.3l-3.1 2.2.4.5 4.2-.4.3 1.1 1.7 1.2 4.9-1.2 1.2-.6-3.3-.8-1.6-1.5-3.4.6-1.3-1.1zM359 133.3l-4.4-1.1-10.2 2.8-3.2-.3-11 2.3-4.8.6-7.8 2.5-4.8 2.6-8.6 2.5-7.6.1-6.3 2.9 3.2 1.7.7 2.3-.8 2.7 2.3 2.1-1.2 3.5-9.2.2 4.3-2.8h-3.4l-13.1 2.7-9.1 2.3 1 3.3-1.2 2.2 4.5 1.4 6.9-.7 1.8 1.3 2.9-1.3 6.1-1.2h2.7l-5.9 2.1 1.1 1-2.5 2.6-5.5 1.8-2.5-.5-7 2.7-1.8-.9-4.1.4-5.3 3-7.6 3.1-5.8 3.4.3 2.4-4 3.3 1.4 1.4.5 2.7 7.2-1.1.4 2.1-3.3 2.1-3.6 3.5h2.8l7.2-2.3-1.6 2.9 3.6-2.1-.4 3 4.8-2.2.4 1.1 7.2-1.8-6.2 3.4-5.7 4.5-5.7 2.1-2.3 1.2-10.3 3.6-4.9 2.4-6.5.7-8.5 3.3-6.6 1.8-8.1 2.8-.4 1 10-1.7 6-2 6.9-2 6.1-1.7 2.8.5 8.1-2.6 4.5-2.8 10.5-3.1 3.9-2.6 6.6-1.8 7.6-2.5 8.9-4.2-.2-2.9 11.1-4.1 7.4-3.9 9.2-3.2-.4 1.4-6.7 1.8-8.3 5.7-3.2 3.5 6.4-1.3 6.1-1.9 6.5-1.3 2.9-.3 3.5-4.1 6.3-1.2 2.6 2.5 6 2.7 6.7-.5 5.7 2 3.2 1.1 3.3 6.1 3.7 1.7 7.1.2 4.1.4-2.7 5.5 1.6 4.9-3.3 5.2 2.5 1.9.6 2.2 5.1-2.9 3.1-3.7-4.6-3.8 1.5-6.8 1.1-4.2-1.7-2.7-.7-2.4.5-3-6.4 1.9-7.6 3.3-.2-3.9-.6-2.6-2.7-1.6-4.2-.1 35.4-32.4 24.3-20.2-3.5-.7-4.1-1.6-6.5.8-2.2-.7-7.1-.5-6.2-1.6-4.8.5-4.9-.9 2-1.2-6.3-.3-3.3 1 .5-2.4z\"\n  },\n  {\n    id: \"UY\",\n    shape:\n      \"M692.5 787l-2.1-3.7 1.9-3-3.8-4.3-4.8-3.5-6.2-4.1-1.9.2-6.2-4.9-3.4.7-.5 5.1-.3 6.5 1.1 6.3-.9 1.4.4 4.2 3.9 3.5 3.6-.2 5.4 2.7 2.7-.6 4.2 1.2 5.3-3.5 1.6-4z\"\n  },\n  {\n    id: \"UZ\",\n    shape:\n      \"M1339.8 303.1l-2.5 1.2-5.4 4.3-.9 4.5h-1.9l-2.3-3-6.6-.2-2.6-5-2.5-.1-1.5-6.2-7.5-4.5-8.6.5-5.7.9-6.5-5.5-4.8-2.3-9.1-4.5-1.1-.5-11.9 3.6 6.2 22.8 5.8-.1-1.6-3.1 3.8-2.2 3.3-3.6 7.8 3.3 1.9 4.9 2.3 1.3 5.5-.3 2 1.2 4.3 6.4 7 4.4 4.2 3 6.2 3.2 7.7 2.7.8 4h2.9l4.3 1.4 1.3-6.6-2.4-4.7-4.2-1.6.6-2.8 4.4.3 1.5-3.5.5-4 6.4-1.5-.2 2.9 1.3 1.8 2.1-.2 4.1.6 5.2-4.5-7.1-3.3-3.2 1.6-4.6-2.3 3.1-4.1-1.8-.6z\"\n  },\n  {\n    id: \"VC\",\n    shape:\n      \"M634.5 491.4v-.1h.1v-.2h-.1v.2h-.1v.1h.1zm.7-1.9l.1-.2.1-.1-.1-.1v.1l-.2.1v.2h-.2.1l.1.1.1-.1zm.3-1.1l.3-.2.1-.6-.1-.4h-.2l-.3.1-.2.3-.1.5.4.4.1-.1z\"\n  },\n  {\n    id: \"VE\",\n    shape:\n      \"M642 518.9l-2.2-1.5-2.9.2-.7-5.1-4.1-3.2-4.4-.4-1.8-3 4.8-1.9-6.7.1-6.9.4-.2 1.6-3.2 1.9-4.2-.7-3.1-2.9-6 .7-5-.1-.1-2.1-3.5-3.5-3.9-.1-1.7-4.5-2.1 2 .6 3-7.1 2.6v4.8l1.6 2.2-1.5 4.6-2.4.4-1.9-5 2.7-3.7.3-3.3-1.7-2.9 3.3-.8.3-1.5-3.7 1.1-1.6 3.2-2.2 1.8-1.8 2.4-.9 4.5-1.8 3.7 2.9.5.6 2.9 1.1 1.4.4 2.5-.8 2.4.2 1.3 1.3.6 1.3 2.2 7.2-.6 3.2.8 3.8 5.5 2.3-.7 4 .3 3.2-.7 2 1.1-1.2 3.4-1.3 2.1-.5 4.6 1 4.2 1.5 1.9.2 1.5-2.9 3.1 2 1.4 1.4 2.2 1.7 6.4 3 3.4 4.4-.5 1.1-1.9 4.2-1.5 2.3-1 .7-2.7 4.1-1.8-.3-1.4-4.8-.5-.7-4 .3-4.3-2.4-1.6 1-.6 4.2.8 4.4 1.6 1.7-1.5 4-1 6.4-2.4 2.1-2.4-.7-1.8-3.7-4.8 1.6-1.8v-2.9l3.4-1.1 1.5-1.2-1.9-2.3.6-2.3 4.6-3.8z\"\n  },\n  {\n    id: \"VG\",\n    shape:\n      \"M619.2 455.1l.3-.2-.2-.1h-.4l-.3.2.1.1h.5zm1.1-.4l.4-.4-.5.1-.2.2.1.1h.2zm.8-1.8h-.7l.1.1h.3l.3.1v-.2z\"\n  },\n  {\n    id: \"VI\",\n    shape:\n      \"M617.9 458.9l-.7.2-.1.4h1.1l.7-.3h-.6l-.4-.3zm.9-3.5l-.5-.1-.2.2.3.1.4-.2zm-1.1.1l-.2-.2-.3-.1-.4.1.5.3.4-.1z\"\n  },\n  {\n    id: \"VN\",\n    shape:\n      \"M1571.6 435l-5.9-1.6-3-2.6.2-3.7-5.2-1.1-3-2.4-4.1 3.4-5.3.7h-4.3l-2.7 1.5 4 5.1 3.4 5.7 6.8.1 3 5.5-3.3 1.7-1.3 2.3 7.3 3.8 5.7 7.5 4.3 5.6 4.8 4.4 2 4.5-.2 6.4 1.8 4.2.1 7.7-8.9 4.9 2.8 3.8-5.8.5-4.7 2.5 4.5 3.7-1.3 4.3 2.3 4 6.6-5.9 4.1-5.3 6.1-4.1 4.3-4.2-.4-11.2-4-11.7-4.1-5.1-5.6-4-6.4-8.3-5.3-6.7.5-4.4 3.7-6 6.5-5.5z\"\n  },\n  {\n    id: \"VU\",\n    shape:\n      \"M1908.6 676.9l-2.7-3.6-.6 1.7 1.3 2.8 2-.9zm-2-9.7l-2.3-2-.9 4.9.5 1.8 1.2-.4 1.3.8.2-5.1z\"\n  },\n  {\n    id: \"YE\",\n    shape:\n      \"M1271.5 466.2l-2.1-4.4-5.2-10.5-15.7 2.4-5 2.9-3.5 6.7-2.5 1-1.6-2.1-2.1.3-5.4-.6-1-.7-6.4.2-1.5.6-2.4-1.7-1.2 3.1.7 2.7-2.3 2.1.4 2.7-.6 1.3.7 2.9-1.1.3 1.7 2.6 1.3 4.7 1 1.9v3.4l1.6 3.8 3.9.3 1.8-.9 2.7.2.8-1.7 1.5-.4 1.1-1.7 1.4-.4 4.7-.3 3.5-1.2 3.1-2.7 1.7.4 2.4-.3 4.7-4.5 8.8-3 5.3-2.7v-2.1l.9-2.9 3.9-1.7z\"\n  },\n  {\n    id: \"YT\",\n    shape:\n      \"M1228.7 654.7v-.3l.2-.5v-.1l.1-.5-.3-.3h-.2l-.2-.3-.3.3.3.5-.1.3-.1.4.1.4.2.2.3-.1z\"\n  },\n  {\n    id: \"ZA\",\n    shape:\n      \"M1148.2 713.7l-2.9-.6-1.9.8-2.6-1.1-2.2-.1-8 4.7-5.2 4.7-2 4.3-1.7 2.4-3 .5-1.2 3-.6 2-3.6 1.5-4.4-.3-2.5-1.8-2.3-.8-2.7 1.5-1.5 3.1-2.7 1.9-2.8 2.8-4 .7-1.1-2.3.7-3.8-3-6.1-1.4-1-1.1 23.6-5 3.2-2.9.5-3.3-1.2-2.4-.5-.8-2.7-2.1-1.8-2.7 3.2 3.5 8.2v.1l2.5 5.3 3.2 6-.2 4.8-1.7 1.2 1.4 4.2-.2 3.8.6 1.7.3-.9 2.1 2.9 1.8.1 2.1 2.3 2.4-.2 3.5-2.4 4.6-1 5.6-2.5 2.2.3 3.3-.8 5.7 1.2 2.7-1.2 3.2 1 .8-1.8 2.7-.3 5.8-2.5 4.3-2.9 4.1-3.8 6.7-6.5 3.4-4.6 1.8-3.2 2.5-3.3 1.2-.9 3.9-3.2 1.6-2.9 1.1-5.2 1.7-4.7h-4.1l-1.3 2.8-3.3.7-3-3.5.1-2.2 1.6-2.4.7-1.8 1.6-.5 2.7 1.2-.4-2.3 1.4-7.1-1.1-4.5-2.2-9zm-20.1 52.8l-2 .6-3.7-4.9 3.2-4 3.1-2.5 2.6-1.3 2.3 2 1.7 1.9-1.9 3.1-1.1 2.1-3.1 1-1.1 2z\"\n  },\n  {\n    id: \"ZM\",\n    shape:\n      \"M1149.2 626.7l-1.9-.5.4-1.3-1-.3-7.5 1.1-1.6.7-1.6 4.1 1.2 2.8-1.2 7.5-.8 6.4 1.4 1.1 3.9 2.5 1.5-1.2.3 6.9h-4.3l-2.1-3.5-2-2.8-4.3-.8-1.2-3.4-3.4 2-4.5-.9-1.8-2.8-3.5-.6-2.6.1-.3-2-1.9-.1.5 2-.7 3 .9 3-.9 2.4.5 2.2-11.6-.1-.8 20.3 3.6 5.2 3.5 4 4.6-1.5 3.6.4 2.1 1.4v.5l1 .5 6.2.7 1.7.7 1.9-.1 3.2-4.1 5.1-5.3 2-.5.7-2.2 3.3-2.5 4.2-.9-.3-4.5 17.1-5.2-2.9-1.7 1.9-5.9 1.8-2.2-.9-5.3 1.2-5.1 1-1.8-1.2-5.4-2.6-2.8-3.2-1.9-3.5-1.1-2.2-1.1-.3-.2.5 1.1-1 .4-1.2-1.4z\"\n  },\n  {\n    id: \"ZW\",\n    shape:\n      \"M1148.2 713.7l6.2-7.2 1.6-4.6.9-.6.8-3.7-.8-1.9.5-4.7 1.3-4.4.3-8.1-2.8-2-2.6-.5-1.1-1.6-2.6-1.3-4.6.1-.3-2.4-4.2.9-3.3 2.5-.7 2.2-2 .5-5.1 5.3-3.2 4.1-1.9.1-1.7-.7-6.2-.7 1.9 5.1 1.1 1.1 1.6 3.7 6 7 2.3.7-.1 2.2 1.5 4.1 4.2.9 3.4 2.9 2.2.1 2.6 1.1 1.9-.8 2.9.6z\"\n  }\n];\n","import country from \"world-map-country-shapes\";\nimport getCountryISO2 from \"country-iso-3-to-2\";\n\nconst CountryShapes = (function() {\n\n  const init = () => {\n    let container = document.querySelector('.js-country-shape');\n\n    if(!container) return;\n\n    let code = container.dataset.country;\n\n    let svg = buildSVGFor(getCountryISO2(code));\n    \n    if(!!svg) {\n      container.appendChild(svg);\n      scaleToFitViewBox(svg);\n    }\n  }\n\n  const buildSVGFor = (code) => {\n    let countryPath = country.filter(c => c.id == code)[0];\n\n    if(!countryPath) return \"\";\n\n\n    let svg = document.createElementNS(\"http://www.w3.org/2000/svg\", \"svg\"),\n        path = document.createElementNS(\"http://www.w3.org/2000/svg\", \"path\");\n\n        svg.setAttributeNS(null, 'height', \"400\");\n        svg.setAttributeNS(null, 'width', \"400\");\n        svg.setAttributeNS(null, 'viewBox', \"0 0 400 400\");\n\n        path.setAttributeNS(null, 'fill', \"#27272733\");\n        path.setAttributeNS(null, 'd', countryPath.shape);\n\n    svg.appendChild(path);\n\n    return svg;\n  };\n\n  const scaleToFitViewBox = (svg) => {\n    const { xMin, xMax, yMin, yMax } = [...svg.children].reduce((acc, el) => {\n      const { x, y, width, height } = el.getBBox();\n      if (!acc.xMin || x < acc.xMin) acc.xMin = x;\n      if (!acc.xMax || x + width > acc.xMax) acc.xMax = x + width;\n      if (!acc.yMin || y < acc.yMin) acc.yMin = y;\n      if (!acc.yMax || y + height > acc.yMax) acc.yMax = y + height;\n      return acc;\n    }, {});\n\n    const viewbox = `${xMin.toFixed(2)} ${yMin.toFixed(2)} ${(xMax - xMin).toFixed(2)} ${(yMax - yMin).toFixed(2)}`;\n    svg.setAttribute('viewBox', viewbox);\n\n    return svg;\n  };\n\n  return {\n    init: init,\n  }\n\n}());\n\nexport default CountryShapes;\n","\nconst channels = {\n  facebook : (url, message) => `http://www.facebook.com/sharer/sharer.php?u=${url}${!!message ? `&quote=${message}` : \"\"}`,\n  twitter  : (url, message) => `http://twitter.com/share?url=${url}${!!message ? `&text=${message}` : \"\" }`,\n  linkedin : (url, message) => `https://www.linkedin.com/shareArticle?url=${url}${!!message ? `&summary=${message}` : \"\"}`,\n  whatsapp : (url, message) => `https://wa.me/?text=${message}%20${url}`,\n  email    : (url, message) => `mailto:?subject=Personal Happy Planet Index calculator&body=${message}%20${url}`,\n  messenger: (url, message) => `fb-messenger://share?link=${url}`,\n};\n\nconst getChannelUrl = (channel, url, message) => {\n  let _url      = encodeURIComponent(url),\n      _message  = encodeURIComponent(message.trim());\n  return channels[channel](_url, _message);\n};\n\nconst da = (el, attribute, def = \"\") => {\n  if(el.hasAttribute(`data-social-${attribute}`)) return el.getAttribute(`data-social-${attribute}`);\n  return def;\n};\n\nconst onClickShareLink = (_target, _event) => {\n  let channel = da(_target, 'channel', null),\n      section = da(_target, 'section', \"\"),\n      message = da(_target, 'message', \"\");\n\n  let shareUrl = da(_target, 'url', `${window.location.href}`),\n      targetUrl = getChannelUrl(channel, shareUrl, message);\n\n  if(channel == \"whatsapp\" || channel == \"email\" || channel == \"messenger\") return _target.setAttribute('href', targetUrl);\n  else _event.preventDefault();\n\n  return window.open(targetUrl, \"popup\", \"width=500,height=400\");\n};\n\n\nconst initShareLinks = () => {\n  document.addEventListener('click', e => {\n    let currentNode = e.target;\n    if(e.target && e.target.nodeName && e.target.nodeName.toLowerCase() == 'div') return false; // bail on traversing the document if we hit a div element\n    while(true) { // search parents to find out if we've clicked a share link\n      if(currentNode.matches('[data-social]')) {\n        return onClickShareLink(currentNode, e);\n      } else if(currentNode != e.currentTarget && currentNode != document.body && (currentNode.nodeName && currentNode.nodeName.toLowerCase() != 'div')) {\n        currentNode = currentNode.parentNode;\n      } else {\n        return false;\n      }\n    }\n  });\n};\n\nexport default initShareLinks;\n","// Configure your import map in config/importmap.rb. Read more: https://github.com/rails/importmap-rails\nimport \"@hotwired/turbo-rails\";\nimport { Turbo } from \"@hotwired/turbo-rails\"\n\nimport Swiper from 'swiper';\nimport { Navigation, Scrollbar } from 'swiper/modules';\nimport carbonFootprintChart from './modules/carbon-footprint-chart';\nimport lifeExpectancyChart from './modules/life-expectancy-chart';\nimport wellbeingChart from './modules/wellbeing-chart';\nimport CountryShapes from './modules/country-svg';\nimport modals from './modules/modals';\nimport initShareLinks from './modules/social-share';\n\nfunction stripAndTruncate(htmlString, maxLength) {\n  // Use a DOM parser to safely parse the HTML string and extract text\n  var tempDiv = document.createElement(\"div\");\n  tempDiv.innerHTML = htmlString;\n  var text = tempDiv.textContent || tempDiv.innerText || \"\";\n\n  // Truncate the text to the specified maxLength\n  if (text.length > maxLength) {\n    return text.substring(0, maxLength) + '...';\n  } else {\n    return text;\n  }\n}\n\nconst loadtips = () => {\n  const generateTurboStream = (data) => {\n    // Construct the turbo-stream update message as a string\n    let content = '';\n    if(data.length) {\n      content = `\n        <div class=\"results-page__breakdown\">\n          <div class=\"content-wrapper\">\n            <h2>Tips and advice</h2>\n            <div class=\"tips\">\n            ${data.map((tip, i) => (\n              `\n                <article class=\"tips-card\">\n                  <a href=\"#\" title=\"\" class=\"tips-card__link js-tip-item\" data-index=\"${i}\" data-template=\"#tips-item-${ i }\">\n                    <span class=\"title\">${tip.title}</span>\n                    <span class=\"summary\">${tip.introduction || stripAndTruncate(tip.content, 104)}</span>\n                    <span class=\"icon\"><svg width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n                      <path d=\"M15.75 0H6.72638C5.49 0 4.5 0.99 4.5 2.2275V11.25C4.5 12.4875 5.5125 13.5 6.75 13.5H15.75C16.9875 13.5 18 12.4875 18 11.25V2.25C18 1.0125 16.9875 0 15.75 0ZM15.75 11.25H6.75V2.25H15.75V11.25ZM2.25 10.125C2.25 9.50368 1.74632 9 1.125 9V9C0.50368 9 0 9.50368 0 10.125V15.75C0 16.9875 1.0125 18 2.25 18H7.875C8.49632 18 9 17.4963 9 16.875V16.875C9 16.2537 8.49632 15.75 7.875 15.75H2.25V10.125Z\" fill=\"#272727\"/>\n                    </svg></span>\n                  </a>\n                  <script id=\"tips-item-${ i }\" type=\"text/template\">\n                    <h3>${tip.title}</h3>\n                    <p>${tip.content}</p>\n                  </script>\n                </article>\n              `\n            )).join('')}\n          </div>\n          <div class=\"tips__footnote\">\n            This project is just beginning. If you know of any other cool campaigns or organisations that are working towards solutions for communities or your country as a whole to achieve sustainable wellbeing, let us know by emailing us on <a href=\"mailto:happyplanet@hotorcool.org\">happyplanet@hotorcool.org</a>.\n          </div>\n        </div>\n      `;\n    }\n    \n    return `<turbo-stream action=\"replace\" target=\"tips_frame\">\n      <template>${content}</template>\n    </turbo-stream>`;\n  }\n\n  const fetchTips = ()  => {\n    fetch('tips_advice.json')\n      .then(response => response.json())\n      .then(data => {\n        // console.log('LOADING TIPS', data);\n        // Handle the data, assuming the response is HTML\n        Turbo.renderStreamMessage(generateTurboStream(data));\n      });\n  };\n\n  fetchTips();\n};\n\n/** animate scrolling */\nconst easeOut = t => 1 - Math.pow(1 - t, 1.675); // eslint-disable-line no-restricted-properties\n\nconst scrollToElement = (\n  startTime, currentTime, duration, scrollEndElemTop, startScrollOffset, container = null,\n) => {\n  const runtime = currentTime - startTime;\n  let progress = runtime / duration;\n\n  progress = Math.min(progress, 1); // eslint-disable-line no-restricted-properties\n\n  const ease = easeOut(progress);\n\n  (container || window).scroll(0, startScrollOffset + (scrollEndElemTop * ease));\n\n  if (runtime < duration) {\n    requestAnimationFrame((timestamp) => {\n      const currentTime = timestamp || new Date().getTime();\n      scrollToElement(\n        startTime,\n        currentTime,\n        duration,\n        scrollEndElemTop,\n        startScrollOffset,\n        container,\n      );\n    });\n  }\n};\n\nconst isElement = element => element instanceof Element || element instanceof HTMLDocument;\n\n/**\n  * smooth scroll to an anchor point\n  * useage:\n  *\n  * scrollTo('anchorID', 1000);\n  *\n  */\nexport const scrollTo = (selector, time = 1200, offset = 0) => {\n  const target = isElement(selector) ? selector : document.querySelector(selector);\n\n  requestAnimationFrame((timestamp) => {\n    const stamp = timestamp || new Date().getTime();\n    const duration = time;\n    const start = stamp;\n\n    const startScrollOffset = window.pageYOffset;\n    const scrollEndElemTop = target.getBoundingClientRect().top + offset;\n\n    scrollToElement(start, stamp, duration, scrollEndElemTop, startScrollOffset);\n  });\n};\n\ndocument.addEventListener(\"turbo:load\", () => {\n  CountryShapes.init();\n  modals();\n  initShareLinks();\n\n  if(document.querySelector('.share-image-preview')) {\n    const checkImageInterval = setInterval(() => {\n      fetch('shareable_image_url.json')\n        .then(response => response.json())\n        .then(data => {\n          console.log('Share image', data.url);\n          if (data.url) {\n            clearInterval(checkImageInterval);\n            document.querySelector('.share-image-preview').src = data.url;\n          }\n        });\n    }, 1000);\n  }\n\n  if(document.querySelector('#tips_frame')) {\n    loadtips();\n  }\n\n  const carousel = document.querySelector('.js-answer-swiper');\n  if(carousel) {\n    const swiper = new Swiper(carousel, {\n      modules: [Navigation, Scrollbar],\n      speed: 300,\n      loop: false,\n      cssMode: false,\n      slidesPerView: 1,\n      slidesPerGroup: 1,\n      spaceBetween: 51,\n      navigation: {\n        nextEl: `.swiper-button-next`,\n        prevEl: `.swiper-button-prev`,\n      },\n      scrollbar: {\n        el: `.js-swiper-scrollbar`,\n        draggable: true,\n      },\n      breakpoints: {\n        768: {\n          slidesPerView: 2,\n          slidesPerGroup: 2,\n        },\n        1200: {\n          spaceBetween: 51,\n          slidesPerView: 3,\n          slidesPerGroup: 3,\n        },\n      },\n    });\n  }\n\n  if(document.querySelector('.quiz-page')) {\n    document.querySelector('.form__input')?.focus();\n  }\n\n  if(document.querySelector('.js-question-form')) {\n    const form = document.querySelector('.js-question-form');\n\n\n    const numberField = form.querySelector('.js-number-field');\n    if(numberField) {\n      numberField.addEventListener('input', (ev) => {\n        const number = parseInt(numberField.value);\n\n        if(number < 1907 || number > 2023) {\n          numberField.setCustomValidity('Invalid year.');\n        } else {\n          numberField.setCustomValidity('');\n        }\n      });\n    }\n\n    form.addEventListener('change', ev => {\n      const feedback = ev.currentTarget.querySelector('.question__feedback')\n      if(feedback) {\n        feedback.classList.toggle('show', true);\n        scrollTo(feedback, 900, -300);\n      }\n    });\n  }\n\n\n  if(document.querySelector('.js-carbon-footprint-chart')) {\n    carbonFootprintChart(\n      document.querySelector('.js-carbon-footprint-chart')\n    );\n  }\n  \n  if(document.querySelector('.js-life-expectancy-chart')) {\n    lifeExpectancyChart(\n      document.querySelector('.js-life-expectancy-chart')\n    );\n  }\n  \n  if(document.querySelector('.js-wellbeing-chart')) {\n    wellbeingChart(\n      document.querySelector('.js-wellbeing-chart')\n    );\n  }\n});","\n\nconst initTipsDialog = () => {\n  const tipsDialog = document.querySelector('.js-tips-modal');\n\n  if(!tipsDialog) return;\n\n  const closeModal = document.querySelector('.js-close-tips-modal');\n\n  const prevTip = document.querySelector('.js-tips-prev');\n  const nextTip = document.querySelector('.js-tips-next');\n\n  const loadModalForTip = (index) => {\n    const template = document.querySelector(`#tips-item-${ index }`);\n    tipsDialog.querySelector('.js-tips-modal-content').innerHTML = template.innerHTML;\n    tipsDialog.setAttribute('data-current', index);\n    tipsDialog.showModal();\n  };\n  \n  const onClickTip = (clickedTip, ev) => {\n    ev.preventDefault();\n\n    loadModalForTip(clickedTip.dataset.index);\n  };\n\n  document.addEventListener('click', e => {\n    let currentNode = e.target;\n    if(e.target && e.target.nodeName && e.target.nodeName.toLowerCase() == 'div') return false; // bail on traversing the document if we hit a div element\n    while(true) { // search parents to find out if we've clicked a share link\n      if(currentNode.matches('.js-tip-item')) {\n        return onClickTip(currentNode, e);\n      } else if(currentNode != e.currentTarget && currentNode != document.body && (currentNode.nodeName && currentNode.nodeName.toLowerCase() != 'div')) {\n        currentNode = currentNode.parentNode;\n      } else {\n        return false;\n      }\n    }\n  });\n\n  prevTip.addEventListener('click', (ev) => {\n    const tipsMax = Math.max(...Array.from(document.querySelectorAll('.js-tip-item')).map(tip => parseInt(tip.dataset.index)));\n    const current = parseInt(tipsDialog.dataset.current);\n    const previous = current - 1 < 0 ? tipsMax : current - 1;\n    loadModalForTip(previous);\n  });\n\n  nextTip.addEventListener('click', (ev) => {\n    const tipsMax = Math.max(...Array.from(document.querySelectorAll('.js-tip-item')).map(tip => parseInt(tip.dataset.index)));\n    const current = parseInt(tipsDialog.dataset.current);\n    const next = current + 1 > tipsMax ? 0 : current + 1;\n    loadModalForTip(next);\n  });\n\n  closeModal.addEventListener('click', (ev) => {\n    ev.preventDefault();\n    tipsDialog.close();\n  });\n};\n\nconst initShareDialog = () => {\n  const shareDialog = document.querySelector('.js-share-modal');\n\n  if(!shareDialog) return;\n\n  const shareButton = document.querySelector('.js-share-results-button');\n  const closeModal = document.querySelector('.js-close-share-modal');\n\n  shareButton.addEventListener('click', (ev) => {\n    ev.preventDefault();\n    shareDialog.showModal();\n  });\n\n  closeModal.addEventListener('click', (ev) => {\n    ev.preventDefault();\n    shareDialog.close();\n  });\n};\n\nconst modals = () => {\n  initTipsDialog();\n  initShareDialog();\n\n  // const dialogs = document.querySelectorAll('dialog:not(.ready)');\n  const dialogs = document.querySelectorAll('dialog');\n\n  dialogs.forEach(_dialog => {\n    _dialog.addEventListener('mousedown', event => {\n      if (event.target === event.currentTarget) {\n        event.currentTarget.close()\n      }\n    });\n  });\n\n  // dialogs.forEach(_dialog => _dialog.classList.add('ready'));\n};\n\nexport default modals;\n","\nconst lifeExpectancyChart = (element) => {\n\n\n  const createChart = (data) => {\n    const highest = data.highest.score;\n\n    const getSegementHeight = (value) => {\n      return Math.round((value / highest) * 100);\n    };\n\n    const segments = {\n      lowest: getSegementHeight(data.lowest.score),\n      result: getSegementHeight(data.result.score),\n      closest: getSegementHeight(data.closest.score),\n      highest: 100,\n    };\n\n    return `\n      <div class=\"le-chart\">\n        <div class=\"le-chart__wrapper\">\n          ${segments.lowest > 0 ?\n            `<div class=\"le-chart__segment lowest\" style=\"height: ${segments.lowest}%;\">\n              <span>Lowest</span>\n              <div class=\"le-chart__score\">\n                <span>${data.lowest.score}</span> years\n              </div>\n            </div>` : ''}\n          ${data.result.score <= data.closest.score ? (`\n            ${segments.result > 0 ?\n              `<div class=\"le-chart__segment current ${data.result.colour}\" style=\"height: ${segments.result}%;\">\n                <span>&nbsp;</span>\n                <div class=\"le-chart__score\">\n                  <span>${data.result.score}</span> years\n                </div>\n              </div>` : ''}\n            ${segments.closest > 0 ?\n              `<div class=\"le-chart__segment closest\" style=\"height: ${segments.closest}%;\">\n                <span>&nbsp;</span>\n                <div class=\"le-chart__score\">\n                  <span>${data.closest.score}</span> years\n                </div>\n              </div>` : ''}\n          `) : (`\n            ${segments.closest > 0 ?\n              `<div class=\"le-chart__segment closest\" style=\"height: ${segments.closest}%;\">\n                <span>&nbsp;</span>\n                <div class=\"le-chart__score\">\n                  <span>${data.closest.score}</span> years\n                </div>\n              </div>` : ''}\n            ${segments.result > 0 ?\n              `<div class=\"le-chart__segment current ${data.result.colour}\" style=\"height: ${segments.result}%;\">\n                <span>&nbsp;</span>\n                <div class=\"le-chart__score\">\n                  <span>${data.result.score}</span> years\n                </div>\n              </div>` : ''}\n          `)}\n          ${segments.highest > 0 ?\n            `<div class=\"le-chart__segment highest\" style=\"height: ${segments.highest}%;\">\n              <span>Highest</span>\n              <div class=\"le-chart__score\">\n                <span>${data.highest.score}</span> years\n              </div>\n            </div>` : ''}\n        </div>\n        <div class=\"le-chart__keys\">\n          ${segments.lowest > 0 ? `<div class=\"le-chart__key\">${data.lowest.name}</div>` : ''}\n          ${data.result.score <= data.closest.score ? (`\n            ${segments.result > 0 ? '<div class=\"le-chart__key\">Your life expectancy</div>' : ''}\n            ${segments.closest > 0 ? `<div class=\"le-chart__key\">${data.closest.name}</div>` : ''}\n          `) : (`\n            ${segments.closest > 0 ? `<div class=\"le-chart__key\">${data.closest.name}</div>` : ''}\n            ${segments.result > 0 ? '<div class=\"le-chart__key\">Your life expectancy</div>' : ''}\n          `)}\n          ${segments.highest > 0 ? `<div class=\"le-chart__key\">${data.highest.name}</div>` : ''}\n        </div>\n      </div>\n    `;\n  };\n\n\n  element.innerHTML = createChart(\n    JSON.parse(element.dataset.leData)\n  );\n};\n\n\nexport default lifeExpectancyChart;\n\n","\nconst wellbeingChart = (element) => {\n\n  const createChart = (data) => {\n    const segments = [\n      {\n        label: 'Take notice',\n        percent: data.little_things,\n      }, {\n        label: 'Keep learning',\n        percent: data.learning_frequency,\n      }, {\n        label: 'Give',\n        percent: data.charity_frequency,\n      }, {\n        label: 'Connect',\n        percent: data.socialise_frequency,\n      }, {\n        label: 'Be active',\n        percent: data.exercise_frequency,\n      },\n    ];\n\n    return `\n      <div class=\"wb-chart\">\n        <div class=\"wb-chart__wrapper\">\n          ${segments.map(segment => (\n           `<div class=\"wb-chart__segment\">\n              <div class=\"wb-chart__fill\" style=\"height: ${segment.percent}%;\"></div>\n            </div>`\n          )).join('')}\n        </div>\n        <div class=\"wb-chart__keys\">\n          ${segments.map(segment => (\n            `<div class=\"wb-chart__key\">${segment.label}</div>`\n          )).join('')}\n        </div>\n      </div>\n    `;\n  };  \n\n  element.innerHTML = createChart(\n    JSON.parse(element.dataset.wbData)\n  );\n};\n\nexport default wellbeingChart;"],"names":["logger","console","undefined","WebSocket","log","messages","this","enabled","push","Date","now","adapters","getTime","secondsSince","time","ConnectionMonitor","constructor","connection","visibilityDidChange","bind","reconnectAttempts","start","isRunning","startedAt","stoppedAt","startPolling","addEventListener","staleThreshold","stop","stopPolling","removeEventListener","recordPing","pingedAt","recordConnect","disconnectedAt","recordDisconnect","poll","clearTimeout","pollTimeout","setTimeout","reconnectIfStale","getPollInterval","reconnectionBackoffRate","Math","pow","min","random","connectionIsStale","refreshedAt","disconnectedRecently","reopen","document","visibilityState","isOpen","message_types","protocols","supportedProtocols","slice","length","indexOf","Connection","consumer","open","subscriptions","monitor","disconnected","send","data","webSocket","JSON","stringify","isActive","getState","socketProtocols","subprotocols","uninstallEventHandlers","url","installEventHandlers","close","allowReconnect","error","reopenDelay","getProtocol","protocol","isState","triedToReconnect","isProtocolSupported","call","states","state","readyState","toLowerCase","eventName","events","handler","prototype","message","event","identifier","reason","reconnect","type","parse","welcome","reconnectAttempted","reload","disconnect","ping","confirmation","confirmSubscription","notify","reconnected","rejection","reject","notifyAll","willAttemptReconnect","Subscription","params","mixin","object","properties","key","value","extend","perform","action","command","unsubscribe","remove","pendingSubscriptions","guarantee","subscription","startGuaranteeing","forget","filter","s","stopGuaranteeing","retrySubscribing","retryTimeout","map","subscribe","Subscriptions","guarantor","create","channelName","channel","add","ensureActiveConnection","findAll","sendCommand","callbackName","args","Consumer","_url","test","a","createElement","href","replace","createWebSocketURL","connect","addSubProtocol","subprotocol","createConsumer","name","element","head","querySelector","getAttribute","getConfig","default_mount_path","countryISOMapping","AFG","ALA","ALB","DZA","ASM","AND","AGO","AIA","ATA","ATG","ARG","ARM","ABW","AUS","AUT","AZE","BHS","BHR","BGD","BRB","BLR","BEL","BLZ","BEN","BMU","BTN","BOL","BES","BIH","BWA","BVT","BRA","VGB","IOT","BRN","BGR","BFA","BDI","KHM","CMR","CAN","CPV","CYM","CAF","TCD","CHL","CHN","HKG","MAC","CXR","CCK","COL","COM","COG","COD","COK","CRI","CIV","HRV","CUB","CUW","CYP","CZE","DNK","DJI","DMA","DOM","ECU","EGY","SLV","GNQ","ERI","EST","ETH","FLK","FRO","FJI","FIN","FRA","GUF","PYF","ATF","GAB","GMB","GEO","DEU","GHA","GIB","GRC","GRL","GRD","GLP","GUM","GTM","GGY","GIN","GNB","GUY","HTI","HMD","VAT","HND","HUN","ISL","IND","IDN","IRN","IRQ","IRL","IMN","ISR","ITA","JAM","JPN","JEY","JOR","KAZ","KEN","KIR","PRK","KOR","KWT","KGZ","LAO","LVA","LBN","LSO","LBR","LBY","LIE","LTU","LUX","MKD","MDG","MWI","MYS","MDV","MLI","MLT","MHL","MTQ","MRT","MUS","MYT","MEX","FSM","MDA","MCO","MNG","MNE","MSR","MAR","MOZ","MMR","NAM","NRU","NPL","NLD","ANT","NCL","NZL","NIC","NER","NGA","NIU","NFK","MNP","NOR","OMN","PAK","PLW","PSE","PAN","PNG","PRY","PER","PHL","PCN","POL","PRT","PRI","QAT","REU","ROU","RUS","RWA","BLM","SHN","KNA","LCA","MAF","SPM","VCT","WSM","SMR","STP","SAU","SEN","SRB","SYC","SLE","SGP","SXM","SVK","SVN","SLB","SOM","ZAF","SGS","SSD","ESP","LKA","SDN","SUR","SJM","SWZ","SWE","CHE","SYR","TWN","TJK","TZA","THA","TLS","TGO","TKL","TON","TTO","TUN","TUR","TKM","TCA","TUV","UGA","UKR","ARE","GBR","USA","UMI","URY","UZB","VUT","VEN","VNM","VIR","WLF","ESH","YEM","ZMB","ZWE","XKX","module","exports","countryCode","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__","n","getter","__esModule","d","definition","o","Object","defineProperty","enumerable","get","obj","prop","hasOwnProperty","r","Symbol","toStringTag","raise","errorConstructor","requestSubmit","submitter","form","HTMLElement","TypeError","DOMException","validateSubmitter","click","hidden","appendChild","removeChild","HTMLFormElement","submittersByForm","WeakMap","clickCaptured","target","Element","Node","parentElement","candidate","closest","findSubmitterFromClickTarget","set","Event","window","prototypeOfSubmitEvent","SubmitEvent","navigator","vendor","FrameLoadingStyle","eager","lazy","FrameElement","static","loaded","Promise","resolve","observedAttributes","super","delegate","delegateConstructor","connectedCallback","disconnectedCallback","sourceURLReloaded","attributeChangedCallback","loadingStyleChanged","sourceURLChanged","disabledChanged","src","setAttribute","removeAttribute","refresh","loading","disabled","hasAttribute","autoscroll","complete","isLoading","ownerDocument","isPreview","documentElement","expandURL","locatable","URL","toString","baseURI","getAnchor","anchorMatch","hash","match","getAction$1","locationIsVisitable","location","rootLocation","baseURL","prefix","origin","pathname","endsWith","getPrefix","startsWith","isPrefixedBy","split","getPathComponents","getLastPathComponent","getRequestURL","anchor","toCacheKey","FetchResponse","response","succeeded","ok","failed","clientError","statusCode","serverError","redirected","isHTML","contentType","status","header","responseText","clone","text","responseHTML","headers","activateScriptElement","createdScriptElement","cspNonce","getMetaContent","nonce","textContent","async","destinationElement","sourceElement","attributes","copyElementAttributes","dispatch","cancelable","detail","CustomEvent","bubbles","composed","isConnected","dispatchEvent","nextRepaint","nextEventLoopTick","nextAnimationFrame","requestAnimationFrame","parseHTMLDocument","html","DOMParser","parseFromString","unindent","strings","values","lines","reduce","result","string","i","interpolate","indent","line","join","uuid","Array","from","_","floor","attributeName","elements","markAsBusy","localName","clearBusyState","waitForLoad","timeoutInMilliseconds","onComplete","once","getHistoryMethodForAction","history","replaceState","pushState","getVisitAction","isAction","getMetaElement","content","findClosestRecursively","selector","assignedSlot","getRootNode","host","elementIsFocusable","focus","queryAutofocusableElement","elementOrDocumentFragment","querySelectorAll","find","getLocationForLink","link","LimitedSet","Set","maxSize","size","oldestValue","next","delete","recentRequests","nativeFetch","fetch","fetchWithTurboHeaders","options","modifiedHeaders","Headers","requestUID","append","fetchMethodFromString","method","FetchMethod","post","put","patch","fetchEnctypeFromString","encoding","FetchEnctype","multipart","plain","urlEncoded","FetchRequest","abortController","AbortController","_value","requestBody","URLSearchParams","enctype","body","buildResourceAndBody","fetchOptions","credentials","redirect","defaultHeaders","signal","abortSignal","referrer","fetchBody","isSafe","searchParams","FormData","fetchMethod","search","entries","cancel","abort","prepareRequest","requestStarted","fetchRequest","receive","requestErrored","requestFinished","fetchResponse","defaultPrevented","requestPreventedHandlingResponse","requestSucceededWithResponse","requestFailedWithResponse","Accept","acceptResponseType","mimeType","requestInterception","resume","request","resource","entriesExcludingFiles","mergeIntoURLSearchParams","File","AppearanceObserver","started","intersectionObserver","IntersectionObserver","intersect","observe","unobserve","lastEntry","isIntersecting","elementAppearedInViewport","StreamMessage","wrap","template","innerHTML","createDocumentFragment","fragment","streamElement","importNode","inertScriptElement","templateElement","replaceWith","importStreamElements","prefetchCache","expire","setLater","ttl","clear","FormSubmissionState","initialized","requesting","waiting","receiving","stopping","stopped","FormSubmission","confirmMethod","_element","_submitter","confirm","formElement","mustRedirect","getMethod","formAction","getAction","formElementAction","getFormAction","formData","buildFormData","getEnctype","confirmationMessage","token","cookieName","cookie","decodeURIComponent","getCookieValue","requestAcceptsTurboStreamResponse","_request","setSubmitsWith","formSubmission","formSubmissionStarted","success","formSubmissionFailedWithResponse","requestMustRedirect","responseSucceededWithoutRedirect","Error","formSubmissionErrored","formSubmissionSucceededWithResponse","resetSubmitterText","formSubmissionFinished","submitsWith","matches","originalSubmitText","input","some","Snapshot","activeElement","children","hasAnchor","getElementForAnchor","firstAutofocusableElement","permanentElements","queryPermanentElementsAll","getPermanentElementById","id","getPermanentElementMapForSnapshot","snapshot","permanentElementMap","currentPermanentElement","newPermanentElement","node","FormSubmitObserver","eventTarget","submitCaptured","submitBubbled","submissionDoesNotDismissDialog","getElementsByName","HTMLIFrameElement","submissionDoesNotTargetIFrame","willSubmitForm","preventDefault","stopImmediatePropagation","formSubmitted","View","scrollToAnchor","scrollToElement","focusElement","scrollToPosition","x","y","scrollToAnchorFromLocation","scrollIntoView","scrollRoot","scrollTo","scrollToTop","render","renderer","shouldRender","willRender","newSnapshot","shouldInvalidate","renderPromise","prepareToRenderSnapshot","renderInterception","renderElement","renderMethod","allowsImmediateRender","renderSnapshot","viewRenderedSnapshot","preloadOnLoadLinksForView","finishRenderingSnapshot","invalidate","reloadReason","viewInvalidated","markAsPreview","prepareToRender","markVisitDirection","direction","unmarkVisitDirection","finishRendering","FrameView","missing","LinkInterceptor","clickBubbled","linkClicked","willVisit","respondsToEventTarget","clickEvent","shouldInterceptLinkClick","originalEvent","linkClickIntercepted","_event","LinkClickObserver","MouseEvent","clickEventIsSignificant","composedPath","doesNotTargetIFrame","willFollowLinkToLocation","followedLinkToLocation","isContentEditable","which","altKey","ctrlKey","metaKey","shiftKey","FormLinkClickObserver","linkInterceptor","canPrefetchRequestToLocation","prefetchAndCacheRequestToLocation","willSubmitFormLinkToLocation","assign","turboFrame","turboAction","turboConfirm","submittedFormLinkToLocation","Bardo","preservingPermanentElements","callback","bardo","enter","leave","enteringBardo","replaceNewPermanentElementWithPlaceholder","replaceCurrentPermanentElementWithClone","replacePlaceholderWithPermanentElement","leavingBardo","permanentElement","placeholder","createPlaceholderForPermanentElement","cloneNode","getPlaceholderById","placeholders","Renderer","currentSnapshot","promise","resolvingFunctions","focusFirstAutofocusableElement","connectedSnapshot","contains","currentElement","newElement","FrameRenderer","destinationRange","createRange","selectNodeContents","deleteContents","frameElement","sourceRange","extractContents","loadFrameElement","scrollFrameIntoView","activateScriptElements","willRenderFrame","firstElementChild","block","behavior","defaultValue","readScrollBehavior","newScriptElements","activatedScriptElement","ProgressBar","defaultCSS","animationDuration","hiding","visible","stylesheetElement","createStylesheetElement","progressElement","createProgressElement","installStylesheetElement","setValue","show","installProgressElement","startTrickling","hide","fadeProgressElement","uninstallProgressElement","stopTrickling","insertBefore","firstChild","style","width","opacity","parentNode","trickleInterval","setInterval","trickle","clearInterval","className","HeadSnapshot","detailsByOuterHTML","elementIsNoscript","elementWithoutNonce","outerHTML","details","elementType","tracked","elementIsTracked","trackedElementSignature","keys","getScriptElementsNotInSnapshot","getElementsMatchingTypeNotInSnapshot","getStylesheetElementsNotInSnapshot","matchedType","provisionalElements","getMetaValue","findMetaElementByName","elementIsMetaElementWithName","elementIsScript","tagName","elementIsStylesheet","PageSnapshot","fromHTMLString","fromDocument","fromElement","headSnapshot","clonedElement","selectElements","clonedSelectElements","index","source","option","selectedOptions","selected","clonedPasswordInput","lang","headElement","getSetting","cacheControlValue","isPreviewable","isCacheable","isVisitable","prefersViewTransitions","shouldMorphPage","shouldPreserveScrollPosition","ViewTransitioner","renderChange","useViewTransition","viewTransitionsAvailable","then","startViewTransition","finished","defaultOptions","historyChanged","visitCachedSnapshot","updateHistory","shouldCacheSnapshot","acceptsStreamResponse","VisitState","Direction","advance","restore","Visit","timingMetrics","followedRedirect","scrolled","snapshotCached","viewTransitioner","restorationIdentifier","snapshotHTML","isSamePage","locationWithActionIsSamePage","isPageRefresh","view","adapter","restorationData","getRestorationDataForIdentifier","silent","recordTimingMetric","visitStarted","cancelRender","visitCompleted","followRedirect","fail","visitFailed","changeHistory","update","issueRequest","hasPreloadedResponse","simulateRequest","shouldIssueRequest","startRequest","recordResponse","finishRequest","visitRequestStarted","isSuccessful","visitRequestCompleted","visitRequestFailedWithStatusCode","visitRequestFinished","loadResponse","cacheSnapshot","renderPageSnapshot","visitRendered","renderError","getCachedSnapshot","getCachedSnapshotForLocation","getPreloadedSnapshot","hasCachedSnapshot","loadCachedSnapshot","redirectedToLocation","visitProposedToLocation","goToSamePageAnchor","performScroll","_response","_error","forceReloaded","scrollToRestoredPosition","visitScrolledToSamePageLocation","lastRenderedLocation","scrollPosition","metric","getTimingMetrics","frame","shouldTransitionTo","renderPage","cancelAnimationFrame","BrowserAdapter","progressBar","session","startVisit","visit","showVisitProgressBarAfterDelay","showProgressBar","context","_visit","hideVisitProgressBar","pageInvalidated","_formSubmission","showFormProgressBarAfterDelay","hideFormProgressBar","visitProgressBarTimeout","progressBarDelay","formProgressBarTimeout","CacheObserver","deprecatedSelector","removeTemporaryElements","temporaryElements","temporaryElementsWithDeprecation","warn","FrameRedirector","formSubmitObserver","_location","meta","submissionIsNavigatable","elementIsNavigatable","History","pageLoaded","currentIndex","onPopState","onPageLoad","turbo","restorationIndex","updateRestorationData","additionalData","assumeControlOfScrollRestoration","previousScrollRestoration","scrollRestoration","relinquishControlOfScrollRestoration","shouldHandlePopState","historyPoppedToLocationWithRestorationIdentifierAndDirection","pageIsLoaded","LinkPrefetchObserver","capture","passive","cached","turboFrameTarget","Number","unfetchableLink","linkToTheSamePage","linkOptsOut","nonSafeLink","eventPrevented","includes","turboPrefetchParent","turboMethod","isUJS","Navigator","proposeVisit","allowsVisitingLocationWithAction","currentVisit","submitForm","clearSnapshotCache","visitOptions","currentAnchor","isRestorationToTop","oldURL","newURL","PageObserver","stage","interpretReadyState","pageWillUnload","pageIsInteractive","pageIsComplete","pageBecameInteractive","ScrollObserver","onScroll","updatePosition","pageXOffset","pageYOffset","position","scrollPositionChanged","StreamMessageRenderer","permanentElementsInDocument","permanentElementInDocument","elementInStream","getPermanentElementMapForFragment","generatedID","elementWithAutofocus","nodeListOfStreamElements","firstAutofocusableElementInStreams","willAutofocusId","elementToAutofocus","getElementById","withAutofocusFromFragment","activeElementBeforeRender","activeElementAfterRender","reader","before","around","restoreFocusTo","elementToFocus","withPreservedFocus","StreamObserver","sources","inspectFetchResponse","connectStreamSource","streamSourceIsConnected","receiveMessageEvent","disconnectStreamSource","has","fetchResponseFromEvent","fetchResponseIsStream","receiveMessageResponse","receiveMessageHTML","receivedMessageFromStream","ErrorRenderer","replaceChild","replaceHeadAndBody","newHead","replaceableElement","scriptElements","Idiomorph","EMPTY_SET","defaults","morphStyle","callbacks","beforeNodeAdded","noOp","afterNodeAdded","beforeNodeMorphed","afterNodeMorphed","beforeNodeRemoved","afterNodeRemoved","beforeAttributeUpdated","shouldPreserve","elt","shouldReAppend","shouldRemove","afterHeadMorphed","morphNormalizedContent","oldNode","normalizedNewContent","ctx","oldHead","promises","handleHeadElement","all","ignore","morphChildren","bestMatch","newContent","bestElement","score","newScore","scoreElement","nextSibling","findBestNodeMatch","previousSibling","morphedNode","morphOldNodeTo","stack","added","pop","insertSiblings","ignoreValueOfActiveElement","possibleActiveElement","ignoreActiveValue","ignoreActive","isSoftMatch","HTMLHeadElement","to","nodeType","fromAttributes","toAttributes","fromAttribute","ignoreAttribute","toAttribute","nodeValue","HTMLInputElement","fromValue","toValue","syncBooleanAttribute","HTMLOptionElement","HTMLTextAreaElement","syncInputValue","syncNodeFrom","newParent","oldParent","newChild","nextNewChild","insertionPoint","removeIdsFromConsideration","isIdSetMatch","idSetMatch","findIdSetMatch","removeNodesBetween","softMatch","findSoftMatch","tempNode","removeNode","attr","updateType","ignoreUpdate","newHeadTag","currentHead","removed","preserved","nodesToAppend","headMergeStyle","srcToNewHeadNodes","Map","newHeadChild","currentHeadElt","inNewContent","isReAppended","isPreserved","newNode","newElt","createContextualFragment","_resolve","removedElement","kept","node1","node2","getIdIntersectionCount","startInclusive","endExclusive","newChildPotentialIdCount","potentialMatch","otherMatchCount","potentialSoftMatch","siblingSoftMatchCount","isIdInConsideration","deadIds","idIsWithinNode","targetNode","idMap","idSet","sourceSet","matchCount","populateIdMapForNode","nodeParent","idElements","current","createIdMap","oldContent","morph","config","Document","parser","contentWithSvgsRemoved","generatedByIdiomorph","htmlElement","parseContent","normalizedContent","dummyParent","normalizeContent","finalConfig","mergeDefaults","createMorphContext","PageRenderer","HTMLBodyElement","trackedElementsAreIdentical","mergeHead","replaceBody","currentHeadSnapshot","newHeadSnapshot","mergedHeadElements","mergeProvisionalElements","newStylesheetElements","copyNewHeadStylesheetElements","copyNewHeadScriptElements","removeUnusedDynamicStylesheetElements","activateNewBody","assignNewBody","loadingElements","newHeadStylesheetElements","newHeadScriptElements","unusedDynamicStylesheetElements","newHeadElements","newHeadProvisionalElements","currentHeadProvisionalElements","isCurrentElementInElementList","elementList","splice","isEqualNode","removeCurrentHeadProvisionalElements","copyNewHeadProvisionalElements","adoptNode","activateNewBodyScriptElements","newBodyScriptElements","oldHeadStylesheetElements","MorphRenderer","isMorphingTurboFrame","mutationType","forEach","SnapshotCache","snapshots","read","touch","write","unshift","trim","PageView","snapshotCache","viewWillCacheSnapshot","cachedSnapshot","Preloader","shouldPreloadLink","preloadURL","Cache","clearCache","resetCacheControl","exemptPageFromCache","exemptPageFromPreview","setMetaContent","extendURLWithDeprecatedProperties","defineProperties","deprecatedLocationPropertyDescriptors","absoluteURL","pageObserver","cacheObserver","linkPrefetchObserver","linkClickObserver","scrollObserver","streamObserver","formLinkClickObserver","frameRedirector","streamMessageRenderer","cache","drive","formMode","preloader","debouncedRefresh","pageRefreshDebouncePeriod","disable","registerAdapter","proposeVisitIfNavigatedWithAction","requestId","renderStreamMessage","setProgressBarDelay","delay","setFormMode","mode","fn","timeoutId","apply","debounce","isUnsafe","isStream","frameTarget","applicationAllowsFollowingLinkToLocation","getActionForLink","applicationAllowsVisitingLocation","notifyApplicationAfterVisitingLocation","notifyApplicationAfterPageLoad","notifyApplicationAfterVisitingSamePageLocation","notifyApplicationBeforeCachingSnapshot","notifyApplicationBeforeRender","_snapshot","_isPreview","notifyApplicationAfterRender","frameLoaded","notifyApplicationAfterFrameLoad","frameRendered","notifyApplicationAfterFrameRender","ev","notifyApplicationAfterClickingLinkToLocation","notifyApplicationBeforeVisitingLocation","newBody","timing","HashChangeEvent","submitterIsNavigatable","container","withinFrame","navigator$1","setConfirmMethod","Turbo","freeze","__proto__","TurboFrameMissingError","getFrameElementById","activateElement","currentURL","right","StreamActions","after","targetElements","e","templateContent","removeDuplicateTargetChildren","prepend","targetElement","StreamElement","performAction","beforeRenderEvent","duplicateChildren","c","existingChildren","flatMap","newChildrenIds","actionFunction","targetElementsById","targets","targetElementsByQuery","HTMLTemplateElement","description","newStream","StreamSourceElement","streamSource","EventSource","setConsumer","newConsumer","walk","RegExp","isArray","acc","m","fetchResponseLoaded","_fetchResponse","appearanceObserver","loadingStyle","sourceURL","currentNavigationElement","newFrame","_renderMethod","_newElement","previousFrameElement","replaceChildren","newFrameElement","extractForeignFrameElement","pageSnapshot","Response","wrapped","CSS","escape","customElements","define","currentScript","TurboCableStreamSourceElement","getConsumer","subscribeTo","received","dispatchMessageEvent","connected","subscriptionConnected","subscriptionDisconnected","MessageEvent","signed_stream_name","dataset","isBodyInit","formMethod","HTMLButtonElement","determineFormMethod","overrideMethod","determineFetchMethod","ssrDocument","blur","nodeName","createEvent","initEvent","childNodes","getElementsByTagName","createElementNS","hostname","doc","ssrWindow","userAgent","go","back","getComputedStyle","getPropertyValue","Image","screen","matchMedia","win","classesToTokens","classes","arguments","noExtend","nextSource","keysArray","nextIndex","len","nextKey","desc","getOwnPropertyDescriptor","__swiper__","el","varName","varValue","setProperty","animateCSSModeScroll","_ref","swiper","targetPosition","side","startPosition","translate","startTime","duration","speed","wrapperEl","scrollSnapType","cssModeFrameID","dir","isOutOfBound","animate","progress","max","easeProgress","cos","PI","currentPosition","overflow","showWarning","err","tag","classList","elementStyle","child","includeMargins","parseFloat","offsetWidth","support","deviceCached","browser","getSupport","smoothScroll","DocumentTouch","calcSupport","getDevice","overrides","_temp","platform","ua","device","ios","android","screenWidth","screenHeight","height","ipad","ipod","iphone","windows","macos","os","calcDevice","eventsEmitter","on","priority","self","eventsListeners","destroyed","onceHandler","off","__emitterProxy","_len","_key","onAny","eventsAnyListeners","offAny","eventHandler","emit","_len2","_key2","toggleSlideClasses","slideEl","condition","processLazyPreloader","imageEl","isElement","slideClass","lazyEl","lazyPreloaderClass","shadowRoot","unlazy","slides","preload","amount","lazyPreloadPrevNext","slidesPerView","slidesPerViewDynamic","ceil","activeIndex","grid","rows","activeColumn","preloadColumns","column","slideIndexLastInView","rewind","loop","realIndex","updateSize","clientWidth","clientHeight","isHorizontal","isVertical","parseInt","isNaN","updateSlides","getDirectionPropertyValue","label","getDirectionLabel","slidesEl","swiperSize","rtlTranslate","rtl","wrongRTL","isVirtual","virtual","previousSlidesLength","slidesLength","snapGrid","slidesGrid","slidesSizesGrid","offsetBefore","slidesOffsetBefore","offsetAfter","slidesOffsetAfter","previousSnapGridLength","previousSlidesGridLength","spaceBetween","slidePosition","prevSlideSize","virtualSize","marginLeft","marginRight","marginBottom","marginTop","centeredSlides","cssMode","gridEnabled","slideSize","initSlides","unsetSlides","shouldResetSlideSize","breakpoints","slide","updateSlide","slideStyles","currentTransform","transform","currentWebKitTransform","webkitTransform","roundLengths","paddingLeft","paddingRight","boxSizing","swiperSlideSize","abs","slidesPerGroup","slidesPerGroupSkip","effect","setWrapperSize","updateWrapperSize","newSlidesGrid","slidesGridItem","groups","slidesBefore","slidesAfter","groupSize","slideIndex","centeredSlidesBounds","allSlidesSize","slideSizeValue","maxSnap","snap","centerInsufficientSlides","allSlidesOffset","snapIndex","addToSnapGrid","addToSlidesGrid","v","watchOverflow","checkOverflow","watchSlidesProgress","updateSlidesOffset","backFaceHiddenClass","containerModifierClass","hasClassBackfaceClassAdded","maxBackfaceHiddenSlides","updateAutoHeight","activeSlides","newHeight","setTransition","getSlideByIndex","getSlideIndexByData","visibleSlides","offsetHeight","minusOffset","offsetLeft","offsetTop","swiperSlideOffset","cssOverflowAdjustment","updateSlidesProgress","offsetCenter","slideVisibleClass","slideFullyVisibleClass","visibleSlidesIndexes","slideOffset","slideProgress","minTranslate","originalSlideProgress","slideBefore","slideAfter","isFullyVisible","originalProgress","updateProgress","multiplier","translatesDiff","maxTranslate","isBeginning","isEnd","progressLoop","wasBeginning","wasEnd","isBeginningRounded","isEndRounded","firstSlideIndex","lastSlideIndex","firstSlideTranslate","lastSlideTranslate","translateMax","translateAbs","autoHeight","updateSlidesClasses","getFilteredSlide","activeSlide","prevSlide","nextSlide","nextEls","nextElementSibling","elementNextAll","prevEls","previousElementSibling","prev","elementPrevAll","slideActiveClass","slideNextClass","slidePrevClass","emitSlidesClasses","updateActiveIndex","newActiveIndex","previousIndex","previousRealIndex","previousSnapIndex","getVirtualRealIndex","aIndex","normalizeSlideIndex","getActiveIndexByTranslate","skip","firstSlideInColumn","activeSlideIndex","runCallbacksOnInit","updateClickedSlide","path","pathEl","slideFound","clickedSlide","clickedIndex","slideToClickedSlide","transitionEmit","runCallbacks","step","slideTo","internal","initial","animating","preventInteractionOnTransition","normalizedTranslate","normalizedGrid","normalizedGridNext","allowSlideNext","allowSlidePrev","setTranslate","transitionStart","transitionEnd","isH","t","_immediateVirtual","_cssModeVirtualInitialSet","initialSlide","onSlideToWrapperTransitionEnd","slideToLoop","newIndex","targetSlideIndex","cols","needLoopFix","loopFix","slideRealIndex","slideNext","perGroup","slidesPerGroupAuto","increment","loopPreventsSliding","_clientLeft","clientLeft","slidePrev","normalize","val","normalizedSnapGrid","prevSnap","prevSnapIndex","prevIndex","lastIndex","slideReset","slideToClosest","threshold","currentSnap","slideToIndex","slideSelector","loopedSlides","getSlideIndex","loopCreate","shouldFillGroup","shouldFillGrid","addBlankSlides","amountOfSlides","slideBlankClass","loopAddBlankSlides","recalcSlides","byController","byMousewheel","loopAdditionalSlides","fill","prependSlidesIndexes","appendSlidesIndexes","isNext","isPrev","slidesPrepended","slidesAppended","activeColIndexWithShift","colIndexToPrepend","__preventObserver__","swiperLoopMoveDOM","currentSlideTranslate","diff","touchEventsData","startTranslate","currentTranslate","shift","controller","control","loopParams","loopDestroy","newSlidesOrder","swiperSlideIndex","preventEdgeSwipe","startX","edgeSwipeDetection","edgeSwipeThreshold","innerWidth","onTouchStart","pointerId","targetTouches","touchId","pageX","touches","simulateTouch","pointerType","targetEl","touchEventsTarget","button","isTouched","isMoved","swipingClassHasValue","noSwipingClass","eventPath","noSwipingSelector","isTargetShadow","noSwiping","base","__closestFrom","found","closestElement","allowClick","swipeHandler","currentX","currentY","pageY","startY","allowTouchCallbacks","isScrolling","startMoving","touchStartTime","swipeDirection","allowThresholdMove","focusableElements","shouldPreventDefault","allowTouchMove","touchStartPreventDefault","touchStartForcePreventDefault","freeMode","onTouchMove","targetTouch","changedTouches","preventedByNestedSwiper","touchReleaseOnEdges","previousX","previousY","diffX","diffY","sqrt","touchAngle","atan2","preventTouchMoveFromPointerMove","touchMoveStopPropagation","nested","stopPropagation","touchesDiff","oneWayMovement","touchRatio","prevTouchesDirection","touchesDirection","isLoop","allowLoopFix","getTranslate","evt","allowMomentumBounce","grabCursor","setGrabCursor","loopSwapReset","disableParentSwiper","resistanceRatio","resistance","followFinger","onTouchEnd","isSafari","isWebView","touchEndTime","timeDiff","pathTree","lastClickTime","currentPos","swipeToLast","stopIndex","rewindFirstIndex","rewindLastIndex","ratio","longSwipesMs","longSwipes","longSwipesRatio","shortSwipes","navigation","nextEl","prevEl","onResize","setBreakpoint","isVirtualLoop","autoplay","running","paused","resizeTimeout","onClick","preventClicks","preventClicksPropagation","newProgress","previousTranslate","scrollLeft","scrollTop","onLoad","onDocumentTouchStart","documentTouchHandlerProceeded","touchAction","domMethod","swiperMethod","updateOnWindowResize","isGridEnabled","init","swiperElementNodeName","resizeObserver","createElements","eventsPrefix","virtualTranslate","breakpointsBase","uniqueNavElements","passiveListeners","wrapperClass","_emitClasses","moduleExtendParams","allModulesParams","moduleParamName","moduleParams","auto","prototypes","axis","matrix","curTransform","transformMatrix","curStyle","currentStyle","WebKitCSSMatrix","MozTransform","OTransform","MsTransform","msTransform","m41","m42","translateTo","translateBounds","newTranslate","onTranslateToWrapperTransitionEnd","transition","transitionDuration","transitionDelay","moving","isLocked","cursor","unsetGrabCursor","attachEvents","detachEvents","breakpoint","getBreakpoint","currentBreakpoint","breakpointParams","originalParams","wasMultiRow","isMultiRow","wasGrabCursor","isGrabCursor","wasEnabled","emitContainerClasses","wasModuleEnabled","isModuleEnabled","enable","directionChanged","needsReLoop","wasLoop","changeDirection","isEnabled","hasLoop","containerEl","currentHeight","innerHeight","points","point","minRatio","substr","sort","b","wasLocked","lastSlideRightEdge","addClasses","classNames","suffixes","resultClasses","item","prepareClasses","removeClasses","extendedDefaults","Swiper","swipers","newParams","needPerspectiveFix","String","major","minor","num","isSafariBrowser","need3dFix","calcBrowser","modules","__modules__","mod","extendParams","swiperParams","passedParams","velocity","trunc","clickTimeout","velocities","imagesToLoad","imagesLoaded","property","setProgress","cls","getSlideClasses","updates","exact","spv","breakLoop","translateValue","translated","newDirection","needUpdate","currentDirection","changeLanguageDirection","mount","mounted","toUpperCase","getWrapperSelector","slideSlots","hostEl","lazyElements","destroy","deleteInstance","cleanStyles","deleteProps","extendDefaults","newDefaults","installModule","use","checkProps","Navigation","getEl","res","toggleEl","subEl","disabledClass","lockClass","onPrevClick","onNextClick","initButton","destroyButton","hideOnClick","hiddenClass","navigationDisabledClass","_s","pagination","clickable","isHidden","toggle","Scrollbar","dragStartPos","dragSize","trackSize","divider","timeout","dragTimeout","scrollbar","dragEl","newSize","newPos","display","getPointerPosition","clientX","clientY","setDragPosition","positionRatio","box","getBoundingClientRect","clientTop","scrollY","scrollX","top","left","onDragStart","onDragMove","returnValue","onDragEnd","snapOnRelease","activeListener","passiveListener","eventMethod","swiperEl","horizontalClass","verticalClass","dragClass","draggable","scrollbarDisabledClass","prototypeGroup","protoMethod","observer","animationFrame","resizeHandler","orientationChangeHandler","ResizeObserver","newWidth","_ref2","contentBoxSize","contentRect","inlineSize","blockSize","observers","attach","MutationObserver","WebkitMutationObserver","mutations","observerUpdate","childList","characterData","observeParents","observeSlideChildren","containerParents","parents","parent","shape","code","country","svg","countryPath","setAttributeNS","buildSVGFor","xMin","xMax","yMin","yMax","getBBox","viewbox","toFixed","scaleToFitViewBox","channels","facebook","twitter","linkedin","whatsapp","email","messenger","da","attribute","def","onClickShareLink","_target","targetUrl","encodeURIComponent","_message","getChannelUrl","loadtips","json","tip","title","introduction","htmlString","maxLength","tempDiv","innerText","substring","stripAndTruncate","generateTurboStream","currentTime","scrollEndElemTop","startScrollOffset","runtime","ease","scroll","timestamp","tipsDialog","closeModal","prevTip","nextTip","loadModalForTip","showModal","currentNode","clickedTip","currentTarget","tipsMax","initTipsDialog","shareDialog","shareButton","initShareDialog","_dialog","checkImageInterval","carousel","numberField","number","setCustomValidity","feedback","offset","HTMLDocument","stamp","totalCF","total","getSegmentPercentage","round","segments","travel_footprint","food_footprint","housing_footprint","other_footprint","createChart","cfData","highest","getSegementHeight","lowest","colour","leData","percent","little_things","learning_frequency","charity_frequency","socialise_frequency","exercise_frequency","segment","wbData"],"sourceRoot":""}